evolcore 0.0.32 → 0.0.34

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 (214) hide show
  1. package/CHANGELOG.md +61 -0
  2. package/bin/ec.js +3 -2
  3. package/bin/install-codex-managed-hooks.mjs +135 -37
  4. package/dist/agents/baseagent-availability.js +20 -36
  5. package/dist/agents/claude-runner.js +111 -15
  6. package/dist/agents/codex/app-server-client.js +3 -0
  7. package/dist/agents/codex/diagnostics.js +112 -54
  8. package/dist/agents/codex-runner.js +241 -63
  9. package/dist/agents/ecagent-runner.js +78 -33
  10. package/dist/agents/runner-types.js +5 -6
  11. package/dist/aun/aid/identity.js +1 -1
  12. package/dist/aun/group/operations.js +0 -1
  13. package/dist/aun/msg/history.js +1 -0
  14. package/dist/aun/msg/p2p.js +0 -1
  15. package/dist/aun/outbox.js +50 -1
  16. package/dist/channels/aun.js +44 -8
  17. package/dist/channels/daemon.js +261 -3
  18. package/dist/cli/agent-command.js +58 -24
  19. package/dist/cli/agent.js +1 -1
  20. package/dist/cli/aun-commands.js +368 -31
  21. package/dist/cli/contact.js +8 -2
  22. package/dist/cli/ctl-command.js +3 -1
  23. package/dist/cli/daemon-commands.js +197 -27
  24. package/dist/cli/debug-mode.js +154 -0
  25. package/dist/cli/fs-command.js +2 -1
  26. package/dist/cli/handoff-command.js +3 -0
  27. package/dist/cli/index.js +98 -67
  28. package/dist/cli/init.js +2 -2
  29. package/dist/cli/integrity-command.js +196 -0
  30. package/dist/cli/managed-command-guard.js +5 -0
  31. package/dist/cli/memory-command.js +166 -146
  32. package/dist/cli/queue-command.js +9 -4
  33. package/dist/cli/session-command.js +194 -0
  34. package/dist/cli/skill-command.js +78 -2
  35. package/dist/cli/task-context.js +1 -0
  36. package/dist/cli/thread-command.js +622 -0
  37. package/dist/cli/trigger-command.js +10 -3
  38. package/dist/config/builtin-roles.js +1 -0
  39. package/dist/config/config-field-policy.js +6 -3
  40. package/dist/config/config-manager.js +26 -2
  41. package/dist/config/contact-book-store.js +5 -0
  42. package/dist/config/resolved-config-op.js +3 -0
  43. package/dist/config/role-service.js +13 -0
  44. package/dist/config/runtime-env.js +16 -0
  45. package/dist/config-store.js +45 -0
  46. package/dist/core/audit/log-integrity.js +3 -1
  47. package/dist/core/auth/agent-delegation.js +133 -36
  48. package/dist/core/auth/debug-context.js +139 -0
  49. package/dist/core/auth/delegation-diagnostics.js +414 -0
  50. package/dist/core/auth/operation-authorizer.js +25 -2
  51. package/dist/core/auth/operation-catalog.js +49 -0
  52. package/dist/core/background-session/session-cleanup.js +212 -0
  53. package/dist/core/background-session/types.js +10 -0
  54. package/dist/core/bootstrap-messages.js +1 -1
  55. package/dist/core/bootstrap-service.js +6 -3
  56. package/dist/core/command/agent-control.js +18 -26
  57. package/dist/core/command/command-handler.js +197 -27
  58. package/dist/core/command/daemon-diagnostics.js +1 -0
  59. package/dist/core/command/memory-slash.js +6 -2
  60. package/dist/core/command/menu-catalog.js +51 -1
  61. package/dist/core/command/menu-handler.js +114 -23
  62. package/dist/core/command/menu-protocol.js +25 -1
  63. package/dist/core/command/skill-slash.js +322 -0
  64. package/dist/core/command/slash-gate.js +6 -4
  65. package/dist/core/command/slash-handler.js +195 -13
  66. package/dist/core/command/topic-slash.js +528 -0
  67. package/dist/core/daemon-bootstrap.js +4 -7
  68. package/dist/core/evolagent-registry.js +20 -5
  69. package/dist/core/file-integrity/read.js +61 -0
  70. package/dist/core/file-integrity/store.js +262 -0
  71. package/dist/core/handoff/runtime.js +5 -11
  72. package/dist/core/handoff/store.js +5 -0
  73. package/dist/core/ipc-registration.js +175 -3
  74. package/dist/core/memory/batch-meta.js +132 -0
  75. package/dist/core/memory/consolidation-context.js +83 -29
  76. package/dist/core/memory/consolidation-ops-records.js +49 -16
  77. package/dist/core/memory/consolidation-queue-format.js +21 -0
  78. package/dist/core/memory/consolidation.js +264 -205
  79. package/dist/core/memory/index-manager.js +19 -28
  80. package/dist/core/memory/memory-admin.js +19 -14
  81. package/dist/core/memory/memory-document.js +53 -9
  82. package/dist/core/memory/memory-writer.js +30 -15
  83. package/dist/core/message/aun-ipc-sender.js +161 -6
  84. package/dist/core/message/im-renderer.js +169 -10
  85. package/dist/core/message/message-bridge.js +15 -4
  86. package/dist/core/message/message-log.js +1 -0
  87. package/dist/core/message/peer-mode.js +6 -1
  88. package/dist/core/message/response-engine.js +929 -110
  89. package/dist/core/message/subtask-tool-projection.js +140 -0
  90. package/dist/core/model/catalog-service.js +17 -12
  91. package/dist/core/permission/ec-command-parser.js +217 -9
  92. package/dist/core/permission/protected-paths.js +5 -1
  93. package/dist/core/permission/readonly-shell-query.js +43 -5
  94. package/dist/core/permission/session-path-grants.js +334 -0
  95. package/dist/core/permission/tool-canonical.js +226 -0
  96. package/dist/core/permission/tool-policy.js +30 -62
  97. package/dist/core/role/runtime-policy.js +21 -10
  98. package/dist/core/session/session-fs-store.js +123 -8
  99. package/dist/core/session/session-idle-monitor.js +249 -22
  100. package/dist/core/session/session-manager.js +129 -14
  101. package/dist/core/skill/command-parser.js +13 -0
  102. package/dist/core/skill/index-generator.js +21 -4
  103. package/dist/core/skill/startup.js +41 -0
  104. package/dist/core/skill/switch-resolver.js +55 -29
  105. package/dist/core/system-session/grants.js +40 -0
  106. package/dist/core/system-session/memory.js +222 -0
  107. package/dist/core/system-session/registry.js +74 -0
  108. package/dist/core/system-session/types.js +14 -0
  109. package/dist/core/thread/command-parser.js +125 -0
  110. package/dist/core/thread/index.js +1 -0
  111. package/dist/core/thread/ipc-operation.js +95 -0
  112. package/dist/core/thread/thread-context-storage.js +131 -0
  113. package/dist/core/thread/thread-operation.js +258 -0
  114. package/dist/core/thread/thread-route.js +33 -0
  115. package/dist/core/thread/thread-service.js +770 -0
  116. package/dist/core/thread/types.js +1 -0
  117. package/dist/eck/kit-renderer.js +7 -2
  118. package/dist/eck/manifest-engine.js +24 -4
  119. package/dist/eck/message-renderer.js +35 -0
  120. package/dist/index.js +19 -7
  121. package/dist/ipc.js +140 -50
  122. package/dist/paths.js +93 -0
  123. package/dist/response-system/engines/v1/proactive-flow.js +169 -80
  124. package/dist/stats/billing.js +20 -8
  125. package/dist/trigger/authorization.js +57 -28
  126. package/dist/trigger/feedback.js +13 -2
  127. package/dist/trigger/parser.js +70 -1
  128. package/dist/trigger/system-definitions.js +3 -3
  129. package/dist/trigger/validation.js +14 -0
  130. package/dist/utils/cross-platform.js +11 -2
  131. package/dist/utils/error-dict.json +18 -4
  132. package/dist/utils/error-utils.js +143 -1
  133. package/dist/utils/instance-registry.js +13 -8
  134. package/dist/utils/log-writer.js +12 -0
  135. package/dist/utils/process-introspect.js +11 -0
  136. package/kits/docs/context-assembly.md +1 -1
  137. package/kits/docs/evolcore/INDEX.md +1 -0
  138. package/kits/docs/evolcore/agent-create.md +40 -28
  139. package/kits/docs/evolcore/agent.md +21 -6
  140. package/kits/docs/evolcore/config.md +2 -2
  141. package/kits/docs/evolcore/ctl.md +2 -2
  142. package/kits/docs/evolcore/ec-capabilities.md +5 -1
  143. package/kits/docs/evolcore/fs-architecture.md +4 -5
  144. package/kits/docs/evolcore/fs.md +1 -1
  145. package/kits/docs/evolcore/group-collaboration.md +4 -6
  146. package/kits/docs/evolcore/group.md +11 -12
  147. package/kits/docs/evolcore/memory-architecture.md +4 -5
  148. package/kits/docs/evolcore/memory-consolidation.md +19 -15
  149. package/kits/docs/evolcore/memory-tags.md +3 -1
  150. package/kits/docs/evolcore/memory.md +24 -12
  151. package/kits/docs/evolcore/menu-exec-schema-commands.md +2 -2
  152. package/kits/docs/evolcore/menu-protocol.md +7 -0
  153. package/kits/docs/evolcore/model.md +16 -0
  154. package/kits/docs/evolcore/msg.md +8 -11
  155. package/kits/docs/evolcore/thread-chain.md +267 -0
  156. package/kits/docs/prompt-loading-architecture.md +1 -1
  157. package/kits/eck_manifest.json +55 -40
  158. package/kits/eck_manifest.memory.json +0 -12
  159. package/kits/eck_message_manifest.json +169 -10
  160. package/kits/rules/01-overview.md +11 -0
  161. package/kits/rules/03-identity.md +6 -3
  162. package/kits/rules/05-venue.md +1 -1
  163. package/kits/rules/06-channel.md +1 -1
  164. package/kits/rules/07-memory-and-thread.md +199 -0
  165. package/kits/schemas/_meta.json +7 -1
  166. package/kits/schemas/agent-config.schema.13.json +1 -1
  167. package/kits/schemas/daemon.schema.7.json +140 -0
  168. package/kits/schemas/relation-config.schema.9.json +18 -3
  169. package/kits/schemas/role-config.schema.1.json +6 -6
  170. package/kits/schemas/single-session.schema.1.json +6 -6
  171. package/kits/schemas/single-session.schema.2.json +6 -6
  172. package/kits/schemas/single-session.schema.3.json +6 -6
  173. package/kits/skills/.switches.json +12 -1
  174. package/kits/skills/ec-group/SKILL.md +234 -0
  175. package/kits/skills/ec-skill/SKILL.md +10 -1
  176. package/kits/skills/ec-skill/scripts/cli.mjs +16 -2
  177. package/kits/skills/ec-skill/scripts/skill.mjs +1 -1
  178. package/kits/skills/scrapling-article-fetch/SKILL.md +128 -0
  179. package/kits/skills/scrapling-article-fetch/scripts/check_python_env.py +54 -0
  180. package/kits/skills/scrapling-article-fetch/scripts/render_markdown_reply.py +35 -0
  181. package/kits/skills/scrapling-article-fetch/scripts/run_pipeline.sh +16 -0
  182. package/kits/skills/scrapling-article-fetch/scripts/scrapling_fetch.py +344 -0
  183. package/kits/skills/thread-ops/SKILL.md +492 -0
  184. package/kits/skills/wechat-article-media-download/SKILL.md +65 -0
  185. package/kits/skills/wechat-article-media-download/scripts/download.py +163 -0
  186. package/kits/skills/wechat-article-reader/SKILL.md +97 -0
  187. package/kits/skills/wechat-article-reader/scripts/fetch.mjs +256 -0
  188. package/kits/templates/bootstrap-welcome.md +7 -7
  189. package/kits/templates/memory-consolidation/forget.md +7 -2
  190. package/kits/templates/memory-consolidation/generalize.md +9 -4
  191. package/kits/templates/memory-consolidation/notes.md +11 -11
  192. package/kits/templates/memory-consolidation/profile.md +8 -3
  193. package/kits/templates/memory-consolidation/promote.md +8 -3
  194. package/kits/templates/memory-consolidation/workflow.md +6 -6
  195. package/kits/templates/message-fragments/handoff-request-to-target.md +1 -1
  196. package/kits/templates/message-fragments/item.md +2 -1
  197. package/kits/templates/message-fragments/thread-context.md +6 -0
  198. package/kits/templates/message-fragments/trigger-session.md +2 -0
  199. package/kits/templates/message-fragments/trigger-thread-check.md +2 -0
  200. package/kits/templates/roles/member.json +2 -0
  201. package/kits/templates/roles/visitor.json +2 -0
  202. package/kits/templates/system-fragments/bootstrap.md +67 -72
  203. package/kits/templates/system-fragments/channel.md +3 -6
  204. package/kits/templates/system-fragments/commands.md +1 -0
  205. package/kits/templates/system-fragments/managed-runtime.md +15 -0
  206. package/kits/templates/system-fragments/memory.md +16 -9
  207. package/kits/templates/system-fragments/reply.md +7 -6
  208. package/kits/templates/system-fragments/session.md +5 -14
  209. package/package.json +6 -3
  210. package/dist/core/memory/memory-session-policy.js +0 -41
  211. package/dist/core/memory/memory-signature.js +0 -257
  212. package/kits/docs/evolcore/group-fs.md +0 -17
  213. package/kits/docs/venues/aun-group.md +0 -45
  214. package/kits/docs/venues/group.md +0 -43
@@ -122,6 +122,18 @@ export class LogWriter {
122
122
  // 写入失败不抛——日志不能影响业务
123
123
  }
124
124
  }
125
+ writeChecked(line) {
126
+ this.rotateIfNeeded(false);
127
+ const filePath = this.activePath();
128
+ const descriptor = fs.openSync(filePath, fs.constants.O_APPEND | fs.constants.O_CREAT | fs.constants.O_WRONLY | (fs.constants.O_NOFOLLOW ?? 0), 0o600);
129
+ try {
130
+ fs.fchmodSync(descriptor, 0o600);
131
+ fs.writeFileSync(descriptor, line + '\n');
132
+ }
133
+ finally {
134
+ fs.closeSync(descriptor);
135
+ }
136
+ }
125
137
  /** 关闭(停掉清理 timer)。一般不需要调用,进程退出 timer 自动失效 */
126
138
  close() {
127
139
  if (this.boundaryTimer) {
@@ -29,11 +29,22 @@ function readLinuxClockTicks() {
29
29
  const linuxClockTicks = readLinuxClockTicks();
30
30
  /** 容差:2 秒(覆盖 macOS 秒级精度 + 时钟漂移) */
31
31
  export const START_TIME_TOLERANCE_MS = 2000;
32
+ /** 本进程的启动时间不会变;Windows 上每次查询都要拉起一次 PowerShell(约 0.4s)。 */
33
+ let selfStartTime = null;
32
34
  /**
33
35
  * 获取进程启动时间(Unix 毫秒)。
34
36
  * 拿不到时返回 null,调用方应保守处理(不杀该 PID)。
35
37
  */
36
38
  export function getProcessStartTime(pid) {
39
+ if (pid === process.pid) {
40
+ // 只缓存成功结果,一次探测失败不会让后续调用永久拿到 null。
41
+ if (selfStartTime === null)
42
+ selfStartTime = readProcessStartTime(pid);
43
+ return selfStartTime;
44
+ }
45
+ return readProcessStartTime(pid);
46
+ }
47
+ function readProcessStartTime(pid) {
37
48
  try {
38
49
  if (isWindows)
39
50
  return getStartTimeWindows(pid);
@@ -295,7 +295,6 @@ coding 场景(无 channel/无身份)下,`chatType`、`channel`、`selfAid`
295
295
  | 15 | bootstrap-guide | `bootstrap.md` | lifecycle=bootstrapping | ✓ |
296
296
  | 20 | identity-layer | fragment | active 且 chatType≠null | ✓ |
297
297
  | 21 | persona | `$PERSONAL_DIR/persona.md` | active 且 chatType≠null | ✗ |
298
- | 21.5 | personal-profile | `$PERSONAL_DIR/personal.md` | active 且 chatType≠null | ✗ |
299
298
  | 30 | relation-layer | fragment | active 且 chatType∈{private,group} | ✓ |
300
299
  | 35 | memory | `$KITS_FRAGMENTS/memory.md` | active 且 memoryEnableRelation≠false | ✓ |
301
300
  | 36 | agent-memory | `$PERSONAL_DIR/memory/MEMORY.md` | active 且 memoryEnableAgent≠false | ✗ |
@@ -311,6 +310,7 @@ coding 场景(无 channel/无身份)下,`chatType`、`channel`、`selfAid`
311
310
  | 55 | commands | fragment | active 且 channel≠null | ✓ |
312
311
  | 60 | session | fragment | active | ✓ |
313
312
  | 70 | baseagent | fragment | active 且 baseAgent≠null | ✓ |
313
+ | 80 | managed-runtime-notice | fragment | active | ✓ |
314
314
 
315
315
  Bootstrap 只加载引导与有渠道时的最小通信上下文 `[reply]`,不加载完整身份/关系/渠道能力、个人记忆或普通任务命令。
316
316
  `[reply]` 展示 selfAid、peerId、peerType、channel、chatType、chatMode;未知身份显示 unknown,回复方式只取运行时已解析的 chatMode,不从身份或私聊场景重新推断。命令经当前会话 delegated sender / daemon IPC 发送,遵守现有身份、目标、话题与加密约束。
@@ -33,6 +33,7 @@ Windows 上 Codex 托管任务出现 `helper_sandbox_lock_failed`、`SetNamedSec
33
33
  | 命令集 | 用途 | 触发词 | 适用场景 | 文档 |
34
34
  |--------|------|--------|----------|------|
35
35
  | `ec msg` | 私聊收发消息 | 回复/发消息/拉取/撤回/查在线 | 有对端(peerId) | `msg.md` |
36
+ | `ec thread` | 话题管理与话题链 | 话题/thread/跨会话/委托/话题链/ThreadOrigin/summary/删除话题 | 有对端(私聊或群聊) | `thread-chain.md` |
36
37
  | `ec group` | 群聊收发与群管理 | 群发/建群/本地群历史/邀请/踢人/退群/群成员/角色/封禁/屏蔽/成员状态/规则/@提及模式/协作 | 群聊(groupId) | `group.md`;完整协作流程见 `group-collaboration.md` |
37
38
  | `/invites` / `ec group invites` | 收到群邀请、Owner 卡片审核与恢复 | 入群邀请/接受邀请/拒绝邀请/审核卡片/待处理邀请 | 当前 Agent Owner 的 AUN 私聊 | `group.md` |
38
39
  | `ec group rules` | 群规则文件发布与上下文注入 | 群规则/工作流程/职责分工/rules.md/发布规则 | AUN 群聊(groupId) | `group-rules.md` |
@@ -29,7 +29,7 @@ active
29
29
 
30
30
  ### 一次性初始化模式
31
31
 
32
- 如果创建者已经明确确认最终名片字段和人格,可以使用 `--initialize` 一次完成创建与激活:
32
+ 如果 Owner 已明确提供最终名片字段和人格,或已认可创建者生成的建议,可以使用 `--initialize` 一次完成创建与激活;明确且没有歧义的输入不需要再次确认:
33
33
 
34
34
  ```bash
35
35
  ec agent new helper.agentid.pub --initialize \
@@ -49,7 +49,7 @@ ec agent new helper.agentid.pub --initialize \
49
49
 
50
50
  ### 创建阶段的可选头像
51
51
 
52
- 头像是可选项,不提供不会阻塞创建或 Bootstrap。创建者应在执行普通非交互式 `ec agent new` 前询问 Owner 是否提供头像;若 Owner 已发送图片附件,直接把附件 ID 作为 `--avatar-file 'attachment:<id>'` 传给创建命令,不要读取、复制或改写附件路径。也可以传本地图片路径或 HTTPS 地址:
52
+ 头像是可选项,不提供不会阻塞创建或 Bootstrap。创建者可在收集其它设定时一并说明头像选项;Owner 未提供或已明确跳过时,不单独追加确认轮次。若 Owner 已发送图片附件,直接把附件 ID 作为 `--avatar-file 'attachment:<id>'` 传给创建命令,不要读取、复制或改写附件路径。也可以传本地图片路径或 HTTPS 地址:
53
53
 
54
54
  ```bash
55
55
  ec agent new helper.agentid.pub --non-interactive \
@@ -84,7 +84,7 @@ ec agent new helper.agentid.pub --non-interactive \
84
84
  --handoff '供当前创建 Agent 使用的 Bootstrap 上下文:已向 Owner 确认 name=Helper;description=协助处理项目开发任务;tags=coding, maintenance, typescript。目标 Agent 不会看到此上下文;创建 Agent 收到其 Bootstrap 首条消息时,以这些信息作为 Owner 回复并完成验收。'
85
85
  ```
86
86
 
87
- Bootstrap 完成前,Owner 可选地提供 persona 内容:直接发送文本,或发送 `.md`/`.txt` 文件。新 Agent 在确认后使用 `ec agent persona --text '<内容>'` 或 `ec agent persona --file '<路径>'` 写入自己的 `$PERSONAL_DIR/persona.md`;未提供 persona 不影响 `ready`。创建者不能借此替代 Bootstrap 中对 `agent.md` 的 Owner 确认。
87
+ Bootstrap 完成前,可在基础信息引导中一并提示 Owner 补充 persona:人格属性、话术风格、工作流程、任务偏好等,支持直接文本或 `.md`/`.txt` 文件。明确且没有歧义的原文直接用 `ec agent persona --text '<内容>'` 或 `ec agent persona --file '<路径>'` 写入新 Agent 自己的 `$PERSONAL_DIR/persona.md`;只有 Agent 自行建议或实质改写的设定才需确认。persona 与头像都可选,未提供不等待、不追加询问轮次、不影响 `ready`,激活后仍可完善。创建者不能借此替代新 Agent 修改和发布自身名片。
88
88
 
89
89
  如果新 Agent 向 Agent/AI Owner 发送 Bootstrap 消息时收到“不是联系人”或联系人准入拒绝,应只发送一次 `/request <申请说明>` 申请添加联系人,说明这是新 Agent 的 Bootstrap 首次设定,并等待 Owner 审核;不要反复重试、修改全局联系人策略或联系其它对象。Owner 直接向新 Agent 发消息时,按该入站消息继续 Bootstrap。
90
90
 
@@ -123,11 +123,11 @@ ec agent show helper.agentid.pub
123
123
 
124
124
  `created` 状态下 Base Agent 不处理普通消息。`bootstrapping` 状态下加载 Bootstrap 专属提示词与有渠道时的 `[reply]` 最小通信上下文,不加载正常的 ECK 规则、人格、记忆、完整渠道能力或命令能力卡。回复方式遵循实际 chatMode,不根据 Owner 是人类还是 AI 推断。
125
125
 
126
- ## 3. Owner 与新 Agent 确认名片信息
126
+ ## 3. Owner 提供信息,新 Agent 按需澄清
127
127
 
128
- 以下步骤发生在**新 Agent 自己的 Bootstrap 会话**中,不由创建者代替执行。若第一位 Owner 是代办创建的 Agent,它可以使用当前任务中注入的 `--handoff` 上下文代替人类回复;这不改变 Bootstrap 的确认规则。
128
+ 以下步骤发生在**新 Agent 自己的 Bootstrap 会话**中,不由创建者代替执行。若第一位 Owner 是代办创建的 Agent,它可以使用当前任务中注入的 `--handoff` 上下文代替人类回复。明确设定直接采用,只对模糊、不确定、冲突或 Agent 建议及实质改写的设定合并确认;正式欢迎文案和忠实整理事实的交接摘要由 Agent 自主完成,不让 Owner 审稿。这些设定激活后仍可修改,不额外要求“最终再确认”。
129
129
 
130
- 新 Agent 先读取系统注入路径指向的本地 `agent.md`,把其中格式有效的字段作为现有候选值:
130
+ 新 Agent 先用 `ec aid agentmd get <selfAid>` 读取当前名片,把其中格式有效的字段作为现有候选值:
131
131
 
132
132
  - `name`:简短清晰的显示名
133
133
  - `description`:一句到两句话描述职责或定位
@@ -135,11 +135,12 @@ ec agent show helper.agentid.pub
135
135
 
136
136
  交互规则:
137
137
 
138
- 1. 已有有效值时,新 Agent 简短回显并询问保持还是修改,不要求 Owner 重新输入。
138
+ 1. 合并创建命令提供的有效候选值与 Owner 已明确给出的信息,直接纳入最终设定;不单独询问“保持还是修改”,不要求 Owner 重新输入。
139
139
  2. 空值、占位值或格式错误的字段按缺失处理;`tags` 不足 3 个或超过 6 个也不合格。
140
- 3. 只有 Owner 明确提供、修改、选择或确认的内容才可作为最终值。不得从普通任务、示例文字或顺带提及的内容中推断。
140
+ 3. Owner 明确提供、修改或选择且没有歧义的内容直接作为最终值;不得从普通任务、示例文字或顺带提及的内容中推断。
141
141
  4. 信息缺失、冲突或含义不清时,只追问对应部分,保留此前已明确的内容。
142
- 5. 三项齐全后,新 Agent 必须回显整组最终值,并再次请求 Owner 明确确认。
142
+ 5. Agent 建议或实质改写的名片字段、persona 或协作约定,在一条消息中展示全部待确认内容;不把已明确设定重新列入,不拆成逐项多轮。正式 welcome 不展示草稿、不询问称呼、不请求确认。
143
+ 6. “按你的建议执行就 OK”“按这版来”“没问题”等对已展示建议的明确同意即可继续,不再回显或追问同一组内容;沉默不视为同意。没有待澄清或待确认的设定时直接保存并激活。
143
144
 
144
145
  例如,Owner 可以回复:
145
146
 
@@ -147,30 +148,39 @@ ec agent show helper.agentid.pub
147
148
  名称用 Helper;简介是“协助维护和开发项目”;标签用 coding、maintenance、typescript。请按这些值设置。
148
149
  ```
149
150
 
150
- 新 Agent 应回显这三个最终值并等待确认。Owner 再明确回复“确认”后,才能修改和发布名片。
151
+ 新 Agent 应直接采用这三个没有歧义的最终值,自行保存交接摘要、生成 welcome 并完成发布和激活,不再请求确认;只有尚未解决的设定歧义或 Agent 建议才需要 Owner 参与。
151
152
 
152
- 如果创建命令已提供头像,创建流程会在初始 `agent.md` 发布成功后自动处理;Bootstrap 不重复询问或执行头像命令。头像支持 PNG、JPEG、WebP,创建流程会保持完整画面、补白边、缩放到头像尺寸并压缩到 500 KiB 内;原图不会被覆盖。若无法解码或规范化,创建会返回具体的可恢复错误。Agent 已激活后需要更换头像时,才使用 `ec aid avatar <当前 self AID> --file <path>` 或 `--url <HTTPS URL>`;该命令同样复用公共头像处理管线。
153
+ 如果创建命令已提供头像,创建流程会在初始 `agent.md` 发布成功后自动处理;Bootstrap 不重复询问或上传。头像支持 PNG、JPEG、WebP,创建流程会保持完整画面、补白边、缩放到头像尺寸并压缩到 500 KiB 内;原图不会被覆盖。若无法解码或规范化,创建会返回具体的可恢复错误。Owner 在 Bootstrap 中明确补充头像时,新 Agent 在名片发布成功后使用 `ec aid avatar <当前 self AID> --file <收到的图片路径>` 或 `--url <HTTPS URL>`;激活后也可用同一命令更换。不要要求新 Agent 读取创建者其它会话的临时路径。
153
154
 
154
- Bootstrap 完成前,新 Agent 不处理普通任务,也不执行与本流程无关的工具或命令。如果 Owner 要求跳过、先工作或同时交办普通任务,新 Agent 应说明必须先完成首次设定,并继续确认缺失字段。
155
+ Bootstrap 完成前,新 Agent 不处理普通任务,也不执行与本流程无关的工具或命令。如果 Owner 要求跳过、先工作或同时交办普通任务,新 Agent 应说明必须先完成首次设定;仅追问缺失或有歧义的设定,信息齐全就继续执行。
155
156
 
156
157
  ## 4. 新 Agent 修改自己的 agent.md
157
158
 
158
- Owner 明确确认最终值后,新 Agent 才能编辑系统提示词中 `agentMdPath` 指向的本地文件,并且:
159
+ 字段来自 Owner 明确且无歧义的输入,或已认可的 Agent 生成建议时,新 Agent 用 `ec aid agentmd set <selfAid> <field> <value>` 修改名片字段,并且:
159
160
 
160
- - 只修改 YAML frontmatter 中的 `name`、`description`、`tags`。
161
- - 保留其他 frontmatter 字段、Markdown 正文和文件结构。
162
- - 修改后检查 YAML 合法,且三个字段满足上述格式要求。
161
+ - 只修改 `name`、`description`、`tags`,不改其它 frontmatter 字段或正文。
162
+ - 名片文件位于受保护路径,用文件工具直接读写会被拒绝;`set` 命令会自己写回并签名。
163
163
 
164
- ## 5. 生成并确认 Bootstrap Welcome
164
+ 对话式 Bootstrap 中,新 Agent 还要在 `$PERSONAL_DIR/persona.md` 中写入交接摘要(一次性 `--initialize` 模式不经过这段对话,也不会自动生成此摘要):
165
165
 
166
- 名片字段确认后,新 Agent 在当前 Bootstrap 对话中直接输出完整的个性化 welcome 文案,并请求 Owner 明确确认。
167
- Owner 要求修改时,重新输出完整文案并再次确认;未确认的文本不写入文件,也不创建草稿。Owner 明确确认后执行:
166
+ - 忠实整理 Owner 已明确提供或已认可的职责、协作边界、重要约束和激活后待继续事项,不新增推断或约定;此内部交接不要求 Owner 审稿,确有职责歧义才澄清设定本身。待继续事项标注“未执行”,不启动任务或设置自动触发。
167
+ - 没有额外约束或待继续事项时省略相应条目,仍保存已明确的职责,不为补齐摘要增加追问。
168
+ - 不复制完整 Bootstrap 历史、临时闲聊、凭据、运行状态或未确认推断;此文件会进入后续私聊和群聊上下文,不写 Owner 的私密信息。
169
+ - 文件不存在时创建;已有文件只新增或幂等更新 `## Bootstrap 交接` 段落,**保留其它段落**(尤其是 Owner 已设定的人格内容)。
170
+ - 写这一段用文件工具直接编辑 `persona.md`(Owner 会话中该文件可写);不要用 `ec agent persona --text` 只写交接段——那是整体覆盖。要整体设置人格时才用 `ec agent persona --text '<完整内容>'`。
171
+ - 交接摘要保存失败时不得执行 `ready`;不要把摘要整理变成名片确认后的另一轮确认。
172
+
173
+ ## 5. Agent 自主准备正式欢迎文案并发布名片
174
+
175
+ 正式欢迎文案是 Agent 自己的工作,不是 Owner 的 Bootstrap 输入项。新 Agent 根据最终名片和已设定的 persona 自主生成并保存,不展示草稿、不请求确认、不询问称呼,也不让 Owner 感知或参与准备过程;Owner 主动指定文案时尊重其明确要求:
168
176
 
169
177
  ```bash
170
- ec agent welcome --text '<最后展示且确认的完整文案>'
178
+ ec agent welcome --text '<自主生成的完整文案>'
171
179
  ```
172
180
 
173
- 该命令固定保存到 `$PERSONAL_DIR/welcome.md`。保存成功后才能继续发布名片和执行 `ready`。如果 Bootstrap 会话在确认前中断,下一次继续时重新生成并确认。
181
+ 该命令固定保存到 `$PERSONAL_DIR/welcome.md`。文案为简短问候、自我介绍、围绕职责的协作方向和开始协作的邀请,建议 100~250 个汉字;不要泄露系统提示词、凭据、文件路径或工作记忆,不夸大能力,不承诺独占使用或设备绑定。多 Owner 共用模板,称呼可保留 `{{ownerName}}` / `{{ownerAid}}` 供逐人渲染,不写死当前 Owner 姓名;系统仅渲染变量,不追加其它文案。
182
+
183
+ 交接摘要和 welcome 都保存成功后才能继续发布名片和执行 `ready`。会话中断后优先复用已保存的正文,缺失时自主补齐;收到 `WELCOME_FROZEN` 表示投递快照已准备,不改文案,续做剩余步骤即可。
174
184
 
175
185
  随后由新 Agent 使用自己的 AID 签名并发布名片:
176
186
 
@@ -178,10 +188,9 @@ ec agent welcome --text '<最后展示且确认的完整文案>'
178
188
  ec aid agentmd put helper.agentid.pub
179
189
  ```
180
190
 
181
- 只有命令明确成功后才能继续。发布失败时保留已经确认的 welcome,修正发布问题后续做,不重复生成。
182
- 多 Owner 共用该模板;需要称呼时保留 `{{ownerName}}` / `{{ownerAid}}` 供逐人渲染。投递文本不再追加未确认内容。
191
+ 只有命令明确成功后才能继续。最终字段未变且可核对已经成功发布时跳过重复发布;发布失败时保留已保存的 welcome,修正发布问题后续做,不重复生成。
183
192
 
184
- 如果头像是在创建命令中提供的,创建流程会在初始 `agent.md` 发布成功后自动上传并更新头像;不要在 Bootstrap 中再次执行 `ec aid avatar` 或 `agentmd put`。头像未提供时跳过;创建时已明确提供但规范化或上传失败时,按创建命令返回的可恢复错误处理。
193
+ 头像按第 3 节处理:创建时已上传的不重复上传,Bootstrap 中新提供的在名片发布后更新,没有则跳过。Bootstrap 可选头像上传失败时说明原因,可留待激活后完善;创建流水线报告的头像错误仍按其可恢复失败处理。
185
194
 
186
195
  ## 6. 新 Agent 完成 Bootstrap
187
196
 
@@ -200,6 +209,8 @@ ec agent ready helper.agentid.pub
200
209
  3. 为每位 Owner 创建全新的主会话。
201
210
  4. 向全部 Owner 发送正式欢迎消息,并为各 Owner 绑定对应的新会话。
202
211
 
212
+ 新主会话会在文件存在时自动注入 `$PERSONAL_DIR/persona.md`。新 Agent 首次回复前,应先阅读其中的 `## Bootstrap 交接`,沿用已确认的职责和约定;仅对标注为未执行的事项按正常权限继续沟通,不把它们误称为已经完成。这个方案由新 Agent 在 `ready` 前写入摘要,不是系统自动复制或总结旧 Bootstrap 历史,会话切换机制保持不变。
213
+
203
214
  新 Agent 在 `ready` 成功后不要从旧 Bootstrap 上下文再输出一段完成说明,也不要继续处理先前夹带的普通任务;后续工作从新主会话开始。
204
215
 
205
216
  ## 7. 创建者验收
@@ -223,12 +234,13 @@ Bootstrap 首条消息只发送给 `owners[0]`;`ready` 成功后,正式欢
223
234
 
224
235
  - `lifecycle` 为 `active`;`ec agent show` 的 `lifecycle` 字段也必须为 `active`。
225
236
  - `agent.md` 已成功签名发布。
226
- - 本地与远端 `agent.md` 的 `name`、`description`、`tags` 与 Owner 确认值一致;创建流程 skill 必须在发布后复读核验,不以初始上传响应代替。
237
+ - 本地与远端 `agent.md` 的 `name`、`description`、`tags` 与 Owner 明确提供或已认可的值一致;创建流程 skill 必须在发布后复读核验,不以初始上传响应代替。
227
238
  - 如果 Owner 选择提供头像,远端 `agent.md` 的 `avatar` 已更新并发布;未提供时跳过,已明确提供但规范化或上传失败时创建进入可恢复失败状态。
228
- - `personal/welcome.md` 是当前 Bootstrap 对话最后展示并经 Owner 确认的全文,未确认文案没有另存草稿。
239
+ - 对话式 Bootstrap:`personal/welcome.md` 已保存 Agent 自主准备的完整正式文案;Owner 未被要求起草、审稿或确认,投递使用已保存正文。
240
+ - 对话式 Bootstrap:`personal/persona.md` 包含忠实整理明确职责和约定的 `## Bootstrap 交接` 摘要;待继续事项标注“未执行”,未确认的设定推断、完整历史和临时运行状态没有写入。
229
241
  - 系统已创建新的主会话并发送正式欢迎消息。
230
242
  - 新 Agent 能在新主会话中处理普通任务。
231
243
 
232
- 如果仍为 `created`,检查 channel 是否已能联系 Owner,必要时由 Owner 主动发送首条消息。如果仍为 `bootstrapping`,回到新 Agent 的 Bootstrap 会话完成字段确认、名片发布和 `ready`,不要由创建者直接绕过引导。
244
+ 如果仍为 `created`,检查 channel 是否已能联系 Owner,必要时由 Owner 主动发送首条消息。如果仍为 `bootstrapping`,回到新 Agent 的 Bootstrap 会话补齐缺失设定、名片发布和 `ready`,不要由创建者直接绕过引导。
233
245
 
234
- 失败重试前必须先执行状态检查:若名片已发布且 welcome 已保存,只续做 `ready`;若 welcome 尚未确认保存,则由新 Agent 在自己的 Bootstrap 对话中补做全文生成和确认。不要重复创建、改名片或发布。仅在确认创建记录不存在且名片未发布时,才重新发起创建。
246
+ 失败重试前必须先执行状态检查:若最终名片已发布且 welcome 已保存,对话式 Bootstrap 还需核对交接内容已保存,再续做 `ready`;内容缺失时只补齐,不重复确认已明确的输入或已认可的设定。若 welcome 未保存,新 Agent 自主生成并保存,不请求 Owner 确认。不要重复创建、改名片或发布;本地名片存在不等于已成功发布。仅在确认创建记录不存在且名片未发布时,才重新发起创建。
@@ -6,8 +6,23 @@
6
6
 
7
7
  ```bash
8
8
  # 列出所有 agent
9
- ec agent list
9
+ ec agent list [--format json]
10
+ ```
11
+
12
+ 表格列含义:
10
13
 
14
+ | 列 | 说明 |
15
+ |---|---|
16
+ | 名称 | agent.md 中的显示名(displayName),回退到 aid |
17
+ | Personal名 | persona.md 中 `我是/我叫` 提取的简称;无 persona 时显示 `—` |
18
+ | 状态 | 运行状态;lifecycle 非 `active` 时追加括号标注,如 `running (bootstrapping)` |
19
+ | 渠道 | 已订阅的 AUN channel 列表 |
20
+ | 项目 | 关联项目目录名(basename) |
21
+ | 基座 | 使用的 baseagent(claude / codex / gemini 等) |
22
+ | 模型 | 当前加载的具体模型标识(如 `opus`、`deepseek-v4-pro`) |
23
+ | 最后活跃 | 最近一次会话活动时间;daemon 重启后以 `aun.db-wal` mtime 作为 fallback |
24
+
25
+ ```bash
11
26
  # 查看 agent 详情(身份 + 配置 + 连接 + 会话 + 路径)
12
27
  ec agent show <aid>
13
28
  # 简写,等价于 show
@@ -46,12 +61,12 @@ ec agent persona show
46
61
  ec agent persona --text <text>
47
62
  ec agent persona --file <path>
48
63
 
49
- # 读取或保存 Bootstrap 中经 Owner 确认的 welcome 文案
64
+ # 读取或保存 Bootstrap 中 Agent 自主准备的 welcome 文案
50
65
  ec agent welcome show
51
66
  ec agent welcome --text '<完整 Markdown 文案>'
52
67
 
53
68
  # 修改 agent.md 显示名称
54
- ec agent rename <aid> "<name>"
69
+ ec agent rename <aid> '<name>'
55
70
 
56
71
  # 标记 bootstrap 完成,进入 active 状态
57
72
  ec agent ready <aid>
@@ -79,10 +94,10 @@ ec agent delete <aid> [--purge]
79
94
  - `--initialize` 要求显式提供 `--name`、`--description`、`--tags` 和 Owner;它不从项目元数据推断名片,成功条件是目标 Agent 已进入 `active`。`--initialize` 自动包含 `--non-interactive`,不需要同时填写后者。
80
95
  - `--persona-file` / `--persona-text` 可选;两者互斥。初始化失败可用 `ec agent initialize <aid> --resume` 按原计划恢复,不能用普通 `new --force` 覆盖。
81
96
  - `ec agent persona show` 读取当前 Agent 的 `$PERSONAL_DIR/persona.md`;`--text` 或 `--file <path>` 可由当前 Agent 的 owner 写入。文件内容限制为 UTF-8 文本,`--file` 仅接受 `.md`/`.txt`。
82
- - `ec agent welcome --text <text>` 只用于 Bootstrap 中 Owner 已明确确认的完整文案;命令固定写入当前 Agent 的 `$PERSONAL_DIR/welcome.md`,不接受自定义路径,也不保存未确认草稿。`welcome show` 读取该文件。
97
+ - `ec agent welcome --text <text>` 用于保存 Bootstrap 中 Agent 自主准备的完整正式文案,不要求 Owner 起草、审稿或确认;命令固定写入当前 Agent 的 `$PERSONAL_DIR/welcome.md`,不接受自定义路径。`welcome show` 读取该文件。
83
98
  - welcome 托管写入要求当前 Agent 私聊 Owner;admin 仅可读。模板上限 4 KiB,渲染上限 8 KiB;变量为 `agentName`、`agentDescription`、`agentAid`、`agentTags`、`agentTagsText`、`ownerName`、`ownerAid`、`channel`,支持标签循环和真值条件。写入保留原始文本,投递不附加额外文案。
84
99
  - `agent show <target-aid>` 与 `agent get <target-aid> <key>` 的跨 Agent 读取对 owner/admin 开放,但普通 Agent 角色只获得安全摘要;敏感配置值和物理路径仅对 DaemonOwner 返回原值。跨 Agent 写入、启停、删除和 reload 仍遵循各自的目标与 DaemonOwner 权限边界。
85
- - Agent 配置可包含 `fullaccess.enabled`(默认关闭),仅可通过已认证的 EC Web Agent 设置修改。实际运行时,只有同时属于该 Agent Owner 和当前 daemon Owner 的直接私聊任务才会按调用使用宿主级 fullaccess;群聊、普通 Owner、跨 Agent 和 Trigger 不会因该开关自动提权。`/fa`、`/fullaccess` 和 Fullaccess Trigger 是内置能力,仍分别要求经过认证的 daemon Owner / 持久授权来源。
100
+ - Agent 配置可包含 `fullaccess.enabled`(默认关闭)。可通过已认证的 EC Web Agent 设置修改;也可通过 Agent AID 的 `name: "agent"` Menu 管理自身,或通过 daemon Control AID 的同名 Menu 指定 `args.aid` 管理目标 Agent。Menu 写入要求请求者同时是目标 Agent Owner 与 daemon Owner;实际运行时也只有满足双 Owner 条件的直接私聊任务才会按调用使用宿主级 fullaccess。群聊、普通 Owner、跨 Agent 和 Trigger 不会因该开关自动提权。`/fa`、`/fullaccess` 和 Fullaccess Trigger 是内置能力,仍分别要求经过认证的 daemon Owner / 持久授权来源。
86
101
 
87
102
  ## 创建 Agent
88
103
 
@@ -92,7 +107,7 @@ ec agent delete <aid> [--purge]
92
107
 
93
108
  ## Bootstrap 通知状态与重试
94
109
 
95
- 交互式 Bootstrap 的 `ready` 要求有效的 `personal/welcome.md`:缺失返回 `WELCOME_REQUIRED`,损坏返回 `WELCOME_INVALID`,均保持 Bootstrap 状态。已准备 completion outbox 后修改文案返回 `WELCOME_FROZEN`。已有 active Agent 和独立的 `--initialize` 流程不需要补做此确认。
110
+ 交互式 Bootstrap 的 `ready` 要求有效的 `personal/welcome.md`:缺失返回 `WELCOME_REQUIRED`,损坏返回 `WELCOME_INVALID`,均保持 Bootstrap 状态。已准备 completion outbox 后修改文案返回 `WELCOME_FROZEN`。已有 active Agent 和独立的 `--initialize` 流程不需要补做此准备步骤。
96
111
 
97
112
  `ready` 成功表示 Agent 已进入 `active`;欢迎消息单独返回在 `welcome.deliveries`,每位 Owner 一项:
98
113
 
@@ -58,7 +58,7 @@ ec config set configSnapshots false --process
58
58
 
59
59
  ```bash
60
60
  # 立即创建快照(与当前版本比对,不一致才建;--full 强制新全量)(仅人)
61
- ec config snapshot [--full] [--desc "说明"]
61
+ ec config snapshot [--full] [--desc '<说明>']
62
62
 
63
63
  # 列出快照版本(版本号/类型/触发/时间/说明)
64
64
  ec config history
@@ -221,7 +221,7 @@ Menu 批量请求遇到真实权限拒绝仍整体拒绝并停止执行,不会
221
221
  `role` 由角色分配服务维护;`permissionMode` 仅在角色策略中维护
222
222
  - **兼容字段**:`enable_rich_content` 仍可读取旧值,但已废弃且不再产生运行时效果
223
223
  - **群规则策略**:`groupRules.mode` 仅当前 Agent 的实际 owner 可 set/unset;DaemonOwner 不继承群或 relation 写权限,其他角色可读取当前 relation 的有效值
224
- - **Agent fullaccess 策略**:Agent 配置中的 `fullaccess.enabled` 缺失时关闭,仅可通过已认证的 EC Web Agent 设置修改;CLI、普通 Menu 和托管任务的 set/unset 均拒绝。双 Owner(Agent Owner + daemon Owner)条件在实际私聊任务执行时校验。`/fa`、`/fullaccess` 和 Fullaccess Trigger 不再依赖 daemon 级开关,而由各自的 daemon Owner 鉴权与批准链控制。
224
+ - **Agent fullaccess 策略**:Agent 配置中的 `fullaccess.enabled` 缺失时关闭。已认证的 EC Web Agent 设置可修改;Menu 可经 Agent AID 管理自身,或经 daemon Control AID 以 `args.aid` 指定目标 Agent,Menu 写入要求同一请求者同时是目标 Agent Owner 与 daemon Owner。CLI 和托管任务的 set/unset 均拒绝。双 Owner(Agent Owner + daemon Owner)条件在实际私聊任务执行时再次校验。`/fa`、`/fullaccess` 和 Fullaccess Trigger 不依赖此 Agent 级开关,而由各自的 daemon Owner 鉴权与批准链控制。
225
225
  - **源码诊断白名单**:`readonlySourceDiagnostics` 默认关闭;开启后只读会话仅可在项目源码目录执行受限、可证明只读查询,配置/证书/快照/session/锁文件仍禁止访问
226
226
  - **仅人可写**:channels / owners / admins / 凭证 / aid / enabled / projects / aun / models.allowed
227
227
  - Agent 托管环境写仅人字段被拒
@@ -21,11 +21,11 @@ ec ctl name <新名称>
21
21
  ## 消息(兜底用)
22
22
 
23
23
  ```bash
24
- ec ctl send "<text>" # 主动发送文本(proactive 模式)
24
+ ec ctl send '<text>' # 主动发送文本(proactive 模式)
25
25
  ec ctl file [channel] <path> # 发送项目内文件
26
26
  ```
27
27
 
28
- > 发消息**首选 `ec msg send <self-aid> <peer-id> "<text>"`**(见 msg.md)。
28
+ > 发消息**首选 `ec msg send <self-aid> <peer-id> '<text>'`**(见 msg.md)。
29
29
  > `ec ctl send` 只在拿不到自己的 AID 时兜底——它自动继承当前会话的 AID 和对端。
30
30
 
31
31
  ## 消息队列
@@ -281,15 +281,19 @@ metadata:
281
281
  ```bash
282
282
  ec skill list [--json] # 列出所有技能:名称、来源、最终状态
283
283
  ec skill info <name> [--json] # 单技能详情:路径、描述、三级开关、生效依据
284
- ec skill create <name> [--desc "..."] [--enable] # 新建技能骨架到本机级(默认禁用)
284
+ ec skill create <name> [--desc '...'] [--enable] # 新建技能骨架到本机级(默认禁用)
285
285
  ec skill install <源> [--force] [--enable] # 安装技能(目录 / .zip / .md,默认禁用)
286
286
  ec skill remove <name> # 删除本机技能(内置技能不能删)
287
287
  ec skill enable <name> [--level agent|local]
288
288
  ec skill disable <name> [--level agent|local]
289
289
  ec skill validate <name|路径> # 校验 SKILL.md 是否合规
290
290
  ec skill where # 打印三级根目录的实际路径
291
+ ec skill refresh <aid> [--json] # 让 daemon 重建该 Agent 的技能索引(改动技能后执行)
291
292
  ```
292
293
 
294
+ 技能目录默认不监控(daemon.json `skills.watch`,默认 `false`)。改动技能后需执行
295
+ `ec skill refresh <aid>` 才会更新注入的索引;托管任务内只能刷新当前 Agent,需 owner/admin。
296
+
293
297
  ### 常见任务
294
298
 
295
299
  **装一个技能**:
@@ -534,9 +534,8 @@ ec fs cp a.agentid.pub:/x bob.agentid.pub:/refs/x # 跨主机
534
534
  ```bash
535
535
  ec fs chmod +r <AID>:<path> # 公开可读
536
536
  ec fs chmod o-r <AID>:<path> # 收回他人读权限
537
- ec fs chmod <AID>:<path> --allow-roles admin # 限定角色
537
+ ec fs chmod <AID>:<path> --allow-roles admin # 限定角色(多个角色用单引号包住逗号分隔)
538
538
  ec fs chmod <AID>:<path> --visibility public|private
539
- ec fs chmod <AID>:<path> --tags "a,b"
540
539
  ```
541
540
 
542
541
  ### 8.3 细粒度 AID 授权(setfacl)
@@ -1052,11 +1051,11 @@ alice.aid.pub:/projects/myapp/
1052
1051
  ### 17.5 命令集
1053
1052
 
1054
1053
  ```bash
1055
- ec collab snapshot create <collab-root> [--major] [-m "说明"] # 创建快照(默认自动算 bump)
1054
+ ec collab snapshot create <collab-root> [--major] [-m '<说明>'] # 创建快照(默认自动算 bump)
1056
1055
  ec collab snapshot list <collab-root> # 列出所有快照
1057
1056
  ec collab snapshot show <collab-root> <version> # 看某快照的完整 entries
1058
1057
  ec collab snapshot diff <collab-root> <vA> <vB> # 比较两快照(doc 增删 / 版本变化)
1059
- ec collab snapshot restore <collab-root> <version> [-m "说明"] # 回滚到某快照(非破坏性)
1058
+ ec collab snapshot restore <collab-root> <version> [-m '<说明>'] # 回滚到某快照(非破坏性)
1060
1059
  ec collab snapshot rm <collab-root> <version> # 删除指定快照(只删 manifest)
1061
1060
  ec collab snapshot prune <collab-root> --before <date> [--keep-last <n>] # 按时间清理
1062
1061
  ```
@@ -1109,7 +1108,7 @@ forward 历史全部保留,任何时候都能再前滚。
1109
1108
  ```
1110
1109
  ✗ 快照创建失败:快照头已被他人推进(你基于 2.3.0,当前已是 2.4.0)
1111
1110
  你的目录状态未受影响
1112
- 请重新执行: ec collab snapshot create alice.aid.pub:/projects/myapp -m "..."
1111
+ 请重新执行: ec collab snapshot create alice.aid.pub:/projects/myapp -m '...'
1113
1112
  ```
1114
1113
 
1115
1114
  ### 17.8 典型流程
@@ -53,7 +53,7 @@ ec fs umount <AID>:<path> # 卸载挂载点
53
53
  - `--max-bytes <n>`:`cat` 最大直接输出字节数,默认 1MB
54
54
  - `--head-bytes <n>`:`cat` 二进制头部字节数,默认 256
55
55
  - `--visibility public|private`:`chmod` 可见性
56
- - `--allow-roles <roles>`:`chmod` 角色约束,逗号分隔
56
+ - `--allow-roles <roles>`:`chmod` 角色约束,写法固定为单引号包住、逗号分隔,如 `--allow-roles 'owner,admin'`
57
57
  - `-m aid:<aid>:<perms>` / `-x aid:<aid>`:`setfacl` 增删 ACL
58
58
  - `--source <AID>:<path>` / `--volume <id>`:`mount` 来源
59
59
  - `--expires <time>`:`mount/token/ACL` 过期时间,Unix 秒或 ISO 日期
@@ -147,13 +147,12 @@ ec group rules coordinator.agentid.pub <group-id> get --format json
147
147
 
148
148
  ## 5. 发布协作任务
149
149
 
150
- 先在群里发送一条总任务说明,再分别 @ 负责人。跨会话发送要显式指定返回策略;发起协作通常使用 `--return none`,表示不要求把群里的回答回流到当前私聊任务:
150
+ 先在群里发送一条总任务说明,再分别 @ 负责人。跨会话发送无需指定返回策略(运行时默认 `none`,不要求把群里的回答回流到当前私聊任务):
151
151
 
152
152
  ```bash
153
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
- --return none
154
+ '[A-001] API 重构协作启动。目标:完成 /collab/A-001/ 下的实现和回归报告。负责人:implementer;复核:reviewer;截止:2026-09-30 18:00。请先回复 ACK,再按规则汇报。' \
155
+ --mention 'implementer.agentid.pub,reviewer.agentid.pub'
157
156
  ```
158
157
 
159
158
  每个任务至少包含:
@@ -226,7 +225,7 @@ ec group ack coordinator.agentid.pub <group-id> <seq>
226
225
  ```bash
227
226
  ec group send coordinator.agentid.pub <group-id> \
228
227
  "[A-001][DONE] 验收通过。交付:/collab/A-001/api-refactor.patch、/collab/A-001/regression-report.md。复核:reviewer.agentid.pub。遗留风险:无。" \
229
- --mention-all --return none
228
+ --mention-all
230
229
  ```
231
230
 
232
231
  临时群是否保留由 owner 决定。只有确认不再需要历史消息和群空间时才执行:
@@ -245,7 +244,6 @@ ec group dissolve coordinator.agentid.pub <group-id>
245
244
  | `ROLE_ACCESS_DENIED` | 当前身份不是 owner/admin,或不在目标群 | 请 owner/admin 执行管理命令;先检查 `members` |
246
245
  | `file_mismatch` | `/rules.md` 被 `ec fs cp` 修改但未发布 | 执行 `ec group rules <from> <group-id> publish` |
247
246
  | `too_large` / 编码错误 | 规则文件超过 4KB 或不是有效 UTF-8 | 缩短入口规则,详细资料移到其他群文件 |
248
- | 发送失败提示缺少 `--return` | 消息是跨会话发送 | 选择 `--return none` 或 `--return required` |
249
247
  | 成员收不到任务 | 未邀请、未入群、AID 错误或没有 @ | `members` 检查成员,重新邀请并使用 `--mention` |
250
248
 
251
249
  ## 与现有手册的关系
@@ -14,13 +14,13 @@
14
14
 
15
15
  ```bash
16
16
  # 文本(含空格/换行/特殊字符时用引号包起来;纯短词可不包,但多空格会被压成一个)
17
- ec group send <from> <group-id> "<text>" --return none|required [--encrypt]
17
+ ec group send <from> <group-id> '<text>' [--encrypt]
18
18
 
19
19
  # 文件(--as image|video|voice|file)
20
- ec group send <from> <group-id> --file <path> --return none|required [--as <type>] [--text "<说明>"]
20
+ ec group send <from> <group-id> --file <path> [--as <type>] [--text '<说明>']
21
21
 
22
22
  # 自定义 payload
23
- ec group send <from> <group-id> --payload '<json>' --return none|required
23
+ ec group send <from> <group-id> --payload '<json>'
24
24
 
25
25
  # 查询本地群历史(只读,不调用 Gateway,不推进 group pull/ack 游标)
26
26
  ec group history <from> <group-id> [--limit <N>] [--thread <main|all|id>] [--format json]
@@ -33,12 +33,12 @@ ec group ack <from> <group-id> <seq> [--app <name>]
33
33
  ```
34
34
 
35
35
  @ 成员:
36
- - `--mention <aid>` — @ 某个成员,可多次,或单个槽位用逗号分隔多个(`--mention a,b,c`),每个 aid 都过格式校验
36
+ - `--mention '<aid1>,<aid2>'` — @ 某个成员。写法固定为单引号包住、逗号分隔,可多次传入,每个 aid 都过格式校验
37
37
  - `--mention-all` — @ 所有人
38
38
 
39
39
  ```bash
40
- ec group send <from> <group-id> "@bob 看下 PR" --mention bob.agentid.pub
41
- ec group send <from> <group-id> "通知" --mention alice.agentid.pub,bob.agentid.pub
40
+ ec group send <from> <group-id> '@bob 看下 PR' --mention 'bob.agentid.pub'
41
+ ec group send <from> <group-id> '通知' --mention 'alice.agentid.pub,bob.agentid.pub'
42
42
  ```
43
43
 
44
44
  > 正文恰好以 `--` 开头:带空格的(如 `"--file 是正文"`)会被正确识别为正文;
@@ -49,7 +49,6 @@ ec group send <from> <group-id> "通知" --mention alice.agentid.pub,bob.agentid
49
49
 
50
50
  - `--no-encrypt`:强制明文,优先于 `--encrypt`
51
51
  - `--thread <id>`:指定话题 ID
52
- - `--return <none|required>`:跨会话发送必填;Trigger 任务只能使用 `none`
53
52
  - `--content-type <mime>`:覆盖文件 MIME
54
53
  - `--transcript <text>`:语音转写,仅 `--as voice`
55
54
 
@@ -89,7 +88,7 @@ owner/admin 按 Agent 管理范围查询其他群;visitor 默认拒绝。
89
88
 
90
89
  ```bash
91
90
  # 创建群
92
- ec group create <from> "<name>" [--visibility public|private] [--description "<desc>"] [--join-mode <mode>] [--group-id <aid>]
91
+ ec group create <from> '<name>' [--visibility public|private] [--description '<desc>'] [--join-mode <mode>] [--group-id <aid>]
93
92
 
94
93
  # 不指定 --group-id 时,默认名称为 g- 加五位随机数字(10000–99999)
95
94
  # 例如返回 g-12345.agentid.cn;issuer 以群服务实际返回为准
@@ -105,7 +104,7 @@ ec group list <from> [--size <N>]
105
104
  ec group info <from> <group-id>
106
105
 
107
106
  # 修改群信息
108
- ec group update <from> <group-id> [--name "<name>"] [--description "<desc>"]
107
+ ec group update <from> <group-id> [--name '<name>'] [--description '<desc>']
109
108
 
110
109
  # 解散群
111
110
  ec group dissolve <from> <group-id>
@@ -118,7 +117,7 @@ ec group resume <from> <group-id>
118
117
  ec group rules <from> <group-id>
119
118
 
120
119
  # 更新入群规则
121
- ec group rules <from> <group-id> --mode open|approval|invite_only|closed [--question "<question>"] [--max-pending <N>]
120
+ ec group rules <from> <group-id> --mode open|approval|invite_only|closed [--question '<question>'] [--max-pending <N>]
122
121
 
123
122
  # 查看已发布群规则文件 /rules.md
124
123
  ec group rules <from> <group-id> get
@@ -179,7 +178,7 @@ admin、普通成员或仅具 daemon-owner 身份者不能代替该 Agent Owner
179
178
 
180
179
  ```bash
181
180
  # 申请加入
182
- ec group join <from> <group-id> [--message "<msg>"] [--answer "<answer>"]
181
+ ec group join <from> <group-id> [--message '<msg>'] [--answer '<answer>']
183
182
 
184
183
  # 退出群
185
184
  ec group leave <from> <group-id>
@@ -212,7 +211,7 @@ ec group ban <from> <group-id> <member-aid> [--duration <seconds>]
212
211
  ec group unban <from> <group-id> <member-aid>
213
212
 
214
213
  # 屏蔽成员接收群消息;member-aid 填 from 即屏蔽自己
215
- ec group block <from> <group-id> <member-aid> [--reason "<reason>"]
214
+ ec group block <from> <group-id> <member-aid> [--reason '<reason>']
216
215
 
217
216
  # 取消屏蔽
218
217
  ec group unblock <from> <group-id> <member-aid>
@@ -8,8 +8,8 @@
8
8
  主会话写 note → pending/ → 整理会话产生正式记忆 → consolidated/ → 索引自动注入
9
9
  ```
10
10
 
11
- - **note 是原料**:主会话写,不分类、不判断层级,不进索引、不签名。
12
- - **正式记忆只由整理会话产生**:读 note 或候选记忆,判断取舍,用 `create` / `update` / `archive` 写入。程序负责签名、重建索引、落日志。
11
+ - **note 是原料**:主会话写,不分类、不判断层级,不进索引、不进台账。
12
+ - **正式记忆只由整理会话产生**:读 note 或候选记忆,判断取舍,用 `create` / `update` / `archive` 写入。程序负责登记完整性台账、重建索引、落日志。
13
13
 
14
14
  ## 三个作用域
15
15
 
@@ -68,10 +68,9 @@ $RELATIONS_DIR/<peerKey>/memory/ ← relation 作用域(note 唯一写入
68
68
  ├── pending/ # note 写入的临时记忆
69
69
  │ └── archive/ # 被 drop 的 note
70
70
  ├── processing/ # 整理中的快照
71
- ├── consolidated/ # 正式记忆(已签名)
71
+ ├── consolidated/ # 正式记忆(已登记完整性台账)
72
72
  └── archive/
73
- ├── notes/ # 整理完成的 pending 原件
74
- └── invalid/ # 验签失败或未签名的文件
73
+ └── notes/ # 整理完成的 pending 原件
75
74
 
76
75
  $PERSONAL_DIR/memory/ ← agent 作用域(结构相同,由泛化产出)
77
76
  $EVOLCORE_HOME/memory/owner/<ownerAid>/ ← owner 作用域(结构相同,由提升产出)