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
@@ -1,195 +1,241 @@
1
- # ec config — 配置体系底层入口
2
-
3
- 按作用域读写所有配置参数 + 配置快照/回滚/启动历史。触发词:看配置/改配置/查字段/列配置/校验配置/快照/回滚/历史/对比版本/启动记录。
4
-
5
- > `ec config` 是配置读写的统一 CLI 入口;模型交互由 menu 协议和 slash `/model` 提供。
6
- > 字段由共享 field policy 决定路由、值类型和访问级别;同一套规则用于 CLI、Menu 和 agent-tool。
7
-
8
- ## 参数读写
9
-
10
- ```bash
11
- # 读 effective 值(显示覆盖链来源);可一次传多个字段批量读取(共享同一 selector/--format)
12
- ec config get <field> [<field> ...] [--self <aid>] [--peer <X>] [--default] [--process]
13
- # 单字段输出不变;多字段时 text 每行一条、json 返回 { ok, results: [...] },任一字段失败退出码为 1
14
-
15
- # 写参数:scope 由 selector 推断
16
- ec config set <field> <value> [--self <aid>] [--peer <X>] [--default] [--process]
17
-
18
- # 删除某层显式设置,回落下一层
19
- ec config unset <field> [--self <aid>] [--peer <X>]
20
-
21
- # 查看某一层文件原始内容(不合并,凭证显示 ${VAR} 不展开)
22
- ec config show [--self <aid>] [--peer <X>] [--default] [--process]
23
-
24
- # 打印合并后的全部生效配置
25
- ec config effective [--self <aid>] [--peer <X>]
26
-
27
- # 列出某作用域可设字段(类型/枚举值,来源 schema)
28
- ec config fields [--self <aid>] [--default] [--process]
29
-
30
- # 列出所有配置文件
31
- ec config list
32
-
33
- # 按 schema 校验配置文件
34
- ec config validate [--self <aid>] [--peer <X>] [--default] [--process]
35
-
36
- # 按 schema 物化骨架文件(仅人)
37
- ec config init [--self <aid>] [--peer <X>] [--default] [--process]
38
- ```
39
-
40
- ## 快照 / 回滚
41
-
42
- 总开关直接保存在 `$EVOLCORE_HOME/daemon.json` 顶层,默认 `true`:
43
-
44
- ```bash
45
- ec config set configSnapshots true --process
46
- ec config set configSnapshots false --process
47
- ```
48
-
49
- 开启时首次成功启动创建全量基线,后续成功启动检测到配置变化后自动建立新版本。关闭时不写快照、启动日志,也不执行自检回落。
50
-
51
- ```bash
52
- # 立即创建快照(与当前版本比对,不一致才建;--full 强制新全量)(仅人)
53
- ec config snapshot [--full] [--desc "说明"]
54
-
55
- # 列出快照版本(版本号/类型/触发/时间/说明)
56
- ec config history
57
-
58
- # 对比两版本差异
59
- ec config diff <v1> <v2>
60
-
61
- # 恢复到指定版本:展开到工作目录 + 更新 current.json(先 pre-restore 快照)(仅人)
62
- ec config restore <version>
63
-
64
- # 显示 current.json 选定版本(上次启动回落时给出告警)
65
- ec config current
66
-
67
- # 查看启动历史(含回落标记)
68
- ec config boots [-n N]
69
-
70
- # 清理旧快照(默认 dry-run,--yes 真删;拒删被依赖全量 / current 指向版本)(仅人)
71
- ec config prune [--keep-full N] [--keep-delta N] [--yes]
72
- ```
73
-
74
- ## Schema 查看
75
-
76
- 查看随包分发的配置 schema **定义本身**(`kits/schemas/*.schema.*.json`)——不是读写配置值,而是查「某作用域有哪些字段、类型/枚举/默认、schema 有几个版本」。纯只读,人和 agent 均可。
77
-
78
- ```bash
79
- # 概览:列出全部逻辑 schema 及各自当前版本
80
- ec config schema
81
-
82
- # 列出某 schema 磁盘上的所有版本(* 标当前版本,附日期/说明)
83
- ec config schema <name> --list
84
-
85
- # 查看某 schema 的原始定义(缺省版本号 = 当前版本)
86
- ec config schema <name> [version]
87
- ```
88
-
89
- 逻辑 schema 名(`<name>`):`daemon` / `defaults` / `agent-config` / `relation-config` /
90
- `contact-book` / `role-registry` / `role-config`。
91
-
92
- 三种输出模式:
93
-
94
- | 调用形式 | mode | 输出 |
95
- |----------|------|------|
96
- | `config schema` | overview | 全部 schema + 各自当前版本号 |
97
- | `config schema <name> --list` | versions | 该 schema 所有磁盘版本,`*` 标当前,附 date/description |
98
- | `config schema <name> [version]` | content | 指定版本(缺省=当前)的完整 schema JSON |
99
-
100
- 约定与报错:
101
- - `--list` 与 version 参数互斥(`INVALID_CONFIG_COMMAND`)
102
- - `--list` 或指定 version 时必须带 `<name>`(`MISSING_ARG`)
103
- - version 须为非负整数;未知 name → `UNKNOWN_SCHEMA`;版本不存在 → `SCHEMA_VERSION_NOT_FOUND`(错误信息列出可用版本)
104
-
105
- > 用途:写配置前先 `ec config fields` 看字段可设值,或 `ec config schema <name>` 看该层 schema 的完整字段约束与 `x-merge` 合并语义;排查「字段为何被拒/怎么合并」时定位 schema 版本。
106
-
107
- ## 作用域 selector
108
-
109
- | 参数 | 作用域 | 落盘 |
110
- |------|--------|------|
111
- | `--self <aid>` | agent 级 | `agents/<aid>/config.json` |
112
- | `--self <aid> --peer <X>` | 关系级 | `agents/<aid>/relations/<peerKey>/config.json` |
113
- | `--default` | 全局默认 | `agents/defaults.json` |
114
- | `--process` | 进程级 | `~/.evolcore/daemon.json` |
115
- | 写操作三者全无 | — | **拒绝**(防误写全局) |
116
-
117
- `--peer` 取 `channelType#channelId` 或裸 aid(裸 aid 视为 `aun#<aid>`)。配置提交后开始处理的新
118
- turn 使用新值;提交前已经开始的 turn 不被打断。
119
-
120
- ## 覆盖链
121
-
122
- ```
123
- defaults → agent/config → relation/config
124
- ```
125
-
126
- ConfigManager 只合并上述物理层并返回物理来源。角色策略不进入配置合并链:`permissionMode` 和 `baseagents.*.model` 由消费方按当前角色单独应用。
127
-
128
- ### Agent 消息准入策略
129
-
130
- 消息准入策略保存在 `agents/<aid>/config.json` 的 `access` 字段,但它是 Agent 自身的安全边界,
131
- 不参与 defaults/relation 有效覆盖:
132
-
133
- ```json
134
- {
135
- "access": {
136
- "policyMode": "contacts",
137
- "requestLimit": { "maxTimes": 600, "coolDown": 3600 }
138
- }
139
- }
140
- ```
141
-
142
- `policyMode` 为 `open | contacts | owners`;`open` 对所有已配置渠道的私聊和群聊入站开放,`contacts`
143
- 将 Agent 已加入并接收到的群聊视为授权,`owners` 仅 Owner 消息开放;群聊成员不按 Contact Book 联系人
144
- 状态逐一过滤。`requestLimit` 只限制准入控制消息的自动回复、申请和绑定码提示,不是渠道准入开关;`coolDown`
145
- 单位为秒。该对象由 Connect 的访问设置入口修改,不通过通用 relation/defaults 覆盖链放宽。
146
-
147
- ### AUN 群规则加载策略
148
-
149
- `groupRules.mode` 可设为 `load` 或 `ignore`,缺省为 `load`。该字段仅存在于 Agent 和 relation
150
- 层,relation 可覆盖 Agent 默认值,`--default` 不支持。
151
-
152
- ```bash
153
- # Agent 默认值
154
- ec config set groupRules.mode ignore --self bot.agentid.pub
155
-
156
- # 当前群覆盖
157
- ec config set groupRules.mode load \
158
- --self bot.agentid.pub --peer aun#g-team.agentid.pub
159
-
160
- # 查看有效值和来源 / 删除群覆盖
161
- ec config get groupRules.mode \
162
- --self bot.agentid.pub --peer aun#g-team.agentid.pub --format json
163
- ec config unset groupRules.mode \
164
- --self bot.agentid.pub --peer aun#g-team.agentid.pub
165
- ```
166
-
167
- `ignore` 表示运行时不访问远端群规则、不读本地物化文件、不注入规则正文,但不删除缓存,也不影响
168
- `ec group rules` 的远端管理命令。配置切换不会自动创建或清空会话。Claude/Codex 从后续新 turn
169
- 按当前值重新组装上下文;其他 runner 的 Menu 写入结果会提示新建或清空群会话后生效。
170
-
171
- ## 权限控制
172
-
173
- **写权限**(API 层判定):
174
- - **通用可写字段**:active_baseagent / baseagents / chatmode / show_activities / flush_delay / debounce / render
175
- - **角色专用入口**:`roles/index.json` 与 `roles/{roleId}.json` 由角色服务维护;relation 的
176
- `role` 由角色分配服务维护;`permissionMode` 仅在角色策略中维护
177
- - **兼容字段**:`enable_rich_content` 仍可读取旧值,但已废弃且不再产生运行时效果
178
- - **群规则策略**:`groupRules.mode` 仅当前 Agent 的实际 owner 可 set/unset;DaemonOwner 不继承群或 relation 写权限,其他角色可读取当前 relation 的有效值
179
- - **源码诊断白名单**:`readonlySourceDiagnostics` 默认关闭;开启后只读会话仅可在项目源码目录执行受限、可证明只读查询,配置/证书/快照/session/锁文件仍禁止访问
180
- - **仅人可写**:channels / owners / admins / 凭证 / aid / enabled / projects / aun / models.allowed
181
- - Agent 托管环境写仅人字段被拒
182
-
183
- **操作权限**:
184
- - 读操作(get/show/list/effective/fields/schema/history/diff/current/boots/validate):人和 agent 均可
185
- - 快照管理(snapshot/restore/init/prune):仅人可执行
186
-
187
- **凭证安全**:
188
- - 凭证一律 `${VAR}` 引用,CLI 读命令永不展开、不泄露明文
189
- - `.env` 全程禁读写
190
-
191
- ## 通用约定
192
-
193
- - `--format json` — 所有子命令通用
194
- - 本命令操作本地配置,不连 AUN 网络
195
- - 单文件内 list 字段 `set` = 追加去重;删单个元素请直接编辑文件(角色/owner 链只增不减)
1
+ # ec config — 配置体系底层入口
2
+
3
+ 按作用域读写所有配置参数 + 配置快照/回滚/启动历史。触发词:看配置/改配置/查字段/列配置/校验配置/快照/回滚/历史/对比版本/启动记录。
4
+
5
+ > `ec config` 是配置读写的统一 CLI 入口;模型交互由 menu 协议和 slash `/model` 提供。
6
+ > 字段由共享 field policy 决定路由、值类型和访问级别;同一套规则用于 CLI、Menu 和 agent-tool。
7
+
8
+ ## 参数读写
9
+
10
+ ```bash
11
+ # 读 effective 值(显示覆盖链来源);可一次传多个字段批量读取(共享同一 selector/--format)
12
+ ec config get <field> [<field> ...] [--self <aid>] [--peer <X>] [--default] [--process]
13
+ # 单字段输出不变;多字段时 text 每行一条、json 返回 { ok, results: [...] }。
14
+ # 不支持的 runner 字段会保留逐字段 UNSUPPORTED_FIELD,但不阻断同批支持字段;其它失败退出码为 1
15
+
16
+ # 写参数:scope 由 selector 推断
17
+ ec config set <field> <value> [--self <aid>] [--peer <X>] [--default] [--process]
18
+
19
+ # 删除某层显式设置,回落下一层
20
+ ec config unset <field> [--self <aid>] [--peer <X>]
21
+
22
+ # 关系角色:通过 Role Assignment 服务读取、设置或撤销(仅支持 AUN private/group)
23
+ ec config get role --self <aid> --peer <peer-aid>
24
+ ec config set role <role-id> --self <aid> --peer <peer-aid>
25
+ ec config unset role --self <aid> --peer <peer-aid>
26
+
27
+ `role` 不走通用配置写入;设置/撤销仍执行角色目标校验、权限检查、revision CAS、原子写入和审计。
28
+
29
+ # 查看某一层文件原始内容(不合并,凭证显示 ${VAR} 不展开)
30
+ ec config show [--self <aid>] [--peer <X>] [--default] [--process]
31
+
32
+ # 打印合并后的全部生效配置
33
+ ec config effective [--self <aid>] [--peer <X>]
34
+
35
+ # 列出某作用域可设字段(类型/枚举值,来源 schema)
36
+ ec config fields [--self <aid>] [--default] [--process]
37
+
38
+ # 列出所有配置文件
39
+ ec config list
40
+
41
+ # 按 schema 校验配置文件
42
+ ec config validate [--self <aid>] [--peer <X>] [--default] [--process]
43
+
44
+ # 按 schema 物化骨架文件(仅人)
45
+ ec config init [--self <aid>] [--peer <X>] [--default] [--process]
46
+ ```
47
+
48
+ ## 快照 / 回滚
49
+
50
+ 总开关直接保存在 `$EVOLCORE_HOME/daemon.json` 顶层,默认 `true`:
51
+
52
+ ```bash
53
+ ec config set configSnapshots true --process
54
+ ec config set configSnapshots false --process
55
+ ```
56
+
57
+ 开启时首次成功启动创建全量基线,后续成功启动检测到配置变化后自动建立新版本。关闭时不写快照、启动日志,也不执行自检回落。
58
+
59
+ ```bash
60
+ # 立即创建快照(与当前版本比对,不一致才建;--full 强制新全量)(仅人)
61
+ ec config snapshot [--full] [--desc "说明"]
62
+
63
+ # 列出快照版本(版本号/类型/触发/时间/说明)
64
+ ec config history
65
+
66
+ # 对比两版本差异
67
+ ec config diff <v1> <v2>
68
+
69
+ # 恢复到指定版本:展开到工作目录 + 更新 current.json(先 pre-restore 快照)(仅人)
70
+ ec config restore <version>
71
+
72
+ # 显示 current.json 选定版本(上次启动回落时给出告警)
73
+ ec config current
74
+
75
+ # 查看启动历史(含回落标记)
76
+ ec config boots [-n N]
77
+
78
+ # 清理旧快照(默认 dry-run,--yes 真删;拒删被依赖全量 / current 指向版本)(仅人)
79
+ ec config prune [--keep-full N] [--keep-delta N] [--yes]
80
+ ```
81
+
82
+ ## Schema 查看
83
+
84
+ 查看随包分发的配置 schema **定义本身**(`kits/schemas/*.schema.*.json`)——不是读写配置值,而是查「某作用域有哪些字段、类型/枚举/默认、schema 有几个版本」。纯只读,人和 agent 均可。
85
+
86
+ ```bash
87
+ # 概览:列出全部逻辑 schema 及各自当前版本
88
+ ec config schema
89
+
90
+ # 列出某 schema 磁盘上的所有版本(* 标当前版本,附日期/说明)
91
+ ec config schema <name> --list
92
+
93
+ # 查看某 schema 的原始定义(缺省版本号 = 当前版本)
94
+ ec config schema <name> [version]
95
+ ```
96
+
97
+ 逻辑 schema 名(`<name>`):`daemon` / `defaults` / `agent-config` / `relation-config` /
98
+ `contact-book` / `role-registry` / `role-config`。
99
+
100
+ 三种输出模式:
101
+
102
+ | 调用形式 | mode | 输出 |
103
+ |----------|------|------|
104
+ | `config schema` | overview | 全部 schema + 各自当前版本号 |
105
+ | `config schema <name> --list` | versions | 该 schema 所有磁盘版本,`*` 标当前,附 date/description |
106
+ | `config schema <name> [version]` | content | 指定版本(缺省=当前)的完整 schema JSON |
107
+
108
+ 约定与报错:
109
+ - `--list` 与 version 参数互斥(`INVALID_CONFIG_COMMAND`)
110
+ - `--list` 或指定 version 时必须带 `<name>`(`MISSING_ARG`)
111
+ - version 须为非负整数;未知 name → `UNKNOWN_SCHEMA`;版本不存在 → `SCHEMA_VERSION_NOT_FOUND`(错误信息列出可用版本)
112
+
113
+ > 用途:写配置前先 `ec config fields` 看字段可设值,或 `ec config schema <name>` 看该层 schema 的完整字段约束与 `x-merge` 合并语义;排查「字段为何被拒/怎么合并」时定位 schema 版本。
114
+
115
+ ## 作用域 selector
116
+
117
+ | 参数 | 作用域 | 落盘 |
118
+ |------|--------|------|
119
+ | `--self <aid>` | agent 级 | `agents/<aid>/config.json` |
120
+ | `--self <aid> --peer <X>` | 关系级 | `agents/<aid>/relations/<peerKey>/config.json` |
121
+ | `--default` | 全局默认 | `agents/defaults.json` |
122
+ | `--process` | 进程级 | `~/.evolcore/daemon.json` |
123
+ | 写操作三者全无 | — | **拒绝**(防误写全局) |
124
+
125
+ `--peer` 取 `channelType#channelId` 或裸 aid(裸 aid 视为 `aun#<aid>`)。配置提交后开始处理的新
126
+ turn 使用新值;提交前已经开始的 turn 不被打断。
127
+
128
+ ## 覆盖链
129
+
130
+ ```
131
+ defaults → agent/config → relation/config
132
+ ```
133
+
134
+ ConfigManager 只合并上述物理层并返回物理来源。角色策略不进入配置合并链:`permissionMode` 和 `baseagents.*.model` 由消费方按当前角色单独应用。
135
+
136
+ ### Codex 用户提问
137
+
138
+ `baseagents.codex.enableRequestUserInput` 已纳入 defaults → agent → relation 覆盖链,默认 `true`。
139
+ 它控制 Codex **Default 模式的阻塞式 `request_user_input`**,对应 App Server 的
140
+ `item/tool/requestUserInput` 请求和 `default_mode_request_user_input` feature。
141
+ 新 turn 会把有效值写入原 Codex thread 的配置;不需要另建线程。
142
+
143
+ ```bash
144
+ ec config get baseagents.codex.enableRequestUserInput --self bot.agentid.pub
145
+ ec config set baseagents.codex.enableRequestUserInput true --self bot.agentid.pub
146
+ ec config set baseagents.codex.enableRequestUserInput false \
147
+ --self bot.agentid.pub --peer aun#alice.agentid.pub
148
+ ```
149
+
150
+ 该字段不是权限审批或 `request_user_input_async` 的关闭开关。异步问题由
151
+ `agentMessage.questions` 事件自动映射为可回答卡片,允许选择选项或自由输入;
152
+ Agent 可继续处理不依赖答案的工作。回答通过 Codex 原生 question-reply envelope
153
+ 提交:活动 turn 使用 `turn/steer`,已结束则通过持久队列恢复同一 Session 和 Codex thread。
154
+ 问题默认保留 24 小时,重启后恢复未回答卡片;会话绑定或授权变化后拒绝旧卡片回答。
155
+ 提交结果不明时不自动重发,避免重复回答。
156
+
157
+ 支持卡片的客户端沿用 `action_card` / `action_card_reply`,自由输入沿用 `compose`。
158
+ 命令入口为 `/ask <问题ID> <回答>`;只有一个待回答问题时也可 `/ask <选项编号或回答>`。
159
+ 不需要新增 async 开关,也不需要把异步问题当成普通聊天文本转发给 Agent。
160
+
161
+ ### Agent 消息准入策略
162
+
163
+ 消息准入策略保存在 `agents/<aid>/config.json` 的 `access` 字段,但它是 Agent 自身的安全边界,
164
+ 不参与 defaults/relation 有效覆盖:
165
+
166
+ ```json
167
+ {
168
+ "access": {
169
+ "policyMode": "contacts",
170
+ "requestLimit": { "maxTimes": 600, "coolDown": 3600 }
171
+ }
172
+ }
173
+ ```
174
+
175
+ `policyMode` 为 `open | contacts | owners`;`open` 对所有已配置渠道的私聊和群聊入站开放,`contacts`
176
+ 将 Agent 已加入并接收到的群聊视为授权,`owners` 仅 Owner 消息开放;群聊成员不按 Contact Book 联系人
177
+ 状态逐一过滤。`requestLimit` 只限制准入控制消息的自动回复、申请和绑定码提示,不是渠道准入开关;`coolDown`
178
+ 单位为秒。该对象由 Connect 的访问设置入口修改,不通过通用 relation/defaults 覆盖链放宽。
179
+
180
+ ### AUN 群规则加载策略
181
+
182
+ `groupRules.mode` 可设为 `load` 或 `ignore`,缺省为 `load`。该字段仅存在于 Agent 和 relation
183
+ 层,relation 可覆盖 Agent 默认值,`--default` 不支持。
184
+
185
+ ```bash
186
+ # Agent 默认值
187
+ ec config set groupRules.mode ignore --self bot.agentid.pub
188
+
189
+ # 当前群覆盖
190
+ ec config set groupRules.mode load \
191
+ --self bot.agentid.pub --peer aun#g-team.agentid.pub
192
+
193
+ # 查看有效值和来源 / 删除群覆盖
194
+ ec config get groupRules.mode \
195
+ --self bot.agentid.pub --peer aun#g-team.agentid.pub --format json
196
+ ec config unset groupRules.mode \
197
+ --self bot.agentid.pub --peer aun#g-team.agentid.pub
198
+ ```
199
+
200
+ `ignore` 表示运行时不访问远端群规则、不读本地物化文件、不注入规则正文,但不删除缓存,也不影响
201
+ `ec group rules` 的远端管理命令。配置切换不会自动创建或清空会话。Claude/Codex 从后续新 turn
202
+ 按当前值重新组装上下文;其他 runner 的 Menu 写入结果会提示新建或清空群会话后生效。
203
+
204
+ ## 权限控制
205
+
206
+ **指定关系读取**:Menu CLI 和托管 `config get` 中,实际 owner/admin 可显式使用
207
+ `--self <当前 Agent> --peer <目标关系>` 读取当前 Agent 的其他关系配置。admin 的命令授权、
208
+ 字段白名单和 `currentRelationOnly` 等限制继续生效;member/visitor 仍只允许当前关系。
209
+ 该能力只放开单字段或批量 `get`,不会放开普通 `set/unset`、`show/effective`,也不允许借关系 selector 跨 Agent。
210
+ peerKey 会规范化;读取不存在的关系仍按已有规则回落到上级配置并返回说明,不创建关系或修改授权。
211
+
212
+ **批量兼容性**:未实现 runner 的行为字段(如 `baseagents.hermes.model/effort`)返回
213
+ `{ ok: false, field, code: "UNSUPPORTED_FIELD", error }`。批量请求若只有这类兼容缺项,
214
+ 顶层 `ok=true`、退出码 0,其他有效字段照常返回;调用方应逐项检查 `results[].ok`。
215
+ 单独查询不支持字段仍失败(CLI 退出码 1,Menu 顶层错误归一化为 `NOT_SUPPORTED`)。
216
+ Menu 批量请求遇到真实权限拒绝仍整体拒绝并停止执行,不会把权限错误降级为兼容缺项。
217
+
218
+ **写权限**(API 层判定):
219
+ - **通用可写字段**:active_baseagent / baseagents / chatmode / show_activities / flush_delay / debounce / render
220
+ - **角色专用入口**:`roles/index.json` 与 `roles/{roleId}.json` 由角色服务维护;relation 的
221
+ `role` 由角色分配服务维护;`permissionMode` 仅在角色策略中维护
222
+ - **兼容字段**:`enable_rich_content` 仍可读取旧值,但已废弃且不再产生运行时效果
223
+ - **群规则策略**:`groupRules.mode` 仅当前 Agent 的实际 owner 可 set/unset;DaemonOwner 不继承群或 relation 写权限,其他角色可读取当前 relation 的有效值
224
+ - **Agent fullaccess 策略**:Agent 配置中的 `fullaccess.enabled` 缺失时关闭,仅可通过已认证的 EC Web Agent 设置修改;CLI、普通 Menu 和托管任务的 set/unset 均拒绝。该开关受 `daemon.json.fullaccess.enabled` 总开关约束;daemon 关闭时 EC Web 隐藏该项且开启请求被拒绝。双 Owner(AgentOwner + daemonOwner)条件在实际私聊任务执行时校验。
225
+ - **源码诊断白名单**:`readonlySourceDiagnostics` 默认关闭;开启后只读会话仅可在项目源码目录执行受限、可证明只读查询,配置/证书/快照/session/锁文件仍禁止访问
226
+ - **仅人可写**:channels / owners / admins / 凭证 / aid / enabled / projects / aun / models.allowed
227
+ - Agent 托管环境写仅人字段被拒
228
+
229
+ **操作权限**:
230
+ - 读操作(get/show/list/effective/fields/schema/history/diff/current/boots/validate):人和 agent 均可
231
+ - 快照管理(snapshot/restore/init/prune):仅人可执行
232
+
233
+ **凭证安全**:
234
+ - 凭证一律 `${VAR}` 引用,CLI 读命令永不展开、不泄露明文
235
+ - `.env` 全程禁读写
236
+
237
+ ## 通用约定
238
+
239
+ - `--format json` — 所有子命令通用
240
+ - 本命令操作本地配置,不连 AUN 网络
241
+ - 单文件内 list 字段 `set` = 追加去重;删单个元素请直接编辑文件(角色/owner 链只增不减)
@@ -1,68 +1,75 @@
1
- # ec contact — Agent 联系人与访问控制
2
-
3
- `ec contact` 管理指定 Agent 的 Contact Book v3。它只接受 AUN AID 主键;拉黑的是该 canonical AID,
4
- 因此会拒绝它在 AUN 以及所有已绑定外部渠道中的私聊入站。角色统一由 relation `config.json role` 管理。
5
-
6
- ## 命令
7
-
8
- ```bash
9
- ec contact add <aid> --self <agent-aid>
10
- ec contact block <aid> --self <agent-aid>
11
- ec contact unblock <aid> --self <agent-aid>
12
- ec contact list --blocked --self <agent-aid>
13
- ```
14
-
15
- 所有命令都要求显式 `--self`,支持 `--format json`。
16
-
17
- ## 约束
18
-
19
- - `<aid>` 和 `--self` 必须是合法 AID。
20
- - Agent 托管会话中的 `add` 只能针对当前 AUN 私聊对端;它创建/更新 `pending`,并向本 Agent Owner 发送审核卡片。
21
- - `add` 复用 `/request` 的联系人申请额度、过期和请求版本校验;已有 `pending`/`declined` 条目会重新走申请流程。
22
- - Owner 在审核卡片点击“通过”后才变为 active;`blocked` 必须先执行 `unblock`。
23
- - 直接从本机终端执行 `add` 属于本地管理操作,会直接创建或恢复 active 联系人;Connect `action=add` 同样是管理端直接操作。
24
- - 写入 Agent Owner 时,系统会自动创建该 Owner 的 active 联系人记录。
25
- - `block/unblock` 只接受已存在的联系人;不存在时返回 `NOT_FOUND`。
26
- - `block/unblock` 至少改变本 Agent 的入站接收策略;托管任务的普通私聊 `ec msg send` 对 blocked 目标也会在 daemon 侧被拒绝。非托管 AUN CLI 发送不读取本地联系人簿。不代表对端也拉黑了本 Agent。
27
- - Agent owner 不能被拉黑。
28
- - `list --blocked` 只列出当前 blocked contact,并返回 `contactRevision`。
29
-
30
- ## 权限边界
31
-
32
- 直接从本机终端运行时,这是本地管理命令。
33
-
34
- 从 Agent 活动任务执行时,CLI 不直接写文件,而是携带当前 session delegation token 调用 daemon `contact.op`:
35
-
36
- | 操作 | owner | admin | 普通角色 |
37
- |---|---:|---:|---:|
38
- | `list --blocked` | 允许 | 允许 | 拒绝 |
39
- | Agent 会话 `add` 当前私聊对端 | 允许 | 允许 | 由当前关系授权,受 AUN 私聊和申请限制 |
40
- | `block` / `unblock` | 允许 | 拒绝 | 拒绝 |
41
-
42
- 缺少、伪造、撤销或跨会话 delegation token 时失败关闭。托管调用的 `--self` 必须等于当前任务所属 Agent。
43
-
44
- 角色管理使用 Role Menu relation assignment;admin 的授予和撤销必须由 owner 执行。
45
-
46
- ## JSON 输出
47
-
48
- 拉黑成功:
49
-
50
- ```json
51
- {
52
- "ok": true,
53
- "operation": "set-blocked",
54
- "selfAid": "bot.agentid.pub",
55
- "primaryId": "peer.agentid.pub",
56
- "blocked": true,
57
- "changed": true,
58
- "contactRevision": "..."
59
- }
60
- ```
61
-
62
- ## 拉黑后的消息行为
63
-
64
- - AUN 和已绑定外部私聊身份的入站在 MessageBridge 业务入口被拦截,不进入 menu/auth/command/session/queue/LLM。
65
- - 群聊不按成员的联系人状态过滤;`open` 对所有已配置渠道的群聊入站开放,`contacts` 将 Agent 已加入并
66
- 接收到的群聊视为授权,`owners` 仅 Owner 消息开放。
67
- - 对 `ai`、`bot`、`agent`、`service` 类型的私聊对端,可限频返回 `[rejection] Not accepting messages from you.`。
68
- - 入站正文中的 `[rejection]` 没有协议控制语义。发送者未被本 Agent 拉黑时,该文本正常进入响应式会话。
1
+ # ec contact — Agent 联系人与访问控制
2
+
3
+ `ec contact` 管理指定 Agent 的 Contact Book v3。它只接受 AUN AID 主键;拉黑的是该 canonical AID,
4
+ 因此会拒绝它在 AUN 以及所有已绑定外部渠道中的私聊入站。角色统一由 relation `config.json role` 管理。
5
+
6
+ ## 命令
7
+
8
+ ```bash
9
+ ec contact add <aid> --self <agent-aid>
10
+ ec contact block <aid> --self <agent-aid>
11
+ ec contact unblock <aid> --self <agent-aid>
12
+ ec contact list --blocked [--self <agent-aid>]
13
+ ec contact list --pending [--self <agent-aid>]
14
+ ec contact list --all [--self <agent-aid>]
15
+ ec contact approve <aid> --request-id <id> [--self <agent-aid>]
16
+ ec contact reject <aid> --request-id <id> [--self <agent-aid>]
17
+ ec contact block-request <aid> --request-id <id> [--self <agent-aid>]
18
+ ```
19
+
20
+ 支持 `--format json`。本机 `list` 省略 `--self` 时聚合全部 Agent;写操作在仅有一个 Agent 时可自动推断,多 Agent 环境必须显式指定,避免误操作错误 Agent。
21
+
22
+ ## 约束
23
+
24
+ - `<aid>` 和 `--self` 必须是合法 AID。
25
+ - Agent 托管会话中的 `add` 只能针对当前 AUN 私聊对端;它创建/更新 `pending`,并向本 Agent Owner 发送审核卡片。
26
+ - `add` 复用 `/request` 的联系人申请额度、过期和请求版本校验;已有 `pending`/`declined` 条目会重新走申请流程。
27
+ - Owner 在审核卡片点击“通过”后才变为 active;`blocked` 必须先执行 `unblock`。
28
+ - `list --pending` 可查看仍待审核的申请及其 `requestId`;卡片过期或投递失败时,Owner 可用 `approve/reject/block-request` 通过 requestId 处理当前申请,过期申请需申请方重新提交。
29
+ - 直接从本机终端执行 `add` 属于本地管理操作,会直接创建或恢复 active 联系人;Connect `action=add` 同样是管理端直接操作。
30
+ - 写入 Agent Owner 时,系统会自动创建该 Owner 的 active 联系人记录。
31
+ - `block/unblock` 只接受已存在的联系人;不存在时返回 `NOT_FOUND`。
32
+ - `block/unblock` 至少改变本 Agent 的入站接收策略;托管任务的普通私聊 `ec msg send` 对 blocked 目标也会在 daemon 侧被拒绝。非托管 AUN CLI 发送不读取本地联系人簿。不代表对端也拉黑了本 Agent。
33
+ - Agent owner 不能被拉黑。
34
+ - `list --blocked` 只列出 blocked contact;`list --pending` 只列出待审申请;`list --all` 列出联系人全状态。指定 `--self` 时返回该 Agent 的 `contactRevision`,本机省略 `--self` 时按 Agent 聚合。
35
+
36
+ ## 权限边界
37
+
38
+ 直接从本机终端运行时,这是本地管理命令。
39
+
40
+ 从 Agent 活动任务执行时,CLI 不直接写文件,而是携带当前 session delegation token 调用 daemon `contact.op`:
41
+
42
+ | 操作 | owner | admin | 普通角色 |
43
+ |---|---:|---:|---:|
44
+ | `list --blocked/--pending/--all` | 允许 | 允许 | 拒绝 |
45
+ | Agent 会话 `add` 当前私聊对端 | 允许 | 允许 | 由当前关系授权,受 AUN 私聊和申请限制 |
46
+ | `block` / `unblock` | 允许 | 拒绝 | 拒绝 |
47
+ | `approve/reject/block-request` | 允许 | 允许 | 拒绝 |
48
+
49
+ 缺少、伪造、撤销或跨会话 delegation token 时失败关闭。托管调用省略 `--self` 时使用 delegation 中的当前 Agent;显式 `--self` 必须等于当前任务所属 Agent。
50
+
51
+ 角色管理使用 Role Menu relation assignment;admin 的授予和撤销必须由 owner 执行。
52
+
53
+ ## JSON 输出
54
+
55
+ 拉黑成功:
56
+
57
+ ```json
58
+ {
59
+ "ok": true,
60
+ "operation": "set-blocked",
61
+ "selfAid": "bot.agentid.pub",
62
+ "primaryId": "peer.agentid.pub",
63
+ "blocked": true,
64
+ "changed": true,
65
+ "contactRevision": "..."
66
+ }
67
+ ```
68
+
69
+ ## 拉黑后的消息行为
70
+
71
+ - AUN 和已绑定外部私聊身份的入站在 MessageBridge 业务入口被拦截,不进入 menu/auth/command/session/queue/LLM。
72
+ - 群聊不按成员的联系人状态过滤;`open` 对所有已配置渠道的群聊入站开放,`contacts` 将 Agent 已加入并
73
+ 接收到的群聊视为授权,`owners` 仅 Owner 消息开放。
74
+ - 对 `ai`、`bot`、`agent`、`service` 类型的私聊对端,可限频返回 `[rejection] Not accepting messages from you.`。
75
+ - 入站正文中的 `[rejection]` 没有协议控制语义。发送者未被本 Agent 拉黑时,该文本正常进入响应式会话。