import { Component, createSignal, Show, For, createEffect } from "solid-js" import { Dialog } from "@kobalte/core/dialog" import type { Session, Agent } from "../types/session" import { getParentSessions, createSession, setActiveParentSession } from "../stores/sessions" import { instances, stopInstance } from "../stores/instances" import { agents } from "../stores/sessions" interface SessionPickerProps { instanceId: string open: boolean onClose: () => void } const SessionPicker: Component = (props) => { const [selectedAgent, setSelectedAgent] = createSignal("") const [isCreating, setIsCreating] = createSignal(false) const instance = () => instances().get(props.instanceId) const parentSessions = () => getParentSessions(props.instanceId) const agentList = () => agents().get(props.instanceId) || [] createEffect(() => { const list = agentList() if (list.length === 0) { setSelectedAgent("") return } const current = selectedAgent() if (!current || !list.some((agent) => agent.name === current)) { setSelectedAgent(list[0].name) } }) function formatRelativeTime(timestamp: number): string { const seconds = Math.floor((Date.now() - timestamp) / 1000) const minutes = Math.floor(seconds / 60) const hours = Math.floor(minutes / 60) const days = Math.floor(hours / 24) if (days > 0) return `${days}d ago` if (hours > 0) return `${hours}h ago` if (minutes > 0) return `${minutes}m ago` return "just now" } async function handleSessionSelect(sessionId: string) { setActiveParentSession(props.instanceId, sessionId) props.onClose() } async function handleNewSession() { setIsCreating(true) try { const session = await createSession(props.instanceId, selectedAgent()) setActiveParentSession(props.instanceId, session.id) props.onClose() } catch (error) { console.error("Failed to create session:", error) } finally { setIsCreating(false) } } async function handleCancel() { await stopInstance(props.instanceId) props.onClose() } return ( !open && handleCancel()}>
OpenCode • {instance()?.folder.split("/").pop()}
0} fallback={
No previous sessions
} >

Resume a session ({parentSessions().length}):

{(session) => ( )}
or

Start new session:

0} fallback={
Loading agents...
} >
) } export default SessionPicker