evolcore 0.0.35 → 0.0.36

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 (224) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/README.md +6 -0
  3. package/bin/install-codex-managed-hooks.mjs +20 -3
  4. package/dist/agents/baseagent-availability.js +1 -1
  5. package/dist/agents/baseagent.js +88 -0
  6. package/dist/agents/claude-runner.js +59 -12
  7. package/dist/agents/codex/app-server-client.js +18 -1
  8. package/dist/agents/codex-runner.js +262 -21
  9. package/dist/agents/ecagent-runner.js +47 -11
  10. package/dist/agents/gemini-runner.js +36 -12
  11. package/dist/aun/aid/client.js +4 -3
  12. package/dist/aun/aid/control-aid.js +270 -8
  13. package/dist/aun/aid/identity.js +6 -3
  14. package/dist/aun/aid/ownership-operation.js +58 -0
  15. package/dist/aun/aid/store.js +1 -0
  16. package/dist/aun/group/fs-download.js +67 -2
  17. package/dist/aun/group/history.js +20 -5
  18. package/dist/aun/group/operations.js +8 -2
  19. package/dist/aun/menu/client.js +39 -2
  20. package/dist/aun/menu/transport.js +1 -1
  21. package/dist/aun/msg/history.js +43 -4
  22. package/dist/aun/msg/managed-operation.js +30 -53
  23. package/dist/aun/msg/p2p.js +51 -15
  24. package/dist/aun/outbox.js +4 -0
  25. package/dist/channels/aun.js +260 -73
  26. package/dist/channels/daemon.js +6 -4
  27. package/dist/channels/feishu.js +3 -0
  28. package/dist/cli/agent-command.js +161 -223
  29. package/dist/cli/agent-create.js +190 -223
  30. package/dist/cli/agent.js +3 -1
  31. package/dist/cli/aid-bind-command.js +53 -0
  32. package/dist/cli/aun-commands.js +384 -91
  33. package/dist/cli/bench.js +1 -1
  34. package/dist/cli/cli-argv.js +74 -0
  35. package/dist/cli/daemon-commands.js +105 -74
  36. package/dist/cli/diag.js +1 -1
  37. package/dist/cli/fs-command.js +18 -19
  38. package/dist/cli/getmeta-command.js +159 -6
  39. package/dist/cli/index.js +6 -12
  40. package/dist/cli/init-channel.js +8 -55
  41. package/dist/cli/init.js +125 -218
  42. package/dist/cli/queue-command.js +11 -8
  43. package/dist/cli/restart-monitor.js +134 -48
  44. package/dist/cli/session-command.js +1 -1
  45. package/dist/cli/stats.js +7 -5
  46. package/dist/cli/thread-command.js +103 -30
  47. package/dist/cli/trigger-command.js +1 -1
  48. package/dist/cli/watch-msg-diag.js +1 -0
  49. package/dist/config/access-policy.js +2 -2
  50. package/dist/config/boot-log.js +14 -11
  51. package/dist/config/config-field-policy.js +9 -1
  52. package/dist/config/config-manager.js +176 -90
  53. package/dist/config/config-operation-service.js +7 -14
  54. package/dist/config/contact-book-store.js +142 -26
  55. package/dist/config/contact-book.js +4 -2
  56. package/dist/config/lifecycle.js +1 -1
  57. package/dist/config/owner-config.js +96 -0
  58. package/dist/config/peer-role-resolver.js +12 -18
  59. package/dist/config/providers-config.js +382 -0
  60. package/dist/config/providers-import.js +74 -0
  61. package/dist/config/providers-management.js +328 -0
  62. package/dist/config/providers.js +22 -0
  63. package/dist/config/resolved-config-op.js +17 -14
  64. package/dist/config/snapshot.js +28 -16
  65. package/dist/config-store.js +18 -14
  66. package/dist/core/agent-ipc-registration.js +21 -63
  67. package/dist/core/agent-runtime.js +16 -5
  68. package/dist/core/auth/agent-delegation.js +199 -25
  69. package/dist/core/auth/auth-gateway.js +44 -2
  70. package/dist/core/auth/authorization-denial.js +1 -1
  71. package/dist/core/auth/debug-context.js +2 -1
  72. package/dist/core/auth/delegation-authorization.js +2 -2
  73. package/dist/core/auth/delegation-diagnostics.js +4 -1
  74. package/dist/core/auth/operation-authorizer.js +10 -1
  75. package/dist/core/auth/operation-catalog.js +19 -1
  76. package/dist/core/bootstrap-service.js +43 -20
  77. package/dist/core/channel-loader.js +0 -1
  78. package/dist/core/channel-runtime.js +30 -4
  79. package/dist/core/command/agent-control.js +196 -37
  80. package/dist/core/command/cli-intent-parser.js +60 -4
  81. package/dist/core/command/command-handler.js +212 -60
  82. package/dist/core/command/connect-menu.js +1 -0
  83. package/dist/core/command/diag-service.js +5 -4
  84. package/dist/core/command/file-search.js +368 -0
  85. package/dist/core/command/menu-catalog.js +2 -1
  86. package/dist/core/command/menu-handler.js +292 -107
  87. package/dist/core/command/menu-protocol.js +23 -0
  88. package/dist/core/command/role-menu.js +7 -19
  89. package/dist/core/command/skill-slash.js +130 -25
  90. package/dist/core/command/slash-handler.js +101 -53
  91. package/dist/core/command/topic-slash.js +16 -5
  92. package/dist/core/daemon-bootstrap.js +7 -1
  93. package/dist/core/daemon-control.js +19 -1
  94. package/dist/core/daemon-lifecycle.js +2 -1
  95. package/dist/core/event-catalog.js +2 -0
  96. package/dist/core/evolagent-registry.js +13 -2
  97. package/dist/core/evolagent.js +3 -6
  98. package/dist/core/handoff/ipc-registration.js +2 -2
  99. package/dist/core/handoff/runtime.js +40 -6
  100. package/dist/core/handoff/store.js +1 -0
  101. package/dist/core/inference/text-inference.js +95 -6
  102. package/dist/core/ipc-registration.js +43 -24
  103. package/dist/core/memory/consolidation-context.js +4 -1
  104. package/dist/core/memory/consolidation.js +25 -14
  105. package/dist/core/message/aun-ipc-sender.js +296 -88
  106. package/dist/core/message/aun-request-registry.js +226 -0
  107. package/dist/core/message/create-status.js +33 -4
  108. package/dist/core/message/message-bridge.js +62 -13
  109. package/dist/core/message/message-log.js +0 -1
  110. package/dist/core/message/message-queue.js +4 -1
  111. package/dist/core/message/message-utils.js +8 -1
  112. package/dist/core/message/peer-mode.js +17 -9
  113. package/dist/core/message/response-engine.js +266 -124
  114. package/dist/core/message/retry-scheduler.js +11 -8
  115. package/dist/core/model/catalog-service.js +60 -18
  116. package/dist/core/model/model-catalog.js +112 -9
  117. package/dist/core/model/model-fallback.js +94 -26
  118. package/dist/core/ownership/owner-resolver.js +687 -0
  119. package/dist/core/permission/approval-gateway.js +196 -62
  120. package/dist/core/permission/ec-command-parser.js +138 -25
  121. package/dist/core/permission/filesystem-approval-scope.js +141 -0
  122. package/dist/core/permission/protected-paths.js +14 -1
  123. package/dist/core/permission/sandbox-runtime.js +171 -18
  124. package/dist/core/permission/tool-policy.js +13 -2
  125. package/dist/core/role/runtime-policy.js +3 -4
  126. package/dist/core/session/session-idle-monitor.js +10 -8
  127. package/dist/core/session/session-manager.js +72 -45
  128. package/dist/core/session/session-mapper.js +18 -7
  129. package/dist/core/session/session-renew.js +5 -4
  130. package/dist/core/session/session-title.js +2 -1
  131. package/dist/core/session/session-turn-coordinator.js +4 -2
  132. package/dist/core/skill/index-generator.js +2 -16
  133. package/dist/core/task/task-recovery-service.js +15 -2
  134. package/dist/core/thread/command-parser.js +28 -13
  135. package/dist/core/thread/index.js +1 -0
  136. package/dist/core/thread/ipc-operation.js +11 -8
  137. package/dist/core/thread/thread-operation.js +79 -44
  138. package/dist/core/thread/thread-route.js +54 -6
  139. package/dist/core/thread/thread-service.js +236 -45
  140. package/dist/core/thread/topic-id.js +248 -0
  141. package/dist/eck/kit-renderer.js +1 -1
  142. package/dist/eck/message-renderer.js +12 -2
  143. package/dist/index.js +50 -27
  144. package/dist/ipc.js +59 -6
  145. package/dist/paths.js +1 -0
  146. package/dist/product.js +1 -0
  147. package/dist/response-system/engines/v1/proactive-flow.js +10 -3
  148. package/dist/stats/db.js +8 -0
  149. package/dist/stats/writer.js +26 -4
  150. package/dist/trigger/authorization.js +48 -3
  151. package/dist/trigger/feedback.js +28 -10
  152. package/dist/trigger/ipc-service.js +86 -10
  153. package/dist/trigger/local-files.js +55 -23
  154. package/dist/trigger/scheduler.js +57 -11
  155. package/dist/trigger/system-definitions.js +1 -0
  156. package/dist/trigger/validation.js +44 -15
  157. package/dist/utils/aid-bind.js +17 -297
  158. package/dist/utils/avatar-upload.js +16 -4
  159. package/dist/utils/cross-platform.js +109 -34
  160. package/dist/utils/ecweb-supervisor.js +1 -1
  161. package/dist/utils/ecweb-utils.js +8 -1
  162. package/dist/utils/error-utils.js +44 -6
  163. package/dist/utils/instance-registry.js +12 -2
  164. package/dist/utils/npm-ops.js +102 -27
  165. package/dist/utils/package-version-info.js +72 -27
  166. package/dist/utils/restart-safety.js +50 -0
  167. package/dist/utils/upgrade-jobs.js +304 -0
  168. package/dist/utils/windows-autostart.js +17 -10
  169. package/kits/docs/INDEX.md +5 -0
  170. package/kits/docs/aun/ABILITY_CALLING.md +239 -0
  171. package/kits/docs/evolcore/INDEX.md +14 -3
  172. package/kits/docs/evolcore/agent-create.md +55 -141
  173. package/kits/docs/evolcore/agent.md +38 -16
  174. package/kits/docs/evolcore/aid.md +34 -0
  175. package/kits/docs/evolcore/config.md +20 -1
  176. package/kits/docs/evolcore/event.md +2 -2
  177. package/kits/docs/evolcore/fs.md +18 -2
  178. package/kits/docs/evolcore/group-collaboration.md +13 -246
  179. package/kits/docs/evolcore/group.md +2 -1
  180. package/kits/docs/evolcore/memory-consolidation-batches.md +1 -1
  181. package/kits/docs/evolcore/menu-protocol.md +65 -1
  182. package/kits/docs/evolcore/msg.md +64 -2
  183. package/kits/docs/evolcore/skill.md +86 -0
  184. package/kits/docs/evolcore/stats.md +6 -0
  185. package/kits/docs/evolcore/task.md +2 -0
  186. package/kits/docs/evolcore/thread-chain.md +145 -51
  187. package/kits/docs/evolcore/trigger.md +48 -3
  188. package/kits/eck_manifest.json +21 -0
  189. package/kits/eck_message_manifest.json +4 -4
  190. package/kits/migrations/migrate-role-config-v5.mjs +20 -7
  191. package/kits/rules/01-overview.md +2 -1
  192. package/kits/rules/03-identity.md +3 -1
  193. package/kits/rules/04-relation.md +1 -1
  194. package/kits/rules/07-memory-and-thread.md +1 -1
  195. package/kits/schemas/_meta.json +16 -1
  196. package/kits/schemas/agent-config.schema.13.json +44 -2
  197. package/kits/schemas/contact-book.schema.3.json +5 -0
  198. package/kits/schemas/daemon.schema.6.json +3 -1
  199. package/kits/schemas/daemon.schema.8.json +329 -0
  200. package/kits/schemas/defaults.schema.5.json +39 -3
  201. package/kits/schemas/providers.schema.1.json +76 -0
  202. package/kits/schemas/relation-config.schema.9.json +5 -1
  203. package/kits/skills/.switches.json +28 -0
  204. package/kits/skills/aid-ability/SKILL.md +214 -0
  205. package/kits/skills/ec-agent-create/SKILL.md +162 -0
  206. package/kits/skills/ec-group/SKILL.md +2 -1
  207. package/kits/skills/ec-group-collaboration/SKILL.md +228 -0
  208. package/kits/skills/ec-identity/SKILL.md +143 -0
  209. package/kits/skills/ec-skill/scripts/cli.mjs +36 -3
  210. package/kits/skills/ec-skill/scripts/skill.mjs +202 -15
  211. package/kits/skills/ec-trigger/SKILL.md +167 -0
  212. package/kits/skills/ec-trigger/references/examples.md +153 -0
  213. package/kits/skills/thread-ops/SKILL.md +108 -420
  214. package/kits/templates/message-fragments/thread-context.md +1 -2
  215. package/kits/templates/message-fragments/trigger-thread-check.md +1 -1
  216. package/kits/templates/roles/member.json +1 -1
  217. package/kits/templates/roles/visitor.json +1 -0
  218. package/kits/templates/system-fragments/bootstrap.md +1 -0
  219. package/kits/templates/system-fragments/channel.md +2 -1
  220. package/kits/templates/system-fragments/commands.md +5 -4
  221. package/kits/templates/system-fragments/identity.md +2 -0
  222. package/kits/templates/system-fragments/session.md +1 -1
  223. package/kits/templates/system-fragments/venue.md +1 -1
  224. package/package.json +4 -3
@@ -28,17 +28,20 @@ ec agent show <aid>
28
28
  # 简写,等价于 show
29
29
  ec agent <aid>
30
30
 
31
- # 创建 agent(交互式)
32
- ec agent new [aid]
31
+ # 创建并一次性完成首次设定(默认模式)
32
+ ec agent new <aid> [--initialize] ...
33
33
 
34
- # 创建 agent(非交互式,自动化场景)
35
- ec agent new <aid> --non-interactive \
34
+ # 创建 agent 并进入 Bootstrap
35
+ ec agent new <aid> --bootstrap [--non-interactive] \
36
36
  [--project <路径>] [--baseagent claude|codex|gemini|ecagent] \
37
37
  [--owner <aid>] [--name "<显示名>"] [--description "<text>"] \
38
38
  [--tags '<json-array>'] \
39
39
  [--dry-run] [--force]
40
40
 
41
- # 创建并一次性完成首次设定(隐含 --non-interactive)
41
+ # `--non-interactive` 仍可单独使用;不指定模式时默认等同于 `--initialize`
42
+ ec agent new <aid> --non-interactive ...
43
+
44
+ # 显式指定一次性初始化(隐含 --non-interactive)
42
45
  ec agent new <aid> --initialize \
43
46
  --project <路径> --baseagent <claude|codex|gemini|ecagent> \
44
47
  --owner <aid> --name "<显示名>" --description "<text>" \
@@ -78,21 +81,26 @@ ec agent reload [aid]
78
81
  ec agent delete <aid> [--purge]
79
82
  ```
80
83
 
81
- ## 非交互创建必填项
84
+ ## 创建模式与参数
85
+
86
+ `welcome --text`、`persona --text`、创建时的 `--description` / `--persona-text` 按一次 `\n` / `\r` / `\t` / `\\` 解码;已传入的物理换行保留。不要使用 PowerShell 反引号换行转义;Windows PowerShell 中直接使用命令名,不要用批处理入口传物理多行。文件、路径、`--tags` JSON 不解码;`--name` / `rename` 名称不允许换行。
82
87
 
83
- `welcome --text`、`persona --text`、创建时的 `--description` / `--persona-text` / `--handoff` 按一次 `\n` / `\r` / `\t` / `\\` 解码;已传入的物理换行保留。不要使用 PowerShell 反引号换行转义;Windows PowerShell 中直接使用命令名,不要用批处理入口传物理多行。文件、路径、`--tags` JSON 不解码;`--name` / `rename` 名称不允许换行。
88
+ `ec agent new <aid>` 默认使用 `--initialize`,要求显式提供 `--owner`、`--name`、`--description` 和 `--tags`。显式选择 `--bootstrap` 才进入对话式首次设定;两者互斥,且均隐含非交互创建。`--non-interactive` 继续保留,单独使用时不改变默认的初始化模式。
84
89
 
85
- `ec agent new <aid> --non-interactive` 时,只有 `<aid>` 必填:
90
+ 两种模式的参数约定:
86
91
  - `--project` 缺省为当前目录,并自动转为绝对路径。
87
92
  - `--baseagent` 优先使用 `agents/defaults.json`,否则检测本机可用基座。
88
- - `--owner` 缺省使用 `daemon.json` 的第一个 owner;未配置时省略。
89
- - `--name` / `--description` 缺省读取当前项目 `package.json`,再回退到目录名 / 空描述。
93
+ - `--owner` 必填,表示初始 Ownership 绑定目标;实际 Owner 以协议共识为准。
94
+ - `--name` / `--description` 在初始化模式中必填;Bootstrap 模式缺省读取当前项目 `package.json`,再回退到目录名 / 默认描述。
90
95
  - `--dry-run` 只输出最终创建计划,不注册 AID、不写配置、不上传 `agent.md`。
91
- - `--force` 覆盖已有 `config.json`;AID 密钥保留。
96
+ - `--force` 仅 Bootstrap 模式支持,覆盖已有 `config.json`;AID 密钥保留。
92
97
  - `--tags` 接受 3 到 6 个标签的 JSON 数组;每个标签只允许 Unicode 字母、数字和连字符(`-`),最长 50 字符。
93
98
  - `ec agent new` 支持 `--avatar-file <path>`(托管当前对端附件可用 `attachment:<id>`)或 `--avatar-url <https-url>`;创建流程沿用 `ec aid avatar` 的公共头像管线。未提供头像时跳过;已明确提供但无法规范化或上传时,创建返回可恢复错误。
94
- - `--initialize` 要求显式提供 `--name`、`--description`、`--tags` 和 Owner;它不从项目元数据推断名片,成功条件是目标 Agent 已进入 `active`。`--initialize` 自动包含 `--non-interactive`,不需要同时填写后者。
95
- - `--persona-file` / `--persona-text` 可选;两者互斥。初始化失败可用 `ec agent initialize <aid> --resume` 按原计划恢复,不能用普通 `new --force` 覆盖。
99
+ - `--initialize` 是默认创建模式,要求显式提供 `--name`、`--description`、`--tags` 和 Owner;它不从项目元数据推断名片,成功条件是目标 Agent 已进入 `active`。它自动包含 `--non-interactive`,不需要同时填写后者。
100
+ - `--bootstrap` 与 `--initialize` 互斥,进入原 Bootstrap 流程并隐含 `--non-interactive`。
101
+ - `--non-interactive` 继续保留;单独使用时等同于默认的 `--initialize`。
102
+ - `--wait <seconds>` 仅初始化模式有效,取值 0–300,默认 60。超时返回 `INITIALIZE_PENDING`,**CLI 退出码为 2**;普通失败退出码为 1;初始化完成但运行时未连接返回 `INITIALIZE_NOT_USABLE`。
103
+ - `--persona-file` / `--persona-text` 可选;两者互斥。初始化失败可用 `ec agent initialize <aid> --resume` 按原计划恢复,不能用普通 `new --force` 覆盖。`--force` 只对 `--bootstrap` 有效。
96
104
  - `ec agent persona show` 读取当前 Agent 的 `$PERSONAL_DIR/persona.md`;`--text` 或 `--file <path>` 可由当前 Agent 的 owner 写入。文件内容限制为 UTF-8 文本,`--file` 仅接受 `.md`/`.txt`。
97
105
  - `ec agent welcome --text <text>` 用于保存 Bootstrap 中 Agent 自主准备的完整正式文案,不要求 Owner 起草、审稿或确认;命令固定写入当前 Agent 的 `$PERSONAL_DIR/welcome.md`,不接受自定义路径。`welcome show` 读取该文件。
98
106
  - welcome 托管写入要求当前 Agent 私聊 Owner;admin 仅可读。模板上限 4 KiB,渲染上限 8 KiB;变量为 `agentName`、`agentDescription`、`agentAid`、`agentTags`、`agentTagsText`、`ownerName`、`ownerAid`、`channel`,支持标签循环和真值条件。写入保留原始文本,投递不附加额外文案。
@@ -101,13 +109,27 @@ ec agent delete <aid> [--purge]
101
109
 
102
110
  ## 创建 Agent
103
111
 
104
- `ec agent new` 成功不代表新 Agent 已能处理普通任务。新 Agent 还必须完成 Bootstrap,并由自身执行 `ec agent ready <aid>` 进入 `active`。
112
+ 默认初始化模式以新 Agent 已进入 `active` 为成功条件;初始化缺项或失败不会自动退回 Bootstrap。使用 `--bootstrap` 时,创建成功后还须完成首次设定,并由新 Agent 自身执行 `ec agent ready <aid>` 进入 `active`。
113
+
114
+ EC Web 有两个独立入口:`action: create` 沿用 Bootstrap 流程(与 `--bootstrap` 同一条流水线),`action: initialize` 走一次性初始化。两者都是受理即返回,要轮询进度再判断状态。
115
+
116
+ 创建者侧的模式选择、创建、恢复和验收使用内置技能 `ec-agent-create`(`ec skill load ec-agent-create`)。
117
+ 生命周期机制及新 Agent 的 Bootstrap 流程参考见:`$KITS_DOCS/evolcore/agent-create.md`。
105
118
 
106
- 完整的创建、Bootstrap、名片发布和验收示例见:`$KITS_DOCS/evolcore/agent-create.md`。
119
+ ## 初始化进度与恢复
120
+
121
+ `--initialize` 的进度落在 `ec agent show <aid>` 的 `initialization` 字段:`status`、`phase`、`code`、`nextStep`、`agentmd.published`、`persona.provided`、`avatar.uploaded`。persona 正文不会出现。
122
+
123
+ 恢复方式:
124
+ - 状态为 `failed` 时执行 `ec agent initialize <aid> --resume`,按原计划续跑;计划被改动返回 `INITIALIZE_PLAN_CONFLICT`。
125
+ - daemon 启动时会自动续跑所有 `in_progress` 记录;停在 `ownerpending` 的记录在 Ownership 共识到达时自动恢复。
126
+ - 带初始化记录的目标不能被再次 `agent new` 覆盖(`INITIALIZE_TARGET_EXISTS`),也不能触发 Bootstrap。
107
127
 
108
128
  ## Bootstrap 通知状态与重试
109
129
 
110
- 交互式 Bootstrap 的 `ready` 要求有效的 `personal/welcome.md`:缺失返回 `WELCOME_REQUIRED`,损坏返回 `WELCOME_INVALID`,均保持 Bootstrap 状态。已准备 completion outbox 后修改文案返回 `WELCOME_FROZEN`。已有 active Agent 和独立的 `--initialize` 流程不需要补做此准备步骤。
130
+ 交互式 Bootstrap 的 `ready` 要求有效的 `personal/welcome.md`:缺失返回 `WELCOME_REQUIRED`,损坏返回 `WELCOME_INVALID`,均保持 Bootstrap 状态。已准备 completion outbox 后修改文案返回 `WELCOME_FROZEN`。
131
+
132
+ `--initialize` 模式不产生也不需要 `welcome.md`:它的欢迎文案由 daemon 用内置模板按最终名片渲染,`ec agent welcome --text` 在这种目标上会返回 `INVALID_LIFECYCLE`。
111
133
 
112
134
  `ready` 成功表示 Agent 已进入 `active`;欢迎消息单独返回在 `welcome.deliveries`,每位 Owner 一项:
113
135
 
@@ -24,6 +24,40 @@ ec aid avatar <当前 self AID> (--file <path> | --url <https-url>) [--format js
24
24
 
25
25
  `agentmd get --format json` 返回 `verification`、来源 `source`(`remote` / `local-cache`)、内容 SHA-256 和 `localState`;有远端版本响应头时还返回 ETag / Last-Modified。`agentmd put/set --format json` 返回发布后版本信息、是否执行了版本预检,以及 `atomicVersionCheck: false`。当前 fastaun upload API 不支持条件 PUT / If-Match,因此版本预检和进程内锁**不是原子远端 CAS**:多客户端并发更新仍可能在预检后覆盖;在网关或 SDK 支持条件写入前,不应将其视为完整并发锁。
26
26
 
27
+ ## 控制 AID 的非交互注册邀约
28
+
29
+ `ec init --non-interactive --owner <aid> --format json` 首先按普通 host 类型注册控制 AID,
30
+ 完成主机名片和配置落盘后,通过独立 CLI slot 的一次性长连接连接控制 AID,
31
+ 再调用与 `ec agent create` 相同的 Owner 绑定服务显式发起邀约。
32
+ init 不等待人工审批、不启动 daemon,也不把该目标写入 `daemon.json.owner/owners`。
33
+ 容器入口随后启动 daemon,由 SDK 恢复同一任务,审批事件触发新鲜共识核验后才产生协议 Owner 权限。
34
+
35
+ `bindingStatus` 为 `submitted` 仅表示 SDK 已确认邀约 `message.send` 回执;它不代表 Owner 已审批。
36
+ `already_bound` 必须经过当前共识核验。旧版本留下的注册意图会由 SDK 恢复原任务,
37
+ 初始化复用原 `operation_id`,不重新注册身份或创建第二个绑定任务。
38
+ 提交超时返回 `unknown`,错误结果中的 `initialized: true` 表示配置和控制身份仍然保留;
39
+ 部署方应解析结果并按恢复策略启动 daemon,不能仅用 `init && start` 处理部分成功。
40
+ 相同注册意图复用原 operation_id,不同目标返回冲突,`--force` 不覆盖协议 Owner。
41
+ 实现与验证说明见 `docs/init-control-aid-owner-registration.md`。
42
+
43
+ ## Ownership 共识缓存
44
+
45
+ Agent 的首个配置 Owner 可在该 Agent 的 AUN 私聊中发送纯 `/bind`,由 Agent
46
+ 以发送者 AID 发起协议 ownership 绑定。带参数的 `/bind feishu [实例名]` 等仍是外部渠道联系人绑定,
47
+ 不会修改 ownership;其它配置 Owner 不能使用纯 `/bind` 代替手动绑定。
48
+
49
+ Ownership 共识不再每 15 秒轮询。普通消息、控制消息、查询和路由读取复用最长 30 分钟的共识结果;敏感授权、审批授权兑现、初始化激活及高权限执行使用同一结果,但要求核验时间不超过 5 分钟。读取不会延长缓存有效期,到期本身不会发请求;需要结果的异步调用在过期后等待刷新。控制通道的配对和诊断命令按敏感操作使用 5 分钟窗口。
50
+
51
+ Ownership 任务事件、修改本地 Owner 配置、相关名片或 Owner 关系材料变更立即失效缓存并触发一次复核;连接首次就绪或断线后恢复也复核一次。相同任务事件和连接通知去重,无关对端、普通文件变更不触发。远端 Owner 的 Storage 事件只在本机确实收到时生效,不能假定事件完整覆盖远端变化。Owner 绑定提交前及修改 Owner 的授权不复用缓存;其它敏感操作接受最长 5 分钟的协议状态陈旧窗口。
52
+
53
+ SDK 临时断线只更新连接状态,不清除已核验且仍在有效期内的共识缓存;普通读取仍按 30 分钟、敏感授权仍按 5 分钟窗口使用,断线不会延长有效期。断线前尚未完成的查询结果丢弃;缓存到期后若仍无法复核,不继续授权。客户端解绑或替换仍立即失效缓存。
54
+
55
+ 同一 subject 的并发刷新复用进行中的请求;事件发生前启动的旧查询不能覆盖事件后的结果。刷新失败不使用旧协议 Owner 授权,下次调用再重试,不启动后台周期重试;本地配置 Owner 和已认证 ECWeb 等独立授权来源不受此缓存替代。单次请求超时仍为 8 秒,不是 5 分钟或 30 分钟。
56
+
57
+ 关系快照与授权状态分离:`relation` 保留进程内最后一次确认的关系(Owner、核验时间、关系版本或已解除/未绑定状态),缓存过期、断线、事件失效或复核失败不会删除它。授权缓存仅在上述有效期和失效规则内可用,历史关系快照不用于补足已失效的授权。确认转移后替换 Owner,确认解除或未绑定后清除当前关系中的 Owner;仅凭超时、验签失败或单边声明不推断关系已经解除。历史快照不落盘,进程启动后重新确认。
58
+
59
+ Agent 展示通过 `knownOwner/knownOwners` 读取关系快照,详情另返回 `ownership.authorizationStatus`(`verified` / `expired` / `unavailable`),表示协议 Owner 的五分钟授权核验状态,不代表本地配置 Owner 等独立授权来源。`owner/owners/isOwner` 等原有授权读取不回退到历史快照;依赖 AUN Owner 身份启动任务、自动压缩和重试前也检查五分钟授权,失败不启动高权限执行。欢迎消息、Bootstrap 和审批等敏感路由仍要求有效核验,不向历史 Owner 补发敏感材料。
60
+
27
61
  ## 更换头像
28
62
 
29
63
  `ec aid avatar <当前 self AID> --file <图片路径>` 从本地文件上传;`ec aid avatar <当前 self AID> --url <HTTPS 图片地址>` 下载图片后上传。两种来源必须二选一,可在末尾加 `--format json` 获取头像 URL、SHA-256、MIME 和尺寸。
@@ -45,6 +45,25 @@ ec config validate [--self <aid>] [--peer <X>] [--default] [--process]
45
45
  ec config init [--self <aid>] [--peer <X>] [--default] [--process]
46
46
  ```
47
47
 
48
+ ## Provider 环境变量引用
49
+
50
+ `providers.json` 的 `providers.<id>.common.baseUrl` 和 `common.apiKey` 支持整字段环境变量引用:
51
+
52
+ ```json
53
+ {
54
+ "common": {
55
+ "baseUrl": "${PROVIDER_BASE_URL}",
56
+ "apiKey": "$PROVIDER_API_KEY"
57
+ }
58
+ }
59
+ ```
60
+
61
+ - 运行时从实际执行连接的进程 `process.env` 读取;Docker 容器启动参数注入的环境变量可直接使用,EC Web 只保存/转发引用,不需要额外 `.env` 转发。
62
+ - 只支持完整字段的 `$VAR` 或 `${VAR}`;不支持拼接、插值、默认值、递归展开或 `$ENV:NAME`。
63
+ - 配置读取、快照和 EC Web 管理响应保留引用原文,不展开也不返回环境变量值。
64
+ - 实际连接时,变量未设置或为空会报错;`baseUrl` 解析后仍必须是 HTTP(S) URL,服务路径仍必须保持在公共 origin 内。
65
+ - 使用变量 `baseUrl` 时不会根据 hostname 自动命名或按 hostname 自动合并 Provider;请显式填写 `name`。
66
+
48
67
  ## 快照 / 回滚
49
68
 
50
69
  总开关直接保存在 `$EVOLCORE_HOME/daemon.json` 顶层,默认 `true`:
@@ -231,7 +250,7 @@ Menu 批量请求遇到真实权限拒绝仍整体拒绝并停止执行,不会
231
250
  - 快照管理(snapshot/restore/init/prune):仅人可执行
232
251
 
233
252
  **凭证安全**:
234
- - 凭证一律 `${VAR}` 引用,CLI 读命令永不展开、不泄露明文
253
+ - 通用凭证配置按各自字段规则处理;Provider 的 `common.baseUrl` / `common.apiKey` 支持上述整字段 `$VAR` / `${VAR}` 引用,CLI 读命令永不展开、不泄露环境变量值
235
254
  - `.env` 全程禁读写
236
255
 
237
256
  ## 通用约定
@@ -82,8 +82,7 @@
82
82
  | `session:forked` | `{ sessionId, sourceSessionId, name? }` |
83
83
  | `session:rewind` | `{ sessionId, turnNum, mode }` |
84
84
  | `session:imported` | `{ sessionId, agentSessionId, projectPath }` |
85
- | `session:chat-mode-changed` | `{ sessionId, mode, timestamp? }` |
86
- | `session:dispatch-mode-changed` | `{ sessionId, mode, timestamp? }` |
85
+ | `session:idle` | `{ sessionId, agentAid, channel, channelName?, channelId, chatType?, threadId?, peerId?, encrypted?, idleMs, lastEndedAt, timestamp }` |
87
86
 
88
87
  ### message
89
88
 
@@ -211,6 +210,7 @@
211
210
  | `message:sent-out` | 使用 `task:completed` |
212
211
  | `permission:timeout` | 当前权限不会 timeout;取消用 `permission:cancelled` |
213
212
  | `session:safe-mode-entered` / `session:safe-mode-exited` | 已移除 |
213
+ | `session:chat-mode-changed` / `session:dispatch-mode-changed` | 从未实现(仅出现在早期设计稿),当前没有替代事件;需要感知模式变化请轮询会话状态 |
214
214
  | `project:switched` / `project:bound` | 已移除 |
215
215
  | `config:corrupted` | 已移除 |
216
216
  | `agent:create-failed` | 使用 `agent:error` 且 `action = "create"` |
@@ -14,7 +14,7 @@
14
14
 
15
15
  ```bash
16
16
  ec fs ls <AID>:<path> # 列目录
17
- ec fs cat <AID>:<path> # 输出文本文件;二进制/大文件返回头部摘要
17
+ ec fs cat <AID>:<path> # 预算内输出文本或二进制头部摘要;超出预算报错
18
18
  ec fs cp <local> <AID>:<path> # 上传
19
19
  ec fs cp <AID>:<path> <local> # 下载
20
20
  ec fs cp <AID>:<path> <AID>:<path> # 远程复制(同后端)
@@ -50,7 +50,7 @@ ec fs umount <AID>:<path> # 卸载挂载点
50
50
  - `--token <token>`:读取 personal storage 时携带访问 token
51
51
  - `--content-type <mime>`:上传时指定 MIME
52
52
  - `--public`:上传后公开可读(personal storage)
53
- - `--max-bytes <n>`:`cat` 最大直接输出字节数,默认 1MB
53
+ - `--max-bytes <n>`:`cat` 单次读取预算,默认及最高 128 KiB(131072 字节);托管和非托管一致,超限报 `FS_CAT_TOO_LARGE`,不返回截断正文
54
54
  - `--head-bytes <n>`:`cat` 二进制头部字节数,默认 256
55
55
  - `--visibility public|private`:`chmod` 可见性
56
56
  - `--allow-roles <roles>`:`chmod` 角色约束,写法固定为单引号包住、逗号分隔,如 `--allow-roles 'owner,admin'`
@@ -99,6 +99,22 @@ CLI 读取目标 AID 的 `agent.md`:
99
99
 
100
100
  权限由后端判断。CLI 只携带操作者、目标 AID、路径和操作。
101
101
 
102
+ ### 托管会话边界
103
+
104
+ 在 AUN 私聊的托管 Agent 会话中,可以直接读取当前对端 personal storage 中公开或 ACL 授权的
105
+ 文本文件:
106
+
107
+ ```bash
108
+ ec fs cat <current-peer-aid>:/ability/index.json
109
+ ```
110
+
111
+ 这个跨 AID 入口仅限 `cat`、仅限当前私聊关系,不允许 `ls/stat/find`、写操作或切换到其他对端;
112
+ 后端 public/ACL 鉴权仍是最终依据。`cat` 单次读取最多 128 KiB,可用 `--max-bytes` 调低预算。
113
+ 个人存储内联读取携带预算加一字节的探测范围;HTTP 下载逐块计数,超限立即中止,
114
+ 单次 HTTP 读取最多等待 30 秒。文件大小元数据不能替代实际读取校验;非文本内容只返回有界摘要。
115
+ 需要更大文件时使用 `ec fs cp` 下载,不将大文件直接塞入会话上下文。
116
+ 它适合 Ability 的 L1/L3 契约读取;不满足这些条件时使用 `ec storage download` 回退。
117
+
102
118
  ## 能力边界
103
119
 
104
120
  - `ln -s` 只在 personal storage 创建软链;group fs facade 暂无 symlink 接口。
@@ -1,254 +1,21 @@
1
- # 创建群聊协作:从建群到交付
1
+ # 群聊协作技能入口
2
2
 
3
- 本手册用于发起一次可追踪的 AUN Agent 群聊协作。它不是命令全集,而是一条推荐工作流:明确目标、创建群、邀请协作者、写入群规则、分派任务、共享产物、汇总验收。
4
-
5
- 本文的“协作”指群聊中的任务协同,不是版本控制式的多人文档编辑;文件交换使用当前已实现的 `ec fs` 群空间能力。
6
-
7
- ## 先区分四类操作
8
-
9
- 一次群聊协作通常同时涉及四个层次,不要混用:
10
-
11
- | 层次 | 用途 | 主要命令 |
12
- |------|------|----------|
13
- | 群生命周期 | 创建、邀请、角色和群状态 | `ec group create/invite/role/info/members` |
14
- | 入群规则 | 控制谁可以加入 | `ec group rules ... --mode ...` |
15
- | 协作规则文件 | 定义分工、交付格式和升级路径 | `ec group rules ... set/get` |
16
- | 协作消息与文件 | 分派任务、汇报进度、交换产物 | `ec group send`、`ec fs` |
17
-
18
- `/rules.md` 是群的稳定入口规则,不是任务记录,也不是知识库。任务细节放在群消息或群空间文件中。
19
-
20
- ## 角色与命令边界
21
-
22
- - `<self-aid>` 是当前 Agent 的 AID。托管 Agent 会话必须使用自己的 AID,不能代替其他 Agent 发起管理操作。
23
- - 创建群的 Agent 自动成为群 owner。
24
- - 需求发起者应设置为群 admin(若需求发起者就是创建者,则其已是 owner,无需另设)。
25
- - owner/admin 负责邀请成员、设置角色、修改入群规则和发布 `/rules.md`。
26
- - 普通 member 可以读取当前群信息、读取规则并参与协作;需要管理群成员或设置时,应请 owner/admin 操作。
27
- - `dissolve` 和 `owner` 转让属于 owner 级操作,临时协作结束通常不需要解散群。
28
-
29
- 托管 Agent 执行群命令时不要传 `--aun-path` 或 `--app`;这些参数属于独立终端的消费/调试场景。所有群管理命令的 `<from>` 都必须是当前 self AID。
30
-
31
- ## 1. 明确协作目标
32
-
33
- 在创建群之前,先确定:
34
-
35
- - 目标:要解决什么问题,最终交付什么。
36
- - 参与者:每个协作者的 AID 和能力边界。
37
- - 分工:谁负责协调、执行、复核和最终决策。
38
- - 验收:完成条件、截止时间、交付路径和汇报频率。
39
-
40
- 使用 Owner 明确提供或已经可靠取得的完整 AID;AID 必须是 `{name}.{issuer}`,例如 `coordinator.agentid.cn`,不要使用四级域名或从显示名猜测 AID,也不要邀请尚未确认的对象。如果参与者、可见性或入群方式不明确,先向 Owner 补齐这些信息再创建群。
41
-
42
- 如果已经有合适的群,先用 `ec group list` 和 `ec group info` 检查,不要为每个任务重复建群。
43
-
44
- ## 2. 创建私有协作群
45
-
46
- 群名称必填。创建前根据群名称确定一个简短、唯一的 group AID(同样使用 `{name}.{issuer}`,不要四级域名),并给出一句群简介;名称、AID 和简介应能体现协作目标。推荐默认使用私有群和 `invite_only`,先建群再按名单邀请:
47
-
48
- ```bash
49
- ec group create coordinator.agentid.pub 'Project Alpha 协作' \
50
- --visibility private \
51
- --description "Project Alpha 的设计、实现和复核协作群" \
52
- --join-mode invite_only
53
- ```
54
-
55
- 创建成功后,以响应中的 `group.group_aid`(兼容字段为 `group.group_id`)作为后续唯一群 AID。不要根据显示名称猜测群 AID。默认创建的名称为 `g-` 加五位数字,例如 `g-12345.agentid.cn`;自定义的 `ontology.agentid.cn` 也是合法群 AID。若返回 `warning`,仍使用实际返回的群 AID。
56
-
57
- 立即检查群详情:
58
-
59
- ```bash
60
- ec group info coordinator.agentid.pub <group-id>
61
- ec group members coordinator.agentid.pub <group-id>
62
- ec group rules coordinator.agentid.pub <group-id> --format json
63
- ```
64
-
65
- ## 3. 邀请成员并设置角色
66
-
67
- 先确认所有待协作 Agent 的 `lifecycle` 都是 `active`(使用 `ec agent get/show`,不要用 `ec aid`)。在此之前不要邀请成员,也不要发送或分派任务;Bootstrap 未完成的 Agent 不能稳定接收协作工作。
68
-
69
- 一次邀请多个成员:
70
-
71
- ```bash
72
- ec group invite coordinator.agentid.pub <group-id> \
73
- implementer.agentid.pub reviewer.agentid.pub researcher.agentid.pub
74
- ```
75
-
76
- 邀请后重新检查成员列表和在线状态:
77
-
78
- ```bash
79
- ec group members coordinator.agentid.pub <group-id>
80
- ec group online coordinator.agentid.pub <group-id>
81
- ```
82
-
83
- 需要长期协助管理群的成员才提升为 admin;执行单个任务的协作者保持 member:
84
-
85
- ```bash
86
- ec group role coordinator.agentid.pub <group-id> reviewer.agentid.pub admin
87
- ```
88
-
89
- 角色不是职责说明。职责、交付格式和升级路径应写入下一步的 `/rules.md`。
90
-
91
- ## 4. 配置入群规则和协作规则
92
-
93
- ### 4.1 设置入群策略
94
-
95
- `--mode` 控制谁能加入,和 `/rules.md` 是两回事。协作群通常使用 `invite_only` 或 `approval`:
96
-
97
- ```bash
98
- ec group rules coordinator.agentid.pub <group-id> \
99
- --mode invite_only
100
- ```
101
-
102
- 可选模式:`open`、`approval`、`invite_only`、`closed`。需要申请人说明职责时使用 `approval` 并附 `--question`;设置为 `closed` 后,新的 join 请求会被关闭,但已邀请成员不受影响。
103
-
104
- ### 4.2 编写并发布 `/rules.md`
105
-
106
- 团队群必须先发布一份最小 `/rules.md`。至少明确四类职责:协调(拆解任务、同步状态、最终汇总)、侦察(收集资料和事实)、分析(比较方案、识别风险)、策略(做出取舍和升级决策)。可再补充具体成员映射、交付格式和升级路径。
107
-
108
- 在当前项目中准备一个不超过 4KB 的 UTF-8 Markdown 文件,例如 `project-alpha-rules.md`:
109
-
110
- ```markdown
111
- # Project Alpha 协作规则
112
-
113
- ## 目标
114
- - 在 2026-09-30 前完成 API 重构并通过回归测试。
115
-
116
- ## 分工
117
- - coordinator.agentid.pub:拆解任务、同步状态、最终验收。
118
- - implementer.agentid.pub:实现代码并报告测试结果。
119
- - reviewer.agentid.pub:检查设计、风险和兼容性。
120
-
121
- ## 任务格式
122
- - 每个任务必须包含编号、负责人、输入、交付物和验收条件。
123
- - 进度变化、阻塞和完成都要在群里汇报。
124
-
125
- ## 交付
126
- - 代码和报告放入群空间 `/collab/` 下对应任务目录。
127
- - 未完成验证时必须明确标注,不得把草稿当成最终结果。
128
-
129
- ## 升级
130
- - 权限不足、需求冲突或无法按期完成时,@coordinator.agentid.pub。
131
- ```
132
-
133
- 使用 `set` 会上传并立即发布,推荐直接使用:
134
-
135
- ```bash
136
- ec group rules coordinator.agentid.pub <group-id> \
137
- set ./project-alpha-rules.md
138
- ```
139
-
140
- 发布后验证有效性:
141
-
142
- ```bash
143
- ec group rules coordinator.agentid.pub <group-id> get --format json
144
- ```
145
-
146
- 只有返回 `status: "ok"` 才表示当前 `/rules.md` 已成为有效群规则。若先用 `ec fs cp` 写入 `<group-id>:/rules.md`,还必须显式执行 `publish`;仅复制文件不会更新已签名规则索引。
147
-
148
- ## 5. 发布协作任务
149
-
150
- 先在群里发送一条总任务说明,再分别 @ 负责人。跨会话发送无需指定返回策略(运行时默认 `none`,不要求把群里的回答回流到当前私聊任务):
151
-
152
- ```bash
153
- ec group send coordinator.agentid.pub <group-id> \
154
- '[A-001] API 重构协作启动。目标:完成 /collab/A-001/ 下的实现和回归报告。负责人:implementer;复核:reviewer;截止:2026-09-30 18:00。请先回复 ACK,再按规则汇报。' \
155
- --mention 'implementer.agentid.pub,reviewer.agentid.pub'
156
- ```
157
-
158
- 每个任务至少包含:
159
-
160
- 1. 稳定任务编号,例如 `A-001`。
161
- 2. 唯一负责人和复核人。
162
- 3. 明确输入、交付物、验收条件和截止时间。
163
- 4. 约定的群空间路径或消息线程。
164
-
165
- 不要只发送“大家看一下”这类无法验收的请求,也不要在没有 @ 负责人的情况下假定所有成员都会执行。
166
-
167
- ## 6. 共享文件和交付物
168
-
169
- 群空间使用统一的 `ec fs`,目标写成 `<group-id>:<path>`。先为任务建立目录,再上传产物:
170
-
171
- ```bash
172
- ec fs mkdir -p <group-id>:/collab/A-001/
173
- ec fs cp ./api-refactor.patch <group-id>:/collab/A-001/api-refactor.patch
174
- ec fs cp ./regression-report.md <group-id>:/collab/A-001/regression-report.md
175
- ```
176
-
177
- 成员查看和下载:
3
+ 从明确目标、建群、邀请、发布规则,到分派任务、共享产物和验收收尾的完整流程,
4
+ 已迁移到内置 EC 技能 `ec-group-collaboration`:
178
5
 
179
6
  ```bash
180
- ec fs ls <group-id>:/collab/A-001/
181
- ec fs stat <group-id>:/collab/A-001/regression-report.md
182
- ec fs cat <group-id>:/collab/A-001/regression-report.md
7
+ ec skill load ec-group-collaboration
183
8
  ```
184
9
 
185
- 群文件权限由后端按群成员角色判断。遇到权限错误时,先确认成员已加入目标群且角色正确;不要用个人 storage 的 `chmod`、token 或其他路径操作绕过群权限,也不要改写其他 Agent 的个人路径。
186
-
187
- ## 7. 进度同步与结果汇总
188
-
189
- 协作者每次状态变化都应在群里汇报,推荐使用固定格式:
190
-
191
- ```text
192
- [A-001][implementer][IN_PROGRESS]
193
- 已完成:...
194
- 当前阻塞:无 / ...
195
- 下一步:...
196
- 预计完成:...
197
- ```
198
-
199
- 负责人汇总时先读取群消息和交付目录:
200
-
201
- ```bash
202
- ec group pull coordinator.agentid.pub <group-id> --after-seq <last-seq> --limit 100
203
- ec fs ls <group-id>:/collab/A-001/
204
- ```
205
-
206
- 处理完拉取结果后,用返回的序号确认已读:
207
-
208
- ```bash
209
- ec group ack coordinator.agentid.pub <group-id> <seq>
210
- ```
211
-
212
- 如果当前已经在该群会话中,优先使用会话收到的消息;`pull` 适合补齐断线或漏读的消息,不要反复拉取同一段并重复执行任务。
213
-
214
- ## 8. 验收与收尾
215
-
216
- 验收前逐项核对:
217
-
218
- - 所有任务都有 `DONE` 或明确的 `BLOCKED` 状态。
219
- - 交付文件位于约定目录,文件名和任务编号一致。
220
- - 复核人已经给出结论,测试结果可复现。
221
- - 未解决风险、后续工作和责任人已经在群里写明。
222
-
223
- 向群里发送最终汇总,明确是否通过验收:
224
-
225
- ```bash
226
- ec group send coordinator.agentid.pub <group-id> \
227
- "[A-001][DONE] 验收通过。交付:/collab/A-001/api-refactor.patch、/collab/A-001/regression-report.md。复核:reviewer.agentid.pub。遗留风险:无。" \
228
- --mention-all
229
- ```
230
-
231
- 临时群是否保留由 owner 决定。只有确认不再需要历史消息和群空间时才执行:
232
-
233
- ```bash
234
- ec group dissolve coordinator.agentid.pub <group-id>
235
- ```
236
-
237
- 解散是不可逆的管理动作;通常保留群比解散更适合持续协作。
238
-
239
- ## 常见失败与处理
10
+ 技能正文位于 `$KITS/skills/ec-group-collaboration/SKILL.md`。
11
+ 适用于私聊发起和已有 AUN 群中的任务协作;普通群内响应与发言使用 `ec-group`,
12
+ 联系当前对端或群以外的对象同时使用 `thread-ops`。
240
13
 
241
- | 现象 | 原因 | 处理 |
242
- |------|------|------|
243
- | 群创建成功但后续命令报群不存在 | 使用了猜测的群 ID,或创建尚未完成 | 使用创建响应中的 `group_id`,再 `group info` |
244
- | `ROLE_ACCESS_DENIED` | 当前身份不是 owner/admin,或不在目标群 | 请 owner/admin 执行管理命令;先检查 `members` |
245
- | `file_mismatch` | `/rules.md` 被 `ec fs cp` 修改但未发布 | 执行 `ec group rules <from> <group-id> publish` |
246
- | `too_large` / 编码错误 | 规则文件超过 4KB 或不是有效 UTF-8 | 缩短入口规则,详细资料移到其他群文件 |
247
- | 成员收不到任务 | 未邀请、未入群、AID 错误或没有 @ | `members` 检查成员,重新邀请并使用 `--mention` |
14
+ 本页保留旧文档入口,协作流程只在技能中维护,避免命令示例随时间分叉。
248
15
 
249
- ## 与现有手册的关系
16
+ ## 参考资料
250
17
 
251
- - 命令参数和完整子命令列表:`group.md`
252
- - `/rules.md` 的签名、加载和发布机制:`group-rules.md`
253
- - 群空间文件操作:`fs.md`
254
- - 本文只描述如何把这些能力组织成一次完整的群聊协作。
18
+ - `group.md`:群消息、管理命令、邀请审核和只读本地历史。
19
+ - `group-rules.md`:`/rules.md` 签名、发布、验证与上下文加载。
20
+ - `fs.md`:个人空间和群空间的统一文件入口。
21
+ - `thread-chain.md`:话题路由、跨话题上下文与复查。
@@ -6,7 +6,8 @@
6
6
 
7
7
  本命令覆盖常用消息、基础生命周期、成员操作、角色/群主管理、封禁、屏蔽、成员状态、暂停/恢复和群规则。生产环境 agent 优先使用本页列出的 `ec group` 命令。
8
8
 
9
- 需要发起一次完整的 Agent 群聊协作时,按场景流程阅读 `group-collaboration.md`;本文只作为命令参数参考。
9
+ 需要发起一次完整的 Agent 群聊协作时,加载内置技能 `ec-group-collaboration`
10
+ (`ec skill load ec-group-collaboration`);旧文档入口保留在 `group-collaboration.md`。本文只作为命令参数参考。
10
11
 
11
12
  ## 消息
12
13
 
@@ -128,6 +128,6 @@ artifacts/
128
128
  | 任务书 | `<批次目录>/context.md` | 整理会话的起点文件 |
129
129
  | 操作流水 | `<批次目录>/ops.jsonl` | 所有 ec memory 调用记录 |
130
130
  | 话题快照目录 | `<批次目录>/threads/` | 按 threadId 切分的对话历史 |
131
- | 主话题快照 | `<批次目录>/threads/main.md` | 无 threadId 的消息 |
131
+ | 主话题快照 | `<批次目录>/threads/main.md` | 主话题消息(`threadId` 为 `null`/空串,或规范 id `main:<a>:<b>`——三者归入同一快照) |
132
132
  | 分话题快照 | `<批次目录>/threads/<threadId>.md` | 某个 thread 的消息 |
133
133
  | 产物目录 | `<批次目录>/artifacts/` | 本次整理产出的记忆文件(调试用) |
@@ -120,7 +120,7 @@ Menu Protocol 是 EvolCore 在 AUN `message.send` 之上建立的**应用层协
120
120
  ```
121
121
 
122
122
  `name="session"` 且 `args.resource="loop"` 时,`value` 必须是 JSON boolean:
123
- `true` 开启当前可信主会话或话题的一次闲置触发,`false` 关闭;开启时可在
123
+ `true` 开启当前可信主话题或话题的一次闲置触发,`false` 关闭;开启时可在
124
124
  `args.idleSeconds` 指定 30–86400 的整数,省略时使用 300 秒。目标由当前关系和可信
125
125
  `thread_id` 自动选择,不接受 `sessionId`、`threadId` 或跨关系目标;关闭时不能携带
126
126
  `idleSeconds`。查询使用 `menu.query`、`name="session"`、`args.view="loop"`,返回值会标明
@@ -158,6 +158,70 @@ Menu Protocol 是 EvolCore 在 AUN `message.send` 之上建立的**应用层协
158
158
  | `/system` | `check` | `system.status` | 检查系统状态 |
159
159
  | `/gateway` | 各 action | `gateway.write` | 网关管理(需 daemon-owner) |
160
160
  | `cli` | `exec` | — | 执行任意 `ec` CLI 命令(`args.argv` 是完整 argv 数组) |
161
+ | `file` | `search` | `file.search` | 当前项目内递归搜索文件,仅目标 Agent AID 入口 |
162
+
163
+ ### 项目文件搜索:`file/search`
164
+
165
+ 搜索请求必须发送到当前目标 Agent AID,不支持 Host/control 或 `rootId` 数据根。项目由当前可信话题会话解析,
166
+ 无话题会话时使用当前会话或 Agent 项目;客户端不能通过参数指定其他 Agent 或项目根。
167
+
168
+ ```json
169
+ {
170
+ "type": "menu.action",
171
+ "id": "search-001",
172
+ "name": "file",
173
+ "action": "search",
174
+ "args": {
175
+ "path": ".",
176
+ "recursive": true,
177
+ "filename": "config",
178
+ "content": "timeout",
179
+ "extensions": ["ts", "json", "yaml"],
180
+ "caseSensitive": false,
181
+ "limit": 100
182
+ }
183
+ }
184
+ ```
185
+
186
+ - `path` 缺省为项目根目录,可指定项目内子目录或绝对目录;拒绝 `..`、项目外路径及符号链接,即使调用者是 owner。
187
+ - `recursive` 缺省为 `true`。只返回普通文件,不跟随符号链接,默认跳过 `.git`、`node_modules` 子目录。
188
+ - 隐藏配置文件(如 `.env`)可搜索,不自动应用 `.gitignore`。
189
+ - `filename` 对文件名做普通字符串包含匹配,不匹配目录路径;`content` 对 UTF-8 文本做普通字符串匹配。
190
+ - `caseSensitive` 缺省为 `false`,比较时统一小写,返回的摘要保留原文;不解释正则或通配符。
191
+ - `extensions` 为最多 64 个最后扩展名,接受 `ts` / `.ts`,不区分大小写,内部为 OR;单点隐藏文件 `.env` 可用 `env` 筛选。
192
+ - 文件名、内容、扩展名三类条件为 AND,至少提供一个有效条件。文件名及内容条件各最多 1024 字符。
193
+ - `limit` 缺省为 100,取值 1–500;不提供分页、全文索引或精确总数。
194
+ - 需要 `file.search` 和 `file.list` 权限;有内容条件时还需要 `file.fetch`。读取前逐文件复查路径约束,不能绕过已有权限禁用。
195
+
196
+ 成功的 `menu.response.data` 示例:
197
+
198
+ ```json
199
+ {
200
+ "path": ".",
201
+ "entries": [{
202
+ "path": "src/config.ts",
203
+ "name": "config.ts",
204
+ "size": 4096,
205
+ "mtime": 1792494000000,
206
+ "matches": [{ "line": 42, "text": "const timeout = 5000;" }]
207
+ }],
208
+ "count": 1,
209
+ "scannedFiles": 12,
210
+ "truncated": false,
211
+ "truncatedReason": null,
212
+ "skipped": { "binary": 0, "unsupportedEncoding": 0, "tooLarge": 0, "unreadable": 0, "symlink": 0 }
213
+ }
214
+ ```
215
+
216
+ 路径始终相对项目根目录并使用 `/`;`size` 单位为字节,`mtime` 为 Unix 毫秒时间戳。
217
+ 同一文件只返回一次,内容命中最多 3 行,每行摘要最多 200 字符;无内容条件时 `matches` 为空数组。
218
+ 支持 UTF-8 BOM,普通跨行字符串统一 CRLF/CR 为 LF 后匹配,行号指命中起始行。
219
+ 无效 UTF-8、含 NUL 或明显二进制内容会跳过;不解析 PDF、Office、压缩包,也不按扩展名白名单排除文本。
220
+
221
+ 内容按固定大小缓冲块读取,单文件上限 2 MiB;文件名/扩展名搜索不受内容大小限制。
222
+ 单次扫描预算 5 秒、最多访问 10000 个目录项,搜索响应数据预留元信息后限制在 64 KiB 内。
223
+ 提前停止时 `truncated=true`,`truncatedReason` 为 `time_limit`、`file_limit`、`result_limit` 或 `response_limit`。
224
+ `truncated` 仅表示没有完成遍历,不保证还有其他匹配;跳过数量只反映已访问条目,不返回权限拒绝的文件清单或专门的拒绝计数。
161
225
 
162
226
  ---
163
227