@trenchwork/erosolar 1.1.60 → 1.1.62
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/contracts/v1/agent.d.ts +19 -2
- package/dist/contracts/v1/agent.d.ts.map +1 -1
- package/dist/core/slashCommands.d.ts +38 -0
- package/dist/core/slashCommands.d.ts.map +1 -0
- package/dist/core/slashCommands.js +68 -0
- package/dist/core/slashCommands.js.map +1 -0
- package/dist/core/subAgentNote.d.ts +15 -0
- package/dist/core/subAgentNote.d.ts.map +1 -0
- package/dist/core/subAgentNote.js +16 -0
- package/dist/core/subAgentNote.js.map +1 -0
- package/dist/headless/interactiveShell.d.ts.map +1 -1
- package/dist/headless/interactiveShell.js +30 -2
- package/dist/headless/interactiveShell.js.map +1 -1
- package/dist/runtime/agentController.d.ts +8 -0
- package/dist/runtime/agentController.d.ts.map +1 -1
- package/dist/runtime/agentController.js +17 -0
- package/dist/runtime/agentController.js.map +1 -1
- package/dist/runtime/agentSpawningWiring.d.ts +9 -0
- package/dist/runtime/agentSpawningWiring.d.ts.map +1 -1
- package/dist/runtime/agentSpawningWiring.js +7 -12
- package/dist/runtime/agentSpawningWiring.js.map +1 -1
- package/dist/ui/ink/InkPromptController.d.ts +2 -0
- package/dist/ui/ink/InkPromptController.d.ts.map +1 -1
- package/dist/ui/ink/InkPromptController.js +1 -0
- package/dist/ui/ink/InkPromptController.js.map +1 -1
- package/dist/ui/ink/Prompt.d.ts +2 -0
- package/dist/ui/ink/Prompt.d.ts.map +1 -1
- package/dist/ui/ink/Prompt.js +113 -8
- package/dist/ui/ink/Prompt.js.map +1 -1
- package/package.json +1 -1
|
@@ -8,7 +8,7 @@ export declare const AGENT_CONTRACT_VERSION = "1.0.0";
|
|
|
8
8
|
/**
|
|
9
9
|
* Event types emitted during agent execution
|
|
10
10
|
*/
|
|
11
|
-
export type AgentEventType = 'message.start' | 'message.delta' | 'message.complete' | 'tool.start' | 'tool.complete' | 'tool.error' | 'edit.explanation' | 'reasoning' | 'error' | 'usage' | 'provider.fallback' | 'context.compacted';
|
|
11
|
+
export type AgentEventType = 'message.start' | 'message.delta' | 'message.complete' | 'tool.start' | 'tool.complete' | 'tool.error' | 'edit.explanation' | 'reasoning' | 'error' | 'usage' | 'provider.fallback' | 'context.compacted' | 'subagent.start' | 'subagent.complete';
|
|
12
12
|
/**
|
|
13
13
|
* Base event structure
|
|
14
14
|
*/
|
|
@@ -114,10 +114,27 @@ export interface ContextCompactedEvent extends AgentEvent {
|
|
|
114
114
|
/** resulting context-usage percentage after compaction */
|
|
115
115
|
percentage: number;
|
|
116
116
|
}
|
|
117
|
+
/**
|
|
118
|
+
* Emitted when a parallel sub-agent (Task) spawns / finishes — surfaced live
|
|
119
|
+
* like Claude Code's Task tool so the parallel fan-out is visible.
|
|
120
|
+
*/
|
|
121
|
+
export interface SubAgentStartEvent extends AgentEvent {
|
|
122
|
+
type: 'subagent.start';
|
|
123
|
+
id: string;
|
|
124
|
+
/** short label for the sub-task */
|
|
125
|
+
description: string;
|
|
126
|
+
}
|
|
127
|
+
export interface SubAgentCompleteEvent extends AgentEvent {
|
|
128
|
+
type: 'subagent.complete';
|
|
129
|
+
id: string;
|
|
130
|
+
description: string;
|
|
131
|
+
success: boolean;
|
|
132
|
+
elapsedMs: number;
|
|
133
|
+
}
|
|
117
134
|
/**
|
|
118
135
|
* Union of all event types
|
|
119
136
|
*/
|
|
120
|
-
export type AgentEventUnion = MessageStartEvent | MessageDeltaEvent | MessageCompleteEvent | ToolStartEvent | ToolCompleteEvent | ToolErrorEvent | EditExplanationEvent | ReasoningEvent | ErrorEvent | UsageEvent | ProviderFallbackEvent | ContextCompactedEvent;
|
|
137
|
+
export type AgentEventUnion = MessageStartEvent | MessageDeltaEvent | MessageCompleteEvent | ToolStartEvent | ToolCompleteEvent | ToolErrorEvent | EditExplanationEvent | ReasoningEvent | ErrorEvent | UsageEvent | ProviderFallbackEvent | ContextCompactedEvent | SubAgentStartEvent | SubAgentCompleteEvent;
|
|
121
138
|
/**
|
|
122
139
|
* Model selection configuration
|
|
123
140
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../../src/contracts/v1/agent.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../../src/contracts/v1/agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Slash-command autocomplete — the `/` half of Claude Code's typed completion
|
|
3
|
+
* (the `@`-mention half lives in fileMentions.ts and the two share an identical
|
|
4
|
+
* menu UX in Prompt.tsx). Typing `/` at the start of the buffer opens a
|
|
5
|
+
* filterable palette of commands; ↑/↓ move, Tab/Enter accept, Esc dismisses.
|
|
6
|
+
*
|
|
7
|
+
* The catalog is the single source of truth for what the palette offers. It
|
|
8
|
+
* lists only the canonical command names (aliases like /c, /q, /changes are
|
|
9
|
+
* handled by interactiveShell but kept out of the palette to match Claude
|
|
10
|
+
* Code's one-row-per-command surface). A test asserts every entry here is
|
|
11
|
+
* actually handled by interactiveShell.handleSlashCommand so the two can't
|
|
12
|
+
* drift.
|
|
13
|
+
*/
|
|
14
|
+
export interface SlashCommand {
|
|
15
|
+
command: string;
|
|
16
|
+
description: string;
|
|
17
|
+
}
|
|
18
|
+
export declare const SLASH_COMMANDS: readonly SlashCommand[];
|
|
19
|
+
/**
|
|
20
|
+
* The command partial being typed at the cursor, or null. A slash command only
|
|
21
|
+
* exists as the FIRST token of the buffer, so the partial is the run of
|
|
22
|
+
* non-whitespace right after a leading `/` with nothing before it. Returns ''
|
|
23
|
+
* for a bare `/`. Once a space is typed (entering args) this returns null and
|
|
24
|
+
* the palette closes.
|
|
25
|
+
*/
|
|
26
|
+
export declare function activeSlashPartial(text: string, cursor: number): string | null;
|
|
27
|
+
/** Commands matching `partial` (name without the `/`), prefix-first then substring. */
|
|
28
|
+
export declare function rankCommandMatches(partial: string, limit?: number): SlashCommand[];
|
|
29
|
+
/**
|
|
30
|
+
* Replace the active `/<partial>` first token with `<command> ` (trailing space
|
|
31
|
+
* so an arg can follow, and so the partial no longer matches — closing the
|
|
32
|
+
* palette). Mirrors applyMentionCompletion.
|
|
33
|
+
*/
|
|
34
|
+
export declare function applySlashCompletion(text: string, cursor: number, command: string): {
|
|
35
|
+
text: string;
|
|
36
|
+
cursor: number;
|
|
37
|
+
};
|
|
38
|
+
//# sourceMappingURL=slashCommands.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slashCommands.d.ts","sourceRoot":"","sources":["../../src/core/slashCommands.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,cAAc,EAAE,SAAS,YAAY,EAYjD,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG9E;AAED,uFAAuF;AACvF,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,SAAI,GAAG,YAAY,EAAE,CAa7E;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAIpH"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Slash-command autocomplete — the `/` half of Claude Code's typed completion
|
|
3
|
+
* (the `@`-mention half lives in fileMentions.ts and the two share an identical
|
|
4
|
+
* menu UX in Prompt.tsx). Typing `/` at the start of the buffer opens a
|
|
5
|
+
* filterable palette of commands; ↑/↓ move, Tab/Enter accept, Esc dismisses.
|
|
6
|
+
*
|
|
7
|
+
* The catalog is the single source of truth for what the palette offers. It
|
|
8
|
+
* lists only the canonical command names (aliases like /c, /q, /changes are
|
|
9
|
+
* handled by interactiveShell but kept out of the palette to match Claude
|
|
10
|
+
* Code's one-row-per-command surface). A test asserts every entry here is
|
|
11
|
+
* actually handled by interactiveShell.handleSlashCommand so the two can't
|
|
12
|
+
* drift.
|
|
13
|
+
*/
|
|
14
|
+
export const SLASH_COMMANDS = [
|
|
15
|
+
{ command: '/key', description: 'Set your DeepSeek API key' },
|
|
16
|
+
{ command: '/clear', description: 'Clear the screen and conversation' },
|
|
17
|
+
{ command: '/resume', description: 'Restore a saved conversation' },
|
|
18
|
+
{ command: '/context', description: 'Show context-window usage' },
|
|
19
|
+
{ command: '/diff', description: 'Review files changed this run' },
|
|
20
|
+
{ command: '/rewind', description: 'Restore files changed this run' },
|
|
21
|
+
{ command: '/update', description: 'Update to the latest version' },
|
|
22
|
+
{ command: '/keys', description: 'Show keyboard shortcuts' },
|
|
23
|
+
{ command: '/bash', description: 'Run a shell command directly' },
|
|
24
|
+
{ command: '/help', description: 'Show help' },
|
|
25
|
+
{ command: '/exit', description: 'Exit the shell' },
|
|
26
|
+
];
|
|
27
|
+
/**
|
|
28
|
+
* The command partial being typed at the cursor, or null. A slash command only
|
|
29
|
+
* exists as the FIRST token of the buffer, so the partial is the run of
|
|
30
|
+
* non-whitespace right after a leading `/` with nothing before it. Returns ''
|
|
31
|
+
* for a bare `/`. Once a space is typed (entering args) this returns null and
|
|
32
|
+
* the palette closes.
|
|
33
|
+
*/
|
|
34
|
+
export function activeSlashPartial(text, cursor) {
|
|
35
|
+
const m = text.slice(0, Math.max(0, cursor)).match(/^\/(\S*)$/);
|
|
36
|
+
return m ? (m[1] ?? '') : null;
|
|
37
|
+
}
|
|
38
|
+
/** Commands matching `partial` (name without the `/`), prefix-first then substring. */
|
|
39
|
+
export function rankCommandMatches(partial, limit = 8) {
|
|
40
|
+
const q = partial.toLowerCase();
|
|
41
|
+
if (!q)
|
|
42
|
+
return SLASH_COMMANDS.slice(0, limit);
|
|
43
|
+
const scored = [];
|
|
44
|
+
for (const c of SLASH_COMMANDS) {
|
|
45
|
+
const name = c.command.slice(1).toLowerCase();
|
|
46
|
+
let score = -1;
|
|
47
|
+
if (name.startsWith(q))
|
|
48
|
+
score = 0;
|
|
49
|
+
else if (name.includes(q))
|
|
50
|
+
score = 1;
|
|
51
|
+
if (score >= 0)
|
|
52
|
+
scored.push({ c, score });
|
|
53
|
+
}
|
|
54
|
+
scored.sort((a, b) => a.score - b.score || a.c.command.length - b.c.command.length);
|
|
55
|
+
return scored.slice(0, limit).map((s) => s.c);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Replace the active `/<partial>` first token with `<command> ` (trailing space
|
|
59
|
+
* so an arg can follow, and so the partial no longer matches — closing the
|
|
60
|
+
* palette). Mirrors applyMentionCompletion.
|
|
61
|
+
*/
|
|
62
|
+
export function applySlashCompletion(text, cursor, command) {
|
|
63
|
+
if (activeSlashPartial(text, cursor) === null)
|
|
64
|
+
return { text, cursor };
|
|
65
|
+
const insert = `${command} `;
|
|
66
|
+
return { text: insert + text.slice(cursor), cursor: insert.length };
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=slashCommands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slashCommands.js","sourceRoot":"","sources":["../../src/core/slashCommands.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transcript copy for parallel sub-agents (Claude Code's Task tool parity).
|
|
3
|
+
* Pure + emoji-free except the ✓/✗ status glyphs already used elsewhere in
|
|
4
|
+
* the shell (UX §9 bans chrome emoji, not status checkmarks).
|
|
5
|
+
*/
|
|
6
|
+
export interface SubAgentResult {
|
|
7
|
+
description: string;
|
|
8
|
+
success: boolean;
|
|
9
|
+
elapsedMs: number;
|
|
10
|
+
}
|
|
11
|
+
/** Start line, rendered with the ⏺ action bullet by the shell. */
|
|
12
|
+
export declare function formatSubAgentStart(description: string): string;
|
|
13
|
+
/** Dim completion line: "✓ Task(label) · 1.2s". */
|
|
14
|
+
export declare function formatSubAgentComplete(r: SubAgentResult): string;
|
|
15
|
+
//# sourceMappingURL=subAgentNote.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subAgentNote.d.ts","sourceRoot":"","sources":["../../src/core/subAgentNote.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,kEAAkE;AAClE,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAE/D;AAED,mDAAmD;AACnD,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,cAAc,GAAG,MAAM,CAIhE"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transcript copy for parallel sub-agents (Claude Code's Task tool parity).
|
|
3
|
+
* Pure + emoji-free except the ✓/✗ status glyphs already used elsewhere in
|
|
4
|
+
* the shell (UX §9 bans chrome emoji, not status checkmarks).
|
|
5
|
+
*/
|
|
6
|
+
/** Start line, rendered with the ⏺ action bullet by the shell. */
|
|
7
|
+
export function formatSubAgentStart(description) {
|
|
8
|
+
return `Task(${description})`;
|
|
9
|
+
}
|
|
10
|
+
/** Dim completion line: "✓ Task(label) · 1.2s". */
|
|
11
|
+
export function formatSubAgentComplete(r) {
|
|
12
|
+
const tag = r.success ? '✓' : '✗';
|
|
13
|
+
const secs = (Math.max(0, r.elapsedMs) / 1000).toFixed(1);
|
|
14
|
+
return `${tag} Task(${r.description}) · ${secs}s`;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=subAgentNote.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subAgentNote.js","sourceRoot":"","sources":["../../src/core/subAgentNote.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH,kEAAkE;AAClE,MAAM,UAAU,mBAAmB,CAAC,WAAmB;IACrD,OAAO,QAAQ,WAAW,GAAG,CAAC;AAChC,CAAC;AAED,mDAAmD;AACnD,MAAM,UAAU,sBAAsB,CAAC,CAAiB;IACtD,MAAM,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IAClC,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC1D,OAAO,GAAG,GAAG,SAAS,CAAC,CAAC,WAAW,OAAO,IAAI,GAAG,CAAC;AACpD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interactiveShell.d.ts","sourceRoot":"","sources":["../../src/headless/interactiveShell.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;
|
|
1
|
+
{"version":3,"file":"interactiveShell.d.ts","sourceRoot":"","sources":["../../src/headless/interactiveShell.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AA6JH,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AA0CD;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,EAAE,CAErE;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmDzF"}
|
|
@@ -41,6 +41,7 @@ import { getChangedFiles, revertAllChanges, hasChangesToRevert } from '../tools/
|
|
|
41
41
|
import { renderChangePanel } from '../core/diffPanel.js';
|
|
42
42
|
import { rewindPreviewLines, rewindResultLine } from '../core/rewind.js';
|
|
43
43
|
import { formatCompactionNote } from '../core/compactionNote.js';
|
|
44
|
+
import { formatSubAgentStart, formatSubAgentComplete } from '../core/subAgentNote.js';
|
|
44
45
|
import { getConfiguredProviders, getProvidersStatus, quickCheckProviders, getCachedDiscoveredModels, sortModelsByPriority } from '../core/modelDiscovery.js';
|
|
45
46
|
import { saveModelPreference } from '../core/preferences.js';
|
|
46
47
|
import { setDebugMode, debugSnippet } from '../utils/debugLogger.js';
|
|
@@ -341,6 +342,9 @@ class InteractiveShell {
|
|
|
341
342
|
onToggleHITL: () => this.handleHITLToggle(),
|
|
342
343
|
onCyclePermissionMode: (mode) => this.handlePermissionModeChange(mode),
|
|
343
344
|
onExpandToolResult: () => this.handleExpandToolResult(),
|
|
345
|
+
// Esc interrupts a running turn (handleInterrupt no-ops when idle), so
|
|
346
|
+
// the spinner's "esc to interrupt" is real. Ctrl+C still works too.
|
|
347
|
+
onEscape: () => this.handleInterrupt(),
|
|
344
348
|
});
|
|
345
349
|
// Register cleanup callback for graceful shutdown
|
|
346
350
|
onShutdown(() => {
|
|
@@ -1543,8 +1547,9 @@ class InteractiveShell {
|
|
|
1543
1547
|
` ${kb('Shift+Tab')} ${desc('Cycle permission mode (default · accept edits · plan)')}`,
|
|
1544
1548
|
` ${kb('Ctrl+O')} ${desc('Expand the last truncated tool result')}`,
|
|
1545
1549
|
'',
|
|
1546
|
-
chalk.hex('#cbf24e')('
|
|
1550
|
+
chalk.hex('#cbf24e')('Completion'),
|
|
1547
1551
|
` ${kb('@')} ${desc('Autocomplete a file (↑/↓ · Tab/Enter); its content is inlined for the agent')}`,
|
|
1552
|
+
` ${kb('/')} ${desc('Autocomplete a command (↑/↓ · Tab to complete; Enter runs it)')}`,
|
|
1548
1553
|
'',
|
|
1549
1554
|
chalk.hex('#cbf24e')('Control'),
|
|
1550
1555
|
` ${kb('Ctrl+C')} ${desc('Clear input / interrupt')}`,
|
|
@@ -1596,6 +1601,14 @@ class InteractiveShell {
|
|
|
1596
1601
|
setTimeout(() => this.promptController?.setStatusMessage(null), 2000);
|
|
1597
1602
|
return;
|
|
1598
1603
|
}
|
|
1604
|
+
// `!cmd` — bash mode (Claude Code parity): run the rest as a shell command
|
|
1605
|
+
// directly, no model round-trip. Same executor as /bash, via the leading
|
|
1606
|
+
// bang. Runs immediately (like a slash command), not queued behind the agent.
|
|
1607
|
+
if (trimmed.startsWith('!')) {
|
|
1608
|
+
this.dismissInlinePanel();
|
|
1609
|
+
void this.runLocalCommand(trimmed.slice(1).trim());
|
|
1610
|
+
return;
|
|
1611
|
+
}
|
|
1599
1612
|
// Dismiss inline panel for regular user prompts
|
|
1600
1613
|
this.dismissInlinePanel();
|
|
1601
1614
|
// Live follow-up queue (Claude Code parity): a prompt typed while the agent
|
|
@@ -1794,7 +1807,10 @@ class InteractiveShell {
|
|
|
1794
1807
|
}
|
|
1795
1808
|
// Claude-Code action line: `⏺ ToolName(primaryArg)`. The dim
|
|
1796
1809
|
// present-tense label drives the working spinner above the prompt.
|
|
1797
|
-
|
|
1810
|
+
// parallel_agents is suppressed here — its per-sub-agent Task notes
|
|
1811
|
+
// (subagent.start/complete) are the visible surface instead of a
|
|
1812
|
+
// raw `parallel_agents({"tasks":…})` JSON dump.
|
|
1813
|
+
if (renderer && toolName !== 'parallel_agents') {
|
|
1798
1814
|
renderer.addEvent('tool', formatToolCall(toolName, args, this.workingDir));
|
|
1799
1815
|
}
|
|
1800
1816
|
this.promptController?.setStatusMessage(toolActivityLabel(toolName, args, this.workingDir));
|
|
@@ -1855,6 +1871,18 @@ class InteractiveShell {
|
|
|
1855
1871
|
});
|
|
1856
1872
|
break;
|
|
1857
1873
|
}
|
|
1874
|
+
case 'subagent.start':
|
|
1875
|
+
// A parallel sub-agent spawned — show it like Claude Code's Task.
|
|
1876
|
+
renderer?.addEvent('tool', formatSubAgentStart(event.description));
|
|
1877
|
+
this.promptController?.setStatusMessage(`Running sub-agent: ${event.description}`);
|
|
1878
|
+
break;
|
|
1879
|
+
case 'subagent.complete':
|
|
1880
|
+
renderer?.addEvent('system', chalk.dim(formatSubAgentComplete({
|
|
1881
|
+
description: event.description,
|
|
1882
|
+
success: event.success,
|
|
1883
|
+
elapsedMs: event.elapsedMs,
|
|
1884
|
+
})));
|
|
1885
|
+
break;
|
|
1858
1886
|
case 'context.compacted': {
|
|
1859
1887
|
// The conversation was auto-compacted to stay within the window —
|
|
1860
1888
|
// surface it as a dim note (Claude Code parity) instead of silently.
|