@openrouter/agent 0.8.0 → 0.10.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 +732 -7
- package/THIRD_PARTY_NOTICES.md +25 -0
- package/esm/index.d.ts +20 -5
- package/esm/index.d.ts.map +1 -1
- package/esm/index.js +10 -3
- package/esm/index.js.map +1 -1
- package/esm/inner-loop/call-model.d.ts.map +1 -1
- package/esm/inner-loop/call-model.js +63 -46
- package/esm/inner-loop/call-model.js.map +1 -1
- package/esm/inner-loop/resume-tool-results.d.ts +128 -0
- package/esm/inner-loop/resume-tool-results.d.ts.map +1 -0
- package/esm/inner-loop/resume-tool-results.js +244 -0
- package/esm/inner-loop/resume-tool-results.js.map +1 -0
- package/esm/lib/agent-tool.d.ts +92 -0
- package/esm/lib/agent-tool.d.ts.map +1 -0
- package/esm/lib/agent-tool.js +211 -0
- package/esm/lib/agent-tool.js.map +1 -0
- package/esm/lib/async-params.d.ts +96 -0
- package/esm/lib/async-params.d.ts.map +1 -1
- package/esm/lib/async-params.js +30 -1
- package/esm/lib/async-params.js.map +1 -1
- package/esm/lib/async-tool-registry.d.ts +134 -0
- package/esm/lib/async-tool-registry.d.ts.map +1 -0
- package/esm/lib/async-tool-registry.js +352 -0
- package/esm/lib/async-tool-registry.js.map +1 -0
- package/esm/lib/async-tools.d.ts +23 -0
- package/esm/lib/async-tools.d.ts.map +1 -0
- package/esm/lib/async-tools.js +19 -0
- package/esm/lib/async-tools.js.map +1 -0
- package/esm/lib/conversation-state.d.ts +1 -0
- package/esm/lib/conversation-state.d.ts.map +1 -1
- package/esm/lib/conversation-state.js +8 -0
- package/esm/lib/conversation-state.js.map +1 -1
- package/esm/lib/doom-loop.d.ts +533 -0
- package/esm/lib/doom-loop.d.ts.map +1 -0
- package/esm/lib/doom-loop.js +1221 -0
- package/esm/lib/doom-loop.js.map +1 -0
- package/esm/lib/hooks-schemas.d.ts +33 -0
- package/esm/lib/hooks-schemas.d.ts.map +1 -1
- package/esm/lib/hooks-schemas.js +54 -0
- package/esm/lib/hooks-schemas.js.map +1 -1
- package/esm/lib/hooks-types.d.ts +6 -2
- package/esm/lib/hooks-types.d.ts.map +1 -1
- package/esm/lib/hooks-types.js.map +1 -1
- package/esm/lib/model-result.d.ts +648 -12
- package/esm/lib/model-result.d.ts.map +1 -1
- package/esm/lib/model-result.js +2784 -164
- package/esm/lib/model-result.js.map +1 -1
- package/esm/lib/next-turn-params.d.ts.map +1 -1
- package/esm/lib/next-turn-params.js +3 -1
- package/esm/lib/next-turn-params.js.map +1 -1
- package/esm/lib/next-turn-params.test.js +72 -0
- package/esm/lib/next-turn-params.test.js.map +1 -1
- package/esm/lib/reusable-stream.d.ts +9 -0
- package/esm/lib/reusable-stream.d.ts.map +1 -1
- package/esm/lib/reusable-stream.js +17 -0
- package/esm/lib/reusable-stream.js.map +1 -1
- package/esm/lib/stream-transformers.d.ts +21 -1
- package/esm/lib/stream-transformers.d.ts.map +1 -1
- package/esm/lib/stream-transformers.js +45 -0
- package/esm/lib/stream-transformers.js.map +1 -1
- package/esm/lib/tool-check.d.ts +76 -0
- package/esm/lib/tool-check.d.ts.map +1 -0
- package/esm/lib/tool-check.js +241 -0
- package/esm/lib/tool-check.js.map +1 -0
- package/esm/lib/tool-concurrency.d.ts +42 -0
- package/esm/lib/tool-concurrency.d.ts.map +1 -0
- package/esm/lib/tool-concurrency.js +80 -0
- package/esm/lib/tool-concurrency.js.map +1 -0
- package/esm/lib/tool-context.d.ts +45 -1
- package/esm/lib/tool-context.d.ts.map +1 -1
- package/esm/lib/tool-context.js +60 -1
- package/esm/lib/tool-context.js.map +1 -1
- package/esm/lib/tool-executor.d.ts +52 -9
- package/esm/lib/tool-executor.d.ts.map +1 -1
- package/esm/lib/tool-executor.js +253 -21
- package/esm/lib/tool-executor.js.map +1 -1
- package/esm/lib/tool-orchestrator.d.ts.map +1 -1
- package/esm/lib/tool-orchestrator.js +87 -50
- package/esm/lib/tool-orchestrator.js.map +1 -1
- package/esm/lib/tool-set-types.d.ts +298 -0
- package/esm/lib/tool-set-types.d.ts.map +1 -0
- package/esm/lib/tool-set-types.js +2 -0
- package/esm/lib/tool-set-types.js.map +1 -0
- package/esm/lib/tool-set.d.ts +157 -0
- package/esm/lib/tool-set.d.ts.map +1 -0
- package/esm/lib/tool-set.js +473 -0
- package/esm/lib/tool-set.js.map +1 -0
- package/esm/lib/tool-task.d.ts +157 -0
- package/esm/lib/tool-task.d.ts.map +1 -0
- package/esm/lib/tool-task.js +206 -0
- package/esm/lib/tool-task.js.map +1 -0
- package/esm/lib/tool-types.d.ts +667 -38
- package/esm/lib/tool-types.d.ts.map +1 -1
- package/esm/lib/tool-types.js +59 -10
- package/esm/lib/tool-types.js.map +1 -1
- package/esm/lib/tool.d.ts +227 -19
- package/esm/lib/tool.d.ts.map +1 -1
- package/esm/lib/tool.js +206 -6
- package/esm/lib/tool.js.map +1 -1
- package/esm/mcp/auth/auth-resolver.d.ts +14 -0
- package/esm/mcp/auth/auth-resolver.d.ts.map +1 -0
- package/esm/mcp/auth/auth-resolver.js +27 -0
- package/esm/mcp/auth/auth-resolver.js.map +1 -0
- package/esm/mcp/auth/auth-types.d.ts +33 -0
- package/esm/mcp/auth/auth-types.d.ts.map +1 -0
- package/esm/mcp/auth/auth-types.js +4 -0
- package/esm/mcp/auth/auth-types.js.map +1 -0
- package/esm/mcp/build-tools.d.ts +29 -0
- package/esm/mcp/build-tools.d.ts.map +1 -0
- package/esm/mcp/build-tools.js +80 -0
- package/esm/mcp/build-tools.js.map +1 -0
- package/esm/mcp/cache/cache-store.d.ts +24 -0
- package/esm/mcp/cache/cache-store.d.ts.map +1 -0
- package/esm/mcp/cache/cache-store.js +20 -0
- package/esm/mcp/cache/cache-store.js.map +1 -0
- package/esm/mcp/cache/cache-types.d.ts +71 -0
- package/esm/mcp/cache/cache-types.d.ts.map +1 -0
- package/esm/mcp/cache/cache-types.js +49 -0
- package/esm/mcp/cache/cache-types.js.map +1 -0
- package/esm/mcp/cache/serialize.d.ts +25 -0
- package/esm/mcp/cache/serialize.d.ts.map +1 -0
- package/esm/mcp/cache/serialize.js +96 -0
- package/esm/mcp/cache/serialize.js.map +1 -0
- package/esm/mcp/close-quietly.d.ts +24 -0
- package/esm/mcp/close-quietly.d.ts.map +1 -0
- package/esm/mcp/close-quietly.js +30 -0
- package/esm/mcp/close-quietly.js.map +1 -0
- package/esm/mcp/create-mcp-tools.d.ts +13 -0
- package/esm/mcp/create-mcp-tools.d.ts.map +1 -0
- package/esm/mcp/create-mcp-tools.js +87 -0
- package/esm/mcp/create-mcp-tools.js.map +1 -0
- package/esm/mcp/elicitation.d.ts +11 -0
- package/esm/mcp/elicitation.d.ts.map +1 -0
- package/esm/mcp/elicitation.js +51 -0
- package/esm/mcp/elicitation.js.map +1 -0
- package/esm/mcp/errors.d.ts +91 -0
- package/esm/mcp/errors.d.ts.map +1 -0
- package/esm/mcp/errors.js +91 -0
- package/esm/mcp/errors.js.map +1 -0
- package/esm/mcp/handle.d.ts +66 -0
- package/esm/mcp/handle.d.ts.map +1 -0
- package/esm/mcp/handle.js +323 -0
- package/esm/mcp/handle.js.map +1 -0
- package/esm/mcp/index.d.ts +13 -0
- package/esm/mcp/index.d.ts.map +1 -0
- package/esm/mcp/index.js +11 -0
- package/esm/mcp/index.js.map +1 -0
- package/esm/mcp/mcp-connection.d.ts +150 -0
- package/esm/mcp/mcp-connection.d.ts.map +1 -0
- package/esm/mcp/mcp-connection.js +478 -0
- package/esm/mcp/mcp-connection.js.map +1 -0
- package/esm/mcp/mcp-sdk.d.ts +10 -0
- package/esm/mcp/mcp-sdk.d.ts.map +1 -0
- package/esm/mcp/mcp-sdk.js +37 -0
- package/esm/mcp/mcp-sdk.js.map +1 -0
- package/esm/mcp/rehydrate.d.ts +76 -0
- package/esm/mcp/rehydrate.d.ts.map +1 -0
- package/esm/mcp/rehydrate.js +505 -0
- package/esm/mcp/rehydrate.js.map +1 -0
- package/esm/mcp/resource-tools.d.ts +17 -0
- package/esm/mcp/resource-tools.d.ts.map +1 -0
- package/esm/mcp/resource-tools.js +155 -0
- package/esm/mcp/resource-tools.js.map +1 -0
- package/esm/mcp/result-mapper.d.ts +19 -0
- package/esm/mcp/result-mapper.d.ts.map +1 -0
- package/esm/mcp/result-mapper.js +40 -0
- package/esm/mcp/result-mapper.js.map +1 -0
- package/esm/mcp/schema/json-schema-guards.d.ts +14 -0
- package/esm/mcp/schema/json-schema-guards.d.ts.map +1 -0
- package/esm/mcp/schema/json-schema-guards.js +19 -0
- package/esm/mcp/schema/json-schema-guards.js.map +1 -0
- package/esm/mcp/schema/json-schema-to-zod.d.ts +20 -0
- package/esm/mcp/schema/json-schema-to-zod.d.ts.map +1 -0
- package/esm/mcp/schema/json-schema-to-zod.js +72 -0
- package/esm/mcp/schema/json-schema-to-zod.js.map +1 -0
- package/esm/mcp/tool-wrapper.d.ts +41 -0
- package/esm/mcp/tool-wrapper.d.ts.map +1 -0
- package/esm/mcp/tool-wrapper.js +131 -0
- package/esm/mcp/tool-wrapper.js.map +1 -0
- package/esm/mcp/transport-types.d.ts +45 -0
- package/esm/mcp/transport-types.d.ts.map +1 -0
- package/esm/mcp/transport-types.js +2 -0
- package/esm/mcp/transport-types.js.map +1 -0
- package/esm/mcp/types.d.ts +119 -0
- package/esm/mcp/types.d.ts.map +1 -0
- package/esm/mcp/types.js +2 -0
- package/esm/mcp/types.js.map +1 -0
- package/esm/mcp/version.d.ts +3 -0
- package/esm/mcp/version.d.ts.map +1 -0
- package/esm/mcp/version.js +5 -0
- package/esm/mcp/version.js.map +1 -0
- package/package.json +70 -5
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
import * as z4 from 'zod/v4';
|
|
2
|
+
import { isLongRunningTool, ToolType } from './tool-types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Reserved name of the single, universal task-interaction tool.
|
|
5
|
+
*
|
|
6
|
+
* Per team decision (2026-07-31): per-tool check schemas bloat every tool's
|
|
7
|
+
* wire definition for a shared set of functionality and scale quadratically
|
|
8
|
+
* with the tool count. Instead, ONE static tool handles every running task —
|
|
9
|
+
* addressed by `taskId` — while the *implementations* stay tool-resident
|
|
10
|
+
* (each tool's `check` config). Best of both: no per-tool context growth,
|
|
11
|
+
* tool-specific behavior preserved.
|
|
12
|
+
*/
|
|
13
|
+
export const TASK_TOOL_NAME = 'task';
|
|
14
|
+
/** Actions the universal task tool supports. */
|
|
15
|
+
export const TaskToolInputSchema = z4.object({
|
|
16
|
+
taskId: z4.string().describe('Task id from a pending tool output.'),
|
|
17
|
+
action: z4
|
|
18
|
+
.enum([
|
|
19
|
+
'check',
|
|
20
|
+
'steer',
|
|
21
|
+
'result',
|
|
22
|
+
'cancel',
|
|
23
|
+
])
|
|
24
|
+
.optional()
|
|
25
|
+
.describe("'check' (default): progress views. 'steer': send guidance to the running task. 'result': the final result if settled, else current status. 'cancel': stop the task."),
|
|
26
|
+
view: z4
|
|
27
|
+
.enum([
|
|
28
|
+
'status',
|
|
29
|
+
'logs',
|
|
30
|
+
'transcript',
|
|
31
|
+
])
|
|
32
|
+
.optional()
|
|
33
|
+
.describe("For action=check: 'status' (default) is a one-line state; 'logs' returns recent progress entries; 'transcript' returns full detail."),
|
|
34
|
+
tail: z4
|
|
35
|
+
.number()
|
|
36
|
+
.int()
|
|
37
|
+
.positive()
|
|
38
|
+
.max(200)
|
|
39
|
+
.optional()
|
|
40
|
+
.describe('For view=logs: how many recent entries. Default 20.'),
|
|
41
|
+
message: z4.string().optional().describe('For action=steer: the guidance to send.'),
|
|
42
|
+
reason: z4.string().optional().describe('For action=cancel: why.'),
|
|
43
|
+
params: z4
|
|
44
|
+
.record(z4.string(), z4.unknown())
|
|
45
|
+
.optional()
|
|
46
|
+
.describe("Extra parameters for the tool's custom check handler, when it declares one."),
|
|
47
|
+
});
|
|
48
|
+
/** Memoized Zod→JSON-Schema conversion — the input schema is static. */
|
|
49
|
+
let taskToolParameters;
|
|
50
|
+
/**
|
|
51
|
+
* The wire definition for the universal task tool. Static — identical
|
|
52
|
+
* regardless of how many long-running tools are registered, so the schema
|
|
53
|
+
* conversion runs once per process (memoized on first call).
|
|
54
|
+
*/
|
|
55
|
+
export function buildTaskToolApiDefinition(convertZod) {
|
|
56
|
+
taskToolParameters ?? (taskToolParameters = convertZod(TaskToolInputSchema));
|
|
57
|
+
return {
|
|
58
|
+
type: 'function',
|
|
59
|
+
name: TASK_TOOL_NAME,
|
|
60
|
+
description: 'Interact with a long-running task started by another tool: check progress (status, recent logs, or the full transcript), steer it with a message, fetch its result, or cancel it. Task ids come from pending tool outputs.',
|
|
61
|
+
strict: null,
|
|
62
|
+
parameters: taskToolParameters,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* True when a user tool already claims the reserved task-tool name
|
|
67
|
+
* (defense for dynamically-built tool lists that bypass `tool()`).
|
|
68
|
+
*
|
|
69
|
+
* Shared by registration (`needsTaskTool`) and the engine's interception
|
|
70
|
+
* guard (`taskToolActive`) so a collision disables BOTH: the built-in
|
|
71
|
+
* definition is not registered and calls named "task" route to the user's
|
|
72
|
+
* tool instead of being intercepted.
|
|
73
|
+
*/
|
|
74
|
+
export function hasTaskToolNameCollision(tools) {
|
|
75
|
+
return tools.some((t) => 'function' in t &&
|
|
76
|
+
t.function?.name === TASK_TOOL_NAME);
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* True when the tool list warrants registering the task tool: at least one
|
|
80
|
+
* long-running-capable tool, and no user tool already claiming the name.
|
|
81
|
+
*/
|
|
82
|
+
export function needsTaskTool(tools) {
|
|
83
|
+
if (hasTaskToolNameCollision(tools)) {
|
|
84
|
+
// Only worth a warning when something was actually disabled: with no
|
|
85
|
+
// long-running tool in the list, the built-in would not have been
|
|
86
|
+
// registered anyway, and warning on every callModel() is pure noise.
|
|
87
|
+
if (tools.some((t) => isLongRunningTool(t))) {
|
|
88
|
+
console.warn(`[AsyncTools] a user tool is named "${TASK_TOOL_NAME}" — the built-in task tool is disabled; models cannot check on long-running tasks.`);
|
|
89
|
+
}
|
|
90
|
+
return false;
|
|
91
|
+
}
|
|
92
|
+
return tools.some((t) => isLongRunningTool(t));
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Minimal Tool stub for the engine's internal bookkeeping around task-tool
|
|
96
|
+
* answers (result events, output shaping). Never executed as a user tool.
|
|
97
|
+
*/
|
|
98
|
+
export function buildTaskToolStub() {
|
|
99
|
+
return {
|
|
100
|
+
type: ToolType.Function,
|
|
101
|
+
function: {
|
|
102
|
+
name: TASK_TOOL_NAME,
|
|
103
|
+
inputSchema: TaskToolInputSchema,
|
|
104
|
+
execute: false,
|
|
105
|
+
},
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
/** Resolve a tool's check config to `{ schema, execute }` with defaults. */
|
|
109
|
+
export function resolveCheckConfig(check) {
|
|
110
|
+
if (check === undefined || check === true) {
|
|
111
|
+
return {
|
|
112
|
+
schema: undefined,
|
|
113
|
+
execute: undefined,
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
return {
|
|
117
|
+
schema: check.schema,
|
|
118
|
+
execute: check.execute,
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
/** The SDK default check handler: status / logs / transcript views. */
|
|
122
|
+
export function defaultCheckResult(input, turnContext, options) {
|
|
123
|
+
const task = turnContext.task;
|
|
124
|
+
if (!task) {
|
|
125
|
+
return {
|
|
126
|
+
error: 'unknown_task',
|
|
127
|
+
hint: 'No task context available for this check call.',
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
const view = input.view ?? 'status';
|
|
131
|
+
const statusView = task.statusView();
|
|
132
|
+
if (view === 'logs') {
|
|
133
|
+
const tail = input.tail ?? 20;
|
|
134
|
+
// Same character budget as the transcript view: entries can be up to
|
|
135
|
+
// maxEntryBytes each (4k default, tool-raisable), so 200 uncapped
|
|
136
|
+
// entries could dump hundreds of KB into the model's context. Newest
|
|
137
|
+
// entries win — drop from the OLDEST end when over budget.
|
|
138
|
+
const entries = task.tailLogs(tail);
|
|
139
|
+
let budget = options.maxTranscriptChars;
|
|
140
|
+
let firstKept = entries.length;
|
|
141
|
+
for (let i = entries.length - 1; i >= 0; i--) {
|
|
142
|
+
const entry = entries[i];
|
|
143
|
+
const size = typeof entry?.data === 'string'
|
|
144
|
+
? entry.data.length
|
|
145
|
+
: (JSON.stringify(entry?.data)?.length ?? 0);
|
|
146
|
+
if (size > budget) {
|
|
147
|
+
break;
|
|
148
|
+
}
|
|
149
|
+
budget -= size;
|
|
150
|
+
firstKept = i;
|
|
151
|
+
}
|
|
152
|
+
let kept = entries.slice(firstKept);
|
|
153
|
+
// Never answer with NOTHING when progress exists: if even the newest
|
|
154
|
+
// entry alone exceeds the budget, return it truncated to the budget
|
|
155
|
+
// rather than an empty list (a smaller tail could not help, and the
|
|
156
|
+
// transcript view is capped by the same number).
|
|
157
|
+
const newest = entries[entries.length - 1];
|
|
158
|
+
if (kept.length === 0 && newest !== undefined) {
|
|
159
|
+
const body = typeof newest.data === 'string'
|
|
160
|
+
? newest.data
|
|
161
|
+
: (JSON.stringify(newest.data) ?? String(newest.data));
|
|
162
|
+
kept = [
|
|
163
|
+
{
|
|
164
|
+
...newest,
|
|
165
|
+
data: `${body.slice(0, Math.max(0, options.maxTranscriptChars - 12))}…[truncated]`,
|
|
166
|
+
},
|
|
167
|
+
];
|
|
168
|
+
}
|
|
169
|
+
return {
|
|
170
|
+
...statusView,
|
|
171
|
+
logs: kept,
|
|
172
|
+
...(kept.length < entries.length && {
|
|
173
|
+
note: `Truncated to the ${kept.length} most recent entries (character budget); use view: 'transcript' or a smaller tail for more.`,
|
|
174
|
+
}),
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
if (view === 'transcript') {
|
|
178
|
+
return {
|
|
179
|
+
...statusView,
|
|
180
|
+
transcript: task.transcript(options.maxTranscriptChars),
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
return statusView;
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Answer a task-tool call against a PERSISTED task (deferred /
|
|
187
|
+
* cross-process, after a restart — no live registry entry). Only
|
|
188
|
+
* `status`-grade data survives: identity, timing, `lastLog`.
|
|
189
|
+
*/
|
|
190
|
+
export function persistedTaskCheckResult(input, pending) {
|
|
191
|
+
const base = {
|
|
192
|
+
taskId: pending.taskId,
|
|
193
|
+
toolName: pending.name,
|
|
194
|
+
mode: pending.mode,
|
|
195
|
+
status: pending.status,
|
|
196
|
+
startedAt: pending.startedAt,
|
|
197
|
+
elapsedMs: Date.now() - pending.startedAt,
|
|
198
|
+
...(pending.lastLog !== undefined && {
|
|
199
|
+
lastLog: pending.lastLog.text,
|
|
200
|
+
}),
|
|
201
|
+
...(pending.pollAfterMs !== undefined && {
|
|
202
|
+
pollAfterMs: pending.pollAfterMs,
|
|
203
|
+
}),
|
|
204
|
+
...(pending.expiresAt !== undefined && {
|
|
205
|
+
expiresAt: pending.expiresAt,
|
|
206
|
+
}),
|
|
207
|
+
...(pending.orphaned === true && {
|
|
208
|
+
orphaned: true,
|
|
209
|
+
note: 'This task was detached; its result will not be delivered.',
|
|
210
|
+
}),
|
|
211
|
+
};
|
|
212
|
+
// View-specific explanations must not displace the orphaned warning —
|
|
213
|
+
// "the result will never arrive" is the actionable part.
|
|
214
|
+
const withNote = (viewNote) => ('note' in base ? `${base.note} ${viewNote}` : viewNote);
|
|
215
|
+
const view = input.view ?? 'status';
|
|
216
|
+
if (view === 'logs') {
|
|
217
|
+
return {
|
|
218
|
+
...base,
|
|
219
|
+
logs: pending.lastLog
|
|
220
|
+
? [
|
|
221
|
+
{
|
|
222
|
+
at: pending.lastLog.at,
|
|
223
|
+
data: pending.lastLog.text,
|
|
224
|
+
},
|
|
225
|
+
]
|
|
226
|
+
: [],
|
|
227
|
+
note: withNote('Full logs are not retained across processes.'),
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
if (view === 'transcript') {
|
|
231
|
+
return {
|
|
232
|
+
...base,
|
|
233
|
+
transcript: '',
|
|
234
|
+
note: withNote(pending.mode === 'defer'
|
|
235
|
+
? 'No transcript available — this task is owned by an external system.'
|
|
236
|
+
: 'No transcript available — the task ran in a previous process.'),
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
return base;
|
|
240
|
+
}
|
|
241
|
+
//# sourceMappingURL=tool-check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-check.js","sourceRoot":"","sources":["../../src/lib/tool-check.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Minimal FIFO semaphore used to bound tool-execution concurrency.
|
|
3
|
+
*
|
|
4
|
+
* Three gates exist per run:
|
|
5
|
+
* - the round gate (`toolConcurrency.round`) — bounds simultaneous tool
|
|
6
|
+
* executions within a round;
|
|
7
|
+
* - per-tool gates (`maxConcurrency` on a tool) — bound simultaneous
|
|
8
|
+
* executions of one tool across the run;
|
|
9
|
+
* - the background pool (`toolConcurrency.background`) — bounds detached
|
|
10
|
+
* background-tool work that escaped the round barrier.
|
|
11
|
+
*
|
|
12
|
+
* Waiters are released strictly FIFO so a burst of calls cannot starve an
|
|
13
|
+
* earlier one. Zero dependencies; ~60 lines.
|
|
14
|
+
*/
|
|
15
|
+
/** Release function returned by {@link Semaphore.acquire}. Idempotent. */
|
|
16
|
+
export type SemaphoreRelease = () => void;
|
|
17
|
+
/**
|
|
18
|
+
* A counting semaphore with FIFO waiters.
|
|
19
|
+
*/
|
|
20
|
+
export declare class Semaphore {
|
|
21
|
+
private available;
|
|
22
|
+
private readonly waiters;
|
|
23
|
+
/**
|
|
24
|
+
* @param limit - Maximum concurrent holders. Must be a positive integer.
|
|
25
|
+
*/
|
|
26
|
+
constructor(limit: number);
|
|
27
|
+
/**
|
|
28
|
+
* Acquire one slot. Resolves immediately when a slot is free, otherwise
|
|
29
|
+
* queues FIFO. The returned release function is idempotent — releasing
|
|
30
|
+
* twice does not free two slots.
|
|
31
|
+
*/
|
|
32
|
+
acquire(): Promise<SemaphoreRelease>;
|
|
33
|
+
private makeRelease;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Acquire multiple gates in the given (fixed) order and return a single
|
|
37
|
+
* release that frees them in reverse order. Callers MUST pass gates in a
|
|
38
|
+
* globally consistent order (round gate before per-tool gate) — fixed
|
|
39
|
+
* ordering is what makes multi-gate acquisition deadlock-free.
|
|
40
|
+
*/
|
|
41
|
+
export declare function acquireAll(gates: ReadonlyArray<Semaphore | undefined>): Promise<SemaphoreRelease>;
|
|
42
|
+
//# sourceMappingURL=tool-concurrency.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-concurrency.d.ts","sourceRoot":"","sources":["../../src/lib/tool-concurrency.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,0EAA0E;AAC1E,MAAM,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC;AAE1C;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkD;IAE1E;;OAEG;gBACS,KAAK,EAAE,MAAM;IAOzB;;;;OAIG;IACH,OAAO,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAUpC,OAAO,CAAC,WAAW;CAgBpB;AAED;;;;;GAKG;AACH,wBAAsB,UAAU,CAC9B,KAAK,EAAE,aAAa,CAAC,SAAS,GAAG,SAAS,CAAC,GAC1C,OAAO,CAAC,gBAAgB,CAAC,CAY3B"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Minimal FIFO semaphore used to bound tool-execution concurrency.
|
|
3
|
+
*
|
|
4
|
+
* Three gates exist per run:
|
|
5
|
+
* - the round gate (`toolConcurrency.round`) — bounds simultaneous tool
|
|
6
|
+
* executions within a round;
|
|
7
|
+
* - per-tool gates (`maxConcurrency` on a tool) — bound simultaneous
|
|
8
|
+
* executions of one tool across the run;
|
|
9
|
+
* - the background pool (`toolConcurrency.background`) — bounds detached
|
|
10
|
+
* background-tool work that escaped the round barrier.
|
|
11
|
+
*
|
|
12
|
+
* Waiters are released strictly FIFO so a burst of calls cannot starve an
|
|
13
|
+
* earlier one. Zero dependencies; ~60 lines.
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* A counting semaphore with FIFO waiters.
|
|
17
|
+
*/
|
|
18
|
+
export class Semaphore {
|
|
19
|
+
/**
|
|
20
|
+
* @param limit - Maximum concurrent holders. Must be a positive integer.
|
|
21
|
+
*/
|
|
22
|
+
constructor(limit) {
|
|
23
|
+
this.waiters = [];
|
|
24
|
+
if (!Number.isInteger(limit) || limit < 1) {
|
|
25
|
+
throw new Error(`Semaphore limit must be a positive integer, got ${limit}`);
|
|
26
|
+
}
|
|
27
|
+
this.available = limit;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Acquire one slot. Resolves immediately when a slot is free, otherwise
|
|
31
|
+
* queues FIFO. The returned release function is idempotent — releasing
|
|
32
|
+
* twice does not free two slots.
|
|
33
|
+
*/
|
|
34
|
+
acquire() {
|
|
35
|
+
if (this.available > 0) {
|
|
36
|
+
this.available--;
|
|
37
|
+
return Promise.resolve(this.makeRelease());
|
|
38
|
+
}
|
|
39
|
+
return new Promise((resolve) => {
|
|
40
|
+
this.waiters.push(resolve);
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
makeRelease() {
|
|
44
|
+
let released = false;
|
|
45
|
+
return () => {
|
|
46
|
+
if (released) {
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
released = true;
|
|
50
|
+
const next = this.waiters.shift();
|
|
51
|
+
if (next) {
|
|
52
|
+
// Hand the slot directly to the next waiter (no available++/-- churn).
|
|
53
|
+
next(this.makeRelease());
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
this.available++;
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Acquire multiple gates in the given (fixed) order and return a single
|
|
63
|
+
* release that frees them in reverse order. Callers MUST pass gates in a
|
|
64
|
+
* globally consistent order (round gate before per-tool gate) — fixed
|
|
65
|
+
* ordering is what makes multi-gate acquisition deadlock-free.
|
|
66
|
+
*/
|
|
67
|
+
export async function acquireAll(gates) {
|
|
68
|
+
const releases = [];
|
|
69
|
+
for (const gate of gates) {
|
|
70
|
+
if (gate) {
|
|
71
|
+
releases.push(await gate.acquire());
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return () => {
|
|
75
|
+
for (let i = releases.length - 1; i >= 0; i--) {
|
|
76
|
+
releases[i]?.();
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=tool-concurrency.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-concurrency.js","sourceRoot":"","sources":["../../src/lib/tool-concurrency.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAKH;;GAEG;AACH,MAAM,OAAO,SAAS;IAIpB;;OAEG;IACH,YAAY,KAAa;QALR,YAAO,GAA+C,EAAE,CAAC;QAMxE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CAAC,mDAAmD,KAAK,EAAE,CAAC,CAAC;QAC9E,CAAC;QACD,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;IACzB,CAAC;IAED;;;;OAIG;IACH,OAAO;QACL,IAAI,IAAI,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC;YACvB,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QAC7C,CAAC;QACD,OAAO,IAAI,OAAO,CAAmB,CAAC,OAAO,EAAE,EAAE;YAC/C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,WAAW;QACjB,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,OAAO,GAAG,EAAE;YACV,IAAI,QAAQ,EAAE,CAAC;gBACb,OAAO;YACT,CAAC;YACD,QAAQ,GAAG,IAAI,CAAC;YAChB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YAClC,IAAI,IAAI,EAAE,CAAC;gBACT,uEAAuE;gBACvE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;YAC3B,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,CAAC;QACH,CAAC,CAAC;IACJ,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,KAA2C;IAE3C,MAAM,QAAQ,GAAuB,EAAE,CAAC;IACxC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,EAAE,CAAC;YACT,QAAQ,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IACD,OAAO,GAAG,EAAE;QACV,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9C,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAClB,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -30,6 +30,38 @@ export declare class ToolContextStore {
|
|
|
30
30
|
mergeToolContext(toolName: string, partial: Record<string, unknown>): void;
|
|
31
31
|
private notifyListeners;
|
|
32
32
|
}
|
|
33
|
+
/**
|
|
34
|
+
* Per-execution extras threaded into the ToolExecuteContext: the composed
|
|
35
|
+
* abort signal for this call, the call id, the conversation id, and (for
|
|
36
|
+
* unified `run` tools) the async-task affordances.
|
|
37
|
+
*/
|
|
38
|
+
export interface ToolExecutionExtras {
|
|
39
|
+
signal?: AbortSignal;
|
|
40
|
+
callId?: string;
|
|
41
|
+
conversationId?: string;
|
|
42
|
+
/** The parent run's client — agent tools use it to start child runs. */
|
|
43
|
+
client?: unknown;
|
|
44
|
+
/**
|
|
45
|
+
* Unified-run affordances, wired by the engine per call:
|
|
46
|
+
* - `defer` — create a DeferredHandle (deferred lifecycle only)
|
|
47
|
+
* - `log` — append a task log entry (same pipeline as a yield)
|
|
48
|
+
* - `onMessage` — register the steering-inbox handler
|
|
49
|
+
* - `taskId` — the task id once assigned
|
|
50
|
+
*/
|
|
51
|
+
runExtras?: {
|
|
52
|
+
defer?: (taskId: string, options?: Record<string, unknown>) => unknown;
|
|
53
|
+
log?: (entry: unknown) => void;
|
|
54
|
+
onMessage?: (handler: (message: unknown) => void) => void;
|
|
55
|
+
taskId?: string;
|
|
56
|
+
/**
|
|
57
|
+
* Transcript-source slot (agent tools attach their live transcript
|
|
58
|
+
* here). Deliberately NOT named `task`: `TurnContext.task` is typed
|
|
59
|
+
* `ToolTaskHandle` (check calls only) and must not be shadowed by a
|
|
60
|
+
* transcript-only object in run bodies.
|
|
61
|
+
*/
|
|
62
|
+
taskTranscript?: unknown;
|
|
63
|
+
};
|
|
64
|
+
}
|
|
33
65
|
/**
|
|
34
66
|
* Build a flat ToolExecuteContext for a specific tool.
|
|
35
67
|
* Returns a merged object with TurnContext fields, a `local` getter
|
|
@@ -43,9 +75,21 @@ export declare class ToolContextStore {
|
|
|
43
75
|
* @param toolName - The tool's name
|
|
44
76
|
* @param schema - The tool's contextSchema (for validation)
|
|
45
77
|
* @param sharedSchema - The shared contextSchema (for validation)
|
|
78
|
+
* @param extras - Per-execution extras (abort signal, call id, conversation id)
|
|
46
79
|
* @returns A flat ToolExecuteContext
|
|
47
80
|
*/
|
|
48
|
-
export declare function buildToolExecuteContext<TName extends string, TContext extends Record<string, unknown>, TShared extends Record<string, unknown> = Record<string, unknown>>(turnContext: TurnContext, store: ToolContextStore | undefined, toolName: TName, schema: $ZodObject<$ZodShape> | undefined, sharedSchema?: $ZodObject<$ZodShape> | undefined): ToolExecuteContext<TName, TContext, TShared>;
|
|
81
|
+
export declare function buildToolExecuteContext<TName extends string, TContext extends Record<string, unknown>, TShared extends Record<string, unknown> = Record<string, unknown>>(turnContext: TurnContext, store: ToolContextStore | undefined, toolName: TName, schema: $ZodObject<$ZodShape> | undefined, sharedSchema?: $ZodObject<$ZodShape> | undefined, extras?: ToolExecutionExtras): ToolExecuteContext<TName, TContext, TShared>;
|
|
82
|
+
/**
|
|
83
|
+
* Build a ToolRunContext for a unified `run` tool: the base execute context
|
|
84
|
+
* plus the async-task affordances (`defer`, `log`, `onMessage`, `taskId`,
|
|
85
|
+
* `client`). Attached onto the built object (not via spread) because
|
|
86
|
+
* `local`/`shared` are live getters a spread would flatten.
|
|
87
|
+
*/
|
|
88
|
+
export declare function buildToolRunContext<TName extends string, TContext extends Record<string, unknown>, TShared extends Record<string, unknown> = Record<string, unknown>>(turnContext: TurnContext, store: ToolContextStore | undefined, toolName: TName, schema: $ZodObject<$ZodShape> | undefined, sharedSchema?: $ZodObject<$ZodShape> | undefined, extras?: ToolExecutionExtras): ToolExecuteContext<TName, TContext, TShared> & {
|
|
89
|
+
defer: (taskId: string, options?: Record<string, unknown>) => unknown;
|
|
90
|
+
log: (entry: unknown) => void;
|
|
91
|
+
onMessage: (handler: (message: unknown) => void) => void;
|
|
92
|
+
};
|
|
49
93
|
/**
|
|
50
94
|
* Resolve a context input (static value, sync function, or async function) to a plain object.
|
|
51
95
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-context.d.ts","sourceRoot":"","sources":["../../src/lib/tool-context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAKvE;;;GAGG;AACH,KAAK,qBAAqB,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,KAAK,IAAI,CAAC;AAEzF;;GAEG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,IACtE,CAAC,GACD,CAAC,CAAC,IAAI,EAAE,WAAW,KAAK,CAAC,CAAC,GAC1B,CAAC,CAAC,IAAI,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AAMxC;;;;GAIG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,KAAK,CAA0C;IACvD,OAAO,CAAC,SAAS,CAAyC;gBAE9C,aAAa,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAM;IASvE,qEAAqE;IACrE,SAAS,CAAC,QAAQ,EAAE,qBAAqB,GAAG,MAAM,IAAI;IAOtD,8DAA8D;IAC9D,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAUtD,wDAAwD;IACxD,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAUzD,2DAA2D;IAC3D,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAOvE,+EAA+E;IAC/E,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAS1E,OAAO,CAAC,eAAe;CAWxB;AAiCD
|
|
1
|
+
{"version":3,"file":"tool-context.d.ts","sourceRoot":"","sources":["../../src/lib/tool-context.ts"],"names":[],"mappings":"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"}
|
package/esm/lib/tool-context.js
CHANGED
|
@@ -95,6 +95,21 @@ function validatePartialAgainstSchema(partial, schema) {
|
|
|
95
95
|
}
|
|
96
96
|
return filteredPartial;
|
|
97
97
|
}
|
|
98
|
+
/*
|
|
99
|
+
* A never-aborting signal for contexts built without cancellation sources —
|
|
100
|
+
* keeps `ctx.signal` always present so tool bodies can pass it to fetch/etc.
|
|
101
|
+
* unconditionally.
|
|
102
|
+
*
|
|
103
|
+
* Deliberately a FACTORY, not one shared module-level signal. A tool body may
|
|
104
|
+
* `signal.addEventListener('abort', …)` and, since this signal never fires,
|
|
105
|
+
* nothing ever removes that listener. Sharing one object across every such call
|
|
106
|
+
* accumulated listeners on it for the lifetime of the process — unbounded in a
|
|
107
|
+
* long-lived server, and eventually a MaxListenersExceededWarning. A fresh
|
|
108
|
+
* signal per context is garbage-collected with the context that owns it.
|
|
109
|
+
*/
|
|
110
|
+
function neverAbortSignal() {
|
|
111
|
+
return new AbortController().signal;
|
|
112
|
+
}
|
|
98
113
|
/**
|
|
99
114
|
* Build a flat ToolExecuteContext for a specific tool.
|
|
100
115
|
* Returns a merged object with TurnContext fields, a `local` getter
|
|
@@ -108,9 +123,10 @@ function validatePartialAgainstSchema(partial, schema) {
|
|
|
108
123
|
* @param toolName - The tool's name
|
|
109
124
|
* @param schema - The tool's contextSchema (for validation)
|
|
110
125
|
* @param sharedSchema - The shared contextSchema (for validation)
|
|
126
|
+
* @param extras - Per-execution extras (abort signal, call id, conversation id)
|
|
111
127
|
* @returns A flat ToolExecuteContext
|
|
112
128
|
*/
|
|
113
|
-
export function buildToolExecuteContext(turnContext, store, toolName, schema, sharedSchema) {
|
|
129
|
+
export function buildToolExecuteContext(turnContext, store, toolName, schema, sharedSchema, extras) {
|
|
114
130
|
// Validate initial context eagerly (throws on bad data)
|
|
115
131
|
if (store && schema) {
|
|
116
132
|
extractToolContext(store, toolName, schema);
|
|
@@ -120,6 +136,13 @@ export function buildToolExecuteContext(turnContext, store, toolName, schema, sh
|
|
|
120
136
|
}
|
|
121
137
|
const ctx = {
|
|
122
138
|
...turnContext,
|
|
139
|
+
signal: extras?.signal ?? neverAbortSignal(),
|
|
140
|
+
...(extras?.callId !== undefined && {
|
|
141
|
+
callId: extras.callId,
|
|
142
|
+
}),
|
|
143
|
+
...(extras?.conversationId !== undefined && {
|
|
144
|
+
conversationId: extras.conversationId,
|
|
145
|
+
}),
|
|
123
146
|
get local() {
|
|
124
147
|
const data = store ? store.getToolContext(toolName) : {};
|
|
125
148
|
return Object.freeze(data);
|
|
@@ -145,6 +168,42 @@ export function buildToolExecuteContext(turnContext, store, toolName, schema, sh
|
|
|
145
168
|
};
|
|
146
169
|
return ctx;
|
|
147
170
|
}
|
|
171
|
+
/**
|
|
172
|
+
* Build a ToolRunContext for a unified `run` tool: the base execute context
|
|
173
|
+
* plus the async-task affordances (`defer`, `log`, `onMessage`, `taskId`,
|
|
174
|
+
* `client`). Attached onto the built object (not via spread) because
|
|
175
|
+
* `local`/`shared` are live getters a spread would flatten.
|
|
176
|
+
*/
|
|
177
|
+
export function buildToolRunContext(turnContext, store, toolName, schema, sharedSchema, extras) {
|
|
178
|
+
const base = buildToolExecuteContext(turnContext, store, toolName, schema, sharedSchema, extras);
|
|
179
|
+
const runExtras = extras?.runExtras;
|
|
180
|
+
const ctx = Object.assign(base, {
|
|
181
|
+
defer: runExtras?.defer ??
|
|
182
|
+
(() => {
|
|
183
|
+
throw new Error(`Tool "${toolName}": ctx.defer() is only available on lifecycle: 'deferred' tools`);
|
|
184
|
+
}),
|
|
185
|
+
log: runExtras?.log ?? (() => undefined),
|
|
186
|
+
onMessage: runExtras?.onMessage ?? (() => undefined),
|
|
187
|
+
...(runExtras?.taskTranscript !== undefined && {
|
|
188
|
+
taskTranscript: runExtras.taskTranscript,
|
|
189
|
+
}),
|
|
190
|
+
...(extras?.client !== undefined && {
|
|
191
|
+
client: extras.client,
|
|
192
|
+
}),
|
|
193
|
+
});
|
|
194
|
+
// Live delegation: the engine's runExtras exposes taskId as a getter
|
|
195
|
+
// backed by the run binding, because the ToolTask (and its id) is only
|
|
196
|
+
// created after the call escapes the round — a static copy taken here
|
|
197
|
+
// would always be undefined.
|
|
198
|
+
if (runExtras && 'taskId' in runExtras) {
|
|
199
|
+
Object.defineProperty(ctx, 'taskId', {
|
|
200
|
+
get: () => runExtras.taskId,
|
|
201
|
+
enumerable: true,
|
|
202
|
+
configurable: true,
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
return ctx;
|
|
206
|
+
}
|
|
148
207
|
//#endregion
|
|
149
208
|
//#region resolveContext
|
|
150
209
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-context.js","sourceRoot":"","sources":["../../src/lib/tool-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,QAAQ,CAAC;AAG7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAkBrD,YAAY;AAEZ,0BAA0B;AAE1B;;;;GAIG;AACH,MAAM,OAAO,gBAAgB;IAI3B,YAAY,gBAAyD,EAAE;QAF/D,cAAS,GAA+B,IAAI,GAAG,EAAE,CAAC;QAGxD,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QAChB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;YACzD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG;gBAChB,GAAG,KAAK;aACT,CAAC;QACJ,CAAC;IACH,CAAC;IAED,qEAAqE;IACrE,SAAS,CAAC,QAA+B;QACvC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC7B,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAClC,CAAC,CAAC;IACJ,CAAC;IAED,8DAA8D;IAC9D,WAAW;QACT,MAAM,QAAQ,GAA4C,EAAE,CAAC;QAC7D,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACtD,QAAQ,CAAC,GAAG,CAAC,GAAG;gBACd,GAAG,KAAK;aACT,CAAC;QACJ,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,wDAAwD;IACxD,cAAc,CAAC,QAAgB;QAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAClC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,OAAO;YACL,GAAG,IAAI;SACR,CAAC;IACJ,CAAC;IAED,2DAA2D;IAC3D,cAAc,CAAC,QAAgB,EAAE,MAA+B;QAC9D,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG;YACrB,GAAG,MAAM;SACV,CAAC;QACF,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IAED,+EAA+E;IAC/E,gBAAgB,CAAC,QAAgB,EAAE,OAAgC;QACjE,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC5C,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG;YACrB,GAAG,QAAQ;YACX,GAAG,OAAO;SACX,CAAC;QACF,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IAEO,eAAe;QACrB,MAAM,QAAQ,GAA4C,EAAE,CAAC;QAC7D,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACtD,QAAQ,CAAC,GAAG,CAAC,GAAG;gBACd,GAAG,KAAK;aACT,CAAC;QACJ,CAAC;QACD,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACtC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;CACF;AAED,YAAY;AAEZ,iCAAiC;AAEjC;;;GAGG;AACH,SAAS,4BAA4B,CACnC,OAAgC,EAChC,MAA6B;IAE7B,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACtD,MAAM,eAAe,GAA4B,EAAE,CAAC;IACpD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACnD,IAAI,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7B,eAAe,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;IACpC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC;QAC3D,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,SAAS,EAAE,CAAC;YACd,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,OAAO,eAAe,CAAC;AACzB,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"tool-context.js","sourceRoot":"","sources":["../../src/lib/tool-context.ts"],"names":[],"mappings":"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"}
|