hyacinth-ai 0.9.6

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 (704) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +205 -0
  3. package/commands.json +25 -0
  4. package/dist/agents/builtins.d.ts +8 -0
  5. package/dist/agents/builtins.js +50 -0
  6. package/dist/agents/config-loader.d.ts +15 -0
  7. package/dist/agents/config-loader.js +75 -0
  8. package/dist/agents/delegate-tool.d.ts +109 -0
  9. package/dist/agents/delegate-tool.js +407 -0
  10. package/dist/agents/index.d.ts +5 -0
  11. package/dist/agents/index.js +5 -0
  12. package/dist/agents/registry.d.ts +2 -0
  13. package/dist/agents/registry.js +2 -0
  14. package/dist/bypass/agents/companion/index.d.ts +57 -0
  15. package/dist/bypass/agents/companion/index.js +487 -0
  16. package/dist/bypass/agents/orchestrator/index.d.ts +17 -0
  17. package/dist/bypass/agents/orchestrator/index.js +414 -0
  18. package/dist/bypass/agents/orchestrator.d.ts +16 -0
  19. package/dist/bypass/agents/orchestrator.js +377 -0
  20. package/dist/bypass/agents/world-engine/agent.d.ts +41 -0
  21. package/dist/bypass/agents/world-engine/agent.js +385 -0
  22. package/dist/bypass/agents/world-engine/index.d.ts +52 -0
  23. package/dist/bypass/agents/world-engine/index.js +198 -0
  24. package/dist/bypass/agents/world-engine/sim.d.ts +14 -0
  25. package/dist/bypass/agents/world-engine/sim.js +120 -0
  26. package/dist/bypass/agents/world-engine/store.d.ts +110 -0
  27. package/dist/bypass/agents/world-engine/store.js +519 -0
  28. package/dist/bypass/agents/world-engine/ticker.d.ts +37 -0
  29. package/dist/bypass/agents/world-engine/ticker.js +214 -0
  30. package/dist/bypass/agents/world-engine/tools.d.ts +6 -0
  31. package/dist/bypass/agents/world-engine/tools.js +380 -0
  32. package/dist/bypass/agents/world-engine/types.d.ts +202 -0
  33. package/dist/bypass/agents/world-engine/types.js +56 -0
  34. package/dist/bypass/agents/world-engine.d.ts +20 -0
  35. package/dist/bypass/agents/world-engine.js +63 -0
  36. package/dist/bypass/base.d.ts +48 -0
  37. package/dist/bypass/base.js +126 -0
  38. package/dist/bypass/index.d.ts +5 -0
  39. package/dist/bypass/index.js +6 -0
  40. package/dist/bypass/manager.d.ts +41 -0
  41. package/dist/bypass/manager.js +179 -0
  42. package/dist/bypass/types.d.ts +63 -0
  43. package/dist/bypass/types.js +14 -0
  44. package/dist/channels/auto-detect.d.ts +25 -0
  45. package/dist/channels/auto-detect.js +77 -0
  46. package/dist/channels/builtin/http-webhook.d.ts +25 -0
  47. package/dist/channels/builtin/http-webhook.js +287 -0
  48. package/dist/channels/builtin/tui-channel.d.ts +33 -0
  49. package/dist/channels/builtin/tui-channel.js +61 -0
  50. package/dist/channels/builtin/tui-ws-session.d.ts +16 -0
  51. package/dist/channels/builtin/tui-ws-session.js +90 -0
  52. package/dist/channels/builtin/webui-output-handler.d.ts +30 -0
  53. package/dist/channels/builtin/webui-output-handler.js +93 -0
  54. package/dist/channels/index.d.ts +5 -0
  55. package/dist/channels/index.js +3 -0
  56. package/dist/channels/interface.d.ts +148 -0
  57. package/dist/channels/interface.js +15 -0
  58. package/dist/channels/manager.d.ts +43 -0
  59. package/dist/channels/manager.js +156 -0
  60. package/dist/channels/message-queue.d.ts +36 -0
  61. package/dist/channels/message-queue.js +91 -0
  62. package/dist/channels/plugins/clawbot/clawbot-auth.d.ts +50 -0
  63. package/dist/channels/plugins/clawbot/clawbot-auth.js +235 -0
  64. package/dist/channels/plugins/clawbot/clawbot-channel.d.ts +76 -0
  65. package/dist/channels/plugins/clawbot/clawbot-channel.js +566 -0
  66. package/dist/channels/plugins/clawbot/clawbot-client.d.ts +180 -0
  67. package/dist/channels/plugins/clawbot/clawbot-client.js +312 -0
  68. package/dist/channels/plugins/clawbot/clawbot-config.d.ts +30 -0
  69. package/dist/channels/plugins/clawbot/clawbot-config.js +28 -0
  70. package/dist/channels/plugins/clawbot/clawbot-message-queue.d.ts +27 -0
  71. package/dist/channels/plugins/clawbot/clawbot-message-queue.js +114 -0
  72. package/dist/channels/plugins/clawbot/clawbot-session.d.ts +10 -0
  73. package/dist/channels/plugins/clawbot/clawbot-session.js +26 -0
  74. package/dist/channels/plugins/clawbot/index.d.ts +17 -0
  75. package/dist/channels/plugins/clawbot/index.js +58 -0
  76. package/dist/channels/plugins/feishu/feishu-channel.d.ts +57 -0
  77. package/dist/channels/plugins/feishu/feishu-channel.js +602 -0
  78. package/dist/channels/plugins/feishu/feishu-client.d.ts +23 -0
  79. package/dist/channels/plugins/feishu/feishu-client.js +86 -0
  80. package/dist/channels/plugins/feishu/feishu-config.d.ts +53 -0
  81. package/dist/channels/plugins/feishu/feishu-config.js +35 -0
  82. package/dist/channels/plugins/feishu/feishu-event.d.ts +102 -0
  83. package/dist/channels/plugins/feishu/feishu-event.js +257 -0
  84. package/dist/channels/plugins/feishu/feishu-log-suppressor.d.ts +7 -0
  85. package/dist/channels/plugins/feishu/feishu-log-suppressor.js +34 -0
  86. package/dist/channels/plugins/feishu/feishu-message-queue.d.ts +27 -0
  87. package/dist/channels/plugins/feishu/feishu-message-queue.js +112 -0
  88. package/dist/channels/plugins/feishu/feishu-send.d.ts +44 -0
  89. package/dist/channels/plugins/feishu/feishu-send.js +232 -0
  90. package/dist/channels/plugins/feishu/feishu-session.d.ts +44 -0
  91. package/dist/channels/plugins/feishu/feishu-session.js +84 -0
  92. package/dist/channels/plugins/feishu/feishu-streaming.d.ts +49 -0
  93. package/dist/channels/plugins/feishu/feishu-streaming.js +185 -0
  94. package/dist/channels/plugins/feishu/feishu-transport.d.ts +29 -0
  95. package/dist/channels/plugins/feishu/feishu-transport.js +99 -0
  96. package/dist/channels/plugins/feishu/index.d.ts +22 -0
  97. package/dist/channels/plugins/feishu/index.js +68 -0
  98. package/dist/cli/doctor.d.ts +20 -0
  99. package/dist/cli/doctor.js +317 -0
  100. package/dist/context/cache-strategy.d.ts +76 -0
  101. package/dist/context/cache-strategy.js +123 -0
  102. package/dist/context/composer.d.ts +77 -0
  103. package/dist/context/composer.js +318 -0
  104. package/dist/context/compressor.d.ts +218 -0
  105. package/dist/context/compressor.js +909 -0
  106. package/dist/context/index.d.ts +14 -0
  107. package/dist/context/index.js +8 -0
  108. package/dist/context/interface.d.ts +33 -0
  109. package/dist/context/interface.js +2 -0
  110. package/dist/context/manifest-defaults.d.ts +51 -0
  111. package/dist/context/manifest-defaults.js +133 -0
  112. package/dist/context/manifest-loader.d.ts +16 -0
  113. package/dist/context/manifest-loader.js +103 -0
  114. package/dist/context/manifest-types.d.ts +26 -0
  115. package/dist/context/manifest-types.js +2 -0
  116. package/dist/context/precision/analyzer.d.ts +31 -0
  117. package/dist/context/precision/analyzer.js +131 -0
  118. package/dist/context/precision/companion.d.ts +27 -0
  119. package/dist/context/precision/companion.js +144 -0
  120. package/dist/context/precision/default.d.ts +14 -0
  121. package/dist/context/precision/default.js +17 -0
  122. package/dist/context/precision/index.d.ts +9 -0
  123. package/dist/context/precision/index.js +7 -0
  124. package/dist/context/precision/keyword-pool.d.ts +27 -0
  125. package/dist/context/precision/keyword-pool.js +66 -0
  126. package/dist/context/precision/strategy.d.ts +18 -0
  127. package/dist/context/precision/strategy.js +51 -0
  128. package/dist/context/precision/summary-store.d.ts +18 -0
  129. package/dist/context/precision/summary-store.js +67 -0
  130. package/dist/context/precision/types.d.ts +23 -0
  131. package/dist/context/precision/types.js +2 -0
  132. package/dist/context/profiles.d.ts +45 -0
  133. package/dist/context/profiles.js +92 -0
  134. package/dist/context/prompt-builder.d.ts +76 -0
  135. package/dist/context/prompt-builder.js +133 -0
  136. package/dist/context/retriever.d.ts +44 -0
  137. package/dist/context/retriever.js +203 -0
  138. package/dist/context/router.d.ts +122 -0
  139. package/dist/context/router.js +291 -0
  140. package/dist/context/section-resolver.d.ts +38 -0
  141. package/dist/context/section-resolver.js +398 -0
  142. package/dist/context/tokenizer.d.ts +23 -0
  143. package/dist/context/tokenizer.js +78 -0
  144. package/dist/dependency/analyzer.d.ts +33 -0
  145. package/dist/dependency/analyzer.js +242 -0
  146. package/dist/dependency/data-flow-tracker.d.ts +12 -0
  147. package/dist/dependency/data-flow-tracker.js +97 -0
  148. package/dist/dependency/function-parser.d.ts +34 -0
  149. package/dist/dependency/function-parser.js +295 -0
  150. package/dist/dependency/index.d.ts +14 -0
  151. package/dist/dependency/index.js +20 -0
  152. package/dist/dependency/parser.d.ts +10 -0
  153. package/dist/dependency/parser.js +93 -0
  154. package/dist/dependency/types.d.ts +57 -0
  155. package/dist/dependency/types.js +2 -0
  156. package/dist/env/env-collector.d.ts +45 -0
  157. package/dist/env/env-collector.js +221 -0
  158. package/dist/env/index.d.ts +3 -0
  159. package/dist/env/index.js +2 -0
  160. package/dist/event-store.d.ts +27 -0
  161. package/dist/event-store.js +71 -0
  162. package/dist/evolution/git-manager.d.ts +46 -0
  163. package/dist/evolution/git-manager.js +276 -0
  164. package/dist/evolution/index.d.ts +3 -0
  165. package/dist/evolution/index.js +2 -0
  166. package/dist/flow/bootstrap-flow.d.ts +19 -0
  167. package/dist/flow/bootstrap-flow.js +72 -0
  168. package/dist/flow/flow-registry.d.ts +12 -0
  169. package/dist/flow/flow-registry.js +74 -0
  170. package/dist/flow/flow-tools.d.ts +8 -0
  171. package/dist/flow/flow-tools.js +106 -0
  172. package/dist/flow/index.d.ts +6 -0
  173. package/dist/flow/index.js +8 -0
  174. package/dist/flow/todo-flow.d.ts +25 -0
  175. package/dist/flow/todo-flow.js +107 -0
  176. package/dist/flow/types.d.ts +78 -0
  177. package/dist/flow/types.js +12 -0
  178. package/dist/flows/bootstrap.d.ts +18 -0
  179. package/dist/flows/bootstrap.js +119 -0
  180. package/dist/flows/index.d.ts +6 -0
  181. package/dist/flows/index.js +11 -0
  182. package/dist/flows/todo.d.ts +26 -0
  183. package/dist/flows/todo.js +174 -0
  184. package/dist/flows/tools.d.ts +8 -0
  185. package/dist/flows/tools.js +119 -0
  186. package/dist/flows/types.d.ts +27 -0
  187. package/dist/flows/types.js +10 -0
  188. package/dist/gateway/cli.d.ts +5 -0
  189. package/dist/gateway/cli.js +1027 -0
  190. package/dist/gateway/factory.d.ts +80 -0
  191. package/dist/gateway/factory.js +832 -0
  192. package/dist/gateway/guardian.d.ts +8 -0
  193. package/dist/gateway/guardian.js +30 -0
  194. package/dist/gateway/index.d.ts +3 -0
  195. package/dist/gateway/index.js +3 -0
  196. package/dist/gateway/server.d.ts +17 -0
  197. package/dist/gateway/server.js +96 -0
  198. package/dist/gateway/tui.d.ts +16 -0
  199. package/dist/gateway/tui.js +3273 -0
  200. package/dist/hot-reload/agent-watcher.d.ts +24 -0
  201. package/dist/hot-reload/agent-watcher.js +175 -0
  202. package/dist/hot-reload/bundle-watcher.d.ts +12 -0
  203. package/dist/hot-reload/bundle-watcher.js +35 -0
  204. package/dist/hot-reload/channel-watcher.d.ts +19 -0
  205. package/dist/hot-reload/channel-watcher.js +54 -0
  206. package/dist/hot-reload/command-watcher.d.ts +14 -0
  207. package/dist/hot-reload/command-watcher.js +54 -0
  208. package/dist/hot-reload/config-watcher.d.ts +20 -0
  209. package/dist/hot-reload/config-watcher.js +58 -0
  210. package/dist/hot-reload/index.d.ts +12 -0
  211. package/dist/hot-reload/index.js +12 -0
  212. package/dist/hot-reload/manager.d.ts +58 -0
  213. package/dist/hot-reload/manager.js +243 -0
  214. package/dist/hot-reload/manifest-watcher.d.ts +9 -0
  215. package/dist/hot-reload/manifest-watcher.js +42 -0
  216. package/dist/hot-reload/mcp-watcher.d.ts +18 -0
  217. package/dist/hot-reload/mcp-watcher.js +64 -0
  218. package/dist/hot-reload/model-catalog-watcher.d.ts +18 -0
  219. package/dist/hot-reload/model-catalog-watcher.js +62 -0
  220. package/dist/hot-reload/plugin-watcher.d.ts +20 -0
  221. package/dist/hot-reload/plugin-watcher.js +56 -0
  222. package/dist/hot-reload/prompt-watcher.d.ts +6 -0
  223. package/dist/hot-reload/prompt-watcher.js +38 -0
  224. package/dist/hot-reload/provider-watcher.d.ts +16 -0
  225. package/dist/hot-reload/provider-watcher.js +45 -0
  226. package/dist/hot-reload/skill-watcher.d.ts +19 -0
  227. package/dist/hot-reload/skill-watcher.js +82 -0
  228. package/dist/hot-reload/tool-watcher.d.ts +16 -0
  229. package/dist/hot-reload/tool-watcher.js +168 -0
  230. package/dist/hot-reload/workflow-watcher.d.ts +19 -0
  231. package/dist/hot-reload/workflow-watcher.js +84 -0
  232. package/dist/index.d.ts +3 -0
  233. package/dist/index.js +6 -0
  234. package/dist/knowledge/fts5-retriever.d.ts +30 -0
  235. package/dist/knowledge/fts5-retriever.js +223 -0
  236. package/dist/knowledge/index.d.ts +11 -0
  237. package/dist/knowledge/index.js +14 -0
  238. package/dist/knowledge/indexer.d.ts +41 -0
  239. package/dist/knowledge/indexer.js +186 -0
  240. package/dist/knowledge/query-preprocessor.d.ts +13 -0
  241. package/dist/knowledge/query-preprocessor.js +63 -0
  242. package/dist/knowledge/retriever.d.ts +45 -0
  243. package/dist/knowledge/retriever.js +9 -0
  244. package/dist/knowledge/store.d.ts +27 -0
  245. package/dist/knowledge/store.js +61 -0
  246. package/dist/knowledge/structured-store.d.ts +78 -0
  247. package/dist/knowledge/structured-store.js +280 -0
  248. package/dist/knowledge/structured-tools.d.ts +12 -0
  249. package/dist/knowledge/structured-tools.js +151 -0
  250. package/dist/knowledge/tools.d.ts +20 -0
  251. package/dist/knowledge/tools.js +238 -0
  252. package/dist/knowledge/watcher.d.ts +28 -0
  253. package/dist/knowledge/watcher.js +113 -0
  254. package/dist/lifecycle/index.d.ts +12 -0
  255. package/dist/lifecycle/index.js +14 -0
  256. package/dist/lifecycle/interface.d.ts +94 -0
  257. package/dist/lifecycle/interface.js +2 -0
  258. package/dist/lifecycle/local-model.d.ts +62 -0
  259. package/dist/lifecycle/local-model.js +331 -0
  260. package/dist/lifecycle/manager.d.ts +70 -0
  261. package/dist/lifecycle/manager.js +374 -0
  262. package/dist/lifecycle/supervisor.d.ts +89 -0
  263. package/dist/lifecycle/supervisor.js +277 -0
  264. package/dist/lifecycle-integration-test.d.ts +2 -0
  265. package/dist/lifecycle-integration-test.js +72 -0
  266. package/dist/local-model/download-manager.d.ts +59 -0
  267. package/dist/local-model/download-manager.js +517 -0
  268. package/dist/local-model/index.d.ts +109 -0
  269. package/dist/local-model/index.js +233 -0
  270. package/dist/local-model/llamacpp-provider.d.ts +95 -0
  271. package/dist/local-model/llamacpp-provider.js +379 -0
  272. package/dist/local-model/model-bridge.d.ts +48 -0
  273. package/dist/local-model/model-bridge.js +256 -0
  274. package/dist/local-model/model-registry.d.ts +47 -0
  275. package/dist/local-model/model-registry.js +188 -0
  276. package/dist/local-model/types.d.ts +49 -0
  277. package/dist/local-model/types.js +2 -0
  278. package/dist/logging/index.d.ts +3 -0
  279. package/dist/logging/index.js +3 -0
  280. package/dist/logging/logger.d.ts +56 -0
  281. package/dist/logging/logger.js +94 -0
  282. package/dist/machine/flows/bootstrap.d.ts +18 -0
  283. package/dist/machine/flows/bootstrap.js +119 -0
  284. package/dist/machine/flows/index.d.ts +6 -0
  285. package/dist/machine/flows/index.js +11 -0
  286. package/dist/machine/flows/spec.d.ts +17 -0
  287. package/dist/machine/flows/spec.js +176 -0
  288. package/dist/machine/flows/todo.d.ts +26 -0
  289. package/dist/machine/flows/todo.js +175 -0
  290. package/dist/machine/flows/tools.d.ts +8 -0
  291. package/dist/machine/flows/tools.js +119 -0
  292. package/dist/machine/flows/types.d.ts +33 -0
  293. package/dist/machine/flows/types.js +10 -0
  294. package/dist/machine/index.d.ts +8 -0
  295. package/dist/machine/index.js +9 -0
  296. package/dist/machine/registry.d.ts +34 -0
  297. package/dist/machine/registry.js +98 -0
  298. package/dist/machine/runner.d.ts +41 -0
  299. package/dist/machine/runner.js +177 -0
  300. package/dist/machine/types.d.ts +121 -0
  301. package/dist/machine/types.js +9 -0
  302. package/dist/mcp/bridge.d.ts +33 -0
  303. package/dist/mcp/bridge.js +99 -0
  304. package/dist/mcp/client.d.ts +37 -0
  305. package/dist/mcp/client.js +161 -0
  306. package/dist/mcp/config.d.ts +15 -0
  307. package/dist/mcp/config.js +85 -0
  308. package/dist/mcp/index.d.ts +7 -0
  309. package/dist/mcp/index.js +7 -0
  310. package/dist/mcp/install-manager.d.ts +31 -0
  311. package/dist/mcp/install-manager.js +158 -0
  312. package/dist/mcp/lifecycle.d.ts +41 -0
  313. package/dist/mcp/lifecycle.js +175 -0
  314. package/dist/mcp/process-transport.d.ts +21 -0
  315. package/dist/mcp/process-transport.js +59 -0
  316. package/dist/mcp/side-effect.d.ts +5 -0
  317. package/dist/mcp/side-effect.js +21 -0
  318. package/dist/mcp/system.d.ts +95 -0
  319. package/dist/mcp/system.js +279 -0
  320. package/dist/memory/companion-session.d.ts +22 -0
  321. package/dist/memory/companion-session.js +77 -0
  322. package/dist/memory/compression-boundary.d.ts +20 -0
  323. package/dist/memory/compression-boundary.js +40 -0
  324. package/dist/memory/conversation.d.ts +34 -0
  325. package/dist/memory/conversation.js +107 -0
  326. package/dist/memory/events.d.ts +42 -0
  327. package/dist/memory/events.js +56 -0
  328. package/dist/memory/index.d.ts +7 -0
  329. package/dist/memory/index.js +6 -0
  330. package/dist/memory/memory-store.d.ts +11 -0
  331. package/dist/memory/memory-store.js +51 -0
  332. package/dist/memory/session-allowlist.d.ts +11 -0
  333. package/dist/memory/session-allowlist.js +50 -0
  334. package/dist/memory/session.d.ts +48 -0
  335. package/dist/memory/session.js +275 -0
  336. package/dist/memory/stats.d.ts +23 -0
  337. package/dist/memory/stats.js +59 -0
  338. package/dist/memory/summary.d.ts +7 -0
  339. package/dist/memory/summary.js +23 -0
  340. package/dist/multimodal/index.d.ts +66 -0
  341. package/dist/multimodal/index.js +210 -0
  342. package/dist/orchestrator/index.d.ts +5 -0
  343. package/dist/orchestrator/index.js +4 -0
  344. package/dist/orchestrator/loop.d.ts +331 -0
  345. package/dist/orchestrator/loop.js +2443 -0
  346. package/dist/orchestrator/plan-store.d.ts +81 -0
  347. package/dist/orchestrator/plan-store.js +167 -0
  348. package/dist/orchestrator/planner.d.ts +20 -0
  349. package/dist/orchestrator/planner.js +34 -0
  350. package/dist/parser/index.d.ts +2 -0
  351. package/dist/parser/index.js +2 -0
  352. package/dist/parser/router.d.ts +30 -0
  353. package/dist/parser/router.js +61 -0
  354. package/dist/plugins/api.d.ts +39 -0
  355. package/dist/plugins/api.js +85 -0
  356. package/dist/plugins/define.d.ts +27 -0
  357. package/dist/plugins/define.js +32 -0
  358. package/dist/plugins/index.d.ts +9 -0
  359. package/dist/plugins/index.js +5 -0
  360. package/dist/plugins/loader.d.ts +39 -0
  361. package/dist/plugins/loader.js +128 -0
  362. package/dist/plugins/manager.d.ts +61 -0
  363. package/dist/plugins/manager.js +257 -0
  364. package/dist/plugins/types.d.ts +82 -0
  365. package/dist/plugins/types.js +2 -0
  366. package/dist/prompts/agents/code-reviewer.md +16 -0
  367. package/dist/prompts/agents/security-auditor.md +17 -0
  368. package/dist/prompts/agents/test-writer.md +15 -0
  369. package/dist/prompts/attention/attention.md +12 -0
  370. package/dist/prompts/environment/environment.md +18 -0
  371. package/dist/prompts/environment/feishu.md +107 -0
  372. package/dist/prompts/flows/bootstrap-confirm.md +14 -0
  373. package/dist/prompts/flows/bootstrap-identity.md +11 -0
  374. package/dist/prompts/flows/bootstrap-soul.md +19 -0
  375. package/dist/prompts/flows/bootstrap-user.md +11 -0
  376. package/dist/prompts/flows/spec-checklist.md +27 -0
  377. package/dist/prompts/flows/spec-define.md +64 -0
  378. package/dist/prompts/flows/spec-executing-checklist.md +15 -0
  379. package/dist/prompts/flows/spec-executing-tasks.md +15 -0
  380. package/dist/prompts/flows/spec-spec.md +51 -0
  381. package/dist/prompts/flows/spec-tasks.md +32 -0
  382. package/dist/prompts/flows/todo-execution.md +7 -0
  383. package/dist/prompts/flows/todo-planning.md +18 -0
  384. package/dist/prompts/framework/architecture.md +131 -0
  385. package/dist/prompts/identity/identity.md +2 -0
  386. package/dist/prompts/loader.d.ts +24 -0
  387. package/dist/prompts/loader.js +102 -0
  388. package/dist/prompts/loader.ts +119 -0
  389. package/dist/prompts/orchestration/summary.md +14 -0
  390. package/dist/prompts/persona/BOOTSTRAP.md +5 -0
  391. package/dist/prompts/persona/IDENTITY.md +16 -0
  392. package/dist/prompts/persona/PartnerMemory.md +5 -0
  393. package/dist/prompts/persona/PartnerSoul.md +7 -0
  394. package/dist/prompts/persona/SOUL.md +30 -0
  395. package/dist/prompts/persona/USER.md +16 -0
  396. package/dist/prompts/precise/analyze.md +23 -0
  397. package/dist/prompts/precise/persona.md +18 -0
  398. package/dist/prompts/safety/coding-standards.md +5 -0
  399. package/dist/prompts/safety/safety.md +4 -0
  400. package/dist/prompts/skills/code-review.md +4 -0
  401. package/dist/prompts/skills/debug.md +7 -0
  402. package/dist/prompts/skills/framework-reference.md +131 -0
  403. package/dist/prompts/skills/refactor.md +6 -0
  404. package/dist/prompts/summary.md +22 -0
  405. package/dist/prompts/tools/framework-capabilities.md +241 -0
  406. package/dist/prompts/tools/tool-rules.md +15 -0
  407. package/dist/provider/anthropic.d.ts +62 -0
  408. package/dist/provider/anthropic.js +361 -0
  409. package/dist/provider/catalog.d.ts +58 -0
  410. package/dist/provider/catalog.js +97 -0
  411. package/dist/provider/compatible.d.ts +89 -0
  412. package/dist/provider/compatible.js +328 -0
  413. package/dist/provider/config.d.ts +23 -0
  414. package/dist/provider/config.js +158 -0
  415. package/dist/provider/deepseek.d.ts +25 -0
  416. package/dist/provider/deepseek.js +37 -0
  417. package/dist/provider/fallback.d.ts +51 -0
  418. package/dist/provider/fallback.js +113 -0
  419. package/dist/provider/gemini.d.ts +27 -0
  420. package/dist/provider/gemini.js +170 -0
  421. package/dist/provider/index.d.ts +36 -0
  422. package/dist/provider/index.js +42 -0
  423. package/dist/provider/interface.d.ts +62 -0
  424. package/dist/provider/interface.js +2 -0
  425. package/dist/provider/local-config.d.ts +37 -0
  426. package/dist/provider/local-config.js +146 -0
  427. package/dist/provider/local.d.ts +45 -0
  428. package/dist/provider/local.js +248 -0
  429. package/dist/provider/manager.d.ts +67 -0
  430. package/dist/provider/manager.js +355 -0
  431. package/dist/provider/mimo.d.ts +19 -0
  432. package/dist/provider/mimo.js +30 -0
  433. package/dist/provider/minimax.d.ts +22 -0
  434. package/dist/provider/minimax.js +33 -0
  435. package/dist/provider/model-catalog-loader.d.ts +42 -0
  436. package/dist/provider/model-catalog-loader.js +89 -0
  437. package/dist/provider/model-channel-registry.d.ts +130 -0
  438. package/dist/provider/model-channel-registry.js +488 -0
  439. package/dist/provider/model-router.d.ts +60 -0
  440. package/dist/provider/model-router.js +87 -0
  441. package/dist/provider/openai.d.ts +54 -0
  442. package/dist/provider/openai.js +274 -0
  443. package/dist/provider/qwen.d.ts +19 -0
  444. package/dist/provider/qwen.js +30 -0
  445. package/dist/provider/resilient.d.ts +46 -0
  446. package/dist/provider/resilient.js +181 -0
  447. package/dist/provider/retry.d.ts +16 -0
  448. package/dist/provider/retry.js +78 -0
  449. package/dist/provider/router.d.ts +68 -0
  450. package/dist/provider/router.js +145 -0
  451. package/dist/provider/tool-args-recovery.d.ts +36 -0
  452. package/dist/provider/tool-args-recovery.js +91 -0
  453. package/dist/provider/user-id.d.ts +13 -0
  454. package/dist/provider/user-id.js +53 -0
  455. package/dist/provider/zhipu.d.ts +19 -0
  456. package/dist/provider/zhipu.js +32 -0
  457. package/dist/registry/agent.registry.d.ts +57 -0
  458. package/dist/registry/agent.registry.js +224 -0
  459. package/dist/registry/base.d.ts +54 -0
  460. package/dist/registry/base.js +99 -0
  461. package/dist/registry/channel.registry.d.ts +53 -0
  462. package/dist/registry/channel.registry.js +87 -0
  463. package/dist/registry/index.d.ts +9 -0
  464. package/dist/registry/index.js +10 -0
  465. package/dist/registry/mcp.registry.d.ts +2 -0
  466. package/dist/registry/mcp.registry.js +2 -0
  467. package/dist/registry/plugin.registry.d.ts +33 -0
  468. package/dist/registry/plugin.registry.js +66 -0
  469. package/dist/registry/provider.registry.d.ts +51 -0
  470. package/dist/registry/provider.registry.js +104 -0
  471. package/dist/registry/skill.registry.d.ts +33 -0
  472. package/dist/registry/skill.registry.js +95 -0
  473. package/dist/registry/tool.registry.d.ts +68 -0
  474. package/dist/registry/tool.registry.js +185 -0
  475. package/dist/repair/loop-guard.d.ts +98 -0
  476. package/dist/repair/loop-guard.js +217 -0
  477. package/dist/repair/scavenge.d.ts +19 -0
  478. package/dist/repair/scavenge.js +81 -0
  479. package/dist/repair/storm.d.ts +7 -0
  480. package/dist/repair/storm.js +7 -0
  481. package/dist/rollback/index.d.ts +5 -0
  482. package/dist/rollback/index.js +4 -0
  483. package/dist/rollback/rollback-tool.d.ts +13 -0
  484. package/dist/rollback/rollback-tool.js +167 -0
  485. package/dist/rollback/turn-recorder.d.ts +37 -0
  486. package/dist/rollback/turn-recorder.js +183 -0
  487. package/dist/rollback/turn-store.d.ts +29 -0
  488. package/dist/rollback/turn-store.js +114 -0
  489. package/dist/rollback/types.d.ts +51 -0
  490. package/dist/rollback/types.js +9 -0
  491. package/dist/runtime/config-center.d.ts +92 -0
  492. package/dist/runtime/config-center.js +467 -0
  493. package/dist/runtime/config-schema.d.ts +201 -0
  494. package/dist/runtime/config-schema.js +2 -0
  495. package/dist/runtime/defaults.d.ts +3 -0
  496. package/dist/runtime/defaults.js +146 -0
  497. package/dist/schedule/cron.d.ts +24 -0
  498. package/dist/schedule/cron.js +145 -0
  499. package/dist/schedule/index.d.ts +6 -0
  500. package/dist/schedule/index.js +4 -0
  501. package/dist/schedule/persistence.d.ts +33 -0
  502. package/dist/schedule/persistence.js +106 -0
  503. package/dist/schedule/scheduler.d.ts +85 -0
  504. package/dist/schedule/scheduler.js +630 -0
  505. package/dist/schedule/types.d.ts +185 -0
  506. package/dist/schedule/types.js +2 -0
  507. package/dist/setup/config.d.ts +189 -0
  508. package/dist/setup/config.js +253 -0
  509. package/dist/setup/index.d.ts +3 -0
  510. package/dist/setup/index.js +3 -0
  511. package/dist/setup/model-defaults.d.ts +13 -0
  512. package/dist/setup/model-defaults.js +87 -0
  513. package/dist/setup/persona-bootstrap.d.ts +42 -0
  514. package/dist/setup/persona-bootstrap.js +379 -0
  515. package/dist/setup/wizard.d.ts +32 -0
  516. package/dist/setup/wizard.js +384 -0
  517. package/dist/skills/index.d.ts +4 -0
  518. package/dist/skills/index.js +4 -0
  519. package/dist/skills/loader.d.ts +12 -0
  520. package/dist/skills/loader.js +83 -0
  521. package/dist/skills/registry.d.ts +2 -0
  522. package/dist/skills/registry.js +2 -0
  523. package/dist/skills/skill-tool.d.ts +20 -0
  524. package/dist/skills/skill-tool.js +49 -0
  525. package/dist/tools/archive.d.ts +17 -0
  526. package/dist/tools/archive.js +131 -0
  527. package/dist/tools/ask-user.d.ts +9 -0
  528. package/dist/tools/ask-user.js +62 -0
  529. package/dist/tools/background-registry.d.ts +45 -0
  530. package/dist/tools/background-registry.js +164 -0
  531. package/dist/tools/bash.d.ts +56 -0
  532. package/dist/tools/bash.js +391 -0
  533. package/dist/tools/bundle-registry.d.ts +42 -0
  534. package/dist/tools/bundle-registry.js +239 -0
  535. package/dist/tools/bundle-tools.d.ts +11 -0
  536. package/dist/tools/bundle-tools.js +168 -0
  537. package/dist/tools/channel-info.d.ts +5 -0
  538. package/dist/tools/channel-info.js +38 -0
  539. package/dist/tools/compression.d.ts +7 -0
  540. package/dist/tools/compression.js +21 -0
  541. package/dist/tools/config.d.ts +23 -0
  542. package/dist/tools/config.js +255 -0
  543. package/dist/tools/db-query.d.ts +12 -0
  544. package/dist/tools/db-query.js +107 -0
  545. package/dist/tools/diagnostics.d.ts +30 -0
  546. package/dist/tools/diagnostics.js +111 -0
  547. package/dist/tools/diff-channel.d.ts +9 -0
  548. package/dist/tools/diff-channel.js +17 -0
  549. package/dist/tools/diff-files.d.ts +17 -0
  550. package/dist/tools/diff-files.js +88 -0
  551. package/dist/tools/disk-usage.d.ts +34 -0
  552. package/dist/tools/disk-usage.js +258 -0
  553. package/dist/tools/edit.d.ts +30 -0
  554. package/dist/tools/edit.js +235 -0
  555. package/dist/tools/executor.d.ts +32 -0
  556. package/dist/tools/executor.js +66 -0
  557. package/dist/tools/file-tracker.d.ts +20 -0
  558. package/dist/tools/file-tracker.js +44 -0
  559. package/dist/tools/filtered-registry.d.ts +29 -0
  560. package/dist/tools/filtered-registry.js +50 -0
  561. package/dist/tools/flow.d.ts +10 -0
  562. package/dist/tools/flow.js +180 -0
  563. package/dist/tools/git-tool.d.ts +24 -0
  564. package/dist/tools/git-tool.js +113 -0
  565. package/dist/tools/glob.d.ts +29 -0
  566. package/dist/tools/glob.js +152 -0
  567. package/dist/tools/grep.d.ts +14 -0
  568. package/dist/tools/grep.js +325 -0
  569. package/dist/tools/http-request.d.ts +14 -0
  570. package/dist/tools/http-request.js +126 -0
  571. package/dist/tools/index.d.ts +43 -0
  572. package/dist/tools/index.js +76 -0
  573. package/dist/tools/injection-filter.d.ts +6 -0
  574. package/dist/tools/injection-filter.js +71 -0
  575. package/dist/tools/insert.d.ts +13 -0
  576. package/dist/tools/insert.js +61 -0
  577. package/dist/tools/interface.d.ts +30 -0
  578. package/dist/tools/interface.js +2 -0
  579. package/dist/tools/json-edit.d.ts +15 -0
  580. package/dist/tools/json-edit.js +122 -0
  581. package/dist/tools/multi-edit.d.ts +9 -0
  582. package/dist/tools/multi-edit.js +146 -0
  583. package/dist/tools/path-sandbox.d.ts +14 -0
  584. package/dist/tools/path-sandbox.js +60 -0
  585. package/dist/tools/process-tools.d.ts +15 -0
  586. package/dist/tools/process-tools.js +95 -0
  587. package/dist/tools/python-bridge/bridge.d.ts +24 -0
  588. package/dist/tools/python-bridge/bridge.js +39 -0
  589. package/dist/tools/python-bridge/executor.d.ts +6 -0
  590. package/dist/tools/python-bridge/executor.js +69 -0
  591. package/dist/tools/python-bridge/index.d.ts +5 -0
  592. package/dist/tools/python-bridge/index.js +4 -0
  593. package/dist/tools/python-bridge/parser.d.ts +21 -0
  594. package/dist/tools/python-bridge/parser.js +258 -0
  595. package/dist/tools/read.d.ts +16 -0
  596. package/dist/tools/read.js +276 -0
  597. package/dist/tools/registry.d.ts +2 -0
  598. package/dist/tools/registry.js +2 -0
  599. package/dist/tools/restart.d.ts +10 -0
  600. package/dist/tools/restart.js +46 -0
  601. package/dist/tools/result-buffer.d.ts +66 -0
  602. package/dist/tools/result-buffer.js +146 -0
  603. package/dist/tools/runtime-control.d.ts +163 -0
  604. package/dist/tools/runtime-control.js +1780 -0
  605. package/dist/tools/symbol-references.d.ts +5 -0
  606. package/dist/tools/symbol-references.js +331 -0
  607. package/dist/tools/system-info.d.ts +3 -0
  608. package/dist/tools/system-info.js +55 -0
  609. package/dist/tools/write.d.ts +18 -0
  610. package/dist/tools/write.js +118 -0
  611. package/dist/tools/xref/index.d.ts +25 -0
  612. package/dist/tools/xref/index.js +25 -0
  613. package/dist/tools/xref/manager.d.ts +85 -0
  614. package/dist/tools/xref/manager.js +948 -0
  615. package/dist/tools/xref/parser.d.ts +34 -0
  616. package/dist/tools/xref/parser.js +64 -0
  617. package/dist/tools/xref/regex-parser.d.ts +26 -0
  618. package/dist/tools/xref/regex-parser.js +446 -0
  619. package/dist/tools/xref/schema.d.ts +104 -0
  620. package/dist/tools/xref/schema.js +68 -0
  621. package/dist/tools/xref/ts-parser.d.ts +20 -0
  622. package/dist/tools/xref/ts-parser.js +403 -0
  623. package/dist/tools/xref/xref-build.d.ts +20 -0
  624. package/dist/tools/xref/xref-build.js +128 -0
  625. package/dist/tools/xref/xref-graph.d.ts +24 -0
  626. package/dist/tools/xref/xref-graph.js +88 -0
  627. package/dist/tools/xref/xref-query.d.ts +30 -0
  628. package/dist/tools/xref/xref-query.js +123 -0
  629. package/dist/types.d.ts +217 -0
  630. package/dist/types.js +2 -0
  631. package/dist/ui/assistant-message.d.ts +7 -0
  632. package/dist/ui/assistant-message.js +18 -0
  633. package/dist/ui/chat-log.d.ts +52 -0
  634. package/dist/ui/chat-log.js +246 -0
  635. package/dist/ui/command-registry.d.ts +73 -0
  636. package/dist/ui/command-registry.js +838 -0
  637. package/dist/ui/diff-component.d.ts +14 -0
  638. package/dist/ui/diff-component.js +42 -0
  639. package/dist/ui/hyperlink-markdown.d.ts +10 -0
  640. package/dist/ui/hyperlink-markdown.js +21 -0
  641. package/dist/ui/markdown-message.d.ts +10 -0
  642. package/dist/ui/markdown-message.js +16 -0
  643. package/dist/ui/osc8-hyperlinks.d.ts +4 -0
  644. package/dist/ui/osc8-hyperlinks.js +142 -0
  645. package/dist/ui/pi-tui-editor.d.ts +35 -0
  646. package/dist/ui/pi-tui-editor.js +79 -0
  647. package/dist/ui/slash-commands.d.ts +16 -0
  648. package/dist/ui/slash-commands.js +29 -0
  649. package/dist/ui/slash-panel.d.ts +54 -0
  650. package/dist/ui/slash-panel.js +199 -0
  651. package/dist/ui/theme.d.ts +120 -0
  652. package/dist/ui/theme.js +154 -0
  653. package/dist/ui/tool-display.d.ts +13 -0
  654. package/dist/ui/tool-display.js +85 -0
  655. package/dist/ui/tool-execution.d.ts +22 -0
  656. package/dist/ui/tool-execution.js +87 -0
  657. package/dist/ui/tui-formatters.d.ts +2 -0
  658. package/dist/ui/tui-formatters.js +145 -0
  659. package/dist/ui/user-message.d.ts +5 -0
  660. package/dist/ui/user-message.js +11 -0
  661. package/dist/update/check.d.ts +8 -0
  662. package/dist/update/check.js +28 -0
  663. package/dist/update/config.d.ts +6 -0
  664. package/dist/update/config.js +18 -0
  665. package/dist/update/download.d.ts +3 -0
  666. package/dist/update/download.js +27 -0
  667. package/dist/update/index.d.ts +6 -0
  668. package/dist/update/index.js +5 -0
  669. package/dist/update/install.d.ts +3 -0
  670. package/dist/update/install.js +33 -0
  671. package/dist/update/types.d.ts +16 -0
  672. package/dist/update/types.js +2 -0
  673. package/dist/utils/diff.d.ts +9 -0
  674. package/dist/utils/diff.js +45 -0
  675. package/dist/utils/misc.d.ts +12 -0
  676. package/dist/utils/misc.js +34 -0
  677. package/dist/world-engine/agent.d.ts +41 -0
  678. package/dist/world-engine/agent.js +385 -0
  679. package/dist/world-engine/index.d.ts +45 -0
  680. package/dist/world-engine/index.js +160 -0
  681. package/dist/world-engine/sim.d.ts +14 -0
  682. package/dist/world-engine/sim.js +120 -0
  683. package/dist/world-engine/store.d.ts +110 -0
  684. package/dist/world-engine/store.js +519 -0
  685. package/dist/world-engine/ticker.d.ts +37 -0
  686. package/dist/world-engine/ticker.js +214 -0
  687. package/dist/world-engine/tools.d.ts +6 -0
  688. package/dist/world-engine/tools.js +380 -0
  689. package/dist/world-engine/types.d.ts +202 -0
  690. package/dist/world-engine/types.js +56 -0
  691. package/docs/api.md +180 -0
  692. package/docs/architecture.md +206 -0
  693. package/docs/diagnostics/2026-06-08-config-prompt-guidance.md +67 -0
  694. package/docs/superpowers/plans/2026-06-08-global-bootstrap-mode.md +89 -0
  695. package/docs/superpowers/specs/2026-06-08-global-bootstrap-mode-design.md +174 -0
  696. package/docs/user-guide.md +226 -0
  697. package/package.json +63 -0
  698. package/plugins/example-greeter/index.js +55 -0
  699. package/plugins/example-greeter/plugin.json +8 -0
  700. package/pnpm-workspace.yaml +5 -0
  701. package/provider_arch.md +179 -0
  702. package/start-webui.sh +27 -0
  703. package/tsconfig.tsbuildinfo +1 -0
  704. package/webui-channel-design.md +789 -0
@@ -0,0 +1,398 @@
1
+ import { loadPrompt, renderPrompt } from '../prompts/loader.js';
2
+ import { loadProjectContext } from './prompt-builder.js';
3
+ import { Retriever } from './retriever.js';
4
+ import fs from 'node:fs';
5
+ import path from 'node:path';
6
+ import { getGlobalPersonaDir } from '../setup/persona-bootstrap.js';
7
+ /** 查找旁路Agent对指定 section 的注入 */
8
+ function findBypassInjection(sectionName, injections) {
9
+ if (!injections?.length)
10
+ return undefined;
11
+ return injections.find(ij => ij.section === sectionName);
12
+ }
13
+ export async function resolveSection(sec, ctx) {
14
+ // Router 的 beforeSection 钩子:在正常解析前介入
15
+ if (ctx.router.beforeSection) {
16
+ const preempted = await ctx.router.beforeSection(sec, ctx);
17
+ if (preempted !== undefined) {
18
+ return preempted || undefined; // null → undefined(跳过此 section)
19
+ }
20
+ }
21
+ // 旁路Agent 注入:replace 模式时替换整个 section 内容
22
+ const bypassInj = findBypassInjection(sec.name, ctx.bypassInjections);
23
+ if (bypassInj?.mode === 'replace') {
24
+ return bypassInj.content;
25
+ }
26
+ // 正常解析
27
+ let resolved;
28
+ switch (sec.type) {
29
+ case 'static':
30
+ resolved = resolveStatic(sec, ctx);
31
+ break;
32
+ case 'template':
33
+ resolved = resolveTemplate(sec, ctx);
34
+ break;
35
+ case 'runtime':
36
+ resolved = await resolveRuntime(sec, ctx);
37
+ break;
38
+ case 'retrieval':
39
+ resolved = await resolveRetrieval(sec, ctx);
40
+ break;
41
+ case 'conditional':
42
+ resolved = resolveConditional(sec, ctx);
43
+ break;
44
+ default: resolved = undefined;
45
+ }
46
+ // 旁路Agent 注入:append 模式时追加到正常解析结果末尾
47
+ if (bypassInj?.mode === 'append' && bypassInj.content) {
48
+ resolved = resolved ? `${resolved}\n\n${bypassInj.content}` : bypassInj.content;
49
+ }
50
+ return resolved;
51
+ }
52
+ // --- Static ---
53
+ function resolveStatic(sec, ctx) {
54
+ const router = ctx?.router;
55
+ if (sec.name === 'persona_soul') {
56
+ // precise_mode 保持原有 activeConditions 逻辑
57
+ if (ctx?.activeConditions?.has('precise_mode'))
58
+ return undefined;
59
+ // Router 定义了替代 persona 来源 → 加载替代内容,跳过默认 SOUL
60
+ // 注:resolve 字段用于 runtime section(异步),static section 只用 source + append。
61
+ // 如需完全异步接管 persona,应使用 beforeSection 钩子。
62
+ const personaOverride = router?.sourceOverrides['persona_soul'];
63
+ if (personaOverride) {
64
+ try {
65
+ const effectiveSource = personaOverride.source ?? sec.source;
66
+ let content = loadPrompt(effectiveSource.replace(/^prompts\//, ''));
67
+ if (personaOverride.append) {
68
+ content = content + '\n\n' + personaOverride.append;
69
+ }
70
+ return content;
71
+ }
72
+ catch {
73
+ return undefined;
74
+ }
75
+ }
76
+ return buildSoulSection() || undefined;
77
+ }
78
+ // Router 指定跳过的 section
79
+ if (router?.skipSections.includes(sec.name)) {
80
+ return undefined;
81
+ }
82
+ try {
83
+ return loadPrompt(sec.source.replace(/^prompts\//, ''));
84
+ }
85
+ catch {
86
+ return undefined;
87
+ }
88
+ }
89
+ // --- Template ---
90
+ function resolveTemplate(sec, ctx) {
91
+ const vars = {};
92
+ if (sec.templateVars) {
93
+ for (const v of sec.templateVars) {
94
+ if (v === 'cwd')
95
+ vars.cwd = ctx.cwd;
96
+ if (v === 'toolNames') {
97
+ vars.toolNames = ctx.tools.map(t => t.name).join(', ') || '(无)';
98
+ }
99
+ }
100
+ }
101
+ try {
102
+ return renderPrompt(loadPrompt(sec.source.replace(/^prompts\//, '')), vars);
103
+ }
104
+ catch {
105
+ return undefined;
106
+ }
107
+ }
108
+ // --- Runtime ---
109
+ //
110
+ // 运行时 Section 解析器。
111
+ //
112
+ // Zone 布局(详见 manifest-defaults.ts):
113
+ // Zone 1 (Anchor) — 身份/环境/注册表/记忆(稳定,享受前缀缓存)
114
+ // Zone 2 (Manifest) — 辅助索引区(默认关闭)
115
+ // Zone 3 (History) — 摘要/项目上下文/历史消息(持续增长,压缩器管理)
116
+ // Zone 4 (Context) — 知识库检索(可独立开关)
117
+ // Zone 5 (Live) — Flow 注入/时间戳/用户输入(每轮变化,不缓存)
118
+ //
119
+ // 通用回退规则:runtime:xxx → 查找 ctx.sources.get('xxx'),若存在则取其内容。
120
+ async function resolveRuntime(sec, ctx) {
121
+ const src = sec.source;
122
+ if (src === 'runtime:plan') {
123
+ return ctx.currentPlan ? `[Current Plan]\n${ctx.currentPlan}` : undefined;
124
+ }
125
+ if (src === 'runtime:impact') {
126
+ return ctx.impactInfo ? `[Dependency Impact Analysis]\n${ctx.impactInfo}` : undefined;
127
+ }
128
+ if (src === 'runtime:summary') {
129
+ return ctx.historySummary ? `[Context Summary]\n${ctx.historySummary}` : undefined;
130
+ }
131
+ if (src === 'runtime:timestamp') {
132
+ // 时间戳的条件注入由 Router.beforeSection 控制(如 CompanionRouter 的概率注入)。
133
+ // 此处无条件生成时间戳文本——如果 beforeSection 返回了 null,此代码不会执行。
134
+ // # currentDate 是系统元数据标记(非用户输入),模型训练数据中识别为背景信息
135
+ const [datePart, timePart] = ctx.timestamp.split(' ');
136
+ const dateSlash = datePart.replace(/-/g, '/');
137
+ return `# currentDate\nToday is ${dateSlash}, ${timePart}.`;
138
+ }
139
+ if (src === 'runtime:userInput') {
140
+ return ctx.userInput || undefined;
141
+ }
142
+ if (src === 'runtime:env') {
143
+ const envSource = ctx.sources?.get('env-info');
144
+ if (envSource?.getContent) {
145
+ const content = await envSource.getContent();
146
+ return content || undefined;
147
+ }
148
+ return undefined;
149
+ }
150
+ // Router(或 profile)指定跳过的 runtime source
151
+ const runtimeKey = src.startsWith('runtime:') ? src.slice('runtime:'.length) : '';
152
+ const skipSources = ctx.router?.skipRuntimeSources ?? ctx.profile.skipRuntimeSources;
153
+ if (skipSources.includes(runtimeKey)) {
154
+ return undefined;
155
+ }
156
+ if (src === 'runtime:skills' || src === 'runtime:agents' || src === 'runtime:mcp') {
157
+ const kind = src.replace('runtime:', '');
158
+ return buildSourcePartsFromCtx(kind, ctx);
159
+ }
160
+ // 会话临时 MCP:仅收集 cacheability === 'live' 的 mcp- 源,用于 Zone 5 热插拔展示
161
+ if (src === 'runtime:mcp_live') {
162
+ return buildLiveMcpIndex(ctx);
163
+ }
164
+ // 会话临时工具:hot-reload 热添加的工具不进 Zone 2 tool_rules,而在 Zone 5 session_tools 展示
165
+ if (src === 'runtime:tools_live') {
166
+ return resolveContextSourceContent('session-tools', ctx);
167
+ }
168
+ // MCP 状态变更通知:从 ContextSource 读取并消费,注入后自动清空
169
+ if (src === 'runtime:mcp_status') {
170
+ return resolveContextSourceContent('mcp-status', ctx);
171
+ }
172
+ // 工具包索引(Zone 2):所有 bundle 的名称 + 简介
173
+ if (src === 'runtime:tool_bundles') {
174
+ return resolveContextSourceContent('tool-bundles', ctx);
175
+ }
176
+ // 模式注入(Zone 5):plan/spec 激活时注入提示词
177
+ // ── Flow 注入在 Zone 5(flow_injection),由 ContextSource 驱动 ──
178
+ // runtime:history 由 composer.ts assembleZone() 专门处理(展开为 Message[])。
179
+ // 此处的 handler 仅作为防护:如果未来 manifest 将 history section 从 Zone 3 移走,
180
+ // 或 composer 的硬编码拦截被移除,此处显式返回 undefined 而非静默丢失。
181
+ // 架构说明见 §0.5 原则③:所有 runtime source 应在 section-resolver 中有显式路由。
182
+ if (src === 'runtime:history') {
183
+ return undefined;
184
+ }
185
+ // Router(或 profile)指定了替代 memory 来源 → 路由到对应 ContextSource
186
+ if (src === 'runtime:memory') {
187
+ const memoryOverride = ctx.router?.sourceOverrides['memory'];
188
+ const altSourceName = memoryOverride?.source ?? ctx.profile.memorySource;
189
+ if (altSourceName) {
190
+ const altSource = ctx.sources?.get(altSourceName);
191
+ if (altSource?.getContent) {
192
+ const content = await altSource.getContent();
193
+ return content || undefined;
194
+ }
195
+ return undefined;
196
+ }
197
+ }
198
+ if (src.startsWith('runtime:')) {
199
+ const key = src.slice('runtime:'.length);
200
+ const source = ctx.sources?.get(key);
201
+ if (source?.getContent) {
202
+ const content = await source.getContent();
203
+ return content || undefined;
204
+ }
205
+ }
206
+ return undefined;
207
+ }
208
+ // --- Retrieval ---
209
+ async function resolveRetrieval(sec, ctx) {
210
+ const routerSkipSections = ctx.router?.skipSections ?? ctx.profile.skipSections;
211
+ if (routerSkipSections.includes(sec.name)) {
212
+ return undefined;
213
+ }
214
+ const src = sec.source;
215
+ if (src === 'runtime:projectContext') {
216
+ const projectCtx = await loadProjectContext(ctx.cwd);
217
+ if (projectCtx) {
218
+ return `[Project Context from ${projectCtx.source}]\n${projectCtx.content}`;
219
+ }
220
+ return undefined;
221
+ }
222
+ if (src === 'runtime:pool' || src === 'runtime:git') {
223
+ if (!ctx.fullHistory || ctx.fullHistory.length === 0)
224
+ return undefined;
225
+ const retriever = new Retriever();
226
+ const result = await retriever.retrieve({
227
+ pool: ctx.fullHistory,
228
+ excludeLast: 1,
229
+ excludeHashes: ctx.zone3Hashes,
230
+ userInput: ctx.userInput,
231
+ maxTokens: Math.floor(ctx.maxContextTokens * 0.50),
232
+ tokenCounter: ctx.tokenCounter,
233
+ gitManager: ctx.gitManager,
234
+ cwd: ctx.cwd,
235
+ });
236
+ if (src === 'runtime:pool' && result.messages.length > 0) {
237
+ const lines = ['[Context Pool Results]'];
238
+ for (const msg of result.messages) {
239
+ const text = extractTextContent(msg);
240
+ if (text)
241
+ lines.push(`[${msg.role}] ${text}`);
242
+ }
243
+ return lines.join('\n');
244
+ }
245
+ if (src === 'runtime:git' && result.gitContext && result.gitContext.length > 0) {
246
+ const lines = ['[Git Context]'];
247
+ for (const entry of result.gitContext) {
248
+ const filesStr = entry.files.length > 0
249
+ ? ` (涉及: ${entry.files.slice(0, 5).join(', ')}${entry.files.length > 5 ? '...' : ''})`
250
+ : '';
251
+ lines.push(`${entry.hash} ${entry.message}${filesStr}`);
252
+ }
253
+ return lines.join('\n');
254
+ }
255
+ }
256
+ return undefined;
257
+ }
258
+ // --- Conditional ---
259
+ function resolveConditional(sec, ctx) {
260
+ if (sec.condition === 'precise_mode') {
261
+ if (!ctx.activeConditions?.has('precise_mode'))
262
+ return undefined;
263
+ return resolveStatic(sec, ctx);
264
+ }
265
+ return undefined;
266
+ }
267
+ // --- Helpers ---
268
+ const PERSONA_SOUL_FILES = ['SOUL', 'IDENTITY', 'USER'];
269
+ export function buildSoulSection() {
270
+ const parts = [];
271
+ for (const name of PERSONA_SOUL_FILES) {
272
+ try {
273
+ const content = loadPersonaPrompt(name);
274
+ if (content)
275
+ parts.push(content);
276
+ }
277
+ catch {
278
+ // skip
279
+ }
280
+ }
281
+ return parts.length > 0 ? parts.join('\n\n---\n\n') : '';
282
+ }
283
+ function loadPersonaPrompt(name) {
284
+ const fileName = `${name}.md`;
285
+ const projectPath = path.join(process.cwd(), '.agent', 'prompts', 'persona', fileName);
286
+ if (fs.existsSync(projectPath)) {
287
+ return fs.readFileSync(projectPath, 'utf-8');
288
+ }
289
+ const globalPath = path.join(getGlobalPersonaDir(), fileName);
290
+ if (fs.existsSync(globalPath)) {
291
+ return fs.readFileSync(globalPath, 'utf-8');
292
+ }
293
+ return loadPrompt(`persona/${name}`);
294
+ }
295
+ function extractTextContent(message) {
296
+ const contents = Array.isArray(message.content)
297
+ ? message.content
298
+ : [message.content];
299
+ // Collect text from all blocks — handles [image, text] and [text, image] messages
300
+ const textParts = contents
301
+ .filter((c) => c.type === 'text')
302
+ .map(c => c.text);
303
+ if (textParts.length > 0)
304
+ return textParts.join('\n');
305
+ // Single non-text block — return type marker
306
+ if (contents.length === 1) {
307
+ if (contents[0].type === 'image')
308
+ return `[Image: ${contents[0].source?.media_type ?? 'unknown'}]`;
309
+ if (contents[0].type === 'tool_use')
310
+ return `[ToolUse: ${contents[0].name}]`;
311
+ if (contents[0].type === 'tool_result')
312
+ return `[ToolResult: ${contents[0].tool_use_id}]`;
313
+ }
314
+ return null;
315
+ }
316
+ /** 从指定名称的 ContextSource 读取内容 */
317
+ function resolveContextSourceContent(sourceName, ctx) {
318
+ if (!ctx.sources)
319
+ return undefined;
320
+ const source = ctx.sources.get(sourceName);
321
+ if (!source?.getContent)
322
+ return undefined;
323
+ const content = source.getContent();
324
+ const text = typeof content === 'string' ? content : '';
325
+ return text || undefined;
326
+ }
327
+ /**
328
+ * 收集所有 cacheability === 'live' 的 MCP 源,生成会话临时 MCP 索引。
329
+ * 用于 Zone 5 session_mcp section — 热插拔 MCP 不进 Zone 2,避免破坏前缀缓存。
330
+ * 下次启动时这些 MCP 会自动归位到 Zone 2(cacheability 变为 'manifest')。
331
+ */
332
+ function buildLiveMcpIndex(ctx) {
333
+ if (!ctx.sources)
334
+ return undefined;
335
+ // 收集匹配的 live MCP 源,按 name 排序保证输出稳定
336
+ const matchedSources = [];
337
+ for (const [, source] of ctx.sources) {
338
+ if (source.cacheability !== 'live')
339
+ continue;
340
+ if (!source.name.startsWith('mcp-'))
341
+ continue;
342
+ matchedSources.push(source);
343
+ }
344
+ matchedSources.sort((a, b) => a.name.localeCompare(b.name));
345
+ if (matchedSources.length === 0)
346
+ return undefined;
347
+ const parts = matchedSources.map((source) => `- ${source.name}: ${source.description ?? '(no description)'}`);
348
+ return `会话临时 MCP — 本次对话可用\n${parts.join('\n')}`;
349
+ }
350
+ function buildSourcePartsFromCtx(kind, ctx) {
351
+ if (!ctx.sources)
352
+ return undefined;
353
+ const prefix = kind === 'mcp' ? 'mcp-' : `${kind}-`;
354
+ const parts = [];
355
+ // 收集匹配的 source,按 name 显式排序以保证输出稳定可预测。
356
+ // 这确保了即使 Map 插入顺序因热插拔 remove+re-add 而改变,Zone 2 文本字节布局也不变,最大化前缀缓存命中率。
357
+ const matchedSources = [];
358
+ for (const [, source] of ctx.sources) {
359
+ if (source.cacheability !== 'manifest')
360
+ continue;
361
+ if (kind !== 'mcp' && !source.name.startsWith(prefix))
362
+ continue;
363
+ if (kind === 'mcp' && !source.name.startsWith('mcp-'))
364
+ continue;
365
+ matchedSources.push(source);
366
+ }
367
+ matchedSources.sort((a, b) => a.name.localeCompare(b.name));
368
+ for (const source of matchedSources) {
369
+ switch (source.strategy) {
370
+ case 'always_inline':
371
+ parts.push(`- ${source.name}: ${source.description ?? '(no description)'}`);
372
+ break;
373
+ case 'index_only':
374
+ parts.push(`- ${source.name}: ${source.description ?? '(no description)'}`);
375
+ break;
376
+ case 'lazy_expand': {
377
+ const isSelected = kind === 'skill'
378
+ ? ctx.selectedSkills?.includes(source.name.replace('skill-', ''))
379
+ : kind === 'agent'
380
+ ? ctx.selectedAgents?.includes(source.name.replace('agent-', ''))
381
+ : false;
382
+ if (isSelected && source.getContent) {
383
+ const content = source.getContent();
384
+ const text = typeof content === 'string' ? content : '';
385
+ parts.push(`- ${source.name}: ${text}`);
386
+ }
387
+ else {
388
+ parts.push(`- ${source.name}: ${source.description ?? '(lazy: expand on use)'}`);
389
+ }
390
+ break;
391
+ }
392
+ case 'phase_bound':
393
+ break;
394
+ }
395
+ }
396
+ return parts.length > 0 ? parts.join('\n') : undefined;
397
+ }
398
+ //# sourceMappingURL=section-resolver.js.map
@@ -0,0 +1,23 @@
1
+ import type { Message } from '../types.js';
2
+ export declare class TokenCounter {
3
+ #private;
4
+ /**
5
+ * Count tokens for a plain text string.
6
+ */
7
+ countTokens(text: string): number;
8
+ /**
9
+ * Count tokens for a single Message object.
10
+ *
11
+ * Overhead model:
12
+ * - 4 tokens per message for role framing
13
+ * - TextContent: text tokens + 4
14
+ * - ToolUseContent: JSON.stringify(input) tokens + name tokens + 4
15
+ * - ToolResultContent: content tokens + 4
16
+ */
17
+ countMessageTokens(message: Message): number;
18
+ /**
19
+ * Count tokens for an array of messages.
20
+ */
21
+ countMessagesTokens(messages: Message[]): number;
22
+ }
23
+ //# sourceMappingURL=tokenizer.d.ts.map
@@ -0,0 +1,78 @@
1
+ import { encodingForModel } from 'js-tiktoken';
2
+ // --- Lazy singleton encoding ---
3
+ let _encoding = null;
4
+ function getEncoding() {
5
+ if (!_encoding) {
6
+ _encoding = encodingForModel('gpt-4');
7
+ }
8
+ return _encoding;
9
+ }
10
+ // --- TokenCounter ---
11
+ export class TokenCounter {
12
+ /**
13
+ * Count tokens for a plain text string.
14
+ */
15
+ countTokens(text) {
16
+ return getEncoding().encode(text).length;
17
+ }
18
+ /**
19
+ * Count tokens for a single Message object.
20
+ *
21
+ * Overhead model:
22
+ * - 4 tokens per message for role framing
23
+ * - TextContent: text tokens + 4
24
+ * - ToolUseContent: JSON.stringify(input) tokens + name tokens + 4
25
+ * - ToolResultContent: content tokens + 4
26
+ */
27
+ countMessageTokens(message) {
28
+ let tokens = 4; // role overhead per message
29
+ const contents = Array.isArray(message.content)
30
+ ? message.content
31
+ : [message.content];
32
+ for (const part of contents) {
33
+ tokens += this.#countContentTokens(part);
34
+ }
35
+ return tokens;
36
+ }
37
+ /**
38
+ * Count tokens for an array of messages.
39
+ */
40
+ countMessagesTokens(messages) {
41
+ return messages.reduce((sum, msg) => sum + this.countMessageTokens(msg), 0);
42
+ }
43
+ #countContentTokens(content) {
44
+ switch (content.type) {
45
+ case 'text': {
46
+ const tc = content;
47
+ return this.countTokens(tc.text) + 4;
48
+ }
49
+ case 'tool_use': {
50
+ const tuc = content;
51
+ const inputTokens = this.countTokens(JSON.stringify(tuc.input));
52
+ const nameTokens = this.countTokens(tuc.name);
53
+ return inputTokens + nameTokens + 4;
54
+ }
55
+ case 'thinking': {
56
+ const tc = content;
57
+ return this.countTokens(tc.thinking) + 4;
58
+ }
59
+ case 'tool_result': {
60
+ const trc = content;
61
+ return this.countTokens(trc.content) + 4;
62
+ }
63
+ case 'image': {
64
+ const img = content;
65
+ if (img.source.type === 'url')
66
+ return 1000; // 远程 URL,保守估算
67
+ // base64: decoded ≈ data.length * 0.75 bytes, ~1 token per 4 bytes
68
+ return Math.max(1, Math.ceil(img.source.data.length * 0.75 / 4)) + 4;
69
+ }
70
+ default: {
71
+ // Unknown content type — best-effort: stringify and count
72
+ const _exhaustive = content;
73
+ return this.countTokens(JSON.stringify(_exhaustive)) + 4;
74
+ }
75
+ }
76
+ }
77
+ }
78
+ //# sourceMappingURL=tokenizer.js.map
@@ -0,0 +1,33 @@
1
+ import type { DependencyGraph, ImpactResult } from './types.js';
2
+ import type { GitManager } from '../evolution/git-manager.js';
3
+ export declare class DependencyAnalyzer {
4
+ private parser;
5
+ private graph;
6
+ private fileHashes;
7
+ private rootDir;
8
+ private projectKey;
9
+ private cachePath;
10
+ /** 分析项目,构建依赖图(优先加载缓存) */
11
+ analyze(rootDir: string): Promise<DependencyGraph>;
12
+ /** 全量构建依赖图 */
13
+ private fullBuild;
14
+ /** 增量更新:重新解析变更文件,更新依赖图 */
15
+ incrementalUpdate(changedFiles?: string[], gitManager?: GitManager): Promise<void>;
16
+ /** 构建正向和反向索引 */
17
+ private buildIndexes;
18
+ /** 查询影响面:修改 file 后,哪些文件会受影响 */
19
+ getImpact(file: string, symbol?: string): ImpactResult;
20
+ /** 获取依赖图(只读) */
21
+ getGraph(): Readonly<DependencyGraph> | null;
22
+ /** 获取 projectKey */
23
+ getProjectKey(): string;
24
+ /** 序列化 DependencyGraph 为可存储的 JSON 格式 */
25
+ private serialize;
26
+ /** 反序列化 JSON 为 DependencyGraph */
27
+ private deserialize;
28
+ /** 从磁盘加载缓存 */
29
+ private loadCache;
30
+ /** 保存缓存到磁盘 */
31
+ private saveCache;
32
+ }
33
+ //# sourceMappingURL=analyzer.d.ts.map