@agi-fans/dsh-tui 0.12.0 → 0.14.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 +24 -1
- package/lib/chrome/box.d.ts +2 -1
- package/lib/chrome/box.js +6 -4
- package/lib/chrome/box.js.map +1 -1
- package/lib/chrome/status-line.js +16 -2
- package/lib/chrome/status-line.js.map +1 -1
- package/lib/chrome/tool-renderers.js +1 -1
- package/lib/chrome/tool-renderers.js.map +1 -1
- package/lib/commands/auth.d.ts +2 -2
- package/lib/commands/auth.js +6 -8
- package/lib/commands/auth.js.map +1 -1
- package/lib/commands/export.js +3 -3
- package/lib/commands/export.js.map +1 -1
- package/lib/commands/permission.js +1 -1
- package/lib/commands/permission.js.map +1 -1
- package/lib/commands/session.js +4 -3
- package/lib/commands/session.js.map +1 -1
- package/lib/commands/trajectory.js +1 -1
- package/lib/commands/trajectory.js.map +1 -1
- package/lib/definition.d.ts +12 -0
- package/lib/runtime/provider-local.d.ts +2 -1
- package/lib/runtime/provider-local.js +203 -10
- package/lib/runtime/provider-local.js.map +1 -1
- package/lib/runtime/startup-notices.js +1 -2
- package/lib/runtime/startup-notices.js.map +1 -1
- package/lib/runtime/terminal-notifications.d.ts +2 -0
- package/lib/runtime/terminal-notifications.js +14 -2
- package/lib/runtime/terminal-notifications.js.map +1 -1
- package/lib/runtime/tool-presentation.js +1 -1
- package/lib/runtime/tool-presentation.js.map +1 -1
- package/lib/session/interaction-adapter.js +4 -2
- package/lib/session/interaction-adapter.js.map +1 -1
- package/lib/session/session-configuration.js +2 -2
- package/lib/session/session-configuration.js.map +1 -1
- package/lib/session/session-controller.d.ts +1 -1
- package/lib/session/session-controller.js +27 -16
- package/lib/session/session-controller.js.map +1 -1
- package/lib/session/subagent-roster.js +1 -2
- package/lib/session/subagent-roster.js.map +1 -1
- package/lib/session/tui-settings.d.ts +5 -0
- package/lib/session/tui-settings.js +4 -0
- package/lib/session/tui-settings.js.map +1 -1
- package/lib/views/event-views.d.ts +6 -3
- package/lib/views/event-views.js +79 -18
- package/lib/views/event-views.js.map +1 -1
- package/lib/views/settings-list.d.ts +11 -4
- package/lib/views/settings-list.js +134 -55
- package/lib/views/settings-list.js.map +1 -1
- package/lib/views/streaming-reveal.d.ts +20 -0
- package/lib/views/streaming-reveal.js +59 -0
- package/lib/views/streaming-reveal.js.map +1 -0
- package/lib/views/trajectory.d.ts +2 -2
- package/lib/views/trajectory.js +17 -5
- package/lib/views/trajectory.js.map +1 -1
- package/package.json +34 -33
package/lib/commands/export.js
CHANGED
|
@@ -21,11 +21,11 @@ async function exportTranscript(invocation) {
|
|
|
21
21
|
const unquoted = pathInput.replace(/^(?:"(.*)"|'(.*)')$/u, '$1$2');
|
|
22
22
|
const fallback = `omdsh-transcript-${invocation.agent.id}.${html ? 'html' : 'md'}`;
|
|
23
23
|
const path = resolve(unquoted === '' ? fallback : (unquoted.startsWith('~/') ? homedir() + unquoted.slice(1) : unquoted));
|
|
24
|
-
const title = sessionTitle(invocation.agent.session.
|
|
24
|
+
const title = sessionTitle(invocation.agent.session.snapshotEvents(), invocation.agent.id);
|
|
25
25
|
try {
|
|
26
26
|
const contents = html
|
|
27
|
-
? formatTranscriptHtml(invocation.agent.id, title, invocation.agent.session.
|
|
28
|
-
: formatTranscriptMarkdown(invocation.agent.id, title, invocation.agent.session.
|
|
27
|
+
? formatTranscriptHtml(invocation.agent.id, title, invocation.agent.session.snapshotEvents())
|
|
28
|
+
: formatTranscriptMarkdown(invocation.agent.id, title, invocation.agent.session.snapshotEvents());
|
|
29
29
|
await writeFile(path, contents, { encoding: 'utf8', mode: 0o600 });
|
|
30
30
|
return { kind: 'success', text: `Exported complete transcript to ${path}` };
|
|
31
31
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"export.js","sourceRoot":"","sources":["../../src/commands/export.ts"],"names":[],"mappings":"AAAA,iEAAiE;AAEjE,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAInC,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACpD,OAAO,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAA;AAE9F,MAAM,CAAC,MAAM,IAAI,GAAG,sBAAsB,CAAA;AAC1C,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,UAAU,CAAC,CAAA;AAElC,SAAS,YAAY,CAAC,MAA+B,EAAE,QAAgB;IACrE,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/C,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;QACvB,IAAI,KAAK,EAAE,IAAI,KAAK,eAAe;YAAE,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAA;IAC9D,CAAC;IACD,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,UAA6B;IAC3D,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAA;IACxC,MAAM,IAAI,GAAG,KAAK,KAAK,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;IAC1D,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAA;IAC/F,MAAM,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC,sBAAsB,EAAE,MAAM,CAAC,CAAA;IAClE,MAAM,QAAQ,GAAG,oBAAoB,UAAU,CAAC,KAAK,CAAC,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;IAClF,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,KAAK,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAA;IACzH,MAAM,KAAK,GAAG,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"export.js","sourceRoot":"","sources":["../../src/commands/export.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,7 +26,7 @@ async function confirmFullAccess(ctx, invocation) {
|
|
|
26
26
|
async function selectAccess(ctx, invocation, switchPreset) {
|
|
27
27
|
if (invocation.rawInput.trim() !== '')
|
|
28
28
|
return { kind: 'error', text: 'Usage: /permission' };
|
|
29
|
-
const current = ctx.permissionPresets.current(invocation.agent.session
|
|
29
|
+
const current = ctx.permissionPresets.current(invocation.agent.session);
|
|
30
30
|
const options = ctx.permissionPresets.names.map((value) => {
|
|
31
31
|
const option = ctx.permissionPresets.optionOf(value);
|
|
32
32
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"permission.js","sourceRoot":"","sources":["../../src/commands/permission.ts"],"names":[],"mappings":"AAAA,iFAAiF;AAMjF,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAEpD,MAAM,CAAC,MAAM,IAAI,GAAG,0BAA0B,CAAA;AAC9C,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,UAAU,EAAE,mBAAmB,EAAE,KAAK,CAAC,CAAA;AAE9D,SAAS,SAAS,CAAC,KAAa;IAC9B,OAAO,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;SACxC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SACzD,IAAI,CAAC,GAAG,CAAC,CAAA;AACd,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,GAAY,EAAE,UAA6B;IAC1E,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC;QAClC,KAAK,EAAE,aAAa;QACpB,QAAQ,EAAE,gEAAgE;QAC1E,MAAM,EAAE,iEAAiE;QACzE,OAAO,EAAE;YACP,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,8BAA8B,EAAE;YACjF,EAAE,KAAK,EAAE,oBAAoB,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,0CAA0C,EAAE;SAC3G;QACD,YAAY,EAAE,QAAQ;QACtB,WAAW,EAAE,KAAK;QAClB,WAAW,EAAE,QAAQ;QACrB,MAAM,EAAE,UAAU,CAAC,MAAM;KAC1B,CAAC,CAAA;IACF,OAAO,MAAM,KAAK,SAAS,CAAA;AAC7B,CAAC;AAED,KAAK,UAAU,YAAY,CACzB,GAAY,EACZ,UAA6B,EAC7B,YAA0C;IAE1C,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAAA;IAC3F,MAAM,OAAO,GAAG,GAAG,CAAC,iBAAiB,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"permission.js","sourceRoot":"","sources":["../../src/commands/permission.ts"],"names":[],"mappings":"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"}
|
package/lib/commands/session.js
CHANGED
|
@@ -144,8 +144,9 @@ function showSession(ctx, invocation) {
|
|
|
144
144
|
async function retry(ctx, invocation) {
|
|
145
145
|
if (invocation.rawInput.trim() !== '')
|
|
146
146
|
return { kind: 'error', text: 'Usage: /retry' };
|
|
147
|
-
|
|
148
|
-
|
|
147
|
+
const log = invocation.agent.session.snapshotEvents();
|
|
148
|
+
for (let i = log.length - 1; i >= 0; i -= 1) {
|
|
149
|
+
const text = humanText(log[i]);
|
|
149
150
|
if (text === undefined)
|
|
150
151
|
continue;
|
|
151
152
|
await ctx.omdshSession.send(text, invocation.agent);
|
|
@@ -164,7 +165,7 @@ function showContext(ctx, invocation) {
|
|
|
164
165
|
function showTodo(invocation) {
|
|
165
166
|
if (invocation.rawInput.trim() !== '')
|
|
166
167
|
return { kind: 'error', text: 'Usage: /todo' };
|
|
167
|
-
const event = invocation.agent.session.
|
|
168
|
+
const event = invocation.agent.session.snapshotEvents().findLast(item => item.type === 'todo/write');
|
|
168
169
|
if (event === undefined)
|
|
169
170
|
return { kind: 'success', text: 'No todo list has been recorded.' };
|
|
170
171
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/commands/session.ts"],"names":[],"mappings":"AAAA,iFAAiF;AAGjF,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/commands/session.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@ export const inject = ['commands', 'tui'];
|
|
|
5
5
|
function openTrajectory(ctx, invocation) {
|
|
6
6
|
if (invocation.rawInput.trim() !== '')
|
|
7
7
|
return { kind: 'error', text: 'Usage: /trajectory' };
|
|
8
|
-
if (!ctx.tui.openTrajectory(invocation.agent.session.
|
|
8
|
+
if (!ctx.tui.openTrajectory(invocation.agent.session.snapshotEvents())) {
|
|
9
9
|
return { kind: 'error', text: 'Trajectory requires an interactive terminal.' };
|
|
10
10
|
}
|
|
11
11
|
return { kind: 'success' };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trajectory.js","sourceRoot":"","sources":["../../src/commands/trajectory.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAI9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAEpD,MAAM,CAAC,MAAM,IAAI,GAAG,0BAA0B,CAAA;AAC9C,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC,CAAA;AAEzC,SAAS,cAAc,CAAC,GAAY,EAAE,UAA6B;IACjE,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAAA;IAC3F,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"trajectory.js","sourceRoot":"","sources":["../../src/commands/trajectory.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAI9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAEpD,MAAM,CAAC,MAAM,IAAI,GAAG,0BAA0B,CAAA;AAC9C,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC,CAAA;AAEzC,SAAS,cAAc,CAAC,GAAY,EAAE,UAA6B;IACjE,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAAA;IAC3F,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,EAAE,CAAC;QACvE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,8CAA8C,EAAE,CAAA;IAChF,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAA;AAC5B,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,GAAY;IAChC,gBAAgB,CAAC,GAAG,EAAE,CAAC;YACrB,IAAI,EAAE,YAAY;YAClB,WAAW,EAAE,sCAAsC;YACnD,OAAO,EAAE,UAAU,CAAC,EAAE,CAAC,cAAc,CAAC,GAAG,EAAE,UAAU,CAAC;SACvD,CAAC,EAAE,0BAA0B,CAAC,CAAA;AACjC,CAAC"}
|
package/lib/definition.d.ts
CHANGED
|
@@ -179,6 +179,16 @@ export interface TuiSubmission {
|
|
|
179
179
|
text: string;
|
|
180
180
|
images: readonly TuiInputImage[];
|
|
181
181
|
}
|
|
182
|
+
/** Product-owned language preference projected into the settings overlay. */
|
|
183
|
+
export interface TuiAgentBehaviorSettings {
|
|
184
|
+
language: 'auto' | 'zh-CN' | 'en';
|
|
185
|
+
}
|
|
186
|
+
/** Closed binding between the product settings owner and the terminal surface. */
|
|
187
|
+
export interface TuiAgentBehaviorSettingsBinding {
|
|
188
|
+
get(): TuiAgentBehaviorSettings;
|
|
189
|
+
update(next: TuiAgentBehaviorSettings): Promise<void>;
|
|
190
|
+
watch(listener: (next: TuiAgentBehaviorSettings) => void): () => void;
|
|
191
|
+
}
|
|
182
192
|
/**
|
|
183
193
|
* Terminal presentation service.
|
|
184
194
|
* Implementations must be single-consumer: one runner owns readInput().
|
|
@@ -209,6 +219,8 @@ export interface TuiService {
|
|
|
209
219
|
notice(text: string, options?: TuiNoticeOptions): void;
|
|
210
220
|
/** Append one successful plugin command result using the command-output surface. */
|
|
211
221
|
commandOutput(command: string, text: string): void;
|
|
222
|
+
/** Bind the product-owned Agent settings section; only one binding may be active. */
|
|
223
|
+
bindAgentBehaviorSettings?(binding: TuiAgentBehaviorSettingsBinding): () => void;
|
|
212
224
|
/** Temporarily own the composer and collect one human answer. */
|
|
213
225
|
prompt(request: TuiPrompt): Promise<string | null>;
|
|
214
226
|
/** Replace the transcript when a new or resumed session becomes active. */
|
|
@@ -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 TuiInputImage, type TuiInspectedSubagent, type TuiLoopStatus, type TuiSubagentRoster, type TuiSubmission } from '../definition.ts';
|
|
15
|
+
import { type TuiAgentBehaviorSettingsBinding, type TuiCommand, type TuiPrompt, type TuiNoticeOptions, type TuiRecentSession, type TuiService, type TuiSessionControls, type TuiSessionStats, type TuiStatus, type TuiInputImage, 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 FileSearcher, type SessionSearcher } from '../views/at-complete.ts';
|
|
18
18
|
import { type ClipboardReader, type ClipboardWriter } from '../input/clipboard.ts';
|
|
@@ -110,6 +110,7 @@ export declare class LocalTui implements TuiService {
|
|
|
110
110
|
applyStoredPrefs(prefs: TuiPrefs): void;
|
|
111
111
|
/** Called after a live `/settings` change. */
|
|
112
112
|
setPrefsPersist(persist: (prefs: TuiPrefs) => void): void;
|
|
113
|
+
bindAgentBehaviorSettings(binding: TuiAgentBehaviorSettingsBinding): () => void;
|
|
113
114
|
readInput(): Promise<TuiSubmission | null>;
|
|
114
115
|
/** Compatibility helper for provider-level text editing tests and embedders. */
|
|
115
116
|
readline(): Promise<string | null>;
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* printing of settled blocks.
|
|
11
11
|
* @module @agi-fans/dsh-tui
|
|
12
12
|
*/
|
|
13
|
-
import { TerminalNotificationController, terminalNotificationSequence } from "./terminal-notifications.js";
|
|
13
|
+
import { TerminalNotificationController, terminalNotificationSequence, terminalProgressSequence, } from "./terminal-notifications.js";
|
|
14
14
|
import { homedir } from 'node:os';
|
|
15
15
|
import { join } from 'node:path';
|
|
16
16
|
import { createInterface } from 'node:readline';
|
|
@@ -28,6 +28,7 @@ import { applySettingsEvent, createSettings, } from "../views/settings-list.js";
|
|
|
28
28
|
import { appendTrajectoryEvent, applyTrajectoryEvent, createTrajectory, } from "../views/trajectory.js";
|
|
29
29
|
import { applyAgentHubEvent, createAgentHub, updateAgentHub, } from "../views/agent-hub.js";
|
|
30
30
|
import { applyEvent, blockLines, initialTranscript, replayEvents, renderView, TRANSCRIPT_FAST_SCROLL, } from "../views/event-views.js";
|
|
31
|
+
import { nextRevealStep, revealStreamingAssistant, streamingAssistantKey, streamingAssistantUnits, } from "../views/streaming-reveal.js";
|
|
31
32
|
import { flushPending, parseKeys } from "../input/keys.js";
|
|
32
33
|
import { MainScreenRenderer } from "../chrome/main-screen-renderer.js";
|
|
33
34
|
import { createTheme, detectTrueColor, parseThemeName } from "../chrome/theme.js";
|
|
@@ -36,7 +37,6 @@ import { defaultStatusBarConfig, resolveStatusBarConfig } from "../chrome/status
|
|
|
36
37
|
import { HistoryStore } from "../views/history-store.js";
|
|
37
38
|
import { loadKeybindings } from "../input/keybindings-config.js";
|
|
38
39
|
import { editExternally } from "../input/external-editor.js";
|
|
39
|
-
import { settingsNamespace } from '@deepseek-ai/dsh-settings';
|
|
40
40
|
import { movePromptSelection, filteredPromptOptions, selectedPromptAnswer, selectedFilteredPromptAnswer, togglePromptSelection, } from "../views/prompt-selector.js";
|
|
41
41
|
import { resolveProjectContext } from "../session/project-context.js";
|
|
42
42
|
import { pickWelcomeTips } from "../chrome/welcome-tips.js";
|
|
@@ -45,6 +45,8 @@ import { imageMarker, imagePathCandidates, probeImageDimensions, stripComposerIm
|
|
|
45
45
|
import { APP_NAME, APP_VERSION } from "../session/package-metadata.js";
|
|
46
46
|
const DOUBLE_CTRL_C_MS = 500;
|
|
47
47
|
const DOUBLE_ESCAPE_MS = 500;
|
|
48
|
+
const STREAMING_REVEAL_MS = 1000 / 30;
|
|
49
|
+
const TERMINAL_PROGRESS_KEEPALIVE_MS = 1_000;
|
|
48
50
|
function shortenPath(cwd) {
|
|
49
51
|
const home = homedir();
|
|
50
52
|
if (cwd === home)
|
|
@@ -97,6 +99,7 @@ export class LocalTui {
|
|
|
97
99
|
#resumeHintRequested = false;
|
|
98
100
|
#lastSigintTime = 0;
|
|
99
101
|
#lastEscapeTime = 0;
|
|
102
|
+
#inspectEscapeFenceUntil = 0;
|
|
100
103
|
#interrupts = new Set();
|
|
101
104
|
#queueEdits = new Set();
|
|
102
105
|
#rewinds = new Set();
|
|
@@ -124,6 +127,8 @@ export class LocalTui {
|
|
|
124
127
|
#branch;
|
|
125
128
|
#spinner = 0;
|
|
126
129
|
#tick = null;
|
|
130
|
+
#revealTick = null;
|
|
131
|
+
#reveal;
|
|
127
132
|
#loopTick = null;
|
|
128
133
|
#scrollStart = 0;
|
|
129
134
|
#maxStart = 0;
|
|
@@ -131,6 +136,10 @@ export class LocalTui {
|
|
|
131
136
|
#follow = true;
|
|
132
137
|
#focusBlock;
|
|
133
138
|
#expandTools = false;
|
|
139
|
+
#motion = 'full';
|
|
140
|
+
#terminalProgress = false;
|
|
141
|
+
#terminalProgressActive = false;
|
|
142
|
+
#terminalProgressTick = null;
|
|
134
143
|
#checkUpdates = true;
|
|
135
144
|
#startupChangelog = 'summary';
|
|
136
145
|
#notifications = new TerminalNotificationController();
|
|
@@ -170,6 +179,10 @@ export class LocalTui {
|
|
|
170
179
|
#validateImageDraft;
|
|
171
180
|
#autocompleteDebounceMs;
|
|
172
181
|
#persistPrefs = null;
|
|
182
|
+
#agentBehavior;
|
|
183
|
+
#updateAgentBehavior;
|
|
184
|
+
#offAgentBehaviorWatch;
|
|
185
|
+
#agentBehaviorPending = false;
|
|
173
186
|
/**
|
|
174
187
|
* @param term - terminal surface (injectable for tests).
|
|
175
188
|
* @param model - model label for the status line.
|
|
@@ -246,12 +259,20 @@ export class LocalTui {
|
|
|
246
259
|
}
|
|
247
260
|
event(event, presentation) {
|
|
248
261
|
this.#state = applyEvent(this.#state, event, presentation);
|
|
249
|
-
this.#emitNotification(this.#notifications.event({
|
|
262
|
+
this.#emitNotification(this.#notifications.event({
|
|
263
|
+
type: event.type,
|
|
264
|
+
time: event.time,
|
|
265
|
+
...(event.type === 'turn/end' ? { reason: event.data.reason.kind } : {}),
|
|
266
|
+
}));
|
|
250
267
|
if (this.#trajectory !== null)
|
|
251
268
|
this.#trajectory = appendTrajectoryEvent(this.#trajectory, event);
|
|
269
|
+
const smoothStream = this.#syncStreamingReveal(event);
|
|
252
270
|
this.#syncTick();
|
|
253
271
|
if (this.#tty) {
|
|
254
|
-
if (
|
|
272
|
+
if (smoothStream) {
|
|
273
|
+
// The 30 fps reveal clock owns presentation for textual deltas.
|
|
274
|
+
}
|
|
275
|
+
else if (event.type === 'assistant/chunk' && this.#streamRenderMs > 0) {
|
|
255
276
|
this.#scheduleStreamRender();
|
|
256
277
|
}
|
|
257
278
|
else {
|
|
@@ -313,8 +334,10 @@ export class LocalTui {
|
|
|
313
334
|
}
|
|
314
335
|
setInspectedSubagent(inspected) {
|
|
315
336
|
this.#inspected = inspected === undefined ? undefined : { ...inspected };
|
|
316
|
-
if (inspected !== undefined)
|
|
337
|
+
if (inspected !== undefined) {
|
|
338
|
+
this.#inspectEscapeFenceUntil = 0;
|
|
317
339
|
this.#subagentLauncherFocused = false;
|
|
340
|
+
}
|
|
318
341
|
this.#syncTick();
|
|
319
342
|
if (this.#tty)
|
|
320
343
|
this.#render();
|
|
@@ -441,6 +464,8 @@ export class LocalTui {
|
|
|
441
464
|
};
|
|
442
465
|
if (!this.#tty)
|
|
443
466
|
return;
|
|
467
|
+
if (this.#reveal !== undefined && this.#motion !== 'off')
|
|
468
|
+
return;
|
|
444
469
|
if (this.#streamRenderMs > 0 && this.#busy())
|
|
445
470
|
this.#scheduleStreamRender();
|
|
446
471
|
else
|
|
@@ -448,8 +473,11 @@ export class LocalTui {
|
|
|
448
473
|
}
|
|
449
474
|
/** Apply prefs loaded from the settings document (does not persist). */
|
|
450
475
|
applyStoredPrefs(prefs) {
|
|
476
|
+
const previousMotion = this.#motion;
|
|
451
477
|
this.#themeName = prefs.theme;
|
|
452
478
|
this.#colors = prefs.colors;
|
|
479
|
+
this.#motion = prefs.motion ?? 'full';
|
|
480
|
+
this.#terminalProgress = prefs.terminalProgress ?? false;
|
|
453
481
|
this.#expandTools = prefs.expandTools;
|
|
454
482
|
this.#checkUpdates = prefs.checkUpdates ?? true;
|
|
455
483
|
this.#startupChangelog = prefs.startupChangelog ?? 'summary';
|
|
@@ -458,6 +486,11 @@ export class LocalTui {
|
|
|
458
486
|
this.#configureNotifications();
|
|
459
487
|
this.#statusBar = resolveStatusBarConfig(prefs.statusBar, prefs.statusPreset);
|
|
460
488
|
this.#toolsExpanded = prefs.expandTools;
|
|
489
|
+
if (previousMotion !== this.#motion) {
|
|
490
|
+
this.#stopRevealTick();
|
|
491
|
+
this.#reveal = undefined;
|
|
492
|
+
}
|
|
493
|
+
this.#syncTick();
|
|
461
494
|
if (this.#settings !== null)
|
|
462
495
|
this.#settings = { ...this.#settings, prefs };
|
|
463
496
|
if (this.#tty)
|
|
@@ -467,6 +500,29 @@ export class LocalTui {
|
|
|
467
500
|
setPrefsPersist(persist) {
|
|
468
501
|
this.#persistPrefs = persist;
|
|
469
502
|
}
|
|
503
|
+
bindAgentBehaviorSettings(binding) {
|
|
504
|
+
if (this.#updateAgentBehavior !== undefined) {
|
|
505
|
+
throw new Error('omdsh-tui: Agent behavior settings are already bound');
|
|
506
|
+
}
|
|
507
|
+
let active = true;
|
|
508
|
+
this.#updateAgentBehavior = next => binding.update(next);
|
|
509
|
+
this.#applyStoredAgentBehavior(binding.get());
|
|
510
|
+
this.#offAgentBehaviorWatch = binding.watch(next => { this.#applyStoredAgentBehavior(next); });
|
|
511
|
+
return () => {
|
|
512
|
+
if (!active)
|
|
513
|
+
return;
|
|
514
|
+
active = false;
|
|
515
|
+
this.#offAgentBehaviorWatch?.();
|
|
516
|
+
this.#offAgentBehaviorWatch = undefined;
|
|
517
|
+
this.#updateAgentBehavior = undefined;
|
|
518
|
+
this.#agentBehavior = undefined;
|
|
519
|
+
this.#agentBehaviorPending = false;
|
|
520
|
+
if (this.#settings !== null)
|
|
521
|
+
this.#settings = createSettings(this.#prefs());
|
|
522
|
+
if (this.#tty && !this.#disposed)
|
|
523
|
+
this.#render();
|
|
524
|
+
};
|
|
525
|
+
}
|
|
470
526
|
readInput() {
|
|
471
527
|
if (this.#pending !== null)
|
|
472
528
|
return Promise.reject(new Error('omdsh-tui: input read already in flight'));
|
|
@@ -581,6 +637,8 @@ export class LocalTui {
|
|
|
581
637
|
clearInterval(this.#tick);
|
|
582
638
|
this.#tick = null;
|
|
583
639
|
}
|
|
640
|
+
this.#stopRevealTick();
|
|
641
|
+
this.#setTerminalProgress(false);
|
|
584
642
|
if (this.#loopTick !== null) {
|
|
585
643
|
clearInterval(this.#loopTick);
|
|
586
644
|
this.#loopTick = null;
|
|
@@ -609,6 +667,8 @@ export class LocalTui {
|
|
|
609
667
|
this.#autocompleteTimer = null;
|
|
610
668
|
this.#autocompleteAbort = null;
|
|
611
669
|
this.#lineReader?.close();
|
|
670
|
+
this.#offAgentBehaviorWatch?.();
|
|
671
|
+
this.#offAgentBehaviorWatch = undefined;
|
|
612
672
|
this.#pending?.resolve(null);
|
|
613
673
|
this.#pending = null;
|
|
614
674
|
this.#finishPrompt(null);
|
|
@@ -686,7 +746,9 @@ export class LocalTui {
|
|
|
686
746
|
#syncTick() {
|
|
687
747
|
if (!this.#tty)
|
|
688
748
|
return;
|
|
689
|
-
|
|
749
|
+
const busy = this.#busy();
|
|
750
|
+
this.#setTerminalProgress(this.#terminalProgress && busy);
|
|
751
|
+
if (busy && this.#motion !== 'off') {
|
|
690
752
|
if (this.#tick === null) {
|
|
691
753
|
this.#tick = setInterval(() => {
|
|
692
754
|
this.#spinner += 1;
|
|
@@ -699,6 +761,74 @@ export class LocalTui {
|
|
|
699
761
|
this.#tick = null;
|
|
700
762
|
}
|
|
701
763
|
}
|
|
764
|
+
#syncStreamingReveal(event) {
|
|
765
|
+
const textualDelta = event.type === 'assistant/chunk'
|
|
766
|
+
&& (event.data.chunk.type === 'text-delta' || event.data.chunk.type === 'reasoning-delta');
|
|
767
|
+
const key = streamingAssistantKey(this.#state);
|
|
768
|
+
if (!textualDelta || this.#motion === 'off' || key === undefined) {
|
|
769
|
+
this.#stopRevealTick();
|
|
770
|
+
this.#reveal = undefined;
|
|
771
|
+
return false;
|
|
772
|
+
}
|
|
773
|
+
if (this.#reveal?.key !== key)
|
|
774
|
+
this.#reveal = { key, revealed: 0 };
|
|
775
|
+
this.#startRevealTick();
|
|
776
|
+
return true;
|
|
777
|
+
}
|
|
778
|
+
#startRevealTick() {
|
|
779
|
+
if (!this.#tty || this.#revealTick !== null)
|
|
780
|
+
return;
|
|
781
|
+
this.#revealTick = setInterval(() => {
|
|
782
|
+
const reveal = this.#reveal;
|
|
783
|
+
if (reveal === undefined || streamingAssistantKey(this.#state) !== reveal.key) {
|
|
784
|
+
this.#stopRevealTick();
|
|
785
|
+
this.#reveal = undefined;
|
|
786
|
+
return;
|
|
787
|
+
}
|
|
788
|
+
const total = streamingAssistantUnits(this.#state);
|
|
789
|
+
const backlog = Math.max(0, total - reveal.revealed);
|
|
790
|
+
if (backlog === 0) {
|
|
791
|
+
this.#stopRevealTick();
|
|
792
|
+
return;
|
|
793
|
+
}
|
|
794
|
+
reveal.revealed = Math.min(total, reveal.revealed + nextRevealStep(backlog));
|
|
795
|
+
this.#render();
|
|
796
|
+
if (reveal.revealed >= total)
|
|
797
|
+
this.#stopRevealTick();
|
|
798
|
+
}, STREAMING_REVEAL_MS);
|
|
799
|
+
this.#revealTick.unref?.();
|
|
800
|
+
}
|
|
801
|
+
#stopRevealTick() {
|
|
802
|
+
if (this.#revealTick === null)
|
|
803
|
+
return;
|
|
804
|
+
clearInterval(this.#revealTick);
|
|
805
|
+
this.#revealTick = null;
|
|
806
|
+
}
|
|
807
|
+
#setTerminalProgress(active) {
|
|
808
|
+
if (!this.#tty)
|
|
809
|
+
return;
|
|
810
|
+
if (active) {
|
|
811
|
+
if (this.#terminalProgressActive)
|
|
812
|
+
return;
|
|
813
|
+
this.#terminalProgressActive = true;
|
|
814
|
+
this.#term.output.write(terminalProgressSequence(true));
|
|
815
|
+
this.#terminalProgressTick = setInterval(() => {
|
|
816
|
+
if (!this.#disposed && this.#terminalProgressActive) {
|
|
817
|
+
this.#term.output.write(terminalProgressSequence(true));
|
|
818
|
+
}
|
|
819
|
+
}, TERMINAL_PROGRESS_KEEPALIVE_MS);
|
|
820
|
+
this.#terminalProgressTick.unref?.();
|
|
821
|
+
return;
|
|
822
|
+
}
|
|
823
|
+
if (this.#terminalProgressTick !== null) {
|
|
824
|
+
clearInterval(this.#terminalProgressTick);
|
|
825
|
+
this.#terminalProgressTick = null;
|
|
826
|
+
}
|
|
827
|
+
if (!this.#terminalProgressActive)
|
|
828
|
+
return;
|
|
829
|
+
this.#terminalProgressActive = false;
|
|
830
|
+
this.#term.output.write(terminalProgressSequence(false));
|
|
831
|
+
}
|
|
702
832
|
#syncLoopTick() {
|
|
703
833
|
if (!this.#tty)
|
|
704
834
|
return;
|
|
@@ -720,8 +850,11 @@ export class LocalTui {
|
|
|
720
850
|
if (this.#deferInitialRender)
|
|
721
851
|
return;
|
|
722
852
|
const width = this.#term.width();
|
|
853
|
+
const renderState = this.#reveal === undefined
|
|
854
|
+
? this.#state
|
|
855
|
+
: revealStreamingAssistant(this.#state, this.#reveal.revealed);
|
|
723
856
|
const frame = this.#tty
|
|
724
|
-
? renderView(
|
|
857
|
+
? renderView(renderState, {
|
|
725
858
|
width,
|
|
726
859
|
height: this.#term.height(),
|
|
727
860
|
model: this.#model,
|
|
@@ -738,6 +871,7 @@ export class LocalTui {
|
|
|
738
871
|
version: APP_VERSION,
|
|
739
872
|
appName: APP_NAME,
|
|
740
873
|
spinnerFrame: this.#spinner,
|
|
874
|
+
motion: this.#motion,
|
|
741
875
|
trueColor: this.#trueColor,
|
|
742
876
|
themeName: this.#themeName,
|
|
743
877
|
scrollStart: this.#follow ? Number.POSITIVE_INFINITY : this.#scrollStart,
|
|
@@ -1063,8 +1197,17 @@ export class LocalTui {
|
|
|
1063
1197
|
this.#pasteBuf = '';
|
|
1064
1198
|
return;
|
|
1065
1199
|
}
|
|
1066
|
-
|
|
1200
|
+
const isEscape = event.type === 'key' && event.id === 'escape';
|
|
1201
|
+
if (!isEscape) {
|
|
1067
1202
|
this.#lastEscapeTime = 0;
|
|
1203
|
+
this.#inspectEscapeFenceUntil = 0;
|
|
1204
|
+
}
|
|
1205
|
+
else if (this.#inspected === undefined && Date.now() < this.#inspectEscapeFenceUntil) {
|
|
1206
|
+
return;
|
|
1207
|
+
}
|
|
1208
|
+
else if (this.#inspected === undefined) {
|
|
1209
|
+
this.#inspectEscapeFenceUntil = 0;
|
|
1210
|
+
}
|
|
1068
1211
|
if (this.#handlePrompt(event))
|
|
1069
1212
|
return;
|
|
1070
1213
|
if (this.#trajectory !== null) {
|
|
@@ -1460,6 +1603,9 @@ export class LocalTui {
|
|
|
1460
1603
|
#closeInspect() {
|
|
1461
1604
|
if (this.#inspected === undefined)
|
|
1462
1605
|
return;
|
|
1606
|
+
// Keep one exit gesture inside the inspector even when repeated Escape
|
|
1607
|
+
// bytes are decoded after the parent view has already been restored.
|
|
1608
|
+
this.#inspectEscapeFenceUntil = Date.now() + DOUBLE_ESCAPE_MS;
|
|
1463
1609
|
for (const listener of this.#inspectCloses)
|
|
1464
1610
|
listener();
|
|
1465
1611
|
}
|
|
@@ -1483,6 +1629,8 @@ export class LocalTui {
|
|
|
1483
1629
|
return {
|
|
1484
1630
|
theme: this.#themeName,
|
|
1485
1631
|
colors: this.#colors,
|
|
1632
|
+
motion: this.#motion,
|
|
1633
|
+
terminalProgress: this.#terminalProgress,
|
|
1486
1634
|
expandTools: this.#expandTools,
|
|
1487
1635
|
checkUpdates: this.#checkUpdates,
|
|
1488
1636
|
startupChangelog: this.#startupChangelog,
|
|
@@ -1503,6 +1651,9 @@ export class LocalTui {
|
|
|
1503
1651
|
const expandChanged = prefs.expandTools !== this.#expandTools;
|
|
1504
1652
|
this.#themeName = prefs.theme;
|
|
1505
1653
|
this.#colors = prefs.colors;
|
|
1654
|
+
const previousMotion = this.#motion;
|
|
1655
|
+
this.#motion = prefs.motion ?? 'full';
|
|
1656
|
+
this.#terminalProgress = prefs.terminalProgress ?? false;
|
|
1506
1657
|
this.#expandTools = prefs.expandTools;
|
|
1507
1658
|
this.#checkUpdates = prefs.checkUpdates ?? true;
|
|
1508
1659
|
this.#startupChangelog = prefs.startupChangelog ?? 'summary';
|
|
@@ -1512,8 +1663,41 @@ export class LocalTui {
|
|
|
1512
1663
|
this.#statusBar = resolveStatusBarConfig(prefs.statusBar, prefs.statusPreset);
|
|
1513
1664
|
if (expandChanged)
|
|
1514
1665
|
this.#toolsExpanded = prefs.expandTools;
|
|
1666
|
+
if (previousMotion !== this.#motion) {
|
|
1667
|
+
this.#stopRevealTick();
|
|
1668
|
+
this.#reveal = undefined;
|
|
1669
|
+
}
|
|
1670
|
+
this.#syncTick();
|
|
1515
1671
|
this.#persistPrefs?.(prefs);
|
|
1516
1672
|
}
|
|
1673
|
+
#applyStoredAgentBehavior(next) {
|
|
1674
|
+
this.#agentBehavior = { language: next.language };
|
|
1675
|
+
if (this.#settings !== null) {
|
|
1676
|
+
this.#settings = { ...this.#settings, agent: { ...this.#agentBehavior } };
|
|
1677
|
+
}
|
|
1678
|
+
if (this.#tty && !this.#disposed)
|
|
1679
|
+
this.#render();
|
|
1680
|
+
}
|
|
1681
|
+
async #commitAgentBehavior(next) {
|
|
1682
|
+
const update = this.#updateAgentBehavior;
|
|
1683
|
+
if (update === undefined)
|
|
1684
|
+
return;
|
|
1685
|
+
try {
|
|
1686
|
+
await update(next);
|
|
1687
|
+
this.#applyStoredAgentBehavior(next);
|
|
1688
|
+
}
|
|
1689
|
+
catch (error) {
|
|
1690
|
+
if (this.#settings !== null && this.#agentBehavior !== undefined) {
|
|
1691
|
+
this.#settings = { ...this.#settings, agent: { ...this.#agentBehavior } };
|
|
1692
|
+
}
|
|
1693
|
+
this.notice(`Could not save Agent language: ${error instanceof Error ? error.message : String(error)}`, { level: 'error' });
|
|
1694
|
+
}
|
|
1695
|
+
finally {
|
|
1696
|
+
this.#agentBehaviorPending = false;
|
|
1697
|
+
if (this.#tty && !this.#disposed)
|
|
1698
|
+
this.#render();
|
|
1699
|
+
}
|
|
1700
|
+
}
|
|
1517
1701
|
#applySettings(event) {
|
|
1518
1702
|
if (this.#settings === null)
|
|
1519
1703
|
return;
|
|
@@ -1524,6 +1708,15 @@ export class LocalTui {
|
|
|
1524
1708
|
return;
|
|
1525
1709
|
}
|
|
1526
1710
|
if (command.kind === 'apply') {
|
|
1711
|
+
if (command.domain === 'agent') {
|
|
1712
|
+
if (this.#agentBehaviorPending || command.state.agent === undefined)
|
|
1713
|
+
return;
|
|
1714
|
+
this.#agentBehaviorPending = true;
|
|
1715
|
+
this.#settings = command.state;
|
|
1716
|
+
this.#render();
|
|
1717
|
+
void this.#commitAgentBehavior(command.state.agent);
|
|
1718
|
+
return;
|
|
1719
|
+
}
|
|
1527
1720
|
this.#settings = command.state;
|
|
1528
1721
|
this.#applyPrefs(command.state.prefs);
|
|
1529
1722
|
this.#render();
|
|
@@ -2091,7 +2284,7 @@ export class LocalTui {
|
|
|
2091
2284
|
}
|
|
2092
2285
|
this.#search = null;
|
|
2093
2286
|
this.#ac = null;
|
|
2094
|
-
this.#settings = createSettings(this.#prefs());
|
|
2287
|
+
this.#settings = createSettings(this.#prefs(), undefined, this.#agentBehavior);
|
|
2095
2288
|
this.#render();
|
|
2096
2289
|
}
|
|
2097
2290
|
#notice(text) {
|
|
@@ -2206,7 +2399,7 @@ export function apply(ctx, config) {
|
|
|
2206
2399
|
ctx.provide(TUI_SERVICE, tui);
|
|
2207
2400
|
ctx.effect(() => () => { tui.dispose(); });
|
|
2208
2401
|
ctx.inject(['settings'], (settingsCtx) => {
|
|
2209
|
-
const scope = settingsCtx.settings.register(
|
|
2402
|
+
const scope = settingsCtx.settings.register(TUI_SETTINGS_NAMESPACE, TuiSettingsSchema, { base: { theme: parseThemeName(config.theme), colors: config.colors ?? term.output.isTTY === true, expandTools: false } });
|
|
2210
2403
|
tui.applyStoredPrefs(scope.get());
|
|
2211
2404
|
tui.setPrefsPersist((prefs) => { void scope.update(prefs); });
|
|
2212
2405
|
scope.watch((next) => { tui.applyStoredPrefs(next); });
|