@event4u/agent-config 6.1.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 (1537) hide show
  1. package/.claude-plugin/marketplace.json +35 -3
  2. package/AGENTS.md +8 -7
  3. package/CHANGELOG.md +408 -0
  4. package/CONTRIBUTING.md +1 -1
  5. package/README.md +17 -15
  6. package/dist/agent-src/commands/agent-status.md +2 -2
  7. package/dist/agent-src/commands/agents/audit.md +3 -3
  8. package/dist/agent-src/commands/agents/init.md +1 -1
  9. package/dist/agent-src/commands/agents/optimize.md +4 -4
  10. package/dist/agent-src/commands/analyze/decision.md +108 -0
  11. package/dist/agent-src/commands/analyze/incident.md +120 -0
  12. package/dist/agent-src/commands/analyze/near-miss.md +113 -0
  13. package/dist/agent-src/commands/analyze/postmortem.md +130 -0
  14. package/dist/agent-src/commands/analyze/premortem.md +104 -0
  15. package/dist/agent-src/commands/analyze.md +124 -0
  16. package/dist/agent-src/commands/brand/identity.md +27 -0
  17. package/dist/agent-src/commands/brand/review.md +27 -0
  18. package/dist/agent-src/commands/brand/strategy.md +27 -0
  19. package/dist/agent-src/commands/brand/tokens.md +28 -0
  20. package/dist/agent-src/commands/brand/voice.md +27 -0
  21. package/dist/agent-src/commands/brand.md +58 -0
  22. package/dist/agent-src/commands/check-current-md.md +3 -3
  23. package/dist/agent-src/commands/condense.md +2 -2
  24. package/dist/agent-src/commands/council/debate.md +2 -2
  25. package/dist/agent-src/commands/council/default.md +45 -18
  26. package/dist/agent-src/commands/fix/portability.md +3 -3
  27. package/dist/agent-src/commands/fix/refs.md +3 -3
  28. package/dist/agent-src/commands/implement-ticket.md +36 -6
  29. package/dist/agent-src/commands/knowledge/cross-repo.md +1 -1
  30. package/dist/agent-src/commands/memory/add.md +1 -1
  31. package/dist/agent-src/commands/mission/upgrade.md +182 -0
  32. package/dist/agent-src/commands/optimize/skills.md +2 -2
  33. package/dist/agent-src/commands/orchestrate.md +1 -1
  34. package/dist/agent-src/commands/pr/create.md +6 -4
  35. package/dist/agent-src/commands/review-changes.md +8 -0
  36. package/dist/agent-src/commands/roadmap/materialize.md +73 -0
  37. package/dist/agent-src/commands/skill/preview.md +1 -1
  38. package/dist/agent-src/commands/skills/discover.md +1 -1
  39. package/dist/agent-src/commands/threat-model.md +4 -4
  40. package/dist/agent-src/commands/upstream-contribute.md +3 -3
  41. package/dist/agent-src/commands/video/from-script.md +2 -2
  42. package/dist/agent-src/commands/video/from-song.md +3 -3
  43. package/dist/agent-src/commands/video/scene.md +1 -1
  44. package/dist/agent-src/commands/video/storyboard.md +1 -1
  45. package/dist/agent-src/commands/video.md +3 -3
  46. package/dist/agent-src/contexts/communication/rules-auto/source-of-truth-mechanics.md +3 -3
  47. package/dist/agent-src/contexts/communication/rules-auto/user-interaction-mechanics.md +1 -1
  48. package/dist/agent-src/contexts/execution/evidence-discipline.md +153 -0
  49. package/dist/agent-src/contexts/execution/project-intelligence.md +264 -0
  50. package/dist/agent-src/contexts/execution/roadmap-process-loop.md +2 -1
  51. package/dist/agent-src/personas/ai-video-technical-director.md +1 -1
  52. package/dist/agent-src/personas/brand-strategist.md +74 -0
  53. package/dist/agent-src/personas/design-director.md +74 -0
  54. package/dist/agent-src/rules/brand-consistency.md +77 -0
  55. package/dist/agent-src/rules/brand-source-of-truth.md +57 -0
  56. package/dist/agent-src/rules/direct-answers.md +2 -0
  57. package/dist/agent-src/rules/domain-safety-disclaimer.md +2 -0
  58. package/dist/agent-src/rules/git-history-discipline.md +1 -0
  59. package/dist/agent-src/rules/icon-consistency.md +53 -0
  60. package/dist/agent-src/rules/image-likeness-and-rights.md +67 -0
  61. package/dist/agent-src/rules/lethal-trifecta-guard.md +1 -1
  62. package/dist/agent-src/rules/persona-governance.md +2 -2
  63. package/dist/agent-src/rules/provider-lifecycle-discipline.md +3 -1
  64. package/dist/agent-src/rules/roadmap-progress-sync.md +10 -0
  65. package/dist/agent-src/rules/security-sensitive-stop.md +9 -3
  66. package/dist/agent-src/rules/size-enforcement.md +1 -1
  67. package/dist/agent-src/rules/source-confidentiality.md +3 -3
  68. package/dist/agent-src/rules/source-discovery-gate.md +98 -0
  69. package/dist/agent-src/rules/think-before-action.md +1 -0
  70. package/dist/agent-src/rules/ui-audit-gate.md +2 -0
  71. package/dist/agent-src/rules/untrusted-input-defense.md +1 -1
  72. package/dist/agent-src/rules/user-interaction.md +1 -1
  73. package/dist/agent-src/scripts/archive_completed_roadmaps.ts +392 -0
  74. package/dist/agent-src/scripts/update_roadmap_progress.ts +824 -0
  75. package/dist/agent-src/skills/adr-create/SKILL.md +5 -5
  76. package/dist/agent-src/skills/agent-security-review/evals/triggers.json +1 -0
  77. package/dist/agent-src/skills/agents-md-thin-root/SKILL.md +1 -1
  78. package/dist/agent-src/skills/ai-council/SKILL.md +1 -1
  79. package/dist/agent-src/skills/analysis-autonomous-mode/SKILL.md +9 -13
  80. package/dist/agent-src/skills/blade-ui/SKILL.md +12 -5
  81. package/dist/agent-src/skills/blameless-post-mortem/SKILL.md +199 -0
  82. package/dist/agent-src/skills/brand/ATTRIBUTION.md +38 -0
  83. package/dist/agent-src/skills/brand/SKILL.md +115 -0
  84. package/dist/agent-src/skills/brand/data/archetypes.csv +13 -0
  85. package/dist/agent-src/skills/brand/data/color-psychology.csv +14 -0
  86. package/dist/agent-src/skills/brand/data/logo-style-fit.csv +13 -0
  87. package/dist/agent-src/skills/brand/data/manifest.json +226 -0
  88. package/dist/agent-src/skills/brand/data/messaging-frameworks.csv +13 -0
  89. package/dist/agent-src/skills/brand/data/naming-patterns.csv +13 -0
  90. package/dist/agent-src/skills/brand/data/typography-principles.csv +13 -0
  91. package/dist/agent-src/skills/brand/data/voice-tone.csv +13 -0
  92. package/dist/agent-src/skills/brand/evals/triggers.json +17 -0
  93. package/dist/agent-src/skills/brand-asset-generation/SKILL.md +89 -0
  94. package/dist/agent-src/skills/brand-asset-generation/evals/triggers.json +17 -0
  95. package/dist/agent-src/skills/brand-audit/SKILL.md +67 -0
  96. package/dist/agent-src/skills/brand-audit/evals/triggers.json +17 -0
  97. package/dist/agent-src/skills/brand-identity/SKILL.md +101 -0
  98. package/dist/agent-src/skills/brand-identity/evals/triggers.json +17 -0
  99. package/dist/agent-src/skills/brand-strategy/SKILL.md +83 -0
  100. package/dist/agent-src/skills/brand-strategy/evals/triggers.json +17 -0
  101. package/dist/agent-src/skills/brand-to-tokens/SKILL.md +102 -0
  102. package/dist/agent-src/skills/brand-to-tokens/evals/triggers.json +17 -0
  103. package/dist/agent-src/skills/brand-to-tokens/templates/marp-brand-deck.md.example +46 -0
  104. package/dist/agent-src/skills/brand-to-tokens/templates/reveal-brand-deck.yaml +32 -0
  105. package/dist/agent-src/skills/canvas-design/evals/triggers.json +1 -0
  106. package/dist/agent-src/skills/check-refs/SKILL.md +5 -5
  107. package/dist/agent-src/skills/code-review/SKILL.md +6 -15
  108. package/dist/agent-src/skills/command-writing/SKILL.md +2 -2
  109. package/dist/agent-src/skills/complexity-first-planning/evals/triggers.json +1 -0
  110. package/dist/agent-src/skills/context-authoring/SKILL.md +2 -2
  111. package/dist/agent-src/skills/context-document/SKILL.md +35 -2
  112. package/dist/agent-src/skills/corpus-grounding/evals/triggers.json +1 -0
  113. package/dist/agent-src/skills/corpus-grounding/scripts/bm25_search.ts +482 -0
  114. package/dist/agent-src/skills/corpus-grounding/scripts/decision_engine.ts +803 -0
  115. package/dist/agent-src/skills/corpus-grounding/scripts/ground.ts +541 -0
  116. package/dist/agent-src/skills/corpus-grounding/scripts/schema_validator.ts +309 -0
  117. package/dist/agent-src/skills/database/SKILL.md +26 -4
  118. package/dist/agent-src/skills/decision-record/SKILL.md +1 -1
  119. package/dist/agent-src/skills/decision-record/evals/triggers.json +17 -0
  120. package/dist/agent-src/skills/decision-review/SKILL.md +179 -0
  121. package/dist/agent-src/skills/description-assist/SKILL.md +1 -1
  122. package/dist/agent-src/skills/design-intelligence/SKILL.md +1 -1
  123. package/dist/agent-src/skills/design-intelligence/data/manifest.json +23 -6
  124. package/dist/agent-src/skills/design-intelligence/evals/triggers.json +1 -0
  125. package/dist/agent-src/skills/design-tokens/evals/triggers.json +1 -0
  126. package/dist/agent-src/skills/design-tokens/scripts/tokens.ts +888 -0
  127. package/dist/agent-src/skills/doc-coauthoring/evals/triggers.json +1 -0
  128. package/dist/agent-src/skills/eloquent/evals/triggers.json +1 -0
  129. package/dist/agent-src/skills/emit-tickets/SKILL.md +198 -0
  130. package/dist/agent-src/skills/estimate-ticket/evals/triggers.json +1 -0
  131. package/dist/agent-src/skills/git-workflow/SKILL.md +33 -0
  132. package/dist/agent-src/skills/guideline-writing/SKILL.md +2 -2
  133. package/dist/agent-src/skills/iconography/SKILL.md +88 -0
  134. package/dist/agent-src/skills/iconography/evals/triggers.json +17 -0
  135. package/dist/agent-src/skills/image-analyser/evals/triggers.json +1 -0
  136. package/dist/agent-src/skills/image-creator/evals/triggers.json +1 -0
  137. package/dist/agent-src/skills/image-editing/SKILL.md +100 -0
  138. package/dist/agent-src/skills/image-editing/evals/triggers.json +17 -0
  139. package/dist/agent-src/skills/image-generation/SKILL.md +95 -0
  140. package/dist/agent-src/skills/image-generation/evals/triggers.json +17 -0
  141. package/dist/agent-src/skills/image-provider-routing/SKILL.md +96 -0
  142. package/dist/agent-src/skills/image-provider-routing/evals/triggers.json +17 -0
  143. package/dist/agent-src/skills/launch-readiness/SKILL.md +21 -0
  144. package/dist/agent-src/skills/learning-to-rule-or-skill/SKILL.md +12 -8
  145. package/dist/agent-src/skills/lint-skills/SKILL.md +5 -5
  146. package/dist/agent-src/skills/logo-generation/SKILL.md +98 -0
  147. package/dist/agent-src/skills/logo-generation/evals/triggers.json +17 -0
  148. package/dist/agent-src/skills/markitdown/SKILL.md +1 -1
  149. package/dist/agent-src/skills/md-language-check/SKILL.md +1 -1
  150. package/dist/agent-src/skills/motion-choreographer/SKILL.md +1 -1
  151. package/dist/agent-src/skills/php-coder/evals/triggers.json +1 -0
  152. package/dist/agent-src/skills/prediction-pool-optimizer/evals/triggers.json +1 -0
  153. package/dist/agent-src/skills/premortem/SKILL.md +137 -0
  154. package/dist/agent-src/skills/prompt-engineering-image/SKILL.md +115 -0
  155. package/dist/agent-src/skills/prompt-engineering-image/evals/triggers.json +17 -0
  156. package/dist/agent-src/skills/prompt-validator/evals/triggers.json +1 -0
  157. package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +12 -5
  158. package/dist/agent-src/skills/react-shadcn-ui/scripts/shadcn_add.ts +388 -0
  159. package/dist/agent-src/skills/reasoning-orchestrator/SKILL.md +1 -1
  160. package/dist/agent-src/skills/reasoning-orchestrator/evals/triggers.json +1 -0
  161. package/dist/agent-src/skills/refine-ticket/evals/triggers.json +1 -0
  162. package/dist/agent-src/skills/roadmap-management/SKILL.md +16 -3
  163. package/dist/agent-src/skills/roadmap-writing/SKILL.md +76 -0
  164. package/dist/agent-src/skills/root-cause-frameworks/SKILL.md +146 -0
  165. package/dist/agent-src/skills/rule-refactor/SKILL.md +9 -9
  166. package/dist/agent-src/skills/rule-writing/SKILL.md +7 -7
  167. package/dist/agent-src/skills/script-writing/SKILL.md +2 -2
  168. package/dist/agent-src/skills/security-audit/SKILL.md +5 -0
  169. package/dist/agent-src/skills/skill-improvement-pipeline/SKILL.md +19 -3
  170. package/dist/agent-src/skills/skill-management/SKILL.md +3 -3
  171. package/dist/agent-src/skills/skill-reviewer/SKILL.md +1 -1
  172. package/dist/agent-src/skills/skill-writing/SKILL.md +5 -5
  173. package/dist/agent-src/skills/skill-writing/evals/triggers.json +1 -0
  174. package/dist/agent-src/skills/source-discovery/SKILL.md +182 -0
  175. package/dist/agent-src/skills/standards-from-config/SKILL.md +93 -0
  176. package/dist/agent-src/skills/systematic-debugging/SKILL.md +7 -0
  177. package/dist/agent-src/skills/tailwind-engineer/scripts/tailwind_config_gen.ts +561 -0
  178. package/dist/agent-src/skills/threat-modeling/SKILL.md +1 -0
  179. package/dist/agent-src/skills/typography-system/SKILL.md +138 -0
  180. package/dist/agent-src/skills/typography-system/evals/triggers.json +17 -0
  181. package/dist/agent-src/skills/upstream-contribute/SKILL.md +3 -3
  182. package/dist/agent-src/skills/verify-repair-loop/SKILL.md +209 -0
  183. package/dist/agent-src/skills/verify-repair-loop/evals/output-schema.yml +20 -0
  184. package/dist/agent-src/skills/verify-repair-loop/evals/triggers.json +17 -0
  185. package/dist/agent-src/templates/agent-settings.md +7 -0
  186. package/dist/agent-src/templates/contexts/knowledge-card.md +69 -0
  187. package/dist/agent-src/templates/contexts/lesson-card.md +73 -0
  188. package/dist/agent-src/templates/roadmaps.md +29 -1
  189. package/dist/agent-src/templates/scripts/README.md +6 -6
  190. package/dist/agent-src/templates/scripts/check_memory.ts +640 -0
  191. package/dist/agent-src/templates/scripts/check_memory_proposal.ts +351 -0
  192. package/dist/agent-src/templates/scripts/implement_ticket/__main__.ts +27 -0
  193. package/dist/agent-src/templates/scripts/memory_hash.ts +333 -0
  194. package/dist/agent-src/templates/scripts/memory_lookup.ts +1067 -0
  195. package/dist/agent-src/templates/scripts/memory_report.ts +846 -0
  196. package/dist/agent-src/templates/scripts/memory_signal.ts +422 -0
  197. package/dist/agent-src/templates/scripts/memory_status.ts +191 -0
  198. package/dist/agent-src/templates/scripts/pr_review_routing.ts +523 -0
  199. package/dist/agent-src/templates/scripts/pr_risk_review.ts +0 -0
  200. package/dist/agent-src/templates/scripts/telemetry/aggregator.ts +0 -0
  201. package/dist/agent-src/templates/scripts/telemetry/boundary.ts +164 -0
  202. package/dist/agent-src/templates/scripts/telemetry/engagement.ts +479 -0
  203. package/dist/agent-src/templates/scripts/telemetry/report_renderer.ts +394 -0
  204. package/dist/agent-src/templates/scripts/telemetry/settings.ts +210 -0
  205. package/dist/agent-src/templates/scripts/telemetry_record.ts +255 -0
  206. package/dist/agent-src/templates/scripts/telemetry_report.ts +189 -0
  207. package/dist/agent-src/templates/scripts/telemetry_status.ts +312 -0
  208. package/dist/agent-src/templates/scripts/tier_usage_report.ts +597 -0
  209. package/dist/agent-src/templates/scripts/work_engine/__main__.ts +14 -0
  210. package/dist/agent-src/templates/scripts/work_engine/_lib/agent_settings.ts +1118 -0
  211. package/dist/agent-src/templates/scripts/work_engine/_lib/user_global_paths.ts +329 -0
  212. package/dist/agent-src/templates/scripts/work_engine/cli.ts +206 -0
  213. package/dist/agent-src/templates/scripts/work_engine/cli_args.ts +249 -0
  214. package/dist/agent-src/templates/scripts/work_engine/delivery_state.ts +225 -0
  215. package/dist/agent-src/templates/scripts/work_engine/directives/backend/analyze.ts +125 -0
  216. package/dist/agent-src/templates/scripts/work_engine/directives/backend/implement.ts +189 -0
  217. package/dist/agent-src/templates/scripts/work_engine/directives/backend/index.ts +94 -0
  218. package/dist/agent-src/templates/scripts/work_engine/directives/backend/memory.ts +193 -0
  219. package/dist/agent-src/templates/scripts/work_engine/directives/backend/plan.ts +267 -0
  220. package/dist/agent-src/templates/scripts/work_engine/directives/backend/refine.ts +518 -0
  221. package/dist/agent-src/templates/scripts/work_engine/directives/backend/report.ts +379 -0
  222. package/dist/agent-src/templates/scripts/work_engine/directives/backend/test.ts +268 -0
  223. package/dist/agent-src/templates/scripts/work_engine/directives/backend/verify.ts +258 -0
  224. package/dist/agent-src/templates/scripts/work_engine/directives/index.ts +32 -0
  225. package/dist/agent-src/templates/scripts/work_engine/directives/mixed/contract.ts +243 -0
  226. package/dist/agent-src/templates/scripts/work_engine/directives/mixed/index.ts +108 -0
  227. package/dist/agent-src/templates/scripts/work_engine/directives/mixed/stitch.ts +259 -0
  228. package/dist/agent-src/templates/scripts/work_engine/directives/mixed/ui.ts +216 -0
  229. package/dist/agent-src/templates/scripts/work_engine/directives/ui/_passthrough.ts +40 -0
  230. package/dist/agent-src/templates/scripts/work_engine/directives/ui/app_spec.ts +241 -0
  231. package/dist/agent-src/templates/scripts/work_engine/directives/ui/apply.ts +216 -0
  232. package/dist/agent-src/templates/scripts/work_engine/directives/ui/audit.ts +506 -0
  233. package/dist/agent-src/templates/scripts/work_engine/directives/ui/design.ts +325 -0
  234. package/dist/agent-src/templates/scripts/work_engine/directives/ui/index.ts +102 -0
  235. package/dist/agent-src/templates/scripts/work_engine/directives/ui/polish.ts +462 -0
  236. package/dist/agent-src/templates/scripts/work_engine/directives/ui/review.ts +474 -0
  237. package/dist/agent-src/templates/scripts/work_engine/directives/ui/scaffold.ts +352 -0
  238. package/dist/agent-src/templates/scripts/work_engine/directives/ui_trivial/_skipped.ts +33 -0
  239. package/dist/agent-src/templates/scripts/work_engine/directives/ui_trivial/apply.ts +213 -0
  240. package/dist/agent-src/templates/scripts/work_engine/directives/ui_trivial/index.ts +111 -0
  241. package/dist/agent-src/templates/scripts/work_engine/directives/ui_trivial/refine.ts +126 -0
  242. package/dist/agent-src/templates/scripts/work_engine/directives/ui_trivial/report.ts +112 -0
  243. package/dist/agent-src/templates/scripts/work_engine/directives/ui_trivial/test.ts +164 -0
  244. package/dist/agent-src/templates/scripts/work_engine/dispatcher.ts +515 -0
  245. package/dist/agent-src/templates/scripts/work_engine/emitters.ts +119 -0
  246. package/dist/agent-src/templates/scripts/work_engine/errors.ts +24 -0
  247. package/dist/agent-src/templates/scripts/work_engine/hook_bootstrap.ts +104 -0
  248. package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/_chat_history_base.ts +176 -0
  249. package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/chat_history_append.ts +41 -0
  250. package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/chat_history_halt_append.ts +89 -0
  251. package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/decision_gate.ts +193 -0
  252. package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/decision_trace.ts +304 -0
  253. package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/directive_set_guard.ts +110 -0
  254. package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/halt_surface_audit.ts +118 -0
  255. package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/index.ts +17 -0
  256. package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/memory_visibility.ts +161 -0
  257. package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/state_shape_validation.ts +45 -0
  258. package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/trace.ts +134 -0
  259. package/dist/agent-src/templates/scripts/work_engine/hooks/context.ts +94 -0
  260. package/dist/agent-src/templates/scripts/work_engine/hooks/events.ts +58 -0
  261. package/dist/agent-src/templates/scripts/work_engine/hooks/exceptions.ts +85 -0
  262. package/dist/agent-src/templates/scripts/work_engine/hooks/index.ts +27 -0
  263. package/dist/agent-src/templates/scripts/work_engine/hooks/registry.ts +66 -0
  264. package/dist/agent-src/templates/scripts/work_engine/hooks/runner.ts +90 -0
  265. package/dist/agent-src/templates/scripts/work_engine/hooks/settings.ts +260 -0
  266. package/dist/agent-src/templates/scripts/work_engine/input_builders.ts +260 -0
  267. package/dist/agent-src/templates/scripts/work_engine/intent/classify.ts +466 -0
  268. package/dist/agent-src/templates/scripts/work_engine/migration/v0_to_v1.ts +531 -0
  269. package/dist/agent-src/templates/scripts/work_engine/orchestration.ts +366 -0
  270. package/dist/agent-src/templates/scripts/work_engine/persona_policy.ts +97 -0
  271. package/dist/agent-src/templates/scripts/work_engine/resolvers/diff.ts +135 -0
  272. package/dist/agent-src/templates/scripts/work_engine/resolvers/file.ts +175 -0
  273. package/dist/agent-src/templates/scripts/work_engine/resolvers/prompt.ts +115 -0
  274. package/dist/agent-src/templates/scripts/work_engine/scoring/confidence.ts +415 -0
  275. package/dist/agent-src/templates/scripts/work_engine/scoring/decision_engine.ts +466 -0
  276. package/dist/agent-src/templates/scripts/work_engine/scoring/decision_trace.ts +298 -0
  277. package/dist/agent-src/templates/scripts/work_engine/scoring/memory_visibility.ts +444 -0
  278. package/dist/agent-src/templates/scripts/work_engine/stack/detect.ts +252 -0
  279. package/dist/agent-src/templates/scripts/work_engine/stack/runner.ts +745 -0
  280. package/dist/agent-src/templates/scripts/work_engine/state.ts +1151 -0
  281. package/dist/agent-src/templates/scripts/work_engine/state_io.ts +413 -0
  282. package/dist/agent-src/templates/tickets.md +120 -0
  283. package/dist/cli/commands/commands.js +2 -2
  284. package/dist/cli/commands/commands.js.map +1 -1
  285. package/dist/cli/commands/doctorShell.js +4 -22
  286. package/dist/cli/commands/doctorShell.js.map +1 -1
  287. package/dist/cli/commands/packs.js +1 -1
  288. package/dist/cli/commands/packs.js.map +1 -1
  289. package/dist/cli/commands/recordTriggerEval.js +179 -0
  290. package/dist/cli/commands/recordTriggerEval.js.map +1 -0
  291. package/dist/cli/commands/recordTriggerEval.test.js +113 -0
  292. package/dist/cli/commands/recordTriggerEval.test.js.map +1 -0
  293. package/dist/cli/commands/workspaces.js +1 -1
  294. package/dist/cli/commands/workspaces.js.map +1 -1
  295. package/dist/cli/main.js +22 -1
  296. package/dist/cli/main.js.map +1 -1
  297. package/dist/cli/python/knowledge_ingest.js +1048 -0
  298. package/dist/cli/python/knowledge_ingest.js.map +1 -0
  299. package/dist/cli/python/workspace_analytics.js +1085 -0
  300. package/dist/cli/python/workspace_analytics.js.map +1 -0
  301. package/dist/cli/python/workspace_crypto.js +544 -0
  302. package/dist/cli/python/workspace_crypto.js.map +1 -0
  303. package/dist/cli/python/workspace_documents.js +1216 -0
  304. package/dist/cli/python/workspace_documents.js.map +1 -0
  305. package/dist/cli/python/workspace_drive.js +574 -0
  306. package/dist/cli/python/workspace_drive.js.map +1 -0
  307. package/dist/cli/python/workspace_drive_health.js +628 -0
  308. package/dist/cli/python/workspace_drive_health.js.map +1 -0
  309. package/dist/cli/python/workspace_explain.js +765 -0
  310. package/dist/cli/python/workspace_explain.js.map +1 -0
  311. package/dist/cli/python/workspace_hosts.js +349 -0
  312. package/dist/cli/python/workspace_hosts.js.map +1 -0
  313. package/dist/cli/python/workspace_inbox.js +692 -0
  314. package/dist/cli/python/workspace_inbox.js.map +1 -0
  315. package/dist/cli/python/workspace_render.js +816 -0
  316. package/dist/cli/python/workspace_render.js.map +1 -0
  317. package/dist/cli/python/workspace_roles.js +487 -0
  318. package/dist/cli/python/workspace_roles.js.map +1 -0
  319. package/dist/cli/python/workspace_secrets.js +180 -0
  320. package/dist/cli/python/workspace_secrets.js.map +1 -0
  321. package/dist/cli/python/workspace_sessions.js +1079 -0
  322. package/dist/cli/python/workspace_sessions.js.map +1 -0
  323. package/dist/cli/python/workspace_skills.js +417 -0
  324. package/dist/cli/python/workspace_skills.js.map +1 -0
  325. package/dist/cli/registry.js +2 -0
  326. package/dist/cli/registry.js.map +1 -1
  327. package/dist/discovery/deprecation-report.md +1 -1
  328. package/dist/discovery/discovery-manifest.json +1174 -123
  329. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  330. package/dist/discovery/discovery-manifest.summary.md +9 -6
  331. package/dist/discovery/orphan-report.md +1 -1
  332. package/dist/discovery/packs.json +163 -15
  333. package/dist/discovery/trust-report.md +4 -4
  334. package/dist/discovery/workspaces.json +73 -12
  335. package/dist/install/install.mjs +13934 -0
  336. package/dist/mcp/registry-manifest.json +4 -4
  337. package/dist/router.json +1 -1
  338. package/dist/server/routes/wizard.js +50 -21
  339. package/dist/server/routes/wizard.js.map +1 -1
  340. package/dist/server/routes/workspace.js +44 -25
  341. package/dist/server/routes/workspace.js.map +1 -1
  342. package/dist/server/schemas/settings.js +15 -0
  343. package/dist/server/schemas/settings.js.map +1 -1
  344. package/docs/SKILL_CENSUS.md +344 -0
  345. package/docs/architecture/augment-projection.md +1 -1
  346. package/docs/architecture/multi-tool-projection.md +3 -3
  347. package/docs/architecture.md +37 -6
  348. package/docs/benchmark.md +24 -27
  349. package/docs/capability-matrix.md +32 -0
  350. package/docs/catalog.md +50 -9
  351. package/docs/command-naming-audit.md +60 -0
  352. package/docs/contracts/STABILITY.md +32 -0
  353. package/docs/contracts/agents-md-tech-stack.md +1 -1
  354. package/docs/contracts/ai-council-config.md +22 -22
  355. package/docs/contracts/analysis-memory-loop.md +149 -0
  356. package/docs/contracts/benchmark-ab-contract.md +3 -3
  357. package/docs/contracts/branch-protection-policy.md +27 -0
  358. package/docs/contracts/brand-token-consumption.md +69 -0
  359. package/docs/contracts/command-clusters.md +2 -1
  360. package/docs/contracts/command-surface-tiers.md +13 -0
  361. package/docs/contracts/discovery-manifest.schema.json +24 -5
  362. package/docs/contracts/implement-ticket-flow.md +9 -9
  363. package/docs/contracts/install-layout.md +249 -0
  364. package/docs/contracts/kernel-membership.md +1 -1
  365. package/docs/contracts/linear-ai-rules-inclusion.md +2 -2
  366. package/docs/contracts/linter-structural-model.md +1 -1
  367. package/docs/contracts/mcp-discovery-phase-notice.md +1 -1
  368. package/docs/contracts/multi-tool-projection-fidelity.md +1 -1
  369. package/docs/contracts/namespace.md +2 -2
  370. package/docs/contracts/no-runtime-boundary.md +56 -0
  371. package/docs/contracts/package-self-orientation.md +24 -0
  372. package/docs/contracts/provider-lifecycle.md +3 -3
  373. package/docs/contracts/reasoning-discipline-protocol.md +83 -0
  374. package/docs/contracts/rule-classification.md +3 -3
  375. package/docs/contracts/skill-domains.md +1 -1
  376. package/docs/contracts/smoke-contracts.md +1 -1
  377. package/docs/contracts/surface-tiers.md +81 -0
  378. package/docs/contracts/ticket-bundle-format.md +228 -0
  379. package/docs/cookbook.md +152 -0
  380. package/docs/customization.md +12 -1
  381. package/docs/decisions/ADR-013-discovery-frontmatter-contract.md +16 -0
  382. package/docs/decisions/ADR-056-unvalidated-video-adapters-disposition.md +1 -1
  383. package/docs/decisions/ADR-059-render-resume-filesystem-as-state.md +1 -1
  384. package/docs/decisions/ADR-060-comfyui-sandbox-model.md +1 -1
  385. package/docs/decisions/ADR-061-corpus-grounding-layer.md +48 -1
  386. package/docs/decisions/ADR-096-analysis-workbench.md +110 -0
  387. package/docs/decisions/ADR-097-mission-recipe-privilege-boundary.md +121 -0
  388. package/docs/decisions/ADR-098-evidence-first-structure-discovery.md +154 -0
  389. package/docs/decisions/ADR-099-file-first-pattern-library.md +87 -0
  390. package/docs/decisions/ADR-100-global-knowledge-card-sharing.md +133 -0
  391. package/docs/decisions/ADR-101-ticket-bundle-emission.md +109 -0
  392. package/docs/decisions/ADR-102-ticket-handoff-paste-and-mcp.md +72 -0
  393. package/docs/decisions/ADR-103-global-knowledge-default-off-until-measured.md +92 -0
  394. package/docs/decisions/ADR-200-python-to-typescript-migration.md +193 -0
  395. package/docs/decisions/INDEX.md +9 -0
  396. package/docs/distribution/mcp-submission-checklist.md +3 -3
  397. package/docs/featured-commands.md +1 -1
  398. package/docs/featured-skills.md +1 -1
  399. package/docs/getting-started-by-role.md +2 -0
  400. package/docs/getting-started.md +2 -2
  401. package/docs/guidelines/agent-infra/failure-signatures.md +35 -0
  402. package/docs/guidelines/agent-infra/frontier-reasoning-operating-profile.md +5 -0
  403. package/docs/guidelines/agent-infra/size-and-scope.md +17 -0
  404. package/docs/guidelines/agent-infra/skill-quality-checklist.md +2 -2
  405. package/docs/guides/frontend-design-corpus-refresh.md +83 -0
  406. package/docs/guides/skill-preview.md +1 -1
  407. package/docs/hook-payload-capture.md +4 -4
  408. package/docs/mcp.md +1 -1
  409. package/docs/migration/consumer-template-consumption-model.md +145 -0
  410. package/docs/migration/divergences/README.md +55 -0
  411. package/docs/migration/divergences/_template.md +50 -0
  412. package/docs/migration/divergences/bench-stats-float-precision.md +72 -0
  413. package/docs/migration/divergences/mcp-telemetry-node-sqlite.md +61 -0
  414. package/docs/migration/divergences/pack-mcp-content-gzip-body.md +53 -0
  415. package/docs/migration/divergences/src-scripts-build_cloud_bundle.md +63 -0
  416. package/docs/migration/divergences/src-scripts-check_memory.md +91 -0
  417. package/docs/migration/divergences/src-scripts-inventory_abstraction_budget.md +65 -0
  418. package/docs/migration/divergences/src-scripts-lint_marketplace.md +57 -0
  419. package/docs/migration/divergences/src-scripts-lint_mcp_registry_manifest.md +70 -0
  420. package/docs/migration/divergences/src-scripts-spotcheck_thin_root.md +60 -0
  421. package/docs/migration/divergences/src-scripts-validate_agent_settings.md +58 -0
  422. package/docs/migration/node-floor.md +86 -0
  423. package/docs/migration/yaml-roundtrip-spike.md +163 -0
  424. package/docs/personas.md +6 -1
  425. package/docs/role-experiences.md +19 -0
  426. package/docs/setup/per-ide/windsurf.md +1 -1
  427. package/docs/skills-catalog.md +24 -3
  428. package/docs/threat-model.md +28 -0
  429. package/llms.txt +23 -2
  430. package/package.json +10 -15
  431. package/src/config/agent-settings.template.yml +64 -1
  432. package/src/config/discovery/packs.yml +31 -0
  433. package/src/config/discovery/unassigned-artefacts.yml +6 -0
  434. package/src/config/discovery/workspaces.yml +2 -2
  435. package/src/config/gitignore-block.txt +7 -0
  436. package/src/scripts/_cli/cmd_doctor.ts +2306 -0
  437. package/src/scripts/_cli/cmd_explain.ts +748 -0
  438. package/src/scripts/_cli/cmd_export.ts +375 -0
  439. package/src/scripts/_cli/cmd_migrate.ts +951 -0
  440. package/src/scripts/_cli/cmd_prune.ts +610 -0
  441. package/src/scripts/_cli/cmd_refresh.ts +530 -0
  442. package/src/scripts/_cli/cmd_settings_check.ts +407 -0
  443. package/src/scripts/_cli/cmd_settings_migrate.ts +344 -0
  444. package/src/scripts/_cli/cmd_sync.ts +381 -0
  445. package/src/scripts/_cli/cmd_uninstall.ts +833 -0
  446. package/src/scripts/_cli/cmd_update.ts +585 -0
  447. package/src/scripts/_cli/cmd_upgrade.ts +390 -0
  448. package/src/scripts/_cli/cmd_validate.ts +394 -0
  449. package/src/scripts/_cli/cmd_versions.ts +492 -0
  450. package/src/scripts/_cli/explain_last/assumptions.ts +114 -0
  451. package/src/scripts/_cli/explain_last/council.ts +197 -0
  452. package/src/scripts/_cli/explain_last/halt.ts +73 -0
  453. package/src/scripts/_cli/explain_last/index.ts +155 -0
  454. package/src/scripts/_cli/explain_last/inputs.ts +211 -0
  455. package/src/scripts/_cli/explain_last/memory.ts +231 -0
  456. package/src/scripts/_cli/explain_last/provider.ts +82 -0
  457. package/src/scripts/_cli/explain_last/render.ts +54 -0
  458. package/src/scripts/_cli/explain_last/route.ts +70 -0
  459. package/src/scripts/_cli/explain_last/scrubber.ts +138 -0
  460. package/src/scripts/_cli/explain_last/sections/assumptions.ts +51 -0
  461. package/src/scripts/_cli/explain_last/sections/council.ts +56 -0
  462. package/src/scripts/_cli/explain_last/sections/halt.ts +60 -0
  463. package/src/scripts/_cli/explain_last/sections/header.ts +50 -0
  464. package/src/scripts/_cli/explain_last/sections/index.ts +21 -0
  465. package/src/scripts/_cli/explain_last/sections/inputs.ts +63 -0
  466. package/src/scripts/_cli/explain_last/sections/memory.ts +124 -0
  467. package/src/scripts/_cli/explain_last/sections/pack.ts +42 -0
  468. package/src/scripts/_cli/explain_last/sections/provider.ts +51 -0
  469. package/src/scripts/_cli/explain_last/sections/route.ts +48 -0
  470. package/src/scripts/_cli/explain_last/state_loader.ts +119 -0
  471. package/src/scripts/_dispatch.bash +179 -163
  472. package/src/scripts/_lib/agent_settings.ts +1123 -0
  473. package/src/scripts/_lib/agent_src.ts +654 -0
  474. package/src/scripts/_lib/agents_overlay.ts +183 -0
  475. package/src/scripts/_lib/bench_ab_cache.ts +399 -0
  476. package/src/scripts/_lib/bench_ab_scoring.ts +352 -0
  477. package/src/scripts/_lib/bench_ab_scoring_v2.ts +751 -0
  478. package/src/scripts/_lib/bench_cost.ts +396 -0
  479. package/src/scripts/_lib/bench_quality.ts +237 -0
  480. package/src/scripts/_lib/bench_report.ts +255 -0
  481. package/src/scripts/_lib/bench_telegraph.ts +516 -0
  482. package/src/scripts/_lib/bench_telegraph_report.ts +272 -0
  483. package/src/scripts/_lib/changelog_eras.ts +398 -0
  484. package/src/scripts/_lib/claude_desktop_bundler.ts +324 -0
  485. package/src/scripts/_lib/cli_wrapper.ts +89 -0
  486. package/src/scripts/_lib/fs_atomic.ts +172 -0
  487. package/src/scripts/_lib/global_deploy_inventory.ts +639 -0
  488. package/src/scripts/_lib/install_layout.ts +87 -0
  489. package/src/scripts/_lib/install_regenerator.ts +157 -0
  490. package/src/scripts/_lib/installed_lock.ts +451 -0
  491. package/src/scripts/_lib/installed_tools.ts +518 -0
  492. package/src/scripts/_lib/json_pointers.ts +388 -0
  493. package/src/scripts/_lib/knowledge_global.ts +770 -0
  494. package/src/scripts/_lib/knowledge_global_promote.ts +453 -0
  495. package/src/scripts/_lib/knowledge_global_redaction.ts +448 -0
  496. package/src/scripts/_lib/link_crypto.ts +325 -0
  497. package/src/scripts/_lib/linked_projects.ts +613 -0
  498. package/src/scripts/_lib/model_tier.ts +65 -0
  499. package/src/scripts/_lib/module_detection.ts +275 -0
  500. package/src/scripts/_lib/node_sqlite.d.ts +32 -0
  501. package/src/scripts/_lib/pin_resolver.ts +264 -0
  502. package/src/scripts/_lib/py_random.ts +212 -0
  503. package/src/scripts/_lib/script_output.ts +147 -0
  504. package/src/scripts/_lib/security_lint.ts +623 -0
  505. package/src/scripts/_lib/surface_tiers.ts +127 -0
  506. package/src/scripts/_lib/token_count.ts +126 -0
  507. package/src/scripts/_lib/update_check.ts +297 -0
  508. package/src/scripts/_lib/user_global_paths.ts +329 -0
  509. package/src/scripts/_lib/value_ladder.ts +882 -0
  510. package/src/scripts/_lib/value_report.ts +617 -0
  511. package/src/scripts/_lib/zip_min.ts +175 -0
  512. package/src/scripts/adoption_report.ts +357 -0
  513. package/src/scripts/adoption_snapshot.ts +392 -0
  514. package/src/scripts/adoption_status.ts +424 -0
  515. package/src/scripts/adr/regenerate_index.ts +257 -0
  516. package/src/scripts/ai-image/adapters/flux.sh +45 -0
  517. package/src/scripts/ai-image/adapters/gemini-image.sh +45 -0
  518. package/src/scripts/ai-image/adapters/ideogram.sh +45 -0
  519. package/src/scripts/ai-image/adapters/recraft.sh +47 -0
  520. package/src/scripts/ai-video/adapters/comfyui.sh +3 -3
  521. package/src/scripts/ai-video/adapters/fal.sh +3 -3
  522. package/src/scripts/ai-video/adapters/gemini-veo.sh +3 -3
  523. package/src/scripts/ai-video/adapters/higgsfield.sh +3 -3
  524. package/src/scripts/ai-video/adapters/kling.sh +3 -3
  525. package/src/scripts/ai-video/adapters/musetalk.sh +2 -2
  526. package/src/scripts/ai-video/adapters/openai-images.sh +3 -3
  527. package/src/scripts/ai-video/adapters/replicate.sh +3 -3
  528. package/src/scripts/ai-video/adapters/sora.sh +3 -3
  529. package/src/scripts/ai-video/adapters/syncso.sh +3 -3
  530. package/src/scripts/ai-video/audio-adapters/allin1.sh +2 -2
  531. package/src/scripts/ai-video/audio-adapters/whisperx.sh +2 -2
  532. package/src/scripts/ai-video/lib/audio-adapter-contract.md +1 -1
  533. package/src/scripts/ai-video/lib/embed-provenance.sh +2 -2
  534. package/src/scripts/ai-video/lib/ingest-song.sh +2 -2
  535. package/src/scripts/ai-video/lib/parse-blueprint.sh +1 -1
  536. package/src/scripts/ai-video/lib/resume-scan.sh +2 -2
  537. package/src/scripts/ai-video/smoke-trace.sh +16 -7
  538. package/src/scripts/ai-video/stitch.sh +2 -2
  539. package/src/scripts/ai_council/_default_prices.ts +73 -0
  540. package/src/scripts/ai_council/advisors.ts +244 -0
  541. package/src/scripts/ai_council/airgap.ts +249 -0
  542. package/src/scripts/ai_council/budget_guard.ts +492 -0
  543. package/src/scripts/ai_council/bundler.ts +376 -0
  544. package/src/scripts/ai_council/cli_hints.ts +120 -0
  545. package/src/scripts/ai_council/clients.ts +2214 -0
  546. package/src/scripts/ai_council/compile_corpus.ts +681 -0
  547. package/src/scripts/ai_council/confidence_gate.ts +230 -0
  548. package/src/scripts/ai_council/config.ts +1729 -0
  549. package/src/scripts/ai_council/consensus.ts +551 -0
  550. package/src/scripts/ai_council/events_log.ts +327 -0
  551. package/src/scripts/ai_council/learn_low_impact_preview.ts +317 -0
  552. package/src/scripts/ai_council/low_impact.ts +1069 -0
  553. package/src/scripts/ai_council/low_impact_corpus.ts +662 -0
  554. package/src/scripts/ai_council/low_impact_intake.ts +222 -0
  555. package/src/scripts/ai_council/modes.ts +169 -0
  556. package/src/scripts/ai_council/necessity.ts +933 -0
  557. package/src/scripts/ai_council/orchestrator.ts +1689 -0
  558. package/src/scripts/ai_council/pricing.ts +267 -0
  559. package/src/scripts/ai_council/probation_gate.ts +282 -0
  560. package/src/scripts/ai_council/project_context.ts +308 -0
  561. package/src/scripts/ai_council/prompts.ts +600 -0
  562. package/src/scripts/ai_council/redact_low_impact_entry.ts +291 -0
  563. package/src/scripts/ai_council/replay.ts +314 -0
  564. package/src/scripts/ai_council/session.ts +558 -0
  565. package/src/scripts/ai_council/shadow_dispatch.ts +509 -0
  566. package/src/scripts/ai_council/solo_dispatch.ts +281 -0
  567. package/src/scripts/analysis_freshness.ts +343 -0
  568. package/src/scripts/annotate_discovery.ts +288 -0
  569. package/src/scripts/apply_modules_config.ts +537 -0
  570. package/src/scripts/audit_adr_coverage.ts +357 -0
  571. package/src/scripts/audit_auto_rules.ts +415 -0
  572. package/src/scripts/audit_cloud_compatibility.ts +608 -0
  573. package/src/scripts/audit_command_surface.ts +1227 -0
  574. package/src/scripts/audit_initial_context.ts +694 -0
  575. package/src/scripts/audit_likelihood.ts +434 -0
  576. package/src/scripts/audit_mcp_tools.ts +252 -0
  577. package/src/scripts/audit_overlap.ts +421 -0
  578. package/src/scripts/audit_skill_descriptions.ts +402 -0
  579. package/src/scripts/audit_skill_overlap.ts +576 -0
  580. package/src/scripts/audit_user_type_axis.ts +264 -0
  581. package/src/scripts/backfill_model_tier.ts +349 -0
  582. package/src/scripts/bench_ab_cache_dispatch.ts +126 -0
  583. package/src/scripts/bench_ab_clone.ts +610 -0
  584. package/src/scripts/bench_ab_diff.ts +609 -0
  585. package/src/scripts/bench_ab_integrity.ts +261 -0
  586. package/src/scripts/bench_ab_run.ts +417 -0
  587. package/src/scripts/bench_ab_task_runner.ts +1382 -0
  588. package/src/scripts/bench_ab_tracka_run.ts +436 -0
  589. package/src/scripts/bench_ab_v2_run.ts +585 -0
  590. package/src/scripts/bench_ab_v2_stats.ts +1018 -0
  591. package/src/scripts/bench_baseline_ready.ts +326 -0
  592. package/src/scripts/bench_condense_memory.ts +479 -0
  593. package/src/scripts/bench_drift_check.ts +503 -0
  594. package/src/scripts/bench_per_tool.ts +591 -0
  595. package/src/scripts/bench_rtk_savings.ts +710 -0
  596. package/src/scripts/bench_run.ts +509 -0
  597. package/src/scripts/bench_runner.ts +519 -0
  598. package/src/scripts/build_cloud_bundle.ts +692 -0
  599. package/src/scripts/build_discovery_manifest.ts +1371 -0
  600. package/src/scripts/build_linear_digest.ts +368 -0
  601. package/src/scripts/build_mcp_registry_manifest.ts +351 -0
  602. package/src/scripts/build_rule_trigger_matrix.ts +469 -0
  603. package/src/scripts/capture_showcase_session.ts +735 -0
  604. package/src/scripts/chat_history.ts +2301 -0
  605. package/src/scripts/check_always_budget.ts +694 -0
  606. package/src/scripts/check_artefact_checksums.ts +281 -0
  607. package/src/scripts/check_augment_description_cap.ts +133 -0
  608. package/src/scripts/check_augmentignore.ts +108 -0
  609. package/src/scripts/check_beta_review_markers.ts +234 -0
  610. package/src/scripts/check_bite_sized_granularity.ts +116 -0
  611. package/src/scripts/check_cluster_patterns.ts +285 -0
  612. package/src/scripts/check_command_count_messaging.ts +224 -0
  613. package/src/scripts/check_condensation.ts +900 -0
  614. package/src/scripts/check_condensed_paths.ts +414 -0
  615. package/src/scripts/check_context_paths.ts +388 -0
  616. package/src/scripts/check_council_config_location.ts +260 -0
  617. package/src/scripts/check_council_layout.ts +180 -0
  618. package/src/scripts/check_council_references.ts +345 -0
  619. package/src/scripts/check_discovery_determinism.ts +124 -0
  620. package/src/scripts/check_gate_paths.ts +230 -0
  621. package/src/scripts/check_iron_law_prominence.ts +298 -0
  622. package/src/scripts/check_kernel_rule_bundle.ts +242 -0
  623. package/src/scripts/check_knowledge_cards.ts +759 -0
  624. package/src/scripts/check_md_language.ts +291 -0
  625. package/src/scripts/check_memory.ts +845 -0
  626. package/src/scripts/check_memory_proposal.ts +351 -0
  627. package/src/scripts/check_module_management_neutral.ts +238 -0
  628. package/src/scripts/check_no_conflict_markers.ts +298 -0
  629. package/src/scripts/check_no_conflict_markers_allowlist.json +4 -0
  630. package/src/scripts/check_no_external_sources.ts +351 -0
  631. package/src/scripts/check_no_local_settings_committed.ts +69 -0
  632. package/src/scripts/check_no_new_legacy_path.ts +188 -0
  633. package/src/scripts/check_no_roadmap_refs.ts +304 -0
  634. package/src/scripts/check_one_off_location.ts +165 -0
  635. package/src/scripts/check_overlay_cascade_subdirs.ts +188 -0
  636. package/src/scripts/check_portability.ts +860 -0
  637. package/src/scripts/check_proposal.ts +0 -0
  638. package/src/scripts/check_public_catalog_links.ts +204 -0
  639. package/src/scripts/check_public_links.ts +357 -0
  640. package/src/scripts/check_references.ts +963 -0
  641. package/src/scripts/check_release_includes_discovery.ts +94 -0
  642. package/src/scripts/check_release_pr_shape.ts +222 -0
  643. package/src/scripts/check_release_published.ts +235 -0
  644. package/src/scripts/check_release_trunk_sync.ts +203 -0
  645. package/src/scripts/check_reply_consistency.ts +359 -0
  646. package/src/scripts/check_roadmap_trackable.ts +268 -0
  647. package/src/scripts/check_role_doc_links.ts +187 -0
  648. package/src/scripts/check_safety_floor_untouched.ts +160 -0
  649. package/src/scripts/check_skill_requires.ts +205 -0
  650. package/src/scripts/check_structural_breaking.ts +170 -0
  651. package/src/scripts/check_surface_tiers.ts +567 -0
  652. package/src/scripts/check_template_pin_drift.ts +222 -0
  653. package/src/scripts/check_test_coverage_diff.ts +235 -0
  654. package/src/scripts/check_token_optimizer_freshness.ts +183 -0
  655. package/src/scripts/check_trigger_evals.ts +375 -0
  656. package/src/scripts/check_update_banner.ts +143 -0
  657. package/src/scripts/ci_status.ts +0 -0
  658. package/src/scripts/ci_summary.ts +235 -0
  659. package/src/scripts/ci_time_ratio.ts +526 -0
  660. package/src/scripts/command_suggester/cooldown.ts +176 -0
  661. package/src/scripts/command_suggester/index.ts +41 -0
  662. package/src/scripts/command_suggester/loader.ts +205 -0
  663. package/src/scripts/command_suggester/match.ts +294 -0
  664. package/src/scripts/command_suggester/rank.ts +201 -0
  665. package/src/scripts/command_suggester/render.ts +122 -0
  666. package/src/scripts/command_suggester/sanitize.ts +114 -0
  667. package/src/scripts/command_suggester/settings.ts +186 -0
  668. package/src/scripts/command_suggester/types.ts +0 -0
  669. package/src/scripts/compile_router.ts +297 -0
  670. package/src/scripts/condense.sh +7 -1
  671. package/src/scripts/condense.ts +2035 -0
  672. package/src/scripts/condense_memory.ts +334 -0
  673. package/src/scripts/config/index.ts +15 -0
  674. package/src/scripts/config/packs.ts +310 -0
  675. package/src/scripts/config/presets.ts +369 -0
  676. package/src/scripts/config/profile_explain.ts +114 -0
  677. package/src/scripts/config/profiles.ts +277 -0
  678. package/src/scripts/config/session_profiles.ts +1064 -0
  679. package/src/scripts/context_hygiene_hook.ts +272 -0
  680. package/src/scripts/cost_by_conversation.ts +444 -0
  681. package/src/scripts/cost_summary.ts +407 -0
  682. package/src/scripts/council_cli.ts +2827 -0
  683. package/src/scripts/council_prune.ts +153 -0
  684. package/src/scripts/cross_repo_retrieve.ts +694 -0
  685. package/src/scripts/discovery_stats.ts +218 -0
  686. package/src/scripts/evidence_report.ts +580 -0
  687. package/src/scripts/external_sources_denylist.json +1 -0
  688. package/src/scripts/extract_audit_patterns.ts +394 -0
  689. package/src/scripts/first_run_gate_hook.ts +246 -0
  690. package/src/scripts/gen_discovery_baseline.ts +297 -0
  691. package/src/scripts/generate_capabilities_index.ts +496 -0
  692. package/src/scripts/generate_capability_matrix.ts +430 -0
  693. package/src/scripts/generate_catalog.ts +178 -0
  694. package/src/scripts/generate_command_flows.ts +316 -0
  695. package/src/scripts/generate_cookbook.ts +302 -0
  696. package/src/scripts/generate_index.ts +500 -0
  697. package/src/scripts/generate_ownership_matrix.ts +646 -0
  698. package/src/scripts/generate_pack_manifests.ts +1025 -0
  699. package/src/scripts/generate_role_experiences_catalog.ts +265 -0
  700. package/src/scripts/hermetic-install.sh +22 -11
  701. package/src/scripts/hook_manifest.yaml +24 -10
  702. package/src/scripts/hooks/augment-chat-history.sh +3 -10
  703. package/src/scripts/hooks/augment-context-hygiene.sh +3 -10
  704. package/src/scripts/hooks/augment-dispatcher.sh +3 -10
  705. package/src/scripts/hooks/augment-onboarding-gate.sh +3 -10
  706. package/src/scripts/hooks/augment-roadmap-progress.sh +3 -10
  707. package/src/scripts/hooks/block_no_verify.ts +413 -0
  708. package/src/scripts/hooks/cline-dispatcher.sh +3 -10
  709. package/src/scripts/hooks/cowork-dispatcher.sh +3 -14
  710. package/src/scripts/hooks/cursor-dispatcher.sh +3 -10
  711. package/src/scripts/hooks/dispatch_hook.ts +851 -0
  712. package/src/scripts/hooks/dispatch_issues.ts +226 -0
  713. package/src/scripts/hooks/envelope.ts +140 -0
  714. package/src/scripts/hooks/gemini-dispatcher.sh +3 -8
  715. package/src/scripts/hooks/replay_hook.ts +364 -0
  716. package/src/scripts/hooks/state_io.ts +293 -0
  717. package/src/scripts/hooks/windsurf-dispatcher.sh +3 -9
  718. package/src/scripts/hooks_doctor.ts +418 -0
  719. package/src/scripts/hooks_status.ts +292 -0
  720. package/src/scripts/injection_scan_hook.ts +285 -0
  721. package/src/scripts/install +36 -22
  722. package/src/scripts/install-hooks.sh +20 -14
  723. package/src/scripts/install.sh +38 -14
  724. package/src/scripts/install.ts +4515 -0
  725. package/src/scripts/inventory_abstraction_budget.ts +1104 -0
  726. package/src/scripts/inventory_frontmatter.ts +320 -0
  727. package/src/scripts/inventory_meta_layers.ts +516 -0
  728. package/src/scripts/iron_law_sha.ts +233 -0
  729. package/src/scripts/knowledge_global_cli.ts +1105 -0
  730. package/src/scripts/linked_projects_list.ts +310 -0
  731. package/src/scripts/lint_agent_security.ts +224 -0
  732. package/src/scripts/lint_agent_skill_names.ts +241 -0
  733. package/src/scripts/lint_agents_layout.ts +205 -0
  734. package/src/scripts/lint_agents_md.ts +294 -0
  735. package/src/scripts/lint_archived_skills.ts +309 -0
  736. package/src/scripts/lint_artefact_frontmatter.ts +359 -0
  737. package/src/scripts/lint_bench_ab.ts +319 -0
  738. package/src/scripts/lint_bench_corpus.ts +421 -0
  739. package/src/scripts/lint_command_flow_coverage.ts +231 -0
  740. package/src/scripts/lint_command_routing.ts +377 -0
  741. package/src/scripts/lint_command_tiers.ts +345 -0
  742. package/src/scripts/lint_command_verbs.ts +379 -0
  743. package/src/scripts/lint_commit_subjects.ts +243 -0
  744. package/src/scripts/lint_context_spine_usage.ts +198 -0
  745. package/src/scripts/lint_discovery_manifest.ts +540 -0
  746. package/src/scripts/lint_discovery_vocabulary.ts +393 -0
  747. package/src/scripts/lint_empty_roadmaps.ts +147 -0
  748. package/src/scripts/lint_eval_freshness.ts +335 -0
  749. package/src/scripts/lint_examples.ts +183 -0
  750. package/src/scripts/lint_explain_trace.ts +381 -0
  751. package/src/scripts/lint_featured_skills.ts +0 -0
  752. package/src/scripts/lint_flows.ts +701 -0
  753. package/src/scripts/lint_framework_leakage.ts +497 -0
  754. package/src/scripts/lint_framework_leakage_allowlist.json +8 -1
  755. package/src/scripts/lint_frontmatter_boilerplate.ts +356 -0
  756. package/src/scripts/lint_ghostwriter_source.ts +389 -0
  757. package/src/scripts/lint_global_paths.ts +420 -0
  758. package/src/scripts/lint_handoffs.ts +362 -0
  759. package/src/scripts/lint_hidden_unicode.ts +350 -0
  760. package/src/scripts/lint_hook_concern_budget.ts +319 -0
  761. package/src/scripts/lint_hook_manifest.ts +354 -0
  762. package/src/scripts/lint_instruction_smuggling.ts +173 -0
  763. package/src/scripts/lint_load_context.ts +371 -0
  764. package/src/scripts/lint_marketplace.ts +286 -0
  765. package/src/scripts/lint_marketplace_install_completeness.ts +309 -0
  766. package/src/scripts/lint_mcp_config_security.ts +225 -0
  767. package/src/scripts/lint_mcp_registry_manifest.ts +350 -0
  768. package/src/scripts/lint_media_policy_linkage.ts +224 -0
  769. package/src/scripts/lint_missions.ts +774 -0
  770. package/src/scripts/lint_model_tier_coverage.ts +151 -0
  771. package/src/scripts/lint_namespace.ts +295 -0
  772. package/src/scripts/lint_namespace_collisions.ts +203 -0
  773. package/src/scripts/lint_new_skill_gate.ts +462 -0
  774. package/src/scripts/lint_no_new_atomic_commands.ts +342 -0
  775. package/src/scripts/lint_one_off_age.ts +348 -0
  776. package/src/scripts/lint_orchestration_dsl.ts +377 -0
  777. package/src/scripts/lint_orchestrator_auto_detect.ts +177 -0
  778. package/src/scripts/lint_pack_boundaries.ts +366 -0
  779. package/src/scripts/lint_pack_dependencies.ts +541 -0
  780. package/src/scripts/lint_pack_first_win.ts +202 -0
  781. package/src/scripts/lint_persona_governance.ts +292 -0
  782. package/src/scripts/lint_positioning.ts +257 -0
  783. package/src/scripts/lint_profile_overlay_set_only.ts +324 -0
  784. package/src/scripts/lint_readme_jargon.ts +189 -0
  785. package/src/scripts/lint_readme_size.ts +73 -0
  786. package/src/scripts/lint_regression.ts +497 -0
  787. package/src/scripts/lint_roadmap_ci_steps.ts +252 -0
  788. package/src/scripts/lint_roadmap_complexity.ts +295 -0
  789. package/src/scripts/lint_roadmap_later_disposition.ts +357 -0
  790. package/src/scripts/lint_role_experiences.ts +410 -0
  791. package/src/scripts/lint_rule_interactions.ts +281 -0
  792. package/src/scripts/lint_rule_tiers.ts +169 -0
  793. package/src/scripts/lint_showcase_sessions.ts +254 -0
  794. package/src/scripts/lint_skill_frontmatter_safety.ts +279 -0
  795. package/src/scripts/lint_skill_originality.ts +586 -0
  796. package/src/scripts/lint_skill_originality_allowlist.json +20 -0
  797. package/src/scripts/lint_skill_tools.ts +320 -0
  798. package/src/scripts/lint_ticket_buildable.ts +1027 -0
  799. package/src/scripts/lint_topics_yaml.ts +203 -0
  800. package/src/scripts/lint_trust_coherence.ts +377 -0
  801. package/src/scripts/lint_value_dashboard.ts +314 -0
  802. package/src/scripts/lint_workflow_security.ts +637 -0
  803. package/src/scripts/lint_workflow_security_allowlist.json +20 -0
  804. package/src/scripts/lint_workspace_boundary.ts +248 -0
  805. package/src/scripts/mcp_parity_smoke.ts +638 -0
  806. package/src/scripts/mcp_render.ts +346 -0
  807. package/src/scripts/mcp_server/__main__.ts +28 -0
  808. package/src/scripts/mcp_server/catalog.ts +154 -0
  809. package/src/scripts/mcp_server/index.ts +24 -0
  810. package/src/scripts/mcp_server/metadata.ts +83 -0
  811. package/src/scripts/mcp_server/prompts.ts +711 -0
  812. package/src/scripts/mcp_server/resources.ts +343 -0
  813. package/src/scripts/mcp_server/server.ts +439 -0
  814. package/src/scripts/mcp_server/telemetry.ts +154 -0
  815. package/src/scripts/mcp_server/tools.ts +1031 -0
  816. package/src/scripts/mcp_setup.sh +25 -52
  817. package/src/scripts/mcp_telemetry_health.ts +362 -0
  818. package/src/scripts/mcp_telemetry_query.ts +371 -0
  819. package/src/scripts/mcp_telemetry_store.ts +422 -0
  820. package/src/scripts/measure_augment_budget.ts +453 -0
  821. package/src/scripts/measure_density.ts +618 -0
  822. package/src/scripts/measure_frugality_savings.ts +353 -0
  823. package/src/scripts/measure_markitdown_lift.ts +299 -0
  824. package/src/scripts/measure_patterns.ts +682 -0
  825. package/src/scripts/measure_projection_bytes.ts +425 -0
  826. package/src/scripts/measure_rule_budget.ts +627 -0
  827. package/src/scripts/measure_skill_reduction.ts +442 -0
  828. package/src/scripts/media/lib/adapter-common.sh +247 -0
  829. package/src/scripts/media/lib/adapter-contract.md +329 -0
  830. package/src/scripts/media/lib/fixtures/comfyui/result.json +1 -0
  831. package/src/scripts/media/lib/fixtures/fal/result.json +1 -0
  832. package/src/scripts/media/lib/fixtures/flux/asset-0001.png +0 -0
  833. package/src/scripts/media/lib/fixtures/flux/result.json +1 -0
  834. package/src/scripts/media/lib/fixtures/gemini-image/asset-0001.png +0 -0
  835. package/src/scripts/media/lib/fixtures/gemini-image/result.json +1 -0
  836. package/src/scripts/media/lib/fixtures/gemini-veo/result.json +1 -0
  837. package/src/scripts/media/lib/fixtures/higgsfield/result.json +1 -0
  838. package/src/scripts/media/lib/fixtures/ideogram/asset-0001.png +0 -0
  839. package/src/scripts/media/lib/fixtures/ideogram/result.json +1 -0
  840. package/src/scripts/media/lib/fixtures/kling/result.json +1 -0
  841. package/src/scripts/media/lib/fixtures/musetalk/result.json +1 -0
  842. package/src/scripts/media/lib/fixtures/openai-images/result.json +1 -0
  843. package/src/scripts/media/lib/fixtures/recraft/asset-0001.svg +1 -0
  844. package/src/scripts/media/lib/fixtures/recraft/result.json +1 -0
  845. package/src/scripts/media/lib/fixtures/replicate/result.json +1 -0
  846. package/src/scripts/media/lib/fixtures/sora/result.json +1 -0
  847. package/src/scripts/media/lib/fixtures/syncso/result.json +1 -0
  848. package/src/scripts/media/lib/load-config.sh +180 -0
  849. package/src/scripts/media/lib/redact.sh +85 -0
  850. package/src/scripts/memory_hash.ts +331 -0
  851. package/src/scripts/memory_lookup.ts +1278 -0
  852. package/src/scripts/memory_report.ts +845 -0
  853. package/src/scripts/memory_signal.ts +417 -0
  854. package/src/scripts/memory_status.ts +189 -0
  855. package/src/scripts/migrate_command_suggestions.ts +341 -0
  856. package/src/scripts/migrate_frontmatter_defaults.ts +539 -0
  857. package/src/scripts/migration_status.ts +301 -0
  858. package/src/scripts/mine_session.ts +645 -0
  859. package/src/scripts/minimal_safe_diff_hook.ts +355 -0
  860. package/src/scripts/move_artefact.ts +869 -0
  861. package/src/scripts/new_skill.ts +404 -0
  862. package/src/scripts/onboarding_gate_hook.ts +224 -0
  863. package/src/scripts/pack_dependency_allowlist.json +1 -1
  864. package/src/scripts/pack_mcp_content.ts +552 -0
  865. package/src/scripts/parity/README.md +140 -0
  866. package/src/scripts/parity/compare.ts +189 -0
  867. package/src/scripts/parity/coverage_diff.ts +199 -0
  868. package/src/scripts/parity/phase-manifest.json +93 -0
  869. package/src/scripts/parity/phase_gate.ts +270 -0
  870. package/src/scripts/parity/replay.ts +320 -0
  871. package/src/scripts/pattern_share.ts +363 -0
  872. package/src/scripts/plan_physical_move.ts +605 -0
  873. package/src/scripts/prediction-pool/poisson_sim.ts +537 -0
  874. package/src/scripts/prediction-pool/pool_winsim.ts +677 -0
  875. package/src/scripts/prediction-pool/score_ev.ts +546 -0
  876. package/src/scripts/print_required_checks.ts +249 -0
  877. package/src/scripts/probe_projection_fidelity.ts +468 -0
  878. package/src/scripts/probe_skill_registration.ts +787 -0
  879. package/src/scripts/profile_staleness_hook.ts +169 -0
  880. package/src/scripts/profile_use.ts +227 -0
  881. package/src/scripts/project_thin_rules.ts +387 -0
  882. package/src/scripts/propose_modules_config.ts +311 -0
  883. package/src/scripts/prototype_lint_contradictions.ts +414 -0
  884. package/src/scripts/prove_pack_extractable.ts +388 -0
  885. package/src/scripts/readme_linter.ts +913 -0
  886. package/src/scripts/redact_hook_capture.ts +325 -0
  887. package/src/scripts/refine_ticket_detect.ts +703 -0
  888. package/src/scripts/release.ts +1697 -0
  889. package/src/scripts/render_benchmark_md.ts +664 -0
  890. package/src/scripts/render_value_md.ts +506 -0
  891. package/src/scripts/repro/repro_marketplace_install_gap.sh +1 -1
  892. package/src/scripts/roadmap_progress_hook.ts +410 -0
  893. package/src/scripts/router_telemetry.ts +972 -0
  894. package/src/scripts/run.ts +98 -0
  895. package/src/scripts/run_skill_evals.ts +477 -0
  896. package/src/scripts/runtime_dispatcher.ts +586 -0
  897. package/src/scripts/runtime_handler.ts +231 -0
  898. package/src/scripts/runtime_registry.ts +394 -0
  899. package/src/scripts/schemas/command.schema.json +3 -2
  900. package/src/scripts/schemas/mission-catalog.schema.json +112 -0
  901. package/src/scripts/schemas/mission.schema.json +87 -0
  902. package/src/scripts/schemas/pack.schema.json +6 -0
  903. package/src/scripts/schemas/rule.schema.json +1 -0
  904. package/src/scripts/schemas/skill.schema.json +1 -0
  905. package/src/scripts/schemas/ticket-manifest.schema.json +35 -0
  906. package/src/scripts/schemas/ticket.schema.json +60 -0
  907. package/src/scripts/score_skill_selection.ts +570 -0
  908. package/src/scripts/security_audit_config.ts +423 -0
  909. package/src/scripts/skill_collision_clusters.ts +448 -0
  910. package/src/scripts/skill_discovery.ts +690 -0
  911. package/src/scripts/skill_linter.ts +4276 -0
  912. package/src/scripts/skill_overlap.ts +414 -0
  913. package/src/scripts/skill_preview.ts +548 -0
  914. package/src/scripts/skill_tools/audit_persona_coverage.ts +427 -0
  915. package/src/scripts/skill_tools/audit_user_type_coverage.ts +507 -0
  916. package/src/scripts/skill_tools/index.ts +28 -0
  917. package/src/scripts/skill_tools/run_block_d_eval.ts +373 -0
  918. package/src/scripts/skill_tools/score_skill_relevance.ts +475 -0
  919. package/src/scripts/skill_tools/suggest_skill_for_task.ts +288 -0
  920. package/src/scripts/skill_trigger_eval.ts +1046 -0
  921. package/src/scripts/skill_usage_collect.ts +465 -0
  922. package/src/scripts/skill_usage_report.ts +364 -0
  923. package/src/scripts/smoke/kernel.sh +4 -5
  924. package/src/scripts/smoke/router.sh +76 -76
  925. package/src/scripts/smoke/schema.sh +2 -2
  926. package/src/scripts/smoke/skills.sh +73 -52
  927. package/src/scripts/smoke_path_resolution.ts +194 -0
  928. package/src/scripts/smoke_quickstart.ts +224 -0
  929. package/src/scripts/snapshot_agent_outputs.ts +375 -0
  930. package/src/scripts/spotcheck_thin_root.ts +247 -0
  931. package/src/scripts/surface-tiers.yml +68 -0
  932. package/src/scripts/sync_agent_settings.ts +763 -0
  933. package/src/scripts/sync_github_metadata.ts +550 -0
  934. package/src/scripts/sync_gitignore.ts +630 -0
  935. package/src/scripts/sync_yaml_rt.ts +910 -0
  936. package/src/scripts/telegraph_stats.ts +447 -0
  937. package/src/scripts/tool_registry.ts +330 -0
  938. package/src/scripts/tools/adapter_errors.ts +93 -0
  939. package/src/scripts/tools/base_adapter.ts +147 -0
  940. package/src/scripts/tools/github_adapter.ts +229 -0
  941. package/src/scripts/tools/jira_adapter.ts +196 -0
  942. package/src/scripts/trigger_coverage.ts +251 -0
  943. package/src/scripts/update_counts.ts +284 -0
  944. package/src/scripts/update_prices.ts +219 -0
  945. package/src/scripts/validate_agent_settings.ts +265 -0
  946. package/src/scripts/validate_decision_engine.ts +366 -0
  947. package/src/scripts/validate_discovery_manifest.ts +160 -0
  948. package/src/scripts/validate_frontmatter.ts +1030 -0
  949. package/src/scripts/validate_pack_yaml.ts +0 -0
  950. package/src/scripts/validate_safe_paths.ts +164 -0
  951. package/src/scripts/validate_telegraph_carveouts.ts +485 -0
  952. package/src/scripts/verify_before_complete_hook.ts +306 -0
  953. package/src/scripts/verify_physical_move.ts +411 -0
  954. package/src/scripts/wrapper_freshness_hook.ts +179 -0
  955. package/dist/agent-src/scripts/archive_completed_roadmaps.py +0 -171
  956. package/dist/agent-src/scripts/update_roadmap_progress.py +0 -537
  957. package/dist/agent-src/skills/corpus-grounding/scripts/bm25_search.py +0 -212
  958. package/dist/agent-src/skills/corpus-grounding/scripts/decision_engine.py +0 -438
  959. package/dist/agent-src/skills/corpus-grounding/scripts/ground.py +0 -166
  960. package/dist/agent-src/skills/corpus-grounding/scripts/schema_validator.py +0 -160
  961. package/dist/agent-src/skills/design-tokens/scripts/tokens.py +0 -296
  962. package/dist/agent-src/skills/react-shadcn-ui/scripts/shadcn_add.py +0 -299
  963. package/dist/agent-src/skills/tailwind-engineer/scripts/tailwind_config_gen.py +0 -463
  964. package/dist/agent-src/templates/scripts/check_memory.py +0 -282
  965. package/dist/agent-src/templates/scripts/check_memory_proposal.py +0 -180
  966. package/dist/agent-src/templates/scripts/implement_ticket/__init__.py +0 -94
  967. package/dist/agent-src/templates/scripts/implement_ticket/__main__.py +0 -15
  968. package/dist/agent-src/templates/scripts/memory_hash.py +0 -75
  969. package/dist/agent-src/templates/scripts/memory_lookup.py +0 -436
  970. package/dist/agent-src/templates/scripts/memory_report.py +0 -314
  971. package/dist/agent-src/templates/scripts/memory_signal.py +0 -165
  972. package/dist/agent-src/templates/scripts/memory_status.py +0 -76
  973. package/dist/agent-src/templates/scripts/pr_review_routing.py +0 -340
  974. package/dist/agent-src/templates/scripts/pr_risk_review.py +0 -211
  975. package/dist/agent-src/templates/scripts/telemetry/__init__.py +0 -42
  976. package/dist/agent-src/templates/scripts/telemetry/aggregator.py +0 -169
  977. package/dist/agent-src/templates/scripts/telemetry/boundary.py +0 -171
  978. package/dist/agent-src/templates/scripts/telemetry/engagement.py +0 -297
  979. package/dist/agent-src/templates/scripts/telemetry/report_renderer.py +0 -197
  980. package/dist/agent-src/templates/scripts/telemetry/settings.py +0 -177
  981. package/dist/agent-src/templates/scripts/telemetry_record.py +0 -179
  982. package/dist/agent-src/templates/scripts/telemetry_report.py +0 -161
  983. package/dist/agent-src/templates/scripts/telemetry_status.py +0 -142
  984. package/dist/agent-src/templates/scripts/tier_usage_report.py +0 -183
  985. package/dist/agent-src/templates/scripts/work_engine/__init__.py +0 -58
  986. package/dist/agent-src/templates/scripts/work_engine/__main__.py +0 -9
  987. package/dist/agent-src/templates/scripts/work_engine/_lib/__init__.py +0 -7
  988. package/dist/agent-src/templates/scripts/work_engine/_lib/agent_settings.py +0 -840
  989. package/dist/agent-src/templates/scripts/work_engine/_lib/user_global_paths.py +0 -249
  990. package/dist/agent-src/templates/scripts/work_engine/cli.py +0 -195
  991. package/dist/agent-src/templates/scripts/work_engine/cli_args.py +0 -116
  992. package/dist/agent-src/templates/scripts/work_engine/delivery_state.py +0 -137
  993. package/dist/agent-src/templates/scripts/work_engine/directives/__init__.py +0 -33
  994. package/dist/agent-src/templates/scripts/work_engine/directives/backend/__init__.py +0 -98
  995. package/dist/agent-src/templates/scripts/work_engine/directives/backend/analyze.py +0 -98
  996. package/dist/agent-src/templates/scripts/work_engine/directives/backend/implement.py +0 -145
  997. package/dist/agent-src/templates/scripts/work_engine/directives/backend/memory.py +0 -136
  998. package/dist/agent-src/templates/scripts/work_engine/directives/backend/plan.py +0 -175
  999. package/dist/agent-src/templates/scripts/work_engine/directives/backend/refine.py +0 -396
  1000. package/dist/agent-src/templates/scripts/work_engine/directives/backend/report.py +0 -227
  1001. package/dist/agent-src/templates/scripts/work_engine/directives/backend/test.py +0 -180
  1002. package/dist/agent-src/templates/scripts/work_engine/directives/backend/verify.py +0 -170
  1003. package/dist/agent-src/templates/scripts/work_engine/directives/mixed/__init__.py +0 -116
  1004. package/dist/agent-src/templates/scripts/work_engine/directives/mixed/contract.py +0 -254
  1005. package/dist/agent-src/templates/scripts/work_engine/directives/mixed/stitch.py +0 -229
  1006. package/dist/agent-src/templates/scripts/work_engine/directives/mixed/ui.py +0 -231
  1007. package/dist/agent-src/templates/scripts/work_engine/directives/ui/__init__.py +0 -113
  1008. package/dist/agent-src/templates/scripts/work_engine/directives/ui/_passthrough.py +0 -44
  1009. package/dist/agent-src/templates/scripts/work_engine/directives/ui/apply.py +0 -241
  1010. package/dist/agent-src/templates/scripts/work_engine/directives/ui/audit.py +0 -414
  1011. package/dist/agent-src/templates/scripts/work_engine/directives/ui/design.py +0 -335
  1012. package/dist/agent-src/templates/scripts/work_engine/directives/ui/polish.py +0 -513
  1013. package/dist/agent-src/templates/scripts/work_engine/directives/ui/review.py +0 -471
  1014. package/dist/agent-src/templates/scripts/work_engine/directives/ui_trivial/__init__.py +0 -119
  1015. package/dist/agent-src/templates/scripts/work_engine/directives/ui_trivial/_skipped.py +0 -37
  1016. package/dist/agent-src/templates/scripts/work_engine/directives/ui_trivial/apply.py +0 -165
  1017. package/dist/agent-src/templates/scripts/work_engine/directives/ui_trivial/refine.py +0 -66
  1018. package/dist/agent-src/templates/scripts/work_engine/directives/ui_trivial/report.py +0 -62
  1019. package/dist/agent-src/templates/scripts/work_engine/directives/ui_trivial/test.py +0 -115
  1020. package/dist/agent-src/templates/scripts/work_engine/dispatcher.py +0 -331
  1021. package/dist/agent-src/templates/scripts/work_engine/emitters.py +0 -68
  1022. package/dist/agent-src/templates/scripts/work_engine/errors.py +0 -19
  1023. package/dist/agent-src/templates/scripts/work_engine/hook_bootstrap.py +0 -91
  1024. package/dist/agent-src/templates/scripts/work_engine/hooks/__init__.py +0 -54
  1025. package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/__init__.py +0 -35
  1026. package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/_chat_history_base.py +0 -59
  1027. package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/chat_history_append.py +0 -43
  1028. package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/chat_history_halt_append.py +0 -41
  1029. package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/decision_gate.py +0 -162
  1030. package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/decision_trace.py +0 -163
  1031. package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/directive_set_guard.py +0 -53
  1032. package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/halt_surface_audit.py +0 -50
  1033. package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/memory_visibility.py +0 -141
  1034. package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/state_shape_validation.py +0 -52
  1035. package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/trace.py +0 -84
  1036. package/dist/agent-src/templates/scripts/work_engine/hooks/context.py +0 -66
  1037. package/dist/agent-src/templates/scripts/work_engine/hooks/events.py +0 -44
  1038. package/dist/agent-src/templates/scripts/work_engine/hooks/exceptions.py +0 -79
  1039. package/dist/agent-src/templates/scripts/work_engine/hooks/registry.py +0 -60
  1040. package/dist/agent-src/templates/scripts/work_engine/hooks/runner.py +0 -73
  1041. package/dist/agent-src/templates/scripts/work_engine/hooks/settings.py +0 -196
  1042. package/dist/agent-src/templates/scripts/work_engine/input_builders.py +0 -163
  1043. package/dist/agent-src/templates/scripts/work_engine/intent/__init__.py +0 -47
  1044. package/dist/agent-src/templates/scripts/work_engine/intent/classify.py +0 -280
  1045. package/dist/agent-src/templates/scripts/work_engine/migration/__init__.py +0 -8
  1046. package/dist/agent-src/templates/scripts/work_engine/migration/v0_to_v1.py +0 -231
  1047. package/dist/agent-src/templates/scripts/work_engine/orchestration.py +0 -193
  1048. package/dist/agent-src/templates/scripts/work_engine/persona_policy.py +0 -85
  1049. package/dist/agent-src/templates/scripts/work_engine/resolvers/__init__.py +0 -22
  1050. package/dist/agent-src/templates/scripts/work_engine/resolvers/diff.py +0 -106
  1051. package/dist/agent-src/templates/scripts/work_engine/resolvers/file.py +0 -113
  1052. package/dist/agent-src/templates/scripts/work_engine/resolvers/prompt.py +0 -90
  1053. package/dist/agent-src/templates/scripts/work_engine/scoring/__init__.py +0 -14
  1054. package/dist/agent-src/templates/scripts/work_engine/scoring/confidence.py +0 -300
  1055. package/dist/agent-src/templates/scripts/work_engine/scoring/decision_engine.py +0 -351
  1056. package/dist/agent-src/templates/scripts/work_engine/scoring/decision_trace.py +0 -141
  1057. package/dist/agent-src/templates/scripts/work_engine/scoring/memory_visibility.py +0 -283
  1058. package/dist/agent-src/templates/scripts/work_engine/stack/__init__.py +0 -31
  1059. package/dist/agent-src/templates/scripts/work_engine/stack/detect.py +0 -187
  1060. package/dist/agent-src/templates/scripts/work_engine/stack/runner.py +0 -481
  1061. package/dist/agent-src/templates/scripts/work_engine/state.py +0 -694
  1062. package/dist/agent-src/templates/scripts/work_engine/state_io.py +0 -202
  1063. package/dist/cli/python/resolvePython.js +0 -38
  1064. package/dist/cli/python/resolvePython.js.map +0 -1
  1065. package/src/scripts/__pycache__/validate_frontmatter.cpython-312.pyc +0 -0
  1066. package/src/scripts/_archive/_backfill_skill_domains.py +0 -140
  1067. package/src/scripts/_archive/_bootstrap_tier_frontmatter.py +0 -151
  1068. package/src/scripts/_archive/_p43_bodies.py +0 -235
  1069. package/src/scripts/_archive/_p43_condense.py +0 -118
  1070. package/src/scripts/_archive/_p4_migrate.py +0 -199
  1071. package/src/scripts/_archive/_phase2_shim_helper.py +0 -109
  1072. package/src/scripts/_archive/_pilot_council_question.py +0 -57
  1073. package/src/scripts/_cli/__init__.py +0 -0
  1074. package/src/scripts/_cli/cmd_doctor.py +0 -1669
  1075. package/src/scripts/_cli/cmd_explain.py +0 -355
  1076. package/src/scripts/_cli/cmd_export.py +0 -157
  1077. package/src/scripts/_cli/cmd_migrate.py +0 -524
  1078. package/src/scripts/_cli/cmd_prune.py +0 -322
  1079. package/src/scripts/_cli/cmd_refresh.py +0 -179
  1080. package/src/scripts/_cli/cmd_settings_check.py +0 -171
  1081. package/src/scripts/_cli/cmd_settings_migrate.py +0 -147
  1082. package/src/scripts/_cli/cmd_sync.py +0 -166
  1083. package/src/scripts/_cli/cmd_uninstall.py +0 -476
  1084. package/src/scripts/_cli/cmd_update.py +0 -279
  1085. package/src/scripts/_cli/cmd_upgrade.py +0 -172
  1086. package/src/scripts/_cli/cmd_validate.py +0 -177
  1087. package/src/scripts/_cli/cmd_versions.py +0 -160
  1088. package/src/scripts/_cli/explain_last/__init__.py +0 -122
  1089. package/src/scripts/_cli/explain_last/assumptions.py +0 -59
  1090. package/src/scripts/_cli/explain_last/council.py +0 -105
  1091. package/src/scripts/_cli/explain_last/halt.py +0 -44
  1092. package/src/scripts/_cli/explain_last/inputs.py +0 -128
  1093. package/src/scripts/_cli/explain_last/memory.py +0 -94
  1094. package/src/scripts/_cli/explain_last/provider.py +0 -52
  1095. package/src/scripts/_cli/explain_last/render.py +0 -52
  1096. package/src/scripts/_cli/explain_last/route.py +0 -59
  1097. package/src/scripts/_cli/explain_last/scrubber.py +0 -105
  1098. package/src/scripts/_cli/explain_last/sections/__init__.py +0 -35
  1099. package/src/scripts/_cli/explain_last/sections/assumptions.py +0 -21
  1100. package/src/scripts/_cli/explain_last/sections/council.py +0 -27
  1101. package/src/scripts/_cli/explain_last/sections/halt.py +0 -31
  1102. package/src/scripts/_cli/explain_last/sections/header.py +0 -24
  1103. package/src/scripts/_cli/explain_last/sections/inputs.py +0 -27
  1104. package/src/scripts/_cli/explain_last/sections/memory.py +0 -21
  1105. package/src/scripts/_cli/explain_last/sections/pack.py +0 -16
  1106. package/src/scripts/_cli/explain_last/sections/provider.py +0 -26
  1107. package/src/scripts/_cli/explain_last/sections/route.py +0 -22
  1108. package/src/scripts/_cli/explain_last/state_loader.py +0 -76
  1109. package/src/scripts/_emit_domain_table.py +0 -35
  1110. package/src/scripts/_lib/__init__.py +0 -5
  1111. package/src/scripts/_lib/__pycache__/__init__.cpython-312.pyc +0 -0
  1112. package/src/scripts/_lib/__pycache__/agent_src.cpython-312.pyc +0 -0
  1113. package/src/scripts/_lib/agent_settings.py +0 -840
  1114. package/src/scripts/_lib/agent_src.py +0 -491
  1115. package/src/scripts/_lib/agents_overlay.py +0 -120
  1116. package/src/scripts/_lib/bench_ab_cache.py +0 -162
  1117. package/src/scripts/_lib/bench_ab_scoring.py +0 -209
  1118. package/src/scripts/_lib/bench_ab_scoring_v2.py +0 -227
  1119. package/src/scripts/_lib/bench_cost.py +0 -138
  1120. package/src/scripts/_lib/bench_quality.py +0 -118
  1121. package/src/scripts/_lib/bench_report.py +0 -149
  1122. package/src/scripts/_lib/bench_telegraph.py +0 -273
  1123. package/src/scripts/_lib/bench_telegraph_report.py +0 -151
  1124. package/src/scripts/_lib/changelog_eras.py +0 -330
  1125. package/src/scripts/_lib/claude_desktop_bundler.py +0 -238
  1126. package/src/scripts/_lib/cli_wrapper.py +0 -64
  1127. package/src/scripts/_lib/fs_atomic.py +0 -116
  1128. package/src/scripts/_lib/global_deploy_inventory.py +0 -312
  1129. package/src/scripts/_lib/install_regenerator.py +0 -134
  1130. package/src/scripts/_lib/installed_lock.py +0 -256
  1131. package/src/scripts/_lib/installed_tools.py +0 -381
  1132. package/src/scripts/_lib/json_pointers.py +0 -260
  1133. package/src/scripts/_lib/link_crypto.py +0 -206
  1134. package/src/scripts/_lib/linked_projects.py +0 -238
  1135. package/src/scripts/_lib/model_tier.py +0 -52
  1136. package/src/scripts/_lib/module_detection.py +0 -223
  1137. package/src/scripts/_lib/pin_resolver.py +0 -152
  1138. package/src/scripts/_lib/script_output.py +0 -144
  1139. package/src/scripts/_lib/security_lint.py +0 -228
  1140. package/src/scripts/_lib/token_count.py +0 -95
  1141. package/src/scripts/_lib/update_check.py +0 -207
  1142. package/src/scripts/_lib/user_global_paths.py +0 -249
  1143. package/src/scripts/_lib/value_ladder.py +0 -696
  1144. package/src/scripts/_lib/value_report.py +0 -455
  1145. package/src/scripts/_phase4_bucket.py +0 -210
  1146. package/src/scripts/_pilot_measure.py +0 -53
  1147. package/src/scripts/_tmp_scan_framework_leakage.py +0 -119
  1148. package/src/scripts/adoption_report.py +0 -195
  1149. package/src/scripts/adoption_snapshot.py +0 -219
  1150. package/src/scripts/adoption_status.py +0 -166
  1151. package/src/scripts/adr/regenerate_index.py +0 -79
  1152. package/src/scripts/ai-video/lib/adapter-common.sh +0 -231
  1153. package/src/scripts/ai-video/lib/adapter-contract.md +0 -329
  1154. package/src/scripts/ai-video/lib/fixtures/comfyui/result.json +0 -1
  1155. package/src/scripts/ai-video/lib/fixtures/fal/result.json +0 -1
  1156. package/src/scripts/ai-video/lib/fixtures/gemini-veo/result.json +0 -1
  1157. package/src/scripts/ai-video/lib/fixtures/higgsfield/result.json +0 -1
  1158. package/src/scripts/ai-video/lib/fixtures/kling/result.json +0 -1
  1159. package/src/scripts/ai-video/lib/fixtures/musetalk/result.json +0 -1
  1160. package/src/scripts/ai-video/lib/fixtures/openai-images/result.json +0 -1
  1161. package/src/scripts/ai-video/lib/fixtures/replicate/result.json +0 -1
  1162. package/src/scripts/ai-video/lib/fixtures/sora/result.json +0 -1
  1163. package/src/scripts/ai-video/lib/fixtures/syncso/result.json +0 -1
  1164. package/src/scripts/ai-video/lib/load-config.sh +0 -180
  1165. package/src/scripts/ai-video/lib/redact.sh +0 -85
  1166. package/src/scripts/ai_council/__init__.py +0 -40
  1167. package/src/scripts/ai_council/_default_prices.py +0 -50
  1168. package/src/scripts/ai_council/advisors.py +0 -148
  1169. package/src/scripts/ai_council/airgap.py +0 -165
  1170. package/src/scripts/ai_council/budget_guard.py +0 -202
  1171. package/src/scripts/ai_council/bundler.py +0 -263
  1172. package/src/scripts/ai_council/cli_hints.py +0 -123
  1173. package/src/scripts/ai_council/clients.py +0 -1385
  1174. package/src/scripts/ai_council/compile_corpus.py +0 -179
  1175. package/src/scripts/ai_council/confidence_gate.py +0 -156
  1176. package/src/scripts/ai_council/config.py +0 -1419
  1177. package/src/scripts/ai_council/consensus.py +0 -329
  1178. package/src/scripts/ai_council/events_log.py +0 -141
  1179. package/src/scripts/ai_council/learn_low_impact_preview.py +0 -252
  1180. package/src/scripts/ai_council/low_impact.py +0 -714
  1181. package/src/scripts/ai_council/low_impact_corpus.py +0 -466
  1182. package/src/scripts/ai_council/low_impact_intake.py +0 -163
  1183. package/src/scripts/ai_council/modes.py +0 -131
  1184. package/src/scripts/ai_council/necessity.py +0 -782
  1185. package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_2a4_acceptance.py +0 -208
  1186. package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_add_quiet.py +0 -149
  1187. package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_budget_v2_audit.py +0 -206
  1188. package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_context_layer_v1_estimate.py +0 -67
  1189. package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_context_layer_v1_review.py +0 -292
  1190. package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_followups_review.py +0 -259
  1191. package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_inject_quiet_flag.py +0 -33
  1192. package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_measure_v2.sh +0 -36
  1193. package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_measure_verbosity.sh +0 -26
  1194. package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_nondestructive_inline_audit.py +0 -209
  1195. package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_per_task.sh +0 -41
  1196. package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_phase4_dispatch_latency.py +0 -108
  1197. package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_phase6_trigger_jaccard.py +0 -92
  1198. package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_phase_2a_budget_rebalance.py +0 -257
  1199. package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_phase_2a_post_revert.py +0 -197
  1200. package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_rebalancing_audit.py +0 -149
  1201. package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_roundtrip.py +0 -111
  1202. package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_rule_hardening_v1.py +0 -251
  1203. package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_silent_taskfiles.py +0 -98
  1204. package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_structural_open_questions.py +0 -232
  1205. package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_structural_optimization.py +0 -144
  1206. package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_structural_v3_gaps.py +0 -252
  1207. package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_structural_v3_review.py +0 -240
  1208. package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_tier_retrofit.py +0 -180
  1209. package/src/scripts/ai_council/orchestrator.py +0 -1206
  1210. package/src/scripts/ai_council/pricing.py +0 -215
  1211. package/src/scripts/ai_council/probation_gate.py +0 -152
  1212. package/src/scripts/ai_council/project_context.py +0 -159
  1213. package/src/scripts/ai_council/prompts.py +0 -567
  1214. package/src/scripts/ai_council/redact_low_impact_entry.py +0 -155
  1215. package/src/scripts/ai_council/replay.py +0 -155
  1216. package/src/scripts/ai_council/session.py +0 -366
  1217. package/src/scripts/ai_council/shadow_dispatch.py +0 -235
  1218. package/src/scripts/ai_council/solo_dispatch.py +0 -226
  1219. package/src/scripts/annotate_discovery.py +0 -149
  1220. package/src/scripts/apply_modules_config.py +0 -290
  1221. package/src/scripts/audit_adr_coverage.py +0 -173
  1222. package/src/scripts/audit_auto_rules.py +0 -175
  1223. package/src/scripts/audit_cloud_compatibility.py +0 -362
  1224. package/src/scripts/audit_command_surface.py +0 -682
  1225. package/src/scripts/audit_initial_context.py +0 -237
  1226. package/src/scripts/audit_likelihood.py +0 -148
  1227. package/src/scripts/audit_mcp_tools.py +0 -146
  1228. package/src/scripts/audit_overlap.py +0 -145
  1229. package/src/scripts/audit_skill_descriptions.py +0 -180
  1230. package/src/scripts/audit_skill_overlap.py +0 -207
  1231. package/src/scripts/audit_user_type_axis.py +0 -140
  1232. package/src/scripts/backfill_model_tier.py +0 -184
  1233. package/src/scripts/bench_ab_cache_dispatch.py +0 -68
  1234. package/src/scripts/bench_ab_clone.py +0 -220
  1235. package/src/scripts/bench_ab_diff.py +0 -220
  1236. package/src/scripts/bench_ab_integrity.py +0 -143
  1237. package/src/scripts/bench_ab_run.py +0 -235
  1238. package/src/scripts/bench_ab_task_runner.py +0 -814
  1239. package/src/scripts/bench_ab_tracka_run.py +0 -202
  1240. package/src/scripts/bench_ab_v2_run.py +0 -247
  1241. package/src/scripts/bench_ab_v2_stats.py +0 -347
  1242. package/src/scripts/bench_baseline_ready.py +0 -108
  1243. package/src/scripts/bench_condense_memory.py +0 -168
  1244. package/src/scripts/bench_drift_check.py +0 -151
  1245. package/src/scripts/bench_per_tool.py +0 -216
  1246. package/src/scripts/bench_rtk_savings.py +0 -320
  1247. package/src/scripts/bench_run.py +0 -272
  1248. package/src/scripts/bench_runner.py +0 -158
  1249. package/src/scripts/build_cloud_bundle.py +0 -458
  1250. package/src/scripts/build_discovery_manifest.py +0 -757
  1251. package/src/scripts/build_linear_digest.py +0 -260
  1252. package/src/scripts/build_mcp_registry_manifest.py +0 -181
  1253. package/src/scripts/build_rule_trigger_matrix.py +0 -350
  1254. package/src/scripts/capture_showcase_session.py +0 -361
  1255. package/src/scripts/chat_history.py +0 -1799
  1256. package/src/scripts/check_always_budget.py +0 -532
  1257. package/src/scripts/check_artefact_checksums.py +0 -111
  1258. package/src/scripts/check_augment_description_cap.py +0 -79
  1259. package/src/scripts/check_augmentignore.py +0 -72
  1260. package/src/scripts/check_beta_review_markers.py +0 -127
  1261. package/src/scripts/check_bite_sized_granularity.py +0 -98
  1262. package/src/scripts/check_cluster_patterns.py +0 -206
  1263. package/src/scripts/check_command_count_messaging.py +0 -152
  1264. package/src/scripts/check_condensation.py +0 -375
  1265. package/src/scripts/check_condensed_paths.py +0 -231
  1266. package/src/scripts/check_context_paths.py +0 -202
  1267. package/src/scripts/check_council_layout.py +0 -125
  1268. package/src/scripts/check_council_references.py +0 -228
  1269. package/src/scripts/check_discovery_determinism.py +0 -70
  1270. package/src/scripts/check_gate_paths.py +0 -128
  1271. package/src/scripts/check_iron_law_prominence.py +0 -145
  1272. package/src/scripts/check_kernel_rule_bundle.py +0 -151
  1273. package/src/scripts/check_md_language.py +0 -161
  1274. package/src/scripts/check_memory.py +0 -429
  1275. package/src/scripts/check_memory_proposal.py +0 -182
  1276. package/src/scripts/check_module_management_neutral.py +0 -147
  1277. package/src/scripts/check_no_external_sources.py +0 -101
  1278. package/src/scripts/check_no_local_settings_committed.py +0 -51
  1279. package/src/scripts/check_no_new_legacy_path.py +0 -100
  1280. package/src/scripts/check_no_roadmap_refs.py +0 -155
  1281. package/src/scripts/check_one_off_location.py +0 -81
  1282. package/src/scripts/check_overlay_cascade_subdirs.py +0 -129
  1283. package/src/scripts/check_portability.py +0 -574
  1284. package/src/scripts/check_proposal.py +0 -269
  1285. package/src/scripts/check_public_catalog_links.py +0 -125
  1286. package/src/scripts/check_public_links.py +0 -185
  1287. package/src/scripts/check_references.py +0 -559
  1288. package/src/scripts/check_release_includes_discovery.py +0 -61
  1289. package/src/scripts/check_release_pr_shape.py +0 -123
  1290. package/src/scripts/check_release_published.py +0 -145
  1291. package/src/scripts/check_release_trunk_sync.py +0 -152
  1292. package/src/scripts/check_reply_consistency.py +0 -169
  1293. package/src/scripts/check_roadmap_trackable.py +0 -114
  1294. package/src/scripts/check_role_doc_links.py +0 -110
  1295. package/src/scripts/check_safety_floor_untouched.py +0 -125
  1296. package/src/scripts/check_skill_requires.py +0 -147
  1297. package/src/scripts/check_template_pin_drift.py +0 -129
  1298. package/src/scripts/check_test_coverage_diff.py +0 -180
  1299. package/src/scripts/check_token_optimizer_freshness.py +0 -146
  1300. package/src/scripts/check_update_banner.py +0 -86
  1301. package/src/scripts/ci_status.py +0 -301
  1302. package/src/scripts/ci_summary.py +0 -131
  1303. package/src/scripts/ci_time_ratio.py +0 -168
  1304. package/src/scripts/command_suggester/__init__.py +0 -51
  1305. package/src/scripts/command_suggester/cooldown.py +0 -132
  1306. package/src/scripts/command_suggester/loader.py +0 -73
  1307. package/src/scripts/command_suggester/match.py +0 -180
  1308. package/src/scripts/command_suggester/rank.py +0 -120
  1309. package/src/scripts/command_suggester/render.py +0 -86
  1310. package/src/scripts/command_suggester/sanitize.py +0 -113
  1311. package/src/scripts/command_suggester/settings.py +0 -127
  1312. package/src/scripts/command_suggester/types.py +0 -78
  1313. package/src/scripts/compile_router.py +0 -232
  1314. package/src/scripts/condense.py +0 -1919
  1315. package/src/scripts/condense_memory.py +0 -178
  1316. package/src/scripts/config/__init__.py +0 -9
  1317. package/src/scripts/config/packs.py +0 -157
  1318. package/src/scripts/config/presets.py +0 -224
  1319. package/src/scripts/config/profile_explain.py +0 -89
  1320. package/src/scripts/config/profiles.py +0 -191
  1321. package/src/scripts/config/session_profiles.py +0 -542
  1322. package/src/scripts/context_hygiene_hook.py +0 -181
  1323. package/src/scripts/cost_by_conversation.py +0 -78
  1324. package/src/scripts/cost_summary.py +0 -97
  1325. package/src/scripts/council_cli.py +0 -2571
  1326. package/src/scripts/council_prune.py +0 -81
  1327. package/src/scripts/cross_repo_retrieve.py +0 -172
  1328. package/src/scripts/discovery_stats.py +0 -70
  1329. package/src/scripts/extract_audit_patterns.py +0 -202
  1330. package/src/scripts/first_run_gate_hook.py +0 -179
  1331. package/src/scripts/gen_discovery_baseline.py +0 -127
  1332. package/src/scripts/generate_catalog.py +0 -116
  1333. package/src/scripts/generate_command_flows.py +0 -191
  1334. package/src/scripts/generate_index.py +0 -303
  1335. package/src/scripts/generate_ownership_matrix.py +0 -378
  1336. package/src/scripts/generate_pack_manifests.py +0 -340
  1337. package/src/scripts/hooks/__init__.py +0 -1
  1338. package/src/scripts/hooks/dispatch_hook.py +0 -461
  1339. package/src/scripts/hooks/dispatch_issues.py +0 -136
  1340. package/src/scripts/hooks/envelope.py +0 -98
  1341. package/src/scripts/hooks/replay_hook.py +0 -144
  1342. package/src/scripts/hooks/state_io.py +0 -145
  1343. package/src/scripts/hooks_doctor.py +0 -223
  1344. package/src/scripts/hooks_status.py +0 -157
  1345. package/src/scripts/injection_scan_hook.py +0 -145
  1346. package/src/scripts/install.py +0 -5258
  1347. package/src/scripts/inventory_abstraction_budget.py +0 -622
  1348. package/src/scripts/inventory_frontmatter.py +0 -164
  1349. package/src/scripts/inventory_meta_layers.py +0 -288
  1350. package/src/scripts/iron_law_sha.py +0 -107
  1351. package/src/scripts/linked_projects_list.py +0 -91
  1352. package/src/scripts/lint_agent_security.py +0 -112
  1353. package/src/scripts/lint_agent_skill_names.py +0 -150
  1354. package/src/scripts/lint_agents_layout.py +0 -197
  1355. package/src/scripts/lint_agents_md.py +0 -210
  1356. package/src/scripts/lint_archived_skills.py +0 -159
  1357. package/src/scripts/lint_artefact_frontmatter.py +0 -188
  1358. package/src/scripts/lint_bench_ab.py +0 -173
  1359. package/src/scripts/lint_bench_corpus.py +0 -255
  1360. package/src/scripts/lint_command_flow_coverage.py +0 -132
  1361. package/src/scripts/lint_command_routing.py +0 -160
  1362. package/src/scripts/lint_command_tiers.py +0 -216
  1363. package/src/scripts/lint_command_verbs.py +0 -206
  1364. package/src/scripts/lint_commit_subjects.py +0 -139
  1365. package/src/scripts/lint_context_spine_usage.py +0 -137
  1366. package/src/scripts/lint_discovery_manifest.py +0 -176
  1367. package/src/scripts/lint_discovery_vocabulary.py +0 -222
  1368. package/src/scripts/lint_empty_roadmaps.py +0 -80
  1369. package/src/scripts/lint_examples.py +0 -102
  1370. package/src/scripts/lint_explain_trace.py +0 -80
  1371. package/src/scripts/lint_featured_skills.py +0 -144
  1372. package/src/scripts/lint_flows.py +0 -215
  1373. package/src/scripts/lint_framework_leakage.py +0 -375
  1374. package/src/scripts/lint_frontmatter_boilerplate.py +0 -77
  1375. package/src/scripts/lint_ghostwriter_source.py +0 -242
  1376. package/src/scripts/lint_global_paths.py +0 -148
  1377. package/src/scripts/lint_handoffs.py +0 -217
  1378. package/src/scripts/lint_hidden_unicode.py +0 -132
  1379. package/src/scripts/lint_hook_concern_budget.py +0 -207
  1380. package/src/scripts/lint_hook_manifest.py +0 -217
  1381. package/src/scripts/lint_instruction_smuggling.py +0 -107
  1382. package/src/scripts/lint_load_context.py +0 -196
  1383. package/src/scripts/lint_marketplace.py +0 -180
  1384. package/src/scripts/lint_marketplace_install_completeness.py +0 -198
  1385. package/src/scripts/lint_mcp_config_security.py +0 -124
  1386. package/src/scripts/lint_mcp_registry_manifest.py +0 -69
  1387. package/src/scripts/lint_media_policy_linkage.py +0 -140
  1388. package/src/scripts/lint_model_tier_coverage.py +0 -73
  1389. package/src/scripts/lint_namespace.py +0 -135
  1390. package/src/scripts/lint_namespace_collisions.py +0 -103
  1391. package/src/scripts/lint_new_skill_gate.py +0 -144
  1392. package/src/scripts/lint_no_new_atomic_commands.py +0 -180
  1393. package/src/scripts/lint_one_off_age.py +0 -184
  1394. package/src/scripts/lint_orchestration_dsl.py +0 -217
  1395. package/src/scripts/lint_orchestrator_auto_detect.py +0 -111
  1396. package/src/scripts/lint_pack_boundaries.py +0 -147
  1397. package/src/scripts/lint_pack_dependencies.py +0 -137
  1398. package/src/scripts/lint_pack_first_win.py +0 -121
  1399. package/src/scripts/lint_persona_governance.py +0 -164
  1400. package/src/scripts/lint_positioning.py +0 -143
  1401. package/src/scripts/lint_profile_overlay_set_only.py +0 -179
  1402. package/src/scripts/lint_readme_jargon.py +0 -131
  1403. package/src/scripts/lint_readme_size.py +0 -33
  1404. package/src/scripts/lint_regression.py +0 -251
  1405. package/src/scripts/lint_roadmap_ci_steps.py +0 -186
  1406. package/src/scripts/lint_roadmap_complexity.py +0 -220
  1407. package/src/scripts/lint_role_experiences.py +0 -255
  1408. package/src/scripts/lint_rule_interactions.py +0 -170
  1409. package/src/scripts/lint_rule_tiers.py +0 -90
  1410. package/src/scripts/lint_showcase_sessions.py +0 -148
  1411. package/src/scripts/lint_skill_frontmatter_safety.py +0 -144
  1412. package/src/scripts/lint_skill_tools.py +0 -168
  1413. package/src/scripts/lint_topics_yaml.py +0 -89
  1414. package/src/scripts/lint_trust_coherence.py +0 -212
  1415. package/src/scripts/lint_value_dashboard.py +0 -218
  1416. package/src/scripts/lint_workspace_boundary.py +0 -122
  1417. package/src/scripts/mcp_parity_smoke.py +0 -316
  1418. package/src/scripts/mcp_render.py +0 -173
  1419. package/src/scripts/mcp_server/__init__.py +0 -19
  1420. package/src/scripts/mcp_server/__main__.py +0 -12
  1421. package/src/scripts/mcp_server/catalog.py +0 -125
  1422. package/src/scripts/mcp_server/metadata.py +0 -75
  1423. package/src/scripts/mcp_server/prompts.py +0 -442
  1424. package/src/scripts/mcp_server/requirements.txt +0 -4
  1425. package/src/scripts/mcp_server/resources.py +0 -201
  1426. package/src/scripts/mcp_server/server.py +0 -270
  1427. package/src/scripts/mcp_server/telemetry.py +0 -128
  1428. package/src/scripts/mcp_server/tools.py +0 -926
  1429. package/src/scripts/mcp_telemetry_health.py +0 -214
  1430. package/src/scripts/mcp_telemetry_query.py +0 -203
  1431. package/src/scripts/mcp_telemetry_store.py +0 -211
  1432. package/src/scripts/measure_augment_budget.py +0 -214
  1433. package/src/scripts/measure_density.py +0 -232
  1434. package/src/scripts/measure_frugality_savings.py +0 -164
  1435. package/src/scripts/measure_markitdown_lift.py +0 -127
  1436. package/src/scripts/measure_patterns.py +0 -376
  1437. package/src/scripts/measure_projection_bytes.py +0 -159
  1438. package/src/scripts/measure_rule_budget.py +0 -347
  1439. package/src/scripts/measure_skill_reduction.py +0 -102
  1440. package/src/scripts/memory_hash.py +0 -75
  1441. package/src/scripts/memory_lookup.py +0 -436
  1442. package/src/scripts/memory_report.py +0 -314
  1443. package/src/scripts/memory_signal.py +0 -165
  1444. package/src/scripts/memory_status.py +0 -76
  1445. package/src/scripts/migrate_command_suggestions.py +0 -151
  1446. package/src/scripts/migrate_frontmatter_defaults.py +0 -245
  1447. package/src/scripts/mine_session.py +0 -356
  1448. package/src/scripts/minimal_safe_diff_hook.py +0 -245
  1449. package/src/scripts/move_artefact.py +0 -143
  1450. package/src/scripts/new_skill.py +0 -148
  1451. package/src/scripts/onboarding_gate_hook.py +0 -142
  1452. package/src/scripts/pack_mcp_content.py +0 -293
  1453. package/src/scripts/plan_physical_move.py +0 -353
  1454. package/src/scripts/prediction-pool/poisson_sim.py +0 -167
  1455. package/src/scripts/prediction-pool/pool_winsim.py +0 -236
  1456. package/src/scripts/prediction-pool/score_ev.py +0 -188
  1457. package/src/scripts/print_required_checks.py +0 -196
  1458. package/src/scripts/probe_projection_fidelity.py +0 -202
  1459. package/src/scripts/probe_skill_registration.py +0 -413
  1460. package/src/scripts/profile_staleness_hook.py +0 -69
  1461. package/src/scripts/profile_use.py +0 -164
  1462. package/src/scripts/project_thin_rules.py +0 -168
  1463. package/src/scripts/propose_modules_config.py +0 -145
  1464. package/src/scripts/prototype_lint_contradictions.py +0 -150
  1465. package/src/scripts/prove_pack_extractable.py +0 -187
  1466. package/src/scripts/readme_linter.py +0 -589
  1467. package/src/scripts/redact_hook_capture.py +0 -148
  1468. package/src/scripts/refine_ticket_detect.py +0 -646
  1469. package/src/scripts/release.py +0 -1091
  1470. package/src/scripts/render_benchmark_md.py +0 -401
  1471. package/src/scripts/render_value_md.py +0 -347
  1472. package/src/scripts/requirements-evals.txt +0 -8
  1473. package/src/scripts/roadmap_progress_hook.py +0 -274
  1474. package/src/scripts/router_telemetry.py +0 -470
  1475. package/src/scripts/run_skill_evals.py +0 -185
  1476. package/src/scripts/runtime_dispatcher.py +0 -276
  1477. package/src/scripts/runtime_handler.py +0 -148
  1478. package/src/scripts/runtime_registry.py +0 -166
  1479. package/src/scripts/score_skill_selection.py +0 -198
  1480. package/src/scripts/security_audit_config.py +0 -153
  1481. package/src/scripts/setup_eval_venv.sh +0 -58
  1482. package/src/scripts/skill_collision_clusters.py +0 -162
  1483. package/src/scripts/skill_discovery.py +0 -254
  1484. package/src/scripts/skill_linter.py +0 -3694
  1485. package/src/scripts/skill_overlap.py +0 -204
  1486. package/src/scripts/skill_preview.py +0 -179
  1487. package/src/scripts/skill_tools/__init__.py +0 -22
  1488. package/src/scripts/skill_tools/audit_persona_coverage.py +0 -147
  1489. package/src/scripts/skill_tools/audit_user_type_coverage.py +0 -148
  1490. package/src/scripts/skill_tools/run_block_d_eval.py +0 -129
  1491. package/src/scripts/skill_tools/score_skill_relevance.py +0 -169
  1492. package/src/scripts/skill_tools/suggest_skill_for_task.py +0 -113
  1493. package/src/scripts/skill_trigger_eval.py +0 -682
  1494. package/src/scripts/skill_usage_collect.py +0 -191
  1495. package/src/scripts/skill_usage_report.py +0 -162
  1496. package/src/scripts/smoke_path_resolution.py +0 -93
  1497. package/src/scripts/smoke_quickstart.py +0 -144
  1498. package/src/scripts/snapshot_agent_outputs.py +0 -144
  1499. package/src/scripts/spotcheck_thin_root.py +0 -134
  1500. package/src/scripts/sync_agent_settings.py +0 -180
  1501. package/src/scripts/sync_github_metadata.py +0 -147
  1502. package/src/scripts/sync_gitignore.py +0 -291
  1503. package/src/scripts/sync_yaml_rt.py +0 -734
  1504. package/src/scripts/telegraph_stats.py +0 -119
  1505. package/src/scripts/tool_registry.py +0 -146
  1506. package/src/scripts/tools/__init__.py +0 -1
  1507. package/src/scripts/tools/adapter_errors.py +0 -63
  1508. package/src/scripts/tools/base_adapter.py +0 -91
  1509. package/src/scripts/tools/github_adapter.py +0 -128
  1510. package/src/scripts/tools/jira_adapter.py +0 -115
  1511. package/src/scripts/trigger_coverage.py +0 -129
  1512. package/src/scripts/update_counts.py +0 -199
  1513. package/src/scripts/update_prices.py +0 -125
  1514. package/src/scripts/validate_agent_settings.py +0 -124
  1515. package/src/scripts/validate_decision_engine.py +0 -136
  1516. package/src/scripts/validate_discovery_manifest.py +0 -94
  1517. package/src/scripts/validate_frontmatter.py +0 -647
  1518. package/src/scripts/validate_pack_yaml.py +0 -179
  1519. package/src/scripts/validate_safe_paths.py +0 -118
  1520. package/src/scripts/validate_telegraph_carveouts.py +0 -129
  1521. package/src/scripts/verify_before_complete_hook.py +0 -216
  1522. package/src/scripts/verify_physical_move.py +0 -185
  1523. package/src/scripts/wrapper_freshness_hook.py +0 -86
  1524. /package/dist/agent-src/skills/design-intelligence/data/{typography.csv → font-pairings-reference.csv} +0 -0
  1525. /package/src/scripts/{ai-video → media}/lib/fixtures/allin1/analysis.json +0 -0
  1526. /package/src/scripts/{ai-video → media}/lib/fixtures/comfyui/scene-0001.mp4 +0 -0
  1527. /package/src/scripts/{ai-video → media}/lib/fixtures/fal/scene-0001.mp4 +0 -0
  1528. /package/src/scripts/{ai-video → media}/lib/fixtures/gemini-veo/scene-0001.mp4 +0 -0
  1529. /package/src/scripts/{ai-video → media}/lib/fixtures/higgsfield/scene-0001.mp4 +0 -0
  1530. /package/src/scripts/{ai-video → media}/lib/fixtures/kling/scene-0001.mp4 +0 -0
  1531. /package/src/scripts/{ai-video → media}/lib/fixtures/musetalk/lipsync-0001.mp4 +0 -0
  1532. /package/src/scripts/{ai-video → media}/lib/fixtures/openai-images/scene-0001.png +0 -0
  1533. /package/src/scripts/{ai-video → media}/lib/fixtures/replicate/scene-0001.mp4 +0 -0
  1534. /package/src/scripts/{ai-video → media}/lib/fixtures/sora/scene-0001.mp4 +0 -0
  1535. /package/src/scripts/{ai-video → media}/lib/fixtures/syncso/lipsync-0001.mp4 +0 -0
  1536. /package/src/scripts/{ai-video → media}/lib/fixtures/whisperx/transcript.json +0 -0
  1537. /package/src/scripts/{ai-video → media}/lib/telemetry.sh +0 -0
@@ -0,0 +1,1227 @@
1
+ #!/usr/bin/env tsx
2
+ /**
3
+ * Command-surface inventory + overlap detection + usage signal.
4
+ *
5
+ * TypeScript twin of `src/scripts/audit_command_surface.py` (ADR-200, Phase 8 /
6
+ * Wave 8b). Mirrors the CLI contract EXACTLY — the `--root`, `--budget`,
7
+ * `--check-new`, `--baseline`, `--quiet` flags, exit codes (0 ok / 1 budget
8
+ * violation / 2 root-missing / 3 git error), the stdout/stderr split,
9
+ * byte-identical messages AND byte-identical written reports
10
+ * (`command-surface.{json,md}`, `command-budget-audit.{json,md}`,
11
+ * each via `json.dumps(indent=2)` / the markdown renderers).
12
+ *
13
+ * Walks `src/domains/<pack>/<verb>/command.md`, collects metadata, flags
14
+ * overlap pairs by keyword-cosine similarity, and adds a usage signal from
15
+ * git history.
16
+ *
17
+ * No behaviour changes — latent Python quirks replicated (incl. git-history
18
+ * `days_since_*` values, which depend on the wall clock and the worktree's
19
+ * git log — golden parity is run in the SAME repo so both sides observe the
20
+ * identical history; the day arithmetic is reproduced with the same floor).
21
+ */
22
+ import { spawnSync, type SpawnSyncReturns } from 'node:child_process';
23
+ import * as fs from 'node:fs';
24
+ import * as path from 'node:path';
25
+ import process from 'node:process';
26
+ import { fileURLToPath, pathToFileURL } from 'node:url';
27
+ import { parse as parseYaml } from 'yaml';
28
+
29
+ import { SRC_DOMAINS } from './_lib/agent_src.js';
30
+
31
+ const _HERE = fileURLToPath(import.meta.url);
32
+
33
+ // src/scripts/audit_command_surface.ts → parents[2] of the .py file is repo root.
34
+ export const REPO_ROOT = path.resolve(path.dirname(_HERE), '..', '..');
35
+
36
+ // 6.0.0-D Step 10 moved the command surface into src/domains/<pack>/<verb>/command.md.
37
+ const DEFAULT_ROOT = (): string => SRC_DOMAINS();
38
+ // Enforced source target — read by check_gate_paths (parity with the Python
39
+ // module's `GATE_CORE_PATHS = (SRC_DOMAINS,)`). Exported so the gate can
40
+ // introspect it directly (read, never copied).
41
+ export const GATE_CORE_PATHS = [SRC_DOMAINS()];
42
+ void GATE_CORE_PATHS;
43
+ const REPORT_DIR = path.join(REPO_ROOT, 'agents', 'reports');
44
+ const OUT_JSON = path.join(REPORT_DIR, 'command-surface.json');
45
+ const OUT_MD = path.join(REPORT_DIR, 'command-surface.md');
46
+ const OUT_BUDGET_JSON = path.join(REPORT_DIR, 'command-budget-audit.json');
47
+ const OUT_BUDGET_MD = path.join(REPORT_DIR, 'command-budget-audit.md');
48
+ const PACKS_YML = path.join(REPO_ROOT, 'src', 'config', 'discovery', 'packs.yml');
49
+ const DOCS_DIR = path.join(REPO_ROOT, 'docs');
50
+
51
+ const SIZE_BUDGETS: Record<string, number> = {
52
+ core: 8,
53
+ small: 2,
54
+ medium: 5,
55
+ large: 8,
56
+ platform: 10,
57
+ };
58
+ // ADR-092: `visibility:` is the named source of truth (visible / advanced /
59
+ // internal); the integer `tier:` is a back-compat alias. A command counts
60
+ // toward the per-pack budget when it is surfaced — visibility in {visible,
61
+ // advanced} (or, when only the alias is present, tier in {0,1}). `internal`
62
+ // (or absent → defaults to internal) is uncapped.
63
+ const VISIBLE_TIERS: ReadonlySet<number> = new Set([0, 1]);
64
+ const VISIBLE_VISIBILITIES: ReadonlySet<string> = new Set(['visible', 'advanced']);
65
+
66
+ const FRONTMATTER_RE = /^---\n([\s\S]*?)\n---/;
67
+ const DESCRIPTION_RE = /^description:\s*"?(.*?)"?\s*$/m;
68
+ const ALIASES_RE = /^aliases:\s*(.*)$/m;
69
+ const NAME_RE = /^name:\s*(.*)$/m;
70
+ const CLUSTER_RE = /^cluster:\s*(.*)$/m;
71
+ const TIER_RE = /^tier:\s*(\d+)/m;
72
+ const VISIBILITY_RE = /^visibility:\s*(visible|advanced|internal)/m;
73
+ const PACK_RE = /^pack:\s*(.*)$/m;
74
+
75
+ const STOPWORDS: ReadonlySet<string> = new Set([
76
+ 'the', 'and', 'for', 'with', 'when', 'use', 'or', 'of', 'to', 'a', 'an',
77
+ 'is', 'in', 'on', 'by', 'be', 'at', 'as', 'it', 'if', 'are', 'this',
78
+ 'that', 'from', 'but', 'not', 'can', 'any', 'all', 'no', 'after',
79
+ 'before', 'during', 'user', 'agent', 'code', 'project', 'via', 'into',
80
+ 'onto', 'even', 'without', 'naming', 'run', 'runs', 'running', 'each',
81
+ 'every', 'one', 'two', 'now', 'then', 'also', 'based', 'default',
82
+ ]);
83
+
84
+ const OVERLAP_COSINE_THRESHOLD = 0.6;
85
+ const LOW_SIGNAL_COMMIT_COUNT = 2;
86
+ const LOW_SIGNAL_AGE_DAYS = 30;
87
+
88
+ // Dataclass `Command`. Field order is the JSON / asdict serialization order.
89
+ interface Command {
90
+ name: string;
91
+ path: string;
92
+ relpath: string;
93
+ directory: string;
94
+ description: string;
95
+ aliases: string[];
96
+ tier: number | null;
97
+ visibility: string | null;
98
+ cluster: string;
99
+ pack: string;
100
+ line_count: number;
101
+ last_modified_iso: string;
102
+ days_since_modified: number | null;
103
+ commit_count: number;
104
+ first_commit_iso: string;
105
+ days_since_first_commit: number | null;
106
+ }
107
+
108
+ const COMMAND_FIELDS: readonly (keyof Command)[] = [
109
+ 'name',
110
+ 'path',
111
+ 'relpath',
112
+ 'directory',
113
+ 'description',
114
+ 'aliases',
115
+ 'tier',
116
+ 'visibility',
117
+ 'cluster',
118
+ 'pack',
119
+ 'line_count',
120
+ 'last_modified_iso',
121
+ 'days_since_modified',
122
+ 'commit_count',
123
+ 'first_commit_iso',
124
+ 'days_since_first_commit',
125
+ ];
126
+
127
+ type Json = null | boolean | number | string | Json[] | { [k: string]: Json };
128
+
129
+ function _exists(p: string): boolean {
130
+ try {
131
+ fs.statSync(p);
132
+ return true;
133
+ } catch {
134
+ return false;
135
+ }
136
+ }
137
+
138
+ /** `sorted(root.rglob("*.md"))` with pathlib component-wise ordering. */
139
+ function _rglobMdSorted(root: string): string[] {
140
+ const out: string[] = [];
141
+ const walk = (dir: string): void => {
142
+ let entries: fs.Dirent[];
143
+ try {
144
+ entries = fs.readdirSync(dir, { withFileTypes: true });
145
+ } catch {
146
+ return;
147
+ }
148
+ for (const e of entries) {
149
+ const full = path.join(dir, e.name);
150
+ if (e.isDirectory() && !e.isSymbolicLink()) {
151
+ walk(full);
152
+ } else if (e.isFile() && e.name.endsWith('.md')) {
153
+ out.push(full);
154
+ }
155
+ }
156
+ };
157
+ walk(root);
158
+ out.sort(_pathCompare);
159
+ return out;
160
+ }
161
+
162
+ /** Whether `dir` (recursively) contains any file named `command.md`. */
163
+ function _hasCommandMd(dir: string): boolean {
164
+ let entries: fs.Dirent[];
165
+ try {
166
+ entries = fs.readdirSync(dir, { withFileTypes: true });
167
+ } catch {
168
+ return false;
169
+ }
170
+ for (const e of entries) {
171
+ if (e.isDirectory() && !e.isSymbolicLink()) {
172
+ if (_hasCommandMd(path.join(dir, e.name))) {
173
+ return true;
174
+ }
175
+ } else if (e.isFile() && e.name === 'command.md') {
176
+ return true;
177
+ }
178
+ }
179
+ return false;
180
+ }
181
+
182
+ function _pathCompare(a: string, b: string): number {
183
+ const pa = a.split(path.sep);
184
+ const pb = b.split(path.sep);
185
+ const n = Math.min(pa.length, pb.length);
186
+ for (let i = 0; i < n; i += 1) {
187
+ const x = pa[i] as string;
188
+ const y = pb[i] as string;
189
+ if (x < y) return -1;
190
+ if (x > y) return 1;
191
+ }
192
+ return pa.length - pb.length;
193
+ }
194
+
195
+ function _relPosix(child: string, root: string): string {
196
+ return path.relative(root, child).split(path.sep).join('/');
197
+ }
198
+
199
+ /** Python `Path.stem`. */
200
+ function _stem(name: string): string {
201
+ const dot = name.lastIndexOf('.');
202
+ return dot > 0 ? name.slice(0, dot) : name;
203
+ }
204
+
205
+ /** Mirror Python `str.strip(" \"'")` then `.strip(...)` chains used here. */
206
+ function _strip(s: string, chars: string): string {
207
+ let start = 0;
208
+ let end = s.length;
209
+ while (start < end && chars.includes(s[start] as string)) start += 1;
210
+ while (end > start && chars.includes(s[end - 1] as string)) end -= 1;
211
+ return s.slice(start, end);
212
+ }
213
+
214
+ interface Frontmatter {
215
+ description?: string;
216
+ name?: string;
217
+ cluster?: string;
218
+ tier?: number;
219
+ visibility?: string;
220
+ pack?: string;
221
+ aliases?: string[];
222
+ }
223
+
224
+ export function parse_frontmatter(text: string): Frontmatter {
225
+ const m = FRONTMATTER_RE.exec(text);
226
+ if (!m) {
227
+ return {};
228
+ }
229
+ const block = m[1] as string;
230
+ const out: Frontmatter = {};
231
+ const d = DESCRIPTION_RE.exec(block);
232
+ if (d) {
233
+ out.description = (d[1] as string).trim();
234
+ }
235
+ const n = NAME_RE.exec(block);
236
+ if (n) {
237
+ // Python: n.group(1).strip().strip('"').strip("'")
238
+ out.name = _stripQuotes((n[1] as string).trim());
239
+ }
240
+ const c = CLUSTER_RE.exec(block);
241
+ if (c) {
242
+ out.cluster = _stripQuotes((c[1] as string).trim());
243
+ }
244
+ const t = TIER_RE.exec(block);
245
+ if (t) {
246
+ out.tier = parseInt(t[1] as string, 10);
247
+ }
248
+ const v = VISIBILITY_RE.exec(block);
249
+ if (v) {
250
+ out.visibility = v[1] as string;
251
+ }
252
+ const pk = PACK_RE.exec(block);
253
+ if (pk) {
254
+ out.pack = _stripQuotes((pk[1] as string).trim());
255
+ }
256
+ const a = ALIASES_RE.exec(block);
257
+ if (a) {
258
+ const raw = (a[1] as string).trim();
259
+ if (raw.startsWith('[')) {
260
+ const inner = _strip(raw, '[]');
261
+ out.aliases = inner
262
+ .split(',')
263
+ .map((x) => x.trim())
264
+ .filter((x) => x.length > 0)
265
+ .map((x) => _stripQuotes(x));
266
+ } else {
267
+ out.aliases = raw ? [_stripQuotes(raw)] : [];
268
+ }
269
+ }
270
+ return out;
271
+ }
272
+
273
+ /** Python `.strip('"').strip("'")` — strip all `"` then all `'`. */
274
+ function _stripQuotes(s: string): string {
275
+ return _strip(_strip(s, '"'), "'");
276
+ }
277
+
278
+ export function keyword_vector(text: string): Map<string, number> {
279
+ const tokens = text.toLowerCase().match(/[a-z][a-z0-9_-]{2,}/g) ?? [];
280
+ const counter = new Map<string, number>();
281
+ for (const t of tokens) {
282
+ if (STOPWORDS.has(t)) {
283
+ continue;
284
+ }
285
+ counter.set(t, (counter.get(t) ?? 0) + 1);
286
+ }
287
+ return counter;
288
+ }
289
+
290
+ export function cosine(a: Map<string, number>, b: Map<string, number>): number {
291
+ if (a.size === 0 || b.size === 0) {
292
+ return 0.0;
293
+ }
294
+ const shared = [...a.keys()].filter((t) => b.has(t));
295
+ if (shared.length === 0) {
296
+ return 0.0;
297
+ }
298
+ let num = 0;
299
+ for (const t of shared) {
300
+ num += (a.get(t) as number) * (b.get(t) as number);
301
+ }
302
+ let da = 0;
303
+ for (const v of a.values()) da += v * v;
304
+ let db = 0;
305
+ for (const v of b.values()) db += v * v;
306
+ da = Math.sqrt(da);
307
+ db = Math.sqrt(db);
308
+ return da && db ? num / (da * db) : 0.0;
309
+ }
310
+
311
+ /** Days between two ISO timestamps, floored — mirrors `timedelta.days`. */
312
+ function _daysSince(iso: string): number {
313
+ const then = new Date(iso).getTime();
314
+ const now = Date.now();
315
+ return Math.floor((now - then) / 86400000);
316
+ }
317
+
318
+ export function git_last_modified(p: string): [string, number | null] {
319
+ const r = spawnSync(
320
+ 'git',
321
+ ['log', '--follow', '-1', '--format=%cI', '--', p],
322
+ { cwd: REPO_ROOT, encoding: 'utf-8', stdio: ['ignore', 'pipe', 'ignore'] },
323
+ );
324
+ if ((r.status ?? 1) !== 0) {
325
+ return ['', null];
326
+ }
327
+ const out = (r.stdout ?? '').trim();
328
+ if (!out) {
329
+ return ['', null];
330
+ }
331
+ const days = _daysSince(out);
332
+ if (Number.isNaN(days)) {
333
+ return ['', null];
334
+ }
335
+ return [out, days];
336
+ }
337
+
338
+ export function git_history(p: string): [number, string, number | null] {
339
+ const r = spawnSync(
340
+ 'git',
341
+ ['log', '--follow', '--format=%cI', '--', p],
342
+ { cwd: REPO_ROOT, encoding: 'utf-8', stdio: ['ignore', 'pipe', 'ignore'] },
343
+ );
344
+ if ((r.status ?? 1) !== 0) {
345
+ return [0, '', null];
346
+ }
347
+ const lines = (r.stdout ?? '')
348
+ .trim()
349
+ .split('\n')
350
+ .filter((l) => l.length > 0);
351
+ if (lines.length === 0) {
352
+ return [0, '', null];
353
+ }
354
+ const first = lines[lines.length - 1] as string;
355
+ const days = _daysSince(first);
356
+ if (Number.isNaN(days)) {
357
+ return [0, '', null];
358
+ }
359
+ return [lines.length, first, days];
360
+ }
361
+
362
+ export function collect(root: string): Command[] {
363
+ const commands: Command[] = [];
364
+ for (const md of _rglobMdSorted(root)) {
365
+ if (md.split(path.sep).some((part) => part === '_archive')) {
366
+ continue;
367
+ }
368
+ const text = fs.readFileSync(md, 'utf-8');
369
+ const fm = parse_frontmatter(text);
370
+ const rel = _relPosix(md, REPO_ROOT);
371
+ const directory =
372
+ path.dirname(md) !== root ? _relPosix(path.dirname(md), root) : '.';
373
+ const [lastIso, days] = git_last_modified(md);
374
+ const [nCommits, firstIso, firstDays] = git_history(md);
375
+ commands.push({
376
+ name: fm.name ?? _stem(path.basename(md)),
377
+ path: md,
378
+ relpath: rel,
379
+ directory,
380
+ description: fm.description ?? '',
381
+ aliases: fm.aliases ?? [],
382
+ tier: fm.tier ?? null,
383
+ visibility: fm.visibility ?? null,
384
+ cluster: fm.cluster ?? '',
385
+ pack: fm.pack ?? '',
386
+ line_count: _splitlinesLen(text),
387
+ last_modified_iso: lastIso,
388
+ days_since_modified: days,
389
+ commit_count: nCommits,
390
+ first_commit_iso: firstIso,
391
+ days_since_first_commit: firstDays,
392
+ });
393
+ }
394
+ return commands;
395
+ }
396
+
397
+ // Boundaries Python str.splitlines() recognises (CPython unicode line breaks):
398
+ // \n \r \r\n \v \f \x1c \x1d \x1e \x85 \u2028 \u2029.
399
+ const _LINE_BOUNDARY = /\r\n|[\n\r\v\f\x1c\x1d\x1e\x85\u2028\u2029]/g;
400
+
401
+ /** Mirror Python `len(text.splitlines())` — count of lines, no trailing empty. */
402
+ function _splitlinesLen(text: string): number {
403
+ if (text === '') {
404
+ return 0;
405
+ }
406
+ let count = 0;
407
+ let lastEnd = 0;
408
+ _LINE_BOUNDARY.lastIndex = 0;
409
+ let m: RegExpExecArray | null;
410
+ while ((m = _LINE_BOUNDARY.exec(text)) !== null) {
411
+ count += 1;
412
+ lastEnd = m.index + m[0].length;
413
+ }
414
+ // Trailing characters after the final boundary form one more line; a string
415
+ // ending exactly on a boundary contributes no trailing empty line.
416
+ if (lastEnd < text.length) {
417
+ count += 1;
418
+ }
419
+ return count;
420
+ }
421
+
422
+ interface OverlapPair {
423
+ a: string;
424
+ b: string;
425
+ a_name: string;
426
+ b_name: string;
427
+ cosine: number;
428
+ a_description: string;
429
+ b_description: string;
430
+ }
431
+
432
+ /** Mirror Python `round(x, 3)` — round-half-to-even. */
433
+ function _round3(x: number): number {
434
+ const factor = 1000;
435
+ const scaled = x * factor;
436
+ const floor = Math.floor(scaled);
437
+ const frac = scaled - floor;
438
+ const tol = Math.max(Math.abs(scaled), 1) * 2 ** -40;
439
+ let rounded: number;
440
+ if (Math.abs(frac - 0.5) <= tol) {
441
+ rounded = floor % 2 === 0 ? floor : floor + 1;
442
+ } else {
443
+ rounded = Math.round(scaled);
444
+ }
445
+ return rounded / factor;
446
+ }
447
+
448
+ export function find_overlap_pairs(commands: Command[]): OverlapPair[] {
449
+ const vectors = new Map<string, Map<string, number>>();
450
+ for (const c of commands) {
451
+ vectors.set(c.relpath, keyword_vector(c.description));
452
+ }
453
+ const pairs: OverlapPair[] = [];
454
+ // itertools.combinations(commands, 2) — index order i<j.
455
+ for (let i = 0; i < commands.length; i += 1) {
456
+ for (let j = i + 1; j < commands.length; j += 1) {
457
+ const a = commands[i] as Command;
458
+ const b = commands[j] as Command;
459
+ if (!a.description || !b.description) {
460
+ continue;
461
+ }
462
+ const sim = cosine(
463
+ vectors.get(a.relpath) as Map<string, number>,
464
+ vectors.get(b.relpath) as Map<string, number>,
465
+ );
466
+ if (sim < OVERLAP_COSINE_THRESHOLD) {
467
+ continue;
468
+ }
469
+ pairs.push({
470
+ a: a.relpath,
471
+ b: b.relpath,
472
+ a_name: a.name,
473
+ b_name: b.name,
474
+ cosine: _round3(sim),
475
+ a_description: a.description,
476
+ b_description: b.description,
477
+ });
478
+ }
479
+ }
480
+ // sorted(pairs, key=lambda p: -p["cosine"]) — stable sort, descending cosine.
481
+ return _stableSort(pairs, (p) => -p.cosine);
482
+ }
483
+
484
+ /** Mirror Python's stable `sorted(..., key=...)`. */
485
+ function _stableSort<T>(arr: T[], key: (x: T) => number): T[] {
486
+ return arr
487
+ .map((v, i) => ({ v, i }))
488
+ .sort((x, y) => {
489
+ const kx = key(x.v);
490
+ const ky = key(y.v);
491
+ if (kx < ky) return -1;
492
+ if (kx > ky) return 1;
493
+ return x.i - y.i;
494
+ })
495
+ .map((p) => p.v);
496
+ }
497
+
498
+ /** Mirror `f"{x:.2f}"` round-half-to-even. */
499
+ function _fixed(x: number, ndigits: number): string {
500
+ const neg = x < 0;
501
+ const abs = Math.abs(x);
502
+ const factor = Math.pow(10, ndigits);
503
+ const scaled = abs * factor;
504
+ const floor = Math.floor(scaled);
505
+ const frac = scaled - floor;
506
+ const tol = Math.max(Math.abs(scaled), 1) * 2 ** -40;
507
+ let rounded: number;
508
+ if (Math.abs(frac - 0.5) <= tol) {
509
+ rounded = floor % 2 === 0 ? floor : floor + 1;
510
+ } else {
511
+ rounded = Math.round(scaled);
512
+ }
513
+ let intStr = String(rounded);
514
+ let result: string;
515
+ if (ndigits === 0) {
516
+ result = intStr;
517
+ } else {
518
+ if (intStr.length <= ndigits) {
519
+ intStr = '0'.repeat(ndigits - intStr.length + 1) + intStr;
520
+ }
521
+ result = `${intStr.slice(0, intStr.length - ndigits)}.${intStr.slice(intStr.length - ndigits)}`;
522
+ }
523
+ return neg ? `-${result}` : result;
524
+ }
525
+
526
+ export function render_md(commands: Command[], pairs: OverlapPair[]): string {
527
+ const byDir = new Map<string, Command[]>();
528
+ for (const c of commands) {
529
+ if (!byDir.has(c.directory)) {
530
+ byDir.set(c.directory, []);
531
+ }
532
+ (byDir.get(c.directory) as Command[]).push(c);
533
+ }
534
+
535
+ const lowSignal = commands.filter(
536
+ (c) =>
537
+ c.commit_count &&
538
+ c.commit_count <= LOW_SIGNAL_COMMIT_COUNT &&
539
+ (c.days_since_first_commit ?? 0) <= LOW_SIGNAL_AGE_DAYS,
540
+ );
541
+
542
+ const lines: string[] = [
543
+ '# Command-Surface Inventory',
544
+ '',
545
+ '> Generated by `scripts/audit_command_surface.py`. ' +
546
+ 'Source: `.agent-src.uncondensed/commands/`.',
547
+ '',
548
+ '## Summary',
549
+ '',
550
+ `- **Total commands:** ${commands.length}`,
551
+ `- **Top-level commands (directory \`.\`):** ${(byDir.get('.') ?? []).length}`,
552
+ `- **Sub-cluster directories:** ${[...byDir.keys()].filter((d) => d !== '.').length}`,
553
+ `- **Low-signal (≤${LOW_SIGNAL_COMMIT_COUNT} commits AND ≤${LOW_SIGNAL_AGE_DAYS}d old):** ${lowSignal.length}`,
554
+ `- **Overlap pairs (cosine ≥ ${OVERLAP_COSINE_THRESHOLD}):** ${pairs.length}`,
555
+ '',
556
+ '## Per-directory counts',
557
+ '',
558
+ '| Directory | Count |',
559
+ '|---|---:|',
560
+ ];
561
+ for (const d of [...byDir.keys()].sort((x, y) => (x < y ? -1 : x > y ? 1 : 0))) {
562
+ lines.push(`| \`${d}\` | ${(byDir.get(d) as Command[]).length} |`);
563
+ }
564
+ lines.push('');
565
+
566
+ lines.push('## Likely-overlapping pairs', '');
567
+ if (pairs.length === 0) {
568
+ lines.push('_No pairs above threshold._');
569
+ } else {
570
+ lines.push(
571
+ '| # | A | B | cosine | A description | B description |',
572
+ '|---|---|---|---:|---|---|',
573
+ );
574
+ pairs.forEach((p, idx) => {
575
+ lines.push(
576
+ `| ${idx + 1} | \`${p.a_name}\` | \`${p.b_name}\` | ${_fixed(p.cosine, 2)} | ` +
577
+ `${p.a_description} | ${p.b_description} |`,
578
+ );
579
+ });
580
+ }
581
+ lines.push('');
582
+
583
+ lines.push(
584
+ '## Usage-signal note',
585
+ '',
586
+ 'Per-command invocation telemetry is **not** available. Two surrogate signals ' +
587
+ 'were considered:',
588
+ '',
589
+ '- **Filesystem mtime** — useless: `task sync` rewrites every file when the ' +
590
+ ' condensed and uncondensed trees are regenerated.',
591
+ '- **Git history (`--follow`)** — uninformative here: the `.agent-src.uncondensed/` ' +
592
+ ' directory is the result of a recent rename (`.augment.uncondensed/` → ' +
593
+ ' `.agent-src.uncondensed/`), so almost every file shows a single recent commit ' +
594
+ ` on the current branch. ${lowSignal.length} of ${commands.length} commands fall into the ` +
595
+ ` ≤${LOW_SIGNAL_COMMIT_COUNT}-commits / ≤${LOW_SIGNAL_AGE_DAYS}d-old bucket purely as a ` +
596
+ ' rename artefact, not as a real cold-tail signal.',
597
+ '',
598
+ '**Implication for Phase 1 categorisation:** keep / merge / retire decisions must ' +
599
+ 'be made on **intent** (description content, overlap with sibling commands, tier ' +
600
+ 'placement, cluster fit) rather than usage data. The cosine-≥0.6 overlap ' +
601
+ 'pairs above are the primary structural lever.',
602
+ '',
603
+ );
604
+
605
+ lines.push(
606
+ '## Three-bucket categorisation (Phase 1 Step 4)',
607
+ '',
608
+ 'The keep / merge / retire verdict lives in ' +
609
+ '[`command-surface-synthesis.md`](command-surface-synthesis.md) — hand-curated ' +
610
+ 'and **not** regenerated by this script. Headline: 109 keep · 0 merge · 0 retire. ' +
611
+ 'Every overlap pair and retire candidate surfaced by the council turned out to ' +
612
+ 'be an intentional structural pattern (scope ladder, union dispatcher, thin ' +
613
+ 'alias, tier-gated specialist), not redundancy.',
614
+ '',
615
+ );
616
+
617
+ lines.push(
618
+ '## Full inventory',
619
+ '',
620
+ 'Column `bucket` is left blank — the categorisation lives in ' +
621
+ '[`command-surface-synthesis.md`](command-surface-synthesis.md). Every command ' +
622
+ "in this table maps to `keep` unless named in that file's tables.",
623
+ '',
624
+ '| Name | Path | Tier | Cluster | Aliases | Lines | Commits | Age (d) | Bucket |',
625
+ '|---|---|---:|---|---|---:|---:|---:|---|',
626
+ );
627
+ const sortedCmds = _stableSortStr(commands, (c) => c.relpath);
628
+ for (const c of sortedCmds) {
629
+ const aliases = c.aliases.length ? c.aliases.join(', ') : '—';
630
+ const tier = c.tier === null ? '—' : String(c.tier);
631
+ const cluster = c.cluster || '—';
632
+ const age = c.days_since_first_commit === null ? '—' : String(c.days_since_first_commit);
633
+ lines.push(
634
+ `| \`${c.name}\` | \`${c.relpath}\` | ${tier} | ${cluster} | ${aliases} | ` +
635
+ `${c.line_count} | ${c.commit_count} | ${age} | |`,
636
+ );
637
+ }
638
+ lines.push('');
639
+ return lines.join('\n');
640
+ }
641
+
642
+ function _stableSortStr<T>(arr: T[], key: (x: T) => string): T[] {
643
+ return arr
644
+ .map((v, i) => ({ v, i }))
645
+ .sort((x, y) => {
646
+ const kx = key(x.v);
647
+ const ky = key(y.v);
648
+ if (kx < ky) return -1;
649
+ if (kx > ky) return 1;
650
+ return x.i - y.i;
651
+ })
652
+ .map((p) => p.v);
653
+ }
654
+
655
+ // --- Budget audit ----------------------------------------------------------
656
+
657
+ function _command_roots(): string[] {
658
+ const roots: string[] = [];
659
+ const domains = SRC_DOMAINS();
660
+ if (_exists(domains)) {
661
+ let entries: fs.Dirent[] = [];
662
+ try {
663
+ entries = fs.readdirSync(domains, { withFileTypes: true });
664
+ } catch {
665
+ entries = [];
666
+ }
667
+ const dirs = entries
668
+ .filter((e) => e.isDirectory())
669
+ .map((e) => path.join(domains, e.name))
670
+ .sort(_pathCompare);
671
+ for (const d of dirs) {
672
+ if (_hasCommandMd(d)) {
673
+ roots.push(d);
674
+ }
675
+ }
676
+ }
677
+ return roots.length ? roots : [DEFAULT_ROOT()];
678
+ }
679
+
680
+ export function collect_all(): Command[] {
681
+ const cmds: Command[] = [];
682
+ const seen = new Set<string>();
683
+ for (const root of _command_roots()) {
684
+ for (const c of collect(root)) {
685
+ if (!seen.has(c.relpath)) {
686
+ seen.add(c.relpath);
687
+ cmds.push(c);
688
+ }
689
+ }
690
+ }
691
+ return cmds;
692
+ }
693
+
694
+ export function load_size_classes(): Map<string, string | null> {
695
+ const raw = parseYaml(fs.readFileSync(PACKS_YML, 'utf-8'), { version: '1.1' }) as Json;
696
+ const list = Array.isArray(raw) ? raw : [];
697
+ const out = new Map<string, string | null>();
698
+ for (const e of list) {
699
+ if (e !== null && typeof e === 'object' && !Array.isArray(e)) {
700
+ const o = e as { [k: string]: Json };
701
+ const id = o['id'];
702
+ if (typeof id === 'string') {
703
+ const sc = o['size_class'];
704
+ out.set(id, typeof sc === 'string' ? sc : null);
705
+ }
706
+ }
707
+ }
708
+ return out;
709
+ }
710
+
711
+ export function citation_count(name: string): number {
712
+ if (!_exists(DOCS_DIR)) {
713
+ return 0;
714
+ }
715
+ const needle = `/${name}`;
716
+ let hits = 0;
717
+ for (const md of _rglobMdSorted(DOCS_DIR)) {
718
+ try {
719
+ if (fs.readFileSync(md, 'utf-8').includes(needle)) {
720
+ hits += 1;
721
+ }
722
+ } catch {
723
+ continue;
724
+ }
725
+ }
726
+ return hits;
727
+ }
728
+
729
+ function _is_visible(c: Command): boolean {
730
+ // ADR-092: prefer the named visibility field; fall back to the tier alias.
731
+ // Absent both → internal per command-surface-tiers.md.
732
+ if (c.visibility !== null) {
733
+ return VISIBLE_VISIBILITIES.has(c.visibility);
734
+ }
735
+ return VISIBLE_TIERS.has(c.tier !== null ? c.tier : 2);
736
+ }
737
+
738
+ interface VisibleCommand {
739
+ name: string;
740
+ tier: number | null;
741
+ cluster: string;
742
+ citations_docs: number;
743
+ commit_count: number;
744
+ days_since_modified: number | null;
745
+ }
746
+ interface PackEntry {
747
+ pack: string;
748
+ size_class: string | null;
749
+ budget: number | null;
750
+ visible_count: number;
751
+ internal_count: number;
752
+ over_budget: boolean;
753
+ over_by: number;
754
+ visible_commands?: VisibleCommand[];
755
+ }
756
+ interface BudgetAudit {
757
+ budgets: Record<string, number>;
758
+ visible_tiers: number[];
759
+ total_commands: number;
760
+ packs: PackEntry[];
761
+ }
762
+
763
+ export function build_budget_audit(
764
+ commands: Command[],
765
+ sizeClasses: Map<string, string | null>,
766
+ ): BudgetAudit {
767
+ const byPack = new Map<string, Command[]>();
768
+ for (const c of commands) {
769
+ const key = c.pack || '(unassigned)';
770
+ if (!byPack.has(key)) {
771
+ byPack.set(key, []);
772
+ }
773
+ (byPack.get(key) as Command[]).push(c);
774
+ }
775
+
776
+ const packsOut: PackEntry[] = [];
777
+ for (const pack of [...byPack.keys()].sort((a, b) => (a < b ? -1 : a > b ? 1 : 0))) {
778
+ const members = byPack.get(pack) as Command[];
779
+ const visible = members.filter((c) => _is_visible(c));
780
+ const internal = members.filter((c) => !_is_visible(c));
781
+ const sc = sizeClasses.has(pack) ? (sizeClasses.get(pack) as string | null) : undefined;
782
+ const budget =
783
+ sc !== undefined && sc !== null && sc in SIZE_BUDGETS
784
+ ? (SIZE_BUDGETS[sc] as number)
785
+ : null;
786
+ const over = budget !== null && visible.length > budget;
787
+ const entry: PackEntry = {
788
+ pack,
789
+ size_class: sc === undefined ? null : sc,
790
+ budget,
791
+ visible_count: visible.length,
792
+ internal_count: internal.length,
793
+ over_budget: over,
794
+ over_by: over ? visible.length - (budget as number) : 0,
795
+ };
796
+ if (over) {
797
+ const vis = visible.map((c) => ({
798
+ name: c.name,
799
+ tier: c.tier,
800
+ cluster: c.cluster,
801
+ citations_docs: citation_count(c.name),
802
+ commit_count: c.commit_count,
803
+ days_since_modified: c.days_since_modified,
804
+ }));
805
+ // sorted(..., key=lambda d: (d["citations_docs"], d["commit_count"]))
806
+ entry.visible_commands = vis
807
+ .map((v, i) => ({ v, i }))
808
+ .sort((x, y) => {
809
+ if (x.v.citations_docs !== y.v.citations_docs) {
810
+ return x.v.citations_docs - y.v.citations_docs;
811
+ }
812
+ if (x.v.commit_count !== y.v.commit_count) {
813
+ return x.v.commit_count - y.v.commit_count;
814
+ }
815
+ return x.i - y.i;
816
+ })
817
+ .map((p) => p.v);
818
+ }
819
+ packsOut.push(entry);
820
+ }
821
+ return {
822
+ budgets: SIZE_BUDGETS,
823
+ visible_tiers: [...VISIBLE_TIERS].sort((a, b) => a - b),
824
+ total_commands: commands.length,
825
+ packs: packsOut,
826
+ };
827
+ }
828
+
829
+ export function render_budget_md(audit: BudgetAudit): string {
830
+ const L: string[] = [];
831
+ L.push('# Command budget audit (6.0.0-B Phase 2 Step 4)\n');
832
+ L.push(
833
+ '> Per-pack VISIBLE-command counts vs. the `size_class` budget ' +
834
+ '(capability-packs.md). `visible` = tier ∈ {0,1}; tier 2 / absent = ' +
835
+ 'internal (uncapped). Citations = docs/ files referencing `/<name>`.\n' +
836
+ '>\n' +
837
+ '> **Signal note:** docs-citations is the load-bearing signal (rank ' +
838
+ 'candidates low→high). The git commit/idle columns are low-variance on ' +
839
+ 'this active repo and only weakly discriminating — do not hide a ' +
840
+ 'high-citation command on an idle-days reading alone.\n',
841
+ );
842
+ L.push('\n## Summary\n');
843
+ L.push('| Pack | size_class | budget | visible | internal | over? |');
844
+ L.push('|---|---|--:|--:|--:|:--|');
845
+ for (const p of audit.packs) {
846
+ const flag = p.over_budget ? `⚠️ +${p.over_by}` : 'ok';
847
+ L.push(
848
+ `| \`${p.pack}\` | ${p.size_class ?? '—'} | ` +
849
+ `${p.budget !== null ? p.budget : '—'} | ` +
850
+ `${p.visible_count} | ${p.internal_count} | ${flag} |`,
851
+ );
852
+ }
853
+ const overPacks = audit.packs.filter((p) => p.over_budget);
854
+ L.push('\n## Over-budget packs — decision signals (Phase 2 Step 5)\n');
855
+ if (overPacks.length === 0) {
856
+ L.push('None — every pack is within its visible-command budget.\n');
857
+ }
858
+ for (const p of overPacks) {
859
+ L.push(
860
+ `\n### \`${p.pack}\` — ${p.visible_count} visible / ` +
861
+ `budget ${p.budget} (${p.size_class}), over by ${p.over_by}\n`,
862
+ );
863
+ L.push('Decide per command: keep-visible · set `internal` · relocate-to-pack-X.\n');
864
+ L.push('| Command | tier | cluster | docs citations | commits | days idle |');
865
+ L.push('|---|--:|---|--:|--:|--:|');
866
+ for (const c of p.visible_commands ?? []) {
867
+ L.push(
868
+ `| \`${c.name}\` | ${c.tier} | ${c.cluster || '—'} | ` +
869
+ `${c.citations_docs} | ${c.commit_count} | ` +
870
+ `${c.days_since_modified !== null ? c.days_since_modified : '—'} |`,
871
+ );
872
+ }
873
+ }
874
+ return L.join('\n') + '\n';
875
+ }
876
+
877
+ // --- Forward-looking budget gate -------------------------------------------
878
+
879
+ const _CMD_PATH_RE = /src\/domains\/.+\/command\.md$/;
880
+
881
+ function _git_lines(args: string[]): string[] {
882
+ let r: SpawnSyncReturns<string>;
883
+ try {
884
+ r = spawnSync('git', args, {
885
+ cwd: REPO_ROOT,
886
+ encoding: 'utf-8',
887
+ timeout: 15000,
888
+ });
889
+ } catch (exc) {
890
+ process.stderr.write(`error: git ${args.join(' ')} failed: ${String(exc)}\n`);
891
+ process.exit(3);
892
+ }
893
+ if (r.error) {
894
+ process.stderr.write(`error: git ${args.join(' ')} failed: ${String(r.error)}\n`);
895
+ process.exit(3);
896
+ }
897
+ if ((r.status ?? 1) !== 0) {
898
+ process.stderr.write(
899
+ `error: git ${args.join(' ')} exit ${r.status}: ${r.stderr ?? ''}\n`,
900
+ );
901
+ process.exit(3);
902
+ }
903
+ return (r.stdout ?? '').split('\n').filter((ln) => ln.trim().length > 0);
904
+ }
905
+
906
+ function _tier_at_ref(ref: string, relpath: string): number | null {
907
+ const r = spawnSync('git', ['show', `${ref}:${relpath}`], {
908
+ cwd: REPO_ROOT,
909
+ encoding: 'utf-8',
910
+ timeout: 15000,
911
+ });
912
+ if ((r.status ?? 1) !== 0) {
913
+ return null;
914
+ }
915
+ const m = TIER_RE.exec(r.stdout ?? '');
916
+ return m ? parseInt(m[1] as string, 10) : null;
917
+ }
918
+
919
+ function _is_visible_tier(tier: number | null): boolean {
920
+ return VISIBLE_TIERS.has(tier !== null ? tier : 2);
921
+ }
922
+
923
+ export function grown_packs(baseline: string, commands: Command[]): Map<string, string[]> {
924
+ const byRelpath = new Map<string, Command>();
925
+ for (const c of commands) {
926
+ byRelpath.set(c.relpath, c);
927
+ }
928
+ const added = new Set(
929
+ _git_lines(['diff', '--name-only', '--diff-filter=A', `${baseline}...HEAD`]),
930
+ );
931
+ const modified = new Set(
932
+ _git_lines(['diff', '--name-only', '--diff-filter=M', `${baseline}...HEAD`]),
933
+ );
934
+ for (const line of _git_lines(['status', '--porcelain', '-uall'])) {
935
+ const status = line.slice(0, 2);
936
+ const rawPath = line.slice(3).trim();
937
+ const p = rawPath.split(' -> ').pop() as string;
938
+ const st = status.trim();
939
+ if (['A', '??', 'AM', 'M', 'MM'].includes(st)) {
940
+ if (['A', '??', 'AM'].includes(st)) {
941
+ added.add(p);
942
+ } else {
943
+ modified.add(p);
944
+ }
945
+ }
946
+ }
947
+
948
+ const grew = new Map<string, string[]>();
949
+ const union = new Set<string>([...added, ...modified]);
950
+ for (const relpath of union) {
951
+ if (!_CMD_PATH_RE.test(relpath)) {
952
+ continue;
953
+ }
954
+ const cmd = byRelpath.get(relpath);
955
+ if (cmd === undefined || !cmd.pack) {
956
+ continue;
957
+ }
958
+ if (!_is_visible(cmd)) {
959
+ continue; // internal now — never counts toward a visible budget
960
+ }
961
+ if (modified.has(relpath) && !added.has(relpath)) {
962
+ // Modified file: only a *promotion* into visibility grows the surface.
963
+ // Baseline is historical (pre-ADR-092) so it carries only the tier
964
+ // alias — the tier proxy is the correct read for the old revision.
965
+ if (_is_visible_tier(_tier_at_ref(baseline, relpath))) {
966
+ continue; // was already visible — not a new surface
967
+ }
968
+ }
969
+ if (!grew.has(cmd.pack)) {
970
+ grew.set(cmd.pack, []);
971
+ }
972
+ (grew.get(cmd.pack) as string[]).push(cmd.name);
973
+ }
974
+ return grew;
975
+ }
976
+
977
+ export function check_new_budget(baseline: string, quiet: boolean): number {
978
+ const commands = collect_all();
979
+ const audit = build_budget_audit(commands, load_size_classes());
980
+ const byPack = new Map<string, PackEntry>();
981
+ for (const p of audit.packs) {
982
+ byPack.set(p.pack, p);
983
+ }
984
+ const grew = grown_packs(baseline, commands);
985
+
986
+ const violations: { pack: string; new_commands: string[]; entry: PackEntry }[] = [];
987
+ for (const pack of [...grew.keys()].sort((a, b) => (a < b ? -1 : a > b ? 1 : 0))) {
988
+ const newNames = grew.get(pack) as string[];
989
+ const entry = byPack.get(pack);
990
+ if (entry && entry.over_budget) {
991
+ violations.push({
992
+ pack,
993
+ new_commands: [...newNames].sort((a, b) => (a < b ? -1 : a > b ? 1 : 0)),
994
+ entry,
995
+ });
996
+ }
997
+ }
998
+
999
+ if (violations.length) {
1000
+ process.stdout.write('❌ Per-pack command budget exceeded by newly visible command(s):\n');
1001
+ for (const v of violations) {
1002
+ const e = v.entry;
1003
+ process.stdout.write(
1004
+ ` • pack \`${v.pack}\` (${e.size_class}): ` +
1005
+ `${e.visible_count} visible / budget ${e.budget} ` +
1006
+ `(+${e.over_by}) — new: ${v.new_commands.join(', ')}\n`,
1007
+ );
1008
+ }
1009
+ process.stdout.write(
1010
+ '\nResolve by one of: set the command to `tier: 2` (internal, ' +
1011
+ 'uncapped) · merge into a sibling cluster · relocate to a pack ' +
1012
+ 'with budget headroom · file a budget-exemption ADR ' +
1013
+ '(docs/contracts/capability-packs.md § Budget exemption process).\n',
1014
+ );
1015
+ return 1;
1016
+ }
1017
+ if (!quiet) {
1018
+ let n = 0;
1019
+ for (const v of grew.values()) {
1020
+ n += v.length;
1021
+ }
1022
+ process.stdout.write(
1023
+ `✅ Budget gate: ${n} newly visible command(s) across ` +
1024
+ `${grew.size} pack(s); no pack over its size_class budget ` +
1025
+ `(baseline: ${baseline}).\n`,
1026
+ );
1027
+ }
1028
+ return 0;
1029
+ }
1030
+
1031
+ // --- json.dumps(indent=2) replica (ensure_ascii default, insertion order) ---
1032
+
1033
+ function _jsonDumpsIndent2(obj: unknown): string {
1034
+ const pad = ' ';
1035
+ const enc = (value: unknown, depth: number): string => {
1036
+ if (value === null || value === undefined) return 'null';
1037
+ if (typeof value === 'boolean') return value ? 'true' : 'false';
1038
+ if (typeof value === 'number') return String(value);
1039
+ if (typeof value === 'string') return encStr(value);
1040
+ if (Array.isArray(value)) {
1041
+ if (value.length === 0) return '[]';
1042
+ const inner = value.map((v) => pad.repeat(depth + 1) + enc(v, depth + 1));
1043
+ return '[\n' + inner.join(',\n') + '\n' + pad.repeat(depth) + ']';
1044
+ }
1045
+ const o = value as Record<string, unknown>;
1046
+ const keys = Object.keys(o);
1047
+ if (keys.length === 0) return '{}';
1048
+ const inner = keys.map(
1049
+ (k) => pad.repeat(depth + 1) + encStr(k) + ': ' + enc(o[k], depth + 1),
1050
+ );
1051
+ return '{\n' + inner.join(',\n') + '\n' + pad.repeat(depth) + '}';
1052
+ };
1053
+ const encStr = (s: string): string => {
1054
+ let out = '"';
1055
+ for (const ch of s) {
1056
+ const cp = ch.codePointAt(0) as number;
1057
+ if (ch === '"') out += '\\"';
1058
+ else if (ch === '\\') out += '\\\\';
1059
+ else if (ch === '\n') out += '\\n';
1060
+ else if (ch === '\r') out += '\\r';
1061
+ else if (ch === '\t') out += '\\t';
1062
+ else if (ch === '\b') out += '\\b';
1063
+ else if (ch === '\f') out += '\\f';
1064
+ else if (cp < 0x20) out += '\\u' + cp.toString(16).padStart(4, '0');
1065
+ else if (cp < 0x7f) out += ch;
1066
+ else if (cp > 0xffff) {
1067
+ const v = cp - 0x10000;
1068
+ const hi = 0xd800 + (v >> 10);
1069
+ const lo = 0xdc00 + (v & 0x3ff);
1070
+ out += '\\u' + hi.toString(16).padStart(4, '0');
1071
+ out += '\\u' + lo.toString(16).padStart(4, '0');
1072
+ } else {
1073
+ out += '\\u' + cp.toString(16).padStart(4, '0');
1074
+ }
1075
+ }
1076
+ return out + '"';
1077
+ };
1078
+ return enc(obj, 0);
1079
+ }
1080
+
1081
+ /** asdict(Command) — fields in dataclass declaration order. */
1082
+ function _asdict(c: Command): Record<string, Json> {
1083
+ const out: Record<string, Json> = {};
1084
+ for (const f of COMMAND_FIELDS) {
1085
+ out[f] = c[f] as Json;
1086
+ }
1087
+ return out;
1088
+ }
1089
+
1090
+ interface ParsedArgs {
1091
+ root: string;
1092
+ budget: boolean;
1093
+ check_new: boolean;
1094
+ baseline: string;
1095
+ quiet: boolean;
1096
+ }
1097
+
1098
+ function parse_args(argv: string[]): ParsedArgs {
1099
+ const out: ParsedArgs = {
1100
+ root: DEFAULT_ROOT(),
1101
+ budget: false,
1102
+ check_new: false,
1103
+ baseline: 'main',
1104
+ quiet: false,
1105
+ };
1106
+ for (let i = 0; i < argv.length; i += 1) {
1107
+ const a = argv[i] as string;
1108
+ const takeValue = (flag: string): string => {
1109
+ const eq = a.indexOf('=');
1110
+ if (eq !== -1) {
1111
+ return a.slice(eq + 1);
1112
+ }
1113
+ const next = argv[i + 1];
1114
+ if (next === undefined) {
1115
+ process.stderr.write(
1116
+ `audit_command_surface: error: argument ${flag}: expected one argument\n`,
1117
+ );
1118
+ process.exit(2);
1119
+ }
1120
+ i += 1;
1121
+ return next;
1122
+ };
1123
+ if (a === '--root' || a.startsWith('--root=')) {
1124
+ out.root = takeValue('--root');
1125
+ } else if (a === '--budget') {
1126
+ out.budget = true;
1127
+ } else if (a === '--check-new') {
1128
+ out.check_new = true;
1129
+ } else if (a === '--baseline' || a.startsWith('--baseline=')) {
1130
+ out.baseline = takeValue('--baseline');
1131
+ } else if (a === '--quiet') {
1132
+ out.quiet = true;
1133
+ } else if (a === '-h' || a === '--help') {
1134
+ process.stdout.write(
1135
+ 'usage: audit_command_surface [-h] [--root ROOT] [--budget] [--check-new] [--baseline BASELINE] [--quiet]\n',
1136
+ );
1137
+ process.exit(0);
1138
+ }
1139
+ }
1140
+ return out;
1141
+ }
1142
+
1143
+ export function main(argv: string[] | null = null): number {
1144
+ const args = parse_args(argv ?? process.argv.slice(2));
1145
+ if (!_exists(args.root)) {
1146
+ process.stderr.write(`error: ${args.root} does not exist\n`);
1147
+ return 2;
1148
+ }
1149
+
1150
+ fs.mkdirSync(REPORT_DIR, { recursive: true });
1151
+
1152
+ if (args.check_new) {
1153
+ return check_new_budget(args.baseline, args.quiet);
1154
+ }
1155
+
1156
+ if (args.budget) {
1157
+ const commands = collect_all();
1158
+ const audit = build_budget_audit(commands, load_size_classes());
1159
+ fs.writeFileSync(OUT_BUDGET_JSON, _jsonDumpsIndent2(audit), 'utf-8');
1160
+ fs.writeFileSync(OUT_BUDGET_MD, render_budget_md(audit), 'utf-8');
1161
+ const over = audit.packs.filter((p) => p.over_budget);
1162
+ if (!args.quiet) {
1163
+ process.stdout.write(
1164
+ `✅ Budget audit: ${audit.total_commands} commands, ` +
1165
+ `${over.length} pack(s) over budget.\n`,
1166
+ );
1167
+ for (const p of over) {
1168
+ process.stdout.write(
1169
+ ` ⚠️ ${p.pack}: ${p.visible_count} visible / ` +
1170
+ `budget ${p.budget} (+${p.over_by})\n`,
1171
+ );
1172
+ }
1173
+ process.stdout.write(` JSON: ${_relPosix(OUT_BUDGET_JSON, REPO_ROOT)}\n`);
1174
+ process.stdout.write(` MD: ${_relPosix(OUT_BUDGET_MD, REPO_ROOT)}\n`);
1175
+ }
1176
+ return 0;
1177
+ }
1178
+
1179
+ const commands = collect(args.root);
1180
+ const pairs = find_overlap_pairs(commands);
1181
+
1182
+ fs.writeFileSync(
1183
+ OUT_JSON,
1184
+ _jsonDumpsIndent2({
1185
+ total: commands.length,
1186
+ thresholds: {
1187
+ overlap_cosine: OVERLAP_COSINE_THRESHOLD,
1188
+ low_signal_commit_count: LOW_SIGNAL_COMMIT_COUNT,
1189
+ low_signal_age_days: LOW_SIGNAL_AGE_DAYS,
1190
+ },
1191
+ commands: commands.map((c) => _asdict(c)),
1192
+ overlap_pairs: pairs as unknown as Json,
1193
+ }),
1194
+ 'utf-8',
1195
+ );
1196
+ fs.writeFileSync(OUT_MD, render_md(commands, pairs), 'utf-8');
1197
+
1198
+ if (!args.quiet) {
1199
+ process.stdout.write(`✅ Audited ${commands.length} commands.\n`);
1200
+ process.stdout.write(` JSON: ${_relPosix(OUT_JSON, REPO_ROOT)}\n`);
1201
+ process.stdout.write(` MD: ${_relPosix(OUT_MD, REPO_ROOT)}\n`);
1202
+ process.stdout.write(
1203
+ ` Overlap pairs (cosine ≥ ${OVERLAP_COSINE_THRESHOLD}): ${pairs.length}\n`,
1204
+ );
1205
+ let lowN = 0;
1206
+ for (const c of commands) {
1207
+ if (
1208
+ c.commit_count &&
1209
+ c.commit_count <= LOW_SIGNAL_COMMIT_COUNT &&
1210
+ (c.days_since_first_commit ?? 0) <= LOW_SIGNAL_AGE_DAYS
1211
+ ) {
1212
+ lowN += 1;
1213
+ }
1214
+ }
1215
+ process.stdout.write(
1216
+ ` Low-signal (≤${LOW_SIGNAL_COMMIT_COUNT} commits, ≤${LOW_SIGNAL_AGE_DAYS}d): ${lowN}\n`,
1217
+ );
1218
+ }
1219
+ return 0;
1220
+ }
1221
+
1222
+ const _isCliEntry =
1223
+ process.argv[1] !== undefined &&
1224
+ import.meta.url === pathToFileURL(path.resolve(process.argv[1])).href;
1225
+ if (_isCliEntry || process.argv[1] === _HERE) {
1226
+ process.exit(main());
1227
+ }