@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.
@@ -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":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,sBAAsB,UAAU,CAAC;AAE9C;;GAEG;AACH,MAAM,MAAM,cAAc,GACtB,eAAe,GACf,eAAe,GACf,kBAAkB,GAClB,YAAY,GACZ,eAAe,GACf,YAAY,GACZ,kBAAkB,GAClB,WAAW,GACX,OAAO,GACP,OAAO,GACP,mBAAmB,GACnB,mBAAmB,CAAC;AAExB;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,cAAc,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAkB,SAAQ,UAAU;IACnD,IAAI,EAAE,eAAe,CAAC;CACvB;AAED,MAAM,WAAW,iBAAkB,SAAQ,UAAU;IACnD,IAAI,EAAE,eAAe,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,oBAAqB,SAAQ,UAAU;IACtD,IAAI,EAAE,kBAAkB,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,cAAe,SAAQ,UAAU;IAChD,IAAI,EAAE,YAAY,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACrC;AAED,MAAM,WAAW,iBAAkB,SAAQ,UAAU;IACnD,IAAI,EAAE,eAAe,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,cAAe,SAAQ,UAAU;IAChD,IAAI,EAAE,YAAY,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,oBAAqB,SAAQ,UAAU;IACtD,IAAI,EAAE,kBAAkB,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,cAAe,SAAQ,UAAU;IAChD,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,UAAW,SAAQ,UAAU;IAC5C,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,UAAW,SAAQ,UAAU;IAC5C,IAAI,EAAE,OAAO,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAsB,SAAQ,UAAU;IACvD,IAAI,EAAE,mBAAmB,CAAC;IAC1B,2BAA2B;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,wBAAwB;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,iCAAiC;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,8BAA8B;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,0BAA0B;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,6BAA6B;IAC7B,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,MAAM,WAAW,qBAAsB,SAAQ,UAAU;IACvD,IAAI,EAAE,mBAAmB,CAAC;IAC1B,oCAAoC;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,yDAAyD;IACzD,WAAW,EAAE,MAAM,CAAC;IACpB,mEAAmE;IACnE,UAAU,EAAE,OAAO,CAAC;IACpB,0DAA0D;IAC1D,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,MAAM,eAAe,GACvB,iBAAiB,GACjB,iBAAiB,GACjB,oBAAoB,GACpB,cAAc,GACd,iBAAiB,GACjB,cAAc,GACd,oBAAoB,GACpB,cAAc,GACd,UAAU,GACV,UAAU,GACV,qBAAqB,GACrB,qBAAqB,CAAC;AAE1B;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,WAAW,CAAC;IACnB,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,qBAAqB,CAAC,eAAe,CAAC,CAAC;IAE9D;;OAEG;IACH,WAAW,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEhD;;OAEG;IACH,eAAe,IAAI,kBAAkB,CAAC;IAEtC;;OAEG;IACH,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;IAEzD;;OAEG;IACH,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAE3C;;OAEG;IACH,UAAU,IAAI,mBAAmB,EAAE,CAAC;IAEpC;;OAEG;IACH,YAAY,IAAI,IAAI,CAAC;IAErB;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,mBAAmB,EAAE,GAAG,IAAI,CAAC;CACnD;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,KAAK,CAAC;QAChB,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACpC,CAAC,CAAC;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf"}
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;AA4JH,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"}
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')('Mentions'),
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
- if (renderer) {
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.