@winspan/claude-forge 3.7.7 → 4.0.0

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 (274) hide show
  1. package/dist/autopilot/quality-gate-utils.d.ts +6 -0
  2. package/dist/autopilot/quality-gate-utils.d.ts.map +1 -0
  3. package/dist/autopilot/quality-gate-utils.js +48 -0
  4. package/dist/autopilot/quality-gate-utils.js.map +1 -0
  5. package/dist/autopilot/quality-gate.d.ts +0 -8
  6. package/dist/autopilot/quality-gate.d.ts.map +1 -1
  7. package/dist/autopilot/quality-gate.js +6 -61
  8. package/dist/autopilot/quality-gate.js.map +1 -1
  9. package/dist/cli/commands/convention.d.ts.map +1 -1
  10. package/dist/cli/commands/convention.js +1 -115
  11. package/dist/cli/commands/convention.js.map +1 -1
  12. package/dist/cli/commands/init/index.d.ts.map +1 -1
  13. package/dist/cli/commands/init/index.js +0 -14
  14. package/dist/cli/commands/init/index.js.map +1 -1
  15. package/dist/cli/commands/init/project-doctor.d.ts.map +1 -1
  16. package/dist/cli/commands/init/project-doctor.js +0 -63
  17. package/dist/cli/commands/init/project-doctor.js.map +1 -1
  18. package/dist/cli/tui.d.ts.map +1 -1
  19. package/dist/cli/tui.js +7 -131
  20. package/dist/cli/tui.js.map +1 -1
  21. package/dist/constants.d.ts +0 -6
  22. package/dist/constants.d.ts.map +1 -1
  23. package/dist/constants.js +0 -6
  24. package/dist/constants.js.map +1 -1
  25. package/dist/convention/convention-loader.js +2 -2
  26. package/dist/convention/convention-loader.js.map +1 -1
  27. package/dist/convention/convention-manager.d.ts +24 -2
  28. package/dist/convention/convention-manager.d.ts.map +1 -1
  29. package/dist/convention/convention-manager.js +62 -4
  30. package/dist/convention/convention-manager.js.map +1 -1
  31. package/dist/convention/index.d.ts +1 -2
  32. package/dist/convention/index.d.ts.map +1 -1
  33. package/dist/convention/index.js +0 -1
  34. package/dist/convention/index.js.map +1 -1
  35. package/dist/convention/types.d.ts +4 -14
  36. package/dist/convention/types.d.ts.map +1 -1
  37. package/dist/daemon/engine-registry/init-governance.d.ts +10 -0
  38. package/dist/daemon/engine-registry/init-governance.d.ts.map +1 -0
  39. package/dist/daemon/engine-registry/init-governance.js +22 -0
  40. package/dist/daemon/engine-registry/init-governance.js.map +1 -0
  41. package/dist/daemon/engine-registry.d.ts.map +1 -1
  42. package/dist/daemon/engine-registry.js +5 -6
  43. package/dist/daemon/engine-registry.js.map +1 -1
  44. package/dist/daemon/handler-context.d.ts +4 -2
  45. package/dist/daemon/handler-context.d.ts.map +1 -1
  46. package/dist/daemon/handlers/post-tool-use-handler.d.ts.map +1 -1
  47. package/dist/daemon/handlers/post-tool-use-handler.js +47 -11
  48. package/dist/daemon/handlers/post-tool-use-handler.js.map +1 -1
  49. package/dist/daemon/handlers/pre-tool-use-handler.d.ts.map +1 -1
  50. package/dist/daemon/handlers/pre-tool-use-handler.js +32 -22
  51. package/dist/daemon/handlers/pre-tool-use-handler.js.map +1 -1
  52. package/dist/daemon/handlers/session-cleanup.d.ts +0 -4
  53. package/dist/daemon/handlers/session-cleanup.d.ts.map +1 -1
  54. package/dist/daemon/handlers/session-cleanup.js +0 -81
  55. package/dist/daemon/handlers/session-cleanup.js.map +1 -1
  56. package/dist/daemon/handlers/stages/07-pipeline-reply.d.ts.map +1 -1
  57. package/dist/daemon/handlers/stages/07-pipeline-reply.js +5 -1
  58. package/dist/daemon/handlers/stages/07-pipeline-reply.js.map +1 -1
  59. package/dist/daemon/handlers/stages/09-pipeline-active.d.ts.map +1 -1
  60. package/dist/daemon/handlers/stages/09-pipeline-active.js +5 -1
  61. package/dist/daemon/handlers/stages/09-pipeline-active.js.map +1 -1
  62. package/dist/daemon/handlers/stages/13-template-route.d.ts.map +1 -1
  63. package/dist/daemon/handlers/stages/13-template-route.js +5 -1
  64. package/dist/daemon/handlers/stages/13-template-route.js.map +1 -1
  65. package/dist/daemon/handlers/stages/18-complex-task.d.ts +5 -2
  66. package/dist/daemon/handlers/stages/18-complex-task.d.ts.map +1 -1
  67. package/dist/daemon/handlers/stages/18-complex-task.js +87 -9
  68. package/dist/daemon/handlers/stages/18-complex-task.js.map +1 -1
  69. package/dist/daemon/handlers/stop-handler.d.ts.map +1 -1
  70. package/dist/daemon/handlers/stop-handler.js +1 -13
  71. package/dist/daemon/handlers/stop-handler.js.map +1 -1
  72. package/dist/daemon/index.d.ts.map +1 -1
  73. package/dist/daemon/index.js +15 -0
  74. package/dist/daemon/index.js.map +1 -1
  75. package/dist/goal/goal-classifier.d.ts.map +1 -1
  76. package/dist/goal/goal-classifier.js +12 -5
  77. package/dist/goal/goal-classifier.js.map +1 -1
  78. package/dist/goal/goal-types.d.ts +1 -3
  79. package/dist/goal/goal-types.d.ts.map +1 -1
  80. package/dist/goal/index.d.ts +1 -1
  81. package/dist/goal/index.d.ts.map +1 -1
  82. package/dist/governance/contract-builder.d.ts +39 -0
  83. package/dist/governance/contract-builder.d.ts.map +1 -0
  84. package/dist/governance/contract-builder.js +216 -0
  85. package/dist/governance/contract-builder.js.map +1 -0
  86. package/dist/governance/engine.d.ts +33 -0
  87. package/dist/governance/engine.d.ts.map +1 -0
  88. package/dist/governance/engine.js +183 -0
  89. package/dist/governance/engine.js.map +1 -0
  90. package/dist/governance/evidence-collector.d.ts +42 -0
  91. package/dist/governance/evidence-collector.d.ts.map +1 -0
  92. package/dist/governance/evidence-collector.js +136 -0
  93. package/dist/governance/evidence-collector.js.map +1 -0
  94. package/dist/governance/plugins/correction-plugin.d.ts +20 -0
  95. package/dist/governance/plugins/correction-plugin.d.ts.map +1 -0
  96. package/dist/governance/plugins/correction-plugin.js +113 -0
  97. package/dist/governance/plugins/correction-plugin.js.map +1 -0
  98. package/dist/governance/plugins/guidance-plugin.d.ts +21 -0
  99. package/dist/governance/plugins/guidance-plugin.d.ts.map +1 -0
  100. package/dist/governance/plugins/guidance-plugin.js +69 -0
  101. package/dist/governance/plugins/guidance-plugin.js.map +1 -0
  102. package/dist/governance/plugins/memory-plugin.d.ts +22 -0
  103. package/dist/governance/plugins/memory-plugin.d.ts.map +1 -0
  104. package/dist/governance/plugins/memory-plugin.js +106 -0
  105. package/dist/governance/plugins/memory-plugin.js.map +1 -0
  106. package/dist/governance/plugins/policy-plugin.d.ts +16 -0
  107. package/dist/governance/plugins/policy-plugin.d.ts.map +1 -0
  108. package/dist/governance/plugins/policy-plugin.js +69 -0
  109. package/dist/governance/plugins/policy-plugin.js.map +1 -0
  110. package/dist/governance/plugins/verification-plugin.d.ts +15 -0
  111. package/dist/governance/plugins/verification-plugin.d.ts.map +1 -0
  112. package/dist/governance/plugins/verification-plugin.js +65 -0
  113. package/dist/governance/plugins/verification-plugin.js.map +1 -0
  114. package/dist/governance/types.d.ts +202 -0
  115. package/dist/governance/types.d.ts.map +1 -0
  116. package/dist/governance/types.js +10 -0
  117. package/dist/governance/types.js.map +1 -0
  118. package/dist/pipeline/completion-engine.js +7 -7
  119. package/dist/pipeline/completion-engine.js.map +1 -1
  120. package/dist/pipeline/completion-gate.js +3 -3
  121. package/dist/pipeline/completion-gate.js.map +1 -1
  122. package/dist/pipeline/diagnosis-service.d.ts +2 -1
  123. package/dist/pipeline/diagnosis-service.d.ts.map +1 -1
  124. package/dist/pipeline/diagnosis-service.js.map +1 -1
  125. package/dist/pipeline/dynamic-node-executor.js +1 -1
  126. package/dist/pipeline/dynamic-node-executor.js.map +1 -1
  127. package/dist/pipeline/execution-engine.d.ts +1 -6
  128. package/dist/pipeline/execution-engine.d.ts.map +1 -1
  129. package/dist/pipeline/execution-engine.js +1 -1
  130. package/dist/pipeline/execution-engine.js.map +1 -1
  131. package/dist/pipeline/execution-plan.js +1 -1
  132. package/dist/pipeline/execution-plan.js.map +1 -1
  133. package/dist/pipeline/i-node-executor.d.ts +4 -0
  134. package/dist/pipeline/i-node-executor.d.ts.map +1 -1
  135. package/dist/pipeline/node-type-evolver.js +1 -1
  136. package/dist/pipeline/node-type-evolver.js.map +1 -1
  137. package/dist/pipeline/node-type-sync.d.ts.map +1 -1
  138. package/dist/pipeline/node-type-sync.js +10 -43
  139. package/dist/pipeline/node-type-sync.js.map +1 -1
  140. package/dist/pipeline/pattern-types.d.ts +3 -1
  141. package/dist/pipeline/pattern-types.d.ts.map +1 -1
  142. package/dist/retrospective/types.d.ts +2 -4
  143. package/dist/retrospective/types.d.ts.map +1 -1
  144. package/dist/skill-registry/evolver/index.js +6 -2
  145. package/dist/skill-registry/evolver/index.js.map +1 -1
  146. package/dist/skill-registry/index.d.ts +5 -0
  147. package/dist/skill-registry/index.d.ts.map +1 -1
  148. package/dist/skill-registry/index.js +6 -0
  149. package/dist/skill-registry/index.js.map +1 -1
  150. package/dist/storage/repositories/dynamic-pipeline-repository.d.ts.map +1 -1
  151. package/dist/storage/repositories/dynamic-pipeline-repository.js +18 -6
  152. package/dist/storage/repositories/dynamic-pipeline-repository.js.map +1 -1
  153. package/dist/storage/repositories/node-attempt-repository.d.ts +1 -1
  154. package/dist/storage/repositories/node-attempt-repository.d.ts.map +1 -1
  155. package/dist/storage/repositories/node-attempt-repository.js +1 -1
  156. package/dist/storage/repositories/node-attempt-repository.js.map +1 -1
  157. package/dist/storage/repositories/pipeline-plan-repository.d.ts.map +1 -1
  158. package/dist/storage/repositories/pipeline-plan-repository.js +1 -1
  159. package/dist/storage/repositories/pipeline-plan-repository.js.map +1 -1
  160. package/dist/storage/repositories/template-evolution-repository.d.ts.map +1 -1
  161. package/dist/storage/repositories/template-evolution-repository.js.map +1 -1
  162. package/dist/web/routes/pipelines.d.ts.map +1 -1
  163. package/dist/web/routes/pipelines.js +16 -5
  164. package/dist/web/routes/pipelines.js.map +1 -1
  165. package/dist/web/routes/quality.d.ts.map +1 -1
  166. package/dist/web/routes/quality.js +18 -17
  167. package/dist/web/routes/quality.js.map +1 -1
  168. package/dist/web/server.d.ts.map +1 -1
  169. package/dist/web/server.js +0 -7
  170. package/dist/web/server.js.map +1 -1
  171. package/dist/web/sse-broadcaster.d.ts +1 -1
  172. package/dist/web/sse-broadcaster.d.ts.map +1 -1
  173. package/dist/web/sse-broadcaster.js.map +1 -1
  174. package/dist/web-static/assets/Analytics-Bo_OyY9A.js +36 -0
  175. package/dist/web-static/assets/BatchProgress-qW-6664M.js +1 -0
  176. package/dist/web-static/assets/Breadcrumb-C1Mua6se.js +1 -0
  177. package/dist/web-static/assets/Config-Dn-dtdo9.js +1 -0
  178. package/dist/web-static/assets/ConfirmDialog-bdDaAlT1.js +1 -0
  179. package/dist/web-static/assets/Conventions-ByV7r45c.js +1 -0
  180. package/dist/web-static/assets/Dashboard-C-7N8kYZ.js +1 -0
  181. package/dist/web-static/assets/ErrorState-CMLoMrQY.js +1 -0
  182. package/dist/web-static/assets/Events-DHuyQHQe.js +1 -0
  183. package/dist/web-static/assets/Evolution-Dzr5xOLD.js +1 -0
  184. package/dist/web-static/assets/Knowledge-ClwX4cnr.js +2 -0
  185. package/dist/web-static/assets/MiniCharts-DsV2Sqfk.js +1 -0
  186. package/dist/web-static/assets/NodeTypes-DFt8b5gi.js +1 -0
  187. package/dist/web-static/assets/Pagination-CR-eJz36.js +1 -0
  188. package/dist/web-static/assets/PipelineDetail-By1HJlaB.js +4 -0
  189. package/dist/web-static/assets/Pipelines--MGzCPtR.js +2 -0
  190. package/dist/web-static/assets/ProjectDetail-CrpekCeY.js +1 -0
  191. package/dist/web-static/assets/Projects-Dw1qYmjz.js +1 -0
  192. package/dist/web-static/assets/Quality-CYwODfQP.js +3 -0
  193. package/dist/web-static/assets/SessionDetail-c8MYnwnk.js +1 -0
  194. package/dist/web-static/assets/Sessions-BkDd4Mxb.js +2 -0
  195. package/dist/web-static/assets/Skeleton-DbL04wuz.js +1 -0
  196. package/dist/web-static/assets/Skills-2OPSAnaU.js +1 -0
  197. package/dist/web-static/assets/TemplateDetail-DbifRj4h.js +1 -0
  198. package/dist/web-static/assets/Templates-CDw-GGp8.js +1 -0
  199. package/dist/web-static/assets/Toast-CrwuIbKC.js +1 -0
  200. package/dist/web-static/assets/client-C_VWY70M.js +1 -0
  201. package/dist/web-static/assets/index-DD2Z15TY.css +2 -0
  202. package/dist/web-static/assets/index-DR3AaQnu.js +2 -0
  203. package/dist/web-static/assets/ui-DpI1N3yJ.js +1 -0
  204. package/dist/web-static/assets/useDebounce-BLryFdeo.js +1 -0
  205. package/dist/web-static/assets/vendor-2ObLXPrQ.js +9 -0
  206. package/dist/web-static/assets/vendor-motion-BryL_tAt.js +9 -0
  207. package/dist/web-static/assets/vendor-query-CjmRaY7o.js +4 -0
  208. package/dist/web-static/assets/vendor-react-DZi7brq3.js +11 -0
  209. package/dist/web-static/index.html +10 -13
  210. package/package.json +4 -8
  211. package/dist/convention/convention-distiller.d.ts +0 -28
  212. package/dist/convention/convention-distiller.d.ts.map +0 -1
  213. package/dist/convention/convention-distiller.js +0 -172
  214. package/dist/convention/convention-distiller.js.map +0 -1
  215. package/dist/convention/official-sync.d.ts +0 -21
  216. package/dist/convention/official-sync.d.ts.map +0 -1
  217. package/dist/convention/official-sync.js +0 -196
  218. package/dist/convention/official-sync.js.map +0 -1
  219. package/dist/daemon/handlers/stages/19-moderate-task.d.ts +0 -11
  220. package/dist/daemon/handlers/stages/19-moderate-task.d.ts.map +0 -1
  221. package/dist/daemon/handlers/stages/19-moderate-task.js +0 -78
  222. package/dist/daemon/handlers/stages/19-moderate-task.js.map +0 -1
  223. package/dist/web/routes/conventions.d.ts +0 -8
  224. package/dist/web/routes/conventions.d.ts.map +0 -1
  225. package/dist/web/routes/conventions.js +0 -308
  226. package/dist/web/routes/conventions.js.map +0 -1
  227. package/dist/web/routes/logs.d.ts +0 -4
  228. package/dist/web/routes/logs.d.ts.map +0 -1
  229. package/dist/web/routes/logs.js +0 -77
  230. package/dist/web/routes/logs.js.map +0 -1
  231. package/dist/web/routes/project-conventions.d.ts +0 -7
  232. package/dist/web/routes/project-conventions.d.ts.map +0 -1
  233. package/dist/web/routes/project-conventions.js +0 -145
  234. package/dist/web/routes/project-conventions.js.map +0 -1
  235. package/dist/web-static/assets/Analytics-txva5ugO.js +0 -1
  236. package/dist/web-static/assets/BatchProgress-BQ533tSf.js +0 -1
  237. package/dist/web-static/assets/Breadcrumb-DtfwnOx6.js +0 -1
  238. package/dist/web-static/assets/Config-CUb6-ddH.js +0 -1
  239. package/dist/web-static/assets/ConfirmDialog-BKfwMp04.js +0 -1
  240. package/dist/web-static/assets/Conventions-E_2yAYoB.js +0 -1
  241. package/dist/web-static/assets/Dashboard-Dskgf0jG.js +0 -1
  242. package/dist/web-static/assets/ErrorState-BOInXmfg.js +0 -1
  243. package/dist/web-static/assets/Events-CAY9kU9T.js +0 -1
  244. package/dist/web-static/assets/Evolution-Ck_BqRpt.js +0 -1
  245. package/dist/web-static/assets/Knowledge-BHLyFp2U.js +0 -2
  246. package/dist/web-static/assets/NodeTypes-B6wc7VnR.js +0 -1
  247. package/dist/web-static/assets/Pagination-lp8b_3NR.js +0 -1
  248. package/dist/web-static/assets/PipelineDetail-Bc6l2jqX.js +0 -4
  249. package/dist/web-static/assets/PipelineTemplates-sSL-9oRh.js +0 -1
  250. package/dist/web-static/assets/Pipelines-Drat9IqZ.js +0 -2
  251. package/dist/web-static/assets/ProjectDetail-Cx8VZp8O.js +0 -1
  252. package/dist/web-static/assets/Projects-qDolX6Y6.js +0 -1
  253. package/dist/web-static/assets/Quality-Bm7oRSun.js +0 -3
  254. package/dist/web-static/assets/SessionDetail-BMrqH8_W.js +0 -1
  255. package/dist/web-static/assets/Sessions-C0BmdDPK.js +0 -2
  256. package/dist/web-static/assets/Skeleton-B7PVDJJ_.js +0 -1
  257. package/dist/web-static/assets/Skills-B3c1_uFt.js +0 -1
  258. package/dist/web-static/assets/TemplateDetail-ep5h3Cu5.js +0 -1
  259. package/dist/web-static/assets/Templates-Dho__f4l.js +0 -1
  260. package/dist/web-static/assets/Toast-BbB3oD2a.js +0 -1
  261. package/dist/web-static/assets/client-BvVpIixG.js +0 -1
  262. package/dist/web-static/assets/index-CgfiGhyE.js +0 -2
  263. package/dist/web-static/assets/index-CqwJts5v.css +0 -2
  264. package/dist/web-static/assets/ui-CDL3BZ13.js +0 -1
  265. package/dist/web-static/assets/useDebounce-DNfPs3Tv.js +0 -1
  266. package/dist/web-static/assets/vendor-DRGPi8ui.js +0 -9
  267. package/dist/web-static/assets/vendor-charts-9eVsQvUV.js +0 -36
  268. package/dist/web-static/assets/vendor-editor-CYLOGES5.js +0 -11
  269. package/dist/web-static/assets/vendor-flow-CHpVij2M.css +0 -1
  270. package/dist/web-static/assets/vendor-flow-srkes8If.js +0 -7
  271. package/dist/web-static/assets/vendor-motion-CQmdgnI8.js +0 -9
  272. package/dist/web-static/assets/vendor-query-DqPOMnuX.js +0 -4
  273. package/dist/web-static/assets/vendor-react-DJI9oneq.js +0 -11
  274. /package/dist/web-static/assets/{exportCsv-Dm5Y5M_E.js → exportCsv-CO51kx6P.js} +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@winspan/claude-forge",
3
- "version": "3.7.7",
3
+ "version": "4.0.0",
4
4
  "description": "SDLC intelligent orchestration engine for Claude Code",
5
5
  "main": "dist/cli/index.js",
6
6
  "type": "module",
@@ -55,16 +55,18 @@
55
55
  "@tailwindcss/vite": "^4.2.2",
56
56
  "@tanstack/react-query": "^5.99.1",
57
57
  "@types/better-sqlite3": "^7.6.13",
58
+ "@types/cors": "^2.8.19",
59
+ "@types/express": "^5.0.6",
58
60
  "@types/js-yaml": "^4.0.9",
59
61
  "@types/node": "^25.5.0",
60
62
  "@types/react": "^19.2.14",
61
63
  "@types/react-dom": "^19.2.3",
64
+ "@types/uuid": "^10.0.0",
62
65
  "@typescript-eslint/eslint-plugin": "^8.58.0",
63
66
  "@typescript-eslint/parser": "^8.58.0",
64
67
  "@vitejs/plugin-react": "^6.0.1",
65
68
  "axios": "^1.15.0",
66
69
  "clsx": "^2.1.1",
67
- "dagre": "^0.8.5",
68
70
  "date-fns": "^4.1.0",
69
71
  "eslint": "^10.1.0",
70
72
  "eslint-config-prettier": "^10.1.8",
@@ -74,7 +76,6 @@
74
76
  "react": "^19.2.5",
75
77
  "react-dom": "^19.2.5",
76
78
  "react-router-dom": "^7.14.1",
77
- "reactflow": "^11.11.4",
78
79
  "recharts": "^3.8.1",
79
80
  "tailwind-merge": "^3.5.0",
80
81
  "tailwindcss": "^4.2.2",
@@ -85,12 +86,7 @@
85
86
  },
86
87
  "dependencies": {
87
88
  "@anthropic-ai/sdk": "^0.82.0",
88
- "@monaco-editor/react": "^4.7.0",
89
89
  "@tanstack/react-virtual": "^3.13.24",
90
- "@types/cors": "^2.8.19",
91
- "@types/express": "^5.0.6",
92
- "@types/uuid": "^10.0.0",
93
- "@xyflow/react": "^12.10.2",
94
90
  "better-sqlite3": "^12.8.0",
95
91
  "chalk": "^5.6.2",
96
92
  "commander": "^14.0.3",
@@ -1,28 +0,0 @@
1
- import type { AIProvider } from '../ai/types.js';
2
- import type { ConventionLoader } from './convention-loader.js';
3
- import type { Convention, ConventionDistillResult } from './types.js';
4
- import type { ProjectProfile } from '../claudemd/detector.js';
5
- export declare class ConventionDistiller {
6
- private api;
7
- private loader;
8
- constructor(api: AIProvider, loader: ConventionLoader);
9
- static customId(projectPath: string): string;
10
- static customFilePath(projectPath: string): string;
11
- /**
12
- * 蒸馏项目级自定义规范。
13
- * - sourceConventions 为空时,根据 projectProfile 纯技术栈生成
14
- * - sourceConventions 非空时,合并源规范(同时可融合技术栈信息)
15
- * - existingCustom 存在时为增量合并,否则全量生成
16
- */
17
- distill(projectPath: string, sourceConventions: Convention[], existingCustom?: Convention | null, projectProfile?: ProjectProfile | null): Promise<{
18
- convention: Convention;
19
- result: ConventionDistillResult;
20
- }>;
21
- private mergeWithAI;
22
- private parseAIResponse;
23
- private fallbackMerge;
24
- private fallbackPrinciples;
25
- private mergeRoles;
26
- private bumpVersion;
27
- }
28
- //# sourceMappingURL=convention-distiller.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"convention-distiller.d.ts","sourceRoot":"","sources":["../../src/convention/convention-distiller.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAkB,uBAAuB,EAAE,MAAM,YAAY,CAAC;AACtF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAU9D,qBAAa,mBAAmB;IAClB,OAAO,CAAC,GAAG;IAAc,OAAO,CAAC,MAAM;gBAA/B,GAAG,EAAE,UAAU,EAAU,MAAM,EAAE,gBAAgB;IAErE,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAI5C,MAAM,CAAC,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAIlD;;;;;OAKG;IACG,OAAO,CACX,WAAW,EAAE,MAAM,EACnB,iBAAiB,EAAE,UAAU,EAAE,EAC/B,cAAc,CAAC,EAAE,UAAU,GAAG,IAAI,EAClC,cAAc,CAAC,EAAE,cAAc,GAAG,IAAI,GACrC,OAAO,CAAC;QAAE,UAAU,EAAE,UAAU,CAAC;QAAC,MAAM,EAAE,uBAAuB,CAAA;KAAE,CAAC;YAuDzD,WAAW;IAoDzB,OAAO,CAAC,eAAe;IAyBvB,OAAO,CAAC,aAAa;IAmBrB,OAAO,CAAC,kBAAkB;IAK1B,OAAO,CAAC,UAAU;IAelB,OAAO,CAAC,WAAW;CAQpB"}
@@ -1,172 +0,0 @@
1
- import fs from 'fs';
2
- import path from 'path';
3
- import yaml from 'js-yaml';
4
- import { logger } from '../utils/logger.js';
5
- export class ConventionDistiller {
6
- api;
7
- loader;
8
- constructor(api, loader) {
9
- this.api = api;
10
- this.loader = loader;
11
- }
12
- static customId(projectPath) {
13
- return `custom-${path.basename(projectPath)}`;
14
- }
15
- static customFilePath(projectPath) {
16
- return path.join(projectPath, '.claude-forge', 'custom-convention.yaml');
17
- }
18
- /**
19
- * 蒸馏项目级自定义规范。
20
- * - sourceConventions 为空时,根据 projectProfile 纯技术栈生成
21
- * - sourceConventions 非空时,合并源规范(同时可融合技术栈信息)
22
- * - existingCustom 存在时为增量合并,否则全量生成
23
- */
24
- async distill(projectPath, sourceConventions, existingCustom, projectProfile) {
25
- if (sourceConventions.length === 0 && !projectProfile) {
26
- throw new Error('至少需要一个源规范或项目技术栈信息才能蒸馏');
27
- }
28
- const customId = ConventionDistiller.customId(projectPath);
29
- const filePath = ConventionDistiller.customFilePath(projectPath);
30
- const aiResult = await this.mergeWithAI(sourceConventions, existingCustom ?? null, projectProfile ?? null);
31
- const previousVersion = existingCustom?.version ?? null;
32
- const newVersion = existingCustom
33
- ? this.bumpVersion(existingCustom.version)
34
- : '1.0.0';
35
- const mergedRoles = this.mergeRoles(existingCustom?.roles ?? {}, [aiResult.new_roles]);
36
- const description = sourceConventions.length > 0
37
- ? `从 ${sourceConventions.map((c) => c.name).join('、')} 蒸馏的项目级综合规范`
38
- : `根据 ${path.basename(projectPath)} 项目技术栈自动生成的规范`;
39
- const convention = {
40
- id: customId,
41
- name: `${path.basename(projectPath)} 综合规范`,
42
- version: newVersion,
43
- description,
44
- source: 'user',
45
- principles: aiResult.principles,
46
- active_prompt: aiResult.active_prompt,
47
- roles: mergedRoles,
48
- quality_standards: aiResult.quality_standards,
49
- evolution: { auto_optimize: true, optimize_interval_days: 7 },
50
- filePath,
51
- };
52
- const dir = path.dirname(filePath);
53
- if (!fs.existsSync(dir))
54
- fs.mkdirSync(dir, { recursive: true });
55
- const { filePath: _fp, ...serializable } = convention;
56
- fs.writeFileSync(filePath, yaml.dump(serializable, { lineWidth: 120, noRefs: true }), 'utf-8');
57
- logger.info(`[规范蒸馏器] 已写入 ${filePath} v${newVersion}`);
58
- const distillResult = {
59
- customConventionId: customId,
60
- previousVersion,
61
- newVersion,
62
- sourcesUsed: sourceConventions.map((c) => c.id),
63
- changes: aiResult.changes,
64
- };
65
- return { convention, result: distillResult };
66
- }
67
- async mergeWithAI(sources, existing, profile) {
68
- const taskType = existing ? '增量合并' : (sources.length > 0 ? '全量提炼' : '技术栈生成');
69
- const profileSection = profile
70
- ? `## 项目技术栈\n语言:${profile.languages.map((l) => l.name + (l.version ? ` ${l.version}` : '')).join('、') || '未知'}\n框架:${profile.frameworks.map((f) => f.name).join('、') || '无'}\n\n`
71
- : '';
72
- const sourceSections = sources.length > 0
73
- ? `## 源规范\n\n${sources.map((c) => {
74
- const rolesYaml = Object.entries(c.roles)
75
- .map(([k, v]) => ` ${k}:\n name: ${v.name}\n responsibilities: ${v.responsibilities.slice(0, 120)}\n constraints: ${v.constraints.slice(0, 80)}`)
76
- .join('\n');
77
- const standards = c.quality_standards
78
- .map((s) => ` - [${s.severity}] ${s.category}: ${s.rule}`)
79
- .join('\n');
80
- return `### ${c.name} (${c.id})\n原则摘要:${c.principles.slice(0, 300)}\n激活提示:${c.active_prompt.slice(0, 200)}\n角色:\n${rolesYaml || ' (无)'}\n质量标准:\n${standards || ' (无)'}`;
81
- }).join('\n\n')}\n\n`
82
- : '';
83
- const existingSection = existing
84
- ? `## 现有自定义规范(增量合并基础)\n原则:${existing.principles.slice(0, 400)}\n激活提示:${existing.active_prompt.slice(0, 200)}\n质量标准数:${existing.quality_standards.length}\n角色数:${Object.keys(existing.roles).length}\n\n`
85
- : '';
86
- const prompt = `你是一个工程规范专家,负责为项目生成或更新开发规范。
87
-
88
- ## 任务类型:${taskType}
89
-
90
- ${profileSection}${existingSection}${sourceSections}## 生成规则
91
- 1. principles:针对项目技术栈提炼最关键的工程原则,具体可执行;若有源规范则融合其核心优势,冲突时生成"视上下文而定"的折中原则
92
- 2. active_prompt:综合技术栈特点和规范要求,简洁有力,不超过 200 字
93
- 3. quality_standards:覆盖代码质量、架构、测试、安全等维度,去重;severity 按重要性设定
94
- 4. new_roles:定义项目适合的角色(如 architect、developer、reviewer),若为增量则只返回新增角色
95
- 5. changes:列出本次生成/合并的关键点(3-8 条)
96
- ${existing ? '6. 增量模式:只在现有基础上追加/优化,不删除现有内容' : ''}
97
-
98
- ## 输出格式(严格 JSON,不要用代码块包裹)
99
- {
100
- "principles": "...",
101
- "active_prompt": "...",
102
- "quality_standards": [{"category": "...", "rule": "...", "severity": "must|should|may"}],
103
- "new_roles": {},
104
- "changes": ["..."]
105
- }`;
106
- const response = await this.api.complete(prompt, 'convention-distill');
107
- return this.parseAIResponse(response, sources, existing);
108
- }
109
- parseAIResponse(response, sources, existing) {
110
- try {
111
- const cleaned = response.replace(/```(?:json)?\s*/g, '').replace(/```\s*/g, '').trim();
112
- const jsonMatch = cleaned.match(/\{[\s\S]*\}/);
113
- if (!jsonMatch)
114
- throw new Error('未找到 JSON');
115
- const parsed = JSON.parse(jsonMatch[0]);
116
- return {
117
- principles: parsed.principles ?? this.fallbackPrinciples(sources),
118
- active_prompt: parsed.active_prompt ?? (sources[0]?.active_prompt ?? '请遵循项目规范进行开发'),
119
- quality_standards: Array.isArray(parsed.quality_standards) ? parsed.quality_standards : [],
120
- new_roles: parsed.new_roles && typeof parsed.new_roles === 'object' ? parsed.new_roles : {},
121
- changes: Array.isArray(parsed.changes) ? parsed.changes : ['AI 蒸馏完成'],
122
- };
123
- }
124
- catch (err) {
125
- logger.warn(`[规范蒸馏器] AI 响应解析失败,使用降级策略:${err}`);
126
- return this.fallbackMerge(sources, existing);
127
- }
128
- }
129
- fallbackMerge(sources, existing) {
130
- const allStandards = sources.flatMap((c) => c.quality_standards);
131
- const seen = new Set();
132
- const deduped = allStandards.filter((s) => {
133
- const key = `${s.category}:${s.rule}`;
134
- if (seen.has(key))
135
- return false;
136
- seen.add(key);
137
- return true;
138
- });
139
- return {
140
- principles: existing?.principles ?? this.fallbackPrinciples(sources),
141
- active_prompt: existing?.active_prompt ?? (sources[0]?.active_prompt ?? '请遵循项目规范进行开发'),
142
- quality_standards: deduped,
143
- new_roles: {},
144
- changes: ['降级合并:AI 调用失败,使用规则合并'],
145
- };
146
- }
147
- fallbackPrinciples(sources) {
148
- if (sources.length === 0)
149
- return '遵循项目技术栈最佳实践';
150
- return sources.map((c) => `## 来自 ${c.name}\n${c.principles.slice(0, 200)}`).join('\n\n');
151
- }
152
- mergeRoles(existing, incomingList) {
153
- const merged = { ...existing };
154
- for (const incoming of incomingList) {
155
- for (const [key, role] of Object.entries(incoming)) {
156
- if (!merged[key]) {
157
- merged[key] = role;
158
- }
159
- }
160
- }
161
- return merged;
162
- }
163
- bumpVersion(version) {
164
- const parts = version.split('.').map(Number);
165
- if (parts.length >= 2 && !isNaN(parts[1])) {
166
- parts[1] += 1;
167
- return parts.join('.');
168
- }
169
- return version + '.1';
170
- }
171
- }
172
- //# sourceMappingURL=convention-distiller.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"convention-distiller.js","sourceRoot":"","sources":["../../src/convention/convention-distiller.ts"],"names":[],"mappings":"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"}
@@ -1,21 +0,0 @@
1
- import { ConventionLoader } from './convention-loader.js';
2
- export interface ConventionSyncReport {
3
- added: string[];
4
- updated: string[];
5
- skipped: string[];
6
- }
7
- export declare class OfficialConventionSync {
8
- private loader;
9
- constructor(loader?: ConventionLoader);
10
- /**
11
- * 同步官方 Convention 到 ~/.claude-forge/conventions/
12
- * 版本号变更时自动更新,已存在的更高版本跳过(尊重进化器产出)
13
- */
14
- sync(): ConventionSyncReport;
15
- /** 获取所有官方 Convention ID */
16
- getOfficialIds(): string[];
17
- private writeConvention;
18
- /** 版本号比较:a >= b */
19
- private versionGte;
20
- }
21
- //# sourceMappingURL=official-sync.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"official-sync.d.ts","sourceRoot":"","sources":["../../src/convention/official-sync.ts"],"names":[],"mappings":"AAGA,OAAO,EAAmB,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAqJ3E,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,qBAAa,sBAAsB;IACjC,OAAO,CAAC,MAAM,CAAmB;gBAErB,MAAM,CAAC,EAAE,gBAAgB;IAIrC;;;OAGG;IACH,IAAI,IAAI,oBAAoB;IAmC5B,2BAA2B;IAC3B,cAAc,IAAI,MAAM,EAAE;IAI1B,OAAO,CAAC,eAAe;IAKvB,mBAAmB;IACnB,OAAO,CAAC,UAAU;CAWnB"}
@@ -1,196 +0,0 @@
1
- import fs from 'fs';
2
- import path from 'path';
3
- import yaml from 'js-yaml';
4
- import { CONVENTIONS_DIR, ConventionLoader } from './convention-loader.js';
5
- import { logger } from '../utils/logger.js';
6
- /**
7
- * 内置官方 Convention — daemon 启动时自动同步到 ~/.claude-forge/conventions/
8
- * 版本号变更时自动更新,尊重进化器产出的更高版本
9
- */
10
- const OFFICIAL_CONVENTIONS = [
11
- {
12
- id: 'official-bmad',
13
- version: '1.0.0',
14
- data: {
15
- id: 'official-bmad',
16
- name: 'BMad 敏捷开发规范',
17
- version: '1.0.0',
18
- description: 'BMad 敏捷方法论:角色驱动、流程规范的全栈开发工作流',
19
- source: 'official',
20
- principles: `## 来自 BMad 敏捷开发规范
21
- 本项目遵循 BMad 敏捷开发规范,所有功能开发必须按以下原则执行:
22
-
23
- ### 角色体系
24
- - **产品经理(product_manager)**:负责需求分析和产品规格,输出用户故事和验收标准
25
- - **架构师(architect)**:负责技术方案设计,输出组件边界、数据模型和关键技术决策
26
- - **开发工程师(developer)**:负责编码实现,遵循架构方案,编写完整可运行代码
27
- - **技术负责人(tech_lead)**:负责代码审查,确保实现符合规格和架构方案
28
-
29
- ### 流程原则
30
- - 新功能开发必须先有产品规格文档(docs/product-spec.md)
31
- - 架构决策必须有文档记录
32
- - 代码审查关注正确性、安全性、可维护性三个维度
33
- - 每个角色有明确的输入输出契约,不越界操作`,
34
- active_prompt: '遵循 BMad 敏捷规范:需求→架构→实现→审查,每步有明确角色和产出物。',
35
- roles: {
36
- product_manager: {
37
- name: '产品经理',
38
- responsibilities: '分析需求,输出用户故事和验收标准,确保需求清晰无歧义',
39
- constraints: '不涉及技术实现细节,聚焦用户价值和业务逻辑',
40
- },
41
- architect: {
42
- name: '架构师',
43
- responsibilities: '设计技术方案,定义组件边界、数据模型、API 契约和关键技术决策',
44
- constraints: '不写实现代码,输出可执行的设计文档',
45
- },
46
- developer: {
47
- name: '开发工程师',
48
- responsibilities: '按架构方案编写完整可运行代码,遵循代码规范',
49
- constraints: '不偏离架构方案,遇到方案未覆盖的情况先更新方案再实现',
50
- },
51
- tech_lead: {
52
- name: '技术负责人',
53
- responsibilities: '代码审查,确保实现符合规格和架构方案,把关质量',
54
- constraints: '审查基于事实,不重写代码,只指出问题和改进方向',
55
- },
56
- },
57
- quality_standards: [
58
- { category: '流程', rule: '新功能开发必须先有产品规格文档', severity: 'must' },
59
- { category: '流程', rule: '架构决策必须有文档记录', severity: 'must' },
60
- { category: '代码', rule: '代码必须经过至少一轮审查才能合并', severity: 'should' },
61
- { category: '交付', rule: '每个功能必须有可测试的验收标准', severity: 'must' },
62
- ],
63
- evolution: { auto_optimize: true, optimize_interval_days: 14 },
64
- },
65
- },
66
- {
67
- id: 'official-harness-engineering',
68
- version: '1.0.0',
69
- data: {
70
- id: 'official-harness-engineering',
71
- name: 'Harness Engineering 安全重构规范',
72
- version: '1.0.0',
73
- description: '先织安全网再动代码:遗留代码改造的工程方法论',
74
- source: 'official',
75
- principles: `## 来自 Harness Engineering 安全重构规范
76
- 本项目遵循 Harness Engineering 安全重构规范,所有遗留代码改造必须按以下原则执行:
77
-
78
- ### 核心理念:先织安全网,再动代码
79
- 在没有充分理解和测试覆盖的情况下修改遗留代码,是最危险的工程行为。
80
- Harness Engineering 要求在任何修改之前,先建立足够的安全网。
81
-
82
- ### 遗留代码改造流程
83
- - **理解**:代码考古学家深度阅读现有代码,输出行为文档
84
- - **织网**:安全网工程师建立特征测试,覆盖所有已知边界情况
85
- - **修改**:外科医生在安全网保护下执行最小化精准修改
86
- - **验证**:验证工程师确认修改前后行为一致
87
-
88
- ### TypeScript 专项原则
89
- - 严格启用 \`strict: true\`,禁止使用 \`any\` 类型(必须有显式类型注解或泛型替代)
90
- - 模块边界使用 \`interface\` 定义契约,内部实现使用 \`type\`
91
- - 异步操作统一使用 \`async/await\`,禁止混用 Promise 链和回调
92
- - 错误处理必须显式:不得静默吞掉异常,catch 块必须有实质性处理逻辑
93
- - 禁止在代码中硬编码密钥、密码或任何敏感信息,使用环境变量管理
94
-
95
- ### 流程融合原则(新功能 vs 遗留改造)
96
- - 新功能开发遵循 BMad 流程:产品规格 → 架构设计 → 实现 → 审查
97
- - 遗留代码改造遵循 Harness 流程:理解 → 织网 → 修改 → 验证
98
- - 两类任务冲突时,优先保障安全网(Harness 原则优先),再推进功能迭代(BMad 原则跟进)`,
99
- active_prompt: '遵循 Harness Engineering:改动遗留代码前先建立特征测试,每次最小修改后立即验证。',
100
- roles: {
101
- code_archaeologist: {
102
- name: '代码考古学家',
103
- responsibilities: '深度阅读现有代码,理解行为边界,输出行为文档',
104
- constraints: '不修改代码,只产出理解文档',
105
- },
106
- safety_net_engineer: {
107
- name: '安全网工程师',
108
- responsibilities: '建立特征测试(characterization tests),覆盖所有已知边界情况',
109
- constraints: '测试描述"代码现在做什么"而非"应该做什么"',
110
- },
111
- surgeon: {
112
- name: '外科医生',
113
- responsibilities: '在安全网保护下执行最小化精准修改',
114
- constraints: '每次只改一处,改完立即运行 harness,失败则立即回滚',
115
- },
116
- verification_engineer: {
117
- name: '验证工程师',
118
- responsibilities: '确认修改前后行为一致,新行为有新测试覆盖',
119
- constraints: '全部 harness 通过后才允许提交',
120
- },
121
- },
122
- quality_standards: [
123
- { category: '安全网', rule: '修改遗留代码前必须有特征测试覆盖', severity: 'must' },
124
- { category: '安全网', rule: '每次修改后必须运行全部 harness 测试', severity: 'must' },
125
- { category: '修改', rule: '每次提交只修改一处逻辑,不积累未验证变更', severity: 'should' },
126
- { category: '类型', rule: '禁止 any 类型,必须显式类型注解', severity: 'must' },
127
- { category: '错误处理', rule: 'catch 块必须有实质性处理,不得静默吞掉异常', severity: 'must' },
128
- { category: '安全', rule: '禁止硬编码密钥和密码', severity: 'must' },
129
- ],
130
- evolution: { auto_optimize: true, optimize_interval_days: 14 },
131
- },
132
- },
133
- ];
134
- export class OfficialConventionSync {
135
- loader;
136
- constructor(loader) {
137
- this.loader = loader ?? new ConventionLoader();
138
- }
139
- /**
140
- * 同步官方 Convention 到 ~/.claude-forge/conventions/
141
- * 版本号变更时自动更新,已存在的更高版本跳过(尊重进化器产出)
142
- */
143
- sync() {
144
- const report = { added: [], updated: [], skipped: [] };
145
- if (!fs.existsSync(CONVENTIONS_DIR)) {
146
- fs.mkdirSync(CONVENTIONS_DIR, { recursive: true });
147
- }
148
- for (const entry of OFFICIAL_CONVENTIONS) {
149
- const filePath = path.join(CONVENTIONS_DIR, `${entry.id}.yaml`);
150
- const existing = this.loader.findById(entry.id);
151
- if (existing) {
152
- if (this.versionGte(existing.version, entry.version)) {
153
- report.skipped.push(entry.id);
154
- continue;
155
- }
156
- // 代码版本更高 → 覆盖更新
157
- this.writeConvention(filePath, entry.data);
158
- report.updated.push(entry.id);
159
- logger.info(`[官方规范同步] 已更新:${entry.id} → v${entry.version}`);
160
- }
161
- else {
162
- // 不存在 → 新增
163
- this.writeConvention(filePath, entry.data);
164
- report.added.push(entry.id);
165
- logger.info(`[官方规范同步] 已添加:${entry.id} v${entry.version}`);
166
- }
167
- }
168
- if (report.added.length > 0 || report.updated.length > 0) {
169
- logger.info(`[官方规范同步] 完成:+${report.added.length} 更新=${report.updated.length} 跳过=${report.skipped.length}`);
170
- }
171
- return report;
172
- }
173
- /** 获取所有官方 Convention ID */
174
- getOfficialIds() {
175
- return OFFICIAL_CONVENTIONS.map(c => c.id);
176
- }
177
- writeConvention(filePath, data) {
178
- const content = yaml.dump(data, { lineWidth: 120, noRefs: true });
179
- fs.writeFileSync(filePath, content, 'utf-8');
180
- }
181
- /** 版本号比较:a >= b */
182
- versionGte(a, b) {
183
- const pa = a.split('.').map(Number);
184
- const pb = b.split('.').map(Number);
185
- for (let i = 0; i < Math.max(pa.length, pb.length); i++) {
186
- const na = pa[i] ?? 0;
187
- const nb = pb[i] ?? 0;
188
- if (na > nb)
189
- return true;
190
- if (na < nb)
191
- return false;
192
- }
193
- return true;
194
- }
195
- }
196
- //# sourceMappingURL=official-sync.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"official-sync.js","sourceRoot":"","sources":["../../src/convention/official-sync.ts"],"names":[],"mappings":"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"}
@@ -1,11 +0,0 @@
1
- import type { Stage, StageResult } from './stage-interface.js';
2
- import type { OrchestrationContext } from '../orchestration-context.js';
3
- /** Stage 19: 中等任务处理 — 知识搜索 + 指令注入 */
4
- export declare class ModerateTaskStage implements Stage {
5
- readonly name = "\u4E2D\u7B49\u4EFB\u52A1\u5904\u7406";
6
- readonly dependencies: string[];
7
- readonly critical = true;
8
- execute(ctx: OrchestrationContext): Promise<StageResult>;
9
- fallback(ctx: OrchestrationContext, error: unknown): Promise<StageResult>;
10
- }
11
- //# sourceMappingURL=19-moderate-task.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"19-moderate-task.d.ts","sourceRoot":"","sources":["../../../../src/daemon/handlers/stages/19-moderate-task.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAMxE,qCAAqC;AACrC,qBAAa,iBAAkB,YAAW,KAAK;IAC7C,QAAQ,CAAC,IAAI,0CAAY;IACzB,QAAQ,CAAC,YAAY,WAA0C;IAC/D,QAAQ,CAAC,QAAQ,QAAQ;IAEnB,OAAO,CAAC,GAAG,EAAE,oBAAoB,GAAG,OAAO,CAAC,WAAW,CAAC;IA8DxD,QAAQ,CAAC,GAAG,EAAE,oBAAoB,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC;CAqBhF"}
@@ -1,78 +0,0 @@
1
- import { ContextBuilder } from '../context-builder.js';
2
- import { ForgeFormatter } from '../../../utils/formatter.js';
3
- import { ContextInjector, INJECT_PRIORITY } from '../../context-injector.js';
4
- import { logger } from '../../../utils/logger.js';
5
- /** Stage 19: 中等任务处理 — 知识搜索 + 指令注入 */
6
- export class ModerateTaskStage {
7
- name = '中等任务处理';
8
- dependencies = ['策略建议注入', '模板路由', '计划续接路由', '计划强制检查'];
9
- critical = true;
10
- async execute(ctx) {
11
- const { analysis, event, handlerCtx } = ctx;
12
- if (!analysis)
13
- return { shouldTerminate: false };
14
- const projectPath = event.project_path;
15
- const builder = new ContextBuilder(handlerCtx);
16
- if (!handlerCtx.goalClassifier) {
17
- throw new Error('GoalClassifier 未初始化');
18
- }
19
- const directive = handlerCtx.goalClassifier.generateDirective(analysis);
20
- const decisionsContext = await builder.readDecisionsContext(analysis.requirement, projectPath, ctx.injectionCache);
21
- const similarSessionCtx = analysis.searchKeywords?.length
22
- ? builder.buildSimilarSessionContext(analysis.searchKeywords, projectPath, ctx.injectionCache)
23
- : undefined;
24
- const graphContext = analysis.searchKeywords?.length
25
- ? await builder.buildGraphContext(analysis.searchKeywords, projectPath)
26
- : undefined;
27
- const activeConventions = handlerCtx.conventionManager.getActiveConventions(projectPath);
28
- const conventionPrompt = handlerCtx.conventionManager.getActivePrompt(projectPath) ?? undefined;
29
- if (activeConventions.length > 0) {
30
- logger.info(`已加载项目规范:${ForgeFormatter.formatConventionSummary(activeConventions)}`);
31
- }
32
- const clarify = analysis.clarifyQuestions?.length
33
- ? ForgeFormatter.formatClarifyRequest(analysis.clarifyQuestions)
34
- : undefined;
35
- const body = ContextInjector.build({ complexity: analysis.complexity, estimatedFiles: analysis.estimatedFiles }, { content: builder.buildPlanStartContext(projectPath, ctx.injectionCache, ctx.userPrompt), priority: INJECT_PRIORITY.PLAN, topic: 'plan' }, { content: conventionPrompt, priority: INJECT_PRIORITY.CONVENTION, topic: 'convention' }, { content: directive ?? undefined, priority: INJECT_PRIORITY.DIRECTIVE, topic: 'directive' }, { content: ctx.strategyAdvice, priority: INJECT_PRIORITY.DIRECTIVE, topic: 'strategy' }, { content: clarify, priority: INJECT_PRIORITY.DIRECTIVE, topic: 'clarify' }, { content: similarSessionCtx, priority: INJECT_PRIORITY.HISTORY, minBudget: 500, topic: 'history' }, { content: graphContext, priority: INJECT_PRIORITY.HISTORY - 1, minBudget: 300, topic: 'graph' }, { content: decisionsContext, priority: INJECT_PRIORITY.DECISIONS, topic: 'decisions' });
36
- const injected = [];
37
- if (conventionPrompt)
38
- injected.push(`规范(${activeConventions.map(c => c.id).join(',')})`);
39
- if (directive)
40
- injected.push('执行指令');
41
- if (clarify)
42
- injected.push('澄清建议');
43
- if (decisionsContext)
44
- injected.push('决策历史');
45
- if (similarSessionCtx)
46
- injected.push('相似历史场景');
47
- if (graphContext)
48
- injected.push('图谱成功路径');
49
- const inferredRole = builder.inferCurrentRole(analysis.requirement, activeConventions);
50
- const roleStr = inferredRole ? ` | 当前角色=${inferredRole.name}` : '';
51
- logger.info(`处理完成:直接执行 | 复杂度=${analysis.complexity}${roleStr} | 注入=[${injected.join(', ') || '无'}]`);
52
- return {
53
- shouldTerminate: true,
54
- response: {
55
- allow: true,
56
- additionalContext: body ? ForgeFormatter.wrapInQuote(body) : undefined,
57
- },
58
- };
59
- }
60
- async fallback(ctx, error) {
61
- logger.warn(`[中等任务处理] 知识搜索失败,使用基础指令:${error}`);
62
- const { analysis } = ctx;
63
- if (!analysis)
64
- return { shouldTerminate: false };
65
- const builder = new ContextBuilder(ctx.handlerCtx);
66
- const directive = ctx.handlerCtx.goalClassifier?.generateDirective(analysis);
67
- const context = ContextInjector.build({ content: directive ?? undefined, priority: INJECT_PRIORITY.DIRECTIVE, topic: 'directive' });
68
- logger.info('降级完成:使用基础执行模式');
69
- return {
70
- shouldTerminate: true,
71
- response: {
72
- allow: true,
73
- additionalContext: context ? ForgeFormatter.wrapInQuote(context) : undefined,
74
- },
75
- };
76
- }
77
- }
78
- //# sourceMappingURL=19-moderate-task.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"19-moderate-task.js","sourceRoot":"","sources":["../../../../src/daemon/handlers/stages/19-moderate-task.ts"],"names":[],"mappings":"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"}
@@ -1,8 +0,0 @@
1
- import type { Express } from 'express';
2
- import type { SQLiteStorage } from '../../storage/sqlite.js';
3
- /**
4
- * 全局规范管理路由
5
- * 管理 ~/.claude-forge/conventions/ 下的所有规范模板
6
- */
7
- export declare function registerConventionsRoutes(app: Express, storage: SQLiteStorage): void;
8
- //# sourceMappingURL=conventions.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"conventions.d.ts","sourceRoot":"","sources":["../../../src/web/routes/conventions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAe7D;;;GAGG;AAEH,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CAqUpF"}