// Command palette — scenarios, steps, scenes, recents, real actions. import { useEffect, useMemo, useState } from "react"; import { Command } from "cmdk"; import { useApp, scenarioById } from "../state/store"; import { Play, Branch, Bot, Check, Home, HistoryIcon, Layers, Search, Refresh, Cog, User } 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 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 refreshLive = useApp((s) => s.refreshLive); const startInstance = useApp((s) => s.startInstance); const executeAction = useApp((s) => s.executeAction); const pushToast = useApp((s) => s.pushToast); const setConsoleOpen = useApp((s) => s.setConsoleOpen); const setTheme = useApp((s) => s.setTheme); const theme = useApp((s) => s.theme); const actor = useApp((s) => s.actor); const sc = scenarioById(scenarioId); const [query, setQuery] = useState(""); useEffect(() => { if (!open) setQuery(""); }, [open]); 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); const canActLive = !!actor?.user_id && sc?.live && sc.headlineTx; const firstActionId = sc?.steps.find((s) => s.state === "running")?.actions?.[0]?.id; return (
e.stopPropagation()} label="Command bar">
esc
{!query && (
Try saying
  • start laptop procurement opens Studio with intake filled in
  • open procurement hub jumps to the Procurement hub
  • find case INC-4427 searches active runs by subject
  • my approvals opens the queue waiting on you
  • switch theme light ↔ dark
  • open settings identity, polling, console
)} No matches. {recents.length > 0 && ( {recents.map((r, i) => ( { pushRecent(r); close(); }}> {r} ))} )} { setScene("landing"); close(); }}> Home { setScene("mission"); close(); }}> Mission Control live work-items + process graph { setScene("approvals"); close(); }}> Approvals queue work waiting on you { setScene("studio"); close(); }}> Process Creation Wizard describe → publish → run { setScene("documents"); close(); }}> Documents data shapes per process { setScene("hub-procurement"); close(); }}> Procurement hub { setScene("hub-hr"); close(); }}> People hub { setScene("hub-it"); close(); }}> IT hub { setScene("geo-attendance"); close(); }}> Attendance map { setScene("chat"); close(); }}> Team chat { setScene("agent"); close(); }}> Command Assistant { setScene("explainer"); close(); }}> What is FlowMaster? { setScene("history"); close(); }}> Run history { setScene("settings"); close(); }}> Settings { refreshLive(); close(); }}> Refresh live data { setTheme(theme === "dark" ? "light" : "dark"); close(); }}> Switch to {theme === "dark" ? "light" : "dark"} theme { setConsoleOpen(true); close(); }}> Open API console for developers {sc?.live ? ( { close(); if (!actor?.user_id) { pushToast("warn", "Sign in to start a real instance."); return; } await startInstance(sc.defKey, `Started via Mission Control · ${new Date().toLocaleString()}`); }} > Start an instance of "{sc.defName}" writes to EA2 ) : ( Start new instance switch to a live scenario first )} {canActLive && firstActionId && ( { close(); await executeAction(sc!.headlineTx!, firstActionId); }} > Submit "{firstActionId}" on the headline case live · writes to EA2 )} { setScene("settings"); close(); }}> Sign in as someone else Settings → identity {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} ))} )}
); }