evolcore 0.0.25 → 0.0.26

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 (231) hide show
  1. package/CHANGELOG.md +607 -565
  2. package/LICENSE +21 -21
  3. package/README.md +455 -455
  4. package/bin/codex-managed-acl.ps1 +160 -160
  5. package/bin/codex-managed-hook.mjs +208 -208
  6. package/bin/ec-safe-output.js +327 -327
  7. package/bin/ec.js +40 -29
  8. package/bin/install-codex-managed-hooks.mjs +582 -555
  9. package/dist/agents/baseagent.js +96 -46
  10. package/dist/agents/claude-runner.js +50 -12
  11. package/dist/agents/codex/app-server-client.js +13 -5
  12. package/dist/agents/codex/catalog.js +1 -1
  13. package/dist/agents/codex/diagnostics.js +34 -1
  14. package/dist/agents/codex-runner.js +121 -38
  15. package/dist/agents/ecagent-runner.js +4 -9
  16. package/dist/agents/gemini-runner.js +2 -7
  17. package/dist/agents/runner-types.js +25 -17
  18. package/dist/aun/aid/agentmd.js +81 -8
  19. package/dist/aun/aid/client.js +1 -1
  20. package/dist/aun/aid/identity.js +1 -1
  21. package/dist/aun/aid/index.js +1 -1
  22. package/dist/aun/aid/store.js +17 -13
  23. package/dist/aun/menu-client.js +74 -0
  24. package/dist/aun/msg/group.js +1 -1
  25. package/dist/aun/msg/managed-operation.js +1 -1
  26. package/dist/aun/msg/p2p.js +6 -1
  27. package/dist/aun/msg/upload.js +30 -22
  28. package/dist/channels/aun.js +329 -94
  29. package/dist/cli/agent-command.js +105 -84
  30. package/dist/cli/agent-create.js +112 -10
  31. package/dist/cli/agent.js +16 -5
  32. package/dist/cli/aun-commands.js +297 -296
  33. package/dist/cli/bench.js +20 -20
  34. package/dist/cli/config.js +47 -28
  35. package/dist/cli/contact.js +70 -13
  36. package/dist/cli/ctl-command.js +22 -22
  37. package/dist/cli/daemon-commands.js +105 -40
  38. package/dist/cli/diag.js +31 -0
  39. package/dist/cli/fs-command.js +67 -67
  40. package/dist/cli/handoff-command.js +41 -9
  41. package/dist/cli/index.js +83 -77
  42. package/dist/cli/link-rules.js +21 -21
  43. package/dist/cli/managed-command-guard.js +3 -0
  44. package/dist/cli/menu-client.js +46 -31
  45. package/dist/cli/net-check.js +22 -22
  46. package/dist/cli/queue-command.js +29 -29
  47. package/dist/cli/response.js +30 -30
  48. package/dist/cli/restart-monitor.js +87 -40
  49. package/dist/cli/stats.js +51 -51
  50. package/dist/cli/trigger-command.js +56 -56
  51. package/dist/config/builtin-roles.js +1 -0
  52. package/dist/config/config-operation-service.js +145 -0
  53. package/dist/config/contact-operation-service.js +96 -7
  54. package/dist/config/resolved-config-op.js +27 -7
  55. package/dist/core/agent-application-service.js +2 -1
  56. package/dist/core/auth/authorization-audit.js +20 -12
  57. package/dist/core/auth/operation-authorizer.js +25 -4
  58. package/dist/core/auth/operation-catalog.js +35 -4
  59. package/dist/core/auth/remote-access-store.js +40 -1
  60. package/dist/core/bootstrap-service.js +1 -1
  61. package/dist/core/command/command-handler.js +83 -26
  62. package/dist/core/command/diag-service.js +118 -0
  63. package/dist/core/command/menu-catalog.js +12 -3
  64. package/dist/core/command/menu-handler.js +47 -26
  65. package/dist/core/command/menu-protocol.js +5 -0
  66. package/dist/core/command/menu-token-store.js +41 -8
  67. package/dist/core/command/slash-gate.js +34 -4
  68. package/dist/core/command/slash-handler.js +86 -21
  69. package/dist/core/handoff/runtime.js +205 -27
  70. package/dist/core/handoff/store.js +193 -4
  71. package/dist/core/message/im-renderer.js +72 -21
  72. package/dist/core/message/message-bridge.js +69 -9
  73. package/dist/core/message/message-queue.js +26 -0
  74. package/dist/core/message/message-utils.js +1 -0
  75. package/dist/core/message/response-engine.js +47 -28
  76. package/dist/core/model/catalog-service.js +79 -49
  77. package/dist/core/model/context-window-suffix.js +33 -0
  78. package/dist/core/model/model-catalog.js +1 -1
  79. package/dist/core/model/model-permission.js +12 -3
  80. package/dist/core/permission/ec-command-parser.js +51 -12
  81. package/dist/core/permission/sandbox-runtime.js +36 -14
  82. package/dist/core/permission/tool-policy.js +2 -1
  83. package/dist/index.js +280 -163
  84. package/dist/ipc.js +54 -2
  85. package/dist/response-system/engines/v1/proactive-flow.js +59 -2
  86. package/dist/stats/billing.js +41 -15
  87. package/dist/stats/db.js +159 -159
  88. package/dist/stats/eck-vars.js +9 -9
  89. package/dist/stats/price-resolver.js +28 -10
  90. package/dist/stats/query.js +139 -139
  91. package/dist/stats/role-budget.js +6 -6
  92. package/dist/stats/writer.js +51 -51
  93. package/dist/utils/cross-platform.js +30 -1
  94. package/dist/utils/error-dict.json +160 -160
  95. package/dist/utils/error-utils.js +21 -0
  96. package/dist/utils/evolcore-version.js +129 -0
  97. package/dist/utils/logger.js +3 -1
  98. package/dist/utils/macos-autostart.js +22 -22
  99. package/dist/utils/model-prices.jsonl +23 -23
  100. package/dist/utils/npm-ops.js +176 -35
  101. package/dist/utils/welcome.js +22 -22
  102. package/ecagent/LICENSE +21 -21
  103. package/ecagent/NOTICE +11 -11
  104. package/ecagent/README.md +61 -61
  105. package/ecagent/dist/harness/compaction/branch-summarization.js +30 -30
  106. package/ecagent/dist/harness/compaction/compaction.js +83 -83
  107. package/ecagent/dist/harness/messages.js +7 -7
  108. package/kits/docs/GUIDE.md +20 -20
  109. package/kits/docs/INDEX.md +66 -66
  110. package/kits/docs/aun/CHEATSHEET.md +19 -19
  111. package/kits/docs/aun/SYNC_PROTOCOL.md +15 -15
  112. package/kits/docs/channels/aun.md +56 -56
  113. package/kits/docs/channels/feishu.md +56 -56
  114. package/kits/docs/context-assembly.md +364 -364
  115. package/kits/docs/eck_templates/GUIDE.template.md +22 -22
  116. package/kits/docs/eck_templates/INDEX.template.md +28 -28
  117. package/kits/docs/eck_templates/path-registry.template.md +33 -33
  118. package/kits/docs/eck_templates/runtime.template.md +19 -19
  119. package/kits/docs/evolcore/INDEX.md +71 -71
  120. package/kits/docs/evolcore/agent-create.md +170 -165
  121. package/kits/docs/evolcore/agent.md +66 -66
  122. package/kits/docs/evolcore/aid.md +60 -60
  123. package/kits/docs/evolcore/codex-windows-sandbox.md +146 -146
  124. package/kits/docs/evolcore/config.md +202 -195
  125. package/kits/docs/evolcore/contact.md +75 -68
  126. package/kits/docs/evolcore/ctl.md +46 -46
  127. package/kits/docs/evolcore/event.md +216 -216
  128. package/kits/docs/evolcore/fs-architecture.md +1215 -1215
  129. package/kits/docs/evolcore/fs.md +110 -110
  130. package/kits/docs/evolcore/group-collaboration.md +243 -243
  131. package/kits/docs/evolcore/group-fs.md +17 -17
  132. package/kits/docs/evolcore/group-rules.md +251 -251
  133. package/kits/docs/evolcore/group.md +152 -152
  134. package/kits/docs/evolcore/menu-client.md +42 -34
  135. package/kits/docs/evolcore/model.md +50 -50
  136. package/kits/docs/evolcore/msg.md +166 -165
  137. package/kits/docs/evolcore/response.md +75 -75
  138. package/kits/docs/evolcore/rpc.md +37 -37
  139. package/kits/docs/evolcore/self-summary.md +29 -29
  140. package/kits/docs/evolcore/stats.md +83 -83
  141. package/kits/docs/evolcore/storage.md +50 -50
  142. package/kits/docs/evolcore/trigger.md +575 -575
  143. package/kits/docs/identity/AID_PROFILE_SPEC.md +26 -26
  144. package/kits/docs/identity/PATH_OPS.md +16 -16
  145. package/kits/docs/identity/ROLE_DETAIL.md +25 -25
  146. package/kits/docs/identity/identity-tools.md +26 -26
  147. package/kits/docs/path-registry.md +62 -62
  148. package/kits/docs/prompt-loading-architecture.md +269 -269
  149. package/kits/docs/venues/aun-group.md +45 -45
  150. package/kits/docs/venues/aun-private.md +10 -10
  151. package/kits/docs/venues/client-desktop.md +10 -10
  152. package/kits/docs/venues/client-mobile.md +10 -10
  153. package/kits/docs/venues/feishu-group.md +13 -13
  154. package/kits/docs/venues/feishu-private.md +9 -9
  155. package/kits/docs/venues/group.md +37 -25
  156. package/kits/docs/venues/private.md +10 -10
  157. package/kits/eck_manifest.auxiliary.json +43 -43
  158. package/kits/eck_manifest.json +190 -190
  159. package/kits/eck_message_manifest.json +74 -74
  160. package/kits/migrations/README-role-config-v4.md +32 -32
  161. package/kits/migrations/migrate-contact-book-v2.mjs +748 -748
  162. package/kits/migrations/migrate-role-config-v4.mjs +614 -614
  163. package/kits/migrations/migrate-role-config-v5.mjs +365 -365
  164. package/kits/migrations/rename-config-file.mjs +99 -99
  165. package/kits/rules/01-overview.md +162 -162
  166. package/kits/rules/02-navigation.md +96 -96
  167. package/kits/rules/03-identity.md +36 -36
  168. package/kits/rules/04-relation.md +75 -75
  169. package/kits/rules/05-venue.md +60 -60
  170. package/kits/rules/06-channel.md +63 -63
  171. package/kits/schemas/_meta.json +53 -53
  172. package/kits/schemas/agent-config.schema.1.json +177 -177
  173. package/kits/schemas/agent-config.schema.10.json +395 -395
  174. package/kits/schemas/agent-config.schema.11.json +421 -421
  175. package/kits/schemas/agent-config.schema.12.json +427 -427
  176. package/kits/schemas/agent-config.schema.2.json +239 -239
  177. package/kits/schemas/agent-config.schema.3.json +119 -119
  178. package/kits/schemas/agent-config.schema.4.json +208 -208
  179. package/kits/schemas/agent-config.schema.5.json +326 -326
  180. package/kits/schemas/agent-config.schema.6.json +322 -322
  181. package/kits/schemas/agent-config.schema.7.json +303 -303
  182. package/kits/schemas/agent-config.schema.8.json +304 -304
  183. package/kits/schemas/agent-config.schema.9.json +364 -364
  184. package/kits/schemas/contact-book.schema.1.json +36 -36
  185. package/kits/schemas/contact-book.schema.2.json +43 -43
  186. package/kits/schemas/contact-book.schema.3.json +67 -67
  187. package/kits/schemas/daemon.schema.1.json +91 -91
  188. package/kits/schemas/daemon.schema.2.json +101 -101
  189. package/kits/schemas/daemon.schema.3.json +123 -123
  190. package/kits/schemas/daemon.schema.4.json +136 -136
  191. package/kits/schemas/daemon.schema.5.json +135 -135
  192. package/kits/schemas/daemon.schema.6.json +131 -131
  193. package/kits/schemas/defaults.schema.1.json +81 -81
  194. package/kits/schemas/defaults.schema.2.json +85 -85
  195. package/kits/schemas/defaults.schema.3.json +73 -73
  196. package/kits/schemas/defaults.schema.4.json +107 -107
  197. package/kits/schemas/defaults.schema.5.json +119 -119
  198. package/kits/schemas/menu-exec-schema-commands.md +208 -208
  199. package/kits/schemas/migrations/README.md +30 -30
  200. package/kits/schemas/relation-config.schema.1.json +158 -158
  201. package/kits/schemas/relation-config.schema.2.json +73 -73
  202. package/kits/schemas/relation-config.schema.3.json +50 -50
  203. package/kits/schemas/relation-config.schema.4.json +47 -47
  204. package/kits/schemas/relation-config.schema.5.json +47 -47
  205. package/kits/schemas/relation-config.schema.6.json +46 -46
  206. package/kits/schemas/relation-config.schema.7.json +59 -59
  207. package/kits/schemas/relation-config.schema.8.json +103 -103
  208. package/kits/schemas/role-config.schema.1.json +201 -201
  209. package/kits/schemas/role-registry.schema.1.json +35 -35
  210. package/kits/schemas/single-session.schema.1.json +31 -31
  211. package/kits/schemas/single-session.schema.2.json +57 -57
  212. package/kits/schemas/single-session.schema.3.json +32 -32
  213. package/kits/templates/bootstrap-welcome.md +17 -17
  214. package/kits/templates/message-fragments/handoff-context-to-target.md +9 -9
  215. package/kits/templates/message-fragments/handoff-request-to-target.md +19 -19
  216. package/kits/templates/message-fragments/handoff-response-to-origin.md +9 -9
  217. package/kits/templates/message-fragments/inject-default.md +2 -2
  218. package/kits/templates/message-fragments/item.md +2 -2
  219. package/kits/templates/roles/admin.json +92 -92
  220. package/kits/templates/roles/member.json +96 -96
  221. package/kits/templates/roles/owner.json +9 -9
  222. package/kits/templates/roles/visitor.json +85 -85
  223. package/kits/templates/system-fragments/baseagent.md +14 -14
  224. package/kits/templates/system-fragments/bootstrap.md +31 -29
  225. package/kits/templates/system-fragments/channel.md +64 -64
  226. package/kits/templates/system-fragments/commands.md +28 -28
  227. package/kits/templates/system-fragments/identity.md +13 -13
  228. package/kits/templates/system-fragments/relation.md +19 -19
  229. package/kits/templates/system-fragments/session.md +59 -59
  230. package/kits/templates/system-fragments/venue.md +31 -31
  231. package/package.json +100 -98
@@ -1,208 +1,208 @@
1
- # 通过 menu action exec 获取 Schema 的命令手册
2
-
3
- > 面向前端(App / Web / Bot)通过 `menu.action name=cli action=exec` 远程执行 CLI,取回配置 schema 的**版本**与**内容**。
4
- > 传输层、`menu.response` 配对、错误处理等通用机制见 [menu-protocol-cli-exec-frontend.md](./menu-protocol-cli-exec-frontend.md)。
5
-
6
- 对应代码:`src/cli/config.ts` · `src/config/config-operation-service.ts`(`executeSchema`)· `src/config/schema-registry.ts`
7
-
8
- ---
9
-
10
- ## 0. 请求信封(所有命令通用)
11
-
12
- 固定 `name: "cli"`、`action: "exec"`,命令通过 `args.argv` 数组传入(推荐,无注入风险):
13
-
14
- ```jsonc
15
- {
16
- "type": "menu.action",
17
- "id": "<唯一请求 id>",
18
- "name": "cli",
19
- "action": "exec",
20
- "args": { "argv": [ /* ...见下方各命令... */ ] }
21
- }
22
- ```
23
-
24
- 响应通过 `menu.response.id` 配对:
25
-
26
- - 成功(命令跑完):`data = { exitCode, stdout, stderr, truncated, durationMs }`
27
- - `exitCode === 0` 才算命令成功;`--format json` 时对 `stdout` 直接 `JSON.parse`。
28
- - 失败(透传层拒绝,命令没跑):`error = { code, message }`。
29
-
30
- > 逻辑 schema 名(`<name>`):`daemon` / `defaults` / `agent-config` / `relation-config` / `contact-book` / `single-session`。各名对应哪份配置见 [§6 配置 ↔ Schema 对应表](#6-配置--schema-对应表)。
31
-
32
- ---
33
-
34
- ## 1. 获取版本
35
-
36
- ### 1.1 概览 —— 列出全部 schema 及各自当前版本
37
-
38
- ```jsonc
39
- // args.argv
40
- ["config", "schema", "--format", "json"]
41
- ```
42
-
43
- `stdout`(`JSON.parse` 后):
44
-
45
- ```jsonc
46
- {
47
- "ok": true,
48
- "schemas": [
49
- { "name": "daemon", "current": 1 },
50
- { "name": "defaults", "current": 1 },
51
- { "name": "agent-config", "current": 3 },
52
- { "name": "relation-config", "current": 2 },
53
- { "name": "contact-book", "current": 1 },
54
- { "name": "single-session", "current": 1 }
55
- ]
56
- }
57
- ```
58
-
59
- ### 1.2 某个 schema 的全部磁盘版本(含当前标记 + 元信息)
60
-
61
- ```jsonc
62
- // args.argv —— 用 --list
63
- ["config", "schema", "agent-config", "--list", "--format", "json"]
64
- ```
65
-
66
- `stdout`:
67
-
68
- ```jsonc
69
- {
70
- "ok": true,
71
- "name": "agent-config",
72
- "current": 3, // 当前版本号
73
- "versions": [
74
- { "version": 1, "current": false, "date": "2026-06-14", "description": "..." },
75
- { "version": 2, "current": false, "date": "2026-06-23", "description": "..." },
76
- { "version": 3, "current": true, "date": "2026-07-08", "description": "..." }
77
- ]
78
- }
79
- ```
80
-
81
- > `date` / `description` 来自 schema history 元信息,可能缺省。
82
-
83
- ---
84
-
85
- ## 2. 获取 Schema 内容
86
-
87
- ### 2.1 当前版本的完整定义(缺省版本号 = 当前版本)
88
-
89
- ```jsonc
90
- // args.argv
91
- ["config", "schema", "agent-config", "--format", "json"]
92
- ```
93
-
94
- ### 2.2 指定版本的完整定义
95
-
96
- ```jsonc
97
- // args.argv —— 末尾追加版本号
98
- ["config", "schema", "agent-config", "3", "--format", "json"]
99
- ```
100
-
101
- `stdout`(2.1 / 2.2 同结构):
102
-
103
- ```jsonc
104
- {
105
- "ok": true,
106
- "name": "agent-config",
107
- "version": 3,
108
- "current": true, // 该版本是否为当前版本
109
- "content": { /* 完整 schema JSON(字段/类型/枚举/默认/x-merge 等) */ }
110
- }
111
- ```
112
-
113
- ---
114
-
115
- ## 3. 命令速查
116
-
117
- | 目的 | `args.argv` |
118
- |------|-------------|
119
- | 列出全部 schema + 当前版本 | `["config","schema","--format","json"]` |
120
- | 列出某 schema 的所有版本 | `["config","schema","<name>","--list","--format","json"]` |
121
- | 查看某 schema 当前版本内容 | `["config","schema","<name>","--format","json"]` |
122
- | 查看某 schema 指定版本内容 | `["config","schema","<name>","<version>","--format","json"]` |
123
-
124
- 三种输出模式由参数决定:
125
-
126
- | 调用形式 | `mode` | 输出 |
127
- |----------|--------|------|
128
- | `schema` | `overview` | 全部 schema + 各自当前版本号 |
129
- | `schema <name> --list` | `versions` | 该 schema 所有磁盘版本,`current` 标当前,附 `date`/`description` |
130
- | `schema <name> [version]` | `content` | 指定版本(缺省=当前)的完整 schema JSON |
131
-
132
- ---
133
-
134
- ## 4. 错误码
135
-
136
- 命令自身失败(`data.exitCode != 0`,`stdout` 为 `{ "ok": false, "code": "...", "error": "..." }`):
137
-
138
- | `code` | 触发场景 |
139
- |--------|----------|
140
- | `UNKNOWN_SCHEMA` | 未知 schema 名(`error` 会列出已知名) |
141
- | `SCHEMA_VERSION_NOT_FOUND` | 版本不存在(`error` 会列出可用版本) |
142
- | `INVALID_CONFIG_COMMAND` | `--list` 与 version 参数同时给出 |
143
- | `MISSING_ARG` | `--list` 或指定 version 却未带 `<name>` |
144
- | `INVALID_CONFIG_VALUE` | version 非非负整数 |
145
-
146
- 透传层拒绝(`menu.response.error`,命令未执行):`NO_PERMISSION`(非 owner)、`NOT_ALLOWED`(命令不在白名单)、`MISSING_VALUE`、`NOT_SUPPORTED`(action 非 exec)、`TIMEOUT`(>15s)、`INTERNAL`。
147
-
148
- > `config schema` 为纯只读操作,数据源为 schema-registry(读 `_meta.json` + 扫描 `kits/schemas/*.schema.*.json`),人和 agent 均可执行。
149
-
150
- ---
151
-
152
- ## 6. 配置 ↔ Schema 对应表
153
-
154
- 每份配置文件由 `ConfigTarget` 路由到唯一的 schema(`src/config/config-manager.ts` 的 `TARGET_SCHEMA`)。查某份配置有哪些字段、类型/枚举/默认,就用 §2 拉对应 `<name>` 的内容。
155
-
156
- | 配置层(scope) | ConfigTarget | 磁盘文件(相对 `$EVOLCORE_HOME`) | 逻辑 schema `<name>` | 当前版本 | 校验/说明 |
157
- |---|---|---|---|---|---|
158
- | 进程级 | `process` | `daemon.json` | `daemon` | 1 | 进程配置,启动时读取;改动需重启 daemon |
159
- | 全局默认 | `defaults` | `agents/defaults.json` | `defaults` | 1 | 覆盖链最底层(`models.allowed` / `projects` / `aun` 等) |
160
- | Agent 级 | `agent` | `agents/{aid}/config.json` | `agent-config` | 3 | 单 agent 全量参数;含 user role policy |
161
- | 关系级 | `relation` | `agents/{aid}/relations/{peerKey}/config.json` | `relation-config` | 2 | 覆盖链最高优先;含 user/group role 分配 |
162
- | 联系人簿 | `contact` | `agents/{aid}/contact.json` | `contact-book` | 1 | 跨渠道身份映射的联系人别名 |
163
-
164
- **覆盖链优先级**(低 → 高,逐字段合并):`defaults` → `agent` → `relation`。
165
-
166
- ### 响应模式桶 schema —— `single-session`
167
-
168
- `single-session` 是**特殊 schema**:它不绑定任何独立配置文件,而是描述 `agent-config` / `relation-config` 里 `responseModeParams["single-session"]` 这个**桶**的形状(schema 根标记 `x-scope: "mode"`,区别于绑文件的 `process`/`agent`/`relation` 等)。它是 interactive / proactive 两模式合并为 `single-session` 后的模式特有参数容器。
169
-
170
- - 主 config schema(`agent-config` / `relation-config`)把 `responseModeParams` 当黑箱 `{type: object}` 放行;
171
- - 桶内部由「模式桶 schema」逐桶校验:桶键必须是已在 `_meta.json` 登记的响应模式名(如 `single-session`),校验逻辑见 `config-manager.ts` 的 `validateResponseModeParams`。
172
- - 想看某响应模式桶能设哪些参数,就 `["config","schema","single-session","--format","json"]`。
173
-
174
- **桶内参数**(`additionalProperties: false`,只允许下列键;均**仅 `chatmode=proactive` 时生效**):
175
-
176
- | 字段 | 类型 | 默认 | 作用 |
177
- |---|---|---|---|
178
- | `pre_tool_1stmsgchk` | boolean | `true` | 首工具表态检查:首个工具调用前必须先向对端发消息/文件,否则拦截 |
179
- | `tool_use_reminder` | boolean | `true` | 工具汇报提醒:启用队列未读提醒 + 每 10 次工具调用的汇报提醒 |
180
-
181
- - schema 里的 `default` 即**运行时出厂默认**——宿主组装 `modeConfig` 时先铺这层默认(`coordinator.schemaDefaults`),再叠用户显式桶值;flow 层不再硬编码默认。
182
- - `chatmode` 本身**不在此桶**:它由宿主按对端类型解析后强制注入 `modeConfig.chatmode`,与「选哪个模式」正交。
183
- - 写入路径:`ec response set single-session ...` 或 `ec response config set <key> <value> --mode single-session --self <aid>`。经 menu exec 时把该 argv 传入即可。
184
-
185
- > ⚠️ **存量迁移**:旧配置若把这两个键写在废弃的**顶层 `proactive` 块**下,读取时会被 `foldLegacyProactiveBlock` 就地折叠进 `responseModeParams["single-session"]` 桶(桶内已显式设的同名键优先,迁移值只补空缺),旧块随下次 write 从磁盘消失。未迁移的顶层旧键在运行时会**静默失效**——运行时只从桶里读。
186
-
187
- > 每新增一个已实现的响应模式,就会多一份同名桶 schema。用 §1.1 概览命令看当前全部逻辑 schema。
188
-
189
- ---
190
-
191
- ## 5. 完整发送样例(AUN)
192
-
193
- ```typescript
194
- await client.call('message.send', {
195
- to: targetAid,
196
- payload: JSON.stringify({
197
- type: 'menu.action',
198
- id: 'c-schema-1',
199
- name: 'cli',
200
- action: 'exec',
201
- args: { argv: ['config', 'schema', 'agent-config', '--format', 'json'] },
202
- }),
203
- encrypt: true,
204
- });
205
- // 响应在 onMessage 里按 parsed.id 配对:
206
- // parsed.data.exitCode === 0 → JSON.parse(parsed.data.stdout).content
207
- // parsed.error → 透传层拒绝
208
- ```
1
+ # 通过 menu action exec 获取 Schema 的命令手册
2
+
3
+ > 面向前端(App / Web / Bot)通过 `menu.action name=cli action=exec` 远程执行 CLI,取回配置 schema 的**版本**与**内容**。
4
+ > 传输层、`menu.response` 配对、错误处理等通用机制见 [menu-protocol-cli-exec-frontend.md](./menu-protocol-cli-exec-frontend.md)。
5
+
6
+ 对应代码:`src/cli/config.ts` · `src/config/config-operation-service.ts`(`executeSchema`)· `src/config/schema-registry.ts`
7
+
8
+ ---
9
+
10
+ ## 0. 请求信封(所有命令通用)
11
+
12
+ 固定 `name: "cli"`、`action: "exec"`,命令通过 `args.argv` 数组传入(推荐,无注入风险):
13
+
14
+ ```jsonc
15
+ {
16
+ "type": "menu.action",
17
+ "id": "<唯一请求 id>",
18
+ "name": "cli",
19
+ "action": "exec",
20
+ "args": { "argv": [ /* ...见下方各命令... */ ] }
21
+ }
22
+ ```
23
+
24
+ 响应通过 `menu.response.id` 配对:
25
+
26
+ - 成功(命令跑完):`data = { exitCode, stdout, stderr, truncated, durationMs }`
27
+ - `exitCode === 0` 才算命令成功;`--format json` 时对 `stdout` 直接 `JSON.parse`。
28
+ - 失败(透传层拒绝,命令没跑):`error = { code, message }`。
29
+
30
+ > 逻辑 schema 名(`<name>`):`daemon` / `defaults` / `agent-config` / `relation-config` / `contact-book` / `single-session`。各名对应哪份配置见 [§6 配置 ↔ Schema 对应表](#6-配置--schema-对应表)。
31
+
32
+ ---
33
+
34
+ ## 1. 获取版本
35
+
36
+ ### 1.1 概览 —— 列出全部 schema 及各自当前版本
37
+
38
+ ```jsonc
39
+ // args.argv
40
+ ["config", "schema", "--format", "json"]
41
+ ```
42
+
43
+ `stdout`(`JSON.parse` 后):
44
+
45
+ ```jsonc
46
+ {
47
+ "ok": true,
48
+ "schemas": [
49
+ { "name": "daemon", "current": 1 },
50
+ { "name": "defaults", "current": 1 },
51
+ { "name": "agent-config", "current": 3 },
52
+ { "name": "relation-config", "current": 2 },
53
+ { "name": "contact-book", "current": 1 },
54
+ { "name": "single-session", "current": 1 }
55
+ ]
56
+ }
57
+ ```
58
+
59
+ ### 1.2 某个 schema 的全部磁盘版本(含当前标记 + 元信息)
60
+
61
+ ```jsonc
62
+ // args.argv —— 用 --list
63
+ ["config", "schema", "agent-config", "--list", "--format", "json"]
64
+ ```
65
+
66
+ `stdout`:
67
+
68
+ ```jsonc
69
+ {
70
+ "ok": true,
71
+ "name": "agent-config",
72
+ "current": 3, // 当前版本号
73
+ "versions": [
74
+ { "version": 1, "current": false, "date": "2026-06-14", "description": "..." },
75
+ { "version": 2, "current": false, "date": "2026-06-23", "description": "..." },
76
+ { "version": 3, "current": true, "date": "2026-07-08", "description": "..." }
77
+ ]
78
+ }
79
+ ```
80
+
81
+ > `date` / `description` 来自 schema history 元信息,可能缺省。
82
+
83
+ ---
84
+
85
+ ## 2. 获取 Schema 内容
86
+
87
+ ### 2.1 当前版本的完整定义(缺省版本号 = 当前版本)
88
+
89
+ ```jsonc
90
+ // args.argv
91
+ ["config", "schema", "agent-config", "--format", "json"]
92
+ ```
93
+
94
+ ### 2.2 指定版本的完整定义
95
+
96
+ ```jsonc
97
+ // args.argv —— 末尾追加版本号
98
+ ["config", "schema", "agent-config", "3", "--format", "json"]
99
+ ```
100
+
101
+ `stdout`(2.1 / 2.2 同结构):
102
+
103
+ ```jsonc
104
+ {
105
+ "ok": true,
106
+ "name": "agent-config",
107
+ "version": 3,
108
+ "current": true, // 该版本是否为当前版本
109
+ "content": { /* 完整 schema JSON(字段/类型/枚举/默认/x-merge 等) */ }
110
+ }
111
+ ```
112
+
113
+ ---
114
+
115
+ ## 3. 命令速查
116
+
117
+ | 目的 | `args.argv` |
118
+ |------|-------------|
119
+ | 列出全部 schema + 当前版本 | `["config","schema","--format","json"]` |
120
+ | 列出某 schema 的所有版本 | `["config","schema","<name>","--list","--format","json"]` |
121
+ | 查看某 schema 当前版本内容 | `["config","schema","<name>","--format","json"]` |
122
+ | 查看某 schema 指定版本内容 | `["config","schema","<name>","<version>","--format","json"]` |
123
+
124
+ 三种输出模式由参数决定:
125
+
126
+ | 调用形式 | `mode` | 输出 |
127
+ |----------|--------|------|
128
+ | `schema` | `overview` | 全部 schema + 各自当前版本号 |
129
+ | `schema <name> --list` | `versions` | 该 schema 所有磁盘版本,`current` 标当前,附 `date`/`description` |
130
+ | `schema <name> [version]` | `content` | 指定版本(缺省=当前)的完整 schema JSON |
131
+
132
+ ---
133
+
134
+ ## 4. 错误码
135
+
136
+ 命令自身失败(`data.exitCode != 0`,`stdout` 为 `{ "ok": false, "code": "...", "error": "..." }`):
137
+
138
+ | `code` | 触发场景 |
139
+ |--------|----------|
140
+ | `UNKNOWN_SCHEMA` | 未知 schema 名(`error` 会列出已知名) |
141
+ | `SCHEMA_VERSION_NOT_FOUND` | 版本不存在(`error` 会列出可用版本) |
142
+ | `INVALID_CONFIG_COMMAND` | `--list` 与 version 参数同时给出 |
143
+ | `MISSING_ARG` | `--list` 或指定 version 却未带 `<name>` |
144
+ | `INVALID_CONFIG_VALUE` | version 非非负整数 |
145
+
146
+ 透传层拒绝(`menu.response.error`,命令未执行):`NO_PERMISSION`(非 owner)、`NOT_ALLOWED`(命令不在白名单)、`MISSING_VALUE`、`NOT_SUPPORTED`(action 非 exec)、`TIMEOUT`(>15s)、`INTERNAL`。
147
+
148
+ > `config schema` 为纯只读操作,数据源为 schema-registry(读 `_meta.json` + 扫描 `kits/schemas/*.schema.*.json`),人和 agent 均可执行。
149
+
150
+ ---
151
+
152
+ ## 6. 配置 ↔ Schema 对应表
153
+
154
+ 每份配置文件由 `ConfigTarget` 路由到唯一的 schema(`src/config/config-manager.ts` 的 `TARGET_SCHEMA`)。查某份配置有哪些字段、类型/枚举/默认,就用 §2 拉对应 `<name>` 的内容。
155
+
156
+ | 配置层(scope) | ConfigTarget | 磁盘文件(相对 `$EVOLCORE_HOME`) | 逻辑 schema `<name>` | 当前版本 | 校验/说明 |
157
+ |---|---|---|---|---|---|
158
+ | 进程级 | `process` | `daemon.json` | `daemon` | 1 | 进程配置,启动时读取;改动需重启 daemon |
159
+ | 全局默认 | `defaults` | `agents/defaults.json` | `defaults` | 1 | 覆盖链最底层(`models.allowed` / `projects` / `aun` 等) |
160
+ | Agent 级 | `agent` | `agents/{aid}/config.json` | `agent-config` | 3 | 单 agent 全量参数;含 user role policy |
161
+ | 关系级 | `relation` | `agents/{aid}/relations/{peerKey}/config.json` | `relation-config` | 2 | 覆盖链最高优先;含 user/group role 分配 |
162
+ | 联系人簿 | `contact` | `agents/{aid}/contact.json` | `contact-book` | 1 | 跨渠道身份映射的联系人别名 |
163
+
164
+ **覆盖链优先级**(低 → 高,逐字段合并):`defaults` → `agent` → `relation`。
165
+
166
+ ### 响应模式桶 schema —— `single-session`
167
+
168
+ `single-session` 是**特殊 schema**:它不绑定任何独立配置文件,而是描述 `agent-config` / `relation-config` 里 `responseModeParams["single-session"]` 这个**桶**的形状(schema 根标记 `x-scope: "mode"`,区别于绑文件的 `process`/`agent`/`relation` 等)。它是 interactive / proactive 两模式合并为 `single-session` 后的模式特有参数容器。
169
+
170
+ - 主 config schema(`agent-config` / `relation-config`)把 `responseModeParams` 当黑箱 `{type: object}` 放行;
171
+ - 桶内部由「模式桶 schema」逐桶校验:桶键必须是已在 `_meta.json` 登记的响应模式名(如 `single-session`),校验逻辑见 `config-manager.ts` 的 `validateResponseModeParams`。
172
+ - 想看某响应模式桶能设哪些参数,就 `["config","schema","single-session","--format","json"]`。
173
+
174
+ **桶内参数**(`additionalProperties: false`,只允许下列键;均**仅 `chatmode=proactive` 时生效**):
175
+
176
+ | 字段 | 类型 | 默认 | 作用 |
177
+ |---|---|---|---|
178
+ | `pre_tool_1stmsgchk` | boolean | `true` | 首工具表态检查:首个工具调用前必须先向对端发消息/文件,否则拦截 |
179
+ | `tool_use_reminder` | boolean | `true` | 工具汇报提醒:启用队列未读提醒 + 每 10 次工具调用的汇报提醒 |
180
+
181
+ - schema 里的 `default` 即**运行时出厂默认**——宿主组装 `modeConfig` 时先铺这层默认(`coordinator.schemaDefaults`),再叠用户显式桶值;flow 层不再硬编码默认。
182
+ - `chatmode` 本身**不在此桶**:它由宿主按对端类型解析后强制注入 `modeConfig.chatmode`,与「选哪个模式」正交。
183
+ - 写入路径:`ec response set single-session ...` 或 `ec response config set <key> <value> --mode single-session --self <aid>`。经 menu exec 时把该 argv 传入即可。
184
+
185
+ > ⚠️ **存量迁移**:旧配置若把这两个键写在废弃的**顶层 `proactive` 块**下,读取时会被 `foldLegacyProactiveBlock` 就地折叠进 `responseModeParams["single-session"]` 桶(桶内已显式设的同名键优先,迁移值只补空缺),旧块随下次 write 从磁盘消失。未迁移的顶层旧键在运行时会**静默失效**——运行时只从桶里读。
186
+
187
+ > 每新增一个已实现的响应模式,就会多一份同名桶 schema。用 §1.1 概览命令看当前全部逻辑 schema。
188
+
189
+ ---
190
+
191
+ ## 5. 完整发送样例(AUN)
192
+
193
+ ```typescript
194
+ await client.call('message.send', {
195
+ to: targetAid,
196
+ payload: JSON.stringify({
197
+ type: 'menu.action',
198
+ id: 'c-schema-1',
199
+ name: 'cli',
200
+ action: 'exec',
201
+ args: { argv: ['config', 'schema', 'agent-config', '--format', 'json'] },
202
+ }),
203
+ encrypt: true,
204
+ });
205
+ // 响应在 onMessage 里按 parsed.id 配对:
206
+ // parsed.data.exitCode === 0 → JSON.parse(parsed.data.stdout).content
207
+ // parsed.error → 透传层拒绝
208
+ ```
@@ -1,30 +1,30 @@
1
- # Schema 版本迁移函数
2
-
3
- 每次某 schema 升版(`_meta.json` 里 currentVersion 上升)必须提供配套迁移函数。
4
-
5
- ## 命名
6
-
7
- ```
8
- {schema}.{N}-to-{N+1}.ts
9
- ```
10
-
11
- 例:`agent-config.1-to-2.ts`。
12
-
13
- ## 契约(整文件 in/out)
14
-
15
- ```typescript
16
- export function migrate(old: object): object; // 旧版本完整 JSON → 新版本完整 JSON
17
- ```
18
-
19
- - 入参/返回都是**完整对象**——整体重写,不做字段级 patch。
20
- - 迁移产物直接覆盖原文件(ConfigManager 在迁移前已建 schema-migration 快照保证可回滚),写回后更新 `$schema_version`。
21
- - 多版本串联即函数复合:`v1→v3 = migrate_2to3(migrate_1to2(old))`,逐版本串联,不跨版本直跳。
22
-
23
- ## 要求
24
-
25
- - 历史 schema 文件全部保留(`{逻辑名}.schema.{版本}.json`)。
26
- - 每个迁移函数 default-export `migrate`,由 ConfigManager 动态 import。
27
-
28
- 当前完整配置 schema 的历史迁移仍按各自模块维护。响应模式桶的
29
- `single-session` v2→v3 数据迁移集中在 `src/config/schema-migration.ts`,
30
- 扫描并更新 defaults、Agent、Relation 配置文件,并在 daemon 启动前自动执行。
1
+ # Schema 版本迁移函数
2
+
3
+ 每次某 schema 升版(`_meta.json` 里 currentVersion 上升)必须提供配套迁移函数。
4
+
5
+ ## 命名
6
+
7
+ ```
8
+ {schema}.{N}-to-{N+1}.ts
9
+ ```
10
+
11
+ 例:`agent-config.1-to-2.ts`。
12
+
13
+ ## 契约(整文件 in/out)
14
+
15
+ ```typescript
16
+ export function migrate(old: object): object; // 旧版本完整 JSON → 新版本完整 JSON
17
+ ```
18
+
19
+ - 入参/返回都是**完整对象**——整体重写,不做字段级 patch。
20
+ - 迁移产物直接覆盖原文件(ConfigManager 在迁移前已建 schema-migration 快照保证可回滚),写回后更新 `$schema_version`。
21
+ - 多版本串联即函数复合:`v1→v3 = migrate_2to3(migrate_1to2(old))`,逐版本串联,不跨版本直跳。
22
+
23
+ ## 要求
24
+
25
+ - 历史 schema 文件全部保留(`{逻辑名}.schema.{版本}.json`)。
26
+ - 每个迁移函数 default-export `migrate`,由 ConfigManager 动态 import。
27
+
28
+ 当前完整配置 schema 的历史迁移仍按各自模块维护。响应模式桶的
29
+ `single-session` v2→v3 数据迁移集中在 `src/config/schema-migration.ts`,
30
+ 扫描并更新 defaults、Agent、Relation 配置文件,并在 daemon 启动前自动执行。