evolcore 0.0.24 → 0.0.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (197) hide show
  1. package/CHANGELOG.md +578 -561
  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 +29 -29
  8. package/bin/install-codex-managed-hooks.mjs +555 -555
  9. package/dist/agents/claude-runner.js +4 -1
  10. package/dist/agents/codex-runner.js +7 -4
  11. package/dist/agents/ecagent-runner.js +14 -13
  12. package/dist/agents/gemini-runner.js +22 -2
  13. package/dist/aun/aid/agentmd.js +56 -4
  14. package/dist/aun/aid/index.js +1 -0
  15. package/dist/aun/aid/managed-operation.js +53 -1
  16. package/dist/aun/storage/client.js +4 -1
  17. package/dist/aun/storage/index.js +1 -1
  18. package/dist/cli/agent-command.js +186 -87
  19. package/dist/cli/agent-create.js +42 -4
  20. package/dist/cli/agent.js +103 -1
  21. package/dist/cli/aun-commands.js +360 -294
  22. package/dist/cli/bench.js +20 -20
  23. package/dist/cli/config.js +20 -20
  24. package/dist/cli/contact.js +10 -10
  25. package/dist/cli/ctl-command.js +22 -22
  26. package/dist/cli/daemon-commands.js +15 -15
  27. package/dist/cli/fs-command.js +67 -67
  28. package/dist/cli/handoff-command.js +7 -7
  29. package/dist/cli/index.js +77 -77
  30. package/dist/cli/link-rules.js +21 -21
  31. package/dist/cli/menu-client.js +11 -11
  32. package/dist/cli/net-check.js +22 -22
  33. package/dist/cli/queue-command.js +29 -29
  34. package/dist/cli/response.js +30 -30
  35. package/dist/cli/restart-monitor.js +30 -30
  36. package/dist/cli/stats.js +51 -51
  37. package/dist/cli/trigger-command.js +56 -56
  38. package/dist/config/builtin-roles.js +1 -0
  39. package/dist/config/config-manager.js +15 -0
  40. package/dist/config/config-operation-service.js +20 -3
  41. package/dist/config/resolved-config-op.js +39 -1
  42. package/dist/core/auth/operation-authorizer.js +62 -4
  43. package/dist/core/auth/operation-catalog.js +16 -0
  44. package/dist/core/command/agent-control.js +54 -25
  45. package/dist/core/command/cli-intent-parser.js +18 -0
  46. package/dist/core/command/command-handler.js +91 -16
  47. package/dist/core/command/menu-catalog.js +1 -0
  48. package/dist/core/command/menu-handler.js +41 -5
  49. package/dist/core/command/menu-protocol.js +1 -0
  50. package/dist/core/command/slash-handler.js +9 -9
  51. package/dist/core/event-catalog.js +5 -0
  52. package/dist/core/evolagent.js +3 -3
  53. package/dist/core/message/response-engine.js +12 -6
  54. package/dist/core/permission/tool-policy.js +45 -6
  55. package/dist/index.js +209 -162
  56. package/dist/stats/db.js +159 -159
  57. package/dist/stats/eck-vars.js +9 -9
  58. package/dist/stats/query.js +139 -139
  59. package/dist/stats/role-budget.js +6 -6
  60. package/dist/stats/writer.js +51 -51
  61. package/dist/utils/avatar-upload.js +282 -23
  62. package/dist/utils/error-dict.json +160 -160
  63. package/dist/utils/macos-autostart.js +22 -22
  64. package/dist/utils/model-prices.jsonl +23 -23
  65. package/dist/utils/welcome.js +22 -22
  66. package/ecagent/LICENSE +21 -21
  67. package/ecagent/NOTICE +11 -11
  68. package/ecagent/README.md +61 -61
  69. package/ecagent/dist/harness/compaction/branch-summarization.js +30 -30
  70. package/ecagent/dist/harness/compaction/compaction.js +83 -83
  71. package/ecagent/dist/harness/messages.js +7 -7
  72. package/kits/docs/GUIDE.md +20 -20
  73. package/kits/docs/INDEX.md +66 -66
  74. package/kits/docs/aun/CHEATSHEET.md +19 -19
  75. package/kits/docs/aun/SYNC_PROTOCOL.md +15 -15
  76. package/kits/docs/channels/aun.md +56 -56
  77. package/kits/docs/channels/feishu.md +56 -56
  78. package/kits/docs/context-assembly.md +365 -364
  79. package/kits/docs/eck_templates/GUIDE.template.md +22 -22
  80. package/kits/docs/eck_templates/INDEX.template.md +28 -28
  81. package/kits/docs/eck_templates/path-registry.template.md +33 -33
  82. package/kits/docs/eck_templates/runtime.template.md +19 -19
  83. package/kits/docs/evolcore/INDEX.md +71 -69
  84. package/kits/docs/evolcore/agent-create.md +170 -156
  85. package/kits/docs/evolcore/agent.md +83 -73
  86. package/kits/docs/evolcore/aid.md +64 -62
  87. package/kits/docs/evolcore/codex-windows-sandbox.md +146 -0
  88. package/kits/docs/evolcore/config.md +195 -195
  89. package/kits/docs/evolcore/contact.md +68 -68
  90. package/kits/docs/evolcore/ctl.md +46 -46
  91. package/kits/docs/evolcore/event.md +216 -216
  92. package/kits/docs/evolcore/fs-architecture.md +1215 -1215
  93. package/kits/docs/evolcore/fs.md +110 -110
  94. package/kits/docs/evolcore/group-collaboration.md +243 -243
  95. package/kits/docs/evolcore/group-fs.md +17 -17
  96. package/kits/docs/evolcore/group-rules.md +251 -251
  97. package/kits/docs/evolcore/group.md +152 -152
  98. package/kits/docs/evolcore/menu-client.md +34 -34
  99. package/kits/docs/evolcore/model.md +50 -50
  100. package/kits/docs/evolcore/msg.md +165 -165
  101. package/kits/docs/evolcore/response.md +75 -75
  102. package/kits/docs/evolcore/rpc.md +37 -37
  103. package/kits/docs/evolcore/self-summary.md +29 -29
  104. package/kits/docs/evolcore/stats.md +83 -83
  105. package/kits/docs/evolcore/storage.md +50 -50
  106. package/kits/docs/evolcore/trigger.md +575 -575
  107. package/kits/docs/identity/AID_PROFILE_SPEC.md +26 -26
  108. package/kits/docs/identity/PATH_OPS.md +16 -16
  109. package/kits/docs/identity/ROLE_DETAIL.md +25 -25
  110. package/kits/docs/identity/identity-tools.md +26 -26
  111. package/kits/docs/path-registry.md +62 -62
  112. package/kits/docs/prompt-loading-architecture.md +270 -269
  113. package/kits/docs/venues/aun-group.md +45 -45
  114. package/kits/docs/venues/aun-private.md +10 -10
  115. package/kits/docs/venues/client-desktop.md +10 -10
  116. package/kits/docs/venues/client-mobile.md +10 -10
  117. package/kits/docs/venues/feishu-group.md +13 -13
  118. package/kits/docs/venues/feishu-private.md +9 -9
  119. package/kits/docs/venues/group.md +25 -25
  120. package/kits/docs/venues/private.md +10 -10
  121. package/kits/eck_manifest.auxiliary.json +43 -43
  122. package/kits/eck_manifest.json +195 -183
  123. package/kits/eck_message_manifest.json +74 -74
  124. package/kits/migrations/README-role-config-v4.md +32 -32
  125. package/kits/migrations/migrate-contact-book-v2.mjs +748 -748
  126. package/kits/migrations/migrate-role-config-v4.mjs +614 -614
  127. package/kits/migrations/migrate-role-config-v5.mjs +365 -365
  128. package/kits/migrations/rename-config-file.mjs +99 -99
  129. package/kits/rules/01-overview.md +162 -162
  130. package/kits/rules/02-navigation.md +96 -96
  131. package/kits/rules/03-identity.md +39 -37
  132. package/kits/rules/04-relation.md +75 -75
  133. package/kits/rules/05-venue.md +60 -60
  134. package/kits/rules/06-channel.md +63 -63
  135. package/kits/schemas/_meta.json +53 -53
  136. package/kits/schemas/agent-config.schema.1.json +177 -177
  137. package/kits/schemas/agent-config.schema.10.json +395 -395
  138. package/kits/schemas/agent-config.schema.11.json +421 -421
  139. package/kits/schemas/agent-config.schema.12.json +427 -427
  140. package/kits/schemas/agent-config.schema.2.json +239 -239
  141. package/kits/schemas/agent-config.schema.3.json +119 -119
  142. package/kits/schemas/agent-config.schema.4.json +208 -208
  143. package/kits/schemas/agent-config.schema.5.json +326 -326
  144. package/kits/schemas/agent-config.schema.6.json +322 -322
  145. package/kits/schemas/agent-config.schema.7.json +303 -303
  146. package/kits/schemas/agent-config.schema.8.json +304 -304
  147. package/kits/schemas/agent-config.schema.9.json +364 -364
  148. package/kits/schemas/contact-book.schema.1.json +36 -36
  149. package/kits/schemas/contact-book.schema.2.json +43 -43
  150. package/kits/schemas/contact-book.schema.3.json +67 -67
  151. package/kits/schemas/daemon.schema.1.json +91 -91
  152. package/kits/schemas/daemon.schema.2.json +101 -101
  153. package/kits/schemas/daemon.schema.3.json +123 -123
  154. package/kits/schemas/daemon.schema.4.json +136 -136
  155. package/kits/schemas/daemon.schema.5.json +135 -135
  156. package/kits/schemas/daemon.schema.6.json +131 -131
  157. package/kits/schemas/defaults.schema.1.json +81 -81
  158. package/kits/schemas/defaults.schema.2.json +85 -85
  159. package/kits/schemas/defaults.schema.3.json +73 -73
  160. package/kits/schemas/defaults.schema.4.json +107 -107
  161. package/kits/schemas/defaults.schema.5.json +119 -119
  162. package/kits/schemas/menu-exec-schema-commands.md +208 -208
  163. package/kits/schemas/migrations/README.md +30 -30
  164. package/kits/schemas/relation-config.schema.1.json +158 -158
  165. package/kits/schemas/relation-config.schema.2.json +73 -73
  166. package/kits/schemas/relation-config.schema.3.json +50 -50
  167. package/kits/schemas/relation-config.schema.4.json +47 -47
  168. package/kits/schemas/relation-config.schema.5.json +47 -47
  169. package/kits/schemas/relation-config.schema.6.json +46 -46
  170. package/kits/schemas/relation-config.schema.7.json +59 -59
  171. package/kits/schemas/relation-config.schema.8.json +103 -103
  172. package/kits/schemas/role-config.schema.1.json +201 -201
  173. package/kits/schemas/role-registry.schema.1.json +35 -35
  174. package/kits/schemas/single-session.schema.1.json +31 -31
  175. package/kits/schemas/single-session.schema.2.json +57 -57
  176. package/kits/schemas/single-session.schema.3.json +32 -32
  177. package/kits/templates/bootstrap-welcome.md +17 -17
  178. package/kits/templates/message-fragments/handoff-context-to-target.md +9 -9
  179. package/kits/templates/message-fragments/handoff-request-to-target.md +19 -19
  180. package/kits/templates/message-fragments/handoff-response-to-origin.md +9 -9
  181. package/kits/templates/message-fragments/inject-default.md +2 -2
  182. package/kits/templates/message-fragments/item.md +2 -2
  183. package/kits/templates/roles/admin.json +96 -84
  184. package/kits/templates/roles/member.json +97 -96
  185. package/kits/templates/roles/owner.json +9 -9
  186. package/kits/templates/roles/visitor.json +86 -85
  187. package/kits/templates/system-fragments/baseagent.md +14 -14
  188. package/kits/templates/system-fragments/bootstrap.md +38 -29
  189. package/kits/templates/system-fragments/channel.md +64 -64
  190. package/kits/templates/system-fragments/commands.md +28 -28
  191. package/kits/templates/system-fragments/identity.md +13 -13
  192. package/kits/templates/system-fragments/relation.md +19 -19
  193. package/kits/templates/system-fragments/session.md +59 -59
  194. package/kits/templates/system-fragments/venue.md +31 -31
  195. package/package.json +98 -98
  196. package/skills/eclink/SKILL.md +0 -84
  197. package/skills/eclink/agents/openai.yaml +0 -4
@@ -0,0 +1,146 @@
1
+ # Windows 上的 Codex Sandbox 权限排障
2
+
3
+ 本文适用于 EvolCore 在 Windows 上调用 Codex 时,任务在启动阶段因 sandbox 权限失败的情况。目标运行方式是:Codex Desktop、EvolCore daemon 和 `ec` CLI 均以普通用户运行;只有 Codex sandbox 的安装或修复过程临时通过 UAC 提权。
4
+
5
+ 不要为了绕过 sandbox 错误而长期以管理员身份运行全部组件。这样不仅扩大权限,还可能使高完整性 daemon 创建的命名管道拒绝普通权限 `ec` CLI 连接。
6
+
7
+ ## 典型错误
8
+
9
+ ### `.sandbox-bin` 无法锁定
10
+
11
+ ```text
12
+ helper_sandbox_lock_failed: lock sandbox bin dir C:\Users\<user>\.codex\.sandbox-bin failed:
13
+ SetNamedSecurityInfoW sandbox dir failed: 5
14
+ ```
15
+
16
+ 错误码 5 是 Windows `ACCESS_DENIED`。常见原因是 `.sandbox-bin` 归 `BUILTIN\Administrators` 所有,而当前普通用户只有 `Modify`,没有修改 DACL 所需的 `WRITE_DAC`。Codex 的日常 sandbox refresh 不会请求 UAC,因此无法自行修复这个状态。
17
+
18
+ ### `unelevated` 无法执行 deny-read
19
+
20
+ ```text
21
+ windows unelevated restricted-token sandbox cannot enforce deny-read restrictions directly;
22
+ refusing to run unsandboxed
23
+ ```
24
+
25
+ 这不是同一个错误。EvolCore 会为托管 Agent 注入 deny-read 限制;Windows 的 `unelevated` backend 无法实施这些限制并会 fail closed。因此不要把下面的配置当作修复:
26
+
27
+ ```toml
28
+ [windows]
29
+ sandbox = "unelevated"
30
+ ```
31
+
32
+ 需要 deny-read 时应继续使用:
33
+
34
+ ```toml
35
+ [windows]
36
+ sandbox = "elevated"
37
+ ```
38
+
39
+ 这里的 `elevated` 指 sandbox provisioning 能通过 UAC 建立受限账户和 ACL,不表示 Desktop 或 EvolCore 必须一直以管理员运行。
40
+
41
+ ## 先确认错误属于哪一层
42
+
43
+ 在普通 PowerShell 中执行:
44
+
45
+ ```powershell
46
+ codex --version
47
+ codex doctor --json
48
+ whoami /groups
49
+
50
+ $sandboxBin = Join-Path $env:USERPROFILE '.codex\.sandbox-bin'
51
+ Get-Item -LiteralPath $sandboxBin -Force |
52
+ Select-Object FullName, Attributes, LinkType
53
+ Get-Acl -LiteralPath $sandboxBin |
54
+ Select-Object Owner, AreAccessRulesProtected, Sddl
55
+ ```
56
+
57
+ 同时检查:
58
+
59
+ ```powershell
60
+ Get-Content (Join-Path $env:USERPROFILE '.codex\.sandbox\setup_error.json')
61
+ Get-Content (Join-Path $env:USERPROFILE '.codex\.sandbox\setup_marker.json')
62
+ Get-Content (Join-Path $env:USERPROFILE '.codex\.sandbox\sandbox.*.log') -Tail 80
63
+ ```
64
+
65
+ 注意以下边界:
66
+
67
+ | 现象 | 所属层 | 处理方向 |
68
+ |------|--------|----------|
69
+ | `helper_sandbox_lock_failed` / `SetNamedSecurityInfoW ... 5` | Codex sandbox ACL | 重新 provisioning 或修复 `.sandbox-bin` owner |
70
+ | `unelevated ... cannot enforce deny-read` | Codex sandbox 模式 | 使用 `windows.sandbox = "elevated"` |
71
+ | `connect EPERM \\.\pipe\daemon-*` | EvolCore IPC | 让 daemon 与 CLI 使用相同用户和完整性级别 |
72
+ | sandbox 已启动,随后出现 `POLICY_DENIED` | EvolCore 角色/权限策略 | 检查任务发起者角色和 permission mode |
73
+
74
+ 共享同一个项目目录或同一个 `CODEX_HOME` 本身不是错误。关键是宿主进程的完整性级别一致,以及 sandbox 基础 ACL 已正确 provisioning。
75
+
76
+ ## 推荐修复:重新执行 elevated provisioning
77
+
78
+ 1. 结束正在启动的 Codex Agent 任务,保留 Codex Desktop 和 EvolCore 的普通权限运行方式。
79
+ 2. 将 Codex Desktop 与独立安装的 Codex CLI 更新到兼容版本,避免两个版本交替刷新同一 `CODEX_HOME`。
80
+ 3. 在 Codex Desktop 的 Windows Sandbox 设置中执行 setup/repair,选择 elevated backend,并接受一次 UAC 提示。对应的 app-server 操作为 `windowsSandbox/setupStart`,模式为 `elevated`;普通用户不应自行拼接内部 RPC。
81
+ 4. provisioning 完成后关闭管理员窗口。后续 Desktop、EvolCore daemon 和 `ec` CLI 均以普通用户运行。
82
+ 5. 在普通 PowerShell 中执行验证命令。
83
+
84
+ ```powershell
85
+ codex doctor --json
86
+ codex sandbox -- cmd /c whoami
87
+ ```
88
+
89
+ 验收结果应满足:
90
+
91
+ - `codex doctor` 中 sandbox backend 为 `elevated`,provisioning 为 `complete`,没有 `helper_sandbox_lock_failed`。
92
+ - `codex sandbox -- cmd /c whoami` 成功,身份是专用 sandbox 用户(例如 `CodexSandboxOffline` 或 `CodexSandboxOnline`),而不是当前桌面用户。
93
+ - 普通权限 EvolCore 任务可以进入模型执行阶段。
94
+
95
+ 如果 setup/repair 仍反复失败,优先使用 Codex 的修复或重新安装流程。不要先清空整个 `.codex`,其中包含会话、认证和其他用户数据。
96
+
97
+ ## 已验证的定向 workaround
98
+
99
+ 仅当官方 repair 无法完成、错误明确为 `.sandbox-bin` owner/DACL 不一致时使用。此方法只修复目录 owner,不递归改文件权限,也不删除或放宽现有 DACL。
100
+
101
+ 先在普通 PowerShell 中确认目标是实体目录而非重解析点:
102
+
103
+ ```powershell
104
+ $sandboxBin = Join-Path $env:USERPROFILE '.codex\.sandbox-bin'
105
+ $item = Get-Item -LiteralPath $sandboxBin -Force
106
+ if ($item.Attributes -band [IO.FileAttributes]::ReparsePoint) {
107
+ throw "$sandboxBin is a reparse point; stop and inspect it manually"
108
+ }
109
+ Get-Acl -LiteralPath $sandboxBin | Format-List Owner, Sddl
110
+ ```
111
+
112
+ 然后只为下面一次操作打开管理员 PowerShell:
113
+
114
+ ```powershell
115
+ $sandboxBin = Join-Path $env:USERPROFILE '.codex\.sandbox-bin'
116
+ $currentUser = [Security.Principal.WindowsIdentity]::GetCurrent().Name
117
+ $acl = Get-Acl -LiteralPath $sandboxBin
118
+ $acl.SetOwner([Security.Principal.NTAccount]::new($currentUser))
119
+ Set-Acl -LiteralPath $sandboxBin -AclObject $acl
120
+ ```
121
+
122
+ 关闭管理员 PowerShell,在普通 PowerShell 中重新运行:
123
+
124
+ ```powershell
125
+ codex sandbox -- cmd /c whoami
126
+ codex doctor --json
127
+ ```
128
+
129
+ 本 workaround 已验证可以让普通权限 refresh 越过 `SetNamedSecurityInfoW ... 5`,但它不是替代官方 provisioning 的长期安装流程。Codex 更新或 repair 可能重新设置 owner;若问题复发,应保留 `doctor` 输出和 sandbox 日志并反馈给 Codex,而不是持续扩大 ACL。
130
+
131
+ ## 禁止采用的规避方式
132
+
133
+ - 不要给 `Everyone`、`Users` 或 `CodexSandboxUsers` 授予 `FullControl`、`WRITE_DAC` 或 `WRITE_OWNER`。
134
+ - 不要删除 `.codex` 父目录上的 deny ACL;这些规则可能正是 deny-read 隔离的一部分。
135
+ - 不要关闭 sandbox 或使用危险绕过参数来运行不受信任的 Agent 任务。
136
+ - 不要让 EvolCore daemon 长期管理员运行而 CLI 保持普通权限;这会造成命名管道 `EPERM`。
137
+ - 不要仅凭 `ec status` 中 PID 存活判断系统健康;还要确认 IPC 和实际 Agent 任务都能运行。
138
+
139
+ ## EvolCore 侧最终验证
140
+
141
+ ```powershell
142
+ ec status
143
+ ec agent reload <agent-aid> --format json
144
+ ```
145
+
146
+ 然后从一个普通 AID 向目标 Agent 发送最小测试任务。观察 daemon 日志时,正确顺序应是:sandbox 初始化成功、Codex thread 启动、任务进入工具/模型执行。若此后出现 `POLICY_DENIED`,说明 sandbox 已恢复,下一步应修复 EvolCore 的角色或任务权限,而不是继续修改 Windows ACL。
@@ -1,195 +1,195 @@
1
- # ec config — 配置体系底层入口
2
-
3
- 按作用域读写所有配置参数 + 配置快照/回滚/启动历史。触发词:看配置/改配置/查字段/列配置/校验配置/快照/回滚/历史/对比版本/启动记录。
4
-
5
- > `ec config` 是配置读写的统一 CLI 入口;模型交互由 menu 协议和 slash `/model` 提供。
6
- > 字段由共享 field policy 决定路由、值类型和访问级别;同一套规则用于 CLI、Menu 和 agent-tool。
7
-
8
- ## 参数读写
9
-
10
- ```bash
11
- # 读 effective 值(显示覆盖链来源);可一次传多个字段批量读取(共享同一 selector/--format)
12
- ec config get <field> [<field> ...] [--self <aid>] [--peer <X>] [--default] [--process]
13
- # 单字段输出不变;多字段时 text 每行一条、json 返回 { ok, results: [...] },任一字段失败退出码为 1
14
-
15
- # 写参数:scope 由 selector 推断
16
- ec config set <field> <value> [--self <aid>] [--peer <X>] [--default] [--process]
17
-
18
- # 删除某层显式设置,回落下一层
19
- ec config unset <field> [--self <aid>] [--peer <X>]
20
-
21
- # 查看某一层文件原始内容(不合并,凭证显示 ${VAR} 不展开)
22
- ec config show [--self <aid>] [--peer <X>] [--default] [--process]
23
-
24
- # 打印合并后的全部生效配置
25
- ec config effective [--self <aid>] [--peer <X>]
26
-
27
- # 列出某作用域可设字段(类型/枚举值,来源 schema)
28
- ec config fields [--self <aid>] [--default] [--process]
29
-
30
- # 列出所有配置文件
31
- ec config list
32
-
33
- # 按 schema 校验配置文件
34
- ec config validate [--self <aid>] [--peer <X>] [--default] [--process]
35
-
36
- # 按 schema 物化骨架文件(仅人)
37
- ec config init [--self <aid>] [--peer <X>] [--default] [--process]
38
- ```
39
-
40
- ## 快照 / 回滚
41
-
42
- 总开关直接保存在 `$EVOLCORE_HOME/daemon.json` 顶层,默认 `true`:
43
-
44
- ```bash
45
- ec config set configSnapshots true --process
46
- ec config set configSnapshots false --process
47
- ```
48
-
49
- 开启时首次成功启动创建全量基线,后续成功启动检测到配置变化后自动建立新版本。关闭时不写快照、启动日志,也不执行自检回落。
50
-
51
- ```bash
52
- # 立即创建快照(与当前版本比对,不一致才建;--full 强制新全量)(仅人)
53
- ec config snapshot [--full] [--desc "说明"]
54
-
55
- # 列出快照版本(版本号/类型/触发/时间/说明)
56
- ec config history
57
-
58
- # 对比两版本差异
59
- ec config diff <v1> <v2>
60
-
61
- # 恢复到指定版本:展开到工作目录 + 更新 current.json(先 pre-restore 快照)(仅人)
62
- ec config restore <version>
63
-
64
- # 显示 current.json 选定版本(上次启动回落时给出告警)
65
- ec config current
66
-
67
- # 查看启动历史(含回落标记)
68
- ec config boots [-n N]
69
-
70
- # 清理旧快照(默认 dry-run,--yes 真删;拒删被依赖全量 / current 指向版本)(仅人)
71
- ec config prune [--keep-full N] [--keep-delta N] [--yes]
72
- ```
73
-
74
- ## Schema 查看
75
-
76
- 查看随包分发的配置 schema **定义本身**(`kits/schemas/*.schema.*.json`)——不是读写配置值,而是查「某作用域有哪些字段、类型/枚举/默认、schema 有几个版本」。纯只读,人和 agent 均可。
77
-
78
- ```bash
79
- # 概览:列出全部逻辑 schema 及各自当前版本
80
- ec config schema
81
-
82
- # 列出某 schema 磁盘上的所有版本(* 标当前版本,附日期/说明)
83
- ec config schema <name> --list
84
-
85
- # 查看某 schema 的原始定义(缺省版本号 = 当前版本)
86
- ec config schema <name> [version]
87
- ```
88
-
89
- 逻辑 schema 名(`<name>`):`daemon` / `defaults` / `agent-config` / `relation-config` /
90
- `contact-book` / `role-registry` / `role-config`。
91
-
92
- 三种输出模式:
93
-
94
- | 调用形式 | mode | 输出 |
95
- |----------|------|------|
96
- | `config schema` | overview | 全部 schema + 各自当前版本号 |
97
- | `config schema <name> --list` | versions | 该 schema 所有磁盘版本,`*` 标当前,附 date/description |
98
- | `config schema <name> [version]` | content | 指定版本(缺省=当前)的完整 schema JSON |
99
-
100
- 约定与报错:
101
- - `--list` 与 version 参数互斥(`INVALID_CONFIG_COMMAND`)
102
- - `--list` 或指定 version 时必须带 `<name>`(`MISSING_ARG`)
103
- - version 须为非负整数;未知 name → `UNKNOWN_SCHEMA`;版本不存在 → `SCHEMA_VERSION_NOT_FOUND`(错误信息列出可用版本)
104
-
105
- > 用途:写配置前先 `ec config fields` 看字段可设值,或 `ec config schema <name>` 看该层 schema 的完整字段约束与 `x-merge` 合并语义;排查「字段为何被拒/怎么合并」时定位 schema 版本。
106
-
107
- ## 作用域 selector
108
-
109
- | 参数 | 作用域 | 落盘 |
110
- |------|--------|------|
111
- | `--self <aid>` | agent 级 | `agents/<aid>/config.json` |
112
- | `--self <aid> --peer <X>` | 关系级 | `agents/<aid>/relations/<peerKey>/config.json` |
113
- | `--default` | 全局默认 | `agents/defaults.json` |
114
- | `--process` | 进程级 | `~/.evolcore/daemon.json` |
115
- | 写操作三者全无 | — | **拒绝**(防误写全局) |
116
-
117
- `--peer` 取 `channelType#channelId` 或裸 aid(裸 aid 视为 `aun#<aid>`)。配置提交后开始处理的新
118
- turn 使用新值;提交前已经开始的 turn 不被打断。
119
-
120
- ## 覆盖链
121
-
122
- ```
123
- defaults → agent/config → relation/config
124
- ```
125
-
126
- ConfigManager 只合并上述物理层并返回物理来源。角色策略不进入配置合并链:`permissionMode` 和 `baseagents.*.model` 由消费方按当前角色单独应用。
127
-
128
- ### Agent 消息准入策略
129
-
130
- 消息准入策略保存在 `agents/<aid>/config.json` 的 `access` 字段,但它是 Agent 自身的安全边界,
131
- 不参与 defaults/relation 有效覆盖:
132
-
133
- ```json
134
- {
135
- "access": {
136
- "policyMode": "contacts",
137
- "requestLimit": { "maxTimes": 600, "coolDown": 3600 }
138
- }
139
- }
140
- ```
141
-
142
- `policyMode` 为 `open | contacts | owners`;`open` 对所有已配置渠道的私聊和群聊入站开放,`contacts`
143
- 将 Agent 已加入并接收到的群聊视为授权,`owners` 仅 Owner 消息开放;群聊成员不按 Contact Book 联系人
144
- 状态逐一过滤。`requestLimit` 只限制准入控制消息的自动回复、申请和绑定码提示,不是渠道准入开关;`coolDown`
145
- 单位为秒。该对象由 Connect 的访问设置入口修改,不通过通用 relation/defaults 覆盖链放宽。
146
-
147
- ### AUN 群规则加载策略
148
-
149
- `groupRules.mode` 可设为 `load` 或 `ignore`,缺省为 `load`。该字段仅存在于 Agent 和 relation
150
- 层,relation 可覆盖 Agent 默认值,`--default` 不支持。
151
-
152
- ```bash
153
- # Agent 默认值
154
- ec config set groupRules.mode ignore --self bot.agentid.pub
155
-
156
- # 当前群覆盖
157
- ec config set groupRules.mode load \
158
- --self bot.agentid.pub --peer aun#g-team.agentid.pub
159
-
160
- # 查看有效值和来源 / 删除群覆盖
161
- ec config get groupRules.mode \
162
- --self bot.agentid.pub --peer aun#g-team.agentid.pub --format json
163
- ec config unset groupRules.mode \
164
- --self bot.agentid.pub --peer aun#g-team.agentid.pub
165
- ```
166
-
167
- `ignore` 表示运行时不访问远端群规则、不读本地物化文件、不注入规则正文,但不删除缓存,也不影响
168
- `ec group rules` 的远端管理命令。配置切换不会自动创建或清空会话。Claude/Codex 从后续新 turn
169
- 按当前值重新组装上下文;其他 runner 的 Menu 写入结果会提示新建或清空群会话后生效。
170
-
171
- ## 权限控制
172
-
173
- **写权限**(API 层判定):
174
- - **通用可写字段**:active_baseagent / baseagents / chatmode / show_activities / flush_delay / debounce / render
175
- - **角色专用入口**:`roles/index.json` 与 `roles/{roleId}.json` 由角色服务维护;relation 的
176
- `role` 由角色分配服务维护;`permissionMode` 仅在角色策略中维护
177
- - **兼容字段**:`enable_rich_content` 仍可读取旧值,但已废弃且不再产生运行时效果
178
- - **群规则策略**:`groupRules.mode` 仅当前 Agent 的实际 owner 可 set/unset;DaemonOwner 不继承群或 relation 写权限,其他角色可读取当前 relation 的有效值
179
- - **源码诊断白名单**:`readonlySourceDiagnostics` 默认关闭;开启后只读会话仅可在项目源码目录执行受限、可证明只读查询,配置/证书/快照/session/锁文件仍禁止访问
180
- - **仅人可写**:channels / owners / admins / 凭证 / aid / enabled / projects / aun / models.allowed
181
- - Agent 托管环境写仅人字段被拒
182
-
183
- **操作权限**:
184
- - 读操作(get/show/list/effective/fields/schema/history/diff/current/boots/validate):人和 agent 均可
185
- - 快照管理(snapshot/restore/init/prune):仅人可执行
186
-
187
- **凭证安全**:
188
- - 凭证一律 `${VAR}` 引用,CLI 读命令永不展开、不泄露明文
189
- - `.env` 全程禁读写
190
-
191
- ## 通用约定
192
-
193
- - `--format json` — 所有子命令通用
194
- - 本命令操作本地配置,不连 AUN 网络
195
- - 单文件内 list 字段 `set` = 追加去重;删单个元素请直接编辑文件(角色/owner 链只增不减)
1
+ # ec config — 配置体系底层入口
2
+
3
+ 按作用域读写所有配置参数 + 配置快照/回滚/启动历史。触发词:看配置/改配置/查字段/列配置/校验配置/快照/回滚/历史/对比版本/启动记录。
4
+
5
+ > `ec config` 是配置读写的统一 CLI 入口;模型交互由 menu 协议和 slash `/model` 提供。
6
+ > 字段由共享 field policy 决定路由、值类型和访问级别;同一套规则用于 CLI、Menu 和 agent-tool。
7
+
8
+ ## 参数读写
9
+
10
+ ```bash
11
+ # 读 effective 值(显示覆盖链来源);可一次传多个字段批量读取(共享同一 selector/--format)
12
+ ec config get <field> [<field> ...] [--self <aid>] [--peer <X>] [--default] [--process]
13
+ # 单字段输出不变;多字段时 text 每行一条、json 返回 { ok, results: [...] },任一字段失败退出码为 1
14
+
15
+ # 写参数:scope 由 selector 推断
16
+ ec config set <field> <value> [--self <aid>] [--peer <X>] [--default] [--process]
17
+
18
+ # 删除某层显式设置,回落下一层
19
+ ec config unset <field> [--self <aid>] [--peer <X>]
20
+
21
+ # 查看某一层文件原始内容(不合并,凭证显示 ${VAR} 不展开)
22
+ ec config show [--self <aid>] [--peer <X>] [--default] [--process]
23
+
24
+ # 打印合并后的全部生效配置
25
+ ec config effective [--self <aid>] [--peer <X>]
26
+
27
+ # 列出某作用域可设字段(类型/枚举值,来源 schema)
28
+ ec config fields [--self <aid>] [--default] [--process]
29
+
30
+ # 列出所有配置文件
31
+ ec config list
32
+
33
+ # 按 schema 校验配置文件
34
+ ec config validate [--self <aid>] [--peer <X>] [--default] [--process]
35
+
36
+ # 按 schema 物化骨架文件(仅人)
37
+ ec config init [--self <aid>] [--peer <X>] [--default] [--process]
38
+ ```
39
+
40
+ ## 快照 / 回滚
41
+
42
+ 总开关直接保存在 `$EVOLCORE_HOME/daemon.json` 顶层,默认 `true`:
43
+
44
+ ```bash
45
+ ec config set configSnapshots true --process
46
+ ec config set configSnapshots false --process
47
+ ```
48
+
49
+ 开启时首次成功启动创建全量基线,后续成功启动检测到配置变化后自动建立新版本。关闭时不写快照、启动日志,也不执行自检回落。
50
+
51
+ ```bash
52
+ # 立即创建快照(与当前版本比对,不一致才建;--full 强制新全量)(仅人)
53
+ ec config snapshot [--full] [--desc "说明"]
54
+
55
+ # 列出快照版本(版本号/类型/触发/时间/说明)
56
+ ec config history
57
+
58
+ # 对比两版本差异
59
+ ec config diff <v1> <v2>
60
+
61
+ # 恢复到指定版本:展开到工作目录 + 更新 current.json(先 pre-restore 快照)(仅人)
62
+ ec config restore <version>
63
+
64
+ # 显示 current.json 选定版本(上次启动回落时给出告警)
65
+ ec config current
66
+
67
+ # 查看启动历史(含回落标记)
68
+ ec config boots [-n N]
69
+
70
+ # 清理旧快照(默认 dry-run,--yes 真删;拒删被依赖全量 / current 指向版本)(仅人)
71
+ ec config prune [--keep-full N] [--keep-delta N] [--yes]
72
+ ```
73
+
74
+ ## Schema 查看
75
+
76
+ 查看随包分发的配置 schema **定义本身**(`kits/schemas/*.schema.*.json`)——不是读写配置值,而是查「某作用域有哪些字段、类型/枚举/默认、schema 有几个版本」。纯只读,人和 agent 均可。
77
+
78
+ ```bash
79
+ # 概览:列出全部逻辑 schema 及各自当前版本
80
+ ec config schema
81
+
82
+ # 列出某 schema 磁盘上的所有版本(* 标当前版本,附日期/说明)
83
+ ec config schema <name> --list
84
+
85
+ # 查看某 schema 的原始定义(缺省版本号 = 当前版本)
86
+ ec config schema <name> [version]
87
+ ```
88
+
89
+ 逻辑 schema 名(`<name>`):`daemon` / `defaults` / `agent-config` / `relation-config` /
90
+ `contact-book` / `role-registry` / `role-config`。
91
+
92
+ 三种输出模式:
93
+
94
+ | 调用形式 | mode | 输出 |
95
+ |----------|------|------|
96
+ | `config schema` | overview | 全部 schema + 各自当前版本号 |
97
+ | `config schema <name> --list` | versions | 该 schema 所有磁盘版本,`*` 标当前,附 date/description |
98
+ | `config schema <name> [version]` | content | 指定版本(缺省=当前)的完整 schema JSON |
99
+
100
+ 约定与报错:
101
+ - `--list` 与 version 参数互斥(`INVALID_CONFIG_COMMAND`)
102
+ - `--list` 或指定 version 时必须带 `<name>`(`MISSING_ARG`)
103
+ - version 须为非负整数;未知 name → `UNKNOWN_SCHEMA`;版本不存在 → `SCHEMA_VERSION_NOT_FOUND`(错误信息列出可用版本)
104
+
105
+ > 用途:写配置前先 `ec config fields` 看字段可设值,或 `ec config schema <name>` 看该层 schema 的完整字段约束与 `x-merge` 合并语义;排查「字段为何被拒/怎么合并」时定位 schema 版本。
106
+
107
+ ## 作用域 selector
108
+
109
+ | 参数 | 作用域 | 落盘 |
110
+ |------|--------|------|
111
+ | `--self <aid>` | agent 级 | `agents/<aid>/config.json` |
112
+ | `--self <aid> --peer <X>` | 关系级 | `agents/<aid>/relations/<peerKey>/config.json` |
113
+ | `--default` | 全局默认 | `agents/defaults.json` |
114
+ | `--process` | 进程级 | `~/.evolcore/daemon.json` |
115
+ | 写操作三者全无 | — | **拒绝**(防误写全局) |
116
+
117
+ `--peer` 取 `channelType#channelId` 或裸 aid(裸 aid 视为 `aun#<aid>`)。配置提交后开始处理的新
118
+ turn 使用新值;提交前已经开始的 turn 不被打断。
119
+
120
+ ## 覆盖链
121
+
122
+ ```
123
+ defaults → agent/config → relation/config
124
+ ```
125
+
126
+ ConfigManager 只合并上述物理层并返回物理来源。角色策略不进入配置合并链:`permissionMode` 和 `baseagents.*.model` 由消费方按当前角色单独应用。
127
+
128
+ ### Agent 消息准入策略
129
+
130
+ 消息准入策略保存在 `agents/<aid>/config.json` 的 `access` 字段,但它是 Agent 自身的安全边界,
131
+ 不参与 defaults/relation 有效覆盖:
132
+
133
+ ```json
134
+ {
135
+ "access": {
136
+ "policyMode": "contacts",
137
+ "requestLimit": { "maxTimes": 600, "coolDown": 3600 }
138
+ }
139
+ }
140
+ ```
141
+
142
+ `policyMode` 为 `open | contacts | owners`;`open` 对所有已配置渠道的私聊和群聊入站开放,`contacts`
143
+ 将 Agent 已加入并接收到的群聊视为授权,`owners` 仅 Owner 消息开放;群聊成员不按 Contact Book 联系人
144
+ 状态逐一过滤。`requestLimit` 只限制准入控制消息的自动回复、申请和绑定码提示,不是渠道准入开关;`coolDown`
145
+ 单位为秒。该对象由 Connect 的访问设置入口修改,不通过通用 relation/defaults 覆盖链放宽。
146
+
147
+ ### AUN 群规则加载策略
148
+
149
+ `groupRules.mode` 可设为 `load` 或 `ignore`,缺省为 `load`。该字段仅存在于 Agent 和 relation
150
+ 层,relation 可覆盖 Agent 默认值,`--default` 不支持。
151
+
152
+ ```bash
153
+ # Agent 默认值
154
+ ec config set groupRules.mode ignore --self bot.agentid.pub
155
+
156
+ # 当前群覆盖
157
+ ec config set groupRules.mode load \
158
+ --self bot.agentid.pub --peer aun#g-team.agentid.pub
159
+
160
+ # 查看有效值和来源 / 删除群覆盖
161
+ ec config get groupRules.mode \
162
+ --self bot.agentid.pub --peer aun#g-team.agentid.pub --format json
163
+ ec config unset groupRules.mode \
164
+ --self bot.agentid.pub --peer aun#g-team.agentid.pub
165
+ ```
166
+
167
+ `ignore` 表示运行时不访问远端群规则、不读本地物化文件、不注入规则正文,但不删除缓存,也不影响
168
+ `ec group rules` 的远端管理命令。配置切换不会自动创建或清空会话。Claude/Codex 从后续新 turn
169
+ 按当前值重新组装上下文;其他 runner 的 Menu 写入结果会提示新建或清空群会话后生效。
170
+
171
+ ## 权限控制
172
+
173
+ **写权限**(API 层判定):
174
+ - **通用可写字段**:active_baseagent / baseagents / chatmode / show_activities / flush_delay / debounce / render
175
+ - **角色专用入口**:`roles/index.json` 与 `roles/{roleId}.json` 由角色服务维护;relation 的
176
+ `role` 由角色分配服务维护;`permissionMode` 仅在角色策略中维护
177
+ - **兼容字段**:`enable_rich_content` 仍可读取旧值,但已废弃且不再产生运行时效果
178
+ - **群规则策略**:`groupRules.mode` 仅当前 Agent 的实际 owner 可 set/unset;DaemonOwner 不继承群或 relation 写权限,其他角色可读取当前 relation 的有效值
179
+ - **源码诊断白名单**:`readonlySourceDiagnostics` 默认关闭;开启后只读会话仅可在项目源码目录执行受限、可证明只读查询,配置/证书/快照/session/锁文件仍禁止访问
180
+ - **仅人可写**:channels / owners / admins / 凭证 / aid / enabled / projects / aun / models.allowed
181
+ - Agent 托管环境写仅人字段被拒
182
+
183
+ **操作权限**:
184
+ - 读操作(get/show/list/effective/fields/schema/history/diff/current/boots/validate):人和 agent 均可
185
+ - 快照管理(snapshot/restore/init/prune):仅人可执行
186
+
187
+ **凭证安全**:
188
+ - 凭证一律 `${VAR}` 引用,CLI 读命令永不展开、不泄露明文
189
+ - `.env` 全程禁读写
190
+
191
+ ## 通用约定
192
+
193
+ - `--format json` — 所有子命令通用
194
+ - 本命令操作本地配置,不连 AUN 网络
195
+ - 单文件内 list 字段 `set` = 追加去重;删单个元素请直接编辑文件(角色/owner 链只增不减)