@migor/agentia 0.10.0 → 0.10.2

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.
Files changed (35) hide show
  1. package/CHANGELOG.md +515 -1
  2. package/README.en.md +6 -4
  3. package/README.md +4 -3
  4. package/dist/AGENTS.md +47 -8
  5. package/dist/engine/mcp-server-http.js +68 -35
  6. package/dist/engine/mcp-server-http.js.map +1 -1
  7. package/dist/engine/mcp-server-stdio.d.ts +0 -13
  8. package/dist/engine/mcp-server-stdio.js +35 -22
  9. package/dist/engine/mcp-server-stdio.js.map +1 -1
  10. package/dist/index.d.ts +1 -1
  11. package/dist/index.js +1 -1
  12. package/dist/integrations/mcp-http.js +12 -86
  13. package/dist/integrations/mcp-http.js.map +1 -1
  14. package/dist/integrations/mcp-protocol.d.ts +51 -0
  15. package/dist/integrations/mcp-protocol.js +128 -0
  16. package/dist/integrations/mcp-protocol.js.map +1 -1
  17. package/dist/integrations/mcp-stdio.js +63 -48
  18. package/dist/integrations/mcp-stdio.js.map +1 -1
  19. package/dist/integrations/openai.d.ts +4 -1
  20. package/dist/integrations/openai.js +25 -6
  21. package/dist/integrations/openai.js.map +1 -1
  22. package/dist/runtime/memory.d.ts +5 -0
  23. package/dist/runtime/memory.js.map +1 -1
  24. package/dist/store/store.d.ts +6 -0
  25. package/dist/store/store.js.map +1 -1
  26. package/dist/transport/async.d.ts +2 -4
  27. package/dist/transport/async.js +38 -120
  28. package/dist/transport/async.js.map +1 -1
  29. package/dist/transport/run-call-options.d.ts +77 -0
  30. package/dist/transport/run-call-options.js +72 -0
  31. package/dist/transport/run-call-options.js.map +1 -0
  32. package/dist/transport/run-outcome.d.ts +109 -0
  33. package/dist/transport/run-outcome.js +100 -0
  34. package/dist/transport/run-outcome.js.map +1 -0
  35. package/package.json +3 -2
package/dist/AGENTS.md CHANGED
@@ -101,7 +101,8 @@ npx agentia --version # CLI 版本(= -v)
101
101
  | 文件 | 作用 |
102
102
  |---|---|
103
103
  | `src/app.ts` | **装配**:导出 `createAgentApp({ toolSources?, workdir? })` 工厂 + `CAPABILITY_DIRS` + `createSessionStore()`,并在模块顶部 `loadEnvFile()` 读 `.env` |
104
- | `src/main.ts` | **启动**:薄入口 —— `createAgentApp()` → `app.run(...)`,再处理 `result.error` |
104
+ | `src/main.ts` | **默认入口 = HTTP 服务**:`createAgentApp()` → `createHttpHandler` + `AsyncRunner` + `SqliteTaskStore`(崩溃续跑)→ SIGTERM/SIGINT 触发 `drain` 优雅停机。`npm run build && npm start` 即是带 `/healthz`、异步任务、可选 `AGENTIA_TOKEN` Bearer 鉴权的服务 |
105
+ | `src/batch.ts` | **一次性入口(Job 形态)**:薄入口 —— `createAgentApp()` → `app.run(...)`,再处理 `result.error`;`npm run start:batch -- "你的问题"` 跑一次就退出(cron / CI / 容器) |
105
106
  | `src/dev.config.ts` | **数据**(不是逻辑):开发期的声明,如 `multiTurn: ['trip-planner']`;见 §2.2 |
106
107
  | `src/session-store.ts` | `FileSessionStore`:把多轮对话落成 `.agentia/session.json`(原子写);见 §6.4「对话历史」 |
107
108
  | `src/registry.ts` | 显式注册表(`agentia g` 自动维护) |
@@ -109,7 +110,7 @@ npx agentia --version # CLI 版本(= -v)
109
110
 
110
111
  **为什么拆**:`agentia dev` 的调试环要**复用同一个工厂**,才能把「这次调哪个能力 / 工作目录是哪个」
111
112
  喂进 `createApp`。所以装配必须在 `app.ts` 里、以**函数**形态存在 —— 别把 `createApp(...)` 搬回
112
- `main.ts`(搬回去 dev 环就起不来了)。
113
+ 任一个入口(`main.ts` / `batch.ts`;搬回去 dev 环就起不来了)。
113
114
 
114
115
  > **脚手架 `src/app.ts` 怎么找这些目录**:按**本文件位置**解析(`fileURLToPath(new URL('tools/', import.meta.url))`),
115
116
  > 所以 dev 解析到 `src/`、`npm run build` 之后解析到 `dist/` —— 从任何目录启动都成立,也不受 cwd 影响。
@@ -181,8 +182,9 @@ npx agentia --version # CLI 版本(= -v)
181
182
  事件循环排空,进程还会以 `code=0` 干净退出(看起来像「用户代码自己跑完了」)。这条有 e2e 钉着
182
183
  (`scripts/e2e-dev.ts`)。
183
184
 
184
- **`.env` 由 `src/app.ts` 读**:runner 只 import `app.ts`、**从不执行 `main.ts`**,所以读 `.env`
185
- 的那一行必须在装配模块里 —— 放 `main.ts` 会让 `npm run dev` 静默读不到、而 `npm start` 读得到。
185
+ **`.env` 由 `src/app.ts` 读**:runner 只 import `app.ts`、**从不执行入口**(`main.ts` /
186
+ `batch.ts`),所以读 `.env` 的那一行必须在装配模块里 —— 放进入口会让 `npm run dev` 静默读不到、
187
+ 而 `npm start` 读得到。
186
188
 
187
189
  **安全**:面板只绑 `127.0.0.1`,并做两层校验 —— `Origin` 校验(缺失放行,`Origin: null` 拒绝)
188
190
  + **每次启动生成的一次性 token**(首帧 `?t=` 换成 `HttpOnly` cookie,后续请求带着走)。
@@ -198,6 +200,40 @@ token 的作用是挡住**本机其它进程**,别把它当网络边界:这
198
200
  当前用哪个 id 记在 `.agentia/dev-session-id`(**不是** `session.json` 的一部分):只放内存的话,
199
201
  重启 `npm run dev` 之后刚清空的对话会**自己回来**。有 run 在飞时不能清空(会 409)。
200
202
 
203
+ **每次 run 的 trace 都落盘**:收尾时追加一行到 `.agentia/traces.jsonl`(已被 `.gitignore` 挡住)。
204
+ 那个格式**恰好就是** `agentia report` / `diff` / `harvest` / `export` 四个命令的输入 ——
205
+ 所以面板里跑过的每一次 run,都可以直接:
206
+
207
+ ```bash
208
+ agentia report .agentia/traces.jsonl # 哪个能力慢 / 贵 / 爱失败
209
+ agentia diff .agentia/traces.jsonl ... # 改 prompt 前后逐 span 比对(有差异时退出码 1)
210
+ agentia harvest .agentia/traces.jsonl --failed # 失败的 run → eval 用例骨架
211
+ agentia export .agentia/traces.jsonl # → 训练数据集 JSONL
212
+ ```
213
+
214
+ 落盘**不替代**右栏的实时树:那是两条缝(落盘管「事后能查」,`onTraceEvent` 管「此刻看到」)。
215
+ 三条如实标注:① 文件**只增不减**(要清是你自己 `rm`);② 落盘是**同步写**,单条 trace 以百 KB
216
+ 计、且 `traceLimits.maxEvents` 本来兜上限;③ 面板的 run 列表是**内存** ring(50 条),
217
+ 重启就空了 —— 落盘让数据**没丢**,但面板不会替你回看历史。
218
+
219
+ **并排 A/B(比两条 run差在哪)**:run 列表里 **⌘/Ctrl + 单击**选两条(再点一次取消、
220
+ 选第三条挤掉最早那条),右栏切**双栏**并排两棵调用树,顶部一条差异摘要
221
+ (run 级 summary + 逐 span 字段级差异,与 `agentia diff` 逐字同源)。
222
+
223
+ ⚠️ **可比性分三档,显式不静默**:能力选择与工作目录是 **app 级**的(换它们要重启进程)⇒
224
+ 两条跨了能力选择的 run,配置整个变了,diff 出来的差异**多半与你改的那句话无关**。
225
+ 所以跨能力 / 跨目录 / 元信息缺失都给出**显式降级提示**(含可执行的出路:建议只改 prompt 后重跑),
226
+ 而不是静默给一份没意义的 diff。可比时**不显示**提示条(每次都飘噪声等于没有提示)。
227
+
228
+ ⚠️ **并排是「事后回看」,不是「同时跑」**:单飞闸没解除 —— 解除会连带改变「文件变更延后重启」
229
+ 的语义(两条判据今天刻意共用同一条忙闲判据),且 A/B 的收益全在「事后并排看差在哪」,
230
+ 同时跑还多烧一倍 token。普通单击任意一条即退出并排。
231
+
232
+ **重跑后自动补对**:已经选了一条(还没选第二条)时,新 run 一收尾就**自动**并排 ——
233
+ 面板会播一条 notice 说清「为什么屏幕变双栏了」。三种情况**不**自动:空选择(没表达
234
+ 对比意图,自动切双栏是替用户决定)、已选两条(再塞一条会挤掉你刚选的)、同一条。
235
+ 所以「改一句 prompt → 重跑 → 看差在哪」是**两步**,不是三步。
236
+
201
237
  **中止在飞的 run**:run 跑着的时候输入条上会多一个**「■ 中止」**按钮(没在飞时不显示)。
202
238
  点了之后:
203
239
  - run 在**回合边界**以 `stopReason='aborted'` **正常收尾**,**trace 照常落盘**(面板也会说「已中止」,
@@ -489,9 +525,10 @@ const app = await createApp({ ... });
489
525
 
490
526
  `agentia create` 生成的脚手架把 `.env`、`.env.example` 与 `app.ts` 里的 `loadEnvFile();` 都备好了,并在 `.gitignore` 里挡住 `.env` —— 生成 `.env` 却不 ignore,等于把 key 送进用户的第一个 commit。
491
527
 
492
- > ⚠️ **`loadEnvFile()` 必须在 `app.ts`,不能在 `main.ts`**:`agentia dev` 的 runner 只 import
493
- > `app.ts`、**从不执行 `main.ts`**。放错一侧的失败形状是静默的 —— `npm run dev` 读不到 `.env`
494
- > 而 `npm start` 读得到,用户只会看到「没配 key」然后去怀疑框架。这条有 e2e 钉着(`scripts/e2e-dev.ts`)。
528
+ > ⚠️ **`loadEnvFile()` 必须在 `app.ts`,不能在入口(`main.ts` / `batch.ts`)**:`agentia dev` 的
529
+ > runner 只 import `app.ts`、**从不执行入口**。放错一侧的失败形状是静默的 —— `npm run dev` 读不到
530
+ > `.env` 而 `npm start` 读得到,用户只会看到「没配 key」然后去怀疑框架。这条有 e2e 钉着
531
+ > (`scripts/e2e-dev.ts`)。
495
532
 
496
533
  > ⚠️ **本机 export 过 `ANTHROPIC_API_KEY` 的人**(比如同时用 Claude Code):按上面的优先级,脚手架 `.env` 里的 key 会被**静默压住**。改了 `.env` 却「没生效」时,先 `echo $ANTHROPIC_API_KEY` 看看环境里是不是已经有一份。
497
534
 
@@ -1083,7 +1120,7 @@ const app = await createApp({ /* … */ sinks: [jsonlTraceSink({ path: 'trace.js
1083
1120
  | API | 说明 |
1084
1121
  |---|---|
1085
1122
  | `createAnthropicClient` | 默认 ModelClient(Anthropic):自定义只传 `apiKey` / `baseURL`;框架**零运行时依赖**,不装厂商 SDK |
1086
- | `createOpenAIClient` | OpenAI 兼容端点适配(DeepSeek 等;**真流式**、图片块转 `image_url`、cache token 恒 0) |
1123
+ | `createOpenAIClient` | OpenAI 兼容端点适配(DeepSeek 等;**真流式**、图片块转 `image_url`、DeepSeek 的 `prompt_cache_hit_tokens` 映射进 `cache_read_input_tokens` 并从 input_tokens 拆出不双计,其余端点 cache token 恒 0) |
1087
1124
  | `InMemoryMemoryStore` | 跨 run 的**键值黑板**记忆(`{ store, keys }` 配 `executeRun`) |
1088
1125
  | `InMemorySessionStore` | 跨 run 的**对话历史**(`{ store, id }` 配 `executeRun` / `app.run`);与前者正交,可同时用 |
1089
1126
  | `traceToMessages` | 把 trace 还原成 messages(重放基底) |
@@ -1672,6 +1709,7 @@ const callable = {
1672
1709
  | 任务进度流的边界(内存 / 跨进程) | `GET /tasks/:id/stream` 的事件缓冲在**跑任务的进程内存**里:每任务最近 500 条(可用 `AsyncRunner` 的 `streamBufferEvents` 调,须为正整数,坏值构造期抛错),超限丢**最旧**并先发一帧 `stream.truncated`;终态流只留最近 16 条。**没跑完**的流另有一道**缓冲配额**(`streamNonTerminalBuffers`,缺省 32 条流;`0` = 不留):超出即从最旧、**没有订阅者**的流开始回收**回放历史** —— 表项与序号都留着,连上来的读者先收一帧 `stream.truncated` 再转实时(**不会**变成 `stream.unavailable`,那是对别的进程说的话);正在被订阅的流不受配额约束(不抽走正在读的数据)。**跨进程**(队列消费者在别的进程)时没有实时流:发一帧 `stream.unavailable` 后**立即收口** —— 任务已终态则补 `task.end`(随后关连接);**非终态**则补一帧 `stream.closed`(流级收尾,不是伪造终态)并关连接,客户端此后应转去轮询 `GET /tasks/:id`。要跨进程实时请用 `onTraceEvent` 把事件转发到宿主自己的总线(Redis Streams / Kafka) |
1673
1710
  | 异步任务的**排队段**边界(内存) | `concurrency` 管「同时在跑几个」,**不管**「跑不上、排在后面」那一段 —— 缺省**排队段无上限**:`submit` 总是收单、`POST /tasks` 总是 202,灌多少就在内存里排多少(每条 = 一条记录 + 一棵悬挂的 `#execute` promise + 一个槽位等待者)。要背压就配 `AsyncRunner({ maxQueued })`:超限 `submit` 抛 `TaskQueueFullError`、HTTP 回 **503 + `Retry-After`**(**只在 `submit` 判** —— 恢复路径推进的是已受理任务,拦下来等于把它搁死在 store 里;幂等键命中的重复提交也不吃 503)。`runner.queued` 是实时读数(与闸同一判据)。⚠️ 进程内拒单**不等于**集群级背压:多副本各算各的,要全局就得上队列 |
1674
1711
  | `traceLimits` 与 `maxEventChars` 各管一头 | `maxEventChars` 管**单个事件正文多长**(既有),`traceLimits.maxEvents` 管**整条 trace 记多少条记录事件**(本版)。两者正交、都「不设 = 不限」;超限即**停止记账**,并在 run 根留**两笔** `trace.truncated`:**起点标记** `{limit}`(断点在这里)+ **收尾摘要** `{droppedEvents, limit}`(丢了多少)—— 两笔**同时**进交付的 trace 与 `onTraceEvent` 增量流(⇒ 按 `seq` 折回仍逐字等于收尾那份;两笔簿记**不占** `maxEvents` 配额)。⚠️ 实测 `maxEventChars: false` + 大出参会让 trace 放大 **13.7×**(`npm run bench:trace` 可复现)—— 先收长度再谈采样,收益顺序比反过来大 |
1712
+ | 回给模型的 `tool_result` **不截断、也没有大小闸** | `maxEventChars` / `traceContent` 管的是**记账侧**(trace 记多长、记不记正文)—— 回给模型的工具结果**永远完整**,框架里没有「单条工具结果超过多大就裁」的那条缝。一次 `cat` 大文件、一次刷屏回显就能让**下一回合**的输入爆掉上下文窗口,以 api 错误收尾(长跑里尤其容易撞)。要设输出上限请在**工具实现内部**做(按行数 / 字节截断并附「已截断」标记)—— 框架不替你兜 |
1675
1713
  | **采样是导出决策,不是记账决策** | 采样在 `sink` 外做(配方见 `docs/observability.md` 2.3):被采样掉的 trace 在框架内**仍然完整记账**,只是没发给下游。所以别拿「有采样」当「可以少记账」;也正因如此,出站 `traceparent` 的 flags 恒 `00`(记录/导出决策发生在收尾之后,运行期不可知——不替下游声明) |
1676
1714
  | 菜单漂移只**标记**、不判失败 | 续跑时未决 tool_use 的工具不在当前菜单 ⇒ 三处信号(`menu.drift` 事件 / 父 span attribute / `console.warn`),run **照常收尾**(那些 tool_use 以 `unknown tool` 回给模型)。**射程如实标注**:判据只看**名字** —— 「工具还在、schema 变了」能被 `tools.menuHash` 比出来,但**不会**在续跑时报 `menu.drift`;**只改 `description`** 连签名都不变(有意:润色文案不算漂移)。严格模式(带具名 error 的收尾)与「结果级字段」记在 spec §11 开放项 |
1677
1715
  | `approve` 只收**待决的** id(多一个 → 400 整批拒) | `decisions` 的键必须都在该任务的 `pendingApprovals` 里(调用方从记录的 `pendingApprovals` 读)。多出任何一个 ⇒ **400 + 整批拒 + 记录一字不动**。不校验的代价(已修,2026-09-28 外部深评):多出来的键会写进 `TaskRecord.approvals`,随每次 `save` 全文重写、且终态也不清 ⇒ 一个**认证调用方**单次请求就能把记录撑大(实证:一次 5000 个无关键 = +419 KB),反复调用可无限叠加 |
@@ -1745,6 +1783,7 @@ const callable = {
1745
1783
  | Scheduler 调度表不落库 | `every` / `at` 的调度本身只在内存:已 submit 的任务记录能经 `resumePending` 续跑,但「未来某刻再触发」的调度在重启后不存在(远期单发由宿主自己的 cron 驱动)。另:`drain()` 不停 Scheduler —— 停机窗口内到点的 tick 会打一条触发失败日志(无害但吵),介意就 `scheduler.stop()` 先行 |
1746
1784
  | file store 的撕裂写只在启动时自愈 | 写入中途失败(磁盘满等)留下的残行由 `healTail` 在**构造期**修复;同进程内继续 append 会把新记录粘在残行尾部、下次启动时一起丢弃 —— 磁盘满告警后先恢复写入能力再继续依赖它 |
1747
1785
  | 终态落库失败 ⇒ 重启会重跑 | AsyncRunner 终态 `save` 失败**不遮罩主流程**(「不击穿业务」的代价):store 抖动时任务可能永远停在 `running`,重启后 `resumePending` 会重跑一个**实际已成功**(副作用已发生)的任务 —— 所以副作用工具必须自身幂等。**但失败本身不再静默**:`new AsyncRunner(app, { onPersistError })` 会收到 `{ record, error, phase }`(`phase: 'initial' \| 'outcome'`,后者就是这条)。⚠️ 框架**修不了**它(写不进去就是写不进去)—— 出口的职责是让你能对账、让「记录无声丢失」不再是默认行为(与 `createOtlpExporter({ onExportError })` 同因同形) |
1786
+ | 缺省**不裁剪**上下文(长跑每回合重发全量历史 ⇒ 成本随回合数平方增长) | `contextPolicy` 不注入就一个回合都不裁:每回合把**整段历史**重发给模型,于是回合数翻倍、总输入约翻两番。框架给了缝与一份参考实现(`createBudgetPolicy`),但**不替你决定** —— 裁剪有损(截在哪、留什么会影响答案),是宿主的策略。长任务(几十回合以上)请在 `createApp` 里显式注入 `contextPolicy` |
1748
1787
  | `contextPolicy` 不进子循环 | 应用级 `contextPolicy` / `onText` 只对主循环生效:@SubAgent / @Skill 的子运行不做上下文裁剪(长跑子 agent 撞上下文上限会以 api 错误收尾)。预算护栏(`maxTotalTokens` / `maxCostUsd`)正常透传 |
1749
1788
  | 记忆没有删除语义 | `MemoryStore` 只有 load/save:run 内 `ctx.delete` 掉的键回写时不会从 store 移除(下一轮水合会复活)。要真删请直接操作 store 实现 |
1750
1789
  | 同 keys 的并发回写不合并 | CAS(`loadWithRev` + `saveIfRev`)只做到「冲突时**不写 + 出声**」:框架**不合并、不重试**(合并语义是 store 与宿主的决定,配方见 §6.5)。只有 `load` / `save` 的 store 连冲突都**看不见** —— 版本号是唯一依据,没有它就检测不了覆盖;`InMemoryMemoryStore` 的版本粒度是**整店一个计数**(宁可多报冲突,不漏报真实覆盖) |
@@ -21,24 +21,34 @@ import { randomUUID } from 'node:crypto';
21
21
  */
22
22
  /** http 侧请求 body 上限(固定 1 MiB,与 HTTP 宿主缺省一致;不公开成旋钮) */
23
23
  const MAX_BODY_BYTES = 1024 * 1024;
24
- export function startHttpTransport(core, opts) {
25
- const host = opts.host ?? '127.0.0.1';
26
- const path = opts.path ?? '/mcp';
27
- const shared = opts.server !== undefined;
28
- const server = opts.server ?? createServer();
29
- /** initialize 响应发的会话 id(生成的 uuid;无状态 server 只发不校验 —— 宽容是有意的) */
30
- const sessionId = randomUUID();
31
- const sendJson = (res, status, body) => {
32
- if (res.writableEnded || res.destroyed)
33
- return; // 客户端已走:写了也没人收
34
- const payload = JSON.stringify(body);
35
- res.writeHead(status, {
36
- 'content-type': 'application/json; charset=utf-8',
37
- 'content-length': Buffer.byteLength(payload),
38
- });
39
- res.end(payload);
40
- };
41
- const readBody = (req) => new Promise((resolvePromise) => {
24
+ /**
25
+ * 下面这一组(`sendJson` / `readBody` / `jsonRpcIdOf` / `startListening` / `closeOwnServer`)
26
+ * 2026-10-11 从 `startHttpTransport` 里提到**模块级**:它们是纯件(只看传入的 `req` / `res` /
27
+ * `server`,不碰那条连接的闭包状态),留在闭包里那一个函数有 **192 行 / 占文件 87%**
28
+ * 〔**修前**读数,文件 220 行 —— 那是定阈值当天的全仓最高比例〕。见
29
+ * `tests/architecture/method-size.test.ts` 头注的读数表。
30
+ * ⚠️ **别把「修后多少」写在这里** —— 那是个会腐烂的比例(头部注释改动就会动分母),
31
+ * 能现算:把那个上限临时改成 0 跑一次就是全表。搬迁是**逐字**的,判据与注释一并搬走。
32
+ */
33
+ /** 回 JSON。⚠️ 客户端已走时静默返回:写了也没人收,而 `writeHead` 会抛 `ERR_STREAM_WRITE_AFTER_END`。 */
34
+ function sendJson(res, status, body) {
35
+ if (res.writableEnded || res.destroyed)
36
+ return; // 客户端已走:写了也没人收
37
+ const payload = JSON.stringify(body);
38
+ res.writeHead(status, {
39
+ 'content-type': 'application/json; charset=utf-8',
40
+ 'content-length': Buffer.byteLength(payload),
41
+ });
42
+ res.end(payload);
43
+ }
44
+ /**
45
+ * 读请求体;**超过上限 / 连接中断都返回 `null`**(调用方回 413,不区分是哪一种)。
46
+ *
47
+ * 四个事件都听着是为了**不挂死**:`data` 攒、`end` 收口、`error` 与 `close` 都是「不会再有
48
+ * 数据了」—— 只盯 `end` 的话,客户端中途断开会让这个 Promise 永远不 settle(在飞连接泄漏)。
49
+ */
50
+ function readBody(req) {
51
+ return new Promise((resolvePromise) => {
42
52
  const chunks = [];
43
53
  let size = 0;
44
54
  let done = false;
@@ -60,6 +70,42 @@ export function startHttpTransport(core, opts) {
60
70
  req.on('error', () => finish(null));
61
71
  req.on('close', () => finish(null));
62
72
  });
73
+ }
74
+ /** 报文里的 JSON-RPC `id`(兜底那一支要用它回 `-32603`);**不是数字 / 字符串 / null 就回 null** */
75
+ function jsonRpcIdOf(msg) {
76
+ const rawId = msg.id;
77
+ return typeof rawId === 'number' || typeof rawId === 'string' || rawId === null ? rawId : null;
78
+ }
79
+ /** 起监听并算出对外 URL(端口 0 = 让内核挑一个;拿不到地址则返回 `undefined`) */
80
+ function startListening(server, port, host, path) {
81
+ return new Promise((resolvePromise, rejectPromise) => {
82
+ server.once('error', rejectPromise);
83
+ server.listen(port, host, () => {
84
+ const addr = server.address();
85
+ resolvePromise(addr !== null && typeof addr === 'object'
86
+ ? `http://${host}:${addr.port}${path}`
87
+ : undefined);
88
+ });
89
+ });
90
+ }
91
+ /**
92
+ * 关掉自有 server。
93
+ * ⚠️ 仍在飞的连接会吊住 `close` 的回调(Node ≥ 18.2 有 `closeAllConnections`;旧版没有则
94
+ * 靠 `abortAll` 之后工具自行收尾 —— 读 signal 的工具会退出,连接随之结束)。
95
+ */
96
+ function closeOwnServer(server) {
97
+ return new Promise((resolvePromise) => {
98
+ server.close(() => resolvePromise());
99
+ server.closeAllConnections?.();
100
+ });
101
+ }
102
+ export function startHttpTransport(core, opts) {
103
+ const host = opts.host ?? '127.0.0.1';
104
+ const path = opts.path ?? '/mcp';
105
+ const shared = opts.server !== undefined;
106
+ const server = opts.server ?? createServer();
107
+ /** initialize 响应发的会话 id(生成的 uuid;无状态 server 只发不校验 —— 宽容是有意的) */
108
+ const sessionId = randomUUID();
63
109
  const onRequest = async (req, res) => {
64
110
  const pathname = new URL(req.url ?? '/', 'http://localhost').pathname;
65
111
  if (pathname !== path) {
@@ -158,8 +204,7 @@ export function startHttpTransport(core, opts) {
158
204
  // 一读就抛)、或惰性 client 构造失败(默认 `createAnthropicClient()` 缺 API key)。
159
205
  // 这些是**请求级**的意外 ⇒ 该回一条 JSON-RPC 错误并继续服务,而不是退出进程。
160
206
  console.error('[agentia:mcp-server] 请求处理异常:', e);
161
- const rawId = msg.id;
162
- const id = typeof rawId === 'number' || typeof rawId === 'string' || rawId === null ? rawId : null;
207
+ const id = jsonRpcIdOf(msg);
163
208
  if (res.headersSent) {
164
209
  res.end(); // 响应头已定(200 已发):只能收口,状态码改不了了
165
210
  }
@@ -177,15 +222,8 @@ export function startHttpTransport(core, opts) {
177
222
  let url;
178
223
  const ready = shared
179
224
  ? Promise.resolve()
180
- : new Promise((resolvePromise, rejectPromise) => {
181
- server.once('error', rejectPromise);
182
- server.listen(opts.port ?? 0, host, () => {
183
- const addr = server.address();
184
- if (addr !== null && typeof addr === 'object') {
185
- url = `http://${host}:${addr.port}${path}`;
186
- }
187
- resolvePromise();
188
- });
225
+ : startListening(server, opts.port ?? 0, host, path).then((u) => {
226
+ url = u;
189
227
  });
190
228
  let closed = false;
191
229
  return {
@@ -203,12 +241,7 @@ export function startHttpTransport(core, opts) {
203
241
  server.off('request', onRequest);
204
242
  return Promise.resolve();
205
243
  }
206
- return new Promise((resolvePromise) => {
207
- server.close(() => resolvePromise());
208
- // 仍在飞的连接会吊住 close 的回调(Node ≥ 18.2 有 closeAllConnections;旧版没有则
209
- // 靠 abortAll 之后工具自行收尾 —— 读 signal 的工具会退出,连接随之结束)
210
- server.closeAllConnections?.();
211
- });
244
+ return closeOwnServer(server);
212
245
  },
213
246
  };
214
247
  }
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-server-http.js","sourceRoot":"","sources":["../../src/engine/mcp-server-http.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp-server-http.js","sourceRoot":"","sources":["../../src/engine/mcp-server-http.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,2 @@
1
1
  import type { McpCore, McpServer } from './mcp-server.js';
2
- /**
3
- * Agentia —— MCP 反向桥的 **stdio 传输**(2026-09-28 自 `mcp-server.ts` 切出,
4
- * 与正向桥 `integrations/mcp-stdio.ts` 同款排布:桥居中、传输各居其文件)。
5
- *
6
- * 形状:stdin/stdout **换行分隔 JSON-RPC**(每行一个完整报文);日志只去 stderr
7
- * —— stdout 是协议面,往里写一个字节都会污染报文流。
8
- *
9
- * **依赖方向(单向,运行期无环)**:本文件从 `mcp-server.js` 只取**类型**
10
- * (`McpCore` / `McpServer`,编译期擦除),协议与执行**由 `core` 注入**。
11
- * ⚠️ 与正向桥的差别(那边的 `mcp.ts ↔ mcp-stdio.ts` 是一条**真实的值环**:桥 re-export
12
- * 连接器、连接器反向 import 桥的共享 helper,靠 ESM 的函数提升与调用时机侥幸无恙)——
13
- * 这里刻意做成注入式:无环是**构造性**的,不靠运气。
14
- */
15
2
  export declare function startStdioTransport(core: McpCore): McpServer;
@@ -12,6 +12,40 @@ import { frameLimitText, MAX_FRAME_CHARS } from '../core/line-framing.js';
12
12
  * 连接器、连接器反向 import 桥的共享 helper,靠 ESM 的函数提升与调用时机侥幸无恙)——
13
13
  * 这里刻意做成注入式:无环是**构造性**的,不靠运气。
14
14
  */
15
+ /**
16
+ * 派发一行(2026-10-11 自 `onData` 里提到模块级:它是纯件 —— 只依赖这一行、`core` 与
17
+ * 「还开着吗」这一个读数,留在闭包里 `startStdioTransport` 有 **88 行 / 占文件 85%**
18
+ * 〔**修前**读数,文件 104 行〕。⚠️ **别把「修后多少」写在这里** —— 那是个会腐烂的比例,
19
+ * 能现算:把 `tests/architecture/method-size.test.ts` 的上限临时改成 0 跑一次就是全表)。
20
+ *
21
+ * 两个刻意的处置(搬迁时一字未改):
22
+ * ① **坏 JSON 由协议侧定义形状**回 `-32700` —— 传输层不该知道 JSON-RPC 的错误码
23
+ * (见 `McpCore.rpcError`);
24
+ * ② 分派自身抛错**吞掉**:`callTool` 内部已兜住工具错,真漏出来的也不许把 server 带崩。
25
+ */
26
+ function dispatchLine(line, core, isClosed) {
27
+ let msg;
28
+ try {
29
+ msg = JSON.parse(line);
30
+ }
31
+ catch {
32
+ process.stdout.write(`${JSON.stringify(core.rpcError(null, -32700, '行不是合法 JSON'))}\n`);
33
+ return;
34
+ }
35
+ const ac = new AbortController();
36
+ const signal = core.trackCall(ac);
37
+ void core
38
+ .dispatch(msg, signal)
39
+ .then((resp) => {
40
+ if (resp !== null && !isClosed()) {
41
+ process.stdout.write(`${JSON.stringify(resp)}\n`);
42
+ }
43
+ })
44
+ .catch(() => {
45
+ /* 分派自身不该抛(callTool 内部已兜住);真抛了也不许把 server 带崩 */
46
+ })
47
+ .finally(() => core.untrackCall(ac));
48
+ }
15
49
  export function startStdioTransport(core) {
16
50
  // stdout 的 error **必须吞**:宿主先关读端、stdin 仍开着时,下一次应答写入就是异步
17
51
  // `write EPIPE` —— 未捕获会把 server 打成栈回溯 + exit 1(2026-09-27 ⑩),而它只是
@@ -63,28 +97,7 @@ export function startStdioTransport(core) {
63
97
  buf = buf.slice(nl + 1);
64
98
  if (line.trim() === '')
65
99
  continue;
66
- let msg;
67
- try {
68
- msg = JSON.parse(line);
69
- }
70
- catch {
71
- // 坏报文由**协议侧**定义形状:传输层不该知道 JSON-RPC 的错误码(见 McpCore.rpcError)
72
- process.stdout.write(`${JSON.stringify(core.rpcError(null, -32700, '行不是合法 JSON'))}\n`);
73
- continue;
74
- }
75
- const ac = new AbortController();
76
- const signal = core.trackCall(ac);
77
- void core
78
- .dispatch(msg, signal)
79
- .then((resp) => {
80
- if (resp !== null && !closed) {
81
- process.stdout.write(`${JSON.stringify(resp)}\n`);
82
- }
83
- })
84
- .catch(() => {
85
- /* 分派自身不该抛(callTool 内部已兜住);真抛了也不许把 server 带崩 */
86
- })
87
- .finally(() => core.untrackCall(ac));
100
+ dispatchLine(line, core, () => closed);
88
101
  }
89
102
  };
90
103
  process.stdin.setEncoding('utf8');
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-server-stdio.js","sourceRoot":"","sources":["../../src/engine/mcp-server-stdio.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp-server-stdio.js","sourceRoot":"","sources":["../../src/engine/mcp-server-stdio.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export declare const AGENTIA_VERSION = "0.10.0";
1
+ export declare const AGENTIA_VERSION = "0.10.2";
2
2
  export type { Trace, Span, SpanEvent, SpanError, SpanId, SpanKind, SpanLink, SpanStatus, TraceId, TraceContext, TraceSink, TraceRecordEvent, CapabilityType, Usage, Score, } from './core/trace.js';
3
3
  export { attachScore, parseTraceparent } from './core/trace.js';
4
4
  export type { AgentTool, ApprovalDecision, JsonSchema, ModelClient, RecorderBackend, SchemaInput, SchemaType, ToolRunContext, TypedSchema, } from './core/tool.js';
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- export const AGENTIA_VERSION = '0.10.0';
1
+ export const AGENTIA_VERSION = '0.10.2';
2
2
  export { attachScore, parseTraceparent } from './core/trace.js';
3
3
  export { validateJsonSchema } from './core/schema.js';
4
4
  export { combineSignals } from './core/abort.js';
@@ -1,4 +1,4 @@
1
- import { DEFAULT_CLIENT_INFO, DEFAULT_PROTOCOL_VERSION, MCP_DEFAULT_TIMEOUT_MS, brief, isJsonRpcResponse, unwrap, withDeadline, } from './mcp-protocol.js';
1
+ import { DEFAULT_CLIENT_INFO, DEFAULT_PROTOCOL_VERSION, MCP_DEFAULT_TIMEOUT_MS, assertToolResultNotError, canSelfHealSession, mcpHttpError, parseToolList, readMcpResult, readMcpText, withDeadline, } from './mcp-protocol.js';
2
2
  /**
3
3
  * **StreamableHTTP 连接器**:一个 endpoint,POST JSON-RPC(MCP 2025-03-26 起的
4
4
  * Streamable HTTP 传输)。
@@ -36,20 +36,6 @@ export function createStreamableHttpMcpConnector(url, opts = {}) {
36
36
  let reinit = null;
37
37
  let nextId = 1;
38
38
  const guard = (p, label) => withDeadline(p, timeoutMs, label);
39
- /** HTTP 层失败:带上数值 `status`,让 `classifyError` 能按状态分流 */
40
- const httpError = (status, method, body) => {
41
- const e = new Error(`MCP ${method} HTTP ${status}${body ? `:${body}` : ''}`);
42
- e.status = status;
43
- return e;
44
- };
45
- const readText = async (res) => {
46
- try {
47
- return await res.text();
48
- }
49
- catch {
50
- return '';
51
- }
52
- };
53
39
  const post = async (payload, o = {}) => {
54
40
  if (closed)
55
41
  throw new Error('MCP 连接器已 close —— 请重新创建一个');
@@ -73,55 +59,6 @@ export function createStreamableHttpMcpConnector(url, opts = {}) {
73
59
  sessionId = sid;
74
60
  return res;
75
61
  };
76
- /** 非 SSE 报文(单条 JSON-RPC)→ 取 result;SSE 里可能有别的通知帧,只取与 `id` 配对的 */
77
- const pickResult = (msg, id, method) => {
78
- // id 必须**等值**配对(与 SSE 分支同款):只验「是带 id 的响应」会把别的请求的
79
- // 结果当本次的返回(代理串包/通知帧),静默错值比报错难查得多。
80
- if (!isJsonRpcResponse(msg) || msg.id !== id) {
81
- throw new Error(`MCP ${method}:响应里没有 id 为 ${id} 的 JSON-RPC 报文`);
82
- }
83
- return unwrap(msg, method);
84
- };
85
- /**
86
- * 从响应取结果。SSE 分支一次性读完整个 body 再解析 —— StreamableHTTP 约定 server 发完
87
- * 响应即关流,读全比手写增量解析器稳(`text/event-stream` 里 `data:` 行按规范可跨多行拼接)。
88
- */
89
- const readResult = async (res, id, method) => {
90
- const ct = (res.headers.get('content-type') ?? '').toLowerCase();
91
- const text = await readText(res);
92
- if (ct.includes('text/event-stream')) {
93
- for (const frame of text.split(/\r?\n\r?\n/)) {
94
- const data = frame
95
- .split(/\r?\n/)
96
- .filter((l) => l.startsWith('data:'))
97
- .map((l) => l.slice(5).trim())
98
- .join('');
99
- if (data === '')
100
- continue;
101
- let msg;
102
- try {
103
- msg = JSON.parse(data);
104
- }
105
- catch {
106
- continue;
107
- }
108
- if (isJsonRpcResponse(msg) && msg.id === id)
109
- return unwrap(msg, method);
110
- }
111
- throw new Error(`MCP ${method}:SSE 响应里没有 id 为 ${id} 的报文`);
112
- }
113
- if (text.trim() === '') {
114
- throw new Error(`MCP ${method}:响应体为空(期望 id 为 ${id} 的 JSON-RPC 报文)`);
115
- }
116
- let msg;
117
- try {
118
- msg = JSON.parse(text);
119
- }
120
- catch {
121
- throw new Error(`MCP ${method}:响应不是合法 JSON:${brief(text)}`);
122
- }
123
- return pickResult(msg, id, method);
124
- };
125
62
  /**
126
63
  * 会话过期自愈的互斥:并发请求同时吃到 404 时**共享同一次重握手**。
127
64
  * 没有这层时,两个并发调用各自执行 `ready = null`(第二个会把第一个刚建的握手
@@ -154,20 +91,20 @@ export function createStreamableHttpMcpConnector(url, opts = {}) {
154
91
  const rpc = async (method, params, withVersion, allowReinit = true, abandoned) => {
155
92
  const id = nextId++;
156
93
  const res = await post({ jsonrpc: '2.0', id, method, params }, { withVersion, ...(abandoned !== undefined ? { signal: abandoned } : {}) });
157
- if (res.status === 404 && sessionId !== null && allowReinit) {
158
- await readText(res); // 排空,别把连接晾着
94
+ if (canSelfHealSession(res.status, sessionId !== null, allowReinit)) {
95
+ await readMcpText(res); // 排空,别把连接晾着
159
96
  opts.onSessionExpired?.();
160
97
  await reinitialize();
161
98
  // 自愈重试那次同样带上 abandoned —— 裁判放弃时两条在飞 fetch 都要被掐
162
99
  return rpc(method, params, withVersion, false, abandoned);
163
100
  }
164
101
  if (!res.ok)
165
- throw httpError(res.status, method, await readText(res));
102
+ throw mcpHttpError(res.status, method, await readMcpText(res));
166
103
  // 计时裁判权在调用方(initialize / notifications / tools/list 都在调用点自带
167
104
  // guard —— 它们是装配期路径、没有别的裁判);`tools/call` 不在此起计时器:
168
105
  // 它的裁判是引擎的 `toolTimeoutMs`(spec §10 2026-09-17 ① 超时单源化)——
169
106
  // 再包一层 guard 就是双计时器,同一事件两本账(stdio 侧就没有这层)。
170
- return readResult(res, id, method);
107
+ return readMcpResult(res, id, method);
171
108
  };
172
109
  const ensureReady = () => {
173
110
  if (ready)
@@ -181,33 +118,22 @@ export function createStreamableHttpMcpConnector(url, opts = {}) {
181
118
  }
182
119
  const res = await guard(post({ jsonrpc: '2.0', method: 'notifications/initialized', params: {} }, { withVersion: true }), 'notifications/initialized');
183
120
  if (!res.ok) {
184
- throw httpError(res.status, 'notifications/initialized', await readText(res));
121
+ throw mcpHttpError(res.status, 'notifications/initialized', await readMcpText(res));
185
122
  }
186
- await readText(res); // 排空:202 + 空体是合法应答,但别把连接晾着
123
+ await readMcpText(res); // 排空:202 + 空体是合法应答,但别把连接晾着
187
124
  })();
188
125
  return ready;
189
126
  };
190
127
  const listTools = async () => {
191
128
  await ensureReady();
192
129
  const r = await guard(rpc('tools/list', {}, true), 'tools/list');
193
- if (typeof r !== 'object' || r === null) {
194
- throw new Error(`MCP tools/list 返回了非对象:${brief(r)}`);
195
- }
196
- const listed = r.tools;
197
- if (listed === undefined)
198
- return [];
199
- if (!Array.isArray(listed)) {
200
- throw new Error(`MCP tools/list 的 tools 不是数组:${brief(listed)}`);
201
- }
202
- return listed;
130
+ return parseToolList(r);
203
131
  };
204
132
  const callTool = async (name, args, callOpts) => {
205
133
  await ensureReady();
206
134
  const r = await rpc('tools/call', { name, arguments: args }, true, true, callOpts?.abandoned);
207
- // 承重同 stdio:协议层 isError 只有连接器看得见
208
- if (typeof r === 'object' && r !== null && r.isError) {
209
- throw new Error(`MCP 工具 ${name} 返回 isError: ${brief(r.content)}`);
210
- }
135
+ // 承重同 stdio:协议层 isError 只有连接器看得见(判定与文案在 mcp-protocol.ts)
136
+ assertToolResultNotError(r, name);
211
137
  return r;
212
138
  };
213
139
  return {
@@ -228,7 +154,7 @@ export function createStreamableHttpMcpConnector(url, opts = {}) {
228
154
  // **抛错**,兜不住**挂死** —— server 接受连接后不回(半开 / 卡在代理后面),
229
155
  // `close()` 就永久挂住,而调用方(宿主停机路径)会一直等它。**挂住比失败更糟**,
230
156
  // 与「best-effort、不抛错」的承诺相悖。fetch 与排空**一起**进 guard:
231
- // 只护住响应头、body 照样能卡(`readText` 读的是 body)。
157
+ // 只护住响应头、body 照样能卡(`readMcpText` 读的是 body)。
232
158
  await guard((async () => {
233
159
  const res = await fetchImpl(url, {
234
160
  method: 'DELETE',
@@ -238,7 +164,7 @@ export function createStreamableHttpMcpConnector(url, opts = {}) {
238
164
  'mcp-protocol-version': negotiated,
239
165
  },
240
166
  });
241
- await readText(res);
167
+ await readMcpText(res);
242
168
  })(), 'close');
243
169
  }
244
170
  catch {
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-http.js","sourceRoot":"","sources":["../../src/integrations/mcp-http.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp-http.js","sourceRoot":"","sources":["../../src/integrations/mcp-http.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,wBAAwB,EACxB,sBAAsB,EACtB,wBAAwB,EACxB,kBAAkB,EAClB,YAAY,EACZ,aAAa,EACb,aAAa,EACb,WAAW,EACX,YAAY,GACb,MAAM,mBAAmB,CAAC;AA2B3B;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,gCAAgC,CAC9C,GAAW,EACX,IAAI,GAAsC,EAAE;IAE5C,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,EAAE,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC/D,CAAC;IACD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC;IAC1C,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,sBAAsB,CAAC;IAC3D,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,mBAAmB,CAAC;IAC1D,MAAM,gBAAgB,GAAG,IAAI,CAAC,eAAe,IAAI,wBAAwB,CAAC;IAC1E,MAAM,WAAW,GAA2B;QAC1C,cAAc,EAAE,kBAAkB;QAClC,8CAA8C;QAC9C,MAAM,EAAE,qCAAqC;QAC7C,GAAG,IAAI,CAAC,OAAO;KAChB,CAAC;IAEF,IAAI,SAAS,GAAkB,IAAI,CAAC;IACpC,IAAI,UAAU,GAAG,gBAAgB,CAAC;IAClC,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,IAAI,KAAK,GAAyB,IAAI,CAAC;IACvC,IAAI,MAAM,GAAyB,IAAI,CAAC;IACxC,IAAI,MAAM,GAAG,CAAC,CAAC;IAEf,MAAM,KAAK,GAAU,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;IAErE,MAAM,IAAI,GAAG,KAAK,EAChB,OAAgB,EAChB,CAAC,GAAoD,EAAE,EACpC,EAAE;QACrB,IAAI,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QACzD,MAAM,OAAO,GAA2B,EAAE,GAAG,WAAW,EAAE,CAAC;QAC3D,IAAI,SAAS,KAAK,IAAI;YAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,SAAS,CAAC;QAC9D,IAAI,CAAC,CAAC,WAAW;YAAE,OAAO,CAAC,sBAAsB,CAAC,GAAG,UAAU,CAAC;QAChE,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE;YAC/B,MAAM,EAAE,MAAM;YACd,OAAO;YACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;YAC7B,4DAA4D;YAC5D,qDAAqD;YACrD,8CAA8C;YAC9C,GAAG,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACxD,CAAC,CAAC;QACH,mDAAmD;QACnD,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAC9C,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,EAAE;YAAE,SAAS,GAAG,GAAG,CAAC;QAChD,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;IAEF;;;;;;OAMG;IACH,MAAM,YAAY,GAAG,GAAkB,EAAE;QACvC,IAAI,MAAM;YAAE,OAAO,MAAM,CAAC;QAC1B,MAAM,GAAG,CAAC,KAAK,IAAI,EAAE;YACnB,SAAS,GAAG,IAAI,CAAC;YACjB,KAAK,GAAG,IAAI,CAAC,CAAC,wBAAwB;YACtC,MAAM,WAAW,EAAE,CAAC;QACtB,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE;YAChB,MAAM,GAAG,IAAI,CAAC;QAChB,CAAC,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;IAEF;;;;;;;;;OASG;IACH,MAAM,GAAG,GAAG,KAAK,EACf,MAAc,EACd,MAAe,EACf,WAAoB,EACpB,WAAW,GAAG,IAAI,EAClB,SAAuB,EACL,EAAE;QACpB,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;QACpB,MAAM,GAAG,GAAG,MAAM,IAAI,CACpB,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EACtC,EAAE,WAAW,EAAE,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAC3E,CAAC;QACF,IAAI,kBAAkB,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,KAAK,IAAI,EAAE,WAAW,CAAC,EAAE,CAAC;YACpE,MAAM,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY;YACpC,IAAI,CAAC,gBAAgB,EAAE,EAAE,CAAC;YAC1B,MAAM,YAAY,EAAE,CAAC;YACrB,+CAA+C;YAC/C,OAAO,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;QAC5D,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,MAAM,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;QAC5E,4DAA4D;QAC5D,kDAAkD;QAClD,0DAA0D;QAC1D,2CAA2C;QAC3C,OAAO,aAAa,CAAC,GAAG,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;IACxC,CAAC,CAAC;IAEF,MAAM,WAAW,GAAG,GAAkB,EAAE;QACtC,IAAI,KAAK;YAAE,OAAO,KAAK,CAAC;QACxB,KAAK,GAAG,CAAC,KAAK,IAAI,EAAE;YAClB,MAAM,IAAI,GAAG,MAAM,KAAK,CACtB,GAAG,CACD,YAAY,EACZ,EAAE,eAAe,EAAE,gBAAgB,EAAE,YAAY,EAAE,EAAE,EAAE,UAAU,EAAE,EACnE,KAAK,CACN,EACD,YAAY,CACb,CAAC;YACF,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;gBAC9C,MAAM,CAAC,GAAI,IAAsC,CAAC,eAAe,CAAC;gBAClE,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,EAAE;oBAAE,UAAU,GAAG,CAAC,CAAC;YACxD,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,KAAK,CACrB,IAAI,CACF,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,2BAA2B,EAAE,MAAM,EAAE,EAAE,EAAE,EACnE,EAAE,WAAW,EAAE,IAAI,EAAE,CACtB,EACD,2BAA2B,CAC5B,CAAC;YACF,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;gBACZ,MAAM,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,2BAA2B,EAAE,MAAM,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;YACtF,CAAC;YACD,MAAM,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,2BAA2B;QACrD,CAAC,CAAC,EAAE,CAAC;QACL,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG,KAAK,IAA4B,EAAE;QACnD,MAAM,WAAW,EAAE,CAAC;QACpB,MAAM,CAAC,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,YAAY,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,YAAY,CAAC,CAAC;QACjE,OAAO,aAAa,CAAC,CAAC,CAAC,CAAC;IAC1B,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,KAAK,EACpB,IAAY,EACZ,IAA6B,EAC7B,QAAsC,EACpB,EAAE;QACpB,MAAM,WAAW,EAAE,CAAC;QACpB,MAAM,CAAC,GAAG,MAAM,GAAG,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC9F,yDAAyD;QACzD,wBAAwB,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QAClC,OAAO,CAAC,CAAC;IACX,CAAC,CAAC;IAEF,OAAO;QACL,SAAS;QACT,QAAQ;QACR,KAAK,CAAC,KAAK;YACT,IAAI,MAAM;gBAAE,OAAO;YACnB,MAAM,GAAG,IAAI,CAAC;YACd,MAAM,GAAG,GAAG,SAAS,CAAC;YACtB,SAAS,GAAG,IAAI,CAAC;YACjB,IAAI,GAAG,KAAK,IAAI;gBAAE,OAAO;YACzB,IAAI,CAAC;gBACH,mDAAmD;gBACnD,EAAE;gBACF,kEAAkE;gBAClE,mDAAmD;gBACnD,iDAAiD;gBACjD,kDAAkD;gBAClD,4CAA4C;gBAC5C,MAAM,KAAK,CACT,CAAC,KAAK,IAAI,EAAE;oBACV,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE;wBAC/B,MAAM,EAAE,QAAQ;wBAChB,OAAO,EAAE;4BACP,GAAG,WAAW;4BACd,gBAAgB,EAAE,GAAG;4BACrB,sBAAsB,EAAE,UAAU;yBACnC;qBACF,CAAC,CAAC;oBACH,MAAM,WAAW,CAAC,GAAG,CAAC,CAAC;gBACzB,CAAC,CAAC,EAAE,EACJ,OAAO,CACR,CAAC;YACJ,CAAC;YAAC,MAAM,CAAC;gBACP,6CAA6C;YAC/C,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}