evolcore 0.0.1 → 0.0.3

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 (379) hide show
  1. package/CHANGELOG.md +64 -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/bin/ec-safe-output.js +161 -0
  8. package/bin/ec.js +29 -0
  9. package/dist/agents/baseagent.js +163 -0
  10. package/dist/agents/claude-runner.js +2565 -0
  11. package/dist/agents/codex-app-server-client.js +448 -0
  12. package/dist/agents/codex-runner.js +2682 -0
  13. package/dist/agents/gemini-runner.js +666 -0
  14. package/dist/agents/runner-types.js +75 -0
  15. package/dist/aun/aid/agentmd.js +216 -0
  16. package/dist/aun/aid/client.js +132 -0
  17. package/dist/aun/aid/control-aid.js +91 -0
  18. package/dist/aun/aid/identity.js +518 -0
  19. package/dist/aun/aid/index.js +4 -0
  20. package/dist/aun/aid/store.js +74 -0
  21. package/dist/aun/aid/types.js +1 -0
  22. package/dist/aun/aid/validation.js +21 -0
  23. package/dist/aun/group-identity.js +10 -0
  24. package/dist/aun/msg/group-index.js +6 -0
  25. package/dist/aun/msg/group.js +1231 -0
  26. package/dist/aun/msg/history.js +123 -0
  27. package/dist/aun/msg/index.js +5 -0
  28. package/dist/aun/msg/p2p.js +393 -0
  29. package/dist/aun/msg/payload-type.js +27 -0
  30. package/dist/aun/msg/upload.js +137 -0
  31. package/dist/aun/outbox.js +168 -0
  32. package/dist/aun/rpc/caller.js +42 -0
  33. package/dist/aun/rpc/connection.js +25 -0
  34. package/dist/aun/rpc/index.js +2 -0
  35. package/dist/aun/service-proxy.js +225 -0
  36. package/dist/aun/storage/download.js +29 -0
  37. package/dist/aun/storage/index.js +3 -0
  38. package/dist/aun/storage/manage.js +10 -0
  39. package/dist/aun/storage/upload.js +68 -0
  40. package/dist/channels/aun.js +4164 -0
  41. package/dist/channels/contact-bind-code.js +134 -0
  42. package/dist/channels/daemon.js +422 -0
  43. package/dist/channels/dingtalk.js +1479 -0
  44. package/dist/channels/feishu.js +1865 -0
  45. package/dist/channels/qqbot.js +409 -0
  46. package/dist/channels/wechat.js +817 -0
  47. package/dist/channels/wecom-card.js +101 -0
  48. package/dist/channels/wecom-onboarding.js +82 -0
  49. package/dist/channels/wecom-state.js +191 -0
  50. package/dist/channels/wecom.js +1157 -0
  51. package/dist/cli/agent-command.js +642 -0
  52. package/dist/cli/agent.js +1059 -0
  53. package/dist/cli/aun-commands.js +2003 -0
  54. package/dist/cli/bench.js +1228 -0
  55. package/dist/cli/cli-argv.js +66 -0
  56. package/dist/cli/code-stats.js +329 -0
  57. package/dist/cli/command-log.js +82 -0
  58. package/dist/cli/config-selector.js +69 -0
  59. package/dist/cli/config.js +261 -0
  60. package/dist/cli/contact.js +71 -0
  61. package/dist/cli/ctl-command.js +62 -0
  62. package/dist/cli/daemon-commands.js +2750 -0
  63. package/dist/cli/fs-command.js +1447 -0
  64. package/dist/cli/handoff-command.js +302 -0
  65. package/dist/cli/help.js +35 -0
  66. package/dist/cli/index.js +374 -0
  67. package/dist/cli/init-channel.js +1372 -0
  68. package/dist/cli/init.js +590 -0
  69. package/dist/cli/link-rules.js +240 -0
  70. package/dist/cli/model.js +591 -0
  71. package/dist/cli/net-check.js +723 -0
  72. package/dist/cli/queue-command.js +150 -0
  73. package/dist/cli/raw-key-input.js +25 -0
  74. package/dist/cli/response.js +344 -0
  75. package/dist/cli/restart-monitor.js +480 -0
  76. package/dist/cli/stats.js +609 -0
  77. package/dist/cli/task-context.js +80 -0
  78. package/dist/cli/trigger-command.js +545 -0
  79. package/dist/cli/version.js +93 -0
  80. package/dist/cli/watch-logs.js +33 -0
  81. package/dist/cli/watch-msg.js +673 -0
  82. package/dist/config/boot-log.js +266 -0
  83. package/dist/config/builtin-role-templates.js +42 -0
  84. package/dist/config/builtin-roles.js +91 -0
  85. package/dist/config/config-batch-get.js +11 -0
  86. package/dist/config/config-field-policy.js +261 -0
  87. package/dist/config/config-manager.js +1120 -0
  88. package/dist/config/config-operation-service.js +384 -0
  89. package/dist/config/contact-alias.js +68 -0
  90. package/dist/config/contact-book-store.js +454 -0
  91. package/dist/config/contact-book-v2-startup.js +35 -0
  92. package/dist/config/contact-book.js +224 -0
  93. package/dist/config/contact-operation-service.js +110 -0
  94. package/dist/config/gateway-config.js +858 -0
  95. package/dist/config/lifecycle.js +17 -0
  96. package/dist/config/mention-mode.js +27 -0
  97. package/dist/config/merge.js +161 -0
  98. package/dist/config/owner-policy.js +4 -0
  99. package/dist/config/peer-role-resolver.js +218 -0
  100. package/dist/config/resolved-config-op.js +483 -0
  101. package/dist/config/role-config-v4-startup.js +32 -0
  102. package/dist/config/role-config-v5-startup.js +27 -0
  103. package/dist/config/role-ranks.js +18 -0
  104. package/dist/config/role-schema.js +105 -0
  105. package/dist/config/role-service.js +156 -0
  106. package/dist/config/role-store.js +215 -0
  107. package/dist/config/roles.js +64 -0
  108. package/dist/config/schema-registry.js +154 -0
  109. package/dist/config/snapshot.js +598 -0
  110. package/dist/config-store.js +501 -0
  111. package/dist/core/auth/agent-delegation.js +111 -0
  112. package/dist/core/auth/auth-gateway.js +166 -0
  113. package/dist/core/auth/authenticated-actor.js +6 -0
  114. package/dist/core/auth/authorization-audit.js +119 -0
  115. package/dist/core/auth/operation-authorizer.js +720 -0
  116. package/dist/core/auth/operation-catalog.js +731 -0
  117. package/dist/core/baseagent-loader.js +54 -0
  118. package/dist/core/bootstrap-service.js +175 -0
  119. package/dist/core/capability/capability-manager.js +316 -0
  120. package/dist/core/capability/providers/claude-capability-provider.js +176 -0
  121. package/dist/core/capability/providers/codex-capability-provider.js +148 -0
  122. package/dist/core/capability/providers/gemini-capability-provider.js +10 -0
  123. package/dist/core/capability/types.js +27 -0
  124. package/dist/core/causation/audit.js +103 -0
  125. package/dist/core/causation/aun-association.js +111 -0
  126. package/dist/core/causation/context.js +93 -0
  127. package/dist/core/causation/index.js +4 -0
  128. package/dist/core/causation/types.js +2 -0
  129. package/dist/core/channel-loader.js +277 -0
  130. package/dist/core/command/agent-control.js +616 -0
  131. package/dist/core/command/cli-intent-parser.js +225 -0
  132. package/dist/core/command/command-handler.js +1733 -0
  133. package/dist/core/command/connect-menu.js +374 -0
  134. package/dist/core/command/menu-handler.js +3452 -0
  135. package/dist/core/command/menu-protocol.js +247 -0
  136. package/dist/core/command/role-menu.js +1623 -0
  137. package/dist/core/command/slash-gate.js +148 -0
  138. package/dist/core/command/slash-handler.js +3066 -0
  139. package/dist/core/daemon-file-cache.js +222 -0
  140. package/dist/core/event-bus.js +32 -0
  141. package/dist/core/event-catalog.js +810 -0
  142. package/dist/core/evolagent-registry.js +545 -0
  143. package/dist/core/evolagent.js +342 -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 +659 -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 +874 -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 +1446 -0
  161. package/dist/core/message/message-utils.js +76 -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 +4020 -0
  166. package/dist/core/message/response-snapshot.js +83 -0
  167. package/dist/core/message/send-receipt.js +24 -0
  168. package/dist/core/message/stream-debouncer.js +139 -0
  169. package/dist/core/message/stream-idle-monitor.js +124 -0
  170. package/dist/core/model/config-scope.js +162 -0
  171. package/dist/core/model/field-scope.js +78 -0
  172. package/dist/core/model/model-catalog.js +227 -0
  173. package/dist/core/model/model-diagnostics.js +182 -0
  174. package/dist/core/model/model-permission.js +90 -0
  175. package/dist/core/permission/approval-gateway.js +1017 -0
  176. package/dist/core/permission/ec-command-parser.js +347 -0
  177. package/dist/core/permission/execution-sandbox.js +16 -0
  178. package/dist/core/permission/index.js +6 -0
  179. package/dist/core/permission/mode.js +24 -0
  180. package/dist/core/permission/sandbox-runtime.js +265 -0
  181. package/dist/core/permission/tool-policy.js +1019 -0
  182. package/dist/core/permission/unix-socket-policy.js +99 -0
  183. package/dist/core/protected-paths.js +332 -0
  184. package/dist/core/relation/peer-identity.js +222 -0
  185. package/dist/core/relation/peer-key.js +1 -0
  186. package/dist/core/role/runtime-policy.js +141 -0
  187. package/dist/core/session/adapters/claude-session-file-adapter.js +218 -0
  188. package/dist/core/session/adapters/codex-session-file-adapter.js +333 -0
  189. package/dist/core/session/adapters/gemini-session-file-adapter.js +181 -0
  190. package/dist/core/session/session-file-adapter.js +7 -0
  191. package/dist/core/session/session-file-health.js +45 -0
  192. package/dist/core/session/session-fs-store.js +273 -0
  193. package/dist/core/session/session-key.js +24 -0
  194. package/dist/core/session/session-manager.js +1643 -0
  195. package/dist/core/session/session-mapper.js +100 -0
  196. package/dist/core/session/session-renew.js +314 -0
  197. package/dist/core/session/session-title.js +128 -0
  198. package/dist/core/session/session-turn-coordinator.js +205 -0
  199. package/dist/core/session/session-turns.js +67 -0
  200. package/dist/core/system-channels.js +29 -0
  201. package/dist/eck/baseagent-caps.js +18 -0
  202. package/dist/eck/detect.js +47 -0
  203. package/dist/eck/group-rules-sync.js +345 -0
  204. package/dist/eck/init.js +77 -0
  205. package/dist/eck/kit-renderer.js +359 -0
  206. package/dist/eck/manifest-engine.js +446 -0
  207. package/dist/eck/message-renderer.js +199 -0
  208. package/dist/eck/rules-loader.js +28 -0
  209. package/dist/index.js +2926 -4
  210. package/dist/ipc.js +777 -0
  211. package/dist/paths.js +262 -0
  212. package/dist/product.js +18 -0
  213. package/dist/response-system/context-builder.js +71 -0
  214. package/dist/response-system/coordinator.js +117 -0
  215. package/dist/response-system/decision-executor.js +86 -0
  216. package/dist/response-system/engines/v1/index.js +21 -0
  217. package/dist/response-system/engines/v1/interactive-flow.js +27 -0
  218. package/dist/response-system/engines/v1/proactive-flow.js +137 -0
  219. package/dist/response-system/engines/v1/types.js +1 -0
  220. package/dist/response-system/extensions.js +41 -0
  221. package/dist/response-system/index.js +6 -0
  222. package/dist/response-system/modes/index.js +7 -0
  223. package/dist/response-system/modes/single-session/index.js +72 -0
  224. package/dist/response-system/queues/fifo-queue.js +44 -0
  225. package/dist/response-system/queues/index.js +6 -0
  226. package/dist/response-system/queues/lifo-queue.js +42 -0
  227. package/dist/response-system/queues/priority-queue.js +63 -0
  228. package/dist/response-system/registry.js +97 -0
  229. package/dist/response-system/resolver.js +37 -0
  230. package/dist/response-system/selector.js +23 -0
  231. package/dist/response-system/types.js +7 -0
  232. package/dist/stats/billing.js +163 -0
  233. package/dist/stats/budget.js +93 -0
  234. package/dist/stats/db.js +403 -0
  235. package/dist/stats/eck-vars.js +89 -0
  236. package/dist/stats/index.js +11 -0
  237. package/dist/stats/normalizer.js +80 -0
  238. package/dist/stats/price-resolver.js +138 -0
  239. package/dist/stats/query.js +763 -0
  240. package/dist/stats/role-budget.js +168 -0
  241. package/dist/stats/writer.js +151 -0
  242. package/dist/trigger/anomaly-store.js +258 -0
  243. package/dist/trigger/audit.js +152 -0
  244. package/dist/trigger/event-source.js +119 -0
  245. package/dist/trigger/feedback.js +685 -0
  246. package/dist/trigger/history.js +290 -0
  247. package/dist/trigger/manager.js +294 -0
  248. package/dist/trigger/parser.js +595 -0
  249. package/dist/trigger/patch.js +155 -0
  250. package/dist/trigger/scheduler.js +1602 -0
  251. package/dist/trigger/script-executor.js +155 -0
  252. package/dist/trigger/state.js +145 -0
  253. package/dist/trigger/types.js +1 -0
  254. package/dist/trigger/validation.js +634 -0
  255. package/dist/types.js +12 -0
  256. package/dist/utils/aid-bind.js +313 -0
  257. package/dist/utils/atomic-write.js +95 -0
  258. package/dist/utils/avatar-upload.js +123 -0
  259. package/dist/utils/cross-platform.js +297 -0
  260. package/dist/utils/ecweb-utils.js +73 -0
  261. package/dist/utils/error-dict.json +153 -0
  262. package/dist/utils/error-utils.js +349 -0
  263. package/dist/utils/instance-registry.js +444 -0
  264. package/dist/utils/locale.js +21 -0
  265. package/dist/utils/log-writer.js +270 -0
  266. package/dist/utils/logger.js +89 -0
  267. package/dist/utils/markdown-to-plain-text.js +20 -0
  268. package/dist/utils/media-cache.js +274 -0
  269. package/dist/utils/model-prices.jsonl +20 -0
  270. package/dist/utils/npm-ops.js +210 -0
  271. package/dist/utils/process-introspect.js +133 -0
  272. package/dist/utils/process-tree-stats.js +271 -0
  273. package/dist/utils/project-path.js +74 -0
  274. package/dist/utils/restart-safety.js +31 -0
  275. package/dist/utils/stats.js +410 -0
  276. package/dist/utils/system-memory.js +62 -0
  277. package/dist/utils/tool-summary.js +284 -0
  278. package/dist/utils/welcome.js +268 -0
  279. package/kits/docs/GUIDE.md +20 -0
  280. package/kits/docs/INDEX.md +66 -0
  281. package/kits/docs/aun/CHEATSHEET.md +19 -0
  282. package/kits/docs/aun/SYNC_PROTOCOL.md +15 -0
  283. package/kits/docs/channels/aun.md +65 -0
  284. package/kits/docs/channels/feishu.md +56 -0
  285. package/kits/docs/context-assembly.md +366 -0
  286. package/kits/docs/eck_templates/GUIDE.template.md +22 -0
  287. package/kits/docs/eck_templates/INDEX.template.md +28 -0
  288. package/kits/docs/eck_templates/path-registry.template.md +33 -0
  289. package/kits/docs/eck_templates/runtime.template.md +19 -0
  290. package/kits/docs/evolcore/INDEX.md +68 -0
  291. package/kits/docs/evolcore/agent.md +77 -0
  292. package/kits/docs/evolcore/aid.md +52 -0
  293. package/kits/docs/evolcore/config.md +149 -0
  294. package/kits/docs/evolcore/contact.md +57 -0
  295. package/kits/docs/evolcore/ctl.md +46 -0
  296. package/kits/docs/evolcore/event.md +216 -0
  297. package/kits/docs/evolcore/fs-architecture.md +1215 -0
  298. package/kits/docs/evolcore/fs.md +110 -0
  299. package/kits/docs/evolcore/group-fs.md +17 -0
  300. package/kits/docs/evolcore/group-rules.md +226 -0
  301. package/kits/docs/evolcore/group.md +150 -0
  302. package/kits/docs/evolcore/model.md +50 -0
  303. package/kits/docs/evolcore/msg.md +136 -0
  304. package/kits/docs/evolcore/response.md +75 -0
  305. package/kits/docs/evolcore/rpc.md +37 -0
  306. package/kits/docs/evolcore/self-summary.md +29 -0
  307. package/kits/docs/evolcore/stats.md +83 -0
  308. package/kits/docs/evolcore/storage.md +50 -0
  309. package/kits/docs/evolcore/trigger.md +539 -0
  310. package/kits/docs/identity/AID_PROFILE_SPEC.md +26 -0
  311. package/kits/docs/identity/PATH_OPS.md +16 -0
  312. package/kits/docs/identity/ROLE_DETAIL.md +23 -0
  313. package/kits/docs/identity/identity-tools.md +26 -0
  314. package/kits/docs/path-registry.md +43 -0
  315. package/kits/docs/prompt-loading-architecture.md +266 -0
  316. package/kits/docs/venues/aun-group.md +45 -0
  317. package/kits/docs/venues/aun-private.md +10 -0
  318. package/kits/docs/venues/client-desktop.md +10 -0
  319. package/kits/docs/venues/client-mobile.md +10 -0
  320. package/kits/docs/venues/feishu-group.md +13 -0
  321. package/kits/docs/venues/feishu-private.md +9 -0
  322. package/kits/docs/venues/group.md +25 -0
  323. package/kits/docs/venues/private.md +10 -0
  324. package/kits/eck_manifest.auxiliary.json +43 -0
  325. package/kits/eck_manifest.json +203 -0
  326. package/kits/eck_message_manifest.json +63 -0
  327. package/kits/migrations/README-role-config-v4.md +32 -0
  328. package/kits/migrations/migrate-contact-book-v2.mjs +747 -0
  329. package/kits/migrations/migrate-role-config-v4.mjs +623 -0
  330. package/kits/migrations/migrate-role-config-v5.mjs +346 -0
  331. package/kits/migrations/rename-config-file.mjs +99 -0
  332. package/kits/rules/01-overview.md +142 -0
  333. package/kits/rules/02-navigation.md +76 -0
  334. package/kits/rules/03-identity.md +34 -0
  335. package/kits/rules/04-relation.md +59 -0
  336. package/kits/rules/05-venue.md +44 -0
  337. package/kits/rules/06-channel.md +59 -0
  338. package/kits/schemas/_meta.json +32 -0
  339. package/kits/schemas/agent-config.schema.1.json +177 -0
  340. package/kits/schemas/agent-config.schema.2.json +239 -0
  341. package/kits/schemas/agent-config.schema.3.json +119 -0
  342. package/kits/schemas/agent-config.schema.4.json +208 -0
  343. package/kits/schemas/agent-config.schema.5.json +326 -0
  344. package/kits/schemas/agent-config.schema.6.json +322 -0
  345. package/kits/schemas/contact-book.schema.1.json +36 -0
  346. package/kits/schemas/contact-book.schema.2.json +43 -0
  347. package/kits/schemas/daemon.schema.1.json +90 -0
  348. package/kits/schemas/defaults.schema.1.json +81 -0
  349. package/kits/schemas/menu-exec-schema-commands.md +208 -0
  350. package/kits/schemas/migrations/README.md +28 -0
  351. package/kits/schemas/relation-config.schema.1.json +158 -0
  352. package/kits/schemas/relation-config.schema.2.json +73 -0
  353. package/kits/schemas/relation-config.schema.3.json +50 -0
  354. package/kits/schemas/relation-config.schema.4.json +47 -0
  355. package/kits/schemas/relation-config.schema.5.json +47 -0
  356. package/kits/schemas/role-config.schema.1.json +201 -0
  357. package/kits/schemas/role-registry.schema.1.json +35 -0
  358. package/kits/schemas/single-session.schema.1.json +31 -0
  359. package/kits/templates/bootstrap-welcome.md +15 -0
  360. package/kits/templates/message-fragments/handoff-request-to-target.md +13 -0
  361. package/kits/templates/message-fragments/handoff-response-to-origin.md +10 -0
  362. package/kits/templates/message-fragments/inject-default.md +2 -0
  363. package/kits/templates/message-fragments/item.md +2 -0
  364. package/kits/templates/roles/admin.json +9 -0
  365. package/kits/templates/roles/member.json +41 -0
  366. package/kits/templates/roles/owner.json +9 -0
  367. package/kits/templates/roles/visitor.json +40 -0
  368. package/kits/templates/system-fragments/baseagent.md +14 -0
  369. package/kits/templates/system-fragments/bootstrap.md +16 -0
  370. package/kits/templates/system-fragments/channel.md +48 -0
  371. package/kits/templates/system-fragments/commands.md +28 -0
  372. package/kits/templates/system-fragments/identity.md +11 -0
  373. package/kits/templates/system-fragments/relation.md +19 -0
  374. package/kits/templates/system-fragments/session.md +53 -0
  375. package/kits/templates/system-fragments/venue.md +31 -0
  376. package/package.json +50 -15
  377. package/dist/index.d.ts +0 -7
  378. package/dist/index.d.ts.map +0 -1
  379. package/dist/index.js.map +0 -1
@@ -0,0 +1,266 @@
1
+ # EvolCore 提示词装载全景(Prompt Loading Architecture)
2
+
3
+ > 文档范围:消息从渠道到 base agent 的完整提示词装载流程,涵盖系统提示词渲染层与消息渲染层两套机制。
4
+ > 最后更新:2026-06-04
5
+
6
+ ---
7
+
8
+ ## 总体数据流
9
+
10
+ ```
11
+ 收到一条消息
12
+
13
+
14
+ ┌──────────────────────────────────────────────────────────┐
15
+ │ MessageBridge │
16
+ │ • 消息预处理(去重/拦截/chatType 填充) │
17
+ │ • messagePrefix 硬编码已移除(归消息渲染层) │
18
+ │ • 构造 Message(含 items=undefined 此时) │
19
+ └──────────────────────┬───────────────────────────────────┘
20
+
21
+
22
+ ┌──────────────────────────────────────────────────────────┐
23
+ │ MessageQueue │
24
+ │ • 去重 / 单聊 interrupt / 群聊 FIFO │
25
+ │ • dequeueGreedy:弹出连续同 peerId 消息 │
26
+ │ • mergeItems(多条时): │
27
+ │ - content = join('\n')(兜底) │
28
+ │ - items[] = 每条 SubMessage{peer,time,images,...} │
29
+ │ - images/mentions 扁平合并(给 runQuery 的总量) │
30
+ └──────────────────────┬───────────────────────────────────┘
31
+ │ Message(可能带 items[])
32
+
33
+ ┌──────────────────────────────────────────────────────────┐
34
+ │ MessageProcessor.processMessage() │
35
+ │ │
36
+ │ ① wrapPrompt 准备(中断包装函数) │
37
+ │ effectivePrompt = wrapPrompt(message.content) ← 兜底 │
38
+ │ │
39
+ │ ② 构造 kitCtx.vars(~47 个变量,见下节) │
40
+ │ │
41
+ │ ③ 系统提示词渲染层 │
42
+ │ renderKitSections(kitCtx) │
43
+ │ effectiveSystemPrompt = persona + kitContext │
44
+ │ │
45
+ │ ④ 消息渲染层 │
46
+ │ renderMessageBody(items, kitCtx.vars, sessionId) │
47
+ │ effectivePrompt = wrapPrompt(body) ← 覆盖兜底 │
48
+ │ renderImages = result.images │
49
+ │ │
50
+ │ ⑤ agent.runQuery( │
51
+ │ effectivePrompt, │
52
+ │ renderImages ?? message.images, │
53
+ │ effectiveSystemPrompt, │
54
+ │ modelOverride │
55
+ │ ) │
56
+ └──────────────────────────────────────────────────────────┘
57
+ ```
58
+
59
+ ---
60
+
61
+ ## 两个渲染层对比
62
+
63
+ | | 系统提示词渲染层 | 消息渲染层 |
64
+ |--|--|--|
65
+ | **驱动文件** | `kits/eck_manifest.json`(默认;按 `session.sessionType` 经 config.sessionManifests 可切到 `eck_manifest.<type>.json`,如 auxiliary) | `kits/eck_message_manifest.json` |
66
+ | **覆盖文件** | `$EVOLCORE_HOME/eck/<驱动文件名>` | `$EVOLCORE_HOME/eck/eck_message_manifest.json` |
67
+ | **模板目录** | `kits/templates/system-fragments/` | `kits/templates/message-fragments/` |
68
+ | **输出去向** | `systemPrompt.append`(每轮覆盖,不进 transcript) | `effectivePrompt`(进 transcript,成永久历史) |
69
+ | **vars 粒度** | 会话级(一次构造,整批复用) | item 级(每条叠加 peerName/now/images) |
70
+ | **模板空行** | 删除(stripBlankLines=true,紧凑) | 保留(stripBlankLines=false,消息多段) |
71
+ | **content 注入** | N/A | 哨兵末步字面量注入(防二次解析) |
72
+ | **缓存** | per-sessionId(跨消息复用文件内容) | per-renderMessageBody 调用(局部) |
73
+ | **debug 输出** | `eck-debug/context-*.md` `fragments-*.md` `manifest-*.md` `vars-*.json` | `eck-debug/msg-render-*.md` |
74
+
75
+ ---
76
+
77
+ ## manifest 共享引擎(manifest-engine.ts)
78
+
79
+ 两个渲染层共用同一套原语,由 `src/eck/manifest-engine.ts` 提供:
80
+
81
+ | 函数 | 作用 |
82
+ |------|------|
83
+ | `loadManifest(filename)` | 加载并合并 manifest,按文件名缓存 |
84
+ | `evaluateWhen(when, vars)` | 求值 section 加载条件 |
85
+ | `renderTemplate(tpl, vars, stripBlankLines)` | 条件块 + 变量替换,可选删空行 |
86
+ | `resolvePathWithDiag(rawPath, vars)` | `$VAR` / `{{key}}` 路径展开 + 诊断 |
87
+ | `loadSectionFiles(section, vars, cache)` | 按 section 类型加载文件内容 |
88
+ | `buildPathMappings(vars)` / `shortenPath` | debug 输出路径别名化 |
89
+ | `invalidateManifestCache()` | 清全部 manifest 缓存 |
90
+
91
+ ---
92
+
93
+ ## 系统提示词渲染层详解
94
+
95
+ ### 执行位置
96
+
97
+ `src/core/message/message-processor.ts` → `renderKitSections(kitCtx)` → `src/agents/kit-renderer.ts`
98
+
99
+ ### manifest 默认段(按 order)
100
+
101
+ | order | id | 加载条件 | needsInjection | 内容 |
102
+ |-------|----|----|--------|------|
103
+ | 10 | rules | always | ✗ | `$KITS_RULES/` 目录(ECK 核心规则) |
104
+ | 20 | identity-layer | chatType≠null | ✓ | 身份层 fragment |
105
+ | 21 | persona | chatType≠null | ✗ | `$PERSONAL_DIR/persona.md` |
106
+ | 22 | working-memory | chatType≠null | ✗ | `$PERSONAL_DIR/memory/working.md` |
107
+ | 30 | relation-layer | chatType∈{private,group} | ✓ | 关系层 fragment |
108
+ | 35 | peer-profile | peerKey≠null | ✗ | 对端 profile.md |
109
+ | 40 | venue-fragment | chatType≠null | ✓ | 环境层 fragment |
110
+ | 41 | venue-chattype | chatType≠null | ✗ | `venues/{{chatType}}.md` |
111
+ | 42 | venue-channel-chattype | chatType≠null | ✗ | `venues/{{channel}}-{{chatType}}.md` |
112
+ | 43 | venue-group-profile | groupId≠null | ✗ | 群 venue profile.md |
113
+ | 44 | venue-client | clientType≠null | ✗ | `venues/client-{{clientType}}.md` |
114
+ | 50 | channel-layer | channel≠null | ✓ | 渠道层 fragment |
115
+ | 55 | commands | channel≠null | ✓ | 命令集能力卡 |
116
+ | 60 | session | always | ✓ | 会话层 fragment(含 localDate/weekday) |
117
+ | 70 | baseagent | baseAgent≠null | ✓ | base agent 配置 fragment |
118
+
119
+ ### 输出结构
120
+
121
+ ```
122
+ <system-reminder>
123
+ EvolCore Context Kit documents are shown below.
124
+
125
+ Contenu de $KITS_RULES/01-overview.md (rules — ECK 核心规则):
126
+ ...(各 section 内容,按 order)
127
+
128
+ IMPORTANT: Use this context when it affects the current interaction.
129
+ </system-reminder>
130
+ ```
131
+
132
+ ### 加载限额(防撑爆保护)
133
+
134
+ 目录段与整个清单都有加载上限,超出即截断并注入说明(详见 `context-assembly.md`「目录加载限额」):
135
+
136
+ | 层级 | 维度 | 默认 | 覆盖字段 |
137
+ |------|------|------|---------|
138
+ | 单目录段 | 文件数 / 字节 | 20 / 40KB | section `maxFiles` / `maxBytes` |
139
+ | 整个清单 | 文件数 / 字节 | 50 / 100KB | 清单顶层 `totalMaxFiles` / `totalMaxBytes` |
140
+
141
+ 超限时:单目录段末尾注入 `[注意] 目录 X 未完整加载…`;总闸超限则停止加载后续段,末尾注入 `[注意] …以下 section 未加载:<id 集合>`。截断信息同步进 `manifest-*.md` 调试输出。
142
+
143
+ ---
144
+
145
+ ## 消息渲染层详解
146
+
147
+ ### 执行位置
148
+
149
+ `src/core/message/message-processor.ts` → `renderMessageBody(items, vars, sessionId)` → `src/eck/message-renderer.ts`
150
+
151
+ ### 渲染流程
152
+
153
+ ```
154
+ for each SubMessage in items:
155
+ sentinel = '\x00ECMSG-<UUID>\x00' ← 每次调用独立,null 字节在渠道消息中不可能出现
156
+ itemVars = {
157
+ ...sessionVars,
158
+ peerId / peerName / peerType, ← 本条消息自己的发送者
159
+ now = formatLocalTime(timestamp), ← 本条消息自己的时刻
160
+ content = sentinel, ← 占位,末步换回
161
+ }
162
+ loadManifest(eck_message_manifest) → 选段 → renderTemplate(stripBlankLines=false)
163
+ rendered.split(sentinel).join(item.content) ← 字面量注入,不二次解析
164
+ 收集 item.images
165
+
166
+ join('\n\n') → { body: string, images: ImageData[] }
167
+ ```
168
+
169
+ ### 批次包裹层(loop 段)
170
+
171
+ 消息 manifest 里若有 `loop` 段(见 `context-assembly.md`「三段式循环」),逐条渲染结果会被**包裹**:
172
+
173
+ ```
174
+ 逐条渲染(每条走 renderOneItem,自带 content 哨兵)→ renderedParts[]
175
+
176
+ wrapBatch:loop 段的 file 作 wrapper,渲染批次 vars(remainingInQueue/pendingCount 等,从 sessionVars 透传)
177
+
178
+ wrapper 的 {{@loop}} 处字面量填入 renderedParts.join(separator)
179
+ ```
180
+
181
+ - **child = renderOneItem 逐条结果**(不用 loop.childFile)——复用消息渲染的完整逻辑(哨兵/renderMode/图片/handoff)
182
+ - **哨兵天然生效**:每条 content 在 renderOneItem 内已哨兵化,wrapBatch 只做字面量拼接,用户消息里的 `{{}}` 不被解析
183
+ - loop 段的 `separator` 默认 `\n`(消息层若不设则逐条间用 `\n\n`;wrapper 内 loop 段可自定)
184
+ - **无 loop 段** → 回退现有 `join('\n\n')`,行为不变(向后兼容)
185
+ - loop 段只做批次包裹,不参与逐条 renderOneItem(renderOneItem 跳过 `section.loop`)
186
+
187
+ > 批次包裹层是响应模式(单会话/双会话)批量处理消息的基础设施:把背压信号、批次头尾
188
+ > 渲染在逐条消息外层,供辅助会话/主会话感知队列状态。
189
+
190
+ ### 初始 manifest(一个段)
191
+
192
+ ```json
193
+ {
194
+ "id": "msg-item",
195
+ "file": "$KITS_MESSAGE_FRAGMENTS/item.md",
196
+ "when": "always",
197
+ "needsInjection": true
198
+ }
199
+ ```
200
+
201
+ ### 紧凑模板(item.md)
202
+
203
+ ```
204
+ ‹{{now}}{{?chatType=group}} · {{peerName}}{{/}}›
205
+ {{content}}
206
+ ```
207
+
208
+ - 私聊:`{{?chatType=group}}` 块收敛,只剩时间
209
+ - 群聊:时间 + 发送者名
210
+ - 改格式只动这一个文件,不动代码
211
+
212
+ ---
213
+
214
+ ## vars 时变性归属
215
+
216
+ ### 进系统提示词(每轮覆盖,缓存友好)
217
+
218
+ | 类别 | 变量 |
219
+ |------|------|
220
+ | 静态(进程级) | `PACKAGE_ROOT` `KITS*` `evolcoreMode` `osInfo` `baseAgent` |
221
+ | 会话稳定 | `selfAid` `sessionId` `sessionKey` `chatType` `channel` `timezone` `tzOffset` `capabilities` `CURRENT_PROJECT` |
222
+ | 慢变(配置驱动) | `effectiveModel` `permissionMode` `peerRole` `readonly` `chatMode` `modelFallback*` |
223
+ | 新增(日期级) | `localDate`(YYYY-MM-DD)`weekday`(星期四),一天才变一次,缓存暖 ~24h |
224
+
225
+ ### 进消息渲染层(每条独立,进 transcript 永久保真)
226
+
227
+ | 变量 | 说明 |
228
+ |------|------|
229
+ | `now` | 精确到秒的本地时间(含时区偏移),每条自己的发生时刻 |
230
+ | `peerName` / `peerId` / `peerType` | 群聊每条消息的发送者,单聊复用会话值 |
231
+ | `content` | 原始消息文本(字面量注入,不参与模板解析) |
232
+ | `images` | 按条归属的图片(SubMessage.images) |
233
+
234
+ ---
235
+
236
+ ## 关键保证
237
+
238
+ | 保证 | 实现方式 |
239
+ |------|---------|
240
+ | **模板注入防护** | 哨兵 `\x00ECMSG-<UUID>\x00`,per-call 独立,null 字节在任何渠道消息中不可能出现 |
241
+ | **消息不丢失** | manifest 无产出或渲染抛异常均显式 fallback 到 `wrapPrompt(message.content)` |
242
+ | **系统提示词不累积** | `systemPrompt.append` 是 SDK 每次 `query()` 的独立参数,随调用重传覆盖,不进 transcript |
243
+ | **图片归属** | `SubMessage.images` 按条保留,`renderMessageBody` 返回按顺序收集的 images;`runQuery` 用此数组而非 flat-merge 的 `message.images` |
244
+ | **群聊发送者保真** | 每条 SubMessage 携带自己的 peerName/peerId,进 transcript 成永久历史,模型可推理"谁说的、隔了多久" |
245
+ | **空消息安全** | `hasContent` guard,空消息不进渲染层,不传 `runQuery` |
246
+
247
+ ---
248
+
249
+ ## 文件索引
250
+
251
+ | 文件 | 角色 |
252
+ |------|------|
253
+ | `src/eck/manifest-engine.ts` | 共享渲染引擎原语 |
254
+ | `src/agents/kit-renderer.ts` | 系统提示词渲染,输出 `<system-reminder>` |
255
+ | `src/eck/message-renderer.ts` | 消息渲染层,输出 `{ body, images }` |
256
+ | `src/core/message/message-processor.ts` | 装配点:构造 vars,调两层渲染,调 runQuery |
257
+ | `src/core/message/message-queue.ts` | 队列合并:mergeItems 保留 items[] 和 per-item images |
258
+ | `src/core/message/message-bridge.ts` | 消息入口:已移除 messagePrefix 硬编码 |
259
+ | `src/types.ts` | SubMessage / Message.items 类型定义 |
260
+ | `kits/eck_manifest.json` | 系统提示词 manifest |
261
+ | `kits/eck_message_manifest.json` | 消息渲染 manifest |
262
+ | `kits/templates/system-fragments/session.md` | 含 localDate/weekday |
263
+ | `kits/templates/message-fragments/item.md` | 消息渲染紧凑模板 |
264
+ | `$EVOLCORE_HOME/eck/eck_manifest.json` | 系统提示词 manifest 用户覆盖(可选) |
265
+ | `$EVOLCORE_HOME/eck/eck_message_manifest.json` | 消息渲染 manifest 用户覆盖(可选) |
266
+ | `$EVOLCORE_HOME/data/eck-debug/` | 调试输出目录(保留 24h) |
@@ -0,0 +1,45 @@
1
+ # AUN 群聊特有指引
2
+
3
+ AUN 群组是基于 AID 的多方对话空间。这里有人也有 agent,大家平等参与讨论。
4
+
5
+ ## 群聊的感觉
6
+
7
+ 群聊不是排队汇报,而是一群人在客厅聊天。你可以接任何人的话,也可以发起新话题。不用等谁点名。
8
+
9
+ 聊天时注意几点:
10
+ - **短比长好** — 一两句说清楚就行,别写小作文。真有复杂东西要讲,先问大家要不要展开
11
+ - **接话比抢话好** — 看看别人说了什么,顺着往下聊,别各说各的
12
+ - **跟 agent 聊也是聊** — 其他 agent 说的话同样是讨论的一部分,回应他们、追问他们、反驳他们都行
13
+
14
+ ## 跟其他 agent 协作
15
+
16
+ 看到别的 agent 发了观点:
17
+ - 同意就附和一句,别默默不说话
18
+ - 不同意就说出你的理由,礼貌反驳是好事
19
+ - 觉得对方遗漏了什么就补充
20
+
21
+ 不需要显式的投票或流程——聊到大家都觉得「行了就这样」,共识就自然形成了。
22
+
23
+ ## 跟人类互动
24
+
25
+ 人类提出的问题或话题,可以先简短回应、表达观点。不要一上来就做完整的深度分析,除非对方明确要求。渐进式地深入——先聊起来,聊深了自然会有需要认真研究的地方。到那时再放开手脚。
26
+
27
+ 人类可能在观察你们 agent 之间的讨论,不一定每次都发言。这很正常——你们继续聊你们的。
28
+
29
+ ## 关于 @ 和响应
30
+
31
+ - 被 @ 点名时,正常回应
32
+ - 没被 @ 但有想法时,也可以说——群聊本来就是你一句我一句
33
+ - 发消息用 `ec group send`,想点名特定人时带上 `--mention` 参数
34
+
35
+ ## 群资源空间规则
36
+
37
+ AUN 群可通过群资源空间提供当前群的工作规则。默认规则文件位于
38
+ `<group-aid>:/rules.md`,EvolCore 会只读同步到本地 venue 目录并注入上下文。
39
+ 规则文件用于定义本群特有的工作流程、职责分工、交付标准和响应偏好。
40
+
41
+ 同步状态也会注入到 `[venue]` 段。`missing` 或 `forbidden` 表示不加载群规则正文;
42
+ `unreadable`、`too_large` 或 `error` 表示本轮不能更新,若存在上次成功同步的本地缓存,可能会作为旧规则加载。
43
+ 需要权威信息时用 `ec fs stat/cat/find <group-aid>:/...` 按权限查询。
44
+ `/rules.md` 的写权限由群空间 ACL 控制,通常应限群 owner/admin;EvolCore 运行期只读同步,不写回远端。
45
+ 被动同步不会因为发现规则变化而发群通知;谁通过受控入口成功重写 `/rules.md`,谁负责在写入完成后发送自定义群消息。
@@ -0,0 +1,10 @@
1
+ # AUN 单聊特有指引
2
+
3
+ AUN 是 agent 的存在基础,单聊对端是另一个 AUN 主体(人或 agent)。
4
+
5
+ ## 特点
6
+ - 对端有 AID,可通过 `agent.md` 获取其身份信息
7
+ - 支持端到端加密(E2EE)
8
+ - 消息通过 message.* 命名空间收发
9
+
10
+ (待补充)
@@ -0,0 +1,10 @@
1
+ # 桌面端环境
2
+
3
+ 对端使用桌面客户端(macOS / Windows / Linux)。
4
+
5
+ ## 特点
6
+ - 屏幕较大,可承载较长内容
7
+ - 文件下载方便
8
+ - 通常处于工作场景
9
+
10
+ (待补充)
@@ -0,0 +1,10 @@
1
+ # 移动端环境
2
+
3
+ 对端使用移动客户端(iOS / Android)。
4
+
5
+ ## 特点
6
+ - 屏幕较小,长文需谨慎
7
+ - 流量敏感,大文件需谨慎
8
+ - 可能处于碎片场景(地铁/会议等)
9
+
10
+ (待补充)
@@ -0,0 +1,13 @@
1
+ # 飞书群聊特有指引
2
+
3
+ 飞书群通过 chat_id 标识,支持话题(thread)回复。
4
+
5
+ ## 工具
6
+ - 群消息命令:`ec group`(详见 $KITS_DOCS/evolcore/group.md)
7
+ - 取群信息 / 公告 / 成员 / 管理员
8
+
9
+ ## 注意
10
+ - 飞书群默认 dispatch=mention,被 @ 才响应
11
+ - 话题回复会创建独立的 session(thread session)
12
+
13
+ (待补充)
@@ -0,0 +1,9 @@
1
+ # 飞书单聊特有指引
2
+
3
+ 飞书单聊场景下,对端通过 user_id (open_id) 标识。
4
+
5
+ ## 工具
6
+ - 飞书消息命令:`ec msg`(详见 $KITS_DOCS/evolcore/msg.md)
7
+ - 文件/图片上传与发送
8
+
9
+ (待补充)
@@ -0,0 +1,25 @@
1
+ # 群聊场景指引
2
+
3
+ 群聊场景下的响应行为取决于 mentionMode(见 venue fragment 中的 `mentionMode` 变量)。
4
+
5
+ ## 行为准则
6
+ - `mentionMode: mention-only` — 仅响应明确 @ 自己的消息
7
+ - `mentionMode: disabled` — 所有消息可见,自主判断是否参与。这不是叫你每条都回,而是你可以像真人一样:感兴趣的接话,不感兴趣的就跳过。回得短一点、快一点,让对话流动起来,不要一个人长篇大论堵住别人的空间
8
+ - 查看 venue 档案(venue-group-profile)了解本群文化与策略
9
+ - 如果上下文中出现“群规则”,它来自当前群资源空间的本地同步缓存;群规则优先于通用群聊指引
10
+ - 群发言会被多人看到,谨言慎行
11
+ - 具体渠道(AUN/飞书/微信等)的群聊特有指引见对应渠道文档
12
+
13
+ ## 可按需查询的群数据
14
+
15
+ 群结构信息(成员名单、各成员角色、群主、管理员、在线状态等)**不预先注入上下文**,
16
+ 需要时用 `ec group` 自行查询(完整用法 Read `$KITS_DOCS/evolcore/group.md`):
17
+
18
+ | 想知道 | 用命令 | 拿到 |
19
+ |--------|--------|------|
20
+ | 群基本信息、群主是谁 | `ec group info <from> <group-id>` | name / owner_aid / 成员数 / 描述等 |
21
+ | 成员名单与各自角色 | `ec group members <from> <group-id>` | 每个成员的 aid + role(owner/admin/member)|
22
+ | 当前谁在线 | `ec group online <from> <group-id>` | 在线成员及其角色 |
23
+
24
+ 典型场景:要判断某人是不是管理员、给特定角色发消息、决定是否执行管理操作前,先查 members
25
+ 拿到角色再决策——而不是假设。自己在群里的角色也从 members 里查自己的 aid 得到。
@@ -0,0 +1,10 @@
1
+ # 单聊场景指引
2
+
3
+ 私聊场景下你和一位对端直接对话,无需被 @ 即可响应。
4
+
5
+ ## 行为准则
6
+ - 自主判断每条消息是否需要响应
7
+ - 关注对端的关系档案(peer-profile)与历史互动
8
+ - 长程对话中保持人格与风格的一致性
9
+
10
+ (本文档为最小骨架,后续将完善具体行为指引)
@@ -0,0 +1,43 @@
1
+ {
2
+ "$schema_version": 1,
3
+ "totalMaxFiles": 20,
4
+ "totalMaxBytes": 51200,
5
+ "sections": [
6
+ {
7
+ "id": "rules",
8
+ "type": "directory",
9
+ "path": "$KITS_RULES",
10
+ "order": 10,
11
+ "needsInjection": false,
12
+ "when": "always",
13
+ "description": "ECK 核心规则(辅助会话也需了解基础约定)"
14
+ },
15
+ {
16
+ "id": "auxiliary-role",
17
+ "type": "file",
18
+ "file": "$KITS_DOCS/response-system/dual-session/prompts/auxiliary-base.md",
19
+ "order": 20,
20
+ "needsInjection": true,
21
+ "when": "always",
22
+ "description": "辅助会话职责:判断投递时机(hold/delay/transfer)+ 背压调节"
23
+ },
24
+ {
25
+ "id": "session",
26
+ "type": "file",
27
+ "file": "$KITS_FRAGMENTS/session.md",
28
+ "order": 60,
29
+ "needsInjection": true,
30
+ "when": "always",
31
+ "description": "会话层:当前会话实例状态"
32
+ },
33
+ {
34
+ "id": "baseagent",
35
+ "type": "file",
36
+ "file": "$KITS_FRAGMENTS/baseagent.md",
37
+ "order": 70,
38
+ "needsInjection": true,
39
+ "when": { "var": "baseAgent", "neq": null },
40
+ "description": "Base Agent 特定配置"
41
+ }
42
+ ]
43
+ }
@@ -0,0 +1,203 @@
1
+ {
2
+ "$schema_version": 1,
3
+ "sections": [
4
+ {
5
+ "id": "rules",
6
+ "type": "directory",
7
+ "path": "$KITS_RULES",
8
+ "order": 10,
9
+ "needsInjection": false,
10
+ "when": "always",
11
+ "description": "ECK 核心规则(自动加载)"
12
+ },
13
+ {
14
+ "id": "bootstrap-guide",
15
+ "type": "file",
16
+ "file": "$KITS_FRAGMENTS/bootstrap.md",
17
+ "order": 15,
18
+ "needsInjection": true,
19
+ "when": { "var": "lifecycle", "eq": "bootstrapping" },
20
+ "description": "Bootstrap 阶段专属引导提示词"
21
+ },
22
+ {
23
+ "id": "identity-layer",
24
+ "type": "file",
25
+ "file": "$KITS_FRAGMENTS/identity.md",
26
+ "order": 20,
27
+ "needsInjection": true,
28
+ "when": { "and": [
29
+ { "var": "chatType", "neq": null },
30
+ { "var": "lifecycle", "neq": "bootstrapping" }
31
+ ] },
32
+ "description": "身份层:我是谁"
33
+ },
34
+ {
35
+ "id": "persona",
36
+ "type": "file",
37
+ "file": "$PERSONAL_DIR/persona.md",
38
+ "order": 21,
39
+ "needsInjection": false,
40
+ "when": { "and": [
41
+ { "var": "chatType", "neq": null },
42
+ { "var": "lifecycle", "neq": "bootstrapping" }
43
+ ] },
44
+ "description": "人格档案(persona.md)"
45
+ },
46
+ {
47
+ "id": "working-memory",
48
+ "type": "file",
49
+ "file": "$PERSONAL_DIR/memory/working.md",
50
+ "order": 22,
51
+ "needsInjection": false,
52
+ "when": { "and": [
53
+ { "var": "chatType", "neq": null },
54
+ { "var": "lifecycle", "neq": "bootstrapping" }
55
+ ] },
56
+ "description": "当前关注(working memory)"
57
+ },
58
+ {
59
+ "id": "preferences",
60
+ "type": "file",
61
+ "file": "$PERSONAL_DIR/preferences/active-preferences.md",
62
+ "order": 23,
63
+ "needsInjection": false,
64
+ "when": { "and": [
65
+ { "var": "chatType", "eq": "private" },
66
+ { "var": "lifecycle", "neq": "bootstrapping" }
67
+ ] },
68
+ "description": "用户偏好(自动记忆,仅私聊注入)"
69
+ },
70
+ {
71
+ "id": "relation-layer",
72
+ "type": "file",
73
+ "file": "$KITS_FRAGMENTS/relation.md",
74
+ "order": 30,
75
+ "needsInjection": true,
76
+ "when": { "and": [
77
+ { "var": "chatType", "in": ["private", "group"] },
78
+ { "var": "lifecycle", "neq": "bootstrapping" }
79
+ ] },
80
+ "description": "关系层:跟我聊天的是谁"
81
+ },
82
+ {
83
+ "id": "peer-profile",
84
+ "type": "file",
85
+ "file": "$RELATIONS_DIR/{{peerKey}}/profile.md",
86
+ "order": 35,
87
+ "needsInjection": false,
88
+ "when": { "and": [
89
+ { "var": "peerKey", "neq": null },
90
+ { "var": "lifecycle", "neq": "bootstrapping" }
91
+ ] },
92
+ "description": "当前对端的关系档案"
93
+ },
94
+ {
95
+ "id": "venue-fragment",
96
+ "type": "file",
97
+ "file": "$KITS_FRAGMENTS/venue.md",
98
+ "order": 40,
99
+ "needsInjection": true,
100
+ "when": { "and": [
101
+ { "var": "chatType", "neq": null },
102
+ { "var": "lifecycle", "neq": "bootstrapping" }
103
+ ] },
104
+ "description": "环境层模板(基础参数)"
105
+ },
106
+ {
107
+ "id": "venue-chattype",
108
+ "type": "file",
109
+ "file": "$KITS_DOCS/venues/{{chatType}}.md",
110
+ "order": 41,
111
+ "needsInjection": false,
112
+ "when": { "and": [
113
+ { "var": "chatType", "neq": null },
114
+ { "var": "lifecycle", "neq": "bootstrapping" }
115
+ ] },
116
+ "description": "场景通用文档(private/group)"
117
+ },
118
+ {
119
+ "id": "venue-channel-chattype",
120
+ "type": "file",
121
+ "file": "$KITS_DOCS/venues/{{channel}}-{{chatType}}.md",
122
+ "order": 42,
123
+ "needsInjection": false,
124
+ "when": { "and": [
125
+ { "var": "chatType", "neq": null },
126
+ { "var": "lifecycle", "neq": "bootstrapping" }
127
+ ] },
128
+ "description": "渠道+场景文档(如 feishu-group)"
129
+ },
130
+ {
131
+ "id": "relation-group-profile",
132
+ "type": "file",
133
+ "file": "$RELATIONS_DIR/{{peerKey}}/profile.md",
134
+ "order": 43,
135
+ "needsInjection": false,
136
+ "when": { "and": [
137
+ { "var": "groupId", "neq": null },
138
+ { "var": "lifecycle", "neq": "bootstrapping" }
139
+ ] },
140
+ "description": "具体群关系文档"
141
+ },
142
+ {
143
+ "id": "relation-group-rules",
144
+ "type": "file",
145
+ "file": "$RELATIONS_DIR/{{peerKey}}/rules.md",
146
+ "order": 43.2,
147
+ "needsInjection": false,
148
+ "when": { "and": [
149
+ { "var": "groupRulesPath", "neq": null },
150
+ { "var": "lifecycle", "neq": "bootstrapping" }
151
+ ] },
152
+ "description": "群资源空间同步的群规则"
153
+ },
154
+ {
155
+ "id": "venue-client",
156
+ "type": "file",
157
+ "file": "$KITS_DOCS/venues/client-{{clientType}}.md",
158
+ "order": 44,
159
+ "needsInjection": false,
160
+ "when": { "and": [
161
+ { "var": "clientType", "neq": null },
162
+ { "var": "lifecycle", "neq": "bootstrapping" }
163
+ ] },
164
+ "description": "客户端环境文档"
165
+ },
166
+ {
167
+ "id": "channel-layer",
168
+ "type": "file",
169
+ "file": "$KITS_FRAGMENTS/channel.md",
170
+ "order": 50,
171
+ "needsInjection": true,
172
+ "when": { "var": "channel", "neq": null },
173
+ "description": "渠道层:通信渠道及能力"
174
+ },
175
+ {
176
+ "id": "commands",
177
+ "type": "file",
178
+ "file": "$KITS_FRAGMENTS/commands.md",
179
+ "order": 55,
180
+ "needsInjection": true,
181
+ "when": { "var": "channel", "neq": null },
182
+ "description": "命令集能力卡:按场景列出可用命令集及文档路径"
183
+ },
184
+ {
185
+ "id": "session",
186
+ "type": "file",
187
+ "file": "$KITS_FRAGMENTS/session.md",
188
+ "order": 60,
189
+ "needsInjection": true,
190
+ "when": "always",
191
+ "description": "会话层:当前会话实例状态"
192
+ },
193
+ {
194
+ "id": "baseagent",
195
+ "type": "file",
196
+ "file": "$KITS_FRAGMENTS/baseagent.md",
197
+ "order": 70,
198
+ "needsInjection": true,
199
+ "when": { "var": "baseAgent", "neq": null },
200
+ "description": "Base Agent 特定配置"
201
+ }
202
+ ]
203
+ }