// Command palette v2 — scenarios, steps, tour, scenes, recents. import { useEffect, useMemo } from "react"; import { Command } from "cmdk"; import { useApp, scenarioById } from "../state/store"; import { Play, Branch, Bot, Check, Sparkles, Home, History as HistoryIcon, Layers, Search, Refresh } from "./icons"; export default function CommandBar() { const open = useApp((s) => s.cmdOpen); const setOpen = useApp((s) => s.setCmdOpen); const setScenarioId = useApp((s) => s.setScenarioId); const setSelectedStepId = useApp((s) => s.setSelectedStepId); const startTour = useApp((s) => s.startTour); const setScene = useApp((s) => s.setScene); const recents = useApp((s) => s.recents); const scenarioId = useApp((s) => s.scenarioId); const pushRecent = useApp((s) => s.pushRecent); const scenarios = useApp((s) => s.scenarios); const mode = useApp((s) => s.mode); const setMode = useApp((s) => s.setMode); const pushToast = useApp((s) => s.pushToast); const sc = scenarioById(scenarioId); const previewAction = (label: string) => { pushToast("info", `${label} is preview-only in this demo. Wire to /api/runtime/transactions to make it real.`); }; useEffect(() => { const onKey = (e: KeyboardEvent) => { if ((e.metaKey || e.ctrlKey) && e.key.toLowerCase() === "k") { e.preventDefault(); setOpen(!open); } if (e.key === "Escape" && open) setOpen(false); }; document.addEventListener("keydown", onKey); return () => document.removeEventListener("keydown", onKey); }, [open, setOpen]); const stepItems = useMemo(() => sc?.steps ?? [], [sc]); if (!open) return null; const close = () => setOpen(false); return (
e.stopPropagation()} label="Command bar">
esc
No matches. {recents.length > 0 && ( {recents.map((r, i) => ( { pushRecent(r); close(); }}> {r} ))} )} { setScene("landing"); close(); }}> Landing { setScene("mission"); close(); }}> Mission Control { setScene("history"); close(); }}> Run History { startTour(); close(); }}> Start guided tour presenter mode {scenarios.map((s) => ( { setScenarioId(s.id); setScene("mission"); close(); }} > {s.family.label} {s.live ? "live" : "blueprint"} · {s.defName} ))} {sc && ( {stepItems.map((st) => ( { setSelectedStepId(st.id); setScene("mission"); close(); }} > {st.name} {st.kind} ))} )} { setMode("live"); close(); }}> {mode === "live" ? "Refresh live scenarios" : "Switch to LIVE mode (fetch demo.flow-master.ai)"} {mode === "live" ? "re-fetch" : "in-browser"} { setMode("snapshot"); close(); }}> Switch to SNAPSHOT mode bundled JSON { previewAction("Start runtime instance"); close(); }}> Start runtime instance preview { previewAction("Dispatch sidekick agent"); close(); }}> Dispatch sidekick agent preview { previewAction("Confirm awaiting agent runs"); close(); }}> Confirm awaiting agent runs {sc?.agentRuns.length ?? 0} pending · preview
); }