@duetso/agent 0.1.202 → 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 +3 -6
- package/dist/package.json +1 -1
- package/dist/src/cli/help.d.ts.map +1 -1
- package/dist/src/cli/help.js +15 -21
- package/dist/src/cli/help.js.map +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/model-gateway.d.ts +3 -3
- package/dist/src/cli/model-gateway.js +3 -3
- package/dist/src/cli/rpc.d.ts +0 -2
- package/dist/src/cli/rpc.d.ts.map +1 -1
- package/dist/src/cli/rpc.js +1 -16
- package/dist/src/cli/rpc.js.map +1 -1
- package/dist/src/cli/run.d.ts.map +1 -1
- package/dist/src/cli/run.js +1 -15
- 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/train.js +1 -1
- package/dist/src/cli/train.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/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/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/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/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
|
@@ -1,18 +1,16 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { getDuetGatewayBaseUrl } from "../model-resolution/duet-gateway.js";
|
|
2
2
|
/**
|
|
3
|
-
* Client for
|
|
3
|
+
* Client for Duet gateway embeddings.
|
|
4
4
|
*
|
|
5
|
-
* Routes through the Duet
|
|
6
|
-
* by the user's existing `DUET_API_KEY`. Logged-in users get embeddings
|
|
7
|
-
*
|
|
8
|
-
* in a different provider key here so the runtime stays single-path.
|
|
5
|
+
* Routes through the Duet model gateway (`POST <gateway>/v1/embeddings`) gated
|
|
6
|
+
* by the user's existing `DUET_API_KEY`. Logged-in users get embeddings through
|
|
7
|
+
* the same gateway origin as model traffic; we deliberately do not expose a way
|
|
8
|
+
* to plug in a different provider key here so the runtime stays single-path.
|
|
9
9
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
* invalidate stale rows by tag.
|
|
14
|
-
* concrete model name — only the dimension width, which has to match
|
|
15
|
-
* the pgvector column.
|
|
10
|
+
* The requested model defaults to the current server-side embedding model and
|
|
11
|
+
* can be overridden with `DUET_EMBEDDING_MODEL`. We store the model echoed by
|
|
12
|
+
* the OpenAI-compatible response alongside each vector so a future model swap
|
|
13
|
+
* can invalidate stale rows by tag.
|
|
16
14
|
*
|
|
17
15
|
* Behavior:
|
|
18
16
|
* - Inputs are batched up to `EMBEDDING_BATCH_LIMIT` per HTTP call so
|
|
@@ -25,11 +23,14 @@ import { resolveDuetAppBaseUrl } from "../lib/duet-app-url.js";
|
|
|
25
23
|
* tool catches it and logs once; the backfill worker logs and
|
|
26
24
|
* sleeps until the user logs in).
|
|
27
25
|
*/
|
|
28
|
-
/** Embedding dimensions
|
|
26
|
+
/** Embedding dimensions expected by the pgvector column. */
|
|
29
27
|
export const EMBEDDING_DIMENSIONS = 3072;
|
|
30
28
|
/** Maximum input strings sent in a single embedding request. */
|
|
31
29
|
export const EMBEDDING_BATCH_LIMIT = 100;
|
|
32
|
-
|
|
30
|
+
/** Current Duet embedding default; matches the 3072-dim pgvector table. */
|
|
31
|
+
export const DEFAULT_DUET_EMBEDDING_MODEL = "google/gemini-embedding-2";
|
|
32
|
+
export const DUET_EMBEDDING_MODEL_ENV = "DUET_EMBEDDING_MODEL";
|
|
33
|
+
const ENDPOINT_PATH = "/v1/embeddings";
|
|
33
34
|
const MAX_RETRIES = 3;
|
|
34
35
|
const BASE_BACKOFF_MS = 500;
|
|
35
36
|
export class EmbeddingUnavailableError extends Error {
|
|
@@ -44,7 +45,8 @@ export class EmbeddingUnavailableError extends Error {
|
|
|
44
45
|
* `recall_memory` query so connection reuse can amortize TLS setup.
|
|
45
46
|
*/
|
|
46
47
|
export function createEmbeddingClient(options = {}) {
|
|
47
|
-
const baseUrl = options.baseUrl ??
|
|
48
|
+
const baseUrl = options.baseUrl ?? getDuetGatewayBaseUrl();
|
|
49
|
+
const requestedModel = options.model ?? resolveEmbeddingModel();
|
|
48
50
|
const fetchImpl = options.fetch ?? fetch;
|
|
49
51
|
return async (inputs) => {
|
|
50
52
|
if (inputs.length === 0)
|
|
@@ -56,12 +58,13 @@ export function createEmbeddingClient(options = {}) {
|
|
|
56
58
|
throw new EmbeddingUnavailableError("DUET_API_KEY is not set; embeddings unavailable. Run `duet login` to enable hybrid memory retrieval.");
|
|
57
59
|
}
|
|
58
60
|
const embeddings = [];
|
|
59
|
-
let
|
|
61
|
+
let responseModel = "";
|
|
60
62
|
for (let offset = 0; offset < inputs.length; offset += EMBEDDING_BATCH_LIMIT) {
|
|
61
63
|
const slice = inputs.slice(offset, offset + EMBEDDING_BATCH_LIMIT);
|
|
62
64
|
const batch = await postBatch({
|
|
63
65
|
url: `${baseUrl}${ENDPOINT_PATH}`,
|
|
64
66
|
apiKey,
|
|
67
|
+
model: requestedModel,
|
|
65
68
|
inputs: slice,
|
|
66
69
|
fetchImpl,
|
|
67
70
|
});
|
|
@@ -73,9 +76,9 @@ export function createEmbeddingClient(options = {}) {
|
|
|
73
76
|
// Take the last one so the caller sees what the server most
|
|
74
77
|
// recently agreed to; mid-call mismatches are not a thing we
|
|
75
78
|
// currently need to reconcile.
|
|
76
|
-
|
|
79
|
+
responseModel = batch.model;
|
|
77
80
|
}
|
|
78
|
-
return { embeddings, model };
|
|
81
|
+
return { embeddings, model: responseModel };
|
|
79
82
|
};
|
|
80
83
|
}
|
|
81
84
|
async function postBatch(options) {
|
|
@@ -88,11 +91,11 @@ async function postBatch(options) {
|
|
|
88
91
|
authorization: `Bearer ${options.apiKey}`,
|
|
89
92
|
"content-type": "application/json",
|
|
90
93
|
},
|
|
91
|
-
body: JSON.stringify({
|
|
94
|
+
body: JSON.stringify({ model: options.model, input: options.inputs }),
|
|
92
95
|
});
|
|
93
96
|
if (response.ok) {
|
|
94
97
|
const body = (await response.json());
|
|
95
|
-
return { embeddings: body.data.
|
|
98
|
+
return { embeddings: body.data.map((entry) => entry.embedding), model: body.model };
|
|
96
99
|
}
|
|
97
100
|
// 4xx errors (auth, malformed input) will not improve on retry;
|
|
98
101
|
// surface them immediately so callers see the real cause.
|
|
@@ -123,6 +126,9 @@ function resolveApiKey(override) {
|
|
|
123
126
|
return override;
|
|
124
127
|
return process.env.DUET_API_KEY;
|
|
125
128
|
}
|
|
129
|
+
function resolveEmbeddingModel() {
|
|
130
|
+
return process.env[DUET_EMBEDDING_MODEL_ENV]?.trim() || DEFAULT_DUET_EMBEDDING_MODEL;
|
|
131
|
+
}
|
|
126
132
|
async function safeReadText(response) {
|
|
127
133
|
try {
|
|
128
134
|
return await response.text();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"embedding.js","sourceRoot":"","sources":["../../../src/memory/embedding.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"embedding.js","sourceRoot":"","sources":["../../../src/memory/embedding.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,15 +5,16 @@ import { type Model } from "@earendil-works/pi-ai";
|
|
|
5
5
|
* parallel model registry, the `duet-gateway` provider piggybacks on upstream
|
|
6
6
|
* model definitions and only swaps `baseUrl` to point at Duet.
|
|
7
7
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
8
|
+
* `DUET_GATEWAY_BASE_URL` can point model traffic at a dedicated gateway
|
|
9
|
+
* origin. When it is unset, model traffic goes directly to
|
|
10
|
+
* `https://gateway.duet.so`.
|
|
11
11
|
*
|
|
12
12
|
* Auth flows through pi-ai's existing vercel-ai-gateway path, which reads
|
|
13
13
|
* `AI_GATEWAY_API_KEY` — the CLI shims that env var from `DUET_API_KEY` at
|
|
14
14
|
* startup so users only need to set the duet token.
|
|
15
15
|
*/
|
|
16
16
|
export declare const DUET_GATEWAY_API_KEY_ENV = "DUET_API_KEY";
|
|
17
|
+
export declare const DUET_GATEWAY_BASE_URL_ENV = "DUET_GATEWAY_BASE_URL";
|
|
17
18
|
export declare function getDuetGatewayBaseUrl(): string;
|
|
18
19
|
/**
|
|
19
20
|
* Resolve a `duet-gateway:<modelId>` string to a Model.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"duet-gateway.d.ts","sourceRoot":"","sources":["../../../src/model-resolution/duet-gateway.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,KAAK,KAAK,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"duet-gateway.d.ts","sourceRoot":"","sources":["../../../src/model-resolution/duet-gateway.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,KAAK,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAO3E;;;;;;;;;;;;;GAaG;AAEH,eAAO,MAAM,wBAAwB,iBAAiB,CAAC;AACvD,eAAO,MAAM,yBAAyB,0BAA0B,CAAC;AAEjE,wBAAgB,qBAAqB,IAAI,MAAM,CAI9C;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CASnE;AAuED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS,CAK7F;AAaD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAK1E"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { getEnvApiKey, getModel } from "@earendil-works/pi-ai";
|
|
2
|
-
|
|
3
|
-
const GATEWAY_PATH = "/api/v1/ai-gateway";
|
|
2
|
+
const DEFAULT_DUET_GATEWAY_BASE_URL = "https://gateway.duet.so";
|
|
4
3
|
const OPENAI_MODEL_PREFIX = "openai/";
|
|
5
4
|
const VERCEL_GATEWAY_BASE_URL = "https://ai-gateway.vercel.sh";
|
|
6
5
|
const OPENAI_BASE_URL = "https://api.openai.com/v1";
|
|
@@ -10,17 +9,21 @@ const OPENAI_BASE_URL = "https://api.openai.com/v1";
|
|
|
10
9
|
* parallel model registry, the `duet-gateway` provider piggybacks on upstream
|
|
11
10
|
* model definitions and only swaps `baseUrl` to point at Duet.
|
|
12
11
|
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
12
|
+
* `DUET_GATEWAY_BASE_URL` can point model traffic at a dedicated gateway
|
|
13
|
+
* origin. When it is unset, model traffic goes directly to
|
|
14
|
+
* `https://gateway.duet.so`.
|
|
16
15
|
*
|
|
17
16
|
* Auth flows through pi-ai's existing vercel-ai-gateway path, which reads
|
|
18
17
|
* `AI_GATEWAY_API_KEY` — the CLI shims that env var from `DUET_API_KEY` at
|
|
19
18
|
* startup so users only need to set the duet token.
|
|
20
19
|
*/
|
|
21
20
|
export const DUET_GATEWAY_API_KEY_ENV = "DUET_API_KEY";
|
|
21
|
+
export const DUET_GATEWAY_BASE_URL_ENV = "DUET_GATEWAY_BASE_URL";
|
|
22
22
|
export function getDuetGatewayBaseUrl() {
|
|
23
|
-
|
|
23
|
+
const override = process.env[DUET_GATEWAY_BASE_URL_ENV]?.trim();
|
|
24
|
+
if (override)
|
|
25
|
+
return stripTrailingSlash(override);
|
|
26
|
+
return DEFAULT_DUET_GATEWAY_BASE_URL;
|
|
24
27
|
}
|
|
25
28
|
/**
|
|
26
29
|
* Resolve a `duet-gateway:<modelId>` string to a Model.
|
|
@@ -125,6 +128,9 @@ function getDuetGatewayBaseUrlForModel(model) {
|
|
|
125
128
|
}
|
|
126
129
|
return getDuetGatewayBaseUrl();
|
|
127
130
|
}
|
|
131
|
+
function stripTrailingSlash(url) {
|
|
132
|
+
return url.endsWith("/") ? url.slice(0, -1) : url;
|
|
133
|
+
}
|
|
128
134
|
/**
|
|
129
135
|
* Resolve the API key for a provider, including the project-local
|
|
130
136
|
* `duet-gateway` provider that pi-ai's built-in env-key map does not
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"duet-gateway.js","sourceRoot":"","sources":["../../../src/model-resolution/duet-gateway.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAc,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"duet-gateway.js","sourceRoot":"","sources":["../../../src/model-resolution/duet-gateway.ts"],"names":[],"mappings":"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"}
|
|
@@ -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":"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,EACL,iBAAiB,EACjB,eAAe,EAEf,qBAAqB,GACtB,MAAM,sBAAsB,CAAC;AA2C9B;;;;;;;;GAQG;AACH,MAAM,OAAO,YAAY;IAQM;IAPrB,gBAAgB,CAA6B;IAC7C,qBAAqB,CAA6B;IAC1D,0EAA0E;IAC1E,2EAA2E;IAC3E,uCAAuC;IACtB,gBAAgB,GAAG,IAAI,GAAG,EAAqB,CAAC;IAEjE,YAA6B,IAAyB;QAAzB,SAAI,GAAJ,IAAI,CAAqB;IAAG,CAAC;IAE1D,UAAU,CAAC,IAAc;QACvB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;QAE1B,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YAC/B,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,WAAW,CACtC,IAAI,CAAC,gBAAgB,EACrB,IAAI,EACJ,IAAI,CAAC,KAAK,EACV,MAAM,CAAC,KAAK,CACb,CAAC;QACJ,CAAC;aAAM,IAAI,IAAI,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;YAC3C,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,WAAW,CAC3C,IAAI,CAAC,qBAAqB,EAC1B,aAAa,EACb,IAAI,CAAC,KAAK,EACV,MAAM,CAAC,SAAS,EAChB,qBAAqB,CACtB,CAAC;QACJ,CAAC;aAAM,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAChC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3D,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBAC1B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;gBACrD,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;gBAClC,OAAO;YACT,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;QACxE,CAAC;aAAM,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YACrC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACjC,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;gBAC/B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,qBAAqB,EAAE,OAAO,CAAC,CAAC;gBACxD,IAAI,CAAC,qBAAqB,GAAG,SAAS,CAAC;gBACvC,OAAO;YACT,CAAC;YACD,IAAI,OAAO,EAAE,CAAC;gBACZ,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,WAAW,CACpC,aAAa,EACb,qBAAqB,CAAC,OAAO,CAAC,EAC9B,MAAM,CAAC,SAAS,CACjB,CAAC;YACJ,CAAC;QACH,CAAC;aAAM,IAAI,IAAI,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;YAC3C,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC;aAAM,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YACrC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;aAAM,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAClC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAClF,CAAC;IACH,CAAC;IAED;;wEAEoE;IACpE,uBAAuB;QACrB,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,KAAK,CAAC;YAAE,OAAO;QAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,EAAE,CAAC;YACnD,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS;gBAAE,SAAS;YAC5C,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,iBAAiB,CACpC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,SAAS,EAAE,EACvD,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC,EAC3C,EAAE,OAAO,EAAE,CACZ,CAAC;QACJ,CAAC;IACH,CAAC;IAED,WAAW,CAAC,KAAsB;QAChC,IAAI,CAAC,KAAK;YAAE,OAAO;QACnB,uEAAuE;QACvE,8EAA8E;QAC9E,oEAAoE;QACpE,sEAAsE;QACtE,yEAAyE;QACzE,6DAA6D;QAC7D,MAAM,MAAM,GAAG,cAAc,KAAK,CAAC,KAAK,QAAQ,KAAK,CAAC,MAAM,EAAE,CAAC;QAC/D,MAAM,SAAS,GAAG;YAChB,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;YACxB,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;YAC1B,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;YAC5B,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC;SAC9B;aACE,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAE,KAAgB,GAAG,CAAC,CAAC;aAC5C,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,KAAM,KAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACxE,MAAM,IAAI,GACR,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC;YACpB,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,aAAa,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAC3G,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,WAAW,MAAM,GAAG,IAAI,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IACjF,CAAC;IAED,iBAAiB;QACf,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,CAAC;QACnE,IAAI,SAAS,KAAK,SAAS;YAAE,OAAO;QACpC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,UAAU,CACnC,sBAAsB,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,EAAE,EAC7D,MAAM,CAAC,MAAM,CACd,CAAC;IACJ,CAAC;IAED,6EAA6E;IAC7E,4EAA4E;IAC5E,0EAA0E;IAC1E,6DAA6D;IAC7D,cAAc,CAAC,MAAc;QAC3B,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,kBAAkB,EAAE,CAAC;QACxD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,CAAC;QACnE,MAAM,YAAY,GAChB,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,EAAE,CAAC;QACzF,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,UAAU,CACnC,oBAAoB,SAAS,GAAG,YAAY,EAAE,EAC9C,MAAM,CAAC,MAAM,CACd,CAAC;IACJ,CAAC;IAED,kBAAkB,CAAC,KAA6C;QAC9D,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC/B,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC5D,OAAO;QACT,CAAC;QACD,MAAM,IAAI,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;QAC1C,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,WAAW,KAAK,CAAC,KAAK,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QACzF,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,EAAE,CAAC;YAC3C,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAEO,WAAW,CACjB,KAAiC,EACjC,KAAoB,EACpB,KAAa,EACb,EAAU,EACV,QAAmC;QAEnC,MAAM,IAAI,GACR,KAAK;YACJ;gBACC,IAAI,EAAE,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;gBACjE,KAAK;gBACL,IAAI,EAAE,EAAE;gBACR,QAAQ;aACiB,CAAC;QAC9B,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC;YACxC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9C,CAAC;QACD,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC;QACnB,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,2DAA2D;IAC3D,yEAAyE;IACzE,2EAA2E;IAC3E,2EAA2E;IAC3E,4EAA4E;IAC5E,4EAA4E;IAC5E,2EAA2E;IACnE,mBAAmB,CAAC,IAAoD;QAC9E,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAC/B,eAAe,CAAC;YACd,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,MAAM,EAAE,SAAS;YACjB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,IAAI,EAAE,MAAM;SACb,CAAC,EACF,MAAM,CAAC,IAAI,EACX,IAAI,CAAC,GAAG,EAAE,CACX,CAAC;QACF,IAAI,KAAK;YAAE,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IAC/D,CAAC;IAEO,cAAc,CAAC,IAA8C;QACnE,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC5D,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YACtC,OAAO;QACT,CAAC;QAED,iEAAiE;QACjE,oEAAoE;QACpE,wEAAwE;QACxE,qDAAqD;QACrD,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAC/B,eAAe,CAAC;YACd,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW;YAC5C,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,IAAI,EAAE,MAAM;SACb,CAAC,EACF,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EACzC,SAAS,CACV,CAAC;QACF,IAAI,KAAK;YAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAChD,CAAC;IAED;mFAC+E;IACvE,cAAc,CACpB,SAAwB,EACxB,EAAU,EACV,SAA6B;QAE7B,IAAI,SAAS,CAAC,MAAM;YAAE,OAAO,SAAS,CAAC;QACvC,MAAM,IAAI,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClD,OAAO,EAAE,iBAAiB,CAAC,SAAS,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,EAAE,CAAC;YAChF,EAAE;SACH,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC;QACxC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACvC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,IAAI,EAAE,EAAE,SAAS,EAAE,CAAC;IACnF,CAAC;IAEO,gBAAgB,CAAC,IAA8C,EAAE,KAAgB;QACvF,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC7B,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QAClC,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC;QACnF,yEAAyE;QACzE,wEAAwE;QACxE,MAAM,cAAc,GAAG,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/E,MAAM,SAAS,GAAG,eAAe,CAAC;YAChC,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW;YACvC,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,IAAI,EAAE,MAAM;SACb,CAAC,CAAC;QACH,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,iBAAiB,CAAC,SAAS,EAAE,GAAG,KAAK,GAAG,cAAc,EAAE,EAAE;YAC7E,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE;SACjC,CAAC,CAAC;QACH,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;QACrD,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAChD,CAAC;IAEO,aAAa,CAAC,KAAqB,EAAE,IAAY;QACvD,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;QAClB,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;IAED,wEAAwE;IACxE,oEAAoE;IACpE,sEAAsE;IACtE,0EAA0E;IAC1E,qEAAqE;IACrE,2EAA2E;IAC3E,2EAA2E;IAC3E,0EAA0E;IAC1E,wDAAwD;IAChD,gBAAgB;QACtB,MAAM,uBAAuB,GAAG,CAAC,CAAC;QAClC,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,GAAG,aAAa,GAAG,uBAAuB,CAAC,CAAC;IAClG,CAAC;CACF;AAED,SAAS,oBAAoB,CAAC,KAAqB;IACjD,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;IACtE,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACtE,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAA6C;IACjF,MAAM,eAAe,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACrF,MAAM,QAAQ,GAAG,OAAO,CACtB,KAAK,CAAC,uBAAuB,IAAI,KAAK,CAAC,uBAAuB,CAAC,MAAM,GAAG,CAAC,CAC1E,CAAC;IACF,IAAI,CAAC,eAAe,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClC,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,KAAK,CAAC,OAAO,CAAC;AACvB,CAAC"}
|
|
@@ -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;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-events.js","sourceRoot":"","sources":["../../../src/turn-runner/agent-events.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"agent-events.js","sourceRoot":"","sources":["../../../src/turn-runner/agent-events.ts"],"names":[],"mappings":"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"}
|
|
@@ -73,6 +73,8 @@ export declare function scaleContextWindowUsageToTotalTokens(base: TurnContextWi
|
|
|
73
73
|
export declare class TurnRunner {
|
|
74
74
|
readonly config: TurnRunnerConfig;
|
|
75
75
|
private readonly eventHandlers;
|
|
76
|
+
/** Maps pi agent events to turn steps; stateful so the canonical `tool_call` step can echo the call's input. */
|
|
77
|
+
private readonly agentEventToTurnEvents;
|
|
76
78
|
/** In-memory observation store used by context transforms during agent turns. */
|
|
77
79
|
protected readonly memory: MemoryContextCache;
|
|
78
80
|
/** Hydrates, flushes, and disposes durable observation storage. */
|