evolcore 0.0.25 → 0.0.27

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 (304) hide show
  1. package/CHANGELOG.md +632 -565
  2. package/LICENSE +21 -21
  3. package/README.md +455 -455
  4. package/bin/codex-managed-acl.ps1 +203 -160
  5. package/bin/codex-managed-hook.mjs +208 -208
  6. package/bin/ec-safe-output.js +327 -327
  7. package/bin/ec.js +40 -29
  8. package/bin/install-codex-managed-hooks.mjs +582 -555
  9. package/dist/agents/baseagent-availability.js +68 -0
  10. package/dist/agents/baseagent.js +96 -46
  11. package/dist/agents/claude-runner.js +172 -33
  12. package/dist/agents/codex/app-server-client.js +76 -31
  13. package/dist/agents/codex/catalog.js +1 -1
  14. package/dist/agents/codex/diagnostics.js +34 -1
  15. package/dist/agents/codex-runner.js +434 -446
  16. package/dist/agents/ecagent-runner.js +174 -34
  17. package/dist/agents/gemini-runner.js +8 -7
  18. package/dist/agents/runner-types.js +75 -19
  19. package/dist/aun/aid/agentmd.js +151 -36
  20. package/dist/aun/aid/client.js +1 -1
  21. package/dist/aun/aid/control-aid.js +180 -1
  22. package/dist/aun/aid/identity.js +4 -4
  23. package/dist/aun/aid/index.js +1 -1
  24. package/dist/aun/aid/store.js +17 -13
  25. package/dist/aun/group/history.js +303 -0
  26. package/dist/aun/group/identity.js +43 -0
  27. package/dist/aun/group/index.js +5 -0
  28. package/dist/aun/{msg/group.js → group/operations.js} +162 -39
  29. package/dist/aun/{menu-client.js → menu/client.js} +85 -6
  30. package/dist/aun/menu/index.js +2 -0
  31. package/dist/aun/menu/transport.js +49 -0
  32. package/dist/aun/msg/index.js +2 -1
  33. package/dist/aun/msg/managed-operation.js +85 -19
  34. package/dist/aun/msg/mention-schema.js +51 -0
  35. package/dist/aun/msg/p2p.js +19 -9
  36. package/dist/aun/msg/upload.js +43 -80
  37. package/dist/aun/outbox.js +29 -7
  38. package/dist/aun/rpc/client.js +1 -0
  39. package/dist/aun/storage/client.js +39 -50
  40. package/dist/channels/aun.js +842 -318
  41. package/dist/channels/daemon.js +10 -6
  42. package/dist/cli/agent-command.js +212 -89
  43. package/dist/cli/agent-create.js +626 -11
  44. package/dist/cli/agent.js +125 -13
  45. package/dist/cli/aun-commands.js +487 -337
  46. package/dist/cli/bench.js +20 -20
  47. package/dist/cli/config.js +55 -33
  48. package/dist/cli/contact.js +72 -15
  49. package/dist/cli/ctl-command.js +24 -24
  50. package/dist/cli/daemon-commands.js +140 -63
  51. package/dist/cli/diag.js +31 -0
  52. package/dist/cli/fs-command.js +70 -70
  53. package/dist/cli/handoff-command.js +46 -14
  54. package/dist/cli/index.js +91 -79
  55. package/dist/cli/init.js +34 -1
  56. package/dist/cli/link-rules.js +21 -21
  57. package/dist/cli/managed-command-guard.js +5 -1
  58. package/dist/cli/menu-client.js +51 -32
  59. package/dist/cli/model.js +3 -3
  60. package/dist/cli/net-check.js +22 -22
  61. package/dist/cli/queue-command.js +31 -31
  62. package/dist/cli/response.js +32 -32
  63. package/dist/cli/restart-monitor.js +103 -42
  64. package/dist/cli/stats.js +51 -51
  65. package/dist/cli/task-command.js +59 -0
  66. package/dist/cli/task-context.js +97 -49
  67. package/dist/cli/trigger-command.js +74 -64
  68. package/dist/config/builtin-roles.js +11 -0
  69. package/dist/config/config-field-policy.js +11 -0
  70. package/dist/config/config-manager.js +32 -4
  71. package/dist/config/config-operation-service.js +160 -0
  72. package/dist/config/contact-book-store.js +1 -1
  73. package/dist/config/contact-book.js +1 -1
  74. package/dist/config/contact-operation-service.js +97 -8
  75. package/dist/config/peer-role-resolver.js +1 -1
  76. package/dist/config/resolved-config-op.js +30 -7
  77. package/dist/config-store.js +1 -1
  78. package/dist/core/agent-application-service.js +7 -1
  79. package/dist/core/audit/event-key.js +17 -2
  80. package/dist/core/audit/log-integrity.js +34 -8
  81. package/dist/core/auth/agent-delegation.js +48 -14
  82. package/dist/core/auth/auth-gateway.js +2 -0
  83. package/dist/core/auth/authorization-audit.js +53 -49
  84. package/dist/core/auth/operation-authorizer.js +90 -7
  85. package/dist/core/auth/operation-catalog.js +145 -4
  86. package/dist/core/auth/remote-access-store.js +155 -10
  87. package/dist/core/bootstrap-messages.js +66 -7
  88. package/dist/core/bootstrap-service.js +111 -20
  89. package/dist/core/command/agent-control.js +88 -7
  90. package/dist/core/command/agent-storage-menu.js +443 -0
  91. package/dist/core/command/cli-intent-parser.js +19 -0
  92. package/dist/core/command/command-handler.js +159 -65
  93. package/dist/core/command/data-root-resolver.js +273 -0
  94. package/dist/core/command/diag-service.js +118 -0
  95. package/dist/core/command/group-menu.js +7 -2
  96. package/dist/core/command/menu-catalog.js +46 -7
  97. package/dist/core/command/menu-handler.js +392 -100
  98. package/dist/core/command/menu-protocol.js +45 -6
  99. package/dist/core/command/menu-token-store.js +41 -8
  100. package/dist/core/command/role-menu.js +2 -2
  101. package/dist/core/command/slash-gate.js +34 -4
  102. package/dist/core/command/slash-handler.js +123 -43
  103. package/dist/core/event-catalog.js +4 -0
  104. package/dist/core/evolagent-registry.js +28 -2
  105. package/dist/core/group/invite-service.js +924 -0
  106. package/dist/core/handoff/runtime.js +205 -27
  107. package/dist/core/handoff/store.js +193 -4
  108. package/dist/core/interaction-router.js +22 -8
  109. package/dist/core/message/im-renderer.js +146 -34
  110. package/dist/core/message/message-bridge.js +163 -20
  111. package/dist/core/message/message-log.js +5 -3
  112. package/dist/core/message/message-queue.js +99 -41
  113. package/dist/core/message/message-utils.js +1 -0
  114. package/dist/core/message/response-engine.js +755 -144
  115. package/dist/core/model/catalog-service.js +79 -49
  116. package/dist/core/model/context-window-suffix.js +33 -0
  117. package/dist/core/model/model-catalog.js +1 -1
  118. package/dist/core/model/model-permission.js +12 -3
  119. package/dist/core/permission/approval-gateway.js +36 -3
  120. package/dist/core/permission/ec-command-parser.js +112 -41
  121. package/dist/core/permission/protected-paths.js +134 -16
  122. package/dist/core/permission/sandbox-runtime.js +108 -17
  123. package/dist/core/permission/tool-error-code.js +15 -0
  124. package/dist/core/permission/tool-policy.js +9 -8
  125. package/dist/core/relation/peer-identity.js +57 -6
  126. package/dist/core/relation/shared-data.js +106 -0
  127. package/dist/core/role/runtime-policy.js +64 -0
  128. package/dist/core/runtime-lock.js +10 -26
  129. package/dist/core/session/runner-task-history.js +170 -0
  130. package/dist/core/session/session-manager.js +34 -6
  131. package/dist/core/session/session-mapper.js +41 -0
  132. package/dist/core/session/session-turn-coordinator.js +37 -7
  133. package/dist/core/session/session-turns.js +48 -7
  134. package/dist/core/task/task-recovery-service.js +176 -0
  135. package/dist/core/task/task-resume-operation.js +32 -0
  136. package/dist/eck/group-rules-sync.js +5 -3
  137. package/dist/eck/kit-renderer.js +1 -0
  138. package/dist/index.js +588 -217
  139. package/dist/ipc.js +193 -15
  140. package/dist/paths.js +17 -4
  141. package/dist/product.js +2 -0
  142. package/dist/response-system/engines/v1/proactive-flow.js +59 -2
  143. package/dist/stats/billing.js +41 -15
  144. package/dist/stats/db.js +159 -159
  145. package/dist/stats/eck-vars.js +9 -9
  146. package/dist/stats/price-resolver.js +28 -10
  147. package/dist/stats/query.js +139 -139
  148. package/dist/stats/role-budget.js +6 -6
  149. package/dist/stats/writer.js +51 -51
  150. package/dist/trigger/event-source.js +19 -0
  151. package/dist/trigger/feedback.js +233 -40
  152. package/dist/trigger/parser.js +55 -5
  153. package/dist/trigger/patch.js +9 -0
  154. package/dist/trigger/scheduler.js +30 -4
  155. package/dist/trigger/validation.js +20 -3
  156. package/dist/utils/cross-platform.js +30 -1
  157. package/dist/utils/ecweb-utils.js +1 -0
  158. package/dist/utils/error-dict.json +160 -160
  159. package/dist/utils/error-utils.js +61 -2
  160. package/dist/utils/evolcore-version.js +129 -0
  161. package/dist/utils/logger.js +26 -14
  162. package/dist/utils/macos-autostart.js +22 -22
  163. package/dist/utils/model-prices.jsonl +23 -23
  164. package/dist/utils/npm-ops.js +176 -35
  165. package/dist/utils/tool-summary.js +59 -3
  166. package/dist/utils/welcome.js +196 -23
  167. package/ecagent/LICENSE +21 -21
  168. package/ecagent/NOTICE +11 -11
  169. package/ecagent/README.md +61 -61
  170. package/ecagent/dist/harness/agent-harness.js +3 -0
  171. package/ecagent/dist/harness/compaction/branch-summarization.js +30 -30
  172. package/ecagent/dist/harness/compaction/compaction.js +83 -83
  173. package/ecagent/dist/harness/messages.js +7 -7
  174. package/ecagent/dist/harness/session/jsonl-storage.js +21 -2
  175. package/kits/docs/GUIDE.md +20 -20
  176. package/kits/docs/INDEX.md +60 -66
  177. package/kits/docs/aun/CHEATSHEET.md +19 -19
  178. package/kits/docs/aun/SYNC_PROTOCOL.md +15 -15
  179. package/kits/docs/channels/aun.md +69 -56
  180. package/kits/docs/channels/feishu.md +56 -56
  181. package/kits/docs/context-assembly.md +379 -367
  182. package/kits/docs/eck_templates/GUIDE.template.md +22 -22
  183. package/kits/docs/eck_templates/INDEX.template.md +28 -28
  184. package/kits/docs/eck_templates/path-registry.template.md +33 -33
  185. package/kits/docs/eck_templates/runtime.template.md +19 -19
  186. package/kits/docs/evolcore/INDEX.md +76 -71
  187. package/kits/docs/evolcore/agent-create.md +202 -165
  188. package/kits/docs/evolcore/agent.md +99 -67
  189. package/kits/docs/evolcore/aid.md +68 -60
  190. package/kits/docs/evolcore/codex-windows-sandbox.md +146 -146
  191. package/kits/docs/evolcore/config.md +241 -195
  192. package/kits/docs/evolcore/contact.md +75 -68
  193. package/kits/docs/evolcore/ctl.md +46 -46
  194. package/kits/docs/evolcore/event.md +216 -216
  195. package/kits/docs/evolcore/fs-architecture.md +1215 -1215
  196. package/kits/docs/evolcore/fs.md +110 -110
  197. package/kits/docs/evolcore/group-collaboration.md +244 -244
  198. package/kits/docs/evolcore/group-fs.md +17 -17
  199. package/kits/docs/evolcore/group-rules.md +251 -251
  200. package/kits/docs/evolcore/group.md +267 -152
  201. package/kits/docs/evolcore/menu-client.md +58 -34
  202. package/kits/docs/evolcore/model.md +50 -50
  203. package/kits/docs/evolcore/msg.md +169 -165
  204. package/kits/docs/evolcore/response.md +75 -75
  205. package/kits/docs/evolcore/rpc.md +37 -37
  206. package/kits/docs/evolcore/self-summary.md +29 -29
  207. package/kits/docs/evolcore/stats.md +83 -83
  208. package/kits/docs/evolcore/storage.md +53 -50
  209. package/kits/docs/evolcore/task.md +14 -0
  210. package/kits/docs/evolcore/trigger.md +623 -575
  211. package/kits/docs/identity/AID_PROFILE_SPEC.md +26 -26
  212. package/kits/docs/identity/PATH_OPS.md +16 -16
  213. package/kits/docs/identity/ROLE_DETAIL.md +25 -25
  214. package/kits/docs/identity/identity-tools.md +26 -26
  215. package/kits/docs/path-registry.md +62 -62
  216. package/kits/docs/prompt-loading-architecture.md +269 -269
  217. package/kits/docs/venues/aun-group.md +45 -45
  218. package/kits/docs/venues/aun-private.md +10 -10
  219. package/kits/docs/venues/client-desktop.md +10 -10
  220. package/kits/docs/venues/client-mobile.md +10 -10
  221. package/kits/docs/venues/feishu-group.md +13 -13
  222. package/kits/docs/venues/feishu-private.md +9 -9
  223. package/kits/docs/venues/group.md +42 -25
  224. package/kits/docs/venues/private.md +10 -10
  225. package/kits/eck_manifest.auxiliary.json +43 -43
  226. package/kits/eck_manifest.json +217 -190
  227. package/kits/eck_message_manifest.json +74 -74
  228. package/kits/migrations/README-role-config-v4.md +32 -32
  229. package/kits/migrations/migrate-contact-book-v2.mjs +748 -748
  230. package/kits/migrations/migrate-role-config-v4.mjs +614 -614
  231. package/kits/migrations/migrate-role-config-v5.mjs +365 -365
  232. package/kits/migrations/rename-config-file.mjs +99 -99
  233. package/kits/rules/01-overview.md +166 -162
  234. package/kits/rules/02-navigation.md +96 -96
  235. package/kits/rules/03-identity.md +36 -36
  236. package/kits/rules/04-relation.md +76 -75
  237. package/kits/rules/05-venue.md +60 -60
  238. package/kits/rules/06-channel.md +65 -63
  239. package/kits/schemas/_meta.json +53 -53
  240. package/kits/schemas/agent-config.schema.1.json +177 -177
  241. package/kits/schemas/agent-config.schema.10.json +395 -395
  242. package/kits/schemas/agent-config.schema.11.json +421 -421
  243. package/kits/schemas/agent-config.schema.12.json +451 -427
  244. package/kits/schemas/agent-config.schema.2.json +239 -239
  245. package/kits/schemas/agent-config.schema.3.json +119 -119
  246. package/kits/schemas/agent-config.schema.4.json +208 -208
  247. package/kits/schemas/agent-config.schema.5.json +326 -326
  248. package/kits/schemas/agent-config.schema.6.json +322 -322
  249. package/kits/schemas/agent-config.schema.7.json +303 -303
  250. package/kits/schemas/agent-config.schema.8.json +304 -304
  251. package/kits/schemas/agent-config.schema.9.json +364 -364
  252. package/kits/schemas/contact-book.schema.1.json +36 -36
  253. package/kits/schemas/contact-book.schema.2.json +43 -43
  254. package/kits/schemas/contact-book.schema.3.json +67 -67
  255. package/kits/schemas/daemon.schema.1.json +91 -91
  256. package/kits/schemas/daemon.schema.2.json +101 -101
  257. package/kits/schemas/daemon.schema.3.json +123 -123
  258. package/kits/schemas/daemon.schema.4.json +136 -136
  259. package/kits/schemas/daemon.schema.5.json +135 -135
  260. package/kits/schemas/daemon.schema.6.json +131 -131
  261. package/kits/schemas/defaults.schema.1.json +81 -81
  262. package/kits/schemas/defaults.schema.2.json +85 -85
  263. package/kits/schemas/defaults.schema.3.json +73 -73
  264. package/kits/schemas/defaults.schema.4.json +107 -107
  265. package/kits/schemas/defaults.schema.5.json +119 -119
  266. package/kits/schemas/menu-exec-schema-commands.md +208 -208
  267. package/kits/schemas/migrations/README.md +30 -30
  268. package/kits/schemas/relation-config.schema.1.json +158 -158
  269. package/kits/schemas/relation-config.schema.2.json +73 -73
  270. package/kits/schemas/relation-config.schema.3.json +50 -50
  271. package/kits/schemas/relation-config.schema.4.json +47 -47
  272. package/kits/schemas/relation-config.schema.5.json +47 -47
  273. package/kits/schemas/relation-config.schema.6.json +46 -46
  274. package/kits/schemas/relation-config.schema.7.json +59 -59
  275. package/kits/schemas/relation-config.schema.8.json +103 -103
  276. package/kits/schemas/role-config.schema.1.json +215 -201
  277. package/kits/schemas/role-registry.schema.1.json +35 -35
  278. package/kits/schemas/single-session.schema.1.json +31 -31
  279. package/kits/schemas/single-session.schema.2.json +57 -57
  280. package/kits/schemas/single-session.schema.3.json +32 -32
  281. package/kits/templates/bootstrap-welcome.md +17 -17
  282. package/kits/templates/message-fragments/handoff-context-to-target.md +9 -9
  283. package/kits/templates/message-fragments/handoff-request-to-target.md +19 -19
  284. package/kits/templates/message-fragments/handoff-response-to-origin.md +9 -9
  285. package/kits/templates/message-fragments/inject-default.md +2 -2
  286. package/kits/templates/message-fragments/item.md +2 -2
  287. package/kits/templates/roles/admin.json +92 -92
  288. package/kits/templates/roles/member.json +101 -96
  289. package/kits/templates/roles/owner.json +9 -9
  290. package/kits/templates/roles/visitor.json +90 -85
  291. package/kits/templates/system-fragments/baseagent.md +14 -14
  292. package/kits/templates/system-fragments/bootstrap.md +53 -34
  293. package/kits/templates/system-fragments/channel.md +28 -64
  294. package/kits/templates/system-fragments/commands.md +36 -28
  295. package/kits/templates/system-fragments/group-unread-history.md +7 -0
  296. package/kits/templates/system-fragments/identity.md +13 -13
  297. package/kits/templates/system-fragments/relation.md +19 -19
  298. package/kits/templates/system-fragments/reply.md +56 -0
  299. package/kits/templates/system-fragments/session.md +59 -59
  300. package/kits/templates/system-fragments/venue.md +31 -31
  301. package/package.json +104 -98
  302. package/dist/aun/group-identity.js +0 -9
  303. /package/dist/aun/{group-fs-download.js → group/fs-download.js} +0 -0
  304. /package/dist/aun/{msg/group-index.js → group/index-rpc.js} +0 -0
package/dist/cli/bench.js CHANGED
@@ -381,26 +381,26 @@ async function cliAuth(aid, slotId) {
381
381
  // ==================== Main Command ====================
382
382
  export async function cmdBench(args) {
383
383
  if (isHelpFlag(args[0]) || wantsHelp(args)) {
384
- console.log(`用法: ec bench [options]
385
-
386
- AUN 消息系统性能基准测试。使用多个本地 AID 并发互发消息,
387
- 测量吞吐量、延迟、丢失率,以及认证性能和账号切换性能。
388
-
389
- Options:
390
- --aids N 使用的 AID 数量 (默认 3, 范围 2-10)
391
- --rounds N 每个 AID 发送的消息轮数 (默认 20)
392
- --concurrency N 最大并发发送数 (默认 5)
393
- --wait N 发送后等待传播的秒数 (默认 3)
394
- --encrypt 发送加密消息(E2EE)
395
- --file 文件传输验证模式(压缩 evolcore 目录,拆片发送,接收后 MD5 校验+解压)
396
- --cli 使用 CLI 子进程调用(测试完整命令行链路,含进程启动开销)
397
- --aun-path <path> 自定义 AUN 目录
398
- --format json 以 JSON 输出结果
399
-
400
- 示例:
401
- ec bench --aids 5 --rounds 10
402
- ec bench --file --rounds 50
403
- ec bench --encrypt --aids 5 --rounds 20
384
+ console.log(`用法: ec bench [options]
385
+
386
+ AUN 消息系统性能基准测试。使用多个本地 AID 并发互发消息,
387
+ 测量吞吐量、延迟、丢失率,以及认证性能和账号切换性能。
388
+
389
+ Options:
390
+ --aids N 使用的 AID 数量 (默认 3, 范围 2-10)
391
+ --rounds N 每个 AID 发送的消息轮数 (默认 20)
392
+ --concurrency N 最大并发发送数 (默认 5)
393
+ --wait N 发送后等待传播的秒数 (默认 3)
394
+ --encrypt 发送加密消息(E2EE)
395
+ --file 文件传输验证模式(压缩 evolcore 目录,拆片发送,接收后 MD5 校验+解压)
396
+ --cli 使用 CLI 子进程调用(测试完整命令行链路,含进程启动开销)
397
+ --aun-path <path> 自定义 AUN 目录
398
+ --format json 以 JSON 输出结果
399
+
400
+ 示例:
401
+ ec bench --aids 5 --rounds 10
402
+ ec bench --file --rounds 50
403
+ ec bench --encrypt --aids 5 --rounds 20
404
404
  ec bench --cli --aids 3 --rounds 5`);
405
405
  return;
406
406
  }
@@ -1,10 +1,10 @@
1
1
  import { isHelpFlag, wantsHelp, getArgValue } from './help.js';
2
2
  import { initConfigManager } from '../config/config-manager.js';
3
3
  import { resolveConfigCommand } from '../config/resolved-config-op.js';
4
- import { AUTHENTICATED_CONFIG_ROLE_ENV, executeResolvedConfigCommand, } from '../config/config-operation-service.js';
4
+ import { AUTHENTICATED_CONFIG_ROLE_ENV, executeResolvedConfigCommandAsync, } from '../config/config-operation-service.js';
5
5
  import { ipcQuery } from '../ipc.js';
6
6
  import { resolvePaths } from '../paths.js';
7
- import { AGENT_DELEGATION_TOKEN_ENV } from '../core/auth/agent-delegation.js';
7
+ import { AGENT_DELEGATION_TOKEN_ENV, readDelegationCredential } from '../core/auth/agent-delegation.js';
8
8
  import { splitConfigBatchGetArgv } from './cli-argv.js';
9
9
  function emit(formatJson, payload, text) {
10
10
  if (formatJson)
@@ -31,6 +31,7 @@ function getResultPayload(result) {
31
31
  ...(result.source ? { source: result.source } : {}),
32
32
  ...(result.schemaDefault ? { schemaDefault: true } : {}),
33
33
  ...(result.note ? { note: result.note } : {}),
34
+ ...(result.roleDetails ? { role: result.roleDetails } : {}),
34
35
  };
35
36
  }
36
37
  function getResultLine(result) {
@@ -39,7 +40,10 @@ function getResultLine(result) {
39
40
  : !result.source
40
41
  ? `${result.field} = ${JSON.stringify(result.value)} (${result.scope})`
41
42
  : `${result.field} = ${JSON.stringify(result.value)} [source: ${result.source.target}]`;
42
- return result.note ? `${head}\n ↳ ${result.note}` : head;
43
+ const role = result.roleDetails
44
+ ? `\n role: explicit=${JSON.stringify(result.roleDetails.explicitRole)} effective=${JSON.stringify(result.roleDetails.effectiveRole)} [${result.roleDetails.effectiveRoleSource}]`
45
+ : '';
46
+ return `${head}${role}${result.note ? `\n ↳ ${result.note}` : ''}`;
43
47
  }
44
48
  function renderConfigExecution(result, formatJson) {
45
49
  if (!result.ok)
@@ -56,6 +60,7 @@ function renderConfigExecution(result, formatJson) {
56
60
  value: result.value,
57
61
  scope: result.scope,
58
62
  file: result.file,
63
+ ...(result.roleDetails ? { role: result.roleDetails } : {}),
59
64
  }, () => `Set ${result.field} = ${JSON.stringify(result.value)} [${result.scope}]`);
60
65
  case 'unset':
61
66
  return emit(formatJson, {
@@ -63,6 +68,7 @@ function renderConfigExecution(result, formatJson) {
63
68
  field: result.field,
64
69
  removed: result.removed,
65
70
  ...(result.removed ? { scope: result.scope } : {}),
71
+ ...(result.roleDetails ? { role: result.roleDetails } : {}),
66
72
  }, () => result.removed ? `Removed ${result.field} from ${result.scope}` : `${result.field} was not set`);
67
73
  case 'show':
68
74
  return emit(formatJson, { ok: true, scope: result.scope, configs: result.configs }, () => JSON.stringify(result.configs, null, 2));
@@ -122,7 +128,7 @@ function managedSession(formatJson) {
122
128
  const sessionId = process.env.EVOLCORE_SESSION_ID;
123
129
  if (!sessionId)
124
130
  fail(formatJson, 'NO_SESSION', 'EVOLCORE_SESSION_ID is not set');
125
- const delegationToken = process.env[AGENT_DELEGATION_TOKEN_ENV];
131
+ const delegationToken = readDelegationCredential();
126
132
  if (!delegationToken) {
127
133
  fail(formatJson, 'DELEGATION_REQUIRED', `${AGENT_DELEGATION_TOKEN_ENV} is not set for the active task`);
128
134
  }
@@ -152,10 +158,13 @@ async function runManagedConfig(args, formatJson) {
152
158
  renderConfigExecution(response.result, formatJson);
153
159
  }
154
160
  function renderBatchGet(results, formatJson) {
155
- const allOk = results.every(entry => entry.ok);
161
+ // Unsupported runner fields are compatibility misses, not a failure of the
162
+ // supported fields in the same aggregate request. Keep the per-field error
163
+ // while allowing clients to consume the successful values.
164
+ const batchOk = results.every(entry => entry.ok || entry.code === 'UNSUPPORTED_FIELD');
156
165
  if (formatJson) {
157
166
  console.log(JSON.stringify({
158
- ok: allOk,
167
+ ok: batchOk,
159
168
  results: results.map(entry => entry.ok
160
169
  ? getResultPayload(entry)
161
170
  : { ok: false, field: entry.field, code: entry.code, error: entry.error }),
@@ -169,21 +178,21 @@ function renderBatchGet(results, formatJson) {
169
178
  console.error(`${entry.field}: Error: ${entry.error} (${entry.code})`);
170
179
  }
171
180
  }
172
- if (!allOk)
181
+ if (!batchOk)
173
182
  process.exit(1);
174
183
  }
175
- function runDirectBatchGet(fields, rest, formatJson) {
176
- const results = fields.map(field => {
184
+ async function runDirectBatchGet(fields, rest, formatJson) {
185
+ const results = await Promise.all(fields.map(async (field) => {
177
186
  const resolved = resolveConfigCommand(['config', 'get', field, ...rest]);
178
187
  if (!resolved.ok)
179
188
  return { ok: false, field, code: resolved.code, error: resolved.reason };
180
- const result = executeResolvedConfigCommand(resolved.command);
189
+ const result = await executeResolvedConfigCommandAsync(resolved.command, { role: 'owner' });
181
190
  if (!result.ok)
182
191
  return { ok: false, field, code: result.code, error: result.error };
183
192
  if (result.subcommand === 'get')
184
193
  return result;
185
194
  return { ok: false, field, code: 'UNEXPECTED_RESULT', error: `config get ${field} produced a non-get result` };
186
- });
195
+ }));
187
196
  renderBatchGet(results, formatJson);
188
197
  }
189
198
  async function runManagedBatchGet(fields, rest, formatJson) {
@@ -196,26 +205,31 @@ async function runManagedBatchGet(fields, rest, formatJson) {
196
205
  }
197
206
  renderConfigExecution(response.result, formatJson);
198
207
  }
199
- const HELP = `Usage: ec config <command> [options]
200
-
201
- Fields:
202
- get <field> [<field> ...] one or more fields (batch)
203
- set <field> <value>
204
- unset <field>
205
-
206
- Scoped commands:
207
- show | effective | fields [field] | validate | init
208
-
209
- Global commands:
210
- list | snapshot | prune | history | diff | restore | current | boots
211
- schema overview of all schemas
212
- schema <name> [<version>] view a schema definition
213
- schema <name> --list list a schema's versions
214
-
215
- Selectors:
216
- --self <aid> [--peer <peerKey>] | --default | --process
217
-
218
- Output:
208
+ const HELP = `Usage: ec config <command> [options]
209
+
210
+ Fields:
211
+ get <field> [<field> ...] one or more fields (batch)
212
+ set <field> <value>
213
+ unset <field>
214
+
215
+ Scoped commands:
216
+ show | effective | fields [field] | validate | init
217
+
218
+ Global commands:
219
+ list | snapshot | prune | history | diff | restore | current | boots
220
+ schema overview of all schemas
221
+ schema <name> [<version>] view a schema definition
222
+ schema <name> --list list a schema's versions
223
+
224
+ Selectors:
225
+ --self <aid> [--peer <peerKey>] | --default | --process
226
+
227
+ Relation role (AUN peer AID):
228
+ get role --self <aid> --peer <peer-aid>
229
+ set role <role-id> --self <aid> --peer <peer-aid>
230
+ unset role --self <aid> --peer <peer-aid>
231
+
232
+ Output:
219
233
  --format json`;
220
234
  export async function cmdConfig(args) {
221
235
  const subcommand = args[0];
@@ -241,13 +255,21 @@ export async function cmdConfig(args) {
241
255
  fail(formatJson, 'SCHEMA_INIT_FAILED', error instanceof Error ? error.message : String(error));
242
256
  }
243
257
  if (isBatchGet) {
244
- runDirectBatchGet(batchGet.fields, batchGet.rest, formatJson);
258
+ await runDirectBatchGet(batchGet.fields, batchGet.rest, formatJson);
245
259
  return;
246
260
  }
247
261
  const resolved = resolveConfigCommand(['config', ...args]);
248
262
  if (!resolved.ok)
249
263
  fail(formatJson, resolved.code, resolved.reason);
250
- renderConfigExecution(executeResolvedConfigCommand(resolved.command, {
264
+ renderConfigExecution(await executeResolvedConfigCommandAsync(resolved.command, {
251
265
  role: process.env[AUTHENTICATED_CONFIG_ROLE_ENV],
266
+ roleContext: {
267
+ self: resolved.command.self || '',
268
+ actorRole: process.env[AUTHENTICATED_CONFIG_ROLE_ENV] || 'owner',
269
+ actorRoleSource: 'local-cli',
270
+ isDaemonOwner: false,
271
+ fromControlChannel: false,
272
+ aunAvailable: true,
273
+ },
252
274
  }), formatJson);
253
275
  }
@@ -1,7 +1,8 @@
1
1
  import { resolvePaths } from '../paths.js';
2
+ import { loadAllAgents } from '../config-store.js';
2
3
  import { executeResolvedContactCommand, resolveContactCommand, } from '../config/contact-operation-service.js';
3
4
  import { ipcQuery } from '../ipc.js';
4
- import { AGENT_DELEGATION_TOKEN_ENV } from '../core/auth/agent-delegation.js';
5
+ import { AGENT_DELEGATION_TOKEN_ENV, readDelegationCredential } from '../core/auth/agent-delegation.js';
5
6
  import { getArgValue, isHelpFlag, wantsHelp } from './help.js';
6
7
  export async function cmdContact(args) {
7
8
  if (args.length === 0 || isHelpFlag(args[0]) || wantsHelp(args)) {
@@ -14,9 +15,17 @@ export async function cmdContact(args) {
14
15
  output(result, json);
15
16
  return;
16
17
  }
17
- const resolved = resolveContactCommand(args);
18
- if (!resolved.ok)
19
- fail(resolved.reason, resolved.code);
18
+ if (!args.includes('--self') && isListCommand(args) && !process.env.EVOLCORE_SELF_AID?.trim()) {
19
+ output(await executeAggregateList(args), json);
20
+ return;
21
+ }
22
+ const resolved = resolveContactCommand(withDefaultSelf(args));
23
+ if (!resolved.ok) {
24
+ const message = resolved.code === 'INVALID_SELF' && !args.includes('--self')
25
+ ? `${resolved.reason}; multiple local Agents are configured, add --self <agent-aid>`
26
+ : resolved.reason;
27
+ fail(message, resolved.code);
28
+ }
20
29
  const result = await executeResolvedContactCommand(resolved.command);
21
30
  if (!result.ok)
22
31
  fail(result.error, result.code, result.data);
@@ -30,7 +39,7 @@ function output(value, json) {
30
39
  }
31
40
  async function runManaged(args, json) {
32
41
  const sessionId = process.env.EVOLCORE_SESSION_ID;
33
- const delegationToken = process.env[AGENT_DELEGATION_TOKEN_ENV];
42
+ const delegationToken = readDelegationCredential();
34
43
  if (!delegationToken)
35
44
  fail(`${AGENT_DELEGATION_TOKEN_ENV} is not set for the active task`, 'DELEGATION_REQUIRED');
36
45
  let response = null;
@@ -58,15 +67,63 @@ function fail(message, code = 'INVALID_ARGUMENT', data) {
58
67
  throw error;
59
68
  }
60
69
  function printHelp() {
61
- console.log(`Usage:
62
- ec contact add <primaryId> --self <agent-aid>
63
- ec contact block <primaryId> --self <agent-aid>
64
- ec contact unblock <primaryId> --self <agent-aid>
65
- ec contact list --blocked --self <agent-aid>
66
-
67
- Options:
68
- --self <agent-aid> 必填,本端 agent AID
69
- --blocked list 必填,仅列出已拉黑联系人
70
- --format json 输出 JSON
70
+ console.log(`Usage:
71
+ ec contact add <primaryId> --self <agent-aid>
72
+ ec contact block <primaryId> --self <agent-aid>
73
+ ec contact unblock <primaryId> --self <agent-aid>
74
+ ec contact list --blocked [--self <agent-aid>]
75
+ ec contact list --pending [--self <agent-aid>]
76
+ ec contact list --all [--self <agent-aid>]
77
+ ec contact approve <primaryId> --request-id <id> [--self <agent-aid>]
78
+ ec contact reject <primaryId> --request-id <id> [--self <agent-aid>]
79
+ ec contact block-request <primaryId> --request-id <id> [--self <agent-aid>]
80
+
81
+ Options:
82
+ --self <agent-aid> 本端 agent AID;省略时从当前运行环境推断
83
+ --blocked 仅列出已拉黑联系人
84
+ --pending 仅列出待审核联系人申请
85
+ --all 列出所有联系人及状态
86
+ --request-id <id> 联系人申请 ID(审批命令必填)
87
+ --contact-revision <revision> 申请审批时使用的联系人版本(可选)
88
+ --format json 输出 JSON
71
89
  --help, -h 显示帮助`);
72
90
  }
91
+ function withDefaultSelf(args) {
92
+ if (args.includes('--self'))
93
+ return args;
94
+ const selfAid = resolveStandaloneSelfAid();
95
+ return selfAid ? [...args, '--self', selfAid] : args;
96
+ }
97
+ function isListCommand(args) {
98
+ return args[0] === 'list';
99
+ }
100
+ async function executeAggregateList(args) {
101
+ const agents = loadAllAgents().agents.map(agent => agent.aid).filter(Boolean).sort();
102
+ const results = [];
103
+ for (const aid of agents) {
104
+ const resolved = resolveContactCommand([...args, '--self', aid]);
105
+ if (!resolved.ok)
106
+ fail(resolved.reason, resolved.code);
107
+ const result = await executeResolvedContactCommand(resolved.command);
108
+ if (!result.ok)
109
+ fail(result.error, result.code, result.data);
110
+ results.push(result);
111
+ }
112
+ return {
113
+ ok: true,
114
+ operation: args.includes('--blocked') ? 'list-blocked'
115
+ : args.includes('--pending') ? 'list-pending' : 'list-all',
116
+ scope: 'all-agents',
117
+ agents: results,
118
+ };
119
+ }
120
+ /** Resolve the local Agent identity for standalone CLI commands. */
121
+ export function resolveStandaloneSelfAid() {
122
+ const runtimeAid = process.env.EVOLCORE_SELF_AID?.trim();
123
+ if (runtimeAid)
124
+ return runtimeAid;
125
+ const agents = loadAllAgents().agents
126
+ .map(agent => agent.aid)
127
+ .filter(Boolean);
128
+ return agents.length === 1 ? agents[0] : undefined;
129
+ }
@@ -1,30 +1,30 @@
1
1
  import { resolvePaths } from '../paths.js';
2
2
  import { ipcQuery } from '../ipc.js';
3
3
  import { isHelpFlag, wantsHelp } from './help.js';
4
- import { AGENT_DELEGATION_TOKEN_ENV } from '../core/auth/agent-delegation.js';
4
+ import { readDelegationCredential } from '../core/auth/agent-delegation.js';
5
5
  // ==================== Ctl ====================
6
- const CTL_HELP = `用法: ec ctl <command> [args...]
7
-
8
- 查询:
9
- status 查看会话状态
10
- status --format json 查看当前任务的结构化运行上下文
11
- pwd 显示当前项目路径
12
- help 显示帮助
13
-
14
- 会话:
15
- name <名称> 重命名当前会话
16
-
17
- 消息:
18
- send <消息内容> 主动发送文本消息(proactive 模式)
19
- file [channel] <path> 发送项目内文件
20
- queue [--after <time>] [--before <time>] 查看/管理会话消息队列
21
-
22
- 示例:
23
- ec ctl status
24
- ec ctl status --format json
25
- ec ctl name "新会话名称"
26
- ec ctl send "任务已完成"
27
- ec ctl file report.md
6
+ const CTL_HELP = `用法: ec ctl <command> [args...]
7
+
8
+ 查询:
9
+ status 查看会话状态
10
+ status --format json 查看当前任务的结构化运行上下文
11
+ pwd 显示当前项目路径
12
+ help 显示帮助
13
+
14
+ 会话:
15
+ name <名称> 重命名当前会话
16
+
17
+ 消息:
18
+ send <消息内容> 主动发送文本消息(proactive 模式)
19
+ file [channel] <path> 发送项目内文件
20
+ queue [--after <time>] [--before <time>] 查看/管理会话消息队列
21
+
22
+ 示例:
23
+ ec ctl status
24
+ ec ctl status --format json
25
+ ec ctl name "新会话名称"
26
+ ec ctl send "任务已完成"
27
+ ec ctl file report.md
28
28
  ec ctl queue --full`;
29
29
  export async function cmdCtl(args) {
30
30
  if (args.length === 0) {
@@ -47,7 +47,7 @@ export async function cmdCtl(args) {
47
47
  type: 'ctl',
48
48
  cmd,
49
49
  sessionId,
50
- delegationToken: process.env[AGENT_DELEGATION_TOKEN_ENV],
50
+ delegationToken: readDelegationCredential(),
51
51
  }, 10_000);
52
52
  if (!result) {
53
53
  console.error('错误: 无法连接 evolcore 服务');