@winspan/claude-forge 8.54.4 → 9.2.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 (880) hide show
  1. package/DEVELOPMENT.md +649 -33
  2. package/README.md +154 -16
  3. package/dist/catalogs/agents.json +72 -0
  4. package/dist/catalogs/skills.json +194 -0
  5. package/dist/claudemd/claudemd-generator.d.ts +45 -45
  6. package/dist/claudemd/claudemd-generator.d.ts.map +1 -1
  7. package/dist/claudemd/claudemd-generator.js +128 -449
  8. package/dist/claudemd/claudemd-generator.js.map +1 -1
  9. package/dist/claudemd/index.d.ts +14 -4
  10. package/dist/claudemd/index.d.ts.map +1 -1
  11. package/dist/claudemd/index.js +15 -4
  12. package/dist/claudemd/index.js.map +1 -1
  13. package/dist/claudemd/resume-manager.d.ts.map +1 -1
  14. package/dist/claudemd/resume-manager.js +37 -9
  15. package/dist/claudemd/resume-manager.js.map +1 -1
  16. package/dist/claudemd/templates/swarm-protocol.md +35 -186
  17. package/dist/claudemd/violations-manager.d.ts +40 -0
  18. package/dist/claudemd/violations-manager.d.ts.map +1 -0
  19. package/dist/claudemd/violations-manager.js +106 -0
  20. package/dist/claudemd/violations-manager.js.map +1 -0
  21. package/dist/cli/commands/admin.d.ts +15 -0
  22. package/dist/cli/commands/admin.d.ts.map +1 -0
  23. package/dist/cli/commands/admin.js +177 -0
  24. package/dist/cli/commands/admin.js.map +1 -0
  25. package/dist/cli/commands/agents.d.ts +18 -0
  26. package/dist/cli/commands/agents.d.ts.map +1 -0
  27. package/dist/cli/commands/agents.js +160 -0
  28. package/dist/cli/commands/agents.js.map +1 -0
  29. package/dist/cli/commands/bypass.d.ts +18 -0
  30. package/dist/cli/commands/bypass.d.ts.map +1 -0
  31. package/dist/cli/commands/bypass.js +87 -0
  32. package/dist/cli/commands/bypass.js.map +1 -0
  33. package/dist/cli/commands/claudemd.d.ts +60 -0
  34. package/dist/cli/commands/claudemd.d.ts.map +1 -1
  35. package/dist/cli/commands/claudemd.js +174 -37
  36. package/dist/cli/commands/claudemd.js.map +1 -1
  37. package/dist/cli/commands/config.d.ts.map +1 -1
  38. package/dist/cli/commands/config.js +94 -1
  39. package/dist/cli/commands/config.js.map +1 -1
  40. package/dist/cli/commands/daemon.d.ts +39 -0
  41. package/dist/cli/commands/daemon.d.ts.map +1 -1
  42. package/dist/cli/commands/daemon.js +167 -20
  43. package/dist/cli/commands/daemon.js.map +1 -1
  44. package/dist/cli/commands/decisions.d.ts +129 -0
  45. package/dist/cli/commands/decisions.d.ts.map +1 -0
  46. package/dist/cli/commands/decisions.js +669 -0
  47. package/dist/cli/commands/decisions.js.map +1 -0
  48. package/dist/cli/commands/doctor.d.ts +29 -0
  49. package/dist/cli/commands/doctor.d.ts.map +1 -0
  50. package/dist/cli/commands/doctor.js +124 -0
  51. package/dist/cli/commands/doctor.js.map +1 -0
  52. package/dist/cli/commands/entropy.d.ts +35 -0
  53. package/dist/cli/commands/entropy.d.ts.map +1 -0
  54. package/dist/cli/commands/entropy.js +121 -0
  55. package/dist/cli/commands/entropy.js.map +1 -0
  56. package/dist/cli/commands/executions.d.ts +1 -0
  57. package/dist/cli/commands/executions.d.ts.map +1 -1
  58. package/dist/cli/commands/executions.js +10 -1
  59. package/dist/cli/commands/executions.js.map +1 -1
  60. package/dist/cli/commands/fix.d.ts +31 -0
  61. package/dist/cli/commands/fix.d.ts.map +1 -0
  62. package/dist/cli/commands/fix.js +108 -0
  63. package/dist/cli/commands/fix.js.map +1 -0
  64. package/dist/cli/commands/governance.d.ts +21 -0
  65. package/dist/cli/commands/governance.d.ts.map +1 -0
  66. package/dist/cli/commands/governance.js +60 -0
  67. package/dist/cli/commands/governance.js.map +1 -0
  68. package/dist/cli/commands/init.d.ts +27 -0
  69. package/dist/cli/commands/init.d.ts.map +1 -1
  70. package/dist/cli/commands/init.js +158 -146
  71. package/dist/cli/commands/init.js.map +1 -1
  72. package/dist/cli/commands/insights-goal-check.d.ts +50 -0
  73. package/dist/cli/commands/insights-goal-check.d.ts.map +1 -0
  74. package/dist/cli/commands/insights-goal-check.js +318 -0
  75. package/dist/cli/commands/insights-goal-check.js.map +1 -0
  76. package/dist/cli/commands/insights.d.ts +15 -0
  77. package/dist/cli/commands/insights.d.ts.map +1 -0
  78. package/dist/cli/commands/insights.js +127 -0
  79. package/dist/cli/commands/insights.js.map +1 -0
  80. package/dist/cli/commands/knowledge.d.ts +66 -0
  81. package/dist/cli/commands/knowledge.d.ts.map +1 -0
  82. package/dist/cli/commands/knowledge.js +897 -0
  83. package/dist/cli/commands/knowledge.js.map +1 -0
  84. package/dist/cli/commands/mcp.d.ts +0 -12
  85. package/dist/cli/commands/mcp.d.ts.map +1 -1
  86. package/dist/cli/commands/mcp.js +11 -5
  87. package/dist/cli/commands/mcp.js.map +1 -1
  88. package/dist/cli/commands/menu.d.ts.map +1 -1
  89. package/dist/cli/commands/menu.js +10 -184
  90. package/dist/cli/commands/menu.js.map +1 -1
  91. package/dist/cli/commands/project.d.ts +98 -0
  92. package/dist/cli/commands/project.d.ts.map +1 -0
  93. package/dist/cli/commands/project.js +382 -0
  94. package/dist/cli/commands/project.js.map +1 -0
  95. package/dist/cli/commands/skills.d.ts.map +1 -1
  96. package/dist/cli/commands/skills.js +14 -128
  97. package/dist/cli/commands/skills.js.map +1 -1
  98. package/dist/cli/commands/spec.d.ts +40 -0
  99. package/dist/cli/commands/spec.d.ts.map +1 -0
  100. package/dist/cli/commands/spec.js +49 -0
  101. package/dist/cli/commands/spec.js.map +1 -0
  102. package/dist/cli/commands/stats.d.ts.map +1 -1
  103. package/dist/cli/commands/stats.js +3 -2
  104. package/dist/cli/commands/stats.js.map +1 -1
  105. package/dist/cli/commands/status.d.ts.map +1 -1
  106. package/dist/cli/commands/status.js +17 -2
  107. package/dist/cli/commands/status.js.map +1 -1
  108. package/dist/cli/commands/trace.d.ts.map +1 -1
  109. package/dist/cli/commands/trace.js +4 -9
  110. package/dist/cli/commands/trace.js.map +1 -1
  111. package/dist/cli/commands/violations.d.ts +14 -0
  112. package/dist/cli/commands/violations.d.ts.map +1 -0
  113. package/dist/cli/commands/violations.js +43 -0
  114. package/dist/cli/commands/violations.js.map +1 -0
  115. package/dist/cli/index.js +26 -0
  116. package/dist/cli/index.js.map +1 -1
  117. package/dist/cli/init/hook-manager.d.ts +1 -1
  118. package/dist/cli/init/hook-manager.d.ts.map +1 -1
  119. package/dist/cli/init/hook-manager.js +6 -0
  120. package/dist/cli/init/hook-manager.js.map +1 -1
  121. package/dist/cli/utils/resolve-session.d.ts +32 -0
  122. package/dist/cli/utils/resolve-session.d.ts.map +1 -0
  123. package/dist/cli/utils/resolve-session.js +39 -0
  124. package/dist/cli/utils/resolve-session.js.map +1 -0
  125. package/dist/core/config.d.ts +4 -1
  126. package/dist/core/config.d.ts.map +1 -1
  127. package/dist/core/config.js +11 -23
  128. package/dist/core/config.js.map +1 -1
  129. package/dist/core/constants.d.ts +14 -13
  130. package/dist/core/constants.d.ts.map +1 -1
  131. package/dist/core/constants.js +20 -13
  132. package/dist/core/constants.js.map +1 -1
  133. package/dist/core/diagnostics/checks.d.ts +151 -0
  134. package/dist/core/diagnostics/checks.d.ts.map +1 -0
  135. package/dist/core/diagnostics/checks.js +765 -0
  136. package/dist/core/diagnostics/checks.js.map +1 -0
  137. package/dist/core/diagnostics/daemon-status.d.ts +77 -0
  138. package/dist/core/diagnostics/daemon-status.d.ts.map +1 -0
  139. package/dist/core/diagnostics/daemon-status.js +113 -0
  140. package/dist/core/diagnostics/daemon-status.js.map +1 -0
  141. package/dist/core/diagnostics/entropy-checks.d.ts +82 -0
  142. package/dist/core/diagnostics/entropy-checks.d.ts.map +1 -0
  143. package/dist/core/diagnostics/entropy-checks.js +395 -0
  144. package/dist/core/diagnostics/entropy-checks.js.map +1 -0
  145. package/dist/core/diagnostics/fix-runner.d.ts +54 -0
  146. package/dist/core/diagnostics/fix-runner.d.ts.map +1 -0
  147. package/dist/core/diagnostics/fix-runner.js +90 -0
  148. package/dist/core/diagnostics/fix-runner.js.map +1 -0
  149. package/dist/core/diagnostics/knip-runner.d.ts +49 -0
  150. package/dist/core/diagnostics/knip-runner.d.ts.map +1 -0
  151. package/dist/core/diagnostics/knip-runner.js +100 -0
  152. package/dist/core/diagnostics/knip-runner.js.map +1 -0
  153. package/dist/core/diagnostics/markers.d.ts +96 -0
  154. package/dist/core/diagnostics/markers.d.ts.map +1 -0
  155. package/dist/core/diagnostics/markers.js +153 -0
  156. package/dist/core/diagnostics/markers.js.map +1 -0
  157. package/dist/core/governance/global-inject.d.ts +60 -0
  158. package/dist/core/governance/global-inject.d.ts.map +1 -0
  159. package/dist/core/governance/global-inject.js +129 -0
  160. package/dist/core/governance/global-inject.js.map +1 -0
  161. package/dist/core/queue/index.d.ts +16 -3
  162. package/dist/core/queue/index.d.ts.map +1 -1
  163. package/dist/core/queue/index.js +14 -3
  164. package/dist/core/queue/index.js.map +1 -1
  165. package/dist/core/storage/base.d.ts +158 -0
  166. package/dist/core/storage/base.d.ts.map +1 -1
  167. package/dist/core/storage/base.js +570 -0
  168. package/dist/core/storage/base.js.map +1 -1
  169. package/dist/core/storage/codec/tool-input-codec.d.ts +93 -0
  170. package/dist/core/storage/codec/tool-input-codec.d.ts.map +1 -0
  171. package/dist/core/storage/codec/tool-input-codec.js +159 -0
  172. package/dist/core/storage/codec/tool-input-codec.js.map +1 -0
  173. package/dist/core/storage/decisions.d.ts +362 -0
  174. package/dist/core/storage/decisions.d.ts.map +1 -0
  175. package/dist/core/storage/decisions.js +502 -0
  176. package/dist/core/storage/decisions.js.map +1 -0
  177. package/dist/core/storage/events.d.ts +112 -8
  178. package/dist/core/storage/events.d.ts.map +1 -1
  179. package/dist/core/storage/events.js +390 -39
  180. package/dist/core/storage/events.js.map +1 -1
  181. package/dist/core/storage/feedback.d.ts +131 -0
  182. package/dist/core/storage/feedback.d.ts.map +1 -0
  183. package/dist/core/storage/feedback.js +187 -0
  184. package/dist/core/storage/feedback.js.map +1 -0
  185. package/dist/core/storage/forge-config.d.ts +40 -0
  186. package/dist/core/storage/forge-config.d.ts.map +1 -0
  187. package/dist/core/storage/forge-config.js +65 -0
  188. package/dist/core/storage/forge-config.js.map +1 -0
  189. package/dist/core/storage/injections.d.ts +28 -0
  190. package/dist/core/storage/injections.d.ts.map +1 -1
  191. package/dist/core/storage/injections.js +62 -5
  192. package/dist/core/storage/injections.js.map +1 -1
  193. package/dist/core/storage/knowledge.d.ts +106 -0
  194. package/dist/core/storage/knowledge.d.ts.map +1 -0
  195. package/dist/core/storage/knowledge.js +202 -0
  196. package/dist/core/storage/knowledge.js.map +1 -0
  197. package/dist/core/storage/maintenance.d.ts +36 -9
  198. package/dist/core/storage/maintenance.d.ts.map +1 -1
  199. package/dist/core/storage/maintenance.js +56 -24
  200. package/dist/core/storage/maintenance.js.map +1 -1
  201. package/dist/core/storage/pipeline-rollup.d.ts +117 -0
  202. package/dist/core/storage/pipeline-rollup.d.ts.map +1 -0
  203. package/dist/core/storage/pipeline-rollup.js +471 -0
  204. package/dist/core/storage/pipeline-rollup.js.map +1 -0
  205. package/dist/core/storage/routing.d.ts +16 -3
  206. package/dist/core/storage/routing.d.ts.map +1 -1
  207. package/dist/core/storage/routing.js +39 -8
  208. package/dist/core/storage/routing.js.map +1 -1
  209. package/dist/core/storage/rows.d.ts +50 -7
  210. package/dist/core/storage/rows.d.ts.map +1 -1
  211. package/dist/core/storage/schema.sql +302 -23
  212. package/dist/core/storage/sessions.d.ts +136 -0
  213. package/dist/core/storage/sessions.d.ts.map +1 -1
  214. package/dist/core/storage/sessions.js +351 -15
  215. package/dist/core/storage/sessions.js.map +1 -1
  216. package/dist/core/storage/skills.d.ts +1 -0
  217. package/dist/core/storage/skills.d.ts.map +1 -1
  218. package/dist/core/storage/skills.js +21 -6
  219. package/dist/core/storage/skills.js.map +1 -1
  220. package/dist/core/storage/sqlite.d.ts +253 -20
  221. package/dist/core/storage/sqlite.d.ts.map +1 -1
  222. package/dist/core/storage/sqlite.js +425 -16
  223. package/dist/core/storage/sqlite.js.map +1 -1
  224. package/dist/core/storage/tasks.d.ts +474 -2
  225. package/dist/core/storage/tasks.d.ts.map +1 -1
  226. package/dist/core/storage/tasks.js +1213 -18
  227. package/dist/core/storage/tasks.js.map +1 -1
  228. package/dist/core/storage/tool-intercepts.d.ts +69 -0
  229. package/dist/core/storage/tool-intercepts.d.ts.map +1 -0
  230. package/dist/core/storage/tool-intercepts.js +116 -0
  231. package/dist/core/storage/tool-intercepts.js.map +1 -0
  232. package/dist/core/storage/workflow-recommendations.d.ts +124 -0
  233. package/dist/core/storage/workflow-recommendations.d.ts.map +1 -0
  234. package/dist/core/storage/workflow-recommendations.js +274 -0
  235. package/dist/core/storage/workflow-recommendations.js.map +1 -0
  236. package/dist/core/types.d.ts +112 -17
  237. package/dist/core/types.d.ts.map +1 -1
  238. package/dist/core/types.js +12 -0
  239. package/dist/core/types.js.map +1 -1
  240. package/dist/core/utils/backup.d.ts +81 -0
  241. package/dist/core/utils/backup.d.ts.map +1 -0
  242. package/dist/core/utils/backup.js +98 -0
  243. package/dist/core/utils/backup.js.map +1 -0
  244. package/dist/core/utils/binary-paths.d.ts +92 -0
  245. package/dist/core/utils/binary-paths.d.ts.map +1 -0
  246. package/dist/core/utils/binary-paths.js +166 -0
  247. package/dist/core/utils/binary-paths.js.map +1 -0
  248. package/dist/core/utils/bypass-token.d.ts +75 -0
  249. package/dist/core/utils/bypass-token.d.ts.map +1 -0
  250. package/dist/core/utils/bypass-token.js +133 -0
  251. package/dist/core/utils/bypass-token.js.map +1 -0
  252. package/dist/core/utils/cc-builtin-agents.d.ts +3 -0
  253. package/dist/core/utils/cc-builtin-agents.d.ts.map +1 -0
  254. package/dist/core/utils/cc-builtin-agents.js +29 -0
  255. package/dist/core/utils/cc-builtin-agents.js.map +1 -0
  256. package/dist/core/utils/claude-cli-spawn.d.ts +106 -0
  257. package/dist/core/utils/claude-cli-spawn.d.ts.map +1 -0
  258. package/dist/core/utils/claude-cli-spawn.js +219 -0
  259. package/dist/core/utils/claude-cli-spawn.js.map +1 -0
  260. package/dist/core/utils/forge-resume-block.d.ts.map +1 -1
  261. package/dist/core/utils/forge-resume-block.js +3 -2
  262. package/dist/core/utils/forge-resume-block.js.map +1 -1
  263. package/dist/core/utils/logger.d.ts +15 -3
  264. package/dist/core/utils/logger.d.ts.map +1 -1
  265. package/dist/core/utils/logger.js +20 -2
  266. package/dist/core/utils/logger.js.map +1 -1
  267. package/dist/core/utils/noise-prompt.d.ts +97 -0
  268. package/dist/core/utils/noise-prompt.d.ts.map +1 -0
  269. package/dist/core/utils/noise-prompt.js +127 -0
  270. package/dist/core/utils/noise-prompt.js.map +1 -0
  271. package/dist/core/utils/path.d.ts +0 -4
  272. package/dist/core/utils/path.d.ts.map +1 -1
  273. package/dist/core/utils/path.js +0 -7
  274. package/dist/core/utils/path.js.map +1 -1
  275. package/dist/core/utils/time.d.ts +41 -0
  276. package/dist/core/utils/time.d.ts.map +1 -1
  277. package/dist/core/utils/time.js +114 -0
  278. package/dist/core/utils/time.js.map +1 -1
  279. package/dist/daemon/agent-sync.d.ts +24 -0
  280. package/dist/daemon/agent-sync.d.ts.map +1 -0
  281. package/dist/daemon/agent-sync.js +114 -0
  282. package/dist/daemon/agent-sync.js.map +1 -0
  283. package/dist/daemon/config-store.d.ts +55 -0
  284. package/dist/daemon/config-store.d.ts.map +1 -0
  285. package/dist/daemon/config-store.js +137 -0
  286. package/dist/daemon/config-store.js.map +1 -0
  287. package/dist/daemon/event-parser.d.ts +22 -0
  288. package/dist/daemon/event-parser.d.ts.map +1 -1
  289. package/dist/daemon/event-parser.js +49 -3
  290. package/dist/daemon/event-parser.js.map +1 -1
  291. package/dist/daemon/handlers/history-exporter.d.ts.map +1 -1
  292. package/dist/daemon/handlers/history-exporter.js +9 -8
  293. package/dist/daemon/handlers/history-exporter.js.map +1 -1
  294. package/dist/daemon/handlers/post-tool-use.d.ts +58 -4
  295. package/dist/daemon/handlers/post-tool-use.d.ts.map +1 -1
  296. package/dist/daemon/handlers/post-tool-use.js +261 -8
  297. package/dist/daemon/handlers/post-tool-use.js.map +1 -1
  298. package/dist/daemon/handlers/pre-tool-use.d.ts +156 -0
  299. package/dist/daemon/handlers/pre-tool-use.d.ts.map +1 -0
  300. package/dist/daemon/handlers/pre-tool-use.js +585 -0
  301. package/dist/daemon/handlers/pre-tool-use.js.map +1 -0
  302. package/dist/daemon/handlers/stop.d.ts +35 -7
  303. package/dist/daemon/handlers/stop.d.ts.map +1 -1
  304. package/dist/daemon/handlers/stop.js +157 -8
  305. package/dist/daemon/handlers/stop.js.map +1 -1
  306. package/dist/daemon/handlers/user-prompt.d.ts +36 -14
  307. package/dist/daemon/handlers/user-prompt.d.ts.map +1 -1
  308. package/dist/daemon/handlers/user-prompt.js +135 -48
  309. package/dist/daemon/handlers/user-prompt.js.map +1 -1
  310. package/dist/daemon/hook-sync.d.ts.map +1 -1
  311. package/dist/daemon/hook-sync.js +2 -1
  312. package/dist/daemon/hook-sync.js.map +1 -1
  313. package/dist/daemon/index.d.ts.map +1 -1
  314. package/dist/daemon/index.js +471 -43
  315. package/dist/daemon/index.js.map +1 -1
  316. package/dist/daemon/lifecycle.d.ts +48 -1
  317. package/dist/daemon/lifecycle.d.ts.map +1 -1
  318. package/dist/daemon/lifecycle.js +98 -2
  319. package/dist/daemon/lifecycle.js.map +1 -1
  320. package/dist/daemon/router.d.ts +4 -1
  321. package/dist/daemon/router.d.ts.map +1 -1
  322. package/dist/daemon/router.js +4 -2
  323. package/dist/daemon/router.js.map +1 -1
  324. package/dist/daemon/rules/defaults.d.ts +20 -0
  325. package/dist/daemon/rules/defaults.d.ts.map +1 -0
  326. package/dist/daemon/rules/defaults.js +692 -0
  327. package/dist/daemon/rules/defaults.js.map +1 -0
  328. package/dist/daemon/rules/registry.d.ts +47 -0
  329. package/dist/daemon/rules/registry.d.ts.map +1 -0
  330. package/dist/daemon/rules/registry.js +84 -0
  331. package/dist/daemon/rules/registry.js.map +1 -0
  332. package/dist/daemon/rules/types.d.ts +170 -0
  333. package/dist/daemon/rules/types.d.ts.map +1 -0
  334. package/dist/daemon/rules/types.js +15 -0
  335. package/dist/daemon/rules/types.js.map +1 -0
  336. package/dist/daemon/rules/whitelist.d.ts +101 -0
  337. package/dist/daemon/rules/whitelist.d.ts.map +1 -0
  338. package/dist/daemon/rules/whitelist.js +210 -0
  339. package/dist/daemon/rules/whitelist.js.map +1 -0
  340. package/dist/daemon/rules/workflow-defaults.d.ts +52 -0
  341. package/dist/daemon/rules/workflow-defaults.d.ts.map +1 -0
  342. package/dist/daemon/rules/workflow-defaults.js +521 -0
  343. package/dist/daemon/rules/workflow-defaults.js.map +1 -0
  344. package/dist/daemon/server.d.ts +11 -1
  345. package/dist/daemon/server.d.ts.map +1 -1
  346. package/dist/daemon/server.js +7 -1
  347. package/dist/daemon/server.js.map +1 -1
  348. package/dist/daemon/services/context-injector.d.ts +34 -0
  349. package/dist/daemon/services/context-injector.d.ts.map +1 -0
  350. package/dist/daemon/services/context-injector.js +61 -0
  351. package/dist/daemon/services/context-injector.js.map +1 -0
  352. package/dist/daemon/services/decision-hint.d.ts +203 -0
  353. package/dist/daemon/services/decision-hint.d.ts.map +1 -0
  354. package/dist/daemon/services/decision-hint.js +487 -0
  355. package/dist/daemon/services/decision-hint.js.map +1 -0
  356. package/dist/daemon/services/event-ttl-sweep.d.ts +86 -0
  357. package/dist/daemon/services/event-ttl-sweep.d.ts.map +1 -0
  358. package/dist/daemon/services/event-ttl-sweep.js +123 -0
  359. package/dist/daemon/services/event-ttl-sweep.js.map +1 -0
  360. package/dist/daemon/services/experience-extractor.d.ts +67 -0
  361. package/dist/daemon/services/experience-extractor.d.ts.map +1 -0
  362. package/dist/daemon/services/experience-extractor.js +323 -0
  363. package/dist/daemon/services/experience-extractor.js.map +1 -0
  364. package/dist/daemon/services/feedback-aggregator.d.ts +179 -0
  365. package/dist/daemon/services/feedback-aggregator.d.ts.map +1 -0
  366. package/dist/daemon/services/feedback-aggregator.js +455 -0
  367. package/dist/daemon/services/feedback-aggregator.js.map +1 -0
  368. package/dist/daemon/services/heartbeat-writer.d.ts +55 -0
  369. package/dist/daemon/services/heartbeat-writer.d.ts.map +1 -0
  370. package/dist/daemon/services/heartbeat-writer.js +111 -0
  371. package/dist/daemon/services/heartbeat-writer.js.map +1 -0
  372. package/dist/daemon/services/idle-session-sweeper.d.ts +61 -0
  373. package/dist/daemon/services/idle-session-sweeper.d.ts.map +1 -0
  374. package/dist/daemon/services/idle-session-sweeper.js +94 -0
  375. package/dist/daemon/services/idle-session-sweeper.js.map +1 -0
  376. package/dist/daemon/services/idle-task-budget.d.ts +50 -0
  377. package/dist/daemon/services/idle-task-budget.d.ts.map +1 -0
  378. package/dist/daemon/services/idle-task-budget.js +72 -0
  379. package/dist/daemon/services/idle-task-budget.js.map +1 -0
  380. package/dist/daemon/services/intercept-revive.d.ts +60 -0
  381. package/dist/daemon/services/intercept-revive.d.ts.map +1 -0
  382. package/dist/daemon/services/intercept-revive.js +86 -0
  383. package/dist/daemon/services/intercept-revive.js.map +1 -0
  384. package/dist/daemon/services/intercept-rollback-guard.d.ts +105 -0
  385. package/dist/daemon/services/intercept-rollback-guard.d.ts.map +1 -0
  386. package/dist/daemon/services/intercept-rollback-guard.js +152 -0
  387. package/dist/daemon/services/intercept-rollback-guard.js.map +1 -0
  388. package/dist/daemon/services/intercept-timeout-sweeper.d.ts +58 -0
  389. package/dist/daemon/services/intercept-timeout-sweeper.d.ts.map +1 -0
  390. package/dist/daemon/services/intercept-timeout-sweeper.js +83 -0
  391. package/dist/daemon/services/intercept-timeout-sweeper.js.map +1 -0
  392. package/dist/daemon/services/kb-injector.d.ts +57 -0
  393. package/dist/daemon/services/kb-injector.d.ts.map +1 -0
  394. package/dist/daemon/services/kb-injector.js +140 -0
  395. package/dist/daemon/services/kb-injector.js.map +1 -0
  396. package/dist/daemon/services/outcome-classification-service.d.ts +49 -0
  397. package/dist/daemon/services/outcome-classification-service.d.ts.map +1 -0
  398. package/dist/daemon/services/outcome-classification-service.js +214 -0
  399. package/dist/daemon/services/outcome-classification-service.js.map +1 -0
  400. package/dist/daemon/services/outcome-classifier.d.ts +136 -0
  401. package/dist/daemon/services/outcome-classifier.d.ts.map +1 -0
  402. package/dist/daemon/services/outcome-classifier.js +178 -0
  403. package/dist/daemon/services/outcome-classifier.js.map +1 -0
  404. package/dist/daemon/services/outcome-nudge.d.ts +107 -0
  405. package/dist/daemon/services/outcome-nudge.d.ts.map +1 -0
  406. package/dist/daemon/services/outcome-nudge.js +242 -0
  407. package/dist/daemon/services/outcome-nudge.js.map +1 -0
  408. package/dist/daemon/services/spec-approval.d.ts +127 -0
  409. package/dist/daemon/services/spec-approval.d.ts.map +1 -0
  410. package/dist/daemon/services/spec-approval.js +216 -0
  411. package/dist/daemon/services/spec-approval.js.map +1 -0
  412. package/dist/daemon/services/spec-gate.d.ts +54 -0
  413. package/dist/daemon/services/spec-gate.d.ts.map +1 -0
  414. package/dist/daemon/services/spec-gate.js +113 -0
  415. package/dist/daemon/services/spec-gate.js.map +1 -0
  416. package/dist/daemon/services/task-boundary-classifier.d.ts +78 -0
  417. package/dist/daemon/services/task-boundary-classifier.d.ts.map +1 -0
  418. package/dist/daemon/services/task-boundary-classifier.js +202 -0
  419. package/dist/daemon/services/task-boundary-classifier.js.map +1 -0
  420. package/dist/daemon/services/task-segmenter.d.ts +219 -1
  421. package/dist/daemon/services/task-segmenter.d.ts.map +1 -1
  422. package/dist/daemon/services/task-segmenter.js +481 -17
  423. package/dist/daemon/services/task-segmenter.js.map +1 -1
  424. package/dist/daemon/services/violation-reporter.d.ts +130 -0
  425. package/dist/daemon/services/violation-reporter.d.ts.map +1 -0
  426. package/dist/daemon/services/violation-reporter.js +339 -0
  427. package/dist/daemon/services/violation-reporter.js.map +1 -0
  428. package/dist/daemon/skill-sync.d.ts +7 -2
  429. package/dist/daemon/skill-sync.d.ts.map +1 -1
  430. package/dist/daemon/skill-sync.js +114 -9
  431. package/dist/daemon/skill-sync.js.map +1 -1
  432. package/dist/daemon/templates/agents/claudemd-writer.md +101 -0
  433. package/dist/daemon/templates/agents/coder.md +105 -0
  434. package/dist/daemon/templates/agents/decision-maker.md +460 -0
  435. package/dist/daemon/templates/agents/doc-reviewer.md +115 -0
  436. package/dist/daemon/templates/agents/harness-debug-full.md +114 -0
  437. package/dist/daemon/templates/agents/harness-hotfix.md +99 -0
  438. package/dist/daemon/templates/agents/hybrid-feature-with-safety.md +104 -0
  439. package/dist/daemon/templates/agents/knowledge-builder.md +119 -0
  440. package/dist/daemon/templates/agents/patch-applier.md +144 -0
  441. package/dist/daemon/templates/agents/planner.md +165 -0
  442. package/dist/daemon/templates/agents/refactor-specialist.md +98 -0
  443. package/dist/daemon/templates/agents/skill-distiller.md +113 -0
  444. package/dist/daemon/templates/agents/task-boundary-classifier.md +64 -0
  445. package/dist/daemon/templates/agents/verify-agent.md +136 -0
  446. package/dist/daemon/utils/inject-block.d.ts +39 -0
  447. package/dist/daemon/utils/inject-block.d.ts.map +1 -0
  448. package/dist/daemon/utils/inject-block.js +25 -0
  449. package/dist/daemon/utils/inject-block.js.map +1 -0
  450. package/dist/hooks/hook-lib.sh +8 -0
  451. package/dist/hooks/notification.sh +19 -8
  452. package/dist/hooks/post-tool-use.sh +41 -23
  453. package/dist/hooks/pre-tool-use.sh +54 -23
  454. package/dist/hooks/session-start.sh +68 -0
  455. package/dist/hooks/stop.sh +24 -10
  456. package/dist/hooks/user-prompt-submit.sh +37 -21
  457. package/dist/knowledge/adapters/go-adapter.d.ts +65 -0
  458. package/dist/knowledge/adapters/go-adapter.d.ts.map +1 -0
  459. package/dist/knowledge/adapters/go-adapter.js +294 -0
  460. package/dist/knowledge/adapters/go-adapter.js.map +1 -0
  461. package/dist/knowledge/adapters/index.d.ts +41 -0
  462. package/dist/knowledge/adapters/index.d.ts.map +1 -0
  463. package/dist/knowledge/adapters/index.js +71 -0
  464. package/dist/knowledge/adapters/index.js.map +1 -0
  465. package/dist/knowledge/adapters/java-adapter.d.ts +66 -0
  466. package/dist/knowledge/adapters/java-adapter.d.ts.map +1 -0
  467. package/dist/knowledge/adapters/java-adapter.js +260 -0
  468. package/dist/knowledge/adapters/java-adapter.js.map +1 -0
  469. package/dist/knowledge/adapters/js-vue-adapter.d.ts +56 -0
  470. package/dist/knowledge/adapters/js-vue-adapter.d.ts.map +1 -0
  471. package/dist/knowledge/adapters/js-vue-adapter.js +203 -0
  472. package/dist/knowledge/adapters/js-vue-adapter.js.map +1 -0
  473. package/dist/knowledge/adapters/kotlin-adapter.d.ts +55 -0
  474. package/dist/knowledge/adapters/kotlin-adapter.d.ts.map +1 -0
  475. package/dist/knowledge/adapters/kotlin-adapter.js +209 -0
  476. package/dist/knowledge/adapters/kotlin-adapter.js.map +1 -0
  477. package/dist/knowledge/adapters/monorepo-adapter.d.ts +77 -0
  478. package/dist/knowledge/adapters/monorepo-adapter.d.ts.map +1 -0
  479. package/dist/knowledge/adapters/monorepo-adapter.js +170 -0
  480. package/dist/knowledge/adapters/monorepo-adapter.js.map +1 -0
  481. package/dist/knowledge/adapters/python-adapter.d.ts +89 -0
  482. package/dist/knowledge/adapters/python-adapter.d.ts.map +1 -0
  483. package/dist/knowledge/adapters/python-adapter.js +358 -0
  484. package/dist/knowledge/adapters/python-adapter.js.map +1 -0
  485. package/dist/knowledge/adapters/rust-adapter.d.ts +73 -0
  486. package/dist/knowledge/adapters/rust-adapter.d.ts.map +1 -0
  487. package/dist/knowledge/adapters/rust-adapter.js +329 -0
  488. package/dist/knowledge/adapters/rust-adapter.js.map +1 -0
  489. package/dist/knowledge/adapters/types.d.ts +99 -0
  490. package/dist/knowledge/adapters/types.d.ts.map +1 -0
  491. package/dist/knowledge/adapters/types.js +17 -0
  492. package/dist/knowledge/adapters/types.js.map +1 -0
  493. package/dist/knowledge/adapters/typescript-adapter.d.ts +57 -0
  494. package/dist/knowledge/adapters/typescript-adapter.d.ts.map +1 -0
  495. package/dist/knowledge/adapters/typescript-adapter.js +171 -0
  496. package/dist/knowledge/adapters/typescript-adapter.js.map +1 -0
  497. package/dist/knowledge/audit-applier.d.ts +70 -0
  498. package/dist/knowledge/audit-applier.d.ts.map +1 -0
  499. package/dist/knowledge/audit-applier.js +251 -0
  500. package/dist/knowledge/audit-applier.js.map +1 -0
  501. package/dist/knowledge/builder.d.ts +261 -0
  502. package/dist/knowledge/builder.d.ts.map +1 -0
  503. package/dist/knowledge/builder.js +937 -0
  504. package/dist/knowledge/builder.js.map +1 -0
  505. package/dist/knowledge/cli-provider.d.ts +151 -0
  506. package/dist/knowledge/cli-provider.d.ts.map +1 -0
  507. package/dist/knowledge/cli-provider.js +313 -0
  508. package/dist/knowledge/cli-provider.js.map +1 -0
  509. package/dist/knowledge/constants.d.ts +73 -0
  510. package/dist/knowledge/constants.d.ts.map +1 -0
  511. package/dist/knowledge/constants.js +93 -0
  512. package/dist/knowledge/constants.js.map +1 -0
  513. package/dist/knowledge/cross-module.d.ts +139 -0
  514. package/dist/knowledge/cross-module.d.ts.map +1 -0
  515. package/dist/knowledge/cross-module.js +370 -0
  516. package/dist/knowledge/cross-module.js.map +1 -0
  517. package/dist/knowledge/git-hooks.d.ts +67 -0
  518. package/dist/knowledge/git-hooks.d.ts.map +1 -0
  519. package/dist/knowledge/git-hooks.js +258 -0
  520. package/dist/knowledge/git-hooks.js.map +1 -0
  521. package/dist/knowledge/module-hash.d.ts +88 -0
  522. package/dist/knowledge/module-hash.d.ts.map +1 -0
  523. package/dist/knowledge/module-hash.js +162 -0
  524. package/dist/knowledge/module-hash.js.map +1 -0
  525. package/dist/knowledge/project-detector.d.ts +101 -0
  526. package/dist/knowledge/project-detector.d.ts.map +1 -0
  527. package/dist/knowledge/project-detector.js +223 -0
  528. package/dist/knowledge/project-detector.js.map +1 -0
  529. package/dist/knowledge/prompt.d.ts +228 -0
  530. package/dist/knowledge/prompt.d.ts.map +1 -0
  531. package/dist/knowledge/prompt.js +404 -0
  532. package/dist/knowledge/prompt.js.map +1 -0
  533. package/dist/knowledge/query.d.ts +105 -0
  534. package/dist/knowledge/query.d.ts.map +1 -0
  535. package/dist/knowledge/query.js +341 -0
  536. package/dist/knowledge/query.js.map +1 -0
  537. package/dist/knowledge/repo-map.d.ts +91 -0
  538. package/dist/knowledge/repo-map.d.ts.map +1 -0
  539. package/dist/knowledge/repo-map.js +408 -0
  540. package/dist/knowledge/repo-map.js.map +1 -0
  541. package/dist/knowledge/tools/index.d.ts +14 -0
  542. package/dist/knowledge/tools/index.d.ts.map +1 -0
  543. package/dist/knowledge/tools/index.js +11 -0
  544. package/dist/knowledge/tools/index.js.map +1 -0
  545. package/dist/knowledge/tools/knowledge-get-page.d.ts +46 -0
  546. package/dist/knowledge/tools/knowledge-get-page.d.ts.map +1 -0
  547. package/dist/knowledge/tools/knowledge-get-page.js +101 -0
  548. package/dist/knowledge/tools/knowledge-get-page.js.map +1 -0
  549. package/dist/knowledge/tools/knowledge-query.d.ts +77 -0
  550. package/dist/knowledge/tools/knowledge-query.d.ts.map +1 -0
  551. package/dist/knowledge/tools/knowledge-query.js +104 -0
  552. package/dist/knowledge/tools/knowledge-query.js.map +1 -0
  553. package/dist/knowledge/tools/repo-map-lookup.d.ts +45 -0
  554. package/dist/knowledge/tools/repo-map-lookup.d.ts.map +1 -0
  555. package/dist/knowledge/tools/repo-map-lookup.js +82 -0
  556. package/dist/knowledge/tools/repo-map-lookup.js.map +1 -0
  557. package/dist/knowledge/types.d.ts +269 -0
  558. package/dist/knowledge/types.d.ts.map +1 -0
  559. package/dist/knowledge/types.js +10 -0
  560. package/dist/knowledge/types.js.map +1 -0
  561. package/dist/knowledge/validator.d.ts +90 -0
  562. package/dist/knowledge/validator.d.ts.map +1 -0
  563. package/dist/knowledge/validator.js +288 -0
  564. package/dist/knowledge/validator.js.map +1 -0
  565. package/dist/mcp/server.d.ts.map +1 -1
  566. package/dist/mcp/server.js +222 -1
  567. package/dist/mcp/server.js.map +1 -1
  568. package/dist/skills/builtin-skills.d.ts +35 -0
  569. package/dist/skills/builtin-skills.d.ts.map +1 -0
  570. package/dist/skills/builtin-skills.js +68 -0
  571. package/dist/skills/builtin-skills.js.map +1 -0
  572. package/dist/skills/distill/attribution.d.ts +59 -0
  573. package/dist/skills/distill/attribution.d.ts.map +1 -0
  574. package/dist/skills/distill/attribution.js +101 -0
  575. package/dist/skills/distill/attribution.js.map +1 -0
  576. package/dist/skills/distill/claude-cli-resolver.d.ts +26 -0
  577. package/dist/skills/distill/claude-cli-resolver.d.ts.map +1 -0
  578. package/dist/skills/distill/claude-cli-resolver.js +115 -0
  579. package/dist/skills/distill/claude-cli-resolver.js.map +1 -0
  580. package/dist/skills/distill/distiller.d.ts +161 -0
  581. package/dist/skills/distill/distiller.d.ts.map +1 -0
  582. package/dist/skills/distill/distiller.js +461 -0
  583. package/dist/skills/distill/distiller.js.map +1 -0
  584. package/dist/skills/distill/index.d.ts +223 -0
  585. package/dist/skills/distill/index.d.ts.map +1 -0
  586. package/dist/skills/distill/index.js +466 -0
  587. package/dist/skills/distill/index.js.map +1 -0
  588. package/dist/skills/distill/project-anchor-guard.d.ts +116 -0
  589. package/dist/skills/distill/project-anchor-guard.d.ts.map +1 -0
  590. package/dist/skills/distill/project-anchor-guard.js +334 -0
  591. package/dist/skills/distill/project-anchor-guard.js.map +1 -0
  592. package/dist/skills/distill/topic-deduper.d.ts +77 -0
  593. package/dist/skills/distill/topic-deduper.d.ts.map +1 -0
  594. package/dist/skills/distill/topic-deduper.js +119 -0
  595. package/dist/skills/distill/topic-deduper.js.map +1 -0
  596. package/dist/skills/distill/upstream-fetcher.d.ts +71 -0
  597. package/dist/skills/distill/upstream-fetcher.d.ts.map +1 -0
  598. package/dist/skills/distill/upstream-fetcher.js +202 -0
  599. package/dist/skills/distill/upstream-fetcher.js.map +1 -0
  600. package/dist/skills/distilled/distilled-api-design.md +491 -0
  601. package/dist/skills/distilled/distilled-architecture-decision.md +173 -0
  602. package/dist/skills/distilled/distilled-creator.md +178 -0
  603. package/dist/skills/distilled/distilled-db-schema-design.md +245 -0
  604. package/dist/skills/distilled/distilled-defi-amm-security.md +293 -0
  605. package/dist/skills/distilled/distilled-executing-plans.md +113 -0
  606. package/dist/skills/distilled/distilled-harness-engineering.md +242 -0
  607. package/dist/skills/distilled/distilled-karpathy-guidelines.md +104 -0
  608. package/dist/skills/distilled/distilled-performance-optimization.md +175 -0
  609. package/dist/skills/distilled/distilled-spec-driven-design.md +193 -0
  610. package/dist/skills/distilled/distilled-systematic-debugging.md +306 -0
  611. package/dist/skills/distilled/distilled-verification-before-completion.md +203 -0
  612. package/dist/skills/keyword-score.d.ts +29 -0
  613. package/dist/skills/keyword-score.d.ts.map +1 -0
  614. package/dist/skills/keyword-score.js +54 -0
  615. package/dist/skills/keyword-score.js.map +1 -0
  616. package/dist/skills/registry.d.ts +64 -20
  617. package/dist/skills/registry.d.ts.map +1 -1
  618. package/dist/skills/registry.js +102 -105
  619. package/dist/skills/registry.js.map +1 -1
  620. package/dist/skills/tools/pipeline-suggest.js +14 -14
  621. package/dist/skills/tools/skill-invoke.d.ts +1 -1
  622. package/dist/skills/tools/skill-invoke.js +1 -1
  623. package/dist/web/routes/agent-content.d.ts +30 -0
  624. package/dist/web/routes/agent-content.d.ts.map +1 -0
  625. package/dist/web/routes/agent-content.js +139 -0
  626. package/dist/web/routes/agent-content.js.map +1 -0
  627. package/dist/web/routes/decisions.d.ts +15 -0
  628. package/dist/web/routes/decisions.d.ts.map +1 -0
  629. package/dist/web/routes/decisions.js +181 -0
  630. package/dist/web/routes/decisions.js.map +1 -0
  631. package/dist/web/routes/diagnostics.d.ts +61 -0
  632. package/dist/web/routes/diagnostics.d.ts.map +1 -0
  633. package/dist/web/routes/diagnostics.js +203 -0
  634. package/dist/web/routes/diagnostics.js.map +1 -0
  635. package/dist/web/routes/events.d.ts.map +1 -1
  636. package/dist/web/routes/events.js +24 -0
  637. package/dist/web/routes/events.js.map +1 -1
  638. package/dist/web/routes/health.d.ts +33 -0
  639. package/dist/web/routes/health.d.ts.map +1 -0
  640. package/dist/web/routes/health.js +37 -0
  641. package/dist/web/routes/health.js.map +1 -0
  642. package/dist/web/routes/insights.d.ts +0 -5
  643. package/dist/web/routes/insights.d.ts.map +1 -1
  644. package/dist/web/routes/insights.js +783 -2
  645. package/dist/web/routes/insights.js.map +1 -1
  646. package/dist/web/routes/knowledge.d.ts +16 -0
  647. package/dist/web/routes/knowledge.d.ts.map +1 -0
  648. package/dist/web/routes/knowledge.js +661 -0
  649. package/dist/web/routes/knowledge.js.map +1 -0
  650. package/dist/web/routes/patch.d.ts +60 -1
  651. package/dist/web/routes/patch.d.ts.map +1 -1
  652. package/dist/web/routes/patch.js +170 -64
  653. package/dist/web/routes/patch.js.map +1 -1
  654. package/dist/web/routes/pipeline.d.ts +37 -0
  655. package/dist/web/routes/pipeline.d.ts.map +1 -0
  656. package/dist/web/routes/pipeline.js +149 -0
  657. package/dist/web/routes/pipeline.js.map +1 -0
  658. package/dist/web/routes/rules.d.ts.map +1 -1
  659. package/dist/web/routes/rules.js +6 -1
  660. package/dist/web/routes/rules.js.map +1 -1
  661. package/dist/web/routes/sessions.d.ts.map +1 -1
  662. package/dist/web/routes/sessions.js +9 -1
  663. package/dist/web/routes/sessions.js.map +1 -1
  664. package/dist/web/routes/skill-content.d.ts +30 -0
  665. package/dist/web/routes/skill-content.d.ts.map +1 -0
  666. package/dist/web/routes/skill-content.js +117 -0
  667. package/dist/web/routes/skill-content.js.map +1 -0
  668. package/dist/web/routes/skills-distill.d.ts +29 -0
  669. package/dist/web/routes/skills-distill.d.ts.map +1 -0
  670. package/dist/web/routes/skills-distill.js +552 -0
  671. package/dist/web/routes/skills-distill.js.map +1 -0
  672. package/dist/web/routes/skills.js +7 -7
  673. package/dist/web/routes/skills.js.map +1 -1
  674. package/dist/web/routes/task-timeline.d.ts +102 -0
  675. package/dist/web/routes/task-timeline.d.ts.map +1 -0
  676. package/dist/web/routes/task-timeline.js +274 -0
  677. package/dist/web/routes/task-timeline.js.map +1 -0
  678. package/dist/web/routes/tasks.d.ts.map +1 -1
  679. package/dist/web/routes/tasks.js +355 -8
  680. package/dist/web/routes/tasks.js.map +1 -1
  681. package/dist/web/routes/trace.d.ts.map +1 -1
  682. package/dist/web/routes/trace.js +3 -2
  683. package/dist/web/routes/trace.js.map +1 -1
  684. package/dist/web/routes/types.d.ts +0 -4
  685. package/dist/web/routes/types.d.ts.map +1 -1
  686. package/dist/web/routes/types.js +1 -1
  687. package/dist/web/routes/types.js.map +1 -1
  688. package/dist/web/routes/violations.d.ts +14 -0
  689. package/dist/web/routes/violations.d.ts.map +1 -0
  690. package/dist/web/routes/violations.js +111 -0
  691. package/dist/web/routes/violations.js.map +1 -0
  692. package/dist/web/server.d.ts.map +1 -1
  693. package/dist/web/server.js +79 -19
  694. package/dist/web/server.js.map +1 -1
  695. package/dist/web/services/build-manager.d.ts +72 -0
  696. package/dist/web/services/build-manager.d.ts.map +1 -0
  697. package/dist/web/services/build-manager.js +189 -0
  698. package/dist/web/services/build-manager.js.map +1 -0
  699. package/dist/web/services/distill-manager.d.ts +125 -0
  700. package/dist/web/services/distill-manager.d.ts.map +1 -0
  701. package/dist/web/services/distill-manager.js +308 -0
  702. package/dist/web/services/distill-manager.js.map +1 -0
  703. package/dist/web/static/assets/AgentContentPage-DkeRNxok.js +2 -0
  704. package/dist/web/static/assets/AgentContentPage-DkeRNxok.js.map +1 -0
  705. package/dist/web/static/assets/AgentDelegationTable-ByBa0x1l.js +2 -0
  706. package/dist/web/static/assets/AgentDelegationTable-ByBa0x1l.js.map +1 -0
  707. package/dist/web/static/assets/ContextInsightsPage-oUk7_I8u.js +3 -0
  708. package/dist/web/static/assets/ContextInsightsPage-oUk7_I8u.js.map +1 -0
  709. package/dist/web/static/assets/DaemonHealthPage-DG2fyOP7.js +2 -0
  710. package/dist/web/static/assets/DaemonHealthPage-DG2fyOP7.js.map +1 -0
  711. package/dist/web/static/assets/DecisionsPage-CMAPEnKb.js +2 -0
  712. package/dist/web/static/assets/DecisionsPage-CMAPEnKb.js.map +1 -0
  713. package/dist/web/static/assets/DiagnosticsPage-DQd-Zm4r.js +2 -0
  714. package/dist/web/static/assets/DiagnosticsPage-DQd-Zm4r.js.map +1 -0
  715. package/dist/web/static/assets/DriftTab-DqpepOhI.js +2 -0
  716. package/dist/web/static/assets/DriftTab-DqpepOhI.js.map +1 -0
  717. package/dist/web/static/assets/HealthHomePage-CN6zNIie.js +3 -0
  718. package/dist/web/static/assets/HealthHomePage-CN6zNIie.js.map +1 -0
  719. package/dist/web/static/assets/KbHitRateTable-ByEIWujF.js +2 -0
  720. package/dist/web/static/assets/KbHitRateTable-ByEIWujF.js.map +1 -0
  721. package/dist/web/static/assets/MarkdownRenderer-DZmTl-8J.js +3 -0
  722. package/dist/web/static/assets/MarkdownRenderer-DZmTl-8J.js.map +1 -0
  723. package/dist/web/static/assets/NotFound-BQPh0vaF.js +2 -0
  724. package/dist/web/static/assets/NotFound-BQPh0vaF.js.map +1 -0
  725. package/dist/web/static/assets/ProjectSwitcher-D3lZMFd3.js +2 -0
  726. package/dist/web/static/assets/ProjectSwitcher-D3lZMFd3.js.map +1 -0
  727. package/dist/web/static/assets/SettingsPage-oLJBNzQj.js +2 -0
  728. package/dist/web/static/assets/SettingsPage-oLJBNzQj.js.map +1 -0
  729. package/dist/web/static/assets/SkillContentPage-DK5rgfgw.js +2 -0
  730. package/dist/web/static/assets/SkillContentPage-DK5rgfgw.js.map +1 -0
  731. package/dist/web/static/assets/SkillStatsTable-DYMzjEUV.js +2 -0
  732. package/dist/web/static/assets/SkillStatsTable-DYMzjEUV.js.map +1 -0
  733. package/dist/web/static/assets/SkillsDistillTab-C7qaG8q3.js +2 -0
  734. package/dist/web/static/assets/SkillsDistillTab-C7qaG8q3.js.map +1 -0
  735. package/dist/web/static/assets/TasksHubPage-03wsRRsJ.js +6 -0
  736. package/dist/web/static/assets/TasksHubPage-03wsRRsJ.js.map +1 -0
  737. package/dist/web/static/assets/ViolationsPage-DSiLr-9O.js +3 -0
  738. package/dist/web/static/assets/ViolationsPage-DSiLr-9O.js.map +1 -0
  739. package/dist/web/static/assets/arco-Bhi3a6Qp.js +14 -0
  740. package/dist/web/static/assets/arco-Bhi3a6Qp.js.map +1 -0
  741. package/dist/web/static/assets/arco-DFQA6dO_.css +1 -0
  742. package/dist/web/static/assets/charts-BuHQWDbQ.js +37 -0
  743. package/dist/web/static/assets/charts-BuHQWDbQ.js.map +1 -0
  744. package/dist/web/static/assets/date-fns-sbWH3_uq.js +2 -0
  745. package/dist/web/static/assets/date-fns-sbWH3_uq.js.map +1 -0
  746. package/dist/web/static/assets/index-7bl3kbcx.css +1 -0
  747. package/dist/web/static/assets/index-BIYnq1Dx.js +4 -0
  748. package/dist/web/static/assets/index-BIYnq1Dx.js.map +1 -0
  749. package/dist/web/static/assets/lucide-CnlPQoG8.js +72 -0
  750. package/dist/web/static/assets/lucide-CnlPQoG8.js.map +1 -0
  751. package/dist/web/static/assets/outcome-DUn1NjlC.js +2 -0
  752. package/dist/web/static/assets/outcome-DUn1NjlC.js.map +1 -0
  753. package/dist/web/static/assets/query-S6X1S7K9.js +2 -0
  754. package/dist/web/static/assets/{query-C99w429o.js.map → query-S6X1S7K9.js.map} +1 -1
  755. package/dist/web/static/assets/{react-router-r79dBVy4.js → react-router-JVUrkhdd.js} +3 -3
  756. package/dist/web/static/assets/{react-router-r79dBVy4.js.map → react-router-JVUrkhdd.js.map} +1 -1
  757. package/dist/web/static/assets/react-vendor-tkvCrao7.js +57 -0
  758. package/dist/web/static/assets/react-vendor-tkvCrao7.js.map +1 -0
  759. package/dist/web/static/assets/syntax-highlighter-BkZfCDsz.js +6 -0
  760. package/dist/web/static/assets/syntax-highlighter-BkZfCDsz.js.map +1 -0
  761. package/dist/web/static/assets/useTabsParam-k8qte_0C.js +2 -0
  762. package/dist/web/static/assets/useTabsParam-k8qte_0C.js.map +1 -0
  763. package/dist/web/static/assets/vendor-DWgdB1eY.js +65 -0
  764. package/dist/web/static/assets/vendor-DWgdB1eY.js.map +1 -0
  765. package/dist/web/static/index.html +12 -8
  766. package/package.json +14 -3
  767. package/dist/core/ai/provider.d.ts +0 -63
  768. package/dist/core/ai/provider.d.ts.map +0 -1
  769. package/dist/core/ai/provider.js +0 -241
  770. package/dist/core/ai/provider.js.map +0 -1
  771. package/dist/core/ai/types.d.ts +0 -43
  772. package/dist/core/ai/types.d.ts.map +0 -1
  773. package/dist/core/ai/types.js +0 -5
  774. package/dist/core/ai/types.js.map +0 -1
  775. package/dist/core/storage/token-usage.d.ts +0 -36
  776. package/dist/core/storage/token-usage.d.ts.map +0 -1
  777. package/dist/core/storage/token-usage.js +0 -59
  778. package/dist/core/storage/token-usage.js.map +0 -1
  779. package/dist/core/utils/token-tracker.d.ts +0 -39
  780. package/dist/core/utils/token-tracker.d.ts.map +0 -1
  781. package/dist/core/utils/token-tracker.js +0 -69
  782. package/dist/core/utils/token-tracker.js.map +0 -1
  783. package/dist/skills/index.d.ts +0 -3
  784. package/dist/skills/index.d.ts.map +0 -1
  785. package/dist/skills/index.js +0 -3
  786. package/dist/skills/index.js.map +0 -1
  787. package/dist/skills/matcher.d.ts +0 -26
  788. package/dist/skills/matcher.d.ts.map +0 -1
  789. package/dist/skills/matcher.js +0 -113
  790. package/dist/skills/matcher.js.map +0 -1
  791. package/dist/skills/official/code-simplifier.md +0 -52
  792. package/dist/skills/official/find-skills.md +0 -142
  793. package/dist/skills/official/official-api-design.md +0 -30
  794. package/dist/skills/official/official-architecture-decision.md +0 -41
  795. package/dist/skills/official/official-bmad.md +0 -118
  796. package/dist/skills/official/official-db-schema-design.md +0 -34
  797. package/dist/skills/official/official-debug.md +0 -25
  798. package/dist/skills/official/official-doc-driven.md +0 -31
  799. package/dist/skills/official/official-harness-engineering.md +0 -108
  800. package/dist/skills/official/official-openspec.md +0 -89
  801. package/dist/skills/official/official-performance-optimization.md +0 -30
  802. package/dist/skills/official/official-pr-review.md +0 -35
  803. package/dist/skills/official/official-release-checklist.md +0 -30
  804. package/dist/skills/official/official-security-hardening.md +0 -32
  805. package/dist/skills/official/official-spec-driven-design.md +0 -31
  806. package/dist/skills/official/planning-with-files.md +0 -241
  807. package/dist/skills/official/ui-ux-pro-max.md +0 -105
  808. package/dist/skills/official/webapp-testing.md +0 -96
  809. package/dist/skills/official-skills.d.ts +0 -26
  810. package/dist/skills/official-skills.d.ts.map +0 -1
  811. package/dist/skills/official-skills.js +0 -74
  812. package/dist/skills/official-skills.js.map +0 -1
  813. package/dist/skills/semantic-matcher.d.ts +0 -60
  814. package/dist/skills/semantic-matcher.d.ts.map +0 -1
  815. package/dist/skills/semantic-matcher.js +0 -192
  816. package/dist/skills/semantic-matcher.js.map +0 -1
  817. package/dist/skills/upgrade-engine.d.ts +0 -93
  818. package/dist/skills/upgrade-engine.d.ts.map +0 -1
  819. package/dist/skills/upgrade-engine.js +0 -447
  820. package/dist/skills/upgrade-engine.js.map +0 -1
  821. package/dist/skills/upgrade-prompt.d.ts +0 -20
  822. package/dist/skills/upgrade-prompt.d.ts.map +0 -1
  823. package/dist/skills/upgrade-prompt.js +0 -75
  824. package/dist/skills/upgrade-prompt.js.map +0 -1
  825. package/dist/web/routes/ai.d.ts +0 -10
  826. package/dist/web/routes/ai.d.ts.map +0 -1
  827. package/dist/web/routes/ai.js +0 -186
  828. package/dist/web/routes/ai.js.map +0 -1
  829. package/dist/web/routes/token-usage.d.ts +0 -7
  830. package/dist/web/routes/token-usage.d.ts.map +0 -1
  831. package/dist/web/routes/token-usage.js +0 -18
  832. package/dist/web/routes/token-usage.js.map +0 -1
  833. package/dist/web/ssrf-guard.d.ts +0 -35
  834. package/dist/web/ssrf-guard.d.ts.map +0 -1
  835. package/dist/web/ssrf-guard.js +0 -93
  836. package/dist/web/ssrf-guard.js.map +0 -1
  837. package/dist/web/static/assets/AIConfig-CdDWzJyO.js +0 -2
  838. package/dist/web/static/assets/AIConfig-CdDWzJyO.js.map +0 -1
  839. package/dist/web/static/assets/Dashboard-CoEmmIDt.js +0 -2
  840. package/dist/web/static/assets/Dashboard-CoEmmIDt.js.map +0 -1
  841. package/dist/web/static/assets/Drawer-DdRTzlLB.js +0 -2
  842. package/dist/web/static/assets/Drawer-DdRTzlLB.js.map +0 -1
  843. package/dist/web/static/assets/Events-DrIq1SUS.js +0 -2
  844. package/dist/web/static/assets/Events-DrIq1SUS.js.map +0 -1
  845. package/dist/web/static/assets/Reports-DFBM3MDK.js +0 -2
  846. package/dist/web/static/assets/Reports-DFBM3MDK.js.map +0 -1
  847. package/dist/web/static/assets/SearchInput-qCj_jAcf.js +0 -2
  848. package/dist/web/static/assets/SearchInput-qCj_jAcf.js.map +0 -1
  849. package/dist/web/static/assets/SessionDetail-CCzwdoT7.js +0 -2
  850. package/dist/web/static/assets/SessionDetail-CCzwdoT7.js.map +0 -1
  851. package/dist/web/static/assets/Sessions-FfLYkAw9.js +0 -2
  852. package/dist/web/static/assets/Sessions-FfLYkAw9.js.map +0 -1
  853. package/dist/web/static/assets/Skills-C8Gvs3Qa.js +0 -2
  854. package/dist/web/static/assets/Skills-C8Gvs3Qa.js.map +0 -1
  855. package/dist/web/static/assets/TaskDetail-BS8pYhaR.js +0 -2
  856. package/dist/web/static/assets/TaskDetail-BS8pYhaR.js.map +0 -1
  857. package/dist/web/static/assets/Tasks-CyuhizG8.js +0 -2
  858. package/dist/web/static/assets/Tasks-CyuhizG8.js.map +0 -1
  859. package/dist/web/static/assets/charts-CLrM0_uM.js +0 -37
  860. package/dist/web/static/assets/charts-CLrM0_uM.js.map +0 -1
  861. package/dist/web/static/assets/date-fns-CZ_bHujz.js +0 -2
  862. package/dist/web/static/assets/date-fns-CZ_bHujz.js.map +0 -1
  863. package/dist/web/static/assets/export-L_VBD2p1.js +0 -4
  864. package/dist/web/static/assets/export-L_VBD2p1.js.map +0 -1
  865. package/dist/web/static/assets/index-CBX47X8l.js +0 -3
  866. package/dist/web/static/assets/index-CBX47X8l.js.map +0 -1
  867. package/dist/web/static/assets/index-DjIoMdoR.css +0 -1
  868. package/dist/web/static/assets/lucide-Bs_edTLa.js +0 -232
  869. package/dist/web/static/assets/lucide-Bs_edTLa.js.map +0 -1
  870. package/dist/web/static/assets/query-C99w429o.js +0 -2
  871. package/dist/web/static/assets/react-vendor-CSp-GLFF.js +0 -49
  872. package/dist/web/static/assets/react-vendor-CSp-GLFF.js.map +0 -1
  873. package/dist/web/static/assets/syntax-highlighter-44FakypI.js +0 -9
  874. package/dist/web/static/assets/syntax-highlighter-44FakypI.js.map +0 -1
  875. package/dist/web/static/assets/task-title-BhOcemuR.js +0 -2
  876. package/dist/web/static/assets/task-title-BhOcemuR.js.map +0 -1
  877. package/dist/web/static/assets/time-Bxuk0M-C.js +0 -2
  878. package/dist/web/static/assets/time-Bxuk0M-C.js.map +0 -1
  879. package/dist/web/static/assets/vendor-CMMjVdZs.js +0 -64
  880. package/dist/web/static/assets/vendor-CMMjVdZs.js.map +0 -1
@@ -1,419 +1,144 @@
1
1
  /**
2
- * CLAUDE.md Generator — AI 驱动的 CLAUDE.md 生成与管理
2
+ * CLAUDE.md Generator — file I/O + directory scan helpers.
3
+ *
4
+ * History: this module used to drive a host-side AI completion to synthesize
5
+ * CLAUDE.md. After spec `0902-ai-config-removal-master-spec.md` (decision
6
+ * `f5a5b030`, sub-spec A R-D) all AI synthesis moved to the `claude` CLI
7
+ * shell-out path in `src/cli/commands/claudemd.ts` (via
8
+ * `src/core/utils/claude-cli-spawn.ts` against the `claudemd-writer`
9
+ * sub-agent). This module now only retains:
10
+ *
11
+ * - AUTO marker read/write helpers (used by callers that still want to
12
+ * preserve user-authored content outside the auto block — currently a
13
+ * reusable primitive with no production consumer, but kept since the
14
+ * associated tests still pin its contract)
15
+ * - The directory-tree scanner (also imported by the CLI to build the
16
+ * `<project_directory_tree>` payload for the agent)
17
+ *
18
+ * No `ai: ClaudeProvider` field; no `complete(...)` call sites.
3
19
  */
4
20
  import { readFileSync, writeFileSync, existsSync, readdirSync, statSync } from 'node:fs';
5
- import { dirname, join } from 'node:path';
6
- import { fileURLToPath } from 'node:url';
21
+ import { join } from 'node:path';
7
22
  import { TechDetector } from './tech-detector.js';
8
23
  const AUTO_START = '<!-- forge:claudemd-auto -->';
9
24
  const AUTO_END = '<!-- forge:end-claudemd-auto -->';
10
25
  /**
11
- * Swarm Protocol — fixed CLAUDE.md preface injected into every project.
12
- *
13
- * Loaded from `templates/swarm-protocol.md` (same directory as this module's
14
- * compiled output). `fileURLToPath(import.meta.url)` resolves to either
15
- * `src/claudemd/` (dev via tsx) or `dist/claudemd/` (npm install) — both
16
- * have a sibling `templates/` directory after build (see package.json `build`
17
- * script which copies *.md into dist/claudemd/templates/).
26
+ * Java-aware directory annotations. Re-used when the caller passes
27
+ * `addComments: true` (typically only for Java projects where the package
28
+ * structure is dense).
29
+ */
30
+ const JAVA_COMMENTS = {
31
+ 'controller': '# 控制器层',
32
+ 'service': '# 服务层',
33
+ 'impl': '# 服务实现类',
34
+ 'mapper': '# MyBatis Mapper 接口',
35
+ 'entity': '# 实体类',
36
+ 'dto': '# 数据传输对象',
37
+ 'vo': '# 视图对象',
38
+ 'config': '# 配置类',
39
+ 'util': '# 工具类',
40
+ 'utils': '# 工具类',
41
+ 'common': '# 公共模块',
42
+ 'exception': '# 异常类',
43
+ 'interceptor': '# 拦截器',
44
+ 'filter': '# 过滤器',
45
+ 'aspect': '# 切面',
46
+ 'resources': '# 配置文件、静态资源',
47
+ 'application.yml': '# 应用配置文件',
48
+ 'application.yaml': '# 应用配置文件',
49
+ 'pom.xml': '# Maven 配置文件',
50
+ 'build.gradle': '# Gradle 配置文件',
51
+ 'README.md': '# 项目说明文档',
52
+ };
53
+ const IGNORE_DIRS = new Set([
54
+ 'node_modules', '.git', '.idea', '.vscode', '.DS_Store',
55
+ 'dist', 'build', 'target', 'out', '.next', '.nuxt',
56
+ '__pycache__', '.pytest_cache', '.mypy_cache',
57
+ 'vendor', 'coverage', '.nyc_output', 'tmp', 'temp',
58
+ ]);
59
+ // Deep noise: traversed at depth 1 but never descended into.
60
+ const SHALLOW_ONLY = new Set([
61
+ 'executions', 'by-route', 'history', 'logs', 'cache',
62
+ ]);
63
+ /**
64
+ * Scan a project directory and return a tree representation suitable for
65
+ * embedding in markdown. Used by both `ClaudeMdGenerator` (legacy callers /
66
+ * tests) and `src/cli/commands/claudemd.ts` (current `cf claudemd` flow that
67
+ * feeds the tree to the `claudemd-writer` agent).
18
68
  *
19
- * Cached at module level: the file is read at most once per process.
69
+ * - `maxDepth` controls how deep to recurse (typical: 2 for non-Java, 4 for
70
+ * Java where the package nesting matters).
71
+ * - `addComments=true` enables Java directory-name annotations (controller,
72
+ * service, mapper, …) — host caller decides based on detected stack.
20
73
  */
21
- let _swarmProtocolCache = null;
22
- function getSwarmProtocol() {
23
- if (_swarmProtocolCache !== null)
24
- return _swarmProtocolCache;
25
- const thisDir = dirname(fileURLToPath(import.meta.url));
26
- const p = join(thisDir, 'templates', 'swarm-protocol.md');
27
- if (!existsSync(p)) {
28
- throw new Error(`[ClaudeMdGenerator] swarm-protocol.md not found at ${p}. ` +
29
- `This indicates a broken build/install. Run \`npm run build\` or reinstall the package.`);
30
- }
31
- _swarmProtocolCache = readFileSync(p, 'utf-8');
32
- return _swarmProtocolCache;
33
- }
34
- export class ClaudeMdGenerator {
35
- ai;
36
- detector;
37
- constructor(ai, detector) {
38
- this.ai = ai;
39
- this.detector = detector ?? new TechDetector();
40
- }
41
- /**
42
- * 检测技术栈 + 生成 CLAUDE.md
43
- *
44
- * 策略:Swarm 协议是固定内容(不依赖 AI),项目信息尝试用 AI 生成,
45
- * 失败时回退到基于技术栈检测的模板。
46
- */
47
- async generate(projectPath, userContent) {
48
- const stack = this.detector.detect(projectPath);
49
- // 1. 尝试 AI 生成项目特定内容
50
- let projectContent = '';
74
+ export function scanDirectoryTree(projectPath, maxDepth, addComments = false) {
75
+ const lines = [];
76
+ const walk = (dir, prefix, depth) => {
77
+ if (depth > maxDepth)
78
+ return;
79
+ let entries = [];
51
80
  try {
52
- const prompt = this.buildPrompt(stack, projectPath);
53
- const aiResult = await this.ai.complete(prompt, {
54
- system: 'You are a technical writer. Output ONLY markdown content for a CLAUDE.md file. Do NOT ask questions or explain what you will do. Start directly with ## headers.',
55
- maxTokens: 4096,
56
- // 4096-token 生成在转发网关(如 one.iflytek 等)下容易超过默认 30s;
57
- // 给 CLAUDE.md 生成单独拉长超时,失败再回退到本地模板。
58
- timeoutMs: 120_000,
59
- });
60
- // 验证 AI 输出是否有效(至少包含一个 ## 标题)
61
- if (aiResult && aiResult.includes('##')) {
62
- // AI 经常在"目录结构"章节退化成 project-root/com/example/project 模板,
63
- // 不可信任;强制替换为真实扫描结果。
64
- projectContent = this.overrideDirectoryStructure(aiResult, stack, projectPath);
65
- }
81
+ entries = readdirSync(dir).filter((e) => !IGNORE_DIRS.has(e));
66
82
  }
67
83
  catch {
68
- // AI 失败,使用模板回退
69
- }
70
- // 2. 如果 AI 失败或返回无效内容,使用模板
71
- if (!projectContent) {
72
- projectContent = this.buildFallbackContent(stack, projectPath);
73
- }
74
- // 3. Swarm 协议 + 项目内容
75
- const full = getSwarmProtocol() + '\n\n' + projectContent;
76
- return this.merge(full, userContent);
77
- }
78
- /**
79
- * 基于技术栈检测的回退模板(不依赖 AI)
80
- *
81
- * 即使 AI 调用失败,也要生成足够丰富的项目指引,让 Claude Code 拿到:
82
- * - 技术栈概览(含版本、包管理器、测试 / Linter)
83
- * - 构建 / 测试 / 运行命令(按包管理器分发)
84
- * - 目录结构(扫描项目根目录真实结构)
85
- * - 代码规范(命名、提交信息、PR 流程)
86
- * - 常见陷阱(按技术栈定制)
87
- * - 贡献指南
88
- */
89
- buildFallbackContent(stack, projectPath) {
90
- const sections = [];
91
- sections.push(this.sectionOverview(stack));
92
- sections.push(this.sectionTechStack(stack));
93
- sections.push(this.sectionBuildCommands(stack));
94
- sections.push(this.sectionDirectoryStructure(stack, projectPath));
95
- sections.push(this.sectionCodingStandards(stack));
96
- sections.push(this.sectionCommonPitfalls(stack));
97
- sections.push(this.sectionContributionGuide(stack));
98
- return sections.filter(Boolean).join('\n\n');
99
- }
100
- sectionOverview(stack) {
101
- const lang = stack.language[0] || '未识别';
102
- const framework = stack.framework.length > 0 ? ` + ${stack.framework.join(' / ')}` : '';
103
- return [
104
- '## 项目概述',
105
- '',
106
- `本项目基于 ${lang}${framework} 构建。请根据实际业务补充项目目标、核心模块职责与上下游依赖。`,
107
- ].join('\n');
108
- }
109
- sectionTechStack(stack) {
110
- const lines = ['## 技术栈', ''];
111
- if (stack.language.length > 0) {
112
- lines.push(`- **语言**: ${stack.language.join(', ')}`);
113
- }
114
- if (stack.framework.length > 0) {
115
- const descs = stack.framework.map(fw => `${fw}${this.frameworkHint(fw)}`);
116
- lines.push(`- **框架**: ${descs.join(', ')}`);
117
- }
118
- lines.push(`- **包管理器**: ${stack.packageManager}`);
119
- if (stack.testFramework) {
120
- lines.push(`- **测试框架**: ${stack.testFramework}`);
121
- }
122
- if (stack.linter) {
123
- lines.push(`- **代码检查**: ${stack.linter}`);
124
- }
125
- const ecosystem = this.ecosystemNotes(stack);
126
- if (ecosystem) {
127
- lines.push('', ecosystem);
128
- }
129
- return lines.join('\n');
130
- }
131
- frameworkHint(fw) {
132
- const hints = {
133
- 'Spring Boot': '(IoC 容器 + 自动配置,所有组件通过注解注入)',
134
- MyBatis: '(SQL 映射,Mapper 接口 + XML)',
135
- Dubbo: '(RPC 框架,服务注册与发现)',
136
- React: '(组件化 UI,单向数据流)',
137
- 'Next.js': '(React 全栈框架,支持 SSR / SSG)',
138
- Vue: '(渐进式 UI 框架)',
139
- Express: '(Node.js Web 框架,中间件模型)',
140
- Fastify: '(高性能 Node.js Web 框架)',
141
- NestJS: '(Node.js 企业级框架,装饰器 + DI)',
142
- };
143
- return hints[fw] || '';
144
- }
145
- ecosystemNotes(stack) {
146
- if (stack.language.some(l => l.startsWith('Java'))) {
147
- return '> Java 生态约定:包名全小写,类名 PascalCase,方法 camelCase;Maven / Gradle 依赖统一在顶层 pom.xml / build.gradle 管理,子模块只声明坐标不重复版本。';
148
- }
149
- if (stack.language.includes('TypeScript')) {
150
- return '> TypeScript 生态约定:开启 strict 模式,模块边界用 interface,内部用 type;async/await 优先,禁止混用 Promise 链。';
151
- }
152
- if (stack.language.some(l => l.startsWith('Go'))) {
153
- return '> Go 生态约定:使用 gofmt 自动格式化;错误值必须显式处理,不得丢弃;包名全小写且与目录名一致。';
154
- }
155
- if (stack.language.includes('Rust')) {
156
- return '> Rust 生态约定:`cargo fmt` + `cargo clippy` 双重检查;尽量使用 Result / Option,避免 panic;mod.rs 或 `<name>.rs` 二选一。';
157
- }
158
- if (stack.language.includes('Python')) {
159
- return '> Python 生态约定:遵循 PEP8;建议启用 mypy / ruff;虚拟环境隔离依赖。';
160
- }
161
- return '';
162
- }
163
- sectionBuildCommands(stack) {
164
- const lines = ['## 构建与测试', '', '```bash'];
165
- const pm = stack.packageManager;
166
- if (pm === 'npm') {
167
- lines.push('# 安装依赖', 'npm install', '', '# 开发模式(如适用)', 'npm run dev', '', '# 构建产物', 'npm run build', '', '# 运行测试', 'npm test', '', '# 类型检查(TypeScript)', 'npx tsc --noEmit');
168
- }
169
- else if (pm === 'pnpm') {
170
- lines.push('pnpm install', 'pnpm dev', 'pnpm build', 'pnpm test');
171
- }
172
- else if (pm === 'yarn') {
173
- lines.push('yarn', 'yarn dev', 'yarn build', 'yarn test');
174
- }
175
- else if (pm === 'bun') {
176
- lines.push('bun install', 'bun run dev', 'bun run build', 'bun test');
177
- }
178
- else if (pm === 'maven') {
179
- lines.push('# 清理并编译', 'mvn clean compile', '', '# 运行测试', 'mvn test', '', '# 打包(跳过测试加 -DskipTests)', 'mvn clean package', '', '# 本地安装到 ~/.m2', 'mvn clean install', '', '# 启动 Spring Boot(若适用)', 'mvn spring-boot:run');
180
- }
181
- else if (pm === 'gradle') {
182
- lines.push('# 构建', './gradlew build', '', '# 运行测试', './gradlew test', '', '# 清理', './gradlew clean', '', '# 启动 Spring Boot(若适用)', './gradlew bootRun');
183
- }
184
- else if (pm === 'go mod') {
185
- lines.push('go mod tidy', 'go build ./...', 'go test ./...', 'go vet ./...');
186
- }
187
- else if (pm === 'cargo') {
188
- lines.push('cargo build', 'cargo test', 'cargo clippy -- -D warnings', 'cargo fmt --check');
189
- }
190
- else if (pm === 'pip' || pm === 'poetry' || pm === 'pipenv') {
191
- const prefix = pm === 'poetry' ? 'poetry run ' : pm === 'pipenv' ? 'pipenv run ' : '';
192
- lines.push(`${prefix}pytest`, `${prefix}python -m build`);
193
- }
194
- else {
195
- lines.push('# 请补充构建与测试命令');
84
+ return;
196
85
  }
197
- lines.push('```');
198
- return lines.join('\n');
199
- }
200
- sectionDirectoryStructure(stack, projectPath) {
201
- // Java 项目需要更深的层级才能看到包结构
202
- const isJava = stack.language.some(l => l.startsWith('Java'));
203
- const maxDepth = isJava ? 4 : 2;
204
- const tree = this.scanDirectoryTree(projectPath, maxDepth, isJava);
205
- if (!tree)
206
- return '';
207
- return ['## 目录结构', '', '```', tree, '```'].join('\n');
208
- }
209
- /**
210
- * 扫描项目根目录,生成树形结构(过滤噪声目录)
211
- */
212
- scanDirectoryTree(projectPath, maxDepth, addComments = false) {
213
- const IGNORE = new Set([
214
- 'node_modules', '.git', '.idea', '.vscode', '.DS_Store',
215
- 'dist', 'build', 'target', 'out', '.next', '.nuxt',
216
- '__pycache__', '.pytest_cache', '.mypy_cache',
217
- 'vendor', 'coverage', '.nyc_output', 'tmp', 'temp',
218
- ]);
219
- // 深目录噪声:这些目录即使不在 IGNORE 里,也不递归进去(避免爆炸)
220
- const SHALLOW_ONLY = new Set([
221
- 'executions', 'by-route', 'history', 'logs', 'cache',
222
- ]);
223
- // Java 项目目录注释映射
224
- const JAVA_COMMENTS = {
225
- 'controller': '# 控制器层',
226
- 'service': '# 服务层',
227
- 'impl': '# 服务实现类',
228
- 'mapper': '# MyBatis Mapper 接口',
229
- 'entity': '# 实体类',
230
- 'dto': '# 数据传输对象',
231
- 'vo': '# 视图对象',
232
- 'config': '# 配置类',
233
- 'util': '# 工具类',
234
- 'utils': '# 工具类',
235
- 'common': '# 公共模块',
236
- 'exception': '# 异常类',
237
- 'interceptor': '# 拦截器',
238
- 'filter': '# 过滤器',
239
- 'aspect': '# 切面',
240
- 'resources': '# 配置文件、静态资源',
241
- 'application.yml': '# 应用配置文件',
242
- 'application.yaml': '# 应用配置文件',
243
- 'pom.xml': '# Maven 配置文件',
244
- 'build.gradle': '# Gradle 配置文件',
245
- 'README.md': '# 项目说明文档',
246
- };
247
- const lines = [];
248
- const walk = (dir, prefix, depth) => {
249
- if (depth > maxDepth)
250
- return;
251
- let entries = [];
86
+ const stats = entries.map((e) => {
252
87
  try {
253
- entries = readdirSync(dir).filter(e => !IGNORE.has(e));
88
+ return { name: e, isDir: statSync(join(dir, e)).isDirectory() };
254
89
  }
255
90
  catch {
256
- return;
91
+ return { name: e, isDir: false };
257
92
  }
258
- // 文件在前,目录在后
259
- const stats = entries.map(e => {
260
- try {
261
- return { name: e, isDir: statSync(join(dir, e)).isDirectory() };
262
- }
263
- catch {
264
- return { name: e, isDir: false };
265
- }
266
- });
267
- const files = stats.filter(s => !s.isDir).map(s => s.name);
268
- const dirs = stats.filter(s => s.isDir).map(s => s.name);
269
- const sorted = [...dirs.sort(), ...files.sort()];
270
- sorted.forEach((name, idx) => {
271
- const isLast = idx === sorted.length - 1;
272
- const connector = isLast ? '└── ' : '├── ';
273
- const childPrefix = isLast ? ' ' : '│ ';
274
- const fullPath = join(dir, name);
275
- let isDir = false;
276
- try {
277
- isDir = statSync(fullPath).isDirectory();
278
- }
279
- catch {
280
- // ignore
281
- }
282
- // 构建行:名称 + 可选注释
283
- let line = prefix + connector + name + (isDir ? '/' : '');
284
- if (addComments) {
285
- const comment = JAVA_COMMENTS[name] || JAVA_COMMENTS[name.toLowerCase()];
286
- if (comment) {
287
- // 对齐注释(假设最长路径 60 字符)
288
- const padding = Math.max(1, 60 - line.length);
289
- line += ' '.repeat(padding) + comment;
290
- }
291
- }
292
- lines.push(line);
293
- // 递归条件:是目录 + 未达深度上限 + 不在浅层名单里
294
- if (isDir && depth < maxDepth && !SHALLOW_ONLY.has(name)) {
295
- walk(fullPath, prefix + childPrefix, depth + 1);
93
+ });
94
+ const files = stats.filter((s) => !s.isDir).map((s) => s.name);
95
+ const dirs = stats.filter((s) => s.isDir).map((s) => s.name);
96
+ const sorted = [...dirs.sort(), ...files.sort()];
97
+ sorted.forEach((name, idx) => {
98
+ const isLast = idx === sorted.length - 1;
99
+ const connector = isLast ? '└── ' : '├── ';
100
+ const childPrefix = isLast ? ' ' : '│ ';
101
+ const fullPath = join(dir, name);
102
+ let isDir = false;
103
+ try {
104
+ isDir = statSync(fullPath).isDirectory();
105
+ }
106
+ catch {
107
+ // ignore
108
+ }
109
+ let line = prefix + connector + name + (isDir ? '/' : '');
110
+ if (addComments) {
111
+ const comment = JAVA_COMMENTS[name] || JAVA_COMMENTS[name.toLowerCase()];
112
+ if (comment) {
113
+ const padding = Math.max(1, 60 - line.length);
114
+ line += ' '.repeat(padding) + comment;
296
115
  }
297
- });
298
- };
299
- // 根目录名:从路径提取真实项目名
300
- const rootName = projectPath.split('/').filter(Boolean).pop() || 'project';
301
- lines.push(rootName + '/');
302
- walk(projectPath, '', 1);
303
- return lines.join('\n');
304
- }
305
- sectionCodingStandards(stack) {
306
- const isJava = stack.language.some(l => l.startsWith('Java'));
307
- const isTs = stack.language.includes('TypeScript');
308
- const lines = ['## 代码规范', ''];
309
- lines.push('### 命名约定', '');
310
- if (isJava) {
311
- lines.push('- 包名:全小写,使用反向域名(`com.company.project.module`)');
312
- lines.push('- 类名:PascalCase(`UserService`、`OrderController`)');
313
- lines.push('- 方法名 / 变量名:camelCase(`getUserById`、`orderList`)');
314
- lines.push('- 常量:UPPER_SNAKE_CASE(`MAX_RETRY_COUNT`)');
315
- lines.push('- DTO 后缀:`*Request` / `*Response` / `*DTO` / `*VO` 根据团队约定');
316
- }
317
- else if (isTs) {
318
- lines.push('- 文件名:kebab-case(`user-service.ts`)或 camelCase(视团队约定)');
319
- lines.push('- 类型 / 接口:PascalCase(`interface User`、`type OrderStatus`)');
320
- lines.push('- 函数 / 变量:camelCase');
321
- lines.push('- 常量:UPPER_SNAKE_CASE 或 camelCase(不可变配置)');
322
- }
323
- else {
324
- lines.push('- 遵循所在语言生态的官方风格指南');
325
- }
326
- lines.push('', '### 代码组织', '');
327
- lines.push('- 单文件职责单一,超过 300 行考虑拆分');
328
- lines.push('- 避免循环依赖;模块边界清晰');
329
- lines.push('- 公共工具函数沉淀到 `utils` / `common`,不重复造轮子');
330
- lines.push('- **先读再改**:修改已有文件前必须先 Read,理解上下文再编辑');
331
- lines.push('', '### 注释', '');
332
- lines.push('- 默认不写注释;仅在"为什么这么做"不明显时补充');
333
- lines.push('- 不要写"这个函数做什么"(代码本身应该自解释)');
334
- lines.push('- 禁止遗留 `// TODO` 不跟单号、`// 临时` 不标日期');
335
- lines.push('', '### 错误处理', '');
336
- if (isJava) {
337
- lines.push('- 优先抛出明确的业务异常,不吞异常');
338
- lines.push('- Controller 层统一异常处理器(`@ControllerAdvice`)');
339
- lines.push('- 事务边界清晰:`@Transactional` 只标注 Service 层');
340
- }
341
- else if (isTs) {
342
- lines.push('- async/await 配合 try/catch,不要混用 Promise 链');
343
- lines.push('- 错误类型显式声明,不要 throw 裸字符串');
344
- lines.push('- 边界层(HTTP handler、消息消费者)必须有统一错误出口');
345
- }
346
- else {
347
- lines.push('- 显式处理每一个错误返回值,不静默吞异常');
348
- }
349
- return lines.join('\n');
350
- }
351
- sectionCommonPitfalls(stack) {
352
- const pitfalls = [];
353
- if (stack.framework.includes('Spring Boot')) {
354
- pitfalls.push('- **循环依赖**:优先重构为单向依赖,不要用 `@Lazy` 掩盖');
355
- pitfalls.push('- **配置覆盖**:`application-{profile}.yml` 会覆盖 `application.yml`,排查配置问题时两边都要看');
356
- pitfalls.push('- **事务失效**:`@Transactional` 同类内部方法调用不生效,需要通过 Spring 代理调用');
357
- }
358
- if (stack.framework.includes('MyBatis')) {
359
- pitfalls.push('- **Mapper XML `#{}` vs `${}`**:`${}` 会导致 SQL 注入,只用于表名 / 列名等元数据');
360
- pitfalls.push('- **N+1 查询**:使用 `<resultMap>` + `<collection>` 一次 JOIN 获取,避免循环查询');
361
- }
362
- if (stack.language.includes('TypeScript')) {
363
- pitfalls.push('- **类型断言滥用**:`as unknown as T` 通常是设计问题的信号,优先修正类型定义');
364
- pitfalls.push('- **Promise 未 await**:async 函数返回 Promise,调用方忘记 await 会导致错误被吞');
365
- }
366
- if (stack.framework.includes('React')) {
367
- pitfalls.push('- **useEffect 依赖**:依赖数组遗漏变量会导致闭包陷阱;使用 ESLint `exhaustive-deps` 规则');
368
- pitfalls.push('- **列表 key**:不要用 index 作为 key,列表重排时会错乱');
369
- }
370
- if (stack.language.some(l => l.startsWith('Go'))) {
371
- pitfalls.push('- **goroutine 泄漏**:启动 goroutine 必须有退出路径(context.Done / channel close)');
372
- pitfalls.push('- **for 循环变量捕获**:Go 1.21 之前循环变量在 goroutine 里共享,需要局部变量拷贝');
373
- }
374
- if (pitfalls.length === 0) {
375
- pitfalls.push('- 依赖升级前先运行全量测试');
376
- pitfalls.push('- 修改公共接口前先 grep 所有调用方,评估影响面');
377
- pitfalls.push('- 禁止在 main 分支直接提交,所有改动走 PR / MR 流程');
378
- }
379
- return ['## 常见陷阱', '', ...pitfalls].join('\n');
380
- }
381
- sectionContributionGuide(stack) {
382
- const isJava = stack.language.some(l => l.startsWith('Java'));
383
- const lines = ['## 贡献指南', ''];
384
- lines.push('### 分支策略', '');
385
- lines.push('- `main` / `master`:受保护分支,只接受 PR 合并');
386
- lines.push('- `feature/<ticket>-<slug>`:新功能开发');
387
- lines.push('- `fix/<ticket>-<slug>`:Bug 修复');
388
- lines.push('- `refactor/<scope>`:重构');
389
- lines.push('', '### 提交信息(Conventional Commits)', '');
390
- lines.push('```');
391
- lines.push('<type>(<scope>): <subject>');
392
- lines.push('');
393
- lines.push('类型(type):feat / fix / refactor / perf / test / docs / chore / style');
394
- lines.push('范围(scope):模块或目录名,例如 auth / api / ui');
395
- lines.push('主题(subject):50 字以内,祈使句,不加句号');
396
- lines.push('```');
397
- lines.push('');
398
- lines.push('示例:`feat(auth): 新增 OAuth2 Google 登录`');
399
- lines.push('', '### PR / MR 检查清单', '');
400
- lines.push('- [ ] 通过所有自动化测试');
401
- if (isJava) {
402
- lines.push('- [ ] 通过 `mvn verify` / `./gradlew check`');
403
- }
404
- else if (stack.language.includes('TypeScript')) {
405
- lines.push('- [ ] 通过 `npx tsc --noEmit`(类型检查)');
406
- if (stack.linter)
407
- lines.push(`- [ ] 通过 ${stack.linter} 检查`);
408
- }
409
- lines.push('- [ ] 新增代码有对应测试(除纯文档 / 配置外)');
410
- lines.push('- [ ] 公共接口变更已更新文档');
411
- lines.push('- [ ] 无敏感信息(密钥、token、内网地址)');
412
- lines.push('- [ ] 经过至少一位 reviewer 审核');
413
- return lines.join('\n');
116
+ }
117
+ lines.push(line);
118
+ if (isDir && depth < maxDepth && !SHALLOW_ONLY.has(name)) {
119
+ walk(fullPath, prefix + childPrefix, depth + 1);
120
+ }
121
+ });
122
+ };
123
+ const rootName = projectPath.split('/').filter(Boolean).pop() || 'project';
124
+ lines.push(rootName + '/');
125
+ walk(projectPath, '', 1);
126
+ return lines.join('\n');
127
+ }
128
+ export class ClaudeMdGenerator {
129
+ detector;
130
+ constructor(detector) {
131
+ this.detector = detector ?? new TechDetector();
414
132
  }
415
133
  /**
416
- * 写入 CLAUDE.md,保留用户手动编辑的内容
134
+ * Write a CLAUDE.md file with the auto-generated block wrapped in
135
+ * `<!-- forge:claudemd-auto -->` markers, preserving any user-authored
136
+ * content that sits outside the block.
137
+ *
138
+ * Note: as of sub-spec A R-D, the `cf claudemd init/update` path no longer
139
+ * routes through this helper — it writes the file directly from the
140
+ * `claudemd-writer` agent output. This method remains for any external
141
+ * embedder that still wants the marker-preserving merge semantics.
417
142
  */
418
143
  write(projectPath, content) {
419
144
  const claudeMdPath = join(projectPath, 'CLAUDE.md');
@@ -425,7 +150,8 @@ export class ClaudeMdGenerator {
425
150
  writeFileSync(claudeMdPath, final, 'utf-8');
426
151
  }
427
152
  /**
428
- * 读取并分离自动生成和用户内容
153
+ * Read a CLAUDE.md file and split the auto-generated block from the
154
+ * surrounding user content.
429
155
  */
430
156
  read(projectPath) {
431
157
  const claudeMdPath = join(projectPath, 'CLAUDE.md');
@@ -446,60 +172,13 @@ export class ClaudeMdGenerator {
446
172
  const user = [before, after].filter(Boolean).join('\n\n');
447
173
  return { auto, user };
448
174
  }
449
- // ── Private Methods ────────────────────────────────────────────────────
450
- buildPrompt(stack, projectPath) {
451
- const projectName = projectPath.split('/').filter(Boolean).pop() || 'project';
452
- const isJava = stack.language.some(l => l.startsWith('Java'));
453
- const realTree = this.scanDirectoryTree(projectPath, isJava ? 4 : 2, isJava);
454
- const sections = [
455
- `请为项目 "${projectName}" 生成 CLAUDE.md 文件内容,包含以下章节:`,
456
- '',
457
- '1. 项目概述',
458
- '2. 技术栈',
459
- '3. 开发规范',
460
- '4. 构建与测试命令',
461
- '5. 目录结构(**必须**直接使用下方给出的真实目录树,不得编造或改名)',
462
- '6. 代码风格',
463
- '7. 常见陷阱',
464
- '8. 贡献指南',
465
- '',
466
- '## 检测到的技术栈',
467
- '',
468
- `- 语言: ${stack.language.join(', ') || '未检测到'}`,
469
- `- 框架: ${stack.framework.join(', ') || '无'}`,
470
- `- 包管理器: ${stack.packageManager}`,
471
- ];
472
- if (stack.testFramework) {
473
- sections.push(`- 测试框架: ${stack.testFramework}`);
474
- }
475
- if (stack.linter) {
476
- sections.push(`- Linter: ${stack.linter}`);
477
- }
478
- sections.push('', '## 项目真实目录结构(必须原样使用)', '', '```', realTree, '```', '', '⚠️ 生成"目录结构"章节时,**必须**用上面这个真实目录树,禁止使用 `project-root/`、`com/example/project/` 等占位符。', '', '请直接输出 Markdown 内容,不要包含代码块包裹。', '使用中文撰写。每个章节保持简洁,总长度控制在 200 行以内。');
479
- return sections.join('\n');
480
- }
481
175
  /**
482
- * 强制替换 AI 输出中的"目录结构"章节为真实扫描结果。
483
- *
484
- * AI 经常即使拿到真实目录也会退化成模板(project-root/com/example/project)。
485
- * 做字符串替换是最稳妥的兜底。
176
+ * Instance-level convenience wrapper around the module-level
177
+ * `scanDirectoryTree` export, kept for any external caller that already
178
+ * holds a `ClaudeMdGenerator` instance.
486
179
  */
487
- overrideDirectoryStructure(content, stack, projectPath) {
488
- const isJava = stack.language.some(l => l.startsWith('Java'));
489
- const realTree = this.scanDirectoryTree(projectPath, isJava ? 4 : 2, isJava);
490
- const realSection = ['## 目录结构', '', '```', realTree, '```'].join('\n');
491
- // 匹配 "## 目录结构" 到下一个 "##" 之前的所有内容
492
- const pattern = /^##\s+目录结构[\s\S]*?(?=^##\s|\Z)/m;
493
- if (pattern.test(content)) {
494
- return content.replace(pattern, realSection + '\n\n');
495
- }
496
- // 如果 AI 没生成目录结构章节,追加到末尾
497
- return content.trimEnd() + '\n\n' + realSection + '\n';
498
- }
499
- merge(generated, userContent) {
500
- if (!userContent)
501
- return generated;
502
- return [generated.trim(), '', '---', '', userContent.trim()].join('\n');
180
+ scanDirectoryTree(projectPath, maxDepth, addComments = false) {
181
+ return scanDirectoryTree(projectPath, maxDepth, addComments);
503
182
  }
504
183
  }
505
184
  //# sourceMappingURL=claudemd-generator.js.map