@agi-fans/dsh-tui 0.3.0 → 0.4.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 +113 -0
- package/lib/autocomplete.js +15 -16
- package/lib/autocomplete.js.map +1 -1
- package/lib/box.d.ts +5 -0
- package/lib/box.js +23 -15
- package/lib/box.js.map +1 -1
- package/lib/command-loop.d.ts +52 -0
- package/lib/command-loop.js +307 -0
- package/lib/command-loop.js.map +1 -0
- package/lib/command-model.js +13 -9
- package/lib/command-model.js.map +1 -1
- package/lib/command-session.js +3 -2
- package/lib/command-session.js.map +1 -1
- package/lib/command-steer.js +8 -2
- package/lib/command-steer.js.map +1 -1
- package/lib/definition.d.ts +14 -0
- package/lib/event-views.d.ts +4 -1
- package/lib/event-views.js +37 -7
- package/lib/event-views.js.map +1 -1
- package/lib/hotkeys.d.ts +2 -0
- package/lib/hotkeys.js +14 -0
- package/lib/hotkeys.js.map +1 -1
- package/lib/package-metadata.d.ts +4 -0
- package/lib/package-metadata.js +11 -0
- package/lib/package-metadata.js.map +1 -0
- package/lib/provider-local.d.ts +2 -1
- package/lib/provider-local.js +49 -5
- package/lib/provider-local.js.map +1 -1
- package/lib/release-notes.d.ts +31 -0
- package/lib/release-notes.js +120 -0
- package/lib/release-notes.js.map +1 -0
- package/lib/runner.js +11 -2
- package/lib/runner.js.map +1 -1
- package/lib/settings-list.d.ts +3 -0
- package/lib/settings-list.js +22 -1
- package/lib/settings-list.js.map +1 -1
- package/lib/startup-notices.d.ts +20 -0
- package/lib/startup-notices.js +146 -0
- package/lib/startup-notices.js.map +1 -0
- package/lib/status-line.d.ts +4 -1
- package/lib/status-line.js +51 -28
- package/lib/status-line.js.map +1 -1
- package/lib/tool-renderers.d.ts +6 -1
- package/lib/tool-renderers.js +44 -16
- package/lib/tool-renderers.js.map +1 -1
- package/lib/tui-settings.d.ts +3 -0
- package/lib/tui-settings.js +3 -0
- package/lib/tui-settings.js.map +1 -1
- package/lib/update-check.d.ts +16 -0
- package/lib/update-check.js +33 -0
- package/lib/update-check.js.map +1 -0
- package/lib/welcome-tips.js +2 -0
- package/lib/welcome-tips.js.map +1 -1
- package/package.json +10 -2
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
/** Process-local prompt loop contributed as an independent omdsh plugin. */
|
|
2
|
+
import { registerCommands } from "./command-registration.js";
|
|
3
|
+
export const name = 'omdsh-command-loop';
|
|
4
|
+
export const inject = ['commands', 'omdshSession', 'tui'];
|
|
5
|
+
const DEFAULT_REPEAT_DELAY_MS = 800;
|
|
6
|
+
const DEFAULT_COMPLETION_MS = 1_600;
|
|
7
|
+
function durationUnitMs(unit) {
|
|
8
|
+
if (/^(?:s|sec|secs|second|seconds)$/u.test(unit))
|
|
9
|
+
return 1_000;
|
|
10
|
+
if (/^(?:m|min|mins|minute|minutes)$/u.test(unit))
|
|
11
|
+
return 60_000;
|
|
12
|
+
if (/^(?:h|hr|hrs|hour|hours)$/u.test(unit))
|
|
13
|
+
return 3_600_000;
|
|
14
|
+
return undefined;
|
|
15
|
+
}
|
|
16
|
+
function parseDuration(token) {
|
|
17
|
+
const part = /(\d+(?:\.\d+)?)([a-z]+)/guy;
|
|
18
|
+
let offset = 0;
|
|
19
|
+
let total = 0;
|
|
20
|
+
while (offset < token.length) {
|
|
21
|
+
part.lastIndex = offset;
|
|
22
|
+
const match = part.exec(token);
|
|
23
|
+
if (match === null || match.index !== offset || match[1] === undefined || match[2] === undefined)
|
|
24
|
+
return undefined;
|
|
25
|
+
const unitMs = durationUnitMs(match[2].toLowerCase());
|
|
26
|
+
if (unitMs === undefined)
|
|
27
|
+
return undefined;
|
|
28
|
+
total += Number(match[1]) * unitMs;
|
|
29
|
+
offset = part.lastIndex;
|
|
30
|
+
}
|
|
31
|
+
return Number.isFinite(total) && total > 0 ? Math.round(total) : undefined;
|
|
32
|
+
}
|
|
33
|
+
/** Parse the oh-my-pi-compatible `/loop [count|duration] [prompt]` tail. */
|
|
34
|
+
export function parseLoopRequest(rawInput) {
|
|
35
|
+
const input = rawInput.trim();
|
|
36
|
+
if (input === '')
|
|
37
|
+
return {};
|
|
38
|
+
const separator = input.search(/\s/u);
|
|
39
|
+
const head = separator === -1 ? input : input.slice(0, separator);
|
|
40
|
+
const tail = separator === -1 ? '' : input.slice(separator).trim();
|
|
41
|
+
if (/^\d+$/u.test(head)) {
|
|
42
|
+
const count = Number(head);
|
|
43
|
+
if (!Number.isSafeInteger(count) || count <= 0)
|
|
44
|
+
throw new Error('Loop count must be a positive integer.');
|
|
45
|
+
return {
|
|
46
|
+
limit: { kind: 'iterations', count },
|
|
47
|
+
...(tail === '' ? {} : { prompt: tail }),
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
const durationMs = parseDuration(head);
|
|
51
|
+
if (durationMs !== undefined) {
|
|
52
|
+
return {
|
|
53
|
+
limit: { kind: 'duration', durationMs, label: head },
|
|
54
|
+
...(tail === '' ? {} : { prompt: tail }),
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
if (/^\d/u.test(head)) {
|
|
58
|
+
throw new Error('Invalid loop limit. Use a count such as 5 or a duration such as 10m or 1h30m.');
|
|
59
|
+
}
|
|
60
|
+
return { prompt: input };
|
|
61
|
+
}
|
|
62
|
+
function cloneSubmission(submission) {
|
|
63
|
+
return {
|
|
64
|
+
text: submission.text,
|
|
65
|
+
images: submission.images.map(image => ({ ...image, data: image.data.slice() })),
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
function wait(ms, signal) {
|
|
69
|
+
if (signal.aborted)
|
|
70
|
+
return Promise.resolve(false);
|
|
71
|
+
return new Promise((resolve) => {
|
|
72
|
+
const timer = setTimeout(() => {
|
|
73
|
+
signal.removeEventListener('abort', cancel);
|
|
74
|
+
resolve(true);
|
|
75
|
+
}, ms);
|
|
76
|
+
const cancel = () => {
|
|
77
|
+
clearTimeout(timer);
|
|
78
|
+
resolve(false);
|
|
79
|
+
};
|
|
80
|
+
signal.addEventListener('abort', cancel, { once: true });
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
/** Runtime state for one top-level omdsh loop; intentionally not persisted. */
|
|
84
|
+
export class LoopRuntime {
|
|
85
|
+
session;
|
|
86
|
+
tui;
|
|
87
|
+
repeatDelayMs;
|
|
88
|
+
completionMs;
|
|
89
|
+
#active;
|
|
90
|
+
#completionTimer;
|
|
91
|
+
constructor(session, tui, repeatDelayMs = DEFAULT_REPEAT_DELAY_MS, completionMs = DEFAULT_COMPLETION_MS) {
|
|
92
|
+
this.session = session;
|
|
93
|
+
this.tui = tui;
|
|
94
|
+
this.repeatDelayMs = repeatDelayMs;
|
|
95
|
+
this.completionMs = completionMs;
|
|
96
|
+
}
|
|
97
|
+
isEnabled(agent) {
|
|
98
|
+
return this.#active !== undefined && (agent === undefined || this.#active.agent === agent);
|
|
99
|
+
}
|
|
100
|
+
async enable(agent, request) {
|
|
101
|
+
this.session.assertActive(agent);
|
|
102
|
+
this.#stop();
|
|
103
|
+
const operation = new AbortController();
|
|
104
|
+
this.#active = {
|
|
105
|
+
agent,
|
|
106
|
+
phase: 'waiting',
|
|
107
|
+
repeats: 0,
|
|
108
|
+
...(request.limit?.kind === 'iterations' ? { remaining: request.limit.count, total: request.limit.count } : {}),
|
|
109
|
+
...(request.limit?.kind === 'duration'
|
|
110
|
+
? { durationRemainingMs: request.limit.durationMs, limitLabel: request.limit.label }
|
|
111
|
+
: {}),
|
|
112
|
+
operation,
|
|
113
|
+
};
|
|
114
|
+
this.#publish();
|
|
115
|
+
if (request.prompt !== undefined) {
|
|
116
|
+
const submission = { text: request.prompt, images: [] };
|
|
117
|
+
await this.submit(submission, agent);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
disable(agent) {
|
|
121
|
+
if (this.#active === undefined || (agent !== undefined && this.#active.agent !== agent))
|
|
122
|
+
return false;
|
|
123
|
+
this.#stop();
|
|
124
|
+
return true;
|
|
125
|
+
}
|
|
126
|
+
/** Atomically accept, dispatch, and arm a human composer submission. */
|
|
127
|
+
async submit(submission, agent) {
|
|
128
|
+
const active = this.#active;
|
|
129
|
+
if (active === undefined || active.agent !== agent)
|
|
130
|
+
return false;
|
|
131
|
+
const previousPrompt = active.prompt === undefined ? undefined : cloneSubmission(active.prompt);
|
|
132
|
+
const previousPhase = active.phase;
|
|
133
|
+
const previousDeadline = active.deadline;
|
|
134
|
+
active.operation.abort();
|
|
135
|
+
active.operation = new AbortController();
|
|
136
|
+
active.prompt = cloneSubmission(submission);
|
|
137
|
+
active.phase = 'running';
|
|
138
|
+
if (active.durationRemainingMs !== undefined && active.deadline === undefined) {
|
|
139
|
+
active.deadline = Date.now() + active.durationRemainingMs;
|
|
140
|
+
}
|
|
141
|
+
this.#publish();
|
|
142
|
+
try {
|
|
143
|
+
await this.session.send(submission, agent);
|
|
144
|
+
}
|
|
145
|
+
catch (error) {
|
|
146
|
+
active.operation.abort();
|
|
147
|
+
active.operation = new AbortController();
|
|
148
|
+
if (previousPrompt === undefined)
|
|
149
|
+
delete active.prompt;
|
|
150
|
+
else
|
|
151
|
+
active.prompt = previousPrompt;
|
|
152
|
+
active.phase = previousPhase;
|
|
153
|
+
if (previousDeadline === undefined)
|
|
154
|
+
delete active.deadline;
|
|
155
|
+
else
|
|
156
|
+
active.deadline = previousDeadline;
|
|
157
|
+
this.#publish();
|
|
158
|
+
if (active.prompt !== undefined)
|
|
159
|
+
void this.#run(active, active.operation.signal);
|
|
160
|
+
throw error;
|
|
161
|
+
}
|
|
162
|
+
void this.#run(active, active.operation.signal);
|
|
163
|
+
return true;
|
|
164
|
+
}
|
|
165
|
+
/** Interrupt the current iteration and wait for a new prompt without disabling Loop. */
|
|
166
|
+
pause(agent) {
|
|
167
|
+
const active = this.#active;
|
|
168
|
+
if (active === undefined || (agent !== undefined && active.agent !== agent) || active.prompt === undefined)
|
|
169
|
+
return false;
|
|
170
|
+
active.operation.abort();
|
|
171
|
+
active.operation = new AbortController();
|
|
172
|
+
if (active.deadline !== undefined) {
|
|
173
|
+
active.durationRemainingMs = Math.max(0, active.deadline - Date.now());
|
|
174
|
+
delete active.deadline;
|
|
175
|
+
}
|
|
176
|
+
delete active.prompt;
|
|
177
|
+
active.phase = 'paused';
|
|
178
|
+
this.#publish();
|
|
179
|
+
return true;
|
|
180
|
+
}
|
|
181
|
+
/** Drop a loop as soon as a command replaces the active session. */
|
|
182
|
+
syncAgent(agent) {
|
|
183
|
+
if (this.#active !== undefined && this.#active.agent !== agent)
|
|
184
|
+
this.#stop();
|
|
185
|
+
}
|
|
186
|
+
dispose() {
|
|
187
|
+
this.#stop();
|
|
188
|
+
}
|
|
189
|
+
async #run(active, signal) {
|
|
190
|
+
while (!signal.aborted && this.#active === active && active.prompt !== undefined) {
|
|
191
|
+
try {
|
|
192
|
+
await active.agent.whenIdle();
|
|
193
|
+
}
|
|
194
|
+
catch (error) {
|
|
195
|
+
if (!signal.aborted)
|
|
196
|
+
this.#fail(error);
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
if (signal.aborted || this.#active !== active)
|
|
200
|
+
return;
|
|
201
|
+
if (this.session.agent !== active.agent) {
|
|
202
|
+
this.#stop();
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
if (!await wait(this.repeatDelayMs, signal))
|
|
206
|
+
return;
|
|
207
|
+
if (active.remaining !== undefined && active.remaining <= 0) {
|
|
208
|
+
this.#complete();
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
if (active.deadline !== undefined && Date.now() >= active.deadline) {
|
|
212
|
+
this.#complete();
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
const prompt = cloneSubmission(active.prompt);
|
|
216
|
+
if (active.remaining !== undefined)
|
|
217
|
+
active.remaining -= 1;
|
|
218
|
+
active.repeats += 1;
|
|
219
|
+
this.#publish();
|
|
220
|
+
try {
|
|
221
|
+
await this.session.send(prompt, active.agent);
|
|
222
|
+
}
|
|
223
|
+
catch (error) {
|
|
224
|
+
if (!signal.aborted)
|
|
225
|
+
this.#fail(error);
|
|
226
|
+
return;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
#complete() {
|
|
231
|
+
const active = this.#active;
|
|
232
|
+
if (active === undefined)
|
|
233
|
+
return;
|
|
234
|
+
active.operation.abort();
|
|
235
|
+
this.#active = undefined;
|
|
236
|
+
if (this.#completionTimer !== undefined)
|
|
237
|
+
clearTimeout(this.#completionTimer);
|
|
238
|
+
this.tui.setLoopStatus({
|
|
239
|
+
phase: 'completed',
|
|
240
|
+
repeats: active.repeats,
|
|
241
|
+
...(active.total === undefined ? {} : { total: active.total }),
|
|
242
|
+
...(active.limitLabel === undefined ? {} : { limit: active.limitLabel }),
|
|
243
|
+
});
|
|
244
|
+
this.#completionTimer = setTimeout(() => {
|
|
245
|
+
this.#completionTimer = undefined;
|
|
246
|
+
if (this.#active === undefined)
|
|
247
|
+
this.tui.setLoopStatus(undefined);
|
|
248
|
+
}, this.completionMs);
|
|
249
|
+
this.#completionTimer.unref?.();
|
|
250
|
+
}
|
|
251
|
+
#fail(error) {
|
|
252
|
+
this.#stop();
|
|
253
|
+
this.tui.notice(`Loop stopped: ${error instanceof Error ? error.message : String(error)}`, { level: 'error' });
|
|
254
|
+
}
|
|
255
|
+
#stop() {
|
|
256
|
+
if (this.#completionTimer !== undefined) {
|
|
257
|
+
clearTimeout(this.#completionTimer);
|
|
258
|
+
this.#completionTimer = undefined;
|
|
259
|
+
}
|
|
260
|
+
this.#active?.operation.abort();
|
|
261
|
+
this.#active = undefined;
|
|
262
|
+
this.tui.setLoopStatus(undefined);
|
|
263
|
+
}
|
|
264
|
+
#publish() {
|
|
265
|
+
const active = this.#active;
|
|
266
|
+
if (active === undefined) {
|
|
267
|
+
this.tui.setLoopStatus(undefined);
|
|
268
|
+
return;
|
|
269
|
+
}
|
|
270
|
+
this.tui.setLoopStatus({
|
|
271
|
+
phase: active.phase,
|
|
272
|
+
repeats: active.repeats,
|
|
273
|
+
...(active.total === undefined ? {} : { total: active.total }),
|
|
274
|
+
...(active.deadline === undefined ? {} : { deadline: active.deadline }),
|
|
275
|
+
...(active.limitLabel === undefined ? {} : { limit: active.limitLabel }),
|
|
276
|
+
});
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
async function loop(runtime, invocation) {
|
|
280
|
+
if (runtime.disable(invocation.agent))
|
|
281
|
+
return { kind: 'success' };
|
|
282
|
+
let request;
|
|
283
|
+
try {
|
|
284
|
+
request = parseLoopRequest(invocation.rawInput);
|
|
285
|
+
}
|
|
286
|
+
catch (error) {
|
|
287
|
+
return { kind: 'error', text: error instanceof Error ? error.message : String(error) };
|
|
288
|
+
}
|
|
289
|
+
await runtime.enable(invocation.agent, request);
|
|
290
|
+
return { kind: 'success' };
|
|
291
|
+
}
|
|
292
|
+
export function apply(ctx) {
|
|
293
|
+
const session = ctx.get('omdshSession');
|
|
294
|
+
const tui = ctx.get('tui');
|
|
295
|
+
if (session === undefined || tui === undefined)
|
|
296
|
+
throw new Error('omdsh-command-loop: session runtime and tui are required');
|
|
297
|
+
const runtime = new LoopRuntime(session, tui);
|
|
298
|
+
ctx.provide('omdshLoop', runtime);
|
|
299
|
+
registerCommands(ctx, [{
|
|
300
|
+
name: 'loop',
|
|
301
|
+
description: 'Repeat a prompt after every completed turn',
|
|
302
|
+
input: { hint: '[count|duration] [prompt]' },
|
|
303
|
+
handler: invocation => loop(runtime, invocation),
|
|
304
|
+
}], 'omdsh loop command');
|
|
305
|
+
ctx.effect(() => () => { runtime.dispose(); }, 'omdsh loop runtime lifecycle');
|
|
306
|
+
}
|
|
307
|
+
//# sourceMappingURL=command-loop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-loop.js","sourceRoot":"","sources":["../src/command-loop.ts"],"names":[],"mappings":"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"}
|
package/lib/command-model.js
CHANGED
|
@@ -3,12 +3,16 @@ import { ReasoningEffortId } from '@deepseek-ai/dsh-llm';
|
|
|
3
3
|
import { registerCommands } from "./command-registration.js";
|
|
4
4
|
export const name = 'omdsh-command-model';
|
|
5
5
|
export const inject = ['commands', 'omdshSession', 'tui', 'llm'];
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
6
|
+
const FULLSCREEN_CHOICE_THRESHOLD = 8;
|
|
7
|
+
function fixedChoice(optionCount) {
|
|
8
|
+
const fullscreen = optionCount > FULLSCREEN_CHOICE_THRESHOLD;
|
|
9
|
+
return {
|
|
10
|
+
...(fullscreen ? { presentation: 'fullscreen-list' } : {}),
|
|
11
|
+
optionLayout: 'compact',
|
|
12
|
+
filterable: fullscreen,
|
|
13
|
+
allowCustom: false,
|
|
14
|
+
};
|
|
15
|
+
}
|
|
12
16
|
function selected(raw, values) {
|
|
13
17
|
const index = /^\d+$/u.test(raw) ? Number(raw) - 1 : -1;
|
|
14
18
|
return index >= 0 ? values[index] : raw;
|
|
@@ -23,7 +27,7 @@ async function selectModel(ctx, invocation) {
|
|
|
23
27
|
let provider = providers[0]?.id;
|
|
24
28
|
if (providers.length > 1) {
|
|
25
29
|
const providerRaw = await ctx.tui.prompt({
|
|
26
|
-
...
|
|
30
|
+
...fixedChoice(providers.length),
|
|
27
31
|
title: 'Model provider',
|
|
28
32
|
question: 'Choose a provider',
|
|
29
33
|
options: providers.map(entry => ({ label: entry.id, description: entry.name })),
|
|
@@ -43,7 +47,7 @@ async function selectModel(ctx, invocation) {
|
|
|
43
47
|
if (models.length === 0)
|
|
44
48
|
return { kind: 'error', text: `No models are available for ${provider}.` };
|
|
45
49
|
const modelRaw = await ctx.tui.prompt({
|
|
46
|
-
...
|
|
50
|
+
...fixedChoice(models.length),
|
|
47
51
|
title: 'Model',
|
|
48
52
|
question: `Choose a model for ${provider}`,
|
|
49
53
|
options: models.map(model => ({ label: model.id, description: model.description ?? model.name })),
|
|
@@ -63,7 +67,7 @@ async function selectModel(ctx, invocation) {
|
|
|
63
67
|
}
|
|
64
68
|
else {
|
|
65
69
|
const effortRaw = await ctx.tui.prompt({
|
|
66
|
-
...
|
|
70
|
+
...fixedChoice(info.reasoning.efforts.length),
|
|
67
71
|
title: 'Reasoning effort',
|
|
68
72
|
question: 'Choose reasoning effort',
|
|
69
73
|
options: info.reasoning.efforts.map(effort => ({ label: String(effort.id), description: effort.description ?? effort.name })),
|
package/lib/command-model.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command-model.js","sourceRoot":"","sources":["../src/command-model.ts"],"names":[],"mappings":"AAAA,wEAAwE;AAKxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAGxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAE5D,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,
|
|
1
|
+
{"version":3,"file":"command-model.js","sourceRoot":"","sources":["../src/command-model.ts"],"names":[],"mappings":"AAAA,wEAAwE;AAKxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAGxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAE5D,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,EAAE,EAAE,WAAW,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YAC/E,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/command-session.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/** Session lifecycle and inspection commands registered through dsh-commands. */
|
|
2
2
|
import { registerCommands } from "./command-registration.js";
|
|
3
3
|
import { formatRelativeAge } from "./relative-time.js";
|
|
4
|
+
import { formatPermission, formatTokens } from "./status-line.js";
|
|
4
5
|
export const name = 'omdsh-command-session';
|
|
5
6
|
export const inject = ['commands', 'omdshSession', 'tui'];
|
|
6
7
|
function humanText(event) {
|
|
@@ -98,9 +99,9 @@ function showSession(ctx, invocation) {
|
|
|
98
99
|
`| Model | \`${selection.provider}/${selection.model}\` |`,
|
|
99
100
|
`| Reasoning | \`${reasoningEffort ?? 'not available'}\` |`,
|
|
100
101
|
`| Mode | ${mode} |`,
|
|
101
|
-
...(controls.permission === undefined ? [] : [`| Permission |
|
|
102
|
+
...(controls.permission === undefined ? [] : [`| Permission | ${formatPermission(controls.permission)} |`]),
|
|
102
103
|
`| Activity | ${stats.turns} turns · ${stats.steps} steps |`,
|
|
103
|
-
`| Tokens | ${stats.inputTokens} in · ${stats.outputTokens} out |`,
|
|
104
|
+
`| Tokens | ${formatTokens(stats.inputTokens)} in · ${formatTokens(stats.outputTokens)} out |`,
|
|
104
105
|
`| Queue | ${invocation.agent.inbox.nextTurn.length} follow-up · ${invocation.agent.inbox.nextStep.length} steering |`,
|
|
105
106
|
].join('\n'),
|
|
106
107
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command-session.js","sourceRoot":"","sources":["../src/command-session.ts"],"names":[],"mappings":"AAAA,iFAAiF;AAOjF,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"command-session.js","sourceRoot":"","sources":["../src/command-session.ts"],"names":[],"mappings":"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"}
|
package/lib/command-steer.js
CHANGED
|
@@ -7,12 +7,18 @@ function steer(invocation) {
|
|
|
7
7
|
const input = invocation.rawInput.trim();
|
|
8
8
|
if (input === '')
|
|
9
9
|
return { kind: 'error', text: 'Usage: /steer <message>' };
|
|
10
|
+
if (invocation.agent.status !== 'running') {
|
|
11
|
+
return {
|
|
12
|
+
kind: 'error',
|
|
13
|
+
text: 'Steering is only available during an active turn. Send a normal message to start the next turn.',
|
|
14
|
+
};
|
|
15
|
+
}
|
|
10
16
|
invocation.agent.steer(createUserMessage({ content: [{ type: 'text', text: input }], source: { kind: 'user' } }));
|
|
11
|
-
return { kind: 'success', text:
|
|
17
|
+
return { kind: 'success', text: "Guidance queued for the current turn's next model step." };
|
|
12
18
|
}
|
|
13
19
|
export function apply(ctx) {
|
|
14
20
|
registerCommands(ctx, [
|
|
15
|
-
{ name: 'steer', description: '
|
|
21
|
+
{ name: 'steer', description: 'Guide the active turn before its next model step', input: { hint: '<message>' }, handler: steer },
|
|
16
22
|
], 'omdsh steering commands');
|
|
17
23
|
}
|
|
18
24
|
//# sourceMappingURL=command-steer.js.map
|
package/lib/command-steer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command-steer.js","sourceRoot":"","sources":["../src/command-steer.ts"],"names":[],"mappings":"AAAA,wDAAwD;AAIxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAE5D,MAAM,CAAC,MAAM,IAAI,GAAG,qBAAqB,CAAA;AACzC,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,UAAU,CAAC,CAAA;AAElC,SAAS,KAAK,CAAC,UAA6B;IAC1C,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAA;IACxC,IAAI,KAAK,KAAK,EAAE;QAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,yBAAyB,EAAE,CAAA;IAC3E,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,CAAA;IACjH,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"command-steer.js","sourceRoot":"","sources":["../src/command-steer.ts"],"names":[],"mappings":"AAAA,wDAAwD;AAIxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAE5D,MAAM,CAAC,MAAM,IAAI,GAAG,qBAAqB,CAAA;AACzC,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,UAAU,CAAC,CAAA;AAElC,SAAS,KAAK,CAAC,UAA6B;IAC1C,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAA;IACxC,IAAI,KAAK,KAAK,EAAE;QAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,yBAAyB,EAAE,CAAA;IAC3E,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC1C,OAAO;YACL,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,iGAAiG;SACxG,CAAA;IACH,CAAC;IACD,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,CAAA;IACjH,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,yDAAyD,EAAE,CAAA;AAC7F,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,GAAY;IAChC,gBAAgB,CAAC,GAAG,EAAE;QACpB,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,kDAAkD,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;KACjI,EAAE,yBAAyB,CAAC,CAAA;AAC/B,CAAC"}
|
package/lib/definition.d.ts
CHANGED
|
@@ -75,6 +75,18 @@ export interface TuiSessionControls {
|
|
|
75
75
|
/** Effective permission preset, such as workspace-write or danger-full-access. */
|
|
76
76
|
permission?: string;
|
|
77
77
|
}
|
|
78
|
+
/** Process-local repeated-prompt state contributed by the Loop plugin. */
|
|
79
|
+
export interface TuiLoopStatus {
|
|
80
|
+
phase: 'waiting' | 'running' | 'paused' | 'completed';
|
|
81
|
+
/** Automatic submissions already dispatched by this Loop. */
|
|
82
|
+
repeats?: number;
|
|
83
|
+
/** Configured automatic submissions for a count-limited Loop. */
|
|
84
|
+
total?: number;
|
|
85
|
+
/** Absolute deadline while a duration-limited Loop is running. */
|
|
86
|
+
deadline?: number;
|
|
87
|
+
/** Original duration expression for a time-limited loop. */
|
|
88
|
+
limit?: string;
|
|
89
|
+
}
|
|
78
90
|
/** Lightweight durable session row used by the welcome card and resume UI. */
|
|
79
91
|
export interface TuiRecentSession {
|
|
80
92
|
id: string;
|
|
@@ -134,6 +146,8 @@ export interface TuiService {
|
|
|
134
146
|
setStatus(status: TuiStatus): void;
|
|
135
147
|
/** Update the model and effective reasoning effort shown in the composer. */
|
|
136
148
|
setModel(model: string, reasoningEffort?: string): void;
|
|
149
|
+
/** Update the optional process-local Loop indicator in the fixed footer. */
|
|
150
|
+
setLoopStatus(status: TuiLoopStatus | undefined): void;
|
|
137
151
|
/** Replace the tool list shown by `/tools`. */
|
|
138
152
|
setTools(tools: readonly {
|
|
139
153
|
name: string;
|
package/lib/event-views.d.ts
CHANGED
|
@@ -18,7 +18,7 @@ import { type SettingsState } from './settings-list.ts';
|
|
|
18
18
|
import { type PromptSelectorState } from './prompt-selector.ts';
|
|
19
19
|
import { type StatusBarConfig, type StatusPreset } from './status-config.ts';
|
|
20
20
|
import { type Theme, type ThemeName } from './theme.ts';
|
|
21
|
-
import type { TuiRecentSession, TuiSessionControls, TuiSessionStats, TuiSubmission } from './definition.ts';
|
|
21
|
+
import type { TuiLoopStatus, TuiRecentSession, TuiSessionControls, TuiSessionStats, TuiSubmission } from './definition.ts';
|
|
22
22
|
import { type TuiToolPresentation } from './tool-renderers.ts';
|
|
23
23
|
import { type ToolInfo } from './tools-list.ts';
|
|
24
24
|
import type { WelcomeTip } from './welcome-tips.ts';
|
|
@@ -151,6 +151,8 @@ export interface ViewOptions {
|
|
|
151
151
|
sessionStats?: TuiSessionStats;
|
|
152
152
|
/** Harness-owned collaboration and permission state rendered in metadata. */
|
|
153
153
|
sessionControls?: TuiSessionControls;
|
|
154
|
+
/** Process-local repeated-prompt state rendered beside model controls. */
|
|
155
|
+
loopStatus?: TuiLoopStatus;
|
|
154
156
|
/** Visible groups, order, and label style for the status line. */
|
|
155
157
|
statusBar?: StatusBarConfig;
|
|
156
158
|
/** Legacy status preset accepted while direct render callers migrate. */
|
|
@@ -172,6 +174,7 @@ export interface ViewOptions {
|
|
|
172
174
|
}
|
|
173
175
|
/** Collapsed tool-output preview height (OMP `DEFAULT_TERMINAL_PREVIEW_LINES`). */
|
|
174
176
|
export declare const TOOL_COLLAPSED_LINES = 10;
|
|
177
|
+
export declare const TOOL_INPUT_COLLAPSED_LINES = 3;
|
|
175
178
|
/**
|
|
176
179
|
* Render one transcript block to display lines. Pure; shared by the tty view
|
|
177
180
|
* and the non-tty plain printer.
|
package/lib/event-views.js
CHANGED
|
@@ -290,6 +290,18 @@ function settleTool(block, result, error, presentation) {
|
|
|
290
290
|
}
|
|
291
291
|
/** Collapsed tool-output preview height (OMP `DEFAULT_TERMINAL_PREVIEW_LINES`). */
|
|
292
292
|
export const TOOL_COLLAPSED_LINES = 10;
|
|
293
|
+
export const TOOL_INPUT_COLLAPSED_LINES = 3;
|
|
294
|
+
function toolPreview(lines, width, limit, expanded, direction) {
|
|
295
|
+
const contentWidth = Math.max(1, width - 4);
|
|
296
|
+
const wrapped = lines.flatMap(line => wrapText(line, contentWidth));
|
|
297
|
+
if (expanded || wrapped.length <= limit)
|
|
298
|
+
return { lines: wrapped, hidden: 0 };
|
|
299
|
+
const hidden = wrapped.length - limit;
|
|
300
|
+
return {
|
|
301
|
+
lines: direction === 'tail' ? wrapped.slice(hidden) : wrapped.slice(0, limit),
|
|
302
|
+
hidden,
|
|
303
|
+
};
|
|
304
|
+
}
|
|
293
305
|
/** OMP AssistantMessage uses one horizontal cell of padding and no vertical padding. */
|
|
294
306
|
const ASSISTANT_PADDING_X = 1;
|
|
295
307
|
function assistantContentLines(lines, width, paddingX) {
|
|
@@ -333,15 +345,32 @@ function toolBlockLines(block, theme, width, spinnerFrame, expanded) {
|
|
|
333
345
|
? ''
|
|
334
346
|
: theme.fg('dim', ' ' + presentation.summary);
|
|
335
347
|
const header = icon + ' ' + theme.bold(presentation.title ?? block.name) + summary;
|
|
336
|
-
const
|
|
337
|
-
const
|
|
338
|
-
const
|
|
339
|
-
const
|
|
340
|
-
if (hidden > 0) {
|
|
341
|
-
|
|
348
|
+
const input = toolPreview(presentation.input, width, TOOL_INPUT_COLLAPSED_LINES, expanded, 'head');
|
|
349
|
+
const output = toolPreview(presentation.output, width, TOOL_COLLAPSED_LINES, expanded, presentation.outputPreview);
|
|
350
|
+
const hasOutput = presentation.output.length > 0;
|
|
351
|
+
const inputLines = input.lines.map(line => theme.fg('toolOutput', line));
|
|
352
|
+
if (input.hidden > 0) {
|
|
353
|
+
const hint = hasOutput && output.hidden > 0 ? '' : ' · ⟨Ctrl+O: Expand⟩';
|
|
354
|
+
inputLines.push(theme.fg('dim', `… ${input.hidden} more input lines${hint}`));
|
|
342
355
|
}
|
|
356
|
+
const outputLines = output.lines.map(line => theme.fg('toolOutput', line));
|
|
357
|
+
if (output.hidden > 0) {
|
|
358
|
+
const position = presentation.outputPreview === 'tail' ? 'earlier' : 'more';
|
|
359
|
+
const hint = theme.fg('dim', `… ${output.hidden} ${position} lines · ⟨Ctrl+O: Expand⟩`);
|
|
360
|
+
if (presentation.outputPreview === 'tail')
|
|
361
|
+
outputLines.unshift(hint);
|
|
362
|
+
else
|
|
363
|
+
outputLines.push(hint);
|
|
364
|
+
}
|
|
365
|
+
const sections = [
|
|
366
|
+
...(inputLines.length === 0 ? [] : [{ lines: inputLines }]),
|
|
367
|
+
...(outputLines.length === 0 ? [] : [{
|
|
368
|
+
...(inputLines.length === 0 ? {} : { label: theme.fg('toolTitle', 'Output') }),
|
|
369
|
+
lines: outputLines,
|
|
370
|
+
}]),
|
|
371
|
+
];
|
|
343
372
|
const state = block.status === 'running' ? 'running' : block.status === 'ok' ? 'ok' : 'error';
|
|
344
|
-
return renderFramedBlock({ header, state,
|
|
373
|
+
return renderFramedBlock({ header, state, sections, width }, theme);
|
|
345
374
|
}
|
|
346
375
|
/**
|
|
347
376
|
* Render one transcript block to display lines. Pure; shared by the tty view
|
|
@@ -782,6 +811,7 @@ export function renderView(state, options) {
|
|
|
782
811
|
model: options.model,
|
|
783
812
|
...(options.reasoningEffort === undefined ? {} : { reasoningEffort: options.reasoningEffort }),
|
|
784
813
|
...(options.sessionControls === undefined ? {} : { controls: options.sessionControls }),
|
|
814
|
+
...(options.loopStatus === undefined ? {} : { loop: options.loopStatus }),
|
|
785
815
|
...(pwd === '' ? {} : { pwd }),
|
|
786
816
|
...(options.branch === undefined || options.branch === '' ? {} : { branch: options.branch }),
|
|
787
817
|
...(options.sessionStats === undefined ? {} : { stats: options.sessionStats }),
|