@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 @@
1
+ {"version":3,"file":"outcome-nudge.d.ts","sourceRoot":"","sources":["../../../src/daemon/services/outcome-nudge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAGlE,uEAAuE;AACvE,eAAO,MAAM,2BAA2B,4BAA4B,CAAC;AAErE,kFAAkF;AAClF,eAAO,MAAM,+BAA+B,IAAI,CAAC;AAEjD,+DAA+D;AAC/D,eAAO,MAAM,0BAA0B,mCAAmC,CAAC;AAE3E,kEAAkE;AAClE,eAAO,MAAM,sCAAsC,QAAQ,CAAC;AAQ5D;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,IAAI,GAAG,MAAM,CAWnF;AAED;;;GAGG;AACH,wBAAgB,kCAAkC,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,IAAI,GAAG,MAAM,CAazF;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,MAAM,EAAE,EACb,MAAM,EAAE,YAAY,GAAG,WAAW,GACjC,MAAM,CA4BR;AAaD;;;;GAIG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAmC;IAEzD,OAAO,CAAC,GAAG;IAIX;;;;;;OAMG;IACH,eAAe,CACb,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,aAAa,GAAG,IAAI,GAC5B,IAAI;IAkBP;;;;;;;;;;;OAWG;IACH,QAAQ,CACN,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,aAAa,GAAG,IAAI,EAC7B,KAAK,GAAE,MAAmB,GACzB,MAAM,GAAG,IAAI;IAkEhB;;yDAEqD;IACrD,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;CAG3D"}
@@ -0,0 +1,242 @@
1
+ /**
2
+ * OutcomeNudge — outcome-backfill soft-gate (decision 1ac6fc31, 2026-06-04).
3
+ *
4
+ * Closes the last gap in the harness learning loop: of ~12 resolved decisions,
5
+ * only 3 had their `outcome` back-filled (75% miss), so decision-maker's
6
+ * Step 1.5 precedent weighting ran empty. CLAUDE.md already mandates the
7
+ * implementing agent back-fill via `cf decisions outcome <id> --result ...`,
8
+ * but the document constraint alone failed.
9
+ *
10
+ * This is a PURE SOFT-GATE. It ONLY emits a `[OUTCOME NUDGE]` systemMessage
11
+ * reminding the human/agent to run `cf decisions outcome`. It NEVER:
12
+ * - writes / infers an outcome value (precedent f4614f7f deleted auto-
13
+ * attribution twice — this gate produces text only, never touches
14
+ * writeDecisionOutcome),
15
+ * - denies / blocks any tool (no `allow:false`, no PreToolUse rule).
16
+ *
17
+ * Two delivery paths, both surfacing at UserPromptSubmit (the only hook whose
18
+ * systemMessage Claude Code actually consumes — see OQ1 below):
19
+ *
20
+ * Option A (threshold, primary backstop): when a session/project has
21
+ * accumulated >= N (`outcome_nudge_threshold`, default 2) resolved-but-
22
+ * unfilled decisions, inject the nudge on the next UserPromptSubmit, subject
23
+ * to cooldown.
24
+ *
25
+ * Option B (completion nudge, DEGRADED): the Stop hook is the natural "just
26
+ * finished" moment, but OQ1 found that `stop.sh` only parses `allow`/`reason`
27
+ * from the daemon response — it never echoes systemMessage back to Claude
28
+ * Code. So Option B cannot deliver text at Stop. Degraded path: StopHandler
29
+ * calls `markStopPending()` to set an in-memory per-session flag; the next
30
+ * UserPromptSubmit consumes it and injects the nudge regardless of the
31
+ * threshold (completion timing is high-signal). The flag is transient (lost
32
+ * on daemon restart) — acceptable because Option A's threshold still catches
33
+ * the same backlog on the next prompt.
34
+ *
35
+ * Cooldown (anti-nag): per-session in-memory timestamp + the global
36
+ * `outcome_nudge_cooldown_seconds` (default 86400 = 24h). Within the cooldown
37
+ * window we do not re-nudge the same session. The cooldown is NOT applied to
38
+ * the degraded Option B path's first fire after a Stop — completion is the
39
+ * moment we most want the reminder — but it IS recorded so a follow-up prompt
40
+ * seconds later doesn't double-nudge.
41
+ *
42
+ * Fail-safe: every public method catches and degrades to "no nudge". The soft-
43
+ * gate must never break the prompt pipeline.
44
+ */
45
+ import { logger } from '../../core/utils/logger.js';
46
+ /** forge_config key for the resolved-unfilled threshold (Option A). */
47
+ export const OUTCOME_NUDGE_THRESHOLD_KEY = 'outcome_nudge_threshold';
48
+ /** Default Option A threshold — nudge once 2 decisions are awaiting back-fill. */
49
+ export const DEFAULT_OUTCOME_NUDGE_THRESHOLD = 2;
50
+ /** forge_config key for the per-session cooldown (seconds). */
51
+ export const OUTCOME_NUDGE_COOLDOWN_KEY = 'outcome_nudge_cooldown_seconds';
52
+ /** Default cooldown — 24h between nudges for the same session. */
53
+ export const DEFAULT_OUTCOME_NUDGE_COOLDOWN_SECONDS = 86400;
54
+ /** Hard upper bound for the cooldown override (7 days). */
55
+ const MAX_OUTCOME_NUDGE_COOLDOWN_SECONDS = 7 * 86400;
56
+ /** Max ids to list inline in the nudge message (keeps it readable). */
57
+ const MAX_IDS_IN_MESSAGE = 8;
58
+ /**
59
+ * Resolve the Option A threshold from forge_config, falling back to the
60
+ * default for missing / non-finite / < 1 values.
61
+ */
62
+ export function resolveOutcomeNudgeThreshold(storage) {
63
+ if (!storage)
64
+ return DEFAULT_OUTCOME_NUDGE_THRESHOLD;
65
+ try {
66
+ const raw = storage.readConfig(OUTCOME_NUDGE_THRESHOLD_KEY);
67
+ if (raw === undefined || raw === null)
68
+ return DEFAULT_OUTCOME_NUDGE_THRESHOLD;
69
+ const n = Number(raw);
70
+ if (Number.isFinite(n) && n >= 1)
71
+ return Math.floor(n);
72
+ }
73
+ catch {
74
+ // fail-silent
75
+ }
76
+ return DEFAULT_OUTCOME_NUDGE_THRESHOLD;
77
+ }
78
+ /**
79
+ * Resolve the cooldown (seconds) from forge_config. Values <= 0 or above the
80
+ * hard bound fall back to the default.
81
+ */
82
+ export function resolveOutcomeNudgeCooldownSeconds(storage) {
83
+ if (!storage)
84
+ return DEFAULT_OUTCOME_NUDGE_COOLDOWN_SECONDS;
85
+ try {
86
+ const raw = storage.readConfig(OUTCOME_NUDGE_COOLDOWN_KEY);
87
+ if (raw === undefined || raw === null)
88
+ return DEFAULT_OUTCOME_NUDGE_COOLDOWN_SECONDS;
89
+ const n = Number(raw);
90
+ if (!Number.isFinite(n))
91
+ return DEFAULT_OUTCOME_NUDGE_COOLDOWN_SECONDS;
92
+ if (n <= 0)
93
+ return DEFAULT_OUTCOME_NUDGE_COOLDOWN_SECONDS;
94
+ if (n > MAX_OUTCOME_NUDGE_COOLDOWN_SECONDS)
95
+ return DEFAULT_OUTCOME_NUDGE_COOLDOWN_SECONDS;
96
+ return Math.floor(n);
97
+ }
98
+ catch {
99
+ return DEFAULT_OUTCOME_NUDGE_COOLDOWN_SECONDS;
100
+ }
101
+ }
102
+ /**
103
+ * Format the `[OUTCOME NUDGE]` systemMessage. Independent `[OUTCOME NUDGE]`
104
+ * prefix (parallel to `[DECISION HINT]`) so the two never visually merge when
105
+ * both appear in the same systemMessage (OQ4). Pure / exported for tests.
106
+ *
107
+ * `reason` distinguishes the trigger purely for the leading line; the body
108
+ * (id list + command) is identical either way.
109
+ */
110
+ export function formatOutcomeNudge(ids, reason) {
111
+ const shown = ids.slice(0, MAX_IDS_IN_MESSAGE);
112
+ const extra = ids.length - shown.length;
113
+ const idList = shown.join(' ') + (extra > 0 ? ` (+${extra} more)` : '');
114
+ const lead = reason === 'completion'
115
+ ? `刚完工 — 有 ${ids.length} 个已批准(resolved)的决策还没回填实施结果(outcome)。`
116
+ : `已攒到 ${ids.length} 个已批准(resolved)但未回填 outcome 的决策。`;
117
+ const lines = [
118
+ '[OUTCOME NUDGE]',
119
+ '',
120
+ lead,
121
+ `回填能让 decision-maker 的历史先例加权(成功加权/失败警示)不空转。请就近回填:`,
122
+ '',
123
+ ...shown.map((id) => `cf decisions outcome ${id} --result success|failed|partial [--note ...]`),
124
+ ];
125
+ if (extra > 0) {
126
+ lines.push(`# 还有 ${extra} 个:cf decisions outcome --list-pending 查看全部`);
127
+ }
128
+ lines.push('');
129
+ lines.push(`(仅提示,不阻断;outcome 永不自动推断——必须你/实施 agent 明确回填)`);
130
+ lines.push(`<!-- outcome-nudge: ${idList} -->`);
131
+ return lines.join('\n');
132
+ }
133
+ /**
134
+ * OutcomeNudgeService — owns the cooldown / Stop-pending state and computes the
135
+ * nudge message. One instance lives on UserPromptHandler; StopHandler reaches
136
+ * it through the existing userPromptHandler reference to set the Stop flag.
137
+ */
138
+ export class OutcomeNudgeService {
139
+ state = new Map();
140
+ key(sessionId, projectPath) {
141
+ return `${sessionId}:${projectPath}`;
142
+ }
143
+ /**
144
+ * Degraded Option B entry point. Called by StopHandler at completion. Sets an
145
+ * in-memory flag iff the session/project has resolved-unfilled decisions, so
146
+ * the NEXT UserPromptSubmit injects the nudge regardless of the threshold.
147
+ *
148
+ * Pure read of storage + flag set; NEVER writes an outcome. Fail-silent.
149
+ */
150
+ markStopPending(sessionId, projectPath, storage) {
151
+ if (!storage || !sessionId)
152
+ return;
153
+ try {
154
+ const pending = storage.listResolvedUnfilledDecisions(sessionId, projectPath);
155
+ if (pending.length === 0)
156
+ return;
157
+ const k = this.key(sessionId, projectPath);
158
+ const s = this.state.get(k) ?? { lastNudgedMs: 0, stopPending: false };
159
+ s.stopPending = true;
160
+ this.state.set(k, s);
161
+ logger.debug(`[OutcomeNudge] Stop-pending flag set for ${sessionId} ` +
162
+ `(${pending.length} resolved-unfilled)`);
163
+ }
164
+ catch (err) {
165
+ logger.debug(`[OutcomeNudge] markStopPending failed (skipped): ${err}`);
166
+ }
167
+ }
168
+ /**
169
+ * UserPromptSubmit entry point. Returns the `[OUTCOME NUDGE]` message to
170
+ * append to systemMessage, or null when no nudge is warranted.
171
+ *
172
+ * Fires when EITHER:
173
+ * - the Stop-pending flag is set (degraded Option B, completion timing), OR
174
+ * - resolved-unfilled count >= threshold (Option A backstop)
175
+ * AND the per-session cooldown has elapsed.
176
+ *
177
+ * Side effects: clears the Stop-pending flag (consumed once) and records the
178
+ * nudge timestamp for cooldown. NEVER writes an outcome. Fail-silent → null.
179
+ */
180
+ evaluate(sessionId, projectPath, storage, nowMs = Date.now()) {
181
+ if (!storage || !sessionId)
182
+ return null;
183
+ try {
184
+ const k = this.key(sessionId, projectPath);
185
+ const s = this.state.get(k) ?? { lastNudgedMs: 0, stopPending: false };
186
+ const pending = storage.listResolvedUnfilledDecisions(sessionId, projectPath);
187
+ // Always clear a stale Stop flag when nothing is actually pending — keeps
188
+ // the flag from lingering if outcomes got filled out-of-band.
189
+ if (pending.length === 0) {
190
+ if (s.stopPending) {
191
+ s.stopPending = false;
192
+ this.state.set(k, s);
193
+ }
194
+ return null;
195
+ }
196
+ const threshold = resolveOutcomeNudgeThreshold(storage);
197
+ const reason = s.stopPending
198
+ ? 'completion'
199
+ : pending.length >= threshold
200
+ ? 'threshold'
201
+ : null;
202
+ if (reason === null)
203
+ return null;
204
+ // Cooldown gate (applies to BOTH paths — a Stop followed by an immediate
205
+ // prompt should not double-nudge). The Stop flag is consumed regardless,
206
+ // so a cooled-down completion still clears the flag (the threshold path
207
+ // will re-surface it later if the backlog persists).
208
+ const cooldownSeconds = resolveOutcomeNudgeCooldownSeconds(storage);
209
+ const elapsedMs = nowMs - s.lastNudgedMs;
210
+ const cooledDown = s.lastNudgedMs === 0 || elapsedMs >= cooldownSeconds * 1000;
211
+ if (!cooledDown) {
212
+ if (s.stopPending) {
213
+ s.stopPending = false; // consume — don't let it fire after cooldown stale
214
+ this.state.set(k, s);
215
+ }
216
+ logger.debug(`[OutcomeNudge] suppressed by cooldown (session=${sessionId}, ` +
217
+ `elapsed=${Math.round(elapsedMs / 1000)}s < ${cooldownSeconds}s)`);
218
+ return null;
219
+ }
220
+ const ids = pending.map((r) => r.id);
221
+ const message = formatOutcomeNudge(ids, reason);
222
+ // Record + consume.
223
+ s.lastNudgedMs = nowMs;
224
+ s.stopPending = false;
225
+ this.state.set(k, s);
226
+ logger.info(`[OutcomeNudge] emitted (reason=${reason}, count=${ids.length}, ` +
227
+ `session=${sessionId})`);
228
+ return message;
229
+ }
230
+ catch (err) {
231
+ logger.debug(`[OutcomeNudge] evaluate failed (skipped): ${err}`);
232
+ return null;
233
+ }
234
+ }
235
+ /** Clear per-session state. Called by StopHandler.clearSession path is NOT
236
+ * used (we need the flag to survive into the next prompt); exposed for tests
237
+ * and for symmetry with other per-session caches. */
238
+ clearSession(sessionId, projectPath) {
239
+ this.state.delete(this.key(sessionId, projectPath));
240
+ }
241
+ }
242
+ //# sourceMappingURL=outcome-nudge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outcome-nudge.js","sourceRoot":"","sources":["../../../src/daemon/services/outcome-nudge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,127 @@
1
+ /**
2
+ * SpecApproval — v9.x Phase 2b approve-token verifier.
3
+ *
4
+ * Companion service to `SpecGenerator`. Called by `UserPromptHandler.step 2.7`
5
+ * when the user types `approve <token>` exactly. The handler:
6
+ * 1. Detects the 'approve <8-hex>' pattern
7
+ * 2. Asks `SpecApproval.verify(token, session_id)` for the outcome
8
+ * 3. Surfaces a systemMessage based on the outcome
9
+ * 4. Short-circuits if outcome === 'ok' (skips KB / Skill / workflow rec)
10
+ *
11
+ * Why a separate service: keeps the handler thin and makes the verifier
12
+ * trivially testable without spinning up the whole UserPromptHandler graph.
13
+ *
14
+ * P0 safety (doc-reviewer Sub-2 report): verify() MUST filter by session_id.
15
+ * A token leaked across sessions must NOT be approve-able. The underlying
16
+ * facade method `findSpecByTokenAndSession` enforces this.
17
+ *
18
+ * No 'modify' code path is implemented in Phase 2b (spec § 3.4 mentions it
19
+ * in the systemMessage hint but § 3.5 leaves it un-implemented). The
20
+ * handler-side messages have been adjusted to advertise only `approve` and
21
+ * `skip`. See changelog "modify path simplification" decision.
22
+ */
23
+ import type { SQLiteStorage } from '../../core/storage/sqlite.js';
24
+ import type { SpecLikeRow } from '../../core/storage/decisions.js';
25
+ import type { SpecApprovalOutcome, SpecApprovalResult, SpecApprovalRowLike } from '../../core/types.js';
26
+ /**
27
+ * Regex matching exactly `approve <8-hex>` with no surrounding text.
28
+ *
29
+ * Kept for backward compatibility — `extractToken` still uses it for the
30
+ * pure-token path. Bug 1 (2026-05-27 spec § 3.1) extends approval semantics
31
+ * to CJK / token-less variants via {@link APPROVAL_KEYWORD_REGEX} + the new
32
+ * {@link SpecApproval.extractApprovalIntent} method.
33
+ */
34
+ export declare const APPROVE_REGEX: RegExp;
35
+ /**
36
+ * Regex matching the WHOLE prompt as a bare approval keyword
37
+ * (Chinese / English) OPTIONALLY followed by an 8-hex token. Used by
38
+ * {@link SpecApproval.extractApprovalIntent} so any of the following short-
39
+ * circuit into spec-approval pipeline (Bug 1 spec § 3.1):
40
+ *
41
+ * '批准' → hasIntent=true, token=undefined → fallback search
42
+ * '同意' → ditto (Chinese formal)
43
+ * 'approve' → ditto (English bare; legacy regex required token)
44
+ * '批准 a1b2c3d4' → hasIntent=true, token='a1b2c3d4'
45
+ * '批准 A1B2C3D4 ' → tolerates whitespace + case
46
+ *
47
+ * Strict anchoring (`^…$`) prevents '我同意,但是...' from matching — a
48
+ * complex sentence containing the keyword is NOT an approval signal.
49
+ */
50
+ export declare const APPROVAL_KEYWORD_REGEX: RegExp;
51
+ /**
52
+ * Result of {@link SpecApproval.extractApprovalIntent}. `hasIntent` is the
53
+ * caller's short-circuit gate; `token` is set ONLY when the prompt carried
54
+ * an explicit 8-hex (otherwise the caller must fallback to listSessionPending).
55
+ */
56
+ export interface ApprovalIntent {
57
+ hasIntent: boolean;
58
+ token?: string;
59
+ }
60
+ export declare class SpecApproval {
61
+ private readonly storage;
62
+ constructor(storage: SQLiteStorage);
63
+ /**
64
+ * Try to extract a token from a raw user prompt. Returns the 8-hex string
65
+ * (lowercase) when the WHOLE prompt is exactly `approve <token>`. Returns
66
+ * null otherwise — that's the signal for the handler to NOT short-circuit.
67
+ *
68
+ * Strict-format requirement (spec § 3.5 risk note): if the user mixes
69
+ * 'approve abc12345' with additional text, we let the prompt proceed
70
+ * through the normal pipeline to avoid losing their new request.
71
+ */
72
+ extractToken(prompt: string): string | null;
73
+ /**
74
+ * Bug 1 fix (2026-05-27 spec § 3.1) — generalised approval detector.
75
+ * Returns:
76
+ * - `{ hasIntent: false }` when prompt is NOT an approval signal
77
+ * - `{ hasIntent: true, token }` when prompt is e.g. '批准 a1b2c3d4'
78
+ * - `{ hasIntent: true }` (no token) when prompt is bare '批准' / 'approve'
79
+ *
80
+ * Caller (`SpecGate.handleApproval`) uses `hasIntent` as the short-circuit
81
+ * gate and `token` to decide whether to call `verify` directly or fall back
82
+ * to `listSessionPending` to pick the latest pending row.
83
+ *
84
+ * Strict-format anchoring prevents complex sentences like '我同意,但是…'
85
+ * from triggering approval — the keyword must be the WHOLE prompt.
86
+ */
87
+ extractApprovalIntent(prompt: string): ApprovalIntent;
88
+ /**
89
+ * Verify a token. C1 (spec 0854): look up the decisions table (kind='spec'),
90
+ * scoped by session_id (P0 safety — a leaked cross-session token must never
91
+ * approve someone else's spec). The legacy pending_specs table is gone.
92
+ *
93
+ * Outcomes (see SpecApprovalResult in src/core/types.ts):
94
+ * • 'ok' — found, status='generated', flipped to 'approved'
95
+ * • 'not_found' — token unknown OR session mismatch (P0 safety)
96
+ * • 'expired' — found but status='expired'
97
+ * • 'already_approved' — found but status='approved'
98
+ *
99
+ * The function COMMITS the status flip when outcome === 'ok' via
100
+ * markSpecApproved (decisions). Idempotent.
101
+ */
102
+ verify(token: string, sessionId: string, nowIso?: string): SpecApprovalResult;
103
+ /**
104
+ * List still-pending specs for a session (for the "unknown token" hint).
105
+ *
106
+ * C1 (spec 0854): reads decisions kind='spec' pending rows only. Returns the
107
+ * SpecLikeRow shape consumed by spec-gate / formatApprovalMessage.
108
+ */
109
+ listSessionPending(sessionId: string, limit?: number): SpecLikeRow[];
110
+ private classifyAndCommit;
111
+ }
112
+ /**
113
+ * Render the systemMessage shown to the main thread for each outcome.
114
+ *
115
+ * Centralized here so SpecGenerator / SpecApproval / the handler all agree
116
+ * on the wording. Format is intentionally short to keep the system message
117
+ * cheap (KB inject + intent + KB block already accumulate).
118
+ */
119
+ export declare function formatApprovalMessage(outcome: SpecApprovalOutcome, args: {
120
+ token: string;
121
+ row?: SpecApprovalRowLike;
122
+ pendingList?: Array<{
123
+ token: string;
124
+ spec_path: string;
125
+ }>;
126
+ }): string;
127
+ //# sourceMappingURL=spec-approval.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spec-approval.d.ts","sourceRoot":"","sources":["../../../src/daemon/services/spec-approval.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAElE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,KAAK,EACV,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,qBAAqB,CAAC;AAG7B;;;;;;;GAOG;AACH,eAAO,MAAM,aAAa,QAAqC,CAAC;AAEhE;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,sBAAsB,QACc,CAAC;AAElD;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,YAAY;IACX,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,aAAa;IAEnD;;;;;;;;OAQG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAM3C;;;;;;;;;;;;;OAaG;IACH,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc;IAQrD;;;;;;;;;;;;;OAaG;IACH,MAAM,CACJ,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,MAAM,GACd,kBAAkB;IAcrB;;;;;OAKG;IACH,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,SAAI,GAAG,WAAW,EAAE;IAS/D,OAAO,CAAC,iBAAiB;CAkC1B;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,mBAAmB,EAC5B,IAAI,EAAE;IACJ,KAAK,EAAE,MAAM,CAAC;IAId,GAAG,CAAC,EAAE,mBAAmB,CAAC;IAC1B,WAAW,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC3D,GACA,MAAM,CAmCR"}
@@ -0,0 +1,216 @@
1
+ /**
2
+ * SpecApproval — v9.x Phase 2b approve-token verifier.
3
+ *
4
+ * Companion service to `SpecGenerator`. Called by `UserPromptHandler.step 2.7`
5
+ * when the user types `approve <token>` exactly. The handler:
6
+ * 1. Detects the 'approve <8-hex>' pattern
7
+ * 2. Asks `SpecApproval.verify(token, session_id)` for the outcome
8
+ * 3. Surfaces a systemMessage based on the outcome
9
+ * 4. Short-circuits if outcome === 'ok' (skips KB / Skill / workflow rec)
10
+ *
11
+ * Why a separate service: keeps the handler thin and makes the verifier
12
+ * trivially testable without spinning up the whole UserPromptHandler graph.
13
+ *
14
+ * P0 safety (doc-reviewer Sub-2 report): verify() MUST filter by session_id.
15
+ * A token leaked across sessions must NOT be approve-able. The underlying
16
+ * facade method `findSpecByTokenAndSession` enforces this.
17
+ *
18
+ * No 'modify' code path is implemented in Phase 2b (spec § 3.4 mentions it
19
+ * in the systemMessage hint but § 3.5 leaves it un-implemented). The
20
+ * handler-side messages have been adjusted to advertise only `approve` and
21
+ * `skip`. See changelog "modify path simplification" decision.
22
+ */
23
+ import { toSpecLikeRow } from '../../core/storage/decisions.js';
24
+ import { logger } from '../../core/utils/logger.js';
25
+ /**
26
+ * Regex matching exactly `approve <8-hex>` with no surrounding text.
27
+ *
28
+ * Kept for backward compatibility — `extractToken` still uses it for the
29
+ * pure-token path. Bug 1 (2026-05-27 spec § 3.1) extends approval semantics
30
+ * to CJK / token-less variants via {@link APPROVAL_KEYWORD_REGEX} + the new
31
+ * {@link SpecApproval.extractApprovalIntent} method.
32
+ */
33
+ export const APPROVE_REGEX = /^\s*approve\s+([a-f0-9]{8})\s*$/i;
34
+ /**
35
+ * Regex matching the WHOLE prompt as a bare approval keyword
36
+ * (Chinese / English) OPTIONALLY followed by an 8-hex token. Used by
37
+ * {@link SpecApproval.extractApprovalIntent} so any of the following short-
38
+ * circuit into spec-approval pipeline (Bug 1 spec § 3.1):
39
+ *
40
+ * '批准' → hasIntent=true, token=undefined → fallback search
41
+ * '同意' → ditto (Chinese formal)
42
+ * 'approve' → ditto (English bare; legacy regex required token)
43
+ * '批准 a1b2c3d4' → hasIntent=true, token='a1b2c3d4'
44
+ * '批准 A1B2C3D4 ' → tolerates whitespace + case
45
+ *
46
+ * Strict anchoring (`^…$`) prevents '我同意,但是...' from matching — a
47
+ * complex sentence containing the keyword is NOT an approval signal.
48
+ */
49
+ export const APPROVAL_KEYWORD_REGEX = /^\s*(批准|同意|approve)(?:\s+([a-f0-9]{8}))?\s*$/i;
50
+ export class SpecApproval {
51
+ storage;
52
+ constructor(storage) {
53
+ this.storage = storage;
54
+ }
55
+ /**
56
+ * Try to extract a token from a raw user prompt. Returns the 8-hex string
57
+ * (lowercase) when the WHOLE prompt is exactly `approve <token>`. Returns
58
+ * null otherwise — that's the signal for the handler to NOT short-circuit.
59
+ *
60
+ * Strict-format requirement (spec § 3.5 risk note): if the user mixes
61
+ * 'approve abc12345' with additional text, we let the prompt proceed
62
+ * through the normal pipeline to avoid losing their new request.
63
+ */
64
+ extractToken(prompt) {
65
+ if (!prompt)
66
+ return null;
67
+ const m = prompt.match(APPROVE_REGEX);
68
+ return m ? m[1].toLowerCase() : null;
69
+ }
70
+ /**
71
+ * Bug 1 fix (2026-05-27 spec § 3.1) — generalised approval detector.
72
+ * Returns:
73
+ * - `{ hasIntent: false }` when prompt is NOT an approval signal
74
+ * - `{ hasIntent: true, token }` when prompt is e.g. '批准 a1b2c3d4'
75
+ * - `{ hasIntent: true }` (no token) when prompt is bare '批准' / 'approve'
76
+ *
77
+ * Caller (`SpecGate.handleApproval`) uses `hasIntent` as the short-circuit
78
+ * gate and `token` to decide whether to call `verify` directly or fall back
79
+ * to `listSessionPending` to pick the latest pending row.
80
+ *
81
+ * Strict-format anchoring prevents complex sentences like '我同意,但是…'
82
+ * from triggering approval — the keyword must be the WHOLE prompt.
83
+ */
84
+ extractApprovalIntent(prompt) {
85
+ if (!prompt)
86
+ return { hasIntent: false };
87
+ const m = prompt.match(APPROVAL_KEYWORD_REGEX);
88
+ if (!m)
89
+ return { hasIntent: false };
90
+ const token = m[2] ? m[2].toLowerCase() : undefined;
91
+ return { hasIntent: true, token };
92
+ }
93
+ /**
94
+ * Verify a token. C1 (spec 0854): look up the decisions table (kind='spec'),
95
+ * scoped by session_id (P0 safety — a leaked cross-session token must never
96
+ * approve someone else's spec). The legacy pending_specs table is gone.
97
+ *
98
+ * Outcomes (see SpecApprovalResult in src/core/types.ts):
99
+ * • 'ok' — found, status='generated', flipped to 'approved'
100
+ * • 'not_found' — token unknown OR session mismatch (P0 safety)
101
+ * • 'expired' — found but status='expired'
102
+ * • 'already_approved' — found but status='approved'
103
+ *
104
+ * The function COMMITS the status flip when outcome === 'ok' via
105
+ * markSpecApproved (decisions). Idempotent.
106
+ */
107
+ verify(token, sessionId, nowIso) {
108
+ if (!token || !sessionId) {
109
+ return { outcome: 'not_found' };
110
+ }
111
+ const tok = token.toLowerCase();
112
+ const decisionRow = this.storage.findSpecByTokenAndSession(tok, sessionId);
113
+ if (decisionRow) {
114
+ return this.classifyAndCommit(toSpecLikeRow(decisionRow), decisionRow.id, nowIso);
115
+ }
116
+ return { outcome: 'not_found' };
117
+ }
118
+ /**
119
+ * List still-pending specs for a session (for the "unknown token" hint).
120
+ *
121
+ * C1 (spec 0854): reads decisions kind='spec' pending rows only. Returns the
122
+ * SpecLikeRow shape consumed by spec-gate / formatApprovalMessage.
123
+ */
124
+ listSessionPending(sessionId, limit = 5) {
125
+ return this.storage
126
+ .listSpecsBySessionPending(sessionId, limit)
127
+ .map((d) => toSpecLikeRow(d))
128
+ .slice(0, limit);
129
+ }
130
+ // ── Internals ─────────────────────────────────────────────────────────
131
+ classifyAndCommit(row, rowId, nowIso) {
132
+ switch (row.status) {
133
+ case 'expired':
134
+ return { outcome: 'expired', row };
135
+ case 'approved':
136
+ return { outcome: 'already_approved', row };
137
+ case 'skipped':
138
+ case 'modified':
139
+ // Treat anything non-'generated' that isn't expired/approved as
140
+ // already-approved for UX simplicity. Surface row so the caller
141
+ // can format a useful systemMessage.
142
+ return { outcome: 'already_approved', row };
143
+ case 'generated':
144
+ try {
145
+ this.storage.markSpecApproved(rowId, nowIso);
146
+ }
147
+ catch (err) {
148
+ logger.warn(`[SpecApproval] markApproved failed for id=${rowId}: ${err}`);
149
+ }
150
+ return {
151
+ outcome: 'ok',
152
+ row: {
153
+ ...row,
154
+ status: 'approved',
155
+ approved_at: nowIso ?? new Date().toISOString(),
156
+ },
157
+ };
158
+ default:
159
+ return { outcome: 'not_found', row };
160
+ }
161
+ }
162
+ }
163
+ /**
164
+ * Render the systemMessage shown to the main thread for each outcome.
165
+ *
166
+ * Centralized here so SpecGenerator / SpecApproval / the handler all agree
167
+ * on the wording. Format is intentionally short to keep the system message
168
+ * cheap (KB inject + intent + KB block already accumulate).
169
+ */
170
+ export function formatApprovalMessage(outcome, args) {
171
+ const { token, row, pendingList } = args;
172
+ switch (outcome) {
173
+ case 'ok': {
174
+ const spec = row?.spec_path ?? '(unknown spec)';
175
+ const intent = safeParseIntent(row?.intent_json);
176
+ const agent = intent?.suggested_agent ?? 'planner';
177
+ return [
178
+ '[AUTO-SPEC APPROVED]',
179
+ '',
180
+ `Spec 已批准: ${spec}`,
181
+ `推荐 agent: ${agent}`,
182
+ '',
183
+ `主线程请用 Task tool spawn subagent_type='${agent}'`,
184
+ `Task prompt 必须以 "Read ${spec} 然后..." 开头。`,
185
+ ].join('\n');
186
+ }
187
+ case 'not_found': {
188
+ const hint = pendingList && pendingList.length > 0
189
+ ? '\n当前 pending tokens:\n' +
190
+ pendingList
191
+ .map((r) => ` • ${r.token} → ${r.spec_path}`)
192
+ .join('\n')
193
+ : '\n本 session 没有 pending spec。';
194
+ return `[AUTO-SPEC] 未找到 token "${token}"。可能已过期,或不属于本 session。${hint}`;
195
+ }
196
+ case 'expired':
197
+ return `[AUTO-SPEC] token "${token}" 已过期。请重新发起原 prompt 让 daemon 生成新 spec。`;
198
+ case 'already_approved':
199
+ return `[AUTO-SPEC] token "${token}" 已被 approve 过。请按 spec 执行;无需再次回复 approve。`;
200
+ case 'wrong_session':
201
+ return `[AUTO-SPEC] token "${token}" 不属于本 session。`;
202
+ default:
203
+ return `[AUTO-SPEC] 未识别的状态。`;
204
+ }
205
+ }
206
+ function safeParseIntent(json) {
207
+ if (!json)
208
+ return null;
209
+ try {
210
+ return JSON.parse(json);
211
+ }
212
+ catch {
213
+ return null;
214
+ }
215
+ }
216
+ //# sourceMappingURL=spec-approval.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spec-approval.js","sourceRoot":"","sources":["../../../src/daemon/services/spec-approval.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAOhE,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAEpD;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,kCAAkC,CAAC;AAEhE;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,sBAAsB,GACjC,+CAA+C,CAAC;AAYlD,MAAM,OAAO,YAAY;IACM;IAA7B,YAA6B,OAAsB;QAAtB,YAAO,GAAP,OAAO,CAAe;IAAG,CAAC;IAEvD;;;;;;;;OAQG;IACH,YAAY,CAAC,MAAc;QACzB,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QACzB,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QACtC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACvC,CAAC;IAED;;;;;;;;;;;;;OAaG;IACH,qBAAqB,CAAC,MAAc;QAClC,IAAI,CAAC,MAAM;YAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QACzC,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAC/C,IAAI,CAAC,CAAC;YAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACpD,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IACpC,CAAC;IAED;;;;;;;;;;;;;OAaG;IACH,MAAM,CACJ,KAAa,EACb,SAAiB,EACjB,MAAe;QAEf,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC;YACzB,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;QAClC,CAAC;QACD,MAAM,GAAG,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QAEhC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,yBAAyB,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAC3E,IAAI,WAAW,EAAE,CAAC;YAChB,OAAO,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QACpF,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;IAClC,CAAC;IAED;;;;;OAKG;IACH,kBAAkB,CAAC,SAAiB,EAAE,KAAK,GAAG,CAAC;QAC7C,OAAO,IAAI,CAAC,OAAO;aAChB,yBAAyB,CAAC,SAAS,EAAE,KAAK,CAAC;aAC3C,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;aAC5B,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACrB,CAAC;IAED,yEAAyE;IAEjE,iBAAiB,CACvB,GAAgB,EAChB,KAAa,EACb,MAAe;QAEf,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC;YACnB,KAAK,SAAS;gBACZ,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;YACrC,KAAK,UAAU;gBACb,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,GAAG,EAAE,CAAC;YAC9C,KAAK,SAAS,CAAC;YACf,KAAK,UAAU;gBACb,gEAAgE;gBAChE,gEAAgE;gBAChE,qCAAqC;gBACrC,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,GAAG,EAAE,CAAC;YAC9C,KAAK,WAAW;gBACd,IAAI,CAAC;oBACH,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;gBAC/C,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,MAAM,CAAC,IAAI,CAAC,6CAA6C,KAAK,KAAK,GAAG,EAAE,CAAC,CAAC;gBAC5E,CAAC;gBACD,OAAO;oBACL,OAAO,EAAE,IAAI;oBACb,GAAG,EAAE;wBACH,GAAG,GAAG;wBACN,MAAM,EAAE,UAAU;wBAClB,WAAW,EAAE,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;qBAChD;iBACF,CAAC;YACJ;gBACE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC;QACzC,CAAC;IACH,CAAC;CACF;AAED;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CACnC,OAA4B,EAC5B,IAOC;IAED,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;IACzC,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,IAAI,CAAC,CAAC,CAAC;YACV,MAAM,IAAI,GAAG,GAAG,EAAE,SAAS,IAAI,gBAAgB,CAAC;YAChD,MAAM,MAAM,GAAG,eAAe,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;YACjD,MAAM,KAAK,GAAG,MAAM,EAAE,eAAe,IAAI,SAAS,CAAC;YACnD,OAAO;gBACL,sBAAsB;gBACtB,EAAE;gBACF,aAAa,IAAI,EAAE;gBACnB,aAAa,KAAK,EAAE;gBACpB,EAAE;gBACF,wCAAwC,KAAK,GAAG;gBAChD,yBAAyB,IAAI,aAAa;aAC3C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACf,CAAC;QACD,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,MAAM,IAAI,GAAG,WAAW,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC;gBAChD,CAAC,CAAC,wBAAwB;oBACxB,WAAW;yBACR,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,SAAS,EAAE,CAAC;yBAC7C,IAAI,CAAC,IAAI,CAAC;gBACf,CAAC,CAAC,8BAA8B,CAAC;YACnC,OAAO,0BAA0B,KAAK,yBAAyB,IAAI,EAAE,CAAC;QACxE,CAAC;QACD,KAAK,SAAS;YACZ,OAAO,sBAAsB,KAAK,wCAAwC,CAAC;QAC7E,KAAK,kBAAkB;YACrB,OAAO,sBAAsB,KAAK,2CAA2C,CAAC;QAChF,KAAK,eAAe;YAClB,OAAO,sBAAsB,KAAK,iBAAiB,CAAC;QACtD;YACE,OAAO,qBAAqB,CAAC;IACjC,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,IAAwB;IAC/C,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAiC,CAAC;IAC1D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}