cmdr-agent 2.4.0 → 2.5.1

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.
Files changed (109) hide show
  1. package/dist/bin/cmdr.js +117 -27
  2. package/dist/bin/cmdr.js.map +1 -1
  3. package/dist/package.json +9 -4
  4. package/dist/src/cli/ink/App.d.ts +2 -2
  5. package/dist/src/cli/ink/App.d.ts.map +1 -1
  6. package/dist/src/cli/ink/App.js +118 -65
  7. package/dist/src/cli/ink/App.js.map +1 -1
  8. package/dist/src/cli/ink/PromptInput.d.ts +17 -0
  9. package/dist/src/cli/ink/PromptInput.d.ts.map +1 -0
  10. package/dist/src/cli/ink/PromptInput.js +202 -0
  11. package/dist/src/cli/ink/PromptInput.js.map +1 -0
  12. package/dist/src/cli/ink/StatusBar.d.ts +1 -1
  13. package/dist/src/cli/ink/StatusBar.d.ts.map +1 -1
  14. package/dist/src/cli/ink/StatusBar.js +116 -21
  15. package/dist/src/cli/ink/StatusBar.js.map +1 -1
  16. package/dist/src/cli/ink/input-buffer.d.ts +34 -0
  17. package/dist/src/cli/ink/input-buffer.d.ts.map +1 -0
  18. package/dist/src/cli/ink/input-buffer.js +152 -0
  19. package/dist/src/cli/ink/input-buffer.js.map +1 -0
  20. package/dist/src/cli/progress.d.ts +59 -0
  21. package/dist/src/cli/progress.d.ts.map +1 -0
  22. package/dist/src/cli/progress.js +172 -0
  23. package/dist/src/cli/progress.js.map +1 -0
  24. package/dist/src/cli/renderer.d.ts +14 -3
  25. package/dist/src/cli/renderer.d.ts.map +1 -1
  26. package/dist/src/cli/renderer.js +93 -32
  27. package/dist/src/cli/renderer.js.map +1 -1
  28. package/dist/src/cli/repl.d.ts.map +1 -1
  29. package/dist/src/cli/repl.js +46 -28
  30. package/dist/src/cli/repl.js.map +1 -1
  31. package/dist/src/cli/spinner.d.ts +4 -1
  32. package/dist/src/cli/spinner.d.ts.map +1 -1
  33. package/dist/src/cli/spinner.js +34 -1
  34. package/dist/src/cli/spinner.js.map +1 -1
  35. package/dist/src/cli/theme.d.ts +14 -12
  36. package/dist/src/cli/theme.d.ts.map +1 -1
  37. package/dist/src/cli/theme.js +192 -123
  38. package/dist/src/cli/theme.js.map +1 -1
  39. package/dist/src/cli/themes.d.ts +17 -1
  40. package/dist/src/cli/themes.d.ts.map +1 -1
  41. package/dist/src/cli/themes.js +125 -27
  42. package/dist/src/cli/themes.js.map +1 -1
  43. package/dist/src/core/agent-runner.d.ts +12 -0
  44. package/dist/src/core/agent-runner.d.ts.map +1 -1
  45. package/dist/src/core/agent-runner.js +176 -5
  46. package/dist/src/core/agent-runner.js.map +1 -1
  47. package/dist/src/core/event-bus.d.ts +12 -0
  48. package/dist/src/core/event-bus.d.ts.map +1 -1
  49. package/dist/src/core/event-bus.js.map +1 -1
  50. package/dist/src/core/presets.d.ts.map +1 -1
  51. package/dist/src/core/presets.js +1 -0
  52. package/dist/src/core/presets.js.map +1 -1
  53. package/dist/src/core/types.d.ts +17 -0
  54. package/dist/src/core/types.d.ts.map +1 -1
  55. package/dist/src/core/types.js +8 -1
  56. package/dist/src/core/types.js.map +1 -1
  57. package/dist/src/llm/anthropic.d.ts +1 -0
  58. package/dist/src/llm/anthropic.d.ts.map +1 -1
  59. package/dist/src/llm/anthropic.js +20 -1
  60. package/dist/src/llm/anthropic.js.map +1 -1
  61. package/dist/src/llm/ollama.d.ts +2 -12
  62. package/dist/src/llm/ollama.d.ts.map +1 -1
  63. package/dist/src/llm/ollama.js +46 -250
  64. package/dist/src/llm/ollama.js.map +1 -1
  65. package/dist/src/llm/openai.d.ts +1 -0
  66. package/dist/src/llm/openai.d.ts.map +1 -1
  67. package/dist/src/llm/openai.js +21 -7
  68. package/dist/src/llm/openai.js.map +1 -1
  69. package/dist/src/llm/repair/retry-policy.d.ts +48 -0
  70. package/dist/src/llm/repair/retry-policy.d.ts.map +1 -0
  71. package/dist/src/llm/repair/retry-policy.js +85 -0
  72. package/dist/src/llm/repair/retry-policy.js.map +1 -0
  73. package/dist/src/llm/repair/tool-repair.d.ts +39 -0
  74. package/dist/src/llm/repair/tool-repair.d.ts.map +1 -0
  75. package/dist/src/llm/repair/tool-repair.js +313 -0
  76. package/dist/src/llm/repair/tool-repair.js.map +1 -0
  77. package/dist/src/llm/shared/text-cleanup.d.ts +16 -0
  78. package/dist/src/llm/shared/text-cleanup.d.ts.map +1 -0
  79. package/dist/src/llm/shared/text-cleanup.js +120 -0
  80. package/dist/src/llm/shared/text-cleanup.js.map +1 -0
  81. package/dist/src/llm/shared/tool-parsing.d.ts +70 -0
  82. package/dist/src/llm/shared/tool-parsing.d.ts.map +1 -0
  83. package/dist/src/llm/shared/tool-parsing.js +355 -0
  84. package/dist/src/llm/shared/tool-parsing.js.map +1 -0
  85. package/dist/src/llm/validation/tool-call-schema.d.ts +83 -0
  86. package/dist/src/llm/validation/tool-call-schema.d.ts.map +1 -0
  87. package/dist/src/llm/validation/tool-call-schema.js +145 -0
  88. package/dist/src/llm/validation/tool-call-schema.js.map +1 -0
  89. package/dist/src/tools/built-in/bash.d.ts +5 -1
  90. package/dist/src/tools/built-in/bash.d.ts.map +1 -1
  91. package/dist/src/tools/built-in/bash.js +34 -46
  92. package/dist/src/tools/built-in/bash.js.map +1 -1
  93. package/dist/src/tools/built-in/index.d.ts +2 -1
  94. package/dist/src/tools/built-in/index.d.ts.map +1 -1
  95. package/dist/src/tools/built-in/index.js +3 -1
  96. package/dist/src/tools/built-in/index.js.map +1 -1
  97. package/dist/src/tools/built-in/pdf-report.d.ts +39 -0
  98. package/dist/src/tools/built-in/pdf-report.d.ts.map +1 -0
  99. package/dist/src/tools/built-in/pdf-report.js +326 -0
  100. package/dist/src/tools/built-in/pdf-report.js.map +1 -0
  101. package/dist/src/tools/executor.d.ts +7 -1
  102. package/dist/src/tools/executor.d.ts.map +1 -1
  103. package/dist/src/tools/executor.js +20 -5
  104. package/dist/src/tools/executor.js.map +1 -1
  105. package/dist/src/tools/shell/shell-executor.d.ts +71 -0
  106. package/dist/src/tools/shell/shell-executor.d.ts.map +1 -0
  107. package/dist/src/tools/shell/shell-executor.js +238 -0
  108. package/dist/src/tools/shell/shell-executor.js.map +1 -0
  109. package/package.json +9 -4
@@ -1 +1 @@
1
- {"version":3,"file":"StatusBar.js","sourceRoot":"","sources":["../../../../src/cli/ink/StatusBar.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"StatusBar.js","sourceRoot":"","sources":["../../../../src/cli/ink/StatusBar.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Lightweight multiline text buffer for terminal input.
3
+ *
4
+ * Supports cursor movement, insertion/deletion, and line operations.
5
+ */
6
+ export interface BufferSnapshot {
7
+ lines: string[];
8
+ row: number;
9
+ col: number;
10
+ }
11
+ export declare class InputBuffer {
12
+ private lines;
13
+ private row;
14
+ private col;
15
+ constructor(initialText?: string);
16
+ snapshot(): BufferSnapshot;
17
+ getText(): string;
18
+ isEmpty(): boolean;
19
+ setText(text: string): void;
20
+ clear(): void;
21
+ insert(text: string): void;
22
+ insertNewLine(): void;
23
+ backspace(): void;
24
+ deleteForward(): void;
25
+ moveLeft(): void;
26
+ moveRight(): void;
27
+ moveUp(): void;
28
+ moveDown(): void;
29
+ moveLineStart(): void;
30
+ moveLineEnd(): void;
31
+ deleteToLineStart(): void;
32
+ deleteToLineEnd(): void;
33
+ }
34
+ //# sourceMappingURL=input-buffer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input-buffer.d.ts","sourceRoot":"","sources":["../../../../src/cli/ink/input-buffer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;CACZ;AAUD,qBAAa,WAAW;IACtB,OAAO,CAAC,KAAK,CAAU;IACvB,OAAO,CAAC,GAAG,CAAI;IACf,OAAO,CAAC,GAAG,CAAI;gBAEH,WAAW,SAAK;IAM5B,QAAQ,IAAI,cAAc;IAQ1B,OAAO,IAAI,MAAM;IAIjB,OAAO,IAAI,OAAO;IAIlB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAM3B,KAAK,IAAI,IAAI;IAMb,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAwB1B,aAAa,IAAI,IAAI;IAIrB,SAAS,IAAI,IAAI;IAqBjB,aAAa,IAAI,IAAI;IAiBrB,QAAQ,IAAI,IAAI;IAYhB,SAAS,IAAI,IAAI;IAajB,MAAM,IAAI,IAAI;IAOd,QAAQ,IAAI,IAAI;IAOhB,aAAa,IAAI,IAAI;IAIrB,WAAW,IAAI,IAAI;IAInB,iBAAiB,IAAI,IAAI;IAOzB,eAAe,IAAI,IAAI;CAKxB"}
@@ -0,0 +1,152 @@
1
+ /**
2
+ * Lightweight multiline text buffer for terminal input.
3
+ *
4
+ * Supports cursor movement, insertion/deletion, and line operations.
5
+ */
6
+ function toCodePoints(text) {
7
+ return Array.from(text);
8
+ }
9
+ function clamp(value, min, max) {
10
+ return Math.max(min, Math.min(max, value));
11
+ }
12
+ export class InputBuffer {
13
+ lines;
14
+ row = 0;
15
+ col = 0;
16
+ constructor(initialText = '') {
17
+ this.lines = initialText.length > 0 ? initialText.split('\n') : [''];
18
+ this.row = this.lines.length - 1;
19
+ this.col = toCodePoints(this.lines[this.row]).length;
20
+ }
21
+ snapshot() {
22
+ return {
23
+ lines: [...this.lines],
24
+ row: this.row,
25
+ col: this.col,
26
+ };
27
+ }
28
+ getText() {
29
+ return this.lines.join('\n');
30
+ }
31
+ isEmpty() {
32
+ return this.lines.length === 1 && this.lines[0].length === 0;
33
+ }
34
+ setText(text) {
35
+ this.lines = text.length > 0 ? text.split('\n') : [''];
36
+ this.row = this.lines.length - 1;
37
+ this.col = toCodePoints(this.lines[this.row]).length;
38
+ }
39
+ clear() {
40
+ this.lines = [''];
41
+ this.row = 0;
42
+ this.col = 0;
43
+ }
44
+ insert(text) {
45
+ if (!text)
46
+ return;
47
+ const current = this.lines[this.row] ?? '';
48
+ const cp = toCodePoints(current);
49
+ const before = cp.slice(0, this.col).join('');
50
+ const after = cp.slice(this.col).join('');
51
+ const chunks = text.split('\n');
52
+ if (chunks.length === 1) {
53
+ this.lines[this.row] = before + text + after;
54
+ this.col += toCodePoints(text).length;
55
+ return;
56
+ }
57
+ this.lines[this.row] = before + chunks[0];
58
+ const middle = chunks.slice(1, -1);
59
+ const last = chunks[chunks.length - 1] ?? '';
60
+ this.lines.splice(this.row + 1, 0, ...middle, last + after);
61
+ this.row += chunks.length - 1;
62
+ this.col = toCodePoints(last).length;
63
+ }
64
+ insertNewLine() {
65
+ this.insert('\n');
66
+ }
67
+ backspace() {
68
+ const current = this.lines[this.row] ?? '';
69
+ const cp = toCodePoints(current);
70
+ if (this.col > 0) {
71
+ cp.splice(this.col - 1, 1);
72
+ this.lines[this.row] = cp.join('');
73
+ this.col -= 1;
74
+ return;
75
+ }
76
+ if (this.row === 0)
77
+ return;
78
+ const prev = this.lines[this.row - 1] ?? '';
79
+ const prevLen = toCodePoints(prev).length;
80
+ this.lines[this.row - 1] = prev + current;
81
+ this.lines.splice(this.row, 1);
82
+ this.row -= 1;
83
+ this.col = prevLen;
84
+ }
85
+ deleteForward() {
86
+ const current = this.lines[this.row] ?? '';
87
+ const cp = toCodePoints(current);
88
+ if (this.col < cp.length) {
89
+ cp.splice(this.col, 1);
90
+ this.lines[this.row] = cp.join('');
91
+ return;
92
+ }
93
+ if (this.row >= this.lines.length - 1)
94
+ return;
95
+ const next = this.lines[this.row + 1] ?? '';
96
+ this.lines[this.row] = current + next;
97
+ this.lines.splice(this.row + 1, 1);
98
+ }
99
+ moveLeft() {
100
+ if (this.col > 0) {
101
+ this.col -= 1;
102
+ return;
103
+ }
104
+ if (this.row > 0) {
105
+ this.row -= 1;
106
+ this.col = toCodePoints(this.lines[this.row] ?? '').length;
107
+ }
108
+ }
109
+ moveRight() {
110
+ const len = toCodePoints(this.lines[this.row] ?? '').length;
111
+ if (this.col < len) {
112
+ this.col += 1;
113
+ return;
114
+ }
115
+ if (this.row < this.lines.length - 1) {
116
+ this.row += 1;
117
+ this.col = 0;
118
+ }
119
+ }
120
+ moveUp() {
121
+ if (this.row === 0)
122
+ return;
123
+ this.row -= 1;
124
+ const len = toCodePoints(this.lines[this.row] ?? '').length;
125
+ this.col = clamp(this.col, 0, len);
126
+ }
127
+ moveDown() {
128
+ if (this.row >= this.lines.length - 1)
129
+ return;
130
+ this.row += 1;
131
+ const len = toCodePoints(this.lines[this.row] ?? '').length;
132
+ this.col = clamp(this.col, 0, len);
133
+ }
134
+ moveLineStart() {
135
+ this.col = 0;
136
+ }
137
+ moveLineEnd() {
138
+ this.col = toCodePoints(this.lines[this.row] ?? '').length;
139
+ }
140
+ deleteToLineStart() {
141
+ const current = this.lines[this.row] ?? '';
142
+ const cp = toCodePoints(current);
143
+ this.lines[this.row] = cp.slice(this.col).join('');
144
+ this.col = 0;
145
+ }
146
+ deleteToLineEnd() {
147
+ const current = this.lines[this.row] ?? '';
148
+ const cp = toCodePoints(current);
149
+ this.lines[this.row] = cp.slice(0, this.col).join('');
150
+ }
151
+ }
152
+ //# sourceMappingURL=input-buffer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input-buffer.js","sourceRoot":"","sources":["../../../../src/cli/ink/input-buffer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Progress tracker — structured phase display for agent execution.
3
+ *
4
+ * Tracks lifecycle phases with compact formatted output blocks.
5
+ *
6
+ * Integrates with the spinner for animated state transitions.
7
+ */
8
+ export type AgentPhase = 'idle' | 'thinking' | 'tool_exec' | 'generating' | 'waiting_approval' | 'done' | 'error';
9
+ export interface ToolExecInfo {
10
+ readonly name: string;
11
+ readonly startTime: number;
12
+ endTime?: number;
13
+ result?: 'success' | 'error' | 'denied';
14
+ }
15
+ export interface PhaseState {
16
+ phase: AgentPhase;
17
+ turn: number;
18
+ totalTokens: {
19
+ input: number;
20
+ output: number;
21
+ };
22
+ toolsExecuted: ToolExecInfo[];
23
+ startTime: number;
24
+ thinkingStartTime?: number;
25
+ currentToolName?: string;
26
+ }
27
+ export declare function resetProgress(): void;
28
+ export declare function getPhaseState(): Readonly<PhaseState>;
29
+ export declare function setPhase(phase: AgentPhase): void;
30
+ export declare function setTurn(turn: number): void;
31
+ export declare function addTokens(input: number, output: number): void;
32
+ export declare function startToolExecution(toolName: string): void;
33
+ export declare function endToolExecution(toolName: string, result: 'success' | 'error' | 'denied'): void;
34
+ /**
35
+ * Format a tool execution block with visual borders.
36
+ * Matches Claude Code's structured tool output style.
37
+ */
38
+ export declare function formatToolBlock(toolName: string, input: Record<string, unknown>, result: string, isError: boolean, durationMs: number): string;
39
+ /**
40
+ * Format the "thinking" section header.
41
+ */
42
+ export declare function formatThinkingHeader(): string;
43
+ /**
44
+ * Format the "generating" section header.
45
+ */
46
+ export declare function formatGeneratingHeader(): string;
47
+ /**
48
+ * Format the waiting for approval section header.
49
+ */
50
+ export declare function formatApprovalHeader(): string;
51
+ /**
52
+ * Format a turn separator.
53
+ */
54
+ export declare function formatTurnSeparator(turn: number): string;
55
+ /**
56
+ * Format the session summary shown at the end of a run.
57
+ */
58
+ export declare function formatSessionSummary(): string;
59
+ //# sourceMappingURL=progress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../../../src/cli/progress.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAQH,MAAM,MAAM,UAAU,GAClB,MAAM,GACN,UAAU,GACV,WAAW,GACX,YAAY,GACZ,kBAAkB,GAClB,MAAM,GACN,OAAO,CAAA;AAEX,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAA;CACxC;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,UAAU,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;IAC9C,aAAa,EAAE,YAAY,EAAE,CAAA;IAC7B,SAAS,EAAE,MAAM,CAAA;IACjB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB;AAcD,wBAAgB,aAAa,IAAI,IAAI,CAQpC;AAED,wBAAgB,aAAa,IAAI,QAAQ,CAAC,UAAU,CAAC,CAEpD;AAMD,wBAAgB,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAKhD;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAE1C;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAG7D;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAOzD;AAED,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,SAAS,GAAG,OAAO,GAAG,QAAQ,GACrC,IAAI,CAON;AAiBD;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,MAAM,GACjB,MAAM,CA+BR;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,CAE/C;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAExD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAkB7C"}
@@ -0,0 +1,172 @@
1
+ /**
2
+ * Progress tracker — structured phase display for agent execution.
3
+ *
4
+ * Tracks lifecycle phases with compact formatted output blocks.
5
+ *
6
+ * Integrates with the spinner for animated state transitions.
7
+ */
8
+ import { PURPLE, GREEN, CYAN, DIM, WHITE, RED } from './theme.js';
9
+ // ---------------------------------------------------------------------------
10
+ // Singleton progress tracker
11
+ // ---------------------------------------------------------------------------
12
+ let state = {
13
+ phase: 'idle',
14
+ turn: 0,
15
+ totalTokens: { input: 0, output: 0 },
16
+ toolsExecuted: [],
17
+ startTime: Date.now(),
18
+ };
19
+ export function resetProgress() {
20
+ state = {
21
+ phase: 'idle',
22
+ turn: 0,
23
+ totalTokens: { input: 0, output: 0 },
24
+ toolsExecuted: [],
25
+ startTime: Date.now(),
26
+ };
27
+ }
28
+ export function getPhaseState() {
29
+ return state;
30
+ }
31
+ // ---------------------------------------------------------------------------
32
+ // Phase transitions
33
+ // ---------------------------------------------------------------------------
34
+ export function setPhase(phase) {
35
+ state.phase = phase;
36
+ if (phase === 'thinking') {
37
+ state.thinkingStartTime = Date.now();
38
+ }
39
+ }
40
+ export function setTurn(turn) {
41
+ state.turn = turn;
42
+ }
43
+ export function addTokens(input, output) {
44
+ state.totalTokens.input += input;
45
+ state.totalTokens.output += output;
46
+ }
47
+ export function startToolExecution(toolName) {
48
+ state.phase = 'tool_exec';
49
+ state.currentToolName = toolName;
50
+ state.toolsExecuted.push({
51
+ name: toolName,
52
+ startTime: Date.now(),
53
+ });
54
+ }
55
+ export function endToolExecution(toolName, result) {
56
+ const tool = [...state.toolsExecuted].reverse().find(t => t.name === toolName && !t.endTime);
57
+ if (tool) {
58
+ tool.endTime = Date.now();
59
+ tool.result = result;
60
+ }
61
+ state.currentToolName = undefined;
62
+ }
63
+ // ---------------------------------------------------------------------------
64
+ // Formatting — structured output blocks
65
+ // ---------------------------------------------------------------------------
66
+ const BOX_CHARS = {
67
+ topLeft: '┌',
68
+ topRight: '┐',
69
+ bottomLeft: '└',
70
+ bottomRight: '┘',
71
+ horizontal: '─',
72
+ vertical: '│',
73
+ teeLeft: '├',
74
+ teeRight: '┤',
75
+ };
76
+ /**
77
+ * Format a tool execution block with visual borders.
78
+ * Matches Claude Code's structured tool output style.
79
+ */
80
+ export function formatToolBlock(toolName, input, result, isError, durationMs) {
81
+ const width = Math.min(process.stdout.columns || 80, 80);
82
+ const innerWidth = width - 4;
83
+ const headerLine = `${BOX_CHARS.topLeft}${BOX_CHARS.horizontal.repeat(2)} ${CYAN(toolName)} ${DIM(`(${durationMs}ms)`)} ${BOX_CHARS.horizontal.repeat(Math.max(0, innerWidth - toolName.length - String(durationMs).length - 8))}${BOX_CHARS.topRight}`;
84
+ const lines = [headerLine];
85
+ // Input summary (compact)
86
+ const inputStr = formatInputCompact(input);
87
+ if (inputStr) {
88
+ lines.push(`${BOX_CHARS.vertical} ${DIM('input:')} ${WHITE(truncateLine(inputStr, innerWidth - 8))} ${' '.repeat(Math.max(0, innerWidth - inputStr.length - 8))}${BOX_CHARS.vertical}`);
89
+ }
90
+ // Separator
91
+ lines.push(`${BOX_CHARS.teeLeft}${BOX_CHARS.horizontal.repeat(width - 2)}${BOX_CHARS.teeRight}`);
92
+ // Result (truncated to a few lines)
93
+ const resultLines = result.split('\n').slice(0, 5);
94
+ for (const line of resultLines) {
95
+ const color = isError ? RED : GREEN;
96
+ const truncated = truncateLine(line, innerWidth - 2);
97
+ lines.push(`${BOX_CHARS.vertical} ${color(truncated)}${' '.repeat(Math.max(0, innerWidth - truncated.length))}${BOX_CHARS.vertical}`);
98
+ }
99
+ if (result.split('\n').length > 5) {
100
+ lines.push(`${BOX_CHARS.vertical} ${DIM(`... ${result.split('\n').length - 5} more lines`)}${' '.repeat(Math.max(0, innerWidth - 20))}${BOX_CHARS.vertical}`);
101
+ }
102
+ // Bottom border
103
+ lines.push(`${BOX_CHARS.bottomLeft}${BOX_CHARS.horizontal.repeat(width - 2)}${BOX_CHARS.bottomRight}`);
104
+ return lines.join('\n');
105
+ }
106
+ /**
107
+ * Format the "thinking" section header.
108
+ */
109
+ export function formatThinkingHeader() {
110
+ return `\n${PURPLE('◆')} ${PURPLE.bold('ANALYZING')} ${DIM('─'.repeat(58))}\n`;
111
+ }
112
+ /**
113
+ * Format the "generating" section header.
114
+ */
115
+ export function formatGeneratingHeader() {
116
+ return `\n${GREEN('◆')} ${GREEN.bold('RESPONDING')} ${DIM('─'.repeat(56))}\n`;
117
+ }
118
+ /**
119
+ * Format the waiting for approval section header.
120
+ */
121
+ export function formatApprovalHeader() {
122
+ return `\n${CYAN('◆')} ${CYAN.bold('WAITING FOR APPROVAL')} ${DIM('─'.repeat(45))}\n`;
123
+ }
124
+ /**
125
+ * Format a turn separator.
126
+ */
127
+ export function formatTurnSeparator(turn) {
128
+ return `\n${DIM('─'.repeat(20))} ${PURPLE(`Turn ${turn}`)} ${DIM('─'.repeat(20))}\n`;
129
+ }
130
+ /**
131
+ * Format the session summary shown at the end of a run.
132
+ */
133
+ export function formatSessionSummary() {
134
+ const elapsed = Math.round((Date.now() - state.startTime) / 1000);
135
+ const toolCount = state.toolsExecuted.length;
136
+ const successTools = state.toolsExecuted.filter(t => t.result === 'success').length;
137
+ const errorTools = state.toolsExecuted.filter(t => t.result === 'error').length;
138
+ const lines = [
139
+ '',
140
+ DIM('═'.repeat(60)),
141
+ `${PURPLE.bold('Session Summary')}`,
142
+ ` ${DIM('Turns:')} ${WHITE(String(state.turn))} ${DIM('Duration:')} ${WHITE(`${elapsed}s`)}`,
143
+ ` ${DIM('Tools:')} ${WHITE(String(toolCount))} total, ${GREEN(String(successTools))} succeeded${errorTools > 0 ? `, ${RED(String(errorTools))} failed` : ''}`,
144
+ ` ${DIM('Tokens:')} ${WHITE(String(state.totalTokens.input))} in / ${WHITE(String(state.totalTokens.output))} out`,
145
+ DIM('═'.repeat(60)),
146
+ '',
147
+ ];
148
+ return lines.join('\n');
149
+ }
150
+ // ---------------------------------------------------------------------------
151
+ // Helpers
152
+ // ---------------------------------------------------------------------------
153
+ function truncateLine(text, maxLen) {
154
+ if (text.length <= maxLen)
155
+ return text;
156
+ return text.slice(0, maxLen - 3) + '...';
157
+ }
158
+ function formatInputCompact(input) {
159
+ const entries = Object.entries(input);
160
+ if (entries.length === 0)
161
+ return '';
162
+ if (entries.length === 1) {
163
+ const [key, value] = entries[0];
164
+ const valStr = typeof value === 'string' ? value : JSON.stringify(value);
165
+ return `${key}=${truncateLine(valStr, 60)}`;
166
+ }
167
+ return entries.map(([k, v]) => {
168
+ const valStr = typeof v === 'string' ? v : JSON.stringify(v);
169
+ return `${k}=${truncateLine(valStr, 30)}`;
170
+ }).join(', ');
171
+ }
172
+ //# sourceMappingURL=progress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress.js","sourceRoot":"","sources":["../../../src/cli/progress.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,YAAY,CAAA;AAgCjE,8EAA8E;AAC9E,6BAA6B;AAC7B,8EAA8E;AAE9E,IAAI,KAAK,GAAe;IACtB,KAAK,EAAE,MAAM;IACb,IAAI,EAAE,CAAC;IACP,WAAW,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;IACpC,aAAa,EAAE,EAAE;IACjB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;CACtB,CAAA;AAED,MAAM,UAAU,aAAa;IAC3B,KAAK,GAAG;QACN,KAAK,EAAE,MAAM;QACb,IAAI,EAAE,CAAC;QACP,WAAW,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;QACpC,aAAa,EAAE,EAAE;QACjB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;KACtB,CAAA;AACH,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,OAAO,KAAK,CAAA;AACd,CAAC;AAED,8EAA8E;AAC9E,oBAAoB;AACpB,8EAA8E;AAE9E,MAAM,UAAU,QAAQ,CAAC,KAAiB;IACxC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAA;IACnB,IAAI,KAAK,KAAK,UAAU,EAAE,CAAC;QACzB,KAAK,CAAC,iBAAiB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IACtC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,IAAY;IAClC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAA;AACnB,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,KAAa,EAAE,MAAc;IACrD,KAAK,CAAC,WAAW,CAAC,KAAK,IAAI,KAAK,CAAA;IAChC,KAAK,CAAC,WAAW,CAAC,MAAM,IAAI,MAAM,CAAA;AACpC,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,QAAgB;IACjD,KAAK,CAAC,KAAK,GAAG,WAAW,CAAA;IACzB,KAAK,CAAC,eAAe,GAAG,QAAQ,CAAA;IAChC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC;QACvB,IAAI,EAAE,QAAQ;QACd,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;KACtB,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,QAAgB,EAChB,MAAsC;IAEtC,MAAM,IAAI,GAAG,CAAC,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA;IAC5F,IAAI,IAAI,EAAE,CAAC;QACT,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QACzB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACtB,CAAC;IACD,KAAK,CAAC,eAAe,GAAG,SAAS,CAAA;AACnC,CAAC;AAED,8EAA8E;AAC9E,wCAAwC;AACxC,8EAA8E;AAE9E,MAAM,SAAS,GAAG;IAChB,OAAO,EAAE,GAAG;IACZ,QAAQ,EAAE,GAAG;IACb,UAAU,EAAE,GAAG;IACf,WAAW,EAAE,GAAG;IAChB,UAAU,EAAE,GAAG;IACf,QAAQ,EAAE,GAAG;IACb,OAAO,EAAE,GAAG;IACZ,QAAQ,EAAE,GAAG;CACd,CAAA;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAC7B,QAAgB,EAChB,KAA8B,EAC9B,MAAc,EACd,OAAgB,EAChB,UAAkB;IAElB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,EAAE,EAAE,CAAC,CAAA;IACxD,MAAM,UAAU,GAAG,KAAK,GAAG,CAAC,CAAA;IAC5B,MAAM,UAAU,GAAG,GAAG,SAAS,CAAC,OAAO,GAAG,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,IAAI,UAAU,KAAK,CAAC,IAAI,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,QAAQ,EAAE,CAAA;IAEvP,MAAM,KAAK,GAAa,CAAC,UAAU,CAAC,CAAA;IAEpC,0BAA0B;IAC1B,MAAM,QAAQ,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAA;IAC1C,IAAI,QAAQ,EAAE,CAAC;QACb,KAAK,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,UAAU,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAA;IACzL,CAAC;IAED,YAAY;IACZ,KAAK,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,OAAO,GAAG,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAA;IAEhG,oCAAoC;IACpC,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IAClD,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAA;QACnC,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,CAAC,CAAC,CAAA;QACpD,KAAK,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,QAAQ,IAAI,KAAK,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAA;IACvI,CAAC;IACD,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClC,KAAK,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,QAAQ,IAAI,GAAG,CAAC,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,aAAa,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAA;IAC/J,CAAC;IAED,gBAAgB;IAChB,KAAK,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,UAAU,GAAG,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC,CAAA;IAEtG,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB;IAClC,OAAO,KAAK,MAAM,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAA;AAChF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB;IACpC,OAAO,KAAK,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAA;AAC/E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB;IAClC,OAAO,KAAK,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAA;AACvF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,OAAO,KAAK,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAA;AACtF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB;IAClC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,CAAA;IACjE,MAAM,SAAS,GAAG,KAAK,CAAC,aAAa,CAAC,MAAM,CAAA;IAC5C,MAAM,YAAY,GAAG,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,MAAM,CAAA;IACnF,MAAM,UAAU,GAAG,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,MAAM,CAAA;IAE/E,MAAM,KAAK,GAAa;QACtB,EAAE;QACF,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACnB,GAAG,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE;QACnC,KAAK,GAAG,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,GAAG,OAAO,GAAG,CAAC,EAAE;QAC9F,KAAK,GAAG,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,WAAW,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,aAAa,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE;QAC9J,KAAK,GAAG,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,SAAS,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,MAAM;QACnH,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACnB,EAAE;KACH,CAAA;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC;AAED,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,SAAS,YAAY,CAAC,IAAY,EAAE,MAAc;IAChD,IAAI,IAAI,CAAC,MAAM,IAAI,MAAM;QAAE,OAAO,IAAI,CAAA;IACtC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,KAAK,CAAA;AAC1C,CAAC;AAED,SAAS,kBAAkB,CAAC,KAA8B;IACxD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IACrC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAA;IACnC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;QAC/B,MAAM,MAAM,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;QACxE,OAAO,GAAG,GAAG,IAAI,YAAY,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAA;IAC7C,CAAC;IACD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE;QAC5B,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;QAC5D,OAAO,GAAG,CAAC,IAAI,YAAY,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAA;IAC3C,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACf,CAAC"}
@@ -1,8 +1,19 @@
1
1
  /**
2
2
  * Markdown renderer for terminal output.
3
3
  *
4
- * Uses marked + marked-terminal for rich terminal rendering with
5
- * cmdr's AMOLED black + green/purple theme.
4
+ * Uses marked + marked-terminal for rich terminal rendering and
5
+ * provides chunk-safe streaming helpers for smooth incremental output.
6
6
  */
7
- export declare function renderMarkdown(text: string): string;
7
+ export interface RenderMarkdownOptions {
8
+ width?: number;
9
+ }
10
+ export declare function renderMarkdown(text: string, opts?: RenderMarkdownOptions): string;
11
+ export declare class StreamingMarkdownRenderer {
12
+ private readonly options;
13
+ private pending;
14
+ constructor(options?: RenderMarkdownOptions);
15
+ push(chunk: string): string | null;
16
+ flush(): string | null;
17
+ reset(): void;
18
+ }
8
19
  //# sourceMappingURL=renderer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../../src/cli/renderer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAwCH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAMnD"}
1
+ {"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../../src/cli/renderer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAuCH,MAAM,WAAW,qBAAqB;IACpC,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAuCD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,qBAA0B,GAAG,MAAM,CAOrF;AAED,qBAAa,yBAAyB;IAGxB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAFpC,OAAO,CAAC,OAAO,CAAK;gBAES,OAAO,GAAE,qBAA0B;IAEhE,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAelC,KAAK,IAAI,MAAM,GAAG,IAAI;IAOtB,KAAK,IAAI,IAAI;CAGd"}
@@ -1,47 +1,108 @@
1
1
  /**
2
2
  * Markdown renderer for terminal output.
3
3
  *
4
- * Uses marked + marked-terminal for rich terminal rendering with
5
- * cmdr's AMOLED black + green/purple theme.
4
+ * Uses marked + marked-terminal for rich terminal rendering and
5
+ * provides chunk-safe streaming helpers for smooth incremental output.
6
6
  */
7
7
  import { Marked } from 'marked';
8
8
  import { markedTerminal } from 'marked-terminal';
9
9
  import chalk from 'chalk';
10
- // AMOLED green/purple palette for marked-terminal
11
- const green = chalk.hex('#00FF41');
12
- const purple = chalk.hex('#BF40FF');
13
- const cyan = chalk.hex('#00FFFF');
14
- const white = chalk.hex('#E0E0E0');
15
- const dim = chalk.hex('#555555');
10
+ import { getActiveTheme } from './themes.js';
11
+ const MARKDOWN_WIDTH_FALLBACK = 96;
16
12
  const marked = new Marked();
17
- marked.use(markedTerminal({
18
- code: chalk.hex('#00FF41'),
19
- codespan: chalk.hex('#00FF41'),
20
- strong: chalk.hex('#FFFFFF').bold,
21
- em: chalk.hex('#BF40FF').italic,
22
- heading: chalk.hex('#BF40FF').bold,
23
- firstHeading: chalk.hex('#BF40FF').underline.bold,
24
- href: chalk.hex('#00FFFF').underline,
25
- link: chalk.hex('#00FFFF'),
26
- listitem: chalk.reset,
27
- blockquote: chalk.hex('#555555').italic,
28
- hr: chalk.hex('#00BB30'),
29
- paragraph: chalk.reset,
30
- table: chalk.reset,
31
- text: chalk.hex('#E0E0E0'),
32
- unescape: true,
33
- emoji: false,
34
- showSectionPrefix: false,
35
- reflowText: false,
36
- width: 80,
37
- tab: 2,
38
- }));
39
- export function renderMarkdown(text) {
13
+ function configureMarked(width) {
14
+ const theme = getActiveTheme();
15
+ marked.use(markedTerminal({
16
+ code: chalk.hex(theme.syntax.string),
17
+ codespan: chalk.hex(theme.syntax.function),
18
+ strong: chalk.hex(theme.text.primary).bold,
19
+ em: chalk.hex(theme.text.accent).italic,
20
+ heading: chalk.hex(theme.message.assistant).bold,
21
+ firstHeading: chalk.hex(theme.message.assistant).underline.bold,
22
+ href: chalk.hex(theme.message.system).underline,
23
+ link: chalk.hex(theme.message.system),
24
+ listitem: chalk.reset,
25
+ blockquote: chalk.hex(theme.text.secondary).italic,
26
+ hr: chalk.hex(theme.ui.separator),
27
+ paragraph: chalk.reset,
28
+ table: chalk.reset,
29
+ text: chalk.hex(theme.text.primary),
30
+ unescape: true,
31
+ emoji: false,
32
+ showSectionPrefix: false,
33
+ reflowText: false,
34
+ width,
35
+ tab: 2,
36
+ }));
37
+ }
38
+ function normalizeWidth(width) {
39
+ if (typeof width === 'number' && width > 20)
40
+ return width;
41
+ const terminalWidth = process.stdout.columns ?? MARKDOWN_WIDTH_FALLBACK;
42
+ return Math.max(40, Math.min(terminalWidth - 4, MARKDOWN_WIDTH_FALLBACK));
43
+ }
44
+ function stripInternalBlocks(text) {
45
+ let cleaned = text;
46
+ cleaned = cleaned.replace(/```tool_call[\s\S]*?```/g, '');
47
+ cleaned = cleaned.replace(/```thought[\s\S]*?```/g, '');
48
+ return cleaned;
49
+ }
50
+ function findSafeSplitIndex(buffer) {
51
+ if (!buffer)
52
+ return -1;
53
+ const candidates = [
54
+ buffer.lastIndexOf('\n\n'),
55
+ buffer.lastIndexOf('```\n'),
56
+ buffer.lastIndexOf('\n- '),
57
+ buffer.lastIndexOf('\n* '),
58
+ buffer.lastIndexOf('\n> '),
59
+ ];
60
+ const punctuationSplit = Math.max(buffer.lastIndexOf('.\n'), buffer.lastIndexOf('!\n'), buffer.lastIndexOf('?\n'));
61
+ if (punctuationSplit > 0)
62
+ candidates.push(punctuationSplit + 2);
63
+ const best = Math.max(...candidates);
64
+ if (best <= 0)
65
+ return -1;
66
+ return best;
67
+ }
68
+ export function renderMarkdown(text, opts = {}) {
40
69
  try {
41
- return marked.parse(text);
70
+ configureMarked(normalizeWidth(opts.width));
71
+ return marked.parse(stripInternalBlocks(text));
42
72
  }
43
73
  catch {
44
74
  return text;
45
75
  }
46
76
  }
77
+ export class StreamingMarkdownRenderer {
78
+ options;
79
+ pending = '';
80
+ constructor(options = {}) {
81
+ this.options = options;
82
+ }
83
+ push(chunk) {
84
+ if (!chunk)
85
+ return null;
86
+ this.pending += chunk;
87
+ const splitAt = findSafeSplitIndex(this.pending);
88
+ if (splitAt <= 0)
89
+ return null;
90
+ const renderable = this.pending.slice(0, splitAt);
91
+ this.pending = this.pending.slice(splitAt);
92
+ const cleaned = stripInternalBlocks(renderable).trim();
93
+ if (!cleaned)
94
+ return null;
95
+ return renderMarkdown(cleaned, this.options);
96
+ }
97
+ flush() {
98
+ const remaining = stripInternalBlocks(this.pending).trim();
99
+ this.pending = '';
100
+ if (!remaining)
101
+ return null;
102
+ return renderMarkdown(remaining, this.options);
103
+ }
104
+ reset() {
105
+ this.pending = '';
106
+ }
107
+ }
47
108
  //# sourceMappingURL=renderer.js.map