@agi-fans/dsh-tui 0.17.0 → 0.19.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/lib/CHANGELOG.md +67 -1
- package/lib/chrome/box.d.ts +2 -0
- package/lib/chrome/box.js +5 -1
- package/lib/chrome/box.js.map +1 -1
- package/lib/chrome/main-screen-renderer.d.ts +61 -11
- package/lib/chrome/main-screen-renderer.js +1674 -71
- package/lib/chrome/main-screen-renderer.js.map +1 -1
- package/lib/chrome/markdown.js +21 -13
- package/lib/chrome/markdown.js.map +1 -1
- package/lib/chrome/renderer.d.ts +75 -0
- package/lib/chrome/renderer.js.map +1 -1
- package/lib/chrome/status-config.d.ts +4 -1
- package/lib/chrome/status-config.js.map +1 -1
- package/lib/chrome/theme.d.ts +18 -0
- package/lib/chrome/theme.js +18 -0
- package/lib/chrome/theme.js.map +1 -1
- package/lib/chrome/tool-args.d.ts +24 -1
- package/lib/chrome/tool-args.js +40 -1
- package/lib/chrome/tool-args.js.map +1 -1
- package/lib/chrome/tool-renderers.d.ts +11 -0
- package/lib/chrome/tool-renderers.js +55 -7
- package/lib/chrome/tool-renderers.js.map +1 -1
- package/lib/chrome/welcome-tips.js +1 -1
- package/lib/chrome/welcome-tips.js.map +1 -1
- package/lib/commands/auth.js +4 -2
- package/lib/commands/auth.js.map +1 -1
- package/lib/commands/jobs.d.ts +2 -2
- package/lib/commands/jobs.js +2 -2
- package/lib/commands/jobs.js.map +1 -1
- package/lib/definition.d.ts +62 -7
- package/lib/definition.js.map +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- 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/input/keys.d.ts +7 -0
- package/lib/input/keys.js +11 -4
- package/lib/input/keys.js.map +1 -1
- package/lib/runtime/provider-local.d.ts +63 -11
- package/lib/runtime/provider-local.js +506 -91
- package/lib/runtime/provider-local.js.map +1 -1
- package/lib/runtime/session-runtime.d.ts +9 -1
- package/lib/runtime/session-runtime.js +2 -2
- package/lib/runtime/session-runtime.js.map +1 -1
- package/lib/runtime/startup-notices.js +6 -9
- package/lib/runtime/startup-notices.js.map +1 -1
- package/lib/runtime/tool-presentation.js +44 -31
- package/lib/runtime/tool-presentation.js.map +1 -1
- package/lib/session/feature-toggles.d.ts +100 -0
- package/lib/session/feature-toggles.js +170 -0
- package/lib/session/feature-toggles.js.map +1 -0
- package/lib/session/fold-policy.d.ts +21 -0
- package/lib/session/fold-policy.js +15 -0
- package/lib/session/fold-policy.js.map +1 -0
- package/lib/session/job-notice.d.ts +6 -2
- package/lib/session/job-notice.js +44 -3
- package/lib/session/job-notice.js.map +1 -1
- package/lib/session/session-configuration.d.ts +0 -3
- package/lib/session/session-configuration.js +0 -4
- package/lib/session/session-configuration.js.map +1 -1
- package/lib/session/session-controller.d.ts +6 -4
- package/lib/session/session-controller.js +147 -55
- package/lib/session/session-controller.js.map +1 -1
- package/lib/session/session-library.d.ts +20 -0
- package/lib/session/session-library.js +52 -0
- package/lib/session/session-library.js.map +1 -1
- package/lib/session/subagent-roster.js +3 -3
- package/lib/session/subagent-roster.js.map +1 -1
- package/lib/session/subagent-tracker.d.ts +2 -9
- package/lib/session/subagent-tracker.js +3 -4
- package/lib/session/subagent-tracker.js.map +1 -1
- package/lib/session/tui-settings.d.ts +46 -18
- package/lib/session/tui-settings.js +59 -39
- package/lib/session/tui-settings.js.map +1 -1
- package/lib/views/at-complete.d.ts +2 -0
- package/lib/views/at-complete.js +2 -2
- package/lib/views/at-complete.js.map +1 -1
- package/lib/views/event-views.d.ts +26 -2
- package/lib/views/event-views.js +162 -48
- package/lib/views/event-views.js.map +1 -1
- package/lib/views/hotkeys.d.ts +2 -0
- package/lib/views/hotkeys.js +7 -3
- package/lib/views/hotkeys.js.map +1 -1
- package/lib/views/settings-list.d.ts +12 -6
- package/lib/views/settings-list.js +41 -18
- package/lib/views/settings-list.js.map +1 -1
- package/lib/views/transcript-export.js +0 -2
- package/lib/views/transcript-export.js.map +1 -1
- package/lib/views/transcript-render.d.ts +133 -18
- package/lib/views/transcript-render.js +1179 -112
- package/lib/views/transcript-render.js.map +1 -1
- package/lib/views/transcript-types.d.ts +79 -1
- package/lib/views/transcript-types.js +11 -0
- package/lib/views/transcript-types.js.map +1 -1
- package/lib/views/workspace-changes.d.ts +27 -0
- package/lib/views/workspace-changes.js +128 -0
- package/lib/views/workspace-changes.js.map +1 -0
- package/package.json +40 -38
package/lib/commands/jobs.js
CHANGED
|
@@ -45,7 +45,7 @@ function killJob(ctx, invocation) {
|
|
|
45
45
|
if (id === '')
|
|
46
46
|
return { kind: 'error', text: 'Usage: /jobs kill <id>' };
|
|
47
47
|
try {
|
|
48
|
-
const outcome = ctx.jobs.kill(JobId(id), invocation.agent, 'stopped from /jobs');
|
|
48
|
+
const outcome = ctx.jobs.kill(JobId(id), invocation.agent.session.id, 'stopped from /jobs');
|
|
49
49
|
return {
|
|
50
50
|
kind: 'success',
|
|
51
51
|
text: outcome === 'requested' ? `Stopping ${id}.` : `${id} has already finished.`,
|
|
@@ -58,7 +58,7 @@ function killJob(ctx, invocation) {
|
|
|
58
58
|
function showJobs(ctx, invocation) {
|
|
59
59
|
const raw = invocation.rawInput.trim();
|
|
60
60
|
if (raw === '') {
|
|
61
|
-
return { kind: 'success', text: jobsText(ctx.jobs.list(invocation.agent), Date.now()) };
|
|
61
|
+
return { kind: 'success', text: jobsText(ctx.jobs.list(invocation.agent.session.id), Date.now()) };
|
|
62
62
|
}
|
|
63
63
|
const [verb, ...rest] = raw.split(/\s+/u);
|
|
64
64
|
if (verb === 'kill') {
|
package/lib/commands/jobs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jobs.js","sourceRoot":"","sources":["../../src/commands/jobs.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EAAE,KAAK,
|
|
1
|
+
{"version":3,"file":"jobs.js","sourceRoot":"","sources":["../../src/commands/jobs.ts"],"names":[],"mappings":"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"}
|
package/lib/definition.d.ts
CHANGED
|
@@ -10,24 +10,53 @@
|
|
|
10
10
|
* @module @agi-fans/dsh-tui
|
|
11
11
|
*/
|
|
12
12
|
import type { SessionEvent } from '@deepseek-ai/dsh-session';
|
|
13
|
+
import type { WorkspaceChangesSummary } from '@deepseek-ai/dsh-workspace-changes';
|
|
13
14
|
import type { StreamDelta } from './views/event-views.ts';
|
|
15
|
+
import type { TuiPrefs } from './views/settings-list.ts';
|
|
14
16
|
import type { ImageMediaType } from '@deepseek-ai/dsh-attachment';
|
|
15
17
|
import type { TuiToolPresentation } from './chrome/tool-renderers.ts';
|
|
16
18
|
/** Context service name providers publish under. */
|
|
17
19
|
export declare const TUI_SERVICE = "tui";
|
|
18
20
|
/** Whole-agent liveness, mirroring the SDK session.status vocabulary. */
|
|
19
21
|
export type TuiStatus = 'idle' | 'running';
|
|
22
|
+
/** Why the controller is replacing the visible transcript. */
|
|
23
|
+
export type TuiTranscriptReplacement = 'initial' | 'new' | 'open' | 'refresh';
|
|
20
24
|
/** Command metadata contributed by the active agent's plugin scope. */
|
|
21
25
|
export interface TuiCommand {
|
|
22
26
|
name: string;
|
|
23
27
|
description: string;
|
|
24
28
|
inputHint?: string;
|
|
25
29
|
}
|
|
30
|
+
/** Whether direct output should interrupt transcript browsing. */
|
|
31
|
+
export interface TuiOutputOptions {
|
|
32
|
+
/** Reveal a requested result at the live tail, ending any inspection. */
|
|
33
|
+
focus?: boolean;
|
|
34
|
+
}
|
|
26
35
|
/** Presentation intent for a direct, non-session notice. */
|
|
27
|
-
export interface TuiNoticeOptions {
|
|
36
|
+
export interface TuiNoticeOptions extends TuiOutputOptions {
|
|
28
37
|
level?: 'info' | 'error';
|
|
29
38
|
/** Reserve a component frame for callers that explicitly own a panel. */
|
|
30
39
|
framed?: boolean;
|
|
40
|
+
/**
|
|
41
|
+
* The notice reports work inside the running turn — a background job
|
|
42
|
+
* settling — so it folds into the turn's run instead of splitting it. It is
|
|
43
|
+
* ignored when no turn is running: then it speaks to the reader directly.
|
|
44
|
+
*/
|
|
45
|
+
process?: boolean;
|
|
46
|
+
/**
|
|
47
|
+
* Durable id of what a process notice reports on — a job id, a retry id.
|
|
48
|
+
* A run is keyed by its first block, so notices sharing a run need to be
|
|
49
|
+
* told apart or two runs in one document collide on one key.
|
|
50
|
+
*/
|
|
51
|
+
processSource?: string;
|
|
52
|
+
/** Job settlement to merge into its visible originating tool call when identifiable. */
|
|
53
|
+
job?: {
|
|
54
|
+
id: string;
|
|
55
|
+
label: string;
|
|
56
|
+
startedAt: number;
|
|
57
|
+
status: 'completed' | 'failed' | 'killed';
|
|
58
|
+
detail?: string;
|
|
59
|
+
};
|
|
31
60
|
}
|
|
32
61
|
/** One terminal-owned human prompt used by approval and question adapters. */
|
|
33
62
|
export interface TuiPrompt {
|
|
@@ -217,8 +246,28 @@ export interface TuiAgentBehaviorSettingsBinding {
|
|
|
217
246
|
* Implementations must be single-consumer: one runner owns readInput().
|
|
218
247
|
*/
|
|
219
248
|
export interface TuiService {
|
|
220
|
-
/**
|
|
221
|
-
|
|
249
|
+
/**
|
|
250
|
+
* Render one session-log event (streamed as recorded).
|
|
251
|
+
*
|
|
252
|
+
* @param event - the appended event.
|
|
253
|
+
* @param presentation - tool presentation resolved for this event, when any.
|
|
254
|
+
* @param workspace - changed-file summary the host serves for a
|
|
255
|
+
* `workspace/changes` event; omitted when the plugin is unmounted or its
|
|
256
|
+
* recorder for the Session is gone, which renders the turn-only form.
|
|
257
|
+
*/
|
|
258
|
+
event(event: SessionEvent, presentation?: TuiToolPresentation, workspace?: WorkspaceChangesSummary): void;
|
|
259
|
+
/**
|
|
260
|
+
* Attach a changed-file summary to a turn block that was already rendered
|
|
261
|
+
* without one.
|
|
262
|
+
*
|
|
263
|
+
* The Harness files the summary only after appending its event, so the
|
|
264
|
+
* controller resolves it on the next microtask and enriches the block here
|
|
265
|
+
* instead of replaying the event.
|
|
266
|
+
*
|
|
267
|
+
* @param turn - the turn whose block receives the summary.
|
|
268
|
+
* @param summary - the summary the host serves for that turn.
|
|
269
|
+
*/
|
|
270
|
+
setWorkspaceSummary(turn: number, summary: WorkspaceChangesSummary): void;
|
|
222
271
|
/** Fold one live `agent/assistant-stream` chunk into the transcript. */
|
|
223
272
|
streamDelta(delta: StreamDelta): void;
|
|
224
273
|
/** Update the status line liveness. */
|
|
@@ -248,14 +297,20 @@ export interface TuiService {
|
|
|
248
297
|
toolCallContext(callId: string): string | undefined;
|
|
249
298
|
/** Append a direct UI/command result without fabricating a session event. */
|
|
250
299
|
notice(text: string, options?: TuiNoticeOptions): void;
|
|
251
|
-
/** Append
|
|
252
|
-
commandOutput(command: string, text: string): void;
|
|
300
|
+
/** Append command output; preserve the viewport unless focus is requested. */
|
|
301
|
+
commandOutput(command: string, text: string, options?: TuiOutputOptions): void;
|
|
253
302
|
/** Bind the product-owned Agent settings section; only one binding may be active. */
|
|
254
303
|
bindAgentBehaviorSettings?(binding: TuiAgentBehaviorSettingsBinding): () => void;
|
|
304
|
+
/** Currently applied preferences, for sibling rows that must honor them. */
|
|
305
|
+
prefs(): TuiPrefs;
|
|
255
306
|
/** Temporarily own the composer and collect one human answer. */
|
|
256
307
|
prompt(request: TuiPrompt): Promise<string | null>;
|
|
257
|
-
/**
|
|
258
|
-
|
|
308
|
+
/**
|
|
309
|
+
* Replace the transcript while retaining earlier terminal output. Opening a
|
|
310
|
+
* session adds a boundary; /new adds one only after transcript content.
|
|
311
|
+
* Initial presentation and refreshes omit it. Defaults to opening a session.
|
|
312
|
+
*/
|
|
313
|
+
replaceSession(events: readonly SessionEvent[], presentations?: ReadonlyMap<number, TuiToolPresentation>, status?: TuiStatus, reason?: TuiTranscriptReplacement): void;
|
|
259
314
|
/** Update session identity, recent rows, projected controls, and aggregate figures. */
|
|
260
315
|
setSession(info: {
|
|
261
316
|
id: string;
|
package/lib/definition.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definition.js","sourceRoot":"","sources":["../src/definition.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;
|
|
1
|
+
{"version":3,"file":"definition.js","sourceRoot":"","sources":["../src/definition.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AASH,oDAAoD;AACpD,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,CAAA"}
|
package/lib/index.d.ts
CHANGED
package/lib/index.js
CHANGED
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,cAAc,iBAAiB,CAAA;AAC/B,OAAO,EAAE,KAAK,EAAE,IAAI,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,cAAc,iBAAiB,CAAA;AAC/B,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAA"}
|
|
@@ -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' | 'inspect-subagent' | 'cycle-model-forward' | 'cycle-model-backward' | 'cycle-reasoning' | 'toggle-tools' | 'scroll-page-up' | 'scroll-page-down' | 'scroll-fast-up' | 'scroll-fast-down' | 'search-history' | 'search-transcript';
|
|
2
|
+
export type TuiAction = 'external-editor' | 'retry' | 'paste-clipboard' | 'copy-prompt' | 'copy-line' | 'inspect-subagent' | 'cycle-model-forward' | 'cycle-model-backward' | 'cycle-reasoning' | 'toggle-tools' | 'scroll-page-up' | 'scroll-page-down' | 'scroll-fast-up' | 'scroll-fast-down' | 'search-history' | 'search-transcript' | 'toggle-tool-details';
|
|
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>;
|
|
@@ -11,6 +11,7 @@ export const DEFAULT_KEYBINDINGS = Object.freeze({
|
|
|
11
11
|
'alt+p': 'cycle-model-backward',
|
|
12
12
|
'ctrl+t': 'cycle-reasoning',
|
|
13
13
|
'ctrl+o': 'toggle-tools',
|
|
14
|
+
'alt+o': 'toggle-tool-details',
|
|
14
15
|
'pageup': 'scroll-page-up',
|
|
15
16
|
'pagedown': 'scroll-page-down',
|
|
16
17
|
'shift+up': 'scroll-fast-up',
|
|
@@ -22,7 +23,7 @@ const ACTIONS = [
|
|
|
22
23
|
'external-editor', 'retry', 'paste-clipboard', 'copy-prompt', 'copy-line', 'inspect-subagent',
|
|
23
24
|
'cycle-model-forward', 'cycle-model-backward', 'cycle-reasoning',
|
|
24
25
|
'toggle-tools', 'scroll-page-up', 'scroll-page-down', 'scroll-fast-up', 'scroll-fast-down', 'search-history',
|
|
25
|
-
'search-transcript',
|
|
26
|
+
'search-transcript', 'toggle-tool-details',
|
|
26
27
|
];
|
|
27
28
|
/** Load `{ "key-id": "action" }`; invalid rows are ignored independently. */
|
|
28
29
|
export function loadKeybindings(path) {
|
|
@@ -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;AAOtC,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;IAC3B,QAAQ,EAAE,qBAAqB;IAC/B,OAAO,EAAE,sBAAsB;IAC/B,QAAQ,EAAE,iBAAiB;IAC3B,QAAQ,EAAE,cAAc;IACxB,QAAQ,EAAE,gBAAgB;IAC1B,UAAU,EAAE,kBAAkB;IAC9B,UAAU,EAAE,gBAAgB;IAC5B,YAAY,EAAE,kBAAkB;IAChC,QAAQ,EAAE,gBAAgB;IAC1B,QAAQ,EAAE,mBAAmB;CAC9B,CAAC,CAAA;AAEF,MAAM,OAAO,GAAyB;IACpC,iBAAiB,EAAE,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,WAAW,EAAE,kBAAkB;IAC7F,qBAAqB,EAAE,sBAAsB,EAAE,iBAAiB;IAChE,cAAc,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,gBAAgB;IAC5G,mBAAmB;
|
|
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;AAOtC,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;IAC3B,QAAQ,EAAE,qBAAqB;IAC/B,OAAO,EAAE,sBAAsB;IAC/B,QAAQ,EAAE,iBAAiB;IAC3B,QAAQ,EAAE,cAAc;IACxB,OAAO,EAAE,qBAAqB;IAC9B,QAAQ,EAAE,gBAAgB;IAC1B,UAAU,EAAE,kBAAkB;IAC9B,UAAU,EAAE,gBAAgB;IAC5B,YAAY,EAAE,kBAAkB;IAChC,QAAQ,EAAE,gBAAgB;IAC1B,QAAQ,EAAE,mBAAmB;CAC9B,CAAC,CAAA;AAEF,MAAM,OAAO,GAAyB;IACpC,iBAAiB,EAAE,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,WAAW,EAAE,kBAAkB;IAC7F,qBAAqB,EAAE,sBAAsB,EAAE,iBAAiB;IAChE,cAAc,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,gBAAgB;IAC5G,mBAAmB,EAAE,qBAAqB;CAC3C,CAAA;AAED,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"}
|
package/lib/input/keys.d.ts
CHANGED
|
@@ -15,6 +15,13 @@ export type KeyEvent = {
|
|
|
15
15
|
type: 'paste-start';
|
|
16
16
|
} | {
|
|
17
17
|
type: 'paste-end';
|
|
18
|
+
} | {
|
|
19
|
+
type: 'wheel';
|
|
20
|
+
direction: 'up' | 'down';
|
|
21
|
+
} | {
|
|
22
|
+
type: 'click';
|
|
23
|
+
row: number;
|
|
24
|
+
column: number;
|
|
18
25
|
};
|
|
19
26
|
/** Build `ctrl+shift+alt+name` from a CSI modifier parameter (1 = none). */
|
|
20
27
|
export declare function withMods(name: string, modifier: number): string;
|
package/lib/input/keys.js
CHANGED
|
@@ -95,12 +95,19 @@ function kittyEvent(code, modifier) {
|
|
|
95
95
|
return asEvent(withMods(String.fromCharCode(code), modifier));
|
|
96
96
|
return { type: 'key', id: withMods(`code${code}`, modifier) };
|
|
97
97
|
}
|
|
98
|
-
/**
|
|
98
|
+
/** Decode wheel and left-button presses; consume other SGR mouse reports. */
|
|
99
99
|
function parseSgr(body) {
|
|
100
100
|
// body is the CSI payload after '['
|
|
101
101
|
const match = /^<(\d+);(\d+);(\d+)([Mm])/.exec(body);
|
|
102
|
-
if (match !== null)
|
|
103
|
-
|
|
102
|
+
if (match !== null) {
|
|
103
|
+
const button = Number(match[1]) & ~28; // Ignore Shift, Alt and Ctrl modifiers.
|
|
104
|
+
const event = match[4] === 'M' && (button === 64 || button === 65)
|
|
105
|
+
? { type: 'wheel', direction: button === 64 ? 'up' : 'down' }
|
|
106
|
+
: match[4] === 'M' && button === 0
|
|
107
|
+
? { type: 'click', row: Number(match[3]) - 1, column: Number(match[2]) - 1 }
|
|
108
|
+
: undefined;
|
|
109
|
+
return { used: 1 + match[0].length, ...(event === undefined ? {} : { event }) };
|
|
110
|
+
}
|
|
104
111
|
if (body.length < 32 && /^<\d*(?:;\d*){0,2}$/.test(body))
|
|
105
112
|
return 'partial';
|
|
106
113
|
return null;
|
|
@@ -116,7 +123,7 @@ function parseCsi(seq) {
|
|
|
116
123
|
return 'partial';
|
|
117
124
|
if (parsed === null)
|
|
118
125
|
return null;
|
|
119
|
-
return { event:
|
|
126
|
+
return { event: parsed.event, used: parsed.used };
|
|
120
127
|
}
|
|
121
128
|
const match = /^(?:(\d+)?(?:;(\d+))?(?:;(\d+))?)?([A-Za-z~u])/.exec(body);
|
|
122
129
|
if (match === null) {
|
package/lib/input/keys.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keys.js","sourceRoot":"","sources":["../../src/input/keys.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"keys.js","sourceRoot":"","sources":["../../src/input/keys.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,7 +13,8 @@
|
|
|
13
13
|
import { HerdrAgentReporter } from './herdr-agent.ts';
|
|
14
14
|
import type { Context } from '@deepseek-ai/cordis';
|
|
15
15
|
import type { SessionEvent } from '@deepseek-ai/dsh-session';
|
|
16
|
-
import
|
|
16
|
+
import type { WorkspaceChangesSummary } from '@deepseek-ai/dsh-workspace-changes';
|
|
17
|
+
import { type TuiAgentBehaviorSettingsBinding, type TuiCommand, type TuiOutputOptions, type TuiPrompt, type TuiNoticeOptions, type TuiRecentSession, type TuiService, type TuiSessionControls, type TuiSessionStats, type TuiStatus, type TuiTranscriptReplacement, type TuiInputImage, type TuiInspectedSubagent, type TuiLoopStatus, type TuiSubagentRoster, type TuiSubmission } from '../definition.ts';
|
|
17
18
|
import { type DirReader, type PathSearcher } from '../views/path-complete.ts';
|
|
18
19
|
import { type FileSearcher, type SessionSearcher } from '../views/at-complete.ts';
|
|
19
20
|
import { type ClipboardReader, type ClipboardWriter } from '../input/clipboard.ts';
|
|
@@ -23,21 +24,64 @@ import { type RenderSink } from '../chrome/renderer.ts';
|
|
|
23
24
|
import { type ThemeName } from '../chrome/theme.ts';
|
|
24
25
|
import type { ToolInfo } from '../chrome/tools-list.ts';
|
|
25
26
|
import { type TuiToolPresentation } from '../chrome/tool-renderers.ts';
|
|
27
|
+
import { type TuiSettings } from '../session/tui-settings.ts';
|
|
28
|
+
import z from '@deepseek-ai/schemastery';
|
|
26
29
|
import { type ClipboardFileReader, type ClipboardImageReader, type ImagePathReader } from '../input/image-paste.ts';
|
|
27
30
|
export declare const name = "omdsh-tui";
|
|
28
|
-
/** Plugin config: the model label
|
|
29
|
-
export interface Config {
|
|
31
|
+
/** Plugin config: the model label, event paths, and the live TUI preferences. */
|
|
32
|
+
export interface Config extends TuiSettings {
|
|
30
33
|
/** Model name for the status line. */
|
|
31
34
|
model: string;
|
|
32
|
-
/** Emit SGR color sequences; defaults to the output stream's tty-ness, minus `NO_COLOR` / `FORCE_COLOR=0`. */
|
|
33
|
-
colors?: boolean;
|
|
34
|
-
/** Shipped palette; defaults to dark. */
|
|
35
|
-
theme?: string;
|
|
36
35
|
/** Optional JSONL prompt-history path. */
|
|
37
36
|
historyPath?: string;
|
|
38
37
|
/** Optional `{ key-id: action }` JSON file. */
|
|
39
38
|
keybindingsPath?: string;
|
|
39
|
+
/**
|
|
40
|
+
* Profile home. Feature toggles are edited in the Profile patch under it,
|
|
41
|
+
* which is why this row needs the path the composition already resolved.
|
|
42
|
+
*/
|
|
43
|
+
dshHome?: string;
|
|
40
44
|
}
|
|
45
|
+
/**
|
|
46
|
+
* Row schema. The durable preferences ride as volatile fields, so a settings
|
|
47
|
+
* form edit commits into their references and reaches this fiber through
|
|
48
|
+
* `loader/volatile-update` without remounting the terminal provider.
|
|
49
|
+
*/
|
|
50
|
+
export declare const Config: z<Schemastery.ObjectS<NoInfer<{
|
|
51
|
+
theme: z<"dark" | "light" | "midnight" | "solarized" | "catppuccin" | "dracula" | "nord" | "gruvbox" | "rose-pine" | "mono", "dark" | "light" | "midnight" | "solarized" | "catppuccin" | "dracula" | "nord" | "gruvbox" | "rose-pine" | "mono", "volatile-defined">;
|
|
52
|
+
colors: z<boolean, boolean, "volatile">;
|
|
53
|
+
motion: z<"full" | "reduced" | "off", "full" | "reduced" | "off", "volatile-defined">;
|
|
54
|
+
terminalProgress: z<boolean, boolean, "volatile-defined">;
|
|
55
|
+
foldDensity: z<"standard" | "compact" | "detailed" | "verbose", "standard" | "compact" | "detailed" | "verbose", "volatile-defined">;
|
|
56
|
+
expandTools: z<boolean, boolean, "volatile-defined">;
|
|
57
|
+
checkUpdates: z<boolean, boolean, "volatile-defined">;
|
|
58
|
+
startupChangelog: z<"summary" | "expanded" | "hidden", "summary" | "expanded" | "hidden", "volatile-defined">;
|
|
59
|
+
notifications: z<"off" | "long-running" | "always", "off" | "long-running" | "always", "volatile-defined">;
|
|
60
|
+
notificationThreshold: z<"15s" | "30s" | "1m" | "2m", "15s" | "30s" | "1m" | "2m", "volatile-defined">;
|
|
61
|
+
statusBar: z<any, any, "volatile" | "volatile-defined">;
|
|
62
|
+
statusPreset: z<"minimal" | "compact" | "full", "minimal" | "compact" | "full", "volatile">;
|
|
63
|
+
model: z<string, string, "plain">;
|
|
64
|
+
historyPath: z<string, string, "plain">;
|
|
65
|
+
keybindingsPath: z<string, string, "plain">;
|
|
66
|
+
dshHome: z<string, string, "plain">;
|
|
67
|
+
}>>, Schemastery.ObjectT<NoInfer<{
|
|
68
|
+
theme: z<"dark" | "light" | "midnight" | "solarized" | "catppuccin" | "dracula" | "nord" | "gruvbox" | "rose-pine" | "mono", "dark" | "light" | "midnight" | "solarized" | "catppuccin" | "dracula" | "nord" | "gruvbox" | "rose-pine" | "mono", "volatile-defined">;
|
|
69
|
+
colors: z<boolean, boolean, "volatile">;
|
|
70
|
+
motion: z<"full" | "reduced" | "off", "full" | "reduced" | "off", "volatile-defined">;
|
|
71
|
+
terminalProgress: z<boolean, boolean, "volatile-defined">;
|
|
72
|
+
foldDensity: z<"standard" | "compact" | "detailed" | "verbose", "standard" | "compact" | "detailed" | "verbose", "volatile-defined">;
|
|
73
|
+
expandTools: z<boolean, boolean, "volatile-defined">;
|
|
74
|
+
checkUpdates: z<boolean, boolean, "volatile-defined">;
|
|
75
|
+
startupChangelog: z<"summary" | "expanded" | "hidden", "summary" | "expanded" | "hidden", "volatile-defined">;
|
|
76
|
+
notifications: z<"off" | "long-running" | "always", "off" | "long-running" | "always", "volatile-defined">;
|
|
77
|
+
notificationThreshold: z<"15s" | "30s" | "1m" | "2m", "15s" | "30s" | "1m" | "2m", "volatile-defined">;
|
|
78
|
+
statusBar: z<any, any, "volatile" | "volatile-defined">;
|
|
79
|
+
statusPreset: z<"minimal" | "compact" | "full", "minimal" | "compact" | "full", "volatile">;
|
|
80
|
+
model: z<string, string, "plain">;
|
|
81
|
+
historyPath: z<string, string, "plain">;
|
|
82
|
+
keybindingsPath: z<string, string, "plain">;
|
|
83
|
+
dshHome: z<string, string, "plain">;
|
|
84
|
+
}>>, "plain">;
|
|
41
85
|
/** The minimal terminal surface a LocalTui drives (process streams satisfy it). */
|
|
42
86
|
export interface TerminalLike {
|
|
43
87
|
output: RenderSink & {
|
|
@@ -77,6 +121,11 @@ export declare class LocalTui implements TuiService {
|
|
|
77
121
|
autocompleteDebounceMs?: number;
|
|
78
122
|
historyPath?: string;
|
|
79
123
|
keybindingsPath?: string;
|
|
124
|
+
/**
|
|
125
|
+
* Profile patch the Features section edits. Absent leaves the section
|
|
126
|
+
* out entirely rather than presenting toggles that cannot be written.
|
|
127
|
+
*/
|
|
128
|
+
featurePatch?: string;
|
|
80
129
|
readClipboard?: ClipboardReader;
|
|
81
130
|
readClipboardImage?: ClipboardImageReader;
|
|
82
131
|
readClipboardFiles?: ClipboardFileReader;
|
|
@@ -89,7 +138,8 @@ export declare class LocalTui implements TuiService {
|
|
|
89
138
|
/** Herdr lifecycle reporter; production injects an environment-aware one. */
|
|
90
139
|
herdrReporter?: HerdrAgentReporter;
|
|
91
140
|
});
|
|
92
|
-
event(event: SessionEvent, presentation?: TuiToolPresentation): void;
|
|
141
|
+
event(event: SessionEvent, presentation?: TuiToolPresentation, workspace?: WorkspaceChangesSummary): void;
|
|
142
|
+
setWorkspaceSummary(turn: number, summary: WorkspaceChangesSummary): void;
|
|
93
143
|
/**
|
|
94
144
|
* Fold one live `agent/assistant-stream` chunk into the transcript and
|
|
95
145
|
* schedule the streaming reveal. Durable settlement follows on the session
|
|
@@ -109,9 +159,9 @@ export declare class LocalTui implements TuiService {
|
|
|
109
159
|
setImageValidator(validate?: (image: TuiInputImage) => Promise<void>): void;
|
|
110
160
|
toolCallContext(callId: string): string | undefined;
|
|
111
161
|
notice(text: string, options?: TuiNoticeOptions): void;
|
|
112
|
-
commandOutput(command: string, text: string): void;
|
|
162
|
+
commandOutput(command: string, text: string, options?: TuiOutputOptions): void;
|
|
113
163
|
prompt(request: TuiPrompt): Promise<string | null>;
|
|
114
|
-
replaceSession(events: readonly SessionEvent[], presentations?: ReadonlyMap<number, TuiToolPresentation>, status?: TuiStatus): void;
|
|
164
|
+
replaceSession(events: readonly SessionEvent[], presentations?: ReadonlyMap<number, TuiToolPresentation>, status?: TuiStatus, reason?: TuiTranscriptReplacement): void;
|
|
115
165
|
setSession(info: {
|
|
116
166
|
id: string;
|
|
117
167
|
title?: string;
|
|
@@ -119,8 +169,10 @@ export declare class LocalTui implements TuiService {
|
|
|
119
169
|
stats?: TuiSessionStats;
|
|
120
170
|
controls?: TuiSessionControls;
|
|
121
171
|
}): void;
|
|
122
|
-
/** Apply prefs loaded from
|
|
172
|
+
/** Apply prefs loaded from this entry's config (does not persist). */
|
|
123
173
|
applyStoredPrefs(prefs: TuiPrefs): void;
|
|
174
|
+
/** Currently applied preferences; sibling rows read these instead of the config references. */
|
|
175
|
+
prefs(): TuiPrefs;
|
|
124
176
|
/** Called after a live `/settings` change. */
|
|
125
177
|
setPrefsPersist(persist: (prefs: TuiPrefs) => void): void;
|
|
126
178
|
bindAgentBehaviorSettings(binding: TuiAgentBehaviorSettingsBinding): () => void;
|