@winspan/claude-forge 8.54.4 → 9.12.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 (1053) hide show
  1. package/DEVELOPMENT.md +723 -46
  2. package/README.md +166 -21
  3. package/dist/catalogs/agents.json +67 -0
  4. package/dist/catalogs/skills.json +306 -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/agent.d.ts +169 -0
  26. package/dist/cli/commands/agent.d.ts.map +1 -0
  27. package/dist/cli/commands/agent.js +690 -0
  28. package/dist/cli/commands/agent.js.map +1 -0
  29. package/dist/cli/commands/agents.d.ts +18 -0
  30. package/dist/cli/commands/agents.d.ts.map +1 -0
  31. package/dist/cli/commands/agents.js +160 -0
  32. package/dist/cli/commands/agents.js.map +1 -0
  33. package/dist/cli/commands/bypass.d.ts +18 -0
  34. package/dist/cli/commands/bypass.d.ts.map +1 -0
  35. package/dist/cli/commands/bypass.js +87 -0
  36. package/dist/cli/commands/bypass.js.map +1 -0
  37. package/dist/cli/commands/claudemd.d.ts +60 -0
  38. package/dist/cli/commands/claudemd.d.ts.map +1 -1
  39. package/dist/cli/commands/claudemd.js +174 -37
  40. package/dist/cli/commands/claudemd.js.map +1 -1
  41. package/dist/cli/commands/codegraph.d.ts +17 -0
  42. package/dist/cli/commands/codegraph.d.ts.map +1 -0
  43. package/dist/cli/commands/codegraph.js +263 -0
  44. package/dist/cli/commands/codegraph.js.map +1 -0
  45. package/dist/cli/commands/config.d.ts.map +1 -1
  46. package/dist/cli/commands/config.js +94 -1
  47. package/dist/cli/commands/config.js.map +1 -1
  48. package/dist/cli/commands/daemon.d.ts +39 -0
  49. package/dist/cli/commands/daemon.d.ts.map +1 -1
  50. package/dist/cli/commands/daemon.js +167 -20
  51. package/dist/cli/commands/daemon.js.map +1 -1
  52. package/dist/cli/commands/decisions.d.ts +129 -0
  53. package/dist/cli/commands/decisions.d.ts.map +1 -0
  54. package/dist/cli/commands/decisions.js +706 -0
  55. package/dist/cli/commands/decisions.js.map +1 -0
  56. package/dist/cli/commands/doctor.d.ts +29 -0
  57. package/dist/cli/commands/doctor.d.ts.map +1 -0
  58. package/dist/cli/commands/doctor.js +124 -0
  59. package/dist/cli/commands/doctor.js.map +1 -0
  60. package/dist/cli/commands/entropy.d.ts +35 -0
  61. package/dist/cli/commands/entropy.d.ts.map +1 -0
  62. package/dist/cli/commands/entropy.js +121 -0
  63. package/dist/cli/commands/entropy.js.map +1 -0
  64. package/dist/cli/commands/executions.d.ts +1 -0
  65. package/dist/cli/commands/executions.d.ts.map +1 -1
  66. package/dist/cli/commands/executions.js +12 -2
  67. package/dist/cli/commands/executions.js.map +1 -1
  68. package/dist/cli/commands/fix.d.ts +31 -0
  69. package/dist/cli/commands/fix.d.ts.map +1 -0
  70. package/dist/cli/commands/fix.js +108 -0
  71. package/dist/cli/commands/fix.js.map +1 -0
  72. package/dist/cli/commands/governance.d.ts +21 -0
  73. package/dist/cli/commands/governance.d.ts.map +1 -0
  74. package/dist/cli/commands/governance.js +60 -0
  75. package/dist/cli/commands/governance.js.map +1 -0
  76. package/dist/cli/commands/init.d.ts +27 -0
  77. package/dist/cli/commands/init.d.ts.map +1 -1
  78. package/dist/cli/commands/init.js +158 -146
  79. package/dist/cli/commands/init.js.map +1 -1
  80. package/dist/cli/commands/insights-goal-check.d.ts +54 -0
  81. package/dist/cli/commands/insights-goal-check.d.ts.map +1 -0
  82. package/dist/cli/commands/insights-goal-check.js +318 -0
  83. package/dist/cli/commands/insights-goal-check.js.map +1 -0
  84. package/dist/cli/commands/insights.d.ts +15 -0
  85. package/dist/cli/commands/insights.d.ts.map +1 -0
  86. package/dist/cli/commands/insights.js +127 -0
  87. package/dist/cli/commands/insights.js.map +1 -0
  88. package/dist/cli/commands/knowledge.d.ts +117 -0
  89. package/dist/cli/commands/knowledge.d.ts.map +1 -0
  90. package/dist/cli/commands/knowledge.js +1070 -0
  91. package/dist/cli/commands/knowledge.js.map +1 -0
  92. package/dist/cli/commands/loop.d.ts +95 -0
  93. package/dist/cli/commands/loop.d.ts.map +1 -0
  94. package/dist/cli/commands/loop.js +408 -0
  95. package/dist/cli/commands/loop.js.map +1 -0
  96. package/dist/cli/commands/maintenance.d.ts +33 -0
  97. package/dist/cli/commands/maintenance.d.ts.map +1 -0
  98. package/dist/cli/commands/maintenance.js +75 -0
  99. package/dist/cli/commands/maintenance.js.map +1 -0
  100. package/dist/cli/commands/mcp.d.ts +22 -11
  101. package/dist/cli/commands/mcp.d.ts.map +1 -1
  102. package/dist/cli/commands/mcp.js +93 -5
  103. package/dist/cli/commands/mcp.js.map +1 -1
  104. package/dist/cli/commands/menu.d.ts.map +1 -1
  105. package/dist/cli/commands/menu.js +10 -184
  106. package/dist/cli/commands/menu.js.map +1 -1
  107. package/dist/cli/commands/project.d.ts +98 -0
  108. package/dist/cli/commands/project.d.ts.map +1 -0
  109. package/dist/cli/commands/project.js +382 -0
  110. package/dist/cli/commands/project.js.map +1 -0
  111. package/dist/cli/commands/skills.d.ts +131 -0
  112. package/dist/cli/commands/skills.d.ts.map +1 -1
  113. package/dist/cli/commands/skills.js +404 -118
  114. package/dist/cli/commands/skills.js.map +1 -1
  115. package/dist/cli/commands/spec.d.ts +40 -0
  116. package/dist/cli/commands/spec.d.ts.map +1 -0
  117. package/dist/cli/commands/spec.js +49 -0
  118. package/dist/cli/commands/spec.js.map +1 -0
  119. package/dist/cli/commands/stats.d.ts.map +1 -1
  120. package/dist/cli/commands/stats.js +11 -3
  121. package/dist/cli/commands/stats.js.map +1 -1
  122. package/dist/cli/commands/status.d.ts.map +1 -1
  123. package/dist/cli/commands/status.js +17 -2
  124. package/dist/cli/commands/status.js.map +1 -1
  125. package/dist/cli/commands/trace.d.ts.map +1 -1
  126. package/dist/cli/commands/trace.js +4 -9
  127. package/dist/cli/commands/trace.js.map +1 -1
  128. package/dist/cli/commands/violations.d.ts +14 -0
  129. package/dist/cli/commands/violations.d.ts.map +1 -0
  130. package/dist/cli/commands/violations.js +43 -0
  131. package/dist/cli/commands/violations.js.map +1 -0
  132. package/dist/cli/index.js +34 -0
  133. package/dist/cli/index.js.map +1 -1
  134. package/dist/cli/init/hook-manager.d.ts +1 -1
  135. package/dist/cli/init/hook-manager.d.ts.map +1 -1
  136. package/dist/cli/init/hook-manager.js +6 -0
  137. package/dist/cli/init/hook-manager.js.map +1 -1
  138. package/dist/cli/utils/resolve-session.d.ts +32 -0
  139. package/dist/cli/utils/resolve-session.d.ts.map +1 -0
  140. package/dist/cli/utils/resolve-session.js +39 -0
  141. package/dist/cli/utils/resolve-session.js.map +1 -0
  142. package/dist/core/config.d.ts +4 -1
  143. package/dist/core/config.d.ts.map +1 -1
  144. package/dist/core/config.js +11 -23
  145. package/dist/core/config.js.map +1 -1
  146. package/dist/core/constants.d.ts +51 -13
  147. package/dist/core/constants.d.ts.map +1 -1
  148. package/dist/core/constants.js +63 -13
  149. package/dist/core/constants.js.map +1 -1
  150. package/dist/core/diagnostics/checks.d.ts +151 -0
  151. package/dist/core/diagnostics/checks.d.ts.map +1 -0
  152. package/dist/core/diagnostics/checks.js +766 -0
  153. package/dist/core/diagnostics/checks.js.map +1 -0
  154. package/dist/core/diagnostics/daemon-status.d.ts +77 -0
  155. package/dist/core/diagnostics/daemon-status.d.ts.map +1 -0
  156. package/dist/core/diagnostics/daemon-status.js +113 -0
  157. package/dist/core/diagnostics/daemon-status.js.map +1 -0
  158. package/dist/core/diagnostics/entropy-checks.d.ts +83 -0
  159. package/dist/core/diagnostics/entropy-checks.d.ts.map +1 -0
  160. package/dist/core/diagnostics/entropy-checks.js +400 -0
  161. package/dist/core/diagnostics/entropy-checks.js.map +1 -0
  162. package/dist/core/diagnostics/fix-runner.d.ts +54 -0
  163. package/dist/core/diagnostics/fix-runner.d.ts.map +1 -0
  164. package/dist/core/diagnostics/fix-runner.js +90 -0
  165. package/dist/core/diagnostics/fix-runner.js.map +1 -0
  166. package/dist/core/diagnostics/heartbeat-reader.d.ts +28 -0
  167. package/dist/core/diagnostics/heartbeat-reader.d.ts.map +1 -0
  168. package/dist/core/diagnostics/heartbeat-reader.js +50 -0
  169. package/dist/core/diagnostics/heartbeat-reader.js.map +1 -0
  170. package/dist/core/diagnostics/knip-runner.d.ts +49 -0
  171. package/dist/core/diagnostics/knip-runner.d.ts.map +1 -0
  172. package/dist/core/diagnostics/knip-runner.js +100 -0
  173. package/dist/core/diagnostics/knip-runner.js.map +1 -0
  174. package/dist/core/diagnostics/markers.d.ts +96 -0
  175. package/dist/core/diagnostics/markers.d.ts.map +1 -0
  176. package/dist/core/diagnostics/markers.js +153 -0
  177. package/dist/core/diagnostics/markers.js.map +1 -0
  178. package/dist/core/event-fields.d.ts +27 -0
  179. package/dist/core/event-fields.d.ts.map +1 -1
  180. package/dist/core/event-fields.js +43 -0
  181. package/dist/core/event-fields.js.map +1 -1
  182. package/dist/core/governance/global-inject.d.ts +90 -0
  183. package/dist/core/governance/global-inject.d.ts.map +1 -0
  184. package/dist/core/governance/global-inject.js +184 -0
  185. package/dist/core/governance/global-inject.js.map +1 -0
  186. package/dist/core/insights/agent-anchor-guard.d.ts +77 -0
  187. package/dist/core/insights/agent-anchor-guard.d.ts.map +1 -0
  188. package/dist/core/insights/agent-anchor-guard.js +119 -0
  189. package/dist/core/insights/agent-anchor-guard.js.map +1 -0
  190. package/dist/core/insights/agent-distill-context.d.ts +55 -0
  191. package/dist/core/insights/agent-distill-context.d.ts.map +1 -0
  192. package/dist/core/insights/agent-distill-context.js +146 -0
  193. package/dist/core/insights/agent-distill-context.js.map +1 -0
  194. package/dist/core/insights/agent-distill-spawn.d.ts +56 -0
  195. package/dist/core/insights/agent-distill-spawn.d.ts.map +1 -0
  196. package/dist/core/insights/agent-distill-spawn.js +179 -0
  197. package/dist/core/insights/agent-distill-spawn.js.map +1 -0
  198. package/dist/core/insights/agent-drift.d.ts +66 -0
  199. package/dist/core/insights/agent-drift.d.ts.map +1 -0
  200. package/dist/core/insights/agent-drift.js +109 -0
  201. package/dist/core/insights/agent-drift.js.map +1 -0
  202. package/dist/core/insights/agent-evolution-sources.d.ts +21 -0
  203. package/dist/core/insights/agent-evolution-sources.d.ts.map +1 -0
  204. package/dist/core/insights/agent-evolution-sources.js +36 -0
  205. package/dist/core/insights/agent-evolution-sources.js.map +1 -0
  206. package/dist/core/insights/agent-health.d.ts +142 -0
  207. package/dist/core/insights/agent-health.d.ts.map +1 -0
  208. package/dist/core/insights/agent-health.js +296 -0
  209. package/dist/core/insights/agent-health.js.map +1 -0
  210. package/dist/core/insights/agent-patch-apply.d.ts +45 -0
  211. package/dist/core/insights/agent-patch-apply.d.ts.map +1 -0
  212. package/dist/core/insights/agent-patch-apply.js +165 -0
  213. package/dist/core/insights/agent-patch-apply.js.map +1 -0
  214. package/dist/core/insights/agent-suggest.d.ts +128 -0
  215. package/dist/core/insights/agent-suggest.d.ts.map +1 -0
  216. package/dist/core/insights/agent-suggest.js +284 -0
  217. package/dist/core/insights/agent-suggest.js.map +1 -0
  218. package/dist/core/insights/coverage-tiers.d.ts +46 -0
  219. package/dist/core/insights/coverage-tiers.d.ts.map +1 -0
  220. package/dist/core/insights/coverage-tiers.js +95 -0
  221. package/dist/core/insights/coverage-tiers.js.map +1 -0
  222. package/dist/core/insights/experience-extractor.d.ts +60 -0
  223. package/dist/core/insights/experience-extractor.d.ts.map +1 -0
  224. package/dist/core/insights/experience-extractor.js +319 -0
  225. package/dist/core/insights/experience-extractor.js.map +1 -0
  226. package/dist/core/insights/violation-reporter.d.ts +149 -0
  227. package/dist/core/insights/violation-reporter.d.ts.map +1 -0
  228. package/dist/core/insights/violation-reporter.js +391 -0
  229. package/dist/core/insights/violation-reporter.js.map +1 -0
  230. package/dist/core/loop/loop-engine.d.ts +140 -0
  231. package/dist/core/loop/loop-engine.d.ts.map +1 -0
  232. package/dist/core/loop/loop-engine.js +266 -0
  233. package/dist/core/loop/loop-engine.js.map +1 -0
  234. package/dist/core/queue/index.d.ts +16 -3
  235. package/dist/core/queue/index.d.ts.map +1 -1
  236. package/dist/core/queue/index.js +16 -4
  237. package/dist/core/queue/index.js.map +1 -1
  238. package/dist/core/storage/base.d.ts +317 -0
  239. package/dist/core/storage/base.d.ts.map +1 -1
  240. package/dist/core/storage/base.js +1093 -0
  241. package/dist/core/storage/base.js.map +1 -1
  242. package/dist/core/storage/codec/tool-input-codec.d.ts +93 -0
  243. package/dist/core/storage/codec/tool-input-codec.d.ts.map +1 -0
  244. package/dist/core/storage/codec/tool-input-codec.js +159 -0
  245. package/dist/core/storage/codec/tool-input-codec.js.map +1 -0
  246. package/dist/core/storage/codegraph-types.d.ts +79 -0
  247. package/dist/core/storage/codegraph-types.d.ts.map +1 -0
  248. package/dist/core/storage/codegraph-types.js +14 -0
  249. package/dist/core/storage/codegraph-types.js.map +1 -0
  250. package/dist/core/storage/codegraph.d.ts +186 -0
  251. package/dist/core/storage/codegraph.d.ts.map +1 -0
  252. package/dist/core/storage/codegraph.js +452 -0
  253. package/dist/core/storage/codegraph.js.map +1 -0
  254. package/dist/core/storage/decisions.d.ts +387 -0
  255. package/dist/core/storage/decisions.d.ts.map +1 -0
  256. package/dist/core/storage/decisions.js +534 -0
  257. package/dist/core/storage/decisions.js.map +1 -0
  258. package/dist/core/storage/events.d.ts +239 -8
  259. package/dist/core/storage/events.d.ts.map +1 -1
  260. package/dist/core/storage/events.js +705 -39
  261. package/dist/core/storage/events.js.map +1 -1
  262. package/dist/core/storage/feedback.d.ts +111 -0
  263. package/dist/core/storage/feedback.d.ts.map +1 -0
  264. package/dist/core/storage/feedback.js +186 -0
  265. package/dist/core/storage/feedback.js.map +1 -0
  266. package/dist/core/storage/forge-config.d.ts +40 -0
  267. package/dist/core/storage/forge-config.d.ts.map +1 -0
  268. package/dist/core/storage/forge-config.js +65 -0
  269. package/dist/core/storage/forge-config.js.map +1 -0
  270. package/dist/core/storage/injections.d.ts +68 -0
  271. package/dist/core/storage/injections.d.ts.map +1 -1
  272. package/dist/core/storage/injections.js +131 -5
  273. package/dist/core/storage/injections.js.map +1 -1
  274. package/dist/core/storage/knowledge.d.ts +332 -0
  275. package/dist/core/storage/knowledge.d.ts.map +1 -0
  276. package/dist/core/storage/knowledge.js +589 -0
  277. package/dist/core/storage/knowledge.js.map +1 -0
  278. package/dist/core/storage/maintenance.d.ts +36 -9
  279. package/dist/core/storage/maintenance.d.ts.map +1 -1
  280. package/dist/core/storage/maintenance.js +56 -24
  281. package/dist/core/storage/maintenance.js.map +1 -1
  282. package/dist/core/storage/pipeline-rollup.d.ts +111 -0
  283. package/dist/core/storage/pipeline-rollup.d.ts.map +1 -0
  284. package/dist/core/storage/pipeline-rollup.js +432 -0
  285. package/dist/core/storage/pipeline-rollup.js.map +1 -0
  286. package/dist/core/storage/routing.d.ts +50 -3
  287. package/dist/core/storage/routing.d.ts.map +1 -1
  288. package/dist/core/storage/routing.js +131 -10
  289. package/dist/core/storage/routing.js.map +1 -1
  290. package/dist/core/storage/rows.d.ts +31 -8
  291. package/dist/core/storage/rows.d.ts.map +1 -1
  292. package/dist/core/storage/schema.sql +367 -23
  293. package/dist/core/storage/sessions.d.ts +136 -0
  294. package/dist/core/storage/sessions.d.ts.map +1 -1
  295. package/dist/core/storage/sessions.js +352 -15
  296. package/dist/core/storage/sessions.js.map +1 -1
  297. package/dist/core/storage/skills.d.ts +160 -0
  298. package/dist/core/storage/skills.d.ts.map +1 -1
  299. package/dist/core/storage/skills.js +368 -7
  300. package/dist/core/storage/skills.js.map +1 -1
  301. package/dist/core/storage/sqlite.d.ts +309 -20
  302. package/dist/core/storage/sqlite.d.ts.map +1 -1
  303. package/dist/core/storage/sqlite.js +523 -16
  304. package/dist/core/storage/sqlite.js.map +1 -1
  305. package/dist/core/storage/tasks.d.ts +744 -2
  306. package/dist/core/storage/tasks.d.ts.map +1 -1
  307. package/dist/core/storage/tasks.js +1691 -17
  308. package/dist/core/storage/tasks.js.map +1 -1
  309. package/dist/core/storage/tool-intercepts.d.ts +69 -0
  310. package/dist/core/storage/tool-intercepts.d.ts.map +1 -0
  311. package/dist/core/storage/tool-intercepts.js +116 -0
  312. package/dist/core/storage/tool-intercepts.js.map +1 -0
  313. package/dist/core/types.d.ts +136 -18
  314. package/dist/core/types.d.ts.map +1 -1
  315. package/dist/core/types.js +10 -0
  316. package/dist/core/types.js.map +1 -1
  317. package/dist/core/utils/backup.d.ts +81 -0
  318. package/dist/core/utils/backup.d.ts.map +1 -0
  319. package/dist/core/utils/backup.js +98 -0
  320. package/dist/core/utils/backup.js.map +1 -0
  321. package/dist/core/utils/binary-paths.d.ts +124 -0
  322. package/dist/core/utils/binary-paths.d.ts.map +1 -0
  323. package/dist/core/utils/binary-paths.js +218 -0
  324. package/dist/core/utils/binary-paths.js.map +1 -0
  325. package/dist/core/utils/bypass-token.d.ts +75 -0
  326. package/dist/core/utils/bypass-token.d.ts.map +1 -0
  327. package/dist/core/utils/bypass-token.js +133 -0
  328. package/dist/core/utils/bypass-token.js.map +1 -0
  329. package/dist/core/utils/cc-builtin-agents.d.ts +3 -0
  330. package/dist/core/utils/cc-builtin-agents.d.ts.map +1 -0
  331. package/dist/core/utils/cc-builtin-agents.js +29 -0
  332. package/dist/core/utils/cc-builtin-agents.js.map +1 -0
  333. package/dist/core/utils/claude-cli-resolver.d.ts +26 -0
  334. package/dist/core/utils/claude-cli-resolver.d.ts.map +1 -0
  335. package/dist/core/utils/claude-cli-resolver.js +115 -0
  336. package/dist/core/utils/claude-cli-resolver.js.map +1 -0
  337. package/dist/core/utils/claude-cli-spawn.d.ts +106 -0
  338. package/dist/core/utils/claude-cli-spawn.d.ts.map +1 -0
  339. package/dist/core/utils/claude-cli-spawn.js +219 -0
  340. package/dist/core/utils/claude-cli-spawn.js.map +1 -0
  341. package/dist/core/utils/forge-resume-block.d.ts.map +1 -1
  342. package/dist/core/utils/forge-resume-block.js +3 -2
  343. package/dist/core/utils/forge-resume-block.js.map +1 -1
  344. package/dist/core/utils/logger.d.ts +15 -3
  345. package/dist/core/utils/logger.d.ts.map +1 -1
  346. package/dist/core/utils/logger.js +20 -2
  347. package/dist/core/utils/logger.js.map +1 -1
  348. package/dist/core/utils/noise-prompt.d.ts +97 -0
  349. package/dist/core/utils/noise-prompt.d.ts.map +1 -0
  350. package/dist/core/utils/noise-prompt.js +127 -0
  351. package/dist/core/utils/noise-prompt.js.map +1 -0
  352. package/dist/core/utils/path.d.ts +0 -4
  353. package/dist/core/utils/path.d.ts.map +1 -1
  354. package/dist/core/utils/path.js +0 -7
  355. package/dist/core/utils/path.js.map +1 -1
  356. package/dist/core/utils/time.d.ts +67 -0
  357. package/dist/core/utils/time.d.ts.map +1 -1
  358. package/dist/core/utils/time.js +147 -0
  359. package/dist/core/utils/time.js.map +1 -1
  360. package/dist/daemon/agent-sync.d.ts +24 -0
  361. package/dist/daemon/agent-sync.d.ts.map +1 -0
  362. package/dist/daemon/agent-sync.js +114 -0
  363. package/dist/daemon/agent-sync.js.map +1 -0
  364. package/dist/daemon/config-store.d.ts +55 -0
  365. package/dist/daemon/config-store.d.ts.map +1 -0
  366. package/dist/daemon/config-store.js +146 -0
  367. package/dist/daemon/config-store.js.map +1 -0
  368. package/dist/daemon/event-parser.d.ts +22 -0
  369. package/dist/daemon/event-parser.d.ts.map +1 -1
  370. package/dist/daemon/event-parser.js +54 -3
  371. package/dist/daemon/event-parser.js.map +1 -1
  372. package/dist/daemon/handlers/history-exporter.d.ts.map +1 -1
  373. package/dist/daemon/handlers/history-exporter.js +9 -8
  374. package/dist/daemon/handlers/history-exporter.js.map +1 -1
  375. package/dist/daemon/handlers/post-tool-use.d.ts +66 -4
  376. package/dist/daemon/handlers/post-tool-use.d.ts.map +1 -1
  377. package/dist/daemon/handlers/post-tool-use.js +221 -8
  378. package/dist/daemon/handlers/post-tool-use.js.map +1 -1
  379. package/dist/daemon/handlers/pre-tool-use.d.ts +181 -0
  380. package/dist/daemon/handlers/pre-tool-use.d.ts.map +1 -0
  381. package/dist/daemon/handlers/pre-tool-use.js +618 -0
  382. package/dist/daemon/handlers/pre-tool-use.js.map +1 -0
  383. package/dist/daemon/handlers/stop.d.ts +55 -7
  384. package/dist/daemon/handlers/stop.d.ts.map +1 -1
  385. package/dist/daemon/handlers/stop.js +245 -8
  386. package/dist/daemon/handlers/stop.js.map +1 -1
  387. package/dist/daemon/handlers/user-prompt.d.ts +51 -14
  388. package/dist/daemon/handlers/user-prompt.d.ts.map +1 -1
  389. package/dist/daemon/handlers/user-prompt.js +223 -95
  390. package/dist/daemon/handlers/user-prompt.js.map +1 -1
  391. package/dist/daemon/handlers/violation-content-backfill.d.ts +76 -0
  392. package/dist/daemon/handlers/violation-content-backfill.d.ts.map +1 -0
  393. package/dist/daemon/handlers/violation-content-backfill.js +167 -0
  394. package/dist/daemon/handlers/violation-content-backfill.js.map +1 -0
  395. package/dist/daemon/hook-sync.d.ts.map +1 -1
  396. package/dist/daemon/hook-sync.js +2 -1
  397. package/dist/daemon/hook-sync.js.map +1 -1
  398. package/dist/daemon/index.d.ts +19 -0
  399. package/dist/daemon/index.d.ts.map +1 -1
  400. package/dist/daemon/index.js +439 -86
  401. package/dist/daemon/index.js.map +1 -1
  402. package/dist/daemon/lifecycle.d.ts +48 -1
  403. package/dist/daemon/lifecycle.d.ts.map +1 -1
  404. package/dist/daemon/lifecycle.js +98 -2
  405. package/dist/daemon/lifecycle.js.map +1 -1
  406. package/dist/daemon/router.d.ts +4 -1
  407. package/dist/daemon/router.d.ts.map +1 -1
  408. package/dist/daemon/router.js +4 -2
  409. package/dist/daemon/router.js.map +1 -1
  410. package/dist/daemon/rules/defaults.d.ts +20 -0
  411. package/dist/daemon/rules/defaults.d.ts.map +1 -0
  412. package/dist/daemon/rules/defaults.js +779 -0
  413. package/dist/daemon/rules/defaults.js.map +1 -0
  414. package/dist/daemon/rules/registry.d.ts +47 -0
  415. package/dist/daemon/rules/registry.d.ts.map +1 -0
  416. package/dist/daemon/rules/registry.js +84 -0
  417. package/dist/daemon/rules/registry.js.map +1 -0
  418. package/dist/daemon/rules/types.d.ts +176 -0
  419. package/dist/daemon/rules/types.d.ts.map +1 -0
  420. package/dist/daemon/rules/types.js +15 -0
  421. package/dist/daemon/rules/types.js.map +1 -0
  422. package/dist/daemon/rules/whitelist.d.ts +101 -0
  423. package/dist/daemon/rules/whitelist.d.ts.map +1 -0
  424. package/dist/daemon/rules/whitelist.js +210 -0
  425. package/dist/daemon/rules/whitelist.js.map +1 -0
  426. package/dist/daemon/rules/workflow-defaults.d.ts +52 -0
  427. package/dist/daemon/rules/workflow-defaults.d.ts.map +1 -0
  428. package/dist/daemon/rules/workflow-defaults.js +521 -0
  429. package/dist/daemon/rules/workflow-defaults.js.map +1 -0
  430. package/dist/daemon/server.d.ts +11 -1
  431. package/dist/daemon/server.d.ts.map +1 -1
  432. package/dist/daemon/server.js +7 -1
  433. package/dist/daemon/server.js.map +1 -1
  434. package/dist/daemon/services/codegraph-sync.d.ts +94 -0
  435. package/dist/daemon/services/codegraph-sync.d.ts.map +1 -0
  436. package/dist/daemon/services/codegraph-sync.js +159 -0
  437. package/dist/daemon/services/codegraph-sync.js.map +1 -0
  438. package/dist/daemon/services/context-injector.d.ts +34 -0
  439. package/dist/daemon/services/context-injector.d.ts.map +1 -0
  440. package/dist/daemon/services/context-injector.js +61 -0
  441. package/dist/daemon/services/context-injector.js.map +1 -0
  442. package/dist/daemon/services/decision-hint.d.ts +240 -0
  443. package/dist/daemon/services/decision-hint.d.ts.map +1 -0
  444. package/dist/daemon/services/decision-hint.js +562 -0
  445. package/dist/daemon/services/decision-hint.js.map +1 -0
  446. package/dist/daemon/services/event-ttl-sweep.d.ts +86 -0
  447. package/dist/daemon/services/event-ttl-sweep.d.ts.map +1 -0
  448. package/dist/daemon/services/event-ttl-sweep.js +124 -0
  449. package/dist/daemon/services/event-ttl-sweep.js.map +1 -0
  450. package/dist/daemon/services/feedback-aggregator.d.ts +167 -0
  451. package/dist/daemon/services/feedback-aggregator.d.ts.map +1 -0
  452. package/dist/daemon/services/feedback-aggregator.js +415 -0
  453. package/dist/daemon/services/feedback-aggregator.js.map +1 -0
  454. package/dist/daemon/services/heartbeat-writer.d.ts +46 -0
  455. package/dist/daemon/services/heartbeat-writer.d.ts.map +1 -0
  456. package/dist/daemon/services/heartbeat-writer.js +82 -0
  457. package/dist/daemon/services/heartbeat-writer.js.map +1 -0
  458. package/dist/daemon/services/idle-session-sweeper.d.ts +61 -0
  459. package/dist/daemon/services/idle-session-sweeper.d.ts.map +1 -0
  460. package/dist/daemon/services/idle-session-sweeper.js +94 -0
  461. package/dist/daemon/services/idle-session-sweeper.js.map +1 -0
  462. package/dist/daemon/services/idle-task-budget.d.ts +50 -0
  463. package/dist/daemon/services/idle-task-budget.d.ts.map +1 -0
  464. package/dist/daemon/services/idle-task-budget.js +72 -0
  465. package/dist/daemon/services/idle-task-budget.js.map +1 -0
  466. package/dist/daemon/services/intercept-revive.d.ts +60 -0
  467. package/dist/daemon/services/intercept-revive.d.ts.map +1 -0
  468. package/dist/daemon/services/intercept-revive.js +86 -0
  469. package/dist/daemon/services/intercept-revive.js.map +1 -0
  470. package/dist/daemon/services/intercept-rollback-guard.d.ts +105 -0
  471. package/dist/daemon/services/intercept-rollback-guard.d.ts.map +1 -0
  472. package/dist/daemon/services/intercept-rollback-guard.js +152 -0
  473. package/dist/daemon/services/intercept-rollback-guard.js.map +1 -0
  474. package/dist/daemon/services/intercept-timeout-sweeper.d.ts +58 -0
  475. package/dist/daemon/services/intercept-timeout-sweeper.d.ts.map +1 -0
  476. package/dist/daemon/services/intercept-timeout-sweeper.js +83 -0
  477. package/dist/daemon/services/intercept-timeout-sweeper.js.map +1 -0
  478. package/dist/daemon/services/kb-injector.d.ts +57 -0
  479. package/dist/daemon/services/kb-injector.d.ts.map +1 -0
  480. package/dist/daemon/services/kb-injector.js +148 -0
  481. package/dist/daemon/services/kb-injector.js.map +1 -0
  482. package/dist/daemon/services/kb-rebuild-scheduler.d.ts +95 -0
  483. package/dist/daemon/services/kb-rebuild-scheduler.d.ts.map +1 -0
  484. package/dist/daemon/services/kb-rebuild-scheduler.js +149 -0
  485. package/dist/daemon/services/kb-rebuild-scheduler.js.map +1 -0
  486. package/dist/daemon/services/loop-hint.d.ts +139 -0
  487. package/dist/daemon/services/loop-hint.d.ts.map +1 -0
  488. package/dist/daemon/services/loop-hint.js +272 -0
  489. package/dist/daemon/services/loop-hint.js.map +1 -0
  490. package/dist/daemon/services/outcome-classification-service.d.ts +49 -0
  491. package/dist/daemon/services/outcome-classification-service.d.ts.map +1 -0
  492. package/dist/daemon/services/outcome-classification-service.js +214 -0
  493. package/dist/daemon/services/outcome-classification-service.js.map +1 -0
  494. package/dist/daemon/services/outcome-classifier.d.ts +136 -0
  495. package/dist/daemon/services/outcome-classifier.d.ts.map +1 -0
  496. package/dist/daemon/services/outcome-classifier.js +178 -0
  497. package/dist/daemon/services/outcome-classifier.js.map +1 -0
  498. package/dist/daemon/services/outcome-nudge.d.ts +107 -0
  499. package/dist/daemon/services/outcome-nudge.d.ts.map +1 -0
  500. package/dist/daemon/services/outcome-nudge.js +242 -0
  501. package/dist/daemon/services/outcome-nudge.js.map +1 -0
  502. package/dist/daemon/services/spec-approval.d.ts +127 -0
  503. package/dist/daemon/services/spec-approval.d.ts.map +1 -0
  504. package/dist/daemon/services/spec-approval.js +216 -0
  505. package/dist/daemon/services/spec-approval.js.map +1 -0
  506. package/dist/daemon/services/spec-gate.d.ts +54 -0
  507. package/dist/daemon/services/spec-gate.d.ts.map +1 -0
  508. package/dist/daemon/services/spec-gate.js +113 -0
  509. package/dist/daemon/services/spec-gate.js.map +1 -0
  510. package/dist/daemon/services/task-boundary-classifier.d.ts +78 -0
  511. package/dist/daemon/services/task-boundary-classifier.d.ts.map +1 -0
  512. package/dist/daemon/services/task-boundary-classifier.js +202 -0
  513. package/dist/daemon/services/task-boundary-classifier.js.map +1 -0
  514. package/dist/daemon/services/task-segmenter.d.ts +230 -1
  515. package/dist/daemon/services/task-segmenter.d.ts.map +1 -1
  516. package/dist/daemon/services/task-segmenter.js +527 -17
  517. package/dist/daemon/services/task-segmenter.js.map +1 -1
  518. package/dist/daemon/skill-sync.d.ts +7 -2
  519. package/dist/daemon/skill-sync.d.ts.map +1 -1
  520. package/dist/daemon/skill-sync.js +114 -9
  521. package/dist/daemon/skill-sync.js.map +1 -1
  522. package/dist/daemon/startup/maintenance-schedulers.d.ts +68 -0
  523. package/dist/daemon/startup/maintenance-schedulers.d.ts.map +1 -0
  524. package/dist/daemon/startup/maintenance-schedulers.js +294 -0
  525. package/dist/daemon/startup/maintenance-schedulers.js.map +1 -0
  526. package/dist/daemon/templates/agents/agent-retro-distiller.md +106 -0
  527. package/dist/daemon/templates/agents/claudemd-writer.md +102 -0
  528. package/dist/daemon/templates/agents/coder.md +262 -0
  529. package/dist/daemon/templates/agents/decision-maker.md +546 -0
  530. package/dist/daemon/templates/agents/doc-reviewer.md +118 -0
  531. package/dist/daemon/templates/agents/harness-debug-full.md +196 -0
  532. package/dist/daemon/templates/agents/knowledge-builder.md +120 -0
  533. package/dist/daemon/templates/agents/patch-applier.md +145 -0
  534. package/dist/daemon/templates/agents/planner.md +217 -0
  535. package/dist/daemon/templates/agents/safety-net-implementer.md +278 -0
  536. package/dist/daemon/templates/agents/skill-distiller.md +114 -0
  537. package/dist/daemon/templates/agents/task-boundary-classifier.md +65 -0
  538. package/dist/daemon/templates/agents/verify-agent.md +259 -0
  539. package/dist/daemon/utils/inject-block.d.ts +39 -0
  540. package/dist/daemon/utils/inject-block.d.ts.map +1 -0
  541. package/dist/daemon/utils/inject-block.js +25 -0
  542. package/dist/daemon/utils/inject-block.js.map +1 -0
  543. package/dist/hooks/hook-lib.sh +8 -0
  544. package/dist/hooks/notification.sh +19 -8
  545. package/dist/hooks/post-tool-use.sh +41 -23
  546. package/dist/hooks/pre-tool-use.sh +54 -23
  547. package/dist/hooks/session-start.sh +68 -0
  548. package/dist/hooks/stop.sh +31 -11
  549. package/dist/hooks/user-prompt-submit.sh +37 -21
  550. package/dist/knowledge/adapters/go-adapter.d.ts +65 -0
  551. package/dist/knowledge/adapters/go-adapter.d.ts.map +1 -0
  552. package/dist/knowledge/adapters/go-adapter.js +294 -0
  553. package/dist/knowledge/adapters/go-adapter.js.map +1 -0
  554. package/dist/knowledge/adapters/index.d.ts +41 -0
  555. package/dist/knowledge/adapters/index.d.ts.map +1 -0
  556. package/dist/knowledge/adapters/index.js +71 -0
  557. package/dist/knowledge/adapters/index.js.map +1 -0
  558. package/dist/knowledge/adapters/java-adapter.d.ts +66 -0
  559. package/dist/knowledge/adapters/java-adapter.d.ts.map +1 -0
  560. package/dist/knowledge/adapters/java-adapter.js +260 -0
  561. package/dist/knowledge/adapters/java-adapter.js.map +1 -0
  562. package/dist/knowledge/adapters/js-vue-adapter.d.ts +56 -0
  563. package/dist/knowledge/adapters/js-vue-adapter.d.ts.map +1 -0
  564. package/dist/knowledge/adapters/js-vue-adapter.js +203 -0
  565. package/dist/knowledge/adapters/js-vue-adapter.js.map +1 -0
  566. package/dist/knowledge/adapters/kotlin-adapter.d.ts +55 -0
  567. package/dist/knowledge/adapters/kotlin-adapter.d.ts.map +1 -0
  568. package/dist/knowledge/adapters/kotlin-adapter.js +209 -0
  569. package/dist/knowledge/adapters/kotlin-adapter.js.map +1 -0
  570. package/dist/knowledge/adapters/monorepo-adapter.d.ts +77 -0
  571. package/dist/knowledge/adapters/monorepo-adapter.d.ts.map +1 -0
  572. package/dist/knowledge/adapters/monorepo-adapter.js +170 -0
  573. package/dist/knowledge/adapters/monorepo-adapter.js.map +1 -0
  574. package/dist/knowledge/adapters/python-adapter.d.ts +89 -0
  575. package/dist/knowledge/adapters/python-adapter.d.ts.map +1 -0
  576. package/dist/knowledge/adapters/python-adapter.js +358 -0
  577. package/dist/knowledge/adapters/python-adapter.js.map +1 -0
  578. package/dist/knowledge/adapters/rust-adapter.d.ts +73 -0
  579. package/dist/knowledge/adapters/rust-adapter.d.ts.map +1 -0
  580. package/dist/knowledge/adapters/rust-adapter.js +329 -0
  581. package/dist/knowledge/adapters/rust-adapter.js.map +1 -0
  582. package/dist/knowledge/adapters/types.d.ts +99 -0
  583. package/dist/knowledge/adapters/types.d.ts.map +1 -0
  584. package/dist/knowledge/adapters/types.js +17 -0
  585. package/dist/knowledge/adapters/types.js.map +1 -0
  586. package/dist/knowledge/adapters/typescript-adapter.d.ts +57 -0
  587. package/dist/knowledge/adapters/typescript-adapter.d.ts.map +1 -0
  588. package/dist/knowledge/adapters/typescript-adapter.js +171 -0
  589. package/dist/knowledge/adapters/typescript-adapter.js.map +1 -0
  590. package/dist/knowledge/audit-applier.d.ts +70 -0
  591. package/dist/knowledge/audit-applier.d.ts.map +1 -0
  592. package/dist/knowledge/audit-applier.js +251 -0
  593. package/dist/knowledge/audit-applier.js.map +1 -0
  594. package/dist/knowledge/builder.d.ts +261 -0
  595. package/dist/knowledge/builder.d.ts.map +1 -0
  596. package/dist/knowledge/builder.js +966 -0
  597. package/dist/knowledge/builder.js.map +1 -0
  598. package/dist/knowledge/cli-provider.d.ts +151 -0
  599. package/dist/knowledge/cli-provider.d.ts.map +1 -0
  600. package/dist/knowledge/cli-provider.js +313 -0
  601. package/dist/knowledge/cli-provider.js.map +1 -0
  602. package/dist/knowledge/constants.d.ts +78 -0
  603. package/dist/knowledge/constants.d.ts.map +1 -0
  604. package/dist/knowledge/constants.js +98 -0
  605. package/dist/knowledge/constants.js.map +1 -0
  606. package/dist/knowledge/cross-module.d.ts +139 -0
  607. package/dist/knowledge/cross-module.d.ts.map +1 -0
  608. package/dist/knowledge/cross-module.js +370 -0
  609. package/dist/knowledge/cross-module.js.map +1 -0
  610. package/dist/knowledge/git-hooks.d.ts +67 -0
  611. package/dist/knowledge/git-hooks.d.ts.map +1 -0
  612. package/dist/knowledge/git-hooks.js +258 -0
  613. package/dist/knowledge/git-hooks.js.map +1 -0
  614. package/dist/knowledge/graph/edge-extractor.d.ts +45 -0
  615. package/dist/knowledge/graph/edge-extractor.d.ts.map +1 -0
  616. package/dist/knowledge/graph/edge-extractor.js +242 -0
  617. package/dist/knowledge/graph/edge-extractor.js.map +1 -0
  618. package/dist/knowledge/graph/impact.d.ts +73 -0
  619. package/dist/knowledge/graph/impact.d.ts.map +1 -0
  620. package/dist/knowledge/graph/impact.js +94 -0
  621. package/dist/knowledge/graph/impact.js.map +1 -0
  622. package/dist/knowledge/graph/types.d.ts +22 -0
  623. package/dist/knowledge/graph/types.d.ts.map +1 -0
  624. package/dist/knowledge/graph/types.js +13 -0
  625. package/dist/knowledge/graph/types.js.map +1 -0
  626. package/dist/knowledge/module-hash.d.ts +88 -0
  627. package/dist/knowledge/module-hash.d.ts.map +1 -0
  628. package/dist/knowledge/module-hash.js +162 -0
  629. package/dist/knowledge/module-hash.js.map +1 -0
  630. package/dist/knowledge/project-detector.d.ts +101 -0
  631. package/dist/knowledge/project-detector.d.ts.map +1 -0
  632. package/dist/knowledge/project-detector.js +223 -0
  633. package/dist/knowledge/project-detector.js.map +1 -0
  634. package/dist/knowledge/prompt.d.ts +237 -0
  635. package/dist/knowledge/prompt.d.ts.map +1 -0
  636. package/dist/knowledge/prompt.js +416 -0
  637. package/dist/knowledge/prompt.js.map +1 -0
  638. package/dist/knowledge/query.d.ts +118 -0
  639. package/dist/knowledge/query.d.ts.map +1 -0
  640. package/dist/knowledge/query.js +438 -0
  641. package/dist/knowledge/query.js.map +1 -0
  642. package/dist/knowledge/repo-map.d.ts +97 -0
  643. package/dist/knowledge/repo-map.d.ts.map +1 -0
  644. package/dist/knowledge/repo-map.js +447 -0
  645. package/dist/knowledge/repo-map.js.map +1 -0
  646. package/dist/knowledge/tools/index.d.ts +14 -0
  647. package/dist/knowledge/tools/index.d.ts.map +1 -0
  648. package/dist/knowledge/tools/index.js +11 -0
  649. package/dist/knowledge/tools/index.js.map +1 -0
  650. package/dist/knowledge/tools/knowledge-get-page.d.ts +46 -0
  651. package/dist/knowledge/tools/knowledge-get-page.d.ts.map +1 -0
  652. package/dist/knowledge/tools/knowledge-get-page.js +101 -0
  653. package/dist/knowledge/tools/knowledge-get-page.js.map +1 -0
  654. package/dist/knowledge/tools/knowledge-query.d.ts +77 -0
  655. package/dist/knowledge/tools/knowledge-query.d.ts.map +1 -0
  656. package/dist/knowledge/tools/knowledge-query.js +104 -0
  657. package/dist/knowledge/tools/knowledge-query.js.map +1 -0
  658. package/dist/knowledge/tools/repo-map-lookup.d.ts +45 -0
  659. package/dist/knowledge/tools/repo-map-lookup.d.ts.map +1 -0
  660. package/dist/knowledge/tools/repo-map-lookup.js +82 -0
  661. package/dist/knowledge/tools/repo-map-lookup.js.map +1 -0
  662. package/dist/knowledge/types.d.ts +269 -0
  663. package/dist/knowledge/types.d.ts.map +1 -0
  664. package/dist/knowledge/types.js +10 -0
  665. package/dist/knowledge/types.js.map +1 -0
  666. package/dist/knowledge/validator.d.ts +90 -0
  667. package/dist/knowledge/validator.d.ts.map +1 -0
  668. package/dist/knowledge/validator.js +355 -0
  669. package/dist/knowledge/validator.js.map +1 -0
  670. package/dist/mcp/server.d.ts +64 -8
  671. package/dist/mcp/server.d.ts.map +1 -1
  672. package/dist/mcp/server.js +448 -12
  673. package/dist/mcp/server.js.map +1 -1
  674. package/dist/skills/builtin-skills.d.ts +35 -0
  675. package/dist/skills/builtin-skills.d.ts.map +1 -0
  676. package/dist/skills/builtin-skills.js +68 -0
  677. package/dist/skills/builtin-skills.js.map +1 -0
  678. package/dist/skills/distill/attribution.d.ts +59 -0
  679. package/dist/skills/distill/attribution.d.ts.map +1 -0
  680. package/dist/skills/distill/attribution.js +101 -0
  681. package/dist/skills/distill/attribution.js.map +1 -0
  682. package/dist/skills/distill/distiller.d.ts +161 -0
  683. package/dist/skills/distill/distiller.d.ts.map +1 -0
  684. package/dist/skills/distill/distiller.js +461 -0
  685. package/dist/skills/distill/distiller.js.map +1 -0
  686. package/dist/skills/distill/index.d.ts +223 -0
  687. package/dist/skills/distill/index.d.ts.map +1 -0
  688. package/dist/skills/distill/index.js +466 -0
  689. package/dist/skills/distill/index.js.map +1 -0
  690. package/dist/skills/distill/project-anchor-guard.d.ts +116 -0
  691. package/dist/skills/distill/project-anchor-guard.d.ts.map +1 -0
  692. package/dist/skills/distill/project-anchor-guard.js +334 -0
  693. package/dist/skills/distill/project-anchor-guard.js.map +1 -0
  694. package/dist/skills/distill/topic-deduper.d.ts +77 -0
  695. package/dist/skills/distill/topic-deduper.d.ts.map +1 -0
  696. package/dist/skills/distill/topic-deduper.js +119 -0
  697. package/dist/skills/distill/topic-deduper.js.map +1 -0
  698. package/dist/skills/distill/upstream-fetcher.d.ts +71 -0
  699. package/dist/skills/distill/upstream-fetcher.d.ts.map +1 -0
  700. package/dist/skills/distill/upstream-fetcher.js +202 -0
  701. package/dist/skills/distill/upstream-fetcher.js.map +1 -0
  702. package/dist/skills/distilled/distilled-api-design.md +495 -0
  703. package/dist/skills/distilled/distilled-architecture-decision.md +173 -0
  704. package/dist/skills/distilled/distilled-brainstorming.md +79 -0
  705. package/dist/skills/distilled/distilled-brand-guidelines.md +86 -0
  706. package/dist/skills/distilled/distilled-canvas-design.md +128 -0
  707. package/dist/skills/distilled/distilled-claude-api.md +185 -0
  708. package/dist/skills/distilled/distilled-creator.md +181 -0
  709. package/dist/skills/distilled/distilled-db-schema-design.md +245 -0
  710. package/dist/skills/distilled/distilled-dispatching-parallel-agents.md +136 -0
  711. package/dist/skills/distilled/distilled-doc-coauthoring.md +144 -0
  712. package/dist/skills/distilled/distilled-docx.md +231 -0
  713. package/dist/skills/distilled/distilled-executing-plans.md +148 -0
  714. package/dist/skills/distilled/distilled-finishing-a-development-branch.md +213 -0
  715. package/dist/skills/distilled/distilled-frontend-design.md +118 -0
  716. package/dist/skills/distilled/distilled-harness-engineering.md +242 -0
  717. package/dist/skills/distilled/distilled-karpathy-guidelines.md +104 -0
  718. package/dist/skills/distilled/distilled-performance-optimization.md +175 -0
  719. package/dist/skills/distilled/distilled-receiving-code-review.md +185 -0
  720. package/dist/skills/distilled/distilled-spec-driven-design.md +193 -0
  721. package/dist/skills/distilled/distilled-subagent-driven-development.md +124 -0
  722. package/dist/skills/distilled/distilled-systematic-debugging.md +154 -0
  723. package/dist/skills/distilled/distilled-test-driven-development.md +432 -0
  724. package/dist/skills/distilled/distilled-using-superpowers.md +134 -0
  725. package/dist/skills/distilled/distilled-verification-before-completion.md +213 -0
  726. package/dist/skills/distilled/distilled-writing-skills.md +175 -0
  727. package/dist/skills/registry.d.ts +55 -51
  728. package/dist/skills/registry.d.ts.map +1 -1
  729. package/dist/skills/registry.js +82 -196
  730. package/dist/skills/registry.js.map +1 -1
  731. package/dist/skills/tools/pipeline-suggest.js +14 -14
  732. package/dist/skills/tools/pipeline-suggest.js.map +1 -1
  733. package/dist/skills/tools/skill-invoke.d.ts +3 -2
  734. package/dist/skills/tools/skill-invoke.d.ts.map +1 -1
  735. package/dist/skills/tools/skill-invoke.js +4 -2
  736. package/dist/skills/tools/skill-invoke.js.map +1 -1
  737. package/dist/web/analytics/anti-pattern-detector.d.ts.map +1 -1
  738. package/dist/web/analytics/anti-pattern-detector.js +6 -1
  739. package/dist/web/analytics/anti-pattern-detector.js.map +1 -1
  740. package/dist/web/analytics/drift-detector.d.ts +6 -0
  741. package/dist/web/analytics/drift-detector.d.ts.map +1 -1
  742. package/dist/web/analytics/drift-detector.js +15 -8
  743. package/dist/web/analytics/drift-detector.js.map +1 -1
  744. package/dist/web/analytics/weekly-report.d.ts +13 -0
  745. package/dist/web/analytics/weekly-report.d.ts.map +1 -1
  746. package/dist/web/analytics/weekly-report.js +17 -3
  747. package/dist/web/analytics/weekly-report.js.map +1 -1
  748. package/dist/web/routes/_helpers.d.ts +31 -0
  749. package/dist/web/routes/_helpers.d.ts.map +1 -1
  750. package/dist/web/routes/_helpers.js +33 -0
  751. package/dist/web/routes/_helpers.js.map +1 -1
  752. package/dist/web/routes/agent-content.d.ts +30 -0
  753. package/dist/web/routes/agent-content.d.ts.map +1 -0
  754. package/dist/web/routes/agent-content.js +139 -0
  755. package/dist/web/routes/agent-content.js.map +1 -0
  756. package/dist/web/routes/agent-distill.d.ts +49 -0
  757. package/dist/web/routes/agent-distill.d.ts.map +1 -0
  758. package/dist/web/routes/agent-distill.js +526 -0
  759. package/dist/web/routes/agent-distill.js.map +1 -0
  760. package/dist/web/routes/config.d.ts +56 -0
  761. package/dist/web/routes/config.d.ts.map +1 -0
  762. package/dist/web/routes/config.js +243 -0
  763. package/dist/web/routes/config.js.map +1 -0
  764. package/dist/web/routes/decisions.d.ts +15 -0
  765. package/dist/web/routes/decisions.d.ts.map +1 -0
  766. package/dist/web/routes/decisions.js +181 -0
  767. package/dist/web/routes/decisions.js.map +1 -0
  768. package/dist/web/routes/diagnostics.d.ts +61 -0
  769. package/dist/web/routes/diagnostics.d.ts.map +1 -0
  770. package/dist/web/routes/diagnostics.js +203 -0
  771. package/dist/web/routes/diagnostics.js.map +1 -0
  772. package/dist/web/routes/error-handler.d.ts +0 -4
  773. package/dist/web/routes/error-handler.d.ts.map +1 -1
  774. package/dist/web/routes/error-handler.js +0 -8
  775. package/dist/web/routes/error-handler.js.map +1 -1
  776. package/dist/web/routes/events.d.ts.map +1 -1
  777. package/dist/web/routes/events.js +26 -1
  778. package/dist/web/routes/events.js.map +1 -1
  779. package/dist/web/routes/health.d.ts +33 -0
  780. package/dist/web/routes/health.d.ts.map +1 -0
  781. package/dist/web/routes/health.js +37 -0
  782. package/dist/web/routes/health.js.map +1 -0
  783. package/dist/web/routes/insights.d.ts +0 -5
  784. package/dist/web/routes/insights.d.ts.map +1 -1
  785. package/dist/web/routes/insights.js +0 -0
  786. package/dist/web/routes/insights.js.map +1 -1
  787. package/dist/web/routes/knowledge.d.ts +57 -0
  788. package/dist/web/routes/knowledge.d.ts.map +1 -0
  789. package/dist/web/routes/knowledge.js +772 -0
  790. package/dist/web/routes/knowledge.js.map +1 -0
  791. package/dist/web/routes/patch.d.ts +60 -1
  792. package/dist/web/routes/patch.d.ts.map +1 -1
  793. package/dist/web/routes/patch.js +170 -64
  794. package/dist/web/routes/patch.js.map +1 -1
  795. package/dist/web/routes/pipeline.d.ts +28 -0
  796. package/dist/web/routes/pipeline.d.ts.map +1 -0
  797. package/dist/web/routes/pipeline.js +145 -0
  798. package/dist/web/routes/pipeline.js.map +1 -0
  799. package/dist/web/routes/rules.d.ts.map +1 -1
  800. package/dist/web/routes/rules.js +26 -7
  801. package/dist/web/routes/rules.js.map +1 -1
  802. package/dist/web/routes/sessions.d.ts.map +1 -1
  803. package/dist/web/routes/sessions.js +17 -8
  804. package/dist/web/routes/sessions.js.map +1 -1
  805. package/dist/web/routes/skill-content.d.ts +30 -0
  806. package/dist/web/routes/skill-content.d.ts.map +1 -0
  807. package/dist/web/routes/skill-content.js +117 -0
  808. package/dist/web/routes/skill-content.js.map +1 -0
  809. package/dist/web/routes/skill-stats.d.ts.map +1 -1
  810. package/dist/web/routes/skill-stats.js +153 -16
  811. package/dist/web/routes/skill-stats.js.map +1 -1
  812. package/dist/web/routes/skills-distill.d.ts +29 -0
  813. package/dist/web/routes/skills-distill.d.ts.map +1 -0
  814. package/dist/web/routes/skills-distill.js +552 -0
  815. package/dist/web/routes/skills-distill.js.map +1 -0
  816. package/dist/web/routes/skills.js +7 -7
  817. package/dist/web/routes/skills.js.map +1 -1
  818. package/dist/web/routes/stats.d.ts.map +1 -1
  819. package/dist/web/routes/stats.js +2 -1
  820. package/dist/web/routes/stats.js.map +1 -1
  821. package/dist/web/routes/task-timeline.d.ts +178 -0
  822. package/dist/web/routes/task-timeline.d.ts.map +1 -0
  823. package/dist/web/routes/task-timeline.js +530 -0
  824. package/dist/web/routes/task-timeline.js.map +1 -0
  825. package/dist/web/routes/tasks.d.ts.map +1 -1
  826. package/dist/web/routes/tasks.js +377 -8
  827. package/dist/web/routes/tasks.js.map +1 -1
  828. package/dist/web/routes/trace.d.ts.map +1 -1
  829. package/dist/web/routes/trace.js +3 -2
  830. package/dist/web/routes/trace.js.map +1 -1
  831. package/dist/web/routes/types.d.ts +0 -4
  832. package/dist/web/routes/types.d.ts.map +1 -1
  833. package/dist/web/routes/types.js +1 -1
  834. package/dist/web/routes/types.js.map +1 -1
  835. package/dist/web/routes/violations.d.ts +14 -0
  836. package/dist/web/routes/violations.d.ts.map +1 -0
  837. package/dist/web/routes/violations.js +112 -0
  838. package/dist/web/routes/violations.js.map +1 -0
  839. package/dist/web/server.d.ts.map +1 -1
  840. package/dist/web/server.js +99 -19
  841. package/dist/web/server.js.map +1 -1
  842. package/dist/web/services/agent-distill-manager.d.ts +122 -0
  843. package/dist/web/services/agent-distill-manager.d.ts.map +1 -0
  844. package/dist/web/services/agent-distill-manager.js +397 -0
  845. package/dist/web/services/agent-distill-manager.js.map +1 -0
  846. package/dist/web/services/build-manager.d.ts +72 -0
  847. package/dist/web/services/build-manager.d.ts.map +1 -0
  848. package/dist/web/services/build-manager.js +189 -0
  849. package/dist/web/services/build-manager.js.map +1 -0
  850. package/dist/web/services/distill-manager.d.ts +172 -0
  851. package/dist/web/services/distill-manager.d.ts.map +1 -0
  852. package/dist/web/services/distill-manager.js +411 -0
  853. package/dist/web/services/distill-manager.js.map +1 -0
  854. package/dist/web/static/assets/AgentDetailPage-DlUeA1sX.js +2 -0
  855. package/dist/web/static/assets/AgentDetailPage-DlUeA1sX.js.map +1 -0
  856. package/dist/web/static/assets/AgentDistillRunPage-Cybo4bii.js +3 -0
  857. package/dist/web/static/assets/AgentDistillRunPage-Cybo4bii.js.map +1 -0
  858. package/dist/web/static/assets/AgentsPage-Qd9FExLG.js +2 -0
  859. package/dist/web/static/assets/AgentsPage-Qd9FExLG.js.map +1 -0
  860. package/dist/web/static/assets/DaemonHealthPage-DTSVqtrI.js +2 -0
  861. package/dist/web/static/assets/DaemonHealthPage-DTSVqtrI.js.map +1 -0
  862. package/dist/web/static/assets/DecisionDetailPage-b4BA8dhc.js +2 -0
  863. package/dist/web/static/assets/DecisionDetailPage-b4BA8dhc.js.map +1 -0
  864. package/dist/web/static/assets/DecisionsPage-a3NRo_T7.js +2 -0
  865. package/dist/web/static/assets/DecisionsPage-a3NRo_T7.js.map +1 -0
  866. package/dist/web/static/assets/DiagnosticsPage-DIVdiIQG.js +2 -0
  867. package/dist/web/static/assets/DiagnosticsPage-DIVdiIQG.js.map +1 -0
  868. package/dist/web/static/assets/DistillDetailPage-U6a3l2iP.js +4 -0
  869. package/dist/web/static/assets/DistillDetailPage-U6a3l2iP.js.map +1 -0
  870. package/dist/web/static/assets/DistillPage-O7BHtRN8.js +2 -0
  871. package/dist/web/static/assets/DistillPage-O7BHtRN8.js.map +1 -0
  872. package/dist/web/static/assets/DistillRunPage-D1JuRWWr.js +2 -0
  873. package/dist/web/static/assets/DistillRunPage-D1JuRWWr.js.map +1 -0
  874. package/dist/web/static/assets/GlobalScopeHint-Q3wTJx3F.js +2 -0
  875. package/dist/web/static/assets/GlobalScopeHint-Q3wTJx3F.js.map +1 -0
  876. package/dist/web/static/assets/IssueDetailPage-BDfrtk2C.js +2 -0
  877. package/dist/web/static/assets/IssueDetailPage-BDfrtk2C.js.map +1 -0
  878. package/dist/web/static/assets/IssuesPage-SKmhlCrw.js +2 -0
  879. package/dist/web/static/assets/IssuesPage-SKmhlCrw.js.map +1 -0
  880. package/dist/web/static/assets/KbDetailPage-Yna86Na8.js +2 -0
  881. package/dist/web/static/assets/KbDetailPage-Yna86Na8.js.map +1 -0
  882. package/dist/web/static/assets/KbHitsPage-Cljl7H9p.js +2 -0
  883. package/dist/web/static/assets/KbHitsPage-Cljl7H9p.js.map +1 -0
  884. package/dist/web/static/assets/MarkdownRenderer-DlDQNihj.js +3 -0
  885. package/dist/web/static/assets/MarkdownRenderer-DlDQNihj.js.map +1 -0
  886. package/dist/web/static/assets/NotFound-LMzbP51V.js +2 -0
  887. package/dist/web/static/assets/NotFound-LMzbP51V.js.map +1 -0
  888. package/dist/web/static/assets/SettingsPage-DzoK4PKg.js +2 -0
  889. package/dist/web/static/assets/SettingsPage-DzoK4PKg.js.map +1 -0
  890. package/dist/web/static/assets/SkillDetailPage-BuBJJ_NX.js +2 -0
  891. package/dist/web/static/assets/SkillDetailPage-BuBJJ_NX.js.map +1 -0
  892. package/dist/web/static/assets/SkillsPage-aojkJpBc.js +2 -0
  893. package/dist/web/static/assets/SkillsPage-aojkJpBc.js.map +1 -0
  894. package/dist/web/static/assets/TaskDetailPage-1ckxnGhw.js +4 -0
  895. package/dist/web/static/assets/TaskDetailPage-1ckxnGhw.js.map +1 -0
  896. package/dist/web/static/assets/TasksHubPage-C2PLh3eg.js +6 -0
  897. package/dist/web/static/assets/TasksHubPage-C2PLh3eg.js.map +1 -0
  898. package/dist/web/static/assets/WorkplacePage-DHrp5VxS.js +2 -0
  899. package/dist/web/static/assets/WorkplacePage-DHrp5VxS.js.map +1 -0
  900. package/dist/web/static/assets/arco-DFQA6dO_.css +1 -0
  901. package/dist/web/static/assets/arco-DV6xCLhr.js +14 -0
  902. package/dist/web/static/assets/arco-DV6xCLhr.js.map +1 -0
  903. package/dist/web/static/assets/charts-BSV4cyC4.js +37 -0
  904. package/dist/web/static/assets/charts-BSV4cyC4.js.map +1 -0
  905. package/dist/web/static/assets/date-fns-sbWH3_uq.js +2 -0
  906. package/dist/web/static/assets/date-fns-sbWH3_uq.js.map +1 -0
  907. package/dist/web/static/assets/index-B_v_MKlb.css +1 -0
  908. package/dist/web/static/assets/index-DileOOE4.js +4 -0
  909. package/dist/web/static/assets/index-DileOOE4.js.map +1 -0
  910. package/dist/web/static/assets/lucide-CnlPQoG8.js +72 -0
  911. package/dist/web/static/assets/lucide-CnlPQoG8.js.map +1 -0
  912. package/dist/web/static/assets/markdown-CA7ePUts.js +30 -0
  913. package/dist/web/static/assets/markdown-CA7ePUts.js.map +1 -0
  914. package/dist/web/static/assets/outcome-BKGy9azt.js +2 -0
  915. package/dist/web/static/assets/outcome-BKGy9azt.js.map +1 -0
  916. package/dist/web/static/assets/query-CgCOpYWf.js +2 -0
  917. package/dist/web/static/assets/{query-C99w429o.js.map → query-CgCOpYWf.js.map} +1 -1
  918. package/dist/web/static/assets/{react-router-r79dBVy4.js → react-router-Cxmg8RuL.js} +3 -3
  919. package/dist/web/static/assets/{react-router-r79dBVy4.js.map → react-router-Cxmg8RuL.js.map} +1 -1
  920. package/dist/web/static/assets/react-vendor-tkvCrao7.js +57 -0
  921. package/dist/web/static/assets/react-vendor-tkvCrao7.js.map +1 -0
  922. package/dist/web/static/assets/syntax-highlighter-BDYycNja.js +6 -0
  923. package/dist/web/static/assets/syntax-highlighter-BDYycNja.js.map +1 -0
  924. package/dist/web/static/assets/useAgentStats-B-uTgqBd.js +2 -0
  925. package/dist/web/static/assets/useAgentStats-B-uTgqBd.js.map +1 -0
  926. package/dist/web/static/assets/useDecisions-D-G2Ft5T.js +2 -0
  927. package/dist/web/static/assets/useDecisions-D-G2Ft5T.js.map +1 -0
  928. package/dist/web/static/assets/useDistill-21dZkXlT.js +3 -0
  929. package/dist/web/static/assets/useDistill-21dZkXlT.js.map +1 -0
  930. package/dist/web/static/assets/useEffectiveProject-DQiyX54y.js +2 -0
  931. package/dist/web/static/assets/useEffectiveProject-DQiyX54y.js.map +1 -0
  932. package/dist/web/static/assets/useIssuesFeed-CFiyQkAL.js +2 -0
  933. package/dist/web/static/assets/useIssuesFeed-CFiyQkAL.js.map +1 -0
  934. package/dist/web/static/assets/useKbHits-xKXWgqh9.js +2 -0
  935. package/dist/web/static/assets/useKbHits-xKXWgqh9.js.map +1 -0
  936. package/dist/web/static/assets/useSkillStats-B5hbIwdf.js +2 -0
  937. package/dist/web/static/assets/useSkillStats-B5hbIwdf.js.map +1 -0
  938. package/dist/web/static/assets/vendor-DS-q4Eyc.js +36 -0
  939. package/dist/web/static/assets/vendor-DS-q4Eyc.js.map +1 -0
  940. package/dist/web/static/index.html +12 -8
  941. package/package.json +18 -5
  942. package/dist/core/ai/provider.d.ts +0 -63
  943. package/dist/core/ai/provider.d.ts.map +0 -1
  944. package/dist/core/ai/provider.js +0 -241
  945. package/dist/core/ai/provider.js.map +0 -1
  946. package/dist/core/ai/types.d.ts +0 -43
  947. package/dist/core/ai/types.d.ts.map +0 -1
  948. package/dist/core/ai/types.js +0 -5
  949. package/dist/core/ai/types.js.map +0 -1
  950. package/dist/core/storage/token-usage.d.ts +0 -36
  951. package/dist/core/storage/token-usage.d.ts.map +0 -1
  952. package/dist/core/storage/token-usage.js +0 -59
  953. package/dist/core/storage/token-usage.js.map +0 -1
  954. package/dist/core/utils/token-tracker.d.ts +0 -39
  955. package/dist/core/utils/token-tracker.d.ts.map +0 -1
  956. package/dist/core/utils/token-tracker.js +0 -69
  957. package/dist/core/utils/token-tracker.js.map +0 -1
  958. package/dist/skills/index.d.ts +0 -3
  959. package/dist/skills/index.d.ts.map +0 -1
  960. package/dist/skills/index.js +0 -3
  961. package/dist/skills/index.js.map +0 -1
  962. package/dist/skills/matcher.d.ts +0 -26
  963. package/dist/skills/matcher.d.ts.map +0 -1
  964. package/dist/skills/matcher.js +0 -113
  965. package/dist/skills/matcher.js.map +0 -1
  966. package/dist/skills/official/code-simplifier.md +0 -52
  967. package/dist/skills/official/find-skills.md +0 -142
  968. package/dist/skills/official/official-api-design.md +0 -30
  969. package/dist/skills/official/official-architecture-decision.md +0 -41
  970. package/dist/skills/official/official-bmad.md +0 -118
  971. package/dist/skills/official/official-db-schema-design.md +0 -34
  972. package/dist/skills/official/official-debug.md +0 -25
  973. package/dist/skills/official/official-doc-driven.md +0 -31
  974. package/dist/skills/official/official-harness-engineering.md +0 -108
  975. package/dist/skills/official/official-openspec.md +0 -89
  976. package/dist/skills/official/official-performance-optimization.md +0 -30
  977. package/dist/skills/official/official-pr-review.md +0 -35
  978. package/dist/skills/official/official-release-checklist.md +0 -30
  979. package/dist/skills/official/official-security-hardening.md +0 -32
  980. package/dist/skills/official/official-spec-driven-design.md +0 -31
  981. package/dist/skills/official/planning-with-files.md +0 -241
  982. package/dist/skills/official/ui-ux-pro-max.md +0 -105
  983. package/dist/skills/official/webapp-testing.md +0 -96
  984. package/dist/skills/official-skills.d.ts +0 -26
  985. package/dist/skills/official-skills.d.ts.map +0 -1
  986. package/dist/skills/official-skills.js +0 -74
  987. package/dist/skills/official-skills.js.map +0 -1
  988. package/dist/skills/semantic-matcher.d.ts +0 -60
  989. package/dist/skills/semantic-matcher.d.ts.map +0 -1
  990. package/dist/skills/semantic-matcher.js +0 -192
  991. package/dist/skills/semantic-matcher.js.map +0 -1
  992. package/dist/skills/upgrade-engine.d.ts +0 -93
  993. package/dist/skills/upgrade-engine.d.ts.map +0 -1
  994. package/dist/skills/upgrade-engine.js +0 -447
  995. package/dist/skills/upgrade-engine.js.map +0 -1
  996. package/dist/skills/upgrade-prompt.d.ts +0 -20
  997. package/dist/skills/upgrade-prompt.d.ts.map +0 -1
  998. package/dist/skills/upgrade-prompt.js +0 -75
  999. package/dist/skills/upgrade-prompt.js.map +0 -1
  1000. package/dist/web/routes/ai.d.ts +0 -10
  1001. package/dist/web/routes/ai.d.ts.map +0 -1
  1002. package/dist/web/routes/ai.js +0 -186
  1003. package/dist/web/routes/ai.js.map +0 -1
  1004. package/dist/web/routes/token-usage.d.ts +0 -7
  1005. package/dist/web/routes/token-usage.d.ts.map +0 -1
  1006. package/dist/web/routes/token-usage.js +0 -18
  1007. package/dist/web/routes/token-usage.js.map +0 -1
  1008. package/dist/web/ssrf-guard.d.ts +0 -35
  1009. package/dist/web/ssrf-guard.d.ts.map +0 -1
  1010. package/dist/web/ssrf-guard.js +0 -93
  1011. package/dist/web/ssrf-guard.js.map +0 -1
  1012. package/dist/web/static/assets/AIConfig-CdDWzJyO.js +0 -2
  1013. package/dist/web/static/assets/AIConfig-CdDWzJyO.js.map +0 -1
  1014. package/dist/web/static/assets/Dashboard-CoEmmIDt.js +0 -2
  1015. package/dist/web/static/assets/Dashboard-CoEmmIDt.js.map +0 -1
  1016. package/dist/web/static/assets/Drawer-DdRTzlLB.js +0 -2
  1017. package/dist/web/static/assets/Drawer-DdRTzlLB.js.map +0 -1
  1018. package/dist/web/static/assets/Events-DrIq1SUS.js +0 -2
  1019. package/dist/web/static/assets/Events-DrIq1SUS.js.map +0 -1
  1020. package/dist/web/static/assets/Reports-DFBM3MDK.js +0 -2
  1021. package/dist/web/static/assets/Reports-DFBM3MDK.js.map +0 -1
  1022. package/dist/web/static/assets/SearchInput-qCj_jAcf.js +0 -2
  1023. package/dist/web/static/assets/SearchInput-qCj_jAcf.js.map +0 -1
  1024. package/dist/web/static/assets/SessionDetail-CCzwdoT7.js +0 -2
  1025. package/dist/web/static/assets/SessionDetail-CCzwdoT7.js.map +0 -1
  1026. package/dist/web/static/assets/Sessions-FfLYkAw9.js +0 -2
  1027. package/dist/web/static/assets/Sessions-FfLYkAw9.js.map +0 -1
  1028. package/dist/web/static/assets/Skills-C8Gvs3Qa.js +0 -2
  1029. package/dist/web/static/assets/Skills-C8Gvs3Qa.js.map +0 -1
  1030. package/dist/web/static/assets/TaskDetail-BS8pYhaR.js +0 -2
  1031. package/dist/web/static/assets/TaskDetail-BS8pYhaR.js.map +0 -1
  1032. package/dist/web/static/assets/Tasks-CyuhizG8.js +0 -2
  1033. package/dist/web/static/assets/Tasks-CyuhizG8.js.map +0 -1
  1034. package/dist/web/static/assets/charts-CLrM0_uM.js +0 -37
  1035. package/dist/web/static/assets/charts-CLrM0_uM.js.map +0 -1
  1036. package/dist/web/static/assets/date-fns-CZ_bHujz.js +0 -2
  1037. package/dist/web/static/assets/date-fns-CZ_bHujz.js.map +0 -1
  1038. package/dist/web/static/assets/export-L_VBD2p1.js +0 -4
  1039. package/dist/web/static/assets/export-L_VBD2p1.js.map +0 -1
  1040. package/dist/web/static/assets/index-CBX47X8l.js +0 -3
  1041. package/dist/web/static/assets/index-CBX47X8l.js.map +0 -1
  1042. package/dist/web/static/assets/index-DjIoMdoR.css +0 -1
  1043. package/dist/web/static/assets/lucide-Bs_edTLa.js +0 -232
  1044. package/dist/web/static/assets/lucide-Bs_edTLa.js.map +0 -1
  1045. package/dist/web/static/assets/query-C99w429o.js +0 -2
  1046. package/dist/web/static/assets/react-vendor-CSp-GLFF.js +0 -49
  1047. package/dist/web/static/assets/react-vendor-CSp-GLFF.js.map +0 -1
  1048. package/dist/web/static/assets/syntax-highlighter-44FakypI.js +0 -9
  1049. package/dist/web/static/assets/syntax-highlighter-44FakypI.js.map +0 -1
  1050. package/dist/web/static/assets/time-Bxuk0M-C.js +0 -2
  1051. package/dist/web/static/assets/time-Bxuk0M-C.js.map +0 -1
  1052. package/dist/web/static/assets/vendor-CMMjVdZs.js +0 -64
  1053. package/dist/web/static/assets/vendor-CMMjVdZs.js.map +0 -1
@@ -8,29 +8,75 @@
8
8
  * 4. Create event handlers and start socket server
9
9
  * 5. Handle graceful shutdown
10
10
  */
11
+ import { readFileSync } from 'node:fs';
11
12
  import { SocketServer } from './server.js';
12
- import { writePidFile, removePidFile, cleanSocket, getSocketPath, writeAuthToken, syncMcpToken, removeAuthToken, } from './lifecycle.js';
13
+ import { writePidFile, removePidFile, cleanSocket, getSocketPath, writeAuthToken, syncMcpToken, removeAuthToken, isAnotherDaemonListening, } from './lifecycle.js';
13
14
  import { routeEvent } from './router.js';
14
- import { logger } from '../core/utils/logger.js';
15
+ import { logger, enableFileLogging } from '../core/utils/logger.js';
15
16
  import { ConfigManager } from '../core/config.js';
16
17
  import { SQLiteStorage } from '../core/storage/sqlite.js';
17
18
  import { expandPath } from '../core/utils/path.js';
18
- import { ClaudeProvider } from '../core/ai/provider.js';
19
+ // D R-A (2026-05-29): ClaudeProvider import removed — daemon no longer
20
+ // instantiates ClaudeProvider at startup. SkillRegistry is now keyword-only
21
+ // and takes no args. Provider file itself is deleted in D R-D.
22
+ // See master spec 0902 §2.4.4 and src/skills/registry.ts (design rationale).
19
23
  import { TaskSegmenter } from './services/task-segmenter.js';
24
+ import { TaskBoundaryClassifier } from './services/task-boundary-classifier.js';
25
+ import { srcDirFromRoot } from './services/codegraph-sync.js';
26
+ import { startMaintenanceSchedulers } from './startup/maintenance-schedulers.js';
27
+ import { CodeGraphStore } from '../core/storage/codegraph.js';
20
28
  import { SkillRegistry } from '../skills/registry.js';
21
29
  import { InvocationGuard } from '../skills/invocation-guard.js';
22
30
  import { HistoryExporter } from './handlers/history-exporter.js';
23
31
  import { ResumeManager } from '../claudemd/resume-manager.js';
32
+ import { ViolationsManager } from '../claudemd/violations-manager.js';
24
33
  import { ConventionExtractor } from '../claudemd/convention-extractor.js';
25
34
  import { UserPromptHandler } from './handlers/user-prompt.js';
26
35
  import { PostToolUseHandler } from './handlers/post-tool-use.js';
27
36
  import { StopHandler } from './handlers/stop.js';
37
+ import { PreToolUseHandler } from './handlers/pre-tool-use.js';
38
+ import { SpecApproval } from './services/spec-approval.js';
39
+ import { RuleRegistry } from './rules/registry.js';
40
+ import { assertWhitelistInvariants } from './rules/whitelist.js';
28
41
  import { syncHooks } from './hook-sync.js';
29
42
  import { syncSkills } from './skill-sync.js';
43
+ import { syncAgents } from './agent-sync.js';
30
44
  import { replayQueue } from '../core/queue/index.js';
31
- import { DEFAULTS } from '../core/constants.js';
45
+ import { DEFAULTS, FORGE_PATHS } from '../core/constants.js';
32
46
  import { getUserPrompt } from '../core/event-fields.js';
47
+ // D-2: BuildManager is now lazy-loaded inside the `webEnabled` branch (L460-475)
48
+ // so the daemon has zero static edges into `src/web/`. The previous
49
+ // `import { buildManager } from '../web/services/build-manager.js'` lived here.
50
+ import { ConfigStore } from './config-store.js';
51
+ import { reviveInterceptIfStale } from './services/intercept-revive.js';
52
+ import { startHeartbeat } from './services/heartbeat-writer.js';
53
+ import { DECISION_MAKER_COOLDOWN_CONFIG_KEY, DEFAULT_DECISION_MAKER_COOLDOWN_SECONDS, MAX_DECISION_MAKER_COOLDOWN_SECONDS, } from './services/decision-hint.js';
54
+ // F12: the maintenance mutex shared by all scheduled maintenance handlers now
55
+ // lives inside `startMaintenanceSchedulers` (src/daemon/startup/maintenance-
56
+ // schedulers.ts) as factory-local closure state — see Wave 3a R3 extraction.
33
57
  export async function startDaemon(foreground = false, options = {}) {
58
+ // ── 0pre. Anti-recursion guard ──────────────────────────────────────────────
59
+ // Refuse to boot a second daemon from inside an internal subprocess marked
60
+ // with CLAUDE_FORGE_INTERNAL=1. Guards against a misconfigured user hook
61
+ // accidentally invoking `cf daemon start` from a spawned child — otherwise
62
+ // we'd have two daemons fighting over the same socket. Defensive: nothing in
63
+ // the current codebase sets this env, but the check is cheap insurance.
64
+ if (process.env.CLAUDE_FORGE_INTERNAL === '1') {
65
+ console.error('[daemon] refusing to start under CLAUDE_FORGE_INTERNAL=1');
66
+ process.exit(0);
67
+ }
68
+ // ── 0a. File logging wire (Stage D, 2026-05-27) ────────────────────────────
69
+ // MUST be the first thing in startDaemon — before any logger.* call AND
70
+ // before the uncaughtException/unhandledRejection handlers (which log via
71
+ // `logger.error`). The default stderr-only sink is swallowed in detached
72
+ // production mode (stdout/stderr → /dev/null) and that's why subsystem
73
+ // startup lines (`[ConfigStore] Seeded N keys`, `[InterceptRevive] ...`,
74
+ // etc.) never landed on disk. The dev-daemon.sh wrapper hides this bug by
75
+ // shell-redirecting `2> daemon-dev.log` but real `cf daemon start` users
76
+ // see nothing. Skip when FORGE_DAEMON_DISABLE_FILE_LOG=1 (tests / CI).
77
+ if (process.env.FORGE_DAEMON_DISABLE_FILE_LOG !== '1') {
78
+ enableFileLogging(FORGE_PATHS.daemonLog());
79
+ }
34
80
  // ── 0. Global Exception Handlers ───────────────────────────────────────────
35
81
  process.on('uncaughtException', (err) => {
36
82
  logger.error(`[Daemon] Uncaught exception: ${err.message}`);
@@ -44,7 +90,55 @@ export async function startDaemon(foreground = false, options = {}) {
44
90
  // Log level is auto-parsed from LOG_LEVEL env var at logger module load time.
45
91
  const config = new ConfigManager().get();
46
92
  logger.info('Claude Forge daemon starting...');
93
+ // ── 1a. Deprecated env detection (spec 1851 R-A User Decisions Q7) ─────────
94
+ // The Phase B `CF_SKILL_DISTILLER_AGENT=1` toggle was removed in R-A; the
95
+ // env is now silently ignored. Warn users so they remove it from their rc
96
+ // / launchd plist before R-D removes the warning altogether.
97
+ if (process.env.CF_SKILL_DISTILLER_AGENT) {
98
+ logger.warn('[daemon] env CF_SKILL_DISTILLER_AGENT detected — this flag is deprecated ' +
99
+ 'and has no effect. Distill now uses claude CLI shell-out unconditionally. ' +
100
+ 'Please unset it from your shell rc / launchd plist.');
101
+ }
102
+ // ── 1.5. Whitelist self-test (Phase 2c safety-net) ────────────────────────
103
+ // Fail-fast at boot if the enforcement whitelist regresses — better than
104
+ // letting the user discover that `cf bypass` itself is denied on first use.
105
+ try {
106
+ assertWhitelistInvariants();
107
+ logger.debug('[Whitelist] self-test passed');
108
+ }
109
+ catch (err) {
110
+ logger.error(`[Whitelist] self-test FAILED: ${err}`);
111
+ throw err;
112
+ }
113
+ // ── 1.6. Global governance protocol injection (decision 7fa0f2ab) ─────────
114
+ // Idempotently write the DECISION HINT protocol contract into the global
115
+ // ~/.claude/CLAUDE.md so Claude in *other* projects knows to spawn
116
+ // decision-maker. Fail-silent: a write error here must never block daemon
117
+ // startup. Skip when FORGE_DAEMON_SKIP_GLOBAL_INJECT=1 (tests / CI).
118
+ if (process.env.FORGE_DAEMON_SKIP_GLOBAL_INJECT !== '1') {
119
+ try {
120
+ const { injectGlobalGovernance } = await import('../core/governance/global-inject.js');
121
+ const res = injectGlobalGovernance();
122
+ logger.debug(`[Governance] global inject ${res.action} (${res.path})`);
123
+ }
124
+ catch (err) {
125
+ logger.warn(`[Governance] global inject failed (continuing): ${err}`);
126
+ }
127
+ }
47
128
  // ── 2. Lifecycle (PID, socket, auth token) ─────────────────────────────────
129
+ // Single-instance guard (task-link orphan fix, 2026-06-02). MUST run BEFORE
130
+ // cleanSocket() — if a healthy daemon is already accepting on the socket, a
131
+ // second instance (typically launchd re-spawn after a prior EADDRINUSE crash)
132
+ // would otherwise unlink + re-bind the live socket, steal it, then die on the
133
+ // web port. That orphaned socket breaks every hook `nc` connect → events get
134
+ // queued instead of delivered and tasks freeze at "0 events". We exit 0
135
+ // (clean) so launchd's KeepAlive.SuccessfulExit=false does NOT immediately
136
+ // re-spawn us, breaking the 10s crash loop.
137
+ if (await isAnotherDaemonListening()) {
138
+ logger.warn('[Daemon] Another daemon is already listening on the socket — aborting ' +
139
+ 'startup to avoid socket theft (single-instance guard). Exiting cleanly.');
140
+ process.exit(0);
141
+ }
48
142
  cleanSocket();
49
143
  writePidFile();
50
144
  const authToken = writeAuthToken();
@@ -54,6 +148,43 @@ export async function startDaemon(foreground = false, options = {}) {
54
148
  const dbPath = expandPath(config.storage.path);
55
149
  const storage = new SQLiteStorage(dbPath);
56
150
  logger.info(`Storage initialized: ${dbPath}`);
151
+ // ── 3.45. Seed feature-flag defaults (v9.x Phase 0) ───────────────────────
152
+ // Insert any missing flags from DEFAULT_FLAGS; user-edited values via
153
+ // `cf config set ...` are preserved (only writes when key is absent).
154
+ // ConfigStore is instantiated once here and shared with handlers that need
155
+ // to probe flags at request time (e.g. PreToolUseHandler).
156
+ const configStore = new ConfigStore(storage);
157
+ try {
158
+ const seeded = configStore.seedDefaults();
159
+ if (seeded > 0) {
160
+ logger.info(`[ConfigStore] Seeded ${seeded} default feature flag(s)`);
161
+ }
162
+ else {
163
+ logger.debug('[ConfigStore] All default feature flags already present');
164
+ }
165
+ }
166
+ catch (err) {
167
+ logger.warn(`[ConfigStore] seedDefaults failed: ${err}`);
168
+ }
169
+ // ── 3.46. Intercept Revive (8-in-1 Phase D, 2026-05-27) ───────────────────
170
+ // If `InterceptRollbackGuard` auto-disabled `pre_tool_intercept.enabled`
171
+ // more than 24h ago and the user never manually re-enabled it, flip it back
172
+ // on. Without this, the rollback guard is a one-way trap — the user has
173
+ // to remember to run `cf config set ...` which (per spec § Problem
174
+ // statement) they never did. Manual disables (no `auto_disabled_at` audit
175
+ // key) are left alone.
176
+ try {
177
+ const outcome = reviveInterceptIfStale(configStore);
178
+ if (outcome.revived) {
179
+ logger.info(`[InterceptRevive] ${outcome.reason}`);
180
+ }
181
+ else {
182
+ logger.debug(`[InterceptRevive] no-op: ${outcome.reason}`);
183
+ }
184
+ }
185
+ catch (err) {
186
+ logger.warn(`[InterceptRevive] startup call failed (non-fatal): ${err}`);
187
+ }
57
188
  // ── 3.5. Auto-sync hooks ────────────────────────────────────────────────
58
189
  // npm upgrade 不会自动更新 ~/.claude-forge/hooks/,每次 daemon 启动
59
190
  // 用 SHA-256 比对源 dist/hooks 与本地副本,不一致则覆盖。
@@ -63,86 +194,190 @@ export async function startDaemon(foreground = false, options = {}) {
63
194
  catch (err) {
64
195
  logger.warn(`[HookSync] unexpected error: ${err}`);
65
196
  }
66
- // ── 3.6. Auto-sync official skills ─────────────────────────────────────
197
+ // ── 3.6. Auto-sync built-in distilled skills ───────────────────────────
67
198
  // npm upgrade 不会自动更新 ~/.claude/skills/,每次 daemon 启动
68
- // 用 SHA-256 比对 dist/skills/official 与本地副本,不一致则覆盖。
199
+ // 用 SHA-256 比对 dist/skills/distilled 与本地副本,不一致则覆盖。
69
200
  try {
70
201
  syncSkills();
71
202
  }
72
203
  catch (err) {
73
204
  logger.warn(`[SkillSync] unexpected error: ${err}`);
74
205
  }
75
- // ── 4. AI Provider ─────────────────────────────────────────────────────────
76
- const apiKey = config.ai.api_key || process.env.ANTHROPIC_API_KEY || '';
77
- if (!apiKey) {
78
- logger.warn('No API key configured AI features disabled');
206
+ // ── 3.7. Auto-sync project-specific agent prompts ───────────────────────
207
+ // npm upgrade / fresh npm install 不会自动填充 ~/.claude/agents/。每次 daemon
208
+ // 启动用 SHA-256 比对 dist/daemon/templates/agents/ 与本地副本,不一致则覆盖。
209
+ // 用户自己加的 my-*.md 不在 source list 始终保留。
210
+ try {
211
+ syncAgents();
79
212
  }
80
- const ai = apiKey
81
- ? new ClaudeProvider(apiKey, config.ai.model, config.ai.base_url)
82
- : null;
83
- // ── 5. Initialize services ─────────────────────────────────────────────────
84
- const skillApiKey = config.skill_matching?.api_key || apiKey;
85
- const skillRegistry = new SkillRegistry(skillApiKey, config.ai.model, config.ai.base_url);
86
- const invocationGuard = new InvocationGuard();
87
- if (skillApiKey) {
88
- logger.info('[Skills] Registry loaded with semantic matching support');
213
+ catch (err) {
214
+ logger.warn(`[AgentSync] unexpected error: ${err}`);
89
215
  }
90
- else {
91
- logger.info('[Skills] Registry loaded (keyword matching)');
216
+ // ── 4. AI Provider (DELETED — D R-A → R-D, 2026-05-29) ────────────────────
217
+ // The daemon used to instantiate a ClaudeProvider here for two reasons:
218
+ // (a) emit `[AI Stats]` on shutdown (dead log — no consumers, removed)
219
+ // (b) hand model/base_url to the (now-deleted) semantic skill matcher
220
+ // Master spec 0902 §2.4.4 (decision f5a5b030 / Option B 彻底) eliminates
221
+ // both: distill / claudemd / knowledge / patch now shell out to the
222
+ // `claude` CLI (sub-specs A/B/C R-B already landed). SkillRegistry is
223
+ // keyword-only. D R-D (this commit) deleted `src/core/ai/provider.ts`
224
+ // outright and the `ai.*` / `skill_matching.*` config schema.
225
+ // Design rationale for the keyword-only switch lives in
226
+ // `src/skills/registry.ts` (single source of truth — decision 3baa0e7c).
227
+ //
228
+ // Migration warn: if the user still has `ai:` or `skill_matching:` in the
229
+ // raw yaml, or `ANTHROPIC_API_KEY` exported, tell them it's deprecated and
230
+ // has no effect. We re-read the raw yaml here (rather than the typed
231
+ // `config`) because the schema no longer holds those fields.
232
+ try {
233
+ const rawCfg = readFileSync(FORGE_PATHS.config(), 'utf-8');
234
+ const legacyAiKey = /^\s*ai\s*:/m.test(rawCfg);
235
+ const legacySkillMatchKey = /^\s*skill_matching\s*:/m.test(rawCfg);
236
+ const legacyApiKeyEnv = !!process.env.ANTHROPIC_API_KEY;
237
+ if (legacyAiKey || legacySkillMatchKey || legacyApiKeyEnv) {
238
+ const sources = [];
239
+ if (legacyAiKey)
240
+ sources.push('config.ai.api_key');
241
+ if (legacySkillMatchKey)
242
+ sources.push('config.skill_matching.api_key');
243
+ if (legacyApiKeyEnv)
244
+ sources.push('ANTHROPIC_API_KEY env');
245
+ logger.warn(`[daemon] ${sources.join(' + ')} detected — these are deprecated ` +
246
+ 'and have no effect after spec 0902 (decision f5a5b030). Distill / ' +
247
+ 'claudemd / knowledge build / patch now use claude CLI shell-out, ' +
248
+ 'and SkillRegistry is keyword-only. Remove from config.yaml + ' +
249
+ 'shell rc to silence this warning.');
250
+ }
251
+ }
252
+ catch {
253
+ // No config.yaml or read error → nothing to warn about.
254
+ }
255
+ // ── 4.7. decision 7aa0ec63 (2026-06-01) — cooldown config validation ────
256
+ // If forge_config.decision_maker_cooldown_seconds is present but holds an
257
+ // out-of-range value (≤ 0 or > MAX_DECISION_MAKER_COOLDOWN_SECONDS) or a
258
+ // non-number, the resolver silently falls back to the default. Warn once at
259
+ // boot so the user notices typos instead of wondering why their override
260
+ // had no effect.
261
+ try {
262
+ const raw = storage.readConfig(DECISION_MAKER_COOLDOWN_CONFIG_KEY);
263
+ if (raw !== undefined && raw !== null) {
264
+ const n = Number(raw);
265
+ const invalid = !Number.isFinite(n) ||
266
+ n <= 0 ||
267
+ n > MAX_DECISION_MAKER_COOLDOWN_SECONDS;
268
+ if (invalid) {
269
+ logger.warn(`[daemon] forge_config.${DECISION_MAKER_COOLDOWN_CONFIG_KEY}=${String(raw)} ` +
270
+ `is out of range (0, ${MAX_DECISION_MAKER_COOLDOWN_SECONDS}]; ` +
271
+ `falling back to default ${DEFAULT_DECISION_MAKER_COOLDOWN_SECONDS}s. ` +
272
+ `Set a valid value via \`cf config set ${DECISION_MAKER_COOLDOWN_CONFIG_KEY} <seconds>\`.`);
273
+ }
274
+ }
92
275
  }
276
+ catch (err) {
277
+ logger.debug(`[daemon] cooldown config probe failed (non-fatal): ${err}`);
278
+ }
279
+ // ── 5. Initialize services ─────────────────────────────────────────────────
280
+ // D R-B (spec 0902): SkillRegistry is keyword-only — no args. The legacy
281
+ // `skill_matching.api_key` field is silently ignored (warned above) and
282
+ // will be removed from the JSON schema in D R-D.
283
+ const skillRegistry = new SkillRegistry();
284
+ const invocationGuard = new InvocationGuard();
285
+ logger.info('[Skills] Registry loaded (keyword matching)');
93
286
  logger.info('[Skills] InvocationGuard ready (idempotent + depth/total limits)');
94
287
  const exporter = new HistoryExporter(storage);
95
288
  const resume = new ResumeManager(storage);
289
+ const violationsManager = new ViolationsManager();
96
290
  const conventionExtractor = new ConventionExtractor();
97
291
  const taskSegmenter = new TaskSegmenter(storage);
98
- logger.info('[Services] Initialized: ResumeManager, TaskSegmenter, SkillRegistry');
99
- // ── 5.5. Schedule daily maintenance ────────────────────────────────────────
100
- // Clean old fact-table data every 24 hours (events / routing / skills / tokens).
101
- const MAINTENANCE_INTERVAL = 24 * 60 * 60 * 1000; // 24 hours
102
- const maintenanceInterval = setInterval(() => {
103
- logger.info('[Daemon] Running daily maintenance: cleaning old fact-table data');
104
- try {
105
- const r = storage.cleanOldData(30);
106
- logger.info(`[Daemon] cleanOldData: events=${r.events}, routing=${r.routing}, skills=${r.skills}, tokens=${r.tokens}`);
107
- }
108
- catch (err) {
109
- logger.error(`[Daemon] Maintenance failed: ${err}`);
110
- }
111
- }, MAINTENANCE_INTERVAL);
112
- logger.info('[Daemon] Scheduled daily maintenance (clean fact-table data older than 30 days)');
113
- // ── 5.5.1. Schedule weekly VACUUM (every 7 days) ───────────────────────────
114
- // VACUUM 重写整库,释放页空间。频率 7 天足以应对一般负载。
115
- const VACUUM_INTERVAL = 7 * 24 * 60 * 60 * 1000;
116
- const vacuumInterval = setInterval(() => {
117
- try {
118
- // 500 MB 阈值:低于此值不 VACUUM(避免空转的 fsync 抖动)。
119
- storage.runMaintenance(500);
120
- }
121
- catch (err) {
122
- logger.error(`[Daemon] VACUUM failed: ${err}`);
123
- }
124
- }, VACUUM_INTERVAL);
125
- logger.info('[Daemon] Scheduled weekly VACUUM (threshold: 500MB)');
126
- // ── 5.6. Stale task GC (every 5 minutes) ──────────────────────────────────
127
- const STALE_TASK_GC_INTERVAL = 5 * 60 * 1000; // 5 分钟
128
- const STALE_TASK_IDLE_MINUTES = 10; // idle 10 分钟视为滞留
129
- const staleTaskGcInterval = setInterval(() => {
130
- try {
131
- const closed = storage.completeStaleActiveTasks(STALE_TASK_IDLE_MINUTES);
132
- if (closed > 0) {
133
- logger.info(`[Maintenance] Auto-completed ${closed} stale active task(s)`);
134
- }
135
- }
136
- catch (err) {
137
- logger.error(`[Maintenance] Stale task GC failed: ${err}`);
292
+ // decision 265f59d5 (2026-06-08): async LLM boundary classifier. Fire-and-
293
+ // forget — NEVER awaited on the UserPromptSubmit hot path. Only spawns claude
294
+ // for prompts the sync segmenter flagged ambiguous (~30%).
295
+ const boundaryClassifier = new TaskBoundaryClassifier();
296
+ // Orphan-event robustness fix (2026-06-01): proactively rebuild the
297
+ // in-memory currentTasks map from the DB so events arriving right after a
298
+ // daemon restart (buffered + replayed) hit the fast currentTasks path
299
+ // instead of relying on per-event lazy recovery. Idempotent + fault-tolerant.
300
+ taskSegmenter.hydrateActiveTasks();
301
+ logger.info('[Services] Initialized: ResumeManager, ViolationsManager, TaskSegmenter, SkillRegistry');
302
+ // ── 5.45. Heartbeat writer (watchdog spec 0843) ───────────────────────────
303
+ // Writes ~/.claude-forge/daemon.heartbeat every 60s via atomic rename.
304
+ // Removed on graceful shutdown so ensure-running detects the gap.
305
+ let daemonVersion = 'unknown';
306
+ try {
307
+ const pkgUrl = new URL('../../package.json', import.meta.url);
308
+ const { createRequire } = await import('node:module');
309
+ const req = createRequire(import.meta.url);
310
+ const pkg = req(pkgUrl.pathname);
311
+ daemonVersion = pkg.version;
312
+ }
313
+ catch { /* version string is nice-to-have, not critical */ }
314
+ const heartbeatHandle = startHeartbeat({ version: daemonVersion });
315
+ logger.info('[Heartbeat] writer started (60s interval)');
316
+ // ── 5.5–5.8. Periodic maintenance schedulers (Wave 3a R3 extraction) ──────
317
+ // Daily fact-table clean, weekly VACUUM, event-TTL sweep, stale-task GC,
318
+ // codegraph incremental sync and KB auto-rebuild — all six recurring
319
+ // schedulers plus their four initial one-shot timeouts and the shared
320
+ // maintenance mutex now live in `startMaintenanceSchedulers`
321
+ // (src/daemon/startup/maintenance-schedulers.ts). Behavior is unchanged:
322
+ // same cadences, same fail-silent handling, same teardown. The codegraph
323
+ // store + project-root deps are declared here because `shutdown()` also
324
+ // closes the store; the BuildManager resolver stays here to keep the
325
+ // scheduler module free of any static edge into `src/web/`.
326
+ const codegraphStore = new CodeGraphStore(FORGE_PATHS.codegraphDb());
327
+ const codegraphSrcDir = srcDirFromRoot(process.cwd());
328
+ const codegraphMtimeCache = new Map();
329
+ const kbProjectRoot = process.cwd();
330
+ // BuildManager lives under src/web/ (lazy-loaded to keep core ← web layering).
331
+ // The scheduler stays web-agnostic via this callback; resolve the singleton
332
+ // once.
333
+ let kbBuildManager = null;
334
+ const ensureKbBuildManager = async () => {
335
+ if (!kbBuildManager) {
336
+ const { buildManager } = await import('../web/services/build-manager.js');
337
+ // Idempotent: setStorage may also be called by the web-server branch.
338
+ buildManager.setStorage(storage);
339
+ kbBuildManager = buildManager;
138
340
  }
139
- }, STALE_TASK_GC_INTERVAL);
341
+ return kbBuildManager;
342
+ };
343
+ const maintenanceHandle = startMaintenanceSchedulers({
344
+ storage,
345
+ configStore,
346
+ taskSegmenter,
347
+ codegraphStore,
348
+ codegraphSrcDir,
349
+ codegraphMtimeCache,
350
+ kbProjectRoot,
351
+ ensureKbBuildManager,
352
+ });
140
353
  // ── 6. Create handlers ─────────────────────────────────────────────────────
141
- const userPromptHandler = new UserPromptHandler(resume, conventionExtractor, storage, skillRegistry);
354
+ // Phase 5: shared RuleRegistry so PreToolUse sees the same rule set.
355
+ const ruleRegistry = new RuleRegistry();
356
+ // ── 6.2. v9.x Phase 2b — Spec Approval ─────────────────────────────────
357
+ // SpecGenerator removed (Spec 1702: 0% real-world acceptance → dead code).
358
+ // SpecApproval retained for the hand-written path: planner agent calls
359
+ // `cf spec register`, user replies "批准 <token>" → daemon short-circuits.
360
+ const specApproval = new SpecApproval(storage);
361
+ // Spec 1200 (2026-05-28): IntentEngine + WorkflowRecommender removed.
362
+ // Decision 3baa0e7c Batch 1 (2026-06-01): deprecated `_workflowRecommender`
363
+ // and `_intentEngine` ctor positions cleaned up; specApproval now arg 5.
364
+ const userPromptHandler = new UserPromptHandler(resume, conventionExtractor, storage, skillRegistry, specApproval);
365
+ // Phase 1: PreToolUseHandler runs in dry_run mode unless
366
+ // `pre_tool_intercept.enabled` is flipped on via `cf config set`.
367
+ //
368
+ // Constructed BEFORE StopHandler so the latter can receive it as its 8th
369
+ // arg for the D-1 clearSession wiring (memory-leak fix).
370
+ const preToolUseHandler = new PreToolUseHandler(storage, configStore, ruleRegistry);
142
371
  const handlers = {
143
372
  UserPromptSubmit: userPromptHandler,
144
- PostToolUse: new PostToolUseHandler(storage),
145
- Stop: new StopHandler(exporter, resume, taskSegmenter, storage, invocationGuard, userPromptHandler),
373
+ // Phase 6: configStore wired so agent_writeback.enabled flag is probed
374
+ // on every Write/Edit (default OFF; opt-in via `cf config set`).
375
+ PostToolUse: new PostToolUseHandler(storage, configStore),
376
+ Stop: new StopHandler(exporter, resume, taskSegmenter, storage, invocationGuard, userPromptHandler, violationsManager,
377
+ // D-1: clearSession on PreToolUseHandler.editedFilesCache at Stop time
378
+ // (fixes per-session Set leak across long-running daemons).
379
+ preToolUseHandler),
380
+ PreToolUse: preToolUseHandler,
146
381
  };
147
382
  // ── 7. Event handler ───────────────────────────────────────────────────────
148
383
  const handleEvent = async (event) => {
@@ -165,15 +400,27 @@ export async function startDaemon(foreground = false, options = {}) {
165
400
  // Task segmentation: UserPromptSubmit starts/continues tasks
166
401
  const prompt = getUserPrompt(event);
167
402
  if (event.hook_type === 'UserPromptSubmit' && prompt) {
168
- taskSegmenter.processPrompt(event.session_id, prompt, event.timestamp, event.event_id);
403
+ const decision = taskSegmenter.processPromptWithBoundary(event.session_id, prompt, event.timestamp, event.event_id);
404
+ // decision 265f59d5: ambiguous merge → hand off to the async LLM
405
+ // classifier. fire-and-forget: NOT awaited, never blocks the hook
406
+ // response. The classifier internally re-checks idempotency + the
407
+ // event's current FK before any re-attribution.
408
+ if (decision.ambiguous) {
409
+ void boundaryClassifier.classify(decision.ambiguous, storage);
410
+ }
169
411
  }
170
412
  else if (event.event_id) {
171
- taskSegmenter.linkEvent(event.session_id, event.event_id);
172
- }
173
- // PreToolUse: always allow (governance removed)
174
- if (event.hook_type === 'PreToolUse') {
175
- return { allow: true };
413
+ // Spec 1713 §10.3: forward hookType / toolName so the segmenter can
414
+ // detect sub-agent return (PostToolUse Task/Agent) and arm the
415
+ // "next prompt = new task" flag.
416
+ taskSegmenter.linkEvent(event.session_id, event.event_id, event.timestamp, {
417
+ hookType: event.hook_type,
418
+ toolName: event.tool_name,
419
+ });
176
420
  }
421
+ // PreToolUse / PostToolUse / UserPromptSubmit / Stop all routed via routeEvent.
422
+ // PreToolUse now goes through PreToolUseHandler (Phase 1 rule engine),
423
+ // which honors `pre_tool_intercept.enabled` flag (dry_run when OFF).
177
424
  const result = await routeEvent(event, handlers);
178
425
  if (result) {
179
426
  const handlerName = event.hook_type + 'Handler';
@@ -190,14 +437,30 @@ export async function startDaemon(foreground = false, options = {}) {
190
437
  console.error(`\x1b[36m[${handlerName}] systemMessage (${result.systemMessage.length} chars): ${preview}\x1b[0m`);
191
438
  }
192
439
  if (result.additionalContext) {
193
- storage.writeInjection({
194
- event_id: event.event_id,
195
- session_id: event.session_id,
196
- timestamp: event.timestamp,
197
- source_handler: handlerName,
198
- injection_type: 'additionalContext',
199
- content: result.additionalContext,
200
- });
440
+ // P2 dedup (audit e888352d): the UserPromptSubmit additionalContext is
441
+ // a MERGE of resume/convention + the KB block, but the KB block is
442
+ // ALSO recorded as its own fine-grained `:kb` injection row by
443
+ // UserPromptHandler (the canonical row ~10 metric queries read). Two
444
+ // rows carrying the same KB content inflated the injection count ~15%.
445
+ //
446
+ // Fix: record under the generic handler name ONLY the portion not
447
+ // already captured by a sibling `:kb` row for this event (i.e. the
448
+ // resume/convention context). Delivery to Claude Code is unchanged —
449
+ // result.additionalContext still carries the full merged text; only
450
+ // the *recorded* row is de-duplicated. If nothing remains after
451
+ // stripping the KB block, skip the write entirely (the `:kb` row is
452
+ // the sole record of this injection).
453
+ const recordContent = stripAlreadyRecordedKb(storage, event.event_id, result.additionalContext);
454
+ if (recordContent) {
455
+ storage.writeInjection({
456
+ event_id: event.event_id,
457
+ session_id: event.session_id,
458
+ timestamp: event.timestamp,
459
+ source_handler: handlerName,
460
+ injection_type: 'additionalContext',
461
+ content: recordContent,
462
+ });
463
+ }
201
464
  const preview = result.additionalContext.slice(0, 200).replace(/\n/g, ' ');
202
465
  console.error(`\x1b[36m[${handlerName}] additionalContext: ${preview}\x1b[0m`);
203
466
  }
@@ -217,7 +480,21 @@ export async function startDaemon(foreground = false, options = {}) {
217
480
  // setImmediate ensures the event loop has had a chance to process the listen
218
481
  // callback before we touch storage (not strictly required, but defensive).
219
482
  setImmediate(() => {
220
- replayQueue(storage).then(({ replayed, skipped, dead }) => {
483
+ replayQueue(storage, {
484
+ // Mirror handleEvent line 480-484: feed replayed UserPromptSubmit events
485
+ // into TaskSegmenter so the tasks table gets populated. We do NOT route
486
+ // through full handleEvent — KB inject / decision-hint / skill-match
487
+ // would all be stale (no live hook is waiting on the response).
488
+ onReplayed: (event) => {
489
+ const prompt = getUserPrompt(event);
490
+ if (event.hook_type === 'UserPromptSubmit' && prompt) {
491
+ taskSegmenter.processPrompt(event.session_id, prompt, event.timestamp, event.event_id);
492
+ }
493
+ else if (event.event_id) {
494
+ taskSegmenter.linkEvent(event.session_id, event.event_id, event.timestamp);
495
+ }
496
+ },
497
+ }).then(({ replayed, skipped, dead }) => {
221
498
  if (replayed > 0 || skipped > 0 || dead > 0) {
222
499
  logger.info(`[Queue] Replay: ${replayed} replayed, ${skipped} skipped (dup), ${dead} dead-lettered`);
223
500
  }
@@ -230,6 +507,20 @@ export async function startDaemon(foreground = false, options = {}) {
230
507
  const webEnabled = options.web ?? (process.env.FORGE_DAEMON_NO_WEB === '1' ? false : config.web.enabled);
231
508
  let webServer = null;
232
509
  if (webEnabled) {
510
+ // D-2: lazy-load BuildManager + WebServer so the daemon has zero static
511
+ // edges into `src/web/` (matches the documented core ← {daemon, web}
512
+ // peer-layering). BuildManager's storage injection is safe to defer
513
+ // because the only consumer is `web/routes/knowledge.ts`, which runs
514
+ // only after `WebServer.start()` returns (post-setStorage).
515
+ const { buildManager } = await import('../web/services/build-manager.js');
516
+ buildManager.setStorage(storage);
517
+ // Decision 4e592120 (invariant b): inject the live SkillRegistry into the
518
+ // distill manager so a Web-triggered distillation can reload() it on done
519
+ // — the dashboard skill list refreshes with no daemon restart. Lazy import
520
+ // keeps the documented core ← {daemon, web} peer-layering (no static daemon
521
+ // edge into src/web/).
522
+ const { distillManager } = await import('../web/services/distill-manager.js');
523
+ distillManager.setRegistry(skillRegistry);
233
524
  const { WebServer } = await import('../web/server.js');
234
525
  webServer = new WebServer({
235
526
  port: config.web.port,
@@ -237,7 +528,19 @@ export async function startDaemon(foreground = false, options = {}) {
237
528
  skillRegistry,
238
529
  invocationGuard,
239
530
  });
240
- await webServer.start();
531
+ // Defense-in-depth (task-link orphan fix, 2026-06-02): a failed web-server
532
+ // start (most commonly EADDRINUSE on port 3721 when another daemon already
533
+ // holds it) MUST NOT propagate to `process.exit(1)`. The core daemon job is
534
+ // the socket event pipeline, which is already listening by now; killing the
535
+ // process here is what previously created the launchd crash loop + socket
536
+ // theft. Log and continue with web disabled.
537
+ try {
538
+ await webServer.start();
539
+ }
540
+ catch (err) {
541
+ logger.error(`[Web] Server failed to start (continuing without web UI): ${err instanceof Error ? err.message : err}`);
542
+ webServer = null;
543
+ }
241
544
  }
242
545
  else {
243
546
  logger.info('[Web] Server disabled (--no-web or config.web.enabled=false)');
@@ -249,11 +552,14 @@ export async function startDaemon(foreground = false, options = {}) {
249
552
  return;
250
553
  shuttingDown = true;
251
554
  logger.info('Shutting down...');
252
- if (ai)
253
- logger.info(`[AI Stats] ${ai.formatStats()}`);
254
- clearInterval(maintenanceInterval);
255
- clearInterval(vacuumInterval);
256
- clearInterval(staleTaskGcInterval);
555
+ // D R-A (2026-05-29): removed `[AI Stats]` shutdown line — there was no
556
+ // consumer (dead log), and the only producer (ClaudeProvider instance)
557
+ // was deleted with the §4 block above. Master spec 0902 §2.4.4.
558
+ heartbeatHandle.stop();
559
+ // Wave 3a R3: all six maintenance intervals + four initial one-shot
560
+ // timeouts are now torn down by the scheduler handle (same set as before).
561
+ maintenanceHandle.stop();
562
+ codegraphStore.close();
257
563
  if (webServer)
258
564
  await webServer.stop();
259
565
  await server.close();
@@ -271,6 +577,53 @@ export async function startDaemon(foreground = false, options = {}) {
271
577
  process.stdout.write('Press Ctrl+C to stop\n');
272
578
  }
273
579
  }
580
+ /**
581
+ * P2 dedup helper (audit e888352d).
582
+ *
583
+ * The merged UserPromptSubmit `additionalContext` recorded under the generic
584
+ * `<hook>Handler` source_handler often re-contains the KB block, which
585
+ * UserPromptHandler already recorded as its own `UserPromptSubmitHandler:kb`
586
+ * injection row. That double-count inflated injection metrics ~15%.
587
+ *
588
+ * Given the full merged additionalContext, this removes any sibling `:kb`
589
+ * injection content already recorded for the same `event_id`, returning the
590
+ * remaining context (resume/convention) to record under the generic handler.
591
+ * Returns null when nothing meaningful remains (→ caller skips the write, the
592
+ * `:kb` row being the sole record).
593
+ *
594
+ * Storage failures degrade gracefully to "record the full merged content"
595
+ * (no worse than the pre-fix behaviour).
596
+ */
597
+ export function stripAlreadyRecordedKb(storage, eventId, merged) {
598
+ if (!eventId)
599
+ return merged;
600
+ let kbRows;
601
+ try {
602
+ kbRows = storage.queryInjections({
603
+ event_id: eventId,
604
+ source_handler: 'UserPromptSubmitHandler:kb',
605
+ limit: 5,
606
+ });
607
+ }
608
+ catch {
609
+ return merged;
610
+ }
611
+ if (kbRows.length === 0)
612
+ return merged;
613
+ let remaining = merged;
614
+ for (const row of kbRows) {
615
+ if (!row.content)
616
+ continue;
617
+ // The handler joins context parts with '\n\n'; strip the KB block plus an
618
+ // adjacent separator so we don't leave a dangling blank line.
619
+ remaining = remaining
620
+ .replace(`${row.content}\n\n`, '')
621
+ .replace(`\n\n${row.content}`, '')
622
+ .replace(row.content, '');
623
+ }
624
+ remaining = remaining.trim();
625
+ return remaining.length > 0 ? remaining : null;
626
+ }
274
627
  // Allow running as standalone script (spawned by `cf daemon start`)
275
628
  if (process.env.FORGE_DAEMON_FOREGROUND === '1') {
276
629
  startDaemon(true).catch((err) => {