@migor/agentia 0.10.2 → 0.10.3
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 +552 -36
- package/README.md +1 -1
- package/dist/AGENTS.md +95 -25
- package/dist/core/limits.d.ts +33 -1
- package/dist/core/limits.js +37 -1
- package/dist/core/limits.js.map +1 -1
- package/dist/core/run.d.ts +2 -2
- package/dist/core/timeout.d.ts +5 -5
- package/dist/core/timeout.js +5 -5
- package/dist/core/tool.d.ts +2 -2
- package/dist/core/trace.d.ts +10 -1
- package/dist/core/trace.js +10 -1
- package/dist/core/trace.js.map +1 -1
- package/dist/engine/concurrency.d.ts +1 -1
- package/dist/engine/concurrency.js +1 -1
- package/dist/engine/errors.d.ts +2 -2
- package/dist/engine/errors.js +2 -2
- package/dist/engine/loop-result.d.ts +2 -2
- package/dist/engine/loop.js +91 -56
- package/dist/engine/loop.js.map +1 -1
- package/dist/engine/mcp-server-http.js +1 -1
- package/dist/engine/mcp-server-http.js.map +1 -1
- package/dist/engine/mcp-server-stdio.js +7 -3
- package/dist/engine/mcp-server-stdio.js.map +1 -1
- package/dist/engine/mcp-server.d.ts +15 -0
- package/dist/engine/mcp-server.js +39 -8
- package/dist/engine/mcp-server.js.map +1 -1
- package/dist/engine/resume-input.d.ts +1 -1
- package/dist/engine/resume-input.js +1 -1
- package/dist/engine/retry.d.ts +15 -0
- package/dist/engine/retry.js +51 -2
- package/dist/engine/retry.js.map +1 -1
- package/dist/engine/span-scope.d.ts +15 -0
- package/dist/engine/span-scope.js +8 -1
- package/dist/engine/span-scope.js.map +1 -1
- package/dist/engine/spec.d.ts +5 -1
- package/dist/engine/spec.js.map +1 -1
- package/dist/engine/tracer.d.ts +8 -4
- package/dist/engine/tracer.js +24 -17
- package/dist/engine/tracer.js.map +1 -1
- package/dist/engine/turn.d.ts +2 -2
- package/dist/engine/turn.js +19 -4
- package/dist/engine/turn.js.map +1 -1
- package/dist/engine/types.d.ts +8 -3
- package/dist/eval/export.js +2 -2
- package/dist/eval/export.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/integrations/anthropic.d.ts +1 -1
- package/dist/integrations/anthropic.js +1 -1
- package/dist/integrations/anthropic.js.map +1 -1
- package/dist/integrations/file-sink.d.ts +2 -2
- package/dist/integrations/file-sink.js +2 -2
- package/dist/integrations/mcp-http.js +4 -3
- package/dist/integrations/mcp-http.js.map +1 -1
- package/dist/integrations/mcp-protocol.d.ts +35 -10
- package/dist/integrations/mcp-protocol.js +19 -1
- package/dist/integrations/mcp-protocol.js.map +1 -1
- package/dist/integrations/mcp-stdio.js +28 -8
- package/dist/integrations/mcp-stdio.js.map +1 -1
- package/dist/integrations/mcp.d.ts +1 -1
- package/dist/integrations/mcp.js +19 -3
- package/dist/integrations/mcp.js.map +1 -1
- package/dist/integrations/metrics-otlp.d.ts +1 -1
- package/dist/integrations/metrics-otlp.js +8 -2
- package/dist/integrations/metrics-otlp.js.map +1 -1
- package/dist/integrations/metrics-render.js +1 -1
- package/dist/integrations/metrics-render.js.map +1 -1
- package/dist/integrations/metrics-state.d.ts +2 -2
- package/dist/integrations/metrics-state.js +4 -4
- package/dist/integrations/metrics-state.js.map +1 -1
- package/dist/integrations/metrics.d.ts +2 -2
- package/dist/integrations/otlp.d.ts +29 -6
- package/dist/integrations/otlp.js +128 -7
- package/dist/integrations/otlp.js.map +1 -1
- package/dist/integrations/report.d.ts +14 -2
- package/dist/integrations/report.js +39 -6
- package/dist/integrations/report.js.map +1 -1
- package/dist/store/fsStore.js +9 -5
- package/dist/store/fsStore.js.map +1 -1
- package/dist/store/record.d.ts +2 -2
- package/dist/store/record.js +1 -1
- package/dist/store/sqliteStore.d.ts +2 -2
- package/dist/store/sqliteStore.js +3 -3
- package/dist/store/sqliteStore.js.map +1 -1
- package/dist/store/store.d.ts +27 -7
- package/dist/store/store.js +36 -5
- package/dist/store/store.js.map +1 -1
- package/dist/toolkit/collect.d.ts +11 -5
- package/dist/toolkit/collect.js +10 -4
- package/dist/toolkit/collect.js.map +1 -1
- package/dist/toolkit/module.js +78 -1
- package/dist/toolkit/module.js.map +1 -1
- package/dist/toolkit/prompt.d.ts +1 -1
- package/dist/toolkit/prompt.js +2 -2
- package/dist/toolkit/prompt.js.map +1 -1
- package/dist/toolkit/subagent.js +17 -3
- package/dist/toolkit/subagent.js.map +1 -1
- package/dist/transport/approval-policy.js +1 -1
- package/dist/transport/approval-policy.js.map +1 -1
- package/dist/transport/approval-supervisor.d.ts +8 -0
- package/dist/transport/approval-supervisor.js +23 -3
- package/dist/transport/approval-supervisor.js.map +1 -1
- package/dist/transport/async.d.ts +3 -0
- package/dist/transport/async.js +128 -25
- package/dist/transport/async.js.map +1 -1
- package/dist/transport/http-endpoints.js +1 -1
- package/dist/transport/http-route.js +2 -2
- package/dist/transport/http-route.js.map +1 -1
- package/dist/transport/http-shapes.d.ts +1 -1
- package/dist/transport/http-shapes.js +1 -1
- package/dist/transport/resume-scanner.d.ts +7 -0
- package/dist/transport/resume-scanner.js +40 -9
- package/dist/transport/resume-scanner.js.map +1 -1
- package/dist/transport/run-call-options.js +7 -3
- package/dist/transport/run-call-options.js.map +1 -1
- package/dist/transport/scheduler.js +5 -0
- package/dist/transport/scheduler.js.map +1 -1
- package/dist/transport/signal-supervisor.d.ts +10 -2
- package/dist/transport/signal-supervisor.js +15 -2
- package/dist/transport/signal-supervisor.js.map +1 -1
- package/dist/transport/wake-policy.d.ts +1 -1
- package/package.json +1 -1
|
@@ -2,7 +2,7 @@ import { randomUUID } from 'node:crypto';
|
|
|
2
2
|
import { stringifySafe } from '../core/json.js';
|
|
3
3
|
import { validateJsonSchema } from '../core/schema.js';
|
|
4
4
|
import { TIMED_OUT, isTimeoutError, withTimeout } from '../core/timeout.js';
|
|
5
|
-
import { TOOL_INPUT_EVENT, TOOL_OUTPUT_EVENT } from '../core/trace.js';
|
|
5
|
+
import { TOOL_INPUT_EVENT, TOOL_OUTPUT_EVENT, parseTraceparent } from '../core/trace.js';
|
|
6
6
|
import { DEFAULT_PROTOCOL_VERSION } from '../integrations/mcp.js';
|
|
7
7
|
import { createAnthropicClient } from '../integrations/anthropic.js';
|
|
8
8
|
import { classifyError } from './errors.js';
|
|
@@ -10,7 +10,7 @@ import { startHttpTransport } from './mcp-server-http.js';
|
|
|
10
10
|
import { startStdioTransport } from './mcp-server-stdio.js';
|
|
11
11
|
import { buildToolRunContext } from './tool-context.js';
|
|
12
12
|
import { toolInputPayload, toolOutputPayload } from './tool-events.js';
|
|
13
|
-
import { TraceRecorder } from './tracer.js';
|
|
13
|
+
import { TraceRecorder, resolveTraceLimits } from './tracer.js';
|
|
14
14
|
/** serverInfo.version 刻意不写真版本字面量(与 DEFAULT_CLIENT_INFO 同纪律,release-surface 按精确版本串计数) */
|
|
15
15
|
const SERVER_INFO_VERSION = '0.0.0';
|
|
16
16
|
/** 造一条 JSON-RPC 错误应答 */
|
|
@@ -21,6 +21,22 @@ function rpcError(id, code, message) {
|
|
|
21
21
|
function rpcResult(id, result) {
|
|
22
22
|
return { jsonrpc: '2.0', id, result };
|
|
23
23
|
}
|
|
24
|
+
/**
|
|
25
|
+
* 入站链路(SEP-414):从 `tools/call` 的 params 里取 `_meta.traceparent` 并解析。
|
|
26
|
+
*
|
|
27
|
+
* 纪律(与 HTTP 宿主的 `traceparent` 头同款,见 transport/http-endpoints.ts):
|
|
28
|
+
* `_meta` 缺失 / 非对象、`traceparent` 非字符串或畸形,一律**静默当作「没有上游上下文」**
|
|
29
|
+
* —— 链路到不到是观测行为,不该因为一个坏 `_meta` 把一次工具调用打成协议错误;
|
|
30
|
+
* 也**不造空 TraceContext**(空上下文会把 span 变成孤儿 —— MCP Python SDK 的
|
|
31
|
+
* `extract_trace_context` docstring 给的就是这个理由)。
|
|
32
|
+
*/
|
|
33
|
+
function metaTraceContext(params) {
|
|
34
|
+
const meta = params._meta;
|
|
35
|
+
if (typeof meta !== 'object' || meta === null || Array.isArray(meta))
|
|
36
|
+
return undefined;
|
|
37
|
+
const tp = meta.traceparent;
|
|
38
|
+
return typeof tp === 'string' ? parseTraceparent(tp) : undefined;
|
|
39
|
+
}
|
|
24
40
|
/**
|
|
25
41
|
* 执行一次 `tools/call`:造一棵 trace(run 根 + capability span + tool.input/tool.output
|
|
26
42
|
* 事件),收尾投递 sinks,然后把结果映射成 MCP 形状。
|
|
@@ -28,15 +44,27 @@ function rpcResult(id, result) {
|
|
|
28
44
|
* 独立成顶层函数(而不是 `createMcpServer` 闭包里的一支):它是本文件里最大的一块,
|
|
29
45
|
* 且**只依赖 `deps` 三件**,不碰装配期的任何状态 —— 拆前它藏在 441 行的闭包里无名可分。
|
|
30
46
|
*/
|
|
31
|
-
async function callTool(tool, args, signal, deps
|
|
32
|
-
|
|
33
|
-
|
|
47
|
+
async function callTool(tool, args, signal, deps,
|
|
48
|
+
/** 入站链路(SEP-414):调用方经 `params._meta.traceparent` 带来的上游 span;undefined = 孤立根 */
|
|
49
|
+
link) {
|
|
50
|
+
const { sinks, toolTimeoutMs, maxEventChars } = deps;
|
|
51
|
+
const recorder = new TraceRecorder({
|
|
52
|
+
...(deps.traceLimits?.maxEvents !== undefined ? { maxEvents: deps.traceLimits.maxEvents } : {}),
|
|
53
|
+
});
|
|
34
54
|
const rootId = recorder.begin('run', 'mcp.tools/call', null);
|
|
55
|
+
// 与引擎 run 入口(loop.ts 的 traceContext)同形状:上游被**链接**而不是被继承成
|
|
56
|
+
// 父 span —— 这棵 trace 永远自洽(`traceId == runId` 不变),因果关系仍然可查
|
|
57
|
+
if (link) {
|
|
58
|
+
recorder.addLink(rootId, {
|
|
59
|
+
traceId: link.traceId,
|
|
60
|
+
...(link.spanId ? { spanId: link.spanId } : {}),
|
|
61
|
+
});
|
|
62
|
+
}
|
|
35
63
|
const capId = recorder.begin('capability', tool.name, rootId);
|
|
36
64
|
// tool_use_id 与引擎同义(同名工具并行时靠 id 配对入参/出参事件)
|
|
37
65
|
const use = { type: 'tool_use', id: randomUUID(), name: tool.name, input: args };
|
|
38
66
|
const startedAt = Date.now();
|
|
39
|
-
recorder.event(capId, TOOL_INPUT_EVENT, toolInputPayload(use));
|
|
67
|
+
recorder.event(capId, TOOL_INPUT_EVENT, toolInputPayload(use, maxEventChars));
|
|
40
68
|
// 超时「放弃等待」的通知信号(与引擎 executeOneTool 同款:判超时分支里 abort)
|
|
41
69
|
const abandonAc = new AbortController();
|
|
42
70
|
const toolCtx = buildToolRunContext({
|
|
@@ -80,7 +108,7 @@ async function callTool(tool, args, signal, deps) {
|
|
|
80
108
|
spanError = err;
|
|
81
109
|
}
|
|
82
110
|
}
|
|
83
|
-
recorder.event(capId, TOOL_OUTPUT_EVENT, toolOutputPayload({ use, ok, errorKind, startedAt, now: Date.now(), content }));
|
|
111
|
+
recorder.event(capId, TOOL_OUTPUT_EVENT, toolOutputPayload({ use, ok, errorKind, startedAt, now: Date.now(), content, maxEventChars }));
|
|
84
112
|
recorder.end(capId, ok
|
|
85
113
|
? {}
|
|
86
114
|
: {
|
|
@@ -173,7 +201,7 @@ async function dispatch(msg, signal, deps) {
|
|
|
173
201
|
if (badInput !== null) {
|
|
174
202
|
return rpcError(id, -32602, `工具 ${name} 的入参不满足 inputSchema:${badInput}`);
|
|
175
203
|
}
|
|
176
|
-
return rpcResult(id, await callTool(tool, (rawArgs ?? {}), signal, deps));
|
|
204
|
+
return rpcResult(id, await callTool(tool, (rawArgs ?? {}), signal, deps, metaTraceContext(params)));
|
|
177
205
|
}
|
|
178
206
|
default:
|
|
179
207
|
return rpcError(id, -32601, `method not found: ${method}`);
|
|
@@ -204,6 +232,9 @@ export function createMcpServer(app, opts) {
|
|
|
204
232
|
serverInfo: { name: opts.name ?? 'agentia', version: SERVER_INFO_VERSION },
|
|
205
233
|
sinks: opts.sinks ?? [],
|
|
206
234
|
toolTimeoutMs: opts.toolTimeoutMs,
|
|
235
|
+
// 构造期校验(坏值响亮抛 TypeError,与 run 入口同一个判定器)
|
|
236
|
+
traceLimits: resolveTraceLimits(opts.traceLimits, 'createMcpServer'),
|
|
237
|
+
maxEventChars: opts.maxEventChars,
|
|
207
238
|
clientOf: () => {
|
|
208
239
|
cachedClient ??= opts.client ?? createAnthropicClient();
|
|
209
240
|
return cachedClient;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../../src/engine/mcp-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAG5E,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../../src/engine/mcp-server.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,7 +26,7 @@ export declare function tailToolUses(messages: MessageParam[]): ToolUseBlock[];
|
|
|
26
26
|
/** 取 MessageParam(请求侧)里的文本块拼成的文本(恢复模式收尾时用) */
|
|
27
27
|
export declare function textOfParam(message: MessageParam): string;
|
|
28
28
|
/**
|
|
29
|
-
* run 事件 → **一条 user 文本消息**(2026-09-28
|
|
29
|
+
* run 事件 → **一条 user 文本消息**(2026-09-28 ref-run-event-input 的 B1:外部永远不能构造 block ——
|
|
30
30
|
* 进来的只有文本,投毒面只到「内容注入」为止)。
|
|
31
31
|
*
|
|
32
32
|
* `eventId` **不进正文**:它是投递簿记(幂等去重依据),不是内容 —— 模型不需要知道
|
|
@@ -37,7 +37,7 @@ export function textOfParam(message) {
|
|
|
37
37
|
.join('\n');
|
|
38
38
|
}
|
|
39
39
|
/**
|
|
40
|
-
* run 事件 → **一条 user 文本消息**(2026-09-28
|
|
40
|
+
* run 事件 → **一条 user 文本消息**(2026-09-28 ref-run-event-input 的 B1:外部永远不能构造 block ——
|
|
41
41
|
* 进来的只有文本,投毒面只到「内容注入」为止)。
|
|
42
42
|
*
|
|
43
43
|
* `eventId` **不进正文**:它是投递簿记(幂等去重依据),不是内容 —— 模型不需要知道
|
package/dist/engine/retry.d.ts
CHANGED
|
@@ -40,6 +40,21 @@ export declare const DEFAULT_RETRY: {
|
|
|
40
40
|
readonly jitter: 0.2;
|
|
41
41
|
};
|
|
42
42
|
export type ResolvedRetry = Required<RetryOptions>;
|
|
43
|
+
/**
|
|
44
|
+
* 校验 `RetryOptions` 的四个数值旋钮 —— **响亮抛 TypeError**,与 client 层
|
|
45
|
+
* `resolveMaxRetries`(integrations/adapter-options.ts)同一条纪律。
|
|
46
|
+
*
|
|
47
|
+
* 坏值的真实后果(2026-10-13 深评 A1,实测):
|
|
48
|
+
* - `maxAttempts: NaN` ⇒ `!(NaN >= 1)` 成立 ⇒ **重试被静默关闭**(run 根快照记
|
|
49
|
+
* `config.retry.maxAttempts: 0`,看着像用户主动关的);
|
|
50
|
+
* - `baseDelayMs: NaN` ⇒ `backoffDelay` 算出 NaN ⇒ `sleep` 的 `assertTimerDelay` 抛
|
|
51
|
+
* RangeError —— 它曾被 turn.ts 退避处的裸 catch 吞成「用户取消」(配置错被谎报);
|
|
52
|
+
* - 延迟超 2^31-1ms ⇒ 被 Node 静默钳到 1ms(远期退避变热重试,单源上限见 core/timeout.ts)。
|
|
53
|
+
*
|
|
54
|
+
* `0` 各有合法读法(`maxAttempts: 0` = 关闭、`baseDelayMs: 0` = 不退避、`jitter: 0` =
|
|
55
|
+
* 不加抖动),不在被拒之列 —— 各旋钮的 0 语义登记在 `core/limits.ts`。
|
|
56
|
+
*/
|
|
57
|
+
export declare function validateRetryOptions(o: RetryOptions | false | undefined): void;
|
|
43
58
|
/** 归一重试配置:`undefined` → 缺省策略(**缺省开启**);`false` → null(关闭)。 */
|
|
44
59
|
export declare function resolveRetry(o: RetryOptions | false | undefined): ResolvedRetry | null;
|
|
45
60
|
/**
|
package/dist/engine/retry.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { zeroClauseOf } from '../core/limits.js';
|
|
2
|
+
import { MAX_TIMER_DELAY_MS, interruptibleSleep } from '../core/timeout.js';
|
|
2
3
|
import { classifyError } from './errors.js';
|
|
3
4
|
/** 缺省重试参数(不含两个函数字段 —— 它们在 resolveRetry 里注入) */
|
|
4
5
|
export const DEFAULT_RETRY = {
|
|
@@ -23,10 +24,54 @@ function definedOnly(o) {
|
|
|
23
24
|
}
|
|
24
25
|
return out;
|
|
25
26
|
}
|
|
27
|
+
/**
|
|
28
|
+
* 校验 `RetryOptions` 的四个数值旋钮 —— **响亮抛 TypeError**,与 client 层
|
|
29
|
+
* `resolveMaxRetries`(integrations/adapter-options.ts)同一条纪律。
|
|
30
|
+
*
|
|
31
|
+
* 坏值的真实后果(2026-10-13 深评 A1,实测):
|
|
32
|
+
* - `maxAttempts: NaN` ⇒ `!(NaN >= 1)` 成立 ⇒ **重试被静默关闭**(run 根快照记
|
|
33
|
+
* `config.retry.maxAttempts: 0`,看着像用户主动关的);
|
|
34
|
+
* - `baseDelayMs: NaN` ⇒ `backoffDelay` 算出 NaN ⇒ `sleep` 的 `assertTimerDelay` 抛
|
|
35
|
+
* RangeError —— 它曾被 turn.ts 退避处的裸 catch 吞成「用户取消」(配置错被谎报);
|
|
36
|
+
* - 延迟超 2^31-1ms ⇒ 被 Node 静默钳到 1ms(远期退避变热重试,单源上限见 core/timeout.ts)。
|
|
37
|
+
*
|
|
38
|
+
* `0` 各有合法读法(`maxAttempts: 0` = 关闭、`baseDelayMs: 0` = 不退避、`jitter: 0` =
|
|
39
|
+
* 不加抖动),不在被拒之列 —— 各旋钮的 0 语义登记在 `core/limits.ts`。
|
|
40
|
+
*/
|
|
41
|
+
export function validateRetryOptions(o) {
|
|
42
|
+
if (o === false || o === undefined)
|
|
43
|
+
return;
|
|
44
|
+
const { maxAttempts, baseDelayMs, maxDelayMs, jitter } = o;
|
|
45
|
+
if (maxAttempts !== undefined && (!Number.isSafeInteger(maxAttempts) || maxAttempts < 0)) {
|
|
46
|
+
throw new TypeError(`retry.maxAttempts 必须是非负安全整数(${zeroClauseOf('RetryOptions.maxAttempts')}),收到 ${String(maxAttempts)} —— ` +
|
|
47
|
+
'NaN / Infinity / 负数 / 小数都会让「重试几次」变成猜的(`!(NaN >= 1)` 成立 ⇒ 重试被静默关闭)');
|
|
48
|
+
}
|
|
49
|
+
for (const [name, v] of [
|
|
50
|
+
['retry.baseDelayMs', baseDelayMs],
|
|
51
|
+
['retry.maxDelayMs', maxDelayMs],
|
|
52
|
+
]) {
|
|
53
|
+
if (v === undefined)
|
|
54
|
+
continue;
|
|
55
|
+
if (typeof v !== 'number' || !Number.isFinite(v) || v < 0 || v > MAX_TIMER_DELAY_MS) {
|
|
56
|
+
throw new TypeError(`${name} 必须是 0 ~ ${MAX_TIMER_DELAY_MS}ms 的有限数` +
|
|
57
|
+
`(${zeroClauseOf(name === 'retry.baseDelayMs' ? 'RetryOptions.baseDelayMs' : 'RetryOptions.maxDelayMs')}),` +
|
|
58
|
+
`收到 ${String(v)} —— NaN 会让退避算成 NaN,超上限会被 Node 钳到 1ms(远期变热重试)`);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
if (jitter !== undefined &&
|
|
62
|
+
(typeof jitter !== 'number' || !Number.isFinite(jitter) || jitter < 0 || jitter > 1)) {
|
|
63
|
+
throw new TypeError(`retry.jitter 必须是 0 ~ 1 的有限数(${zeroClauseOf('RetryOptions.jitter')}),收到 ${String(jitter)} —— ` +
|
|
64
|
+
'>1 会把退避拉成负数再被静默钳回 0(抖动与退避一起失效)');
|
|
65
|
+
}
|
|
66
|
+
}
|
|
26
67
|
/** 归一重试配置:`undefined` → 缺省策略(**缺省开启**);`false` → null(关闭)。 */
|
|
27
68
|
export function resolveRetry(o) {
|
|
28
69
|
if (o === false)
|
|
29
70
|
return null;
|
|
71
|
+
// 数值旋钮坏值响亮失败(见 validateRetryOptions 头注)。runAgent 入口另有一次同款
|
|
72
|
+
// 校验(配置错不收成「失败的 run」);这里保留是因为直连 agentLoop / runAgentScoped
|
|
73
|
+
// 的路径不经过 run 入口。
|
|
74
|
+
validateRetryOptions(o);
|
|
30
75
|
// 用 definedOnly 兜住显式 undefined,否则旧写法会把缺省覆盖掉:
|
|
31
76
|
// `maxAttempts: undefined` → `!(undefined >= 1)` 成立 → **重试被静默关闭**,
|
|
32
77
|
// 而 run 根快照记的是 config.retry.maxAttempts: 0(看起来像用户主动关的);
|
|
@@ -55,7 +100,11 @@ export function backoffDelay(attempt, r) {
|
|
|
55
100
|
const exp = r.baseDelayMs * 2 ** Math.max(0, attempt - 1);
|
|
56
101
|
const capped = Math.min(exp, r.maxDelayMs);
|
|
57
102
|
const jitter = r.jitter > 0 ? capped * r.jitter * (Math.random() * 2 - 1) : 0;
|
|
58
|
-
|
|
103
|
+
// 上界再封一道:`capped ≤ maxDelayMs ≤ 2^31-1` 由入口校验保证,但正向抖动还能把它
|
|
104
|
+
// 推过 Node 定时器的物理上限(maxDelayMs 贴上限 + jitter=1 ⇒ 最多 2 倍)——超上限
|
|
105
|
+
// 的 setTimeout 会被钳到 1ms(远期退避变热重试),这里在交付给 sleep 之前夹住。
|
|
106
|
+
// ⚠️ 用 Math.min 而不是 clampTimerDelay:后者会把 NaN 读成 0,而 NaN 是必须响亮的坏值。
|
|
107
|
+
return Math.min(Math.max(0, Math.round(capped + jitter)), MAX_TIMER_DELAY_MS);
|
|
59
108
|
}
|
|
60
109
|
/**
|
|
61
110
|
* 可被 signal 中断的 sleep(退避期间收到取消就不必再等)。
|
package/dist/engine/retry.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/engine/retry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/engine/retry.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,6 +13,9 @@ import { type SpanId } from '../core/trace.js';
|
|
|
13
13
|
* 它们的「当前 span」就是发起它的那个回合,与 `ToolRunContext.parentSpanId` 同一个值);
|
|
14
14
|
* - `capability` —— `toolkit/skill.ts` / `toolkit/subagent.ts` 包住自己的方法体 / 子循环。
|
|
15
15
|
*
|
|
16
|
+
* 三层各自登记自己的 `agentName`(run 根 = 应用名、capability = 子 agent 名);夹在中间的
|
|
17
|
+
* `llm.turn` **不知道身份**,靠 `withCurrentSpan` 的**继承**把上一层的值留住(见该函数注释)。
|
|
18
|
+
*
|
|
16
19
|
* 边界(如实):`run` 根 span 由 `runAgent` 打开,故 `executeRun` 里更早的 `contextInit` /
|
|
17
20
|
* 记忆水合**没有**作用域 —— 那时确实还没有 span 可指,`currentTraceparent()` 返回 `undefined`。
|
|
18
21
|
*/
|
|
@@ -20,6 +23,18 @@ import { type SpanId } from '../core/trace.js';
|
|
|
20
23
|
export interface SpanScope {
|
|
21
24
|
traceId: string;
|
|
22
25
|
spanId: SpanId;
|
|
26
|
+
/**
|
|
27
|
+
* 当前正在跑的是**哪个 agent**(run 根 = 应用名;子 agent 的 capability span = 该 subagent 名)。
|
|
28
|
+
*
|
|
29
|
+
* 为什么需要它(2026-10-12 G7 交接):`@SubAgent` 的 capability span 上要写
|
|
30
|
+
* `agentia.handoff.from` —— 值是**调用方** agent 名,而调用点手上只有 `recorder`
|
|
31
|
+
* (**只写不读**,`RecorderBackend` 没有任何查 span 树的口子)与 `ctx.parentSpanId`
|
|
32
|
+
* (一个 id,反查不出名字)。唯一拿得到它的地方就是「当前调用期」,即这里。
|
|
33
|
+
*
|
|
34
|
+
* ⚠️ 值是**人读的名字**(run 根用 `runName`、子 agent 用它注册的 `name`),不是 span id、
|
|
35
|
+
* 也不是 `<类型>:<名>` 那种展示串 —— 它要直接写进 `agentia.handoff.from` 给外部消费。
|
|
36
|
+
*/
|
|
37
|
+
agentName?: string;
|
|
23
38
|
}
|
|
24
39
|
/**
|
|
25
40
|
* 在指定 span 作用域内执行。返回类型随 fn 而定(async fn → Promise<T>,同步 fn → T)。
|
|
@@ -2,7 +2,14 @@ import { AsyncLocalStorage } from 'node:async_hooks';
|
|
|
2
2
|
import { formatTraceparent } from '../core/trace.js';
|
|
3
3
|
const store = new AsyncLocalStorage();
|
|
4
4
|
export function withCurrentSpan(scope, fn) {
|
|
5
|
-
|
|
5
|
+
// ⚠️ 是**合并**(内层同名键覆盖外层),不是整条替换 —— `agentName` 是**跨层不变的身份**,
|
|
6
|
+
// 而三个写入点各自只知道「自己这一层的 span id」:run 根(loop.ts)知道应用名、capability
|
|
7
|
+
// (skill/subagent)知道子 agent 名,夹在中间的 `llm.turn`(turn.ts)**两个都不知道**。
|
|
8
|
+
// 用整条替换的话,turn.ts 每次包工具执行都会把 run 根写下的 agent 名抹成 undefined ⇒
|
|
9
|
+
// 交接属性永远拿不到值。`traceId` / `spanId` 仍由每个写入点显式给 ⇒ 收窄语义逐字不变
|
|
10
|
+
// (`tests/engine/spanScope.test.ts` 的「并行链互不干扰、内层不外泄」继续钉着这一条)。
|
|
11
|
+
const outer = store.getStore();
|
|
12
|
+
return store.run({ ...outer, ...scope }, fn);
|
|
6
13
|
}
|
|
7
14
|
/** 当前调用期的 span 作用域;不在任何 run / 调用内时 undefined。 */
|
|
8
15
|
export function currentSpan() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"span-scope.js","sourceRoot":"","sources":["../../src/engine/span-scope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAe,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"span-scope.js","sourceRoot":"","sources":["../../src/engine/span-scope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAe,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAyClE,MAAM,KAAK,GAAG,IAAI,iBAAiB,EAAa,CAAC;AAUjD,MAAM,UAAU,eAAe,CAAI,KAAgB,EAAE,EAAwB;IAC3E,4DAA4D;IAC5D,6DAA6D;IAC7D,mEAAmE;IACnE,4DAA4D;IAC5D,wDAAwD;IACxD,8DAA8D;IAC9D,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;IAC/B,OAAO,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,KAAK,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;AAC/C,CAAC;AAED,iDAAiD;AACjD,MAAM,UAAU,WAAW;IACzB,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;AAC1B,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,kBAAkB;IAChC,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;IAC/B,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,OAAO,iBAAiB,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;AACxD,CAAC"}
|
package/dist/engine/spec.d.ts
CHANGED
|
@@ -109,7 +109,7 @@ export interface RunInvocationOptions {
|
|
|
109
109
|
*/
|
|
110
110
|
maxEventChars?: number | false;
|
|
111
111
|
/**
|
|
112
|
-
* 挂起期间投递的事件(2026-09-28
|
|
112
|
+
* 挂起期间投递的事件(2026-09-28 ref-run-event-input,run 事件投入口):随 `TaskRecord.pendingEvents`
|
|
113
113
|
* 落库(纯数据、可序列化,重启不丢),续跑段由引擎在**未决 tool_use 解决之后**
|
|
114
114
|
* 渲染成 user 文本消息注入消息流(为什么不是宿主直接追加到消息末尾:续跑判定
|
|
115
115
|
* 只认历史**末尾一条**,追加 user 消息会把续跑判成新对话 —— 见 engine/loop.ts)。
|
|
@@ -131,6 +131,10 @@ export interface RunInvocationOptions {
|
|
|
131
131
|
*
|
|
132
132
|
* 同步宿主(HTTP `POST /run` / `runSync`)不消费它:那边没有 store 可注入,
|
|
133
133
|
* 会话请走程序内的 `RunAppOptions.session`。
|
|
134
|
+
*
|
|
135
|
+
* ⚠️ 程序内直接 `app.run(messages, { sessionId })` 同样**不生效**(`AgentApp.run`
|
|
136
|
+
* 不消费它)—— 入口会 `console.warn` 一次并指出改用 `session`(2026-10-12 ref-session-id-warn;
|
|
137
|
+
* 此前是静默丢弃:run 根没有 `session.id`、历史接不上、零信号)。
|
|
134
138
|
*/
|
|
135
139
|
sessionId?: string;
|
|
136
140
|
}
|
package/dist/engine/spec.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spec.js","sourceRoot":"","sources":["../../src/engine/spec.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"spec.js","sourceRoot":"","sources":["../../src/engine/spec.ts"],"names":[],"mappings":"AA6JA;;;;;;;;GAQG;AACH,MAAM,OAAO,cAAe,SAAQ,KAAK;IACvC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF;AAED,wCAAwC;AACxC,MAAM,UAAU,iBAAiB,CAAC,KAAyB;IACzD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,mDAAmD;QACnD,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,cAAc,CAAC,kBAAkB,CAAC,CAAC;QACzD,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;IAC5C,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM,IAAI,cAAc,CAAC,kBAAkB,CAAC,CAAC;QACrE,OAAO,KAAuB,CAAC;IACjC,CAAC;IACD,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvC,MAAM,CAAC,GAAG,KAAiE,CAAC;QAC5E,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;gBAAE,MAAM,IAAI,cAAc,CAAC,kBAAkB,CAAC,CAAC;YAC1E,OAAO,CAAC,CAAC,QAA0B,CAAC;QACtC,CAAC;QACD,IAAI,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM;YAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QAC3F,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI;YAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACvF,CAAC;IACD,MAAM,IAAI,cAAc,CAAC,cAAc,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;AACjF,CAAC"}
|
package/dist/engine/tracer.d.ts
CHANGED
|
@@ -63,11 +63,15 @@ export declare class TraceRecorder {
|
|
|
63
63
|
/** 因超限被丢弃的事件数(交付时写进 run 根的 `trace.truncated`) */
|
|
64
64
|
private droppedEvents;
|
|
65
65
|
/**
|
|
66
|
-
*
|
|
67
|
-
*
|
|
68
|
-
*
|
|
66
|
+
* 截断收尾摘要(`trace.truncated { droppedEvents, limit }`),**只生成一次**。
|
|
67
|
+
*
|
|
68
|
+
* 它是「交付时才写得出的结论」,由 `snapshot()` 首次调用时生成:同一个对象既进
|
|
69
|
+
* `span.events`(此后每次 snapshot 都带它)、也走增量出口(见 snapshot 的注释)。
|
|
70
|
+
* ⚠️ 不可每次调用都新建 —— 那样摘要的 `time` 每次不同,增量流里的那一条与
|
|
71
|
+
* 任何一次 snapshot 都对不上(`core/trace.ts` 的折叠契约当场变假),且多次
|
|
72
|
+
* snapshot 彼此也不一致。
|
|
69
73
|
*/
|
|
70
|
-
private
|
|
74
|
+
private truncationSummary;
|
|
71
75
|
/** 记账事件订阅者(增量出口,见 `core/trace.ts` 的 `TraceRecordEvent`) */
|
|
72
76
|
private readonly listeners;
|
|
73
77
|
/**
|
package/dist/engine/tracer.js
CHANGED
|
@@ -41,11 +41,15 @@ export class TraceRecorder {
|
|
|
41
41
|
/** 因超限被丢弃的事件数(交付时写进 run 根的 `trace.truncated`) */
|
|
42
42
|
droppedEvents = 0;
|
|
43
43
|
/**
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
*
|
|
44
|
+
* 截断收尾摘要(`trace.truncated { droppedEvents, limit }`),**只生成一次**。
|
|
45
|
+
*
|
|
46
|
+
* 它是「交付时才写得出的结论」,由 `snapshot()` 首次调用时生成:同一个对象既进
|
|
47
|
+
* `span.events`(此后每次 snapshot 都带它)、也走增量出口(见 snapshot 的注释)。
|
|
48
|
+
* ⚠️ 不可每次调用都新建 —— 那样摘要的 `time` 每次不同,增量流里的那一条与
|
|
49
|
+
* 任何一次 snapshot 都对不上(`core/trace.ts` 的折叠契约当场变假),且多次
|
|
50
|
+
* snapshot 彼此也不一致。
|
|
47
51
|
*/
|
|
48
|
-
|
|
52
|
+
truncationSummary = null;
|
|
49
53
|
/** 记账事件订阅者(增量出口,见 `core/trace.ts` 的 `TraceRecordEvent`) */
|
|
50
54
|
listeners = [];
|
|
51
55
|
/**
|
|
@@ -339,23 +343,26 @@ export class TraceRecorder {
|
|
|
339
343
|
...(s.links ? { links: [...s.links] } : {}),
|
|
340
344
|
}));
|
|
341
345
|
// 截断摘要:**交付时**才写得出的结论(与 totalUsage 同族),写在 run 根上。
|
|
342
|
-
//
|
|
343
|
-
//
|
|
344
|
-
//
|
|
345
|
-
//
|
|
346
|
+
// 只生成一次(`this.truncationSummary` 缓存):同一个对象既进 span.events、也走增量出口 ——
|
|
347
|
+
// 否则「按 seq 折回的那棵树」会少这一笔 / 每次 snapshot 的摘要时间戳互不相同,
|
|
348
|
+
// `core/trace.ts` 那条折叠规则就是**假的**。
|
|
349
|
+
// 增量出口只派一次 ⇒ 重复交付不会让增量流里多出一条。
|
|
346
350
|
if (this.droppedEvents > 0) {
|
|
347
351
|
const root = spans.find((s) => s.spanId === this.rootSpanId);
|
|
348
352
|
if (root) {
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
353
|
+
if (this.truncationSummary === null) {
|
|
354
|
+
this.truncationSummary = {
|
|
355
|
+
time: Date.now(),
|
|
356
|
+
name: 'trace.truncated',
|
|
357
|
+
body: { droppedEvents: this.droppedEvents, limit: this.maxEvents },
|
|
358
|
+
};
|
|
359
|
+
this.emit({
|
|
360
|
+
type: 'span.event',
|
|
361
|
+
spanId: this.rootSpanId,
|
|
362
|
+
event: { ...this.truncationSummary },
|
|
363
|
+
});
|
|
358
364
|
}
|
|
365
|
+
root.events.push(this.truncationSummary);
|
|
359
366
|
}
|
|
360
367
|
}
|
|
361
368
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tracer.js","sourceRoot":"","sources":["../../src/engine/tracer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAczC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAkCjD;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAY,EAAE,KAAa;IAC5D,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACxC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QAC5C,MAAM,IAAI,SAAS,CACjB,GAAG,KAAK,+CAA+C,MAAM,CAAC,GAAG,CAAC,EAAE,CACrE,CAAC;IACJ,CAAC;IACD,MAAM,SAAS,GAAI,GAA+B,CAAC,SAAS,CAAC;IAC7D,IAAI,SAAS,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IACvC,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;QACvF,MAAM,IAAI,SAAS,CACjB,GAAG,KAAK,oCAAoC,YAAY,CAAC,uBAAuB,CAAC,QAAQ,MAAM,CAAC,SAAS,CAAC,MAAM;YAC9G,uCAAuC,CAC1C,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,SAAS,EAAE,CAAC;AACvB,CAAC;AAQD;;;;GAIG;AACH,MAAM,OAAO,aAAa;IACf,OAAO,GAAY,UAAU,EAAE,CAAC;IACxB,KAAK,GAAW,EAAE,CAAC;IACnB,KAAK,GAAG,IAAI,GAAG,EAAgB,CAAC;IACjD,8EAA8E;IAC7D,QAAQ,GAAG,IAAI,GAAG,EAAyB,CAAC;IACrD,UAAU,GAAkB,IAAI,CAAC;IACzC,oDAAoD;IACnC,SAAS,CAAqB;IAC/C,2CAA2C;IACnC,cAAc,GAAG,CAAC,CAAC;IAC3B,iDAAiD;IACzC,aAAa,GAAG,CAAC,CAAC;IAC1B
|
|
1
|
+
{"version":3,"file":"tracer.js","sourceRoot":"","sources":["../../src/engine/tracer.ts"],"names":[],"mappings":"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"}
|
package/dist/engine/turn.d.ts
CHANGED
|
@@ -91,7 +91,7 @@ export interface AgentLoopArgs<S extends JsonSchema = JsonSchema> {
|
|
|
91
91
|
/** 人工审批决定(HITL):以 tool_use_id 为键;恢复挂起的 run 时由宿主传入 */
|
|
92
92
|
approvals?: Record<string, ApprovalDecision> | undefined;
|
|
93
93
|
/**
|
|
94
|
-
* 挂起期间投递的事件(2026-09-28
|
|
94
|
+
* 挂起期间投递的事件(2026-09-28 ref-run-event-input;语义见 RunInvocationOptions.events):
|
|
95
95
|
* 由 loop.ts 的续跑入口在**未决 tool_use 解决之后**注入消息流(本文件不消费它 ——
|
|
96
96
|
* 注入时机的纪律在 loop.ts,那里才知道 tool_result 已落定)。
|
|
97
97
|
*/
|
|
@@ -171,7 +171,7 @@ export declare function streamTurn<S extends JsonSchema>(ctx: LoopContext<S>): P
|
|
|
171
171
|
* 预算护栏依赖「记账完成后」的 usage 累计,所以本函数必须先于任何 budget.check 调用。
|
|
172
172
|
*
|
|
173
173
|
* `model` 是本回合**实际**成功的模型(TurnOutcome.model):fallback 换环后与 args.model
|
|
174
|
-
* 不同 —— 成本估算与未定价探测按错模型算就是记错账(评审 2026-09-27
|
|
174
|
+
* 不同 —— 成本估算与未定价探测按错模型算就是记错账(评审 2026-09-27 ref-sink-failure-warn 的核心教训)。
|
|
175
175
|
*/
|
|
176
176
|
export declare function recordTurnUsage<S extends JsonSchema>(ctx: LoopContext<S>, turnId: SpanId, message: Message, model?: string): void;
|
|
177
177
|
/** 回合收尾分流:finish = 终止/边界分支(带 stopReason 与收尾文本);tools = 还有工具要执行 */
|
package/dist/engine/turn.js
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* 规范位置是 text.ts(loop.ts 与 stop-reason.ts 都从那儿取;回本文件取会成环)。
|
|
13
13
|
*/
|
|
14
14
|
import { validateJsonSchema } from '../core/schema.js';
|
|
15
|
-
import { TOOL_INPUT_EVENT, TOOL_OUTPUT_EVENT } from '../core/trace.js';
|
|
15
|
+
import { CONTEXT_BUDGET_EVENT, TOOL_INPUT_EVENT, TOOL_OUTPUT_EVENT } from '../core/trace.js';
|
|
16
16
|
import { isTimeoutError } from '../core/timeout.js';
|
|
17
17
|
import { classifyError, isAbortError } from './errors.js';
|
|
18
18
|
import { createDeferRequest } from './defer.js';
|
|
@@ -164,7 +164,7 @@ export async function checkTurnEntry(ctx, iteration) {
|
|
|
164
164
|
}
|
|
165
165
|
if (next && next !== messages) {
|
|
166
166
|
if (args.parentSpanId) {
|
|
167
|
-
args.recorder.event(args.parentSpanId,
|
|
167
|
+
args.recorder.event(args.parentSpanId, CONTEXT_BUDGET_EVENT, {
|
|
168
168
|
from: messages.length,
|
|
169
169
|
to: next.length,
|
|
170
170
|
model: args.model,
|
|
@@ -269,7 +269,13 @@ export async function streamTurn(ctx) {
|
|
|
269
269
|
try {
|
|
270
270
|
await sleep(delayMs, signal);
|
|
271
271
|
}
|
|
272
|
-
catch {
|
|
272
|
+
catch (sleepErr) {
|
|
273
|
+
// 只认取消(AbortError):sleep 还会因坏延迟抛 RangeError(assertTimerDelay)——
|
|
274
|
+
// 那是配置/实现错误,吞成 aborted 会把「配置坏了」谎报成「用户取消」
|
|
275
|
+
// (2026-10-13 深评 A1 实测:`retry:{baseDelayMs:NaN}` + 429 → stopReason:aborted)。
|
|
276
|
+
// 入口校验(validateRetryOptions)让这条路本不该走到,真走到就原样抛出归类。
|
|
277
|
+
if (!isAbortError(sleepErr))
|
|
278
|
+
throw sleepErr;
|
|
273
279
|
aborted = true; // 退避期间被取消
|
|
274
280
|
break;
|
|
275
281
|
}
|
|
@@ -285,7 +291,7 @@ export async function streamTurn(ctx) {
|
|
|
285
291
|
* 预算护栏依赖「记账完成后」的 usage 累计,所以本函数必须先于任何 budget.check 调用。
|
|
286
292
|
*
|
|
287
293
|
* `model` 是本回合**实际**成功的模型(TurnOutcome.model):fallback 换环后与 args.model
|
|
288
|
-
* 不同 —— 成本估算与未定价探测按错模型算就是记错账(评审 2026-09-27
|
|
294
|
+
* 不同 —— 成本估算与未定价探测按错模型算就是记错账(评审 2026-09-27 ref-sink-failure-warn 的核心教训)。
|
|
289
295
|
*/
|
|
290
296
|
export function recordTurnUsage(ctx, turnId, message, model) {
|
|
291
297
|
const { args } = ctx;
|
|
@@ -356,6 +362,15 @@ export async function executeTurnTools(ctx, turnId, toolUses, overBudget) {
|
|
|
356
362
|
tool_use_ids: pending.map((u) => u.id),
|
|
357
363
|
tools: pending.map((u) => u.name),
|
|
358
364
|
});
|
|
365
|
+
// G7 护栏:审批在 trace 里**只是事件**(刻意不建 span —— 上游 `GuardrailSpanData`
|
|
366
|
+
// 只有 name / triggered 两个字段,造 span kind 等于往核心词汇表里加词)。但事件只有
|
|
367
|
+
// 解析 trace 才看得见,对外部 OTLP 消费者等于不存在 ⇒ 在**发起它的回合 span** 上再写
|
|
368
|
+
// 两个 additive 属性当「一眼可见的入口」,语义对齐上游那对字段。
|
|
369
|
+
// ⚠️ 两处**刻意的不对称**:① 只取**首个**待决工具名 —— 属性是标量,完整清单在事件的
|
|
370
|
+
// `tools[]` 里(属性是入口、事件是权威明细);② **只发 `true`,不设 `false`**
|
|
371
|
+
// (与 `gen_ai.conversation.compacted` 同款口径:没发生就根本不发这个键)。
|
|
372
|
+
args.recorder.setAttribute(turnId, 'agentia.guardrail.name', pending[0].name);
|
|
373
|
+
args.recorder.setAttribute(turnId, 'agentia.guardrail.triggered', true);
|
|
359
374
|
return { kind: 'suspended', pending: pending.map((u) => u.id) };
|
|
360
375
|
}
|
|
361
376
|
}
|