evolcore 0.0.1 → 0.0.2

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 (371) hide show
  1. package/CHANGELOG.md +813 -0
  2. package/LICENSE +21 -0
  3. package/MIGRATION-0.5.0.md +378 -0
  4. package/README.md +318 -14
  5. package/ROLE_ACCESS_CONTROL.md +174 -0
  6. package/assets/.env.template +4 -0
  7. package/assets/brand/evolcore/README.md +19 -0
  8. package/assets/brand/evolcore/evolcore-app-icon.png +0 -0
  9. package/assets/brand/evolcore/evolcore-app-icon.svg +13 -0
  10. package/assets/brand/evolcore/evolcore-brand-board.png +0 -0
  11. package/assets/brand/evolcore/evolcore-brand-board.svg +126 -0
  12. package/assets/brand/evolcore/evolcore-logo-kit.zip +0 -0
  13. package/assets/brand/evolcore/evolcore-logo-reverse.png +0 -0
  14. package/assets/brand/evolcore/evolcore-logo-reverse.svg +14 -0
  15. package/assets/brand/evolcore/evolcore-logo.png +0 -0
  16. package/assets/brand/evolcore/evolcore-logo.svg +14 -0
  17. package/assets/brand/evolcore/evolcore-mark.png +0 -0
  18. package/assets/brand/evolcore/evolcore-mark.svg +10 -0
  19. package/bin/ec-safe-output.js +161 -0
  20. package/bin/ec.js +29 -0
  21. package/dist/agents/baseagent.js +163 -0
  22. package/dist/agents/claude-runner.js +2385 -0
  23. package/dist/agents/codex-app-server-client.js +448 -0
  24. package/dist/agents/codex-runner.js +2639 -0
  25. package/dist/agents/gemini-runner.js +666 -0
  26. package/dist/agents/runner-types.js +75 -0
  27. package/dist/aun/aid/agentmd.js +216 -0
  28. package/dist/aun/aid/client.js +132 -0
  29. package/dist/aun/aid/control-aid.js +91 -0
  30. package/dist/aun/aid/identity.js +518 -0
  31. package/dist/aun/aid/index.js +4 -0
  32. package/dist/aun/aid/store.js +74 -0
  33. package/dist/aun/aid/types.js +1 -0
  34. package/dist/aun/aid/validation.js +21 -0
  35. package/dist/aun/group-identity.js +10 -0
  36. package/dist/aun/msg/group-index.js +6 -0
  37. package/dist/aun/msg/group.js +1231 -0
  38. package/dist/aun/msg/history.js +123 -0
  39. package/dist/aun/msg/index.js +5 -0
  40. package/dist/aun/msg/p2p.js +393 -0
  41. package/dist/aun/msg/payload-type.js +27 -0
  42. package/dist/aun/msg/upload.js +137 -0
  43. package/dist/aun/outbox.js +160 -0
  44. package/dist/aun/rpc/caller.js +42 -0
  45. package/dist/aun/rpc/connection.js +25 -0
  46. package/dist/aun/rpc/index.js +2 -0
  47. package/dist/aun/service-proxy.js +225 -0
  48. package/dist/aun/storage/download.js +29 -0
  49. package/dist/aun/storage/index.js +3 -0
  50. package/dist/aun/storage/manage.js +10 -0
  51. package/dist/aun/storage/upload.js +68 -0
  52. package/dist/channels/aun.js +4147 -0
  53. package/dist/channels/daemon.js +422 -0
  54. package/dist/channels/dingtalk.js +649 -0
  55. package/dist/channels/feishu.js +1789 -0
  56. package/dist/channels/qqbot.js +409 -0
  57. package/dist/channels/wechat.js +817 -0
  58. package/dist/channels/wecom.js +565 -0
  59. package/dist/cli/agent-command.js +641 -0
  60. package/dist/cli/agent.js +1059 -0
  61. package/dist/cli/aun-commands.js +1948 -0
  62. package/dist/cli/bench.js +1228 -0
  63. package/dist/cli/cli-argv.js +66 -0
  64. package/dist/cli/code-stats.js +329 -0
  65. package/dist/cli/command-log.js +82 -0
  66. package/dist/cli/config-selector.js +69 -0
  67. package/dist/cli/config.js +261 -0
  68. package/dist/cli/ctl-command.js +62 -0
  69. package/dist/cli/daemon-commands.js +2887 -0
  70. package/dist/cli/fs-command.js +1447 -0
  71. package/dist/cli/handoff-command.js +302 -0
  72. package/dist/cli/help.js +31 -0
  73. package/dist/cli/index.js +358 -0
  74. package/dist/cli/init-channel.js +1377 -0
  75. package/dist/cli/init.js +553 -0
  76. package/dist/cli/link-rules.js +240 -0
  77. package/dist/cli/model.js +590 -0
  78. package/dist/cli/net-check.js +723 -0
  79. package/dist/cli/queue-command.js +126 -0
  80. package/dist/cli/response.js +345 -0
  81. package/dist/cli/restart-monitor.js +456 -0
  82. package/dist/cli/stats.js +607 -0
  83. package/dist/cli/task-context.js +80 -0
  84. package/dist/cli/trigger-command.js +505 -0
  85. package/dist/cli/version.js +88 -0
  86. package/dist/cli/watch-logs.js +33 -0
  87. package/dist/cli/watch-msg.js +673 -0
  88. package/dist/config/boot-log.js +266 -0
  89. package/dist/config/builtin-role-templates.js +30 -0
  90. package/dist/config/builtin-roles.js +85 -0
  91. package/dist/config/config-batch-get.js +11 -0
  92. package/dist/config/config-field-policy.js +261 -0
  93. package/dist/config/config-manager.js +916 -0
  94. package/dist/config/config-operation-service.js +384 -0
  95. package/dist/config/contact-book.js +371 -0
  96. package/dist/config/gateway-config.js +858 -0
  97. package/dist/config/lifecycle.js +17 -0
  98. package/dist/config/mention-mode.js +27 -0
  99. package/dist/config/merge.js +161 -0
  100. package/dist/config/owner-policy.js +4 -0
  101. package/dist/config/peer-role-resolver.js +139 -0
  102. package/dist/config/resolved-config-op.js +483 -0
  103. package/dist/config/role-config-v4-startup.js +32 -0
  104. package/dist/config/role-config-v5-startup.js +27 -0
  105. package/dist/config/role-schema.js +105 -0
  106. package/dist/config/role-service.js +159 -0
  107. package/dist/config/role-store.js +204 -0
  108. package/dist/config/roles.js +55 -0
  109. package/dist/config/schema-registry.js +154 -0
  110. package/dist/config/snapshot.js +598 -0
  111. package/dist/config-store.js +503 -0
  112. package/dist/core/auth/agent-delegation.js +111 -0
  113. package/dist/core/auth/auth-gateway.js +166 -0
  114. package/dist/core/auth/authenticated-actor.js +6 -0
  115. package/dist/core/auth/authorization-audit.js +110 -0
  116. package/dist/core/auth/operation-authorizer.js +718 -0
  117. package/dist/core/auth/operation-catalog.js +675 -0
  118. package/dist/core/baseagent-loader.js +54 -0
  119. package/dist/core/bootstrap-service.js +175 -0
  120. package/dist/core/capability/capability-manager.js +316 -0
  121. package/dist/core/capability/providers/claude-capability-provider.js +176 -0
  122. package/dist/core/capability/providers/codex-capability-provider.js +148 -0
  123. package/dist/core/capability/providers/gemini-capability-provider.js +10 -0
  124. package/dist/core/capability/types.js +27 -0
  125. package/dist/core/causation/audit.js +103 -0
  126. package/dist/core/causation/aun-association.js +111 -0
  127. package/dist/core/causation/context.js +93 -0
  128. package/dist/core/causation/index.js +4 -0
  129. package/dist/core/causation/types.js +2 -0
  130. package/dist/core/channel-loader.js +277 -0
  131. package/dist/core/command/agent-control.js +616 -0
  132. package/dist/core/command/cli-intent-parser.js +225 -0
  133. package/dist/core/command/command-handler.js +1638 -0
  134. package/dist/core/command/menu-handler.js +3354 -0
  135. package/dist/core/command/menu-protocol.js +247 -0
  136. package/dist/core/command/role-menu.js +1524 -0
  137. package/dist/core/command/slash-gate.js +148 -0
  138. package/dist/core/command/slash-handler.js +3056 -0
  139. package/dist/core/daemon-file-cache.js +216 -0
  140. package/dist/core/event-bus.js +32 -0
  141. package/dist/core/event-catalog.js +740 -0
  142. package/dist/core/evolagent-registry.js +546 -0
  143. package/dist/core/evolagent.js +331 -0
  144. package/dist/core/handoff/dispatcher.js +229 -0
  145. package/dist/core/handoff/mutex.js +46 -0
  146. package/dist/core/handoff/runtime.js +324 -0
  147. package/dist/core/handoff/store.js +537 -0
  148. package/dist/core/handoff/types.js +12 -0
  149. package/dist/core/inference/text-inference.js +173 -0
  150. package/dist/core/interaction-registration.js +10 -0
  151. package/dist/core/interaction-router.js +278 -0
  152. package/dist/core/message/create-status.js +67 -0
  153. package/dist/core/message/im-renderer.js +657 -0
  154. package/dist/core/message/items-formatter.js +76 -0
  155. package/dist/core/message/logical-queue-bridge.js +123 -0
  156. package/dist/core/message/message-bridge.js +803 -0
  157. package/dist/core/message/message-cache.js +56 -0
  158. package/dist/core/message/message-log.js +339 -0
  159. package/dist/core/message/message-processor.js +4 -0
  160. package/dist/core/message/message-queue.js +1436 -0
  161. package/dist/core/message/message-utils.js +70 -0
  162. package/dist/core/message/peer-mode.js +105 -0
  163. package/dist/core/message/pending-hints.js +232 -0
  164. package/dist/core/message/response-depth.js +33 -0
  165. package/dist/core/message/response-engine.js +3776 -0
  166. package/dist/core/message/response-snapshot.js +83 -0
  167. package/dist/core/message/stream-debouncer.js +130 -0
  168. package/dist/core/message/stream-idle-monitor.js +124 -0
  169. package/dist/core/model/config-scope.js +162 -0
  170. package/dist/core/model/field-scope.js +78 -0
  171. package/dist/core/model/model-catalog.js +227 -0
  172. package/dist/core/model/model-diagnostics.js +182 -0
  173. package/dist/core/model/model-permission.js +90 -0
  174. package/dist/core/permission/approval-gateway.js +1017 -0
  175. package/dist/core/permission/ec-command-parser.js +347 -0
  176. package/dist/core/permission/execution-sandbox.js +16 -0
  177. package/dist/core/permission/index.js +6 -0
  178. package/dist/core/permission/mode.js +24 -0
  179. package/dist/core/permission/sandbox-runtime.js +265 -0
  180. package/dist/core/permission/tool-policy.js +987 -0
  181. package/dist/core/permission/unix-socket-policy.js +99 -0
  182. package/dist/core/protected-paths.js +330 -0
  183. package/dist/core/relation/peer-identity.js +222 -0
  184. package/dist/core/relation/peer-key.js +1 -0
  185. package/dist/core/role/runtime-policy.js +141 -0
  186. package/dist/core/session/adapters/claude-session-file-adapter.js +218 -0
  187. package/dist/core/session/adapters/codex-session-file-adapter.js +333 -0
  188. package/dist/core/session/adapters/gemini-session-file-adapter.js +181 -0
  189. package/dist/core/session/session-file-adapter.js +7 -0
  190. package/dist/core/session/session-file-health.js +45 -0
  191. package/dist/core/session/session-fs-store.js +232 -0
  192. package/dist/core/session/session-key.js +24 -0
  193. package/dist/core/session/session-manager.js +1587 -0
  194. package/dist/core/session/session-mapper.js +100 -0
  195. package/dist/core/session/session-renew.js +314 -0
  196. package/dist/core/session/session-title.js +128 -0
  197. package/dist/core/session/session-turn-coordinator.js +205 -0
  198. package/dist/core/session/session-turns.js +67 -0
  199. package/dist/core/system-channels.js +29 -0
  200. package/dist/eck/baseagent-caps.js +18 -0
  201. package/dist/eck/detect.js +47 -0
  202. package/dist/eck/group-rules-sync.js +345 -0
  203. package/dist/eck/init.js +77 -0
  204. package/dist/eck/kit-renderer.js +359 -0
  205. package/dist/eck/manifest-engine.js +446 -0
  206. package/dist/eck/message-renderer.js +199 -0
  207. package/dist/eck/rules-loader.js +28 -0
  208. package/dist/index.js +2870 -4
  209. package/dist/ipc.js +748 -0
  210. package/dist/paths.js +262 -0
  211. package/dist/product.js +18 -0
  212. package/dist/response-system/context-builder.js +71 -0
  213. package/dist/response-system/coordinator.js +117 -0
  214. package/dist/response-system/decision-executor.js +86 -0
  215. package/dist/response-system/engines/v1/index.js +21 -0
  216. package/dist/response-system/engines/v1/interactive-flow.js +27 -0
  217. package/dist/response-system/engines/v1/proactive-flow.js +137 -0
  218. package/dist/response-system/engines/v1/types.js +1 -0
  219. package/dist/response-system/extensions.js +41 -0
  220. package/dist/response-system/index.js +6 -0
  221. package/dist/response-system/modes/index.js +7 -0
  222. package/dist/response-system/modes/single-session/index.js +72 -0
  223. package/dist/response-system/queues/fifo-queue.js +44 -0
  224. package/dist/response-system/queues/index.js +6 -0
  225. package/dist/response-system/queues/lifo-queue.js +42 -0
  226. package/dist/response-system/queues/priority-queue.js +63 -0
  227. package/dist/response-system/registry.js +97 -0
  228. package/dist/response-system/resolver.js +37 -0
  229. package/dist/response-system/selector.js +23 -0
  230. package/dist/response-system/types.js +7 -0
  231. package/dist/stats/billing.js +151 -0
  232. package/dist/stats/budget.js +93 -0
  233. package/dist/stats/db.js +403 -0
  234. package/dist/stats/eck-vars.js +89 -0
  235. package/dist/stats/index.js +11 -0
  236. package/dist/stats/normalizer.js +80 -0
  237. package/dist/stats/price-resolver.js +138 -0
  238. package/dist/stats/query.js +763 -0
  239. package/dist/stats/role-budget.js +168 -0
  240. package/dist/stats/writer.js +151 -0
  241. package/dist/trigger/anomaly-store.js +258 -0
  242. package/dist/trigger/audit.js +152 -0
  243. package/dist/trigger/event-source.js +119 -0
  244. package/dist/trigger/feedback.js +685 -0
  245. package/dist/trigger/history.js +290 -0
  246. package/dist/trigger/manager.js +291 -0
  247. package/dist/trigger/parser.js +520 -0
  248. package/dist/trigger/patch.js +148 -0
  249. package/dist/trigger/scheduler.js +1600 -0
  250. package/dist/trigger/script-executor.js +155 -0
  251. package/dist/trigger/state.js +145 -0
  252. package/dist/trigger/types.js +1 -0
  253. package/dist/trigger/validation.js +621 -0
  254. package/dist/types.js +12 -0
  255. package/dist/utils/aid-bind.js +299 -0
  256. package/dist/utils/atomic-write.js +95 -0
  257. package/dist/utils/avatar-upload.js +123 -0
  258. package/dist/utils/cross-platform.js +297 -0
  259. package/dist/utils/ecweb-utils.js +73 -0
  260. package/dist/utils/error-dict.json +153 -0
  261. package/dist/utils/error-utils.js +349 -0
  262. package/dist/utils/instance-registry.js +437 -0
  263. package/dist/utils/locale.js +21 -0
  264. package/dist/utils/log-writer.js +224 -0
  265. package/dist/utils/logger.js +89 -0
  266. package/dist/utils/markdown-to-plain-text.js +20 -0
  267. package/dist/utils/media-cache.js +271 -0
  268. package/dist/utils/model-prices.jsonl +17 -0
  269. package/dist/utils/npm-ops.js +210 -0
  270. package/dist/utils/process-introspect.js +133 -0
  271. package/dist/utils/process-tree-stats.js +271 -0
  272. package/dist/utils/project-path.js +74 -0
  273. package/dist/utils/stats.js +410 -0
  274. package/dist/utils/tool-summary.js +284 -0
  275. package/dist/utils/welcome.js +268 -0
  276. package/kits/docs/GUIDE.md +20 -0
  277. package/kits/docs/INDEX.md +65 -0
  278. package/kits/docs/aun/CHEATSHEET.md +19 -0
  279. package/kits/docs/aun/SYNC_PROTOCOL.md +15 -0
  280. package/kits/docs/channels/aun.md +65 -0
  281. package/kits/docs/channels/feishu.md +56 -0
  282. package/kits/docs/context-assembly.md +366 -0
  283. package/kits/docs/eck_templates/GUIDE.template.md +22 -0
  284. package/kits/docs/eck_templates/INDEX.template.md +28 -0
  285. package/kits/docs/eck_templates/path-registry.template.md +33 -0
  286. package/kits/docs/eck_templates/runtime.template.md +19 -0
  287. package/kits/docs/evolcore/INDEX.md +66 -0
  288. package/kits/docs/evolcore/agent.md +69 -0
  289. package/kits/docs/evolcore/aid.md +49 -0
  290. package/kits/docs/evolcore/config.md +149 -0
  291. package/kits/docs/evolcore/ctl.md +46 -0
  292. package/kits/docs/evolcore/event.md +216 -0
  293. package/kits/docs/evolcore/fs-architecture.md +1215 -0
  294. package/kits/docs/evolcore/fs.md +101 -0
  295. package/kits/docs/evolcore/group-fs.md +17 -0
  296. package/kits/docs/evolcore/group-rules.md +226 -0
  297. package/kits/docs/evolcore/group.md +141 -0
  298. package/kits/docs/evolcore/model.md +47 -0
  299. package/kits/docs/evolcore/msg.md +130 -0
  300. package/kits/docs/evolcore/response.md +80 -0
  301. package/kits/docs/evolcore/rpc.md +35 -0
  302. package/kits/docs/evolcore/self-summary.md +29 -0
  303. package/kits/docs/evolcore/stats.md +70 -0
  304. package/kits/docs/evolcore/storage.md +49 -0
  305. package/kits/docs/evolcore/trigger.md +524 -0
  306. package/kits/docs/identity/AID_PROFILE_SPEC.md +26 -0
  307. package/kits/docs/identity/PATH_OPS.md +16 -0
  308. package/kits/docs/identity/ROLE_DETAIL.md +23 -0
  309. package/kits/docs/identity/identity-tools.md +26 -0
  310. package/kits/docs/path-registry.md +43 -0
  311. package/kits/docs/prompt-loading-architecture.md +266 -0
  312. package/kits/docs/venues/aun-group.md +45 -0
  313. package/kits/docs/venues/aun-private.md +10 -0
  314. package/kits/docs/venues/client-desktop.md +10 -0
  315. package/kits/docs/venues/client-mobile.md +10 -0
  316. package/kits/docs/venues/feishu-group.md +13 -0
  317. package/kits/docs/venues/feishu-private.md +9 -0
  318. package/kits/docs/venues/group.md +25 -0
  319. package/kits/docs/venues/private.md +10 -0
  320. package/kits/eck_manifest.auxiliary.json +43 -0
  321. package/kits/eck_manifest.json +191 -0
  322. package/kits/eck_message_manifest.json +63 -0
  323. package/kits/migrations/README-role-config-v4.md +32 -0
  324. package/kits/migrations/migrate-role-config-v4.mjs +623 -0
  325. package/kits/migrations/migrate-role-config-v5.mjs +346 -0
  326. package/kits/migrations/rename-config-file.mjs +99 -0
  327. package/kits/rules/01-overview.md +142 -0
  328. package/kits/rules/02-navigation.md +76 -0
  329. package/kits/rules/03-identity.md +34 -0
  330. package/kits/rules/04-relation.md +59 -0
  331. package/kits/rules/05-venue.md +44 -0
  332. package/kits/rules/06-channel.md +59 -0
  333. package/kits/schemas/_meta.json +29 -0
  334. package/kits/schemas/agent-config.schema.1.json +177 -0
  335. package/kits/schemas/agent-config.schema.2.json +239 -0
  336. package/kits/schemas/agent-config.schema.3.json +119 -0
  337. package/kits/schemas/agent-config.schema.4.json +208 -0
  338. package/kits/schemas/agent-config.schema.5.json +326 -0
  339. package/kits/schemas/contact-book.schema.1.json +36 -0
  340. package/kits/schemas/daemon.schema.1.json +90 -0
  341. package/kits/schemas/defaults.schema.1.json +81 -0
  342. package/kits/schemas/menu-exec-schema-commands.md +208 -0
  343. package/kits/schemas/migrations/README.md +28 -0
  344. package/kits/schemas/relation-config.schema.1.json +158 -0
  345. package/kits/schemas/relation-config.schema.2.json +73 -0
  346. package/kits/schemas/relation-config.schema.3.json +50 -0
  347. package/kits/schemas/relation-config.schema.4.json +47 -0
  348. package/kits/schemas/role-config.schema.1.json +200 -0
  349. package/kits/schemas/role-registry.schema.1.json +35 -0
  350. package/kits/schemas/single-session.schema.1.json +31 -0
  351. package/kits/templates/bootstrap-welcome.md +15 -0
  352. package/kits/templates/message-fragments/handoff-request-to-target.md +13 -0
  353. package/kits/templates/message-fragments/handoff-response-to-origin.md +10 -0
  354. package/kits/templates/message-fragments/inject-default.md +2 -0
  355. package/kits/templates/message-fragments/item.md +2 -0
  356. package/kits/templates/roles/admin.json +8 -0
  357. package/kits/templates/roles/member.json +40 -0
  358. package/kits/templates/roles/owner.json +8 -0
  359. package/kits/templates/roles/visitor.json +39 -0
  360. package/kits/templates/system-fragments/baseagent.md +14 -0
  361. package/kits/templates/system-fragments/bootstrap.md +16 -0
  362. package/kits/templates/system-fragments/channel.md +48 -0
  363. package/kits/templates/system-fragments/commands.md +26 -0
  364. package/kits/templates/system-fragments/identity.md +11 -0
  365. package/kits/templates/system-fragments/relation.md +19 -0
  366. package/kits/templates/system-fragments/session.md +53 -0
  367. package/kits/templates/system-fragments/venue.md +31 -0
  368. package/package.json +50 -15
  369. package/dist/index.d.ts +0 -7
  370. package/dist/index.d.ts.map +0 -1
  371. package/dist/index.js.map +0 -1
@@ -0,0 +1,34 @@
1
+ # 身份层:我是谁
2
+
3
+ 身份层包含当前 agent 的一切自我认知。动态注入的 `$SELF_AID` 和 `$SELF_NAME` 标识当前身份。
4
+
5
+ ## 数据位置
6
+
7
+ | 位置 | 内容 |
8
+ |------|------|
9
+ | `$SELF_DIR`(`$AGENT_DIR/personal/`) | 个人数据(可写) |
10
+ | `$KITS_DOCS/identity/` | 身份层详细规则(只读,按需加载) |
11
+
12
+ ## 数据结构
13
+
14
+ | 文件 | 用途 |
15
+ |------|------|
16
+ | `persona.md` | 人格(行为规范、心理独白、身份认知) |
17
+ | `memory/episodic.jsonl` | 事件性记忆("我经历了什么") |
18
+ | `memory/semantic.md` | 语义性记忆(习得的事实/规律) |
19
+ | `memory/working.md` | 当前关注(短期,每会话加载) |
20
+ | `style.md` | 表达风格(用词偏好、句式偏好) |
21
+ | `preferences.json` | 工具/模型/操作偏好 |
22
+ | `skills/` | 技能清单(`_index.json` + 每技能一文件) |
23
+ | `goals.md` | 长期目标 |
24
+ | `journal.jsonl` | 反思日志(关键决策、自我修订) |
25
+
26
+ ## 行为规范加载
27
+
28
+ ```
29
+ evolcore 注入了当前 AID?
30
+ ├─ 是 → Read $SELF_DIR/persona.md,执行其中行为规范
31
+ └─ 否(coding 模式)→ 使用默认行为
32
+ ```
33
+
34
+ 不同 AID 可以有不同人格——切换身份即切换行为。
@@ -0,0 +1,59 @@
1
+ # 关系层:跟我聊天的是谁
2
+
3
+ 关系层管理你对所有对端的认知。动态注入的 `peerKey`(`<channel>#<urlEncode(peerId)>`)是对端在所有渠道中的稳定标识。`peerId` 是对端在当前渠道的原生 ID(AUN 是 AID,飞书是 user_id 等),`channel` 是当前渠道类型。
4
+
5
+ **对端包括群**:AID 四类型(human/agent/group/service,见 `01-overview.md`)对你而言都是对端,数据都在关系层。
6
+ - 私聊:`peerId` = 对端 ID,`peerKey` = `<channel>#<对端ID>`。
7
+ - 群聊:`peerId` = **群 ID**(群本身的 AID / 渠道群 ID),群内所有发言者共用同一个 `peerKey`(群的键)。群规则、群 profile 等**具体群实例数据**落 `$RELATIONS_DIR/<peerKey>/`(如群规则物化到 `relations/<peerKey>/rules.md`)。
8
+
9
+ > 为什么用 `peerId` 而非直接用 AID:非 AUN 渠道的对端(飞书群、微信)没有 AID,用 `<channel>#<peerId>` 才能统一覆盖所有渠道的对端。
10
+
11
+ ## 数据位置
12
+
13
+ | 位置 | 内容 |
14
+ |------|------|
15
+ | `$RELATIONS_DIR`(`$AGENT_DIR/relations/`) | 关系数据(可写) |
16
+ | `$KITS_DOCS/relations/` | 关系层详细规则(只读,按需加载) |
17
+
18
+ ## 数据结构
19
+
20
+ ```
21
+ relations/
22
+ ├── _index/ 名字反查索引
23
+ │ └── name_<urlEncode(name)>.json { "name": "王老板", "channel": "feishu", "peerId": "ou_xxx", "peerKey": "feishu#ou_xxx" }
24
+ ├── <channel>#<urlEncode(peerId)>/ 每个对端一个目录(统一命名,不区分 contacts/_observed)
25
+ │ ├── profile.md 身份、关系评注、交互历史
26
+ │ └── history.jsonl 关系演化事件流
27
+ └── _trash/ merged/split 后的重定向占位
28
+ ```
29
+
30
+ **例子**:
31
+ - AUN 对端:`relations/aun#alice.aid.pub/`
32
+ - 飞书对端:`relations/feishu#ou_xxx/`
33
+ - 微信对端:`relations/wechat#wxid_xxx/`
34
+
35
+ ## 查找逻辑
36
+
37
+ | 场景 | 路径 |
38
+ |------|------|
39
+ | 已知 channel + peerId | 直接拼路径 `relations/<channel>#<urlEncode(peerId)>/` |
40
+ | 已知 name(如"给王老板发消息") | 读 `_index/name_<urlEncode(name)>.json` 拿到 peerKey,再拼路径 |
41
+
42
+ ## 对端身份与权限
43
+
44
+ | 身份 | 权限 |
45
+ |------|------|
46
+ | owner | agent 级最高关系权限,可执行 agent 管理和 owner 审批 |
47
+ | admin | agent 管理权限,不能修改 owner,危险操作向 owner 申请审批 |
48
+ | member | 任务型普通成员,默认使用 `auto` |
49
+ | visitor | 特选只读角色,默认使用 `readonly` |
50
+ | 自定义角色 | 按 agent 配置定义,未指定模式时默认按 `auto` |
51
+ | none | 无有效关系角色,拒绝访问 |
52
+
53
+ 进程级 daemon owner 是最高管理者;通过 agent channel 访问时,按设计映射为该 agent 的 `owner` 关系角色。
54
+
55
+ 兜底:无 token → coding 模式;token 残缺或角色无效 → `none`,拒绝访问。
56
+
57
+ ## 详细规则
58
+
59
+ 关系层的详细规则(直接交互判定、merge/split、profile.md 完整格式):Read `$KITS_DOCS/relations/` 中的相关文档。
@@ -0,0 +1,44 @@
1
+ # 环境层:当前对话场景
2
+
3
+ 环境层决定当前会话加载哪些信息。动态注入的 `chatType` 标识当前聊天类型(private/group/null),`venueUid` 是场所唯一标识(预留)。
4
+
5
+ ## 场景判定
6
+
7
+ | 场景 | 条件 | 加载的层 | 你的行为 |
8
+ |------|------|----------|----------|
9
+ | coding | 无 channel(无 token) | 仅 rules | 本地模式,每条消息都响应 |
10
+ | private | 单聊 | rules + 身份层 + 关系层(对端)+ 环境层 + 渠道层 | 自主模式,通过 CLI 回复 |
11
+ | group | 群聊 | rules + 身份层 + 关系层(群)+ 环境层 + 渠道层 | 自主模式,mentionMode 决定响应策略 |
12
+
13
+ ## 数据位置
14
+
15
+ | 位置 | 内容 |
16
+ |------|------|
17
+ | `$VENUES_DIR`(`$AGENT_DIR/venues/`) | 环境数据(可写,预留) |
18
+ | `$KITS_DOCS/venues/` | 环境层详细规则(只读,按需加载) |
19
+
20
+ > **重要**:环境层承载比"单个群/私聊实例"更高的抽象(如组织、类型级共性),**不为具体群/私聊实例建目录**。
21
+ > 具体群实例的数据(如群规则 `rules.md`、群 profile)落**关系层** `$RELATIONS_DIR/<peerKey>/`。
22
+
23
+ ## Venue 类型抽象
24
+
25
+ 环境层关注的是**类型**,而非具体实例:
26
+
27
+ | 类型 | 含义 |
28
+ |------|------|
29
+ | private | 一对一私聊(类型抽象) |
30
+ | group | 群聊(类型抽象) |
31
+ | broadcast | 广播频道(类型抽象) |
32
+
33
+ `chatType`(private/group/coding)是类型级参数,属于环境层范畴。但"张三所在的 team-alpha 这个**具体群**"是关系层的对端实例,其数据落 `relations/<peerKey>/`。
34
+
35
+ ## 群规则(关系层数据)
36
+
37
+ AUN 群规则文件固定来自 `<group-aid>:/rules.md`。EvolCore 先读取 signed `rules.content`
38
+ 元信息并用远端 stat 的 `size + mtimeMs` 校验 `/rules.md`,一致后把远端字节原样物化到
39
+ **`$RELATIONS_DIR/<peerKey>/rules.md`**(群的 peerKey = `aun#<group-aid>`)并通过 manifest 注入。
40
+ 群规则可定义本群特有的工作流程、职责分工、交付格式、禁区和升级路径;当群规则与通用规则冲突时,
41
+ 优先遵守群规则,但不能越过系统安全、权限和用户明确指令。
42
+
43
+ 其它群资源不预先注入,需要时用 `ec fs ls/find/stat/cat <group-aid>:/...` 查询。
44
+ 不要把本地残留的 `rules.md` 当作权威源;只有本轮校验通过并暴露 `groupRulesPath` 时才使用。
@@ -0,0 +1,59 @@
1
+ # 渠道层:我通过什么通信
2
+
3
+ 渠道层决定你使用什么方式收发消息。动态注入的 `$CHANNEL_TYPE` 标识当前渠道。
4
+
5
+ ## 数据位置
6
+
7
+ | 位置 | 内容 |
8
+ |------|------|
9
+ | `$KITS_DOCS/channels/` | 各渠道的**知识文档**:配置、参数、特有机制(只读,按需加载) |
10
+ | `$AGENT_DIR/channels/` | 各渠道的运行时数据(可写) |
11
+
12
+ > 运行时"当前渠道怎么发消息"由动态注入的 `[channel]` 段决定(见下方通信规则);
13
+ > `$KITS_DOCS/channels/` 是**不依赖当前渠道**的知识库,任意会话都可按需 Read 任意渠道文档。
14
+
15
+ ## 通信规则
16
+
17
+ "当前这一刻怎么回复、怎么发消息"由动态注入的 `[channel]` 段决定——它能拿到 `chatMode`
18
+ 并按模式分流,是唯一的事实源。本节只讲**模式无关的恒定知识**。
19
+
20
+ 要点:
21
+ - **回复方式随 `chatMode` 走**,以 `[channel]` 段为准:
22
+ - interactive:直接输出即回复
23
+ - proactive:见 `[channel]` 段的机制说明(thought.put vs message.send)
24
+ - **附加能力与模式无关、始终需要 CLI**:发文件/图片/语音、@某人、加密、联系第三方
25
+ - **以自己的 AID 为发送者**;拿不到时退回 `ec ctl send "<text>"`
26
+
27
+ ### 命令返回值
28
+
29
+ - 成功:`ok` 或包含 `✓ 已发送 ...` 的输出(exit 0)
30
+ - 失败:`✗ ...` 错误信息(exit 非零)
31
+
32
+ 发送成功后**继续后续处理**。一次任务可能发 0 到多条消息不要因为看到"已发送"就反复发送同一条消息。
33
+
34
+ ## 命令集
35
+
36
+ **重要**:遇到明确触发词(费用/用量/统计/创建/查群等)时,优先查 `$KITS_DOCS/evolcore/INDEX.md`
37
+ 或直接试对应 ec 命令。`[commands]` 段仅列常用命令,完整目录在 INDEX.md。
38
+
39
+ 所有命令以 `ec` 为前缀,以自己的 AID 为发送者。**运行时按当前场景(有无对端/群、对端角色)注入的精简能力卡由 `commands` fragment 决定**(见动态注入的 `[commands]` 段)。
40
+
41
+ **完整命令集目录(含分类、触发词、适用场景)**:`$KITS_DOCS/evolcore/INDEX.md`。
42
+ 单个命令集的详细用法按需 Read 对应文档。
43
+
44
+ 共同约定:
45
+ - 以自己的 AID 为发送者
46
+ - 回复方式随 `chatMode` 走(见上方通信规则);附加能力(文件/@/加密/发第三方)任何模式下都用 CLI
47
+ - `--format json` 所有命令通用
48
+ - `--app <name>` 指定应用 slot
49
+
50
+ ## 各渠道知识文档(按需加载)
51
+
52
+ `$KITS_DOCS/channels/` 下每个渠道一份知识文档,内容是该渠道的**配置、参数、特有机制**——
53
+ 属于知识性内容,**不依赖**当前注入的渠道类型。需要了解某渠道怎么配置、有哪些参数、
54
+ 有哪些特别机制时,按需 Read 对应文档(在 aun 会话里也可查飞书,反之亦然)。
55
+
56
+ | 渠道 | 文档 | 触发词 |
57
+ |------|------|--------|
58
+ | AUN | `$KITS_DOCS/channels/aun.md` | aun 怎么配置/网关/E2EE/群 ID 格式/证书链 |
59
+ | 飞书 | `$KITS_DOCS/channels/feishu.md` | 飞书怎么配置/appId/合并转发/卡片/user_id |
@@ -0,0 +1,29 @@
1
+ {
2
+ "schemas": {
3
+ "daemon": { "currentVersion": 1 },
4
+ "defaults": { "currentVersion": 1 },
5
+ "agent-config": { "currentVersion": 5 },
6
+ "relation-config": { "currentVersion": 4 },
7
+ "contact-book": { "currentVersion": 1 },
8
+ "single-session": { "currentVersion": 1 },
9
+ "role-registry": { "currentVersion": 1 },
10
+ "role-config": { "currentVersion": 1 }
11
+ },
12
+ "history": [
13
+ { "schema": "daemon", "version": 1, "date": "2026-06-14", "description": "initial: process config (daemon.json)" },
14
+ { "schema": "defaults", "version": 1, "date": "2026-06-14", "description": "global defaults (models.allowed/projects/aun)" },
15
+ { "schema": "agent-config", "version": 1, "date": "2026-06-14", "description": "initial: agent config with all parameters unified in config.json" },
16
+ { "schema": "agent-config", "version": 2, "date": "2026-06-23", "description": "add lifecycle state for bootstrap flow; initialized retained for compatibility" },
17
+ { "schema": "agent-config", "version": 3, "date": "2026-07-08", "description": "move user role policy into agent config" },
18
+ { "schema": "relation-config", "version": 1, "date": "2026-06-14", "description": "initial: relation config" },
19
+ { "schema": "relation-config", "version": 2, "date": "2026-07-08", "description": "move user/group role assignments into relation config" },
20
+ { "schema": "relation-config", "version": 3, "date": "2026-07-16", "description": "persist relation target kind for unambiguous private/group classification" },
21
+ { "schema": "agent-config", "version": 4, "date": "2026-07-20", "description": "move permissionMode exclusively into role definitions" },
22
+ { "schema": "agent-config", "version": 5, "date": "2026-07-22", "description": "move role registry and definitions into the standalone roles domain" },
23
+ { "schema": "relation-config", "version": 4, "date": "2026-07-20", "description": "replace role assignment maps with a single top-level role pointer" },
24
+ { "schema": "contact-book", "version": 1, "date": "2026-07-10", "description": "agent contact aliases for cross-channel identity mapping" },
25
+ { "schema": "single-session", "version": 1, "date": "2026-07-15", "description": "response mode bucket schema: single-session params (chatMode delivery + proactive toggles); validates responseModeParams['single-session']" },
26
+ { "schema": "role-registry", "version": 1, "date": "2026-07-22", "description": "registered role ids and private/group defaults" },
27
+ { "schema": "role-config", "version": 1, "date": "2026-07-22", "description": "standalone role policy definition" }
28
+ ]
29
+ }
@@ -0,0 +1,177 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "agent-config.schema.1.json",
4
+ "title": "AgentConfig (agents/{aid}/config.json)",
5
+ "description": "单 agent 的身份、凭证、管控字段。覆盖链中级,覆盖 defaults。",
6
+ "x-logical-name": "agent-config",
7
+ "x-scope": "agent",
8
+ "type": "object",
9
+ "additionalProperties": false,
10
+ "required": ["aid", "channels"],
11
+ "properties": {
12
+ "$schema_version": { "type": "number", "default": 1, "x-merge": "scalar" },
13
+ "aid": { "type": "string", "description": "Agent 标识(必填)", "x-merge": "scalar" },
14
+ "enabled": { "type": "boolean", "description": "Agent 启用状态", "x-merge": "scalar" },
15
+ "initialized": { "type": "boolean", "description": "AUN 首次初始化标记", "x-merge": "scalar" },
16
+ "owners": {
17
+ "type": "array",
18
+ "items": { "type": "string" },
19
+ "description": "Agent owner(AID,沿链并集)",
20
+ "x-merge": "list"
21
+ },
22
+ "admins": {
23
+ "type": "array",
24
+ "items": { "type": "string" },
25
+ "description": "Agent 管理员(AID,沿链并集)",
26
+ "x-merge": "list"
27
+ },
28
+ "channels": {
29
+ "type": "array",
30
+ "items": { "type": "object" },
31
+ "description": "渠道实例(含 appSecret/token,应为 ${VAR} 引用)",
32
+ "x-merge": "list"
33
+ },
34
+ "aun": {
35
+ "type": "object",
36
+ "description": "该 agent 的 AUN 配置",
37
+ "x-merge": "dict",
38
+ "properties": {
39
+ "keystorePath": { "type": "string" },
40
+ "encryptionSeed": { "type": "string" },
41
+ "gatewayUrl": { "type": "string" }
42
+ }
43
+ },
44
+ "models": {
45
+ "type": "object",
46
+ "description": "模型白名单(覆盖 defaults)",
47
+ "x-merge": "dict",
48
+ "properties": {
49
+ "default": { "type": "string" },
50
+ "allowed": { "type": "array", "items": { "type": "string" } }
51
+ }
52
+ },
53
+ "active_baseagent": {
54
+ "type": "string",
55
+ "description": "当前活跃的 base agent(claude/codex/gemini)。暂存于此,待权限体系实现后迁移。",
56
+ "x-merge": "scalar"
57
+ },
58
+ "baseagents": {
59
+ "type": "object",
60
+ "description": "各 base agent 配置(model/effort/apiKey/baseUrl 等)。暂存于此,待权限体系实现后迁移。",
61
+ "x-merge": "dict"
62
+ },
63
+ "projects": {
64
+ "type": "object",
65
+ "description": "项目路径配置",
66
+ "x-merge": "dict",
67
+ "properties": {
68
+ "defaultPath": { "type": "string", "description": "Agent 项目路径" }
69
+ }
70
+ },
71
+ "debug": {
72
+ "type": "object",
73
+ "description": "调试配置",
74
+ "x-merge": "dict",
75
+ "properties": {
76
+ "logLevel": { "type": "string", "enum": ["DEBUG", "INFO", "WARN", "ERROR"] },
77
+ "flusherDiag": { "type": "boolean" },
78
+ "aunTrace": { "type": "boolean" },
79
+ "aunSdkLog": { "type": "boolean" },
80
+ "upmsg": { "type": "boolean" }
81
+ }
82
+ },
83
+ "observable": { "type": "boolean", "description": "观察者模式:入站/出站各转一份给 owners", "x-merge": "scalar" },
84
+ "chatmode": {
85
+ "type": "object",
86
+ "description": "聊天模式配置(private/group/nothuman)",
87
+ "x-merge": "dict",
88
+ "properties": {
89
+ "private": { "type": "string", "enum": ["interactive", "proactive"], "description": "私聊模式" },
90
+ "group": { "type": "string", "enum": ["interactive", "proactive"], "description": "群聊模式" },
91
+ "nothuman": { "type": "string", "enum": ["interactive", "proactive"], "description": "无人类场景模式" }
92
+ }
93
+ },
94
+ "dispatch": {
95
+ "type": "string",
96
+ "enum": ["mention", "broadcast", "none"],
97
+ "description": "群聊响应策略:mention=仅@时, broadcast=所有消息, none=不响应",
98
+ "x-merge": "scalar"
99
+ },
100
+ "response_modes": {
101
+ "type": "object",
102
+ "description": "响应模式配置(响应系统插件化)。default_private/default_group/configs/overrides 按第一层键合并",
103
+ "x-merge": "dict",
104
+ "properties": {
105
+ "default_private": { "type": "string", "description": "单聊默认响应模式 id" },
106
+ "default_group": { "type": "string", "description": "群聊默认响应模式 id" },
107
+ "configs": { "type": "object", "description": "各模式配置参数(modeId → 配置对象)" },
108
+ "overrides": { "type": "object", "description": "按对端/群覆盖(peerKey → {mode, config})" }
109
+ }
110
+ },
111
+ "extra_backup": {
112
+ "type": "array",
113
+ "description": "快照额外备份文件声明(不得指向 .env)",
114
+ "x-merge": "list",
115
+ "items": {
116
+ "type": "object",
117
+ "additionalProperties": false,
118
+ "properties": {
119
+ "path": { "type": "string" },
120
+ "pattern": { "type": "string" }
121
+ }
122
+ }
123
+ },
124
+ "lifecycle": {
125
+ "type": "string",
126
+ "enum": ["created", "bootstrapping", "active"],
127
+ "description": "Agent 生命周期状态",
128
+ "x-merge": "scalar"
129
+ },
130
+ "capabilities": {
131
+ "type": "object",
132
+ "description": "Agent 能力配置",
133
+ "x-merge": "dict"
134
+ },
135
+ "flush_delay": {
136
+ "type": "number",
137
+ "description": "消息 flush 间隔(毫秒)",
138
+ "x-merge": "scalar"
139
+ },
140
+ "debounce": {
141
+ "type": "number",
142
+ "description": "入站消息去抖间隔(毫秒)",
143
+ "x-merge": "scalar"
144
+ },
145
+ "show_activities": {
146
+ "type": "string",
147
+ "enum": ["all", "text", "none"],
148
+ "description": "中间活动可见性",
149
+ "x-merge": "scalar"
150
+ },
151
+ "proactive": {
152
+ "type": "object",
153
+ "description": "Proactive 模式策略配置",
154
+ "x-merge": "dict"
155
+ },
156
+ "render": {
157
+ "type": "object",
158
+ "description": "渲染配置",
159
+ "x-merge": "dict"
160
+ },
161
+ "enable_rich_content": {
162
+ "type": "boolean",
163
+ "description": "启用富内容渲染",
164
+ "x-merge": "scalar"
165
+ },
166
+ "permissionMode": {
167
+ "type": "string",
168
+ "description": "权限模式",
169
+ "x-merge": "scalar"
170
+ },
171
+ "roles": {
172
+ "type": "object",
173
+ "description": "角色配置(RBAC)",
174
+ "x-merge": "dict"
175
+ }
176
+ }
177
+ }
@@ -0,0 +1,239 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "agent-config.schema.2.json",
4
+ "title": "AgentConfig (agents/{aid}/config.json)",
5
+ "description": "单 agent 的身份、凭证、管控字段。覆盖链中级,覆盖 defaults。",
6
+ "x-logical-name": "agent-config",
7
+ "x-scope": "agent",
8
+ "type": "object",
9
+ "additionalProperties": false,
10
+ "required": ["aid", "channels"],
11
+ "properties": {
12
+ "$schema_version": { "type": "number", "default": 2, "x-merge": "scalar" },
13
+ "aid": { "type": "string", "description": "Agent 标识(必填)", "x-merge": "scalar" },
14
+ "enabled": { "type": "boolean", "description": "Agent 启用状态", "x-merge": "scalar" },
15
+ "lifecycle": {
16
+ "type": "string",
17
+ "enum": ["created", "bootstrapping", "active"],
18
+ "description": "Agent 生命周期状态:created → bootstrapping → active",
19
+ "x-merge": "scalar"
20
+ },
21
+ "initialized": { "type": "boolean", "description": "Deprecated: AUN 首次初始化标记,仅兼容旧配置", "x-merge": "scalar" },
22
+ "owners": {
23
+ "type": "array",
24
+ "items": {
25
+ "type": "string",
26
+ "pattern": "^[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?(?:\\.[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?){2,}$"
27
+ },
28
+ "uniqueItems": true,
29
+ "description": "Static agent owner AID allowlist. These owners resolve to owner before scoped role assignments and relation-level config.",
30
+ "x-merge": "list"
31
+ },
32
+ "channels": {
33
+ "type": "array",
34
+ "items": { "type": "object" },
35
+ "description": "渠道实例(含 appSecret/token,应为 ${VAR} 引用)",
36
+ "x-merge": "list"
37
+ },
38
+ "aun": {
39
+ "type": "object",
40
+ "description": "该 agent 的 AUN 配置",
41
+ "x-merge": "dict",
42
+ "properties": {
43
+ "keystorePath": { "type": "string" },
44
+ "encryptionSeed": { "type": "string" },
45
+ "gatewayUrl": { "type": "string" }
46
+ }
47
+ },
48
+ "models": {
49
+ "type": "object",
50
+ "description": "模型白名单(覆盖 defaults)",
51
+ "x-merge": "dict",
52
+ "properties": {
53
+ "default": { "type": "string" },
54
+ "allowed": { "type": "array", "items": { "type": "string" } }
55
+ }
56
+ },
57
+ "active_baseagent": {
58
+ "type": "string",
59
+ "description": "当前活跃的 base agent(claude/codex/gemini)。暂存于此,待权限体系实现后迁移。",
60
+ "x-merge": "scalar"
61
+ },
62
+ "baseagents": {
63
+ "type": "object",
64
+ "description": "各 base agent 配置(model/effort/apiKey/baseUrl 等)。暂存于此,待权限体系实现后迁移。",
65
+ "x-merge": "dict"
66
+ },
67
+ "projects": {
68
+ "type": "object",
69
+ "description": "项目路径配置",
70
+ "x-merge": "dict",
71
+ "properties": {
72
+ "defaultPath": { "type": "string", "description": "Agent 项目路径" }
73
+ }
74
+ },
75
+ "capabilities": {
76
+ "type": "object",
77
+ "description": "EvolCore 层能力策略(baseagent → type → mode/overrides)",
78
+ "x-merge": "dict",
79
+ "additionalProperties": {
80
+ "type": "object",
81
+ "additionalProperties": false,
82
+ "properties": {
83
+ "skill": {
84
+ "type": "object",
85
+ "additionalProperties": false,
86
+ "properties": {
87
+ "mode": { "type": "string", "enum": ["inherit", "all", "none"] },
88
+ "overrides": {
89
+ "type": "object",
90
+ "additionalProperties": { "type": "string", "enum": ["enabled", "disabled"] }
91
+ }
92
+ }
93
+ },
94
+ "mcp": {
95
+ "type": "object",
96
+ "additionalProperties": false,
97
+ "properties": {
98
+ "mode": { "type": "string", "enum": ["inherit", "all", "none"] },
99
+ "overrides": {
100
+ "type": "object",
101
+ "additionalProperties": { "type": "string", "enum": ["enabled", "disabled"] }
102
+ }
103
+ }
104
+ },
105
+ "plugin": {
106
+ "type": "object",
107
+ "additionalProperties": false,
108
+ "properties": {
109
+ "mode": { "type": "string", "enum": ["inherit", "all", "none"] },
110
+ "overrides": {
111
+ "type": "object",
112
+ "additionalProperties": { "type": "string", "enum": ["enabled", "disabled"] }
113
+ }
114
+ }
115
+ }
116
+ }
117
+ }
118
+ },
119
+ "debug": {
120
+ "type": "object",
121
+ "description": "调试配置",
122
+ "x-merge": "dict",
123
+ "properties": {
124
+ "logLevel": { "type": "string", "enum": ["DEBUG", "INFO", "WARN", "ERROR"] },
125
+ "flusherDiag": { "type": "boolean" },
126
+ "aunTrace": { "type": "boolean" },
127
+ "aunSdkLog": { "type": "boolean" },
128
+ "upmsg": { "type": "boolean" }
129
+ }
130
+ },
131
+ "observable": { "type": "boolean", "description": "观察者模式:入站/出站各转一份给 owner 角色对端", "x-merge": "scalar" },
132
+ "chatmode": {
133
+ "type": "object",
134
+ "description": "聊天模式配置(private/group/nothuman)",
135
+ "x-merge": "dict",
136
+ "properties": {
137
+ "private": { "type": "string", "enum": ["interactive", "proactive"], "description": "私聊模式" },
138
+ "group": { "type": "string", "enum": ["interactive", "proactive"], "description": "群聊模式" },
139
+ "nothuman": { "type": "string", "enum": ["interactive", "proactive"], "description": "无人类场景模式" }
140
+ }
141
+ },
142
+ "response_modes": {
143
+ "type": "object",
144
+ "description": "响应模式配置(响应系统插件化)。default_private/default_group/configs/overrides 按第一层键合并",
145
+ "x-merge": "dict",
146
+ "properties": {
147
+ "default_private": { "type": "string", "description": "单聊默认响应模式 id" },
148
+ "default_group": { "type": "string", "description": "群聊默认响应模式 id" },
149
+ "configs": { "type": "object", "description": "各模式配置参数(modeId → 配置对象)" },
150
+ "overrides": { "type": "object", "description": "按对端/群覆盖(peerKey → {mode, config})" }
151
+ }
152
+ },
153
+ "flush_delay": {
154
+ "type": "number",
155
+ "description": "消息 flush 间隔(秒)",
156
+ "x-merge": "scalar"
157
+ },
158
+ "debounce": {
159
+ "type": "number",
160
+ "description": "入站消息去抖间隔(秒)",
161
+ "x-merge": "scalar"
162
+ },
163
+ "dispatch": {
164
+ "type": "string",
165
+ "enum": ["mention", "broadcast"],
166
+ "description": "群聊分发策略:mention=仅@时响应, broadcast=广播响应",
167
+ "x-merge": "scalar"
168
+ },
169
+ "show_activities": {
170
+ "type": "string",
171
+ "enum": ["all", "text", "none"],
172
+ "description": "中间活动可见性",
173
+ "x-merge": "scalar"
174
+ },
175
+ "proactive": {
176
+ "type": "object",
177
+ "description": "Proactive 模式细粒度策略",
178
+ "x-merge": "dict",
179
+ "additionalProperties": false,
180
+ "properties": {
181
+ "pre_tool_1stmsgchk": {
182
+ "type": "boolean",
183
+ "description": "Proactive 下首次工具调用前必须先 send/file 表态"
184
+ },
185
+ "tool_use_reminder": {
186
+ "type": "boolean",
187
+ "description": "Proactive 下启用队列未读提醒和工具汇报提醒"
188
+ }
189
+ }
190
+ },
191
+ "render": {
192
+ "type": "object",
193
+ "description": "各渲染类型当前激活的 modeName",
194
+ "x-merge": "dict",
195
+ "additionalProperties": false,
196
+ "properties": {
197
+ "private": { "type": "string", "description": "私聊渲染模式名称" },
198
+ "group": { "type": "string", "description": "群聊渲染模式名称" },
199
+ "inject": { "type": "string", "description": "注入渲染模式名称" }
200
+ }
201
+ },
202
+ "enable_rich_content": {
203
+ "type": "boolean",
204
+ "description": "启用富内容渲染",
205
+ "x-merge": "scalar"
206
+ },
207
+ "permissionMode": {
208
+ "type": "string",
209
+ "description": "执行权限模式;公开值为 readonly/auto/request/bypass,历史 edit/plan/noask 在运行时安全迁移",
210
+ "x-merge": "scalar"
211
+ },
212
+ "roles": {
213
+ "type": "object",
214
+ "description": "角色级行为覆盖:role → { baseagents, permissionMode }",
215
+ "x-merge": "dict",
216
+ "additionalProperties": {
217
+ "type": "object",
218
+ "additionalProperties": false,
219
+ "properties": {
220
+ "baseagents": { "type": "object", "description": "角色级 baseagents 覆盖" },
221
+ "permissionMode": { "type": "string", "description": "角色级 permissionMode 覆盖" }
222
+ }
223
+ }
224
+ },
225
+ "extra_backup": {
226
+ "type": "array",
227
+ "description": "快照额外备份文件声明(不得指向 .env)",
228
+ "x-merge": "list",
229
+ "items": {
230
+ "type": "object",
231
+ "additionalProperties": false,
232
+ "properties": {
233
+ "path": { "type": "string" },
234
+ "pattern": { "type": "string" }
235
+ }
236
+ }
237
+ }
238
+ }
239
+ }