evolcore 0.0.19 → 0.0.21

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 (136) hide show
  1. package/CHANGELOG.md +43 -1
  2. package/README.md +60 -9
  3. package/bin/install-codex-managed-hooks.mjs +61 -0
  4. package/dist/agents/baseagent.js +10 -6
  5. package/dist/agents/claude-runner.js +383 -111
  6. package/dist/agents/codex-app-server-client.js +10 -2
  7. package/dist/agents/codex-runner.js +405 -137
  8. package/dist/agents/ecagent-runner.js +174 -63
  9. package/dist/agents/gemini-runner.js +130 -30
  10. package/dist/agents/request-identity.js +25 -0
  11. package/dist/agents/runner-types.js +19 -0
  12. package/dist/aun/aid/agentmd.js +66 -2
  13. package/dist/aun/aid/identity.js +4 -1
  14. package/dist/aun/aid/index.js +1 -1
  15. package/dist/aun/msg/group.js +86 -9
  16. package/dist/aun/msg/history.js +213 -36
  17. package/dist/aun/msg/managed-operation.js +58 -9
  18. package/dist/aun/msg/p2p.js +26 -11
  19. package/dist/aun/outbox.js +295 -68
  20. package/dist/aun/service-proxy.js +43 -25
  21. package/dist/channels/aun.js +1004 -273
  22. package/dist/channels/daemon.js +6 -1
  23. package/dist/cli/agent-command.js +4 -3
  24. package/dist/cli/agent.js +66 -56
  25. package/dist/cli/aun-commands.js +177 -42
  26. package/dist/cli/command-log.js +10 -11
  27. package/dist/cli/contact.js +1 -0
  28. package/dist/cli/daemon-commands.js +81 -121
  29. package/dist/cli/index.js +1 -0
  30. package/dist/cli/init.js +76 -24
  31. package/dist/cli/restart-monitor.js +3 -3
  32. package/dist/cli/task-context.js +46 -0
  33. package/dist/cli/trigger-command.js +1 -1
  34. package/dist/cli/watch-logs.js +10 -3
  35. package/dist/config/builtin-roles.js +1 -0
  36. package/dist/config/config-field-policy.js +16 -5
  37. package/dist/config/config-manager.js +226 -24
  38. package/dist/config/config-operation-service.js +1 -2
  39. package/dist/config/contact-operation-service.js +32 -1
  40. package/dist/config/contact-request-service.js +44 -0
  41. package/dist/config/daemon-services.js +186 -0
  42. package/dist/config/gateway-config.js +29 -16
  43. package/dist/config/lifecycle.js +16 -5
  44. package/dist/config/role-service.js +54 -3
  45. package/dist/config/schema-migration.js +550 -0
  46. package/dist/config-store.js +161 -12
  47. package/dist/core/agent-application-service.js +279 -0
  48. package/dist/core/audit/log-integrity.js +102 -0
  49. package/dist/core/auth/agent-delegation.js +31 -1
  50. package/dist/core/auth/auth-gateway.js +33 -4
  51. package/dist/core/auth/authorization-audit.js +155 -4
  52. package/dist/core/auth/operation-authorizer.js +41 -1
  53. package/dist/core/auth/operation-catalog.js +9 -1
  54. package/dist/core/bootstrap-messages.js +2 -2
  55. package/dist/core/bootstrap-service.js +27 -38
  56. package/dist/core/causation/aun-association.js +7 -4
  57. package/dist/core/channel-loader.js +0 -2
  58. package/dist/core/command/agent-control.js +56 -16
  59. package/dist/core/command/command-handler.js +290 -44
  60. package/dist/core/command/connect-menu.js +3 -4
  61. package/dist/core/command/group-menu.js +5 -7
  62. package/dist/core/command/menu-handler.js +279 -80
  63. package/dist/core/command/role-menu.js +21 -11
  64. package/dist/core/command/slash-gate.js +85 -18
  65. package/dist/core/command/slash-handler.js +350 -32
  66. package/dist/core/event-catalog.js +5 -0
  67. package/dist/core/evolagent.js +9 -4
  68. package/dist/core/handoff/dispatcher.js +4 -0
  69. package/dist/core/handoff/runtime.js +10 -0
  70. package/dist/core/handoff/store.js +32 -9
  71. package/dist/core/inference/text-inference.js +7 -15
  72. package/dist/core/message/im-renderer.js +83 -84
  73. package/dist/core/message/{inbound-admission.js → message-admission.js} +51 -1
  74. package/dist/core/message/message-bridge.js +124 -10
  75. package/dist/core/message/message-log.js +14 -7
  76. package/dist/core/message/message-queue.js +206 -16
  77. package/dist/core/message/message-utils.js +12 -5
  78. package/dist/core/message/response-engine.js +495 -72
  79. package/dist/core/message/send-receipt.js +1 -0
  80. package/dist/core/message/stream-debouncer.js +9 -2
  81. package/dist/core/model/model-catalog.js +23 -15
  82. package/dist/core/model/model-diagnostics.js +28 -10
  83. package/dist/core/permission/approval-gateway.js +180 -6
  84. package/dist/core/permission/ec-command-parser.js +465 -56
  85. package/dist/core/permission/mode.js +18 -3
  86. package/dist/core/{protected-paths.js → permission/protected-paths.js} +17 -5
  87. package/dist/core/permission/readonly-shell-query.js +263 -9
  88. package/dist/core/permission/sandbox-runtime.js +205 -13
  89. package/dist/core/permission/tool-policy.js +673 -62
  90. package/dist/core/relation/peer-identity.js +18 -0
  91. package/dist/core/session/session-fs-store.js +154 -5
  92. package/dist/core/session/session-manager.js +299 -30
  93. package/dist/core/session/session-renew.js +19 -12
  94. package/dist/core/session/session-turn-coordinator.js +11 -4
  95. package/dist/eck/kit-renderer.js +18 -9
  96. package/dist/index.js +283 -65
  97. package/dist/ipc.js +374 -24
  98. package/dist/paths.js +64 -7
  99. package/dist/response-system/context-builder.js +1 -7
  100. package/dist/trigger/anomaly-store.js +1 -0
  101. package/dist/trigger/feedback.js +56 -5
  102. package/dist/trigger/history.js +79 -4
  103. package/dist/trigger/legacy-session-history.js +2 -2
  104. package/dist/trigger/parser.js +3 -2
  105. package/dist/trigger/validation.js +6 -1
  106. package/dist/utils/atomic-write.js +27 -0
  107. package/dist/utils/ecweb-utils.js +16 -2
  108. package/dist/utils/error-utils.js +4 -1
  109. package/dist/utils/logger.js +21 -2
  110. package/dist/utils/process-tree-stats.js +24 -4
  111. package/dist/utils/process-tree-worker.js +31 -0
  112. package/dist/utils/project-path.js +1 -2
  113. package/dist/utils/stats.js +52 -18
  114. package/dist/utils/welcome.js +2 -2
  115. package/kits/docs/INDEX.md +1 -1
  116. package/kits/docs/evolcore/INDEX.md +1 -1
  117. package/kits/docs/evolcore/contact.md +7 -1
  118. package/kits/docs/evolcore/msg.md +16 -0
  119. package/kits/rules/01-overview.md +1 -1
  120. package/kits/rules/03-identity.md +1 -1
  121. package/kits/rules/05-venue.md +1 -1
  122. package/kits/schemas/_meta.json +10 -5
  123. package/kits/schemas/agent-config.schema.10.json +2 -1
  124. package/kits/schemas/agent-config.schema.11.json +421 -0
  125. package/kits/schemas/daemon.schema.5.json +135 -0
  126. package/kits/schemas/daemon.schema.6.json +131 -0
  127. package/kits/schemas/defaults.schema.5.json +119 -0
  128. package/kits/schemas/migrations/README.md +3 -1
  129. package/kits/schemas/relation-config.schema.8.json +13 -0
  130. package/kits/schemas/role-config.schema.1.json +1 -2
  131. package/kits/schemas/single-session.schema.3.json +32 -0
  132. package/kits/templates/roles/admin.json +1 -0
  133. package/kits/templates/roles/member.json +1 -0
  134. package/kits/templates/roles/visitor.json +1 -0
  135. package/package.json +7 -3
  136. package/skills/eclink/SKILL.md +2 -0
package/CHANGELOG.md CHANGED
@@ -3,6 +3,48 @@
3
3
  本文件记录 EvolCore 的重要变更。EvolClaw 版本线的历史记录已归档至
4
4
  [`docs/_archive/CHANGELOG-evolclaw.md`](docs/_archive/CHANGELOG-evolclaw.md)。
5
5
 
6
+ ## 0.0.21 (2026-09-03)
7
+
8
+ ### 话题与权限控制
9
+
10
+ - 新增话题 `/renew`,支持在空闲状态下安全续接话题后端会话,并强化并发操作与异常恢复处理。
11
+ - 新增 `/fa`、`/fullaccess` 和持久 Fullaccess Trigger,统一 daemon-owner 授权、可信运行身份与审计记录。
12
+
13
+ ### 服务与消息管理
14
+
15
+ - 统一本机服务和 AUN Service Proxy 的配置与旧版迁移,支持按实例配置本机服务及代理。
16
+ - `ec msg history` 支持按完整渠道实例和原生对端 ID 查询已落盘的非 AUN 私聊历史。
17
+
18
+ ### AUN 投递与联系人
19
+
20
+ - 完善 AUN Outbox 投递与回执处理,覆盖排队、重试、过期和永久失败等状态。
21
+ - 新增联系人申请与 Owner 审核流程,并将联系人策略应用到托管私聊的入站和出站准入。
22
+
23
+ ### 安全与运行兼容
24
+
25
+ - 加固 Codex Shell 载体解析、受管权限校验和受保护路径沙箱边界,并将受保护路径策略归入权限模块。
26
+ - 统一 BaseAgent 请求地址和身份请求头处理,升级 AUN SDK 至 0.5.10,并兼容 Node.js 22.16.0。
27
+
28
+ ## 0.0.20 (2026-08-28)
29
+
30
+ ### AUN 网关与投递可靠性
31
+
32
+ - 接入 SDK 网关发现结果,校验消息 ID、投递状态和显式路由,区分永久失败与可重试失败。
33
+ - Outbox 保留永久失败诊断,并以路由条件更新避免并发投递覆盖修正后的目标。
34
+
35
+ ### Bootstrap 与配置生命周期
36
+
37
+ - 收紧 Bootstrap 消息路由和 Agent 生命周期门禁,补充配置兼容校验及 `ec init` 的 ecagent 配置交互。
38
+ - 增加 Agent、Daemon 和默认配置 schema 版本,权限审计记录命中的策略路径。
39
+
40
+ ### 观察者模式
41
+
42
+ - 观察者模式默认开启,显式设置 `false` 才关闭并持久化覆盖。
43
+
44
+ ### 跨平台运行与安装
45
+
46
+ - 统一运行时根目录解析,延长 Windows Daemon IPC 优雅关闭等待,并完善 Codex 受管目录安装准备。
47
+
6
48
  ## 0.0.19 (2026-08-27)
7
49
 
8
50
  ### PowerShell EC 命令安全
@@ -18,7 +60,7 @@
18
60
  ### 跨平台安装与诊断
19
61
 
20
62
  - Windows 数据迁移固定调用系统 `bsdtar`,避免 Git Bash GNU tar 误解析 Windows 绝对路径。
21
- - Linux 安装器幂等创建真实 `/etc/codex` 目录,拒绝同名文件和符号链接。
63
+ - Linux 公开安装器与 npm 全局安装/升级均幂等创建真实 `/etc/codex` 目录;root 历史实例可在启动任务时自愈缺失目录,同名文件和符号链接仍被拒绝。
22
64
  - 统一数据根解析,仅使用 `EVOLCORE_HOME` 或 `~/.evolcore`,避免因启动目录不同误用数据目录。
23
65
  - `ec start` 已运行提示新增 Daemon 持续运行时长,并支持 IPC uptime 回退探测。
24
66
 
package/README.md CHANGED
@@ -78,7 +78,7 @@ ResponseEngine.processMessage()
78
78
  ### 环境要求
79
79
 
80
80
  - **操作系统**:macOS / Linux / Windows
81
- - **Node.js** >= 22.19.0(依赖 `node:sqlite`)
81
+ - **Node.js** >= 22.16.0(依赖 `node:sqlite`,并与 AUN SDK 要求保持一致)
82
82
  - **Claude Code** >= 2.1.32(`npm install -g @anthropic-ai/claude-code`)
83
83
 
84
84
  ### 1. 安装
@@ -103,6 +103,8 @@ curl -fsSL https://download.evolai.cn/install.sh | bash
103
103
  npm install -g evolcore
104
104
  ```
105
105
 
106
+ Linux 全局安装会在 `postinstall` 阶段准备 Codex 受管运行所需的真实目录 `/etc/codex`。如果当前 npm 全局目录属于普通用户且该系统目录尚不存在,请先执行 `sudo install -d -m 0755 /etc/codex`,再重新安装。
107
+
106
108
  > **Windows 用户**:首次运行前可能需要执行 `Set-ExecutionPolicy RemoteSigned -Scope CurrentUser`
107
109
 
108
110
  **从源码安装**:
@@ -141,7 +143,7 @@ ec init aun
141
143
  ```
142
144
 
143
145
  交互式引导完成以下配置:
144
- - 环境检查(Node.js >= 22、claude CLI、SDK 版本)
146
+ - 环境检查(Node.js >= 22.16.0、claude CLI、SDK 版本)
145
147
  - 渠道选择(飞书 / 微信 / 钉钉 / QQ 频道 / 企业微信 / AUN)并扫码登录
146
148
  - 默认项目路径
147
149
  - 模型选择(sonnet/opus/haiku)
@@ -175,8 +177,8 @@ ec init aun
175
177
  - `model`:配置文件 → `~/.claude/settings.json` → 默认 `sonnet`
176
178
  - `effort`:配置文件 → `~/.claude/settings.json` → SDK 默认值(`auto`)
177
179
 
178
- Claude/Codex 兼容网关需要额外请求头或查询参数时,可以直接在 EvolCore 的
179
- `baseagents` 配置中设置,不需要修改 Claude/Codex 的全局配置文件:
180
+ ClaudeCodex 或 EC Agent 兼容网关需要额外请求头或查询参数时,可以直接在 EvolCore 的
181
+ `baseagents` 配置中设置,不需要修改各 base agent 的全局配置文件:
180
182
 
181
183
  ```json
182
184
  {
@@ -198,6 +200,15 @@ Claude/Codex 兼容网关需要额外请求头或查询参数时,可以直接
198
200
  "queryParams": {
199
201
  "source": "evolcore"
200
202
  }
203
+ },
204
+ "ecagent": {
205
+ "baseUrl": "https://example.com/ecagent/v1",
206
+ "headers": {
207
+ "X-Tenant-Id": "${TENANT_ID}"
208
+ },
209
+ "queryParams": {
210
+ "source": "evolcore"
211
+ }
201
212
  }
202
213
  }
203
214
  }
@@ -205,9 +216,48 @@ Claude/Codex 兼容网关需要额外请求头或查询参数时,可以直接
205
216
 
206
217
  `${VAR}` 会按 EvolCore 的环境变量规则展开。Claude 通过 `ANTHROPIC_CUSTOM_HEADERS`
207
218
  传递 Header;Codex app-server 启动时由 EvolCore 注入 `env_http_headers` 和
208
- `query_params`,所以不需要手改 `~/.codex/config.toml`。`queryParams` 不应放置密钥等敏感信息。
219
+ `query_params`;EC Agent 主推理、模型列表和辅助推理直接在请求 URL 上追加参数。
220
+ 因此不需要手改 Claude/Codex 的全局配置文件。`queryParams` 不应放置密钥等敏感信息。
221
+
222
+ 完整设计、运行链路和排障说明见:[Baseagent 自定义请求元数据技术文档](docs/baseagent-request-metadata.md)。
223
+
224
+ ### Baseagent 模型与备用链
225
+
226
+ Session Renew 的辅助模型配置与主模型、推理强度放在同一个
227
+ `baseagents.<baseagent>` 块中,与 `responseMode` 正交。主模型故障备用链
228
+ `fallbackModels` 只在 `agents/defaults.json` 中配置:
229
+
230
+ ```jsonc
231
+ {
232
+ "baseagents": {
233
+ "claude": {
234
+ "model": "claude-opus",
235
+ "effort": "medium",
236
+ "auxiliaryModel": "claude-haiku-4-5-20251001",
237
+ "auxiliaryEffort": "low",
238
+ "fallbackModels": [
239
+ { "model": "claude-sonnet-4-5", "effort": "medium" },
240
+ { "model": "claude-haiku-4-5", "effort": "low" }
241
+ ]
242
+ },
243
+ "codex": {
244
+ "model": "gpt-5.6",
245
+ "effort": "high",
246
+ "auxiliaryModel": "gpt-5.6-sol",
247
+ "auxiliaryEffort": "medium",
248
+ "fallbackModels": [
249
+ { "model": "gpt-5.4", "effort": "medium" }
250
+ ]
251
+ }
252
+ }
253
+ }
254
+ ```
255
+
256
+ `auxiliaryEffort` 必须与同一 baseagent 块中的 `auxiliaryModel` 一起配置;未配置辅助模型时,
257
+ Session Renew 按 `session_renew.fallback_action` 处理。`fallbackModels` 不会被辅助推理使用。
209
258
 
210
- 完整设计、运行链路和排障说明见:[Claude/Codex 自定义请求元数据技术文档](docs/baseagent-request-metadata.md)。
259
+ 升级旧版本时,daemon 启动前会自动把模式桶中的辅助字段迁移到对应的 baseagent 块并创建备份。
260
+ 迁移逻辑集中在 `src/config/schema-migration.ts`,运行时不会回退读取旧字段。
211
261
 
212
262
  ### 3. 运行
213
263
 
@@ -267,10 +317,11 @@ evolcore/
267
317
  │ │ │ ├── session-fs-store.ts # 文件系统存储原语
268
318
  │ │ │ └── session-manager.ts # 会话管理(多项目支持)
269
319
  │ │ ├── auth/ # 授权审计与 Trigger 鉴权
320
+ │ │ ├── permission/ # 权限策略与沙箱边界
321
+ │ │ │ └── protected-paths.ts # 受保护路径分级
270
322
  │ │ ├── evolagent.ts # EvolAgent 实体
271
323
  │ │ ├── evolagent-registry.ts # Agent 注册表(扫描/路由/热重载)
272
- │ │ ├── interaction-router.ts # 卡片交互回调路由
273
- │ │ └── protected-paths.ts # 受保护路径分级
324
+ │ │ └── interaction-router.ts # 卡片交互回调路由
274
325
  │ ├── channels/
275
326
  │ │ ├── feishu.ts # 飞书 WebSocket 渠道
276
327
  │ │ ├── wechat.ts # 微信 ClawBot 渠道
@@ -378,7 +429,7 @@ v3.2 新增进程级身份标识。启动时自动生成 `ec+5位数字.agentid.
378
429
 
379
430
  ## 技术栈
380
431
 
381
- - **运行时**:Node.js >= 22 + TypeScript(ES modules)
432
+ - **运行时**:Node.js >= 22.16.0 + TypeScript(ES modules)
382
433
  - **AI 后端**:@anthropic-ai/claude-agent-sdk 0.3.220(固定版本)、Codex CLI app-server、Gemini CLI
383
434
  - **消息渠道**:飞书(@larksuiteoapi/node-sdk)、微信(ClawBot ilink API)、钉钉(dingtalk-stream)、QQ频道(pure-qqbot)、企业微信(AI Bot API)、AUN 网络
384
435
  - **数据存储**:文件系统(per-chat 目录) + JSONL(CLI 共用)
@@ -18,6 +18,59 @@ function fail(message) {
18
18
  process.exit(1);
19
19
  }
20
20
 
21
+ function isGlobalInstall() {
22
+ return ['1', 'true'].includes(String(process.env.npm_config_global || '').toLowerCase());
23
+ }
24
+
25
+ function ensureRealDirectory(directory) {
26
+ let stat;
27
+ try {
28
+ stat = fs.lstatSync(directory);
29
+ } catch (error) {
30
+ if (error?.code !== 'ENOENT') {
31
+ fail(`could not inspect the Codex managed requirements mountpoint ${directory}: ${error?.message || String(error)}`);
32
+ }
33
+ }
34
+
35
+ if (stat) {
36
+ if (!stat.isDirectory() || stat.isSymbolicLink()) {
37
+ fail(`Codex managed requirements mountpoint is unsafe: ${directory} must be a real directory.`);
38
+ }
39
+ return;
40
+ }
41
+
42
+ try {
43
+ fs.mkdirSync(directory, { mode: 0o755 });
44
+ fs.chmodSync(directory, 0o755);
45
+ } catch (error) {
46
+ if (error?.code === 'EEXIST') {
47
+ const raced = fs.lstatSync(directory);
48
+ if (raced.isDirectory() && !raced.isSymbolicLink()) return;
49
+ }
50
+ fail(
51
+ `Linux global installation requires the real directory ${directory}, but it could not be created: `
52
+ + `${error?.message || String(error)}. `
53
+ + `Create it first with: sudo install -d -m 0755 ${directory}`,
54
+ );
55
+ }
56
+
57
+ const created = fs.lstatSync(directory);
58
+ if (!created.isDirectory() || created.isSymbolicLink()) {
59
+ fail(`Codex managed requirements mountpoint provisioning failed: ${directory} must be a real directory.`);
60
+ }
61
+ process.stdout.write(`[evolcore] Prepared Codex managed requirements mountpoint at ${directory}.\n`);
62
+ }
63
+
64
+ function runLinuxPostinstall() {
65
+ const explicitMountpoint = argument('--mountpoint');
66
+ if (process.platform !== 'linux') return;
67
+ // Local source installs do not launch the Linux Codex guard and must not
68
+ // mutate machine-wide configuration. An explicit path is accepted only for
69
+ // isolated lifecycle behavior tests.
70
+ if (!isGlobalInstall() && !explicitMountpoint) return;
71
+ ensureRealDirectory(explicitMountpoint || '/etc/codex');
72
+ }
73
+
21
74
  function tomlString(value) {
22
75
  return JSON.stringify(value);
23
76
  }
@@ -139,6 +192,14 @@ try {
139
192
  }
140
193
 
141
194
  function main() {
195
+ if (process.env.npm_lifecycle_event === 'postinstall') {
196
+ runLinuxPostinstall();
197
+ return;
198
+ }
199
+ if (process.platform === 'linux' && argument('--mountpoint')) {
200
+ runLinuxPostinstall();
201
+ return;
202
+ }
142
203
  if (process.platform !== 'win32' && !argument('--requirements')) {
143
204
  fail('Codex managed hook provisioning is only supported on Windows.');
144
205
  }
@@ -28,12 +28,16 @@ const BASEAGENT_ALIASES = {
28
28
  geminicli: { canonical: 'gemini', displayName: 'Gemini CLI' },
29
29
  ecagent: { canonical: 'ecagent', displayName: 'ecagent' },
30
30
  'ec-agent': { canonical: 'ecagent', displayName: 'ecagent' },
31
- hermes: { canonical: 'hermes', displayName: 'Hermes' },
32
31
  };
32
+ const SUPPORTED_BASEAGENTS = new Set(['claude', 'codex', 'gemini', 'ecagent']);
33
33
  export function normalizeBaseagent(input) {
34
34
  const key = String(input || '').trim().toLowerCase().replace(/_/g, '-');
35
35
  return BASEAGENT_ALIASES[key] || { canonical: 'unknown', displayName: input ? String(input) : 'Unknown' };
36
36
  }
37
+ export function isSupportedBaseagent(input) {
38
+ const key = String(input || '').trim().toLowerCase();
39
+ return SUPPORTED_BASEAGENTS.has(key);
40
+ }
37
41
  function directInferencePair(apiKey, baseUrl) {
38
42
  const normalizedApiKey = directInferenceValue(apiKey);
39
43
  const normalizedBaseUrl = directInferenceValue(baseUrl);
@@ -232,7 +236,7 @@ export function resolveOpenaiDirectConfig(override) {
232
236
  }
233
237
  : undefined;
234
238
  }
235
- export function resolveOpenaiConfig(config, override) {
239
+ export function resolveOpenaiConfig(config, override, runtime) {
236
240
  const codexSettings = loadCodexSettings();
237
241
  const isPlaceholder = (v) => !v || v.includes('your-') || v.includes('placeholder');
238
242
  const overrideApiKey = isPlaceholder(override?.apiKey) ? undefined : override?.apiKey;
@@ -279,8 +283,8 @@ export function resolveOpenaiConfig(config, override) {
279
283
  effort,
280
284
  enableRequestUserInput,
281
285
  approvalsReviewer,
282
- evolcoreAgentAid: override?.evolcoreAgentAid ?? config.agents?.codex?.evolcoreAgentAid,
283
- evolcoreAgentConfig: override?.evolcoreAgentConfig ?? config.agents?.codex?.evolcoreAgentConfig,
286
+ agentAid: runtime?.agentAid,
287
+ agentConfig: runtime?.agentConfig,
284
288
  };
285
289
  }
286
290
  export function resolveGoogleConfig(config, override) {
@@ -328,18 +332,18 @@ export function resolveEcagentConfig(config, override) {
328
332
  || DEFAULT_ECAGENT_BASE_URL;
329
333
  const model = override?.model || configured?.model || DEFAULT_ECAGENT_MODEL;
330
334
  const headers = normalizeStringMap(override?.headers ?? configured?.headers, 'headers');
335
+ const queryParams = normalizeStringMap(override?.queryParams ?? configured?.queryParams, 'queryParams');
331
336
  const effort = override?.effort ?? configured?.effort;
332
337
  const numberOr = (value, fallback) => (typeof value === 'number' && Number.isFinite(value) && value >= 0 ? value : fallback);
333
338
  return {
334
339
  apiKey,
335
340
  baseUrl,
336
341
  headers,
342
+ queryParams,
337
343
  model,
338
344
  effort,
339
345
  timeoutMs: numberOr(override?.timeoutMs ?? configured?.timeoutMs, DEFAULT_ECAGENT_TIMEOUT_MS),
340
346
  maxRetries: numberOr(override?.maxRetries ?? configured?.maxRetries, DEFAULT_ECAGENT_MAX_RETRIES),
341
347
  maxRetryDelayMs: numberOr(override?.maxRetryDelayMs ?? configured?.maxRetryDelayMs, DEFAULT_ECAGENT_MAX_RETRY_DELAY_MS),
342
- evolcoreAgentAid: configured?.evolcoreAgentAid,
343
- evolcoreAgentConfig: configured?.evolcoreAgentConfig,
344
348
  };
345
349
  }