@duetso/agent 0.1.201 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +43 -9
- package/dist/package.json +1 -1
- package/dist/src/cli/help.d.ts +1 -0
- package/dist/src/cli/help.d.ts.map +1 -1
- package/dist/src/cli/help.js +73 -26
- package/dist/src/cli/help.js.map +1 -1
- package/dist/src/cli/inline-slash.js +1 -1
- package/dist/src/cli/login.d.ts +2 -3
- package/dist/src/cli/login.d.ts.map +1 -1
- package/dist/src/cli/login.js +17 -32
- package/dist/src/cli/login.js.map +1 -1
- package/dist/src/cli/memory-add.d.ts +8 -1
- package/dist/src/cli/memory-add.d.ts.map +1 -1
- package/dist/src/cli/memory-add.js +49 -53
- package/dist/src/cli/memory-add.js.map +1 -1
- package/dist/src/cli/memory-db.d.ts +23 -0
- package/dist/src/cli/memory-db.d.ts.map +1 -1
- package/dist/src/cli/memory-db.js +48 -1
- package/dist/src/cli/memory-db.js.map +1 -1
- package/dist/src/cli/memory-json.d.ts +67 -0
- package/dist/src/cli/memory-json.d.ts.map +1 -0
- package/dist/src/cli/memory-json.js +28 -0
- package/dist/src/cli/memory-json.js.map +1 -0
- package/dist/src/cli/memory-query.d.ts +20 -1
- package/dist/src/cli/memory-query.d.ts.map +1 -1
- package/dist/src/cli/memory-query.js +45 -20
- package/dist/src/cli/memory-query.js.map +1 -1
- package/dist/src/cli/memory-recall.d.ts +53 -0
- package/dist/src/cli/memory-recall.d.ts.map +1 -0
- package/dist/src/cli/memory-recall.js +217 -0
- package/dist/src/cli/memory-recall.js.map +1 -0
- package/dist/src/cli/memory.d.ts +3 -1
- package/dist/src/cli/memory.d.ts.map +1 -1
- package/dist/src/cli/memory.js +10 -4
- package/dist/src/cli/memory.js.map +1 -1
- package/dist/src/cli/model-gateway.d.ts +3 -3
- package/dist/src/cli/model-gateway.js +3 -3
- package/dist/src/cli/rpc.d.ts +19 -5
- package/dist/src/cli/rpc.d.ts.map +1 -1
- package/dist/src/cli/rpc.js +20 -19
- package/dist/src/cli/rpc.js.map +1 -1
- package/dist/src/cli/run.d.ts +8 -0
- package/dist/src/cli/run.d.ts.map +1 -1
- package/dist/src/cli/run.js +7 -20
- package/dist/src/cli/run.js.map +1 -1
- package/dist/src/cli/send-feedback.d.ts +1 -1
- package/dist/src/cli/send-feedback.js +1 -1
- package/dist/src/cli/shared.d.ts +16 -3
- package/dist/src/cli/shared.d.ts.map +1 -1
- package/dist/src/cli/shared.js +19 -4
- package/dist/src/cli/shared.js.map +1 -1
- package/dist/src/cli/train.d.ts.map +1 -1
- package/dist/src/cli/train.js +40 -23
- package/dist/src/cli/train.js.map +1 -1
- package/dist/src/cli.d.ts +1 -0
- package/dist/src/cli.d.ts.map +1 -1
- package/dist/src/cli.js +1 -0
- package/dist/src/cli.js.map +1 -1
- package/dist/src/lib/duet-api-url.d.ts +9 -0
- package/dist/src/lib/duet-api-url.d.ts.map +1 -0
- package/dist/src/lib/duet-api-url.js +18 -0
- package/dist/src/lib/duet-api-url.js.map +1 -0
- package/dist/src/lib/feedback.d.ts +1 -1
- package/dist/src/lib/feedback.js +4 -4
- package/dist/src/lib/feedback.js.map +1 -1
- package/dist/src/lib/login.d.ts +24 -21
- package/dist/src/lib/login.d.ts.map +1 -1
- package/dist/src/lib/login.js +50 -114
- package/dist/src/lib/login.js.map +1 -1
- package/dist/src/memory/embedding.d.ts +20 -15
- package/dist/src/memory/embedding.d.ts.map +1 -1
- package/dist/src/memory/embedding.js +26 -20
- package/dist/src/memory/embedding.js.map +1 -1
- package/dist/src/memory/recall.d.ts +44 -0
- package/dist/src/memory/recall.d.ts.map +1 -1
- package/dist/src/memory/recall.js +92 -6
- package/dist/src/memory/recall.js.map +1 -1
- package/dist/src/model-resolution/duet-gateway.d.ts +4 -3
- package/dist/src/model-resolution/duet-gateway.d.ts.map +1 -1
- package/dist/src/model-resolution/duet-gateway.js +12 -6
- package/dist/src/model-resolution/duet-gateway.js.map +1 -1
- package/dist/src/tui/app.d.ts +2 -2
- package/dist/src/tui/app.d.ts.map +1 -1
- package/dist/src/tui/app.js +20 -2
- package/dist/src/tui/app.js.map +1 -1
- package/dist/src/tui/paste-controller.d.ts +3 -0
- package/dist/src/tui/paste-controller.d.ts.map +1 -1
- package/dist/src/tui/paste-controller.js +25 -0
- package/dist/src/tui/paste-controller.js.map +1 -1
- package/dist/src/tui/session-subscription.d.ts +10 -0
- package/dist/src/tui/session-subscription.d.ts.map +1 -1
- package/dist/src/tui/session-subscription.js +22 -5
- package/dist/src/tui/session-subscription.js.map +1 -1
- package/dist/src/tui/slash-commands.d.ts +4 -4
- package/dist/src/tui/slash-commands.js +4 -4
- package/dist/src/tui/step-renderer.d.ts +4 -0
- package/dist/src/tui/step-renderer.d.ts.map +1 -1
- package/dist/src/tui/step-renderer.js +41 -37
- package/dist/src/tui/step-renderer.js.map +1 -1
- package/dist/src/tui/tool-formatters.d.ts +2 -2
- package/dist/src/tui/tool-formatters.d.ts.map +1 -1
- package/dist/src/turn-runner/agent-events.d.ts +12 -1
- package/dist/src/turn-runner/agent-events.d.ts.map +1 -1
- package/dist/src/turn-runner/agent-events.js +60 -42
- package/dist/src/turn-runner/agent-events.js.map +1 -1
- package/dist/src/turn-runner/tools.d.ts.map +1 -1
- package/dist/src/turn-runner/tools.js +15 -54
- package/dist/src/turn-runner/tools.js.map +1 -1
- package/dist/src/turn-runner/turn-runner.d.ts +2 -0
- package/dist/src/turn-runner/turn-runner.d.ts.map +1 -1
- package/dist/src/turn-runner/turn-runner.js +4 -2
- package/dist/src/turn-runner/turn-runner.js.map +1 -1
- package/dist/src/types/memory.d.ts +11 -0
- package/dist/src/types/memory.d.ts.map +1 -1
- package/dist/src/types/protocol.d.ts +22 -3
- package/dist/src/types/protocol.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/src/lib/duet-app-url.d.ts +0 -10
- package/dist/src/lib/duet-app-url.d.ts.map +0 -1
- package/dist/src/lib/duet-app-url.js +0 -19
- package/dist/src/lib/duet-app-url.js.map +0 -1
- package/dist/src/lib/sync-skills.d.ts +0 -54
- package/dist/src/lib/sync-skills.d.ts.map +0 -1
- package/dist/src/lib/sync-skills.js +0 -215
- package/dist/src/lib/sync-skills.js.map +0 -1
|
@@ -59,6 +59,21 @@ export class PasteController {
|
|
|
59
59
|
this.nextImageId = 1;
|
|
60
60
|
this.statusController.setPendingImageCount(0);
|
|
61
61
|
}
|
|
62
|
+
/** Re-stage already-built image attachments from a queued follow-up. */
|
|
63
|
+
stageImages(images) {
|
|
64
|
+
if (images.length === 0)
|
|
65
|
+
return;
|
|
66
|
+
for (const attachment of images) {
|
|
67
|
+
this.pendingImages.push({
|
|
68
|
+
id: this.nextImageId,
|
|
69
|
+
label: `[Image #${this.nextImageId}]`,
|
|
70
|
+
path: "",
|
|
71
|
+
attachment,
|
|
72
|
+
});
|
|
73
|
+
this.nextImageId += 1;
|
|
74
|
+
}
|
|
75
|
+
this.statusController.setPendingImageCount(this.pendingImages.length);
|
|
76
|
+
}
|
|
62
77
|
/**
|
|
63
78
|
* Handle a bracketed-paste event from the textarea. Decides synchronously
|
|
64
79
|
* whether the payload is image bytes, a file path, an empty trigger that
|
|
@@ -201,6 +216,9 @@ export class PasteController {
|
|
|
201
216
|
if (candidates.length === 0)
|
|
202
217
|
return;
|
|
203
218
|
const alreadyAttached = new Set(this.pendingImages.map((p) => p.path));
|
|
219
|
+
// Re-staged follow-up images keep their bytes but not their source path,
|
|
220
|
+
// so path-only dedup misses popped prompts that still mention that path.
|
|
221
|
+
const alreadyAttachedContent = new Set(this.pendingImages.map((p) => imageContentKey(p.attachment)));
|
|
204
222
|
const seen = new Set();
|
|
205
223
|
for (const candidate of candidates) {
|
|
206
224
|
// Normalize each extracted substring through the same shell-escape /
|
|
@@ -229,6 +247,10 @@ export class PasteController {
|
|
|
229
247
|
rawPath: normalized,
|
|
230
248
|
id: this.nextImageId,
|
|
231
249
|
});
|
|
250
|
+
const contentKey = imageContentKey(pending.attachment);
|
|
251
|
+
if (alreadyAttachedContent.has(contentKey))
|
|
252
|
+
continue;
|
|
253
|
+
alreadyAttachedContent.add(contentKey);
|
|
232
254
|
alreadyAttached.add(pending.path);
|
|
233
255
|
this.nextImageId += 1;
|
|
234
256
|
this.pendingImages.push(pending);
|
|
@@ -287,6 +309,9 @@ export class PasteController {
|
|
|
287
309
|
}
|
|
288
310
|
}
|
|
289
311
|
}
|
|
312
|
+
function imageContentKey(attachment) {
|
|
313
|
+
return `${attachment.mimeType}:${attachment.data}`;
|
|
314
|
+
}
|
|
290
315
|
function formatBytes(n) {
|
|
291
316
|
if (n < 1024)
|
|
292
317
|
return `${n} B`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paste-controller.js","sourceRoot":"","sources":["../../../src/tui/paste-controller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAA4C,MAAM,eAAe,CAAC;AAE3F,OAAO,EACL,yBAAyB,EACzB,0BAA0B,EAC1B,iBAAiB,EACjB,sBAAsB,EAEtB,kBAAkB,EAClB,wBAAwB,EACxB,kBAAkB,EAClB,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"paste-controller.js","sourceRoot":"","sources":["../../../src/tui/paste-controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
import type { BoxRenderable, TextRenderable } from "@opentui/core";
|
|
2
2
|
import type { Session } from "../session/session.js";
|
|
3
|
+
import type { TurnFollowUpQueueEntry } from "../types/protocol.js";
|
|
3
4
|
import type { QuestionPicker } from "./question-picker.js";
|
|
4
5
|
import type { Sidebar } from "./sidebar.js";
|
|
5
6
|
import type { StatusController } from "./status-controller.js";
|
|
6
7
|
import type { StepRenderer } from "./step-renderer.js";
|
|
8
|
+
export interface FollowUpPopSuppression {
|
|
9
|
+
pending: TurnFollowUpQueueEntry[];
|
|
10
|
+
}
|
|
7
11
|
export interface SessionSubscriptionDeps {
|
|
8
12
|
session: Session;
|
|
9
13
|
sidebar: Sidebar;
|
|
@@ -22,6 +26,12 @@ export interface SessionSubscriptionDeps {
|
|
|
22
26
|
* already running; this callback fires it later when the queue shrinks.
|
|
23
27
|
*/
|
|
24
28
|
appendUserBlock(message: string): void;
|
|
29
|
+
/**
|
|
30
|
+
* Entries lifted out of the queue by a Ctrl+C pop. When a removed entry
|
|
31
|
+
* matches one of these, it is dropped silently rather than rendered as a
|
|
32
|
+
* delivered `you:` block. Optional so non-TUI callers (tests) can omit it.
|
|
33
|
+
*/
|
|
34
|
+
popSuppression?: FollowUpPopSuppression;
|
|
25
35
|
}
|
|
26
36
|
/**
|
|
27
37
|
* Re-paints the sidebar from the session's current state snapshot. Used both
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-subscription.d.ts","sourceRoot":"","sources":["../../../src/tui/session-subscription.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"session-subscription.d.ts","sourceRoot":"","sources":["../../../src/tui/session-subscription.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,KAAK,EAAa,sBAAsB,EAAmB,MAAM,sBAAsB,CAAC;AAC/F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAUvD,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,sBAAsB,EAAE,CAAC;CACnC;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,4EAA4E;IAC5E,aAAa,EAAE,aAAa,CAAC;IAC7B,sEAAsE;IACtE,iBAAiB,EAAE,cAAc,CAAC;IAClC,YAAY,EAAE,YAAY,CAAC;IAC3B,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,cAAc,EAAE,cAAc,CAAC;IAC/B,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9C,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClE;;;;OAIG;IACH,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC;;;;OAIG;IACH,cAAc,CAAC,EAAE,sBAAsB,CAAC;CACzC;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAmB5F;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,uBAAuB,GAAG,MAAM,IAAI,CAuEzE"}
|
|
@@ -34,7 +34,7 @@ export function refreshSidebarFromSession(deps) {
|
|
|
34
34
|
* thin projection of the session state.
|
|
35
35
|
*/
|
|
36
36
|
export function bindSessionToUi(deps) {
|
|
37
|
-
const { session, sidebar, followUpPanel, followUpPanelBody, stepRenderer, statusController, questionPicker, appendLine, appendBlock, appendUserBlock, } = deps;
|
|
37
|
+
const { session, sidebar, followUpPanel, followUpPanelBody, stepRenderer, statusController, questionPicker, appendLine, appendBlock, appendUserBlock, popSuppression, } = deps;
|
|
38
38
|
const refreshSidebar = () => refreshSidebarFromSession({ session, sidebar });
|
|
39
39
|
// Seed the queue snapshot from the session's hydrated state so a resumed
|
|
40
40
|
// session that already has persisted follow-ups does not falsely treat
|
|
@@ -47,12 +47,10 @@ export function bindSessionToUi(deps) {
|
|
|
47
47
|
stepRenderer.renderStep(event.step);
|
|
48
48
|
}
|
|
49
49
|
else if (event.type === "follow_up_queue") {
|
|
50
|
-
// Render the new queue snapshot, mirror the count into the status
|
|
51
|
-
// line, and replay any entries the runner just delivered (entries
|
|
52
|
-
// present in the prior snapshot but absent from the new one) as
|
|
53
|
-
// proper `you:` transcript blocks.
|
|
54
50
|
const next = event.followUpQueue;
|
|
55
51
|
for (const delivered of diffRemovedEntries(previousQueue, next)) {
|
|
52
|
+
if (consumeSuppressedPop(popSuppression, delivered))
|
|
53
|
+
continue;
|
|
56
54
|
appendUserBlock(delivered.message);
|
|
57
55
|
if (delivered.images?.length) {
|
|
58
56
|
appendBlock(null, `📎 ${delivered.images.length} image attachment${delivered.images.length === 1 ? "" : "s"}`, COLORS.hint);
|
|
@@ -122,6 +120,25 @@ function renderFollowUpPanel(entries, panel, body) {
|
|
|
122
120
|
body.content = lines.join("\n");
|
|
123
121
|
panel.visible = true;
|
|
124
122
|
}
|
|
123
|
+
function consumeSuppressedPop(suppression, removed) {
|
|
124
|
+
if (!suppression)
|
|
125
|
+
return false;
|
|
126
|
+
const index = suppression.pending.findIndex((entry) => sameFollowUpEntry(entry, removed));
|
|
127
|
+
if (index === -1)
|
|
128
|
+
return false;
|
|
129
|
+
suppression.pending.splice(index, 1);
|
|
130
|
+
return true;
|
|
131
|
+
}
|
|
132
|
+
function sameFollowUpEntry(a, b) {
|
|
133
|
+
return a.message === b.message && sameImages(a.images, b.images);
|
|
134
|
+
}
|
|
135
|
+
function sameImages(a, b) {
|
|
136
|
+
const left = a ?? [];
|
|
137
|
+
const right = b ?? [];
|
|
138
|
+
if (left.length !== right.length)
|
|
139
|
+
return false;
|
|
140
|
+
return left.every((image, index) => image.data === right[index]?.data && image.mimeType === right[index]?.mimeType);
|
|
141
|
+
}
|
|
125
142
|
/**
|
|
126
143
|
* Returns the entries that were in `prev` but are no longer in `next`,
|
|
127
144
|
* treating the lists as message-text multisets. Used to detect deliveries
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-subscription.js","sourceRoot":"","sources":["../../../src/tui/session-subscription.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEpC;;;;GAIG;AACH,MAAM,qBAAqB,GAAG,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"session-subscription.js","sourceRoot":"","sources":["../../../src/tui/session-subscription.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,7 +14,7 @@ export interface SlashCommandContext {
|
|
|
14
14
|
* Controllers are optional because not every consumer of this
|
|
15
15
|
* interface wires the full TUI. The non-TUI CLI applies inline
|
|
16
16
|
* `/model` and `/thinking` against a stripped-down context that
|
|
17
|
-
* has no clipboard, transcript, or
|
|
17
|
+
* has no clipboard, transcript, or session-management surface — those commands
|
|
18
18
|
* are filtered out via `applyInlineSlashCommands`'s `onlyCommands`
|
|
19
19
|
* before they could ever run, so the handlers that depend on these
|
|
20
20
|
* controllers never see a missing one in practice.
|
|
@@ -24,12 +24,12 @@ export interface SlashCommandContext {
|
|
|
24
24
|
transcriptWriter?: TranscriptWriter;
|
|
25
25
|
appendBlock(label: string | null, body: string, fg: string): void;
|
|
26
26
|
/**
|
|
27
|
-
* Invoked by `/
|
|
27
|
+
* Invoked by `/clear` to ask the outer dispatcher to dispose the
|
|
28
28
|
* current session and re-enter `runTui` with a fresh one. The TUI
|
|
29
29
|
* tears its renderer down immediately after so the parent `while`
|
|
30
30
|
* loop in `cli/run.ts` wakes and performs the swap.
|
|
31
31
|
*/
|
|
32
|
-
|
|
32
|
+
onClear?(): void;
|
|
33
33
|
/**
|
|
34
34
|
* Invoked by `/model <name>` to swap the model used for subsequent
|
|
35
35
|
* turns. Returns the canonicalized name the session will use on the
|
|
@@ -64,7 +64,7 @@ export interface SlashCommandContext {
|
|
|
64
64
|
* takes when it appears anywhere in a longer prompt rather than as the
|
|
65
65
|
* whole submitted message.
|
|
66
66
|
*
|
|
67
|
-
* - `"none"`: bare invocation only (`/
|
|
67
|
+
* - `"none"`: bare invocation only (`/clear`). Matches `/name` with
|
|
68
68
|
* whitespace / start / end boundaries on both sides.
|
|
69
69
|
* - `"token"`: requires one whitespace-bounded argument (`/model X`).
|
|
70
70
|
* Matches `/name <token>` with whitespace / start before and consumes
|
|
@@ -65,12 +65,12 @@ export const BUILT_IN_SLASH_COMMANDS = [
|
|
|
65
65
|
},
|
|
66
66
|
},
|
|
67
67
|
{
|
|
68
|
-
name: "
|
|
68
|
+
name: "clear",
|
|
69
69
|
description: "Dispose the current session and start a fresh one",
|
|
70
|
-
matches: (message) => isBare(message, "
|
|
70
|
+
matches: (message) => isBare(message, "clear"),
|
|
71
71
|
handle: (_, ctx) => {
|
|
72
|
-
ctx.appendBlock("[
|
|
73
|
-
ctx.
|
|
72
|
+
ctx.appendBlock("[clear]", "starting a new session…", COLORS.system);
|
|
73
|
+
ctx.onClear?.();
|
|
74
74
|
},
|
|
75
75
|
inline: "none",
|
|
76
76
|
},
|
|
@@ -38,7 +38,11 @@ export declare class StepRenderer {
|
|
|
38
38
|
type: "memory";
|
|
39
39
|
}>): void;
|
|
40
40
|
private renderDelta;
|
|
41
|
+
private renderToolCallStart;
|
|
41
42
|
private renderToolCall;
|
|
43
|
+
/** Mount a new tool block into the transcript, or return undefined when the
|
|
44
|
+
* formatter hides this tool (e.g. ask_user_question owns its own display). */
|
|
45
|
+
private mountToolBlock;
|
|
42
46
|
private finalizeToolCall;
|
|
43
47
|
private finalizeDelta;
|
|
44
48
|
private toolBlockColumns;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"step-renderer.d.ts","sourceRoot":"","sources":["../../../src/tui/step-renderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAkB,MAAM,eAAe,CAAC;AACjE,OAAO,EAAgC,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"step-renderer.d.ts","sourceRoot":"","sources":["../../../src/tui/step-renderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAkB,MAAM,eAAe,CAAC;AACjE,OAAO,EAAgC,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AASxF,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AA+BhF,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,WAAW,CAAC;IACtB,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,gBAAgB,EAAE,gBAAgB,CAAC;IACnC;;6CAEyC;IACzC,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;CAC1B;AAED;;;;;;;;GAQG;AACH,qBAAa,YAAY;IAQX,OAAO,CAAC,QAAQ,CAAC,IAAI;IAPjC,OAAO,CAAC,gBAAgB,CAA6B;IACrD,OAAO,CAAC,qBAAqB,CAA6B;IAI1D,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAgC;gBAEpC,IAAI,EAAE,mBAAmB;IAEtD,UAAU,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI;IAiDhC;;wEAEoE;IACpE,uBAAuB,IAAI,IAAI;IAa/B,WAAW,CAAC,KAAK,CAAC,EAAE,cAAc,GAAG,IAAI;IAwBzC,iBAAiB,IAAI,IAAI;IAazB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAWpC,kBAAkB,CAAC,KAAK,EAAE,OAAO,CAAC,SAAS,EAAE;QAAE,IAAI,EAAE,QAAQ,CAAA;KAAE,CAAC,GAAG,IAAI;IAcvE,OAAO,CAAC,WAAW;IA+BnB,OAAO,CAAC,mBAAmB;IAc3B,OAAO,CAAC,cAAc;IAyBtB;mFAC+E;IAC/E,OAAO,CAAC,cAAc;IAetB,OAAO,CAAC,gBAAgB;IAqBxB,OAAO,CAAC,aAAa;IAcrB,OAAO,CAAC,gBAAgB;CAIzB;AAOD;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,CAAC,SAAS,EAAE;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAC,GAAG,MAAM,CAS3F"}
|
|
@@ -2,7 +2,7 @@ import { TextRenderable } from "@opentui/core";
|
|
|
2
2
|
import { formatElapsed, runningMarker } from "./status-controller.js";
|
|
3
3
|
import { SIDEBAR_WIDTH } from "./sidebar.js";
|
|
4
4
|
import { COLORS } from "./theme.js";
|
|
5
|
-
import { assembleToolBlock, formatToolBlock, truncateReasoningBody } from "./tool-formatters.js";
|
|
5
|
+
import { assembleToolBlock, formatToolBlock, truncateReasoningBody, } from "./tool-formatters.js";
|
|
6
6
|
/**
|
|
7
7
|
* Renders the streaming surface of a turn: text deltas, reasoning deltas,
|
|
8
8
|
* tool-call blocks (live spinner → ✓/✗), memory phase banners, and the
|
|
@@ -16,8 +16,8 @@ export class StepRenderer {
|
|
|
16
16
|
opts;
|
|
17
17
|
activeTextStream;
|
|
18
18
|
activeReasoningStream;
|
|
19
|
-
// Tool calls fire twice (
|
|
20
|
-
// block by toolCallId so the
|
|
19
|
+
// Tool calls fire twice (tool_call_start → tool_call). Track the rendered
|
|
20
|
+
// block by toolCallId so the canonical step updates the same line in place
|
|
21
21
|
// instead of pushing a separate block.
|
|
22
22
|
activeToolBlocks = new Map();
|
|
23
23
|
constructor(opts) {
|
|
@@ -51,6 +51,9 @@ export class StepRenderer {
|
|
|
51
51
|
this.opts.transcriptWriter.appendBlock("[reasoning]", truncateReasoningBody(trimmed), COLORS.reasoning);
|
|
52
52
|
}
|
|
53
53
|
}
|
|
54
|
+
else if (step.type === "tool_call_start") {
|
|
55
|
+
this.renderToolCallStart(step);
|
|
56
|
+
}
|
|
54
57
|
else if (step.type === "tool_call") {
|
|
55
58
|
this.renderToolCall(step);
|
|
56
59
|
}
|
|
@@ -139,57 +142,58 @@ export class StepRenderer {
|
|
|
139
142
|
updateStreamingBlock(next);
|
|
140
143
|
return next;
|
|
141
144
|
}
|
|
142
|
-
// Render a tool call as a single, self-updating block. The
|
|
143
|
-
//
|
|
144
|
-
//
|
|
145
|
-
//
|
|
146
|
-
//
|
|
147
|
-
//
|
|
148
|
-
//
|
|
149
|
-
|
|
145
|
+
// Render a tool call as a single, self-updating block. The
|
|
146
|
+
// `tool_call_start` step creates the block with a spinner; the canonical
|
|
147
|
+
// `tool_call` step replaces the spinner with ✓/✗ and appends the truncated
|
|
148
|
+
// result inline so the call and its outcome stay visually paired. Per-tool
|
|
149
|
+
// formatters in `tool-formatters.ts` decide the header text and whether the
|
|
150
|
+
// call should appear in the transcript at all (e.g. ask_user_question hides
|
|
151
|
+
// itself live and lets the `ask` terminal event own the question display).
|
|
152
|
+
renderToolCallStart(step) {
|
|
153
|
+
const block = this.mountToolBlock(formatToolBlock({
|
|
154
|
+
toolName: step.toolName,
|
|
155
|
+
status: "running",
|
|
156
|
+
input: step.input,
|
|
157
|
+
mode: "live",
|
|
158
|
+
}), COLORS.tool, Date.now());
|
|
159
|
+
if (block)
|
|
160
|
+
this.activeToolBlocks.set(step.toolCallId, block);
|
|
161
|
+
}
|
|
150
162
|
renderToolCall(step) {
|
|
151
163
|
const existing = this.activeToolBlocks.get(step.toolCallId);
|
|
152
164
|
if (existing) {
|
|
153
165
|
this.finalizeToolCall(step, existing);
|
|
154
166
|
return;
|
|
155
167
|
}
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
168
|
+
// No live block — the canonical step arrived without a preceding
|
|
169
|
+
// `tool_call_start` (cached/replayed history). It echoes the call's
|
|
170
|
+
// input, so it renders as a complete block on its own; there is just no
|
|
171
|
+
// real duration because we never saw the call start.
|
|
172
|
+
const block = this.mountToolBlock(formatToolBlock({
|
|
159
173
|
toolName: step.toolName,
|
|
160
|
-
status:
|
|
174
|
+
status: step.isError ? "error" : "completed",
|
|
161
175
|
input: step.input,
|
|
162
176
|
output: step.output,
|
|
163
177
|
mode: "live",
|
|
164
|
-
});
|
|
178
|
+
}), step.isError ? COLORS.error : COLORS.tool, undefined);
|
|
179
|
+
if (block)
|
|
180
|
+
this.finalizeToolCall(step, block);
|
|
181
|
+
}
|
|
182
|
+
/** Mount a new tool block into the transcript, or return undefined when the
|
|
183
|
+
* formatter hides this tool (e.g. ask_user_question owns its own display). */
|
|
184
|
+
mountToolBlock(formatted, fg, startedAt) {
|
|
165
185
|
if (formatted.hidden)
|
|
166
|
-
return;
|
|
167
|
-
const startedAt = isLive ? Date.now() : undefined;
|
|
168
|
-
const marker = "⏳";
|
|
169
|
-
const fg = step.status === "error" ? COLORS.error : COLORS.tool;
|
|
170
|
-
const columns = this.toolBlockColumns();
|
|
186
|
+
return undefined;
|
|
171
187
|
const line = new TextRenderable(this.opts.renderer, {
|
|
172
|
-
content: assembleToolBlock(formatted,
|
|
188
|
+
content: assembleToolBlock(formatted, "⏳", { columns: this.toolBlockColumns() }),
|
|
173
189
|
fg,
|
|
174
190
|
});
|
|
175
191
|
this.opts.transcriptWriter.beginBlock();
|
|
176
192
|
this.opts.transcriptWriter.mount(line);
|
|
177
|
-
|
|
178
|
-
line,
|
|
179
|
-
header: formatted.header,
|
|
180
|
-
body: formatted.body ?? "",
|
|
181
|
-
input: step.input,
|
|
182
|
-
startedAt,
|
|
183
|
-
};
|
|
184
|
-
this.activeToolBlocks.set(step.toolCallId, block);
|
|
185
|
-
// The same event may already carry a terminal status (cached/replayed
|
|
186
|
-
// history). Fall through to finalize against the just-created block.
|
|
187
|
-
if (!isLive) {
|
|
188
|
-
this.finalizeToolCall(step, block);
|
|
189
|
-
}
|
|
193
|
+
return { line, header: formatted.header, body: formatted.body ?? "", startedAt };
|
|
190
194
|
}
|
|
191
195
|
finalizeToolCall(step, block) {
|
|
192
|
-
const isError = step.
|
|
196
|
+
const isError = step.isError;
|
|
193
197
|
const glyph = isError ? "✗" : "✓";
|
|
194
198
|
const elapsedMs = block.startedAt === undefined ? 0 : Date.now() - block.startedAt;
|
|
195
199
|
// Sub-second runs drop the elapsed suffix so the transcript does not get
|
|
@@ -198,7 +202,7 @@ export class StepRenderer {
|
|
|
198
202
|
const formatted = formatToolBlock({
|
|
199
203
|
toolName: step.toolName,
|
|
200
204
|
status: isError ? "error" : "completed",
|
|
201
|
-
input:
|
|
205
|
+
input: step.input,
|
|
202
206
|
output: step.output,
|
|
203
207
|
mode: "live",
|
|
204
208
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"step-renderer.js","sourceRoot":"","sources":["../../../src/tui/step-renderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,cAAc,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,aAAa,EAAoB,MAAM,wBAAwB,CAAC;AACxF,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACpC,OAAO,
|
|
1
|
+
{"version":3,"file":"step-renderer.js","sourceRoot":"","sources":["../../../src/tui/step-renderer.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,8 +15,8 @@ import type { ImageContent, TextContent } from "@earendil-works/pi-ai";
|
|
|
15
15
|
* history, so the formatter sees which path it is on and can branch. */
|
|
16
16
|
export type ToolFormatMode = "live" | "history";
|
|
17
17
|
/** Status of a tool call as visible to the formatter. `running` covers the
|
|
18
|
-
*
|
|
19
|
-
*
|
|
18
|
+
* spinner phase before any result is available; `completed` and `error`
|
|
19
|
+
* carry the tool result. */
|
|
20
20
|
export type ToolCallStatus = "running" | "completed" | "error";
|
|
21
21
|
export interface ToolCallSpec {
|
|
22
22
|
toolName: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-formatters.d.ts","sourceRoot":"","sources":["../../../src/tui/tool-formatters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAGvE;;;;;;;;;;GAUG;AAEH;;wEAEwE;AACxE,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,SAAS,CAAC;AAEhD;;
|
|
1
|
+
{"version":3,"file":"tool-formatters.d.ts","sourceRoot":"","sources":["../../../src/tui/tool-formatters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAGvE;;;;;;;;;;GAUG;AAEH;;wEAEwE;AACxE,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,SAAS,CAAC;AAEhD;;4BAE4B;AAC5B,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,WAAW,GAAG,OAAO,CAAC;AAE/D,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,cAAc,CAAC;IACvB,KAAK,EAAE,OAAO,CAAC;IACf,0EAA0E;IAC1E,MAAM,CAAC,EAAE,aAAa,CAAC,WAAW,GAAG,YAAY,CAAC,CAAC;IACnD,IAAI,EAAE,cAAc,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B;;;;;OAKG;IACH,MAAM,EAAE,MAAM,CAAC;IACf,4EAA4E;IAC5E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6EAA6E;IAC7E,MAAM,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACzC;6EACyE;IACzE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAM1D;AAED;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,IAAI,CAAC;AAErC,MAAM,WAAW,wBAAwB;IACvC;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,aAAa,EACxB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,wBAA6B,GACrC,MAAM,CAaR;AA2BD,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,aAAa,CAAC,WAAW,GAAG,YAAY,CAAC,GAAG,SAAS,GAC7D,MAAM,CAMR;AAED,4EAA4E;AAC5E,wBAAgB,eAAe,CAAC,IAAI,EAAE,YAAY,GAAG,aAAa,CAGjE"}
|
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
import type { AgentEvent, AgentMessage } from "@earendil-works/pi-agent-core";
|
|
2
2
|
import type { TurnStepEvent } from "../types/protocol.js";
|
|
3
|
-
|
|
3
|
+
/**
|
|
4
|
+
* Build a translator from pi agent events to turn step events.
|
|
5
|
+
*
|
|
6
|
+
* The translator is stateful: pi's `tool_execution_end` does not carry the
|
|
7
|
+
* tool arguments, but the canonical `tool_call` step is self-contained (it
|
|
8
|
+
* echoes the call's `input`, mirroring how the canonical `text` step carries
|
|
9
|
+
* the full text after `text_delta`). Each call's input is remembered from
|
|
10
|
+
* `tool_execution_start` until its end event arrives. Tool call ids are
|
|
11
|
+
* unique across the parent and state agents, so one translator per runner is
|
|
12
|
+
* enough.
|
|
13
|
+
*/
|
|
14
|
+
export declare function createAgentEventTranslator(): (event: AgentEvent) => TurnStepEvent[];
|
|
4
15
|
export declare function agentMessageText(message: AgentMessage): string;
|
|
5
16
|
//# sourceMappingURL=agent-events.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-events.d.ts","sourceRoot":"","sources":["../../../src/turn-runner/agent-events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC9E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,wBAAgB,
|
|
1
|
+
{"version":3,"file":"agent-events.d.ts","sourceRoot":"","sources":["../../../src/turn-runner/agent-events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC9E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D;;;;;;;;;;GAUG;AACH,wBAAgB,0BAA0B,IAAI,CAAC,KAAK,EAAE,UAAU,KAAK,aAAa,EAAE,CAqDnF;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,CAW9D"}
|
|
@@ -1,48 +1,66 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Build a translator from pi agent events to turn step events.
|
|
3
|
+
*
|
|
4
|
+
* The translator is stateful: pi's `tool_execution_end` does not carry the
|
|
5
|
+
* tool arguments, but the canonical `tool_call` step is self-contained (it
|
|
6
|
+
* echoes the call's `input`, mirroring how the canonical `text` step carries
|
|
7
|
+
* the full text after `text_delta`). Each call's input is remembered from
|
|
8
|
+
* `tool_execution_start` until its end event arrives. Tool call ids are
|
|
9
|
+
* unique across the parent and state agents, so one translator per runner is
|
|
10
|
+
* enough.
|
|
11
|
+
*/
|
|
12
|
+
export function createAgentEventTranslator() {
|
|
13
|
+
const inputByToolCallId = new Map();
|
|
14
|
+
return (event) => {
|
|
15
|
+
switch (event.type) {
|
|
16
|
+
case "message_update": {
|
|
17
|
+
const update = event.assistantMessageEvent;
|
|
18
|
+
switch (update.type) {
|
|
19
|
+
case "text_delta":
|
|
20
|
+
return [{ type: "step", step: { type: "text_delta", delta: update.delta } }];
|
|
21
|
+
case "thinking_delta":
|
|
22
|
+
return [{ type: "step", step: { type: "reasoning_delta", delta: update.delta } }];
|
|
23
|
+
case "text_end":
|
|
24
|
+
return [{ type: "step", step: { type: "text", text: update.content } }];
|
|
25
|
+
case "thinking_end":
|
|
26
|
+
return [{ type: "step", step: { type: "reasoning", text: update.content } }];
|
|
27
|
+
}
|
|
28
|
+
return [];
|
|
14
29
|
}
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
input: event.args,
|
|
30
|
+
case "tool_execution_start":
|
|
31
|
+
inputByToolCallId.set(event.toolCallId, event.args);
|
|
32
|
+
return [
|
|
33
|
+
{
|
|
34
|
+
type: "step",
|
|
35
|
+
step: {
|
|
36
|
+
type: "tool_call_start",
|
|
37
|
+
toolName: event.toolName,
|
|
38
|
+
toolCallId: event.toolCallId,
|
|
39
|
+
input: event.args,
|
|
40
|
+
},
|
|
27
41
|
},
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
42
|
+
];
|
|
43
|
+
case "tool_execution_end": {
|
|
44
|
+
const input = inputByToolCallId.get(event.toolCallId);
|
|
45
|
+
inputByToolCallId.delete(event.toolCallId);
|
|
46
|
+
return [
|
|
47
|
+
{
|
|
48
|
+
type: "step",
|
|
49
|
+
step: {
|
|
50
|
+
type: "tool_call",
|
|
51
|
+
toolName: event.toolName,
|
|
52
|
+
toolCallId: event.toolCallId,
|
|
53
|
+
input,
|
|
54
|
+
isError: event.isError,
|
|
55
|
+
output: event.result?.content,
|
|
56
|
+
},
|
|
40
57
|
},
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
58
|
+
];
|
|
59
|
+
}
|
|
60
|
+
default:
|
|
61
|
+
return [];
|
|
62
|
+
}
|
|
63
|
+
};
|
|
46
64
|
}
|
|
47
65
|
export function agentMessageText(message) {
|
|
48
66
|
const content = "content" in message ? message.content : undefined;
|