fixo-cli 1.0.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/LICENSE +201 -0
- package/README.md +530 -0
- package/dist/agent/agent-client.d.ts +108 -0
- package/dist/agent/agent-client.d.ts.map +1 -0
- package/dist/agent/agent-client.js +1247 -0
- package/dist/agent/agent-client.js.map +1 -0
- package/dist/agent/agent-pool.d.ts +20 -0
- package/dist/agent/agent-pool.d.ts.map +1 -0
- package/dist/agent/agent-pool.js +217 -0
- package/dist/agent/agent-pool.js.map +1 -0
- package/dist/agent/background-awareness.d.ts +55 -0
- package/dist/agent/background-awareness.d.ts.map +1 -0
- package/dist/agent/background-awareness.js +104 -0
- package/dist/agent/background-awareness.js.map +1 -0
- package/dist/agent/command-parser.d.ts +33 -0
- package/dist/agent/command-parser.d.ts.map +1 -0
- package/dist/agent/command-parser.js +120 -0
- package/dist/agent/command-parser.js.map +1 -0
- package/dist/agent/context-budget.d.ts +91 -0
- package/dist/agent/context-budget.d.ts.map +1 -0
- package/dist/agent/context-budget.js +219 -0
- package/dist/agent/context-budget.js.map +1 -0
- package/dist/agent/conversation.d.ts +190 -0
- package/dist/agent/conversation.d.ts.map +1 -0
- package/dist/agent/conversation.js +547 -0
- package/dist/agent/conversation.js.map +1 -0
- package/dist/agent/hooks.d.ts +72 -0
- package/dist/agent/hooks.d.ts.map +1 -0
- package/dist/agent/hooks.js +214 -0
- package/dist/agent/hooks.js.map +1 -0
- package/dist/agent/mcp-bridge.d.ts +13 -0
- package/dist/agent/mcp-bridge.d.ts.map +1 -0
- package/dist/agent/mcp-bridge.js +86 -0
- package/dist/agent/mcp-bridge.js.map +1 -0
- package/dist/agent/mcp-client.d.ts +24 -0
- package/dist/agent/mcp-client.d.ts.map +1 -0
- package/dist/agent/mcp-client.js +146 -0
- package/dist/agent/mcp-client.js.map +1 -0
- package/dist/agent/mcp-manager.d.ts +13 -0
- package/dist/agent/mcp-manager.d.ts.map +1 -0
- package/dist/agent/mcp-manager.js +84 -0
- package/dist/agent/mcp-manager.js.map +1 -0
- package/dist/agent/mcp-registry.d.ts +45 -0
- package/dist/agent/mcp-registry.d.ts.map +1 -0
- package/dist/agent/mcp-registry.js +98 -0
- package/dist/agent/mcp-registry.js.map +1 -0
- package/dist/agent/orchestrator.d.ts +14 -0
- package/dist/agent/orchestrator.d.ts.map +1 -0
- package/dist/agent/orchestrator.js +118 -0
- package/dist/agent/orchestrator.js.map +1 -0
- package/dist/agent/parser-adapter.d.ts +120 -0
- package/dist/agent/parser-adapter.d.ts.map +1 -0
- package/dist/agent/parser-adapter.js +265 -0
- package/dist/agent/parser-adapter.js.map +1 -0
- package/dist/agent/parsers/imports.d.ts +11 -0
- package/dist/agent/parsers/imports.d.ts.map +1 -0
- package/dist/agent/parsers/imports.js +94 -0
- package/dist/agent/parsers/imports.js.map +1 -0
- package/dist/agent/parsers/shell.d.ts +23 -0
- package/dist/agent/parsers/shell.d.ts.map +1 -0
- package/dist/agent/parsers/shell.js +200 -0
- package/dist/agent/parsers/shell.js.map +1 -0
- package/dist/agent/parsers/symbols.d.ts +17 -0
- package/dist/agent/parsers/symbols.d.ts.map +1 -0
- package/dist/agent/parsers/symbols.js +103 -0
- package/dist/agent/parsers/symbols.js.map +1 -0
- package/dist/agent/permissions.d.ts +65 -0
- package/dist/agent/permissions.d.ts.map +1 -0
- package/dist/agent/permissions.js +219 -0
- package/dist/agent/permissions.js.map +1 -0
- package/dist/agent/predictive-gate.d.ts +69 -0
- package/dist/agent/predictive-gate.d.ts.map +1 -0
- package/dist/agent/predictive-gate.js +128 -0
- package/dist/agent/predictive-gate.js.map +1 -0
- package/dist/agent/provider-cooldown.d.ts +144 -0
- package/dist/agent/provider-cooldown.d.ts.map +1 -0
- package/dist/agent/provider-cooldown.js +300 -0
- package/dist/agent/provider-cooldown.js.map +1 -0
- package/dist/agent/providers-manager.d.ts +109 -0
- package/dist/agent/providers-manager.d.ts.map +1 -0
- package/dist/agent/providers-manager.js +464 -0
- package/dist/agent/providers-manager.js.map +1 -0
- package/dist/agent/repo-map.d.ts +6 -0
- package/dist/agent/repo-map.d.ts.map +1 -0
- package/dist/agent/repo-map.js +221 -0
- package/dist/agent/repo-map.js.map +1 -0
- package/dist/agent/retry.d.ts +103 -0
- package/dist/agent/retry.d.ts.map +1 -0
- package/dist/agent/retry.js +276 -0
- package/dist/agent/retry.js.map +1 -0
- package/dist/agent/search/index.d.ts +61 -0
- package/dist/agent/search/index.d.ts.map +1 -0
- package/dist/agent/search/index.js +314 -0
- package/dist/agent/search/index.js.map +1 -0
- package/dist/agent/single-agent.d.ts +76 -0
- package/dist/agent/single-agent.d.ts.map +1 -0
- package/dist/agent/single-agent.js +697 -0
- package/dist/agent/single-agent.js.map +1 -0
- package/dist/agent/skills.d.ts +22 -0
- package/dist/agent/skills.d.ts.map +1 -0
- package/dist/agent/skills.js +139 -0
- package/dist/agent/skills.js.map +1 -0
- package/dist/agent/stream-glue.d.ts +85 -0
- package/dist/agent/stream-glue.d.ts.map +1 -0
- package/dist/agent/stream-glue.js +120 -0
- package/dist/agent/stream-glue.js.map +1 -0
- package/dist/agent/subagent.d.ts +72 -0
- package/dist/agent/subagent.d.ts.map +1 -0
- package/dist/agent/subagent.js +193 -0
- package/dist/agent/subagent.js.map +1 -0
- package/dist/agent/telemetry.d.ts +192 -0
- package/dist/agent/telemetry.d.ts.map +1 -0
- package/dist/agent/telemetry.js +400 -0
- package/dist/agent/telemetry.js.map +1 -0
- package/dist/agent/tokenizer.d.ts +42 -0
- package/dist/agent/tokenizer.d.ts.map +1 -0
- package/dist/agent/tokenizer.js +107 -0
- package/dist/agent/tokenizer.js.map +1 -0
- package/dist/agent/tool-executor.d.ts +289 -0
- package/dist/agent/tool-executor.d.ts.map +1 -0
- package/dist/agent/tool-executor.js +2519 -0
- package/dist/agent/tool-executor.js.map +1 -0
- package/dist/agent/web-impl.d.ts +2 -0
- package/dist/agent/web-impl.d.ts.map +1 -0
- package/dist/agent/web-impl.js +34 -0
- package/dist/agent/web-impl.js.map +1 -0
- package/dist/agent/web.d.ts +8 -0
- package/dist/agent/web.d.ts.map +1 -0
- package/dist/agent/web.js +8 -0
- package/dist/agent/web.js.map +1 -0
- package/dist/agent/worker-agent.d.ts +27 -0
- package/dist/agent/worker-agent.d.ts.map +1 -0
- package/dist/agent/worker-agent.js +503 -0
- package/dist/agent/worker-agent.js.map +1 -0
- package/dist/config.d.ts +162 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +138 -0
- package/dist/config.js.map +1 -0
- package/dist/context/fixo-md-watcher.d.ts +42 -0
- package/dist/context/fixo-md-watcher.d.ts.map +1 -0
- package/dist/context/fixo-md-watcher.js +126 -0
- package/dist/context/fixo-md-watcher.js.map +1 -0
- package/dist/context/fixo-md.d.ts +50 -0
- package/dist/context/fixo-md.d.ts.map +1 -0
- package/dist/context/fixo-md.js +118 -0
- package/dist/context/fixo-md.js.map +1 -0
- package/dist/context/todo.d.ts +65 -0
- package/dist/context/todo.d.ts.map +1 -0
- package/dist/context/todo.js +194 -0
- package/dist/context/todo.js.map +1 -0
- package/dist/git/git-manager.d.ts +33 -0
- package/dist/git/git-manager.d.ts.map +1 -0
- package/dist/git/git-manager.js +293 -0
- package/dist/git/git-manager.js.map +1 -0
- package/dist/git/git-ops.d.ts +10 -0
- package/dist/git/git-ops.d.ts.map +1 -0
- package/dist/git/git-ops.js +131 -0
- package/dist/git/git-ops.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +352 -0
- package/dist/index.js.map +1 -0
- package/dist/indexer.d.ts +30 -0
- package/dist/indexer.d.ts.map +1 -0
- package/dist/indexer.js +273 -0
- package/dist/indexer.js.map +1 -0
- package/dist/lsp/lsp-client.d.ts +24 -0
- package/dist/lsp/lsp-client.d.ts.map +1 -0
- package/dist/lsp/lsp-client.js +205 -0
- package/dist/lsp/lsp-client.js.map +1 -0
- package/dist/lsp/lsp-manager.d.ts +17 -0
- package/dist/lsp/lsp-manager.d.ts.map +1 -0
- package/dist/lsp/lsp-manager.js +154 -0
- package/dist/lsp/lsp-manager.js.map +1 -0
- package/dist/lsp/lsp-pre-save.d.ts +137 -0
- package/dist/lsp/lsp-pre-save.d.ts.map +1 -0
- package/dist/lsp/lsp-pre-save.js +245 -0
- package/dist/lsp/lsp-pre-save.js.map +1 -0
- package/dist/lsp/syntax-fallback.d.ts +83 -0
- package/dist/lsp/syntax-fallback.d.ts.map +1 -0
- package/dist/lsp/syntax-fallback.js +275 -0
- package/dist/lsp/syntax-fallback.js.map +1 -0
- package/dist/model-outcomes.d.ts +12 -0
- package/dist/model-outcomes.d.ts.map +1 -0
- package/dist/model-outcomes.js +46 -0
- package/dist/model-outcomes.js.map +1 -0
- package/dist/planner.d.ts +32 -0
- package/dist/planner.d.ts.map +1 -0
- package/dist/planner.js +163 -0
- package/dist/planner.js.map +1 -0
- package/dist/project-memory.d.ts +29 -0
- package/dist/project-memory.d.ts.map +1 -0
- package/dist/project-memory.js +349 -0
- package/dist/project-memory.js.map +1 -0
- package/dist/review.d.ts +2 -0
- package/dist/review.d.ts.map +1 -0
- package/dist/review.js +61 -0
- package/dist/review.js.map +1 -0
- package/dist/runtime/background-jobs.d.ts +97 -0
- package/dist/runtime/background-jobs.d.ts.map +1 -0
- package/dist/runtime/background-jobs.js +331 -0
- package/dist/runtime/background-jobs.js.map +1 -0
- package/dist/runtime/credential-vault.d.ts +124 -0
- package/dist/runtime/credential-vault.d.ts.map +1 -0
- package/dist/runtime/credential-vault.js +184 -0
- package/dist/runtime/credential-vault.js.map +1 -0
- package/dist/runtime/loop-trap.d.ts +197 -0
- package/dist/runtime/loop-trap.d.ts.map +1 -0
- package/dist/runtime/loop-trap.js +420 -0
- package/dist/runtime/loop-trap.js.map +1 -0
- package/dist/runtime/policy.d.ts +15 -0
- package/dist/runtime/policy.d.ts.map +1 -0
- package/dist/runtime/policy.js +60 -0
- package/dist/runtime/policy.js.map +1 -0
- package/dist/runtime/redaction.d.ts +66 -0
- package/dist/runtime/redaction.d.ts.map +1 -0
- package/dist/runtime/redaction.js +155 -0
- package/dist/runtime/redaction.js.map +1 -0
- package/dist/runtime/session-snapshots.d.ts +76 -0
- package/dist/runtime/session-snapshots.d.ts.map +1 -0
- package/dist/runtime/session-snapshots.js +166 -0
- package/dist/runtime/session-snapshots.js.map +1 -0
- package/dist/runtime/staging.d.ts +205 -0
- package/dist/runtime/staging.d.ts.map +1 -0
- package/dist/runtime/staging.js +526 -0
- package/dist/runtime/staging.js.map +1 -0
- package/dist/runtime/task-session.d.ts +95 -0
- package/dist/runtime/task-session.d.ts.map +1 -0
- package/dist/runtime/task-session.js +263 -0
- package/dist/runtime/task-session.js.map +1 -0
- package/dist/runtime/worktree.d.ts +55 -0
- package/dist/runtime/worktree.d.ts.map +1 -0
- package/dist/runtime/worktree.js +175 -0
- package/dist/runtime/worktree.js.map +1 -0
- package/dist/setup-wizard.d.ts +8 -0
- package/dist/setup-wizard.d.ts.map +1 -0
- package/dist/setup-wizard.js +73 -0
- package/dist/setup-wizard.js.map +1 -0
- package/dist/shared/content.d.ts +43 -0
- package/dist/shared/content.d.ts.map +1 -0
- package/dist/shared/content.js +61 -0
- package/dist/shared/content.js.map +1 -0
- package/dist/shared/types.d.ts +217 -0
- package/dist/shared/types.d.ts.map +1 -0
- package/dist/shared/types.js +3 -0
- package/dist/shared/types.js.map +1 -0
- package/dist/test-runner.d.ts +5 -0
- package/dist/test-runner.d.ts.map +1 -0
- package/dist/test-runner.js +42 -0
- package/dist/test-runner.js.map +1 -0
- package/dist/types.d.ts +85 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/ui/ascii.d.ts +23 -0
- package/dist/ui/ascii.d.ts.map +1 -0
- package/dist/ui/ascii.js +45 -0
- package/dist/ui/ascii.js.map +1 -0
- package/dist/ui/colors.d.ts +111 -0
- package/dist/ui/colors.d.ts.map +1 -0
- package/dist/ui/colors.js +166 -0
- package/dist/ui/colors.js.map +1 -0
- package/dist/ui/image-attach.d.ts +27 -0
- package/dist/ui/image-attach.d.ts.map +1 -0
- package/dist/ui/image-attach.js +100 -0
- package/dist/ui/image-attach.js.map +1 -0
- package/dist/ui/index.d.ts +18 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +18 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/ui/markdown-stream.d.ts +91 -0
- package/dist/ui/markdown-stream.d.ts.map +1 -0
- package/dist/ui/markdown-stream.js +524 -0
- package/dist/ui/markdown-stream.js.map +1 -0
- package/dist/ui/plan-renderer.d.ts +36 -0
- package/dist/ui/plan-renderer.d.ts.map +1 -0
- package/dist/ui/plan-renderer.js +79 -0
- package/dist/ui/plan-renderer.js.map +1 -0
- package/dist/ui/prompt.d.ts +11 -0
- package/dist/ui/prompt.d.ts.map +1 -0
- package/dist/ui/prompt.js +1960 -0
- package/dist/ui/prompt.js.map +1 -0
- package/dist/ui/render-primitives.d.ts +117 -0
- package/dist/ui/render-primitives.d.ts.map +1 -0
- package/dist/ui/render-primitives.js +322 -0
- package/dist/ui/render-primitives.js.map +1 -0
- package/dist/ui/render.d.ts +133 -0
- package/dist/ui/render.d.ts.map +1 -0
- package/dist/ui/render.js +547 -0
- package/dist/ui/render.js.map +1 -0
- package/dist/ui/session-header.d.ts +30 -0
- package/dist/ui/session-header.d.ts.map +1 -0
- package/dist/ui/session-header.js +74 -0
- package/dist/ui/session-header.js.map +1 -0
- package/dist/workspace-guard.d.ts +68 -0
- package/dist/workspace-guard.d.ts.map +1 -0
- package/dist/workspace-guard.js +168 -0
- package/dist/workspace-guard.js.map +1 -0
- package/dist/workspace-lock.d.ts +27 -0
- package/dist/workspace-lock.d.ts.map +1 -0
- package/dist/workspace-lock.js +95 -0
- package/dist/workspace-lock.js.map +1 -0
- package/package.json +63 -0
|
@@ -0,0 +1,524 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* markdown-stream.ts — incremental ANSI markdown renderer for
|
|
3
|
+
* streaming model output.
|
|
4
|
+
*
|
|
5
|
+
* Design contract:
|
|
6
|
+
* - `write(chunk)` accepts arbitrary chunks (a single byte, half
|
|
7
|
+
* a word, a full paragraph). Lines are buffered until the
|
|
8
|
+
* trailing `\n` arrives; partial lines stay in the buffer.
|
|
9
|
+
* - `flush()` closes the renderer and emits any remaining buffer.
|
|
10
|
+
*
|
|
11
|
+
* State machine: `text` → `code-fence` → `text`, `text` → `table`
|
|
12
|
+
* → `text`. Transitions trigger on a complete line; partial lines
|
|
13
|
+
* never push the renderer into a new mode.
|
|
14
|
+
*
|
|
15
|
+
* Fenced code blocks use a hybrid presentation:
|
|
16
|
+
* - TTY path: stream a dim preview with side borders + the top
|
|
17
|
+
* border, then on close fence cursor-up + clear-to-end-of-screen
|
|
18
|
+
* and re-emit the finalised framed block with syntax highlight.
|
|
19
|
+
* - Non-TTY path (tests, pipes): suppress the preview and emit
|
|
20
|
+
* only the finalised framed block. Output is deterministic.
|
|
21
|
+
*
|
|
22
|
+
* Tables are buffered until a blank line / non-table line arrives,
|
|
23
|
+
* then rendered with Unicode box drawing.
|
|
24
|
+
*/
|
|
25
|
+
import { C, visLen, padToVisual } from './colors.js';
|
|
26
|
+
/* ──────────────────────── width helpers ──────────────────────── */
|
|
27
|
+
const FRAME_FALLBACK = 76;
|
|
28
|
+
function frameWidth() {
|
|
29
|
+
const cols = process.stdout.columns ?? FRAME_FALLBACK + 4;
|
|
30
|
+
return Math.max(20, Math.min(100, cols - 4));
|
|
31
|
+
}
|
|
32
|
+
function isTTY() {
|
|
33
|
+
return process.stdout.isTTY === true;
|
|
34
|
+
}
|
|
35
|
+
function safeWrite(s) {
|
|
36
|
+
try {
|
|
37
|
+
process.stdout.write(s);
|
|
38
|
+
}
|
|
39
|
+
catch { /* stdout may be closed */ }
|
|
40
|
+
}
|
|
41
|
+
function safeWriteLine(s) {
|
|
42
|
+
safeWrite(s + '\n');
|
|
43
|
+
}
|
|
44
|
+
/* ──────────────────────── inline formatting ──────────────────────── */
|
|
45
|
+
const ITALIC_ON = '\x1b[3m';
|
|
46
|
+
/**
|
|
47
|
+
* Apply inline markdown formatting to a single line: bold, italic,
|
|
48
|
+
* inline code, links, file paths, error keywords. Returns an
|
|
49
|
+
* ANSI-coloured string suitable for embedding in a wider line.
|
|
50
|
+
*
|
|
51
|
+
* Order matters: bold (`**`) before italic (`*`) so the longer
|
|
52
|
+
* delimiter wins. Inline code uses backticks and runs after the
|
|
53
|
+
* emphasis pass so backticks inside emphasis are honoured.
|
|
54
|
+
*/
|
|
55
|
+
function inlineFormat(text) {
|
|
56
|
+
let out = text;
|
|
57
|
+
// Links: [text](url) → just the text in blue + underline.
|
|
58
|
+
out = out.replace(/\[([^\]]+)\]\(([^)]+)\)/g, (_m, txt) => `${C.BLUE}\x1b[4m${txt}${C.RESET}`);
|
|
59
|
+
// Inline code first so its body is not re-formatted by the
|
|
60
|
+
// emphasis pass below.
|
|
61
|
+
out = out.replace(/`([^`]+)`/g, (_m, code) => `${C.PURPLE}${code}${C.RESET}`);
|
|
62
|
+
// Bold (**...**).
|
|
63
|
+
out = out.replace(/\*\*([^*]+)\*\*/g, (_m, c) => `${C.BOLD}${C.SNOW}${c}${C.RESET}`);
|
|
64
|
+
// Italic (*...* or _..._), skipping the bold escape we just emitted.
|
|
65
|
+
out = out.replace(/(?<![*\\])\*([^*\n]+)\*(?!\*)/g, (_m, c) => `${ITALIC_ON}${C.SNOW3}${c}${C.RESET}`);
|
|
66
|
+
out = out.replace(/(?<![_\\])_([^_\n]+)_(?!_)/g, (_m, c) => `${ITALIC_ON}${C.SNOW3}${c}${C.RESET}`);
|
|
67
|
+
// Warning keywords.
|
|
68
|
+
out = out.replace(/\b(error|errors|failed|warning|warn)\b/gi, (m) => `${C.LAVA}${m}${C.RESET}`);
|
|
69
|
+
return out;
|
|
70
|
+
}
|
|
71
|
+
/* ──────────────────────── code highlight ──────────────────────── */
|
|
72
|
+
const LANG_KEYWORDS = {
|
|
73
|
+
typescript: new Set(['const', 'let', 'var', 'function', 'class', 'import', 'export', 'from', 'return', 'if', 'else', 'for', 'while', 'async', 'await', 'interface', 'type', 'enum', 'extends', 'implements', 'new', 'throw', 'try', 'catch', 'finally', 'public', 'private', 'protected', 'readonly', 'static', 'this', 'super', 'void', 'true', 'false', 'null', 'undefined']),
|
|
74
|
+
javascript: new Set(['const', 'let', 'var', 'function', 'class', 'import', 'export', 'from', 'return', 'if', 'else', 'for', 'while', 'async', 'await', 'new', 'throw', 'try', 'catch', 'finally', 'this', 'super', 'true', 'false', 'null', 'undefined']),
|
|
75
|
+
python: new Set(['def', 'class', 'import', 'from', 'return', 'if', 'elif', 'else', 'for', 'while', 'async', 'await', 'try', 'except', 'finally', 'with', 'as', 'in', 'is', 'not', 'and', 'or', 'pass', 'raise', 'lambda', 'yield', 'True', 'False', 'None', 'self']),
|
|
76
|
+
rust: new Set(['fn', 'let', 'mut', 'const', 'struct', 'enum', 'impl', 'trait', 'use', 'pub', 'mod', 'return', 'if', 'else', 'for', 'while', 'loop', 'match', 'self', 'Self', 'true', 'false']),
|
|
77
|
+
go: new Set(['func', 'var', 'const', 'package', 'import', 'return', 'if', 'else', 'for', 'range', 'switch', 'case', 'defer', 'go', 'chan', 'struct', 'interface', 'type', 'true', 'false', 'nil']),
|
|
78
|
+
bash: new Set(['if', 'then', 'else', 'elif', 'fi', 'for', 'in', 'do', 'done', 'while', 'function', 'return', 'export', 'local', 'echo']),
|
|
79
|
+
sh: new Set(['if', 'then', 'else', 'elif', 'fi', 'for', 'in', 'do', 'done', 'while', 'function', 'return', 'export', 'local', 'echo']),
|
|
80
|
+
json: new Set(['true', 'false', 'null']),
|
|
81
|
+
};
|
|
82
|
+
function langKey(raw) {
|
|
83
|
+
const k = raw.toLowerCase().trim();
|
|
84
|
+
if (k === 'ts' || k === 'tsx')
|
|
85
|
+
return 'typescript';
|
|
86
|
+
if (k === 'js' || k === 'jsx' || k === 'mjs')
|
|
87
|
+
return 'javascript';
|
|
88
|
+
if (k === 'py')
|
|
89
|
+
return 'python';
|
|
90
|
+
if (k === 'rs')
|
|
91
|
+
return 'rust';
|
|
92
|
+
if (k === 'shell' || k === 'zsh')
|
|
93
|
+
return 'bash';
|
|
94
|
+
return k;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Tokenise a single line of code and emit ANSI-coloured output.
|
|
98
|
+
* Token rules (in scan order, first match wins):
|
|
99
|
+
* - Line comment (`//` for C-family, `#` for python/bash) → SNOW4.
|
|
100
|
+
* - String literal (`"`, `'`, `` ` ``) → GREEN.
|
|
101
|
+
* - Numeric literal → YELLOW.
|
|
102
|
+
* - Identifier / keyword → PURPLE if keyword, SNOW2 otherwise.
|
|
103
|
+
* - Punctuation / whitespace → SNOW3.
|
|
104
|
+
*
|
|
105
|
+
* Languages without an entry in {@link LANG_KEYWORDS} get a plain
|
|
106
|
+
* SNOW2 rendering (no highlighting).
|
|
107
|
+
*/
|
|
108
|
+
function highlightCodeLine(line, lang) {
|
|
109
|
+
const key = langKey(lang);
|
|
110
|
+
const keywords = LANG_KEYWORDS[key];
|
|
111
|
+
if (!keywords)
|
|
112
|
+
return `${C.SNOW2}${line}${C.RESET}`;
|
|
113
|
+
const usesHashComment = key === 'python' || key === 'bash' || key === 'sh';
|
|
114
|
+
const out = [];
|
|
115
|
+
let i = 0;
|
|
116
|
+
while (i < line.length) {
|
|
117
|
+
const c = line[i];
|
|
118
|
+
// Comment-to-end-of-line.
|
|
119
|
+
if (c === '/' && line[i + 1] === '/') {
|
|
120
|
+
out.push(`${C.SNOW4}${line.slice(i)}${C.RESET}`);
|
|
121
|
+
break;
|
|
122
|
+
}
|
|
123
|
+
if (c === '#' && usesHashComment) {
|
|
124
|
+
out.push(`${C.SNOW4}${line.slice(i)}${C.RESET}`);
|
|
125
|
+
break;
|
|
126
|
+
}
|
|
127
|
+
// String literal.
|
|
128
|
+
if (c === '"' || c === "'" || c === '`') {
|
|
129
|
+
let j = i + 1;
|
|
130
|
+
while (j < line.length && line[j] !== c) {
|
|
131
|
+
if (line[j] === '\\' && j + 1 < line.length)
|
|
132
|
+
j++;
|
|
133
|
+
j++;
|
|
134
|
+
}
|
|
135
|
+
j = Math.min(j + 1, line.length);
|
|
136
|
+
out.push(`${C.GREEN}${line.slice(i, j)}${C.RESET}`);
|
|
137
|
+
i = j;
|
|
138
|
+
continue;
|
|
139
|
+
}
|
|
140
|
+
// Number.
|
|
141
|
+
if (/\d/.test(c) && (i === 0 || !/[A-Za-z_]/.test(line[i - 1]))) {
|
|
142
|
+
let j = i;
|
|
143
|
+
while (j < line.length && /[\d.]/.test(line[j]))
|
|
144
|
+
j++;
|
|
145
|
+
out.push(`${C.YELLOW}${line.slice(i, j)}${C.RESET}`);
|
|
146
|
+
i = j;
|
|
147
|
+
continue;
|
|
148
|
+
}
|
|
149
|
+
// Identifier.
|
|
150
|
+
if (/[A-Za-z_]/.test(c)) {
|
|
151
|
+
let j = i;
|
|
152
|
+
while (j < line.length && /[A-Za-z0-9_]/.test(line[j]))
|
|
153
|
+
j++;
|
|
154
|
+
const word = line.slice(i, j);
|
|
155
|
+
if (keywords.has(word))
|
|
156
|
+
out.push(`${C.PURPLE}${word}${C.RESET}`);
|
|
157
|
+
else
|
|
158
|
+
out.push(`${C.SNOW2}${word}${C.RESET}`);
|
|
159
|
+
i = j;
|
|
160
|
+
continue;
|
|
161
|
+
}
|
|
162
|
+
// Everything else (punctuation, whitespace).
|
|
163
|
+
out.push(`${C.SNOW3}${c}${C.RESET}`);
|
|
164
|
+
i++;
|
|
165
|
+
}
|
|
166
|
+
return out.join('');
|
|
167
|
+
}
|
|
168
|
+
/* ──────────────────────── word wrap ──────────────────────── */
|
|
169
|
+
function wrapToWidth(text, width) {
|
|
170
|
+
if (width <= 0)
|
|
171
|
+
return [text];
|
|
172
|
+
if (text.length === 0)
|
|
173
|
+
return [''];
|
|
174
|
+
const words = text.split(/\s+/).filter(Boolean);
|
|
175
|
+
if (words.length === 0)
|
|
176
|
+
return [''];
|
|
177
|
+
const out = [];
|
|
178
|
+
let line = '';
|
|
179
|
+
const pushWord = (w) => {
|
|
180
|
+
// Hard-break words that don't fit on a line by themselves.
|
|
181
|
+
while (w.length > width) {
|
|
182
|
+
if (line.length > 0) {
|
|
183
|
+
out.push(line);
|
|
184
|
+
line = '';
|
|
185
|
+
}
|
|
186
|
+
out.push(w.slice(0, width));
|
|
187
|
+
w = w.slice(width);
|
|
188
|
+
}
|
|
189
|
+
if (line.length === 0) {
|
|
190
|
+
line = w;
|
|
191
|
+
}
|
|
192
|
+
else if (line.length + 1 + w.length <= width) {
|
|
193
|
+
line += ' ' + w;
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
out.push(line);
|
|
197
|
+
line = w;
|
|
198
|
+
}
|
|
199
|
+
};
|
|
200
|
+
for (const w of words)
|
|
201
|
+
pushWord(w);
|
|
202
|
+
if (line.length > 0)
|
|
203
|
+
out.push(line);
|
|
204
|
+
return out;
|
|
205
|
+
}
|
|
206
|
+
export class MarkdownStreamRenderer {
|
|
207
|
+
buf = '';
|
|
208
|
+
state = 'text';
|
|
209
|
+
codeLang = '';
|
|
210
|
+
codeLines = [];
|
|
211
|
+
previewLineCount = 0;
|
|
212
|
+
tableRows = [];
|
|
213
|
+
firstWrite = true;
|
|
214
|
+
/**
|
|
215
|
+
* Feed a chunk of streamed text. Lines are emitted as they
|
|
216
|
+
* complete; the trailing fragment (text after the last `\n`)
|
|
217
|
+
* stays in the buffer until the next write or flush.
|
|
218
|
+
*/
|
|
219
|
+
write(chunk) {
|
|
220
|
+
if (this.firstWrite) {
|
|
221
|
+
// Match the leading newline the legacy console.log path used,
|
|
222
|
+
// so the rendered block lifts off the prompt cleanly.
|
|
223
|
+
safeWrite('\n');
|
|
224
|
+
this.firstWrite = false;
|
|
225
|
+
}
|
|
226
|
+
this.buf += chunk;
|
|
227
|
+
let nl;
|
|
228
|
+
while ((nl = this.buf.indexOf('\n')) !== -1) {
|
|
229
|
+
const line = this.buf.slice(0, nl);
|
|
230
|
+
this.buf = this.buf.slice(nl + 1);
|
|
231
|
+
this.handleLine(line);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Close the renderer. Emits any buffered partial line, closes
|
|
236
|
+
* any open code fence (treating EOF as an implicit close), and
|
|
237
|
+
* flushes any open table.
|
|
238
|
+
*/
|
|
239
|
+
flush() {
|
|
240
|
+
if (this.buf.length > 0) {
|
|
241
|
+
const tail = this.buf;
|
|
242
|
+
this.buf = '';
|
|
243
|
+
this.handleLine(tail);
|
|
244
|
+
}
|
|
245
|
+
if (this.state === 'code-fence')
|
|
246
|
+
this.closeCodeFence();
|
|
247
|
+
if (this.state === 'table')
|
|
248
|
+
this.flushTable();
|
|
249
|
+
}
|
|
250
|
+
/* ────────── line dispatch ────────── */
|
|
251
|
+
handleLine(line) {
|
|
252
|
+
if (this.state === 'code-fence') {
|
|
253
|
+
if (/^\s*```\s*$/.test(line)) {
|
|
254
|
+
this.closeCodeFence();
|
|
255
|
+
return;
|
|
256
|
+
}
|
|
257
|
+
this.codeLines.push(line);
|
|
258
|
+
this.streamCodePreviewLine(line);
|
|
259
|
+
return;
|
|
260
|
+
}
|
|
261
|
+
if (this.state === 'table') {
|
|
262
|
+
if (this.looksLikeTableRow(line)) {
|
|
263
|
+
this.tableRows.push(line);
|
|
264
|
+
return;
|
|
265
|
+
}
|
|
266
|
+
this.flushTable();
|
|
267
|
+
// Fall through to text handling for this line.
|
|
268
|
+
}
|
|
269
|
+
const fence = line.match(/^\s*```\s*(\S+)?\s*$/);
|
|
270
|
+
if (fence) {
|
|
271
|
+
this.openCodeFence(fence[1] ?? '');
|
|
272
|
+
return;
|
|
273
|
+
}
|
|
274
|
+
if (this.looksLikeTableRow(line)) {
|
|
275
|
+
this.state = 'table';
|
|
276
|
+
this.tableRows.push(line);
|
|
277
|
+
return;
|
|
278
|
+
}
|
|
279
|
+
this.renderTextLine(line);
|
|
280
|
+
}
|
|
281
|
+
/* ────────── text-mode renderers ────────── */
|
|
282
|
+
renderTextLine(line) {
|
|
283
|
+
if (line.trim() === '') {
|
|
284
|
+
safeWriteLine('');
|
|
285
|
+
return;
|
|
286
|
+
}
|
|
287
|
+
// Heading.
|
|
288
|
+
const h = line.match(/^(#{1,6})\s+(.+)$/);
|
|
289
|
+
if (h) {
|
|
290
|
+
const level = h[1].length;
|
|
291
|
+
const text = h[2];
|
|
292
|
+
const color = level === 1 ? C.LAVA : level === 2 ? C.LAVA : C.SNOW;
|
|
293
|
+
const underline = level <= 2 ? '\x1b[4m' : '';
|
|
294
|
+
safeWriteLine(` ${C.BOLD}${color}${underline}${text}${C.RESET}`);
|
|
295
|
+
// h1/h2 get a blank line for breathing room.
|
|
296
|
+
if (level <= 2)
|
|
297
|
+
safeWriteLine('');
|
|
298
|
+
return;
|
|
299
|
+
}
|
|
300
|
+
// Horizontal rule.
|
|
301
|
+
if (/^\s*([-*_])\1{2,}\s*$/.test(line)) {
|
|
302
|
+
const w = frameWidth();
|
|
303
|
+
safeWriteLine(` ${C.SNOW4}${'─'.repeat(w)}${C.RESET}`);
|
|
304
|
+
return;
|
|
305
|
+
}
|
|
306
|
+
// Blockquote.
|
|
307
|
+
if (/^\s*>\s?/.test(line)) {
|
|
308
|
+
const rest = line.replace(/^\s*>\s?/, '');
|
|
309
|
+
safeWriteLine(` ${C.LAVA}│${C.RESET} ${C.SNOW3}${inlineFormat(rest)}${C.RESET}`);
|
|
310
|
+
return;
|
|
311
|
+
}
|
|
312
|
+
// Bulleted list.
|
|
313
|
+
const b = line.match(/^(\s*)([-*+])\s+(.+)$/);
|
|
314
|
+
if (b) {
|
|
315
|
+
const sp = b[1];
|
|
316
|
+
const rest = b[3];
|
|
317
|
+
safeWriteLine(` ${sp}${C.LAVA}•${C.RESET} ${inlineFormat(rest)}`);
|
|
318
|
+
return;
|
|
319
|
+
}
|
|
320
|
+
// Numbered list.
|
|
321
|
+
const n = line.match(/^(\s*)(\d+)\.\s+(.+)$/);
|
|
322
|
+
if (n) {
|
|
323
|
+
const sp = n[1];
|
|
324
|
+
const num = n[2];
|
|
325
|
+
const rest = n[3];
|
|
326
|
+
safeWriteLine(` ${sp}${C.LAVA}${num}.${C.RESET} ${inlineFormat(rest)}`);
|
|
327
|
+
return;
|
|
328
|
+
}
|
|
329
|
+
// Plain paragraph — wrap.
|
|
330
|
+
const w = frameWidth();
|
|
331
|
+
for (const wrapped of wrapToWidth(line, w - 2)) {
|
|
332
|
+
safeWriteLine(` ${inlineFormat(wrapped)}`);
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
/* ────────── code fence ────────── */
|
|
336
|
+
openCodeFence(lang) {
|
|
337
|
+
this.state = 'code-fence';
|
|
338
|
+
this.codeLang = lang;
|
|
339
|
+
this.codeLines = [];
|
|
340
|
+
this.previewLineCount = 0;
|
|
341
|
+
if (!isTTY())
|
|
342
|
+
return;
|
|
343
|
+
// Stream a top border immediately so the user sees the box
|
|
344
|
+
// appearing. The lang tag (or "stream") sits in the top edge.
|
|
345
|
+
safeWriteLine(this.codeTopBorder(lang || 'stream'));
|
|
346
|
+
this.previewLineCount++;
|
|
347
|
+
}
|
|
348
|
+
streamCodePreviewLine(line) {
|
|
349
|
+
if (!isTTY())
|
|
350
|
+
return;
|
|
351
|
+
const w = frameWidth();
|
|
352
|
+
const inner = w - 2;
|
|
353
|
+
const truncated = line.length > inner ? line.slice(0, inner) : line;
|
|
354
|
+
const pad = Math.max(0, inner - truncated.length);
|
|
355
|
+
safeWriteLine(` ${C.LAVA}│${C.RESET} ${C.SNOW4}${truncated}${C.RESET}${' '.repeat(pad)} ${C.LAVA}│${C.RESET}`);
|
|
356
|
+
this.previewLineCount++;
|
|
357
|
+
}
|
|
358
|
+
closeCodeFence() {
|
|
359
|
+
if (isTTY() && this.previewLineCount > 0) {
|
|
360
|
+
// Erase the dim preview + its top border, then re-render
|
|
361
|
+
// with syntax highlighting.
|
|
362
|
+
safeWrite(`\x1b[${this.previewLineCount}A\r\x1b[J`);
|
|
363
|
+
}
|
|
364
|
+
safeWriteLine(this.codeTopBorder(this.codeLang || 'code'));
|
|
365
|
+
const w = frameWidth();
|
|
366
|
+
const inner = w - 2;
|
|
367
|
+
for (const raw of this.codeLines) {
|
|
368
|
+
const truncated = raw.length > inner ? raw.slice(0, inner) : raw;
|
|
369
|
+
const highlighted = highlightCodeLine(truncated, this.codeLang);
|
|
370
|
+
const pad = Math.max(0, inner - visLen(highlighted));
|
|
371
|
+
safeWriteLine(` ${C.LAVA}│${C.RESET} ${highlighted}${' '.repeat(pad)} ${C.LAVA}│${C.RESET}`);
|
|
372
|
+
}
|
|
373
|
+
safeWriteLine(` ${C.LAVA}└${'─'.repeat(frameWidth())}┘${C.RESET}`);
|
|
374
|
+
this.state = 'text';
|
|
375
|
+
this.codeLang = '';
|
|
376
|
+
this.codeLines = [];
|
|
377
|
+
this.previewLineCount = 0;
|
|
378
|
+
}
|
|
379
|
+
codeTopBorder(label) {
|
|
380
|
+
const w = frameWidth();
|
|
381
|
+
const tag = ` ${label} `;
|
|
382
|
+
const fillLen = Math.max(0, w - tag.length - 1);
|
|
383
|
+
return ` ${C.LAVA}┌${C.RESET}${C.LAVA}${tag}${C.RESET}${C.LAVA}${'─'.repeat(fillLen)}┐${C.RESET}`;
|
|
384
|
+
}
|
|
385
|
+
/* ────────── tables ────────── */
|
|
386
|
+
looksLikeTableRow(line) {
|
|
387
|
+
const t = line.trim();
|
|
388
|
+
return t.startsWith('|') && t.endsWith('|') && t.length >= 3;
|
|
389
|
+
}
|
|
390
|
+
flushTable() {
|
|
391
|
+
const rawRows = this.tableRows.map((row) => {
|
|
392
|
+
const t = row.trim().slice(1, -1);
|
|
393
|
+
return t.split('|').map((cell) => cell.trim());
|
|
394
|
+
});
|
|
395
|
+
this.tableRows = [];
|
|
396
|
+
this.state = 'text';
|
|
397
|
+
if (rawRows.length === 0)
|
|
398
|
+
return;
|
|
399
|
+
const isDivider = (cells) => cells.length > 0 && cells.every((c) => /^:?-+:?$/.test(c.trim()));
|
|
400
|
+
const header = rawRows[0];
|
|
401
|
+
let bodyStart = 1;
|
|
402
|
+
if (rawRows.length > 1 && isDivider(rawRows[1]))
|
|
403
|
+
bodyStart = 2;
|
|
404
|
+
const body = rawRows.slice(bodyStart);
|
|
405
|
+
const cols = header.length;
|
|
406
|
+
if (cols === 0)
|
|
407
|
+
return;
|
|
408
|
+
// Split each cell on <br>, <br/>, <br />, and real newlines so
|
|
409
|
+
// models emitting `<br>` for "wrap inside cell" produce real
|
|
410
|
+
// visual line breaks. Pre-segment per cell.
|
|
411
|
+
const segmentCell = (raw) => raw
|
|
412
|
+
.split(/<br\s*\/?>|\\n|\n/i)
|
|
413
|
+
.map((s) => s.trim())
|
|
414
|
+
.filter((_s, i, arr) => arr.length === 1 || _s.length > 0 || i < arr.length - 1);
|
|
415
|
+
const segHeader = header.map(segmentCell);
|
|
416
|
+
const segBody = body.map((row) => row.map(segmentCell));
|
|
417
|
+
// Natural width per column = longest single segment in any
|
|
418
|
+
// cell, after inline formatting (so escape codes don't count).
|
|
419
|
+
const natural = new Array(cols).fill(0);
|
|
420
|
+
for (const segRow of [segHeader, ...segBody]) {
|
|
421
|
+
for (let i = 0; i < cols; i++) {
|
|
422
|
+
for (const seg of segRow[i] ?? []) {
|
|
423
|
+
const len = visLen(inlineFormat(seg));
|
|
424
|
+
if (len > natural[i])
|
|
425
|
+
natural[i] = len;
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
// Available inner width: terminal width minus the 2-char margin
|
|
430
|
+
// minus the (cols+1) vertical separators minus (cols*2) cell
|
|
431
|
+
// padding (one space each side).
|
|
432
|
+
const margin = 2;
|
|
433
|
+
const cellPad = 2; // ' x ' adds 2
|
|
434
|
+
const sepCount = cols + 1;
|
|
435
|
+
const available = Math.max(cols * 3, frameWidth() - sepCount - cols * cellPad);
|
|
436
|
+
// Shrink the widest columns iteratively until the sum fits.
|
|
437
|
+
const widths = natural.slice();
|
|
438
|
+
// Clamp tiny minimum so each column can hold ~one short word.
|
|
439
|
+
const MIN = 4;
|
|
440
|
+
while (widths.reduce((a, b) => a + b, 0) > available) {
|
|
441
|
+
let maxIdx = 0;
|
|
442
|
+
for (let i = 1; i < cols; i++)
|
|
443
|
+
if (widths[i] > widths[maxIdx])
|
|
444
|
+
maxIdx = i;
|
|
445
|
+
if (widths[maxIdx] <= MIN)
|
|
446
|
+
break;
|
|
447
|
+
widths[maxIdx] = widths[maxIdx] - 1;
|
|
448
|
+
}
|
|
449
|
+
// Final safety: if even MIN-per-col overflows, accept overflow
|
|
450
|
+
// gracefully rather than infinite-loop above (loop exits via `break`).
|
|
451
|
+
void margin;
|
|
452
|
+
const border = (l, m, r) => {
|
|
453
|
+
const segs = widths.map((wd) => '─'.repeat(wd + 2));
|
|
454
|
+
return ` ${C.SNOW4}${l}${segs.join(m)}${r}${C.RESET}`;
|
|
455
|
+
};
|
|
456
|
+
// Render one logical table row, possibly across multiple
|
|
457
|
+
// visual lines if any cell needs wrapping. The result is an
|
|
458
|
+
// array of visual lines.
|
|
459
|
+
const renderLogicalRow = (segCells, bold = false) => {
|
|
460
|
+
// Wrap each cell to its column width, joining segments with
|
|
461
|
+
// forced line breaks first.
|
|
462
|
+
const wrappedCells = [];
|
|
463
|
+
let height = 1;
|
|
464
|
+
for (let i = 0; i < cols; i++) {
|
|
465
|
+
const segments = segCells[i] ?? [''];
|
|
466
|
+
const lines = [];
|
|
467
|
+
for (const seg of segments) {
|
|
468
|
+
for (const wrapped of wrapToWidth(seg, widths[i])) {
|
|
469
|
+
lines.push(wrapped);
|
|
470
|
+
}
|
|
471
|
+
}
|
|
472
|
+
if (lines.length === 0)
|
|
473
|
+
lines.push('');
|
|
474
|
+
wrappedCells.push(lines);
|
|
475
|
+
if (lines.length > height)
|
|
476
|
+
height = lines.length;
|
|
477
|
+
}
|
|
478
|
+
const visualLines = [];
|
|
479
|
+
for (let row = 0; row < height; row++) {
|
|
480
|
+
const parts = [];
|
|
481
|
+
for (let i = 0; i < cols; i++) {
|
|
482
|
+
const raw = wrappedCells[i][row] ?? '';
|
|
483
|
+
const formatted = bold
|
|
484
|
+
? `${C.BOLD}${C.SNOW}${raw}${C.RESET}`
|
|
485
|
+
: inlineFormat(raw);
|
|
486
|
+
const pad = Math.max(0, widths[i] - visLen(formatted));
|
|
487
|
+
parts.push(` ${formatted}${' '.repeat(pad)} `);
|
|
488
|
+
}
|
|
489
|
+
visualLines.push(` ${C.SNOW4}│${C.RESET}${parts.join(`${C.SNOW4}│${C.RESET}`)}${C.SNOW4}│${C.RESET}`);
|
|
490
|
+
}
|
|
491
|
+
return visualLines;
|
|
492
|
+
};
|
|
493
|
+
safeWriteLine(border('┌', '┬', '┐'));
|
|
494
|
+
for (const line of renderLogicalRow(segHeader, true))
|
|
495
|
+
safeWriteLine(line);
|
|
496
|
+
safeWriteLine(border('├', '┼', '┤'));
|
|
497
|
+
for (let r = 0; r < segBody.length; r++) {
|
|
498
|
+
for (const line of renderLogicalRow(segBody[r]))
|
|
499
|
+
safeWriteLine(line);
|
|
500
|
+
// Light row separator for multi-line bodies so rows stay
|
|
501
|
+
// visually distinct. Skip after the last body row — the
|
|
502
|
+
// closing border handles that.
|
|
503
|
+
if (segBody.length > 1 && r < segBody.length - 1) {
|
|
504
|
+
safeWriteLine(border('├', '┼', '┤'));
|
|
505
|
+
}
|
|
506
|
+
}
|
|
507
|
+
safeWriteLine(border('└', '┴', '┘'));
|
|
508
|
+
}
|
|
509
|
+
}
|
|
510
|
+
/* ──────────────────────── one-shot helper ──────────────────────── */
|
|
511
|
+
/**
|
|
512
|
+
* Render a complete markdown string (non-streaming path). Used by
|
|
513
|
+
* the post-tool response print site in single-agent.ts.
|
|
514
|
+
*/
|
|
515
|
+
export function renderMarkdown(text) {
|
|
516
|
+
const r = new MarkdownStreamRenderer();
|
|
517
|
+
r.write(text);
|
|
518
|
+
if (!text.endsWith('\n'))
|
|
519
|
+
r.write('\n');
|
|
520
|
+
r.flush();
|
|
521
|
+
}
|
|
522
|
+
/* ──────────────────────── exports for tests ──────────────────────── */
|
|
523
|
+
export const __internal = { inlineFormat, highlightCodeLine, langKey, padToVisual };
|
|
524
|
+
//# sourceMappingURL=markdown-stream.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown-stream.js","sourceRoot":"","sources":["../../src/ui/markdown-stream.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* plan-renderer.ts — Renders an agent execution plan as the
|
|
3
|
+
* numbered step list the user sees during PLAN mode (and as
|
|
4
|
+
* the first phase of BUILD mode if the planner produced a
|
|
5
|
+
* plan).
|
|
6
|
+
*
|
|
7
|
+
* Steps advance through four states: `pending`, `active`,
|
|
8
|
+
* `done`, `failed`. The renderer draws a top rule, the steps,
|
|
9
|
+
* a bottom rule, and an approval prompt.
|
|
10
|
+
*/
|
|
11
|
+
export type PlanStepState = 'pending' | 'active' | 'done' | 'failed';
|
|
12
|
+
export interface PlanStep {
|
|
13
|
+
/** Display text for the step, e.g. `Analyze src/auth/provider.ts with ReadFile`. */
|
|
14
|
+
text: string;
|
|
15
|
+
state: PlanStepState;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Render the full plan block: title, steps, bottom rule, and
|
|
19
|
+
* approval prompt. The prompt's `[Y/n]` portion is lava so the
|
|
20
|
+
* user knows where to type.
|
|
21
|
+
*/
|
|
22
|
+
export declare function renderPlan(steps: ReadonlyArray<PlanStep>): void;
|
|
23
|
+
/**
|
|
24
|
+
* Re-render a single step in-place. Useful when an agent's
|
|
25
|
+
* step state changes (e.g. just transitioned from `active` to
|
|
26
|
+
* `done`) and the rest of the plan is still on screen. Returns
|
|
27
|
+
* the ANSI sequence to write; the caller decides whether to
|
|
28
|
+
* print it on the current line or after a clear.
|
|
29
|
+
*/
|
|
30
|
+
export declare function renderStepUpdate(step: PlanStep, index: number): string;
|
|
31
|
+
/**
|
|
32
|
+
* The approval prompt line, in case the agent wants to ask
|
|
33
|
+
* for plan confirmation outside the `renderPlan` flow.
|
|
34
|
+
*/
|
|
35
|
+
export declare function renderApprovalPrompt(): void;
|
|
36
|
+
//# sourceMappingURL=plan-renderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan-renderer.d.ts","sourceRoot":"","sources":["../../src/ui/plan-renderer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAC;AAErE,MAAM,WAAW,QAAQ;IACvB,oFAAoF;IACpF,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,aAAa,CAAC;CACtB;AA6BD;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,aAAa,CAAC,QAAQ,CAAC,GAAG,IAAI,CAkB/D;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAKtE;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAE3C"}
|