@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
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Shared source resolvers for Agent 体检 / drift (decision 234f1ad4, Phase 1).
3
+ *
4
+ * Resolves the agent-template source-of-truth directory and the set of known
5
+ * skill_ids, so both the web endpoint and `cf agent retro` build identical
6
+ * trigger-ref / drift inputs without duplicating resolution logic.
7
+ *
8
+ * READ-ONLY: only reads template/skill files; never mutates them.
9
+ */
10
+ import { dirname, join } from 'node:path';
11
+ import { fileURLToPath } from 'node:url';
12
+ import { SkillRegistry } from '../../skills/registry.js';
13
+ import { extractTriggerRefs } from './agent-drift.js';
14
+ /**
15
+ * Resolve the agent template source-of-truth directory.
16
+ * Compiled: dist/core/insights/*.js → dist/daemon/templates/agents
17
+ * Dev (vitest): src/core/insights/*.ts → src/daemon/templates/agents
18
+ */
19
+ export function resolveAgentTemplatesDir() {
20
+ return join(dirname(fileURLToPath(import.meta.url)), '..', '..', 'daemon', 'templates', 'agents');
21
+ }
22
+ /** All skill_ids that currently exist (built-in distilled + user skills). */
23
+ export function loadKnownSkillIds() {
24
+ try {
25
+ const registry = new SkillRegistry();
26
+ return new Set(registry.getAll().map((s) => s.id));
27
+ }
28
+ catch {
29
+ return new Set();
30
+ }
31
+ }
32
+ /** Scan the source-of-truth templates dir for trigger refs (convenience). */
33
+ export function loadTriggerRefs(templatesDir) {
34
+ return extractTriggerRefs(templatesDir ?? resolveAgentTemplatesDir());
35
+ }
36
+ //# sourceMappingURL=agent-evolution-sources.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-evolution-sources.js","sourceRoot":"","sources":["../../../src/core/insights/agent-evolution-sources.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAoB,MAAM,kBAAkB,CAAC;AAExE;;;;GAIG;AACH,MAAM,UAAU,wBAAwB;IACtC,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;AACpG,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,iBAAiB;IAC/B,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAI,aAAa,EAAE,CAAC;QACrC,OAAO,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACrD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,GAAG,EAAU,CAAC;IAC3B,CAAC;AACH,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,eAAe,CAAC,YAAqB;IACnD,OAAO,kBAAkB,CAAC,YAAY,IAAI,wBAAwB,EAAE,CAAC,CAAC;AACxE,CAAC"}
@@ -0,0 +1,142 @@
1
+ /**
2
+ * Agent 体检 — per-agent health aggregation (decision 234f1ad4, Phase 1).
3
+ *
4
+ * Pure read-side aggregator + suggestion rules. Combines:
5
+ * - delegation / success-rate / duration ← aggregateAgentSpawns (events,
6
+ * read-time Pre/Post pairing; success_rate口径标 INDIRECT,跨 session 边缘有误差)
7
+ * - skill usefulness by agent ← aggregateSkillUsefulnessByAgent
8
+ * (reason-prefix proxy key, NOT agent_id — agent_id empirically all-NULL)
9
+ * - KB usefulness by agent ← aggregateKbUsefulnessByAgent
10
+ * - (agent, skill) closed-loop status ← derived recommendation_health
11
+ * - main-thread violations ← tool_intercepts (by session; these
12
+ * are orchestration discipline, NOT agent template defects — shown separately)
13
+ *
14
+ * 不变量 (cross-Phase): this module is READ-ONLY. It NEVER mutates agent
15
+ * templates; it only produces health objects + readable suggestion strings.
16
+ * The daemon does not call this — only the web endpoint and `cf agent retro`.
17
+ */
18
+ import type { SQLiteStorage } from '../storage/sqlite.js';
19
+ /**
20
+ * Reason-prefix (proxy agent key from skill_invocations.reason) → agent template
21
+ * name (the `src/daemon/templates/agents/*.md` source-of-truth basename). The
22
+ * reason prefix is what agents hardcode in `--reason "coder/<phase>"`, but the
23
+ * trigger-table / template name differs for several agents.
24
+ */
25
+ export declare const REASON_PREFIX_TO_AGENT: Record<string, string>;
26
+ /** Map a reason prefix to its canonical agent template name (identity fallback). */
27
+ export declare function agentForReasonPrefix(prefix: string): string;
28
+ /**
29
+ * recommendation_health classification thresholds (decision 234f1ad4 Q7).
30
+ * `dead`: pulls >= DEAD_MIN_PULLS && actionable_rate < DEAD_ACTIONABLE_RATE
31
+ * (STRICT helped-only rate). The coder × distilled-executing-plans pair
32
+ * (70 pull / actionable≈1.5%) is the live `dead` sample.
33
+ */
34
+ export declare const DEAD_MIN_PULLS = 20;
35
+ export declare const DEAD_ACTIONABLE_RATE = 0.1;
36
+ /** `live`: enough pulls AND actionable_rate at/above this healthy floor. */
37
+ export declare const LIVE_ACTIONABLE_RATE = 0.5;
38
+ /** `unrated`: pulls >= threshold but rated-ratio below this (can't judge). */
39
+ export declare const UNRATED_MIN_PULLS = 20;
40
+ export declare const UNRATED_RATED_RATIO = 0.3;
41
+ /** Min total_rated before a (agent,skill) pair is allowed to产 a suggestion. */
42
+ export declare const SUGGESTION_MIN_RATED = 10;
43
+ /** A skill is "weak" for an agent when actionable_rate < this (with enough evidence). */
44
+ export declare const WEAK_ACTIONABLE_RATE = 0.25;
45
+ /** Min delegations before per-agent success-rate / drift signals are trusted. */
46
+ export declare const MIN_DELEGATIONS_FOR_SIGNAL = 3;
47
+ /**
48
+ * Muted (agent, skill) pairs — operator can silence noisy suggestions here.
49
+ * Format: `"<agent>::<skill_id>"`. Empty by default; spec R1 anti-noise.
50
+ */
51
+ export declare const MUTED_SUGGESTIONS: ReadonlySet<string>;
52
+ export type RecommendationHealth = 'live' | 'dead' | 'unrated' | 'unused';
53
+ export interface RecommendedSkillHealth {
54
+ skill_id: string;
55
+ pulls: number;
56
+ helped: number;
57
+ partial: number;
58
+ not_actionable: number;
59
+ total_rated: number;
60
+ pending: number;
61
+ actionable_rate: number;
62
+ recommendation_health: RecommendationHealth;
63
+ }
64
+ export interface WeakSkill {
65
+ skill_id: string;
66
+ actionable_rate: number;
67
+ total_rated: number;
68
+ pulls: number;
69
+ }
70
+ export interface AgentKbUsage {
71
+ pulls: number;
72
+ total_rated: number;
73
+ helped: number;
74
+ actionable_rate: number;
75
+ }
76
+ export type SuccessRateBasis = 'indirect' | 'insufficient_data';
77
+ export interface AgentHealth {
78
+ agent: string;
79
+ source: 'builtin' | 'project';
80
+ delegations: number;
81
+ success: number;
82
+ partial: number;
83
+ failed: number;
84
+ unrated: number;
85
+ success_rate: number | null;
86
+ success_rate_basis: SuccessRateBasis;
87
+ avg_duration_ms: number | null;
88
+ last_ts: number;
89
+ weak_skills: WeakSkill[];
90
+ recommended_skills: RecommendedSkillHealth[];
91
+ kb_usage: AgentKbUsage | null;
92
+ suggestions: string[];
93
+ }
94
+ export interface MainThreadViolations {
95
+ total: number;
96
+ by_rule: Array<{
97
+ rule_id: string;
98
+ count: number;
99
+ }>;
100
+ note: string;
101
+ }
102
+ export interface AgentHealthResult {
103
+ generated_at: string;
104
+ since: string;
105
+ until: string | null;
106
+ agents: AgentHealth[];
107
+ main_thread_violations: MainThreadViolations;
108
+ }
109
+ declare const DAY_MS: number;
110
+ /**
111
+ * Classify a (agent, skill) pairing into a closed-loop health bucket.
112
+ * `triggerReferenced` = whether the agent template trigger table references the
113
+ * skill (used to distinguish `unused`: referenced but zero pulls).
114
+ */
115
+ export declare function classifyRecommendationHealth(pair: {
116
+ pulls: number;
117
+ total_rated: number;
118
+ actionable_rate: number;
119
+ }, triggerReferenced: boolean): RecommendationHealth;
120
+ export interface ComputeAgentHealthOptions {
121
+ /** Window start (epoch ms). */
122
+ since: number;
123
+ /** Window end (epoch ms); omit → open-ended (now). */
124
+ until?: number;
125
+ /** Optional project scope for the usefulness aggregations. */
126
+ projectPath?: string;
127
+ /**
128
+ * Trigger-table references per agent (agent template name → set of skill_ids
129
+ * it recommends). Used to mark `unused` pairs + surface zero-pull recommended
130
+ * skills. Optional — when omitted, `unused` detection is skipped.
131
+ */
132
+ triggerRefs?: Map<string, Set<string>>;
133
+ /** Whether an agent name is a Claude-Code builtin (for the `source` tag). */
134
+ isBuiltin?: (agent: string) => boolean;
135
+ }
136
+ /**
137
+ * Compute per-agent health objects + suggestions over the window.
138
+ * Pure: takes a storage handle, returns plain data (no side effects).
139
+ */
140
+ export declare function computeAgentHealth(storage: SQLiteStorage, opts: ComputeAgentHealthOptions): AgentHealthResult;
141
+ export { DAY_MS };
142
+ //# sourceMappingURL=agent-health.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-health.d.ts","sourceRoot":"","sources":["../../../src/core/insights/agent-health.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,296 @@
1
+ /**
2
+ * Agent 体检 — per-agent health aggregation (decision 234f1ad4, Phase 1).
3
+ *
4
+ * Pure read-side aggregator + suggestion rules. Combines:
5
+ * - delegation / success-rate / duration ← aggregateAgentSpawns (events,
6
+ * read-time Pre/Post pairing; success_rate口径标 INDIRECT,跨 session 边缘有误差)
7
+ * - skill usefulness by agent ← aggregateSkillUsefulnessByAgent
8
+ * (reason-prefix proxy key, NOT agent_id — agent_id empirically all-NULL)
9
+ * - KB usefulness by agent ← aggregateKbUsefulnessByAgent
10
+ * - (agent, skill) closed-loop status ← derived recommendation_health
11
+ * - main-thread violations ← tool_intercepts (by session; these
12
+ * are orchestration discipline, NOT agent template defects — shown separately)
13
+ *
14
+ * 不变量 (cross-Phase): this module is READ-ONLY. It NEVER mutates agent
15
+ * templates; it only produces health objects + readable suggestion strings.
16
+ * The daemon does not call this — only the web endpoint and `cf agent retro`.
17
+ */
18
+ // ── Tunable thresholds + rules (top-of-file constants, per spec) ────────────
19
+ /**
20
+ * Reason-prefix (proxy agent key from skill_invocations.reason) → agent template
21
+ * name (the `src/daemon/templates/agents/*.md` source-of-truth basename). The
22
+ * reason prefix is what agents hardcode in `--reason "coder/<phase>"`, but the
23
+ * trigger-table / template name differs for several agents.
24
+ */
25
+ export const REASON_PREFIX_TO_AGENT = {
26
+ coder: 'coder',
27
+ verify: 'verify-agent',
28
+ decision: 'decision-maker',
29
+ safetynet: 'safety-net-implementer',
30
+ planner: 'planner',
31
+ harness: 'harness-debug-full',
32
+ };
33
+ /** Map a reason prefix to its canonical agent template name (identity fallback). */
34
+ export function agentForReasonPrefix(prefix) {
35
+ return REASON_PREFIX_TO_AGENT[prefix] ?? prefix;
36
+ }
37
+ /**
38
+ * recommendation_health classification thresholds (decision 234f1ad4 Q7).
39
+ * `dead`: pulls >= DEAD_MIN_PULLS && actionable_rate < DEAD_ACTIONABLE_RATE
40
+ * (STRICT helped-only rate). The coder × distilled-executing-plans pair
41
+ * (70 pull / actionable≈1.5%) is the live `dead` sample.
42
+ */
43
+ export const DEAD_MIN_PULLS = 20;
44
+ export const DEAD_ACTIONABLE_RATE = 0.1; // < 10%
45
+ /** `live`: enough pulls AND actionable_rate at/above this healthy floor. */
46
+ export const LIVE_ACTIONABLE_RATE = 0.5; // >= 50%
47
+ /** `unrated`: pulls >= threshold but rated-ratio below this (can't judge). */
48
+ export const UNRATED_MIN_PULLS = DEAD_MIN_PULLS;
49
+ export const UNRATED_RATED_RATIO = 0.3; // < 30% of pulls rated → unrated
50
+ /** Min total_rated before a (agent,skill) pair is allowed to产 a suggestion. */
51
+ export const SUGGESTION_MIN_RATED = 10;
52
+ /** A skill is "weak" for an agent when actionable_rate < this (with enough evidence). */
53
+ export const WEAK_ACTIONABLE_RATE = 0.25;
54
+ /** Min delegations before per-agent success-rate / drift signals are trusted. */
55
+ export const MIN_DELEGATIONS_FOR_SIGNAL = 3;
56
+ /**
57
+ * Muted (agent, skill) pairs — operator can silence noisy suggestions here.
58
+ * Format: `"<agent>::<skill_id>"`. Empty by default; spec R1 anti-noise.
59
+ */
60
+ export const MUTED_SUGGESTIONS = new Set();
61
+ const DAY_MS = 24 * 60 * 60 * 1000;
62
+ /**
63
+ * Classify a (agent, skill) pairing into a closed-loop health bucket.
64
+ * `triggerReferenced` = whether the agent template trigger table references the
65
+ * skill (used to distinguish `unused`: referenced but zero pulls).
66
+ */
67
+ export function classifyRecommendationHealth(pair, triggerReferenced) {
68
+ if (triggerReferenced && pair.pulls === 0)
69
+ return 'unused';
70
+ // `dead` is STRICTLY gated on pulls >= DEAD_MIN_PULLS (decision 234f1ad4 Q7):
71
+ // a low-pull pair with 0% actionable is just under-sampled, NOT a dead推荐.
72
+ if (pair.pulls >= DEAD_MIN_PULLS && pair.actionable_rate < DEAD_ACTIONABLE_RATE)
73
+ return 'dead';
74
+ const ratedRatio = pair.pulls > 0 ? pair.total_rated / pair.pulls : 0;
75
+ if (pair.pulls >= UNRATED_MIN_PULLS && ratedRatio < UNRATED_RATED_RATIO)
76
+ return 'unrated';
77
+ if (pair.pulls >= DEAD_MIN_PULLS && pair.actionable_rate >= LIVE_ACTIONABLE_RATE)
78
+ return 'live';
79
+ // Below the dead/live pull threshold: classify as live only when it clears the
80
+ // healthy floor with enough rated evidence; otherwise unrated (under-sampled).
81
+ if (pair.total_rated >= SUGGESTION_MIN_RATED && pair.actionable_rate >= LIVE_ACTIONABLE_RATE)
82
+ return 'live';
83
+ return 'unrated';
84
+ }
85
+ /**
86
+ * Compute per-agent health objects + suggestions over the window.
87
+ * Pure: takes a storage handle, returns plain data (no side effects).
88
+ */
89
+ export function computeAgentHealth(storage, opts) {
90
+ const sinceIso = new Date(opts.since).toISOString();
91
+ const untilIso = opts.until !== undefined ? new Date(opts.until).toISOString() : undefined;
92
+ const spawns = storage.aggregateAgentSpawns({
93
+ since: sinceIso,
94
+ until: untilIso,
95
+ recentLimit: 8,
96
+ // decision dd79010a: scope delegation/success/duration to the project too
97
+ // (skill/kb usefulness below were already project-scoped via opts.projectPath).
98
+ projectPath: opts.projectPath,
99
+ });
100
+ const skillByAgent = storage.aggregateSkillUsefulnessByAgent({
101
+ since: opts.since,
102
+ until: opts.until,
103
+ projectPath: opts.projectPath,
104
+ });
105
+ const kbByAgent = storage.aggregateKbUsefulnessByAgent({
106
+ since: opts.since,
107
+ until: opts.until,
108
+ project_path: opts.projectPath,
109
+ });
110
+ // Bug-fix (insights project filter parity, 2026-06-15): when a SPECIFIC
111
+ // project is requested, the triggerRefs-driven `unused` synthesis below MUST
112
+ // be suppressed. `triggerRefs` is a global agent-template ⇄ skill metadata map
113
+ // (project-independent), so injecting its zero-pull `unused` pairs — and
114
+ // unioning its agent names into `agentNames` (see further down) — would
115
+ // manufacture agents that have NO project-scoped activity. That made
116
+ // /api/insights/agent-health?project=<bogus> return 1 agent (verify-agent,
117
+ // delegations=0, one `unused` skill) while /agent-stats?project=<bogus>
118
+ // correctly returned 0. Strict equality on the project-scoped aggregations
119
+ // (events / skill / kb usefulness, all `project_path = ?`) already excludes
120
+ // NULL/other-project rows; the only remaining leak was this global template
121
+ // synthesis. So: only honour triggerRefs (unused detection + name union) in
122
+ // the all-projects view (no project filter). agent-stats has no triggerRefs
123
+ // path at all, which is why it never leaked — this brings the two to parity.
124
+ const projectScoped = opts.projectPath !== undefined && opts.projectPath !== '';
125
+ const effectiveTriggerRefs = projectScoped ? undefined : opts.triggerRefs;
126
+ // Index usefulness by canonical agent name.
127
+ const skillsByAgentName = new Map();
128
+ for (const row of skillByAgent) {
129
+ if (row.agent === '<unknown>')
130
+ continue;
131
+ const agentName = agentForReasonPrefix(row.agent);
132
+ const refs = effectiveTriggerRefs?.get(agentName);
133
+ const triggerReferenced = refs ? refs.has(row.skill_id) : false;
134
+ const rec = {
135
+ skill_id: row.skill_id,
136
+ pulls: row.pulls,
137
+ helped: row.helped,
138
+ partial: row.partial,
139
+ not_actionable: row.not_actionable,
140
+ total_rated: row.total_rated,
141
+ pending: row.pending,
142
+ actionable_rate: row.actionable_rate,
143
+ recommendation_health: classifyRecommendationHealth(row, triggerReferenced),
144
+ };
145
+ const arr = skillsByAgentName.get(agentName) ?? [];
146
+ arr.push(rec);
147
+ skillsByAgentName.set(agentName, arr);
148
+ }
149
+ // Add `unused` pairs: trigger-referenced skills with zero pulls in window.
150
+ // Suppressed under a specific project scope (see projectScoped note above).
151
+ if (effectiveTriggerRefs) {
152
+ for (const [agentName, refSkills] of effectiveTriggerRefs) {
153
+ const existing = skillsByAgentName.get(agentName) ?? [];
154
+ const seen = new Set(existing.map((s) => s.skill_id));
155
+ for (const skillId of refSkills) {
156
+ if (seen.has(skillId))
157
+ continue;
158
+ existing.push({
159
+ skill_id: skillId,
160
+ pulls: 0,
161
+ helped: 0,
162
+ partial: 0,
163
+ not_actionable: 0,
164
+ total_rated: 0,
165
+ pending: 0,
166
+ actionable_rate: 0,
167
+ recommendation_health: 'unused',
168
+ });
169
+ }
170
+ skillsByAgentName.set(agentName, existing);
171
+ }
172
+ }
173
+ const kbByAgentName = new Map();
174
+ for (const row of kbByAgent) {
175
+ if (row.agent === '<unknown>')
176
+ continue;
177
+ const agentName = agentForReasonPrefix(row.agent);
178
+ kbByAgentName.set(agentName, {
179
+ pulls: row.pulls,
180
+ total_rated: row.total_rated,
181
+ helped: row.helped,
182
+ actionable_rate: row.actionable_rate,
183
+ });
184
+ }
185
+ // Union of agent names from spawns + usefulness + trigger refs.
186
+ const agentNames = new Set();
187
+ for (const s of spawns)
188
+ agentNames.add(s.agent);
189
+ for (const k of skillsByAgentName.keys())
190
+ agentNames.add(k);
191
+ for (const k of kbByAgentName.keys())
192
+ agentNames.add(k);
193
+ if (effectiveTriggerRefs)
194
+ for (const k of effectiveTriggerRefs.keys())
195
+ agentNames.add(k);
196
+ const spawnByName = new Map(spawns.map((s) => [s.agent, s]));
197
+ const isBuiltin = opts.isBuiltin ?? (() => false);
198
+ const agents = [];
199
+ for (const name of agentNames) {
200
+ const spawn = spawnByName.get(name);
201
+ const delegations = spawn?.delegations ?? 0;
202
+ const success = spawn?.success ?? 0;
203
+ const partial = spawn?.partial ?? 0;
204
+ const failed = spawn?.failed ?? 0;
205
+ const unrated = spawn?.unrated ?? 0;
206
+ const rated = success + partial + failed;
207
+ const hasSignal = delegations >= MIN_DELEGATIONS_FOR_SIGNAL && rated > 0;
208
+ const success_rate = hasSignal ? Math.round((success / rated) * 1000) / 1000 : null;
209
+ const success_rate_basis = hasSignal ? 'indirect' : 'insufficient_data';
210
+ const recommended = (skillsByAgentName.get(name) ?? []).sort((a, b) => a.actionable_rate - b.actionable_rate || b.pulls - a.pulls);
211
+ const weak_skills = recommended
212
+ .filter((r) => r.total_rated >= SUGGESTION_MIN_RATED && r.actionable_rate < WEAK_ACTIONABLE_RATE)
213
+ .map((r) => ({
214
+ skill_id: r.skill_id,
215
+ actionable_rate: r.actionable_rate,
216
+ total_rated: r.total_rated,
217
+ pulls: r.pulls,
218
+ }));
219
+ const suggestions = buildSuggestions(name, recommended, weak_skills);
220
+ agents.push({
221
+ agent: name,
222
+ source: isBuiltin(name) ? 'builtin' : 'project',
223
+ delegations,
224
+ success,
225
+ partial,
226
+ failed,
227
+ unrated,
228
+ success_rate,
229
+ success_rate_basis,
230
+ avg_duration_ms: spawn?.avg_duration_ms ?? null,
231
+ last_ts: spawn?.last_ts ?? 0,
232
+ weak_skills,
233
+ recommended_skills: recommended,
234
+ kb_usage: kbByAgentName.get(name) ?? null,
235
+ suggestions,
236
+ });
237
+ }
238
+ agents.sort((a, b) => b.delegations - a.delegations || a.agent.localeCompare(b.agent));
239
+ return {
240
+ generated_at: new Date().toISOString(),
241
+ since: sinceIso,
242
+ until: untilIso ?? null,
243
+ agents,
244
+ main_thread_violations: computeMainThreadViolations(storage, sinceIso, untilIso),
245
+ };
246
+ }
247
+ /**
248
+ * Build readable improvement suggestions for an agent (decision 234f1ad4).
249
+ * High-threshold (SUGGESTION_MIN_RATED) + mutable mute list to avoid noise (R1).
250
+ */
251
+ function buildSuggestions(agent, recommended, weakSkills) {
252
+ const out = [];
253
+ for (const w of weakSkills) {
254
+ if (MUTED_SUGGESTIONS.has(`${agent}::${w.skill_id}`))
255
+ continue;
256
+ const rec = recommended.find((r) => r.skill_id === w.skill_id);
257
+ const ratePct = (w.actionable_rate * 100).toFixed(1);
258
+ if (rec && rec.recommendation_health === 'dead') {
259
+ out.push(`${agent} 推荐 ${w.skill_id}:${w.pulls} pull / ${rec.helped} helped / ${rec.partial} partial(actionable_rate ${ratePct}%,样本 ${w.total_rated}≥阈值)→ 死推荐,建议换 skill 或精简该 pull 步措辞。`);
260
+ }
261
+ else {
262
+ out.push(`${agent} 推荐 ${w.skill_id}:actionable_rate ${ratePct}%(样本 ${w.total_rated}≥阈值)→ 弱推荐,建议复核该 pull 步。`);
263
+ }
264
+ }
265
+ return out;
266
+ }
267
+ /**
268
+ * Aggregate main-thread (orchestration discipline) violations from
269
+ * tool_intercepts in window. These are NOT agent template defects — surfaced
270
+ * separately with an explicit note (decision实测: 违规 != agent 缺陷).
271
+ */
272
+ function computeMainThreadViolations(storage, sinceIso, untilIso) {
273
+ const note = '主线程编排纪律(edit/write-multi-file-hard 等),非 agent 模板缺陷——与 agent 自身信号分开展示。';
274
+ try {
275
+ // tool_intercepts.timestamp is ISO TEXT (NOT INTEGER ms) — compare ISO直接.
276
+ const db = storage.db;
277
+ const conditions = ['decision = ?', 'timestamp >= ?'];
278
+ const params = ['deny', sinceIso];
279
+ if (untilIso !== undefined) {
280
+ conditions.push('timestamp < ?');
281
+ params.push(untilIso);
282
+ }
283
+ const rows = db
284
+ .prepare(`SELECT rule_id, COUNT(*) AS count FROM tool_intercepts
285
+ WHERE ${conditions.join(' AND ')}
286
+ GROUP BY rule_id ORDER BY count DESC`)
287
+ .all(...params);
288
+ const total = rows.reduce((s, r) => s + r.count, 0);
289
+ return { total, by_rule: rows, note };
290
+ }
291
+ catch {
292
+ return { total: 0, by_rule: [], note };
293
+ }
294
+ }
295
+ export { DAY_MS };
296
+ //# sourceMappingURL=agent-health.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-health.js","sourceRoot":"","sources":["../../../src/core/insights/agent-health.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAIH,+EAA+E;AAE/E;;;;;GAKG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAA2B;IAC5D,KAAK,EAAE,OAAO;IACd,MAAM,EAAE,cAAc;IACtB,QAAQ,EAAE,gBAAgB;IAC1B,SAAS,EAAE,wBAAwB;IACnC,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,oBAAoB;CAC9B,CAAC;AAEF,oFAAoF;AACpF,MAAM,UAAU,oBAAoB,CAAC,MAAc;IACjD,OAAO,sBAAsB,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC;AAClD,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAAC;AACjC,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,CAAC,CAAC,QAAQ;AACjD,4EAA4E;AAC5E,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,CAAC,CAAC,SAAS;AAClD,8EAA8E;AAC9E,MAAM,CAAC,MAAM,iBAAiB,GAAG,cAAc,CAAC;AAChD,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,CAAC,CAAC,iCAAiC;AAEzE,+EAA+E;AAC/E,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,CAAC;AACvC,yFAAyF;AACzF,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,CAAC;AAEzC,iFAAiF;AACjF,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC;AAE5C;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAwB,IAAI,GAAG,EAAU,CAAC;AAgExE,MAAM,MAAM,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAEnC;;;;GAIG;AACH,MAAM,UAAU,4BAA4B,CAC1C,IAAqE,EACrE,iBAA0B;IAE1B,IAAI,iBAAiB,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAC;IAC3D,8EAA8E;IAC9E,0EAA0E;IAC1E,IAAI,IAAI,CAAC,KAAK,IAAI,cAAc,IAAI,IAAI,CAAC,eAAe,GAAG,oBAAoB;QAAE,OAAO,MAAM,CAAC;IAC/F,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACtE,IAAI,IAAI,CAAC,KAAK,IAAI,iBAAiB,IAAI,UAAU,GAAG,mBAAmB;QAAE,OAAO,SAAS,CAAC;IAC1F,IAAI,IAAI,CAAC,KAAK,IAAI,cAAc,IAAI,IAAI,CAAC,eAAe,IAAI,oBAAoB;QAAE,OAAO,MAAM,CAAC;IAChG,+EAA+E;IAC/E,+EAA+E;IAC/E,IAAI,IAAI,CAAC,WAAW,IAAI,oBAAoB,IAAI,IAAI,CAAC,eAAe,IAAI,oBAAoB;QAAE,OAAO,MAAM,CAAC;IAC5G,OAAO,SAAS,CAAC;AACnB,CAAC;AAmBD;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAChC,OAAsB,EACtB,IAA+B;IAE/B,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;IACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAE3F,MAAM,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC;QAC1C,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE,QAAQ;QACf,WAAW,EAAE,CAAC;QACd,0EAA0E;QAC1E,gFAAgF;QAChF,WAAW,EAAE,IAAI,CAAC,WAAW;KAC9B,CAAC,CAAC;IACH,MAAM,YAAY,GAAG,OAAO,CAAC,+BAA+B,CAAC;QAC3D,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,WAAW,EAAE,IAAI,CAAC,WAAW;KAC9B,CAAC,CAAC;IACH,MAAM,SAAS,GAAG,OAAO,CAAC,4BAA4B,CAAC;QACrD,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,YAAY,EAAE,IAAI,CAAC,WAAW;KAC/B,CAAC,CAAC;IAEH,wEAAwE;IACxE,6EAA6E;IAC7E,+EAA+E;IAC/E,yEAAyE;IACzE,wEAAwE;IACxE,qEAAqE;IACrE,2EAA2E;IAC3E,wEAAwE;IACxE,2EAA2E;IAC3E,4EAA4E;IAC5E,4EAA4E;IAC5E,4EAA4E;IAC5E,4EAA4E;IAC5E,6EAA6E;IAC7E,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,KAAK,SAAS,IAAI,IAAI,CAAC,WAAW,KAAK,EAAE,CAAC;IAChF,MAAM,oBAAoB,GAAG,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC;IAE1E,4CAA4C;IAC5C,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAoC,CAAC;IACtE,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;QAC/B,IAAI,GAAG,CAAC,KAAK,KAAK,WAAW;YAAE,SAAS;QACxC,MAAM,SAAS,GAAG,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAClD,MAAM,IAAI,GAAG,oBAAoB,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;QAClD,MAAM,iBAAiB,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAChE,MAAM,GAAG,GAA2B;YAClC,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,cAAc,EAAE,GAAG,CAAC,cAAc;YAClC,WAAW,EAAE,GAAG,CAAC,WAAW;YAC5B,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,eAAe,EAAE,GAAG,CAAC,eAAe;YACpC,qBAAqB,EAAE,4BAA4B,CAAC,GAAG,EAAE,iBAAiB,CAAC;SAC5E,CAAC;QACF,MAAM,GAAG,GAAG,iBAAiB,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QACnD,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACd,iBAAiB,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IACxC,CAAC;IAED,2EAA2E;IAC3E,4EAA4E;IAC5E,IAAI,oBAAoB,EAAE,CAAC;QACzB,KAAK,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,IAAI,oBAAoB,EAAE,CAAC;YAC1D,MAAM,QAAQ,GAAG,iBAAiB,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;YACxD,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;YACtD,KAAK,MAAM,OAAO,IAAI,SAAS,EAAE,CAAC;gBAChC,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;oBAAE,SAAS;gBAChC,QAAQ,CAAC,IAAI,CAAC;oBACZ,QAAQ,EAAE,OAAO;oBACjB,KAAK,EAAE,CAAC;oBACR,MAAM,EAAE,CAAC;oBACT,OAAO,EAAE,CAAC;oBACV,cAAc,EAAE,CAAC;oBACjB,WAAW,EAAE,CAAC;oBACd,OAAO,EAAE,CAAC;oBACV,eAAe,EAAE,CAAC;oBAClB,qBAAqB,EAAE,QAAQ;iBAChC,CAAC,CAAC;YACL,CAAC;YACD,iBAAiB,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAED,MAAM,aAAa,GAAG,IAAI,GAAG,EAAwB,CAAC;IACtD,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;QAC5B,IAAI,GAAG,CAAC,KAAK,KAAK,WAAW;YAAE,SAAS;QACxC,MAAM,SAAS,GAAG,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAClD,aAAa,CAAC,GAAG,CAAC,SAAS,EAAE;YAC3B,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,WAAW,EAAE,GAAG,CAAC,WAAW;YAC5B,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,eAAe,EAAE,GAAG,CAAC,eAAe;SACrC,CAAC,CAAC;IACL,CAAC;IAED,gEAAgE;IAChE,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IACrC,KAAK,MAAM,CAAC,IAAI,MAAM;QAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAChD,KAAK,MAAM,CAAC,IAAI,iBAAiB,CAAC,IAAI,EAAE;QAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC5D,KAAK,MAAM,CAAC,IAAI,aAAa,CAAC,IAAI,EAAE;QAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACxD,IAAI,oBAAoB;QAAE,KAAK,MAAM,CAAC,IAAI,oBAAoB,CAAC,IAAI,EAAE;YAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAEzF,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;IAElD,MAAM,MAAM,GAAkB,EAAE,CAAC;IACjC,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,WAAW,GAAG,KAAK,EAAE,WAAW,IAAI,CAAC,CAAC;QAC5C,MAAM,OAAO,GAAG,KAAK,EAAE,OAAO,IAAI,CAAC,CAAC;QACpC,MAAM,OAAO,GAAG,KAAK,EAAE,OAAO,IAAI,CAAC,CAAC;QACpC,MAAM,MAAM,GAAG,KAAK,EAAE,MAAM,IAAI,CAAC,CAAC;QAClC,MAAM,OAAO,GAAG,KAAK,EAAE,OAAO,IAAI,CAAC,CAAC;QACpC,MAAM,KAAK,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,CAAC;QACzC,MAAM,SAAS,GAAG,WAAW,IAAI,0BAA0B,IAAI,KAAK,GAAG,CAAC,CAAC;QACzE,MAAM,YAAY,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QACpF,MAAM,kBAAkB,GAAqB,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,mBAAmB,CAAC;QAE1F,MAAM,WAAW,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAC1D,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,GAAG,CAAC,CAAC,eAAe,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CACrE,CAAC;QACF,MAAM,WAAW,GAAgB,WAAW;aACzC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,IAAI,oBAAoB,IAAI,CAAC,CAAC,eAAe,GAAG,oBAAoB,CAAC;aAChG,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACX,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,eAAe,EAAE,CAAC,CAAC,eAAe;YAClC,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,KAAK,EAAE,CAAC,CAAC,KAAK;SACf,CAAC,CAAC,CAAC;QAEN,MAAM,WAAW,GAAG,gBAAgB,CAAC,IAAI,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;QAErE,MAAM,CAAC,IAAI,CAAC;YACV,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;YAC/C,WAAW;YACX,OAAO;YACP,OAAO;YACP,MAAM;YACN,OAAO;YACP,YAAY;YACZ,kBAAkB;YAClB,eAAe,EAAE,KAAK,EAAE,eAAe,IAAI,IAAI;YAC/C,OAAO,EAAE,KAAK,EAAE,OAAO,IAAI,CAAC;YAC5B,WAAW;YACX,kBAAkB,EAAE,WAAW;YAC/B,QAAQ,EAAE,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI;YACzC,WAAW;SACZ,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IAEvF,OAAO;QACL,YAAY,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACtC,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE,QAAQ,IAAI,IAAI;QACvB,MAAM;QACN,sBAAsB,EAAE,2BAA2B,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC;KACjF,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAS,gBAAgB,CACvB,KAAa,EACb,WAAqC,EACrC,UAAuB;IAEvB,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,IAAI,iBAAiB,CAAC,GAAG,CAAC,GAAG,KAAK,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC;YAAE,SAAS;QAC/D,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC/D,MAAM,OAAO,GAAG,CAAC,CAAC,CAAC,eAAe,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACrD,IAAI,GAAG,IAAI,GAAG,CAAC,qBAAqB,KAAK,MAAM,EAAE,CAAC;YAChD,GAAG,CAAC,IAAI,CACN,GAAG,KAAK,OAAO,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,KAAK,WAAW,GAAG,CAAC,MAAM,aAAa,GAAG,CAAC,OAAO,4BAA4B,OAAO,QAAQ,CAAC,CAAC,WAAW,oCAAoC,CAC9K,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,IAAI,CACN,GAAG,KAAK,OAAO,CAAC,CAAC,QAAQ,oBAAoB,OAAO,QAAQ,CAAC,CAAC,WAAW,yBAAyB,CACnG,CAAC;QACJ,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;GAIG;AACH,SAAS,2BAA2B,CAClC,OAAsB,EACtB,QAAgB,EAChB,QAA4B;IAE5B,MAAM,IAAI,GAAG,uEAAuE,CAAC;IACrF,IAAI,CAAC;QACH,0EAA0E;QAC1E,MAAM,EAAE,GAAI,OAAgE,CAAC,EAAE,CAAC;QAChF,MAAM,UAAU,GAAG,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC;QACtD,MAAM,MAAM,GAAc,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC7C,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YACjC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxB,CAAC;QACD,MAAM,IAAI,GAAG,EAAE;aACZ,OAAO,CACN;iBACS,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC;8CACK,CACvC;aACA,GAAG,CAAC,GAAG,MAAM,CAA8C,CAAC;QAC/D,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACpD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;IACzC,CAAC;AACH,CAAC;AAED,OAAO,EAAE,MAAM,EAAE,CAAC"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * agent-patch-apply.ts — pure-JS unified-diff applier for agent-template
3
+ * adoption (decision 568a8c53, user Open-Q1).
4
+ *
5
+ * Why NOT `git apply`: the daemon runs under launchd with cwd=`/` (no working
6
+ * tree), so `git apply` fails there (same landmine documented in
7
+ * skills-distill.ts:559). The web adopt path needs a working tree-INDEPENDENT
8
+ * application that resolves the patch against the in-memory template text.
9
+ *
10
+ * Scope: this is a deliberately small, strict context-matching applier — NOT a
11
+ * full GNU patch / git-apply re-implementation. It handles the unified-diff
12
+ * shape the `agent-retro-distiller` emits:
13
+ * - one or more `@@ ... @@` hunks
14
+ * - context lines (leading space), additions (`+`), removals (`-`)
15
+ * - optional `--- a/...` / `+++ b/...` file headers (ignored)
16
+ *
17
+ * It is ATOMIC: if any hunk fails to match its context against the current text
18
+ * it throws `PatchApplyError` and returns NOTHING (no partial write). Callers
19
+ * map the throw to HTTP 422. Pure: no IO.
20
+ */
21
+ export declare class PatchApplyError extends Error {
22
+ /** Index (1-based) of the hunk that failed, when known. */
23
+ readonly hunkIndex: number | null;
24
+ constructor(message: string, hunkIndex?: number | null);
25
+ }
26
+ /**
27
+ * Apply a unified-diff `patch` to `source` text, returning the new text.
28
+ *
29
+ * Atomic + strict: every hunk's context (+removed) side must match exactly once
30
+ * in the current text, else throw (no partial application). The trailing newline
31
+ * convention of `source` is preserved.
32
+ *
33
+ * Pure: no IO, no template writes.
34
+ */
35
+ export declare function applyUnifiedDiff(source: string, patch: string): string;
36
+ /**
37
+ * Mechanically set the `version:` line inside the leading YAML frontmatter to
38
+ * `targetVersion`. The anchor-guard forbids the distiller from touching the
39
+ * version line; adoption bumps it here, deterministically. Returns the new text.
40
+ *
41
+ * Throws if no frontmatter `version:` line is found (the template invariant
42
+ * requires one). Pure.
43
+ */
44
+ export declare function setFrontmatterVersion(template: string, targetVersion: number): string;
45
+ //# sourceMappingURL=agent-patch-apply.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-patch-apply.d.ts","sourceRoot":"","sources":["../../../src/core/insights/agent-patch-apply.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,qBAAa,eAAgB,SAAQ,KAAK;IACxC,2DAA2D;IAC3D,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;gBACtB,OAAO,EAAE,MAAM,EAAE,SAAS,GAAE,MAAM,GAAG,IAAW;CAK7D;AAuGD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAmBtE;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CAQrF"}