import { Prompt, type PromptRef } from "@tui/component/prompt" import { createMemo, Match, onMount, Show, Switch } from "solid-js" import { useTheme } from "@tui/context/theme" import { Logo } from "../component/logo" import { DidYouKnow, randomizeTip } from "../component/did-you-know" import { Locale } from "@/util/locale" import { useSync } from "../context/sync" import { Toast } from "../ui/toast" import { useArgs } from "../context/args" import { useDirectory } from "../context/directory" import { useRouteData } from "@tui/context/route" import { usePromptRef } from "../context/prompt" import { Installation } from "@/installation" import { useKV } from "../context/kv" import { useCommandDialog } from "../component/dialog-command" // TODO: what is the best way to do this? let once = false export function Home() { const sync = useSync() const kv = useKV() const { theme } = useTheme() const route = useRouteData("home") const promptRef = usePromptRef() const command = useCommandDialog() const mcp = createMemo(() => Object.keys(sync.data.mcp).length > 0) const mcpError = createMemo(() => { return Object.values(sync.data.mcp).some((x) => x.status === "failed") }) const connectedMcpCount = createMemo(() => { return Object.values(sync.data.mcp).filter((x) => x.status === "connected").length }) const isFirstTimeUser = createMemo(() => sync.data.session.length === 0) const tipsHidden = createMemo(() => kv.get("tips_hidden", false)) const showTips = createMemo(() => { return false // Don't show tips for first-time users if (isFirstTimeUser()) return false return !tipsHidden() }) command.register(() => [ { title: tipsHidden() ? "Show tips" : "Hide tips", value: "tips.toggle", keybind: "tips_toggle", category: "System", onSelect: (dialog) => { kv.set("tips_hidden", !tipsHidden()) dialog.clear() }, }, ]) const Hint = ( 0}> mcp errors{" "} ctrl+x s {" "} {Locale.pluralize(connectedMcpCount(), "{} mcp server", "{} mcp servers")} ) let prompt: PromptRef const args = useArgs() onMount(() => { randomizeTip() if (once) return if (route.initialPrompt) { prompt.set(route.initialPrompt) once = true } else if (args.prompt) { prompt.set({ input: args.prompt, parts: [] }) once = true prompt.submit() } }) const directory = useDirectory() return ( <> { prompt = r promptRef.set(r) }} hint={Hint} /> {directory()} 0 ? theme.success : theme.textMuted }}>⊙ {connectedMcpCount()} MCP /status {Installation.VERSION} ) }