@event4u/agent-config 5.10.1 → 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 (2226) hide show
  1. package/.claude-plugin/marketplace.json +233 -229
  2. package/AGENTS.md +6 -6
  3. package/CHANGELOG.md +453 -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 -179
  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 -172
  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/cli_wrapper.py +0 -64
  1277. package/scripts/_lib/install_regenerator.py +0 -129
  1278. package/scripts/_lib/installed_lock.py +0 -256
  1279. package/scripts/_lib/scope_guard.sh +0 -162
  1280. package/scripts/_lib/value_ladder.py +0 -696
  1281. package/scripts/_lib/value_report.py +0 -455
  1282. package/scripts/_phase4_bucket.py +0 -210
  1283. package/scripts/_pilot_measure.py +0 -53
  1284. package/scripts/adoption_report.py +0 -195
  1285. package/scripts/adoption_snapshot.py +0 -219
  1286. package/scripts/adoption_status.py +0 -166
  1287. package/scripts/agent-config +0 -57
  1288. package/scripts/ai-video/adapters/gemini-veo.sh +0 -62
  1289. package/scripts/ai-video/adapters/higgsfield.sh +0 -245
  1290. package/scripts/ai-video/adapters/kling.sh +0 -59
  1291. package/scripts/ai-video/adapters/openai-images.sh +0 -143
  1292. package/scripts/ai-video/adapters/sora.sh +0 -60
  1293. package/scripts/ai-video/lib/adapter-common.sh +0 -116
  1294. package/scripts/ai-video/lib/adapter-contract.md +0 -163
  1295. package/scripts/ai-video/lib/fixtures/gemini-veo/result.json +0 -1
  1296. package/scripts/ai-video/lib/fixtures/higgsfield/result.json +0 -1
  1297. package/scripts/ai-video/lib/fixtures/kling/result.json +0 -1
  1298. package/scripts/ai-video/lib/fixtures/openai-images/result.json +0 -1
  1299. package/scripts/ai-video/lib/fixtures/sora/result.json +0 -1
  1300. package/scripts/ai-video/lib/load-config.sh +0 -140
  1301. package/scripts/ai-video/lib/validate-deps.sh +0 -132
  1302. package/scripts/ai-video/stitch.sh +0 -154
  1303. package/scripts/ai-video/test-pipeline.sh +0 -169
  1304. package/scripts/ai_council/advisors.py +0 -148
  1305. package/scripts/ai_council/clients.py +0 -1385
  1306. package/scripts/ai_council/compile_corpus.py +0 -179
  1307. package/scripts/ai_council/events_log.py +0 -141
  1308. package/scripts/ai_council/one_off_archive/2026-05/_one_off_2a4_acceptance.py +0 -208
  1309. package/scripts/ai_council/one_off_archive/2026-05/_one_off_budget_v2_audit.py +0 -206
  1310. package/scripts/ai_council/one_off_archive/2026-05/_one_off_context_layer_v1_estimate.py +0 -67
  1311. package/scripts/ai_council/one_off_archive/2026-05/_one_off_context_layer_v1_review.py +0 -292
  1312. package/scripts/ai_council/one_off_archive/2026-05/_one_off_followups_review.py +0 -259
  1313. package/scripts/ai_council/one_off_archive/2026-05/_one_off_nondestructive_inline_audit.py +0 -209
  1314. package/scripts/ai_council/one_off_archive/2026-05/_one_off_phase4_dispatch_latency.py +0 -108
  1315. package/scripts/ai_council/one_off_archive/2026-05/_one_off_phase6_trigger_jaccard.py +0 -92
  1316. package/scripts/ai_council/one_off_archive/2026-05/_one_off_phase_2a_budget_rebalance.py +0 -257
  1317. package/scripts/ai_council/one_off_archive/2026-05/_one_off_phase_2a_post_revert.py +0 -197
  1318. package/scripts/ai_council/one_off_archive/2026-05/_one_off_rebalancing_audit.py +0 -149
  1319. package/scripts/ai_council/one_off_archive/2026-05/_one_off_roundtrip.py +0 -111
  1320. package/scripts/ai_council/one_off_archive/2026-05/_one_off_rule_hardening_v1.py +0 -251
  1321. package/scripts/ai_council/one_off_archive/2026-05/_one_off_silent_taskfiles.py +0 -98
  1322. package/scripts/ai_council/one_off_archive/2026-05/_one_off_structural_open_questions.py +0 -232
  1323. package/scripts/ai_council/one_off_archive/2026-05/_one_off_structural_optimization.py +0 -144
  1324. package/scripts/ai_council/one_off_archive/2026-05/_one_off_structural_v3_gaps.py +0 -252
  1325. package/scripts/ai_council/one_off_archive/2026-05/_one_off_structural_v3_review.py +0 -240
  1326. package/scripts/ai_council/one_off_archive/2026-05/_one_off_tier_retrofit.py +0 -180
  1327. package/scripts/ai_council/pricing.py +0 -215
  1328. package/scripts/ai_council/session.py +0 -366
  1329. package/scripts/annotate_discovery.py +0 -149
  1330. package/scripts/apply_modules_config.py +0 -290
  1331. package/scripts/audit_adr_coverage.py +0 -175
  1332. package/scripts/audit_auto_rules.py +0 -175
  1333. package/scripts/audit_cloud_compatibility.py +0 -362
  1334. package/scripts/audit_command_surface.py +0 -374
  1335. package/scripts/audit_initial_context.py +0 -234
  1336. package/scripts/audit_likelihood.py +0 -148
  1337. package/scripts/audit_mcp_tools.py +0 -146
  1338. package/scripts/audit_overlap.py +0 -145
  1339. package/scripts/audit_user_type_axis.py +0 -140
  1340. package/scripts/backfill_model_tier.py +0 -182
  1341. package/scripts/bench_ab_cache_dispatch.py +0 -68
  1342. package/scripts/bench_ab_clone.py +0 -170
  1343. package/scripts/bench_ab_diff.py +0 -220
  1344. package/scripts/bench_ab_integrity.py +0 -143
  1345. package/scripts/bench_ab_run.py +0 -235
  1346. package/scripts/bench_ab_task_runner.py +0 -369
  1347. package/scripts/bench_ab_tracka_run.py +0 -202
  1348. package/scripts/bench_baseline_ready.py +0 -108
  1349. package/scripts/bench_condense_memory.py +0 -168
  1350. package/scripts/bench_drift_check.py +0 -151
  1351. package/scripts/bench_per_tool.py +0 -216
  1352. package/scripts/bench_rtk_savings.py +0 -320
  1353. package/scripts/bench_run.py +0 -272
  1354. package/scripts/bench_runner.py +0 -158
  1355. package/scripts/build_cloud_bundle.py +0 -458
  1356. package/scripts/build_discovery_manifest.py +0 -679
  1357. package/scripts/build_linear_digest.py +0 -260
  1358. package/scripts/build_mcp_registry_manifest.py +0 -181
  1359. package/scripts/build_rule_trigger_matrix.py +0 -350
  1360. package/scripts/capture_showcase_session.py +0 -361
  1361. package/scripts/check_always_budget.py +0 -532
  1362. package/scripts/check_artefact_checksums.py +0 -111
  1363. package/scripts/check_augment_description_cap.py +0 -79
  1364. package/scripts/check_augmentignore.py +0 -72
  1365. package/scripts/check_beta_review_markers.py +0 -127
  1366. package/scripts/check_cluster_patterns.py +0 -175
  1367. package/scripts/check_command_count_messaging.py +0 -158
  1368. package/scripts/check_condensation.py +0 -375
  1369. package/scripts/check_condensed_paths.py +0 -221
  1370. package/scripts/check_context_paths.py +0 -202
  1371. package/scripts/check_council_references.py +0 -228
  1372. package/scripts/check_discovery_determinism.py +0 -70
  1373. package/scripts/check_gate_paths.py +0 -117
  1374. package/scripts/check_module_management_neutral.py +0 -149
  1375. package/scripts/check_no_roadmap_refs.py +0 -155
  1376. package/scripts/check_one_off_location.py +0 -81
  1377. package/scripts/check_overlay_cascade_subdirs.py +0 -129
  1378. package/scripts/check_portability.py +0 -574
  1379. package/scripts/check_public_catalog_links.py +0 -125
  1380. package/scripts/check_public_links.py +0 -185
  1381. package/scripts/check_references.py +0 -541
  1382. package/scripts/check_release_includes_discovery.py +0 -61
  1383. package/scripts/check_release_pr_shape.py +0 -119
  1384. package/scripts/check_release_published.py +0 -145
  1385. package/scripts/check_reply_consistency.py +0 -169
  1386. package/scripts/check_roadmap_trackable.py +0 -114
  1387. package/scripts/check_role_doc_links.py +0 -110
  1388. package/scripts/check_safety_floor_untouched.py +0 -125
  1389. package/scripts/check_skill_requires.py +0 -143
  1390. package/scripts/check_template_pin_drift.py +0 -129
  1391. package/scripts/check_test_coverage_diff.py +0 -180
  1392. package/scripts/check_token_optimizer_freshness.py +0 -146
  1393. package/scripts/check_update_banner.py +0 -86
  1394. package/scripts/ci_time_ratio.py +0 -168
  1395. package/scripts/compile_router.py +0 -232
  1396. package/scripts/condense.py +0 -1649
  1397. package/scripts/condense_memory.py +0 -178
  1398. package/scripts/config/profiles.py +0 -188
  1399. package/scripts/config/session_profiles.py +0 -492
  1400. package/scripts/cost_by_conversation.py +0 -78
  1401. package/scripts/cost_summary.py +0 -97
  1402. package/scripts/council_cli.py +0 -2544
  1403. package/scripts/cross_repo_retrieve.py +0 -172
  1404. package/scripts/discovery_stats.py +0 -70
  1405. package/scripts/extract_audit_patterns.py +0 -202
  1406. package/scripts/first_run_gate_hook.py +0 -178
  1407. package/scripts/gen_discovery_baseline.py +0 -127
  1408. package/scripts/generate_catalog.py +0 -116
  1409. package/scripts/generate_index.py +0 -302
  1410. package/scripts/generate_ownership_matrix.py +0 -378
  1411. package/scripts/generate_pack_manifests.py +0 -183
  1412. package/scripts/hook_manifest.yaml +0 -243
  1413. package/scripts/hooks/dispatch_hook.py +0 -461
  1414. package/scripts/hooks/replay_hook.py +0 -144
  1415. package/scripts/hooks_doctor.py +0 -223
  1416. package/scripts/hooks_status.py +0 -157
  1417. package/scripts/install +0 -424
  1418. package/scripts/install-hooks.sh +0 -185
  1419. package/scripts/install.py +0 -5027
  1420. package/scripts/install.sh +0 -1140
  1421. package/scripts/inventory_abstraction_budget.py +0 -621
  1422. package/scripts/inventory_frontmatter.py +0 -164
  1423. package/scripts/inventory_meta_layers.py +0 -288
  1424. package/scripts/iron_law_sha.py +0 -107
  1425. package/scripts/linked_projects_list.py +0 -91
  1426. package/scripts/lint_agents_layout.py +0 -191
  1427. package/scripts/lint_agents_md.py +0 -208
  1428. package/scripts/lint_archived_skills.py +0 -159
  1429. package/scripts/lint_artefact_frontmatter.py +0 -180
  1430. package/scripts/lint_bench_ab.py +0 -172
  1431. package/scripts/lint_bench_corpus.py +0 -255
  1432. package/scripts/lint_command_tiers.py +0 -128
  1433. package/scripts/lint_commit_subjects.py +0 -139
  1434. package/scripts/lint_context_spine_usage.py +0 -137
  1435. package/scripts/lint_discovery_manifest.py +0 -136
  1436. package/scripts/lint_discovery_vocabulary.py +0 -156
  1437. package/scripts/lint_examples.py +0 -102
  1438. package/scripts/lint_explain_trace.py +0 -80
  1439. package/scripts/lint_featured_skills.py +0 -139
  1440. package/scripts/lint_framework_leakage.py +0 -375
  1441. package/scripts/lint_framework_leakage_allowlist.json +0 -575
  1442. package/scripts/lint_frontmatter_boilerplate.py +0 -77
  1443. package/scripts/lint_ghostwriter_source.py +0 -240
  1444. package/scripts/lint_handoffs.py +0 -217
  1445. package/scripts/lint_hook_concern_budget.py +0 -207
  1446. package/scripts/lint_hook_manifest.py +0 -217
  1447. package/scripts/lint_load_context.py +0 -196
  1448. package/scripts/lint_marketplace.py +0 -180
  1449. package/scripts/lint_marketplace_install_completeness.py +0 -188
  1450. package/scripts/lint_mcp_registry_manifest.py +0 -69
  1451. package/scripts/lint_media_policy_linkage.py +0 -140
  1452. package/scripts/lint_model_tier_coverage.py +0 -73
  1453. package/scripts/lint_namespace.py +0 -135
  1454. package/scripts/lint_no_new_atomic_commands.py +0 -180
  1455. package/scripts/lint_one_off_age.py +0 -184
  1456. package/scripts/lint_orchestration_dsl.py +0 -217
  1457. package/scripts/lint_pack_boundaries.py +0 -147
  1458. package/scripts/lint_pack_first_win.py +0 -103
  1459. package/scripts/lint_persona_governance.py +0 -164
  1460. package/scripts/lint_positioning.py +0 -143
  1461. package/scripts/lint_regression.py +0 -232
  1462. package/scripts/lint_roadmap_ci_steps.py +0 -186
  1463. package/scripts/lint_roadmap_complexity.py +0 -220
  1464. package/scripts/lint_role_experiences.py +0 -237
  1465. package/scripts/lint_rule_interactions.py +0 -170
  1466. package/scripts/lint_rule_tiers.py +0 -90
  1467. package/scripts/lint_showcase_sessions.py +0 -148
  1468. package/scripts/lint_skill_tools.py +0 -168
  1469. package/scripts/lint_topics_yaml.py +0 -89
  1470. package/scripts/lint_trust_coherence.py +0 -212
  1471. package/scripts/lint_value_dashboard.py +0 -218
  1472. package/scripts/mcp_parity_smoke.py +0 -164
  1473. package/scripts/mcp_registry_submit.sh +0 -187
  1474. package/scripts/mcp_server/__init__.py +0 -19
  1475. package/scripts/mcp_server/consumer_tool_catalog.json +0 -275
  1476. package/scripts/mcp_server/prompts.py +0 -441
  1477. package/scripts/mcp_server/resources.py +0 -201
  1478. package/scripts/mcp_server/tools.py +0 -838
  1479. package/scripts/measure_augment_budget.py +0 -214
  1480. package/scripts/measure_density.py +0 -232
  1481. package/scripts/measure_frugality_savings.py +0 -164
  1482. package/scripts/measure_markitdown_lift.py +0 -127
  1483. package/scripts/measure_patterns.py +0 -376
  1484. package/scripts/measure_projection_bytes.py +0 -159
  1485. package/scripts/measure_rule_budget.py +0 -347
  1486. package/scripts/measure_skill_reduction.py +0 -102
  1487. package/scripts/migrate_command_suggestions.py +0 -151
  1488. package/scripts/migrate_frontmatter_defaults.py +0 -245
  1489. package/scripts/mine_session.py +0 -279
  1490. package/scripts/move_artefact.py +0 -143
  1491. package/scripts/new_skill.py +0 -148
  1492. package/scripts/pack_mcp_content.py +0 -288
  1493. package/scripts/plan_physical_move.py +0 -353
  1494. package/scripts/print_required_checks.py +0 -196
  1495. package/scripts/probe_projection_fidelity.py +0 -202
  1496. package/scripts/profile_staleness_hook.py +0 -69
  1497. package/scripts/profile_use.py +0 -125
  1498. package/scripts/project_thin_rules.py +0 -168
  1499. package/scripts/prototype_lint_contradictions.py +0 -150
  1500. package/scripts/recruit_preflight.sh +0 -152
  1501. package/scripts/refine_ticket_detect.py +0 -646
  1502. package/scripts/release.py +0 -1049
  1503. package/scripts/render_benchmark_md.py +0 -312
  1504. package/scripts/render_value_md.py +0 -347
  1505. package/scripts/repro/repro_marketplace_install_gap.sh +0 -161
  1506. package/scripts/roadmap_progress_hook.py +0 -274
  1507. package/scripts/router_telemetry.py +0 -470
  1508. package/scripts/run_skill_evals.py +0 -185
  1509. package/scripts/runtime_registry.py +0 -166
  1510. package/scripts/schemas/command.schema.json +0 -178
  1511. package/scripts/schemas/rule.schema.json +0 -145
  1512. package/scripts/score_skill_selection.py +0 -198
  1513. package/scripts/skill_collision_clusters.py +0 -162
  1514. package/scripts/skill_discovery.py +0 -254
  1515. package/scripts/skill_linter.py +0 -3686
  1516. package/scripts/skill_overlap.py +0 -204
  1517. package/scripts/skill_preview.py +0 -179
  1518. package/scripts/skill_tools/audit_persona_coverage.py +0 -147
  1519. package/scripts/skill_tools/audit_user_type_coverage.py +0 -148
  1520. package/scripts/skill_tools/run_block_d_eval.py +0 -129
  1521. package/scripts/skill_tools/score_skill_relevance.py +0 -169
  1522. package/scripts/skill_tools/suggest_skill_for_task.py +0 -113
  1523. package/scripts/skill_trigger_eval.py +0 -682
  1524. package/scripts/skill_usage_collect.py +0 -191
  1525. package/scripts/skill_usage_report.py +0 -162
  1526. package/scripts/smoke/kernel.sh +0 -107
  1527. package/scripts/smoke/router.sh +0 -148
  1528. package/scripts/smoke/schema.sh +0 -71
  1529. package/scripts/smoke/skills.sh +0 -112
  1530. package/scripts/smoke_path_resolution.py +0 -93
  1531. package/scripts/smoke_quickstart.py +0 -144
  1532. package/scripts/snapshot_agent_outputs.py +0 -144
  1533. package/scripts/spotcheck_thin_root.py +0 -134
  1534. package/scripts/sync_agent_settings.py +0 -180
  1535. package/scripts/sync_github_metadata.py +0 -147
  1536. package/scripts/sync_gitignore.py +0 -291
  1537. package/scripts/telegraph_stats.py +0 -119
  1538. package/scripts/trigger_coverage.py +0 -129
  1539. package/scripts/update_counts.py +0 -195
  1540. package/scripts/update_prices.py +0 -125
  1541. package/scripts/validate_agent_settings.py +0 -124
  1542. package/scripts/validate_decision_engine.py +0 -136
  1543. package/scripts/validate_discovery_manifest.py +0 -94
  1544. package/scripts/validate_frontmatter.py +0 -571
  1545. package/scripts/verify_physical_move.py +0 -185
  1546. package/scripts/wrapper_freshness_hook.py +0 -86
  1547. /package/{.agent-src → dist/agent-src}/contexts/augment-infrastructure.md +0 -0
  1548. /package/{.agent-src → dist/agent-src}/contexts/authority/destructive-mechanics.md +0 -0
  1549. /package/{.agent-src → dist/agent-src}/contexts/authority/kernel-rule-edits.md +0 -0
  1550. /package/{.agent-src → dist/agent-src}/contexts/authority/scope-mechanics.md +0 -0
  1551. /package/{.agent-src → dist/agent-src}/contexts/communication/rules-auto/guidelines-mechanics.md +0 -0
  1552. /package/{.agent-src → dist/agent-src}/contexts/communication/rules-auto/skill-quality-mechanics.md +0 -0
  1553. /package/{.agent-src → dist/agent-src}/contexts/communication/rules-auto/slash-command-routing-policy-mechanics.md +0 -0
  1554. /package/{.agent-src → dist/agent-src}/contexts/communication/rules-auto/think-before-action-mechanics.md +0 -0
  1555. /package/{.agent-src → dist/agent-src}/contexts/communication/rules-auto/token-efficiency-mechanics.md +0 -0
  1556. /package/{.agent-src → dist/agent-src}/contexts/communication/rules-auto/user-interaction-mechanics.md +0 -0
  1557. /package/{.agent-src → dist/agent-src}/contexts/contracts/agents-md-anatomy.md +0 -0
  1558. /package/{.agent-src → dist/agent-src}/contexts/contracts/command-suggestion-flow.md +0 -0
  1559. /package/{.agent-src → dist/agent-src}/contexts/contracts/frugality-charter.md +0 -0
  1560. /package/{.agent-src → dist/agent-src}/contexts/contracts/research-schema.md +0 -0
  1561. /package/{.agent-src → dist/agent-src}/contexts/documentation-hierarchy.md +0 -0
  1562. /package/{.agent-src → dist/agent-src}/contexts/execution/autonomy-detection.md +0 -0
  1563. /package/{.agent-src → dist/agent-src}/contexts/execution/autonomy-examples.md +0 -0
  1564. /package/{.agent-src → dist/agent-src}/contexts/execution/autonomy-mechanics.md +0 -0
  1565. /package/{.agent-src → dist/agent-src}/contexts/execution/cheap-question-mechanics.md +0 -0
  1566. /package/{.agent-src → dist/agent-src}/contexts/execution/interrupt-examples.md +0 -0
  1567. /package/{.agent-src → dist/agent-src}/contexts/execution/roadmap-process-loop.md +0 -0
  1568. /package/{.agent-src → dist/agent-src}/contexts/execution/verification-mechanics.md +0 -0
  1569. /package/{.agent-src → dist/agent-src}/contexts/judges/no-consolidate-rationale.md +0 -0
  1570. /package/{.agent-src → dist/agent-src}/contexts/judges/persona-voice-rubric.md +0 -0
  1571. /package/{.agent-src → dist/agent-src}/contexts/model-recommendations.md +0 -0
  1572. /package/{.agent-src → dist/agent-src}/contexts/override-system.md +0 -0
  1573. /package/{.agent-src → dist/agent-src}/contexts/skills-and-commands.md +0 -0
  1574. /package/{.agent-src → dist/agent-src}/contexts/subagent-configuration.md +0 -0
  1575. /package/{.agent-src → dist/agent-src}/ghostwriter/README.md +0 -0
  1576. /package/{.agent-src → dist/agent-src}/ghostwriter/fictional-fixture-v1.md +0 -0
  1577. /package/{.agent-src → dist/agent-src}/packs/README.md +0 -0
  1578. /package/{.agent-src → dist/agent-src}/packs/agency-delivery.yml +0 -0
  1579. /package/{.agent-src → dist/agent-src}/packs/content-engine.yml +0 -0
  1580. /package/{.agent-src → dist/agent-src}/packs/founder-mvp.yml +0 -0
  1581. /package/{.agent-src → dist/agent-src}/personas/_template-specialist/persona.md +0 -0
  1582. /package/{.agent-src → dist/agent-src}/personas/advisors/contrarian.md +0 -0
  1583. /package/{.agent-src → dist/agent-src}/personas/advisors/executor.md +0 -0
  1584. /package/{.agent-src → dist/agent-src}/personas/advisors/expansionist.md +0 -0
  1585. /package/{.agent-src → dist/agent-src}/personas/advisors/first-principles.md +0 -0
  1586. /package/{.agent-src → dist/agent-src}/personas/advisors/outsider.md +0 -0
  1587. /package/{.agent-src → dist/agent-src}/personas/ai-agent.md +0 -0
  1588. /package/{.agent-src → dist/agent-src}/personas/ai-video-technical-director.md +0 -0
  1589. /package/{.agent-src → dist/agent-src}/personas/backend-architect.md +0 -0
  1590. /package/{.agent-src → dist/agent-src}/personas/cmo.md +0 -0
  1591. /package/{.agent-src → dist/agent-src}/personas/critical-challenger.md +0 -0
  1592. /package/{.agent-src → dist/agent-src}/personas/customer-success-lead.md +0 -0
  1593. /package/{.agent-src → dist/agent-src}/personas/developer.md +0 -0
  1594. /package/{.agent-src → dist/agent-src}/personas/discovery-lead.md +0 -0
  1595. /package/{.agent-src → dist/agent-src}/personas/eloquent-tamer.md +0 -0
  1596. /package/{.agent-src → dist/agent-src}/personas/engineering-manager.md +0 -0
  1597. /package/{.agent-src → dist/agent-src}/personas/finance-partner.md +0 -0
  1598. /package/{.agent-src → dist/agent-src}/personas/frontend-engineer.md +0 -0
  1599. /package/{.agent-src → dist/agent-src}/personas/growth-pm.md +0 -0
  1600. /package/{.agent-src → dist/agent-src}/personas/hollywood-director.md +0 -0
  1601. /package/{.agent-src → dist/agent-src}/personas/people-strategist.md +0 -0
  1602. /package/{.agent-src → dist/agent-src}/personas/product-owner.md +0 -0
  1603. /package/{.agent-src → dist/agent-src}/personas/qa.md +0 -0
  1604. /package/{.agent-src → dist/agent-src}/personas/revops-maintainer.md +0 -0
  1605. /package/{.agent-src → dist/agent-src}/personas/revops.md +0 -0
  1606. /package/{.agent-src → dist/agent-src}/personas/security-engineer.md +0 -0
  1607. /package/{.agent-src → dist/agent-src}/personas/senior-engineer.md +0 -0
  1608. /package/{.agent-src → dist/agent-src}/personas/stakeholder.md +0 -0
  1609. /package/{.agent-src → dist/agent-src}/personas/strategist.md +0 -0
  1610. /package/{.agent-src → dist/agent-src}/personas/tech-writer.md +0 -0
  1611. /package/{.agent-src → dist/agent-src}/presets/README.md +0 -0
  1612. /package/{.agent-src → dist/agent-src}/presets/balanced.yml +0 -0
  1613. /package/{.agent-src → dist/agent-src}/presets/fast.yml +0 -0
  1614. /package/{.agent-src → dist/agent-src}/presets/strict.yml +0 -0
  1615. /package/{.agent-src → dist/agent-src}/profiles/README.md +0 -0
  1616. /package/{.agent-src → dist/agent-src}/rules/agent-authority.md +0 -0
  1617. /package/{.agent-src → dist/agent-src}/rules/analysis-skill-routing.md +0 -0
  1618. /package/{.agent-src → dist/agent-src}/rules/architecture.md +0 -0
  1619. /package/{.agent-src → dist/agent-src}/rules/artifact-drafting-protocol.md +0 -0
  1620. /package/{.agent-src → dist/agent-src}/rules/artifact-engagement-recording.md +0 -0
  1621. /package/{.agent-src → dist/agent-src}/rules/autonomous-execution.md +0 -0
  1622. /package/{.agent-src → dist/agent-src}/rules/cli-output-handling.md +0 -0
  1623. /package/{.agent-src → dist/agent-src}/rules/command-suggestion-policy.md +0 -0
  1624. /package/{.agent-src → dist/agent-src}/rules/commit-conventions.md +0 -0
  1625. /package/{.agent-src → dist/agent-src}/rules/context-hygiene.md +0 -0
  1626. /package/{.agent-src → dist/agent-src}/rules/copilot-routing.md +0 -0
  1627. /package/{.agent-src → dist/agent-src}/rules/devcontainer-routing.md +0 -0
  1628. /package/{.agent-src → dist/agent-src}/rules/docker-commands.md +0 -0
  1629. /package/{.agent-src → dist/agent-src}/rules/domain-safety-disclaimer.md +0 -0
  1630. /package/{.agent-src → dist/agent-src}/rules/domain-safety-pii.md +0 -0
  1631. /package/{.agent-src → dist/agent-src}/rules/domain-safety-retention.md +0 -0
  1632. /package/{.agent-src → dist/agent-src}/rules/downstream-changes.md +0 -0
  1633. /package/{.agent-src → dist/agent-src}/rules/engineering-safety-floor.md +0 -0
  1634. /package/{.agent-src → dist/agent-src}/rules/external-reference-deep-dive.md +0 -0
  1635. /package/{.agent-src → dist/agent-src}/rules/fast-path-marker-visibility.md +0 -0
  1636. /package/{.agent-src → dist/agent-src}/rules/finance-safety-floor.md +0 -0
  1637. /package/{.agent-src → dist/agent-src}/rules/framework-neutrality-in-generic-skills.md +0 -0
  1638. /package/{.agent-src → dist/agent-src}/rules/git-history-discipline.md +0 -0
  1639. /package/{.agent-src → dist/agent-src}/rules/guidelines.md +0 -0
  1640. /package/{.agent-src → dist/agent-src}/rules/improve-before-implement.md +0 -0
  1641. /package/{.agent-src → dist/agent-src}/rules/invite-challenge.md +0 -0
  1642. /package/{.agent-src → dist/agent-src}/rules/laravel-routing.md +0 -0
  1643. /package/{.agent-src → dist/agent-src}/rules/laravel-translations.md +0 -0
  1644. /package/{.agent-src → dist/agent-src}/rules/low-impact-corpus-privacy-floor.md +0 -0
  1645. /package/{.agent-src → dist/agent-src}/rules/markdown-safe-codeblocks.md +0 -0
  1646. /package/{.agent-src → dist/agent-src}/rules/media-sync-ground-truth.md +0 -0
  1647. /package/{.agent-src → dist/agent-src}/rules/minimal-safe-diff.md +0 -0
  1648. /package/{.agent-src → dist/agent-src}/rules/no-decorative-emojis-in-git-surfaces.md +0 -0
  1649. /package/{.agent-src → dist/agent-src}/rules/onboarding-gate.md +0 -0
  1650. /package/{.agent-src → dist/agent-src}/rules/package-ci-checks.md +0 -0
  1651. /package/{.agent-src → dist/agent-src}/rules/php-coding.md +0 -0
  1652. /package/{.agent-src → dist/agent-src}/rules/reviewer-awareness.md +0 -0
  1653. /package/{.agent-src → dist/agent-src}/rules/roadmap-ci-steps-policy.md +0 -0
  1654. /package/{.agent-src → dist/agent-src}/rules/role-mode-adherence.md +0 -0
  1655. /package/{.agent-src → dist/agent-src}/rules/rule-type-governance.md +0 -0
  1656. /package/{.agent-src → dist/agent-src}/rules/runtime-safety.md +0 -0
  1657. /package/{.agent-src → dist/agent-src}/rules/security-sensitive-stop.md +0 -0
  1658. /package/{.agent-src → dist/agent-src}/rules/size-enforcement.md +0 -0
  1659. /package/{.agent-src → dist/agent-src}/rules/skill-improvement-trigger.md +0 -0
  1660. /package/{.agent-src → dist/agent-src}/rules/skill-quality.md +0 -0
  1661. /package/{.agent-src → dist/agent-src}/rules/slash-command-routing-policy.md +0 -0
  1662. /package/{.agent-src → dist/agent-src}/rules/strategy-safety-floor.md +0 -0
  1663. /package/{.agent-src → dist/agent-src}/rules/symfony-routing.md +0 -0
  1664. /package/{.agent-src → dist/agent-src}/rules/telegraph-speak.md +0 -0
  1665. /package/{.agent-src → dist/agent-src}/rules/think-before-action.md +0 -0
  1666. /package/{.agent-src → dist/agent-src}/rules/token-efficiency.md +0 -0
  1667. /package/{.agent-src → dist/agent-src}/rules/token-optimizer-maintenance.md +0 -0
  1668. /package/{.agent-src → dist/agent-src}/rules/tool-safety.md +0 -0
  1669. /package/{.agent-src → dist/agent-src}/rules/ui-audit-gate.md +0 -0
  1670. /package/{.agent-src → dist/agent-src}/rules/upstream-proposal.md +0 -0
  1671. /package/{.agent-src → dist/agent-src}/rules/user-interaction.md +0 -0
  1672. /package/{.agent-src → dist/agent-src}/scripts/scan-seeder-violations.php +0 -0
  1673. /package/{.agent-src → dist/agent-src}/skills/activation-design/SKILL.md +0 -0
  1674. /package/{.agent-src → dist/agent-src}/skills/adr-create/SKILL.md +0 -0
  1675. /package/{.agent-src → dist/agent-src}/skills/adversarial-review/SKILL.md +0 -0
  1676. /package/{.agent-src → dist/agent-src}/skills/agent-docs-writing/SKILL.md +0 -0
  1677. /package/{.agent-src → dist/agent-src}/skills/ai-council/SKILL.md +0 -0
  1678. /package/{.agent-src → dist/agent-src}/skills/analysis-autonomous-mode/SKILL.md +0 -0
  1679. /package/{.agent-src → dist/agent-src}/skills/analysis-skill-router/SKILL.md +0 -0
  1680. /package/{.agent-src → dist/agent-src}/skills/api-testing/SKILL.md +0 -0
  1681. /package/{.agent-src → dist/agent-src}/skills/architecture-review-lens/SKILL.md +0 -0
  1682. /package/{.agent-src → dist/agent-src}/skills/artisan-commands/SKILL.md +0 -0
  1683. /package/{.agent-src → dist/agent-src}/skills/async-python-patterns/SKILL.md +0 -0
  1684. /package/{.agent-src → dist/agent-src}/skills/aws-infrastructure/SKILL.md +0 -0
  1685. /package/{.agent-src → dist/agent-src}/skills/blast-radius-analyzer/SKILL.md +0 -0
  1686. /package/{.agent-src → dist/agent-src}/skills/bug-analyzer/SKILL.md +0 -0
  1687. /package/{.agent-src → dist/agent-src}/skills/build-buy-partner/SKILL.md +0 -0
  1688. /package/{.agent-src → dist/agent-src}/skills/canvas-design/SKILL.md +0 -0
  1689. /package/{.agent-src → dist/agent-src}/skills/canvas-design/evals/triggers.json +0 -0
  1690. /package/{.agent-src → dist/agent-src}/skills/churn-prevention/SKILL.md +0 -0
  1691. /package/{.agent-src → dist/agent-src}/skills/code-refactoring/SKILL.md +0 -0
  1692. /package/{.agent-src → dist/agent-src}/skills/command-routing/SKILL.md +0 -0
  1693. /package/{.agent-src → dist/agent-src}/skills/comp-banding/SKILL.md +0 -0
  1694. /package/{.agent-src → dist/agent-src}/skills/competitive-moat-analysis/SKILL.md +0 -0
  1695. /package/{.agent-src → dist/agent-src}/skills/competitive-positioning/SKILL.md +0 -0
  1696. /package/{.agent-src → dist/agent-src}/skills/composer-packages/SKILL.md +0 -0
  1697. /package/{.agent-src → dist/agent-src}/skills/content-funnel-design/SKILL.md +0 -0
  1698. /package/{.agent-src → dist/agent-src}/skills/context-authoring/SKILL.md +0 -0
  1699. /package/{.agent-src → dist/agent-src}/skills/contracts-cognition/SKILL.md +0 -0
  1700. /package/{.agent-src → dist/agent-src}/skills/conventional-commits-writing/SKILL.md +0 -0
  1701. /package/{.agent-src → dist/agent-src}/skills/copilot-agents-optimization/SKILL.md +0 -0
  1702. /package/{.agent-src → dist/agent-src}/skills/copilot-config/SKILL.md +0 -0
  1703. /package/{.agent-src → dist/agent-src}/skills/customer-research/SKILL.md +0 -0
  1704. /package/{.agent-src → dist/agent-src}/skills/data-flow-mapper/SKILL.md +0 -0
  1705. /package/{.agent-src → dist/agent-src}/skills/data-handling-judgment/SKILL.md +0 -0
  1706. /package/{.agent-src → dist/agent-src}/skills/dcf-modeling/SKILL.md +0 -0
  1707. /package/{.agent-src → dist/agent-src}/skills/deal-qualification-meddic/SKILL.md +0 -0
  1708. /package/{.agent-src → dist/agent-src}/skills/decision-record/SKILL.md +0 -0
  1709. /package/{.agent-src → dist/agent-src}/skills/defense-in-depth/SKILL.md +0 -0
  1710. /package/{.agent-src → dist/agent-src}/skills/dependency-upgrade/SKILL.md +0 -0
  1711. /package/{.agent-src → dist/agent-src}/skills/description-assist/SKILL.md +0 -0
  1712. /package/{.agent-src → dist/agent-src}/skills/devcontainer/SKILL.md +0 -0
  1713. /package/{.agent-src → dist/agent-src}/skills/developer-like-execution/SKILL.md +0 -0
  1714. /package/{.agent-src → dist/agent-src}/skills/discovery-interview/SKILL.md +0 -0
  1715. /package/{.agent-src → dist/agent-src}/skills/doc-coauthoring/SKILL.md +0 -0
  1716. /package/{.agent-src → dist/agent-src}/skills/doc-coauthoring/evals/triggers.json +0 -0
  1717. /package/{.agent-src → dist/agent-src}/skills/docker/SKILL.md +0 -0
  1718. /package/{.agent-src → dist/agent-src}/skills/editorial-calendar/SKILL.md +0 -0
  1719. /package/{.agent-src → dist/agent-src}/skills/eloquent/SKILL.md +0 -0
  1720. /package/{.agent-src → dist/agent-src}/skills/eloquent/evals/triggers.json +0 -0
  1721. /package/{.agent-src → dist/agent-src}/skills/error-handling-patterns/SKILL.md +0 -0
  1722. /package/{.agent-src → dist/agent-src}/skills/estimate-ticket/SKILL.md +0 -0
  1723. /package/{.agent-src → dist/agent-src}/skills/estimate-ticket/evals/output-schema.yml +0 -0
  1724. /package/{.agent-src → dist/agent-src}/skills/estimate-ticket/evals/triggers.json +0 -0
  1725. /package/{.agent-src → dist/agent-src}/skills/expansion-playbook/SKILL.md +0 -0
  1726. /package/{.agent-src → dist/agent-src}/skills/file-editor/SKILL.md +0 -0
  1727. /package/{.agent-src → dist/agent-src}/skills/finishing-a-development-branch/SKILL.md +0 -0
  1728. /package/{.agent-src → dist/agent-src}/skills/forecast-accuracy/SKILL.md +0 -0
  1729. /package/{.agent-src → dist/agent-src}/skills/forecasting/SKILL.md +0 -0
  1730. /package/{.agent-src → dist/agent-src}/skills/form-handler/SKILL.md +0 -0
  1731. /package/{.agent-src → dist/agent-src}/skills/fundraising-narrative/SKILL.md +0 -0
  1732. /package/{.agent-src → dist/agent-src}/skills/funnel-analysis/SKILL.md +0 -0
  1733. /package/{.agent-src → dist/agent-src}/skills/git-workflow/SKILL.md +0 -0
  1734. /package/{.agent-src → dist/agent-src}/skills/github-ci/SKILL.md +0 -0
  1735. /package/{.agent-src → dist/agent-src}/skills/grafana/SKILL.md +0 -0
  1736. /package/{.agent-src → dist/agent-src}/skills/gtm-launch/SKILL.md +0 -0
  1737. /package/{.agent-src → dist/agent-src}/skills/guideline-writing/SKILL.md +0 -0
  1738. /package/{.agent-src → dist/agent-src}/skills/hiring-loop-design/SKILL.md +0 -0
  1739. /package/{.agent-src → dist/agent-src}/skills/image-analyser/SKILL.md +0 -0
  1740. /package/{.agent-src → dist/agent-src}/skills/image-analyser/canon-spec.md +0 -0
  1741. /package/{.agent-src → dist/agent-src}/skills/image-analyser/evals/triggers.json +0 -0
  1742. /package/{.agent-src → dist/agent-src}/skills/image-creator/SKILL.md +0 -0
  1743. /package/{.agent-src → dist/agent-src}/skills/image-creator/evals/triggers.json +0 -0
  1744. /package/{.agent-src → dist/agent-src}/skills/incident-commander/SKILL.md +0 -0
  1745. /package/{.agent-src → dist/agent-src}/skills/jobs-events/SKILL.md +0 -0
  1746. /package/{.agent-src → dist/agent-src}/skills/judge-bug-hunter/SKILL.md +0 -0
  1747. /package/{.agent-src → dist/agent-src}/skills/judge-code-quality/SKILL.md +0 -0
  1748. /package/{.agent-src → dist/agent-src}/skills/judge-security-auditor/SKILL.md +0 -0
  1749. /package/{.agent-src → dist/agent-src}/skills/judge-test-coverage/SKILL.md +0 -0
  1750. /package/{.agent-src → dist/agent-src}/skills/laravel/SKILL.md +0 -0
  1751. /package/{.agent-src → dist/agent-src}/skills/laravel-api-endpoint/SKILL.md +0 -0
  1752. /package/{.agent-src → dist/agent-src}/skills/laravel-dto/SKILL.md +0 -0
  1753. /package/{.agent-src → dist/agent-src}/skills/laravel-horizon/SKILL.md +0 -0
  1754. /package/{.agent-src → dist/agent-src}/skills/laravel-mail/SKILL.md +0 -0
  1755. /package/{.agent-src → dist/agent-src}/skills/laravel-middleware/SKILL.md +0 -0
  1756. /package/{.agent-src → dist/agent-src}/skills/laravel-migration/SKILL.md +0 -0
  1757. /package/{.agent-src → dist/agent-src}/skills/laravel-notifications/SKILL.md +0 -0
  1758. /package/{.agent-src → dist/agent-src}/skills/laravel-pennant/SKILL.md +0 -0
  1759. /package/{.agent-src → dist/agent-src}/skills/laravel-pulse/SKILL.md +0 -0
  1760. /package/{.agent-src → dist/agent-src}/skills/laravel-reverb/SKILL.md +0 -0
  1761. /package/{.agent-src → dist/agent-src}/skills/laravel-scheduling/SKILL.md +0 -0
  1762. /package/{.agent-src → dist/agent-src}/skills/laravel-validation/SKILL.md +0 -0
  1763. /package/{.agent-src → dist/agent-src}/skills/laravel-websocket/SKILL.md +0 -0
  1764. /package/{.agent-src → dist/agent-src}/skills/launch-readiness/SKILL.md +0 -0
  1765. /package/{.agent-src → dist/agent-src}/skills/learning-to-rule-or-skill/SKILL.md +0 -0
  1766. /package/{.agent-src → dist/agent-src}/skills/livewire-architect/SKILL.md +0 -0
  1767. /package/{.agent-src → dist/agent-src}/skills/logging-monitoring/SKILL.md +0 -0
  1768. /package/{.agent-src → dist/agent-src}/skills/market-entry-analysis/SKILL.md +0 -0
  1769. /package/{.agent-src → dist/agent-src}/skills/markitdown/SKILL.md +0 -0
  1770. /package/{.agent-src → dist/agent-src}/skills/mcp/SKILL.md +0 -0
  1771. /package/{.agent-src → dist/agent-src}/skills/mcp-builder/SKILL.md +0 -0
  1772. /package/{.agent-src → dist/agent-src}/skills/memory-consolidation/SKILL.md +0 -0
  1773. /package/{.agent-src → dist/agent-src}/skills/messaging-architecture/SKILL.md +0 -0
  1774. /package/{.agent-src → dist/agent-src}/skills/migration-architect/SKILL.md +0 -0
  1775. /package/{.agent-src → dist/agent-src}/skills/mobile-e2e-strategy/SKILL.md +0 -0
  1776. /package/{.agent-src → dist/agent-src}/skills/module-detect-on-the-fly/SKILL.md +0 -0
  1777. /package/{.agent-src → dist/agent-src}/skills/module-management/SKILL.md +0 -0
  1778. /package/{.agent-src → dist/agent-src}/skills/multi-tenancy/SKILL.md +0 -0
  1779. /package/{.agent-src → dist/agent-src}/skills/nextjs-patterns/SKILL.md +0 -0
  1780. /package/{.agent-src → dist/agent-src}/skills/okr-tree-modeling/SKILL.md +0 -0
  1781. /package/{.agent-src → dist/agent-src}/skills/onboarding-design/SKILL.md +0 -0
  1782. /package/{.agent-src → dist/agent-src}/skills/onboarding-program/SKILL.md +0 -0
  1783. /package/{.agent-src → dist/agent-src}/skills/one-on-one-cadence/SKILL.md +0 -0
  1784. /package/{.agent-src → dist/agent-src}/skills/openapi/SKILL.md +0 -0
  1785. /package/{.agent-src → dist/agent-src}/skills/org-design/SKILL.md +0 -0
  1786. /package/{.agent-src → dist/agent-src}/skills/override-management/SKILL.md +0 -0
  1787. /package/{.agent-src → dist/agent-src}/skills/perf-feedback-craft/SKILL.md +0 -0
  1788. /package/{.agent-src → dist/agent-src}/skills/performance/SKILL.md +0 -0
  1789. /package/{.agent-src → dist/agent-src}/skills/performance-analysis/SKILL.md +0 -0
  1790. /package/{.agent-src → dist/agent-src}/skills/pest-testing/SKILL.md +0 -0
  1791. /package/{.agent-src → dist/agent-src}/skills/php-coder/SKILL.md +0 -0
  1792. /package/{.agent-src → dist/agent-src}/skills/php-coder/evals/triggers.json +0 -0
  1793. /package/{.agent-src → dist/agent-src}/skills/php-debugging/SKILL.md +0 -0
  1794. /package/{.agent-src → dist/agent-src}/skills/php-service/SKILL.md +0 -0
  1795. /package/{.agent-src → dist/agent-src}/skills/pipeline-strategy/SKILL.md +0 -0
  1796. /package/{.agent-src → dist/agent-src}/skills/pixar-storyteller/SKILL.md +0 -0
  1797. /package/{.agent-src → dist/agent-src}/skills/playwright-architect/SKILL.md +0 -0
  1798. /package/{.agent-src → dist/agent-src}/skills/playwright-testing/SKILL.md +0 -0
  1799. /package/{.agent-src → dist/agent-src}/skills/po-discovery/SKILL.md +0 -0
  1800. /package/{.agent-src → dist/agent-src}/skills/positioning-strategy/SKILL.md +0 -0
  1801. /package/{.agent-src → dist/agent-src}/skills/prediction-pool-optimizer/SKILL.md +0 -0
  1802. /package/{.agent-src → dist/agent-src}/skills/prediction-pool-optimizer/evals/triggers.json +0 -0
  1803. /package/{.agent-src → dist/agent-src}/skills/prediction-pool-optimizer/reference/ev-fixtures.md +0 -0
  1804. /package/{.agent-src → dist/agent-src}/skills/prediction-pool-optimizer/reference/odds-and-bonus.md +0 -0
  1805. /package/{.agent-src → dist/agent-src}/skills/privacy-review/SKILL.md +0 -0
  1806. /package/{.agent-src → dist/agent-src}/skills/project-analysis-core/SKILL.md +0 -0
  1807. /package/{.agent-src → dist/agent-src}/skills/project-analysis-hypothesis-driven/SKILL.md +0 -0
  1808. /package/{.agent-src → dist/agent-src}/skills/project-analysis-laravel/SKILL.md +0 -0
  1809. /package/{.agent-src → dist/agent-src}/skills/project-analysis-nextjs/SKILL.md +0 -0
  1810. /package/{.agent-src → dist/agent-src}/skills/project-analysis-node-express/SKILL.md +0 -0
  1811. /package/{.agent-src → dist/agent-src}/skills/project-analysis-react/SKILL.md +0 -0
  1812. /package/{.agent-src → dist/agent-src}/skills/project-analysis-symfony/SKILL.md +0 -0
  1813. /package/{.agent-src → dist/agent-src}/skills/project-analysis-zend-laminas/SKILL.md +0 -0
  1814. /package/{.agent-src → dist/agent-src}/skills/project-analyzer/SKILL.md +0 -0
  1815. /package/{.agent-src → dist/agent-src}/skills/project-docs/SKILL.md +0 -0
  1816. /package/{.agent-src → dist/agent-src}/skills/prompt-engineering-patterns/SKILL.md +0 -0
  1817. /package/{.agent-src → dist/agent-src}/skills/prompt-optimizer/SKILL.md +0 -0
  1818. /package/{.agent-src → dist/agent-src}/skills/quality-tools/SKILL.md +0 -0
  1819. /package/{.agent-src → dist/agent-src}/skills/react-native-setup/SKILL.md +0 -0
  1820. /package/{.agent-src → dist/agent-src}/skills/receiving-code-review/SKILL.md +0 -0
  1821. /package/{.agent-src → dist/agent-src}/skills/refine-prompt/SKILL.md +0 -0
  1822. /package/{.agent-src → dist/agent-src}/skills/refine-ticket/SKILL.md +0 -0
  1823. /package/{.agent-src → dist/agent-src}/skills/refine-ticket/detection-map.yml +0 -0
  1824. /package/{.agent-src → dist/agent-src}/skills/refine-ticket/evals/output-schema.yml +0 -0
  1825. /package/{.agent-src → dist/agent-src}/skills/refine-ticket/evals/triggers.json +0 -0
  1826. /package/{.agent-src → dist/agent-src}/skills/release-comms/SKILL.md +0 -0
  1827. /package/{.agent-src → dist/agent-src}/skills/repomix-packer/SKILL.md +0 -0
  1828. /package/{.agent-src → dist/agent-src}/skills/requesting-code-review/SKILL.md +0 -0
  1829. /package/{.agent-src → dist/agent-src}/skills/retention-loops/SKILL.md +0 -0
  1830. /package/{.agent-src → dist/agent-src}/skills/review-routing/SKILL.md +0 -0
  1831. /package/{.agent-src → dist/agent-src}/skills/rice-prioritization/SKILL.md +0 -0
  1832. /package/{.agent-src → dist/agent-src}/skills/risk-officer/SKILL.md +0 -0
  1833. /package/{.agent-src → dist/agent-src}/skills/roadmap-writing/SKILL.md +0 -0
  1834. /package/{.agent-src → dist/agent-src}/skills/rtk-output-filtering/SKILL.md +0 -0
  1835. /package/{.agent-src → dist/agent-src}/skills/runway-cognition/SKILL.md +0 -0
  1836. /package/{.agent-src → dist/agent-src}/skills/scenario-modeling/SKILL.md +0 -0
  1837. /package/{.agent-src → dist/agent-src}/skills/secrets-management/SKILL.md +0 -0
  1838. /package/{.agent-src → dist/agent-src}/skills/security/SKILL.md +0 -0
  1839. /package/{.agent-src → dist/agent-src}/skills/security-audit/SKILL.md +0 -0
  1840. /package/{.agent-src → dist/agent-src}/skills/sequential-thinking/SKILL.md +0 -0
  1841. /package/{.agent-src → dist/agent-src}/skills/skill-improvement-pipeline/SKILL.md +0 -0
  1842. /package/{.agent-src → dist/agent-src}/skills/skill-management/SKILL.md +0 -0
  1843. /package/{.agent-src → dist/agent-src}/skills/skill-reviewer/SKILL.md +0 -0
  1844. /package/{.agent-src → dist/agent-src}/skills/skill-writing/SKILL.md +0 -0
  1845. /package/{.agent-src → dist/agent-src}/skills/skill-writing/evals/triggers.json +0 -0
  1846. /package/{.agent-src → dist/agent-src}/skills/stakeholder-tradeoff/SKILL.md +0 -0
  1847. /package/{.agent-src → dist/agent-src}/skills/subagent-orchestration/SKILL.md +0 -0
  1848. /package/{.agent-src → dist/agent-src}/skills/subagent-orchestration/prompts/README.md +0 -0
  1849. /package/{.agent-src → dist/agent-src}/skills/subagent-orchestration/prompts/do-and-judge-two-stage.md +0 -0
  1850. /package/{.agent-src → dist/agent-src}/skills/subagent-orchestration/prompts/do-and-judge.md +0 -0
  1851. /package/{.agent-src → dist/agent-src}/skills/subagent-orchestration/prompts/do-competitively.md +0 -0
  1852. /package/{.agent-src → dist/agent-src}/skills/subagent-orchestration/prompts/do-in-parallel.md +0 -0
  1853. /package/{.agent-src → dist/agent-src}/skills/subagent-orchestration/prompts/do-in-steps.md +0 -0
  1854. /package/{.agent-src → dist/agent-src}/skills/subagent-orchestration/prompts/do-in-worktrees.md +0 -0
  1855. /package/{.agent-src → dist/agent-src}/skills/subagent-orchestration/prompts/judge-with-debate.md +0 -0
  1856. /package/{.agent-src → dist/agent-src}/skills/subagent-orchestration/schemas/subagent-status.json +0 -0
  1857. /package/{.agent-src → dist/agent-src}/skills/symfony-workflow/SKILL.md +0 -0
  1858. /package/{.agent-src → dist/agent-src}/skills/systematic-debugging/SKILL.md +0 -0
  1859. /package/{.agent-src → dist/agent-src}/skills/tech-debt-tracker/SKILL.md +0 -0
  1860. /package/{.agent-src → dist/agent-src}/skills/terraform/SKILL.md +0 -0
  1861. /package/{.agent-src → dist/agent-src}/skills/terragrunt/SKILL.md +0 -0
  1862. /package/{.agent-src → dist/agent-src}/skills/test-driven-development/SKILL.md +0 -0
  1863. /package/{.agent-src → dist/agent-src}/skills/test-performance/SKILL.md +0 -0
  1864. /package/{.agent-src → dist/agent-src}/skills/testing-anti-patterns/SKILL.md +0 -0
  1865. /package/{.agent-src → dist/agent-src}/skills/testing-anti-patterns/process-anti-patterns.md +0 -0
  1866. /package/{.agent-src → dist/agent-src}/skills/throughput-vs-morale-tradeoff/SKILL.md +0 -0
  1867. /package/{.agent-src → dist/agent-src}/skills/token-optimizer/SKILL.md +0 -0
  1868. /package/{.agent-src → dist/agent-src}/skills/traefik/SKILL.md +0 -0
  1869. /package/{.agent-src → dist/agent-src}/skills/ui-component-architect/SKILL.md +0 -0
  1870. /package/{.agent-src → dist/agent-src}/skills/unit-economics-modeling/SKILL.md +0 -0
  1871. /package/{.agent-src → dist/agent-src}/skills/universal-project-analysis/SKILL.md +0 -0
  1872. /package/{.agent-src → dist/agent-src}/skills/using-git-worktrees/SKILL.md +0 -0
  1873. /package/{.agent-src → dist/agent-src}/skills/validate-feature-fit/SKILL.md +0 -0
  1874. /package/{.agent-src → dist/agent-src}/skills/verify-completion-evidence/SKILL.md +0 -0
  1875. /package/{.agent-src → dist/agent-src}/skills/video-director/SKILL.md +0 -0
  1876. /package/{.agent-src → dist/agent-src}/skills/vision-articulation/SKILL.md +0 -0
  1877. /package/{.agent-src → dist/agent-src}/skills/voc-extract/SKILL.md +0 -0
  1878. /package/{.agent-src → dist/agent-src}/skills/voice-and-tone-design/SKILL.md +0 -0
  1879. /package/{.agent-src → dist/agent-src}/templates/agent-settings.md +0 -0
  1880. /package/{.agent-src → dist/agent-src}/templates/agents/.gitattributes.fragment +0 -0
  1881. /package/{.agent-src → dist/agent-src}/templates/agents/memory/architecture-decisions.example.yml +0 -0
  1882. /package/{.agent-src → dist/agent-src}/templates/agents/memory/domain-invariants.example.yml +0 -0
  1883. /package/{.agent-src → dist/agent-src}/templates/agents/memory/historical-patterns.example.yml +0 -0
  1884. /package/{.agent-src → dist/agent-src}/templates/agents/memory/incident-learnings.example.yml +0 -0
  1885. /package/{.agent-src → dist/agent-src}/templates/agents/memory/ownership.example.yml +0 -0
  1886. /package/{.agent-src → dist/agent-src}/templates/agents/memory/product-rules.example.yml +0 -0
  1887. /package/{.agent-src → dist/agent-src}/templates/contexts/auth-model.md +0 -0
  1888. /package/{.agent-src → dist/agent-src}/templates/contexts/data-sensitivity.md +0 -0
  1889. /package/{.agent-src → dist/agent-src}/templates/contexts/deployment-order.md +0 -0
  1890. /package/{.agent-src → dist/agent-src}/templates/contexts/observability.md +0 -0
  1891. /package/{.agent-src → dist/agent-src}/templates/contexts/tenant-boundaries.md +0 -0
  1892. /package/{.agent-src → dist/agent-src}/templates/contexts.md +0 -0
  1893. /package/{.agent-src → dist/agent-src}/templates/features.md +0 -0
  1894. /package/{.agent-src → dist/agent-src}/templates/github-workflows/memory-hygiene.yml +0 -0
  1895. /package/{.agent-src → dist/agent-src}/templates/github-workflows/pr-risk-review.yml +0 -0
  1896. /package/{.agent-src → dist/agent-src}/templates/github-workflows/roadmap-progress-check.yml +0 -0
  1897. /package/{.agent-src → dist/agent-src}/templates/overrides/command.md +0 -0
  1898. /package/{.agent-src → dist/agent-src}/templates/overrides/guideline.md +0 -0
  1899. /package/{.agent-src → dist/agent-src}/templates/overrides/rule.md +0 -0
  1900. /package/{.agent-src → dist/agent-src}/templates/overrides/skill.md +0 -0
  1901. /package/{.agent-src → dist/agent-src}/templates/overrides/template.md +0 -0
  1902. /package/{.agent-src → dist/agent-src}/templates/roadmaps.md +0 -0
  1903. /package/{.agent-src → dist/agent-src}/templates/scripts/README.md +0 -0
  1904. /package/{.agent-src → dist/agent-src}/templates/scripts/check_memory.py +0 -0
  1905. /package/{.agent-src → dist/agent-src}/templates/scripts/check_memory_proposal.py +0 -0
  1906. /package/{.agent-src → dist/agent-src}/templates/scripts/historical-bug-patterns.example.yml +0 -0
  1907. /package/{.agent-src → dist/agent-src}/templates/scripts/implement_ticket/__init__.py +0 -0
  1908. /package/{.agent-src → dist/agent-src}/templates/scripts/implement_ticket/__main__.py +0 -0
  1909. /package/{.agent-src → dist/agent-src}/templates/scripts/memory_hash.py +0 -0
  1910. /package/{.agent-src → dist/agent-src}/templates/scripts/memory_lookup.py +0 -0
  1911. /package/{.agent-src → dist/agent-src}/templates/scripts/memory_report.py +0 -0
  1912. /package/{.agent-src → dist/agent-src}/templates/scripts/memory_signal.py +0 -0
  1913. /package/{.agent-src → dist/agent-src}/templates/scripts/memory_status.py +0 -0
  1914. /package/{.agent-src → dist/agent-src}/templates/scripts/ownership-map.example.yml +0 -0
  1915. /package/{.agent-src → dist/agent-src}/templates/scripts/pr-risk-config.example.yml +0 -0
  1916. /package/{.agent-src → dist/agent-src}/templates/scripts/pr_review_routing.py +0 -0
  1917. /package/{.agent-src → dist/agent-src}/templates/scripts/pr_risk_review.py +0 -0
  1918. /package/{.agent-src → dist/agent-src}/templates/scripts/telemetry/__init__.py +0 -0
  1919. /package/{.agent-src → dist/agent-src}/templates/scripts/telemetry/aggregator.py +0 -0
  1920. /package/{.agent-src → dist/agent-src}/templates/scripts/telemetry/boundary.py +0 -0
  1921. /package/{.agent-src → dist/agent-src}/templates/scripts/telemetry/engagement.py +0 -0
  1922. /package/{.agent-src → dist/agent-src}/templates/scripts/telemetry/report_renderer.py +0 -0
  1923. /package/{.agent-src → dist/agent-src}/templates/scripts/telemetry/settings.py +0 -0
  1924. /package/{.agent-src → dist/agent-src}/templates/scripts/telemetry_record.py +0 -0
  1925. /package/{.agent-src → dist/agent-src}/templates/scripts/telemetry_report.py +0 -0
  1926. /package/{.agent-src → dist/agent-src}/templates/scripts/telemetry_status.py +0 -0
  1927. /package/{.agent-src → dist/agent-src}/templates/scripts/tier_usage_report.py +0 -0
  1928. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/__init__.py +0 -0
  1929. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/__main__.py +0 -0
  1930. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/_lib/__init__.py +0 -0
  1931. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/_lib/agent_settings.py +0 -0
  1932. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/_lib/user_global_paths.py +0 -0
  1933. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/cli.py +0 -0
  1934. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/cli_args.py +0 -0
  1935. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/delivery_state.py +0 -0
  1936. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/directives/__init__.py +0 -0
  1937. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/directives/backend/__init__.py +0 -0
  1938. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/directives/backend/analyze.py +0 -0
  1939. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/directives/backend/implement.py +0 -0
  1940. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/directives/backend/memory.py +0 -0
  1941. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/directives/backend/plan.py +0 -0
  1942. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/directives/backend/refine.py +0 -0
  1943. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/directives/backend/report.py +0 -0
  1944. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/directives/backend/test.py +0 -0
  1945. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/directives/backend/verify.py +0 -0
  1946. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/directives/mixed/__init__.py +0 -0
  1947. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/directives/mixed/contract.py +0 -0
  1948. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/directives/mixed/stitch.py +0 -0
  1949. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/directives/mixed/ui.py +0 -0
  1950. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/directives/ui/__init__.py +0 -0
  1951. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/directives/ui/_passthrough.py +0 -0
  1952. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/directives/ui/apply.py +0 -0
  1953. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/directives/ui/audit.py +0 -0
  1954. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/directives/ui/design.py +0 -0
  1955. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/directives/ui_trivial/__init__.py +0 -0
  1956. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/directives/ui_trivial/_skipped.py +0 -0
  1957. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/directives/ui_trivial/apply.py +0 -0
  1958. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/directives/ui_trivial/refine.py +0 -0
  1959. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/directives/ui_trivial/report.py +0 -0
  1960. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/directives/ui_trivial/test.py +0 -0
  1961. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/dispatcher.py +0 -0
  1962. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/emitters.py +0 -0
  1963. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/errors.py +0 -0
  1964. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/hook_bootstrap.py +0 -0
  1965. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/hooks/__init__.py +0 -0
  1966. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/hooks/builtin/__init__.py +0 -0
  1967. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/hooks/builtin/_chat_history_base.py +0 -0
  1968. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/hooks/builtin/chat_history_append.py +0 -0
  1969. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/hooks/builtin/chat_history_halt_append.py +0 -0
  1970. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/hooks/builtin/decision_gate.py +0 -0
  1971. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/hooks/builtin/decision_trace.py +0 -0
  1972. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/hooks/builtin/directive_set_guard.py +0 -0
  1973. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/hooks/builtin/halt_surface_audit.py +0 -0
  1974. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/hooks/builtin/memory_visibility.py +0 -0
  1975. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/hooks/builtin/state_shape_validation.py +0 -0
  1976. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/hooks/builtin/trace.py +0 -0
  1977. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/hooks/context.py +0 -0
  1978. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/hooks/events.py +0 -0
  1979. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/hooks/exceptions.py +0 -0
  1980. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/hooks/registry.py +0 -0
  1981. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/hooks/runner.py +0 -0
  1982. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/hooks/settings.py +0 -0
  1983. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/input_builders.py +0 -0
  1984. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/intent/__init__.py +0 -0
  1985. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/intent/classify.py +0 -0
  1986. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/migration/__init__.py +0 -0
  1987. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/migration/v0_to_v1.py +0 -0
  1988. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/persona_policy.py +0 -0
  1989. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/resolvers/__init__.py +0 -0
  1990. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/resolvers/diff.py +0 -0
  1991. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/resolvers/file.py +0 -0
  1992. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/resolvers/prompt.py +0 -0
  1993. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/scoring/__init__.py +0 -0
  1994. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/scoring/confidence.py +0 -0
  1995. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/scoring/decision_engine.py +0 -0
  1996. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/scoring/decision_trace.py +0 -0
  1997. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/scoring/memory_visibility.py +0 -0
  1998. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/stack/__init__.py +0 -0
  1999. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/stack/detect.py +0 -0
  2000. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/state.py +0 -0
  2001. /package/{.agent-src → dist/agent-src}/templates/scripts/work_engine/state_io.py +0 -0
  2002. /package/{.agent-src → dist/agent-src}/templates/skill-archive-note.md +0 -0
  2003. /package/{.agent-src → dist/agent-src}/templates/skill.md +0 -0
  2004. /package/{.agent-src → dist/agent-src}/user-types/_template/user-type.md +0 -0
  2005. /package/{.agent-src → dist/agent-src}/user-types/galabau-field-crew.md +0 -0
  2006. /package/{.agent-src → dist/agent-src}/user-types/metalworking-shop.md +0 -0
  2007. /package/{.agent-src → dist/agent-src}/user-types/truck-driver.md +0 -0
  2008. /package/{config → src/config}/discovery/session-profiles.yml +0 -0
  2009. /package/{config → src/config}/discovery/unassigned-artefacts.yml +0 -0
  2010. /package/{config → src/config}/gitignore-block.txt +0 -0
  2011. /package/{config → src/config}/profiles/balanced.ini +0 -0
  2012. /package/{config → src/config}/profiles/full.ini +0 -0
  2013. /package/{config → src/config}/profiles/minimal.ini +0 -0
  2014. /package/{scripts → src/scripts}/_archive/_backfill_skill_domains.py +0 -0
  2015. /package/{scripts → src/scripts}/_archive/_phase2_shim_helper.py +0 -0
  2016. /package/{scripts → src/scripts}/_archive/_pilot_council_question.py +0 -0
  2017. /package/{scripts → src/scripts}/_cli/__init__.py +0 -0
  2018. /package/{scripts → src/scripts}/_cli/cmd_explain.py +0 -0
  2019. /package/{scripts → src/scripts}/_cli/cmd_prune.py +0 -0
  2020. /package/{scripts → src/scripts}/_cli/cmd_settings_check.py +0 -0
  2021. /package/{scripts → src/scripts}/_cli/cmd_sync.py +0 -0
  2022. /package/{scripts → src/scripts}/_cli/cmd_uninstall.py +0 -0
  2023. /package/{scripts → src/scripts}/_cli/cmd_validate.py +0 -0
  2024. /package/{scripts → src/scripts}/_cli/explain_last/__init__.py +0 -0
  2025. /package/{scripts → src/scripts}/_cli/explain_last/assumptions.py +0 -0
  2026. /package/{scripts → src/scripts}/_cli/explain_last/council.py +0 -0
  2027. /package/{scripts → src/scripts}/_cli/explain_last/halt.py +0 -0
  2028. /package/{scripts → src/scripts}/_cli/explain_last/inputs.py +0 -0
  2029. /package/{scripts → src/scripts}/_cli/explain_last/memory.py +0 -0
  2030. /package/{scripts → src/scripts}/_cli/explain_last/provider.py +0 -0
  2031. /package/{scripts → src/scripts}/_cli/explain_last/render.py +0 -0
  2032. /package/{scripts → src/scripts}/_cli/explain_last/route.py +0 -0
  2033. /package/{scripts → src/scripts}/_cli/explain_last/scrubber.py +0 -0
  2034. /package/{scripts → src/scripts}/_cli/explain_last/sections/__init__.py +0 -0
  2035. /package/{scripts → src/scripts}/_cli/explain_last/sections/assumptions.py +0 -0
  2036. /package/{scripts → src/scripts}/_cli/explain_last/sections/council.py +0 -0
  2037. /package/{scripts → src/scripts}/_cli/explain_last/sections/halt.py +0 -0
  2038. /package/{scripts → src/scripts}/_cli/explain_last/sections/header.py +0 -0
  2039. /package/{scripts → src/scripts}/_cli/explain_last/sections/inputs.py +0 -0
  2040. /package/{scripts → src/scripts}/_cli/explain_last/sections/memory.py +0 -0
  2041. /package/{scripts → src/scripts}/_cli/explain_last/sections/pack.py +0 -0
  2042. /package/{scripts → src/scripts}/_cli/explain_last/sections/provider.py +0 -0
  2043. /package/{scripts → src/scripts}/_cli/explain_last/sections/route.py +0 -0
  2044. /package/{scripts → src/scripts}/_cli/explain_last/state_loader.py +0 -0
  2045. /package/{scripts → src/scripts}/_emit_domain_table.py +0 -0
  2046. /package/{scripts → src/scripts}/_lib/__init__.py +0 -0
  2047. /package/{scripts → src/scripts}/_lib/agent_settings.py +0 -0
  2048. /package/{scripts → src/scripts}/_lib/agents_overlay.py +0 -0
  2049. /package/{scripts → src/scripts}/_lib/bench_ab_scoring.py +0 -0
  2050. /package/{scripts → src/scripts}/_lib/bench_cost.py +0 -0
  2051. /package/{scripts → src/scripts}/_lib/bench_quality.py +0 -0
  2052. /package/{scripts → src/scripts}/_lib/bench_report.py +0 -0
  2053. /package/{scripts → src/scripts}/_lib/bench_telegraph.py +0 -0
  2054. /package/{scripts → src/scripts}/_lib/bench_telegraph_report.py +0 -0
  2055. /package/{scripts → src/scripts}/_lib/fs_atomic.py +0 -0
  2056. /package/{scripts → src/scripts}/_lib/installed_tools.py +0 -0
  2057. /package/{scripts → src/scripts}/_lib/json_pointers.py +0 -0
  2058. /package/{scripts → src/scripts}/_lib/linked_projects.py +0 -0
  2059. /package/{scripts → src/scripts}/_lib/module_detection.py +0 -0
  2060. /package/{scripts → src/scripts}/_lib/pin_resolver.py +0 -0
  2061. /package/{scripts → src/scripts}/_lib/script_output.py +0 -0
  2062. /package/{scripts → src/scripts}/_lib/token_count.py +0 -0
  2063. /package/{scripts → src/scripts}/_lib/update_check.py +0 -0
  2064. /package/{scripts → src/scripts}/_lib/user_global_paths.py +0 -0
  2065. /package/{scripts → src/scripts}/_tmp_scan_framework_leakage.py +0 -0
  2066. /package/{scripts → src/scripts}/adr/regenerate_index.py +0 -0
  2067. /package/{scripts/ai-video/lib/fixtures/kling → src/scripts/ai-video/lib/fixtures/comfyui}/scene-0001.mp4 +0 -0
  2068. /package/{scripts → src/scripts}/ai-video/lib/fixtures/gemini-veo/scene-0001.mp4 +0 -0
  2069. /package/{scripts → src/scripts}/ai-video/lib/fixtures/higgsfield/scene-0001.mp4 +0 -0
  2070. /package/{scripts → src/scripts}/ai-video/lib/fixtures/openai-images/scene-0001.png +0 -0
  2071. /package/{scripts → src/scripts}/ai-video/lib/fixtures/sora/scene-0001.mp4 +0 -0
  2072. /package/{scripts → src/scripts}/ai-video/lib/operator-pick.sh +0 -0
  2073. /package/{scripts → src/scripts}/ai-video/lib/parse-blueprint.sh +0 -0
  2074. /package/{scripts → src/scripts}/ai-video/lib/probe-audio.sh +0 -0
  2075. /package/{scripts → src/scripts}/ai-video/lib/redact.sh +0 -0
  2076. /package/{scripts → src/scripts}/ai_council/__init__.py +0 -0
  2077. /package/{scripts → src/scripts}/ai_council/_default_prices.py +0 -0
  2078. /package/{scripts → src/scripts}/ai_council/airgap.py +0 -0
  2079. /package/{scripts → src/scripts}/ai_council/budget_guard.py +0 -0
  2080. /package/{scripts → src/scripts}/ai_council/bundler.py +0 -0
  2081. /package/{scripts → src/scripts}/ai_council/cli_hints.py +0 -0
  2082. /package/{scripts → src/scripts}/ai_council/confidence_gate.py +0 -0
  2083. /package/{scripts → src/scripts}/ai_council/config.py +0 -0
  2084. /package/{scripts → src/scripts}/ai_council/consensus.py +0 -0
  2085. /package/{scripts → src/scripts}/ai_council/learn_low_impact_preview.py +0 -0
  2086. /package/{scripts → src/scripts}/ai_council/low_impact.py +0 -0
  2087. /package/{scripts → src/scripts}/ai_council/low_impact_corpus.py +0 -0
  2088. /package/{scripts → src/scripts}/ai_council/low_impact_intake.py +0 -0
  2089. /package/{scripts → src/scripts}/ai_council/modes.py +0 -0
  2090. /package/{scripts → src/scripts}/ai_council/necessity.py +0 -0
  2091. /package/{scripts → src/scripts}/ai_council/one_off_archive/2026-05/README.md +0 -0
  2092. /package/{scripts → src/scripts}/ai_council/one_off_archive/2026-05/_one_off_add_quiet.py +0 -0
  2093. /package/{scripts → src/scripts}/ai_council/one_off_archive/2026-05/_one_off_inject_quiet_flag.py +0 -0
  2094. /package/{scripts → src/scripts}/ai_council/one_off_archive/2026-05/_one_off_measure_v2.sh +0 -0
  2095. /package/{scripts → src/scripts}/ai_council/one_off_archive/2026-05/_one_off_measure_verbosity.sh +0 -0
  2096. /package/{scripts → src/scripts}/ai_council/one_off_archive/2026-05/_one_off_per_task.sh +0 -0
  2097. /package/{scripts → src/scripts}/ai_council/orchestrator.py +0 -0
  2098. /package/{scripts → src/scripts}/ai_council/probation_gate.py +0 -0
  2099. /package/{scripts → src/scripts}/ai_council/project_context.py +0 -0
  2100. /package/{scripts → src/scripts}/ai_council/prompts.py +0 -0
  2101. /package/{scripts → src/scripts}/ai_council/redact_low_impact_entry.py +0 -0
  2102. /package/{scripts → src/scripts}/ai_council/replay.py +0 -0
  2103. /package/{scripts → src/scripts}/ai_council/shadow_dispatch.py +0 -0
  2104. /package/{scripts → src/scripts}/ai_council/solo_dispatch.py +0 -0
  2105. /package/{scripts → src/scripts}/audit_skill_descriptions.py +0 -0
  2106. /package/{scripts → src/scripts}/bootstrap.sh +0 -0
  2107. /package/{scripts → src/scripts}/chat_history.py +0 -0
  2108. /package/{scripts → src/scripts}/check_bite_sized_granularity.py +0 -0
  2109. /package/{scripts → src/scripts}/check_council_layout.py +0 -0
  2110. /package/{scripts → src/scripts}/check_iron_law_prominence.py +0 -0
  2111. /package/{scripts → src/scripts}/check_kernel_rule_bundle.py +0 -0
  2112. /package/{scripts → src/scripts}/check_md_language.py +0 -0
  2113. /package/{scripts → src/scripts}/check_memory.py +0 -0
  2114. /package/{scripts → src/scripts}/check_memory_proposal.py +0 -0
  2115. /package/{scripts → src/scripts}/check_no_local_settings_committed.py +0 -0
  2116. /package/{scripts → src/scripts}/check_proposal.py +0 -0
  2117. /package/{scripts → src/scripts}/check_release_trunk_sync.py +0 -0
  2118. /package/{scripts → src/scripts}/ci_status.py +0 -0
  2119. /package/{scripts → src/scripts}/ci_summary.py +0 -0
  2120. /package/{scripts → src/scripts}/cleanup_other_scope.sh +0 -0
  2121. /package/{scripts → src/scripts}/command_suggester/__init__.py +0 -0
  2122. /package/{scripts → src/scripts}/command_suggester/cooldown.py +0 -0
  2123. /package/{scripts → src/scripts}/command_suggester/loader.py +0 -0
  2124. /package/{scripts → src/scripts}/command_suggester/match.py +0 -0
  2125. /package/{scripts → src/scripts}/command_suggester/rank.py +0 -0
  2126. /package/{scripts → src/scripts}/command_suggester/render.py +0 -0
  2127. /package/{scripts → src/scripts}/command_suggester/sanitize.py +0 -0
  2128. /package/{scripts → src/scripts}/command_suggester/settings.py +0 -0
  2129. /package/{scripts → src/scripts}/command_suggester/types.py +0 -0
  2130. /package/{scripts → src/scripts}/condense.sh +0 -0
  2131. /package/{scripts → src/scripts}/config/__init__.py +0 -0
  2132. /package/{scripts → src/scripts}/config/presets.py +0 -0
  2133. /package/{scripts → src/scripts}/context_hygiene_hook.py +0 -0
  2134. /package/{scripts → src/scripts}/cost/budget.mjs +0 -0
  2135. /package/{scripts → src/scripts}/cost/preflight.mjs +0 -0
  2136. /package/{scripts → src/scripts}/cost/track.mjs +0 -0
  2137. /package/{scripts → src/scripts}/council_prune.py +0 -0
  2138. /package/{scripts → src/scripts}/count_token_optimizer_usage.sh +0 -0
  2139. /package/{scripts → src/scripts}/expected_perms.json +0 -0
  2140. /package/{scripts → src/scripts}/first-run.sh +0 -0
  2141. /package/{scripts → src/scripts}/ghostwriter_fixture_allowlist.txt +0 -0
  2142. /package/{scripts → src/scripts}/hermetic-install.sh +0 -0
  2143. /package/{scripts → src/scripts}/hooks/__init__.py +0 -0
  2144. /package/{scripts → src/scripts}/hooks/augment-chat-history.sh +0 -0
  2145. /package/{scripts → src/scripts}/hooks/augment-context-hygiene.sh +0 -0
  2146. /package/{scripts → src/scripts}/hooks/augment-dispatcher.sh +0 -0
  2147. /package/{scripts → src/scripts}/hooks/augment-onboarding-gate.sh +0 -0
  2148. /package/{scripts → src/scripts}/hooks/augment-roadmap-progress.sh +0 -0
  2149. /package/{scripts → src/scripts}/hooks/cline-dispatcher.sh +0 -0
  2150. /package/{scripts → src/scripts}/hooks/cowork-dispatcher.sh +0 -0
  2151. /package/{scripts → src/scripts}/hooks/cursor-dispatcher.sh +0 -0
  2152. /package/{scripts → src/scripts}/hooks/dispatch_issues.py +0 -0
  2153. /package/{scripts → src/scripts}/hooks/envelope.py +0 -0
  2154. /package/{scripts → src/scripts}/hooks/gemini-dispatcher.sh +0 -0
  2155. /package/{scripts → src/scripts}/hooks/state_io.py +0 -0
  2156. /package/{scripts → src/scripts}/hooks/windsurf-dispatcher.sh +0 -0
  2157. /package/{scripts → src/scripts}/install_anthropic_key.sh +0 -0
  2158. /package/{scripts → src/scripts}/install_openai_key.sh +0 -0
  2159. /package/{scripts → src/scripts}/lint_global_paths.py +0 -0
  2160. /package/{scripts → src/scripts}/lint_readme_jargon.py +0 -0
  2161. /package/{scripts → src/scripts}/lint_readme_size.py +0 -0
  2162. /package/{scripts → src/scripts}/mcp_render.py +0 -0
  2163. /package/{scripts → src/scripts}/mcp_server/__main__.py +0 -0
  2164. /package/{scripts → src/scripts}/mcp_server/catalog.py +0 -0
  2165. /package/{scripts → src/scripts}/mcp_server/metadata.py +0 -0
  2166. /package/{scripts → src/scripts}/mcp_server/requirements.txt +0 -0
  2167. /package/{scripts → src/scripts}/mcp_server/server.py +0 -0
  2168. /package/{scripts → src/scripts}/mcp_server/telemetry.py +0 -0
  2169. /package/{scripts → src/scripts}/mcp_setup.sh +0 -0
  2170. /package/{scripts → src/scripts}/mcp_telemetry_health.py +0 -0
  2171. /package/{scripts → src/scripts}/mcp_telemetry_query.py +0 -0
  2172. /package/{scripts → src/scripts}/mcp_telemetry_store.py +0 -0
  2173. /package/{scripts → src/scripts}/memory_hash.py +0 -0
  2174. /package/{scripts → src/scripts}/memory_lookup.py +0 -0
  2175. /package/{scripts → src/scripts}/memory_report.py +0 -0
  2176. /package/{scripts → src/scripts}/memory_signal.py +0 -0
  2177. /package/{scripts → src/scripts}/memory_status.py +0 -0
  2178. /package/{scripts → src/scripts}/minimal_safe_diff_hook.py +0 -0
  2179. /package/{scripts → src/scripts}/onboarding_gate_hook.py +0 -0
  2180. /package/{scripts → src/scripts}/prediction-pool/adapters/_schema.md +0 -0
  2181. /package/{scripts → src/scripts}/prediction-pool/adapters/kicktipp.yml +0 -0
  2182. /package/{scripts → src/scripts}/prediction-pool/poisson_sim.py +0 -0
  2183. /package/{scripts → src/scripts}/prediction-pool/pool_winsim.py +0 -0
  2184. /package/{scripts → src/scripts}/prediction-pool/score_ev.py +0 -0
  2185. /package/{scripts → src/scripts}/prepack-check.mjs +0 -0
  2186. /package/{scripts → src/scripts}/probe_skill_registration.py +0 -0
  2187. /package/{scripts → src/scripts}/propose_modules_config.py +0 -0
  2188. /package/{scripts → src/scripts}/readme_linter.py +0 -0
  2189. /package/{scripts → src/scripts}/redact_hook_capture.py +0 -0
  2190. /package/{scripts → src/scripts}/requirements-evals.txt +0 -0
  2191. /package/{scripts → src/scripts}/runtime_dispatcher.py +0 -0
  2192. /package/{scripts → src/scripts}/runtime_handler.py +0 -0
  2193. /package/{scripts → src/scripts}/schemas/agent-settings.schema.json +0 -0
  2194. /package/{scripts → src/scripts}/schemas/persona.schema.json +0 -0
  2195. /package/{scripts → src/scripts}/schemas/skill.schema.json +0 -0
  2196. /package/{scripts → src/scripts}/schemas/user-type-axis.schema.json +0 -0
  2197. /package/{scripts → src/scripts}/schemas/user-type.schema.json +0 -0
  2198. /package/{scripts → src/scripts}/setup_eval_venv.sh +0 -0
  2199. /package/{scripts → src/scripts}/skill_tools/__init__.py +0 -0
  2200. /package/{scripts → src/scripts}/sync_yaml_rt.py +0 -0
  2201. /package/{scripts → src/scripts}/tool_registry.py +0 -0
  2202. /package/{scripts → src/scripts}/tools/__init__.py +0 -0
  2203. /package/{scripts → src/scripts}/tools/adapter_errors.py +0 -0
  2204. /package/{scripts → src/scripts}/tools/base_adapter.py +0 -0
  2205. /package/{scripts → src/scripts}/tools/github_adapter.py +0 -0
  2206. /package/{scripts → src/scripts}/tools/jira_adapter.py +0 -0
  2207. /package/{scripts → src/scripts}/update-github-metadata.sh +0 -0
  2208. /package/{scripts → src/scripts}/validate_safe_paths.py +0 -0
  2209. /package/{scripts → src/scripts}/validate_telegraph_carveouts.py +0 -0
  2210. /package/{scripts → src/scripts}/verify_before_complete_hook.py +0 -0
  2211. /package/{templates → src/templates}/agent-config-wrapper.sh +0 -0
  2212. /package/{templates → src/templates}/agent-user.md +0 -0
  2213. /package/{templates → src/templates}/agent-user.yml +0 -0
  2214. /package/{templates → src/templates}/claude_desktop_config.json.template +0 -0
  2215. /package/{templates → src/templates}/consumer-settings/ONBOARDING.md +0 -0
  2216. /package/{templates → src/templates}/consumer-settings/README.md +0 -0
  2217. /package/{templates → src/templates}/consumer-settings/augment-cli-hooks.json +0 -0
  2218. /package/{templates → src/templates}/consumer-settings/augment-settings.json +0 -0
  2219. /package/{templates → src/templates}/consumer-settings/claude-settings.json +0 -0
  2220. /package/{templates → src/templates}/consumer-settings/copilot-settings.json +0 -0
  2221. /package/{templates → src/templates}/cursor-rule.mdc.j2 +0 -0
  2222. /package/{templates → src/templates}/marketing-copy.yml +0 -0
  2223. /package/{templates → src/templates}/minimal/.agent-settings.yml +0 -0
  2224. /package/{templates → src/templates}/minimal/agents-overrides-readme.md +0 -0
  2225. /package/{templates → src/templates}/minimal/overrides-gitkeep +0 -0
  2226. /package/{templates → src/templates}/windsurf-rule.md.j2 +0 -0
@@ -0,0 +1,1583 @@
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[3]
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() / "src" / "scripts" / "hermetic-install.sh"
743
+ if not script.exists():
744
+ return {
745
+ "id": "offline-readiness", "status": "warn",
746
+ "message": "src/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())