@migor/agentia 0.6.1 → 0.6.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 +134 -1
- package/README.md +1 -1
- package/dist/AGENTS.md +46 -8
- package/dist/core/object.d.ts +21 -0
- package/dist/core/object.js +27 -0
- package/dist/core/object.js.map +1 -0
- package/dist/core/run.d.ts +11 -4
- package/dist/core/sse.d.ts +14 -0
- package/dist/core/sse.js +45 -0
- package/dist/core/sse.js.map +1 -0
- package/dist/core/stats.d.ts +18 -0
- package/dist/core/stats.js +24 -0
- package/dist/core/stats.js.map +1 -0
- package/dist/core/text.d.ts +19 -0
- package/dist/core/text.js +8 -0
- package/dist/core/text.js.map +1 -0
- package/dist/core/timeout.d.ts +38 -0
- package/dist/core/timeout.js +70 -0
- package/dist/core/timeout.js.map +1 -1
- package/dist/core/tool.d.ts +3 -3
- package/dist/core/trace.d.ts +55 -1
- package/dist/core/trace.js +43 -0
- package/dist/core/trace.js.map +1 -1
- package/dist/engine/budget.d.ts +3 -3
- package/dist/engine/concurrency.js +8 -1
- package/dist/engine/concurrency.js.map +1 -1
- package/dist/engine/loop.d.ts +22 -21
- package/dist/engine/loop.js +17 -1
- package/dist/engine/loop.js.map +1 -1
- package/dist/engine/replay.js.map +1 -1
- package/dist/engine/retry.d.ts +17 -2
- package/dist/engine/retry.js +41 -22
- package/dist/engine/retry.js.map +1 -1
- package/dist/engine/spec.d.ts +24 -2
- package/dist/engine/spec.js +19 -4
- package/dist/engine/spec.js.map +1 -1
- package/dist/engine/trace-diff.d.ts +3 -3
- package/dist/engine/tracer.d.ts +6 -1
- package/dist/engine/tracer.js +17 -2
- package/dist/engine/tracer.js.map +1 -1
- package/dist/engine/trimming.d.ts +3 -1
- package/dist/engine/trimming.js +32 -6
- package/dist/engine/trimming.js.map +1 -1
- package/dist/engine/turn.d.ts +26 -17
- package/dist/engine/turn.js +24 -15
- package/dist/engine/turn.js.map +1 -1
- package/dist/engine/types.d.ts +10 -3
- package/dist/eval/defineEval.d.ts +3 -0
- package/dist/eval/defineEval.js +42 -12
- package/dist/eval/defineEval.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/integrations/anthropic.js +32 -83
- package/dist/integrations/anthropic.js.map +1 -1
- package/dist/integrations/mcp.js +8 -4
- package/dist/integrations/mcp.js.map +1 -1
- package/dist/integrations/metrics.d.ts +35 -5
- package/dist/integrations/metrics.js +101 -39
- package/dist/integrations/metrics.js.map +1 -1
- package/dist/integrations/openai.d.ts +23 -0
- package/dist/integrations/openai.js +115 -52
- package/dist/integrations/openai.js.map +1 -1
- package/dist/integrations/otlp.d.ts +14 -1
- package/dist/integrations/otlp.js +26 -1
- package/dist/integrations/otlp.js.map +1 -1
- package/dist/integrations/report.js +2 -14
- package/dist/integrations/report.js.map +1 -1
- package/dist/runtime/run.d.ts +22 -2
- package/dist/runtime/run.js +22 -2
- package/dist/runtime/run.js.map +1 -1
- package/dist/runtime/systemPrompt.d.ts +1 -1
- package/dist/runtime/systemPrompt.js.map +1 -1
- package/dist/store/store.d.ts +7 -7
- package/dist/toolkit/env.js +43 -7
- package/dist/toolkit/env.js.map +1 -1
- package/dist/toolkit/middleware.d.ts +1 -1
- package/dist/toolkit/module.d.ts +10 -1
- package/dist/toolkit/module.js +44 -30
- package/dist/toolkit/module.js.map +1 -1
- package/dist/toolkit/prompt.js +18 -4
- package/dist/toolkit/prompt.js.map +1 -1
- package/dist/toolkit/skill.d.ts +1 -1
- package/dist/toolkit/skill.js +3 -0
- package/dist/toolkit/skill.js.map +1 -1
- package/dist/toolkit/subagent.js +7 -0
- package/dist/toolkit/subagent.js.map +1 -1
- package/dist/transport/async.d.ts +4 -1
- package/dist/transport/async.js +35 -4
- package/dist/transport/async.js.map +1 -1
- package/dist/transport/http.d.ts +3 -3
- package/dist/transport/http.js +64 -8
- package/dist/transport/http.js.map +1 -1
- package/dist/transport/scheduler.js +2 -2
- package/dist/transport/scheduler.js.map +1 -1
- package/dist/transport/sse.d.ts +3 -3
- package/package.json +1 -1
package/dist/core/timeout.js
CHANGED
|
@@ -114,4 +114,74 @@ export async function withTimeout(p, timeoutMs) {
|
|
|
114
114
|
clearTimeout(timer);
|
|
115
115
|
}
|
|
116
116
|
}
|
|
117
|
+
/**
|
|
118
|
+
* 可被 signal 中断的 sleep(**单源**)。
|
|
119
|
+
*
|
|
120
|
+
* 合并两处逐字相同的实现:`engine/retry.ts` 的 `sleep`(重试退避期间收到取消就
|
|
121
|
+
* 不必再等)与 `integrations/anthropic.ts` 的 `interruptibleSleep`(client 层退避)。
|
|
122
|
+
* 那边此前自带一段「与 engine/retry.ts 的 sleep 同语义但不复用它 —— 分层约束:
|
|
123
|
+
* integrations 只能依赖 core」的注解:**正是那条约束把两份代码逼成了重复**,
|
|
124
|
+
* 所以下沉到 core 是让它们合一的唯一合法落点(见 spec §10 2026-09-17 ① 的单源化口径)。
|
|
125
|
+
*
|
|
126
|
+
* ⚠️ 「不合并退避计算器」的例外只针对**引擎层**:`engine/retry.ts` 的 `backoffDelay`
|
|
127
|
+
* 是 ±20% 均匀抖动、底数/上限来自 `RetryOptions`,与 client 层策略不同(见下方
|
|
128
|
+
* `backoffMs` 的注释)—— 合一就是改行为。两条 client 之间的逐字复制不在此列:
|
|
129
|
+
* 它们的 `backoffMs` 也已收进本文件。
|
|
130
|
+
*
|
|
131
|
+
* `abortMessage` 参数化而非统一:文案是**调用方语境**(引擎说「run 已被取消」,
|
|
132
|
+
* client 说「请求已被取消」),两者都会出现在用户眼前的报错里。为去重把两句话
|
|
133
|
+
* 改成一句,是拿可读性换整洁度。
|
|
134
|
+
*
|
|
135
|
+
* 抛的是 `name === 'AbortError'` 的错误(而非 `TimeoutError`):取消不是超时,
|
|
136
|
+
* `engine/errors.ts` 按 `name` 把它归进「已中止」,`loop` 据此以 `aborted` 收尾。
|
|
137
|
+
*/
|
|
138
|
+
export function interruptibleSleep(ms, signal, abortMessage = '已被取消') {
|
|
139
|
+
if (ms <= 0)
|
|
140
|
+
return Promise.resolve();
|
|
141
|
+
return new Promise((resolve, reject) => {
|
|
142
|
+
const abortError = () => Object.assign(new Error(abortMessage), { name: 'AbortError' });
|
|
143
|
+
// 已中止:立即 reject(此处 timer 尚未创建,绝不能去 clear)
|
|
144
|
+
if (signal?.aborted) {
|
|
145
|
+
reject(abortError());
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
function onAbort() {
|
|
149
|
+
clearTimeout(timer);
|
|
150
|
+
reject(abortError());
|
|
151
|
+
}
|
|
152
|
+
const timer = setTimeout(() => {
|
|
153
|
+
signal?.removeEventListener('abort', onAbort);
|
|
154
|
+
resolve();
|
|
155
|
+
}, ms);
|
|
156
|
+
signal?.addEventListener('abort', onAbort, { once: true });
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* client 层重试的退避毫秒(两条内置适配器**共用**的单源):`retry-after`(秒数或
|
|
161
|
+
* HTTP-date)优先;否则指数退避 `min(500 × 2^(attempt-1), 8000)` ±25% 抖动
|
|
162
|
+
* (attempt 从 1 起 = 第一次重试)。
|
|
163
|
+
*
|
|
164
|
+
* ⚠️ **不要**与 `engine/retry.ts` 的 `backoffDelay` 合并(2026-09-17 去重时明确留下的
|
|
165
|
+
* 例外 —— 那条例外针对的是**引擎层**,不是这里):两者形似而策略不同,合一就是改行为。
|
|
166
|
+
* 本函数 ±25% 固定抖动、且**优先尊重 `retry-after`**(限流窗口是上游说了算,框架不该
|
|
167
|
+
* 拿自己的指数曲线去猜);那个是 ±jitter(缺省 ±20%)的均匀抖动、底数与上限来自
|
|
168
|
+
* `RetryOptions`,且它在引擎层(client 放弃之后的兜底重试)。
|
|
169
|
+
*
|
|
170
|
+
* 本函数此前在 `anthropic.ts` 与 `openai.ts` 各存一份逐字相同的副本 —— 「不合并」的
|
|
171
|
+
* 例外从来不覆盖 client↔client 的逐字复制(引擎那条理由不适用于同层),两份相同代码
|
|
172
|
+
* 只会各自漂移。
|
|
173
|
+
*/
|
|
174
|
+
export function backoffMs(attempt, retryAfter) {
|
|
175
|
+
if (retryAfter) {
|
|
176
|
+
const secs = Number(retryAfter);
|
|
177
|
+
if (Number.isFinite(secs))
|
|
178
|
+
return Math.max(0, Math.round(secs * 1000));
|
|
179
|
+
const at = Date.parse(retryAfter);
|
|
180
|
+
if (Number.isFinite(at))
|
|
181
|
+
return Math.max(0, at - Date.now());
|
|
182
|
+
// 解析不了就回落指数退避
|
|
183
|
+
}
|
|
184
|
+
const base = Math.min(500 * 2 ** Math.max(0, attempt - 1), 8000);
|
|
185
|
+
return Math.round(base * (0.75 + Math.random() * 0.5));
|
|
186
|
+
}
|
|
117
187
|
//# sourceMappingURL=timeout.js.map
|
package/dist/core/timeout.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timeout.js","sourceRoot":"","sources":["../../src/core/timeout.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,sCAAsC;AACtC,MAAM,CAAC,MAAM,SAAS,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAC;AAErD;;;;;;;;;;GAUG;AACH,MAAM,OAAO,YAAa,SAAQ,KAAK;IAC5B,IAAI,GAAc,SAAS,CAAC;IACrC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;IAC7B,CAAC;CACF;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,cAAc,CAAC,CAAU;IACvC,IAAI,CAAC,YAAY,YAAY;QAAE,OAAO,IAAI,CAAC;IAC3C,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IACtD,MAAM,CAAC,GAAG,CAAuC,CAAC;IAClD,OAAO,CAAC,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC;AAC3D,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,CAAa,EACb,SAAiB;IAEjB,IAAI,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC;QAAE,OAAO,CAAC,CAAC;IAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,gDAAgD;IAChD,8CAA8C;IAC9C,qDAAqD;IACrD,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,CACpB,CAAC,CAAC,EAAE,EAAE;QACJ,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,OAAO,CAAC,CAAC;IACX,CAAC,EACD,CAAC,CAAC,EAAE,EAAE;QACJ,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,CAAC,CAAC;IACV,CAAC,CACF,CAAC;IACF,IAAI,KAAiC,CAAC;IACtC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC;YAC7B,OAAO;YACP,IAAI,OAAO,CAAmB,CAAC,OAAO,EAAE,EAAE;gBACxC,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC,CAAC;gBACxD,mDAAmD;gBACnD,0CAA0C;YAC5C,CAAC,CAAC;SACH,CAAC,CAAC;QACH,oCAAoC;QACpC,IAAI,GAAG,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QACxC,OAAO,SAAS,GAAG,SAAS,IAAI,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC;IAC9D,CAAC;YAAS,CAAC;QACT,IAAI,KAAK;YAAE,YAAY,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"timeout.js","sourceRoot":"","sources":["../../src/core/timeout.ts"],"names":[],"mappings":"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"}
|
package/dist/core/tool.d.ts
CHANGED
|
@@ -47,9 +47,9 @@ export interface RecorderBackend {
|
|
|
47
47
|
readonly traceId: string;
|
|
48
48
|
begin(kind: SpanKind, name: string, parentSpanId: SpanId | null): SpanId;
|
|
49
49
|
end(id: SpanId, patch?: {
|
|
50
|
-
status?: SpanStatus;
|
|
51
|
-
error?: SpanError;
|
|
52
|
-
usage?: Usage;
|
|
50
|
+
status?: SpanStatus | undefined;
|
|
51
|
+
error?: SpanError | undefined;
|
|
52
|
+
usage?: Usage | undefined;
|
|
53
53
|
}): void;
|
|
54
54
|
event(id: SpanId, name: string, body: unknown): void;
|
|
55
55
|
setAttribute(id: SpanId, key: string, value: string | number | boolean): void;
|
package/dist/core/trace.d.ts
CHANGED
|
@@ -16,7 +16,7 @@ export interface Usage {
|
|
|
16
16
|
cacheReadTokens: number;
|
|
17
17
|
cacheCreationTokens: number;
|
|
18
18
|
/** 估算成本(美元),由 token × 单价算出,随模型表更新 */
|
|
19
|
-
costEstimate?: number;
|
|
19
|
+
costEstimate?: number | undefined;
|
|
20
20
|
}
|
|
21
21
|
export type SpanStatus = 'ok' | 'error';
|
|
22
22
|
export interface SpanError {
|
|
@@ -35,6 +35,41 @@ export interface SpanEvent {
|
|
|
35
35
|
name: string;
|
|
36
36
|
body: unknown;
|
|
37
37
|
}
|
|
38
|
+
/**
|
|
39
|
+
* 触发来源的链路上下文(跨进程 / 跨服务关联,spec §9.2)。
|
|
40
|
+
*
|
|
41
|
+
* 语义是**入站**的:调用方(HTTP 网关、队列消费者、上游服务)把它自己的 span 标识
|
|
42
|
+
* 传进来,本次 run 的根 span 会把它记成一条 `SpanLink` 指回去 —— 于是「这条 run 是被
|
|
43
|
+
* 谁触发的」在两个系统之间可查。
|
|
44
|
+
*
|
|
45
|
+
* ⚠️ **不改变 `traceId == runId` 的 1:1 不变量**:run 仍是自己的一棵新树,上游只是被
|
|
46
|
+
* **链接**、不是被**继承**成父 span。所以一次 run 的调用树永远自洽(不依赖上游是否
|
|
47
|
+
* 还在、是否被采样掉),而因果关系仍然成立。
|
|
48
|
+
*/
|
|
49
|
+
export interface TraceContext {
|
|
50
|
+
/** 上游 trace id:32 位 hex(W3C traceparent)或 UUID(带 '-')两种形态都接受 */
|
|
51
|
+
traceId: string;
|
|
52
|
+
/** 上游 span id(16 位 hex);缺省表示只知道 trace 粒度、没有具体 span */
|
|
53
|
+
spanId?: string;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* 一条链路引用:指向**另一个** trace 里的 span(OTLP 的 span links 同语义)。
|
|
57
|
+
* v1 只在 run 根 span 上写入(来源是 `RunInvocationOptions.traceContext`)。
|
|
58
|
+
*/
|
|
59
|
+
export interface SpanLink {
|
|
60
|
+
traceId: TraceId;
|
|
61
|
+
spanId?: SpanId;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* 解析 W3C `traceparent` 头(spec §9.2 的「header 语义」)。这是入站唯一的字符串形态
|
|
65
|
+
* —— 宿主从 HTTP 头 / 队列消息属性里取到它,直接交给 `RunInvocationOptions.traceContext`。
|
|
66
|
+
*
|
|
67
|
+
* **非法或缺失一律返回 `undefined`**(调用方据此当作「没有上游上下文」继续跑):
|
|
68
|
+
* 链路关联是观测行为,不该因为一个畸形头把业务请求打成 400。被拒的形态有:
|
|
69
|
+
* 版本 `ff`(W3C 保留为非法)、trace/span id 全零、位宽不符、大小写之外的畸形。
|
|
70
|
+
* 版本号非 `00` 时按 W3C「兼容未来」规则接受(只认前四段语义)。
|
|
71
|
+
*/
|
|
72
|
+
export declare function parseTraceparent(value: string | null | undefined): TraceContext | undefined;
|
|
38
73
|
export interface Span {
|
|
39
74
|
spanId: SpanId;
|
|
40
75
|
traceId: TraceId;
|
|
@@ -45,6 +80,12 @@ export interface Span {
|
|
|
45
80
|
endedAt?: number;
|
|
46
81
|
status: SpanStatus;
|
|
47
82
|
error?: SpanError;
|
|
83
|
+
/**
|
|
84
|
+
* 跨 trace 的链路引用(v1 只出现在 run 根 span 上,见 `TraceContext`)。
|
|
85
|
+
* 缺席(而不是空数组)表示「没有上游上下文」—— 与 links 为空的 span 是同一件事,
|
|
86
|
+
* 不要据此区分「没传」和「传了但为空」。
|
|
87
|
+
*/
|
|
88
|
+
links?: SpanLink[];
|
|
48
89
|
/**
|
|
49
90
|
* usage —— 语义按 kind 区分:
|
|
50
91
|
* - `llm.turn`:该次模型往返的**自身计量**,是 Trace.totalUsage 的唯一来源;
|
|
@@ -83,6 +124,19 @@ export interface Score {
|
|
|
83
124
|
* 出口映射:OTLP 导出时译为 `gen_ai.evaluation.result` 事件,metricsSink 聚合为 score 指标族。
|
|
84
125
|
*/
|
|
85
126
|
export declare function attachScore(trace: Trace, score: Score): void;
|
|
127
|
+
/**
|
|
128
|
+
* 能力 span 的类型标签:`attributes.skill` 有值 → `'skill'`,`attributes.subagent` 有值
|
|
129
|
+
* → `'subagent'`,否则 `'capability'`(`SpanKind` 的第三个取值,也是 span 的 kind)。
|
|
130
|
+
*
|
|
131
|
+
* 放在本文件(而不是各出口里):`skill` / `subagent` 这两个 attribute 名是
|
|
132
|
+
* `toolkit/skill.ts`、`toolkit/subagent.ts` 与本类型之间的共同契约 —— 判定写在契约
|
|
133
|
+
* 定义处,两个出口(`metrics.ts` 的指标 label、`report.ts` 的能力排行)只消费结论。
|
|
134
|
+
* 此前两处各有一份同形实现,加起来是**同一件事的三个定义**。
|
|
135
|
+
*
|
|
136
|
+
* 返回 `string` 而非 `CapabilityType`:`'capability'` 不在 `CapabilityType`
|
|
137
|
+
* (那是「菜单四类能力」的口径)里,两者刻意不混。
|
|
138
|
+
*/
|
|
139
|
+
export declare function capabilityKindOf(span: Span): string;
|
|
86
140
|
/**
|
|
87
141
|
* trace 出口:run 收尾(成功或失败)后,框架把【完整 Trace】交给每个 sink。
|
|
88
142
|
* sink 抛错由框架吞掉,绝不影响 run 结果(与 memory 回写同款防护)。
|
package/dist/core/trace.js
CHANGED
|
@@ -2,6 +2,30 @@
|
|
|
2
2
|
* Agentia —— Trace / 调用树 类型草稿。
|
|
3
3
|
* 设计见 docs/spec.md §9。一次 run == 一条 trace(v1 中 traceId == runId)。
|
|
4
4
|
*/
|
|
5
|
+
/** W3C traceparent:`<2位版本>-<32位trace>-<16位span>-<2位flags>`,全小写 hex */
|
|
6
|
+
const TRACEPARENT_RE = /^([0-9a-f]{2})-([0-9a-f]{32})-([0-9a-f]{16})-([0-9a-f]{2})$/;
|
|
7
|
+
/**
|
|
8
|
+
* 解析 W3C `traceparent` 头(spec §9.2 的「header 语义」)。这是入站唯一的字符串形态
|
|
9
|
+
* —— 宿主从 HTTP 头 / 队列消息属性里取到它,直接交给 `RunInvocationOptions.traceContext`。
|
|
10
|
+
*
|
|
11
|
+
* **非法或缺失一律返回 `undefined`**(调用方据此当作「没有上游上下文」继续跑):
|
|
12
|
+
* 链路关联是观测行为,不该因为一个畸形头把业务请求打成 400。被拒的形态有:
|
|
13
|
+
* 版本 `ff`(W3C 保留为非法)、trace/span id 全零、位宽不符、大小写之外的畸形。
|
|
14
|
+
* 版本号非 `00` 时按 W3C「兼容未来」规则接受(只认前四段语义)。
|
|
15
|
+
*/
|
|
16
|
+
export function parseTraceparent(value) {
|
|
17
|
+
if (!value)
|
|
18
|
+
return undefined;
|
|
19
|
+
const m = TRACEPARENT_RE.exec(value.trim().toLowerCase());
|
|
20
|
+
if (!m)
|
|
21
|
+
return undefined;
|
|
22
|
+
const [, version, traceId, spanId] = m;
|
|
23
|
+
if (version === 'ff')
|
|
24
|
+
return undefined;
|
|
25
|
+
if (/^0+$/.test(traceId) || /^0+$/.test(spanId))
|
|
26
|
+
return undefined;
|
|
27
|
+
return { traceId, spanId };
|
|
28
|
+
}
|
|
5
29
|
/**
|
|
6
30
|
* 把评分挂到 trace 根 span(一条 `score` 事件,body 即 Score)。
|
|
7
31
|
* trace 找不到根 span 时静默忽略(观测不击穿业务);多次调用即多条事件(不同维度各记各的)。
|
|
@@ -11,4 +35,23 @@ export function attachScore(trace, score) {
|
|
|
11
35
|
const root = trace.spans.find((s) => s.spanId === trace.rootSpanId);
|
|
12
36
|
root?.events.push({ time: Date.now(), name: 'score', body: score });
|
|
13
37
|
}
|
|
38
|
+
/**
|
|
39
|
+
* 能力 span 的类型标签:`attributes.skill` 有值 → `'skill'`,`attributes.subagent` 有值
|
|
40
|
+
* → `'subagent'`,否则 `'capability'`(`SpanKind` 的第三个取值,也是 span 的 kind)。
|
|
41
|
+
*
|
|
42
|
+
* 放在本文件(而不是各出口里):`skill` / `subagent` 这两个 attribute 名是
|
|
43
|
+
* `toolkit/skill.ts`、`toolkit/subagent.ts` 与本类型之间的共同契约 —— 判定写在契约
|
|
44
|
+
* 定义处,两个出口(`metrics.ts` 的指标 label、`report.ts` 的能力排行)只消费结论。
|
|
45
|
+
* 此前两处各有一份同形实现,加起来是**同一件事的三个定义**。
|
|
46
|
+
*
|
|
47
|
+
* 返回 `string` 而非 `CapabilityType`:`'capability'` 不在 `CapabilityType`
|
|
48
|
+
* (那是「菜单四类能力」的口径)里,两者刻意不混。
|
|
49
|
+
*/
|
|
50
|
+
export function capabilityKindOf(span) {
|
|
51
|
+
if (span.attributes.skill !== undefined)
|
|
52
|
+
return 'skill';
|
|
53
|
+
if (span.attributes.subagent !== undefined)
|
|
54
|
+
return 'subagent';
|
|
55
|
+
return 'capability';
|
|
56
|
+
}
|
|
14
57
|
//# sourceMappingURL=trace.js.map
|
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;
|
|
1
|
+
{"version":3,"file":"trace.js","sourceRoot":"","sources":["../../src/core/trace.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAqEH,sEAAsE;AACtE,MAAM,cAAc,GAAG,6DAA6D,CAAC;AAErF;;;;;;;;GAQG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAgC;IAC/D,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,MAAM,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;IAC1D,IAAI,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IACzB,MAAM,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;IACvC,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IACvC,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;QAAE,OAAO,SAAS,CAAC;IAClE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AAC7B,CAAC;AAqDD;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,KAAY,EAAE,KAAY;IACpD,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,KAAK,CAAC,UAAU,CAAC,CAAC;IACpE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AACtE,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAU;IACzC,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,KAAK,SAAS;QAAE,OAAO,OAAO,CAAC;IACxD,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,KAAK,SAAS;QAAE,OAAO,UAAU,CAAC;IAC9D,OAAO,YAAY,CAAC;AACtB,CAAC"}
|
package/dist/engine/budget.d.ts
CHANGED
|
@@ -25,18 +25,18 @@ export interface BudgetSnapshot {
|
|
|
25
25
|
}
|
|
26
26
|
export interface BudgetGuardOptions {
|
|
27
27
|
/** 整条 run(含子 agent)的累计 token 上限 */
|
|
28
|
-
maxTotalTokens?: number;
|
|
28
|
+
maxTotalTokens?: number | undefined;
|
|
29
29
|
/**
|
|
30
30
|
* 累计成本上限(美元)。**依赖 span 级 usage 的 `costEstimate`** ——
|
|
31
31
|
* 模型不在 `engine/usage.ts` 的价格表里时成本恒为 0,这条护栏**永远不触发**;
|
|
32
32
|
* 要无条件兜底请用 `maxTotalTokens`。同理,缓存 token 的单价是近似值(见 usage.ts)。
|
|
33
33
|
*/
|
|
34
|
-
maxCostUsd?: number;
|
|
34
|
+
maxCostUsd?: number | undefined;
|
|
35
35
|
/**
|
|
36
36
|
* 超限时的回调(在 `check` 返回前调用)。**抛错会冒泡进引擎** ——
|
|
37
37
|
* 想记日志/告警请自行保证不抛(引擎侧装配的那条已经做了 try 包裹)。
|
|
38
38
|
*/
|
|
39
|
-
onExceed?: (snapshot: BudgetSnapshot) => void;
|
|
39
|
+
onExceed?: ((snapshot: BudgetSnapshot) => void) | undefined;
|
|
40
40
|
}
|
|
41
41
|
export interface BudgetGuard {
|
|
42
42
|
/** 每回合记账完成后调用;超限返回 `'tokens' | 'cost'`,否则 `null` */
|
|
@@ -11,7 +11,14 @@ export async function mapWithConcurrency(items, limit, fn) {
|
|
|
11
11
|
const results = new Array(items.length);
|
|
12
12
|
if (items.length === 0)
|
|
13
13
|
return results;
|
|
14
|
-
|
|
14
|
+
// 正数一律至少 1 个 worker:`Math.floor` 会把 (0,1) 区间的小数压成 0,而 width=0 意味着
|
|
15
|
+
// `fn` **一次都不调**、results 全是 undefined,调用方却拿到一个「成功」的空结果 ——
|
|
16
|
+
// 工具被静默丢弃,run 照常收尾。`maxToolConcurrency: cpus().length / 8` 这类比例写法
|
|
17
|
+
// 在多核数小于 8 的机器上正落在 (0,1)。
|
|
18
|
+
// 非正/非有限(0、-1、±Infinity、NaN)仍按上方文档视为「不限」。
|
|
19
|
+
const width = Number.isFinite(limit) && limit > 0
|
|
20
|
+
? Math.min(Math.max(1, Math.floor(limit)), items.length)
|
|
21
|
+
: items.length;
|
|
15
22
|
// 取号自增在同步段完成(`next++` 在读 item 之前),所以 worker 之间不会重号。
|
|
16
23
|
let next = 0;
|
|
17
24
|
const worker = async () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"concurrency.js","sourceRoot":"","sources":["../../src/engine/concurrency.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,KAAmB,EACnB,KAAa,EACb,EAA0C;IAE1C,MAAM,OAAO,GAAG,IAAI,KAAK,CAAI,KAAK,CAAC,MAAM,CAAC,CAAC;IAC3C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC;IACvC,MAAM,KAAK,GACT,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"concurrency.js","sourceRoot":"","sources":["../../src/engine/concurrency.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,KAAmB,EACnB,KAAa,EACb,EAA0C;IAE1C,MAAM,OAAO,GAAG,IAAI,KAAK,CAAI,KAAK,CAAC,MAAM,CAAC,CAAC;IAC3C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC;IACvC,kEAAkE;IAClE,0DAA0D;IAC1D,kEAAkE;IAClE,0BAA0B;IAC1B,0CAA0C;IAC1C,MAAM,KAAK,GACT,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC;QACjC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC;QACxD,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;IACnB,oDAAoD;IACpD,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,MAAM,MAAM,GAAG,KAAK,IAAmB,EAAE;QACvC,SAAS,CAAC;YACR,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC;YACjB,IAAI,CAAC,IAAI,KAAK,CAAC,MAAM;gBAAE,OAAO;YAC9B,OAAO,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACrC,CAAC;IACH,CAAC,CAAC;IACF,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;IACzD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;;;GAOG;AACH,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC"}
|
package/dist/engine/loop.d.ts
CHANGED
|
@@ -27,11 +27,12 @@ export declare function resolveDefaultModel(over?: string): string;
|
|
|
27
27
|
export interface AgentLoopResult<T = unknown> {
|
|
28
28
|
stopReason: AgentStopReason;
|
|
29
29
|
finalText: string;
|
|
30
|
-
|
|
30
|
+
/** 非正常收尾时的结构化原因;正常收尾为 undefined(**字段在场**,见 core/run.ts 的说明) */
|
|
31
|
+
error: SpanError | undefined;
|
|
31
32
|
/** 本轮循环自己发起的模型往返次数 */
|
|
32
33
|
iterations: number;
|
|
33
34
|
/** submit_result 校验通过的结构化结果;未提交则为 undefined(类型由 resultSchema 推导) */
|
|
34
|
-
typed
|
|
35
|
+
typed: T | undefined;
|
|
35
36
|
}
|
|
36
37
|
/** 主入口:开 run 根 span,循环跑在其下。返回完整 trace(traceId 即 runId)。 */
|
|
37
38
|
export declare function runAgent<S extends JsonSchema = JsonSchema>(options: RunAgentOptions<S>): Promise<AgentRunResult<SchemaType<S>>>;
|
|
@@ -41,43 +42,43 @@ export declare function runAgent<S extends JsonSchema = JsonSchema>(options: Run
|
|
|
41
42
|
* 供子 agent 产出结构化结果(见 toolkit/subagent.ts 的交回逻辑)。
|
|
42
43
|
*/
|
|
43
44
|
export declare function runAgentScoped<S extends JsonSchema = JsonSchema>(opts: {
|
|
44
|
-
client?: ModelClient;
|
|
45
|
-
system?: SystemParam;
|
|
45
|
+
client?: ModelClient | undefined;
|
|
46
|
+
system?: SystemParam | undefined;
|
|
46
47
|
messages: MessageParam[];
|
|
47
|
-
tools?: AgentTool[];
|
|
48
|
-
model?: string;
|
|
49
|
-
maxTokens?: number;
|
|
50
|
-
maxIterations?: number;
|
|
48
|
+
tools?: AgentTool[] | undefined;
|
|
49
|
+
model?: string | undefined;
|
|
50
|
+
maxTokens?: number | undefined;
|
|
51
|
+
maxIterations?: number | undefined;
|
|
51
52
|
recorder: RecorderBackend;
|
|
52
53
|
parentSpanId: SpanId;
|
|
53
|
-
onText?: (delta: string) => void;
|
|
54
|
+
onText?: ((delta: string) => void) | undefined;
|
|
54
55
|
/** 中断信号(由发起它的能力从 ToolRunContext.signal 透传,取消能传播到子 agent) */
|
|
55
|
-
signal?: AbortSignal;
|
|
56
|
+
signal?: AbortSignal | undefined;
|
|
56
57
|
/** 模型请求重试策略(缺省开启) */
|
|
57
|
-
retry?: RetryOptions | false;
|
|
58
|
-
contextPolicy?: ContextPolicy;
|
|
58
|
+
retry?: RetryOptions | false | undefined;
|
|
59
|
+
contextPolicy?: ContextPolicy | undefined;
|
|
59
60
|
/** 结构化结果 schema:存在时追加隐藏 submit_result 工具(同 RunAgentOptions.resultSchema) */
|
|
60
|
-
resultSchema?: S;
|
|
61
|
+
resultSchema?: S | undefined;
|
|
61
62
|
/** 单个工具执行超时(毫秒);同 RunAgentOptions.toolTimeoutMs */
|
|
62
|
-
toolTimeoutMs?: number;
|
|
63
|
+
toolTimeoutMs?: number | undefined;
|
|
63
64
|
/** 同回合并行工具上限;同 RunAgentOptions.maxToolConcurrency */
|
|
64
|
-
maxToolConcurrency?: number;
|
|
65
|
+
maxToolConcurrency?: number | undefined;
|
|
65
66
|
/** 事件正文截断上限;同 RunAgentOptions.maxEventChars */
|
|
66
|
-
maxEventChars?: number | false;
|
|
67
|
+
maxEventChars?: number | false | undefined;
|
|
67
68
|
/** 价格表覆盖(F1):由发起它的能力从 ToolRunContext.priceOverrides 透传 */
|
|
68
|
-
priceOverrides?: Record<string, ModelPricing
|
|
69
|
+
priceOverrides?: Record<string, ModelPricing> | undefined;
|
|
69
70
|
/** 未定价模型回调(F2):由发起它的能力透传 */
|
|
70
|
-
onUnpricedModel?: (info: {
|
|
71
|
+
onUnpricedModel?: ((info: {
|
|
71
72
|
model: string;
|
|
72
73
|
spanId: string;
|
|
73
|
-
}) => void;
|
|
74
|
+
}) => void) | undefined;
|
|
74
75
|
/**
|
|
75
76
|
* 成本硬管控(C1):由发起它的能力从 ToolRunContext 透传 —— 预算是整条 run 的口径
|
|
76
77
|
* (各级循环共享同一 recorder,按同一份累计账单判断),子循环每回合同样检查;
|
|
77
78
|
* 子循环超限以 stopReason='budget_exceeded' 收尾,由能力层包成 is_error 回主循环,
|
|
78
79
|
* 主循环回合入口的预算检查随即将整条 run 停掉。
|
|
79
80
|
*/
|
|
80
|
-
maxTotalTokens?: number;
|
|
81
|
+
maxTotalTokens?: number | undefined;
|
|
81
82
|
/** 成本硬管控(C1):累计成本(美元)上限;同 maxTotalTokens */
|
|
82
|
-
maxCostUsd?: number;
|
|
83
|
+
maxCostUsd?: number | undefined;
|
|
83
84
|
}): Promise<AgentLoopResult<SchemaType<S>>>;
|
package/dist/engine/loop.js
CHANGED
|
@@ -127,6 +127,15 @@ export async function runAgent(options) {
|
|
|
127
127
|
// 会话标识(R7 thread 维度):多轮 run 按 session 聚合;OTLP 侧映射 gen_ai.conversation.id
|
|
128
128
|
if (options.sessionId)
|
|
129
129
|
recorder.setAttribute(rootId, 'session.id', options.sessionId);
|
|
130
|
+
// 入站链路(spec §9.2 跨进程关联):把「谁触发了这次 run」记成 run 根的一条 link。
|
|
131
|
+
// 与 `traceId == runId` 共存 —— 上游是被**链接**而不是被继承成父 span,所以本 run
|
|
132
|
+
// 的树永远自洽(上游采样掉/已结束都不影响),因果关系仍然可查。见 core/trace.ts。
|
|
133
|
+
if (options.traceContext) {
|
|
134
|
+
recorder.addLink(rootId, {
|
|
135
|
+
traceId: options.traceContext.traceId,
|
|
136
|
+
...(options.traceContext.spanId ? { spanId: options.traceContext.spanId } : {}),
|
|
137
|
+
});
|
|
138
|
+
}
|
|
130
139
|
// 生效配置快照(G3):本 run 真正用着的旋钮写进 run 根 —— 事后能回答
|
|
131
140
|
// 「这条 run 的 maxCostUsd 设了没 / 重试几次」,换参数前后的对比才有据可查。
|
|
132
141
|
// 只记可序列化标量;函数型选项(summarize / estimateTokens)不记内容。
|
|
@@ -168,6 +177,7 @@ export async function runAgent(options) {
|
|
|
168
177
|
finalText: '',
|
|
169
178
|
error: classifyError(e),
|
|
170
179
|
iterations: progress.iterations,
|
|
180
|
+
typed: undefined,
|
|
171
181
|
};
|
|
172
182
|
}
|
|
173
183
|
const runStatus = isSuccessStopReason(result.stopReason) ? 'ok' : 'error';
|
|
@@ -230,8 +240,14 @@ function runConfigSnapshot(options) {
|
|
|
230
240
|
out['config.maxCostUsd'] = options.maxCostUsd;
|
|
231
241
|
if (options.toolTimeoutMs != null)
|
|
232
242
|
out['config.toolTimeoutMs'] = options.toolTimeoutMs;
|
|
243
|
+
// 非正 / 非有限值在 `mapWithConcurrency` 里一律等于「不限并发」,但原样记进 trace 会写成
|
|
244
|
+
// `NaN`(过不了 JSON/OTLP 序列化,到看板上是 null)或 `-1`(读起来像「卡在负数个并发」)。
|
|
245
|
+
// 记**生效的**整数(`floor` 且至少 1,见 `concurrency.ts`),不限则同 `maxEventChars` 记 'off'。
|
|
233
246
|
if (options.maxToolConcurrency != null)
|
|
234
|
-
out['config.maxToolConcurrency'] =
|
|
247
|
+
out['config.maxToolConcurrency'] =
|
|
248
|
+
Number.isFinite(options.maxToolConcurrency) && options.maxToolConcurrency > 0
|
|
249
|
+
? Math.max(1, Math.floor(options.maxToolConcurrency))
|
|
250
|
+
: 'off';
|
|
235
251
|
// 事件截断关掉时记 'off' 而不是 false:`maxEventChars: false` 在日志/看板里
|
|
236
252
|
// 容易被读成「上限为 0」,'off' 一句话说清是**没有上限**
|
|
237
253
|
if (options.maxEventChars != null)
|
package/dist/engine/loop.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loop.js","sourceRoot":"","sources":["../../src/engine/loop.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAUrE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EACL,YAAY,EACZ,WAAW,EACX,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,UAAU,EACV,MAAM,GACP,MAAM,WAAW,CAAC;AASnB,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEjD;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAa;IAC/C,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC;IACtB,OAAO,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,EAAE,IAAI,eAAe,CAAC;AAC9D,CAAC;AAED,qEAAqE;AACrE,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAClC,MAAM,sBAAsB,GAAG,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"loop.js","sourceRoot":"","sources":["../../src/engine/loop.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAUrE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EACL,YAAY,EACZ,WAAW,EACX,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,UAAU,EACV,MAAM,GACP,MAAM,WAAW,CAAC;AASnB,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEjD;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAa;IAC/C,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC;IACtB,OAAO,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,EAAE,IAAI,eAAe,CAAC;AAC9D,CAAC;AAED,qEAAqE;AACrE,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAClC,MAAM,sBAAsB,GAAG,EAAE,CAAC;AA6BlC;;;;;;;GAOG;AACH,SAAS,gBAAgB,CAAC,MAAiC;IACzD,OAAO,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;AACnD,CAAC;AAED;;;;;;;;GAQG;AACH,KAAK,UAAU,SAAS,CACtB,IAAsB;IAEtB,MAAM,GAAG,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAEnC,IAAI,UAAU,GAAoB,UAAU,CAAC;IAC7C,IAAI,KAA4B,CAAC;IACjC,IAAI,SAAS,GAAG,EAAE,CAAC;IACnB,IAAI,QAAQ,GAAG,KAAK,CAAC;IAErB,KAAK,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE,SAAS,EAAE,EAAE,CAAC;QACpE,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAClD,IAAI,IAAI,EAAE,CAAC;YACT,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;YAC7B,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;YACnB,QAAQ,GAAG,IAAI,CAAC;YAChB,MAAM;QACR,CAAC;QAED,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,CAAC;QAC3D,IAAI,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;YACxB,UAAU,GAAG,SAAS,CAAC;YACvB,KAAK,GAAG,YAAY,EAAE,CAAC;YACvB,QAAQ,GAAG,IAAI,CAAC;YAChB,MAAM;QACR,CAAC;QACD,GAAG,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;QAE1B,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAEtC,uDAAuD;QACvD,2BAA2B;QAC3B,8CAA8C;QAC9C,iCAAiC;QACjC,2CAA2C;QAC3C,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAEtF,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QAEnE,MAAM,UAAU,GAAG,iBAAiB,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAC9D,IAAI,UAAU,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACjC,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC;YACnC,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC;YACjC,IAAI,UAAU,CAAC,KAAK;gBAAE,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC;YAC/C,QAAQ,GAAG,IAAI,CAAC;YAChB,MAAM;QACR,CAAC;QAED,MAAM,WAAW,GAAG,MAAM,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QACzF,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC;YAAE,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;QAEtF,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;YAClB,yDAAyD;YACzD,UAAU,GAAG,UAAU,CAAC;YACxB,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;YAC5B,QAAQ,GAAG,IAAI,CAAC;YAChB,MAAM;QACR,CAAC;QAED,gDAAgD;QAChD,IAAI,UAAU,EAAE,CAAC;YACf,UAAU,GAAG,iBAAiB,CAAC;YAC/B,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;YAC5B,KAAK,GAAG,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YACtC,QAAQ,GAAG,IAAI,CAAC;YAChB,MAAM;QACR,CAAC;IACH,CAAC;IAED,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,kEAAkE;QAClE,kEAAkE;QAClE,UAAU,GAAG,gBAAgB,CAAC;QAC9B,KAAK,GAAG;YACN,IAAI,EAAE,gBAAgB;YACtB,OAAO,EAAE,wBAAwB,IAAI,CAAC,aAAa,OAAO;YAC1D,SAAS,EAAE,KAAK;SACjB,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,CAAC,QAAQ,CAAC,UAAU,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC;AACjG,CAAC;AAED,2DAA2D;AAC3D,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,OAA2B;IAE3B,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,IAAI,aAAa,EAAE,CAAC;IACzD,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,OAAO,IAAI,WAAW,EAAE,IAAI,CAAC,CAAC;IAC3E,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE,mBAAmB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3E,qCAAqC;IACrC,IAAI,OAAO,CAAC,aAAa;QAAE,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,gBAAgB,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IAClG,6DAA6D;IAC7D,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC;aAClD,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aACpC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;aAC5B,IAAI,CAAC,GAAG,CAAC,CAAC;QACb,IAAI,MAAM;YAAE,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,kBAAkB,EAAE,MAAM,CAAC,CAAC;IACxE,CAAC;IACD,yEAAyE;IACzE,IAAI,OAAO,CAAC,SAAS;QAAE,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IACtF,uDAAuD;IACvD,6DAA6D;IAC7D,kDAAkD;IAClD,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;QACzB,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE;YACvB,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC,OAAO;YACrC,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAChF,CAAC,CAAC;IACL,CAAC;IACD,4CAA4C;IAC5C,kDAAkD;IAClD,kDAAkD;IAClD,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAC7D,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAEtC,MAAM,QAAQ,GAAG,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;IACnC,IAAI,MAAsC,CAAC;IAC3C,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,SAAS,CAAI;YAC1B,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,qBAAqB,EAAE;YACjD,KAAK,EAAE,mBAAmB,CAAC,OAAO,CAAC,KAAK,CAAC;YACzC,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,kBAAkB;YAClD,aAAa,EAAE,OAAO,CAAC,aAAa,IAAI,sBAAsB;YAC9D,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,EAAE;YAC1B,QAAQ;YACR,YAAY,EAAE,MAAM;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,4CAA4C;YAC5C,aAAa,EAAE,gBAAgB,CAAC,OAAO,CAAC,aAAa,CAAC;YACtD,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,QAAQ;YACR,cAAc,EAAE,OAAO,CAAC,cAAc;YACtC,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;YAC9C,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,cAAc,EAAE,OAAO,CAAC,cAAc;YACtC,eAAe,EAAE,OAAO,CAAC,eAAe;SACzC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,yCAAyC;QACzC,MAAM,GAAG;YACP,UAAU,EAAE,OAAO;YACnB,SAAS,EAAE,EAAE;YACb,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC;YACvB,UAAU,EAAE,QAAQ,CAAC,UAAU;YAC/B,KAAK,EAAE,SAAS;SACjB,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAAG,mBAAmB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;IAC1E,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;IAChE,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC9F,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC3C,OAAO;QACL,KAAK;QACL,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,KAAK,EAAE,MAAM,CAAC,KAAK;KACpB,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAoC,IAqCvE;IACC,OAAO,SAAS,CAAI;QAClB,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,qBAAqB,EAAE;QAC9C,KAAK,EAAE,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC;QACtC,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,kBAAkB;QAC/C,aAAa,EAAE,IAAI,CAAC,aAAa,IAAI,sBAAsB;QAC3D,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE;QACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,aAAa,EAAE,gBAAgB,CAAC,IAAI,CAAC,aAAa,CAAC;QACnD,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,aAAa,EAAE,IAAI,CAAC,aAAa;QACjC,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;QAC3C,aAAa,EAAE,IAAI,CAAC,aAAa;QACjC,cAAc,EAAE,IAAI,CAAC,cAAc;QACnC,eAAe,EAAE,IAAI,CAAC,eAAe;QACrC,cAAc,EAAE,IAAI,CAAC,cAAc;QACnC,UAAU,EAAE,IAAI,CAAC,UAAU;KAC5B,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,SAAS,iBAAiB,CACxB,OAAoC;IAEpC,MAAM,GAAG,GAA8C;QACrD,cAAc,EAAE,mBAAmB,CAAC,OAAO,CAAC,KAAK,CAAC;QAClD,kBAAkB,EAAE,OAAO,CAAC,SAAS,IAAI,kBAAkB;QAC3D,sBAAsB,EAAE,OAAO,CAAC,aAAa,IAAI,sBAAsB;KACxE,CAAC;IACF,IAAI,OAAO,CAAC,cAAc,IAAI,IAAI;QAAE,GAAG,CAAC,uBAAuB,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC;IAC1F,IAAI,OAAO,CAAC,UAAU,IAAI,IAAI;QAAE,GAAG,CAAC,mBAAmB,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;IAC9E,IAAI,OAAO,CAAC,aAAa,IAAI,IAAI;QAAE,GAAG,CAAC,sBAAsB,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC;IACvF,8DAA8D;IAC9D,4DAA4D;IAC5D,6EAA6E;IAC7E,IAAI,OAAO,CAAC,kBAAkB,IAAI,IAAI;QACpC,GAAG,CAAC,2BAA2B,CAAC;YAC9B,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,kBAAkB,CAAC,IAAI,OAAO,CAAC,kBAAkB,GAAG,CAAC;gBAC3E,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;gBACrD,CAAC,CAAC,KAAK,CAAC;IACd,0DAA0D;IAC1D,oCAAoC;IACpC,IAAI,OAAO,CAAC,aAAa,IAAI,IAAI;QAC/B,GAAG,CAAC,sBAAsB,CAAC,GAAG,OAAO,CAAC,aAAa,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC;IAChG,0DAA0D;IAC1D,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC7C,GAAG,CAAC,0BAA0B,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IACtE,MAAM,MAAM,GAA8B,OAAO,CAAC,aAAa,CAAC;IAChE,IAAI,MAAM,EAAE,CAAC;QACX,GAAG,CAAC,sBAAsB,CAAC,GAAG,IAAI,CAAC;QACnC,IAAI,MAAM,CAAC,YAAY,IAAI,IAAI;YAAE,GAAG,CAAC,mCAAmC,CAAC,GAAG,MAAM,CAAC,YAAY,CAAC;IAClG,CAAC;SAAM,CAAC;QACN,GAAG,CAAC,sBAAsB,CAAC,GAAG,KAAK,CAAC;IACtC,CAAC;IACD,0CAA0C;IAC1C,MAAM,UAAU,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACrF,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC;QAAE,GAAG,CAAC,uBAAuB,CAAC,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACtF,IAAI,OAAO,CAAC,YAAY;QAAE,GAAG,CAAC,qBAAqB,CAAC,GAAG,IAAI,CAAC;IAC5D,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"replay.js","sourceRoot":"","sources":["../../src/engine/replay.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAqDlE,MAAM,uBAAuB,GAAG,IAAI,CAAC;AAYrC,MAAM,UAAU,eAAe,CAAC,KAAY,EAAE,IAAI,GAAkB,EAAE;IACpE,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC;IACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,IAAI,uBAAuB,CAAC;IAE/D,MAAM,IAAI,GAAG,IAAI,GAAG,CAAe,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1E,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IAE/B,OAAO,eAAe,CACpB,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,CAAC,EACjD,WAAW,EACX,WAAW,CACZ,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAY,EAAE,IAAuB;IAChE,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC;IACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,IAAI,uBAAuB,CAAC;IAE/D,MAAM,IAAI,GAAG,IAAI,GAAG,CAAe,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1E,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IAE/B,2CAA2C;IAC3C,MAAM,aAAa,GAAa,EAAE,CAAC;IACnC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACrB,IAAI,CAAC,CAAC,YAAY,KAAK,KAAK,CAAC,UAAU;YAAE,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IACH,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,CAAC;IACnC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACxB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,IAAI,KAAK,EAAE,CAAC;QAC/D,MAAM,IAAI,KAAK,CACb,KAAK,KAAK,CAAC;YACT,CAAC,CAAC,wBAAwB,MAAM,gCAAgC;YAChE,CAAC,CAAC,wBAAwB,MAAM,uBAAuB,KAAK,KAAK;gBAC7D,YAAY,KAAK,GAAG,CAAC,GAAG,CAC/B,CAAC;IACJ,CAAC;IAED,8CAA8C;IAC9C,qCAAqC;IACrC,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;IAEnD,MAAM,IAAI,GACR,sBAAsB,KAAK,CAAC,OAAO,OAAO,MAAM,IAAI,KAAK,cAAc;QACvE,oCAAoC,CAAC;IAEvC,MAAM,QAAQ,GAAmB;QAC/B,sDAAsD;QACtD,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE;QAC/B,GAAG,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,CAAC;QACnD,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;KACvB,CAAC;IACF,OAAO,eAAe,CAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;AACpD,CAAC;AAED,yDAAyD;AACzD,SAAS,SAAS,CAAC,KAAY;IAC7B,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;AACpG,CAAC;AAED,sEAAsE;AACtE,SAAS,WAAW,CAClB,KAAa,EACb,IAAuB,EACvB,aAAsB,EACtB,QAAgB;IAEhB,MAAM,QAAQ,GAAmB,EAAE,CAAC;IACpC,IAAI,GAAG,GAAG,CAAC,CAAC;IAEZ,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;QACxB,MAAM,UAAU,GAAG,qBAAqB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACrD,MAAM,IAAI,GACR,gBAAgB,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,WAAW,IAAI,CAAC,IAAI,GAAG;YAC5D,cAAc,UAAU,IAAI,eAAe,SAAS,IAAI,CAAC,MAAM,EAAE,CAAC;QAEpE,MAAM,OAAO,GAAwB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACpE,MAAM,KAAK,
|
|
1
|
+
{"version":3,"file":"replay.js","sourceRoot":"","sources":["../../src/engine/replay.ts"],"names":[],"mappings":"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"}
|
package/dist/engine/retry.d.ts
CHANGED
|
@@ -42,7 +42,22 @@ export declare const DEFAULT_RETRY: {
|
|
|
42
42
|
export type ResolvedRetry = Required<RetryOptions>;
|
|
43
43
|
/** 归一重试配置:`undefined` → 缺省策略(**缺省开启**);`false` → null(关闭)。 */
|
|
44
44
|
export declare function resolveRetry(o: RetryOptions | false | undefined): ResolvedRetry | null;
|
|
45
|
-
/**
|
|
45
|
+
/**
|
|
46
|
+
* 指数退避 + 上限 + 抖动:attempt 从 1 起,`base * 2^(attempt-1)` 封顶 maxDelayMs。
|
|
47
|
+
*
|
|
48
|
+
* ⚠️ **不要**与 `integrations/anthropic.ts` 的 `backoffMs` 合并(2026-09-17 去重时
|
|
49
|
+
* 明确留下的例外)。两者形似而策略不同,合一就是改行为:
|
|
50
|
+
* - 本函数:抖动**均匀分布** ±jitter(缺省 ±20%),底数/上限来自 `RetryOptions`;
|
|
51
|
+
* - 那个:±25% 固定抖动,且**优先尊重 `retry-after`**(秒数或 HTTP-date)——
|
|
52
|
+
* 限流窗口是上游说了算,框架不该拿自己的指数曲线去猜。它只在 client 层有意义。
|
|
53
|
+
* 层也不同:本函数是引擎的兜底重试(覆盖 client 放弃之后的场景),那个在 client 内部。
|
|
54
|
+
*/
|
|
46
55
|
export declare function backoffDelay(attempt: number, r: ResolvedRetry): number;
|
|
47
|
-
/**
|
|
56
|
+
/**
|
|
57
|
+
* 可被 signal 中断的 sleep(退避期间收到取消就不必再等)。
|
|
58
|
+
*
|
|
59
|
+
* 实现单源在 `core/timeout.ts`(2026-09-17 去重):`integrations/anthropic.ts` 的
|
|
60
|
+
* client 层退避需要**逐字相同**的语义,而它只能依赖 core —— 那份重复是被分层约束
|
|
61
|
+
* 逼出来的,所以合一的落点只能是 core。这里只钉住本层的取消文案。
|
|
62
|
+
*/
|
|
48
63
|
export declare function sleep(ms: number, signal?: AbortSignal): Promise<void>;
|
package/dist/engine/retry.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { interruptibleSleep } from '../core/timeout.js';
|
|
1
2
|
import { classifyError } from './errors.js';
|
|
2
3
|
/** 缺省重试参数(不含两个函数字段 —— 它们在 resolveRetry 里注入) */
|
|
3
4
|
export const DEFAULT_RETRY = {
|
|
@@ -6,11 +7,32 @@ export const DEFAULT_RETRY = {
|
|
|
6
7
|
maxDelayMs: 8000,
|
|
7
8
|
jitter: 0.2,
|
|
8
9
|
};
|
|
10
|
+
/**
|
|
11
|
+
* 剔除**显式 `undefined`** 的键。
|
|
12
|
+
*
|
|
13
|
+
* `{ ...DEFAULTS, ...o }` 里,`o` 上值为 `undefined` 的键会**照常覆盖**默认值 ——
|
|
14
|
+
* 它不是「没给」,而是「给了一个 undefined」。tsconfig 未开
|
|
15
|
+
* `exactOptionalPropertyTypes`,所以 `{ maxAttempts: cfg.retries }` 这类
|
|
16
|
+
* spread/透传组装出来的配置能带着 undefined 过类型检查,一路抵达 resolveRetry。
|
|
17
|
+
*/
|
|
18
|
+
function definedOnly(o) {
|
|
19
|
+
const out = {};
|
|
20
|
+
for (const [k, v] of Object.entries(o ?? {})) {
|
|
21
|
+
if (v !== undefined)
|
|
22
|
+
out[k] = v;
|
|
23
|
+
}
|
|
24
|
+
return out;
|
|
25
|
+
}
|
|
9
26
|
/** 归一重试配置:`undefined` → 缺省策略(**缺省开启**);`false` → null(关闭)。 */
|
|
10
27
|
export function resolveRetry(o) {
|
|
11
28
|
if (o === false)
|
|
12
29
|
return null;
|
|
13
|
-
|
|
30
|
+
// 用 definedOnly 兜住显式 undefined,否则旧写法会把缺省覆盖掉:
|
|
31
|
+
// `maxAttempts: undefined` → `!(undefined >= 1)` 成立 → **重试被静默关闭**,
|
|
32
|
+
// 而 run 根快照记的是 config.retry.maxAttempts: 0(看起来像用户主动关的);
|
|
33
|
+
// `baseDelayMs: undefined` → backoffDelay 每次算出 NaN,退避失效且 trace 里
|
|
34
|
+
// `llm.retry.delayMs` 记 NaN。两者都与「undefined → 缺省策略」的文档相反。
|
|
35
|
+
const merged = { ...DEFAULT_RETRY, ...definedOnly(o) };
|
|
14
36
|
if (!(merged.maxAttempts >= 1))
|
|
15
37
|
return null; // maxAttempts < 1 等同关闭
|
|
16
38
|
return {
|
|
@@ -19,33 +41,30 @@ export function resolveRetry(o) {
|
|
|
19
41
|
onRetry: o?.onRetry ?? (() => { }),
|
|
20
42
|
};
|
|
21
43
|
}
|
|
22
|
-
/**
|
|
44
|
+
/**
|
|
45
|
+
* 指数退避 + 上限 + 抖动:attempt 从 1 起,`base * 2^(attempt-1)` 封顶 maxDelayMs。
|
|
46
|
+
*
|
|
47
|
+
* ⚠️ **不要**与 `integrations/anthropic.ts` 的 `backoffMs` 合并(2026-09-17 去重时
|
|
48
|
+
* 明确留下的例外)。两者形似而策略不同,合一就是改行为:
|
|
49
|
+
* - 本函数:抖动**均匀分布** ±jitter(缺省 ±20%),底数/上限来自 `RetryOptions`;
|
|
50
|
+
* - 那个:±25% 固定抖动,且**优先尊重 `retry-after`**(秒数或 HTTP-date)——
|
|
51
|
+
* 限流窗口是上游说了算,框架不该拿自己的指数曲线去猜。它只在 client 层有意义。
|
|
52
|
+
* 层也不同:本函数是引擎的兜底重试(覆盖 client 放弃之后的场景),那个在 client 内部。
|
|
53
|
+
*/
|
|
23
54
|
export function backoffDelay(attempt, r) {
|
|
24
55
|
const exp = r.baseDelayMs * 2 ** Math.max(0, attempt - 1);
|
|
25
56
|
const capped = Math.min(exp, r.maxDelayMs);
|
|
26
57
|
const jitter = r.jitter > 0 ? capped * r.jitter * (Math.random() * 2 - 1) : 0;
|
|
27
58
|
return Math.max(0, Math.round(capped + jitter));
|
|
28
59
|
}
|
|
29
|
-
/**
|
|
60
|
+
/**
|
|
61
|
+
* 可被 signal 中断的 sleep(退避期间收到取消就不必再等)。
|
|
62
|
+
*
|
|
63
|
+
* 实现单源在 `core/timeout.ts`(2026-09-17 去重):`integrations/anthropic.ts` 的
|
|
64
|
+
* client 层退避需要**逐字相同**的语义,而它只能依赖 core —— 那份重复是被分层约束
|
|
65
|
+
* 逼出来的,所以合一的落点只能是 core。这里只钉住本层的取消文案。
|
|
66
|
+
*/
|
|
30
67
|
export function sleep(ms, signal) {
|
|
31
|
-
|
|
32
|
-
return Promise.resolve();
|
|
33
|
-
return new Promise((resolve, reject) => {
|
|
34
|
-
const abortError = () => Object.assign(new Error('run 已被取消'), { name: 'AbortError' });
|
|
35
|
-
// 已中止:立即 reject(此处 timer 尚未创建,绝不能去 clear)
|
|
36
|
-
if (signal?.aborted) {
|
|
37
|
-
reject(abortError());
|
|
38
|
-
return;
|
|
39
|
-
}
|
|
40
|
-
function onAbort() {
|
|
41
|
-
clearTimeout(timer);
|
|
42
|
-
reject(abortError());
|
|
43
|
-
}
|
|
44
|
-
const timer = setTimeout(() => {
|
|
45
|
-
signal?.removeEventListener('abort', onAbort);
|
|
46
|
-
resolve();
|
|
47
|
-
}, ms);
|
|
48
|
-
signal?.addEventListener('abort', onAbort, { once: true });
|
|
49
|
-
});
|
|
68
|
+
return interruptibleSleep(ms, signal, 'run 已被取消');
|
|
50
69
|
}
|
|
51
70
|
//# sourceMappingURL=retry.js.map
|
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,aAAa,EAAE,MAAM,aAAa,CAAC;AAgC5C,+CAA+C;AAC/C,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,WAAW,EAAE,CAAC;IACd,WAAW,EAAE,GAAG;IAChB,UAAU,EAAE,IAAI;IAChB,MAAM,EAAE,GAAG;CACH,CAAC;AAIX,8DAA8D;AAC9D,MAAM,UAAU,YAAY,CAAC,CAAmC;IAC9D,IAAI,CAAC,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC;IAC7B,MAAM,MAAM,GAAG,EAAE,GAAG,aAAa,EAAE,GAAG,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/engine/retry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAgC5C,+CAA+C;AAC/C,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,WAAW,EAAE,CAAC;IACd,WAAW,EAAE,GAAG;IAChB,UAAU,EAAE,IAAI;IAChB,MAAM,EAAE,GAAG;CACH,CAAC;AAIX;;;;;;;GAOG;AACH,SAAS,WAAW,CAAC,CAA2B;IAC9C,MAAM,GAAG,GAAiB,EAAE,CAAC;IAC7B,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;QAC7C,IAAI,CAAC,KAAK,SAAS;YAAG,GAA+B,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,8DAA8D;AAC9D,MAAM,UAAU,YAAY,CAAC,CAAmC;IAC9D,IAAI,CAAC,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC;IAC7B,6CAA6C;IAC7C,mEAAmE;IACnE,wDAAwD;IACxD,iEAAiE;IACjE,yDAAyD;IACzD,MAAM,MAAM,GAAG,EAAE,GAAG,aAAa,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;IACvD,IAAI,CAAC,CAAC,MAAM,CAAC,WAAW,IAAI,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC,CAAC,uBAAuB;IACpE,OAAO;QACL,GAAG,MAAM;QACT,WAAW,EAAE,CAAC,EAAE,WAAW,IAAI,CAAC,CAAC,CAAU,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC3E,OAAO,EAAE,CAAC,EAAE,OAAO,IAAI,CAAC,GAAS,EAAE,GAAE,CAAC,CAAC;KACxC,CAAC;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,YAAY,CAAC,OAAe,EAAE,CAAgB;IAC5D,MAAM,GAAG,GAAG,CAAC,CAAC,WAAW,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC;IAC1D,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9E,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC;AAClD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,KAAK,CAAC,EAAU,EAAE,MAAoB;IACpD,OAAO,kBAAkB,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;AACpD,CAAC"}
|