@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,487 @@
1
+ /**
2
+ * DecisionHint — formats the [DECISION HINT] systemMessage that daemon emits
3
+ * when a prompt is long enough and passes noise/bypass guards.
4
+ *
5
+ * 2026-05-27 Spec 1702: replaces the deleted `SpecGate.tryAutoGenerate` at
6
+ * step 4.5. Instead of silently generating a spec (0% real-world acceptance),
7
+ * the daemon now emits an explicit hint telling the main thread to spawn the
8
+ * `decision-maker` agent.
9
+ *
10
+ * 2026-05-28 decision-flow-overhaul (spec §5.1):
11
+ * - Added `isSystemGeneratedPrompt()` guard (G9 fix): skip noise prompts
12
+ * injected by daemon itself (<task-notification>, <forge-resume-body>, etc.)
13
+ * - Added `isSkipDecisionKeyword()`: bypass token check for "skip decision"
14
+ * - `emitDecisionHint()` now accepts optional SQLiteStorage + event context
15
+ * and writes a `decisions` table row, returning `{ message, decision_id }`
16
+ * instead of a bare string so UserPromptHandler can embed the id in the hint
17
+ *
18
+ * 2026-05-28 Spec 1200 (daemon decision-layer simplification):
19
+ * - Removed intent dependency — trigger is now pure length check:
20
+ * `prompt.length >= TRIGGER_LEN && !isNoise(prompt) && !hasBypass(prompt)`
21
+ * - TRIGGER_LEN configurable via `forge_config.decision_trigger_len` (default 50)
22
+ *
23
+ * Fail-safe: all errors are caught and return `null`; the pipeline keeps running.
24
+ */
25
+ import { randomBytes } from 'node:crypto';
26
+ import { logger } from '../../core/utils/logger.js';
27
+ /**
28
+ * Default minimum prompt length to trigger a decision hint.
29
+ *
30
+ * Set to 0 per 用户诉求 "必须要走" — every non-noise / non-bypass prompt routes
31
+ * to decision-maker. Users wanting to cap short prompts can override via
32
+ * `forge_config.decision_trigger_len`.
33
+ */
34
+ export const DEFAULT_TRIGGER_LEN = 0;
35
+ /** forge_config key for overriding trigger length (spec Q7). */
36
+ export const TRIGGER_LEN_CONFIG_KEY = 'decision_trigger_len';
37
+ /**
38
+ * decision 7aa0ec63 (2026-06-01 Option C) — cooldown configuration.
39
+ *
40
+ * forge_config key for overriding the per-session decision-maker spawn cooldown
41
+ * (in seconds). When the daemon emitted a hint that the main thread satisfied
42
+ * by actually spawning `decision-maker` (visible as a PreToolUse Task event),
43
+ * we suppress further hints for this many seconds. The same session can still
44
+ * spawn a fresh maker by adding "skip decision" or by waiting out the window.
45
+ *
46
+ * Default: 60 s (covers a typical "read decision doc → approve" loop).
47
+ * Sane range: 0 < value <= 3600. Values outside that range fall back to the
48
+ * default; daemon startup logs a warning so users notice typos.
49
+ */
50
+ export const DECISION_MAKER_COOLDOWN_CONFIG_KEY = 'decision_maker_cooldown_seconds';
51
+ /** Default cooldown when forge_config has no override or holds a bad value. */
52
+ export const DEFAULT_DECISION_MAKER_COOLDOWN_SECONDS = 60;
53
+ /** Hard upper bound for the cooldown override (1 hour). */
54
+ export const MAX_DECISION_MAKER_COOLDOWN_SECONDS = 3600;
55
+ /** Max chars to include in the hint intent summary. */
56
+ const HINT_SUMMARY_MAX = 150;
57
+ /**
58
+ * Pattern for system-generated prompt prefixes (G9 fix).
59
+ *
60
+ * Daemon injects several envelope types into the conversation:
61
+ * - <task-notification> — when a sub-agent starts/finishes
62
+ * - <task-id> — task tracking metadata
63
+ * - <forge-resume-body> — session resume context
64
+ * - <system-reminder> — periodic rule reminder
65
+ * - <local-command-stdout> / <command-message> — shell output
66
+ * - <!-- forge:… — forge magic markers
67
+ *
68
+ * When any of these appear at the start of the prompt, it is daemon-generated
69
+ * and should NOT trigger a decision hint.
70
+ */
71
+ const SYSTEM_PROMPT_PATTERNS = [
72
+ /^<task-notification>/i,
73
+ /^<task-id>/i,
74
+ /^<forge-resume-body>/i,
75
+ /^<system-reminder>/i,
76
+ /^<local-command-stdout>/i,
77
+ /^<command-message>/i,
78
+ /^<command-name>/i,
79
+ /^<!--\s*forge:/i,
80
+ // Guard against prompts that are ONLY daemon-injected tags (e.g. multi-tag blocks)
81
+ /^\s*<[a-z-]+>\s*$/i,
82
+ ];
83
+ /**
84
+ * Returns true when the prompt appears to be daemon-injected content
85
+ * rather than a genuine user message. Guards against G9 false positives
86
+ * where daemon-inserted task-notification blobs triggered [DECISION HINT].
87
+ */
88
+ export function isSystemGeneratedPrompt(prompt) {
89
+ const trimmed = prompt.trim();
90
+ return SYSTEM_PROMPT_PATTERNS.some(re => re.test(trimmed));
91
+ }
92
+ /**
93
+ * Returns true when the user has included the "skip decision" bypass keyword.
94
+ * This is the OQ3 answer: natural-language bypass (same pattern as
95
+ * bmad-question-default's "直接修" / "skip" escapes).
96
+ */
97
+ export function isSkipDecisionKeyword(prompt) {
98
+ return /skip\s+decision/i.test(prompt);
99
+ }
100
+ /**
101
+ * Resolve the effective TRIGGER_LEN from forge_config or use the default.
102
+ * Used by UserPromptHandler (Step 4.5) to pass into emitDecisionHintSimple.
103
+ */
104
+ export function resolveTriggerLen(storage) {
105
+ if (!storage)
106
+ return DEFAULT_TRIGGER_LEN;
107
+ try {
108
+ const raw = storage.readConfig(TRIGGER_LEN_CONFIG_KEY);
109
+ if (raw !== undefined && raw !== null) {
110
+ const n = Number(raw);
111
+ if (Number.isFinite(n) && n >= 0)
112
+ return n;
113
+ }
114
+ }
115
+ catch {
116
+ // fail-silent
117
+ }
118
+ return DEFAULT_TRIGGER_LEN;
119
+ }
120
+ /**
121
+ * decision 7aa0ec63 (Option C, Q1 + Q6) — resolve the per-session
122
+ * decision-maker spawn cooldown from forge_config, with default fallback.
123
+ *
124
+ * Read from `forge_config.decision_maker_cooldown_seconds`. Values outside
125
+ * `(0, MAX_DECISION_MAKER_COOLDOWN_SECONDS]` are treated as invalid and
126
+ * the default is returned. Caller is expected to log a warn separately when
127
+ * an invalid value is rejected (daemon startup does this once at boot).
128
+ */
129
+ export function resolveDecisionMakerCooldownSeconds(storage) {
130
+ if (!storage)
131
+ return DEFAULT_DECISION_MAKER_COOLDOWN_SECONDS;
132
+ try {
133
+ const raw = storage.readConfig(DECISION_MAKER_COOLDOWN_CONFIG_KEY);
134
+ if (raw === undefined || raw === null) {
135
+ return DEFAULT_DECISION_MAKER_COOLDOWN_SECONDS;
136
+ }
137
+ const n = Number(raw);
138
+ if (!Number.isFinite(n))
139
+ return DEFAULT_DECISION_MAKER_COOLDOWN_SECONDS;
140
+ if (n <= 0)
141
+ return DEFAULT_DECISION_MAKER_COOLDOWN_SECONDS;
142
+ if (n > MAX_DECISION_MAKER_COOLDOWN_SECONDS) {
143
+ return DEFAULT_DECISION_MAKER_COOLDOWN_SECONDS;
144
+ }
145
+ return n;
146
+ }
147
+ catch {
148
+ return DEFAULT_DECISION_MAKER_COOLDOWN_SECONDS;
149
+ }
150
+ }
151
+ /**
152
+ * decision 7aa0ec63 (Option C, Q2 + Q6) — session-scoped cooldown check.
153
+ *
154
+ * Returns true when this session spawned `decision-maker` (PreToolUse Task
155
+ * event with `tool_input.subagent_type === 'decision-maker'`) within the last
156
+ * `windowSeconds` seconds. The main thread is currently working through a
157
+ * recent maker output; emitting a fresh hint would just stack pending rows.
158
+ *
159
+ * Source-of-truth = `events` table (per Q6): persistent across daemon restart,
160
+ * trivially injectable in unit tests, and same fixture pattern reused from
161
+ * `findRecentDecisionMakerSpawn` (src/cli/commands/decisions.ts §B). The
162
+ * narrower 60 s window (vs 5 min in approve-governance) targets the actual
163
+ * "back-to-back batch nudge" symptom this gate exists for.
164
+ *
165
+ * Fail-silent — if storage.queryEvents throws, returns false so the regular
166
+ * emit path still runs (better to over-emit than swallow a real decision).
167
+ */
168
+ export function isWithinDecisionMakerCoolDown(storage, session_id, windowSeconds, nowMs = Date.now()) {
169
+ if (!session_id)
170
+ return false;
171
+ if (!Number.isFinite(windowSeconds) || windowSeconds <= 0)
172
+ return false;
173
+ const sinceIso = new Date(nowMs - windowSeconds * 1000).toISOString();
174
+ try {
175
+ const rows = storage.queryEvents({
176
+ session_id,
177
+ hook_type: 'PreToolUse',
178
+ since: sinceIso,
179
+ limit: 200,
180
+ });
181
+ for (const ev of rows) {
182
+ if ((ev.tool_name ?? '') !== 'Task')
183
+ continue;
184
+ const input = (ev.tool_input ?? {});
185
+ const sub = typeof input['subagent_type'] === 'string' ? input['subagent_type'] : '';
186
+ if (sub === 'decision-maker')
187
+ return true;
188
+ }
189
+ }
190
+ catch {
191
+ // Fail-silent — degrade to "no cooldown" so we still emit. Safer than
192
+ // accidentally suppressing a real decision.
193
+ }
194
+ return false;
195
+ }
196
+ /**
197
+ * Main entry point — pure length-based trigger (spec 1200 simplification).
198
+ *
199
+ * Guards (in order):
200
+ * 1. skip-decision bypass keyword
201
+ * 2. prompt.length < TRIGGER_LEN
202
+ * 3. system-generated prompt (G9 fix)
203
+ *
204
+ * When all guards pass:
205
+ * 1. Writes a `decisions` row (status='pending') to the DB (fail-silent)
206
+ * 2. Returns `{ message, decision_id }` — UserPromptHandler splices
207
+ * `decision_id: <id>` into the systemMessage
208
+ *
209
+ * Returns `null` when any guard fires (no DB write, no systemMessage).
210
+ *
211
+ * @param prompt - The raw user prompt text.
212
+ * @param triggerLen - Minimum prompt length (default DEFAULT_TRIGGER_LEN=50).
213
+ * @param storage - Optional SQLiteStorage for persisting the decision row.
214
+ * @param eventContext - Optional event fields for the DB row.
215
+ */
216
+ export function emitDecisionHintSimple(prompt, triggerLen = DEFAULT_TRIGGER_LEN, storage, eventContext) {
217
+ // Guard: bypass keyword → respect user's wish.
218
+ if (isSkipDecisionKeyword(prompt))
219
+ return null;
220
+ // Guard: short prompts (only enforced if triggerLen > 0; default 0 = always emit).
221
+ if (triggerLen > 0 && prompt.length < triggerLen)
222
+ return null;
223
+ // G9 fix: skip system-generated prompts (daemon-injected envelopes).
224
+ if (isSystemGeneratedPrompt(prompt))
225
+ return null;
226
+ // decision 7aa0ec63 (Option C) — per-session decision-maker spawn cooldown.
227
+ // If the main thread already spawned decision-maker for THIS session within
228
+ // the cooldown window, suppress new hints. The deny gate
229
+ // (decision-hint-pending rule) keeps enforcing the existing pending row;
230
+ // we just stop stacking duplicates while the main thread is mid-flight.
231
+ if (storage && eventContext?.session_id) {
232
+ try {
233
+ const cooldownSeconds = resolveDecisionMakerCooldownSeconds(storage);
234
+ if (isWithinDecisionMakerCoolDown(storage, eventContext.session_id, cooldownSeconds)) {
235
+ logger.debug(`[DecisionHint] gate=cooldown (session=${eventContext.session_id}, ` +
236
+ `window=${cooldownSeconds}s)`);
237
+ return null;
238
+ }
239
+ }
240
+ catch (err) {
241
+ logger.debug(`[DecisionHint] cooldown lookup failed (proceeding): ${err}`);
242
+ }
243
+ }
244
+ // Spec 1944 §8 (trivial filter): drop very short trivial replies (`批准`/
245
+ // `ok`/`继续` …). `&&` with length<TRIVIAL_MAX_LEN avoids killing
246
+ // meaningful short prompts like `rebase`/`fix lint` (not in the keyword
247
+ // regex) or `批准 abc12345` (length ≥ 10).
248
+ if (isLikelyTrivial(prompt) && prompt.length < TRIVIAL_MAX_LEN) {
249
+ logger.debug(`[DecisionHint] gate=trivial keywords-match (len=${prompt.length})`);
250
+ return null;
251
+ }
252
+ // Option B (decision b95e0956, 2026-05-29 — Q1+Q2): continuation skip.
253
+ // When the session has ≥3 resolved decisions and the most recent is within
254
+ // 30 min AND the prompt contains a continuation keyword, suppress the new
255
+ // hint. The post-tool-use rule keeps enforcing any still-pending row from
256
+ // earlier, so we don't lose enforcement here — we just stop spamming new
257
+ // decisions for delivery follow-ups like "提交并推送".
258
+ if (storage && eventContext) {
259
+ try {
260
+ const recent = storage.listRecentResolvedDecisions(eventContext.session_id, CONTINUATION_MIN_RESOLVED);
261
+ if (isContinuation(prompt, recent)) {
262
+ logger.debug(`[DecisionHint] gate=continuation (resolved=${recent.length}, prompt len=${prompt.length})`);
263
+ return null;
264
+ }
265
+ }
266
+ catch (err) {
267
+ logger.debug(`[DecisionHint] continuation lookup failed (proceeding): ${err}`);
268
+ }
269
+ }
270
+ // Spec 1944 §1.5 goal 3 — active pending skip + dedup:
271
+ // • active-skip: if an unresolved pending decision still exists for this
272
+ // session within the active window, suppress the new hint. The deny
273
+ // gate (decision-hint-pending rule) will keep enforcing the existing
274
+ // decision; we just don't pile up duplicate rows.
275
+ // • dedup: same trimmed prompt in the dedup window is a special case of
276
+ // active-skip (it surfaces the diagnostic differently in logs).
277
+ if (storage && eventContext) {
278
+ try {
279
+ const existing = storage.getMostRecentPendingDecision(eventContext.session_id, ACTIVE_PENDING_WINDOW_SECONDS,
280
+ // global-governance Phase 1 (decision 7fa0f2ab): scope active-skip by
281
+ // project so a pending decision in another project on the same session
282
+ // doesn't suppress a legitimately new hint here.
283
+ eventContext.project_path);
284
+ if (existing) {
285
+ const sameTrigger = typeof existing.trigger_prompt === 'string' &&
286
+ normalizePrompt(existing.trigger_prompt) === normalizePrompt(prompt);
287
+ logger.debug(`[DecisionHint] skipped (active pending exists, sameTrigger=${sameTrigger}) id=${existing.id}`);
288
+ return null;
289
+ }
290
+ }
291
+ catch (err) {
292
+ // Fail-silent — fall through to the normal emit path.
293
+ logger.debug(`[DecisionHint] active-skip lookup failed (proceeding): ${err}`);
294
+ }
295
+ }
296
+ const decision_id = randomBytes(4).toString('hex'); // 8-char hex
297
+ const summary = truncateSummary(prompt);
298
+ // Write decisions row (fail-silent — never block the pipeline).
299
+ if (storage && eventContext) {
300
+ try {
301
+ storage.writeDecision({
302
+ id: decision_id,
303
+ session_id: eventContext.session_id,
304
+ project_path: eventContext.project_path,
305
+ trigger_event_id: eventContext.event_id ?? null,
306
+ trigger_prompt: prompt,
307
+ workflow_type: 'pending', // LLM will classify; daemon no longer pre-classifies
308
+ suggested_agent: 'decision-maker',
309
+ });
310
+ logger.debug(`[DecisionHint] wrote decision row id=${decision_id}`);
311
+ }
312
+ catch (err) {
313
+ logger.warn(`[DecisionHint] failed to write decision row (skipped): ${err}`);
314
+ }
315
+ }
316
+ const message = formatHintMessage('pending', 'decision-maker', summary, decision_id);
317
+ return { message, decision_id };
318
+ }
319
+ /**
320
+ * Spec 1944 §8 — trivial filter max length. trim() < TRIVIAL_MAX_LEN AND
321
+ * isLikelyTrivial() → guard fires.
322
+ *
323
+ * decision 7aa0ec63 (Option C, Q4): raised 10 → 15. Covers real-world batch
324
+ * controls like `启动 Batch 3 第一项` (15 chars) and `执行第二项` (5 chars) that
325
+ * previously slipped past the length cap. `批准 abc12345` (12 chars) is now
326
+ * also classified trivial, which is the desired behaviour — the matching
327
+ * pending decision row would already be approved by the parallel `cf decisions
328
+ * approve` flow, so no information is lost.
329
+ */
330
+ const TRIVIAL_MAX_LEN = 15;
331
+ /**
332
+ * Spec 1944 §1.5 — active pending skip window. While any unresolved pending
333
+ * decision row exists within this many seconds for the session, new hints are
334
+ * suppressed (avoids stacking dozens of pending rows). 1h matches the rule
335
+ * gate's own pending-lookup window (`getMostRecentPendingDecision`).
336
+ */
337
+ const ACTIVE_PENDING_WINDOW_SECONDS = 3600;
338
+ function normalizePrompt(text) {
339
+ return text.replace(/\s+/g, ' ').trim();
340
+ }
341
+ /**
342
+ * Returns true when the prompt is likely trivial (a simple approval or
343
+ * one-word command) and can skip the full decision-maker workflow.
344
+ *
345
+ * Two conditions — BOTH must be true to avoid false positives:
346
+ * 1. prompt length < 50 chars (short enough to be trivial)
347
+ * 2. Starts with or consists of a trivial keyword
348
+ *
349
+ * Used by formatHintMessage to suggest model=haiku for trivial prompts.
350
+ * The decision-maker template Step 0 uses a tighter threshold (< 30 chars)
351
+ * for its own fast-exit — this function uses 50 for the daemon-side hint
352
+ * to bias toward haiku earlier in the pipeline.
353
+ *
354
+ * Option B (decision b95e0956, 2026-05-29 — Q1): keyword set expanded to
355
+ * cover the real-world "continuation" short prompts that previously slipped
356
+ * through and forced a [DECISION HINT] emit for trivial follow-ups:
357
+ * added: 提交 / 推送 / push / commit / 那就 / 修复吧 / 启动吧 / 开始 /
358
+ * 搞 / 做 / 开干 / 接着做 / 继续做
359
+ * Original list (好/对/是/继续/批准/approve/yes/ok/skip/确认/确定/go/
360
+ * proceed/done/完成/可以) preserved — additive expansion.
361
+ *
362
+ * @param s - The intent summary or raw prompt.
363
+ */
364
+ export function isLikelyTrivial(s) {
365
+ if (s.length >= 50)
366
+ return false;
367
+ const trimmed = s.trim();
368
+ if (!trimmed)
369
+ return false;
370
+ // decision 7aa0ec63 (Option C, Q3) — greeting/informational extension.
371
+ // Greetings ("hi" / "hello" / "say hi" / "say hello" / "你好") are trivial
372
+ // regardless of exact wording, and short prompts ending in `?` / `?` are
373
+ // informational queries that the main thread should answer directly without
374
+ // going through decision-maker. Note: ASCII greetings require an end or
375
+ // non-word boundary (avoid matching `hint…` / `hire …`); CJK `你好` is
376
+ // checked separately because JS `\b` is ASCII-only.
377
+ if (/^你好/.test(trimmed))
378
+ return true;
379
+ if (/^(say\s+hi|say\s+hello)\b/i.test(trimmed))
380
+ return true;
381
+ if (/^(hi|hello)(\b|$)/i.test(trimmed))
382
+ return true;
383
+ if (trimmed.length < 30 && /[??]\s*$/.test(trimmed))
384
+ return true;
385
+ // decision 7aa0ec63 (Option C, Q3) — batch-control verbs commonly used as
386
+ // continuation triggers (`启动 Batch 3`, `执行第二项`, `查看 KB`, `批准 X`).
387
+ // Kept additive to the prior keyword set (b95e0956); nothing is removed.
388
+ return /^(好|对|是|继续|批准|approve|yes|ok|skip|确认|确定|go|proceed|done|完成|可以|提交|推送|push|commit|那就|修复吧|启动吧|开始|搞|做|开干|接着做|继续做|启动|执行|查看|看看)/i.test(trimmed);
389
+ }
390
+ /**
391
+ * Option B (decision b95e0956, 2026-05-29 — Q1+Q2) — "continuation" prompt
392
+ * detection.
393
+ *
394
+ * Returns true when the current prompt is plausibly a continuation of recent
395
+ * decided work and should NOT trigger a fresh [DECISION HINT].
396
+ *
397
+ * Q2 contract: **both** conditions must hold (AND, not OR):
398
+ * 1. There are at least `CONTINUATION_MIN_RESOLVED` (=3) resolved decisions
399
+ * for this session AND
400
+ * 2. The most recent resolved one is within `CONTINUATION_WINDOW_MS`
401
+ * (=30 min)
402
+ *
403
+ * AND the current prompt itself must look continuation-flavoured — i.e.
404
+ * contain one of the Q1 recommended keywords. This avoids classifying a
405
+ * genuinely fresh long task as a continuation just because the session has
406
+ * been busy.
407
+ *
408
+ * @param prompt - The raw user prompt text.
409
+ * @param recentResolved - Output of `listRecentResolvedDecisions` for this
410
+ * session (any length; newest first).
411
+ * @param nowMs - Override clock for tests (defaults to Date.now()).
412
+ */
413
+ export const CONTINUATION_WINDOW_MS = 30 * 60 * 1000; // 30 minutes
414
+ export const CONTINUATION_MIN_RESOLVED = 3;
415
+ /** Q1 keyword set used by isContinuation (subset of isLikelyTrivial). */
416
+ const CONTINUATION_KEYWORDS_RE = /(提交|推送|push|commit|那就|修复吧|启动吧|开始|搞|做|开干|继续|接着做|ok|好)/i;
417
+ export function isContinuation(prompt, recentResolved, nowMs = Date.now()) {
418
+ if (!prompt)
419
+ return false;
420
+ if (!Array.isArray(recentResolved))
421
+ return false;
422
+ // Q2 (count condition)
423
+ if (recentResolved.length < CONTINUATION_MIN_RESOLVED)
424
+ return false;
425
+ // Q2 (time-window condition)
426
+ const newest = recentResolved[0];
427
+ if (!newest)
428
+ return false;
429
+ const ts = newest.resolved_at ?? newest.created_at;
430
+ if (!ts)
431
+ return false;
432
+ const tsMs = Date.parse(ts);
433
+ if (!Number.isFinite(tsMs))
434
+ return false;
435
+ if (nowMs - tsMs > CONTINUATION_WINDOW_MS)
436
+ return false;
437
+ // Keyword condition — must look continuation-flavoured to count.
438
+ return CONTINUATION_KEYWORDS_RE.test(prompt.trim());
439
+ }
440
+ /**
441
+ * Formats the hint message body. Kept separate for unit-test readability.
442
+ *
443
+ * The message tells the main thread:
444
+ * 1. That daemon classified this as decision-worthy
445
+ * 2. The suggested agent to spawn
446
+ * 3. A concrete Task tool command the main thread can copy-paste
447
+ * 4. The decision_id magic marker (OQ5) for DB tracking
448
+ * 5. Suggested model (haiku for trivial, sonnet for complex)
449
+ *
450
+ * Output contains `[DECISION HINT]` prefix so CLAUDE.md rule can detect it
451
+ * and enforce the spawn (R2 mitigation in spec 1702 § 9).
452
+ */
453
+ export function formatHintMessage(workflowType, suggestedAgent, intentSummary, decision_id) {
454
+ const suggestedModel = isLikelyTrivial(intentSummary) ? 'haiku' : 'sonnet';
455
+ const lines = [
456
+ '[DECISION HINT]',
457
+ '',
458
+ `daemon 检测到本 prompt 超过阈值,属于值得决策的任务。`,
459
+ `建议主线程 spawn \`decision-maker\` agent 出"决策建议"再决定 how to proceed:`,
460
+ '',
461
+ `Task tool subagent_type='decision-maker' with prompt: "${intentSummary}"`,
462
+ '',
463
+ `decision-maker agent 会:`,
464
+ ` 1. 查 KB 理解项目背景`,
465
+ ` 2. 读 skill catalog,选 1-3 个相关 skill`,
466
+ ` 3. 读 agent catalog,选推荐 implementation agent`,
467
+ ` 4. 列 2-3 方案 + pros/cons + LOC 估算`,
468
+ ` 5. cf decisions update 持久化方案 + 推荐 agent/skill`,
469
+ '',
470
+ `建议 model:\`${suggestedModel}\`(trivial 用 haiku 加速,complex 用 sonnet 保质)`,
471
+ `如果已经知道要做什么,直接告知并忽略本提示即可。`,
472
+ `原推荐 agent: \`${suggestedAgent}\``,
473
+ ];
474
+ if (decision_id) {
475
+ lines.push('');
476
+ lines.push(`<!-- decision-id: ${decision_id} -->`);
477
+ lines.push(`bypass: 在 prompt 中加 "skip decision" 跳过决策流程。`);
478
+ }
479
+ return lines.join('\n');
480
+ }
481
+ function truncateSummary(text) {
482
+ const oneLine = text.replace(/\s+/g, ' ').trim();
483
+ if (oneLine.length <= HINT_SUMMARY_MAX)
484
+ return oneLine;
485
+ return oneLine.slice(0, HINT_SUMMARY_MAX - 1) + '…';
486
+ }
487
+ //# sourceMappingURL=decision-hint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decision-hint.js","sourceRoot":"","sources":["../../../src/daemon/services/decision-hint.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAEpD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC;AAErC,gEAAgE;AAChE,MAAM,CAAC,MAAM,sBAAsB,GAAG,sBAAsB,CAAC;AAE7D;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,kCAAkC,GAAG,iCAAiC,CAAC;AAEpF,+EAA+E;AAC/E,MAAM,CAAC,MAAM,uCAAuC,GAAG,EAAE,CAAC;AAE1D,2DAA2D;AAC3D,MAAM,CAAC,MAAM,mCAAmC,GAAG,IAAI,CAAC;AAExD,uDAAuD;AACvD,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAE7B;;;;;;;;;;;;;GAaG;AACH,MAAM,sBAAsB,GAAa;IACvC,uBAAuB;IACvB,aAAa;IACb,uBAAuB;IACvB,qBAAqB;IACrB,0BAA0B;IAC1B,qBAAqB;IACrB,kBAAkB;IAClB,iBAAiB;IACjB,mFAAmF;IACnF,oBAAoB;CACrB,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CAAC,MAAc;IACpD,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IAC9B,OAAO,sBAAsB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAc;IAClD,OAAO,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACzC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAA8B;IAC9D,IAAI,CAAC,OAAO;QAAE,OAAO,mBAAmB,CAAC;IACzC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,OAAO,CAAC,UAAU,CAAC,sBAAsB,CAAC,CAAC;QACvD,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACtC,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;YACtB,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;gBAAE,OAAO,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,cAAc;IAChB,CAAC;IACD,OAAO,mBAAmB,CAAC;AAC7B,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,mCAAmC,CACjD,OAA8B;IAE9B,IAAI,CAAC,OAAO;QAAE,OAAO,uCAAuC,CAAC;IAC7D,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,OAAO,CAAC,UAAU,CAAC,kCAAkC,CAAC,CAAC;QACnE,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACtC,OAAO,uCAAuC,CAAC;QACjD,CAAC;QACD,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QACtB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,OAAO,uCAAuC,CAAC;QACxE,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,uCAAuC,CAAC;QAC3D,IAAI,CAAC,GAAG,mCAAmC,EAAE,CAAC;YAC5C,OAAO,uCAAuC,CAAC;QACjD,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,uCAAuC,CAAC;IACjD,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,6BAA6B,CAC3C,OAAsB,EACtB,UAAqC,EACrC,aAAqB,EACrB,QAAgB,IAAI,CAAC,GAAG,EAAE;IAE1B,IAAI,CAAC,UAAU;QAAE,OAAO,KAAK,CAAC;IAC9B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,aAAa,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACxE,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,KAAK,GAAG,aAAa,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;IACtE,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC;YAC/B,UAAU;YACV,SAAS,EAAE,YAAY;YACvB,KAAK,EAAE,QAAQ;YACf,KAAK,EAAE,GAAG;SACX,CAAC,CAAC;QACH,KAAK,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC;YACtB,IAAI,CAAC,EAAE,CAAC,SAAS,IAAI,EAAE,CAAC,KAAK,MAAM;gBAAE,SAAS;YAC9C,MAAM,KAAK,GAAG,CAAC,EAAE,CAAC,UAAU,IAAI,EAAE,CAA4B,CAAC;YAC/D,MAAM,GAAG,GACP,OAAO,KAAK,CAAC,eAAe,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3E,IAAI,GAAG,KAAK,gBAAgB;gBAAE,OAAO,IAAI,CAAC;QAC5C,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,sEAAsE;QACtE,4CAA4C;IAC9C,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAcD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,sBAAsB,CACpC,MAAc,EACd,aAAqB,mBAAmB,EACxC,OAA8B,EAC9B,YAIQ;IAER,+CAA+C;IAC/C,IAAI,qBAAqB,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC;IAE/C,mFAAmF;IACnF,IAAI,UAAU,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,UAAU;QAAE,OAAO,IAAI,CAAC;IAE9D,qEAAqE;IACrE,IAAI,uBAAuB,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC;IAEjD,4EAA4E;IAC5E,4EAA4E;IAC5E,yDAAyD;IACzD,yEAAyE;IACzE,wEAAwE;IACxE,IAAI,OAAO,IAAI,YAAY,EAAE,UAAU,EAAE,CAAC;QACxC,IAAI,CAAC;YACH,MAAM,eAAe,GAAG,mCAAmC,CAAC,OAAO,CAAC,CAAC;YACrE,IACE,6BAA6B,CAC3B,OAAO,EACP,YAAY,CAAC,UAAU,EACvB,eAAe,CAChB,EACD,CAAC;gBACD,MAAM,CAAC,KAAK,CACV,yCAAyC,YAAY,CAAC,UAAU,IAAI;oBAClE,UAAU,eAAe,IAAI,CAChC,CAAC;gBACF,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,KAAK,CAAC,uDAAuD,GAAG,EAAE,CAAC,CAAC;QAC7E,CAAC;IACH,CAAC;IAED,wEAAwE;IACxE,gEAAgE;IAChE,wEAAwE;IACxE,yCAAyC;IACzC,IAAI,eAAe,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,eAAe,EAAE,CAAC;QAC/D,MAAM,CAAC,KAAK,CACV,mDAAmD,MAAM,CAAC,MAAM,GAAG,CACpE,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,uEAAuE;IACvE,2EAA2E;IAC3E,0EAA0E;IAC1E,0EAA0E;IAC1E,yEAAyE;IACzE,kDAAkD;IAClD,IAAI,OAAO,IAAI,YAAY,EAAE,CAAC;QAC5B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,OAAO,CAAC,2BAA2B,CAChD,YAAY,CAAC,UAAU,EACvB,yBAAyB,CAC1B,CAAC;YACF,IAAI,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;gBACnC,MAAM,CAAC,KAAK,CACV,8CAA8C,MAAM,CAAC,MAAM,gBAAgB,MAAM,CAAC,MAAM,GAAG,CAC5F,CAAC;gBACF,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,KAAK,CACV,2DAA2D,GAAG,EAAE,CACjE,CAAC;QACJ,CAAC;IACH,CAAC;IAED,uDAAuD;IACvD,2EAA2E;IAC3E,wEAAwE;IACxE,yEAAyE;IACzE,sDAAsD;IACtD,0EAA0E;IAC1E,oEAAoE;IACpE,IAAI,OAAO,IAAI,YAAY,EAAE,CAAC;QAC5B,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,OAAO,CAAC,4BAA4B,CACnD,YAAY,CAAC,UAAU,EACvB,6BAA6B;YAC7B,sEAAsE;YACtE,uEAAuE;YACvE,iDAAiD;YACjD,YAAY,CAAC,YAAY,CAC1B,CAAC;YACF,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,WAAW,GACf,OAAO,QAAQ,CAAC,cAAc,KAAK,QAAQ;oBAC3C,eAAe,CAAC,QAAQ,CAAC,cAAc,CAAC,KAAK,eAAe,CAAC,MAAM,CAAC,CAAC;gBACvE,MAAM,CAAC,KAAK,CACV,8DAA8D,WAAW,QAAQ,QAAQ,CAAC,EAAE,EAAE,CAC/F,CAAC;gBACF,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,sDAAsD;YACtD,MAAM,CAAC,KAAK,CAAC,0DAA0D,GAAG,EAAE,CAAC,CAAC;QAChF,CAAC;IACH,CAAC;IAED,MAAM,WAAW,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa;IACjE,MAAM,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IAExC,gEAAgE;IAChE,IAAI,OAAO,IAAI,YAAY,EAAE,CAAC;QAC5B,IAAI,CAAC;YACH,OAAO,CAAC,aAAa,CAAC;gBACpB,EAAE,EAAE,WAAW;gBACf,UAAU,EAAE,YAAY,CAAC,UAAU;gBACnC,YAAY,EAAE,YAAY,CAAC,YAAY;gBACvC,gBAAgB,EAAE,YAAY,CAAC,QAAQ,IAAI,IAAI;gBAC/C,cAAc,EAAE,MAAM;gBACtB,aAAa,EAAE,SAAS,EAAG,qDAAqD;gBAChF,eAAe,EAAE,gBAAgB;aAClC,CAAC,CAAC;YACH,MAAM,CAAC,KAAK,CAAC,wCAAwC,WAAW,EAAE,CAAC,CAAC;QACtE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,CAAC,0DAA0D,GAAG,EAAE,CAAC,CAAC;QAC/E,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG,iBAAiB,CAAC,SAAS,EAAE,gBAAgB,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;IACrF,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;AAClC,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,eAAe,GAAG,EAAE,CAAC;AAE3B;;;;;GAKG;AACH,MAAM,6BAA6B,GAAG,IAAI,CAAC;AAE3C,SAAS,eAAe,CAAC,IAAY;IACnC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AAC1C,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,eAAe,CAAC,CAAS;IACvC,IAAI,CAAC,CAAC,MAAM,IAAI,EAAE;QAAE,OAAO,KAAK,CAAC;IACjC,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACzB,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IAC3B,uEAAuE;IACvE,yEAAyE;IACzE,yEAAyE;IACzE,4EAA4E;IAC5E,wEAAwE;IACxE,qEAAqE;IACrE,oDAAoD;IACpD,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IACrC,IAAI,4BAA4B,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5D,IAAI,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IACpD,IAAI,OAAO,CAAC,MAAM,GAAG,EAAE,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IACjE,0EAA0E;IAC1E,kEAAkE;IAClE,yEAAyE;IACzE,OAAO,4HAA4H,CAAC,IAAI,CACtI,OAAO,CACR,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,aAAa;AACnE,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC;AAE3C,yEAAyE;AACzE,MAAM,wBAAwB,GAC5B,uDAAuD,CAAC;AAE1D,MAAM,UAAU,cAAc,CAC5B,MAAc,EACd,cAAqF,EACrF,QAAgB,IAAI,CAAC,GAAG,EAAE;IAE1B,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAC1B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC;QAAE,OAAO,KAAK,CAAC;IACjD,uBAAuB;IACvB,IAAI,cAAc,CAAC,MAAM,GAAG,yBAAyB;QAAE,OAAO,KAAK,CAAC;IACpE,6BAA6B;IAC7B,MAAM,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;IACjC,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAC1B,MAAM,EAAE,GAAG,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,UAAU,CAAC;IACnD,IAAI,CAAC,EAAE;QAAE,OAAO,KAAK,CAAC;IACtB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC5B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACzC,IAAI,KAAK,GAAG,IAAI,GAAG,sBAAsB;QAAE,OAAO,KAAK,CAAC;IACxD,iEAAiE;IACjE,OAAO,wBAAwB,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;AACtD,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,iBAAiB,CAC/B,YAAoB,EACpB,cAAsB,EACtB,aAAqB,EACrB,WAA0B;IAE1B,MAAM,cAAc,GAAG,eAAe,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC;IAE3E,MAAM,KAAK,GAAG;QACZ,iBAAiB;QACjB,EAAE;QACF,oCAAoC;QACpC,iEAAiE;QACjE,EAAE;QACF,0DAA0D,aAAa,GAAG;QAC1E,EAAE;QACF,yBAAyB;QACzB,kBAAkB;QAClB,sCAAsC;QACtC,+CAA+C;QAC/C,oCAAoC;QACpC,iDAAiD;QACjD,EAAE;QACF,cAAc,cAAc,4CAA4C;QACxE,0BAA0B;QAC1B,gBAAgB,cAAc,IAAI;KACnC,CAAC;IAEF,IAAI,WAAW,EAAE,CAAC;QAChB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,qBAAqB,WAAW,MAAM,CAAC,CAAC;QACnD,KAAK,CAAC,IAAI,CACR,6CAA6C,CAC9C,CAAC;IACJ,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,eAAe,CAAC,IAAY;IACnC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACjD,IAAI,OAAO,CAAC,MAAM,IAAI,gBAAgB;QAAE,OAAO,OAAO,CAAC;IACvD,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,gBAAgB,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;AACtD,CAAC"}
@@ -0,0 +1,86 @@
1
+ /**
2
+ * event-ttl-sweep — two-tier TTL maintenance for `events` (db-size optimization).
3
+ *
4
+ * Background
5
+ * ----------
6
+ * The live DB (~274 MB, 240 MB in `events`) was unbounded growth: ~17 MB/day,
7
+ * ~6 GB/yr at the current rate. After Batch F redaction the
8
+ * `tool_input_summary` (on `tool_intercepts`) carries the user-actionable bits
9
+ * of every intercepted tool call; raw `events.tool_input` is mostly dead
10
+ * weight after a week.
11
+ *
12
+ * Policy (configurable via forge_config):
13
+ * - warm TTL (default 7d): rows older than this get `tool_input = NULL`.
14
+ * Other event fields stay so analytics / dashboards still render.
15
+ * - cold TTL (default 30d): rows older than this DELETEd entirely
16
+ * (plus orphan task_events rows pruned).
17
+ *
18
+ * Run cadence: `events.sweep_interval_hours` (default 6h), scheduled by the
19
+ * daemon alongside the existing maintenance intervals. Capped at SWEEP_MAX_ROWS
20
+ * per pass to keep the SQLite writer lock short; if a pass hits the cap the
21
+ * next tick picks up the rest.
22
+ *
23
+ * Design notes
24
+ * ------------
25
+ * - Cold sweep runs FIRST (DELETEs free pages before warm UPDATE could touch
26
+ * the same rows — saves one pass).
27
+ * - Both ops live in EventOperations to honor the "no db.prepare outside
28
+ * Operations" rule (base.ts:402).
29
+ * - `tool_input_summary` is on `tool_intercepts`, not `events` — left
30
+ * untouched here, surviving as the post-TTL fallback for rule audits.
31
+ */
32
+ import type { SQLiteStorage } from '../../core/storage/sqlite.js';
33
+ import type { ConfigStore } from '../config-store.js';
34
+ export interface SweepConfig {
35
+ /** Defaults to `events.warm_ttl_days` config (default 7). */
36
+ warmTtlDays?: number;
37
+ /** Defaults to `events.cold_ttl_days` config (default 30). */
38
+ coldTtlDays?: number;
39
+ /** Maximum rows touched per pass (per operation). Defaults to SWEEP_MAX_ROWS. */
40
+ maxRowsPerPass?: number;
41
+ }
42
+ export interface SweepResult {
43
+ /** Number of rows whose `tool_input` was NULLed in this pass. */
44
+ warmedNull: number;
45
+ /** Number of events rows DELETEd in this pass. */
46
+ coldDeleted: number;
47
+ /** Number of task_events orphan rows pruned during the cold DELETE. */
48
+ taskEventsPruned: number;
49
+ /** Number of free pages reclaimed by incremental_vacuum at end of sweep. */
50
+ pagesReclaimed: number;
51
+ /** True if either op hit `maxRowsPerPass` — caller should re-run sooner. */
52
+ morePending: boolean;
53
+ }
54
+ /** Default rows-per-pass cap. Tuned to ~few-seconds writer-lock budget. */
55
+ export declare const SWEEP_MAX_ROWS = 10000;
56
+ /** Config keys this service consults. */
57
+ export declare const CFG_WARM_TTL = "events.warm_ttl_days";
58
+ export declare const CFG_COLD_TTL = "events.cold_ttl_days";
59
+ export declare const CFG_SWEEP_INTERVAL = "events.sweep_interval_hours";
60
+ /** Default values seeded into forge_config on daemon startup. */
61
+ export declare const DEFAULTS: {
62
+ readonly warmTtlDays: 7;
63
+ readonly coldTtlDays: 30;
64
+ readonly sweepIntervalHours: 6;
65
+ };
66
+ /**
67
+ * Resolve effective TTL params from explicit opts > forge_config > defaults.
68
+ * Exported for tests.
69
+ */
70
+ export declare function resolveSweepConfig(configStore: ConfigStore, opts?: SweepConfig): {
71
+ warmTtlDays: number;
72
+ coldTtlDays: number;
73
+ maxRowsPerPass: number;
74
+ };
75
+ /**
76
+ * Run one TTL sweep pass. Idempotent; safe to call repeatedly.
77
+ *
78
+ * Order:
79
+ * 1) cold DELETE (rows >= coldTtlDays) — frees pages first
80
+ * 2) warm UPDATE (rows >= warmTtlDays AND tool_input IS NOT NULL)
81
+ *
82
+ * Returns counters + a `morePending` hint so the caller knows when to skip
83
+ * waiting a full interval for the next pass.
84
+ */
85
+ export declare function sweepEventTtl(storage: SQLiteStorage, configStore: ConfigStore, opts?: SweepConfig): SweepResult;
86
+ //# sourceMappingURL=event-ttl-sweep.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-ttl-sweep.d.ts","sourceRoot":"","sources":["../../../src/daemon/services/event-ttl-sweep.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD,MAAM,WAAW,WAAW;IAC1B,6DAA6D;IAC7D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8DAA8D;IAC9D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iFAAiF;IACjF,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,WAAW;IAC1B,iEAAiE;IACjE,UAAU,EAAE,MAAM,CAAC;IACnB,kDAAkD;IAClD,WAAW,EAAE,MAAM,CAAC;IACpB,uEAAuE;IACvE,gBAAgB,EAAE,MAAM,CAAC;IACzB,4EAA4E;IAC5E,cAAc,EAAE,MAAM,CAAC;IACvB,4EAA4E;IAC5E,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,2EAA2E;AAC3E,eAAO,MAAM,cAAc,QAAS,CAAC;AAErC,yCAAyC;AACzC,eAAO,MAAM,YAAY,yBAAyB,CAAC;AACnD,eAAO,MAAM,YAAY,yBAAyB,CAAC;AACnD,eAAO,MAAM,kBAAkB,gCAAgC,CAAC;AAEhE,iEAAiE;AACjE,eAAO,MAAM,QAAQ;;;;CAIX,CAAC;AAWX;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,WAAW,EAAE,IAAI,GAAE,WAAgB,GAAG;IACpF,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;CACxB,CAeA;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,aAAa,EACtB,WAAW,EAAE,WAAW,EACxB,IAAI,GAAE,WAAgB,GACrB,WAAW,CAwCb"}