@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,439 @@
1
+ export class ClaudeMdPrompts {
2
+ /**
3
+ * 将 buildPersona 暴露为静态方法,供 engine 层在优先级链中调用
4
+ */
5
+ static buildPersonaFromProfile(profile) {
6
+ return buildPersona(profile);
7
+ }
8
+ static buildGenerationPrompt(profile, existingContent, persona) {
9
+ const langs = profile.languages.map(l => l.version ? `${l.name} (${l.version})` : l.name).join(', ') || '未知';
10
+ const frameworks = profile.frameworks.map(f => f.name).join(', ') || '无';
11
+ const scripts = Object.entries(profile.scripts)
12
+ .map(([k, v]) => ` ${k}: \`${v}\``)
13
+ .join('\n') || ' (无)';
14
+ const existingSection = existingContent
15
+ ? `\n## 已有的用户自定义内容(必须完整保留,不得修改)\n\n${existingContent}\n`
16
+ : '';
17
+ // 语言相关的最佳实践片段
18
+ const langPractices = buildLangPractices(profile);
19
+ // 框架相关的最佳实践片段
20
+ const frameworkPractices = buildFrameworkPractices(profile);
21
+ // 优先使用外部传入的人设(来自配置或进化存储),否则自动推断
22
+ const resolvedPersona = persona ?? buildPersona(profile);
23
+ return `${resolvedPersona}
24
+
25
+ 你的任务是为 Claude Code 项目生成 CLAUDE.md 指令文件。
26
+ CLAUDE.md 是 Claude Code 在每次会话时自动读取的项目上下文和约束文件,相当于"给 AI 结对编程伙伴的项目手册"。
27
+
28
+ ## 检测到的项目信息
29
+
30
+ - 项目名:${profile.projectName}
31
+ - 语言:${langs}
32
+ - 框架:${frameworks}
33
+ - 包管理器:${profile.packageManager || '未知'}
34
+ - 构建工具:${profile.buildTool || '未知'}
35
+ - 测试框架:${profile.testFramework || '未知'}
36
+ - Linter:${profile.linter || '无'}
37
+ - Formatter:${profile.formatter || '无'}
38
+ - Monorepo:${profile.monorepo ? '是' : '否'}
39
+ - 关键目录:${profile.keyDirectories.join(', ') || '无'}
40
+
41
+ ## 可用 Scripts
42
+
43
+ ${scripts}
44
+ ${existingSection}
45
+ ## 语言和框架相关实践参考
46
+
47
+ ${langPractices}
48
+ ${frameworkPractices}
49
+
50
+ ## 生成要求
51
+
52
+ 生成一份高质量的 CLAUDE.md,必须包含以下章节,内容要**具体、可执行、有约束力**,不要泛泛而谈:
53
+
54
+ ---
55
+
56
+ ### 1. 项目概述
57
+ 一段话说明项目是什么、做什么用。
58
+
59
+ ### 2. 开发环境与常用命令
60
+ 只列出 Scripts 中实际存在的命令,不编造。格式:
61
+ \`\`\`
62
+ 构建:<命令>
63
+ 测试:<命令>(单次运行,不用 watch)
64
+ 类型检查:<命令>(如有)
65
+ Lint:<命令>
66
+ 格式化:<命令>
67
+ \`\`\`
68
+
69
+ ### 3. 代码规范与约束(核心章节)
70
+ 基于检测到的技术栈,给出**具体的、可检查的**规范,包括:
71
+ - 命名约定(变量、函数、文件、类)
72
+ - 类型使用规范(如 TypeScript strict 模式的具体要求)
73
+ - 禁止事项(明确列出不允许的写法,如 \`any\`、\`console.log\` 等)
74
+ - 注释规范
75
+
76
+ ### 4. 架构约束
77
+ - 目录结构职责(每个关键目录的用途和边界)
78
+ - 模块划分原则
79
+ - 依赖方向(哪层可以依赖哪层,哪些不能反向依赖)
80
+
81
+ ### 5. 测试规范
82
+ 基于检测到的测试框架,给出:
83
+ - 测试文件位置和命名规则
84
+ - 什么必须测试(单元测试覆盖范围)
85
+ - Mock 策略(哪些要 mock,哪些不能 mock)
86
+ - 测试运行命令(单次运行,不用 watch 模式)
87
+
88
+ ### 6. 安全与质量红线
89
+ 这是**强制执行**的约束,违反则拒绝提交:
90
+ - 敏感信息处理(密钥、密码、PII 不得硬编码)
91
+ - 输入验证(所有外部输入必须在边界处验证)
92
+ - 错误处理(不得静默吞掉错误)
93
+ - 依赖安全(不引入未经审查的依赖)
94
+
95
+ ### 7. 常见陷阱(可选,如有项目特定陷阱)
96
+ 列出该技术栈中最常见的 3-5 个具体错误,格式:
97
+ - ❌ 错误做法 → ✅ 正确做法
98
+
99
+ ### 8. 提交规范(如有 git)
100
+ - Commit message 格式
101
+ - 分支命名规则
102
+ - PR/MR 要求
103
+
104
+ ---
105
+
106
+ ## 生成规则
107
+
108
+ 1. **具体胜于抽象**:不写"保持代码整洁",要写"函数不超过 40 行,参数不超过 4 个"
109
+ 2. **只用实际存在的命令**:Scripts 字段之外的命令不出现
110
+ 3. **红线要强硬**:安全和质量约束用"禁止"、"必须"、"不得"等强制语气
111
+ 4. **技术栈特定**:根据检测到的语言和框架,给出该技术栈特有的最佳实践,不是通用废话
112
+ 5. **篇幅适中**:整体 80-200 行,每章节 5-15 行
113
+ 6. **输出语言**:中文,代码和命令保持英文
114
+ 7. **直接输出 Markdown**:不要用代码围栏包裹整体内容`;
115
+ }
116
+ static buildModulePrompt(profile, parentContext, existingContent, persona) {
117
+ const langs = profile.languages.map(l => l.version ? `${l.name} (${l.version})` : l.name).join(', ') || '未知';
118
+ const frameworks = profile.frameworks.map(f => f.name).join(', ') || '无';
119
+ const scripts = Object.entries(profile.scripts)
120
+ .map(([k, v]) => ` ${k}: \`${v}\``)
121
+ .join('\n') || ' (无)';
122
+ const existingSection = existingContent
123
+ ? `\n## 已有的用户自定义内容(必须完整保留,不得修改)\n\n${existingContent}\n`
124
+ : '';
125
+ const parentSection = parentContext
126
+ ? `\n## 父项目上下文(继承的通用规范,不要在模块文档中重复)\n\n${parentContext}\n`
127
+ : '';
128
+ // 优先使用外部传入的人设(来自配置或进化存储),否则自动推断
129
+ const resolvedPersona = persona ?? buildPersona(profile);
130
+ return `${resolvedPersona}
131
+
132
+ 你的任务是为 Claude Code 项目的**子模块**生成 CLAUDE.md 指令文件。
133
+
134
+ 这是一个**模块级**的 CLAUDE.md,与项目级不同:
135
+ - **不要重复**父项目已有的通用规范(如语言规范、通用工具链约束)
136
+ - **聚焦**本模块的业务职责、对外接口、特有约束
137
+ - **简洁**:50-100 行即可,避免冗余
138
+
139
+ ## 检测到的模块信息
140
+
141
+ - 模块名:${profile.projectName}
142
+ - 模块路径:${profile.modulePath || '(根目录)'}
143
+ - 语言:${langs}
144
+ - 框架:${frameworks}
145
+ - 包管理器:${profile.packageManager || '未知'}
146
+ - 测试框架:${profile.testFramework || '未知'}
147
+ - 关键目录:${profile.keyDirectories.join(', ') || '无'}
148
+
149
+ ## 可用 Scripts
150
+
151
+ ${scripts}
152
+ ${parentSection}${existingSection}
153
+ ## 生成要求
154
+
155
+ 生成一份**模块级** CLAUDE.md,必须包含以下章节:
156
+
157
+ ---
158
+
159
+ ### 1. 模块概述(2-3 行)
160
+ - 本模块的核心职责(一句话)
161
+ - 对外暴露的接口/API(如果有)
162
+ - 与其他模块的依赖关系(如果有)
163
+
164
+ ### 2. 模块特有规范(5-10 行)
165
+ - 本模块特有的代码约束(不重复父项目通用规范)
166
+ - 业务逻辑约束(如状态管理、数据流向)
167
+ - 接口设计约束(如 API 命名、参数校验)
168
+
169
+ ### 3. 关键文件说明(3-5 行)
170
+ - 核心入口文件及其职责
171
+ - 重要配置文件位置
172
+ - 测试文件组织方式
173
+
174
+ ### 4. 开发工作流(2-4 行)
175
+ - 本模块的开发/测试/构建命令
176
+ - 与父项目的集成方式(如果是 monorepo)
177
+
178
+ ---
179
+
180
+ **输出要求:**
181
+ 1. **简洁**:总篇幅 50-100 行
182
+ 2. **聚焦**:只写本模块特有的内容,不重复父项目规范
183
+ 3. **具体**:给出可执行的约束,不要泛泛而谈
184
+ 4. **直接输出 Markdown**:不要用代码围栏包裹整体内容`;
185
+ }
186
+ static buildRefinementPrompt(currentClaudeMd, distilledContent, events, profile, persona) {
187
+ const eventSummary = events.slice(-20).map((e) => ({
188
+ time: e.timestamp,
189
+ type: e.hook_type,
190
+ tool: e.tool_name || 'N/A',
191
+ input: e.tool_input
192
+ ? JSON.stringify(e.tool_input).substring(0, 200)
193
+ : undefined,
194
+ }));
195
+ // 优先使用外部传入的人设,否则根据 profile 推断,最后兜底
196
+ const resolvedPersona = persona
197
+ ?? (profile ? buildPersona(profile) : null)
198
+ ?? '你是一位拥有 15 年经验的资深工程师,深度参与过多个大型开源项目的工程规范建设,擅长从代码变更模式中提炼可执行的工程约束。';
199
+ return `${resolvedPersona}
200
+
201
+ 你当前的任务是:基于新发现的项目模式和事件,评估是否需要更新 CLAUDE.md。
202
+
203
+ ## 当前 CLAUDE.md
204
+
205
+ ${currentClaudeMd}
206
+
207
+ ## 最近蒸馏内容(决策和时间线)
208
+
209
+ ${distilledContent}
210
+
211
+ ## 最近事件摘要(${events.length} 条)
212
+
213
+ ${JSON.stringify(eventSummary, null, 2)}
214
+
215
+ ## 要求
216
+
217
+ 1. 分析蒸馏内容和事件,找出以下更新信号:
218
+ - 新增的常用命令(反复出现的 Bash 命令)
219
+ - 修正的开发流程(之前记录有误的部分)
220
+ - 新建立的代码规范
221
+ - 重要的目录结构变化
222
+ - 反复出现的注意事项或陷阱
223
+
224
+ 2. 输出格式:
225
+
226
+ ### SHOULD_UPDATE
227
+ true 或 false
228
+
229
+ ### REASON
230
+ 简要说明为什么需要/不需要更新
231
+
232
+ ### UPDATED_CONTENT
233
+ 如果 SHOULD_UPDATE 为 true,输出更新后的完整 CLAUDE.md 内容(只输出自动生成部分)。
234
+ 如果为 false,此章节留空。
235
+
236
+ ## 规则
237
+ - 只有发现有意义的新模式时才输出 true,不要为了更新而更新
238
+ - 更新时保持已有的高质量约束,只增不减
239
+ - 用中文输出`;
240
+ }
241
+ /**
242
+ * 构建人设进化 prompt:评估当前人设是否需要根据新发现的项目模式升级
243
+ */
244
+ static buildPersonaRefinementPrompt(currentPersona, distilledContent, profile) {
245
+ const frameworkNames = profile.frameworks.map(f => f.name).join(', ') || '无';
246
+ const langNames = profile.languages.map(l => l.name).join(', ') || '未知';
247
+ return `你是一个 AI 提示词工程专家,擅长为不同技术领域设计高质量的专家人设。
248
+
249
+ ## 当前人设
250
+
251
+ ${currentPersona}
252
+
253
+ ## 项目技术栈
254
+
255
+ - 语言:${langNames}
256
+ - 框架:${frameworkNames}
257
+
258
+ ## 最近蒸馏内容(反映项目实际使用的技术模式)
259
+
260
+ ${distilledContent}
261
+
262
+ ## 任务
263
+
264
+ 分析蒸馏内容,判断当前人设是否需要升级以更精准地匹配项目实际技术模式。
265
+
266
+ 升级信号:
267
+ - 发现项目大量使用了人设中未提及的专项技术(如 GraphQL、gRPC、特定数据库、特定架构模式)
268
+ - 发现项目有明显的领域特征(如金融、AI/ML、游戏、嵌入式)
269
+ - 当前人设过于泛泛,缺乏项目特有的专业深度
270
+
271
+ 不升级的情况:
272
+ - 人设已经足够精准
273
+ - 蒸馏内容没有揭示新的专项技术
274
+ - 变化不足以影响生成质量
275
+
276
+ ## 输出格式
277
+
278
+ ### PERSONA_UPDATED
279
+ true 或 false
280
+
281
+ ### REASON
282
+ 一句话说明原因
283
+
284
+ ### UPDATED_PERSONA
285
+ 如果 PERSONA_UPDATED 为 true,输出新的人设文本(一段话,50-100 字,中文)。
286
+ 如果为 false,此章节留空。`;
287
+ }
288
+ }
289
+ // ── 语言特定最佳实践 ──────────────────────────────────────────────────────────
290
+ function buildLangPractices(profile) {
291
+ const sections = [];
292
+ const hasTS = profile.languages.some(l => l.name === 'TypeScript');
293
+ const hasGo = profile.languages.some(l => l.name === 'Go');
294
+ const hasRust = profile.languages.some(l => l.name === 'Rust');
295
+ const hasPython = profile.languages.some(l => l.name === 'Python');
296
+ if (hasTS) {
297
+ sections.push(`**TypeScript 最佳实践参考:**
298
+ - strict 模式下禁止 \`any\`,用 \`unknown\` + 类型守卫替代
299
+ - 优先用 \`interface\` 描述对象形状,\`type\` 用于联合/交叉类型
300
+ - 异步函数始终标注返回类型(\`Promise<T>\`)
301
+ - 枚举优先用 \`const enum\` 或联合字符串类型
302
+ - 不得用 \`!.\` 非空断言规避类型检查,应显式处理 null/undefined
303
+ - import 路径使用 \`.js\` 扩展名(ESM 模式)
304
+ - 禁止 \`@ts-ignore\`,允许 \`@ts-expect-error\`(附注释说明原因)`);
305
+ }
306
+ if (hasGo) {
307
+ sections.push(`**Go 最佳实践参考:**
308
+ - 错误必须显式处理,禁止 \`_\` 丢弃非无关紧要的 error
309
+ - 接口定义在使用方(消费者)而非实现方
310
+ - 包名小写单词,不用下划线,不缩写(除公认缩写如 http)
311
+ - goroutine 必须有明确的退出机制,防止泄漏
312
+ - 上下文 \`context.Context\` 作为第一个参数传递
313
+ - 表格驱动测试(Table-Driven Tests)是标准写法
314
+ - \`defer\` 用于资源清理,但注意循环体内 defer 不在循环结束时执行`);
315
+ }
316
+ if (hasRust) {
317
+ sections.push(`**Rust 最佳实践参考:**
318
+ - 优先用 \`Result<T, E>\` 而非 \`panic!\`,\`unwrap()\` 只用于测试或确定不会失败处
319
+ - 所有权和借用:优先借用(\`&T\`),避免不必要的 clone
320
+ - 错误类型实现 \`std::error::Error\` trait,推荐使用 \`thiserror\` crate
321
+ - 公开 API 必须有文档注释(\`///\`)和示例
322
+ - 使用 \`clippy\` 检查,不得有 warnings(\`#![deny(warnings)]\`)`);
323
+ }
324
+ if (hasPython) {
325
+ sections.push(`**Python 最佳实践参考:**
326
+ - 所有公开函数必须有类型注解(PEP 484),用 \`mypy\` 或 \`pyright\` 检查
327
+ - 禁止可变默认参数(\`def f(x=[])\`),用 \`None\` 替代
328
+ - 异常处理具体化,禁止裸 \`except:\`,至少 \`except Exception:\`
329
+ - 字符串格式化统一用 f-string(Python 3.6+)
330
+ - 数据类用 \`dataclasses\` 或 \`pydantic\`,禁止裸 dict 传递结构化数据
331
+ - 测试文件以 \`test_\` 前缀,测试函数以 \`test_\` 开头`);
332
+ }
333
+ return sections.join('\n\n') || '(无特定语言参考)';
334
+ }
335
+ // ── 框架特定最佳实践 ──────────────────────────────────────────────────────────
336
+ function buildFrameworkPractices(profile) {
337
+ const sections = [];
338
+ const frameworkNames = profile.frameworks.map(f => f.name);
339
+ if (frameworkNames.includes('React') || frameworkNames.includes('Next.js')) {
340
+ sections.push(`**React/Next.js 最佳实践参考:**
341
+ - 组件职责单一:UI 组件不含业务逻辑,业务逻辑抽入 hooks 或 service
342
+ - 禁止在渲染函数中直接定义函数(每次渲染重新创建),用 \`useCallback\`/\`useMemo\`
343
+ - 状态最小化:能从其他状态推导的值不单独存 state
344
+ - Key 属性必须稳定唯一,禁止用数组 index 作 key(列表可排序/增删时)
345
+ - 服务端组件(RSC)不得引入客户端专属 API(window、localStorage)
346
+ - 禁止直接修改 state,始终创建新对象/数组`);
347
+ }
348
+ if (frameworkNames.includes('NestJS')) {
349
+ sections.push(`**NestJS 最佳实践参考:**
350
+ - 每个模块只暴露必要的 provider,其余保持私有
351
+ - DTO 必须用 class-validator 注解,所有入参在 Controller 层校验
352
+ - Service 不直接访问 Request/Response,保持框架无关
353
+ - 全局过滤器处理异常,不在 Service 中 catch 后 re-throw HTTP 异常
354
+ - 敏感配置通过 ConfigService 读取,禁止直接 \`process.env\``);
355
+ }
356
+ if (frameworkNames.includes('Express') || frameworkNames.includes('Fastify')) {
357
+ sections.push(`**Node.js 后端最佳实践参考:**
358
+ - 所有路由入参必须验证(Zod / Joi / Yup),不信任客户端数据
359
+ - 错误通过统一的 error middleware 处理,不在路由中 \`res.status(500).send\`
360
+ - 异步路由必须 try/catch 或用 asyncHandler 包装,防止未捕获 rejection
361
+ - 禁止同步 I/O 操作(\`fs.readFileSync\` 等)在请求路径中调用
362
+ - 响应格式统一:\`{ data, error, meta }\``);
363
+ }
364
+ if (frameworkNames.includes('Django') || frameworkNames.includes('FastAPI') || frameworkNames.includes('Flask')) {
365
+ sections.push(`**Python Web 框架最佳实践参考:**
366
+ - 敏感配置从环境变量读取,禁止写入代码或 .env 提交到仓库
367
+ - 数据库查询必须参数化,禁止字符串拼接 SQL
368
+ - 所有 API 入参用 pydantic(FastAPI)或 Form/Serializer(Django)验证
369
+ - 接口应返回一致的错误结构,不暴露内部异常详情给客户端
370
+ - 长时间操作(发邮件、图像处理)移入后台任务队列`);
371
+ }
372
+ if (profile.testFramework === 'Vitest' || profile.testFramework === 'Jest') {
373
+ sections.push(`**${profile.testFramework} 测试最佳实践参考:**
374
+ - 测试名称描述行为而非实现:\`it('should return 404 when user not found')\`
375
+ - 每个测试只验证一个行为(单一断言原则)
376
+ - 使用 \`vi.mock\`/\`jest.mock\` 隔离外部依赖(HTTP、数据库、文件系统)
377
+ - 不要测试实现细节(私有方法、内部状态),只测试公开接口
378
+ - 测试数据用 factory 函数生成,避免测试间共享可变状态
379
+ - \`beforeEach\` 中重置 mock,防止测试间污染`);
380
+ }
381
+ return sections.join('\n\n') || '';
382
+ }
383
+ // ── 根据技术栈生成领域专家人设 ──────────────────────────────────────────────────
384
+ function buildPersona(profile) {
385
+ const langNames = profile.languages.map(l => l.name);
386
+ const frameworkNames = profile.frameworks.map(f => f.name);
387
+ // 主语言判定
388
+ const primaryLang = langNames[0] || 'Unknown';
389
+ // 根据技术栈组合生成人设
390
+ if (langNames.includes('TypeScript') || langNames.includes('JavaScript')) {
391
+ if (frameworkNames.includes('React') || frameworkNames.includes('Next.js')) {
392
+ return `你是一位在 Meta(前 Facebook)React 核心团队工作过 8 年的资深前端架构师,深度参与过 React 18 并发特性和 Server Components 的设计与实现。你对 TypeScript 类型系统有极深的理解,曾为多个大型 SaaS 产品建立过前端工程规范,擅长从性能、可维护性和类型安全三个维度设计约束。`;
393
+ }
394
+ if (frameworkNames.includes('NestJS')) {
395
+ return `你是一位拥有 10 年 Node.js 后端经验的技术专家,曾在 Uber 和 Stripe 负责支付系统和微服务架构设计。你深度掌握 NestJS 的依赖注入、模块化设计和企业级最佳实践,对 TypeScript 严格模式、错误处理和 API 安全有极高的标准。`;
396
+ }
397
+ if (frameworkNames.includes('Express') || frameworkNames.includes('Fastify')) {
398
+ return `你是一位在 Netflix 和 Airbnb 工作过的 Node.js 后端专家,拥有 12 年构建高并发 API 服务的经验。你对异步编程、错误处理、输入验证和安全防护有深刻理解,曾为多个独角兽公司建立过 Node.js 后端工程规范。`;
399
+ }
400
+ if (frameworkNames.includes('Vue')) {
401
+ return `你是一位 Vue.js 核心团队成员,深度参与过 Vue 3 Composition API 和响应式系统的设计。你对 TypeScript 在 Vue 生态中的最佳实践有权威性理解,擅长设计组件化架构和状态管理方案。`;
402
+ }
403
+ // 通用 TS/JS
404
+ return `你是一位拥有 15 年 JavaScript/TypeScript 经验的全栈架构师,曾在 Google 和 Microsoft 参与过 TypeScript 编译器和 VS Code 的开发。你对类型系统、模块化设计和工程规范有极深的理解。`;
405
+ }
406
+ if (langNames.includes('Go')) {
407
+ if (frameworkNames.includes('Gin') || frameworkNames.includes('Echo')) {
408
+ return `你是一位在 Google 工作过 10 年的 Go 语言专家,深度参与过 Kubernetes 和 Docker 的核心开发。你对 Go 的并发模型、错误处理和接口设计有权威性理解,擅长构建高性能微服务和云原生应用。`;
409
+ }
410
+ return `你是一位 Go 语言核心贡献者,曾在 Google 参与 Go 标准库和工具链的开发。你对 Go 的设计哲学(简洁、显式、组合)有深刻理解,擅长从工程实践中提炼可执行的规范。`;
411
+ }
412
+ if (langNames.includes('Rust')) {
413
+ return `你是一位 Rust 核心团队成员,深度参与过 Rust 编译器和 Cargo 的开发。你对所有权系统、生命周期和零成本抽象有权威性理解,曾为 Mozilla、AWS 和 Cloudflare 建立过 Rust 工程规范。`;
414
+ }
415
+ if (langNames.includes('Python')) {
416
+ if (frameworkNames.includes('Django')) {
417
+ return `你是一位在 Instagram 和 Pinterest 工作过的 Python 后端专家,拥有 12 年 Django 大规模应用经验。你对 ORM 优化、安全防护和 API 设计有深刻理解,擅长建立企业级 Python 工程规范。`;
418
+ }
419
+ if (frameworkNames.includes('FastAPI')) {
420
+ return `你是一位现代 Python 后端架构师,深度掌握 FastAPI、Pydantic 和异步编程。你对类型注解、依赖注入和 OpenAPI 规范有权威性理解,曾为多个 AI 初创公司建立过 Python 后端工程规范。`;
421
+ }
422
+ return `你是一位拥有 15 年 Python 经验的资深工程师,曾在 Dropbox 和 Spotify 参与过大规模 Python 系统的架构设计。你对类型系统(mypy/pyright)、测试工程和代码质量有极高的标准。`;
423
+ }
424
+ if (langNames.includes('Java')) {
425
+ if (frameworkNames.includes('Spring Boot')) {
426
+ return `你是一位在 Netflix 和 LinkedIn 工作过的 Java 后端专家,拥有 15 年 Spring 生态经验。你对依赖注入、AOP、事务管理和微服务架构有深刻理解,擅长建立企业级 Java 工程规范。`;
427
+ }
428
+ return `你是一位 Java 资深架构师,曾在 Oracle 和 Google 参与过 JVM 和 Java 标准库的开发。你对并发编程、内存模型和性能优化有权威性理解。`;
429
+ }
430
+ if (langNames.includes('C++')) {
431
+ return `你是一位在 Google 和 Microsoft 工作过的 C++ 专家,深度参与过 Chromium 和 LLVM 的开发。你对现代 C++(C++17/20)、RAII、智能指针和零开销抽象有权威性理解,擅长建立高性能系统的工程规范。`;
432
+ }
433
+ if (langNames.includes('C#')) {
434
+ return `你是一位 Microsoft .NET 团队的资深工程师,深度参与过 C# 语言设计和 .NET Core 的开发。你对 LINQ、异步编程和依赖注入有权威性理解,擅长建立企业级 .NET 工程规范。`;
435
+ }
436
+ // 兜底人设
437
+ return `你是一位拥有 15 年软件工程经验的资深架构师,曾在 Google、Microsoft 和多家独角兽公司担任技术负责人。你深度参与过多个大型开源项目的工程规范建设,对代码质量、架构设计和团队协作有极高的标准。你擅长从项目实际情况中提炼可执行的工程约束,而非泛泛而谈。`;
438
+ }
439
+ //# sourceMappingURL=prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/claudemd/prompts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ export declare class ClaudeMdWriter {
2
+ private getClaudeMdPath;
3
+ readClaudeMd(projectPath: string): string | null;
4
+ /**
5
+ * 读取父项目的 CLAUDE.md(用于模块继承上下文)
6
+ */
7
+ readParentClaudeMd(parentPath: string): string | null;
8
+ hasAutoSection(projectPath: string): boolean;
9
+ /**
10
+ * 提取标记外的用户自定义内容
11
+ */
12
+ getUserContent(projectPath: string): string;
13
+ /**
14
+ * 写入自动生成内容,保留用户手写部分
15
+ */
16
+ writeClaudeMd(projectPath: string, autoContent: string): void;
17
+ /**
18
+ * 更新自动生成部分,保留用户内容不变
19
+ */
20
+ updateAutoSection(projectPath: string, newAutoContent: string): void;
21
+ /**
22
+ * 在根目录 CLAUDE.md 的自动区块末尾维护子模块 @import 列表。
23
+ * 每次调用以传入的 modulePaths 为准(全量覆盖),相对路径基于 projectPath。
24
+ */
25
+ updateModuleImports(projectPath: string, modulePaths: string[]): void;
26
+ }
27
+ //# sourceMappingURL=writer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"writer.d.ts","sourceRoot":"","sources":["../../src/claudemd/writer.ts"],"names":[],"mappings":"AAMA,qBAAa,cAAc;IACzB,OAAO,CAAC,eAAe;IAIvB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAMhD;;OAEG;IACH,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAIrD,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IAM5C;;OAEG;IACH,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAkB3C;;OAEG;IACH,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;IAgB7D;;OAEG;IACH,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,IAAI;IAIpE;;;OAGG;IACH,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,IAAI;CA0BtE"}
@@ -0,0 +1,91 @@
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+ const AUTO_START = '<!-- forge:claudemd-auto -->';
4
+ const AUTO_END = '<!-- forge:end-claudemd-auto -->';
5
+ export class ClaudeMdWriter {
6
+ getClaudeMdPath(projectPath) {
7
+ return path.join(projectPath, 'CLAUDE.md');
8
+ }
9
+ readClaudeMd(projectPath) {
10
+ const filePath = this.getClaudeMdPath(projectPath);
11
+ if (!fs.existsSync(filePath))
12
+ return null;
13
+ return fs.readFileSync(filePath, 'utf-8');
14
+ }
15
+ /**
16
+ * 读取父项目的 CLAUDE.md(用于模块继承上下文)
17
+ */
18
+ readParentClaudeMd(parentPath) {
19
+ return this.readClaudeMd(parentPath);
20
+ }
21
+ hasAutoSection(projectPath) {
22
+ const content = this.readClaudeMd(projectPath);
23
+ if (!content)
24
+ return false;
25
+ return content.includes(AUTO_START) && content.includes(AUTO_END);
26
+ }
27
+ /**
28
+ * 提取标记外的用户自定义内容
29
+ */
30
+ getUserContent(projectPath) {
31
+ const content = this.readClaudeMd(projectPath);
32
+ if (!content)
33
+ return '';
34
+ const startIdx = content.indexOf(AUTO_START);
35
+ const endIdx = content.indexOf(AUTO_END);
36
+ if (startIdx === -1 || endIdx === -1) {
37
+ // 整个文件都是用户内容
38
+ return content.trim();
39
+ }
40
+ const before = content.substring(0, startIdx).trim();
41
+ const after = content.substring(endIdx + AUTO_END.length).trim();
42
+ return [before, after].filter(Boolean).join('\n\n');
43
+ }
44
+ /**
45
+ * 写入自动生成内容,保留用户手写部分
46
+ */
47
+ writeClaudeMd(projectPath, autoContent) {
48
+ const filePath = this.getClaudeMdPath(projectPath);
49
+ const userContent = this.getUserContent(projectPath);
50
+ const autoBlock = `${AUTO_START}\n${autoContent.trim()}\n${AUTO_END}`;
51
+ let finalContent;
52
+ if (userContent) {
53
+ finalContent = `${autoBlock}\n\n${userContent}\n`;
54
+ }
55
+ else {
56
+ finalContent = `${autoBlock}\n`;
57
+ }
58
+ fs.writeFileSync(filePath, finalContent, 'utf-8');
59
+ }
60
+ /**
61
+ * 更新自动生成部分,保留用户内容不变
62
+ */
63
+ updateAutoSection(projectPath, newAutoContent) {
64
+ this.writeClaudeMd(projectPath, newAutoContent);
65
+ }
66
+ /**
67
+ * 在根目录 CLAUDE.md 的自动区块末尾维护子模块 @import 列表。
68
+ * 每次调用以传入的 modulePaths 为准(全量覆盖),相对路径基于 projectPath。
69
+ */
70
+ updateModuleImports(projectPath, modulePaths) {
71
+ const imports = modulePaths
72
+ .map(p => `@${path.relative(projectPath, p)}/CLAUDE.md`)
73
+ .join('\n');
74
+ const section = `## 子模块规范\n\n${imports}`;
75
+ const current = this.readClaudeMd(projectPath) ?? '';
76
+ const MODULE_START = '<!-- forge:modules -->';
77
+ const MODULE_END = '<!-- forge:end-modules -->';
78
+ const block = `${MODULE_START}\n${section}\n${MODULE_END}`;
79
+ let updated;
80
+ if (current.includes(MODULE_START)) {
81
+ // 替换已有区块
82
+ updated = current.replace(new RegExp(`${MODULE_START}[\\s\\S]*?${MODULE_END}`), block);
83
+ }
84
+ else {
85
+ // 追加到文件末尾(自动区块外,作为独立区块)
86
+ updated = current.trimEnd() + `\n\n${block}\n`;
87
+ }
88
+ fs.writeFileSync(this.getClaudeMdPath(projectPath), updated, 'utf-8');
89
+ }
90
+ }
91
+ //# sourceMappingURL=writer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"writer.js","sourceRoot":"","sources":["../../src/claudemd/writer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerBackupCommand(program: Command): void;
3
+ //# sourceMappingURL=backup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backup.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/backup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA6D5D"}
@@ -0,0 +1,63 @@
1
+ import { success, info } from '../utils/output.js';
2
+ import { handleError } from '../utils/errors.js';
3
+ import { BackupManager } from '../../backup/index.js';
4
+ export function registerBackupCommand(program) {
5
+ program
6
+ .command('backup')
7
+ .description('Create a backup of all Claude Forge data')
8
+ .option('-p, --project <path>', 'Only backup data for a specific project')
9
+ .option('-e, --encrypt', 'Encrypt the backup file')
10
+ .option('-o, --output <path>', 'Output file path')
11
+ .action(async (options) => {
12
+ try {
13
+ info('Creating backup...');
14
+ const manager = new BackupManager();
15
+ const outputFile = manager.backup({
16
+ outputPath: options.output,
17
+ projectPath: options.project,
18
+ encrypt: options.encrypt,
19
+ });
20
+ success(`Backup created: ${outputFile}`);
21
+ info(`Checksum: ${outputFile}.sha256`);
22
+ }
23
+ catch (err) {
24
+ handleError(err);
25
+ }
26
+ });
27
+ program
28
+ .command('restore')
29
+ .description('Restore data from a backup file')
30
+ .argument('<file>', 'Backup file path')
31
+ .option('-s, --strategy <strategy>', 'Restore strategy: merge, overwrite, cancel', 'merge')
32
+ .action(async (file, options) => {
33
+ try {
34
+ info(`Restoring from ${file}...`);
35
+ const manager = new BackupManager();
36
+ manager.restore(file, options.strategy);
37
+ success('Restore completed successfully');
38
+ }
39
+ catch (err) {
40
+ handleError(err);
41
+ }
42
+ });
43
+ program
44
+ .command('export')
45
+ .description('Export data for a specific project')
46
+ .requiredOption('-p, --project <path>', 'Project path to export')
47
+ .option('-o, --output <path>', 'Output file path')
48
+ .action(async (options) => {
49
+ try {
50
+ info(`Exporting project data...`);
51
+ const manager = new BackupManager();
52
+ const outputFile = manager.backup({
53
+ outputPath: options.output,
54
+ projectPath: options.project,
55
+ });
56
+ success(`Export completed: ${outputFile}`);
57
+ }
58
+ catch (err) {
59
+ handleError(err);
60
+ }
61
+ });
62
+ }
63
+ //# sourceMappingURL=backup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backup.js","sourceRoot":"","sources":["../../../src/cli/commands/backup.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAW,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAsB,MAAM,oBAAoB,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,0CAA0C,CAAC;SACvD,MAAM,CAAC,sBAAsB,EAAE,yCAAyC,CAAC;SACzE,MAAM,CAAC,eAAe,EAAE,yBAAyB,CAAC;SAClD,MAAM,CAAC,qBAAqB,EAAE,kBAAkB,CAAC;SACjD,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,IAAI,CAAC;YACH,IAAI,CAAC,oBAAoB,CAAC,CAAC;YAC3B,MAAM,OAAO,GAAG,IAAI,aAAa,EAAE,CAAC;YACpC,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;gBAChC,UAAU,EAAE,OAAO,CAAC,MAAM;gBAC1B,WAAW,EAAE,OAAO,CAAC,OAAO;gBAC5B,OAAO,EAAE,OAAO,CAAC,OAAO;aACzB,CAAC,CAAC;YACH,OAAO,CAAC,mBAAmB,UAAU,EAAE,CAAC,CAAC;YACzC,IAAI,CAAC,aAAa,UAAU,SAAS,CAAC,CAAC;QACzC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,iCAAiC,CAAC;SAC9C,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAC;SACtC,MAAM,CACL,2BAA2B,EAC3B,4CAA4C,EAC5C,OAAO,CACR;SACA,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;QAC9B,IAAI,CAAC;YACH,IAAI,CAAC,kBAAkB,IAAI,KAAK,CAAC,CAAC;YAClC,MAAM,OAAO,GAAG,IAAI,aAAa,EAAE,CAAC;YACpC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;YACxC,OAAO,CAAC,gCAAgC,CAAC,CAAC;QAC5C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,oCAAoC,CAAC;SACjD,cAAc,CAAC,sBAAsB,EAAE,wBAAwB,CAAC;SAChE,MAAM,CAAC,qBAAqB,EAAE,kBAAkB,CAAC;SACjD,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,IAAI,CAAC;YACH,IAAI,CAAC,2BAA2B,CAAC,CAAC;YAClC,MAAM,OAAO,GAAG,IAAI,aAAa,EAAE,CAAC;YACpC,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;gBAChC,UAAU,EAAE,OAAO,CAAC,MAAM;gBAC1B,WAAW,EAAE,OAAO,CAAC,OAAO;aAC7B,CAAC,CAAC;YACH,OAAO,CAAC,qBAAqB,UAAU,EAAE,CAAC,CAAC;QAC7C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}