@winspan/claude-forge 8.54.3 → 9.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (879) hide show
  1. package/DEVELOPMENT.md +649 -33
  2. package/README.md +155 -17
  3. package/dist/catalogs/agents.json +72 -0
  4. package/dist/catalogs/skills.json +194 -0
  5. package/dist/claudemd/claudemd-generator.d.ts +45 -45
  6. package/dist/claudemd/claudemd-generator.d.ts.map +1 -1
  7. package/dist/claudemd/claudemd-generator.js +128 -449
  8. package/dist/claudemd/claudemd-generator.js.map +1 -1
  9. package/dist/claudemd/index.d.ts +14 -4
  10. package/dist/claudemd/index.d.ts.map +1 -1
  11. package/dist/claudemd/index.js +15 -4
  12. package/dist/claudemd/index.js.map +1 -1
  13. package/dist/claudemd/resume-manager.d.ts.map +1 -1
  14. package/dist/claudemd/resume-manager.js +37 -9
  15. package/dist/claudemd/resume-manager.js.map +1 -1
  16. package/dist/claudemd/templates/swarm-protocol.md +35 -186
  17. package/dist/claudemd/violations-manager.d.ts +40 -0
  18. package/dist/claudemd/violations-manager.d.ts.map +1 -0
  19. package/dist/claudemd/violations-manager.js +106 -0
  20. package/dist/claudemd/violations-manager.js.map +1 -0
  21. package/dist/cli/commands/admin.d.ts +15 -0
  22. package/dist/cli/commands/admin.d.ts.map +1 -0
  23. package/dist/cli/commands/admin.js +177 -0
  24. package/dist/cli/commands/admin.js.map +1 -0
  25. package/dist/cli/commands/agents.d.ts +18 -0
  26. package/dist/cli/commands/agents.d.ts.map +1 -0
  27. package/dist/cli/commands/agents.js +160 -0
  28. package/dist/cli/commands/agents.js.map +1 -0
  29. package/dist/cli/commands/bypass.d.ts +18 -0
  30. package/dist/cli/commands/bypass.d.ts.map +1 -0
  31. package/dist/cli/commands/bypass.js +87 -0
  32. package/dist/cli/commands/bypass.js.map +1 -0
  33. package/dist/cli/commands/claudemd.d.ts +60 -0
  34. package/dist/cli/commands/claudemd.d.ts.map +1 -1
  35. package/dist/cli/commands/claudemd.js +174 -37
  36. package/dist/cli/commands/claudemd.js.map +1 -1
  37. package/dist/cli/commands/config.d.ts.map +1 -1
  38. package/dist/cli/commands/config.js +94 -1
  39. package/dist/cli/commands/config.js.map +1 -1
  40. package/dist/cli/commands/daemon.d.ts +39 -0
  41. package/dist/cli/commands/daemon.d.ts.map +1 -1
  42. package/dist/cli/commands/daemon.js +167 -20
  43. package/dist/cli/commands/daemon.js.map +1 -1
  44. package/dist/cli/commands/decisions.d.ts +129 -0
  45. package/dist/cli/commands/decisions.d.ts.map +1 -0
  46. package/dist/cli/commands/decisions.js +669 -0
  47. package/dist/cli/commands/decisions.js.map +1 -0
  48. package/dist/cli/commands/doctor.d.ts +29 -0
  49. package/dist/cli/commands/doctor.d.ts.map +1 -0
  50. package/dist/cli/commands/doctor.js +124 -0
  51. package/dist/cli/commands/doctor.js.map +1 -0
  52. package/dist/cli/commands/entropy.d.ts +35 -0
  53. package/dist/cli/commands/entropy.d.ts.map +1 -0
  54. package/dist/cli/commands/entropy.js +121 -0
  55. package/dist/cli/commands/entropy.js.map +1 -0
  56. package/dist/cli/commands/executions.d.ts +1 -0
  57. package/dist/cli/commands/executions.d.ts.map +1 -1
  58. package/dist/cli/commands/executions.js +10 -1
  59. package/dist/cli/commands/executions.js.map +1 -1
  60. package/dist/cli/commands/fix.d.ts +31 -0
  61. package/dist/cli/commands/fix.d.ts.map +1 -0
  62. package/dist/cli/commands/fix.js +108 -0
  63. package/dist/cli/commands/fix.js.map +1 -0
  64. package/dist/cli/commands/governance.d.ts +21 -0
  65. package/dist/cli/commands/governance.d.ts.map +1 -0
  66. package/dist/cli/commands/governance.js +60 -0
  67. package/dist/cli/commands/governance.js.map +1 -0
  68. package/dist/cli/commands/init.d.ts +27 -0
  69. package/dist/cli/commands/init.d.ts.map +1 -1
  70. package/dist/cli/commands/init.js +158 -146
  71. package/dist/cli/commands/init.js.map +1 -1
  72. package/dist/cli/commands/insights-goal-check.d.ts +50 -0
  73. package/dist/cli/commands/insights-goal-check.d.ts.map +1 -0
  74. package/dist/cli/commands/insights-goal-check.js +318 -0
  75. package/dist/cli/commands/insights-goal-check.js.map +1 -0
  76. package/dist/cli/commands/insights.d.ts +15 -0
  77. package/dist/cli/commands/insights.d.ts.map +1 -0
  78. package/dist/cli/commands/insights.js +127 -0
  79. package/dist/cli/commands/insights.js.map +1 -0
  80. package/dist/cli/commands/knowledge.d.ts +66 -0
  81. package/dist/cli/commands/knowledge.d.ts.map +1 -0
  82. package/dist/cli/commands/knowledge.js +897 -0
  83. package/dist/cli/commands/knowledge.js.map +1 -0
  84. package/dist/cli/commands/mcp.d.ts +0 -12
  85. package/dist/cli/commands/mcp.d.ts.map +1 -1
  86. package/dist/cli/commands/mcp.js +11 -5
  87. package/dist/cli/commands/mcp.js.map +1 -1
  88. package/dist/cli/commands/menu.d.ts.map +1 -1
  89. package/dist/cli/commands/menu.js +10 -184
  90. package/dist/cli/commands/menu.js.map +1 -1
  91. package/dist/cli/commands/project.d.ts +98 -0
  92. package/dist/cli/commands/project.d.ts.map +1 -0
  93. package/dist/cli/commands/project.js +382 -0
  94. package/dist/cli/commands/project.js.map +1 -0
  95. package/dist/cli/commands/skills.d.ts.map +1 -1
  96. package/dist/cli/commands/skills.js +14 -128
  97. package/dist/cli/commands/skills.js.map +1 -1
  98. package/dist/cli/commands/spec.d.ts +40 -0
  99. package/dist/cli/commands/spec.d.ts.map +1 -0
  100. package/dist/cli/commands/spec.js +49 -0
  101. package/dist/cli/commands/spec.js.map +1 -0
  102. package/dist/cli/commands/stats.d.ts.map +1 -1
  103. package/dist/cli/commands/stats.js +3 -2
  104. package/dist/cli/commands/stats.js.map +1 -1
  105. package/dist/cli/commands/status.d.ts.map +1 -1
  106. package/dist/cli/commands/status.js +17 -2
  107. package/dist/cli/commands/status.js.map +1 -1
  108. package/dist/cli/commands/trace.d.ts.map +1 -1
  109. package/dist/cli/commands/trace.js +4 -9
  110. package/dist/cli/commands/trace.js.map +1 -1
  111. package/dist/cli/commands/violations.d.ts +14 -0
  112. package/dist/cli/commands/violations.d.ts.map +1 -0
  113. package/dist/cli/commands/violations.js +43 -0
  114. package/dist/cli/commands/violations.js.map +1 -0
  115. package/dist/cli/index.js +26 -0
  116. package/dist/cli/index.js.map +1 -1
  117. package/dist/cli/init/hook-manager.d.ts +1 -1
  118. package/dist/cli/init/hook-manager.d.ts.map +1 -1
  119. package/dist/cli/init/hook-manager.js +6 -0
  120. package/dist/cli/init/hook-manager.js.map +1 -1
  121. package/dist/cli/utils/resolve-session.d.ts +32 -0
  122. package/dist/cli/utils/resolve-session.d.ts.map +1 -0
  123. package/dist/cli/utils/resolve-session.js +39 -0
  124. package/dist/cli/utils/resolve-session.js.map +1 -0
  125. package/dist/core/config.d.ts +4 -1
  126. package/dist/core/config.d.ts.map +1 -1
  127. package/dist/core/config.js +11 -23
  128. package/dist/core/config.js.map +1 -1
  129. package/dist/core/constants.d.ts +14 -13
  130. package/dist/core/constants.d.ts.map +1 -1
  131. package/dist/core/constants.js +20 -13
  132. package/dist/core/constants.js.map +1 -1
  133. package/dist/core/diagnostics/checks.d.ts +151 -0
  134. package/dist/core/diagnostics/checks.d.ts.map +1 -0
  135. package/dist/core/diagnostics/checks.js +765 -0
  136. package/dist/core/diagnostics/checks.js.map +1 -0
  137. package/dist/core/diagnostics/daemon-status.d.ts +77 -0
  138. package/dist/core/diagnostics/daemon-status.d.ts.map +1 -0
  139. package/dist/core/diagnostics/daemon-status.js +113 -0
  140. package/dist/core/diagnostics/daemon-status.js.map +1 -0
  141. package/dist/core/diagnostics/entropy-checks.d.ts +82 -0
  142. package/dist/core/diagnostics/entropy-checks.d.ts.map +1 -0
  143. package/dist/core/diagnostics/entropy-checks.js +395 -0
  144. package/dist/core/diagnostics/entropy-checks.js.map +1 -0
  145. package/dist/core/diagnostics/fix-runner.d.ts +54 -0
  146. package/dist/core/diagnostics/fix-runner.d.ts.map +1 -0
  147. package/dist/core/diagnostics/fix-runner.js +90 -0
  148. package/dist/core/diagnostics/fix-runner.js.map +1 -0
  149. package/dist/core/diagnostics/knip-runner.d.ts +49 -0
  150. package/dist/core/diagnostics/knip-runner.d.ts.map +1 -0
  151. package/dist/core/diagnostics/knip-runner.js +100 -0
  152. package/dist/core/diagnostics/knip-runner.js.map +1 -0
  153. package/dist/core/diagnostics/markers.d.ts +96 -0
  154. package/dist/core/diagnostics/markers.d.ts.map +1 -0
  155. package/dist/core/diagnostics/markers.js +153 -0
  156. package/dist/core/diagnostics/markers.js.map +1 -0
  157. package/dist/core/governance/global-inject.d.ts +60 -0
  158. package/dist/core/governance/global-inject.d.ts.map +1 -0
  159. package/dist/core/governance/global-inject.js +129 -0
  160. package/dist/core/governance/global-inject.js.map +1 -0
  161. package/dist/core/queue/index.d.ts +16 -3
  162. package/dist/core/queue/index.d.ts.map +1 -1
  163. package/dist/core/queue/index.js +14 -3
  164. package/dist/core/queue/index.js.map +1 -1
  165. package/dist/core/storage/base.d.ts +158 -0
  166. package/dist/core/storage/base.d.ts.map +1 -1
  167. package/dist/core/storage/base.js +570 -0
  168. package/dist/core/storage/base.js.map +1 -1
  169. package/dist/core/storage/codec/tool-input-codec.d.ts +93 -0
  170. package/dist/core/storage/codec/tool-input-codec.d.ts.map +1 -0
  171. package/dist/core/storage/codec/tool-input-codec.js +159 -0
  172. package/dist/core/storage/codec/tool-input-codec.js.map +1 -0
  173. package/dist/core/storage/decisions.d.ts +362 -0
  174. package/dist/core/storage/decisions.d.ts.map +1 -0
  175. package/dist/core/storage/decisions.js +502 -0
  176. package/dist/core/storage/decisions.js.map +1 -0
  177. package/dist/core/storage/events.d.ts +112 -8
  178. package/dist/core/storage/events.d.ts.map +1 -1
  179. package/dist/core/storage/events.js +390 -39
  180. package/dist/core/storage/events.js.map +1 -1
  181. package/dist/core/storage/feedback.d.ts +131 -0
  182. package/dist/core/storage/feedback.d.ts.map +1 -0
  183. package/dist/core/storage/feedback.js +187 -0
  184. package/dist/core/storage/feedback.js.map +1 -0
  185. package/dist/core/storage/forge-config.d.ts +40 -0
  186. package/dist/core/storage/forge-config.d.ts.map +1 -0
  187. package/dist/core/storage/forge-config.js +65 -0
  188. package/dist/core/storage/forge-config.js.map +1 -0
  189. package/dist/core/storage/injections.d.ts +28 -0
  190. package/dist/core/storage/injections.d.ts.map +1 -1
  191. package/dist/core/storage/injections.js +62 -5
  192. package/dist/core/storage/injections.js.map +1 -1
  193. package/dist/core/storage/knowledge.d.ts +106 -0
  194. package/dist/core/storage/knowledge.d.ts.map +1 -0
  195. package/dist/core/storage/knowledge.js +202 -0
  196. package/dist/core/storage/knowledge.js.map +1 -0
  197. package/dist/core/storage/maintenance.d.ts +36 -9
  198. package/dist/core/storage/maintenance.d.ts.map +1 -1
  199. package/dist/core/storage/maintenance.js +56 -24
  200. package/dist/core/storage/maintenance.js.map +1 -1
  201. package/dist/core/storage/pipeline-rollup.d.ts +117 -0
  202. package/dist/core/storage/pipeline-rollup.d.ts.map +1 -0
  203. package/dist/core/storage/pipeline-rollup.js +471 -0
  204. package/dist/core/storage/pipeline-rollup.js.map +1 -0
  205. package/dist/core/storage/routing.d.ts +16 -3
  206. package/dist/core/storage/routing.d.ts.map +1 -1
  207. package/dist/core/storage/routing.js +39 -8
  208. package/dist/core/storage/routing.js.map +1 -1
  209. package/dist/core/storage/rows.d.ts +50 -7
  210. package/dist/core/storage/rows.d.ts.map +1 -1
  211. package/dist/core/storage/schema.sql +302 -23
  212. package/dist/core/storage/sessions.d.ts +136 -0
  213. package/dist/core/storage/sessions.d.ts.map +1 -1
  214. package/dist/core/storage/sessions.js +351 -15
  215. package/dist/core/storage/sessions.js.map +1 -1
  216. package/dist/core/storage/skills.d.ts +1 -0
  217. package/dist/core/storage/skills.d.ts.map +1 -1
  218. package/dist/core/storage/skills.js +21 -6
  219. package/dist/core/storage/skills.js.map +1 -1
  220. package/dist/core/storage/sqlite.d.ts +253 -20
  221. package/dist/core/storage/sqlite.d.ts.map +1 -1
  222. package/dist/core/storage/sqlite.js +425 -16
  223. package/dist/core/storage/sqlite.js.map +1 -1
  224. package/dist/core/storage/tasks.d.ts +474 -2
  225. package/dist/core/storage/tasks.d.ts.map +1 -1
  226. package/dist/core/storage/tasks.js +1213 -18
  227. package/dist/core/storage/tasks.js.map +1 -1
  228. package/dist/core/storage/tool-intercepts.d.ts +69 -0
  229. package/dist/core/storage/tool-intercepts.d.ts.map +1 -0
  230. package/dist/core/storage/tool-intercepts.js +116 -0
  231. package/dist/core/storage/tool-intercepts.js.map +1 -0
  232. package/dist/core/storage/workflow-recommendations.d.ts +124 -0
  233. package/dist/core/storage/workflow-recommendations.d.ts.map +1 -0
  234. package/dist/core/storage/workflow-recommendations.js +274 -0
  235. package/dist/core/storage/workflow-recommendations.js.map +1 -0
  236. package/dist/core/types.d.ts +112 -17
  237. package/dist/core/types.d.ts.map +1 -1
  238. package/dist/core/types.js +12 -0
  239. package/dist/core/types.js.map +1 -1
  240. package/dist/core/utils/backup.d.ts +81 -0
  241. package/dist/core/utils/backup.d.ts.map +1 -0
  242. package/dist/core/utils/backup.js +98 -0
  243. package/dist/core/utils/backup.js.map +1 -0
  244. package/dist/core/utils/binary-paths.d.ts +92 -0
  245. package/dist/core/utils/binary-paths.d.ts.map +1 -0
  246. package/dist/core/utils/binary-paths.js +166 -0
  247. package/dist/core/utils/binary-paths.js.map +1 -0
  248. package/dist/core/utils/bypass-token.d.ts +75 -0
  249. package/dist/core/utils/bypass-token.d.ts.map +1 -0
  250. package/dist/core/utils/bypass-token.js +133 -0
  251. package/dist/core/utils/bypass-token.js.map +1 -0
  252. package/dist/core/utils/cc-builtin-agents.d.ts +3 -0
  253. package/dist/core/utils/cc-builtin-agents.d.ts.map +1 -0
  254. package/dist/core/utils/cc-builtin-agents.js +29 -0
  255. package/dist/core/utils/cc-builtin-agents.js.map +1 -0
  256. package/dist/core/utils/claude-cli-spawn.d.ts +106 -0
  257. package/dist/core/utils/claude-cli-spawn.d.ts.map +1 -0
  258. package/dist/core/utils/claude-cli-spawn.js +219 -0
  259. package/dist/core/utils/claude-cli-spawn.js.map +1 -0
  260. package/dist/core/utils/forge-resume-block.d.ts.map +1 -1
  261. package/dist/core/utils/forge-resume-block.js +3 -2
  262. package/dist/core/utils/forge-resume-block.js.map +1 -1
  263. package/dist/core/utils/logger.d.ts +15 -3
  264. package/dist/core/utils/logger.d.ts.map +1 -1
  265. package/dist/core/utils/logger.js +20 -2
  266. package/dist/core/utils/logger.js.map +1 -1
  267. package/dist/core/utils/noise-prompt.d.ts +97 -0
  268. package/dist/core/utils/noise-prompt.d.ts.map +1 -0
  269. package/dist/core/utils/noise-prompt.js +127 -0
  270. package/dist/core/utils/noise-prompt.js.map +1 -0
  271. package/dist/core/utils/path.d.ts +0 -4
  272. package/dist/core/utils/path.d.ts.map +1 -1
  273. package/dist/core/utils/path.js +0 -7
  274. package/dist/core/utils/path.js.map +1 -1
  275. package/dist/core/utils/time.d.ts +41 -0
  276. package/dist/core/utils/time.d.ts.map +1 -1
  277. package/dist/core/utils/time.js +114 -0
  278. package/dist/core/utils/time.js.map +1 -1
  279. package/dist/daemon/agent-sync.d.ts +24 -0
  280. package/dist/daemon/agent-sync.d.ts.map +1 -0
  281. package/dist/daemon/agent-sync.js +114 -0
  282. package/dist/daemon/agent-sync.js.map +1 -0
  283. package/dist/daemon/config-store.d.ts +55 -0
  284. package/dist/daemon/config-store.d.ts.map +1 -0
  285. package/dist/daemon/config-store.js +137 -0
  286. package/dist/daemon/config-store.js.map +1 -0
  287. package/dist/daemon/event-parser.d.ts +22 -0
  288. package/dist/daemon/event-parser.d.ts.map +1 -1
  289. package/dist/daemon/event-parser.js +49 -3
  290. package/dist/daemon/event-parser.js.map +1 -1
  291. package/dist/daemon/handlers/history-exporter.d.ts.map +1 -1
  292. package/dist/daemon/handlers/history-exporter.js +9 -8
  293. package/dist/daemon/handlers/history-exporter.js.map +1 -1
  294. package/dist/daemon/handlers/post-tool-use.d.ts +58 -4
  295. package/dist/daemon/handlers/post-tool-use.d.ts.map +1 -1
  296. package/dist/daemon/handlers/post-tool-use.js +261 -8
  297. package/dist/daemon/handlers/post-tool-use.js.map +1 -1
  298. package/dist/daemon/handlers/pre-tool-use.d.ts +156 -0
  299. package/dist/daemon/handlers/pre-tool-use.d.ts.map +1 -0
  300. package/dist/daemon/handlers/pre-tool-use.js +585 -0
  301. package/dist/daemon/handlers/pre-tool-use.js.map +1 -0
  302. package/dist/daemon/handlers/stop.d.ts +35 -7
  303. package/dist/daemon/handlers/stop.d.ts.map +1 -1
  304. package/dist/daemon/handlers/stop.js +157 -8
  305. package/dist/daemon/handlers/stop.js.map +1 -1
  306. package/dist/daemon/handlers/user-prompt.d.ts +36 -14
  307. package/dist/daemon/handlers/user-prompt.d.ts.map +1 -1
  308. package/dist/daemon/handlers/user-prompt.js +135 -48
  309. package/dist/daemon/handlers/user-prompt.js.map +1 -1
  310. package/dist/daemon/hook-sync.d.ts.map +1 -1
  311. package/dist/daemon/hook-sync.js +2 -1
  312. package/dist/daemon/hook-sync.js.map +1 -1
  313. package/dist/daemon/index.d.ts.map +1 -1
  314. package/dist/daemon/index.js +471 -43
  315. package/dist/daemon/index.js.map +1 -1
  316. package/dist/daemon/lifecycle.d.ts +48 -1
  317. package/dist/daemon/lifecycle.d.ts.map +1 -1
  318. package/dist/daemon/lifecycle.js +98 -2
  319. package/dist/daemon/lifecycle.js.map +1 -1
  320. package/dist/daemon/router.d.ts +4 -1
  321. package/dist/daemon/router.d.ts.map +1 -1
  322. package/dist/daemon/router.js +4 -2
  323. package/dist/daemon/router.js.map +1 -1
  324. package/dist/daemon/rules/defaults.d.ts +20 -0
  325. package/dist/daemon/rules/defaults.d.ts.map +1 -0
  326. package/dist/daemon/rules/defaults.js +692 -0
  327. package/dist/daemon/rules/defaults.js.map +1 -0
  328. package/dist/daemon/rules/registry.d.ts +47 -0
  329. package/dist/daemon/rules/registry.d.ts.map +1 -0
  330. package/dist/daemon/rules/registry.js +84 -0
  331. package/dist/daemon/rules/registry.js.map +1 -0
  332. package/dist/daemon/rules/types.d.ts +170 -0
  333. package/dist/daemon/rules/types.d.ts.map +1 -0
  334. package/dist/daemon/rules/types.js +15 -0
  335. package/dist/daemon/rules/types.js.map +1 -0
  336. package/dist/daemon/rules/whitelist.d.ts +101 -0
  337. package/dist/daemon/rules/whitelist.d.ts.map +1 -0
  338. package/dist/daemon/rules/whitelist.js +210 -0
  339. package/dist/daemon/rules/whitelist.js.map +1 -0
  340. package/dist/daemon/rules/workflow-defaults.d.ts +52 -0
  341. package/dist/daemon/rules/workflow-defaults.d.ts.map +1 -0
  342. package/dist/daemon/rules/workflow-defaults.js +521 -0
  343. package/dist/daemon/rules/workflow-defaults.js.map +1 -0
  344. package/dist/daemon/server.d.ts +11 -1
  345. package/dist/daemon/server.d.ts.map +1 -1
  346. package/dist/daemon/server.js +7 -1
  347. package/dist/daemon/server.js.map +1 -1
  348. package/dist/daemon/services/context-injector.d.ts +34 -0
  349. package/dist/daemon/services/context-injector.d.ts.map +1 -0
  350. package/dist/daemon/services/context-injector.js +61 -0
  351. package/dist/daemon/services/context-injector.js.map +1 -0
  352. package/dist/daemon/services/decision-hint.d.ts +203 -0
  353. package/dist/daemon/services/decision-hint.d.ts.map +1 -0
  354. package/dist/daemon/services/decision-hint.js +487 -0
  355. package/dist/daemon/services/decision-hint.js.map +1 -0
  356. package/dist/daemon/services/event-ttl-sweep.d.ts +86 -0
  357. package/dist/daemon/services/event-ttl-sweep.d.ts.map +1 -0
  358. package/dist/daemon/services/event-ttl-sweep.js +123 -0
  359. package/dist/daemon/services/event-ttl-sweep.js.map +1 -0
  360. package/dist/daemon/services/experience-extractor.d.ts +67 -0
  361. package/dist/daemon/services/experience-extractor.d.ts.map +1 -0
  362. package/dist/daemon/services/experience-extractor.js +323 -0
  363. package/dist/daemon/services/experience-extractor.js.map +1 -0
  364. package/dist/daemon/services/feedback-aggregator.d.ts +179 -0
  365. package/dist/daemon/services/feedback-aggregator.d.ts.map +1 -0
  366. package/dist/daemon/services/feedback-aggregator.js +455 -0
  367. package/dist/daemon/services/feedback-aggregator.js.map +1 -0
  368. package/dist/daemon/services/heartbeat-writer.d.ts +55 -0
  369. package/dist/daemon/services/heartbeat-writer.d.ts.map +1 -0
  370. package/dist/daemon/services/heartbeat-writer.js +111 -0
  371. package/dist/daemon/services/heartbeat-writer.js.map +1 -0
  372. package/dist/daemon/services/idle-session-sweeper.d.ts +61 -0
  373. package/dist/daemon/services/idle-session-sweeper.d.ts.map +1 -0
  374. package/dist/daemon/services/idle-session-sweeper.js +94 -0
  375. package/dist/daemon/services/idle-session-sweeper.js.map +1 -0
  376. package/dist/daemon/services/idle-task-budget.d.ts +50 -0
  377. package/dist/daemon/services/idle-task-budget.d.ts.map +1 -0
  378. package/dist/daemon/services/idle-task-budget.js +72 -0
  379. package/dist/daemon/services/idle-task-budget.js.map +1 -0
  380. package/dist/daemon/services/intercept-revive.d.ts +60 -0
  381. package/dist/daemon/services/intercept-revive.d.ts.map +1 -0
  382. package/dist/daemon/services/intercept-revive.js +86 -0
  383. package/dist/daemon/services/intercept-revive.js.map +1 -0
  384. package/dist/daemon/services/intercept-rollback-guard.d.ts +105 -0
  385. package/dist/daemon/services/intercept-rollback-guard.d.ts.map +1 -0
  386. package/dist/daemon/services/intercept-rollback-guard.js +152 -0
  387. package/dist/daemon/services/intercept-rollback-guard.js.map +1 -0
  388. package/dist/daemon/services/intercept-timeout-sweeper.d.ts +58 -0
  389. package/dist/daemon/services/intercept-timeout-sweeper.d.ts.map +1 -0
  390. package/dist/daemon/services/intercept-timeout-sweeper.js +83 -0
  391. package/dist/daemon/services/intercept-timeout-sweeper.js.map +1 -0
  392. package/dist/daemon/services/kb-injector.d.ts +57 -0
  393. package/dist/daemon/services/kb-injector.d.ts.map +1 -0
  394. package/dist/daemon/services/kb-injector.js +140 -0
  395. package/dist/daemon/services/kb-injector.js.map +1 -0
  396. package/dist/daemon/services/outcome-classification-service.d.ts +49 -0
  397. package/dist/daemon/services/outcome-classification-service.d.ts.map +1 -0
  398. package/dist/daemon/services/outcome-classification-service.js +214 -0
  399. package/dist/daemon/services/outcome-classification-service.js.map +1 -0
  400. package/dist/daemon/services/outcome-classifier.d.ts +136 -0
  401. package/dist/daemon/services/outcome-classifier.d.ts.map +1 -0
  402. package/dist/daemon/services/outcome-classifier.js +178 -0
  403. package/dist/daemon/services/outcome-classifier.js.map +1 -0
  404. package/dist/daemon/services/outcome-nudge.d.ts +107 -0
  405. package/dist/daemon/services/outcome-nudge.d.ts.map +1 -0
  406. package/dist/daemon/services/outcome-nudge.js +242 -0
  407. package/dist/daemon/services/outcome-nudge.js.map +1 -0
  408. package/dist/daemon/services/spec-approval.d.ts +127 -0
  409. package/dist/daemon/services/spec-approval.d.ts.map +1 -0
  410. package/dist/daemon/services/spec-approval.js +216 -0
  411. package/dist/daemon/services/spec-approval.js.map +1 -0
  412. package/dist/daemon/services/spec-gate.d.ts +54 -0
  413. package/dist/daemon/services/spec-gate.d.ts.map +1 -0
  414. package/dist/daemon/services/spec-gate.js +113 -0
  415. package/dist/daemon/services/spec-gate.js.map +1 -0
  416. package/dist/daemon/services/task-boundary-classifier.d.ts +78 -0
  417. package/dist/daemon/services/task-boundary-classifier.d.ts.map +1 -0
  418. package/dist/daemon/services/task-boundary-classifier.js +202 -0
  419. package/dist/daemon/services/task-boundary-classifier.js.map +1 -0
  420. package/dist/daemon/services/task-segmenter.d.ts +219 -1
  421. package/dist/daemon/services/task-segmenter.d.ts.map +1 -1
  422. package/dist/daemon/services/task-segmenter.js +481 -17
  423. package/dist/daemon/services/task-segmenter.js.map +1 -1
  424. package/dist/daemon/services/violation-reporter.d.ts +130 -0
  425. package/dist/daemon/services/violation-reporter.d.ts.map +1 -0
  426. package/dist/daemon/services/violation-reporter.js +339 -0
  427. package/dist/daemon/services/violation-reporter.js.map +1 -0
  428. package/dist/daemon/skill-sync.d.ts +7 -2
  429. package/dist/daemon/skill-sync.d.ts.map +1 -1
  430. package/dist/daemon/skill-sync.js +114 -9
  431. package/dist/daemon/skill-sync.js.map +1 -1
  432. package/dist/daemon/templates/agents/claudemd-writer.md +101 -0
  433. package/dist/daemon/templates/agents/coder.md +105 -0
  434. package/dist/daemon/templates/agents/decision-maker.md +460 -0
  435. package/dist/daemon/templates/agents/doc-reviewer.md +115 -0
  436. package/dist/daemon/templates/agents/harness-debug-full.md +114 -0
  437. package/dist/daemon/templates/agents/harness-hotfix.md +99 -0
  438. package/dist/daemon/templates/agents/hybrid-feature-with-safety.md +104 -0
  439. package/dist/daemon/templates/agents/knowledge-builder.md +119 -0
  440. package/dist/daemon/templates/agents/patch-applier.md +144 -0
  441. package/dist/daemon/templates/agents/planner.md +165 -0
  442. package/dist/daemon/templates/agents/refactor-specialist.md +98 -0
  443. package/dist/daemon/templates/agents/skill-distiller.md +113 -0
  444. package/dist/daemon/templates/agents/task-boundary-classifier.md +64 -0
  445. package/dist/daemon/templates/agents/verify-agent.md +136 -0
  446. package/dist/daemon/utils/inject-block.d.ts +39 -0
  447. package/dist/daemon/utils/inject-block.d.ts.map +1 -0
  448. package/dist/daemon/utils/inject-block.js +25 -0
  449. package/dist/daemon/utils/inject-block.js.map +1 -0
  450. package/dist/hooks/hook-lib.sh +8 -0
  451. package/dist/hooks/notification.sh +19 -8
  452. package/dist/hooks/post-tool-use.sh +41 -23
  453. package/dist/hooks/pre-tool-use.sh +54 -23
  454. package/dist/hooks/session-start.sh +68 -0
  455. package/dist/hooks/stop.sh +24 -10
  456. package/dist/hooks/user-prompt-submit.sh +37 -21
  457. package/dist/knowledge/adapters/go-adapter.d.ts +65 -0
  458. package/dist/knowledge/adapters/go-adapter.d.ts.map +1 -0
  459. package/dist/knowledge/adapters/go-adapter.js +294 -0
  460. package/dist/knowledge/adapters/go-adapter.js.map +1 -0
  461. package/dist/knowledge/adapters/index.d.ts +41 -0
  462. package/dist/knowledge/adapters/index.d.ts.map +1 -0
  463. package/dist/knowledge/adapters/index.js +71 -0
  464. package/dist/knowledge/adapters/index.js.map +1 -0
  465. package/dist/knowledge/adapters/java-adapter.d.ts +66 -0
  466. package/dist/knowledge/adapters/java-adapter.d.ts.map +1 -0
  467. package/dist/knowledge/adapters/java-adapter.js +260 -0
  468. package/dist/knowledge/adapters/java-adapter.js.map +1 -0
  469. package/dist/knowledge/adapters/js-vue-adapter.d.ts +56 -0
  470. package/dist/knowledge/adapters/js-vue-adapter.d.ts.map +1 -0
  471. package/dist/knowledge/adapters/js-vue-adapter.js +203 -0
  472. package/dist/knowledge/adapters/js-vue-adapter.js.map +1 -0
  473. package/dist/knowledge/adapters/kotlin-adapter.d.ts +55 -0
  474. package/dist/knowledge/adapters/kotlin-adapter.d.ts.map +1 -0
  475. package/dist/knowledge/adapters/kotlin-adapter.js +209 -0
  476. package/dist/knowledge/adapters/kotlin-adapter.js.map +1 -0
  477. package/dist/knowledge/adapters/monorepo-adapter.d.ts +77 -0
  478. package/dist/knowledge/adapters/monorepo-adapter.d.ts.map +1 -0
  479. package/dist/knowledge/adapters/monorepo-adapter.js +170 -0
  480. package/dist/knowledge/adapters/monorepo-adapter.js.map +1 -0
  481. package/dist/knowledge/adapters/python-adapter.d.ts +89 -0
  482. package/dist/knowledge/adapters/python-adapter.d.ts.map +1 -0
  483. package/dist/knowledge/adapters/python-adapter.js +358 -0
  484. package/dist/knowledge/adapters/python-adapter.js.map +1 -0
  485. package/dist/knowledge/adapters/rust-adapter.d.ts +73 -0
  486. package/dist/knowledge/adapters/rust-adapter.d.ts.map +1 -0
  487. package/dist/knowledge/adapters/rust-adapter.js +329 -0
  488. package/dist/knowledge/adapters/rust-adapter.js.map +1 -0
  489. package/dist/knowledge/adapters/types.d.ts +99 -0
  490. package/dist/knowledge/adapters/types.d.ts.map +1 -0
  491. package/dist/knowledge/adapters/types.js +17 -0
  492. package/dist/knowledge/adapters/types.js.map +1 -0
  493. package/dist/knowledge/adapters/typescript-adapter.d.ts +57 -0
  494. package/dist/knowledge/adapters/typescript-adapter.d.ts.map +1 -0
  495. package/dist/knowledge/adapters/typescript-adapter.js +171 -0
  496. package/dist/knowledge/adapters/typescript-adapter.js.map +1 -0
  497. package/dist/knowledge/audit-applier.d.ts +70 -0
  498. package/dist/knowledge/audit-applier.d.ts.map +1 -0
  499. package/dist/knowledge/audit-applier.js +251 -0
  500. package/dist/knowledge/audit-applier.js.map +1 -0
  501. package/dist/knowledge/builder.d.ts +261 -0
  502. package/dist/knowledge/builder.d.ts.map +1 -0
  503. package/dist/knowledge/builder.js +937 -0
  504. package/dist/knowledge/builder.js.map +1 -0
  505. package/dist/knowledge/cli-provider.d.ts +151 -0
  506. package/dist/knowledge/cli-provider.d.ts.map +1 -0
  507. package/dist/knowledge/cli-provider.js +313 -0
  508. package/dist/knowledge/cli-provider.js.map +1 -0
  509. package/dist/knowledge/constants.d.ts +73 -0
  510. package/dist/knowledge/constants.d.ts.map +1 -0
  511. package/dist/knowledge/constants.js +93 -0
  512. package/dist/knowledge/constants.js.map +1 -0
  513. package/dist/knowledge/cross-module.d.ts +139 -0
  514. package/dist/knowledge/cross-module.d.ts.map +1 -0
  515. package/dist/knowledge/cross-module.js +370 -0
  516. package/dist/knowledge/cross-module.js.map +1 -0
  517. package/dist/knowledge/git-hooks.d.ts +67 -0
  518. package/dist/knowledge/git-hooks.d.ts.map +1 -0
  519. package/dist/knowledge/git-hooks.js +258 -0
  520. package/dist/knowledge/git-hooks.js.map +1 -0
  521. package/dist/knowledge/module-hash.d.ts +88 -0
  522. package/dist/knowledge/module-hash.d.ts.map +1 -0
  523. package/dist/knowledge/module-hash.js +162 -0
  524. package/dist/knowledge/module-hash.js.map +1 -0
  525. package/dist/knowledge/project-detector.d.ts +101 -0
  526. package/dist/knowledge/project-detector.d.ts.map +1 -0
  527. package/dist/knowledge/project-detector.js +223 -0
  528. package/dist/knowledge/project-detector.js.map +1 -0
  529. package/dist/knowledge/prompt.d.ts +228 -0
  530. package/dist/knowledge/prompt.d.ts.map +1 -0
  531. package/dist/knowledge/prompt.js +404 -0
  532. package/dist/knowledge/prompt.js.map +1 -0
  533. package/dist/knowledge/query.d.ts +105 -0
  534. package/dist/knowledge/query.d.ts.map +1 -0
  535. package/dist/knowledge/query.js +341 -0
  536. package/dist/knowledge/query.js.map +1 -0
  537. package/dist/knowledge/repo-map.d.ts +91 -0
  538. package/dist/knowledge/repo-map.d.ts.map +1 -0
  539. package/dist/knowledge/repo-map.js +408 -0
  540. package/dist/knowledge/repo-map.js.map +1 -0
  541. package/dist/knowledge/tools/index.d.ts +14 -0
  542. package/dist/knowledge/tools/index.d.ts.map +1 -0
  543. package/dist/knowledge/tools/index.js +11 -0
  544. package/dist/knowledge/tools/index.js.map +1 -0
  545. package/dist/knowledge/tools/knowledge-get-page.d.ts +46 -0
  546. package/dist/knowledge/tools/knowledge-get-page.d.ts.map +1 -0
  547. package/dist/knowledge/tools/knowledge-get-page.js +101 -0
  548. package/dist/knowledge/tools/knowledge-get-page.js.map +1 -0
  549. package/dist/knowledge/tools/knowledge-query.d.ts +77 -0
  550. package/dist/knowledge/tools/knowledge-query.d.ts.map +1 -0
  551. package/dist/knowledge/tools/knowledge-query.js +104 -0
  552. package/dist/knowledge/tools/knowledge-query.js.map +1 -0
  553. package/dist/knowledge/tools/repo-map-lookup.d.ts +45 -0
  554. package/dist/knowledge/tools/repo-map-lookup.d.ts.map +1 -0
  555. package/dist/knowledge/tools/repo-map-lookup.js +82 -0
  556. package/dist/knowledge/tools/repo-map-lookup.js.map +1 -0
  557. package/dist/knowledge/types.d.ts +269 -0
  558. package/dist/knowledge/types.d.ts.map +1 -0
  559. package/dist/knowledge/types.js +10 -0
  560. package/dist/knowledge/types.js.map +1 -0
  561. package/dist/knowledge/validator.d.ts +90 -0
  562. package/dist/knowledge/validator.d.ts.map +1 -0
  563. package/dist/knowledge/validator.js +288 -0
  564. package/dist/knowledge/validator.js.map +1 -0
  565. package/dist/mcp/server.d.ts.map +1 -1
  566. package/dist/mcp/server.js +222 -1
  567. package/dist/mcp/server.js.map +1 -1
  568. package/dist/skills/builtin-skills.d.ts +35 -0
  569. package/dist/skills/builtin-skills.d.ts.map +1 -0
  570. package/dist/skills/builtin-skills.js +68 -0
  571. package/dist/skills/builtin-skills.js.map +1 -0
  572. package/dist/skills/distill/attribution.d.ts +59 -0
  573. package/dist/skills/distill/attribution.d.ts.map +1 -0
  574. package/dist/skills/distill/attribution.js +101 -0
  575. package/dist/skills/distill/attribution.js.map +1 -0
  576. package/dist/skills/distill/claude-cli-resolver.d.ts +26 -0
  577. package/dist/skills/distill/claude-cli-resolver.d.ts.map +1 -0
  578. package/dist/skills/distill/claude-cli-resolver.js +115 -0
  579. package/dist/skills/distill/claude-cli-resolver.js.map +1 -0
  580. package/dist/skills/distill/distiller.d.ts +161 -0
  581. package/dist/skills/distill/distiller.d.ts.map +1 -0
  582. package/dist/skills/distill/distiller.js +461 -0
  583. package/dist/skills/distill/distiller.js.map +1 -0
  584. package/dist/skills/distill/index.d.ts +223 -0
  585. package/dist/skills/distill/index.d.ts.map +1 -0
  586. package/dist/skills/distill/index.js +466 -0
  587. package/dist/skills/distill/index.js.map +1 -0
  588. package/dist/skills/distill/project-anchor-guard.d.ts +116 -0
  589. package/dist/skills/distill/project-anchor-guard.d.ts.map +1 -0
  590. package/dist/skills/distill/project-anchor-guard.js +334 -0
  591. package/dist/skills/distill/project-anchor-guard.js.map +1 -0
  592. package/dist/skills/distill/topic-deduper.d.ts +77 -0
  593. package/dist/skills/distill/topic-deduper.d.ts.map +1 -0
  594. package/dist/skills/distill/topic-deduper.js +119 -0
  595. package/dist/skills/distill/topic-deduper.js.map +1 -0
  596. package/dist/skills/distill/upstream-fetcher.d.ts +71 -0
  597. package/dist/skills/distill/upstream-fetcher.d.ts.map +1 -0
  598. package/dist/skills/distill/upstream-fetcher.js +202 -0
  599. package/dist/skills/distill/upstream-fetcher.js.map +1 -0
  600. package/dist/skills/distilled/distilled-api-design.md +491 -0
  601. package/dist/skills/distilled/distilled-architecture-decision.md +173 -0
  602. package/dist/skills/distilled/distilled-creator.md +178 -0
  603. package/dist/skills/distilled/distilled-db-schema-design.md +245 -0
  604. package/dist/skills/distilled/distilled-defi-amm-security.md +293 -0
  605. package/dist/skills/distilled/distilled-executing-plans.md +113 -0
  606. package/dist/skills/distilled/distilled-harness-engineering.md +242 -0
  607. package/dist/skills/distilled/distilled-karpathy-guidelines.md +104 -0
  608. package/dist/skills/distilled/distilled-performance-optimization.md +175 -0
  609. package/dist/skills/distilled/distilled-spec-driven-design.md +193 -0
  610. package/dist/skills/distilled/distilled-systematic-debugging.md +306 -0
  611. package/dist/skills/distilled/distilled-verification-before-completion.md +203 -0
  612. package/dist/skills/keyword-score.d.ts +29 -0
  613. package/dist/skills/keyword-score.d.ts.map +1 -0
  614. package/dist/skills/keyword-score.js +54 -0
  615. package/dist/skills/keyword-score.js.map +1 -0
  616. package/dist/skills/registry.d.ts +64 -20
  617. package/dist/skills/registry.d.ts.map +1 -1
  618. package/dist/skills/registry.js +102 -105
  619. package/dist/skills/registry.js.map +1 -1
  620. package/dist/skills/tools/pipeline-suggest.js +14 -14
  621. package/dist/skills/tools/skill-invoke.d.ts +1 -1
  622. package/dist/skills/tools/skill-invoke.js +1 -1
  623. package/dist/web/routes/agent-content.d.ts +30 -0
  624. package/dist/web/routes/agent-content.d.ts.map +1 -0
  625. package/dist/web/routes/agent-content.js +139 -0
  626. package/dist/web/routes/agent-content.js.map +1 -0
  627. package/dist/web/routes/decisions.d.ts +15 -0
  628. package/dist/web/routes/decisions.d.ts.map +1 -0
  629. package/dist/web/routes/decisions.js +181 -0
  630. package/dist/web/routes/decisions.js.map +1 -0
  631. package/dist/web/routes/diagnostics.d.ts +61 -0
  632. package/dist/web/routes/diagnostics.d.ts.map +1 -0
  633. package/dist/web/routes/diagnostics.js +203 -0
  634. package/dist/web/routes/diagnostics.js.map +1 -0
  635. package/dist/web/routes/events.d.ts.map +1 -1
  636. package/dist/web/routes/events.js +24 -0
  637. package/dist/web/routes/events.js.map +1 -1
  638. package/dist/web/routes/health.d.ts +33 -0
  639. package/dist/web/routes/health.d.ts.map +1 -0
  640. package/dist/web/routes/health.js +37 -0
  641. package/dist/web/routes/health.js.map +1 -0
  642. package/dist/web/routes/insights.d.ts +0 -5
  643. package/dist/web/routes/insights.d.ts.map +1 -1
  644. package/dist/web/routes/insights.js +783 -2
  645. package/dist/web/routes/insights.js.map +1 -1
  646. package/dist/web/routes/knowledge.d.ts +16 -0
  647. package/dist/web/routes/knowledge.d.ts.map +1 -0
  648. package/dist/web/routes/knowledge.js +661 -0
  649. package/dist/web/routes/knowledge.js.map +1 -0
  650. package/dist/web/routes/patch.d.ts +60 -1
  651. package/dist/web/routes/patch.d.ts.map +1 -1
  652. package/dist/web/routes/patch.js +170 -64
  653. package/dist/web/routes/patch.js.map +1 -1
  654. package/dist/web/routes/pipeline.d.ts +37 -0
  655. package/dist/web/routes/pipeline.d.ts.map +1 -0
  656. package/dist/web/routes/pipeline.js +149 -0
  657. package/dist/web/routes/pipeline.js.map +1 -0
  658. package/dist/web/routes/rules.d.ts.map +1 -1
  659. package/dist/web/routes/rules.js +6 -1
  660. package/dist/web/routes/rules.js.map +1 -1
  661. package/dist/web/routes/sessions.d.ts.map +1 -1
  662. package/dist/web/routes/sessions.js +9 -1
  663. package/dist/web/routes/sessions.js.map +1 -1
  664. package/dist/web/routes/skill-content.d.ts +30 -0
  665. package/dist/web/routes/skill-content.d.ts.map +1 -0
  666. package/dist/web/routes/skill-content.js +117 -0
  667. package/dist/web/routes/skill-content.js.map +1 -0
  668. package/dist/web/routes/skills-distill.d.ts +29 -0
  669. package/dist/web/routes/skills-distill.d.ts.map +1 -0
  670. package/dist/web/routes/skills-distill.js +552 -0
  671. package/dist/web/routes/skills-distill.js.map +1 -0
  672. package/dist/web/routes/skills.js +7 -7
  673. package/dist/web/routes/skills.js.map +1 -1
  674. package/dist/web/routes/task-timeline.d.ts +102 -0
  675. package/dist/web/routes/task-timeline.d.ts.map +1 -0
  676. package/dist/web/routes/task-timeline.js +274 -0
  677. package/dist/web/routes/task-timeline.js.map +1 -0
  678. package/dist/web/routes/tasks.d.ts.map +1 -1
  679. package/dist/web/routes/tasks.js +355 -8
  680. package/dist/web/routes/tasks.js.map +1 -1
  681. package/dist/web/routes/trace.d.ts.map +1 -1
  682. package/dist/web/routes/trace.js +3 -2
  683. package/dist/web/routes/trace.js.map +1 -1
  684. package/dist/web/routes/types.d.ts +0 -4
  685. package/dist/web/routes/types.d.ts.map +1 -1
  686. package/dist/web/routes/types.js +1 -1
  687. package/dist/web/routes/types.js.map +1 -1
  688. package/dist/web/routes/violations.d.ts +14 -0
  689. package/dist/web/routes/violations.d.ts.map +1 -0
  690. package/dist/web/routes/violations.js +111 -0
  691. package/dist/web/routes/violations.js.map +1 -0
  692. package/dist/web/server.d.ts.map +1 -1
  693. package/dist/web/server.js +79 -19
  694. package/dist/web/server.js.map +1 -1
  695. package/dist/web/services/build-manager.d.ts +72 -0
  696. package/dist/web/services/build-manager.d.ts.map +1 -0
  697. package/dist/web/services/build-manager.js +189 -0
  698. package/dist/web/services/build-manager.js.map +1 -0
  699. package/dist/web/services/distill-manager.d.ts +125 -0
  700. package/dist/web/services/distill-manager.d.ts.map +1 -0
  701. package/dist/web/services/distill-manager.js +308 -0
  702. package/dist/web/services/distill-manager.js.map +1 -0
  703. package/dist/web/static/assets/AgentContentPage-DkeRNxok.js +2 -0
  704. package/dist/web/static/assets/AgentContentPage-DkeRNxok.js.map +1 -0
  705. package/dist/web/static/assets/AgentDelegationTable-ByBa0x1l.js +2 -0
  706. package/dist/web/static/assets/AgentDelegationTable-ByBa0x1l.js.map +1 -0
  707. package/dist/web/static/assets/ContextInsightsPage-oUk7_I8u.js +3 -0
  708. package/dist/web/static/assets/ContextInsightsPage-oUk7_I8u.js.map +1 -0
  709. package/dist/web/static/assets/DaemonHealthPage-DG2fyOP7.js +2 -0
  710. package/dist/web/static/assets/DaemonHealthPage-DG2fyOP7.js.map +1 -0
  711. package/dist/web/static/assets/DecisionsPage-CMAPEnKb.js +2 -0
  712. package/dist/web/static/assets/DecisionsPage-CMAPEnKb.js.map +1 -0
  713. package/dist/web/static/assets/DiagnosticsPage-DQd-Zm4r.js +2 -0
  714. package/dist/web/static/assets/DiagnosticsPage-DQd-Zm4r.js.map +1 -0
  715. package/dist/web/static/assets/DriftTab-DqpepOhI.js +2 -0
  716. package/dist/web/static/assets/DriftTab-DqpepOhI.js.map +1 -0
  717. package/dist/web/static/assets/HealthHomePage-CN6zNIie.js +3 -0
  718. package/dist/web/static/assets/HealthHomePage-CN6zNIie.js.map +1 -0
  719. package/dist/web/static/assets/KbHitRateTable-ByEIWujF.js +2 -0
  720. package/dist/web/static/assets/KbHitRateTable-ByEIWujF.js.map +1 -0
  721. package/dist/web/static/assets/MarkdownRenderer-DZmTl-8J.js +3 -0
  722. package/dist/web/static/assets/MarkdownRenderer-DZmTl-8J.js.map +1 -0
  723. package/dist/web/static/assets/NotFound-BQPh0vaF.js +2 -0
  724. package/dist/web/static/assets/NotFound-BQPh0vaF.js.map +1 -0
  725. package/dist/web/static/assets/ProjectSwitcher-D3lZMFd3.js +2 -0
  726. package/dist/web/static/assets/ProjectSwitcher-D3lZMFd3.js.map +1 -0
  727. package/dist/web/static/assets/SettingsPage-oLJBNzQj.js +2 -0
  728. package/dist/web/static/assets/SettingsPage-oLJBNzQj.js.map +1 -0
  729. package/dist/web/static/assets/SkillContentPage-DK5rgfgw.js +2 -0
  730. package/dist/web/static/assets/SkillContentPage-DK5rgfgw.js.map +1 -0
  731. package/dist/web/static/assets/SkillStatsTable-DYMzjEUV.js +2 -0
  732. package/dist/web/static/assets/SkillStatsTable-DYMzjEUV.js.map +1 -0
  733. package/dist/web/static/assets/SkillsDistillTab-C7qaG8q3.js +2 -0
  734. package/dist/web/static/assets/SkillsDistillTab-C7qaG8q3.js.map +1 -0
  735. package/dist/web/static/assets/TasksHubPage-03wsRRsJ.js +6 -0
  736. package/dist/web/static/assets/TasksHubPage-03wsRRsJ.js.map +1 -0
  737. package/dist/web/static/assets/ViolationsPage-DSiLr-9O.js +3 -0
  738. package/dist/web/static/assets/ViolationsPage-DSiLr-9O.js.map +1 -0
  739. package/dist/web/static/assets/arco-Bhi3a6Qp.js +14 -0
  740. package/dist/web/static/assets/arco-Bhi3a6Qp.js.map +1 -0
  741. package/dist/web/static/assets/arco-DFQA6dO_.css +1 -0
  742. package/dist/web/static/assets/charts-BuHQWDbQ.js +37 -0
  743. package/dist/web/static/assets/charts-BuHQWDbQ.js.map +1 -0
  744. package/dist/web/static/assets/date-fns-sbWH3_uq.js +2 -0
  745. package/dist/web/static/assets/date-fns-sbWH3_uq.js.map +1 -0
  746. package/dist/web/static/assets/index-7bl3kbcx.css +1 -0
  747. package/dist/web/static/assets/index-BIYnq1Dx.js +4 -0
  748. package/dist/web/static/assets/index-BIYnq1Dx.js.map +1 -0
  749. package/dist/web/static/assets/lucide-CnlPQoG8.js +72 -0
  750. package/dist/web/static/assets/lucide-CnlPQoG8.js.map +1 -0
  751. package/dist/web/static/assets/outcome-DUn1NjlC.js +2 -0
  752. package/dist/web/static/assets/outcome-DUn1NjlC.js.map +1 -0
  753. package/dist/web/static/assets/query-S6X1S7K9.js +2 -0
  754. package/dist/web/static/assets/{query-C99w429o.js.map → query-S6X1S7K9.js.map} +1 -1
  755. package/dist/web/static/assets/{react-router-r79dBVy4.js → react-router-JVUrkhdd.js} +3 -3
  756. package/dist/web/static/assets/{react-router-r79dBVy4.js.map → react-router-JVUrkhdd.js.map} +1 -1
  757. package/dist/web/static/assets/react-vendor-tkvCrao7.js +57 -0
  758. package/dist/web/static/assets/react-vendor-tkvCrao7.js.map +1 -0
  759. package/dist/web/static/assets/syntax-highlighter-BkZfCDsz.js +6 -0
  760. package/dist/web/static/assets/syntax-highlighter-BkZfCDsz.js.map +1 -0
  761. package/dist/web/static/assets/useTabsParam-k8qte_0C.js +2 -0
  762. package/dist/web/static/assets/useTabsParam-k8qte_0C.js.map +1 -0
  763. package/dist/web/static/assets/vendor-DWgdB1eY.js +65 -0
  764. package/dist/web/static/assets/vendor-DWgdB1eY.js.map +1 -0
  765. package/dist/web/static/index.html +12 -8
  766. package/package.json +14 -3
  767. package/dist/core/ai/provider.d.ts +0 -63
  768. package/dist/core/ai/provider.d.ts.map +0 -1
  769. package/dist/core/ai/provider.js +0 -241
  770. package/dist/core/ai/provider.js.map +0 -1
  771. package/dist/core/ai/types.d.ts +0 -43
  772. package/dist/core/ai/types.d.ts.map +0 -1
  773. package/dist/core/ai/types.js +0 -5
  774. package/dist/core/ai/types.js.map +0 -1
  775. package/dist/core/storage/token-usage.d.ts +0 -36
  776. package/dist/core/storage/token-usage.d.ts.map +0 -1
  777. package/dist/core/storage/token-usage.js +0 -59
  778. package/dist/core/storage/token-usage.js.map +0 -1
  779. package/dist/core/utils/token-tracker.d.ts +0 -39
  780. package/dist/core/utils/token-tracker.d.ts.map +0 -1
  781. package/dist/core/utils/token-tracker.js +0 -69
  782. package/dist/core/utils/token-tracker.js.map +0 -1
  783. package/dist/skills/index.d.ts +0 -3
  784. package/dist/skills/index.d.ts.map +0 -1
  785. package/dist/skills/index.js +0 -3
  786. package/dist/skills/index.js.map +0 -1
  787. package/dist/skills/matcher.d.ts +0 -26
  788. package/dist/skills/matcher.d.ts.map +0 -1
  789. package/dist/skills/matcher.js +0 -113
  790. package/dist/skills/matcher.js.map +0 -1
  791. package/dist/skills/official/code-simplifier.md +0 -52
  792. package/dist/skills/official/find-skills.md +0 -142
  793. package/dist/skills/official/official-api-design.md +0 -30
  794. package/dist/skills/official/official-architecture-decision.md +0 -41
  795. package/dist/skills/official/official-bmad.md +0 -118
  796. package/dist/skills/official/official-db-schema-design.md +0 -34
  797. package/dist/skills/official/official-debug.md +0 -25
  798. package/dist/skills/official/official-doc-driven.md +0 -31
  799. package/dist/skills/official/official-harness-engineering.md +0 -108
  800. package/dist/skills/official/official-performance-optimization.md +0 -30
  801. package/dist/skills/official/official-pr-review.md +0 -35
  802. package/dist/skills/official/official-release-checklist.md +0 -30
  803. package/dist/skills/official/official-security-hardening.md +0 -32
  804. package/dist/skills/official/official-spec-driven-design.md +0 -31
  805. package/dist/skills/official/planning-with-files.md +0 -241
  806. package/dist/skills/official/ui-ux-pro-max.md +0 -105
  807. package/dist/skills/official/webapp-testing.md +0 -96
  808. package/dist/skills/official-skills.d.ts +0 -26
  809. package/dist/skills/official-skills.d.ts.map +0 -1
  810. package/dist/skills/official-skills.js +0 -73
  811. package/dist/skills/official-skills.js.map +0 -1
  812. package/dist/skills/semantic-matcher.d.ts +0 -60
  813. package/dist/skills/semantic-matcher.d.ts.map +0 -1
  814. package/dist/skills/semantic-matcher.js +0 -192
  815. package/dist/skills/semantic-matcher.js.map +0 -1
  816. package/dist/skills/upgrade-engine.d.ts +0 -93
  817. package/dist/skills/upgrade-engine.d.ts.map +0 -1
  818. package/dist/skills/upgrade-engine.js +0 -447
  819. package/dist/skills/upgrade-engine.js.map +0 -1
  820. package/dist/skills/upgrade-prompt.d.ts +0 -20
  821. package/dist/skills/upgrade-prompt.d.ts.map +0 -1
  822. package/dist/skills/upgrade-prompt.js +0 -75
  823. package/dist/skills/upgrade-prompt.js.map +0 -1
  824. package/dist/web/routes/ai.d.ts +0 -10
  825. package/dist/web/routes/ai.d.ts.map +0 -1
  826. package/dist/web/routes/ai.js +0 -186
  827. package/dist/web/routes/ai.js.map +0 -1
  828. package/dist/web/routes/token-usage.d.ts +0 -7
  829. package/dist/web/routes/token-usage.d.ts.map +0 -1
  830. package/dist/web/routes/token-usage.js +0 -18
  831. package/dist/web/routes/token-usage.js.map +0 -1
  832. package/dist/web/ssrf-guard.d.ts +0 -35
  833. package/dist/web/ssrf-guard.d.ts.map +0 -1
  834. package/dist/web/ssrf-guard.js +0 -93
  835. package/dist/web/ssrf-guard.js.map +0 -1
  836. package/dist/web/static/assets/AIConfig-CdDWzJyO.js +0 -2
  837. package/dist/web/static/assets/AIConfig-CdDWzJyO.js.map +0 -1
  838. package/dist/web/static/assets/Dashboard-CoEmmIDt.js +0 -2
  839. package/dist/web/static/assets/Dashboard-CoEmmIDt.js.map +0 -1
  840. package/dist/web/static/assets/Drawer-DdRTzlLB.js +0 -2
  841. package/dist/web/static/assets/Drawer-DdRTzlLB.js.map +0 -1
  842. package/dist/web/static/assets/Events-DrIq1SUS.js +0 -2
  843. package/dist/web/static/assets/Events-DrIq1SUS.js.map +0 -1
  844. package/dist/web/static/assets/Reports-DFBM3MDK.js +0 -2
  845. package/dist/web/static/assets/Reports-DFBM3MDK.js.map +0 -1
  846. package/dist/web/static/assets/SearchInput-qCj_jAcf.js +0 -2
  847. package/dist/web/static/assets/SearchInput-qCj_jAcf.js.map +0 -1
  848. package/dist/web/static/assets/SessionDetail-CCzwdoT7.js +0 -2
  849. package/dist/web/static/assets/SessionDetail-CCzwdoT7.js.map +0 -1
  850. package/dist/web/static/assets/Sessions-FfLYkAw9.js +0 -2
  851. package/dist/web/static/assets/Sessions-FfLYkAw9.js.map +0 -1
  852. package/dist/web/static/assets/Skills-C8Gvs3Qa.js +0 -2
  853. package/dist/web/static/assets/Skills-C8Gvs3Qa.js.map +0 -1
  854. package/dist/web/static/assets/TaskDetail-BS8pYhaR.js +0 -2
  855. package/dist/web/static/assets/TaskDetail-BS8pYhaR.js.map +0 -1
  856. package/dist/web/static/assets/Tasks-CyuhizG8.js +0 -2
  857. package/dist/web/static/assets/Tasks-CyuhizG8.js.map +0 -1
  858. package/dist/web/static/assets/charts-CLrM0_uM.js +0 -37
  859. package/dist/web/static/assets/charts-CLrM0_uM.js.map +0 -1
  860. package/dist/web/static/assets/date-fns-CZ_bHujz.js +0 -2
  861. package/dist/web/static/assets/date-fns-CZ_bHujz.js.map +0 -1
  862. package/dist/web/static/assets/export-L_VBD2p1.js +0 -4
  863. package/dist/web/static/assets/export-L_VBD2p1.js.map +0 -1
  864. package/dist/web/static/assets/index-CBX47X8l.js +0 -3
  865. package/dist/web/static/assets/index-CBX47X8l.js.map +0 -1
  866. package/dist/web/static/assets/index-DjIoMdoR.css +0 -1
  867. package/dist/web/static/assets/lucide-Bs_edTLa.js +0 -232
  868. package/dist/web/static/assets/lucide-Bs_edTLa.js.map +0 -1
  869. package/dist/web/static/assets/query-C99w429o.js +0 -2
  870. package/dist/web/static/assets/react-vendor-CSp-GLFF.js +0 -49
  871. package/dist/web/static/assets/react-vendor-CSp-GLFF.js.map +0 -1
  872. package/dist/web/static/assets/syntax-highlighter-44FakypI.js +0 -9
  873. package/dist/web/static/assets/syntax-highlighter-44FakypI.js.map +0 -1
  874. package/dist/web/static/assets/task-title-BhOcemuR.js +0 -2
  875. package/dist/web/static/assets/task-title-BhOcemuR.js.map +0 -1
  876. package/dist/web/static/assets/time-Bxuk0M-C.js +0 -2
  877. package/dist/web/static/assets/time-Bxuk0M-C.js.map +0 -1
  878. package/dist/web/static/assets/vendor-CMMjVdZs.js +0 -64
  879. package/dist/web/static/assets/vendor-CMMjVdZs.js.map +0 -1
@@ -0,0 +1,585 @@
1
+ /**
2
+ * PreToolUseHandler — Phase 1 strict-mode rule engine + dry_run shim.
3
+ *
4
+ * Pipeline per event:
5
+ * 1. Build RuleContext (recent_agent_spawn, edited_files, recent_prompt).
6
+ * 2. Detect explicit bypass marker (`forge:bypass=<reason>`) in tool input.
7
+ * 3. Find the first matching ToolInterceptRule from RuleRegistry.
8
+ * 4. Decide & persist:
9
+ * - Flag OFF (default): row written with decision='dry_run'; allow=true.
10
+ * - Flag ON + bypass : decision='bypass'; allow=true.
11
+ * - Flag ON + deny : decision='deny'; allow=false + hookSpecificOutput.
12
+ * - Flag ON + warn : decision='warn'; allow=true + additionalContext.
13
+ *
14
+ * Storage / config failures must never propagate — `tool_intercepts` is a
15
+ * fact table; missing rows are acceptable, breaking the tool pipeline is not.
16
+ *
17
+ * Session-state computed lazily (per-event) instead of cached, to keep the
18
+ * handler stateless across daemon restarts. Phase 2 will fold this into
19
+ * sessions.intercept_count etc. so the lazy scan can be replaced.
20
+ */
21
+ import { RuleRegistry } from '../rules/registry.js';
22
+ import { isWhitelisted, isProjectInterceptDisabled } from '../rules/whitelist.js';
23
+ import { InterceptRollbackGuard } from '../services/intercept-rollback-guard.js';
24
+ /** Spec 1200: workflow-recommender.ts deleted; flag constant inlined here. */
25
+ const WORKFLOW_RECOMMENDER_FLAG = 'workflow_recommender.enabled';
26
+ import { getFilePath, getUserPrompt } from '../../core/event-fields.js';
27
+ import { truncateString } from '../../core/utils/format.js';
28
+ import { logger } from '../../core/utils/logger.js';
29
+ import { readBypassFile } from '../../core/utils/bypass-token.js';
30
+ /** Per-tool max bytes we capture into `tool_intercepts.tool_input_summary`. */
31
+ const SUMMARY_MAX_CHARS = 500;
32
+ /**
33
+ * Sliding-window for "recent agent spawn detected" check (milliseconds).
34
+ *
35
+ * F6 fix (2026-05-27): bumped 30s → 5min and switched the signal source from
36
+ * `hook_type='PostToolUse'` to `'PreToolUse'`. PostToolUse Task events only
37
+ * arrive when the sub-agent COMPLETES (typically 30s–5min+ later), so the old
38
+ * window was guaranteed to miss the main thread's immediate post-spawn
39
+ * coordination — the very window we wanted to relax rules in. PreToolUse Task
40
+ * fires at spawn time, matching the Phase 5 `PHASE5_WINDOW_MS` (5 min).
41
+ */
42
+ const RECENT_AGENT_WINDOW_MS = 5 * 60 * 1000;
43
+ /** Cap on how many PostToolUse events we scan when computing edited_files. */
44
+ const EDIT_HISTORY_SCAN_LIMIT = 200;
45
+ /** Bypass marker regex — captures the optional reason for the audit row. */
46
+ const BYPASS_PATTERN = /forge:bypass=([^\s'"`]*)/;
47
+ /** Feature-flag key probed on every event. */
48
+ const FEATURE_FLAG_KEY = 'pre_tool_intercept.enabled';
49
+ /** v9.x Phase 2 (2026-05-26): hard enforce flag for `task-question-needs-bmad`. */
50
+ const QUESTION_DEFAULT_BMAD_ENFORCE_FLAG = 'question_default_bmad.enforce';
51
+ export class PreToolUseHandler {
52
+ storage;
53
+ configStore;
54
+ registry;
55
+ /**
56
+ * Session → edited-files incremental cache (F7).
57
+ * Cleared per-session on Stop via `clearSession()`.
58
+ */
59
+ editedFilesCache = new Map();
60
+ rollbackGuard;
61
+ constructor(storage, configStore, registry = new RuleRegistry(), rollbackGuard) {
62
+ this.storage = storage;
63
+ this.configStore = configStore;
64
+ this.registry = registry;
65
+ this.rollbackGuard = rollbackGuard ?? new InterceptRollbackGuard(storage, configStore);
66
+ }
67
+ /**
68
+ * Drop cached edited-files state for a session. Called from StopHandler so
69
+ * long-running daemons don't leak per-session Sets forever.
70
+ */
71
+ clearSession(sessionId) {
72
+ this.editedFilesCache.delete(sessionId);
73
+ }
74
+ async handle(event) {
75
+ try {
76
+ const input = event.tool_input;
77
+ // 8-in-1 Phase D (2026-05-27): per-project intercept disable. Projects
78
+ // on the user-configured `disabled_project_prefixes` list skip the rule
79
+ // engine entirely BEFORE the whitelist check — no tool_intercepts rows,
80
+ // no rule lookups, no allow/deny decisions surfaced to the user. Useful
81
+ // for docs-only / tutorial / scratch repos where the noise outweighs
82
+ // value. See `isProjectInterceptDisabled` for path-matching semantics.
83
+ if (isProjectInterceptDisabled(event.project_path, this.configStore)) {
84
+ return { allow: true };
85
+ }
86
+ // Safety-net #1 (Phase 2c): whitelist early-exit. Read/Glob/Grep + a
87
+ // small set of project-essential Bash commands skip the rule engine
88
+ // entirely. We deliberately do NOT write a tool_intercepts row here —
89
+ // the table is for "rule fired" observability, not for every tool call.
90
+ if (isWhitelisted(event.tool_name, input)) {
91
+ return { allow: true };
92
+ }
93
+ const ctx = this.buildContext(event);
94
+ const rule = this.registry.findFirstMatch(event.tool_name, input, ctx);
95
+ if (!rule) {
96
+ // Cheap fast path: no rule fired → nothing to log.
97
+ return { allow: true };
98
+ }
99
+ const flagEnabled = this.isFlagEnabled();
100
+ const inlineBypass = extractBypassToken(input);
101
+ // Safety-net #2 (Phase 2c): bypass token file (~/.claude-forge/bypass.token).
102
+ // Treated identically to the inline `forge:bypass=` marker. File bypass
103
+ // wins if both are present; either is sufficient.
104
+ const fileBypass = readBypassFile();
105
+ const bypassToken = inlineBypass !== null
106
+ ? inlineBypass
107
+ : fileBypass !== null
108
+ ? `file:${fileBypass.token.slice(0, 8)}:${fileBypass.reason}`.slice(0, 200)
109
+ : null;
110
+ const summary = buildToolInputSummary(input);
111
+ const hintText = safeHint(rule, input, ctx);
112
+ // Safety-net #4 (Phase 2c): observation_until lets a freshly-added rule
113
+ // ride along in dry_run mode for the first 24h even when the flag is ON.
114
+ const inObservationWindow = isInObservationWindow(rule, event.timestamp);
115
+ // Compute the decision actually persisted in the row.
116
+ // 'ask' (spec 1200 decision-hint-pending) maps to 'warn' in storage —
117
+ // both are non-blocking; 'ask' vs 'warn' is a semantic distinction in
118
+ // the rule definition only. The CHECK constraint in schema.sql only
119
+ // allows 'deny' | 'warn' | 'bypass' | 'dry_run'.
120
+ let persistedDecision;
121
+ if (!flagEnabled) {
122
+ persistedDecision = 'dry_run';
123
+ }
124
+ else if (bypassToken !== null) {
125
+ persistedDecision = 'bypass';
126
+ }
127
+ else if (inObservationWindow) {
128
+ persistedDecision = 'dry_run';
129
+ }
130
+ else {
131
+ persistedDecision = rule.decision === 'ask' ? 'warn' : rule.decision;
132
+ }
133
+ this.persistIntercept({
134
+ event,
135
+ rule,
136
+ decision: persistedDecision,
137
+ hint: hintText,
138
+ summary,
139
+ bypassToken,
140
+ });
141
+ // Build the HookResponse sent back to Claude Code.
142
+ if (!flagEnabled) {
143
+ logger.debug(`[PreToolUse] dry_run ${rule.id} on ${event.tool_name} (flag OFF, would have ${rule.decision}ed)`);
144
+ return { allow: true };
145
+ }
146
+ if (bypassToken !== null) {
147
+ logger.info(`[PreToolUse] bypass ${rule.id} on ${event.tool_name} (token=${truncateString(bypassToken || '<no-reason>', 40)})`);
148
+ return { allow: true };
149
+ }
150
+ if (inObservationWindow) {
151
+ logger.info(`[PreToolUse] dry_run ${rule.id} on ${event.tool_name} (rule in observation window until ${rule.observation_until})`);
152
+ return { allow: true };
153
+ }
154
+ if (rule.decision === 'deny') {
155
+ logger.info(`[PreToolUse] DENY ${rule.id} on ${event.tool_name}`);
156
+ // Safety-net #3: count denies in the last 60s; trigger auto-rollback
157
+ // when threshold reached. The rollback writes config flags but does
158
+ // NOT change THIS event's deny outcome — the next deny would be
159
+ // dry_run because the flag is now OFF.
160
+ const rb = this.rollbackGuard.checkAndMaybeRollback({
161
+ sessionId: event.session_id,
162
+ nowIso: event.timestamp,
163
+ });
164
+ const response = {
165
+ allow: false,
166
+ reason: hintText,
167
+ hookSpecificOutput: {
168
+ hookEventName: 'PreToolUse',
169
+ permissionDecision: 'deny',
170
+ permissionDecisionReason: hintText,
171
+ },
172
+ };
173
+ if (rb.triggered && rb.additionalContext) {
174
+ response.systemMessage = rb.additionalContext;
175
+ }
176
+ return response;
177
+ }
178
+ // warn / ask — non-blocking, attach a contextual hint.
179
+ // 'ask' (decision-hint-pending) behaves identically to 'warn' at the
180
+ // transport layer; the distinction is semantic (one-sided advisory vs
181
+ // interactive prompt for future 'deny' upgrade path).
182
+ logger.info(`[PreToolUse] ${rule.decision.toUpperCase()} ${rule.id} on ${event.tool_name}`);
183
+ return {
184
+ allow: true,
185
+ additionalContext: hintText,
186
+ };
187
+ }
188
+ catch (err) {
189
+ // Last-line backstop: handler errors must never break tool execution.
190
+ logger.warn(`[PreToolUse] handler failed (allowing tool): ${err}`);
191
+ return { allow: true };
192
+ }
193
+ }
194
+ // ── Private ──────────────────────────────────────────────────────────────
195
+ isFlagEnabled() {
196
+ try {
197
+ return this.configStore.isEnabled(FEATURE_FLAG_KEY);
198
+ }
199
+ catch (err) {
200
+ logger.debug(`[PreToolUse] ConfigStore probe failed (default OFF): ${err}`);
201
+ return false;
202
+ }
203
+ }
204
+ buildContext(event) {
205
+ const { files: editedFiles, withTs: editedFilesWithTs } = this.computeEditedFilesWithTs(event.session_id);
206
+ const recentAgentSpawn = this.detectRecentAgentSpawn(event.session_id, event.timestamp);
207
+ const lastSpawnTs = this.getLastSpawnTs(event.session_id, event.timestamp);
208
+ const recentPrompt = this.fetchRecentPrompt(event.session_id);
209
+ const pendingWorkflowRec = this.fetchPendingWorkflowRec(event.session_id);
210
+ const questionDefaultBmadEnforce = this.probeQuestionDefaultBmadEnforce();
211
+ return {
212
+ session_id: event.session_id,
213
+ project_path: event.project_path,
214
+ timestamp_ms: parseTimestampMs(event.timestamp),
215
+ recent_agent_spawn: recentAgentSpawn,
216
+ edited_files: editedFiles,
217
+ edited_files_with_ts: editedFilesWithTs,
218
+ last_spawn_ts: lastSpawnTs,
219
+ recent_prompt: recentPrompt,
220
+ pending_workflow_rec: pendingWorkflowRec,
221
+ question_default_bmad_enforce: questionDefaultBmadEnforce,
222
+ };
223
+ }
224
+ /**
225
+ * v9.x Phase 2 (2026-05-26): probe `question_default_bmad.enforce`. Default
226
+ * false during the 7-day dry_run window starting 2026-05-26. Storage /
227
+ * config failures degrade to `false` (fail-safe — keep dry_run behaviour).
228
+ */
229
+ probeQuestionDefaultBmadEnforce() {
230
+ try {
231
+ return this.configStore.isEnabled(QUESTION_DEFAULT_BMAD_ENFORCE_FLAG);
232
+ }
233
+ catch (err) {
234
+ logger.debug(`[PreToolUse] probeQuestionDefaultBmadEnforce failed: ${err}`);
235
+ return false;
236
+ }
237
+ }
238
+ /**
239
+ * Phase 5: load the most recent PENDING workflow recommendation for the
240
+ * session so the `workflow-recommendation-mismatch` rule can fire without
241
+ * doing its own DB lookup. Returns null when:
242
+ * • Phase 5 feature flag is OFF (no row should be enforced)
243
+ * • no pending row exists
244
+ * • lookup throws (degrade silently to "no enforcement")
245
+ */
246
+ fetchPendingWorkflowRec(sessionId) {
247
+ try {
248
+ if (!this.configStore.isEnabled(WORKFLOW_RECOMMENDER_FLAG))
249
+ return null;
250
+ const rows = this.storage.queryWorkflowRecommendations({
251
+ session_id: sessionId,
252
+ outcome: 'pending',
253
+ limit: 1,
254
+ });
255
+ if (rows.length === 0)
256
+ return null;
257
+ const r = rows[0];
258
+ return {
259
+ id: r.id,
260
+ rule_id: r.rule_id,
261
+ recommended_agent_type: r.recommended_agent_type,
262
+ recommended_workflow: r.recommended_workflow,
263
+ reason: r.reason,
264
+ timestamp: r.timestamp,
265
+ };
266
+ }
267
+ catch (err) {
268
+ logger.debug(`[PreToolUse] fetchPendingWorkflowRec failed: ${err}`);
269
+ return null;
270
+ }
271
+ }
272
+ /**
273
+ * Distinct file_paths edited in PostToolUse Edit/Write events for the session.
274
+ *
275
+ * F7 fix: incremental cache keyed by session_id. First call scans up to
276
+ * `EDIT_HISTORY_SCAN_LIMIT` events; subsequent calls fetch only events with
277
+ * `timestamp >= maxTs` (Set dedup absorbs the boundary). A session with N
278
+ * PreToolUse events now amortizes to O(N) total scan work instead of O(N·200).
279
+ *
280
+ * Returns a fresh copy of the Set so rule matchers can't mutate cached state.
281
+ */
282
+ computeEditedFiles(sessionId) {
283
+ return this.computeEditedFilesWithTs(sessionId).files;
284
+ }
285
+ /**
286
+ * P0-1 fix (2026-05-27): same as `computeEditedFiles` but additionally
287
+ * surfaces per-file last-edit ISO timestamp so the HARD multi-file rule can
288
+ * drop pre-spawn entries. The Set is preserved as the legacy `files`
289
+ * companion for callers (rule matchers, hint factories) that don't need
290
+ * timing.
291
+ *
292
+ * Cache shape was upgraded (added `fileTs: Map<string,string>`) but the
293
+ * incremental-scan invariant is unchanged: we only fetch events newer than
294
+ * the cached `maxTs` and merge into the existing fileTs map (`Map.set`
295
+ * naturally overwrites with the newest ts since queryEvents returns DESC).
296
+ */
297
+ computeEditedFilesWithTs(sessionId) {
298
+ try {
299
+ const cached = this.editedFilesCache.get(sessionId);
300
+ const filter = {
301
+ session_id: sessionId,
302
+ hook_type: 'PostToolUse',
303
+ limit: EDIT_HISTORY_SCAN_LIMIT,
304
+ };
305
+ if (cached)
306
+ filter.since = cached.maxTs;
307
+ const events = this.storage.queryEvents(filter);
308
+ const files = cached ? cached.files : new Set();
309
+ const fileTs = cached ? cached.fileTs : new Map();
310
+ // queryEvents returns DESC by timestamp; track the newest timestamp seen.
311
+ let newMaxTs = cached?.maxTs ?? '';
312
+ for (const e of events) {
313
+ if (e.timestamp > newMaxTs)
314
+ newMaxTs = e.timestamp;
315
+ if (e.tool_name !== 'Edit' && e.tool_name !== 'Write')
316
+ continue;
317
+ const fp = getFilePath(e);
318
+ if (!fp)
319
+ continue;
320
+ files.add(fp);
321
+ // Keep the LATEST timestamp per file (events DESC; only overwrite
322
+ // when the cached value is missing or strictly older).
323
+ const prev = fileTs.get(fp);
324
+ if (!prev || e.timestamp > prev)
325
+ fileTs.set(fp, e.timestamp);
326
+ }
327
+ // Persist updated entry only if we observed any state to track.
328
+ if (newMaxTs) {
329
+ this.editedFilesCache.set(sessionId, { files, fileTs, maxTs: newMaxTs });
330
+ }
331
+ // Return fresh copies so rule matchers can't mutate cached state.
332
+ const withTs = [];
333
+ for (const [path, ts] of fileTs.entries())
334
+ withTs.push({ path, ts });
335
+ return { files: new Set(files), withTs };
336
+ }
337
+ catch (err) {
338
+ logger.debug(`[PreToolUse] computeEditedFilesWithTs failed: ${err}`);
339
+ return { files: new Set(), withTs: [] };
340
+ }
341
+ }
342
+ /**
343
+ * P0-1 fix (2026-05-27): timestamp of the most recent PreToolUse Task/Agent
344
+ * event within the F6 5-min window. Returns null when no spawn was observed.
345
+ * Uses the same query shape as `detectRecentAgentSpawn` so callers don't pay
346
+ * twice (storage layer prepared-stmt cache absorbs the duplicate).
347
+ */
348
+ getLastSpawnTs(sessionId, eventTs) {
349
+ try {
350
+ const nowMs = parseTimestampMs(eventTs);
351
+ const events = this.storage.queryEvents({
352
+ session_id: sessionId,
353
+ hook_type: 'PreToolUse',
354
+ limit: 100,
355
+ });
356
+ for (const e of events) {
357
+ if (e.tool_name !== 'Agent' && e.tool_name !== 'Task')
358
+ continue;
359
+ const eTs = parseTimestampMs(e.timestamp);
360
+ if (nowMs - eTs <= RECENT_AGENT_WINDOW_MS)
361
+ return e.timestamp;
362
+ }
363
+ return null;
364
+ }
365
+ catch (err) {
366
+ logger.debug(`[PreToolUse] getLastSpawnTs failed: ${err}`);
367
+ return null;
368
+ }
369
+ }
370
+ /**
371
+ * Did the session spawn an agent (Task / Agent tool) within the recent
372
+ * observation window?
373
+ *
374
+ * F6 fix (2026-05-27): query `PreToolUse` (spawn-initiated) instead of
375
+ * `PostToolUse` (spawn-completed). PostToolUse Task events only arrive
376
+ * 30s–5min+ after spawn (when the sub-agent finishes), so the previous
377
+ * 30s window was permanently false during the actual post-spawn
378
+ * coordination period the rule was designed to relax. PreToolUse Task
379
+ * fires at the spawn instant; combined with the 5-min window (aligned
380
+ * with Phase 5 `PHASE5_WINDOW_MS`), the main thread now correctly sees
381
+ * `recent_agent_spawn=true` during BMAD coordination.
382
+ *
383
+ * `limit` bumped from 40 → 100 because a 5-min window can hold many more
384
+ * spawn events than the prior 30s window.
385
+ */
386
+ detectRecentAgentSpawn(sessionId, eventTs) {
387
+ try {
388
+ const nowMs = parseTimestampMs(eventTs);
389
+ const events = this.storage.queryEvents({
390
+ session_id: sessionId,
391
+ hook_type: 'PreToolUse',
392
+ limit: 100,
393
+ });
394
+ for (const e of events) {
395
+ if (e.tool_name !== 'Agent' && e.tool_name !== 'Task')
396
+ continue;
397
+ const eTs = parseTimestampMs(e.timestamp);
398
+ if (nowMs - eTs <= RECENT_AGENT_WINDOW_MS)
399
+ return true;
400
+ }
401
+ return false;
402
+ }
403
+ catch (err) {
404
+ logger.debug(`[PreToolUse] detectRecentAgentSpawn failed: ${err}`);
405
+ return false;
406
+ }
407
+ }
408
+ /** Most-recent UserPromptSubmit prompt text (best-effort, used for intent relaxation). */
409
+ fetchRecentPrompt(sessionId) {
410
+ try {
411
+ const events = this.storage.queryEvents({
412
+ session_id: sessionId,
413
+ hook_type: 'UserPromptSubmit',
414
+ limit: 1,
415
+ });
416
+ if (events.length === 0)
417
+ return '';
418
+ const p = getUserPrompt(events[0]);
419
+ return p ?? '';
420
+ }
421
+ catch (err) {
422
+ logger.debug(`[PreToolUse] fetchRecentPrompt failed: ${err}`);
423
+ return '';
424
+ }
425
+ }
426
+ persistIntercept(args) {
427
+ try {
428
+ this.storage.writeToolIntercept({
429
+ event_id: args.event.event_id ?? null,
430
+ session_id: args.event.session_id,
431
+ project_path: args.event.project_path,
432
+ timestamp: args.event.timestamp,
433
+ tool_name: args.event.tool_name,
434
+ tool_input_summary: args.summary,
435
+ rule_id: args.rule.id,
436
+ decision: args.decision,
437
+ hint: args.hint,
438
+ bypass_token: args.bypassToken,
439
+ });
440
+ }
441
+ catch (err) {
442
+ logger.warn(`[PreToolUse] writeToolIntercept failed: ${err}`);
443
+ }
444
+ }
445
+ }
446
+ // ── Module helpers ─────────────────────────────────────────────────────────
447
+ function parseTimestampMs(ts) {
448
+ const ms = Date.parse(ts);
449
+ return Number.isFinite(ms) ? ms : Date.now();
450
+ }
451
+ /**
452
+ * Build a compact, secret-scrubbed summary of the tool input for audit logs.
453
+ * The full input may contain credentials (Bash command env vars, etc.) so we
454
+ * truncate aggressively and redact common secret keywords.
455
+ */
456
+ function buildToolInputSummary(input) {
457
+ const pieces = [];
458
+ if (typeof input.command === 'string')
459
+ pieces.push(`command=${input.command}`);
460
+ if (typeof input.file_path === 'string')
461
+ pieces.push(`file=${input.file_path}`);
462
+ if (typeof input.subagent_type === 'string')
463
+ pieces.push(`subagent=${input.subagent_type}`);
464
+ if (typeof input.description === 'string')
465
+ pieces.push(`desc=${input.description}`);
466
+ if (typeof input.new_string === 'string') {
467
+ pieces.push(`new=${truncateString(input.new_string, 80)}`);
468
+ }
469
+ const joined = pieces.join(' | ');
470
+ return truncateString(redactSecrets(joined), SUMMARY_MAX_CHARS);
471
+ }
472
+ /**
473
+ * Shape-based secret redaction patterns (audit F-medium #5, 2026-05-26).
474
+ *
475
+ * Applied to the `tool_input_summary` string we persist into `tool_intercepts`
476
+ * for auditing. The raw `tool_input` JSON is NEVER redacted at the rule-engine
477
+ * level (rules legitimately need to inspect verbatim arguments); we only
478
+ * scrub the *summary* that gets written to durable storage and surfaced in
479
+ * the Web UI / weekly report.
480
+ *
481
+ * Order matters: longer / more specific patterns first so they're not
482
+ * partially eaten by a more general regex on the same span.
483
+ *
484
+ * Patterns covered:
485
+ * 1. CLI-flag style: --token=…, --api-key=…, password=…, secret=…
486
+ * 2. JWT shape: eyJ<base64>.<base64>.<base64>
487
+ * 3. Anthropic / OpenAI keys: sk-… (40+ chars)
488
+ * 4. Slack bot tokens: xoxb-… (40+ chars)
489
+ * 5. AWS access key IDs: AKIA + 16 alnum uppercase
490
+ * 6. Long hex strings (>= 32 chars) — catches hex API keys / session tokens
491
+ *
492
+ * Exported (under-test) for unit tests in pre-tool-use.test.ts so we can lock
493
+ * down each shape with a focused assertion.
494
+ */
495
+ /**
496
+ * Shared redaction pattern table. Each entry is either:
497
+ * • `prefixed: true` — the regex has a single capture group that names the
498
+ * key (e.g. `--token=`); replacement preserves the
499
+ * prefix and substitutes `<redacted>` for the value.
500
+ * • `prefixed: false` — the regex matches the entire secret literal; the
501
+ * whole match is replaced with `<redacted>`.
502
+ *
503
+ * Exported so tests can lock down each shape individually.
504
+ */
505
+ export const SECRET_REDACTION_PATTERNS = [
506
+ // 1a. CLI flag forms (--token=… / --token …).
507
+ { name: 'flag-token', re: /(--token[= ])[^\s]+/gi, prefixed: true },
508
+ { name: 'flag-api-key', re: /(--api[-_]?key[= ])[^\s]+/gi, prefixed: true },
509
+ // 1b. key=value forms — match `password=…` / `secret=…` even when embedded
510
+ // mid-string (no leading word boundary required, matches legacy behavior).
511
+ { name: 'password-kv', re: /(password[= ])[^\s]+/gi, prefixed: true },
512
+ { name: 'secret-kv', re: /(secret[= ])[^\s]+/gi, prefixed: true },
513
+ // 2. JWT — three base64url segments separated by `.`. Require ≥20 chars per
514
+ // segment so file paths like "a.b.c" don't match.
515
+ {
516
+ name: 'jwt',
517
+ re: /eyJ[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{20,}\.[A-Za-z0-9_-]{20,}/g,
518
+ prefixed: false,
519
+ },
520
+ // 3. Anthropic / OpenAI / sk- prefixed keys.
521
+ { name: 'sk-key', re: /\bsk-[A-Za-z0-9_-]{32,}/g, prefixed: false },
522
+ // 4. Slack tokens: xoxb-/xoxp-/xoxa-/xoxr-/xoxs-.
523
+ { name: 'slack-token', re: /\bxox[abprs]-[A-Za-z0-9-]{20,}/g, prefixed: false },
524
+ // 5. AWS access key id: AKIA + 16 uppercase alnum.
525
+ { name: 'aws-akid', re: /\bAKIA[0-9A-Z]{16}\b/g, prefixed: false },
526
+ // 6. Long lowercase hex blobs (≥32 chars). Common for hex API keys + signed
527
+ // session IDs. Applied LAST so named patterns above keep their shape.
528
+ { name: 'long-hex', re: /\b[a-f0-9]{32,}\b/g, prefixed: false },
529
+ ];
530
+ /**
531
+ * Apply all `SECRET_REDACTION_PATTERNS` to a string. Exported for unit tests;
532
+ * production callers should go through `buildToolInputSummary`.
533
+ */
534
+ export function redactSecrets(s) {
535
+ let out = s;
536
+ for (const p of SECRET_REDACTION_PATTERNS) {
537
+ out = p.prefixed
538
+ ? out.replace(p.re, '$1<redacted>')
539
+ : out.replace(p.re, '<redacted>');
540
+ }
541
+ return out;
542
+ }
543
+ function extractBypassToken(input) {
544
+ const candidates = [];
545
+ if (typeof input.command === 'string')
546
+ candidates.push(input.command);
547
+ if (typeof input.new_string === 'string')
548
+ candidates.push(input.new_string);
549
+ if (typeof input.content === 'string')
550
+ candidates.push(input.content);
551
+ if (typeof input.description === 'string')
552
+ candidates.push(input.description);
553
+ for (const c of candidates) {
554
+ const m = c.match(BYPASS_PATTERN);
555
+ if (m)
556
+ return m[1] ?? '';
557
+ }
558
+ return null;
559
+ }
560
+ /**
561
+ * Phase 2c safety-net #4: rule "observation window" check.
562
+ * Returns true when the rule has `observation_until` set AND that timestamp is
563
+ * AFTER the current event timestamp. In that case the handler force-demotes
564
+ * the persisted decision to `dry_run` and returns allow=true.
565
+ */
566
+ function isInObservationWindow(rule, eventTs) {
567
+ if (!rule.observation_until)
568
+ return false;
569
+ const untilMs = Date.parse(rule.observation_until);
570
+ if (!Number.isFinite(untilMs))
571
+ return false;
572
+ const eventMs = Date.parse(eventTs);
573
+ const refMs = Number.isFinite(eventMs) ? eventMs : Date.now();
574
+ return refMs < untilMs;
575
+ }
576
+ function safeHint(rule, input, ctx) {
577
+ try {
578
+ return rule.hint(input, ctx);
579
+ }
580
+ catch (err) {
581
+ logger.debug(`[PreToolUse] rule.hint threw: ${err}`);
582
+ return `Rule ${rule.id} matched (hint unavailable due to internal error).`;
583
+ }
584
+ }
585
+ //# sourceMappingURL=pre-tool-use.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pre-tool-use.js","sourceRoot":"","sources":["../../../src/daemon/handlers/pre-tool-use.ts"],"names":[],"mappings":"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"}