@agi-fans/dsh-tui 0.5.1 → 0.6.0

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 (44) hide show
  1. package/README.md +1 -0
  2. package/lib/CHANGELOG.md +29 -1
  3. package/lib/chrome/markdown.js +2 -2
  4. package/lib/chrome/markdown.js.map +1 -1
  5. package/lib/chrome/renderer.d.ts +16 -0
  6. package/lib/chrome/renderer.js.map +1 -1
  7. package/lib/chrome/theme.d.ts +3 -3
  8. package/lib/chrome/theme.js +3 -3
  9. package/lib/chrome/theme.js.map +1 -1
  10. package/lib/chrome/tool-renderers.js +64 -4
  11. package/lib/chrome/tool-renderers.js.map +1 -1
  12. package/lib/chrome/welcome-tips.js +2 -1
  13. package/lib/chrome/welcome-tips.js.map +1 -1
  14. package/lib/commands/auth.d.ts +21 -4
  15. package/lib/commands/auth.js +485 -26
  16. package/lib/commands/auth.js.map +1 -1
  17. package/lib/commands/model.js +4 -1
  18. package/lib/commands/model.js.map +1 -1
  19. package/lib/definition.d.ts +52 -0
  20. package/lib/input/keybindings-config.d.ts +1 -1
  21. package/lib/input/keybindings-config.js +2 -1
  22. package/lib/input/keybindings-config.js.map +1 -1
  23. package/lib/runtime/provider-local.d.ts +6 -1
  24. package/lib/runtime/provider-local.js +175 -2
  25. package/lib/runtime/provider-local.js.map +1 -1
  26. package/lib/runtime/runner.js +2 -0
  27. package/lib/runtime/runner.js.map +1 -1
  28. package/lib/session/session-controller.d.ts +5 -0
  29. package/lib/session/session-controller.js +254 -7
  30. package/lib/session/session-controller.js.map +1 -1
  31. package/lib/session/subagent-roster.d.ts +51 -0
  32. package/lib/session/subagent-roster.js +316 -0
  33. package/lib/session/subagent-roster.js.map +1 -0
  34. package/lib/views/autocomplete.d.ts +8 -0
  35. package/lib/views/autocomplete.js +26 -1
  36. package/lib/views/autocomplete.js.map +1 -1
  37. package/lib/views/event-views.d.ts +24 -1
  38. package/lib/views/event-views.js +170 -24
  39. package/lib/views/event-views.js.map +1 -1
  40. package/lib/views/hotkeys.js +1 -0
  41. package/lib/views/hotkeys.js.map +1 -1
  42. package/lib/views/settings-list.js +5 -3
  43. package/lib/views/settings-list.js.map +1 -1
  44. package/package.json +2 -1
@@ -1 +1 @@
1
- {"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/commands/model.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/commands/model.ts"],"names":[],"mappings":"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"}
@@ -92,6 +92,38 @@ export interface TuiLoopStatus {
92
92
  /** Original duration expression for a time-limited loop. */
93
93
  limit?: string;
94
94
  }
95
+ /** Lifecycle shown for one descendant subagent in the live roster. */
96
+ export type TuiSubagentPhase = 'starting' | 'running' | 'waiting' | 'completed' | 'error';
97
+ /** Latest child work folded from that child's own session log. */
98
+ export interface TuiSubagentActivity {
99
+ /** Compact tool or thinking label, already shortened for a one-line HUD. */
100
+ readonly text: string;
101
+ readonly status: 'running' | 'ok' | 'error' | 'thinking';
102
+ }
103
+ /** One origin-classified descendant projected into the terminal HUD. */
104
+ export interface TuiSubagentView {
105
+ readonly id: string;
106
+ readonly parentId?: string;
107
+ /** Edge distance from the active root session; direct children are `1`. */
108
+ readonly depth: number;
109
+ readonly label: string;
110
+ readonly mode?: 'one-shot' | 'continuable';
111
+ readonly phase: TuiSubagentPhase;
112
+ readonly activity: readonly TuiSubagentActivity[];
113
+ }
114
+ /** Live descendant roster for the active root session. */
115
+ export interface TuiSubagentRoster {
116
+ readonly agents: readonly TuiSubagentView[];
117
+ }
118
+ /** The descendant whose own transcript currently replaces the parent view. */
119
+ export interface TuiInspectedSubagent {
120
+ readonly id: string;
121
+ readonly label: string;
122
+ readonly phase: TuiSubagentPhase;
123
+ readonly mode?: 'one-shot' | 'continuable';
124
+ /** Continuable children accept composer follow-ups; one-shot runs stay read-only. */
125
+ readonly writable: boolean;
126
+ }
95
127
  /** Lightweight durable session row used by the welcome card and resume UI. */
96
128
  export interface TuiRecentSession {
97
129
  id: string;
@@ -153,6 +185,10 @@ export interface TuiService {
153
185
  setModel(model: string, reasoningEffort?: string): void;
154
186
  /** Update the optional process-local Loop indicator in the fixed footer. */
155
187
  setLoopStatus(status: TuiLoopStatus | undefined): void;
188
+ /** Replace the live descendant-subagent roster above the composer. */
189
+ setSubagents(roster: TuiSubagentRoster | undefined): void;
190
+ /** Open or leave a descendant transcript view without changing the active Agent. */
191
+ setInspectedSubagent(inspected: TuiInspectedSubagent | undefined): void;
156
192
  /** Replace the tool list shown by `/tools`. */
157
193
  setTools(tools: readonly {
158
194
  name: string;
@@ -203,6 +239,22 @@ export interface TuiService {
203
239
  * @returns disposer removing the listener.
204
240
  */
205
241
  onRewind(listener: () => void): () => void;
242
+ /**
243
+ * Subscribe to a request to open one descendant transcript.
244
+ * @returns disposer removing the listener.
245
+ */
246
+ onInspectSubagent(listener: (id: string) => void): () => void;
247
+ /**
248
+ * Subscribe to a request to return from a descendant transcript to the parent.
249
+ * @returns disposer removing the listener.
250
+ */
251
+ onInspectClose(listener: () => void): () => void;
252
+ /**
253
+ * Subscribe to a composer submission meant for the inspected continuable child.
254
+ * The provider does not resolve {@link readInput} for these submissions.
255
+ * @returns disposer removing the listener.
256
+ */
257
+ onInspectSubmit(listener: (submission: TuiSubmission) => void): () => void;
206
258
  /** Restore terminal state and settle a pending input read with null. */
207
259
  dispose(): void;
208
260
  }
@@ -1,5 +1,5 @@
1
1
  /** User-overridable application keybindings loaded from one JSON document. */
2
- export type TuiAction = 'external-editor' | 'retry' | 'paste-clipboard' | 'copy-prompt' | 'copy-line';
2
+ export type TuiAction = 'external-editor' | 'retry' | 'paste-clipboard' | 'copy-prompt' | 'copy-line' | 'inspect-subagent';
3
3
  export declare const DEFAULT_KEYBINDINGS: Readonly<Record<string, TuiAction>>;
4
4
  /** Load `{ "key-id": "action" }`; invalid rows are ignored independently. */
5
5
  export declare function loadKeybindings(path: string | undefined): Record<string, TuiAction>;
@@ -6,8 +6,9 @@ export const DEFAULT_KEYBINDINGS = Object.freeze({
6
6
  'ctrl+v': 'paste-clipboard',
7
7
  'alt+c': 'copy-prompt',
8
8
  'ctrl+alt+c': 'copy-line',
9
+ 'alt+a': 'inspect-subagent',
9
10
  });
10
- const ACTIONS = ['external-editor', 'retry', 'paste-clipboard', 'copy-prompt', 'copy-line'];
11
+ const ACTIONS = ['external-editor', 'retry', 'paste-clipboard', 'copy-prompt', 'copy-line', 'inspect-subagent'];
11
12
  /** Load `{ "key-id": "action" }`; invalid rows are ignored independently. */
12
13
  export function loadKeybindings(path) {
13
14
  const result = { ...DEFAULT_KEYBINDINGS };
@@ -1 +1 @@
1
- {"version":3,"file":"keybindings-config.js","sourceRoot":"","sources":["../../src/input/keybindings-config.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAE9E,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAItC,MAAM,CAAC,MAAM,mBAAmB,GAAwC,MAAM,CAAC,MAAM,CAAC;IACpF,QAAQ,EAAE,iBAAiB;IAC3B,OAAO,EAAE,OAAO;IAChB,QAAQ,EAAE,iBAAiB;IAC3B,OAAO,EAAE,aAAa;IACtB,YAAY,EAAE,WAAW;CAC1B,CAAC,CAAA;AAEF,MAAM,OAAO,GAAyB,CAAC,iBAAiB,EAAE,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,WAAW,CAAC,CAAA;AAEjH,6EAA6E;AAC7E,MAAM,UAAU,eAAe,CAAC,IAAwB;IACtD,MAAM,MAAM,GAA8B,EAAE,GAAG,mBAAmB,EAAE,CAAA;IACpE,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,MAAM,CAAA;IACrC,IAAI,CAAC;QACH,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAA;QAC9D,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO,MAAM,CAAA;QAChE,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACnD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAmB,CAAC;gBAAE,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,GAAG,MAAmB,CAAA;QAC1H,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAC,kEAAkE,CAAC,CAAC;IAC9E,OAAO,MAAM,CAAA;AACf,CAAC"}
1
+ {"version":3,"file":"keybindings-config.js","sourceRoot":"","sources":["../../src/input/keybindings-config.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAE9E,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAItC,MAAM,CAAC,MAAM,mBAAmB,GAAwC,MAAM,CAAC,MAAM,CAAC;IACpF,QAAQ,EAAE,iBAAiB;IAC3B,OAAO,EAAE,OAAO;IAChB,QAAQ,EAAE,iBAAiB;IAC3B,OAAO,EAAE,aAAa;IACtB,YAAY,EAAE,WAAW;IACzB,OAAO,EAAE,kBAAkB;CAC5B,CAAC,CAAA;AAEF,MAAM,OAAO,GAAyB,CAAC,iBAAiB,EAAE,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,WAAW,EAAE,kBAAkB,CAAC,CAAA;AAErI,6EAA6E;AAC7E,MAAM,UAAU,eAAe,CAAC,IAAwB;IACtD,MAAM,MAAM,GAA8B,EAAE,GAAG,mBAAmB,EAAE,CAAA;IACpE,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,MAAM,CAAA;IACrC,IAAI,CAAC;QACH,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAA;QAC9D,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO,MAAM,CAAA;QAChE,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACnD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAmB,CAAC;gBAAE,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,GAAG,MAAmB,CAAA;QAC1H,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAC,kEAAkE,CAAC,CAAC;IAC9E,OAAO,MAAM,CAAA;AACf,CAAC"}
@@ -12,7 +12,7 @@
12
12
  */
13
13
  import type { Context } from '@deepseek-ai/cordis';
14
14
  import type { SessionEvent } from '@deepseek-ai/dsh-session';
15
- import { type TuiCommand, type TuiPrompt, type TuiNoticeOptions, type TuiRecentSession, type TuiService, type TuiSessionControls, type TuiSessionStats, type TuiStatus, type TuiLoopStatus, type TuiSubmission } from '../definition.ts';
15
+ import { type TuiCommand, type TuiPrompt, type TuiNoticeOptions, type TuiRecentSession, type TuiService, type TuiSessionControls, type TuiSessionStats, type TuiStatus, type TuiInspectedSubagent, type TuiLoopStatus, type TuiSubagentRoster, type TuiSubmission } from '../definition.ts';
16
16
  import { type DirReader, type PathSearcher } from '../views/path-complete.ts';
17
17
  import { type ClipboardReader, type ClipboardWriter } from '../input/clipboard.ts';
18
18
  import { type TuiPrefs } from '../views/settings-list.ts';
@@ -83,6 +83,8 @@ export declare class LocalTui implements TuiService {
83
83
  setStatus(status: TuiStatus): void;
84
84
  setModel(model: string, reasoningEffort?: string): void;
85
85
  setLoopStatus(status: TuiLoopStatus | undefined): void;
86
+ setSubagents(roster: TuiSubagentRoster | undefined): void;
87
+ setInspectedSubagent(inspected: TuiInspectedSubagent | undefined): void;
86
88
  setTools(tools: readonly ToolInfo[]): void;
87
89
  setCommands(commands: readonly TuiCommand[]): void;
88
90
  notice(text: string, options?: TuiNoticeOptions): void;
@@ -107,6 +109,9 @@ export declare class LocalTui implements TuiService {
107
109
  onInterrupt(listener: () => void): () => void;
108
110
  onQueueEdit(listener: () => void): () => void;
109
111
  onRewind(listener: () => void): () => void;
112
+ onInspectSubagent(listener: (id: string) => void): () => void;
113
+ onInspectClose(listener: () => void): () => void;
114
+ onInspectSubmit(listener: (submission: TuiSubmission) => void): () => void;
110
115
  dispose(): void;
111
116
  /** Re-render the current frame (resize reflow). */
112
117
  refresh(): void;
@@ -22,7 +22,7 @@ import { buildCopyTargets, extractCopyTarget, parseCopyKind } from "../views/cop
22
22
  import { applyHistorySearchEvent, createHistorySearch, hitTestHistorySearch, } from "../views/history-search.js";
23
23
  import { InputEditor, lineEnd, lineStart } from "../input/editor.js";
24
24
  import { applySettingsEvent, createSettings, hitTestSettings, selectSetting, tuiSettingItems, } from "../views/settings-list.js";
25
- import { applyEvent, blockLines, initialTranscript, replayEvents, renderView, TRANSCRIPT_FAST_SCROLL, TRANSCRIPT_WHEEL_SCROLL, } from "../views/event-views.js";
25
+ import { applyEvent, blockLines, hitTestSubagentRoster, initialTranscript, replayEvents, renderView, TRANSCRIPT_FAST_SCROLL, TRANSCRIPT_WHEEL_SCROLL, } from "../views/event-views.js";
26
26
  import { flushPending, MOUSE_TRACKING_OFF, MOUSE_TRACKING_ON, parseKeys } from "../input/keys.js";
27
27
  import { LineRenderer } from "../chrome/renderer.js";
28
28
  import { hitTestEditor } from "../chrome/box.js";
@@ -82,6 +82,9 @@ export class LocalTui {
82
82
  #interrupts = new Set();
83
83
  #queueEdits = new Set();
84
84
  #rewinds = new Set();
85
+ #inspects = new Set();
86
+ #inspectCloses = new Set();
87
+ #inspectSubmits = new Set();
85
88
  #disposed = false;
86
89
  #pendingKeys = '';
87
90
  #escapeTimer = null;
@@ -125,7 +128,10 @@ export class LocalTui {
125
128
  #sessionStats;
126
129
  #sessionControls;
127
130
  #loopStatus;
131
+ #subagents;
132
+ #inspected;
128
133
  #editorHit = null;
134
+ #chromeHit = null;
129
135
  #overlayHit = null;
130
136
  #trueColor;
131
137
  #copy;
@@ -229,6 +235,33 @@ export class LocalTui {
229
235
  if (this.#tty)
230
236
  this.#render();
231
237
  }
238
+ setSubagents(roster) {
239
+ this.#subagents = roster === undefined
240
+ ? undefined
241
+ : { agents: roster.agents.map(agent => ({ ...agent, activity: [...agent.activity] })) };
242
+ const inspected = this.#inspected;
243
+ if (inspected !== undefined) {
244
+ const current = this.#subagents?.agents.find(agent => agent.id === inspected.id);
245
+ if (current !== undefined) {
246
+ this.#inspected = {
247
+ id: current.id,
248
+ label: current.label,
249
+ phase: current.phase,
250
+ ...(current.mode === undefined ? {} : { mode: current.mode }),
251
+ writable: current.mode === 'continuable',
252
+ };
253
+ }
254
+ }
255
+ this.#syncTick();
256
+ if (this.#tty)
257
+ this.#render();
258
+ }
259
+ setInspectedSubagent(inspected) {
260
+ this.#inspected = inspected === undefined ? undefined : { ...inspected };
261
+ this.#syncTick();
262
+ if (this.#tty)
263
+ this.#render();
264
+ }
232
265
  setTools(tools) {
233
266
  this.#tools = tools.map((tool) => ({ name: tool.name, description: tool.description }));
234
267
  }
@@ -424,6 +457,18 @@ export class LocalTui {
424
457
  this.#rewinds.add(listener);
425
458
  return () => { this.#rewinds.delete(listener); };
426
459
  }
460
+ onInspectSubagent(listener) {
461
+ this.#inspects.add(listener);
462
+ return () => { this.#inspects.delete(listener); };
463
+ }
464
+ onInspectClose(listener) {
465
+ this.#inspectCloses.add(listener);
466
+ return () => { this.#inspectCloses.delete(listener); };
467
+ }
468
+ onInspectSubmit(listener) {
469
+ this.#inspectSubmits.add(listener);
470
+ return () => { this.#inspectSubmits.delete(listener); };
471
+ }
427
472
  dispose() {
428
473
  if (this.#disposed)
429
474
  return;
@@ -534,7 +579,9 @@ export class LocalTui {
534
579
  #busy() {
535
580
  if (this.#state.status !== 'idle')
536
581
  return true;
537
- return this.#state.blocks.some((block) => block.kind === 'tool' && block.status === 'running');
582
+ if (this.#state.blocks.some((block) => block.kind === 'tool' && block.status === 'running'))
583
+ return true;
584
+ return this.#subagents?.agents.some(agent => agent.phase === 'running' || agent.phase === 'starting') === true;
538
585
  }
539
586
  #syncTick() {
540
587
  if (!this.#tty)
@@ -601,6 +648,8 @@ export class LocalTui {
601
648
  ...(this.#sessionStats === undefined ? {} : { sessionStats: this.#sessionStats }),
602
649
  ...(this.#sessionControls === undefined ? {} : { sessionControls: this.#sessionControls }),
603
650
  ...(this.#loopStatus === undefined ? {} : { loopStatus: this.#loopStatus }),
651
+ ...(this.#subagents === undefined ? {} : { subagents: this.#subagents }),
652
+ ...(this.#inspected === undefined ? {} : { inspected: this.#inspected }),
604
653
  statusBar: this.#statusBar,
605
654
  ...(this.#prompt === null ? {} : { promptSelector: this.#prompt }),
606
655
  ...(this.#settings !== null
@@ -615,6 +664,7 @@ export class LocalTui {
615
664
  this.#focusBlock = undefined;
616
665
  this.#editorHit = frame.editor ?? null;
617
666
  this.#overlayHit = frame.overlay ?? null;
667
+ this.#chromeHit = frame.chrome ?? null;
618
668
  this.#syncScroll(frame.transcript);
619
669
  this.#renderer.render(frame);
620
670
  }
@@ -898,6 +948,10 @@ export class LocalTui {
898
948
  return;
899
949
  }
900
950
  }
951
+ if (this.#inspected !== undefined && this.#inspected.writable !== true && event.type === 'text'
952
+ && this.#prompt === null && this.#settings === null && this.#copySelector === null && this.#search === null) {
953
+ return;
954
+ }
901
955
  if (event.type === 'key' && event.id === 'ctrl+c') {
902
956
  if (this.#prompt !== null) {
903
957
  this.#finishPrompt(null);
@@ -966,6 +1020,17 @@ export class LocalTui {
966
1020
  return;
967
1021
  }
968
1022
  if (event.type === 'key' && event.id === 'escape') {
1023
+ if (this.#inspected !== undefined) {
1024
+ if (this.#inspected.writable === true && (this.#editor.text !== '' || this.#images.length > 0)) {
1025
+ this.#editor.clear();
1026
+ this.#images = [];
1027
+ this.#ac = null;
1028
+ this.#render();
1029
+ return;
1030
+ }
1031
+ this.#closeInspect();
1032
+ return;
1033
+ }
969
1034
  if (this.#state.status !== 'idle' || this.#pending === null
970
1035
  || this.#editor.text !== '' || this.#images.length > 0) {
971
1036
  this.#lastEscapeTime = 0;
@@ -1199,6 +1264,8 @@ export class LocalTui {
1199
1264
  }
1200
1265
  #handleMouse(event) {
1201
1266
  if (event.leftClick) {
1267
+ if (this.#clickChrome(event.row))
1268
+ return;
1202
1269
  if (this.#clickOverlay(event.row))
1203
1270
  return;
1204
1271
  this.#clickEditor(event.row, event.col);
@@ -1230,6 +1297,68 @@ export class LocalTui {
1230
1297
  }
1231
1298
  this.#scrollBy(dir < 0 ? -TRANSCRIPT_WHEEL_SCROLL : TRANSCRIPT_WHEEL_SCROLL, true);
1232
1299
  }
1300
+ #clickChrome(row) {
1301
+ const hit = this.#chromeHit;
1302
+ if (hit === undefined || hit === null)
1303
+ return false;
1304
+ const inspect = hit.inspect;
1305
+ if (inspect !== undefined && row >= inspect.start && row < inspect.start + inspect.rows) {
1306
+ this.#closeInspect();
1307
+ return true;
1308
+ }
1309
+ const roster = hit.subagents;
1310
+ if (roster === undefined)
1311
+ return false;
1312
+ const localRow = row - roster.start;
1313
+ if (localRow < 0 || localRow >= roster.rows)
1314
+ return false;
1315
+ if (localRow < roster.headerRows) {
1316
+ void this.#pickSubagent();
1317
+ return true;
1318
+ }
1319
+ const id = hitTestSubagentRoster(roster.items, localRow);
1320
+ if (id === undefined)
1321
+ return true;
1322
+ if (this.#inspected?.id === id)
1323
+ this.#closeInspect();
1324
+ else
1325
+ this.#openInspect(id);
1326
+ return true;
1327
+ }
1328
+ #openInspect(id) {
1329
+ for (const listener of this.#inspects)
1330
+ listener(id);
1331
+ }
1332
+ #closeInspect() {
1333
+ if (this.#inspected === undefined)
1334
+ return;
1335
+ for (const listener of this.#inspectCloses)
1336
+ listener();
1337
+ }
1338
+ async #pickSubagent() {
1339
+ const agents = this.#subagents?.agents ?? [];
1340
+ if (agents.length === 0) {
1341
+ this.notice('No subagents are available in this session.');
1342
+ return;
1343
+ }
1344
+ const initialValue = this.#inspected?.id ?? agents[0]?.id;
1345
+ const answer = await this.prompt({
1346
+ title: 'Agents',
1347
+ question: 'Open a subagent transcript',
1348
+ options: agents.map(agent => ({
1349
+ label: agent.label,
1350
+ value: agent.id,
1351
+ description: agent.activity.at(-1)?.text ?? agent.phase,
1352
+ })),
1353
+ ...(initialValue === undefined ? {} : { initialValue }),
1354
+ allowCustom: false,
1355
+ ...(agents.length > 8 ? { presentation: 'fullscreen-list', filterable: true } : {}),
1356
+ submitLabel: 'open',
1357
+ });
1358
+ if (answer === null || answer === '')
1359
+ return;
1360
+ this.#openInspect(answer);
1361
+ }
1233
1362
  #clickOverlay(row) {
1234
1363
  const hit = this.#overlayHit;
1235
1364
  if (hit === null)
@@ -1550,6 +1679,11 @@ export class LocalTui {
1550
1679
  return;
1551
1680
  }
1552
1681
  if (command.kind === 'submit') {
1682
+ if (this.#inspected !== undefined) {
1683
+ if (this.#inspected.writable === true)
1684
+ this.#submitInspect(command.text);
1685
+ return;
1686
+ }
1553
1687
  this.#submit(command.text);
1554
1688
  return;
1555
1689
  }
@@ -1719,6 +1853,36 @@ export class LocalTui {
1719
1853
  }
1720
1854
  this.#render();
1721
1855
  }
1856
+ #submitInspect(text) {
1857
+ const images = this.#images.map(image => ({ ...image }));
1858
+ const submittedText = images.length > 0 ? text.trim() : text;
1859
+ const historyText = images.reduce((value, image, index) => value.replaceAll(imageMarker(index, image), ''), submittedText)
1860
+ .replace(/[ \t]{2,}/gu, ' ')
1861
+ .trim();
1862
+ if (historyText !== '' && this.#history[this.#history.length - 1] !== historyText) {
1863
+ this.#history.push(historyText);
1864
+ this.#historyStore?.add(historyText);
1865
+ }
1866
+ this.#historyIndex = 0;
1867
+ this.#draft = '';
1868
+ this.#editor.setText('');
1869
+ this.#images = [];
1870
+ this.#ac = null;
1871
+ this.#search = null;
1872
+ this.#followTail();
1873
+ const slash = images.length === 0 ? parseSlashInput(submittedText) : null;
1874
+ if (slash !== null) {
1875
+ this.#runSlash(slash.name, slash.args);
1876
+ return;
1877
+ }
1878
+ if (submittedText === '' && images.length === 0) {
1879
+ this.#render();
1880
+ return;
1881
+ }
1882
+ for (const listener of this.#inspectSubmits)
1883
+ listener({ text: submittedText, images });
1884
+ this.#render();
1885
+ }
1722
1886
  #runSlash(name, args = '') {
1723
1887
  if (name === '') {
1724
1888
  this.#render();
@@ -1755,6 +1919,11 @@ export class LocalTui {
1755
1919
  return;
1756
1920
  }
1757
1921
  if (!BUILTIN_SLASH_COMMANDS.some((entry) => entry.name === command.name)) {
1922
+ if (this.#inspected !== undefined) {
1923
+ this.#notice('Return to the parent session to run /' + command.name + '.');
1924
+ this.#render();
1925
+ return;
1926
+ }
1758
1927
  const raw = '/' + name + (args === '' ? '' : ' ' + args);
1759
1928
  const pending = this.#pending;
1760
1929
  if (pending !== null) {
@@ -1874,6 +2043,10 @@ export class LocalTui {
1874
2043
  #runAction(action) {
1875
2044
  if (this.#prompt !== null || this.#settings !== null || this.#copySelector !== null)
1876
2045
  return;
2046
+ if (action === 'inspect-subagent') {
2047
+ void this.#pickSubagent();
2048
+ return;
2049
+ }
1877
2050
  if (action === 'retry') {
1878
2051
  this.#submit('/retry');
1879
2052
  return;