@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
@@ -1 +1 @@
1
- {"version":3,"file":"event-fields.js","sourceRoot":"","sources":["../../src/core/event-fields.ts"],"names":[],"mappings":"AAYA,MAAM,UAAU,UAAU,CAAC,CAAa;IACtC,MAAM,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,OAAO,CAAC;IAChC,OAAO,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,CAAa;IACvC,MAAM,EAAE,GAAG,CAAC,CAAC,UAAU,EAAE,SAAS,IAAI,CAAC,CAAC,UAAU,EAAE,aAAa,CAAC;IAClE,OAAO,OAAO,EAAE,KAAK,QAAQ,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,CAAa;IACzC,IAAI,OAAO,CAAC,CAAC,WAAW,KAAK,QAAQ;QAAE,OAAO,CAAC,CAAC,WAAW,CAAC;IAC5D,MAAM,QAAQ,GAAG,CAAC,CAAC,UAAU,EAAE,WAAW,CAAC;IAC3C,OAAO,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,CAAa;IAC3C,MAAM,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,aAAa,CAAC;IACtC,OAAO,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC/C,CAAC"}
1
+ {"version":3,"file":"event-fields.js","sourceRoot":"","sources":["../../src/core/event-fields.ts"],"names":[],"mappings":"AAYA,MAAM,UAAU,UAAU,CAAC,CAAa;IACtC,MAAM,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,OAAO,CAAC;IAChC,OAAO,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,CAAa;IACvC,MAAM,EAAE,GAAG,CAAC,CAAC,UAAU,EAAE,SAAS,IAAI,CAAC,CAAC,UAAU,EAAE,aAAa,CAAC;IAClE,OAAO,OAAO,EAAE,KAAK,QAAQ,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,CAAa;IACzC,IAAI,OAAO,CAAC,CAAC,WAAW,KAAK,QAAQ;QAAE,OAAO,CAAC,CAAC,WAAW,CAAC;IAC5D,MAAM,QAAQ,GAAG,CAAC,CAAC,UAAU,EAAE,WAAW,CAAC;IAC3C,OAAO,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,CAAa;IAC3C,MAAM,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,aAAa,CAAC;IACtC,OAAO,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC/C,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,gDAAgD,CAAC;AAErF;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,kBAAkB,CAChC,QAAmC,EACnC,SAAkB;IAElB,IAAI,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QAChD,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;IAClD,CAAC;IACD,IAAI,CAAC,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QAC5E,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;IAClD,CAAC;IACD,MAAM,EAAE,GAAG,SAAoC,CAAC;IAEhD,MAAM,YAAY,GAAG,OAAO,EAAE,CAAC,aAAa,KAAK,QAAQ,IAAI,EAAE,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC;QACtF,CAAC,CAAC,EAAE,CAAC,aAAa;QAClB,CAAC,CAAC,IAAI,CAAC;IAET,IAAI,UAAU,GAAkB,IAAI,CAAC;IACrC,MAAM,MAAM,GAAG,OAAO,EAAE,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;IAChE,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;QAC7C,IAAI,CAAC;YAAE,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IACzC,CAAC;IAED,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC;AACtC,CAAC"}
@@ -23,13 +23,24 @@ export declare const GOVERNANCE_MARKER_END = "<!-- cf:governance:end -->";
23
23
  */
24
24
  export declare function defaultGlobalClaudeMdPath(): string;
25
25
  /**
26
- * The condensed, self-contained DECISION HINT protocol contract. Distilled
27
- * from the project CLAUDE.md "DECISION HINT 协议契约" section — kept short but
28
- * complete enough that a Claude in any project knows to spawn decision-maker.
26
+ * The condensed DECISION HINT protocol contract.
27
+ *
28
+ * Authority ruling (decision ed98c8e8, 2026-06-10): the project CLAUDE.md
29
+ * "DECISION HINT 协议契约" section is the SINGLE authoritative full text.
30
+ * This global body is a short pointer-style digest — core directives only,
31
+ * everything else (codegraph/grep 分工、并行细则、例外清单) lives in the
32
+ * project file. This kills the ~950-token triple-injection duplication
33
+ * (global block + project block + hint template all carrying the full text).
34
+ *
35
+ * Also carries the spec-before-change discipline (decision 393481d1): a
36
+ * cross-project user mandate that previously lived only as a hand-written
37
+ * block OUTSIDE the markers on one machine — now folded into the generator
38
+ * so every install gets it via inject-global (same path as decision def0adcb
39
+ * took for the cd/output-redirection Bash convention).
29
40
  *
30
41
  * Excludes the marker lines; `buildGovernanceBlock` wraps it.
31
42
  */
32
- export declare const GOVERNANCE_PROTOCOL_BODY = "## claude-forge \u51B3\u7B56\u6CBB\u7406\u534F\u8BAE\uFF08\u5168\u94FE\u8DEF\u59D4\u6258 \u00B7 \u5168\u5C40\u6CE8\u5165\uFF09\n\n> \u672C\u5757\u7531 `cf governance inject-global` \u81EA\u52A8\u5199\u5165/\u66F4\u65B0\uFF1B\u79FB\u9664\uFF1A`--remove`\u3002\n\n**\u6838\u5FC3\uFF1A\u4E3B\u7EBF\u7A0B\u662F\u7EAF\u7F16\u6392\u8005\u2014\u2014\u53EA spawn agent\u3001\u4F20\u9012\u7ED3\u679C\u3001\u7B49\u7528\u6237\u6279\u51C6\u3001\u56DE\u586B outcome\uFF1B\n\u81EA\u5DF1\u4E0D grep/find \u67E5\u4EE3\u7801\u3001\u4E0D Edit/Write \u5B9E\u65BD\u3002** \u6536\u5230\u7528\u6237\u7684\u4EFB\u4F55\u8BF7\u6C42 / \u6307\u4EE4\uFF1A\n\n1. **\u51B3\u7B56\uFF08\u7B2C\u4E00\u52A8\u4F5C\uFF09**\uFF1A\u5FC5\u987B\u5148 spawn `decision-maker`\uFF08Task subagent_type='decision-maker'\uFF0C\n prompt \u5934\u5E26 `<!-- decision-id: XXXX -->`\uFF08\u82E5\u6709\uFF09\uFF09\u3002\u5728\u5B83\u8FD4\u56DE\u524D\u4E0D\u56DE\u7B54\u6B63\u6587\u3001\u4E0D\u52A8\u624B\u3002\n \u5B83 triage\uFF1A\u7410\u788E\u79D2\u653E\u8FC7 / \u503C\u5F97\u51FA\u65B9\u6848\uFF08\u9009\u9879\u00B7\u63A8\u8350\u00B7\u98CE\u9669\uFF09\u3002\n2. **\u641C\u7D22 / \u67E5\u4EE3\u7801**\uFF1A\u4EFB\u4F55 grep / find / git diff / \u8DE8\u6587\u4EF6\u67E5\u627E\uFF08\u5355\u6587\u4EF6\u5DF2\u77E5\u8DEF\u5F84\u7684 Read \u9664\u5916\uFF09\n \u2192 spawn `Explore` \u6216 `doc-reviewer`\uFF1B\u4E3B\u7EBF\u7A0B\u4E0D\u81EA\u5DF1\u67E5\u3002\n3. **\u5B9E\u65BD**\uFF1A\u7528\u6237\u6279\u51C6\u540E\uFF0C\u5B9E\u8D28\u6539\u52A8\uFF08Edit/Write / \u591A\u6587\u4EF6 / \u65B0\u529F\u80FD / \u91CD\u6784 / bugfix\uFF09\n \u2192 spawn `coder` / `refactor-specialist` / `hybrid-feature-with-safety` \u7B49\uFF1B\u4E3B\u7EBF\u7A0B\u4E0D\u81EA\u5DF1\u52A8\u624B\u3002\n4. **\u9A8C\u8BC1**\uFF1A\u5B9E\u65BD\u540E spawn `verify-agent` \u9A8C\u8BC1\u3002\n5. **\u5E76\u884C\u4F18\u5148\uFF08\u8981\u6548\u7387\uFF09**\uFF1A\u5DE5\u4F5C\u53EF\u62C6\u5206 / \u76F8\u4E92\u72EC\u7ACB\u65F6\uFF0C\u5728\u4E00\u6761\u6D88\u606F\u91CC batch spawn \u591A\u4E2A agent\n \u5E76\u53D1\u8DD1\u2014\u2014\u4E0D\u6015\u6210\u672C\uFF0C\u4F18\u5148\u6548\u7387\uFF0C\u522B\u4E32\u884C\u5E72\u7B49\u3002\n6. **\u4F8B\u5916\uFF08\u65E0\u9700\u8D70\u4E0A\u8FF0\uFF09**\uFF1A\u7EAF\u786E\u8BA4\uFF08\"\u597D\u7684 / \u8C22\u8C22 / \u7EE7\u7EED\"\uFF09\u3001\u5143\u4EFB\u52A1\uFF08commit / build / restart daemon\uFF09\u3001\n \u5355\u6587\u4EF6\u5DF2\u77E5\u8DEF\u5F84\u7684 Read\u3002\u82E5\u9879\u76EE\u6CA1\u6709\u5BF9\u5E94 agent\uFF0C\u7528\u53EF\u7528\u7684\uFF1B\u81F3\u5C11\u51B3\u7B56\u8D70 decision-maker\u3002\n7. bypass\uFF1Aprompt \u672B\u5C3E\u52A0 `skip decision` \u8DF3\u8FC7\u672C\u534F\u8BAE\u3002\n\n> \u8BDA\u5B9E\u8FB9\u754C\uFF1A\u8FD9\u662F**\u5F3A\u6307\u4EE4\u3001\u975E\u673A\u68B0\u9501**\u3002Claude Code \u73B0\u6709 hook \u65E0\u6CD5\u771F\u6B63\u5F3A\u5236\u5DE5\u5177\u8C03\u7528\n> \uFF08\u80FD\u62E6\u5DE5\u5177\u7684 deny \u5B9E\u6D4B\u5931\u6548\u3001\u5DF2\u5220\uFF09\u3002\u672C\u534F\u8BAE\u63D0\u9AD8\u9075\u5B88\u7387\uFF0C\u4E0D\u505A 100% \u4FDD\u8BC1\u3002";
43
+ export declare const GOVERNANCE_PROTOCOL_BODY = "## claude-forge \u51B3\u7B56\u6CBB\u7406\u534F\u8BAE\uFF08\u5168\u5C40\u6CE8\u5165 \u00B7 \u538B\u7F29\u7248\uFF09\n\n> \u672C\u5757\u7531 `cf governance inject-global` \u81EA\u52A8\u5199\u5165/\u66F4\u65B0\uFF1B\u79FB\u9664\uFF1A`--remove`\u3002\n> \u5B8C\u6574\u534F\u8BAE\uFF08codegraph/grep \u5206\u5DE5\u3001\u5E76\u884C\u7EC6\u5219\u3001\u4F8B\u5916\u6E05\u5355\uFF09\u89C1\u5404\u9879\u76EE CLAUDE.md \u7684\u300CDECISION HINT \u534F\u8BAE\u5951\u7EA6\u300D\u8282\u3002\n\n**\u4E3B\u7EBF\u7A0B\u662F\u7EAF\u7F16\u6392\u8005**\u2014\u2014\u53EA spawn agent\u3001\u4F20\u9012\u7ED3\u679C\u3001\u7B49\u7528\u6237\u6279\u51C6\u3001\u56DE\u586B outcome\uFF1B\u4E0D\u81EA\u5DF1 grep/find \u67E5\u4EE3\u7801\u3001\u4E0D Edit/Write \u5B9E\u65BD\u3002\n1. \u51B3\u7B56\uFF08\u7B2C\u4E00\u52A8\u4F5C\uFF09\uFF1A\u5148 spawn `decision-maker`\uFF08prompt \u5934\u5E26 `<!-- decision-id: XXXX -->`\uFF0C\u82E5\u6709\uFF09\uFF0C\u5B83\u8FD4\u56DE\u524D\u4E0D\u56DE\u7B54\u6B63\u6587\u3001\u4E0D\u52A8\u624B\u3002\n2. \u641C\u7D22/\u67E5\u4EE3\u7801 \u2192 spawn `Explore` / `doc-reviewer`\uFF1B\u5B9E\u65BD\uFF08\u7528\u6237\u6279\u51C6\u540E\uFF09\u2192 spawn `coder` \u7B49\u5B9E\u65BD agent\uFF1B\u5B9E\u65BD\u540E \u2192 spawn `verify-agent`\u3002\n3. \u53EF\u62C6\u5206\u7684\u72EC\u7ACB\u5DE5\u4F5C\u5728\u4E00\u6761\u6D88\u606F\u91CC batch spawn \u5E76\u884C\u8DD1\uFF1Bbypass\uFF1Aprompt \u672B\u5C3E\u52A0 `skip decision`\u3002\n\n> \u8BDA\u5B9E\u8FB9\u754C\uFF1A\u5F3A\u6307\u4EE4\u3001\u975E\u673A\u68B0\u9501\u2014\u2014\u63D0\u9AD8\u9075\u5B88\u7387\uFF0C\u4E0D\u505A 100% \u4FDD\u8BC1\u3002\n\n## Bash \u547D\u4EE4\u7EA6\u5B9A\uFF08\u51CF\u5C11\u6388\u6743\u5F39\u7A97\uFF09\n\n\u8DD1 Bash \u65F6**\u4E0D\u8981**\u5199\u300C`cd <\u8DEF\u5F84> && cmd > file`\u300D\u8FD9\u79CD\u300C\u590D\u5408\u547D\u4EE4 + cd + \u8F93\u51FA\u91CD\u5B9A\u5411\u300D\n\u7EC4\u5408\u2014\u2014\u5B83\u89E6\u53D1 Claude Code \u7684 path-resolution-bypass \u5B89\u5168\u68C0\u67E5\uFF08`Compound command\ncontains cd with output redirection - manual approval required`\uFF09\uFF0C\u8BE5\u68C0\u67E5**\u65E0\u6CD5**\u7528\n`permissions.allow` \u653E\u884C\uFF0C\u53EA\u80FD\u4ECE\u547D\u4EE4\u5199\u6CD5\u89C4\u907F\uFF1A\n\n- \u274C `cd /some/path && cmd > file`\uFF08\u89E6\u53D1\u5F3A\u5236\u4EBA\u5DE5\u6279\u51C6\uFF09\n- \u2705 \u7528\u7EDD\u5BF9\u8DEF\u5F84\uFF1A`cmd > /some/path/file`\uFF0C\u76EE\u6807\u8DEF\u5F84\u5199\u5168\n- \u2705 \u5DE5\u4F5C\u76EE\u5F55\u672C\u6765\u5C31\u6301\u4E45\u5728\u9879\u76EE\u6839\uFF0C**\u591A\u6570\u547D\u4EE4\u6839\u672C\u4E0D\u9700\u8981 `cd` \u524D\u7F00**\u2014\u2014\u76F4\u63A5\u8DD1\n- \u2705 \u5B9E\u5728\u8981\u6362\u76EE\u5F55\uFF0C\u5206\u4E24\u6761\u72EC\u7ACB\u547D\u4EE4\uFF0C\u6216\u4E0D\u5E26 `>` \u91CD\u5B9A\u5411\n\n> \u8FD9\u80FD\u6D88\u9664\u8DE8\u9879\u76EE\u53CD\u590D\u51FA\u73B0\u7684 `cd` \u6388\u6743\u5F39\u7A97\uFF0C\u4E14\u4E0D\u727A\u7272\u5B89\u5168\uFF08\u65E0\u9700\u5F00 bypassPermissions\uFF09\u3002\n> \u8FD9\u662F\u5F3A\u7EA6\u5B9A\u3001\u975E\u786C\u9501\u2014\u2014\u63D0\u9AD8\u9075\u5B88\u7387\uFF0C\u4E0D\u505A 100% \u4FDD\u8BC1\u3002\n\n## \u901A\u7528\u5DE5\u7A0B\u7EAA\u5F8B\uFF1A\u4EE3\u7801\u6539\u52A8\u524D\u5148\u5199 spec\uFF08\u6240\u6709\u9879\u76EE \u00B7 \u7528\u6237\u5F3A\u5236\uFF09\n\n\u4EFB\u4F55**\u6D89\u53CA\u4EE3\u7801\u6539\u52A8**\u7684\u4EFB\u52A1\uFF08bugfix / \u6837\u5F0F / \u5355\u70B9 / \u91CD\u6784 / \u65B0\u529F\u80FD\uFF09\u5B9E\u65BD\u524D**\u5FC5\u987B**\u5148\u5199\u4E00\u4EFD spec\n\u7ECF\u7528\u6237\u6279\u51C6\uFF0C\u518D spawn \u5B9E\u65BD agent\uFF1B\u9002\u7528**\u6240\u6709\u9879\u76EE**\u3002\n- \u6D41\u7A0B\uFF1Aspawn `planner`\uFF08\u6216\u9879\u76EE\u7EA6\u5B9A spec agent\uFF09\u5199 spec \u5230 `docs/design/` \u2192 \u7528\u6237\u6279\u51C6 \u2192 \u624D spawn `coder` \u5B9E\u65BD \u2192 \u5B9E\u65BD\u540E `verify-agent`\u3002\n- \u4E8B\u540E changelog / \u5B9E\u65BD\u8BB0\u5F55**\u4E0D\u80FD**\u66FF\u4EE3\u300C\u5B9E\u65BD\u524D\u7684 spec\u300D\uFF1B**\u4E0D\u5F97**\u4EE5\u300C\u5C0F / trivial / \u5DF2\u8BCA\u65AD\u6E05\u695A / \u53EA\u6539\u4E00\u884C\u300D\u4E3A\u7531\u8DF3\u8FC7\u3002\n- \u4F8B\u5916\uFF08\u4E0D\u9700 spec\uFF09\uFF1A\u7EAF\u67E5\u8BE2 / \u8BCA\u65AD / \u5143\u4EFB\u52A1\uFF08commit\u3001build\u3001restart\u3001\u6539\u7248\u672C\u53F7\u3001\u6539\u6587\u6863/\u6CE8\u91CA\uFF09\u3002\n\n> \u5F3A\u6307\u4EE4\u3001\u975E\u673A\u68B0\u9501\u2014\u2014\u63D0\u9AD8\u9075\u5B88\u7387\uFF0C\u4E0D\u505A 100% \u4FDD\u8BC1\u3002\u8FD9\u6761\u7531\u4E3B\u7EBF\u7A0B\u81EA\u5F8B\u4FDD\u8BC1\u3002";
33
44
  /** Wrap the protocol body in idempotent markers. */
34
45
  export declare function buildGovernanceBlock(body?: string): string;
35
46
  export interface InjectResult {
@@ -42,6 +53,25 @@ export interface InjectResult {
42
53
  }
43
54
  /** True when the file content already contains a governance marker block. */
44
55
  export declare function hasGovernanceBlock(content: string): boolean;
56
+ /**
57
+ * Strip legacy forge-resume residue from the GLOBAL CLAUDE.md content
58
+ * (decision ed98c8e8, 2026-06-10).
59
+ *
60
+ * The resume engine historically wrote "上次工作续接" blocks into
61
+ * `~/.claude/CLAUDE.md`; that target was later retired (resume now goes to
62
+ * the per-project CLAUDE.md only), leaving stale blocks behind that get
63
+ * re-injected into every session of every project. This removes all known
64
+ * forms:
65
+ * 1. UUID envelope: `<!-- forge:resume-begin:<uuid> -->…<!-- forge:resume-end:<uuid> -->`
66
+ * 2. Legacy markers: `<!-- forge:resume -->…<!-- forge:end-resume -->`
67
+ * (both delegated to the shared `stripForgeResumeBlocks` util)
68
+ * 3. Bare fenced residue: optional `## 上次工作续接` heading +
69
+ * ```forge-resume-body``` fence + trailing `_生成时间: …_` line.
70
+ *
71
+ * Called by `injectGlobalGovernance` on every run, so the one-time cleanup
72
+ * self-heals even if stale content reappears.
73
+ */
74
+ export declare function stripLegacyResumeBlocks(content: string): string;
45
75
  /**
46
76
  * Idempotently inject (or update) the governance block into `targetPath`.
47
77
  *
@@ -1 +1 @@
1
- {"version":3,"file":"global-inject.d.ts","sourceRoot":"","sources":["../../../src/core/governance/global-inject.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAMH,eAAO,MAAM,uBAAuB,iCAAiC,CAAC;AACtE,eAAO,MAAM,qBAAqB,+BAA+B,CAAC;AAElE;;;GAGG;AACH,wBAAgB,yBAAyB,IAAI,MAAM,CAElD;AAED;;;;;;GAMG;AACH,eAAO,MAAM,wBAAwB,++FAsBO,CAAC;AAE7C,oDAAoD;AACpD,wBAAgB,oBAAoB,CAAC,IAAI,GAAE,MAAiC,GAAG,MAAM,CAEpF;AAED,MAAM,WAAW,YAAY;IAC3B,sJAAsJ;IACtJ,MAAM,EAAE,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;IAClE,4BAA4B;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,2FAA2F;IAC3F,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAWD,6EAA6E;AAC7E,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE3D;AAQD;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CACpC,UAAU,GAAE,MAAoC,EAChD,IAAI,GAAE,MAAiC,GACtC,YAAY,CAsBd;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CACzC,UAAU,GAAE,MAAoC,GAC/C,YAAY,CAcd"}
1
+ {"version":3,"file":"global-inject.d.ts","sourceRoot":"","sources":["../../../src/core/governance/global-inject.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAOH,eAAO,MAAM,uBAAuB,iCAAiC,CAAC;AACtE,eAAO,MAAM,qBAAqB,+BAA+B,CAAC;AAElE;;;GAGG;AACH,wBAAgB,yBAAyB,IAAI,MAAM,CAElD;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,wBAAwB,48IAmCI,CAAC;AAE1C,oDAAoD;AACpD,wBAAgB,oBAAoB,CAAC,IAAI,GAAE,MAAiC,GAAG,MAAM,CAEpF;AAED,MAAM,WAAW,YAAY;IAC3B,sJAAsJ;IACtJ,MAAM,EAAE,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;IAClE,4BAA4B;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,2FAA2F;IAC3F,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAWD,6EAA6E;AAC7E,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE3D;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAY/D;AAQD;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CACpC,UAAU,GAAE,MAAoC,EAChD,IAAI,GAAE,MAAiC,GACtC,YAAY,CAyBd;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CACzC,UAAU,GAAE,MAAoC,GAC/C,YAAY,CAcd"}
@@ -18,6 +18,7 @@
18
18
  import { existsSync, readFileSync, writeFileSync, copyFileSync, mkdirSync } from 'node:fs';
19
19
  import { dirname, join } from 'node:path';
20
20
  import { homedir } from 'node:os';
21
+ import { stripForgeResumeBlocks } from '../utils/forge-resume-block.js';
21
22
  export const GOVERNANCE_MARKER_START = '<!-- cf:governance:start -->';
22
23
  export const GOVERNANCE_MARKER_END = '<!-- cf:governance:end -->';
23
24
  /**
@@ -28,35 +29,59 @@ export function defaultGlobalClaudeMdPath() {
28
29
  return join(homedir(), '.claude', 'CLAUDE.md');
29
30
  }
30
31
  /**
31
- * The condensed, self-contained DECISION HINT protocol contract. Distilled
32
- * from the project CLAUDE.md "DECISION HINT 协议契约" section — kept short but
33
- * complete enough that a Claude in any project knows to spawn decision-maker.
32
+ * The condensed DECISION HINT protocol contract.
33
+ *
34
+ * Authority ruling (decision ed98c8e8, 2026-06-10): the project CLAUDE.md
35
+ * "DECISION HINT 协议契约" section is the SINGLE authoritative full text.
36
+ * This global body is a short pointer-style digest — core directives only,
37
+ * everything else (codegraph/grep 分工、并行细则、例外清单) lives in the
38
+ * project file. This kills the ~950-token triple-injection duplication
39
+ * (global block + project block + hint template all carrying the full text).
40
+ *
41
+ * Also carries the spec-before-change discipline (decision 393481d1): a
42
+ * cross-project user mandate that previously lived only as a hand-written
43
+ * block OUTSIDE the markers on one machine — now folded into the generator
44
+ * so every install gets it via inject-global (same path as decision def0adcb
45
+ * took for the cd/output-redirection Bash convention).
34
46
  *
35
47
  * Excludes the marker lines; `buildGovernanceBlock` wraps it.
36
48
  */
37
- export const GOVERNANCE_PROTOCOL_BODY = `## claude-forge 决策治理协议(全链路委托 · 全局注入)
49
+ export const GOVERNANCE_PROTOCOL_BODY = `## claude-forge 决策治理协议(全局注入 · 压缩版)
38
50
 
39
51
  > 本块由 \`cf governance inject-global\` 自动写入/更新;移除:\`--remove\`。
52
+ > 完整协议(codegraph/grep 分工、并行细则、例外清单)见各项目 CLAUDE.md 的「DECISION HINT 协议契约」节。
53
+
54
+ **主线程是纯编排者**——只 spawn agent、传递结果、等用户批准、回填 outcome;不自己 grep/find 查代码、不 Edit/Write 实施。
55
+ 1. 决策(第一动作):先 spawn \`decision-maker\`(prompt 头带 \`<!-- decision-id: XXXX -->\`,若有),它返回前不回答正文、不动手。
56
+ 2. 搜索/查代码 → spawn \`Explore\` / \`doc-reviewer\`;实施(用户批准后)→ spawn \`coder\` 等实施 agent;实施后 → spawn \`verify-agent\`。
57
+ 3. 可拆分的独立工作在一条消息里 batch spawn 并行跑;bypass:prompt 末尾加 \`skip decision\`。
58
+
59
+ > 诚实边界:强指令、非机械锁——提高遵守率,不做 100% 保证。
60
+
61
+ ## Bash 命令约定(减少授权弹窗)
62
+
63
+ 跑 Bash 时**不要**写「\`cd <路径> && cmd > file\`」这种「复合命令 + cd + 输出重定向」
64
+ 组合——它触发 Claude Code 的 path-resolution-bypass 安全检查(\`Compound command
65
+ contains cd with output redirection - manual approval required\`),该检查**无法**用
66
+ \`permissions.allow\` 放行,只能从命令写法规避:
67
+
68
+ - ❌ \`cd /some/path && cmd > file\`(触发强制人工批准)
69
+ - ✅ 用绝对路径:\`cmd > /some/path/file\`,目标路径写全
70
+ - ✅ 工作目录本来就持久在项目根,**多数命令根本不需要 \`cd\` 前缀**——直接跑
71
+ - ✅ 实在要换目录,分两条独立命令,或不带 \`>\` 重定向
40
72
 
41
- **核心:主线程是纯编排者——只 spawn agent、传递结果、等用户批准、回填 outcome;
42
- 自己不 grep/find 查代码、不 Edit/Write 实施。** 收到用户的任何请求 / 指令:
73
+ > 这能消除跨项目反复出现的 \`cd\` 授权弹窗,且不牺牲安全(无需开 bypassPermissions)。
74
+ > 这是强约定、非硬锁——提高遵守率,不做 100% 保证。
43
75
 
44
- 1. **决策(第一动作)**:必须先 spawn \`decision-maker\`(Task subagent_type='decision-maker',
45
- prompt 头带 \`<!-- decision-id: XXXX -->\`(若有))。在它返回前不回答正文、不动手。
46
- 它 triage:琐碎秒放过 / 值得出方案(选项·推荐·风险)。
47
- 2. **搜索 / 查代码**:任何 grep / find / git diff / 跨文件查找(单文件已知路径的 Read 除外)
48
- → spawn \`Explore\` 或 \`doc-reviewer\`;主线程不自己查。
49
- 3. **实施**:用户批准后,实质改动(Edit/Write / 多文件 / 新功能 / 重构 / bugfix)
50
- → spawn \`coder\` / \`refactor-specialist\` / \`hybrid-feature-with-safety\` 等;主线程不自己动手。
51
- 4. **验证**:实施后 spawn \`verify-agent\` 验证。
52
- 5. **并行优先(要效率)**:工作可拆分 / 相互独立时,在一条消息里 batch spawn 多个 agent
53
- 并发跑——不怕成本,优先效率,别串行干等。
54
- 6. **例外(无需走上述)**:纯确认("好的 / 谢谢 / 继续")、元任务(commit / build / restart daemon)、
55
- 单文件已知路径的 Read。若项目没有对应 agent,用可用的;至少决策走 decision-maker。
56
- 7. bypass:prompt 末尾加 \`skip decision\` 跳过本协议。
76
+ ## 通用工程纪律:代码改动前先写 spec(所有项目 · 用户强制)
57
77
 
58
- > 诚实边界:这是**强指令、非机械锁**。Claude Code 现有 hook 无法真正强制工具调用
59
- > (能拦工具的 deny 实测失效、已删)。本协议提高遵守率,不做 100% 保证。`;
78
+ 任何**涉及代码改动**的任务(bugfix / 样式 / 单点 / 重构 / 新功能)实施前**必须**先写一份 spec
79
+ 经用户批准,再 spawn 实施 agent;适用**所有项目**。
80
+ - 流程:spawn \`planner\`(或项目约定 spec agent)写 spec 到 \`docs/design/\` → 用户批准 → 才 spawn \`coder\` 实施 → 实施后 \`verify-agent\`。
81
+ - 事后 changelog / 实施记录**不能**替代「实施前的 spec」;**不得**以「小 / trivial / 已诊断清楚 / 只改一行」为由跳过。
82
+ - 例外(不需 spec):纯查询 / 诊断 / 元任务(commit、build、restart、改版本号、改文档/注释)。
83
+
84
+ > 强指令、非机械锁——提高遵守率,不做 100% 保证。这条由主线程自律保证。`;
60
85
  /** Wrap the protocol body in idempotent markers. */
61
86
  export function buildGovernanceBlock(body = GOVERNANCE_PROTOCOL_BODY) {
62
87
  return `${GOVERNANCE_MARKER_START}\n${body}\n${GOVERNANCE_MARKER_END}`;
@@ -73,6 +98,34 @@ function markerBlockRegex() {
73
98
  export function hasGovernanceBlock(content) {
74
99
  return markerBlockRegex().test(content);
75
100
  }
101
+ /**
102
+ * Strip legacy forge-resume residue from the GLOBAL CLAUDE.md content
103
+ * (decision ed98c8e8, 2026-06-10).
104
+ *
105
+ * The resume engine historically wrote "上次工作续接" blocks into
106
+ * `~/.claude/CLAUDE.md`; that target was later retired (resume now goes to
107
+ * the per-project CLAUDE.md only), leaving stale blocks behind that get
108
+ * re-injected into every session of every project. This removes all known
109
+ * forms:
110
+ * 1. UUID envelope: `<!-- forge:resume-begin:<uuid> -->…<!-- forge:resume-end:<uuid> -->`
111
+ * 2. Legacy markers: `<!-- forge:resume -->…<!-- forge:end-resume -->`
112
+ * (both delegated to the shared `stripForgeResumeBlocks` util)
113
+ * 3. Bare fenced residue: optional `## 上次工作续接` heading +
114
+ * ```forge-resume-body``` fence + trailing `_生成时间: …_` line.
115
+ *
116
+ * Called by `injectGlobalGovernance` on every run, so the one-time cleanup
117
+ * self-heals even if stale content reappears.
118
+ */
119
+ export function stripLegacyResumeBlocks(content) {
120
+ // Forms 1 + 2 — shared util (handles UUID envelope + legacy bare markers).
121
+ let s = stripForgeResumeBlocks(content);
122
+ // Form 3 — bare fenced block (no surviving HTML markers around it).
123
+ s = s.replace(/(?:^|\n)(?:##\s*上次工作续接[^\n]*\n+)?```forge-resume-body\n[\s\S]*?\n```[^\S\n]*(?:\n+_生成时间:[^\n]*_)?[^\S\n]*/g, '\n');
124
+ // Stray standalone "_生成时间: …_" lines left between removed blocks.
125
+ s = s.replace(/(?:^|\n)_生成时间:[^\n]*_[^\S\n]*(?=\n|$)/g, '\n');
126
+ s = s.replace(/\n{3,}/g, '\n\n').replace(/^\n+/, '');
127
+ return s;
128
+ }
76
129
  function backupExisting(targetPath) {
77
130
  const bak = `${targetPath}.bak`;
78
131
  copyFileSync(targetPath, bak);
@@ -96,15 +149,17 @@ export function injectGlobalGovernance(targetPath = defaultGlobalClaudeMdPath(),
96
149
  }
97
150
  const original = readFileSync(targetPath, 'utf8');
98
151
  const backupPath = backupExisting(targetPath);
99
- if (hasGovernanceBlock(original)) {
100
- const next = original.replace(markerBlockRegex(), block);
152
+ // Self-healing cleanup of stale resume residue (decision ed98c8e8).
153
+ const cleaned = stripLegacyResumeBlocks(original);
154
+ if (hasGovernanceBlock(cleaned)) {
155
+ const next = cleaned.replace(markerBlockRegex(), block);
101
156
  if (next !== original)
102
157
  writeFileSync(targetPath, next, 'utf8');
103
158
  return { action: 'updated', path: targetPath, backupPath };
104
159
  }
105
160
  // Append, ensuring exactly one blank line of separation.
106
- const sep = original.endsWith('\n') ? (original.endsWith('\n\n') ? '' : '\n') : '\n\n';
107
- writeFileSync(targetPath, `${original}${sep}${block}\n`, 'utf8');
161
+ const sep = cleaned.endsWith('\n') ? (cleaned.endsWith('\n\n') ? '' : '\n') : '\n\n';
162
+ writeFileSync(targetPath, `${cleaned}${sep}${block}\n`, 'utf8');
108
163
  return { action: 'inserted', path: targetPath, backupPath };
109
164
  }
110
165
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"global-inject.js","sourceRoot":"","sources":["../../../src/core/governance/global-inject.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"global-inject.js","sourceRoot":"","sources":["../../../src/core/governance/global-inject.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * agent-anchor-guard.ts — Phase 3 retro-distill safety floor (decision 234f1ad4).
3
+ *
4
+ * Mirror of `src/skills/distill/project-anchor-guard.ts` but with INVERTED
5
+ * semantics: the skill guard forbids a denylist of project anchors; this guard
6
+ * forbids a denylist of **protected regions** of an agent template — anything
7
+ * the retro-distiller's patch is NOT allowed to touch.
8
+ *
9
+ * 不变量 (decision 234f1ad4 / 75344363): the LLM-drafted patch may only edit the
10
+ * "evolvable" region of a template (skill-discovery wording, KB-pull step
11
+ * wording, Role/Steps explanatory prose). It must NEVER edit:
12
+ * - the YAML frontmatter block (name / description / tools / model / color /
13
+ * version) — behavior identity + the version line (version is bumped only
14
+ * mechanically on adoption, never hand-written by the distiller),
15
+ * - the `# IMPORTANT: subagent rules` section body — behavior本体,
16
+ * - the `` `Decision: <id>` `` header requirement token + "header" wording
17
+ * (the changelog-surfacing invariant, test 75344363).
18
+ *
19
+ * Any patch line that touches a protected region → a violation. The CLI caller
20
+ * rejects the whole draft (no retry — same no-retry policy as the skill
21
+ * distiller's ProjectAnchorRejection).
22
+ *
23
+ * READ-ONLY pure functions; never writes a template.
24
+ */
25
+ /** A single protected-region hit inside a candidate patch. */
26
+ export interface AgentAnchorViolation {
27
+ /** Protected-region label (e.g. "frontmatter", "subagent-rules"). */
28
+ region: string;
29
+ /** The offending patch line (changed line content, '+'/'-' marker stripped). */
30
+ line: string;
31
+ /** 1-indexed position of the offending line within the patch text. */
32
+ patchLine: number;
33
+ }
34
+ /**
35
+ * Protected-region matchers. Each label maps to a regex tested against a
36
+ * single changed line of the patch (the `+`/`-` body, marker stripped). A hit
37
+ * means the distiller tried to add/remove a line that belongs to a protected
38
+ * region — rejected.
39
+ *
40
+ * Exported so tests can assert the matcher set is intact.
41
+ */
42
+ export declare const PROTECTED_REGION_MATCHERS: ReadonlyArray<{
43
+ region: string;
44
+ regex: RegExp;
45
+ }>;
46
+ /**
47
+ * Split a unified-diff / patch text into its CHANGED lines (those starting with
48
+ * `+` or `-`, excluding the `+++`/`---` file headers and `@@` hunk markers),
49
+ * returning the marker-stripped body plus the 1-indexed patch line number.
50
+ *
51
+ * The distiller is asked to emit a unified diff in the `---AGENT-PATCH---`
52
+ * envelope; we only care about lines it ADDS or REMOVES.
53
+ */
54
+ export declare function extractChangedLines(patch: string): Array<{
55
+ body: string;
56
+ patchLine: number;
57
+ }>;
58
+ /**
59
+ * Scan a candidate patch for protected-region hits. Returns the (possibly
60
+ * empty) list of violations. Empty = the patch only touches the evolvable
61
+ * region → safe to write as a draft.
62
+ *
63
+ * Pure: no IO.
64
+ */
65
+ export declare function scanAgentPatch(patch: string): AgentAnchorViolation[];
66
+ /**
67
+ * Convenience: throw if a patch touches any protected region. The CLI uses
68
+ * `scanAgentPatch` directly (to print all violations); this is for tests /
69
+ * call-sites that just want a hard gate.
70
+ */
71
+ export declare class AgentAnchorRejection extends Error {
72
+ readonly hits: AgentAnchorViolation[];
73
+ readonly agent: string;
74
+ constructor(agent: string, hits: AgentAnchorViolation[]);
75
+ }
76
+ export declare function assertEvolvableOnly(agent: string, patch: string): void;
77
+ //# sourceMappingURL=agent-anchor-guard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-anchor-guard.d.ts","sourceRoot":"","sources":["../../../src/core/insights/agent-anchor-guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,8DAA8D;AAC9D,MAAM,WAAW,oBAAoB;IACnC,qEAAqE;IACrE,MAAM,EAAE,MAAM,CAAC;IACf,gFAAgF;IAChF,IAAI,EAAE,MAAM,CAAC;IACb,sEAAsE;IACtE,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,yBAAyB,EAAE,aAAa,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAmBtF,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAa7F;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,oBAAoB,EAAE,CAcpE;AAED;;;;GAIG;AACH,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,QAAQ,CAAC,IAAI,EAAE,oBAAoB,EAAE,CAAC;IACtC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;gBACX,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,oBAAoB,EAAE;CASxD;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAGtE"}
@@ -0,0 +1,119 @@
1
+ /**
2
+ * agent-anchor-guard.ts — Phase 3 retro-distill safety floor (decision 234f1ad4).
3
+ *
4
+ * Mirror of `src/skills/distill/project-anchor-guard.ts` but with INVERTED
5
+ * semantics: the skill guard forbids a denylist of project anchors; this guard
6
+ * forbids a denylist of **protected regions** of an agent template — anything
7
+ * the retro-distiller's patch is NOT allowed to touch.
8
+ *
9
+ * 不变量 (decision 234f1ad4 / 75344363): the LLM-drafted patch may only edit the
10
+ * "evolvable" region of a template (skill-discovery wording, KB-pull step
11
+ * wording, Role/Steps explanatory prose). It must NEVER edit:
12
+ * - the YAML frontmatter block (name / description / tools / model / color /
13
+ * version) — behavior identity + the version line (version is bumped only
14
+ * mechanically on adoption, never hand-written by the distiller),
15
+ * - the `# IMPORTANT: subagent rules` section body — behavior本体,
16
+ * - the `` `Decision: <id>` `` header requirement token + "header" wording
17
+ * (the changelog-surfacing invariant, test 75344363).
18
+ *
19
+ * Any patch line that touches a protected region → a violation. The CLI caller
20
+ * rejects the whole draft (no retry — same no-retry policy as the skill
21
+ * distiller's ProjectAnchorRejection).
22
+ *
23
+ * READ-ONLY pure functions; never writes a template.
24
+ */
25
+ /**
26
+ * Protected-region matchers. Each label maps to a regex tested against a
27
+ * single changed line of the patch (the `+`/`-` body, marker stripped). A hit
28
+ * means the distiller tried to add/remove a line that belongs to a protected
29
+ * region — rejected.
30
+ *
31
+ * Exported so tests can assert the matcher set is intact.
32
+ */
33
+ export const PROTECTED_REGION_MATCHERS = [
34
+ // ── YAML frontmatter fields (behavior identity) ──────────────────────────
35
+ // The frontmatter lives inside the leading `---`...`---` block. We flag any
36
+ // changed line that looks like one of its top-level fields. `version:` is
37
+ // included here: it is bumped only by the adoption script, never by a patch.
38
+ { region: 'frontmatter', regex: /^(name|description|tools|model|color|version)\s*:/i },
39
+ // The frontmatter fence itself.
40
+ { region: 'frontmatter-fence', regex: /^---\s*$/ },
41
+ // ── `# IMPORTANT: subagent rules` section header (behavior本体 anchor) ─────
42
+ { region: 'subagent-rules', regex: /^#\s*IMPORTANT:\s*subagent rules/i },
43
+ // The canonical bullet lines of that section (behavior本体). We flag the
44
+ // load-bearing rule lines so a patch cannot quietly rewrite the rules body.
45
+ { region: 'subagent-rules', regex: /You are a subagent\s*—\s*you\s*(?:\*\*)?cannot(?:\*\*)?\s*spawn other agents/i },
46
+ { region: 'subagent-rules', regex: /You MUST NOT modify test fixtures/i },
47
+ // ── Decision-header changelog invariant (test 75344363) ──────────────────
48
+ // The literal token `Decision: <id>` and the surrounding "header" wording.
49
+ { region: 'decision-header', regex: /`Decision:\s*<id>`/ },
50
+ ];
51
+ /**
52
+ * Split a unified-diff / patch text into its CHANGED lines (those starting with
53
+ * `+` or `-`, excluding the `+++`/`---` file headers and `@@` hunk markers),
54
+ * returning the marker-stripped body plus the 1-indexed patch line number.
55
+ *
56
+ * The distiller is asked to emit a unified diff in the `---AGENT-PATCH---`
57
+ * envelope; we only care about lines it ADDS or REMOVES.
58
+ */
59
+ export function extractChangedLines(patch) {
60
+ const out = [];
61
+ const lines = patch.split('\n');
62
+ for (let i = 0; i < lines.length; i++) {
63
+ const raw = lines[i];
64
+ // Skip unified-diff file headers (`+++ ` / `--- `) and hunk markers (`@@`).
65
+ if (raw.startsWith('+++') || raw.startsWith('---'))
66
+ continue;
67
+ if (raw.startsWith('@@'))
68
+ continue;
69
+ if (raw.startsWith('+') || raw.startsWith('-')) {
70
+ out.push({ body: raw.slice(1).trim(), patchLine: i + 1 });
71
+ }
72
+ }
73
+ return out;
74
+ }
75
+ /**
76
+ * Scan a candidate patch for protected-region hits. Returns the (possibly
77
+ * empty) list of violations. Empty = the patch only touches the evolvable
78
+ * region → safe to write as a draft.
79
+ *
80
+ * Pure: no IO.
81
+ */
82
+ export function scanAgentPatch(patch) {
83
+ const violations = [];
84
+ const changed = extractChangedLines(patch);
85
+ for (const { body, patchLine } of changed) {
86
+ if (!body)
87
+ continue;
88
+ for (const { region, regex } of PROTECTED_REGION_MATCHERS) {
89
+ regex.lastIndex = 0;
90
+ if (regex.test(body)) {
91
+ violations.push({ region, line: body, patchLine });
92
+ break; // one violation per offending line is enough
93
+ }
94
+ }
95
+ }
96
+ return violations;
97
+ }
98
+ /**
99
+ * Convenience: throw if a patch touches any protected region. The CLI uses
100
+ * `scanAgentPatch` directly (to print all violations); this is for tests /
101
+ * call-sites that just want a hard gate.
102
+ */
103
+ export class AgentAnchorRejection extends Error {
104
+ hits;
105
+ agent;
106
+ constructor(agent, hits) {
107
+ super(`[agent-distill] ${agent} patch rejected: ${hits.length} protected-region edit(s) ` +
108
+ `(first: ${hits[0]?.region} @ patch line ${hits[0]?.patchLine}: "${hits[0]?.line}")`);
109
+ this.name = 'AgentAnchorRejection';
110
+ this.hits = hits;
111
+ this.agent = agent;
112
+ }
113
+ }
114
+ export function assertEvolvableOnly(agent, patch) {
115
+ const hits = scanAgentPatch(patch);
116
+ if (hits.length > 0)
117
+ throw new AgentAnchorRejection(agent, hits);
118
+ }
119
+ //# sourceMappingURL=agent-anchor-guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-anchor-guard.js","sourceRoot":"","sources":["../../../src/core/insights/agent-anchor-guard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * agent-distill-context.ts — Phase 3 retro-distill prompt assembly (decision
3
+ * 234f1ad4). Pure function: turns the read-only health/drift/failure signals
4
+ * into the structured prompt fed to the `agent-retro-distiller` template, plus a
5
+ * human-readable signal summary used by `--dry-run` (which never spawns the LLM).
6
+ *
7
+ * READ-ONLY: takes already-aggregated data + the template text, returns strings.
8
+ * No IO, no spawn, no template writes.
9
+ */
10
+ import type { AgentHealth } from './agent-health.js';
11
+ import type { DriftNudge } from './agent-drift.js';
12
+ /**
13
+ * Command-level gate (门槛 1, spec §数据稀薄退化): below this delegation count we
14
+ * do NOT spawn the LLM — there is not enough usage signal to draft a confident
15
+ * change. = MIN_DELEGATIONS_FOR_SIGNAL × 5 (spec recommendation ≈ 15).
16
+ */
17
+ export declare const DISTILL_MIN_DELEGATIONS: number;
18
+ export interface FailureSample {
19
+ /** task title (or '(untitled)'). */
20
+ title: string;
21
+ /** session id (for traceability). */
22
+ session_id: string;
23
+ ts: number;
24
+ }
25
+ export interface DistillContextInput {
26
+ agent: string;
27
+ currentVersion: number;
28
+ currentTemplate: string;
29
+ health: AgentHealth | null;
30
+ drift: DriftNudge[];
31
+ failureSamples: FailureSample[];
32
+ windowDays: number;
33
+ /** Distinct (agent,skill) pairs with total_rated ≥ SUGGESTION_MIN_RATED. */
34
+ ratedPairs: number;
35
+ }
36
+ export interface DistillContext {
37
+ /** Whether command-level + signal-level gates allow a spawn (门槛 1+2). */
38
+ enoughSignal: boolean;
39
+ /** One-line reason when !enoughSignal (printed by the CLI degradation path). */
40
+ insufficientReason: string | null;
41
+ /** Maturity annotation (printed in --dry-run + the draft header). */
42
+ maturity: string;
43
+ /** Human-readable signal summary (printed by --dry-run). */
44
+ summary: string;
45
+ /** The full structured prompt for the distiller (only used on real spawn). */
46
+ prompt: string;
47
+ /** The dead/weak/drift dimensions that WOULD drive drafted changes. */
48
+ proposedChangeTypes: string[];
49
+ }
50
+ /**
51
+ * Build the distill context (gates + maturity + summary + prompt + proposed
52
+ * change types) from read-only signals. Pure.
53
+ */
54
+ export declare function buildDistillContext(input: DistillContextInput): DistillContext;
55
+ //# sourceMappingURL=agent-distill-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-distill-context.d.ts","sourceRoot":"","sources":["../../../src/core/insights/agent-distill-context.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,QAAiC,CAAC;AAEtE,MAAM,WAAW,aAAa;IAC5B,oCAAoC;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,qCAAqC;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;IAC3B,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,cAAc,EAAE,aAAa,EAAE,CAAC;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,4EAA4E;IAC5E,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,yEAAyE;IACzE,YAAY,EAAE,OAAO,CAAC;IACtB,gFAAgF;IAChF,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,qEAAqE;IACrE,QAAQ,EAAE,MAAM,CAAC;IACjB,4DAA4D;IAC5D,OAAO,EAAE,MAAM,CAAC;IAChB,8EAA8E;IAC9E,MAAM,EAAE,MAAM,CAAC;IACf,uEAAuE;IACvE,mBAAmB,EAAE,MAAM,EAAE,CAAC;CAC/B;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,mBAAmB,GAAG,cAAc,CAgI9E"}