@kb-labs/agent-entry 2.107.0 → 2.110.0
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/dist/cli/commands/diff.js +4 -4
- package/dist/cli/commands/diff.js.map +1 -1
- package/dist/cli/commands/history.js +6 -6
- package/dist/cli/commands/history.js.map +1 -1
- package/dist/cli/commands/quality-report.js +3 -3
- package/dist/cli/commands/quality-report.js.map +1 -1
- package/dist/cli/commands/rollback.js +7 -7
- package/dist/cli/commands/rollback.js.map +1 -1
- package/dist/cli/commands/run.d.ts +1 -9
- package/dist/cli/commands/run.js +43 -32
- package/dist/cli/commands/run.js.map +1 -1
- package/dist/cli/commands/trace-context.js +4 -4
- package/dist/cli/commands/trace-context.js.map +1 -1
- package/dist/cli/commands/trace-diagnose.js +3 -3
- package/dist/cli/commands/trace-diagnose.js.map +1 -1
- package/dist/cli/commands/trace-filter.d.ts +2 -9
- package/dist/cli/commands/trace-filter.js +5 -5
- package/dist/cli/commands/trace-filter.js.map +1 -1
- package/dist/cli/commands/trace-iteration.d.ts +2 -8
- package/dist/cli/commands/trace-iteration.js +5 -5
- package/dist/cli/commands/trace-iteration.js.map +1 -1
- package/dist/cli/commands/trace-stats.d.ts +2 -8
- package/dist/cli/commands/trace-stats.js +3 -3
- package/dist/cli/commands/trace-stats.js.map +1 -1
- package/dist/widgets/mf-manifest.json +5 -5
- package/dist/widgets/mf-stats.json +5 -5
- package/dist/widgets/remoteEntry.js +2 -2
- package/package.json +10 -10
|
@@ -29,14 +29,6 @@ type RunInput = {
|
|
|
29
29
|
json?: boolean;
|
|
30
30
|
argv?: string[];
|
|
31
31
|
};
|
|
32
|
-
declare const _default: _kb_labs_shared_command_kit.CommandHandlerV3<unknown, RunInput,
|
|
33
|
-
success: boolean;
|
|
34
|
-
summary: string;
|
|
35
|
-
filesCreated: string[];
|
|
36
|
-
filesModified: string[];
|
|
37
|
-
filesRead: string[];
|
|
38
|
-
iterations: number;
|
|
39
|
-
tokensUsed: number;
|
|
40
|
-
}>;
|
|
32
|
+
declare const _default: _kb_labs_shared_command_kit.CommandHandlerV3<unknown, RunInput, unknown>;
|
|
41
33
|
|
|
42
34
|
export { _default as default };
|
package/dist/cli/commands/run.js
CHANGED
|
@@ -566,7 +566,7 @@ var run_default = defineCommand({
|
|
|
566
566
|
if (plan.status !== "draft") {
|
|
567
567
|
ctx.ui?.warn?.(`Plan is not in draft state (current: ${plan.status}). Nothing to approve.`);
|
|
568
568
|
clearTimeout_();
|
|
569
|
-
return {
|
|
569
|
+
return { ok: false, error: "Command failed" };
|
|
570
570
|
}
|
|
571
571
|
const approvedAt = (/* @__PURE__ */ new Date()).toISOString();
|
|
572
572
|
const approvedPlan = { ...plan, status: "approved", approvedAt, approvalComment: "Approved via CLI --approve", updatedAt: approvedAt };
|
|
@@ -578,7 +578,7 @@ var run_default = defineCommand({
|
|
|
578
578
|
ctx.ui?.success?.(`Plan approved: ${approvedPlan.id} (session: ${sessionId})`);
|
|
579
579
|
ctx.ui?.info?.(`Ready to execute: kb agent run --session-id=${sessionId}`);
|
|
580
580
|
clearTimeout_();
|
|
581
|
-
return {
|
|
581
|
+
return { ok: true, result: { sessionId } };
|
|
582
582
|
} catch {
|
|
583
583
|
if (jsonOutput) {
|
|
584
584
|
ctx.ui?.json?.({ ok: false, error: { code: "NO_PLAN", message: `No approved plan for session ${sessionId}` } });
|
|
@@ -589,12 +589,12 @@ var run_default = defineCommand({
|
|
|
589
589
|
});
|
|
590
590
|
}
|
|
591
591
|
clearTimeout_();
|
|
592
|
-
return {
|
|
592
|
+
return { ok: false, error: "Command failed" };
|
|
593
593
|
}
|
|
594
594
|
}
|
|
595
595
|
ctx.ui?.error?.("Error: --task is required");
|
|
596
596
|
clearTimeout_();
|
|
597
|
-
return {
|
|
597
|
+
return { ok: false, error: "Command failed" };
|
|
598
598
|
}
|
|
599
599
|
let modeConfig;
|
|
600
600
|
if (mode !== "execute") {
|
|
@@ -726,19 +726,25 @@ var run_default = defineCommand({
|
|
|
726
726
|
}
|
|
727
727
|
const specSucceeded = specResult.success;
|
|
728
728
|
clearTimeout_();
|
|
729
|
-
return {
|
|
730
|
-
exitCode: specSucceeded ? 0 : 1,
|
|
729
|
+
return specSucceeded ? { ok: true, result: {
|
|
731
730
|
sessionId: effectiveSessionId,
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
731
|
+
success: specSucceeded,
|
|
732
|
+
summary: specResult.summary,
|
|
733
|
+
filesCreated: specResult.filesCreated,
|
|
734
|
+
filesModified: specResult.filesModified,
|
|
735
|
+
filesRead: specResult.filesRead,
|
|
736
|
+
iterations: specResult.iterations,
|
|
737
|
+
tokensUsed: specResult.tokensUsed
|
|
738
|
+
} } : { ok: false, error: "Command failed", result: {
|
|
739
|
+
sessionId: effectiveSessionId,
|
|
740
|
+
success: specSucceeded,
|
|
741
|
+
summary: specResult.summary,
|
|
742
|
+
filesCreated: specResult.filesCreated,
|
|
743
|
+
filesModified: specResult.filesModified,
|
|
744
|
+
filesRead: specResult.filesRead,
|
|
745
|
+
iterations: 0,
|
|
746
|
+
tokensUsed: 0
|
|
747
|
+
} };
|
|
742
748
|
}
|
|
743
749
|
} catch {
|
|
744
750
|
}
|
|
@@ -886,22 +892,27 @@ var run_default = defineCommand({
|
|
|
886
892
|
}
|
|
887
893
|
await tracer.finalize();
|
|
888
894
|
const runSucceeded = result.success;
|
|
889
|
-
const structuredResult = {
|
|
890
|
-
exitCode: runSucceeded ? 0 : 1,
|
|
895
|
+
const structuredResult = runSucceeded ? { ok: true, result: {
|
|
891
896
|
sessionId: effectiveSessionId,
|
|
897
|
+
success: runSucceeded,
|
|
892
898
|
summary: result.summary,
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
899
|
+
filesCreated: result.filesCreated,
|
|
900
|
+
filesModified: result.filesModified,
|
|
901
|
+
filesRead: result.filesRead,
|
|
902
|
+
iterations: result.iterations,
|
|
903
|
+
tokensUsed: result.tokensUsed,
|
|
904
|
+
hasPlan: mode === "plan" && !!result.plan
|
|
905
|
+
} } : { ok: false, error: "Command failed", result: {
|
|
906
|
+
sessionId: effectiveSessionId,
|
|
907
|
+
success: runSucceeded,
|
|
908
|
+
summary: result.summary,
|
|
909
|
+
filesCreated: result.filesCreated,
|
|
910
|
+
filesModified: result.filesModified,
|
|
911
|
+
filesRead: result.filesRead,
|
|
912
|
+
iterations: result.iterations,
|
|
913
|
+
tokensUsed: result.tokensUsed,
|
|
914
|
+
hasPlan: mode === "plan" && !!result.plan
|
|
915
|
+
} };
|
|
905
916
|
if (jsonOutput) {
|
|
906
917
|
ctx.ui?.json?.(structuredResult);
|
|
907
918
|
}
|
|
@@ -918,7 +929,7 @@ var run_default = defineCommand({
|
|
|
918
929
|
cause: reason
|
|
919
930
|
});
|
|
920
931
|
}
|
|
921
|
-
return {
|
|
932
|
+
return { ok: false, error: "Command timed out" };
|
|
922
933
|
}
|
|
923
934
|
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
924
935
|
if (jsonOutput) {
|
|
@@ -929,7 +940,7 @@ var run_default = defineCommand({
|
|
|
929
940
|
cause: errorMessage
|
|
930
941
|
});
|
|
931
942
|
}
|
|
932
|
-
return {
|
|
943
|
+
return { ok: false, error: "Command failed" };
|
|
933
944
|
}
|
|
934
945
|
}
|
|
935
946
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/cli/ui/event-renderer.ts","../../../src/cli/commands/run.ts"],"names":["state","fs","pendingSessionWrite","detailedTrace"],"mappings":"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","file":"run.js","sourcesContent":["/**\n * Agent Event Renderer for CLI\n *\n * Renders agent events as beautiful CLI output with visual hierarchy.\n * Shows orchestrator → subtasks → agents → tools as nested blocks.\n */\n\nimport type { AgentEvent, AgentEventCallback } from '@kb-labs/agent-contracts';\n\n// ═══════════════════════════════════════════════════════════════════════════\n// ANSI Colors & Symbols\n// ═══════════════════════════════════════════════════════════════════════════\n\nconst CSI = '\\x1b[';\nconst RESET = '\\x1b[0m';\n\nconst color = {\n // Status colors\n success: (t: string) => `${CSI}32m${t}${RESET}`,\n error: (t: string) => `${CSI}31m${t}${RESET}`,\n warning: (t: string) => `${CSI}33m${t}${RESET}`,\n info: (t: string) => `${CSI}36m${t}${RESET}`,\n\n // UI colors\n dim: (t: string) => `${CSI}90m${t}${RESET}`,\n bold: (t: string) => `${CSI}1m${t}${RESET}`,\n accent: (t: string) => `${CSI}38;5;99m${t}${RESET}`, // Purple - orchestrator\n primary: (t: string) => `${CSI}38;5;39m${t}${RESET}`, // Blue - agent\n highlight: (t: string) => `${CSI}38;5;51m${t}${RESET}`, // Cyan - tools\n secondary: (t: string) => `${CSI}38;5;208m${t}${RESET}`, // Orange - subtask\n};\n\n// Box-drawing characters for visual hierarchy\nconst box = {\n topLeft: '┌',\n topRight: '┐',\n bottomLeft: '└',\n bottomRight: '┘',\n horizontal: '─',\n vertical: '│',\n leftT: '├',\n rightT: '┤',\n cross: '┼',\n};\n\nconst symbols = {\n success: color.success('✓'),\n error: color.error('✗'),\n warning: color.warning('⚠'),\n spinner: ['◐', '◓', '◑', '◒'],\n thinking: '◆',\n executing: '▶',\n tool: '⚙',\n file: '📄',\n search: '🔍',\n command: '$',\n memory: '💾',\n subtask: '◈',\n agent: '●',\n};\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Render State - tracks current nesting level\n// ═══════════════════════════════════════════════════════════════════════════\n\ninterface RenderState {\n currentSubtask: { id: string; index: number; total: number } | null;\n agentActive: boolean;\n indentLevel: number;\n}\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Helper Functions\n// ═══════════════════════════════════════════════════════════════════════════\n\nfunction formatDuration(ms: number): string {\n if (ms < 1000) {return `${ms}ms`;}\n if (ms < 60000) {return `${(ms / 1000).toFixed(1)}s`;}\n return `${Math.floor(ms / 60000)}m ${Math.floor((ms % 60000) / 1000)}s`;\n}\n\nfunction formatPath(path: string, maxLen = 40): string {\n if (path.length <= maxLen) {return path;}\n const parts = path.split('/');\n if (parts.length <= 2) {return '...' + path.slice(-maxLen + 3);}\n return `.../${parts.slice(-2).join('/')}`;\n}\n\nfunction formatBudget(event: AgentEvent): string | null {\n const data = event.data as {\n budgetUsedTokens?: unknown;\n budgetRemainingTokens?: unknown;\n budgetTotalTokens?: unknown;\n };\n const used = typeof data.budgetUsedTokens === 'number' ? data.budgetUsedTokens : null;\n const remaining = typeof data.budgetRemainingTokens === 'number' ? data.budgetRemainingTokens : null;\n const total = typeof data.budgetTotalTokens === 'number' ? data.budgetTotalTokens : null;\n if (used === null && remaining === null && total === null) {\n return null;\n }\n const fmt = (value: number | null): string => (value === null ? '?' : value.toLocaleString('en-US'));\n return `Budget ${fmt(used)} used / ${fmt(total)} total (${fmt(remaining)} left)`;\n}\n\nfunction indent(level: number): string {\n return ' '.repeat(level);\n}\n\nfunction renderBoxTop(title: string, colorFn: (s: string) => string, width = 60): string {\n const titleLen = title.length + 2; // space around title\n const leftPad = 2;\n const rightPad = width - leftPad - titleLen - 2;\n return colorFn(\n `${box.topLeft}${box.horizontal.repeat(leftPad)} ${title} ${box.horizontal.repeat(Math.max(0, rightPad))}${box.topRight}`\n );\n}\n\nfunction renderBoxBottom(colorFn: (s: string) => string, width = 60): string {\n return colorFn(`${box.bottomLeft}${box.horizontal.repeat(width - 2)}${box.bottomRight}`);\n}\n\nfunction renderBoxLine(content: string, colorFn: (s: string) => string): string {\n return `${colorFn(box.vertical)} ${content}`;\n}\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Event Renderer Factory\n// ═══════════════════════════════════════════════════════════════════════════\n\nexport function createEventRenderer(options: {\n verbose?: boolean;\n showToolOutput?: boolean;\n showLLMContent?: boolean;\n showDebug?: boolean;\n}): AgentEventCallback {\n const { verbose = true, showToolOutput = true, showLLMContent = false, showDebug = false } = options;\n\n const state: RenderState = {\n currentSubtask: null,\n agentActive: false,\n indentLevel: 0,\n };\n\n return (event: AgentEvent) => {\n const _prefix = indent(state.indentLevel);\n\n switch (event.type) {\n // ═══════════════════════════════════════════════════════════════════\n // SUBTASK LEVEL\n // ═══════════════════════════════════════════════════════════════════\n case 'subtask:start': {\n state.currentSubtask = {\n id: event.data.subtaskId,\n index: event.data.index,\n total: event.data.total,\n };\n state.indentLevel = 1;\n\n const subtaskNum = `${event.data.index + 1}/${event.data.total}`;\n console.log(color.accent(box.vertical));\n console.log(\n color.accent(`${box.leftT}${box.horizontal}`) +\n renderBoxTop(`SUBTASK ${subtaskNum}`, color.secondary, 50)\n );\n console.log(\n color.accent(box.vertical) + ' ' +\n renderBoxLine(\n `${symbols.subtask} ${event.data.description.slice(0, 45)}${event.data.description.length > 45 ? '...' : ''}`,\n color.secondary\n )\n );\n console.log(color.accent(box.vertical) + ' ' + color.secondary(box.vertical));\n break;\n }\n\n case 'subtask:end': {\n const status = event.data.success\n ? color.success(`${symbols.success} Done`)\n : color.error(`${symbols.error} Failed`);\n\n console.log(color.accent(box.vertical) + ' ' + color.secondary(box.vertical));\n console.log(\n color.accent(box.vertical) + ' ' +\n renderBoxLine(status, color.secondary)\n );\n console.log(\n color.accent(box.vertical) + ' ' +\n renderBoxBottom(color.secondary, 50)\n );\n\n state.currentSubtask = null;\n state.indentLevel = 0;\n break;\n }\n\n // ═══════════════════════════════════════════════════════════════════\n // AGENT LEVEL (nested under subtask or standalone)\n // ═══════════════════════════════════════════════════════════════════\n case 'agent:start': {\n state.agentActive = true;\n\n // Determine prefix based on context\n const linePrefix = state.currentSubtask\n ? color.accent(box.vertical) + ' ' + color.secondary(box.vertical) + ' '\n : '';\n\n console.log(linePrefix);\n console.log(linePrefix + renderBoxTop(`AGENT [${event.data.tier}]`, color.primary, 45));\n console.log(linePrefix + renderBoxLine(\n `${symbols.agent} ${event.data.task.slice(0, 40)}${event.data.task.length > 40 ? '...' : ''}`,\n color.primary\n ));\n console.log(linePrefix + renderBoxLine(\n color.dim(`Tools: ${event.data.toolCount} | Max iterations: ${event.data.maxIterations}`),\n color.primary\n ));\n\n state.indentLevel = state.currentSubtask ? 3 : 1;\n break;\n }\n\n case 'agent:end': {\n const linePrefix = state.currentSubtask\n ? color.accent(box.vertical) + ' ' + color.secondary(box.vertical) + ' '\n : '';\n\n const status = event.data.success\n ? color.success(`${symbols.success} Success`)\n : color.error(`${symbols.error} Failed`);\n\n console.log(linePrefix + color.primary(box.vertical));\n console.log(linePrefix + renderBoxLine(\n `${status} ${color.dim(`(${formatDuration(event.data.durationMs)}, ${event.data.tokensUsed} tokens)`)}`,\n color.primary\n ));\n\n // Show the result summary - this is what the agent produced!\n if (event.data.summary) {\n console.log(linePrefix + color.primary(box.vertical));\n console.log(linePrefix + renderBoxLine(\n color.bold('📋 Result:'),\n color.primary\n ));\n // Print full summary — no truncation for final agent answer\n const summaryLines = event.data.summary.split('\\n');\n for (const line of summaryLines) {\n if (line.trim()) {\n // Word wrap long lines at ~80 chars\n const words = line.split(' ');\n let currentLine = '';\n for (const word of words) {\n if (currentLine.length + word.length > 75) {\n if (currentLine) {\n console.log(linePrefix + renderBoxLine(` ${currentLine}`, color.primary));\n }\n currentLine = word;\n } else {\n currentLine = currentLine ? `${currentLine} ${word}` : word;\n }\n }\n if (currentLine) {\n console.log(linePrefix + renderBoxLine(` ${currentLine}`, color.primary));\n }\n }\n }\n }\n\n if (event.data.filesModified.length > 0 || event.data.filesCreated.length > 0) {\n const files = [...event.data.filesCreated, ...event.data.filesModified];\n console.log(linePrefix + renderBoxLine(\n color.dim(`Files: ${files.slice(0, 3).map(f => formatPath(f, 20)).join(', ')}${files.length > 3 ? ` +${files.length - 3}` : ''}`),\n color.primary\n ));\n }\n\n console.log(linePrefix + renderBoxBottom(color.primary, 45));\n\n state.agentActive = false;\n state.indentLevel = state.currentSubtask ? 1 : 0;\n break;\n }\n\n case 'agent:error': {\n const linePrefix = getLinePrefix(state);\n console.log(linePrefix + renderBoxLine(\n `${symbols.error} ${color.error('Error:')} ${event.data.error.slice(0, 50)}`,\n color.primary\n ));\n break;\n }\n\n // ═══════════════════════════════════════════════════════════════════\n // ITERATION & LLM (inside agent box)\n // ═══════════════════════════════════════════════════════════════════\n case 'iteration:start': {\n const linePrefix = getLinePrefix(state);\n if (verbose) {\n console.log(linePrefix + color.primary(box.vertical));\n console.log(linePrefix + renderBoxLine(\n color.dim(`─── Iteration ${event.data.iteration}/${event.data.maxIterations} ───`),\n color.primary\n ));\n }\n break;\n }\n\n case 'llm:start': {\n const linePrefix = getLinePrefix(state);\n if (verbose) {\n const iterLabel = event.data.iteration !== undefined ? color.dim(` #${event.data.iteration}`) : '';\n const msgLabel = showDebug ? color.dim(` [${event.data.messageCount} msgs, ${event.data.toolCount ?? 0} tools, ${event.data.systemPromptChars ?? 0} sys chars]`) : '';\n process.stdout.write(linePrefix + renderBoxLine(\n `${color.accent(symbols.thinking)} ${color.dim('Thinking...')}${iterLabel}${msgLabel}`,\n color.primary\n ));\n }\n break;\n }\n\n case 'llm:end': {\n if (verbose) {\n // Clear line and show result\n process.stdout.write(`\\r`);\n const linePrefix = getLinePrefix(state);\n const stopLabel = event.data.stopReason ? `, stop=${event.data.stopReason}` : '';\n console.log(linePrefix + renderBoxLine(\n `${color.accent(symbols.thinking)} Thought ${color.dim(`(${formatDuration(event.data.durationMs)}, ${event.data.tokensUsed} tok${stopLabel})`)}`,\n color.primary\n ));\n\n // Always show LLM reasoning in verbose mode (truncated)\n if (event.data.content) {\n const maxLen = showDebug ? 2000 : showLLMContent ? 500 : 150;\n const content = event.data.content.slice(0, maxLen).replace(/\\n/g, ' ').trim();\n if (content) {\n console.log(linePrefix + renderBoxLine(\n color.dim(` 💭 \"${content}${event.data.content.length > maxLen ? '...' : ''}\"`),\n color.primary\n ));\n }\n }\n }\n break;\n }\n\n // ═══════════════════════════════════════════════════════════════════\n // TOOL EXECUTION (inside agent, compact format)\n // ═══════════════════════════════════════════════════════════════════\n case 'tool:start': {\n const linePrefix = getLinePrefix(state);\n const toolName = event.data.toolName;\n const meta = event.data.metadata;\n\n let details = '';\n if (showDebug) {\n // In debug mode: show raw input JSON (truncated at 200 chars)\n const inputObj = event.data.input as Record<string, unknown> | undefined;\n if (inputObj && Object.keys(inputObj).length > 0) {\n const raw = JSON.stringify(inputObj);\n const maxLen = 200;\n details = ` ${color.dim(raw.slice(0, maxLen) + (raw.length > maxLen ? '...' : ''))}`;\n }\n } else if (meta?.filePath) {\n details = ` ${color.dim(formatPath(meta.filePath as string, 30))}`;\n } else if (meta?.query) {\n details = ` ${color.dim(`\"${(meta.query as string).slice(0, 25)}${(meta.query as string).length > 25 ? '...' : ''}\"`)}`\n } else if (meta?.command) {\n details = ` ${color.dim(`$ ${(meta.command as string).slice(0, 25)}`)}`\n }\n\n process.stdout.write(linePrefix + renderBoxLine(\n `${color.highlight(symbols.tool)} ${color.highlight(toolName)}${details}`,\n color.primary\n ));\n break;\n }\n\n case 'tool:end': {\n const status = event.data.success\n ? ` ${symbols.success}`\n : ` ${symbols.error}`;\n\n process.stdout.write(`${status} ${color.dim(formatDuration(event.data.durationMs))}\\n`);\n\n // Show tool output details\n if (showToolOutput) {\n const linePrefix = getLinePrefix(state);\n const meta = event.data.metadata;\n const output = event.data.output;\n\n // Show output preview for tools\n if (output && verbose) {\n const maxOutputLen = showDebug ? 1000 : 200;\n if (showDebug) {\n // In debug mode: show output with preserved newlines\n const truncated = output.slice(0, maxOutputLen);\n const lines = truncated.split('\\n');\n for (const line of lines) {\n if (line.trim()) {\n console.log(linePrefix + renderBoxLine(\n color.dim(` 📄 ${line}`),\n color.primary\n ));\n }\n }\n if (output.length > maxOutputLen) {\n console.log(linePrefix + renderBoxLine(\n color.dim(` 📄 ... (${output.length - maxOutputLen} more chars)`),\n color.primary\n ));\n }\n } else {\n // Normal mode: compact single line\n const cleanOutput = output\n .slice(0, maxOutputLen)\n .replace(/\\n/g, ' ')\n .replace(/\\s+/g, ' ')\n .trim();\n if (cleanOutput && cleanOutput.length > 10) {\n console.log(linePrefix + renderBoxLine(\n color.dim(` 📄 ${cleanOutput}${output.length > maxOutputLen ? '...' : ''}`),\n color.primary\n ));\n }\n }\n }\n\n // Show metadata summary if available\n if (meta?.summary && !output) {\n console.log(linePrefix + renderBoxLine(\n color.dim(` └─ ${(meta.summary as string).slice(0, 80)}`),\n color.primary\n ));\n }\n }\n break;\n }\n\n case 'tool:error': {\n process.stdout.write(` ${symbols.error}\\n`);\n const linePrefix = getLinePrefix(state);\n console.log(linePrefix + renderBoxLine(\n color.error(` └─ ${event.data.error.slice(0, 50)}`),\n color.primary\n ));\n break;\n }\n\n // ═══════════════════════════════════════════════════════════════════\n // MEMORY & PROGRESS (compact notifications)\n // ═══════════════════════════════════════════════════════════════════\n case 'memory:write': {\n if (verbose) {\n const linePrefix = getLinePrefix(state);\n console.log(linePrefix + renderBoxLine(\n color.dim(`${symbols.memory} Saved ${event.data.entryType} to ${event.data.target}`),\n color.primary\n ));\n }\n break;\n }\n\n case 'progress:update': {\n const budgetLine = formatBudget(event);\n const phase = event.data.phase || 'progress';\n const progress = Math.max(0, Math.min(100, Math.round(event.data.progress || 0)));\n const message = event.data.message || '';\n\n if (verbose) {\n const linePrefix = getLinePrefix(state);\n const main = `[${phase}] ${progress}%${message ? ` - ${message}` : ''}`;\n console.log(linePrefix + renderBoxLine(color.info(main), color.primary));\n if (budgetLine) {\n console.log(linePrefix + renderBoxLine(color.dim(` ${budgetLine}`), color.primary));\n }\n } else if (message && (phase === 'plan' || phase === 'spec') && (progress === 100 || progress === 5)) {\n const budgetSuffix = budgetLine ? ` | ${budgetLine}` : '';\n console.log(`${color.info(`[${phase}]`)} ${message}${budgetSuffix}`);\n }\n break;\n }\n\n case 'status:change': {\n const budgetLine = formatBudget(event);\n if (verbose && event.data.message) {\n const linePrefix = getLinePrefix(state);\n console.log(linePrefix + renderBoxLine(\n color.info(`Status: ${event.data.status}${event.data.message ? ` - ${event.data.message}` : ''}`),\n color.primary\n ));\n if (budgetLine) {\n console.log(linePrefix + renderBoxLine(color.dim(` ${budgetLine}`), color.primary));\n }\n // When plan is ready and waiting for approval, show the approve/execute commands\n if (event.data.status === 'waiting' && event.sessionId) {\n const sid = event.sessionId;\n console.log(linePrefix + renderBoxLine(color.dim(` To approve: kb agent run --session-id=${sid} --approve`), color.primary));\n console.log(linePrefix + renderBoxLine(color.dim(` To execute: kb agent run --session-id=${sid}`), color.primary));\n }\n }\n // Only show significant status in non-verbose mode\n if (!verbose && (event.data.status === 'done' || event.data.status === 'error')) {\n const budgetSuffix = budgetLine ? ` (${budgetLine})` : '';\n console.log(\n event.data.status === 'done'\n ? `${symbols.success} ${event.data.message}${budgetSuffix}`\n : `${symbols.error} ${event.data.message}${budgetSuffix}`\n );\n }\n break;\n }\n\n case 'middleware:decision': {\n if (verbose) {\n const linePrefix = getLinePrefix(state);\n const decisionIcons: Record<string, string> = {\n soft_warning: '⚠',\n hard_stop: '🛑',\n trimmed: '✂',\n loop_detected: '🔁',\n stuck: '⏸',\n summarized: '📝',\n };\n const icon = decisionIcons[event.data.decision] ?? '·';\n console.log(linePrefix + renderBoxLine(\n color.dim(` ${icon} [${event.data.middleware}] ${event.data.decision}`),\n color.primary\n ));\n }\n break;\n }\n\n case 'llm:debug': {\n if (!showDebug) { break; }\n const linePrefix = getLinePrefix(state);\n const iterLabel = event.data.iteration !== undefined ? ` (iter #${event.data.iteration})` : '';\n console.log(linePrefix + renderBoxLine(\n color.dim(` ─── System Prompt${iterLabel} ───`),\n color.primary\n ));\n // Full system prompt, no truncation\n for (const line of event.data.systemPrompt.split('\\n')) {\n console.log(linePrefix + renderBoxLine(color.dim(` ${line}`), color.primary));\n }\n console.log(linePrefix + renderBoxLine(color.dim(' ─── Messages ───'), color.primary));\n for (const m of event.data.messages) {\n const roleLabel = `[${m.role}]`;\n const content = m.content;\n // Show each message fully, line by line\n const lines = content.split('\\n');\n const firstLine = `${roleLabel} ${lines[0] ?? ''}`;\n console.log(linePrefix + renderBoxLine(color.dim(` ${firstLine}`), color.primary));\n for (const line of lines.slice(1)) {\n console.log(linePrefix + renderBoxLine(color.dim(` ${line}`), color.primary));\n }\n }\n console.log(linePrefix + renderBoxLine(color.dim(' ─── End Prompt ───'), color.primary));\n break;\n }\n\n default:\n // Unknown event - ignore\n break;\n }\n };\n\n function getLinePrefix(state: RenderState): string {\n if (state.currentSubtask && state.agentActive) {\n return color.accent(box.vertical) + ' ' + color.secondary(box.vertical) + ' ';\n }\n if (state.currentSubtask) {\n return color.accent(box.vertical) + ' ' + color.secondary(box.vertical) + ' ';\n }\n if (state.agentActive) {\n return '';\n }\n return '';\n }\n}\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Preset Renderers\n// ═══════════════════════════════════════════════════════════════════════════\n\n/**\n * Minimal renderer - only shows high-level events\n */\nexport function createMinimalRenderer(): AgentEventCallback {\n return createEventRenderer({\n verbose: false,\n showToolOutput: false,\n showLLMContent: false,\n });\n}\n\n/**\n * Detailed renderer - shows everything including LLM content\n */\nexport function createDetailedRenderer(): AgentEventCallback {\n return createEventRenderer({\n verbose: true,\n showToolOutput: true,\n showLLMContent: true,\n });\n}\n\n/**\n * Debug renderer - maximum verbosity: full prompts, full tool I/O, no truncation\n */\nexport function createDebugRenderer(): AgentEventCallback {\n return createEventRenderer({\n verbose: true,\n showToolOutput: true,\n showLLMContent: true,\n showDebug: true,\n });\n}\n","/**\n * agent:run command - unified agent interface\n *\n * Uses event-driven UI rendering instead of simple loaders.\n */\n\nimport { defineCommand, useAnalytics, useCache, useConfig, type PluginContextV3 } from '@kb-labs/sdk';\nimport {\n SessionManager,\n PlanDocumentService,\n SpecModeHandler,\n bootstrapAgentSDK,\n createSessionMemoryBridge,\n createCoreToolPack,\n} from '@kb-labs/agent-core';\nimport { AgentSDK } from '@kb-labs/agent-sdk';\nimport { createDefaultResponseRequirementsSelector } from '@kb-labs/agent-runtime';\nimport { IncrementalTraceWriter } from '@kb-labs/agent-tracing';\nimport { createToolRegistry } from '@kb-labs/agent-tools';\nimport type { AgentConfig, ModeConfig, AgentMode, AgentEvent, AgentsPluginConfig, KernelState, DetailedTraceEntry } from '@kb-labs/agent-contracts';\nimport type { TaskPlan } from '@kb-labs/agent-contracts';\nimport { promises as fs } from 'node:fs';\nimport { createEventRenderer, createMinimalRenderer, createDetailedRenderer, createDebugRenderer } from '../ui/index.js';\n\n// Register SDKAgentRunner as the RunnerFactory (idempotent — runs once per process)\nbootstrapAgentSDK();\n\ntype RunInput = {\n task: string;\n workingDir?: string;\n maxIterations?: number;\n temperature?: number;\n verbose?: boolean;\n quiet?: boolean;\n detailed?: boolean;\n sessionId?: string;\n tier?: 'small' | 'medium' | 'large';\n escalate?: boolean;\n mode?: AgentMode;\n complexity?: 'simple' | 'medium' | 'complex';\n files?: string[];\n trace?: string;\n approve?: boolean;\n execute?: boolean;\n spec?: boolean;\n 'dry-run'?: boolean;\n debug?: boolean;\n /** Abort execution after this many seconds (0 or undefined = no timeout). */\n timeout?: number;\n /** Override token budget (e.g. 300000 for heavy tasks). Overrides config value. */\n budget?: number;\n /** Output structured JSON instead of human-readable output. */\n json?: boolean;\n argv?: string[];\n};\n\ntype RunResult = {\n exitCode: number;\n sessionId?: string;\n result?: {\n success: boolean;\n summary: string;\n filesCreated: string[];\n filesModified: string[];\n filesRead: string[];\n iterations: number;\n tokensUsed: number;\n };\n};\n\nfunction parseBooleanFlag(value: unknown, defaultValue: boolean): boolean {\n if (typeof value === 'boolean') {\n return value;\n }\n if (typeof value === 'string') {\n const normalized = value.trim().toLowerCase();\n if (['true', '1', 'yes', 'y', 'on'].includes(normalized)) {return true;}\n if (['false', '0', 'no', 'n', 'off'].includes(normalized)) {return false;}\n }\n if (typeof value === 'number') {\n return value !== 0;\n }\n return defaultValue;\n}\n\nexport default defineCommand({\n id: 'agent:run',\n description: 'Execute a task with autonomous agent (orchestrator + child agents)',\n\n handler: {\n async execute(ctx: PluginContextV3, input: RunInput): Promise<RunResult> {\n // V3: Flags may come wrapped in input.flags or passed directly\n const flags = ('flags' in input && typeof (input as { flags?: unknown }).flags === 'object' && (input as { flags?: unknown }).flags !== null)\n ? (input as { flags: RunInput }).flags\n : input;\n\n const {\n task,\n workingDir = ctx.cwd || process.cwd(),\n maxIterations = 200,\n temperature = 0.1,\n verbose: verboseRaw = true,\n quiet: quietRaw = false,\n detailed: detailedRaw = false,\n sessionId,\n tier = 'medium',\n mode = 'execute',\n complexity,\n files,\n trace,\n approve: approveRaw = false,\n execute: executeRaw = false,\n spec: specRaw = false,\n 'dry-run': dryRunRaw = false,\n debug: debugRaw = false,\n timeout: timeoutSeconds,\n budget: budgetOverride,\n json: jsonOutput = false,\n } = flags;\n\n const verbose = parseBooleanFlag(verboseRaw, true);\n const quiet = parseBooleanFlag(quietRaw, false);\n const detailed = parseBooleanFlag(detailedRaw, false);\n const approve = parseBooleanFlag(approveRaw, false);\n const executeAfterPlan = parseBooleanFlag(executeRaw, false);\n const spec = parseBooleanFlag(specRaw, false);\n const dryRun = parseBooleanFlag(dryRunRaw, false);\n const debug = parseBooleanFlag(debugRaw, false);\n\n // Build an AbortController when --timeout is specified.\n // The signal is passed into AgentConfig so the runner can honour it.\n const timeoutSecs = typeof timeoutSeconds === 'number' && timeoutSeconds > 0\n ? timeoutSeconds\n : undefined;\n\n const abortController = timeoutSecs !== undefined ? new AbortController() : undefined;\n let timeoutHandle: ReturnType<typeof setTimeout> | undefined;\n\n if (abortController && timeoutSecs !== undefined) {\n timeoutHandle = setTimeout(() => {\n abortController.abort(\n new Error(`Agent execution timed out after ${timeoutSecs}s (--timeout=${timeoutSecs})`)\n );\n }, timeoutSecs * 1000);\n // Unref so the timer never prevents the Node.js process from exiting naturally\n // when the agent finishes before the deadline.\n timeoutHandle.unref?.();\n }\n\n // Helper: always clear the timer once execution finishes (success or error).\n const clearTimeout_ = () => {\n if (timeoutHandle !== undefined) {\n clearTimeout(timeoutHandle);\n timeoutHandle = undefined;\n }\n };\n\n // Allow --approve without --task when --session-id is provided (approve existing plan)\n if (!task) {\n if (approve && sessionId) {\n const sessionManager = new SessionManager(workingDir as string || ctx.cwd || process.cwd());\n const planPath = sessionManager.getSessionPlanPath(sessionId as string);\n try {\n const raw = await fs.readFile(planPath, 'utf-8');\n const plan: TaskPlan = JSON.parse(raw);\n if (plan.status !== 'draft') {\n ctx.ui?.warn?.(`Plan is not in draft state (current: ${plan.status}). Nothing to approve.`);\n clearTimeout_();\n return { exitCode: 1 };\n }\n const approvedAt = new Date().toISOString();\n const approvedPlan = { ...plan, status: 'approved' as const, approvedAt, approvalComment: 'Approved via CLI --approve', updatedAt: approvedAt };\n await fs.writeFile(planPath, JSON.stringify(approvedPlan, null, 2), 'utf-8');\n const planDocumentService = new PlanDocumentService(workingDir as string || ctx.cwd || process.cwd());\n const planDocPath = planDocumentService.getPlanPath(plan);\n await planDocumentService.appendExecutionLog(planDocPath, `- ${approvedAt}: Plan approved via CLI (--approve).`).catch(() => {});\n ctx.ui?.success?.(`Plan approved: ${approvedPlan.id} (session: ${sessionId})`);\n ctx.ui?.info?.(`Ready to execute: kb agent run --session-id=${sessionId}`);\n clearTimeout_();\n return { exitCode: 0, sessionId: sessionId as string };\n } catch {\n if (jsonOutput) {\n ctx.ui?.json?.({ ok: false, error: { code: 'NO_PLAN', message: `No approved plan for session ${sessionId}` } });\n } else {\n ctx.ui?.error?.('No plan found for this session', {\n hint: `Run: kb agent run --session-id=${sessionId} --task \"your task\"`,\n cause: `Session ${sessionId} has no approved plan`,\n });\n }\n clearTimeout_();\n return { exitCode: 1 };\n }\n }\n ctx.ui?.error?.('Error: --task is required');\n clearTimeout_();\n return { exitCode: 1 };\n }\n\n // Build mode config\n let modeConfig: ModeConfig | undefined;\n if (mode !== 'execute') {\n modeConfig = { mode } as ModeConfig;\n\n // Add mode-specific context\n if (mode === 'plan') {\n modeConfig.context = { mode: 'plan', task, complexity };\n } else if (mode === 'edit') {\n modeConfig.context = { mode: 'edit', task, targetFiles: files || [], dryRun };\n } else if (mode === 'debug') {\n modeConfig.context = { mode: 'debug', task, traceFile: trace, relevantFiles: files || [] };\n }\n }\n\n // Select event renderer based on verbosity flags\n let eventRenderer;\n if (jsonOutput) {\n eventRenderer = () => {}; // Suppress all human output for JSON mode\n } else if (quiet) {\n eventRenderer = createMinimalRenderer();\n } else if (debug) {\n eventRenderer = createDebugRenderer();\n } else if (detailed) {\n eventRenderer = createDetailedRenderer();\n } else {\n eventRenderer = createEventRenderer({\n verbose,\n showToolOutput: true,\n showLLMContent: false,\n });\n }\n\n try {\n const runId = `run-${Date.now()}-${Math.random().toString(36).slice(2, 7)}`;\n const sessionManager = new SessionManager(workingDir);\n let effectiveSessionId = sessionId as string | undefined;\n\n // Ensure session exists for consistent history/memory behavior in CLI path.\n if (!effectiveSessionId) {\n const createdSession = await sessionManager.createSession({\n mode,\n task,\n agentId: 'cli-agent',\n });\n effectiveSessionId = createdSession.id;\n } else {\n const existing = await sessionManager.loadSession(effectiveSessionId);\n if (!existing) {\n const createdSession = await sessionManager.createSession({\n mode,\n task,\n agentId: 'cli-agent',\n sessionId: effectiveSessionId,\n });\n effectiveSessionId = createdSession.id;\n }\n }\n\n // Persist user turn first so timeline ordering is deterministic.\n await sessionManager.createUserTurn(effectiveSessionId, task, runId);\n\n // Create shared file tracking (for edit protection)\n const filesRead = new Set<string>();\n const filesReadHash = new Map<string, string>();\n const sessionMemory = createSessionMemoryBridge(workingDir, effectiveSessionId);\n const responseRequirementsSelector = createDefaultResponseRequirementsSelector();\n\n // Create tool registry\n const toolRegistry = createToolRegistry({\n workingDir,\n currentTask: task,\n sessionId: effectiveSessionId,\n verbose: false, // Disable tool registry verbose - we have event renderer\n cache: useCache(),\n filesRead,\n filesReadHash,\n sessionMemory,\n responseRequirementsResolver: async ({ task: activeTask, kernel }: {\n task?: string;\n answer: string;\n kernel: KernelState | null;\n }) =>\n responseRequirementsSelector.select({\n state: kernel,\n messages: [],\n task: activeTask ?? task,\n }),\n });\n const agentsConfig = await useConfig<AgentsPluginConfig>();\n const effectiveBudget = typeof budgetOverride === 'number' && budgetOverride > 0\n ? { ...(agentsConfig?.tokenBudget ?? {}), enabled: true, maxTokens: budgetOverride }\n : agentsConfig?.tokenBudget;\n const analytics = useAnalytics() ?? null;\n const taskId = `task-${Date.now()}`;\n const tracer = new IncrementalTraceWriter(taskId);\n\n // Spec-only fast path: skip plan mode, generate spec from existing approved plan\n if (spec && effectiveSessionId && sessionId) {\n const planPath = sessionManager.getSessionPlanPath(effectiveSessionId);\n try {\n const planData = JSON.parse(await fs.readFile(planPath, 'utf-8')) as TaskPlan;\n if (planData.status === 'approved' || planData.status === 'spec_ready') {\n ctx.ui?.info?.(`Found approved plan: ${planData.id} (${planData.phases.length} phases). Generating spec directly...`);\n let pendingSessionWrite: Promise<void> = Promise.resolve();\n const specEventCallback = (event: AgentEvent) => {\n tracer.trace(event as unknown as DetailedTraceEntry);\n eventRenderer(event);\n pendingSessionWrite = pendingSessionWrite\n .then(async () => {\n await sessionManager.addEvent(effectiveSessionId!, {\n ...event,\n sessionId: effectiveSessionId,\n runId,\n metadata: {\n ...(event as unknown as Record<string, unknown>)['metadata'] as Record<string, unknown> | undefined,\n sessionId: effectiveSessionId,\n runId,\n workingDir,\n },\n } as unknown as AgentEvent);\n })\n .catch((error) => {\n const message = error instanceof Error ? error.message : String(error);\n console.warn(`[agent:run] Failed to persist spec event: ${message}`);\n });\n };\n const specConfig: AgentConfig = {\n workingDir,\n maxIterations: 40,\n temperature: 0.1,\n sessionId: effectiveSessionId,\n tier,\n analytics,\n tokenBudget: effectiveBudget,\n onEvent: specEventCallback,\n abortSignal: abortController?.signal,\n };\n const specHandler = new SpecModeHandler();\n const specResult = await specHandler.execute(planData, specConfig, toolRegistry);\n await pendingSessionWrite;\n await tracer.finalize();\n const detailedTrace = tracer.getEntries() as unknown as Array<Record<string, unknown>>;\n if (detailedTrace.length > 0) {\n await sessionManager.storeTraceArtifacts(effectiveSessionId, runId, detailedTrace);\n }\n if (specResult.success) {\n ctx.ui?.success?.(`Spec generated: ${specResult.spec?.id} (${specResult.spec?.sections.length || 0} sections, ${specResult.spec?.sections.reduce((s, sec) => s + sec.changes.length, 0) || 0} changes)`);\n } else {\n ctx.ui?.warn?.(`Spec generation failed: ${specResult.summary}`);\n }\n const specSucceeded = specResult.success;\n clearTimeout_();\n return {\n exitCode: specSucceeded ? 0 : 1,\n sessionId: effectiveSessionId,\n result: {\n success: specSucceeded,\n summary: specResult.summary,\n filesCreated: specResult.filesCreated,\n filesModified: specResult.filesModified,\n filesRead: specResult.filesRead,\n iterations: specResult.iterations,\n tokensUsed: specResult.tokensUsed,\n },\n };\n }\n } catch {\n // No plan.json or unreadable — fall through to normal flow\n }\n }\n\n // Track pending session writes so we can flush before exit\n let pendingSessionWrite: Promise<void> = Promise.resolve();\n let persistedEventCount = 0;\n\n // Create composite event callback that writes to tracer, renders UI, AND persists to session\n const compositeEventCallback = (event: AgentEvent) => {\n // Write to tracer\n tracer.trace(event as unknown as DetailedTraceEntry);\n // Render UI\n eventRenderer(event);\n // Persist to session for conversation history\n pendingSessionWrite = pendingSessionWrite\n .then(async () => {\n await sessionManager.addEvent(effectiveSessionId!, {\n ...event,\n sessionId: effectiveSessionId,\n runId,\n } as unknown as AgentEvent);\n persistedEventCount += 1;\n })\n .catch((error) => {\n const message = error instanceof Error ? error.message : String(error);\n console.warn(`[agent:run] Failed to persist event: ${message}`);\n });\n };\n\n // Create agent config with event callback\n const config: AgentConfig = {\n workingDir,\n maxIterations,\n temperature,\n sessionId: effectiveSessionId,\n tier,\n analytics,\n tokenBudget: agentsConfig?.tokenBudget,\n mode: modeConfig,\n onEvent: compositeEventCallback,\n debug,\n abortSignal: abortController?.signal,\n };\n\n // Announce the active timeout so the user knows about the deadline.\n if (timeoutSecs !== undefined && !quiet) {\n ctx.ui?.info?.(`⏱ Timeout active: agent will abort after ${timeoutSecs}s (--timeout=${timeoutSecs})`);\n }\n\n // Create and execute agent via SDK\n const sdk = new AgentSDK();\n sdk.register(createCoreToolPack(toolRegistry));\n const runner = sdk.createRunner(config);\n let result = await runner.execute(task);\n\n // Execution finished — cancel the timer immediately so it doesn't fire.\n clearTimeout_();\n\n // Flush pending session writes (ensures agent:end is persisted before exit)\n await pendingSessionWrite;\n\n // Some modes can complete without emitting event stream.\n // Persist synthetic assistant turn events so history stays complete.\n if (persistedEventCount === 0 && result.summary?.trim()) {\n const now = new Date().toISOString();\n const agentId = `agent-${runId}`;\n const baseMetadata = { sessionId: effectiveSessionId, runId, workingDir };\n await sessionManager.addEvent(effectiveSessionId, {\n type: 'agent:start',\n timestamp: now,\n sessionId: effectiveSessionId,\n agentId,\n runId,\n data: { task, tier, maxIterations, toolCount: 0 },\n metadata: baseMetadata,\n } as AgentEvent);\n await sessionManager.addEvent(effectiveSessionId, {\n type: 'llm:end',\n timestamp: now,\n sessionId: effectiveSessionId,\n agentId,\n runId,\n data: {\n content: result.summary,\n hasToolCalls: false,\n tokensUsed: 0,\n durationMs: 0,\n stopReason: 'no_tool_calls',\n },\n metadata: baseMetadata,\n } as AgentEvent);\n await sessionManager.addEvent(effectiveSessionId, {\n type: 'agent:end',\n timestamp: now,\n sessionId: effectiveSessionId,\n agentId,\n runId,\n data: {\n success: result.success,\n summary: result.summary,\n iterations: result.iterations,\n tokensUsed: result.tokensUsed,\n durationMs: 0,\n filesCreated: result.filesCreated,\n filesModified: result.filesModified,\n stopReason: result.success ? 'report_complete' : 'unknown',\n },\n metadata: baseMetadata,\n } as AgentEvent);\n }\n\n const detailedTrace = tracer.getEntries() as unknown as Array<Record<string, unknown>>;\n if (detailedTrace.length > 0) {\n await sessionManager.storeTraceArtifacts(effectiveSessionId, runId, detailedTrace);\n }\n\n // Attach file change summaries to turn for UI rollback/approve panel\n if (result.fileChanges && result.fileChanges.length > 0) {\n await sessionManager.attachFileChangesToTurn(effectiveSessionId, runId, result.fileChanges);\n }\n\n // Auto-approve generated plan in plan mode (--mode=plan --approve)\n if (approve) {\n if (mode !== 'plan') {\n ctx.ui?.warn?.('--approve is currently supported only with --mode=plan');\n } else if (!result.plan) {\n ctx.ui?.warn?.('No plan produced by plan mode, nothing to approve');\n } else {\n const approvedAt = new Date().toISOString();\n const approvedPlan = {\n ...result.plan,\n status: 'approved' as const,\n approvedAt,\n approvalComment: 'Approved via CLI --approve',\n updatedAt: approvedAt,\n };\n\n const sessionPlanPath = sessionManager.getSessionPlanPath(effectiveSessionId);\n await fs.writeFile(sessionPlanPath, JSON.stringify(approvedPlan, null, 2), 'utf-8');\n\n const planDocumentService = new PlanDocumentService(workingDir);\n const planDocPath = planDocumentService.getPlanPath(result.plan);\n await planDocumentService.appendExecutionLog(\n planDocPath,\n `- ${approvedAt}: Plan approved via CLI (--approve).`\n );\n\n ctx.ui?.success?.(`Plan approved: ${approvedPlan.id}`);\n\n if (executeAfterPlan) {\n // --execute: immediately run the approved plan in execute mode\n ctx.ui?.info?.('Executing approved plan...');\n const executeConfig: AgentConfig = {\n ...config,\n mode: { mode: 'execute' },\n };\n const executeSdk = new AgentSDK();\n executeSdk.register(createCoreToolPack(toolRegistry));\n const executeRunner = executeSdk.createRunner(executeConfig);\n result = await executeRunner.execute(task);\n } else {\n ctx.ui?.info?.(`Execute: kb agent run --session-id=${effectiveSessionId}`);\n }\n\n // Optional: generate spec after auto-approve\n if (spec && approvedPlan) {\n ctx.ui?.info?.('Generating detailed specification from approved plan...');\n const specHandler = new SpecModeHandler();\n const specResult = await specHandler.execute(approvedPlan, config, toolRegistry);\n\n if (specResult.success) {\n ctx.ui?.success?.(`Spec generated: ${specResult.spec?.id} (${specResult.spec?.sections.length || 0} sections)`);\n } else {\n ctx.ui?.warn?.(`Spec generation failed: ${specResult.summary}`);\n }\n }\n }\n }\n\n // Finalize tracer: generate index with memory stats, cleanup old traces\n await tracer.finalize();\n\n // Event renderer already showed the result via agent:end event\n // Just return the structured result\n\n const runSucceeded = result.success;\n const structuredResult = {\n exitCode: runSucceeded ? 0 : 1,\n sessionId: effectiveSessionId,\n summary: result.summary,\n data: {\n sessionId: effectiveSessionId,\n success: runSucceeded,\n summary: result.summary,\n filesCreated: result.filesCreated,\n filesModified: result.filesModified,\n filesRead: result.filesRead,\n iterations: result.iterations,\n tokensUsed: result.tokensUsed,\n hasPlan: mode === 'plan' && !!result.plan,\n },\n };\n\n if (jsonOutput) {\n ctx.ui?.json?.(structuredResult);\n }\n\n return structuredResult;\n } catch (error) {\n clearTimeout_();\n // Surface a clear message when the timeout fired.\n if (abortController?.signal.aborted) {\n const reason = abortController.signal.reason instanceof Error\n ? abortController.signal.reason.message\n : `Agent execution timed out after ${timeoutSecs}s`;\n if (jsonOutput) {\n ctx.ui?.json?.({ ok: false, error: { code: 'TIMEOUT', message: reason } });\n } else {\n ctx.ui?.error?.('Agent execution timed out', {\n hint: 'Check agent logs with: kb agent logs --session-id <id>',\n cause: reason,\n });\n }\n return { exitCode: 124 }; // 124 mirrors the POSIX timeout(1) exit code\n }\n const errorMessage = error instanceof Error ? error.message : String(error);\n if (jsonOutput) {\n ctx.ui?.json?.({ ok: false, error: { code: 'EXECUTION_FAILED', message: errorMessage } });\n } else {\n ctx.ui?.error?.('Agent execution failed', {\n hint: 'Check agent logs with: kb agent logs --session-id <id>',\n cause: errorMessage,\n });\n }\n return { exitCode: 1 };\n }\n },\n },\n});\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/cli/ui/event-renderer.ts","../../../src/cli/commands/run.ts"],"names":["state","fs","pendingSessionWrite","detailedTrace"],"mappings":";;;;;;;;;;;AAaA,IAAM,GAAA,GAAM,OAAA;AACZ,IAAM,KAAA,GAAQ,SAAA;AAEd,IAAM,KAAA,GAAQ;AAAA;AAAA,EAEZ,OAAA,EAAS,CAAC,CAAA,KAAc,CAAA,EAAG,GAAG,CAAA,GAAA,EAAM,CAAC,GAAG,KAAK,CAAA,CAAA;AAAA,EAC7C,KAAA,EAAO,CAAC,CAAA,KAAc,CAAA,EAAG,GAAG,CAAA,GAAA,EAAM,CAAC,GAAG,KAAK,CAAA,CAAA;AAAA,EAC3C,OAAA,EAAS,CAAC,CAAA,KAAc,CAAA,EAAG,GAAG,CAAA,GAAA,EAAM,CAAC,GAAG,KAAK,CAAA,CAAA;AAAA,EAC7C,IAAA,EAAM,CAAC,CAAA,KAAc,CAAA,EAAG,GAAG,CAAA,GAAA,EAAM,CAAC,GAAG,KAAK,CAAA,CAAA;AAAA;AAAA,EAG1C,GAAA,EAAK,CAAC,CAAA,KAAc,CAAA,EAAG,GAAG,CAAA,GAAA,EAAM,CAAC,GAAG,KAAK,CAAA,CAAA;AAAA,EACzC,IAAA,EAAM,CAAC,CAAA,KAAc,CAAA,EAAG,GAAG,CAAA,EAAA,EAAK,CAAC,GAAG,KAAK,CAAA,CAAA;AAAA,EACzC,MAAA,EAAQ,CAAC,CAAA,KAAc,CAAA,EAAG,GAAG,CAAA,QAAA,EAAW,CAAC,GAAG,KAAK,CAAA,CAAA;AAAA;AAAA,EACjD,OAAA,EAAS,CAAC,CAAA,KAAc,CAAA,EAAG,GAAG,CAAA,QAAA,EAAW,CAAC,GAAG,KAAK,CAAA,CAAA;AAAA;AAAA,EAClD,SAAA,EAAW,CAAC,CAAA,KAAc,CAAA,EAAG,GAAG,CAAA,QAAA,EAAW,CAAC,GAAG,KAAK,CAAA,CAAA;AAAA;AAAA,EACpD,SAAA,EAAW,CAAC,CAAA,KAAc,CAAA,EAAG,GAAG,CAAA,SAAA,EAAY,CAAC,GAAG,KAAK,CAAA;AAAA;AACvD,CAAA;AAGA,IAAM,GAAA,GAAM;AAAA,EACV,OAAA,EAAS,QAAA;AAAA,EACT,QAAA,EAAU,QAAA;AAAA,EACV,UAAA,EAAY,QAAA;AAAA,EACZ,WAAA,EAAa,QAAA;AAAA,EACb,UAAA,EAAY,QAAA;AAAA,EACZ,QAAA,EAAU,QAAA;AAAA,EACV,KAAA,EAAO,QAGT,CAAA;AAEA,IAAM,OAAA,GAAU;AAAA,EACd,OAAA,EAAS,KAAA,CAAM,OAAA,CAAQ,QAAG,CAAA;AAAA,EAC1B,KAAA,EAAO,KAAA,CAAM,KAAA,CAAM,QAAG,CAAA;AAAA,EAGtB,QAAA,EAAU,QAAA;AAAA,EAEV,IAAA,EAAM,QAAA;AAAA,EAIN,MAAA,EAAQ,WAAA;AAAA,EACR,OAAA,EAAS,QAAA;AAAA,EACT,KAAA,EAAO;AACT,CAAA;AAgBA,SAAS,eAAe,EAAA,EAAoB;AAC1C,EAAA,IAAI,KAAK,GAAA,EAAM;AAAC,IAAA,OAAO,GAAG,EAAE,CAAA,EAAA,CAAA;AAAA,EAAK;AACjC,EAAA,IAAI,KAAK,GAAA,EAAO;AAAC,IAAA,OAAO,CAAA,EAAA,CAAI,EAAA,GAAK,GAAA,EAAM,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,CAAA;AAAA,EAAI;AACrD,EAAA,OAAO,CAAA,EAAG,IAAA,CAAK,KAAA,CAAM,EAAA,GAAK,GAAK,CAAC,CAAA,EAAA,EAAK,IAAA,CAAK,KAAA,CAAO,EAAA,GAAK,GAAA,GAAS,GAAI,CAAC,CAAA,CAAA,CAAA;AACtE;AAEA,SAAS,UAAA,CAAW,IAAA,EAAc,MAAA,GAAS,EAAA,EAAY;AACrD,EAAA,IAAI,IAAA,CAAK,UAAU,MAAA,EAAQ;AAAC,IAAA,OAAO,IAAA;AAAA,EAAK;AACxC,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AAC5B,EAAA,IAAI,KAAA,CAAM,UAAU,CAAA,EAAG;AAAC,IAAA,OAAO,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,CAAC,SAAS,CAAC,CAAA;AAAA,EAAE;AAC/D,EAAA,OAAO,OAAO,KAAA,CAAM,KAAA,CAAM,EAAE,CAAA,CAAE,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA;AACzC;AAEA,SAAS,aAAa,KAAA,EAAkC;AACtD,EAAA,MAAM,OAAO,KAAA,CAAM,IAAA;AAKnB,EAAA,MAAM,OAAO,OAAO,IAAA,CAAK,gBAAA,KAAqB,QAAA,GAAW,KAAK,gBAAA,GAAmB,IAAA;AACjF,EAAA,MAAM,YAAY,OAAO,IAAA,CAAK,qBAAA,KAA0B,QAAA,GAAW,KAAK,qBAAA,GAAwB,IAAA;AAChG,EAAA,MAAM,QAAQ,OAAO,IAAA,CAAK,iBAAA,KAAsB,QAAA,GAAW,KAAK,iBAAA,GAAoB,IAAA;AACpF,EAAA,IAAI,IAAA,KAAS,IAAA,IAAQ,SAAA,KAAc,IAAA,IAAQ,UAAU,IAAA,EAAM;AACzD,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,MAAM,GAAA,GAAM,CAAC,KAAA,KAAkC,KAAA,KAAU,OAAO,GAAA,GAAM,KAAA,CAAM,eAAe,OAAO,CAAA;AAClG,EAAA,OAAO,CAAA,OAAA,EAAU,GAAA,CAAI,IAAI,CAAC,CAAA,QAAA,EAAW,GAAA,CAAI,KAAK,CAAC,CAAA,QAAA,EAAW,GAAA,CAAI,SAAS,CAAC,CAAA,MAAA,CAAA;AAC1E;AAMA,SAAS,YAAA,CAAa,KAAA,EAAe,OAAA,EAAgC,KAAA,GAAQ,EAAA,EAAY;AACvF,EAAA,MAAM,QAAA,GAAW,MAAM,MAAA,GAAS,CAAA;AAChC,EAAA,MAAM,OAAA,GAAU,CAAA;AAChB,EAAA,MAAM,QAAA,GAAW,KAAA,GAAQ,OAAA,GAAU,QAAA,GAAW,CAAA;AAC9C,EAAA,OAAO,OAAA;AAAA,IACL,CAAA,EAAG,IAAI,OAAO,CAAA,EAAG,IAAI,UAAA,CAAW,MAAA,CAAO,OAAO,CAAC,CAAA,CAAA,EAAI,KAAK,IAAI,GAAA,CAAI,UAAA,CAAW,MAAA,CAAO,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,QAAQ,CAAC,CAAC,CAAA,EAAG,GAAA,CAAI,QAAQ,CAAA;AAAA,GACzH;AACF;AAEA,SAAS,eAAA,CAAgB,OAAA,EAAgC,KAAA,GAAQ,EAAA,EAAY;AAC3E,EAAA,OAAO,OAAA,CAAQ,CAAA,EAAG,GAAA,CAAI,UAAU,GAAG,GAAA,CAAI,UAAA,CAAW,MAAA,CAAO,KAAA,GAAQ,CAAC,CAAC,CAAA,EAAG,GAAA,CAAI,WAAW,CAAA,CAAE,CAAA;AACzF;AAEA,SAAS,aAAA,CAAc,SAAiB,OAAA,EAAwC;AAC9E,EAAA,OAAO,GAAG,OAAA,CAAQ,GAAA,CAAI,QAAQ,CAAC,IAAI,OAAO,CAAA,CAAA;AAC5C;AAMO,SAAS,oBAAoB,OAAA,EAKb;AACrB,EAAA,MAAM,EAAE,UAAU,IAAA,EAAM,cAAA,GAAiB,MAAM,cAAA,GAAiB,KAAA,EAAO,SAAA,GAAY,KAAA,EAAM,GAAI,OAAA;AAE7F,EAAA,MAAM,KAAA,GAAqB;AAAA,IACzB,cAAA,EAAgB,IAAA;AAAA,IAChB,WAAA,EAAa,KAAA;AAAA,IACb,WAAA,EAAa;AAAA,GACf;AAEA,EAAA,OAAO,CAAC,KAAA,KAAsB;AAG5B,IAAA,QAAQ,MAAM,IAAA;AAAM;AAAA;AAAA;AAAA,MAIlB,KAAK,eAAA,EAAiB;AACpB,QAAA,KAAA,CAAM,cAAA,GAAiB;AAAA,UACrB,EAAA,EAAI,MAAM,IAAA,CAAK,SAAA;AAAA,UACf,KAAA,EAAO,MAAM,IAAA,CAAK,KAAA;AAAA,UAClB,KAAA,EAAO,MAAM,IAAA,CAAK;AAAA,SACpB;AACA,QAAA,KAAA,CAAM,WAAA,GAAc,CAAA;AAEpB,QAAA,MAAM,UAAA,GAAa,GAAG,KAAA,CAAM,IAAA,CAAK,QAAQ,CAAC,CAAA,CAAA,EAAI,KAAA,CAAM,IAAA,CAAK,KAAK,CAAA,CAAA;AAC9D,QAAA,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,MAAA,CAAO,GAAA,CAAI,QAAQ,CAAC,CAAA;AACtC,QAAA,OAAA,CAAQ,GAAA;AAAA,UACN,MAAM,MAAA,CAAO,CAAA,EAAG,GAAA,CAAI,KAAK,GAAG,GAAA,CAAI,UAAU,CAAA,CAAE,CAAA,GAC5C,aAAa,CAAA,QAAA,EAAW,UAAU,CAAA,CAAA,EAAI,KAAA,CAAM,WAAW,EAAE;AAAA,SAC3D;AACA,QAAA,OAAA,CAAQ,GAAA;AAAA,UACN,KAAA,CAAM,MAAA,CAAO,GAAA,CAAI,QAAQ,IAAI,GAAA,GAC7B,aAAA;AAAA,YACE,GAAG,OAAA,CAAQ,OAAO,IAAI,KAAA,CAAM,IAAA,CAAK,YAAY,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,GAAG,KAAA,CAAM,IAAA,CAAK,YAAY,MAAA,GAAS,EAAA,GAAK,QAAQ,EAAE,CAAA,CAAA;AAAA,YAC3G,KAAA,CAAM;AAAA;AACR,SACF;AACA,QAAA,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,MAAA,CAAO,GAAA,CAAI,QAAQ,CAAA,GAAI,GAAA,GAAM,KAAA,CAAM,SAAA,CAAU,GAAA,CAAI,QAAQ,CAAC,CAAA;AAC5E,QAAA;AAAA,MACF;AAAA,MAEA,KAAK,aAAA,EAAe;AAClB,QAAA,MAAM,SAAS,KAAA,CAAM,IAAA,CAAK,OAAA,GACtB,KAAA,CAAM,QAAQ,CAAA,EAAG,OAAA,CAAQ,OAAO,CAAA,KAAA,CAAO,IACvC,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,OAAA,CAAQ,KAAK,CAAA,OAAA,CAAS,CAAA;AAEzC,QAAA,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,MAAA,CAAO,GAAA,CAAI,QAAQ,CAAA,GAAI,GAAA,GAAM,KAAA,CAAM,SAAA,CAAU,GAAA,CAAI,QAAQ,CAAC,CAAA;AAC5E,QAAA,OAAA,CAAQ,GAAA;AAAA,UACN,KAAA,CAAM,OAAO,GAAA,CAAI,QAAQ,IAAI,GAAA,GAC7B,aAAA,CAAc,MAAA,EAAQ,KAAA,CAAM,SAAS;AAAA,SACvC;AACA,QAAA,OAAA,CAAQ,GAAA;AAAA,UACN,KAAA,CAAM,OAAO,GAAA,CAAI,QAAQ,IAAI,GAAA,GAC7B,eAAA,CAAgB,KAAA,CAAM,SAAA,EAAW,EAAE;AAAA,SACrC;AAEA,QAAA,KAAA,CAAM,cAAA,GAAiB,IAAA;AACvB,QAAA,KAAA,CAAM,WAAA,GAAc,CAAA;AACpB,QAAA;AAAA,MACF;AAAA;AAAA;AAAA;AAAA,MAKA,KAAK,aAAA,EAAe;AAClB,QAAA,KAAA,CAAM,WAAA,GAAc,IAAA;AAGpB,QAAA,MAAM,UAAA,GAAa,KAAA,CAAM,cAAA,GACrB,KAAA,CAAM,OAAO,GAAA,CAAI,QAAQ,CAAA,GAAI,GAAA,GAAM,KAAA,CAAM,SAAA,CAAU,GAAA,CAAI,QAAQ,IAAI,GAAA,GACnE,EAAA;AAEJ,QAAA,OAAA,CAAQ,IAAI,UAAU,CAAA;AACtB,QAAA,OAAA,CAAQ,GAAA,CAAI,UAAA,GAAa,YAAA,CAAa,CAAA,OAAA,EAAU,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA,CAAA,CAAA,EAAK,KAAA,CAAM,OAAA,EAAS,EAAE,CAAC,CAAA;AACtF,QAAA,OAAA,CAAQ,IAAI,UAAA,GAAa,aAAA;AAAA,UACvB,GAAG,OAAA,CAAQ,KAAK,IAAI,KAAA,CAAM,IAAA,CAAK,KAAK,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,GAAG,KAAA,CAAM,IAAA,CAAK,KAAK,MAAA,GAAS,EAAA,GAAK,QAAQ,EAAE,CAAA,CAAA;AAAA,UAC3F,KAAA,CAAM;AAAA,SACP,CAAA;AACD,QAAA,OAAA,CAAQ,IAAI,UAAA,GAAa,aAAA;AAAA,UACvB,KAAA,CAAM,GAAA,CAAI,CAAA,OAAA,EAAU,KAAA,CAAM,IAAA,CAAK,SAAS,CAAA,mBAAA,EAAsB,KAAA,CAAM,IAAA,CAAK,aAAa,CAAA,CAAE,CAAA;AAAA,UACxF,KAAA,CAAM;AAAA,SACP,CAAA;AAED,QAAA,KAAA,CAAM,WAAA,GAAc,KAAA,CAAM,cAAA,GAAiB,CAAA,GAAI,CAAA;AAC/C,QAAA;AAAA,MACF;AAAA,MAEA,KAAK,WAAA,EAAa;AAChB,QAAA,MAAM,UAAA,GAAa,KAAA,CAAM,cAAA,GACrB,KAAA,CAAM,OAAO,GAAA,CAAI,QAAQ,CAAA,GAAI,GAAA,GAAM,KAAA,CAAM,SAAA,CAAU,GAAA,CAAI,QAAQ,IAAI,GAAA,GACnE,EAAA;AAEJ,QAAA,MAAM,SAAS,KAAA,CAAM,IAAA,CAAK,OAAA,GACtB,KAAA,CAAM,QAAQ,CAAA,EAAG,OAAA,CAAQ,OAAO,CAAA,QAAA,CAAU,IAC1C,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,OAAA,CAAQ,KAAK,CAAA,OAAA,CAAS,CAAA;AAEzC,QAAA,OAAA,CAAQ,IAAI,UAAA,GAAa,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,QAAQ,CAAC,CAAA;AACpD,QAAA,OAAA,CAAQ,IAAI,UAAA,GAAa,aAAA;AAAA,UACvB,GAAG,MAAM,CAAA,CAAA,EAAI,KAAA,CAAM,GAAA,CAAI,IAAI,cAAA,CAAe,KAAA,CAAM,IAAA,CAAK,UAAU,CAAC,CAAA,EAAA,EAAK,KAAA,CAAM,IAAA,CAAK,UAAU,UAAU,CAAC,CAAA,CAAA;AAAA,UACrG,KAAA,CAAM;AAAA,SACP,CAAA;AAGD,QAAA,IAAI,KAAA,CAAM,KAAK,OAAA,EAAS;AACtB,UAAA,OAAA,CAAQ,IAAI,UAAA,GAAa,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,QAAQ,CAAC,CAAA;AACpD,UAAA,OAAA,CAAQ,IAAI,UAAA,GAAa,aAAA;AAAA,YACvB,KAAA,CAAM,KAAK,mBAAY,CAAA;AAAA,YACvB,KAAA,CAAM;AAAA,WACP,CAAA;AAED,UAAA,MAAM,YAAA,GAAe,KAAA,CAAM,IAAA,CAAK,OAAA,CAAQ,MAAM,IAAI,CAAA;AAClD,UAAA,KAAA,MAAW,QAAQ,YAAA,EAAc;AAC/B,YAAA,IAAI,IAAA,CAAK,MAAK,EAAG;AAEf,cAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AAC5B,cAAA,IAAI,WAAA,GAAc,EAAA;AAClB,cAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,gBAAA,IAAI,WAAA,CAAY,MAAA,GAAS,IAAA,CAAK,MAAA,GAAS,EAAA,EAAI;AACzC,kBAAA,IAAI,WAAA,EAAa;AACf,oBAAA,OAAA,CAAQ,GAAA,CAAI,aAAa,aAAA,CAAc,CAAA,GAAA,EAAM,WAAW,CAAA,CAAA,EAAI,KAAA,CAAM,OAAO,CAAC,CAAA;AAAA,kBAC5E;AACA,kBAAA,WAAA,GAAc,IAAA;AAAA,gBAChB,CAAA,MAAO;AACL,kBAAA,WAAA,GAAc,WAAA,GAAc,CAAA,EAAG,WAAW,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,GAAK,IAAA;AAAA,gBACzD;AAAA,cACF;AACA,cAAA,IAAI,WAAA,EAAa;AACf,gBAAA,OAAA,CAAQ,GAAA,CAAI,aAAa,aAAA,CAAc,CAAA,GAAA,EAAM,WAAW,CAAA,CAAA,EAAI,KAAA,CAAM,OAAO,CAAC,CAAA;AAAA,cAC5E;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAEA,QAAA,IAAI,KAAA,CAAM,KAAK,aAAA,CAAc,MAAA,GAAS,KAAK,KAAA,CAAM,IAAA,CAAK,YAAA,CAAa,MAAA,GAAS,CAAA,EAAG;AAC7E,UAAA,MAAM,KAAA,GAAQ,CAAC,GAAG,KAAA,CAAM,KAAK,YAAA,EAAc,GAAG,KAAA,CAAM,IAAA,CAAK,aAAa,CAAA;AACtE,UAAA,OAAA,CAAQ,IAAI,UAAA,GAAa,aAAA;AAAA,YACvB,KAAA,CAAM,GAAA,CAAI,CAAA,OAAA,EAAU,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,CAAE,GAAA,CAAI,CAAA,CAAA,KAAK,UAAA,CAAW,CAAA,EAAG,EAAE,CAAC,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA,EAAG,KAAA,CAAM,MAAA,GAAS,CAAA,GAAI,CAAA,EAAA,EAAK,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA,CAAA,GAAK,EAAE,CAAA,CAAE,CAAA;AAAA,YAChI,KAAA,CAAM;AAAA,WACP,CAAA;AAAA,QACH;AAEA,QAAA,OAAA,CAAQ,IAAI,UAAA,GAAa,eAAA,CAAgB,KAAA,CAAM,OAAA,EAAS,EAAE,CAAC,CAAA;AAE3D,QAAA,KAAA,CAAM,WAAA,GAAc,KAAA;AACpB,QAAA,KAAA,CAAM,WAAA,GAAc,KAAA,CAAM,cAAA,GAAiB,CAAA,GAAI,CAAA;AAC/C,QAAA;AAAA,MACF;AAAA,MAEA,KAAK,aAAA,EAAe;AAClB,QAAA,MAAM,UAAA,GAAa,cAAc,KAAK,CAAA;AACtC,QAAA,OAAA,CAAQ,IAAI,UAAA,GAAa,aAAA;AAAA,UACvB,CAAA,EAAG,OAAA,CAAQ,KAAK,CAAA,CAAA,EAAI,MAAM,KAAA,CAAM,QAAQ,CAAC,CAAA,CAAA,EAAI,MAAM,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA,CAAA;AAAA,UAC1E,KAAA,CAAM;AAAA,SACP,CAAA;AACD,QAAA;AAAA,MACF;AAAA;AAAA;AAAA;AAAA,MAKA,KAAK,iBAAA,EAAmB;AACtB,QAAA,MAAM,UAAA,GAAa,cAAc,KAAK,CAAA;AACtC,QAAA,IAAI,OAAA,EAAS;AACX,UAAA,OAAA,CAAQ,IAAI,UAAA,GAAa,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,QAAQ,CAAC,CAAA;AACpD,UAAA,OAAA,CAAQ,IAAI,UAAA,GAAa,aAAA;AAAA,YACvB,KAAA,CAAM,GAAA,CAAI,CAAA,6BAAA,EAAiB,KAAA,CAAM,IAAA,CAAK,SAAS,CAAA,CAAA,EAAI,KAAA,CAAM,IAAA,CAAK,aAAa,CAAA,mBAAA,CAAM,CAAA;AAAA,YACjF,KAAA,CAAM;AAAA,WACP,CAAA;AAAA,QACH;AACA,QAAA;AAAA,MACF;AAAA,MAEA,KAAK,WAAA,EAAa;AAChB,QAAA,MAAM,UAAA,GAAa,cAAc,KAAK,CAAA;AACtC,QAAA,IAAI,OAAA,EAAS;AACX,UAAA,MAAM,SAAA,GAAY,KAAA,CAAM,IAAA,CAAK,SAAA,KAAc,MAAA,GAAY,KAAA,CAAM,GAAA,CAAI,CAAA,EAAA,EAAK,KAAA,CAAM,IAAA,CAAK,SAAS,CAAA,CAAE,CAAA,GAAI,EAAA;AAChG,UAAA,MAAM,WAAW,SAAA,GAAY,KAAA,CAAM,IAAI,CAAA,EAAA,EAAK,KAAA,CAAM,KAAK,YAAY,CAAA,OAAA,EAAU,MAAM,IAAA,CAAK,SAAA,IAAa,CAAC,CAAA,QAAA,EAAW,KAAA,CAAM,KAAK,iBAAA,IAAqB,CAAC,aAAa,CAAA,GAAI,EAAA;AACnK,UAAA,OAAA,CAAQ,MAAA,CAAO,MAAM,UAAA,GAAa,aAAA;AAAA,YAChC,CAAA,EAAG,KAAA,CAAM,MAAA,CAAO,OAAA,CAAQ,QAAQ,CAAC,CAAA,CAAA,EAAI,KAAA,CAAM,GAAA,CAAI,aAAa,CAAC,CAAA,EAAG,SAAS,GAAG,QAAQ,CAAA,CAAA;AAAA,YACpF,KAAA,CAAM;AAAA,WACP,CAAA;AAAA,QACH;AACA,QAAA;AAAA,MACF;AAAA,MAEA,KAAK,SAAA,EAAW;AACd,QAAA,IAAI,OAAA,EAAS;AAEX,UAAA,OAAA,CAAQ,MAAA,CAAO,MAAM,CAAA,EAAA,CAAI,CAAA;AACzB,UAAA,MAAM,UAAA,GAAa,cAAc,KAAK,CAAA;AACtC,UAAA,MAAM,SAAA,GAAY,MAAM,IAAA,CAAK,UAAA,GAAa,UAAU,KAAA,CAAM,IAAA,CAAK,UAAU,CAAA,CAAA,GAAK,EAAA;AAC9E,UAAA,OAAA,CAAQ,IAAI,UAAA,GAAa,aAAA;AAAA,YACvB,CAAA,EAAG,MAAM,MAAA,CAAO,OAAA,CAAQ,QAAQ,CAAC,CAAA,SAAA,EAAY,KAAA,CAAM,GAAA,CAAI,CAAA,CAAA,EAAI,cAAA,CAAe,MAAM,IAAA,CAAK,UAAU,CAAC,CAAA,EAAA,EAAK,KAAA,CAAM,KAAK,UAAU,CAAA,IAAA,EAAO,SAAS,CAAA,CAAA,CAAG,CAAC,CAAA,CAAA;AAAA,YAC9I,KAAA,CAAM;AAAA,WACP,CAAA;AAGD,UAAA,IAAI,KAAA,CAAM,KAAK,OAAA,EAAS;AACtB,YAAA,MAAM,MAAA,GAAS,SAAA,GAAY,GAAA,GAAO,cAAA,GAAiB,GAAA,GAAM,GAAA;AACzD,YAAA,MAAM,OAAA,GAAU,KAAA,CAAM,IAAA,CAAK,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,MAAM,CAAA,CAAE,OAAA,CAAQ,KAAA,EAAO,GAAG,CAAA,CAAE,IAAA,EAAK;AAC7E,YAAA,IAAI,OAAA,EAAS;AACX,cAAA,OAAA,CAAQ,IAAI,UAAA,GAAa,aAAA;AAAA,gBACvB,KAAA,CAAM,GAAA,CAAI,CAAA,aAAA,EAAS,OAAO,CAAA,EAAG,KAAA,CAAM,IAAA,CAAK,OAAA,CAAQ,MAAA,GAAS,MAAA,GAAS,KAAA,GAAQ,EAAE,CAAA,CAAA,CAAG,CAAA;AAAA,gBAC/E,KAAA,CAAM;AAAA,eACP,CAAA;AAAA,YACH;AAAA,UACF;AAAA,QACF;AACA,QAAA;AAAA,MACF;AAAA;AAAA;AAAA;AAAA,MAKA,KAAK,YAAA,EAAc;AACjB,QAAA,MAAM,UAAA,GAAa,cAAc,KAAK,CAAA;AACtC,QAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,QAAA;AAC5B,QAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,QAAA;AAExB,QAAA,IAAI,OAAA,GAAU,EAAA;AACd,QAAA,IAAI,SAAA,EAAW;AAEb,UAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,KAAA;AAC5B,UAAA,IAAI,YAAY,MAAA,CAAO,IAAA,CAAK,QAAQ,CAAA,CAAE,SAAS,CAAA,EAAG;AAChD,YAAA,MAAM,GAAA,GAAM,IAAA,CAAK,SAAA,CAAU,QAAQ,CAAA;AACnC,YAAA,MAAM,MAAA,GAAS,GAAA;AACf,YAAA,OAAA,GAAU,CAAA,CAAA,EAAI,KAAA,CAAM,GAAA,CAAI,GAAA,CAAI,KAAA,CAAM,CAAA,EAAG,MAAM,CAAA,IAAK,GAAA,CAAI,MAAA,GAAS,MAAA,GAAS,KAAA,GAAQ,GAAG,CAAC,CAAA,CAAA;AAAA,UACpF;AAAA,QACF,CAAA,MAAA,IAAW,MAAM,QAAA,EAAU;AACzB,UAAA,OAAA,GAAU,CAAA,CAAA,EAAI,MAAM,GAAA,CAAI,UAAA,CAAW,KAAK,QAAA,EAAoB,EAAE,CAAC,CAAC,CAAA,CAAA;AAAA,QAClE,CAAA,MAAA,IAAW,MAAM,KAAA,EAAO;AACtB,UAAA,OAAA,GAAU,IAAI,KAAA,CAAM,GAAA,CAAI,IAAK,IAAA,CAAK,KAAA,CAAiB,MAAM,CAAA,EAAG,EAAE,CAAC,CAAA,EAAI,KAAK,KAAA,CAAiB,MAAA,GAAS,KAAK,KAAA,GAAQ,EAAE,GAAG,CAAC,CAAA,CAAA;AAAA,QACvH,CAAA,MAAA,IAAW,MAAM,OAAA,EAAS;AACxB,UAAA,OAAA,GAAU,CAAA,CAAA,EAAI,KAAA,CAAM,GAAA,CAAI,CAAA,EAAA,EAAM,IAAA,CAAK,OAAA,CAAmB,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA,CAAE,CAAC,CAAA,CAAA;AAAA,QACvE;AAEA,QAAA,OAAA,CAAQ,MAAA,CAAO,MAAM,UAAA,GAAa,aAAA;AAAA,UAChC,CAAA,EAAG,KAAA,CAAM,SAAA,CAAU,OAAA,CAAQ,IAAI,CAAC,CAAA,CAAA,EAAI,KAAA,CAAM,SAAA,CAAU,QAAQ,CAAC,CAAA,EAAG,OAAO,CAAA,CAAA;AAAA,UACvE,KAAA,CAAM;AAAA,SACP,CAAA;AACD,QAAA;AAAA,MACF;AAAA,MAEA,KAAK,UAAA,EAAY;AACf,QAAA,MAAM,MAAA,GAAS,KAAA,CAAM,IAAA,CAAK,OAAA,GACtB,CAAA,CAAA,EAAI,QAAQ,OAAO,CAAA,CAAA,GACnB,CAAA,CAAA,EAAI,OAAA,CAAQ,KAAK,CAAA,CAAA;AAErB,QAAA,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,KAAA,CAAM,GAAA,CAAI,cAAA,CAAe,KAAA,CAAM,IAAA,CAAK,UAAU,CAAC,CAAC;AAAA,CAAI,CAAA;AAGtF,QAAA,IAAI,cAAA,EAAgB;AAClB,UAAA,MAAM,UAAA,GAAa,cAAc,KAAK,CAAA;AACtC,UAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,QAAA;AACxB,UAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,MAAA;AAG1B,UAAA,IAAI,UAAU,OAAA,EAAS;AACrB,YAAA,MAAM,YAAA,GAAe,YAAY,GAAA,GAAO,GAAA;AACxC,YAAA,IAAI,SAAA,EAAW;AAEb,cAAA,MAAM,SAAA,GAAY,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG,YAAY,CAAA;AAC9C,cAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,KAAA,CAAM,IAAI,CAAA;AAClC,cAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,gBAAA,IAAI,IAAA,CAAK,MAAK,EAAG;AACf,kBAAA,OAAA,CAAQ,IAAI,UAAA,GAAa,aAAA;AAAA,oBACvB,KAAA,CAAM,GAAA,CAAI,CAAA,cAAA,EAAU,IAAI,CAAA,CAAE,CAAA;AAAA,oBAC1B,KAAA,CAAM;AAAA,mBACP,CAAA;AAAA,gBACH;AAAA,cACF;AACA,cAAA,IAAI,MAAA,CAAO,SAAS,YAAA,EAAc;AAChC,gBAAA,OAAA,CAAQ,IAAI,UAAA,GAAa,aAAA;AAAA,kBACvB,MAAM,GAAA,CAAI,CAAA,mBAAA,EAAe,MAAA,CAAO,MAAA,GAAS,YAAY,CAAA,YAAA,CAAc,CAAA;AAAA,kBACnE,KAAA,CAAM;AAAA,iBACP,CAAA;AAAA,cACH;AAAA,YACF,CAAA,MAAO;AAEL,cAAA,MAAM,WAAA,GAAc,MAAA,CACjB,KAAA,CAAM,CAAA,EAAG,YAAY,CAAA,CACrB,OAAA,CAAQ,KAAA,EAAO,GAAG,CAAA,CAClB,OAAA,CAAQ,MAAA,EAAQ,GAAG,EACnB,IAAA,EAAK;AACR,cAAA,IAAI,WAAA,IAAe,WAAA,CAAY,MAAA,GAAS,EAAA,EAAI;AAC1C,gBAAA,OAAA,CAAQ,IAAI,UAAA,GAAa,aAAA;AAAA,kBACvB,KAAA,CAAM,GAAA,CAAI,CAAA,cAAA,EAAU,WAAW,CAAA,EAAG,OAAO,MAAA,GAAS,YAAA,GAAe,KAAA,GAAQ,EAAE,CAAA,CAAE,CAAA;AAAA,kBAC7E,KAAA,CAAM;AAAA,iBACP,CAAA;AAAA,cACH;AAAA,YACF;AAAA,UACF;AAGA,UAAA,IAAI,IAAA,EAAM,OAAA,IAAW,CAAC,MAAA,EAAQ;AAC5B,YAAA,OAAA,CAAQ,IAAI,UAAA,GAAa,aAAA;AAAA,cACvB,KAAA,CAAM,IAAI,CAAA,iBAAA,EAAW,IAAA,CAAK,QAAmB,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA,CAAE,CAAA;AAAA,cAC3D,KAAA,CAAM;AAAA,aACP,CAAA;AAAA,UACH;AAAA,QACF;AACA,QAAA;AAAA,MACF;AAAA,MAEA,KAAK,YAAA,EAAc;AACjB,QAAA,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,CAAA,CAAA,EAAI,OAAA,CAAQ,KAAK;AAAA,CAAI,CAAA;AAC1C,QAAA,MAAM,UAAA,GAAa,cAAc,KAAK,CAAA;AACtC,QAAA,OAAA,CAAQ,IAAI,UAAA,GAAa,aAAA;AAAA,UACvB,KAAA,CAAM,KAAA,CAAM,CAAA,iBAAA,EAAU,KAAA,CAAM,IAAA,CAAK,MAAM,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA,CAAE,CAAA;AAAA,UACrD,KAAA,CAAM;AAAA,SACP,CAAA;AACD,QAAA;AAAA,MACF;AAAA;AAAA;AAAA;AAAA,MAKA,KAAK,cAAA,EAAgB;AACnB,QAAA,IAAI,OAAA,EAAS;AACX,UAAA,MAAM,UAAA,GAAa,cAAc,KAAK,CAAA;AACtC,UAAA,OAAA,CAAQ,IAAI,UAAA,GAAa,aAAA;AAAA,YACvB,KAAA,CAAM,GAAA,CAAI,CAAA,EAAG,OAAA,CAAQ,MAAM,CAAA,OAAA,EAAU,KAAA,CAAM,IAAA,CAAK,SAAS,CAAA,IAAA,EAAO,KAAA,CAAM,IAAA,CAAK,MAAM,CAAA,CAAE,CAAA;AAAA,YACnF,KAAA,CAAM;AAAA,WACP,CAAA;AAAA,QACH;AACA,QAAA;AAAA,MACF;AAAA,MAEA,KAAK,iBAAA,EAAmB;AACtB,QAAA,MAAM,UAAA,GAAa,aAAa,KAAK,CAAA;AACrC,QAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,IAAA,CAAK,KAAA,IAAS,UAAA;AAClC,QAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,KAAK,GAAA,CAAI,GAAA,EAAK,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,IAAA,CAAK,QAAA,IAAY,CAAC,CAAC,CAAC,CAAA;AAChF,QAAA,MAAM,OAAA,GAAU,KAAA,CAAM,IAAA,CAAK,OAAA,IAAW,EAAA;AAEtC,QAAA,IAAI,OAAA,EAAS;AACX,UAAA,MAAM,UAAA,GAAa,cAAc,KAAK,CAAA;AACtC,UAAA,MAAM,IAAA,GAAO,CAAA,CAAA,EAAI,KAAK,CAAA,EAAA,EAAK,QAAQ,IAAI,OAAA,GAAU,CAAA,GAAA,EAAM,OAAO,CAAA,CAAA,GAAK,EAAE,CAAA,CAAA;AACrE,UAAA,OAAA,CAAQ,GAAA,CAAI,aAAa,aAAA,CAAc,KAAA,CAAM,KAAK,IAAI,CAAA,EAAG,KAAA,CAAM,OAAO,CAAC,CAAA;AACvE,UAAA,IAAI,UAAA,EAAY;AACd,YAAA,OAAA,CAAQ,GAAA,CAAI,UAAA,GAAa,aAAA,CAAc,KAAA,CAAM,GAAA,CAAI,CAAA,IAAA,EAAO,UAAU,CAAA,CAAE,CAAA,EAAG,KAAA,CAAM,OAAO,CAAC,CAAA;AAAA,UACvF;AAAA,QACF,CAAA,MAAA,IAAW,YAAY,KAAA,KAAU,MAAA,IAAU,UAAU,MAAA,CAAA,KAAY,QAAA,KAAa,GAAA,IAAO,QAAA,KAAa,CAAA,CAAA,EAAI;AACpG,UAAA,MAAM,YAAA,GAAe,UAAA,GAAa,CAAA,GAAA,EAAM,UAAU,CAAA,CAAA,GAAK,EAAA;AACvD,UAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAG,KAAA,CAAM,IAAA,CAAK,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,CAAG,CAAC,CAAA,CAAA,EAAI,OAAO,CAAA,EAAG,YAAY,CAAA,CAAE,CAAA;AAAA,QACrE;AACA,QAAA;AAAA,MACF;AAAA,MAEA,KAAK,eAAA,EAAiB;AACpB,QAAA,MAAM,UAAA,GAAa,aAAa,KAAK,CAAA;AACrC,QAAA,IAAI,OAAA,IAAW,KAAA,CAAM,IAAA,CAAK,OAAA,EAAS;AACjC,UAAA,MAAM,UAAA,GAAa,cAAc,KAAK,CAAA;AACtC,UAAA,OAAA,CAAQ,IAAI,UAAA,GAAa,aAAA;AAAA,YACvB,MAAM,IAAA,CAAK,CAAA,QAAA,EAAW,KAAA,CAAM,IAAA,CAAK,MAAM,CAAA,EAAG,KAAA,CAAM,IAAA,CAAK,OAAA,GAAU,MAAM,KAAA,CAAM,IAAA,CAAK,OAAO,CAAA,CAAA,GAAK,EAAE,CAAA,CAAE,CAAA;AAAA,YAChG,KAAA,CAAM;AAAA,WACP,CAAA;AACD,UAAA,IAAI,UAAA,EAAY;AACd,YAAA,OAAA,CAAQ,GAAA,CAAI,UAAA,GAAa,aAAA,CAAc,KAAA,CAAM,GAAA,CAAI,CAAA,IAAA,EAAO,UAAU,CAAA,CAAE,CAAA,EAAG,KAAA,CAAM,OAAO,CAAC,CAAA;AAAA,UACvF;AAEA,UAAA,IAAI,KAAA,CAAM,IAAA,CAAK,MAAA,KAAW,SAAA,IAAa,MAAM,SAAA,EAAW;AACtD,YAAA,MAAM,MAAM,KAAA,CAAM,SAAA;AAClB,YAAA,OAAA,CAAQ,GAAA,CAAI,UAAA,GAAa,aAAA,CAAc,KAAA,CAAM,GAAA,CAAI,CAAA,yCAAA,EAA4C,GAAG,CAAA,UAAA,CAAY,CAAA,EAAG,KAAA,CAAM,OAAO,CAAC,CAAA;AAC7H,YAAA,OAAA,CAAQ,GAAA,CAAI,UAAA,GAAa,aAAA,CAAc,KAAA,CAAM,GAAA,CAAI,CAAA,yCAAA,EAA4C,GAAG,CAAA,CAAE,CAAA,EAAG,KAAA,CAAM,OAAO,CAAC,CAAA;AAAA,UACrH;AAAA,QACF;AAEA,QAAA,IAAI,CAAC,YAAY,KAAA,CAAM,IAAA,CAAK,WAAW,MAAA,IAAU,KAAA,CAAM,IAAA,CAAK,MAAA,KAAW,OAAA,CAAA,EAAU;AAC/E,UAAA,MAAM,YAAA,GAAe,UAAA,GAAa,CAAA,EAAA,EAAK,UAAU,CAAA,CAAA,CAAA,GAAM,EAAA;AACvD,UAAA,OAAA,CAAQ,GAAA;AAAA,YACN,KAAA,CAAM,KAAK,MAAA,KAAW,MAAA,GAClB,GAAG,OAAA,CAAQ,OAAO,CAAA,CAAA,EAAI,KAAA,CAAM,IAAA,CAAK,OAAO,GAAG,YAAY,CAAA,CAAA,GACvD,GAAG,OAAA,CAAQ,KAAK,IAAI,KAAA,CAAM,IAAA,CAAK,OAAO,CAAA,EAAG,YAAY,CAAA;AAAA,WAC3D;AAAA,QACF;AACA,QAAA;AAAA,MACF;AAAA,MAEA,KAAK,qBAAA,EAAuB;AAC1B,QAAA,IAAI,OAAA,EAAS;AACX,UAAA,MAAM,UAAA,GAAa,cAAc,KAAK,CAAA;AACtC,UAAA,MAAM,aAAA,GAAwC;AAAA,YAC5C,YAAA,EAAc,QAAA;AAAA,YACd,SAAA,EAAW,WAAA;AAAA,YACX,OAAA,EAAS,QAAA;AAAA,YACT,aAAA,EAAe,WAAA;AAAA,YACf,KAAA,EAAO,QAAA;AAAA,YACP,UAAA,EAAY;AAAA,WACd;AACA,UAAA,MAAM,IAAA,GAAO,aAAA,CAAc,KAAA,CAAM,IAAA,CAAK,QAAQ,CAAA,IAAK,MAAA;AACnD,UAAA,OAAA,CAAQ,IAAI,UAAA,GAAa,aAAA;AAAA,YACvB,KAAA,CAAM,GAAA,CAAI,CAAA,EAAA,EAAK,IAAI,CAAA,EAAA,EAAK,KAAA,CAAM,IAAA,CAAK,UAAU,CAAA,EAAA,EAAK,KAAA,CAAM,IAAA,CAAK,QAAQ,CAAA,CAAE,CAAA;AAAA,YACvE,KAAA,CAAM;AAAA,WACP,CAAA;AAAA,QACH;AACA,QAAA;AAAA,MACF;AAAA,MAEA,KAAK,WAAA,EAAa;AAChB,QAAA,IAAI,CAAC,SAAA,EAAW;AAAE,UAAA;AAAA,QAAO;AACzB,QAAA,MAAM,UAAA,GAAa,cAAc,KAAK,CAAA;AACtC,QAAA,MAAM,SAAA,GAAY,MAAM,IAAA,CAAK,SAAA,KAAc,SAAY,CAAA,QAAA,EAAW,KAAA,CAAM,IAAA,CAAK,SAAS,CAAA,CAAA,CAAA,GAAM,EAAA;AAC5F,QAAA,OAAA,CAAQ,IAAI,UAAA,GAAa,aAAA;AAAA,UACvB,KAAA,CAAM,GAAA,CAAI,CAAA,kCAAA,EAAsB,SAAS,CAAA,mBAAA,CAAM,CAAA;AAAA,UAC/C,KAAA,CAAM;AAAA,SACP,CAAA;AAED,QAAA,KAAA,MAAW,QAAQ,KAAA,CAAM,IAAA,CAAK,YAAA,CAAa,KAAA,CAAM,IAAI,CAAA,EAAG;AACtD,UAAA,OAAA,CAAQ,GAAA,CAAI,UAAA,GAAa,aAAA,CAAc,KAAA,CAAM,GAAA,CAAI,CAAA,EAAA,EAAK,IAAI,CAAA,CAAE,CAAA,EAAG,KAAA,CAAM,OAAO,CAAC,CAAA;AAAA,QAC/E;AACA,QAAA,OAAA,CAAQ,GAAA,CAAI,aAAa,aAAA,CAAc,KAAA,CAAM,IAAI,kDAAoB,CAAA,EAAG,KAAA,CAAM,OAAO,CAAC,CAAA;AACtF,QAAA,KAAA,MAAW,CAAA,IAAK,KAAA,CAAM,IAAA,CAAK,QAAA,EAAU;AACnC,UAAA,MAAM,SAAA,GAAY,CAAA,CAAA,EAAI,CAAA,CAAE,IAAI,CAAA,CAAA,CAAA;AAC5B,UAAA,MAAM,UAAU,CAAA,CAAE,OAAA;AAElB,UAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAA;AAChC,UAAA,MAAM,YAAY,CAAA,EAAG,SAAS,IAAI,KAAA,CAAM,CAAC,KAAK,EAAE,CAAA,CAAA;AAChD,UAAA,OAAA,CAAQ,GAAA,CAAI,UAAA,GAAa,aAAA,CAAc,KAAA,CAAM,GAAA,CAAI,CAAA,EAAA,EAAK,SAAS,CAAA,CAAE,CAAA,EAAG,KAAA,CAAM,OAAO,CAAC,CAAA;AAClF,UAAA,KAAA,MAAW,IAAA,IAAQ,KAAA,CAAM,KAAA,CAAM,CAAC,CAAA,EAAG;AACjC,YAAA,OAAA,CAAQ,GAAA,CAAI,UAAA,GAAa,aAAA,CAAc,KAAA,CAAM,GAAA,CAAI,CAAA,MAAA,EAAS,IAAI,CAAA,CAAE,CAAA,EAAG,KAAA,CAAM,OAAO,CAAC,CAAA;AAAA,UACnF;AAAA,QACF;AACA,QAAA,OAAA,CAAQ,GAAA,CAAI,aAAa,aAAA,CAAc,KAAA,CAAM,IAAI,oDAAsB,CAAA,EAAG,KAAA,CAAM,OAAO,CAAC,CAAA;AACxF,QAAA;AAAA,MACF;AAIE;AACJ,EACF,CAAA;AAEA,EAAA,SAAS,cAAcA,MAAAA,EAA4B;AACjD,IAAA,IAAIA,MAAAA,CAAM,cAAA,IAAkBA,MAAAA,CAAM,WAAA,EAAa;AAC7C,MAAA,OAAO,KAAA,CAAM,MAAA,CAAO,GAAA,CAAI,QAAQ,CAAA,GAAI,MAAM,KAAA,CAAM,SAAA,CAAU,GAAA,CAAI,QAAQ,CAAA,GAAI,GAAA;AAAA,IAC5E;AACA,IAAA,IAAIA,OAAM,cAAA,EAAgB;AACxB,MAAA,OAAO,KAAA,CAAM,MAAA,CAAO,GAAA,CAAI,QAAQ,CAAA,GAAI,MAAM,KAAA,CAAM,SAAA,CAAU,GAAA,CAAI,QAAQ,CAAA,GAAI,GAAA;AAAA,IAC5E;AACA,IAAA,IAAIA,OAAM,WAAA,EAAa;AACrB,MAAA,OAAO,EAAA;AAAA,IACT;AACA,IAAA,OAAO,EAAA;AAAA,EACT;AACF;AASO,SAAS,qBAAA,GAA4C;AAC1D,EAAA,OAAO,mBAAA,CAAoB;AAAA,IACzB,OAAA,EAAS,KAAA;AAAA,IACT,cAAA,EAAgB,KAAA;AAAA,IAChB,cAAA,EAAgB;AAAA,GACjB,CAAA;AACH;AAKO,SAAS,sBAAA,GAA6C;AAC3D,EAAA,OAAO,mBAAA,CAAoB;AAAA,IACzB,OAAA,EAAS,IAAA;AAAA,IACT,cAAA,EAAgB,IAAA;AAAA,IAChB,cAAA,EAAgB;AAAA,GACjB,CAAA;AACH;AAKO,SAAS,mBAAA,GAA0C;AACxD,EAAA,OAAO,mBAAA,CAAoB;AAAA,IACzB,OAAA,EAAS,IAAA;AAAA,IACT,cAAA,EAAgB,IAAA;AAAA,IAChB,cAAA,EAAgB,IAAA;AAAA,IAChB,SAAA,EAAW;AAAA,GACZ,CAAA;AACH;;;AC/kBA,iBAAA,EAAkB;AAiClB,SAAS,gBAAA,CAAiB,OAAgB,YAAA,EAAgC;AACxE,EAAA,IAAI,OAAO,UAAU,SAAA,EAAW;AAC9B,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,MAAM,UAAA,GAAa,KAAA,CAAM,IAAA,EAAK,CAAE,WAAA,EAAY;AAC5C,IAAA,IAAI,CAAC,QAAQ,GAAA,EAAK,KAAA,EAAO,KAAK,IAAI,CAAA,CAAE,QAAA,CAAS,UAAU,CAAA,EAAG;AAAC,MAAA,OAAO,IAAA;AAAA,IAAK;AACvE,IAAA,IAAI,CAAC,SAAS,GAAA,EAAK,IAAA,EAAM,KAAK,KAAK,CAAA,CAAE,QAAA,CAAS,UAAU,CAAA,EAAG;AAAC,MAAA,OAAO,KAAA;AAAA,IAAM;AAAA,EAC3E;AACA,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,OAAO,KAAA,KAAU,CAAA;AAAA,EACnB;AACA,EAAA,OAAO,YAAA;AACT;AAEA,IAAO,cAAQ,aAAA,CAAc;AAAA,EAC3B,EAAA,EAAI,WAAA;AAAA,EACJ,WAAA,EAAa,oEAAA;AAAA,EAEb,OAAA,EAAS;AAAA,IACP,MAAM,OAAA,CAAQ,GAAA,EAAsB,KAAA,EAAqC;AAEvE,MAAA,MAAM,KAAA,GAAS,OAAA,IAAW,KAAA,IAAS,OAAQ,KAAA,CAA8B,KAAA,KAAU,QAAA,IAAa,KAAA,CAA8B,KAAA,KAAU,IAAA,GACnI,KAAA,CAA8B,KAAA,GAC/B,KAAA;AAEJ,MAAA,MAAM;AAAA,QACJ,IAAA;AAAA,QACA,UAAA,GAAa,GAAA,CAAI,GAAA,IAAO,OAAA,CAAQ,GAAA,EAAI;AAAA,QACpC,aAAA,GAAgB,GAAA;AAAA,QAChB,WAAA,GAAc,GAAA;AAAA,QACd,SAAS,UAAA,GAAa,IAAA;AAAA,QACtB,OAAO,QAAA,GAAW,KAAA;AAAA,QAClB,UAAU,WAAA,GAAc,KAAA;AAAA,QACxB,SAAA;AAAA,QACA,IAAA,GAAO,QAAA;AAAA,QACP,IAAA,GAAO,SAAA;AAAA,QACP,UAAA;AAAA,QACA,KAAA;AAAA,QACA,KAAA;AAAA,QACA,SAAS,UAAA,GAAa,KAAA;AAAA,QACtB,SAAS,UAAA,GAAa,KAAA;AAAA,QACtB,MAAM,OAAA,GAAU,KAAA;AAAA,QAChB,WAAW,SAAA,GAAY,KAAA;AAAA,QACvB,OAAO,QAAA,GAAW,KAAA;AAAA,QAClB,OAAA,EAAS,cAAA;AAAA,QACT,MAAA,EAAQ,cAAA;AAAA,QACR,MAAM,UAAA,GAAa;AAAA,OACrB,GAAI,KAAA;AAEJ,MAAA,MAAM,OAAA,GAAU,gBAAA,CAAiB,UAAA,EAAY,IAAI,CAAA;AACjD,MAAA,MAAM,KAAA,GAAQ,gBAAA,CAAiB,QAAA,EAAU,KAAK,CAAA;AAC9C,MAAA,MAAM,QAAA,GAAW,gBAAA,CAAiB,WAAA,EAAa,KAAK,CAAA;AACpD,MAAA,MAAM,OAAA,GAAU,gBAAA,CAAiB,UAAA,EAAY,KAAK,CAAA;AAClD,MAAA,MAAM,gBAAA,GAAmB,gBAAA,CAAiB,UAAA,EAAY,KAAK,CAAA;AAC3D,MAAA,MAAM,IAAA,GAAO,gBAAA,CAAiB,OAAA,EAAS,KAAK,CAAA;AAC5C,MAAA,MAAM,MAAA,GAAS,gBAAA,CAAiB,SAAA,EAAW,KAAK,CAAA;AAChD,MAAA,MAAM,KAAA,GAAQ,gBAAA,CAAiB,QAAA,EAAU,KAAK,CAAA;AAI9C,MAAA,MAAM,cAAc,OAAO,cAAA,KAAmB,QAAA,IAAY,cAAA,GAAiB,IACvE,cAAA,GACA,MAAA;AAEJ,MAAA,MAAM,eAAA,GAAkB,WAAA,KAAgB,MAAA,GAAY,IAAI,iBAAgB,GAAI,MAAA;AAC5E,MAAA,IAAI,aAAA;AAEJ,MAAA,IAAI,eAAA,IAAmB,gBAAgB,MAAA,EAAW;AAChD,QAAA,aAAA,GAAgB,WAAW,MAAM;AAC/B,UAAA,eAAA,CAAgB,KAAA;AAAA,YACd,IAAI,KAAA,CAAM,CAAA,gCAAA,EAAmC,WAAW,CAAA,aAAA,EAAgB,WAAW,CAAA,CAAA,CAAG;AAAA,WACxF;AAAA,QACF,CAAA,EAAG,cAAc,GAAI,CAAA;AAGrB,QAAA,aAAA,CAAc,KAAA,IAAQ;AAAA,MACxB;AAGA,MAAA,MAAM,gBAAgB,MAAM;AAC1B,QAAA,IAAI,kBAAkB,MAAA,EAAW;AAC/B,UAAA,YAAA,CAAa,aAAa,CAAA;AAC1B,UAAA,aAAA,GAAgB,MAAA;AAAA,QAClB;AAAA,MACF,CAAA;AAGA,MAAA,IAAI,CAAC,IAAA,EAAM;AACT,QAAA,IAAI,WAAW,SAAA,EAAW;AACxB,UAAA,MAAM,cAAA,GAAiB,IAAI,cAAA,CAAe,UAAA,IAAwB,IAAI,GAAA,IAAO,OAAA,CAAQ,KAAK,CAAA;AAC1F,UAAA,MAAM,QAAA,GAAW,cAAA,CAAe,kBAAA,CAAmB,SAAmB,CAAA;AACtE,UAAA,IAAI;AACF,YAAA,MAAM,GAAA,GAAM,MAAMC,QAAA,CAAG,QAAA,CAAS,UAAU,OAAO,CAAA;AAC/C,YAAA,MAAM,IAAA,GAAiB,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AACrC,YAAA,IAAI,IAAA,CAAK,WAAW,OAAA,EAAS;AAC3B,cAAA,GAAA,CAAI,EAAA,EAAI,IAAA,GAAO,CAAA,qCAAA,EAAwC,IAAA,CAAK,MAAM,CAAA,sBAAA,CAAwB,CAAA;AAC1F,cAAA,aAAA,EAAc;AACd,cAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,gBAAA,EAAiB;AAAA,YAC9C;AACA,YAAA,MAAM,UAAA,GAAA,iBAAa,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAC1C,YAAA,MAAM,YAAA,GAAe,EAAE,GAAG,IAAA,EAAM,MAAA,EAAQ,YAAqB,UAAA,EAAY,eAAA,EAAiB,4BAAA,EAA8B,SAAA,EAAW,UAAA,EAAW;AAC9I,YAAA,MAAMA,QAAA,CAAG,UAAU,QAAA,EAAU,IAAA,CAAK,UAAU,YAAA,EAAc,IAAA,EAAM,CAAC,CAAA,EAAG,OAAO,CAAA;AAC3E,YAAA,MAAM,mBAAA,GAAsB,IAAI,mBAAA,CAAoB,UAAA,IAAwB,IAAI,GAAA,IAAO,OAAA,CAAQ,KAAK,CAAA;AACpG,YAAA,MAAM,WAAA,GAAc,mBAAA,CAAoB,WAAA,CAAY,IAAI,CAAA;AACxD,YAAA,MAAM,mBAAA,CAAoB,mBAAmB,WAAA,EAAa,CAAA,EAAA,EAAK,UAAU,CAAA,oCAAA,CAAsC,CAAA,CAAE,MAAM,MAAM;AAAA,YAAC,CAAC,CAAA;AAC/H,YAAA,GAAA,CAAI,IAAI,OAAA,GAAU,CAAA,eAAA,EAAkB,aAAa,EAAE,CAAA,WAAA,EAAc,SAAS,CAAA,CAAA,CAAG,CAAA;AAC7E,YAAA,GAAA,CAAI,EAAA,EAAI,IAAA,GAAO,CAAA,4CAAA,EAA+C,SAAS,CAAA,CAAE,CAAA;AACzE,YAAA,aAAA,EAAc;AACd,YAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,MAAA,EAAQ,EAAE,WAA+B,EAAE;AAAA,UAChE,CAAA,CAAA,MAAQ;AACN,YAAA,IAAI,UAAA,EAAY;AACd,cAAA,GAAA,CAAI,EAAA,EAAI,IAAA,GAAO,EAAE,EAAA,EAAI,OAAO,KAAA,EAAO,EAAE,IAAA,EAAM,SAAA,EAAW,OAAA,EAAS,CAAA,6BAAA,EAAgC,SAAS,CAAA,CAAA,IAAM,CAAA;AAAA,YAChH,CAAA,MAAO;AACL,cAAA,GAAA,CAAI,EAAA,EAAI,QAAQ,gCAAA,EAAkC;AAAA,gBAChD,IAAA,EAAM,kCAAkC,SAAS,CAAA,mBAAA,CAAA;AAAA,gBACjD,KAAA,EAAO,WAAW,SAAS,CAAA,qBAAA;AAAA,eAC5B,CAAA;AAAA,YACH;AACA,YAAA,aAAA,EAAc;AACd,YAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,gBAAA,EAAiB;AAAA,UAC9C;AAAA,QACF;AACA,QAAA,GAAA,CAAI,EAAA,EAAI,QAAQ,2BAA2B,CAAA;AAC3C,QAAA,aAAA,EAAc;AACd,QAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,gBAAA,EAAiB;AAAA,MAC9C;AAGA,MAAA,IAAI,UAAA;AACJ,MAAA,IAAI,SAAS,SAAA,EAAW;AACtB,QAAA,UAAA,GAAa,EAAE,IAAA,EAAK;AAGpB,QAAA,IAAI,SAAS,MAAA,EAAQ;AACnB,UAAA,UAAA,CAAW,OAAA,GAAU,EAAE,IAAA,EAAM,MAAA,EAAQ,MAAM,UAAA,EAAW;AAAA,QACxD,CAAA,MAAA,IAAW,SAAS,MAAA,EAAQ;AAC1B,UAAA,UAAA,CAAW,OAAA,GAAU,EAAE,IAAA,EAAM,MAAA,EAAQ,MAAM,WAAA,EAAa,KAAA,IAAS,EAAC,EAAG,MAAA,EAAO;AAAA,QAC9E,CAAA,MAAA,IAAW,SAAS,OAAA,EAAS;AAC3B,UAAA,UAAA,CAAW,OAAA,GAAU,EAAE,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,WAAW,KAAA,EAAO,aAAA,EAAe,KAAA,IAAS,EAAC,EAAE;AAAA,QAC3F;AAAA,MACF;AAGA,MAAA,IAAI,aAAA;AACJ,MAAA,IAAI,UAAA,EAAY;AACd,QAAA,aAAA,GAAgB,MAAM;AAAA,QAAC,CAAA;AAAA,MACzB,WAAW,KAAA,EAAO;AAChB,QAAA,aAAA,GAAgB,qBAAA,EAAsB;AAAA,MACxC,WAAW,KAAA,EAAO;AAChB,QAAA,aAAA,GAAgB,mBAAA,EAAoB;AAAA,MACtC,WAAW,QAAA,EAAU;AACnB,QAAA,aAAA,GAAgB,sBAAA,EAAuB;AAAA,MACzC,CAAA,MAAO;AACL,QAAA,aAAA,GAAgB,mBAAA,CAAoB;AAAA,UAClC,OAAA;AAAA,UACA,cAAA,EAAgB,IAAA;AAAA,UAChB,cAAA,EAAgB;AAAA,SACjB,CAAA;AAAA,MACH;AAEA,MAAA,IAAI;AACF,QAAA,MAAM,KAAA,GAAQ,CAAA,IAAA,EAAO,IAAA,CAAK,GAAA,EAAK,CAAA,CAAA,EAAI,IAAA,CAAK,MAAA,EAAO,CAAE,SAAS,EAAE,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA,CAAA;AACzE,QAAA,MAAM,cAAA,GAAiB,IAAI,cAAA,CAAe,UAAU,CAAA;AACpD,QAAA,IAAI,kBAAA,GAAqB,SAAA;AAGzB,QAAA,IAAI,CAAC,kBAAA,EAAoB;AACvB,UAAA,MAAM,cAAA,GAAiB,MAAM,cAAA,CAAe,aAAA,CAAc;AAAA,YACxD,IAAA;AAAA,YACA,IAAA;AAAA,YACA,OAAA,EAAS;AAAA,WACV,CAAA;AACD,UAAA,kBAAA,GAAqB,cAAA,CAAe,EAAA;AAAA,QACtC,CAAA,MAAO;AACL,UAAA,MAAM,QAAA,GAAW,MAAM,cAAA,CAAe,WAAA,CAAY,kBAAkB,CAAA;AACpE,UAAA,IAAI,CAAC,QAAA,EAAU;AACb,YAAA,MAAM,cAAA,GAAiB,MAAM,cAAA,CAAe,aAAA,CAAc;AAAA,cACxD,IAAA;AAAA,cACA,IAAA;AAAA,cACA,OAAA,EAAS,WAAA;AAAA,cACT,SAAA,EAAW;AAAA,aACZ,CAAA;AACD,YAAA,kBAAA,GAAqB,cAAA,CAAe,EAAA;AAAA,UACtC;AAAA,QACF;AAGA,QAAA,MAAM,cAAA,CAAe,cAAA,CAAe,kBAAA,EAAoB,IAAA,EAAM,KAAK,CAAA;AAGnE,QAAA,MAAM,SAAA,uBAAgB,GAAA,EAAY;AAClC,QAAA,MAAM,aAAA,uBAAoB,GAAA,EAAoB;AAC9C,QAAA,MAAM,aAAA,GAAgB,yBAAA,CAA0B,UAAA,EAAY,kBAAkB,CAAA;AAC9E,QAAA,MAAM,+BAA+B,yCAAA,EAA0C;AAG/E,QAAA,MAAM,eAAe,kBAAA,CAAmB;AAAA,UACtC,UAAA;AAAA,UACA,WAAA,EAAa,IAAA;AAAA,UACb,SAAA,EAAW,kBAAA;AAAA,UACX,OAAA,EAAS,KAAA;AAAA;AAAA,UACT,OAAO,QAAA,EAAS;AAAA,UAChB,SAAA;AAAA,UACA,aAAA;AAAA,UACA,aAAA;AAAA,UACA,4BAAA,EAA8B,OAAO,EAAE,IAAA,EAAM,YAAY,MAAA,EAAO,KAK9D,6BAA6B,MAAA,CAAO;AAAA,YAClC,KAAA,EAAO,MAAA;AAAA,YACP,UAAU,EAAC;AAAA,YACX,MAAM,UAAA,IAAc;AAAA,WACrB;AAAA,SACJ,CAAA;AACD,QAAA,MAAM,YAAA,GAAe,MAAM,SAAA,EAA8B;AACzD,QAAA,MAAM,kBAAkB,OAAO,cAAA,KAAmB,QAAA,IAAY,cAAA,GAAiB,IAC3E,EAAE,GAAI,YAAA,EAAc,WAAA,IAAe,EAAC,EAAI,OAAA,EAAS,MAAM,SAAA,EAAW,cAAA,KAClE,YAAA,EAAc,WAAA;AAClB,QAAA,MAAM,SAAA,GAAY,cAAa,IAAK,IAAA;AACpC,QAAA,MAAM,MAAA,GAAS,CAAA,KAAA,EAAQ,IAAA,CAAK,GAAA,EAAK,CAAA,CAAA;AACjC,QAAA,MAAM,MAAA,GAAS,IAAI,sBAAA,CAAuB,MAAM,CAAA;AAGhD,QAAA,IAAI,IAAA,IAAQ,sBAAsB,SAAA,EAAW;AAC3C,UAAA,MAAM,QAAA,GAAW,cAAA,CAAe,kBAAA,CAAmB,kBAAkB,CAAA;AACrE,UAAA,IAAI;AACF,YAAA,MAAM,QAAA,GAAW,KAAK,KAAA,CAAM,MAAMA,SAAG,QAAA,CAAS,QAAA,EAAU,OAAO,CAAC,CAAA;AAChE,YAAA,IAAI,QAAA,CAAS,MAAA,KAAW,UAAA,IAAc,QAAA,CAAS,WAAW,YAAA,EAAc;AACtE,cAAA,GAAA,CAAI,EAAA,EAAI,OAAO,CAAA,qBAAA,EAAwB,QAAA,CAAS,EAAE,CAAA,EAAA,EAAK,QAAA,CAAS,MAAA,CAAO,MAAM,CAAA,qCAAA,CAAuC,CAAA;AACpH,cAAA,IAAIC,oBAAAA,GAAqC,QAAQ,OAAA,EAAQ;AACzD,cAAA,MAAM,iBAAA,GAAoB,CAAC,KAAA,KAAsB;AAC/C,gBAAA,MAAA,CAAO,MAAM,KAAsC,CAAA;AACnD,gBAAA,aAAA,CAAc,KAAK,CAAA;AACnB,gBAAAA,oBAAAA,GAAsBA,oBAAAA,CACnB,IAAA,CAAK,YAAY;AAChB,kBAAA,MAAM,cAAA,CAAe,SAAS,kBAAA,EAAqB;AAAA,oBACjD,GAAG,KAAA;AAAA,oBACH,SAAA,EAAW,kBAAA;AAAA,oBACX,KAAA;AAAA,oBACA,QAAA,EAAU;AAAA,sBACR,GAAI,MAA6C,UAAU,CAAA;AAAA,sBAC3D,SAAA,EAAW,kBAAA;AAAA,sBACX,KAAA;AAAA,sBACA;AAAA;AACF,mBACwB,CAAA;AAAA,gBAC5B,CAAC,CAAA,CACA,KAAA,CAAM,CAAC,KAAA,KAAU;AAChB,kBAAA,MAAM,UAAU,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACrE,kBAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,0CAAA,EAA6C,OAAO,CAAA,CAAE,CAAA;AAAA,gBACrE,CAAC,CAAA;AAAA,cACL,CAAA;AACA,cAAA,MAAM,UAAA,GAA0B;AAAA,gBAC9B,UAAA;AAAA,gBACA,aAAA,EAAe,EAAA;AAAA,gBACf,WAAA,EAAa,GAAA;AAAA,gBACb,SAAA,EAAW,kBAAA;AAAA,gBACX,IAAA;AAAA,gBACA,SAAA;AAAA,gBACA,WAAA,EAAa,eAAA;AAAA,gBACb,OAAA,EAAS,iBAAA;AAAA,gBACT,aAAa,eAAA,EAAiB;AAAA,eAChC;AACA,cAAA,MAAM,WAAA,GAAc,IAAI,eAAA,EAAgB;AACxC,cAAA,MAAM,aAAa,MAAM,WAAA,CAAY,OAAA,CAAQ,QAAA,EAAU,YAAY,YAAY,CAAA;AAC/E,cAAA,MAAMA,oBAAAA;AACN,cAAA,MAAM,OAAO,QAAA,EAAS;AACtB,cAAA,MAAMC,cAAAA,GAAgB,OAAO,UAAA,EAAW;AACxC,cAAA,IAAIA,cAAAA,CAAc,SAAS,CAAA,EAAG;AAC5B,gBAAA,MAAM,cAAA,CAAe,mBAAA,CAAoB,kBAAA,EAAoB,KAAA,EAAOA,cAAa,CAAA;AAAA,cACnF;AACA,cAAA,IAAI,WAAW,OAAA,EAAS;AACtB,gBAAA,GAAA,CAAI,EAAA,EAAI,OAAA,GAAU,CAAA,gBAAA,EAAmB,UAAA,CAAW,IAAA,EAAM,EAAE,CAAA,EAAA,EAAK,UAAA,CAAW,IAAA,EAAM,QAAA,CAAS,MAAA,IAAU,CAAC,CAAA,WAAA,EAAc,UAAA,CAAW,IAAA,EAAM,QAAA,CAAS,MAAA,CAAO,CAAC,CAAA,EAAG,GAAA,KAAQ,CAAA,GAAI,GAAA,CAAI,OAAA,CAAQ,MAAA,EAAQ,CAAC,CAAA,IAAK,CAAC,CAAA,SAAA,CAAW,CAAA;AAAA,cACzM,CAAA,MAAO;AACL,gBAAA,GAAA,CAAI,EAAA,EAAI,IAAA,GAAO,CAAA,wBAAA,EAA2B,UAAA,CAAW,OAAO,CAAA,CAAE,CAAA;AAAA,cAChE;AACA,cAAA,MAAM,gBAAgB,UAAA,CAAW,OAAA;AACjC,cAAA,aAAA,EAAc;AACd,cAAA,OAAO,aAAA,GACH,EAAE,EAAA,EAAI,IAAA,EAAM,MAAA,EAAQ;AAAA,gBAClB,SAAA,EAAW,kBAAA;AAAA,gBACb,OAAA,EAAS,aAAA;AAAA,gBACT,SAAS,UAAA,CAAW,OAAA;AAAA,gBACpB,cAAc,UAAA,CAAW,YAAA;AAAA,gBACzB,eAAe,UAAA,CAAW,aAAA;AAAA,gBAC1B,WAAW,UAAA,CAAW,SAAA;AAAA,gBACtB,YAAY,UAAA,CAAW,UAAA;AAAA,gBACvB,YAAY,UAAA,CAAW;AAAA,iBACvB,GACA,EAAE,IAAI,KAAA,EAAO,KAAA,EAAO,kBAAkB,MAAA,EAAQ;AAAA,gBAC5C,SAAA,EAAW,kBAAA;AAAA,gBACX,OAAA,EAAS,aAAA;AAAA,gBACT,SAAS,UAAA,CAAW,OAAA;AAAA,gBACpB,cAAc,UAAA,CAAW,YAAA;AAAA,gBACzB,eAAe,UAAA,CAAW,aAAA;AAAA,gBAC1B,WAAW,UAAA,CAAW,SAAA;AAAA,gBACtB,UAAA,EAAY,CAAA;AAAA,gBACZ,UAAA,EAAY;AAAA,eACd,EAAE;AAAA,YACR;AAAA,UACF,CAAA,CAAA,MAAQ;AAAA,UAER;AAAA,QACF;AAGA,QAAA,IAAI,mBAAA,GAAqC,QAAQ,OAAA,EAAQ;AACzD,QAAA,IAAI,mBAAA,GAAsB,CAAA;AAG1B,QAAA,MAAM,sBAAA,GAAyB,CAAC,KAAA,KAAsB;AAEpD,UAAA,MAAA,CAAO,MAAM,KAAsC,CAAA;AAEnD,UAAA,aAAA,CAAc,KAAK,CAAA;AAEnB,UAAA,mBAAA,GAAsB,mBAAA,CACnB,KAAK,YAAY;AAChB,YAAA,MAAM,cAAA,CAAe,SAAS,kBAAA,EAAqB;AAAA,cACjD,GAAG,KAAA;AAAA,cACH,SAAA,EAAW,kBAAA;AAAA,cACX;AAAA,aACwB,CAAA;AAC1B,YAAA,mBAAA,IAAuB,CAAA;AAAA,UACzB,CAAC,CAAA,CACA,KAAA,CAAM,CAAC,KAAA,KAAU;AAChB,YAAA,MAAM,UAAU,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACrE,YAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,qCAAA,EAAwC,OAAO,CAAA,CAAE,CAAA;AAAA,UAChE,CAAC,CAAA;AAAA,QACL,CAAA;AAGA,QAAA,MAAM,MAAA,GAAsB;AAAA,UAC1B,UAAA;AAAA,UACA,aAAA;AAAA,UACA,WAAA;AAAA,UACA,SAAA,EAAW,kBAAA;AAAA,UACX,IAAA;AAAA,UACA,SAAA;AAAA,UACA,aAAa,YAAA,EAAc,WAAA;AAAA,UAC3B,IAAA,EAAM,UAAA;AAAA,UACN,OAAA,EAAS,sBAAA;AAAA,UACT,KAAA;AAAA,UACA,aAAa,eAAA,EAAiB;AAAA,SAChC;AAGA,QAAA,IAAI,WAAA,KAAgB,KAAA,CAAA,IAAa,CAAC,KAAA,EAAO;AACvC,UAAA,GAAA,CAAI,IAAI,IAAA,GAAO,CAAA,+CAAA,EAA6C,WAAW,CAAA,aAAA,EAAgB,WAAW,CAAA,CAAA,CAAG,CAAA;AAAA,QACvG;AAGA,QAAA,MAAM,GAAA,GAAM,IAAI,QAAA,EAAS;AACzB,QAAA,GAAA,CAAI,QAAA,CAAS,kBAAA,CAAmB,YAAY,CAAC,CAAA;AAC7C,QAAA,MAAM,MAAA,GAAS,GAAA,CAAI,YAAA,CAAa,MAAM,CAAA;AACtC,QAAA,IAAI,MAAA,GAAS,MAAM,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAA;AAGtC,QAAA,aAAA,EAAc;AAGd,QAAA,MAAM,mBAAA;AAIN,QAAA,IAAI,mBAAA,KAAwB,CAAA,IAAK,MAAA,CAAO,OAAA,EAAS,MAAK,EAAG;AACvD,UAAA,MAAM,GAAA,GAAA,iBAAM,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AACnC,UAAA,MAAM,OAAA,GAAU,SAAS,KAAK,CAAA,CAAA;AAC9B,UAAA,MAAM,YAAA,GAAe,EAAE,SAAA,EAAW,kBAAA,EAAoB,OAAO,UAAA,EAAW;AACxE,UAAA,MAAM,cAAA,CAAe,SAAS,kBAAA,EAAoB;AAAA,YAChD,IAAA,EAAM,aAAA;AAAA,YACN,SAAA,EAAW,GAAA;AAAA,YACX,SAAA,EAAW,kBAAA;AAAA,YACX,OAAA;AAAA,YACA,KAAA;AAAA,YACA,MAAM,EAAE,IAAA,EAAM,IAAA,EAAM,aAAA,EAAe,WAAW,CAAA,EAAE;AAAA,YAChD,QAAA,EAAU;AAAA,WACG,CAAA;AACf,UAAA,MAAM,cAAA,CAAe,SAAS,kBAAA,EAAoB;AAAA,YAChD,IAAA,EAAM,SAAA;AAAA,YACN,SAAA,EAAW,GAAA;AAAA,YACX,SAAA,EAAW,kBAAA;AAAA,YACX,OAAA;AAAA,YACA,KAAA;AAAA,YACA,IAAA,EAAM;AAAA,cACJ,SAAS,MAAA,CAAO,OAAA;AAAA,cAChB,YAAA,EAAc,KAAA;AAAA,cACd,UAAA,EAAY,CAAA;AAAA,cACZ,UAAA,EAAY,CAAA;AAAA,cACZ,UAAA,EAAY;AAAA,aACd;AAAA,YACA,QAAA,EAAU;AAAA,WACG,CAAA;AACf,UAAA,MAAM,cAAA,CAAe,SAAS,kBAAA,EAAoB;AAAA,YAChD,IAAA,EAAM,WAAA;AAAA,YACN,SAAA,EAAW,GAAA;AAAA,YACX,SAAA,EAAW,kBAAA;AAAA,YACX,OAAA;AAAA,YACA,KAAA;AAAA,YACA,IAAA,EAAM;AAAA,cACJ,SAAS,MAAA,CAAO,OAAA;AAAA,cAChB,SAAS,MAAA,CAAO,OAAA;AAAA,cAChB,YAAY,MAAA,CAAO,UAAA;AAAA,cACnB,YAAY,MAAA,CAAO,UAAA;AAAA,cACnB,UAAA,EAAY,CAAA;AAAA,cACZ,cAAc,MAAA,CAAO,YAAA;AAAA,cACrB,eAAe,MAAA,CAAO,aAAA;AAAA,cACtB,UAAA,EAAY,MAAA,CAAO,OAAA,GAAU,iBAAA,GAAoB;AAAA,aACnD;AAAA,YACA,QAAA,EAAU;AAAA,WACG,CAAA;AAAA,QACjB;AAEA,QAAA,MAAM,aAAA,GAAgB,OAAO,UAAA,EAAW;AACxC,QAAA,IAAI,aAAA,CAAc,SAAS,CAAA,EAAG;AAC5B,UAAA,MAAM,cAAA,CAAe,mBAAA,CAAoB,kBAAA,EAAoB,KAAA,EAAO,aAAa,CAAA;AAAA,QACnF;AAGA,QAAA,IAAI,MAAA,CAAO,WAAA,IAAe,MAAA,CAAO,WAAA,CAAY,SAAS,CAAA,EAAG;AACvD,UAAA,MAAM,cAAA,CAAe,uBAAA,CAAwB,kBAAA,EAAoB,KAAA,EAAO,OAAO,WAAW,CAAA;AAAA,QAC5F;AAGA,QAAA,IAAI,OAAA,EAAS;AACX,UAAA,IAAI,SAAS,MAAA,EAAQ;AACnB,YAAA,GAAA,CAAI,EAAA,EAAI,OAAO,wDAAwD,CAAA;AAAA,UACzE,CAAA,MAAA,IAAW,CAAC,MAAA,CAAO,IAAA,EAAM;AACvB,YAAA,GAAA,CAAI,EAAA,EAAI,OAAO,mDAAmD,CAAA;AAAA,UACpE,CAAA,MAAO;AACL,YAAA,MAAM,UAAA,GAAA,iBAAa,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAC1C,YAAA,MAAM,YAAA,GAAe;AAAA,cACnB,GAAG,MAAA,CAAO,IAAA;AAAA,cACV,MAAA,EAAQ,UAAA;AAAA,cACR,UAAA;AAAA,cACA,eAAA,EAAiB,4BAAA;AAAA,cACjB,SAAA,EAAW;AAAA,aACb;AAEA,YAAA,MAAM,eAAA,GAAkB,cAAA,CAAe,kBAAA,CAAmB,kBAAkB,CAAA;AAC5E,YAAA,MAAMF,QAAA,CAAG,UAAU,eAAA,EAAiB,IAAA,CAAK,UAAU,YAAA,EAAc,IAAA,EAAM,CAAC,CAAA,EAAG,OAAO,CAAA;AAElF,YAAA,MAAM,mBAAA,GAAsB,IAAI,mBAAA,CAAoB,UAAU,CAAA;AAC9D,YAAA,MAAM,WAAA,GAAc,mBAAA,CAAoB,WAAA,CAAY,MAAA,CAAO,IAAI,CAAA;AAC/D,YAAA,MAAM,mBAAA,CAAoB,kBAAA;AAAA,cACxB,WAAA;AAAA,cACA,KAAK,UAAU,CAAA,oCAAA;AAAA,aACjB;AAEA,YAAA,GAAA,CAAI,EAAA,EAAI,OAAA,GAAU,CAAA,eAAA,EAAkB,YAAA,CAAa,EAAE,CAAA,CAAE,CAAA;AAErD,YAAA,IAAI,gBAAA,EAAkB;AAEpB,cAAA,GAAA,CAAI,EAAA,EAAI,OAAO,4BAA4B,CAAA;AAC3C,cAAA,MAAM,aAAA,GAA6B;AAAA,gBACjC,GAAG,MAAA;AAAA,gBACH,IAAA,EAAM,EAAE,IAAA,EAAM,SAAA;AAAU,eAC1B;AACA,cAAA,MAAM,UAAA,GAAa,IAAI,QAAA,EAAS;AAChC,cAAA,UAAA,CAAW,QAAA,CAAS,kBAAA,CAAmB,YAAY,CAAC,CAAA;AACpD,cAAA,MAAM,aAAA,GAAgB,UAAA,CAAW,YAAA,CAAa,aAAa,CAAA;AAC3D,cAAA,MAAA,GAAS,MAAM,aAAA,CAAc,OAAA,CAAQ,IAAI,CAAA;AAAA,YAC3C,CAAA,MAAO;AACL,cAAA,GAAA,CAAI,EAAA,EAAI,IAAA,GAAO,CAAA,mCAAA,EAAsC,kBAAkB,CAAA,CAAE,CAAA;AAAA,YAC3E;AAGA,YAAA,IAAI,QAAQ,YAAA,EAAc;AACxB,cAAA,GAAA,CAAI,EAAA,EAAI,OAAO,yDAAyD,CAAA;AACxE,cAAA,MAAM,WAAA,GAAc,IAAI,eAAA,EAAgB;AACxC,cAAA,MAAM,aAAa,MAAM,WAAA,CAAY,OAAA,CAAQ,YAAA,EAAc,QAAQ,YAAY,CAAA;AAE/E,cAAA,IAAI,WAAW,OAAA,EAAS;AACtB,gBAAA,GAAA,CAAI,EAAA,EAAI,OAAA,GAAU,CAAA,gBAAA,EAAmB,UAAA,CAAW,IAAA,EAAM,EAAE,CAAA,EAAA,EAAK,UAAA,CAAW,IAAA,EAAM,QAAA,CAAS,MAAA,IAAU,CAAC,CAAA,UAAA,CAAY,CAAA;AAAA,cAChH,CAAA,MAAO;AACL,gBAAA,GAAA,CAAI,EAAA,EAAI,IAAA,GAAO,CAAA,wBAAA,EAA2B,UAAA,CAAW,OAAO,CAAA,CAAE,CAAA;AAAA,cAChE;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAGA,QAAA,MAAM,OAAO,QAAA,EAAS;AAKtB,QAAA,MAAM,eAAe,MAAA,CAAO,OAAA;AAC5B,QAAA,MAAM,gBAAA,GAAmB,YAAA,GACrB,EAAE,EAAA,EAAI,MAAe,MAAA,EAAQ;AAAA,UAC7B,SAAA,EAAW,kBAAA;AAAA,UACX,OAAA,EAAS,YAAA;AAAA,UACT,SAAS,MAAA,CAAO,OAAA;AAAA,UAChB,cAAc,MAAA,CAAO,YAAA;AAAA,UACrB,eAAe,MAAA,CAAO,aAAA;AAAA,UACtB,WAAW,MAAA,CAAO,SAAA;AAAA,UAClB,YAAY,MAAA,CAAO,UAAA;AAAA,UACnB,YAAY,MAAA,CAAO,UAAA;AAAA,UACnB,OAAA,EAAS,IAAA,KAAS,MAAA,IAAU,CAAC,CAAC,MAAA,CAAO;AAAA,WACrC,GACA,EAAE,IAAI,KAAA,EAAgB,KAAA,EAAO,kBAAkB,MAAA,EAAQ;AAAA,UACvD,SAAA,EAAW,kBAAA;AAAA,UACX,OAAA,EAAS,YAAA;AAAA,UACT,SAAS,MAAA,CAAO,OAAA;AAAA,UAChB,cAAc,MAAA,CAAO,YAAA;AAAA,UACrB,eAAe,MAAA,CAAO,aAAA;AAAA,UACtB,WAAW,MAAA,CAAO,SAAA;AAAA,UAClB,YAAY,MAAA,CAAO,UAAA;AAAA,UACnB,YAAY,MAAA,CAAO,UAAA;AAAA,UACnB,OAAA,EAAS,IAAA,KAAS,MAAA,IAAU,CAAC,CAAC,MAAA,CAAO;AAAA,SACvC,EAAE;AAEJ,QAAA,IAAI,UAAA,EAAY;AACd,UAAA,GAAA,CAAI,EAAA,EAAI,OAAO,gBAAgB,CAAA;AAAA,QACjC;AAEA,QAAA,OAAO,gBAAA;AAAA,MACT,SAAS,KAAA,EAAO;AACd,QAAA,aAAA,EAAc;AAEd,QAAA,IAAI,eAAA,EAAiB,OAAO,OAAA,EAAS;AACnC,UAAA,MAAM,MAAA,GAAS,eAAA,CAAgB,MAAA,CAAO,MAAA,YAAkB,KAAA,GACpD,gBAAgB,MAAA,CAAO,MAAA,CAAO,OAAA,GAC9B,CAAA,gCAAA,EAAmC,WAAW,CAAA,CAAA,CAAA;AAClD,UAAA,IAAI,UAAA,EAAY;AACd,YAAA,GAAA,CAAI,EAAA,EAAI,IAAA,GAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,EAAE,IAAA,EAAM,SAAA,EAAW,OAAA,EAAS,MAAA,EAAO,EAAG,CAAA;AAAA,UAC3E,CAAA,MAAO;AACL,YAAA,GAAA,CAAI,EAAA,EAAI,QAAQ,2BAAA,EAA6B;AAAA,cAC3C,IAAA,EAAM,wDAAA;AAAA,cACN,KAAA,EAAO;AAAA,aACR,CAAA;AAAA,UACH;AACA,UAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,mBAAA,EAAoB;AAAA,QACjD;AACA,QAAA,MAAM,eAAe,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AAC1E,QAAA,IAAI,UAAA,EAAY;AACd,UAAA,GAAA,CAAI,EAAA,EAAI,IAAA,GAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,EAAE,IAAA,EAAM,kBAAA,EAAoB,OAAA,EAAS,YAAA,EAAa,EAAG,CAAA;AAAA,QAC1F,CAAA,MAAO;AACL,UAAA,GAAA,CAAI,EAAA,EAAI,QAAQ,wBAAA,EAA0B;AAAA,YACxC,IAAA,EAAM,wDAAA;AAAA,YACN,KAAA,EAAO;AAAA,WACR,CAAA;AAAA,QACH;AACA,QAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,gBAAA,EAAiB;AAAA,MAC9C;AAAA,IACF;AAAA;AAEJ,CAAC","file":"run.js","sourcesContent":["/**\n * Agent Event Renderer for CLI\n *\n * Renders agent events as beautiful CLI output with visual hierarchy.\n * Shows orchestrator → subtasks → agents → tools as nested blocks.\n */\n\nimport type { AgentEvent, AgentEventCallback } from '@kb-labs/agent-contracts';\n\n// ═══════════════════════════════════════════════════════════════════════════\n// ANSI Colors & Symbols\n// ═══════════════════════════════════════════════════════════════════════════\n\nconst CSI = '\\x1b[';\nconst RESET = '\\x1b[0m';\n\nconst color = {\n // Status colors\n success: (t: string) => `${CSI}32m${t}${RESET}`,\n error: (t: string) => `${CSI}31m${t}${RESET}`,\n warning: (t: string) => `${CSI}33m${t}${RESET}`,\n info: (t: string) => `${CSI}36m${t}${RESET}`,\n\n // UI colors\n dim: (t: string) => `${CSI}90m${t}${RESET}`,\n bold: (t: string) => `${CSI}1m${t}${RESET}`,\n accent: (t: string) => `${CSI}38;5;99m${t}${RESET}`, // Purple - orchestrator\n primary: (t: string) => `${CSI}38;5;39m${t}${RESET}`, // Blue - agent\n highlight: (t: string) => `${CSI}38;5;51m${t}${RESET}`, // Cyan - tools\n secondary: (t: string) => `${CSI}38;5;208m${t}${RESET}`, // Orange - subtask\n};\n\n// Box-drawing characters for visual hierarchy\nconst box = {\n topLeft: '┌',\n topRight: '┐',\n bottomLeft: '└',\n bottomRight: '┘',\n horizontal: '─',\n vertical: '│',\n leftT: '├',\n rightT: '┤',\n cross: '┼',\n};\n\nconst symbols = {\n success: color.success('✓'),\n error: color.error('✗'),\n warning: color.warning('⚠'),\n spinner: ['◐', '◓', '◑', '◒'],\n thinking: '◆',\n executing: '▶',\n tool: '⚙',\n file: '📄',\n search: '🔍',\n command: '$',\n memory: '💾',\n subtask: '◈',\n agent: '●',\n};\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Render State - tracks current nesting level\n// ═══════════════════════════════════════════════════════════════════════════\n\ninterface RenderState {\n currentSubtask: { id: string; index: number; total: number } | null;\n agentActive: boolean;\n indentLevel: number;\n}\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Helper Functions\n// ═══════════════════════════════════════════════════════════════════════════\n\nfunction formatDuration(ms: number): string {\n if (ms < 1000) {return `${ms}ms`;}\n if (ms < 60000) {return `${(ms / 1000).toFixed(1)}s`;}\n return `${Math.floor(ms / 60000)}m ${Math.floor((ms % 60000) / 1000)}s`;\n}\n\nfunction formatPath(path: string, maxLen = 40): string {\n if (path.length <= maxLen) {return path;}\n const parts = path.split('/');\n if (parts.length <= 2) {return '...' + path.slice(-maxLen + 3);}\n return `.../${parts.slice(-2).join('/')}`;\n}\n\nfunction formatBudget(event: AgentEvent): string | null {\n const data = event.data as {\n budgetUsedTokens?: unknown;\n budgetRemainingTokens?: unknown;\n budgetTotalTokens?: unknown;\n };\n const used = typeof data.budgetUsedTokens === 'number' ? data.budgetUsedTokens : null;\n const remaining = typeof data.budgetRemainingTokens === 'number' ? data.budgetRemainingTokens : null;\n const total = typeof data.budgetTotalTokens === 'number' ? data.budgetTotalTokens : null;\n if (used === null && remaining === null && total === null) {\n return null;\n }\n const fmt = (value: number | null): string => (value === null ? '?' : value.toLocaleString('en-US'));\n return `Budget ${fmt(used)} used / ${fmt(total)} total (${fmt(remaining)} left)`;\n}\n\nfunction indent(level: number): string {\n return ' '.repeat(level);\n}\n\nfunction renderBoxTop(title: string, colorFn: (s: string) => string, width = 60): string {\n const titleLen = title.length + 2; // space around title\n const leftPad = 2;\n const rightPad = width - leftPad - titleLen - 2;\n return colorFn(\n `${box.topLeft}${box.horizontal.repeat(leftPad)} ${title} ${box.horizontal.repeat(Math.max(0, rightPad))}${box.topRight}`\n );\n}\n\nfunction renderBoxBottom(colorFn: (s: string) => string, width = 60): string {\n return colorFn(`${box.bottomLeft}${box.horizontal.repeat(width - 2)}${box.bottomRight}`);\n}\n\nfunction renderBoxLine(content: string, colorFn: (s: string) => string): string {\n return `${colorFn(box.vertical)} ${content}`;\n}\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Event Renderer Factory\n// ═══════════════════════════════════════════════════════════════════════════\n\nexport function createEventRenderer(options: {\n verbose?: boolean;\n showToolOutput?: boolean;\n showLLMContent?: boolean;\n showDebug?: boolean;\n}): AgentEventCallback {\n const { verbose = true, showToolOutput = true, showLLMContent = false, showDebug = false } = options;\n\n const state: RenderState = {\n currentSubtask: null,\n agentActive: false,\n indentLevel: 0,\n };\n\n return (event: AgentEvent) => {\n const _prefix = indent(state.indentLevel);\n\n switch (event.type) {\n // ═══════════════════════════════════════════════════════════════════\n // SUBTASK LEVEL\n // ═══════════════════════════════════════════════════════════════════\n case 'subtask:start': {\n state.currentSubtask = {\n id: event.data.subtaskId,\n index: event.data.index,\n total: event.data.total,\n };\n state.indentLevel = 1;\n\n const subtaskNum = `${event.data.index + 1}/${event.data.total}`;\n console.log(color.accent(box.vertical));\n console.log(\n color.accent(`${box.leftT}${box.horizontal}`) +\n renderBoxTop(`SUBTASK ${subtaskNum}`, color.secondary, 50)\n );\n console.log(\n color.accent(box.vertical) + ' ' +\n renderBoxLine(\n `${symbols.subtask} ${event.data.description.slice(0, 45)}${event.data.description.length > 45 ? '...' : ''}`,\n color.secondary\n )\n );\n console.log(color.accent(box.vertical) + ' ' + color.secondary(box.vertical));\n break;\n }\n\n case 'subtask:end': {\n const status = event.data.success\n ? color.success(`${symbols.success} Done`)\n : color.error(`${symbols.error} Failed`);\n\n console.log(color.accent(box.vertical) + ' ' + color.secondary(box.vertical));\n console.log(\n color.accent(box.vertical) + ' ' +\n renderBoxLine(status, color.secondary)\n );\n console.log(\n color.accent(box.vertical) + ' ' +\n renderBoxBottom(color.secondary, 50)\n );\n\n state.currentSubtask = null;\n state.indentLevel = 0;\n break;\n }\n\n // ═══════════════════════════════════════════════════════════════════\n // AGENT LEVEL (nested under subtask or standalone)\n // ═══════════════════════════════════════════════════════════════════\n case 'agent:start': {\n state.agentActive = true;\n\n // Determine prefix based on context\n const linePrefix = state.currentSubtask\n ? color.accent(box.vertical) + ' ' + color.secondary(box.vertical) + ' '\n : '';\n\n console.log(linePrefix);\n console.log(linePrefix + renderBoxTop(`AGENT [${event.data.tier}]`, color.primary, 45));\n console.log(linePrefix + renderBoxLine(\n `${symbols.agent} ${event.data.task.slice(0, 40)}${event.data.task.length > 40 ? '...' : ''}`,\n color.primary\n ));\n console.log(linePrefix + renderBoxLine(\n color.dim(`Tools: ${event.data.toolCount} | Max iterations: ${event.data.maxIterations}`),\n color.primary\n ));\n\n state.indentLevel = state.currentSubtask ? 3 : 1;\n break;\n }\n\n case 'agent:end': {\n const linePrefix = state.currentSubtask\n ? color.accent(box.vertical) + ' ' + color.secondary(box.vertical) + ' '\n : '';\n\n const status = event.data.success\n ? color.success(`${symbols.success} Success`)\n : color.error(`${symbols.error} Failed`);\n\n console.log(linePrefix + color.primary(box.vertical));\n console.log(linePrefix + renderBoxLine(\n `${status} ${color.dim(`(${formatDuration(event.data.durationMs)}, ${event.data.tokensUsed} tokens)`)}`,\n color.primary\n ));\n\n // Show the result summary - this is what the agent produced!\n if (event.data.summary) {\n console.log(linePrefix + color.primary(box.vertical));\n console.log(linePrefix + renderBoxLine(\n color.bold('📋 Result:'),\n color.primary\n ));\n // Print full summary — no truncation for final agent answer\n const summaryLines = event.data.summary.split('\\n');\n for (const line of summaryLines) {\n if (line.trim()) {\n // Word wrap long lines at ~80 chars\n const words = line.split(' ');\n let currentLine = '';\n for (const word of words) {\n if (currentLine.length + word.length > 75) {\n if (currentLine) {\n console.log(linePrefix + renderBoxLine(` ${currentLine}`, color.primary));\n }\n currentLine = word;\n } else {\n currentLine = currentLine ? `${currentLine} ${word}` : word;\n }\n }\n if (currentLine) {\n console.log(linePrefix + renderBoxLine(` ${currentLine}`, color.primary));\n }\n }\n }\n }\n\n if (event.data.filesModified.length > 0 || event.data.filesCreated.length > 0) {\n const files = [...event.data.filesCreated, ...event.data.filesModified];\n console.log(linePrefix + renderBoxLine(\n color.dim(`Files: ${files.slice(0, 3).map(f => formatPath(f, 20)).join(', ')}${files.length > 3 ? ` +${files.length - 3}` : ''}`),\n color.primary\n ));\n }\n\n console.log(linePrefix + renderBoxBottom(color.primary, 45));\n\n state.agentActive = false;\n state.indentLevel = state.currentSubtask ? 1 : 0;\n break;\n }\n\n case 'agent:error': {\n const linePrefix = getLinePrefix(state);\n console.log(linePrefix + renderBoxLine(\n `${symbols.error} ${color.error('Error:')} ${event.data.error.slice(0, 50)}`,\n color.primary\n ));\n break;\n }\n\n // ═══════════════════════════════════════════════════════════════════\n // ITERATION & LLM (inside agent box)\n // ═══════════════════════════════════════════════════════════════════\n case 'iteration:start': {\n const linePrefix = getLinePrefix(state);\n if (verbose) {\n console.log(linePrefix + color.primary(box.vertical));\n console.log(linePrefix + renderBoxLine(\n color.dim(`─── Iteration ${event.data.iteration}/${event.data.maxIterations} ───`),\n color.primary\n ));\n }\n break;\n }\n\n case 'llm:start': {\n const linePrefix = getLinePrefix(state);\n if (verbose) {\n const iterLabel = event.data.iteration !== undefined ? color.dim(` #${event.data.iteration}`) : '';\n const msgLabel = showDebug ? color.dim(` [${event.data.messageCount} msgs, ${event.data.toolCount ?? 0} tools, ${event.data.systemPromptChars ?? 0} sys chars]`) : '';\n process.stdout.write(linePrefix + renderBoxLine(\n `${color.accent(symbols.thinking)} ${color.dim('Thinking...')}${iterLabel}${msgLabel}`,\n color.primary\n ));\n }\n break;\n }\n\n case 'llm:end': {\n if (verbose) {\n // Clear line and show result\n process.stdout.write(`\\r`);\n const linePrefix = getLinePrefix(state);\n const stopLabel = event.data.stopReason ? `, stop=${event.data.stopReason}` : '';\n console.log(linePrefix + renderBoxLine(\n `${color.accent(symbols.thinking)} Thought ${color.dim(`(${formatDuration(event.data.durationMs)}, ${event.data.tokensUsed} tok${stopLabel})`)}`,\n color.primary\n ));\n\n // Always show LLM reasoning in verbose mode (truncated)\n if (event.data.content) {\n const maxLen = showDebug ? 2000 : showLLMContent ? 500 : 150;\n const content = event.data.content.slice(0, maxLen).replace(/\\n/g, ' ').trim();\n if (content) {\n console.log(linePrefix + renderBoxLine(\n color.dim(` 💭 \"${content}${event.data.content.length > maxLen ? '...' : ''}\"`),\n color.primary\n ));\n }\n }\n }\n break;\n }\n\n // ═══════════════════════════════════════════════════════════════════\n // TOOL EXECUTION (inside agent, compact format)\n // ═══════════════════════════════════════════════════════════════════\n case 'tool:start': {\n const linePrefix = getLinePrefix(state);\n const toolName = event.data.toolName;\n const meta = event.data.metadata;\n\n let details = '';\n if (showDebug) {\n // In debug mode: show raw input JSON (truncated at 200 chars)\n const inputObj = event.data.input as Record<string, unknown> | undefined;\n if (inputObj && Object.keys(inputObj).length > 0) {\n const raw = JSON.stringify(inputObj);\n const maxLen = 200;\n details = ` ${color.dim(raw.slice(0, maxLen) + (raw.length > maxLen ? '...' : ''))}`;\n }\n } else if (meta?.filePath) {\n details = ` ${color.dim(formatPath(meta.filePath as string, 30))}`;\n } else if (meta?.query) {\n details = ` ${color.dim(`\"${(meta.query as string).slice(0, 25)}${(meta.query as string).length > 25 ? '...' : ''}\"`)}`\n } else if (meta?.command) {\n details = ` ${color.dim(`$ ${(meta.command as string).slice(0, 25)}`)}`\n }\n\n process.stdout.write(linePrefix + renderBoxLine(\n `${color.highlight(symbols.tool)} ${color.highlight(toolName)}${details}`,\n color.primary\n ));\n break;\n }\n\n case 'tool:end': {\n const status = event.data.success\n ? ` ${symbols.success}`\n : ` ${symbols.error}`;\n\n process.stdout.write(`${status} ${color.dim(formatDuration(event.data.durationMs))}\\n`);\n\n // Show tool output details\n if (showToolOutput) {\n const linePrefix = getLinePrefix(state);\n const meta = event.data.metadata;\n const output = event.data.output;\n\n // Show output preview for tools\n if (output && verbose) {\n const maxOutputLen = showDebug ? 1000 : 200;\n if (showDebug) {\n // In debug mode: show output with preserved newlines\n const truncated = output.slice(0, maxOutputLen);\n const lines = truncated.split('\\n');\n for (const line of lines) {\n if (line.trim()) {\n console.log(linePrefix + renderBoxLine(\n color.dim(` 📄 ${line}`),\n color.primary\n ));\n }\n }\n if (output.length > maxOutputLen) {\n console.log(linePrefix + renderBoxLine(\n color.dim(` 📄 ... (${output.length - maxOutputLen} more chars)`),\n color.primary\n ));\n }\n } else {\n // Normal mode: compact single line\n const cleanOutput = output\n .slice(0, maxOutputLen)\n .replace(/\\n/g, ' ')\n .replace(/\\s+/g, ' ')\n .trim();\n if (cleanOutput && cleanOutput.length > 10) {\n console.log(linePrefix + renderBoxLine(\n color.dim(` 📄 ${cleanOutput}${output.length > maxOutputLen ? '...' : ''}`),\n color.primary\n ));\n }\n }\n }\n\n // Show metadata summary if available\n if (meta?.summary && !output) {\n console.log(linePrefix + renderBoxLine(\n color.dim(` └─ ${(meta.summary as string).slice(0, 80)}`),\n color.primary\n ));\n }\n }\n break;\n }\n\n case 'tool:error': {\n process.stdout.write(` ${symbols.error}\\n`);\n const linePrefix = getLinePrefix(state);\n console.log(linePrefix + renderBoxLine(\n color.error(` └─ ${event.data.error.slice(0, 50)}`),\n color.primary\n ));\n break;\n }\n\n // ═══════════════════════════════════════════════════════════════════\n // MEMORY & PROGRESS (compact notifications)\n // ═══════════════════════════════════════════════════════════════════\n case 'memory:write': {\n if (verbose) {\n const linePrefix = getLinePrefix(state);\n console.log(linePrefix + renderBoxLine(\n color.dim(`${symbols.memory} Saved ${event.data.entryType} to ${event.data.target}`),\n color.primary\n ));\n }\n break;\n }\n\n case 'progress:update': {\n const budgetLine = formatBudget(event);\n const phase = event.data.phase || 'progress';\n const progress = Math.max(0, Math.min(100, Math.round(event.data.progress || 0)));\n const message = event.data.message || '';\n\n if (verbose) {\n const linePrefix = getLinePrefix(state);\n const main = `[${phase}] ${progress}%${message ? ` - ${message}` : ''}`;\n console.log(linePrefix + renderBoxLine(color.info(main), color.primary));\n if (budgetLine) {\n console.log(linePrefix + renderBoxLine(color.dim(` ${budgetLine}`), color.primary));\n }\n } else if (message && (phase === 'plan' || phase === 'spec') && (progress === 100 || progress === 5)) {\n const budgetSuffix = budgetLine ? ` | ${budgetLine}` : '';\n console.log(`${color.info(`[${phase}]`)} ${message}${budgetSuffix}`);\n }\n break;\n }\n\n case 'status:change': {\n const budgetLine = formatBudget(event);\n if (verbose && event.data.message) {\n const linePrefix = getLinePrefix(state);\n console.log(linePrefix + renderBoxLine(\n color.info(`Status: ${event.data.status}${event.data.message ? ` - ${event.data.message}` : ''}`),\n color.primary\n ));\n if (budgetLine) {\n console.log(linePrefix + renderBoxLine(color.dim(` ${budgetLine}`), color.primary));\n }\n // When plan is ready and waiting for approval, show the approve/execute commands\n if (event.data.status === 'waiting' && event.sessionId) {\n const sid = event.sessionId;\n console.log(linePrefix + renderBoxLine(color.dim(` To approve: kb agent run --session-id=${sid} --approve`), color.primary));\n console.log(linePrefix + renderBoxLine(color.dim(` To execute: kb agent run --session-id=${sid}`), color.primary));\n }\n }\n // Only show significant status in non-verbose mode\n if (!verbose && (event.data.status === 'done' || event.data.status === 'error')) {\n const budgetSuffix = budgetLine ? ` (${budgetLine})` : '';\n console.log(\n event.data.status === 'done'\n ? `${symbols.success} ${event.data.message}${budgetSuffix}`\n : `${symbols.error} ${event.data.message}${budgetSuffix}`\n );\n }\n break;\n }\n\n case 'middleware:decision': {\n if (verbose) {\n const linePrefix = getLinePrefix(state);\n const decisionIcons: Record<string, string> = {\n soft_warning: '⚠',\n hard_stop: '🛑',\n trimmed: '✂',\n loop_detected: '🔁',\n stuck: '⏸',\n summarized: '📝',\n };\n const icon = decisionIcons[event.data.decision] ?? '·';\n console.log(linePrefix + renderBoxLine(\n color.dim(` ${icon} [${event.data.middleware}] ${event.data.decision}`),\n color.primary\n ));\n }\n break;\n }\n\n case 'llm:debug': {\n if (!showDebug) { break; }\n const linePrefix = getLinePrefix(state);\n const iterLabel = event.data.iteration !== undefined ? ` (iter #${event.data.iteration})` : '';\n console.log(linePrefix + renderBoxLine(\n color.dim(` ─── System Prompt${iterLabel} ───`),\n color.primary\n ));\n // Full system prompt, no truncation\n for (const line of event.data.systemPrompt.split('\\n')) {\n console.log(linePrefix + renderBoxLine(color.dim(` ${line}`), color.primary));\n }\n console.log(linePrefix + renderBoxLine(color.dim(' ─── Messages ───'), color.primary));\n for (const m of event.data.messages) {\n const roleLabel = `[${m.role}]`;\n const content = m.content;\n // Show each message fully, line by line\n const lines = content.split('\\n');\n const firstLine = `${roleLabel} ${lines[0] ?? ''}`;\n console.log(linePrefix + renderBoxLine(color.dim(` ${firstLine}`), color.primary));\n for (const line of lines.slice(1)) {\n console.log(linePrefix + renderBoxLine(color.dim(` ${line}`), color.primary));\n }\n }\n console.log(linePrefix + renderBoxLine(color.dim(' ─── End Prompt ───'), color.primary));\n break;\n }\n\n default:\n // Unknown event - ignore\n break;\n }\n };\n\n function getLinePrefix(state: RenderState): string {\n if (state.currentSubtask && state.agentActive) {\n return color.accent(box.vertical) + ' ' + color.secondary(box.vertical) + ' ';\n }\n if (state.currentSubtask) {\n return color.accent(box.vertical) + ' ' + color.secondary(box.vertical) + ' ';\n }\n if (state.agentActive) {\n return '';\n }\n return '';\n }\n}\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Preset Renderers\n// ═══════════════════════════════════════════════════════════════════════════\n\n/**\n * Minimal renderer - only shows high-level events\n */\nexport function createMinimalRenderer(): AgentEventCallback {\n return createEventRenderer({\n verbose: false,\n showToolOutput: false,\n showLLMContent: false,\n });\n}\n\n/**\n * Detailed renderer - shows everything including LLM content\n */\nexport function createDetailedRenderer(): AgentEventCallback {\n return createEventRenderer({\n verbose: true,\n showToolOutput: true,\n showLLMContent: true,\n });\n}\n\n/**\n * Debug renderer - maximum verbosity: full prompts, full tool I/O, no truncation\n */\nexport function createDebugRenderer(): AgentEventCallback {\n return createEventRenderer({\n verbose: true,\n showToolOutput: true,\n showLLMContent: true,\n showDebug: true,\n });\n}\n","/**\n * agent:run command - unified agent interface\n *\n * Uses event-driven UI rendering instead of simple loaders.\n */\n\nimport { defineCommand, useAnalytics, useCache, useConfig, type CommandResult, type PluginContextV3 } from '@kb-labs/sdk';\nimport {\n SessionManager,\n PlanDocumentService,\n SpecModeHandler,\n bootstrapAgentSDK,\n createSessionMemoryBridge,\n createCoreToolPack,\n} from '@kb-labs/agent-core';\nimport { AgentSDK } from '@kb-labs/agent-sdk';\nimport { createDefaultResponseRequirementsSelector } from '@kb-labs/agent-runtime';\nimport { IncrementalTraceWriter } from '@kb-labs/agent-tracing';\nimport { createToolRegistry } from '@kb-labs/agent-tools';\nimport type { AgentConfig, ModeConfig, AgentMode, AgentEvent, AgentsPluginConfig, KernelState, DetailedTraceEntry } from '@kb-labs/agent-contracts';\nimport type { TaskPlan } from '@kb-labs/agent-contracts';\nimport { promises as fs } from 'node:fs';\nimport { createEventRenderer, createMinimalRenderer, createDetailedRenderer, createDebugRenderer } from '../ui/index.js';\n\n// Register SDKAgentRunner as the RunnerFactory (idempotent — runs once per process)\nbootstrapAgentSDK();\n\ntype RunInput = {\n task: string;\n workingDir?: string;\n maxIterations?: number;\n temperature?: number;\n verbose?: boolean;\n quiet?: boolean;\n detailed?: boolean;\n sessionId?: string;\n tier?: 'small' | 'medium' | 'large';\n escalate?: boolean;\n mode?: AgentMode;\n complexity?: 'simple' | 'medium' | 'complex';\n files?: string[];\n trace?: string;\n approve?: boolean;\n execute?: boolean;\n spec?: boolean;\n 'dry-run'?: boolean;\n debug?: boolean;\n /** Abort execution after this many seconds (0 or undefined = no timeout). */\n timeout?: number;\n /** Override token budget (e.g. 300000 for heavy tasks). Overrides config value. */\n budget?: number;\n /** Output structured JSON instead of human-readable output. */\n json?: boolean;\n argv?: string[];\n};\n\ntype RunResult = CommandResult<unknown>;\n\nfunction parseBooleanFlag(value: unknown, defaultValue: boolean): boolean {\n if (typeof value === 'boolean') {\n return value;\n }\n if (typeof value === 'string') {\n const normalized = value.trim().toLowerCase();\n if (['true', '1', 'yes', 'y', 'on'].includes(normalized)) {return true;}\n if (['false', '0', 'no', 'n', 'off'].includes(normalized)) {return false;}\n }\n if (typeof value === 'number') {\n return value !== 0;\n }\n return defaultValue;\n}\n\nexport default defineCommand({\n id: 'agent:run',\n description: 'Execute a task with autonomous agent (orchestrator + child agents)',\n\n handler: {\n async execute(ctx: PluginContextV3, input: RunInput): Promise<RunResult> {\n // V3: Flags may come wrapped in input.flags or passed directly\n const flags = ('flags' in input && typeof (input as { flags?: unknown }).flags === 'object' && (input as { flags?: unknown }).flags !== null)\n ? (input as { flags: RunInput }).flags\n : input;\n\n const {\n task,\n workingDir = ctx.cwd || process.cwd(),\n maxIterations = 200,\n temperature = 0.1,\n verbose: verboseRaw = true,\n quiet: quietRaw = false,\n detailed: detailedRaw = false,\n sessionId,\n tier = 'medium',\n mode = 'execute',\n complexity,\n files,\n trace,\n approve: approveRaw = false,\n execute: executeRaw = false,\n spec: specRaw = false,\n 'dry-run': dryRunRaw = false,\n debug: debugRaw = false,\n timeout: timeoutSeconds,\n budget: budgetOverride,\n json: jsonOutput = false,\n } = flags;\n\n const verbose = parseBooleanFlag(verboseRaw, true);\n const quiet = parseBooleanFlag(quietRaw, false);\n const detailed = parseBooleanFlag(detailedRaw, false);\n const approve = parseBooleanFlag(approveRaw, false);\n const executeAfterPlan = parseBooleanFlag(executeRaw, false);\n const spec = parseBooleanFlag(specRaw, false);\n const dryRun = parseBooleanFlag(dryRunRaw, false);\n const debug = parseBooleanFlag(debugRaw, false);\n\n // Build an AbortController when --timeout is specified.\n // The signal is passed into AgentConfig so the runner can honour it.\n const timeoutSecs = typeof timeoutSeconds === 'number' && timeoutSeconds > 0\n ? timeoutSeconds\n : undefined;\n\n const abortController = timeoutSecs !== undefined ? new AbortController() : undefined;\n let timeoutHandle: ReturnType<typeof setTimeout> | undefined;\n\n if (abortController && timeoutSecs !== undefined) {\n timeoutHandle = setTimeout(() => {\n abortController.abort(\n new Error(`Agent execution timed out after ${timeoutSecs}s (--timeout=${timeoutSecs})`)\n );\n }, timeoutSecs * 1000);\n // Unref so the timer never prevents the Node.js process from exiting naturally\n // when the agent finishes before the deadline.\n timeoutHandle.unref?.();\n }\n\n // Helper: always clear the timer once execution finishes (success or error).\n const clearTimeout_ = () => {\n if (timeoutHandle !== undefined) {\n clearTimeout(timeoutHandle);\n timeoutHandle = undefined;\n }\n };\n\n // Allow --approve without --task when --session-id is provided (approve existing plan)\n if (!task) {\n if (approve && sessionId) {\n const sessionManager = new SessionManager(workingDir as string || ctx.cwd || process.cwd());\n const planPath = sessionManager.getSessionPlanPath(sessionId as string);\n try {\n const raw = await fs.readFile(planPath, 'utf-8');\n const plan: TaskPlan = JSON.parse(raw);\n if (plan.status !== 'draft') {\n ctx.ui?.warn?.(`Plan is not in draft state (current: ${plan.status}). Nothing to approve.`);\n clearTimeout_();\n return { ok: false, error: 'Command failed' };\n }\n const approvedAt = new Date().toISOString();\n const approvedPlan = { ...plan, status: 'approved' as const, approvedAt, approvalComment: 'Approved via CLI --approve', updatedAt: approvedAt };\n await fs.writeFile(planPath, JSON.stringify(approvedPlan, null, 2), 'utf-8');\n const planDocumentService = new PlanDocumentService(workingDir as string || ctx.cwd || process.cwd());\n const planDocPath = planDocumentService.getPlanPath(plan);\n await planDocumentService.appendExecutionLog(planDocPath, `- ${approvedAt}: Plan approved via CLI (--approve).`).catch(() => {});\n ctx.ui?.success?.(`Plan approved: ${approvedPlan.id} (session: ${sessionId})`);\n ctx.ui?.info?.(`Ready to execute: kb agent run --session-id=${sessionId}`);\n clearTimeout_();\n return { ok: true, result: { sessionId: sessionId as string } };\n } catch {\n if (jsonOutput) {\n ctx.ui?.json?.({ ok: false, error: { code: 'NO_PLAN', message: `No approved plan for session ${sessionId}` } });\n } else {\n ctx.ui?.error?.('No plan found for this session', {\n hint: `Run: kb agent run --session-id=${sessionId} --task \"your task\"`,\n cause: `Session ${sessionId} has no approved plan`,\n });\n }\n clearTimeout_();\n return { ok: false, error: 'Command failed' };\n }\n }\n ctx.ui?.error?.('Error: --task is required');\n clearTimeout_();\n return { ok: false, error: 'Command failed' };\n }\n\n // Build mode config\n let modeConfig: ModeConfig | undefined;\n if (mode !== 'execute') {\n modeConfig = { mode } as ModeConfig;\n\n // Add mode-specific context\n if (mode === 'plan') {\n modeConfig.context = { mode: 'plan', task, complexity };\n } else if (mode === 'edit') {\n modeConfig.context = { mode: 'edit', task, targetFiles: files || [], dryRun };\n } else if (mode === 'debug') {\n modeConfig.context = { mode: 'debug', task, traceFile: trace, relevantFiles: files || [] };\n }\n }\n\n // Select event renderer based on verbosity flags\n let eventRenderer;\n if (jsonOutput) {\n eventRenderer = () => {}; // Suppress all human output for JSON mode\n } else if (quiet) {\n eventRenderer = createMinimalRenderer();\n } else if (debug) {\n eventRenderer = createDebugRenderer();\n } else if (detailed) {\n eventRenderer = createDetailedRenderer();\n } else {\n eventRenderer = createEventRenderer({\n verbose,\n showToolOutput: true,\n showLLMContent: false,\n });\n }\n\n try {\n const runId = `run-${Date.now()}-${Math.random().toString(36).slice(2, 7)}`;\n const sessionManager = new SessionManager(workingDir);\n let effectiveSessionId = sessionId as string | undefined;\n\n // Ensure session exists for consistent history/memory behavior in CLI path.\n if (!effectiveSessionId) {\n const createdSession = await sessionManager.createSession({\n mode,\n task,\n agentId: 'cli-agent',\n });\n effectiveSessionId = createdSession.id;\n } else {\n const existing = await sessionManager.loadSession(effectiveSessionId);\n if (!existing) {\n const createdSession = await sessionManager.createSession({\n mode,\n task,\n agentId: 'cli-agent',\n sessionId: effectiveSessionId,\n });\n effectiveSessionId = createdSession.id;\n }\n }\n\n // Persist user turn first so timeline ordering is deterministic.\n await sessionManager.createUserTurn(effectiveSessionId, task, runId);\n\n // Create shared file tracking (for edit protection)\n const filesRead = new Set<string>();\n const filesReadHash = new Map<string, string>();\n const sessionMemory = createSessionMemoryBridge(workingDir, effectiveSessionId);\n const responseRequirementsSelector = createDefaultResponseRequirementsSelector();\n\n // Create tool registry\n const toolRegistry = createToolRegistry({\n workingDir,\n currentTask: task,\n sessionId: effectiveSessionId,\n verbose: false, // Disable tool registry verbose - we have event renderer\n cache: useCache(),\n filesRead,\n filesReadHash,\n sessionMemory,\n responseRequirementsResolver: async ({ task: activeTask, kernel }: {\n task?: string;\n answer: string;\n kernel: KernelState | null;\n }) =>\n responseRequirementsSelector.select({\n state: kernel,\n messages: [],\n task: activeTask ?? task,\n }),\n });\n const agentsConfig = await useConfig<AgentsPluginConfig>();\n const effectiveBudget = typeof budgetOverride === 'number' && budgetOverride > 0\n ? { ...(agentsConfig?.tokenBudget ?? {}), enabled: true, maxTokens: budgetOverride }\n : agentsConfig?.tokenBudget;\n const analytics = useAnalytics() ?? null;\n const taskId = `task-${Date.now()}`;\n const tracer = new IncrementalTraceWriter(taskId);\n\n // Spec-only fast path: skip plan mode, generate spec from existing approved plan\n if (spec && effectiveSessionId && sessionId) {\n const planPath = sessionManager.getSessionPlanPath(effectiveSessionId);\n try {\n const planData = JSON.parse(await fs.readFile(planPath, 'utf-8')) as TaskPlan;\n if (planData.status === 'approved' || planData.status === 'spec_ready') {\n ctx.ui?.info?.(`Found approved plan: ${planData.id} (${planData.phases.length} phases). Generating spec directly...`);\n let pendingSessionWrite: Promise<void> = Promise.resolve();\n const specEventCallback = (event: AgentEvent) => {\n tracer.trace(event as unknown as DetailedTraceEntry);\n eventRenderer(event);\n pendingSessionWrite = pendingSessionWrite\n .then(async () => {\n await sessionManager.addEvent(effectiveSessionId!, {\n ...event,\n sessionId: effectiveSessionId,\n runId,\n metadata: {\n ...(event as unknown as Record<string, unknown>)['metadata'] as Record<string, unknown> | undefined,\n sessionId: effectiveSessionId,\n runId,\n workingDir,\n },\n } as unknown as AgentEvent);\n })\n .catch((error) => {\n const message = error instanceof Error ? error.message : String(error);\n console.warn(`[agent:run] Failed to persist spec event: ${message}`);\n });\n };\n const specConfig: AgentConfig = {\n workingDir,\n maxIterations: 40,\n temperature: 0.1,\n sessionId: effectiveSessionId,\n tier,\n analytics,\n tokenBudget: effectiveBudget,\n onEvent: specEventCallback,\n abortSignal: abortController?.signal,\n };\n const specHandler = new SpecModeHandler();\n const specResult = await specHandler.execute(planData, specConfig, toolRegistry);\n await pendingSessionWrite;\n await tracer.finalize();\n const detailedTrace = tracer.getEntries() as unknown as Array<Record<string, unknown>>;\n if (detailedTrace.length > 0) {\n await sessionManager.storeTraceArtifacts(effectiveSessionId, runId, detailedTrace);\n }\n if (specResult.success) {\n ctx.ui?.success?.(`Spec generated: ${specResult.spec?.id} (${specResult.spec?.sections.length || 0} sections, ${specResult.spec?.sections.reduce((s, sec) => s + sec.changes.length, 0) || 0} changes)`);\n } else {\n ctx.ui?.warn?.(`Spec generation failed: ${specResult.summary}`);\n }\n const specSucceeded = specResult.success;\n clearTimeout_();\n return specSucceeded\n ? { ok: true, result: {\n sessionId: effectiveSessionId,\n success: specSucceeded,\n summary: specResult.summary,\n filesCreated: specResult.filesCreated,\n filesModified: specResult.filesModified,\n filesRead: specResult.filesRead,\n iterations: specResult.iterations,\n tokensUsed: specResult.tokensUsed,\n } }\n : { ok: false, error: 'Command failed', result: {\n sessionId: effectiveSessionId,\n success: specSucceeded,\n summary: specResult.summary,\n filesCreated: specResult.filesCreated,\n filesModified: specResult.filesModified,\n filesRead: specResult.filesRead,\n iterations: 0,\n tokensUsed: 0,\n } };\n }\n } catch {\n // No plan.json or unreadable — fall through to normal flow\n }\n }\n\n // Track pending session writes so we can flush before exit\n let pendingSessionWrite: Promise<void> = Promise.resolve();\n let persistedEventCount = 0;\n\n // Create composite event callback that writes to tracer, renders UI, AND persists to session\n const compositeEventCallback = (event: AgentEvent) => {\n // Write to tracer\n tracer.trace(event as unknown as DetailedTraceEntry);\n // Render UI\n eventRenderer(event);\n // Persist to session for conversation history\n pendingSessionWrite = pendingSessionWrite\n .then(async () => {\n await sessionManager.addEvent(effectiveSessionId!, {\n ...event,\n sessionId: effectiveSessionId,\n runId,\n } as unknown as AgentEvent);\n persistedEventCount += 1;\n })\n .catch((error) => {\n const message = error instanceof Error ? error.message : String(error);\n console.warn(`[agent:run] Failed to persist event: ${message}`);\n });\n };\n\n // Create agent config with event callback\n const config: AgentConfig = {\n workingDir,\n maxIterations,\n temperature,\n sessionId: effectiveSessionId,\n tier,\n analytics,\n tokenBudget: agentsConfig?.tokenBudget,\n mode: modeConfig,\n onEvent: compositeEventCallback,\n debug,\n abortSignal: abortController?.signal,\n };\n\n // Announce the active timeout so the user knows about the deadline.\n if (timeoutSecs !== undefined && !quiet) {\n ctx.ui?.info?.(`⏱ Timeout active: agent will abort after ${timeoutSecs}s (--timeout=${timeoutSecs})`);\n }\n\n // Create and execute agent via SDK\n const sdk = new AgentSDK();\n sdk.register(createCoreToolPack(toolRegistry));\n const runner = sdk.createRunner(config);\n let result = await runner.execute(task);\n\n // Execution finished — cancel the timer immediately so it doesn't fire.\n clearTimeout_();\n\n // Flush pending session writes (ensures agent:end is persisted before exit)\n await pendingSessionWrite;\n\n // Some modes can complete without emitting event stream.\n // Persist synthetic assistant turn events so history stays complete.\n if (persistedEventCount === 0 && result.summary?.trim()) {\n const now = new Date().toISOString();\n const agentId = `agent-${runId}`;\n const baseMetadata = { sessionId: effectiveSessionId, runId, workingDir };\n await sessionManager.addEvent(effectiveSessionId, {\n type: 'agent:start',\n timestamp: now,\n sessionId: effectiveSessionId,\n agentId,\n runId,\n data: { task, tier, maxIterations, toolCount: 0 },\n metadata: baseMetadata,\n } as AgentEvent);\n await sessionManager.addEvent(effectiveSessionId, {\n type: 'llm:end',\n timestamp: now,\n sessionId: effectiveSessionId,\n agentId,\n runId,\n data: {\n content: result.summary,\n hasToolCalls: false,\n tokensUsed: 0,\n durationMs: 0,\n stopReason: 'no_tool_calls',\n },\n metadata: baseMetadata,\n } as AgentEvent);\n await sessionManager.addEvent(effectiveSessionId, {\n type: 'agent:end',\n timestamp: now,\n sessionId: effectiveSessionId,\n agentId,\n runId,\n data: {\n success: result.success,\n summary: result.summary,\n iterations: result.iterations,\n tokensUsed: result.tokensUsed,\n durationMs: 0,\n filesCreated: result.filesCreated,\n filesModified: result.filesModified,\n stopReason: result.success ? 'report_complete' : 'unknown',\n },\n metadata: baseMetadata,\n } as AgentEvent);\n }\n\n const detailedTrace = tracer.getEntries() as unknown as Array<Record<string, unknown>>;\n if (detailedTrace.length > 0) {\n await sessionManager.storeTraceArtifacts(effectiveSessionId, runId, detailedTrace);\n }\n\n // Attach file change summaries to turn for UI rollback/approve panel\n if (result.fileChanges && result.fileChanges.length > 0) {\n await sessionManager.attachFileChangesToTurn(effectiveSessionId, runId, result.fileChanges);\n }\n\n // Auto-approve generated plan in plan mode (--mode=plan --approve)\n if (approve) {\n if (mode !== 'plan') {\n ctx.ui?.warn?.('--approve is currently supported only with --mode=plan');\n } else if (!result.plan) {\n ctx.ui?.warn?.('No plan produced by plan mode, nothing to approve');\n } else {\n const approvedAt = new Date().toISOString();\n const approvedPlan = {\n ...result.plan,\n status: 'approved' as const,\n approvedAt,\n approvalComment: 'Approved via CLI --approve',\n updatedAt: approvedAt,\n };\n\n const sessionPlanPath = sessionManager.getSessionPlanPath(effectiveSessionId);\n await fs.writeFile(sessionPlanPath, JSON.stringify(approvedPlan, null, 2), 'utf-8');\n\n const planDocumentService = new PlanDocumentService(workingDir);\n const planDocPath = planDocumentService.getPlanPath(result.plan);\n await planDocumentService.appendExecutionLog(\n planDocPath,\n `- ${approvedAt}: Plan approved via CLI (--approve).`\n );\n\n ctx.ui?.success?.(`Plan approved: ${approvedPlan.id}`);\n\n if (executeAfterPlan) {\n // --execute: immediately run the approved plan in execute mode\n ctx.ui?.info?.('Executing approved plan...');\n const executeConfig: AgentConfig = {\n ...config,\n mode: { mode: 'execute' },\n };\n const executeSdk = new AgentSDK();\n executeSdk.register(createCoreToolPack(toolRegistry));\n const executeRunner = executeSdk.createRunner(executeConfig);\n result = await executeRunner.execute(task);\n } else {\n ctx.ui?.info?.(`Execute: kb agent run --session-id=${effectiveSessionId}`);\n }\n\n // Optional: generate spec after auto-approve\n if (spec && approvedPlan) {\n ctx.ui?.info?.('Generating detailed specification from approved plan...');\n const specHandler = new SpecModeHandler();\n const specResult = await specHandler.execute(approvedPlan, config, toolRegistry);\n\n if (specResult.success) {\n ctx.ui?.success?.(`Spec generated: ${specResult.spec?.id} (${specResult.spec?.sections.length || 0} sections)`);\n } else {\n ctx.ui?.warn?.(`Spec generation failed: ${specResult.summary}`);\n }\n }\n }\n }\n\n // Finalize tracer: generate index with memory stats, cleanup old traces\n await tracer.finalize();\n\n // Event renderer already showed the result via agent:end event\n // Just return the structured result\n\n const runSucceeded = result.success;\n const structuredResult = runSucceeded\n ? { ok: true as const, result: {\n sessionId: effectiveSessionId,\n success: runSucceeded,\n summary: result.summary,\n filesCreated: result.filesCreated,\n filesModified: result.filesModified,\n filesRead: result.filesRead,\n iterations: result.iterations,\n tokensUsed: result.tokensUsed,\n hasPlan: mode === 'plan' && !!result.plan,\n } }\n : { ok: false as const, error: 'Command failed', result: {\n sessionId: effectiveSessionId,\n success: runSucceeded,\n summary: result.summary,\n filesCreated: result.filesCreated,\n filesModified: result.filesModified,\n filesRead: result.filesRead,\n iterations: result.iterations,\n tokensUsed: result.tokensUsed,\n hasPlan: mode === 'plan' && !!result.plan,\n } };\n\n if (jsonOutput) {\n ctx.ui?.json?.(structuredResult);\n }\n\n return structuredResult;\n } catch (error) {\n clearTimeout_();\n // Surface a clear message when the timeout fired.\n if (abortController?.signal.aborted) {\n const reason = abortController.signal.reason instanceof Error\n ? abortController.signal.reason.message\n : `Agent execution timed out after ${timeoutSecs}s`;\n if (jsonOutput) {\n ctx.ui?.json?.({ ok: false, error: { code: 'TIMEOUT', message: reason } });\n } else {\n ctx.ui?.error?.('Agent execution timed out', {\n hint: 'Check agent logs with: kb agent logs --session-id <id>',\n cause: reason,\n });\n }\n return { ok: false, error: 'Command timed out' };\n }\n const errorMessage = error instanceof Error ? error.message : String(error);\n if (jsonOutput) {\n ctx.ui?.json?.({ ok: false, error: { code: 'EXECUTION_FAILED', message: errorMessage } });\n } else {\n ctx.ui?.error?.('Agent execution failed', {\n hint: 'Check agent logs with: kb agent logs --session-id <id>',\n cause: errorMessage,\n });\n }\n return { ok: false, error: 'Command failed' };\n }\n },\n },\n});\n"]}
|
|
@@ -14,7 +14,7 @@ var trace_context_default = defineCommand({
|
|
|
14
14
|
const loaded = await loadTrace(taskId);
|
|
15
15
|
if (!loaded.ok) {
|
|
16
16
|
ctx.ui?.json?.(error("INVALID_TASK_ID", formatTraceLoadError(loaded.error)));
|
|
17
|
-
return {
|
|
17
|
+
return { ok: false, error: "Command failed" };
|
|
18
18
|
}
|
|
19
19
|
const events = loaded.events;
|
|
20
20
|
const iterations = [];
|
|
@@ -42,17 +42,17 @@ var trace_context_default = defineCommand({
|
|
|
42
42
|
const filtered = filterIteration ? iterations.filter((it) => it.iteration === filterIteration) : iterations;
|
|
43
43
|
if (filtered.length === 0) {
|
|
44
44
|
ctx.ui.write("No context:snapshot events found. Make sure agent was run with latest build.\n");
|
|
45
|
-
return {
|
|
45
|
+
return { ok: false, error: "Command failed" };
|
|
46
46
|
}
|
|
47
47
|
if (flags.json) {
|
|
48
48
|
ctx.ui?.json?.({ success: true, iterations: filtered });
|
|
49
49
|
} else {
|
|
50
50
|
printTimeline(ctx, filtered);
|
|
51
51
|
}
|
|
52
|
-
return {
|
|
52
|
+
return { ok: true };
|
|
53
53
|
} catch (err) {
|
|
54
54
|
ctx.ui?.json?.(error("TRACE_NOT_FOUND", `Trace not found: ${taskId}`));
|
|
55
|
-
return {
|
|
55
|
+
return { ok: false, error: "Command failed" };
|
|
56
56
|
}
|
|
57
57
|
}
|
|
58
58
|
}
|