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,276 @@
1
+ import { execFile } from 'node:child_process';
2
+ import { promisify } from 'node:util';
3
+ const execFileAsync = promisify(execFile);
4
+ export class GitManager {
5
+ repoPath;
6
+ constructor(repoPath) {
7
+ this.repoPath = repoPath;
8
+ }
9
+ /** Run a raw git command in repoPath. Public for use by TurnRecorder etc. */
10
+ async git(args) {
11
+ try {
12
+ return await execFileAsync('git', args, { cwd: this.repoPath, maxBuffer: 10 * 1024 * 1024 });
13
+ }
14
+ catch (err) {
15
+ const raw = (err.stderr || err.message || '').trim();
16
+ if (!raw) {
17
+ throw new Error(`git ${args.join(' ')} failed (no output)`);
18
+ }
19
+ const lines = raw.split('\n');
20
+ // 分离 error / warning / 其他行
21
+ const errors = [];
22
+ const warningPatterns = new Map();
23
+ const others = [];
24
+ for (const line of lines) {
25
+ const trimmed = line.trim();
26
+ if (/^(error:|fatal:)/i.test(trimmed)) {
27
+ errors.push(trimmed);
28
+ }
29
+ else if (/^warning:/i.test(trimmed)) {
30
+ // 归一化警告模式:去掉单引号内的具体路径(可能是文件路径、目录路径等)
31
+ const normalized = trimmed.replace(/'[^']*'/g, "'<...>'");
32
+ warningPatterns.set(normalized, (warningPatterns.get(normalized) || 0) + 1);
33
+ }
34
+ else {
35
+ others.push(trimmed);
36
+ }
37
+ }
38
+ // 构建精简报告
39
+ const parts = [];
40
+ // 错误行优先保留(不合并)
41
+ if (errors.length > 0) {
42
+ parts.push(`=== ${errors.length} error(s) ===`);
43
+ parts.push(...errors);
44
+ }
45
+ // 警告去重聚合
46
+ if (warningPatterns.size > 0) {
47
+ const totalWarnings = [...warningPatterns.values()].reduce((a, b) => a + b, 0);
48
+ const summaryParts = [];
49
+ for (const [pattern, count] of warningPatterns) {
50
+ if (count === 1) {
51
+ summaryParts.push(pattern);
52
+ }
53
+ else {
54
+ summaryParts.push(`${pattern} (×${count})`);
55
+ }
56
+ }
57
+ parts.push(`=== ${totalWarnings} warning(s), ${warningPatterns.size} unique pattern(s) ===`);
58
+ parts.push(...summaryParts);
59
+ }
60
+ // 其他行(无 error 时补上,有 error 时只保留前几条)
61
+ if (others.length > 0) {
62
+ const maxOthers = errors.length > 0 ? 5 : 20;
63
+ const sliced = others.slice(0, maxOthers);
64
+ parts.push(...sliced);
65
+ if (others.length > maxOthers) {
66
+ parts.push(`... (${others.length - maxOthers} more lines omitted)`);
67
+ }
68
+ }
69
+ const summary = parts.join('\n');
70
+ // 最终保底截断(防止极端情况)
71
+ const finalMsg = summary.length > 20_000 ? summary.slice(0, 20_000) + '\n... (truncated)' : summary;
72
+ throw new Error(`git ${args.join(' ')} failed:\n${finalMsg}`);
73
+ }
74
+ }
75
+ // Check if path is a git repo
76
+ async isRepo() {
77
+ try {
78
+ await this.git(['rev-parse', '--git-dir']);
79
+ return true;
80
+ }
81
+ catch {
82
+ return false;
83
+ }
84
+ }
85
+ // Initialize repo: git init, add all, first commit
86
+ async init() {
87
+ if (await this.isRepo())
88
+ return;
89
+ await this.git(['init']);
90
+ await this.git(['add', '-A']);
91
+ await this.git(['commit', '-m', 'Initial agent snapshot']);
92
+ }
93
+ // Stage all and commit, returns commit hash
94
+ async commit(message) {
95
+ await this.git(['add', '-A']);
96
+ const { stdout } = await this.git(['commit', '-m', message]);
97
+ const match = stdout.match(/\[[\w-]+\s+([a-f0-9]+)\]/);
98
+ return match ? match[1] : '';
99
+ }
100
+ // Create and switch to new branch
101
+ async createBranch(name) {
102
+ await this.git(['checkout', '-b', name]);
103
+ }
104
+ // Checkout a ref (branch, commit, tag)
105
+ async checkout(ref) {
106
+ await this.git(['checkout', ref]);
107
+ }
108
+ // Merge a branch into current
109
+ async merge(branch) {
110
+ await this.git(['merge', branch, '--no-edit']);
111
+ }
112
+ // Abort a merge in progress
113
+ async abortMerge() {
114
+ await this.git(['merge', '--abort']);
115
+ }
116
+ // Get diff (optionally against a ref, default unstaged)
117
+ async diff(ref) {
118
+ const args = ['diff'];
119
+ if (ref)
120
+ args.push(ref);
121
+ const { stdout } = await this.git(args);
122
+ return stdout;
123
+ }
124
+ // Get commit log
125
+ async log(limit = 10) {
126
+ const { stdout } = await this.git(['log', `-${limit}`, '--oneline', '--format=%H|%s|%ai']);
127
+ return stdout.trim().split('\n').filter(Boolean).map(line => {
128
+ const [hash, message, ...dateParts] = line.split('|');
129
+ return { hash, message, date: dateParts.join('|') };
130
+ });
131
+ }
132
+ // Hard reset to a ref (rollback)
133
+ async resetHard(ref) {
134
+ await this.git(['reset', '--hard', ref]);
135
+ }
136
+ // Get current branch name
137
+ async getCurrentBranch() {
138
+ const { stdout } = await this.git(['rev-parse', '--abbrev-ref', 'HEAD']);
139
+ return stdout.trim();
140
+ }
141
+ // Check for uncommitted changes
142
+ async hasUncommittedChanges() {
143
+ const { stdout } = await this.git(['status', '--porcelain']);
144
+ return stdout.trim().length > 0;
145
+ }
146
+ // Delete a branch
147
+ async deleteBranch(name) {
148
+ await this.git(['branch', '-D', name]);
149
+ }
150
+ // Get the repository path
151
+ getRepoPath() {
152
+ return this.repoPath;
153
+ }
154
+ // Search commit log with grep pattern
155
+ async logGrep(pattern, limit = 20) {
156
+ const { stdout } = await this.git([
157
+ 'log', `-${limit}`, '--oneline', '--all',
158
+ '--format=%H|%s|%ai|%D',
159
+ `--grep=${pattern}`,
160
+ '-i',
161
+ ]);
162
+ if (!stdout.trim())
163
+ return [];
164
+ return stdout.trim().split('\n').filter(Boolean).map(line => {
165
+ const [hash, message, ...rest] = line.split('|');
166
+ const fullRest = rest.join('|');
167
+ const match = fullRest.match(/^(\d{4}-\d{2}-\d{2}.+?)\|?(.*)$/);
168
+ if (match) {
169
+ const branchRef = match[2].trim();
170
+ const branch = branchRef ? branchRef.split(',').map(s => s.trim().replace(/^(HEAD -> |tag: )/, '')).find(s => s.length > 0) : undefined;
171
+ return { hash, message, date: match[1], branch };
172
+ }
173
+ return { hash, message, date: fullRest };
174
+ });
175
+ }
176
+ // Get changed file names via diff
177
+ async diffNames(ref) {
178
+ const args = ['diff', '--name-only'];
179
+ if (ref)
180
+ args.push(ref);
181
+ else
182
+ args.push('HEAD~1');
183
+ try {
184
+ const { stdout } = await this.git(args);
185
+ return stdout.trim().split('\n').filter(Boolean);
186
+ }
187
+ catch {
188
+ return [];
189
+ }
190
+ }
191
+ // Get diff stat
192
+ async diffStat(ref) {
193
+ const args = ['diff', '--stat'];
194
+ if (ref)
195
+ args.push(ref);
196
+ else
197
+ args.push('HEAD~1');
198
+ try {
199
+ const { stdout } = await this.git(args);
200
+ return stdout.trim();
201
+ }
202
+ catch {
203
+ return '';
204
+ }
205
+ }
206
+ // Get commit log for a specific file
207
+ async logFile(file, limit = 10) {
208
+ const { stdout } = await this.git([
209
+ 'log', `-${limit}`, '--oneline',
210
+ '--format=%H|%s|%ai',
211
+ '--', file,
212
+ ]);
213
+ if (!stdout.trim())
214
+ return [];
215
+ return stdout.trim().split('\n').filter(Boolean).map(line => {
216
+ const [hash, message, ...dateParts] = line.split('|');
217
+ return { hash, message, date: dateParts.join('|') };
218
+ });
219
+ }
220
+ // Revert a commit
221
+ async revertCommit(hash) {
222
+ const { stdout } = await this.git(['revert', '--no-edit', hash]);
223
+ return stdout.trim();
224
+ }
225
+ // Stash current changes
226
+ async stash() {
227
+ await this.git(['stash', 'push', '-m', 'agent-auto-stash']);
228
+ }
229
+ // Pop the most recent stash
230
+ async stashPop() {
231
+ await this.git(['stash', 'pop']);
232
+ }
233
+ // Run a safe git operation (no throw on expected errors)
234
+ async gitSafe(args) {
235
+ try {
236
+ return await execFileAsync('git', args, { cwd: this.repoPath, maxBuffer: 10 * 1024 * 1024 });
237
+ }
238
+ catch {
239
+ return null;
240
+ }
241
+ }
242
+ // Search commits with multiple keywords (OR logic), returns expanded context entries
243
+ async searchContext(keywords, currentBranch, limit = 15) {
244
+ if (keywords.length === 0)
245
+ return [];
246
+ const pattern = keywords.map(k => k.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')).join('\\|');
247
+ const commits = await this.logGrep(pattern, limit);
248
+ if (commits.length === 0)
249
+ return [];
250
+ const entries = [];
251
+ for (const c of commits) {
252
+ let files = [];
253
+ try {
254
+ files = await this.diffNames(c.hash);
255
+ }
256
+ catch {
257
+ // skip file lookup on error
258
+ }
259
+ entries.push({
260
+ hash: c.hash.slice(0, 8),
261
+ message: c.message,
262
+ date: c.date,
263
+ branch: c.branch ?? 'unknown',
264
+ files,
265
+ });
266
+ }
267
+ // Cross-branch weighting: current branch results first
268
+ entries.sort((a, b) => {
269
+ const aCur = a.branch === currentBranch ? 0 : 1;
270
+ const bCur = b.branch === currentBranch ? 0 : 1;
271
+ return aCur - bCur;
272
+ });
273
+ return entries;
274
+ }
275
+ }
276
+ //# sourceMappingURL=git-manager.js.map
@@ -0,0 +1,3 @@
1
+ export { GitManager } from './git-manager.js';
2
+ export type { CommitInfo } from './git-manager.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,2 @@
1
+ export { GitManager } from './git-manager.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,19 @@
1
+ import type { FlowController, FlowStep, FlowStatus } from './types.js';
2
+ export declare class BootstrapFlow implements FlowController {
3
+ readonly id = "bootstrap";
4
+ status: FlowStatus;
5
+ currentStepIndex: number;
6
+ private steps;
7
+ private personaDir;
8
+ constructor(personaDir: string);
9
+ activate(): void;
10
+ deactivate(): void;
11
+ getSteps(): FlowStep[];
12
+ getCurrentStep(): FlowStep | null;
13
+ advance(): boolean;
14
+ isComplete(): boolean;
15
+ getInjection(): string | null;
16
+ /** 所有步骤完成后调用:标记 bootstrap 完成,永久不再触发 */
17
+ onComplete(): Promise<void>;
18
+ }
19
+ //# sourceMappingURL=bootstrap-flow.d.ts.map
@@ -0,0 +1,72 @@
1
+ // ============================================================
2
+ // BootstrapFlow — 身份引导 Flow
3
+ // ============================================================
4
+ //
5
+ // 首次安装后自动运行一次。通过 4 个步骤引导模型与用户交流,
6
+ // 逐步填写 SOUL.md、IDENTITY.md、USER.md,完成后永久标记。
7
+ //
8
+ // 步骤提示词从 src/prompts/flows/bootstrap-*.md 加载。
9
+ // ============================================================
10
+ import { loadPrompt } from '../prompts/loader.js';
11
+ import { markBootstrapComplete } from '../setup/persona-bootstrap.js';
12
+ const STEP_FILES = [
13
+ 'bootstrap-soul',
14
+ 'bootstrap-identity',
15
+ 'bootstrap-user',
16
+ 'bootstrap-confirm',
17
+ ];
18
+ export class BootstrapFlow {
19
+ id = 'bootstrap';
20
+ status = 'idle';
21
+ currentStepIndex = 0;
22
+ steps = [];
23
+ personaDir;
24
+ constructor(personaDir) {
25
+ this.personaDir = personaDir;
26
+ }
27
+ activate() {
28
+ this.currentStepIndex = 0;
29
+ this.status = 'active';
30
+ // 延迟加载步骤提示词(activate 时才加载,避免模块导入时的副作用)
31
+ this.steps = STEP_FILES.map((file) => ({
32
+ id: file,
33
+ prompt: loadPrompt(`flows/${file}`).replace(/\{\{personaDir\}\}/g, this.personaDir),
34
+ }));
35
+ }
36
+ deactivate() {
37
+ this.status = 'idle';
38
+ this.steps = [];
39
+ }
40
+ getSteps() {
41
+ return this.steps;
42
+ }
43
+ getCurrentStep() {
44
+ if (this.status !== 'active')
45
+ return null;
46
+ return this.steps[this.currentStepIndex] ?? null;
47
+ }
48
+ advance() {
49
+ this.currentStepIndex++;
50
+ if (this.currentStepIndex >= this.steps.length) {
51
+ return false; // 所有步骤完成
52
+ }
53
+ return true;
54
+ }
55
+ isComplete() {
56
+ return this.currentStepIndex >= this.steps.length;
57
+ }
58
+ getInjection() {
59
+ const step = this.getCurrentStep();
60
+ if (!step)
61
+ return null;
62
+ const total = this.steps.length;
63
+ const current = this.currentStepIndex + 1;
64
+ const header = `\n[Bootstrap ${current}/${total}]\n`;
65
+ return header + step.prompt;
66
+ }
67
+ /** 所有步骤完成后调用:标记 bootstrap 完成,永久不再触发 */
68
+ async onComplete() {
69
+ await markBootstrapComplete(this.personaDir);
70
+ }
71
+ }
72
+ //# sourceMappingURL=bootstrap-flow.js.map
@@ -0,0 +1,12 @@
1
+ import type { FlowController, IFlowRegistry } from './types.js';
2
+ export declare class FlowRegistry implements IFlowRegistry {
3
+ private flows;
4
+ private activeFlowId;
5
+ register(flow: FlowController): void;
6
+ get(id: string): FlowController | undefined;
7
+ getActive(): FlowController | undefined;
8
+ activate(id: string, context?: Record<string, unknown>): void;
9
+ deactivate(): void;
10
+ onStepComplete(): Promise<void>;
11
+ }
12
+ //# sourceMappingURL=flow-registry.d.ts.map
@@ -0,0 +1,74 @@
1
+ // ============================================================
2
+ // FlowRegistry — Flow 注册表
3
+ // ============================================================
4
+ //
5
+ // 管理所有 FlowController 的生命周期。
6
+ // 同一时间只有一个 Flow 处于活跃状态——激活新 Flow 前
7
+ // 自动停用当前活跃的 Flow。
8
+ // ============================================================
9
+ import { createLogger } from '../logging/logger.js';
10
+ const logger = createLogger('flow-registry');
11
+ export class FlowRegistry {
12
+ flows = new Map();
13
+ activeFlowId = null;
14
+ register(flow) {
15
+ if (this.flows.has(flow.id)) {
16
+ logger.warn('Flow already registered, replacing', { id: flow.id });
17
+ }
18
+ this.flows.set(flow.id, flow);
19
+ }
20
+ get(id) {
21
+ return this.flows.get(id);
22
+ }
23
+ getActive() {
24
+ if (!this.activeFlowId)
25
+ return undefined;
26
+ const flow = this.flows.get(this.activeFlowId);
27
+ if (flow?.status === 'active')
28
+ return flow;
29
+ return undefined;
30
+ }
31
+ activate(id, context) {
32
+ const flow = this.flows.get(id);
33
+ if (!flow) {
34
+ logger.error('Cannot activate unknown flow', undefined, { id });
35
+ return;
36
+ }
37
+ // 停用当前活跃 Flow
38
+ if (this.activeFlowId && this.activeFlowId !== id) {
39
+ this.deactivate();
40
+ }
41
+ this.activeFlowId = id;
42
+ // MutableFlowController 接受 context 参数;固定步骤 Flow 忽略
43
+ flow.activate(context);
44
+ logger.info('Flow activated', { id });
45
+ }
46
+ deactivate() {
47
+ if (this.activeFlowId) {
48
+ const flow = this.flows.get(this.activeFlowId);
49
+ if (flow && flow.status === 'active') {
50
+ flow.deactivate();
51
+ }
52
+ logger.info('Flow deactivated', { id: this.activeFlowId });
53
+ this.activeFlowId = null;
54
+ }
55
+ }
56
+ async onStepComplete() {
57
+ const active = this.getActive();
58
+ if (!active)
59
+ return;
60
+ const hasNext = active.advance();
61
+ if (!hasNext) {
62
+ // 所有步骤完成
63
+ logger.info('Flow completed', { id: active.id });
64
+ if (active.onComplete) {
65
+ await active.onComplete();
66
+ }
67
+ active.status = 'completed';
68
+ // deactivate() 会调用 deactivate(),但我们已经手动设置了 status
69
+ // 直接清理 activeFlowId
70
+ this.activeFlowId = null;
71
+ }
72
+ }
73
+ }
74
+ //# sourceMappingURL=flow-registry.js.map
@@ -0,0 +1,8 @@
1
+ import type { Tool } from '../tools/interface.js';
2
+ import type { FlowRegistry } from './flow-registry.js';
3
+ /** 判断给定工具名是否为 Flow 框架工具 */
4
+ export declare function isFlowTool(name: string): boolean;
5
+ export declare function createCompleteFlowStepTool(registry: FlowRegistry): Tool;
6
+ export declare function createActivateTodoTool(registry: FlowRegistry): Tool;
7
+ export declare function createAddTodoStepTool(registry: FlowRegistry): Tool;
8
+ //# sourceMappingURL=flow-tools.d.ts.map
@@ -0,0 +1,106 @@
1
+ // ============================================================
2
+ // Flow Tools — 流程控制工具
3
+ // ============================================================
4
+ //
5
+ // complete_flow_step — 完成当前步骤,推进到下一步(所有 Flow 通用)
6
+ // activate_todo — 激活 TODO 模式,开始任务拆分
7
+ // add_todo_step — 向 TODO Flow 添加执行步骤(仅 planning 阶段)
8
+ // ============================================================
9
+ /** Flow 框架工具名称集合 — 这些工具不记入对话历史 */
10
+ const FLOW_TOOL_NAMES = new Set([
11
+ 'complete_flow_step',
12
+ 'activate_todo',
13
+ 'add_todo_step',
14
+ ]);
15
+ /** 判断给定工具名是否为 Flow 框架工具 */
16
+ export function isFlowTool(name) {
17
+ return FLOW_TOOL_NAMES.has(name);
18
+ }
19
+ export function createCompleteFlowStepTool(registry) {
20
+ return {
21
+ name: 'complete_flow_step',
22
+ description: 'Complete the current flow step and advance to the next one. Call this when you have finished the current step\'s task. In TODO planning phase, this finishes planning and starts execution. In execution phase or bootstrap, this advances to the next step. If this is the final step, the flow ends.',
23
+ inputSchema: {
24
+ type: 'object',
25
+ properties: {},
26
+ required: [],
27
+ },
28
+ async execute(_args) {
29
+ const active = registry.getActive();
30
+ if (!active) {
31
+ return 'No active flow. Nothing to complete.';
32
+ }
33
+ // NOTE: 此处不调用 advance()。advance 统一由 loop.ts → onStepComplete()
34
+ // 在工具执行后调用(见 flow-registry.ts)。两边都调会导致每步跳两步。
35
+ const mutableFlow = active;
36
+ const isTodoPlanning = active.id === 'todo' && mutableFlow.phase === 'planning';
37
+ const currentStep = active.getCurrentStep();
38
+ const stepLabel = currentStep
39
+ ? `"${currentStep.id}" (step ${active.currentStepIndex + 1}/${active.getSteps().length})`
40
+ : isTodoPlanning
41
+ ? `planning phase`
42
+ : `step ${active.currentStepIndex + 1}`;
43
+ if (isTodoPlanning) {
44
+ const stepCount = active.getSteps().length;
45
+ return `Planning acknowledged. ${stepCount > 0 ? `${stepCount} steps defined, transitioning to execution.` : 'No steps defined — flow will end.'}`;
46
+ }
47
+ return `Step ${stepLabel} acknowledged. Advancing...`;
48
+ },
49
+ };
50
+ }
51
+ export function createActivateTodoTool(registry) {
52
+ return {
53
+ name: 'activate_todo',
54
+ description: 'Activate TODO mode to break down a complex task into ordered steps. After activation, use add_todo_step to add each step, then call complete_flow_step to start execution. The framework will guide you through one step at a time.',
55
+ inputSchema: {
56
+ type: 'object',
57
+ properties: {
58
+ task: {
59
+ type: 'string',
60
+ description: 'A concise description of the overall task to be completed.',
61
+ },
62
+ },
63
+ required: ['task'],
64
+ },
65
+ async execute(args) {
66
+ const task = args.task ?? '';
67
+ const todoFlow = registry.get('todo');
68
+ if (!todoFlow) {
69
+ return 'TODO flow is not registered. Cannot activate.';
70
+ }
71
+ // 激活 TODO Flow(带任务上下文),自动停用当前活跃 Flow
72
+ registry.activate('todo', { task });
73
+ return `TODO mode activated for task: "${task}". Break down the task into steps using add_todo_step, then call complete_flow_step to start execution.`;
74
+ },
75
+ };
76
+ }
77
+ export function createAddTodoStepTool(registry) {
78
+ return {
79
+ name: 'add_todo_step',
80
+ description: 'Add a step to the current TODO flow. Only works when TODO mode is active and in the planning phase. Each step should be a concrete, verifiable action.',
81
+ inputSchema: {
82
+ type: 'object',
83
+ properties: {
84
+ description: {
85
+ type: 'string',
86
+ description: 'A clear, actionable description of this step. Include what constitutes success.',
87
+ },
88
+ },
89
+ required: ['description'],
90
+ },
91
+ async execute(args) {
92
+ const active = registry.getActive();
93
+ if (!active || active.id !== 'todo') {
94
+ return 'TODO mode is not active. Use activate_todo first.';
95
+ }
96
+ const mutableFlow = active;
97
+ if (mutableFlow.phase !== 'planning') {
98
+ return 'Cannot add steps — TODO is already in execution phase.';
99
+ }
100
+ const description = args.description ?? '';
101
+ const step = mutableFlow.addStep(description);
102
+ return `Step #${mutableFlow.getSteps().length} added: "${step.prompt}". Total: ${mutableFlow.getSteps().length} steps. Add more steps or call complete_flow_step to start execution.`;
103
+ },
104
+ };
105
+ }
106
+ //# sourceMappingURL=flow-tools.js.map
@@ -0,0 +1,6 @@
1
+ export type { FlowStep, FlowStatus, FlowPhase, FlowController, MutableFlowController, IFlowRegistry, } from './types.js';
2
+ export { FlowRegistry } from './flow-registry.js';
3
+ export { BootstrapFlow } from './bootstrap-flow.js';
4
+ export { TodoFlow } from './todo-flow.js';
5
+ export { createCompleteFlowStepTool, createActivateTodoTool, createAddTodoStepTool, } from './flow-tools.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,8 @@
1
+ // ============================================================
2
+ // Flow Control — 桶导出
3
+ // ============================================================
4
+ export { FlowRegistry } from './flow-registry.js';
5
+ export { BootstrapFlow } from './bootstrap-flow.js';
6
+ export { TodoFlow } from './todo-flow.js';
7
+ export { createCompleteFlowStepTool, createActivateTodoTool, createAddTodoStepTool, } from './flow-tools.js';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,25 @@
1
+ import type { FlowStep, FlowStatus, FlowPhase, MutableFlowController } from './types.js';
2
+ export declare class TodoFlow implements MutableFlowController {
3
+ readonly id = "todo";
4
+ status: FlowStatus;
5
+ currentStepIndex: number;
6
+ phase: FlowPhase;
7
+ private steps;
8
+ private task;
9
+ private stepCounter;
10
+ private planningPrompt;
11
+ private executionPromptTemplate;
12
+ constructor();
13
+ activate(context?: Record<string, unknown>): void;
14
+ deactivate(): void;
15
+ getSteps(): FlowStep[];
16
+ getCurrentStep(): FlowStep | null;
17
+ addStep(description: string): FlowStep;
18
+ clearSteps(): void;
19
+ advance(): boolean;
20
+ isComplete(): boolean;
21
+ getInjection(): string | null;
22
+ private buildPlanningInjection;
23
+ private buildExecutionInjection;
24
+ }
25
+ //# sourceMappingURL=todo-flow.d.ts.map