erosolar-cli 2.1.9 → 2.1.11

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.
@@ -20,6 +20,7 @@ export interface PromptCallbacks {
20
20
  onToggleAutoContinue?: () => void;
21
21
  onToggleThinking?: () => void;
22
22
  onClearContext?: () => void;
23
+ onToggleCriticalApproval?: () => void;
23
24
  }
24
25
  export declare class PromptController {
25
26
  private readonly renderer;
@@ -41,6 +42,8 @@ export declare class PromptController {
41
42
  autoContinueHotkey?: string;
42
43
  thinkingModeLabel?: string | null;
43
44
  thinkingHotkey?: string;
45
+ criticalApprovalMode?: 'auto' | 'approval';
46
+ criticalApprovalHotkey?: string;
44
47
  }): void;
45
48
  setStatusMessage(message: string | null): void;
46
49
  setOverrideStatus(message: string | null): void;
@@ -65,6 +68,15 @@ export declare class PromptController {
65
68
  model?: string | null;
66
69
  provider?: string | null;
67
70
  }): void;
71
+ setChromeMeta(meta: {
72
+ profile?: string;
73
+ workspace?: string;
74
+ writes?: string;
75
+ sessionLabel?: string;
76
+ thinkingLabel?: string;
77
+ autosave?: boolean;
78
+ version?: string;
79
+ }): void;
68
80
  setAvailableCommands(commands: CommandSuggestion[]): void;
69
81
  setEditMode(mode: EditGuardMode): void;
70
82
  applyEditMode(mode: EditGuardMode): void;
@@ -1 +1 @@
1
- {"version":3,"file":"PromptController.d.ts","sourceRoot":"","sources":["../../src/ui/PromptController.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PromptController.d.ts","sourceRoot":"","sources":["../../src/ui/PromptController.ts"],"names":[],"mappings":"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"}
@@ -19,6 +19,7 @@ export class PromptController {
19
19
  this.renderer.on('change', (payload) => {
20
20
  this.callbacks.onChange?.(payload);
21
21
  });
22
+ this.renderer.on('toggle-critical-approval', () => this.callbacks.onToggleCriticalApproval?.());
22
23
  }
23
24
  getRenderer() {
24
25
  return this.renderer;
@@ -49,6 +50,8 @@ export class PromptController {
49
50
  autoContinueHotkey: options.autoContinueHotkey,
50
51
  thinkingModeLabel: options.thinkingModeLabel,
51
52
  thinkingHotkey: options.thinkingHotkey,
53
+ criticalApprovalMode: options.criticalApprovalMode,
54
+ criticalApprovalHotkey: options.criticalApprovalHotkey,
52
55
  });
53
56
  }
54
57
  setStatusMessage(message) {
@@ -90,6 +93,9 @@ export class PromptController {
90
93
  provider: options.provider || undefined,
91
94
  });
92
95
  }
96
+ setChromeMeta(meta) {
97
+ this.renderer.updateStatusMeta(meta);
98
+ }
93
99
  setAvailableCommands(commands) {
94
100
  this.renderer.setAvailableCommands(commands);
95
101
  }
@@ -1 +1 @@
1
- {"version":3,"file":"PromptController.js","sourceRoot":"","sources":["../../src/ui/PromptController.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,iBAAiB,EAA0B,MAAM,wBAAwB,CAAC;AAiBnF,MAAM,OAAO,gBAAgB;IACV,QAAQ,CAAoB;IAC5B,SAAS,CAAkB;IACpC,QAAQ,GAAkB,eAAe,CAAC;IAC1C,UAAU,GAAkB,IAAI,CAAC;IACjC,cAAc,GAAkB,IAAI,CAAC;IACrC,eAAe,GAAkB,IAAI,CAAC;IAE9C,YACE,QAA2B,EAC3B,SAA6B,EAC7B,SAA0B,EAC1B,gBAAoC;QAEpC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,QAAQ,GAAG,gBAAgB,IAAI,IAAI,iBAAiB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAE/E,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5E,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1E,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;QAClE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAyC,EAAE,EAAE;YACvE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;IAC7B,CAAC;IAED,IAAI;QACF,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;IAC1B,CAAC;IAED,YAAY,CAAC,SAAkB;QAC7B,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAC1D,CAAC;IAED,eAAe,CAAC,UAAyB;QACvC,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;YACxB,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,cAAc,EAAE,UAAU,EAAE,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;IAED,cAAc,CAAC,QAOd;QACC,MAAM,OAAO,GAAG,QAAQ,IAAI;YAC1B,mBAAmB,EAAE,KAAK;YAC1B,mBAAmB,EAAE,KAAK;SAC3B,CAAC;QACF,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC;YAC9B,mBAAmB,EAAE,OAAO,CAAC,mBAAmB;YAChD,mBAAmB,EAAE,OAAO,CAAC,mBAAmB;YAChD,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;YAC9C,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;YAC9C,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;YAC5C,cAAc,EAAE,OAAO,CAAC,cAAc;SACvC,CAAC,CAAC;IACL,CAAC;IAED,gBAAgB,CAAC,OAAsB;QACrC,IAAI,CAAC,eAAe,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED,iBAAiB,CAAC,OAAsB;QACtC,IAAI,CAAC,eAAe,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;IAC9C,CAAC;IAED,iBAAiB,CAAC,KAAoB;QACpC,IAAI,CAAC,eAAe,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,MAAqF;QACjG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;IAED,aAAa,CAAC,IAMb;QACC,MAAM,UAAU,GAAsD,EAAE,CAAC;QAEzE,IAAI,OAAO,IAAI,CAAC,cAAc,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,IAAI,CAAC,cAAc,IAAI,CAAC,EAAE,CAAC;YAChH,UAAU,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACnE,CAAC;QAED,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,EAAE,CAAC;YACvD,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAChG,UAAU,CAAC,cAAc,GAAG,OAAO,CAAC;QACtC,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;IAC7C,CAAC;IAED,cAAc;QACZ,IAAI,CAAC,eAAe,CAAC;YACnB,IAAI,EAAE,IAAI;YACV,QAAQ,EAAE,IAAI;YACd,SAAS,EAAE,IAAI;SAChB,CAAC,CAAC;IACL,CAAC;IAED,eAAe,CAAC,OAA4D;QAC1E,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC;YAC7B,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,SAAS;YACjC,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,SAAS;SACxC,CAAC,CAAC;IACL,CAAC;IAED,oBAAoB,CAAC,QAA6B;QAChD,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAC/C,CAAC;IAED,WAAW,CAAC,IAAmB;QAC7B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,SAAS,CAAC,gBAAgB,EAAE,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;IAED,aAAa,CAAC,IAAmB;QAC/B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;IACnC,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;IACnC,CAAC;IAED,SAAS,CAAC,IAAY,EAAE,SAAkB;QACxC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC3C,CAAC;IAED,KAAK;QACH,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;IAC9B,CAAC;IAED,MAAM;QACJ,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;IACzB,CAAC;IAED,WAAW;QACT,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;IACzB,CAAC;IAED,YAAY;QACV,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;IACzB,CAAC;IAED,OAAO;QACL,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;IAC1B,CAAC;IAED;;;;OAIG;IACK,eAAe,CAAC,MAAqF;QAC3G,IAAI,MAAM,IAAI,MAAM,EAAE,CAAC;YACrB,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC;QAChD,CAAC;QACD,IAAI,UAAU,IAAI,MAAM,EAAE,CAAC;YACzB,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC;QACxD,CAAC;QACD,IAAI,WAAW,IAAI,MAAM,EAAE,CAAC;YAC1B,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC;QAC1D,CAAC;QACD,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAEO,aAAa;QACnB,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC;YAC/B,IAAI,EAAE,IAAI,CAAC,UAAU;YACrB,QAAQ,EAAE,IAAI,CAAC,cAAc;YAC7B,SAAS,EAAE,IAAI,CAAC,eAAe;SAChC,CAAC,CAAC;IACL,CAAC;IAEO,aAAa,CAAC,YAAoB;QACxC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,EAAE,CAAC,CAAC;QAC9C,MAAM,OAAO,GAAG,YAAY,GAAG,EAAE,CAAC;QAClC,MAAM,aAAa,GAAG,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC;QAClE,OAAO,GAAG,OAAO,IAAI,aAAa,EAAE,CAAC;IACvC,CAAC;CACF"}
1
+ {"version":3,"file":"PromptController.js","sourceRoot":"","sources":["../../src/ui/PromptController.ts"],"names":[],"mappings":"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"}
@@ -35,6 +35,9 @@ export declare class ShellUIAdapter {
35
35
  private toolProgressSnapshots;
36
36
  private exploreProgressState;
37
37
  private toolUsageCounts;
38
+ private activeToolStatus;
39
+ private activeToolHeartbeatId;
40
+ private statusSpinnerIndex;
38
41
  constructor(writeStream: typeof process.stdout, display: Display, config?: Partial<ShellUIAdapterConfig>, updateCoordinator?: UIUpdateCoordinator);
39
42
  /**
40
43
  * Setup display integration
@@ -182,6 +185,14 @@ export declare class ShellUIAdapter {
182
185
  * Set tool status callback - called when tools start/complete to update dynamic status
183
186
  */
184
187
  setToolStatusCallback(callback: (status: string | null) => void): void;
188
+ /**
189
+ * Keep a live status line ticking while an SSE tool or long-running tool is active.
190
+ * Uses a heartbeat to animate the spinner and update elapsed time without spamming writes.
191
+ */
192
+ private startToolStatusHeartbeat;
193
+ private stopToolStatusHeartbeat;
194
+ private buildRunningStatusLine;
195
+ private formatElapsedMs;
185
196
  /**
186
197
  * Parse file changes from Edit/Write/NotebookEdit tool output
187
198
  */
@@ -192,6 +203,15 @@ export declare class ShellUIAdapter {
192
203
  * Routes through display module to work with scroll regions
193
204
  */
194
205
  private displayToolResultSummary;
206
+ /**
207
+ * Render a rich block for non-streamed SSE-style tool results so they feel like a "completed event".
208
+ * Returns true if a block was rendered and downstream compact formatting should be skipped.
209
+ */
210
+ private maybeRenderRichToolResult;
211
+ private shouldRenderRichToolBlock;
212
+ private renderRichToolBlock;
213
+ private visibleLength;
214
+ private stripAnsi;
195
215
  /**
196
216
  * Format tool result summary in Erosolar-CLI style
197
217
  * Returns compact summary like "Found 4 files" or "Read 50 lines"
@@ -1 +1 @@
1
- {"version":3,"file":"ShellUIAdapter.d.ts","sourceRoot":"","sources":["../../src/ui/ShellUIAdapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ShellUIAdapter.d.ts","sourceRoot":"","sources":["../../src/ui/ShellUIAdapter.ts"],"names":[],"mappings":"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"}
@@ -13,6 +13,7 @@ import { InterruptPriority } from './interrupts/InterruptManager.js';
13
13
  import { getTerminalColumns } from './layout.js';
14
14
  import { theme, icons } from './theme.js';
15
15
  import { UIUpdateCoordinator } from './orchestration/UIUpdateCoordinator.js';
16
+ import { formatRichContent } from './richText.js';
16
17
  export class ShellUIAdapter {
17
18
  uiController;
18
19
  display;
@@ -32,6 +33,9 @@ export class ShellUIAdapter {
32
33
  toolProgressSnapshots = new Map();
33
34
  exploreProgressState = new Map();
34
35
  toolUsageCounts = new Map();
36
+ activeToolStatus = null;
37
+ activeToolHeartbeatId = null;
38
+ statusSpinnerIndex = 0;
35
39
  constructor(writeStream, display, config = {}, updateCoordinator) {
36
40
  this.display = display;
37
41
  this.config = {
@@ -105,7 +109,13 @@ export class ShellUIAdapter {
105
109
  // Update status bar to show active tool
106
110
  if (this._toolStatusCallback) {
107
111
  const actionDesc = this.getToolActionDescription(call);
108
- this._toolStatusCallback(actionDesc);
112
+ this.activeToolStatus = {
113
+ id: call.id,
114
+ description: actionDesc,
115
+ startedAt: Date.now(),
116
+ };
117
+ this._toolStatusCallback(this.buildRunningStatusLine(actionDesc, this.activeToolStatus.startedAt));
118
+ this.startToolStatusHeartbeat(call.id);
109
119
  }
110
120
  this.uiController.onToolStart(call);
111
121
  },
@@ -130,7 +140,17 @@ export class ShellUIAdapter {
130
140
  if (this._toolStatusCallback) {
131
141
  const description = this.getToolActionDescription(call, progress);
132
142
  if (description) {
133
- this._toolStatusCallback(description);
143
+ if (this.activeToolStatus && this.activeToolStatus.id === call.id) {
144
+ this.activeToolStatus.description = description;
145
+ }
146
+ else {
147
+ this.activeToolStatus = {
148
+ id: call.id,
149
+ description: description,
150
+ startedAt: Date.now(),
151
+ };
152
+ }
153
+ this._toolStatusCallback(this.buildRunningStatusLine(description, this.activeToolStatus.startedAt));
134
154
  }
135
155
  }
136
156
  },
@@ -142,12 +162,15 @@ export class ShellUIAdapter {
142
162
  }
143
163
  },
144
164
  onToolResult: (call, output) => {
165
+ const now = Date.now();
145
166
  // Complete the operation tracking
146
167
  const op = this.pendingOperations.get(call.id);
168
+ let durationMs;
147
169
  if (op) {
148
170
  op.status = 'success';
149
- op.completedAt = Date.now();
171
+ op.completedAt = now;
150
172
  op.summary = this.extractResultSummary(call, output);
173
+ durationMs = op.startedAt ? Math.max(0, now - op.startedAt) : undefined;
151
174
  this.pendingOperations.delete(call.id);
152
175
  this.completedOperations.push(op);
153
176
  // Keep only recent completed operations
@@ -166,20 +189,24 @@ export class ShellUIAdapter {
166
189
  this.fileChangeCallback(fileChange.path, fileChange.type, fileChange.additions, fileChange.removals);
167
190
  }
168
191
  }
192
+ const renderedRich = this.maybeRenderRichToolResult(call, output, true, durationMs);
169
193
  // Use compact display for quick single-result tools and structured edit output
170
- if (call.name === 'Edit' || call.name === 'edit_file') {
171
- this.displayEditResult(call, output, true);
172
- }
173
- else if (this.compactDisplayMode && this.isCompactTool(call.name)) {
174
- this.displayCompactResult(call, output, true);
175
- }
176
- else {
177
- // Erosolar-CLI style: Display tool result with ⎿ prefix
178
- this.displayToolResultSummary(call, output, true);
194
+ if (!renderedRich) {
195
+ if (call.name === 'Edit' || call.name === 'edit_file') {
196
+ this.displayEditResult(call, output, true);
197
+ }
198
+ else if (this.compactDisplayMode && this.isCompactTool(call.name)) {
199
+ this.displayCompactResult(call, output, true);
200
+ }
201
+ else {
202
+ // Erosolar-CLI style: Display tool result with ⎿ prefix
203
+ this.displayToolResultSummary(call, output, true);
204
+ }
179
205
  }
180
206
  // Surface any captured preflight warnings in a structured block
181
207
  this.flushToolWarnings(call.id, call.name);
182
208
  // Clear status bar after showing result
209
+ this.stopToolStatusHeartbeat();
183
210
  if (this._toolStatusCallback) {
184
211
  this._toolStatusCallback(null);
185
212
  }
@@ -188,10 +215,12 @@ export class ShellUIAdapter {
188
215
  onToolError: (call, message) => {
189
216
  // Complete the operation tracking with error
190
217
  const op = this.pendingOperations.get(call.id);
218
+ let durationMs;
191
219
  if (op) {
192
220
  op.status = 'error';
193
221
  op.completedAt = Date.now();
194
222
  op.summary = message;
223
+ durationMs = op.startedAt ? Math.max(0, (op.completedAt ?? Date.now()) - op.startedAt) : undefined;
195
224
  this.pendingOperations.delete(call.id);
196
225
  this.completedOperations.push(op);
197
226
  }
@@ -199,19 +228,23 @@ export class ShellUIAdapter {
199
228
  this.logExploreCompletion(call.id, false);
200
229
  }
201
230
  this.clearToolState(call.id);
231
+ const renderedRich = this.maybeRenderRichToolResult(call, message, false, durationMs);
202
232
  // Use compact display for errors too
203
- if (call.name === 'Edit' || call.name === 'edit_file') {
204
- this.displayEditResult(call, message, false);
205
- }
206
- else if (this.compactDisplayMode && this.isCompactTool(call.name)) {
207
- this.displayCompactResult(call, message, false);
208
- }
209
- else {
210
- // Erosolar-CLI style: Display error with ⎿ prefix (error color)
211
- this.displayToolResultSummary(call, message, false);
233
+ if (!renderedRich) {
234
+ if (call.name === 'Edit' || call.name === 'edit_file') {
235
+ this.displayEditResult(call, message, false);
236
+ }
237
+ else if (this.compactDisplayMode && this.isCompactTool(call.name)) {
238
+ this.displayCompactResult(call, message, false);
239
+ }
240
+ else {
241
+ // Erosolar-CLI style: Display error with ⎿ prefix (error color)
242
+ this.displayToolResultSummary(call, message, false);
243
+ }
212
244
  }
213
245
  this.flushToolWarnings(call.id, call.name);
214
246
  // Clear status bar after showing error
247
+ this.stopToolStatusHeartbeat();
215
248
  if (this._toolStatusCallback) {
216
249
  this._toolStatusCallback(null);
217
250
  }
@@ -233,6 +266,10 @@ export class ShellUIAdapter {
233
266
  // Erosolar-CLI style: Show tool call with (cached) indicator
234
267
  this.displayToolCallStart(call, true);
235
268
  this.flushToolWarnings(call.id, call.name);
269
+ this.stopToolStatusHeartbeat();
270
+ if (this._toolStatusCallback) {
271
+ this._toolStatusCallback(null);
272
+ }
236
273
  this.uiController.onToolStart(call);
237
274
  this.uiController.onToolComplete(call.id, 'cache-hit');
238
275
  },
@@ -950,6 +987,72 @@ export class ShellUIAdapter {
950
987
  */
951
988
  setToolStatusCallback(callback) {
952
989
  this._toolStatusCallback = callback;
990
+ if (callback && this.activeToolStatus) {
991
+ callback(this.buildRunningStatusLine(this.activeToolStatus.description, this.activeToolStatus.startedAt));
992
+ }
993
+ }
994
+ /**
995
+ * Keep a live status line ticking while an SSE tool or long-running tool is active.
996
+ * Uses a heartbeat to animate the spinner and update elapsed time without spamming writes.
997
+ */
998
+ startToolStatusHeartbeat(callId) {
999
+ if (!this._toolStatusCallback || !this.activeToolStatus) {
1000
+ return;
1001
+ }
1002
+ // Stop any previous heartbeat to avoid overlapping timers
1003
+ this.stopToolStatusHeartbeat();
1004
+ const heartbeatId = `tool-status:${callId}`;
1005
+ this.activeToolHeartbeatId = heartbeatId;
1006
+ this.updateCoordinator.startHeartbeat(heartbeatId, {
1007
+ intervalMs: 1000,
1008
+ description: 'live tool status ticker',
1009
+ lane: 'status',
1010
+ priority: 'low',
1011
+ mode: ['processing', 'tooling', 'streaming', 'mcp'],
1012
+ run: () => {
1013
+ if (!this._toolStatusCallback || !this.activeToolStatus) {
1014
+ this.stopToolStatusHeartbeat();
1015
+ return;
1016
+ }
1017
+ const statusLine = this.buildRunningStatusLine(this.activeToolStatus.description, this.activeToolStatus.startedAt);
1018
+ this._toolStatusCallback(statusLine);
1019
+ },
1020
+ });
1021
+ }
1022
+ stopToolStatusHeartbeat() {
1023
+ if (this.activeToolHeartbeatId) {
1024
+ this.updateCoordinator.stopHeartbeat(this.activeToolHeartbeatId);
1025
+ }
1026
+ this.activeToolHeartbeatId = null;
1027
+ this.activeToolStatus = null;
1028
+ this.statusSpinnerIndex = 0;
1029
+ }
1030
+ buildRunningStatusLine(description, startedAt) {
1031
+ const frames = Array.isArray(icons.spinner) ? icons.spinner : [icons.loading];
1032
+ const frame = frames[this.statusSpinnerIndex % frames.length] ?? frames[0] ?? icons.bullet;
1033
+ this.statusSpinnerIndex += 1;
1034
+ const elapsed = this.formatElapsedMs(Date.now() - startedAt);
1035
+ const metaParts = [];
1036
+ if (elapsed) {
1037
+ metaParts.push(`${theme.metrics.elapsedLabel('elapsed')} ${theme.metrics.elapsedValue(elapsed)}`);
1038
+ }
1039
+ if (process.stdout.isTTY) {
1040
+ metaParts.push(theme.ui.muted('esc to interrupt'));
1041
+ }
1042
+ const meta = metaParts.length ? ` (${metaParts.join(theme.ui.muted(' • '))})` : '';
1043
+ return `${theme.info(frame)} ${description}${meta}`;
1044
+ }
1045
+ formatElapsedMs(elapsedMs) {
1046
+ if (typeof elapsedMs !== 'number' || !Number.isFinite(elapsedMs) || elapsedMs < 0) {
1047
+ return null;
1048
+ }
1049
+ const totalSeconds = Math.max(0, Math.round(elapsedMs / 1000));
1050
+ const minutes = Math.floor(totalSeconds / 60);
1051
+ const seconds = totalSeconds % 60;
1052
+ if (minutes > 0) {
1053
+ return `${minutes}m ${seconds.toString().padStart(2, '0')}s`;
1054
+ }
1055
+ return `${seconds}s`;
953
1056
  }
954
1057
  /**
955
1058
  * Parse file changes from Edit/Write/NotebookEdit tool output
@@ -1012,6 +1115,71 @@ export class ShellUIAdapter {
1012
1115
  this.display.stream(` ${prefix} ${summary}\n\n`);
1013
1116
  }
1014
1117
  }
1118
+ /**
1119
+ * Render a rich block for non-streamed SSE-style tool results so they feel like a "completed event".
1120
+ * Returns true if a block was rendered and downstream compact formatting should be skipped.
1121
+ */
1122
+ maybeRenderRichToolResult(call, output, success, durationMs) {
1123
+ if (!this.shouldRenderRichToolBlock(call, output)) {
1124
+ return false;
1125
+ }
1126
+ const block = this.renderRichToolBlock(call, output, success, durationMs);
1127
+ if (!block.trim()) {
1128
+ return false;
1129
+ }
1130
+ this.display.stream(`\n${block}\n\n`);
1131
+ return true;
1132
+ }
1133
+ shouldRenderRichToolBlock(call, output) {
1134
+ const trimmed = output?.trim() ?? '';
1135
+ if (!trimmed)
1136
+ return false;
1137
+ // Skip tools that already have bespoke rendering
1138
+ if (call.name === 'Edit' || call.name === 'edit_file') {
1139
+ return false;
1140
+ }
1141
+ const isMcpTool = call.name.startsWith('mcp__');
1142
+ const isMultiline = trimmed.includes('\n');
1143
+ const isLong = trimmed.length > 160;
1144
+ return isMcpTool || isMultiline || isLong;
1145
+ }
1146
+ renderRichToolBlock(call, output, success, durationMs) {
1147
+ const columns = Math.max(60, Math.min(getTerminalColumns(), 120));
1148
+ const innerWidth = Math.max(40, columns - 4);
1149
+ const statusIcon = success ? theme.success(icons.success) : theme.error(icons.error);
1150
+ const labels = [
1151
+ `${statusIcon} ${theme.tool(call.name)}`,
1152
+ call.name.startsWith('mcp__') ? theme.ui.muted('SSE result') : theme.ui.muted('Tool result'),
1153
+ ];
1154
+ const elapsed = this.formatElapsedMs(durationMs);
1155
+ if (elapsed) {
1156
+ labels.push(`${theme.metrics.elapsedLabel('elapsed')} ${theme.metrics.elapsedValue(elapsed)}`);
1157
+ }
1158
+ const title = labels.filter(Boolean).join(theme.ui.muted(' • '));
1159
+ const titlePadding = Math.max(0, innerWidth - this.visibleLength(title) - 2);
1160
+ const top = theme.ui.muted(`╭─ ${title} ${'─'.repeat(titlePadding)}╮`);
1161
+ const bottom = theme.ui.muted(`╰${'─'.repeat(innerWidth + 2)}╯`);
1162
+ const bodyLines = formatRichContent(output.trim(), innerWidth);
1163
+ const boxed = bodyLines.length ? bodyLines : [''];
1164
+ const content = boxed.map(line => {
1165
+ const truncated = this.visibleLength(line) > innerWidth
1166
+ ? `${line.slice(0, Math.max(0, innerWidth - 1))}…`
1167
+ : line;
1168
+ const pad = Math.max(0, innerWidth - this.visibleLength(truncated));
1169
+ return `${theme.ui.muted('│')} ${truncated}${' '.repeat(pad)} ${theme.ui.muted('│')}`;
1170
+ });
1171
+ return [top, ...content, bottom].join('\n');
1172
+ }
1173
+ visibleLength(value) {
1174
+ if (!value)
1175
+ return 0;
1176
+ return this.stripAnsi(value).length;
1177
+ }
1178
+ stripAnsi(value) {
1179
+ if (!value)
1180
+ return '';
1181
+ return value.replace(/\u001B\[[0-?]*[ -/]*[@-~]/g, '');
1182
+ }
1015
1183
  /**
1016
1184
  * Format tool result summary in Erosolar-CLI style
1017
1185
  * Returns compact summary like "Found 4 files" or "Read 50 lines"