@winspan/claude-forge 8.54.4 → 9.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1053) hide show
  1. package/DEVELOPMENT.md +723 -46
  2. package/README.md +166 -21
  3. package/dist/catalogs/agents.json +67 -0
  4. package/dist/catalogs/skills.json +306 -0
  5. package/dist/claudemd/claudemd-generator.d.ts +45 -45
  6. package/dist/claudemd/claudemd-generator.d.ts.map +1 -1
  7. package/dist/claudemd/claudemd-generator.js +128 -449
  8. package/dist/claudemd/claudemd-generator.js.map +1 -1
  9. package/dist/claudemd/index.d.ts +14 -4
  10. package/dist/claudemd/index.d.ts.map +1 -1
  11. package/dist/claudemd/index.js +15 -4
  12. package/dist/claudemd/index.js.map +1 -1
  13. package/dist/claudemd/resume-manager.d.ts.map +1 -1
  14. package/dist/claudemd/resume-manager.js +37 -9
  15. package/dist/claudemd/resume-manager.js.map +1 -1
  16. package/dist/claudemd/templates/swarm-protocol.md +35 -186
  17. package/dist/claudemd/violations-manager.d.ts +40 -0
  18. package/dist/claudemd/violations-manager.d.ts.map +1 -0
  19. package/dist/claudemd/violations-manager.js +106 -0
  20. package/dist/claudemd/violations-manager.js.map +1 -0
  21. package/dist/cli/commands/admin.d.ts +15 -0
  22. package/dist/cli/commands/admin.d.ts.map +1 -0
  23. package/dist/cli/commands/admin.js +177 -0
  24. package/dist/cli/commands/admin.js.map +1 -0
  25. package/dist/cli/commands/agent.d.ts +169 -0
  26. package/dist/cli/commands/agent.d.ts.map +1 -0
  27. package/dist/cli/commands/agent.js +690 -0
  28. package/dist/cli/commands/agent.js.map +1 -0
  29. package/dist/cli/commands/agents.d.ts +18 -0
  30. package/dist/cli/commands/agents.d.ts.map +1 -0
  31. package/dist/cli/commands/agents.js +160 -0
  32. package/dist/cli/commands/agents.js.map +1 -0
  33. package/dist/cli/commands/bypass.d.ts +18 -0
  34. package/dist/cli/commands/bypass.d.ts.map +1 -0
  35. package/dist/cli/commands/bypass.js +87 -0
  36. package/dist/cli/commands/bypass.js.map +1 -0
  37. package/dist/cli/commands/claudemd.d.ts +60 -0
  38. package/dist/cli/commands/claudemd.d.ts.map +1 -1
  39. package/dist/cli/commands/claudemd.js +174 -37
  40. package/dist/cli/commands/claudemd.js.map +1 -1
  41. package/dist/cli/commands/codegraph.d.ts +17 -0
  42. package/dist/cli/commands/codegraph.d.ts.map +1 -0
  43. package/dist/cli/commands/codegraph.js +263 -0
  44. package/dist/cli/commands/codegraph.js.map +1 -0
  45. package/dist/cli/commands/config.d.ts.map +1 -1
  46. package/dist/cli/commands/config.js +94 -1
  47. package/dist/cli/commands/config.js.map +1 -1
  48. package/dist/cli/commands/daemon.d.ts +39 -0
  49. package/dist/cli/commands/daemon.d.ts.map +1 -1
  50. package/dist/cli/commands/daemon.js +167 -20
  51. package/dist/cli/commands/daemon.js.map +1 -1
  52. package/dist/cli/commands/decisions.d.ts +129 -0
  53. package/dist/cli/commands/decisions.d.ts.map +1 -0
  54. package/dist/cli/commands/decisions.js +706 -0
  55. package/dist/cli/commands/decisions.js.map +1 -0
  56. package/dist/cli/commands/doctor.d.ts +29 -0
  57. package/dist/cli/commands/doctor.d.ts.map +1 -0
  58. package/dist/cli/commands/doctor.js +124 -0
  59. package/dist/cli/commands/doctor.js.map +1 -0
  60. package/dist/cli/commands/entropy.d.ts +35 -0
  61. package/dist/cli/commands/entropy.d.ts.map +1 -0
  62. package/dist/cli/commands/entropy.js +121 -0
  63. package/dist/cli/commands/entropy.js.map +1 -0
  64. package/dist/cli/commands/executions.d.ts +1 -0
  65. package/dist/cli/commands/executions.d.ts.map +1 -1
  66. package/dist/cli/commands/executions.js +12 -2
  67. package/dist/cli/commands/executions.js.map +1 -1
  68. package/dist/cli/commands/fix.d.ts +31 -0
  69. package/dist/cli/commands/fix.d.ts.map +1 -0
  70. package/dist/cli/commands/fix.js +108 -0
  71. package/dist/cli/commands/fix.js.map +1 -0
  72. package/dist/cli/commands/governance.d.ts +21 -0
  73. package/dist/cli/commands/governance.d.ts.map +1 -0
  74. package/dist/cli/commands/governance.js +60 -0
  75. package/dist/cli/commands/governance.js.map +1 -0
  76. package/dist/cli/commands/init.d.ts +27 -0
  77. package/dist/cli/commands/init.d.ts.map +1 -1
  78. package/dist/cli/commands/init.js +158 -146
  79. package/dist/cli/commands/init.js.map +1 -1
  80. package/dist/cli/commands/insights-goal-check.d.ts +54 -0
  81. package/dist/cli/commands/insights-goal-check.d.ts.map +1 -0
  82. package/dist/cli/commands/insights-goal-check.js +318 -0
  83. package/dist/cli/commands/insights-goal-check.js.map +1 -0
  84. package/dist/cli/commands/insights.d.ts +15 -0
  85. package/dist/cli/commands/insights.d.ts.map +1 -0
  86. package/dist/cli/commands/insights.js +127 -0
  87. package/dist/cli/commands/insights.js.map +1 -0
  88. package/dist/cli/commands/knowledge.d.ts +117 -0
  89. package/dist/cli/commands/knowledge.d.ts.map +1 -0
  90. package/dist/cli/commands/knowledge.js +1070 -0
  91. package/dist/cli/commands/knowledge.js.map +1 -0
  92. package/dist/cli/commands/loop.d.ts +95 -0
  93. package/dist/cli/commands/loop.d.ts.map +1 -0
  94. package/dist/cli/commands/loop.js +408 -0
  95. package/dist/cli/commands/loop.js.map +1 -0
  96. package/dist/cli/commands/maintenance.d.ts +33 -0
  97. package/dist/cli/commands/maintenance.d.ts.map +1 -0
  98. package/dist/cli/commands/maintenance.js +75 -0
  99. package/dist/cli/commands/maintenance.js.map +1 -0
  100. package/dist/cli/commands/mcp.d.ts +22 -11
  101. package/dist/cli/commands/mcp.d.ts.map +1 -1
  102. package/dist/cli/commands/mcp.js +93 -5
  103. package/dist/cli/commands/mcp.js.map +1 -1
  104. package/dist/cli/commands/menu.d.ts.map +1 -1
  105. package/dist/cli/commands/menu.js +10 -184
  106. package/dist/cli/commands/menu.js.map +1 -1
  107. package/dist/cli/commands/project.d.ts +98 -0
  108. package/dist/cli/commands/project.d.ts.map +1 -0
  109. package/dist/cli/commands/project.js +382 -0
  110. package/dist/cli/commands/project.js.map +1 -0
  111. package/dist/cli/commands/skills.d.ts +131 -0
  112. package/dist/cli/commands/skills.d.ts.map +1 -1
  113. package/dist/cli/commands/skills.js +404 -118
  114. package/dist/cli/commands/skills.js.map +1 -1
  115. package/dist/cli/commands/spec.d.ts +40 -0
  116. package/dist/cli/commands/spec.d.ts.map +1 -0
  117. package/dist/cli/commands/spec.js +49 -0
  118. package/dist/cli/commands/spec.js.map +1 -0
  119. package/dist/cli/commands/stats.d.ts.map +1 -1
  120. package/dist/cli/commands/stats.js +11 -3
  121. package/dist/cli/commands/stats.js.map +1 -1
  122. package/dist/cli/commands/status.d.ts.map +1 -1
  123. package/dist/cli/commands/status.js +17 -2
  124. package/dist/cli/commands/status.js.map +1 -1
  125. package/dist/cli/commands/trace.d.ts.map +1 -1
  126. package/dist/cli/commands/trace.js +4 -9
  127. package/dist/cli/commands/trace.js.map +1 -1
  128. package/dist/cli/commands/violations.d.ts +14 -0
  129. package/dist/cli/commands/violations.d.ts.map +1 -0
  130. package/dist/cli/commands/violations.js +43 -0
  131. package/dist/cli/commands/violations.js.map +1 -0
  132. package/dist/cli/index.js +34 -0
  133. package/dist/cli/index.js.map +1 -1
  134. package/dist/cli/init/hook-manager.d.ts +1 -1
  135. package/dist/cli/init/hook-manager.d.ts.map +1 -1
  136. package/dist/cli/init/hook-manager.js +6 -0
  137. package/dist/cli/init/hook-manager.js.map +1 -1
  138. package/dist/cli/utils/resolve-session.d.ts +32 -0
  139. package/dist/cli/utils/resolve-session.d.ts.map +1 -0
  140. package/dist/cli/utils/resolve-session.js +39 -0
  141. package/dist/cli/utils/resolve-session.js.map +1 -0
  142. package/dist/core/config.d.ts +4 -1
  143. package/dist/core/config.d.ts.map +1 -1
  144. package/dist/core/config.js +11 -23
  145. package/dist/core/config.js.map +1 -1
  146. package/dist/core/constants.d.ts +51 -13
  147. package/dist/core/constants.d.ts.map +1 -1
  148. package/dist/core/constants.js +63 -13
  149. package/dist/core/constants.js.map +1 -1
  150. package/dist/core/diagnostics/checks.d.ts +151 -0
  151. package/dist/core/diagnostics/checks.d.ts.map +1 -0
  152. package/dist/core/diagnostics/checks.js +766 -0
  153. package/dist/core/diagnostics/checks.js.map +1 -0
  154. package/dist/core/diagnostics/daemon-status.d.ts +77 -0
  155. package/dist/core/diagnostics/daemon-status.d.ts.map +1 -0
  156. package/dist/core/diagnostics/daemon-status.js +113 -0
  157. package/dist/core/diagnostics/daemon-status.js.map +1 -0
  158. package/dist/core/diagnostics/entropy-checks.d.ts +83 -0
  159. package/dist/core/diagnostics/entropy-checks.d.ts.map +1 -0
  160. package/dist/core/diagnostics/entropy-checks.js +400 -0
  161. package/dist/core/diagnostics/entropy-checks.js.map +1 -0
  162. package/dist/core/diagnostics/fix-runner.d.ts +54 -0
  163. package/dist/core/diagnostics/fix-runner.d.ts.map +1 -0
  164. package/dist/core/diagnostics/fix-runner.js +90 -0
  165. package/dist/core/diagnostics/fix-runner.js.map +1 -0
  166. package/dist/core/diagnostics/heartbeat-reader.d.ts +28 -0
  167. package/dist/core/diagnostics/heartbeat-reader.d.ts.map +1 -0
  168. package/dist/core/diagnostics/heartbeat-reader.js +50 -0
  169. package/dist/core/diagnostics/heartbeat-reader.js.map +1 -0
  170. package/dist/core/diagnostics/knip-runner.d.ts +49 -0
  171. package/dist/core/diagnostics/knip-runner.d.ts.map +1 -0
  172. package/dist/core/diagnostics/knip-runner.js +100 -0
  173. package/dist/core/diagnostics/knip-runner.js.map +1 -0
  174. package/dist/core/diagnostics/markers.d.ts +96 -0
  175. package/dist/core/diagnostics/markers.d.ts.map +1 -0
  176. package/dist/core/diagnostics/markers.js +153 -0
  177. package/dist/core/diagnostics/markers.js.map +1 -0
  178. package/dist/core/event-fields.d.ts +27 -0
  179. package/dist/core/event-fields.d.ts.map +1 -1
  180. package/dist/core/event-fields.js +43 -0
  181. package/dist/core/event-fields.js.map +1 -1
  182. package/dist/core/governance/global-inject.d.ts +90 -0
  183. package/dist/core/governance/global-inject.d.ts.map +1 -0
  184. package/dist/core/governance/global-inject.js +184 -0
  185. package/dist/core/governance/global-inject.js.map +1 -0
  186. package/dist/core/insights/agent-anchor-guard.d.ts +77 -0
  187. package/dist/core/insights/agent-anchor-guard.d.ts.map +1 -0
  188. package/dist/core/insights/agent-anchor-guard.js +119 -0
  189. package/dist/core/insights/agent-anchor-guard.js.map +1 -0
  190. package/dist/core/insights/agent-distill-context.d.ts +55 -0
  191. package/dist/core/insights/agent-distill-context.d.ts.map +1 -0
  192. package/dist/core/insights/agent-distill-context.js +146 -0
  193. package/dist/core/insights/agent-distill-context.js.map +1 -0
  194. package/dist/core/insights/agent-distill-spawn.d.ts +56 -0
  195. package/dist/core/insights/agent-distill-spawn.d.ts.map +1 -0
  196. package/dist/core/insights/agent-distill-spawn.js +179 -0
  197. package/dist/core/insights/agent-distill-spawn.js.map +1 -0
  198. package/dist/core/insights/agent-drift.d.ts +66 -0
  199. package/dist/core/insights/agent-drift.d.ts.map +1 -0
  200. package/dist/core/insights/agent-drift.js +109 -0
  201. package/dist/core/insights/agent-drift.js.map +1 -0
  202. package/dist/core/insights/agent-evolution-sources.d.ts +21 -0
  203. package/dist/core/insights/agent-evolution-sources.d.ts.map +1 -0
  204. package/dist/core/insights/agent-evolution-sources.js +36 -0
  205. package/dist/core/insights/agent-evolution-sources.js.map +1 -0
  206. package/dist/core/insights/agent-health.d.ts +142 -0
  207. package/dist/core/insights/agent-health.d.ts.map +1 -0
  208. package/dist/core/insights/agent-health.js +296 -0
  209. package/dist/core/insights/agent-health.js.map +1 -0
  210. package/dist/core/insights/agent-patch-apply.d.ts +45 -0
  211. package/dist/core/insights/agent-patch-apply.d.ts.map +1 -0
  212. package/dist/core/insights/agent-patch-apply.js +165 -0
  213. package/dist/core/insights/agent-patch-apply.js.map +1 -0
  214. package/dist/core/insights/agent-suggest.d.ts +128 -0
  215. package/dist/core/insights/agent-suggest.d.ts.map +1 -0
  216. package/dist/core/insights/agent-suggest.js +284 -0
  217. package/dist/core/insights/agent-suggest.js.map +1 -0
  218. package/dist/core/insights/coverage-tiers.d.ts +46 -0
  219. package/dist/core/insights/coverage-tiers.d.ts.map +1 -0
  220. package/dist/core/insights/coverage-tiers.js +95 -0
  221. package/dist/core/insights/coverage-tiers.js.map +1 -0
  222. package/dist/core/insights/experience-extractor.d.ts +60 -0
  223. package/dist/core/insights/experience-extractor.d.ts.map +1 -0
  224. package/dist/core/insights/experience-extractor.js +319 -0
  225. package/dist/core/insights/experience-extractor.js.map +1 -0
  226. package/dist/core/insights/violation-reporter.d.ts +149 -0
  227. package/dist/core/insights/violation-reporter.d.ts.map +1 -0
  228. package/dist/core/insights/violation-reporter.js +391 -0
  229. package/dist/core/insights/violation-reporter.js.map +1 -0
  230. package/dist/core/loop/loop-engine.d.ts +140 -0
  231. package/dist/core/loop/loop-engine.d.ts.map +1 -0
  232. package/dist/core/loop/loop-engine.js +266 -0
  233. package/dist/core/loop/loop-engine.js.map +1 -0
  234. package/dist/core/queue/index.d.ts +16 -3
  235. package/dist/core/queue/index.d.ts.map +1 -1
  236. package/dist/core/queue/index.js +16 -4
  237. package/dist/core/queue/index.js.map +1 -1
  238. package/dist/core/storage/base.d.ts +317 -0
  239. package/dist/core/storage/base.d.ts.map +1 -1
  240. package/dist/core/storage/base.js +1093 -0
  241. package/dist/core/storage/base.js.map +1 -1
  242. package/dist/core/storage/codec/tool-input-codec.d.ts +93 -0
  243. package/dist/core/storage/codec/tool-input-codec.d.ts.map +1 -0
  244. package/dist/core/storage/codec/tool-input-codec.js +159 -0
  245. package/dist/core/storage/codec/tool-input-codec.js.map +1 -0
  246. package/dist/core/storage/codegraph-types.d.ts +79 -0
  247. package/dist/core/storage/codegraph-types.d.ts.map +1 -0
  248. package/dist/core/storage/codegraph-types.js +14 -0
  249. package/dist/core/storage/codegraph-types.js.map +1 -0
  250. package/dist/core/storage/codegraph.d.ts +186 -0
  251. package/dist/core/storage/codegraph.d.ts.map +1 -0
  252. package/dist/core/storage/codegraph.js +452 -0
  253. package/dist/core/storage/codegraph.js.map +1 -0
  254. package/dist/core/storage/decisions.d.ts +387 -0
  255. package/dist/core/storage/decisions.d.ts.map +1 -0
  256. package/dist/core/storage/decisions.js +534 -0
  257. package/dist/core/storage/decisions.js.map +1 -0
  258. package/dist/core/storage/events.d.ts +239 -8
  259. package/dist/core/storage/events.d.ts.map +1 -1
  260. package/dist/core/storage/events.js +705 -39
  261. package/dist/core/storage/events.js.map +1 -1
  262. package/dist/core/storage/feedback.d.ts +111 -0
  263. package/dist/core/storage/feedback.d.ts.map +1 -0
  264. package/dist/core/storage/feedback.js +186 -0
  265. package/dist/core/storage/feedback.js.map +1 -0
  266. package/dist/core/storage/forge-config.d.ts +40 -0
  267. package/dist/core/storage/forge-config.d.ts.map +1 -0
  268. package/dist/core/storage/forge-config.js +65 -0
  269. package/dist/core/storage/forge-config.js.map +1 -0
  270. package/dist/core/storage/injections.d.ts +68 -0
  271. package/dist/core/storage/injections.d.ts.map +1 -1
  272. package/dist/core/storage/injections.js +131 -5
  273. package/dist/core/storage/injections.js.map +1 -1
  274. package/dist/core/storage/knowledge.d.ts +332 -0
  275. package/dist/core/storage/knowledge.d.ts.map +1 -0
  276. package/dist/core/storage/knowledge.js +589 -0
  277. package/dist/core/storage/knowledge.js.map +1 -0
  278. package/dist/core/storage/maintenance.d.ts +36 -9
  279. package/dist/core/storage/maintenance.d.ts.map +1 -1
  280. package/dist/core/storage/maintenance.js +56 -24
  281. package/dist/core/storage/maintenance.js.map +1 -1
  282. package/dist/core/storage/pipeline-rollup.d.ts +111 -0
  283. package/dist/core/storage/pipeline-rollup.d.ts.map +1 -0
  284. package/dist/core/storage/pipeline-rollup.js +432 -0
  285. package/dist/core/storage/pipeline-rollup.js.map +1 -0
  286. package/dist/core/storage/routing.d.ts +50 -3
  287. package/dist/core/storage/routing.d.ts.map +1 -1
  288. package/dist/core/storage/routing.js +131 -10
  289. package/dist/core/storage/routing.js.map +1 -1
  290. package/dist/core/storage/rows.d.ts +31 -8
  291. package/dist/core/storage/rows.d.ts.map +1 -1
  292. package/dist/core/storage/schema.sql +367 -23
  293. package/dist/core/storage/sessions.d.ts +136 -0
  294. package/dist/core/storage/sessions.d.ts.map +1 -1
  295. package/dist/core/storage/sessions.js +352 -15
  296. package/dist/core/storage/sessions.js.map +1 -1
  297. package/dist/core/storage/skills.d.ts +160 -0
  298. package/dist/core/storage/skills.d.ts.map +1 -1
  299. package/dist/core/storage/skills.js +368 -7
  300. package/dist/core/storage/skills.js.map +1 -1
  301. package/dist/core/storage/sqlite.d.ts +309 -20
  302. package/dist/core/storage/sqlite.d.ts.map +1 -1
  303. package/dist/core/storage/sqlite.js +523 -16
  304. package/dist/core/storage/sqlite.js.map +1 -1
  305. package/dist/core/storage/tasks.d.ts +744 -2
  306. package/dist/core/storage/tasks.d.ts.map +1 -1
  307. package/dist/core/storage/tasks.js +1691 -17
  308. package/dist/core/storage/tasks.js.map +1 -1
  309. package/dist/core/storage/tool-intercepts.d.ts +69 -0
  310. package/dist/core/storage/tool-intercepts.d.ts.map +1 -0
  311. package/dist/core/storage/tool-intercepts.js +116 -0
  312. package/dist/core/storage/tool-intercepts.js.map +1 -0
  313. package/dist/core/types.d.ts +136 -18
  314. package/dist/core/types.d.ts.map +1 -1
  315. package/dist/core/types.js +10 -0
  316. package/dist/core/types.js.map +1 -1
  317. package/dist/core/utils/backup.d.ts +81 -0
  318. package/dist/core/utils/backup.d.ts.map +1 -0
  319. package/dist/core/utils/backup.js +98 -0
  320. package/dist/core/utils/backup.js.map +1 -0
  321. package/dist/core/utils/binary-paths.d.ts +124 -0
  322. package/dist/core/utils/binary-paths.d.ts.map +1 -0
  323. package/dist/core/utils/binary-paths.js +218 -0
  324. package/dist/core/utils/binary-paths.js.map +1 -0
  325. package/dist/core/utils/bypass-token.d.ts +75 -0
  326. package/dist/core/utils/bypass-token.d.ts.map +1 -0
  327. package/dist/core/utils/bypass-token.js +133 -0
  328. package/dist/core/utils/bypass-token.js.map +1 -0
  329. package/dist/core/utils/cc-builtin-agents.d.ts +3 -0
  330. package/dist/core/utils/cc-builtin-agents.d.ts.map +1 -0
  331. package/dist/core/utils/cc-builtin-agents.js +29 -0
  332. package/dist/core/utils/cc-builtin-agents.js.map +1 -0
  333. package/dist/core/utils/claude-cli-resolver.d.ts +26 -0
  334. package/dist/core/utils/claude-cli-resolver.d.ts.map +1 -0
  335. package/dist/core/utils/claude-cli-resolver.js +115 -0
  336. package/dist/core/utils/claude-cli-resolver.js.map +1 -0
  337. package/dist/core/utils/claude-cli-spawn.d.ts +106 -0
  338. package/dist/core/utils/claude-cli-spawn.d.ts.map +1 -0
  339. package/dist/core/utils/claude-cli-spawn.js +219 -0
  340. package/dist/core/utils/claude-cli-spawn.js.map +1 -0
  341. package/dist/core/utils/forge-resume-block.d.ts.map +1 -1
  342. package/dist/core/utils/forge-resume-block.js +3 -2
  343. package/dist/core/utils/forge-resume-block.js.map +1 -1
  344. package/dist/core/utils/logger.d.ts +15 -3
  345. package/dist/core/utils/logger.d.ts.map +1 -1
  346. package/dist/core/utils/logger.js +20 -2
  347. package/dist/core/utils/logger.js.map +1 -1
  348. package/dist/core/utils/noise-prompt.d.ts +97 -0
  349. package/dist/core/utils/noise-prompt.d.ts.map +1 -0
  350. package/dist/core/utils/noise-prompt.js +127 -0
  351. package/dist/core/utils/noise-prompt.js.map +1 -0
  352. package/dist/core/utils/path.d.ts +0 -4
  353. package/dist/core/utils/path.d.ts.map +1 -1
  354. package/dist/core/utils/path.js +0 -7
  355. package/dist/core/utils/path.js.map +1 -1
  356. package/dist/core/utils/time.d.ts +67 -0
  357. package/dist/core/utils/time.d.ts.map +1 -1
  358. package/dist/core/utils/time.js +147 -0
  359. package/dist/core/utils/time.js.map +1 -1
  360. package/dist/daemon/agent-sync.d.ts +24 -0
  361. package/dist/daemon/agent-sync.d.ts.map +1 -0
  362. package/dist/daemon/agent-sync.js +114 -0
  363. package/dist/daemon/agent-sync.js.map +1 -0
  364. package/dist/daemon/config-store.d.ts +55 -0
  365. package/dist/daemon/config-store.d.ts.map +1 -0
  366. package/dist/daemon/config-store.js +146 -0
  367. package/dist/daemon/config-store.js.map +1 -0
  368. package/dist/daemon/event-parser.d.ts +22 -0
  369. package/dist/daemon/event-parser.d.ts.map +1 -1
  370. package/dist/daemon/event-parser.js +54 -3
  371. package/dist/daemon/event-parser.js.map +1 -1
  372. package/dist/daemon/handlers/history-exporter.d.ts.map +1 -1
  373. package/dist/daemon/handlers/history-exporter.js +9 -8
  374. package/dist/daemon/handlers/history-exporter.js.map +1 -1
  375. package/dist/daemon/handlers/post-tool-use.d.ts +66 -4
  376. package/dist/daemon/handlers/post-tool-use.d.ts.map +1 -1
  377. package/dist/daemon/handlers/post-tool-use.js +221 -8
  378. package/dist/daemon/handlers/post-tool-use.js.map +1 -1
  379. package/dist/daemon/handlers/pre-tool-use.d.ts +181 -0
  380. package/dist/daemon/handlers/pre-tool-use.d.ts.map +1 -0
  381. package/dist/daemon/handlers/pre-tool-use.js +618 -0
  382. package/dist/daemon/handlers/pre-tool-use.js.map +1 -0
  383. package/dist/daemon/handlers/stop.d.ts +55 -7
  384. package/dist/daemon/handlers/stop.d.ts.map +1 -1
  385. package/dist/daemon/handlers/stop.js +245 -8
  386. package/dist/daemon/handlers/stop.js.map +1 -1
  387. package/dist/daemon/handlers/user-prompt.d.ts +51 -14
  388. package/dist/daemon/handlers/user-prompt.d.ts.map +1 -1
  389. package/dist/daemon/handlers/user-prompt.js +223 -95
  390. package/dist/daemon/handlers/user-prompt.js.map +1 -1
  391. package/dist/daemon/handlers/violation-content-backfill.d.ts +76 -0
  392. package/dist/daemon/handlers/violation-content-backfill.d.ts.map +1 -0
  393. package/dist/daemon/handlers/violation-content-backfill.js +167 -0
  394. package/dist/daemon/handlers/violation-content-backfill.js.map +1 -0
  395. package/dist/daemon/hook-sync.d.ts.map +1 -1
  396. package/dist/daemon/hook-sync.js +2 -1
  397. package/dist/daemon/hook-sync.js.map +1 -1
  398. package/dist/daemon/index.d.ts +19 -0
  399. package/dist/daemon/index.d.ts.map +1 -1
  400. package/dist/daemon/index.js +439 -86
  401. package/dist/daemon/index.js.map +1 -1
  402. package/dist/daemon/lifecycle.d.ts +48 -1
  403. package/dist/daemon/lifecycle.d.ts.map +1 -1
  404. package/dist/daemon/lifecycle.js +98 -2
  405. package/dist/daemon/lifecycle.js.map +1 -1
  406. package/dist/daemon/router.d.ts +4 -1
  407. package/dist/daemon/router.d.ts.map +1 -1
  408. package/dist/daemon/router.js +4 -2
  409. package/dist/daemon/router.js.map +1 -1
  410. package/dist/daemon/rules/defaults.d.ts +20 -0
  411. package/dist/daemon/rules/defaults.d.ts.map +1 -0
  412. package/dist/daemon/rules/defaults.js +779 -0
  413. package/dist/daemon/rules/defaults.js.map +1 -0
  414. package/dist/daemon/rules/registry.d.ts +47 -0
  415. package/dist/daemon/rules/registry.d.ts.map +1 -0
  416. package/dist/daemon/rules/registry.js +84 -0
  417. package/dist/daemon/rules/registry.js.map +1 -0
  418. package/dist/daemon/rules/types.d.ts +176 -0
  419. package/dist/daemon/rules/types.d.ts.map +1 -0
  420. package/dist/daemon/rules/types.js +15 -0
  421. package/dist/daemon/rules/types.js.map +1 -0
  422. package/dist/daemon/rules/whitelist.d.ts +101 -0
  423. package/dist/daemon/rules/whitelist.d.ts.map +1 -0
  424. package/dist/daemon/rules/whitelist.js +210 -0
  425. package/dist/daemon/rules/whitelist.js.map +1 -0
  426. package/dist/daemon/rules/workflow-defaults.d.ts +52 -0
  427. package/dist/daemon/rules/workflow-defaults.d.ts.map +1 -0
  428. package/dist/daemon/rules/workflow-defaults.js +521 -0
  429. package/dist/daemon/rules/workflow-defaults.js.map +1 -0
  430. package/dist/daemon/server.d.ts +11 -1
  431. package/dist/daemon/server.d.ts.map +1 -1
  432. package/dist/daemon/server.js +7 -1
  433. package/dist/daemon/server.js.map +1 -1
  434. package/dist/daemon/services/codegraph-sync.d.ts +94 -0
  435. package/dist/daemon/services/codegraph-sync.d.ts.map +1 -0
  436. package/dist/daemon/services/codegraph-sync.js +159 -0
  437. package/dist/daemon/services/codegraph-sync.js.map +1 -0
  438. package/dist/daemon/services/context-injector.d.ts +34 -0
  439. package/dist/daemon/services/context-injector.d.ts.map +1 -0
  440. package/dist/daemon/services/context-injector.js +61 -0
  441. package/dist/daemon/services/context-injector.js.map +1 -0
  442. package/dist/daemon/services/decision-hint.d.ts +240 -0
  443. package/dist/daemon/services/decision-hint.d.ts.map +1 -0
  444. package/dist/daemon/services/decision-hint.js +562 -0
  445. package/dist/daemon/services/decision-hint.js.map +1 -0
  446. package/dist/daemon/services/event-ttl-sweep.d.ts +86 -0
  447. package/dist/daemon/services/event-ttl-sweep.d.ts.map +1 -0
  448. package/dist/daemon/services/event-ttl-sweep.js +124 -0
  449. package/dist/daemon/services/event-ttl-sweep.js.map +1 -0
  450. package/dist/daemon/services/feedback-aggregator.d.ts +167 -0
  451. package/dist/daemon/services/feedback-aggregator.d.ts.map +1 -0
  452. package/dist/daemon/services/feedback-aggregator.js +415 -0
  453. package/dist/daemon/services/feedback-aggregator.js.map +1 -0
  454. package/dist/daemon/services/heartbeat-writer.d.ts +46 -0
  455. package/dist/daemon/services/heartbeat-writer.d.ts.map +1 -0
  456. package/dist/daemon/services/heartbeat-writer.js +82 -0
  457. package/dist/daemon/services/heartbeat-writer.js.map +1 -0
  458. package/dist/daemon/services/idle-session-sweeper.d.ts +61 -0
  459. package/dist/daemon/services/idle-session-sweeper.d.ts.map +1 -0
  460. package/dist/daemon/services/idle-session-sweeper.js +94 -0
  461. package/dist/daemon/services/idle-session-sweeper.js.map +1 -0
  462. package/dist/daemon/services/idle-task-budget.d.ts +50 -0
  463. package/dist/daemon/services/idle-task-budget.d.ts.map +1 -0
  464. package/dist/daemon/services/idle-task-budget.js +72 -0
  465. package/dist/daemon/services/idle-task-budget.js.map +1 -0
  466. package/dist/daemon/services/intercept-revive.d.ts +60 -0
  467. package/dist/daemon/services/intercept-revive.d.ts.map +1 -0
  468. package/dist/daemon/services/intercept-revive.js +86 -0
  469. package/dist/daemon/services/intercept-revive.js.map +1 -0
  470. package/dist/daemon/services/intercept-rollback-guard.d.ts +105 -0
  471. package/dist/daemon/services/intercept-rollback-guard.d.ts.map +1 -0
  472. package/dist/daemon/services/intercept-rollback-guard.js +152 -0
  473. package/dist/daemon/services/intercept-rollback-guard.js.map +1 -0
  474. package/dist/daemon/services/intercept-timeout-sweeper.d.ts +58 -0
  475. package/dist/daemon/services/intercept-timeout-sweeper.d.ts.map +1 -0
  476. package/dist/daemon/services/intercept-timeout-sweeper.js +83 -0
  477. package/dist/daemon/services/intercept-timeout-sweeper.js.map +1 -0
  478. package/dist/daemon/services/kb-injector.d.ts +57 -0
  479. package/dist/daemon/services/kb-injector.d.ts.map +1 -0
  480. package/dist/daemon/services/kb-injector.js +148 -0
  481. package/dist/daemon/services/kb-injector.js.map +1 -0
  482. package/dist/daemon/services/kb-rebuild-scheduler.d.ts +95 -0
  483. package/dist/daemon/services/kb-rebuild-scheduler.d.ts.map +1 -0
  484. package/dist/daemon/services/kb-rebuild-scheduler.js +149 -0
  485. package/dist/daemon/services/kb-rebuild-scheduler.js.map +1 -0
  486. package/dist/daemon/services/loop-hint.d.ts +139 -0
  487. package/dist/daemon/services/loop-hint.d.ts.map +1 -0
  488. package/dist/daemon/services/loop-hint.js +272 -0
  489. package/dist/daemon/services/loop-hint.js.map +1 -0
  490. package/dist/daemon/services/outcome-classification-service.d.ts +49 -0
  491. package/dist/daemon/services/outcome-classification-service.d.ts.map +1 -0
  492. package/dist/daemon/services/outcome-classification-service.js +214 -0
  493. package/dist/daemon/services/outcome-classification-service.js.map +1 -0
  494. package/dist/daemon/services/outcome-classifier.d.ts +136 -0
  495. package/dist/daemon/services/outcome-classifier.d.ts.map +1 -0
  496. package/dist/daemon/services/outcome-classifier.js +178 -0
  497. package/dist/daemon/services/outcome-classifier.js.map +1 -0
  498. package/dist/daemon/services/outcome-nudge.d.ts +107 -0
  499. package/dist/daemon/services/outcome-nudge.d.ts.map +1 -0
  500. package/dist/daemon/services/outcome-nudge.js +242 -0
  501. package/dist/daemon/services/outcome-nudge.js.map +1 -0
  502. package/dist/daemon/services/spec-approval.d.ts +127 -0
  503. package/dist/daemon/services/spec-approval.d.ts.map +1 -0
  504. package/dist/daemon/services/spec-approval.js +216 -0
  505. package/dist/daemon/services/spec-approval.js.map +1 -0
  506. package/dist/daemon/services/spec-gate.d.ts +54 -0
  507. package/dist/daemon/services/spec-gate.d.ts.map +1 -0
  508. package/dist/daemon/services/spec-gate.js +113 -0
  509. package/dist/daemon/services/spec-gate.js.map +1 -0
  510. package/dist/daemon/services/task-boundary-classifier.d.ts +78 -0
  511. package/dist/daemon/services/task-boundary-classifier.d.ts.map +1 -0
  512. package/dist/daemon/services/task-boundary-classifier.js +202 -0
  513. package/dist/daemon/services/task-boundary-classifier.js.map +1 -0
  514. package/dist/daemon/services/task-segmenter.d.ts +230 -1
  515. package/dist/daemon/services/task-segmenter.d.ts.map +1 -1
  516. package/dist/daemon/services/task-segmenter.js +527 -17
  517. package/dist/daemon/services/task-segmenter.js.map +1 -1
  518. package/dist/daemon/skill-sync.d.ts +7 -2
  519. package/dist/daemon/skill-sync.d.ts.map +1 -1
  520. package/dist/daemon/skill-sync.js +114 -9
  521. package/dist/daemon/skill-sync.js.map +1 -1
  522. package/dist/daemon/startup/maintenance-schedulers.d.ts +68 -0
  523. package/dist/daemon/startup/maintenance-schedulers.d.ts.map +1 -0
  524. package/dist/daemon/startup/maintenance-schedulers.js +294 -0
  525. package/dist/daemon/startup/maintenance-schedulers.js.map +1 -0
  526. package/dist/daemon/templates/agents/agent-retro-distiller.md +106 -0
  527. package/dist/daemon/templates/agents/claudemd-writer.md +102 -0
  528. package/dist/daemon/templates/agents/coder.md +262 -0
  529. package/dist/daemon/templates/agents/decision-maker.md +546 -0
  530. package/dist/daemon/templates/agents/doc-reviewer.md +118 -0
  531. package/dist/daemon/templates/agents/harness-debug-full.md +196 -0
  532. package/dist/daemon/templates/agents/knowledge-builder.md +120 -0
  533. package/dist/daemon/templates/agents/patch-applier.md +145 -0
  534. package/dist/daemon/templates/agents/planner.md +217 -0
  535. package/dist/daemon/templates/agents/safety-net-implementer.md +278 -0
  536. package/dist/daemon/templates/agents/skill-distiller.md +114 -0
  537. package/dist/daemon/templates/agents/task-boundary-classifier.md +65 -0
  538. package/dist/daemon/templates/agents/verify-agent.md +259 -0
  539. package/dist/daemon/utils/inject-block.d.ts +39 -0
  540. package/dist/daemon/utils/inject-block.d.ts.map +1 -0
  541. package/dist/daemon/utils/inject-block.js +25 -0
  542. package/dist/daemon/utils/inject-block.js.map +1 -0
  543. package/dist/hooks/hook-lib.sh +8 -0
  544. package/dist/hooks/notification.sh +19 -8
  545. package/dist/hooks/post-tool-use.sh +41 -23
  546. package/dist/hooks/pre-tool-use.sh +54 -23
  547. package/dist/hooks/session-start.sh +68 -0
  548. package/dist/hooks/stop.sh +31 -11
  549. package/dist/hooks/user-prompt-submit.sh +37 -21
  550. package/dist/knowledge/adapters/go-adapter.d.ts +65 -0
  551. package/dist/knowledge/adapters/go-adapter.d.ts.map +1 -0
  552. package/dist/knowledge/adapters/go-adapter.js +294 -0
  553. package/dist/knowledge/adapters/go-adapter.js.map +1 -0
  554. package/dist/knowledge/adapters/index.d.ts +41 -0
  555. package/dist/knowledge/adapters/index.d.ts.map +1 -0
  556. package/dist/knowledge/adapters/index.js +71 -0
  557. package/dist/knowledge/adapters/index.js.map +1 -0
  558. package/dist/knowledge/adapters/java-adapter.d.ts +66 -0
  559. package/dist/knowledge/adapters/java-adapter.d.ts.map +1 -0
  560. package/dist/knowledge/adapters/java-adapter.js +260 -0
  561. package/dist/knowledge/adapters/java-adapter.js.map +1 -0
  562. package/dist/knowledge/adapters/js-vue-adapter.d.ts +56 -0
  563. package/dist/knowledge/adapters/js-vue-adapter.d.ts.map +1 -0
  564. package/dist/knowledge/adapters/js-vue-adapter.js +203 -0
  565. package/dist/knowledge/adapters/js-vue-adapter.js.map +1 -0
  566. package/dist/knowledge/adapters/kotlin-adapter.d.ts +55 -0
  567. package/dist/knowledge/adapters/kotlin-adapter.d.ts.map +1 -0
  568. package/dist/knowledge/adapters/kotlin-adapter.js +209 -0
  569. package/dist/knowledge/adapters/kotlin-adapter.js.map +1 -0
  570. package/dist/knowledge/adapters/monorepo-adapter.d.ts +77 -0
  571. package/dist/knowledge/adapters/monorepo-adapter.d.ts.map +1 -0
  572. package/dist/knowledge/adapters/monorepo-adapter.js +170 -0
  573. package/dist/knowledge/adapters/monorepo-adapter.js.map +1 -0
  574. package/dist/knowledge/adapters/python-adapter.d.ts +89 -0
  575. package/dist/knowledge/adapters/python-adapter.d.ts.map +1 -0
  576. package/dist/knowledge/adapters/python-adapter.js +358 -0
  577. package/dist/knowledge/adapters/python-adapter.js.map +1 -0
  578. package/dist/knowledge/adapters/rust-adapter.d.ts +73 -0
  579. package/dist/knowledge/adapters/rust-adapter.d.ts.map +1 -0
  580. package/dist/knowledge/adapters/rust-adapter.js +329 -0
  581. package/dist/knowledge/adapters/rust-adapter.js.map +1 -0
  582. package/dist/knowledge/adapters/types.d.ts +99 -0
  583. package/dist/knowledge/adapters/types.d.ts.map +1 -0
  584. package/dist/knowledge/adapters/types.js +17 -0
  585. package/dist/knowledge/adapters/types.js.map +1 -0
  586. package/dist/knowledge/adapters/typescript-adapter.d.ts +57 -0
  587. package/dist/knowledge/adapters/typescript-adapter.d.ts.map +1 -0
  588. package/dist/knowledge/adapters/typescript-adapter.js +171 -0
  589. package/dist/knowledge/adapters/typescript-adapter.js.map +1 -0
  590. package/dist/knowledge/audit-applier.d.ts +70 -0
  591. package/dist/knowledge/audit-applier.d.ts.map +1 -0
  592. package/dist/knowledge/audit-applier.js +251 -0
  593. package/dist/knowledge/audit-applier.js.map +1 -0
  594. package/dist/knowledge/builder.d.ts +261 -0
  595. package/dist/knowledge/builder.d.ts.map +1 -0
  596. package/dist/knowledge/builder.js +966 -0
  597. package/dist/knowledge/builder.js.map +1 -0
  598. package/dist/knowledge/cli-provider.d.ts +151 -0
  599. package/dist/knowledge/cli-provider.d.ts.map +1 -0
  600. package/dist/knowledge/cli-provider.js +313 -0
  601. package/dist/knowledge/cli-provider.js.map +1 -0
  602. package/dist/knowledge/constants.d.ts +78 -0
  603. package/dist/knowledge/constants.d.ts.map +1 -0
  604. package/dist/knowledge/constants.js +98 -0
  605. package/dist/knowledge/constants.js.map +1 -0
  606. package/dist/knowledge/cross-module.d.ts +139 -0
  607. package/dist/knowledge/cross-module.d.ts.map +1 -0
  608. package/dist/knowledge/cross-module.js +370 -0
  609. package/dist/knowledge/cross-module.js.map +1 -0
  610. package/dist/knowledge/git-hooks.d.ts +67 -0
  611. package/dist/knowledge/git-hooks.d.ts.map +1 -0
  612. package/dist/knowledge/git-hooks.js +258 -0
  613. package/dist/knowledge/git-hooks.js.map +1 -0
  614. package/dist/knowledge/graph/edge-extractor.d.ts +45 -0
  615. package/dist/knowledge/graph/edge-extractor.d.ts.map +1 -0
  616. package/dist/knowledge/graph/edge-extractor.js +242 -0
  617. package/dist/knowledge/graph/edge-extractor.js.map +1 -0
  618. package/dist/knowledge/graph/impact.d.ts +73 -0
  619. package/dist/knowledge/graph/impact.d.ts.map +1 -0
  620. package/dist/knowledge/graph/impact.js +94 -0
  621. package/dist/knowledge/graph/impact.js.map +1 -0
  622. package/dist/knowledge/graph/types.d.ts +22 -0
  623. package/dist/knowledge/graph/types.d.ts.map +1 -0
  624. package/dist/knowledge/graph/types.js +13 -0
  625. package/dist/knowledge/graph/types.js.map +1 -0
  626. package/dist/knowledge/module-hash.d.ts +88 -0
  627. package/dist/knowledge/module-hash.d.ts.map +1 -0
  628. package/dist/knowledge/module-hash.js +162 -0
  629. package/dist/knowledge/module-hash.js.map +1 -0
  630. package/dist/knowledge/project-detector.d.ts +101 -0
  631. package/dist/knowledge/project-detector.d.ts.map +1 -0
  632. package/dist/knowledge/project-detector.js +223 -0
  633. package/dist/knowledge/project-detector.js.map +1 -0
  634. package/dist/knowledge/prompt.d.ts +237 -0
  635. package/dist/knowledge/prompt.d.ts.map +1 -0
  636. package/dist/knowledge/prompt.js +416 -0
  637. package/dist/knowledge/prompt.js.map +1 -0
  638. package/dist/knowledge/query.d.ts +118 -0
  639. package/dist/knowledge/query.d.ts.map +1 -0
  640. package/dist/knowledge/query.js +438 -0
  641. package/dist/knowledge/query.js.map +1 -0
  642. package/dist/knowledge/repo-map.d.ts +97 -0
  643. package/dist/knowledge/repo-map.d.ts.map +1 -0
  644. package/dist/knowledge/repo-map.js +447 -0
  645. package/dist/knowledge/repo-map.js.map +1 -0
  646. package/dist/knowledge/tools/index.d.ts +14 -0
  647. package/dist/knowledge/tools/index.d.ts.map +1 -0
  648. package/dist/knowledge/tools/index.js +11 -0
  649. package/dist/knowledge/tools/index.js.map +1 -0
  650. package/dist/knowledge/tools/knowledge-get-page.d.ts +46 -0
  651. package/dist/knowledge/tools/knowledge-get-page.d.ts.map +1 -0
  652. package/dist/knowledge/tools/knowledge-get-page.js +101 -0
  653. package/dist/knowledge/tools/knowledge-get-page.js.map +1 -0
  654. package/dist/knowledge/tools/knowledge-query.d.ts +77 -0
  655. package/dist/knowledge/tools/knowledge-query.d.ts.map +1 -0
  656. package/dist/knowledge/tools/knowledge-query.js +104 -0
  657. package/dist/knowledge/tools/knowledge-query.js.map +1 -0
  658. package/dist/knowledge/tools/repo-map-lookup.d.ts +45 -0
  659. package/dist/knowledge/tools/repo-map-lookup.d.ts.map +1 -0
  660. package/dist/knowledge/tools/repo-map-lookup.js +82 -0
  661. package/dist/knowledge/tools/repo-map-lookup.js.map +1 -0
  662. package/dist/knowledge/types.d.ts +269 -0
  663. package/dist/knowledge/types.d.ts.map +1 -0
  664. package/dist/knowledge/types.js +10 -0
  665. package/dist/knowledge/types.js.map +1 -0
  666. package/dist/knowledge/validator.d.ts +90 -0
  667. package/dist/knowledge/validator.d.ts.map +1 -0
  668. package/dist/knowledge/validator.js +355 -0
  669. package/dist/knowledge/validator.js.map +1 -0
  670. package/dist/mcp/server.d.ts +64 -8
  671. package/dist/mcp/server.d.ts.map +1 -1
  672. package/dist/mcp/server.js +448 -12
  673. package/dist/mcp/server.js.map +1 -1
  674. package/dist/skills/builtin-skills.d.ts +35 -0
  675. package/dist/skills/builtin-skills.d.ts.map +1 -0
  676. package/dist/skills/builtin-skills.js +68 -0
  677. package/dist/skills/builtin-skills.js.map +1 -0
  678. package/dist/skills/distill/attribution.d.ts +59 -0
  679. package/dist/skills/distill/attribution.d.ts.map +1 -0
  680. package/dist/skills/distill/attribution.js +101 -0
  681. package/dist/skills/distill/attribution.js.map +1 -0
  682. package/dist/skills/distill/distiller.d.ts +161 -0
  683. package/dist/skills/distill/distiller.d.ts.map +1 -0
  684. package/dist/skills/distill/distiller.js +461 -0
  685. package/dist/skills/distill/distiller.js.map +1 -0
  686. package/dist/skills/distill/index.d.ts +223 -0
  687. package/dist/skills/distill/index.d.ts.map +1 -0
  688. package/dist/skills/distill/index.js +466 -0
  689. package/dist/skills/distill/index.js.map +1 -0
  690. package/dist/skills/distill/project-anchor-guard.d.ts +116 -0
  691. package/dist/skills/distill/project-anchor-guard.d.ts.map +1 -0
  692. package/dist/skills/distill/project-anchor-guard.js +334 -0
  693. package/dist/skills/distill/project-anchor-guard.js.map +1 -0
  694. package/dist/skills/distill/topic-deduper.d.ts +77 -0
  695. package/dist/skills/distill/topic-deduper.d.ts.map +1 -0
  696. package/dist/skills/distill/topic-deduper.js +119 -0
  697. package/dist/skills/distill/topic-deduper.js.map +1 -0
  698. package/dist/skills/distill/upstream-fetcher.d.ts +71 -0
  699. package/dist/skills/distill/upstream-fetcher.d.ts.map +1 -0
  700. package/dist/skills/distill/upstream-fetcher.js +202 -0
  701. package/dist/skills/distill/upstream-fetcher.js.map +1 -0
  702. package/dist/skills/distilled/distilled-api-design.md +495 -0
  703. package/dist/skills/distilled/distilled-architecture-decision.md +173 -0
  704. package/dist/skills/distilled/distilled-brainstorming.md +79 -0
  705. package/dist/skills/distilled/distilled-brand-guidelines.md +86 -0
  706. package/dist/skills/distilled/distilled-canvas-design.md +128 -0
  707. package/dist/skills/distilled/distilled-claude-api.md +185 -0
  708. package/dist/skills/distilled/distilled-creator.md +181 -0
  709. package/dist/skills/distilled/distilled-db-schema-design.md +245 -0
  710. package/dist/skills/distilled/distilled-dispatching-parallel-agents.md +136 -0
  711. package/dist/skills/distilled/distilled-doc-coauthoring.md +144 -0
  712. package/dist/skills/distilled/distilled-docx.md +231 -0
  713. package/dist/skills/distilled/distilled-executing-plans.md +148 -0
  714. package/dist/skills/distilled/distilled-finishing-a-development-branch.md +213 -0
  715. package/dist/skills/distilled/distilled-frontend-design.md +118 -0
  716. package/dist/skills/distilled/distilled-harness-engineering.md +242 -0
  717. package/dist/skills/distilled/distilled-karpathy-guidelines.md +104 -0
  718. package/dist/skills/distilled/distilled-performance-optimization.md +175 -0
  719. package/dist/skills/distilled/distilled-receiving-code-review.md +185 -0
  720. package/dist/skills/distilled/distilled-spec-driven-design.md +193 -0
  721. package/dist/skills/distilled/distilled-subagent-driven-development.md +124 -0
  722. package/dist/skills/distilled/distilled-systematic-debugging.md +154 -0
  723. package/dist/skills/distilled/distilled-test-driven-development.md +432 -0
  724. package/dist/skills/distilled/distilled-using-superpowers.md +134 -0
  725. package/dist/skills/distilled/distilled-verification-before-completion.md +213 -0
  726. package/dist/skills/distilled/distilled-writing-skills.md +175 -0
  727. package/dist/skills/registry.d.ts +55 -51
  728. package/dist/skills/registry.d.ts.map +1 -1
  729. package/dist/skills/registry.js +82 -196
  730. package/dist/skills/registry.js.map +1 -1
  731. package/dist/skills/tools/pipeline-suggest.js +14 -14
  732. package/dist/skills/tools/pipeline-suggest.js.map +1 -1
  733. package/dist/skills/tools/skill-invoke.d.ts +3 -2
  734. package/dist/skills/tools/skill-invoke.d.ts.map +1 -1
  735. package/dist/skills/tools/skill-invoke.js +4 -2
  736. package/dist/skills/tools/skill-invoke.js.map +1 -1
  737. package/dist/web/analytics/anti-pattern-detector.d.ts.map +1 -1
  738. package/dist/web/analytics/anti-pattern-detector.js +6 -1
  739. package/dist/web/analytics/anti-pattern-detector.js.map +1 -1
  740. package/dist/web/analytics/drift-detector.d.ts +6 -0
  741. package/dist/web/analytics/drift-detector.d.ts.map +1 -1
  742. package/dist/web/analytics/drift-detector.js +15 -8
  743. package/dist/web/analytics/drift-detector.js.map +1 -1
  744. package/dist/web/analytics/weekly-report.d.ts +13 -0
  745. package/dist/web/analytics/weekly-report.d.ts.map +1 -1
  746. package/dist/web/analytics/weekly-report.js +17 -3
  747. package/dist/web/analytics/weekly-report.js.map +1 -1
  748. package/dist/web/routes/_helpers.d.ts +31 -0
  749. package/dist/web/routes/_helpers.d.ts.map +1 -1
  750. package/dist/web/routes/_helpers.js +33 -0
  751. package/dist/web/routes/_helpers.js.map +1 -1
  752. package/dist/web/routes/agent-content.d.ts +30 -0
  753. package/dist/web/routes/agent-content.d.ts.map +1 -0
  754. package/dist/web/routes/agent-content.js +139 -0
  755. package/dist/web/routes/agent-content.js.map +1 -0
  756. package/dist/web/routes/agent-distill.d.ts +49 -0
  757. package/dist/web/routes/agent-distill.d.ts.map +1 -0
  758. package/dist/web/routes/agent-distill.js +526 -0
  759. package/dist/web/routes/agent-distill.js.map +1 -0
  760. package/dist/web/routes/config.d.ts +56 -0
  761. package/dist/web/routes/config.d.ts.map +1 -0
  762. package/dist/web/routes/config.js +243 -0
  763. package/dist/web/routes/config.js.map +1 -0
  764. package/dist/web/routes/decisions.d.ts +15 -0
  765. package/dist/web/routes/decisions.d.ts.map +1 -0
  766. package/dist/web/routes/decisions.js +181 -0
  767. package/dist/web/routes/decisions.js.map +1 -0
  768. package/dist/web/routes/diagnostics.d.ts +61 -0
  769. package/dist/web/routes/diagnostics.d.ts.map +1 -0
  770. package/dist/web/routes/diagnostics.js +203 -0
  771. package/dist/web/routes/diagnostics.js.map +1 -0
  772. package/dist/web/routes/error-handler.d.ts +0 -4
  773. package/dist/web/routes/error-handler.d.ts.map +1 -1
  774. package/dist/web/routes/error-handler.js +0 -8
  775. package/dist/web/routes/error-handler.js.map +1 -1
  776. package/dist/web/routes/events.d.ts.map +1 -1
  777. package/dist/web/routes/events.js +26 -1
  778. package/dist/web/routes/events.js.map +1 -1
  779. package/dist/web/routes/health.d.ts +33 -0
  780. package/dist/web/routes/health.d.ts.map +1 -0
  781. package/dist/web/routes/health.js +37 -0
  782. package/dist/web/routes/health.js.map +1 -0
  783. package/dist/web/routes/insights.d.ts +0 -5
  784. package/dist/web/routes/insights.d.ts.map +1 -1
  785. package/dist/web/routes/insights.js +0 -0
  786. package/dist/web/routes/insights.js.map +1 -1
  787. package/dist/web/routes/knowledge.d.ts +57 -0
  788. package/dist/web/routes/knowledge.d.ts.map +1 -0
  789. package/dist/web/routes/knowledge.js +772 -0
  790. package/dist/web/routes/knowledge.js.map +1 -0
  791. package/dist/web/routes/patch.d.ts +60 -1
  792. package/dist/web/routes/patch.d.ts.map +1 -1
  793. package/dist/web/routes/patch.js +170 -64
  794. package/dist/web/routes/patch.js.map +1 -1
  795. package/dist/web/routes/pipeline.d.ts +28 -0
  796. package/dist/web/routes/pipeline.d.ts.map +1 -0
  797. package/dist/web/routes/pipeline.js +145 -0
  798. package/dist/web/routes/pipeline.js.map +1 -0
  799. package/dist/web/routes/rules.d.ts.map +1 -1
  800. package/dist/web/routes/rules.js +26 -7
  801. package/dist/web/routes/rules.js.map +1 -1
  802. package/dist/web/routes/sessions.d.ts.map +1 -1
  803. package/dist/web/routes/sessions.js +17 -8
  804. package/dist/web/routes/sessions.js.map +1 -1
  805. package/dist/web/routes/skill-content.d.ts +30 -0
  806. package/dist/web/routes/skill-content.d.ts.map +1 -0
  807. package/dist/web/routes/skill-content.js +117 -0
  808. package/dist/web/routes/skill-content.js.map +1 -0
  809. package/dist/web/routes/skill-stats.d.ts.map +1 -1
  810. package/dist/web/routes/skill-stats.js +153 -16
  811. package/dist/web/routes/skill-stats.js.map +1 -1
  812. package/dist/web/routes/skills-distill.d.ts +29 -0
  813. package/dist/web/routes/skills-distill.d.ts.map +1 -0
  814. package/dist/web/routes/skills-distill.js +552 -0
  815. package/dist/web/routes/skills-distill.js.map +1 -0
  816. package/dist/web/routes/skills.js +7 -7
  817. package/dist/web/routes/skills.js.map +1 -1
  818. package/dist/web/routes/stats.d.ts.map +1 -1
  819. package/dist/web/routes/stats.js +2 -1
  820. package/dist/web/routes/stats.js.map +1 -1
  821. package/dist/web/routes/task-timeline.d.ts +178 -0
  822. package/dist/web/routes/task-timeline.d.ts.map +1 -0
  823. package/dist/web/routes/task-timeline.js +530 -0
  824. package/dist/web/routes/task-timeline.js.map +1 -0
  825. package/dist/web/routes/tasks.d.ts.map +1 -1
  826. package/dist/web/routes/tasks.js +377 -8
  827. package/dist/web/routes/tasks.js.map +1 -1
  828. package/dist/web/routes/trace.d.ts.map +1 -1
  829. package/dist/web/routes/trace.js +3 -2
  830. package/dist/web/routes/trace.js.map +1 -1
  831. package/dist/web/routes/types.d.ts +0 -4
  832. package/dist/web/routes/types.d.ts.map +1 -1
  833. package/dist/web/routes/types.js +1 -1
  834. package/dist/web/routes/types.js.map +1 -1
  835. package/dist/web/routes/violations.d.ts +14 -0
  836. package/dist/web/routes/violations.d.ts.map +1 -0
  837. package/dist/web/routes/violations.js +112 -0
  838. package/dist/web/routes/violations.js.map +1 -0
  839. package/dist/web/server.d.ts.map +1 -1
  840. package/dist/web/server.js +99 -19
  841. package/dist/web/server.js.map +1 -1
  842. package/dist/web/services/agent-distill-manager.d.ts +122 -0
  843. package/dist/web/services/agent-distill-manager.d.ts.map +1 -0
  844. package/dist/web/services/agent-distill-manager.js +397 -0
  845. package/dist/web/services/agent-distill-manager.js.map +1 -0
  846. package/dist/web/services/build-manager.d.ts +72 -0
  847. package/dist/web/services/build-manager.d.ts.map +1 -0
  848. package/dist/web/services/build-manager.js +189 -0
  849. package/dist/web/services/build-manager.js.map +1 -0
  850. package/dist/web/services/distill-manager.d.ts +172 -0
  851. package/dist/web/services/distill-manager.d.ts.map +1 -0
  852. package/dist/web/services/distill-manager.js +411 -0
  853. package/dist/web/services/distill-manager.js.map +1 -0
  854. package/dist/web/static/assets/AgentDetailPage-DlUeA1sX.js +2 -0
  855. package/dist/web/static/assets/AgentDetailPage-DlUeA1sX.js.map +1 -0
  856. package/dist/web/static/assets/AgentDistillRunPage-Cybo4bii.js +3 -0
  857. package/dist/web/static/assets/AgentDistillRunPage-Cybo4bii.js.map +1 -0
  858. package/dist/web/static/assets/AgentsPage-Qd9FExLG.js +2 -0
  859. package/dist/web/static/assets/AgentsPage-Qd9FExLG.js.map +1 -0
  860. package/dist/web/static/assets/DaemonHealthPage-DTSVqtrI.js +2 -0
  861. package/dist/web/static/assets/DaemonHealthPage-DTSVqtrI.js.map +1 -0
  862. package/dist/web/static/assets/DecisionDetailPage-b4BA8dhc.js +2 -0
  863. package/dist/web/static/assets/DecisionDetailPage-b4BA8dhc.js.map +1 -0
  864. package/dist/web/static/assets/DecisionsPage-a3NRo_T7.js +2 -0
  865. package/dist/web/static/assets/DecisionsPage-a3NRo_T7.js.map +1 -0
  866. package/dist/web/static/assets/DiagnosticsPage-DIVdiIQG.js +2 -0
  867. package/dist/web/static/assets/DiagnosticsPage-DIVdiIQG.js.map +1 -0
  868. package/dist/web/static/assets/DistillDetailPage-U6a3l2iP.js +4 -0
  869. package/dist/web/static/assets/DistillDetailPage-U6a3l2iP.js.map +1 -0
  870. package/dist/web/static/assets/DistillPage-O7BHtRN8.js +2 -0
  871. package/dist/web/static/assets/DistillPage-O7BHtRN8.js.map +1 -0
  872. package/dist/web/static/assets/DistillRunPage-D1JuRWWr.js +2 -0
  873. package/dist/web/static/assets/DistillRunPage-D1JuRWWr.js.map +1 -0
  874. package/dist/web/static/assets/GlobalScopeHint-Q3wTJx3F.js +2 -0
  875. package/dist/web/static/assets/GlobalScopeHint-Q3wTJx3F.js.map +1 -0
  876. package/dist/web/static/assets/IssueDetailPage-BDfrtk2C.js +2 -0
  877. package/dist/web/static/assets/IssueDetailPage-BDfrtk2C.js.map +1 -0
  878. package/dist/web/static/assets/IssuesPage-SKmhlCrw.js +2 -0
  879. package/dist/web/static/assets/IssuesPage-SKmhlCrw.js.map +1 -0
  880. package/dist/web/static/assets/KbDetailPage-Yna86Na8.js +2 -0
  881. package/dist/web/static/assets/KbDetailPage-Yna86Na8.js.map +1 -0
  882. package/dist/web/static/assets/KbHitsPage-Cljl7H9p.js +2 -0
  883. package/dist/web/static/assets/KbHitsPage-Cljl7H9p.js.map +1 -0
  884. package/dist/web/static/assets/MarkdownRenderer-DlDQNihj.js +3 -0
  885. package/dist/web/static/assets/MarkdownRenderer-DlDQNihj.js.map +1 -0
  886. package/dist/web/static/assets/NotFound-LMzbP51V.js +2 -0
  887. package/dist/web/static/assets/NotFound-LMzbP51V.js.map +1 -0
  888. package/dist/web/static/assets/SettingsPage-DzoK4PKg.js +2 -0
  889. package/dist/web/static/assets/SettingsPage-DzoK4PKg.js.map +1 -0
  890. package/dist/web/static/assets/SkillDetailPage-BuBJJ_NX.js +2 -0
  891. package/dist/web/static/assets/SkillDetailPage-BuBJJ_NX.js.map +1 -0
  892. package/dist/web/static/assets/SkillsPage-aojkJpBc.js +2 -0
  893. package/dist/web/static/assets/SkillsPage-aojkJpBc.js.map +1 -0
  894. package/dist/web/static/assets/TaskDetailPage-1ckxnGhw.js +4 -0
  895. package/dist/web/static/assets/TaskDetailPage-1ckxnGhw.js.map +1 -0
  896. package/dist/web/static/assets/TasksHubPage-C2PLh3eg.js +6 -0
  897. package/dist/web/static/assets/TasksHubPage-C2PLh3eg.js.map +1 -0
  898. package/dist/web/static/assets/WorkplacePage-DHrp5VxS.js +2 -0
  899. package/dist/web/static/assets/WorkplacePage-DHrp5VxS.js.map +1 -0
  900. package/dist/web/static/assets/arco-DFQA6dO_.css +1 -0
  901. package/dist/web/static/assets/arco-DV6xCLhr.js +14 -0
  902. package/dist/web/static/assets/arco-DV6xCLhr.js.map +1 -0
  903. package/dist/web/static/assets/charts-BSV4cyC4.js +37 -0
  904. package/dist/web/static/assets/charts-BSV4cyC4.js.map +1 -0
  905. package/dist/web/static/assets/date-fns-sbWH3_uq.js +2 -0
  906. package/dist/web/static/assets/date-fns-sbWH3_uq.js.map +1 -0
  907. package/dist/web/static/assets/index-B_v_MKlb.css +1 -0
  908. package/dist/web/static/assets/index-DileOOE4.js +4 -0
  909. package/dist/web/static/assets/index-DileOOE4.js.map +1 -0
  910. package/dist/web/static/assets/lucide-CnlPQoG8.js +72 -0
  911. package/dist/web/static/assets/lucide-CnlPQoG8.js.map +1 -0
  912. package/dist/web/static/assets/markdown-CA7ePUts.js +30 -0
  913. package/dist/web/static/assets/markdown-CA7ePUts.js.map +1 -0
  914. package/dist/web/static/assets/outcome-BKGy9azt.js +2 -0
  915. package/dist/web/static/assets/outcome-BKGy9azt.js.map +1 -0
  916. package/dist/web/static/assets/query-CgCOpYWf.js +2 -0
  917. package/dist/web/static/assets/{query-C99w429o.js.map → query-CgCOpYWf.js.map} +1 -1
  918. package/dist/web/static/assets/{react-router-r79dBVy4.js → react-router-Cxmg8RuL.js} +3 -3
  919. package/dist/web/static/assets/{react-router-r79dBVy4.js.map → react-router-Cxmg8RuL.js.map} +1 -1
  920. package/dist/web/static/assets/react-vendor-tkvCrao7.js +57 -0
  921. package/dist/web/static/assets/react-vendor-tkvCrao7.js.map +1 -0
  922. package/dist/web/static/assets/syntax-highlighter-BDYycNja.js +6 -0
  923. package/dist/web/static/assets/syntax-highlighter-BDYycNja.js.map +1 -0
  924. package/dist/web/static/assets/useAgentStats-B-uTgqBd.js +2 -0
  925. package/dist/web/static/assets/useAgentStats-B-uTgqBd.js.map +1 -0
  926. package/dist/web/static/assets/useDecisions-D-G2Ft5T.js +2 -0
  927. package/dist/web/static/assets/useDecisions-D-G2Ft5T.js.map +1 -0
  928. package/dist/web/static/assets/useDistill-21dZkXlT.js +3 -0
  929. package/dist/web/static/assets/useDistill-21dZkXlT.js.map +1 -0
  930. package/dist/web/static/assets/useEffectiveProject-DQiyX54y.js +2 -0
  931. package/dist/web/static/assets/useEffectiveProject-DQiyX54y.js.map +1 -0
  932. package/dist/web/static/assets/useIssuesFeed-CFiyQkAL.js +2 -0
  933. package/dist/web/static/assets/useIssuesFeed-CFiyQkAL.js.map +1 -0
  934. package/dist/web/static/assets/useKbHits-xKXWgqh9.js +2 -0
  935. package/dist/web/static/assets/useKbHits-xKXWgqh9.js.map +1 -0
  936. package/dist/web/static/assets/useSkillStats-B5hbIwdf.js +2 -0
  937. package/dist/web/static/assets/useSkillStats-B5hbIwdf.js.map +1 -0
  938. package/dist/web/static/assets/vendor-DS-q4Eyc.js +36 -0
  939. package/dist/web/static/assets/vendor-DS-q4Eyc.js.map +1 -0
  940. package/dist/web/static/index.html +12 -8
  941. package/package.json +18 -5
  942. package/dist/core/ai/provider.d.ts +0 -63
  943. package/dist/core/ai/provider.d.ts.map +0 -1
  944. package/dist/core/ai/provider.js +0 -241
  945. package/dist/core/ai/provider.js.map +0 -1
  946. package/dist/core/ai/types.d.ts +0 -43
  947. package/dist/core/ai/types.d.ts.map +0 -1
  948. package/dist/core/ai/types.js +0 -5
  949. package/dist/core/ai/types.js.map +0 -1
  950. package/dist/core/storage/token-usage.d.ts +0 -36
  951. package/dist/core/storage/token-usage.d.ts.map +0 -1
  952. package/dist/core/storage/token-usage.js +0 -59
  953. package/dist/core/storage/token-usage.js.map +0 -1
  954. package/dist/core/utils/token-tracker.d.ts +0 -39
  955. package/dist/core/utils/token-tracker.d.ts.map +0 -1
  956. package/dist/core/utils/token-tracker.js +0 -69
  957. package/dist/core/utils/token-tracker.js.map +0 -1
  958. package/dist/skills/index.d.ts +0 -3
  959. package/dist/skills/index.d.ts.map +0 -1
  960. package/dist/skills/index.js +0 -3
  961. package/dist/skills/index.js.map +0 -1
  962. package/dist/skills/matcher.d.ts +0 -26
  963. package/dist/skills/matcher.d.ts.map +0 -1
  964. package/dist/skills/matcher.js +0 -113
  965. package/dist/skills/matcher.js.map +0 -1
  966. package/dist/skills/official/code-simplifier.md +0 -52
  967. package/dist/skills/official/find-skills.md +0 -142
  968. package/dist/skills/official/official-api-design.md +0 -30
  969. package/dist/skills/official/official-architecture-decision.md +0 -41
  970. package/dist/skills/official/official-bmad.md +0 -118
  971. package/dist/skills/official/official-db-schema-design.md +0 -34
  972. package/dist/skills/official/official-debug.md +0 -25
  973. package/dist/skills/official/official-doc-driven.md +0 -31
  974. package/dist/skills/official/official-harness-engineering.md +0 -108
  975. package/dist/skills/official/official-openspec.md +0 -89
  976. package/dist/skills/official/official-performance-optimization.md +0 -30
  977. package/dist/skills/official/official-pr-review.md +0 -35
  978. package/dist/skills/official/official-release-checklist.md +0 -30
  979. package/dist/skills/official/official-security-hardening.md +0 -32
  980. package/dist/skills/official/official-spec-driven-design.md +0 -31
  981. package/dist/skills/official/planning-with-files.md +0 -241
  982. package/dist/skills/official/ui-ux-pro-max.md +0 -105
  983. package/dist/skills/official/webapp-testing.md +0 -96
  984. package/dist/skills/official-skills.d.ts +0 -26
  985. package/dist/skills/official-skills.d.ts.map +0 -1
  986. package/dist/skills/official-skills.js +0 -74
  987. package/dist/skills/official-skills.js.map +0 -1
  988. package/dist/skills/semantic-matcher.d.ts +0 -60
  989. package/dist/skills/semantic-matcher.d.ts.map +0 -1
  990. package/dist/skills/semantic-matcher.js +0 -192
  991. package/dist/skills/semantic-matcher.js.map +0 -1
  992. package/dist/skills/upgrade-engine.d.ts +0 -93
  993. package/dist/skills/upgrade-engine.d.ts.map +0 -1
  994. package/dist/skills/upgrade-engine.js +0 -447
  995. package/dist/skills/upgrade-engine.js.map +0 -1
  996. package/dist/skills/upgrade-prompt.d.ts +0 -20
  997. package/dist/skills/upgrade-prompt.d.ts.map +0 -1
  998. package/dist/skills/upgrade-prompt.js +0 -75
  999. package/dist/skills/upgrade-prompt.js.map +0 -1
  1000. package/dist/web/routes/ai.d.ts +0 -10
  1001. package/dist/web/routes/ai.d.ts.map +0 -1
  1002. package/dist/web/routes/ai.js +0 -186
  1003. package/dist/web/routes/ai.js.map +0 -1
  1004. package/dist/web/routes/token-usage.d.ts +0 -7
  1005. package/dist/web/routes/token-usage.d.ts.map +0 -1
  1006. package/dist/web/routes/token-usage.js +0 -18
  1007. package/dist/web/routes/token-usage.js.map +0 -1
  1008. package/dist/web/ssrf-guard.d.ts +0 -35
  1009. package/dist/web/ssrf-guard.d.ts.map +0 -1
  1010. package/dist/web/ssrf-guard.js +0 -93
  1011. package/dist/web/ssrf-guard.js.map +0 -1
  1012. package/dist/web/static/assets/AIConfig-CdDWzJyO.js +0 -2
  1013. package/dist/web/static/assets/AIConfig-CdDWzJyO.js.map +0 -1
  1014. package/dist/web/static/assets/Dashboard-CoEmmIDt.js +0 -2
  1015. package/dist/web/static/assets/Dashboard-CoEmmIDt.js.map +0 -1
  1016. package/dist/web/static/assets/Drawer-DdRTzlLB.js +0 -2
  1017. package/dist/web/static/assets/Drawer-DdRTzlLB.js.map +0 -1
  1018. package/dist/web/static/assets/Events-DrIq1SUS.js +0 -2
  1019. package/dist/web/static/assets/Events-DrIq1SUS.js.map +0 -1
  1020. package/dist/web/static/assets/Reports-DFBM3MDK.js +0 -2
  1021. package/dist/web/static/assets/Reports-DFBM3MDK.js.map +0 -1
  1022. package/dist/web/static/assets/SearchInput-qCj_jAcf.js +0 -2
  1023. package/dist/web/static/assets/SearchInput-qCj_jAcf.js.map +0 -1
  1024. package/dist/web/static/assets/SessionDetail-CCzwdoT7.js +0 -2
  1025. package/dist/web/static/assets/SessionDetail-CCzwdoT7.js.map +0 -1
  1026. package/dist/web/static/assets/Sessions-FfLYkAw9.js +0 -2
  1027. package/dist/web/static/assets/Sessions-FfLYkAw9.js.map +0 -1
  1028. package/dist/web/static/assets/Skills-C8Gvs3Qa.js +0 -2
  1029. package/dist/web/static/assets/Skills-C8Gvs3Qa.js.map +0 -1
  1030. package/dist/web/static/assets/TaskDetail-BS8pYhaR.js +0 -2
  1031. package/dist/web/static/assets/TaskDetail-BS8pYhaR.js.map +0 -1
  1032. package/dist/web/static/assets/Tasks-CyuhizG8.js +0 -2
  1033. package/dist/web/static/assets/Tasks-CyuhizG8.js.map +0 -1
  1034. package/dist/web/static/assets/charts-CLrM0_uM.js +0 -37
  1035. package/dist/web/static/assets/charts-CLrM0_uM.js.map +0 -1
  1036. package/dist/web/static/assets/date-fns-CZ_bHujz.js +0 -2
  1037. package/dist/web/static/assets/date-fns-CZ_bHujz.js.map +0 -1
  1038. package/dist/web/static/assets/export-L_VBD2p1.js +0 -4
  1039. package/dist/web/static/assets/export-L_VBD2p1.js.map +0 -1
  1040. package/dist/web/static/assets/index-CBX47X8l.js +0 -3
  1041. package/dist/web/static/assets/index-CBX47X8l.js.map +0 -1
  1042. package/dist/web/static/assets/index-DjIoMdoR.css +0 -1
  1043. package/dist/web/static/assets/lucide-Bs_edTLa.js +0 -232
  1044. package/dist/web/static/assets/lucide-Bs_edTLa.js.map +0 -1
  1045. package/dist/web/static/assets/query-C99w429o.js +0 -2
  1046. package/dist/web/static/assets/react-vendor-CSp-GLFF.js +0 -49
  1047. package/dist/web/static/assets/react-vendor-CSp-GLFF.js.map +0 -1
  1048. package/dist/web/static/assets/syntax-highlighter-44FakypI.js +0 -9
  1049. package/dist/web/static/assets/syntax-highlighter-44FakypI.js.map +0 -1
  1050. package/dist/web/static/assets/time-Bxuk0M-C.js +0 -2
  1051. package/dist/web/static/assets/time-Bxuk0M-C.js.map +0 -1
  1052. package/dist/web/static/assets/vendor-CMMjVdZs.js +0 -64
  1053. package/dist/web/static/assets/vendor-CMMjVdZs.js.map +0 -1
@@ -0,0 +1,562 @@
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
+ * Tool names that represent a sub-agent spawn in the `events` table.
59
+ *
60
+ * Bug P1 (decision e888352d, 2026-06-10): current Claude Code emits agent
61
+ * spawns with `tool_name='Agent'` (live DB: 982 'Agent' rows vs 0 'Task'),
62
+ * while older CC builds used `tool_name='Task'`. Any decision-flow lookup that
63
+ * keys off "was decision-maker spawned" MUST accept both, or it becomes a dud
64
+ * that silently never fires. Centralised here so the cooldown gate
65
+ * (isWithinDecisionMakerCoolDown) and the CLI approve-trace lookup
66
+ * (findRecentDecisionMakerSpawn) stay in lock-step.
67
+ */
68
+ export const AGENT_SPAWN_TOOL_NAMES = ['Agent', 'Task'];
69
+ /** True when `tool_name` denotes a sub-agent spawn (Agent | Task). */
70
+ export function isAgentSpawnToolName(tool_name) {
71
+ return AGENT_SPAWN_TOOL_NAMES.includes(tool_name ?? '');
72
+ }
73
+ /**
74
+ * Pattern for system-generated prompt prefixes (G9 fix).
75
+ *
76
+ * Daemon injects several envelope types into the conversation:
77
+ * - <task-notification> — when a sub-agent starts/finishes
78
+ * - <task-id> — task tracking metadata
79
+ * - <forge-resume-body> — session resume context
80
+ * - <system-reminder> — periodic rule reminder
81
+ * - <local-command-stdout> / <command-message> — shell output
82
+ * - <!-- forge:… — forge magic markers
83
+ *
84
+ * When any of these appear at the start of the prompt, it is daemon-generated
85
+ * and should NOT trigger a decision hint.
86
+ */
87
+ const SYSTEM_PROMPT_PATTERNS = [
88
+ /^<task-notification>/i,
89
+ /^<task-id>/i,
90
+ /^<forge-resume-body>/i,
91
+ /^<system-reminder>/i,
92
+ /^<local-command-stdout>/i,
93
+ /^<command-message>/i,
94
+ /^<command-name>/i,
95
+ /^<!--\s*forge:/i,
96
+ // Guard against prompts that are ONLY daemon-injected tags (e.g. multi-tag blocks)
97
+ /^\s*<[a-z-]+>\s*$/i,
98
+ ];
99
+ /**
100
+ * Returns true when the prompt appears to be daemon-injected content
101
+ * rather than a genuine user message. Guards against G9 false positives
102
+ * where daemon-inserted task-notification blobs triggered [DECISION HINT].
103
+ */
104
+ export function isSystemGeneratedPrompt(prompt) {
105
+ const trimmed = prompt.trim();
106
+ return SYSTEM_PROMPT_PATTERNS.some(re => re.test(trimmed));
107
+ }
108
+ /**
109
+ * Returns true when the user has included the "skip decision" bypass keyword.
110
+ * This is the OQ3 answer: natural-language bypass (same pattern as
111
+ * bmad-question-default's "直接修" / "skip" escapes).
112
+ */
113
+ export function isSkipDecisionKeyword(prompt) {
114
+ return /skip\s+decision/i.test(prompt);
115
+ }
116
+ /**
117
+ * Bare inspection / listing command words (decision f61b8a0c, audit #6).
118
+ *
119
+ * A prompt consisting of ONLY one of these words (optionally with trailing
120
+ * punctuation) carries zero decision content — it is a pure listing/status
121
+ * inspection the main thread answers directly. These slip past
122
+ * `isLikelyTrivial` (whose keyword set targets approvals/continuations, not
123
+ * inspection verbs), so they minted advisory rows that never advanced.
124
+ *
125
+ * Kept intentionally narrow: only EXACT single-word matches, so substantive
126
+ * short prompts that merely start with one of these (e.g. `list the failing
127
+ * tests and fix them`) still mint. Existing must-mint fixtures (`rebase`,
128
+ * `fix lint`, `cd ..`, `short`) are not in this set.
129
+ */
130
+ const BARE_INSPECTION_COMMAND_RE = /^(list|ls|pwd|dir|status|help|cat|tree|env|ps|top|clear|cls|history)[\s.!?。!?]*$/i;
131
+ /**
132
+ * Returns true when the prompt is a trivial mint trigger that should NOT
133
+ * produce a [DECISION HINT] / advisory decision row (decision f61b8a0c,
134
+ * audit #6 — "收紧 mint 启发式,治 advisory 空转").
135
+ *
136
+ * The UserPromptSubmit mint heuristic was too loose: with
137
+ * `DEFAULT_TRIGGER_LEN=0` every non-noise prompt minted an advisory row, so
138
+ * pure-image (no-text) prompts, lone punctuation, and bare inspection commands
139
+ * (`list`, `?`, `...`) produced advisory rows that never advanced — pure
140
+ *空转. This guard filters those before the row is written.
141
+ *
142
+ * Conservative by design — it only fires for prompts with no real decision
143
+ * content:
144
+ * 1. Empty / whitespace-only (pure image with no accompanying text).
145
+ * 2. No alphanumeric/CJK content at all (lone punctuation/symbols: `?`,
146
+ * `...`, `???`).
147
+ * 3. A bare inspection/listing command word (see BARE_INSPECTION_COMMAND_RE).
148
+ *
149
+ * It deliberately does NOT fire on short-but-actionable prompts (`rebase`,
150
+ * `fix lint`, `cd ..`) — those still mint. The existing `isLikelyTrivial`
151
+ * guard (approvals/continuations) remains and is complementary.
152
+ */
153
+ export function isTrivialTrigger(prompt) {
154
+ const trimmed = (prompt ?? '').trim();
155
+ // 1. Empty / whitespace-only → pure image or no-text prompt.
156
+ if (trimmed.length === 0)
157
+ return true;
158
+ // 2. No word-content at all (only punctuation / symbols / emoji).
159
+ // \p{L} = any letter (covers CJK), \p{N} = any number.
160
+ if (!/[\p{L}\p{N}]/u.test(trimmed))
161
+ return true;
162
+ // 3. Bare inspection/listing command word (no decision content).
163
+ if (BARE_INSPECTION_COMMAND_RE.test(trimmed))
164
+ return true;
165
+ return false;
166
+ }
167
+ /**
168
+ * Resolve the effective TRIGGER_LEN from forge_config or use the default.
169
+ * Used by UserPromptHandler (Step 4.5) to pass into emitDecisionHintSimple.
170
+ */
171
+ export function resolveTriggerLen(storage) {
172
+ if (!storage)
173
+ return DEFAULT_TRIGGER_LEN;
174
+ try {
175
+ const raw = storage.readConfig(TRIGGER_LEN_CONFIG_KEY);
176
+ if (raw !== undefined && raw !== null) {
177
+ const n = Number(raw);
178
+ if (Number.isFinite(n) && n >= 0)
179
+ return n;
180
+ }
181
+ }
182
+ catch {
183
+ // fail-silent
184
+ }
185
+ return DEFAULT_TRIGGER_LEN;
186
+ }
187
+ /**
188
+ * decision 7aa0ec63 (Option C, Q1 + Q6) — resolve the per-session
189
+ * decision-maker spawn cooldown from forge_config, with default fallback.
190
+ *
191
+ * Read from `forge_config.decision_maker_cooldown_seconds`. Values outside
192
+ * `(0, MAX_DECISION_MAKER_COOLDOWN_SECONDS]` are treated as invalid and
193
+ * the default is returned. Caller is expected to log a warn separately when
194
+ * an invalid value is rejected (daemon startup does this once at boot).
195
+ */
196
+ export function resolveDecisionMakerCooldownSeconds(storage) {
197
+ if (!storage)
198
+ return DEFAULT_DECISION_MAKER_COOLDOWN_SECONDS;
199
+ try {
200
+ const raw = storage.readConfig(DECISION_MAKER_COOLDOWN_CONFIG_KEY);
201
+ if (raw === undefined || raw === null) {
202
+ return DEFAULT_DECISION_MAKER_COOLDOWN_SECONDS;
203
+ }
204
+ const n = Number(raw);
205
+ if (!Number.isFinite(n))
206
+ return DEFAULT_DECISION_MAKER_COOLDOWN_SECONDS;
207
+ if (n <= 0)
208
+ return DEFAULT_DECISION_MAKER_COOLDOWN_SECONDS;
209
+ if (n > MAX_DECISION_MAKER_COOLDOWN_SECONDS) {
210
+ return DEFAULT_DECISION_MAKER_COOLDOWN_SECONDS;
211
+ }
212
+ return n;
213
+ }
214
+ catch {
215
+ return DEFAULT_DECISION_MAKER_COOLDOWN_SECONDS;
216
+ }
217
+ }
218
+ /**
219
+ * decision 7aa0ec63 (Option C, Q2 + Q6) — session-scoped cooldown check.
220
+ *
221
+ * Returns true when this session spawned `decision-maker` (PreToolUse Task
222
+ * event with `tool_input.subagent_type === 'decision-maker'`) within the last
223
+ * `windowSeconds` seconds. The main thread is currently working through a
224
+ * recent maker output; emitting a fresh hint would just stack pending rows.
225
+ *
226
+ * Source-of-truth = `events` table (per Q6): persistent across daemon restart,
227
+ * trivially injectable in unit tests, and same fixture pattern reused from
228
+ * `findRecentDecisionMakerSpawn` (src/cli/commands/decisions.ts §B). The
229
+ * narrower 60 s window (vs 5 min in approve-governance) targets the actual
230
+ * "back-to-back batch nudge" symptom this gate exists for.
231
+ *
232
+ * Fail-silent — if storage.queryEvents throws, returns false so the regular
233
+ * emit path still runs (better to over-emit than swallow a real decision).
234
+ */
235
+ export function isWithinDecisionMakerCoolDown(storage, session_id, windowSeconds, nowMs = Date.now()) {
236
+ if (!session_id)
237
+ return false;
238
+ if (!Number.isFinite(windowSeconds) || windowSeconds <= 0)
239
+ return false;
240
+ const sinceIso = new Date(nowMs - windowSeconds * 1000).toISOString();
241
+ try {
242
+ const rows = storage.queryEvents({
243
+ session_id,
244
+ hook_type: 'PreToolUse',
245
+ since: sinceIso,
246
+ limit: 200,
247
+ });
248
+ for (const ev of rows) {
249
+ // Bug P1 (decision e888352d, 2026-06-10) — agent-spawn events now arrive
250
+ // as tool_name='Agent' under current Claude Code (DB live: 982 'Agent'
251
+ // vs 0 'Task'); older CC used 'Task'. Accept BOTH so the cooldown gate
252
+ // is not a dud (previously it was silently never triggering, masked only
253
+ // by the 1h active-pending window). See isAgentSpawnToolName.
254
+ if (!isAgentSpawnToolName(ev.tool_name))
255
+ continue;
256
+ const input = (ev.tool_input ?? {});
257
+ const sub = typeof input['subagent_type'] === 'string' ? input['subagent_type'] : '';
258
+ if (sub === 'decision-maker')
259
+ return true;
260
+ }
261
+ }
262
+ catch {
263
+ // Fail-silent — degrade to "no cooldown" so we still emit. Safer than
264
+ // accidentally suppressing a real decision.
265
+ }
266
+ return false;
267
+ }
268
+ /**
269
+ * Main entry point — pure length-based trigger (spec 1200 simplification).
270
+ *
271
+ * Guards (in order):
272
+ * 1. skip-decision bypass keyword
273
+ * 2. prompt.length < TRIGGER_LEN
274
+ * 3. system-generated prompt (G9 fix)
275
+ *
276
+ * When all guards pass:
277
+ * 1. Writes a `decisions` row (status='advisory' — decision 93e8fff1) to the
278
+ * DB (fail-silent). Advisory is pure bookkeeping in the post-interceptor
279
+ * model (decision 7c924678): it blocks nothing and the Web page renders it
280
+ * without a 批准 button. The status default lives in writeDecision.
281
+ * 2. Returns `{ message, decision_id }` — UserPromptHandler splices
282
+ * `decision_id: <id>` into the systemMessage
283
+ *
284
+ * Returns `null` when any guard fires (no DB write, no systemMessage).
285
+ *
286
+ * @param prompt - The raw user prompt text.
287
+ * @param triggerLen - Minimum prompt length (default DEFAULT_TRIGGER_LEN=50).
288
+ * @param storage - Optional SQLiteStorage for persisting the decision row.
289
+ * @param eventContext - Optional event fields for the DB row.
290
+ */
291
+ export function emitDecisionHintSimple(prompt, triggerLen = DEFAULT_TRIGGER_LEN, storage, eventContext) {
292
+ // Guard: bypass keyword → respect user's wish.
293
+ if (isSkipDecisionKeyword(prompt))
294
+ return null;
295
+ // decision f61b8a0c (audit #6) — trivial-trigger filter. Drop pure-image /
296
+ // no-text prompts, lone punctuation, and bare inspection commands (`list`,
297
+ // `?`, `...`) BEFORE any DB write so they don't mint空转 advisory rows.
298
+ // Conservative: short-but-actionable prompts (`rebase`, `fix lint`) still
299
+ // pass. This runs ahead of the cooldown/active-pending lookups so trivial
300
+ // triggers never even touch storage.
301
+ if (isTrivialTrigger(prompt)) {
302
+ logger.debug(`[DecisionHint] gate=trivial-trigger (len=${prompt.trim().length})`);
303
+ return null;
304
+ }
305
+ // Guard: short prompts (only enforced if triggerLen > 0; default 0 = always emit).
306
+ if (triggerLen > 0 && prompt.length < triggerLen)
307
+ return null;
308
+ // G9 fix: skip system-generated prompts (daemon-injected envelopes).
309
+ if (isSystemGeneratedPrompt(prompt))
310
+ return null;
311
+ // decision 7aa0ec63 (Option C) — per-session decision-maker spawn cooldown.
312
+ // If the main thread already spawned decision-maker for THIS session within
313
+ // the cooldown window, suppress new hints. The deny gate
314
+ // (decision-hint-pending rule) keeps enforcing the existing pending row;
315
+ // we just stop stacking duplicates while the main thread is mid-flight.
316
+ if (storage && eventContext?.session_id) {
317
+ try {
318
+ const cooldownSeconds = resolveDecisionMakerCooldownSeconds(storage);
319
+ if (isWithinDecisionMakerCoolDown(storage, eventContext.session_id, cooldownSeconds)) {
320
+ logger.debug(`[DecisionHint] gate=cooldown (session=${eventContext.session_id}, ` +
321
+ `window=${cooldownSeconds}s)`);
322
+ return null;
323
+ }
324
+ }
325
+ catch (err) {
326
+ logger.debug(`[DecisionHint] cooldown lookup failed (proceeding): ${err}`);
327
+ }
328
+ }
329
+ // Spec 1944 §8 (trivial filter): drop very short trivial replies (`批准`/
330
+ // `ok`/`继续` …). `&&` with length<TRIVIAL_MAX_LEN avoids killing
331
+ // meaningful short prompts like `rebase`/`fix lint` (not in the keyword
332
+ // regex) or `批准 abc12345` (length ≥ 10).
333
+ if (isLikelyTrivial(prompt) && prompt.length < TRIVIAL_MAX_LEN) {
334
+ logger.debug(`[DecisionHint] gate=trivial keywords-match (len=${prompt.length})`);
335
+ return null;
336
+ }
337
+ // Option B (decision b95e0956, 2026-05-29 — Q1+Q2): continuation skip.
338
+ // When the session has ≥3 resolved decisions and the most recent is within
339
+ // 30 min AND the prompt contains a continuation keyword, suppress the new
340
+ // hint. The post-tool-use rule keeps enforcing any still-pending row from
341
+ // earlier, so we don't lose enforcement here — we just stop spamming new
342
+ // decisions for delivery follow-ups like "提交并推送".
343
+ if (storage && eventContext) {
344
+ try {
345
+ const recent = storage.listRecentResolvedDecisions(eventContext.session_id, CONTINUATION_MIN_RESOLVED);
346
+ if (isContinuation(prompt, recent)) {
347
+ logger.debug(`[DecisionHint] gate=continuation (resolved=${recent.length}, prompt len=${prompt.length})`);
348
+ return null;
349
+ }
350
+ }
351
+ catch (err) {
352
+ logger.debug(`[DecisionHint] continuation lookup failed (proceeding): ${err}`);
353
+ }
354
+ }
355
+ // Spec 1944 §1.5 goal 3 — active pending skip + dedup:
356
+ // • active-skip: if an unresolved pending decision still exists for this
357
+ // session within the active window, suppress the new hint. The deny
358
+ // gate (decision-hint-pending rule) will keep enforcing the existing
359
+ // decision; we just don't pile up duplicate rows.
360
+ // • dedup: same trimmed prompt in the dedup window is a special case of
361
+ // active-skip (it surfaces the diagnostic differently in logs).
362
+ if (storage && eventContext) {
363
+ try {
364
+ const existing = storage.getMostRecentPendingDecision(eventContext.session_id, ACTIVE_PENDING_WINDOW_SECONDS,
365
+ // global-governance Phase 1 (decision 7fa0f2ab): scope active-skip by
366
+ // project so a pending decision in another project on the same session
367
+ // doesn't suppress a legitimately new hint here.
368
+ eventContext.project_path);
369
+ if (existing) {
370
+ const sameTrigger = typeof existing.trigger_prompt === 'string' &&
371
+ normalizePrompt(existing.trigger_prompt) === normalizePrompt(prompt);
372
+ logger.debug(`[DecisionHint] skipped (active pending exists, sameTrigger=${sameTrigger}) id=${existing.id}`);
373
+ return null;
374
+ }
375
+ }
376
+ catch (err) {
377
+ // Fail-silent — fall through to the normal emit path.
378
+ logger.debug(`[DecisionHint] active-skip lookup failed (proceeding): ${err}`);
379
+ }
380
+ }
381
+ const decision_id = randomBytes(4).toString('hex'); // 8-char hex
382
+ const summary = truncateSummary(prompt);
383
+ // Write decisions row (fail-silent — never block the pipeline).
384
+ if (storage && eventContext) {
385
+ try {
386
+ storage.writeDecision({
387
+ id: decision_id,
388
+ session_id: eventContext.session_id,
389
+ project_path: eventContext.project_path,
390
+ trigger_event_id: eventContext.event_id ?? null,
391
+ trigger_prompt: prompt,
392
+ suggested_agent: 'decision-maker',
393
+ });
394
+ logger.debug(`[DecisionHint] wrote decision row id=${decision_id}`);
395
+ }
396
+ catch (err) {
397
+ logger.warn(`[DecisionHint] failed to write decision row (skipped): ${err}`);
398
+ }
399
+ }
400
+ // formatHintMessage's first arg (workflowType) is display-only; the row
401
+ // itself is minted 'advisory' by writeDecision (decision 93e8fff1).
402
+ const message = formatHintMessage('advisory', 'decision-maker', summary, decision_id);
403
+ return { message, decision_id };
404
+ }
405
+ /**
406
+ * Spec 1944 §8 — trivial filter max length. trim() < TRIVIAL_MAX_LEN AND
407
+ * isLikelyTrivial() → guard fires.
408
+ *
409
+ * decision 7aa0ec63 (Option C, Q4): raised 10 → 15. Covers real-world batch
410
+ * controls like `启动 Batch 3 第一项` (15 chars) and `执行第二项` (5 chars) that
411
+ * previously slipped past the length cap. `批准 abc12345` (12 chars) is now
412
+ * also classified trivial, which is the desired behaviour — the matching
413
+ * pending decision row would already be approved by the parallel `cf decisions
414
+ * approve` flow, so no information is lost.
415
+ */
416
+ const TRIVIAL_MAX_LEN = 15;
417
+ /**
418
+ * Spec 1944 §1.5 — active pending skip window. While any unresolved pending
419
+ * decision row exists within this many seconds for the session, new hints are
420
+ * suppressed (avoids stacking dozens of pending rows). 1h matches the rule
421
+ * gate's own pending-lookup window (`getMostRecentPendingDecision`).
422
+ */
423
+ const ACTIVE_PENDING_WINDOW_SECONDS = 3600;
424
+ function normalizePrompt(text) {
425
+ return text.replace(/\s+/g, ' ').trim();
426
+ }
427
+ /**
428
+ * Returns true when the prompt is likely trivial (a simple approval or
429
+ * one-word command) and can skip the full decision-maker workflow.
430
+ *
431
+ * Two conditions — BOTH must be true to avoid false positives:
432
+ * 1. prompt length < 50 chars (short enough to be trivial)
433
+ * 2. Starts with or consists of a trivial keyword
434
+ *
435
+ * Used by formatHintMessage to suggest model=haiku for trivial prompts.
436
+ * The decision-maker template Step 0 uses a tighter threshold (< 30 chars)
437
+ * for its own fast-exit — this function uses 50 for the daemon-side hint
438
+ * to bias toward haiku earlier in the pipeline.
439
+ *
440
+ * Option B (decision b95e0956, 2026-05-29 — Q1): keyword set expanded to
441
+ * cover the real-world "continuation" short prompts that previously slipped
442
+ * through and forced a [DECISION HINT] emit for trivial follow-ups:
443
+ * added: 提交 / 推送 / push / commit / 那就 / 修复吧 / 启动吧 / 开始 /
444
+ * 搞 / 做 / 开干 / 接着做 / 继续做
445
+ * Original list (好/对/是/继续/批准/approve/yes/ok/skip/确认/确定/go/
446
+ * proceed/done/完成/可以) preserved — additive expansion.
447
+ *
448
+ * @param s - The intent summary or raw prompt.
449
+ */
450
+ export function isLikelyTrivial(s) {
451
+ if (s.length >= 50)
452
+ return false;
453
+ const trimmed = s.trim();
454
+ if (!trimmed)
455
+ return false;
456
+ // decision 7aa0ec63 (Option C, Q3) — greeting/informational extension.
457
+ // Greetings ("hi" / "hello" / "say hi" / "say hello" / "你好") are trivial
458
+ // regardless of exact wording, and short prompts ending in `?` / `?` are
459
+ // informational queries that the main thread should answer directly without
460
+ // going through decision-maker. Note: ASCII greetings require an end or
461
+ // non-word boundary (avoid matching `hint…` / `hire …`); CJK `你好` is
462
+ // checked separately because JS `\b` is ASCII-only.
463
+ if (/^你好/.test(trimmed))
464
+ return true;
465
+ if (/^(say\s+hi|say\s+hello)\b/i.test(trimmed))
466
+ return true;
467
+ if (/^(hi|hello)(\b|$)/i.test(trimmed))
468
+ return true;
469
+ if (trimmed.length < 30 && /[??]\s*$/.test(trimmed))
470
+ return true;
471
+ // decision 7aa0ec63 (Option C, Q3) — batch-control verbs commonly used as
472
+ // continuation triggers (`启动 Batch 3`, `执行第二项`, `查看 KB`, `批准 X`).
473
+ // Kept additive to the prior keyword set (b95e0956); nothing is removed.
474
+ return /^(好|对|是|继续|批准|approve|yes|ok|skip|确认|确定|go|proceed|done|完成|可以|提交|推送|push|commit|那就|修复吧|启动吧|开始|搞|做|开干|接着做|继续做|启动|执行|查看|看看)/i.test(trimmed);
475
+ }
476
+ /**
477
+ * Option B (decision b95e0956, 2026-05-29 — Q1+Q2) — "continuation" prompt
478
+ * detection.
479
+ *
480
+ * Returns true when the current prompt is plausibly a continuation of recent
481
+ * decided work and should NOT trigger a fresh [DECISION HINT].
482
+ *
483
+ * Q2 contract: **both** conditions must hold (AND, not OR):
484
+ * 1. There are at least `CONTINUATION_MIN_RESOLVED` (=3) resolved decisions
485
+ * for this session AND
486
+ * 2. The most recent resolved one is within `CONTINUATION_WINDOW_MS`
487
+ * (=30 min)
488
+ *
489
+ * AND the current prompt itself must look continuation-flavoured — i.e.
490
+ * contain one of the Q1 recommended keywords. This avoids classifying a
491
+ * genuinely fresh long task as a continuation just because the session has
492
+ * been busy.
493
+ *
494
+ * @param prompt - The raw user prompt text.
495
+ * @param recentResolved - Output of `listRecentResolvedDecisions` for this
496
+ * session (any length; newest first).
497
+ * @param nowMs - Override clock for tests (defaults to Date.now()).
498
+ */
499
+ export const CONTINUATION_WINDOW_MS = 30 * 60 * 1000; // 30 minutes
500
+ export const CONTINUATION_MIN_RESOLVED = 3;
501
+ /** Q1 keyword set used by isContinuation (subset of isLikelyTrivial). */
502
+ const CONTINUATION_KEYWORDS_RE = /(提交|推送|push|commit|那就|修复吧|启动吧|开始|搞|做|开干|继续|接着做|ok|好)/i;
503
+ export function isContinuation(prompt, recentResolved, nowMs = Date.now()) {
504
+ if (!prompt)
505
+ return false;
506
+ if (!Array.isArray(recentResolved))
507
+ return false;
508
+ // Q2 (count condition)
509
+ if (recentResolved.length < CONTINUATION_MIN_RESOLVED)
510
+ return false;
511
+ // Q2 (time-window condition)
512
+ const newest = recentResolved[0];
513
+ if (!newest)
514
+ return false;
515
+ const ts = newest.resolved_at ?? newest.created_at;
516
+ if (!ts)
517
+ return false;
518
+ const tsMs = Date.parse(ts);
519
+ if (!Number.isFinite(tsMs))
520
+ return false;
521
+ if (nowMs - tsMs > CONTINUATION_WINDOW_MS)
522
+ return false;
523
+ // Keyword condition — must look continuation-flavoured to count.
524
+ return CONTINUATION_KEYWORDS_RE.test(prompt.trim());
525
+ }
526
+ /**
527
+ * Formats the hint message body. Kept separate for unit-test readability.
528
+ *
529
+ * Compressed template (decision ed98c8e8, 2026-06-10): the old 38-line
530
+ * version re-taught the decision-maker 5-step workflow on EVERY hint —
531
+ * pure duplication of the CLAUDE.md "DECISION HINT 协议契约" section
532
+ * (the single authoritative text). Kept: `[DECISION HINT]` marker,
533
+ * copy-paste Task command, model suggestion, `<!-- decision-id -->`
534
+ * magic comment, one-line bypass.
535
+ */
536
+ export function formatHintMessage(workflowType, suggestedAgent, intentSummary, decision_id) {
537
+ const suggestedModel = isLikelyTrivial(intentSummary) ? 'haiku' : 'sonnet';
538
+ const lines = [
539
+ '[DECISION HINT]',
540
+ '',
541
+ `daemon 判定本 prompt 值得决策。主线程第一动作:spawn \`decision-maker\``,
542
+ `(完整链路见 CLAUDE.md「DECISION HINT 协议契约」节):`,
543
+ '',
544
+ `Task tool subagent_type='decision-maker' with prompt: "${intentSummary}"`,
545
+ '',
546
+ `建议 model:\`${suggestedModel}\`(trivial 用 haiku,complex 用 sonnet);原推荐 agent: \`${suggestedAgent}\``,
547
+ `如果已经知道要做什么,直接告知并忽略本提示即可。`,
548
+ ];
549
+ if (decision_id) {
550
+ lines.push('');
551
+ lines.push(`<!-- decision-id: ${decision_id} -->`);
552
+ lines.push(`bypass: 在 prompt 中加 "skip decision" 跳过决策流程。`);
553
+ }
554
+ return lines.join('\n');
555
+ }
556
+ function truncateSummary(text) {
557
+ const oneLine = text.replace(/\s+/g, ' ').trim();
558
+ if (oneLine.length <= HINT_SUMMARY_MAX)
559
+ return oneLine;
560
+ return oneLine.slice(0, HINT_SUMMARY_MAX - 1) + '…';
561
+ }
562
+ //# 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":"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"}
@@ -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;AAIH,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"}