@migor/agentia 0.10.2 → 0.10.4
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 +969 -64
- package/LICENSE +1 -1
- package/README.en.md +93 -38
- package/README.md +105 -218
- package/dist/AGENTS.md +234 -41
- 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-sink.d.ts +8 -0
- package/dist/core/trace-sink.js +24 -0
- package/dist/core/trace-sink.js.map +1 -0
- package/dist/core/trace.d.ts +12 -2
- 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 +3 -3
- package/dist/engine/loop.js +99 -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 +17 -2
- package/dist/engine/mcp-server.js +42 -17
- 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 +13 -5
- package/dist/engine/types.js +1 -0
- package/dist/engine/types.js.map +1 -1
- package/dist/eval/export.js +2 -2
- package/dist/eval/export.js.map +1 -1
- package/dist/eval/harvest.d.ts +4 -1
- package/dist/eval/harvest.js +32 -6
- package/dist/eval/harvest.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.js +5 -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 +0 -16
- package/dist/integrations/file-sink.js +24 -6
- package/dist/integrations/file-sink.js.map +1 -1
- 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 +91 -50
- 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 +17 -6
- 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/runtime/run.d.ts +1 -1
- package/dist/runtime/run.js +19 -17
- package/dist/runtime/run.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 +43 -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/discover.js +27 -1
- package/dist/toolkit/discover.js.map +1 -1
- package/dist/toolkit/module.js +183 -50
- 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.d.ts +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/serve.d.ts +92 -0
- package/dist/transport/serve.js +155 -0
- package/dist/transport/serve.js.map +1 -0
- 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 +23 -10
package/dist/core/limits.d.ts
CHANGED
|
@@ -142,6 +142,22 @@ export declare const LIMIT_SEMANTICS: readonly [{
|
|
|
142
142
|
readonly zeroClause: '0 = 不重试';
|
|
143
143
|
readonly badValue: 'throws';
|
|
144
144
|
readonly note: '坏值必须响亮失败:判定是 `attempt >= maxRetries` ⇒ `NaN` 比较恒假、`Infinity` 永远达不到,两者都是**无限重试**(429 场景下每一次都是真金白银);`-1` 静默变成「不重试」;`1.5` 实际只允许 1 次。';
|
|
145
|
+
}, {
|
|
146
|
+
readonly knob: 'RetryOptions.maxAttempts';
|
|
147
|
+
readonly where: 'engine/retry.ts(resolveRetry)';
|
|
148
|
+
readonly unit: 'count';
|
|
149
|
+
readonly zero: 'disabled';
|
|
150
|
+
readonly zeroClause: '0 = 关闭重试';
|
|
151
|
+
readonly badValue: 'throws';
|
|
152
|
+
readonly note: '含首次尝试(1 = 只试一次不重试)。⚠️ 2026-10-13 深评 A1 补登 + 补校验:`maxAttempts: NaN` 曾让 `!(NaN >= 1)` 成立 ⇒ 重试被**静默关闭**,run 根快照记 `config.retry.maxAttempts: 0`,看着像用户主动关的;与 client 层 maxRetries 同纪律改为 `resolveRetry` 抛 TypeError(runAgent 入口另有一次同款校验,配置错不收成「失败的 run」)。';
|
|
153
|
+
}, {
|
|
154
|
+
readonly knob: 'RetryOptions.jitter';
|
|
155
|
+
readonly where: 'engine/retry.ts(resolveRetry)';
|
|
156
|
+
readonly unit: 'n/a';
|
|
157
|
+
readonly zero: 'disabled';
|
|
158
|
+
readonly zeroClause: '0 = 不加抖动';
|
|
159
|
+
readonly badValue: 'throws';
|
|
160
|
+
readonly note: '抖动比例 0~1。>1 会把退避拉成负数再被 `Math.max(0, …)` 静默钳回 0(抖动与退避一起失效,429 场景变热重试);NaN 让退避算成 NaN。2026-10-13 深评 A1 补登。';
|
|
145
161
|
}, {
|
|
146
162
|
readonly knob: 'maxEventChars';
|
|
147
163
|
readonly where: 'engine/tool-events.ts';
|
|
@@ -198,6 +214,22 @@ export declare const LIMIT_SEMANTICS: readonly [{
|
|
|
198
214
|
readonly zeroClause: '0 = 立即导出';
|
|
199
215
|
readonly badValue: 'none';
|
|
200
216
|
readonly note: '⚠️ **同名反义**:`Scheduler.every` 的 `intervalMs: 0` 是**配置错误**(抛错),这里却是「关掉定时器、每次累加后立即导出」。两个同名旋钮两种读法 —— 改任何一个之前先看这张表。';
|
|
217
|
+
}, {
|
|
218
|
+
readonly knob: 'RetryOptions.baseDelayMs';
|
|
219
|
+
readonly where: 'engine/retry.ts(resolveRetry)';
|
|
220
|
+
readonly unit: 'ms';
|
|
221
|
+
readonly zero: 'immediate';
|
|
222
|
+
readonly zeroClause: '0 = 不退避(立即重试)';
|
|
223
|
+
readonly badValue: 'throws';
|
|
224
|
+
readonly note: '⚠️ 2026-10-13 深评 A1 补登 + 补校验:`baseDelayMs: NaN` 让 backoffDelay 算出 NaN ⇒ `interruptibleSleep` 的 `assertTimerDelay` 抛 RangeError —— 它曾被 turn.ts 退避处的裸 `catch` 吞成「用户取消」(配置错被谎报成取消,实测 `retry:{baseDelayMs:NaN}` + 429 → stopReason:aborted)。超 2^31-1ms 同理拒(Node 钳到 1ms ⇒ 热重试;上限单源 core/timeout.ts)。';
|
|
225
|
+
}, {
|
|
226
|
+
readonly knob: 'RetryOptions.maxDelayMs';
|
|
227
|
+
readonly where: 'engine/retry.ts(resolveRetry)';
|
|
228
|
+
readonly unit: 'ms';
|
|
229
|
+
readonly zero: 'immediate';
|
|
230
|
+
readonly zeroClause: '0 = 退避封顶为零(立即重试)';
|
|
231
|
+
readonly badValue: 'throws';
|
|
232
|
+
readonly note: '同 baseDelayMs:NaN 穿透 `Math.min` 让封顶失效(`Math.min(x, NaN)` = NaN);超上限被 Node 钳到 1ms。2026-10-13 深评 A1 补登。⚠️ 正向抖动可能把最终退避推过 maxDelayMs(±jitter 是有意的),但 `backoffDelay` 会把它夹在 2^31-1ms 以内,sleep 不会因此抛。';
|
|
201
233
|
}, {
|
|
202
234
|
readonly knob: 'BudgetGuardOptions.maxTotalTokens';
|
|
203
235
|
readonly where: 'engine/budget.ts(createBudgetGuard;由 RunAgentOptions.maxTotalTokens 传进来)';
|
|
@@ -325,7 +357,7 @@ export declare const LIMIT_SEMANTICS: readonly [{
|
|
|
325
357
|
readonly zero: 'invalid';
|
|
326
358
|
readonly zeroClause: '0 = 一个标签组合都认不下,全折进一个桶';
|
|
327
359
|
readonly badValue: 'throws';
|
|
328
|
-
readonly note: '**组合数**上限(2026-09-27
|
|
360
|
+
readonly note: '**组合数**上限(2026-09-27 ref-menu-drift-signals 补的第四条基数上限)。`maxLabelValues` 只封每个键的**值域**,而进内存的是组合,数量是叉乘 `(maxLabelValues+1)^labelKeys.length` —— 缺省 100 × 3 键就是一百万条,且每键的 dropped 计数看不见它。与另外三道同款:超限折进一个全 `__other__` 的桶(量不丢),折叠数见 `droppedLabelCombos` / `dropped_keys{kind="label:combos"}`。';
|
|
329
361
|
}];
|
|
330
362
|
/** 表里全部旋钮的标识(用例按它建穷尽表:少一项 `typecheck:tests` 就红) */
|
|
331
363
|
export type LimitKnob = (typeof LIMIT_SEMANTICS)[number]['knob'];
|
package/dist/core/limits.js
CHANGED
|
@@ -105,6 +105,24 @@ export const LIMIT_SEMANTICS = [
|
|
|
105
105
|
badValue: 'throws',
|
|
106
106
|
note: '坏值必须响亮失败:判定是 `attempt >= maxRetries` ⇒ `NaN` 比较恒假、`Infinity` 永远达不到,两者都是**无限重试**(429 场景下每一次都是真金白银);`-1` 静默变成「不重试」;`1.5` 实际只允许 1 次。',
|
|
107
107
|
},
|
|
108
|
+
{
|
|
109
|
+
knob: 'RetryOptions.maxAttempts',
|
|
110
|
+
where: 'engine/retry.ts(resolveRetry)',
|
|
111
|
+
unit: 'count',
|
|
112
|
+
zero: 'disabled',
|
|
113
|
+
zeroClause: '0 = 关闭重试',
|
|
114
|
+
badValue: 'throws',
|
|
115
|
+
note: '含首次尝试(1 = 只试一次不重试)。⚠️ 2026-10-13 深评 A1 补登 + 补校验:`maxAttempts: NaN` 曾让 `!(NaN >= 1)` 成立 ⇒ 重试被**静默关闭**,run 根快照记 `config.retry.maxAttempts: 0`,看着像用户主动关的;与 client 层 maxRetries 同纪律改为 `resolveRetry` 抛 TypeError(runAgent 入口另有一次同款校验,配置错不收成「失败的 run」)。',
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
knob: 'RetryOptions.jitter',
|
|
119
|
+
where: 'engine/retry.ts(resolveRetry)',
|
|
120
|
+
unit: 'n/a',
|
|
121
|
+
zero: 'disabled',
|
|
122
|
+
zeroClause: '0 = 不加抖动',
|
|
123
|
+
badValue: 'throws',
|
|
124
|
+
note: '抖动比例 0~1。>1 会把退避拉成负数再被 `Math.max(0, …)` 静默钳回 0(抖动与退避一起失效,429 场景变热重试);NaN 让退避算成 NaN。2026-10-13 深评 A1 补登。',
|
|
125
|
+
},
|
|
108
126
|
{
|
|
109
127
|
knob: 'maxEventChars',
|
|
110
128
|
where: 'engine/tool-events.ts',
|
|
@@ -169,6 +187,24 @@ export const LIMIT_SEMANTICS = [
|
|
|
169
187
|
badValue: 'none',
|
|
170
188
|
note: '⚠️ **同名反义**:`Scheduler.every` 的 `intervalMs: 0` 是**配置错误**(抛错),这里却是「关掉定时器、每次累加后立即导出」。两个同名旋钮两种读法 —— 改任何一个之前先看这张表。',
|
|
171
189
|
},
|
|
190
|
+
{
|
|
191
|
+
knob: 'RetryOptions.baseDelayMs',
|
|
192
|
+
where: 'engine/retry.ts(resolveRetry)',
|
|
193
|
+
unit: 'ms',
|
|
194
|
+
zero: 'immediate',
|
|
195
|
+
zeroClause: '0 = 不退避(立即重试)',
|
|
196
|
+
badValue: 'throws',
|
|
197
|
+
note: '⚠️ 2026-10-13 深评 A1 补登 + 补校验:`baseDelayMs: NaN` 让 backoffDelay 算出 NaN ⇒ `interruptibleSleep` 的 `assertTimerDelay` 抛 RangeError —— 它曾被 turn.ts 退避处的裸 `catch` 吞成「用户取消」(配置错被谎报成取消,实测 `retry:{baseDelayMs:NaN}` + 429 → stopReason:aborted)。超 2^31-1ms 同理拒(Node 钳到 1ms ⇒ 热重试;上限单源 core/timeout.ts)。',
|
|
198
|
+
},
|
|
199
|
+
{
|
|
200
|
+
knob: 'RetryOptions.maxDelayMs',
|
|
201
|
+
where: 'engine/retry.ts(resolveRetry)',
|
|
202
|
+
unit: 'ms',
|
|
203
|
+
zero: 'immediate',
|
|
204
|
+
zeroClause: '0 = 退避封顶为零(立即重试)',
|
|
205
|
+
badValue: 'throws',
|
|
206
|
+
note: '同 baseDelayMs:NaN 穿透 `Math.min` 让封顶失效(`Math.min(x, NaN)` = NaN);超上限被 Node 钳到 1ms。2026-10-13 深评 A1 补登。⚠️ 正向抖动可能把最终退避推过 maxDelayMs(±jitter 是有意的),但 `backoffDelay` 会把它夹在 2^31-1ms 以内,sleep 不会因此抛。',
|
|
207
|
+
},
|
|
172
208
|
{
|
|
173
209
|
knob: 'BudgetGuardOptions.maxTotalTokens',
|
|
174
210
|
where: 'engine/budget.ts(createBudgetGuard;由 RunAgentOptions.maxTotalTokens 传进来)',
|
|
@@ -312,7 +348,7 @@ export const LIMIT_SEMANTICS = [
|
|
|
312
348
|
zero: 'invalid',
|
|
313
349
|
zeroClause: '0 = 一个标签组合都认不下,全折进一个桶',
|
|
314
350
|
badValue: 'throws',
|
|
315
|
-
note: '**组合数**上限(2026-09-27
|
|
351
|
+
note: '**组合数**上限(2026-09-27 ref-menu-drift-signals 补的第四条基数上限)。`maxLabelValues` 只封每个键的**值域**,而进内存的是组合,数量是叉乘 `(maxLabelValues+1)^labelKeys.length` —— 缺省 100 × 3 键就是一百万条,且每键的 dropped 计数看不见它。与另外三道同款:超限折进一个全 `__other__` 的桶(量不丢),折叠数见 `droppedLabelCombos` / `dropped_keys{kind="label:combos"}`。',
|
|
316
352
|
},
|
|
317
353
|
];
|
|
318
354
|
/** 按旋钮取那行(拼错旋钮名 = 编译期报错,不是运行期 undefined) */
|
package/dist/core/limits.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"limits.js","sourceRoot":"","sources":["../../src/core/limits.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"limits.js","sourceRoot":"","sources":["../../src/core/limits.ts"],"names":[],"mappings":"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"}
|
package/dist/core/run.d.ts
CHANGED
|
@@ -10,7 +10,7 @@ import type { SpanError } from './trace.js';
|
|
|
10
10
|
* 收尾释放)、`resumePending` 不捡走(它不是孤儿,崩溃续跑语义不适用于「在等」);
|
|
11
11
|
* 消息历史(含未决 tool_use)与待决清单随 TaskRecord 落库。
|
|
12
12
|
*
|
|
13
|
-
* 「挂起」是**一个状态 + 一个原因**(2026-09-28
|
|
13
|
+
* 「挂起」是**一个状态 + 一个原因**(2026-09-28 ref-suspend-state-reason:从前 `awaiting_approval` 一个状态兼职
|
|
14
14
|
* 两件事):状态只说「它在等」,等什么由 `SuspendedReason` 说 —— 判据(审批超时 / 能否
|
|
15
15
|
* 审批)落在**原因**上,于是「时间挂起被审批超时提前叫醒」这类误伤在类型上就写不出来。
|
|
16
16
|
*/
|
|
@@ -41,7 +41,7 @@ export type SuspendedReason = 'approval' | 'timer';
|
|
|
41
41
|
/** 该状态是否已到终态(不会再变)。判定只此一处 —— 别在调用点重写。 */
|
|
42
42
|
export declare function isTerminalStatus(status: RunStatus): boolean;
|
|
43
43
|
/**
|
|
44
|
-
* run 事件(2026-09-28
|
|
44
|
+
* run 事件(2026-09-28 ref-run-event-input,run 事件投入口):外部系统投给一条**挂起** run 的一条输入
|
|
45
45
|
* (`AsyncRunner.signalTask` / `POST /tasks/:id/events`;审批是它的特例)。
|
|
46
46
|
*
|
|
47
47
|
* 白名单形状(设计稿 B1):**全是字符串** —— 外部永远不能构造消息块,投毒面只到
|
package/dist/core/timeout.d.ts
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* 为什么在 core:engine 的工具级超时(`engine/turn.ts`)与桥的 MCP 调用超时
|
|
5
5
|
* (`integrations/mcp.ts`)**必须共用同一套判定**。此前两处各写一份,代价是
|
|
6
6
|
* 2026-09-14 的「硬保证」收紧只落进了 `engine/concurrency.ts`,桥那一份继续用竞速判定 ——
|
|
7
|
-
* 同一个承诺两套实现,于是同一个事件在 trace 里能有两种账(见 `docs/spec.md` §10 2026-09-17
|
|
7
|
+
* 同一个承诺两套实现,于是同一个事件在 trace 里能有两种账(见 `docs/spec.md` §10 2026-09-17 ref-mcp-timeout-single-source)。
|
|
8
8
|
* `integrations` 只能依赖 core(`tests/architecture/layering.test.ts` 强制),
|
|
9
9
|
* 所以单源的落点是 core。core 是叶子:本文件只 import `limits.js`(**纯数据表,零 import**)
|
|
10
10
|
* —— 2026-09-28 起它要 `zeroClauseOf`:两处 `assertTimerDelay` 的文案必须与 limits 表同源
|
|
@@ -26,7 +26,7 @@ export declare const TIMED_OUT: unique symbol;
|
|
|
26
26
|
* `withTimeout`(引擎 `toolTimeoutMs`)、`interruptibleSleep`(退避)、
|
|
27
27
|
* `DrainGate.waitForIdle`(drain 预算)、`#raceTimeout`(`runTimeoutMs`)、
|
|
28
28
|
* `composeSignal`(client `timeout`)五处都直喂 `setTimeout` 且只查「非负有限」。
|
|
29
|
-
* 单源收在这里(见 `docs/spec.md` §10 2026-09-28
|
|
29
|
+
* 单源收在这里(见 `docs/spec.md` §10 2026-09-28 ref-timer-cap-single-source)。
|
|
30
30
|
*/
|
|
31
31
|
export declare const MAX_TIMER_DELAY_MS = 2147483647;
|
|
32
32
|
/**
|
|
@@ -58,7 +58,7 @@ export declare function clampTimerDelay(ms: number): number;
|
|
|
58
58
|
* 为什么需要它:超时此前只能靠**错误文案**辨认 —— 桥抛的是普通 `Error`,而
|
|
59
59
|
* `classifyError` 里没有 timeout 这一类,于是 trace 里记成 `error(unknown)` +
|
|
60
60
|
* `errorKind=threw`,与引擎自己判的超时(`error(timeout)` + `errorKind=timeout`)
|
|
61
|
-
* 成为同一事件的**两种账**(见 `docs/spec.md` §10 2026-09-17
|
|
61
|
+
* 成为同一事件的**两种账**(见 `docs/spec.md` §10 2026-09-17 ref-mcp-timeout-single-source)。
|
|
62
62
|
*
|
|
63
63
|
* 判定契约(对使用者可见):**任何** `code === 'timeout'` 的错误都会被引擎归为
|
|
64
64
|
* `errorKind='timeout'`,不需要 import 这个类(`isTimeoutError` 也认鸭子类型)。
|
|
@@ -87,7 +87,7 @@ export declare function abortError(message?: string): Error;
|
|
|
87
87
|
*
|
|
88
88
|
* 为什么第 3 条也算:`engine/errors.ts` 的分类**此前只有它**认这一条(当时把超时归进 `connection`),
|
|
89
89
|
* 于是「超时」在 trace 里混在「连不上」里,看板与 `trace-diff` 分不出两者。现在超时有自己的
|
|
90
|
-
* `type: 'timeout'`,这条判据由分类与工具级记账**共用**,口径一致(spec §10 2026-09-17
|
|
90
|
+
* `type: 'timeout'`,这条判据由分类与工具级记账**共用**,口径一致(spec §10 2026-09-17 ref-timeout-error-type)。
|
|
91
91
|
*/
|
|
92
92
|
export declare function isTimeoutError(e: unknown): boolean;
|
|
93
93
|
/**
|
|
@@ -128,7 +128,7 @@ export declare function withTimeout<T>(p: Promise<T>, timeoutMs: number): Promis
|
|
|
128
128
|
* 不必再等)与 `integrations/anthropic.ts` 的 `interruptibleSleep`(client 层退避)。
|
|
129
129
|
* 那边此前自带一段「与 engine/retry.ts 的 sleep 同语义但不复用它 —— 分层约束:
|
|
130
130
|
* integrations 只能依赖 core」的注解:**正是那条约束把两份代码逼成了重复**,
|
|
131
|
-
* 所以下沉到 core 是让它们合一的唯一合法落点(见 spec §10 2026-09-17
|
|
131
|
+
* 所以下沉到 core 是让它们合一的唯一合法落点(见 spec §10 2026-09-17 ref-mcp-timeout-single-source 的单源化口径)。
|
|
132
132
|
*
|
|
133
133
|
* ⚠️ 「不合并退避计算器」的例外只针对**引擎层**:`engine/retry.ts` 的 `backoffDelay`
|
|
134
134
|
* 是 ±20% 均匀抖动、底数/上限来自 `RetryOptions`,与 client 层策略不同(见下方
|
package/dist/core/timeout.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* 为什么在 core:engine 的工具级超时(`engine/turn.ts`)与桥的 MCP 调用超时
|
|
5
5
|
* (`integrations/mcp.ts`)**必须共用同一套判定**。此前两处各写一份,代价是
|
|
6
6
|
* 2026-09-14 的「硬保证」收紧只落进了 `engine/concurrency.ts`,桥那一份继续用竞速判定 ——
|
|
7
|
-
* 同一个承诺两套实现,于是同一个事件在 trace 里能有两种账(见 `docs/spec.md` §10 2026-09-17
|
|
7
|
+
* 同一个承诺两套实现,于是同一个事件在 trace 里能有两种账(见 `docs/spec.md` §10 2026-09-17 ref-mcp-timeout-single-source)。
|
|
8
8
|
* `integrations` 只能依赖 core(`tests/architecture/layering.test.ts` 强制),
|
|
9
9
|
* 所以单源的落点是 core。core 是叶子:本文件只 import `limits.js`(**纯数据表,零 import**)
|
|
10
10
|
* —— 2026-09-28 起它要 `zeroClauseOf`:两处 `assertTimerDelay` 的文案必须与 limits 表同源
|
|
@@ -27,7 +27,7 @@ export const TIMED_OUT = Symbol('agentia.timed-out');
|
|
|
27
27
|
* `withTimeout`(引擎 `toolTimeoutMs`)、`interruptibleSleep`(退避)、
|
|
28
28
|
* `DrainGate.waitForIdle`(drain 预算)、`#raceTimeout`(`runTimeoutMs`)、
|
|
29
29
|
* `composeSignal`(client `timeout`)五处都直喂 `setTimeout` 且只查「非负有限」。
|
|
30
|
-
* 单源收在这里(见 `docs/spec.md` §10 2026-09-28
|
|
30
|
+
* 单源收在这里(见 `docs/spec.md` §10 2026-09-28 ref-timer-cap-single-source)。
|
|
31
31
|
*/
|
|
32
32
|
export const MAX_TIMER_DELAY_MS = 2_147_483_647;
|
|
33
33
|
/**
|
|
@@ -74,7 +74,7 @@ export function clampTimerDelay(ms) {
|
|
|
74
74
|
* 为什么需要它:超时此前只能靠**错误文案**辨认 —— 桥抛的是普通 `Error`,而
|
|
75
75
|
* `classifyError` 里没有 timeout 这一类,于是 trace 里记成 `error(unknown)` +
|
|
76
76
|
* `errorKind=threw`,与引擎自己判的超时(`error(timeout)` + `errorKind=timeout`)
|
|
77
|
-
* 成为同一事件的**两种账**(见 `docs/spec.md` §10 2026-09-17
|
|
77
|
+
* 成为同一事件的**两种账**(见 `docs/spec.md` §10 2026-09-17 ref-mcp-timeout-single-source)。
|
|
78
78
|
*
|
|
79
79
|
* 判定契约(对使用者可见):**任何** `code === 'timeout'` 的错误都会被引擎归为
|
|
80
80
|
* `errorKind='timeout'`,不需要 import 这个类(`isTimeoutError` 也认鸭子类型)。
|
|
@@ -108,7 +108,7 @@ export function abortError(message = '已被取消') {
|
|
|
108
108
|
*
|
|
109
109
|
* 为什么第 3 条也算:`engine/errors.ts` 的分类**此前只有它**认这一条(当时把超时归进 `connection`),
|
|
110
110
|
* 于是「超时」在 trace 里混在「连不上」里,看板与 `trace-diff` 分不出两者。现在超时有自己的
|
|
111
|
-
* `type: 'timeout'`,这条判据由分类与工具级记账**共用**,口径一致(spec §10 2026-09-17
|
|
111
|
+
* `type: 'timeout'`,这条判据由分类与工具级记账**共用**,口径一致(spec §10 2026-09-17 ref-timeout-error-type)。
|
|
112
112
|
*/
|
|
113
113
|
export function isTimeoutError(e) {
|
|
114
114
|
if (e instanceof TimeoutError)
|
|
@@ -199,7 +199,7 @@ export async function withTimeout(p, timeoutMs) {
|
|
|
199
199
|
* 不必再等)与 `integrations/anthropic.ts` 的 `interruptibleSleep`(client 层退避)。
|
|
200
200
|
* 那边此前自带一段「与 engine/retry.ts 的 sleep 同语义但不复用它 —— 分层约束:
|
|
201
201
|
* integrations 只能依赖 core」的注解:**正是那条约束把两份代码逼成了重复**,
|
|
202
|
-
* 所以下沉到 core 是让它们合一的唯一合法落点(见 spec §10 2026-09-17
|
|
202
|
+
* 所以下沉到 core 是让它们合一的唯一合法落点(见 spec §10 2026-09-17 ref-mcp-timeout-single-source 的单源化口径)。
|
|
203
203
|
*
|
|
204
204
|
* ⚠️ 「不合并退避计算器」的例外只针对**引擎层**:`engine/retry.ts` 的 `backoffDelay`
|
|
205
205
|
* 是 ±20% 均匀抖动、底数/上限来自 `RetryOptions`,与 client 层策略不同(见下方
|
package/dist/core/tool.d.ts
CHANGED
|
@@ -155,7 +155,7 @@ export interface ToolRunContext {
|
|
|
155
155
|
*
|
|
156
156
|
* 存在的意义是**划定裁判权**:工具(尤其带自己计时器的桥,见 `integrations/mcp.ts`)
|
|
157
157
|
* 据此知道「这次调用的超时由引擎判」,从而不再启动第二个计时器 —— 两个计时器判同一件事,
|
|
158
|
-
* 只会得到两种账(桥那份曾被记成 `error(unknown)` + `errorKind=threw`,见 spec §10 2026-09-17
|
|
158
|
+
* 只会得到两种账(桥那份曾被记成 `error(unknown)` + `errorKind=threw`,见 spec §10 2026-09-17 ref-mcp-timeout-single-source)。
|
|
159
159
|
*
|
|
160
160
|
* ⚠️ 它是本次调用的**配置值**,不是「剩余时间」。
|
|
161
161
|
*/
|
|
@@ -193,7 +193,7 @@ export interface ToolRunContext {
|
|
|
193
193
|
*/
|
|
194
194
|
approval?: ApprovalDecision;
|
|
195
195
|
/**
|
|
196
|
-
* 「现在还不是时候,T 之后再问我」(durable timer,2026-09-28
|
|
196
|
+
* 「现在还不是时候,T 之后再问我」(durable timer,2026-09-28 ref-suspend-state-reason 的 timer 侧)。
|
|
197
197
|
* 工具在执行期调用它 = 请求**本回合到此为止**:引擎丢弃本回合这批工具的结果、
|
|
198
198
|
* 把整批 tool_use 挂起(`stopReason: 'suspended'` + `suspendedReason: 'timer'` +
|
|
199
199
|
* 目标时刻 `wakeAt`),到点后由宿主续跑并**重跑这一批**(与审批续跑的形态一致)。
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Trace, TraceSink } from './trace.js';
|
|
2
|
+
/** 单个 sink 的默认等待上限;超时只放弃等待,不取消底层导出。 */
|
|
3
|
+
export declare const TRACE_SINK_TIMEOUT_MS = 10000;
|
|
4
|
+
/**
|
|
5
|
+
* 顺序投递 trace。抛错与超时都只告警,不击穿业务;后续 sink 仍照常接收。
|
|
6
|
+
* module 级 export 供 runtime / MCP 反向桥共用,刻意不进公共导出面。
|
|
7
|
+
*/
|
|
8
|
+
export declare function flushTraceSinks(sinks: readonly TraceSink[] | undefined, trace: Trace, timeoutMs?: number): Promise<void>;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { TIMED_OUT, withTimeout } from './timeout.js';
|
|
2
|
+
/** 单个 sink 的默认等待上限;超时只放弃等待,不取消底层导出。 */
|
|
3
|
+
export const TRACE_SINK_TIMEOUT_MS = 10_000;
|
|
4
|
+
/**
|
|
5
|
+
* 顺序投递 trace。抛错与超时都只告警,不击穿业务;后续 sink 仍照常接收。
|
|
6
|
+
* module 级 export 供 runtime / MCP 反向桥共用,刻意不进公共导出面。
|
|
7
|
+
*/
|
|
8
|
+
export async function flushTraceSinks(sinks, trace, timeoutMs = TRACE_SINK_TIMEOUT_MS) {
|
|
9
|
+
if (!sinks || sinks.length === 0)
|
|
10
|
+
return;
|
|
11
|
+
for (const sink of sinks) {
|
|
12
|
+
try {
|
|
13
|
+
const delivery = Promise.resolve().then(() => sink.export(trace));
|
|
14
|
+
const outcome = await withTimeout(delivery, timeoutMs);
|
|
15
|
+
if (outcome === TIMED_OUT) {
|
|
16
|
+
console.warn(`[agentia] trace sink 投递超时(${timeoutMs}ms),已放弃等待(不取消底层导出)`);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
catch (e) {
|
|
20
|
+
console.warn('[agentia] trace sink 投递失败:', e instanceof Error ? e.message : e);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=trace-sink.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trace-sink.js","sourceRoot":"","sources":["../../src/core/trace-sink.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEtD,uCAAuC;AACvC,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAC;AAE5C;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,KAAuC,EACvC,KAAY,EACZ,SAAS,GAAG,qBAAqB;IAEjC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IACzC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAClE,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;YACvD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC1B,OAAO,CAAC,IAAI,CACV,6BAA6B,SAAS,oBAAoB,CAC3D,CAAC;YACJ,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,IAAI,CAAC,4BAA4B,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjF,CAAC;IACH,CAAC;AACH,CAAC"}
|
package/dist/core/trace.d.ts
CHANGED
|
@@ -51,6 +51,15 @@ export declare const TOOL_OUTPUT_EVENT = "tool.output";
|
|
|
51
51
|
* **替身值**(不是读数)—— 成本估算会把它读成「真的花了 0」,`maxCostUsd` 因此静默失效。
|
|
52
52
|
*/
|
|
53
53
|
export declare const USAGE_MISSING_EVENT = "usage.missing";
|
|
54
|
+
/**
|
|
55
|
+
* 「上下文策略在本回合开始前**真的压缩了**历史」事件名(body 带 `{ from, to, model }`)。
|
|
56
|
+
*
|
|
57
|
+
* 记账点在 `engine/turn.ts` 的回合入口检查(压缩发生时本回合的 llm.turn span 还不存在,
|
|
58
|
+
* 故事件记在回合的**父** span 上);消费方是 `integrations/otlp.ts`
|
|
59
|
+
* (映射 `gen_ai.conversation.compacted`)。与 `TOOL_INPUT_EVENT` 同因单源:
|
|
60
|
+
* 跨 engine → integrations 的名字各写一份就是静默归零。
|
|
61
|
+
*/
|
|
62
|
+
export declare const CONTEXT_BUDGET_EVENT = "context.budget";
|
|
54
63
|
/** 工具 I/O 事件名的联合 —— `eval/export.ts` 的工具事件过滤器按它取参数 */
|
|
55
64
|
export type ToolIoEventName = typeof TOOL_INPUT_EVENT | typeof TOOL_OUTPUT_EVENT;
|
|
56
65
|
/**
|
|
@@ -127,7 +136,7 @@ export declare function wireSpanId(id: string): string;
|
|
|
127
136
|
* (采样闸门要看完好整棵 trace 才判得出来),而出站调用发生在**运行期** ——
|
|
128
137
|
* 那时「这条 trace 会不会被采样掉」还没有答案。所以恒 `00` 是唯一不撒谎的选择
|
|
129
138
|
* (`00` = 不声明「已采样」);编一个 `01` 是替下游做决定。⚠️ 别下一轮「顺手」改成跟随采样
|
|
130
|
-
* (见 `docs/spec.md` §10 2026-09-21
|
|
139
|
+
* (见 `docs/spec.md` §10 2026-09-21 ref-cost-sampling)。入站侧 `parseTraceparent` 也从不读 flags。
|
|
131
140
|
*
|
|
132
141
|
* 调用方保证给的是内部 id 或线缆 id(本函数只做投影,不做合法性判定)。
|
|
133
142
|
*/
|
|
@@ -201,7 +210,8 @@ export declare function attachScore(trace: Trace, score: Score): void;
|
|
|
201
210
|
export declare function capabilityKindOf(span: Span): string;
|
|
202
211
|
/**
|
|
203
212
|
* trace 出口:run 收尾(成功或失败)后,框架把【完整 Trace】交给每个 sink。
|
|
204
|
-
* sink
|
|
213
|
+
* sink 抛错或永久挂起都不影响 run 结果:抛错告警,超过默认 10 秒则告警并放弃等待;
|
|
214
|
+
* 放弃不等于取消底层导出,后续 sink 仍照常接收。
|
|
205
215
|
* 形状与 OtlpExporter 一致 —— createOtlpExporter() 的返回值天然满足本接口。
|
|
206
216
|
*/
|
|
207
217
|
export interface TraceSink {
|
package/dist/core/trace.js
CHANGED
|
@@ -28,6 +28,15 @@ export const TOOL_OUTPUT_EVENT = 'tool.output';
|
|
|
28
28
|
* **替身值**(不是读数)—— 成本估算会把它读成「真的花了 0」,`maxCostUsd` 因此静默失效。
|
|
29
29
|
*/
|
|
30
30
|
export const USAGE_MISSING_EVENT = 'usage.missing';
|
|
31
|
+
/**
|
|
32
|
+
* 「上下文策略在本回合开始前**真的压缩了**历史」事件名(body 带 `{ from, to, model }`)。
|
|
33
|
+
*
|
|
34
|
+
* 记账点在 `engine/turn.ts` 的回合入口检查(压缩发生时本回合的 llm.turn span 还不存在,
|
|
35
|
+
* 故事件记在回合的**父** span 上);消费方是 `integrations/otlp.ts`
|
|
36
|
+
* (映射 `gen_ai.conversation.compacted`)。与 `TOOL_INPUT_EVENT` 同因单源:
|
|
37
|
+
* 跨 engine → integrations 的名字各写一份就是静默归零。
|
|
38
|
+
*/
|
|
39
|
+
export const CONTEXT_BUDGET_EVENT = 'context.budget';
|
|
31
40
|
/** W3C traceparent:`<2位版本>-<32位trace>-<16位span>-<2位flags>`,全小写 hex */
|
|
32
41
|
const TRACEPARENT_RE = /^([0-9a-f]{2})-([0-9a-f]{32})-([0-9a-f]{16})-([0-9a-f]{2})$/;
|
|
33
42
|
/**
|
|
@@ -80,7 +89,7 @@ export function wireSpanId(id) {
|
|
|
80
89
|
* (采样闸门要看完好整棵 trace 才判得出来),而出站调用发生在**运行期** ——
|
|
81
90
|
* 那时「这条 trace 会不会被采样掉」还没有答案。所以恒 `00` 是唯一不撒谎的选择
|
|
82
91
|
* (`00` = 不声明「已采样」);编一个 `01` 是替下游做决定。⚠️ 别下一轮「顺手」改成跟随采样
|
|
83
|
-
* (见 `docs/spec.md` §10 2026-09-21
|
|
92
|
+
* (见 `docs/spec.md` §10 2026-09-21 ref-cost-sampling)。入站侧 `parseTraceparent` 也从不读 flags。
|
|
84
93
|
*
|
|
85
94
|
* 调用方保证给的是内部 id 或线缆 id(本函数只做投影,不做合法性判定)。
|
|
86
95
|
*/
|
package/dist/core/trace.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trace.js","sourceRoot":"","sources":["../../src/core/trace.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA+BH;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,YAAY,CAAC;AAC7C,MAAM,CAAC,MAAM,iBAAiB,GAAG,aAAa,CAAC;AAE/C;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"trace.js","sourceRoot":"","sources":["../../src/core/trace.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,7 +11,7 @@ export declare function mapWithConcurrency<T, R>(items: readonly T[], limit: num
|
|
|
11
11
|
/**
|
|
12
12
|
* 超时原语(`TIMED_OUT` 哨兵 + `withTimeout`)已**下沉到 `core/timeout.ts`**:
|
|
13
13
|
* 它与 `integrations/mcp.ts` 的 MCP 调用超时共用同一实现 —— 此前是两份,而
|
|
14
|
-
* 「超时是硬的」那次收紧只落进了这里,桥那份留在竞速判定上(见 `docs/spec.md` §10 2026-09-17
|
|
14
|
+
* 「超时是硬的」那次收紧只落进了这里,桥那份留在竞速判定上(见 `docs/spec.md` §10 2026-09-17 ref-mcp-timeout-single-source)。
|
|
15
15
|
*
|
|
16
16
|
* 这里**原样再导出**:`engine/turn.ts` 与既有测试的 import 路径与名字保持不变,
|
|
17
17
|
* 单源化对它们零影响。
|
|
@@ -35,7 +35,7 @@ export async function mapWithConcurrency(items, limit, fn) {
|
|
|
35
35
|
/**
|
|
36
36
|
* 超时原语(`TIMED_OUT` 哨兵 + `withTimeout`)已**下沉到 `core/timeout.ts`**:
|
|
37
37
|
* 它与 `integrations/mcp.ts` 的 MCP 调用超时共用同一实现 —— 此前是两份,而
|
|
38
|
-
* 「超时是硬的」那次收紧只落进了这里,桥那份留在竞速判定上(见 `docs/spec.md` §10 2026-09-17
|
|
38
|
+
* 「超时是硬的」那次收紧只落进了这里,桥那份留在竞速判定上(见 `docs/spec.md` §10 2026-09-17 ref-mcp-timeout-single-source)。
|
|
39
39
|
*
|
|
40
40
|
* 这里**原样再导出**:`engine/turn.ts` 与既有测试的 import 路径与名字保持不变,
|
|
41
41
|
* 单源化对它们零影响。
|
package/dist/engine/errors.d.ts
CHANGED
|
@@ -14,14 +14,14 @@ import type { SpanError } from '../core/trace.js';
|
|
|
14
14
|
/** 是否中断异常(DOMException / 普通 Error 都可能是,靠 name 判定) */
|
|
15
15
|
export declare function isAbortError(e: unknown): boolean;
|
|
16
16
|
/**
|
|
17
|
-
* 分类器**能产出的全部类别** —— 单一真源(2026-09-29
|
|
17
|
+
* 分类器**能产出的全部类别** —— 单一真源(2026-09-29 ref-soak-error-taxonomy)。
|
|
18
18
|
*
|
|
19
19
|
* 为什么需要这个常量:在此之前「到底有哪几类」只活在 `classifyError` 的字面量里,
|
|
20
20
|
* 任何想按类别表态的地方(浸泡验证的判据、看板、`trace-diff`)都只能**再手写一份清单**,
|
|
21
21
|
* 而漏一类的表现是**静默**的。实测过一次(就是加这个常量的原因):
|
|
22
22
|
* `scripts/e2e-soak.ts` 里手写的 `['api','server','rate_limit']` 漏了 `connection`,
|
|
23
23
|
* 默认 60 秒的跑法永远撞不到 —— 而 2 小时那轮(719 万 run / 811 万请求)撞到 **1 次**
|
|
24
|
-
* 就让整轮报红,红的是判据、不是被测的代码(spec §10 2026-09-29
|
|
24
|
+
* 就让整轮报红,红的是判据、不是被测的代码(spec §10 2026-09-29 ref-soak-error-taxonomy)。
|
|
25
25
|
*
|
|
26
26
|
* 消费方式:`Record<ErrorType, …>` 的**穷尽表** —— 加一类而不表态 ⇒ `TS2741`
|
|
27
27
|
* (与 `SUCCESS_STOP_REASON` / `KIND_SPEC` 同款护栏,见 `docs/guards.md`)。
|
package/dist/engine/errors.js
CHANGED
|
@@ -16,14 +16,14 @@ export function isAbortError(e) {
|
|
|
16
16
|
return typeof e === 'object' && e !== null && e.name === 'AbortError';
|
|
17
17
|
}
|
|
18
18
|
/**
|
|
19
|
-
* 分类器**能产出的全部类别** —— 单一真源(2026-09-29
|
|
19
|
+
* 分类器**能产出的全部类别** —— 单一真源(2026-09-29 ref-soak-error-taxonomy)。
|
|
20
20
|
*
|
|
21
21
|
* 为什么需要这个常量:在此之前「到底有哪几类」只活在 `classifyError` 的字面量里,
|
|
22
22
|
* 任何想按类别表态的地方(浸泡验证的判据、看板、`trace-diff`)都只能**再手写一份清单**,
|
|
23
23
|
* 而漏一类的表现是**静默**的。实测过一次(就是加这个常量的原因):
|
|
24
24
|
* `scripts/e2e-soak.ts` 里手写的 `['api','server','rate_limit']` 漏了 `connection`,
|
|
25
25
|
* 默认 60 秒的跑法永远撞不到 —— 而 2 小时那轮(719 万 run / 811 万请求)撞到 **1 次**
|
|
26
|
-
* 就让整轮报红,红的是判据、不是被测的代码(spec §10 2026-09-29
|
|
26
|
+
* 就让整轮报红,红的是判据、不是被测的代码(spec §10 2026-09-29 ref-soak-error-taxonomy)。
|
|
27
27
|
*
|
|
28
28
|
* 消费方式:`Record<ErrorType, …>` 的**穷尽表** —— 加一类而不表态 ⇒ `TS2741`
|
|
29
29
|
* (与 `SUCCESS_STOP_REASON` / `KIND_SPEC` 同款护栏,见 `docs/guards.md`)。
|
|
@@ -26,7 +26,7 @@ export interface AgentLoopResult<T = unknown> {
|
|
|
26
26
|
error: SpanError | undefined;
|
|
27
27
|
/** 本轮循环自己发起的模型往返次数 */
|
|
28
28
|
iterations: number;
|
|
29
|
-
/** submit_result
|
|
29
|
+
/** submit_result 校验通过的结构化结果;声明 schema 却未提交会以 result_missing 失败,未声明则为 undefined */
|
|
30
30
|
typed: T | undefined;
|
|
31
31
|
/**
|
|
32
32
|
* HITL 挂起(stopReason === 'suspended')时的完整消息历史
|
|
@@ -38,7 +38,7 @@ export interface AgentLoopResult<T = unknown> {
|
|
|
38
38
|
*/
|
|
39
39
|
pendingApprovals: string[] | undefined;
|
|
40
40
|
/**
|
|
41
|
-
* 挂起原因(`stopReason === 'suspended'` 时非空,2026-09-28
|
|
41
|
+
* 挂起原因(`stopReason === 'suspended'` 时非空,2026-09-28 ref-suspend-state-reason):
|
|
42
42
|
* `approval` = 等人工决定、`timer` = 等一个时刻。**由出口的调用方给** ——
|
|
43
43
|
* 出口自己不认识「为什么挂起」,它只保证这个位一定在场。
|
|
44
44
|
*/
|
|
@@ -53,7 +53,7 @@ export interface AgentLoopResult<T = unknown> {
|
|
|
53
53
|
*/
|
|
54
54
|
wakeAt: number | undefined;
|
|
55
55
|
/**
|
|
56
|
-
* 本段是否把传入的 `events`(run 事件投入口,2026-09-28
|
|
56
|
+
* 本段是否把传入的 `events`(run 事件投入口,2026-09-28 ref-run-event-input)**真注入了消息流**
|
|
57
57
|
* (字段在场)。宿主据此清 `TaskRecord.pendingEvents`:注入过 ⇒ 事件已在历史里,
|
|
58
58
|
* 簿记清掉(否则下次续跑会**重复注入**);没注入(续跑入口的再挂起出口在注入点
|
|
59
59
|
* 之前返回)⇒ 簿记必须留住,等跑通的那次。
|