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 Kbd from "./kbd" 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(() => { if (instanceAgents().length === 0) { fetchAgents(props.instanceId).catch(console.error) } }) const handleChange = async (value: Agent | null) => { if (value && value.name !== props.currentAgent) { await props.onAgentChange(value.name) } } return (
) }