import type { WorkspaceTerminalLine } from "./sf-workspace-store"; import { getUserMode } from "./use-user-mode"; export type SFViewName = | "dashboard" | "power" | "chat" | "roadmap" | "files" | "activity" | "visualize"; export function navigateToSFView(view: SFViewName): void { if (typeof window === "undefined") return; window.dispatchEvent( new CustomEvent("sf:navigate-view", { detail: { view } }), ); } /** * Dispatch a workflow action command through the session command pipeline * and navigate to the Power User Mode view. * * `dispatch` should be a function that sends the command through the workspace * store (e.g. `sendCommand(buildPromptCommand(command, bridge))`), so the * command is processed by the agent session — not just injected as raw PTY * keystrokes. */ export function executeWorkflowActionInPowerMode({ dispatch, }: { dispatch: () => Promise; }): void { dispatch().catch((error) => { console.error("[workflow-action] dispatch failed:", error); }); const mode = getUserMode(); navigateToSFView(mode === "vibe-coder" ? "chat" : "power"); } export function derivePendingWorkflowCommandLabel({ commandInFlight, terminalLines, }: { commandInFlight: string | null; terminalLines: WorkspaceTerminalLine[]; }): string | null { if (!commandInFlight) return null; for (let index = terminalLines.length - 1; index >= 0; index -= 1) { const line = terminalLines[index]; if (line.type !== "input") continue; const text = line.content.trim(); if (text) return text; } if (commandInFlight === "prompt") return "Sending command"; return `/${commandInFlight}`; }