@migor/agentia 0.5.0 → 0.6.1
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/CHANGELOG.md +248 -0
- package/README.md +1 -2
- package/dist/AGENTS.md +253 -160
- package/dist/core/abort.js +4 -1
- package/dist/core/abort.js.map +1 -1
- package/dist/core/message.d.ts +148 -0
- package/dist/core/message.js +25 -0
- package/dist/core/message.js.map +1 -0
- package/dist/core/timeout.d.ts +72 -0
- package/dist/core/timeout.js +117 -0
- package/dist/core/timeout.js.map +1 -0
- package/dist/core/tool.d.ts +21 -9
- package/dist/engine/concurrency.d.ts +6 -30
- package/dist/engine/concurrency.js +6 -64
- package/dist/engine/concurrency.js.map +1 -1
- package/dist/engine/errors.d.ts +12 -0
- package/dist/engine/errors.js +56 -13
- package/dist/engine/errors.js.map +1 -1
- package/dist/engine/loop.d.ts +17 -11
- package/dist/engine/loop.js +34 -433
- package/dist/engine/loop.js.map +1 -1
- package/dist/engine/replay.d.ts +18 -3
- package/dist/engine/replay.js +53 -9
- package/dist/engine/replay.js.map +1 -1
- package/dist/engine/retry.d.ts +5 -4
- package/dist/engine/retry.js.map +1 -1
- package/dist/engine/spec.d.ts +5 -5
- package/dist/engine/spec.js.map +1 -1
- package/dist/engine/trace-diff.d.ts +57 -0
- package/dist/engine/trace-diff.js +188 -0
- package/dist/engine/trace-diff.js.map +1 -0
- package/dist/engine/trimming.d.ts +7 -7
- package/dist/engine/trimming.js +12 -5
- package/dist/engine/trimming.js.map +1 -1
- package/dist/engine/turn.d.ts +157 -0
- package/dist/engine/turn.js +512 -0
- package/dist/engine/turn.js.map +1 -0
- package/dist/engine/types.d.ts +6 -8
- package/dist/engine/usage.d.ts +2 -2
- package/dist/engine/usage.js +4 -1
- package/dist/engine/usage.js.map +1 -1
- package/dist/eval/defineEval.js.map +1 -1
- package/dist/eval/harvest.d.ts +2 -9
- package/dist/eval/harvest.js +20 -9
- package/dist/eval/harvest.js.map +1 -1
- package/dist/eval/scripted.js.map +1 -1
- package/dist/index.d.ts +6 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/integrations/anthropic.d.ts +41 -37
- package/dist/integrations/anthropic.js +408 -17
- package/dist/integrations/anthropic.js.map +1 -1
- package/dist/integrations/mcp.d.ts +13 -4
- package/dist/integrations/mcp.js +27 -24
- package/dist/integrations/mcp.js.map +1 -1
- package/dist/integrations/openai.d.ts +1 -1
- package/dist/integrations/openai.js +3 -3
- package/dist/integrations/openai.js.map +1 -1
- package/dist/integrations/otlp.js +29 -11
- package/dist/integrations/otlp.js.map +1 -1
- package/dist/runtime/run.js.map +1 -1
- package/dist/runtime/session.d.ts +5 -5
- package/dist/runtime/session.js +5 -1
- package/dist/runtime/session.js.map +1 -1
- package/dist/toolkit/module.d.ts +16 -2
- package/dist/toolkit/module.js +42 -4
- package/dist/toolkit/module.js.map +1 -1
- package/dist/toolkit/skill.d.ts +3 -3
- package/dist/toolkit/subagent.d.ts +2 -2
- package/dist/toolkit/subagent.js +1 -1
- package/dist/transport/async.d.ts +2 -2
- package/package.json +4 -5
package/dist/engine/loop.js
CHANGED
|
@@ -1,13 +1,9 @@
|
|
|
1
1
|
import { createAnthropicClient } from '../integrations/anthropic.js';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { classifyError, isAbortError } from './errors.js';
|
|
5
|
-
import { createBudgetGuard } from './budget.js';
|
|
6
|
-
import { mapWithConcurrency, TIMED_OUT, withTimeout } from './concurrency.js';
|
|
7
|
-
import { backoffDelay, resolveRetry, sleep } from './retry.js';
|
|
2
|
+
import { classifyError } from './errors.js';
|
|
3
|
+
import { resolveRetry } from './retry.js';
|
|
8
4
|
import { TraceRecorder } from './tracer.js';
|
|
5
|
+
import { abortedError, budgetError, buildLoopContext, checkTurnEntry, executeTurnTools, recordTurnUsage, resolveStopReason, streamTurn, textOf, } from './turn.js';
|
|
9
6
|
import { isSuccessStopReason } from './types.js';
|
|
10
|
-
import { buildPricing, costEstimate, usageFromAnthropic } from './usage.js';
|
|
11
7
|
/**
|
|
12
8
|
* 缺省模型解析:显式传入 > AGENTIA_MODEL env > 'claude-opus-5'。
|
|
13
9
|
* 不把端点私有模型写死在代码里 —— 走 Anthropic 兼容网关(如 DeepSeek 端点)时
|
|
@@ -21,32 +17,6 @@ export function resolveDefaultModel(over) {
|
|
|
21
17
|
/** 缺省单次 maxTokens / 循环上限:runAgent 与 runAgentScoped 共用,避免两处各写一遍漂移。 */
|
|
22
18
|
const DEFAULT_MAX_TOKENS = 64_000;
|
|
23
19
|
const DEFAULT_MAX_ITERATIONS = 40;
|
|
24
|
-
/**
|
|
25
|
-
* 事件正文(tool.input / tool.output 的 body)缺省截断上限(字符)。
|
|
26
|
-
*
|
|
27
|
-
* 与「入参」/「成功出参」/「失败出参」三类一一对应:失败出参减半是为了让
|
|
28
|
-
* 「哪个工具老超时」这类判断在**一行**里看得完(正文本身多为一句错误摘要,
|
|
29
|
-
* 1000 已远超常见长度,只有工具把异常里的长上下文一起吐回来时才会触发)。
|
|
30
|
-
* `RunAgentOptions.maxEventChars` 一经给出,三类统一改用该值(见 `limit`)。
|
|
31
|
-
*/
|
|
32
|
-
const DEFAULT_EVENT_CHARS = 2000;
|
|
33
|
-
const DEFAULT_ERROR_EVENT_CHARS = 1000;
|
|
34
|
-
/** 隐藏提交工具名:resultSchema 模式下由 engine 内部追加,不属开发者工具菜单 */
|
|
35
|
-
const SUBMIT_RESULT = 'submit_result';
|
|
36
|
-
/** resultSchema 模式下追加到 system 末尾的指令 */
|
|
37
|
-
const RESULT_INSTRUCTION = '本任务要求结构化结果:完成必要的信息收集与工具调用后,必须调用 submit_result 工具提交最终结果' +
|
|
38
|
-
'(input 严格符合该工具的 input_schema);不要仅以普通文本结束作答。';
|
|
39
|
-
/**
|
|
40
|
-
* 把结果提交指令追加到 system 末尾:string 时以空行拼接;SystemTextBlock[] 时
|
|
41
|
-
* 在数组末尾 push 一个无 cache_control 的 text block —— 不污染稳定前缀的缓存 breakpoint。
|
|
42
|
-
*/
|
|
43
|
-
function appendResultInstruction(system) {
|
|
44
|
-
if (!system)
|
|
45
|
-
return RESULT_INSTRUCTION;
|
|
46
|
-
if (typeof system === 'string')
|
|
47
|
-
return `${system}\n\n${RESULT_INSTRUCTION}`;
|
|
48
|
-
return [...system, { type: 'text', text: RESULT_INSTRUCTION }];
|
|
49
|
-
}
|
|
50
20
|
/**
|
|
51
21
|
* 上下文策略按 run 隔离:实现提供 `forRun` 时每条 run 拿一个全新实例 ——
|
|
52
22
|
* 内置 createBudgetPolicy 的滞回计数(lastCompactAt)与增量 token 缓存都是
|
|
@@ -58,391 +28,58 @@ function appendResultInstruction(system) {
|
|
|
58
28
|
function forkPolicyPerRun(policy) {
|
|
59
29
|
return policy?.forRun ? policy.forRun() : policy;
|
|
60
30
|
}
|
|
61
|
-
/**
|
|
31
|
+
/**
|
|
32
|
+
* 循环体核心:带父 span 跑一轮 manual loop。请求失败按 error 收掉 turn 后抛出,由外层收尾。
|
|
33
|
+
*
|
|
34
|
+
* 本体只是「一回合执行步骤」的编排骨架,各步骤的实现见 turn.ts 同名小函数:
|
|
35
|
+
* checkTurnEntry(回合入口检查 + 上下文策略)→ streamTurn(发流式请求,含重试)
|
|
36
|
+
* → recordTurnUsage(记账关 span)→ resolveStopReason(stop_reason 收尾分流)
|
|
37
|
+
* → executeTurnTools(tool_use 过滤与并发执行)。
|
|
38
|
+
* 回合间共享的状态收在 LoopContext 一个对象里(不拖长参数列)。
|
|
39
|
+
*/
|
|
62
40
|
async function agentLoop(args) {
|
|
63
|
-
const
|
|
64
|
-
const messages = [...args.messages];
|
|
65
|
-
// resultSchema 模式:追加隐藏 submit_result 工具 + system 末尾指令。
|
|
66
|
-
// 该工具由 engine 内部注入,不属开发者菜单;菜单已有同名工具视为装配冲突。
|
|
67
|
-
let apiTools = args.tools.map(toApiTool);
|
|
68
|
-
let system = args.system;
|
|
69
|
-
if (args.resultSchema) {
|
|
70
|
-
if (args.tools.some((t) => t.name === SUBMIT_RESULT)) {
|
|
71
|
-
throw new Error(`装配冲突:工具菜单已含 "${SUBMIT_RESULT}",与 resultSchema 的隐藏提交工具同名`);
|
|
72
|
-
}
|
|
73
|
-
apiTools = [
|
|
74
|
-
...apiTools,
|
|
75
|
-
{
|
|
76
|
-
name: SUBMIT_RESULT,
|
|
77
|
-
description: '任务完成时调用它提交最终结构化结果(input 必须符合本工具的 input_schema)',
|
|
78
|
-
input_schema: args.resultSchema,
|
|
79
|
-
},
|
|
80
|
-
];
|
|
81
|
-
system = appendResultInstruction(args.system);
|
|
82
|
-
}
|
|
41
|
+
const ctx = buildLoopContext(args);
|
|
83
42
|
let stopReason = 'end_turn';
|
|
84
43
|
let error;
|
|
85
44
|
let finalText = '';
|
|
86
45
|
let finished = false;
|
|
87
|
-
const progress = args.progress ?? { iterations: 0 }; // 就地累加,抛错时调用方仍读得到
|
|
88
|
-
let typed;
|
|
89
|
-
let submitted = false;
|
|
90
|
-
const signal = args.signal;
|
|
91
|
-
const retryCfg = resolveRetry(args.retry);
|
|
92
|
-
// 价格表(F1):每次循环解析一次 —— 非法单价在 buildPricing 里立刻抛错(不静默算 NaN)
|
|
93
|
-
const pricing = buildPricing(args.priceOverrides);
|
|
94
|
-
// 未定价模型去重(F2):本循环作用域内每模型只回调一次
|
|
95
|
-
const unpricedSeen = new Set();
|
|
96
|
-
// 成本硬管控(C1):从数值选项就地装配(把「超限」记进 run 根 span 的事件)。
|
|
97
|
-
// 只在记账完成后判断 —— 见下面 overBudget 的用法(何时「停」、何时只记事件)。
|
|
98
|
-
const budget = args.maxTotalTokens != null || args.maxCostUsd != null
|
|
99
|
-
? createBudgetGuard({
|
|
100
|
-
maxTotalTokens: args.maxTotalTokens,
|
|
101
|
-
maxCostUsd: args.maxCostUsd,
|
|
102
|
-
onExceed: (snap) => {
|
|
103
|
-
// 观测是辅助动作:记事件失败不得把「超限」这件事变成崩溃
|
|
104
|
-
try {
|
|
105
|
-
if (parentSpanId)
|
|
106
|
-
recorder.event(parentSpanId, 'budget.exceeded', snap);
|
|
107
|
-
}
|
|
108
|
-
catch {
|
|
109
|
-
/* ignore */
|
|
110
|
-
}
|
|
111
|
-
},
|
|
112
|
-
})
|
|
113
|
-
: undefined;
|
|
114
|
-
const budgetError = (over) => ({
|
|
115
|
-
type: 'budget_exceeded',
|
|
116
|
-
message: over === 'tokens'
|
|
117
|
-
? `累计 token 已超过上限 ${args.maxTotalTokens}`
|
|
118
|
-
: `累计成本已超过上限 $${args.maxCostUsd}`,
|
|
119
|
-
retryable: false,
|
|
120
|
-
});
|
|
121
46
|
for (let iteration = 0; iteration < args.maxIterations; iteration++) {
|
|
122
|
-
|
|
123
|
-
if (
|
|
124
|
-
stopReason =
|
|
125
|
-
error =
|
|
47
|
+
const halt = await checkTurnEntry(ctx, iteration);
|
|
48
|
+
if (halt) {
|
|
49
|
+
stopReason = halt.stopReason;
|
|
50
|
+
error = halt.error;
|
|
126
51
|
finished = true;
|
|
127
52
|
break;
|
|
128
53
|
}
|
|
129
|
-
|
|
130
|
-
// 可能已把整条 run 的累计用量推过上限(回合末的那次判断当时还没超)—— 在发起新
|
|
131
|
-
// 请求前拦住:不再发请求 = 不再花钱。与「模型自然收尾不改判」不冲突:自然收尾在
|
|
132
|
-
// 上一回合就 break 了,走不到这里。
|
|
133
|
-
if (budget) {
|
|
134
|
-
const over = budget.check(recorder.snapshot('ok'));
|
|
135
|
-
if (over) {
|
|
136
|
-
stopReason = 'budget_exceeded';
|
|
137
|
-
error = budgetError(over);
|
|
138
|
-
finished = true;
|
|
139
|
-
break;
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
// 发送前给上下文策略一个机会(编辑/压缩预算超限的历史)
|
|
143
|
-
if (args.contextPolicy) {
|
|
144
|
-
const next = await args.contextPolicy.beforeTurn(messages, { iteration, model });
|
|
145
|
-
if (next && next !== messages) {
|
|
146
|
-
if (parentSpanId) {
|
|
147
|
-
recorder.event(parentSpanId, 'context.budget', {
|
|
148
|
-
from: messages.length,
|
|
149
|
-
to: next.length,
|
|
150
|
-
model,
|
|
151
|
-
});
|
|
152
|
-
}
|
|
153
|
-
replaceMessages(messages, next);
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
// —— 一次逻辑回合:可能含多次尝试(重试);每次尝试开自己的 llm.turn span ——
|
|
157
|
-
let turnId = '';
|
|
158
|
-
let message;
|
|
159
|
-
let aborted = false;
|
|
160
|
-
let emitted = false; // 本回合是否已吐出过文本(吐过就不能重试,否则会重复输出)
|
|
161
|
-
for (let attempt = 1;; attempt++) {
|
|
162
|
-
turnId = recorder.begin('llm.turn', model, parentSpanId);
|
|
163
|
-
if (attempt > 1)
|
|
164
|
-
recorder.setAttribute(turnId, 'retry.attempt', attempt);
|
|
165
|
-
try {
|
|
166
|
-
const stream = client.messages.stream({
|
|
167
|
-
model,
|
|
168
|
-
max_tokens: args.maxTokens,
|
|
169
|
-
...(system ? { system } : {}),
|
|
170
|
-
...(apiTools.length ? { tools: apiTools } : {}),
|
|
171
|
-
messages,
|
|
172
|
-
...(signal ? { signal } : {}),
|
|
173
|
-
});
|
|
174
|
-
stream.on('text', (delta) => {
|
|
175
|
-
emitted = true;
|
|
176
|
-
try {
|
|
177
|
-
args.onText?.(delta);
|
|
178
|
-
}
|
|
179
|
-
catch {
|
|
180
|
-
/* 观测是辅助动作:回调抛错不得影响 run(与 onUnpricedModel 同口径) */
|
|
181
|
-
}
|
|
182
|
-
});
|
|
183
|
-
message = await stream.finalMessage();
|
|
184
|
-
break;
|
|
185
|
-
}
|
|
186
|
-
catch (e) {
|
|
187
|
-
const errInfo = classifyError(e);
|
|
188
|
-
recorder.end(turnId, { status: 'error', error: errInfo });
|
|
189
|
-
// 中断:不冒泡、不重试 —— 以确定语义收尾
|
|
190
|
-
if (isAbortError(e) || signal?.aborted) {
|
|
191
|
-
aborted = true;
|
|
192
|
-
break;
|
|
193
|
-
}
|
|
194
|
-
// 可重试:配置允许 + 次数未尽 + 判定可重试 + 本次尝试未产出任何文本
|
|
195
|
-
const canRetry = retryCfg !== null &&
|
|
196
|
-
attempt < retryCfg.maxAttempts &&
|
|
197
|
-
retryCfg.isRetryable(e) &&
|
|
198
|
-
!emitted;
|
|
199
|
-
if (!canRetry)
|
|
200
|
-
throw e; // 冒泡:runAgent 或子 agent 运行器负责标记根/capability 与收尾
|
|
201
|
-
const delayMs = backoffDelay(attempt, retryCfg);
|
|
202
|
-
recorder.event(turnId, 'llm.retry', { attempt, delayMs, error: errInfo.type });
|
|
203
|
-
try {
|
|
204
|
-
retryCfg.onRetry({ attempt, delayMs, error: errInfo });
|
|
205
|
-
}
|
|
206
|
-
catch {
|
|
207
|
-
/* 观测是辅助动作:回调抛错不得影响 run(与 onUnpricedModel 同口径) */
|
|
208
|
-
}
|
|
209
|
-
try {
|
|
210
|
-
await sleep(delayMs, signal);
|
|
211
|
-
}
|
|
212
|
-
catch {
|
|
213
|
-
aborted = true; // 退避期间被取消
|
|
214
|
-
break;
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
}
|
|
54
|
+
const { turnId, message, aborted } = await streamTurn(ctx);
|
|
218
55
|
if (aborted || !message) {
|
|
219
56
|
stopReason = 'aborted';
|
|
220
|
-
error =
|
|
57
|
+
error = abortedError();
|
|
221
58
|
finished = true;
|
|
222
59
|
break;
|
|
223
60
|
}
|
|
224
|
-
progress.iterations++;
|
|
225
|
-
|
|
226
|
-
if (usage) {
|
|
227
|
-
const cost = costEstimate(model, usage, pricing);
|
|
228
|
-
usage.costEstimate = cost;
|
|
229
|
-
// 未定价(F2):模型不在价格表内 → 显式记事件 + 回调,别让 maxCostUsd 静默失效
|
|
230
|
-
if (cost === undefined) {
|
|
231
|
-
recorder.event(turnId, 'usage.unpriced', { model });
|
|
232
|
-
if (!unpricedSeen.has(model)) {
|
|
233
|
-
unpricedSeen.add(model);
|
|
234
|
-
try {
|
|
235
|
-
args.onUnpricedModel?.({ model, spanId: turnId });
|
|
236
|
-
}
|
|
237
|
-
catch {
|
|
238
|
-
/* 观测是辅助动作:回调抛错不得影响 run */
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
recorder.end(turnId, { usage });
|
|
244
|
-
recorder.setAttribute(turnId, 'input_tokens', usage?.inputTokens ?? 0);
|
|
245
|
-
recorder.setAttribute(turnId, 'output_tokens', usage?.outputTokens ?? 0);
|
|
246
|
-
recorder.setAttribute(turnId, 'cache_read_tokens', usage?.cacheReadTokens ?? 0);
|
|
247
|
-
recorder.setAttribute(turnId, 'cache_creation_tokens', usage?.cacheCreationTokens ?? 0);
|
|
61
|
+
ctx.progress.iterations++;
|
|
62
|
+
recordTurnUsage(ctx, turnId, message);
|
|
248
63
|
// 成本硬管控(C1):本回合 usage 已落账 → 立刻判一次(超限会触发 onExceed 记事件)。
|
|
249
64
|
// 结果**留到「循环是否还要继续」确定后再用**:
|
|
250
65
|
// - 模型本回合自然收尾 → 不因「最后一回合把额度用超了」把已成功的 run 改判失败
|
|
251
66
|
// (只留 budget.exceeded 事件,可观测);
|
|
252
67
|
// - 循环还要继续(模型要求调工具)→ 停在这里,不再发下一个请求 = 不再花钱。
|
|
253
|
-
const overBudget = budget ? budget.check(recorder.snapshot('ok')) : null;
|
|
254
|
-
messages.push({ role: 'assistant', content: message.content });
|
|
255
|
-
|
|
256
|
-
if (
|
|
257
|
-
stopReason =
|
|
258
|
-
finalText =
|
|
68
|
+
const overBudget = ctx.budget ? ctx.budget.check(args.recorder.snapshot('ok')) : null;
|
|
69
|
+
ctx.messages.push({ role: 'assistant', content: message.content });
|
|
70
|
+
const resolution = resolveStopReason(message, args.maxTokens);
|
|
71
|
+
if (resolution.kind === 'finish') {
|
|
72
|
+
stopReason = resolution.stopReason;
|
|
73
|
+
finalText = resolution.finalText;
|
|
74
|
+
if (resolution.error)
|
|
75
|
+
error = resolution.error;
|
|
259
76
|
finished = true;
|
|
260
77
|
break;
|
|
261
78
|
}
|
|
262
|
-
|
|
263
|
-
stopReason = 'refusal';
|
|
264
|
-
finalText = textOf(message);
|
|
265
|
-
error = { type: 'refusal', message: 'model refused the request', retryable: false };
|
|
266
|
-
finished = true;
|
|
267
|
-
break;
|
|
268
|
-
}
|
|
269
|
-
if (message.stop_reason === 'max_tokens') {
|
|
270
|
-
stopReason = 'max_tokens';
|
|
271
|
-
finalText = textOf(message);
|
|
272
|
-
// 与 budget_exceeded / refusal 同口径:非正常收尾都带结构化 error(进 run 根 span),
|
|
273
|
-
// 否则 trace 里这类 run「失败却没有原因」
|
|
274
|
-
error = {
|
|
275
|
-
type: 'max_tokens',
|
|
276
|
-
message: `模型输出触顶被截断(max_tokens=${args.maxTokens})`,
|
|
277
|
-
retryable: false,
|
|
278
|
-
};
|
|
279
|
-
finished = true;
|
|
280
|
-
break;
|
|
281
|
-
}
|
|
282
|
-
if (message.stop_reason === 'pause_turn') {
|
|
283
|
-
// 无 server tools 时正常不会到;避免无限循环直接停
|
|
284
|
-
stopReason = 'pause_turn';
|
|
285
|
-
finalText = textOf(message);
|
|
286
|
-
error = {
|
|
287
|
-
type: 'pause_turn',
|
|
288
|
-
message: '模型返回 pause_turn(无 server tools 的场景不应出现),防死循环直接收尾',
|
|
289
|
-
retryable: false,
|
|
290
|
-
};
|
|
291
|
-
finished = true;
|
|
292
|
-
break;
|
|
293
|
-
}
|
|
294
|
-
if (message.stop_reason === 'stop_sequence') {
|
|
295
|
-
// 命中 stop 序列 = 正常收尾(与 end_turn 同类),不是失败
|
|
296
|
-
stopReason = 'stop_sequence';
|
|
297
|
-
finalText = textOf(message);
|
|
298
|
-
finished = true;
|
|
299
|
-
break;
|
|
300
|
-
}
|
|
301
|
-
const toolUses = message.content.filter((b) => b.type === 'tool_use');
|
|
302
|
-
if (toolUses.length === 0) {
|
|
303
|
-
// 到这里的剩余 stop_reason 不会产生可执行块,防死循环直接停:
|
|
304
|
-
// 'tool_use' 但块为空(畸形响应)与「本框架不认识的 stop_reason」区分开,
|
|
305
|
-
// 后者保留已产出的文本并挂一条可诊断的 error(run 仍按失败收尾)。
|
|
306
|
-
stopReason =
|
|
307
|
-
message.stop_reason === 'tool_use' ? 'tool_use_no_blocks' : 'unknown_stop_reason';
|
|
308
|
-
finalText = textOf(message);
|
|
309
|
-
if (stopReason === 'unknown_stop_reason') {
|
|
310
|
-
error = {
|
|
311
|
-
type: 'agent_error',
|
|
312
|
-
message: `模型返回了未识别的 stop_reason: ${String(message.stop_reason)}`,
|
|
313
|
-
retryable: false,
|
|
314
|
-
};
|
|
315
|
-
}
|
|
316
|
-
finished = true;
|
|
317
|
-
break;
|
|
318
|
-
}
|
|
319
|
-
// 成本硬管控(C1):走得到这里说明循环还要继续(模型要求调工具)—— 超限就停,
|
|
320
|
-
// 连带不执行这批工具(避免超预算的 run 继续产生副作用)。已产出的文本保留。
|
|
321
|
-
// 例外:submit_result 是纯内部的结构化提交(零副作用、不触外部系统),超预算也照常
|
|
322
|
-
// 处理本回合的它 —— 模型已经把最终结果交出来了,连同回合一起丢弃等于白烧这一回合
|
|
323
|
-
// (与「自然收尾不因超预算改判失败」同口径)。
|
|
324
|
-
const runnable = overBudget
|
|
325
|
-
? toolUses.filter((u) => args.resultSchema !== undefined && u.name === SUBMIT_RESULT)
|
|
326
|
-
: toolUses;
|
|
327
|
-
// —— 执行工具:默认全并行,可由 maxToolConcurrency 收窄(C2);
|
|
328
|
-
// 单条 user 消息回全部 tool_result(抑制并行是反模式)——
|
|
329
|
-
const toolResults = await mapWithConcurrency(runnable, args.maxToolConcurrency ?? Number.POSITIVE_INFINITY, async (use) => {
|
|
330
|
-
const tool = args.tools.find((t) => t.name === use.name);
|
|
331
|
-
// 工具级时序(E1):起点在事件之前 —— durationMs 覆盖「入参校验 + 执行 + 超时等待」
|
|
332
|
-
// 的完整处理时长,是「哪一步慢」的可信基线。并行工具各记各的(tool_use_id 配对)。
|
|
333
|
-
const toolStartedAt = Date.now();
|
|
334
|
-
// tool_use_id 一并记账:同名工具并行时,重放只有靠 id 才能把入参出参正确配对
|
|
335
|
-
recorder.event(turnId, 'tool.input', {
|
|
336
|
-
tool: use.name,
|
|
337
|
-
tool_use_id: use.id,
|
|
338
|
-
input: limit(use.input, args.maxEventChars ?? DEFAULT_EVENT_CHARS),
|
|
339
|
-
});
|
|
340
|
-
const ctx = {
|
|
341
|
-
client,
|
|
342
|
-
recorder,
|
|
343
|
-
parentSpanId: turnId,
|
|
344
|
-
...(signal ? { signal } : {}),
|
|
345
|
-
// 价格覆盖透传给嵌套能力(F1):否则子 agent 用同一模型会退化成"未定价"
|
|
346
|
-
...(args.priceOverrides ? { priceOverrides: args.priceOverrides } : {}),
|
|
347
|
-
// 事件截断口径同样透传:调试期开了全文,子 agent 的工具事件不该还是被截断的
|
|
348
|
-
...(args.maxEventChars != null ? { maxEventChars: args.maxEventChars } : {}),
|
|
349
|
-
// 成本护栏(C1)同样透传:预算是整条 run(含各级子 agent)的口径,
|
|
350
|
-
// 子循环拿不到就等于护栏在子循环期间离线(各级共享同一 recorder,按同一账单判断)
|
|
351
|
-
...(args.maxTotalTokens != null ? { maxTotalTokens: args.maxTotalTokens } : {}),
|
|
352
|
-
...(args.maxCostUsd != null ? { maxCostUsd: args.maxCostUsd } : {}),
|
|
353
|
-
};
|
|
354
|
-
let ok = true;
|
|
355
|
-
let content = '';
|
|
356
|
-
// 失败归类(E1):只记「为什么没成」,不记栈 —— 观测看得清「哪个工具老超时」
|
|
357
|
-
let errorKind;
|
|
358
|
-
if (args.resultSchema && use.name === SUBMIT_RESULT) {
|
|
359
|
-
// 隐藏提交工具:校验通过即携结果收尾(循环在下方 break);
|
|
360
|
-
// 校验失败回 is_error(含路径,模型可自我修正),同回合其他工具照常执行。
|
|
361
|
-
// 校验本身也在 try 内:畸形 resultSchema($ref 成环等)只该废掉这一次提交,
|
|
362
|
-
// 不该让整次 run 以 error 收场(否则 trace 把该回合记成 ok,与 run 结论矛盾)。
|
|
363
|
-
try {
|
|
364
|
-
const invalid = validateJsonSchema(args.resultSchema, use.input);
|
|
365
|
-
if (invalid) {
|
|
366
|
-
ok = false;
|
|
367
|
-
errorKind = 'invalid_input';
|
|
368
|
-
content = `invalid input: ${invalid}`;
|
|
369
|
-
}
|
|
370
|
-
else {
|
|
371
|
-
content = 'submitted';
|
|
372
|
-
// 同回合并行多个 submit_result:**先到先得**(首个校验通过的生效,后续忽略)——
|
|
373
|
-
// 不 guarded 赋值的话 typed 由并发完成顺序竞态决定,同输入可能产出不同结果
|
|
374
|
-
if (!submitted) {
|
|
375
|
-
// 模型提交的 input 已过 resultSchema 校验 → 断言为 SchemaType<S>(信任边界在此)
|
|
376
|
-
typed = use.input;
|
|
377
|
-
submitted = true;
|
|
378
|
-
}
|
|
379
|
-
}
|
|
380
|
-
}
|
|
381
|
-
catch (e) {
|
|
382
|
-
ok = false;
|
|
383
|
-
errorKind = 'threw';
|
|
384
|
-
const err = classifyError(e);
|
|
385
|
-
content = `error(${err.type}): ${err.message}`;
|
|
386
|
-
}
|
|
387
|
-
}
|
|
388
|
-
else if (!tool) {
|
|
389
|
-
ok = false;
|
|
390
|
-
errorKind = 'unknown_tool';
|
|
391
|
-
content = `unknown tool: ${use.name}`;
|
|
392
|
-
}
|
|
393
|
-
else {
|
|
394
|
-
// 模型给的 input 先过 schema 校验:不合法直接回 is_error(含路径,
|
|
395
|
-
// 模型可自我修正),不进方法体 —— schema 是方法与模型间的运行时契约。
|
|
396
|
-
// 校验本身也在 try 内:畸形 schema($ref 成环等)只该废掉这一个调用,
|
|
397
|
-
// 不该让整次 run 以 error 收场。
|
|
398
|
-
try {
|
|
399
|
-
const invalid = validateJsonSchema(tool.inputSchema, use.input);
|
|
400
|
-
if (invalid) {
|
|
401
|
-
ok = false;
|
|
402
|
-
errorKind = 'invalid_input';
|
|
403
|
-
content = `invalid input: ${invalid}`;
|
|
404
|
-
}
|
|
405
|
-
else {
|
|
406
|
-
// 工具级超时(C2):超时 = **放弃等待**(AgentTool.run 没有 signal 参数,
|
|
407
|
-
// 工具内部可能还在跑、副作用可能已发生),该条 tool_result 记 is_error 回模型
|
|
408
|
-
// —— 与「工具抛错不中断 run」同语义,模型可自行换路。
|
|
409
|
-
const out = await withTimeout(Promise.resolve(tool.run(use.input, ctx)), args.toolTimeoutMs ?? 0);
|
|
410
|
-
if (out === TIMED_OUT) {
|
|
411
|
-
ok = false;
|
|
412
|
-
errorKind = 'timeout';
|
|
413
|
-
content = `error(timeout): 工具执行超过 ${args.toolTimeoutMs}ms`;
|
|
414
|
-
}
|
|
415
|
-
else {
|
|
416
|
-
content = out;
|
|
417
|
-
}
|
|
418
|
-
}
|
|
419
|
-
}
|
|
420
|
-
catch (e) {
|
|
421
|
-
ok = false;
|
|
422
|
-
errorKind = 'threw';
|
|
423
|
-
const err = classifyError(e);
|
|
424
|
-
content = `error(${err.type}): ${err.message}`;
|
|
425
|
-
}
|
|
426
|
-
}
|
|
427
|
-
recorder.event(turnId, 'tool.output', {
|
|
428
|
-
tool: use.name,
|
|
429
|
-
tool_use_id: use.id,
|
|
430
|
-
ok,
|
|
431
|
-
// 耗时(毫秒):成功/失败/超时/入参被拒四条路径都记(E1)
|
|
432
|
-
durationMs: Math.max(0, Date.now() - toolStartedAt),
|
|
433
|
-
...(errorKind ? { errorKind } : {}),
|
|
434
|
-
content: limit(content, args.maxEventChars ?? (ok ? DEFAULT_EVENT_CHARS : DEFAULT_ERROR_EVENT_CHARS)),
|
|
435
|
-
});
|
|
436
|
-
return {
|
|
437
|
-
type: 'tool_result',
|
|
438
|
-
tool_use_id: use.id,
|
|
439
|
-
content: stringifySafe(content),
|
|
440
|
-
is_error: !ok,
|
|
441
|
-
};
|
|
442
|
-
});
|
|
79
|
+
const toolResults = await executeTurnTools(ctx, turnId, resolution.toolUses, overBudget);
|
|
443
80
|
if (toolResults.length > 0)
|
|
444
|
-
messages.push({ role: 'user', content: toolResults });
|
|
445
|
-
if (submitted) {
|
|
81
|
+
ctx.messages.push({ role: 'user', content: toolResults });
|
|
82
|
+
if (ctx.submitted) {
|
|
446
83
|
// submit_result 校验通过:结构化结果落定,循环正常收尾(finalText 取该回合文本,可空)
|
|
447
84
|
stopReason = 'end_turn';
|
|
448
85
|
finalText = textOf(message);
|
|
@@ -453,7 +90,7 @@ async function agentLoop(args) {
|
|
|
453
90
|
if (overBudget) {
|
|
454
91
|
stopReason = 'budget_exceeded';
|
|
455
92
|
finalText = textOf(message);
|
|
456
|
-
error = budgetError(overBudget);
|
|
93
|
+
error = budgetError(args, overBudget);
|
|
457
94
|
finished = true;
|
|
458
95
|
break;
|
|
459
96
|
}
|
|
@@ -468,7 +105,7 @@ async function agentLoop(args) {
|
|
|
468
105
|
retryable: false,
|
|
469
106
|
};
|
|
470
107
|
}
|
|
471
|
-
return { stopReason, finalText, error, iterations: progress.iterations, typed };
|
|
108
|
+
return { stopReason, finalText, error, iterations: ctx.progress.iterations, typed: ctx.typed };
|
|
472
109
|
}
|
|
473
110
|
/** 主入口:开 run 根 span,循环跑在其下。返回完整 trace(traceId 即 runId)。 */
|
|
474
111
|
export async function runAgent(options) {
|
|
@@ -576,14 +213,6 @@ export async function runAgentScoped(opts) {
|
|
|
576
213
|
maxCostUsd: opts.maxCostUsd,
|
|
577
214
|
});
|
|
578
215
|
}
|
|
579
|
-
function toApiTool(t) {
|
|
580
|
-
return {
|
|
581
|
-
name: t.name,
|
|
582
|
-
description: t.description,
|
|
583
|
-
input_schema: t.inputSchema,
|
|
584
|
-
...(t.strict ? { strict: true } : {}),
|
|
585
|
-
};
|
|
586
|
-
}
|
|
587
216
|
/**
|
|
588
217
|
* 生效配置快照(G3):把本 run 实际生效的旋钮整理成 run 根的 `config.*` attributes。
|
|
589
218
|
* 只放标量(OTLP/日志/看板都能直接吃);缺省值也记,这样"没配"与"配了缺省值"可区分于
|
|
@@ -627,32 +256,4 @@ function runConfigSnapshot(options) {
|
|
|
627
256
|
out['config.resultSchema'] = true;
|
|
628
257
|
return out;
|
|
629
258
|
}
|
|
630
|
-
function textOf(message) {
|
|
631
|
-
return message.content
|
|
632
|
-
.filter((b) => b.type === 'text')
|
|
633
|
-
.map((b) => b.text)
|
|
634
|
-
.join('\n');
|
|
635
|
-
}
|
|
636
|
-
/**
|
|
637
|
-
* 用 `next` 原地替换 `target` 的全部内容(保持数组引用不变 —— 循环各处持同一数组)。
|
|
638
|
-
*
|
|
639
|
-
* **不要**写回 `target.splice(0, target.length, ...next)`:展开传参受 V8 实参个数上限
|
|
640
|
-
* 约束,`next` 超过约 12 万项即抛 `RangeError: Maximum call stack size exceeded`
|
|
641
|
-
* (实测 12 万 ok、30 万抛)。`next` 来自调用方注入的 `contextPolicy`,长度不受框架
|
|
642
|
-
* 控制,所以用循环逐项写,彻底没有这个上限。
|
|
643
|
-
*/
|
|
644
|
-
export function replaceMessages(target, next) {
|
|
645
|
-
target.length = 0;
|
|
646
|
-
for (const m of next)
|
|
647
|
-
target.push(m);
|
|
648
|
-
}
|
|
649
|
-
/**
|
|
650
|
-
* 截断到上限字符,超长加省略标记(格式由 core/json.ts 的 truncateWithMark 单一提供)。
|
|
651
|
-
* `n === false` 表示**不截断**(`RunAgentOptions.maxEventChars: false`)——
|
|
652
|
-
* 传数字时三类事件共用同一个上限,缺省值由调用点给出。
|
|
653
|
-
*/
|
|
654
|
-
function limit(x, n) {
|
|
655
|
-
const s = stringifySafe(x);
|
|
656
|
-
return n === false ? s : truncateWithMark(s, n);
|
|
657
|
-
}
|
|
658
259
|
//# sourceMappingURL=loop.js.map
|
package/dist/engine/loop.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loop.js","sourceRoot":"","sources":["../../src/engine/loop.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"loop.js","sourceRoot":"","sources":["../../src/engine/loop.ts"],"names":[],"mappings":"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"}
|
package/dist/engine/replay.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import type { MessageParam } from '../core/message.js';
|
|
2
2
|
import type { Trace } from '../core/trace.js';
|
|
3
3
|
/**
|
|
4
4
|
* Agentia —— trace 重放基底(spec §9.4 开放问题落地,roadmap R6)。
|
|
@@ -26,7 +26,13 @@ import type { Trace } from '../core/trace.js';
|
|
|
26
26
|
* 以 assistant 收尾即 prefill,缺省模型上 400)。
|
|
27
27
|
*
|
|
28
28
|
* 注意:trace 不记录 assistant 文本(llm.turn 只记 usage/事件),还原的
|
|
29
|
-
* assistant 消息以标注文本占位,非逐字原文。
|
|
29
|
+
* assistant 消息以标注文本占位,非逐字原文。trace 同样不记 run 的原始输入,
|
|
30
|
+
* 故重放的首尾说明性 user 均为合成(这一有损边界对 forkMessages 同样成立)。
|
|
31
|
+
*
|
|
32
|
+
* forkMessages —— 分叉重放:在主循环第 N 回合之前截断,只重放分叉点前的历史,
|
|
33
|
+
* 再拼上调用方给的新消息(通常是改写过的新 user 消息)。定位:A/B 实验与
|
|
34
|
+
* 「从中间某步换个说法重跑」的基底 —— trace 已完整记录分叉点前发生的 tool
|
|
35
|
+
* 往返与子 agent 嵌套回合,模型可沿着真实历史继续,而非从零重放。
|
|
30
36
|
*/
|
|
31
37
|
export interface ReplayOptions {
|
|
32
38
|
/** 是否还原 tool_use/tool_result 对(缺省 true);false 时只留每回合的标注文本 */
|
|
@@ -34,4 +40,13 @@ export interface ReplayOptions {
|
|
|
34
40
|
/** 单段事件负载(工具入参/出参)的最大字符数,超长截断(缺省 2000) */
|
|
35
41
|
maxEventChars?: number;
|
|
36
42
|
}
|
|
37
|
-
export
|
|
43
|
+
export interface ForkReplayOptions extends ReplayOptions {
|
|
44
|
+
/** 在主循环第 N 回合(0-based)之前截断:该回合及其后全部丢弃,从这点分叉。
|
|
45
|
+
* 主循环回合 = parentSpanId === rootSpanId 的 llm.turn(子 agent 嵌套回合不算,与
|
|
46
|
+
* harvest 的口径一致);合法范围 0 .. 主循环回合数-1,越界抛可读错误(带回合总数) */
|
|
47
|
+
atTurn: number;
|
|
48
|
+
/** 分叉点之后追加的消息(通常是改写过的新 user 消息);缺省不追加 */
|
|
49
|
+
append?: MessageParam[];
|
|
50
|
+
}
|
|
51
|
+
export declare function traceToMessages(trace: Trace, opts?: ReplayOptions): MessageParam[];
|
|
52
|
+
export declare function forkMessages(trace: Trace, opts: ForkReplayOptions): MessageParam[];
|