@migor/agentia 0.7.2 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +53 -1
- package/README.md +10 -6
- package/dist/AGENTS.md +26 -6
- package/dist/engine/loop-result.d.ts +72 -0
- package/dist/engine/loop-result.js +80 -0
- package/dist/engine/loop-result.js.map +1 -0
- package/dist/engine/loop.d.ts +3 -40
- package/dist/engine/loop.js +31 -125
- package/dist/engine/loop.js.map +1 -1
- package/dist/engine/resume-input.d.ts +26 -0
- package/dist/engine/resume-input.js +39 -0
- package/dist/engine/resume-input.js.map +1 -0
- package/dist/engine/retry.d.ts +8 -0
- package/dist/engine/retry.js +10 -0
- package/dist/engine/retry.js.map +1 -1
- package/dist/engine/run-config.d.ts +28 -0
- package/dist/engine/run-config.js +75 -0
- package/dist/engine/run-config.js.map +1 -0
- package/dist/engine/stop-reason.d.ts +27 -0
- package/dist/engine/stop-reason.js +76 -0
- package/dist/engine/stop-reason.js.map +1 -0
- package/dist/engine/text.d.ts +10 -0
- package/dist/engine/text.js +6 -0
- package/dist/engine/text.js.map +1 -0
- package/dist/engine/tool-context.d.ts +32 -0
- package/dist/engine/tool-context.js +18 -0
- package/dist/engine/tool-context.js.map +1 -0
- package/dist/engine/tool-events.d.ts +42 -0
- package/dist/engine/tool-events.js +64 -0
- package/dist/engine/tool-events.js.map +1 -0
- package/dist/engine/turn-request.d.ts +24 -0
- package/dist/engine/turn-request.js +12 -0
- package/dist/engine/turn-request.js.map +1 -0
- package/dist/engine/turn.d.ts +3 -25
- package/dist/engine/turn.js +43 -155
- package/dist/engine/turn.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/toolkit/tool.js +1 -0
- package/dist/toolkit/tool.js.map +1 -1
- package/dist/transport/approval-policy.d.ts +30 -0
- package/dist/transport/approval-policy.js +37 -0
- package/dist/transport/approval-policy.js.map +1 -0
- package/dist/transport/async.d.ts +0 -4
- package/dist/transport/async.js +40 -144
- package/dist/transport/async.js.map +1 -1
- package/dist/transport/drain-gate.d.ts +28 -0
- package/dist/transport/drain-gate.js +62 -0
- package/dist/transport/drain-gate.js.map +1 -0
- package/dist/transport/http-route.d.ts +55 -0
- package/dist/transport/http-route.js +72 -0
- package/dist/transport/http-route.js.map +1 -0
- package/dist/transport/http-shapes.d.ts +57 -0
- package/dist/transport/http-shapes.js +56 -0
- package/dist/transport/http-shapes.js.map +1 -0
- package/dist/transport/http.d.ts +5 -21
- package/dist/transport/http.js +176 -232
- package/dist/transport/http.js.map +1 -1
- package/dist/transport/resume-policy.d.ts +40 -0
- package/dist/transport/resume-policy.js +25 -0
- package/dist/transport/resume-policy.js.map +1 -0
- package/dist/transport/slot-pool.d.ts +24 -0
- package/dist/transport/slot-pool.js +43 -0
- package/dist/transport/slot-pool.js.map +1 -0
- package/dist/transport/task-waiters.d.ts +25 -0
- package/dist/transport/task-waiters.js +63 -0
- package/dist/transport/task-waiters.js.map +1 -0
- package/package.json +4 -3
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,57 @@
|
|
|
5
5
|
(0.x 阶段:minor 可含破坏性变更,每个破坏性变更都在对应版本的「迁移」小节里写明)。
|
|
6
6
|
决策的完整证据链在 `docs/spec.md` §10(带时间线的决策日志)。
|
|
7
7
|
|
|
8
|
+
## [0.8.0] - 2026-09-21
|
|
9
|
+
|
|
10
|
+
### 变更
|
|
11
|
+
|
|
12
|
+
> 本版主题(窗口 `0.7.2 → 0.8.0`,含 #83–#105):**CLI 机器可读面 + 脚手架生产路径修复**。
|
|
13
|
+
> 框架运行时 API 零变化;窗口内 23 个提交里 13 个是纯结构拆分(AsyncRunner / turn / loop /
|
|
14
|
+
> http 外移判定面,零行为变化),其余大多是仓库自身的门禁与测试加固。
|
|
15
|
+
> **一条必须看的修复**:用 ≤0.7.2 的 `agentia create` 生成过工程的,
|
|
16
|
+
> `npm run build && npm start` 一跑就崩(discover 目录是 cwd 相对写法,生产形态下会去加载
|
|
17
|
+
> `src/` 的 `.ts` 源码)。缺陷在**生成出来的工程里**,升级 CLI 不会自动修好已有工程 ——
|
|
18
|
+
> 迁移办法见下方「迁移」。
|
|
19
|
+
|
|
20
|
+
### 新增(CLI)
|
|
21
|
+
|
|
22
|
+
- **`agentia --version` / `-v`**:打印 CLI 版本(读包自身 `package.json`)。
|
|
23
|
+
- **`report` / `diff` / `doctor` 支持 `--json`**:stdout 只输出一个 JSON 文档,可直接进
|
|
24
|
+
管道与 CI;出错仍走 stderr + 退出码 1,且 stdout 保持空。`harvest` 刻意不加
|
|
25
|
+
(它的 stdout 本身就是产物);`dev` 额外参数原样透传给用户脚本。
|
|
26
|
+
- **脚手架把 `@migor/cli` 写进生成工程的 devDependencies**(与框架同 `^` 版本),`dev`
|
|
27
|
+
script 改为 `agentia dev`:`npx agentia …` 走本地 bin —— 离线可用,且版本被 pin 住与
|
|
28
|
+
框架同批(不 pin 的话老工程会被 npx 拉到最新 CLI)。
|
|
29
|
+
|
|
30
|
+
### 修复
|
|
31
|
+
|
|
32
|
+
- **脚手架生成工程的 discover 目录按本文件位置解析,不再是 cwd 相对字符串**(本版最高
|
|
33
|
+
优先级):旧模板生成的工程 `npm run build && npm start` 必崩
|
|
34
|
+
"Invalid or unexpected token"(生产形态下去加载 `src/` 的 `.ts` 源码,而装饰器不是
|
|
35
|
+
可擦除语法),换个 cwd 启动连目录都找不到。**0.7.2 及之前所有版本生成的工程都带此
|
|
36
|
+
缺陷。** 新写法按 `import.meta.url` 相对本文件解析(开发态 `src/`、构建后 `dist/` 都
|
|
37
|
+
成立),并过滤不存在的分类目录(空分类 tsc 不产出 `dist/<分类>/`,「这类暂时没有能力」
|
|
38
|
+
不该让启动失败)。
|
|
39
|
+
|
|
40
|
+
### 迁移
|
|
41
|
+
|
|
42
|
+
- **用 ≤0.7.2 的 `agentia create` 生成过工程的**:把工程 `src/main.ts` 的 discover 段
|
|
43
|
+
换成新模板的写法(重新 `agentia create` 一个同名工程对照抄过来即可 —— 核心是目录按
|
|
44
|
+
`new URL(d + '/', import.meta.url)` 解析 + `existsSync` 过滤这两处)。
|
|
45
|
+
框架 API 本身无破坏性变更,`@migor/agentia` 与 `@migor/cli` 升到 `^0.8.0` 即可。
|
|
46
|
+
|
|
47
|
+
### 内部(不影响使用者)
|
|
48
|
+
|
|
49
|
+
- 纯结构拆分 13 件:AsyncRunner 五步(SlotPool / approval-policy / DrainGate /
|
|
50
|
+
resume-policy / TaskWaiters)、`turn.ts` 四步、`loop.ts` 三步、`http.ts` 两步 ——
|
|
51
|
+
判定面有名字、编排留在原处,零行为变化(#85–#100)。
|
|
52
|
+
- Biome 零告警闸门:93 warnings + 12 infos → 0,verify-all 第 1 步与 CI lint job 翻
|
|
53
|
+
`--error-on-warnings`(#84)。
|
|
54
|
+
- 计时断言不再卡预算边界、改用单调时钟量(#102 / #103)。
|
|
55
|
+
- 覆盖率棘轮门禁(c8:行 95 / 分支 85 / 函数 92)+ e2e-cli 折入「npm pack → 离线安装 →
|
|
56
|
+
装出来的包真跑最小 run」(#104)。
|
|
57
|
+
- CLI 模板从字符串升级为真文件(`packages/cli/templates/`,生成产物逐字节不变)(#105)。
|
|
58
|
+
|
|
8
59
|
## [0.7.2] - 2026-09-20
|
|
9
60
|
|
|
10
61
|
### 变更
|
|
@@ -676,7 +727,8 @@
|
|
|
676
727
|
首个公开发布:`@migor/agentia` + `@migor/cli`(scope `@migor/*`),两包版本同步。
|
|
677
728
|
框架本体单包;CLI 独立成包(workspaces)。
|
|
678
729
|
|
|
679
|
-
[Unreleased]: https://github.com/retrychx/agentia/compare/v0.
|
|
730
|
+
[Unreleased]: https://github.com/retrychx/agentia/compare/v0.8.0...HEAD
|
|
731
|
+
[0.8.0]: https://github.com/retrychx/agentia/releases/tag/v0.8.0
|
|
680
732
|
[0.7.2]: https://github.com/retrychx/agentia/releases/tag/v0.7.2
|
|
681
733
|
[0.7.1]: https://github.com/retrychx/agentia/releases/tag/v0.7.1
|
|
682
734
|
[0.7.0]: https://github.com/retrychx/agentia/releases/tag/v0.7.0
|
package/README.md
CHANGED
|
@@ -19,18 +19,22 @@
|
|
|
19
19
|
## 安装与配置
|
|
20
20
|
|
|
21
21
|
```bash
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
$EDITOR my-app/.env # 填 ANTHROPIC_API_KEY(也可直接 export,真实环境变量优先)
|
|
22
|
+
npx @migor/cli create my-app # 脚手架(含 .env / .env.example)
|
|
23
|
+
cd my-app && npm install # 框架与 CLI 都装进工程
|
|
24
|
+
$EDITOR .env # 填 ANTHROPIC_API_KEY(也可直接 export,真实环境变量优先)
|
|
25
|
+
npm run dev # = agentia dev:tsx watch + 本地 inspector 面板
|
|
27
26
|
# 可选:ANTHROPIC_BASE_URL(兼容端点)、AGENTIA_MODEL(缺省 claude-opus-5)
|
|
27
|
+
|
|
28
|
+
# 工程内直接用:npx agentia g tool fetch-weather / npx agentia doctor / npx agentia --version
|
|
29
|
+
# (脚手架把 @migor/cli 装进 devDependencies ⇒ 走本地 bin,离线可用、版本与工程一同 pin)
|
|
30
|
+
# 首次创建必须带 scope —— npm 上另有一个别人的 `agentia` 包,短名会装错东西。
|
|
31
|
+
# 想全局装(到处都能敲 agentia):npm i -g @migor/cli
|
|
28
32
|
```
|
|
29
33
|
|
|
30
34
|
> 框架**不自动**读 `.env`:脚手架 `src/main.ts` 首行的 `loadEnvFile()` 负责把它读进 `process.env`。
|
|
31
35
|
> 真实环境变量优先(CI / docker / 命令行永远赢过文件),`loadEnvFile({ override: true })` 才反过来。
|
|
32
36
|
|
|
33
|
-
> **版本**:`0.
|
|
37
|
+
> **版本**:`0.8.0`(`@migor/agentia` 与 `@migor/cli` 均已发布到 npm)。`examples/` **刻意**用
|
|
34
38
|
> `file:../..` 指向本仓库而不是 npm 版本 —— 跑的是**工作区代码**,理由见
|
|
35
39
|
> [`examples/README.md`](examples/README.md) 的「依赖说明」。
|
|
36
40
|
|
package/dist/AGENTS.md
CHANGED
|
@@ -80,16 +80,28 @@ console.log(result.finalText, result.stopReason, result.trace.totalUsage);
|
|
|
80
80
|
## 2. 项目结构(CLI 约定)
|
|
81
81
|
|
|
82
82
|
```bash
|
|
83
|
-
npx @migor/cli create my-app #
|
|
84
|
-
cd my-app && npm install
|
|
83
|
+
npx @migor/cli create my-app # 首次创建:必须带 scope(短名 agentia 在 npm 上是别人的包)
|
|
84
|
+
cd my-app && npm install # 框架与 CLI 都装进工程
|
|
85
85
|
$EDITOR .env # 填 ANTHROPIC_API_KEY(脚手架已生成,且已被 .gitignore 挡住)
|
|
86
|
-
|
|
87
|
-
npx
|
|
88
|
-
npx
|
|
86
|
+
npm run dev # = agentia dev:tsx watch + 本地 inspector 面板
|
|
87
|
+
npx agentia g tool fetch-weather # 生成到 src/tools/fetch-weather/(skill/prompt/subagent 同理)
|
|
88
|
+
npx agentia doctor # 静态体检(未登记/悬空/命名/重复)
|
|
89
|
+
npx agentia --version # CLI 版本(= -v)
|
|
89
90
|
```
|
|
90
91
|
|
|
92
|
+
> **命令从哪来**:脚手架把 `@migor/cli` 装进工程的 `devDependencies`,所以**工程内**用短名
|
|
93
|
+
> `npx agentia …` 即可(走本地 bin:离线可用、版本与工程一同 pin)。**首次创建**必须用带 scope 的
|
|
94
|
+
> `npx @migor/cli create` —— npm 上另有一个别人的 `agentia` 包,短名会装错东西。
|
|
95
|
+
> 想全局装上(到处都能敲 `agentia`):`npm i -g @migor/cli`。
|
|
96
|
+
|
|
91
97
|
四分类目录,一能力一文件夹:`src/tools/` · `src/skills/` · `src/prompts/` · `src/subagents/` —— **目录名就是类型**,不用记别名。每个文件夹的 `index.ts` 是入口,`default export` 支持三种形态:**类**(token = 文件夹名)、**Provider 对象**、**Provider 数组**。显式注册表在 `src/registry.ts`(`agentia g` 自动维护,也可手改)。
|
|
92
98
|
|
|
99
|
+
> **脚手架 `src/main.ts` 怎么找这些目录**:按**本文件位置**解析(`fileURLToPath(new URL('tools/', import.meta.url))`),
|
|
100
|
+
> 所以 dev 解析到 `src/`、`npm run build` 之后解析到 `dist/` —— 从任何目录启动都成立,也不受 cwd 影响。
|
|
101
|
+
> 别改成 cwd 相对写法(形如 `src/tools` 的字符串):那样 `node dist/main.js` 会去加载 `src/` 下的 `.ts`
|
|
102
|
+
> 源码,而装饰器不是可擦除的类型语法,Node 直接跑不了。空分类目录(还没有该类型的能力 ⇒ 构建后没有
|
|
103
|
+
> 对应 `dist/<分类>/`)要过滤掉,否则 `discover` 会因「显式给出的路径不存在」而报错。
|
|
104
|
+
|
|
93
105
|
> **陷阱**:装饰器注册表是模块级 `WeakMap`。框架必须是**单一模块实例** —— 混用 `src` 与 `dist`、或在一个仓库里装两份 agentia,会让能力收集为空。让 CLI 生成的 `package.json` 里只依赖一份框架即可。
|
|
94
106
|
|
|
95
107
|
---
|
|
@@ -772,6 +784,9 @@ console.log(renderRunReport(report));
|
|
|
772
784
|
|
|
773
785
|
CLI 侧有薄壳:`agentia report <trace.jsonl>` —— 每行一个 JSON(裸 Trace,或含 `result.trace` /
|
|
774
786
|
`trace` 的 TaskRecord,如 `FileTaskStore` 的导出),跨行按能力合并后打印排行。
|
|
787
|
+
加 `--json` 得到机器可读输出:stdout 只有一个 JSON 文档(`{ file, runs, failed, skippedLines,
|
|
788
|
+
failures, capabilities, totals }`)、没有人类装饰,适合脚本与 CI 断言;出错仍走 stderr
|
|
789
|
+
(`错误:…`)并把退出码置 1、stdout 保持为空 —— 脚本据此区分「有结果」与「没跑成」。
|
|
775
790
|
|
|
776
791
|
> ⚠️ **单条 run 内样本常 < 5,分位没有意义** —— 所以报告以 `total` / `max` 为主;
|
|
777
792
|
> 要看分位请用 `mergeRunReports` 汇总多条,或用 `metricsSink` 的直方图。
|
|
@@ -976,7 +991,12 @@ const c = await app.run(messages); // 起一条新 run,沿着分叉点前的
|
|
|
976
991
|
|
|
977
992
|
不落代码也可以直比两份 trace 导出:`agentia diff a.jsonl b.jsonl`(输入形态同 `agentia report`),
|
|
978
993
|
打印 run 级 summary + 逐 span 差异,**有差异时退出码 1**(diff(1) 语义)——可直接进 CI 挡
|
|
979
|
-
「换 prompt /
|
|
994
|
+
「换 prompt / 模型后轨迹漂移」。`--json` 给出结构化差异(`{ a, b, equal, summary, spans }`,
|
|
995
|
+
每个 span 带 `path` / `missing` / `fields`),**退出码语义不变**(有差异仍为 1)—— 门禁照旧可用,
|
|
996
|
+
只是「差在哪」也能被读。`agentia doctor --json` 同理(体检结果结构化,有错误仍退出 1)。
|
|
997
|
+
|
|
998
|
+
> `report` / `diff` / `doctor` 支持 `--json`;`harvest` **没有**:它的 stdout 本身就是产物
|
|
999
|
+
> (生成的 eval 文件源码),加 `--json` 会自相矛盾。
|
|
980
1000
|
|
|
981
1001
|
- **配对语义**(结构性配对,字段差异不影响配对):llm.turn 按回合序配对、**忽略 span name** ——
|
|
982
1002
|
name 是模型 id,而「换模型重跑」正是 A/B 主用例,按 name 配对会把两侧所有 turn 报成缺失;
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import type { MessageParam } from '../core/message.js';
|
|
2
|
+
import type { SpanError } from '../core/trace.js';
|
|
3
|
+
import type { AgentStopReason } from './types.js';
|
|
4
|
+
/**
|
|
5
|
+
* Agentia —— 循环出口的**结果形状单源**(engine/loop.ts 的拆分第二步)。
|
|
6
|
+
*
|
|
7
|
+
* `AgentLoopResult` 属「结果/状态记录」型(`docs/guards.md` 的类型角色表):7 个字段
|
|
8
|
+
* **必须全在场**,值可以为 undefined —— 消费方按 `result.suspendedMessages === undefined`
|
|
9
|
+
* 判「没挂起」,而「字段缺席」与「字段为 undefined」在 JSON / OTLP 上是两回事。
|
|
10
|
+
*
|
|
11
|
+
* 此前这 7 个字段由 loop.ts 的五处对象字面量各写一遍(= 35 次「记得写」):加一个字段
|
|
12
|
+
* 要改五处,漏一处就是无声的形状漂移。现在出口只剩四个具名构造器,各自的语义写在名字上:
|
|
13
|
+
*
|
|
14
|
+
* suspendedResult 挂起(等人审批)—— 不是失败;交出的历史是**拷贝**
|
|
15
|
+
* abortedResult 已取消 —— 带结构化 error(取消不是失败,但原因要可查)
|
|
16
|
+
* failedResult 抛出被兜住 —— 由 `classifyError` 翻成结构化 error
|
|
17
|
+
* finishedResult 循环这次**结束**了 —— 成败由 stopReason 表达,error 由调用方给
|
|
18
|
+
*
|
|
19
|
+
* 文件分工:本文件只管「出口长什么样」;什么时候走哪个出口由 engine/loop.ts 决定。
|
|
20
|
+
*/
|
|
21
|
+
export interface AgentLoopResult<T = unknown> {
|
|
22
|
+
stopReason: AgentStopReason;
|
|
23
|
+
finalText: string;
|
|
24
|
+
/** 非正常收尾时的结构化原因;正常收尾为 undefined(**字段在场**,见 core/run.ts 的说明) */
|
|
25
|
+
error: SpanError | undefined;
|
|
26
|
+
/** 本轮循环自己发起的模型往返次数 */
|
|
27
|
+
iterations: number;
|
|
28
|
+
/** submit_result 校验通过的结构化结果;未提交则为 undefined(类型由 resultSchema 推导) */
|
|
29
|
+
typed: T | undefined;
|
|
30
|
+
/**
|
|
31
|
+
* HITL 挂起(stopReason === 'awaiting_approval')时的完整消息历史
|
|
32
|
+
* (末尾是含未决 tool_use 的 assistant 消息);未挂起为 undefined(字段在场)。
|
|
33
|
+
*/
|
|
34
|
+
suspendedMessages: MessageParam[] | undefined;
|
|
35
|
+
/** HITL 挂起时待决的 tool_use_id 列表;未挂起为 undefined(字段在场) */
|
|
36
|
+
pendingApprovals: string[] | undefined;
|
|
37
|
+
}
|
|
38
|
+
/** 挂起收尾(两处出口共用:循环中途挂起 / 恢复模式进来发现决定仍不齐) */
|
|
39
|
+
export declare function suspendedResult<T>(ctx: {
|
|
40
|
+
messages: MessageParam[];
|
|
41
|
+
progress: {
|
|
42
|
+
iterations: number;
|
|
43
|
+
};
|
|
44
|
+
typed: T | undefined;
|
|
45
|
+
}, pending: string[],
|
|
46
|
+
/** 挂起前那一回合的文本(循环中途挂起时给;恢复模式再次挂起时没有新回合,留空) */
|
|
47
|
+
finalText?: string): AgentLoopResult<T>;
|
|
48
|
+
/**
|
|
49
|
+
* 已取消收尾。取消**不是失败**,但必须带结构化 error —— 否则 trace 上只看到「停了」,
|
|
50
|
+
* 看不出是「人取消的」还是「上游出错的」。
|
|
51
|
+
*
|
|
52
|
+
* `iterations` 由调用方给实际进度:取消可能发生在第 N 回合之后,硬写 0 会谎报成「一次模型都没调」。
|
|
53
|
+
*/
|
|
54
|
+
export declare function abortedResult<T = never>(iterations?: number): AgentLoopResult<T>;
|
|
55
|
+
/**
|
|
56
|
+
* 抛出被兜住的收尾:`cause` 是**任何**抛出来的东西(SDK 异常、类型错误、abort 信号……),
|
|
57
|
+
* 出口处一律经 `classifyError` 翻成结构化 SpanError —— 「非正常收尾必带结构化 error」
|
|
58
|
+
* 这条不变量落在这一处,而不是散在各 catch 里。
|
|
59
|
+
*/
|
|
60
|
+
export declare function failedResult<T = never>(cause: unknown, iterations: number): AgentLoopResult<T>;
|
|
61
|
+
/**
|
|
62
|
+
* 循环这次结束了。名字刻意不含成败:`stopReason` 才是成败的表达
|
|
63
|
+
* (`end_turn` / `stop_sequence` 成功,`budget_exceeded` / `max_iterations` / `refusal` 一类
|
|
64
|
+
* 非正常收尾则由调用方把结构化 `error` 一并给出)。
|
|
65
|
+
*/
|
|
66
|
+
export declare function finishedResult<T>(f: {
|
|
67
|
+
stopReason: AgentStopReason;
|
|
68
|
+
finalText: string;
|
|
69
|
+
iterations: number;
|
|
70
|
+
typed: T | undefined;
|
|
71
|
+
error?: SpanError | undefined;
|
|
72
|
+
}): AgentLoopResult<T>;
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { classifyError } from './errors.js';
|
|
2
|
+
import { abortedError } from './turn.js';
|
|
3
|
+
/**
|
|
4
|
+
* 出口的公共底座:把五个「每次都得给」的字段写全,并把两个「只有挂起才非空」的字段
|
|
5
|
+
* 显式写成**在场**。唯一不经过它的是 `suspendedResult` —— 那正是它要覆盖这两个字段的原因。
|
|
6
|
+
*/
|
|
7
|
+
function loopResult(f) {
|
|
8
|
+
return {
|
|
9
|
+
stopReason: f.stopReason,
|
|
10
|
+
finalText: f.finalText,
|
|
11
|
+
error: f.error,
|
|
12
|
+
iterations: f.iterations,
|
|
13
|
+
typed: f.typed,
|
|
14
|
+
suspendedMessages: undefined,
|
|
15
|
+
pendingApprovals: undefined,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
/** 挂起收尾(两处出口共用:循环中途挂起 / 恢复模式进来发现决定仍不齐) */
|
|
19
|
+
export function suspendedResult(ctx, pending,
|
|
20
|
+
/** 挂起前那一回合的文本(循环中途挂起时给;恢复模式再次挂起时没有新回合,留空) */
|
|
21
|
+
finalText = '') {
|
|
22
|
+
return {
|
|
23
|
+
...loopResult({
|
|
24
|
+
stopReason: 'awaiting_approval',
|
|
25
|
+
finalText,
|
|
26
|
+
// 挂起不是失败:等人不该被看板算成失败(区分由 stopReason 承担)
|
|
27
|
+
error: undefined,
|
|
28
|
+
iterations: ctx.progress.iterations,
|
|
29
|
+
typed: ctx.typed,
|
|
30
|
+
}),
|
|
31
|
+
// 历史是**拷贝**:宿主落库后仍可能继续用同一条数组,挂起段的消息不能再被改
|
|
32
|
+
suspendedMessages: [...ctx.messages],
|
|
33
|
+
// 待决 id 列表原样交出(同一引用)—— 调用方此后不再改动它,保留原行为,不顺手加拷贝
|
|
34
|
+
pendingApprovals: pending,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* 已取消收尾。取消**不是失败**,但必须带结构化 error —— 否则 trace 上只看到「停了」,
|
|
39
|
+
* 看不出是「人取消的」还是「上游出错的」。
|
|
40
|
+
*
|
|
41
|
+
* `iterations` 由调用方给实际进度:取消可能发生在第 N 回合之后,硬写 0 会谎报成「一次模型都没调」。
|
|
42
|
+
*/
|
|
43
|
+
export function abortedResult(iterations = 0) {
|
|
44
|
+
return loopResult({
|
|
45
|
+
stopReason: 'aborted',
|
|
46
|
+
finalText: '',
|
|
47
|
+
error: abortedError(),
|
|
48
|
+
iterations,
|
|
49
|
+
typed: undefined,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* 抛出被兜住的收尾:`cause` 是**任何**抛出来的东西(SDK 异常、类型错误、abort 信号……),
|
|
54
|
+
* 出口处一律经 `classifyError` 翻成结构化 SpanError —— 「非正常收尾必带结构化 error」
|
|
55
|
+
* 这条不变量落在这一处,而不是散在各 catch 里。
|
|
56
|
+
*/
|
|
57
|
+
export function failedResult(cause, iterations) {
|
|
58
|
+
return loopResult({
|
|
59
|
+
stopReason: 'error',
|
|
60
|
+
finalText: '',
|
|
61
|
+
error: classifyError(cause),
|
|
62
|
+
iterations,
|
|
63
|
+
typed: undefined,
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* 循环这次结束了。名字刻意不含成败:`stopReason` 才是成败的表达
|
|
68
|
+
* (`end_turn` / `stop_sequence` 成功,`budget_exceeded` / `max_iterations` / `refusal` 一类
|
|
69
|
+
* 非正常收尾则由调用方把结构化 `error` 一并给出)。
|
|
70
|
+
*/
|
|
71
|
+
export function finishedResult(f) {
|
|
72
|
+
return loopResult({
|
|
73
|
+
stopReason: f.stopReason,
|
|
74
|
+
finalText: f.finalText,
|
|
75
|
+
error: f.error,
|
|
76
|
+
iterations: f.iterations,
|
|
77
|
+
typed: f.typed,
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=loop-result.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loop-result.js","sourceRoot":"","sources":["../../src/engine/loop-result.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAuCzC;;;GAGG;AACH,SAAS,UAAU,CAAI,CAMtB;IACC,OAAO;QACL,UAAU,EAAE,CAAC,CAAC,UAAU;QACxB,SAAS,EAAE,CAAC,CAAC,SAAS;QACtB,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,UAAU,EAAE,CAAC,CAAC,UAAU;QACxB,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,iBAAiB,EAAE,SAAS;QAC5B,gBAAgB,EAAE,SAAS;KAC5B,CAAC;AACJ,CAAC;AAED,0CAA0C;AAC1C,MAAM,UAAU,eAAe,CAC7B,GAAyF,EACzF,OAAiB;AACjB,6CAA6C;AAC7C,SAAS,GAAG,EAAE;IAEd,OAAO;QACL,GAAG,UAAU,CAAI;YACf,UAAU,EAAE,mBAAmB;YAC/B,SAAS;YACT,wCAAwC;YACxC,KAAK,EAAE,SAAS;YAChB,UAAU,EAAE,GAAG,CAAC,QAAQ,CAAC,UAAU;YACnC,KAAK,EAAE,GAAG,CAAC,KAAK;SACjB,CAAC;QACF,yCAAyC;QACzC,iBAAiB,EAAE,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC;QACpC,+CAA+C;QAC/C,gBAAgB,EAAE,OAAO;KAC1B,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAY,UAAU,GAAG,CAAC;IACrD,OAAO,UAAU,CAAI;QACnB,UAAU,EAAE,SAAS;QACrB,SAAS,EAAE,EAAE;QACb,KAAK,EAAE,YAAY,EAAE;QACrB,UAAU;QACV,KAAK,EAAE,SAAS;KACjB,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAY,KAAc,EAAE,UAAkB;IACxE,OAAO,UAAU,CAAI;QACnB,UAAU,EAAE,OAAO;QACnB,SAAS,EAAE,EAAE;QACb,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC;QAC3B,UAAU;QACV,KAAK,EAAE,SAAS;KACjB,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAI,CAMjC;IACC,OAAO,UAAU,CAAI;QACnB,UAAU,EAAE,CAAC,CAAC,UAAU;QACxB,SAAS,EAAE,CAAC,CAAC,SAAS;QACtB,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,UAAU,EAAE,CAAC,CAAC,UAAU;QACxB,KAAK,EAAE,CAAC,CAAC,KAAK;KACf,CAAC,CAAC;AACL,CAAC"}
|
package/dist/engine/loop.d.ts
CHANGED
|
@@ -1,46 +1,9 @@
|
|
|
1
1
|
import type { MessageParam } from '../core/message.js';
|
|
2
2
|
import type { AgentTool, JsonSchema, ModelClient, ModelPricing, RecorderBackend, SchemaType } from '../core/tool.js';
|
|
3
|
-
import type {
|
|
3
|
+
import type { SpanId } from '../core/trace.js';
|
|
4
|
+
import type { AgentLoopResult } from './loop-result.js';
|
|
4
5
|
import type { RetryOptions } from './retry.js';
|
|
5
|
-
import type { AgentRunResult,
|
|
6
|
-
/**
|
|
7
|
-
* 缺省模型解析:显式传入 > AGENTIA_MODEL env > 'claude-opus-5'。
|
|
8
|
-
* 不把端点私有模型写死在代码里 —— 走 Anthropic 兼容网关(如 DeepSeek 端点)时
|
|
9
|
-
* export AGENTIA_MODEL=deepseek-… 即可全局覆盖,无需逐处传 model。
|
|
10
|
-
*/
|
|
11
|
-
export declare function resolveDefaultModel(over?: string): string;
|
|
12
|
-
/**
|
|
13
|
-
* Agentia —— 主循环(manual loop,流式)—— spec §5。
|
|
14
|
-
*
|
|
15
|
-
* 结构:核心是 `agentLoop` —— 不自开 run 根,所有 llm.turn 挂在给定的
|
|
16
|
-
* parentSpanId 下。同一套循环既能当主 agent(run 根为其父,由 runAgent 开),
|
|
17
|
-
* 也能当子 agent(capability span 为其父,见 toolkit/subagent.ts),llm.turn 与 usage
|
|
18
|
-
* 递归进同一条 trace(spec §9:子 agent = 一个 capability span,内部能力递归成它的子孙)。
|
|
19
|
-
*
|
|
20
|
-
* 工具执行经 ctx: ToolRunContext 把 {client, recorder, parentSpanId: 当前 turn}
|
|
21
|
-
* 交给 tool.run —— 普通工具忽略;子 agent 用它在正确位置开 capability span。
|
|
22
|
-
*
|
|
23
|
-
* 文件分工:本文件只留入口(runAgent / runAgentScoped)与 agentLoop 编排骨架 +
|
|
24
|
-
* 缺省旋钮;「一回合执行步骤」的实现机(回合上下文、请求/重试、记账、stop_reason
|
|
25
|
-
* 分流、工具执行)拆在同层 turn.ts,依赖方向单向 loop.ts → turn.ts。
|
|
26
|
-
*/
|
|
27
|
-
export interface AgentLoopResult<T = unknown> {
|
|
28
|
-
stopReason: AgentStopReason;
|
|
29
|
-
finalText: string;
|
|
30
|
-
/** 非正常收尾时的结构化原因;正常收尾为 undefined(**字段在场**,见 core/run.ts 的说明) */
|
|
31
|
-
error: SpanError | undefined;
|
|
32
|
-
/** 本轮循环自己发起的模型往返次数 */
|
|
33
|
-
iterations: number;
|
|
34
|
-
/** submit_result 校验通过的结构化结果;未提交则为 undefined(类型由 resultSchema 推导) */
|
|
35
|
-
typed: T | undefined;
|
|
36
|
-
/**
|
|
37
|
-
* HITL 挂起(stopReason === 'awaiting_approval')时的完整消息历史
|
|
38
|
-
* (末尾是含未决 tool_use 的 assistant 消息);未挂起为 undefined(字段在场)。
|
|
39
|
-
*/
|
|
40
|
-
suspendedMessages: MessageParam[] | undefined;
|
|
41
|
-
/** HITL 挂起时待决的 tool_use_id 列表;未挂起为 undefined(字段在场) */
|
|
42
|
-
pendingApprovals: string[] | undefined;
|
|
43
|
-
}
|
|
6
|
+
import type { AgentRunResult, ContextPolicy, RunAgentOptions, SystemParam } from './types.js';
|
|
44
7
|
/** 主入口:开 run 根 span,循环跑在其下。返回完整 trace(traceId 即 runId)。 */
|
|
45
8
|
export declare function runAgent<S extends JsonSchema = JsonSchema>(options: RunAgentOptions<S>): Promise<AgentRunResult<SchemaType<S>>>;
|
|
46
9
|
/**
|
package/dist/engine/loop.js
CHANGED
|
@@ -1,22 +1,29 @@
|
|
|
1
1
|
import { createAnthropicClient } from '../integrations/anthropic.js';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { abortedResult, failedResult, finishedResult, suspendedResult } from './loop-result.js';
|
|
3
|
+
import { tailToolUses, textOfParam } from './resume-input.js';
|
|
4
|
+
import { DEFAULT_MAX_ITERATIONS, DEFAULT_MAX_TOKENS, resolveDefaultModel, runConfigSnapshot, } from './run-config.js';
|
|
4
5
|
import { TraceRecorder } from './tracer.js';
|
|
5
|
-
import { abortedError, budgetError, buildLoopContext, checkTurnEntry, executeTurnTools, recordTurnUsage,
|
|
6
|
+
import { abortedError, budgetError, buildLoopContext, checkTurnEntry, executeTurnTools, recordTurnUsage, streamTurn, textOf, } from './turn.js';
|
|
7
|
+
import { resolveStopReason } from './stop-reason.js';
|
|
6
8
|
import { isSuccessStopReason } from './types.js';
|
|
7
9
|
/**
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
10
|
+
* Agentia —— 主循环(manual loop,流式)—— spec §5。
|
|
11
|
+
*
|
|
12
|
+
* 结构:核心是 `agentLoop` —— 不自开 run 根,所有 llm.turn 挂在给定的
|
|
13
|
+
* parentSpanId 下。同一套循环既能当主 agent(run 根为其父,由 runAgent 开),
|
|
14
|
+
* 也能当子 agent(capability span 为其父,见 toolkit/subagent.ts),llm.turn 与 usage
|
|
15
|
+
* 递归进同一条 trace(spec §9:子 agent = 一个 capability span,内部能力递归成它的子孙)。
|
|
16
|
+
*
|
|
17
|
+
* 工具执行经 ctx: ToolRunContext 把 {client, recorder, parentSpanId: 当前 turn}
|
|
18
|
+
* 交给 tool.run —— 普通工具忽略;子 agent 用它在正确位置开 capability span。
|
|
19
|
+
*
|
|
20
|
+
* 文件分工:本文件只留入口(runAgent / runAgentScoped)与 agentLoop 编排骨架 +
|
|
21
|
+
* run 根的装配;「一回合执行步骤」的实现机(回合上下文、请求/重试、记账、stop_reason
|
|
22
|
+
* 分流、工具执行)拆在同层 turn.ts,「缺省旋钮解析 + 生效配置快照」拆在同层
|
|
23
|
+
* run-config.ts,「出口的结果形状」拆在同层 loop-result.ts ——
|
|
24
|
+
* 「续跑入口的读取件」拆在同层 resume-input.ts ——
|
|
25
|
+
* 依赖方向单向 loop.ts → { turn.ts, run-config.ts, loop-result.ts, resume-input.ts }。
|
|
11
26
|
*/
|
|
12
|
-
export function resolveDefaultModel(over) {
|
|
13
|
-
if (over)
|
|
14
|
-
return over;
|
|
15
|
-
return process.env.AGENTIA_MODEL?.trim() || 'claude-opus-5';
|
|
16
|
-
}
|
|
17
|
-
/** 缺省单次 maxTokens / 循环上限:runAgent 与 runAgentScoped 共用,避免两处各写一遍漂移。 */
|
|
18
|
-
const DEFAULT_MAX_TOKENS = 64_000;
|
|
19
|
-
const DEFAULT_MAX_ITERATIONS = 40;
|
|
20
27
|
/**
|
|
21
28
|
* 上下文策略按 run 隔离:实现提供 `forRun` 时每条 run 拿一个全新实例 ——
|
|
22
29
|
* 内置 createBudgetPolicy 的滞回计数(lastCompactAt)与增量 token 缓存都是
|
|
@@ -28,38 +35,6 @@ const DEFAULT_MAX_ITERATIONS = 40;
|
|
|
28
35
|
function forkPolicyPerRun(policy) {
|
|
29
36
|
return policy?.forRun ? policy.forRun() : policy;
|
|
30
37
|
}
|
|
31
|
-
/**
|
|
32
|
-
* 取消息历史**末尾**那条 assistant 消息里待解决的 tool_use 块(恢复模式检测)。
|
|
33
|
-
* 空数组 = 不是恢复场景(正常从 user 消息起跑)。
|
|
34
|
-
*/
|
|
35
|
-
function tailToolUses(messages) {
|
|
36
|
-
const tail = messages[messages.length - 1];
|
|
37
|
-
if (tail?.role !== 'assistant' || !Array.isArray(tail.content))
|
|
38
|
-
return [];
|
|
39
|
-
// ToolUseBlockParam 结构上兼容 ToolUseBlock(多一个可选 cache_control)
|
|
40
|
-
return tail.content.filter((b) => b.type === 'tool_use');
|
|
41
|
-
}
|
|
42
|
-
/** 取 MessageParam(请求侧)里的文本块拼成的文本(恢复模式收尾时用) */
|
|
43
|
-
function textOfParam(message) {
|
|
44
|
-
if (!Array.isArray(message.content))
|
|
45
|
-
return typeof message.content === 'string' ? message.content : '';
|
|
46
|
-
return message.content
|
|
47
|
-
.filter((b) => b.type === 'text')
|
|
48
|
-
.map((b) => b.text ?? '')
|
|
49
|
-
.join('\n');
|
|
50
|
-
}
|
|
51
|
-
/** 挂起收尾的结果对象(两处出口共用:循环中途挂起 / 恢复模式进来发现决定仍不齐) */
|
|
52
|
-
function suspendResult(ctx, pending) {
|
|
53
|
-
return {
|
|
54
|
-
stopReason: 'awaiting_approval',
|
|
55
|
-
finalText: '',
|
|
56
|
-
error: undefined,
|
|
57
|
-
iterations: ctx.progress.iterations,
|
|
58
|
-
typed: ctx.typed,
|
|
59
|
-
suspendedMessages: [...ctx.messages],
|
|
60
|
-
pendingApprovals: pending,
|
|
61
|
-
};
|
|
62
|
-
}
|
|
63
38
|
/**
|
|
64
39
|
* 循环体核心:带父 span 跑一轮 manual loop。请求失败按 error 收掉 turn 后抛出,由外层收尾。
|
|
65
40
|
*
|
|
@@ -83,35 +58,25 @@ async function agentLoop(args) {
|
|
|
83
58
|
if (resumeUses.length > 0) {
|
|
84
59
|
// 已取消:不执行任何工具(副作用不该在取消后发生),按 aborted 收尾
|
|
85
60
|
if (args.signal?.aborted) {
|
|
86
|
-
return
|
|
87
|
-
stopReason: 'aborted',
|
|
88
|
-
finalText: '',
|
|
89
|
-
error: abortedError(),
|
|
90
|
-
iterations: 0,
|
|
91
|
-
typed: undefined,
|
|
92
|
-
suspendedMessages: undefined,
|
|
93
|
-
pendingApprovals: undefined,
|
|
94
|
-
};
|
|
61
|
+
return abortedResult();
|
|
95
62
|
}
|
|
96
63
|
// 工具事件记到父 span:被恢复的回合属于挂起段的旧 trace,本段没有对应 llm.turn
|
|
97
64
|
const outcome = await executeTurnTools(ctx, args.parentSpanId ?? '', resumeUses, null);
|
|
98
65
|
if (outcome.kind === 'suspended') {
|
|
99
|
-
return
|
|
66
|
+
return suspendedResult(ctx, outcome.pending);
|
|
100
67
|
}
|
|
101
68
|
if (outcome.results.length > 0)
|
|
102
69
|
ctx.messages.push({ role: 'user', content: outcome.results });
|
|
103
70
|
if (ctx.submitted) {
|
|
104
71
|
// 恢复的回合里 submit_result 校验通过:直接落定(finalText 取该 assistant 消息的文本块)
|
|
105
72
|
const tail = ctx.messages[ctx.messages.length - 2]; // 刚 push 了 tool_results,前一条是那条 assistant
|
|
106
|
-
|
|
73
|
+
// iterations 0:本段没发过模型请求(恢复的工具执行不计往返)
|
|
74
|
+
return finishedResult({
|
|
107
75
|
stopReason: 'end_turn',
|
|
108
76
|
finalText: tail ? textOfParam(tail) : '',
|
|
109
|
-
error: undefined,
|
|
110
77
|
iterations: 0,
|
|
111
78
|
typed: ctx.typed,
|
|
112
|
-
|
|
113
|
-
pendingApprovals: undefined,
|
|
114
|
-
};
|
|
79
|
+
});
|
|
115
80
|
}
|
|
116
81
|
}
|
|
117
82
|
for (let iteration = 0; iteration < args.maxIterations; iteration++) {
|
|
@@ -154,7 +119,7 @@ async function agentLoop(args) {
|
|
|
154
119
|
// error 保持 undefined —— 挂起不是失败。
|
|
155
120
|
stopReason = 'awaiting_approval';
|
|
156
121
|
finalText = textOf(message);
|
|
157
|
-
return
|
|
122
|
+
return suspendedResult(ctx, outcome.pending, finalText);
|
|
158
123
|
}
|
|
159
124
|
if (outcome.results.length > 0)
|
|
160
125
|
ctx.messages.push({ role: 'user', content: outcome.results });
|
|
@@ -184,15 +149,13 @@ async function agentLoop(args) {
|
|
|
184
149
|
retryable: false,
|
|
185
150
|
};
|
|
186
151
|
}
|
|
187
|
-
return {
|
|
152
|
+
return finishedResult({
|
|
188
153
|
stopReason,
|
|
189
154
|
finalText,
|
|
190
|
-
error,
|
|
191
155
|
iterations: ctx.progress.iterations,
|
|
192
156
|
typed: ctx.typed,
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
};
|
|
157
|
+
error,
|
|
158
|
+
});
|
|
196
159
|
}
|
|
197
160
|
/** 主入口:开 run 根 span,循环跑在其下。返回完整 trace(traceId 即 runId)。 */
|
|
198
161
|
export async function runAgent(options) {
|
|
@@ -260,15 +223,7 @@ export async function runAgent(options) {
|
|
|
260
223
|
}
|
|
261
224
|
catch (e) {
|
|
262
225
|
// 硬写 0 会把「第 3 回合请求失败」报成「一次模型都没调」——按实际进度报
|
|
263
|
-
result =
|
|
264
|
-
stopReason: 'error',
|
|
265
|
-
finalText: '',
|
|
266
|
-
error: classifyError(e),
|
|
267
|
-
iterations: progress.iterations,
|
|
268
|
-
typed: undefined,
|
|
269
|
-
suspendedMessages: undefined,
|
|
270
|
-
pendingApprovals: undefined,
|
|
271
|
-
};
|
|
226
|
+
result = failedResult(e, progress.iterations);
|
|
272
227
|
}
|
|
273
228
|
// awaiting_approval 不是失败:挂起段本身执行无误(「等人」不该被看板算成「失败」),
|
|
274
229
|
// trace 记 ok;它与成功的区分由 stop_reason attribute 承担。
|
|
@@ -319,53 +274,4 @@ export async function runAgentScoped(opts) {
|
|
|
319
274
|
maxCostUsd: opts.maxCostUsd,
|
|
320
275
|
});
|
|
321
276
|
}
|
|
322
|
-
/**
|
|
323
|
-
* 生效配置快照(G3):把本 run 实际生效的旋钮整理成 run 根的 `config.*` attributes。
|
|
324
|
-
* 只放标量(OTLP/日志/看板都能直接吃);缺省值也记,这样"没配"与"配了缺省值"可区分于
|
|
325
|
-
* "该项不存在"。函数型选项只记"配没配",不记函数体。
|
|
326
|
-
*/
|
|
327
|
-
function runConfigSnapshot(options) {
|
|
328
|
-
const out = {
|
|
329
|
-
'config.model': resolveDefaultModel(options.model),
|
|
330
|
-
'config.maxTokens': options.maxTokens ?? DEFAULT_MAX_TOKENS,
|
|
331
|
-
'config.maxIterations': options.maxIterations ?? DEFAULT_MAX_ITERATIONS,
|
|
332
|
-
};
|
|
333
|
-
if (options.maxTotalTokens != null)
|
|
334
|
-
out['config.maxTotalTokens'] = options.maxTotalTokens;
|
|
335
|
-
if (options.maxCostUsd != null)
|
|
336
|
-
out['config.maxCostUsd'] = options.maxCostUsd;
|
|
337
|
-
if (options.toolTimeoutMs != null)
|
|
338
|
-
out['config.toolTimeoutMs'] = options.toolTimeoutMs;
|
|
339
|
-
// 非正 / 非有限值在 `mapWithConcurrency` 里一律等于「不限并发」,但原样记进 trace 会写成
|
|
340
|
-
// `NaN`(过不了 JSON/OTLP 序列化,到看板上是 null)或 `-1`(读起来像「卡在负数个并发」)。
|
|
341
|
-
// 记**生效的**整数(`floor` 且至少 1,见 `concurrency.ts`),不限则同 `maxEventChars` 记 'off'。
|
|
342
|
-
if (options.maxToolConcurrency != null)
|
|
343
|
-
out['config.maxToolConcurrency'] =
|
|
344
|
-
Number.isFinite(options.maxToolConcurrency) && options.maxToolConcurrency > 0
|
|
345
|
-
? Math.max(1, Math.floor(options.maxToolConcurrency))
|
|
346
|
-
: 'off';
|
|
347
|
-
// 事件截断关掉时记 'off' 而不是 false:`maxEventChars: false` 在日志/看板里
|
|
348
|
-
// 容易被读成「上限为 0」,'off' 一句话说清是**没有上限**
|
|
349
|
-
if (options.maxEventChars != null)
|
|
350
|
-
out['config.maxEventChars'] = options.maxEventChars === false ? 'off' : options.maxEventChars;
|
|
351
|
-
// 重试:记生效的 maxAttempts(0 = 关闭)—— 比记 "custom/default" 更有信息量
|
|
352
|
-
const retryCfg = resolveRetry(options.retry);
|
|
353
|
-
out['config.retry.maxAttempts'] = retryCfg ? retryCfg.maxAttempts : 0;
|
|
354
|
-
const policy = options.contextPolicy;
|
|
355
|
-
if (policy) {
|
|
356
|
-
out['config.contextPolicy'] = true;
|
|
357
|
-
if (policy.budgetTokens != null)
|
|
358
|
-
out['config.contextPolicy.budgetTokens'] = policy.budgetTokens;
|
|
359
|
-
}
|
|
360
|
-
else {
|
|
361
|
-
out['config.contextPolicy'] = false;
|
|
362
|
-
}
|
|
363
|
-
// 价格覆盖:只记覆盖了哪几个模型(不记单价 —— 单价在价格表里,重复记会漂移)
|
|
364
|
-
const overridden = options.priceOverrides ? Object.keys(options.priceOverrides) : [];
|
|
365
|
-
if (overridden.length > 0)
|
|
366
|
-
out['config.priceOverrides'] = overridden.sort().join(',');
|
|
367
|
-
if (options.resultSchema)
|
|
368
|
-
out['config.resultSchema'] = true;
|
|
369
|
-
return out;
|
|
370
|
-
}
|
|
371
277
|
//# sourceMappingURL=loop.js.map
|
package/dist/engine/loop.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loop.js","sourceRoot":"","sources":["../../src/engine/loop.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"loop.js","sourceRoot":"","sources":["../../src/engine/loop.ts"],"names":[],"mappings":"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"}
|