@winspan/claude-forge 8.54.3 → 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 (879) hide show
  1. package/DEVELOPMENT.md +649 -33
  2. package/README.md +155 -17
  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-performance-optimization.md +0 -30
  801. package/dist/skills/official/official-pr-review.md +0 -35
  802. package/dist/skills/official/official-release-checklist.md +0 -30
  803. package/dist/skills/official/official-security-hardening.md +0 -32
  804. package/dist/skills/official/official-spec-driven-design.md +0 -31
  805. package/dist/skills/official/planning-with-files.md +0 -241
  806. package/dist/skills/official/ui-ux-pro-max.md +0 -105
  807. package/dist/skills/official/webapp-testing.md +0 -96
  808. package/dist/skills/official-skills.d.ts +0 -26
  809. package/dist/skills/official-skills.d.ts.map +0 -1
  810. package/dist/skills/official-skills.js +0 -73
  811. package/dist/skills/official-skills.js.map +0 -1
  812. package/dist/skills/semantic-matcher.d.ts +0 -60
  813. package/dist/skills/semantic-matcher.d.ts.map +0 -1
  814. package/dist/skills/semantic-matcher.js +0 -192
  815. package/dist/skills/semantic-matcher.js.map +0 -1
  816. package/dist/skills/upgrade-engine.d.ts +0 -93
  817. package/dist/skills/upgrade-engine.d.ts.map +0 -1
  818. package/dist/skills/upgrade-engine.js +0 -447
  819. package/dist/skills/upgrade-engine.js.map +0 -1
  820. package/dist/skills/upgrade-prompt.d.ts +0 -20
  821. package/dist/skills/upgrade-prompt.d.ts.map +0 -1
  822. package/dist/skills/upgrade-prompt.js +0 -75
  823. package/dist/skills/upgrade-prompt.js.map +0 -1
  824. package/dist/web/routes/ai.d.ts +0 -10
  825. package/dist/web/routes/ai.d.ts.map +0 -1
  826. package/dist/web/routes/ai.js +0 -186
  827. package/dist/web/routes/ai.js.map +0 -1
  828. package/dist/web/routes/token-usage.d.ts +0 -7
  829. package/dist/web/routes/token-usage.d.ts.map +0 -1
  830. package/dist/web/routes/token-usage.js +0 -18
  831. package/dist/web/routes/token-usage.js.map +0 -1
  832. package/dist/web/ssrf-guard.d.ts +0 -35
  833. package/dist/web/ssrf-guard.d.ts.map +0 -1
  834. package/dist/web/ssrf-guard.js +0 -93
  835. package/dist/web/ssrf-guard.js.map +0 -1
  836. package/dist/web/static/assets/AIConfig-CdDWzJyO.js +0 -2
  837. package/dist/web/static/assets/AIConfig-CdDWzJyO.js.map +0 -1
  838. package/dist/web/static/assets/Dashboard-CoEmmIDt.js +0 -2
  839. package/dist/web/static/assets/Dashboard-CoEmmIDt.js.map +0 -1
  840. package/dist/web/static/assets/Drawer-DdRTzlLB.js +0 -2
  841. package/dist/web/static/assets/Drawer-DdRTzlLB.js.map +0 -1
  842. package/dist/web/static/assets/Events-DrIq1SUS.js +0 -2
  843. package/dist/web/static/assets/Events-DrIq1SUS.js.map +0 -1
  844. package/dist/web/static/assets/Reports-DFBM3MDK.js +0 -2
  845. package/dist/web/static/assets/Reports-DFBM3MDK.js.map +0 -1
  846. package/dist/web/static/assets/SearchInput-qCj_jAcf.js +0 -2
  847. package/dist/web/static/assets/SearchInput-qCj_jAcf.js.map +0 -1
  848. package/dist/web/static/assets/SessionDetail-CCzwdoT7.js +0 -2
  849. package/dist/web/static/assets/SessionDetail-CCzwdoT7.js.map +0 -1
  850. package/dist/web/static/assets/Sessions-FfLYkAw9.js +0 -2
  851. package/dist/web/static/assets/Sessions-FfLYkAw9.js.map +0 -1
  852. package/dist/web/static/assets/Skills-C8Gvs3Qa.js +0 -2
  853. package/dist/web/static/assets/Skills-C8Gvs3Qa.js.map +0 -1
  854. package/dist/web/static/assets/TaskDetail-BS8pYhaR.js +0 -2
  855. package/dist/web/static/assets/TaskDetail-BS8pYhaR.js.map +0 -1
  856. package/dist/web/static/assets/Tasks-CyuhizG8.js +0 -2
  857. package/dist/web/static/assets/Tasks-CyuhizG8.js.map +0 -1
  858. package/dist/web/static/assets/charts-CLrM0_uM.js +0 -37
  859. package/dist/web/static/assets/charts-CLrM0_uM.js.map +0 -1
  860. package/dist/web/static/assets/date-fns-CZ_bHujz.js +0 -2
  861. package/dist/web/static/assets/date-fns-CZ_bHujz.js.map +0 -1
  862. package/dist/web/static/assets/export-L_VBD2p1.js +0 -4
  863. package/dist/web/static/assets/export-L_VBD2p1.js.map +0 -1
  864. package/dist/web/static/assets/index-CBX47X8l.js +0 -3
  865. package/dist/web/static/assets/index-CBX47X8l.js.map +0 -1
  866. package/dist/web/static/assets/index-DjIoMdoR.css +0 -1
  867. package/dist/web/static/assets/lucide-Bs_edTLa.js +0 -232
  868. package/dist/web/static/assets/lucide-Bs_edTLa.js.map +0 -1
  869. package/dist/web/static/assets/query-C99w429o.js +0 -2
  870. package/dist/web/static/assets/react-vendor-CSp-GLFF.js +0 -49
  871. package/dist/web/static/assets/react-vendor-CSp-GLFF.js.map +0 -1
  872. package/dist/web/static/assets/syntax-highlighter-44FakypI.js +0 -9
  873. package/dist/web/static/assets/syntax-highlighter-44FakypI.js.map +0 -1
  874. package/dist/web/static/assets/task-title-BhOcemuR.js +0 -2
  875. package/dist/web/static/assets/task-title-BhOcemuR.js.map +0 -1
  876. package/dist/web/static/assets/time-Bxuk0M-C.js +0 -2
  877. package/dist/web/static/assets/time-Bxuk0M-C.js.map +0 -1
  878. package/dist/web/static/assets/vendor-CMMjVdZs.js +0 -64
  879. package/dist/web/static/assets/vendor-CMMjVdZs.js.map +0 -1
package/DEVELOPMENT.md CHANGED
@@ -39,7 +39,7 @@ src/
39
39
  │ ├── lifecycle.ts 启停 / 信号处理
40
40
  │ ├── event-parser.ts hook 原始 JSON → ForgeEvent
41
41
  │ ├── hook-sync.ts 启动时把 dist/hooks/ 同步到 ~/.claude/hooks/
42
- │ ├── skill-sync.ts 启动时把 dist/skills/official/ 同步到 ~/.claude/skills/
42
+ │ ├── skill-sync.ts 启动时把 dist/skills/distilled/ 同步到 ~/.claude/skills/
43
43
  │ ├── launchd-installer.ts macOS launchd 安装
44
44
  │ ├── launchd/ launchd plist 模板
45
45
  │ ├── handlers/
@@ -51,14 +51,11 @@ src/
51
51
  │ └── task-segmenter.ts UserPromptSubmit 按时间窗划分任务段
52
52
 
53
53
  ├── skills/ Skill 推荐与方法论分发
54
- │ ├── registry.ts 扫描 ~/.claude/skills/ + src/skills/official/,提供 match()
54
+ │ ├── registry.ts 扫描 ~/.claude/skills/ + src/skills/distilled/,提供 match()(keyword-only since spec 0902 D R-B)
55
55
  │ ├── matcher.ts 关键词匹配
56
- │ ├── semantic-matcher.ts AI 语义匹配(可选,需 API key)
57
56
  │ ├── invocation-guard.ts 防止 agent 重复 invoke 同一 skill
58
- │ ├── upgrade-engine.ts 社区 skill 升级核心:pull / match / evaluate / apply
59
- │ ├── upgrade-prompt.ts AI evaluator prompt 模板
60
- │ ├── official-skills.ts 加载内置官方 skill
61
- │ ├── official/ 内置官方 skill .md 源(随发布打包)
57
+ │ ├── builtin-skills.ts 加载内置 distilled skill(来自 src/skills/distilled/)
58
+ │ ├── distilled/ 内置 distilled skill .md 源(随发布打包)
62
59
  │ ├── tools/ MCP 工具:skill_invoke / skill_list / pipeline_suggest
63
60
  │ └── index.ts 对外导出
64
61
 
@@ -95,6 +92,14 @@ src/
95
92
  ├── mcp/ MCP server(暴露 skill_invoke / skill_list / pipeline_suggest 给 agent)
96
93
  │ └── server.ts
97
94
 
95
+ ├── knowledge/ v9.0 项目知识库系统
96
+ │ ├── repo-map.ts 仓库结构快照生成
97
+ │ ├── builder.ts 知识条目构建(分析 src/ → .forge-knowledge/)
98
+ │ ├── query.ts 语义/关键词查询接口
99
+ │ ├── git-hooks.ts Git hooks 集成(commit 后自动 rebuild)
100
+ │ ├── validator.ts KB 完整性校验
101
+ │ └── prompt.ts agent prompt 注入工具
102
+
98
103
  └── templates/ 新项目初始化模板
99
104
 
100
105
  web/ React 前端源码(独立 npm workspace)
@@ -214,16 +219,16 @@ Claude Code ──hook payload(JSON via stdin)──► src/hooks/*.sh
214
219
  └─────────┬───────────┘
215
220
 
216
221
 
217
- ┌──────────────────────────┐ ┌──────────────────────────┐
218
- │ SkillRegistry.match() │ ───────►│ semantic-matcher (AI) │
219
- │ (registry.ts) │ │ 若配置了 API key 则优先 │
220
- │ │ └────────────┬─────────────┘
221
- │ 扫描两类来源: │ 失败/无 key
222
- │ - 内置 src/skills/ │
223
- official/*.md ┌──────────────────────────┐
224
- │ - 用户 ~/.claude/skills/│ ───────►│ keyword matcher
225
- │ {name}.md │ │ (matcher.ts) │
226
- │ or {name}/SKILL.md │ └────────────┬─────────────┘
222
+ ┌──────────────────────────┐
223
+ │ SkillRegistry.match() │semantic-matcher 已在 spec 0902 D R-B 删除)
224
+ │ (registry.ts, keyword-only)
225
+ │ │ ┌──────────────────────────┐
226
+ │ 扫描两类来源: │ ───────►│ keyword matcher │
227
+ │ - 内置 src/skills/ │ │ (matcher.ts) │
228
+ distilled/*.md └────────────┬─────────────┘
229
+ │ - 用户 ~/.claude/skills/│
230
+ │ {name}.md │
231
+ │ or {name}/SKILL.md │
227
232
  └──────────────────────────┘ │
228
233
  │ │
229
234
  ▼ ▼
@@ -240,19 +245,47 @@ Agent 通过 MCP 工具:
240
245
 
241
246
  frontmatter 必须有 `name: string`,否则 registry 静默跳过(debug 日志,不打扰用户)。`keywords` 与 `tags` 都接受。
242
247
 
243
- ### Skill 远程升级
244
-
245
- `cf skills upgrade``src/skills/upgrade-engine.ts` 驱动,三阶段:
246
-
247
- 1. `pullCandidates(DEFAULT_SOURCES, ~/.claude-forge/skill-candidates/)`
248
- - 默认源:`addyosmani/agent-skills` + `obra/superpowers`
249
- - 已存在则 `git pull`,不存在则 `git clone`
250
- 2. 对每个候选用 `matchToOfficial()` 找最相似官方 skill,再用 `evaluateWithAI()` 让 AI 给出 `upgrade / merge / skip`,AI 解析失败 → `needs_review`
251
- 3. `generateReport()` 写到 `~/.claude-forge/skill-upgrade-report.md`,每条带 `<!-- upgrade-entry: ... -->` 标记
252
- 4. `cf skills upgrade --apply` 读报告 → 备份 `~/.claude-forge/backups/skills/<ts>/` → 覆盖 `src/skills/official/`
253
- 5. `--rollback <ts>` 反向拷回
254
-
255
- 详见 `docs/skill-upgrade-guide.md`。
248
+ ### Skill 蒸馏
249
+
250
+ > **架构改写已完成**(spec [`1851`](docs/design/2026-05-28/1851-distill-via-claude-cli-shellout-spec.md) R-A + R-B):
251
+ > `cf skills distill` CLI 子命令族**已删除**;蒸馏入口收敛到 Web UI 一处
252
+ > (`http://127.0.0.1:3721/context?tab=distill`)。daemon 通过
253
+ > `child_process.spawn('claude', ...)` headless 调用本地 claude CLI,走用户
254
+ > 订阅计费(OAuth/keychain),daemon 自身不再持 `ANTHROPIC_API_KEY`。
255
+
256
+ **实施流程**(R-B ship):
257
+
258
+ 1. `findClaudeBin()` (`src/skills/distill/claude-cli-resolver.ts`) 探测 `claude`
259
+ binary —— 先跑 `which claude`,失败后探测 `/opt/homebrew/bin/claude` /
260
+ `/usr/local/bin/claude` / `~/.local/bin/claude`。结果缓存 5 分钟。
261
+ 2. `/api/skills/distill/status` 调 `findClaudeBin()` 返回
262
+ `{ claudeCliAvailable: boolean, claudeCliPath: string | null }`。
263
+ UI disable 按钮 + 显示安装提示(`brew install claude` /
264
+ `npm i -g @anthropic-ai/claude-code`)。
265
+ 3. 按【开始蒸馏】 → `spawnSkillDistillerAgent(prompt)` 起子进程:
266
+ ```bash
267
+ claude -p --agent skill-distiller --bare \
268
+ --output-format stream-json --include-partial-messages --input-format text
269
+ ```
270
+ prompt 通过 stdin 喂入(含 `<upstream_skill>` / `<upstream_url>` /
271
+ `<target_name>` / `<topic_id>` tagged blocks)。
272
+ 4. 解析 stream-json 事件(`assistant_message` / `content_block_delta` /
273
+ `message_delta` / `text_delta` / `result` 多版本兼容)累加 assistant text。
274
+ 每个事件回调 `onProgress({ type, charCount, raw })` →
275
+ distill-manager 桥接为 SSE `progress` event(UI 显示 `chars=N` + topicId)。
276
+ 5. 子进程 exit 0 → `parseSkipBlock()` 优先检测 SKIP envelope →
277
+ 有则抛 `SkillSkippedError`(agent 自评分 < 3,topicId 加入 state.skipped 继续下一个)→
278
+ 否则 `parseSkillBlock()` 抽 SKILL envelope body →
279
+ `detectAnchors()` lint 命中即 throw `ProjectAnchorRejection`(**无 retry**,per Q2)→
280
+ 写入 `src/skills/distilled/distilled-xxx.md` + 追加 NOTICE。
281
+ 6. 用户【取消】→ `distill-manager.cancel(runId)` → AbortController abort →
282
+ `child.kill('SIGTERM')`。
283
+
284
+ **Hard-fail 错误**(agent path 一律不 retry):
285
+ - `ClaudeCliMissingError` —— `findClaudeBin()` 返回 null
286
+ - `SkillSkippedError` —— agent emit `---SKIP---` envelope(score < 3)
287
+ - `SkillBlockMissingError` —— agent 输出既无 SKILL 也无 SKIP envelope
288
+ - `ProjectAnchorRejection` —— SKILL body lint 命中项目锚点
256
289
 
257
290
  ### CLAUDE.md 生成与维护
258
291
 
@@ -272,7 +305,7 @@ frontmatter 必须有 `name: string`,否则 registry 静默跳过(debug 日
272
305
  daemon 启动时(`src/daemon/index.ts`)执行两个一次性同步:
273
306
 
274
307
  - `syncHooks()` — 把 `dist/hooks/*.sh` 对照 sha256 同步到 `~/.claude/hooks/`,避免用户忘了重跑 `cf init`
275
- - `syncSkills()` — 把 `dist/skills/official/*.md` 同步到 `~/.claude/skills/`,user-owned 文件(已存在)跳过
308
+ - `syncSkills()` — 把 `dist/skills/distilled/*.md` 同步到 `~/.claude/skills/`,user-owned 文件(已存在)跳过
276
309
 
277
310
  两者都幂等,文件相同时不写盘。
278
311
 
@@ -325,7 +358,7 @@ daemon 通过三个机制保证长时间运行不膨胀:
325
358
 
326
359
  ## 添加新 Skill
327
360
 
328
- 最简方式:在 `src/skills/official/<name>.md` 写 frontmatter:
361
+ 最简方式:在 `src/skills/distilled/<name>.md` 写 frontmatter:
329
362
 
330
363
  ```markdown
331
364
  ---
@@ -352,6 +385,589 @@ version: 1.0.0
352
385
 
353
386
  ---
354
387
 
388
+ ## decision-maker agent 使用说明
389
+
390
+ ### 首次使用必读:TUI restart 必要
391
+
392
+ `decision-maker` agent 定义在 `.claude/agents/decision-maker.md`。Claude Code TUI
393
+ 在**启动时**一次性扫描 `.claude/agents/`,运行中新增的 agent 不会被自动识别。
394
+
395
+ **首次使用(或更新 template 后)必须重启 TUI**:
396
+ - macOS: `Cmd+R` 或关闭窗口重新打开
397
+ - 重启后验证: 在 Task tool 输入 `subagent_type='decision-maker'` 不报 not found 即可
398
+
399
+ ### TUI restart 后仍 not found 的 fallback
400
+
401
+ 若重启 TUI 后 `subagent_type='decision-maker'` 仍报 not found,使用以下 inline 方式:
402
+
403
+ ```
404
+ spawn general-purpose agent with prompt:
405
+ "你扮演 decision-maker 角色。Read .claude/agents/decision-maker.md 然后按其 Workflow 执行。
406
+ 用户 prompt: <your actual prompt>"
407
+ ```
408
+
409
+ ### decision-maker catalog 预生成
410
+
411
+ Build 时 `scripts/dump-catalogs.ts` 会生成:
412
+ - `dist/catalogs/agents.json` — 9 agents, ~3KB
413
+ - `dist/catalogs/skills.json` — 12 skills, ~5KB
414
+
415
+ 这两个文件由 decision-maker Step 2-3 读取(`cat dist/catalogs/*.json`),
416
+ 替代原来的全读 3250 行 markdown,可减少 ~90% catalog token 消耗。
417
+
418
+ 如果 `dist/catalogs/` 不存在(fresh clone):先运行 `npm run build`。
419
+
420
+ ---
421
+
422
+ ## skill-distiller agent 使用说明
423
+
424
+ `skill-distiller` agent 定义在 `.claude/agents/skill-distiller.md`(与
425
+ `src/daemon/templates/agents/skill-distiller.md` 完全镜像,agent-sync 启动时
426
+ 拷到 `~/.claude/agents/`)。
427
+
428
+ ### R-A 状态(spec 1851)
429
+
430
+ - **程序化调用路径已删除**:`runSonnetDistillationViaAgent()` /
431
+ `CF_SKILL_DISTILLER_AGENT=1` env flag 在 R-A 阶段一并下线。
432
+ - **R-B 接 claude CLI shell-out**:daemon 通过 `child_process.spawn('claude',
433
+ ['-p', '--agent', 'skill-distiller', ...])` 调用本地 claude CLI,agent body
434
+ 作为 system prompt 由 CLI 自身加载(不再由 daemon 进程读取 .md 注入)。
435
+ - **agent body R-B 会重写**:评分(D1-D5)+ 决策 + 输出 SKILL/SKIP envelope
436
+ 三步合一。当前 .md 仍是 Phase B 版本,等 R-B spec 推进后会更新。
437
+
438
+ ### 方式 2:在 Claude Code TUI 里手动 spawn(仍可用)
439
+
440
+ ```
441
+ Task tool subagent_type='skill-distiller' with prompt:
442
+ "<upstream_skill>...</upstream_skill>
443
+ <upstream_url>https://github.com/owner/repo</upstream_url>
444
+ <target_name>distilled-xxx</target_name>
445
+ <it_universal_score>4</it_universal_score>
446
+ <it_universal_rationale>...</it_universal_rationale>"
447
+ ```
448
+
449
+ agent 会返回 `---SKILL---\n<full md>\n---END---` 格式的 markdown,需要手动
450
+ 保存到 `src/skills/distilled/distilled-xxx.md`(caller 责任)。**首次新增/改 agent
451
+ 需 TUI restart**(macOS Cmd+R)。
452
+
453
+ ### 首次使用必读:TUI restart 必要
454
+
455
+ 与 decision-maker 同样的 quirk —— Claude Code TUI 在**启动时**一次性扫描
456
+ `.claude/agents/`,运行中新增的 agent 不会被自动识别。
457
+
458
+ **首次使用(或更新 template 后)必须重启 TUI**:
459
+ - macOS: `Cmd+R` 或关闭窗口重新打开
460
+ - 重启后验证:在 Task tool 输入 `subagent_type='skill-distiller'` 不报 not found 即可
461
+
462
+ > 注意:方式 1(程序化 distill)**不受** TUI restart 影响 —— 它直接读文件,
463
+ > 不走 TUI 的 agent registry。
464
+
465
+ ### TUI restart 后仍 not found 的 fallback
466
+
467
+ 若重启 TUI 后 `subagent_type='skill-distiller'` 仍报 not found,使用以下
468
+ inline 方式:
469
+
470
+ ```
471
+ spawn general-purpose agent with prompt:
472
+ "你扮演 skill-distiller 角色。Read .claude/agents/skill-distiller.md
473
+ 然后按其 Workflow 执行。
474
+
475
+ 输入 tags 如下:
476
+ <upstream_skill>...</upstream_skill>
477
+ <upstream_url>...</upstream_url>
478
+ ..."
479
+ ```
480
+
481
+ ### Agent 文件三处镜像
482
+
483
+ ```
484
+ src/daemon/templates/agents/skill-distiller.md ← canonical source (git tracked)
485
+ .claude/agents/skill-distiller.md ← repo mirror (git -f tracked, TUI scan)
486
+ dist/daemon/templates/agents/skill-distiller.md ← npm payload (build cp produces)
487
+ ~/.claude/agents/skill-distiller.md ← user sync target (agent-sync.ts)
488
+ ```
489
+
490
+ 修改 agent .md 时**只改 canonical**(`src/daemon/templates/agents/`),然后:
491
+
492
+ ```bash
493
+ # 同步到 repo mirror
494
+ cp src/daemon/templates/agents/skill-distiller.md .claude/agents/skill-distiller.md
495
+ # build 自动同步到 dist/
496
+ npm run build
497
+ # daemon restart 自动同步到 ~/.claude/agents/
498
+ cf daemon restart
499
+ ```
500
+
501
+ repo mirror 与 canonical 必须 **byte-identical**(CI 不强制,但 lint 检查
502
+ 计划在未来 phase 加入)。
503
+
504
+ ---
505
+
506
+ ## claudemd-writer agent 使用说明
507
+
508
+ `claudemd-writer` agent 定义在 `.claude/agents/claudemd-writer.md`(与
509
+ `src/daemon/templates/agents/claudemd-writer.md` 完全镜像,agent-sync 启动时
510
+ 拷到 `~/.claude/agents/`)。
511
+
512
+ 引入背景:spec [`0902`](docs/design/2026-05-29/0902-ai-config-removal-master-spec.md)
513
+ 子 spec A — 把 `cf claudemd init/update` 从「daemon 进程内 `ClaudeProvider.complete()`
514
+ + 用户配的 `ANTHROPIC_API_KEY`」迁到「`child_process.spawn('claude', ...)` headless
515
+ CLI 子进程」。daemon 自身不再持 API key,走用户 Claude Code 订阅计费。
516
+
517
+ ### 两种使用方式
518
+
519
+ #### 方式 1:作为 `cf claudemd` 的 prompt 模板(程序化调用,默认入口)
520
+
521
+ `src/cli/commands/claudemd.ts` 的 `runClaudeMdWriter()` 把 agent name + stdin
522
+ prompt 传给 `spawnClaudeCli()` (`src/core/utils/claude-cli-spawn.ts`):
523
+
524
+ ```bash
525
+ claude -p --agent claudemd-writer --bare \
526
+ --output-format stream-json --include-partial-messages \
527
+ --allowedTools "Read,Grep" --input-format text
528
+ ```
529
+
530
+ prompt 通过 stdin 注入,含 tagged blocks(`<target_command>` / `<project_name>` /
531
+ `<project_tech_stack>` / `<project_directory_tree>` / `<project_persona>` /
532
+ `<project_conventions>`)。agent 解析这些 block,按既定模板写完整 CLAUDE.md
533
+ body,包在 `---CLAUDEMD---\n...\n---END---` envelope 内。host 调
534
+ `parseClaudeMdBlock()` 抽 body,写盘。
535
+
536
+ 这种用法**不需要** TUI restart —— 不走 Claude Code 的 Task tool agent registry,
537
+ 是 host CLI 直接 spawn `claude` 子进程。
538
+
539
+ #### 方式 2:在 Claude Code TUI 里手动 spawn(调试 / 一次性生成)
540
+
541
+ ```
542
+ Task tool subagent_type='claudemd-writer' with prompt:
543
+ "<target_command>init</target_command>
544
+ <project_name>my-app</project_name>
545
+ <project_tech_stack>{\"language\":[\"TypeScript\"],...}</project_tech_stack>
546
+ <project_directory_tree>my-app/\n├── src/\n└── package.json</project_directory_tree>
547
+ <project_persona></project_persona>
548
+ <project_conventions></project_conventions>"
549
+ ```
550
+
551
+ agent 返回 `---CLAUDEMD---\n<full md>\n---END---` envelope。**调用方手动**
552
+ copy body 写入 `<project>/CLAUDE.md`。
553
+
554
+ ### 首次使用必读:TUI restart 必要
555
+
556
+ 与 `decision-maker` / `skill-distiller` 同样的 quirk —— Claude Code TUI 在**启动时**
557
+ 一次性扫描 `.claude/agents/`,运行中新增的 agent 不会被自动识别。
558
+
559
+ **首次使用(或更新 template 后)必须重启 TUI**:
560
+ - macOS: `Cmd+R` 或关闭窗口重新打开
561
+ - 重启后验证:在 Task tool 输入 `subagent_type='claudemd-writer'` 不报 not found 即可
562
+
563
+ > 注意:方式 1(程序化 `cf claudemd`)**不受** TUI restart 影响 —— 它走
564
+ > `child_process.spawn('claude', ...)`,与 TUI 的 agent registry 无关。
565
+
566
+ ### TUI restart 后仍 not found 的 fallback
567
+
568
+ 若重启 TUI 后 `subagent_type='claudemd-writer'` 仍报 not found,使用以下
569
+ inline 方式:
570
+
571
+ ```
572
+ spawn general-purpose agent with prompt:
573
+ "你扮演 claudemd-writer 角色。Read .claude/agents/claudemd-writer.md
574
+ 然后按其 Workflow 执行。
575
+
576
+ 输入 tags 如下:
577
+ <target_command>init</target_command>
578
+ <project_name>...</project_name>
579
+ <project_tech_stack>...</project_tech_stack>
580
+ <project_directory_tree>...</project_directory_tree>
581
+ <project_persona>...</project_persona>
582
+ <project_conventions>...</project_conventions>"
583
+ ```
584
+
585
+ ### Agent 文件三处镜像
586
+
587
+ ```
588
+ src/daemon/templates/agents/claudemd-writer.md ← canonical source (git tracked)
589
+ .claude/agents/claudemd-writer.md ← repo mirror (git -f tracked, TUI scan)
590
+ dist/daemon/templates/agents/claudemd-writer.md ← npm payload (build cp produces)
591
+ ~/.claude/agents/claudemd-writer.md ← user sync target (agent-sync.ts)
592
+ ```
593
+
594
+ 修改 agent .md 时**只改 canonical**(`src/daemon/templates/agents/`),然后:
595
+
596
+ ```bash
597
+ # 同步到 repo mirror
598
+ cp src/daemon/templates/agents/claudemd-writer.md .claude/agents/claudemd-writer.md
599
+ # build 自动同步到 dist/
600
+ npm run build
601
+ # daemon restart 自动同步到 ~/.claude/agents/
602
+ cf daemon restart
603
+ ```
604
+
605
+ repo mirror 与 canonical 必须 **byte-identical**(同 skill-distiller,CI 不
606
+ 强制,lint 检查计划未来 phase 加入)。
607
+
608
+ ### Hard-fail 错误(不会 fallback 到 stub)
609
+
610
+ - `ClaudeCliMissingError` —— PATH 中找不到 `claude` binary,install hint:
611
+ `brew install claude` 或 `npm i -g @anthropic-ai/claude-code`
612
+ - `ClaudeCliExitError` —— 子进程 exit code ≠ 0(stderr snippet 打印)
613
+ - `ClaudeCliTimeoutError` —— 超过 5 分钟未完成(默认 timeout 300_000ms)
614
+ - `ClaudeCliCancelledError` —— 调用方主动 abort
615
+ - `ClaudeMdBlockMissingError` —— agent 输出缺 `---CLAUDEMD---...---END---`
616
+ envelope(前 200 字符 snippet 打印)
617
+
618
+ 所有错误**直接 exit 1**,不退化到模板(与 R-A 时期的 fallback 行为不同;
619
+ fallback 已移除,spec 0902 §2.4.1)。
620
+
621
+ ---
622
+
623
+ ## knowledge-builder agent 使用说明
624
+
625
+ `knowledge-builder` agent 定义在 `.claude/agents/knowledge-builder.md`(与
626
+ `src/daemon/templates/agents/knowledge-builder.md` 完全镜像,agent-sync 启动时
627
+ 拷到 `~/.claude/agents/`)。
628
+
629
+ 引入背景:spec [`0902`](docs/design/2026-05-29/0902-ai-config-removal-master-spec.md)
630
+ 子 spec B — 把 `cf knowledge build / init / update` 从「daemon 进程内
631
+ `ClaudeProvider.completeWithUsage()` + 用户配的 `ANTHROPIC_API_KEY`」迁到
632
+ 「`child_process.spawn('claude', ...)` headless CLI 子进程」。daemon 自身不再
633
+ 持 API key,走用户 Claude Code 订阅计费。
634
+
635
+ ### 两种使用方式
636
+
637
+ #### 方式 1:作为 `cf knowledge build` 的 prompt 模板(程序化调用,默认入口)
638
+
639
+ `src/cli/commands/knowledge.ts` 的 `buildCmd()` 调 `buildKnowledge()`,后者默认
640
+ 创建 `CliKnowledgeProvider`(`src/knowledge/cli-provider.ts`),由它把 agent
641
+ name + stdin prompt 传给 `spawnClaudeCli()`(`src/core/utils/claude-cli-spawn.ts`,
642
+ 与 `claudemd-writer` 共用):
643
+
644
+ ```bash
645
+ claude -p --agent knowledge-builder --bare \
646
+ --output-format stream-json --include-partial-messages \
647
+ --allowedTools "Read,Grep" --input-format text
648
+ ```
649
+
650
+ 每个 KB page 一次 spawn。prompt 通过 stdin 注入,含 routing hints
651
+ (`<page_kind>module</page_kind>` / `<page_kind>cross-module</page_kind>` +
652
+ `<page_name>daemon</page_name>` 等 system-prompt 标签)。agent 解析后,按既定
653
+ 模板写 KB body,包在 `---KB---\n<body>\n---END---` envelope 内(每个 page 一个
654
+ envelope,多 page 输出多 envelope 拼接)。host 调 `parseKbBlocks()` 抽 body,
655
+ 分发给 module page / cross-module page 的 sink。
656
+
657
+ 这种用法**不需要** TUI restart —— 不走 Claude Code 的 Task tool agent registry,
658
+ 是 host CLI 直接 spawn `claude` 子进程。
659
+
660
+ #### 方式 2:在 Claude Code TUI 里手动 spawn(调试 / 一次性生成)
661
+
662
+ ```
663
+ Task tool subagent_type='knowledge-builder' with prompt:
664
+ "<page_kind>module</page_kind>
665
+ <page_name>daemon</page_name>
666
+ <repo_map>...JSON 片段...</repo_map>
667
+ <source_files>...必要的 ts 源码摘录...</source_files>"
668
+ ```
669
+
670
+ agent 返回 `---KB---\n<full md body>\n---END---` envelope。**调用方手动** copy
671
+ body 写入 `.forge-knowledge/modules/daemon.md`。
672
+
673
+ ### Routing hints(host 注入到 system prompt)
674
+
675
+ R-B 引入 `withKnowledgeRoutingHints()`(`src/knowledge/cli-provider.ts`):在
676
+ 传给 `spawnClaudeCli` 的 `system` 字段拼上:
677
+
678
+ - `<page_kind>module|cross-module</page_kind>` — agent 据此决定输出 JSON
679
+ `{content, refs}`(module page)还是纯 markdown(cross-module page)
680
+ - `<page_name>daemon|architecture|...</page_name>` — agent 据此为 envelope 命名
681
+
682
+ routing hints 通过 system prompt 而不是 prompt body 传,避免污染 LLM 看的
683
+ "用户输入"部分。
684
+
685
+ ### 首次使用必读:TUI restart 必要
686
+
687
+ 与 `decision-maker` / `skill-distiller` / `claudemd-writer` 同样的 quirk ——
688
+ Claude Code TUI 在**启动时**一次性扫描 `.claude/agents/`,运行中新增的 agent
689
+ 不会被自动识别。
690
+
691
+ **首次使用(或更新 template 后)必须重启 TUI**:
692
+ - macOS: `Cmd+R` 或关闭窗口重新打开
693
+ - 重启后验证:在 Task tool 输入 `subagent_type='knowledge-builder'` 不报 not
694
+ found 即可
695
+
696
+ > 注意:方式 1(程序化 `cf knowledge build`)**不受** TUI restart 影响 —— 它
697
+ > 走 `child_process.spawn('claude', ...)`,与 TUI 的 agent registry 无关。
698
+
699
+ ### TUI restart 后仍 not found 的 fallback
700
+
701
+ 若重启 TUI 后 `subagent_type='knowledge-builder'` 仍报 not found,使用以下
702
+ inline 方式:
703
+
704
+ ```
705
+ spawn general-purpose agent with prompt:
706
+ "你扮演 knowledge-builder 角色。Read .claude/agents/knowledge-builder.md
707
+ 然后按其 Workflow 执行。
708
+
709
+ 输入 tags 如下:
710
+ <page_kind>module</page_kind>
711
+ <page_name>daemon</page_name>
712
+ <repo_map>...</repo_map>
713
+ <source_files>...</source_files>"
714
+ ```
715
+
716
+ ### Agent 文件三处镜像
717
+
718
+ ```
719
+ src/daemon/templates/agents/knowledge-builder.md ← canonical source (git tracked)
720
+ .claude/agents/knowledge-builder.md ← repo mirror (git -f tracked, TUI scan)
721
+ dist/daemon/templates/agents/knowledge-builder.md ← npm payload (build cp produces)
722
+ ~/.claude/agents/knowledge-builder.md ← user sync target (agent-sync.ts)
723
+ ```
724
+
725
+ 修改 agent .md 时**只改 canonical**(`src/daemon/templates/agents/`),然后:
726
+
727
+ ```bash
728
+ # 同步到 repo mirror
729
+ cp src/daemon/templates/agents/knowledge-builder.md .claude/agents/knowledge-builder.md
730
+ # build 自动同步到 dist/
731
+ npm run build
732
+ # daemon restart 自动同步到 ~/.claude/agents/
733
+ cf daemon restart
734
+ ```
735
+
736
+ repo mirror 与 canonical 必须 **byte-identical**(同 skill-distiller /
737
+ claudemd-writer,CI 不强制,lint 检查计划未来 phase 加入)。
738
+
739
+ ### Hard-fail 错误(不会 fallback 到 stub)
740
+
741
+ - `ClaudeCliMissingError` —— PATH 中找不到 `claude` binary,install hint:
742
+ `brew install claude` 或 `npm i -g @anthropic-ai/claude-code`
743
+ - `ClaudeCliExitError` —— 子进程 exit code ≠ 0(stderr snippet 打印)
744
+ - `ClaudeCliTimeoutError` —— 超过 5 分钟未完成(默认 timeout 300_000ms)
745
+ - `ClaudeCliCancelledError` —— 调用方主动 abort
746
+ - `KbBlockMissingError` —— agent 输出缺 `---KB---...---END---` envelope
747
+ (前 300 字符 snippet 打印;通常是 agent template drift,pull 最新
748
+ `.claude/agents/knowledge-builder.md` 后重试)
749
+
750
+ 所有错误**直接 exit 1**,不退化到模板(与 R-A 时期临时 `KnowledgeStubError`
751
+ 行为不同;R-B 之后 stub 类型保留但永不抛,R-D 将彻底删除)。
752
+
753
+ `src/cli/commands/knowledge.ts` 的 `reportKnowledgeBuildError()` 把这些错误
754
+ 映射成 operator-friendly 提示(含 install hint / snippet / 安全行动建议),
755
+ build / init / update 三个 action handler 共享。
756
+
757
+ ### `cf knowledge query --strategy rerank` 已下线
758
+
759
+ 历史上 v9.3 引入过 Haiku rerank 检索路径(`--strategy rerank` + LRU 缓存 +
760
+ 优雅降级)。该路径在 **Spec 2 Stage B(commit `797326f8`)已整组下线**,
761
+ 连同 `kb_query_log` 表的 `strategy` / `rerank_cache_hit` / `rerank_failed` 列
762
+ 与 `idx_kb_query_log_project_strategy` 索引一起迁移删除。
763
+
764
+ 子 spec B R-C 评估时确认:当前 src/ 没有任何活跃的 rerank stub / 入口需要
765
+ 接通;本期 R-C **无 rerank 改动**。R-D 评估时如果发现 type 残留再清扫。
766
+
767
+ 如果未来要重新引入 AI rerank:应在新 spec 里走 `claude` CLI 子进程 +
768
+ `knowledge-reranker` agent(不要再引入 ClaudeProvider 实例 / API key 依赖)。
769
+
770
+ ---
771
+
772
+ ## patch-applier agent 使用说明
773
+
774
+ `patch-applier` agent 定义在 `.claude/agents/patch-applier.md`(与
775
+ `src/daemon/templates/agents/patch-applier.md` 完全镜像,agent-sync 启动时
776
+ 拷到 `~/.claude/agents/`)。
777
+
778
+ 引入背景:spec [`0902`](docs/design/2026-05-29/0902-ai-config-removal-master-spec.md)
779
+ 子 spec C — 把 Web `POST /api/patch/preview` 从「daemon 进程内
780
+ `ClaudeProvider.complete()` + 用户配的 `ANTHROPIC_API_KEY`」迁到
781
+ 「`child_process.spawn('claude', ...)` headless CLI 子进程」。daemon 自身不再
782
+ 持 API key,走用户 Claude Code 订阅计费。
783
+
784
+ ### 两种使用方式
785
+
786
+ #### 方式 1:作为 `/api/patch/preview` 的 prompt 模板(程序化调用,默认入口)
787
+
788
+ `src/web/routes/patch.ts` 的 `registerPatchRoutes()` 在每次 POST 时调
789
+ `spawnClaudeCli()`(`src/core/utils/claude-cli-spawn.ts`,与 `claudemd-writer` /
790
+ `knowledge-builder` 共用):
791
+
792
+ ```bash
793
+ claude -p --agent patch-applier --bare \
794
+ --output-format stream-json --include-partial-messages \
795
+ --allowedTools "Read,Grep" --input-format text
796
+ ```
797
+
798
+ 每次 `POST /api/patch/preview` 一次 spawn。stdin 注入由 `buildPatchApplierPrompt()`
799
+ 拼接的 tagged blocks:
800
+
801
+ ```
802
+ <target_path>agents/decision-maker</target_path>
803
+ <file_content>...current full file content...</file_content>
804
+ <instruction>...natural-language change description...</instruction>
805
+ <context_files></context_files>
806
+ <rationale>...optional reason...</rationale>
807
+ ```
808
+
809
+ agent 解析后输出**正好一个** envelope(两种之一,**discriminated union**):
810
+
811
+ - `---PATCH---\n<unified diff>\n---END---` —— 实际可应用的 `patch -p0` 格式 diff
812
+ - `---NOPATCH---\nreason: <短语>\n---END---` —— 拒绝改动(文件已满足要求 /
813
+ 指令模糊 / 破坏性 / >50% 行需改写等场景)
814
+
815
+ host 调 `parsePatchEnvelope()` 抽 body:PATCH 优先(双 envelope 同现取 PATCH),
816
+ 解析失败抛 `PatchBlockMissingError`。
817
+
818
+ 响应 JSON shape:
819
+
820
+ ```typescript
821
+ // PATCH 路径
822
+ { targetType, targetName, filePath, patch: string, recommendation, rationale }
823
+ // NOPATCH 路径
824
+ { targetType, targetName, filePath, noPatch: true, reason: string, recommendation, rationale }
825
+ ```
826
+
827
+ 这种用法**不需要** TUI restart —— 不走 Claude Code 的 Task tool agent registry,
828
+ 是 host CLI 直接 spawn `claude` 子进程。
829
+
830
+ #### 方式 2:在 Claude Code TUI 里手动 spawn(调试 / 一次性生成)
831
+
832
+ ```
833
+ Task tool subagent_type='patch-applier' with prompt:
834
+ "<target_path>src/foo/bar.ts</target_path>
835
+ <file_content>...</file_content>
836
+ <instruction>把 logger.warn 全部换成 logger.error</instruction>
837
+ <context_files></context_files>
838
+ <rationale>warn level 太低,alert 漏触发</rationale>"
839
+ ```
840
+
841
+ agent 返回 `---PATCH---\n<diff>\n---END---` 或
842
+ `---NOPATCH---\nreason: ...\n---END---` envelope。**调用方手动** copy diff
843
+ 本地 `patch -p0 <` 应用。
844
+
845
+ ### 首次使用必读:TUI restart 必要
846
+
847
+ 与 `decision-maker` / `skill-distiller` / `claudemd-writer` / `knowledge-builder`
848
+ 同样的 quirk —— Claude Code TUI 在**启动时**一次性扫描 `.claude/agents/`,
849
+ 运行中新增的 agent 不会被自动识别。
850
+
851
+ **首次使用(或更新 template 后)必须重启 TUI**:
852
+ - macOS: `Cmd+R` 或关闭窗口重新打开
853
+ - 重启后验证:在 Task tool 输入 `subagent_type='patch-applier'` 不报 not
854
+ found 即可
855
+
856
+ > 注意:方式 1(程序化 `/api/patch/preview`)**不受** TUI restart 影响 —— 它
857
+ > 走 `child_process.spawn('claude', ...)`,与 TUI 的 agent registry 无关。
858
+
859
+ ### TUI restart 后仍 not found 的 fallback
860
+
861
+ 若重启 TUI 后 `subagent_type='patch-applier'` 仍报 not found,使用以下
862
+ inline 方式:
863
+
864
+ ```
865
+ spawn general-purpose agent with prompt:
866
+ "你扮演 patch-applier 角色。Read .claude/agents/patch-applier.md
867
+ 然后按其 Workflow 执行。
868
+
869
+ 输入 tags 如下:
870
+ <target_path>...</target_path>
871
+ <file_content>...</file_content>
872
+ <instruction>...</instruction>
873
+ <context_files>...</context_files>
874
+ <rationale>...</rationale>"
875
+ ```
876
+
877
+ ### Agent 文件三处镜像
878
+
879
+ ```
880
+ src/daemon/templates/agents/patch-applier.md ← canonical source (git tracked)
881
+ .claude/agents/patch-applier.md ← repo mirror (git -f tracked, TUI scan)
882
+ dist/daemon/templates/agents/patch-applier.md ← npm payload (build cp produces)
883
+ ~/.claude/agents/patch-applier.md ← user sync target (agent-sync.ts)
884
+ ```
885
+
886
+ 修改 agent .md 时**只改 canonical**(`src/daemon/templates/agents/`),然后:
887
+
888
+ ```bash
889
+ # 同步到 repo mirror
890
+ cp src/daemon/templates/agents/patch-applier.md .claude/agents/patch-applier.md
891
+ # build 自动同步到 dist/
892
+ npm run build
893
+ # daemon restart 自动同步到 ~/.claude/agents/
894
+ cf daemon restart
895
+ ```
896
+
897
+ repo mirror 与 canonical 必须 **byte-identical**(同 skill-distiller /
898
+ claudemd-writer / knowledge-builder;CI 不强制,lint 检查计划未来 phase 加入)。
899
+
900
+ ### PATCH / NOPATCH 双 envelope 协议(discriminated union 响应)
901
+
902
+ 这是 patch-applier 与 claudemd-writer / knowledge-builder 的**关键差异**:
903
+
904
+ | Agent | Envelope | 响应字段 |
905
+ |---|---|---|
906
+ | `claudemd-writer` | 单一 `---CLAUDEMD---...---END---` | 始终是 markdown body |
907
+ | `knowledge-builder` | 多 `---KB---...---END---` 拼接 | 每 page 一个 envelope |
908
+ | `patch-applier` | **二选一** `---PATCH---` 或 `---NOPATCH---` | discriminated union `{patch?, noPatch?, reason?}` |
909
+
910
+ `/api/patch/preview` 响应 shape 的 discriminated union 由 `parsePatchEnvelope()`
911
+ 保证:成功路径**恰好返回一个 patch 或一个 noPatch+reason**,调用方判断响应字段:
912
+
913
+ ```typescript
914
+ const r = await fetch('/api/patch/preview', { method: 'POST', body: ... });
915
+ const data = await r.json();
916
+ if (data.noPatch) {
917
+ // 拒绝改动,data.reason 显示拒因
918
+ } else if (data.patch) {
919
+ // 拿到 unified diff,调 /api/patch/apply 或本地 patch -p0
920
+ } else {
921
+ // 错误响应(500 / 504 / 499 等),看 data.error / data.message
922
+ }
923
+ ```
924
+
925
+ ### HTTP 错误码细分(R-B 引入)
926
+
927
+ | code | 错误类型 | 触发场景 |
928
+ |---|---|---|
929
+ | 400 | input validation | targetType / targetName / recommendation 缺失或非法 |
930
+ | 404 | not found | 解析后的 filePath 不存在 |
931
+ | 499 | `ClaudeCliCancelledError` | 调用方主动 abort(HTTP 499 借用 Nginx semantics)|
932
+ | 500 | `ClaudeCliMissingError` | PATH 找不到 `claude` binary(含 install hint) |
933
+ | 500 | `ClaudeCliExitError` | 子进程 exit code ≠ 0(含 stderr snippet) |
934
+ | 500 | `PatchBlockMissingError` | agent 输出缺 envelope(含 200 字符 rawSnippet) |
935
+ | 500 | `PatchSpawnError` | 未识别异常的兜底 |
936
+ | 504 | `ClaudeCliTimeoutError` | 超过 5 分钟未完成(默认 timeout 300_000ms) |
937
+
938
+ 所有错误**直接 hard-fail**,不退化到模板(与 R-A 时期临时 `PatchStubError`
939
+ 行为不同;R-B 之后 stub 类型保留但永不抛,R-D 将彻底删除)。
940
+
941
+ ### 非 SSE 流式决策(R-C 评估结果)
942
+
943
+ R-B 阶段 `runWithChildProcess` 留下了 `spawnClaudeCli.onProgress` 接口未接通,
944
+ R-C 评估是否升级为 SSE 流式(前端能实时累加 diff partial):
945
+
946
+ - 当前 `web/src/` 内置前端**没有任何** `/api/patch` 消费者(`grep -rn "api/patch" web/src` = 0 命中)
947
+ - 加 SSE 会引入 `text/event-stream` + 前端 EventSource 订阅逻辑,复杂度高
948
+ - 子 spec A / B 也未引入 SSE,保持一致
949
+ - **决策:本期 R-C 不加 SSE**,前端如需进度提示可用 spinner + "生成 patch 中..." 文案。
950
+ - 未来若加 patch web UI,可在新 spec 中评估 SSE 升级;spawnClaudeCli 已具
951
+ `onProgress` 接口,桥接 SSE event 较低成本
952
+
953
+ ### Hard-fail 错误(不会 fallback 到 stub)
954
+
955
+ - `ClaudeCliMissingError` —— PATH 中找不到 `claude` binary,install hint:
956
+ `brew install claude` 或 `npm i -g @anthropic-ai/claude-code`
957
+ - `ClaudeCliExitError` —— 子进程 exit code ≠ 0(stderr snippet 打印)
958
+ - `ClaudeCliTimeoutError` —— 超过 5 分钟未完成
959
+ - `ClaudeCliCancelledError` —— 调用方主动 abort
960
+ - `PatchBlockMissingError` —— agent 输出缺 `---PATCH---...---END---` 或
961
+ `---NOPATCH---...---END---` envelope(前 200 字符 snippet 入响应 JSON;
962
+ 通常是 agent template drift,pull 最新 `.claude/agents/patch-applier.md`
963
+ 后重试)
964
+
965
+ > `PatchStubError` 仍作 `@deprecated` named export 保留(R-A → R-D 兼容窗口),
966
+ > R-B 之后永不被抛;R-D 删除整个类 + tests/unit/web/routes/patch.test.ts 中
967
+ > `PatchStubError` describe 块。
968
+
969
+ ---
970
+
355
971
  ## 故障排查
356
972
 
357
973
  | 现象 | 排查 |
@@ -359,7 +975,7 @@ version: 1.0.0
359
975
  | Hook 没触发 | `ls -la ~/.claude/hooks/` 看是否指向 `dist/hooks/`;缺失就跑 `cf init`;或重启 daemon 让 `syncHooks()` 自动补 |
360
976
  | daemon 启动报 `EADDRINUSE` | 上次进程没退;`cf daemon stop` 或 `lsof -i :3721` 找 pid 杀 |
361
977
  | Web 后台 404 | `dist/web/static/` 是否存在;`npm run build` 是否成功;Vite 前端 `cd web && npm run build` 后再 root build |
362
- | Skill 没被推荐 | `cf skills list` 看是否加载;frontmatter 检查是否缺 `name` 字段;语义匹配需要 `cf config` API key |
978
+ | Skill 没被推荐 | `cf skills list` 看是否加载;frontmatter 检查是否缺 `name` 字段。**注**:语义匹配 (`SemanticSkillMatcher`) 已在 spec `0902` spec D R-B 删除,现在仅 keyword 匹配 — 确保 skill frontmatter 的 `keywords: [...]` 列表覆盖关键词 |
363
979
  | `cf skills upgrade` 无候选 | `~/.claude-forge/skill-candidates/` 是否拉成功;网络问题用代理重试 |
364
980
  | better-sqlite3 native binding error | Node 版本与 binding 不匹配;`npm rebuild better-sqlite3` |
365
981
  | Schema 改动后查不到字段 | 手动加 `src/core/storage/migrations/<n>_<desc>.sql`,daemon 启动会自动执行 |