import { Select } from "@kobalte/core/select" import { For, Show, createEffect, createMemo } from "solid-js" import { agents, fetchAgents, sessions } from "../stores/sessions" import { ChevronDown } from "lucide-solid" import type { Agent } from "../types/session" import { getLogger } from "../lib/logger" const log = getLogger("session") interface AgentSelectorProps { instanceId: string sessionId: string currentAgent: string onAgentChange: (agent: string) => Promise } export default function AgentSelector(props: AgentSelectorProps) { const instanceAgents = () => agents().get(props.instanceId) || [] const session = createMemo(() => { const instanceSessions = sessions().get(props.instanceId) return instanceSessions?.get(props.sessionId) }) const isChildSession = createMemo(() => { return session()?.parentId !== null && session()?.parentId !== undefined }) const availableAgents = createMemo(() => { const allAgents = instanceAgents() if (isChildSession()) { return allAgents } const filtered = allAgents.filter((agent) => agent.mode !== "subagent") const currentAgent = allAgents.find((a) => a.name === props.currentAgent) if (currentAgent && !filtered.find((a) => a.name === props.currentAgent)) { return [currentAgent, ...filtered] } return filtered }) createEffect(() => { const list = availableAgents() if (list.length === 0) return if (!list.some((agent) => agent.name === props.currentAgent)) { void props.onAgentChange(list[0].name) } }) createEffect(() => { if (instanceAgents().length === 0) { fetchAgents(props.instanceId).catch((error) => log.error("Failed to fetch agents", error)) } }) const handleChange = async (value: Agent | null) => { if (value && value.name !== props.currentAgent) { await props.onAgentChange(value.name) } } return ( ) }