evolcore 0.0.35 → 0.0.37

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 +42 -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 +177 -85
  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 +115 -36
  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
@@ -1,492 +1,180 @@
1
1
  ---
2
2
  name: thread-ops
3
3
  description: >-
4
- 话题链(Thread Chain)操作规程与**话题总结**。教会 agent 如何在跨会话协作中:
5
- 发起委托(选话题、发消息、按需创建 Trigger)、处理收到的委托(判断是否回复)、
6
- 以及汇报回来源话题。也负责维护话题自身——**总结话题**(用户说"总结一下话题"
7
- "总结话题""给这个话题写个总结""summarize this topic"时:用 summary show 拿到
8
- 上次覆盖游标 coveredThroughTs,用 history --after 读增量,再 summary set 写入)、
9
- 必要时**重命名话题**(名称还是"你好""话题会话"等占位词时)。
10
- 核心是时序语义:发出即结束 turn、Trigger 是唤醒信号不是执行脚本、
11
- 决策权归 agent 自己、无等齐原语靠主动查询合并。
12
- 适用场景:需要另一个 agent 输入 / 收到任务委托需代为联系第三方("你帮我问一下 X"、
13
- "转告 Y"、"去查 Z 那边的情况")/ 作为中间人需要向当前对端以外转发请求或查询 /
14
- 需要总结 / 整理当前话题的场景。
4
+ 话题链(Thread Chain)与话题总结。
5
+ **以下两种消息必须先加载本 skill 再处理**:① 消息开头是
6
+ 「‹【跨话题上下文】来源话题:…›」(你跨话题发出的消息,对端回复了);
7
+ ② 消息开头是「‹【跨话题复查】来源话题:…›」(复查通知)。
8
+ 也用于:要联系当前对端/当前群以外的对象("帮我问一下 X"、"转告 Y"、"去查 Z")、
9
+ 处理收到的委托、汇报回来源话题。
10
+ 用户说"总结一下话题""总结话题""更新一下摘要""summarize this topic"时同样加载。
15
11
  license: MIT
16
12
  ---
17
13
 
18
14
  # `thread-ops` 操作规程
19
15
 
20
- ## 一、Skill 的定位
16
+ **核心价值是时序语义,不是命令清单**:`--help` 讲参数,本 skill 讲什么时候用、返回后会发生什么、下一步做什么。
21
17
 
22
- 本 skill 是**操作性 skill**,面向 agent 在跨会话协作中使用。
18
+ ## 一、必须加载的时机
23
19
 
24
- **核心价值:教会 agent 话题链的时序语义,而非命令清单。**
20
+ **两种唤醒消息**(开头就是判据,逐字比对):
25
21
 
26
- - `ec thread list --help` 告诉 agent"这条命令有哪些参数"
27
- - 本 skill 告诉 agent"什么时候用这条命令、用完后会发生什么、下一步该做什么"
22
+ 1. `‹【跨话题上下文】来源话题:<id> · 对端:<AID> · 发送于:… · 复查:<trig…|无> → self:…›`
23
+ ——你此前跨话题发出的消息,对端回复了。**有 ⚠️ 空洞提示就先回查来源话题再转达**。
24
+ 2. `‹【跨话题复查】来源话题:<id> · 对端:<AID> · 发送于:… · 复查:<trig…> → self:…›`
25
+ ——周期复查到期,你在目标话题里被唤醒。
28
26
 
29
- 本 skill 不添加工具,不改变系统权限。
27
+ **业务动作**:要联系当前对端/当前群以外的对象;受人所托去问第三方;要汇报回来源话题;并发问多方。
30
28
 
31
- ---
32
-
33
- ## 二、加载判据:何时必须加载本 skill
34
-
35
- ### 必须加载(L2 跨 agent 委派)
36
-
37
- 以下任一条件成立时加载:
38
-
39
- 1. **收到话题链消息**:上下文注入了"当前任务来源 = 话题 X / 对端 Y"
40
- 2. **收到任务委托、需要转去联系第三方**:对方(人或 agent)让你去问另一个人或 agent,完成任务的下一步需要联系当前对端以外的对象——先加载本 skill,再按流程 A 操作
41
- 3. **需要给当前对端以外的对象发消息**:只凭当前会话直发会被拒绝,必须走话题
42
- 4. **需要委托另一个 agent**:判断当前任务需要对方的输入
43
- 5. **并发问多方**:同时向 C 和 D 发出委托,等两个都回后再汇总
44
- 6. **要汇报回来源话题**:任务完成,需要回复到来源话题
45
-
46
- > 判据 2 和 3 不依赖是否已有话题链注入:只要任务需要联系当前对端/当前群以外的对象,就直接按下方流程 A 操作。
47
-
48
- **为什么必须加载 skill(反直觉的关键点)**:
49
-
50
- - **发出即结束**(反直觉):`ec msg send --thread T2` 返回后,当前 turn 立刻终止,不阻塞等待
51
- - **Trigger 是唤醒信号,不是执行脚本**(新概念):到期时提醒检查对端是否回复,不保证对端已回、不强制回复、不指示执行任何操作;收到 Trigger 通知后,agent 自主决定下一步
52
- - **决策权在自己**(与 handoff 完全相反):要不要回、何时回、回什么,完全自主
53
- - **无"等齐"原语**(分支合并的核心):想合并多方回复,就在各自 turn 里主动用 `ec thread history` 查另一话题
29
+ **不需要**:改名/改标签/改状态、读历史、看摘要。这些是纯查询,`--help` 足够。
54
30
 
55
- ### 不需要 skill(L0/L1 本地操作)
31
+ ### 四条反直觉的语义
56
32
 
57
- **L0 — 本会话元数据管理**:改当前话题名/标签/状态,查看当前话题元数据。命令自解释,`--help` 足够。
33
+ - **发出即结束**:`ec msg send --thread T2` 返回后当前 turn 立刻终止,不阻塞等回复。
34
+ - **复查是唤醒信号,不是执行脚本**:到期只投递一条通知,不保证对端已回,不携带操作命令。
35
+ - **决策权在自己**:要不要回、何时回、回什么,全自主。
36
+ - **无"等齐"原语**:想等多方回复,就在各自 turn 里用 `ec thread history` 主动读另一话题。
58
37
 
59
- **L1 — 跨会话查询**:列出与某对端的话题,读某话题的历史,查看话题摘要。纯查询,无时序复杂度。
60
-
61
- ---
62
-
63
- ## 三、核心概念速查
38
+ ## 二、核心概念
64
39
 
65
40
  | 概念 | 定义 |
66
41
  |---|---|
67
- | 话题(topic/thread) | agent 与对端之间一条独立的讨论线 |
68
- | threadId | 话题的跨端统一标识符,格式 `thread-<ms>-<seq4>-<rand4>` |
69
- | 主会话 | threadId 为空的会话,每对 agent–对端关系各有一个 |
70
- | 话题的双端结构 | 同一个 threadId,在通信双方各有一个本地会话(S1A / S1B) |
71
- | 跨话题路由 | 在会话 A 上调用 `send --thread T`,消息实际从话题 T 的会话发出 |
72
- | 跨话题 Trigger | 发消息后可选创建,N 分钟后唤醒 agent 检查对端是否回复 |
73
- | 基础传播单元 | 四条消息:A 委托 B → B 问 C → C 回 B → B 回 A |
42
+ | 话题 | agent 与对端之间一条独立的讨论线;消息必须发在某个话题上 |
43
+ | threadId | 跨端统一标识。话题 `thread-<ms>-<seq4>-<rand4>`;主话题 `main:<aidA>:<aidB>`(两种顺序等价,输出为字典序规范形态) |
44
+ | 双端结构 | 同一 threadId 在双方各有一个本地会话 |
45
+ | 跨话题路由 | 在会话 A 上 `send --thread T`,消息实际从话题 T 的会话发出 |
46
+ | 跨话题复查 | `--check-every` 创建;每 N 分钟向**目标话题**投递通知,不新建会话 |
47
+ | 来源/目标话题 | 来源 = 发起委托处(对端 A);目标 = 被委托执行处(对端 C)。复查通知投递在目标话题 |
48
+ | 基础传播单元 | A 委托 B → B 问 C → C 回 B → B 回 A |
74
49
 
75
- ---
50
+ **两个写法陷阱**:
51
+ - `ec thread list` 打印的 `<AID>/thread-…` 和主会话的 `/main` 都是**展示形式**,不能直接当 `--thread` 值。
52
+ `--thread` 必须是**裸 threadId**;主会话没有可用 threadId,要跨话题就得先 `ec thread create`。
53
+ - 话题名是本端概念,两端可能不同;threadId 才是统一标识。
76
54
 
77
- ## 四、使用流程
55
+ ## 三、流程
78
56
 
79
- ### 流程 0:发现对端和话题(标准起点)
57
+ ### A. 发起跨话题委托(核心)
80
58
 
81
- **场景**:需要查看某个 agent 的话题列表,或生成工作报告。
59
+ 场景:B 在话题 T1(与 A 对话)中,判断需要问 C;或**在群里被要求私聊某位群成员**(群不是一对一关系,必须新建话题)。
82
60
 
83
61
  ```bash
84
- # 第一步:找到所有本机 agent
85
- ec agent list
86
-
87
- # 第二步:找到某 agent 的所有真实对端(过滤内部 daemon 话题)
88
- ec thread peers --self <selfAid>
89
-
90
- # 第三步:列出与某对端的所有话题(含消息统计和摘要)
91
- ec thread list <peer> --self <selfAid>
92
- # 输出包含:话题名、创建/活跃时间、消息(24h/总计)、最后消息截断、摘要
93
-
94
- # 第四步:翻页(页脚自动给出完整翻页命令)
95
- ec thread list <peer> --self <selfAid> --page 2 --limit 10 --sort recent
62
+ # 1. 找或建与 C 的话题
63
+ ec thread list <C的AID>
64
+ ec thread create <C的AID> --name '项目进度查询' # 没有合适话题时;返回裸 threadId
96
65
 
97
- # 第五步:查看某话题的近期消息
98
- ec thread history <peer>/<threadId> --self <selfAid> --limit 20
66
+ # 2. 发消息,--check-every 一步搞定复查(跨话题必填:5m / 30m / 2h / 1d)
67
+ ec msg send '项目当前进度如何?' --thread <裸threadId> --check-every 5m
99
68
 
100
- # 按时间范围过滤(如查最近一周)
101
- SINCE=$(python3 -c "import time; print(int((time.time()-7*86400)*1000))")
102
- ec thread history <peer>/<threadId> --self <selfAid> --after $SINCE --limit 100
69
+ # 3. 本 turn 结束,不阻塞
103
70
  ```
104
71
 
105
- ---
72
+ - 不手写 `from/to`,由话题推断。
73
+ - 副作用:本端写 thread-inbox + 创建复查。回执里 `trigger_id` 要记住,后面靠它取消。
74
+ - 每 5 分钟向 T2 投递一条复查通知;C 若已回复,通知到达时 T2 上下文里就有 C 的回复。
106
75
 
107
- ### 流程 A:发起跨会话委托(核心)
76
+ ### B. 处理收到的委托
108
77
 
109
- **场景**:B 在话题 T1(与 A 对话)中,判断需要问 C。
78
+ 你收到的是**普通消息**,不带话题链注入(上下文只注入在发送方的目标话题里)。处理完自行决定回不回:
110
79
 
111
80
  ```bash
112
- # 步骤 1:找到或新建与 C 的话题
113
- ec thread list <C的AID>
114
- # 如果有合适的话题(如 T2),记下 threadId
115
- # 如果没有,新建:
116
- ec thread create <C的AID> --name '项目进度查询'
117
- # 返回:{ threadId: "thread-xxx", ... }
118
-
119
- # 步骤 2:发消息(--check-every 一步搞定复查)
120
- ec msg send '项目当前进度如何?' --thread <T2的threadId> --check-every 5m
121
- # --check-every 跨话题时必填(如 5m / 30m / 2h),周期唤醒直到显式 cancel
122
- # 返回:{ message_id: "m-yyy", ... }
123
- # 副作用:本端写入 thread-inbox + 创建周期复查 Trigger(kind=thread-check)
124
-
125
- # 步骤 3:当前 turn 结束
126
- # B 在 T1 的这个 turn 到此为止,不阻塞等待 C 的回复
81
+ ec msg send '进度 70%,预计下周完成' # 不带 --thread,发在当前话题
127
82
  ```
128
83
 
129
- **关键时序**:
130
- - `ec msg send --thread T2 --check-every 5m` 返回后,当前 turn **立刻结束**
131
- - 消息从 B 与 C 的话题 T2 发出到达 C
132
- - 5 分钟后,Trigger 唤醒 T2 的新 turn(在 B 侧)
133
- - 如果 C 在此之前已回复,新 turn 的上下文里会包含 C 的回复
134
-
135
- ---
136
-
137
- ### 流程 B:处理收到的委托
84
+ 同话题追问也不带 `--thread`,同样不建复查。
138
85
 
139
- **场景**:C 收到 B 的消息,当前会话是 B 与 C 的话题 T2(C 侧)。
86
+ ### C. 被唤醒后怎么决策(两种唤醒共用)
140
87
 
141
- 上下文注入示例(由渲染层自动添加):
142
- ```
143
- 当前任务来源:话题 thread-xxx,对端 b.agentid.cn
144
- ```
88
+ **目标话题不用查**——对话就在上下文里。只需回查来源话题的空洞期:
145
89
 
146
90
  ```bash
147
- # 步骤 1:处理任务(C 执行相应操作)
148
-
149
- # 步骤 2:决定是否回复
150
- # 情况 A:直接回复 B(在当前话题 T2 上)
151
- ec msg send '进度 70%,预计下周完成'
152
- # 不带 --thread,消息发在当前话题上
153
- # 托管会话中不需要指定 from 和 to,系统推断
154
-
155
- # 情况 B:不回复,什么都不做,turn 结束
91
+ ec thread history <来源peer>/<来源threadId> --after <发送于的时间戳>
156
92
  ```
157
93
 
158
- **关键点**:要不要回复完全由 C 自己决定,系统不强制。
159
-
160
- ---
161
-
162
- ### 流程 C:Trigger 到期后的处理
163
-
164
- **场景**:5 分钟后,Trigger 唤醒 B 在 T2 的新 turn。
94
+ 按顺序判断:
95
+ 1. 来源话题有"取消任务"等新指示?→ 按新指示办,再决定下一步。
96
+ 2. 对端已给最终答案?→ **删除复查 + 回来源话题汇报**。
97
+ 3. 对端还在处理?→ 调整周期,或什么都不做。
165
98
 
166
99
  ```bash
167
- # 步骤 1:检查 C 是否已回复
168
- ec thread history current --limit 10
169
- # 或从上下文直接判断
170
-
171
- # 步骤 2A:C 已回复 → 处理回复,汇报回 A
172
- ec msg send 'C 回复:进度 70%' --thread <T1的threadId> --check-every 30m
173
- # 汇报回 A 也是跨话题发送,同样必填 --check-every
174
-
175
- # 步骤 2B:C 还没回 → 决定下一步
176
- # 选项 1:继续等 → 什么都不做,原 Trigger 下个周期会再次唤醒
177
- # (如需调整频率:ec trigger update <triggerId> --every 5m)
178
- # 选项 2:放弃等待,直接回 A
179
- ec msg send 'C 暂无回复' --thread <T1的threadId> --check-every 30m
180
-
181
- # 选项 3:什么都不做,turn 结束
100
+ ec trigger delete <trig_id> # 完成:删除,不留残留
101
+ ec trigger update <trig_id> --every 30m # 放宽
102
+ ec msg send 'C 回复:进度 70%' --thread <来源threadId> --check-every 30m # 汇报(跨话题,复查必填)
182
103
  ```
183
104
 
184
- **关键点**:Trigger 只是唤醒信号,不携带执行指令,不保证 C 已回复。
185
-
186
- ---
187
-
188
- ### 流程 D:并发委托多方
105
+ **关键点**:
106
+ - **结束复查一律用 `ec trigger delete`,不要用 `ec trigger cancel`**:cancel 只是 disable,定义和调度状态仍留在磁盘上,积多了就是一堆永不触发的死 Trigger。delete 会清掉定时器、事件订阅、调度游标和 limit 状态。
107
+ - Trigger 只认 **id**(`trig_…`),用名称会报 not found。
108
+ - **收到复查通知后不要再用 `--check-every` 发新消息**——那会套出第二个复查,越滚越多。要延长就 `ec trigger update`。
109
+ - 信封头 `复查:无` = 复查没建成,不会有周期提醒;需要跟进就自己 `ec trigger create`。
110
+ - 发送失败(暂时性)→ 保留复查下次再试;(永久性,如拉黑)→ 删除复查并回来源话题说明联系不上。
189
111
 
190
- **场景**:B 需要同时问 C 和 D,等两个都回后再汇总。
112
+ ### D. 并发委托多方
191
113
 
192
114
  ```bash
193
- # 步骤 1:同时发出两条委托,各自创建周期复查 Trigger(--check-every 一步搞定)
194
115
  ec msg send '技术评估' --thread <T2> --check-every 10m
195
116
  ec msg send '产品评估' --thread <T3> --check-every 10m
196
- # turn 结束
197
-
198
- # 10 分钟后,T2 和 T3 各自触发新 turn
199
-
200
- # 在 T2 的 turn 里(C 已回复):
201
- # 检查 D 是否也回了
202
- ec thread history <D的AID>/<T3> --limit 5
203
- # 如果 D 还没回,turn 结束,等 T3 的 turn
204
-
205
- # 在 T3 的 turn 里(D 已回复):
206
- # 检查 C 是否也回了
207
- ec thread history <C的AID>/<T2> --limit 5
208
- # C 也回了,合并结果
209
- ec msg send '综合评估:技术……产品……' --thread <T1> --check-every 30m
210
- ```
211
-
212
- **关键点**:没有"等齐"原语。想合并就在后到的 turn 里主动读另一话题,手动判断是否齐全。
213
-
214
- ---
215
-
216
- ### 流程 E:追问(同话题多轮)
217
-
218
- **场景**:C 第一次回复不够详细,B 继续追问。
219
-
220
- ```bash
221
- # S2B 收到 C 的第一次回复:"卡在 Redis 并发问题"
222
- # B 判断需要更多细节
223
-
224
- ec msg send 'Redis 并发问题影响范围多大?'
225
- # 不带 --thread,继续在当前话题上
226
- # 同话题追问无需 --check-every(不跨话题,不创建复查 Trigger)
227
-
228
- # C 再次回复后,触发新 turn
229
- # B 整合两轮对话,回 A
230
- ec msg send 'C 反馈:Redis 问题影响……' --thread <T1>
117
+ # 之后在每个先到的 turn 里,用 ec thread history 读另一话题,齐了再合并回 T1
118
+ ec msg send '综合评估:……' --thread <T1> --check-every 30m
231
119
  ```
232
120
 
233
- ---
234
-
235
- ### 流程 F:话题历史查询
121
+ ### E. 查询与维护命令
236
122
 
237
123
  ```bash
238
- # 查看当前话题
239
- ec thread show current
240
-
241
- # 列出与某对端的所有话题
242
- ec thread list <peer-AID>
243
-
244
- # 读当前话题的历史
245
- ec thread history current --limit 20
246
-
247
- # 读另一个话题的历史(跨话题只读)
248
- ec thread history <peer>/<threadId> --limit 50
249
-
250
- # 按时间过滤(查看空洞期消息)
251
- ec thread history <peer>/<threadId> --after <timestamp>
252
- ```
253
-
254
- ---
255
-
256
- ### 流程 G:修改话题属性
257
-
258
- ```bash
259
- ec thread rename current '新名称'
260
- ec thread label current '开发'
261
- ec thread status current in_progress
262
- # 状态值:pending | in_progress | completed | archived
263
- ```
264
-
265
- ---
266
-
267
- ### 流程 H:Trigger 操作(跨话题跟进场景)
268
-
269
- #### 场景一:对端回复时的 Trigger 决策
270
-
271
- 当你在某个话题被对端唤醒,跨会话上下文注入里会带上关联的复查 Trigger:
272
-
273
- ```
274
- ‹跨会话上下文 · 来源话题:thread-T1 · 对端:alice.agentid.cn · 发送于:...›
275
- 🔔 复查 Trigger:trig_1791765199642_5371c8ff(尚未触发/待处理)
276
- 【原消息内容】
277
- ```
278
-
279
- **操作流程**:
280
-
281
- 1. **判断对端回复是否完整**:
282
- - 如果对端已给最终答案 → 继续第 2 步
283
- - 如果对端还在处理中 → 保留 trigger,本次不操作
284
-
285
- 2. **检查来源话题是否有新指示**(如果系统提示有空洞期消息):
286
- ```bash
287
- ec thread history <来源peer>/<来源threadId> --after <timestamp>
288
- ```
289
- - 如果来源话题有"取消任务"等新指示 → 处理后取消 trigger
290
- - 如果来源话题无新消息 → 继续第 3 步
291
-
292
- 3. **决定 Trigger 操作**:
293
- - **任务完成** → 取消 trigger(用 **id**,即上面注入的 `trig_…`;用名称会报 trigger not found):
294
- ```bash
295
- ec trigger cancel trig_1791765199642_5371c8ff
296
- ```
297
-
298
- - **需要加快跟进** → 调整周期:
299
- ```bash
300
- ec trigger update trig_1791765199642_5371c8ff --every 30m
301
- ```
302
-
303
- #### 场景二:Trigger 触发时的主动复查
304
-
305
- 当 trigger 定期触发时,你会被唤醒并看到 trigger 的 prompt(信封头标注 `Trigger 复查 · 话题:... ← 来源:...`):
306
-
307
- ```
308
- 【Trigger 复查】话题 thread-T2(对端 C)
309
- 这是周期复查:每 5m 唤醒一次,直到你显式结束它。
310
-
311
- 请检查该话题的最新进度,根据情况:继续等待、调整周期(ec trigger update trig_1791765199642_5371c8ff --every <时长>)或结束复查(ec trigger cancel trig_1791765199642_5371c8ff)。
312
-
313
- 参考命令:
314
- ec thread history <C的AID>/thread-T2 --limit 10
315
- ec thread history <来源peer>/thread-T1 --after <timestamp>
316
- ec trigger cancel trig_1791765199642_5371c8ff
317
- ec trigger update trig_1791765199642_5371c8ff --every <时长>
318
- Trigger id:trig_1791765199642_5371c8ff
319
- Trigger 名称:check-<目标threadId>-from-<来源threadId>-<唯一后缀>
124
+ ec thread peers --self <selfAid> # 有哪些真实对端
125
+ ec thread list <peer> --self <selfAid> [--page 2] # 话题列表(含摘要、消息数)
126
+ ec thread history <threadId> --limit 20 # 读历史
127
+ ec thread history <threadId> --after <ts> --limit 50 # 只读增量(空洞期)
128
+ ec thread rename|label|status current '…'|'…'|in_progress # 状态:pending|in_progress|completed|archived
320
129
  ```
321
130
 
322
- **操作流程**:
131
+ ### F. 总结话题
323
132
 
324
- 1. **检查目标话题是否有新消息**:
325
- ```bash
326
- ec thread history <目标peer>/<目标threadId> --limit 10
327
- ```
133
+ 触发词:"总结一下话题""总结话题""给这个话题写个总结""更新一下摘要""summarize this topic"——**直接执行,不要反问总结什么**。
328
134
 
329
- 2. **检查来源话题是否有新指示**:
330
- ```bash
331
- ec thread history <来源peer>/<来源threadId> --after <上次检查时间>
332
- ```
333
-
334
- 3. **根据检查结果决策**:
335
- - **目标话题有回复** → 处理回复,判断是否取消 trigger(同场景一)
336
- - **来源话题有新指示**(如"别管了")→ 通知目标话题,取消 trigger
337
- - **两边都无更新** → 保留 trigger 继续等待
338
- - **发现会话不可用** → 回复来源话题说联系不上,取消 trigger
339
-
340
- 4. **错误处理**:
341
- - 发送消息失败(暂时性)→ 保留 trigger,下次再试
342
- - 发送消息失败(永久性,如拉黑)→ 取消 trigger,回复来源话题
343
-
344
- ---
345
-
346
- ### 流程 I:总结话题("总结一下话题")
347
-
348
- **触发词**:用户说"总结一下话题""总结话题""给这个话题写个总结""这个话题总结一下"
349
- "更新一下摘要""summarize this topic" 时,**直接执行下面的序列**,不要反问"总结什么"。
350
-
351
- **核心两步**:① 拿到"上次总结覆盖到哪"→ ② 读那之后的增量 → ③ 写新摘要。
352
- `--name` **必填**:总结时往往正好把主题想清楚,一次命令同时写摘要 + 改标题;
353
- 确实要保留原标题时显式传 `--name -`(显式表达意图,比省略更难被忽略)。
354
- `summary show` 会打印 `coveredThroughTs`(覆盖游标),它就是你读增量的起点。
355
- `summary set` 会自动把游标推进到当时话题的最新一条,你不用管。
356
-
357
- **情形 A:在当前话题内总结**(对话就在上下文里,不用读历史)
135
+ 核心:**先拿覆盖游标 → 读增量 → 再写**。`summary set` 会把游标推进到当时最新一条,所以**必须先读完增量**,否则被跳过的消息下次不会再返回。
358
136
 
359
137
  ```bash
360
- # 1. 看上次摘要内容和覆盖游标(没有摘要时输出"(暂无 summary)")
138
+ # 当前话题内总结(增量就是本轮对话,不用读历史)
361
139
  ec thread summary show current
140
+ ec thread summary set current '<100字以内摘要>' --name '动词短语描述的核心动作'
141
+ # --name 必填;不想改名显式传 --name -
142
+ # 多人协作同一话题时加 --if-rev <上一步的rev> 防覆盖
362
143
 
363
- # 2. 自己写摘要(100 字以内,见下方规范)。
364
- # 增量就是本轮对话,无需再读历史;游标自动推进。
365
- # --name 必填:一次写完摘要 + 标题。不想改名就显式传 `-`。
366
- ec thread summary set current '写好的摘要内容' --name '动词短语描述的核心动作'
367
- ec thread summary set current '写好的摘要内容' --name - # 保持原话题名
368
- # 多人协作同一话题时带 CAS 防覆盖
369
- ec thread summary set current '写好的摘要内容' --name '标题' --if-rev <步骤1的rev>
370
- ```
371
-
372
- **情形 B:从别的话题(或别处)总结某话题**(需要读增量)
373
-
374
- ```bash
375
- # 1. 看上次摘要 + 覆盖游标
376
- ec thread summary show <peer>/<threadId>
377
- # 输出中 coveredThroughTs 是上次覆盖到的时间戳;没有该字段说明是首次/旧摘要,需全量读
378
-
379
- # 2. 读游标之后的增量(首次总结则省略 --after,全量读)
380
- ec thread history <peer>/<threadId> --after <coveredThroughTs> --limit 50
381
-
382
- # 3. 增量较多时往回翻页(history 支持 before 逆序分页)
383
- ec thread history <peer>/<threadId> --before <本页最早一条的ts> --limit 50
384
- # 翻到覆盖游标之前即可停;注意 before 是闭区间,用 <最早ts - 1> 避免边界重复
385
-
386
- # 4. 读完增量后写摘要(游标自动推进到现在);--name 必填,不改名传 -
387
- ec thread summary set <peer>/<threadId> '写好的摘要内容' --name '新名称'
144
+ # 从别处总结某话题:必须读增量
145
+ ec thread summary show <threadId> # 取 coveredThroughTs
146
+ ec thread history <threadId> --after <coveredThroughTs> --limit 50 # 首次总结则省略 --after 全量读
147
+ ec thread history <threadId> --before <本页最早ts-1> --limit 50 # 增量多时往回翻(before 闭区间)
148
+ ec thread summary set <threadId> '<摘要>' --name '新名称'
388
149
  ```
389
150
 
390
- **关键约束**:`summary set` 把游标设为**当时话题的最新一条**,所以跨话题总结**必须先把增量读完再写**。
391
- 若没读完就写,游标会越过未读的消息,它们下次不会被返回(永久跳过)。
151
+ **摘要规范**:100 字以内,`[谁]做了[什么],结果[什么],遗留[什么]`;写给下次的自己看,不是给对端。
152
+ **命名规范**:≤20 字、动词短语,别用"你好""话题会话";话题方向变了就顺手改名。
392
153
 
393
- **首次总结**:`summary show` 没有 `coveredThroughTs`(本话题从未总结过,或是只带 `updatedAt` 的旧记录)。
394
- 此时从最新往回翻,一直翻到你认为已覆盖的开头,再写摘要。
154
+ **主动做(不等用户开口)**:阶段完成 → 写摘要;方向重大转向 → 改名 + 摘要;即将跨去别处 → 先记状态;转 `completed` 前 → 写最终摘要。
395
155
 
396
- **为什么用 `--after <coveredThroughTs>` 而不是拍脑袋定 `--limit`**:游标是上次真正覆盖到的位置,
397
- 从它之后读既不多读(省 token)也不少读(不漏消息)。翻页用 `--before`,天然支持"往回看"。
398
-
399
- **话题名称命名规范**(由 `summary set --name` 一并写入,不必单独跑 rename):
400
- - 名称应反映话题的核心主题,不超过20字
401
- - 避免使用创建时的随机短语("你好"、"话题会话"),改为有意义的描述
402
- - 好的名称示例:"skill 索引热更新 bug 修复"、"manifest 注入与 CLAUDE.md 冗余问题"
403
- - 名称是本端的,对端可能有不同名称,这是正常的
404
-
405
- **摘要写作规范**:
406
- - 摘要应在100字以内,概括话题的背景、进展和结果
407
- - 格式:[谁]做了[什么],结果是[什么],遗留[什么](如有)
408
- - 摘要是给下次进入该话题时快速恢复上下文用的,不是给对端看的
409
- - 示例:"leiliang 要求安装 fetch 技能,tl3 完成依赖下载和链路验证,技能安装完成。"
410
-
411
- #### 何时顺手做(不等用户开口)
412
-
413
- 用户明确说"总结"时按上面序列执行。此外以下时机**主动**做,不要等对端问:
414
-
415
- | 时机 | 操作 |
416
- |---|---|
417
- | 话题名称仍是创建时的随机短语("你好"、"话题会话"等)时 | 更新名称 |
418
- | 一个明确的任务或阶段完成时 | 写入/更新摘要 |
419
- | 话题方向发生重大转变(原来讨论A,现在转向B) | 更新名称 + 摘要 |
420
- | 即将离开话题去处理其他事(跨话题路由前) | 写入摘要,记录当前状态 |
421
- | 话题进入 completed 状态前 | 写入最终摘要,记录成果 |
422
- | 下次被唤醒时发现摘要是"未总结" | 回顾历史后补写摘要 |
423
-
424
- ---
425
-
426
- ### 流程 J:生成 agent 工作报告
427
-
428
- **场景**:需要总结某 agent 与某对端最近一段时间的工作内容。
156
+ ### G. 生成工作报告
429
157
 
430
158
  ```bash
431
- SELF=<selfAid>
432
- PEER=<peer>
433
- # 最近一周的时间戳(毫秒)
434
- SINCE=$(python3 -c "import time; print(int((time.time()-7*86400)*1000))")
435
-
436
- # 第一步:列出所有话题(含消息统计)
437
- ec thread list $PEER --self $SELF --limit 100
438
-
439
- # 第二步:对24h消息数>0或总消息数较多的话题,读取最近消息
440
- ec thread history $PEER/<threadId> --self $SELF --after $SINCE --limit 50
441
-
442
- # 第三步:查看每个话题的 summary
443
- ec thread summary show $PEER/<threadId> --self $SELF
159
+ ec thread list <peer> --self <selfAid> --limit 100
160
+ ec thread history <peer>/<threadId> --self <selfAid> --after <起始ts> --limit 50
161
+ ec thread summary show <peer>/<threadId> --self <selfAid>
444
162
  ```
445
163
 
446
- **报告结构建议**:
447
- 1. **时间范围**:报告覆盖的时间段
448
- 2. **话题总览**:共多少话题,活跃话题数(24h有消息)
449
- 3. **逐话题摘要**:按活跃时间排序,每个话题一段,包含:
450
- - 话题名称和时间范围
451
- - 主要内容(从 summary 或消息读取)
452
- - 完成状态
453
- 4. **结论**:主要完成了什么,有什么遗留
454
-
455
- ---
456
-
457
- ## 五、常见错误
458
-
459
- | 错误码 | 含义 | 处理 |
460
- |---|---|---|
461
- | `TOPIC_NOT_FOUND` | `--thread` 指定的话题在本端不存在 | 先 `ec thread create` 新建 |
462
- | `TOPIC_CONFLICT` | 创建时名称与已有话题重名 | 换名字,或直接使用已有话题 |
463
- | `TOPIC_BUSY` | 话题有正在执行的任务,无法删除 | 等任务完成后再删除 |
464
-
465
- ---
466
-
467
- ## 六、不应该做的事
468
-
469
- 1. **不要在发送消息后阻塞等待回复**:`send --thread T2` 返回后 turn 就结束了,回复会触发新 turn。
470
-
471
- 2. **不要忘记创建 Trigger**:如果不创建,对端不回复时你永远不会知道。分支合并场景必须用 Trigger。
472
-
473
- 3. **不要在托管会话中手动指定 from 和 to**:`ec msg send '文本' --thread T2` 就够了。
164
+ 结构:时间范围 → 话题总览(总数/活跃数)→ 逐话题摘要(名称、时间、内容、状态)→ 结论与遗留。
474
165
 
475
- 4. **不要把 Trigger 当作"强制回复"或"执行脚本"**:Trigger 只是唤醒信号,到期后 agent 自主决定下一步。
476
-
477
- 5. **不要期望话题名双端一致**:话题名是本端概念,threadId 才是跨端统一标识符。
478
-
479
- 6. **不要在并发场景期望"等齐"原语**:想合并就在后到的 turn 里用 `ec thread history` 主动读。
480
-
481
- ---
482
-
483
- ## 七、加载本 skill 后 agent 应该明白的七条核心点
484
-
485
- 1. **话题是路由单位**:消息必须发在某个话题上,不带 `--thread` 时发在当前话题。
486
- 2. **跨话题路由不阻塞**:`send --thread T2` 返回后当前 turn 立刻结束,不等回复。
487
- 3. **Trigger 是唤醒信号,不是执行脚本**:到期时提醒检查,不指示执行任何操作,不保证对端已回复。
488
- 4. **决策权在自己**:收到委托要不要回、何时回、回什么,完全自主判断。
489
- 5. **分支合并靠主动查询**:想等多个对端都回,就在各自 turn 里用 `ec thread history` 读另一话题。
490
- 6. **from/to 托管会话中不需要**:会话唯一确定对端,命令简化为 `ec msg send '文本' --thread T`。
491
- 7. **话题名是本端的**:对端可能改名,threadId 才是跨端统一标识。
166
+ ## 四、禁忌与错误
492
167
 
168
+ | 错误码 | 处理 |
169
+ |---|---|
170
+ | `TOPIC_NOT_FOUND` | 先 `ec thread create`;也检查是不是带了 `<AID>/` 前缀或用了 `/main` |
171
+ | `TOPIC_CONFLICT` | 换名字,或直接用已有话题 |
172
+ | `TOPIC_BUSY` | 有任务在跑,等完成再删 |
173
+
174
+ **不要**:
175
+ 1. 发完阻塞等回复——turn 已结束,回复会触发新 turn。
176
+ 2. 漏掉 `--check-every`——跨话题不发复查,对端不回你永远不会知道。
177
+ 3. 托管会话里手写 `from/to`。
178
+ 4. 把复查通知当"强制回复"或执行脚本。
179
+ 5. 在复查 turn 里再 `--check-every`(会套娃)。
180
+ 6. 期望"等齐"原语,或期望话题名两端一致。
@@ -1,6 +1,5 @@
1
- ‹跨会话上下文 · 来源话题:{{threadContextOriginThreadId}}{{?threadContextOriginPeer}} · 对端:{{threadContextOriginPeer}}{{/}}{{?threadContextTime}} · 发送于:{{threadContextTime}}{{/}}›
1
+ ‹【跨话题上下文】来源话题:{{threadContextOriginThreadId}}{{?threadContextOriginPeer}} · 对端:{{threadContextOriginPeer}}{{/}}{{?threadContextTime}} · 发送于:{{threadContextTime}}{{/}} · 复查:{{threadContextTriggerId}} → self:{{selfAid}}›
2
2
  {{?threadContextGapHasNewMessages}}⚠️ 来源话题在发送后已有 {{threadContextGapCount}} 条新消息{{?threadContextGapRange}}({{threadContextGapRange}}){{/}} —— 处理前建议先回查该话题的空洞期消息。
3
3
  {{/}}{{?threadContextGapError}}⚠️ 无法检测来源话题的空洞期消息({{threadContextGapError}})—— 如需确认,请手动执行 ec thread history 回查该话题。
4
- {{/}}{{?threadContextTriggerId}}🔔 复查 Trigger:{{threadContextTriggerId}}(尚未触发/待处理)
5
4
  {{/}}
6
5
  {{content}}
@@ -1,2 +1,2 @@
1
- ‹Trigger 复查 · 话题:{{triggerMsgLabel_targetThreadId}} ← 来源:{{triggerMsgLabel_originThreadId}}{{?triggerMsgLabel_originPeer}}({{triggerMsgLabel_originPeer}}){{/}}{{?triggerMsgLabel_checkEvery}} · 周期:{{triggerMsgLabel_checkEvery}}{{/}}{{?triggerMsgFireTime}} · 触发于:{{triggerMsgFireTime}}{{/}} → self:{{selfAid}}›
1
+ ‹【跨话题复查】来源话题:{{triggerMsgLabel_originThreadId}}{{?triggerMsgLabel_originPeer}} · 对端:{{triggerMsgLabel_originPeer}}{{/}}{{?triggerMsgFirstSentTime}} · 发送于:{{triggerMsgFirstSentTime}}{{/}} · 复查:{{triggerMsgId}} → self:{{selfAid}}›
2
2
  {{content}}
@@ -67,7 +67,7 @@
67
67
  "ec.fs.ls": { "allow": true, "scopes": ["relation"], "constraints": { "groupOnly": true, "currentRelationOnly": true, "targetCurrentAgentOnly": true } },
68
68
  "ec.fs.stat": { "allow": true, "scopes": ["relation"], "constraints": { "groupOnly": true, "currentRelationOnly": true, "targetCurrentAgentOnly": true } },
69
69
  "ec.fs.lstat": { "allow": true, "scopes": ["relation"], "constraints": { "groupOnly": true, "currentRelationOnly": true, "targetCurrentAgentOnly": true } },
70
- "ec.fs.cat": { "allow": true, "scopes": ["relation"], "constraints": { "groupOnly": true, "currentRelationOnly": true, "targetCurrentAgentOnly": true } },
70
+ "ec.fs.cat": { "allow": true, "scopes": ["relation"], "constraints": { "currentRelationOnly": true, "targetCurrentAgentOnly": true } },
71
71
  "ec.fs.find": { "allow": true, "scopes": ["relation"], "constraints": { "groupOnly": true, "currentRelationOnly": true, "targetCurrentAgentOnly": true } },
72
72
  "ec.fs.df": { "allow": true, "scopes": ["relation"], "constraints": { "groupOnly": true, "currentRelationOnly": true, "targetCurrentAgentOnly": true } },
73
73
  "ec.fs.getfacl": { "allow": true, "scopes": ["relation"], "constraints": { "groupOnly": true, "currentRelationOnly": true, "targetCurrentAgentOnly": true } },
@@ -69,6 +69,7 @@
69
69
  "ec.aid.agentmd.get": { "allow": true, "scopes": ["relation"] },
70
70
  "ec.aid.agentmd.put": { "allow": false },
71
71
  "ec.aid.avatar": { "allow": false },
72
+ "ec.fs.cat": { "allow": true, "scopes": ["relation"], "constraints": { "privateOnly": true, "currentRelationOnly": true, "targetCurrentAgentOnly": true } },
72
73
  "ec.fs.*": { "allow": false },
73
74
  "ec.handoff.*": { "allow": false },
74
75
  "ec.queue.*": { "allow": false },
@@ -20,6 +20,7 @@ phase: bootstrapping
20
20
 
21
21
  名片文件受保护,用文件工具直接读写会被拒绝,改用上面的 agentmd 命令。
22
22
 
23
+
23
24
  ## 1. 目标与通信
24
25
 
25
26
  Bootstrap 是首次自我设定的生命周期门禁:补齐基础名片、保存协作交接、准备正式欢迎消息,然后激活。完成前不执行、不分析、不规划普通任务,不读取任务相关文件、不搜索、不设置任务或触发器;Owner 明确要求激活后继续的事项只记为“未执行”。