@winspan/claude-forge 9.2.0 → 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 (591) hide show
  1. package/DEVELOPMENT.md +80 -19
  2. package/README.md +13 -6
  3. package/dist/catalogs/agents.json +19 -24
  4. package/dist/catalogs/skills.json +139 -27
  5. package/dist/claudemd/templates/swarm-protocol.md +1 -1
  6. package/dist/cli/commands/agent.d.ts +169 -0
  7. package/dist/cli/commands/agent.d.ts.map +1 -0
  8. package/dist/cli/commands/agent.js +690 -0
  9. package/dist/cli/commands/agent.js.map +1 -0
  10. package/dist/cli/commands/codegraph.d.ts +17 -0
  11. package/dist/cli/commands/codegraph.d.ts.map +1 -0
  12. package/dist/cli/commands/codegraph.js +263 -0
  13. package/dist/cli/commands/codegraph.js.map +1 -0
  14. package/dist/cli/commands/decisions.d.ts.map +1 -1
  15. package/dist/cli/commands/decisions.js +46 -9
  16. package/dist/cli/commands/decisions.js.map +1 -1
  17. package/dist/cli/commands/executions.d.ts.map +1 -1
  18. package/dist/cli/commands/executions.js +2 -1
  19. package/dist/cli/commands/executions.js.map +1 -1
  20. package/dist/cli/commands/insights-goal-check.d.ts +5 -1
  21. package/dist/cli/commands/insights-goal-check.d.ts.map +1 -1
  22. package/dist/cli/commands/insights-goal-check.js +15 -15
  23. package/dist/cli/commands/insights-goal-check.js.map +1 -1
  24. package/dist/cli/commands/knowledge.d.ts +51 -0
  25. package/dist/cli/commands/knowledge.d.ts.map +1 -1
  26. package/dist/cli/commands/knowledge.js +202 -29
  27. package/dist/cli/commands/knowledge.js.map +1 -1
  28. package/dist/cli/commands/loop.d.ts +95 -0
  29. package/dist/cli/commands/loop.d.ts.map +1 -0
  30. package/dist/cli/commands/loop.js +408 -0
  31. package/dist/cli/commands/loop.js.map +1 -0
  32. package/dist/cli/commands/maintenance.d.ts +33 -0
  33. package/dist/cli/commands/maintenance.d.ts.map +1 -0
  34. package/dist/cli/commands/maintenance.js +75 -0
  35. package/dist/cli/commands/maintenance.js.map +1 -0
  36. package/dist/cli/commands/mcp.d.ts +23 -0
  37. package/dist/cli/commands/mcp.d.ts.map +1 -1
  38. package/dist/cli/commands/mcp.js +82 -0
  39. package/dist/cli/commands/mcp.js.map +1 -1
  40. package/dist/cli/commands/skills.d.ts +131 -0
  41. package/dist/cli/commands/skills.d.ts.map +1 -1
  42. package/dist/cli/commands/skills.js +409 -9
  43. package/dist/cli/commands/skills.js.map +1 -1
  44. package/dist/cli/commands/stats.d.ts.map +1 -1
  45. package/dist/cli/commands/stats.js +9 -2
  46. package/dist/cli/commands/stats.js.map +1 -1
  47. package/dist/cli/index.js +8 -0
  48. package/dist/cli/index.js.map +1 -1
  49. package/dist/core/constants.d.ts +37 -0
  50. package/dist/core/constants.d.ts.map +1 -1
  51. package/dist/core/constants.js +43 -0
  52. package/dist/core/constants.js.map +1 -1
  53. package/dist/core/diagnostics/checks.d.ts.map +1 -1
  54. package/dist/core/diagnostics/checks.js +2 -1
  55. package/dist/core/diagnostics/checks.js.map +1 -1
  56. package/dist/core/diagnostics/daemon-status.d.ts +1 -1
  57. package/dist/core/diagnostics/daemon-status.d.ts.map +1 -1
  58. package/dist/core/diagnostics/daemon-status.js +1 -1
  59. package/dist/core/diagnostics/daemon-status.js.map +1 -1
  60. package/dist/core/diagnostics/entropy-checks.d.ts +3 -2
  61. package/dist/core/diagnostics/entropy-checks.d.ts.map +1 -1
  62. package/dist/core/diagnostics/entropy-checks.js +10 -5
  63. package/dist/core/diagnostics/entropy-checks.js.map +1 -1
  64. package/dist/core/diagnostics/heartbeat-reader.d.ts +28 -0
  65. package/dist/core/diagnostics/heartbeat-reader.d.ts.map +1 -0
  66. package/dist/core/diagnostics/heartbeat-reader.js +50 -0
  67. package/dist/core/diagnostics/heartbeat-reader.js.map +1 -0
  68. package/dist/core/event-fields.d.ts +27 -0
  69. package/dist/core/event-fields.d.ts.map +1 -1
  70. package/dist/core/event-fields.js +43 -0
  71. package/dist/core/event-fields.js.map +1 -1
  72. package/dist/core/governance/global-inject.d.ts +34 -4
  73. package/dist/core/governance/global-inject.d.ts.map +1 -1
  74. package/dist/core/governance/global-inject.js +80 -25
  75. package/dist/core/governance/global-inject.js.map +1 -1
  76. package/dist/core/insights/agent-anchor-guard.d.ts +77 -0
  77. package/dist/core/insights/agent-anchor-guard.d.ts.map +1 -0
  78. package/dist/core/insights/agent-anchor-guard.js +119 -0
  79. package/dist/core/insights/agent-anchor-guard.js.map +1 -0
  80. package/dist/core/insights/agent-distill-context.d.ts +55 -0
  81. package/dist/core/insights/agent-distill-context.d.ts.map +1 -0
  82. package/dist/core/insights/agent-distill-context.js +146 -0
  83. package/dist/core/insights/agent-distill-context.js.map +1 -0
  84. package/dist/core/insights/agent-distill-spawn.d.ts +56 -0
  85. package/dist/core/insights/agent-distill-spawn.d.ts.map +1 -0
  86. package/dist/core/insights/agent-distill-spawn.js +179 -0
  87. package/dist/core/insights/agent-distill-spawn.js.map +1 -0
  88. package/dist/core/insights/agent-drift.d.ts +66 -0
  89. package/dist/core/insights/agent-drift.d.ts.map +1 -0
  90. package/dist/core/insights/agent-drift.js +109 -0
  91. package/dist/core/insights/agent-drift.js.map +1 -0
  92. package/dist/core/insights/agent-evolution-sources.d.ts +21 -0
  93. package/dist/core/insights/agent-evolution-sources.d.ts.map +1 -0
  94. package/dist/core/insights/agent-evolution-sources.js +36 -0
  95. package/dist/core/insights/agent-evolution-sources.js.map +1 -0
  96. package/dist/core/insights/agent-health.d.ts +142 -0
  97. package/dist/core/insights/agent-health.d.ts.map +1 -0
  98. package/dist/core/insights/agent-health.js +296 -0
  99. package/dist/core/insights/agent-health.js.map +1 -0
  100. package/dist/core/insights/agent-patch-apply.d.ts +45 -0
  101. package/dist/core/insights/agent-patch-apply.d.ts.map +1 -0
  102. package/dist/core/insights/agent-patch-apply.js +165 -0
  103. package/dist/core/insights/agent-patch-apply.js.map +1 -0
  104. package/dist/core/insights/agent-suggest.d.ts +128 -0
  105. package/dist/core/insights/agent-suggest.d.ts.map +1 -0
  106. package/dist/core/insights/agent-suggest.js +284 -0
  107. package/dist/core/insights/agent-suggest.js.map +1 -0
  108. package/dist/core/insights/coverage-tiers.d.ts +46 -0
  109. package/dist/core/insights/coverage-tiers.d.ts.map +1 -0
  110. package/dist/core/insights/coverage-tiers.js +95 -0
  111. package/dist/core/insights/coverage-tiers.js.map +1 -0
  112. package/dist/{daemon/services → core/insights}/experience-extractor.d.ts +0 -7
  113. package/dist/core/insights/experience-extractor.d.ts.map +1 -0
  114. package/dist/{daemon/services → core/insights}/experience-extractor.js +5 -9
  115. package/dist/core/insights/experience-extractor.js.map +1 -0
  116. package/dist/{daemon/services → core/insights}/violation-reporter.d.ts +20 -1
  117. package/dist/core/insights/violation-reporter.d.ts.map +1 -0
  118. package/dist/{daemon/services → core/insights}/violation-reporter.js +56 -4
  119. package/dist/core/insights/violation-reporter.js.map +1 -0
  120. package/dist/core/loop/loop-engine.d.ts +140 -0
  121. package/dist/core/loop/loop-engine.d.ts.map +1 -0
  122. package/dist/core/loop/loop-engine.js +266 -0
  123. package/dist/core/loop/loop-engine.js.map +1 -0
  124. package/dist/core/queue/index.d.ts.map +1 -1
  125. package/dist/core/queue/index.js +2 -1
  126. package/dist/core/queue/index.js.map +1 -1
  127. package/dist/core/storage/base.d.ts +159 -0
  128. package/dist/core/storage/base.d.ts.map +1 -1
  129. package/dist/core/storage/base.js +523 -0
  130. package/dist/core/storage/base.js.map +1 -1
  131. package/dist/core/storage/codegraph-types.d.ts +79 -0
  132. package/dist/core/storage/codegraph-types.d.ts.map +1 -0
  133. package/dist/core/storage/codegraph-types.js +14 -0
  134. package/dist/core/storage/codegraph-types.js.map +1 -0
  135. package/dist/core/storage/codegraph.d.ts +186 -0
  136. package/dist/core/storage/codegraph.d.ts.map +1 -0
  137. package/dist/core/storage/codegraph.js +452 -0
  138. package/dist/core/storage/codegraph.js.map +1 -0
  139. package/dist/core/storage/decisions.d.ts +30 -5
  140. package/dist/core/storage/decisions.d.ts.map +1 -1
  141. package/dist/core/storage/decisions.js +45 -13
  142. package/dist/core/storage/decisions.js.map +1 -1
  143. package/dist/core/storage/events.d.ts +127 -0
  144. package/dist/core/storage/events.d.ts.map +1 -1
  145. package/dist/core/storage/events.js +318 -3
  146. package/dist/core/storage/events.js.map +1 -1
  147. package/dist/core/storage/feedback.d.ts +3 -23
  148. package/dist/core/storage/feedback.d.ts.map +1 -1
  149. package/dist/core/storage/feedback.js +37 -38
  150. package/dist/core/storage/feedback.js.map +1 -1
  151. package/dist/core/storage/injections.d.ts +40 -0
  152. package/dist/core/storage/injections.d.ts.map +1 -1
  153. package/dist/core/storage/injections.js +69 -0
  154. package/dist/core/storage/injections.js.map +1 -1
  155. package/dist/core/storage/knowledge.d.ts +226 -0
  156. package/dist/core/storage/knowledge.d.ts.map +1 -1
  157. package/dist/core/storage/knowledge.js +391 -4
  158. package/dist/core/storage/knowledge.js.map +1 -1
  159. package/dist/core/storage/pipeline-rollup.d.ts +1 -7
  160. package/dist/core/storage/pipeline-rollup.d.ts.map +1 -1
  161. package/dist/core/storage/pipeline-rollup.js +18 -57
  162. package/dist/core/storage/pipeline-rollup.js.map +1 -1
  163. package/dist/core/storage/routing.d.ts +34 -0
  164. package/dist/core/storage/routing.d.ts.map +1 -1
  165. package/dist/core/storage/routing.js +92 -2
  166. package/dist/core/storage/routing.js.map +1 -1
  167. package/dist/core/storage/rows.d.ts +5 -25
  168. package/dist/core/storage/rows.d.ts.map +1 -1
  169. package/dist/core/storage/schema.sql +92 -27
  170. package/dist/core/storage/sessions.d.ts.map +1 -1
  171. package/dist/core/storage/sessions.js +2 -1
  172. package/dist/core/storage/sessions.js.map +1 -1
  173. package/dist/core/storage/skills.d.ts +159 -0
  174. package/dist/core/storage/skills.d.ts.map +1 -1
  175. package/dist/core/storage/skills.js +350 -4
  176. package/dist/core/storage/skills.js.map +1 -1
  177. package/dist/core/storage/sqlite.d.ts +81 -25
  178. package/dist/core/storage/sqlite.d.ts.map +1 -1
  179. package/dist/core/storage/sqlite.js +143 -45
  180. package/dist/core/storage/sqlite.js.map +1 -1
  181. package/dist/core/storage/tasks.d.ts +270 -0
  182. package/dist/core/storage/tasks.d.ts.map +1 -1
  183. package/dist/core/storage/tasks.js +495 -16
  184. package/dist/core/storage/tasks.js.map +1 -1
  185. package/dist/core/storage/tool-intercepts.d.ts +1 -1
  186. package/dist/core/storage/tool-intercepts.js +1 -1
  187. package/dist/core/types.d.ts +26 -3
  188. package/dist/core/types.d.ts.map +1 -1
  189. package/dist/core/types.js +1 -3
  190. package/dist/core/types.js.map +1 -1
  191. package/dist/core/utils/binary-paths.d.ts +32 -0
  192. package/dist/core/utils/binary-paths.d.ts.map +1 -1
  193. package/dist/core/utils/binary-paths.js +52 -0
  194. package/dist/core/utils/binary-paths.js.map +1 -1
  195. package/dist/core/utils/claude-cli-resolver.d.ts.map +1 -0
  196. package/dist/{skills/distill → core/utils}/claude-cli-resolver.js +1 -1
  197. package/dist/core/utils/claude-cli-resolver.js.map +1 -0
  198. package/dist/core/utils/claude-cli-spawn.d.ts +1 -1
  199. package/dist/core/utils/claude-cli-spawn.js +2 -2
  200. package/dist/core/utils/claude-cli-spawn.js.map +1 -1
  201. package/dist/core/utils/noise-prompt.d.ts +1 -1
  202. package/dist/core/utils/noise-prompt.js +1 -1
  203. package/dist/core/utils/time.d.ts +26 -0
  204. package/dist/core/utils/time.d.ts.map +1 -1
  205. package/dist/core/utils/time.js +33 -0
  206. package/dist/core/utils/time.js.map +1 -1
  207. package/dist/daemon/config-store.d.ts.map +1 -1
  208. package/dist/daemon/config-store.js +14 -5
  209. package/dist/daemon/config-store.js.map +1 -1
  210. package/dist/daemon/event-parser.d.ts.map +1 -1
  211. package/dist/daemon/event-parser.js +5 -0
  212. package/dist/daemon/event-parser.js.map +1 -1
  213. package/dist/daemon/handlers/post-tool-use.d.ts +24 -16
  214. package/dist/daemon/handlers/post-tool-use.d.ts.map +1 -1
  215. package/dist/daemon/handlers/post-tool-use.js +76 -116
  216. package/dist/daemon/handlers/post-tool-use.js.map +1 -1
  217. package/dist/daemon/handlers/pre-tool-use.d.ts +35 -10
  218. package/dist/daemon/handlers/pre-tool-use.d.ts.map +1 -1
  219. package/dist/daemon/handlers/pre-tool-use.js +71 -38
  220. package/dist/daemon/handlers/pre-tool-use.js.map +1 -1
  221. package/dist/daemon/handlers/stop.d.ts +20 -0
  222. package/dist/daemon/handlers/stop.d.ts.map +1 -1
  223. package/dist/daemon/handlers/stop.js +96 -8
  224. package/dist/daemon/handlers/stop.js.map +1 -1
  225. package/dist/daemon/handlers/user-prompt.d.ts +16 -1
  226. package/dist/daemon/handlers/user-prompt.d.ts.map +1 -1
  227. package/dist/daemon/handlers/user-prompt.js +97 -56
  228. package/dist/daemon/handlers/user-prompt.js.map +1 -1
  229. package/dist/daemon/handlers/violation-content-backfill.d.ts +76 -0
  230. package/dist/daemon/handlers/violation-content-backfill.d.ts.map +1 -0
  231. package/dist/daemon/handlers/violation-content-backfill.js +167 -0
  232. package/dist/daemon/handlers/violation-content-backfill.js.map +1 -0
  233. package/dist/daemon/index.d.ts +19 -0
  234. package/dist/daemon/index.d.ts.map +1 -1
  235. package/dist/daemon/index.js +125 -200
  236. package/dist/daemon/index.js.map +1 -1
  237. package/dist/daemon/rules/defaults.d.ts.map +1 -1
  238. package/dist/daemon/rules/defaults.js +151 -64
  239. package/dist/daemon/rules/defaults.js.map +1 -1
  240. package/dist/daemon/rules/types.d.ts +28 -22
  241. package/dist/daemon/rules/types.d.ts.map +1 -1
  242. package/dist/daemon/rules/workflow-defaults.js +9 -9
  243. package/dist/daemon/rules/workflow-defaults.js.map +1 -1
  244. package/dist/daemon/services/codegraph-sync.d.ts +94 -0
  245. package/dist/daemon/services/codegraph-sync.d.ts.map +1 -0
  246. package/dist/daemon/services/codegraph-sync.js +159 -0
  247. package/dist/daemon/services/codegraph-sync.js.map +1 -0
  248. package/dist/daemon/services/decision-hint.d.ts +47 -10
  249. package/dist/daemon/services/decision-hint.d.ts.map +1 -1
  250. package/dist/daemon/services/decision-hint.js +99 -24
  251. package/dist/daemon/services/decision-hint.js.map +1 -1
  252. package/dist/daemon/services/event-ttl-sweep.d.ts.map +1 -1
  253. package/dist/daemon/services/event-ttl-sweep.js +3 -2
  254. package/dist/daemon/services/event-ttl-sweep.js.map +1 -1
  255. package/dist/daemon/services/feedback-aggregator.d.ts +14 -26
  256. package/dist/daemon/services/feedback-aggregator.d.ts.map +1 -1
  257. package/dist/daemon/services/feedback-aggregator.js +23 -63
  258. package/dist/daemon/services/feedback-aggregator.js.map +1 -1
  259. package/dist/daemon/services/heartbeat-writer.d.ts +6 -15
  260. package/dist/daemon/services/heartbeat-writer.d.ts.map +1 -1
  261. package/dist/daemon/services/heartbeat-writer.js +7 -36
  262. package/dist/daemon/services/heartbeat-writer.js.map +1 -1
  263. package/dist/daemon/services/kb-injector.d.ts +1 -1
  264. package/dist/daemon/services/kb-injector.d.ts.map +1 -1
  265. package/dist/daemon/services/kb-injector.js +10 -2
  266. package/dist/daemon/services/kb-injector.js.map +1 -1
  267. package/dist/daemon/services/kb-rebuild-scheduler.d.ts +95 -0
  268. package/dist/daemon/services/kb-rebuild-scheduler.d.ts.map +1 -0
  269. package/dist/daemon/services/kb-rebuild-scheduler.js +149 -0
  270. package/dist/daemon/services/kb-rebuild-scheduler.js.map +1 -0
  271. package/dist/daemon/services/loop-hint.d.ts +139 -0
  272. package/dist/daemon/services/loop-hint.d.ts.map +1 -0
  273. package/dist/daemon/services/loop-hint.js +272 -0
  274. package/dist/daemon/services/loop-hint.js.map +1 -0
  275. package/dist/daemon/services/outcome-classification-service.js +1 -1
  276. package/dist/daemon/services/outcome-classification-service.js.map +1 -1
  277. package/dist/daemon/services/task-segmenter.d.ts +11 -0
  278. package/dist/daemon/services/task-segmenter.d.ts.map +1 -1
  279. package/dist/daemon/services/task-segmenter.js +48 -2
  280. package/dist/daemon/services/task-segmenter.js.map +1 -1
  281. package/dist/daemon/startup/maintenance-schedulers.d.ts +68 -0
  282. package/dist/daemon/startup/maintenance-schedulers.d.ts.map +1 -0
  283. package/dist/daemon/startup/maintenance-schedulers.js +294 -0
  284. package/dist/daemon/startup/maintenance-schedulers.js.map +1 -0
  285. package/dist/daemon/templates/agents/agent-retro-distiller.md +106 -0
  286. package/dist/daemon/templates/agents/claudemd-writer.md +1 -0
  287. package/dist/daemon/templates/agents/coder.md +165 -8
  288. package/dist/daemon/templates/agents/decision-maker.md +107 -21
  289. package/dist/daemon/templates/agents/doc-reviewer.md +4 -1
  290. package/dist/daemon/templates/agents/harness-debug-full.md +85 -3
  291. package/dist/daemon/templates/agents/knowledge-builder.md +1 -0
  292. package/dist/daemon/templates/agents/patch-applier.md +1 -0
  293. package/dist/daemon/templates/agents/planner.md +55 -3
  294. package/dist/daemon/templates/agents/safety-net-implementer.md +278 -0
  295. package/dist/daemon/templates/agents/skill-distiller.md +1 -0
  296. package/dist/daemon/templates/agents/task-boundary-classifier.md +1 -0
  297. package/dist/daemon/templates/agents/verify-agent.md +128 -5
  298. package/dist/hooks/stop.sh +7 -1
  299. package/dist/knowledge/builder.js +36 -7
  300. package/dist/knowledge/builder.js.map +1 -1
  301. package/dist/knowledge/constants.d.ts +10 -5
  302. package/dist/knowledge/constants.d.ts.map +1 -1
  303. package/dist/knowledge/constants.js +10 -5
  304. package/dist/knowledge/constants.js.map +1 -1
  305. package/dist/knowledge/graph/edge-extractor.d.ts +45 -0
  306. package/dist/knowledge/graph/edge-extractor.d.ts.map +1 -0
  307. package/dist/knowledge/graph/edge-extractor.js +242 -0
  308. package/dist/knowledge/graph/edge-extractor.js.map +1 -0
  309. package/dist/knowledge/graph/impact.d.ts +73 -0
  310. package/dist/knowledge/graph/impact.d.ts.map +1 -0
  311. package/dist/knowledge/graph/impact.js +94 -0
  312. package/dist/knowledge/graph/impact.js.map +1 -0
  313. package/dist/knowledge/graph/types.d.ts +22 -0
  314. package/dist/knowledge/graph/types.d.ts.map +1 -0
  315. package/dist/knowledge/graph/types.js +13 -0
  316. package/dist/knowledge/graph/types.js.map +1 -0
  317. package/dist/knowledge/prompt.d.ts +9 -0
  318. package/dist/knowledge/prompt.d.ts.map +1 -1
  319. package/dist/knowledge/prompt.js +17 -5
  320. package/dist/knowledge/prompt.js.map +1 -1
  321. package/dist/knowledge/query.d.ts +13 -0
  322. package/dist/knowledge/query.d.ts.map +1 -1
  323. package/dist/knowledge/query.js +107 -10
  324. package/dist/knowledge/query.js.map +1 -1
  325. package/dist/knowledge/repo-map.d.ts +11 -5
  326. package/dist/knowledge/repo-map.d.ts.map +1 -1
  327. package/dist/knowledge/repo-map.js +42 -3
  328. package/dist/knowledge/repo-map.js.map +1 -1
  329. package/dist/knowledge/validator.d.ts.map +1 -1
  330. package/dist/knowledge/validator.js +69 -2
  331. package/dist/knowledge/validator.js.map +1 -1
  332. package/dist/mcp/server.d.ts +64 -8
  333. package/dist/mcp/server.d.ts.map +1 -1
  334. package/dist/mcp/server.js +233 -18
  335. package/dist/mcp/server.js.map +1 -1
  336. package/dist/skills/distill/distiller.js +1 -1
  337. package/dist/skills/distill/distiller.js.map +1 -1
  338. package/dist/skills/distilled/distilled-api-design.md +4 -0
  339. package/dist/skills/distilled/distilled-brainstorming.md +79 -0
  340. package/dist/skills/distilled/distilled-brand-guidelines.md +86 -0
  341. package/dist/skills/distilled/distilled-canvas-design.md +128 -0
  342. package/dist/skills/distilled/distilled-claude-api.md +185 -0
  343. package/dist/skills/distilled/distilled-creator.md +5 -2
  344. package/dist/skills/distilled/distilled-dispatching-parallel-agents.md +136 -0
  345. package/dist/skills/distilled/distilled-doc-coauthoring.md +144 -0
  346. package/dist/skills/distilled/distilled-docx.md +231 -0
  347. package/dist/skills/distilled/distilled-executing-plans.md +85 -50
  348. package/dist/skills/distilled/distilled-finishing-a-development-branch.md +213 -0
  349. package/dist/skills/distilled/distilled-frontend-design.md +118 -0
  350. package/dist/skills/distilled/distilled-harness-engineering.md +1 -1
  351. package/dist/skills/distilled/distilled-receiving-code-review.md +185 -0
  352. package/dist/skills/distilled/distilled-subagent-driven-development.md +124 -0
  353. package/dist/skills/distilled/distilled-systematic-debugging.md +108 -260
  354. package/dist/skills/distilled/distilled-test-driven-development.md +432 -0
  355. package/dist/skills/distilled/distilled-using-superpowers.md +134 -0
  356. package/dist/skills/distilled/distilled-verification-before-completion.md +88 -78
  357. package/dist/skills/distilled/distilled-writing-skills.md +175 -0
  358. package/dist/skills/registry.d.ts +10 -50
  359. package/dist/skills/registry.d.ts.map +1 -1
  360. package/dist/skills/registry.js +7 -118
  361. package/dist/skills/registry.js.map +1 -1
  362. package/dist/skills/tools/pipeline-suggest.js +2 -2
  363. package/dist/skills/tools/pipeline-suggest.js.map +1 -1
  364. package/dist/skills/tools/skill-invoke.d.ts +2 -1
  365. package/dist/skills/tools/skill-invoke.d.ts.map +1 -1
  366. package/dist/skills/tools/skill-invoke.js +3 -1
  367. package/dist/skills/tools/skill-invoke.js.map +1 -1
  368. package/dist/web/analytics/anti-pattern-detector.d.ts.map +1 -1
  369. package/dist/web/analytics/anti-pattern-detector.js +6 -1
  370. package/dist/web/analytics/anti-pattern-detector.js.map +1 -1
  371. package/dist/web/analytics/drift-detector.d.ts +6 -0
  372. package/dist/web/analytics/drift-detector.d.ts.map +1 -1
  373. package/dist/web/analytics/drift-detector.js +15 -8
  374. package/dist/web/analytics/drift-detector.js.map +1 -1
  375. package/dist/web/analytics/weekly-report.d.ts +13 -0
  376. package/dist/web/analytics/weekly-report.d.ts.map +1 -1
  377. package/dist/web/analytics/weekly-report.js +17 -3
  378. package/dist/web/analytics/weekly-report.js.map +1 -1
  379. package/dist/web/routes/_helpers.d.ts +31 -0
  380. package/dist/web/routes/_helpers.d.ts.map +1 -1
  381. package/dist/web/routes/_helpers.js +33 -0
  382. package/dist/web/routes/_helpers.js.map +1 -1
  383. package/dist/web/routes/agent-distill.d.ts +49 -0
  384. package/dist/web/routes/agent-distill.d.ts.map +1 -0
  385. package/dist/web/routes/agent-distill.js +526 -0
  386. package/dist/web/routes/agent-distill.js.map +1 -0
  387. package/dist/web/routes/config.d.ts +56 -0
  388. package/dist/web/routes/config.d.ts.map +1 -0
  389. package/dist/web/routes/config.js +243 -0
  390. package/dist/web/routes/config.js.map +1 -0
  391. package/dist/web/routes/decisions.js +1 -1
  392. package/dist/web/routes/decisions.js.map +1 -1
  393. package/dist/web/routes/error-handler.d.ts +0 -4
  394. package/dist/web/routes/error-handler.d.ts.map +1 -1
  395. package/dist/web/routes/error-handler.js +0 -8
  396. package/dist/web/routes/error-handler.js.map +1 -1
  397. package/dist/web/routes/events.d.ts.map +1 -1
  398. package/dist/web/routes/events.js +2 -1
  399. package/dist/web/routes/events.js.map +1 -1
  400. package/dist/web/routes/insights.d.ts.map +1 -1
  401. package/dist/web/routes/insights.js +0 -0
  402. package/dist/web/routes/insights.js.map +1 -1
  403. package/dist/web/routes/knowledge.d.ts +43 -2
  404. package/dist/web/routes/knowledge.d.ts.map +1 -1
  405. package/dist/web/routes/knowledge.js +117 -6
  406. package/dist/web/routes/knowledge.js.map +1 -1
  407. package/dist/web/routes/pipeline.d.ts +0 -9
  408. package/dist/web/routes/pipeline.d.ts.map +1 -1
  409. package/dist/web/routes/pipeline.js +0 -4
  410. package/dist/web/routes/pipeline.js.map +1 -1
  411. package/dist/web/routes/rules.d.ts.map +1 -1
  412. package/dist/web/routes/rules.js +20 -6
  413. package/dist/web/routes/rules.js.map +1 -1
  414. package/dist/web/routes/sessions.d.ts.map +1 -1
  415. package/dist/web/routes/sessions.js +8 -7
  416. package/dist/web/routes/sessions.js.map +1 -1
  417. package/dist/web/routes/skill-stats.d.ts.map +1 -1
  418. package/dist/web/routes/skill-stats.js +153 -16
  419. package/dist/web/routes/skill-stats.js.map +1 -1
  420. package/dist/web/routes/skills-distill.js +1 -1
  421. package/dist/web/routes/skills-distill.js.map +1 -1
  422. package/dist/web/routes/stats.d.ts.map +1 -1
  423. package/dist/web/routes/stats.js +2 -1
  424. package/dist/web/routes/stats.js.map +1 -1
  425. package/dist/web/routes/task-timeline.d.ts +95 -19
  426. package/dist/web/routes/task-timeline.d.ts.map +1 -1
  427. package/dist/web/routes/task-timeline.js +344 -88
  428. package/dist/web/routes/task-timeline.js.map +1 -1
  429. package/dist/web/routes/tasks.d.ts.map +1 -1
  430. package/dist/web/routes/tasks.js +52 -30
  431. package/dist/web/routes/tasks.js.map +1 -1
  432. package/dist/web/routes/violations.d.ts +1 -1
  433. package/dist/web/routes/violations.d.ts.map +1 -1
  434. package/dist/web/routes/violations.js +3 -2
  435. package/dist/web/routes/violations.js.map +1 -1
  436. package/dist/web/server.d.ts.map +1 -1
  437. package/dist/web/server.js +20 -0
  438. package/dist/web/server.js.map +1 -1
  439. package/dist/web/services/agent-distill-manager.d.ts +122 -0
  440. package/dist/web/services/agent-distill-manager.d.ts.map +1 -0
  441. package/dist/web/services/agent-distill-manager.js +397 -0
  442. package/dist/web/services/agent-distill-manager.js.map +1 -0
  443. package/dist/web/services/distill-manager.d.ts +47 -0
  444. package/dist/web/services/distill-manager.d.ts.map +1 -1
  445. package/dist/web/services/distill-manager.js +103 -0
  446. package/dist/web/services/distill-manager.js.map +1 -1
  447. package/dist/web/static/assets/AgentDetailPage-DlUeA1sX.js +2 -0
  448. package/dist/web/static/assets/AgentDetailPage-DlUeA1sX.js.map +1 -0
  449. package/dist/web/static/assets/AgentDistillRunPage-Cybo4bii.js +3 -0
  450. package/dist/web/static/assets/AgentDistillRunPage-Cybo4bii.js.map +1 -0
  451. package/dist/web/static/assets/AgentsPage-Qd9FExLG.js +2 -0
  452. package/dist/web/static/assets/AgentsPage-Qd9FExLG.js.map +1 -0
  453. package/dist/web/static/assets/DaemonHealthPage-DTSVqtrI.js +2 -0
  454. package/dist/web/static/assets/DaemonHealthPage-DTSVqtrI.js.map +1 -0
  455. package/dist/web/static/assets/DecisionDetailPage-b4BA8dhc.js +2 -0
  456. package/dist/web/static/assets/DecisionDetailPage-b4BA8dhc.js.map +1 -0
  457. package/dist/web/static/assets/DecisionsPage-a3NRo_T7.js +2 -0
  458. package/dist/web/static/assets/DecisionsPage-a3NRo_T7.js.map +1 -0
  459. package/dist/web/static/assets/DiagnosticsPage-DIVdiIQG.js +2 -0
  460. package/dist/web/static/assets/DiagnosticsPage-DIVdiIQG.js.map +1 -0
  461. package/dist/web/static/assets/DistillDetailPage-U6a3l2iP.js +4 -0
  462. package/dist/web/static/assets/DistillDetailPage-U6a3l2iP.js.map +1 -0
  463. package/dist/web/static/assets/DistillPage-O7BHtRN8.js +2 -0
  464. package/dist/web/static/assets/DistillPage-O7BHtRN8.js.map +1 -0
  465. package/dist/web/static/assets/DistillRunPage-D1JuRWWr.js +2 -0
  466. package/dist/web/static/assets/DistillRunPage-D1JuRWWr.js.map +1 -0
  467. package/dist/web/static/assets/GlobalScopeHint-Q3wTJx3F.js +2 -0
  468. package/dist/web/static/assets/GlobalScopeHint-Q3wTJx3F.js.map +1 -0
  469. package/dist/web/static/assets/IssueDetailPage-BDfrtk2C.js +2 -0
  470. package/dist/web/static/assets/IssueDetailPage-BDfrtk2C.js.map +1 -0
  471. package/dist/web/static/assets/IssuesPage-SKmhlCrw.js +2 -0
  472. package/dist/web/static/assets/IssuesPage-SKmhlCrw.js.map +1 -0
  473. package/dist/web/static/assets/KbDetailPage-Yna86Na8.js +2 -0
  474. package/dist/web/static/assets/KbDetailPage-Yna86Na8.js.map +1 -0
  475. package/dist/web/static/assets/KbHitsPage-Cljl7H9p.js +2 -0
  476. package/dist/web/static/assets/KbHitsPage-Cljl7H9p.js.map +1 -0
  477. package/dist/web/static/assets/{MarkdownRenderer-DZmTl-8J.js → MarkdownRenderer-DlDQNihj.js} +2 -2
  478. package/dist/web/static/assets/{MarkdownRenderer-DZmTl-8J.js.map → MarkdownRenderer-DlDQNihj.js.map} +1 -1
  479. package/dist/web/static/assets/NotFound-LMzbP51V.js +2 -0
  480. package/dist/web/static/assets/{NotFound-BQPh0vaF.js.map → NotFound-LMzbP51V.js.map} +1 -1
  481. package/dist/web/static/assets/SettingsPage-DzoK4PKg.js +2 -0
  482. package/dist/web/static/assets/SettingsPage-DzoK4PKg.js.map +1 -0
  483. package/dist/web/static/assets/SkillDetailPage-BuBJJ_NX.js +2 -0
  484. package/dist/web/static/assets/SkillDetailPage-BuBJJ_NX.js.map +1 -0
  485. package/dist/web/static/assets/SkillsPage-aojkJpBc.js +2 -0
  486. package/dist/web/static/assets/SkillsPage-aojkJpBc.js.map +1 -0
  487. package/dist/web/static/assets/TaskDetailPage-1ckxnGhw.js +4 -0
  488. package/dist/web/static/assets/TaskDetailPage-1ckxnGhw.js.map +1 -0
  489. package/dist/web/static/assets/TasksHubPage-C2PLh3eg.js +6 -0
  490. package/dist/web/static/assets/TasksHubPage-C2PLh3eg.js.map +1 -0
  491. package/dist/web/static/assets/WorkplacePage-DHrp5VxS.js +2 -0
  492. package/dist/web/static/assets/WorkplacePage-DHrp5VxS.js.map +1 -0
  493. package/dist/web/static/assets/arco-DV6xCLhr.js +14 -0
  494. package/dist/web/static/assets/arco-DV6xCLhr.js.map +1 -0
  495. package/dist/web/static/assets/charts-BSV4cyC4.js +37 -0
  496. package/dist/web/static/assets/charts-BSV4cyC4.js.map +1 -0
  497. package/dist/web/static/assets/{index-7bl3kbcx.css → index-B_v_MKlb.css} +1 -1
  498. package/dist/web/static/assets/index-DileOOE4.js +4 -0
  499. package/dist/web/static/assets/index-DileOOE4.js.map +1 -0
  500. package/dist/web/static/assets/markdown-CA7ePUts.js +30 -0
  501. package/dist/web/static/assets/markdown-CA7ePUts.js.map +1 -0
  502. package/dist/web/static/assets/{outcome-DUn1NjlC.js → outcome-BKGy9azt.js} +2 -2
  503. package/dist/web/static/assets/{outcome-DUn1NjlC.js.map → outcome-BKGy9azt.js.map} +1 -1
  504. package/dist/web/static/assets/{query-S6X1S7K9.js → query-CgCOpYWf.js} +2 -2
  505. package/dist/web/static/assets/{query-S6X1S7K9.js.map → query-CgCOpYWf.js.map} +1 -1
  506. package/dist/web/static/assets/{react-router-JVUrkhdd.js → react-router-Cxmg8RuL.js} +3 -3
  507. package/dist/web/static/assets/{react-router-JVUrkhdd.js.map → react-router-Cxmg8RuL.js.map} +1 -1
  508. package/dist/web/static/assets/{syntax-highlighter-BkZfCDsz.js → syntax-highlighter-BDYycNja.js} +3 -3
  509. package/dist/web/static/assets/{syntax-highlighter-BkZfCDsz.js.map → syntax-highlighter-BDYycNja.js.map} +1 -1
  510. package/dist/web/static/assets/task-title-BhOcemuR.js +2 -0
  511. package/dist/web/static/assets/task-title-BhOcemuR.js.map +1 -0
  512. package/dist/web/static/assets/useAgentStats-B-uTgqBd.js +2 -0
  513. package/dist/web/static/assets/useAgentStats-B-uTgqBd.js.map +1 -0
  514. package/dist/web/static/assets/useDecisions-D-G2Ft5T.js +2 -0
  515. package/dist/web/static/assets/useDecisions-D-G2Ft5T.js.map +1 -0
  516. package/dist/web/static/assets/useDistill-21dZkXlT.js +3 -0
  517. package/dist/web/static/assets/useDistill-21dZkXlT.js.map +1 -0
  518. package/dist/web/static/assets/useEffectiveProject-DQiyX54y.js +2 -0
  519. package/dist/web/static/assets/useEffectiveProject-DQiyX54y.js.map +1 -0
  520. package/dist/web/static/assets/useIssuesFeed-CFiyQkAL.js +2 -0
  521. package/dist/web/static/assets/useIssuesFeed-CFiyQkAL.js.map +1 -0
  522. package/dist/web/static/assets/useKbHits-xKXWgqh9.js +2 -0
  523. package/dist/web/static/assets/useKbHits-xKXWgqh9.js.map +1 -0
  524. package/dist/web/static/assets/useSkillStats-B5hbIwdf.js +2 -0
  525. package/dist/web/static/assets/useSkillStats-B5hbIwdf.js.map +1 -0
  526. package/dist/web/static/assets/vendor-DS-q4Eyc.js +36 -0
  527. package/dist/web/static/assets/vendor-DS-q4Eyc.js.map +1 -0
  528. package/dist/web/static/index.html +6 -6
  529. package/package.json +5 -3
  530. package/dist/core/storage/workflow-recommendations.d.ts +0 -124
  531. package/dist/core/storage/workflow-recommendations.d.ts.map +0 -1
  532. package/dist/core/storage/workflow-recommendations.js +0 -274
  533. package/dist/core/storage/workflow-recommendations.js.map +0 -1
  534. package/dist/daemon/services/experience-extractor.d.ts.map +0 -1
  535. package/dist/daemon/services/experience-extractor.js.map +0 -1
  536. package/dist/daemon/services/violation-reporter.d.ts.map +0 -1
  537. package/dist/daemon/services/violation-reporter.js.map +0 -1
  538. package/dist/daemon/templates/agents/harness-hotfix.md +0 -99
  539. package/dist/daemon/templates/agents/hybrid-feature-with-safety.md +0 -104
  540. package/dist/daemon/templates/agents/refactor-specialist.md +0 -98
  541. package/dist/skills/distill/claude-cli-resolver.d.ts.map +0 -1
  542. package/dist/skills/distill/claude-cli-resolver.js.map +0 -1
  543. package/dist/skills/distilled/distilled-defi-amm-security.md +0 -293
  544. package/dist/skills/keyword-score.d.ts +0 -29
  545. package/dist/skills/keyword-score.d.ts.map +0 -1
  546. package/dist/skills/keyword-score.js +0 -54
  547. package/dist/skills/keyword-score.js.map +0 -1
  548. package/dist/web/static/assets/AgentContentPage-DkeRNxok.js +0 -2
  549. package/dist/web/static/assets/AgentContentPage-DkeRNxok.js.map +0 -1
  550. package/dist/web/static/assets/AgentDelegationTable-ByBa0x1l.js +0 -2
  551. package/dist/web/static/assets/AgentDelegationTable-ByBa0x1l.js.map +0 -1
  552. package/dist/web/static/assets/ContextInsightsPage-oUk7_I8u.js +0 -3
  553. package/dist/web/static/assets/ContextInsightsPage-oUk7_I8u.js.map +0 -1
  554. package/dist/web/static/assets/DaemonHealthPage-DG2fyOP7.js +0 -2
  555. package/dist/web/static/assets/DaemonHealthPage-DG2fyOP7.js.map +0 -1
  556. package/dist/web/static/assets/DecisionsPage-CMAPEnKb.js +0 -2
  557. package/dist/web/static/assets/DecisionsPage-CMAPEnKb.js.map +0 -1
  558. package/dist/web/static/assets/DiagnosticsPage-DQd-Zm4r.js +0 -2
  559. package/dist/web/static/assets/DiagnosticsPage-DQd-Zm4r.js.map +0 -1
  560. package/dist/web/static/assets/DriftTab-DqpepOhI.js +0 -2
  561. package/dist/web/static/assets/DriftTab-DqpepOhI.js.map +0 -1
  562. package/dist/web/static/assets/HealthHomePage-CN6zNIie.js +0 -3
  563. package/dist/web/static/assets/HealthHomePage-CN6zNIie.js.map +0 -1
  564. package/dist/web/static/assets/KbHitRateTable-ByEIWujF.js +0 -2
  565. package/dist/web/static/assets/KbHitRateTable-ByEIWujF.js.map +0 -1
  566. package/dist/web/static/assets/NotFound-BQPh0vaF.js +0 -2
  567. package/dist/web/static/assets/ProjectSwitcher-D3lZMFd3.js +0 -2
  568. package/dist/web/static/assets/ProjectSwitcher-D3lZMFd3.js.map +0 -1
  569. package/dist/web/static/assets/SettingsPage-oLJBNzQj.js +0 -2
  570. package/dist/web/static/assets/SettingsPage-oLJBNzQj.js.map +0 -1
  571. package/dist/web/static/assets/SkillContentPage-DK5rgfgw.js +0 -2
  572. package/dist/web/static/assets/SkillContentPage-DK5rgfgw.js.map +0 -1
  573. package/dist/web/static/assets/SkillStatsTable-DYMzjEUV.js +0 -2
  574. package/dist/web/static/assets/SkillStatsTable-DYMzjEUV.js.map +0 -1
  575. package/dist/web/static/assets/SkillsDistillTab-C7qaG8q3.js +0 -2
  576. package/dist/web/static/assets/SkillsDistillTab-C7qaG8q3.js.map +0 -1
  577. package/dist/web/static/assets/TasksHubPage-03wsRRsJ.js +0 -6
  578. package/dist/web/static/assets/TasksHubPage-03wsRRsJ.js.map +0 -1
  579. package/dist/web/static/assets/ViolationsPage-DSiLr-9O.js +0 -3
  580. package/dist/web/static/assets/ViolationsPage-DSiLr-9O.js.map +0 -1
  581. package/dist/web/static/assets/arco-Bhi3a6Qp.js +0 -14
  582. package/dist/web/static/assets/arco-Bhi3a6Qp.js.map +0 -1
  583. package/dist/web/static/assets/charts-BuHQWDbQ.js +0 -37
  584. package/dist/web/static/assets/charts-BuHQWDbQ.js.map +0 -1
  585. package/dist/web/static/assets/index-BIYnq1Dx.js +0 -4
  586. package/dist/web/static/assets/index-BIYnq1Dx.js.map +0 -1
  587. package/dist/web/static/assets/useTabsParam-k8qte_0C.js +0 -2
  588. package/dist/web/static/assets/useTabsParam-k8qte_0C.js.map +0 -1
  589. package/dist/web/static/assets/vendor-DWgdB1eY.js +0 -65
  590. package/dist/web/static/assets/vendor-DWgdB1eY.js.map +0 -1
  591. /package/dist/{skills/distill → core/utils}/claude-cli-resolver.d.ts +0 -0
@@ -24,12 +24,42 @@ export class SkillOperations {
24
24
  INSERT INTO skill_invocations
25
25
  (id, route_request_id, session_id, agent_id, skill_id, invocation_type,
26
26
  reason, workflow, phase, feature_slug, artifact_path,
27
- depth, success, error, timestamp)
28
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
27
+ depth, success, error, timestamp, recorded_at_inject, project_path)
28
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
29
29
  `);
30
30
  }
31
31
  writeSkillInvocation(row) {
32
- this.writeSkillInvocationStmt.run(row.id, row.route_request_id, row.session_id, row.agent_id, row.skill_id, row.invocation_type, row.reason, row.workflow, row.phase, row.feature_slug, row.artifact_path, row.depth, row.success, row.error, row.timestamp);
32
+ this.writeSkillInvocationStmt.run(row.id, row.route_request_id, row.session_id, row.agent_id, row.skill_id, row.invocation_type, row.reason, row.workflow, row.phase, row.feature_slug, row.artifact_path, row.depth, row.success, row.error, row.timestamp,
33
+ // audit #2: NULL unless the caller explicitly marks this an inject-time
34
+ // row (UserPromptSubmit auto-match). undefined → NULL.
35
+ row.recorded_at_inject ?? null,
36
+ // decision 39839e30 Part 2: project scope. undefined → NULL (legacy
37
+ // callers / old fixtures that don't pass it stay project-less).
38
+ row.project_path ?? null);
39
+ }
40
+ /**
41
+ * One-shot back-fill of skill_invocations.project_path from
42
+ * sessions.project_path (decision 39839e30 Part 2). Public test seam mirroring
43
+ * the boot-time migration (base.backfillSkillInvocationsProjectPathIfNeeded).
44
+ * Idempotent: only NULL rows whose session JOINs a sessions row with a
45
+ * non-NULL project_path are touched. Returns rows-affected.
46
+ */
47
+ backfillSkillInvocationProjectPath() {
48
+ const res = this.db.prepare(`
49
+ UPDATE skill_invocations
50
+ SET project_path = (
51
+ SELECT s.project_path FROM sessions s
52
+ WHERE s.session_id = skill_invocations.session_id
53
+ )
54
+ WHERE project_path IS NULL
55
+ AND session_id IS NOT NULL
56
+ AND EXISTS (
57
+ SELECT 1 FROM sessions s2
58
+ WHERE s2.session_id = skill_invocations.session_id
59
+ AND s2.project_path IS NOT NULL
60
+ )
61
+ `).run();
62
+ return res.changes;
33
63
  }
34
64
  querySkillInvocations(filter = {}) {
35
65
  const conditions = [];
@@ -50,6 +80,10 @@ export class SkillOperations {
50
80
  conditions.push('timestamp >= ?');
51
81
  params.push(filter.since);
52
82
  }
83
+ if (filter.projectPath) {
84
+ conditions.push('project_path = ?');
85
+ params.push(filter.projectPath);
86
+ }
53
87
  const where = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '';
54
88
  const limit = filter.limit ?? 100;
55
89
  const sql = `SELECT * FROM skill_invocations ${where} ORDER BY timestamp DESC LIMIT ?`;
@@ -68,9 +102,14 @@ export class SkillOperations {
68
102
  aggregateSkillInvocationsBySkill(filter) {
69
103
  const limit = filter.limit ?? 1000;
70
104
  const untilCond = filter.until !== undefined ? 'AND timestamp < ?' : '';
105
+ // decision 39839e30 Part 2: additive project filter — clause only present
106
+ // when a project is passed, so legacy callers behave逐字不变.
107
+ const projCond = filter.projectPath ? 'AND project_path = ?' : '';
71
108
  const params = [filter.since];
72
109
  if (filter.until !== undefined)
73
110
  params.push(filter.until);
111
+ if (filter.projectPath)
112
+ params.push(filter.projectPath);
74
113
  params.push(limit);
75
114
  const rows = this.db.prepare(`
76
115
  SELECT skill_id,
@@ -78,7 +117,7 @@ export class SkillOperations {
78
117
  SUM(CASE WHEN success = 1 THEN 1 ELSE 0 END) AS success,
79
118
  SUM(CASE WHEN success = 0 THEN 1 ELSE 0 END) AS failed
80
119
  FROM skill_invocations
81
- WHERE timestamp >= ? ${untilCond}
120
+ WHERE timestamp >= ? ${untilCond} ${projCond}
82
121
  GROUP BY skill_id
83
122
  ORDER BY total DESC
84
123
  LIMIT ?
@@ -90,6 +129,120 @@ export class SkillOperations {
90
129
  failed: r.failed ?? 0,
91
130
  }));
92
131
  }
132
+ /**
133
+ * audit #2 (decision f61b8a0c): per-skill split of "injected" vs "really
134
+ * invoked" rows in skill_invocations.
135
+ *
136
+ * - `injected` = rows stamped `recorded_at_inject = 1` (UserPromptSubmit
137
+ * auto-match wrote them at inject time; NOT proof the skill was followed).
138
+ * - `invoked` = rows with `recorded_at_inject IS NULL` (real-call rows:
139
+ * MCP skill_invoke / Skill tool, plus legacy rows predating the column).
140
+ *
141
+ * Web "skill effectiveness" surfaces must read `invoked`, not `injected`.
142
+ * Walks `idx_skill_invocations_timestamp`.
143
+ */
144
+ aggregateSkillInjectVsInvoke(filter) {
145
+ const limit = filter.limit ?? 1000;
146
+ const untilCond = filter.until !== undefined ? 'AND timestamp < ?' : '';
147
+ // decision 39839e30 Part 2: additive project filter (see aggregateSkillInvocationsBySkill).
148
+ const projCond = filter.projectPath ? 'AND project_path = ?' : '';
149
+ const params = [filter.since];
150
+ if (filter.until !== undefined)
151
+ params.push(filter.until);
152
+ if (filter.projectPath)
153
+ params.push(filter.projectPath);
154
+ params.push(limit);
155
+ const rows = this.db.prepare(`
156
+ SELECT skill_id,
157
+ COUNT(*) AS total,
158
+ SUM(CASE WHEN recorded_at_inject = 1 THEN 1 ELSE 0 END) AS injected,
159
+ SUM(CASE WHEN recorded_at_inject IS NULL THEN 1 ELSE 0 END) AS invoked,
160
+ SUM(CASE WHEN invocation_type = 'cli' AND recorded_at_inject IS NULL THEN 1 ELSE 0 END) AS genuine
161
+ FROM skill_invocations
162
+ WHERE timestamp >= ? ${untilCond} ${projCond}
163
+ GROUP BY skill_id
164
+ ORDER BY total DESC
165
+ LIMIT ?
166
+ `).all(...params);
167
+ return rows.map(r => ({
168
+ skill_id: r.skill_id,
169
+ injected: r.injected ?? 0,
170
+ invoked: r.invoked ?? 0,
171
+ genuine: r.genuine ?? 0,
172
+ total: r.total,
173
+ }));
174
+ }
175
+ /**
176
+ * decision 76be4e4a: authoritative "Skill 调用" headline count — total GENUINE
177
+ * agent invocations across all skills in the window. Genuine =
178
+ * `invocation_type = 'cli' AND recorded_at_inject IS NULL` (a deliberate
179
+ * `cf skill invoke` agent pull that is not an inject-time auto-write).
180
+ *
181
+ * This is the single口径 the Workplace KPI and the Skill page header both read
182
+ * so they agree. It excludes:
183
+ * - `dynamic` keyword-matcher rows (reason "Auto-matched by keyword matching")
184
+ * — historical auto-matches, NOT deliberate calls (the old `invoked`口径
185
+ * wrongly counted them, inflating to ~166).
186
+ * - injected rows (`recorded_at_inject = 1`).
187
+ * It is NOT events.tool_name `realCalls` (=2, the MCP/Skill-tool path the main
188
+ * thread rarely uses — a different, far smaller口径).
189
+ *
190
+ * Walks `idx_skill_invocations_project` when projectPath is set, else
191
+ * `idx_skill_invocations_timestamp`.
192
+ */
193
+ countGenuineSkillInvocations(filter) {
194
+ const conditions = [
195
+ `invocation_type = 'cli'`,
196
+ 'recorded_at_inject IS NULL',
197
+ 'timestamp >= ?',
198
+ ];
199
+ const params = [filter.since];
200
+ if (filter.until !== undefined) {
201
+ conditions.push('timestamp < ?');
202
+ params.push(filter.until);
203
+ }
204
+ // decision 39839e30 Part 2: additive project filter.
205
+ if (filter.projectPath) {
206
+ conditions.push('project_path = ?');
207
+ params.push(filter.projectPath);
208
+ }
209
+ const row = this.db.prepare(`SELECT COUNT(*) AS cnt FROM skill_invocations WHERE ${conditions.join(' AND ')}`).get(...params);
210
+ return row?.cnt ?? 0;
211
+ }
212
+ /**
213
+ * audit #2: count of REAL skill calls from the `events` table — the only
214
+ * ground truth for "a skill was actually invoked". Reads only `tool_name`
215
+ * (never the gzip `tool_input`/`tool_output`), matching the documented
216
+ * gzip-content landmine guard.
217
+ *
218
+ * `tool_name` matched:
219
+ * - 'Skill' (Claude Code native Skill tool)
220
+ * - 'mcp__claude-forge__skill_invoke' (forge MCP skill_invoke mirror)
221
+ *
222
+ * `since` / `until` are unix ms; events.timestamp is an ISO string, so we
223
+ * compare on the ISO form (same convention as other event aggregates).
224
+ */
225
+ countRealSkillCalls(filter) {
226
+ const sinceISO = new Date(filter.since).toISOString();
227
+ const conditions = [
228
+ `tool_name IN ('Skill', 'mcp__claude-forge__skill_invoke')`,
229
+ 'timestamp >= ?',
230
+ ];
231
+ const params = [sinceISO];
232
+ if (filter.until !== undefined) {
233
+ conditions.push('timestamp < ?');
234
+ params.push(new Date(filter.until).toISOString());
235
+ }
236
+ // decision 39839e30 Part 2: project filter on events.project_path so the
237
+ // headline "Skill 调用" KPI (which reads realCalls) actually changes per
238
+ // project. Additive — omit → all projects (legacy逐字不变).
239
+ if (filter.projectPath) {
240
+ conditions.push('project_path = ?');
241
+ params.push(filter.projectPath);
242
+ }
243
+ const row = this.db.prepare(`SELECT COUNT(*) AS cnt FROM events WHERE ${conditions.join(' AND ')}`).get(...params);
244
+ return row?.cnt ?? 0;
245
+ }
93
246
  /**
94
247
  * 按 route_request_id 聚合工作流进度。
95
248
  *
@@ -173,5 +326,198 @@ export class SkillOperations {
173
326
  const rows = this.db.prepare(`SELECT DISTINCT skill_id FROM skill_invocations WHERE session_id = ?`).all(session_id);
174
327
  return rows.map(r => r.skill_id);
175
328
  }
329
+ // ── Skill usefulness feedback (decision d24cd3a2 P0) ────────────────────────
330
+ //
331
+ // Agent POST-USE self-assessment. See base.ts runColumnMigrations + schema.sql
332
+ // for the two nullable columns. usefulness measures CONTENT actionability on
333
+ // THIS project's task; it is DISTINCT from the existing `success` column (which
334
+ // only means the invoke call didn't throw).
335
+ /**
336
+ * Stamp `usefulness` + `usefulness_note` onto the SINGLE most-recent un-rated
337
+ * skill_invocations row matching `session_id + skill_id` (usefulness IS NULL).
338
+ *
339
+ * Deterministic target rule: `ORDER BY timestamp DESC LIMIT 1` inside a
340
+ * subquery so we update exactly one row. Idempotent: only NULL rows are
341
+ * eligible, so re-running stamps the next-older un-rated pull (or affects 0
342
+ * once all are rated). Optional `sinceMs` guard avoids stamping a stale
343
+ * unrelated pull. Returns rows-affected (0 = nothing to stamp — caller treats
344
+ * that as a soft no-op, never an error).
345
+ */
346
+ writeSkillUsefulness(args) {
347
+ const conditions = [
348
+ 'session_id = ?',
349
+ 'skill_id = ?',
350
+ 'usefulness IS NULL',
351
+ ];
352
+ const params = [args.session_id, args.skill_id];
353
+ if (args.sinceMs !== undefined) {
354
+ conditions.push('timestamp >= ?');
355
+ params.push(args.sinceMs);
356
+ }
357
+ const where = conditions.join(' AND ');
358
+ // UPDATE the latest matching un-rated row only. SQLite supports the
359
+ // `WHERE id = (SELECT ... LIMIT 1)` form for a single-row targeted update.
360
+ const sql = `
361
+ UPDATE skill_invocations
362
+ SET usefulness = ?, usefulness_note = ?
363
+ WHERE id = (
364
+ SELECT id FROM skill_invocations
365
+ WHERE ${where}
366
+ ORDER BY timestamp DESC
367
+ LIMIT 1
368
+ )
369
+ `;
370
+ const info = this.db.prepare(sql).run(args.usefulness, args.note ?? null, ...params);
371
+ return info.changes;
372
+ }
373
+ /**
374
+ * Per-skill usefulness aggregation — the P1 refinement consumer's input.
375
+ *
376
+ * GROUP BY skill_id over rows that HAVE a usefulness rating
377
+ * (`usefulness IS NOT NULL`). `actionable_rate = helped / total_rated`
378
+ * (STRICT helped-only, per decision d24cd3a2 Q3). Un-rated pulls are reported
379
+ * separately as `pending` (NOT in the rate denominator). Sorted worst
380
+ * actionable_rate FIRST so the least-useful skills surface for refinement;
381
+ * ties broken by higher total_rated (more evidence first). Walks
382
+ * `idx_skill_invocations_timestamp`.
383
+ */
384
+ aggregateSkillUsefulness(filter = {}) {
385
+ const limit = filter.limit ?? 1000;
386
+ const conditions = [];
387
+ const params = [];
388
+ if (filter.since !== undefined) {
389
+ conditions.push('timestamp >= ?');
390
+ params.push(filter.since);
391
+ }
392
+ if (filter.until !== undefined) {
393
+ conditions.push('timestamp < ?');
394
+ params.push(filter.until);
395
+ }
396
+ // decision 39839e30 Part 2: additive project filter (see aggregateSkillInvocationsBySkill).
397
+ if (filter.projectPath) {
398
+ conditions.push('project_path = ?');
399
+ params.push(filter.projectPath);
400
+ }
401
+ const where = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '';
402
+ params.push(limit);
403
+ const rows = this.db.prepare(`
404
+ SELECT skill_id,
405
+ SUM(CASE WHEN usefulness = 'helped' THEN 1 ELSE 0 END) AS helped,
406
+ SUM(CASE WHEN usefulness = 'partial' THEN 1 ELSE 0 END) AS partial,
407
+ SUM(CASE WHEN usefulness = 'not-actionable' THEN 1 ELSE 0 END) AS not_actionable,
408
+ SUM(CASE WHEN usefulness IS NOT NULL THEN 1 ELSE 0 END) AS total_rated,
409
+ SUM(CASE WHEN usefulness IS NULL THEN 1 ELSE 0 END) AS pending
410
+ FROM skill_invocations
411
+ ${where}
412
+ GROUP BY skill_id
413
+ LIMIT ?
414
+ `).all(...params);
415
+ return rows
416
+ .map(r => {
417
+ const total_rated = r.total_rated ?? 0;
418
+ const helped = r.helped ?? 0;
419
+ // STRICT: helped-only over rated rows. Divide-by-zero → 0 when nothing
420
+ // is rated yet (all pulls still pending).
421
+ const actionable_rate = total_rated > 0 ? helped / total_rated : 0;
422
+ return {
423
+ skill_id: r.skill_id,
424
+ total_rated,
425
+ helped,
426
+ partial: r.partial ?? 0,
427
+ not_actionable: r.not_actionable ?? 0,
428
+ pending: r.pending ?? 0,
429
+ actionable_rate,
430
+ };
431
+ })
432
+ // Only surface skills that have at least one rating in the rate ranking;
433
+ // wholly-pending skills (total_rated=0) sort last so real signal is on top.
434
+ .sort((a, b) => {
435
+ if (a.total_rated === 0 && b.total_rated === 0)
436
+ return 0;
437
+ if (a.total_rated === 0)
438
+ return 1;
439
+ if (b.total_rated === 0)
440
+ return -1;
441
+ if (a.actionable_rate !== b.actionable_rate)
442
+ return a.actionable_rate - b.actionable_rate;
443
+ return b.total_rated - a.total_rated;
444
+ });
445
+ }
446
+ /**
447
+ * Per-(agent, skill) usefulness aggregation — the (agent,skill) pairing
448
+ * closed-loop metric input for Agent 体检 (decision 234f1ad4, Phase 1).
449
+ *
450
+ * Grouping key is the `reason` workflow PREFIX
451
+ * (`substr(reason,1,instr(reason,'/')-1)`) × `skill_id`, NOT `agent_id`:
452
+ * `skill_invocations.agent_id` is empirically all-NULL across the whole DB
453
+ * (the CLI `cf skill invoke` path never wrote it; only MCP did, and subagents
454
+ * have zero MCP — see spec increment P1-1 / Q6). The reason prefix is the
455
+ * proxy agent key that today carries real per-agent data
456
+ * (coder/verify/decision/safetynet/planner/harness).
457
+ *
458
+ * Only rows with a parseable `<x>/<y>` reason and `invocation_type='cli'` are
459
+ * counted; rows whose reason has no `/` are归入 the `<unknown>` bucket and not
460
+ * attributed to any real agent (per spec compat note). `timestamp` is INTEGER
461
+ * ms. `actionable_rate = helped / total_rated` (STRICT helped-only, d24cd3a2 Q3).
462
+ */
463
+ aggregateSkillUsefulnessByAgent(filter = {}) {
464
+ const limit = filter.limit ?? 2000;
465
+ const conditions = ["invocation_type = 'cli'", "reason LIKE '%/%'"];
466
+ const params = [];
467
+ if (filter.since !== undefined) {
468
+ conditions.push('timestamp >= ?');
469
+ params.push(filter.since);
470
+ }
471
+ if (filter.until !== undefined) {
472
+ conditions.push('timestamp < ?');
473
+ params.push(filter.until);
474
+ }
475
+ if (filter.projectPath) {
476
+ conditions.push('project_path = ?');
477
+ params.push(filter.projectPath);
478
+ }
479
+ const where = `WHERE ${conditions.join(' AND ')}`;
480
+ params.push(limit);
481
+ const rows = this.db.prepare(`
482
+ SELECT CASE WHEN instr(reason, '/') > 1
483
+ THEN substr(reason, 1, instr(reason, '/') - 1)
484
+ ELSE '<unknown>' END AS agent,
485
+ skill_id,
486
+ COUNT(*) AS pulls,
487
+ SUM(CASE WHEN usefulness = 'helped' THEN 1 ELSE 0 END) AS helped,
488
+ SUM(CASE WHEN usefulness = 'partial' THEN 1 ELSE 0 END) AS partial,
489
+ SUM(CASE WHEN usefulness = 'not-actionable' THEN 1 ELSE 0 END) AS not_actionable,
490
+ SUM(CASE WHEN usefulness IS NOT NULL THEN 1 ELSE 0 END) AS total_rated,
491
+ SUM(CASE WHEN usefulness IS NULL THEN 1 ELSE 0 END) AS pending
492
+ FROM skill_invocations
493
+ ${where}
494
+ GROUP BY agent, skill_id
495
+ LIMIT ?
496
+ `).all(...params);
497
+ return rows
498
+ .map(r => {
499
+ const total_rated = r.total_rated ?? 0;
500
+ const helped = r.helped ?? 0;
501
+ const actionable_rate = total_rated > 0 ? helped / total_rated : 0;
502
+ return {
503
+ agent: r.agent,
504
+ skill_id: r.skill_id,
505
+ pulls: r.pulls ?? 0,
506
+ helped,
507
+ partial: r.partial ?? 0,
508
+ not_actionable: r.not_actionable ?? 0,
509
+ total_rated,
510
+ pending: r.pending ?? 0,
511
+ actionable_rate,
512
+ };
513
+ })
514
+ .sort((a, b) => {
515
+ if (a.agent !== b.agent)
516
+ return a.agent.localeCompare(b.agent);
517
+ if (a.actionable_rate !== b.actionable_rate)
518
+ return a.actionable_rate - b.actionable_rate;
519
+ return b.pulls - a.pulls;
520
+ });
521
+ }
176
522
  }
177
523
  //# sourceMappingURL=skills.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../../src/core/storage/skills.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../../src/core/storage/skills.ts"],"names":[],"mappings":"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"}
@@ -30,25 +30,22 @@ import { KnowledgeOperations } from './knowledge.js';
30
30
  import type { ForgeConfigRow } from './forge-config.js';
31
31
  import { ToolInterceptsOperations } from './tool-intercepts.js';
32
32
  import type { ToolInterceptRecord, ToolInterceptRow, ToolInterceptOutcome } from './tool-intercepts.js';
33
- import { WorkflowRecommendationsOperations } from './workflow-recommendations.js';
34
- import type { WorkflowRecommendationRecord, WorkflowRecommendationRow, WorkflowRecommendationsFilter, WorkflowRecommendationOutcome, AgentBoardCardRow } from './workflow-recommendations.js';
35
33
  import { DecisionsOperations } from './decisions.js';
36
34
  import type { DecisionRecord, DecisionUpdate, DecisionsFilter, DecisionRow, DecisionOutcome, SpecRegisterRecord } from './decisions.js';
37
- import type { RuleViolationCount, InterceptObeyedRow, WorkflowAcceptanceRow, InterceptRuleAggregate, WorkflowRuleAggregate, SkillAggregate, SkillTopRow, SessionOutcomeRow, KbInjectionMetadataRow, InterceptDecisionCountsRow } from './feedback.js';
35
+ import type { RuleViolationCount, InterceptObeyedRow, InterceptRuleAggregate, SkillAggregate, SkillTopRow, SessionOutcomeRow, KbInjectionMetadataRow, InterceptDecisionCountsRow } from './feedback.js';
38
36
  import type { SkillInvocationRow } from './rows.js';
39
37
  import type { RoutingEventRecord, RoutingEventRow } from './routing.js';
40
38
  import type { SessionSummary, AgentBoardSessionRow } from './sessions.js';
41
39
  import type { Injection } from './injections.js';
42
- import type { TaskRecord, AgentBoardTaskRow, AgentBoardPromptRow } from './tasks.js';
40
+ import type { TaskRecord, TaskKbPullRow, AgentBoardTaskRow, AgentBoardPromptRow, AgentBoardPromptWindowAggregates } from './tasks.js';
43
41
  export type { EventRow, SessionRow, InjectionRow, TaskRow, SkillInvocationRow, } from './rows.js';
44
42
  export type { SessionSummary, AgentBoardSessionRow } from './sessions.js';
45
43
  export type { Injection } from './injections.js';
46
- export type { TaskRecord, TaskFilter, TaskPage, AgentBoardTaskRow, AgentBoardPromptRow } from './tasks.js';
44
+ export type { TaskRecord, TaskKbPullRow, TaskFilter, TaskPage, AgentBoardTaskRow, AgentBoardPromptRow, AgentBoardPromptWindowAggregates, AgentBoardOutcomeFilter } from './tasks.js';
47
45
  export type { RoutingEventRecord, RoutingEventRow } from './routing.js';
48
46
  export type { KbQueryLogEntry, KbStatsRow, KbBuildLogEntry, KbBuildLogRow, } from './knowledge.js';
49
47
  export type { ForgeConfigRow } from './forge-config.js';
50
48
  export type { ToolInterceptRecord, ToolInterceptRow, ToolInterceptDecision, ToolInterceptOutcome, } from './tool-intercepts.js';
51
- export type { WorkflowRecommendationRecord, WorkflowRecommendationRow, WorkflowRecommendationsFilter, WorkflowRecommendationOutcome, AgentBoardCardRow, } from './workflow-recommendations.js';
52
49
  export type { DecisionRecord, DecisionUpdate, DecisionsFilter, DecisionRow, DecisionStatus, DecisionKind, DecisionOutcome, SpecRegisterRecord, SpecLikeRow, } from './decisions.js';
53
50
  export { toSpecLikeRow, DECISION_OUTCOMES } from './decisions.js';
54
51
  export declare class SQLiteStorage extends EventEmitter {
@@ -63,7 +60,6 @@ export declare class SQLiteStorage extends EventEmitter {
63
60
  private knowledge;
64
61
  private forgeConfig;
65
62
  private toolIntercepts;
66
- private workflowRecs;
67
63
  private decisions;
68
64
  private feedback;
69
65
  constructor(dbPath: string);
@@ -74,6 +70,10 @@ export declare class SQLiteStorage extends EventEmitter {
74
70
  queryEvents(filter: Parameters<EventOperations['queryEvents']>[0]): ForgeEvent[];
75
71
  /** Point lookup of a single event by event_id (used by pipeline ?event_id). */
76
72
  getEventById(eventId: string): ForgeEvent | null;
73
+ /** Backfill ai_response (plain text, NOT gzip) for a violation window — spec 1446. */
74
+ updateEventAiResponse(eventId: string, text: string): void;
75
+ /** Inline-edit (PostToolUse Edit/Write/NotebookEdit) rows for a session in an ISO window — spec 1446. */
76
+ queryInlineEditEvents(opts: Parameters<EventOperations['queryInlineEditEvents']>[0]): ForgeEvent[];
77
77
  countEvents(filter?: Parameters<EventOperations['countEvents']>[0]): number;
78
78
  searchEvents(filter: Parameters<EventOperations['searchEvents']>[0]): ForgeEvent[];
79
79
  /**
@@ -88,6 +88,18 @@ export declare class SQLiteStorage extends EventEmitter {
88
88
  aggregateHookTypeBySession(session_id: string): ReturnType<EventOperations['aggregateHookTypeBySession']>;
89
89
  aggregateAgentTypeBySession(session_id: string): ReturnType<EventOperations['aggregateAgentTypeBySession']>;
90
90
  aggregateToolUsageBySession(session_id: string): ReturnType<EventOperations['aggregateToolUsageBySession']>;
91
+ aggregateAgentSpawns(opts: Parameters<EventOperations['aggregateAgentSpawns']>[0]): ReturnType<EventOperations['aggregateAgentSpawns']>;
92
+ /** decision c425f26f: cross-task workflow spawns grouped by decision_id. */
93
+ queryWorkflowSpawnsByDecisionId(decisionId: string): ReturnType<EventOperations['queryWorkflowSpawnsByDecisionId']>;
94
+ /** decision c425f26f: resolve a task's home decision_id (plaintext column, no gzip). */
95
+ queryTaskDecisionId(taskId: string): string | null;
96
+ /**
97
+ * decision c425f26f (user ruling #3): re-runnable backfill of the plaintext
98
+ * events.decision_id / subagent_type columns. Boot-time runs the gated variant
99
+ * automatically; this exposes the engine for `cf maintenance backfill-spawn-fields`.
100
+ * Returns the number of rows updated.
101
+ */
102
+ backfillEventsDecisionId(): number;
91
103
  countActiveDays(opts: Parameters<EventOperations['countActiveDays']>[0]): number;
92
104
  aggregateOverviewByRange(opts: Parameters<EventOperations['aggregateOverviewByRange']>[0]): ReturnType<EventOperations['aggregateOverviewByRange']>;
93
105
  queryDistinctProjects(opts: Parameters<EventOperations['queryDistinctProjects']>[0]): string[];
@@ -131,6 +143,26 @@ export declare class SQLiteStorage extends EventEmitter {
131
143
  countInjectionsBySessionByHandler(session_id: string, source_handler?: string): number;
132
144
  /** Phase 2d pipeline-view batch helper. See InjectionOperations.queryBySessions. */
133
145
  queryInjectionsBySessions(sessionIds: string[]): Injection[];
146
+ /**
147
+ * KB 采纳 telemetry(decision 148f7a0a)。
148
+ * See InjectionOperations.writeKbInjectionAdoption.
149
+ */
150
+ writeKbInjectionAdoption(session_id: string, adopted_at: number): number;
151
+ /** KB 采纳率读路径(decision 148f7a0a)。See InjectionOperations.countKbAdoption. */
152
+ countKbAdoption(sinceIso: string): {
153
+ total: number;
154
+ adopted: number;
155
+ };
156
+ /**
157
+ * LOOP HINT 采纳 telemetry(decision e7d13697, Option C)。
158
+ * See InjectionOperations.writeLoopHintAdoption.
159
+ */
160
+ writeLoopHintAdoption(session_id: string, adopted_at: number): number;
161
+ /** LOOP HINT 采纳率读路径(decision e7d13697)。See InjectionOperations.countLoopHintAdoption. */
162
+ countLoopHintAdoption(sinceIso: string): {
163
+ total: number;
164
+ adopted: number;
165
+ };
134
166
  writeTask(task: {
135
167
  id: string;
136
168
  session_id: string;
@@ -139,7 +171,20 @@ export declare class SQLiteStorage extends EventEmitter {
139
171
  is_noise?: boolean;
140
172
  /** spec b1480935 (2026-06-01): per-task classification. */
141
173
  task_kind?: import('./tasks.js').TaskKind;
174
+ /** decision f47c2c90 (二期B): self-FK to the originating user task (nullable). */
175
+ parent_task_id?: string | null;
142
176
  }): void;
177
+ /** decision f47c2c90 (二期B): idempotent parent link. See TaskOperations.setTaskParent. */
178
+ setTaskParent(taskId: string, parentTaskId: string): void;
179
+ /** decision f47c2c90 (二期B): triple-gate parent candidate lookup. See TaskOperations.getMostRecentUserTaskBefore. */
180
+ getMostRecentUserTaskBefore(opts: Parameters<TaskOperations['getMostRecentUserTaskBefore']>[0]): string | null;
181
+ /** decision f47c2c90 (二期B): parent-chain spawn aggregation. See TaskOperations.queryParentTaskChainSpawns. */
182
+ queryParentTaskChainSpawns(anchorTaskId: string): ReturnType<TaskOperations['queryParentTaskChainSpawns']>;
183
+ /**
184
+ * decision ed5c3e93 (per-turn human input): read plaintext UserPromptSubmit
185
+ * user_prompt rows for a set of tasks. See TaskOperations.queryUserPromptsByTaskIds.
186
+ */
187
+ queryUserPromptsByTaskIds(taskIds: string[]): ReturnType<TaskOperations['queryUserPromptsByTaskIds']>;
143
188
  updateTask(taskId: string, updates: Parameters<TaskOperations['updateTask']>[1]): void;
144
189
  linkEventToTask(taskId: string, eventId: string): void;
145
190
  /**
@@ -213,6 +258,8 @@ export declare class SQLiteStorage extends EventEmitter {
213
258
  resumeTask(taskId: string): void;
214
259
  queryInjectionsByTaskId(taskId: string): Injection[];
215
260
  querySkillInvocationsByTaskWindow(taskId: string, opts?: Parameters<TaskOperations['querySkillInvocationsByTaskWindow']>[1]): SkillInvocationRow[];
261
+ /** Agent 主动 pull 的 KB(任务窗内,按 project+时间窗+reason scope)。See TaskOperations.queryTaskKbPulls. */
262
+ queryTaskKbPulls(taskId: string, opts?: Parameters<TaskOperations['queryTaskKbPulls']>[1]): TaskKbPullRow[];
216
263
  /**
217
264
  * Task-centric agent board projection (v3). See TaskOperations.queryAgentBoardTasks.
218
265
  */
@@ -233,6 +280,13 @@ export declare class SQLiteStorage extends EventEmitter {
233
280
  * paginator's total when ?rows=prompt. See countAgentBoardPromptRows.
234
281
  */
235
282
  countAgentBoardPromptRows(opts: Parameters<TaskOperations['countAgentBoardPromptRows']>[0]): number;
283
+ /**
284
+ * Window-level distinct-task aggregates for the prompt-rows list view
285
+ * (2026-06-10 KPI 分页假象 fix). Same WHERE 口径 as countAgentBoardPromptRows;
286
+ * drives "总任务数 / 失败 / 平均时长" KPIs + outcome tab counts unbounded by
287
+ * the page LIMIT. See TaskOperations.queryAgentBoardPromptWindowAggregates.
288
+ */
289
+ queryAgentBoardPromptWindowAggregates(opts: Parameters<TaskOperations['queryAgentBoardPromptWindowAggregates']>[0]): AgentBoardPromptWindowAggregates;
236
290
  /**
237
291
  * v6 Batch 1 (spec 1750 § B1-3): trivial task counter for DaemonObserverBadge.
238
292
  * Counts `tasks WHERE is_noise=1 AND start_time >= sinceIso`.
@@ -257,17 +311,26 @@ export declare class SQLiteStorage extends EventEmitter {
257
311
  getRecentPendingRoutingEvent(sessionId: string): {
258
312
  id: number;
259
313
  } | null;
314
+ /** P3 (audit e888352d): re-label this session's still-pending routing rows as 'none' at Stop. */
315
+ markPendingRoutingEventsResolved(sessionId: string): number;
260
316
  getExperimentAssignment(sessionId: string, experimentId: string): string | null;
261
317
  setExperimentAssignment(sessionId: string, experimentId: string, groupId: string): void;
262
318
  queryExperimentStats(experimentId: string): ReturnType<RoutingOperations['queryExperimentStats']>;
263
319
  writeSkillInvocation(row: Omit<SkillInvocationRow, 'created_at'>): void;
320
+ backfillSkillInvocationProjectPath(): number;
264
321
  querySkillInvocations(filter?: Parameters<SkillOperations['querySkillInvocations']>[0]): SkillInvocationRow[];
265
322
  aggregateSkillInvocationsBySkill(filter: Parameters<SkillOperations['aggregateSkillInvocationsBySkill']>[0]): ReturnType<SkillOperations['aggregateSkillInvocationsBySkill']>;
323
+ aggregateSkillInjectVsInvoke(filter: Parameters<SkillOperations['aggregateSkillInjectVsInvoke']>[0]): ReturnType<SkillOperations['aggregateSkillInjectVsInvoke']>;
324
+ countRealSkillCalls(filter: Parameters<SkillOperations['countRealSkillCalls']>[0]): ReturnType<SkillOperations['countRealSkillCalls']>;
325
+ countGenuineSkillInvocations(filter: Parameters<SkillOperations['countGenuineSkillInvocations']>[0]): ReturnType<SkillOperations['countGenuineSkillInvocations']>;
266
326
  queryWorkflowProgress(filter?: Parameters<SkillOperations['queryWorkflowProgress']>[0]): ReturnType<SkillOperations['queryWorkflowProgress']>;
267
327
  countAllSkillInvocations(): number;
268
328
  countSkillInvocationsBySession(session_id: string): number;
269
329
  countDistinctSkillsSince(since_ms: number): number;
270
330
  queryDistinctSkillIdsBySession(session_id: string): string[];
331
+ writeSkillUsefulness(args: Parameters<SkillOperations['writeSkillUsefulness']>[0]): number;
332
+ aggregateSkillUsefulness(filter?: Parameters<SkillOperations['aggregateSkillUsefulness']>[0]): ReturnType<SkillOperations['aggregateSkillUsefulness']>;
333
+ aggregateSkillUsefulnessByAgent(filter?: Parameters<SkillOperations['aggregateSkillUsefulnessByAgent']>[0]): ReturnType<SkillOperations['aggregateSkillUsefulnessByAgent']>;
271
334
  cleanOldData(daysToKeep?: number): ReturnType<MaintenanceOperations['cleanOldData']>;
272
335
  runMaintenance(maxSizeMb: number): void;
273
336
  vacuum(): void;
@@ -277,7 +340,15 @@ export declare class SQLiteStorage extends EventEmitter {
277
340
  */
278
341
  incrementalVacuum(maxPages?: number): number;
279
342
  writeKbQueryLog(entry: Parameters<KnowledgeOperations['writeKbQueryLog']>[0]): void;
343
+ queryKbQueryLog(filter?: Parameters<KnowledgeOperations['queryKbQueryLog']>[0]): ReturnType<KnowledgeOperations['queryKbQueryLog']>;
344
+ writeKbUsefulness(args: Parameters<KnowledgeOperations['writeKbUsefulness']>[0]): number;
345
+ aggregateKbUsefulness(filter?: Parameters<KnowledgeOperations['aggregateKbUsefulness']>[0]): ReturnType<KnowledgeOperations['aggregateKbUsefulness']>;
346
+ aggregateKbUsefulnessByAgent(filter?: Parameters<KnowledgeOperations['aggregateKbUsefulnessByAgent']>[0]): ReturnType<KnowledgeOperations['aggregateKbUsefulnessByAgent']>;
280
347
  queryKbStats(projectPath: string): ReturnType<KnowledgeOperations['queryKbStats']>;
348
+ queryAgentKbPulls(filter?: Parameters<KnowledgeOperations['queryAgentKbPulls']>[0]): ReturnType<KnowledgeOperations['queryAgentKbPulls']>;
349
+ /** Genuine agent KB pull count for the「KB 调用」KPI (decision 64d37b1d). */
350
+ countAgentKbPulls(filter?: Parameters<KnowledgeOperations['countAgentKbPulls']>[0]): number;
351
+ queryKbCitedPages(filter?: Parameters<KnowledgeOperations['queryKbCitedPages']>[0]): ReturnType<KnowledgeOperations['queryKbCitedPages']>;
281
352
  writeKbBuildLog(entry: Parameters<KnowledgeOperations['writeKbBuildLog']>[0]): void;
282
353
  updateKbBuildLog(buildId: string, updates: Parameters<KnowledgeOperations['updateKbBuildLog']>[1]): void;
283
354
  queryLastKbBuild(projectPath: string): ReturnType<KnowledgeOperations['queryLastKbBuild']>;
@@ -301,19 +372,6 @@ export declare class SQLiteStorage extends EventEmitter {
301
372
  updateToolInterceptOutcome(id: number, outcome: ToolInterceptOutcome): void;
302
373
  /** Phase 2d pipeline-view batch helper. See ToolInterceptsOperations.queryBySessions. */
303
374
  queryToolInterceptsBySessions(sessionIds: string[]): ToolInterceptRow[];
304
- writeWorkflowRecommendation(record: WorkflowRecommendationRecord): number;
305
- queryWorkflowRecommendations(filter?: WorkflowRecommendationsFilter): WorkflowRecommendationRow[];
306
- updateWorkflowRecommendationOutcome(id: number, outcome: WorkflowRecommendationOutcome, outcome_at?: string): void;
307
- markPendingWorkflowRecommendationsIgnored(session_id: string, outcome_at?: string): number;
308
- markPendingWorkflowRecommendationsRejected(session_id: string, outcome_at?: string): number;
309
- countWorkflowRecommendationsBySession(session_id: string): number;
310
- /**
311
- * Kanban board projection — see WorkflowRecommendationsOperations docstring.
312
- * Returns one row per recommendation joined with session + spawn + KB inj.
313
- */
314
- queryAgentBoardCards(opts: Parameters<WorkflowRecommendationsOperations['queryAgentBoardCards']>[0]): AgentBoardCardRow[];
315
- /** Phase 2d pipeline-view batch helper. See WorkflowRecommendationsOperations.queryBySessions. */
316
- queryWorkflowRecommendationsBySessions(sessionIds: string[]): WorkflowRecommendationRow[];
317
375
  writeDecision(record: DecisionRecord): number;
318
376
  getDecision(id: string): DecisionRow | null;
319
377
  updateDecision(id: string, update: DecisionUpdate): void;
@@ -354,17 +412,15 @@ export declare class SQLiteStorage extends EventEmitter {
354
412
  listSpecsBySessionPending(session_id: string, limit?: number): DecisionRow[];
355
413
  querySpecsBySessions(sessionIds: string[]): DecisionRow[];
356
414
  expireOldSpecs(now_iso?: string): number;
357
- queryInterceptObeyedSummary(sinceIso: string): InterceptObeyedRow;
415
+ queryInterceptObeyedSummary(sinceIso: string, projectPath?: string): InterceptObeyedRow;
358
416
  queryInterceptDecisionCounts(sinceIso: string): InterceptDecisionCountsRow;
359
417
  queryTopInterceptRuleViolations(sinceIso: string, limit?: number): RuleViolationCount[];
360
418
  queryInterceptRuleAggregates(sinceIso: string): InterceptRuleAggregate[];
361
- queryWorkflowAcceptanceSummary(sinceIso: string): WorkflowAcceptanceRow;
362
- queryWorkflowRuleAggregates(sinceIso: string): WorkflowRuleAggregate[];
363
- countKbInjections(sinceIso: string): number;
419
+ countKbInjections(sinceIso: string, projectPath?: string): number;
364
420
  queryKbInjectionMetadata(sinceIso: string): KbInjectionMetadataRow[];
365
421
  queryTopSkillInvocations(sinceMillis: number, limit?: number): SkillTopRow[];
366
422
  querySkillAggregates(sinceMillis: number): SkillAggregate[];
367
- querySessionOutcomeDistribution(sinceIso: string): SessionOutcomeRow[];
423
+ querySessionOutcomeDistribution(sinceIso: string, projectPath?: string): SessionOutcomeRow[];
368
424
  close(): void;
369
425
  }
370
426
  //# sourceMappingURL=sqlite.d.ts.map