@event4u/agent-config 6.0.0 → 7.0.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 (1758) hide show
  1. package/.claude-plugin/marketplace.json +39 -7
  2. package/AGENTS.md +8 -7
  3. package/CHANGELOG.md +557 -422
  4. package/CONTRIBUTING.md +1 -1
  5. package/README.md +18 -16
  6. package/dist/agent-src/commands/agent-handoff.md +5 -4
  7. package/dist/agent-src/commands/agent-status.md +3 -2
  8. package/dist/agent-src/commands/agents/audit.md +4 -3
  9. package/dist/agent-src/commands/agents/init.md +4 -1
  10. package/dist/agent-src/commands/agents/optimize.md +5 -4
  11. package/dist/agent-src/commands/agents/user/accept.md +1 -0
  12. package/dist/agent-src/commands/agents/user/init.md +1 -0
  13. package/dist/agent-src/commands/agents/user/review.md +1 -0
  14. package/dist/agent-src/commands/agents/user/show.md +1 -0
  15. package/dist/agent-src/commands/agents/user/update.md +1 -0
  16. package/dist/agent-src/commands/agents/user.md +1 -0
  17. package/dist/agent-src/commands/agents.md +1 -0
  18. package/dist/agent-src/commands/analytics/prune.md +3 -2
  19. package/dist/agent-src/commands/analytics/show.md +3 -2
  20. package/dist/agent-src/commands/analytics.md +3 -2
  21. package/dist/agent-src/commands/analyze/decision.md +108 -0
  22. package/dist/agent-src/commands/analyze/incident.md +120 -0
  23. package/dist/agent-src/commands/analyze/near-miss.md +113 -0
  24. package/dist/agent-src/commands/analyze/postmortem.md +130 -0
  25. package/dist/agent-src/commands/analyze/premortem.md +104 -0
  26. package/dist/agent-src/commands/analyze-reference-repo.md +1 -0
  27. package/dist/agent-src/commands/analyze.md +124 -0
  28. package/dist/agent-src/commands/brand/identity.md +27 -0
  29. package/dist/agent-src/commands/brand/review.md +27 -0
  30. package/dist/agent-src/commands/brand/strategy.md +27 -0
  31. package/dist/agent-src/commands/brand/tokens.md +28 -0
  32. package/dist/agent-src/commands/brand/voice.md +27 -0
  33. package/dist/agent-src/commands/brand.md +58 -0
  34. package/dist/agent-src/commands/bug-fix.md +1 -0
  35. package/dist/agent-src/commands/bug-investigate.md +1 -0
  36. package/dist/agent-src/commands/challenge-me/vision.md +3 -2
  37. package/dist/agent-src/commands/challenge-me/with-docs.md +3 -2
  38. package/dist/agent-src/commands/challenge-me.md +3 -2
  39. package/dist/agent-src/commands/chat-history/import.md +9 -9
  40. package/dist/agent-src/commands/chat-history.md +32 -30
  41. package/dist/agent-src/commands/check-current-md.md +4 -3
  42. package/dist/agent-src/commands/commit/in-chunks.md +1 -0
  43. package/dist/agent-src/commands/commit.md +1 -0
  44. package/dist/agent-src/commands/condense.md +3 -2
  45. package/dist/agent-src/commands/context/create.md +1 -0
  46. package/dist/agent-src/commands/context/refactor.md +1 -0
  47. package/dist/agent-src/commands/context.md +1 -0
  48. package/dist/agent-src/commands/cost-report.md +5 -4
  49. package/dist/agent-src/commands/council/analysis.md +3 -2
  50. package/dist/agent-src/commands/council/debate.md +7 -6
  51. package/dist/agent-src/commands/council/default.md +48 -20
  52. package/dist/agent-src/commands/council/design.md +3 -2
  53. package/dist/agent-src/commands/council/optimize.md +3 -2
  54. package/dist/agent-src/commands/council/pr.md +3 -2
  55. package/dist/agent-src/commands/council.md +4 -3
  56. package/dist/agent-src/commands/e2e-heal.md +1 -0
  57. package/dist/agent-src/commands/e2e-plan.md +1 -0
  58. package/dist/agent-src/commands/estimate-ticket.md +1 -0
  59. package/dist/agent-src/commands/feature/dev.md +1 -0
  60. package/dist/agent-src/commands/feature/explore.md +1 -0
  61. package/dist/agent-src/commands/feature/plan.md +6 -6
  62. package/dist/agent-src/commands/feature/refactor.md +1 -0
  63. package/dist/agent-src/commands/feature/roadmap.md +1 -0
  64. package/dist/agent-src/commands/feature.md +1 -0
  65. package/dist/agent-src/commands/fix/ci.md +1 -0
  66. package/dist/agent-src/commands/fix/portability.md +4 -3
  67. package/dist/agent-src/commands/fix/pr-comments.md +147 -15
  68. package/dist/agent-src/commands/fix/refs.md +4 -3
  69. package/dist/agent-src/commands/fix/seeder.md +1 -0
  70. package/dist/agent-src/commands/fix.md +8 -8
  71. package/dist/agent-src/commands/ghostwriter/delete.md +1 -0
  72. package/dist/agent-src/commands/ghostwriter/fetch.md +1 -0
  73. package/dist/agent-src/commands/ghostwriter/list.md +1 -0
  74. package/dist/agent-src/commands/ghostwriter/show.md +1 -0
  75. package/dist/agent-src/commands/ghostwriter/write.md +1 -0
  76. package/dist/agent-src/commands/ghostwriter.md +1 -0
  77. package/dist/agent-src/commands/grill-me.md +3 -2
  78. package/dist/agent-src/commands/image/analyse.md +1 -0
  79. package/dist/agent-src/commands/image/create.md +1 -0
  80. package/dist/agent-src/commands/image/verify.md +1 -0
  81. package/dist/agent-src/commands/image.md +1 -0
  82. package/dist/agent-src/commands/implement-ticket.md +37 -6
  83. package/dist/agent-src/commands/jira-ticket.md +1 -0
  84. package/dist/agent-src/commands/judge/on-diff.md +1 -0
  85. package/dist/agent-src/commands/judge/solo.md +1 -0
  86. package/dist/agent-src/commands/judge/steps.md +1 -0
  87. package/dist/agent-src/commands/judge.md +1 -0
  88. package/dist/agent-src/commands/knowledge/cross-repo.md +2 -1
  89. package/dist/agent-src/commands/knowledge/forget.md +1 -0
  90. package/dist/agent-src/commands/knowledge/ingest.md +1 -0
  91. package/dist/agent-src/commands/knowledge/list.md +1 -0
  92. package/dist/agent-src/commands/knowledge.md +1 -0
  93. package/dist/agent-src/commands/memory/add.md +9 -7
  94. package/dist/agent-src/commands/memory/learn-low-impact.md +3 -2
  95. package/dist/agent-src/commands/memory/load.md +7 -7
  96. package/dist/agent-src/commands/memory/mine-session.md +39 -12
  97. package/dist/agent-src/commands/memory/promote.md +3 -2
  98. package/dist/agent-src/commands/memory/propose.md +7 -6
  99. package/dist/agent-src/commands/memory.md +3 -2
  100. package/dist/agent-src/commands/mission/upgrade.md +182 -0
  101. package/dist/agent-src/commands/mode.md +1 -0
  102. package/dist/agent-src/commands/module/create.md +1 -0
  103. package/dist/agent-src/commands/module/explore.md +1 -0
  104. package/dist/agent-src/commands/module.md +1 -0
  105. package/dist/agent-src/commands/optimize/agents-dir.md +1 -0
  106. package/dist/agent-src/commands/optimize/augmentignore.md +1 -0
  107. package/dist/agent-src/commands/optimize/rtk.md +1 -0
  108. package/dist/agent-src/commands/optimize/skills.md +3 -2
  109. package/dist/agent-src/commands/optimize-prompt.md +1 -0
  110. package/dist/agent-src/commands/optimize.md +1 -0
  111. package/dist/agent-src/commands/orchestrate.md +2 -1
  112. package/dist/agent-src/commands/override/create.md +1 -0
  113. package/dist/agent-src/commands/override/manage.md +1 -0
  114. package/dist/agent-src/commands/override.md +1 -0
  115. package/dist/agent-src/commands/package-reset.md +1 -0
  116. package/dist/agent-src/commands/package-test.md +1 -0
  117. package/dist/agent-src/commands/post-as/ghostwriter.md +1 -0
  118. package/dist/agent-src/commands/post-as/me.md +1 -0
  119. package/dist/agent-src/commands/post-as.md +1 -0
  120. package/dist/agent-src/commands/pr/create/description-only.md +1 -0
  121. package/dist/agent-src/commands/pr/create.md +31 -4
  122. package/dist/agent-src/commands/prediction-pool.md +1 -0
  123. package/dist/agent-src/commands/prepare-for-review.md +1 -0
  124. package/dist/agent-src/commands/profile/activate.md +1 -0
  125. package/dist/agent-src/commands/profile/deactivate.md +1 -0
  126. package/dist/agent-src/commands/profile/show.md +1 -0
  127. package/dist/agent-src/commands/profile.md +1 -0
  128. package/dist/agent-src/commands/project-analyze.md +1 -0
  129. package/dist/agent-src/commands/project-health.md +1 -0
  130. package/dist/agent-src/commands/quality-fix.md +1 -0
  131. package/dist/agent-src/commands/refine-ticket.md +1 -0
  132. package/dist/agent-src/commands/research/deep.md +1 -0
  133. package/dist/agent-src/commands/research/report.md +1 -0
  134. package/dist/agent-src/commands/research.md +1 -0
  135. package/dist/agent-src/commands/review-changes.md +9 -0
  136. package/dist/agent-src/commands/review-routing.md +1 -0
  137. package/dist/agent-src/commands/roadmap/ai-council.md +1 -0
  138. package/dist/agent-src/commands/roadmap/create.md +1 -0
  139. package/dist/agent-src/commands/roadmap/materialize.md +73 -0
  140. package/dist/agent-src/commands/roadmap/process-full.md +1 -0
  141. package/dist/agent-src/commands/roadmap/process-phase.md +1 -0
  142. package/dist/agent-src/commands/roadmap/process-step.md +1 -0
  143. package/dist/agent-src/commands/roadmap.md +1 -0
  144. package/dist/agent-src/commands/rule-compliance-audit.md +1 -0
  145. package/dist/agent-src/commands/security-audit-config.md +84 -0
  146. package/dist/agent-src/commands/set-cost-profile.md +1 -0
  147. package/dist/agent-src/commands/skill/preview.md +2 -1
  148. package/dist/agent-src/commands/skill.md +1 -0
  149. package/dist/agent-src/commands/skills/discover.md +2 -1
  150. package/dist/agent-src/commands/skills.md +1 -0
  151. package/dist/agent-src/commands/sync-agent-settings.md +1 -0
  152. package/dist/agent-src/commands/sync-gitignore/fix.md +1 -0
  153. package/dist/agent-src/commands/sync-gitignore.md +1 -0
  154. package/dist/agent-src/commands/tests/create.md +1 -0
  155. package/dist/agent-src/commands/tests/execute.md +1 -0
  156. package/dist/agent-src/commands/tests.md +1 -0
  157. package/dist/agent-src/commands/threat-model.md +5 -4
  158. package/dist/agent-src/commands/update-form-request-messages.md +1 -0
  159. package/dist/agent-src/commands/upstream-contribute.md +4 -3
  160. package/dist/agent-src/commands/video/from-script.md +3 -2
  161. package/dist/agent-src/commands/video/from-song.md +4 -3
  162. package/dist/agent-src/commands/video/scene.md +2 -1
  163. package/dist/agent-src/commands/video/stitch.md +1 -0
  164. package/dist/agent-src/commands/video/storyboard.md +2 -1
  165. package/dist/agent-src/commands/video.md +4 -3
  166. package/dist/agent-src/commands/work.md +1 -0
  167. package/dist/agent-src/contexts/augment-infrastructure.md +1 -1
  168. package/dist/agent-src/contexts/communication/rules-auto/skill-quality-mechanics.md +1 -1
  169. package/dist/agent-src/contexts/communication/rules-auto/slash-command-routing-policy-mechanics.md +2 -2
  170. package/dist/agent-src/contexts/communication/rules-auto/source-of-truth-mechanics.md +3 -3
  171. package/dist/agent-src/contexts/communication/rules-auto/think-before-action-mechanics.md +6 -6
  172. package/dist/agent-src/contexts/communication/rules-auto/user-interaction-mechanics.md +1 -1
  173. package/dist/agent-src/contexts/contracts/consumer-agents-md-guide.md +2 -2
  174. package/dist/agent-src/contexts/execution/evidence-discipline.md +153 -0
  175. package/dist/agent-src/contexts/execution/project-intelligence.md +264 -0
  176. package/dist/agent-src/contexts/execution/rdp-gate.md +75 -0
  177. package/dist/agent-src/contexts/execution/roadmap-process-loop.md +2 -1
  178. package/dist/agent-src/contexts/subagent-configuration.md +1 -0
  179. package/dist/agent-src/personas/advisors/contrarian.md +1 -1
  180. package/dist/agent-src/personas/advisors/executor.md +1 -1
  181. package/dist/agent-src/personas/advisors/expansionist.md +1 -1
  182. package/dist/agent-src/personas/advisors/first-principles.md +1 -1
  183. package/dist/agent-src/personas/advisors/outsider.md +1 -1
  184. package/dist/agent-src/personas/ai-video-technical-director.md +1 -1
  185. package/dist/agent-src/personas/brand-strategist.md +74 -0
  186. package/dist/agent-src/personas/design-director.md +74 -0
  187. package/dist/agent-src/rules/autonomous-execution.md +12 -0
  188. package/dist/agent-src/rules/brand-consistency.md +77 -0
  189. package/dist/agent-src/rules/brand-source-of-truth.md +57 -0
  190. package/dist/agent-src/rules/direct-answers.md +2 -0
  191. package/dist/agent-src/rules/domain-safety-disclaimer.md +2 -0
  192. package/dist/agent-src/rules/external-reference-deep-dive.md +1 -1
  193. package/dist/agent-src/rules/git-history-discipline.md +48 -1
  194. package/dist/agent-src/rules/icon-consistency.md +53 -0
  195. package/dist/agent-src/rules/image-likeness-and-rights.md +67 -0
  196. package/dist/agent-src/rules/improve-before-implement.md +12 -0
  197. package/dist/agent-src/rules/lethal-trifecta-guard.md +80 -0
  198. package/dist/agent-src/rules/no-pr-progress-comments.md +3 -4
  199. package/dist/agent-src/rules/notes-first-reasoning.md +71 -0
  200. package/dist/agent-src/rules/persona-governance.md +2 -2
  201. package/dist/agent-src/rules/provider-lifecycle-discipline.md +3 -1
  202. package/dist/agent-src/rules/roadmap-progress-sync.md +58 -31
  203. package/dist/agent-src/rules/security-sensitive-stop.md +22 -3
  204. package/dist/agent-src/rules/size-enforcement.md +1 -1
  205. package/dist/agent-src/rules/source-confidentiality.md +97 -0
  206. package/dist/agent-src/rules/source-discovery-gate.md +98 -0
  207. package/dist/agent-src/rules/think-before-action.md +10 -1
  208. package/dist/agent-src/rules/ui-audit-gate.md +2 -0
  209. package/dist/agent-src/rules/untrusted-input-defense.md +76 -0
  210. package/dist/agent-src/rules/user-interaction.md +1 -1
  211. package/dist/agent-src/scripts/archive_completed_roadmaps.ts +392 -0
  212. package/dist/agent-src/scripts/update_roadmap_progress.ts +824 -0
  213. package/dist/agent-src/skills/adr-create/SKILL.md +5 -5
  214. package/dist/agent-src/skills/adversarial-review/SKILL.md +14 -0
  215. package/dist/agent-src/skills/agent-security-review/SKILL.md +113 -0
  216. package/dist/agent-src/skills/agent-security-review/evals/triggers.json +52 -0
  217. package/dist/agent-src/skills/agents-md-thin-root/SKILL.md +1 -1
  218. package/dist/agent-src/skills/ai-council/SKILL.md +4 -4
  219. package/dist/agent-src/skills/analysis-autonomous-mode/SKILL.md +9 -13
  220. package/dist/agent-src/skills/async-python-patterns/SKILL.md +1 -1
  221. package/dist/agent-src/skills/blade-ui/SKILL.md +12 -5
  222. package/dist/agent-src/skills/blameless-post-mortem/SKILL.md +199 -0
  223. package/dist/agent-src/skills/blast-radius-analyzer/SKILL.md +12 -11
  224. package/dist/agent-src/skills/brand/ATTRIBUTION.md +38 -0
  225. package/dist/agent-src/skills/brand/SKILL.md +115 -0
  226. package/dist/agent-src/skills/brand/data/archetypes.csv +13 -0
  227. package/dist/agent-src/skills/brand/data/color-psychology.csv +14 -0
  228. package/dist/agent-src/skills/brand/data/logo-style-fit.csv +13 -0
  229. package/dist/agent-src/skills/brand/data/manifest.json +226 -0
  230. package/dist/agent-src/skills/brand/data/messaging-frameworks.csv +13 -0
  231. package/dist/agent-src/skills/brand/data/naming-patterns.csv +13 -0
  232. package/dist/agent-src/skills/brand/data/typography-principles.csv +13 -0
  233. package/dist/agent-src/skills/brand/data/voice-tone.csv +13 -0
  234. package/dist/agent-src/skills/brand/evals/triggers.json +17 -0
  235. package/dist/agent-src/skills/brand-asset-generation/SKILL.md +89 -0
  236. package/dist/agent-src/skills/brand-asset-generation/evals/triggers.json +17 -0
  237. package/dist/agent-src/skills/brand-audit/SKILL.md +67 -0
  238. package/dist/agent-src/skills/brand-audit/evals/triggers.json +17 -0
  239. package/dist/agent-src/skills/brand-identity/SKILL.md +101 -0
  240. package/dist/agent-src/skills/brand-identity/evals/triggers.json +17 -0
  241. package/dist/agent-src/skills/brand-strategy/SKILL.md +83 -0
  242. package/dist/agent-src/skills/brand-strategy/evals/triggers.json +17 -0
  243. package/dist/agent-src/skills/brand-to-tokens/SKILL.md +102 -0
  244. package/dist/agent-src/skills/brand-to-tokens/evals/triggers.json +17 -0
  245. package/dist/agent-src/skills/brand-to-tokens/templates/marp-brand-deck.md.example +46 -0
  246. package/dist/agent-src/skills/brand-to-tokens/templates/reveal-brand-deck.yaml +32 -0
  247. package/dist/agent-src/skills/canvas-design/evals/triggers.json +1 -0
  248. package/dist/agent-src/skills/check-refs/SKILL.md +5 -5
  249. package/dist/agent-src/skills/code-review/SKILL.md +6 -15
  250. package/dist/agent-src/skills/command-routing/SKILL.md +1 -1
  251. package/dist/agent-src/skills/command-writing/SKILL.md +2 -2
  252. package/dist/agent-src/skills/complexity-first-planning/SKILL.md +96 -0
  253. package/dist/agent-src/skills/complexity-first-planning/evals/triggers.json +17 -0
  254. package/dist/agent-src/skills/context-authoring/SKILL.md +2 -2
  255. package/dist/agent-src/skills/context-document/SKILL.md +35 -2
  256. package/dist/agent-src/skills/copilot-config/SKILL.md +3 -4
  257. package/dist/agent-src/skills/corpus-grounding/evals/triggers.json +1 -0
  258. package/dist/agent-src/skills/corpus-grounding/scripts/bm25_search.ts +482 -0
  259. package/dist/agent-src/skills/corpus-grounding/scripts/decision_engine.ts +803 -0
  260. package/dist/agent-src/skills/corpus-grounding/scripts/ground.ts +541 -0
  261. package/dist/agent-src/skills/corpus-grounding/scripts/schema_validator.ts +309 -0
  262. package/dist/agent-src/skills/database/SKILL.md +26 -4
  263. package/dist/agent-src/skills/decision-record/SKILL.md +1 -1
  264. package/dist/agent-src/skills/decision-record/evals/triggers.json +17 -0
  265. package/dist/agent-src/skills/decision-review/SKILL.md +179 -0
  266. package/dist/agent-src/skills/defense-in-depth/SKILL.md +1 -1
  267. package/dist/agent-src/skills/description-assist/SKILL.md +1 -1
  268. package/dist/agent-src/skills/design-intelligence/SKILL.md +1 -1
  269. package/dist/agent-src/skills/design-intelligence/data/manifest.json +23 -6
  270. package/dist/agent-src/skills/design-intelligence/evals/triggers.json +1 -0
  271. package/dist/agent-src/skills/design-tokens/evals/triggers.json +1 -0
  272. package/dist/agent-src/skills/design-tokens/scripts/tokens.ts +888 -0
  273. package/dist/agent-src/skills/developer-like-execution/SKILL.md +5 -4
  274. package/dist/agent-src/skills/doc-coauthoring/evals/triggers.json +1 -0
  275. package/dist/agent-src/skills/eloquent/evals/triggers.json +1 -0
  276. package/dist/agent-src/skills/emit-tickets/SKILL.md +198 -0
  277. package/dist/agent-src/skills/error-handling-patterns/SKILL.md +1 -1
  278. package/dist/agent-src/skills/estimate-ticket/evals/triggers.json +1 -0
  279. package/dist/agent-src/skills/feature-planning/SKILL.md +2 -2
  280. package/dist/agent-src/skills/git-workflow/SKILL.md +33 -0
  281. package/dist/agent-src/skills/guideline-writing/SKILL.md +2 -2
  282. package/dist/agent-src/skills/iconography/SKILL.md +88 -0
  283. package/dist/agent-src/skills/iconography/evals/triggers.json +17 -0
  284. package/dist/agent-src/skills/image-analyser/evals/triggers.json +1 -0
  285. package/dist/agent-src/skills/image-creator/evals/triggers.json +1 -0
  286. package/dist/agent-src/skills/image-editing/SKILL.md +100 -0
  287. package/dist/agent-src/skills/image-editing/evals/triggers.json +17 -0
  288. package/dist/agent-src/skills/image-generation/SKILL.md +95 -0
  289. package/dist/agent-src/skills/image-generation/evals/triggers.json +17 -0
  290. package/dist/agent-src/skills/image-provider-routing/SKILL.md +96 -0
  291. package/dist/agent-src/skills/image-provider-routing/evals/triggers.json +17 -0
  292. package/dist/agent-src/skills/launch-readiness/SKILL.md +21 -0
  293. package/dist/agent-src/skills/learning-to-rule-or-skill/SKILL.md +12 -8
  294. package/dist/agent-src/skills/lint-skills/SKILL.md +5 -5
  295. package/dist/agent-src/skills/logo-generation/SKILL.md +98 -0
  296. package/dist/agent-src/skills/logo-generation/evals/triggers.json +17 -0
  297. package/dist/agent-src/skills/markitdown/SKILL.md +1 -1
  298. package/dist/agent-src/skills/mcp-builder/SKILL.md +1 -1
  299. package/dist/agent-src/skills/md-language-check/SKILL.md +1 -1
  300. package/dist/agent-src/skills/memory-consolidation/SKILL.md +63 -17
  301. package/dist/agent-src/skills/motion-choreographer/SKILL.md +1 -1
  302. package/dist/agent-src/skills/php-coder/evals/triggers.json +1 -0
  303. package/dist/agent-src/skills/prediction-pool-optimizer/evals/triggers.json +1 -0
  304. package/dist/agent-src/skills/premortem/SKILL.md +137 -0
  305. package/dist/agent-src/skills/prompt-engineering-image/SKILL.md +115 -0
  306. package/dist/agent-src/skills/prompt-engineering-image/evals/triggers.json +17 -0
  307. package/dist/agent-src/skills/prompt-engineering-patterns/SKILL.md +1 -1
  308. package/dist/agent-src/skills/prompt-validator/evals/triggers.json +1 -0
  309. package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +12 -5
  310. package/dist/agent-src/skills/react-shadcn-ui/scripts/shadcn_add.ts +388 -0
  311. package/dist/agent-src/skills/readme-writing-package/SKILL.md +1 -1
  312. package/dist/agent-src/skills/reasoning-orchestrator/SKILL.md +119 -0
  313. package/dist/agent-src/skills/reasoning-orchestrator/evals/triggers.json +17 -0
  314. package/dist/agent-src/skills/receiving-code-review/SKILL.md +6 -6
  315. package/dist/agent-src/skills/refine-prompt/SKILL.md +1 -1
  316. package/dist/agent-src/skills/refine-ticket/SKILL.md +1 -1
  317. package/dist/agent-src/skills/refine-ticket/evals/triggers.json +1 -0
  318. package/dist/agent-src/skills/repomix-packer/SKILL.md +1 -1
  319. package/dist/agent-src/skills/roadmap-management/SKILL.md +16 -3
  320. package/dist/agent-src/skills/roadmap-writing/SKILL.md +76 -0
  321. package/dist/agent-src/skills/root-cause-frameworks/SKILL.md +146 -0
  322. package/dist/agent-src/skills/rule-refactor/SKILL.md +9 -9
  323. package/dist/agent-src/skills/rule-writing/SKILL.md +7 -7
  324. package/dist/agent-src/skills/script-writing/SKILL.md +2 -2
  325. package/dist/agent-src/skills/secrets-management/SKILL.md +1 -1
  326. package/dist/agent-src/skills/security-audit/SKILL.md +5 -0
  327. package/dist/agent-src/skills/skill-improvement-pipeline/SKILL.md +19 -3
  328. package/dist/agent-src/skills/skill-management/SKILL.md +3 -3
  329. package/dist/agent-src/skills/skill-reviewer/SKILL.md +1 -1
  330. package/dist/agent-src/skills/skill-writing/SKILL.md +5 -5
  331. package/dist/agent-src/skills/skill-writing/evals/triggers.json +1 -0
  332. package/dist/agent-src/skills/source-discovery/SKILL.md +182 -0
  333. package/dist/agent-src/skills/standards-from-config/SKILL.md +93 -0
  334. package/dist/agent-src/skills/subagent-orchestration/SKILL.md +10 -3
  335. package/dist/agent-src/skills/systematic-debugging/SKILL.md +7 -0
  336. package/dist/agent-src/skills/tailwind-engineer/scripts/tailwind_config_gen.ts +561 -0
  337. package/dist/agent-src/skills/testing-anti-patterns/SKILL.md +1 -1
  338. package/dist/agent-src/skills/testing-anti-patterns/process-anti-patterns.md +1 -1
  339. package/dist/agent-src/skills/threat-modeling/SKILL.md +1 -0
  340. package/dist/agent-src/skills/token-optimizer/SKILL.md +1 -1
  341. package/dist/agent-src/skills/typography-system/SKILL.md +138 -0
  342. package/dist/agent-src/skills/typography-system/evals/triggers.json +17 -0
  343. package/dist/agent-src/skills/upstream-contribute/SKILL.md +3 -3
  344. package/dist/agent-src/skills/verify-repair-loop/SKILL.md +209 -0
  345. package/dist/agent-src/skills/verify-repair-loop/evals/output-schema.yml +20 -0
  346. package/dist/agent-src/skills/verify-repair-loop/evals/triggers.json +17 -0
  347. package/dist/agent-src/templates/agent-settings.md +7 -0
  348. package/dist/agent-src/templates/agents/.gitattributes.fragment +0 -1
  349. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +4 -4
  350. package/dist/agent-src/templates/contexts/knowledge-card.md +69 -0
  351. package/dist/agent-src/templates/contexts/lesson-card.md +73 -0
  352. package/dist/agent-src/templates/roadmaps.md +29 -1
  353. package/dist/agent-src/templates/scripts/README.md +6 -6
  354. package/dist/agent-src/templates/scripts/check_memory.ts +640 -0
  355. package/dist/agent-src/templates/scripts/check_memory_proposal.ts +351 -0
  356. package/dist/agent-src/templates/scripts/implement_ticket/__main__.ts +27 -0
  357. package/dist/agent-src/templates/scripts/memory_hash.ts +333 -0
  358. package/dist/agent-src/templates/scripts/memory_lookup.ts +1067 -0
  359. package/dist/agent-src/templates/scripts/memory_report.ts +846 -0
  360. package/dist/agent-src/templates/scripts/memory_signal.ts +422 -0
  361. package/dist/agent-src/templates/scripts/memory_status.ts +191 -0
  362. package/dist/agent-src/templates/scripts/pr_review_routing.ts +523 -0
  363. package/dist/agent-src/templates/scripts/pr_risk_review.ts +0 -0
  364. package/dist/agent-src/templates/scripts/telemetry/aggregator.ts +0 -0
  365. package/dist/agent-src/templates/scripts/telemetry/boundary.ts +164 -0
  366. package/dist/agent-src/templates/scripts/telemetry/engagement.ts +479 -0
  367. package/dist/agent-src/templates/scripts/telemetry/report_renderer.ts +394 -0
  368. package/dist/agent-src/templates/scripts/telemetry/settings.ts +210 -0
  369. package/dist/agent-src/templates/scripts/telemetry_record.ts +255 -0
  370. package/dist/agent-src/templates/scripts/telemetry_report.ts +189 -0
  371. package/dist/agent-src/templates/scripts/telemetry_status.ts +312 -0
  372. package/dist/agent-src/templates/scripts/tier_usage_report.ts +597 -0
  373. package/dist/agent-src/templates/scripts/work_engine/__main__.ts +14 -0
  374. package/dist/agent-src/templates/scripts/work_engine/_lib/agent_settings.ts +1118 -0
  375. package/dist/agent-src/templates/scripts/work_engine/_lib/user_global_paths.ts +329 -0
  376. package/dist/agent-src/templates/scripts/work_engine/cli.ts +206 -0
  377. package/dist/agent-src/templates/scripts/work_engine/cli_args.ts +249 -0
  378. package/dist/agent-src/templates/scripts/work_engine/delivery_state.ts +225 -0
  379. package/dist/agent-src/templates/scripts/work_engine/directives/backend/analyze.ts +125 -0
  380. package/dist/agent-src/templates/scripts/work_engine/directives/backend/implement.ts +189 -0
  381. package/dist/agent-src/templates/scripts/work_engine/directives/backend/index.ts +94 -0
  382. package/dist/agent-src/templates/scripts/work_engine/directives/backend/memory.ts +193 -0
  383. package/dist/agent-src/templates/scripts/work_engine/directives/backend/plan.ts +267 -0
  384. package/dist/agent-src/templates/scripts/work_engine/directives/backend/refine.ts +518 -0
  385. package/dist/agent-src/templates/scripts/work_engine/directives/backend/report.ts +379 -0
  386. package/dist/agent-src/templates/scripts/work_engine/directives/backend/test.ts +268 -0
  387. package/dist/agent-src/templates/scripts/work_engine/directives/backend/verify.ts +258 -0
  388. package/dist/agent-src/templates/scripts/work_engine/directives/index.ts +32 -0
  389. package/dist/agent-src/templates/scripts/work_engine/directives/mixed/contract.ts +243 -0
  390. package/dist/agent-src/templates/scripts/work_engine/directives/mixed/index.ts +108 -0
  391. package/dist/agent-src/templates/scripts/work_engine/directives/mixed/stitch.ts +259 -0
  392. package/dist/agent-src/templates/scripts/work_engine/directives/mixed/ui.ts +216 -0
  393. package/dist/agent-src/templates/scripts/work_engine/directives/ui/_passthrough.ts +40 -0
  394. package/dist/agent-src/templates/scripts/work_engine/directives/ui/app_spec.ts +241 -0
  395. package/dist/agent-src/templates/scripts/work_engine/directives/ui/apply.ts +216 -0
  396. package/dist/agent-src/templates/scripts/work_engine/directives/ui/audit.ts +506 -0
  397. package/dist/agent-src/templates/scripts/work_engine/directives/ui/design.ts +325 -0
  398. package/dist/agent-src/templates/scripts/work_engine/directives/ui/index.ts +102 -0
  399. package/dist/agent-src/templates/scripts/work_engine/directives/ui/polish.ts +462 -0
  400. package/dist/agent-src/templates/scripts/work_engine/directives/ui/review.ts +474 -0
  401. package/dist/agent-src/templates/scripts/work_engine/directives/ui/scaffold.ts +352 -0
  402. package/dist/agent-src/templates/scripts/work_engine/directives/ui_trivial/_skipped.ts +33 -0
  403. package/dist/agent-src/templates/scripts/work_engine/directives/ui_trivial/apply.ts +213 -0
  404. package/dist/agent-src/templates/scripts/work_engine/directives/ui_trivial/index.ts +111 -0
  405. package/dist/agent-src/templates/scripts/work_engine/directives/ui_trivial/refine.ts +126 -0
  406. package/dist/agent-src/templates/scripts/work_engine/directives/ui_trivial/report.ts +112 -0
  407. package/dist/agent-src/templates/scripts/work_engine/directives/ui_trivial/test.ts +164 -0
  408. package/dist/agent-src/templates/scripts/work_engine/dispatcher.ts +515 -0
  409. package/dist/agent-src/templates/scripts/work_engine/emitters.ts +119 -0
  410. package/dist/agent-src/templates/scripts/work_engine/errors.ts +24 -0
  411. package/dist/agent-src/templates/scripts/work_engine/hook_bootstrap.ts +104 -0
  412. package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/_chat_history_base.ts +176 -0
  413. package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/chat_history_append.ts +41 -0
  414. package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/chat_history_halt_append.ts +89 -0
  415. package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/decision_gate.ts +193 -0
  416. package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/decision_trace.ts +304 -0
  417. package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/directive_set_guard.ts +110 -0
  418. package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/halt_surface_audit.ts +118 -0
  419. package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/index.ts +17 -0
  420. package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/memory_visibility.ts +161 -0
  421. package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/state_shape_validation.ts +45 -0
  422. package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/trace.ts +134 -0
  423. package/dist/agent-src/templates/scripts/work_engine/hooks/context.ts +94 -0
  424. package/dist/agent-src/templates/scripts/work_engine/hooks/events.ts +58 -0
  425. package/dist/agent-src/templates/scripts/work_engine/hooks/exceptions.ts +85 -0
  426. package/dist/agent-src/templates/scripts/work_engine/hooks/index.ts +27 -0
  427. package/dist/agent-src/templates/scripts/work_engine/hooks/registry.ts +66 -0
  428. package/dist/agent-src/templates/scripts/work_engine/hooks/runner.ts +90 -0
  429. package/dist/agent-src/templates/scripts/work_engine/hooks/settings.ts +260 -0
  430. package/dist/agent-src/templates/scripts/work_engine/input_builders.ts +260 -0
  431. package/dist/agent-src/templates/scripts/work_engine/intent/classify.ts +466 -0
  432. package/dist/agent-src/templates/scripts/work_engine/migration/v0_to_v1.ts +531 -0
  433. package/dist/agent-src/templates/scripts/work_engine/orchestration.ts +366 -0
  434. package/dist/agent-src/templates/scripts/work_engine/persona_policy.ts +97 -0
  435. package/dist/agent-src/templates/scripts/work_engine/resolvers/diff.ts +135 -0
  436. package/dist/agent-src/templates/scripts/work_engine/resolvers/file.ts +175 -0
  437. package/dist/agent-src/templates/scripts/work_engine/resolvers/prompt.ts +115 -0
  438. package/dist/agent-src/templates/scripts/work_engine/scoring/confidence.ts +415 -0
  439. package/dist/agent-src/templates/scripts/work_engine/scoring/decision_engine.ts +466 -0
  440. package/dist/agent-src/templates/scripts/work_engine/scoring/decision_trace.ts +298 -0
  441. package/dist/agent-src/templates/scripts/work_engine/scoring/memory_visibility.ts +444 -0
  442. package/dist/agent-src/templates/scripts/work_engine/stack/detect.ts +252 -0
  443. package/dist/agent-src/templates/scripts/work_engine/stack/runner.ts +745 -0
  444. package/dist/agent-src/templates/scripts/work_engine/state.ts +1151 -0
  445. package/dist/agent-src/templates/scripts/work_engine/state_io.ts +413 -0
  446. package/dist/agent-src/templates/tickets.md +120 -0
  447. package/dist/cli/agent-config.js +31 -300
  448. package/dist/cli/agent-config.js.map +1 -1
  449. package/dist/cli/commands/commands.js +11 -6
  450. package/dist/cli/commands/commands.js.map +1 -1
  451. package/dist/cli/commands/doctorShell.js +4 -22
  452. package/dist/cli/commands/doctorShell.js.map +1 -1
  453. package/dist/cli/commands/packs.js +1 -1
  454. package/dist/cli/commands/packs.js.map +1 -1
  455. package/dist/cli/commands/recordTriggerEval.js +179 -0
  456. package/dist/cli/commands/recordTriggerEval.js.map +1 -0
  457. package/dist/cli/commands/recordTriggerEval.test.js +113 -0
  458. package/dist/cli/commands/recordTriggerEval.test.js.map +1 -0
  459. package/dist/cli/commands/workspaces.js +1 -1
  460. package/dist/cli/commands/workspaces.js.map +1 -1
  461. package/dist/cli/discovery/loadManifest.js.map +1 -1
  462. package/dist/cli/main.js +330 -0
  463. package/dist/cli/main.js.map +1 -0
  464. package/dist/cli/python/knowledge_ingest.js +1048 -0
  465. package/dist/cli/python/knowledge_ingest.js.map +1 -0
  466. package/dist/cli/python/workspace_analytics.js +1085 -0
  467. package/dist/cli/python/workspace_analytics.js.map +1 -0
  468. package/dist/cli/python/workspace_crypto.js +544 -0
  469. package/dist/cli/python/workspace_crypto.js.map +1 -0
  470. package/dist/cli/python/workspace_documents.js +1216 -0
  471. package/dist/cli/python/workspace_documents.js.map +1 -0
  472. package/dist/cli/python/workspace_drive.js +574 -0
  473. package/dist/cli/python/workspace_drive.js.map +1 -0
  474. package/dist/cli/python/workspace_drive_health.js +628 -0
  475. package/dist/cli/python/workspace_drive_health.js.map +1 -0
  476. package/dist/cli/python/workspace_explain.js +765 -0
  477. package/dist/cli/python/workspace_explain.js.map +1 -0
  478. package/dist/cli/python/workspace_hosts.js +349 -0
  479. package/dist/cli/python/workspace_hosts.js.map +1 -0
  480. package/dist/cli/python/workspace_inbox.js +692 -0
  481. package/dist/cli/python/workspace_inbox.js.map +1 -0
  482. package/dist/cli/python/workspace_render.js +816 -0
  483. package/dist/cli/python/workspace_render.js.map +1 -0
  484. package/dist/cli/python/workspace_roles.js +487 -0
  485. package/dist/cli/python/workspace_roles.js.map +1 -0
  486. package/dist/cli/python/workspace_secrets.js +180 -0
  487. package/dist/cli/python/workspace_secrets.js.map +1 -0
  488. package/dist/cli/python/workspace_sessions.js +1079 -0
  489. package/dist/cli/python/workspace_sessions.js.map +1 -0
  490. package/dist/cli/python/workspace_skills.js +417 -0
  491. package/dist/cli/python/workspace_skills.js.map +1 -0
  492. package/dist/cli/registry.js +2 -0
  493. package/dist/cli/registry.js.map +1 -1
  494. package/dist/discovery/deprecation-report.md +1 -1
  495. package/dist/discovery/discovery-manifest.json +1802 -448
  496. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  497. package/dist/discovery/discovery-manifest.summary.md +12 -6
  498. package/dist/discovery/orphan-report.md +1 -1
  499. package/dist/discovery/packs.json +303 -43
  500. package/dist/discovery/trust-report.md +4 -4
  501. package/dist/discovery/workspaces.json +127 -41
  502. package/dist/install/install.mjs +13934 -0
  503. package/dist/mcp/registry-manifest.json +4 -4
  504. package/dist/router.json +1 -1
  505. package/dist/server/routes/wizard.js +54 -24
  506. package/dist/server/routes/wizard.js.map +1 -1
  507. package/dist/server/routes/workspace.js +44 -25
  508. package/dist/server/routes/workspace.js.map +1 -1
  509. package/dist/server/schemas/settings.js +33 -0
  510. package/dist/server/schemas/settings.js.map +1 -1
  511. package/docs/MIGRATION.md +1 -1
  512. package/docs/SKILL_CENSUS.md +344 -0
  513. package/docs/adrs/cost/0001-hard-stop-hook.md +5 -5
  514. package/docs/adrs/memory/0001-consumer-side-snapshot.md +15 -7
  515. package/docs/adrs/memory/README.md +6 -5
  516. package/docs/adrs/router/0001-three-tier-routing.md +2 -2
  517. package/docs/adrs/schema/0001-json-schema-frontmatter.md +2 -2
  518. package/docs/adrs/smoke/0001-per-tier-smoke-scripts.md +5 -5
  519. package/docs/adrs/telegraph/0001-default-off-until-bench.md +3 -3
  520. package/docs/architecture/augment-projection.md +1 -1
  521. package/docs/architecture/multi-tool-projection.md +3 -3
  522. package/docs/architecture.md +42 -11
  523. package/docs/archive/CHANGELOG-pre-2.2.0.md +30 -30
  524. package/docs/archive/CHANGELOG-pre-2.25.0.md +1 -1
  525. package/docs/archive/CHANGELOG-pre-4.5.0.md +1 -1
  526. package/docs/archive/CHANGELOG-pre-6.0.0.md +473 -0
  527. package/docs/benchmark.md +51 -53
  528. package/docs/benchmarks.md +2 -2
  529. package/docs/capability-matrix.md +32 -0
  530. package/docs/case-studies/frontend-design-positioning.md +86 -0
  531. package/docs/catalog.md +63 -15
  532. package/docs/command-flows.md +90 -92
  533. package/docs/command-naming-audit.md +60 -0
  534. package/docs/contracts/STABILITY.md +32 -0
  535. package/docs/contracts/adr-layout.md +2 -3
  536. package/docs/contracts/adr-level-6-productization.md +1 -1
  537. package/docs/contracts/agents-md-tech-stack.md +1 -1
  538. package/docs/contracts/ai-council-config.md +64 -29
  539. package/docs/contracts/analysis-memory-loop.md +149 -0
  540. package/docs/contracts/benchmark-ab-contract.md +3 -3
  541. package/docs/contracts/branch-protection-policy.md +27 -0
  542. package/docs/contracts/brand-token-consumption.md +69 -0
  543. package/docs/contracts/command-clusters.md +3 -2
  544. package/docs/contracts/command-surface-tiers.md +13 -0
  545. package/docs/contracts/cost-enforcement.md +1 -1
  546. package/docs/contracts/cost-summary-schema.md +1 -1
  547. package/docs/contracts/daily-workspace.md +1 -0
  548. package/docs/contracts/discovery-manifest.schema.json +25 -4
  549. package/docs/contracts/explain-modes.md +1 -1
  550. package/docs/contracts/implement-ticket-flow.md +15 -16
  551. package/docs/contracts/install-layout.md +249 -0
  552. package/docs/contracts/kernel-membership.md +1 -1
  553. package/docs/contracts/linear-ai-rules-inclusion.md +2 -2
  554. package/docs/contracts/linter-structural-model.md +1 -1
  555. package/docs/contracts/mcp-discovery-phase-notice.md +1 -1
  556. package/docs/contracts/mcp-tool-inventory.md +10 -10
  557. package/docs/contracts/measurement-baseline.md +1 -1
  558. package/docs/contracts/memory-visibility-v1.md +1 -5
  559. package/docs/contracts/multi-tool-projection-fidelity.md +1 -1
  560. package/docs/contracts/namespace.md +3 -3
  561. package/docs/contracts/no-runtime-boundary.md +56 -0
  562. package/docs/contracts/package-self-orientation.md +24 -0
  563. package/docs/contracts/persona-schema.md +1 -1
  564. package/docs/contracts/provider-lifecycle.md +3 -3
  565. package/docs/contracts/reasoning-discipline-protocol.md +83 -0
  566. package/docs/contracts/rule-classification.md +3 -3
  567. package/docs/contracts/rule-interactions.md +1 -1
  568. package/docs/contracts/skill-domains.md +1 -1
  569. package/docs/contracts/smoke-contracts.md +2 -2
  570. package/docs/contracts/surface-tiers.md +81 -0
  571. package/docs/contracts/ticket-bundle-format.md +228 -0
  572. package/docs/contracts/universal-skills.md +0 -1
  573. package/docs/contracts/workspace-boundary.md +84 -0
  574. package/docs/cookbook.md +152 -0
  575. package/docs/customization.md +15 -4
  576. package/docs/decisions/ADR-009-event4u-namespace.md +1 -1
  577. package/docs/decisions/ADR-013-discovery-frontmatter-contract.md +17 -1
  578. package/docs/decisions/ADR-026-explain-mode-translation.md +1 -1
  579. package/docs/decisions/ADR-056-unvalidated-video-adapters-disposition.md +1 -1
  580. package/docs/decisions/ADR-059-render-resume-filesystem-as-state.md +1 -1
  581. package/docs/decisions/ADR-060-comfyui-sandbox-model.md +1 -1
  582. package/docs/decisions/ADR-061-corpus-grounding-layer.md +48 -1
  583. package/docs/decisions/ADR-088-no-external-runtime-federation.md +26 -27
  584. package/docs/decisions/ADR-090-visibility-command-frontmatter-field.md +95 -0
  585. package/docs/decisions/ADR-091-split-meta-capability-packs.md +113 -0
  586. package/docs/decisions/ADR-092-defer-command-tier-alias-removal.md +93 -0
  587. package/docs/decisions/ADR-093-ai-council-config-user-global.md +111 -0
  588. package/docs/decisions/ADR-094-agent-memory-layer-removal.md +94 -0
  589. package/docs/decisions/ADR-095-workspace-boundary-contract.md +108 -0
  590. package/docs/decisions/ADR-096-analysis-workbench.md +110 -0
  591. package/docs/decisions/ADR-097-mission-recipe-privilege-boundary.md +121 -0
  592. package/docs/decisions/ADR-098-evidence-first-structure-discovery.md +154 -0
  593. package/docs/decisions/ADR-099-file-first-pattern-library.md +87 -0
  594. package/docs/decisions/ADR-100-global-knowledge-card-sharing.md +133 -0
  595. package/docs/decisions/ADR-101-ticket-bundle-emission.md +109 -0
  596. package/docs/decisions/ADR-102-ticket-handoff-paste-and-mcp.md +72 -0
  597. package/docs/decisions/ADR-103-global-knowledge-default-off-until-measured.md +92 -0
  598. package/docs/decisions/ADR-200-python-to-typescript-migration.md +193 -0
  599. package/docs/decisions/INDEX.md +15 -0
  600. package/docs/development.md +5 -7
  601. package/docs/distribution/mcp-submission-checklist.md +3 -3
  602. package/docs/featured-commands.md +1 -1
  603. package/docs/featured-skills.md +1 -1
  604. package/docs/getting-started-by-role.md +2 -0
  605. package/docs/getting-started.md +4 -4
  606. package/docs/guidelines/agent-infra/5w2h-analysis.md +1 -1
  607. package/docs/guidelines/agent-infra/comparison-matrix.md +1 -1
  608. package/docs/guidelines/agent-infra/corpus-grounding-authoring.md +1 -1
  609. package/docs/guidelines/agent-infra/critical-thinking.md +1 -1
  610. package/docs/guidelines/agent-infra/engineering-memory-data-format.md +1 -5
  611. package/docs/guidelines/agent-infra/failure-signatures.md +35 -0
  612. package/docs/guidelines/agent-infra/first-principles.md +1 -1
  613. package/docs/guidelines/agent-infra/frontier-reasoning-operating-profile.md +169 -0
  614. package/docs/guidelines/agent-infra/inversion-thinking.md +1 -1
  615. package/docs/guidelines/agent-infra/ios-simulator-guide.md +9 -14
  616. package/docs/guidelines/agent-infra/mcp-request-signing.md +19 -22
  617. package/docs/guidelines/agent-infra/memory-access.md +25 -31
  618. package/docs/guidelines/agent-infra/mental-models.md +1 -1
  619. package/docs/guidelines/agent-infra/model-recommendation.md +29 -0
  620. package/docs/guidelines/agent-infra/scqa-framework.md +3 -3
  621. package/docs/guidelines/agent-infra/security-lint-containment.md +81 -0
  622. package/docs/guidelines/agent-infra/six-hats.md +1 -1
  623. package/docs/guidelines/agent-infra/size-and-scope.md +17 -0
  624. package/docs/guidelines/agent-infra/skill-quality-checklist.md +2 -2
  625. package/docs/guidelines/agent-infra/systems-thinking.md +1 -1
  626. package/docs/guidelines/agent-infra/untrusted-input-spotlighting.md +72 -0
  627. package/docs/guides/frontend-design-corpus-refresh.md +83 -0
  628. package/docs/guides/skill-preview.md +1 -1
  629. package/docs/hook-payload-capture.md +4 -4
  630. package/docs/installation.md +1 -1
  631. package/docs/mcp.md +3 -3
  632. package/docs/migration/consumer-template-consumption-model.md +145 -0
  633. package/docs/migration/divergences/README.md +55 -0
  634. package/docs/migration/divergences/_template.md +50 -0
  635. package/docs/migration/divergences/bench-stats-float-precision.md +72 -0
  636. package/docs/migration/divergences/mcp-telemetry-node-sqlite.md +61 -0
  637. package/docs/migration/divergences/pack-mcp-content-gzip-body.md +53 -0
  638. package/docs/migration/divergences/src-scripts-build_cloud_bundle.md +63 -0
  639. package/docs/migration/divergences/src-scripts-check_memory.md +91 -0
  640. package/docs/migration/divergences/src-scripts-inventory_abstraction_budget.md +65 -0
  641. package/docs/migration/divergences/src-scripts-lint_marketplace.md +57 -0
  642. package/docs/migration/divergences/src-scripts-lint_mcp_registry_manifest.md +70 -0
  643. package/docs/migration/divergences/src-scripts-spotcheck_thin_root.md +60 -0
  644. package/docs/migration/divergences/src-scripts-validate_agent_settings.md +58 -0
  645. package/docs/migration/node-floor.md +86 -0
  646. package/docs/migration/yaml-roundtrip-spike.md +163 -0
  647. package/docs/parity/bench-external.json +58 -0
  648. package/docs/parity/external-runtime.md +46 -0
  649. package/docs/personas.md +6 -1
  650. package/docs/quality.md +3 -3
  651. package/docs/role-experiences.md +19 -0
  652. package/docs/safety.md +3 -3
  653. package/docs/setup/per-ide/windsurf.md +1 -1
  654. package/docs/skills-catalog.md +26 -2
  655. package/docs/threat-model.md +28 -0
  656. package/llms.txt +25 -1
  657. package/package.json +10 -15
  658. package/src/config/agent-settings.template.yml +128 -3
  659. package/src/config/discovery/packs.yml +60 -0
  660. package/src/config/discovery/unassigned-artefacts.yml +6 -0
  661. package/src/config/discovery/workspaces.yml +5 -3
  662. package/src/config/gitignore-block.txt +13 -0
  663. package/src/scripts/_cli/cmd_doctor.ts +2306 -0
  664. package/src/scripts/_cli/cmd_explain.ts +748 -0
  665. package/src/scripts/_cli/cmd_export.ts +375 -0
  666. package/src/scripts/_cli/cmd_migrate.ts +951 -0
  667. package/src/scripts/_cli/cmd_prune.ts +610 -0
  668. package/src/scripts/_cli/cmd_refresh.ts +530 -0
  669. package/src/scripts/_cli/cmd_settings_check.ts +407 -0
  670. package/src/scripts/_cli/cmd_settings_migrate.ts +344 -0
  671. package/src/scripts/_cli/cmd_sync.ts +381 -0
  672. package/src/scripts/_cli/cmd_uninstall.ts +833 -0
  673. package/src/scripts/_cli/cmd_update.ts +585 -0
  674. package/src/scripts/_cli/cmd_upgrade.ts +390 -0
  675. package/src/scripts/_cli/cmd_validate.ts +394 -0
  676. package/src/scripts/_cli/cmd_versions.ts +492 -0
  677. package/src/scripts/_cli/explain_last/assumptions.ts +114 -0
  678. package/src/scripts/_cli/explain_last/council.ts +197 -0
  679. package/src/scripts/_cli/explain_last/halt.ts +73 -0
  680. package/src/scripts/_cli/explain_last/index.ts +155 -0
  681. package/src/scripts/_cli/explain_last/inputs.ts +211 -0
  682. package/src/scripts/_cli/explain_last/memory.ts +231 -0
  683. package/src/scripts/_cli/explain_last/provider.ts +82 -0
  684. package/src/scripts/_cli/explain_last/render.ts +54 -0
  685. package/src/scripts/_cli/explain_last/route.ts +70 -0
  686. package/src/scripts/_cli/explain_last/scrubber.ts +138 -0
  687. package/src/scripts/_cli/explain_last/sections/assumptions.ts +51 -0
  688. package/src/scripts/_cli/explain_last/sections/council.ts +56 -0
  689. package/src/scripts/_cli/explain_last/sections/halt.ts +60 -0
  690. package/src/scripts/_cli/explain_last/sections/header.ts +50 -0
  691. package/src/scripts/_cli/explain_last/sections/index.ts +21 -0
  692. package/src/scripts/_cli/explain_last/sections/inputs.ts +63 -0
  693. package/src/scripts/_cli/explain_last/sections/memory.ts +124 -0
  694. package/src/scripts/_cli/explain_last/sections/pack.ts +42 -0
  695. package/src/scripts/_cli/explain_last/sections/provider.ts +51 -0
  696. package/src/scripts/_cli/explain_last/sections/route.ts +48 -0
  697. package/src/scripts/_cli/explain_last/state_loader.ts +119 -0
  698. package/src/scripts/_dispatch.bash +179 -163
  699. package/src/scripts/_lib/agent_settings.ts +1123 -0
  700. package/src/scripts/_lib/agent_src.ts +654 -0
  701. package/src/scripts/_lib/agents_overlay.ts +183 -0
  702. package/src/scripts/_lib/bench_ab_cache.ts +399 -0
  703. package/src/scripts/_lib/bench_ab_scoring.ts +352 -0
  704. package/src/scripts/_lib/bench_ab_scoring_v2.ts +751 -0
  705. package/src/scripts/_lib/bench_cost.ts +396 -0
  706. package/src/scripts/_lib/bench_quality.ts +237 -0
  707. package/src/scripts/_lib/bench_report.ts +255 -0
  708. package/src/scripts/_lib/bench_telegraph.ts +516 -0
  709. package/src/scripts/_lib/bench_telegraph_report.ts +272 -0
  710. package/src/scripts/_lib/changelog_eras.ts +398 -0
  711. package/src/scripts/_lib/claude_desktop_bundler.ts +324 -0
  712. package/src/scripts/_lib/cli_wrapper.ts +89 -0
  713. package/src/scripts/_lib/fs_atomic.ts +172 -0
  714. package/src/scripts/_lib/global_deploy_inventory.ts +639 -0
  715. package/src/scripts/_lib/install_layout.ts +87 -0
  716. package/src/scripts/_lib/install_regenerator.ts +157 -0
  717. package/src/scripts/_lib/installed_lock.ts +451 -0
  718. package/src/scripts/_lib/installed_tools.ts +518 -0
  719. package/src/scripts/_lib/json_pointers.ts +388 -0
  720. package/src/scripts/_lib/knowledge_global.ts +770 -0
  721. package/src/scripts/_lib/knowledge_global_promote.ts +453 -0
  722. package/src/scripts/_lib/knowledge_global_redaction.ts +448 -0
  723. package/src/scripts/_lib/link_crypto.ts +325 -0
  724. package/src/scripts/_lib/linked_projects.ts +613 -0
  725. package/src/scripts/_lib/model_tier.ts +65 -0
  726. package/src/scripts/_lib/module_detection.ts +275 -0
  727. package/src/scripts/_lib/node_sqlite.d.ts +32 -0
  728. package/src/scripts/_lib/pin_resolver.ts +264 -0
  729. package/src/scripts/_lib/py_random.ts +212 -0
  730. package/src/scripts/_lib/script_output.ts +147 -0
  731. package/src/scripts/_lib/security_lint.ts +623 -0
  732. package/src/scripts/_lib/surface_tiers.ts +127 -0
  733. package/src/scripts/_lib/token_count.ts +126 -0
  734. package/src/scripts/_lib/update_check.ts +297 -0
  735. package/src/scripts/_lib/user_global_paths.ts +329 -0
  736. package/src/scripts/_lib/value_ladder.ts +882 -0
  737. package/src/scripts/_lib/value_report.ts +617 -0
  738. package/src/scripts/_lib/zip_min.ts +175 -0
  739. package/src/scripts/adoption_report.ts +357 -0
  740. package/src/scripts/adoption_snapshot.ts +392 -0
  741. package/src/scripts/adoption_status.ts +424 -0
  742. package/src/scripts/adr/regenerate_index.ts +257 -0
  743. package/src/scripts/ai-image/adapters/flux.sh +45 -0
  744. package/src/scripts/ai-image/adapters/gemini-image.sh +45 -0
  745. package/src/scripts/ai-image/adapters/ideogram.sh +45 -0
  746. package/src/scripts/ai-image/adapters/recraft.sh +47 -0
  747. package/src/scripts/ai-video/adapters/comfyui.sh +3 -3
  748. package/src/scripts/ai-video/adapters/fal.sh +3 -3
  749. package/src/scripts/ai-video/adapters/gemini-veo.sh +3 -3
  750. package/src/scripts/ai-video/adapters/higgsfield.sh +3 -3
  751. package/src/scripts/ai-video/adapters/kling.sh +3 -3
  752. package/src/scripts/ai-video/adapters/musetalk.sh +2 -2
  753. package/src/scripts/ai-video/adapters/openai-images.sh +3 -3
  754. package/src/scripts/ai-video/adapters/replicate.sh +3 -3
  755. package/src/scripts/ai-video/adapters/sora.sh +3 -3
  756. package/src/scripts/ai-video/adapters/syncso.sh +3 -3
  757. package/src/scripts/ai-video/audio-adapters/allin1.sh +2 -2
  758. package/src/scripts/ai-video/audio-adapters/whisperx.sh +2 -2
  759. package/src/scripts/ai-video/lib/audio-adapter-contract.md +1 -1
  760. package/src/scripts/ai-video/lib/embed-provenance.sh +2 -2
  761. package/src/scripts/ai-video/lib/ingest-song.sh +2 -2
  762. package/src/scripts/ai-video/lib/parse-blueprint.sh +1 -1
  763. package/src/scripts/ai-video/lib/resume-scan.sh +2 -2
  764. package/src/scripts/ai-video/smoke-trace.sh +16 -7
  765. package/src/scripts/ai-video/stitch.sh +2 -2
  766. package/src/scripts/ai_council/_default_prices.ts +73 -0
  767. package/src/scripts/ai_council/advisors.ts +244 -0
  768. package/src/scripts/ai_council/airgap.ts +249 -0
  769. package/src/scripts/ai_council/budget_guard.ts +492 -0
  770. package/src/scripts/ai_council/bundler.ts +376 -0
  771. package/src/scripts/ai_council/cli_hints.ts +120 -0
  772. package/src/scripts/ai_council/clients.ts +2214 -0
  773. package/src/scripts/ai_council/compile_corpus.ts +681 -0
  774. package/src/scripts/ai_council/confidence_gate.ts +230 -0
  775. package/src/scripts/ai_council/config.ts +1729 -0
  776. package/src/scripts/ai_council/consensus.ts +551 -0
  777. package/src/scripts/ai_council/events_log.ts +327 -0
  778. package/src/scripts/ai_council/learn_low_impact_preview.ts +317 -0
  779. package/src/scripts/ai_council/low_impact.ts +1069 -0
  780. package/src/scripts/ai_council/low_impact_corpus.ts +662 -0
  781. package/src/scripts/ai_council/low_impact_intake.ts +222 -0
  782. package/src/scripts/ai_council/modes.ts +169 -0
  783. package/src/scripts/ai_council/necessity.ts +933 -0
  784. package/src/scripts/ai_council/orchestrator.ts +1689 -0
  785. package/src/scripts/ai_council/pricing.ts +267 -0
  786. package/src/scripts/ai_council/probation_gate.ts +282 -0
  787. package/src/scripts/ai_council/project_context.ts +308 -0
  788. package/src/scripts/ai_council/prompts.ts +600 -0
  789. package/src/scripts/ai_council/redact_low_impact_entry.ts +291 -0
  790. package/src/scripts/ai_council/replay.ts +314 -0
  791. package/src/scripts/ai_council/session.ts +558 -0
  792. package/src/scripts/ai_council/shadow_dispatch.ts +509 -0
  793. package/src/scripts/ai_council/solo_dispatch.ts +281 -0
  794. package/src/scripts/analysis_freshness.ts +343 -0
  795. package/src/scripts/annotate_discovery.ts +288 -0
  796. package/src/scripts/apply_modules_config.ts +537 -0
  797. package/src/scripts/audit_adr_coverage.ts +357 -0
  798. package/src/scripts/audit_auto_rules.ts +415 -0
  799. package/src/scripts/audit_cloud_compatibility.ts +608 -0
  800. package/src/scripts/audit_command_surface.ts +1227 -0
  801. package/src/scripts/audit_initial_context.ts +694 -0
  802. package/src/scripts/audit_likelihood.ts +434 -0
  803. package/src/scripts/audit_mcp_tools.ts +252 -0
  804. package/src/scripts/audit_overlap.ts +421 -0
  805. package/src/scripts/audit_skill_descriptions.ts +402 -0
  806. package/src/scripts/audit_skill_overlap.ts +576 -0
  807. package/src/scripts/audit_user_type_axis.ts +264 -0
  808. package/src/scripts/backfill_model_tier.ts +349 -0
  809. package/src/scripts/bench_ab_cache_dispatch.ts +126 -0
  810. package/src/scripts/bench_ab_clone.ts +610 -0
  811. package/src/scripts/bench_ab_diff.ts +609 -0
  812. package/src/scripts/bench_ab_integrity.ts +261 -0
  813. package/src/scripts/bench_ab_run.ts +417 -0
  814. package/src/scripts/bench_ab_task_runner.ts +1382 -0
  815. package/src/scripts/bench_ab_tracka_run.ts +436 -0
  816. package/src/scripts/bench_ab_v2_run.ts +585 -0
  817. package/src/scripts/bench_ab_v2_stats.ts +1018 -0
  818. package/src/scripts/bench_baseline_ready.ts +326 -0
  819. package/src/scripts/bench_condense_memory.ts +479 -0
  820. package/src/scripts/bench_drift_check.ts +503 -0
  821. package/src/scripts/bench_per_tool.ts +591 -0
  822. package/src/scripts/bench_rtk_savings.ts +710 -0
  823. package/src/scripts/bench_run.ts +509 -0
  824. package/src/scripts/bench_runner.ts +519 -0
  825. package/src/scripts/build_cloud_bundle.ts +692 -0
  826. package/src/scripts/build_discovery_manifest.ts +1371 -0
  827. package/src/scripts/build_linear_digest.ts +368 -0
  828. package/src/scripts/build_mcp_registry_manifest.ts +351 -0
  829. package/src/scripts/build_rule_trigger_matrix.ts +469 -0
  830. package/src/scripts/capture_showcase_session.ts +735 -0
  831. package/src/scripts/chat_history.ts +2301 -0
  832. package/src/scripts/check_always_budget.ts +694 -0
  833. package/src/scripts/check_artefact_checksums.ts +281 -0
  834. package/src/scripts/check_augment_description_cap.ts +133 -0
  835. package/src/scripts/check_augmentignore.ts +108 -0
  836. package/src/scripts/check_beta_review_markers.ts +234 -0
  837. package/src/scripts/check_bite_sized_granularity.ts +116 -0
  838. package/src/scripts/check_cluster_patterns.ts +285 -0
  839. package/src/scripts/check_command_count_messaging.ts +224 -0
  840. package/src/scripts/check_condensation.ts +900 -0
  841. package/src/scripts/check_condensed_paths.ts +414 -0
  842. package/src/scripts/check_context_paths.ts +388 -0
  843. package/src/scripts/check_council_config_location.ts +260 -0
  844. package/src/scripts/check_council_layout.ts +180 -0
  845. package/src/scripts/check_council_references.ts +345 -0
  846. package/src/scripts/check_discovery_determinism.ts +124 -0
  847. package/src/scripts/check_gate_paths.ts +230 -0
  848. package/src/scripts/check_iron_law_prominence.ts +298 -0
  849. package/src/scripts/check_kernel_rule_bundle.ts +242 -0
  850. package/src/scripts/check_knowledge_cards.ts +759 -0
  851. package/src/scripts/check_md_language.ts +291 -0
  852. package/src/scripts/check_memory.ts +845 -0
  853. package/src/scripts/check_memory_proposal.ts +351 -0
  854. package/src/scripts/check_module_management_neutral.ts +238 -0
  855. package/src/scripts/check_no_conflict_markers.ts +298 -0
  856. package/src/scripts/check_no_conflict_markers_allowlist.json +4 -0
  857. package/src/scripts/check_no_external_sources.ts +351 -0
  858. package/src/scripts/check_no_local_settings_committed.ts +69 -0
  859. package/src/scripts/check_no_new_legacy_path.ts +188 -0
  860. package/src/scripts/check_no_roadmap_refs.ts +304 -0
  861. package/src/scripts/check_one_off_location.ts +165 -0
  862. package/src/scripts/check_overlay_cascade_subdirs.ts +188 -0
  863. package/src/scripts/check_portability.ts +860 -0
  864. package/src/scripts/check_proposal.ts +0 -0
  865. package/src/scripts/check_public_catalog_links.ts +204 -0
  866. package/src/scripts/check_public_links.ts +357 -0
  867. package/src/scripts/check_references.ts +963 -0
  868. package/src/scripts/check_release_includes_discovery.ts +94 -0
  869. package/src/scripts/check_release_pr_shape.ts +222 -0
  870. package/src/scripts/check_release_published.ts +235 -0
  871. package/src/scripts/check_release_trunk_sync.ts +203 -0
  872. package/src/scripts/check_reply_consistency.ts +359 -0
  873. package/src/scripts/check_roadmap_trackable.ts +268 -0
  874. package/src/scripts/check_role_doc_links.ts +187 -0
  875. package/src/scripts/check_safety_floor_untouched.ts +160 -0
  876. package/src/scripts/check_skill_requires.ts +205 -0
  877. package/src/scripts/check_structural_breaking.ts +170 -0
  878. package/src/scripts/check_surface_tiers.ts +567 -0
  879. package/src/scripts/check_template_pin_drift.ts +222 -0
  880. package/src/scripts/check_test_coverage_diff.ts +235 -0
  881. package/src/scripts/check_token_optimizer_freshness.ts +183 -0
  882. package/src/scripts/check_trigger_evals.ts +375 -0
  883. package/src/scripts/check_update_banner.ts +143 -0
  884. package/src/scripts/ci_status.ts +0 -0
  885. package/src/scripts/ci_summary.ts +235 -0
  886. package/src/scripts/ci_time_ratio.ts +526 -0
  887. package/src/scripts/command_suggester/cooldown.ts +176 -0
  888. package/src/scripts/command_suggester/index.ts +41 -0
  889. package/src/scripts/command_suggester/loader.ts +205 -0
  890. package/src/scripts/command_suggester/match.ts +294 -0
  891. package/src/scripts/command_suggester/rank.ts +201 -0
  892. package/src/scripts/command_suggester/render.ts +122 -0
  893. package/src/scripts/command_suggester/sanitize.ts +114 -0
  894. package/src/scripts/command_suggester/settings.ts +186 -0
  895. package/src/scripts/command_suggester/types.ts +0 -0
  896. package/src/scripts/compile_router.ts +297 -0
  897. package/src/scripts/condense.sh +7 -1
  898. package/src/scripts/condense.ts +2035 -0
  899. package/src/scripts/condense_memory.ts +334 -0
  900. package/src/scripts/config/index.ts +15 -0
  901. package/src/scripts/config/packs.ts +310 -0
  902. package/src/scripts/config/presets.ts +369 -0
  903. package/src/scripts/config/profile_explain.ts +114 -0
  904. package/src/scripts/config/profiles.ts +277 -0
  905. package/src/scripts/config/session_profiles.ts +1064 -0
  906. package/src/scripts/context_hygiene_hook.ts +272 -0
  907. package/src/scripts/cost_by_conversation.ts +444 -0
  908. package/src/scripts/cost_summary.ts +407 -0
  909. package/src/scripts/council_cli.ts +2827 -0
  910. package/src/scripts/council_prune.ts +153 -0
  911. package/src/scripts/cross_repo_retrieve.ts +694 -0
  912. package/src/scripts/discovery_stats.ts +218 -0
  913. package/src/scripts/evidence_report.ts +580 -0
  914. package/src/scripts/external_sources_denylist.json +92 -0
  915. package/src/scripts/extract_audit_patterns.ts +394 -0
  916. package/src/scripts/first_run_gate_hook.ts +246 -0
  917. package/src/scripts/gen_discovery_baseline.ts +297 -0
  918. package/src/scripts/generate_capabilities_index.ts +496 -0
  919. package/src/scripts/generate_capability_matrix.ts +430 -0
  920. package/src/scripts/generate_catalog.ts +178 -0
  921. package/src/scripts/generate_command_flows.ts +316 -0
  922. package/src/scripts/generate_cookbook.ts +302 -0
  923. package/src/scripts/generate_index.ts +500 -0
  924. package/src/scripts/generate_ownership_matrix.ts +646 -0
  925. package/src/scripts/generate_pack_manifests.ts +1025 -0
  926. package/src/scripts/generate_role_experiences_catalog.ts +265 -0
  927. package/src/scripts/hermetic-install.sh +22 -11
  928. package/src/scripts/hook_manifest.yaml +37 -15
  929. package/src/scripts/hooks/augment-chat-history.sh +3 -10
  930. package/src/scripts/hooks/augment-context-hygiene.sh +3 -10
  931. package/src/scripts/hooks/augment-dispatcher.sh +3 -10
  932. package/src/scripts/hooks/augment-onboarding-gate.sh +3 -10
  933. package/src/scripts/hooks/augment-roadmap-progress.sh +3 -10
  934. package/src/scripts/hooks/block_no_verify.ts +413 -0
  935. package/src/scripts/hooks/cline-dispatcher.sh +3 -10
  936. package/src/scripts/hooks/cowork-dispatcher.sh +3 -14
  937. package/src/scripts/hooks/cursor-dispatcher.sh +3 -10
  938. package/src/scripts/hooks/dispatch_hook.ts +851 -0
  939. package/src/scripts/hooks/dispatch_issues.ts +226 -0
  940. package/src/scripts/hooks/envelope.ts +140 -0
  941. package/src/scripts/hooks/gemini-dispatcher.sh +3 -8
  942. package/src/scripts/hooks/replay_hook.ts +364 -0
  943. package/src/scripts/hooks/state_io.ts +293 -0
  944. package/src/scripts/hooks/windsurf-dispatcher.sh +3 -9
  945. package/src/scripts/hooks_doctor.ts +418 -0
  946. package/src/scripts/hooks_status.ts +292 -0
  947. package/src/scripts/injection_scan_hook.ts +285 -0
  948. package/src/scripts/install +36 -22
  949. package/src/scripts/install-hooks.sh +29 -12
  950. package/src/scripts/install.sh +38 -14
  951. package/src/scripts/install.ts +4515 -0
  952. package/src/scripts/inventory_abstraction_budget.ts +1104 -0
  953. package/src/scripts/inventory_frontmatter.ts +320 -0
  954. package/src/scripts/inventory_meta_layers.ts +516 -0
  955. package/src/scripts/iron_law_sha.ts +233 -0
  956. package/src/scripts/knowledge_global_cli.ts +1105 -0
  957. package/src/scripts/linked_projects_list.ts +310 -0
  958. package/src/scripts/lint_agent_security.ts +224 -0
  959. package/src/scripts/lint_agent_skill_names.ts +241 -0
  960. package/src/scripts/lint_agents_layout.ts +205 -0
  961. package/src/scripts/lint_agents_md.ts +294 -0
  962. package/src/scripts/lint_archived_skills.ts +309 -0
  963. package/src/scripts/lint_artefact_frontmatter.ts +359 -0
  964. package/src/scripts/lint_bench_ab.ts +319 -0
  965. package/src/scripts/lint_bench_corpus.ts +421 -0
  966. package/src/scripts/lint_command_flow_coverage.ts +231 -0
  967. package/src/scripts/lint_command_routing.ts +377 -0
  968. package/src/scripts/lint_command_tiers.ts +345 -0
  969. package/src/scripts/lint_command_verbs.ts +379 -0
  970. package/src/scripts/lint_commit_subjects.ts +243 -0
  971. package/src/scripts/lint_context_spine_usage.ts +198 -0
  972. package/src/scripts/lint_discovery_manifest.ts +540 -0
  973. package/src/scripts/lint_discovery_vocabulary.ts +393 -0
  974. package/src/scripts/lint_empty_roadmaps.ts +147 -0
  975. package/src/scripts/lint_eval_freshness.ts +335 -0
  976. package/src/scripts/lint_examples.ts +183 -0
  977. package/src/scripts/lint_explain_trace.ts +381 -0
  978. package/src/scripts/lint_featured_skills.ts +0 -0
  979. package/src/scripts/lint_flows.ts +701 -0
  980. package/src/scripts/lint_framework_leakage.ts +497 -0
  981. package/src/scripts/lint_framework_leakage_allowlist.json +8 -1
  982. package/src/scripts/lint_frontmatter_boilerplate.ts +356 -0
  983. package/src/scripts/lint_ghostwriter_source.ts +389 -0
  984. package/src/scripts/lint_global_paths.ts +420 -0
  985. package/src/scripts/lint_handoffs.ts +362 -0
  986. package/src/scripts/lint_hidden_unicode.ts +350 -0
  987. package/src/scripts/lint_hook_concern_budget.ts +319 -0
  988. package/src/scripts/lint_hook_manifest.ts +354 -0
  989. package/src/scripts/lint_instruction_smuggling.ts +173 -0
  990. package/src/scripts/lint_load_context.ts +371 -0
  991. package/src/scripts/lint_marketplace.ts +286 -0
  992. package/src/scripts/lint_marketplace_install_completeness.ts +309 -0
  993. package/src/scripts/lint_mcp_config_security.ts +225 -0
  994. package/src/scripts/lint_mcp_registry_manifest.ts +350 -0
  995. package/src/scripts/lint_media_policy_linkage.ts +224 -0
  996. package/src/scripts/lint_missions.ts +774 -0
  997. package/src/scripts/lint_model_tier_coverage.ts +151 -0
  998. package/src/scripts/lint_namespace.ts +295 -0
  999. package/src/scripts/lint_namespace_collisions.ts +203 -0
  1000. package/src/scripts/lint_new_skill_gate.ts +462 -0
  1001. package/src/scripts/lint_no_new_atomic_commands.ts +342 -0
  1002. package/src/scripts/lint_one_off_age.ts +348 -0
  1003. package/src/scripts/lint_orchestration_dsl.ts +377 -0
  1004. package/src/scripts/lint_orchestrator_auto_detect.ts +177 -0
  1005. package/src/scripts/lint_pack_boundaries.ts +366 -0
  1006. package/src/scripts/lint_pack_dependencies.ts +541 -0
  1007. package/src/scripts/lint_pack_first_win.ts +202 -0
  1008. package/src/scripts/lint_persona_governance.ts +292 -0
  1009. package/src/scripts/lint_positioning.ts +257 -0
  1010. package/src/scripts/lint_profile_overlay_set_only.ts +324 -0
  1011. package/src/scripts/lint_readme_jargon.ts +189 -0
  1012. package/src/scripts/lint_readme_size.ts +73 -0
  1013. package/src/scripts/lint_regression.ts +497 -0
  1014. package/src/scripts/lint_roadmap_ci_steps.ts +252 -0
  1015. package/src/scripts/lint_roadmap_complexity.ts +295 -0
  1016. package/src/scripts/lint_roadmap_later_disposition.ts +357 -0
  1017. package/src/scripts/lint_role_experiences.ts +410 -0
  1018. package/src/scripts/lint_rule_interactions.ts +281 -0
  1019. package/src/scripts/lint_rule_tiers.ts +169 -0
  1020. package/src/scripts/lint_showcase_sessions.ts +254 -0
  1021. package/src/scripts/lint_skill_frontmatter_safety.ts +279 -0
  1022. package/src/scripts/lint_skill_originality.ts +586 -0
  1023. package/src/scripts/lint_skill_originality_allowlist.json +20 -0
  1024. package/src/scripts/lint_skill_tools.ts +320 -0
  1025. package/src/scripts/lint_ticket_buildable.ts +1027 -0
  1026. package/src/scripts/lint_topics_yaml.ts +203 -0
  1027. package/src/scripts/lint_trust_coherence.ts +377 -0
  1028. package/src/scripts/lint_value_dashboard.ts +314 -0
  1029. package/src/scripts/lint_workflow_security.ts +637 -0
  1030. package/src/scripts/lint_workflow_security_allowlist.json +20 -0
  1031. package/src/scripts/lint_workspace_boundary.ts +248 -0
  1032. package/src/scripts/mcp_parity_smoke.ts +638 -0
  1033. package/src/scripts/mcp_render.ts +346 -0
  1034. package/src/scripts/mcp_server/__main__.ts +28 -0
  1035. package/src/scripts/mcp_server/catalog.ts +154 -0
  1036. package/src/scripts/mcp_server/consumer_tool_catalog.json +2 -3
  1037. package/src/scripts/mcp_server/index.ts +24 -0
  1038. package/src/scripts/mcp_server/metadata.ts +83 -0
  1039. package/src/scripts/mcp_server/prompts.ts +711 -0
  1040. package/src/scripts/mcp_server/resources.ts +343 -0
  1041. package/src/scripts/mcp_server/server.ts +439 -0
  1042. package/src/scripts/mcp_server/telemetry.ts +154 -0
  1043. package/src/scripts/mcp_server/tools.ts +1031 -0
  1044. package/src/scripts/mcp_setup.sh +25 -52
  1045. package/src/scripts/mcp_telemetry_health.ts +362 -0
  1046. package/src/scripts/mcp_telemetry_query.ts +371 -0
  1047. package/src/scripts/mcp_telemetry_store.ts +422 -0
  1048. package/src/scripts/measure_augment_budget.ts +453 -0
  1049. package/src/scripts/measure_density.ts +618 -0
  1050. package/src/scripts/measure_frugality_savings.ts +353 -0
  1051. package/src/scripts/measure_markitdown_lift.ts +299 -0
  1052. package/src/scripts/measure_patterns.ts +682 -0
  1053. package/src/scripts/measure_projection_bytes.ts +425 -0
  1054. package/src/scripts/measure_rule_budget.ts +627 -0
  1055. package/src/scripts/measure_skill_reduction.ts +442 -0
  1056. package/src/scripts/media/lib/adapter-common.sh +247 -0
  1057. package/src/scripts/media/lib/adapter-contract.md +329 -0
  1058. package/src/scripts/media/lib/fixtures/comfyui/result.json +1 -0
  1059. package/src/scripts/media/lib/fixtures/fal/result.json +1 -0
  1060. package/src/scripts/media/lib/fixtures/flux/asset-0001.png +0 -0
  1061. package/src/scripts/media/lib/fixtures/flux/result.json +1 -0
  1062. package/src/scripts/media/lib/fixtures/gemini-image/asset-0001.png +0 -0
  1063. package/src/scripts/media/lib/fixtures/gemini-image/result.json +1 -0
  1064. package/src/scripts/media/lib/fixtures/gemini-veo/result.json +1 -0
  1065. package/src/scripts/media/lib/fixtures/higgsfield/result.json +1 -0
  1066. package/src/scripts/media/lib/fixtures/ideogram/asset-0001.png +0 -0
  1067. package/src/scripts/media/lib/fixtures/ideogram/result.json +1 -0
  1068. package/src/scripts/media/lib/fixtures/kling/result.json +1 -0
  1069. package/src/scripts/media/lib/fixtures/musetalk/result.json +1 -0
  1070. package/src/scripts/media/lib/fixtures/openai-images/result.json +1 -0
  1071. package/src/scripts/media/lib/fixtures/recraft/asset-0001.svg +1 -0
  1072. package/src/scripts/media/lib/fixtures/recraft/result.json +1 -0
  1073. package/src/scripts/media/lib/fixtures/replicate/result.json +1 -0
  1074. package/src/scripts/media/lib/fixtures/sora/result.json +1 -0
  1075. package/src/scripts/media/lib/fixtures/syncso/result.json +1 -0
  1076. package/src/scripts/media/lib/load-config.sh +180 -0
  1077. package/src/scripts/media/lib/redact.sh +85 -0
  1078. package/src/scripts/memory_hash.ts +331 -0
  1079. package/src/scripts/memory_lookup.ts +1278 -0
  1080. package/src/scripts/memory_report.ts +845 -0
  1081. package/src/scripts/memory_signal.ts +417 -0
  1082. package/src/scripts/memory_status.ts +189 -0
  1083. package/src/scripts/migrate_command_suggestions.ts +341 -0
  1084. package/src/scripts/migrate_frontmatter_defaults.ts +539 -0
  1085. package/src/scripts/migration_status.ts +301 -0
  1086. package/src/scripts/mine_session.ts +645 -0
  1087. package/src/scripts/minimal_safe_diff_hook.ts +355 -0
  1088. package/src/scripts/move_artefact.ts +869 -0
  1089. package/src/scripts/new_skill.ts +404 -0
  1090. package/src/scripts/onboarding_gate_hook.ts +224 -0
  1091. package/src/scripts/pack_dependency_allowlist.json +2 -2
  1092. package/src/scripts/pack_mcp_content.ts +552 -0
  1093. package/src/scripts/parity/README.md +140 -0
  1094. package/src/scripts/parity/compare.ts +189 -0
  1095. package/src/scripts/parity/coverage_diff.ts +199 -0
  1096. package/src/scripts/parity/phase-manifest.json +93 -0
  1097. package/src/scripts/parity/phase_gate.ts +270 -0
  1098. package/src/scripts/parity/replay.ts +320 -0
  1099. package/src/scripts/pattern_share.ts +363 -0
  1100. package/src/scripts/plan_physical_move.ts +605 -0
  1101. package/src/scripts/prediction-pool/poisson_sim.ts +537 -0
  1102. package/src/scripts/prediction-pool/pool_winsim.ts +677 -0
  1103. package/src/scripts/prediction-pool/score_ev.ts +546 -0
  1104. package/src/scripts/print_required_checks.ts +249 -0
  1105. package/src/scripts/probe_projection_fidelity.ts +468 -0
  1106. package/src/scripts/probe_skill_registration.ts +787 -0
  1107. package/src/scripts/profile_staleness_hook.ts +169 -0
  1108. package/src/scripts/profile_use.ts +227 -0
  1109. package/src/scripts/project_thin_rules.ts +387 -0
  1110. package/src/scripts/propose_modules_config.ts +311 -0
  1111. package/src/scripts/prototype_lint_contradictions.ts +414 -0
  1112. package/src/scripts/prove_pack_extractable.ts +388 -0
  1113. package/src/scripts/readme_linter.ts +913 -0
  1114. package/src/scripts/redact_hook_capture.ts +325 -0
  1115. package/src/scripts/refine_ticket_detect.ts +703 -0
  1116. package/src/scripts/release.ts +1697 -0
  1117. package/src/scripts/render_benchmark_md.ts +664 -0
  1118. package/src/scripts/render_value_md.ts +506 -0
  1119. package/src/scripts/repro/repro_marketplace_install_gap.sh +1 -1
  1120. package/src/scripts/roadmap_progress_hook.ts +410 -0
  1121. package/src/scripts/router_telemetry.ts +972 -0
  1122. package/src/scripts/run.ts +98 -0
  1123. package/src/scripts/run_skill_evals.ts +477 -0
  1124. package/src/scripts/runtime_dispatcher.ts +586 -0
  1125. package/src/scripts/runtime_handler.ts +231 -0
  1126. package/src/scripts/runtime_registry.ts +394 -0
  1127. package/src/scripts/schemas/command.schema.json +7 -1
  1128. package/src/scripts/schemas/mission-catalog.schema.json +112 -0
  1129. package/src/scripts/schemas/mission.schema.json +87 -0
  1130. package/src/scripts/schemas/pack.schema.json +6 -0
  1131. package/src/scripts/schemas/rule.schema.json +1 -0
  1132. package/src/scripts/schemas/skill.schema.json +1 -0
  1133. package/src/scripts/schemas/ticket-manifest.schema.json +35 -0
  1134. package/src/scripts/schemas/ticket.schema.json +60 -0
  1135. package/src/scripts/score_skill_selection.ts +570 -0
  1136. package/src/scripts/security_audit_config.ts +423 -0
  1137. package/src/scripts/skill_collision_clusters.ts +448 -0
  1138. package/src/scripts/skill_discovery.ts +690 -0
  1139. package/src/scripts/skill_linter.ts +4276 -0
  1140. package/src/scripts/skill_overlap.ts +414 -0
  1141. package/src/scripts/skill_preview.ts +548 -0
  1142. package/src/scripts/skill_tools/audit_persona_coverage.ts +427 -0
  1143. package/src/scripts/skill_tools/audit_user_type_coverage.ts +507 -0
  1144. package/src/scripts/skill_tools/index.ts +28 -0
  1145. package/src/scripts/skill_tools/run_block_d_eval.ts +373 -0
  1146. package/src/scripts/skill_tools/score_skill_relevance.ts +475 -0
  1147. package/src/scripts/skill_tools/suggest_skill_for_task.ts +288 -0
  1148. package/src/scripts/skill_trigger_eval.ts +1046 -0
  1149. package/src/scripts/skill_usage_collect.ts +465 -0
  1150. package/src/scripts/skill_usage_report.ts +364 -0
  1151. package/src/scripts/smoke/kernel.sh +4 -5
  1152. package/src/scripts/smoke/router.sh +76 -76
  1153. package/src/scripts/smoke/schema.sh +2 -2
  1154. package/src/scripts/smoke/skills.sh +73 -52
  1155. package/src/scripts/smoke_path_resolution.ts +194 -0
  1156. package/src/scripts/smoke_quickstart.ts +224 -0
  1157. package/src/scripts/snapshot_agent_outputs.ts +375 -0
  1158. package/src/scripts/spotcheck_thin_root.ts +247 -0
  1159. package/src/scripts/surface-tiers.yml +68 -0
  1160. package/src/scripts/sync_agent_settings.ts +763 -0
  1161. package/src/scripts/sync_github_metadata.ts +550 -0
  1162. package/src/scripts/sync_gitignore.ts +630 -0
  1163. package/src/scripts/sync_yaml_rt.ts +910 -0
  1164. package/src/scripts/telegraph_stats.ts +447 -0
  1165. package/src/scripts/tool_registry.ts +330 -0
  1166. package/src/scripts/tools/adapter_errors.ts +93 -0
  1167. package/src/scripts/tools/base_adapter.ts +147 -0
  1168. package/src/scripts/tools/github_adapter.ts +229 -0
  1169. package/src/scripts/tools/jira_adapter.ts +196 -0
  1170. package/src/scripts/trigger_coverage.ts +251 -0
  1171. package/src/scripts/update_counts.ts +284 -0
  1172. package/src/scripts/update_prices.ts +219 -0
  1173. package/src/scripts/validate_agent_settings.ts +265 -0
  1174. package/src/scripts/validate_decision_engine.ts +366 -0
  1175. package/src/scripts/validate_discovery_manifest.ts +160 -0
  1176. package/src/scripts/validate_frontmatter.ts +1030 -0
  1177. package/src/scripts/validate_pack_yaml.ts +0 -0
  1178. package/src/scripts/validate_safe_paths.ts +164 -0
  1179. package/src/scripts/validate_telegraph_carveouts.ts +485 -0
  1180. package/src/scripts/verify_before_complete_hook.ts +306 -0
  1181. package/src/scripts/verify_physical_move.ts +411 -0
  1182. package/src/scripts/wrapper_freshness_hook.ts +179 -0
  1183. package/dist/agent-src/commands/chat-history/learn.md +0 -184
  1184. package/dist/agent-src/commands/chat-history/show.md +0 -113
  1185. package/dist/agent-src/commands/fix/pr-bot-comments.md +0 -157
  1186. package/dist/agent-src/commands/fix/pr-developer-comments.md +0 -163
  1187. package/dist/agent-src/scripts/update_roadmap_progress.py +0 -537
  1188. package/dist/agent-src/skills/corpus-grounding/scripts/bm25_search.py +0 -212
  1189. package/dist/agent-src/skills/corpus-grounding/scripts/decision_engine.py +0 -438
  1190. package/dist/agent-src/skills/corpus-grounding/scripts/ground.py +0 -166
  1191. package/dist/agent-src/skills/corpus-grounding/scripts/schema_validator.py +0 -160
  1192. package/dist/agent-src/skills/design-tokens/scripts/tokens.py +0 -296
  1193. package/dist/agent-src/skills/react-shadcn-ui/scripts/shadcn_add.py +0 -299
  1194. package/dist/agent-src/skills/tailwind-engineer/scripts/tailwind_config_gen.py +0 -463
  1195. package/dist/agent-src/templates/agents/memory/architecture-decisions.example.yml +0 -95
  1196. package/dist/agent-src/templates/scripts/check_memory.py +0 -283
  1197. package/dist/agent-src/templates/scripts/check_memory_proposal.py +0 -180
  1198. package/dist/agent-src/templates/scripts/implement_ticket/__init__.py +0 -94
  1199. package/dist/agent-src/templates/scripts/implement_ticket/__main__.py +0 -15
  1200. package/dist/agent-src/templates/scripts/memory_hash.py +0 -75
  1201. package/dist/agent-src/templates/scripts/memory_lookup.py +0 -577
  1202. package/dist/agent-src/templates/scripts/memory_report.py +0 -184
  1203. package/dist/agent-src/templates/scripts/memory_signal.py +0 -167
  1204. package/dist/agent-src/templates/scripts/memory_status.py +0 -257
  1205. package/dist/agent-src/templates/scripts/pr_review_routing.py +0 -340
  1206. package/dist/agent-src/templates/scripts/pr_risk_review.py +0 -211
  1207. package/dist/agent-src/templates/scripts/telemetry/__init__.py +0 -42
  1208. package/dist/agent-src/templates/scripts/telemetry/aggregator.py +0 -169
  1209. package/dist/agent-src/templates/scripts/telemetry/boundary.py +0 -171
  1210. package/dist/agent-src/templates/scripts/telemetry/engagement.py +0 -297
  1211. package/dist/agent-src/templates/scripts/telemetry/report_renderer.py +0 -197
  1212. package/dist/agent-src/templates/scripts/telemetry/settings.py +0 -177
  1213. package/dist/agent-src/templates/scripts/telemetry_record.py +0 -179
  1214. package/dist/agent-src/templates/scripts/telemetry_report.py +0 -161
  1215. package/dist/agent-src/templates/scripts/telemetry_status.py +0 -142
  1216. package/dist/agent-src/templates/scripts/tier_usage_report.py +0 -183
  1217. package/dist/agent-src/templates/scripts/work_engine/__init__.py +0 -58
  1218. package/dist/agent-src/templates/scripts/work_engine/__main__.py +0 -9
  1219. package/dist/agent-src/templates/scripts/work_engine/_lib/__init__.py +0 -7
  1220. package/dist/agent-src/templates/scripts/work_engine/_lib/agent_settings.py +0 -840
  1221. package/dist/agent-src/templates/scripts/work_engine/_lib/user_global_paths.py +0 -249
  1222. package/dist/agent-src/templates/scripts/work_engine/cli.py +0 -195
  1223. package/dist/agent-src/templates/scripts/work_engine/cli_args.py +0 -116
  1224. package/dist/agent-src/templates/scripts/work_engine/delivery_state.py +0 -137
  1225. package/dist/agent-src/templates/scripts/work_engine/directives/__init__.py +0 -33
  1226. package/dist/agent-src/templates/scripts/work_engine/directives/backend/__init__.py +0 -98
  1227. package/dist/agent-src/templates/scripts/work_engine/directives/backend/analyze.py +0 -98
  1228. package/dist/agent-src/templates/scripts/work_engine/directives/backend/implement.py +0 -145
  1229. package/dist/agent-src/templates/scripts/work_engine/directives/backend/memory.py +0 -136
  1230. package/dist/agent-src/templates/scripts/work_engine/directives/backend/plan.py +0 -175
  1231. package/dist/agent-src/templates/scripts/work_engine/directives/backend/refine.py +0 -396
  1232. package/dist/agent-src/templates/scripts/work_engine/directives/backend/report.py +0 -227
  1233. package/dist/agent-src/templates/scripts/work_engine/directives/backend/test.py +0 -180
  1234. package/dist/agent-src/templates/scripts/work_engine/directives/backend/verify.py +0 -170
  1235. package/dist/agent-src/templates/scripts/work_engine/directives/mixed/__init__.py +0 -116
  1236. package/dist/agent-src/templates/scripts/work_engine/directives/mixed/contract.py +0 -254
  1237. package/dist/agent-src/templates/scripts/work_engine/directives/mixed/stitch.py +0 -229
  1238. package/dist/agent-src/templates/scripts/work_engine/directives/mixed/ui.py +0 -231
  1239. package/dist/agent-src/templates/scripts/work_engine/directives/ui/__init__.py +0 -113
  1240. package/dist/agent-src/templates/scripts/work_engine/directives/ui/_passthrough.py +0 -44
  1241. package/dist/agent-src/templates/scripts/work_engine/directives/ui/apply.py +0 -241
  1242. package/dist/agent-src/templates/scripts/work_engine/directives/ui/audit.py +0 -414
  1243. package/dist/agent-src/templates/scripts/work_engine/directives/ui/design.py +0 -335
  1244. package/dist/agent-src/templates/scripts/work_engine/directives/ui/polish.py +0 -513
  1245. package/dist/agent-src/templates/scripts/work_engine/directives/ui/review.py +0 -471
  1246. package/dist/agent-src/templates/scripts/work_engine/directives/ui_trivial/__init__.py +0 -119
  1247. package/dist/agent-src/templates/scripts/work_engine/directives/ui_trivial/_skipped.py +0 -37
  1248. package/dist/agent-src/templates/scripts/work_engine/directives/ui_trivial/apply.py +0 -165
  1249. package/dist/agent-src/templates/scripts/work_engine/directives/ui_trivial/refine.py +0 -66
  1250. package/dist/agent-src/templates/scripts/work_engine/directives/ui_trivial/report.py +0 -62
  1251. package/dist/agent-src/templates/scripts/work_engine/directives/ui_trivial/test.py +0 -115
  1252. package/dist/agent-src/templates/scripts/work_engine/dispatcher.py +0 -331
  1253. package/dist/agent-src/templates/scripts/work_engine/emitters.py +0 -68
  1254. package/dist/agent-src/templates/scripts/work_engine/errors.py +0 -19
  1255. package/dist/agent-src/templates/scripts/work_engine/hook_bootstrap.py +0 -91
  1256. package/dist/agent-src/templates/scripts/work_engine/hooks/__init__.py +0 -54
  1257. package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/__init__.py +0 -35
  1258. package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/_chat_history_base.py +0 -59
  1259. package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/chat_history_append.py +0 -43
  1260. package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/chat_history_halt_append.py +0 -41
  1261. package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/decision_gate.py +0 -162
  1262. package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/decision_trace.py +0 -163
  1263. package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/directive_set_guard.py +0 -53
  1264. package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/halt_surface_audit.py +0 -50
  1265. package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/memory_visibility.py +0 -141
  1266. package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/state_shape_validation.py +0 -52
  1267. package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/trace.py +0 -84
  1268. package/dist/agent-src/templates/scripts/work_engine/hooks/context.py +0 -66
  1269. package/dist/agent-src/templates/scripts/work_engine/hooks/events.py +0 -44
  1270. package/dist/agent-src/templates/scripts/work_engine/hooks/exceptions.py +0 -79
  1271. package/dist/agent-src/templates/scripts/work_engine/hooks/registry.py +0 -60
  1272. package/dist/agent-src/templates/scripts/work_engine/hooks/runner.py +0 -73
  1273. package/dist/agent-src/templates/scripts/work_engine/hooks/settings.py +0 -196
  1274. package/dist/agent-src/templates/scripts/work_engine/input_builders.py +0 -163
  1275. package/dist/agent-src/templates/scripts/work_engine/intent/__init__.py +0 -47
  1276. package/dist/agent-src/templates/scripts/work_engine/intent/classify.py +0 -280
  1277. package/dist/agent-src/templates/scripts/work_engine/migration/__init__.py +0 -8
  1278. package/dist/agent-src/templates/scripts/work_engine/migration/v0_to_v1.py +0 -231
  1279. package/dist/agent-src/templates/scripts/work_engine/orchestration.py +0 -193
  1280. package/dist/agent-src/templates/scripts/work_engine/persona_policy.py +0 -85
  1281. package/dist/agent-src/templates/scripts/work_engine/resolvers/__init__.py +0 -22
  1282. package/dist/agent-src/templates/scripts/work_engine/resolvers/diff.py +0 -106
  1283. package/dist/agent-src/templates/scripts/work_engine/resolvers/file.py +0 -113
  1284. package/dist/agent-src/templates/scripts/work_engine/resolvers/prompt.py +0 -90
  1285. package/dist/agent-src/templates/scripts/work_engine/scoring/__init__.py +0 -14
  1286. package/dist/agent-src/templates/scripts/work_engine/scoring/confidence.py +0 -300
  1287. package/dist/agent-src/templates/scripts/work_engine/scoring/decision_engine.py +0 -351
  1288. package/dist/agent-src/templates/scripts/work_engine/scoring/decision_trace.py +0 -141
  1289. package/dist/agent-src/templates/scripts/work_engine/scoring/memory_visibility.py +0 -284
  1290. package/dist/agent-src/templates/scripts/work_engine/stack/__init__.py +0 -31
  1291. package/dist/agent-src/templates/scripts/work_engine/stack/detect.py +0 -187
  1292. package/dist/agent-src/templates/scripts/work_engine/stack/runner.py +0 -481
  1293. package/dist/agent-src/templates/scripts/work_engine/state.py +0 -694
  1294. package/dist/agent-src/templates/scripts/work_engine/state_io.py +0 -202
  1295. package/dist/cli/python/resolvePython.js +0 -38
  1296. package/dist/cli/python/resolvePython.js.map +0 -1
  1297. package/docs/case-studies/frontend-design-vs-ui-ux-pro-max.md +0 -86
  1298. package/docs/contracts/agent-memory-contract.md +0 -159
  1299. package/docs/parity/bench-ruflo.json +0 -58
  1300. package/docs/parity/ruflo.md +0 -46
  1301. package/src/scripts/__pycache__/validate_frontmatter.cpython-312.pyc +0 -0
  1302. package/src/scripts/_archive/_backfill_skill_domains.py +0 -140
  1303. package/src/scripts/_archive/_bootstrap_tier_frontmatter.py +0 -151
  1304. package/src/scripts/_archive/_p43_bodies.py +0 -235
  1305. package/src/scripts/_archive/_p43_condense.py +0 -118
  1306. package/src/scripts/_archive/_p4_migrate.py +0 -199
  1307. package/src/scripts/_archive/_phase2_shim_helper.py +0 -109
  1308. package/src/scripts/_archive/_pilot_council_question.py +0 -57
  1309. package/src/scripts/_cli/__init__.py +0 -0
  1310. package/src/scripts/_cli/cmd_doctor.py +0 -1583
  1311. package/src/scripts/_cli/cmd_explain.py +0 -355
  1312. package/src/scripts/_cli/cmd_export.py +0 -157
  1313. package/src/scripts/_cli/cmd_migrate.py +0 -524
  1314. package/src/scripts/_cli/cmd_prune.py +0 -322
  1315. package/src/scripts/_cli/cmd_refresh.py +0 -179
  1316. package/src/scripts/_cli/cmd_settings_check.py +0 -171
  1317. package/src/scripts/_cli/cmd_settings_migrate.py +0 -147
  1318. package/src/scripts/_cli/cmd_sync.py +0 -166
  1319. package/src/scripts/_cli/cmd_uninstall.py +0 -476
  1320. package/src/scripts/_cli/cmd_update.py +0 -279
  1321. package/src/scripts/_cli/cmd_upgrade.py +0 -172
  1322. package/src/scripts/_cli/cmd_validate.py +0 -177
  1323. package/src/scripts/_cli/cmd_versions.py +0 -160
  1324. package/src/scripts/_cli/explain_last/__init__.py +0 -122
  1325. package/src/scripts/_cli/explain_last/assumptions.py +0 -59
  1326. package/src/scripts/_cli/explain_last/council.py +0 -105
  1327. package/src/scripts/_cli/explain_last/halt.py +0 -44
  1328. package/src/scripts/_cli/explain_last/inputs.py +0 -128
  1329. package/src/scripts/_cli/explain_last/memory.py +0 -94
  1330. package/src/scripts/_cli/explain_last/provider.py +0 -52
  1331. package/src/scripts/_cli/explain_last/render.py +0 -52
  1332. package/src/scripts/_cli/explain_last/route.py +0 -59
  1333. package/src/scripts/_cli/explain_last/scrubber.py +0 -105
  1334. package/src/scripts/_cli/explain_last/sections/__init__.py +0 -35
  1335. package/src/scripts/_cli/explain_last/sections/assumptions.py +0 -21
  1336. package/src/scripts/_cli/explain_last/sections/council.py +0 -27
  1337. package/src/scripts/_cli/explain_last/sections/halt.py +0 -31
  1338. package/src/scripts/_cli/explain_last/sections/header.py +0 -24
  1339. package/src/scripts/_cli/explain_last/sections/inputs.py +0 -27
  1340. package/src/scripts/_cli/explain_last/sections/memory.py +0 -21
  1341. package/src/scripts/_cli/explain_last/sections/pack.py +0 -16
  1342. package/src/scripts/_cli/explain_last/sections/provider.py +0 -26
  1343. package/src/scripts/_cli/explain_last/sections/route.py +0 -22
  1344. package/src/scripts/_cli/explain_last/state_loader.py +0 -76
  1345. package/src/scripts/_emit_domain_table.py +0 -35
  1346. package/src/scripts/_lib/__init__.py +0 -5
  1347. package/src/scripts/_lib/__pycache__/__init__.cpython-312.pyc +0 -0
  1348. package/src/scripts/_lib/__pycache__/agent_src.cpython-312.pyc +0 -0
  1349. package/src/scripts/_lib/agent_settings.py +0 -840
  1350. package/src/scripts/_lib/agent_src.py +0 -491
  1351. package/src/scripts/_lib/agents_overlay.py +0 -120
  1352. package/src/scripts/_lib/bench_ab_cache.py +0 -162
  1353. package/src/scripts/_lib/bench_ab_scoring.py +0 -209
  1354. package/src/scripts/_lib/bench_cost.py +0 -138
  1355. package/src/scripts/_lib/bench_quality.py +0 -118
  1356. package/src/scripts/_lib/bench_report.py +0 -149
  1357. package/src/scripts/_lib/bench_telegraph.py +0 -273
  1358. package/src/scripts/_lib/bench_telegraph_report.py +0 -151
  1359. package/src/scripts/_lib/changelog_eras.py +0 -330
  1360. package/src/scripts/_lib/claude_desktop_bundler.py +0 -238
  1361. package/src/scripts/_lib/cli_wrapper.py +0 -64
  1362. package/src/scripts/_lib/fs_atomic.py +0 -116
  1363. package/src/scripts/_lib/global_deploy_inventory.py +0 -282
  1364. package/src/scripts/_lib/install_regenerator.py +0 -134
  1365. package/src/scripts/_lib/installed_lock.py +0 -256
  1366. package/src/scripts/_lib/installed_tools.py +0 -381
  1367. package/src/scripts/_lib/json_pointers.py +0 -260
  1368. package/src/scripts/_lib/linked_projects.py +0 -238
  1369. package/src/scripts/_lib/model_tier.py +0 -52
  1370. package/src/scripts/_lib/module_detection.py +0 -223
  1371. package/src/scripts/_lib/pin_resolver.py +0 -152
  1372. package/src/scripts/_lib/script_output.py +0 -144
  1373. package/src/scripts/_lib/token_count.py +0 -95
  1374. package/src/scripts/_lib/update_check.py +0 -207
  1375. package/src/scripts/_lib/user_global_paths.py +0 -249
  1376. package/src/scripts/_lib/value_ladder.py +0 -696
  1377. package/src/scripts/_lib/value_report.py +0 -455
  1378. package/src/scripts/_phase4_bucket.py +0 -210
  1379. package/src/scripts/_pilot_measure.py +0 -53
  1380. package/src/scripts/_tmp_scan_framework_leakage.py +0 -119
  1381. package/src/scripts/adoption_report.py +0 -195
  1382. package/src/scripts/adoption_snapshot.py +0 -219
  1383. package/src/scripts/adoption_status.py +0 -166
  1384. package/src/scripts/adr/regenerate_index.py +0 -79
  1385. package/src/scripts/ai-video/lib/adapter-common.sh +0 -231
  1386. package/src/scripts/ai-video/lib/adapter-contract.md +0 -329
  1387. package/src/scripts/ai-video/lib/fixtures/comfyui/result.json +0 -1
  1388. package/src/scripts/ai-video/lib/fixtures/fal/result.json +0 -1
  1389. package/src/scripts/ai-video/lib/fixtures/gemini-veo/result.json +0 -1
  1390. package/src/scripts/ai-video/lib/fixtures/higgsfield/result.json +0 -1
  1391. package/src/scripts/ai-video/lib/fixtures/kling/result.json +0 -1
  1392. package/src/scripts/ai-video/lib/fixtures/musetalk/result.json +0 -1
  1393. package/src/scripts/ai-video/lib/fixtures/openai-images/result.json +0 -1
  1394. package/src/scripts/ai-video/lib/fixtures/replicate/result.json +0 -1
  1395. package/src/scripts/ai-video/lib/fixtures/sora/result.json +0 -1
  1396. package/src/scripts/ai-video/lib/fixtures/syncso/result.json +0 -1
  1397. package/src/scripts/ai-video/lib/load-config.sh +0 -180
  1398. package/src/scripts/ai-video/lib/redact.sh +0 -85
  1399. package/src/scripts/ai_council/__init__.py +0 -40
  1400. package/src/scripts/ai_council/_default_prices.py +0 -50
  1401. package/src/scripts/ai_council/advisors.py +0 -148
  1402. package/src/scripts/ai_council/airgap.py +0 -165
  1403. package/src/scripts/ai_council/budget_guard.py +0 -202
  1404. package/src/scripts/ai_council/bundler.py +0 -263
  1405. package/src/scripts/ai_council/cli_hints.py +0 -123
  1406. package/src/scripts/ai_council/clients.py +0 -1385
  1407. package/src/scripts/ai_council/compile_corpus.py +0 -179
  1408. package/src/scripts/ai_council/confidence_gate.py +0 -156
  1409. package/src/scripts/ai_council/config.py +0 -1364
  1410. package/src/scripts/ai_council/consensus.py +0 -329
  1411. package/src/scripts/ai_council/events_log.py +0 -141
  1412. package/src/scripts/ai_council/learn_low_impact_preview.py +0 -252
  1413. package/src/scripts/ai_council/low_impact.py +0 -714
  1414. package/src/scripts/ai_council/low_impact_corpus.py +0 -466
  1415. package/src/scripts/ai_council/low_impact_intake.py +0 -163
  1416. package/src/scripts/ai_council/modes.py +0 -131
  1417. package/src/scripts/ai_council/necessity.py +0 -782
  1418. package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_2a4_acceptance.py +0 -208
  1419. package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_add_quiet.py +0 -149
  1420. package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_budget_v2_audit.py +0 -206
  1421. package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_context_layer_v1_estimate.py +0 -67
  1422. package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_context_layer_v1_review.py +0 -292
  1423. package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_followups_review.py +0 -259
  1424. package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_inject_quiet_flag.py +0 -33
  1425. package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_measure_v2.sh +0 -36
  1426. package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_measure_verbosity.sh +0 -26
  1427. package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_nondestructive_inline_audit.py +0 -209
  1428. package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_per_task.sh +0 -41
  1429. package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_phase4_dispatch_latency.py +0 -108
  1430. package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_phase6_trigger_jaccard.py +0 -92
  1431. package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_phase_2a_budget_rebalance.py +0 -257
  1432. package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_phase_2a_post_revert.py +0 -197
  1433. package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_rebalancing_audit.py +0 -149
  1434. package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_roundtrip.py +0 -111
  1435. package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_rule_hardening_v1.py +0 -251
  1436. package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_silent_taskfiles.py +0 -98
  1437. package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_structural_open_questions.py +0 -232
  1438. package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_structural_optimization.py +0 -144
  1439. package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_structural_v3_gaps.py +0 -252
  1440. package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_structural_v3_review.py +0 -240
  1441. package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_tier_retrofit.py +0 -180
  1442. package/src/scripts/ai_council/orchestrator.py +0 -1206
  1443. package/src/scripts/ai_council/pricing.py +0 -215
  1444. package/src/scripts/ai_council/probation_gate.py +0 -152
  1445. package/src/scripts/ai_council/project_context.py +0 -159
  1446. package/src/scripts/ai_council/prompts.py +0 -567
  1447. package/src/scripts/ai_council/redact_low_impact_entry.py +0 -155
  1448. package/src/scripts/ai_council/replay.py +0 -155
  1449. package/src/scripts/ai_council/session.py +0 -366
  1450. package/src/scripts/ai_council/shadow_dispatch.py +0 -235
  1451. package/src/scripts/ai_council/solo_dispatch.py +0 -226
  1452. package/src/scripts/annotate_discovery.py +0 -149
  1453. package/src/scripts/apply_modules_config.py +0 -290
  1454. package/src/scripts/audit_adr_coverage.py +0 -175
  1455. package/src/scripts/audit_auto_rules.py +0 -175
  1456. package/src/scripts/audit_cloud_compatibility.py +0 -362
  1457. package/src/scripts/audit_command_surface.py +0 -669
  1458. package/src/scripts/audit_initial_context.py +0 -237
  1459. package/src/scripts/audit_likelihood.py +0 -148
  1460. package/src/scripts/audit_mcp_tools.py +0 -146
  1461. package/src/scripts/audit_overlap.py +0 -145
  1462. package/src/scripts/audit_skill_descriptions.py +0 -180
  1463. package/src/scripts/audit_skill_overlap.py +0 -207
  1464. package/src/scripts/audit_user_type_axis.py +0 -140
  1465. package/src/scripts/backfill_model_tier.py +0 -184
  1466. package/src/scripts/bench_ab_cache_dispatch.py +0 -68
  1467. package/src/scripts/bench_ab_clone.py +0 -170
  1468. package/src/scripts/bench_ab_diff.py +0 -220
  1469. package/src/scripts/bench_ab_integrity.py +0 -143
  1470. package/src/scripts/bench_ab_run.py +0 -235
  1471. package/src/scripts/bench_ab_task_runner.py +0 -369
  1472. package/src/scripts/bench_ab_tracka_run.py +0 -202
  1473. package/src/scripts/bench_baseline_ready.py +0 -108
  1474. package/src/scripts/bench_condense_memory.py +0 -168
  1475. package/src/scripts/bench_drift_check.py +0 -151
  1476. package/src/scripts/bench_per_tool.py +0 -216
  1477. package/src/scripts/bench_rtk_savings.py +0 -320
  1478. package/src/scripts/bench_run.py +0 -272
  1479. package/src/scripts/bench_runner.py +0 -158
  1480. package/src/scripts/build_cloud_bundle.py +0 -458
  1481. package/src/scripts/build_discovery_manifest.py +0 -747
  1482. package/src/scripts/build_linear_digest.py +0 -260
  1483. package/src/scripts/build_mcp_registry_manifest.py +0 -181
  1484. package/src/scripts/build_rule_trigger_matrix.py +0 -350
  1485. package/src/scripts/capture_showcase_session.py +0 -361
  1486. package/src/scripts/chat_history.py +0 -1799
  1487. package/src/scripts/check_always_budget.py +0 -532
  1488. package/src/scripts/check_artefact_checksums.py +0 -111
  1489. package/src/scripts/check_augment_description_cap.py +0 -79
  1490. package/src/scripts/check_augmentignore.py +0 -72
  1491. package/src/scripts/check_beta_review_markers.py +0 -127
  1492. package/src/scripts/check_bite_sized_granularity.py +0 -99
  1493. package/src/scripts/check_cluster_patterns.py +0 -206
  1494. package/src/scripts/check_command_count_messaging.py +0 -152
  1495. package/src/scripts/check_condensation.py +0 -375
  1496. package/src/scripts/check_condensed_paths.py +0 -231
  1497. package/src/scripts/check_context_paths.py +0 -202
  1498. package/src/scripts/check_council_layout.py +0 -125
  1499. package/src/scripts/check_council_references.py +0 -228
  1500. package/src/scripts/check_discovery_determinism.py +0 -70
  1501. package/src/scripts/check_gate_paths.py +0 -128
  1502. package/src/scripts/check_iron_law_prominence.py +0 -145
  1503. package/src/scripts/check_kernel_rule_bundle.py +0 -151
  1504. package/src/scripts/check_md_language.py +0 -161
  1505. package/src/scripts/check_memory.py +0 -443
  1506. package/src/scripts/check_memory_proposal.py +0 -182
  1507. package/src/scripts/check_module_management_neutral.py +0 -147
  1508. package/src/scripts/check_no_local_settings_committed.py +0 -51
  1509. package/src/scripts/check_no_new_legacy_path.py +0 -100
  1510. package/src/scripts/check_no_roadmap_refs.py +0 -155
  1511. package/src/scripts/check_one_off_location.py +0 -81
  1512. package/src/scripts/check_overlay_cascade_subdirs.py +0 -129
  1513. package/src/scripts/check_portability.py +0 -574
  1514. package/src/scripts/check_proposal.py +0 -269
  1515. package/src/scripts/check_public_catalog_links.py +0 -125
  1516. package/src/scripts/check_public_links.py +0 -185
  1517. package/src/scripts/check_references.py +0 -557
  1518. package/src/scripts/check_release_includes_discovery.py +0 -61
  1519. package/src/scripts/check_release_pr_shape.py +0 -123
  1520. package/src/scripts/check_release_published.py +0 -145
  1521. package/src/scripts/check_release_trunk_sync.py +0 -152
  1522. package/src/scripts/check_reply_consistency.py +0 -169
  1523. package/src/scripts/check_roadmap_trackable.py +0 -114
  1524. package/src/scripts/check_role_doc_links.py +0 -110
  1525. package/src/scripts/check_safety_floor_untouched.py +0 -125
  1526. package/src/scripts/check_skill_requires.py +0 -147
  1527. package/src/scripts/check_template_pin_drift.py +0 -129
  1528. package/src/scripts/check_test_coverage_diff.py +0 -180
  1529. package/src/scripts/check_token_optimizer_freshness.py +0 -146
  1530. package/src/scripts/check_update_banner.py +0 -86
  1531. package/src/scripts/ci_status.py +0 -301
  1532. package/src/scripts/ci_summary.py +0 -131
  1533. package/src/scripts/ci_time_ratio.py +0 -168
  1534. package/src/scripts/command_suggester/__init__.py +0 -51
  1535. package/src/scripts/command_suggester/cooldown.py +0 -132
  1536. package/src/scripts/command_suggester/loader.py +0 -73
  1537. package/src/scripts/command_suggester/match.py +0 -180
  1538. package/src/scripts/command_suggester/rank.py +0 -120
  1539. package/src/scripts/command_suggester/render.py +0 -86
  1540. package/src/scripts/command_suggester/sanitize.py +0 -113
  1541. package/src/scripts/command_suggester/settings.py +0 -127
  1542. package/src/scripts/command_suggester/types.py +0 -78
  1543. package/src/scripts/compile_router.py +0 -232
  1544. package/src/scripts/condense.py +0 -1919
  1545. package/src/scripts/condense_memory.py +0 -178
  1546. package/src/scripts/config/__init__.py +0 -9
  1547. package/src/scripts/config/packs.py +0 -157
  1548. package/src/scripts/config/presets.py +0 -224
  1549. package/src/scripts/config/profile_explain.py +0 -89
  1550. package/src/scripts/config/profiles.py +0 -191
  1551. package/src/scripts/config/session_profiles.py +0 -542
  1552. package/src/scripts/context_hygiene_hook.py +0 -181
  1553. package/src/scripts/cost_by_conversation.py +0 -78
  1554. package/src/scripts/cost_summary.py +0 -97
  1555. package/src/scripts/council_cli.py +0 -2557
  1556. package/src/scripts/council_prune.py +0 -81
  1557. package/src/scripts/cross_repo_retrieve.py +0 -172
  1558. package/src/scripts/discovery_stats.py +0 -70
  1559. package/src/scripts/extract_audit_patterns.py +0 -202
  1560. package/src/scripts/first_run_gate_hook.py +0 -179
  1561. package/src/scripts/gen_discovery_baseline.py +0 -127
  1562. package/src/scripts/generate_catalog.py +0 -116
  1563. package/src/scripts/generate_command_flows.py +0 -191
  1564. package/src/scripts/generate_index.py +0 -303
  1565. package/src/scripts/generate_ownership_matrix.py +0 -378
  1566. package/src/scripts/generate_pack_manifests.py +0 -340
  1567. package/src/scripts/hooks/__init__.py +0 -1
  1568. package/src/scripts/hooks/dispatch_hook.py +0 -461
  1569. package/src/scripts/hooks/dispatch_issues.py +0 -136
  1570. package/src/scripts/hooks/envelope.py +0 -98
  1571. package/src/scripts/hooks/replay_hook.py +0 -144
  1572. package/src/scripts/hooks/state_io.py +0 -145
  1573. package/src/scripts/hooks_doctor.py +0 -223
  1574. package/src/scripts/hooks_status.py +0 -157
  1575. package/src/scripts/install.py +0 -5183
  1576. package/src/scripts/inventory_abstraction_budget.py +0 -622
  1577. package/src/scripts/inventory_frontmatter.py +0 -164
  1578. package/src/scripts/inventory_meta_layers.py +0 -288
  1579. package/src/scripts/iron_law_sha.py +0 -107
  1580. package/src/scripts/linked_projects_list.py +0 -91
  1581. package/src/scripts/lint_agent_skill_names.py +0 -150
  1582. package/src/scripts/lint_agents_layout.py +0 -197
  1583. package/src/scripts/lint_agents_md.py +0 -210
  1584. package/src/scripts/lint_archived_skills.py +0 -159
  1585. package/src/scripts/lint_artefact_frontmatter.py +0 -188
  1586. package/src/scripts/lint_bench_ab.py +0 -172
  1587. package/src/scripts/lint_bench_corpus.py +0 -255
  1588. package/src/scripts/lint_command_flow_coverage.py +0 -132
  1589. package/src/scripts/lint_command_routing.py +0 -160
  1590. package/src/scripts/lint_command_tiers.py +0 -175
  1591. package/src/scripts/lint_command_verbs.py +0 -206
  1592. package/src/scripts/lint_commit_subjects.py +0 -139
  1593. package/src/scripts/lint_context_spine_usage.py +0 -137
  1594. package/src/scripts/lint_discovery_manifest.py +0 -176
  1595. package/src/scripts/lint_discovery_vocabulary.py +0 -220
  1596. package/src/scripts/lint_examples.py +0 -102
  1597. package/src/scripts/lint_explain_trace.py +0 -80
  1598. package/src/scripts/lint_featured_skills.py +0 -144
  1599. package/src/scripts/lint_flows.py +0 -215
  1600. package/src/scripts/lint_framework_leakage.py +0 -375
  1601. package/src/scripts/lint_frontmatter_boilerplate.py +0 -77
  1602. package/src/scripts/lint_ghostwriter_source.py +0 -242
  1603. package/src/scripts/lint_global_paths.py +0 -148
  1604. package/src/scripts/lint_handoffs.py +0 -217
  1605. package/src/scripts/lint_hook_concern_budget.py +0 -207
  1606. package/src/scripts/lint_hook_manifest.py +0 -217
  1607. package/src/scripts/lint_load_context.py +0 -196
  1608. package/src/scripts/lint_marketplace.py +0 -180
  1609. package/src/scripts/lint_marketplace_install_completeness.py +0 -198
  1610. package/src/scripts/lint_mcp_registry_manifest.py +0 -69
  1611. package/src/scripts/lint_media_policy_linkage.py +0 -140
  1612. package/src/scripts/lint_model_tier_coverage.py +0 -73
  1613. package/src/scripts/lint_namespace.py +0 -135
  1614. package/src/scripts/lint_namespace_collisions.py +0 -103
  1615. package/src/scripts/lint_new_skill_gate.py +0 -144
  1616. package/src/scripts/lint_no_new_atomic_commands.py +0 -180
  1617. package/src/scripts/lint_one_off_age.py +0 -184
  1618. package/src/scripts/lint_orchestration_dsl.py +0 -217
  1619. package/src/scripts/lint_orchestrator_auto_detect.py +0 -111
  1620. package/src/scripts/lint_pack_boundaries.py +0 -147
  1621. package/src/scripts/lint_pack_dependencies.py +0 -137
  1622. package/src/scripts/lint_pack_first_win.py +0 -121
  1623. package/src/scripts/lint_persona_governance.py +0 -164
  1624. package/src/scripts/lint_positioning.py +0 -143
  1625. package/src/scripts/lint_profile_overlay_set_only.py +0 -179
  1626. package/src/scripts/lint_readme_jargon.py +0 -131
  1627. package/src/scripts/lint_readme_size.py +0 -33
  1628. package/src/scripts/lint_regression.py +0 -251
  1629. package/src/scripts/lint_roadmap_ci_steps.py +0 -186
  1630. package/src/scripts/lint_roadmap_complexity.py +0 -220
  1631. package/src/scripts/lint_role_experiences.py +0 -255
  1632. package/src/scripts/lint_rule_interactions.py +0 -170
  1633. package/src/scripts/lint_rule_tiers.py +0 -90
  1634. package/src/scripts/lint_showcase_sessions.py +0 -148
  1635. package/src/scripts/lint_skill_tools.py +0 -168
  1636. package/src/scripts/lint_topics_yaml.py +0 -89
  1637. package/src/scripts/lint_trust_coherence.py +0 -212
  1638. package/src/scripts/lint_value_dashboard.py +0 -218
  1639. package/src/scripts/mcp_parity_smoke.py +0 -316
  1640. package/src/scripts/mcp_render.py +0 -173
  1641. package/src/scripts/mcp_server/__init__.py +0 -19
  1642. package/src/scripts/mcp_server/__main__.py +0 -12
  1643. package/src/scripts/mcp_server/catalog.py +0 -125
  1644. package/src/scripts/mcp_server/metadata.py +0 -75
  1645. package/src/scripts/mcp_server/prompts.py +0 -442
  1646. package/src/scripts/mcp_server/requirements.txt +0 -4
  1647. package/src/scripts/mcp_server/resources.py +0 -201
  1648. package/src/scripts/mcp_server/server.py +0 -270
  1649. package/src/scripts/mcp_server/telemetry.py +0 -128
  1650. package/src/scripts/mcp_server/tools.py +0 -950
  1651. package/src/scripts/mcp_telemetry_health.py +0 -214
  1652. package/src/scripts/mcp_telemetry_query.py +0 -203
  1653. package/src/scripts/mcp_telemetry_store.py +0 -211
  1654. package/src/scripts/measure_augment_budget.py +0 -214
  1655. package/src/scripts/measure_density.py +0 -232
  1656. package/src/scripts/measure_frugality_savings.py +0 -164
  1657. package/src/scripts/measure_markitdown_lift.py +0 -127
  1658. package/src/scripts/measure_patterns.py +0 -376
  1659. package/src/scripts/measure_projection_bytes.py +0 -159
  1660. package/src/scripts/measure_rule_budget.py +0 -347
  1661. package/src/scripts/measure_skill_reduction.py +0 -102
  1662. package/src/scripts/memory_hash.py +0 -75
  1663. package/src/scripts/memory_lookup.py +0 -705
  1664. package/src/scripts/memory_report.py +0 -336
  1665. package/src/scripts/memory_signal.py +0 -212
  1666. package/src/scripts/memory_status.py +0 -257
  1667. package/src/scripts/migrate_command_suggestions.py +0 -151
  1668. package/src/scripts/migrate_frontmatter_defaults.py +0 -245
  1669. package/src/scripts/mine_session.py +0 -279
  1670. package/src/scripts/minimal_safe_diff_hook.py +0 -245
  1671. package/src/scripts/move_artefact.py +0 -143
  1672. package/src/scripts/new_skill.py +0 -148
  1673. package/src/scripts/onboarding_gate_hook.py +0 -142
  1674. package/src/scripts/pack_mcp_content.py +0 -293
  1675. package/src/scripts/plan_physical_move.py +0 -353
  1676. package/src/scripts/prediction-pool/poisson_sim.py +0 -167
  1677. package/src/scripts/prediction-pool/pool_winsim.py +0 -236
  1678. package/src/scripts/prediction-pool/score_ev.py +0 -188
  1679. package/src/scripts/print_required_checks.py +0 -196
  1680. package/src/scripts/probe_projection_fidelity.py +0 -202
  1681. package/src/scripts/probe_skill_registration.py +0 -413
  1682. package/src/scripts/profile_staleness_hook.py +0 -69
  1683. package/src/scripts/profile_use.py +0 -164
  1684. package/src/scripts/project_thin_rules.py +0 -168
  1685. package/src/scripts/propose_modules_config.py +0 -145
  1686. package/src/scripts/prototype_lint_contradictions.py +0 -150
  1687. package/src/scripts/prove_pack_extractable.py +0 -187
  1688. package/src/scripts/readme_linter.py +0 -589
  1689. package/src/scripts/redact_hook_capture.py +0 -148
  1690. package/src/scripts/refine_ticket_detect.py +0 -646
  1691. package/src/scripts/release.py +0 -1091
  1692. package/src/scripts/render_benchmark_md.py +0 -312
  1693. package/src/scripts/render_value_md.py +0 -347
  1694. package/src/scripts/requirements-evals.txt +0 -8
  1695. package/src/scripts/roadmap_progress_hook.py +0 -274
  1696. package/src/scripts/router_telemetry.py +0 -470
  1697. package/src/scripts/run_skill_evals.py +0 -185
  1698. package/src/scripts/runtime_dispatcher.py +0 -276
  1699. package/src/scripts/runtime_handler.py +0 -148
  1700. package/src/scripts/runtime_registry.py +0 -166
  1701. package/src/scripts/score_skill_selection.py +0 -198
  1702. package/src/scripts/setup_eval_venv.sh +0 -58
  1703. package/src/scripts/skill_collision_clusters.py +0 -162
  1704. package/src/scripts/skill_discovery.py +0 -254
  1705. package/src/scripts/skill_linter.py +0 -3694
  1706. package/src/scripts/skill_overlap.py +0 -204
  1707. package/src/scripts/skill_preview.py +0 -179
  1708. package/src/scripts/skill_tools/__init__.py +0 -22
  1709. package/src/scripts/skill_tools/audit_persona_coverage.py +0 -147
  1710. package/src/scripts/skill_tools/audit_user_type_coverage.py +0 -148
  1711. package/src/scripts/skill_tools/run_block_d_eval.py +0 -129
  1712. package/src/scripts/skill_tools/score_skill_relevance.py +0 -169
  1713. package/src/scripts/skill_tools/suggest_skill_for_task.py +0 -113
  1714. package/src/scripts/skill_trigger_eval.py +0 -682
  1715. package/src/scripts/skill_usage_collect.py +0 -191
  1716. package/src/scripts/skill_usage_report.py +0 -162
  1717. package/src/scripts/smoke_path_resolution.py +0 -93
  1718. package/src/scripts/smoke_quickstart.py +0 -144
  1719. package/src/scripts/snapshot_agent_outputs.py +0 -144
  1720. package/src/scripts/spotcheck_thin_root.py +0 -134
  1721. package/src/scripts/sync_agent_settings.py +0 -180
  1722. package/src/scripts/sync_github_metadata.py +0 -147
  1723. package/src/scripts/sync_gitignore.py +0 -291
  1724. package/src/scripts/sync_yaml_rt.py +0 -734
  1725. package/src/scripts/telegraph_stats.py +0 -119
  1726. package/src/scripts/tool_registry.py +0 -146
  1727. package/src/scripts/tools/__init__.py +0 -1
  1728. package/src/scripts/tools/adapter_errors.py +0 -63
  1729. package/src/scripts/tools/base_adapter.py +0 -91
  1730. package/src/scripts/tools/github_adapter.py +0 -128
  1731. package/src/scripts/tools/jira_adapter.py +0 -115
  1732. package/src/scripts/trigger_coverage.py +0 -129
  1733. package/src/scripts/update_counts.py +0 -199
  1734. package/src/scripts/update_prices.py +0 -125
  1735. package/src/scripts/validate_agent_settings.py +0 -124
  1736. package/src/scripts/validate_decision_engine.py +0 -136
  1737. package/src/scripts/validate_discovery_manifest.py +0 -94
  1738. package/src/scripts/validate_frontmatter.py +0 -647
  1739. package/src/scripts/validate_pack_yaml.py +0 -179
  1740. package/src/scripts/validate_safe_paths.py +0 -118
  1741. package/src/scripts/validate_telegraph_carveouts.py +0 -129
  1742. package/src/scripts/verify_before_complete_hook.py +0 -216
  1743. package/src/scripts/verify_physical_move.py +0 -185
  1744. package/src/scripts/wrapper_freshness_hook.py +0 -86
  1745. /package/dist/agent-src/skills/design-intelligence/data/{typography.csv → font-pairings-reference.csv} +0 -0
  1746. /package/src/scripts/{ai-video → media}/lib/fixtures/allin1/analysis.json +0 -0
  1747. /package/src/scripts/{ai-video → media}/lib/fixtures/comfyui/scene-0001.mp4 +0 -0
  1748. /package/src/scripts/{ai-video → media}/lib/fixtures/fal/scene-0001.mp4 +0 -0
  1749. /package/src/scripts/{ai-video → media}/lib/fixtures/gemini-veo/scene-0001.mp4 +0 -0
  1750. /package/src/scripts/{ai-video → media}/lib/fixtures/higgsfield/scene-0001.mp4 +0 -0
  1751. /package/src/scripts/{ai-video → media}/lib/fixtures/kling/scene-0001.mp4 +0 -0
  1752. /package/src/scripts/{ai-video → media}/lib/fixtures/musetalk/lipsync-0001.mp4 +0 -0
  1753. /package/src/scripts/{ai-video → media}/lib/fixtures/openai-images/scene-0001.png +0 -0
  1754. /package/src/scripts/{ai-video → media}/lib/fixtures/replicate/scene-0001.mp4 +0 -0
  1755. /package/src/scripts/{ai-video → media}/lib/fixtures/sora/scene-0001.mp4 +0 -0
  1756. /package/src/scripts/{ai-video → media}/lib/fixtures/syncso/lipsync-0001.mp4 +0 -0
  1757. /package/src/scripts/{ai-video → media}/lib/fixtures/whisperx/transcript.json +0 -0
  1758. /package/src/scripts/{ai-video → media}/lib/telemetry.sh +0 -0
@@ -0,0 +1,1382 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Track B — task runner for the package-impact A/B bench.
4
+ *
5
+ * TypeScript twin of `src/scripts/bench_ab_task_runner.py` (ADR-200 Python→TS
6
+ * migration, Phase 8 / Wave 8d). Mirrors the CLI contract EXACTLY: flags
7
+ * (`--variant`, `--mode`, `--timeout`), exit codes (0 ok / 1 corpus missing or
8
+ * empty), byte-identical stdout/stderr, and byte-identical written JSON + md
9
+ * reports (timing/run-id fields aside — those are inherently non-deterministic
10
+ * wall-clock values). No behaviour changes.
11
+ *
12
+ * Phase 4 Step 2 of `agents/roadmaps/road-to-package-impact-benchmark.md`.
13
+ *
14
+ * For each task in `internal/bench/corpora/ab-trackb.yaml`, in each variant:
15
+ *
16
+ * 1. Snapshot the variant clone's file tree.
17
+ * 2. Invoke the `claude` CLI with the task prompt — OR dry-run, depending
18
+ * on `--mode`.
19
+ * 3. Capture the transcript, tool-call events, wall-time, and (if available)
20
+ * token + cost counts.
21
+ * 4. Snapshot the post-run tree.
22
+ * 5. Score the task via scripts/_lib/bench_ab_scoring.ts.
23
+ *
24
+ * Modes:
25
+ *
26
+ * - `dry-run` (default) — record the would-run shell command, write a stub
27
+ * transcript naming the variant, score against the unchanged tree.
28
+ * - `live` — actually invoke the `claude` CLI with `--print` (one-shot mode)
29
+ * and the task prompt.
30
+ *
31
+ * The runner ALWAYS resets the clone to a clean state before each task and
32
+ * ALWAYS records the mode in the report header.
33
+ *
34
+ * Cross-batch dependency: `reset_clone` calls `bench_ab_clone.clone()`. Now
35
+ * that the `.ts` twin has landed, this imports `bench_ab_clone.clone()`
36
+ * directly — a single source of truth for the clone surface, no python3
37
+ * dependency.
38
+ */
39
+ import { spawnSync } from 'node:child_process';
40
+ import * as crypto from 'node:crypto';
41
+ import * as fs from 'node:fs';
42
+ import * as path from 'node:path';
43
+ import { fileURLToPath, pathToFileURL } from 'node:url';
44
+ import { parse as parseYaml } from 'yaml';
45
+
46
+ import { clone as _clone } from './bench_ab_clone.js';
47
+ import * as bench_ab_cache from './_lib/bench_ab_cache.js';
48
+ import { score_task } from './_lib/bench_ab_scoring.js';
49
+
50
+ const _HERE = fileURLToPath(import.meta.url);
51
+ // src/scripts/bench_ab_task_runner.ts → parents[2] is the repo root.
52
+ const REPO_ROOT = path.resolve(path.dirname(_HERE), '..', '..');
53
+
54
+ const CORPUS_PATH = path.join(REPO_ROOT, 'internal', 'bench', 'corpora', 'ab-trackb.yaml');
55
+ const REPORTS_DIR = path.join(REPO_ROOT, 'internal', 'bench', 'reports', 'ab');
56
+
57
+ // How far we descend into a clone when snapshotting. The fixture is shallow.
58
+ const SNAPSHOT_MAX_DEPTH = 6;
59
+
60
+ // --- Activation (proven mechanism) ---
61
+ // agent-config is a GLOBAL Claude Code plugin (enabledPlugins in ~/.claude
62
+ // settings), so plain `claude --print` already runs WITH the package. The clean
63
+ // control is `--setting-sources project,local`, which excludes the user settings
64
+ // where `enabledPlugins` lives → plugin OFF, but auth survives. Measured proof:
65
+ // plain --print = ~35.5k input tokens; --setting-sources project,local = ~11.9k
66
+ // → the ~24k delta IS the package's always-on footprint. So:
67
+ // without = `--setting-sources project,local` (plugin OFF, base model)
68
+ // with = plain `--print` (the real installed plugin = package)
69
+ // with-rdp = plain `--print` + RDP rules injected (RDP not yet in the release plugin)
70
+ // (`--bare` is NOT used — it disables auth too.)
71
+ const RDP_EXTRA_FILES: readonly string[] = [
72
+ path.join(REPO_ROOT, 'src', 'rules', 'notes-first-reasoning.md'),
73
+ path.join(REPO_ROOT, 'src', 'agent-src', 'contexts', 'execution', 'rdp-gate.md'),
74
+ ];
75
+
76
+ function _concat_rules(paths: readonly string[]): string {
77
+ const parts: string[] = [];
78
+ for (const p of paths) {
79
+ try {
80
+ parts.push(fs.readFileSync(p, 'utf-8'));
81
+ } catch {
82
+ // OSError → skip (matches Python `except OSError: continue`).
83
+ continue;
84
+ }
85
+ }
86
+ return parts.join('\n\n---\n\n');
87
+ }
88
+
89
+ /**
90
+ * Extra rules injected on top of the plugin. Only `with-rdp` injects (the RDP
91
+ * artifacts aren't in the released plugin yet); `with` uses the real plugin,
92
+ * `without` runs plugin-off.
93
+ */
94
+ export function system_prompt_for(variant: string): string | null {
95
+ if (variant === 'with-rdp') {
96
+ return _concat_rules(RDP_EXTRA_FILES.filter((p) => fs.existsSync(p)));
97
+ }
98
+ return null;
99
+ }
100
+
101
+ /** `without` excludes user settings to drop the global plugin (auth survives). */
102
+ export function setting_sources_for(variant: string): string | null {
103
+ return variant === 'without' ? 'project,local' : null;
104
+ }
105
+
106
+ export function utc_stamp(): string {
107
+ // datetime.now(timezone.utc).strftime("%Y-%m-%dT%H-%M-%SZ")
108
+ const d = new Date();
109
+ const Y = String(d.getUTCFullYear()).padStart(4, '0');
110
+ const m = String(d.getUTCMonth() + 1).padStart(2, '0');
111
+ const D = String(d.getUTCDate()).padStart(2, '0');
112
+ const H = String(d.getUTCHours()).padStart(2, '0');
113
+ const M = String(d.getUTCMinutes()).padStart(2, '0');
114
+ const S = String(d.getUTCSeconds()).padStart(2, '0');
115
+ return `${Y}-${m}-${D}T${H}-${M}-${S}Z`;
116
+ }
117
+
118
+ /**
119
+ * Return {relpath: sha256-short} for every fixture file under the clone.
120
+ *
121
+ * Skips the agent-config surface (.claude, .augment, AGENTS.md, CLAUDE.md,
122
+ * manifest) because that's the variant axis, not the task surface.
123
+ */
124
+ export function snapshot_clone(cloneRoot: string, maxDepth: number = SNAPSHOT_MAX_DEPTH): Record<string, string> {
125
+ const skipRoots = new Set(['.claude', '.augment']);
126
+ const skipFiles = new Set(['AGENTS.md', 'CLAUDE.md', '.bench-ab-manifest.json']);
127
+ const out: Record<string, string> = {};
128
+ for (const filePath of _rglobSorted(cloneRoot)) {
129
+ if (!_isFile(filePath)) {
130
+ continue;
131
+ }
132
+ const rel = path.relative(cloneRoot, filePath);
133
+ const parts = rel.split(path.sep);
134
+ if (parts.length > 0 && skipRoots.has(parts[0]!)) {
135
+ continue;
136
+ }
137
+ const relPosix = parts.join('/');
138
+ if (skipFiles.has(relPosix)) {
139
+ continue;
140
+ }
141
+ if (parts.length > maxDepth) {
142
+ continue;
143
+ }
144
+ let digest: string;
145
+ try {
146
+ const buf = fs.readFileSync(filePath);
147
+ digest = crypto.createHash('sha256').update(buf).digest('hex').slice(0, 16);
148
+ } catch {
149
+ // OSError → skip (matches Python `except OSError: continue`).
150
+ continue;
151
+ }
152
+ out[relPosix] = digest;
153
+ }
154
+ return out;
155
+ }
156
+
157
+ /** Rebuild the clone so each task starts from the same state. */
158
+ export function reset_clone(variant: string): string {
159
+ // Mirror the Python `module.clone(variant, refresh=True, quiet=True)` by
160
+ // calling the `bench_ab_clone` `.ts` twin directly — single source of truth,
161
+ // no python3. Preserve the original "cannot load helper" failure surface.
162
+ try {
163
+ return _clone(variant, { refresh: true, quiet: true });
164
+ } catch {
165
+ throw new Error('cannot load bench_ab_clone helper');
166
+ }
167
+ }
168
+
169
+ /** Resolve the claude CLI binary (env override → PATH). */
170
+ export function claude_executable(): string | null {
171
+ const override = process.env['CLAUDE_CLI'];
172
+ if (override) {
173
+ return override;
174
+ }
175
+ // Resolve to an absolute path so the subprocess (run with cwd=clone_root)
176
+ // cannot miss it on a PATH/cwd quirk — the failure that showed up as a
177
+ // spurious "claude CLI not found" on a later arm of the first full run.
178
+ return _which('claude');
179
+ }
180
+
181
+ interface TokensBreakdown {
182
+ input_tokens: number;
183
+ output_tokens: number;
184
+ cache_read_input_tokens: number;
185
+ cache_creation_input_tokens: number;
186
+ }
187
+
188
+ interface RunResult {
189
+ mode: string;
190
+ reason: string;
191
+ transcript: string;
192
+ exit_code: number | null;
193
+ wall_time_seconds: number;
194
+ tokens?: number;
195
+ /** Empty object `{}` on dry-run (key absent in Python); breakdown otherwise. */
196
+ tokens_breakdown?: TokensBreakdown | Record<string, never>;
197
+ errored?: boolean;
198
+ num_turns?: number;
199
+ subtype?: string;
200
+ }
201
+
202
+ interface RunLiveOpts {
203
+ sysprompt_file?: string | null;
204
+ setting_sources?: string | null;
205
+ max_budget?: number | null;
206
+ model?: string | null;
207
+ }
208
+
209
+ /**
210
+ * Invoke claude in print/one-shot mode against the task prompt.
211
+ *
212
+ * `setting_sources` (e.g. "project,local") drops the global plugin for the
213
+ * `without` arm while keeping auth. `sysprompt_file` injects extra rules
214
+ * (the `with-rdp` arm). `with` passes neither → the real installed plugin.
215
+ */
216
+ export function run_live(
217
+ task: Record<string, unknown>,
218
+ cloneRoot: string,
219
+ timeoutS: number,
220
+ opts: RunLiveOpts = {},
221
+ ): RunResult {
222
+ const { sysprompt_file = null, setting_sources = null, max_budget = null, model = null } = opts;
223
+ const binary = claude_executable();
224
+ if (binary === null) {
225
+ return {
226
+ mode: 'live-skipped',
227
+ reason: 'claude CLI not found; set CLAUDE_CLI or install it',
228
+ transcript: '',
229
+ exit_code: null,
230
+ wall_time_seconds: 0.0,
231
+ tokens: 0,
232
+ tokens_breakdown: {},
233
+ errored: true,
234
+ };
235
+ }
236
+ const prompt = (task['prompt'] as string) ?? '';
237
+ // --output-format json yields a `usage` block for token counts. The global
238
+ // plugin is dropped per-arm via --setting-sources (NOT --bare, which kills auth).
239
+ // bypassPermissions on EVERY arm: the clone is a throwaway fixture, and this
240
+ // equalizes file-edit capability across arms (else `without`, which excludes
241
+ // user settings, would lack edit perms and fail tasks for the wrong reason).
242
+ const cmd = ['--print', '--output-format', 'json', '--permission-mode', 'bypassPermissions'];
243
+ if (model) {
244
+ // Pin ONE model across every arm. The session default here is Opus-4.8-1M,
245
+ // whose ~$1.78 first-turn cache-creation trips any sane budget cap instantly
246
+ // and makes a full corpus run blow the account quota. Holding the model
247
+ // constant is also a validity requirement: the bench measures the package
248
+ // LIFT on a fixed host, not model-vs-model.
249
+ cmd.push('--model', model);
250
+ }
251
+ if (max_budget) {
252
+ // Caps per-task API spend so one runaway agentic loop can't exhaust the
253
+ // account quota (the failure mode that starved later arms on the first run).
254
+ cmd.push('--max-budget-usd', _pyStrNum(max_budget));
255
+ }
256
+ if (setting_sources) {
257
+ cmd.push('--setting-sources', setting_sources);
258
+ }
259
+ if (sysprompt_file !== null) {
260
+ cmd.push('--append-system-prompt-file', sysprompt_file);
261
+ }
262
+ cmd.push('--', prompt);
263
+ const started = _monotonic();
264
+ const result = spawnSync(binary, cmd, {
265
+ cwd: cloneRoot,
266
+ encoding: 'utf-8',
267
+ timeout: timeoutS * 1000,
268
+ });
269
+ const isTimeout =
270
+ (result.error && (result.error as NodeJS.ErrnoException).code === 'ETIMEDOUT') ||
271
+ (result.signal === 'SIGTERM' && Boolean(result.error));
272
+ if (isTimeout) {
273
+ return {
274
+ mode: 'live',
275
+ reason: `timeout after ${timeoutS}s`,
276
+ transcript: (result.stdout ?? '') + '\n[TIMEOUT]',
277
+ exit_code: -1,
278
+ wall_time_seconds: _pyRound(_monotonic() - started, 3),
279
+ tokens: 0,
280
+ tokens_breakdown: {},
281
+ errored: true,
282
+ };
283
+ }
284
+ const duration = _monotonic() - started;
285
+ // Parse the JSON envelope: `result` is the model text; `usage` holds tokens.
286
+ const stdout = result.stdout ?? '';
287
+ const stderr = result.stderr ?? '';
288
+ const returncode = result.status ?? -1;
289
+ let transcript: string = stdout;
290
+ let tokens = 0;
291
+ let isError = false;
292
+ let errReason = 'ok';
293
+ let numTurns = 0;
294
+ let subtype = '';
295
+ let breakdown: TokensBreakdown = {
296
+ input_tokens: 0,
297
+ output_tokens: 0,
298
+ cache_read_input_tokens: 0,
299
+ cache_creation_input_tokens: 0,
300
+ };
301
+ try {
302
+ const obj = JSON.parse(stdout) as Record<string, unknown>;
303
+ // Python: `except (json.JSONDecodeError, AttributeError, ValueError)`.
304
+ // JSON.parse of a non-object (string/number/array) parses fine but then
305
+ // `.get` calls would AttributeError in Python — guard by requiring an object.
306
+ if (obj === null || typeof obj !== 'object' || Array.isArray(obj)) {
307
+ throw new TypeError('not a JSON object');
308
+ }
309
+ isError = Boolean(obj['is_error']);
310
+ // transcript = obj.get("result") or obj.get("text") or proc.stdout
311
+ const resultText = obj['result'];
312
+ const textField = obj['text'];
313
+ transcript = _pyTruthyStr(resultText)
314
+ ? (resultText as string)
315
+ : _pyTruthyStr(textField)
316
+ ? (textField as string)
317
+ : stdout;
318
+ const usage = (_isPlainObj(obj['usage']) ? (obj['usage'] as Record<string, unknown>) : {}) as Record<
319
+ string,
320
+ unknown
321
+ >;
322
+ breakdown = {
323
+ input_tokens: _intOrZero(usage['input_tokens']),
324
+ output_tokens: _intOrZero(usage['output_tokens']),
325
+ cache_read_input_tokens: _intOrZero(usage['cache_read_input_tokens']),
326
+ cache_creation_input_tokens: _intOrZero(usage['cache_creation_input_tokens']),
327
+ };
328
+ tokens =
329
+ breakdown.input_tokens +
330
+ breakdown.output_tokens +
331
+ breakdown.cache_read_input_tokens +
332
+ breakdown.cache_creation_input_tokens;
333
+ // The top-level `usage` block is zeroed on a budget-capped / errored run
334
+ // (and unreliable even on some completions). `modelUsage` carries the
335
+ // authoritative per-model counts — sum it as the fallback so token deltas
336
+ // survive even when a task hits its cap mid-flight.
337
+ if (tokens === 0) {
338
+ const mu = (_isPlainObj(obj['modelUsage']) ? (obj['modelUsage'] as Record<string, unknown>) : {}) as Record<
339
+ string,
340
+ unknown
341
+ >;
342
+ const agg: TokensBreakdown = {
343
+ input_tokens: 0,
344
+ output_tokens: 0,
345
+ cache_read_input_tokens: 0,
346
+ cache_creation_input_tokens: 0,
347
+ };
348
+ for (const stats of Object.values(mu)) {
349
+ const s = (_isPlainObj(stats) ? (stats as Record<string, unknown>) : {}) as Record<string, unknown>;
350
+ agg.input_tokens += _intOrZero(s['inputTokens']);
351
+ agg.output_tokens += _intOrZero(s['outputTokens']);
352
+ agg.cache_read_input_tokens += _intOrZero(s['cacheReadInputTokens']);
353
+ agg.cache_creation_input_tokens += _intOrZero(s['cacheCreationInputTokens']);
354
+ }
355
+ const muTotal =
356
+ agg.input_tokens +
357
+ agg.output_tokens +
358
+ agg.cache_read_input_tokens +
359
+ agg.cache_creation_input_tokens;
360
+ if (muTotal > 0) {
361
+ breakdown = agg;
362
+ tokens = muTotal;
363
+ }
364
+ }
365
+ numTurns = _intOrZero(obj['num_turns']);
366
+ subtype = _pyStrOrEmpty(obj['subtype']);
367
+ // Surface WHY a task errored (budget cap vs. other) without leaking $.
368
+ if (isError) {
369
+ const subtypeRaw = obj['subtype'];
370
+ errReason = _pyTruthyStr(subtypeRaw) ? (subtypeRaw as string) : 'error';
371
+ }
372
+ } catch {
373
+ transcript = stdout;
374
+ }
375
+ return {
376
+ mode: 'live',
377
+ reason: isError ? errReason : returncode === 0 ? 'ok' : `exit ${returncode}`,
378
+ transcript: `${transcript}\n${stderr}`,
379
+ exit_code: returncode,
380
+ wall_time_seconds: _pyRound(duration, 3),
381
+ tokens,
382
+ tokens_breakdown: breakdown,
383
+ errored: isError || returncode !== 0,
384
+ num_turns: numTurns,
385
+ subtype,
386
+ };
387
+ }
388
+
389
+ /** Record what would have run; produce a deterministic stub transcript. */
390
+ export function run_dry(task: Record<string, unknown>, cloneRoot: string, variant: string): RunResult {
391
+ const stubTranscript =
392
+ '[bench_ab_task_runner dry-run]\n' +
393
+ `variant=${variant}\n` +
394
+ `clone=${cloneRoot}\n` +
395
+ `task_id=${_pyStr(task['id'])}\n` +
396
+ '[no claude invocation; --mode live to execute for real]\n';
397
+ return {
398
+ mode: 'dry-run',
399
+ reason: 'ok',
400
+ transcript: stubTranscript,
401
+ exit_code: 0,
402
+ wall_time_seconds: 0.0,
403
+ };
404
+ }
405
+
406
+ interface AskEvents {
407
+ asked: number;
408
+ acted_with_commit: number;
409
+ ratio: number;
410
+ /** True when ratio is an int 0 (total == 0) rather than a rounded float. */
411
+ ratioIsInt: boolean;
412
+ }
413
+
414
+ /** Crude ask-vs-act heuristic over the transcript. */
415
+ export function count_ask_events(transcript: string): AskEvents {
416
+ if (!transcript) {
417
+ return { asked: 0, acted_with_commit: 0, ratio: 0, ratioIsInt: true };
418
+ }
419
+ const lt = transcript.toLowerCase();
420
+ const askMarkers = ['should i', 'do you want', 'shall i', 'soll ich', 'möchtest du'];
421
+ const asked = askMarkers.reduce((acc, m) => acc + _countSub(lt, m), 0);
422
+ const commitMarkers = ['git commit', 'git push', 'gh pr create', 'gh pr merge'];
423
+ const acted = commitMarkers.reduce((acc, m) => acc + _countSub(lt, m), 0);
424
+ const total = asked + acted;
425
+ if (total) {
426
+ return { asked, acted_with_commit: acted, ratio: _pyRound(asked / total, 3), ratioIsInt: false };
427
+ }
428
+ return { asked, acted_with_commit: acted, ratio: 0, ratioIsInt: true };
429
+ }
430
+
431
+ const PROGRESS_PATH = path.join(REPORTS_DIR, '.progress.json');
432
+
433
+ /** Mirror live state to .progress.json for `task bench:ab:watch` (best-effort). */
434
+ function _write_progress(state: Record<string, Json>): void {
435
+ try {
436
+ fs.mkdirSync(REPORTS_DIR, { recursive: true });
437
+ fs.writeFileSync(PROGRESS_PATH, _jsonDumps(state, 2) + '\n');
438
+ } catch {
439
+ // OSError → swallow (best-effort, matches Python `except OSError: pass`).
440
+ }
441
+ }
442
+
443
+ interface ProgressStream {
444
+ write(s: string): void;
445
+ isatty?: () => boolean;
446
+ }
447
+
448
+ /**
449
+ * Live per-task progress. stdlib-only, TTY-aware, log-safe.
450
+ *
451
+ * style: auto (bar if stderr is a TTY, else one plain line per task) | bar |
452
+ * plain | none. Mirrors state to .progress.json regardless of style.
453
+ *
454
+ * Node parity note: Python uses a 1s heartbeat thread to refresh the bar mid
455
+ * task. Node is single-threaded and the work here (spawnSync) is synchronous
456
+ * and blocking, so a timer would never fire during a task anyway — the
457
+ * heartbeat is therefore a no-op here. It only affects live-TTY cosmetics, not
458
+ * any written artifact (.progress.json content is identical), so parity holds
459
+ * on every byte-compared surface.
460
+ */
461
+ export class Progress {
462
+ static readonly BAR_WIDTH = 24;
463
+
464
+ total: number;
465
+ mode: string;
466
+ stream: ProgressStream;
467
+ done = 0;
468
+ started: number;
469
+ kind: 'bar' | 'plain' | 'none';
470
+ private _cur = '';
471
+ private _task_started = 0.0;
472
+
473
+ constructor(total: number, mode: string, style = 'auto', stream?: ProgressStream) {
474
+ this.total = Math.max(total, 1);
475
+ this.mode = mode;
476
+ this.stream = stream ?? { write: (s: string): void => void process.stderr.write(s), isatty: () => process.stderr.isTTY === true };
477
+ this.started = _monotonic();
478
+ if (style === 'bar' || style === 'plain' || style === 'none') {
479
+ this.kind = style;
480
+ } else {
481
+ // auto
482
+ const isatty = this.stream.isatty ? this.stream.isatty() : false;
483
+ this.kind = isatty ? 'bar' : 'plain';
484
+ }
485
+ }
486
+
487
+ private _elapsed(since: number): string {
488
+ const s = Math.trunc(_monotonic() - since);
489
+ return s >= 60 ? `${Math.trunc(s / 60)}m${String(s % 60).padStart(2, '0')}s` : `${s}s`;
490
+ }
491
+
492
+ private _bar(): string {
493
+ const filled = Math.trunc((Progress.BAR_WIDTH * this.done) / this.total);
494
+ return '█'.repeat(filled) + '░'.repeat(Progress.BAR_WIDTH - filled);
495
+ }
496
+
497
+ private _render_bar(suffix = ''): void {
498
+ const line = `\r[${this._bar()}] ${this.done}/${this.total} · ${this._cur} · ${this._elapsed(this.started)}${suffix}`;
499
+ // Python: line.ljust(90)[:160]
500
+ this.stream.write(_ljust(line, 90).slice(0, 160));
501
+ }
502
+
503
+ start_task(variant: string, idx: number, count: number, taskId: string): void {
504
+ this._cur = `${variant} ${idx}/${count} · ${taskId}`;
505
+ this._task_started = _monotonic();
506
+ _write_progress({
507
+ mode: this.mode,
508
+ variant,
509
+ task_idx: idx,
510
+ task_count: count,
511
+ total_done: this.done,
512
+ total: this.total,
513
+ current_id: taskId,
514
+ started_at: utc_stamp(),
515
+ last_result: null,
516
+ });
517
+ if (this.kind === 'none') {
518
+ return;
519
+ }
520
+ if (this.kind === 'bar') {
521
+ this._render_bar(this.mode === 'live' ? ' · running…' : '');
522
+ // heartbeat: no-op under Node's blocking model (see class note).
523
+ } else if (this.mode === 'live') {
524
+ this.stream.write(`[${this.done + 1}/${this.total}] ▶ ${this._cur}\n`);
525
+ }
526
+ }
527
+
528
+ end_task(passed: boolean, wall: number, variant: string, taskId: string): void {
529
+ this.done += 1;
530
+ const mark = passed ? '✓' : '✗';
531
+ _write_progress({
532
+ mode: this.mode,
533
+ variant,
534
+ total_done: this.done,
535
+ total: this.total,
536
+ current_id: taskId,
537
+ updated_at: utc_stamp(),
538
+ last_result: passed ? 'pass' : 'fail',
539
+ });
540
+ if (this.kind === 'none') {
541
+ return;
542
+ }
543
+ if (this.kind === 'bar') {
544
+ this._render_bar(` · ${mark}`);
545
+ } else {
546
+ this.stream.write(`[${this.done}/${this.total}] ${mark} ${variant} · ${taskId} · ${_pyFixed(wall, 1)}s\n`);
547
+ }
548
+ }
549
+
550
+ variant_done(line: string): void {
551
+ if (this.kind === 'bar') {
552
+ this.stream.write('\n');
553
+ }
554
+ this.stream.write(line.endsWith('\n') ? line : line + '\n');
555
+ }
556
+
557
+ finish(): void {
558
+ if (this.kind === 'bar') {
559
+ this.stream.write('\n');
560
+ }
561
+ if (this.kind !== 'none') {
562
+ this.stream.write(`bench progress: ${this.done}/${this.total} tasks · total ${this._elapsed(this.started)}\n`);
563
+ }
564
+ }
565
+ }
566
+
567
+ interface ScoreResultJson {
568
+ passed: boolean;
569
+ checks: Array<{ name: string; ok: boolean; reason: string }>;
570
+ }
571
+
572
+ interface PerTaskEntry {
573
+ id: unknown;
574
+ category: unknown;
575
+ duration?: unknown;
576
+ cognitive?: unknown;
577
+ score: ScoreResultJson;
578
+ errored?: boolean;
579
+ wall_time_seconds: number;
580
+ tokens?: number;
581
+ tokens_breakdown?: TokensBreakdown | Record<string, never>;
582
+ exit_code: number | null;
583
+ mode: string;
584
+ reason: string;
585
+ ask_events: AskEvents;
586
+ }
587
+
588
+ interface BucketAgg {
589
+ passed: number;
590
+ total: number;
591
+ completed: number;
592
+ errored: number;
593
+ completion_rate: number;
594
+ completion_rate_int: boolean;
595
+ mean_wall_time: number;
596
+ mean_wall_time_int: boolean;
597
+ mean_tokens: number; // always an int (Python round(...) with no ndigits)
598
+ }
599
+
600
+ /** Python truthiness for `not e.get("errored")` — missing / falsy → done. */
601
+ function _isDone(e: PerTaskEntry): boolean {
602
+ return !_pyTruthy(e.errored);
603
+ }
604
+
605
+ function _bucketAgg(entries: PerTaskEntry[]): BucketAgg {
606
+ const done = entries.filter(_isDone);
607
+ const passed = done.filter((e) => e.score.passed).length;
608
+ const total = entries.length;
609
+ const completed = done.length;
610
+ const sumWall = done.reduce((acc, e) => acc + (e.wall_time_seconds ?? 0), 0);
611
+ const sumTokens = done.reduce((acc, e) => acc + (e.tokens ?? 0), 0);
612
+ return {
613
+ passed,
614
+ total,
615
+ completed,
616
+ errored: total - completed,
617
+ completion_rate: completed ? _pyRound(passed / completed, 4) : 0,
618
+ completion_rate_int: !completed,
619
+ mean_wall_time: completed ? _pyRound(sumWall / completed, 3) : 0,
620
+ mean_wall_time_int: !completed,
621
+ mean_tokens: completed ? _pyRoundInt(sumTokens / completed) : 0,
622
+ };
623
+ }
624
+
625
+ export function per_category_aggregate(perTask: PerTaskEntry[]): Array<[string, BucketAgg]> {
626
+ // Group preserving first-seen category order (Python dict.setdefault).
627
+ const byCat = new Map<string, PerTaskEntry[]>();
628
+ for (const entry of perTask) {
629
+ // Python: entry.get("category", "unknown") — the .get default fires only
630
+ // when the key is absent; a present value (incl. null) stays.
631
+ const key = entry.category === undefined ? 'unknown' : (entry.category as string);
632
+ if (!byCat.has(key)) {
633
+ byCat.set(key, []);
634
+ }
635
+ byCat.get(key)!.push(entry);
636
+ }
637
+ const out: Array<[string, BucketAgg]> = [];
638
+ for (const [cat, entries] of byCat) {
639
+ out.push([cat, _bucketAgg(entries)]);
640
+ }
641
+ return out;
642
+ }
643
+
644
+ /**
645
+ * Aggregate by the 2×2 (duration × cognitive) cell — the value-benchmark axis.
646
+ *
647
+ * Cell key is `"<duration>/<cognitive>"`. Missing tags fall back to "untagged"
648
+ * (Python `entry.get('duration', 'untagged')`).
649
+ */
650
+ export function per_cell_aggregate(perTask: PerTaskEntry[]): Array<[string, BucketAgg]> {
651
+ const byCell = new Map<string, PerTaskEntry[]>();
652
+ for (const entry of perTask) {
653
+ const dur = entry.duration === undefined ? 'untagged' : _pyStr(entry.duration);
654
+ const cog = entry.cognitive === undefined ? 'untagged' : _pyStr(entry.cognitive);
655
+ const cell = `${dur}/${cog}`;
656
+ if (!byCell.has(cell)) {
657
+ byCell.set(cell, []);
658
+ }
659
+ byCell.get(cell)!.push(entry);
660
+ }
661
+ const out: Array<[string, BucketAgg]> = [];
662
+ for (const [cell, entries] of byCell) {
663
+ out.push([cell, _bucketAgg(entries)]);
664
+ }
665
+ return out;
666
+ }
667
+
668
+ interface CorpusTask {
669
+ id?: unknown;
670
+ category?: unknown;
671
+ prompt?: string;
672
+ [k: string]: unknown;
673
+ }
674
+
675
+ export function write_report(
676
+ variant: string,
677
+ mode: string,
678
+ perTask: PerTaskEntry[],
679
+ duration: number,
680
+ ): string {
681
+ fs.mkdirSync(REPORTS_DIR, { recursive: true });
682
+ const cacheKey = new bench_ab_cache.CacheKey(
683
+ bench_ab_cache.hash_file(CORPUS_PATH),
684
+ bench_ab_cache.claude_cli_version(),
685
+ bench_ab_cache.target_shape_hash(),
686
+ );
687
+ const total = perTask.length;
688
+ const done = perTask.filter(_isDone);
689
+ const completed = done.length;
690
+ const errored = total - completed;
691
+ const passed = done.filter((e) => e.score.passed).length;
692
+ const perCategory = per_category_aggregate(perTask);
693
+ const perCell = per_cell_aggregate(perTask);
694
+
695
+ // Hit-rate is over COMPLETED tasks only — errored tasks excluded.
696
+ const completionRate = completed ? _pyRound(passed / completed, 4) : 0;
697
+ const completionRateInt = !completed;
698
+ const sumWall = done.reduce((acc, e) => acc + (e.wall_time_seconds ?? 0), 0);
699
+ const meanWall = completed ? _pyRound(sumWall / completed, 3) : 0;
700
+ const meanWallInt = !completed;
701
+ const sumTokens = done.reduce((acc, e) => acc + (e.tokens ?? 0), 0);
702
+ const meanTokens = completed ? _pyRoundInt(sumTokens / completed) : 0; // int
703
+ const sumRatio = done.reduce((acc, e) => acc + (e.ask_events?.ratio ?? 0), 0);
704
+ const askVsAct = completed ? _pyRound(sumRatio / completed, 3) : 0;
705
+ const askVsActInt = !completed;
706
+
707
+ const stamp = utc_stamp();
708
+
709
+ // Build the markdown using the same field values.
710
+ const md =
711
+ `# Track B · ${variant} · ${mode}\n\n` +
712
+ `- Stamp: \`${stamp}\`\n` +
713
+ `- Completion rate: **${_pyFixed(completionRate * 100, 1)}%**` +
714
+ ` (${passed}/${completed} completed; ${errored} errored of ${total})\n` +
715
+ `- Mean wall-time: ${meanWallInt ? '0' : _pyNumStr(meanWall)}s\n` +
716
+ `- Ask vs. act ratio: ${askVsActInt ? '0' : _pyNumStr(askVsAct)}\n` +
717
+ `\n## Per-category\n\n` +
718
+ perCategory
719
+ .map(
720
+ ([cat, info]) =>
721
+ `- \`${cat}\` — ${info.passed}/${info.total} ` +
722
+ `(${_pyFixed(info.completion_rate * 100, 1)}%)`,
723
+ )
724
+ .join('\n') +
725
+ '\n';
726
+
727
+ // Build the JSON payload mirroring the Python `results` + `payload` dicts.
728
+ // Field order is significant for byte-parity (Python dict insertion order).
729
+ const resultsJson: Json = {
730
+ mode,
731
+ completion_rate: completionRateInt ? 0 : new PyFloat(completionRate),
732
+ passed,
733
+ completed,
734
+ errored,
735
+ total,
736
+ per_category: _bucketJson(perCategory),
737
+ per_cell: _bucketJson(perCell),
738
+ mean_wall_time: meanWallInt ? 0 : new PyFloat(meanWall),
739
+ total_tokens: sumTokens, // int
740
+ mean_tokens: meanTokens, // int
741
+ ask_vs_act_ratio: askVsActInt ? 0 : new PyFloat(askVsAct),
742
+ per_task: perTask.map((e) => _perTaskJson(e)),
743
+ };
744
+ const payload: Json = {
745
+ schema: 'ab-bench/0.1',
746
+ stamp,
747
+ variant,
748
+ corpus: 'ab-trackb',
749
+ cache_key: cacheKey.to_dict() as unknown as Json,
750
+ duration_seconds: new PyFloat(_pyRound(duration, 3)),
751
+ results: resultsJson,
752
+ };
753
+
754
+ const jsonPath = path.join(REPORTS_DIR, `${stamp}-ab-trackb-${variant}.json`);
755
+ fs.writeFileSync(jsonPath, _jsonDumps(payload, 2) + '\n');
756
+ const mdPath = jsonPath.replace(/\.json$/, '.md');
757
+ fs.writeFileSync(mdPath, md);
758
+ return jsonPath;
759
+ }
760
+
761
+ interface RunVariantResult {
762
+ path: string;
763
+ per_task: PerTaskEntry[];
764
+ duration: number;
765
+ }
766
+
767
+ interface RunVariantOpts {
768
+ max_budget?: number | null;
769
+ model?: string | null;
770
+ progress?: Progress | null;
771
+ }
772
+
773
+ export function run_variant(
774
+ variant: string,
775
+ tasks: CorpusTask[],
776
+ mode: string,
777
+ timeoutS: number,
778
+ opts: RunVariantOpts = {},
779
+ ): RunVariantResult {
780
+ const { max_budget = null, model = null, progress = null } = opts;
781
+ const started = _monotonic();
782
+ // Build the injected rule corpus once per variant (live only).
783
+ let spFile: string | null = null;
784
+ if (mode === 'live') {
785
+ const spText = system_prompt_for(variant);
786
+ if (spText) {
787
+ fs.mkdirSync(REPORTS_DIR, { recursive: true });
788
+ spFile = path.join(REPORTS_DIR, `.sysprompt-${variant}.txt`);
789
+ fs.writeFileSync(spFile, spText, 'utf-8');
790
+ }
791
+ }
792
+ const perTask: PerTaskEntry[] = [];
793
+ tasks.forEach((task, i) => {
794
+ if (progress !== null) {
795
+ progress.start_task(variant, i + 1, tasks.length, _pyStr(task.id));
796
+ }
797
+ // Fixture-only working dir, identical for every arm — the package is NOT
798
+ // in the clone files; activation is the injected system prompt (spFile).
799
+ const cloneRoot = reset_clone('without');
800
+ const pre = snapshot_clone(cloneRoot);
801
+ let runResult: RunResult;
802
+ if (mode === 'live') {
803
+ runResult = run_live(task as Record<string, unknown>, cloneRoot, timeoutS, {
804
+ sysprompt_file: spFile,
805
+ setting_sources: setting_sources_for(variant),
806
+ max_budget,
807
+ model,
808
+ });
809
+ } else {
810
+ runResult = run_dry(task as Record<string, unknown>, cloneRoot, variant);
811
+ }
812
+ const post = snapshot_clone(cloneRoot);
813
+ const score = score_task(task as Record<string, unknown>, {
814
+ pre_snapshot: pre,
815
+ post_snapshot: post,
816
+ clone_root: cloneRoot,
817
+ transcript: runResult.transcript ?? '',
818
+ });
819
+ perTask.push({
820
+ id: task.id,
821
+ category: task.category,
822
+ duration: task['duration'],
823
+ cognitive: task['cognitive'],
824
+ score: { passed: score.passed, checks: score.checks },
825
+ // `errored` = the run did not complete on merit (rate-limit,
826
+ // budget-cap, timeout, CLI failure). Distinct from a content fail.
827
+ errored: Boolean(runResult.errored ?? false),
828
+ wall_time_seconds: runResult.wall_time_seconds ?? 0.0,
829
+ tokens: runResult.tokens ?? 0,
830
+ tokens_breakdown: runResult.tokens_breakdown ?? {},
831
+ exit_code: runResult.exit_code,
832
+ mode: runResult.mode ?? mode,
833
+ reason: runResult.reason ?? '',
834
+ ask_events: count_ask_events(runResult.transcript ?? ''),
835
+ });
836
+ if (progress !== null) {
837
+ progress.end_task(
838
+ Boolean(score.passed),
839
+ Number(runResult.wall_time_seconds ?? 0.0) || 0.0,
840
+ variant,
841
+ _pyStr(task.id),
842
+ );
843
+ }
844
+ });
845
+ const duration = _monotonic() - started;
846
+ const reportPath = write_report(variant, mode, perTask, duration);
847
+ const summary =
848
+ `bench_ab_task_runner: ${variant} (${mode}) → ` +
849
+ `${perTask.filter((e) => e.score.passed).length}/${perTask.length} ` +
850
+ `passed — ${_relPosix(reportPath, REPO_ROOT)}`;
851
+ if (progress !== null) {
852
+ progress.variant_done(summary);
853
+ } else {
854
+ process.stdout.write(summary + '\n');
855
+ }
856
+ return { path: reportPath, per_task: perTask, duration };
857
+ }
858
+
859
+ interface Args {
860
+ variant: string;
861
+ mode: string;
862
+ timeout: number;
863
+ progress: string;
864
+ limit: number;
865
+ tasks: string;
866
+ model: string;
867
+ budget: number;
868
+ }
869
+
870
+ const VARIANT_CHOICES = ['with', 'without', 'with-rdp', 'both', 'all'];
871
+ const PROGRESS_CHOICES = ['auto', 'bar', 'plain', 'none'];
872
+
873
+ function parse_args(argv: string[]): Args {
874
+ const args: Args = {
875
+ variant: 'both',
876
+ mode: 'dry-run',
877
+ timeout: 120,
878
+ progress: 'auto',
879
+ limit: 0,
880
+ tasks: '',
881
+ model: 'claude-sonnet-4-6',
882
+ budget: 2.0,
883
+ };
884
+ for (let i = 0; i < argv.length; i++) {
885
+ const a = argv[i]!;
886
+ if (a === '--variant') args.variant = _choice(argv[++i] ?? '', '--variant', VARIANT_CHOICES);
887
+ else if (a.startsWith('--variant='))
888
+ args.variant = _choice(a.slice('--variant='.length), '--variant', VARIANT_CHOICES);
889
+ else if (a === '--mode') args.mode = _choice(argv[++i] ?? '', '--mode', ['dry-run', 'live']);
890
+ else if (a.startsWith('--mode=')) args.mode = _choice(a.slice('--mode='.length), '--mode', ['dry-run', 'live']);
891
+ else if (a === '--timeout') args.timeout = _pyInt(argv[++i] ?? '', '--timeout');
892
+ else if (a.startsWith('--timeout=')) args.timeout = _pyInt(a.slice('--timeout='.length), '--timeout');
893
+ else if (a === '--progress') args.progress = _choice(argv[++i] ?? '', '--progress', PROGRESS_CHOICES);
894
+ else if (a.startsWith('--progress='))
895
+ args.progress = _choice(a.slice('--progress='.length), '--progress', PROGRESS_CHOICES);
896
+ else if (a === '--limit') args.limit = _pyInt(argv[++i] ?? '', '--limit');
897
+ else if (a.startsWith('--limit=')) args.limit = _pyInt(a.slice('--limit='.length), '--limit');
898
+ else if (a === '--tasks') args.tasks = argv[++i] ?? '';
899
+ else if (a.startsWith('--tasks=')) args.tasks = a.slice('--tasks='.length);
900
+ else if (a === '--model') args.model = argv[++i] ?? '';
901
+ else if (a.startsWith('--model=')) args.model = a.slice('--model='.length);
902
+ else if (a === '--budget') args.budget = _pyFloat(argv[++i] ?? '', '--budget');
903
+ else if (a.startsWith('--budget=')) args.budget = _pyFloat(a.slice('--budget='.length), '--budget');
904
+ else {
905
+ process.stderr.write(`bench_ab_task_runner: error: unrecognized arguments: ${a}\n`);
906
+ process.exitCode = 2;
907
+ throw new ArgExit();
908
+ }
909
+ }
910
+ return args;
911
+ }
912
+
913
+ class ArgExit extends Error {}
914
+
915
+ export function main(argv: string[] | null = null): number {
916
+ const rawArgv = argv ?? process.argv.slice(2);
917
+ const args = parse_args(rawArgv);
918
+ if (!fs.existsSync(CORPUS_PATH)) {
919
+ process.stderr.write(`bench_ab_task_runner: corpus missing at ${CORPUS_PATH}\n`);
920
+ return 1;
921
+ }
922
+ const data = (_yamlSafeLoad(fs.readFileSync(CORPUS_PATH, 'utf-8')) as { tasks?: CorpusTask[] }) ?? {};
923
+ let tasks = data.tasks ?? [];
924
+ if (tasks.length === 0) {
925
+ process.stderr.write('bench_ab_task_runner: corpus has no tasks\n');
926
+ return 1;
927
+ }
928
+ if (args.tasks.trim()) {
929
+ const wanted = args.tasks
930
+ .split(',')
931
+ .map((s) => s.trim())
932
+ .filter((s) => s.length > 0);
933
+ const byId = new Map<string, CorpusTask>();
934
+ for (const t of tasks) {
935
+ byId.set(_pyStr(t.id), t);
936
+ }
937
+ const missing = wanted.filter((w) => !byId.has(w));
938
+ if (missing.length) {
939
+ process.stderr.write(`bench_ab_task_runner: unknown task id(s): ${missing.join(', ')}\n`);
940
+ return 1;
941
+ }
942
+ tasks = wanted.map((w) => byId.get(w)!);
943
+ } else if (args.limit && args.limit > 0) {
944
+ tasks = tasks.slice(0, args.limit);
945
+ }
946
+ let variants: string[];
947
+ if (args.variant === 'both') {
948
+ variants = ['with', 'without'];
949
+ } else if (args.variant === 'all') {
950
+ variants = ['with', 'without', 'with-rdp'];
951
+ } else {
952
+ variants = [args.variant];
953
+ }
954
+ const maxBudget = args.budget && args.budget > 0 ? args.budget : null;
955
+ const model = args.model || null;
956
+ const progress = new Progress(variants.length * tasks.length, args.mode, args.progress);
957
+ for (const variant of variants) {
958
+ run_variant(variant, tasks, args.mode, args.timeout, { max_budget: maxBudget, model, progress });
959
+ }
960
+ progress.finish();
961
+ return 0;
962
+ }
963
+
964
+ // --- JSON shaping ------------------------------------------------------------
965
+
966
+ class PyFloat {
967
+ constructor(readonly value: number) {}
968
+ }
969
+
970
+ type Json = null | boolean | number | string | PyFloat | Json[] | { [k: string]: Json };
971
+
972
+ /** Serialize per-category / per-cell aggregates (same BucketAgg shape). */
973
+ function _bucketJson(buckets: Array<[string, BucketAgg]>): { [k: string]: Json } {
974
+ const out: { [k: string]: Json } = {};
975
+ for (const [key, info] of buckets) {
976
+ out[key] = {
977
+ passed: info.passed,
978
+ total: info.total,
979
+ completed: info.completed,
980
+ errored: info.errored,
981
+ completion_rate: info.completion_rate_int ? 0 : new PyFloat(info.completion_rate),
982
+ mean_wall_time: info.mean_wall_time_int ? 0 : new PyFloat(info.mean_wall_time),
983
+ mean_tokens: info.mean_tokens, // int
984
+ };
985
+ }
986
+ return out;
987
+ }
988
+
989
+ /**
990
+ * Serialize a per_task entry. Python's `write_report` stores the `per_task`
991
+ * list verbatim (it does NOT reshape it), so the JSON carries EXACTLY the keys
992
+ * each entry dict was built with, in insertion order. `run_variant` builds the
993
+ * full 13-key shape; a caller (e.g. the golden test) may pass a reduced dict.
994
+ * Only emit keys that are present so byte-parity holds for both shapes.
995
+ */
996
+ function _perTaskJson(e: PerTaskEntry): Json {
997
+ const out: { [k: string]: Json } = {};
998
+ out['id'] = _toJson(e.id);
999
+ out['category'] = _toJson(e.category);
1000
+ if ('duration' in e) {
1001
+ out['duration'] = _toJson(e.duration);
1002
+ }
1003
+ if ('cognitive' in e) {
1004
+ out['cognitive'] = _toJson(e.cognitive);
1005
+ }
1006
+ out['score'] = {
1007
+ passed: e.score.passed,
1008
+ checks: e.score.checks.map((c) => ({ name: c.name, ok: c.ok, reason: c.reason })),
1009
+ };
1010
+ if ('errored' in e) {
1011
+ out['errored'] = _pyTruthy(e.errored);
1012
+ }
1013
+ out['wall_time_seconds'] = new PyFloat(e.wall_time_seconds);
1014
+ if ('tokens' in e) {
1015
+ out['tokens'] = e.tokens ?? 0; // int
1016
+ }
1017
+ if ('tokens_breakdown' in e) {
1018
+ out['tokens_breakdown'] = _tokensBreakdownJson(e.tokens_breakdown);
1019
+ }
1020
+ out['exit_code'] = e.exit_code === null ? null : e.exit_code;
1021
+ out['mode'] = e.mode;
1022
+ out['reason'] = e.reason;
1023
+ out['ask_events'] = {
1024
+ asked: e.ask_events.asked,
1025
+ acted_with_commit: e.ask_events.acted_with_commit,
1026
+ ratio: e.ask_events.ratioIsInt ? 0 : new PyFloat(e.ask_events.ratio),
1027
+ };
1028
+ return out;
1029
+ }
1030
+
1031
+ /** `tokens_breakdown` is `{}` (run_live skip/timeout/dry-run absent) / a 4-int map. */
1032
+ function _tokensBreakdownJson(b: TokensBreakdown | Record<string, never> | undefined): Json {
1033
+ if (b === undefined || Object.keys(b).length === 0) {
1034
+ return {};
1035
+ }
1036
+ const tb = b as TokensBreakdown;
1037
+ return {
1038
+ input_tokens: tb.input_tokens,
1039
+ output_tokens: tb.output_tokens,
1040
+ cache_read_input_tokens: tb.cache_read_input_tokens,
1041
+ cache_creation_input_tokens: tb.cache_creation_input_tokens,
1042
+ };
1043
+ }
1044
+
1045
+ function _toJson(v: unknown): Json {
1046
+ if (v === null || v === undefined) return null;
1047
+ if (typeof v === 'boolean' || typeof v === 'number' || typeof v === 'string') return v;
1048
+ return String(v);
1049
+ }
1050
+
1051
+ // --- Python helpers ----------------------------------------------------------
1052
+
1053
+ /** json.dumps(obj, indent=2) — sort_keys False, ensure_ascii True. */
1054
+ function _jsonDumps(obj: Json, indent: number): string {
1055
+ const pad = ' '.repeat(indent);
1056
+
1057
+ function enc(value: Json, depth: number): string {
1058
+ if (value === null) return 'null';
1059
+ if (value instanceof PyFloat) {
1060
+ return Number.isInteger(value.value) ? `${value.value}.0` : String(value.value);
1061
+ }
1062
+ if (typeof value === 'boolean') return value ? 'true' : 'false';
1063
+ if (typeof value === 'number') return String(value);
1064
+ if (typeof value === 'string') return encStr(value);
1065
+ if (Array.isArray(value)) {
1066
+ if (value.length === 0) return '[]';
1067
+ const inner = value.map((v) => pad.repeat(depth + 1) + enc(v, depth + 1));
1068
+ return '[\n' + inner.join(',\n') + '\n' + pad.repeat(depth) + ']';
1069
+ }
1070
+ const o = value as { [k: string]: Json };
1071
+ const keys = Object.keys(o);
1072
+ if (keys.length === 0) return '{}';
1073
+ const inner = keys.map((k) => pad.repeat(depth + 1) + encStr(k) + ': ' + enc(o[k]!, depth + 1));
1074
+ return '{\n' + inner.join(',\n') + '\n' + pad.repeat(depth) + '}';
1075
+ }
1076
+
1077
+ function encStr(s: string): string {
1078
+ let out = '"';
1079
+ for (const ch of s) {
1080
+ const cp = ch.codePointAt(0) as number;
1081
+ if (ch === '"') out += '\\"';
1082
+ else if (ch === '\\') out += '\\\\';
1083
+ else if (ch === '\n') out += '\\n';
1084
+ else if (ch === '\r') out += '\\r';
1085
+ else if (ch === '\t') out += '\\t';
1086
+ else if (ch === '\b') out += '\\b';
1087
+ else if (ch === '\f') out += '\\f';
1088
+ else if (cp < 0x20) out += '\\u' + cp.toString(16).padStart(4, '0');
1089
+ else if (cp < 0x7f) out += ch;
1090
+ else if (cp > 0xffff) {
1091
+ const v = cp - 0x10000;
1092
+ const hi = 0xd800 + (v >> 10);
1093
+ const lo = 0xdc00 + (v & 0x3ff);
1094
+ out += '\\u' + hi.toString(16).padStart(4, '0');
1095
+ out += '\\u' + lo.toString(16).padStart(4, '0');
1096
+ } else {
1097
+ out += '\\u' + cp.toString(16).padStart(4, '0');
1098
+ }
1099
+ }
1100
+ return out + '"';
1101
+ }
1102
+
1103
+ return enc(obj, 0);
1104
+ }
1105
+
1106
+ /**
1107
+ * Python `round(value, ndigits)` — round-half-to-even on the EXACT IEEE-754
1108
+ * value (matches CPython, which rounds the true decimal expansion, not a naive
1109
+ * `value * 10**n`). E.g. `round(0.333/2, 3)` → 0.167 (the stored double is
1110
+ * 0.16650…091, strictly above half), where naive half-even gives 0.166.
1111
+ * Returns a number whose own shortest-repr matches what Python's repr produces
1112
+ * for the rounded value (so json.dumps / str() parity holds).
1113
+ */
1114
+ function _pyRound(value: number, ndigits: number): number {
1115
+ if (!Number.isFinite(value)) return value;
1116
+ return Number(_pyFixed(value, ndigits));
1117
+ }
1118
+
1119
+ /**
1120
+ * `format(x, '.Nf')` parity with CPython: round-half-to-even on the EXACT value
1121
+ * of the IEEE-754 double, not a naive `x * 10**N` (which diverges on products
1122
+ * landing just below `.5`, e.g. `12.345 * 100` → 12.34 naive vs 12.35 CPython).
1123
+ * `toFixed(40)` yields the exact decimal expansion; BigInt half-even on that
1124
+ * string reproduces CPython byte-for-byte.
1125
+ */
1126
+ function _pyFixed(x: number, ndigits: number): string {
1127
+ if (!Number.isFinite(x)) return String(x);
1128
+ const neg = x < 0 || Object.is(x, -0);
1129
+ const abs = Math.abs(x);
1130
+ const exact = abs.toFixed(40);
1131
+ const dot = exact.indexOf('.');
1132
+ const intPart = dot === -1 ? exact : exact.slice(0, dot);
1133
+ const fracPart = dot === -1 ? '' : exact.slice(dot + 1);
1134
+ const kept = (intPart + fracPart.slice(0, ndigits).padEnd(ndigits, '0')).replace(/^0+(?=\d)/, '');
1135
+ const rest = fracPart.slice(ndigits);
1136
+ let value = BigInt(kept === '' ? '0' : kept);
1137
+ if (rest.length > 0) {
1138
+ const firstRest = rest.charCodeAt(0) - 48;
1139
+ const hasMore = /[1-9]/.test(rest.slice(1));
1140
+ if (firstRest > 5 || (firstRest === 5 && hasMore)) {
1141
+ value += 1n;
1142
+ } else if (firstRest === 5 && !hasMore) {
1143
+ if (value % 2n === 1n) {
1144
+ value += 1n;
1145
+ }
1146
+ }
1147
+ }
1148
+ let intStr = value.toString();
1149
+ let result: string;
1150
+ if (ndigits === 0) {
1151
+ result = intStr;
1152
+ } else {
1153
+ if (intStr.length <= ndigits) {
1154
+ intStr = '0'.repeat(ndigits - intStr.length + 1) + intStr;
1155
+ }
1156
+ const whole = intStr.slice(0, intStr.length - ndigits);
1157
+ const dec = intStr.slice(intStr.length - ndigits);
1158
+ result = `${whole}.${dec}`;
1159
+ }
1160
+ return neg ? `-${result}` : result;
1161
+ }
1162
+
1163
+ /** Python `round(x)` with no ndigits → nearest int, round-half-to-even. */
1164
+ function _pyRoundInt(x: number): number {
1165
+ if (!Number.isFinite(x)) return x;
1166
+ const floor = Math.floor(x);
1167
+ const frac = x - floor;
1168
+ const eps = Math.max(Math.abs(x), 1) * 2 ** -40;
1169
+ if (Math.abs(frac - 0.5) <= eps) {
1170
+ return floor % 2 === 0 ? floor : floor + 1;
1171
+ }
1172
+ return Math.round(x);
1173
+ }
1174
+
1175
+ /** Python truthiness of an arbitrary JS value (None/false/0/""/[]/{} falsy). */
1176
+ function _pyTruthy(v: unknown): boolean {
1177
+ if (v === null || v === undefined) return false;
1178
+ if (typeof v === 'boolean') return v;
1179
+ if (typeof v === 'number') return v !== 0 && !Number.isNaN(v);
1180
+ if (typeof v === 'string') return v.length > 0;
1181
+ if (Array.isArray(v)) return v.length > 0;
1182
+ if (typeof v === 'object') return Object.keys(v).length > 0;
1183
+ return Boolean(v);
1184
+ }
1185
+
1186
+ /** Python `x or fallback` guard for a string-typed value (truthy → string). */
1187
+ function _pyTruthyStr(v: unknown): boolean {
1188
+ return typeof v === 'string' && v.length > 0;
1189
+ }
1190
+
1191
+ /** Python `str(x or "")` — falsy → "", else `str(value)`. */
1192
+ function _pyStrOrEmpty(v: unknown): string {
1193
+ return _pyTruthy(v) ? _pyStr(v) : '';
1194
+ }
1195
+
1196
+ /** Python `int(x or 0)` for a usage-count field — non-int / falsy → 0. */
1197
+ function _intOrZero(v: unknown): number {
1198
+ if (typeof v === 'number' && Number.isFinite(v)) return Math.trunc(v);
1199
+ if (typeof v === 'boolean') return v ? 1 : 0;
1200
+ return 0;
1201
+ }
1202
+
1203
+ function _isPlainObj(v: unknown): boolean {
1204
+ return v !== null && typeof v === 'object' && !Array.isArray(v);
1205
+ }
1206
+
1207
+ /** Python `str(float)` for the --max-budget-usd argv value (e.g. 2.0 → "2.0"). */
1208
+ function _pyStrNum(x: number): string {
1209
+ return Number.isInteger(x) ? `${x}.0` : String(x);
1210
+ }
1211
+
1212
+ /** argparse `type=float` — accept int/float literals; on failure exit 2. */
1213
+ function _pyFloat(s: string, flag: string): number {
1214
+ const trimmed = s.trim();
1215
+ const n = Number(trimmed);
1216
+ if (trimmed === '' || Number.isNaN(n)) {
1217
+ process.stderr.write(`bench_ab_task_runner: error: argument ${flag}: invalid float value: '${s}'\n`);
1218
+ process.exitCode = 2;
1219
+ throw new ArgExit();
1220
+ }
1221
+ return n;
1222
+ }
1223
+
1224
+ /** Python str.ljust(width) — right-pad with spaces to at least `width`. */
1225
+ function _ljust(s: string, width: number): string {
1226
+ return s.length >= width ? s : s + ' '.repeat(width - s.length);
1227
+ }
1228
+
1229
+ /** Render a float the way Python `f"{x}"` / `str(x)` would (e.g. 0.0 → "0.0"). */
1230
+ function _pyNumStr(x: number): string {
1231
+ if (Number.isInteger(x)) {
1232
+ return `${x}.0`;
1233
+ }
1234
+ return String(x);
1235
+ }
1236
+
1237
+ /** Mirror Python `str(value)` for the dict-id / category JSON-coercion paths. */
1238
+ function _pyStr(v: unknown): string {
1239
+ if (v === null || v === undefined) return 'None';
1240
+ if (v === true) return 'True';
1241
+ if (v === false) return 'False';
1242
+ return String(v);
1243
+ }
1244
+
1245
+ function _countSub(haystack: string, needle: string): number {
1246
+ // str.count — non-overlapping occurrences.
1247
+ if (needle === '') return haystack.length + 1;
1248
+ let count = 0;
1249
+ let idx = 0;
1250
+ while ((idx = haystack.indexOf(needle, idx)) !== -1) {
1251
+ count += 1;
1252
+ idx += needle.length;
1253
+ }
1254
+ return count;
1255
+ }
1256
+
1257
+ function _monotonic(): number {
1258
+ // time.monotonic() — seconds, fractional. process.hrtime gives ns.
1259
+ const [s, ns] = process.hrtime();
1260
+ return s + ns / 1e9;
1261
+ }
1262
+
1263
+ function _which(cmd: string): string | null {
1264
+ const pathEnv = process.env['PATH'] || '';
1265
+ const exts =
1266
+ process.platform === 'win32'
1267
+ ? (process.env['PATHEXT'] || '.EXE;.CMD;.BAT;.COM').split(';')
1268
+ : [''];
1269
+ for (const dir of pathEnv.split(path.delimiter)) {
1270
+ if (!dir) continue;
1271
+ for (const ext of exts) {
1272
+ const candidate = path.join(dir, cmd + ext);
1273
+ try {
1274
+ fs.accessSync(candidate, fs.constants.X_OK);
1275
+ return candidate;
1276
+ } catch {
1277
+ // not here / not executable
1278
+ }
1279
+ }
1280
+ }
1281
+ return null;
1282
+ }
1283
+
1284
+ function _isFile(p: string): boolean {
1285
+ try {
1286
+ return fs.lstatSync(p).isFile();
1287
+ } catch {
1288
+ return false;
1289
+ }
1290
+ }
1291
+
1292
+ /**
1293
+ * sorted(clone_root.rglob("*")) — every entry under root, recursive, sorted by
1294
+ * full Path (component-wise lexical). rglob yields files AND dirs; the caller
1295
+ * filters with is_file. We mirror by walking and returning all paths sorted.
1296
+ */
1297
+ function _rglobSorted(root: string): string[] {
1298
+ const out: string[] = [];
1299
+ const walk = (dir: string): void => {
1300
+ let entries: fs.Dirent[];
1301
+ try {
1302
+ entries = fs.readdirSync(dir, { withFileTypes: true });
1303
+ } catch {
1304
+ return;
1305
+ }
1306
+ for (const e of entries) {
1307
+ const full = path.join(dir, e.name);
1308
+ out.push(full);
1309
+ if (e.isDirectory()) {
1310
+ walk(full);
1311
+ }
1312
+ }
1313
+ };
1314
+ walk(root);
1315
+ out.sort((a, b) => _pyPathCmp(a, b));
1316
+ return out;
1317
+ }
1318
+
1319
+ function _pyPathCmp(a: string, b: string): number {
1320
+ const pa = a.split(path.sep);
1321
+ const pb = b.split(path.sep);
1322
+ const n = Math.min(pa.length, pb.length);
1323
+ for (let i = 0; i < n; i++) {
1324
+ const c = _pyStrCmp(pa[i]!, pb[i]!);
1325
+ if (c !== 0) return c;
1326
+ }
1327
+ return pa.length - pb.length;
1328
+ }
1329
+
1330
+ function _pyStrCmp(a: string, b: string): number {
1331
+ const ca = Array.from(a);
1332
+ const cb = Array.from(b);
1333
+ const n = Math.min(ca.length, cb.length);
1334
+ for (let i = 0; i < n; i++) {
1335
+ const x = ca[i]!.codePointAt(0)!;
1336
+ const y = cb[i]!.codePointAt(0)!;
1337
+ if (x !== y) return x - y;
1338
+ }
1339
+ return ca.length - cb.length;
1340
+ }
1341
+
1342
+ function _relPosix(p: string, base: string): string {
1343
+ return path.relative(base, p).split(path.sep).join('/');
1344
+ }
1345
+
1346
+ function _choice(value: string, flag: string, choices: string[]): string {
1347
+ if (!choices.includes(value)) {
1348
+ const choicesStr = choices.map((c) => `'${c}'`).join(', ');
1349
+ process.stderr.write(
1350
+ `bench_ab_task_runner: error: argument ${flag}: invalid choice: '${value}' (choose from ${choicesStr})\n`,
1351
+ );
1352
+ process.exitCode = 2;
1353
+ throw new ArgExit();
1354
+ }
1355
+ return value;
1356
+ }
1357
+
1358
+ function _pyInt(s: string, flag: string): number {
1359
+ const trimmed = s.trim();
1360
+ if (!/^[+-]?\d+$/.test(trimmed)) {
1361
+ process.stderr.write(`bench_ab_task_runner: error: argument ${flag}: invalid int value: '${s}'\n`);
1362
+ process.exitCode = 2;
1363
+ throw new ArgExit();
1364
+ }
1365
+ return parseInt(trimmed, 10);
1366
+ }
1367
+
1368
+ function _yamlSafeLoad(s: string): unknown {
1369
+ return parseYaml(s, { version: '1.1' });
1370
+ }
1371
+
1372
+ if (import.meta.url === pathToFileURL(process.argv[1] ?? '').href) {
1373
+ try {
1374
+ process.exitCode = main();
1375
+ } catch (e) {
1376
+ if (e instanceof ArgExit) {
1377
+ process.exitCode = process.exitCode ?? 2;
1378
+ } else {
1379
+ throw e;
1380
+ }
1381
+ }
1382
+ }