@event4u/agent-config 5.10.0 → 6.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 (2224) hide show
  1. package/.claude-plugin/marketplace.json +233 -229
  2. package/AGENTS.md +6 -6
  3. package/CHANGELOG.md +466 -0
  4. package/CONTRIBUTING.md +27 -15
  5. package/MIGRATION.md +102 -0
  6. package/README.md +48 -19
  7. package/dist/agent-src/README.md +64 -0
  8. package/dist/agent-src/commands/agent-handoff.md +124 -0
  9. package/dist/agent-src/commands/agent-status.md +140 -0
  10. package/dist/agent-src/commands/agents/audit.md +158 -0
  11. package/dist/agent-src/commands/agents/init.md +192 -0
  12. package/dist/agent-src/commands/agents/optimize.md +187 -0
  13. package/dist/agent-src/commands/agents/user/accept.md +123 -0
  14. package/dist/agent-src/commands/agents/user/init.md +163 -0
  15. package/dist/agent-src/commands/agents/user/review.md +113 -0
  16. package/dist/agent-src/commands/agents/user/show.md +115 -0
  17. package/dist/agent-src/commands/agents/user/update.md +103 -0
  18. package/dist/agent-src/commands/agents/user.md +71 -0
  19. package/dist/agent-src/commands/agents.md +66 -0
  20. package/dist/agent-src/commands/analytics/prune.md +71 -0
  21. package/dist/agent-src/commands/analytics/show.md +100 -0
  22. package/dist/agent-src/commands/analytics.md +77 -0
  23. package/dist/agent-src/commands/analyze-reference-repo.md +204 -0
  24. package/dist/agent-src/commands/bug-fix.md +193 -0
  25. package/dist/agent-src/commands/bug-investigate.md +186 -0
  26. package/dist/agent-src/commands/challenge-me/vision.md +354 -0
  27. package/dist/agent-src/commands/challenge-me/with-docs.md +339 -0
  28. package/dist/agent-src/commands/challenge-me.md +68 -0
  29. package/dist/agent-src/commands/chat-history/import.md +172 -0
  30. package/dist/agent-src/commands/chat-history/learn.md +184 -0
  31. package/dist/agent-src/commands/chat-history/show.md +113 -0
  32. package/dist/agent-src/commands/chat-history.md +60 -0
  33. package/dist/agent-src/commands/check-current-md.md +143 -0
  34. package/dist/agent-src/commands/commit/in-chunks.md +147 -0
  35. package/dist/agent-src/commands/commit.md +195 -0
  36. package/dist/agent-src/commands/condense.md +239 -0
  37. package/dist/agent-src/commands/context/create.md +181 -0
  38. package/dist/agent-src/commands/context/refactor.md +183 -0
  39. package/dist/agent-src/commands/context.md +52 -0
  40. package/dist/agent-src/commands/cost-report.md +131 -0
  41. package/dist/agent-src/commands/council/analysis.md +147 -0
  42. package/dist/agent-src/commands/council/debate.md +134 -0
  43. package/dist/agent-src/commands/council/default.md +289 -0
  44. package/dist/agent-src/commands/council/design.md +107 -0
  45. package/dist/agent-src/commands/council/optimize.md +123 -0
  46. package/dist/agent-src/commands/council/pr.md +130 -0
  47. package/dist/agent-src/commands/council.md +111 -0
  48. package/dist/agent-src/commands/e2e-heal.md +110 -0
  49. package/dist/agent-src/commands/e2e-plan.md +97 -0
  50. package/dist/agent-src/commands/estimate-ticket.md +92 -0
  51. package/dist/agent-src/commands/evals/agent-handoff.json +34 -0
  52. package/dist/agent-src/commands/evals/agent-status.json +34 -0
  53. package/dist/agent-src/commands/evals/agents.json +34 -0
  54. package/dist/agent-src/commands/evals/commit.json +34 -0
  55. package/dist/agent-src/commands/evals/condense.json +34 -0
  56. package/dist/agent-src/commands/evals/council.json +34 -0
  57. package/dist/agent-src/commands/evals/create-pr.json +34 -0
  58. package/dist/agent-src/commands/evals/estimate-ticket.json +34 -0
  59. package/dist/agent-src/commands/evals/feature.json +34 -0
  60. package/dist/agent-src/commands/evals/fix.json +34 -0
  61. package/dist/agent-src/commands/evals/implement-ticket.json +34 -0
  62. package/dist/agent-src/commands/evals/jira-ticket.json +34 -0
  63. package/dist/agent-src/commands/evals/judge.json +34 -0
  64. package/dist/agent-src/commands/evals/memory.json +34 -0
  65. package/dist/agent-src/commands/evals/mode.json +34 -0
  66. package/dist/agent-src/commands/evals/optimize.json +34 -0
  67. package/dist/agent-src/commands/evals/refine-ticket.json +34 -0
  68. package/dist/agent-src/commands/evals/review-changes.json +34 -0
  69. package/dist/agent-src/commands/evals/roadmap.json +34 -0
  70. package/dist/agent-src/commands/evals/work.json +34 -0
  71. package/dist/agent-src/commands/feature/dev.md +124 -0
  72. package/dist/agent-src/commands/feature/explore.md +191 -0
  73. package/dist/agent-src/commands/feature/plan.md +333 -0
  74. package/dist/agent-src/commands/feature/refactor.md +194 -0
  75. package/dist/agent-src/commands/feature/roadmap.md +222 -0
  76. package/dist/agent-src/commands/feature.md +63 -0
  77. package/dist/agent-src/commands/fix/ci.md +59 -0
  78. package/dist/agent-src/commands/fix/portability.md +108 -0
  79. package/dist/agent-src/commands/fix/pr-bot-comments.md +157 -0
  80. package/dist/agent-src/commands/fix/pr-comments.md +69 -0
  81. package/dist/agent-src/commands/fix/pr-developer-comments.md +163 -0
  82. package/dist/agent-src/commands/fix/refs.md +105 -0
  83. package/dist/agent-src/commands/fix/seeder.md +158 -0
  84. package/dist/agent-src/commands/fix.md +88 -0
  85. package/dist/agent-src/commands/ghostwriter/delete.md +124 -0
  86. package/dist/agent-src/commands/ghostwriter/fetch.md +190 -0
  87. package/dist/agent-src/commands/ghostwriter/list.md +108 -0
  88. package/dist/agent-src/commands/ghostwriter/show.md +119 -0
  89. package/dist/agent-src/commands/ghostwriter/write.md +165 -0
  90. package/dist/agent-src/commands/ghostwriter.md +101 -0
  91. package/dist/agent-src/commands/grill-me.md +45 -0
  92. package/dist/agent-src/commands/image/analyse.md +52 -0
  93. package/dist/agent-src/commands/image/create.md +54 -0
  94. package/dist/agent-src/commands/image/verify.md +49 -0
  95. package/dist/agent-src/commands/image.md +70 -0
  96. package/dist/agent-src/commands/implement-ticket.md +169 -0
  97. package/dist/agent-src/commands/jira-ticket.md +84 -0
  98. package/dist/agent-src/commands/judge/on-diff.md +124 -0
  99. package/dist/agent-src/commands/judge/solo.md +96 -0
  100. package/dist/agent-src/commands/judge/steps.md +94 -0
  101. package/dist/agent-src/commands/judge.md +86 -0
  102. package/dist/agent-src/commands/knowledge/cross-repo.md +72 -0
  103. package/dist/agent-src/commands/knowledge/forget.md +97 -0
  104. package/dist/agent-src/commands/knowledge/ingest.md +115 -0
  105. package/dist/agent-src/commands/knowledge/list.md +95 -0
  106. package/dist/agent-src/commands/knowledge.md +70 -0
  107. package/dist/agent-src/commands/memory/add.md +147 -0
  108. package/dist/agent-src/commands/memory/learn-low-impact.md +148 -0
  109. package/dist/agent-src/commands/memory/load.md +176 -0
  110. package/dist/agent-src/commands/memory/mine-session.md +157 -0
  111. package/dist/agent-src/commands/memory/promote.md +195 -0
  112. package/dist/agent-src/commands/memory/propose.md +122 -0
  113. package/dist/agent-src/commands/memory.md +61 -0
  114. package/dist/agent-src/commands/mode.md +133 -0
  115. package/dist/agent-src/commands/module/create.md +144 -0
  116. package/dist/agent-src/commands/module/explore.md +198 -0
  117. package/dist/agent-src/commands/module.md +52 -0
  118. package/dist/agent-src/commands/optimize/agents-dir.md +119 -0
  119. package/dist/agent-src/commands/optimize/augmentignore.md +312 -0
  120. package/dist/agent-src/commands/optimize/rtk.md +161 -0
  121. package/dist/agent-src/commands/optimize/skills.md +132 -0
  122. package/dist/agent-src/commands/optimize-prompt.md +67 -0
  123. package/dist/agent-src/commands/optimize.md +61 -0
  124. package/dist/agent-src/commands/orchestrate.md +129 -0
  125. package/dist/agent-src/commands/override/create.md +108 -0
  126. package/dist/agent-src/commands/override/manage.md +107 -0
  127. package/dist/agent-src/commands/override.md +72 -0
  128. package/dist/agent-src/commands/package-reset.md +163 -0
  129. package/dist/agent-src/commands/package-test.md +239 -0
  130. package/dist/agent-src/commands/post-as/ghostwriter.md +72 -0
  131. package/dist/agent-src/commands/post-as/me.md +130 -0
  132. package/dist/agent-src/commands/post-as.md +63 -0
  133. package/dist/agent-src/commands/pr/create/description-only.md +161 -0
  134. package/dist/agent-src/commands/pr/create.md +254 -0
  135. package/dist/agent-src/commands/prediction-pool.md +235 -0
  136. package/dist/agent-src/commands/prepare-for-review.md +107 -0
  137. package/dist/agent-src/commands/profile/activate.md +82 -0
  138. package/dist/agent-src/commands/profile/deactivate.md +69 -0
  139. package/dist/agent-src/commands/profile/show.md +80 -0
  140. package/dist/agent-src/commands/profile.md +69 -0
  141. package/dist/agent-src/commands/project-analyze.md +321 -0
  142. package/dist/agent-src/commands/project-health.md +106 -0
  143. package/dist/agent-src/commands/quality-fix.md +145 -0
  144. package/dist/agent-src/commands/refine-ticket.md +98 -0
  145. package/dist/agent-src/commands/research/deep.md +155 -0
  146. package/dist/agent-src/commands/research/report.md +140 -0
  147. package/dist/agent-src/commands/research.md +179 -0
  148. package/dist/agent-src/commands/review-changes.md +213 -0
  149. package/dist/agent-src/commands/review-routing.md +125 -0
  150. package/dist/agent-src/commands/roadmap/ai-council.md +189 -0
  151. package/dist/agent-src/commands/roadmap/create.md +214 -0
  152. package/dist/agent-src/commands/roadmap/process-full.md +109 -0
  153. package/dist/agent-src/commands/roadmap/process-phase.md +75 -0
  154. package/dist/agent-src/commands/roadmap/process-step.md +63 -0
  155. package/dist/agent-src/commands/roadmap.md +83 -0
  156. package/dist/agent-src/commands/rule-compliance-audit.md +156 -0
  157. package/dist/agent-src/commands/set-cost-profile.md +118 -0
  158. package/dist/agent-src/commands/skill/preview.md +68 -0
  159. package/dist/agent-src/commands/skill.md +49 -0
  160. package/dist/agent-src/commands/skills/discover.md +77 -0
  161. package/dist/agent-src/commands/skills.md +57 -0
  162. package/dist/agent-src/commands/sync-agent-settings.md +141 -0
  163. package/dist/agent-src/commands/sync-gitignore/fix.md +149 -0
  164. package/dist/agent-src/commands/sync-gitignore.md +140 -0
  165. package/dist/agent-src/commands/tests/create.md +91 -0
  166. package/dist/agent-src/commands/tests/execute.md +85 -0
  167. package/dist/agent-src/commands/tests.md +76 -0
  168. package/dist/agent-src/commands/threat-model.md +126 -0
  169. package/dist/agent-src/commands/update-form-request-messages.md +200 -0
  170. package/dist/agent-src/commands/upstream-contribute.md +182 -0
  171. package/dist/agent-src/commands/video/from-script.md +158 -0
  172. package/dist/agent-src/commands/video/from-song.md +490 -0
  173. package/dist/agent-src/commands/video/scene.md +130 -0
  174. package/dist/agent-src/commands/video/stitch.md +88 -0
  175. package/dist/agent-src/commands/video/storyboard.md +100 -0
  176. package/dist/agent-src/commands/video.md +74 -0
  177. package/dist/agent-src/commands/work.md +175 -0
  178. package/dist/agent-src/contexts/authority/commit-mechanics.md +93 -0
  179. package/dist/agent-src/contexts/communication/rules-auto/source-of-truth-mechanics.md +99 -0
  180. package/dist/agent-src/contexts/contracts/artifact-engagement-flow.md +259 -0
  181. package/dist/agent-src/contexts/contracts/consumer-agents-md-guide.md +127 -0
  182. package/dist/agent-src/contexts/contracts/emergency-triage-block.md +53 -0
  183. package/dist/agent-src/contexts/execution/non-interactive-contract.md +132 -0
  184. package/dist/agent-src/contexts/execution/toolchain-resolver.md +113 -0
  185. package/dist/agent-src/personas/README.md +114 -0
  186. package/dist/agent-src/profiles/agency.yml +36 -0
  187. package/dist/agent-src/profiles/content_creator.yml +34 -0
  188. package/dist/agent-src/profiles/developer.yml +31 -0
  189. package/dist/agent-src/profiles/finance.yml +30 -0
  190. package/dist/agent-src/profiles/founder.yml +33 -0
  191. package/dist/agent-src/profiles/ops.yml +33 -0
  192. package/dist/agent-src/rules/ask-when-uncertain.md +70 -0
  193. package/dist/agent-src/rules/augment-edit-discipline.md +31 -0
  194. package/dist/agent-src/rules/commit-policy.md +59 -0
  195. package/dist/agent-src/rules/direct-answers.md +64 -0
  196. package/dist/agent-src/rules/domain-adoption-policy.md +160 -0
  197. package/dist/agent-src/rules/language-and-tone.md +64 -0
  198. package/dist/agent-src/rules/linked-projects-onboarding-gate.md +38 -0
  199. package/dist/agent-src/rules/media-governance-routing.md +85 -0
  200. package/dist/agent-src/rules/missing-tool-handling.md +22 -0
  201. package/dist/agent-src/rules/model-recommendation.md +25 -0
  202. package/dist/agent-src/rules/no-attribution-footers.md +57 -0
  203. package/dist/agent-src/rules/no-cheap-questions.md +75 -0
  204. package/dist/agent-src/rules/no-pr-progress-comments.md +109 -0
  205. package/dist/agent-src/rules/no-roadmap-references.md +141 -0
  206. package/dist/agent-src/rules/non-destructive-by-default.md +58 -0
  207. package/dist/agent-src/rules/persona-governance.md +93 -0
  208. package/dist/agent-src/rules/preservation-guard.md +97 -0
  209. package/dist/agent-src/rules/provider-lifecycle-discipline.md +78 -0
  210. package/dist/agent-src/rules/roadmap-progress-sync.md +114 -0
  211. package/dist/agent-src/rules/scope-control.md +68 -0
  212. package/dist/agent-src/rules/source-of-truth.md +80 -0
  213. package/dist/agent-src/rules/user-interrupt-priority.md +49 -0
  214. package/dist/agent-src/rules/verify-before-complete.md +78 -0
  215. package/dist/agent-src/scripts/update_roadmap_progress.py +537 -0
  216. package/dist/agent-src/skills/accessibility-auditor/SKILL.md +147 -0
  217. package/dist/agent-src/skills/accessibility-auditor/data/aria-patterns.csv +13 -0
  218. package/dist/agent-src/skills/accessibility-auditor/data/manifest.json +34 -0
  219. package/dist/agent-src/skills/agents-md-thin-root/SKILL.md +143 -0
  220. package/dist/agent-src/skills/api-design/SKILL.md +120 -0
  221. package/dist/agent-src/skills/api-design/data/api-patterns.csv +13 -0
  222. package/dist/agent-src/skills/api-design/data/manifest.json +34 -0
  223. package/dist/agent-src/skills/api-endpoint/SKILL.md +100 -0
  224. package/dist/agent-src/skills/authz-review/SKILL.md +188 -0
  225. package/dist/agent-src/skills/blade-ui/SKILL.md +135 -0
  226. package/dist/agent-src/skills/character-consistency/SKILL.md +192 -0
  227. package/dist/agent-src/skills/check-refs/SKILL.md +96 -0
  228. package/dist/agent-src/skills/code-review/SKILL.md +224 -0
  229. package/dist/agent-src/skills/command-writing/SKILL.md +301 -0
  230. package/dist/agent-src/skills/condense-memory/SKILL.md +123 -0
  231. package/dist/agent-src/skills/context-document/SKILL.md +160 -0
  232. package/dist/agent-src/skills/corpus-grounding/SKILL.md +205 -0
  233. package/dist/agent-src/skills/corpus-grounding/evals/triggers.json +16 -0
  234. package/dist/agent-src/skills/corpus-grounding/scripts/bm25_search.py +212 -0
  235. package/dist/agent-src/skills/corpus-grounding/scripts/decision_engine.py +438 -0
  236. package/dist/agent-src/skills/corpus-grounding/scripts/ground.py +166 -0
  237. package/dist/agent-src/skills/corpus-grounding/scripts/schema_validator.py +160 -0
  238. package/dist/agent-src/skills/dashboard-design/SKILL.md +129 -0
  239. package/dist/agent-src/skills/database/SKILL.md +111 -0
  240. package/dist/agent-src/skills/database/data/manifest.json +35 -0
  241. package/dist/agent-src/skills/database/data/query-tuning.csv +13 -0
  242. package/dist/agent-src/skills/deep-reading-analyst/SKILL.md +188 -0
  243. package/dist/agent-src/skills/design-intelligence/ATTRIBUTION.md +54 -0
  244. package/dist/agent-src/skills/design-intelligence/LICENSE.apache-2.0.txt +202 -0
  245. package/dist/agent-src/skills/design-intelligence/SKILL.md +177 -0
  246. package/dist/agent-src/skills/design-intelligence/data/app-interface.csv +31 -0
  247. package/dist/agent-src/skills/design-intelligence/data/charts.csv +26 -0
  248. package/dist/agent-src/skills/design-intelligence/data/colors.csv +162 -0
  249. package/dist/agent-src/skills/design-intelligence/data/design-languages/academia.txt +120 -0
  250. package/dist/agent-src/skills/design-intelligence/data/design-languages/bauhaus.txt +140 -0
  251. package/dist/agent-src/skills/design-intelligence/data/design-languages/bold-typography.txt +107 -0
  252. package/dist/agent-src/skills/design-intelligence/data/design-languages/claymorphism.txt +76 -0
  253. package/dist/agent-src/skills/design-intelligence/data/design-languages/cyberpunk.txt +157 -0
  254. package/dist/agent-src/skills/design-intelligence/data/design-languages/enterprise.txt +89 -0
  255. package/dist/agent-src/skills/design-intelligence/data/design-languages/flat-design.txt +66 -0
  256. package/dist/agent-src/skills/design-intelligence/data/design-languages/kinetic.txt +98 -0
  257. package/dist/agent-src/skills/design-intelligence/data/design-languages/material-design.txt +133 -0
  258. package/dist/agent-src/skills/design-intelligence/data/design-languages/modern-dark.txt +123 -0
  259. package/dist/agent-src/skills/design-intelligence/data/design-languages/monochrome.txt +216 -0
  260. package/dist/agent-src/skills/design-intelligence/data/design-languages/neo-brutalism.txt +65 -0
  261. package/dist/agent-src/skills/design-intelligence/data/design-languages/neumorphism.txt +75 -0
  262. package/dist/agent-src/skills/design-intelligence/data/design-languages/saas.txt +109 -0
  263. package/dist/agent-src/skills/design-intelligence/data/design-languages/sketch.txt +83 -0
  264. package/dist/agent-src/skills/design-intelligence/data/design-languages/terminal.txt +80 -0
  265. package/dist/agent-src/skills/design-intelligence/data/icons.csv +106 -0
  266. package/dist/agent-src/skills/design-intelligence/data/landing.csv +35 -0
  267. package/dist/agent-src/skills/design-intelligence/data/manifest.json +500 -0
  268. package/dist/agent-src/skills/design-intelligence/data/products.csv +162 -0
  269. package/dist/agent-src/skills/design-intelligence/data/react-performance.csv +45 -0
  270. package/dist/agent-src/skills/design-intelligence/data/stacks/angular.csv +51 -0
  271. package/dist/agent-src/skills/design-intelligence/data/stacks/astro.csv +54 -0
  272. package/dist/agent-src/skills/design-intelligence/data/stacks/flutter.csv +53 -0
  273. package/dist/agent-src/skills/design-intelligence/data/stacks/html-tailwind.csv +56 -0
  274. package/dist/agent-src/skills/design-intelligence/data/stacks/jetpack-compose.csv +53 -0
  275. package/dist/agent-src/skills/design-intelligence/data/stacks/laravel.csv +51 -0
  276. package/dist/agent-src/skills/design-intelligence/data/stacks/nextjs.csv +53 -0
  277. package/dist/agent-src/skills/design-intelligence/data/stacks/nuxt-ui.csv +51 -0
  278. package/dist/agent-src/skills/design-intelligence/data/stacks/nuxtjs.csv +59 -0
  279. package/dist/agent-src/skills/design-intelligence/data/stacks/react-native.csv +52 -0
  280. package/dist/agent-src/skills/design-intelligence/data/stacks/react.csv +54 -0
  281. package/dist/agent-src/skills/design-intelligence/data/stacks/shadcn.csv +61 -0
  282. package/dist/agent-src/skills/design-intelligence/data/stacks/svelte.csv +54 -0
  283. package/dist/agent-src/skills/design-intelligence/data/stacks/swiftui.csv +51 -0
  284. package/dist/agent-src/skills/design-intelligence/data/stacks/threejs.csv +54 -0
  285. package/dist/agent-src/skills/design-intelligence/data/stacks/vue.csv +50 -0
  286. package/dist/agent-src/skills/design-intelligence/data/styles.csv +85 -0
  287. package/dist/agent-src/skills/design-intelligence/data/typography.csv +74 -0
  288. package/dist/agent-src/skills/design-intelligence/data/ui-reasoning.csv +162 -0
  289. package/dist/agent-src/skills/design-intelligence/data/ux-guidelines.csv +100 -0
  290. package/dist/agent-src/skills/design-intelligence/evals/triggers.json +16 -0
  291. package/dist/agent-src/skills/design-intelligence/references/design-languages.md +45 -0
  292. package/dist/agent-src/skills/design-intelligence/references/design-rules-checklist.md +268 -0
  293. package/dist/agent-src/skills/design-review/SKILL.md +233 -0
  294. package/dist/agent-src/skills/design-tokens/SKILL.md +135 -0
  295. package/dist/agent-src/skills/design-tokens/evals/triggers.json +16 -0
  296. package/dist/agent-src/skills/design-tokens/scripts/tokens.py +296 -0
  297. package/dist/agent-src/skills/design-tokens/templates/design-tokens-starter.json +143 -0
  298. package/dist/agent-src/skills/existing-ui-audit/SKILL.md +217 -0
  299. package/dist/agent-src/skills/fe-design/SKILL.md +265 -0
  300. package/dist/agent-src/skills/feature-planning/SKILL.md +271 -0
  301. package/dist/agent-src/skills/flux/SKILL.md +126 -0
  302. package/dist/agent-src/skills/jira-integration/SKILL.md +187 -0
  303. package/dist/agent-src/skills/lint-skills/SKILL.md +95 -0
  304. package/dist/agent-src/skills/livewire/SKILL.md +139 -0
  305. package/dist/agent-src/skills/md-language-check/SKILL.md +130 -0
  306. package/dist/agent-src/skills/merge-conflicts/SKILL.md +195 -0
  307. package/dist/agent-src/skills/motion-choreographer/SKILL.md +197 -0
  308. package/dist/agent-src/skills/persona-writing/SKILL.md +158 -0
  309. package/dist/agent-src/skills/prompt-validator/SKILL.md +167 -0
  310. package/dist/agent-src/skills/prompt-validator/evals/triggers.json +16 -0
  311. package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +235 -0
  312. package/dist/agent-src/skills/react-shadcn-ui/scripts/shadcn_add.py +299 -0
  313. package/dist/agent-src/skills/readme-reviewer/SKILL.md +242 -0
  314. package/dist/agent-src/skills/readme-writing/SKILL.md +240 -0
  315. package/dist/agent-src/skills/readme-writing-package/SKILL.md +350 -0
  316. package/dist/agent-src/skills/roadmap-management/SKILL.md +461 -0
  317. package/dist/agent-src/skills/rule-refactor/SKILL.md +149 -0
  318. package/dist/agent-src/skills/rule-writing/SKILL.md +277 -0
  319. package/dist/agent-src/skills/scene-expander/SKILL.md +158 -0
  320. package/dist/agent-src/skills/scene-expander/scene-blueprint.schema.yaml +114 -0
  321. package/dist/agent-src/skills/script-writing/SKILL.md +231 -0
  322. package/dist/agent-src/skills/sentry-integration/SKILL.md +175 -0
  323. package/dist/agent-src/skills/song-to-script/SKILL.md +303 -0
  324. package/dist/agent-src/skills/sql-writing/SKILL.md +85 -0
  325. package/dist/agent-src/skills/tailwind-engineer/SKILL.md +154 -0
  326. package/dist/agent-src/skills/tailwind-engineer/scripts/tailwind_config_gen.py +463 -0
  327. package/dist/agent-src/skills/technical-specification/SKILL.md +251 -0
  328. package/dist/agent-src/skills/threat-modeling/SKILL.md +207 -0
  329. package/dist/agent-src/skills/threat-modeling/data/manifest.json +83 -0
  330. package/dist/agent-src/skills/threat-modeling/data/reasoning.csv +10 -0
  331. package/dist/agent-src/skills/threat-modeling/data/surfaces.csv +10 -0
  332. package/dist/agent-src/skills/threat-modeling/data/threats.csv +16 -0
  333. package/dist/agent-src/skills/upstream-contribute/SKILL.md +261 -0
  334. package/dist/agent-src/templates/AGENTS.md +34 -0
  335. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +286 -0
  336. package/dist/agent-src/templates/agents/proposal.example.md +155 -0
  337. package/dist/agent-src/templates/command.md +105 -0
  338. package/dist/agent-src/templates/copilot-instructions.md +167 -0
  339. package/dist/agent-src/templates/github-workflows/proposal-drift.yml +118 -0
  340. package/dist/agent-src/templates/hooks/pre-commit-frontmatter +66 -0
  341. package/dist/agent-src/templates/hooks/pre-commit-roadmap-progress +99 -0
  342. package/dist/agent-src/templates/persona.md +99 -0
  343. package/dist/agent-src/templates/rule.md +135 -0
  344. package/dist/agent-src/templates/scripts/work_engine/directives/ui/polish.py +513 -0
  345. package/dist/agent-src/templates/scripts/work_engine/directives/ui/review.py +471 -0
  346. package/dist/agent-src/templates/scripts/work_engine/orchestration.py +193 -0
  347. package/dist/agent-src/templates/scripts/work_engine/stack/runner.py +481 -0
  348. package/dist/agent-src/user-types/README.md +124 -0
  349. package/dist/cli/agent-config.js +51 -3
  350. package/dist/cli/agent-config.js.map +1 -1
  351. package/dist/cli/commands/commands.js +152 -0
  352. package/dist/cli/commands/commands.js.map +1 -0
  353. package/dist/cli/commands/mcpServer.js +54 -0
  354. package/dist/cli/commands/mcpServer.js.map +1 -0
  355. package/dist/cli/commands/packs.js +1 -1
  356. package/dist/cli/commands/packs.js.map +1 -1
  357. package/dist/cli/commands/profiles.js +77 -0
  358. package/dist/cli/commands/profiles.js.map +1 -0
  359. package/dist/cli/commands/profiles.test.js +88 -0
  360. package/dist/cli/commands/profiles.test.js.map +1 -0
  361. package/dist/cli/commands/workspaces.js +1 -1
  362. package/dist/cli/commands/workspaces.js.map +1 -1
  363. package/dist/cli/discovery/loadManifest.js.map +1 -1
  364. package/dist/cli/mcp/content.js +127 -0
  365. package/dist/cli/mcp/content.js.map +1 -0
  366. package/dist/cli/mcp/content.test.js +54 -0
  367. package/dist/cli/mcp/content.test.js.map +1 -0
  368. package/dist/cli/mcp/dispatch.js +167 -0
  369. package/dist/cli/mcp/dispatch.js.map +1 -0
  370. package/dist/cli/mcp/dispatch.test.js +108 -0
  371. package/dist/cli/mcp/dispatch.test.js.map +1 -0
  372. package/dist/cli/mcp/stdio.js +69 -0
  373. package/dist/cli/mcp/stdio.js.map +1 -0
  374. package/dist/cli/paths.js +8 -2
  375. package/dist/cli/paths.js.map +1 -1
  376. package/dist/cli/registry.js +2 -0
  377. package/dist/cli/registry.js.map +1 -1
  378. package/dist/discovery/deprecation-report.md +1 -1
  379. package/dist/discovery/discovery-manifest.json +2885 -2056
  380. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  381. package/dist/discovery/discovery-manifest.summary.md +8 -6
  382. package/dist/discovery/orphan-report.md +1 -1
  383. package/dist/discovery/packs.json +689 -466
  384. package/dist/discovery/trust-report.md +5 -5
  385. package/dist/discovery/workspaces.json +495 -477
  386. package/dist/install/detect.js +2 -2
  387. package/dist/install/detect.js.map +1 -1
  388. package/dist/install/wizard-plan.js +18 -18
  389. package/dist/install/wizard-plan.js.map +1 -1
  390. package/dist/mcp/registry-manifest.json +4 -4
  391. package/dist/router.json +1 -1
  392. package/dist/server/io/substituteTemplate.js +5 -5
  393. package/dist/server/io/substituteTemplate.js.map +1 -1
  394. package/dist/server/routes/settings.js +2 -2
  395. package/dist/server/routes/settings.js.map +1 -1
  396. package/dist/server/routes/userMd.js +1 -1
  397. package/dist/server/routes/userMd.js.map +1 -1
  398. package/dist/server/routes/wizard.js +27 -13
  399. package/dist/server/routes/wizard.js.map +1 -1
  400. package/dist/server/routes/workspace.js +556 -117
  401. package/dist/server/routes/workspace.js.map +1 -1
  402. package/dist/server/schemas/settings.js +7 -2
  403. package/dist/server/schemas/settings.js.map +1 -1
  404. package/dist/shared/userMd/formAdapter.js +2 -2
  405. package/dist/ui/assets/index-CoQo90sz.js +40 -0
  406. package/dist/ui/assets/index-CoQo90sz.js.map +1 -0
  407. package/dist/ui/index.html +1 -1
  408. package/docs/DISTRIBUTION_CHECKLIST.md +2 -2
  409. package/docs/adrs/cost/0001-hard-stop-hook.md +5 -5
  410. package/docs/adrs/memory/0001-consumer-side-snapshot.md +4 -4
  411. package/docs/adrs/router/0001-three-tier-routing.md +3 -3
  412. package/docs/adrs/schema/0001-json-schema-frontmatter.md +6 -6
  413. package/docs/adrs/smoke/0001-per-tier-smoke-scripts.md +6 -6
  414. package/docs/architecture/augment-projection.md +10 -10
  415. package/docs/architecture/claude-bundle.md +5 -5
  416. package/docs/architecture/current-onboard-baseline.md +4 -4
  417. package/docs/architecture/current-safety-behavior.md +16 -16
  418. package/docs/architecture/multi-tool-projection.md +8 -8
  419. package/docs/architecture/source-projection.md +11 -11
  420. package/docs/architecture.md +11 -11
  421. package/docs/archive/CHANGELOG-pre-2.17.0.md +1 -1
  422. package/docs/archive/CHANGELOG-pre-2.2.0.md +7 -7
  423. package/docs/archive/CHANGELOG-pre-2.20.0.md +1 -1
  424. package/docs/archive/CHANGELOG-pre-2.25.0.md +1 -1
  425. package/docs/archive/CHANGELOG-pre-2.7.0.md +1 -1
  426. package/docs/archive/CHANGELOG-pre-3.0.0.md +1 -1
  427. package/docs/archive/CHANGELOG-pre-3.1.0.md +1 -1
  428. package/docs/archive/CHANGELOG-pre-3.2.0.md +1 -1
  429. package/docs/archive/CHANGELOG-pre-4.5.0.md +1 -1
  430. package/docs/archive/CHANGELOG-pre-5.4.0.md +1 -1
  431. package/docs/archive/CHANGELOG-pre-5.9.0.md +1 -1
  432. package/docs/artefact-census.md +71 -0
  433. package/docs/case-studies/frontend-design-vs-ui-ux-pro-max.md +86 -0
  434. package/docs/catalog.md +463 -454
  435. package/docs/command-flows.md +232 -0
  436. package/docs/contracts/CHANGELOG-conventions.md +2 -2
  437. package/docs/contracts/STABILITY.md +1 -1
  438. package/docs/contracts/adoption-signal-floor.md +2 -2
  439. package/docs/contracts/adr-architectural-consensus-mechanism.md +1 -1
  440. package/docs/contracts/adr-chat-history-split.md +1 -1
  441. package/docs/contracts/adr-gtm-context-spine.md +2 -2
  442. package/docs/contracts/adr-install-user-type-axis.md +3 -3
  443. package/docs/contracts/adr-layout.md +3 -3
  444. package/docs/contracts/adr-mcp-runtime.md +8 -8
  445. package/docs/contracts/adr-prompt-driven-execution.md +1 -1
  446. package/docs/contracts/adr-settings-sync-engine.md +3 -3
  447. package/docs/contracts/adr-user-types-axis.md +2 -2
  448. package/docs/contracts/adr-wing4-context-spine.md +2 -2
  449. package/docs/contracts/agent-user-schema.md +6 -6
  450. package/docs/contracts/agents-md-tech-stack.md +2 -2
  451. package/docs/contracts/ai-council-config.md +4 -4
  452. package/docs/contracts/at-rest-encryption.md +48 -7
  453. package/docs/contracts/audit-log-v1.md +3 -3
  454. package/docs/contracts/benchmark-ab-contract.md +6 -1
  455. package/docs/contracts/benchmark-corpus-spec.md +2 -2
  456. package/docs/contracts/benchmark-report-schema.md +4 -4
  457. package/docs/contracts/branch-protection-policy.md +5 -0
  458. package/docs/contracts/capability-packs.md +217 -0
  459. package/docs/contracts/ci-cost-budget.md +6 -1
  460. package/docs/contracts/ci-green-floor.md +1 -1
  461. package/docs/contracts/command-category-governance.md +79 -0
  462. package/docs/contracts/command-clusters.md +42 -4
  463. package/docs/contracts/config-presets.md +1 -1
  464. package/docs/contracts/cost-dashboard.md +1 -1
  465. package/docs/contracts/cost-profile-defaults.md +2 -2
  466. package/docs/contracts/cost-summary-schema.md +4 -4
  467. package/docs/contracts/creative-pack-boundary.md +58 -0
  468. package/docs/contracts/daily-workspace.md +8 -3
  469. package/docs/contracts/discovery-manifest.md +5 -5
  470. package/docs/contracts/discovery-manifest.schema.json +14 -3
  471. package/docs/contracts/evidence-based-pruning.md +101 -0
  472. package/docs/contracts/explain-modes.md +37 -0
  473. package/docs/contracts/file-ownership-matrix.json +1804 -4620
  474. package/docs/contracts/frontmatter-contract.md +6 -6
  475. package/docs/contracts/ghostwriter-schema.md +1 -1
  476. package/docs/contracts/gui-wizard.md +1 -1
  477. package/docs/contracts/harness-expectations.md +5 -0
  478. package/docs/contracts/hook-architecture-v1.md +1 -1
  479. package/docs/contracts/host-agent-protocol.md +19 -1
  480. package/docs/contracts/install-scopes.md +7 -2
  481. package/docs/contracts/installed-tools-lockfile.md +2 -2
  482. package/docs/contracts/linear-ai-rules-inclusion.md +2 -2
  483. package/docs/contracts/linear-ai-three-layers.md +1 -1
  484. package/docs/contracts/linter-structural-model.md +2 -2
  485. package/docs/contracts/load-context-budget-model.md +1 -1
  486. package/docs/contracts/load-context-schema.md +1 -1
  487. package/docs/contracts/local-analytics.md +9 -1
  488. package/docs/contracts/low-impact-corpus-format.md +1 -1
  489. package/docs/contracts/mcp-cloud-scope.md +6 -6
  490. package/docs/contracts/mcp-phase-1-scope.md +5 -5
  491. package/docs/contracts/measurement-baseline.md +5 -5
  492. package/docs/contracts/migrate-command.md +44 -8
  493. package/docs/contracts/multi-tool-projection-fidelity.md +3 -3
  494. package/docs/contracts/namespace.md +1 -1
  495. package/docs/contracts/orchestration-dsl-v1.md +2 -2
  496. package/docs/contracts/package-self-orientation.md +17 -17
  497. package/docs/contracts/pilot/language-and-tone.md +1 -1
  498. package/docs/contracts/plain-language-surface.md +2 -2
  499. package/docs/contracts/profile-system.md +26 -1
  500. package/docs/contracts/provider-lifecycle.md +3 -3
  501. package/docs/contracts/release-pr-gating.md +5 -0
  502. package/docs/contracts/release-trunk-sync.md +3 -3
  503. package/docs/contracts/review-lens-schema.md +59 -0
  504. package/docs/contracts/role-experience.md +10 -6
  505. package/docs/contracts/router-blending.md +2 -2
  506. package/docs/contracts/rule-classification.md +1 -1
  507. package/docs/contracts/rule-router.md +3 -3
  508. package/docs/contracts/safety-model.md +2 -2
  509. package/docs/contracts/session-profile-overlay.md +40 -3
  510. package/docs/contracts/settings-api.md +3 -3
  511. package/docs/contracts/settings-sync-yaml-subset.md +4 -4
  512. package/docs/contracts/skill-bundled-assets.md +62 -0
  513. package/docs/contracts/skill-discovery.md +1 -1
  514. package/docs/contracts/skill-distribution-channels.md +6 -1
  515. package/docs/contracts/skill-dry-run.md +2 -2
  516. package/docs/contracts/skill-family-map.yml +915 -0
  517. package/docs/contracts/smoke-contracts.md +4 -4
  518. package/docs/contracts/telegraph-telemetry.md +2 -2
  519. package/docs/contracts/trust-and-safety.md +3 -3
  520. package/docs/contracts/universal-skills.md +16 -16
  521. package/docs/contracts/value-dashboard-spec.md +21 -21
  522. package/docs/contracts/value-report-schema.md +8 -8
  523. package/docs/customization.md +8 -8
  524. package/docs/decisions/ADR-006-skill-tools-python-pilot.md +2 -2
  525. package/docs/decisions/ADR-007-agent-discovery-scopes.md +1 -1
  526. package/docs/decisions/ADR-008-installed-tools-manifest.md +1 -1
  527. package/docs/decisions/ADR-009-event4u-namespace.md +3 -3
  528. package/docs/decisions/ADR-013-discovery-frontmatter-contract.md +27 -8
  529. package/docs/decisions/ADR-015-discovery-manifest-contract.md +5 -5
  530. package/docs/decisions/ADR-017-monorepo-physical-layout.md +5 -5
  531. package/docs/decisions/ADR-018-trust-and-safety-layer.md +2 -2
  532. package/docs/decisions/ADR-019-router-json-dist-location.md +2 -2
  533. package/docs/decisions/ADR-020-global-only-consumer-scope.md +27 -2
  534. package/docs/decisions/ADR-022-daily-workspace-decomposition.md +2 -2
  535. package/docs/decisions/ADR-024-workspace-v0-feature-floor.md +1 -1
  536. package/docs/decisions/ADR-028-root-layout.md +1 -1
  537. package/docs/decisions/ADR-030-claude-code-command-projection.md +2 -2
  538. package/docs/decisions/ADR-038-canonical-settings-path.md +20 -0
  539. package/docs/decisions/ADR-041-controlled-command-verbs.md +133 -0
  540. package/docs/decisions/ADR-042-runtime-resolver-decision-gate.md +113 -0
  541. package/docs/decisions/ADR-043-monorepo-collapse-to-src-domains.md +128 -0
  542. package/docs/decisions/ADR-044-command-naming-scheme-hyphenated.md +250 -0
  543. package/docs/decisions/ADR-045-src-source-layout-and-profiles-as-views.md +111 -0
  544. package/docs/decisions/ADR-046-thin-command-principle.md +93 -0
  545. package/docs/decisions/ADR-047-framework-neutral-stack-adaptive-commands.md +94 -0
  546. package/docs/decisions/ADR-048-command-justification-rule.md +106 -0
  547. package/docs/decisions/ADR-049-configuration-trust-boundary.md +114 -0
  548. package/docs/decisions/ADR-050-workspace-vs-package-root-boundary.md +121 -0
  549. package/docs/decisions/ADR-051-uncondensed-source-container-relocation.md +114 -0
  550. package/docs/decisions/ADR-052-packages-removal-and-pack-home-migration.md +86 -0
  551. package/docs/decisions/ADR-053-agents-namespace-dual-role-resolution.md +132 -0
  552. package/docs/decisions/ADR-054-rule-adherence-decay-triggered-restate.md +143 -0
  553. package/docs/decisions/ADR-055-flow-layer-data-model.md +235 -0
  554. package/docs/decisions/ADR-056-unvalidated-video-adapters-disposition.md +124 -0
  555. package/docs/decisions/ADR-057-consolidation-evidence-gate-outcomes.md +135 -0
  556. package/docs/decisions/ADR-058-condensed-output-relocation-to-dist.md +94 -0
  557. package/docs/decisions/ADR-059-render-resume-filesystem-as-state.md +161 -0
  558. package/docs/decisions/ADR-060-comfyui-sandbox-model.md +154 -0
  559. package/docs/decisions/ADR-061-corpus-grounding-layer.md +170 -0
  560. package/docs/decisions/ADR-062-encrypt-at-rest-store-architecture.md +121 -0
  561. package/docs/decisions/ADR-063-append-jsonl-encryption-deferred.md +83 -0
  562. package/docs/decisions/ADR-064-append-jsonl-per-record-encryption.md +113 -0
  563. package/docs/decisions/ADR-065-tier3-inbox-handoff-v0.md +86 -0
  564. package/docs/decisions/ADR-066-skill-body-prerendering.md +93 -0
  565. package/docs/decisions/ADR-067-glama-registry-listing.md +259 -0
  566. package/docs/decisions/ADR-068-host-tier-detection.md +90 -0
  567. package/docs/decisions/ADR-069-prompt-renderer.md +97 -0
  568. package/docs/decisions/ADR-070-tier1-drive-loop.md +94 -0
  569. package/docs/decisions/ADR-071-launch-drive-integration.md +95 -0
  570. package/docs/decisions/ADR-072-codex-gemini-drive-configs.md +90 -0
  571. package/docs/decisions/ADR-073-drive-health-kill-switch.md +81 -0
  572. package/docs/decisions/ADR-074-drive-kill-switch-auto-recovery.md +84 -0
  573. package/docs/decisions/ADR-075-workspace-gui-drive.md +83 -0
  574. package/docs/decisions/ADR-076-workspace-multi-turn.md +92 -0
  575. package/docs/decisions/ADR-077-workspace-followup-gui.md +70 -0
  576. package/docs/decisions/ADR-078-drive-health-panel.md +70 -0
  577. package/docs/decisions/ADR-079-workspace-host-picker.md +81 -0
  578. package/docs/decisions/ADR-080-host-session-expired-410.md +92 -0
  579. package/docs/decisions/ADR-081-drive-health-reset-and-410-affordance.md +71 -0
  580. package/docs/decisions/ADR-082-410-one-click-relaunch.md +58 -0
  581. package/docs/decisions/ADR-083-session-thread-and-arbitrary-continuation.md +85 -0
  582. package/docs/decisions/ADR-084-drive-health-refresh-on-drive.md +52 -0
  583. package/docs/decisions/ADR-085-mcp-stdio-end-user-distribution-shape.md +158 -0
  584. package/docs/decisions/ADR-086-read-only-cross-agent-mcp-discovery-helper.md +171 -0
  585. package/docs/decisions/ADR-087-installer-e2e-test-strategy.md +111 -0
  586. package/docs/decisions/ADR-088-no-external-runtime-federation.md +145 -0
  587. package/docs/decisions/ADR-089-lean-local-plugin-install.md +111 -0
  588. package/docs/decisions/INDEX.md +49 -0
  589. package/docs/deploy/small-team-recipe.md +1 -1
  590. package/docs/deploy/team-deployment-posture.md +1 -1
  591. package/docs/development.md +6 -6
  592. package/docs/distribution/public-install-smoke.md +1 -1
  593. package/docs/distribution/registries.md +5 -5
  594. package/docs/distribution/registry-submissions.md +2 -2
  595. package/docs/end-to-end-walkthroughs.md +10 -10
  596. package/docs/experiences/agency.md +49 -0
  597. package/docs/experiences/content_creator.md +47 -0
  598. package/docs/experiences/developer.md +49 -0
  599. package/docs/experiences/finance.md +48 -0
  600. package/docs/experiences/founder.md +47 -0
  601. package/docs/experiences/ops.md +47 -0
  602. package/docs/featured-commands.md +12 -12
  603. package/docs/featured-skills.md +32 -32
  604. package/docs/flows.md +67 -0
  605. package/docs/getting-started-by-role.md +41 -41
  606. package/docs/getting-started-laravel.md +26 -26
  607. package/docs/getting-started-local-stdio.md +77 -0
  608. package/docs/getting-started.md +2 -2
  609. package/docs/governance.md +96 -0
  610. package/docs/guidelines/agent-infra/asking-and-brevity-examples.md +6 -6
  611. package/docs/guidelines/agent-infra/comparison-matrix.md +179 -0
  612. package/docs/guidelines/agent-infra/corpus-grounding-authoring.md +91 -0
  613. package/docs/guidelines/agent-infra/direct-answers-demos.md +23 -26
  614. package/docs/guidelines/agent-infra/language-and-tone-examples.md +29 -2
  615. package/docs/guidelines/agent-infra/layered-settings.md +3 -3
  616. package/docs/guidelines/agent-infra/linked-projects-onboarding-gate.md +80 -0
  617. package/docs/guidelines/agent-infra/missing-tool-handling.md +66 -0
  618. package/docs/guidelines/agent-infra/model-recommendation.md +72 -0
  619. package/docs/guidelines/agent-infra/roadmap-progress-mechanics.md +1 -1
  620. package/docs/guidelines/agent-infra/self-improvement-pipeline.md +1 -1
  621. package/docs/guidelines/agent-infra/verify-before-complete-demos.md +1 -1
  622. package/docs/guidelines/augment-portability-patterns.md +1 -1
  623. package/docs/guides/local-analytics.md +1 -1
  624. package/docs/guides/local-knowledge.md +3 -3
  625. package/docs/hook-payload-capture.md +5 -5
  626. package/docs/installation.md +3 -3
  627. package/docs/mcp-registries.md +94 -0
  628. package/docs/mcp-server.md +4 -4
  629. package/docs/mcp.md +3 -0
  630. package/docs/parity/ruflo.md +7 -7
  631. package/docs/personas.md +3 -3
  632. package/docs/profiles.md +15 -11
  633. package/docs/quality.md +3 -3
  634. package/docs/setup/mcp-client-config.md +134 -9
  635. package/docs/setup/mcp-server-docker.md +9 -7
  636. package/docs/setup/per-ide/claude-code.md +3 -3
  637. package/docs/setup/per-ide/claude-desktop.md +1 -1
  638. package/docs/setup/per-ide/cursor.md +2 -2
  639. package/docs/setup/per-ide/windsurf.md +1 -1
  640. package/docs/showcase.md +12 -12
  641. package/docs/skill-duplication-findings.md +91 -0
  642. package/docs/skills-catalog.md +228 -224
  643. package/docs/skills-taxonomy.md +90 -0
  644. package/docs/ui-track-mental-model.md +2 -2
  645. package/docs/value.md +50 -50
  646. package/docs/walkthroughs/assets/workspace-role-grid.png +0 -0
  647. package/docs/walkthroughs/assets/workspace-session-started.png +0 -0
  648. package/docs/walkthroughs/assets/workspace-task-picker.png +0 -0
  649. package/docs/walkthroughs/daily-workspace.md +127 -0
  650. package/llms.txt +18 -14
  651. package/package.json +10 -9
  652. package/src/config/agent-settings.template.yml +612 -0
  653. package/src/config/discovery/command-verbs.yml +56 -0
  654. package/src/config/discovery/packs.yml +255 -0
  655. package/src/config/discovery/workspaces.yml +72 -0
  656. package/src/scripts/__pycache__/validate_frontmatter.cpython-312.pyc +0 -0
  657. package/src/scripts/_archive/README.md +59 -0
  658. package/src/scripts/_archive/_bootstrap_tier_frontmatter.py +151 -0
  659. package/src/scripts/_archive/_p43_bodies.py +235 -0
  660. package/src/scripts/_archive/_p43_condense.py +118 -0
  661. package/src/scripts/_archive/_p4_migrate.py +199 -0
  662. package/src/scripts/_cli/cmd_doctor.py +1583 -0
  663. package/src/scripts/_cli/cmd_export.py +157 -0
  664. package/src/scripts/_cli/cmd_migrate.py +524 -0
  665. package/src/scripts/_cli/cmd_refresh.py +179 -0
  666. package/src/scripts/_cli/cmd_settings_migrate.py +147 -0
  667. package/src/scripts/_cli/cmd_update.py +279 -0
  668. package/src/scripts/_cli/cmd_upgrade.py +172 -0
  669. package/src/scripts/_cli/cmd_versions.py +160 -0
  670. package/src/scripts/_dispatch.bash +1129 -0
  671. package/src/scripts/_lib/__pycache__/__init__.cpython-312.pyc +0 -0
  672. package/src/scripts/_lib/__pycache__/agent_src.cpython-312.pyc +0 -0
  673. package/src/scripts/_lib/agent_src.py +491 -0
  674. package/src/scripts/_lib/bench_ab_cache.py +162 -0
  675. package/src/scripts/_lib/changelog_eras.py +330 -0
  676. package/src/scripts/_lib/claude_desktop_bundler.py +238 -0
  677. package/src/scripts/_lib/cli_wrapper.py +64 -0
  678. package/src/scripts/_lib/global_deploy_inventory.py +282 -0
  679. package/src/scripts/_lib/install_regenerator.py +134 -0
  680. package/src/scripts/_lib/installed_lock.py +256 -0
  681. package/src/scripts/_lib/model_tier.py +52 -0
  682. package/src/scripts/_lib/scope_guard.sh +163 -0
  683. package/src/scripts/_lib/value_ladder.py +696 -0
  684. package/src/scripts/_lib/value_report.py +455 -0
  685. package/src/scripts/_phase4_bucket.py +210 -0
  686. package/src/scripts/_pilot_measure.py +53 -0
  687. package/src/scripts/adoption_report.py +195 -0
  688. package/src/scripts/adoption_snapshot.py +219 -0
  689. package/src/scripts/adoption_status.py +166 -0
  690. package/src/scripts/agent-config +57 -0
  691. package/src/scripts/ai-video/adapters/comfyui.sh +392 -0
  692. package/src/scripts/ai-video/adapters/fal.sh +311 -0
  693. package/src/scripts/ai-video/adapters/gemini-veo.sh +246 -0
  694. package/src/scripts/ai-video/adapters/higgsfield.sh +310 -0
  695. package/src/scripts/ai-video/adapters/kling.sh +248 -0
  696. package/src/scripts/ai-video/adapters/musetalk.sh +120 -0
  697. package/src/scripts/ai-video/adapters/openai-images.sh +147 -0
  698. package/src/scripts/ai-video/adapters/replicate.sh +289 -0
  699. package/src/scripts/ai-video/adapters/sora.sh +207 -0
  700. package/src/scripts/ai-video/adapters/syncso.sh +200 -0
  701. package/src/scripts/ai-video/audio-adapters/allin1.sh +115 -0
  702. package/src/scripts/ai-video/audio-adapters/whisperx.sh +128 -0
  703. package/src/scripts/ai-video/lib/adapter-common.sh +231 -0
  704. package/src/scripts/ai-video/lib/adapter-contract.md +329 -0
  705. package/src/scripts/ai-video/lib/audio-adapter-contract.md +210 -0
  706. package/src/scripts/ai-video/lib/comfyui-nodes.allowlist.json +21 -0
  707. package/src/scripts/ai-video/lib/comfyui-templates/ltx-2.json +79 -0
  708. package/src/scripts/ai-video/lib/comfyui-templates/wan22-ti2v-5b.json +78 -0
  709. package/src/scripts/ai-video/lib/embed-provenance.sh +194 -0
  710. package/src/scripts/ai-video/lib/fixtures/allin1/analysis.json +13 -0
  711. package/src/scripts/ai-video/lib/fixtures/comfyui/result.json +1 -0
  712. package/src/scripts/ai-video/lib/fixtures/fal/result.json +1 -0
  713. package/src/scripts/ai-video/lib/fixtures/fal/scene-0001.mp4 +1 -0
  714. package/src/scripts/ai-video/lib/fixtures/gemini-veo/result.json +1 -0
  715. package/src/scripts/ai-video/lib/fixtures/higgsfield/result.json +1 -0
  716. package/src/scripts/ai-video/lib/fixtures/kling/result.json +1 -0
  717. package/src/scripts/ai-video/lib/fixtures/kling/scene-0001.mp4 +1 -0
  718. package/src/scripts/ai-video/lib/fixtures/musetalk/lipsync-0001.mp4 +1 -0
  719. package/src/scripts/ai-video/lib/fixtures/musetalk/result.json +1 -0
  720. package/src/scripts/ai-video/lib/fixtures/openai-images/result.json +1 -0
  721. package/src/scripts/ai-video/lib/fixtures/replicate/result.json +1 -0
  722. package/src/scripts/ai-video/lib/fixtures/replicate/scene-0001.mp4 +1 -0
  723. package/src/scripts/ai-video/lib/fixtures/sora/result.json +1 -0
  724. package/src/scripts/ai-video/lib/fixtures/syncso/lipsync-0001.mp4 +1 -0
  725. package/src/scripts/ai-video/lib/fixtures/syncso/result.json +1 -0
  726. package/src/scripts/ai-video/lib/fixtures/whisperx/transcript.json +26 -0
  727. package/src/scripts/ai-video/lib/ingest-song.sh +89 -0
  728. package/src/scripts/ai-video/lib/load-config.sh +180 -0
  729. package/src/scripts/ai-video/lib/model-capabilities/README.md +82 -0
  730. package/src/scripts/ai-video/lib/model-capabilities/comfyui.json +31 -0
  731. package/src/scripts/ai-video/lib/model-capabilities/fal.json +77 -0
  732. package/src/scripts/ai-video/lib/model-capabilities/musetalk.json +24 -0
  733. package/src/scripts/ai-video/lib/model-capabilities/replicate.json +82 -0
  734. package/src/scripts/ai-video/lib/model-capabilities/syncso.json +23 -0
  735. package/src/scripts/ai-video/lib/resume-scan.sh +212 -0
  736. package/src/scripts/ai-video/lib/telemetry.sh +115 -0
  737. package/src/scripts/ai-video/lib/validate-deps.sh +132 -0
  738. package/src/scripts/ai-video/lib/validate-vocal-map.sh +121 -0
  739. package/src/scripts/ai-video/smoke-trace.sh +179 -0
  740. package/src/scripts/ai-video/stitch.sh +161 -0
  741. package/src/scripts/ai-video/test-pipeline.sh +169 -0
  742. package/src/scripts/ai_council/advisors.py +148 -0
  743. package/src/scripts/ai_council/clients.py +1385 -0
  744. package/src/scripts/ai_council/compile_corpus.py +179 -0
  745. package/src/scripts/ai_council/events_log.py +141 -0
  746. package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_2a4_acceptance.py +208 -0
  747. package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_budget_v2_audit.py +206 -0
  748. package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_context_layer_v1_estimate.py +67 -0
  749. package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_context_layer_v1_review.py +292 -0
  750. package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_followups_review.py +259 -0
  751. package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_nondestructive_inline_audit.py +209 -0
  752. package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_phase4_dispatch_latency.py +108 -0
  753. package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_phase6_trigger_jaccard.py +92 -0
  754. package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_phase_2a_budget_rebalance.py +257 -0
  755. package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_phase_2a_post_revert.py +197 -0
  756. package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_rebalancing_audit.py +149 -0
  757. package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_roundtrip.py +111 -0
  758. package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_rule_hardening_v1.py +251 -0
  759. package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_silent_taskfiles.py +98 -0
  760. package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_structural_open_questions.py +232 -0
  761. package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_structural_optimization.py +144 -0
  762. package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_structural_v3_gaps.py +252 -0
  763. package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_structural_v3_review.py +240 -0
  764. package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_tier_retrofit.py +180 -0
  765. package/src/scripts/ai_council/pricing.py +215 -0
  766. package/src/scripts/ai_council/session.py +366 -0
  767. package/src/scripts/annotate_discovery.py +149 -0
  768. package/src/scripts/apply_modules_config.py +290 -0
  769. package/src/scripts/audit_adr_coverage.py +175 -0
  770. package/src/scripts/audit_auto_rules.py +175 -0
  771. package/src/scripts/audit_cloud_compatibility.py +362 -0
  772. package/src/scripts/audit_command_surface.py +669 -0
  773. package/src/scripts/audit_initial_context.py +237 -0
  774. package/src/scripts/audit_likelihood.py +148 -0
  775. package/src/scripts/audit_mcp_tools.py +146 -0
  776. package/src/scripts/audit_overlap.py +145 -0
  777. package/src/scripts/audit_skill_overlap.py +207 -0
  778. package/src/scripts/audit_user_type_axis.py +140 -0
  779. package/src/scripts/backfill_model_tier.py +184 -0
  780. package/src/scripts/bench_ab_cache_dispatch.py +68 -0
  781. package/src/scripts/bench_ab_clone.py +170 -0
  782. package/src/scripts/bench_ab_diff.py +220 -0
  783. package/src/scripts/bench_ab_integrity.py +143 -0
  784. package/src/scripts/bench_ab_run.py +235 -0
  785. package/src/scripts/bench_ab_task_runner.py +369 -0
  786. package/src/scripts/bench_ab_tracka_run.py +202 -0
  787. package/src/scripts/bench_baseline_ready.py +108 -0
  788. package/src/scripts/bench_condense_memory.py +168 -0
  789. package/src/scripts/bench_drift_check.py +151 -0
  790. package/src/scripts/bench_per_tool.py +216 -0
  791. package/src/scripts/bench_rtk_savings.py +320 -0
  792. package/src/scripts/bench_run.py +272 -0
  793. package/src/scripts/bench_runner.py +158 -0
  794. package/src/scripts/build_cloud_bundle.py +458 -0
  795. package/src/scripts/build_discovery_manifest.py +747 -0
  796. package/src/scripts/build_linear_digest.py +260 -0
  797. package/src/scripts/build_mcp_registry_manifest.py +181 -0
  798. package/src/scripts/build_rule_trigger_matrix.py +350 -0
  799. package/src/scripts/capture_showcase_session.py +361 -0
  800. package/src/scripts/check_always_budget.py +532 -0
  801. package/src/scripts/check_artefact_checksums.py +111 -0
  802. package/src/scripts/check_augment_description_cap.py +79 -0
  803. package/src/scripts/check_augmentignore.py +72 -0
  804. package/src/scripts/check_beta_review_markers.py +127 -0
  805. package/src/scripts/check_cluster_patterns.py +206 -0
  806. package/src/scripts/check_command_count_messaging.py +152 -0
  807. package/src/scripts/check_condensation.py +375 -0
  808. package/src/scripts/check_condensed_paths.py +231 -0
  809. package/src/scripts/check_context_paths.py +202 -0
  810. package/src/scripts/check_council_references.py +228 -0
  811. package/src/scripts/check_discovery_determinism.py +70 -0
  812. package/src/scripts/check_gate_paths.py +128 -0
  813. package/src/scripts/check_module_management_neutral.py +147 -0
  814. package/src/scripts/check_no_new_legacy_path.py +100 -0
  815. package/src/scripts/check_no_roadmap_refs.py +155 -0
  816. package/src/scripts/check_one_off_location.py +81 -0
  817. package/src/scripts/check_overlay_cascade_subdirs.py +129 -0
  818. package/src/scripts/check_portability.py +574 -0
  819. package/src/scripts/check_public_catalog_links.py +125 -0
  820. package/src/scripts/check_public_links.py +185 -0
  821. package/src/scripts/check_references.py +557 -0
  822. package/src/scripts/check_release_includes_discovery.py +61 -0
  823. package/src/scripts/check_release_pr_shape.py +123 -0
  824. package/src/scripts/check_release_published.py +145 -0
  825. package/src/scripts/check_reply_consistency.py +169 -0
  826. package/src/scripts/check_roadmap_trackable.py +114 -0
  827. package/src/scripts/check_role_doc_links.py +110 -0
  828. package/src/scripts/check_safety_floor_untouched.py +125 -0
  829. package/src/scripts/check_skill_requires.py +147 -0
  830. package/src/scripts/check_template_pin_drift.py +129 -0
  831. package/src/scripts/check_test_coverage_diff.py +180 -0
  832. package/src/scripts/check_token_optimizer_freshness.py +146 -0
  833. package/src/scripts/check_update_banner.py +86 -0
  834. package/src/scripts/ci_time_ratio.py +168 -0
  835. package/src/scripts/compile_router.py +232 -0
  836. package/src/scripts/condense.py +1919 -0
  837. package/src/scripts/condense_memory.py +178 -0
  838. package/src/scripts/config/packs.py +157 -0
  839. package/src/scripts/config/profile_explain.py +89 -0
  840. package/src/scripts/config/profiles.py +191 -0
  841. package/src/scripts/config/session_profiles.py +542 -0
  842. package/src/scripts/cost_by_conversation.py +78 -0
  843. package/src/scripts/cost_summary.py +97 -0
  844. package/src/scripts/council_cli.py +2557 -0
  845. package/src/scripts/cross_repo_retrieve.py +172 -0
  846. package/src/scripts/discovery_stats.py +70 -0
  847. package/src/scripts/extract_audit_patterns.py +202 -0
  848. package/src/scripts/first_run_gate_hook.py +179 -0
  849. package/src/scripts/gen_discovery_baseline.py +127 -0
  850. package/src/scripts/generate_catalog.py +116 -0
  851. package/src/scripts/generate_command_flows.py +191 -0
  852. package/src/scripts/generate_index.py +303 -0
  853. package/src/scripts/generate_ownership_matrix.py +378 -0
  854. package/src/scripts/generate_pack_manifests.py +340 -0
  855. package/src/scripts/hook_manifest.yaml +243 -0
  856. package/src/scripts/hooks/dispatch_hook.py +461 -0
  857. package/src/scripts/hooks/replay_hook.py +144 -0
  858. package/src/scripts/hooks_doctor.py +223 -0
  859. package/src/scripts/hooks_status.py +157 -0
  860. package/src/scripts/install +425 -0
  861. package/src/scripts/install-hooks.sh +204 -0
  862. package/src/scripts/install.py +5183 -0
  863. package/src/scripts/install.sh +1156 -0
  864. package/src/scripts/inventory_abstraction_budget.py +622 -0
  865. package/src/scripts/inventory_frontmatter.py +164 -0
  866. package/src/scripts/inventory_meta_layers.py +288 -0
  867. package/src/scripts/iron_law_sha.py +107 -0
  868. package/src/scripts/linked_projects_list.py +91 -0
  869. package/src/scripts/lint_agent_skill_names.py +150 -0
  870. package/src/scripts/lint_agents_layout.py +197 -0
  871. package/src/scripts/lint_agents_md.py +210 -0
  872. package/src/scripts/lint_archived_skills.py +159 -0
  873. package/src/scripts/lint_artefact_frontmatter.py +188 -0
  874. package/src/scripts/lint_bench_ab.py +172 -0
  875. package/src/scripts/lint_bench_corpus.py +255 -0
  876. package/src/scripts/lint_command_flow_coverage.py +132 -0
  877. package/src/scripts/lint_command_routing.py +160 -0
  878. package/src/scripts/lint_command_tiers.py +175 -0
  879. package/src/scripts/lint_command_verbs.py +206 -0
  880. package/src/scripts/lint_commit_subjects.py +139 -0
  881. package/src/scripts/lint_context_spine_usage.py +137 -0
  882. package/src/scripts/lint_discovery_manifest.py +176 -0
  883. package/src/scripts/lint_discovery_vocabulary.py +220 -0
  884. package/src/scripts/lint_examples.py +102 -0
  885. package/src/scripts/lint_explain_trace.py +80 -0
  886. package/src/scripts/lint_featured_skills.py +144 -0
  887. package/src/scripts/lint_flows.py +215 -0
  888. package/src/scripts/lint_framework_leakage.py +375 -0
  889. package/src/scripts/lint_framework_leakage_allowlist.json +575 -0
  890. package/src/scripts/lint_frontmatter_boilerplate.py +77 -0
  891. package/src/scripts/lint_ghostwriter_source.py +242 -0
  892. package/src/scripts/lint_handoffs.py +217 -0
  893. package/src/scripts/lint_hook_concern_budget.py +207 -0
  894. package/src/scripts/lint_hook_manifest.py +217 -0
  895. package/src/scripts/lint_load_context.py +196 -0
  896. package/src/scripts/lint_marketplace.py +180 -0
  897. package/src/scripts/lint_marketplace_install_completeness.py +198 -0
  898. package/src/scripts/lint_mcp_registry_manifest.py +69 -0
  899. package/src/scripts/lint_media_policy_linkage.py +140 -0
  900. package/src/scripts/lint_model_tier_coverage.py +73 -0
  901. package/src/scripts/lint_namespace.py +135 -0
  902. package/src/scripts/lint_namespace_collisions.py +103 -0
  903. package/src/scripts/lint_new_skill_gate.py +144 -0
  904. package/src/scripts/lint_no_new_atomic_commands.py +180 -0
  905. package/src/scripts/lint_one_off_age.py +184 -0
  906. package/src/scripts/lint_orchestration_dsl.py +217 -0
  907. package/src/scripts/lint_orchestrator_auto_detect.py +111 -0
  908. package/src/scripts/lint_pack_boundaries.py +147 -0
  909. package/src/scripts/lint_pack_dependencies.py +137 -0
  910. package/src/scripts/lint_pack_first_win.py +121 -0
  911. package/src/scripts/lint_persona_governance.py +164 -0
  912. package/src/scripts/lint_positioning.py +143 -0
  913. package/src/scripts/lint_profile_overlay_set_only.py +179 -0
  914. package/src/scripts/lint_regression.py +251 -0
  915. package/src/scripts/lint_roadmap_ci_steps.py +186 -0
  916. package/src/scripts/lint_roadmap_complexity.py +220 -0
  917. package/src/scripts/lint_role_experiences.py +255 -0
  918. package/src/scripts/lint_rule_interactions.py +170 -0
  919. package/src/scripts/lint_rule_tiers.py +90 -0
  920. package/src/scripts/lint_showcase_sessions.py +148 -0
  921. package/src/scripts/lint_skill_tools.py +168 -0
  922. package/src/scripts/lint_topics_yaml.py +89 -0
  923. package/src/scripts/lint_trust_coherence.py +212 -0
  924. package/src/scripts/lint_value_dashboard.py +218 -0
  925. package/src/scripts/mcp_parity_smoke.py +316 -0
  926. package/src/scripts/mcp_registry_submit.sh +187 -0
  927. package/src/scripts/mcp_server/__init__.py +19 -0
  928. package/src/scripts/mcp_server/consumer_tool_catalog.json +276 -0
  929. package/src/scripts/mcp_server/prompts.py +442 -0
  930. package/src/scripts/mcp_server/resources.py +201 -0
  931. package/src/scripts/mcp_server/tools.py +950 -0
  932. package/src/scripts/measure_augment_budget.py +214 -0
  933. package/src/scripts/measure_density.py +232 -0
  934. package/src/scripts/measure_frugality_savings.py +164 -0
  935. package/src/scripts/measure_markitdown_lift.py +127 -0
  936. package/src/scripts/measure_patterns.py +376 -0
  937. package/src/scripts/measure_projection_bytes.py +159 -0
  938. package/src/scripts/measure_rule_budget.py +347 -0
  939. package/src/scripts/measure_skill_reduction.py +102 -0
  940. package/src/scripts/migrate_command_suggestions.py +151 -0
  941. package/src/scripts/migrate_frontmatter_defaults.py +245 -0
  942. package/src/scripts/mine_session.py +279 -0
  943. package/src/scripts/move_artefact.py +143 -0
  944. package/src/scripts/new_skill.py +148 -0
  945. package/src/scripts/pack_dependency_allowlist.json +70 -0
  946. package/src/scripts/pack_mcp_content.py +293 -0
  947. package/src/scripts/plan_physical_move.py +353 -0
  948. package/src/scripts/print_required_checks.py +196 -0
  949. package/src/scripts/probe_projection_fidelity.py +202 -0
  950. package/src/scripts/profile_staleness_hook.py +69 -0
  951. package/src/scripts/profile_use.py +164 -0
  952. package/src/scripts/project_thin_rules.py +168 -0
  953. package/src/scripts/prototype_lint_contradictions.py +150 -0
  954. package/src/scripts/prove_pack_extractable.py +187 -0
  955. package/src/scripts/recruit_preflight.sh +152 -0
  956. package/src/scripts/refine_ticket_detect.py +646 -0
  957. package/src/scripts/release.py +1091 -0
  958. package/src/scripts/render_benchmark_md.py +312 -0
  959. package/src/scripts/render_value_md.py +347 -0
  960. package/src/scripts/repro/repro_marketplace_install_gap.sh +161 -0
  961. package/src/scripts/roadmap_progress_hook.py +274 -0
  962. package/src/scripts/router_telemetry.py +470 -0
  963. package/src/scripts/run_skill_evals.py +185 -0
  964. package/src/scripts/runtime_registry.py +166 -0
  965. package/src/scripts/schemas/command.schema.json +219 -0
  966. package/src/scripts/schemas/flow.schema.json +59 -0
  967. package/src/scripts/schemas/pack.schema.json +95 -0
  968. package/src/scripts/schemas/rule.schema.json +145 -0
  969. package/src/scripts/score_skill_selection.py +198 -0
  970. package/src/scripts/skill_collision_clusters.py +162 -0
  971. package/src/scripts/skill_discovery.py +254 -0
  972. package/src/scripts/skill_linter.py +3694 -0
  973. package/src/scripts/skill_overlap.py +204 -0
  974. package/src/scripts/skill_preview.py +179 -0
  975. package/src/scripts/skill_tools/audit_persona_coverage.py +147 -0
  976. package/src/scripts/skill_tools/audit_user_type_coverage.py +148 -0
  977. package/src/scripts/skill_tools/run_block_d_eval.py +129 -0
  978. package/src/scripts/skill_tools/score_skill_relevance.py +169 -0
  979. package/src/scripts/skill_tools/suggest_skill_for_task.py +113 -0
  980. package/src/scripts/skill_trigger_eval.py +682 -0
  981. package/src/scripts/skill_usage_collect.py +191 -0
  982. package/src/scripts/skill_usage_report.py +162 -0
  983. package/src/scripts/smoke/kernel.sh +107 -0
  984. package/src/scripts/smoke/router.sh +148 -0
  985. package/src/scripts/smoke/schema.sh +78 -0
  986. package/src/scripts/smoke/skills.sh +112 -0
  987. package/src/scripts/smoke_path_resolution.py +93 -0
  988. package/src/scripts/smoke_quickstart.py +144 -0
  989. package/src/scripts/snapshot_agent_outputs.py +144 -0
  990. package/src/scripts/spotcheck_thin_root.py +134 -0
  991. package/src/scripts/sync_agent_settings.py +180 -0
  992. package/src/scripts/sync_github_metadata.py +147 -0
  993. package/src/scripts/sync_gitignore.py +291 -0
  994. package/src/scripts/telegraph_stats.py +119 -0
  995. package/src/scripts/trigger_coverage.py +129 -0
  996. package/src/scripts/update_counts.py +199 -0
  997. package/src/scripts/update_prices.py +125 -0
  998. package/src/scripts/validate_agent_settings.py +124 -0
  999. package/src/scripts/validate_decision_engine.py +136 -0
  1000. package/src/scripts/validate_discovery_manifest.py +94 -0
  1001. package/src/scripts/validate_frontmatter.py +647 -0
  1002. package/src/scripts/validate_pack_yaml.py +179 -0
  1003. package/src/scripts/verify_physical_move.py +185 -0
  1004. package/src/scripts/wrapper_freshness_hook.py +86 -0
  1005. package/.agent-src/README.md +0 -64
  1006. package/.agent-src/commands/agent-handoff.md +0 -120
  1007. package/.agent-src/commands/agent-status.md +0 -136
  1008. package/.agent-src/commands/agents/audit.md +0 -157
  1009. package/.agent-src/commands/agents/init.md +0 -191
  1010. package/.agent-src/commands/agents/optimize.md +0 -186
  1011. package/.agent-src/commands/agents/user/accept.md +0 -121
  1012. package/.agent-src/commands/agents/user/init.md +0 -161
  1013. package/.agent-src/commands/agents/user/review.md +0 -111
  1014. package/.agent-src/commands/agents/user/show.md +0 -113
  1015. package/.agent-src/commands/agents/user/update.md +0 -102
  1016. package/.agent-src/commands/agents/user.md +0 -70
  1017. package/.agent-src/commands/agents.md +0 -61
  1018. package/.agent-src/commands/analytics/prune.md +0 -70
  1019. package/.agent-src/commands/analytics/show.md +0 -99
  1020. package/.agent-src/commands/analytics.md +0 -56
  1021. package/.agent-src/commands/analyze-reference-repo.md +0 -203
  1022. package/.agent-src/commands/bug-fix.md +0 -192
  1023. package/.agent-src/commands/bug-investigate.md +0 -185
  1024. package/.agent-src/commands/challenge-me/vision.md +0 -353
  1025. package/.agent-src/commands/challenge-me/with-docs.md +0 -338
  1026. package/.agent-src/commands/challenge-me.md +0 -67
  1027. package/.agent-src/commands/chat-history/import.md +0 -171
  1028. package/.agent-src/commands/chat-history/learn.md +0 -183
  1029. package/.agent-src/commands/chat-history/show.md +0 -111
  1030. package/.agent-src/commands/chat-history.md +0 -58
  1031. package/.agent-src/commands/check-current-md.md +0 -142
  1032. package/.agent-src/commands/commit/in-chunks.md +0 -145
  1033. package/.agent-src/commands/commit.md +0 -190
  1034. package/.agent-src/commands/condense.md +0 -235
  1035. package/.agent-src/commands/context/create.md +0 -180
  1036. package/.agent-src/commands/context/refactor.md +0 -182
  1037. package/.agent-src/commands/context.md +0 -50
  1038. package/.agent-src/commands/cost-report.md +0 -130
  1039. package/.agent-src/commands/council/analysis.md +0 -146
  1040. package/.agent-src/commands/council/debate.md +0 -133
  1041. package/.agent-src/commands/council/default.md +0 -288
  1042. package/.agent-src/commands/council/design.md +0 -106
  1043. package/.agent-src/commands/council/optimize.md +0 -122
  1044. package/.agent-src/commands/council/pr.md +0 -129
  1045. package/.agent-src/commands/council.md +0 -106
  1046. package/.agent-src/commands/create-pr/description-only.md +0 -159
  1047. package/.agent-src/commands/create-pr.md +0 -249
  1048. package/.agent-src/commands/e2e-heal.md +0 -109
  1049. package/.agent-src/commands/e2e-plan.md +0 -96
  1050. package/.agent-src/commands/estimate-ticket.md +0 -88
  1051. package/.agent-src/commands/feature/dev.md +0 -123
  1052. package/.agent-src/commands/feature/explore.md +0 -190
  1053. package/.agent-src/commands/feature/plan.md +0 -332
  1054. package/.agent-src/commands/feature/refactor.md +0 -193
  1055. package/.agent-src/commands/feature/roadmap.md +0 -221
  1056. package/.agent-src/commands/feature.md +0 -58
  1057. package/.agent-src/commands/fix/ci.md +0 -58
  1058. package/.agent-src/commands/fix/portability.md +0 -106
  1059. package/.agent-src/commands/fix/pr-bot-comments.md +0 -156
  1060. package/.agent-src/commands/fix/pr-comments.md +0 -68
  1061. package/.agent-src/commands/fix/pr-developer-comments.md +0 -162
  1062. package/.agent-src/commands/fix/refs.md +0 -103
  1063. package/.agent-src/commands/fix/seeder.md +0 -157
  1064. package/.agent-src/commands/fix.md +0 -60
  1065. package/.agent-src/commands/ghostwriter/delete.md +0 -122
  1066. package/.agent-src/commands/ghostwriter/fetch.md +0 -189
  1067. package/.agent-src/commands/ghostwriter/list.md +0 -106
  1068. package/.agent-src/commands/ghostwriter/show.md +0 -117
  1069. package/.agent-src/commands/ghostwriter/write.md +0 -164
  1070. package/.agent-src/commands/ghostwriter.md +0 -100
  1071. package/.agent-src/commands/grill-me.md +0 -44
  1072. package/.agent-src/commands/image/analyse.md +0 -51
  1073. package/.agent-src/commands/image/create.md +0 -53
  1074. package/.agent-src/commands/image/verify.md +0 -48
  1075. package/.agent-src/commands/image.md +0 -69
  1076. package/.agent-src/commands/implement-ticket.md +0 -165
  1077. package/.agent-src/commands/jira-ticket.md +0 -80
  1078. package/.agent-src/commands/judge/on-diff.md +0 -123
  1079. package/.agent-src/commands/judge/solo.md +0 -95
  1080. package/.agent-src/commands/judge/steps.md +0 -93
  1081. package/.agent-src/commands/judge.md +0 -60
  1082. package/.agent-src/commands/knowledge/cross-repo.md +0 -71
  1083. package/.agent-src/commands/knowledge/forget.md +0 -96
  1084. package/.agent-src/commands/knowledge/ingest.md +0 -114
  1085. package/.agent-src/commands/knowledge/list.md +0 -94
  1086. package/.agent-src/commands/knowledge.md +0 -69
  1087. package/.agent-src/commands/memory/add.md +0 -146
  1088. package/.agent-src/commands/memory/learn-low-impact.md +0 -147
  1089. package/.agent-src/commands/memory/load.md +0 -175
  1090. package/.agent-src/commands/memory/mine-session.md +0 -156
  1091. package/.agent-src/commands/memory/promote.md +0 -194
  1092. package/.agent-src/commands/memory/propose.md +0 -121
  1093. package/.agent-src/commands/memory.md +0 -56
  1094. package/.agent-src/commands/mode.md +0 -129
  1095. package/.agent-src/commands/module/create.md +0 -143
  1096. package/.agent-src/commands/module/explore.md +0 -197
  1097. package/.agent-src/commands/module.md +0 -50
  1098. package/.agent-src/commands/optimize/agents-dir.md +0 -118
  1099. package/.agent-src/commands/optimize/augmentignore.md +0 -311
  1100. package/.agent-src/commands/optimize/rtk.md +0 -160
  1101. package/.agent-src/commands/optimize/skills.md +0 -131
  1102. package/.agent-src/commands/optimize-prompt.md +0 -66
  1103. package/.agent-src/commands/optimize.md +0 -56
  1104. package/.agent-src/commands/orchestrate.md +0 -128
  1105. package/.agent-src/commands/override/create.md +0 -107
  1106. package/.agent-src/commands/override/manage.md +0 -106
  1107. package/.agent-src/commands/override.md +0 -50
  1108. package/.agent-src/commands/package-reset.md +0 -162
  1109. package/.agent-src/commands/package-test.md +0 -238
  1110. package/.agent-src/commands/post-as/ghostwriter.md +0 -70
  1111. package/.agent-src/commands/post-as/me.md +0 -128
  1112. package/.agent-src/commands/post-as.md +0 -62
  1113. package/.agent-src/commands/prediction-pool.md +0 -234
  1114. package/.agent-src/commands/prepare-for-review.md +0 -106
  1115. package/.agent-src/commands/profile/activate.md +0 -81
  1116. package/.agent-src/commands/profile/deactivate.md +0 -68
  1117. package/.agent-src/commands/profile/show.md +0 -70
  1118. package/.agent-src/commands/profile.md +0 -68
  1119. package/.agent-src/commands/project-analyze.md +0 -320
  1120. package/.agent-src/commands/project-health.md +0 -105
  1121. package/.agent-src/commands/quality-fix.md +0 -137
  1122. package/.agent-src/commands/refine-ticket.md +0 -94
  1123. package/.agent-src/commands/research/deep.md +0 -154
  1124. package/.agent-src/commands/research/report.md +0 -139
  1125. package/.agent-src/commands/research.md +0 -177
  1126. package/.agent-src/commands/review-changes.md +0 -205
  1127. package/.agent-src/commands/review-routing.md +0 -117
  1128. package/.agent-src/commands/roadmap/ai-council.md +0 -188
  1129. package/.agent-src/commands/roadmap/create.md +0 -213
  1130. package/.agent-src/commands/roadmap/process-full.md +0 -108
  1131. package/.agent-src/commands/roadmap/process-phase.md +0 -74
  1132. package/.agent-src/commands/roadmap/process-step.md +0 -62
  1133. package/.agent-src/commands/roadmap.md +0 -78
  1134. package/.agent-src/commands/rule-compliance-audit.md +0 -148
  1135. package/.agent-src/commands/set-cost-profile.md +0 -117
  1136. package/.agent-src/commands/skill/preview.md +0 -67
  1137. package/.agent-src/commands/skill.md +0 -48
  1138. package/.agent-src/commands/skills/discover.md +0 -76
  1139. package/.agent-src/commands/skills.md +0 -56
  1140. package/.agent-src/commands/sync-agent-settings.md +0 -139
  1141. package/.agent-src/commands/sync-gitignore/fix.md +0 -147
  1142. package/.agent-src/commands/sync-gitignore.md +0 -138
  1143. package/.agent-src/commands/tests/create.md +0 -83
  1144. package/.agent-src/commands/tests/execute.md +0 -67
  1145. package/.agent-src/commands/tests.md +0 -50
  1146. package/.agent-src/commands/threat-model.md +0 -125
  1147. package/.agent-src/commands/update-form-request-messages.md +0 -199
  1148. package/.agent-src/commands/upstream-contribute.md +0 -181
  1149. package/.agent-src/commands/video/from-script.md +0 -127
  1150. package/.agent-src/commands/video/from-song.md +0 -351
  1151. package/.agent-src/commands/video/scene.md +0 -96
  1152. package/.agent-src/commands/video/stitch.md +0 -87
  1153. package/.agent-src/commands/video/storyboard.md +0 -99
  1154. package/.agent-src/commands/video.md +0 -73
  1155. package/.agent-src/commands/work.md +0 -166
  1156. package/.agent-src/contexts/authority/commit-mechanics.md +0 -93
  1157. package/.agent-src/contexts/communication/rules-auto/augment-source-of-truth-mechanics.md +0 -98
  1158. package/.agent-src/contexts/contracts/artifact-engagement-flow.md +0 -259
  1159. package/.agent-src/contexts/contracts/consumer-agents-md-guide.md +0 -127
  1160. package/.agent-src/contexts/contracts/emergency-triage-block.md +0 -53
  1161. package/.agent-src/personas/README.md +0 -114
  1162. package/.agent-src/profiles/agency.yml +0 -27
  1163. package/.agent-src/profiles/content_creator.yml +0 -30
  1164. package/.agent-src/profiles/developer.yml +0 -26
  1165. package/.agent-src/profiles/finance.yml +0 -24
  1166. package/.agent-src/profiles/founder.yml +0 -25
  1167. package/.agent-src/profiles/ops.yml +0 -25
  1168. package/.agent-src/rules/ask-when-uncertain.md +0 -70
  1169. package/.agent-src/rules/augment-edit-discipline.md +0 -31
  1170. package/.agent-src/rules/augment-source-of-truth.md +0 -75
  1171. package/.agent-src/rules/commit-policy.md +0 -59
  1172. package/.agent-src/rules/direct-answers.md +0 -64
  1173. package/.agent-src/rules/domain-adoption-policy.md +0 -160
  1174. package/.agent-src/rules/language-and-tone.md +0 -64
  1175. package/.agent-src/rules/linked-projects-onboarding-gate.md +0 -79
  1176. package/.agent-src/rules/media-governance-routing.md +0 -85
  1177. package/.agent-src/rules/missing-tool-handling.md +0 -76
  1178. package/.agent-src/rules/model-recommendation.md +0 -85
  1179. package/.agent-src/rules/no-attribution-footers.md +0 -57
  1180. package/.agent-src/rules/no-cheap-questions.md +0 -75
  1181. package/.agent-src/rules/no-pr-progress-comments.md +0 -109
  1182. package/.agent-src/rules/no-roadmap-references.md +0 -141
  1183. package/.agent-src/rules/non-destructive-by-default.md +0 -58
  1184. package/.agent-src/rules/persona-governance.md +0 -93
  1185. package/.agent-src/rules/preservation-guard.md +0 -97
  1186. package/.agent-src/rules/provider-lifecycle-discipline.md +0 -78
  1187. package/.agent-src/rules/roadmap-progress-sync.md +0 -99
  1188. package/.agent-src/rules/scope-control.md +0 -68
  1189. package/.agent-src/rules/user-interrupt-priority.md +0 -49
  1190. package/.agent-src/rules/verify-before-complete.md +0 -78
  1191. package/.agent-src/scripts/update_roadmap_progress.py +0 -416
  1192. package/.agent-src/skills/accessibility-auditor/SKILL.md +0 -136
  1193. package/.agent-src/skills/agents-md-thin-root/SKILL.md +0 -143
  1194. package/.agent-src/skills/api-design/SKILL.md +0 -112
  1195. package/.agent-src/skills/api-endpoint/SKILL.md +0 -94
  1196. package/.agent-src/skills/authz-review/SKILL.md +0 -180
  1197. package/.agent-src/skills/blade-ui/SKILL.md +0 -129
  1198. package/.agent-src/skills/character-consistency/SKILL.md +0 -141
  1199. package/.agent-src/skills/check-refs/SKILL.md +0 -96
  1200. package/.agent-src/skills/code-review/SKILL.md +0 -224
  1201. package/.agent-src/skills/command-writing/SKILL.md +0 -282
  1202. package/.agent-src/skills/condense-memory/SKILL.md +0 -123
  1203. package/.agent-src/skills/context-document/SKILL.md +0 -160
  1204. package/.agent-src/skills/dashboard-design/SKILL.md +0 -123
  1205. package/.agent-src/skills/database/SKILL.md +0 -103
  1206. package/.agent-src/skills/deep-reading-analyst/SKILL.md +0 -198
  1207. package/.agent-src/skills/design-review/SKILL.md +0 -233
  1208. package/.agent-src/skills/existing-ui-audit/SKILL.md +0 -209
  1209. package/.agent-src/skills/fe-design/SKILL.md +0 -255
  1210. package/.agent-src/skills/feature-planning/SKILL.md +0 -271
  1211. package/.agent-src/skills/flux/SKILL.md +0 -121
  1212. package/.agent-src/skills/jira-integration/SKILL.md +0 -187
  1213. package/.agent-src/skills/lint-skills/SKILL.md +0 -95
  1214. package/.agent-src/skills/livewire/SKILL.md +0 -134
  1215. package/.agent-src/skills/md-language-check/SKILL.md +0 -130
  1216. package/.agent-src/skills/merge-conflicts/SKILL.md +0 -195
  1217. package/.agent-src/skills/motion-choreographer/SKILL.md +0 -171
  1218. package/.agent-src/skills/persona-writing/SKILL.md +0 -158
  1219. package/.agent-src/skills/react-shadcn-ui/SKILL.md +0 -213
  1220. package/.agent-src/skills/readme-reviewer/SKILL.md +0 -242
  1221. package/.agent-src/skills/readme-writing/SKILL.md +0 -240
  1222. package/.agent-src/skills/readme-writing-package/SKILL.md +0 -350
  1223. package/.agent-src/skills/roadmap-management/SKILL.md +0 -461
  1224. package/.agent-src/skills/rule-refactor/SKILL.md +0 -149
  1225. package/.agent-src/skills/rule-writing/SKILL.md +0 -277
  1226. package/.agent-src/skills/scene-expander/SKILL.md +0 -147
  1227. package/.agent-src/skills/scene-expander/scene-blueprint.schema.yaml +0 -108
  1228. package/.agent-src/skills/script-writing/SKILL.md +0 -231
  1229. package/.agent-src/skills/sentry-integration/SKILL.md +0 -175
  1230. package/.agent-src/skills/song-to-script/SKILL.md +0 -216
  1231. package/.agent-src/skills/sql-writing/SKILL.md +0 -79
  1232. package/.agent-src/skills/tailwind-engineer/SKILL.md +0 -148
  1233. package/.agent-src/skills/technical-specification/SKILL.md +0 -251
  1234. package/.agent-src/skills/threat-modeling/SKILL.md +0 -197
  1235. package/.agent-src/skills/upstream-contribute/SKILL.md +0 -261
  1236. package/.agent-src/templates/AGENTS.md +0 -34
  1237. package/.agent-src/templates/agents/agent-project-settings.example.yml +0 -286
  1238. package/.agent-src/templates/agents/proposal.example.md +0 -155
  1239. package/.agent-src/templates/command.md +0 -105
  1240. package/.agent-src/templates/copilot-instructions.md +0 -167
  1241. package/.agent-src/templates/github-workflows/proposal-drift.yml +0 -118
  1242. package/.agent-src/templates/hooks/pre-commit-frontmatter +0 -66
  1243. package/.agent-src/templates/hooks/pre-commit-roadmap-progress +0 -99
  1244. package/.agent-src/templates/persona.md +0 -99
  1245. package/.agent-src/templates/rule.md +0 -135
  1246. package/.agent-src/templates/scripts/work_engine/directives/ui/polish.py +0 -510
  1247. package/.agent-src/templates/scripts/work_engine/directives/ui/review.py +0 -468
  1248. package/.agent-src/templates/scripts/work_engine/orchestration.py +0 -182
  1249. package/.agent-src/user-types/README.md +0 -124
  1250. package/config/agent-settings.template.yml +0 -578
  1251. package/config/discovery/packs.yml +0 -181
  1252. package/config/discovery/workspaces.yml +0 -72
  1253. package/dist/ui/assets/index-DcAWIwwY.js +0 -40
  1254. package/dist/ui/assets/index-DcAWIwwY.js.map +0 -1
  1255. package/scripts/__pycache__/validate_frontmatter.cpython-312.pyc +0 -0
  1256. package/scripts/_archive/README.md +0 -59
  1257. package/scripts/_archive/_bootstrap_tier_frontmatter.py +0 -151
  1258. package/scripts/_archive/_p43_bodies.py +0 -235
  1259. package/scripts/_archive/_p43_condense.py +0 -118
  1260. package/scripts/_archive/_p4_migrate.py +0 -199
  1261. package/scripts/_cli/cmd_doctor.py +0 -1583
  1262. package/scripts/_cli/cmd_export.py +0 -157
  1263. package/scripts/_cli/cmd_migrate.py +0 -437
  1264. package/scripts/_cli/cmd_refresh.py +0 -173
  1265. package/scripts/_cli/cmd_settings_migrate.py +0 -147
  1266. package/scripts/_cli/cmd_update.py +0 -279
  1267. package/scripts/_cli/cmd_upgrade.py +0 -142
  1268. package/scripts/_cli/cmd_versions.py +0 -160
  1269. package/scripts/_dispatch.bash +0 -1126
  1270. package/scripts/_lib/__pycache__/__init__.cpython-312.pyc +0 -0
  1271. package/scripts/_lib/__pycache__/agent_src.cpython-312.pyc +0 -0
  1272. package/scripts/_lib/agent_src.py +0 -187
  1273. package/scripts/_lib/bench_ab_cache.py +0 -162
  1274. package/scripts/_lib/changelog_eras.py +0 -330
  1275. package/scripts/_lib/claude_desktop_bundler.py +0 -238
  1276. package/scripts/_lib/install_regenerator.py +0 -129
  1277. package/scripts/_lib/installed_lock.py +0 -256
  1278. package/scripts/_lib/scope_guard.sh +0 -162
  1279. package/scripts/_lib/value_ladder.py +0 -696
  1280. package/scripts/_lib/value_report.py +0 -455
  1281. package/scripts/_phase4_bucket.py +0 -210
  1282. package/scripts/_pilot_measure.py +0 -53
  1283. package/scripts/adoption_report.py +0 -195
  1284. package/scripts/adoption_snapshot.py +0 -219
  1285. package/scripts/adoption_status.py +0 -166
  1286. package/scripts/agent-config +0 -57
  1287. package/scripts/ai-video/adapters/gemini-veo.sh +0 -62
  1288. package/scripts/ai-video/adapters/higgsfield.sh +0 -245
  1289. package/scripts/ai-video/adapters/kling.sh +0 -59
  1290. package/scripts/ai-video/adapters/openai-images.sh +0 -143
  1291. package/scripts/ai-video/adapters/sora.sh +0 -60
  1292. package/scripts/ai-video/lib/adapter-common.sh +0 -116
  1293. package/scripts/ai-video/lib/adapter-contract.md +0 -163
  1294. package/scripts/ai-video/lib/fixtures/gemini-veo/result.json +0 -1
  1295. package/scripts/ai-video/lib/fixtures/higgsfield/result.json +0 -1
  1296. package/scripts/ai-video/lib/fixtures/kling/result.json +0 -1
  1297. package/scripts/ai-video/lib/fixtures/openai-images/result.json +0 -1
  1298. package/scripts/ai-video/lib/fixtures/sora/result.json +0 -1
  1299. package/scripts/ai-video/lib/load-config.sh +0 -140
  1300. package/scripts/ai-video/lib/validate-deps.sh +0 -132
  1301. package/scripts/ai-video/stitch.sh +0 -154
  1302. package/scripts/ai-video/test-pipeline.sh +0 -169
  1303. package/scripts/ai_council/advisors.py +0 -148
  1304. package/scripts/ai_council/clients.py +0 -1385
  1305. package/scripts/ai_council/compile_corpus.py +0 -179
  1306. package/scripts/ai_council/events_log.py +0 -141
  1307. package/scripts/ai_council/one_off_archive/2026-05/_one_off_2a4_acceptance.py +0 -208
  1308. package/scripts/ai_council/one_off_archive/2026-05/_one_off_budget_v2_audit.py +0 -206
  1309. package/scripts/ai_council/one_off_archive/2026-05/_one_off_context_layer_v1_estimate.py +0 -67
  1310. package/scripts/ai_council/one_off_archive/2026-05/_one_off_context_layer_v1_review.py +0 -292
  1311. package/scripts/ai_council/one_off_archive/2026-05/_one_off_followups_review.py +0 -259
  1312. package/scripts/ai_council/one_off_archive/2026-05/_one_off_nondestructive_inline_audit.py +0 -209
  1313. package/scripts/ai_council/one_off_archive/2026-05/_one_off_phase4_dispatch_latency.py +0 -108
  1314. package/scripts/ai_council/one_off_archive/2026-05/_one_off_phase6_trigger_jaccard.py +0 -92
  1315. package/scripts/ai_council/one_off_archive/2026-05/_one_off_phase_2a_budget_rebalance.py +0 -257
  1316. package/scripts/ai_council/one_off_archive/2026-05/_one_off_phase_2a_post_revert.py +0 -197
  1317. package/scripts/ai_council/one_off_archive/2026-05/_one_off_rebalancing_audit.py +0 -149
  1318. package/scripts/ai_council/one_off_archive/2026-05/_one_off_roundtrip.py +0 -111
  1319. package/scripts/ai_council/one_off_archive/2026-05/_one_off_rule_hardening_v1.py +0 -251
  1320. package/scripts/ai_council/one_off_archive/2026-05/_one_off_silent_taskfiles.py +0 -98
  1321. package/scripts/ai_council/one_off_archive/2026-05/_one_off_structural_open_questions.py +0 -232
  1322. package/scripts/ai_council/one_off_archive/2026-05/_one_off_structural_optimization.py +0 -144
  1323. package/scripts/ai_council/one_off_archive/2026-05/_one_off_structural_v3_gaps.py +0 -252
  1324. package/scripts/ai_council/one_off_archive/2026-05/_one_off_structural_v3_review.py +0 -240
  1325. package/scripts/ai_council/one_off_archive/2026-05/_one_off_tier_retrofit.py +0 -180
  1326. package/scripts/ai_council/pricing.py +0 -215
  1327. package/scripts/ai_council/session.py +0 -366
  1328. package/scripts/annotate_discovery.py +0 -149
  1329. package/scripts/apply_modules_config.py +0 -290
  1330. package/scripts/audit_adr_coverage.py +0 -175
  1331. package/scripts/audit_auto_rules.py +0 -175
  1332. package/scripts/audit_cloud_compatibility.py +0 -362
  1333. package/scripts/audit_command_surface.py +0 -374
  1334. package/scripts/audit_initial_context.py +0 -234
  1335. package/scripts/audit_likelihood.py +0 -148
  1336. package/scripts/audit_mcp_tools.py +0 -146
  1337. package/scripts/audit_overlap.py +0 -145
  1338. package/scripts/audit_user_type_axis.py +0 -140
  1339. package/scripts/backfill_model_tier.py +0 -182
  1340. package/scripts/bench_ab_cache_dispatch.py +0 -68
  1341. package/scripts/bench_ab_clone.py +0 -170
  1342. package/scripts/bench_ab_diff.py +0 -220
  1343. package/scripts/bench_ab_integrity.py +0 -143
  1344. package/scripts/bench_ab_run.py +0 -235
  1345. package/scripts/bench_ab_task_runner.py +0 -369
  1346. package/scripts/bench_ab_tracka_run.py +0 -202
  1347. package/scripts/bench_baseline_ready.py +0 -108
  1348. package/scripts/bench_condense_memory.py +0 -168
  1349. package/scripts/bench_drift_check.py +0 -151
  1350. package/scripts/bench_per_tool.py +0 -216
  1351. package/scripts/bench_rtk_savings.py +0 -320
  1352. package/scripts/bench_run.py +0 -272
  1353. package/scripts/bench_runner.py +0 -158
  1354. package/scripts/build_cloud_bundle.py +0 -458
  1355. package/scripts/build_discovery_manifest.py +0 -679
  1356. package/scripts/build_linear_digest.py +0 -260
  1357. package/scripts/build_mcp_registry_manifest.py +0 -181
  1358. package/scripts/build_rule_trigger_matrix.py +0 -350
  1359. package/scripts/capture_showcase_session.py +0 -361
  1360. package/scripts/check_always_budget.py +0 -532
  1361. package/scripts/check_artefact_checksums.py +0 -111
  1362. package/scripts/check_augment_description_cap.py +0 -79
  1363. package/scripts/check_augmentignore.py +0 -72
  1364. package/scripts/check_beta_review_markers.py +0 -127
  1365. package/scripts/check_cluster_patterns.py +0 -175
  1366. package/scripts/check_command_count_messaging.py +0 -158
  1367. package/scripts/check_condensation.py +0 -375
  1368. package/scripts/check_condensed_paths.py +0 -221
  1369. package/scripts/check_context_paths.py +0 -202
  1370. package/scripts/check_council_references.py +0 -228
  1371. package/scripts/check_discovery_determinism.py +0 -70
  1372. package/scripts/check_gate_paths.py +0 -117
  1373. package/scripts/check_module_management_neutral.py +0 -149
  1374. package/scripts/check_no_roadmap_refs.py +0 -155
  1375. package/scripts/check_one_off_location.py +0 -81
  1376. package/scripts/check_overlay_cascade_subdirs.py +0 -129
  1377. package/scripts/check_portability.py +0 -574
  1378. package/scripts/check_public_catalog_links.py +0 -125
  1379. package/scripts/check_public_links.py +0 -185
  1380. package/scripts/check_references.py +0 -541
  1381. package/scripts/check_release_includes_discovery.py +0 -61
  1382. package/scripts/check_release_pr_shape.py +0 -119
  1383. package/scripts/check_release_published.py +0 -145
  1384. package/scripts/check_reply_consistency.py +0 -169
  1385. package/scripts/check_roadmap_trackable.py +0 -114
  1386. package/scripts/check_role_doc_links.py +0 -110
  1387. package/scripts/check_safety_floor_untouched.py +0 -125
  1388. package/scripts/check_skill_requires.py +0 -143
  1389. package/scripts/check_template_pin_drift.py +0 -129
  1390. package/scripts/check_test_coverage_diff.py +0 -180
  1391. package/scripts/check_token_optimizer_freshness.py +0 -146
  1392. package/scripts/check_update_banner.py +0 -86
  1393. package/scripts/ci_time_ratio.py +0 -168
  1394. package/scripts/compile_router.py +0 -232
  1395. package/scripts/condense.py +0 -1649
  1396. package/scripts/condense_memory.py +0 -178
  1397. package/scripts/config/profiles.py +0 -188
  1398. package/scripts/config/session_profiles.py +0 -492
  1399. package/scripts/cost_by_conversation.py +0 -78
  1400. package/scripts/cost_summary.py +0 -97
  1401. package/scripts/council_cli.py +0 -2544
  1402. package/scripts/cross_repo_retrieve.py +0 -172
  1403. package/scripts/discovery_stats.py +0 -70
  1404. package/scripts/extract_audit_patterns.py +0 -202
  1405. package/scripts/first_run_gate_hook.py +0 -178
  1406. package/scripts/gen_discovery_baseline.py +0 -127
  1407. package/scripts/generate_catalog.py +0 -116
  1408. package/scripts/generate_index.py +0 -302
  1409. package/scripts/generate_ownership_matrix.py +0 -378
  1410. package/scripts/generate_pack_manifests.py +0 -183
  1411. package/scripts/hook_manifest.yaml +0 -234
  1412. package/scripts/hooks/dispatch_hook.py +0 -461
  1413. package/scripts/hooks/replay_hook.py +0 -144
  1414. package/scripts/hooks_doctor.py +0 -223
  1415. package/scripts/hooks_status.py +0 -157
  1416. package/scripts/install +0 -424
  1417. package/scripts/install-hooks.sh +0 -185
  1418. package/scripts/install.py +0 -5027
  1419. package/scripts/install.sh +0 -1140
  1420. package/scripts/inventory_abstraction_budget.py +0 -621
  1421. package/scripts/inventory_frontmatter.py +0 -164
  1422. package/scripts/inventory_meta_layers.py +0 -288
  1423. package/scripts/iron_law_sha.py +0 -107
  1424. package/scripts/linked_projects_list.py +0 -91
  1425. package/scripts/lint_agents_layout.py +0 -191
  1426. package/scripts/lint_agents_md.py +0 -208
  1427. package/scripts/lint_archived_skills.py +0 -159
  1428. package/scripts/lint_artefact_frontmatter.py +0 -180
  1429. package/scripts/lint_bench_ab.py +0 -172
  1430. package/scripts/lint_bench_corpus.py +0 -255
  1431. package/scripts/lint_command_tiers.py +0 -128
  1432. package/scripts/lint_commit_subjects.py +0 -139
  1433. package/scripts/lint_context_spine_usage.py +0 -137
  1434. package/scripts/lint_discovery_manifest.py +0 -136
  1435. package/scripts/lint_discovery_vocabulary.py +0 -156
  1436. package/scripts/lint_examples.py +0 -102
  1437. package/scripts/lint_explain_trace.py +0 -80
  1438. package/scripts/lint_featured_skills.py +0 -139
  1439. package/scripts/lint_framework_leakage.py +0 -375
  1440. package/scripts/lint_framework_leakage_allowlist.json +0 -575
  1441. package/scripts/lint_frontmatter_boilerplate.py +0 -77
  1442. package/scripts/lint_ghostwriter_source.py +0 -240
  1443. package/scripts/lint_handoffs.py +0 -217
  1444. package/scripts/lint_hook_concern_budget.py +0 -207
  1445. package/scripts/lint_hook_manifest.py +0 -217
  1446. package/scripts/lint_load_context.py +0 -196
  1447. package/scripts/lint_marketplace.py +0 -180
  1448. package/scripts/lint_marketplace_install_completeness.py +0 -188
  1449. package/scripts/lint_mcp_registry_manifest.py +0 -69
  1450. package/scripts/lint_media_policy_linkage.py +0 -140
  1451. package/scripts/lint_model_tier_coverage.py +0 -73
  1452. package/scripts/lint_namespace.py +0 -135
  1453. package/scripts/lint_no_new_atomic_commands.py +0 -180
  1454. package/scripts/lint_one_off_age.py +0 -184
  1455. package/scripts/lint_orchestration_dsl.py +0 -217
  1456. package/scripts/lint_pack_boundaries.py +0 -147
  1457. package/scripts/lint_pack_first_win.py +0 -103
  1458. package/scripts/lint_persona_governance.py +0 -164
  1459. package/scripts/lint_positioning.py +0 -143
  1460. package/scripts/lint_regression.py +0 -232
  1461. package/scripts/lint_roadmap_ci_steps.py +0 -186
  1462. package/scripts/lint_roadmap_complexity.py +0 -220
  1463. package/scripts/lint_role_experiences.py +0 -237
  1464. package/scripts/lint_rule_interactions.py +0 -170
  1465. package/scripts/lint_rule_tiers.py +0 -90
  1466. package/scripts/lint_showcase_sessions.py +0 -148
  1467. package/scripts/lint_skill_tools.py +0 -168
  1468. package/scripts/lint_topics_yaml.py +0 -89
  1469. package/scripts/lint_trust_coherence.py +0 -212
  1470. package/scripts/lint_value_dashboard.py +0 -218
  1471. package/scripts/mcp_parity_smoke.py +0 -164
  1472. package/scripts/mcp_registry_submit.sh +0 -187
  1473. package/scripts/mcp_server/__init__.py +0 -19
  1474. package/scripts/mcp_server/consumer_tool_catalog.json +0 -275
  1475. package/scripts/mcp_server/prompts.py +0 -441
  1476. package/scripts/mcp_server/resources.py +0 -201
  1477. package/scripts/mcp_server/tools.py +0 -838
  1478. package/scripts/measure_augment_budget.py +0 -214
  1479. package/scripts/measure_density.py +0 -232
  1480. package/scripts/measure_frugality_savings.py +0 -164
  1481. package/scripts/measure_markitdown_lift.py +0 -127
  1482. package/scripts/measure_patterns.py +0 -376
  1483. package/scripts/measure_projection_bytes.py +0 -159
  1484. package/scripts/measure_rule_budget.py +0 -347
  1485. package/scripts/measure_skill_reduction.py +0 -102
  1486. package/scripts/migrate_command_suggestions.py +0 -151
  1487. package/scripts/migrate_frontmatter_defaults.py +0 -245
  1488. package/scripts/mine_session.py +0 -279
  1489. package/scripts/move_artefact.py +0 -143
  1490. package/scripts/new_skill.py +0 -148
  1491. package/scripts/pack_mcp_content.py +0 -288
  1492. package/scripts/plan_physical_move.py +0 -353
  1493. package/scripts/print_required_checks.py +0 -196
  1494. package/scripts/probe_projection_fidelity.py +0 -202
  1495. package/scripts/profile_staleness_hook.py +0 -69
  1496. package/scripts/profile_use.py +0 -125
  1497. package/scripts/project_thin_rules.py +0 -168
  1498. package/scripts/prototype_lint_contradictions.py +0 -150
  1499. package/scripts/recruit_preflight.sh +0 -152
  1500. package/scripts/refine_ticket_detect.py +0 -646
  1501. package/scripts/release.py +0 -1049
  1502. package/scripts/render_benchmark_md.py +0 -312
  1503. package/scripts/render_value_md.py +0 -347
  1504. package/scripts/repro/repro_marketplace_install_gap.sh +0 -161
  1505. package/scripts/roadmap_progress_hook.py +0 -274
  1506. package/scripts/router_telemetry.py +0 -470
  1507. package/scripts/run_skill_evals.py +0 -185
  1508. package/scripts/runtime_registry.py +0 -166
  1509. package/scripts/schemas/command.schema.json +0 -178
  1510. package/scripts/schemas/rule.schema.json +0 -145
  1511. package/scripts/score_skill_selection.py +0 -198
  1512. package/scripts/skill_collision_clusters.py +0 -162
  1513. package/scripts/skill_discovery.py +0 -254
  1514. package/scripts/skill_linter.py +0 -3686
  1515. package/scripts/skill_overlap.py +0 -204
  1516. package/scripts/skill_preview.py +0 -179
  1517. package/scripts/skill_tools/audit_persona_coverage.py +0 -147
  1518. package/scripts/skill_tools/audit_user_type_coverage.py +0 -148
  1519. package/scripts/skill_tools/run_block_d_eval.py +0 -129
  1520. package/scripts/skill_tools/score_skill_relevance.py +0 -169
  1521. package/scripts/skill_tools/suggest_skill_for_task.py +0 -113
  1522. package/scripts/skill_trigger_eval.py +0 -682
  1523. package/scripts/skill_usage_collect.py +0 -191
  1524. package/scripts/skill_usage_report.py +0 -162
  1525. package/scripts/smoke/kernel.sh +0 -107
  1526. package/scripts/smoke/router.sh +0 -148
  1527. package/scripts/smoke/schema.sh +0 -71
  1528. package/scripts/smoke/skills.sh +0 -112
  1529. package/scripts/smoke_path_resolution.py +0 -93
  1530. package/scripts/smoke_quickstart.py +0 -144
  1531. package/scripts/snapshot_agent_outputs.py +0 -144
  1532. package/scripts/spotcheck_thin_root.py +0 -134
  1533. package/scripts/sync_agent_settings.py +0 -180
  1534. package/scripts/sync_github_metadata.py +0 -147
  1535. package/scripts/sync_gitignore.py +0 -291
  1536. package/scripts/telegraph_stats.py +0 -119
  1537. package/scripts/trigger_coverage.py +0 -129
  1538. package/scripts/update_counts.py +0 -195
  1539. package/scripts/update_prices.py +0 -125
  1540. package/scripts/validate_agent_settings.py +0 -124
  1541. package/scripts/validate_decision_engine.py +0 -136
  1542. package/scripts/validate_discovery_manifest.py +0 -94
  1543. package/scripts/validate_frontmatter.py +0 -571
  1544. package/scripts/verify_physical_move.py +0 -185
  1545. /package/{.agent-src → dist/agent-src}/contexts/augment-infrastructure.md +0 -0
  1546. /package/{.agent-src → dist/agent-src}/contexts/authority/destructive-mechanics.md +0 -0
  1547. /package/{.agent-src → dist/agent-src}/contexts/authority/kernel-rule-edits.md +0 -0
  1548. /package/{.agent-src → dist/agent-src}/contexts/authority/scope-mechanics.md +0 -0
  1549. /package/{.agent-src → dist/agent-src}/contexts/communication/rules-auto/guidelines-mechanics.md +0 -0
  1550. /package/{.agent-src → dist/agent-src}/contexts/communication/rules-auto/skill-quality-mechanics.md +0 -0
  1551. /package/{.agent-src → dist/agent-src}/contexts/communication/rules-auto/slash-command-routing-policy-mechanics.md +0 -0
  1552. /package/{.agent-src → dist/agent-src}/contexts/communication/rules-auto/think-before-action-mechanics.md +0 -0
  1553. /package/{.agent-src → dist/agent-src}/contexts/communication/rules-auto/token-efficiency-mechanics.md +0 -0
  1554. /package/{.agent-src → dist/agent-src}/contexts/communication/rules-auto/user-interaction-mechanics.md +0 -0
  1555. /package/{.agent-src → dist/agent-src}/contexts/contracts/agents-md-anatomy.md +0 -0
  1556. /package/{.agent-src → dist/agent-src}/contexts/contracts/command-suggestion-flow.md +0 -0
  1557. /package/{.agent-src → dist/agent-src}/contexts/contracts/frugality-charter.md +0 -0
  1558. /package/{.agent-src → dist/agent-src}/contexts/contracts/research-schema.md +0 -0
  1559. /package/{.agent-src → dist/agent-src}/contexts/documentation-hierarchy.md +0 -0
  1560. /package/{.agent-src → dist/agent-src}/contexts/execution/autonomy-detection.md +0 -0
  1561. /package/{.agent-src → dist/agent-src}/contexts/execution/autonomy-examples.md +0 -0
  1562. /package/{.agent-src → dist/agent-src}/contexts/execution/autonomy-mechanics.md +0 -0
  1563. /package/{.agent-src → dist/agent-src}/contexts/execution/cheap-question-mechanics.md +0 -0
  1564. /package/{.agent-src → dist/agent-src}/contexts/execution/interrupt-examples.md +0 -0
  1565. /package/{.agent-src → dist/agent-src}/contexts/execution/roadmap-process-loop.md +0 -0
  1566. /package/{.agent-src → dist/agent-src}/contexts/execution/verification-mechanics.md +0 -0
  1567. /package/{.agent-src → dist/agent-src}/contexts/judges/no-consolidate-rationale.md +0 -0
  1568. /package/{.agent-src → dist/agent-src}/contexts/judges/persona-voice-rubric.md +0 -0
  1569. /package/{.agent-src → dist/agent-src}/contexts/model-recommendations.md +0 -0
  1570. /package/{.agent-src → dist/agent-src}/contexts/override-system.md +0 -0
  1571. /package/{.agent-src → dist/agent-src}/contexts/skills-and-commands.md +0 -0
  1572. /package/{.agent-src → dist/agent-src}/contexts/subagent-configuration.md +0 -0
  1573. /package/{.agent-src → dist/agent-src}/ghostwriter/README.md +0 -0
  1574. /package/{.agent-src → dist/agent-src}/ghostwriter/fictional-fixture-v1.md +0 -0
  1575. /package/{.agent-src → dist/agent-src}/packs/README.md +0 -0
  1576. /package/{.agent-src → dist/agent-src}/packs/agency-delivery.yml +0 -0
  1577. /package/{.agent-src → dist/agent-src}/packs/content-engine.yml +0 -0
  1578. /package/{.agent-src → dist/agent-src}/packs/founder-mvp.yml +0 -0
  1579. /package/{.agent-src → dist/agent-src}/personas/_template-specialist/persona.md +0 -0
  1580. /package/{.agent-src → dist/agent-src}/personas/advisors/contrarian.md +0 -0
  1581. /package/{.agent-src → dist/agent-src}/personas/advisors/executor.md +0 -0
  1582. /package/{.agent-src → dist/agent-src}/personas/advisors/expansionist.md +0 -0
  1583. /package/{.agent-src → dist/agent-src}/personas/advisors/first-principles.md +0 -0
  1584. /package/{.agent-src → dist/agent-src}/personas/advisors/outsider.md +0 -0
  1585. /package/{.agent-src → dist/agent-src}/personas/ai-agent.md +0 -0
  1586. /package/{.agent-src → dist/agent-src}/personas/ai-video-technical-director.md +0 -0
  1587. /package/{.agent-src → dist/agent-src}/personas/backend-architect.md +0 -0
  1588. /package/{.agent-src → dist/agent-src}/personas/cmo.md +0 -0
  1589. /package/{.agent-src → dist/agent-src}/personas/critical-challenger.md +0 -0
  1590. /package/{.agent-src → dist/agent-src}/personas/customer-success-lead.md +0 -0
  1591. /package/{.agent-src → dist/agent-src}/personas/developer.md +0 -0
  1592. /package/{.agent-src → dist/agent-src}/personas/discovery-lead.md +0 -0
  1593. /package/{.agent-src → dist/agent-src}/personas/eloquent-tamer.md +0 -0
  1594. /package/{.agent-src → dist/agent-src}/personas/engineering-manager.md +0 -0
  1595. /package/{.agent-src → dist/agent-src}/personas/finance-partner.md +0 -0
  1596. /package/{.agent-src → dist/agent-src}/personas/frontend-engineer.md +0 -0
  1597. /package/{.agent-src → dist/agent-src}/personas/growth-pm.md +0 -0
  1598. /package/{.agent-src → dist/agent-src}/personas/hollywood-director.md +0 -0
  1599. /package/{.agent-src → dist/agent-src}/personas/people-strategist.md +0 -0
  1600. /package/{.agent-src → dist/agent-src}/personas/product-owner.md +0 -0
  1601. /package/{.agent-src → dist/agent-src}/personas/qa.md +0 -0
  1602. /package/{.agent-src → dist/agent-src}/personas/revops-maintainer.md +0 -0
  1603. /package/{.agent-src → dist/agent-src}/personas/revops.md +0 -0
  1604. /package/{.agent-src → dist/agent-src}/personas/security-engineer.md +0 -0
  1605. /package/{.agent-src → dist/agent-src}/personas/senior-engineer.md +0 -0
  1606. /package/{.agent-src → dist/agent-src}/personas/stakeholder.md +0 -0
  1607. /package/{.agent-src → dist/agent-src}/personas/strategist.md +0 -0
  1608. /package/{.agent-src → dist/agent-src}/personas/tech-writer.md +0 -0
  1609. /package/{.agent-src → dist/agent-src}/presets/README.md +0 -0
  1610. /package/{.agent-src → dist/agent-src}/presets/balanced.yml +0 -0
  1611. /package/{.agent-src → dist/agent-src}/presets/fast.yml +0 -0
  1612. /package/{.agent-src → dist/agent-src}/presets/strict.yml +0 -0
  1613. /package/{.agent-src → dist/agent-src}/profiles/README.md +0 -0
  1614. /package/{.agent-src → dist/agent-src}/rules/agent-authority.md +0 -0
  1615. /package/{.agent-src → dist/agent-src}/rules/analysis-skill-routing.md +0 -0
  1616. /package/{.agent-src → dist/agent-src}/rules/architecture.md +0 -0
  1617. /package/{.agent-src → dist/agent-src}/rules/artifact-drafting-protocol.md +0 -0
  1618. /package/{.agent-src → dist/agent-src}/rules/artifact-engagement-recording.md +0 -0
  1619. /package/{.agent-src → dist/agent-src}/rules/autonomous-execution.md +0 -0
  1620. /package/{.agent-src → dist/agent-src}/rules/cli-output-handling.md +0 -0
  1621. /package/{.agent-src → dist/agent-src}/rules/command-suggestion-policy.md +0 -0
  1622. /package/{.agent-src → dist/agent-src}/rules/commit-conventions.md +0 -0
  1623. /package/{.agent-src → dist/agent-src}/rules/context-hygiene.md +0 -0
  1624. /package/{.agent-src → dist/agent-src}/rules/copilot-routing.md +0 -0
  1625. /package/{.agent-src → dist/agent-src}/rules/devcontainer-routing.md +0 -0
  1626. /package/{.agent-src → dist/agent-src}/rules/docker-commands.md +0 -0
  1627. /package/{.agent-src → dist/agent-src}/rules/domain-safety-disclaimer.md +0 -0
  1628. /package/{.agent-src → dist/agent-src}/rules/domain-safety-pii.md +0 -0
  1629. /package/{.agent-src → dist/agent-src}/rules/domain-safety-retention.md +0 -0
  1630. /package/{.agent-src → dist/agent-src}/rules/downstream-changes.md +0 -0
  1631. /package/{.agent-src → dist/agent-src}/rules/engineering-safety-floor.md +0 -0
  1632. /package/{.agent-src → dist/agent-src}/rules/external-reference-deep-dive.md +0 -0
  1633. /package/{.agent-src → dist/agent-src}/rules/fast-path-marker-visibility.md +0 -0
  1634. /package/{.agent-src → dist/agent-src}/rules/finance-safety-floor.md +0 -0
  1635. /package/{.agent-src → dist/agent-src}/rules/framework-neutrality-in-generic-skills.md +0 -0
  1636. /package/{.agent-src → dist/agent-src}/rules/git-history-discipline.md +0 -0
  1637. /package/{.agent-src → dist/agent-src}/rules/guidelines.md +0 -0
  1638. /package/{.agent-src → dist/agent-src}/rules/improve-before-implement.md +0 -0
  1639. /package/{.agent-src → dist/agent-src}/rules/invite-challenge.md +0 -0
  1640. /package/{.agent-src → dist/agent-src}/rules/laravel-routing.md +0 -0
  1641. /package/{.agent-src → dist/agent-src}/rules/laravel-translations.md +0 -0
  1642. /package/{.agent-src → dist/agent-src}/rules/low-impact-corpus-privacy-floor.md +0 -0
  1643. /package/{.agent-src → dist/agent-src}/rules/markdown-safe-codeblocks.md +0 -0
  1644. /package/{.agent-src → dist/agent-src}/rules/media-sync-ground-truth.md +0 -0
  1645. /package/{.agent-src → dist/agent-src}/rules/minimal-safe-diff.md +0 -0
  1646. /package/{.agent-src → dist/agent-src}/rules/no-decorative-emojis-in-git-surfaces.md +0 -0
  1647. /package/{.agent-src → dist/agent-src}/rules/onboarding-gate.md +0 -0
  1648. /package/{.agent-src → dist/agent-src}/rules/package-ci-checks.md +0 -0
  1649. /package/{.agent-src → dist/agent-src}/rules/php-coding.md +0 -0
  1650. /package/{.agent-src → dist/agent-src}/rules/reviewer-awareness.md +0 -0
  1651. /package/{.agent-src → dist/agent-src}/rules/roadmap-ci-steps-policy.md +0 -0
  1652. /package/{.agent-src → dist/agent-src}/rules/role-mode-adherence.md +0 -0
  1653. /package/{.agent-src → dist/agent-src}/rules/rule-type-governance.md +0 -0
  1654. /package/{.agent-src → dist/agent-src}/rules/runtime-safety.md +0 -0
  1655. /package/{.agent-src → dist/agent-src}/rules/security-sensitive-stop.md +0 -0
  1656. /package/{.agent-src → dist/agent-src}/rules/size-enforcement.md +0 -0
  1657. /package/{.agent-src → dist/agent-src}/rules/skill-improvement-trigger.md +0 -0
  1658. /package/{.agent-src → dist/agent-src}/rules/skill-quality.md +0 -0
  1659. /package/{.agent-src → dist/agent-src}/rules/slash-command-routing-policy.md +0 -0
  1660. /package/{.agent-src → dist/agent-src}/rules/strategy-safety-floor.md +0 -0
  1661. /package/{.agent-src → dist/agent-src}/rules/symfony-routing.md +0 -0
  1662. /package/{.agent-src → dist/agent-src}/rules/telegraph-speak.md +0 -0
  1663. /package/{.agent-src → dist/agent-src}/rules/think-before-action.md +0 -0
  1664. /package/{.agent-src → dist/agent-src}/rules/token-efficiency.md +0 -0
  1665. /package/{.agent-src → dist/agent-src}/rules/token-optimizer-maintenance.md +0 -0
  1666. /package/{.agent-src → dist/agent-src}/rules/tool-safety.md +0 -0
  1667. /package/{.agent-src → dist/agent-src}/rules/ui-audit-gate.md +0 -0
  1668. /package/{.agent-src → dist/agent-src}/rules/upstream-proposal.md +0 -0
  1669. /package/{.agent-src → dist/agent-src}/rules/user-interaction.md +0 -0
  1670. /package/{.agent-src → dist/agent-src}/scripts/scan-seeder-violations.php +0 -0
  1671. /package/{.agent-src → dist/agent-src}/skills/activation-design/SKILL.md +0 -0
  1672. /package/{.agent-src → dist/agent-src}/skills/adr-create/SKILL.md +0 -0
  1673. /package/{.agent-src → dist/agent-src}/skills/adversarial-review/SKILL.md +0 -0
  1674. /package/{.agent-src → dist/agent-src}/skills/agent-docs-writing/SKILL.md +0 -0
  1675. /package/{.agent-src → dist/agent-src}/skills/ai-council/SKILL.md +0 -0
  1676. /package/{.agent-src → dist/agent-src}/skills/analysis-autonomous-mode/SKILL.md +0 -0
  1677. /package/{.agent-src → dist/agent-src}/skills/analysis-skill-router/SKILL.md +0 -0
  1678. /package/{.agent-src → dist/agent-src}/skills/api-testing/SKILL.md +0 -0
  1679. /package/{.agent-src → dist/agent-src}/skills/architecture-review-lens/SKILL.md +0 -0
  1680. /package/{.agent-src → dist/agent-src}/skills/artisan-commands/SKILL.md +0 -0
  1681. /package/{.agent-src → dist/agent-src}/skills/async-python-patterns/SKILL.md +0 -0
  1682. /package/{.agent-src → dist/agent-src}/skills/aws-infrastructure/SKILL.md +0 -0
  1683. /package/{.agent-src → dist/agent-src}/skills/blast-radius-analyzer/SKILL.md +0 -0
  1684. /package/{.agent-src → dist/agent-src}/skills/bug-analyzer/SKILL.md +0 -0
  1685. /package/{.agent-src → dist/agent-src}/skills/build-buy-partner/SKILL.md +0 -0
  1686. /package/{.agent-src → dist/agent-src}/skills/canvas-design/SKILL.md +0 -0
  1687. /package/{.agent-src → dist/agent-src}/skills/canvas-design/evals/triggers.json +0 -0
  1688. /package/{.agent-src → dist/agent-src}/skills/churn-prevention/SKILL.md +0 -0
  1689. /package/{.agent-src → dist/agent-src}/skills/code-refactoring/SKILL.md +0 -0
  1690. /package/{.agent-src → dist/agent-src}/skills/command-routing/SKILL.md +0 -0
  1691. /package/{.agent-src → dist/agent-src}/skills/comp-banding/SKILL.md +0 -0
  1692. /package/{.agent-src → dist/agent-src}/skills/competitive-moat-analysis/SKILL.md +0 -0
  1693. /package/{.agent-src → dist/agent-src}/skills/competitive-positioning/SKILL.md +0 -0
  1694. /package/{.agent-src → dist/agent-src}/skills/composer-packages/SKILL.md +0 -0
  1695. /package/{.agent-src → dist/agent-src}/skills/content-funnel-design/SKILL.md +0 -0
  1696. /package/{.agent-src → dist/agent-src}/skills/context-authoring/SKILL.md +0 -0
  1697. /package/{.agent-src → dist/agent-src}/skills/contracts-cognition/SKILL.md +0 -0
  1698. /package/{.agent-src → dist/agent-src}/skills/conventional-commits-writing/SKILL.md +0 -0
  1699. /package/{.agent-src → dist/agent-src}/skills/copilot-agents-optimization/SKILL.md +0 -0
  1700. /package/{.agent-src → dist/agent-src}/skills/copilot-config/SKILL.md +0 -0
  1701. /package/{.agent-src → dist/agent-src}/skills/customer-research/SKILL.md +0 -0
  1702. /package/{.agent-src → dist/agent-src}/skills/data-flow-mapper/SKILL.md +0 -0
  1703. /package/{.agent-src → dist/agent-src}/skills/data-handling-judgment/SKILL.md +0 -0
  1704. /package/{.agent-src → dist/agent-src}/skills/dcf-modeling/SKILL.md +0 -0
  1705. /package/{.agent-src → dist/agent-src}/skills/deal-qualification-meddic/SKILL.md +0 -0
  1706. /package/{.agent-src → dist/agent-src}/skills/decision-record/SKILL.md +0 -0
  1707. /package/{.agent-src → dist/agent-src}/skills/defense-in-depth/SKILL.md +0 -0
  1708. /package/{.agent-src → dist/agent-src}/skills/dependency-upgrade/SKILL.md +0 -0
  1709. /package/{.agent-src → dist/agent-src}/skills/description-assist/SKILL.md +0 -0
  1710. /package/{.agent-src → dist/agent-src}/skills/devcontainer/SKILL.md +0 -0
  1711. /package/{.agent-src → dist/agent-src}/skills/developer-like-execution/SKILL.md +0 -0
  1712. /package/{.agent-src → dist/agent-src}/skills/discovery-interview/SKILL.md +0 -0
  1713. /package/{.agent-src → dist/agent-src}/skills/doc-coauthoring/SKILL.md +0 -0
  1714. /package/{.agent-src → dist/agent-src}/skills/doc-coauthoring/evals/triggers.json +0 -0
  1715. /package/{.agent-src → dist/agent-src}/skills/docker/SKILL.md +0 -0
  1716. /package/{.agent-src → dist/agent-src}/skills/editorial-calendar/SKILL.md +0 -0
  1717. /package/{.agent-src → dist/agent-src}/skills/eloquent/SKILL.md +0 -0
  1718. /package/{.agent-src → dist/agent-src}/skills/eloquent/evals/triggers.json +0 -0
  1719. /package/{.agent-src → dist/agent-src}/skills/error-handling-patterns/SKILL.md +0 -0
  1720. /package/{.agent-src → dist/agent-src}/skills/estimate-ticket/SKILL.md +0 -0
  1721. /package/{.agent-src → dist/agent-src}/skills/estimate-ticket/evals/output-schema.yml +0 -0
  1722. /package/{.agent-src → dist/agent-src}/skills/estimate-ticket/evals/triggers.json +0 -0
  1723. /package/{.agent-src → dist/agent-src}/skills/expansion-playbook/SKILL.md +0 -0
  1724. /package/{.agent-src → dist/agent-src}/skills/file-editor/SKILL.md +0 -0
  1725. /package/{.agent-src → dist/agent-src}/skills/finishing-a-development-branch/SKILL.md +0 -0
  1726. /package/{.agent-src → dist/agent-src}/skills/forecast-accuracy/SKILL.md +0 -0
  1727. /package/{.agent-src → dist/agent-src}/skills/forecasting/SKILL.md +0 -0
  1728. /package/{.agent-src → dist/agent-src}/skills/form-handler/SKILL.md +0 -0
  1729. /package/{.agent-src → dist/agent-src}/skills/fundraising-narrative/SKILL.md +0 -0
  1730. /package/{.agent-src → dist/agent-src}/skills/funnel-analysis/SKILL.md +0 -0
  1731. /package/{.agent-src → dist/agent-src}/skills/git-workflow/SKILL.md +0 -0
  1732. /package/{.agent-src → dist/agent-src}/skills/github-ci/SKILL.md +0 -0
  1733. /package/{.agent-src → dist/agent-src}/skills/grafana/SKILL.md +0 -0
  1734. /package/{.agent-src → dist/agent-src}/skills/gtm-launch/SKILL.md +0 -0
  1735. /package/{.agent-src → dist/agent-src}/skills/guideline-writing/SKILL.md +0 -0
  1736. /package/{.agent-src → dist/agent-src}/skills/hiring-loop-design/SKILL.md +0 -0
  1737. /package/{.agent-src → dist/agent-src}/skills/image-analyser/SKILL.md +0 -0
  1738. /package/{.agent-src → dist/agent-src}/skills/image-analyser/canon-spec.md +0 -0
  1739. /package/{.agent-src → dist/agent-src}/skills/image-analyser/evals/triggers.json +0 -0
  1740. /package/{.agent-src → dist/agent-src}/skills/image-creator/SKILL.md +0 -0
  1741. /package/{.agent-src → dist/agent-src}/skills/image-creator/evals/triggers.json +0 -0
  1742. /package/{.agent-src → dist/agent-src}/skills/incident-commander/SKILL.md +0 -0
  1743. /package/{.agent-src → dist/agent-src}/skills/jobs-events/SKILL.md +0 -0
  1744. /package/{.agent-src → dist/agent-src}/skills/judge-bug-hunter/SKILL.md +0 -0
  1745. /package/{.agent-src → dist/agent-src}/skills/judge-code-quality/SKILL.md +0 -0
  1746. /package/{.agent-src → dist/agent-src}/skills/judge-security-auditor/SKILL.md +0 -0
  1747. /package/{.agent-src → dist/agent-src}/skills/judge-test-coverage/SKILL.md +0 -0
  1748. /package/{.agent-src → dist/agent-src}/skills/laravel/SKILL.md +0 -0
  1749. /package/{.agent-src → dist/agent-src}/skills/laravel-api-endpoint/SKILL.md +0 -0
  1750. /package/{.agent-src → dist/agent-src}/skills/laravel-dto/SKILL.md +0 -0
  1751. /package/{.agent-src → dist/agent-src}/skills/laravel-horizon/SKILL.md +0 -0
  1752. /package/{.agent-src → dist/agent-src}/skills/laravel-mail/SKILL.md +0 -0
  1753. /package/{.agent-src → dist/agent-src}/skills/laravel-middleware/SKILL.md +0 -0
  1754. /package/{.agent-src → dist/agent-src}/skills/laravel-migration/SKILL.md +0 -0
  1755. /package/{.agent-src → dist/agent-src}/skills/laravel-notifications/SKILL.md +0 -0
  1756. /package/{.agent-src → dist/agent-src}/skills/laravel-pennant/SKILL.md +0 -0
  1757. /package/{.agent-src → dist/agent-src}/skills/laravel-pulse/SKILL.md +0 -0
  1758. /package/{.agent-src → dist/agent-src}/skills/laravel-reverb/SKILL.md +0 -0
  1759. /package/{.agent-src → dist/agent-src}/skills/laravel-scheduling/SKILL.md +0 -0
  1760. /package/{.agent-src → dist/agent-src}/skills/laravel-validation/SKILL.md +0 -0
  1761. /package/{.agent-src → dist/agent-src}/skills/laravel-websocket/SKILL.md +0 -0
  1762. /package/{.agent-src → dist/agent-src}/skills/launch-readiness/SKILL.md +0 -0
  1763. /package/{.agent-src → dist/agent-src}/skills/learning-to-rule-or-skill/SKILL.md +0 -0
  1764. /package/{.agent-src → dist/agent-src}/skills/livewire-architect/SKILL.md +0 -0
  1765. /package/{.agent-src → dist/agent-src}/skills/logging-monitoring/SKILL.md +0 -0
  1766. /package/{.agent-src → dist/agent-src}/skills/market-entry-analysis/SKILL.md +0 -0
  1767. /package/{.agent-src → dist/agent-src}/skills/markitdown/SKILL.md +0 -0
  1768. /package/{.agent-src → dist/agent-src}/skills/mcp/SKILL.md +0 -0
  1769. /package/{.agent-src → dist/agent-src}/skills/mcp-builder/SKILL.md +0 -0
  1770. /package/{.agent-src → dist/agent-src}/skills/memory-consolidation/SKILL.md +0 -0
  1771. /package/{.agent-src → dist/agent-src}/skills/messaging-architecture/SKILL.md +0 -0
  1772. /package/{.agent-src → dist/agent-src}/skills/migration-architect/SKILL.md +0 -0
  1773. /package/{.agent-src → dist/agent-src}/skills/mobile-e2e-strategy/SKILL.md +0 -0
  1774. /package/{.agent-src → dist/agent-src}/skills/module-detect-on-the-fly/SKILL.md +0 -0
  1775. /package/{.agent-src → dist/agent-src}/skills/module-management/SKILL.md +0 -0
  1776. /package/{.agent-src → dist/agent-src}/skills/multi-tenancy/SKILL.md +0 -0
  1777. /package/{.agent-src → dist/agent-src}/skills/nextjs-patterns/SKILL.md +0 -0
  1778. /package/{.agent-src → dist/agent-src}/skills/okr-tree-modeling/SKILL.md +0 -0
  1779. /package/{.agent-src → dist/agent-src}/skills/onboarding-design/SKILL.md +0 -0
  1780. /package/{.agent-src → dist/agent-src}/skills/onboarding-program/SKILL.md +0 -0
  1781. /package/{.agent-src → dist/agent-src}/skills/one-on-one-cadence/SKILL.md +0 -0
  1782. /package/{.agent-src → dist/agent-src}/skills/openapi/SKILL.md +0 -0
  1783. /package/{.agent-src → dist/agent-src}/skills/org-design/SKILL.md +0 -0
  1784. /package/{.agent-src → dist/agent-src}/skills/override-management/SKILL.md +0 -0
  1785. /package/{.agent-src → dist/agent-src}/skills/perf-feedback-craft/SKILL.md +0 -0
  1786. /package/{.agent-src → dist/agent-src}/skills/performance/SKILL.md +0 -0
  1787. /package/{.agent-src → dist/agent-src}/skills/performance-analysis/SKILL.md +0 -0
  1788. /package/{.agent-src → dist/agent-src}/skills/pest-testing/SKILL.md +0 -0
  1789. /package/{.agent-src → dist/agent-src}/skills/php-coder/SKILL.md +0 -0
  1790. /package/{.agent-src → dist/agent-src}/skills/php-coder/evals/triggers.json +0 -0
  1791. /package/{.agent-src → dist/agent-src}/skills/php-debugging/SKILL.md +0 -0
  1792. /package/{.agent-src → dist/agent-src}/skills/php-service/SKILL.md +0 -0
  1793. /package/{.agent-src → dist/agent-src}/skills/pipeline-strategy/SKILL.md +0 -0
  1794. /package/{.agent-src → dist/agent-src}/skills/pixar-storyteller/SKILL.md +0 -0
  1795. /package/{.agent-src → dist/agent-src}/skills/playwright-architect/SKILL.md +0 -0
  1796. /package/{.agent-src → dist/agent-src}/skills/playwright-testing/SKILL.md +0 -0
  1797. /package/{.agent-src → dist/agent-src}/skills/po-discovery/SKILL.md +0 -0
  1798. /package/{.agent-src → dist/agent-src}/skills/positioning-strategy/SKILL.md +0 -0
  1799. /package/{.agent-src → dist/agent-src}/skills/prediction-pool-optimizer/SKILL.md +0 -0
  1800. /package/{.agent-src → dist/agent-src}/skills/prediction-pool-optimizer/evals/triggers.json +0 -0
  1801. /package/{.agent-src → dist/agent-src}/skills/prediction-pool-optimizer/reference/ev-fixtures.md +0 -0
  1802. /package/{.agent-src → dist/agent-src}/skills/prediction-pool-optimizer/reference/odds-and-bonus.md +0 -0
  1803. /package/{.agent-src → dist/agent-src}/skills/privacy-review/SKILL.md +0 -0
  1804. /package/{.agent-src → dist/agent-src}/skills/project-analysis-core/SKILL.md +0 -0
  1805. /package/{.agent-src → dist/agent-src}/skills/project-analysis-hypothesis-driven/SKILL.md +0 -0
  1806. /package/{.agent-src → dist/agent-src}/skills/project-analysis-laravel/SKILL.md +0 -0
  1807. /package/{.agent-src → dist/agent-src}/skills/project-analysis-nextjs/SKILL.md +0 -0
  1808. /package/{.agent-src → dist/agent-src}/skills/project-analysis-node-express/SKILL.md +0 -0
  1809. /package/{.agent-src → dist/agent-src}/skills/project-analysis-react/SKILL.md +0 -0
  1810. /package/{.agent-src → dist/agent-src}/skills/project-analysis-symfony/SKILL.md +0 -0
  1811. /package/{.agent-src → dist/agent-src}/skills/project-analysis-zend-laminas/SKILL.md +0 -0
  1812. /package/{.agent-src → dist/agent-src}/skills/project-analyzer/SKILL.md +0 -0
  1813. /package/{.agent-src → dist/agent-src}/skills/project-docs/SKILL.md +0 -0
  1814. /package/{.agent-src → dist/agent-src}/skills/prompt-engineering-patterns/SKILL.md +0 -0
  1815. /package/{.agent-src → dist/agent-src}/skills/prompt-optimizer/SKILL.md +0 -0
  1816. /package/{.agent-src → dist/agent-src}/skills/quality-tools/SKILL.md +0 -0
  1817. /package/{.agent-src → dist/agent-src}/skills/react-native-setup/SKILL.md +0 -0
  1818. /package/{.agent-src → dist/agent-src}/skills/receiving-code-review/SKILL.md +0 -0
  1819. /package/{.agent-src → dist/agent-src}/skills/refine-prompt/SKILL.md +0 -0
  1820. /package/{.agent-src → dist/agent-src}/skills/refine-ticket/SKILL.md +0 -0
  1821. /package/{.agent-src → dist/agent-src}/skills/refine-ticket/detection-map.yml +0 -0
  1822. /package/{.agent-src → dist/agent-src}/skills/refine-ticket/evals/output-schema.yml +0 -0
  1823. /package/{.agent-src → dist/agent-src}/skills/refine-ticket/evals/triggers.json +0 -0
  1824. /package/{.agent-src → dist/agent-src}/skills/release-comms/SKILL.md +0 -0
  1825. /package/{.agent-src → dist/agent-src}/skills/repomix-packer/SKILL.md +0 -0
  1826. /package/{.agent-src → dist/agent-src}/skills/requesting-code-review/SKILL.md +0 -0
  1827. /package/{.agent-src → dist/agent-src}/skills/retention-loops/SKILL.md +0 -0
  1828. /package/{.agent-src → dist/agent-src}/skills/review-routing/SKILL.md +0 -0
  1829. /package/{.agent-src → dist/agent-src}/skills/rice-prioritization/SKILL.md +0 -0
  1830. /package/{.agent-src → dist/agent-src}/skills/risk-officer/SKILL.md +0 -0
  1831. /package/{.agent-src → dist/agent-src}/skills/roadmap-writing/SKILL.md +0 -0
  1832. /package/{.agent-src → dist/agent-src}/skills/rtk-output-filtering/SKILL.md +0 -0
  1833. /package/{.agent-src → dist/agent-src}/skills/runway-cognition/SKILL.md +0 -0
  1834. /package/{.agent-src → dist/agent-src}/skills/scenario-modeling/SKILL.md +0 -0
  1835. /package/{.agent-src → dist/agent-src}/skills/secrets-management/SKILL.md +0 -0
  1836. /package/{.agent-src → dist/agent-src}/skills/security/SKILL.md +0 -0
  1837. /package/{.agent-src → dist/agent-src}/skills/security-audit/SKILL.md +0 -0
  1838. /package/{.agent-src → dist/agent-src}/skills/sequential-thinking/SKILL.md +0 -0
  1839. /package/{.agent-src → dist/agent-src}/skills/skill-improvement-pipeline/SKILL.md +0 -0
  1840. /package/{.agent-src → dist/agent-src}/skills/skill-management/SKILL.md +0 -0
  1841. /package/{.agent-src → dist/agent-src}/skills/skill-reviewer/SKILL.md +0 -0
  1842. /package/{.agent-src → dist/agent-src}/skills/skill-writing/SKILL.md +0 -0
  1843. /package/{.agent-src → dist/agent-src}/skills/skill-writing/evals/triggers.json +0 -0
  1844. /package/{.agent-src → dist/agent-src}/skills/stakeholder-tradeoff/SKILL.md +0 -0
  1845. /package/{.agent-src → dist/agent-src}/skills/subagent-orchestration/SKILL.md +0 -0
  1846. /package/{.agent-src → dist/agent-src}/skills/subagent-orchestration/prompts/README.md +0 -0
  1847. /package/{.agent-src → dist/agent-src}/skills/subagent-orchestration/prompts/do-and-judge-two-stage.md +0 -0
  1848. /package/{.agent-src → dist/agent-src}/skills/subagent-orchestration/prompts/do-and-judge.md +0 -0
  1849. /package/{.agent-src → dist/agent-src}/skills/subagent-orchestration/prompts/do-competitively.md +0 -0
  1850. /package/{.agent-src → dist/agent-src}/skills/subagent-orchestration/prompts/do-in-parallel.md +0 -0
  1851. /package/{.agent-src → dist/agent-src}/skills/subagent-orchestration/prompts/do-in-steps.md +0 -0
  1852. /package/{.agent-src → dist/agent-src}/skills/subagent-orchestration/prompts/do-in-worktrees.md +0 -0
  1853. /package/{.agent-src → dist/agent-src}/skills/subagent-orchestration/prompts/judge-with-debate.md +0 -0
  1854. /package/{.agent-src → dist/agent-src}/skills/subagent-orchestration/schemas/subagent-status.json +0 -0
  1855. /package/{.agent-src → dist/agent-src}/skills/symfony-workflow/SKILL.md +0 -0
  1856. /package/{.agent-src → dist/agent-src}/skills/systematic-debugging/SKILL.md +0 -0
  1857. /package/{.agent-src → dist/agent-src}/skills/tech-debt-tracker/SKILL.md +0 -0
  1858. /package/{.agent-src → dist/agent-src}/skills/terraform/SKILL.md +0 -0
  1859. /package/{.agent-src → dist/agent-src}/skills/terragrunt/SKILL.md +0 -0
  1860. /package/{.agent-src → dist/agent-src}/skills/test-driven-development/SKILL.md +0 -0
  1861. /package/{.agent-src → dist/agent-src}/skills/test-performance/SKILL.md +0 -0
  1862. /package/{.agent-src → dist/agent-src}/skills/testing-anti-patterns/SKILL.md +0 -0
  1863. /package/{.agent-src → dist/agent-src}/skills/testing-anti-patterns/process-anti-patterns.md +0 -0
  1864. /package/{.agent-src → dist/agent-src}/skills/throughput-vs-morale-tradeoff/SKILL.md +0 -0
  1865. /package/{.agent-src → dist/agent-src}/skills/token-optimizer/SKILL.md +0 -0
  1866. /package/{.agent-src → dist/agent-src}/skills/traefik/SKILL.md +0 -0
  1867. /package/{.agent-src → dist/agent-src}/skills/ui-component-architect/SKILL.md +0 -0
  1868. /package/{.agent-src → dist/agent-src}/skills/unit-economics-modeling/SKILL.md +0 -0
  1869. /package/{.agent-src → dist/agent-src}/skills/universal-project-analysis/SKILL.md +0 -0
  1870. /package/{.agent-src → dist/agent-src}/skills/using-git-worktrees/SKILL.md +0 -0
  1871. /package/{.agent-src → dist/agent-src}/skills/validate-feature-fit/SKILL.md +0 -0
  1872. /package/{.agent-src → dist/agent-src}/skills/verify-completion-evidence/SKILL.md +0 -0
  1873. /package/{.agent-src → dist/agent-src}/skills/video-director/SKILL.md +0 -0
  1874. /package/{.agent-src → dist/agent-src}/skills/vision-articulation/SKILL.md +0 -0
  1875. /package/{.agent-src → dist/agent-src}/skills/voc-extract/SKILL.md +0 -0
  1876. /package/{.agent-src → dist/agent-src}/skills/voice-and-tone-design/SKILL.md +0 -0
  1877. /package/{.agent-src → dist/agent-src}/templates/agent-settings.md +0 -0
  1878. /package/{.agent-src → dist/agent-src}/templates/agents/.gitattributes.fragment +0 -0
  1879. /package/{.agent-src → dist/agent-src}/templates/agents/memory/architecture-decisions.example.yml +0 -0
  1880. /package/{.agent-src → dist/agent-src}/templates/agents/memory/domain-invariants.example.yml +0 -0
  1881. /package/{.agent-src → dist/agent-src}/templates/agents/memory/historical-patterns.example.yml +0 -0
  1882. /package/{.agent-src → dist/agent-src}/templates/agents/memory/incident-learnings.example.yml +0 -0
  1883. /package/{.agent-src → dist/agent-src}/templates/agents/memory/ownership.example.yml +0 -0
  1884. /package/{.agent-src → dist/agent-src}/templates/agents/memory/product-rules.example.yml +0 -0
  1885. /package/{.agent-src → dist/agent-src}/templates/contexts/auth-model.md +0 -0
  1886. /package/{.agent-src → dist/agent-src}/templates/contexts/data-sensitivity.md +0 -0
  1887. /package/{.agent-src → dist/agent-src}/templates/contexts/deployment-order.md +0 -0
  1888. /package/{.agent-src → dist/agent-src}/templates/contexts/observability.md +0 -0
  1889. /package/{.agent-src → dist/agent-src}/templates/contexts/tenant-boundaries.md +0 -0
  1890. /package/{.agent-src → dist/agent-src}/templates/contexts.md +0 -0
  1891. /package/{.agent-src → dist/agent-src}/templates/features.md +0 -0
  1892. /package/{.agent-src → dist/agent-src}/templates/github-workflows/memory-hygiene.yml +0 -0
  1893. /package/{.agent-src → dist/agent-src}/templates/github-workflows/pr-risk-review.yml +0 -0
  1894. /package/{.agent-src → dist/agent-src}/templates/github-workflows/roadmap-progress-check.yml +0 -0
  1895. /package/{.agent-src → dist/agent-src}/templates/overrides/command.md +0 -0
  1896. /package/{.agent-src → dist/agent-src}/templates/overrides/guideline.md +0 -0
  1897. /package/{.agent-src → dist/agent-src}/templates/overrides/rule.md +0 -0
  1898. /package/{.agent-src → dist/agent-src}/templates/overrides/skill.md +0 -0
  1899. /package/{.agent-src → dist/agent-src}/templates/overrides/template.md +0 -0
  1900. /package/{.agent-src → dist/agent-src}/templates/roadmaps.md +0 -0
  1901. /package/{.agent-src → dist/agent-src}/templates/scripts/README.md +0 -0
  1902. /package/{.agent-src → dist/agent-src}/templates/scripts/check_memory.py +0 -0
  1903. /package/{.agent-src → dist/agent-src}/templates/scripts/check_memory_proposal.py +0 -0
  1904. /package/{.agent-src → dist/agent-src}/templates/scripts/historical-bug-patterns.example.yml +0 -0
  1905. /package/{.agent-src → dist/agent-src}/templates/scripts/implement_ticket/__init__.py +0 -0
  1906. /package/{.agent-src → dist/agent-src}/templates/scripts/implement_ticket/__main__.py +0 -0
  1907. /package/{.agent-src → dist/agent-src}/templates/scripts/memory_hash.py +0 -0
  1908. /package/{.agent-src → dist/agent-src}/templates/scripts/memory_lookup.py +0 -0
  1909. /package/{.agent-src → dist/agent-src}/templates/scripts/memory_report.py +0 -0
  1910. /package/{.agent-src → dist/agent-src}/templates/scripts/memory_signal.py +0 -0
  1911. /package/{.agent-src → dist/agent-src}/templates/scripts/memory_status.py +0 -0
  1912. /package/{.agent-src → dist/agent-src}/templates/scripts/ownership-map.example.yml +0 -0
  1913. /package/{.agent-src → dist/agent-src}/templates/scripts/pr-risk-config.example.yml +0 -0
  1914. /package/{.agent-src → dist/agent-src}/templates/scripts/pr_review_routing.py +0 -0
  1915. /package/{.agent-src → dist/agent-src}/templates/scripts/pr_risk_review.py +0 -0
  1916. /package/{.agent-src → dist/agent-src}/templates/scripts/telemetry/__init__.py +0 -0
  1917. /package/{.agent-src → dist/agent-src}/templates/scripts/telemetry/aggregator.py +0 -0
  1918. /package/{.agent-src → dist/agent-src}/templates/scripts/telemetry/boundary.py +0 -0
  1919. /package/{.agent-src → dist/agent-src}/templates/scripts/telemetry/engagement.py +0 -0
  1920. /package/{.agent-src → dist/agent-src}/templates/scripts/telemetry/report_renderer.py +0 -0
  1921. /package/{.agent-src → dist/agent-src}/templates/scripts/telemetry/settings.py +0 -0
  1922. /package/{.agent-src → dist/agent-src}/templates/scripts/telemetry_record.py +0 -0
  1923. /package/{.agent-src → dist/agent-src}/templates/scripts/telemetry_report.py +0 -0
  1924. /package/{.agent-src → dist/agent-src}/templates/scripts/telemetry_status.py +0 -0
  1925. /package/{.agent-src → dist/agent-src}/templates/scripts/tier_usage_report.py +0 -0
  1926. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/__init__.py +0 -0
  1927. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/__main__.py +0 -0
  1928. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/_lib/__init__.py +0 -0
  1929. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/_lib/agent_settings.py +0 -0
  1930. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/_lib/user_global_paths.py +0 -0
  1931. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/cli.py +0 -0
  1932. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/cli_args.py +0 -0
  1933. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/delivery_state.py +0 -0
  1934. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/directives/__init__.py +0 -0
  1935. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/directives/backend/__init__.py +0 -0
  1936. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/directives/backend/analyze.py +0 -0
  1937. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/directives/backend/implement.py +0 -0
  1938. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/directives/backend/memory.py +0 -0
  1939. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/directives/backend/plan.py +0 -0
  1940. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/directives/backend/refine.py +0 -0
  1941. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/directives/backend/report.py +0 -0
  1942. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/directives/backend/test.py +0 -0
  1943. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/directives/backend/verify.py +0 -0
  1944. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/directives/mixed/__init__.py +0 -0
  1945. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/directives/mixed/contract.py +0 -0
  1946. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/directives/mixed/stitch.py +0 -0
  1947. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/directives/mixed/ui.py +0 -0
  1948. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/directives/ui/__init__.py +0 -0
  1949. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/directives/ui/_passthrough.py +0 -0
  1950. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/directives/ui/apply.py +0 -0
  1951. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/directives/ui/audit.py +0 -0
  1952. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/directives/ui/design.py +0 -0
  1953. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/directives/ui_trivial/__init__.py +0 -0
  1954. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/directives/ui_trivial/_skipped.py +0 -0
  1955. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/directives/ui_trivial/apply.py +0 -0
  1956. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/directives/ui_trivial/refine.py +0 -0
  1957. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/directives/ui_trivial/report.py +0 -0
  1958. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/directives/ui_trivial/test.py +0 -0
  1959. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/dispatcher.py +0 -0
  1960. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/emitters.py +0 -0
  1961. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/errors.py +0 -0
  1962. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/hook_bootstrap.py +0 -0
  1963. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/hooks/__init__.py +0 -0
  1964. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/hooks/builtin/__init__.py +0 -0
  1965. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/hooks/builtin/_chat_history_base.py +0 -0
  1966. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/hooks/builtin/chat_history_append.py +0 -0
  1967. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/hooks/builtin/chat_history_halt_append.py +0 -0
  1968. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/hooks/builtin/decision_gate.py +0 -0
  1969. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/hooks/builtin/decision_trace.py +0 -0
  1970. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/hooks/builtin/directive_set_guard.py +0 -0
  1971. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/hooks/builtin/halt_surface_audit.py +0 -0
  1972. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/hooks/builtin/memory_visibility.py +0 -0
  1973. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/hooks/builtin/state_shape_validation.py +0 -0
  1974. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/hooks/builtin/trace.py +0 -0
  1975. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/hooks/context.py +0 -0
  1976. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/hooks/events.py +0 -0
  1977. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/hooks/exceptions.py +0 -0
  1978. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/hooks/registry.py +0 -0
  1979. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/hooks/runner.py +0 -0
  1980. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/hooks/settings.py +0 -0
  1981. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/input_builders.py +0 -0
  1982. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/intent/__init__.py +0 -0
  1983. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/intent/classify.py +0 -0
  1984. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/migration/__init__.py +0 -0
  1985. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/migration/v0_to_v1.py +0 -0
  1986. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/persona_policy.py +0 -0
  1987. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/resolvers/__init__.py +0 -0
  1988. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/resolvers/diff.py +0 -0
  1989. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/resolvers/file.py +0 -0
  1990. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/resolvers/prompt.py +0 -0
  1991. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/scoring/__init__.py +0 -0
  1992. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/scoring/confidence.py +0 -0
  1993. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/scoring/decision_engine.py +0 -0
  1994. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/scoring/decision_trace.py +0 -0
  1995. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/scoring/memory_visibility.py +0 -0
  1996. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/stack/__init__.py +0 -0
  1997. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/stack/detect.py +0 -0
  1998. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/state.py +0 -0
  1999. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/state_io.py +0 -0
  2000. /package/{.agent-src → dist/agent-src}/templates/skill-archive-note.md +0 -0
  2001. /package/{.agent-src → dist/agent-src}/templates/skill.md +0 -0
  2002. /package/{.agent-src → dist/agent-src}/user-types/_template/user-type.md +0 -0
  2003. /package/{.agent-src → dist/agent-src}/user-types/galabau-field-crew.md +0 -0
  2004. /package/{.agent-src → dist/agent-src}/user-types/metalworking-shop.md +0 -0
  2005. /package/{.agent-src → dist/agent-src}/user-types/truck-driver.md +0 -0
  2006. /package/{config → src/config}/discovery/session-profiles.yml +0 -0
  2007. /package/{config → src/config}/discovery/unassigned-artefacts.yml +0 -0
  2008. /package/{config → src/config}/gitignore-block.txt +0 -0
  2009. /package/{config → src/config}/profiles/balanced.ini +0 -0
  2010. /package/{config → src/config}/profiles/full.ini +0 -0
  2011. /package/{config → src/config}/profiles/minimal.ini +0 -0
  2012. /package/{scripts → src/scripts}/_archive/_backfill_skill_domains.py +0 -0
  2013. /package/{scripts → src/scripts}/_archive/_phase2_shim_helper.py +0 -0
  2014. /package/{scripts → src/scripts}/_archive/_pilot_council_question.py +0 -0
  2015. /package/{scripts → src/scripts}/_cli/__init__.py +0 -0
  2016. /package/{scripts → src/scripts}/_cli/cmd_explain.py +0 -0
  2017. /package/{scripts → src/scripts}/_cli/cmd_prune.py +0 -0
  2018. /package/{scripts → src/scripts}/_cli/cmd_settings_check.py +0 -0
  2019. /package/{scripts → src/scripts}/_cli/cmd_sync.py +0 -0
  2020. /package/{scripts → src/scripts}/_cli/cmd_uninstall.py +0 -0
  2021. /package/{scripts → src/scripts}/_cli/cmd_validate.py +0 -0
  2022. /package/{scripts → src/scripts}/_cli/explain_last/__init__.py +0 -0
  2023. /package/{scripts → src/scripts}/_cli/explain_last/assumptions.py +0 -0
  2024. /package/{scripts → src/scripts}/_cli/explain_last/council.py +0 -0
  2025. /package/{scripts → src/scripts}/_cli/explain_last/halt.py +0 -0
  2026. /package/{scripts → src/scripts}/_cli/explain_last/inputs.py +0 -0
  2027. /package/{scripts → src/scripts}/_cli/explain_last/memory.py +0 -0
  2028. /package/{scripts → src/scripts}/_cli/explain_last/provider.py +0 -0
  2029. /package/{scripts → src/scripts}/_cli/explain_last/render.py +0 -0
  2030. /package/{scripts → src/scripts}/_cli/explain_last/route.py +0 -0
  2031. /package/{scripts → src/scripts}/_cli/explain_last/scrubber.py +0 -0
  2032. /package/{scripts → src/scripts}/_cli/explain_last/sections/__init__.py +0 -0
  2033. /package/{scripts → src/scripts}/_cli/explain_last/sections/assumptions.py +0 -0
  2034. /package/{scripts → src/scripts}/_cli/explain_last/sections/council.py +0 -0
  2035. /package/{scripts → src/scripts}/_cli/explain_last/sections/halt.py +0 -0
  2036. /package/{scripts → src/scripts}/_cli/explain_last/sections/header.py +0 -0
  2037. /package/{scripts → src/scripts}/_cli/explain_last/sections/inputs.py +0 -0
  2038. /package/{scripts → src/scripts}/_cli/explain_last/sections/memory.py +0 -0
  2039. /package/{scripts → src/scripts}/_cli/explain_last/sections/pack.py +0 -0
  2040. /package/{scripts → src/scripts}/_cli/explain_last/sections/provider.py +0 -0
  2041. /package/{scripts → src/scripts}/_cli/explain_last/sections/route.py +0 -0
  2042. /package/{scripts → src/scripts}/_cli/explain_last/state_loader.py +0 -0
  2043. /package/{scripts → src/scripts}/_emit_domain_table.py +0 -0
  2044. /package/{scripts → src/scripts}/_lib/__init__.py +0 -0
  2045. /package/{scripts → src/scripts}/_lib/agent_settings.py +0 -0
  2046. /package/{scripts → src/scripts}/_lib/agents_overlay.py +0 -0
  2047. /package/{scripts → src/scripts}/_lib/bench_ab_scoring.py +0 -0
  2048. /package/{scripts → src/scripts}/_lib/bench_cost.py +0 -0
  2049. /package/{scripts → src/scripts}/_lib/bench_quality.py +0 -0
  2050. /package/{scripts → src/scripts}/_lib/bench_report.py +0 -0
  2051. /package/{scripts → src/scripts}/_lib/bench_telegraph.py +0 -0
  2052. /package/{scripts → src/scripts}/_lib/bench_telegraph_report.py +0 -0
  2053. /package/{scripts → src/scripts}/_lib/fs_atomic.py +0 -0
  2054. /package/{scripts → src/scripts}/_lib/installed_tools.py +0 -0
  2055. /package/{scripts → src/scripts}/_lib/json_pointers.py +0 -0
  2056. /package/{scripts → src/scripts}/_lib/linked_projects.py +0 -0
  2057. /package/{scripts → src/scripts}/_lib/module_detection.py +0 -0
  2058. /package/{scripts → src/scripts}/_lib/pin_resolver.py +0 -0
  2059. /package/{scripts → src/scripts}/_lib/script_output.py +0 -0
  2060. /package/{scripts → src/scripts}/_lib/token_count.py +0 -0
  2061. /package/{scripts → src/scripts}/_lib/update_check.py +0 -0
  2062. /package/{scripts → src/scripts}/_lib/user_global_paths.py +0 -0
  2063. /package/{scripts → src/scripts}/_tmp_scan_framework_leakage.py +0 -0
  2064. /package/{scripts → src/scripts}/adr/regenerate_index.py +0 -0
  2065. /package/{scripts/ai-video/lib/fixtures/kling → src/scripts/ai-video/lib/fixtures/comfyui}/scene-0001.mp4 +0 -0
  2066. /package/{scripts → src/scripts}/ai-video/lib/fixtures/gemini-veo/scene-0001.mp4 +0 -0
  2067. /package/{scripts → src/scripts}/ai-video/lib/fixtures/higgsfield/scene-0001.mp4 +0 -0
  2068. /package/{scripts → src/scripts}/ai-video/lib/fixtures/openai-images/scene-0001.png +0 -0
  2069. /package/{scripts → src/scripts}/ai-video/lib/fixtures/sora/scene-0001.mp4 +0 -0
  2070. /package/{scripts → src/scripts}/ai-video/lib/operator-pick.sh +0 -0
  2071. /package/{scripts → src/scripts}/ai-video/lib/parse-blueprint.sh +0 -0
  2072. /package/{scripts → src/scripts}/ai-video/lib/probe-audio.sh +0 -0
  2073. /package/{scripts → src/scripts}/ai-video/lib/redact.sh +0 -0
  2074. /package/{scripts → src/scripts}/ai_council/__init__.py +0 -0
  2075. /package/{scripts → src/scripts}/ai_council/_default_prices.py +0 -0
  2076. /package/{scripts → src/scripts}/ai_council/airgap.py +0 -0
  2077. /package/{scripts → src/scripts}/ai_council/budget_guard.py +0 -0
  2078. /package/{scripts → src/scripts}/ai_council/bundler.py +0 -0
  2079. /package/{scripts → src/scripts}/ai_council/cli_hints.py +0 -0
  2080. /package/{scripts → src/scripts}/ai_council/confidence_gate.py +0 -0
  2081. /package/{scripts → src/scripts}/ai_council/config.py +0 -0
  2082. /package/{scripts → src/scripts}/ai_council/consensus.py +0 -0
  2083. /package/{scripts → src/scripts}/ai_council/learn_low_impact_preview.py +0 -0
  2084. /package/{scripts → src/scripts}/ai_council/low_impact.py +0 -0
  2085. /package/{scripts → src/scripts}/ai_council/low_impact_corpus.py +0 -0
  2086. /package/{scripts → src/scripts}/ai_council/low_impact_intake.py +0 -0
  2087. /package/{scripts → src/scripts}/ai_council/modes.py +0 -0
  2088. /package/{scripts → src/scripts}/ai_council/necessity.py +0 -0
  2089. /package/{scripts → src/scripts}/ai_council/one_off_archive/2026-05/README.md +0 -0
  2090. /package/{scripts → src/scripts}/ai_council/one_off_archive/2026-05/_one_off_add_quiet.py +0 -0
  2091. /package/{scripts → src/scripts}/ai_council/one_off_archive/2026-05/_one_off_inject_quiet_flag.py +0 -0
  2092. /package/{scripts → src/scripts}/ai_council/one_off_archive/2026-05/_one_off_measure_v2.sh +0 -0
  2093. /package/{scripts → src/scripts}/ai_council/one_off_archive/2026-05/_one_off_measure_verbosity.sh +0 -0
  2094. /package/{scripts → src/scripts}/ai_council/one_off_archive/2026-05/_one_off_per_task.sh +0 -0
  2095. /package/{scripts → src/scripts}/ai_council/orchestrator.py +0 -0
  2096. /package/{scripts → src/scripts}/ai_council/probation_gate.py +0 -0
  2097. /package/{scripts → src/scripts}/ai_council/project_context.py +0 -0
  2098. /package/{scripts → src/scripts}/ai_council/prompts.py +0 -0
  2099. /package/{scripts → src/scripts}/ai_council/redact_low_impact_entry.py +0 -0
  2100. /package/{scripts → src/scripts}/ai_council/replay.py +0 -0
  2101. /package/{scripts → src/scripts}/ai_council/shadow_dispatch.py +0 -0
  2102. /package/{scripts → src/scripts}/ai_council/solo_dispatch.py +0 -0
  2103. /package/{scripts → src/scripts}/audit_skill_descriptions.py +0 -0
  2104. /package/{scripts → src/scripts}/bootstrap.sh +0 -0
  2105. /package/{scripts → src/scripts}/chat_history.py +0 -0
  2106. /package/{scripts → src/scripts}/check_bite_sized_granularity.py +0 -0
  2107. /package/{scripts → src/scripts}/check_council_layout.py +0 -0
  2108. /package/{scripts → src/scripts}/check_iron_law_prominence.py +0 -0
  2109. /package/{scripts → src/scripts}/check_kernel_rule_bundle.py +0 -0
  2110. /package/{scripts → src/scripts}/check_md_language.py +0 -0
  2111. /package/{scripts → src/scripts}/check_memory.py +0 -0
  2112. /package/{scripts → src/scripts}/check_memory_proposal.py +0 -0
  2113. /package/{scripts → src/scripts}/check_no_local_settings_committed.py +0 -0
  2114. /package/{scripts → src/scripts}/check_proposal.py +0 -0
  2115. /package/{scripts → src/scripts}/check_release_trunk_sync.py +0 -0
  2116. /package/{scripts → src/scripts}/ci_status.py +0 -0
  2117. /package/{scripts → src/scripts}/ci_summary.py +0 -0
  2118. /package/{scripts → src/scripts}/cleanup_other_scope.sh +0 -0
  2119. /package/{scripts → src/scripts}/command_suggester/__init__.py +0 -0
  2120. /package/{scripts → src/scripts}/command_suggester/cooldown.py +0 -0
  2121. /package/{scripts → src/scripts}/command_suggester/loader.py +0 -0
  2122. /package/{scripts → src/scripts}/command_suggester/match.py +0 -0
  2123. /package/{scripts → src/scripts}/command_suggester/rank.py +0 -0
  2124. /package/{scripts → src/scripts}/command_suggester/render.py +0 -0
  2125. /package/{scripts → src/scripts}/command_suggester/sanitize.py +0 -0
  2126. /package/{scripts → src/scripts}/command_suggester/settings.py +0 -0
  2127. /package/{scripts → src/scripts}/command_suggester/types.py +0 -0
  2128. /package/{scripts → src/scripts}/condense.sh +0 -0
  2129. /package/{scripts → src/scripts}/config/__init__.py +0 -0
  2130. /package/{scripts → src/scripts}/config/presets.py +0 -0
  2131. /package/{scripts → src/scripts}/context_hygiene_hook.py +0 -0
  2132. /package/{scripts → src/scripts}/cost/budget.mjs +0 -0
  2133. /package/{scripts → src/scripts}/cost/preflight.mjs +0 -0
  2134. /package/{scripts → src/scripts}/cost/track.mjs +0 -0
  2135. /package/{scripts → src/scripts}/council_prune.py +0 -0
  2136. /package/{scripts → src/scripts}/count_token_optimizer_usage.sh +0 -0
  2137. /package/{scripts → src/scripts}/expected_perms.json +0 -0
  2138. /package/{scripts → src/scripts}/first-run.sh +0 -0
  2139. /package/{scripts → src/scripts}/ghostwriter_fixture_allowlist.txt +0 -0
  2140. /package/{scripts → src/scripts}/hermetic-install.sh +0 -0
  2141. /package/{scripts → src/scripts}/hooks/__init__.py +0 -0
  2142. /package/{scripts → src/scripts}/hooks/augment-chat-history.sh +0 -0
  2143. /package/{scripts → src/scripts}/hooks/augment-context-hygiene.sh +0 -0
  2144. /package/{scripts → src/scripts}/hooks/augment-dispatcher.sh +0 -0
  2145. /package/{scripts → src/scripts}/hooks/augment-onboarding-gate.sh +0 -0
  2146. /package/{scripts → src/scripts}/hooks/augment-roadmap-progress.sh +0 -0
  2147. /package/{scripts → src/scripts}/hooks/cline-dispatcher.sh +0 -0
  2148. /package/{scripts → src/scripts}/hooks/cowork-dispatcher.sh +0 -0
  2149. /package/{scripts → src/scripts}/hooks/cursor-dispatcher.sh +0 -0
  2150. /package/{scripts → src/scripts}/hooks/dispatch_issues.py +0 -0
  2151. /package/{scripts → src/scripts}/hooks/envelope.py +0 -0
  2152. /package/{scripts → src/scripts}/hooks/gemini-dispatcher.sh +0 -0
  2153. /package/{scripts → src/scripts}/hooks/state_io.py +0 -0
  2154. /package/{scripts → src/scripts}/hooks/windsurf-dispatcher.sh +0 -0
  2155. /package/{scripts → src/scripts}/install_anthropic_key.sh +0 -0
  2156. /package/{scripts → src/scripts}/install_openai_key.sh +0 -0
  2157. /package/{scripts → src/scripts}/lint_global_paths.py +0 -0
  2158. /package/{scripts → src/scripts}/lint_readme_jargon.py +0 -0
  2159. /package/{scripts → src/scripts}/lint_readme_size.py +0 -0
  2160. /package/{scripts → src/scripts}/mcp_render.py +0 -0
  2161. /package/{scripts → src/scripts}/mcp_server/__main__.py +0 -0
  2162. /package/{scripts → src/scripts}/mcp_server/catalog.py +0 -0
  2163. /package/{scripts → src/scripts}/mcp_server/metadata.py +0 -0
  2164. /package/{scripts → src/scripts}/mcp_server/requirements.txt +0 -0
  2165. /package/{scripts → src/scripts}/mcp_server/server.py +0 -0
  2166. /package/{scripts → src/scripts}/mcp_server/telemetry.py +0 -0
  2167. /package/{scripts → src/scripts}/mcp_setup.sh +0 -0
  2168. /package/{scripts → src/scripts}/mcp_telemetry_health.py +0 -0
  2169. /package/{scripts → src/scripts}/mcp_telemetry_query.py +0 -0
  2170. /package/{scripts → src/scripts}/mcp_telemetry_store.py +0 -0
  2171. /package/{scripts → src/scripts}/memory_hash.py +0 -0
  2172. /package/{scripts → src/scripts}/memory_lookup.py +0 -0
  2173. /package/{scripts → src/scripts}/memory_report.py +0 -0
  2174. /package/{scripts → src/scripts}/memory_signal.py +0 -0
  2175. /package/{scripts → src/scripts}/memory_status.py +0 -0
  2176. /package/{scripts → src/scripts}/minimal_safe_diff_hook.py +0 -0
  2177. /package/{scripts → src/scripts}/onboarding_gate_hook.py +0 -0
  2178. /package/{scripts → src/scripts}/prediction-pool/adapters/_schema.md +0 -0
  2179. /package/{scripts → src/scripts}/prediction-pool/adapters/kicktipp.yml +0 -0
  2180. /package/{scripts → src/scripts}/prediction-pool/poisson_sim.py +0 -0
  2181. /package/{scripts → src/scripts}/prediction-pool/pool_winsim.py +0 -0
  2182. /package/{scripts → src/scripts}/prediction-pool/score_ev.py +0 -0
  2183. /package/{scripts → src/scripts}/prepack-check.mjs +0 -0
  2184. /package/{scripts → src/scripts}/probe_skill_registration.py +0 -0
  2185. /package/{scripts → src/scripts}/propose_modules_config.py +0 -0
  2186. /package/{scripts → src/scripts}/readme_linter.py +0 -0
  2187. /package/{scripts → src/scripts}/redact_hook_capture.py +0 -0
  2188. /package/{scripts → src/scripts}/requirements-evals.txt +0 -0
  2189. /package/{scripts → src/scripts}/runtime_dispatcher.py +0 -0
  2190. /package/{scripts → src/scripts}/runtime_handler.py +0 -0
  2191. /package/{scripts → src/scripts}/schemas/agent-settings.schema.json +0 -0
  2192. /package/{scripts → src/scripts}/schemas/persona.schema.json +0 -0
  2193. /package/{scripts → src/scripts}/schemas/skill.schema.json +0 -0
  2194. /package/{scripts → src/scripts}/schemas/user-type-axis.schema.json +0 -0
  2195. /package/{scripts → src/scripts}/schemas/user-type.schema.json +0 -0
  2196. /package/{scripts → src/scripts}/setup_eval_venv.sh +0 -0
  2197. /package/{scripts → src/scripts}/skill_tools/__init__.py +0 -0
  2198. /package/{scripts → src/scripts}/sync_yaml_rt.py +0 -0
  2199. /package/{scripts → src/scripts}/tool_registry.py +0 -0
  2200. /package/{scripts → src/scripts}/tools/__init__.py +0 -0
  2201. /package/{scripts → src/scripts}/tools/adapter_errors.py +0 -0
  2202. /package/{scripts → src/scripts}/tools/base_adapter.py +0 -0
  2203. /package/{scripts → src/scripts}/tools/github_adapter.py +0 -0
  2204. /package/{scripts → src/scripts}/tools/jira_adapter.py +0 -0
  2205. /package/{scripts → src/scripts}/update-github-metadata.sh +0 -0
  2206. /package/{scripts → src/scripts}/validate_safe_paths.py +0 -0
  2207. /package/{scripts → src/scripts}/validate_telegraph_carveouts.py +0 -0
  2208. /package/{scripts → src/scripts}/verify_before_complete_hook.py +0 -0
  2209. /package/{templates → src/templates}/agent-config-wrapper.sh +0 -0
  2210. /package/{templates → src/templates}/agent-user.md +0 -0
  2211. /package/{templates → src/templates}/agent-user.yml +0 -0
  2212. /package/{templates → src/templates}/claude_desktop_config.json.template +0 -0
  2213. /package/{templates → src/templates}/consumer-settings/ONBOARDING.md +0 -0
  2214. /package/{templates → src/templates}/consumer-settings/README.md +0 -0
  2215. /package/{templates → src/templates}/consumer-settings/augment-cli-hooks.json +0 -0
  2216. /package/{templates → src/templates}/consumer-settings/augment-settings.json +0 -0
  2217. /package/{templates → src/templates}/consumer-settings/claude-settings.json +0 -0
  2218. /package/{templates → src/templates}/consumer-settings/copilot-settings.json +0 -0
  2219. /package/{templates → src/templates}/cursor-rule.mdc.j2 +0 -0
  2220. /package/{templates → src/templates}/marketing-copy.yml +0 -0
  2221. /package/{templates → src/templates}/minimal/.agent-settings.yml +0 -0
  2222. /package/{templates → src/templates}/minimal/agents-overrides-readme.md +0 -0
  2223. /package/{templates → src/templates}/minimal/overrides-gitkeep +0 -0
  2224. /package/{templates → src/templates}/windsurf-rule.md.j2 +0 -0
@@ -1,1583 +0,0 @@
1
- """``agent-config doctor`` — install + manifest health report.
2
-
3
- Phase 4 of road-to-multi-package-coexistence (drift detection) and
4
- Phase 2 of road-to-surface-discipline (diagnostic hub). Read-only
5
- sibling to ``prune``/``validate``: walks the project manifest and the
6
- on-disk deploy roots, runs a battery of health checks, and produces:
7
-
8
- Drift categories (manifest ↔ filesystem):
9
-
10
- * ``missing`` — manifest entry has a ``path`` that is **not** on disk.
11
- * ``modified`` — manifest entry records a ``sha256`` that does not
12
- match the current bytes on disk.
13
- * ``foreign`` — file present under one of the ``deploy_roots`` that
14
- no manifest entry claims (potential neighbour-tool drift).
15
- * ``tag-drift`` — manifest-claimed ``.md`` file carries a frontmatter
16
- ``package:`` value that disagrees with this package's identifier
17
- (P5.2). Hand-edited tags or accidental cross-package writes show up
18
- here; files without frontmatter are skipped (P5.1 contract).
19
-
20
- Health checks (see :data:`CHECK_IDS`):
21
- scope · manifest-integrity · lockfile-freshness · bridge-drift ·
22
- mcp-mode · mcp-beta-readiness · offline-readiness · python-runtime ·
23
- tier-usage-readiness · council-cli · unsupported-combos ·
24
- wizard-state.
25
- Each emits a structured ``{id, status, message, remedy}`` record with
26
- ``status`` ∈ ``ok`` / ``warn`` / ``fail`` / ``skipped`` (rendered
27
- ``✅`` / ``⚠️`` / ``❌`` / ``⏭️``). ``--check <id>`` runs a single check.
28
-
29
- Checks are split by scope (:data:`GLOBAL_CHECK_IDS` vs
30
- :data:`MANIFEST_REQUIRED_CHECK_IDS`) so an ADR-020 global-only consumer
31
- (bridge marker present, no ``agents/installed-tools.lock``) gets a
32
- green-capable report instead of a hard bail: the global checks run, the
33
- manifest-required checks report ``skipped``, and ``bridge-drift`` returns
34
- a scope-aware "drift not applicable" verdict. See :func:`main` for the
35
- no-manifest branch and exit-code contract.
36
-
37
- Repair affordances: ``--repair wizard-state`` resets a malformed or
38
- orphaned ``state/wizard-state.json`` under the user-global root (the
39
- file the unified Setup-Wizard uses for resume continuity). Used as the
40
- recovery path when ``1.9``'s npm downgrade is not viable
41
- (road-to-global-only-install § 1.10 / A6).
42
-
43
- Exit codes: ``0`` (clean) · ``1`` (drift or any ``fail`` check) · ``2``
44
- (error such as "manifest missing"). Both human and ``--json`` output
45
- emit the drift category lists and the structured checks array. Every
46
- drift entry carries a one-line ``fix`` hint (P4.3).
47
- """
48
- from __future__ import annotations
49
-
50
- import argparse
51
- import hashlib
52
- import json
53
- import os
54
- import re
55
- import shutil
56
- import sys
57
- from pathlib import Path
58
- from typing import Any
59
-
60
- from scripts._lib import installed_lock, installed_tools
61
- from scripts._lib.agent_settings import (
62
- PROJECT_ROOT_ENV,
63
- ROOT_OVERRIDE_ENV,
64
- ProjectRootError,
65
- find_project_root_with_trace,
66
- project_settings_path,
67
- resolve_project_root,
68
- )
69
-
70
-
71
- class _Sentinel:
72
- """Tiny stand-in for a private sentinel value type."""
73
-
74
- __slots__ = ()
75
-
76
-
77
- #: Returned by :func:`_read_inline_package_tag` when the file is out
78
- #: of scope for tag-drift detection (no ``.md`` suffix, unreadable, or
79
- #: no leading frontmatter block).
80
- NO_FRONTMATTER = _Sentinel()
81
-
82
-
83
- def _resolve_project_root(arg: str | None) -> tuple[Path, str]:
84
- """Resolve the doctor's project root via the shared Phase-3 helper.
85
-
86
- Returns ``(root, origin)`` where ``origin`` is one of the anchor
87
- names from :mod:`scripts._lib.agent_settings` (``agents-dir``,
88
- ``git``, ``agent-settings``) or one of the origin tags
89
- ``root-flag`` / ``explicit`` / ``env`` / ``cwd-fallback``. The tag
90
- is surfaced in both human and JSON output so subdir invocations
91
- are auditable.
92
- """
93
- return resolve_project_root(arg)
94
-
95
-
96
- #: Path of the install-mode marker file (Step 8 A5). One-line file:
97
- #: ``minimal\n`` or ``full\n``. Written by ``install.py``; consumed by
98
- #: ``doctor --context`` to surface install state without re-deriving it
99
- #: from filesystem heuristics.
100
- _INSTALL_MODE_MARKER_REL = "agents/.agent-state/install-mode.txt"
101
-
102
-
103
- def _detect_install_mode(project_root: Path) -> tuple[str, str]:
104
- """Return ``(mode, source)`` for the project install state.
105
-
106
- Hybrid detection (Step 8 council decision Q5):
107
-
108
- 1. ``agents/.agent-state/install-mode.txt`` if present (authoritative
109
- for installs since Step 8) → ``source="marker-file"``.
110
- 2. Filesystem heuristic for back-compat: ``AGENTS.md`` + copilot
111
- bridges → ``full``; otherwise ``minimal`` → ``source="heuristic"``.
112
-
113
- Heuristic is fragile by design — users who delete ``AGENTS.md`` but
114
- keep copilot bridges get misreported. The marker file is the
115
- intended source of truth for installs from Step 8 onward.
116
- """
117
- marker = project_root / _INSTALL_MODE_MARKER_REL
118
- if marker.is_file():
119
- try:
120
- value = marker.read_text(encoding="utf-8").strip()
121
- except OSError:
122
- value = ""
123
- if value in ("minimal", "full"):
124
- return value, "marker-file"
125
- has_agents_md = (project_root / "AGENTS.md").exists()
126
- has_copilot = (project_root / ".github" / "copilot-instructions.md").exists()
127
- if has_agents_md and has_copilot:
128
- return "full", "heuristic"
129
- return "minimal", "heuristic"
130
-
131
-
132
- def _settings_layer_chain(project_root: Path) -> list[str]:
133
- """Return the ordered ``.agent-settings.yml`` layer files that exist.
134
-
135
- Shallowest first (user-global → project root). Used by ``--context``
136
- to surface which layers will participate in the cascade merge.
137
- """
138
- layers: list[str] = []
139
- from scripts._lib import user_global_paths
140
- user_global = user_global_paths.resolve_with_fallback("agent-settings.yml")
141
- if user_global is not None and user_global.is_file():
142
- layers.append(str(user_global))
143
- project_settings = project_settings_path(project_root)
144
- if project_settings.is_file():
145
- layers.append(str(project_settings))
146
- return layers
147
-
148
-
149
- def _detect_wrapper(project_root: Path) -> dict[str, Any]:
150
- """Return ``{path, exists, embedded_root}`` for the project wrapper.
151
-
152
- The ``./agent-config`` wrapper at the project root pins
153
- ``AGENT_CONFIG_PROJECT_ROOT`` to its own ``SELF_DIR``, so the
154
- "embedded root" is just the wrapper's directory. Surfaced for
155
- debugging wrapper-coupling issues (Step 8 A3-coupling).
156
- """
157
- wrapper = project_root / "agent-config"
158
- if not wrapper.exists():
159
- return {"path": str(wrapper), "exists": False, "embedded_root": None}
160
- return {
161
- "path": str(wrapper),
162
- "exists": True,
163
- "embedded_root": str(project_root),
164
- }
165
-
166
-
167
- def _emit_trace_text(
168
- root: Path | None,
169
- anchor: str | None,
170
- trace: list[dict[str, Any]],
171
- origin: str,
172
- ) -> None:
173
- """Render the discovery trace as human-readable text."""
174
- print(f" 📍 start: {Path.cwd()}")
175
- print(f" 📍 origin: {origin}")
176
- if trace:
177
- print(" trace:")
178
- for record in trace:
179
- hit = record["hit"]
180
- symbol = "✅" if hit else "·"
181
- tag = f"[{record['pass']}]"
182
- anchor_str = f" → {hit}" if hit else ""
183
- print(
184
- f" {symbol} {tag} {record['ancestor']}"
185
- f"{anchor_str} ({record['reason']})"
186
- )
187
- if root is not None:
188
- print(f" 📍 resolved root: {root} (anchor: {anchor or 'n/a'})")
189
- else:
190
- print(" ⚠️ no anchor found in chain")
191
-
192
-
193
- def _emit_trace_json(
194
- root: Path | None,
195
- anchor: str | None,
196
- trace: list[dict[str, Any]],
197
- origin: str,
198
- ) -> None:
199
- """Render the discovery trace as a JSON payload."""
200
- payload: dict[str, Any] = {
201
- "start": str(Path.cwd()),
202
- "origin": origin,
203
- "resolved_root": str(root) if root is not None else None,
204
- "anchor": anchor,
205
- "trace": trace,
206
- }
207
- print(json.dumps(payload, indent=2))
208
-
209
-
210
- def _emit_context_text(ctx: dict[str, Any]) -> None:
211
- """Render the install / discovery context as human-readable text."""
212
- print(f" 📍 project_root: {ctx['project_root']} (origin: {ctx['origin']})")
213
- print(f" 📦 install_mode: {ctx['install_mode']} (source: {ctx['install_mode_source']})")
214
- env_pin = ctx.get("env_pin")
215
- if env_pin:
216
- marker = " (--root override)" if ctx.get("root_override") else ""
217
- print(f" 🔒 env_pin: {env_pin}{marker}")
218
- else:
219
- print(" 🔒 env_pin: (unset)")
220
- layers = ctx.get("settings_layers") or []
221
- if layers:
222
- print(f" 📑 settings layers ({len(layers)}):")
223
- for layer in layers:
224
- print(f" - {layer}")
225
- else:
226
- print(" 📑 settings layers: (none)")
227
- wrapper = ctx.get("wrapper") or {}
228
- if wrapper.get("exists"):
229
- print(f" 🧩 wrapper: {wrapper['path']} (embedded root: {wrapper.get('embedded_root')})")
230
- else:
231
- print(f" 🧩 wrapper: (not present at {wrapper.get('path')})")
232
-
233
-
234
- def _resolve_path(project_root: Path, raw: str) -> Path:
235
- p = Path(raw).expanduser()
236
- if not p.is_absolute():
237
- p = project_root / p
238
- return p
239
-
240
-
241
- def _sha256(path: Path) -> str | None:
242
- try:
243
- return hashlib.sha256(path.read_bytes()).hexdigest()
244
- except OSError:
245
- return None
246
-
247
-
248
- #: Inline-tag identifier this package writes into deployed Markdown
249
- #: frontmatter (P5.1). Kept in sync with ``install.PACKAGE_TAG_ID``;
250
- #: duplicated here to keep ``cmd_doctor`` import-light (no pull on the
251
- #: installer module from the CLI).
252
- PACKAGE_TAG_ID = "event4u/agent-config"
253
-
254
- _FRONTMATTER_PACKAGE_RE = re.compile(
255
- r"^package:\s*(.+?)\s*$", re.MULTILINE,
256
- )
257
-
258
-
259
- def _read_inline_package_tag(path: Path) -> str | None | _Sentinel:
260
- """Extract the inline ``package:`` value from a Markdown frontmatter.
261
-
262
- Returns ``NO_FRONTMATTER`` when ``path`` is not a Markdown file or
263
- has no leading ``---`` block (P5.1: those files are out of scope).
264
- Returns ``None`` when frontmatter is present but lacks a
265
- ``package:`` key. Returns the string value otherwise.
266
- """
267
- if path.suffix != ".md":
268
- return NO_FRONTMATTER
269
- try:
270
- text = path.read_text(encoding="utf-8")
271
- except OSError:
272
- return NO_FRONTMATTER
273
- if not (text.startswith("---\n") or text.startswith("---\r\n")):
274
- return NO_FRONTMATTER
275
- lines = text.splitlines()
276
- close_idx: int | None = None
277
- for i in range(1, len(lines)):
278
- if lines[i].rstrip() == "---":
279
- close_idx = i
280
- break
281
- if close_idx is None:
282
- return NO_FRONTMATTER
283
- block = "\n".join(lines[1:close_idx])
284
- m = _FRONTMATTER_PACKAGE_RE.search(block)
285
- if not m:
286
- return None
287
- return m.group(1).strip().strip("'\"")
288
-
289
-
290
- def _fix_hint(category: str, kind: str | None) -> str:
291
- """Return a one-line remediation hint for the surfaced item."""
292
- if category == "missing":
293
- return "run `./agent-config sync` to re-install"
294
- if category == "modified":
295
- return "commit the local change, or re-install with --force"
296
- if category == "foreign":
297
- return (
298
- "identify owning tool, or run `./agent-config prune` "
299
- "if confirmed orphan"
300
- )
301
- if category == "tag-drift":
302
- return (
303
- "re-install with --force to restore the inline tag, "
304
- "or remove the file if it is no longer ours"
305
- )
306
- return ""
307
-
308
-
309
- def _collect_manifest_entries(
310
- project_root: Path, manifest: dict[str, Any],
311
- ) -> tuple[
312
- list[tuple[str, Path, str, str | None]], # (tool, abs_path, kind, sha)
313
- set[Path], # resolved-known set
314
- ]:
315
- """Flatten v2 ``tools[].files[]`` into per-file records.
316
-
317
- Returns the records list and a set of resolved absolute paths so
318
- the foreign-file scan can skip anything the manifest claims.
319
- """
320
- records: list[tuple[str, Path, str, str | None]] = []
321
- known: set[Path] = set()
322
- for tool in manifest.get("tools") or []:
323
- if tool.get("scope") != "project":
324
- continue
325
- tool_id = str(tool.get("name", ""))
326
- for entry in tool.get("files") or []:
327
- raw = entry.get("path") or ""
328
- if not raw:
329
- continue
330
- kind = entry.get("kind") or ""
331
- target = _resolve_path(project_root, raw)
332
- try:
333
- resolved = target.resolve()
334
- except OSError:
335
- resolved = target
336
- records.append((tool_id, target, kind, entry.get("sha256")))
337
- known.add(resolved)
338
- return records, known
339
-
340
-
341
- def _scan_foreign(
342
- project_root: Path,
343
- manifest: dict[str, Any],
344
- known: set[Path],
345
- ) -> list[Path]:
346
- """Walk every declared deploy root and surface unclaimed files.
347
-
348
- Only ``regular files`` under ``deploy_roots`` count; directories and
349
- symlinks are followed but the bookkeeping is on the resolved final
350
- path so a manifest claim via either path silences both surfaces.
351
- Falls back to :data:`installed_tools.DEFAULT_DEPLOY_ROOTS` when the
352
- manifest lacks an explicit ``deploy_roots`` list.
353
- """
354
- roots = manifest.get("deploy_roots") or list(
355
- installed_tools.DEFAULT_DEPLOY_ROOTS,
356
- )
357
- foreign: list[Path] = []
358
- seen: set[Path] = set()
359
- for root_rel in roots:
360
- root = _resolve_path(project_root, str(root_rel))
361
- if not root.exists() or not root.is_dir():
362
- continue
363
- for child in root.rglob("*"):
364
- if not child.is_file():
365
- continue
366
- try:
367
- resolved = child.resolve()
368
- except OSError:
369
- resolved = child
370
- if resolved in known or resolved in seen:
371
- continue
372
- seen.add(resolved)
373
- foreign.append(child)
374
- foreign.sort()
375
- return foreign
376
-
377
-
378
- def _classify(
379
- records: list[tuple[str, Path, str, str | None]],
380
- ) -> tuple[
381
- list[dict[str, Any]],
382
- list[dict[str, Any]],
383
- list[dict[str, Any]],
384
- ]:
385
- """Split manifest records into missing / modified / tag-drift lists.
386
-
387
- Tag-drift inspection (P5.2) is restricted to manifest entries that
388
- point at a present ``.md`` file with a frontmatter block. A file
389
- that has frontmatter but whose ``package:`` value disagrees with
390
- :data:`PACKAGE_TAG_ID` — or that has dropped the key entirely —
391
- surfaces here. Files without frontmatter are silently ignored per
392
- the P5.1 contract (we never synthesise frontmatter).
393
- """
394
- missing: list[dict[str, Any]] = []
395
- modified: list[dict[str, Any]] = []
396
- tag_drift: list[dict[str, Any]] = []
397
- for tool_id, target, kind, expected in records:
398
- if not target.exists():
399
- missing.append({
400
- "tool": tool_id, "path": str(target), "kind": kind,
401
- "fix": _fix_hint("missing", kind),
402
- })
403
- continue
404
- tag = _read_inline_package_tag(target)
405
- if not isinstance(tag, _Sentinel) and tag != PACKAGE_TAG_ID:
406
- tag_drift.append({
407
- "tool": tool_id, "path": str(target), "kind": kind,
408
- "expected": PACKAGE_TAG_ID,
409
- "found": "" if tag is None else tag,
410
- "fix": _fix_hint("tag-drift", kind),
411
- })
412
- if expected is None:
413
- continue
414
- actual = _sha256(target)
415
- if actual is None or actual == expected:
416
- continue
417
- modified.append({
418
- "tool": tool_id, "path": str(target), "kind": kind,
419
- "fix": _fix_hint("modified", kind),
420
- })
421
- return missing, modified, tag_drift
422
-
423
-
424
- def _foreign_records(
425
- project_root: Path, foreign: list[Path],
426
- ) -> list[dict[str, Any]]:
427
- out: list[dict[str, Any]] = []
428
- for p in foreign:
429
- try:
430
- rel = p.relative_to(project_root)
431
- path_str = str(rel)
432
- except ValueError:
433
- path_str = str(p)
434
- out.append({
435
- "tool": "",
436
- "path": path_str,
437
- "kind": "deployed",
438
- "fix": _fix_hint("foreign", "deployed"),
439
- })
440
- return out
441
-
442
-
443
- # ---------------------------------------------------------------------------
444
- # Health checks (Phase 2 of road-to-surface-discipline).
445
- # ---------------------------------------------------------------------------
446
-
447
- #: Ordered registry of structured health-check identifiers. The order
448
- #: is preserved in text and JSON output. Adding a check requires both
449
- #: a runner below and an entry in :func:`_run_checks`.
450
- CHECK_IDS = (
451
- "scope",
452
- "global-binary",
453
- "manifest-integrity",
454
- "lockfile-freshness",
455
- "bridge-drift",
456
- "mcp-mode",
457
- "mcp-beta-readiness",
458
- "offline-readiness",
459
- "python-runtime",
460
- "tier-usage-readiness",
461
- "council-cli",
462
- "unsupported-combos",
463
- "wizard-state",
464
- )
465
-
466
- #: Checks that need only the project root (or no input at all) and run
467
- #: regardless of whether a project lockfile exists. Under ADR-020
468
- #: global-only (bridge marker present, no ``installed-tools.lock``) these
469
- #: still produce a real verdict. ``scope`` lives here because
470
- #: :func:`_check_scope` reads only ``project_root`` — the roadmap prose
471
- #: that grouped it with the manifest checks predates this code reality
472
- #: (AI council, claude-sonnet-4-5 + gpt-4o, design lens, 2026-06-02).
473
- GLOBAL_CHECK_IDS: frozenset[str] = frozenset({
474
- "scope",
475
- "global-binary",
476
- "mcp-mode",
477
- "mcp-beta-readiness",
478
- "offline-readiness",
479
- "python-runtime",
480
- "tier-usage-readiness",
481
- "council-cli",
482
- "wizard-state",
483
- })
484
-
485
- #: Checks that genuinely cannot run without the project manifest. Without
486
- #: a lockfile they report ``skipped`` rather than a misleading verdict.
487
- #: ``bridge-drift`` is deliberately **not** here: it is scope-aware —
488
- #: a manifest-derived drift roll-up when the lockfile exists, and a
489
- #: "drift not applicable (global-only consumer)" verdict when it does
490
- #: not (computed in :func:`_check_bridge_drift_no_manifest`, keeping
491
- #: :func:`_check_bridge_drift` a pure roll-up per the council's SRP point).
492
- MANIFEST_REQUIRED_CHECK_IDS: frozenset[str] = frozenset({
493
- "manifest-integrity",
494
- "lockfile-freshness",
495
- "unsupported-combos",
496
- })
497
-
498
- #: Project-root-relative path of the ADR-020 global-only consumer marker.
499
- BRIDGE_MARKER_RELATIVE = "agents/.event4u-bridge.yml"
500
-
501
- #: Repair targets that ``--repair <id>`` accepts. Each id maps to a
502
- #: function in :func:`_run_repair` that resets the named artefact and
503
- #: returns an exit code. Additive set: introduce by adding a new id
504
- #: here, a runner inside :func:`_run_repair`, and (optionally) a
505
- #: matching health check above.
506
- REPAIR_IDS = ("wizard-state",)
507
-
508
- #: Six gates that govern the MCP `experimental → beta` promotion. The
509
- #: artefact path under each gate id mirrors `tests/test_mcp_beta_gates.py`
510
- #: and the contract in `docs/contracts/mcp-beta-criteria.md`.
511
- MCP_BETA_GATES: tuple[tuple[str, str], ...] = (
512
- ("gate-1-external-client", "tests/mcp/external-clients"),
513
- ("gate-2-bearer-auth", "tests/mcp/auth"),
514
- ("gate-3-parity-smoke", "tests/mcp/parity"),
515
- ("gate-4-healthz-load", "tests/mcp/load/healthz.k6.js"),
516
- ("gate-5-rate-limit", "docs/contracts/mcp-rate-limit.md"),
517
- ("gate-6-no-drift", ".github/workflows/mcp-no-drift.yml"),
518
- )
519
-
520
- #: Visible status → glyph map. ``warn`` keeps a trailing space so the
521
- #: rendered output stays in a single visual column with the other glyphs.
522
- STATUS_SYMBOLS = {"ok": "✅", "warn": "⚠️ ", "fail": "❌", "skipped": "⏭️ "}
523
-
524
- #: Minimum Python interpreter the CLI targets. Bumped in lockstep with
525
- #: ``from __future__ import annotations`` + PEP-604 syntax usage.
526
- MIN_PYTHON = (3, 10)
527
-
528
-
529
- def _check_scope(project_root: Path) -> dict[str, Any]:
530
- """Distinguish a standalone project root from a monorepo workspace.
531
-
532
- Surfaces ``warn`` when ``project_root`` looks like a monorepo root
533
- so the operator knows to run ``doctor`` per-package; otherwise
534
- reports the project as a standalone target.
535
- """
536
- for marker in ("pnpm-workspace.yaml", "lerna.json"):
537
- if (project_root / marker).exists():
538
- return {
539
- "id": "scope", "status": "warn",
540
- "message": f"monorepo root detected ({marker})",
541
- "remedy": "run `agent-config doctor` from each workspace package",
542
- }
543
- pkg = project_root / "package.json"
544
- if pkg.exists():
545
- try:
546
- data = json.loads(pkg.read_text(encoding="utf-8"))
547
- if data.get("workspaces"):
548
- return {
549
- "id": "scope", "status": "warn",
550
- "message": "package.json declares workspaces (monorepo root)",
551
- "remedy": "run `agent-config doctor` from each workspace package",
552
- }
553
- except (OSError, ValueError):
554
- pass
555
- return {
556
- "id": "scope", "status": "ok",
557
- "message": "standalone project root",
558
- "remedy": "",
559
- }
560
-
561
-
562
- def _check_manifest_integrity(manifest: dict[str, Any]) -> dict[str, Any]:
563
- """Verify the manifest carries a writer version and a known schema."""
564
- schema = manifest.get("schema_version")
565
- version = manifest.get("agent_config_version")
566
- if not version:
567
- return {
568
- "id": "manifest-integrity", "status": "warn",
569
- "message": "manifest lacks `agent_config_version`",
570
- "remedy": "re-run `./agent-config init` to record the writer version",
571
- }
572
- if schema not in installed_tools.SCHEMA_VERSIONS_SUPPORTED:
573
- return {
574
- "id": "manifest-integrity", "status": "warn",
575
- "message": f"unknown schema_version: {schema!r}",
576
- "remedy": "upgrade @event4u/agent-config to a writer that "
577
- "recognises this schema",
578
- }
579
- return {
580
- "id": "manifest-integrity", "status": "ok",
581
- "message": f"schema v{schema}, written by agent-config {version}",
582
- "remedy": "",
583
- }
584
-
585
-
586
- def _package_root() -> Path:
587
- """Resolve the @event4u/agent-config package root (this repo)."""
588
- return Path(__file__).resolve().parents[2]
589
-
590
-
591
- def _current_package_version() -> str | None:
592
- """Read ``version`` from this package's ``package.json``; ``None`` on error."""
593
- try:
594
- data = json.loads(
595
- (_package_root() / "package.json").read_text(encoding="utf-8"),
596
- )
597
- v = data.get("version")
598
- if isinstance(v, str) and v.strip():
599
- return v.strip()
600
- except (OSError, ValueError):
601
- pass
602
- return None
603
-
604
-
605
- def _check_lockfile_freshness(manifest: dict[str, Any]) -> dict[str, Any]:
606
- """Compare the manifest writer version against the current package."""
607
- recorded = manifest.get("agent_config_version")
608
- current = _current_package_version()
609
- if not recorded:
610
- return {
611
- "id": "lockfile-freshness", "status": "warn",
612
- "message": "manifest has no writer version recorded",
613
- "remedy": "re-run `./agent-config init` to refresh the manifest",
614
- }
615
- if current is None:
616
- return {
617
- "id": "lockfile-freshness", "status": "warn",
618
- "message": f"manifest written by {recorded}; current package version unknown",
619
- "remedy": "verify the package install (package.json missing or unreadable)",
620
- }
621
- if recorded != current:
622
- return {
623
- "id": "lockfile-freshness", "status": "warn",
624
- "message": f"manifest writer {recorded} != current package {current}",
625
- "remedy": "re-run `./agent-config sync` to refresh the manifest "
626
- "against the current package",
627
- }
628
- return {
629
- "id": "lockfile-freshness", "status": "ok",
630
- "message": f"manifest and package both at {current}",
631
- "remedy": "",
632
- }
633
-
634
-
635
- def _check_global_binary(project_root: Path) -> dict[str, Any]:
636
- """`agent-config` PATH resolution + global-install version parity.
637
-
638
- The Claude plugin hook resolves `agent-config` from PATH (ADR-020
639
- global-only); if it is missing, every PostToolUse hook fails silently —
640
- this is the root cause of the "dashboard never updates" report. Version
641
- drift between the binary on PATH and the global install root means the
642
- plugin may emit a hook spec the installed binary predates.
643
- """
644
- binary = shutil.which("agent-config")
645
- if not binary:
646
- return {
647
- "id": "global-binary", "status": "fail",
648
- "message": "`agent-config` is not on PATH — Claude plugin hooks "
649
- "cannot resolve it (hooks silently no-op)",
650
- "remedy": "npm install -g @event4u/agent-config, then re-run doctor",
651
- }
652
- lock = installed_lock.read_lockfile()
653
- global_v = ""
654
- if isinstance(lock, dict):
655
- raw = lock.get("agent_config_version")
656
- global_v = raw.strip().lstrip("v") if isinstance(raw, str) else ""
657
- binary_v = (_current_package_version() or "").lstrip("v")
658
- if global_v and binary_v and global_v != binary_v:
659
- return {
660
- "id": "global-binary", "status": "warn",
661
- "message": f"version drift — binary {binary_v}, global install "
662
- f"{global_v}",
663
- "remedy": "agent-config upgrade (refresh the global install + plugin)",
664
- }
665
- bridge = project_root / "agents" / ".event4u-bridge.yml"
666
- bridge_note = "" if bridge.is_file() else " · no project bridge marker"
667
- return {
668
- "id": "global-binary", "status": "ok",
669
- "message": f"on PATH ({binary}); version {binary_v or 'unknown'}"
670
- f"{bridge_note}",
671
- "remedy": "" if not bridge_note else
672
- "agent-config refresh --project (scaffold the bridge marker)",
673
- }
674
-
675
-
676
- def _check_bridge_drift(
677
- missing: list[dict[str, Any]],
678
- modified: list[dict[str, Any]],
679
- foreign: list[dict[str, Any]],
680
- tag_drift: list[dict[str, Any]],
681
- ) -> dict[str, Any]:
682
- """Roll the four drift category counts into a single health verdict."""
683
- total = len(missing) + len(modified) + len(foreign) + len(tag_drift)
684
- if total == 0:
685
- return {
686
- "id": "bridge-drift", "status": "ok",
687
- "message": "manifest matches filesystem (no drift)",
688
- "remedy": "",
689
- }
690
- parts = []
691
- if missing:
692
- parts.append(f"{len(missing)} missing")
693
- if modified:
694
- parts.append(f"{len(modified)} modified")
695
- if foreign:
696
- parts.append(f"{len(foreign)} foreign")
697
- if tag_drift:
698
- parts.append(f"{len(tag_drift)} tag-drift")
699
- return {
700
- "id": "bridge-drift", "status": "fail",
701
- "message": f"{total} drift item(s): {', '.join(parts)}",
702
- "remedy": "see the drift section below or run `./agent-config sync`",
703
- }
704
-
705
-
706
- def _check_mcp_mode(project_root: Path) -> dict[str, Any]:
707
- """Detect which MCP config file the project advertises, if any."""
708
- candidates = (
709
- (".cursor/mcp.json", "cursor"),
710
- (".ai/mcp/mcp.json", "ai-mcp"),
711
- ("mcp.json", "root"),
712
- )
713
- found: list[str] = []
714
- for rel, label in candidates:
715
- path = project_root / rel
716
- if not path.exists():
717
- continue
718
- try:
719
- json.loads(path.read_text(encoding="utf-8"))
720
- found.append(f"{label} ({rel})")
721
- except (OSError, ValueError):
722
- return {
723
- "id": "mcp-mode", "status": "warn",
724
- "message": f"MCP config at {rel} is not valid JSON",
725
- "remedy": f"fix or remove `{rel}` (see docs/architecture.md § MCP)",
726
- }
727
- if not found:
728
- return {
729
- "id": "mcp-mode", "status": "ok",
730
- "message": "no MCP config present (MCP Beta off)",
731
- "remedy": "",
732
- }
733
- return {
734
- "id": "mcp-mode", "status": "ok",
735
- "message": f"MCP config detected: {', '.join(found)}",
736
- "remedy": "",
737
- }
738
-
739
-
740
- def _check_offline_readiness() -> dict[str, Any]:
741
- """Verify the verified-offline install entrypoint ships with the package."""
742
- script = _package_root() / "scripts" / "hermetic-install.sh"
743
- if not script.exists():
744
- return {
745
- "id": "offline-readiness", "status": "warn",
746
- "message": "scripts/hermetic-install.sh not found in package",
747
- "remedy": "reinstall @event4u/agent-config or pull missing files",
748
- }
749
- return {
750
- "id": "offline-readiness", "status": "ok",
751
- "message": "verified-offline install entrypoint present",
752
- "remedy": "",
753
- }
754
-
755
-
756
- def _check_python_runtime() -> dict[str, Any]:
757
- """Confirm the interpreter is at least :data:`MIN_PYTHON`."""
758
- cur = sys.version_info[:2]
759
- need = MIN_PYTHON
760
- if cur < need:
761
- return {
762
- "id": "python-runtime", "status": "fail",
763
- "message": f"python {cur[0]}.{cur[1]} below required {need[0]}.{need[1]}",
764
- "remedy": f"install python >= {need[0]}.{need[1]} and re-run",
765
- }
766
- return {
767
- "id": "python-runtime", "status": "ok",
768
- "message": f"python {cur[0]}.{cur[1]} meets {need[0]}.{need[1]}+ requirement",
769
- "remedy": "",
770
- }
771
-
772
-
773
- def _check_mcp_beta_readiness(project_root: Path) -> dict[str, Any]:
774
- """Report the MCP `experimental → beta` promotion gate sheet.
775
-
776
- Walks the six gates in :data:`MCP_BETA_GATES` and asks whether the
777
- artefact named by each gate (test directory, k6 script, contract
778
- doc, or workflow file) is present. Green when all six pass, warn
779
- when any are missing — the gate stays red until evidence lands.
780
- Mirrors `tests/test_mcp_beta_gates.py` so the doctor verdict and
781
- the pytest sheet cannot drift.
782
- """
783
- pending: list[str] = []
784
- for gate_id, rel in MCP_BETA_GATES:
785
- if not (project_root / rel).exists():
786
- pending.append(f"{gate_id} ({rel})")
787
- if not pending:
788
- return {
789
- "id": "mcp-beta-readiness", "status": "ok",
790
- "message": "all 6 MCP beta gates green — promotion authorized",
791
- "remedy": "",
792
- }
793
- return {
794
- "id": "mcp-beta-readiness", "status": "warn",
795
- "message": (
796
- f"{len(pending)}/6 MCP beta gate(s) pending: "
797
- f"{', '.join(pending)}"
798
- ),
799
- "remedy": (
800
- "produce the artefacts listed in "
801
- "docs/contracts/mcp-beta-criteria.md (one per gate); "
802
- "do not flip `experimental` wording until all 6 are green"
803
- ),
804
- }
805
-
806
-
807
- def _check_tier_usage_readiness(project_root: Path) -> dict[str, Any]:
808
- """Report whether tier-usage telemetry can drive empirical retiering.
809
-
810
- Phase 5 of road-to-surface-discipline. Three terminal states:
811
-
812
- * **ok** — telemetry on, log present, at least one record survived
813
- the privacy floor.
814
- * **warn (disabled)** — telemetry off; no signal collected.
815
- Default-off doctrine; user opt-in is the unlock.
816
- * **warn (no data)** — telemetry on but the log is absent / empty;
817
- retiering decisions still rely on operator judgement until
818
- enough records accumulate.
819
- * **fail (poisoned)** — every record was rejected by the privacy
820
- floor; the report would refuse to render. The log needs a manual
821
- inspection.
822
-
823
- Contract: ``docs/contracts/command-clusters.md`` § tier-usage signal.
824
- """
825
- settings_file = project_settings_path(project_root)
826
- log_path = project_root / ".agent-tier-usage.jsonl"
827
- enabled = False
828
- if settings_file.is_file():
829
- try:
830
- import yaml # type: ignore[import-not-found]
831
- except ImportError:
832
- yaml = None # type: ignore[assignment]
833
- if yaml is not None:
834
- try:
835
- raw = yaml.safe_load(settings_file.read_text(encoding="utf-8")) or {}
836
- except Exception:
837
- raw = {}
838
- tele = (raw.get("telemetry") if isinstance(raw, dict) else None) or {}
839
- tu = tele.get("tier_usage") if isinstance(tele, dict) else None
840
- if isinstance(tu, dict):
841
- output = tu.get("output") if isinstance(tu.get("output"), dict) else {}
842
- if isinstance(output.get("path"), str) and output["path"].strip():
843
- log_path = project_root / output["path"].strip()
844
- val = tu.get("enabled")
845
- enabled = bool(val) if isinstance(val, bool) else (
846
- isinstance(val, str) and val.strip().lower() in ("true", "yes", "on", "1")
847
- )
848
-
849
- if not enabled:
850
- return {
851
- "id": "tier-usage-readiness", "status": "warn",
852
- "message": (
853
- "tier-usage telemetry disabled — empirical retiering "
854
- "decisions fall back to operator judgement"
855
- ),
856
- "remedy": (
857
- "set `telemetry.tier_usage.enabled: true` in "
858
- ".agent-settings.yml (default-off; opt-in)"
859
- ),
860
- }
861
- if not log_path.exists():
862
- return {
863
- "id": "tier-usage-readiness", "status": "warn",
864
- "message": (
865
- f"tier-usage telemetry on but {log_path.name} not yet "
866
- "written — no signal accumulated"
867
- ),
868
- "remedy": (
869
- "run any tracked command to seed the log; the dispatcher "
870
- "writes one record per invocation"
871
- ),
872
- }
873
- total = 0
874
- valid = 0
875
- allowed_fields = {"ts_bucket", "command", "tier", "outcome", "user_hash"}
876
- allowed_outcomes = {"success", "error", "blocked"}
877
- try:
878
- with log_path.open("r", encoding="utf-8") as fh:
879
- for line in fh:
880
- line = line.strip()
881
- if not line:
882
- continue
883
- total += 1
884
- try:
885
- obj = json.loads(line)
886
- except json.JSONDecodeError:
887
- continue
888
- if not isinstance(obj, dict):
889
- continue
890
- if not set(obj.keys()).issubset(allowed_fields):
891
- continue
892
- if (
893
- isinstance(obj.get("command"), str) and obj["command"]
894
- and isinstance(obj.get("tier"), int) and obj["tier"] in (0, 1, 2, 3)
895
- and obj.get("outcome") in allowed_outcomes
896
- and isinstance(obj.get("user_hash"), str) and len(obj["user_hash"]) == 16
897
- and isinstance(obj.get("ts_bucket"), str)
898
- ):
899
- valid += 1
900
- except OSError as exc:
901
- return {
902
- "id": "tier-usage-readiness", "status": "fail",
903
- "message": f"cannot read {log_path.name}: {exc}",
904
- "remedy": "fix permissions on the tier-usage log",
905
- }
906
- if total > 0 and valid == 0:
907
- return {
908
- "id": "tier-usage-readiness", "status": "fail",
909
- "message": (
910
- f"{total} record(s) in {log_path.name} but 0 passed the "
911
- "privacy floor — report would refuse to render"
912
- ),
913
- "remedy": (
914
- "inspect the log; the dispatcher is writing records the "
915
- "contract forbids (paths, argv, message bodies)"
916
- ),
917
- }
918
- if valid == 0:
919
- return {
920
- "id": "tier-usage-readiness", "status": "warn",
921
- "message": f"{log_path.name} present but empty — no signal yet",
922
- "remedy": "run any tracked command to seed the log",
923
- }
924
- return {
925
- "id": "tier-usage-readiness", "status": "ok",
926
- "message": (
927
- f"{valid} record(s) past the privacy floor in {log_path.name} "
928
- "— retiering signal available"
929
- ),
930
- "remedy": "",
931
- }
932
-
933
-
934
- #: Provider → (default binary, billable flag). Mirrors the
935
- #: ``CliClient`` subclass attributes in ``scripts/ai_council/clients.py``
936
- #: without importing them at module load time (keeps doctor lightweight
937
- #: and robust if council deps fail to load).
938
- _CLI_PROVIDER_META: dict[str, tuple[str, bool]] = {
939
- "anthropic": ("claude", False),
940
- "openai": ("codex", False),
941
- "gemini": ("gemini", False),
942
- "xai": ("grok", True),
943
- "perplexity": ("perplexity", True),
944
- }
945
-
946
-
947
- def _check_council_cli(project_root: Path) -> dict[str, Any]:
948
- """Health-probe each enabled ``mode: cli`` council member.
949
-
950
- For every CLI member in ``agents/settings/.ai-council.yml`` reports binary
951
- presence (via ``shutil.which``), billable flag, daily-quota state
952
- (used/cap or used/—), and rolls up to a single status icon.
953
-
954
- No subprocess is spawned: ``--version`` probes would defeat the
955
- cheap-by-default contract and surface flaky network paths (Codex
956
- talks home on first run). Binary presence + the cached
957
- ``cli-calls.json`` counter cover the actionable failure modes.
958
-
959
- Status rules:
960
-
961
- - ``ok`` — every enabled CLI member has its binary on PATH AND
962
- (when capped) usage is below ``warn_at``.
963
- - ``warn`` — at least one binary is missing OR usage crosses
964
- ``warn_at`` for at least one capped member.
965
- - returns ``ok`` with "no council config" if
966
- ``agents/settings/.ai-council.yml`` is absent (consumer project that
967
- hasn't enabled the council yet).
968
- """
969
- council_path = project_root / "agents" / "settings" / ".ai-council.yml"
970
- if not council_path.exists():
971
- return {
972
- "id": "council-cli", "status": "ok",
973
- "message": "no council config (agents/settings/.ai-council.yml not present)",
974
- "remedy": "",
975
- }
976
- try:
977
- from scripts.ai_council.clients import load_cli_call_counts
978
- from scripts.ai_council.config import load_council_config
979
- except Exception as exc: # noqa: BLE001 — defensive: doctor must not crash
980
- return {
981
- "id": "council-cli", "status": "warn",
982
- "message": f"council deps unavailable ({type(exc).__name__})",
983
- "remedy": "install PyYAML and ensure scripts/ai_council is importable",
984
- }
985
- try:
986
- cfg = load_council_config(council_path)
987
- except Exception as exc: # noqa: BLE001
988
- return {
989
- "id": "council-cli", "status": "warn",
990
- "message": f"council config invalid: {exc}",
991
- "remedy": "fix agents/settings/.ai-council.yml and re-run doctor",
992
- }
993
- cli_members: list[tuple[str, Any]] = [
994
- (name, m) for name, m in cfg.members.items()
995
- if m.enabled and m.mode == "cli" and name in _CLI_PROVIDER_META
996
- ]
997
- if not cli_members:
998
- return {
999
- "id": "council-cli", "status": "ok",
1000
- "message": "no enabled CLI-mode members",
1001
- "remedy": "",
1002
- }
1003
- counts = load_cli_call_counts()
1004
- caps = cfg.cli_call_budget.max_calls_per_day
1005
- warn_at = float(cfg.cli_call_budget.warn_at)
1006
- missing: list[str] = []
1007
- over_warn: list[str] = []
1008
- lines: list[str] = []
1009
- for name, member in cli_members:
1010
- default_bin, billable = _CLI_PROVIDER_META[name]
1011
- binary_name = member.binary or default_bin
1012
- resolved = shutil.which(binary_name)
1013
- binary_glyph = "✅" if resolved else "❌"
1014
- if resolved is None:
1015
- missing.append(name)
1016
- used = int(counts.get(name, 0))
1017
- cap = caps.get(name)
1018
- if cap is not None:
1019
- ratio = used / cap if cap > 0 else 0.0
1020
- quota_glyph = "⚠️" if ratio >= warn_at else "✅"
1021
- if ratio >= warn_at:
1022
- over_warn.append(name)
1023
- quota_str = f"{used}/{cap}"
1024
- else:
1025
- quota_glyph = "—"
1026
- quota_str = f"{used}/—"
1027
- billable_str = "billable" if billable else "subscription"
1028
- lines.append(
1029
- f"{name}: binary {binary_glyph} ({binary_name}) · "
1030
- f"quota {quota_glyph} {quota_str} · {billable_str}"
1031
- )
1032
- detail = " | ".join(lines)
1033
- if missing:
1034
- return {
1035
- "id": "council-cli", "status": "warn",
1036
- "message": (
1037
- f"{len(missing)}/{len(cli_members)} CLI member(s) missing binary "
1038
- f"({', '.join(missing)}) · {detail}"
1039
- ),
1040
- "remedy": (
1041
- "install the missing CLI(s) — see `council:estimate` pre-flight "
1042
- "for per-provider install hints, or flip "
1043
- "ai_council.members.<name>.mode to 'api'"
1044
- ),
1045
- }
1046
- if over_warn:
1047
- return {
1048
- "id": "council-cli", "status": "warn",
1049
- "message": (
1050
- f"{len(over_warn)}/{len(cli_members)} CLI member(s) at/over "
1051
- f"quota warn_at={warn_at} ({', '.join(over_warn)}) · {detail}"
1052
- ),
1053
- "remedy": (
1054
- "wait for UTC rollover or run "
1055
- "`python3 scripts/council_cli.py quota --reset` to clear the counter"
1056
- ),
1057
- }
1058
- return {
1059
- "id": "council-cli", "status": "ok",
1060
- "message": f"{len(cli_members)} CLI member(s) healthy · {detail}",
1061
- "remedy": "",
1062
- }
1063
-
1064
-
1065
- def _check_unsupported_combos(manifest: dict[str, Any]) -> dict[str, Any]:
1066
- """Flag tools whose ``scope`` violates the global-only or project-only rules."""
1067
- global_only = {"droid", "qoder"}
1068
- bad: list[str] = []
1069
- for tool in manifest.get("tools") or []:
1070
- name = str(tool.get("name", ""))
1071
- scope = tool.get("scope")
1072
- if name in global_only and scope != "global":
1073
- bad.append(f"{name} (scope={scope}, requires global)")
1074
- if bad:
1075
- return {
1076
- "id": "unsupported-combos", "status": "fail",
1077
- "message": f"{len(bad)} tool(s) with unsupported scope: {', '.join(bad)}",
1078
- "remedy": "re-install the listed tools with `--global --force`",
1079
- }
1080
- return {
1081
- "id": "unsupported-combos", "status": "ok",
1082
- "message": "all installed tools use supported scopes",
1083
- "remedy": "",
1084
- }
1085
-
1086
-
1087
- def _wizard_state_path() -> Path:
1088
- """Return the on-disk location of the unified Setup-Wizard state file.
1089
-
1090
- Mirrors ``STATE_REL`` in :mod:`src/server/routes/wizard.ts` — the
1091
- server writes ``<writeRoot>/state/wizard-state.json``. Under the
1092
- global-only install scope (ADR-020) ``writeRoot`` resolves to
1093
- :func:`user_global_paths.event4u_root` (typically
1094
- ``~/.event4u/agent-config/``); the ``EVENT4U_CONFIG_HOME`` override
1095
- is honoured implicitly so tests stay hermetic.
1096
- """
1097
- from scripts._lib.user_global_paths import event4u_root
1098
- return event4u_root() / "state" / "wizard-state.json"
1099
-
1100
-
1101
- def _check_wizard_state() -> dict[str, Any]:
1102
- """Health-check the resumable Setup-Wizard state file.
1103
-
1104
- Returns ``ok`` when the file is absent (no active session) or when
1105
- its JSON shape matches the contract from
1106
- :mod:`src/server/routes/wizard.ts` (``step: int``, ``partial: dict``,
1107
- optional ``totalSteps: int``, ``startedAt: str | null``).
1108
- Returns ``fail`` when the file exists but is unreadable, not valid
1109
- JSON, or violates the shape — ``--repair wizard-state`` resets it.
1110
- """
1111
- state_pth = _wizard_state_path()
1112
- if not state_pth.exists():
1113
- return {
1114
- "id": "wizard-state", "status": "ok",
1115
- "message": "no active wizard session",
1116
- "remedy": "",
1117
- }
1118
- try:
1119
- raw = state_pth.read_text(encoding="utf-8")
1120
- except OSError as exc:
1121
- return {
1122
- "id": "wizard-state", "status": "fail",
1123
- "message": f"unreadable wizard-state at {state_pth}: {exc}",
1124
- "remedy": "agent-config doctor --repair wizard-state",
1125
- }
1126
- try:
1127
- data = json.loads(raw)
1128
- except json.JSONDecodeError as exc:
1129
- return {
1130
- "id": "wizard-state", "status": "fail",
1131
- "message": f"malformed JSON in wizard-state ({exc.msg} at line {exc.lineno})",
1132
- "remedy": "agent-config doctor --repair wizard-state",
1133
- }
1134
- if not isinstance(data, dict):
1135
- return {
1136
- "id": "wizard-state", "status": "fail",
1137
- "message": f"wizard-state root is {type(data).__name__}, expected object",
1138
- "remedy": "agent-config doctor --repair wizard-state",
1139
- }
1140
- step = data.get("step")
1141
- partial = data.get("partial", {})
1142
- if not isinstance(step, int) or step < 0:
1143
- return {
1144
- "id": "wizard-state", "status": "fail",
1145
- "message": f"wizard-state.step is {step!r}, expected non-negative integer",
1146
- "remedy": "agent-config doctor --repair wizard-state",
1147
- }
1148
- if not isinstance(partial, dict):
1149
- return {
1150
- "id": "wizard-state", "status": "fail",
1151
- "message": f"wizard-state.partial is {type(partial).__name__}, expected object",
1152
- "remedy": "agent-config doctor --repair wizard-state",
1153
- }
1154
- total = data.get("totalSteps")
1155
- if total is not None and (not isinstance(total, int) or total < 1):
1156
- return {
1157
- "id": "wizard-state", "status": "fail",
1158
- "message": f"wizard-state.totalSteps is {total!r}, expected positive integer or omitted",
1159
- "remedy": "agent-config doctor --repair wizard-state",
1160
- }
1161
- suffix = f" of {total}" if isinstance(total, int) else ""
1162
- return {
1163
- "id": "wizard-state", "status": "ok",
1164
- "message": f"resumable wizard session at step {step + 1}{suffix}",
1165
- "remedy": "",
1166
- }
1167
-
1168
-
1169
- def _run_checks(
1170
- project_root: Path,
1171
- manifest: dict[str, Any],
1172
- drift: dict[str, list[dict[str, Any]]],
1173
- only: str | None = None,
1174
- ) -> list[dict[str, Any]]:
1175
- """Run the health-check registry and return ordered structured results.
1176
-
1177
- ``only`` filters to a single check id; ``None`` runs the full set.
1178
- """
1179
- runners: dict[str, Any] = {
1180
- "scope": lambda: _check_scope(project_root),
1181
- "global-binary": lambda: _check_global_binary(project_root),
1182
- "manifest-integrity": lambda: _check_manifest_integrity(manifest),
1183
- "lockfile-freshness": lambda: _check_lockfile_freshness(manifest),
1184
- "bridge-drift": lambda: _check_bridge_drift(
1185
- drift["missing"], drift["modified"],
1186
- drift["foreign"], drift["tag_drift"],
1187
- ),
1188
- "mcp-mode": lambda: _check_mcp_mode(project_root),
1189
- "mcp-beta-readiness": lambda: _check_mcp_beta_readiness(project_root),
1190
- "offline-readiness": lambda: _check_offline_readiness(),
1191
- "python-runtime": lambda: _check_python_runtime(),
1192
- "tier-usage-readiness": lambda: _check_tier_usage_readiness(project_root),
1193
- "council-cli": lambda: _check_council_cli(project_root),
1194
- "unsupported-combos": lambda: _check_unsupported_combos(manifest),
1195
- "wizard-state": _check_wizard_state,
1196
- }
1197
- out: list[dict[str, Any]] = []
1198
- for cid in CHECK_IDS:
1199
- if only is not None and cid != only:
1200
- continue
1201
- out.append(runners[cid]())
1202
- return out
1203
-
1204
-
1205
- def _skipped_manifest_check(check_id: str) -> dict[str, Any]:
1206
- """A ``skipped`` verdict for a manifest-required check with no lockfile.
1207
-
1208
- Explicit machine-readable record (not omitted, not ``null``) so the
1209
- ``--json`` ``checks`` array keeps a stable shape for a global-only
1210
- consumer — a council convergence point (2026-06-02).
1211
- """
1212
- return {
1213
- "id": check_id, "status": "skipped",
1214
- "message": "requires a project lockfile (agents/installed-tools.lock)",
1215
- "remedy": "run `agent-config init` to create a project lockfile, "
1216
- "then re-run this check",
1217
- }
1218
-
1219
-
1220
- def _check_bridge_drift_no_manifest(bridge_present: bool) -> dict[str, Any]:
1221
- """Scope-aware ``bridge-drift`` verdict when no project manifest exists.
1222
-
1223
- Kept out of :func:`_check_bridge_drift` (which stays a pure
1224
- manifest-derived roll-up) per the council's single-responsibility
1225
- point. A global-only consumer has no distributed tools to drift, so
1226
- a bridge-present repo reports ``ok`` ("not applicable"); a repo with
1227
- neither lockfile nor bridge marker reports ``skipped``.
1228
- """
1229
- if bridge_present:
1230
- return {
1231
- "id": "bridge-drift", "status": "ok",
1232
- "message": "no project lockfile → distributed-tool drift not "
1233
- "applicable (global-only consumer)",
1234
- "remedy": "",
1235
- }
1236
- return {
1237
- "id": "bridge-drift", "status": "skipped",
1238
- "message": "no project lockfile and no bridge marker → drift check "
1239
- "not applicable",
1240
- "remedy": "run `agent-config init` (project install) or "
1241
- "`agent-config refresh --project` (global-only consumer)",
1242
- }
1243
-
1244
-
1245
- def _run_checks_no_manifest(
1246
- project_root: Path,
1247
- bridge_present: bool,
1248
- only: str | None = None,
1249
- ) -> list[dict[str, Any]]:
1250
- """Run the registry with no project manifest available.
1251
-
1252
- Mirrors :func:`_run_checks` and preserves :data:`CHECK_IDS` order.
1253
- Global checks (:data:`GLOBAL_CHECK_IDS`) run unchanged; manifest-required
1254
- checks (:data:`MANIFEST_REQUIRED_CHECK_IDS`) report ``skipped``;
1255
- ``bridge-drift`` gets the scope-aware no-manifest verdict.
1256
- """
1257
- runners: dict[str, Any] = {
1258
- "scope": lambda: _check_scope(project_root),
1259
- "global-binary": lambda: _check_global_binary(project_root),
1260
- "manifest-integrity": lambda: _skipped_manifest_check("manifest-integrity"),
1261
- "lockfile-freshness": lambda: _skipped_manifest_check("lockfile-freshness"),
1262
- "bridge-drift": lambda: _check_bridge_drift_no_manifest(bridge_present),
1263
- "mcp-mode": lambda: _check_mcp_mode(project_root),
1264
- "mcp-beta-readiness": lambda: _check_mcp_beta_readiness(project_root),
1265
- "offline-readiness": lambda: _check_offline_readiness(),
1266
- "python-runtime": lambda: _check_python_runtime(),
1267
- "tier-usage-readiness": lambda: _check_tier_usage_readiness(project_root),
1268
- "council-cli": lambda: _check_council_cli(project_root),
1269
- "unsupported-combos": lambda: _skipped_manifest_check("unsupported-combos"),
1270
- "wizard-state": _check_wizard_state,
1271
- }
1272
- out: list[dict[str, Any]] = []
1273
- for cid in CHECK_IDS:
1274
- if only is not None and cid != only:
1275
- continue
1276
- out.append(runners[cid]())
1277
- return out
1278
-
1279
-
1280
- def _run_no_manifest(
1281
- opts: argparse.Namespace,
1282
- project_root: Path,
1283
- origin: str,
1284
- bridge_present: bool,
1285
- ) -> int:
1286
- """Handle the no-project-lockfile path without the old hard bail.
1287
-
1288
- Exit-code contract (council-defined, 2026-06-02):
1289
-
1290
- * ``0`` — bare report for a recognised global-only consumer
1291
- (bridge marker present), or a single global ``--check`` that passed.
1292
- * ``1`` — a runnable health check requested via ``--check`` failed.
1293
- * ``2`` — a requested ``--check`` cannot run (manifest-required check
1294
- with no lockfile, or ``bridge-drift`` with neither lockfile nor
1295
- bridge marker), or a bare report in an **uninitialised** repo
1296
- (neither lockfile nor bridge marker) — preserves the spirit of the
1297
- pre-existing "run init" signal while still printing a real report.
1298
- """
1299
- checks = _run_checks_no_manifest(project_root, bridge_present, only=opts.check)
1300
- fail_check = any(c["status"] == "fail" for c in checks)
1301
- skipped_requested = opts.check is not None and any(
1302
- c["id"] == opts.check and c["status"] == "skipped" for c in checks
1303
- )
1304
-
1305
- if opts.json:
1306
- _emit_json(project_root, [], [], [], [], checks=checks, origin=origin)
1307
- elif opts.check is None:
1308
- print(f" 📍 project_root: {project_root} (origin: {origin})")
1309
- if bridge_present:
1310
- print(" ℹ️ global-only consumer: bridge marker present, no "
1311
- "project lockfile (expected under ADR-020)")
1312
- print(" project-manifest checks are skipped — they apply only "
1313
- "to project-local distributed tools")
1314
- else:
1315
- print(" ⚠️ no project lockfile and no bridge marker at "
1316
- f"{project_root}", file=sys.stderr)
1317
- print(" run `agent-config init` (project install) or "
1318
- "`agent-config refresh --project` (global-only consumer)",
1319
- file=sys.stderr)
1320
- _emit_checks_text(checks)
1321
- else:
1322
- _emit_checks_text(checks)
1323
-
1324
- if opts.check is not None:
1325
- if skipped_requested:
1326
- return 2
1327
- return 1 if fail_check else 0
1328
- return 0 if bridge_present else 2
1329
-
1330
-
1331
- def _emit_json(
1332
- project_root: Path,
1333
- missing: list[dict[str, Any]],
1334
- modified: list[dict[str, Any]],
1335
- foreign: list[dict[str, Any]],
1336
- tag_drift: list[dict[str, Any]],
1337
- checks: list[dict[str, Any]] | None = None,
1338
- origin: str | None = None,
1339
- ) -> None:
1340
- payload: dict[str, Any] = {
1341
- "project_root": str(project_root),
1342
- "missing": missing,
1343
- "modified": modified,
1344
- "foreign": foreign,
1345
- "tag_drift": tag_drift,
1346
- }
1347
- if origin is not None:
1348
- payload["project_root_origin"] = origin
1349
- if checks is not None:
1350
- payload["checks"] = checks
1351
- print(json.dumps(payload, indent=2))
1352
-
1353
-
1354
- def _emit_checks_text(checks: list[dict[str, Any]]) -> None:
1355
- """Render the health-check block above the drift section."""
1356
- if not checks:
1357
- return
1358
- print("checks:")
1359
- for c in checks:
1360
- sym = STATUS_SYMBOLS.get(c["status"], "?")
1361
- print(f" {sym} {c['id']}: {c['message']}")
1362
- if c["status"] != "ok" and c.get("remedy"):
1363
- print(f" fix: {c['remedy']}")
1364
- print("")
1365
-
1366
-
1367
- def _emit_text(
1368
- project_root: Path,
1369
- missing: list[dict[str, Any]],
1370
- modified: list[dict[str, Any]],
1371
- foreign: list[dict[str, Any]],
1372
- tag_drift: list[dict[str, Any]],
1373
- ) -> None:
1374
- total = len(missing) + len(modified) + len(foreign) + len(tag_drift)
1375
- if total == 0:
1376
- print(f"✅ doctor: manifest matches filesystem under {project_root}")
1377
- return
1378
- print(f"⚠️ doctor: {total} drift item(s) under {project_root}")
1379
- for label, items in (
1380
- ("missing", missing),
1381
- ("modified", modified),
1382
- ("foreign", foreign),
1383
- ("tag-drift", tag_drift),
1384
- ):
1385
- if not items:
1386
- continue
1387
- print(f"\n {label} ({len(items)}):")
1388
- for it in items:
1389
- tool = it["tool"] or "?"
1390
- print(f" · [{tool}] {it['path']}")
1391
- if label == "tag-drift":
1392
- found = it.get("found") or "(missing)"
1393
- expected = it.get("expected", PACKAGE_TAG_ID)
1394
- print(f" expected: {expected}")
1395
- print(f" found: {found}")
1396
- print(f" fix: {it['fix']}")
1397
-
1398
-
1399
- def _parse(argv: list[str]) -> argparse.Namespace:
1400
- parser = argparse.ArgumentParser(
1401
- prog="agent-config doctor",
1402
- description=(
1403
- "Manifest ↔ filesystem drift report plus install health "
1404
- "checks. See --check for the individual check ids."
1405
- ),
1406
- )
1407
- parser.add_argument("--project", default=None,
1408
- help="project root (default: cwd)")
1409
- parser.add_argument("--json", action="store_true",
1410
- help="emit a JSON report instead of human text")
1411
- parser.add_argument(
1412
- "--check", default=None, metavar="ID",
1413
- choices=list(CHECK_IDS),
1414
- help=("run a single health check by id "
1415
- f"({' · '.join(CHECK_IDS)})"),
1416
- )
1417
- parser.add_argument(
1418
- "--trace-root", action="store_true",
1419
- help=("print every ancestor checked during project-root discovery "
1420
- "plus the winning anchor; short-circuits the drift report"),
1421
- )
1422
- parser.add_argument(
1423
- "--context", action="store_true",
1424
- help=("print effective project root, anchor, env-pin, settings "
1425
- "layer chain, wrapper, and install-mode; short-circuits "
1426
- "the drift report"),
1427
- )
1428
- parser.add_argument(
1429
- "--repair", default=None, metavar="ID",
1430
- choices=list(REPAIR_IDS),
1431
- help=("reset a recoverable artefact and exit "
1432
- f"({' · '.join(REPAIR_IDS)}); short-circuits the drift "
1433
- "report. Idempotent — absent files report 'nothing to "
1434
- "repair' and exit 0."),
1435
- )
1436
- return parser.parse_args(argv)
1437
-
1438
-
1439
- def _run_trace_root(opts: argparse.Namespace) -> int:
1440
- """Handle ``--trace-root``: discovery walk + records, no drift report."""
1441
- start = Path.cwd()
1442
- root, anchor, trace = find_project_root_with_trace(start)
1443
- # Determine origin label even when no anchor is found.
1444
- if os.environ.get(ROOT_OVERRIDE_ENV) == "1" and os.environ.get(PROJECT_ROOT_ENV):
1445
- origin = "root-flag"
1446
- elif opts.project:
1447
- origin = "explicit"
1448
- elif os.environ.get(PROJECT_ROOT_ENV):
1449
- origin = "env"
1450
- elif root is not None:
1451
- origin = anchor or "unknown"
1452
- else:
1453
- origin = "cwd-fallback"
1454
- if opts.json:
1455
- _emit_trace_json(root, anchor, trace, origin)
1456
- else:
1457
- _emit_trace_text(root, anchor, trace, origin)
1458
- return 0
1459
-
1460
-
1461
- def _run_context(opts: argparse.Namespace) -> int:
1462
- """Handle ``--context``: install + discovery snapshot, no drift report."""
1463
- try:
1464
- project_root, origin = _resolve_project_root(opts.project)
1465
- except ProjectRootError as exc:
1466
- print(f"❌ doctor: {exc}", file=sys.stderr)
1467
- return 2
1468
- mode, mode_source = _detect_install_mode(project_root)
1469
- ctx: dict[str, Any] = {
1470
- "project_root": str(project_root),
1471
- "origin": origin,
1472
- "install_mode": mode,
1473
- "install_mode_source": mode_source,
1474
- "env_pin": os.environ.get(PROJECT_ROOT_ENV) or None,
1475
- "root_override": os.environ.get(ROOT_OVERRIDE_ENV) == "1",
1476
- "settings_layers": _settings_layer_chain(project_root),
1477
- "wrapper": _detect_wrapper(project_root),
1478
- }
1479
- if opts.json:
1480
- print(json.dumps(ctx, indent=2))
1481
- else:
1482
- _emit_context_text(ctx)
1483
- return 0
1484
-
1485
-
1486
- def _run_repair(opts: argparse.Namespace) -> int:
1487
- """Handle ``--repair <id>``: reset the named artefact, no drift report.
1488
-
1489
- Currently the only target is ``wizard-state`` — unlinks the
1490
- resumable session file so the next ``agent-config setup`` boots
1491
- from step 1. Absent files are a no-op (idempotent re-run).
1492
- """
1493
- target = opts.repair
1494
- if target == "wizard-state":
1495
- state_pth = _wizard_state_path()
1496
- payload = {
1497
- "id": "wizard-state",
1498
- "path": str(state_pth),
1499
- "action": "remove" if state_pth.exists() else "noop",
1500
- }
1501
- if state_pth.exists():
1502
- try:
1503
- state_pth.unlink()
1504
- except OSError as exc:
1505
- payload["action"] = "error"
1506
- payload["error"] = str(exc)
1507
- if opts.json:
1508
- print(json.dumps(payload, indent=2))
1509
- else:
1510
- print(f"❌ doctor: could not remove {state_pth}: {exc}",
1511
- file=sys.stderr)
1512
- return 2
1513
- if opts.json:
1514
- print(json.dumps(payload, indent=2))
1515
- else:
1516
- if payload["action"] == "remove":
1517
- print(f"✅ doctor: reset wizard-state ({state_pth})")
1518
- else:
1519
- print(f"✅ doctor: nothing to repair (no wizard-state at {state_pth})")
1520
- return 0
1521
- # argparse `choices=` already constrains target; defensive default.
1522
- print(f"❌ doctor: unknown repair target {target!r}", file=sys.stderr)
1523
- return 2
1524
-
1525
-
1526
- def main(argv: list[str] | None = None) -> int:
1527
- opts = _parse(list(argv) if argv is not None else sys.argv[1:])
1528
- if opts.repair is not None:
1529
- return _run_repair(opts)
1530
- if opts.trace_root:
1531
- return _run_trace_root(opts)
1532
- if opts.context:
1533
- return _run_context(opts)
1534
- try:
1535
- project_root, origin = _resolve_project_root(opts.project)
1536
- except ProjectRootError as exc:
1537
- print(f"❌ doctor: {exc}", file=sys.stderr)
1538
- return 2
1539
- manifest_pth = installed_tools.manifest_path(project_root)
1540
- manifest = installed_tools.read_manifest(manifest_pth)
1541
- if manifest is None:
1542
- # No project lockfile. Under ADR-020 global-only this is a
1543
- # legitimate state, not an error — run the lockfile-independent
1544
- # checks and report consumer state instead of a hard bail. The
1545
- # per-scope split + exit-code contract live in _run_no_manifest.
1546
- bridge_present = (project_root / BRIDGE_MARKER_RELATIVE).is_file()
1547
- return _run_no_manifest(opts, project_root, origin, bridge_present)
1548
-
1549
- records, known = _collect_manifest_entries(project_root, manifest)
1550
- missing, modified, tag_drift = _classify(records)
1551
- foreign = _foreign_records(
1552
- project_root, _scan_foreign(project_root, manifest, known),
1553
- )
1554
- drift_groups = {
1555
- "missing": missing, "modified": modified,
1556
- "foreign": foreign, "tag_drift": tag_drift,
1557
- }
1558
- checks = _run_checks(project_root, manifest, drift_groups, only=opts.check)
1559
- fail_check = any(c["status"] == "fail" for c in checks)
1560
-
1561
- if opts.json:
1562
- _emit_json(
1563
- project_root, missing, modified, foreign, tag_drift,
1564
- checks=checks, origin=origin,
1565
- )
1566
- else:
1567
- if opts.check is None:
1568
- print(f" 📍 project_root: {project_root} (origin: {origin})")
1569
- _emit_checks_text(checks)
1570
- if opts.check is None:
1571
- _emit_text(project_root, missing, modified, foreign, tag_drift)
1572
-
1573
- # Full-suite mode: exit code reflects drift only; failing health
1574
- # checks are surfaced visually but do not change the rc, preserving
1575
- # the original drift-detection contract. ``--check <id>`` mode is
1576
- # explicit and propagates the single check's verdict.
1577
- if opts.check is not None:
1578
- return 1 if fail_check else 0
1579
- return 1 if (missing or modified or foreign or tag_drift) else 0
1580
-
1581
-
1582
- if __name__ == "__main__": # pragma: no cover
1583
- raise SystemExit(main())