@docyrus/docyrus 0.0.3 → 0.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/tui.mjs.map ADDED
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../apps/api-cli/src/tui/opentuiMain.tsx", "../../../apps/api-cli/src/tui/opentui/DocyrusOpenTuiApp.tsx", "../../../apps/api-cli/src/services/tuiProcessExecutor.ts", "../../../apps/api-cli/src/errors.ts", "../../../apps/api-cli/src/tui/opentui/commandInput.ts", "../../../apps/api-cli/src/tui/opentui/renderResult.tsx", "../../../apps/api-cli/src/tui/opentui/resultDocument.ts"],
4
+ "sourcesContent": ["/** @jsxImportSource @opentui/react */\nimport { createCliRenderer } from \"@opentui/core\";\nimport { createRoot } from \"@opentui/react\";\nimport { DocyrusOpenTuiApp } from \"./opentui/DocyrusOpenTuiApp\";\nimport type { ITuiProcessExecutionConfig } from \"../types\";\n\ninterface ITuiLaunchConfig {\n executionConfig: ITuiProcessExecutionConfig;\n version: string;\n}\n\nfunction readRequiredEnv(name: string): string {\n const value = process.env[name];\n if (!value || value.trim().length === 0) {\n throw new Error(`Missing required launch variable: ${name}`);\n }\n\n return value;\n}\n\nfunction readLaunchConfig(): ITuiLaunchConfig {\n return {\n version: process.env.DOCYRUS_TUI_VERSION || \"dev\",\n executionConfig: {\n executable: readRequiredEnv(\"DOCYRUS_TUI_EXECUTABLE\"),\n scriptPath: readRequiredEnv(\"DOCYRUS_TUI_SCRIPT\"),\n },\n };\n}\n\nasync function startTui(): Promise<void> {\n const launchConfig = readLaunchConfig();\n const renderer = await createCliRenderer({\n exitOnCtrlC: false,\n });\n\n const root = createRoot(renderer);\n root.render(\n <DocyrusOpenTuiApp\n executionConfig={launchConfig.executionConfig}\n version={launchConfig.version}\n />,\n );\n}\n\nvoid startTui().catch((error: unknown) => {\n const message = error instanceof Error\n ? error.message\n : String(error);\n\n console.error(`Failed to start Docyrus OpenTUI: ${message}`);\n process.exitCode = 1;\n});\n", "/** @jsxImportSource @opentui/react */\nimport { useKeyboard, useRenderer } from \"@opentui/react\";\nimport { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { createTuiProcessExecutor } from \"../../services/tuiProcessExecutor\";\nimport { parseCommandLine, useCommandInput } from \"./commandInput\";\nimport { renderResult } from \"./renderResult\";\nimport type {\n IDocyrusOpenTuiAppProps,\n ITuiContextSummary,\n ITuiEnvironmentSummary,\n ITuiHistoryEntry,\n ITuiLeftSection,\n ITuiPanelFocus,\n ITuiShortcutAction,\n} from \"./types\";\nimport type { ITuiCommandResult } from \"../../types\";\n\nconst SHORTCUTS: ITuiShortcutAction[] = [\n {\n id: 1,\n run: \"env list\",\n label: \"env list\",\n },\n {\n id: 2,\n run: \"auth who\",\n label: \"auth who\",\n },\n {\n id: 3,\n run: \"apps list\",\n label: \"apps list\",\n },\n {\n id: 4,\n run: \"discover namespaces\",\n label: \"discover namespaces\",\n },\n {\n id: 5,\n template: \"studio list-data-sources --appSlug \",\n label: \"insert: studio list-data-sources --appSlug \",\n },\n {\n id: 6,\n template: \"ds list <appSlug> <dataSourceSlug>\",\n label: \"insert: ds list <appSlug> <dataSourceSlug>\",\n },\n];\n\nconst SECTION_ORDER: ITuiLeftSection[] = [\"shortcuts\", \"history\", \"messages\", \"help\"];\nconst FOCUS_ORDER: ITuiPanelFocus[] = [\"input\", \"left\", \"result\"];\nconst ESC_ARM_TIMEOUT_MS = 1400;\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction extractMetadata(payload: unknown): {\n environment?: ITuiEnvironmentSummary;\n context?: ITuiContextSummary | null;\n} {\n if (!isRecord(payload)) {\n return {};\n }\n\n const environmentValue = payload.environment;\n const contextValue = payload.context;\n\n const environment = isRecord(environmentValue)\n && typeof environmentValue.id === \"string\"\n && typeof environmentValue.name === \"string\"\n ? { id: environmentValue.id, name: environmentValue.name }\n : undefined;\n\n if (contextValue === null) {\n return {\n environment,\n context: null,\n };\n }\n\n const context = isRecord(contextValue)\n && typeof contextValue.email === \"string\"\n && typeof contextValue.tenantDisplay === \"string\"\n ? {\n email: contextValue.email,\n tenantDisplay: contextValue.tenantDisplay,\n }\n : undefined;\n\n return {\n environment,\n context,\n };\n}\n\nfunction toFailedResult(error: unknown, command: string): ITuiCommandResult {\n const message = error instanceof Error\n ? error.message\n : \"Invalid command syntax.\";\n\n return {\n ok: false,\n command,\n rawOutput: \"\",\n error: {\n message,\n },\n durationMs: 0,\n };\n}\n\nfunction formatHistoryLabel(entry: ITuiHistoryEntry): string {\n const status = entry.result.ok ? \"OK\" : \"ERR\";\n const command = entry.command || \"(root)\";\n return `${status} ${command} [${entry.result.durationMs}ms]`;\n}\n\nfunction preventDefault(keyEvent: { preventDefault?: () => void }): void {\n if (typeof keyEvent.preventDefault === \"function\") {\n keyEvent.preventDefault();\n }\n}\n\nfunction isEscapeKey(keyName: string): boolean {\n return keyName === \"escape\" || keyName === \"esc\";\n}\n\nfunction isEnterKey(keyName: string): boolean {\n return keyName === \"enter\" || keyName === \"return\";\n}\n\nexport function DocyrusOpenTuiApp(props: IDocyrusOpenTuiAppProps) {\n const renderer = useRenderer();\n\n const [input, setInput] = useState(\"\");\n const [entries, setEntries] = useState<ITuiHistoryEntry[]>([]);\n const [activeEntryId, setActiveEntryId] = useState<string | null>(null);\n const [systemMessages, setSystemMessages] = useState<string[]>([]);\n const [activeSection, setActiveSection] = useState<ITuiLeftSection>(\"shortcuts\");\n const [focusedPanel, setFocusedPanel] = useState<ITuiPanelFocus>(\"left\");\n const [environment, setEnvironment] = useState<ITuiEnvironmentSummary | undefined>();\n const [context, setContext] = useState<ITuiContextSummary | null | undefined>(undefined);\n const [isRunning, setIsRunning] = useState(false);\n const [spinnerFrame, setSpinnerFrame] = useState(0);\n const [selectedShortcutIndex, setSelectedShortcutIndex] = useState(0);\n const [selectedHistoryIndex, setSelectedHistoryIndex] = useState(0);\n const [isExitConfirmOpen, setIsExitConfirmOpen] = useState(false);\n const [isEscArmed, setIsEscArmed] = useState(false);\n\n const executor = useMemo(() => {\n return createTuiProcessExecutor({\n executionConfig: props.executionConfig,\n });\n }, [props.executionConfig]);\n\n const applyCommandResult = useCallback((result: ITuiCommandResult, command: string) => {\n const entry: ITuiHistoryEntry = {\n id: `${Date.now()}-${Math.random().toString(16).slice(2)}`,\n command,\n result,\n createdAt: Date.now(),\n };\n\n setEntries((previous) => [entry, ...previous]);\n setActiveEntryId(entry.id);\n setSelectedHistoryIndex(0);\n\n if (result.messages && result.messages.length > 0) {\n setSystemMessages((previous) => [...previous, ...result.messages || []]);\n }\n\n if (result.ok && result.data !== undefined) {\n const metadata = extractMetadata(result.data);\n if (metadata.environment) {\n setEnvironment(metadata.environment);\n }\n\n if (metadata.context !== undefined) {\n setContext(metadata.context);\n }\n }\n }, []);\n\n const executeArgs = useCallback(async(args: string[], commandText: string) => {\n setIsRunning(true);\n try {\n const result = await executor.runCliCommand(args);\n applyCommandResult(result, commandText);\n }\n finally {\n setIsRunning(false);\n }\n }, [applyCommandResult, executor]);\n\n const executeLine = useCallback((line: string) => {\n let args: string[];\n\n try {\n args = parseCommandLine(line);\n }\n catch (error: unknown) {\n applyCommandResult(toFailedResult(error, line.trim()), line.trim());\n return;\n }\n\n if (args.length === 0) {\n return;\n }\n\n void executeArgs(args, line.trim());\n }, [applyCommandResult, executeArgs]);\n\n const runHistoryEntry = useCallback(async(entry: ITuiHistoryEntry) => {\n if (entry.command === \"(root)\") {\n await executeArgs([], \"(root)\");\n return;\n }\n\n try {\n const args = parseCommandLine(entry.command);\n await executeArgs(args, entry.command);\n }\n catch (error: unknown) {\n applyCommandResult(toFailedResult(error, entry.command), entry.command);\n }\n }, [applyCommandResult, executeArgs]);\n\n const applyShortcut = useCallback((shortcutId: number) => {\n const action = SHORTCUTS.find((shortcut) => shortcut.id === shortcutId);\n if (!action || isRunning) {\n return;\n }\n\n if (action.template) {\n setInput(action.template);\n setFocusedPanel(\"input\");\n return;\n }\n\n if (action.run) {\n void executeArgs(parseCommandLine(action.run), action.run);\n }\n }, [executeArgs, isRunning]);\n\n const setSectionByIndex = useCallback((index: number) => {\n const safeIndex = index < 0\n ? SECTION_ORDER.length - 1\n : index >= SECTION_ORDER.length\n ? 0\n : index;\n\n const section = SECTION_ORDER[safeIndex];\n if (section) {\n setActiveSection(section);\n }\n }, []);\n\n const nextSection = useCallback(() => {\n const currentIndex = SECTION_ORDER.indexOf(activeSection);\n setSectionByIndex(currentIndex + 1);\n }, [activeSection, setSectionByIndex]);\n\n const previousSection = useCallback(() => {\n const currentIndex = SECTION_ORDER.indexOf(activeSection);\n setSectionByIndex(currentIndex - 1);\n }, [activeSection, setSectionByIndex]);\n\n const setPanelByIndex = useCallback((index: number) => {\n const safeIndex = index < 0\n ? FOCUS_ORDER.length - 1\n : index >= FOCUS_ORDER.length\n ? 0\n : index;\n\n const panel = FOCUS_ORDER[safeIndex];\n if (panel) {\n setFocusedPanel(panel);\n }\n }, []);\n\n const nextPanel = useCallback(() => {\n const currentIndex = FOCUS_ORDER.indexOf(focusedPanel);\n setPanelByIndex(currentIndex + 1);\n }, [focusedPanel, setPanelByIndex]);\n\n const previousPanel = useCallback(() => {\n const currentIndex = FOCUS_ORDER.indexOf(focusedPanel);\n setPanelByIndex(currentIndex - 1);\n }, [focusedPanel, setPanelByIndex]);\n\n const openExitConfirmation = useCallback(() => {\n setIsEscArmed(false);\n setIsExitConfirmOpen(true);\n }, []);\n\n const closeExitConfirmation = useCallback(() => {\n setIsExitConfirmOpen(false);\n setIsEscArmed(false);\n }, []);\n\n const armEscapeExit = useCallback(() => {\n setIsEscArmed(true);\n setSystemMessages((previous) => {\n const lastMessage = previous[previous.length - 1];\n const message = \"Press Esc again to open exit confirmation.\";\n if (lastMessage === message) {\n return previous;\n }\n\n return [...previous, message];\n });\n }, []);\n\n const { submitInput } = useCommandInput({\n busy: isRunning,\n input,\n isInputFocused: focusedPanel === \"input\",\n isModalOpen: isExitConfirmOpen,\n setInput,\n onSubmit: executeLine,\n onClear: () => {\n setEntries([]);\n setActiveEntryId(null);\n setSystemMessages([]);\n setSelectedHistoryIndex(0);\n },\n onShortcut: applyShortcut,\n onNextSection: nextSection,\n onPreviousSection: previousSection,\n onJumpSection: (section) => {\n setActiveSection(section);\n setFocusedPanel(\"left\");\n },\n });\n\n useKeyboard((keyEvent) => {\n const keyName = keyEvent.name;\n\n if (isExitConfirmOpen) {\n if (isEscapeKey(keyName)) {\n preventDefault(keyEvent);\n closeExitConfirmation();\n return;\n }\n\n if (isEnterKey(keyName)) {\n preventDefault(keyEvent);\n renderer.destroy();\n return;\n }\n\n if (keyEvent.ctrl && keyName === \"c\") {\n renderer.destroy();\n }\n\n return;\n }\n\n if (keyEvent.ctrl && keyName === \"c\") {\n renderer.destroy();\n return;\n }\n\n if (isEscapeKey(keyName)) {\n preventDefault(keyEvent);\n\n if (focusedPanel !== \"input\") {\n setFocusedPanel(\"input\");\n armEscapeExit();\n return;\n }\n\n if (!isEscArmed) {\n armEscapeExit();\n return;\n }\n\n openExitConfirmation();\n return;\n }\n\n if (keyName === \"left\" || keyName === \"right\") {\n if (focusedPanel === \"input\" && input.length > 0) {\n return;\n }\n\n preventDefault(keyEvent);\n setIsEscArmed(false);\n if (keyName === \"left\") {\n previousPanel();\n }\n else {\n nextPanel();\n }\n return;\n }\n\n if (\n keyName === \"r\"\n && activeSection === \"history\"\n && focusedPanel === \"left\"\n && input.length === 0\n && !isRunning\n ) {\n const entry = entries[selectedHistoryIndex];\n if (entry) {\n void runHistoryEntry(entry);\n }\n }\n });\n\n useEffect(() => {\n void executeArgs([], \"(root)\");\n }, [executeArgs]);\n\n useEffect(() => {\n if (!isEscArmed) {\n return;\n }\n\n const timer = setTimeout(() => {\n setIsEscArmed(false);\n }, ESC_ARM_TIMEOUT_MS);\n\n return () => {\n clearTimeout(timer);\n };\n }, [isEscArmed]);\n\n useEffect(() => {\n if (!isRunning) {\n return;\n }\n\n const timer = setInterval(() => {\n setSpinnerFrame((previous) => (previous + 1) % 4);\n }, 120);\n\n return () => {\n clearInterval(timer);\n };\n }, [isRunning]);\n\n useEffect(() => {\n if (selectedHistoryIndex < entries.length) {\n return;\n }\n\n const nextIndex = Math.max(entries.length - 1, 0);\n setSelectedHistoryIndex(nextIndex);\n }, [entries.length, selectedHistoryIndex]);\n\n const spinner = useMemo(() => {\n return [\"|\", \"/\", \"-\", \"\\\\\"][spinnerFrame] || \"|\";\n }, [spinnerFrame]);\n\n const activeEntry = useMemo(() => {\n if (activeEntryId) {\n const found = entries.find((entry) => entry.id === activeEntryId);\n if (found) {\n return found;\n }\n }\n\n return entries[0] || null;\n }, [activeEntryId, entries]);\n\n const sectionOptions = useMemo(() => {\n const ordered = [\n activeSection,\n ...SECTION_ORDER.filter((section) => section !== activeSection),\n ];\n\n return ordered.map((section) => ({\n name: section === \"shortcuts\"\n ? \"Shortcuts\"\n : section === \"history\"\n ? \"History\"\n : section === \"messages\"\n ? \"Messages\"\n : \"Help\",\n description: section === \"shortcuts\"\n ? \"Quick actions\"\n : section === \"history\"\n ? \"Past runs\"\n : section === \"messages\"\n ? \"System output\"\n : \"Key map\",\n value: section,\n }));\n }, [activeSection]);\n\n const shortcutOptions = useMemo(() => {\n return SHORTCUTS.map((shortcut) => ({\n name: `${shortcut.id}. ${shortcut.label}`,\n description: shortcut.run || shortcut.template || \"\",\n value: shortcut.id,\n }));\n }, []);\n\n const historyOptions = useMemo(() => {\n return entries.map((entry) => ({\n name: formatHistoryLabel(entry),\n description: new Date(entry.createdAt).toLocaleTimeString(),\n value: entry.id,\n }));\n }, [entries]);\n\n const renderLeftSection = () => {\n if (activeSection === \"shortcuts\") {\n return (\n <select\n focused={focusedPanel === \"left\" && !isExitConfirmOpen}\n options={shortcutOptions}\n selectedIndex={selectedShortcutIndex}\n onChange={(index) => {\n setSelectedShortcutIndex(index);\n }}\n onSelect={(index, option) => {\n setSelectedShortcutIndex(index);\n const shortcutId = Number(option?.value || 0);\n if (Number.isFinite(shortcutId) && shortcutId > 0) {\n applyShortcut(shortcutId);\n }\n }}\n showScrollIndicator\n style={{\n flexGrow: 1,\n }}\n />\n );\n }\n\n if (activeSection === \"history\") {\n if (entries.length === 0) {\n return <text fg=\"gray\">No command history yet.</text>;\n }\n\n return (\n <box flexDirection=\"column\" flexGrow={1}>\n <text fg=\"cyan\">Press `r` to re-run selected command.</text>\n <select\n focused={focusedPanel === \"left\" && !isExitConfirmOpen}\n options={historyOptions}\n selectedIndex={selectedHistoryIndex}\n onChange={(index, option) => {\n setSelectedHistoryIndex(index);\n if (typeof option?.value === \"string\") {\n setActiveEntryId(option.value);\n }\n }}\n onSelect={(index, option) => {\n setSelectedHistoryIndex(index);\n if (typeof option?.value === \"string\") {\n setActiveEntryId(option.value);\n }\n }}\n showScrollIndicator\n style={{\n flexGrow: 1,\n }}\n />\n </box>\n );\n }\n\n if (activeSection === \"messages\") {\n return (\n <scrollbox focused={focusedPanel === \"left\" && !isExitConfirmOpen} style={{ height: \"100%\" }}>\n {systemMessages.length === 0 && <text fg=\"gray\">No messages yet.</text>}\n {systemMessages.map((line, index) => (\n <text key={`message-${index}`}>{line}</text>\n ))}\n </scrollbox>\n );\n }\n\n return (\n <scrollbox focused={focusedPanel === \"left\" && !isExitConfirmOpen} style={{ height: \"100%\" }}>\n <text fg=\"cyan\">Key Bindings</text>\n <text>Left/Right: switch focused panel</text>\n <text>Up/Down in left lists: selection</text>\n <text>Up/Down in result: scroll</text>\n <text>Enter: run command</text>\n <text>Up/Down in input: command history</text>\n <text>Tab / Shift+Tab: next/prev left section</text>\n <text>[ / ]: next/prev left section</text>\n <text>s/h/m/?: jump to section</text>\n <text>1..6: run shortcut</text>\n <text>Ctrl+L: clear command and message history</text>\n <text>Esc (other panel): focus command input</text>\n <text>Esc then Esc: open exit confirmation</text>\n <text>Enter (confirm): exit, Esc (confirm): cancel</text>\n <text>Ctrl+C: force quit</text>\n </scrollbox>\n );\n };\n\n return (\n <box flexDirection=\"column\" width=\"100%\" height=\"100%\" padding={1}>\n <box flexDirection=\"row\" justifyContent=\"space-between\" marginBottom={1} paddingX={1}>\n <ascii-font text=\"DOCYRUS\" font=\"tiny\" color=\"#7aa2f7\" />\n\n <box flexDirection=\"column\" alignItems=\"flex-end\" justifyContent=\"center\">\n <text>env: {environment ? `${environment.name} (${environment.id})` : \"unknown\"}</text>\n <text>status: {isRunning ? `${spinner} running` : \"idle\"}</text>\n <text>account: {context ? context.email : \"not-authenticated\"}</text>\n <text>tenant: {context ? context.tenantDisplay : \"-\"}</text>\n </box>\n </box>\n\n <box flexDirection=\"row\" flexGrow={1}>\n <box\n width={46}\n marginRight={1}\n border\n borderStyle=\"rounded\"\n borderColor={focusedPanel === \"left\" ? \"#7aa2f7\" : \"#3b4261\"}\n padding={1}\n flexDirection=\"column\"\n >\n <tab-select\n options={sectionOptions}\n onChange={(_index, option) => {\n if (typeof option?.value === \"string\") {\n setActiveSection(option.value as ITuiLeftSection);\n }\n }}\n />\n\n <box marginTop={1} flexGrow={1} border borderStyle=\"single\" borderColor=\"#414868\" padding={1}>\n {renderLeftSection()}\n </box>\n </box>\n\n <box\n border\n borderStyle=\"double\"\n borderColor={focusedPanel === \"result\" ? \"#9ece6a\" : \"#3b4261\"}\n padding={1}\n flexGrow={1}\n >\n {renderResult({\n entry: activeEntry,\n isFocused: focusedPanel === \"result\" && !isExitConfirmOpen,\n })}\n </box>\n </box>\n\n <box\n border\n borderStyle=\"rounded\"\n borderColor={focusedPanel === \"input\" ? \"#e0af68\" : \"#3b4261\"}\n padding={1}\n marginTop={1}\n >\n <text fg=\"cyan\">&gt; </text>\n <input\n style={{ flexGrow: 1 }}\n value={input}\n placeholder=\"Type a command...\"\n onChange={(value) => {\n setInput(value);\n }}\n onSubmit={(value) => {\n submitInput(typeof value === \"string\" ? value : undefined);\n }}\n focused={!isRunning && focusedPanel === \"input\" && !isExitConfirmOpen}\n />\n </box>\n\n {isExitConfirmOpen && (\n <box\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n width: \"100%\",\n height: \"100%\",\n }}\n alignItems=\"center\"\n justifyContent=\"center\"\n >\n <box\n width={58}\n padding={1}\n border\n borderStyle=\"double\"\n borderColor=\"#f7768e\"\n flexDirection=\"column\"\n style={{\n backgroundColor: \"#1f2335\",\n }}\n >\n <text fg=\"#f7768e\">Exit Docyrus TUI?</text>\n <text>Press Enter to exit.</text>\n <text>Press Esc to stay in this session.</text>\n </box>\n </box>\n )}\n </box>\n );\n}\n", "import { spawnSync } from \"node:child_process\";\nimport { UserInputError } from \"../errors\";\nimport type { ITuiCommandResult, ITuiProcessExecutionConfig } from \"../types\";\n\ninterface ICreateTuiProcessExecutorOptions {\n executionConfig: ITuiProcessExecutionConfig;\n spawnSyncFn?: typeof spawnSync;\n now?: () => number;\n}\n\ninterface IParsedCommandOutput {\n data: unknown;\n messages: string[];\n}\n\nfunction normalizeCommandArg(arg: string): string {\n return arg.trim();\n}\n\nexport function sanitizeTuiCommandArgs(args: string[]): string[] {\n const normalized = args\n .map(normalizeCommandArg)\n .filter((value) => value.length > 0);\n\n const withoutBinary = normalized[0] === \"docyrus\"\n ? normalized.slice(1)\n : normalized;\n\n const withoutJson = withoutBinary.filter((value) => value !== \"--json\");\n\n const firstArg = withoutJson[0];\n if (firstArg === \"tui\" || firstArg === \"interactive\") {\n throw new UserInputError(\"Already in TUI session.\");\n }\n\n return withoutJson;\n}\n\nfunction parseJsonOutput(rawOutput: string): IParsedCommandOutput {\n const trimmedOutput = rawOutput.trim();\n if (!trimmedOutput) {\n throw new UserInputError(\"Command produced no output.\");\n }\n\n const lines = trimmedOutput\n .split(/\\r?\\n/)\n .map((line) => line.trim())\n .filter((line) => line.length > 0);\n\n const lastLine = lines.at(-1);\n if (lastLine) {\n try {\n return {\n data: JSON.parse(lastLine) as unknown,\n messages: lines.slice(0, -1),\n };\n }\n catch {\n // fallback to whole-output JSON parsing below\n }\n }\n\n try {\n return {\n data: JSON.parse(trimmedOutput) as unknown,\n messages: [],\n };\n }\n catch (error: unknown) {\n throw new UserInputError(\"Invalid command output format. Expected JSON output.\", {\n cause: error,\n rawOutput: trimmedOutput,\n });\n }\n}\n\nfunction toErrorMessage(error: unknown): string {\n if (error instanceof Error && error.message.trim().length > 0) {\n return error.message;\n }\n\n return \"Failed to execute command.\";\n}\n\nexport function createTuiProcessExecutor(options: ICreateTuiProcessExecutorOptions) {\n const spawnCommand = options.spawnSyncFn ?? spawnSync;\n const now = options.now ?? Date.now;\n\n const runCliCommand = async(args: string[]): Promise<ITuiCommandResult> => {\n const startedAt = now();\n let commandArgs: string[] = [];\n let commandLabel = \"\";\n let rawOutput = \"\";\n let messageLines: string[] = [];\n\n try {\n commandArgs = sanitizeTuiCommandArgs(args);\n commandLabel = commandArgs.join(\" \").trim();\n\n const spawnResult = spawnCommand(\n options.executionConfig.executable,\n [\n options.executionConfig.scriptPath,\n ...commandArgs,\n \"--json\",\n ],\n {\n encoding: \"utf8\",\n cwd: options.executionConfig.cwd,\n env: {\n ...process.env,\n ...(options.executionConfig.env || {}),\n },\n },\n );\n\n const stdout = spawnResult.stdout?.toString() || \"\";\n const stderr = spawnResult.stderr?.toString() || \"\";\n rawOutput = stdout.trim();\n\n if (spawnResult.error) {\n throw spawnResult.error;\n }\n\n if (spawnResult.status !== 0) {\n const details = [rawOutput, stderr.trim()]\n .filter((line) => line.length > 0)\n .join(\"\\n\");\n\n return {\n ok: false,\n command: commandLabel,\n rawOutput: details,\n error: {\n message: stderr.trim() || `Command exited with code ${spawnResult.status ?? \"unknown\"}.`,\n details: details || undefined,\n },\n durationMs: now() - startedAt,\n };\n }\n\n const parsed = parseJsonOutput(stdout);\n messageLines = parsed.messages;\n\n return {\n ok: true,\n command: commandLabel,\n rawOutput,\n data: parsed.data,\n durationMs: now() - startedAt,\n messages: messageLines.length > 0 ? messageLines : undefined,\n };\n }\n catch (error: unknown) {\n return {\n ok: false,\n command: commandLabel,\n rawOutput,\n error: {\n message: toErrorMessage(error),\n details: rawOutput || undefined,\n },\n durationMs: now() - startedAt,\n messages: messageLines.length > 0 ? messageLines : undefined,\n };\n }\n };\n\n return {\n runCliCommand,\n };\n}\n", "import type { IApiErrorResponse } from \"./types\";\n\nexport class ApplicationError extends Error {\n constructor(\n message: string,\n public readonly data: Record<string, unknown> = {},\n public readonly httpStatusCode = 500,\n ) {\n super(message);\n }\n}\n\nexport class UserInputError extends ApplicationError {\n constructor(message: string, data: Record<string, unknown> = {}) {\n super(message, data, 400);\n }\n}\n\nexport class AuthSessionError extends ApplicationError {\n constructor(message: string, data: Record<string, unknown> = {}) {\n super(message, data, 401);\n }\n}\n\nexport class ApiResponseError extends ApplicationError {\n constructor(public readonly details: IApiErrorResponse) {\n super(details.error_description || details.error || \"Docyrus API request failed\", details, details.status || 500);\n }\n}\n", "import { useKeyboard } from \"@opentui/react\";\nimport { useCallback, useState } from \"react\";\nimport type { KeyEvent } from \"@opentui/core\";\nimport type { ITuiLeftSection } from \"./types\";\n\ninterface IUseCommandInputOptions {\n busy: boolean;\n input: string;\n isInputFocused: boolean;\n isModalOpen?: boolean;\n setInput: (value: string) => void;\n onSubmit: (command: string) => void;\n onClear: () => void;\n onShortcut: (shortcut: number) => void;\n onNextSection: () => void;\n onPreviousSection: () => void;\n onJumpSection: (section: ITuiLeftSection) => void;\n}\n\ninterface IUseCommandInputResult {\n submitInput: (value?: string) => void;\n}\n\nexport function parseCommandLine(command: string): string[] {\n const args: string[] = [];\n let current = \"\";\n let quote: \"\\\"\" | \"'\" | null = null;\n let escaped = false;\n\n for (const char of command) {\n if (escaped) {\n current += char;\n escaped = false;\n continue;\n }\n\n if (char === \"\\\\\") {\n escaped = true;\n continue;\n }\n\n if (quote) {\n if (char === quote) {\n quote = null;\n }\n else {\n current += char;\n }\n continue;\n }\n\n if (char === \"\\\"\" || char === \"'\") {\n quote = char;\n continue;\n }\n\n if (/\\s/.test(char)) {\n if (current.length > 0) {\n args.push(current);\n current = \"\";\n }\n continue;\n }\n\n current += char;\n }\n\n if (quote) {\n throw new Error(\"Invalid command syntax: unmatched quote.\");\n }\n\n if (escaped) {\n current += \"\\\\\";\n }\n\n if (current.length > 0) {\n args.push(current);\n }\n\n return args;\n}\n\nfunction preventDefault(event: KeyEvent): void {\n if (typeof event.preventDefault === \"function\") {\n event.preventDefault();\n }\n}\n\nfunction resolveSectionJumpKey(keyName: string, shift: boolean): ITuiLeftSection | null {\n if (keyName === \"s\") {\n return \"shortcuts\";\n }\n\n if (keyName === \"h\") {\n return \"history\";\n }\n\n if (keyName === \"m\") {\n return \"messages\";\n }\n\n if (keyName === \"?\" || (keyName === \"/\" && shift)) {\n return \"help\";\n }\n\n return null;\n}\n\nexport function useCommandInput(options: IUseCommandInputOptions): IUseCommandInputResult {\n const [history, setHistory] = useState<string[]>([]);\n const [historyCursor, setHistoryCursor] = useState<number | null>(null);\n const [draftInput, setDraftInput] = useState(\"\");\n\n const submitInput = useCallback((value?: string) => {\n if (options.busy) {\n return;\n }\n\n const trimmed = (value ?? options.input).trim();\n if (trimmed.length === 0) {\n return;\n }\n\n setHistory((previous) => {\n if (previous[0] === trimmed) {\n return previous;\n }\n\n return [trimmed, ...previous];\n });\n\n setHistoryCursor(null);\n setDraftInput(\"\");\n options.setInput(\"\");\n options.onSubmit(trimmed);\n }, [options]);\n\n const recallHistory = useCallback((direction: \"up\" | \"down\") => {\n if (history.length === 0) {\n return;\n }\n\n if (direction === \"up\") {\n if (historyCursor === null) {\n setDraftInput(options.input);\n setHistoryCursor(0);\n options.setInput(history[0] || \"\");\n return;\n }\n\n const nextCursor = Math.min(historyCursor + 1, history.length - 1);\n setHistoryCursor(nextCursor);\n options.setInput(history[nextCursor] || \"\");\n return;\n }\n\n if (historyCursor === null) {\n return;\n }\n\n const nextCursor = historyCursor - 1;\n if (nextCursor < 0) {\n setHistoryCursor(null);\n options.setInput(draftInput);\n return;\n }\n\n setHistoryCursor(nextCursor);\n options.setInput(history[nextCursor] || \"\");\n }, [draftInput, history, historyCursor, options]);\n\n useKeyboard((keyEvent) => {\n if (options.isModalOpen) {\n return;\n }\n\n const keyName = keyEvent.name;\n\n if (keyEvent.ctrl && keyName === \"l\") {\n preventDefault(keyEvent);\n options.onClear();\n return;\n }\n\n if (keyName === \"tab\") {\n preventDefault(keyEvent);\n if (keyEvent.shift) {\n options.onPreviousSection();\n return;\n }\n\n options.onNextSection();\n return;\n }\n\n if (keyName === \"[\") {\n preventDefault(keyEvent);\n options.onPreviousSection();\n return;\n }\n\n if (keyName === \"]\") {\n preventDefault(keyEvent);\n options.onNextSection();\n return;\n }\n\n if (options.isInputFocused && keyName === \"up\") {\n preventDefault(keyEvent);\n recallHistory(\"up\");\n return;\n }\n\n if (options.isInputFocused && keyName === \"down\") {\n preventDefault(keyEvent);\n recallHistory(\"down\");\n return;\n }\n\n if (options.input.length === 0) {\n const jumpSection = resolveSectionJumpKey(keyName, Boolean(keyEvent.shift));\n if (jumpSection) {\n preventDefault(keyEvent);\n options.onJumpSection(jumpSection);\n return;\n }\n }\n\n if (options.busy) {\n return;\n }\n\n if (options.input.length === 0 && /^[1-6]$/.test(keyName)) {\n preventDefault(keyEvent);\n options.onShortcut(Number(keyName));\n }\n });\n\n return {\n submitInput,\n };\n}\n", "/** @jsxImportSource @opentui/react */\nimport { RGBA, SyntaxStyle } from \"@opentui/core\";\nimport type { ReactNode } from \"react\";\nimport { buildResultDocument, serializeResultDocument } from \"./resultDocument\";\nimport type { ITuiHistoryEntry } from \"./types\";\n\nlet jsonSyntaxStyle: SyntaxStyle | null = null;\n\nfunction getJsonSyntaxStyle(): SyntaxStyle {\n if (jsonSyntaxStyle) {\n return jsonSyntaxStyle;\n }\n\n jsonSyntaxStyle = SyntaxStyle.fromStyles({\n default: {\n fg: RGBA.fromHex(\"#d4d4d4\"),\n },\n property: {\n fg: RGBA.fromHex(\"#9cdcfe\"),\n },\n string: {\n fg: RGBA.fromHex(\"#ce9178\"),\n },\n number: {\n fg: RGBA.fromHex(\"#b5cea8\"),\n },\n keyword: {\n fg: RGBA.fromHex(\"#569cd6\"),\n },\n constant: {\n fg: RGBA.fromHex(\"#4fc1ff\"),\n },\n punctuation: {\n fg: RGBA.fromHex(\"#c586c0\"),\n },\n operator: {\n fg: RGBA.fromHex(\"#d4d4d4\"),\n },\n });\n\n return jsonSyntaxStyle;\n}\n\nexport function renderResult(params: {\n entry: ITuiHistoryEntry | null;\n isFocused: boolean;\n}): ReactNode {\n const {\n entry,\n isFocused,\n } = params;\n\n if (!entry) {\n return <text fg=\"yellow\">No command executed yet.</text>;\n }\n\n const document = buildResultDocument(entry);\n const json = serializeResultDocument(document);\n\n return (\n <box flexDirection=\"column\" width=\"100%\" height=\"100%\">\n <box paddingBottom={1}>\n <text fg={document.ok ? \"green\" : \"red\"}>\n {document.ok ? \"OK\" : \"ERR\"} {document.command} [{document.durationMs}ms]\n </text>\n </box>\n\n <box flexGrow={1} width=\"100%\" height=\"100%\">\n <scrollbox focused={isFocused} style={{ height: \"100%\" }}>\n <code\n width=\"100%\"\n content={json}\n filetype=\"json\"\n syntaxStyle={getJsonSyntaxStyle()}\n streaming={false}\n conceal={false}\n />\n </scrollbox>\n </box>\n </box>\n );\n}\n", "import type { ITuiHistoryEntry, ITuiResultDocument } from \"./types\";\n\nfunction toErrorPayload(entry: ITuiHistoryEntry): Record<string, unknown> {\n return {\n message: entry.result.error?.message || \"Command failed.\",\n details: entry.result.error?.details,\n };\n}\n\nfunction buildPayload(entry: ITuiHistoryEntry): unknown {\n if (entry.result.ok) {\n return entry.result.data ?? null;\n }\n\n return toErrorPayload(entry);\n}\n\nexport function buildResultDocument(entry: ITuiHistoryEntry): ITuiResultDocument {\n return {\n command: entry.command || \"(root)\",\n ok: entry.result.ok,\n durationMs: entry.result.durationMs,\n timestamp: new Date(entry.createdAt).toISOString(),\n payload: buildPayload(entry),\n messages: entry.result.messages,\n rawOutput: entry.result.rawOutput || undefined,\n };\n}\n\nexport function serializeResultDocument(document: ITuiResultDocument): string {\n try {\n const result = JSON.stringify(document, null, 2);\n if (!result) {\n return \"null\";\n }\n\n return result;\n }\n catch (error: unknown) {\n const message = error instanceof Error\n ? error.message\n : String(error);\n\n return JSON.stringify({\n command: document.command,\n ok: false,\n durationMs: document.durationMs,\n timestamp: document.timestamp,\n payload: {\n message: \"Serialization failed\",\n details: message,\n },\n }, null, 2);\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["useKeyboard", "useCallback", "useState", "nextCursor", "jsx", "jsxs", "preventDefault", "useState", "useCallback", "useKeyboard", "jsx"]
7
+ }