@winspan/claude-forge 0.1.1

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 (487) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +505 -0
  3. package/dist/autopilot/index.d.ts +4 -0
  4. package/dist/autopilot/index.d.ts.map +1 -0
  5. package/dist/autopilot/index.js +4 -0
  6. package/dist/autopilot/index.js.map +1 -0
  7. package/dist/autopilot/intent-engine.d.ts +60 -0
  8. package/dist/autopilot/intent-engine.d.ts.map +1 -0
  9. package/dist/autopilot/intent-engine.js +308 -0
  10. package/dist/autopilot/intent-engine.js.map +1 -0
  11. package/dist/autopilot/knowledge-engine.d.ts +67 -0
  12. package/dist/autopilot/knowledge-engine.d.ts.map +1 -0
  13. package/dist/autopilot/knowledge-engine.js +262 -0
  14. package/dist/autopilot/knowledge-engine.js.map +1 -0
  15. package/dist/autopilot/quality-gate.d.ts +69 -0
  16. package/dist/autopilot/quality-gate.d.ts.map +1 -0
  17. package/dist/autopilot/quality-gate.js +244 -0
  18. package/dist/autopilot/quality-gate.js.map +1 -0
  19. package/dist/autopilot/team-orchestrator.d.ts +16 -0
  20. package/dist/autopilot/team-orchestrator.d.ts.map +1 -0
  21. package/dist/autopilot/team-orchestrator.js +56 -0
  22. package/dist/autopilot/team-orchestrator.js.map +1 -0
  23. package/dist/backup/index.d.ts +16 -0
  24. package/dist/backup/index.d.ts.map +1 -0
  25. package/dist/backup/index.js +169 -0
  26. package/dist/backup/index.js.map +1 -0
  27. package/dist/claudemd/detector.d.ts +54 -0
  28. package/dist/claudemd/detector.d.ts.map +1 -0
  29. package/dist/claudemd/detector.js +510 -0
  30. package/dist/claudemd/detector.js.map +1 -0
  31. package/dist/claudemd/index.d.ts +44 -0
  32. package/dist/claudemd/index.d.ts.map +1 -0
  33. package/dist/claudemd/index.js +193 -0
  34. package/dist/claudemd/index.js.map +1 -0
  35. package/dist/claudemd/modules-config.d.ts +37 -0
  36. package/dist/claudemd/modules-config.d.ts.map +1 -0
  37. package/dist/claudemd/modules-config.js +80 -0
  38. package/dist/claudemd/modules-config.js.map +1 -0
  39. package/dist/claudemd/prompt-injector.d.ts +29 -0
  40. package/dist/claudemd/prompt-injector.d.ts.map +1 -0
  41. package/dist/claudemd/prompt-injector.js +144 -0
  42. package/dist/claudemd/prompt-injector.js.map +1 -0
  43. package/dist/claudemd/prompts.d.ts +16 -0
  44. package/dist/claudemd/prompts.d.ts.map +1 -0
  45. package/dist/claudemd/prompts.js +439 -0
  46. package/dist/claudemd/prompts.js.map +1 -0
  47. package/dist/claudemd/writer.d.ts +27 -0
  48. package/dist/claudemd/writer.d.ts.map +1 -0
  49. package/dist/claudemd/writer.js +91 -0
  50. package/dist/claudemd/writer.js.map +1 -0
  51. package/dist/cli/commands/backup.d.ts +3 -0
  52. package/dist/cli/commands/backup.d.ts.map +1 -0
  53. package/dist/cli/commands/backup.js +63 -0
  54. package/dist/cli/commands/backup.js.map +1 -0
  55. package/dist/cli/commands/claudemd.d.ts +3 -0
  56. package/dist/cli/commands/claudemd.d.ts.map +1 -0
  57. package/dist/cli/commands/claudemd.js +322 -0
  58. package/dist/cli/commands/claudemd.js.map +1 -0
  59. package/dist/cli/commands/config.d.ts +3 -0
  60. package/dist/cli/commands/config.d.ts.map +1 -0
  61. package/dist/cli/commands/config.js +67 -0
  62. package/dist/cli/commands/config.js.map +1 -0
  63. package/dist/cli/commands/console.d.ts +3 -0
  64. package/dist/cli/commands/console.d.ts.map +1 -0
  65. package/dist/cli/commands/console.js +11 -0
  66. package/dist/cli/commands/console.js.map +1 -0
  67. package/dist/cli/commands/convention.d.ts +3 -0
  68. package/dist/cli/commands/convention.d.ts.map +1 -0
  69. package/dist/cli/commands/convention.js +269 -0
  70. package/dist/cli/commands/convention.js.map +1 -0
  71. package/dist/cli/commands/daemon.d.ts +3 -0
  72. package/dist/cli/commands/daemon.d.ts.map +1 -0
  73. package/dist/cli/commands/daemon.js +191 -0
  74. package/dist/cli/commands/daemon.js.map +1 -0
  75. package/dist/cli/commands/distill.d.ts +3 -0
  76. package/dist/cli/commands/distill.d.ts.map +1 -0
  77. package/dist/cli/commands/distill.js +61 -0
  78. package/dist/cli/commands/distill.js.map +1 -0
  79. package/dist/cli/commands/init.d.ts +3 -0
  80. package/dist/cli/commands/init.d.ts.map +1 -0
  81. package/dist/cli/commands/init.js +306 -0
  82. package/dist/cli/commands/init.js.map +1 -0
  83. package/dist/cli/commands/logs.d.ts +3 -0
  84. package/dist/cli/commands/logs.d.ts.map +1 -0
  85. package/dist/cli/commands/logs.js +311 -0
  86. package/dist/cli/commands/logs.js.map +1 -0
  87. package/dist/cli/commands/pattern.d.ts +3 -0
  88. package/dist/cli/commands/pattern.d.ts.map +1 -0
  89. package/dist/cli/commands/pattern.js +118 -0
  90. package/dist/cli/commands/pattern.js.map +1 -0
  91. package/dist/cli/commands/pipeline.d.ts +3 -0
  92. package/dist/cli/commands/pipeline.d.ts.map +1 -0
  93. package/dist/cli/commands/pipeline.js +75 -0
  94. package/dist/cli/commands/pipeline.js.map +1 -0
  95. package/dist/cli/commands/profile.d.ts +3 -0
  96. package/dist/cli/commands/profile.d.ts.map +1 -0
  97. package/dist/cli/commands/profile.js +213 -0
  98. package/dist/cli/commands/profile.js.map +1 -0
  99. package/dist/cli/commands/query.d.ts +3 -0
  100. package/dist/cli/commands/query.d.ts.map +1 -0
  101. package/dist/cli/commands/query.js +115 -0
  102. package/dist/cli/commands/query.js.map +1 -0
  103. package/dist/cli/commands/skill.d.ts +3 -0
  104. package/dist/cli/commands/skill.d.ts.map +1 -0
  105. package/dist/cli/commands/skill.js +466 -0
  106. package/dist/cli/commands/skill.js.map +1 -0
  107. package/dist/cli/index.d.ts +3 -0
  108. package/dist/cli/index.d.ts.map +1 -0
  109. package/dist/cli/index.js +49 -0
  110. package/dist/cli/index.js.map +1 -0
  111. package/dist/cli/interceptor.d.ts +5 -0
  112. package/dist/cli/interceptor.d.ts.map +1 -0
  113. package/dist/cli/interceptor.js +55 -0
  114. package/dist/cli/interceptor.js.map +1 -0
  115. package/dist/cli/tui.d.ts +2 -0
  116. package/dist/cli/tui.d.ts.map +1 -0
  117. package/dist/cli/tui.js +360 -0
  118. package/dist/cli/tui.js.map +1 -0
  119. package/dist/cli/utils/errors.d.ts +17 -0
  120. package/dist/cli/utils/errors.d.ts.map +1 -0
  121. package/dist/cli/utils/errors.js +42 -0
  122. package/dist/cli/utils/errors.js.map +1 -0
  123. package/dist/cli/utils/output.d.ts +23 -0
  124. package/dist/cli/utils/output.d.ts.map +1 -0
  125. package/dist/cli/utils/output.js +69 -0
  126. package/dist/cli/utils/output.js.map +1 -0
  127. package/dist/config/defaults.d.ts +3 -0
  128. package/dist/config/defaults.d.ts.map +1 -0
  129. package/dist/config/defaults.js +50 -0
  130. package/dist/config/defaults.js.map +1 -0
  131. package/dist/config/index.d.ts +26 -0
  132. package/dist/config/index.d.ts.map +1 -0
  133. package/dist/config/index.js +161 -0
  134. package/dist/config/index.js.map +1 -0
  135. package/dist/config/schema.d.ts +59 -0
  136. package/dist/config/schema.d.ts.map +1 -0
  137. package/dist/config/schema.js +86 -0
  138. package/dist/config/schema.js.map +1 -0
  139. package/dist/convention/convention-distiller.d.ts +28 -0
  140. package/dist/convention/convention-distiller.d.ts.map +1 -0
  141. package/dist/convention/convention-distiller.js +172 -0
  142. package/dist/convention/convention-distiller.js.map +1 -0
  143. package/dist/convention/convention-evolver.d.ts +31 -0
  144. package/dist/convention/convention-evolver.d.ts.map +1 -0
  145. package/dist/convention/convention-evolver.js +175 -0
  146. package/dist/convention/convention-evolver.js.map +1 -0
  147. package/dist/convention/convention-loader.d.ts +22 -0
  148. package/dist/convention/convention-loader.d.ts.map +1 -0
  149. package/dist/convention/convention-loader.js +139 -0
  150. package/dist/convention/convention-loader.js.map +1 -0
  151. package/dist/convention/convention-manager.d.ts +46 -0
  152. package/dist/convention/convention-manager.d.ts.map +1 -0
  153. package/dist/convention/convention-manager.js +193 -0
  154. package/dist/convention/convention-manager.js.map +1 -0
  155. package/dist/convention/index.d.ts +6 -0
  156. package/dist/convention/index.d.ts.map +1 -0
  157. package/dist/convention/index.js +5 -0
  158. package/dist/convention/index.js.map +1 -0
  159. package/dist/convention/types.d.ts +90 -0
  160. package/dist/convention/types.d.ts.map +1 -0
  161. package/dist/convention/types.js +13 -0
  162. package/dist/convention/types.js.map +1 -0
  163. package/dist/daemon/engine-registry/init-autopilot.d.ts +12 -0
  164. package/dist/daemon/engine-registry/init-autopilot.d.ts.map +1 -0
  165. package/dist/daemon/engine-registry/init-autopilot.js +20 -0
  166. package/dist/daemon/engine-registry/init-autopilot.js.map +1 -0
  167. package/dist/daemon/engine-registry/init-distill.d.ts +6 -0
  168. package/dist/daemon/engine-registry/init-distill.d.ts.map +1 -0
  169. package/dist/daemon/engine-registry/init-distill.js +25 -0
  170. package/dist/daemon/engine-registry/init-distill.js.map +1 -0
  171. package/dist/daemon/engine-registry/init-orchestration.d.ts +5 -0
  172. package/dist/daemon/engine-registry/init-orchestration.d.ts.map +1 -0
  173. package/dist/daemon/engine-registry/init-orchestration.js +11 -0
  174. package/dist/daemon/engine-registry/init-orchestration.js.map +1 -0
  175. package/dist/daemon/engine-registry/init-pattern-engine.d.ts +9 -0
  176. package/dist/daemon/engine-registry/init-pattern-engine.d.ts.map +1 -0
  177. package/dist/daemon/engine-registry/init-pattern-engine.js +22 -0
  178. package/dist/daemon/engine-registry/init-pattern-engine.js.map +1 -0
  179. package/dist/daemon/engine-registry/init-pipeline.d.ts +5 -0
  180. package/dist/daemon/engine-registry/init-pipeline.d.ts.map +1 -0
  181. package/dist/daemon/engine-registry/init-pipeline.js +12 -0
  182. package/dist/daemon/engine-registry/init-pipeline.js.map +1 -0
  183. package/dist/daemon/engine-registry/init-profile.d.ts +3 -0
  184. package/dist/daemon/engine-registry/init-profile.d.ts.map +1 -0
  185. package/dist/daemon/engine-registry/init-profile.js +28 -0
  186. package/dist/daemon/engine-registry/init-profile.js.map +1 -0
  187. package/dist/daemon/engine-registry/init-resume.d.ts +6 -0
  188. package/dist/daemon/engine-registry/init-resume.d.ts.map +1 -0
  189. package/dist/daemon/engine-registry/init-resume.js +16 -0
  190. package/dist/daemon/engine-registry/init-resume.js.map +1 -0
  191. package/dist/daemon/engine-registry/init-skill-registry.d.ts +10 -0
  192. package/dist/daemon/engine-registry/init-skill-registry.d.ts.map +1 -0
  193. package/dist/daemon/engine-registry/init-skill-registry.js +46 -0
  194. package/dist/daemon/engine-registry/init-skill-registry.js.map +1 -0
  195. package/dist/daemon/engine-registry.d.ts +13 -0
  196. package/dist/daemon/engine-registry.d.ts.map +1 -0
  197. package/dist/daemon/engine-registry.js +45 -0
  198. package/dist/daemon/engine-registry.js.map +1 -0
  199. package/dist/daemon/event-parser.d.ts +5 -0
  200. package/dist/daemon/event-parser.d.ts.map +1 -0
  201. package/dist/daemon/event-parser.js +29 -0
  202. package/dist/daemon/event-parser.js.map +1 -0
  203. package/dist/daemon/handler-context.d.ts +37 -0
  204. package/dist/daemon/handler-context.d.ts.map +1 -0
  205. package/dist/daemon/handler-context.js +2 -0
  206. package/dist/daemon/handler-context.js.map +1 -0
  207. package/dist/daemon/handlers/base-handler.d.ts +14 -0
  208. package/dist/daemon/handlers/base-handler.d.ts.map +1 -0
  209. package/dist/daemon/handlers/base-handler.js +18 -0
  210. package/dist/daemon/handlers/base-handler.js.map +1 -0
  211. package/dist/daemon/handlers/conversational-config-handler.d.ts +24 -0
  212. package/dist/daemon/handlers/conversational-config-handler.d.ts.map +1 -0
  213. package/dist/daemon/handlers/conversational-config-handler.js +175 -0
  214. package/dist/daemon/handlers/conversational-config-handler.js.map +1 -0
  215. package/dist/daemon/handlers/post-tool-use-handler.d.ts +9 -0
  216. package/dist/daemon/handlers/post-tool-use-handler.d.ts.map +1 -0
  217. package/dist/daemon/handlers/post-tool-use-handler.js +82 -0
  218. package/dist/daemon/handlers/post-tool-use-handler.js.map +1 -0
  219. package/dist/daemon/handlers/pre-tool-use-handler.d.ts +11 -0
  220. package/dist/daemon/handlers/pre-tool-use-handler.d.ts.map +1 -0
  221. package/dist/daemon/handlers/pre-tool-use-handler.js +58 -0
  222. package/dist/daemon/handlers/pre-tool-use-handler.js.map +1 -0
  223. package/dist/daemon/handlers/stop-handler.d.ts +11 -0
  224. package/dist/daemon/handlers/stop-handler.d.ts.map +1 -0
  225. package/dist/daemon/handlers/stop-handler.js +112 -0
  226. package/dist/daemon/handlers/stop-handler.js.map +1 -0
  227. package/dist/daemon/handlers/user-prompt-handler.d.ts +72 -0
  228. package/dist/daemon/handlers/user-prompt-handler.d.ts.map +1 -0
  229. package/dist/daemon/handlers/user-prompt-handler.js +374 -0
  230. package/dist/daemon/handlers/user-prompt-handler.js.map +1 -0
  231. package/dist/daemon/index.d.ts +2 -0
  232. package/dist/daemon/index.d.ts.map +1 -0
  233. package/dist/daemon/index.js +284 -0
  234. package/dist/daemon/index.js.map +1 -0
  235. package/dist/daemon/lifecycle.d.ts +9 -0
  236. package/dist/daemon/lifecycle.d.ts.map +1 -0
  237. package/dist/daemon/lifecycle.js +56 -0
  238. package/dist/daemon/lifecycle.js.map +1 -0
  239. package/dist/daemon/server.d.ts +22 -0
  240. package/dist/daemon/server.d.ts.map +1 -0
  241. package/dist/daemon/server.js +139 -0
  242. package/dist/daemon/server.js.map +1 -0
  243. package/dist/distill/index.d.ts +16 -0
  244. package/dist/distill/index.d.ts.map +1 -0
  245. package/dist/distill/index.js +104 -0
  246. package/dist/distill/index.js.map +1 -0
  247. package/dist/distill/prompts.d.ts +6 -0
  248. package/dist/distill/prompts.d.ts.map +1 -0
  249. package/dist/distill/prompts.js +77 -0
  250. package/dist/distill/prompts.js.map +1 -0
  251. package/dist/distill/trigger.d.ts +40 -0
  252. package/dist/distill/trigger.d.ts.map +1 -0
  253. package/dist/distill/trigger.js +127 -0
  254. package/dist/distill/trigger.js.map +1 -0
  255. package/dist/distill/writer.d.ts +15 -0
  256. package/dist/distill/writer.d.ts.map +1 -0
  257. package/dist/distill/writer.js +73 -0
  258. package/dist/distill/writer.js.map +1 -0
  259. package/dist/doc-sync/index.d.ts +21 -0
  260. package/dist/doc-sync/index.d.ts.map +1 -0
  261. package/dist/doc-sync/index.js +190 -0
  262. package/dist/doc-sync/index.js.map +1 -0
  263. package/dist/hooks/check-context-limit.sh +97 -0
  264. package/dist/hooks/hooks/check-context-limit.sh +97 -0
  265. package/dist/hooks/hooks/notification.sh +33 -0
  266. package/dist/hooks/hooks/post-tool-use.sh +49 -0
  267. package/dist/hooks/hooks/pre-tool-use.sh +55 -0
  268. package/dist/hooks/hooks/stop.sh +29 -0
  269. package/dist/hooks/hooks/user-prompt-submit.sh +72 -0
  270. package/dist/hooks/notification.sh +33 -0
  271. package/dist/hooks/post-tool-use.sh +49 -0
  272. package/dist/hooks/pre-tool-use.sh +55 -0
  273. package/dist/hooks/stop.sh +29 -0
  274. package/dist/hooks/user-prompt-submit.sh +72 -0
  275. package/dist/orchestration/index.d.ts +32 -0
  276. package/dist/orchestration/index.d.ts.map +1 -0
  277. package/dist/orchestration/index.js +72 -0
  278. package/dist/orchestration/index.js.map +1 -0
  279. package/dist/orchestration/notifier.d.ts +11 -0
  280. package/dist/orchestration/notifier.d.ts.map +1 -0
  281. package/dist/orchestration/notifier.js +22 -0
  282. package/dist/orchestration/notifier.js.map +1 -0
  283. package/dist/orchestration/policy-engine.d.ts +21 -0
  284. package/dist/orchestration/policy-engine.d.ts.map +1 -0
  285. package/dist/orchestration/policy-engine.js +77 -0
  286. package/dist/orchestration/policy-engine.js.map +1 -0
  287. package/dist/orchestration/tracker.d.ts +45 -0
  288. package/dist/orchestration/tracker.d.ts.map +1 -0
  289. package/dist/orchestration/tracker.js +95 -0
  290. package/dist/orchestration/tracker.js.map +1 -0
  291. package/dist/pattern-engine/execution-tracker.d.ts +45 -0
  292. package/dist/pattern-engine/execution-tracker.d.ts.map +1 -0
  293. package/dist/pattern-engine/execution-tracker.js +132 -0
  294. package/dist/pattern-engine/execution-tracker.js.map +1 -0
  295. package/dist/pattern-engine/index.d.ts +52 -0
  296. package/dist/pattern-engine/index.d.ts.map +1 -0
  297. package/dist/pattern-engine/index.js +104 -0
  298. package/dist/pattern-engine/index.js.map +1 -0
  299. package/dist/pattern-engine/pattern-evolver.d.ts +39 -0
  300. package/dist/pattern-engine/pattern-evolver.d.ts.map +1 -0
  301. package/dist/pattern-engine/pattern-evolver.js +170 -0
  302. package/dist/pattern-engine/pattern-evolver.js.map +1 -0
  303. package/dist/pattern-engine/pattern-executor.d.ts +43 -0
  304. package/dist/pattern-engine/pattern-executor.d.ts.map +1 -0
  305. package/dist/pattern-engine/pattern-executor.js +185 -0
  306. package/dist/pattern-engine/pattern-executor.js.map +1 -0
  307. package/dist/pattern-engine/pattern-loader.d.ts +14 -0
  308. package/dist/pattern-engine/pattern-loader.d.ts.map +1 -0
  309. package/dist/pattern-engine/pattern-loader.js +111 -0
  310. package/dist/pattern-engine/pattern-loader.js.map +1 -0
  311. package/dist/pattern-engine/pattern-router.d.ts +24 -0
  312. package/dist/pattern-engine/pattern-router.d.ts.map +1 -0
  313. package/dist/pattern-engine/pattern-router.js +124 -0
  314. package/dist/pattern-engine/pattern-router.js.map +1 -0
  315. package/dist/pattern-engine/types.d.ts +144 -0
  316. package/dist/pattern-engine/types.d.ts.map +1 -0
  317. package/dist/pattern-engine/types.js +8 -0
  318. package/dist/pattern-engine/types.js.map +1 -0
  319. package/dist/pipeline/analyzer.d.ts +17 -0
  320. package/dist/pipeline/analyzer.d.ts.map +1 -0
  321. package/dist/pipeline/analyzer.js +103 -0
  322. package/dist/pipeline/analyzer.js.map +1 -0
  323. package/dist/pipeline/index.d.ts +68 -0
  324. package/dist/pipeline/index.d.ts.map +1 -0
  325. package/dist/pipeline/index.js +183 -0
  326. package/dist/pipeline/index.js.map +1 -0
  327. package/dist/pipeline/phase-manager.d.ts +32 -0
  328. package/dist/pipeline/phase-manager.d.ts.map +1 -0
  329. package/dist/pipeline/phase-manager.js +188 -0
  330. package/dist/pipeline/phase-manager.js.map +1 -0
  331. package/dist/pipeline/pipeline-options.d.ts +19 -0
  332. package/dist/pipeline/pipeline-options.d.ts.map +1 -0
  333. package/dist/pipeline/pipeline-options.js +136 -0
  334. package/dist/pipeline/pipeline-options.js.map +1 -0
  335. package/dist/pipeline/store.d.ts +32 -0
  336. package/dist/pipeline/store.d.ts.map +1 -0
  337. package/dist/pipeline/store.js +113 -0
  338. package/dist/pipeline/store.js.map +1 -0
  339. package/dist/pipeline/types.d.ts +25 -0
  340. package/dist/pipeline/types.d.ts.map +1 -0
  341. package/dist/pipeline/types.js +16 -0
  342. package/dist/pipeline/types.js.map +1 -0
  343. package/dist/profile/index.d.ts +77 -0
  344. package/dist/profile/index.d.ts.map +1 -0
  345. package/dist/profile/index.js +407 -0
  346. package/dist/profile/index.js.map +1 -0
  347. package/dist/resume/context-gen.d.ts +20 -0
  348. package/dist/resume/context-gen.d.ts.map +1 -0
  349. package/dist/resume/context-gen.js +130 -0
  350. package/dist/resume/context-gen.js.map +1 -0
  351. package/dist/resume/index.d.ts +32 -0
  352. package/dist/resume/index.d.ts.map +1 -0
  353. package/dist/resume/index.js +142 -0
  354. package/dist/resume/index.js.map +1 -0
  355. package/dist/resume/state-machine.d.ts +21 -0
  356. package/dist/resume/state-machine.d.ts.map +1 -0
  357. package/dist/resume/state-machine.js +58 -0
  358. package/dist/resume/state-machine.js.map +1 -0
  359. package/dist/skill-registry/collector.d.ts +75 -0
  360. package/dist/skill-registry/collector.d.ts.map +1 -0
  361. package/dist/skill-registry/collector.js +334 -0
  362. package/dist/skill-registry/collector.js.map +1 -0
  363. package/dist/skill-registry/evolver.d.ts +84 -0
  364. package/dist/skill-registry/evolver.d.ts.map +1 -0
  365. package/dist/skill-registry/evolver.js +585 -0
  366. package/dist/skill-registry/evolver.js.map +1 -0
  367. package/dist/skill-registry/index.d.ts +73 -0
  368. package/dist/skill-registry/index.d.ts.map +1 -0
  369. package/dist/skill-registry/index.js +195 -0
  370. package/dist/skill-registry/index.js.map +1 -0
  371. package/dist/skill-registry/official-sync.d.ts +20 -0
  372. package/dist/skill-registry/official-sync.d.ts.map +1 -0
  373. package/dist/skill-registry/official-sync.js +576 -0
  374. package/dist/skill-registry/official-sync.js.map +1 -0
  375. package/dist/skill-registry/orchestration-config.d.ts +35 -0
  376. package/dist/skill-registry/orchestration-config.d.ts.map +1 -0
  377. package/dist/skill-registry/orchestration-config.js +125 -0
  378. package/dist/skill-registry/orchestration-config.js.map +1 -0
  379. package/dist/skill-registry/orchestrator.d.ts +45 -0
  380. package/dist/skill-registry/orchestrator.d.ts.map +1 -0
  381. package/dist/skill-registry/orchestrator.js +183 -0
  382. package/dist/skill-registry/orchestrator.js.map +1 -0
  383. package/dist/skill-registry/project-learner.d.ts +25 -0
  384. package/dist/skill-registry/project-learner.d.ts.map +1 -0
  385. package/dist/skill-registry/project-learner.js +176 -0
  386. package/dist/skill-registry/project-learner.js.map +1 -0
  387. package/dist/skill-registry/recommender.d.ts +25 -0
  388. package/dist/skill-registry/recommender.d.ts.map +1 -0
  389. package/dist/skill-registry/recommender.js +91 -0
  390. package/dist/skill-registry/recommender.js.map +1 -0
  391. package/dist/skill-registry/registry.d.ts +49 -0
  392. package/dist/skill-registry/registry.d.ts.map +1 -0
  393. package/dist/skill-registry/registry.js +160 -0
  394. package/dist/skill-registry/registry.js.map +1 -0
  395. package/dist/skill-registry/scanner.d.ts +36 -0
  396. package/dist/skill-registry/scanner.d.ts.map +1 -0
  397. package/dist/skill-registry/scanner.js +122 -0
  398. package/dist/skill-registry/scanner.js.map +1 -0
  399. package/dist/skill-registry/skills-config.d.ts +29 -0
  400. package/dist/skill-registry/skills-config.d.ts.map +1 -0
  401. package/dist/skill-registry/skills-config.js +86 -0
  402. package/dist/skill-registry/skills-config.js.map +1 -0
  403. package/dist/storage/index.d.ts +31 -0
  404. package/dist/storage/index.d.ts.map +1 -0
  405. package/dist/storage/index.js +2 -0
  406. package/dist/storage/index.js.map +1 -0
  407. package/dist/storage/sqlite.d.ts +58 -0
  408. package/dist/storage/sqlite.d.ts.map +1 -0
  409. package/dist/storage/sqlite.js +375 -0
  410. package/dist/storage/sqlite.js.map +1 -0
  411. package/dist/tests/claude-api.test.d.ts +2 -0
  412. package/dist/tests/claude-api.test.d.ts.map +1 -0
  413. package/dist/tests/claude-api.test.js +96 -0
  414. package/dist/tests/claude-api.test.js.map +1 -0
  415. package/dist/tests/conversational-config-handler.test.d.ts +2 -0
  416. package/dist/tests/conversational-config-handler.test.d.ts.map +1 -0
  417. package/dist/tests/conversational-config-handler.test.js +107 -0
  418. package/dist/tests/conversational-config-handler.test.js.map +1 -0
  419. package/dist/tests/doc-sync.test.d.ts +2 -0
  420. package/dist/tests/doc-sync.test.d.ts.map +1 -0
  421. package/dist/tests/doc-sync.test.js +148 -0
  422. package/dist/tests/doc-sync.test.js.map +1 -0
  423. package/dist/tests/orchestration-config.test.d.ts +2 -0
  424. package/dist/tests/orchestration-config.test.d.ts.map +1 -0
  425. package/dist/tests/orchestration-config.test.js +122 -0
  426. package/dist/tests/orchestration-config.test.js.map +1 -0
  427. package/dist/tests/pipeline-options.test.d.ts +2 -0
  428. package/dist/tests/pipeline-options.test.d.ts.map +1 -0
  429. package/dist/tests/pipeline-options.test.js +68 -0
  430. package/dist/tests/pipeline-options.test.js.map +1 -0
  431. package/dist/tests/resume-context-gen.test.d.ts +2 -0
  432. package/dist/tests/resume-context-gen.test.d.ts.map +1 -0
  433. package/dist/tests/resume-context-gen.test.js +93 -0
  434. package/dist/tests/resume-context-gen.test.js.map +1 -0
  435. package/dist/tests/sqlite.test.d.ts +2 -0
  436. package/dist/tests/sqlite.test.d.ts.map +1 -0
  437. package/dist/tests/sqlite.test.js +154 -0
  438. package/dist/tests/sqlite.test.js.map +1 -0
  439. package/dist/tests/tracker.test.d.ts +2 -0
  440. package/dist/tests/tracker.test.d.ts.map +1 -0
  441. package/dist/tests/tracker.test.js +75 -0
  442. package/dist/tests/tracker.test.js.map +1 -0
  443. package/dist/tests/tui.test.d.ts +2 -0
  444. package/dist/tests/tui.test.d.ts.map +1 -0
  445. package/dist/tests/tui.test.js +39 -0
  446. package/dist/tests/tui.test.js.map +1 -0
  447. package/dist/tests/user-prompt-handler.test.d.ts +2 -0
  448. package/dist/tests/user-prompt-handler.test.d.ts.map +1 -0
  449. package/dist/tests/user-prompt-handler.test.js +182 -0
  450. package/dist/tests/user-prompt-handler.test.js.map +1 -0
  451. package/dist/tui/index.d.ts +2 -0
  452. package/dist/tui/index.d.ts.map +1 -0
  453. package/dist/tui/index.js +486 -0
  454. package/dist/tui/index.js.map +1 -0
  455. package/dist/types/event.d.ts +24 -0
  456. package/dist/types/event.d.ts.map +1 -0
  457. package/dist/types/event.js +2 -0
  458. package/dist/types/event.js.map +1 -0
  459. package/dist/types/index.d.ts +3 -0
  460. package/dist/types/index.d.ts.map +1 -0
  461. package/dist/types/index.js +2 -0
  462. package/dist/types/index.js.map +1 -0
  463. package/dist/types/session.d.ts +11 -0
  464. package/dist/types/session.d.ts.map +1 -0
  465. package/dist/types/session.js +2 -0
  466. package/dist/types/session.js.map +1 -0
  467. package/dist/utils/claude-api.d.ts +49 -0
  468. package/dist/utils/claude-api.d.ts.map +1 -0
  469. package/dist/utils/claude-api.js +233 -0
  470. package/dist/utils/claude-api.js.map +1 -0
  471. package/dist/utils/formatter.d.ts +57 -0
  472. package/dist/utils/formatter.d.ts.map +1 -0
  473. package/dist/utils/formatter.js +109 -0
  474. package/dist/utils/formatter.js.map +1 -0
  475. package/dist/utils/logger.d.ts +25 -0
  476. package/dist/utils/logger.d.ts.map +1 -0
  477. package/dist/utils/logger.js +136 -0
  478. package/dist/utils/logger.js.map +1 -0
  479. package/dist/utils/mutex-lock.d.ts +23 -0
  480. package/dist/utils/mutex-lock.d.ts.map +1 -0
  481. package/dist/utils/mutex-lock.js +42 -0
  482. package/dist/utils/mutex-lock.js.map +1 -0
  483. package/dist/utils/truncate.d.ts +30 -0
  484. package/dist/utils/truncate.d.ts.map +1 -0
  485. package/dist/utils/truncate.js +64 -0
  486. package/dist/utils/truncate.js.map +1 -0
  487. package/package.json +63 -0
@@ -0,0 +1,45 @@
1
+ import type { ForgeEvent } from '../types/index.js';
2
+ import type { SQLiteStorage } from '../storage/sqlite.js';
3
+ import type { PatternExecution } from './types.js';
4
+ import type { PatternExecutor } from './pattern-executor.js';
5
+ import type { Pattern } from './types.js';
6
+ /**
7
+ * ExecutionTracer:PostToolUse 状态机推进器。
8
+ *
9
+ * 职责:
10
+ * 1. 监听 PostToolUse 事件,检测当前阶段的 completion_signal
11
+ * 2. 将阶段执行记录写入 SQLite pattern_executions 表
12
+ * 3. 调用 PatternExecutor.advancePhase() 推进状态机
13
+ *
14
+ * 不负责:AI 调用、prompt 渲染、Pattern 路由
15
+ */
16
+ export declare class ExecutionTracer {
17
+ private readonly storage;
18
+ private readonly executor;
19
+ /** 记录每个 planId+phaseId 的开始时间(毫秒时间戳) */
20
+ private phaseStartTimes;
21
+ constructor(storage: SQLiteStorage, executor: PatternExecutor);
22
+ /**
23
+ * 处理 PostToolUse 事件。
24
+ * 若当前项目有活跃 Pattern 计划且检测到 completion_signal,则推进阶段。
25
+ *
26
+ * @returns 推进后的下一阶段 ID,null 表示未推进或 Pattern 已完成
27
+ */
28
+ onPostToolUse(event: ForgeEvent, pattern: Pattern): Promise<string | null>;
29
+ /**
30
+ * 记录阶段开始(在 PatternExecutor.startPlan 后调用)。
31
+ */
32
+ recordPhaseStart(planId: string, phaseId: string, patternId: string, sessionId: string, projectPath: string): void;
33
+ /**
34
+ * 将执行记录写入 SQLite。
35
+ * 使用 INSERT OR REPLACE 以支持状态更新(running → completed)。
36
+ */
37
+ private writeExecution;
38
+ /**
39
+ * 查询指定 Pattern 的最近执行记录(供 PatternEvolver 使用)。
40
+ */
41
+ queryExecutions(patternId: string, limit?: number): PatternExecution[];
42
+ /** 更新用户满意度(+1 正向 / -1 负向 / 0 中性) */
43
+ updateSatisfaction(executionId: string, satisfaction: number): void;
44
+ }
45
+ //# sourceMappingURL=execution-tracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execution-tracker.d.ts","sourceRoot":"","sources":["../../src/pattern-engine/execution-tracker.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,gBAAgB,EAAe,MAAM,YAAY,CAAC;AAChE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAM1C;;;;;;;;;GASG;AACH,qBAAa,eAAe;IAKxB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAL3B,uCAAuC;IACvC,OAAO,CAAC,eAAe,CAA6B;gBAGjC,OAAO,EAAE,aAAa,EACtB,QAAQ,EAAE,eAAe;IAG5C;;;;;OAKG;IACG,aAAa,CACjB,KAAK,EAAE,UAAU,EACjB,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAiEzB;;OAEG;IACH,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;IAoBlH;;;OAGG;IACH,OAAO,CAAC,cAAc;IAQtB;;OAEG;IACH,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,gBAAgB,EAAE;IASlE,oCAAoC;IACpC,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI;CAOpE"}
@@ -0,0 +1,132 @@
1
+ import { randomUUID } from 'crypto';
2
+ import { logger } from '../utils/logger.js';
3
+ import { truncateHead } from '../utils/truncate.js';
4
+ const OUTPUT_MAX_CHARS = 500;
5
+ /**
6
+ * ExecutionTracer:PostToolUse 状态机推进器。
7
+ *
8
+ * 职责:
9
+ * 1. 监听 PostToolUse 事件,检测当前阶段的 completion_signal
10
+ * 2. 将阶段执行记录写入 SQLite pattern_executions 表
11
+ * 3. 调用 PatternExecutor.advancePhase() 推进状态机
12
+ *
13
+ * 不负责:AI 调用、prompt 渲染、Pattern 路由
14
+ */
15
+ export class ExecutionTracer {
16
+ storage;
17
+ executor;
18
+ /** 记录每个 planId+phaseId 的开始时间(毫秒时间戳) */
19
+ phaseStartTimes = new Map();
20
+ constructor(storage, executor) {
21
+ this.storage = storage;
22
+ this.executor = executor;
23
+ }
24
+ /**
25
+ * 处理 PostToolUse 事件。
26
+ * 若当前项目有活跃 Pattern 计划且检测到 completion_signal,则推进阶段。
27
+ *
28
+ * @returns 推进后的下一阶段 ID,null 表示未推进或 Pattern 已完成
29
+ */
30
+ async onPostToolUse(event, pattern) {
31
+ const plan = this.executor.getActivePlan(event.project_path);
32
+ if (!plan?.currentPhaseId)
33
+ return null;
34
+ const toolName = event.tool_name ?? '';
35
+ const toolInput = (event.tool_input ?? {});
36
+ const triggered = this.executor.checkCompletionSignal(event.project_path, toolName, toolInput, pattern);
37
+ if (!triggered)
38
+ return null;
39
+ const completedPhaseId = plan.currentPhaseId;
40
+ const startKey = `${plan.id}:${completedPhaseId}`;
41
+ const startedAt = this.phaseStartTimes.get(startKey);
42
+ const completedAt = new Date().toISOString();
43
+ const durationMs = startedAt ? Date.now() - startedAt : null;
44
+ // 提取阶段输出摘要(tool_output 截断到 500 字符)
45
+ const rawOutput = String(event.tool_output ?? '');
46
+ const output = truncateHead(rawOutput, OUTPUT_MAX_CHARS);
47
+ // 写入 SQLite
48
+ this.writeExecution({
49
+ id: randomUUID(),
50
+ pattern_id: pattern.id,
51
+ session_id: plan.sessionId,
52
+ project_path: event.project_path,
53
+ phase_id: completedPhaseId,
54
+ status: 'completed',
55
+ started_at: startedAt ? new Date(startedAt).toISOString() : null,
56
+ completed_at: completedAt,
57
+ duration_ms: durationMs,
58
+ output,
59
+ user_satisfaction: null,
60
+ created_at: new Date().toISOString(),
61
+ });
62
+ this.phaseStartTimes.delete(startKey);
63
+ // 推进状态机
64
+ const nextPhaseId = this.executor.advancePhase(event.project_path, completedPhaseId, output, pattern);
65
+ // 若有下一阶段,记录其开始时间
66
+ if (nextPhaseId) {
67
+ const nextKey = `${plan.id}:${nextPhaseId}`;
68
+ this.phaseStartTimes.set(nextKey, Date.now());
69
+ logger.info(`[Forge:追踪器] 阶段 ${completedPhaseId} 完成 → 推进到 ${nextPhaseId}`);
70
+ }
71
+ else {
72
+ logger.info(`[Forge:追踪器] Pattern ${pattern.id} 全部阶段完成`);
73
+ this.executor.clearPlan(event.project_path);
74
+ }
75
+ return nextPhaseId;
76
+ }
77
+ /**
78
+ * 记录阶段开始(在 PatternExecutor.startPlan 后调用)。
79
+ */
80
+ recordPhaseStart(planId, phaseId, patternId, sessionId, projectPath) {
81
+ const key = `${planId}:${phaseId}`;
82
+ this.phaseStartTimes.set(key, Date.now());
83
+ this.writeExecution({
84
+ id: randomUUID(),
85
+ pattern_id: patternId,
86
+ session_id: sessionId,
87
+ project_path: projectPath,
88
+ phase_id: phaseId,
89
+ status: 'running',
90
+ started_at: new Date().toISOString(),
91
+ completed_at: null,
92
+ duration_ms: null,
93
+ output: null,
94
+ user_satisfaction: null,
95
+ created_at: new Date().toISOString(),
96
+ });
97
+ }
98
+ /**
99
+ * 将执行记录写入 SQLite。
100
+ * 使用 INSERT OR REPLACE 以支持状态更新(running → completed)。
101
+ */
102
+ writeExecution(record) {
103
+ try {
104
+ this.storage.writePatternExecution(record);
105
+ }
106
+ catch (err) {
107
+ logger.warn(`[Forge:追踪器] 写入执行记录失败:${err}`);
108
+ }
109
+ }
110
+ /**
111
+ * 查询指定 Pattern 的最近执行记录(供 PatternEvolver 使用)。
112
+ */
113
+ queryExecutions(patternId, limit = 50) {
114
+ try {
115
+ return this.storage.queryPatternExecutions(patternId, limit);
116
+ }
117
+ catch (err) {
118
+ logger.warn(`[Forge:追踪器] 查询执行记录失败:${err}`);
119
+ return [];
120
+ }
121
+ }
122
+ /** 更新用户满意度(+1 正向 / -1 负向 / 0 中性) */
123
+ updateSatisfaction(executionId, satisfaction) {
124
+ try {
125
+ this.storage.updatePatternSatisfaction(executionId, satisfaction);
126
+ }
127
+ catch (err) {
128
+ logger.warn(`[Forge:追踪器] 更新满意度失败:${err}`);
129
+ }
130
+ }
131
+ }
132
+ //# sourceMappingURL=execution-tracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execution-tracker.js","sourceRoot":"","sources":["../../src/pattern-engine/execution-tracker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ import { PatternLoader } from './pattern-loader.js';
2
+ import { ExecutionTracer } from './execution-tracker.js';
3
+ import type { ClaudeAPI } from '../utils/claude-api.js';
4
+ import type { SQLiteStorage } from '../storage/sqlite.js';
5
+ import type { Pattern, RouteResult, PatternContext, ExecutionPlan } from './types.js';
6
+ import type { Convention } from '../convention/types.js';
7
+ import type { ForgeEvent } from '../types/index.js';
8
+ /**
9
+ * PatternEngine 门面类:统一入口,供 daemon handler 调用。
10
+ *
11
+ * Phase 1 提供:Pattern 加载与路由。
12
+ * Phase 2 扩展:PatternExecutor、ExecutionTracer。
13
+ * Phase 3 将在此扩展:PatternEvolver。
14
+ */
15
+ export declare class PatternEngine {
16
+ private loader;
17
+ private router;
18
+ private executor;
19
+ private tracer;
20
+ private patterns;
21
+ constructor(api: ClaudeAPI, storage: SQLiteStorage);
22
+ /** 初始化:加载所有 Pattern 文件 */
23
+ initialize(): void;
24
+ /** 重新加载 Pattern 文件(热更新) */
25
+ reload(): void;
26
+ /** 路由用户输入到合适的 Pattern */
27
+ route(userInput: string, complexity?: 'simple' | 'moderate' | 'complex'): Promise<RouteResult>;
28
+ /**
29
+ * 路由并启动执行计划。
30
+ * 若命中 Pattern,创建 ExecutionPlan 并返回 PatternContext(含渲染后的 prompt)。
31
+ * 未命中返回 null,调用方继续走原有 Skill 编排路径。
32
+ */
33
+ routeAndStart(userInput: string, sessionId: string, projectPath: string, complexity?: 'simple' | 'moderate' | 'complex'): Promise<PatternContext | null>;
34
+ /** 从当前活跃计划生成 additionalContext 字符串(供 UserPromptHandler 注入) */
35
+ buildAdditionalContext(patternCtx: PatternContext, patternId: string, convention?: Convention | null): string | null;
36
+ /**
37
+ * 处理 PostToolUse 事件:检测 completion_signal → 推进状态机 → 记录轨迹。
38
+ * 返回下一阶段 ID(null 表示未推进或 Pattern 已完成)。
39
+ */
40
+ onPostToolUse(event: ForgeEvent): Promise<string | null>;
41
+ /** 获取当前活跃计划(供外部判断是否有活跃 Pattern) */
42
+ getActivePlan(projectPath: string): ExecutionPlan | null;
43
+ /** 返回所有已加载的 Pattern(只读) */
44
+ listPatterns(): readonly Pattern[];
45
+ /** 按 ID 查找 Pattern */
46
+ getPattern(id: string): Pattern | null;
47
+ /** 获取 PatternLoader(供 PatternEvolver 调用 savePattern) */
48
+ getLoader(): PatternLoader;
49
+ /** 获取 ExecutionTracer(供外部更新满意度) */
50
+ getTracer(): ExecutionTracer;
51
+ }
52
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/pattern-engine/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGpD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AACtF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD;;;;;;GAMG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,QAAQ,CAAiB;gBAErB,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa;IAOlD,0BAA0B;IAC1B,UAAU,IAAI,IAAI;IAMlB,2BAA2B;IAC3B,MAAM,IAAI,IAAI;IAMd,yBAAyB;IACnB,KAAK,CACT,SAAS,EAAE,MAAM,EACjB,UAAU,CAAC,EAAE,QAAQ,GAAG,UAAU,GAAG,SAAS,GAC7C,OAAO,CAAC,WAAW,CAAC;IAIvB;;;;OAIG;IACG,aAAa,CACjB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,UAAU,CAAC,EAAE,QAAQ,GAAG,UAAU,GAAG,SAAS,GAC7C,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAejC,8DAA8D;IAC9D,sBAAsB,CAAC,UAAU,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI;IAMpH;;;OAGG;IACG,aAAa,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAiB9D,mCAAmC;IACnC,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI;IAIxD,2BAA2B;IAC3B,YAAY,IAAI,SAAS,OAAO,EAAE;IAIlC,sBAAsB;IACtB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI;IAItC,wDAAwD;IACxD,SAAS,IAAI,aAAa;IAI1B,mCAAmC;IACnC,SAAS,IAAI,eAAe;CAG7B"}
@@ -0,0 +1,104 @@
1
+ import { PatternLoader } from './pattern-loader.js';
2
+ import { PatternRouter } from './pattern-router.js';
3
+ import { PatternExecutor } from './pattern-executor.js';
4
+ import { ExecutionTracer } from './execution-tracker.js';
5
+ import { logger } from '../utils/logger.js';
6
+ /**
7
+ * PatternEngine 门面类:统一入口,供 daemon handler 调用。
8
+ *
9
+ * Phase 1 提供:Pattern 加载与路由。
10
+ * Phase 2 扩展:PatternExecutor、ExecutionTracer。
11
+ * Phase 3 将在此扩展:PatternEvolver。
12
+ */
13
+ export class PatternEngine {
14
+ loader;
15
+ router;
16
+ executor;
17
+ tracer;
18
+ patterns = [];
19
+ constructor(api, storage) {
20
+ this.loader = new PatternLoader();
21
+ this.router = new PatternRouter(api);
22
+ this.executor = new PatternExecutor();
23
+ this.tracer = new ExecutionTracer(storage, this.executor);
24
+ }
25
+ /** 初始化:加载所有 Pattern 文件 */
26
+ initialize() {
27
+ this.patterns = this.loader.loadAll();
28
+ this.router.setPatterns(this.patterns);
29
+ logger.info(`[Pattern引擎] 已初始化,共 ${this.patterns.length} 个 Pattern`);
30
+ }
31
+ /** 重新加载 Pattern 文件(热更新) */
32
+ reload() {
33
+ this.patterns = this.loader.loadAll();
34
+ this.router.setPatterns(this.patterns);
35
+ logger.info(`[Pattern引擎] 已重新加载,共 ${this.patterns.length} 个 Pattern`);
36
+ }
37
+ /** 路由用户输入到合适的 Pattern */
38
+ async route(userInput, complexity) {
39
+ return this.router.route(userInput, complexity);
40
+ }
41
+ /**
42
+ * 路由并启动执行计划。
43
+ * 若命中 Pattern,创建 ExecutionPlan 并返回 PatternContext(含渲染后的 prompt)。
44
+ * 未命中返回 null,调用方继续走原有 Skill 编排路径。
45
+ */
46
+ async routeAndStart(userInput, sessionId, projectPath, complexity) {
47
+ const result = await this.route(userInput, complexity);
48
+ if (!result.pattern)
49
+ return null;
50
+ const pattern = result.pattern;
51
+ const plan = this.executor.startPlan(pattern, sessionId, projectPath);
52
+ // 记录第一个阶段的开始时间
53
+ if (plan.currentPhaseId) {
54
+ this.tracer.recordPhaseStart(plan.id, plan.currentPhaseId, pattern.id, sessionId, projectPath);
55
+ }
56
+ return this.executor.execute(pattern, plan, userInput);
57
+ }
58
+ /** 从当前活跃计划生成 additionalContext 字符串(供 UserPromptHandler 注入) */
59
+ buildAdditionalContext(patternCtx, patternId, convention) {
60
+ const pattern = this.patterns.find((p) => p.id === patternId) ?? null;
61
+ if (!pattern)
62
+ return null;
63
+ return this.executor.buildAdditionalContext(patternCtx, pattern, convention);
64
+ }
65
+ /**
66
+ * 处理 PostToolUse 事件:检测 completion_signal → 推进状态机 → 记录轨迹。
67
+ * 返回下一阶段 ID(null 表示未推进或 Pattern 已完成)。
68
+ */
69
+ async onPostToolUse(event) {
70
+ const plan = this.executor.getActivePlan(event.project_path);
71
+ if (!plan)
72
+ return null;
73
+ const pattern = this.patterns.find((p) => p.id === plan.patternId) ?? null;
74
+ if (!pattern)
75
+ return null;
76
+ const nextPhaseId = await this.tracer.onPostToolUse(event, pattern);
77
+ // 若推进到下一阶段,记录其开始时间
78
+ if (nextPhaseId) {
79
+ this.tracer.recordPhaseStart(plan.id, nextPhaseId, pattern.id, plan.sessionId, event.project_path);
80
+ }
81
+ return nextPhaseId;
82
+ }
83
+ /** 获取当前活跃计划(供外部判断是否有活跃 Pattern) */
84
+ getActivePlan(projectPath) {
85
+ return this.executor.getActivePlan(projectPath);
86
+ }
87
+ /** 返回所有已加载的 Pattern(只读) */
88
+ listPatterns() {
89
+ return this.patterns;
90
+ }
91
+ /** 按 ID 查找 Pattern */
92
+ getPattern(id) {
93
+ return this.patterns.find((p) => p.id === id) ?? null;
94
+ }
95
+ /** 获取 PatternLoader(供 PatternEvolver 调用 savePattern) */
96
+ getLoader() {
97
+ return this.loader;
98
+ }
99
+ /** 获取 ExecutionTracer(供外部更新满意度) */
100
+ getTracer() {
101
+ return this.tracer;
102
+ }
103
+ }
104
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/pattern-engine/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import type { ClaudeAPI } from '../utils/claude-api.js';
2
+ import type { SQLiteStorage } from '../storage/sqlite.js';
3
+ import type { Pattern } from './types.js';
4
+ import type { Convention } from '../convention/types.js';
5
+ interface EvolveResult {
6
+ patternId: string;
7
+ previousVersion: string;
8
+ newVersion: string;
9
+ changes: string[];
10
+ }
11
+ /**
12
+ * PatternEvolver:从执行历史学习,用 AI 优化 Pattern YAML。
13
+ * 触发条件:定时(evolve_interval_days)或阈值(evolve_min_executions)。
14
+ */
15
+ export declare class PatternEvolver {
16
+ private api;
17
+ private storage;
18
+ private loader;
19
+ private defaultMinExecutions;
20
+ constructor(api: ClaudeAPI, storage: SQLiteStorage, defaultMinExecutions?: number);
21
+ /**
22
+ * 对所有 Pattern 执行自进化。
23
+ * 返回每个实际被优化的 Pattern 的进化报告。
24
+ * convention 参数可选,传入时约束所有 Pattern 的进化不得违反其 must 级规则。
25
+ */
26
+ evolve(minExecutions?: number, convention?: Convention | null): Promise<EvolveResult[]>;
27
+ /**
28
+ * 对单个 Pattern 执行自进化。
29
+ * 执行次数不足时跳过,返回 null。
30
+ * convention 参数可选,传入时 AI 优化不得违反其 must 级质量标准。
31
+ */
32
+ evolvePattern(pattern: Pattern, minExecutions?: number, convention?: Convention | null): Promise<EvolveResult | null>;
33
+ private computeMetrics;
34
+ private optimizeWithAI;
35
+ private bumpVersion;
36
+ private writeBack;
37
+ }
38
+ export {};
39
+ //# sourceMappingURL=pattern-evolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pattern-evolver.d.ts","sourceRoot":"","sources":["../../src/pattern-engine/pattern-evolver.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,OAAO,EAAoB,MAAM,YAAY,CAAC;AAE5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAWzD,UAAU,YAAY;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;;GAGG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,GAAG,CAAY;IACvB,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,oBAAoB,CAAS;gBAEzB,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,oBAAoB,SAAK;IAO7E;;;;OAIG;IACG,MAAM,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAiB7F;;;;OAIG;IACG,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,aAAa,SAAK,EAAE,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAqCvH,OAAO,CAAC,cAAc;YAuBR,cAAc;IAkE5B,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,SAAS;CAmBlB"}
@@ -0,0 +1,170 @@
1
+ import fs from 'fs';
2
+ import yaml from 'js-yaml';
3
+ import { logger } from '../utils/logger.js';
4
+ import { PatternLoader } from './pattern-loader.js';
5
+ /**
6
+ * PatternEvolver:从执行历史学习,用 AI 优化 Pattern YAML。
7
+ * 触发条件:定时(evolve_interval_days)或阈值(evolve_min_executions)。
8
+ */
9
+ export class PatternEvolver {
10
+ api;
11
+ storage;
12
+ loader;
13
+ defaultMinExecutions;
14
+ constructor(api, storage, defaultMinExecutions = 20) {
15
+ this.api = api;
16
+ this.storage = storage;
17
+ this.loader = new PatternLoader();
18
+ this.defaultMinExecutions = defaultMinExecutions;
19
+ }
20
+ /**
21
+ * 对所有 Pattern 执行自进化。
22
+ * 返回每个实际被优化的 Pattern 的进化报告。
23
+ * convention 参数可选,传入时约束所有 Pattern 的进化不得违反其 must 级规则。
24
+ */
25
+ async evolve(minExecutions, convention) {
26
+ const threshold = minExecutions ?? this.defaultMinExecutions;
27
+ const patterns = this.loader.loadAll();
28
+ const results = [];
29
+ for (const pattern of patterns) {
30
+ try {
31
+ const result = await this.evolvePattern(pattern, threshold, convention);
32
+ if (result)
33
+ results.push(result);
34
+ }
35
+ catch (err) {
36
+ logger.warn(`[Pattern进化器] ${pattern.id} 进化失败:${err}`);
37
+ }
38
+ }
39
+ return results;
40
+ }
41
+ /**
42
+ * 对单个 Pattern 执行自进化。
43
+ * 执行次数不足时跳过,返回 null。
44
+ * convention 参数可选,传入时 AI 优化不得违反其 must 级质量标准。
45
+ */
46
+ async evolvePattern(pattern, minExecutions = 20, convention) {
47
+ const executions = this.storage.queryPatternExecutions(pattern.id, 50);
48
+ if (executions.length < minExecutions) {
49
+ logger.info(`[Pattern进化器] ${pattern.id} 执行次数不足(${executions.length}/${minExecutions}),跳过`);
50
+ return null;
51
+ }
52
+ const metrics = this.computeMetrics(executions);
53
+ const problemPhases = metrics.filter((m) => m.completed / m.total < 0.6 || m.avgSatisfaction < 0);
54
+ if (problemPhases.length === 0) {
55
+ logger.info(`[Pattern进化器] ${pattern.id} 各阶段健康,无需优化`);
56
+ return null;
57
+ }
58
+ logger.info(`[Pattern进化器] ${pattern.id} 发现 ${problemPhases.length} 个问题阶段,启动 AI 优化`);
59
+ const optimized = await this.optimizeWithAI(pattern, metrics, problemPhases, convention);
60
+ if (!optimized)
61
+ return null;
62
+ const previousVersion = pattern.version;
63
+ const newVersion = this.bumpVersion(pattern.version);
64
+ optimized.version = newVersion;
65
+ this.writeBack(pattern, optimized);
66
+ const changes = problemPhases.map((m) => `阶段 ${m.phaseId} 完成率 ${((m.completed / m.total) * 100).toFixed(0)}% → 已优化`);
67
+ logger.info(`[Pattern进化器] ${pattern.id} 进化完成 v${previousVersion} → v${newVersion}`);
68
+ return { patternId: pattern.id, previousVersion, newVersion, changes };
69
+ }
70
+ // ── 私有方法 ──────────────────────────────────────────────────────────────
71
+ computeMetrics(executions) {
72
+ const byPhase = new Map();
73
+ for (const e of executions) {
74
+ const list = byPhase.get(e.phase_id) ?? [];
75
+ list.push(e);
76
+ byPhase.set(e.phase_id, list);
77
+ }
78
+ const metrics = [];
79
+ for (const [phaseId, records] of byPhase) {
80
+ const completed = records.filter((r) => r.status === 'completed').length;
81
+ const failed = records.filter((r) => r.status === 'failed').length;
82
+ const durations = records.filter((r) => r.duration_ms != null).map((r) => r.duration_ms);
83
+ const avgDurationMs = durations.length > 0 ? durations.reduce((a, b) => a + b, 0) / durations.length : 0;
84
+ const satisfactions = records.filter((r) => r.user_satisfaction != null).map((r) => r.user_satisfaction);
85
+ const avgSatisfaction = satisfactions.length > 0 ? satisfactions.reduce((a, b) => a + b, 0) / satisfactions.length : 0;
86
+ metrics.push({ phaseId, total: records.length, completed, failed, avgDurationMs, avgSatisfaction });
87
+ }
88
+ return metrics;
89
+ }
90
+ async optimizeWithAI(pattern, allMetrics, problemPhases, convention) {
91
+ const metricsText = allMetrics.map((m) => ` ${m.phaseId}: 完成率=${((m.completed / m.total) * 100).toFixed(0)}% 失败=${m.failed} ` +
92
+ `平均耗时=${(m.avgDurationMs / 1000).toFixed(1)}s 满意度=${m.avgSatisfaction.toFixed(2)}`).join('\n');
93
+ const problemText = problemPhases.map((m) => m.phaseId).join(', ');
94
+ const currentYaml = yaml.dump({
95
+ id: pattern.id,
96
+ name: pattern.name,
97
+ version: pattern.version,
98
+ description: pattern.description,
99
+ trigger: pattern.trigger,
100
+ phases: pattern.phases,
101
+ evolution: pattern.evolution,
102
+ });
103
+ const mustRules = convention?.quality_standards?.filter((s) => s.severity === 'must') ?? [];
104
+ const conventionSection = mustRules.length > 0
105
+ ? `\n## Convention 约束(${convention.name},不得违反)\n` +
106
+ mustRules.map((r) => `- [${r.category}] ${r.rule}`).join('\n') + '\n'
107
+ : '';
108
+ const prompt = `你是一个 Pattern 进化专家。根据执行数据,优化以下工作流 Pattern 的问题阶段。
109
+
110
+ ## 执行指标
111
+ ${metricsText}
112
+
113
+ ## 问题阶段
114
+ ${problemText}
115
+
116
+ ## 当前 Pattern YAML
117
+ \`\`\`yaml
118
+ ${currentYaml}
119
+ \`\`\`
120
+ ${conventionSection}
121
+ ## 优化任务
122
+ 针对问题阶段(完成率<60% 或用户满意度<0),优化其 prompt_template 或 tools_allowed:
123
+ - 让 prompt 更具体、可执行
124
+ - 减少模糊指令
125
+ - 确保 completion_signal 合理${mustRules.length > 0 ? '\n- 优化后的 prompt_template 必须符合上方 Convention 约束,不得与 must 级规则冲突' : ''}
126
+
127
+ ## 输出格式
128
+ 输出完整优化后的 YAML(与输入格式一致),无其他文字。`;
129
+ try {
130
+ const response = await this.api.complete(prompt, 'pattern-evolver', 0, 60_000);
131
+ const yamlMatch = response.match(/```yaml\n([\s\S]*?)```/) ?? response.match(/^([\s\S]+)$/);
132
+ if (!yamlMatch)
133
+ return null;
134
+ const parsed = yaml.load(yamlMatch[1]);
135
+ if (!parsed?.id || !parsed?.phases)
136
+ return null;
137
+ return parsed;
138
+ }
139
+ catch (err) {
140
+ logger.warn(`[Pattern进化器] AI 优化失败:${err}`);
141
+ return null;
142
+ }
143
+ }
144
+ bumpVersion(version) {
145
+ const parts = version.split('.');
146
+ if (parts.length >= 2) {
147
+ const minor = parseFloat(parts[1] ?? '0') + 1;
148
+ return `${parts[0]}.${minor}`;
149
+ }
150
+ return `${version}.1`;
151
+ }
152
+ writeBack(original, optimized) {
153
+ if (!original.filePath) {
154
+ logger.warn(`[Pattern进化器] ${original.id} 无文件路径,跳过写回`);
155
+ return;
156
+ }
157
+ const toWrite = yaml.dump({
158
+ id: optimized.id,
159
+ name: optimized.name,
160
+ version: optimized.version,
161
+ description: optimized.description,
162
+ source: original.source,
163
+ trigger: optimized.trigger,
164
+ phases: optimized.phases,
165
+ evolution: optimized.evolution,
166
+ }, { lineWidth: 120 });
167
+ fs.writeFileSync(original.filePath, toWrite, 'utf-8');
168
+ }
169
+ }
170
+ //# sourceMappingURL=pattern-evolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pattern-evolver.js","sourceRoot":"","sources":["../../src/pattern-engine/pattern-evolver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import type { Pattern, ExecutionPlan, PatternContext } from './types.js';
2
+ import type { Convention } from '../convention/types.js';
3
+ /**
4
+ * PatternExecutor:将匹配到的 Pattern 展开为 ExecutionPlan,
5
+ * 渲染当前阶段的 prompt_template,生成注入给 Claude 的 additionalContext。
6
+ *
7
+ * 职责边界:
8
+ * - 创建和管理内存中的 ExecutionPlan(持久化由 ExecutionTracer 负责)
9
+ * - 模板渲染
10
+ * - 生成 PatternContext 供 UserPromptHandler 注入
11
+ *
12
+ * 不负责:AI 调用、SQLite 写入、状态机推进
13
+ */
14
+ export declare class PatternExecutor {
15
+ /** 按 projectPath 存储当前活跃的执行计划(每个项目同时只有一个) */
16
+ private activePlans;
17
+ /**
18
+ * 为指定项目启动一个新的执行计划。
19
+ * 若该项目已有活跃计划,先清除(不支持并发 Pattern 执行)。
20
+ */
21
+ startPlan(pattern: Pattern, sessionId: string, projectPath: string): ExecutionPlan;
22
+ /**
23
+ * 生成当前活跃阶段的 PatternContext(含渲染后的 prompt)。
24
+ * 返回 null 表示无活跃计划或当前阶段已执行完毕。
25
+ */
26
+ execute(pattern: Pattern, plan: ExecutionPlan, requirement: string): PatternContext | null;
27
+ /**
28
+ * 将指定阶段标记为已完成,并推进到下一个可执行阶段。
29
+ * 供 ExecutionTracer 在检测到 completion_signal 时调用。
30
+ *
31
+ * @returns 下一个阶段 ID,null 表示整个 Pattern 已执行完毕
32
+ */
33
+ advancePhase(projectPath: string, completedPhaseId: string, phaseOutput: string, pattern: Pattern): string | null;
34
+ /** 获取项目当前活跃计划(不存在则返回 null) */
35
+ getActivePlan(projectPath: string): ExecutionPlan | null;
36
+ /** 清除项目的活跃计划(Pattern 完成或被中断时调用) */
37
+ clearPlan(projectPath: string): void;
38
+ /** 构建注入给 Claude 的 additionalContext 字符串,可选传入 Convention 以注入角色约束 */
39
+ buildAdditionalContext(patternCtx: PatternContext, pattern: Pattern, convention?: Convention | null): string;
40
+ /** 检测 PostToolUse 事件是否触发了当前阶段的 completion_signal */
41
+ checkCompletionSignal(projectPath: string, toolName: string, toolInput: Record<string, unknown>, pattern: Pattern): boolean;
42
+ }
43
+ //# sourceMappingURL=pattern-executor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pattern-executor.d.ts","sourceRoot":"","sources":["../../src/pattern-engine/pattern-executor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAgB,aAAa,EAAE,cAAc,EAAoB,MAAM,YAAY,CAAC;AACzG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AA4BzD;;;;;;;;;;GAUG;AACH,qBAAa,eAAe;IAC1B,4CAA4C;IAC5C,OAAO,CAAC,WAAW,CAAoC;IAEvD;;;OAGG;IACH,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,aAAa;IA4BlF;;;OAGG;IACH,OAAO,CACL,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,aAAa,EACnB,WAAW,EAAE,MAAM,GAClB,cAAc,GAAG,IAAI;IAwBxB;;;;;OAKG;IACH,YAAY,CACV,WAAW,EAAE,MAAM,EACnB,gBAAgB,EAAE,MAAM,EACxB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,OAAO,GACf,MAAM,GAAG,IAAI;IA2BhB,8BAA8B;IAC9B,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI;IAIxD,mCAAmC;IACnC,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAKpC,mEAAmE;IACnE,sBAAsB,CAAC,UAAU,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI,GAAG,MAAM;IAkC5G,oDAAoD;IACpD,qBAAqB,CACnB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,OAAO,EAAE,OAAO,GACf,OAAO;CAqBX"}