@winspan/claude-forge 8.54.4 → 9.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (880) hide show
  1. package/DEVELOPMENT.md +649 -33
  2. package/README.md +154 -16
  3. package/dist/catalogs/agents.json +72 -0
  4. package/dist/catalogs/skills.json +194 -0
  5. package/dist/claudemd/claudemd-generator.d.ts +45 -45
  6. package/dist/claudemd/claudemd-generator.d.ts.map +1 -1
  7. package/dist/claudemd/claudemd-generator.js +128 -449
  8. package/dist/claudemd/claudemd-generator.js.map +1 -1
  9. package/dist/claudemd/index.d.ts +14 -4
  10. package/dist/claudemd/index.d.ts.map +1 -1
  11. package/dist/claudemd/index.js +15 -4
  12. package/dist/claudemd/index.js.map +1 -1
  13. package/dist/claudemd/resume-manager.d.ts.map +1 -1
  14. package/dist/claudemd/resume-manager.js +37 -9
  15. package/dist/claudemd/resume-manager.js.map +1 -1
  16. package/dist/claudemd/templates/swarm-protocol.md +35 -186
  17. package/dist/claudemd/violations-manager.d.ts +40 -0
  18. package/dist/claudemd/violations-manager.d.ts.map +1 -0
  19. package/dist/claudemd/violations-manager.js +106 -0
  20. package/dist/claudemd/violations-manager.js.map +1 -0
  21. package/dist/cli/commands/admin.d.ts +15 -0
  22. package/dist/cli/commands/admin.d.ts.map +1 -0
  23. package/dist/cli/commands/admin.js +177 -0
  24. package/dist/cli/commands/admin.js.map +1 -0
  25. package/dist/cli/commands/agents.d.ts +18 -0
  26. package/dist/cli/commands/agents.d.ts.map +1 -0
  27. package/dist/cli/commands/agents.js +160 -0
  28. package/dist/cli/commands/agents.js.map +1 -0
  29. package/dist/cli/commands/bypass.d.ts +18 -0
  30. package/dist/cli/commands/bypass.d.ts.map +1 -0
  31. package/dist/cli/commands/bypass.js +87 -0
  32. package/dist/cli/commands/bypass.js.map +1 -0
  33. package/dist/cli/commands/claudemd.d.ts +60 -0
  34. package/dist/cli/commands/claudemd.d.ts.map +1 -1
  35. package/dist/cli/commands/claudemd.js +174 -37
  36. package/dist/cli/commands/claudemd.js.map +1 -1
  37. package/dist/cli/commands/config.d.ts.map +1 -1
  38. package/dist/cli/commands/config.js +94 -1
  39. package/dist/cli/commands/config.js.map +1 -1
  40. package/dist/cli/commands/daemon.d.ts +39 -0
  41. package/dist/cli/commands/daemon.d.ts.map +1 -1
  42. package/dist/cli/commands/daemon.js +167 -20
  43. package/dist/cli/commands/daemon.js.map +1 -1
  44. package/dist/cli/commands/decisions.d.ts +129 -0
  45. package/dist/cli/commands/decisions.d.ts.map +1 -0
  46. package/dist/cli/commands/decisions.js +669 -0
  47. package/dist/cli/commands/decisions.js.map +1 -0
  48. package/dist/cli/commands/doctor.d.ts +29 -0
  49. package/dist/cli/commands/doctor.d.ts.map +1 -0
  50. package/dist/cli/commands/doctor.js +124 -0
  51. package/dist/cli/commands/doctor.js.map +1 -0
  52. package/dist/cli/commands/entropy.d.ts +35 -0
  53. package/dist/cli/commands/entropy.d.ts.map +1 -0
  54. package/dist/cli/commands/entropy.js +121 -0
  55. package/dist/cli/commands/entropy.js.map +1 -0
  56. package/dist/cli/commands/executions.d.ts +1 -0
  57. package/dist/cli/commands/executions.d.ts.map +1 -1
  58. package/dist/cli/commands/executions.js +10 -1
  59. package/dist/cli/commands/executions.js.map +1 -1
  60. package/dist/cli/commands/fix.d.ts +31 -0
  61. package/dist/cli/commands/fix.d.ts.map +1 -0
  62. package/dist/cli/commands/fix.js +108 -0
  63. package/dist/cli/commands/fix.js.map +1 -0
  64. package/dist/cli/commands/governance.d.ts +21 -0
  65. package/dist/cli/commands/governance.d.ts.map +1 -0
  66. package/dist/cli/commands/governance.js +60 -0
  67. package/dist/cli/commands/governance.js.map +1 -0
  68. package/dist/cli/commands/init.d.ts +27 -0
  69. package/dist/cli/commands/init.d.ts.map +1 -1
  70. package/dist/cli/commands/init.js +158 -146
  71. package/dist/cli/commands/init.js.map +1 -1
  72. package/dist/cli/commands/insights-goal-check.d.ts +50 -0
  73. package/dist/cli/commands/insights-goal-check.d.ts.map +1 -0
  74. package/dist/cli/commands/insights-goal-check.js +318 -0
  75. package/dist/cli/commands/insights-goal-check.js.map +1 -0
  76. package/dist/cli/commands/insights.d.ts +15 -0
  77. package/dist/cli/commands/insights.d.ts.map +1 -0
  78. package/dist/cli/commands/insights.js +127 -0
  79. package/dist/cli/commands/insights.js.map +1 -0
  80. package/dist/cli/commands/knowledge.d.ts +66 -0
  81. package/dist/cli/commands/knowledge.d.ts.map +1 -0
  82. package/dist/cli/commands/knowledge.js +897 -0
  83. package/dist/cli/commands/knowledge.js.map +1 -0
  84. package/dist/cli/commands/mcp.d.ts +0 -12
  85. package/dist/cli/commands/mcp.d.ts.map +1 -1
  86. package/dist/cli/commands/mcp.js +11 -5
  87. package/dist/cli/commands/mcp.js.map +1 -1
  88. package/dist/cli/commands/menu.d.ts.map +1 -1
  89. package/dist/cli/commands/menu.js +10 -184
  90. package/dist/cli/commands/menu.js.map +1 -1
  91. package/dist/cli/commands/project.d.ts +98 -0
  92. package/dist/cli/commands/project.d.ts.map +1 -0
  93. package/dist/cli/commands/project.js +382 -0
  94. package/dist/cli/commands/project.js.map +1 -0
  95. package/dist/cli/commands/skills.d.ts.map +1 -1
  96. package/dist/cli/commands/skills.js +14 -128
  97. package/dist/cli/commands/skills.js.map +1 -1
  98. package/dist/cli/commands/spec.d.ts +40 -0
  99. package/dist/cli/commands/spec.d.ts.map +1 -0
  100. package/dist/cli/commands/spec.js +49 -0
  101. package/dist/cli/commands/spec.js.map +1 -0
  102. package/dist/cli/commands/stats.d.ts.map +1 -1
  103. package/dist/cli/commands/stats.js +3 -2
  104. package/dist/cli/commands/stats.js.map +1 -1
  105. package/dist/cli/commands/status.d.ts.map +1 -1
  106. package/dist/cli/commands/status.js +17 -2
  107. package/dist/cli/commands/status.js.map +1 -1
  108. package/dist/cli/commands/trace.d.ts.map +1 -1
  109. package/dist/cli/commands/trace.js +4 -9
  110. package/dist/cli/commands/trace.js.map +1 -1
  111. package/dist/cli/commands/violations.d.ts +14 -0
  112. package/dist/cli/commands/violations.d.ts.map +1 -0
  113. package/dist/cli/commands/violations.js +43 -0
  114. package/dist/cli/commands/violations.js.map +1 -0
  115. package/dist/cli/index.js +26 -0
  116. package/dist/cli/index.js.map +1 -1
  117. package/dist/cli/init/hook-manager.d.ts +1 -1
  118. package/dist/cli/init/hook-manager.d.ts.map +1 -1
  119. package/dist/cli/init/hook-manager.js +6 -0
  120. package/dist/cli/init/hook-manager.js.map +1 -1
  121. package/dist/cli/utils/resolve-session.d.ts +32 -0
  122. package/dist/cli/utils/resolve-session.d.ts.map +1 -0
  123. package/dist/cli/utils/resolve-session.js +39 -0
  124. package/dist/cli/utils/resolve-session.js.map +1 -0
  125. package/dist/core/config.d.ts +4 -1
  126. package/dist/core/config.d.ts.map +1 -1
  127. package/dist/core/config.js +11 -23
  128. package/dist/core/config.js.map +1 -1
  129. package/dist/core/constants.d.ts +14 -13
  130. package/dist/core/constants.d.ts.map +1 -1
  131. package/dist/core/constants.js +20 -13
  132. package/dist/core/constants.js.map +1 -1
  133. package/dist/core/diagnostics/checks.d.ts +151 -0
  134. package/dist/core/diagnostics/checks.d.ts.map +1 -0
  135. package/dist/core/diagnostics/checks.js +765 -0
  136. package/dist/core/diagnostics/checks.js.map +1 -0
  137. package/dist/core/diagnostics/daemon-status.d.ts +77 -0
  138. package/dist/core/diagnostics/daemon-status.d.ts.map +1 -0
  139. package/dist/core/diagnostics/daemon-status.js +113 -0
  140. package/dist/core/diagnostics/daemon-status.js.map +1 -0
  141. package/dist/core/diagnostics/entropy-checks.d.ts +82 -0
  142. package/dist/core/diagnostics/entropy-checks.d.ts.map +1 -0
  143. package/dist/core/diagnostics/entropy-checks.js +395 -0
  144. package/dist/core/diagnostics/entropy-checks.js.map +1 -0
  145. package/dist/core/diagnostics/fix-runner.d.ts +54 -0
  146. package/dist/core/diagnostics/fix-runner.d.ts.map +1 -0
  147. package/dist/core/diagnostics/fix-runner.js +90 -0
  148. package/dist/core/diagnostics/fix-runner.js.map +1 -0
  149. package/dist/core/diagnostics/knip-runner.d.ts +49 -0
  150. package/dist/core/diagnostics/knip-runner.d.ts.map +1 -0
  151. package/dist/core/diagnostics/knip-runner.js +100 -0
  152. package/dist/core/diagnostics/knip-runner.js.map +1 -0
  153. package/dist/core/diagnostics/markers.d.ts +96 -0
  154. package/dist/core/diagnostics/markers.d.ts.map +1 -0
  155. package/dist/core/diagnostics/markers.js +153 -0
  156. package/dist/core/diagnostics/markers.js.map +1 -0
  157. package/dist/core/governance/global-inject.d.ts +60 -0
  158. package/dist/core/governance/global-inject.d.ts.map +1 -0
  159. package/dist/core/governance/global-inject.js +129 -0
  160. package/dist/core/governance/global-inject.js.map +1 -0
  161. package/dist/core/queue/index.d.ts +16 -3
  162. package/dist/core/queue/index.d.ts.map +1 -1
  163. package/dist/core/queue/index.js +14 -3
  164. package/dist/core/queue/index.js.map +1 -1
  165. package/dist/core/storage/base.d.ts +158 -0
  166. package/dist/core/storage/base.d.ts.map +1 -1
  167. package/dist/core/storage/base.js +570 -0
  168. package/dist/core/storage/base.js.map +1 -1
  169. package/dist/core/storage/codec/tool-input-codec.d.ts +93 -0
  170. package/dist/core/storage/codec/tool-input-codec.d.ts.map +1 -0
  171. package/dist/core/storage/codec/tool-input-codec.js +159 -0
  172. package/dist/core/storage/codec/tool-input-codec.js.map +1 -0
  173. package/dist/core/storage/decisions.d.ts +362 -0
  174. package/dist/core/storage/decisions.d.ts.map +1 -0
  175. package/dist/core/storage/decisions.js +502 -0
  176. package/dist/core/storage/decisions.js.map +1 -0
  177. package/dist/core/storage/events.d.ts +112 -8
  178. package/dist/core/storage/events.d.ts.map +1 -1
  179. package/dist/core/storage/events.js +390 -39
  180. package/dist/core/storage/events.js.map +1 -1
  181. package/dist/core/storage/feedback.d.ts +131 -0
  182. package/dist/core/storage/feedback.d.ts.map +1 -0
  183. package/dist/core/storage/feedback.js +187 -0
  184. package/dist/core/storage/feedback.js.map +1 -0
  185. package/dist/core/storage/forge-config.d.ts +40 -0
  186. package/dist/core/storage/forge-config.d.ts.map +1 -0
  187. package/dist/core/storage/forge-config.js +65 -0
  188. package/dist/core/storage/forge-config.js.map +1 -0
  189. package/dist/core/storage/injections.d.ts +28 -0
  190. package/dist/core/storage/injections.d.ts.map +1 -1
  191. package/dist/core/storage/injections.js +62 -5
  192. package/dist/core/storage/injections.js.map +1 -1
  193. package/dist/core/storage/knowledge.d.ts +106 -0
  194. package/dist/core/storage/knowledge.d.ts.map +1 -0
  195. package/dist/core/storage/knowledge.js +202 -0
  196. package/dist/core/storage/knowledge.js.map +1 -0
  197. package/dist/core/storage/maintenance.d.ts +36 -9
  198. package/dist/core/storage/maintenance.d.ts.map +1 -1
  199. package/dist/core/storage/maintenance.js +56 -24
  200. package/dist/core/storage/maintenance.js.map +1 -1
  201. package/dist/core/storage/pipeline-rollup.d.ts +117 -0
  202. package/dist/core/storage/pipeline-rollup.d.ts.map +1 -0
  203. package/dist/core/storage/pipeline-rollup.js +471 -0
  204. package/dist/core/storage/pipeline-rollup.js.map +1 -0
  205. package/dist/core/storage/routing.d.ts +16 -3
  206. package/dist/core/storage/routing.d.ts.map +1 -1
  207. package/dist/core/storage/routing.js +39 -8
  208. package/dist/core/storage/routing.js.map +1 -1
  209. package/dist/core/storage/rows.d.ts +50 -7
  210. package/dist/core/storage/rows.d.ts.map +1 -1
  211. package/dist/core/storage/schema.sql +302 -23
  212. package/dist/core/storage/sessions.d.ts +136 -0
  213. package/dist/core/storage/sessions.d.ts.map +1 -1
  214. package/dist/core/storage/sessions.js +351 -15
  215. package/dist/core/storage/sessions.js.map +1 -1
  216. package/dist/core/storage/skills.d.ts +1 -0
  217. package/dist/core/storage/skills.d.ts.map +1 -1
  218. package/dist/core/storage/skills.js +21 -6
  219. package/dist/core/storage/skills.js.map +1 -1
  220. package/dist/core/storage/sqlite.d.ts +253 -20
  221. package/dist/core/storage/sqlite.d.ts.map +1 -1
  222. package/dist/core/storage/sqlite.js +425 -16
  223. package/dist/core/storage/sqlite.js.map +1 -1
  224. package/dist/core/storage/tasks.d.ts +474 -2
  225. package/dist/core/storage/tasks.d.ts.map +1 -1
  226. package/dist/core/storage/tasks.js +1213 -18
  227. package/dist/core/storage/tasks.js.map +1 -1
  228. package/dist/core/storage/tool-intercepts.d.ts +69 -0
  229. package/dist/core/storage/tool-intercepts.d.ts.map +1 -0
  230. package/dist/core/storage/tool-intercepts.js +116 -0
  231. package/dist/core/storage/tool-intercepts.js.map +1 -0
  232. package/dist/core/storage/workflow-recommendations.d.ts +124 -0
  233. package/dist/core/storage/workflow-recommendations.d.ts.map +1 -0
  234. package/dist/core/storage/workflow-recommendations.js +274 -0
  235. package/dist/core/storage/workflow-recommendations.js.map +1 -0
  236. package/dist/core/types.d.ts +112 -17
  237. package/dist/core/types.d.ts.map +1 -1
  238. package/dist/core/types.js +12 -0
  239. package/dist/core/types.js.map +1 -1
  240. package/dist/core/utils/backup.d.ts +81 -0
  241. package/dist/core/utils/backup.d.ts.map +1 -0
  242. package/dist/core/utils/backup.js +98 -0
  243. package/dist/core/utils/backup.js.map +1 -0
  244. package/dist/core/utils/binary-paths.d.ts +92 -0
  245. package/dist/core/utils/binary-paths.d.ts.map +1 -0
  246. package/dist/core/utils/binary-paths.js +166 -0
  247. package/dist/core/utils/binary-paths.js.map +1 -0
  248. package/dist/core/utils/bypass-token.d.ts +75 -0
  249. package/dist/core/utils/bypass-token.d.ts.map +1 -0
  250. package/dist/core/utils/bypass-token.js +133 -0
  251. package/dist/core/utils/bypass-token.js.map +1 -0
  252. package/dist/core/utils/cc-builtin-agents.d.ts +3 -0
  253. package/dist/core/utils/cc-builtin-agents.d.ts.map +1 -0
  254. package/dist/core/utils/cc-builtin-agents.js +29 -0
  255. package/dist/core/utils/cc-builtin-agents.js.map +1 -0
  256. package/dist/core/utils/claude-cli-spawn.d.ts +106 -0
  257. package/dist/core/utils/claude-cli-spawn.d.ts.map +1 -0
  258. package/dist/core/utils/claude-cli-spawn.js +219 -0
  259. package/dist/core/utils/claude-cli-spawn.js.map +1 -0
  260. package/dist/core/utils/forge-resume-block.d.ts.map +1 -1
  261. package/dist/core/utils/forge-resume-block.js +3 -2
  262. package/dist/core/utils/forge-resume-block.js.map +1 -1
  263. package/dist/core/utils/logger.d.ts +15 -3
  264. package/dist/core/utils/logger.d.ts.map +1 -1
  265. package/dist/core/utils/logger.js +20 -2
  266. package/dist/core/utils/logger.js.map +1 -1
  267. package/dist/core/utils/noise-prompt.d.ts +97 -0
  268. package/dist/core/utils/noise-prompt.d.ts.map +1 -0
  269. package/dist/core/utils/noise-prompt.js +127 -0
  270. package/dist/core/utils/noise-prompt.js.map +1 -0
  271. package/dist/core/utils/path.d.ts +0 -4
  272. package/dist/core/utils/path.d.ts.map +1 -1
  273. package/dist/core/utils/path.js +0 -7
  274. package/dist/core/utils/path.js.map +1 -1
  275. package/dist/core/utils/time.d.ts +41 -0
  276. package/dist/core/utils/time.d.ts.map +1 -1
  277. package/dist/core/utils/time.js +114 -0
  278. package/dist/core/utils/time.js.map +1 -1
  279. package/dist/daemon/agent-sync.d.ts +24 -0
  280. package/dist/daemon/agent-sync.d.ts.map +1 -0
  281. package/dist/daemon/agent-sync.js +114 -0
  282. package/dist/daemon/agent-sync.js.map +1 -0
  283. package/dist/daemon/config-store.d.ts +55 -0
  284. package/dist/daemon/config-store.d.ts.map +1 -0
  285. package/dist/daemon/config-store.js +137 -0
  286. package/dist/daemon/config-store.js.map +1 -0
  287. package/dist/daemon/event-parser.d.ts +22 -0
  288. package/dist/daemon/event-parser.d.ts.map +1 -1
  289. package/dist/daemon/event-parser.js +49 -3
  290. package/dist/daemon/event-parser.js.map +1 -1
  291. package/dist/daemon/handlers/history-exporter.d.ts.map +1 -1
  292. package/dist/daemon/handlers/history-exporter.js +9 -8
  293. package/dist/daemon/handlers/history-exporter.js.map +1 -1
  294. package/dist/daemon/handlers/post-tool-use.d.ts +58 -4
  295. package/dist/daemon/handlers/post-tool-use.d.ts.map +1 -1
  296. package/dist/daemon/handlers/post-tool-use.js +261 -8
  297. package/dist/daemon/handlers/post-tool-use.js.map +1 -1
  298. package/dist/daemon/handlers/pre-tool-use.d.ts +156 -0
  299. package/dist/daemon/handlers/pre-tool-use.d.ts.map +1 -0
  300. package/dist/daemon/handlers/pre-tool-use.js +585 -0
  301. package/dist/daemon/handlers/pre-tool-use.js.map +1 -0
  302. package/dist/daemon/handlers/stop.d.ts +35 -7
  303. package/dist/daemon/handlers/stop.d.ts.map +1 -1
  304. package/dist/daemon/handlers/stop.js +157 -8
  305. package/dist/daemon/handlers/stop.js.map +1 -1
  306. package/dist/daemon/handlers/user-prompt.d.ts +36 -14
  307. package/dist/daemon/handlers/user-prompt.d.ts.map +1 -1
  308. package/dist/daemon/handlers/user-prompt.js +135 -48
  309. package/dist/daemon/handlers/user-prompt.js.map +1 -1
  310. package/dist/daemon/hook-sync.d.ts.map +1 -1
  311. package/dist/daemon/hook-sync.js +2 -1
  312. package/dist/daemon/hook-sync.js.map +1 -1
  313. package/dist/daemon/index.d.ts.map +1 -1
  314. package/dist/daemon/index.js +471 -43
  315. package/dist/daemon/index.js.map +1 -1
  316. package/dist/daemon/lifecycle.d.ts +48 -1
  317. package/dist/daemon/lifecycle.d.ts.map +1 -1
  318. package/dist/daemon/lifecycle.js +98 -2
  319. package/dist/daemon/lifecycle.js.map +1 -1
  320. package/dist/daemon/router.d.ts +4 -1
  321. package/dist/daemon/router.d.ts.map +1 -1
  322. package/dist/daemon/router.js +4 -2
  323. package/dist/daemon/router.js.map +1 -1
  324. package/dist/daemon/rules/defaults.d.ts +20 -0
  325. package/dist/daemon/rules/defaults.d.ts.map +1 -0
  326. package/dist/daemon/rules/defaults.js +692 -0
  327. package/dist/daemon/rules/defaults.js.map +1 -0
  328. package/dist/daemon/rules/registry.d.ts +47 -0
  329. package/dist/daemon/rules/registry.d.ts.map +1 -0
  330. package/dist/daemon/rules/registry.js +84 -0
  331. package/dist/daemon/rules/registry.js.map +1 -0
  332. package/dist/daemon/rules/types.d.ts +170 -0
  333. package/dist/daemon/rules/types.d.ts.map +1 -0
  334. package/dist/daemon/rules/types.js +15 -0
  335. package/dist/daemon/rules/types.js.map +1 -0
  336. package/dist/daemon/rules/whitelist.d.ts +101 -0
  337. package/dist/daemon/rules/whitelist.d.ts.map +1 -0
  338. package/dist/daemon/rules/whitelist.js +210 -0
  339. package/dist/daemon/rules/whitelist.js.map +1 -0
  340. package/dist/daemon/rules/workflow-defaults.d.ts +52 -0
  341. package/dist/daemon/rules/workflow-defaults.d.ts.map +1 -0
  342. package/dist/daemon/rules/workflow-defaults.js +521 -0
  343. package/dist/daemon/rules/workflow-defaults.js.map +1 -0
  344. package/dist/daemon/server.d.ts +11 -1
  345. package/dist/daemon/server.d.ts.map +1 -1
  346. package/dist/daemon/server.js +7 -1
  347. package/dist/daemon/server.js.map +1 -1
  348. package/dist/daemon/services/context-injector.d.ts +34 -0
  349. package/dist/daemon/services/context-injector.d.ts.map +1 -0
  350. package/dist/daemon/services/context-injector.js +61 -0
  351. package/dist/daemon/services/context-injector.js.map +1 -0
  352. package/dist/daemon/services/decision-hint.d.ts +203 -0
  353. package/dist/daemon/services/decision-hint.d.ts.map +1 -0
  354. package/dist/daemon/services/decision-hint.js +487 -0
  355. package/dist/daemon/services/decision-hint.js.map +1 -0
  356. package/dist/daemon/services/event-ttl-sweep.d.ts +86 -0
  357. package/dist/daemon/services/event-ttl-sweep.d.ts.map +1 -0
  358. package/dist/daemon/services/event-ttl-sweep.js +123 -0
  359. package/dist/daemon/services/event-ttl-sweep.js.map +1 -0
  360. package/dist/daemon/services/experience-extractor.d.ts +67 -0
  361. package/dist/daemon/services/experience-extractor.d.ts.map +1 -0
  362. package/dist/daemon/services/experience-extractor.js +323 -0
  363. package/dist/daemon/services/experience-extractor.js.map +1 -0
  364. package/dist/daemon/services/feedback-aggregator.d.ts +179 -0
  365. package/dist/daemon/services/feedback-aggregator.d.ts.map +1 -0
  366. package/dist/daemon/services/feedback-aggregator.js +455 -0
  367. package/dist/daemon/services/feedback-aggregator.js.map +1 -0
  368. package/dist/daemon/services/heartbeat-writer.d.ts +55 -0
  369. package/dist/daemon/services/heartbeat-writer.d.ts.map +1 -0
  370. package/dist/daemon/services/heartbeat-writer.js +111 -0
  371. package/dist/daemon/services/heartbeat-writer.js.map +1 -0
  372. package/dist/daemon/services/idle-session-sweeper.d.ts +61 -0
  373. package/dist/daemon/services/idle-session-sweeper.d.ts.map +1 -0
  374. package/dist/daemon/services/idle-session-sweeper.js +94 -0
  375. package/dist/daemon/services/idle-session-sweeper.js.map +1 -0
  376. package/dist/daemon/services/idle-task-budget.d.ts +50 -0
  377. package/dist/daemon/services/idle-task-budget.d.ts.map +1 -0
  378. package/dist/daemon/services/idle-task-budget.js +72 -0
  379. package/dist/daemon/services/idle-task-budget.js.map +1 -0
  380. package/dist/daemon/services/intercept-revive.d.ts +60 -0
  381. package/dist/daemon/services/intercept-revive.d.ts.map +1 -0
  382. package/dist/daemon/services/intercept-revive.js +86 -0
  383. package/dist/daemon/services/intercept-revive.js.map +1 -0
  384. package/dist/daemon/services/intercept-rollback-guard.d.ts +105 -0
  385. package/dist/daemon/services/intercept-rollback-guard.d.ts.map +1 -0
  386. package/dist/daemon/services/intercept-rollback-guard.js +152 -0
  387. package/dist/daemon/services/intercept-rollback-guard.js.map +1 -0
  388. package/dist/daemon/services/intercept-timeout-sweeper.d.ts +58 -0
  389. package/dist/daemon/services/intercept-timeout-sweeper.d.ts.map +1 -0
  390. package/dist/daemon/services/intercept-timeout-sweeper.js +83 -0
  391. package/dist/daemon/services/intercept-timeout-sweeper.js.map +1 -0
  392. package/dist/daemon/services/kb-injector.d.ts +57 -0
  393. package/dist/daemon/services/kb-injector.d.ts.map +1 -0
  394. package/dist/daemon/services/kb-injector.js +140 -0
  395. package/dist/daemon/services/kb-injector.js.map +1 -0
  396. package/dist/daemon/services/outcome-classification-service.d.ts +49 -0
  397. package/dist/daemon/services/outcome-classification-service.d.ts.map +1 -0
  398. package/dist/daemon/services/outcome-classification-service.js +214 -0
  399. package/dist/daemon/services/outcome-classification-service.js.map +1 -0
  400. package/dist/daemon/services/outcome-classifier.d.ts +136 -0
  401. package/dist/daemon/services/outcome-classifier.d.ts.map +1 -0
  402. package/dist/daemon/services/outcome-classifier.js +178 -0
  403. package/dist/daemon/services/outcome-classifier.js.map +1 -0
  404. package/dist/daemon/services/outcome-nudge.d.ts +107 -0
  405. package/dist/daemon/services/outcome-nudge.d.ts.map +1 -0
  406. package/dist/daemon/services/outcome-nudge.js +242 -0
  407. package/dist/daemon/services/outcome-nudge.js.map +1 -0
  408. package/dist/daemon/services/spec-approval.d.ts +127 -0
  409. package/dist/daemon/services/spec-approval.d.ts.map +1 -0
  410. package/dist/daemon/services/spec-approval.js +216 -0
  411. package/dist/daemon/services/spec-approval.js.map +1 -0
  412. package/dist/daemon/services/spec-gate.d.ts +54 -0
  413. package/dist/daemon/services/spec-gate.d.ts.map +1 -0
  414. package/dist/daemon/services/spec-gate.js +113 -0
  415. package/dist/daemon/services/spec-gate.js.map +1 -0
  416. package/dist/daemon/services/task-boundary-classifier.d.ts +78 -0
  417. package/dist/daemon/services/task-boundary-classifier.d.ts.map +1 -0
  418. package/dist/daemon/services/task-boundary-classifier.js +202 -0
  419. package/dist/daemon/services/task-boundary-classifier.js.map +1 -0
  420. package/dist/daemon/services/task-segmenter.d.ts +219 -1
  421. package/dist/daemon/services/task-segmenter.d.ts.map +1 -1
  422. package/dist/daemon/services/task-segmenter.js +481 -17
  423. package/dist/daemon/services/task-segmenter.js.map +1 -1
  424. package/dist/daemon/services/violation-reporter.d.ts +130 -0
  425. package/dist/daemon/services/violation-reporter.d.ts.map +1 -0
  426. package/dist/daemon/services/violation-reporter.js +339 -0
  427. package/dist/daemon/services/violation-reporter.js.map +1 -0
  428. package/dist/daemon/skill-sync.d.ts +7 -2
  429. package/dist/daemon/skill-sync.d.ts.map +1 -1
  430. package/dist/daemon/skill-sync.js +114 -9
  431. package/dist/daemon/skill-sync.js.map +1 -1
  432. package/dist/daemon/templates/agents/claudemd-writer.md +101 -0
  433. package/dist/daemon/templates/agents/coder.md +105 -0
  434. package/dist/daemon/templates/agents/decision-maker.md +460 -0
  435. package/dist/daemon/templates/agents/doc-reviewer.md +115 -0
  436. package/dist/daemon/templates/agents/harness-debug-full.md +114 -0
  437. package/dist/daemon/templates/agents/harness-hotfix.md +99 -0
  438. package/dist/daemon/templates/agents/hybrid-feature-with-safety.md +104 -0
  439. package/dist/daemon/templates/agents/knowledge-builder.md +119 -0
  440. package/dist/daemon/templates/agents/patch-applier.md +144 -0
  441. package/dist/daemon/templates/agents/planner.md +165 -0
  442. package/dist/daemon/templates/agents/refactor-specialist.md +98 -0
  443. package/dist/daemon/templates/agents/skill-distiller.md +113 -0
  444. package/dist/daemon/templates/agents/task-boundary-classifier.md +64 -0
  445. package/dist/daemon/templates/agents/verify-agent.md +136 -0
  446. package/dist/daemon/utils/inject-block.d.ts +39 -0
  447. package/dist/daemon/utils/inject-block.d.ts.map +1 -0
  448. package/dist/daemon/utils/inject-block.js +25 -0
  449. package/dist/daemon/utils/inject-block.js.map +1 -0
  450. package/dist/hooks/hook-lib.sh +8 -0
  451. package/dist/hooks/notification.sh +19 -8
  452. package/dist/hooks/post-tool-use.sh +41 -23
  453. package/dist/hooks/pre-tool-use.sh +54 -23
  454. package/dist/hooks/session-start.sh +68 -0
  455. package/dist/hooks/stop.sh +24 -10
  456. package/dist/hooks/user-prompt-submit.sh +37 -21
  457. package/dist/knowledge/adapters/go-adapter.d.ts +65 -0
  458. package/dist/knowledge/adapters/go-adapter.d.ts.map +1 -0
  459. package/dist/knowledge/adapters/go-adapter.js +294 -0
  460. package/dist/knowledge/adapters/go-adapter.js.map +1 -0
  461. package/dist/knowledge/adapters/index.d.ts +41 -0
  462. package/dist/knowledge/adapters/index.d.ts.map +1 -0
  463. package/dist/knowledge/adapters/index.js +71 -0
  464. package/dist/knowledge/adapters/index.js.map +1 -0
  465. package/dist/knowledge/adapters/java-adapter.d.ts +66 -0
  466. package/dist/knowledge/adapters/java-adapter.d.ts.map +1 -0
  467. package/dist/knowledge/adapters/java-adapter.js +260 -0
  468. package/dist/knowledge/adapters/java-adapter.js.map +1 -0
  469. package/dist/knowledge/adapters/js-vue-adapter.d.ts +56 -0
  470. package/dist/knowledge/adapters/js-vue-adapter.d.ts.map +1 -0
  471. package/dist/knowledge/adapters/js-vue-adapter.js +203 -0
  472. package/dist/knowledge/adapters/js-vue-adapter.js.map +1 -0
  473. package/dist/knowledge/adapters/kotlin-adapter.d.ts +55 -0
  474. package/dist/knowledge/adapters/kotlin-adapter.d.ts.map +1 -0
  475. package/dist/knowledge/adapters/kotlin-adapter.js +209 -0
  476. package/dist/knowledge/adapters/kotlin-adapter.js.map +1 -0
  477. package/dist/knowledge/adapters/monorepo-adapter.d.ts +77 -0
  478. package/dist/knowledge/adapters/monorepo-adapter.d.ts.map +1 -0
  479. package/dist/knowledge/adapters/monorepo-adapter.js +170 -0
  480. package/dist/knowledge/adapters/monorepo-adapter.js.map +1 -0
  481. package/dist/knowledge/adapters/python-adapter.d.ts +89 -0
  482. package/dist/knowledge/adapters/python-adapter.d.ts.map +1 -0
  483. package/dist/knowledge/adapters/python-adapter.js +358 -0
  484. package/dist/knowledge/adapters/python-adapter.js.map +1 -0
  485. package/dist/knowledge/adapters/rust-adapter.d.ts +73 -0
  486. package/dist/knowledge/adapters/rust-adapter.d.ts.map +1 -0
  487. package/dist/knowledge/adapters/rust-adapter.js +329 -0
  488. package/dist/knowledge/adapters/rust-adapter.js.map +1 -0
  489. package/dist/knowledge/adapters/types.d.ts +99 -0
  490. package/dist/knowledge/adapters/types.d.ts.map +1 -0
  491. package/dist/knowledge/adapters/types.js +17 -0
  492. package/dist/knowledge/adapters/types.js.map +1 -0
  493. package/dist/knowledge/adapters/typescript-adapter.d.ts +57 -0
  494. package/dist/knowledge/adapters/typescript-adapter.d.ts.map +1 -0
  495. package/dist/knowledge/adapters/typescript-adapter.js +171 -0
  496. package/dist/knowledge/adapters/typescript-adapter.js.map +1 -0
  497. package/dist/knowledge/audit-applier.d.ts +70 -0
  498. package/dist/knowledge/audit-applier.d.ts.map +1 -0
  499. package/dist/knowledge/audit-applier.js +251 -0
  500. package/dist/knowledge/audit-applier.js.map +1 -0
  501. package/dist/knowledge/builder.d.ts +261 -0
  502. package/dist/knowledge/builder.d.ts.map +1 -0
  503. package/dist/knowledge/builder.js +937 -0
  504. package/dist/knowledge/builder.js.map +1 -0
  505. package/dist/knowledge/cli-provider.d.ts +151 -0
  506. package/dist/knowledge/cli-provider.d.ts.map +1 -0
  507. package/dist/knowledge/cli-provider.js +313 -0
  508. package/dist/knowledge/cli-provider.js.map +1 -0
  509. package/dist/knowledge/constants.d.ts +73 -0
  510. package/dist/knowledge/constants.d.ts.map +1 -0
  511. package/dist/knowledge/constants.js +93 -0
  512. package/dist/knowledge/constants.js.map +1 -0
  513. package/dist/knowledge/cross-module.d.ts +139 -0
  514. package/dist/knowledge/cross-module.d.ts.map +1 -0
  515. package/dist/knowledge/cross-module.js +370 -0
  516. package/dist/knowledge/cross-module.js.map +1 -0
  517. package/dist/knowledge/git-hooks.d.ts +67 -0
  518. package/dist/knowledge/git-hooks.d.ts.map +1 -0
  519. package/dist/knowledge/git-hooks.js +258 -0
  520. package/dist/knowledge/git-hooks.js.map +1 -0
  521. package/dist/knowledge/module-hash.d.ts +88 -0
  522. package/dist/knowledge/module-hash.d.ts.map +1 -0
  523. package/dist/knowledge/module-hash.js +162 -0
  524. package/dist/knowledge/module-hash.js.map +1 -0
  525. package/dist/knowledge/project-detector.d.ts +101 -0
  526. package/dist/knowledge/project-detector.d.ts.map +1 -0
  527. package/dist/knowledge/project-detector.js +223 -0
  528. package/dist/knowledge/project-detector.js.map +1 -0
  529. package/dist/knowledge/prompt.d.ts +228 -0
  530. package/dist/knowledge/prompt.d.ts.map +1 -0
  531. package/dist/knowledge/prompt.js +404 -0
  532. package/dist/knowledge/prompt.js.map +1 -0
  533. package/dist/knowledge/query.d.ts +105 -0
  534. package/dist/knowledge/query.d.ts.map +1 -0
  535. package/dist/knowledge/query.js +341 -0
  536. package/dist/knowledge/query.js.map +1 -0
  537. package/dist/knowledge/repo-map.d.ts +91 -0
  538. package/dist/knowledge/repo-map.d.ts.map +1 -0
  539. package/dist/knowledge/repo-map.js +408 -0
  540. package/dist/knowledge/repo-map.js.map +1 -0
  541. package/dist/knowledge/tools/index.d.ts +14 -0
  542. package/dist/knowledge/tools/index.d.ts.map +1 -0
  543. package/dist/knowledge/tools/index.js +11 -0
  544. package/dist/knowledge/tools/index.js.map +1 -0
  545. package/dist/knowledge/tools/knowledge-get-page.d.ts +46 -0
  546. package/dist/knowledge/tools/knowledge-get-page.d.ts.map +1 -0
  547. package/dist/knowledge/tools/knowledge-get-page.js +101 -0
  548. package/dist/knowledge/tools/knowledge-get-page.js.map +1 -0
  549. package/dist/knowledge/tools/knowledge-query.d.ts +77 -0
  550. package/dist/knowledge/tools/knowledge-query.d.ts.map +1 -0
  551. package/dist/knowledge/tools/knowledge-query.js +104 -0
  552. package/dist/knowledge/tools/knowledge-query.js.map +1 -0
  553. package/dist/knowledge/tools/repo-map-lookup.d.ts +45 -0
  554. package/dist/knowledge/tools/repo-map-lookup.d.ts.map +1 -0
  555. package/dist/knowledge/tools/repo-map-lookup.js +82 -0
  556. package/dist/knowledge/tools/repo-map-lookup.js.map +1 -0
  557. package/dist/knowledge/types.d.ts +269 -0
  558. package/dist/knowledge/types.d.ts.map +1 -0
  559. package/dist/knowledge/types.js +10 -0
  560. package/dist/knowledge/types.js.map +1 -0
  561. package/dist/knowledge/validator.d.ts +90 -0
  562. package/dist/knowledge/validator.d.ts.map +1 -0
  563. package/dist/knowledge/validator.js +288 -0
  564. package/dist/knowledge/validator.js.map +1 -0
  565. package/dist/mcp/server.d.ts.map +1 -1
  566. package/dist/mcp/server.js +222 -1
  567. package/dist/mcp/server.js.map +1 -1
  568. package/dist/skills/builtin-skills.d.ts +35 -0
  569. package/dist/skills/builtin-skills.d.ts.map +1 -0
  570. package/dist/skills/builtin-skills.js +68 -0
  571. package/dist/skills/builtin-skills.js.map +1 -0
  572. package/dist/skills/distill/attribution.d.ts +59 -0
  573. package/dist/skills/distill/attribution.d.ts.map +1 -0
  574. package/dist/skills/distill/attribution.js +101 -0
  575. package/dist/skills/distill/attribution.js.map +1 -0
  576. package/dist/skills/distill/claude-cli-resolver.d.ts +26 -0
  577. package/dist/skills/distill/claude-cli-resolver.d.ts.map +1 -0
  578. package/dist/skills/distill/claude-cli-resolver.js +115 -0
  579. package/dist/skills/distill/claude-cli-resolver.js.map +1 -0
  580. package/dist/skills/distill/distiller.d.ts +161 -0
  581. package/dist/skills/distill/distiller.d.ts.map +1 -0
  582. package/dist/skills/distill/distiller.js +461 -0
  583. package/dist/skills/distill/distiller.js.map +1 -0
  584. package/dist/skills/distill/index.d.ts +223 -0
  585. package/dist/skills/distill/index.d.ts.map +1 -0
  586. package/dist/skills/distill/index.js +466 -0
  587. package/dist/skills/distill/index.js.map +1 -0
  588. package/dist/skills/distill/project-anchor-guard.d.ts +116 -0
  589. package/dist/skills/distill/project-anchor-guard.d.ts.map +1 -0
  590. package/dist/skills/distill/project-anchor-guard.js +334 -0
  591. package/dist/skills/distill/project-anchor-guard.js.map +1 -0
  592. package/dist/skills/distill/topic-deduper.d.ts +77 -0
  593. package/dist/skills/distill/topic-deduper.d.ts.map +1 -0
  594. package/dist/skills/distill/topic-deduper.js +119 -0
  595. package/dist/skills/distill/topic-deduper.js.map +1 -0
  596. package/dist/skills/distill/upstream-fetcher.d.ts +71 -0
  597. package/dist/skills/distill/upstream-fetcher.d.ts.map +1 -0
  598. package/dist/skills/distill/upstream-fetcher.js +202 -0
  599. package/dist/skills/distill/upstream-fetcher.js.map +1 -0
  600. package/dist/skills/distilled/distilled-api-design.md +491 -0
  601. package/dist/skills/distilled/distilled-architecture-decision.md +173 -0
  602. package/dist/skills/distilled/distilled-creator.md +178 -0
  603. package/dist/skills/distilled/distilled-db-schema-design.md +245 -0
  604. package/dist/skills/distilled/distilled-defi-amm-security.md +293 -0
  605. package/dist/skills/distilled/distilled-executing-plans.md +113 -0
  606. package/dist/skills/distilled/distilled-harness-engineering.md +242 -0
  607. package/dist/skills/distilled/distilled-karpathy-guidelines.md +104 -0
  608. package/dist/skills/distilled/distilled-performance-optimization.md +175 -0
  609. package/dist/skills/distilled/distilled-spec-driven-design.md +193 -0
  610. package/dist/skills/distilled/distilled-systematic-debugging.md +306 -0
  611. package/dist/skills/distilled/distilled-verification-before-completion.md +203 -0
  612. package/dist/skills/keyword-score.d.ts +29 -0
  613. package/dist/skills/keyword-score.d.ts.map +1 -0
  614. package/dist/skills/keyword-score.js +54 -0
  615. package/dist/skills/keyword-score.js.map +1 -0
  616. package/dist/skills/registry.d.ts +64 -20
  617. package/dist/skills/registry.d.ts.map +1 -1
  618. package/dist/skills/registry.js +102 -105
  619. package/dist/skills/registry.js.map +1 -1
  620. package/dist/skills/tools/pipeline-suggest.js +14 -14
  621. package/dist/skills/tools/skill-invoke.d.ts +1 -1
  622. package/dist/skills/tools/skill-invoke.js +1 -1
  623. package/dist/web/routes/agent-content.d.ts +30 -0
  624. package/dist/web/routes/agent-content.d.ts.map +1 -0
  625. package/dist/web/routes/agent-content.js +139 -0
  626. package/dist/web/routes/agent-content.js.map +1 -0
  627. package/dist/web/routes/decisions.d.ts +15 -0
  628. package/dist/web/routes/decisions.d.ts.map +1 -0
  629. package/dist/web/routes/decisions.js +181 -0
  630. package/dist/web/routes/decisions.js.map +1 -0
  631. package/dist/web/routes/diagnostics.d.ts +61 -0
  632. package/dist/web/routes/diagnostics.d.ts.map +1 -0
  633. package/dist/web/routes/diagnostics.js +203 -0
  634. package/dist/web/routes/diagnostics.js.map +1 -0
  635. package/dist/web/routes/events.d.ts.map +1 -1
  636. package/dist/web/routes/events.js +24 -0
  637. package/dist/web/routes/events.js.map +1 -1
  638. package/dist/web/routes/health.d.ts +33 -0
  639. package/dist/web/routes/health.d.ts.map +1 -0
  640. package/dist/web/routes/health.js +37 -0
  641. package/dist/web/routes/health.js.map +1 -0
  642. package/dist/web/routes/insights.d.ts +0 -5
  643. package/dist/web/routes/insights.d.ts.map +1 -1
  644. package/dist/web/routes/insights.js +783 -2
  645. package/dist/web/routes/insights.js.map +1 -1
  646. package/dist/web/routes/knowledge.d.ts +16 -0
  647. package/dist/web/routes/knowledge.d.ts.map +1 -0
  648. package/dist/web/routes/knowledge.js +661 -0
  649. package/dist/web/routes/knowledge.js.map +1 -0
  650. package/dist/web/routes/patch.d.ts +60 -1
  651. package/dist/web/routes/patch.d.ts.map +1 -1
  652. package/dist/web/routes/patch.js +170 -64
  653. package/dist/web/routes/patch.js.map +1 -1
  654. package/dist/web/routes/pipeline.d.ts +37 -0
  655. package/dist/web/routes/pipeline.d.ts.map +1 -0
  656. package/dist/web/routes/pipeline.js +149 -0
  657. package/dist/web/routes/pipeline.js.map +1 -0
  658. package/dist/web/routes/rules.d.ts.map +1 -1
  659. package/dist/web/routes/rules.js +6 -1
  660. package/dist/web/routes/rules.js.map +1 -1
  661. package/dist/web/routes/sessions.d.ts.map +1 -1
  662. package/dist/web/routes/sessions.js +9 -1
  663. package/dist/web/routes/sessions.js.map +1 -1
  664. package/dist/web/routes/skill-content.d.ts +30 -0
  665. package/dist/web/routes/skill-content.d.ts.map +1 -0
  666. package/dist/web/routes/skill-content.js +117 -0
  667. package/dist/web/routes/skill-content.js.map +1 -0
  668. package/dist/web/routes/skills-distill.d.ts +29 -0
  669. package/dist/web/routes/skills-distill.d.ts.map +1 -0
  670. package/dist/web/routes/skills-distill.js +552 -0
  671. package/dist/web/routes/skills-distill.js.map +1 -0
  672. package/dist/web/routes/skills.js +7 -7
  673. package/dist/web/routes/skills.js.map +1 -1
  674. package/dist/web/routes/task-timeline.d.ts +102 -0
  675. package/dist/web/routes/task-timeline.d.ts.map +1 -0
  676. package/dist/web/routes/task-timeline.js +274 -0
  677. package/dist/web/routes/task-timeline.js.map +1 -0
  678. package/dist/web/routes/tasks.d.ts.map +1 -1
  679. package/dist/web/routes/tasks.js +355 -8
  680. package/dist/web/routes/tasks.js.map +1 -1
  681. package/dist/web/routes/trace.d.ts.map +1 -1
  682. package/dist/web/routes/trace.js +3 -2
  683. package/dist/web/routes/trace.js.map +1 -1
  684. package/dist/web/routes/types.d.ts +0 -4
  685. package/dist/web/routes/types.d.ts.map +1 -1
  686. package/dist/web/routes/types.js +1 -1
  687. package/dist/web/routes/types.js.map +1 -1
  688. package/dist/web/routes/violations.d.ts +14 -0
  689. package/dist/web/routes/violations.d.ts.map +1 -0
  690. package/dist/web/routes/violations.js +111 -0
  691. package/dist/web/routes/violations.js.map +1 -0
  692. package/dist/web/server.d.ts.map +1 -1
  693. package/dist/web/server.js +79 -19
  694. package/dist/web/server.js.map +1 -1
  695. package/dist/web/services/build-manager.d.ts +72 -0
  696. package/dist/web/services/build-manager.d.ts.map +1 -0
  697. package/dist/web/services/build-manager.js +189 -0
  698. package/dist/web/services/build-manager.js.map +1 -0
  699. package/dist/web/services/distill-manager.d.ts +125 -0
  700. package/dist/web/services/distill-manager.d.ts.map +1 -0
  701. package/dist/web/services/distill-manager.js +308 -0
  702. package/dist/web/services/distill-manager.js.map +1 -0
  703. package/dist/web/static/assets/AgentContentPage-DkeRNxok.js +2 -0
  704. package/dist/web/static/assets/AgentContentPage-DkeRNxok.js.map +1 -0
  705. package/dist/web/static/assets/AgentDelegationTable-ByBa0x1l.js +2 -0
  706. package/dist/web/static/assets/AgentDelegationTable-ByBa0x1l.js.map +1 -0
  707. package/dist/web/static/assets/ContextInsightsPage-oUk7_I8u.js +3 -0
  708. package/dist/web/static/assets/ContextInsightsPage-oUk7_I8u.js.map +1 -0
  709. package/dist/web/static/assets/DaemonHealthPage-DG2fyOP7.js +2 -0
  710. package/dist/web/static/assets/DaemonHealthPage-DG2fyOP7.js.map +1 -0
  711. package/dist/web/static/assets/DecisionsPage-CMAPEnKb.js +2 -0
  712. package/dist/web/static/assets/DecisionsPage-CMAPEnKb.js.map +1 -0
  713. package/dist/web/static/assets/DiagnosticsPage-DQd-Zm4r.js +2 -0
  714. package/dist/web/static/assets/DiagnosticsPage-DQd-Zm4r.js.map +1 -0
  715. package/dist/web/static/assets/DriftTab-DqpepOhI.js +2 -0
  716. package/dist/web/static/assets/DriftTab-DqpepOhI.js.map +1 -0
  717. package/dist/web/static/assets/HealthHomePage-CN6zNIie.js +3 -0
  718. package/dist/web/static/assets/HealthHomePage-CN6zNIie.js.map +1 -0
  719. package/dist/web/static/assets/KbHitRateTable-ByEIWujF.js +2 -0
  720. package/dist/web/static/assets/KbHitRateTable-ByEIWujF.js.map +1 -0
  721. package/dist/web/static/assets/MarkdownRenderer-DZmTl-8J.js +3 -0
  722. package/dist/web/static/assets/MarkdownRenderer-DZmTl-8J.js.map +1 -0
  723. package/dist/web/static/assets/NotFound-BQPh0vaF.js +2 -0
  724. package/dist/web/static/assets/NotFound-BQPh0vaF.js.map +1 -0
  725. package/dist/web/static/assets/ProjectSwitcher-D3lZMFd3.js +2 -0
  726. package/dist/web/static/assets/ProjectSwitcher-D3lZMFd3.js.map +1 -0
  727. package/dist/web/static/assets/SettingsPage-oLJBNzQj.js +2 -0
  728. package/dist/web/static/assets/SettingsPage-oLJBNzQj.js.map +1 -0
  729. package/dist/web/static/assets/SkillContentPage-DK5rgfgw.js +2 -0
  730. package/dist/web/static/assets/SkillContentPage-DK5rgfgw.js.map +1 -0
  731. package/dist/web/static/assets/SkillStatsTable-DYMzjEUV.js +2 -0
  732. package/dist/web/static/assets/SkillStatsTable-DYMzjEUV.js.map +1 -0
  733. package/dist/web/static/assets/SkillsDistillTab-C7qaG8q3.js +2 -0
  734. package/dist/web/static/assets/SkillsDistillTab-C7qaG8q3.js.map +1 -0
  735. package/dist/web/static/assets/TasksHubPage-03wsRRsJ.js +6 -0
  736. package/dist/web/static/assets/TasksHubPage-03wsRRsJ.js.map +1 -0
  737. package/dist/web/static/assets/ViolationsPage-DSiLr-9O.js +3 -0
  738. package/dist/web/static/assets/ViolationsPage-DSiLr-9O.js.map +1 -0
  739. package/dist/web/static/assets/arco-Bhi3a6Qp.js +14 -0
  740. package/dist/web/static/assets/arco-Bhi3a6Qp.js.map +1 -0
  741. package/dist/web/static/assets/arco-DFQA6dO_.css +1 -0
  742. package/dist/web/static/assets/charts-BuHQWDbQ.js +37 -0
  743. package/dist/web/static/assets/charts-BuHQWDbQ.js.map +1 -0
  744. package/dist/web/static/assets/date-fns-sbWH3_uq.js +2 -0
  745. package/dist/web/static/assets/date-fns-sbWH3_uq.js.map +1 -0
  746. package/dist/web/static/assets/index-7bl3kbcx.css +1 -0
  747. package/dist/web/static/assets/index-BIYnq1Dx.js +4 -0
  748. package/dist/web/static/assets/index-BIYnq1Dx.js.map +1 -0
  749. package/dist/web/static/assets/lucide-CnlPQoG8.js +72 -0
  750. package/dist/web/static/assets/lucide-CnlPQoG8.js.map +1 -0
  751. package/dist/web/static/assets/outcome-DUn1NjlC.js +2 -0
  752. package/dist/web/static/assets/outcome-DUn1NjlC.js.map +1 -0
  753. package/dist/web/static/assets/query-S6X1S7K9.js +2 -0
  754. package/dist/web/static/assets/{query-C99w429o.js.map → query-S6X1S7K9.js.map} +1 -1
  755. package/dist/web/static/assets/{react-router-r79dBVy4.js → react-router-JVUrkhdd.js} +3 -3
  756. package/dist/web/static/assets/{react-router-r79dBVy4.js.map → react-router-JVUrkhdd.js.map} +1 -1
  757. package/dist/web/static/assets/react-vendor-tkvCrao7.js +57 -0
  758. package/dist/web/static/assets/react-vendor-tkvCrao7.js.map +1 -0
  759. package/dist/web/static/assets/syntax-highlighter-BkZfCDsz.js +6 -0
  760. package/dist/web/static/assets/syntax-highlighter-BkZfCDsz.js.map +1 -0
  761. package/dist/web/static/assets/useTabsParam-k8qte_0C.js +2 -0
  762. package/dist/web/static/assets/useTabsParam-k8qte_0C.js.map +1 -0
  763. package/dist/web/static/assets/vendor-DWgdB1eY.js +65 -0
  764. package/dist/web/static/assets/vendor-DWgdB1eY.js.map +1 -0
  765. package/dist/web/static/index.html +12 -8
  766. package/package.json +14 -3
  767. package/dist/core/ai/provider.d.ts +0 -63
  768. package/dist/core/ai/provider.d.ts.map +0 -1
  769. package/dist/core/ai/provider.js +0 -241
  770. package/dist/core/ai/provider.js.map +0 -1
  771. package/dist/core/ai/types.d.ts +0 -43
  772. package/dist/core/ai/types.d.ts.map +0 -1
  773. package/dist/core/ai/types.js +0 -5
  774. package/dist/core/ai/types.js.map +0 -1
  775. package/dist/core/storage/token-usage.d.ts +0 -36
  776. package/dist/core/storage/token-usage.d.ts.map +0 -1
  777. package/dist/core/storage/token-usage.js +0 -59
  778. package/dist/core/storage/token-usage.js.map +0 -1
  779. package/dist/core/utils/token-tracker.d.ts +0 -39
  780. package/dist/core/utils/token-tracker.d.ts.map +0 -1
  781. package/dist/core/utils/token-tracker.js +0 -69
  782. package/dist/core/utils/token-tracker.js.map +0 -1
  783. package/dist/skills/index.d.ts +0 -3
  784. package/dist/skills/index.d.ts.map +0 -1
  785. package/dist/skills/index.js +0 -3
  786. package/dist/skills/index.js.map +0 -1
  787. package/dist/skills/matcher.d.ts +0 -26
  788. package/dist/skills/matcher.d.ts.map +0 -1
  789. package/dist/skills/matcher.js +0 -113
  790. package/dist/skills/matcher.js.map +0 -1
  791. package/dist/skills/official/code-simplifier.md +0 -52
  792. package/dist/skills/official/find-skills.md +0 -142
  793. package/dist/skills/official/official-api-design.md +0 -30
  794. package/dist/skills/official/official-architecture-decision.md +0 -41
  795. package/dist/skills/official/official-bmad.md +0 -118
  796. package/dist/skills/official/official-db-schema-design.md +0 -34
  797. package/dist/skills/official/official-debug.md +0 -25
  798. package/dist/skills/official/official-doc-driven.md +0 -31
  799. package/dist/skills/official/official-harness-engineering.md +0 -108
  800. package/dist/skills/official/official-openspec.md +0 -89
  801. package/dist/skills/official/official-performance-optimization.md +0 -30
  802. package/dist/skills/official/official-pr-review.md +0 -35
  803. package/dist/skills/official/official-release-checklist.md +0 -30
  804. package/dist/skills/official/official-security-hardening.md +0 -32
  805. package/dist/skills/official/official-spec-driven-design.md +0 -31
  806. package/dist/skills/official/planning-with-files.md +0 -241
  807. package/dist/skills/official/ui-ux-pro-max.md +0 -105
  808. package/dist/skills/official/webapp-testing.md +0 -96
  809. package/dist/skills/official-skills.d.ts +0 -26
  810. package/dist/skills/official-skills.d.ts.map +0 -1
  811. package/dist/skills/official-skills.js +0 -74
  812. package/dist/skills/official-skills.js.map +0 -1
  813. package/dist/skills/semantic-matcher.d.ts +0 -60
  814. package/dist/skills/semantic-matcher.d.ts.map +0 -1
  815. package/dist/skills/semantic-matcher.js +0 -192
  816. package/dist/skills/semantic-matcher.js.map +0 -1
  817. package/dist/skills/upgrade-engine.d.ts +0 -93
  818. package/dist/skills/upgrade-engine.d.ts.map +0 -1
  819. package/dist/skills/upgrade-engine.js +0 -447
  820. package/dist/skills/upgrade-engine.js.map +0 -1
  821. package/dist/skills/upgrade-prompt.d.ts +0 -20
  822. package/dist/skills/upgrade-prompt.d.ts.map +0 -1
  823. package/dist/skills/upgrade-prompt.js +0 -75
  824. package/dist/skills/upgrade-prompt.js.map +0 -1
  825. package/dist/web/routes/ai.d.ts +0 -10
  826. package/dist/web/routes/ai.d.ts.map +0 -1
  827. package/dist/web/routes/ai.js +0 -186
  828. package/dist/web/routes/ai.js.map +0 -1
  829. package/dist/web/routes/token-usage.d.ts +0 -7
  830. package/dist/web/routes/token-usage.d.ts.map +0 -1
  831. package/dist/web/routes/token-usage.js +0 -18
  832. package/dist/web/routes/token-usage.js.map +0 -1
  833. package/dist/web/ssrf-guard.d.ts +0 -35
  834. package/dist/web/ssrf-guard.d.ts.map +0 -1
  835. package/dist/web/ssrf-guard.js +0 -93
  836. package/dist/web/ssrf-guard.js.map +0 -1
  837. package/dist/web/static/assets/AIConfig-CdDWzJyO.js +0 -2
  838. package/dist/web/static/assets/AIConfig-CdDWzJyO.js.map +0 -1
  839. package/dist/web/static/assets/Dashboard-CoEmmIDt.js +0 -2
  840. package/dist/web/static/assets/Dashboard-CoEmmIDt.js.map +0 -1
  841. package/dist/web/static/assets/Drawer-DdRTzlLB.js +0 -2
  842. package/dist/web/static/assets/Drawer-DdRTzlLB.js.map +0 -1
  843. package/dist/web/static/assets/Events-DrIq1SUS.js +0 -2
  844. package/dist/web/static/assets/Events-DrIq1SUS.js.map +0 -1
  845. package/dist/web/static/assets/Reports-DFBM3MDK.js +0 -2
  846. package/dist/web/static/assets/Reports-DFBM3MDK.js.map +0 -1
  847. package/dist/web/static/assets/SearchInput-qCj_jAcf.js +0 -2
  848. package/dist/web/static/assets/SearchInput-qCj_jAcf.js.map +0 -1
  849. package/dist/web/static/assets/SessionDetail-CCzwdoT7.js +0 -2
  850. package/dist/web/static/assets/SessionDetail-CCzwdoT7.js.map +0 -1
  851. package/dist/web/static/assets/Sessions-FfLYkAw9.js +0 -2
  852. package/dist/web/static/assets/Sessions-FfLYkAw9.js.map +0 -1
  853. package/dist/web/static/assets/Skills-C8Gvs3Qa.js +0 -2
  854. package/dist/web/static/assets/Skills-C8Gvs3Qa.js.map +0 -1
  855. package/dist/web/static/assets/TaskDetail-BS8pYhaR.js +0 -2
  856. package/dist/web/static/assets/TaskDetail-BS8pYhaR.js.map +0 -1
  857. package/dist/web/static/assets/Tasks-CyuhizG8.js +0 -2
  858. package/dist/web/static/assets/Tasks-CyuhizG8.js.map +0 -1
  859. package/dist/web/static/assets/charts-CLrM0_uM.js +0 -37
  860. package/dist/web/static/assets/charts-CLrM0_uM.js.map +0 -1
  861. package/dist/web/static/assets/date-fns-CZ_bHujz.js +0 -2
  862. package/dist/web/static/assets/date-fns-CZ_bHujz.js.map +0 -1
  863. package/dist/web/static/assets/export-L_VBD2p1.js +0 -4
  864. package/dist/web/static/assets/export-L_VBD2p1.js.map +0 -1
  865. package/dist/web/static/assets/index-CBX47X8l.js +0 -3
  866. package/dist/web/static/assets/index-CBX47X8l.js.map +0 -1
  867. package/dist/web/static/assets/index-DjIoMdoR.css +0 -1
  868. package/dist/web/static/assets/lucide-Bs_edTLa.js +0 -232
  869. package/dist/web/static/assets/lucide-Bs_edTLa.js.map +0 -1
  870. package/dist/web/static/assets/query-C99w429o.js +0 -2
  871. package/dist/web/static/assets/react-vendor-CSp-GLFF.js +0 -49
  872. package/dist/web/static/assets/react-vendor-CSp-GLFF.js.map +0 -1
  873. package/dist/web/static/assets/syntax-highlighter-44FakypI.js +0 -9
  874. package/dist/web/static/assets/syntax-highlighter-44FakypI.js.map +0 -1
  875. package/dist/web/static/assets/task-title-BhOcemuR.js +0 -2
  876. package/dist/web/static/assets/task-title-BhOcemuR.js.map +0 -1
  877. package/dist/web/static/assets/time-Bxuk0M-C.js +0 -2
  878. package/dist/web/static/assets/time-Bxuk0M-C.js.map +0 -1
  879. package/dist/web/static/assets/vendor-CMMjVdZs.js +0 -64
  880. package/dist/web/static/assets/vendor-CMMjVdZs.js.map +0 -1
@@ -0,0 +1,765 @@
1
+ /**
2
+ * cf doctor — 9-check diagnostic engine (spec 1a41b43a).
3
+ *
4
+ * Pure module: CLI (`cf doctor`) and Web (`GET /api/diagnostics`) both consume
5
+ * `runChecks()` here, avoiding child_process spawns and circular deps between
6
+ * `src/cli/` and `src/web/`.
7
+ *
8
+ * Each check returns a `CheckResult` describing pass/warn/fail status, a
9
+ * short human message, optional details, and a fix hint. The set of checks
10
+ * automatically fixable by `cf fix` is enumerated in `FIXABLE_COMMANDS`.
11
+ *
12
+ * Marker schema (spec 1, frozen): `readSystemMarker()` / `readProjectMarker()`
13
+ * from `./markers.js` — DO NOT modify.
14
+ *
15
+ * @see docs/design/2026-06-01/1030-cf-doctor-diagnostic-spec.md
16
+ */
17
+ import fs from 'node:fs';
18
+ import net from 'node:net';
19
+ import path from 'node:path';
20
+ import os from 'node:os';
21
+ import { FORGE_PATHS } from '../constants.js';
22
+ import { readProjectMarker } from './markers.js';
23
+ import { getDaemonSelfStatus } from './daemon-status.js';
24
+ import { check10_staleDecisions, check11_staleSpecs, check12_orphanEvents, } from './entropy-checks.js';
25
+ /**
26
+ * Whitelist of checks `cf fix` can auto-apply. Any check NOT in this map is
27
+ * considered manual-only (we do not synthesize new commands at runtime).
28
+ *
29
+ * Tests guarantee that every key here corresponds to a real check id, so the
30
+ * registry stays in sync.
31
+ */
32
+ export const FIXABLE_COMMANDS = {
33
+ 1: 'cf daemon ensure-running',
34
+ 3: 'cf daemon install',
35
+ 4: 'cf init',
36
+ 5: 'cf project init --skip-knowledge',
37
+ 6: 'cf knowledge init',
38
+ };
39
+ function defaultReadFile(p) {
40
+ try {
41
+ return fs.readFileSync(p, 'utf-8');
42
+ }
43
+ catch {
44
+ return null;
45
+ }
46
+ }
47
+ function defaultKill0(pid) {
48
+ try {
49
+ process.kill(pid, 0);
50
+ return true;
51
+ }
52
+ catch {
53
+ return false;
54
+ }
55
+ }
56
+ export async function check1_daemonProcess(deps) {
57
+ const readPid = deps?.readPid ?? defaultReadFile;
58
+ const kill0 = deps?.kill0 ?? defaultKill0;
59
+ const pidFile = deps?.pidFile ?? FORGE_PATHS.daemonPid();
60
+ // spec 8cbecdb4 / OQ #3: in self-mode (Web /api/diagnostics) the report
61
+ // runs inside the daemon process — pidfile probe is unreliable. Defer to
62
+ // the shared helper which uses process.pid + heartbeat freshness.
63
+ if (deps?.selfMode) {
64
+ const s = getDaemonSelfStatus();
65
+ if (s.status === 'stale') {
66
+ return {
67
+ id: 1,
68
+ name: 'daemon-process',
69
+ status: 'warn',
70
+ message: `Daemon PID ${s.pid} alive but heartbeat is stale`,
71
+ fix_hint: 'cf daemon ensure-running',
72
+ fixable_by: 'cf fix',
73
+ };
74
+ }
75
+ return {
76
+ id: 1,
77
+ name: 'daemon-process',
78
+ status: 'pass',
79
+ message: `Daemon running (PID ${s.pid})`,
80
+ };
81
+ }
82
+ const raw = readPid(pidFile);
83
+ if (raw == null) {
84
+ return {
85
+ id: 1,
86
+ name: 'daemon-process',
87
+ status: 'fail',
88
+ message: 'Daemon PID file missing — daemon is not running',
89
+ fix_hint: 'cf daemon ensure-running',
90
+ fixable_by: 'cf fix',
91
+ };
92
+ }
93
+ const pid = parseInt(raw.trim(), 10);
94
+ if (Number.isNaN(pid) || !kill0(pid)) {
95
+ return {
96
+ id: 1,
97
+ name: 'daemon-process',
98
+ status: 'fail',
99
+ message: `Daemon PID ${raw.trim()} is stale or process is dead`,
100
+ fix_hint: 'cf daemon ensure-running',
101
+ fixable_by: 'cf fix',
102
+ };
103
+ }
104
+ return {
105
+ id: 1,
106
+ name: 'daemon-process',
107
+ status: 'pass',
108
+ message: `Daemon running (PID ${pid})`,
109
+ };
110
+ }
111
+ function defaultTryConnect(socketPath, timeoutMs) {
112
+ return new Promise((resolve) => {
113
+ let settled = false;
114
+ const sock = net.createConnection(socketPath);
115
+ const timer = setTimeout(() => {
116
+ if (settled)
117
+ return;
118
+ settled = true;
119
+ sock.destroy();
120
+ resolve(false);
121
+ }, timeoutMs);
122
+ sock.once('connect', () => {
123
+ if (settled)
124
+ return;
125
+ settled = true;
126
+ clearTimeout(timer);
127
+ sock.end();
128
+ resolve(true);
129
+ });
130
+ sock.once('error', () => {
131
+ if (settled)
132
+ return;
133
+ settled = true;
134
+ clearTimeout(timer);
135
+ resolve(false);
136
+ });
137
+ });
138
+ }
139
+ export async function check2_daemonSocket(deps) {
140
+ const socketPath = deps?.socketPath ?? FORGE_PATHS.daemonSocket();
141
+ const tryConnect = deps?.tryConnect ?? defaultTryConnect;
142
+ if (!fs.existsSync(socketPath)) {
143
+ return {
144
+ id: 2,
145
+ name: 'daemon-socket',
146
+ status: 'fail',
147
+ message: 'Daemon socket file does not exist',
148
+ details: `Expected: ${socketPath}`,
149
+ fix_hint: 'Start the daemon: cf daemon ensure-running',
150
+ fixable_by: 'manual',
151
+ };
152
+ }
153
+ const connectable = await tryConnect(socketPath, 5_000);
154
+ if (!connectable) {
155
+ return {
156
+ id: 2,
157
+ name: 'daemon-socket',
158
+ status: 'warn',
159
+ message: 'Socket exists but connect timed out',
160
+ details: `Socket: ${socketPath}`,
161
+ fix_hint: 'Restart the daemon: cf daemon ensure-running',
162
+ fixable_by: 'manual',
163
+ };
164
+ }
165
+ return {
166
+ id: 2,
167
+ name: 'daemon-socket',
168
+ status: 'pass',
169
+ message: 'Socket connectable',
170
+ };
171
+ }
172
+ export async function check3_launchdAgent(deps) {
173
+ const platform = deps?.platform ?? process.platform;
174
+ if (platform !== 'darwin') {
175
+ return {
176
+ id: 3,
177
+ name: 'launchd-agent',
178
+ status: 'skip',
179
+ message: `LaunchAgent check skipped on ${platform} (macOS only)`,
180
+ };
181
+ }
182
+ let getter = deps?.launchdStatus;
183
+ if (!getter) {
184
+ // Lazy import to keep non-darwin platforms from loading darwin-only logic.
185
+ const mod = await import('../../daemon/launchd-installer.js');
186
+ getter = () => mod.status();
187
+ }
188
+ try {
189
+ const s = getter();
190
+ if (!s.installed) {
191
+ return {
192
+ id: 3,
193
+ name: 'launchd-agent',
194
+ status: 'fail',
195
+ message: 'LaunchAgent plist is not installed',
196
+ fix_hint: 'cf daemon install',
197
+ fixable_by: 'cf fix',
198
+ };
199
+ }
200
+ if (!s.loaded) {
201
+ return {
202
+ id: 3,
203
+ name: 'launchd-agent',
204
+ status: 'fail',
205
+ message: 'LaunchAgent plist exists but is not loaded',
206
+ fix_hint: 'cf daemon install',
207
+ fixable_by: 'cf fix',
208
+ };
209
+ }
210
+ if (s.state && s.state !== 'running' && s.state !== 'waiting') {
211
+ return {
212
+ id: 3,
213
+ name: 'launchd-agent',
214
+ status: 'warn',
215
+ message: `LaunchAgent loaded but state=${s.state}`,
216
+ fix_hint: 'cf daemon install',
217
+ fixable_by: 'cf fix',
218
+ };
219
+ }
220
+ return {
221
+ id: 3,
222
+ name: 'launchd-agent',
223
+ status: 'pass',
224
+ message: s.pid != null ? `LaunchAgent loaded (PID ${s.pid})` : 'LaunchAgent loaded',
225
+ };
226
+ }
227
+ catch (err) {
228
+ return {
229
+ id: 3,
230
+ name: 'launchd-agent',
231
+ status: 'warn',
232
+ message: 'LaunchAgent status unavailable',
233
+ details: err instanceof Error ? err.message : String(err),
234
+ };
235
+ }
236
+ }
237
+ // ─── Check 4: global hooks injected into ~/.claude/settings.json ──────────
238
+ const REQUIRED_HOOK_NAMES = [
239
+ 'pre-tool-use.sh',
240
+ 'post-tool-use.sh',
241
+ 'user-prompt-submit.sh',
242
+ 'notification.sh',
243
+ 'stop.sh',
244
+ ];
245
+ export async function check4_hooksInjected(deps) {
246
+ const settingsPath = deps?.settingsPath ?? path.join(os.homedir(), '.claude', 'settings.json');
247
+ const readFile = deps?.readFile ?? defaultReadFile;
248
+ const raw = readFile(settingsPath);
249
+ if (raw == null) {
250
+ return {
251
+ id: 4,
252
+ name: 'hooks-injected',
253
+ status: 'fail',
254
+ message: '~/.claude/settings.json not found — hooks not injected',
255
+ fix_hint: 'cf init',
256
+ fixable_by: 'cf fix',
257
+ };
258
+ }
259
+ let parsed;
260
+ try {
261
+ parsed = JSON.parse(raw);
262
+ }
263
+ catch {
264
+ return {
265
+ id: 4,
266
+ name: 'hooks-injected',
267
+ status: 'fail',
268
+ message: '~/.claude/settings.json is invalid JSON',
269
+ fix_hint: 'cf init',
270
+ fixable_by: 'cf fix',
271
+ };
272
+ }
273
+ const hooksBlock = parsed.hooks;
274
+ if (!hooksBlock || typeof hooksBlock !== 'object') {
275
+ return {
276
+ id: 4,
277
+ name: 'hooks-injected',
278
+ status: 'fail',
279
+ message: 'No hooks block found in settings.json',
280
+ fix_hint: 'cf init',
281
+ fixable_by: 'cf fix',
282
+ };
283
+ }
284
+ // Count distinct forge hook scripts referenced.
285
+ const flatCommands = JSON.stringify(hooksBlock);
286
+ const present = REQUIRED_HOOK_NAMES.filter((name) => flatCommands.includes(name));
287
+ if (present.length === 0) {
288
+ return {
289
+ id: 4,
290
+ name: 'hooks-injected',
291
+ status: 'fail',
292
+ message: 'No forge hooks present in settings.json',
293
+ fix_hint: 'cf init',
294
+ fixable_by: 'cf fix',
295
+ };
296
+ }
297
+ if (present.length < REQUIRED_HOOK_NAMES.length) {
298
+ return {
299
+ id: 4,
300
+ name: 'hooks-injected',
301
+ status: 'warn',
302
+ message: `Only ${present.length}/${REQUIRED_HOOK_NAMES.length} forge hooks present`,
303
+ details: `Missing: ${REQUIRED_HOOK_NAMES.filter((n) => !present.includes(n)).join(', ')}`,
304
+ fix_hint: 'cf init',
305
+ fixable_by: 'cf fix',
306
+ };
307
+ }
308
+ return {
309
+ id: 4,
310
+ name: 'hooks-injected',
311
+ status: 'pass',
312
+ message: `All ${REQUIRED_HOOK_NAMES.length} forge hooks injected`,
313
+ };
314
+ }
315
+ // ─── Check 5: project CLAUDE.md exists + has forge marker ─────────────────
316
+ const FORGE_MARKERS = ['Claude Forge', 'claude-forge', 'forge-resume-body'];
317
+ export async function check5_projectClaudemd(opts) {
318
+ // spec e5b845c4: explicit null = "no project context" (Web fresh install) →
319
+ // SKIP instead of FAILing against the daemon's cwd. undefined keeps the CLI
320
+ // behaviour (defaults to process.cwd()).
321
+ if (opts && opts.cwd === null) {
322
+ return {
323
+ id: 5,
324
+ name: 'project-claudemd',
325
+ status: 'skip',
326
+ message: 'No project context — open Claude Code in a project to enable this check',
327
+ };
328
+ }
329
+ const cwd = opts?.cwd ?? process.cwd();
330
+ const claudemd = path.join(cwd, 'CLAUDE.md');
331
+ if (!fs.existsSync(claudemd)) {
332
+ return {
333
+ id: 5,
334
+ name: 'project-claudemd',
335
+ status: 'fail',
336
+ message: 'CLAUDE.md missing in this project',
337
+ fix_hint: 'cf project init --skip-knowledge',
338
+ fixable_by: 'cf fix',
339
+ };
340
+ }
341
+ let content = '';
342
+ try {
343
+ content = fs.readFileSync(claudemd, 'utf-8');
344
+ }
345
+ catch (err) {
346
+ return {
347
+ id: 5,
348
+ name: 'project-claudemd',
349
+ status: 'fail',
350
+ message: 'CLAUDE.md exists but is unreadable',
351
+ details: err instanceof Error ? err.message : String(err),
352
+ fix_hint: 'cf project init --skip-knowledge',
353
+ fixable_by: 'cf fix',
354
+ };
355
+ }
356
+ const hasMarker = FORGE_MARKERS.some((m) => content.includes(m));
357
+ if (!hasMarker) {
358
+ return {
359
+ id: 5,
360
+ name: 'project-claudemd',
361
+ status: 'warn',
362
+ message: 'CLAUDE.md exists but no forge marker found',
363
+ fix_hint: 'cf project init --skip-knowledge',
364
+ fixable_by: 'cf fix',
365
+ };
366
+ }
367
+ return {
368
+ id: 5,
369
+ name: 'project-claudemd',
370
+ status: 'pass',
371
+ message: 'CLAUDE.md present with forge marker',
372
+ };
373
+ }
374
+ // ─── Check 6: .forge-knowledge/ skeleton complete ─────────────────────────
375
+ export async function check6_projectKnowledge(opts) {
376
+ // spec e5b845c4: explicit null = "no project context" (Web fresh install) →
377
+ // SKIP. See check5_projectClaudemd for the same contract.
378
+ if (opts && opts.cwd === null) {
379
+ return {
380
+ id: 6,
381
+ name: 'project-knowledge',
382
+ status: 'skip',
383
+ message: 'No project context — open Claude Code in a project to enable this check',
384
+ };
385
+ }
386
+ const cwd = opts?.cwd ?? process.cwd();
387
+ const kbDir = path.join(cwd, '.forge-knowledge');
388
+ if (!fs.existsSync(kbDir)) {
389
+ return {
390
+ id: 6,
391
+ name: 'project-knowledge',
392
+ status: 'fail',
393
+ message: '.forge-knowledge/ directory missing',
394
+ fix_hint: 'cf knowledge init',
395
+ fixable_by: 'cf fix',
396
+ };
397
+ }
398
+ const meta = path.join(kbDir, '.meta.json');
399
+ const overview = path.join(kbDir, 'overview.md');
400
+ const missing = [];
401
+ if (!fs.existsSync(meta))
402
+ missing.push('.meta.json');
403
+ if (!fs.existsSync(overview))
404
+ missing.push('overview.md');
405
+ if (missing.length > 0) {
406
+ return {
407
+ id: 6,
408
+ name: 'project-knowledge',
409
+ status: 'warn',
410
+ message: '.forge-knowledge/ skeleton incomplete',
411
+ details: `Missing: ${missing.join(', ')}`,
412
+ fix_hint: 'cf knowledge init',
413
+ fixable_by: 'cf fix',
414
+ };
415
+ }
416
+ // Cross-check with project marker if present (spec 1 contract).
417
+ const marker = readProjectMarker(cwd);
418
+ if (marker && marker.steps.knowledge !== 'ok') {
419
+ return {
420
+ id: 6,
421
+ name: 'project-knowledge',
422
+ status: 'warn',
423
+ message: `Project marker reports knowledge step = ${marker.steps.knowledge}`,
424
+ fix_hint: 'cf knowledge init',
425
+ fixable_by: 'cf fix',
426
+ };
427
+ }
428
+ return {
429
+ id: 6,
430
+ name: 'project-knowledge',
431
+ status: 'pass',
432
+ message: '.forge-knowledge/ healthy',
433
+ };
434
+ }
435
+ export async function check7_dbIntegrity(deps) {
436
+ const dbPath = deps?.dbPath ?? FORGE_PATHS.database();
437
+ if (!fs.existsSync(dbPath)) {
438
+ return {
439
+ id: 7,
440
+ name: 'db-integrity',
441
+ status: 'fail',
442
+ message: 'SQLite database file does not exist',
443
+ details: `Expected: ${dbPath}`,
444
+ fix_hint: 'Start the daemon to initialize the DB: cf daemon ensure-running',
445
+ fixable_by: 'manual',
446
+ };
447
+ }
448
+ let DB;
449
+ try {
450
+ if (deps?.load) {
451
+ DB = await deps.load();
452
+ }
453
+ else {
454
+ const mod = await import('better-sqlite3');
455
+ DB = mod.default;
456
+ }
457
+ }
458
+ catch (err) {
459
+ return {
460
+ id: 7,
461
+ name: 'db-integrity',
462
+ status: 'fail',
463
+ message: 'Could not load better-sqlite3 driver',
464
+ details: err instanceof Error ? err.message : String(err),
465
+ fixable_by: 'manual',
466
+ };
467
+ }
468
+ try {
469
+ const db = new DB(dbPath, { readonly: true });
470
+ try {
471
+ const row = db.pragma('integrity_check', { simple: true });
472
+ const sizeMb = Math.round(fs.statSync(dbPath).size / (1024 * 1024));
473
+ if (row !== 'ok') {
474
+ return {
475
+ id: 7,
476
+ name: 'db-integrity',
477
+ status: 'fail',
478
+ message: `SQLite integrity_check returned: ${row}`,
479
+ fix_hint: 'Backup DB then run `cf init` to rebuild',
480
+ fixable_by: 'manual',
481
+ };
482
+ }
483
+ if (sizeMb > 500) {
484
+ return {
485
+ id: 7,
486
+ name: 'db-integrity',
487
+ status: 'warn',
488
+ message: `Integrity OK but DB is large (${sizeMb} MB)`,
489
+ fix_hint: 'Run storage vacuum or rotate archives',
490
+ fixable_by: 'manual',
491
+ };
492
+ }
493
+ return {
494
+ id: 7,
495
+ name: 'db-integrity',
496
+ status: 'pass',
497
+ message: `SQLite integrity_check: ok (size: ${sizeMb} MB)`,
498
+ };
499
+ }
500
+ finally {
501
+ db.close();
502
+ }
503
+ }
504
+ catch (err) {
505
+ return {
506
+ id: 7,
507
+ name: 'db-integrity',
508
+ status: 'fail',
509
+ message: 'SQLite integrity check threw',
510
+ details: err instanceof Error ? err.message : String(err),
511
+ fix_hint: 'Backup DB then run `cf init` to rebuild',
512
+ fixable_by: 'manual',
513
+ };
514
+ }
515
+ }
516
+ // ─── Check 8: config.yaml has no deprecated sections ──────────────────────
517
+ const DEPRECATED_KEYS = ['ai', 'skill_matching', 'distill'];
518
+ export async function check8_configYaml(deps) {
519
+ const configPath = deps?.configPath ?? FORGE_PATHS.config();
520
+ const readFile = deps?.readFile ?? defaultReadFile;
521
+ const raw = readFile(configPath);
522
+ if (raw == null) {
523
+ return {
524
+ id: 8,
525
+ name: 'config-yaml',
526
+ status: 'pass',
527
+ message: 'No config.yaml on disk (defaults in effect)',
528
+ };
529
+ }
530
+ // Light-touch parse: look for top-level deprecated keys via line regex.
531
+ // Avoids pulling in yaml just to detect a handful of keys.
532
+ const found = [];
533
+ for (const key of DEPRECATED_KEYS) {
534
+ const re = new RegExp(`^${key}\\s*:`, 'm');
535
+ if (re.test(raw))
536
+ found.push(key);
537
+ }
538
+ // Quick YAML syntax probe: require either empty or '---' / 'key:' at root.
539
+ // If the file has no `:` at all, the user wrote freeform text by mistake.
540
+ if (raw.trim().length > 0 && !/:/m.test(raw)) {
541
+ return {
542
+ id: 8,
543
+ name: 'config-yaml',
544
+ status: 'fail',
545
+ message: 'config.yaml does not look like YAML (no key: value)',
546
+ fix_hint: 'Restore from backup or delete to use defaults',
547
+ fixable_by: 'manual',
548
+ };
549
+ }
550
+ if (found.length === 0) {
551
+ return {
552
+ id: 8,
553
+ name: 'config-yaml',
554
+ status: 'pass',
555
+ message: 'No deprecated keys in config.yaml',
556
+ };
557
+ }
558
+ return {
559
+ id: 8,
560
+ name: 'config-yaml',
561
+ status: 'warn',
562
+ message: `Deprecated keys present (silently ignored): ${found.join(', ')}`,
563
+ fix_hint: `Remove the ${found.join(' / ')} block from ${configPath}`,
564
+ fixable_by: 'manual',
565
+ };
566
+ }
567
+ export async function check9_recentActivity(deps) {
568
+ const dbPath = deps?.dbPath ?? FORGE_PATHS.database();
569
+ const now = deps?.now ?? Date.now;
570
+ if (!fs.existsSync(dbPath)) {
571
+ return {
572
+ id: 9,
573
+ name: 'recent-activity',
574
+ status: 'fail',
575
+ message: 'DB not present — no activity to read',
576
+ fix_hint: 'Start daemon and use Claude Code to generate events',
577
+ fixable_by: 'manual',
578
+ };
579
+ }
580
+ let DB;
581
+ try {
582
+ if (deps?.load) {
583
+ DB = await deps.load();
584
+ }
585
+ else {
586
+ const mod = await import('better-sqlite3');
587
+ DB = mod.default;
588
+ }
589
+ }
590
+ catch (err) {
591
+ return {
592
+ id: 9,
593
+ name: 'recent-activity',
594
+ status: 'warn',
595
+ message: 'Could not load DB driver to read activity',
596
+ details: err instanceof Error ? err.message : String(err),
597
+ fixable_by: 'manual',
598
+ };
599
+ }
600
+ const cutoffMs = now() - 7 * 24 * 60 * 60 * 1000;
601
+ const cutoffIso = new Date(cutoffMs).toISOString();
602
+ try {
603
+ const db = new DB(dbPath, { readonly: true });
604
+ try {
605
+ const eventsCount = countRecent(db, 'events', 'timestamp', cutoffIso);
606
+ // routing_events 用 `ts` INTEGER (unix millis), 不是 `timestamp` TEXT
607
+ const routingCount = countRecentMs(db, 'routing_events', 'ts', cutoffMs);
608
+ if (eventsCount === 0 && routingCount === 0) {
609
+ return {
610
+ id: 9,
611
+ name: 'recent-activity',
612
+ status: 'fail',
613
+ message: 'No events or routing entries in last 7 days',
614
+ fix_hint: 'Verify daemon is receiving hooks and Claude Code is active',
615
+ fixable_by: 'manual',
616
+ };
617
+ }
618
+ if (eventsCount > 0 && routingCount === 0) {
619
+ return {
620
+ id: 9,
621
+ name: 'recent-activity',
622
+ status: 'warn',
623
+ message: `events=${eventsCount}, routing_events=0 (last 7d)`,
624
+ details: 'No routing events — agent delegation may be misconfigured',
625
+ fixable_by: 'manual',
626
+ };
627
+ }
628
+ return {
629
+ id: 9,
630
+ name: 'recent-activity',
631
+ status: 'pass',
632
+ message: `events=${eventsCount}, routing_events=${routingCount} (last 7d)`,
633
+ };
634
+ }
635
+ finally {
636
+ db.close();
637
+ }
638
+ }
639
+ catch (err) {
640
+ return {
641
+ id: 9,
642
+ name: 'recent-activity',
643
+ status: 'warn',
644
+ message: 'Activity query failed',
645
+ details: err instanceof Error ? err.message : String(err),
646
+ fixable_by: 'manual',
647
+ };
648
+ }
649
+ }
650
+ function countRecent(db, table, tsCol, cutoffIso) {
651
+ try {
652
+ const stmt = db.prepare(`SELECT COUNT(*) AS n FROM ${table} WHERE ${tsCol} >= ?`);
653
+ const row = stmt.get(cutoffIso);
654
+ return row?.n ?? 0;
655
+ }
656
+ catch {
657
+ // Table may not exist on a fresh DB.
658
+ return 0;
659
+ }
660
+ }
661
+ function countRecentMs(db, table, tsCol, cutoffMs) {
662
+ try {
663
+ const stmt = db.prepare(`SELECT COUNT(*) AS n FROM ${table} WHERE ${tsCol} >= ?`);
664
+ const row = stmt.get(cutoffMs);
665
+ return row?.n ?? 0;
666
+ }
667
+ catch {
668
+ return 0;
669
+ }
670
+ }
671
+ // ─── Aggregator ───────────────────────────────────────────────────────────
672
+ const ALL_CHECKS = [
673
+ { id: 1, fn: async (o) => check1_daemonProcess({ selfMode: o?.selfMode ?? false }) },
674
+ { id: 2, fn: async () => check2_daemonSocket() },
675
+ { id: 3, fn: async (o) => check3_launchdAgent({ platform: o?.platform ?? process.platform }) },
676
+ { id: 4, fn: async () => check4_hooksInjected() },
677
+ { id: 5, fn: async (o) => check5_projectClaudemd({ cwd: o?.cwd }) },
678
+ { id: 6, fn: async (o) => check6_projectKnowledge({ cwd: o?.cwd }) },
679
+ { id: 7, fn: async () => check7_dbIntegrity() },
680
+ { id: 8, fn: async () => check8_configYaml() },
681
+ { id: 9, fn: async () => check9_recentActivity() },
682
+ // Entropy checks 10–12 (spec f3dc1397). Warn-only, never fixable by `cf fix`
683
+ // (intentionally absent from FIXABLE_COMMANDS so cleanup stays manual).
684
+ // For project-scoped check 11, route `cwd` through as docsRoot so it scans
685
+ // the active project's docs/design (Web fresh-install passes null → cwd()).
686
+ { id: 10, fn: async () => check10_staleDecisions() },
687
+ {
688
+ id: 11,
689
+ fn: async (o) => check11_staleSpecs({ docsRoot: o?.cwd ?? undefined }),
690
+ },
691
+ { id: 12, fn: async () => check12_orphanEvents() },
692
+ ];
693
+ export async function runChecks(opts) {
694
+ const filter = opts?.ids;
695
+ const checks = filter && filter.length > 0
696
+ ? ALL_CHECKS.filter((c) => filter.includes(c.id))
697
+ : ALL_CHECKS;
698
+ const results = [];
699
+ for (const c of checks) {
700
+ try {
701
+ // Per-check 10s soft timeout so a hung check doesn't stall the report.
702
+ const result = await withTimeout(c.fn(opts), 10_000, () => ({
703
+ id: c.id,
704
+ name: `check-${c.id}`,
705
+ status: 'warn',
706
+ message: 'Check timed out (>10s)',
707
+ }));
708
+ results.push(result);
709
+ }
710
+ catch (err) {
711
+ results.push({
712
+ id: c.id,
713
+ name: `check-${c.id}`,
714
+ status: 'fail',
715
+ message: 'Check threw',
716
+ details: err instanceof Error ? err.message : String(err),
717
+ });
718
+ }
719
+ }
720
+ return results;
721
+ }
722
+ export function summarize(checks) {
723
+ const out = { pass: 0, warn: 0, fail: 0, skip: 0, fixable: 0 };
724
+ for (const c of checks) {
725
+ out[c.status]++;
726
+ if (c.fixable_by === 'cf fix' && c.status !== 'pass' && c.status !== 'skip') {
727
+ out.fixable++;
728
+ }
729
+ }
730
+ return out;
731
+ }
732
+ export async function runDoctorReport(opts) {
733
+ const checks = await runChecks(opts);
734
+ return {
735
+ summary: summarize(checks),
736
+ checks,
737
+ generated_at: new Date().toISOString(),
738
+ };
739
+ }
740
+ // ─── helpers ─────────────────────────────────────────────────────────────
741
+ function withTimeout(p, ms, onTimeout) {
742
+ return new Promise((resolve, reject) => {
743
+ let done = false;
744
+ const timer = setTimeout(() => {
745
+ if (done)
746
+ return;
747
+ done = true;
748
+ resolve(onTimeout());
749
+ }, ms);
750
+ p.then((val) => {
751
+ if (done)
752
+ return;
753
+ done = true;
754
+ clearTimeout(timer);
755
+ resolve(val);
756
+ }, (err) => {
757
+ if (done)
758
+ return;
759
+ done = true;
760
+ clearTimeout(timer);
761
+ reject(err);
762
+ });
763
+ });
764
+ }
765
+ //# sourceMappingURL=checks.js.map