@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.
- package/README.md +1 -0
- package/lib/CHANGELOG.md +29 -1
- package/lib/chrome/markdown.js +2 -2
- package/lib/chrome/markdown.js.map +1 -1
- package/lib/chrome/renderer.d.ts +16 -0
- package/lib/chrome/renderer.js.map +1 -1
- package/lib/chrome/theme.d.ts +3 -3
- package/lib/chrome/theme.js +3 -3
- package/lib/chrome/theme.js.map +1 -1
- package/lib/chrome/tool-renderers.js +64 -4
- package/lib/chrome/tool-renderers.js.map +1 -1
- package/lib/chrome/welcome-tips.js +2 -1
- package/lib/chrome/welcome-tips.js.map +1 -1
- package/lib/commands/auth.d.ts +21 -4
- package/lib/commands/auth.js +485 -26
- package/lib/commands/auth.js.map +1 -1
- package/lib/commands/model.js +4 -1
- package/lib/commands/model.js.map +1 -1
- package/lib/definition.d.ts +52 -0
- package/lib/input/keybindings-config.d.ts +1 -1
- package/lib/input/keybindings-config.js +2 -1
- package/lib/input/keybindings-config.js.map +1 -1
- package/lib/runtime/provider-local.d.ts +6 -1
- package/lib/runtime/provider-local.js +175 -2
- package/lib/runtime/provider-local.js.map +1 -1
- package/lib/runtime/runner.js +2 -0
- package/lib/runtime/runner.js.map +1 -1
- package/lib/session/session-controller.d.ts +5 -0
- package/lib/session/session-controller.js +254 -7
- package/lib/session/session-controller.js.map +1 -1
- package/lib/session/subagent-roster.d.ts +51 -0
- package/lib/session/subagent-roster.js +316 -0
- package/lib/session/subagent-roster.js.map +1 -0
- package/lib/views/autocomplete.d.ts +8 -0
- package/lib/views/autocomplete.js +26 -1
- package/lib/views/autocomplete.js.map +1 -1
- package/lib/views/event-views.d.ts +24 -1
- package/lib/views/event-views.js +170 -24
- package/lib/views/event-views.js.map +1 -1
- package/lib/views/hotkeys.js +1 -0
- package/lib/views/hotkeys.js.map +1 -1
- package/lib/views/settings-list.js +5 -3
- package/lib/views/settings-list.js.map +1 -1
- package/package.json +2 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/commands/model.ts"],"names":[],"mappings":"AAAA,wEAAwE;AAKxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAGxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAEpD,MAAM,CAAC,MAAM,IAAI,GAAG,qBAAqB,CAAA;AACzC,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,UAAU,EAAE,cAAc,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;AAEhE,MAAM,2BAA2B,GAAG,CAAC,CAAA;AAErC,SAAS,WAAW,CAAC,WAAmB;IACtC,MAAM,UAAU,GAAG,WAAW,GAAG,2BAA2B,CAAA;IAC5D,OAAO;QACL,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,iBAA0B,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnE,YAAY,EAAE,SAAkB;QAChC,UAAU,EAAE,UAAU;QACtB,WAAW,EAAE,KAAK;KACnB,CAAA;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,GAAW,EAAE,MAAyB;IACtD,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACvD,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;AACzC,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,GAAY,EAAE,UAA6B;IACpE,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,CAAA;IACtF,MAAM,SAAS,GAAG,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,CAAA;IACzC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,oCAAoC,EAAE,CAAA;IAChG,MAAM,OAAO,GAAG,GAAG,CAAC,YAAY,CAAC,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA;IAC5D,IAAI,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAA;IAC/B,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,MAAM,WAAW,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC;YACvC,GAAG,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC;YAChC,KAAK,EAAE,gBAAgB;YACvB,QAAQ,EAAE,mBAAmB;YAC7B,OAAO,EAAE,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/commands/model.ts"],"names":[],"mappings":"AAAA,wEAAwE;AAKxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAGxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAEpD,MAAM,CAAC,MAAM,IAAI,GAAG,qBAAqB,CAAA;AACzC,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,UAAU,EAAE,cAAc,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;AAEhE,MAAM,2BAA2B,GAAG,CAAC,CAAA;AAErC,SAAS,WAAW,CAAC,WAAmB;IACtC,MAAM,UAAU,GAAG,WAAW,GAAG,2BAA2B,CAAA;IAC5D,OAAO;QACL,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,iBAA0B,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnE,YAAY,EAAE,SAAkB;QAChC,UAAU,EAAE,UAAU;QACtB,WAAW,EAAE,KAAK;KACnB,CAAA;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,GAAW,EAAE,MAAyB;IACtD,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACvD,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;AACzC,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,GAAY,EAAE,UAA6B;IACpE,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,CAAA;IACtF,MAAM,SAAS,GAAG,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,CAAA;IACzC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,oCAAoC,EAAE,CAAA;IAChG,MAAM,OAAO,GAAG,GAAG,CAAC,YAAY,CAAC,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA;IAC5D,IAAI,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAA;IAC/B,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,MAAM,WAAW,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC;YACvC,GAAG,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC;YAChC,KAAK,EAAE,gBAAgB;YACvB,QAAQ,EAAE,mBAAmB;YAC7B,OAAO,EAAE,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBAC/B,KAAK,EAAE,KAAK,CAAC,EAAE,KAAK,mBAAmB,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE;gBAC/D,KAAK,EAAE,KAAK,CAAC,EAAE;aAChB,CAAC,CAAC;YACH,YAAY,EAAE,OAAO,CAAC,QAAQ;YAC9B,MAAM,EAAE,UAAU,CAAC,MAAM;SAC1B,CAAC,CAAA;QACF,IAAI,WAAW,KAAK,IAAI;YAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAA;QACpD,QAAQ,GAAG,QAAQ,CAAC,WAAW,EAAE,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAA;QAClE,IAAI,QAAQ,KAAK,SAAS,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,QAAQ,CAAC,EAAE,CAAC;YAC9E,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,qBAAqB,WAAW,EAAE,EAAE,CAAA;QACpE,CAAC;IACH,CAAC;IACD,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,iCAAiC,EAAE,CAAA;IAC7F,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAA;IACjD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,+BAA+B,QAAQ,GAAG,EAAE,CAAA;IACnG,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC;QACpC,GAAG,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC;QAC7B,KAAK,EAAE,OAAO;QACd,QAAQ,EAAE,sBAAsB,QAAQ,EAAE;QAC1C,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QACjG,GAAG,CAAC,QAAQ,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzE,MAAM,EAAE,UAAU,CAAC,MAAM;KAC1B,CAAC,CAAA;IACF,IAAI,QAAQ,KAAK,IAAI;QAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAA;IACjD,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAA;IAC/D,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE,CAAC;QACrE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,kBAAkB,QAAQ,EAAE,EAAE,CAAA;IAC9D,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,gBAAgB,CAAC,QAAQ,EAAE,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,CAAA;IAC/E,IAAI,eAAe,GAAG,OAAO,CAAC,eAAe,CAAA;IAC7C,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QACjC,eAAe,GAAG,SAAS,CAAA;IAC7B,CAAC;SAAM,CAAC;QACN,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC;YACrC,GAAG,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC;YAC7C,KAAK,EAAE,kBAAkB;YACzB,QAAQ,EAAE,yBAAyB;YACnC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;YAC7H,GAAG,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC;YACnF,MAAM,EAAE,UAAU,CAAC,MAAM;SAC1B,CAAC,CAAA;QACF,IAAI,SAAS,KAAK,IAAI;YAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAA;QAClD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAA;QACvE,MAAM,QAAQ,GAAG,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;QAC/C,IAAI,QAAQ,KAAK,SAAS,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5D,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,6BAA6B,SAAS,EAAE,EAAE,CAAA;QAC1E,CAAC;QACD,eAAe,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAA;IAC/C,CAAC;IACD,MAAM,SAAS,GAAmB;QAChC,QAAQ;QACR,KAAK;QACL,GAAG,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC;KAC9D,CAAA;IACD,MAAM,GAAG,CAAC,YAAY,CAAC,eAAe,CAAC,UAAU,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,CAAA;IACzE,OAAO;QACL,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,UAAU,QAAQ,IAAI,KAAK,GAAG,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,eAAe,CAAC,GAAG,EAAE;KAC3G,CAAA;AACH,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,GAAY;IAChC,gBAAgB,CAAC,GAAG,EAAE;QACpB,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,8CAA8C,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,UAAU,CAAC,EAAE;KACpI,EAAE,qBAAqB,CAAC,CAAA;AAC3B,CAAC"}
|
package/lib/definition.d.ts
CHANGED
|
@@ -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;
|
|
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
|
-
|
|
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;
|