iosm-cli 0.2.17 → 0.3.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 (72) hide show
  1. package/CHANGELOG.md +46 -0
  2. package/README.md +7 -4
  3. package/dist/core/agent-session.d.ts.map +1 -1
  4. package/dist/core/agent-session.js +3 -0
  5. package/dist/core/agent-session.js.map +1 -1
  6. package/dist/core/settings-manager.d.ts +3 -0
  7. package/dist/core/settings-manager.d.ts.map +1 -1
  8. package/dist/core/settings-manager.js +11 -0
  9. package/dist/core/settings-manager.js.map +1 -1
  10. package/dist/core/settings.schema.json +21 -0
  11. package/dist/core/subagents.d.ts.map +1 -1
  12. package/dist/core/subagents.js +4 -0
  13. package/dist/core/subagents.js.map +1 -1
  14. package/dist/core/tools/task.d.ts.map +1 -1
  15. package/dist/core/tools/task.js +48 -26
  16. package/dist/core/tools/task.js.map +1 -1
  17. package/dist/iosm/guide.d.ts +14 -0
  18. package/dist/iosm/guide.d.ts.map +1 -1
  19. package/dist/iosm/guide.js +72 -1
  20. package/dist/iosm/guide.js.map +1 -1
  21. package/dist/iosm/index.d.ts +1 -1
  22. package/dist/iosm/index.d.ts.map +1 -1
  23. package/dist/iosm/index.js +1 -1
  24. package/dist/iosm/index.js.map +1 -1
  25. package/dist/iosm/init.d.ts.map +1 -1
  26. package/dist/iosm/init.js +20 -2
  27. package/dist/iosm/init.js.map +1 -1
  28. package/dist/main.d.ts.map +1 -1
  29. package/dist/main.js +16 -0
  30. package/dist/main.js.map +1 -1
  31. package/dist/modes/interactive/components/assistant-message.d.ts +7 -0
  32. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  33. package/dist/modes/interactive/components/assistant-message.js +77 -5
  34. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  35. package/dist/modes/interactive/components/custom-editor.d.ts +7 -0
  36. package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
  37. package/dist/modes/interactive/components/custom-editor.js +95 -10
  38. package/dist/modes/interactive/components/custom-editor.js.map +1 -1
  39. package/dist/modes/interactive/components/footer.d.ts +2 -0
  40. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  41. package/dist/modes/interactive/components/footer.js +49 -32
  42. package/dist/modes/interactive/components/footer.js.map +1 -1
  43. package/dist/modes/interactive/components/message-frame-border.d.ts +22 -0
  44. package/dist/modes/interactive/components/message-frame-border.d.ts.map +1 -0
  45. package/dist/modes/interactive/components/message-frame-border.js +51 -0
  46. package/dist/modes/interactive/components/message-frame-border.js.map +1 -0
  47. package/dist/modes/interactive/components/message-window.d.ts +25 -0
  48. package/dist/modes/interactive/components/message-window.d.ts.map +1 -0
  49. package/dist/modes/interactive/components/message-window.js +66 -0
  50. package/dist/modes/interactive/components/message-window.js.map +1 -0
  51. package/dist/modes/interactive/components/settings-selector.d.ts +2 -0
  52. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  53. package/dist/modes/interactive/components/settings-selector.js +12 -0
  54. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  55. package/dist/modes/interactive/components/subagent-message.d.ts +12 -9
  56. package/dist/modes/interactive/components/subagent-message.d.ts.map +1 -1
  57. package/dist/modes/interactive/components/subagent-message.js +138 -136
  58. package/dist/modes/interactive/components/subagent-message.js.map +1 -1
  59. package/dist/modes/interactive/components/tool-execution.d.ts +2 -0
  60. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  61. package/dist/modes/interactive/components/tool-execution.js +33 -28
  62. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  63. package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
  64. package/dist/modes/interactive/components/user-message.js +10 -3
  65. package/dist/modes/interactive/components/user-message.js.map +1 -1
  66. package/dist/modes/interactive/interactive-mode.d.ts +12 -1
  67. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  68. package/dist/modes/interactive/interactive-mode.js +551 -161
  69. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  70. package/docs/getting-started.md +3 -3
  71. package/docs/interactive-mode.md +1 -1
  72. package/package.json +1 -1
@@ -58,21 +58,18 @@ function formatSubagentBadge(agent) {
58
58
  return "[subagent]";
59
59
  return `[subagent:${normalized}]`;
60
60
  }
61
- function renderPhaseTimeline(phaseState) {
62
- const phases = ["queued", "starting", "running", "responding"];
63
- const currentIndex = phases.indexOf(phaseState);
64
- if (currentIndex < 0)
65
- return "";
66
- const segments = phases.map((phase, index) => {
67
- const marker = index < currentIndex ? "[x]" : index === currentIndex ? "[>]" : "[ ]";
68
- const text = `${marker} ${phase}`;
69
- if (index < currentIndex)
70
- return theme.fg("success", text);
71
- if (index === currentIndex)
72
- return theme.fg("accent", text);
73
- return theme.fg("muted", text);
74
- });
75
- return `${theme.fg("muted", "flow")} ${segments.join(theme.fg("dim", " -> "))}`;
61
+ function renderRunningStateChip(phaseState) {
62
+ switch (phaseState) {
63
+ case "queued":
64
+ return theme.fg("muted", "[ ] queued");
65
+ case "starting":
66
+ return theme.fg("accent", "[>] starting");
67
+ case "responding":
68
+ return theme.fg("accent", "[>] responding");
69
+ case "running":
70
+ default:
71
+ return theme.fg("accent", "[>] running");
72
+ }
76
73
  }
77
74
  function summarizeDelegates(info) {
78
75
  if (Array.isArray(info.delegateItems) && info.delegateItems.length > 0) {
@@ -109,34 +106,47 @@ function summarizeDelegates(info) {
109
106
  return undefined;
110
107
  }
111
108
  function formatDelegateSummary(summary) {
112
- const parts = [`delegates ${summary.done}/${summary.total} done`];
109
+ const parts = [`${summary.done}/${summary.total} done`];
113
110
  if (summary.failed > 0) {
114
111
  parts.push(`${summary.failed} failed`);
115
112
  }
116
113
  if (summary.running > 0) {
117
114
  parts.push(`${summary.running} running`);
118
115
  }
116
+ if (summary.pending > 0) {
117
+ parts.push(`${summary.pending} pending`);
118
+ }
119
119
  return parts.join(", ");
120
120
  }
121
- function selectDelegateItemsForDisplay(items) {
122
- const compactThreshold = 6;
123
- const maxRows = 5;
124
- if (items.length > compactThreshold) {
125
- const critical = items.filter((item) => item.status === "running" || item.status === "failed");
126
- const visibleItems = critical.slice(0, maxRows);
127
- return {
128
- visibleItems,
129
- compacted: true,
130
- hiddenDonePending: Math.max(0, items.length - critical.length),
131
- overflow: Math.max(0, critical.length - visibleItems.length),
132
- };
121
+ function renderDelegateStatusMarker(status) {
122
+ switch (status) {
123
+ case "done":
124
+ return theme.fg("success", "[x]");
125
+ case "running":
126
+ return theme.fg("accent", "[>]");
127
+ case "failed":
128
+ return theme.fg("warning", "[!]");
129
+ default:
130
+ return theme.fg("muted", "[ ]");
133
131
  }
134
- const visibleItems = items.slice(0, maxRows);
132
+ }
133
+ function renderDelegateText(item) {
134
+ const label = `#${item.index} ${item.description} (${item.profile})`;
135
+ const color = item.status === "done"
136
+ ? "muted"
137
+ : item.status === "running"
138
+ ? "customMessageText"
139
+ : item.status === "failed"
140
+ ? "warning"
141
+ : "muted";
142
+ return theme.fg(color, label);
143
+ }
144
+ function selectDelegateItemsForDisplay(items) {
135
145
  return {
136
- visibleItems,
146
+ visibleItems: items,
137
147
  compacted: false,
138
148
  hiddenDonePending: 0,
139
- overflow: Math.max(0, items.length - visibleItems.length),
149
+ overflow: 0,
140
150
  };
141
151
  }
142
152
  /**
@@ -145,15 +155,16 @@ function selectDelegateItemsForDisplay(items) {
145
155
  * Visual structure
146
156
  * ----------------
147
157
  * Line 1 (header): [subagent] <profile> · <description>
148
- * Line 2 (status):
149
- * running → ... <phase>
150
- * @ <cwd> · tool <active> · tools <done>/<started>
151
- * delegates <done>/<total> done, <failed> failed
152
- * delegate <i>/<n> · <description> · (<profile>)
153
- * delegates list with status markers (compact mode on large runs)
154
- * flow [x] queued -> [>] running -> [ ] responding
155
- * done → + <outputSize> output, <duration>, tools <done>/<started>, queue <wait>
156
- * error → x <errorMessage or "error">
158
+ * Line 2 (status): compact single-line state for scanning
159
+ * running → [>] running · <phase?> · tools · msgs · elapsed
160
+ * done → [x] done · <outputSize> · <duration> · tools · queue
161
+ * error → [!] <errorMessage>
162
+ * Optional context line:
163
+ * @ <cwd> · tool <active> · iso/worktree · lock
164
+ * Optional delegates section:
165
+ * delegates <done>/<total> done ...
166
+ * ├─ [>] #1 <desc> (<profile>)
167
+ * └─ [ ] #2 <desc> (<profile>)
157
168
  *
158
169
  * Theming follows the customMessage palette so the block sits visually alongside
159
170
  * other agent-injected messages (task plan, skill invocation, custom messages).
@@ -174,6 +185,66 @@ export class SubagentMessageComponent extends Box {
174
185
  invalidate() {
175
186
  super.invalidate();
176
187
  }
188
+ addInlineParts(parts) {
189
+ if (parts.length === 0)
190
+ return;
191
+ this.addChild(new Text(parts.join(theme.fg("dim", " \u00B7 ")), 0, 0));
192
+ }
193
+ renderDelegateSection(info) {
194
+ const summary = summarizeDelegates(info);
195
+ if (!summary)
196
+ return;
197
+ this.addChild(new Text(theme.fg("accent", `delegates ${formatDelegateSummary(summary)}`), 0, 0));
198
+ const activeDelegateIndex = typeof info.delegateIndex === "number" && info.delegateIndex > 0 ? Math.floor(info.delegateIndex) : undefined;
199
+ const activeDelegateTotal = typeof info.delegateTotal === "number" && info.delegateTotal > 0 ? Math.floor(info.delegateTotal) : undefined;
200
+ const activeDelegateDescription = typeof info.delegateDescription === "string" && info.delegateDescription.trim().length > 0
201
+ ? info.delegateDescription.trim()
202
+ : undefined;
203
+ const activeDelegateProfile = typeof info.delegateProfile === "string" && info.delegateProfile.trim().length > 0
204
+ ? info.delegateProfile.trim()
205
+ : undefined;
206
+ if (!Array.isArray(info.delegateItems) || info.delegateItems.length === 0) {
207
+ if (activeDelegateIndex) {
208
+ const activeParts = [
209
+ theme.fg("accent", `active #${activeDelegateIndex}${activeDelegateTotal ? `/${activeDelegateTotal}` : ""}`),
210
+ ];
211
+ if (activeDelegateDescription) {
212
+ activeParts.push(theme.fg("customMessageText", activeDelegateDescription));
213
+ }
214
+ if (activeDelegateProfile) {
215
+ activeParts.push(theme.fg("muted", `(${activeDelegateProfile})`));
216
+ }
217
+ this.addInlineParts(activeParts);
218
+ }
219
+ return;
220
+ }
221
+ const selected = selectDelegateItemsForDisplay(info.delegateItems);
222
+ const hiddenCount = selected.hiddenDonePending + selected.overflow;
223
+ const rowCount = selected.visibleItems.length + (hiddenCount > 0 ? 1 : 0);
224
+ if (rowCount === 0) {
225
+ this.addChild(new Text(theme.fg("muted", "└─ no active delegates"), 0, 0));
226
+ return;
227
+ }
228
+ for (let index = 0; index < selected.visibleItems.length; index++) {
229
+ const item = selected.visibleItems[index];
230
+ const rowIndex = index;
231
+ const isLastRow = rowIndex === rowCount - 1;
232
+ const branch = theme.fg("dim", isLastRow ? "└─" : "├─");
233
+ const marker = renderDelegateStatusMarker(item.status);
234
+ this.addChild(new Text(`${branch} ${marker} ${renderDelegateText(item)}`, 0, 0));
235
+ }
236
+ if (hiddenCount > 0) {
237
+ const branch = theme.fg("dim", "└─");
238
+ const hiddenParts = [theme.fg("muted", `+${hiddenCount} hidden`)];
239
+ if (selected.hiddenDonePending > 0) {
240
+ hiddenParts.push(theme.fg("muted", `${selected.hiddenDonePending} done/pending`));
241
+ }
242
+ if (selected.overflow > 0) {
243
+ hiddenParts.push(theme.fg("muted", `${selected.overflow} active overflow`));
244
+ }
245
+ this.addChild(new Text(`${branch} ${hiddenParts.join(theme.fg("dim", ", "))}`, 0, 0));
246
+ }
247
+ }
177
248
  renderContent(info) {
178
249
  // --- Header line ---
179
250
  // [subagent] or [subagent:<agent>] <profile> · <description>
@@ -186,107 +257,44 @@ export class SubagentMessageComponent extends Box {
186
257
  // --- Status line ---
187
258
  switch (info.status) {
188
259
  case "running": {
189
- // Ellipsis prefix signals in-progress work without a spinner dependency
190
- const indicator = theme.fg("accent", "...");
191
- const phase = info.phase?.trim() ? info.phase.trim() : "running";
192
- const statusText = theme.fg("muted", ` ${phase}`);
193
- this.addChild(new Text(`${indicator}${statusText}`, 0, 0));
194
- const metadata = [];
195
- if (info.cwd) {
196
- metadata.push(theme.fg("muted", `@ ${shortenPath(info.cwd)}`));
197
- }
198
- if (info.activeTool) {
199
- metadata.push(theme.fg("customMessageText", `tool ${info.activeTool}`));
260
+ const statusParts = [renderRunningStateChip(info.phaseState)];
261
+ const phase = info.phase?.trim();
262
+ if (phase && phase.length > 0 && phase !== info.phaseState && phase !== "running") {
263
+ statusParts.push(theme.fg("customMessageText", phase));
200
264
  }
201
265
  const toolProgress = formatToolProgress(info.toolCallsStarted, info.toolCallsCompleted);
202
266
  if (toolProgress) {
203
- metadata.push(theme.fg("muted", toolProgress));
267
+ statusParts.push(theme.fg("muted", toolProgress));
204
268
  }
205
269
  if (typeof info.assistantMessages === "number" && info.assistantMessages > 0) {
206
- metadata.push(theme.fg("muted", `msgs ${info.assistantMessages}`));
207
- }
208
- if (info.agent) {
209
- metadata.push(theme.fg("muted", `agent ${info.agent}`));
270
+ statusParts.push(theme.fg("muted", `msgs ${info.assistantMessages}`));
210
271
  }
211
272
  if (typeof info.durationMs === "number" && info.durationMs >= 0) {
212
- metadata.push(theme.fg("muted", `elapsed ${formatElapsedClock(info.durationMs)}`));
213
- }
214
- if (info.isolation && info.isolation !== "none") {
215
- metadata.push(theme.fg("muted", `iso ${info.isolation}`));
273
+ statusParts.push(theme.fg("muted", `elapsed ${formatElapsedClock(info.durationMs)}`));
216
274
  }
217
- if (info.lockKey) {
218
- metadata.push(theme.fg("muted", `lock ${info.lockKey}`));
219
- }
220
- if (metadata.length > 0) {
221
- this.addChild(new Text(metadata.join(theme.fg("dim", " \u00B7 ")), 0, 0));
222
- }
223
- const delegateSummary = summarizeDelegates(info);
224
- if (delegateSummary) {
225
- this.addChild(new Text(theme.fg("accent", formatDelegateSummary(delegateSummary)), 0, 0));
275
+ this.addInlineParts(statusParts);
276
+ const contextParts = [];
277
+ if (info.cwd) {
278
+ contextParts.push(theme.fg("muted", `@ ${shortenPath(info.cwd)}`));
226
279
  }
227
- if (typeof info.delegateIndex === "number" && info.delegateIndex > 0) {
228
- const delegateTotal = typeof info.delegateTotal === "number" && info.delegateTotal > 0
229
- ? info.delegateTotal
230
- : info.delegateIndex;
231
- const delegateParts = [theme.fg("accent", `delegate ${info.delegateIndex}/${delegateTotal}`)];
232
- if (typeof info.delegateDescription === "string" && info.delegateDescription.trim().length > 0) {
233
- delegateParts.push(theme.fg("customMessageText", info.delegateDescription.trim()));
234
- }
235
- if (typeof info.delegateProfile === "string" && info.delegateProfile.trim().length > 0) {
236
- delegateParts.push(theme.fg("muted", `(${info.delegateProfile.trim()})`));
237
- }
238
- this.addChild(new Text(delegateParts.join(theme.fg("dim", " \u00B7 ")), 0, 0));
280
+ if (info.activeTool) {
281
+ contextParts.push(theme.fg("customMessageText", `tool ${info.activeTool}`));
239
282
  }
240
- if (Array.isArray(info.delegateItems) && info.delegateItems.length > 0) {
241
- const selected = selectDelegateItemsForDisplay(info.delegateItems);
242
- const headerParts = [theme.fg("muted", "delegates")];
243
- if (selected.compacted) {
244
- headerParts.push(theme.fg("accent", "compact"));
245
- if (selected.hiddenDonePending > 0) {
246
- headerParts.push(theme.fg("muted", `hidden ${selected.hiddenDonePending} done/pending`));
247
- }
248
- }
249
- this.addChild(new Text(headerParts.join(theme.fg("dim", " \u00B7 ")), 0, 0));
250
- if (selected.visibleItems.length === 0 && selected.compacted) {
251
- this.addChild(new Text(theme.fg("muted", "no running/failed delegates"), 0, 0));
252
- }
253
- for (const item of selected.visibleItems) {
254
- const marker = (() => {
255
- switch (item.status) {
256
- case "done":
257
- return theme.fg("success", "[x]");
258
- case "running":
259
- return theme.fg("accent", "[>]");
260
- case "failed":
261
- return theme.fg("warning", "[!]");
262
- default:
263
- return theme.fg("muted", "[ ]");
264
- }
265
- })();
266
- const label = `${item.index}. ${item.description} (${item.profile})`;
267
- const textColor = item.status === "done"
268
- ? "muted"
269
- : item.status === "running"
270
- ? "customMessageText"
271
- : item.status === "failed"
272
- ? "warning"
273
- : "muted";
274
- this.addChild(new Text(`${marker} ${theme.fg(textColor, label)}`, 0, 0));
275
- }
276
- if (selected.overflow > 0) {
277
- this.addChild(new Text(theme.fg("muted", `... +${selected.overflow} more`), 0, 0));
278
- }
283
+ if (info.isolation && info.isolation !== "none") {
284
+ contextParts.push(theme.fg("muted", `iso ${info.isolation}`));
279
285
  }
280
- if (info.phaseState) {
281
- this.addChild(new Text(renderPhaseTimeline(info.phaseState), 0, 0));
286
+ if (info.lockKey) {
287
+ contextParts.push(theme.fg("muted", `lock ${info.lockKey}`));
282
288
  }
289
+ this.addInlineParts(contextParts);
290
+ this.renderDelegateSection(info);
283
291
  break;
284
292
  }
285
293
  case "done": {
286
- const checkmark = theme.fg("success", "+");
287
294
  const parts = [];
295
+ parts.push(theme.fg("success", "[x] done"));
288
296
  if (info.outputLength !== undefined) {
289
- parts.push(theme.fg("customMessageText", formatBytes(info.outputLength)) + theme.fg("muted", " output"));
297
+ parts.push(theme.fg("customMessageText", `${formatBytes(info.outputLength)} output`));
290
298
  }
291
299
  if (info.durationMs !== undefined) {
292
300
  parts.push(theme.fg("muted", formatDuration(info.durationMs)));
@@ -295,25 +303,19 @@ export class SubagentMessageComponent extends Box {
295
303
  if (toolProgress) {
296
304
  parts.push(theme.fg("muted", toolProgress));
297
305
  }
298
- const delegateSummary = summarizeDelegates(info);
299
- if (delegateSummary) {
300
- parts.push(theme.fg("muted", `delegates ${delegateSummary.done}/${delegateSummary.total} done`));
301
- if (delegateSummary.failed > 0) {
302
- parts.push(theme.fg("warning", `${delegateSummary.failed} failed`));
303
- }
304
- }
305
306
  if (typeof info.waitMs === "number" && info.waitMs > 0) {
306
307
  parts.push(theme.fg("muted", `queue ${formatDuration(info.waitMs)}`));
307
308
  }
308
- const detail = parts.length > 0 ? " " + parts.join(theme.fg("dim", ", ")) : "";
309
- this.addChild(new Text(`${checkmark}${detail}`, 0, 0));
309
+ this.addInlineParts(parts);
310
+ this.renderDelegateSection(info);
310
311
  break;
311
312
  }
312
313
  case "error": {
313
- const cross = theme.fg("error", "x");
314
+ const cross = theme.fg("error", "[!] error");
314
315
  const message = info.errorMessage ? info.errorMessage : "error";
315
- const errorText = theme.fg("error", ` ${message}`);
316
- this.addChild(new Text(`${cross}${errorText}`, 0, 0));
316
+ const errorText = theme.fg("error", message);
317
+ this.addInlineParts([cross, errorText]);
318
+ this.renderDelegateSection(info);
317
319
  break;
318
320
  }
319
321
  }
@@ -1 +1 @@
1
- {"version":3,"file":"subagent-message.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/subagent-message.ts"],"names":[],"mappings":"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","sourcesContent":["import { homedir } from \"node:os\";\nimport { Box, Spacer, Text } from \"@mariozechner/pi-tui\";\nimport { theme } from \"../theme/theme.js\";\n\nconst MESSAGE_BOX_PADDING_X = 2;\nconst MESSAGE_BOX_PADDING_Y = 1;\n\nexport type SubagentPhaseState = \"queued\" | \"starting\" | \"running\" | \"responding\";\nexport type SubagentDelegateStatus = \"pending\" | \"running\" | \"done\" | \"failed\";\n\nexport interface SubagentDelegateItem {\n\tindex: number;\n\tdescription: string;\n\tprofile: string;\n\tstatus: SubagentDelegateStatus;\n}\n\nexport interface SubagentInfo {\n\t/** Human-readable description of the subagent's task, e.g. \"Exploring TypeScript files\" */\n\tdescription: string;\n\t/** Profile name, e.g. \"explore\" | \"plan\" | \"fix\" */\n\tprofile: string;\n\t/** Current lifecycle state of the subagent */\n\tstatus: \"running\" | \"done\" | \"error\";\n\t/** Byte length of the subagent's output, populated when status is \"done\" */\n\toutputLength?: number;\n\t/** Wall-clock elapsed time in milliseconds, populated when status is \"done\" */\n\tdurationMs?: number;\n\t/** Error message, populated when status is \"error\" */\n\terrorMessage?: string;\n\t/** Current phase summary for in-progress work */\n\tphase?: string;\n\t/** Current phase state in the execution timeline */\n\tphaseState?: SubagentPhaseState;\n\t/** Effective working directory for the subagent */\n\tcwd?: string;\n\t/** Optional custom agent label */\n\tagent?: string;\n\t/** Optional lock domain key */\n\tlockKey?: string;\n\t/** Isolation mode for this run */\n\tisolation?: \"none\" | \"worktree\";\n\t/** Current active subagent tool (e.g. read, bash, write) */\n\tactiveTool?: string;\n\t/** Number of subagent tool calls started */\n\ttoolCallsStarted?: number;\n\t/** Number of subagent tool calls completed */\n\ttoolCallsCompleted?: number;\n\t/** Number of assistant messages produced inside subagent */\n\tassistantMessages?: number;\n\t/** Queue delay before execution started (ms) */\n\twaitMs?: number;\n\t/** Number of delegated child subtasks launched by this subagent */\n\tdelegatedTasks?: number;\n\t/** Number of delegated child subtasks finished successfully */\n\tdelegatedSucceeded?: number;\n\t/** Number of delegated child subtasks that failed */\n\tdelegatedFailed?: number;\n\t/** Currently active delegated subtask index (1-based) */\n\tdelegateIndex?: number;\n\t/** Total delegated subtasks in the current batch */\n\tdelegateTotal?: number;\n\t/** Currently active delegated subtask description */\n\tdelegateDescription?: string;\n\t/** Currently active delegated subtask profile */\n\tdelegateProfile?: string;\n\t/** Delegate task mini-list with per-item status */\n\tdelegateItems?: SubagentDelegateItem[];\n}\n\ntype DelegateSummary = {\n\ttotal: number;\n\tdone: number;\n\tfailed: number;\n\trunning: number;\n\tpending: number;\n};\n\n/**\n * Format a byte count as a compact human-readable string.\n * Mirrors the formatting conventions used elsewhere in the footer (k/M suffixes).\n */\nfunction formatBytes(bytes: number): string {\n\tif (bytes < 1024) return `${bytes}B`;\n\tif (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)}KB`;\n\treturn `${(bytes / (1024 * 1024)).toFixed(1)}MB`;\n}\n\n/**\n * Format a millisecond duration as a compact human-readable string.\n * Keeps the unit explicit so users can immediately scan the value at a glance.\n */\nfunction formatDuration(ms: number): string {\n\tif (ms < 1000) return `${ms}ms`;\n\tif (ms < 60_000) return `${(ms / 1000).toFixed(1)}s`;\n\tconst minutes = Math.floor(ms / 60_000);\n\tconst seconds = ((ms % 60_000) / 1000).toFixed(0);\n\treturn `${minutes}m ${seconds}s`;\n}\n\nfunction formatElapsedClock(ms: number): string {\n\tconst totalSeconds = Math.max(0, Math.floor(ms / 1000));\n\tconst hours = Math.floor(totalSeconds / 3600);\n\tconst minutes = Math.floor((totalSeconds % 3600) / 60);\n\tconst seconds = totalSeconds % 60;\n\tconst pad2 = (value: number): string => value.toString().padStart(2, \"0\");\n\tif (hours > 0) {\n\t\treturn `${pad2(hours)}:${pad2(minutes)}:${pad2(seconds)}`;\n\t}\n\treturn `${pad2(minutes)}:${pad2(seconds)}`;\n}\n\nfunction shortenPath(path: string): string {\n\tconst home = homedir();\n\treturn path.startsWith(home) ? `~${path.slice(home.length)}` : path;\n}\n\nfunction formatToolProgress(started?: number, completed?: number): string | undefined {\n\tif (typeof started !== \"number\" || started < 0) return undefined;\n\tif (typeof completed === \"number\" && completed >= 0) {\n\t\treturn `tools ${completed}/${started}`;\n\t}\n\treturn `tools ${started}`;\n}\n\nfunction formatSubagentBadge(agent?: string): string {\n\tif (typeof agent !== \"string\") return \"[subagent]\";\n\tconst normalized = agent.trim();\n\tif (!normalized) return \"[subagent]\";\n\treturn `[subagent:${normalized}]`;\n}\n\nfunction renderPhaseTimeline(phaseState: SubagentPhaseState): string {\n\tconst phases: SubagentPhaseState[] = [\"queued\", \"starting\", \"running\", \"responding\"];\n\tconst currentIndex = phases.indexOf(phaseState);\n\tif (currentIndex < 0) return \"\";\n\n\tconst segments = phases.map((phase, index) => {\n\t\tconst marker = index < currentIndex ? \"[x]\" : index === currentIndex ? \"[>]\" : \"[ ]\";\n\t\tconst text = `${marker} ${phase}`;\n\t\tif (index < currentIndex) return theme.fg(\"success\", text);\n\t\tif (index === currentIndex) return theme.fg(\"accent\", text);\n\t\treturn theme.fg(\"muted\", text);\n\t});\n\treturn `${theme.fg(\"muted\", \"flow\")} ${segments.join(theme.fg(\"dim\", \" -> \"))}`;\n}\n\nfunction summarizeDelegates(info: SubagentInfo): DelegateSummary | undefined {\n\tif (Array.isArray(info.delegateItems) && info.delegateItems.length > 0) {\n\t\tlet done = 0;\n\t\tlet failed = 0;\n\t\tlet running = 0;\n\t\tlet pending = 0;\n\t\tfor (const item of info.delegateItems) {\n\t\t\tswitch (item.status) {\n\t\t\t\tcase \"done\":\n\t\t\t\t\tdone += 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"failed\":\n\t\t\t\t\tfailed += 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"running\":\n\t\t\t\t\trunning += 1;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tpending += 1;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\treturn { total: info.delegateItems.length, done, failed, running, pending };\n\t}\n\tif (typeof info.delegatedTasks === \"number\" && info.delegatedTasks > 0) {\n\t\tconst total = info.delegatedTasks;\n\t\tconst done = typeof info.delegatedSucceeded === \"number\" ? Math.max(0, info.delegatedSucceeded) : 0;\n\t\tconst failed = typeof info.delegatedFailed === \"number\" ? Math.max(0, info.delegatedFailed) : 0;\n\t\tconst running = Math.max(0, total - done - failed);\n\t\tconst pending = 0;\n\t\treturn { total, done, failed, running, pending };\n\t}\n\treturn undefined;\n}\n\nfunction formatDelegateSummary(summary: DelegateSummary): string {\n\tconst parts: string[] = [`delegates ${summary.done}/${summary.total} done`];\n\tif (summary.failed > 0) {\n\t\tparts.push(`${summary.failed} failed`);\n\t}\n\tif (summary.running > 0) {\n\t\tparts.push(`${summary.running} running`);\n\t}\n\treturn parts.join(\", \");\n}\n\nfunction selectDelegateItemsForDisplay(items: SubagentDelegateItem[]): {\n\tvisibleItems: SubagentDelegateItem[];\n\tcompacted: boolean;\n\thiddenDonePending: number;\n\toverflow: number;\n} {\n\tconst compactThreshold = 6;\n\tconst maxRows = 5;\n\tif (items.length > compactThreshold) {\n\t\tconst critical = items.filter((item) => item.status === \"running\" || item.status === \"failed\");\n\t\tconst visibleItems = critical.slice(0, maxRows);\n\t\treturn {\n\t\t\tvisibleItems,\n\t\t\tcompacted: true,\n\t\t\thiddenDonePending: Math.max(0, items.length - critical.length),\n\t\t\toverflow: Math.max(0, critical.length - visibleItems.length),\n\t\t};\n\t}\n\tconst visibleItems = items.slice(0, maxRows);\n\treturn {\n\t\tvisibleItems,\n\t\tcompacted: false,\n\t\thiddenDonePending: 0,\n\t\toverflow: Math.max(0, items.length - visibleItems.length),\n\t};\n}\n\n/**\n * Component that surfaces a running or completed subagent (task tool invocation).\n *\n * Visual structure\n * ----------------\n * Line 1 (header): [subagent] <profile> · <description>\n * Line 2 (status):\n * running → ... <phase>\n * @ <cwd> · tool <active> · tools <done>/<started>\n * delegates <done>/<total> done, <failed> failed\n * delegate <i>/<n> · <description> · (<profile>)\n * delegates list with status markers (compact mode on large runs)\n * flow [x] queued -> [>] running -> [ ] responding\n * done → + <outputSize> output, <duration>, tools <done>/<started>, queue <wait>\n * error → x <errorMessage or \"error\">\n *\n * Theming follows the customMessage palette so the block sits visually alongside\n * other agent-injected messages (task plan, skill invocation, custom messages).\n */\nexport class SubagentMessageComponent extends Box {\n\tconstructor(info: SubagentInfo) {\n\t\tsuper(MESSAGE_BOX_PADDING_X, MESSAGE_BOX_PADDING_Y, (text) => theme.bg(\"customMessageBg\", text));\n\t\tthis.renderContent(info);\n\t}\n\n\t/**\n\t * Replace the rendered content with updated subagent info.\n\t * Call this whenever status, outputLength, durationMs, or errorMessage changes.\n\t */\n\tupdate(info: SubagentInfo): void {\n\t\tthis.clear();\n\t\tthis.renderContent(info);\n\t}\n\n\toverride invalidate(): void {\n\t\tsuper.invalidate();\n\t}\n\n\tprivate renderContent(info: SubagentInfo): void {\n\t\t// --- Header line ---\n\t\t// [subagent] or [subagent:<agent>] <profile> · <description>\n\t\tconst label = theme.fg(\"customMessageLabel\", `\\x1b[1m${formatSubagentBadge(info.agent)}\\x1b[22m`);\n\t\tconst profileBadge = theme.fg(\"accent\", info.profile);\n\t\tconst dot = theme.fg(\"dim\", \" \\u00B7 \"); // middle dot separator\n\t\tconst description = theme.fg(\"customMessageText\", info.description);\n\t\tthis.addChild(new Text(`${label} ${profileBadge}${dot}${description}`, 0, 0));\n\n\t\tthis.addChild(new Spacer(1));\n\n\t\t// --- Status line ---\n\t\tswitch (info.status) {\n\t\t\t\tcase \"running\": {\n\t\t\t\t// Ellipsis prefix signals in-progress work without a spinner dependency\n\t\t\t\tconst indicator = theme.fg(\"accent\", \"...\");\n\t\t\t\tconst phase = info.phase?.trim() ? info.phase.trim() : \"running\";\n\t\t\t\tconst statusText = theme.fg(\"muted\", ` ${phase}`);\n\t\t\t\tthis.addChild(new Text(`${indicator}${statusText}`, 0, 0));\n\n\t\t\t\tconst metadata: string[] = [];\n\t\t\t\tif (info.cwd) {\n\t\t\t\t\tmetadata.push(theme.fg(\"muted\", `@ ${shortenPath(info.cwd)}`));\n\t\t\t\t}\n\t\t\t\tif (info.activeTool) {\n\t\t\t\t\tmetadata.push(theme.fg(\"customMessageText\", `tool ${info.activeTool}`));\n\t\t\t\t}\n\t\t\t\tconst toolProgress = formatToolProgress(info.toolCallsStarted, info.toolCallsCompleted);\n\t\t\t\tif (toolProgress) {\n\t\t\t\t\tmetadata.push(theme.fg(\"muted\", toolProgress));\n\t\t\t\t}\n\t\t\t\tif (typeof info.assistantMessages === \"number\" && info.assistantMessages > 0) {\n\t\t\t\t\tmetadata.push(theme.fg(\"muted\", `msgs ${info.assistantMessages}`));\n\t\t\t\t}\n\t\t\t\tif (info.agent) {\n\t\t\t\t\tmetadata.push(theme.fg(\"muted\", `agent ${info.agent}`));\n\t\t\t\t}\n\t\t\t\tif (typeof info.durationMs === \"number\" && info.durationMs >= 0) {\n\t\t\t\t\tmetadata.push(theme.fg(\"muted\", `elapsed ${formatElapsedClock(info.durationMs)}`));\n\t\t\t\t}\n\t\t\t\tif (info.isolation && info.isolation !== \"none\") {\n\t\t\t\t\tmetadata.push(theme.fg(\"muted\", `iso ${info.isolation}`));\n\t\t\t\t}\n\t\t\t\t\tif (info.lockKey) {\n\t\t\t\t\t\tmetadata.push(theme.fg(\"muted\", `lock ${info.lockKey}`));\n\t\t\t\t\t}\n\t\t\t\t\tif (metadata.length > 0) {\n\t\t\t\t\t\tthis.addChild(new Text(metadata.join(theme.fg(\"dim\", \" \\u00B7 \")), 0, 0));\n\t\t\t\t\t}\n\t\t\t\t\tconst delegateSummary = summarizeDelegates(info);\n\t\t\t\t\tif (delegateSummary) {\n\t\t\t\t\t\tthis.addChild(new Text(theme.fg(\"accent\", formatDelegateSummary(delegateSummary)), 0, 0));\n\t\t\t\t\t}\n\t\t\t\t\tif (typeof info.delegateIndex === \"number\" && info.delegateIndex > 0) {\n\t\t\t\t\t\tconst delegateTotal =\n\t\t\t\t\t\t\ttypeof info.delegateTotal === \"number\" && info.delegateTotal > 0\n\t\t\t\t\t\t\t\t? info.delegateTotal\n\t\t\t\t\t\t\t\t: info.delegateIndex;\n\t\t\t\t\t\tconst delegateParts: string[] = [theme.fg(\"accent\", `delegate ${info.delegateIndex}/${delegateTotal}`)];\n\t\t\t\t\t\tif (typeof info.delegateDescription === \"string\" && info.delegateDescription.trim().length > 0) {\n\t\t\t\t\t\t\tdelegateParts.push(theme.fg(\"customMessageText\", info.delegateDescription.trim()));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (typeof info.delegateProfile === \"string\" && info.delegateProfile.trim().length > 0) {\n\t\t\t\t\t\t\tdelegateParts.push(theme.fg(\"muted\", `(${info.delegateProfile.trim()})`));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.addChild(new Text(delegateParts.join(theme.fg(\"dim\", \" \\u00B7 \")), 0, 0));\n\t\t\t\t\t}\n\t\t\t\t\tif (Array.isArray(info.delegateItems) && info.delegateItems.length > 0) {\n\t\t\t\t\t\tconst selected = selectDelegateItemsForDisplay(info.delegateItems);\n\t\t\t\t\t\tconst headerParts = [theme.fg(\"muted\", \"delegates\")];\n\t\t\t\t\t\tif (selected.compacted) {\n\t\t\t\t\t\t\theaderParts.push(theme.fg(\"accent\", \"compact\"));\n\t\t\t\t\t\t\tif (selected.hiddenDonePending > 0) {\n\t\t\t\t\t\t\t\theaderParts.push(theme.fg(\"muted\", `hidden ${selected.hiddenDonePending} done/pending`));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.addChild(new Text(headerParts.join(theme.fg(\"dim\", \" \\u00B7 \")), 0, 0));\n\t\t\t\t\t\tif (selected.visibleItems.length === 0 && selected.compacted) {\n\t\t\t\t\t\t\tthis.addChild(new Text(theme.fg(\"muted\", \"no running/failed delegates\"), 0, 0));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfor (const item of selected.visibleItems) {\n\t\t\t\t\t\t\tconst marker = (() => {\n\t\t\t\t\t\t\t\tswitch (item.status) {\n\t\t\t\t\t\t\t\t\tcase \"done\":\n\t\t\t\t\t\t\t\t\t\treturn theme.fg(\"success\", \"[x]\");\n\t\t\t\t\t\t\t\t\tcase \"running\":\n\t\t\t\t\t\t\t\t\t\treturn theme.fg(\"accent\", \"[>]\");\n\t\t\t\t\t\t\t\t\tcase \"failed\":\n\t\t\t\t\t\t\t\t\t\treturn theme.fg(\"warning\", \"[!]\");\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\treturn theme.fg(\"muted\", \"[ ]\");\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t})();\n\t\t\t\t\t\t\tconst label = `${item.index}. ${item.description} (${item.profile})`;\n\t\t\t\t\t\t\tconst textColor =\n\t\t\t\t\t\t\t\titem.status === \"done\"\n\t\t\t\t\t\t\t\t\t? \"muted\"\n\t\t\t\t\t\t\t\t\t: item.status === \"running\"\n\t\t\t\t\t\t\t\t\t\t? \"customMessageText\"\n\t\t\t\t\t\t\t\t\t\t: item.status === \"failed\"\n\t\t\t\t\t\t\t\t\t\t\t? \"warning\"\n\t\t\t\t\t\t\t\t\t\t\t: \"muted\";\n\t\t\t\t\t\t\tthis.addChild(new Text(`${marker} ${theme.fg(textColor, label)}`, 0, 0));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (selected.overflow > 0) {\n\t\t\t\t\t\t\tthis.addChild(new Text(theme.fg(\"muted\", `... +${selected.overflow} more`), 0, 0));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (info.phaseState) {\n\t\t\t\t\t\tthis.addChild(new Text(renderPhaseTimeline(info.phaseState), 0, 0));\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\tcase \"done\": {\n\t\t\t\tconst checkmark = theme.fg(\"success\", \"+\");\n\t\t\t\tconst parts: string[] = [];\n\t\t\t\tif (info.outputLength !== undefined) {\n\t\t\t\t\tparts.push(theme.fg(\"customMessageText\", formatBytes(info.outputLength)) + theme.fg(\"muted\", \" output\"));\n\t\t\t\t}\n\t\t\t\tif (info.durationMs !== undefined) {\n\t\t\t\t\tparts.push(theme.fg(\"muted\", formatDuration(info.durationMs)));\n\t\t\t\t}\n\t\t\t\tconst toolProgress = formatToolProgress(info.toolCallsStarted, info.toolCallsCompleted);\n\t\t\t\tif (toolProgress) {\n\t\t\t\t\tparts.push(theme.fg(\"muted\", toolProgress));\n\t\t\t\t}\n\t\t\t\t\tconst delegateSummary = summarizeDelegates(info);\n\t\t\t\t\tif (delegateSummary) {\n\t\t\t\t\t\tparts.push(theme.fg(\"muted\", `delegates ${delegateSummary.done}/${delegateSummary.total} done`));\n\t\t\t\t\t\tif (delegateSummary.failed > 0) {\n\t\t\t\t\t\t\tparts.push(theme.fg(\"warning\", `${delegateSummary.failed} failed`));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\tif (typeof info.waitMs === \"number\" && info.waitMs > 0) {\n\t\t\t\t\tparts.push(theme.fg(\"muted\", `queue ${formatDuration(info.waitMs)}`));\n\t\t\t\t}\n\t\t\t\tconst detail = parts.length > 0 ? \" \" + parts.join(theme.fg(\"dim\", \", \")) : \"\";\n\t\t\t\tthis.addChild(new Text(`${checkmark}${detail}`, 0, 0));\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase \"error\": {\n\t\t\t\tconst cross = theme.fg(\"error\", \"x\");\n\t\t\t\tconst message = info.errorMessage ? info.errorMessage : \"error\";\n\t\t\t\tconst errorText = theme.fg(\"error\", ` ${message}`);\n\t\t\t\tthis.addChild(new Text(`${cross}${errorText}`, 0, 0));\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n}\n"]}
1
+ {"version":3,"file":"subagent-message.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/subagent-message.ts"],"names":[],"mappings":"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","sourcesContent":["import { homedir } from \"node:os\";\nimport { Box, Spacer, Text } from \"@mariozechner/pi-tui\";\nimport { theme } from \"../theme/theme.js\";\n\nconst MESSAGE_BOX_PADDING_X = 2;\nconst MESSAGE_BOX_PADDING_Y = 1;\n\nexport type SubagentPhaseState = \"queued\" | \"starting\" | \"running\" | \"responding\";\nexport type SubagentDelegateStatus = \"pending\" | \"running\" | \"done\" | \"failed\";\n\nexport interface SubagentDelegateItem {\n\tindex: number;\n\tdescription: string;\n\tprofile: string;\n\tstatus: SubagentDelegateStatus;\n}\n\nexport interface SubagentInfo {\n\t/** Human-readable description of the subagent's task, e.g. \"Exploring TypeScript files\" */\n\tdescription: string;\n\t/** Profile name, e.g. \"explore\" | \"plan\" | \"fix\" */\n\tprofile: string;\n\t/** Current lifecycle state of the subagent */\n\tstatus: \"running\" | \"done\" | \"error\";\n\t/** Byte length of the subagent's output, populated when status is \"done\" */\n\toutputLength?: number;\n\t/** Wall-clock elapsed time in milliseconds, populated when status is \"done\" */\n\tdurationMs?: number;\n\t/** Error message, populated when status is \"error\" */\n\terrorMessage?: string;\n\t/** Current phase summary for in-progress work */\n\tphase?: string;\n\t/** Current phase state in the execution timeline */\n\tphaseState?: SubagentPhaseState;\n\t/** Effective working directory for the subagent */\n\tcwd?: string;\n\t/** Optional custom agent label */\n\tagent?: string;\n\t/** Optional lock domain key */\n\tlockKey?: string;\n\t/** Isolation mode for this run */\n\tisolation?: \"none\" | \"worktree\";\n\t/** Current active subagent tool (e.g. read, bash, write) */\n\tactiveTool?: string;\n\t/** Number of subagent tool calls started */\n\ttoolCallsStarted?: number;\n\t/** Number of subagent tool calls completed */\n\ttoolCallsCompleted?: number;\n\t/** Number of assistant messages produced inside subagent */\n\tassistantMessages?: number;\n\t/** Queue delay before execution started (ms) */\n\twaitMs?: number;\n\t/** Number of delegated child subtasks launched by this subagent */\n\tdelegatedTasks?: number;\n\t/** Number of delegated child subtasks finished successfully */\n\tdelegatedSucceeded?: number;\n\t/** Number of delegated child subtasks that failed */\n\tdelegatedFailed?: number;\n\t/** Currently active delegated subtask index (1-based) */\n\tdelegateIndex?: number;\n\t/** Total delegated subtasks in the current batch */\n\tdelegateTotal?: number;\n\t/** Currently active delegated subtask description */\n\tdelegateDescription?: string;\n\t/** Currently active delegated subtask profile */\n\tdelegateProfile?: string;\n\t/** Delegate task mini-list with per-item status */\n\tdelegateItems?: SubagentDelegateItem[];\n}\n\ntype DelegateSummary = {\n\ttotal: number;\n\tdone: number;\n\tfailed: number;\n\trunning: number;\n\tpending: number;\n};\n\n/**\n * Format a byte count as a compact human-readable string.\n * Mirrors the formatting conventions used elsewhere in the footer (k/M suffixes).\n */\nfunction formatBytes(bytes: number): string {\n\tif (bytes < 1024) return `${bytes}B`;\n\tif (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)}KB`;\n\treturn `${(bytes / (1024 * 1024)).toFixed(1)}MB`;\n}\n\n/**\n * Format a millisecond duration as a compact human-readable string.\n * Keeps the unit explicit so users can immediately scan the value at a glance.\n */\nfunction formatDuration(ms: number): string {\n\tif (ms < 1000) return `${ms}ms`;\n\tif (ms < 60_000) return `${(ms / 1000).toFixed(1)}s`;\n\tconst minutes = Math.floor(ms / 60_000);\n\tconst seconds = ((ms % 60_000) / 1000).toFixed(0);\n\treturn `${minutes}m ${seconds}s`;\n}\n\nfunction formatElapsedClock(ms: number): string {\n\tconst totalSeconds = Math.max(0, Math.floor(ms / 1000));\n\tconst hours = Math.floor(totalSeconds / 3600);\n\tconst minutes = Math.floor((totalSeconds % 3600) / 60);\n\tconst seconds = totalSeconds % 60;\n\tconst pad2 = (value: number): string => value.toString().padStart(2, \"0\");\n\tif (hours > 0) {\n\t\treturn `${pad2(hours)}:${pad2(minutes)}:${pad2(seconds)}`;\n\t}\n\treturn `${pad2(minutes)}:${pad2(seconds)}`;\n}\n\nfunction shortenPath(path: string): string {\n\tconst home = homedir();\n\treturn path.startsWith(home) ? `~${path.slice(home.length)}` : path;\n}\n\nfunction formatToolProgress(started?: number, completed?: number): string | undefined {\n\tif (typeof started !== \"number\" || started < 0) return undefined;\n\tif (typeof completed === \"number\" && completed >= 0) {\n\t\treturn `tools ${completed}/${started}`;\n\t}\n\treturn `tools ${started}`;\n}\n\nfunction formatSubagentBadge(agent?: string): string {\n\tif (typeof agent !== \"string\") return \"[subagent]\";\n\tconst normalized = agent.trim();\n\tif (!normalized) return \"[subagent]\";\n\treturn `[subagent:${normalized}]`;\n}\n\nfunction renderRunningStateChip(phaseState?: SubagentPhaseState): string {\n\tswitch (phaseState) {\n\t\tcase \"queued\":\n\t\t\treturn theme.fg(\"muted\", \"[ ] queued\");\n\t\tcase \"starting\":\n\t\t\treturn theme.fg(\"accent\", \"[>] starting\");\n\t\tcase \"responding\":\n\t\t\treturn theme.fg(\"accent\", \"[>] responding\");\n\t\tcase \"running\":\n\t\tdefault:\n\t\t\treturn theme.fg(\"accent\", \"[>] running\");\n\t}\n}\n\nfunction summarizeDelegates(info: SubagentInfo): DelegateSummary | undefined {\n\tif (Array.isArray(info.delegateItems) && info.delegateItems.length > 0) {\n\t\tlet done = 0;\n\t\tlet failed = 0;\n\t\tlet running = 0;\n\t\tlet pending = 0;\n\t\tfor (const item of info.delegateItems) {\n\t\t\tswitch (item.status) {\n\t\t\t\tcase \"done\":\n\t\t\t\t\tdone += 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"failed\":\n\t\t\t\t\tfailed += 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"running\":\n\t\t\t\t\trunning += 1;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tpending += 1;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\treturn { total: info.delegateItems.length, done, failed, running, pending };\n\t}\n\tif (typeof info.delegatedTasks === \"number\" && info.delegatedTasks > 0) {\n\t\tconst total = info.delegatedTasks;\n\t\tconst done = typeof info.delegatedSucceeded === \"number\" ? Math.max(0, info.delegatedSucceeded) : 0;\n\t\tconst failed = typeof info.delegatedFailed === \"number\" ? Math.max(0, info.delegatedFailed) : 0;\n\t\tconst running = Math.max(0, total - done - failed);\n\t\tconst pending = 0;\n\t\treturn { total, done, failed, running, pending };\n\t}\n\treturn undefined;\n}\n\nfunction formatDelegateSummary(summary: DelegateSummary): string {\n\tconst parts: string[] = [`${summary.done}/${summary.total} done`];\n\tif (summary.failed > 0) {\n\t\tparts.push(`${summary.failed} failed`);\n\t}\n\tif (summary.running > 0) {\n\t\tparts.push(`${summary.running} running`);\n\t}\n\tif (summary.pending > 0) {\n\t\tparts.push(`${summary.pending} pending`);\n\t}\n\treturn parts.join(\", \");\n}\n\nfunction renderDelegateStatusMarker(status: SubagentDelegateStatus): string {\n\tswitch (status) {\n\t\tcase \"done\":\n\t\t\treturn theme.fg(\"success\", \"[x]\");\n\t\tcase \"running\":\n\t\t\treturn theme.fg(\"accent\", \"[>]\");\n\t\tcase \"failed\":\n\t\t\treturn theme.fg(\"warning\", \"[!]\");\n\t\tdefault:\n\t\t\treturn theme.fg(\"muted\", \"[ ]\");\n\t}\n}\n\nfunction renderDelegateText(item: SubagentDelegateItem): string {\n\tconst label = `#${item.index} ${item.description} (${item.profile})`;\n\tconst color =\n\t\titem.status === \"done\"\n\t\t\t? \"muted\"\n\t\t\t: item.status === \"running\"\n\t\t\t\t? \"customMessageText\"\n\t\t\t\t: item.status === \"failed\"\n\t\t\t\t\t? \"warning\"\n\t\t\t\t\t: \"muted\";\n\treturn theme.fg(color, label);\n}\n\nfunction selectDelegateItemsForDisplay(items: SubagentDelegateItem[]): {\n\tvisibleItems: SubagentDelegateItem[];\n\tcompacted: boolean;\n\thiddenDonePending: number;\n\toverflow: number;\n} {\n\treturn {\n\t\tvisibleItems: items,\n\t\tcompacted: false,\n\t\thiddenDonePending: 0,\n\t\toverflow: 0,\n\t};\n}\n\n/**\n * Component that surfaces a running or completed subagent (task tool invocation).\n *\n * Visual structure\n * ----------------\n * Line 1 (header): [subagent] <profile> · <description>\n * Line 2 (status): compact single-line state for scanning\n * running → [>] running · <phase?> · tools · msgs · elapsed\n * done → [x] done · <outputSize> · <duration> · tools · queue\n * error → [!] <errorMessage>\n * Optional context line:\n * @ <cwd> · tool <active> · iso/worktree · lock\n * Optional delegates section:\n * delegates <done>/<total> done ...\n * ├─ [>] #1 <desc> (<profile>)\n * └─ [ ] #2 <desc> (<profile>)\n *\n * Theming follows the customMessage palette so the block sits visually alongside\n * other agent-injected messages (task plan, skill invocation, custom messages).\n */\nexport class SubagentMessageComponent extends Box {\n\tconstructor(info: SubagentInfo) {\n\t\tsuper(MESSAGE_BOX_PADDING_X, MESSAGE_BOX_PADDING_Y, (text) => theme.bg(\"customMessageBg\", text));\n\t\tthis.renderContent(info);\n\t}\n\n\t/**\n\t * Replace the rendered content with updated subagent info.\n\t * Call this whenever status, outputLength, durationMs, or errorMessage changes.\n\t */\n\tupdate(info: SubagentInfo): void {\n\t\tthis.clear();\n\t\tthis.renderContent(info);\n\t}\n\n\toverride invalidate(): void {\n\t\tsuper.invalidate();\n\t}\n\n\tprivate addInlineParts(parts: string[]): void {\n\t\tif (parts.length === 0) return;\n\t\tthis.addChild(new Text(parts.join(theme.fg(\"dim\", \" \\u00B7 \")), 0, 0));\n\t}\n\n\tprivate renderDelegateSection(info: SubagentInfo): void {\n\t\tconst summary = summarizeDelegates(info);\n\t\tif (!summary) return;\n\n\t\tthis.addChild(new Text(theme.fg(\"accent\", `delegates ${formatDelegateSummary(summary)}`), 0, 0));\n\n\t\tconst activeDelegateIndex =\n\t\t\ttypeof info.delegateIndex === \"number\" && info.delegateIndex > 0 ? Math.floor(info.delegateIndex) : undefined;\n\t\tconst activeDelegateTotal =\n\t\t\ttypeof info.delegateTotal === \"number\" && info.delegateTotal > 0 ? Math.floor(info.delegateTotal) : undefined;\n\t\tconst activeDelegateDescription =\n\t\t\ttypeof info.delegateDescription === \"string\" && info.delegateDescription.trim().length > 0\n\t\t\t\t? info.delegateDescription.trim()\n\t\t\t\t: undefined;\n\t\tconst activeDelegateProfile =\n\t\t\ttypeof info.delegateProfile === \"string\" && info.delegateProfile.trim().length > 0\n\t\t\t\t? info.delegateProfile.trim()\n\t\t\t\t: undefined;\n\n\t\tif (!Array.isArray(info.delegateItems) || info.delegateItems.length === 0) {\n\t\t\tif (activeDelegateIndex) {\n\t\t\t\tconst activeParts = [\n\t\t\t\t\ttheme.fg(\n\t\t\t\t\t\t\"accent\",\n\t\t\t\t\t\t`active #${activeDelegateIndex}${activeDelegateTotal ? `/${activeDelegateTotal}` : \"\"}`,\n\t\t\t\t\t),\n\t\t\t\t];\n\t\t\t\tif (activeDelegateDescription) {\n\t\t\t\t\tactiveParts.push(theme.fg(\"customMessageText\", activeDelegateDescription));\n\t\t\t\t}\n\t\t\t\tif (activeDelegateProfile) {\n\t\t\t\t\tactiveParts.push(theme.fg(\"muted\", `(${activeDelegateProfile})`));\n\t\t\t\t}\n\t\t\t\tthis.addInlineParts(activeParts);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tconst selected = selectDelegateItemsForDisplay(info.delegateItems);\n\t\tconst hiddenCount = selected.hiddenDonePending + selected.overflow;\n\t\tconst rowCount = selected.visibleItems.length + (hiddenCount > 0 ? 1 : 0);\n\n\t\tif (rowCount === 0) {\n\t\t\tthis.addChild(new Text(theme.fg(\"muted\", \"└─ no active delegates\"), 0, 0));\n\t\t\treturn;\n\t\t}\n\n\t\tfor (let index = 0; index < selected.visibleItems.length; index++) {\n\t\t\tconst item = selected.visibleItems[index];\n\t\t\tconst rowIndex = index;\n\t\t\tconst isLastRow = rowIndex === rowCount - 1;\n\t\t\tconst branch = theme.fg(\"dim\", isLastRow ? \"└─\" : \"├─\");\n\t\t\tconst marker = renderDelegateStatusMarker(item.status);\n\t\t\tthis.addChild(new Text(`${branch} ${marker} ${renderDelegateText(item)}`, 0, 0));\n\t\t}\n\n\t\tif (hiddenCount > 0) {\n\t\t\tconst branch = theme.fg(\"dim\", \"└─\");\n\t\t\tconst hiddenParts = [theme.fg(\"muted\", `+${hiddenCount} hidden`)];\n\t\t\tif (selected.hiddenDonePending > 0) {\n\t\t\t\thiddenParts.push(theme.fg(\"muted\", `${selected.hiddenDonePending} done/pending`));\n\t\t\t}\n\t\t\tif (selected.overflow > 0) {\n\t\t\t\thiddenParts.push(theme.fg(\"muted\", `${selected.overflow} active overflow`));\n\t\t\t}\n\t\t\tthis.addChild(new Text(`${branch} ${hiddenParts.join(theme.fg(\"dim\", \", \"))}`, 0, 0));\n\t\t}\n\t}\n\n\tprivate renderContent(info: SubagentInfo): void {\n\t\t// --- Header line ---\n\t\t// [subagent] or [subagent:<agent>] <profile> · <description>\n\t\tconst label = theme.fg(\"customMessageLabel\", `\\x1b[1m${formatSubagentBadge(info.agent)}\\x1b[22m`);\n\t\tconst profileBadge = theme.fg(\"accent\", info.profile);\n\t\tconst dot = theme.fg(\"dim\", \" \\u00B7 \"); // middle dot separator\n\t\tconst description = theme.fg(\"customMessageText\", info.description);\n\t\tthis.addChild(new Text(`${label} ${profileBadge}${dot}${description}`, 0, 0));\n\n\t\tthis.addChild(new Spacer(1));\n\n\t\t// --- Status line ---\n\t\tswitch (info.status) {\n\t\t\tcase \"running\": {\n\t\t\t\tconst statusParts = [renderRunningStateChip(info.phaseState)];\n\t\t\t\tconst phase = info.phase?.trim();\n\t\t\t\tif (phase && phase.length > 0 && phase !== info.phaseState && phase !== \"running\") {\n\t\t\t\t\tstatusParts.push(theme.fg(\"customMessageText\", phase));\n\t\t\t\t}\n\t\t\t\tconst toolProgress = formatToolProgress(info.toolCallsStarted, info.toolCallsCompleted);\n\t\t\t\tif (toolProgress) {\n\t\t\t\t\tstatusParts.push(theme.fg(\"muted\", toolProgress));\n\t\t\t\t}\n\t\t\t\tif (typeof info.assistantMessages === \"number\" && info.assistantMessages > 0) {\n\t\t\t\t\tstatusParts.push(theme.fg(\"muted\", `msgs ${info.assistantMessages}`));\n\t\t\t\t}\n\t\t\t\tif (typeof info.durationMs === \"number\" && info.durationMs >= 0) {\n\t\t\t\t\tstatusParts.push(theme.fg(\"muted\", `elapsed ${formatElapsedClock(info.durationMs)}`));\n\t\t\t\t}\n\t\t\t\tthis.addInlineParts(statusParts);\n\n\t\t\t\tconst contextParts: string[] = [];\n\t\t\t\tif (info.cwd) {\n\t\t\t\t\tcontextParts.push(theme.fg(\"muted\", `@ ${shortenPath(info.cwd)}`));\n\t\t\t\t}\n\t\t\t\tif (info.activeTool) {\n\t\t\t\t\tcontextParts.push(theme.fg(\"customMessageText\", `tool ${info.activeTool}`));\n\t\t\t\t}\n\t\t\t\tif (info.isolation && info.isolation !== \"none\") {\n\t\t\t\t\tcontextParts.push(theme.fg(\"muted\", `iso ${info.isolation}`));\n\t\t\t\t}\n\t\t\t\tif (info.lockKey) {\n\t\t\t\t\tcontextParts.push(theme.fg(\"muted\", `lock ${info.lockKey}`));\n\t\t\t\t}\n\t\t\t\tthis.addInlineParts(contextParts);\n\t\t\t\tthis.renderDelegateSection(info);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase \"done\": {\n\t\t\t\tconst parts: string[] = [];\n\t\t\t\tparts.push(theme.fg(\"success\", \"[x] done\"));\n\t\t\t\tif (info.outputLength !== undefined) {\n\t\t\t\t\tparts.push(theme.fg(\"customMessageText\", `${formatBytes(info.outputLength)} output`));\n\t\t\t\t}\n\t\t\t\tif (info.durationMs !== undefined) {\n\t\t\t\t\tparts.push(theme.fg(\"muted\", formatDuration(info.durationMs)));\n\t\t\t\t}\n\t\t\t\tconst toolProgress = formatToolProgress(info.toolCallsStarted, info.toolCallsCompleted);\n\t\t\t\tif (toolProgress) {\n\t\t\t\t\tparts.push(theme.fg(\"muted\", toolProgress));\n\t\t\t\t}\n\t\t\t\tif (typeof info.waitMs === \"number\" && info.waitMs > 0) {\n\t\t\t\t\tparts.push(theme.fg(\"muted\", `queue ${formatDuration(info.waitMs)}`));\n\t\t\t\t}\n\t\t\t\tthis.addInlineParts(parts);\n\t\t\t\tthis.renderDelegateSection(info);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase \"error\": {\n\t\t\t\tconst cross = theme.fg(\"error\", \"[!] error\");\n\t\t\t\tconst message = info.errorMessage ? info.errorMessage : \"error\";\n\t\t\t\tconst errorText = theme.fg(\"error\", message);\n\t\t\t\tthis.addInlineParts([cross, errorText]);\n\t\t\t\tthis.renderDelegateSection(info);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n}\n"]}
@@ -7,6 +7,8 @@ export interface ToolExecutionOptions {
7
7
  * Component that renders a tool call with its result (updateable)
8
8
  */
9
9
  export declare class ToolExecutionComponent extends Container {
10
+ private frameContent;
11
+ private messageWindow;
10
12
  private contentBox;
11
13
  private contentText;
12
14
  private imageComponents;
@@ -1 +1 @@
1
- {"version":3,"file":"tool-execution.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/tool-execution.ts"],"names":[],"mappings":"AACA,OAAO,EAEN,SAAS,EAOT,KAAK,GAAG,EAER,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAyQxE,MAAM,WAAW,oBAAoB;IACpC,UAAU,CAAC,EAAE,OAAO,CAAC;CACrB;AAUD;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,SAAS;IACpD,OAAO,CAAC,UAAU,CAAM;IACxB,OAAO,CAAC,WAAW,CAAO;IAC1B,OAAO,CAAC,eAAe,CAAe;IACtC,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,IAAI,CAAM;IAClB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,UAAU,CAAU;IAC5B,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,cAAc,CAAC,CAAiB;IACxC,OAAO,CAAC,EAAE,CAAM;IAChB,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,MAAM,CAAC,CAIb;IAEF,OAAO,CAAC,eAAe,CAAC,CAAiC;IACzD,OAAO,CAAC,eAAe,CAAC,CAAS;IAEjC,OAAO,CAAC,eAAe,CAA8D;IAErF,OAAO,CAAC,mBAAmB,CAAC,CAAsB;IAElD,OAAO,CAAC,aAAa,CAAS;gBAG7B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,GAAG,EACT,OAAO,EAAE,oBAAoB,YAAK,EAClC,cAAc,EAAE,cAAc,GAAG,SAAS,EAC1C,EAAE,EAAE,GAAG,EACP,GAAG,GAAE,MAAsB;IA6B5B;;;;OAIG;IACH,OAAO,CAAC,wBAAwB;IAMhC,UAAU,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI;IAQ3B,OAAO,CAAC,mBAAmB;IAK3B,OAAO,CAAC,2BAA2B;IAYnC,OAAO,CAAC,8BAA8B;IAkBtC,OAAO,CAAC,oCAAoC;IAyD5C;;;OAGG;IACH,eAAe,IAAI,IAAI;IAWvB;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IA6B5B,YAAY,CACX,MAAM,EAAE;QACP,OAAO,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAClF,OAAO,CAAC,EAAE,GAAG,CAAC;QACd,OAAO,EAAE,OAAO,CAAC;KACjB,EACD,SAAS,UAAQ,GACf,IAAI;IAeP;;;OAGG;IACH,OAAO,CAAC,0BAA0B;IA2BlC,WAAW,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI;IAKpC,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAKzB,UAAU,IAAI,IAAI;IAKlB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IAOxC,OAAO,CAAC,aAAa;IA8IrB;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAyFzB,OAAO,CAAC,aAAa;IA2BrB,OAAO,CAAC,mBAAmB;CA0Z3B"}
1
+ {"version":3,"file":"tool-execution.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/tool-execution.ts"],"names":[],"mappings":"AACA,OAAO,EAEN,SAAS,EAOT,KAAK,GAAG,EAER,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AA0QxE,MAAM,WAAW,oBAAoB;IACpC,UAAU,CAAC,EAAE,OAAO,CAAC;CACrB;AAUD;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,SAAS;IACpD,OAAO,CAAC,YAAY,CAAY;IAChC,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,UAAU,CAAM;IACxB,OAAO,CAAC,WAAW,CAAO;IAC1B,OAAO,CAAC,eAAe,CAAe;IACtC,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,IAAI,CAAM;IAClB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,UAAU,CAAU;IAC5B,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,cAAc,CAAC,CAAiB;IACxC,OAAO,CAAC,EAAE,CAAM;IAChB,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,MAAM,CAAC,CAIb;IAEF,OAAO,CAAC,eAAe,CAAC,CAAiC;IACzD,OAAO,CAAC,eAAe,CAAC,CAAS;IAEjC,OAAO,CAAC,eAAe,CAA8D;IAErF,OAAO,CAAC,mBAAmB,CAAC,CAAsB;IAElD,OAAO,CAAC,aAAa,CAAS;gBAG7B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,GAAG,EACT,OAAO,EAAE,oBAAoB,YAAK,EAClC,cAAc,EAAE,cAAc,GAAG,SAAS,EAC1C,EAAE,EAAE,GAAG,EACP,GAAG,GAAE,MAAsB;IA6B5B;;;;OAIG;IACH,OAAO,CAAC,wBAAwB;IAMhC,UAAU,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI;IAQ3B,OAAO,CAAC,mBAAmB;IAK3B,OAAO,CAAC,2BAA2B;IAYnC,OAAO,CAAC,8BAA8B;IAkBtC,OAAO,CAAC,oCAAoC;IAyD5C;;;OAGG;IACH,eAAe,IAAI,IAAI;IAWvB;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IA6B5B,YAAY,CACX,MAAM,EAAE;QACP,OAAO,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAClF,OAAO,CAAC,EAAE,GAAG,CAAC;QACd,OAAO,EAAE,OAAO,CAAC;KACjB,EACD,SAAS,UAAQ,GACf,IAAI;IAeP;;;OAGG;IACH,OAAO,CAAC,0BAA0B;IA2BlC,WAAW,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI;IAKpC,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAKzB,UAAU,IAAI,IAAI;IAKlB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IAOxC,OAAO,CAAC,aAAa;IAgJrB;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAyFzB,OAAO,CAAC,aAAa;IA2BrB,OAAO,CAAC,mBAAmB;CA0Z3B"}