evolcore 0.0.23 → 0.0.25

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 (245) hide show
  1. package/CHANGELOG.md +583 -516
  2. package/LICENSE +21 -21
  3. package/README.md +455 -453
  4. package/bin/codex-managed-acl.ps1 +160 -155
  5. package/bin/codex-managed-hook.mjs +209 -92
  6. package/bin/ec-safe-output.js +327 -245
  7. package/bin/ec.js +29 -29
  8. package/bin/install-codex-managed-hooks.mjs +555 -544
  9. package/dist/agents/baseagent-availability.js +4 -4
  10. package/dist/agents/baseagent.js +29 -1
  11. package/dist/agents/claude-runner.js +152 -14
  12. package/dist/agents/codex/app-server-client.js +18 -8
  13. package/dist/agents/codex/catalog.js +1 -1
  14. package/dist/agents/codex/diagnostics.js +215 -0
  15. package/dist/agents/codex-runner.js +445 -63
  16. package/dist/agents/ecagent-runner.js +31 -16
  17. package/dist/agents/gemini-runner.js +82 -4
  18. package/dist/agents/runner-types.js +1 -1
  19. package/dist/aun/aid/agentmd.js +56 -4
  20. package/dist/aun/aid/index.js +1 -0
  21. package/dist/aun/aid/managed-operation.js +80 -6
  22. package/dist/aun/aid/store.js +41 -0
  23. package/dist/aun/msg/managed-operation.js +6 -1
  24. package/dist/aun/outbox.js +56 -18
  25. package/dist/aun/rpc/client.js +4 -5
  26. package/dist/aun/storage/client.js +4 -1
  27. package/dist/aun/storage/index.js +1 -1
  28. package/dist/channels/aun.js +147 -76
  29. package/dist/channels/daemon.js +7 -1
  30. package/dist/channels/dingtalk.js +1 -0
  31. package/dist/channels/feishu.js +10 -4
  32. package/dist/channels/wecom.js +2 -1
  33. package/dist/cli/agent-command.js +214 -89
  34. package/dist/cli/agent-create.js +576 -0
  35. package/dist/cli/agent.js +129 -676
  36. package/dist/cli/aun-commands.js +419 -313
  37. package/dist/cli/bench.js +20 -20
  38. package/dist/cli/config.js +20 -20
  39. package/dist/cli/contact.js +10 -10
  40. package/dist/cli/ctl-command.js +22 -20
  41. package/dist/cli/daemon-commands.js +163 -32
  42. package/dist/cli/fs-command.js +67 -67
  43. package/dist/cli/handoff-command.js +7 -7
  44. package/dist/cli/index.js +79 -79
  45. package/dist/cli/link-rules.js +21 -21
  46. package/dist/cli/managed-command-guard.js +3 -0
  47. package/dist/cli/menu-client.js +11 -11
  48. package/dist/cli/net-check.js +22 -22
  49. package/dist/cli/queue-command.js +29 -29
  50. package/dist/cli/response.js +30 -30
  51. package/dist/cli/restart-monitor.js +462 -38
  52. package/dist/cli/stats.js +161 -51
  53. package/dist/cli/trigger-command.js +56 -56
  54. package/dist/config/builtin-roles.js +3 -0
  55. package/dist/config/config-manager.js +15 -0
  56. package/dist/config/config-operation-service.js +20 -3
  57. package/dist/config/resolved-config-op.js +39 -1
  58. package/dist/core/auth/auth-gateway.js +3 -2
  59. package/dist/core/auth/authorization-audit.js +72 -19
  60. package/dist/core/auth/operation-authorizer.js +125 -7
  61. package/dist/core/auth/operation-catalog.js +26 -2
  62. package/dist/core/auth/remote-access-store.js +3 -2
  63. package/dist/core/baseagent-loader.js +4 -4
  64. package/dist/core/bootstrap-messages.js +39 -18
  65. package/dist/core/bootstrap-service.js +32 -26
  66. package/dist/core/capability/capability-manager.js +8 -4
  67. package/dist/core/capability/providers/codex-capability-provider.js +1 -1
  68. package/dist/core/command/agent-control.js +60 -26
  69. package/dist/core/command/cli-intent-parser.js +18 -0
  70. package/dist/core/command/command-handler.js +173 -36
  71. package/dist/core/command/menu-catalog.js +4 -1
  72. package/dist/core/command/menu-handler.js +315 -75
  73. package/dist/core/command/menu-protocol.js +7 -2
  74. package/dist/core/command/slash-gate.js +1 -3
  75. package/dist/core/command/slash-handler.js +166 -57
  76. package/dist/core/data-migration.js +5 -15
  77. package/dist/core/event-catalog.js +8 -0
  78. package/dist/core/evolagent.js +3 -3
  79. package/dist/core/handoff/runtime.js +3 -1
  80. package/dist/core/handoff/store.js +7 -1
  81. package/dist/core/message/im-renderer.js +13 -6
  82. package/dist/core/message/message-bridge.js +5 -36
  83. package/dist/core/message/message-utils.js +6 -3
  84. package/dist/core/message/response-engine.js +85 -27
  85. package/dist/core/model/catalog-service.js +3 -1
  86. package/dist/core/model/model-catalog.js +10 -0
  87. package/dist/core/model/model-permission.js +4 -1
  88. package/dist/core/permission/approval-gateway.js +169 -33
  89. package/dist/core/permission/tool-policy.js +56 -10
  90. package/dist/core/session/adapters/codex-session-file-adapter.js +71 -3
  91. package/dist/core/session/session-manager.js +49 -13
  92. package/dist/core/session/session-renew.js +1 -0
  93. package/dist/index.js +327 -134
  94. package/dist/ipc.js +68 -21
  95. package/dist/paths.js +23 -1
  96. package/dist/stats/billing.js +18 -4
  97. package/dist/stats/db.js +159 -159
  98. package/dist/stats/eck-vars.js +9 -9
  99. package/dist/stats/query.js +139 -139
  100. package/dist/stats/role-budget.js +6 -6
  101. package/dist/stats/writer.js +51 -51
  102. package/dist/utils/atomic-write.js +26 -2
  103. package/dist/utils/avatar-upload.js +282 -23
  104. package/dist/utils/cross-platform.js +436 -1
  105. package/dist/utils/error-dict.json +160 -160
  106. package/dist/utils/error-utils.js +11 -4
  107. package/dist/utils/macos-autostart.js +22 -22
  108. package/dist/utils/model-prices.jsonl +23 -20
  109. package/dist/utils/npm-ops.js +24 -1
  110. package/dist/utils/welcome.js +22 -22
  111. package/dist/utils/windows-autostart.js +1 -1
  112. package/ecagent/LICENSE +21 -21
  113. package/ecagent/NOTICE +11 -11
  114. package/ecagent/README.md +61 -61
  115. package/ecagent/dist/harness/compaction/branch-summarization.js +30 -30
  116. package/ecagent/dist/harness/compaction/compaction.js +83 -83
  117. package/ecagent/dist/harness/messages.js +7 -7
  118. package/kits/docs/GUIDE.md +20 -20
  119. package/kits/docs/INDEX.md +66 -66
  120. package/kits/docs/aun/CHEATSHEET.md +19 -19
  121. package/kits/docs/aun/SYNC_PROTOCOL.md +15 -15
  122. package/kits/docs/channels/aun.md +56 -56
  123. package/kits/docs/channels/feishu.md +56 -56
  124. package/kits/docs/context-assembly.md +365 -364
  125. package/kits/docs/eck_templates/GUIDE.template.md +22 -22
  126. package/kits/docs/eck_templates/INDEX.template.md +28 -28
  127. package/kits/docs/eck_templates/path-registry.template.md +33 -33
  128. package/kits/docs/eck_templates/runtime.template.md +19 -19
  129. package/kits/docs/evolcore/INDEX.md +71 -69
  130. package/kits/docs/evolcore/agent-create.md +170 -156
  131. package/kits/docs/evolcore/agent.md +83 -73
  132. package/kits/docs/evolcore/aid.md +64 -62
  133. package/kits/docs/evolcore/codex-windows-sandbox.md +146 -0
  134. package/kits/docs/evolcore/config.md +195 -195
  135. package/kits/docs/evolcore/contact.md +68 -68
  136. package/kits/docs/evolcore/ctl.md +46 -46
  137. package/kits/docs/evolcore/event.md +216 -216
  138. package/kits/docs/evolcore/fs-architecture.md +1215 -1215
  139. package/kits/docs/evolcore/fs.md +110 -110
  140. package/kits/docs/evolcore/group-collaboration.md +243 -243
  141. package/kits/docs/evolcore/group-fs.md +17 -17
  142. package/kits/docs/evolcore/group-rules.md +251 -251
  143. package/kits/docs/evolcore/group.md +152 -152
  144. package/kits/docs/evolcore/menu-client.md +34 -34
  145. package/kits/docs/evolcore/model.md +50 -50
  146. package/kits/docs/evolcore/msg.md +165 -165
  147. package/kits/docs/evolcore/response.md +75 -75
  148. package/kits/docs/evolcore/rpc.md +37 -37
  149. package/kits/docs/evolcore/self-summary.md +29 -29
  150. package/kits/docs/evolcore/stats.md +83 -83
  151. package/kits/docs/evolcore/storage.md +50 -50
  152. package/kits/docs/evolcore/trigger.md +575 -575
  153. package/kits/docs/identity/AID_PROFILE_SPEC.md +26 -26
  154. package/kits/docs/identity/PATH_OPS.md +16 -16
  155. package/kits/docs/identity/ROLE_DETAIL.md +25 -25
  156. package/kits/docs/identity/identity-tools.md +26 -26
  157. package/kits/docs/path-registry.md +62 -62
  158. package/kits/docs/prompt-loading-architecture.md +270 -269
  159. package/kits/docs/venues/aun-group.md +45 -45
  160. package/kits/docs/venues/aun-private.md +10 -10
  161. package/kits/docs/venues/client-desktop.md +10 -10
  162. package/kits/docs/venues/client-mobile.md +10 -10
  163. package/kits/docs/venues/feishu-group.md +13 -13
  164. package/kits/docs/venues/feishu-private.md +9 -9
  165. package/kits/docs/venues/group.md +25 -25
  166. package/kits/docs/venues/private.md +10 -10
  167. package/kits/eck_manifest.auxiliary.json +43 -43
  168. package/kits/eck_manifest.json +195 -183
  169. package/kits/eck_message_manifest.json +74 -74
  170. package/kits/migrations/README-role-config-v4.md +32 -32
  171. package/kits/migrations/migrate-contact-book-v2.mjs +748 -748
  172. package/kits/migrations/migrate-role-config-v4.mjs +614 -614
  173. package/kits/migrations/migrate-role-config-v5.mjs +365 -365
  174. package/kits/migrations/rename-config-file.mjs +99 -99
  175. package/kits/rules/01-overview.md +162 -162
  176. package/kits/rules/02-navigation.md +96 -96
  177. package/kits/rules/03-identity.md +39 -37
  178. package/kits/rules/04-relation.md +75 -75
  179. package/kits/rules/05-venue.md +60 -60
  180. package/kits/rules/06-channel.md +63 -63
  181. package/kits/schemas/_meta.json +53 -53
  182. package/kits/schemas/agent-config.schema.1.json +177 -177
  183. package/kits/schemas/agent-config.schema.10.json +395 -395
  184. package/kits/schemas/agent-config.schema.11.json +421 -421
  185. package/kits/schemas/agent-config.schema.12.json +427 -427
  186. package/kits/schemas/agent-config.schema.2.json +239 -239
  187. package/kits/schemas/agent-config.schema.3.json +119 -119
  188. package/kits/schemas/agent-config.schema.4.json +208 -208
  189. package/kits/schemas/agent-config.schema.5.json +326 -326
  190. package/kits/schemas/agent-config.schema.6.json +322 -322
  191. package/kits/schemas/agent-config.schema.7.json +303 -303
  192. package/kits/schemas/agent-config.schema.8.json +304 -304
  193. package/kits/schemas/agent-config.schema.9.json +364 -364
  194. package/kits/schemas/contact-book.schema.1.json +36 -36
  195. package/kits/schemas/contact-book.schema.2.json +43 -43
  196. package/kits/schemas/contact-book.schema.3.json +67 -67
  197. package/kits/schemas/daemon.schema.1.json +91 -91
  198. package/kits/schemas/daemon.schema.2.json +101 -101
  199. package/kits/schemas/daemon.schema.3.json +123 -123
  200. package/kits/schemas/daemon.schema.4.json +136 -136
  201. package/kits/schemas/daemon.schema.5.json +135 -135
  202. package/kits/schemas/daemon.schema.6.json +131 -131
  203. package/kits/schemas/defaults.schema.1.json +81 -81
  204. package/kits/schemas/defaults.schema.2.json +85 -85
  205. package/kits/schemas/defaults.schema.3.json +73 -73
  206. package/kits/schemas/defaults.schema.4.json +107 -107
  207. package/kits/schemas/defaults.schema.5.json +119 -119
  208. package/kits/schemas/menu-exec-schema-commands.md +208 -208
  209. package/kits/schemas/migrations/README.md +30 -30
  210. package/kits/schemas/relation-config.schema.1.json +158 -158
  211. package/kits/schemas/relation-config.schema.2.json +73 -73
  212. package/kits/schemas/relation-config.schema.3.json +50 -50
  213. package/kits/schemas/relation-config.schema.4.json +47 -47
  214. package/kits/schemas/relation-config.schema.5.json +47 -47
  215. package/kits/schemas/relation-config.schema.6.json +46 -46
  216. package/kits/schemas/relation-config.schema.7.json +59 -59
  217. package/kits/schemas/relation-config.schema.8.json +103 -103
  218. package/kits/schemas/role-config.schema.1.json +201 -201
  219. package/kits/schemas/role-registry.schema.1.json +35 -35
  220. package/kits/schemas/single-session.schema.1.json +31 -31
  221. package/kits/schemas/single-session.schema.2.json +57 -57
  222. package/kits/schemas/single-session.schema.3.json +32 -32
  223. package/kits/templates/bootstrap-welcome.md +17 -17
  224. package/kits/templates/message-fragments/handoff-context-to-target.md +9 -9
  225. package/kits/templates/message-fragments/handoff-request-to-target.md +19 -19
  226. package/kits/templates/message-fragments/handoff-response-to-origin.md +9 -9
  227. package/kits/templates/message-fragments/inject-default.md +2 -2
  228. package/kits/templates/message-fragments/item.md +2 -2
  229. package/kits/templates/roles/admin.json +96 -82
  230. package/kits/templates/roles/member.json +97 -96
  231. package/kits/templates/roles/owner.json +9 -9
  232. package/kits/templates/roles/visitor.json +86 -85
  233. package/kits/templates/system-fragments/baseagent.md +14 -14
  234. package/kits/templates/system-fragments/bootstrap.md +38 -29
  235. package/kits/templates/system-fragments/channel.md +64 -64
  236. package/kits/templates/system-fragments/commands.md +28 -28
  237. package/kits/templates/system-fragments/identity.md +13 -13
  238. package/kits/templates/system-fragments/relation.md +19 -19
  239. package/kits/templates/system-fragments/session.md +59 -59
  240. package/kits/templates/system-fragments/venue.md +31 -31
  241. package/package.json +98 -94
  242. package/AGENTS.md +0 -62
  243. package/dist/utils/codex-cli.js +0 -43
  244. package/skills/eclink/SKILL.md +0 -84
  245. package/skills/eclink/agents/openai.yaml +0 -4
@@ -1,68 +1,68 @@
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
+ ```
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,46 +1,46 @@
1
- # ec ctl — 当前会话工具
2
-
3
- 在**当前托管会话**中发送消息或文件、重命名、管理队列,以及查询项目路径和会话状态。
4
-
5
- > ctl 命令通过 IPC 转发给 daemon,仅在 evolcore 托管环境中可用(依赖 `EVOLCORE_SESSION_ID`)。
6
-
7
- ## 查询
8
-
9
- ```bash
10
- ec ctl status # 查看会话状态
11
- ec ctl pwd # 显示当前项目路径
12
- ec ctl help # 显示帮助
13
- ```
14
-
15
- ## 会话名称
16
-
17
- ```bash
18
- ec ctl name <新名称>
19
- ```
20
-
21
- ## 消息(兜底用)
22
-
23
- ```bash
24
- ec ctl send "<text>" # 主动发送文本(proactive 模式)
25
- ec ctl file [channel] <path> # 发送项目内文件
26
- ```
27
-
28
- > 发消息**首选 `ec msg send <self-aid> <peer-id> "<text>"`**(见 msg.md)。
29
- > `ec ctl send` 只在拿不到自己的 AID 时兜底——它自动继承当前会话的 AID 和对端。
30
-
31
- ## 消息队列
32
-
33
- ```bash
34
- ec ctl queue # 查看当前会话队列
35
- ec ctl queue --full # 显示完整预览
36
- ec ctl queue --clear # 清空待处理消息
37
- ec ctl queue --cancel <id> # 取消指定消息
38
- ec ctl queue --interrupt # 打断当前处理
39
- ```
40
-
41
- ## 相关命令集
42
-
43
- - agent 全生命周期管理(创建/启停/配置)→ `ec agent`(见 agent.md)
44
- - AID 身份与 agent.md 名片 → `ec aid`(见 aid.md)
45
- - 定时与事件触发器 → `ec trigger`(见 trigger.md)
46
- - 模型查看与切换通过 menu 协议或 slash `/model` 完成
1
+ # ec ctl — 当前会话工具
2
+
3
+ 在**当前托管会话**中发送消息或文件、重命名、管理队列,以及查询项目路径和会话状态。
4
+
5
+ > ctl 命令通过 IPC 转发给 daemon,仅在 evolcore 托管环境中可用(依赖 `EVOLCORE_SESSION_ID`)。
6
+
7
+ ## 查询
8
+
9
+ ```bash
10
+ ec ctl status # 查看会话状态
11
+ ec ctl pwd # 显示当前项目路径
12
+ ec ctl help # 显示帮助
13
+ ```
14
+
15
+ ## 会话名称
16
+
17
+ ```bash
18
+ ec ctl name <新名称>
19
+ ```
20
+
21
+ ## 消息(兜底用)
22
+
23
+ ```bash
24
+ ec ctl send "<text>" # 主动发送文本(proactive 模式)
25
+ ec ctl file [channel] <path> # 发送项目内文件
26
+ ```
27
+
28
+ > 发消息**首选 `ec msg send <self-aid> <peer-id> "<text>"`**(见 msg.md)。
29
+ > `ec ctl send` 只在拿不到自己的 AID 时兜底——它自动继承当前会话的 AID 和对端。
30
+
31
+ ## 消息队列
32
+
33
+ ```bash
34
+ ec ctl queue # 查看当前会话队列
35
+ ec ctl queue --full # 显示完整预览
36
+ ec ctl queue --clear # 清空待处理消息
37
+ ec ctl queue --cancel <id> # 取消指定消息
38
+ ec ctl queue --interrupt # 打断当前处理
39
+ ```
40
+
41
+ ## 相关命令集
42
+
43
+ - agent 全生命周期管理(创建/启停/配置)→ `ec agent`(见 agent.md)
44
+ - AID 身份与 agent.md 名片 → `ec aid`(见 aid.md)
45
+ - 定时与事件触发器 → `ec trigger`(见 trigger.md)
46
+ - 模型查看与切换通过 menu 协议或 slash `/model` 完成
@@ -1,216 +1,216 @@
1
- # Trigger Event Catalog
2
-
3
- 本目录用于编写 `source.type = "event"` 的 trigger 时按需查阅。最终事实源是
4
- `$PACKAGE_ROOT/src/core/event-bus.ts` 的 `GatewayEvent` 类型;本文只做面向 trigger
5
- 作者的事件索引和使用约定。
6
-
7
- ## Event Source 规则
8
-
9
- `source.eventPattern` 支持三种形式:
10
-
11
- | 形式 | 示例 | 含义 |
12
- |------|------|------|
13
- | 精确事件名 | `message:received` | 只监听这一种事件 |
14
- | 命名空间前缀 | `task:*` | 监听该命名空间下所有事件 |
15
- | 全量 | `*` | 监听所有 EventBus 事件,需谨慎使用 filter |
16
-
17
- `source.filter.match` 用事件 payload 的字段路径做匹配,支持:
18
-
19
- | 操作 | 示例 |
20
- |------|------|
21
- | 等值 | `{ "channel": "feishu" }` |
22
- | `$in` | `{ "toolName": { "$in": ["Bash", "Edit"] } }` |
23
- | `$regex` | `{ "content": { "$regex": "^/echo" } }` |
24
- | 数值比较 | `{ "durationMs": { "$gte": 30000 } }` |
25
- | 存在性 | `{ "userId": { "$exists": true } }` |
26
-
27
- 字段路径支持点号,例如 `replyContext.threadId`。禁止使用 `__proto__`、`prototype`、
28
- `constructor` 路径段。
29
-
30
- ## 循环防护
31
-
32
- 监听 `trigger:*` 时,系统默认禁止 trigger 响应自身产生的 trigger 事件:
33
- 当事件带有 `originTriggerId` 且等于当前 trigger id 时,该事件会被跳过。
34
-
35
- 跨 trigger 的链式触发仍然允许。需要追踪链路时使用:
36
-
37
- | 字段 | 含义 |
38
- |------|------|
39
- | `runId` | 本次 trigger run 的唯一 ID |
40
- | `originTriggerId` | 产生当前 `trigger:*` 事件的 trigger id |
41
-
42
- ## 常用事件
43
-
44
- | 事件 | 常见用途 |
45
- |------|----------|
46
- | `message:received` | 用户消息触发自动化 |
47
- | `task:completed` | agent 完成回复后触发后处理 |
48
- | `task:error` | agent 任务失败后触发诊断或告警 |
49
- | `permission:requested` | 观察权限请求 |
50
- | `permission:cancelled` | 权限请求因中断等原因被取消 |
51
- | `runner:model-changed` | 模型或推理强度变化后同步状态 |
52
- | `agent:*` | agent 生命周期、配置变化、运行态变化 |
53
- | `trigger:*` | trigger 编排、链式触发、审计 |
54
-
55
- ## 事件目录
56
-
57
- ### system
58
-
59
- | 事件 | Payload |
60
- |------|---------|
61
- | `system:started` | `{ channels, timestamp }` |
62
- | `system:shutdown` | `{ reason?, timestamp? }` |
63
- | `system:restart` | `{ channel, channelId }` |
64
-
65
- ### channel
66
-
67
- | 事件 | Payload |
68
- |------|---------|
69
- | `channel:connected` | `{ channel, channelName?, timestamp? }` |
70
- | `channel:disconnected` | `{ channel, channelName?, reason? }` |
71
- | `channel:error` | `{ channel, channelName?, status, message, timestamp? }` |
72
- | `channel:owner-bound` | `{ channel, channelName?, userId }` |
73
-
74
- ### session
75
-
76
- | 事件 | Payload |
77
- |------|---------|
78
- | `session:created` | `{ sessionId, channel, channelName?, channelId, projectPath?, name?, chatType?, threadId?, timestamp? }` |
79
- | `session:switched` | `{ sessionId, fromSessionId, toSessionId }` |
80
- | `session:deleted` | `{ sessionId }` |
81
- | `session:renamed` | `{ sessionId, oldName, newName }` |
82
- | `session:forked` | `{ sessionId, sourceSessionId, name? }` |
83
- | `session:rewind` | `{ sessionId, turnNum, mode }` |
84
- | `session:imported` | `{ sessionId, agentSessionId, projectPath }` |
85
- | `session:chat-mode-changed` | `{ sessionId, mode, timestamp? }` |
86
- | `session:dispatch-mode-changed` | `{ sessionId, mode, timestamp? }` |
87
-
88
- ### message
89
-
90
- | 事件 | Payload |
91
- |------|---------|
92
- | `message:received` | `{ sessionId, channel, channelName?, channelId, content, userId?, agentName?, timestamp? }` |
93
- | `message:text` | `{ sessionId, text, isFinal }` |
94
- | `message:thought-put` | `{ agentName, channelId, taskId?, text? }` |
95
-
96
- ### task
97
-
98
- | 事件 | Payload |
99
- |------|---------|
100
- | `task:started` | `{ sessionId, agentName?, encrypt?, chatmode? }` |
101
- | `task:queued` | `{ channel, channelId, replyContext? }` |
102
- | `task:completed` | `{ sessionId, channel, channelName?, channelId, finalText?, durationMs?, terminalReason?, agentName?, numTurns?, timestamp? }` |
103
- | `task:error` | `{ sessionId, error, errorType, terminalReason?, agentName? }` |
104
- | `task:interrupted` | `{ sessionId, reason?, agentName? }` |
105
-
106
- ### tool
107
-
108
- | 事件 | Payload |
109
- |------|---------|
110
- | `tool:use` | `{ sessionId, toolName, input, timestamp? }` |
111
- | `tool:result` | `{ sessionId, toolName, isError?, agentName?, timestamp? }` |
112
-
113
- ### permission
114
-
115
- | 事件 | Payload |
116
- |------|---------|
117
- | `permission:requested` | `{ sessionId, requestId, toolName, input }` |
118
- | `permission:resolved` | `{ sessionId, requestId, approved }` |
119
- | `permission:cancelled` | `{ sessionId, requestId, toolName?, reason? }` |
120
-
121
- ### runner
122
-
123
- | 事件 | Payload |
124
- |------|---------|
125
- | `runner:compact-start` | `{ sessionId }` |
126
- | `runner:compact-complete` | `{ sessionId, preTokens }` |
127
- | `runner:model-changed` | `{ sessionId?, agentName?, baseagent?, model?, effort?, timestamp? }` |
128
- | `runner:idle-timeout` | `{ sessionId, idleSec }` |
129
- | `runner:idle-notify` | `{ sessionId, idleSec, totalEvents, totalToolCalls, lastToolName? }` |
130
- | `runner:idle-warn` | `{ sessionId, idleSec, totalEvents, totalToolCalls, lastToolName? }` |
131
- | `runner:file-sent` | `{ sessionId, filePath, channel, channelName? }` |
132
- | `runner:state-changed` | `{ sessionId, state }` |
133
- | `runner:status` | `{ sessionId, subtype, message, timestamp? }` |
134
-
135
- ### self-heal
136
-
137
- | 事件 | Payload |
138
- |------|---------|
139
- | `self-heal:started` | `{ reason }` |
140
- | `self-heal:attempt` | `{ attemptNumber, maxAttempts }` |
141
- | `self-heal:completed` | `{ success, attempts }` |
142
-
143
- ### trigger
144
-
145
- | 事件 | Payload |
146
- |------|---------|
147
- | `trigger:registered` | `{ triggerId, name, peerId?, targetChannel?, targetChannelId?, scheduleType, scheduleValue, timestamp? }` |
148
- | `trigger:updated` | `{ triggerId, name, peerId?, scheduleType, scheduleValue, timestamp? }` |
149
- | `trigger:fired` | `{ triggerId, name, runId, originTriggerId, fireTime, targetChannel?, targetChannelId?, scheduleType, timestamp? }` |
150
- | `trigger:completed` | `{ triggerId, name, runId, originTriggerId, messageId, durationMs, targetChannel, targetChannelId, fireTime }` |
151
- | `trigger:failed` | `{ triggerId, name, runId, originTriggerId, messageId, error, targetChannel, targetChannelId, fireTime, phase }` |
152
- | `trigger:skipped` | `{ triggerId, name, runId, originTriggerId, reason, targetChannel, targetChannelId, fireTime? }` |
153
- | `trigger:cancelled` | `{ triggerId, name, by }` |
154
-
155
- ### agent
156
-
157
- | 事件 | Payload |
158
- |------|---------|
159
- | `agent:created` | `{ aid, name?, baseagent?, projectPath?, owner?, timestamp? }` |
160
- | `agent:updated` | `{ aid, timestamp? }` |
161
- | `agent:reloaded` | `{ aid, timestamp? }` |
162
- | `agent:enabled` | `{ aid, reloaded?, timestamp? }` |
163
- | `agent:disabled` | `{ aid, reloaded?, timestamp? }` |
164
- | `agent:deleted` | `{ aid, purged?, timestamp? }` |
165
- | `agent:started` | `{ aid, timestamp? }` |
166
- | `agent:stopped` | `{ aid, timestamp? }` |
167
- | `agent:error` | `{ aid, action?, error, timestamp? }` |
168
- | `agent:baseagent-changed` | `{ aid, baseagent, previousBaseagent?, scope, timestamp? }` |
169
-
170
- ## 示例
171
-
172
- 监听飞书用户消息:
173
-
174
- ```json
175
- {
176
- "source": {
177
- "type": "event",
178
- "eventPattern": "message:received",
179
- "filter": {
180
- "match": {
181
- "channel": "feishu",
182
- "content": { "$regex": "^/echo" }
183
- }
184
- }
185
- }
186
- }
187
- ```
188
-
189
- 监听非自身产生的 trigger 完成事件:
190
-
191
- ```json
192
- {
193
- "source": {
194
- "type": "event",
195
- "eventPattern": "trigger:completed",
196
- "filter": {
197
- "match": {
198
- "targetChannel": { "$exists": true }
199
- }
200
- }
201
- }
202
- }
203
- ```
204
-
205
- ## 不存在或已移除的事件
206
-
207
- 不要使用这些历史设计稿中出现过的事件:
208
-
209
- | 事件 | 替代 |
210
- |------|------|
211
- | `message:sent-out` | 使用 `task:completed` |
212
- | `permission:timeout` | 当前权限不会 timeout;取消用 `permission:cancelled` |
213
- | `session:safe-mode-entered` / `session:safe-mode-exited` | 已移除 |
214
- | `project:switched` / `project:bound` | 已移除 |
215
- | `config:corrupted` | 已移除 |
216
- | `agent:create-failed` | 使用 `agent:error` 且 `action = "create"` |
1
+ # Trigger Event Catalog
2
+
3
+ 本目录用于编写 `source.type = "event"` 的 trigger 时按需查阅。最终事实源是
4
+ `$PACKAGE_ROOT/src/core/event-bus.ts` 的 `GatewayEvent` 类型;本文只做面向 trigger
5
+ 作者的事件索引和使用约定。
6
+
7
+ ## Event Source 规则
8
+
9
+ `source.eventPattern` 支持三种形式:
10
+
11
+ | 形式 | 示例 | 含义 |
12
+ |------|------|------|
13
+ | 精确事件名 | `message:received` | 只监听这一种事件 |
14
+ | 命名空间前缀 | `task:*` | 监听该命名空间下所有事件 |
15
+ | 全量 | `*` | 监听所有 EventBus 事件,需谨慎使用 filter |
16
+
17
+ `source.filter.match` 用事件 payload 的字段路径做匹配,支持:
18
+
19
+ | 操作 | 示例 |
20
+ |------|------|
21
+ | 等值 | `{ "channel": "feishu" }` |
22
+ | `$in` | `{ "toolName": { "$in": ["Bash", "Edit"] } }` |
23
+ | `$regex` | `{ "content": { "$regex": "^/echo" } }` |
24
+ | 数值比较 | `{ "durationMs": { "$gte": 30000 } }` |
25
+ | 存在性 | `{ "userId": { "$exists": true } }` |
26
+
27
+ 字段路径支持点号,例如 `replyContext.threadId`。禁止使用 `__proto__`、`prototype`、
28
+ `constructor` 路径段。
29
+
30
+ ## 循环防护
31
+
32
+ 监听 `trigger:*` 时,系统默认禁止 trigger 响应自身产生的 trigger 事件:
33
+ 当事件带有 `originTriggerId` 且等于当前 trigger id 时,该事件会被跳过。
34
+
35
+ 跨 trigger 的链式触发仍然允许。需要追踪链路时使用:
36
+
37
+ | 字段 | 含义 |
38
+ |------|------|
39
+ | `runId` | 本次 trigger run 的唯一 ID |
40
+ | `originTriggerId` | 产生当前 `trigger:*` 事件的 trigger id |
41
+
42
+ ## 常用事件
43
+
44
+ | 事件 | 常见用途 |
45
+ |------|----------|
46
+ | `message:received` | 用户消息触发自动化 |
47
+ | `task:completed` | agent 完成回复后触发后处理 |
48
+ | `task:error` | agent 任务失败后触发诊断或告警 |
49
+ | `permission:requested` | 观察权限请求 |
50
+ | `permission:cancelled` | 权限请求因中断等原因被取消 |
51
+ | `runner:model-changed` | 模型或推理强度变化后同步状态 |
52
+ | `agent:*` | agent 生命周期、配置变化、运行态变化 |
53
+ | `trigger:*` | trigger 编排、链式触发、审计 |
54
+
55
+ ## 事件目录
56
+
57
+ ### system
58
+
59
+ | 事件 | Payload |
60
+ |------|---------|
61
+ | `system:started` | `{ channels, timestamp }` |
62
+ | `system:shutdown` | `{ reason?, timestamp? }` |
63
+ | `system:restart` | `{ channel, channelId }` |
64
+
65
+ ### channel
66
+
67
+ | 事件 | Payload |
68
+ |------|---------|
69
+ | `channel:connected` | `{ channel, channelName?, timestamp? }` |
70
+ | `channel:disconnected` | `{ channel, channelName?, reason? }` |
71
+ | `channel:error` | `{ channel, channelName?, status, message, timestamp? }` |
72
+ | `channel:owner-bound` | `{ channel, channelName?, userId }` |
73
+
74
+ ### session
75
+
76
+ | 事件 | Payload |
77
+ |------|---------|
78
+ | `session:created` | `{ sessionId, channel, channelName?, channelId, projectPath?, name?, chatType?, threadId?, timestamp? }` |
79
+ | `session:switched` | `{ sessionId, fromSessionId, toSessionId }` |
80
+ | `session:deleted` | `{ sessionId }` |
81
+ | `session:renamed` | `{ sessionId, oldName, newName }` |
82
+ | `session:forked` | `{ sessionId, sourceSessionId, name? }` |
83
+ | `session:rewind` | `{ sessionId, turnNum, mode }` |
84
+ | `session:imported` | `{ sessionId, agentSessionId, projectPath }` |
85
+ | `session:chat-mode-changed` | `{ sessionId, mode, timestamp? }` |
86
+ | `session:dispatch-mode-changed` | `{ sessionId, mode, timestamp? }` |
87
+
88
+ ### message
89
+
90
+ | 事件 | Payload |
91
+ |------|---------|
92
+ | `message:received` | `{ sessionId, channel, channelName?, channelId, content, userId?, agentName?, timestamp? }` |
93
+ | `message:text` | `{ sessionId, text, isFinal }` |
94
+ | `message:thought-put` | `{ agentName, channelId, taskId?, text? }` |
95
+
96
+ ### task
97
+
98
+ | 事件 | Payload |
99
+ |------|---------|
100
+ | `task:started` | `{ sessionId, agentName?, encrypt?, chatmode? }` |
101
+ | `task:queued` | `{ channel, channelId, replyContext? }` |
102
+ | `task:completed` | `{ sessionId, channel, channelName?, channelId, finalText?, durationMs?, terminalReason?, agentName?, numTurns?, timestamp? }` |
103
+ | `task:error` | `{ sessionId, error, errorType, terminalReason?, agentName? }` |
104
+ | `task:interrupted` | `{ sessionId, reason?, agentName? }` |
105
+
106
+ ### tool
107
+
108
+ | 事件 | Payload |
109
+ |------|---------|
110
+ | `tool:use` | `{ sessionId, toolName, input, timestamp? }` |
111
+ | `tool:result` | `{ sessionId, toolName, isError?, agentName?, timestamp? }` |
112
+
113
+ ### permission
114
+
115
+ | 事件 | Payload |
116
+ |------|---------|
117
+ | `permission:requested` | `{ sessionId, requestId, toolName, input }` |
118
+ | `permission:resolved` | `{ sessionId, requestId, approved }` |
119
+ | `permission:cancelled` | `{ sessionId, requestId, toolName?, reason? }` |
120
+
121
+ ### runner
122
+
123
+ | 事件 | Payload |
124
+ |------|---------|
125
+ | `runner:compact-start` | `{ sessionId }` |
126
+ | `runner:compact-complete` | `{ sessionId, preTokens }` |
127
+ | `runner:model-changed` | `{ sessionId?, agentName?, baseagent?, model?, effort?, timestamp? }` |
128
+ | `runner:idle-timeout` | `{ sessionId, idleSec }` |
129
+ | `runner:idle-notify` | `{ sessionId, idleSec, totalEvents, totalToolCalls, lastToolName? }` |
130
+ | `runner:idle-warn` | `{ sessionId, idleSec, totalEvents, totalToolCalls, lastToolName? }` |
131
+ | `runner:file-sent` | `{ sessionId, filePath, channel, channelName? }` |
132
+ | `runner:state-changed` | `{ sessionId, state }` |
133
+ | `runner:status` | `{ sessionId, subtype, message, timestamp? }` |
134
+
135
+ ### self-heal
136
+
137
+ | 事件 | Payload |
138
+ |------|---------|
139
+ | `self-heal:started` | `{ reason }` |
140
+ | `self-heal:attempt` | `{ attemptNumber, maxAttempts }` |
141
+ | `self-heal:completed` | `{ success, attempts }` |
142
+
143
+ ### trigger
144
+
145
+ | 事件 | Payload |
146
+ |------|---------|
147
+ | `trigger:registered` | `{ triggerId, name, peerId?, targetChannel?, targetChannelId?, scheduleType, scheduleValue, timestamp? }` |
148
+ | `trigger:updated` | `{ triggerId, name, peerId?, scheduleType, scheduleValue, timestamp? }` |
149
+ | `trigger:fired` | `{ triggerId, name, runId, originTriggerId, fireTime, targetChannel?, targetChannelId?, scheduleType, timestamp? }` |
150
+ | `trigger:completed` | `{ triggerId, name, runId, originTriggerId, messageId, durationMs, targetChannel, targetChannelId, fireTime }` |
151
+ | `trigger:failed` | `{ triggerId, name, runId, originTriggerId, messageId, error, targetChannel, targetChannelId, fireTime, phase }` |
152
+ | `trigger:skipped` | `{ triggerId, name, runId, originTriggerId, reason, targetChannel, targetChannelId, fireTime? }` |
153
+ | `trigger:cancelled` | `{ triggerId, name, by }` |
154
+
155
+ ### agent
156
+
157
+ | 事件 | Payload |
158
+ |------|---------|
159
+ | `agent:created` | `{ aid, name?, baseagent?, projectPath?, owner?, timestamp? }` |
160
+ | `agent:updated` | `{ aid, timestamp? }` |
161
+ | `agent:reloaded` | `{ aid, timestamp? }` |
162
+ | `agent:enabled` | `{ aid, reloaded?, timestamp? }` |
163
+ | `agent:disabled` | `{ aid, reloaded?, timestamp? }` |
164
+ | `agent:deleted` | `{ aid, purged?, timestamp? }` |
165
+ | `agent:started` | `{ aid, timestamp? }` |
166
+ | `agent:stopped` | `{ aid, timestamp? }` |
167
+ | `agent:error` | `{ aid, action?, error, timestamp? }` |
168
+ | `agent:baseagent-changed` | `{ aid, baseagent, previousBaseagent?, scope, timestamp? }` |
169
+
170
+ ## 示例
171
+
172
+ 监听飞书用户消息:
173
+
174
+ ```json
175
+ {
176
+ "source": {
177
+ "type": "event",
178
+ "eventPattern": "message:received",
179
+ "filter": {
180
+ "match": {
181
+ "channel": "feishu",
182
+ "content": { "$regex": "^/echo" }
183
+ }
184
+ }
185
+ }
186
+ }
187
+ ```
188
+
189
+ 监听非自身产生的 trigger 完成事件:
190
+
191
+ ```json
192
+ {
193
+ "source": {
194
+ "type": "event",
195
+ "eventPattern": "trigger:completed",
196
+ "filter": {
197
+ "match": {
198
+ "targetChannel": { "$exists": true }
199
+ }
200
+ }
201
+ }
202
+ }
203
+ ```
204
+
205
+ ## 不存在或已移除的事件
206
+
207
+ 不要使用这些历史设计稿中出现过的事件:
208
+
209
+ | 事件 | 替代 |
210
+ |------|------|
211
+ | `message:sent-out` | 使用 `task:completed` |
212
+ | `permission:timeout` | 当前权限不会 timeout;取消用 `permission:cancelled` |
213
+ | `session:safe-mode-entered` / `session:safe-mode-exited` | 已移除 |
214
+ | `project:switched` / `project:bound` | 已移除 |
215
+ | `config:corrupted` | 已移除 |
216
+ | `agent:create-failed` | 使用 `agent:error` 且 `action = "create"` |