@event4u/agent-config 2.25.0 → 3.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 (804) hide show
  1. package/.agent-src/commands/agent-handoff.md +15 -3
  2. package/.agent-src/commands/agent-status.md +12 -0
  3. package/.agent-src/commands/agents/audit.md +12 -0
  4. package/.agent-src/commands/agents/init.md +12 -0
  5. package/.agent-src/commands/agents/optimize.md +12 -0
  6. package/.agent-src/commands/agents/user/accept.md +12 -0
  7. package/.agent-src/commands/agents/user/init.md +12 -0
  8. package/.agent-src/commands/agents/user/review.md +12 -0
  9. package/.agent-src/commands/agents/user/show.md +12 -0
  10. package/.agent-src/commands/agents/user/update.md +12 -0
  11. package/.agent-src/commands/agents/user.md +12 -0
  12. package/.agent-src/commands/agents.md +12 -0
  13. package/.agent-src/commands/analyze-reference-repo.md +15 -3
  14. package/.agent-src/commands/bug-fix.md +13 -0
  15. package/.agent-src/commands/bug-investigate.md +13 -1
  16. package/.agent-src/commands/challenge-me/vision.md +12 -0
  17. package/.agent-src/commands/challenge-me/with-docs.md +12 -0
  18. package/.agent-src/commands/challenge-me.md +12 -0
  19. package/.agent-src/commands/chat-history/import.md +16 -4
  20. package/.agent-src/commands/chat-history/learn.md +15 -3
  21. package/.agent-src/commands/chat-history/show.md +17 -5
  22. package/.agent-src/commands/chat-history.md +14 -2
  23. package/.agent-src/commands/check-current-md.md +12 -0
  24. package/.agent-src/commands/commit/in-chunks.md +12 -0
  25. package/.agent-src/commands/commit.md +12 -0
  26. package/.agent-src/commands/compress.md +12 -0
  27. package/.agent-src/commands/context/create.md +17 -5
  28. package/.agent-src/commands/context/refactor.md +15 -3
  29. package/.agent-src/commands/context.md +12 -0
  30. package/.agent-src/commands/cost-report.md +12 -0
  31. package/.agent-src/commands/council/analysis.md +15 -3
  32. package/.agent-src/commands/council/debate.md +17 -5
  33. package/.agent-src/commands/council/default.md +17 -5
  34. package/.agent-src/commands/council/design.md +12 -0
  35. package/.agent-src/commands/council/optimize.md +12 -0
  36. package/.agent-src/commands/council/pr.md +12 -0
  37. package/.agent-src/commands/council.md +13 -1
  38. package/.agent-src/commands/create-pr/description-only.md +12 -0
  39. package/.agent-src/commands/create-pr.md +39 -0
  40. package/.agent-src/commands/e2e-heal.md +12 -0
  41. package/.agent-src/commands/e2e-plan.md +12 -0
  42. package/.agent-src/commands/estimate-ticket.md +12 -0
  43. package/.agent-src/commands/feature/dev.md +13 -1
  44. package/.agent-src/commands/feature/explore.md +12 -0
  45. package/.agent-src/commands/feature/plan.md +14 -2
  46. package/.agent-src/commands/feature/refactor.md +12 -0
  47. package/.agent-src/commands/feature/roadmap.md +14 -2
  48. package/.agent-src/commands/feature.md +12 -0
  49. package/.agent-src/commands/fix/ci.md +12 -0
  50. package/.agent-src/commands/fix/portability.md +12 -0
  51. package/.agent-src/commands/fix/pr-bot-comments.md +12 -0
  52. package/.agent-src/commands/fix/pr-comments.md +12 -0
  53. package/.agent-src/commands/fix/pr-developer-comments.md +12 -0
  54. package/.agent-src/commands/fix/refs.md +12 -0
  55. package/.agent-src/commands/fix/seeder.md +15 -2
  56. package/.agent-src/commands/fix.md +12 -0
  57. package/.agent-src/commands/ghostwriter/delete.md +20 -8
  58. package/.agent-src/commands/ghostwriter/fetch.md +19 -7
  59. package/.agent-src/commands/ghostwriter/list.md +19 -7
  60. package/.agent-src/commands/ghostwriter/show.md +14 -2
  61. package/.agent-src/commands/ghostwriter/write.md +15 -3
  62. package/.agent-src/commands/ghostwriter.md +14 -2
  63. package/.agent-src/commands/grill-me.md +12 -0
  64. package/.agent-src/commands/implement-ticket.md +12 -0
  65. package/.agent-src/commands/jira-ticket.md +12 -0
  66. package/.agent-src/commands/judge/on-diff.md +12 -0
  67. package/.agent-src/commands/judge/solo.md +12 -0
  68. package/.agent-src/commands/judge/steps.md +12 -0
  69. package/.agent-src/commands/judge.md +12 -0
  70. package/.agent-src/commands/memory/add.md +15 -3
  71. package/.agent-src/commands/memory/learn-low-impact.md +18 -6
  72. package/.agent-src/commands/memory/load.md +12 -0
  73. package/.agent-src/commands/memory/mine-session.md +12 -0
  74. package/.agent-src/commands/memory/promote.md +12 -0
  75. package/.agent-src/commands/memory/propose.md +12 -0
  76. package/.agent-src/commands/memory.md +12 -0
  77. package/.agent-src/commands/mode.md +12 -0
  78. package/.agent-src/commands/module/create.md +13 -0
  79. package/.agent-src/commands/module/explore.md +23 -7
  80. package/.agent-src/commands/module.md +12 -0
  81. package/.agent-src/commands/optimize/agents-dir.md +14 -2
  82. package/.agent-src/commands/optimize/augmentignore.md +64 -20
  83. package/.agent-src/commands/optimize/rtk.md +68 -30
  84. package/.agent-src/commands/optimize/skills.md +12 -0
  85. package/.agent-src/commands/optimize-prompt.md +12 -0
  86. package/.agent-src/commands/optimize.md +12 -0
  87. package/.agent-src/commands/orchestrate.md +13 -1
  88. package/.agent-src/commands/override/create.md +12 -0
  89. package/.agent-src/commands/override/manage.md +12 -0
  90. package/.agent-src/commands/override.md +12 -0
  91. package/.agent-src/commands/package-reset.md +12 -0
  92. package/.agent-src/commands/package-test.md +98 -10
  93. package/.agent-src/commands/post-as/ghostwriter.md +12 -0
  94. package/.agent-src/commands/post-as/me.md +13 -1
  95. package/.agent-src/commands/post-as.md +12 -0
  96. package/.agent-src/commands/prepare-for-review.md +12 -0
  97. package/.agent-src/commands/project-analyze.md +27 -15
  98. package/.agent-src/commands/project-health.md +13 -1
  99. package/.agent-src/commands/quality-fix.md +61 -27
  100. package/.agent-src/commands/refine-ticket.md +12 -0
  101. package/.agent-src/commands/research/deep.md +12 -0
  102. package/.agent-src/commands/research/report.md +12 -0
  103. package/.agent-src/commands/research.md +12 -0
  104. package/.agent-src/commands/review-changes.md +12 -0
  105. package/.agent-src/commands/review-routing.md +12 -0
  106. package/.agent-src/commands/roadmap/ai-council.md +15 -3
  107. package/.agent-src/commands/roadmap/create.md +13 -1
  108. package/.agent-src/commands/roadmap/process-full.md +12 -0
  109. package/.agent-src/commands/roadmap/process-phase.md +12 -0
  110. package/.agent-src/commands/roadmap/process-step.md +12 -0
  111. package/.agent-src/commands/roadmap.md +12 -0
  112. package/.agent-src/commands/rule-compliance-audit.md +12 -0
  113. package/.agent-src/commands/set-cost-profile.md +12 -0
  114. package/.agent-src/commands/sync-agent-settings.md +12 -0
  115. package/.agent-src/commands/sync-gitignore/fix.md +32 -13
  116. package/.agent-src/commands/sync-gitignore.md +13 -1
  117. package/.agent-src/commands/tests/create.md +12 -0
  118. package/.agent-src/commands/tests/execute.md +12 -0
  119. package/.agent-src/commands/tests.md +12 -0
  120. package/.agent-src/commands/threat-model.md +12 -0
  121. package/.agent-src/commands/update-form-request-messages.md +14 -1
  122. package/.agent-src/commands/upstream-contribute.md +12 -0
  123. package/.agent-src/commands/video/from-script.md +12 -0
  124. package/.agent-src/commands/video/scene.md +12 -0
  125. package/.agent-src/commands/video/stitch.md +13 -1
  126. package/.agent-src/commands/video/storyboard.md +12 -0
  127. package/.agent-src/commands/video.md +12 -0
  128. package/.agent-src/commands/work.md +12 -0
  129. package/.agent-src/contexts/augment-infrastructure.md +6 -9
  130. package/.agent-src/contexts/authority/scope-mechanics.md +11 -0
  131. package/.agent-src/contexts/communication/rules-auto/guidelines-mechanics.md +1 -1
  132. package/.agent-src/contexts/contracts/agents-md-anatomy.md +1 -1
  133. package/.agent-src/contexts/contracts/research-schema.md +1 -1
  134. package/.agent-src/contexts/documentation-hierarchy.md +2 -2
  135. package/.agent-src/contexts/execution/interrupt-examples.md +34 -0
  136. package/.agent-src/contexts/execution/roadmap-process-loop.md +19 -0
  137. package/.agent-src/contexts/skills-and-commands.md +2 -2
  138. package/.agent-src/ghostwriter/README.md +2 -2
  139. package/.agent-src/ghostwriter/fictional-fixture-v1.md +1 -1
  140. package/.agent-src/personas/README.md +1 -1
  141. package/.agent-src/personas/advisors/contrarian.md +1 -1
  142. package/.agent-src/personas/advisors/executor.md +1 -1
  143. package/.agent-src/personas/advisors/expansionist.md +1 -1
  144. package/.agent-src/personas/advisors/first-principles.md +1 -1
  145. package/.agent-src/personas/advisors/outsider.md +1 -1
  146. package/.agent-src/rules/agent-authority.md +12 -0
  147. package/.agent-src/rules/analysis-skill-routing.md +12 -0
  148. package/.agent-src/rules/architecture.md +37 -11
  149. package/.agent-src/rules/artifact-drafting-protocol.md +19 -1
  150. package/.agent-src/rules/artifact-engagement-recording.md +13 -1
  151. package/.agent-src/rules/ask-when-uncertain.md +12 -0
  152. package/.agent-src/rules/augment-edit-discipline.md +40 -0
  153. package/.agent-src/rules/augment-source-of-truth.md +15 -3
  154. package/.agent-src/rules/autonomous-execution.md +44 -1
  155. package/.agent-src/rules/caveman-speak.md +13 -1
  156. package/.agent-src/rules/cli-output-handling.md +13 -1
  157. package/.agent-src/rules/command-suggestion-policy.md +13 -1
  158. package/.agent-src/rules/commit-conventions.md +13 -1
  159. package/.agent-src/rules/commit-policy.md +12 -0
  160. package/.agent-src/rules/context-hygiene.md +16 -4
  161. package/.agent-src/rules/copilot-routing.md +13 -1
  162. package/.agent-src/rules/devcontainer-routing.md +13 -1
  163. package/.agent-src/rules/direct-answers.md +12 -0
  164. package/.agent-src/rules/docker-commands.md +13 -1
  165. package/.agent-src/rules/domain-adoption-policy.md +21 -10
  166. package/.agent-src/rules/domain-safety-disclaimer.md +126 -0
  167. package/.agent-src/rules/domain-safety-pii.md +154 -0
  168. package/.agent-src/rules/domain-safety-retention.md +98 -0
  169. package/.agent-src/rules/downstream-changes.md +17 -5
  170. package/.agent-src/rules/external-reference-deep-dive.md +13 -1
  171. package/.agent-src/rules/fast-path-marker-visibility.md +21 -1
  172. package/.agent-src/rules/framework-neutrality-in-generic-skills.md +142 -0
  173. package/.agent-src/rules/git-history-discipline.md +111 -0
  174. package/.agent-src/rules/guidelines.md +12 -0
  175. package/.agent-src/rules/improve-before-implement.md +13 -1
  176. package/.agent-src/rules/invite-challenge.md +13 -1
  177. package/.agent-src/rules/language-and-tone.md +12 -0
  178. package/.agent-src/rules/laravel-routing.md +13 -1
  179. package/.agent-src/rules/laravel-translations.md +13 -1
  180. package/.agent-src/rules/low-impact-corpus-privacy-floor.md +17 -5
  181. package/.agent-src/rules/markdown-safe-codeblocks.md +13 -1
  182. package/.agent-src/rules/media-governance-routing.md +27 -15
  183. package/.agent-src/rules/minimal-safe-diff.md +19 -1
  184. package/.agent-src/rules/missing-tool-handling.md +13 -1
  185. package/.agent-src/rules/model-recommendation.md +13 -1
  186. package/.agent-src/rules/no-attribution-footers.md +13 -1
  187. package/.agent-src/rules/no-cheap-questions.md +12 -0
  188. package/.agent-src/rules/no-roadmap-references.md +32 -18
  189. package/.agent-src/rules/non-destructive-by-default.md +12 -0
  190. package/.agent-src/rules/onboarding-gate.md +19 -6
  191. package/.agent-src/rules/package-ci-checks.md +12 -0
  192. package/.agent-src/rules/persona-governance.md +13 -1
  193. package/.agent-src/rules/php-coding.md +13 -1
  194. package/.agent-src/rules/preservation-guard.md +13 -1
  195. package/.agent-src/rules/provider-lifecycle-discipline.md +14 -2
  196. package/.agent-src/rules/reviewer-awareness.md +13 -1
  197. package/.agent-src/rules/roadmap-ci-steps-policy.md +13 -1
  198. package/.agent-src/rules/roadmap-progress-sync.md +18 -1
  199. package/.agent-src/rules/role-mode-adherence.md +13 -1
  200. package/.agent-src/rules/rule-type-governance.md +13 -1
  201. package/.agent-src/rules/runtime-safety.md +13 -1
  202. package/.agent-src/rules/scope-control.md +12 -0
  203. package/.agent-src/rules/security-sensitive-stop.md +13 -1
  204. package/.agent-src/rules/size-enforcement.md +12 -0
  205. package/.agent-src/rules/skill-improvement-trigger.md +13 -1
  206. package/.agent-src/rules/skill-quality.md +13 -1
  207. package/.agent-src/rules/slash-command-routing-policy.md +13 -1
  208. package/.agent-src/rules/symfony-routing.md +13 -1
  209. package/.agent-src/rules/think-before-action.md +13 -1
  210. package/.agent-src/rules/token-efficiency.md +13 -1
  211. package/.agent-src/rules/token-optimizer-maintenance.md +12 -0
  212. package/.agent-src/rules/tool-safety.md +13 -1
  213. package/.agent-src/rules/ui-audit-gate.md +13 -1
  214. package/.agent-src/rules/upstream-proposal.md +13 -1
  215. package/.agent-src/rules/user-interaction.md +13 -1
  216. package/.agent-src/rules/user-interrupt-priority.md +58 -0
  217. package/.agent-src/rules/verify-before-complete.md +23 -2
  218. package/.agent-src/skills/accessibility-auditor/SKILL.md +12 -0
  219. package/.agent-src/skills/activation-design/SKILL.md +12 -0
  220. package/.agent-src/skills/adr-create/SKILL.md +12 -0
  221. package/.agent-src/skills/adversarial-review/SKILL.md +13 -1
  222. package/.agent-src/skills/agent-docs-writing/SKILL.md +16 -4
  223. package/.agent-src/skills/agents-md-thin-root/SKILL.md +14 -2
  224. package/.agent-src/skills/ai-council/SKILL.md +29 -15
  225. package/.agent-src/skills/analysis-autonomous-mode/SKILL.md +12 -0
  226. package/.agent-src/skills/analysis-skill-router/SKILL.md +12 -0
  227. package/.agent-src/skills/api-design/SKILL.md +13 -3
  228. package/.agent-src/skills/api-endpoint/SKILL.md +70 -154
  229. package/.agent-src/skills/api-testing/SKILL.md +23 -0
  230. package/.agent-src/skills/architecture-review-lens/SKILL.md +12 -0
  231. package/.agent-src/skills/artisan-commands/SKILL.md +12 -0
  232. package/.agent-src/skills/async-python-patterns/SKILL.md +13 -1
  233. package/.agent-src/skills/authz-review/SKILL.md +12 -2
  234. package/.agent-src/skills/aws-infrastructure/SKILL.md +12 -0
  235. package/.agent-src/skills/blade-ui/SKILL.md +12 -0
  236. package/.agent-src/skills/blast-radius-analyzer/SKILL.md +12 -0
  237. package/.agent-src/skills/bug-analyzer/SKILL.md +14 -2
  238. package/.agent-src/skills/build-buy-partner/SKILL.md +12 -0
  239. package/.agent-src/skills/canvas-design/SKILL.md +12 -0
  240. package/.agent-src/skills/character-consistency/SKILL.md +23 -11
  241. package/.agent-src/skills/check-refs/SKILL.md +12 -0
  242. package/.agent-src/skills/churn-prevention/SKILL.md +12 -0
  243. package/.agent-src/skills/code-refactoring/SKILL.md +52 -34
  244. package/.agent-src/skills/code-review/SKILL.md +53 -36
  245. package/.agent-src/skills/command-routing/SKILL.md +12 -0
  246. package/.agent-src/skills/command-writing/SKILL.md +14 -2
  247. package/.agent-src/skills/comp-banding/SKILL.md +12 -0
  248. package/.agent-src/skills/competitive-moat-analysis/SKILL.md +12 -2
  249. package/.agent-src/skills/competitive-positioning/SKILL.md +12 -2
  250. package/.agent-src/skills/composer-packages/SKILL.md +12 -0
  251. package/.agent-src/skills/compress-memory/SKILL.md +12 -0
  252. package/.agent-src/skills/content-funnel-design/SKILL.md +12 -2
  253. package/.agent-src/skills/context-authoring/SKILL.md +19 -7
  254. package/.agent-src/skills/context-document/SKILL.md +17 -5
  255. package/.agent-src/skills/contracts-cognition/SKILL.md +12 -2
  256. package/.agent-src/skills/conventional-commits-writing/SKILL.md +12 -0
  257. package/.agent-src/skills/copilot-agents-optimization/SKILL.md +13 -1
  258. package/.agent-src/skills/copilot-config/SKILL.md +12 -0
  259. package/.agent-src/skills/customer-research/SKILL.md +12 -0
  260. package/.agent-src/skills/dashboard-design/SKILL.md +13 -2
  261. package/.agent-src/skills/data-flow-mapper/SKILL.md +12 -0
  262. package/.agent-src/skills/data-handling-judgment/SKILL.md +12 -2
  263. package/.agent-src/skills/database/SKILL.md +22 -5
  264. package/.agent-src/skills/dcf-modeling/SKILL.md +12 -2
  265. package/.agent-src/skills/deal-qualification-meddic/SKILL.md +12 -2
  266. package/.agent-src/skills/decision-record/SKILL.md +12 -0
  267. package/.agent-src/skills/deep-reading-analyst/SKILL.md +12 -0
  268. package/.agent-src/skills/defense-in-depth/SKILL.md +13 -1
  269. package/.agent-src/skills/dependency-upgrade/SKILL.md +77 -19
  270. package/.agent-src/skills/description-assist/SKILL.md +12 -0
  271. package/.agent-src/skills/design-review/SKILL.md +12 -0
  272. package/.agent-src/skills/devcontainer/SKILL.md +12 -0
  273. package/.agent-src/skills/developer-like-execution/SKILL.md +37 -14
  274. package/.agent-src/skills/discovery-interview/SKILL.md +12 -2
  275. package/.agent-src/skills/doc-coauthoring/SKILL.md +12 -0
  276. package/.agent-src/skills/docker/SKILL.md +12 -0
  277. package/.agent-src/skills/editorial-calendar/SKILL.md +12 -2
  278. package/.agent-src/skills/eloquent/SKILL.md +13 -1
  279. package/.agent-src/skills/eloquent/evals/triggers.json +1 -1
  280. package/.agent-src/skills/error-handling-patterns/SKILL.md +13 -1
  281. package/.agent-src/skills/estimate-ticket/SKILL.md +12 -0
  282. package/.agent-src/skills/existing-ui-audit/SKILL.md +12 -0
  283. package/.agent-src/skills/expansion-playbook/SKILL.md +12 -0
  284. package/.agent-src/skills/fe-design/SKILL.md +12 -0
  285. package/.agent-src/skills/feature-planning/SKILL.md +13 -1
  286. package/.agent-src/skills/file-editor/SKILL.md +57 -19
  287. package/.agent-src/skills/finishing-a-development-branch/SKILL.md +14 -2
  288. package/.agent-src/skills/flux/SKILL.md +12 -0
  289. package/.agent-src/skills/forecast-accuracy/SKILL.md +12 -2
  290. package/.agent-src/skills/forecasting/SKILL.md +12 -2
  291. package/.agent-src/skills/form-handler/SKILL.md +12 -0
  292. package/.agent-src/skills/fundraising-narrative/SKILL.md +12 -2
  293. package/.agent-src/skills/funnel-analysis/SKILL.md +12 -0
  294. package/.agent-src/skills/git-workflow/SKILL.md +16 -4
  295. package/.agent-src/skills/github-ci/SKILL.md +12 -0
  296. package/.agent-src/skills/grafana/SKILL.md +12 -0
  297. package/.agent-src/skills/gtm-launch/SKILL.md +12 -2
  298. package/.agent-src/skills/guideline-writing/SKILL.md +12 -0
  299. package/.agent-src/skills/hiring-loop-design/SKILL.md +12 -0
  300. package/.agent-src/skills/incident-commander/SKILL.md +12 -2
  301. package/.agent-src/skills/jira-integration/SKILL.md +12 -0
  302. package/.agent-src/skills/jobs-events/SKILL.md +12 -0
  303. package/.agent-src/skills/judge-bug-hunter/SKILL.md +12 -0
  304. package/.agent-src/skills/judge-code-quality/SKILL.md +12 -0
  305. package/.agent-src/skills/judge-security-auditor/SKILL.md +12 -0
  306. package/.agent-src/skills/judge-test-coverage/SKILL.md +12 -0
  307. package/.agent-src/skills/laravel/SKILL.md +12 -0
  308. package/.agent-src/skills/laravel-api-endpoint/SKILL.md +199 -0
  309. package/.agent-src/skills/{dto-creator → laravel-dto}/SKILL.md +19 -6
  310. package/.agent-src/skills/laravel-horizon/SKILL.md +12 -0
  311. package/.agent-src/skills/laravel-mail/SKILL.md +12 -0
  312. package/.agent-src/skills/laravel-middleware/SKILL.md +12 -0
  313. package/.agent-src/skills/{migration-creator → laravel-migration}/SKILL.md +23 -10
  314. package/.agent-src/skills/laravel-notifications/SKILL.md +12 -0
  315. package/.agent-src/skills/laravel-pennant/SKILL.md +12 -0
  316. package/.agent-src/skills/laravel-pulse/SKILL.md +12 -0
  317. package/.agent-src/skills/laravel-reverb/SKILL.md +15 -3
  318. package/.agent-src/skills/laravel-scheduling/SKILL.md +12 -0
  319. package/.agent-src/skills/laravel-validation/SKILL.md +12 -0
  320. package/.agent-src/skills/{websocket → laravel-websocket}/SKILL.md +16 -3
  321. package/.agent-src/skills/launch-readiness/SKILL.md +12 -2
  322. package/.agent-src/skills/learning-to-rule-or-skill/SKILL.md +16 -4
  323. package/.agent-src/skills/lint-skills/SKILL.md +12 -0
  324. package/.agent-src/skills/livewire/SKILL.md +12 -0
  325. package/.agent-src/skills/livewire-architect/SKILL.md +12 -0
  326. package/.agent-src/skills/logging-monitoring/SKILL.md +12 -0
  327. package/.agent-src/skills/market-entry-analysis/SKILL.md +12 -0
  328. package/.agent-src/skills/markitdown/SKILL.md +14 -2
  329. package/.agent-src/skills/mcp/SKILL.md +12 -0
  330. package/.agent-src/skills/mcp-builder/SKILL.md +14 -2
  331. package/.agent-src/skills/md-language-check/SKILL.md +13 -1
  332. package/.agent-src/skills/memory-consolidation/SKILL.md +12 -0
  333. package/.agent-src/skills/merge-conflicts/SKILL.md +61 -17
  334. package/.agent-src/skills/messaging-architecture/SKILL.md +12 -2
  335. package/.agent-src/skills/migration-architect/SKILL.md +18 -6
  336. package/.agent-src/skills/mobile-e2e-strategy/SKILL.md +12 -0
  337. package/.agent-src/skills/module-management/SKILL.md +13 -0
  338. package/.agent-src/skills/motion-choreographer/SKILL.md +16 -4
  339. package/.agent-src/skills/multi-tenancy/SKILL.md +29 -10
  340. package/.agent-src/skills/nextjs-patterns/SKILL.md +12 -0
  341. package/.agent-src/skills/okr-tree-modeling/SKILL.md +12 -2
  342. package/.agent-src/skills/onboarding-design/SKILL.md +12 -0
  343. package/.agent-src/skills/onboarding-program/SKILL.md +12 -0
  344. package/.agent-src/skills/one-on-one-cadence/SKILL.md +12 -0
  345. package/.agent-src/skills/openapi/SKILL.md +13 -1
  346. package/.agent-src/skills/org-design/SKILL.md +12 -0
  347. package/.agent-src/skills/override-management/SKILL.md +12 -0
  348. package/.agent-src/skills/perf-feedback-craft/SKILL.md +12 -0
  349. package/.agent-src/skills/performance/SKILL.md +12 -0
  350. package/.agent-src/skills/performance-analysis/SKILL.md +12 -0
  351. package/.agent-src/skills/persona-writing/SKILL.md +12 -0
  352. package/.agent-src/skills/pest-testing/SKILL.md +30 -0
  353. package/.agent-src/skills/php-coder/SKILL.md +12 -0
  354. package/.agent-src/skills/php-debugging/SKILL.md +40 -0
  355. package/.agent-src/skills/php-service/SKILL.md +15 -3
  356. package/.agent-src/skills/pipeline-strategy/SKILL.md +12 -2
  357. package/.agent-src/skills/pixar-storyteller/SKILL.md +17 -5
  358. package/.agent-src/skills/playwright-architect/SKILL.md +12 -2
  359. package/.agent-src/skills/playwright-testing/SKILL.md +28 -1
  360. package/.agent-src/skills/po-discovery/SKILL.md +12 -0
  361. package/.agent-src/skills/positioning-strategy/SKILL.md +12 -0
  362. package/.agent-src/skills/privacy-review/SKILL.md +12 -2
  363. package/.agent-src/skills/project-analysis-core/SKILL.md +12 -0
  364. package/.agent-src/skills/project-analysis-hypothesis-driven/SKILL.md +12 -0
  365. package/.agent-src/skills/project-analysis-laravel/SKILL.md +12 -0
  366. package/.agent-src/skills/project-analysis-nextjs/SKILL.md +12 -0
  367. package/.agent-src/skills/project-analysis-node-express/SKILL.md +12 -0
  368. package/.agent-src/skills/project-analysis-react/SKILL.md +12 -0
  369. package/.agent-src/skills/project-analysis-symfony/SKILL.md +12 -0
  370. package/.agent-src/skills/project-analysis-zend-laminas/SKILL.md +12 -0
  371. package/.agent-src/skills/project-analyzer/SKILL.md +98 -60
  372. package/.agent-src/skills/project-docs/SKILL.md +25 -13
  373. package/.agent-src/skills/prompt-engineering-patterns/SKILL.md +13 -1
  374. package/.agent-src/skills/prompt-optimizer/SKILL.md +13 -1
  375. package/.agent-src/skills/quality-tools/SKILL.md +12 -2
  376. package/.agent-src/skills/react-native-setup/SKILL.md +12 -0
  377. package/.agent-src/skills/react-shadcn-ui/SKILL.md +12 -0
  378. package/.agent-src/skills/readme-reviewer/SKILL.md +12 -0
  379. package/.agent-src/skills/readme-writing/SKILL.md +12 -0
  380. package/.agent-src/skills/readme-writing-package/SKILL.md +106 -23
  381. package/.agent-src/skills/receiving-code-review/SKILL.md +12 -0
  382. package/.agent-src/skills/refine-prompt/SKILL.md +13 -1
  383. package/.agent-src/skills/refine-ticket/SKILL.md +14 -2
  384. package/.agent-src/skills/refine-ticket/detection-map.yml +2 -2
  385. package/.agent-src/skills/release-comms/SKILL.md +12 -2
  386. package/.agent-src/skills/repomix-packer/SKILL.md +13 -1
  387. package/.agent-src/skills/requesting-code-review/SKILL.md +12 -0
  388. package/.agent-src/skills/retention-loops/SKILL.md +12 -0
  389. package/.agent-src/skills/review-routing/SKILL.md +12 -0
  390. package/.agent-src/skills/rice-prioritization/SKILL.md +12 -0
  391. package/.agent-src/skills/risk-officer/SKILL.md +12 -0
  392. package/.agent-src/skills/roadmap-management/SKILL.md +13 -1
  393. package/.agent-src/skills/roadmap-writing/SKILL.md +12 -0
  394. package/.agent-src/skills/rtk-output-filtering/SKILL.md +35 -8
  395. package/.agent-src/skills/rule-refactor/SKILL.md +157 -0
  396. package/.agent-src/skills/rule-writing/SKILL.md +46 -8
  397. package/.agent-src/skills/runway-cognition/SKILL.md +12 -2
  398. package/.agent-src/skills/scenario-modeling/SKILL.md +12 -2
  399. package/.agent-src/skills/scene-expander/SKILL.md +18 -6
  400. package/.agent-src/skills/script-writing/SKILL.md +13 -1
  401. package/.agent-src/skills/secrets-management/SKILL.md +13 -3
  402. package/.agent-src/skills/security/SKILL.md +50 -29
  403. package/.agent-src/skills/security-audit/SKILL.md +12 -0
  404. package/.agent-src/skills/sentry-integration/SKILL.md +12 -0
  405. package/.agent-src/skills/sequential-thinking/SKILL.md +12 -0
  406. package/.agent-src/skills/skill-improvement-pipeline/SKILL.md +12 -0
  407. package/.agent-src/skills/skill-management/SKILL.md +12 -0
  408. package/.agent-src/skills/skill-reviewer/SKILL.md +13 -1
  409. package/.agent-src/skills/skill-writing/SKILL.md +12 -0
  410. package/.agent-src/skills/sql-writing/SKILL.md +12 -0
  411. package/.agent-src/skills/stakeholder-tradeoff/SKILL.md +12 -0
  412. package/.agent-src/skills/subagent-orchestration/SKILL.md +13 -1
  413. package/.agent-src/skills/symfony-workflow/SKILL.md +12 -0
  414. package/.agent-src/skills/systematic-debugging/SKILL.md +12 -0
  415. package/.agent-src/skills/tailwind-engineer/SKILL.md +12 -0
  416. package/.agent-src/skills/tech-debt-tracker/SKILL.md +12 -2
  417. package/.agent-src/skills/technical-specification/SKILL.md +12 -0
  418. package/.agent-src/skills/terraform/SKILL.md +12 -0
  419. package/.agent-src/skills/terragrunt/SKILL.md +12 -0
  420. package/.agent-src/skills/test-driven-development/SKILL.md +16 -4
  421. package/.agent-src/skills/test-performance/SKILL.md +19 -6
  422. package/.agent-src/skills/testing-anti-patterns/SKILL.md +13 -1
  423. package/.agent-src/skills/threat-modeling/SKILL.md +12 -0
  424. package/.agent-src/skills/throughput-vs-morale-tradeoff/SKILL.md +12 -0
  425. package/.agent-src/skills/token-optimizer/SKILL.md +12 -0
  426. package/.agent-src/skills/traefik/SKILL.md +12 -0
  427. package/.agent-src/skills/ui-component-architect/SKILL.md +12 -0
  428. package/.agent-src/skills/unit-economics-modeling/SKILL.md +12 -2
  429. package/.agent-src/skills/universal-project-analysis/SKILL.md +12 -0
  430. package/.agent-src/skills/upstream-contribute/SKILL.md +12 -0
  431. package/.agent-src/skills/using-git-worktrees/SKILL.md +12 -0
  432. package/.agent-src/skills/validate-feature-fit/SKILL.md +12 -0
  433. package/.agent-src/skills/verify-completion-evidence/SKILL.md +36 -27
  434. package/.agent-src/skills/video-director/SKILL.md +18 -6
  435. package/.agent-src/skills/vision-articulation/SKILL.md +12 -0
  436. package/.agent-src/skills/voc-extract/SKILL.md +12 -2
  437. package/.agent-src/skills/voice-and-tone-design/SKILL.md +12 -2
  438. package/.agent-src/templates/agent-settings.md +5 -5
  439. package/.agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  440. package/.agent-src/templates/agents/memory/ownership.example.yml +1 -1
  441. package/.agent-src/templates/agents/proposal.example.md +12 -0
  442. package/.agent-src/templates/command.md +1 -1
  443. package/.agent-src/templates/contexts/auth-model.md +2 -2
  444. package/.agent-src/templates/contexts/data-sensitivity.md +3 -3
  445. package/.agent-src/templates/contexts/deployment-order.md +2 -2
  446. package/.agent-src/templates/contexts/observability.md +3 -3
  447. package/.agent-src/templates/contexts/tenant-boundaries.md +3 -3
  448. package/.agent-src/templates/contexts.md +1 -1
  449. package/.agent-src/templates/copilot-instructions.md +2 -2
  450. package/.agent-src/templates/rule.md +3 -3
  451. package/.agent-src/templates/scripts/work_engine/_lib/agent_settings.py +3 -3
  452. package/.agent-src/templates/scripts/work_engine/cli.py +6 -6
  453. package/.agent-src/templates/scripts/work_engine/emitters.py +29 -4
  454. package/.agent-src/templates/scripts/work_engine/hooks/builtin/decision_trace.py +3 -3
  455. package/.agent-src/templates/scripts/work_engine/state.py +53 -0
  456. package/.agent-src/templates/skill-archive-note.md +4 -4
  457. package/.claude-plugin/marketplace.json +6 -5
  458. package/AGENTS.md +5 -4
  459. package/CHANGELOG.md +178 -194
  460. package/CONTRIBUTING.md +61 -0
  461. package/README.md +23 -20
  462. package/config/agent-settings.template.yml +11 -1
  463. package/config/discovery/packs.yml +142 -0
  464. package/config/discovery/unassigned-artefacts.yml +66 -0
  465. package/config/discovery/workspaces.yml +59 -0
  466. package/config/gitignore-block.txt +17 -20
  467. package/dist/cli/agent-config.js +199 -0
  468. package/dist/cli/agent-config.js.map +1 -0
  469. package/dist/cli/bash/runBash.js +40 -0
  470. package/dist/cli/bash/runBash.js.map +1 -0
  471. package/dist/cli/commands/doctorShell.js +91 -0
  472. package/dist/cli/commands/doctorShell.js.map +1 -0
  473. package/dist/cli/commands/packs.js +59 -0
  474. package/dist/cli/commands/packs.js.map +1 -0
  475. package/dist/cli/commands/settings.js +35 -0
  476. package/dist/cli/commands/settings.js.map +1 -0
  477. package/dist/cli/commands/uiServe.js +110 -0
  478. package/dist/cli/commands/uiServe.js.map +1 -0
  479. package/dist/cli/commands/versions.js +64 -0
  480. package/dist/cli/commands/versions.js.map +1 -0
  481. package/dist/cli/commands/workspaces.js +58 -0
  482. package/dist/cli/commands/workspaces.js.map +1 -0
  483. package/dist/cli/discovery/loadManifest.js +62 -0
  484. package/dist/cli/discovery/loadManifest.js.map +1 -0
  485. package/dist/cli/log/logger.js +41 -0
  486. package/dist/cli/log/logger.js.map +1 -0
  487. package/dist/cli/paths.js +60 -0
  488. package/dist/cli/paths.js.map +1 -0
  489. package/dist/cli/python/resolvePython.js +38 -0
  490. package/dist/cli/python/resolvePython.js.map +1 -0
  491. package/dist/cli/registry.js +75 -0
  492. package/dist/cli/registry.js.map +1 -0
  493. package/dist/discovery/discovery-manifest.json +9195 -0
  494. package/dist/discovery/discovery-manifest.json.sha256 +1 -0
  495. package/dist/discovery/discovery-manifest.summary.md +93 -0
  496. package/dist/mcp/awesome-mcp-servers.row.md +1 -0
  497. package/dist/mcp/mcp-cloudflare-catalogue.json +27 -0
  498. package/dist/mcp/registry-manifest.json +63 -0
  499. package/dist/server/app.js +117 -0
  500. package/dist/server/app.js.map +1 -0
  501. package/dist/server/io/atomicMultiWrite.js +202 -0
  502. package/dist/server/io/atomicMultiWrite.js.map +1 -0
  503. package/dist/server/io/atomicWrite.js +79 -0
  504. package/dist/server/io/atomicWrite.js.map +1 -0
  505. package/dist/server/io/substituteTemplate.js +87 -0
  506. package/dist/server/io/substituteTemplate.js.map +1 -0
  507. package/dist/server/io/yamlIO.js +140 -0
  508. package/dist/server/io/yamlIO.js.map +1 -0
  509. package/dist/server/port.js +97 -0
  510. package/dist/server/port.js.map +1 -0
  511. package/dist/server/routes/discovery.js +72 -0
  512. package/dist/server/routes/discovery.js.map +1 -0
  513. package/dist/server/routes/ping.js +49 -0
  514. package/dist/server/routes/ping.js.map +1 -0
  515. package/dist/server/routes/schema.js +41 -0
  516. package/dist/server/routes/schema.js.map +1 -0
  517. package/dist/server/routes/settings.js +155 -0
  518. package/dist/server/routes/settings.js.map +1 -0
  519. package/dist/server/routes/userMd.js +117 -0
  520. package/dist/server/routes/userMd.js.map +1 -0
  521. package/dist/server/routes/wizard.js +138 -0
  522. package/dist/server/routes/wizard.js.map +1 -0
  523. package/dist/server/schemas/settings.js +138 -0
  524. package/dist/server/schemas/settings.js.map +1 -0
  525. package/dist/server/token.js +68 -0
  526. package/dist/server/token.js.map +1 -0
  527. package/dist/server/writeRoot.js +67 -0
  528. package/dist/server/writeRoot.js.map +1 -0
  529. package/dist/server/writeRoot.test.js +73 -0
  530. package/dist/server/writeRoot.test.js.map +1 -0
  531. package/dist/shared/userMd/formAdapter.js +105 -0
  532. package/dist/shared/userMd/formAdapter.js.map +1 -0
  533. package/dist/shared/userMd/schema.js +118 -0
  534. package/dist/shared/userMd/schema.js.map +1 -0
  535. package/dist/shared/userMd/utils.js +74 -0
  536. package/dist/shared/userMd/utils.js.map +1 -0
  537. package/dist/ui/assets/index-BTRcKDlB.js +39 -0
  538. package/dist/ui/assets/index-BTRcKDlB.js.map +1 -0
  539. package/dist/ui/assets/index-Dqfhmg-d.css +1 -0
  540. package/dist/ui/index.html +14 -0
  541. package/docs/adrs/caveman/0001-default-off-until-bench.md +2 -2
  542. package/docs/adrs/cost/0001-hard-stop-hook.md +1 -1
  543. package/docs/adrs/schema/0001-json-schema-frontmatter.md +4 -4
  544. package/docs/adrs/schema/README.md +1 -1
  545. package/docs/adrs/smoke/0001-per-tier-smoke-scripts.md +2 -2
  546. package/docs/architecture/setup-vs-settings-shared-surface.md +114 -0
  547. package/docs/architecture.md +4 -3
  548. package/docs/archive/CHANGELOG-pre-2.2.0.md +7 -7
  549. package/docs/archive/CHANGELOG-pre-2.25.0.md +191 -0
  550. package/docs/archive/CHANGELOG-pre-3.0.0.md +130 -0
  551. package/docs/catalog.md +77 -84
  552. package/docs/contracts/STABILITY.md +1 -1
  553. package/docs/contracts/adr-architectural-consensus-mechanism.md +5 -5
  554. package/docs/contracts/adr-chat-history-split.md +1 -1
  555. package/docs/contracts/adr-implement-ticket-runtime.md +1 -1
  556. package/docs/contracts/adr-install-user-type-axis.md +1 -1
  557. package/docs/contracts/adr-mcp-runtime.md +2 -2
  558. package/docs/contracts/agent-user-schema.md +11 -2
  559. package/docs/contracts/ai-council-config.md +13 -13
  560. package/docs/contracts/audit-log-v1.md +2 -2
  561. package/docs/contracts/command-clusters.md +2 -2
  562. package/docs/contracts/compression-default-kill-criterion.md +3 -3
  563. package/docs/contracts/decision-trace-v1.md +5 -5
  564. package/docs/contracts/discovery-manifest.schema.json +146 -0
  565. package/docs/contracts/explain-trace.schema.json +144 -0
  566. package/docs/contracts/file-ownership-matrix.json +515 -309
  567. package/docs/contracts/file-ownership-matrix.md +1 -1
  568. package/docs/contracts/ghostwriter-schema.md +3 -3
  569. package/docs/contracts/hook-architecture-v1.md +10 -10
  570. package/docs/contracts/kernel-membership.md +21 -4
  571. package/docs/contracts/linter-structural-model.md +3 -3
  572. package/docs/contracts/load-context-schema.md +5 -5
  573. package/docs/contracts/local-server-api.md +134 -0
  574. package/docs/contracts/low-impact-corpus-format.md +1 -1
  575. package/docs/contracts/mcp-cloud-scope.md +2 -2
  576. package/docs/contracts/mcp-discovery-phase-notice.md +1 -1
  577. package/docs/contracts/mcp-phase-1-scope.md +5 -4
  578. package/docs/contracts/mcp-registry-manifest.schema.json +129 -0
  579. package/docs/contracts/mcp-tool-stub-envelope.md +1 -1
  580. package/docs/contracts/memory-visibility-v1.md +2 -2
  581. package/docs/contracts/multi-tool-projection-fidelity.md +3 -3
  582. package/docs/contracts/namespace.md +1 -1
  583. package/docs/contracts/one-off-script-lifecycle.md +1 -1
  584. package/docs/contracts/package-self-orientation.md +1 -1
  585. package/docs/contracts/provider-lifecycle.md +2 -2
  586. package/docs/contracts/router-blending.md +1 -1
  587. package/docs/contracts/rule-classification.md +2 -2
  588. package/docs/contracts/settings-api.md +160 -0
  589. package/docs/contracts/settings-gui-agent-mode.schema.json +128 -0
  590. package/docs/contracts/smoke-contracts.md +8 -8
  591. package/docs/contracts/tier-3-contrib-plugin.md +1 -1
  592. package/docs/contracts/universal-skills.md +1 -1
  593. package/docs/contracts/write-engine.md +1 -1
  594. package/docs/customization.md +137 -11
  595. package/docs/decisions/ADR-001-kernel-swap-deferred.md +1 -1
  596. package/docs/decisions/ADR-002-kernel-bucket-overrides.md +1 -1
  597. package/docs/decisions/ADR-004-rule-governance-pruning.md +8 -8
  598. package/docs/decisions/ADR-006-skill-tools-python-pilot.md +5 -5
  599. package/docs/decisions/ADR-007-agent-discovery-scopes.md +4 -4
  600. package/docs/decisions/ADR-008-installed-tools-manifest.md +2 -2
  601. package/docs/decisions/ADR-010-profile-pack-preset-boundary.md +2 -2
  602. package/docs/decisions/ADR-011-domain-pack-readiness.md +4 -4
  603. package/docs/decisions/ADR-012-typescript-cli-shell.md +162 -0
  604. package/docs/decisions/ADR-013-discovery-frontmatter-contract.md +210 -0
  605. package/docs/decisions/ADR-014-gui-framework-choice.md +136 -0
  606. package/docs/decisions/ADR-rule-kernel-and-router.md +2 -2
  607. package/docs/decisions/INDEX.md +3 -0
  608. package/docs/distribution/mcp-submission-checklist.md +95 -0
  609. package/docs/distribution/topics-equivalents-decay-policy.md +51 -0
  610. package/docs/examples/agent-user.example.md +3 -1
  611. package/docs/getting-started.md +6 -5
  612. package/docs/guidelines/agent-infra/ask-when-uncertain-demos.md +1 -1
  613. package/docs/guidelines/agent-infra/roadmap-progress-mechanics.md +10 -1
  614. package/docs/guidelines/agent-infra/rule-type-governance.md +2 -2
  615. package/docs/guidelines/agent-infra/tool-integration.md +1 -1
  616. package/docs/guidelines/php/api-design.md +2 -2
  617. package/docs/guidelines/php/controllers.md +1 -1
  618. package/docs/guidelines/php/resources.md +1 -1
  619. package/docs/guidelines/php/validations.md +1 -1
  620. package/docs/guidelines/prompt-templates.md +2 -2
  621. package/docs/hook-payload-capture.md +3 -3
  622. package/docs/installation.md +12 -4
  623. package/docs/migrations/commands-1.15.0.md +3 -3
  624. package/docs/parity/bench-ruflo.json +1 -1
  625. package/docs/parity/ruflo.md +3 -3
  626. package/docs/profiles.md +1 -1
  627. package/docs/quality.md +2 -2
  628. package/docs/recruits/_template.md +3 -3
  629. package/docs/setup/enterprise-and-offline.md +3 -3
  630. package/docs/setup/mcp-server-docker.md +5 -3
  631. package/docs/skills-catalog.md +62 -18
  632. package/docs/wizard.md +121 -0
  633. package/llms.txt +61 -17
  634. package/package.json +46 -3
  635. package/scripts/__pycache__/validate_frontmatter.cpython-312.pyc +0 -0
  636. package/scripts/_archive/README.md +2 -2
  637. package/scripts/_archive/_p4_migrate.py +1 -1
  638. package/scripts/_cli/cmd_doctor.py +5 -5
  639. package/scripts/_cli/cmd_explain.py +106 -2
  640. package/scripts/_cli/cmd_migrate.py +2 -2
  641. package/scripts/_cli/explain_last/__init__.py +122 -0
  642. package/scripts/_cli/explain_last/assumptions.py +59 -0
  643. package/scripts/_cli/explain_last/council.py +105 -0
  644. package/scripts/_cli/explain_last/halt.py +44 -0
  645. package/scripts/_cli/explain_last/inputs.py +125 -0
  646. package/scripts/_cli/explain_last/memory.py +94 -0
  647. package/scripts/_cli/explain_last/provider.py +52 -0
  648. package/scripts/_cli/explain_last/render.py +52 -0
  649. package/scripts/_cli/explain_last/route.py +58 -0
  650. package/scripts/_cli/explain_last/scrubber.py +105 -0
  651. package/scripts/_cli/explain_last/sections/__init__.py +35 -0
  652. package/scripts/_cli/explain_last/sections/assumptions.py +21 -0
  653. package/scripts/_cli/explain_last/sections/council.py +27 -0
  654. package/scripts/_cli/explain_last/sections/halt.py +31 -0
  655. package/scripts/_cli/explain_last/sections/header.py +24 -0
  656. package/scripts/_cli/explain_last/sections/inputs.py +27 -0
  657. package/scripts/_cli/explain_last/sections/memory.py +21 -0
  658. package/scripts/_cli/explain_last/sections/pack.py +16 -0
  659. package/scripts/_cli/explain_last/sections/provider.py +26 -0
  660. package/scripts/_cli/explain_last/sections/route.py +22 -0
  661. package/scripts/_cli/explain_last/state_loader.py +76 -0
  662. package/scripts/_dispatch.bash +954 -0
  663. package/scripts/_lib/agent_settings.py +3 -3
  664. package/scripts/_lib/agents_overlay.py +3 -3
  665. package/scripts/_phase4_bucket.py +210 -0
  666. package/scripts/agent-config +35 -943
  667. package/scripts/ai-video/adapters/higgsfield.sh +1 -1
  668. package/scripts/ai-video/adapters/sora.sh +1 -1
  669. package/scripts/ai-video/test-pipeline.sh +2 -2
  670. package/scripts/ai_council/_default_prices.py +5 -5
  671. package/scripts/ai_council/advisors.py +1 -1
  672. package/scripts/ai_council/clients.py +2 -2
  673. package/scripts/ai_council/compile_corpus.py +9 -8
  674. package/scripts/ai_council/config.py +3 -3
  675. package/scripts/ai_council/events_log.py +8 -4
  676. package/scripts/ai_council/low_impact_corpus.py +1 -1
  677. package/scripts/ai_council/low_impact_intake.py +1 -1
  678. package/scripts/ai_council/one_off_archive/2026-05/_one_off_budget_v2_audit.py +2 -2
  679. package/scripts/ai_council/one_off_archive/2026-05/_one_off_structural_optimization.py +1 -1
  680. package/scripts/ai_council/one_off_archive/2026-05/_one_off_tier_retrofit.py +3 -3
  681. package/scripts/ai_council/pricing.py +8 -7
  682. package/scripts/ai_council/probation_gate.py +1 -1
  683. package/scripts/ai_council/redact_low_impact_entry.py +1 -1
  684. package/scripts/ai_council/session.py +13 -13
  685. package/scripts/ai_council/shadow_dispatch.py +2 -2
  686. package/scripts/annotate_discovery.py +149 -0
  687. package/scripts/audit_adr_coverage.py +1 -1
  688. package/scripts/audit_auto_rules.py +2 -2
  689. package/scripts/audit_cloud_compatibility.py +1 -1
  690. package/scripts/audit_command_surface.py +2 -2
  691. package/scripts/audit_likelihood.py +4 -4
  692. package/scripts/audit_overlap.py +3 -3
  693. package/scripts/audit_user_type_axis.py +1 -1
  694. package/scripts/build_discovery_manifest.py +302 -0
  695. package/scripts/build_linear_digest.py +0 -1
  696. package/scripts/build_mcp_registry_manifest.py +181 -0
  697. package/scripts/build_rule_trigger_matrix.py +2 -2
  698. package/scripts/capture_showcase_session.py +1 -1
  699. package/scripts/chat_history.py +5 -5
  700. package/scripts/check_always_budget.py +7 -2
  701. package/scripts/check_council_layout.py +26 -20
  702. package/scripts/check_council_references.py +10 -10
  703. package/scripts/check_discovery_determinism.py +70 -0
  704. package/scripts/check_kernel_rule_bundle.py +2 -2
  705. package/scripts/check_no_roadmap_refs.py +2 -2
  706. package/scripts/check_one_off_location.py +1 -1
  707. package/scripts/check_public_links.py +2 -2
  708. package/scripts/check_references.py +14 -21
  709. package/scripts/check_release_includes_discovery.py +61 -0
  710. package/scripts/ci_summary.py +2 -2
  711. package/scripts/ci_time_ratio.py +1 -1
  712. package/scripts/command_suggester/__init__.py +1 -1
  713. package/scripts/context_hygiene_hook.py +2 -2
  714. package/scripts/council_cli.py +22 -22
  715. package/scripts/council_prune.py +3 -3
  716. package/scripts/extract_audit_patterns.py +2 -2
  717. package/scripts/gen_discovery_baseline.py +127 -0
  718. package/scripts/generate_ownership_matrix.py +1 -1
  719. package/scripts/hook_manifest.yaml +5 -5
  720. package/scripts/hooks/cline-dispatcher.sh +1 -1
  721. package/scripts/hooks/cowork-dispatcher.sh +1 -1
  722. package/scripts/hooks/dispatch_hook.py +3 -3
  723. package/scripts/hooks/gemini-dispatcher.sh +1 -1
  724. package/scripts/hooks/replay_hook.py +1 -1
  725. package/scripts/hooks/state_io.py +5 -5
  726. package/scripts/hooks_doctor.py +4 -4
  727. package/scripts/install-hooks.sh +2 -2
  728. package/scripts/install.py +3 -3
  729. package/scripts/install.sh +120 -18
  730. package/scripts/inventory_frontmatter.py +1 -1
  731. package/scripts/lint_agents_layout.py +103 -0
  732. package/scripts/lint_archived_skills.py +3 -3
  733. package/scripts/lint_artefact_frontmatter.py +180 -0
  734. package/scripts/lint_discovery_manifest.py +136 -0
  735. package/scripts/lint_discovery_vocabulary.py +148 -0
  736. package/scripts/lint_explain_trace.py +80 -0
  737. package/scripts/lint_framework_leakage.py +348 -0
  738. package/scripts/lint_framework_leakage_allowlist.json +477 -0
  739. package/scripts/lint_ghostwriter_source.py +1 -1
  740. package/scripts/lint_load_context.py +3 -3
  741. package/scripts/lint_mcp_registry_manifest.py +69 -0
  742. package/scripts/lint_media_policy_linkage.py +6 -6
  743. package/scripts/lint_positioning.py +143 -0
  744. package/scripts/lint_rule_tiers.py +2 -2
  745. package/scripts/lint_skill_tools.py +1 -1
  746. package/scripts/lint_topics_yaml.py +89 -0
  747. package/scripts/mcp_server/consumer_tool_catalog.json +3 -3
  748. package/scripts/mcp_server/telemetry.py +2 -2
  749. package/scripts/mcp_server/tools.py +27 -11
  750. package/scripts/mcp_telemetry_health.py +2 -2
  751. package/scripts/mcp_telemetry_store.py +1 -1
  752. package/scripts/measure_augment_budget.py +9 -3
  753. package/scripts/measure_density.py +2 -2
  754. package/scripts/measure_frugality_savings.py +3 -3
  755. package/scripts/measure_roadmap_trajectory.py +1 -1
  756. package/scripts/measure_rule_budget.py +3 -3
  757. package/scripts/memory_report.py +1 -1
  758. package/scripts/migrate_command_suggestions.py +3 -3
  759. package/scripts/minimal_safe_diff_hook.py +1 -1
  760. package/scripts/onboarding_gate_hook.py +4 -4
  761. package/scripts/prepack-check.mjs +62 -0
  762. package/scripts/probe_projection_fidelity.py +2 -2
  763. package/scripts/refine_ticket_detect.py +1 -1
  764. package/scripts/schemas/command.schema.json +46 -1
  765. package/scripts/schemas/persona.schema.json +1 -1
  766. package/scripts/schemas/rule.schema.json +44 -4
  767. package/scripts/schemas/skill.schema.json +46 -1
  768. package/scripts/score_skill_selection.py +1 -1
  769. package/scripts/skill_collision_clusters.py +1 -1
  770. package/scripts/skill_linter.py +62 -9
  771. package/scripts/skill_overlap.py +1 -1
  772. package/scripts/skill_tools/run_block_d_eval.py +1 -1
  773. package/scripts/skill_usage_collect.py +3 -3
  774. package/scripts/skill_usage_report.py +3 -3
  775. package/scripts/smoke/kernel.sh +4 -4
  776. package/scripts/smoke/router.sh +2 -2
  777. package/scripts/smoke_quickstart.py +1 -1
  778. package/scripts/spotcheck_thin_root.py +1 -1
  779. package/scripts/sync_github_metadata.py +147 -0
  780. package/scripts/sync_gitignore.py +15 -5
  781. package/scripts/update_prices.py +4 -3
  782. package/scripts/verify_before_complete_hook.py +1 -1
  783. package/scripts/verify_roadmap_closure.py +1 -1
  784. package/templates/agent-user.md +35 -0
  785. package/.agent-src/commands/onboard.md +0 -459
  786. package/.agent-src/rules/agent-docs.md +0 -20
  787. package/.agent-src/rules/augment-portability.md +0 -23
  788. package/.agent-src/rules/capture-learnings.md +0 -19
  789. package/.agent-src/rules/docs-sync.md +0 -20
  790. package/.agent-src/rules/domain-safety-disclaimer-consulting.md +0 -52
  791. package/.agent-src/rules/domain-safety-disclaimer-financial.md +0 -54
  792. package/.agent-src/rules/domain-safety-disclaimer-legal.md +0 -49
  793. package/.agent-src/rules/domain-safety-disclaimer-medical.md +0 -56
  794. package/.agent-src/rules/domain-safety-export-redact.md +0 -65
  795. package/.agent-src/rules/domain-safety-logging-pii-floor.md +0 -55
  796. package/.agent-src/rules/domain-safety-pii-finance.md +0 -57
  797. package/.agent-src/rules/domain-safety-pii-marketing.md +0 -60
  798. package/.agent-src/rules/domain-safety-pii-recruiting.md +0 -56
  799. package/.agent-src/rules/domain-safety-pii-support.md +0 -57
  800. package/.agent-src/rules/domain-safety-retention-finance.md +0 -48
  801. package/.agent-src/rules/domain-safety-retention-support.md +0 -55
  802. package/.agent-src/rules/e2e-testing.md +0 -19
  803. package/.agent-src/rules/no-unsolicited-rebase.md +0 -107
  804. package/.agent-src/rules/post-push-rewrite-discipline.md +0 -70
@@ -0,0 +1,954 @@
1
+ #!/usr/bin/env bash
2
+ # agent-config — consumer-facing CLI for the event4u/agent-config package.
3
+ #
4
+ # This is the MASTER entrypoint shipped inside the package
5
+ # (node_modules/@event4u/agent-config/scripts/agent-config or
6
+ # vendor/event4u/agent-config/scripts/agent-config). A thin wrapper at
7
+ # the consumer's repo root (`./agent-config`) delegates here.
8
+ #
9
+ # Commands are strictly consumer-facing. Maintainer workflows stay in
10
+ # Taskfile.yml and are NOT exposed here.
11
+ #
12
+ # Invariants:
13
+ # * CWD on entry is the consumer's repo root — we keep it that way
14
+ # so underlying scripts resolve paths correctly.
15
+ # * PACKAGE_ROOT is derived from this script's location, used only to
16
+ # locate the package-internal Python scripts (mcp_render.py, …).
17
+ # * Unknown arguments are forwarded verbatim to the underlying script.
18
+
19
+ set -euo pipefail
20
+
21
+ # Resolve symlinks in BASH_SOURCE so PACKAGE_ROOT points at the real
22
+ # package directory even when invoked via a symlink (global npm install,
23
+ # vendor/bin symlink, user-placed symlink on PATH, …).
24
+ SOURCE="${BASH_SOURCE[0]}"
25
+ while [ -L "$SOURCE" ]; do
26
+ DIR="$(cd -P "$(dirname "$SOURCE")" && pwd)"
27
+ SOURCE="$(readlink "$SOURCE")"
28
+ [[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE"
29
+ done
30
+ SCRIPT_DIR="$(cd -P "$(dirname "$SOURCE")" && pwd)"
31
+ PACKAGE_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
32
+ CONSUMER_ROOT="$(pwd)"
33
+
34
+ VERSION_FILE="$PACKAGE_ROOT/package.json"
35
+
36
+ usage() {
37
+ # Tier filter — see docs/contracts/command-surface-tiers.md.
38
+ # Default prints Tier-0 only; --tier=1 adds Tier-1; --tier=all adds Tier-2.
39
+ local tier="${1:-0}"
40
+
41
+ cat <<'EOF'
42
+ agent-config — event4u/agent-config CLI
43
+
44
+ Usage:
45
+ ./agent-config <command> [options]
46
+ ./agent-config --help [--tier=0|1|all]
47
+ EOF
48
+
49
+ cat <<'EOF'
50
+
51
+ Tier 0 — daily-driver (init → sync → validate → work):
52
+ init One-shot project install. Forwards to `scripts/install`
53
+ with all args. Entry point for `npx @event4u/agent-config init`.
54
+ Flags: --tools=<list> | --ai=<list> | --yes | --force
55
+ sync Replay agents/installed-tools.lock — re-installs any
56
+ tool whose bridge marker is missing locally (ADR-008).
57
+ Flags: --dry-run | --force | --project=<path>
58
+ validate Read-only drift detection on the manifest
59
+ (marker missing, scope divergence, version drift).
60
+ Exits 1 on drift. Flags: --quiet | --skip-version-check
61
+ work Drive the work_engine Python engine on a free-form prompt
62
+ (Option-A loop; called by the /work command)
63
+ implement-ticket Drive the work_engine Python engine on a ticket envelope
64
+ (Option-A loop; called by the /implement-ticket command)
65
+ help Show this help (default Tier-0; --tier=1|all expands)
66
+ --version, -V Print package version
67
+ EOF
68
+
69
+ if [[ "$tier" == "1" || "$tier" == "all" ]]; then
70
+ cat <<'EOF'
71
+
72
+ Tier 1 — power-user (release shape, audit, migration):
73
+ update Update the agent_config_version pin in .agent-settings.yml
74
+ Flags: --check (read-only) | --to <version> (explicit pin)
75
+ versions List available @event4u/agent-config versions
76
+ on npm. Marks the current pin and latest.
77
+ Flags: --offline | --limit=N | --json
78
+ global Install to user-scope paths (~/.claude/, ~/.cursor/, …)
79
+ Forwards to `scripts/install --global` (ADR-007).
80
+ Flags: --tools=<list> | --ai=<list> | --yes | --force
81
+ export Eject a tool's canonical content into a chosen path
82
+ (real file, no symlink). Idempotent; --force overrides
83
+ content drift. See `./agent-config export --list`.
84
+ Flags: --tool=<id> | --output=<path> | --force | --list
85
+ uninstall Remove bridge markers (project) or lockfile
86
+ entries (global). Idempotent. User-deployed
87
+ content under ~/.<tool>/ is preserved unless
88
+ --purge is passed (destructive).
89
+ Flags: --global | --tools=<list> | --dry-run
90
+ | --purge | --force | --project=<path>
91
+ prune Remove project bridge markers not declared in
92
+ agents/installed-tools.lock (npm-prune style).
93
+ Hard-floors when lockfile is absent.
94
+ Flags: --dry-run | --json | --project=<path>
95
+ | --all-missing-lock
96
+ doctor Read-only drift report: manifest ↔ filesystem.
97
+ Lists missing, modified, and foreign files.
98
+ Exits 1 on drift, 2 on missing lockfile.
99
+ Flags: --json | --project=<path>
100
+ explain Read-only decision-chain trace.
101
+ Usage: explain config | explain rule <name>
102
+ | explain route "<text>"
103
+ Flags: --json | --project=<path>
104
+ migrate One-shot migration off legacy composer / npm install paths
105
+ Flags: --dry-run (detect only)
106
+ first-run Guided first-run setup — cost profile, settings, tooling
107
+ keys:install-anthropic Install the Anthropic API key for the AI Council
108
+ (interactive, /dev/tty only, writes ~/.config/agent-config/anthropic.key 0600)
109
+ keys:install-openai Install the OpenAI API key for the AI Council
110
+ (interactive, /dev/tty only, writes ~/.config/agent-config/openai.key 0600)
111
+ council:estimate Pre-call council cost preview (no API call, no spend)
112
+ Usage: council:estimate <question> [--input-mode prompt|roadmap]
113
+ council:run Run the council. Requires --confirm to spend.
114
+ Usage: council:run <question> --output <path> --confirm
115
+ council:render Re-render a saved council responses JSON to markdown
116
+ Usage: council:render <responses.json>
117
+ EOF
118
+ fi
119
+
120
+ if [[ "$tier" == "all" ]]; then
121
+ cat <<'EOF'
122
+
123
+ Tier 2 — maintenance / internal (hooks, MCP, memory, telemetry):
124
+ mcp:render Render mcp.json → .cursor/mcp.json, .windsurf/mcp.json
125
+ (pass --claude-desktop to also write user-scope config)
126
+ mcp:check Dry-run mcp:render; exit non-zero if targets are stale
127
+ mcp:setup Create .venv-mcp/ and install the mcp SDK
128
+ (one-line MCP server onboarding; idempotent)
129
+ mcp:run Run the built-in MCP server over stdio
130
+ (requires `mcp:setup` first; see docs/mcp-server.md)
131
+ (experimental — beta gates: docs/contracts/mcp-beta-criteria.md)
132
+ roadmap:progress Regenerate agents/roadmaps-progress.md from open roadmaps
133
+ roadmap:progress-check Fail if agents/roadmaps-progress.md is stale (for CI)
134
+ settings:check Validate .agent-settings.yml against the YAML-subset contract
135
+ (docs/contracts/settings-sync-yaml-subset.md). Read-only.
136
+ Exit 0 clean, 1 finding(s), 2 file absent / unreadable.
137
+ hooks:install Install the pre-commit roadmap-progress hook
138
+ (use --print to dump it, --force to overwrite an existing hook)
139
+ hooks:status Print the runtime hook matrix (per-platform install + bindings)
140
+ Flags: --format json|table, --strict (CI), --project-root <path>
141
+ hooks:doctor Diagnose hook health: concerns + fail-open/closed posture,
142
+ last dispatcher feedback per concern, missing trampolines.
143
+ Wraps hooks:status. Read-only.
144
+ Flags: --format json|table, --strict (CI), --project-root <path>
145
+ hooks:replay Replay a fixture through the universal dispatcher with
146
+ AGENT_CONFIG_REPLAY=1 (no writes under agents/runtime/state/).
147
+ Usage: hooks:replay --platform <name> --event <event>
148
+ --payload <path|event-name> [--native-event <native>]
149
+ [--manifest <path>] [--json] [--dry-run]
150
+ migrate-state Migrate a legacy .implement-ticket-state.json file
151
+ to the v1 .work-state.json schema (preserves .bak)
152
+ memory:lookup Retrieve memory entries (text or JSON envelope)
153
+ memory:signal Append a provisional intake signal (memory proposal)
154
+ memory:hash Hash a memory entry (YAML or JSON stdin)
155
+ memory:check Validate memory YAML schema + staleness
156
+ memory:check-proposal Run the admission gate on a memory proposal
157
+ proposal:check Validate a learning/skill/rule proposal markdown
158
+ refine-ticket:detect Run the deterministic refine-ticket detection helper
159
+ chat-history:hook Platform hook entry point (read JSON from stdin)
160
+ Usage: chat-history:hook --platform <claude|augment|cursor|cline|windsurf|gemini>
161
+ chat-history:checkpoint Append a phase-boundary entry to agents/runtime/.agent-chat-history
162
+ (CHECKPOINT fallback for platforms without native hooks)
163
+ roadmap-progress:hook PostToolUse hook entry point (read JSON from stdin)
164
+ Regenerates roadmaps-progress.md when a tool wrote under agents/roadmaps/
165
+ onboarding-gate:hook Hook entry point (drains stdin)
166
+ Writes .augment/state/onboarding-gate.json from .agent-settings.yml
167
+ context-hygiene:hook PostToolUse hook entry point (read JSON from stdin)
168
+ Maintains .augment/state/context-hygiene.json (turn count, loop, freshness)
169
+ dispatch:hook Universal hook dispatcher (Phase 7, hook-architecture-v1.md)
170
+ Usage: dispatch:hook --platform <name> --event <event> [--native-event <native>]
171
+ Reads scripts/hook_manifest.yaml and runs the resolved concern chain.
172
+ telemetry:record Append one artefact-engagement event (default-off)
173
+ telemetry:status Print artefact-engagement telemetry status (read-only)
174
+ telemetry:report Aggregate the engagement log into a quartile report
175
+ EOF
176
+ fi
177
+
178
+ if [[ "$tier" == "0" ]]; then
179
+ cat <<'EOF'
180
+
181
+ (Hidden: 15 Tier-1 + 26 Tier-2 commands. Run `./agent-config --help --tier=1`
182
+ or `--tier=all` to see them. Tier criteria: docs/contracts/command-surface-tiers.md.)
183
+ EOF
184
+ fi
185
+
186
+ cat <<'EOF'
187
+
188
+ Examples (Tier 0):
189
+ ./agent-config init --tools=claude-code,cursor --yes
190
+ ./agent-config sync --dry-run
191
+ ./agent-config sync
192
+ ./agent-config validate
193
+ ./agent-config work --state-file .work-state.json --prompt-file prompt.txt
194
+ ./agent-config implement-ticket --state-file .work-state.json
195
+ EOF
196
+
197
+ if [[ "$tier" == "1" || "$tier" == "all" ]]; then
198
+ cat <<'EOF'
199
+
200
+ Examples (Tier 1):
201
+ ./agent-config global --tools=claude-code --yes
202
+ ./agent-config global --ai=cursor,windsurf
203
+ ./agent-config export --list
204
+ ./agent-config export --tool=agents-md --output=AGENTS.md
205
+ ./agent-config export --tool=copilot-instructions --output=.github/copilot-instructions.md
206
+ ./agent-config uninstall --tools=cursor --dry-run
207
+ ./agent-config uninstall --global --tools=windsurf --purge
208
+ ./agent-config prune --dry-run
209
+ ./agent-config prune --json
210
+ ./agent-config doctor
211
+ ./agent-config doctor --json
212
+ ./agent-config versions
213
+ ./agent-config versions --limit=10
214
+ ./agent-config versions --json
215
+ ./agent-config init --offline --tools=claude-code,cursor --yes
216
+ ./agent-config update --offline --to=2.2.0
217
+ ./agent-config first-run
218
+ ./agent-config keys:install-anthropic
219
+ ./agent-config keys:install-openai
220
+ ./agent-config council:estimate prompt.txt
221
+ ./agent-config council:run prompt.txt --output agents/runtime/council/sessions/out.json --confirm
222
+ ./agent-config council:render agents/runtime/council/sessions/out.json
223
+ EOF
224
+ fi
225
+
226
+ if [[ "$tier" == "all" ]]; then
227
+ cat <<'EOF'
228
+
229
+ Examples (Tier 2):
230
+ ./agent-config mcp:render
231
+ ./agent-config mcp:render --claude-desktop
232
+ ./agent-config mcp:check
233
+ ./agent-config mcp:setup
234
+ ./agent-config mcp:run
235
+ ./agent-config roadmap:progress
236
+ ./agent-config settings:check
237
+ ./agent-config hooks:install
238
+ ./agent-config hooks:replay --platform augment --event post_tool_use --payload post_tool_use --json
239
+ ./agent-config migrate-state
240
+ ./agent-config memory:lookup --types domain-invariants --key billing
241
+ ./agent-config memory:signal --type architecture-decision --path src/Foo.php --body "…"
242
+ ./agent-config memory:check --path agents/memory
243
+ ./agent-config refine-ticket:detect ticket-body.txt
244
+ ./agent-config telemetry:status
245
+ ./agent-config telemetry:status --format json
246
+ ./agent-config telemetry:report --since 30d --top 20
247
+ ./agent-config telemetry:report --since 7d --format json --top 0
248
+ EOF
249
+ fi
250
+
251
+ cat <<'EOF'
252
+
253
+ All commands operate on the CURRENT DIRECTORY (your project root).
254
+ The CLI is strictly consumer-facing. Maintainer tasks live in Taskfile.yml.
255
+ EOF
256
+ }
257
+
258
+ print_version() {
259
+ if [[ -f "$VERSION_FILE" ]] && command -v python3 >/dev/null 2>&1; then
260
+ python3 -c "import json; print(json.load(open('$VERSION_FILE'))['version'])"
261
+ else
262
+ echo "unknown"
263
+ fi
264
+ }
265
+
266
+ require_python3() {
267
+ if ! command -v python3 >/dev/null 2>&1; then
268
+ echo "❌ agent-config: python3 not found on PATH" >&2
269
+ echo " Install Python 3.10+ and retry." >&2
270
+ exit 127
271
+ fi
272
+ }
273
+
274
+ # Locate a script. First argument is relative to PACKAGE_ROOT, second is
275
+ # an optional fallback relative to CONSUMER_ROOT (for scripts that ship
276
+ # to the consumer via .augment/, e.g. update_roadmap_progress.py).
277
+ resolve_script() {
278
+ local pkg_rel="$1"
279
+ local consumer_rel="${2-}"
280
+ local pkg_abs="$PACKAGE_ROOT/$pkg_rel"
281
+ if [[ -f "$pkg_abs" ]]; then
282
+ printf '%s' "$pkg_abs"
283
+ return 0
284
+ fi
285
+ if [[ -n "$consumer_rel" && -f "$CONSUMER_ROOT/$consumer_rel" ]]; then
286
+ printf '%s' "$CONSUMER_ROOT/$consumer_rel"
287
+ return 0
288
+ fi
289
+ echo "❌ agent-config: script not found: $pkg_rel" >&2
290
+ [[ -n "$consumer_rel" ]] && echo " (also tried: $consumer_rel in $CONSUMER_ROOT)" >&2
291
+ return 1
292
+ }
293
+
294
+ # Resolve a script that ships under templates/scripts/. Tries (in order):
295
+ # 1. CONSUMER_ROOT/scripts/<name> — local copy / customization
296
+ # 2. CONSUMER_ROOT/.augment/templates/scripts/<name> — installer-shipped
297
+ # 3. PACKAGE_ROOT/.agent-src/templates/scripts/<name> — package-internal fallback
298
+ # Consumer customization wins so projects can patch behavior locally
299
+ # without losing the upstream default.
300
+ resolve_template_script() {
301
+ local name="$1"
302
+ local p
303
+ for p in \
304
+ "$CONSUMER_ROOT/scripts/$name" \
305
+ "$CONSUMER_ROOT/.augment/templates/scripts/$name" \
306
+ "$PACKAGE_ROOT/.agent-src/templates/scripts/$name"; do
307
+ if [[ -f "$p" ]]; then
308
+ printf '%s' "$p"
309
+ return 0
310
+ fi
311
+ done
312
+ echo "❌ agent-config: template script not found: $name" >&2
313
+ echo " Searched:" >&2
314
+ echo " - $CONSUMER_ROOT/scripts/$name" >&2
315
+ echo " - $CONSUMER_ROOT/.augment/templates/scripts/$name" >&2
316
+ echo " - $PACKAGE_ROOT/.agent-src/templates/scripts/$name" >&2
317
+ return 1
318
+ }
319
+
320
+ cmd_mcp_render() {
321
+ require_python3
322
+ local script
323
+ script="$(resolve_script "scripts/mcp_render.py")"
324
+ exec python3 "$script" "$@"
325
+ }
326
+
327
+ cmd_mcp_check() {
328
+ require_python3
329
+ local script
330
+ script="$(resolve_script "scripts/mcp_render.py")"
331
+ exec python3 "$script" --check "$@"
332
+ }
333
+
334
+ cmd_mcp_setup() {
335
+ local script
336
+ script="$(resolve_script "scripts/mcp_setup.sh")" || return 1
337
+ exec bash "$script" "$@"
338
+ }
339
+
340
+ # Run the built-in stdio MCP server. The server module ships inside the
341
+ # package (PACKAGE_ROOT/scripts/mcp_server/), but the venv is created by
342
+ # `mcp_setup.sh` at CWD — keeping consumer projects in control of where
343
+ # the SDK install lives. PYTHONPATH points at PACKAGE_ROOT so the
344
+ # `scripts.mcp_server` import resolves regardless of CWD.
345
+ cmd_mcp_run() {
346
+ local venv_py="$CONSUMER_ROOT/.venv-mcp/bin/python"
347
+ if [[ ! -x "$venv_py" ]]; then
348
+ echo "❌ agent-config: .venv-mcp/ not found at $CONSUMER_ROOT/.venv-mcp" >&2
349
+ echo " Run \`./agent-config mcp:setup\` first to create it." >&2
350
+ exit 1
351
+ fi
352
+ exec env PYTHONPATH="$PACKAGE_ROOT" "$venv_py" -m scripts.mcp_server "$@"
353
+ }
354
+
355
+ cmd_roadmap_progress() {
356
+ require_python3
357
+ local script
358
+ script="$(resolve_script ".agent-src/scripts/update_roadmap_progress.py" ".augment/scripts/update_roadmap_progress.py")"
359
+ exec python3 "$script" "$@"
360
+ }
361
+
362
+ cmd_roadmap_progress_check() {
363
+ require_python3
364
+ local script
365
+ script="$(resolve_script ".agent-src/scripts/update_roadmap_progress.py" ".augment/scripts/update_roadmap_progress.py")"
366
+ exec python3 "$script" --check "$@"
367
+ }
368
+
369
+ cmd_first_run() {
370
+ local script
371
+ script="$(resolve_script "scripts/first-run.sh")"
372
+ exec bash "$script" "$@"
373
+ }
374
+
375
+ cmd_implement_ticket() {
376
+ require_python3
377
+ local engine_root="$PACKAGE_ROOT/.agent-src/templates/scripts"
378
+ if [[ ! -d "$engine_root/work_engine" ]]; then
379
+ echo "❌ agent-config: work_engine module not found at $engine_root/work_engine" >&2
380
+ echo " Reinstall the package and retry." >&2
381
+ return 1
382
+ fi
383
+ exec env PYTHONPATH="$engine_root" python3 -m work_engine "$@"
384
+ }
385
+
386
+ cmd_work() {
387
+ # /work shares the engine with /implement-ticket — only the input
388
+ # envelope differs (kind=prompt vs kind=ticket). Keeping a separate
389
+ # subcommand makes the user-facing distinction explicit and lets the
390
+ # two flows diverge later without churn at the wrapper layer.
391
+ require_python3
392
+ local engine_root="$PACKAGE_ROOT/.agent-src/templates/scripts"
393
+ if [[ ! -d "$engine_root/work_engine" ]]; then
394
+ echo "❌ agent-config: work_engine module not found at $engine_root/work_engine" >&2
395
+ echo " Reinstall the package and retry." >&2
396
+ return 1
397
+ fi
398
+ exec env PYTHONPATH="$engine_root" python3 -m work_engine "$@"
399
+ }
400
+
401
+ cmd_migrate_state() {
402
+ require_python3
403
+ local engine_root="$PACKAGE_ROOT/.agent-src/templates/scripts"
404
+ if [[ ! -d "$engine_root/work_engine/migration" ]]; then
405
+ echo "❌ agent-config: work_engine.migration module not found at $engine_root/work_engine/migration" >&2
406
+ echo " Reinstall the package and retry." >&2
407
+ return 1
408
+ fi
409
+ # -W ignore::RuntimeWarning suppresses the known sys.modules notice from
410
+ # `python3 -m pkg.subpkg.module` when the parent package eagerly imports
411
+ # the submodule via its CLI module. The migration is non-invasive and
412
+ # the warning is cosmetic; suppressing here avoids touching the engine.
413
+ exec env PYTHONPATH="$engine_root" python3 -W ignore::RuntimeWarning -m work_engine.migration.v0_to_v1 "$@"
414
+ }
415
+
416
+ cmd_memory_lookup() {
417
+ require_python3
418
+ local script
419
+ script="$(resolve_template_script "memory_lookup.py")" || return 1
420
+ exec python3 "$script" "$@"
421
+ }
422
+
423
+ cmd_memory_signal() {
424
+ require_python3
425
+ local script
426
+ script="$(resolve_template_script "memory_signal.py")" || return 1
427
+ exec python3 "$script" "$@"
428
+ }
429
+
430
+ cmd_memory_hash() {
431
+ require_python3
432
+ local script
433
+ script="$(resolve_template_script "memory_hash.py")" || return 1
434
+ exec python3 "$script" "$@"
435
+ }
436
+
437
+ cmd_telemetry_record() {
438
+ require_python3
439
+ local script
440
+ script="$(resolve_template_script "telemetry_record.py")" || return 1
441
+ exec python3 "$script" "$@"
442
+ }
443
+
444
+ cmd_telemetry_status() {
445
+ require_python3
446
+ local script
447
+ script="$(resolve_template_script "telemetry_status.py")" || return 1
448
+ exec python3 "$script" "$@"
449
+ }
450
+
451
+ cmd_telemetry_report() {
452
+ require_python3
453
+ local script
454
+ script="$(resolve_template_script "telemetry_report.py")" || return 1
455
+ exec python3 "$script" "$@"
456
+ }
457
+
458
+ cmd_memory_check() {
459
+ require_python3
460
+ local script
461
+ script="$(resolve_template_script "check_memory.py")" || return 1
462
+ exec python3 "$script" "$@"
463
+ }
464
+
465
+ cmd_memory_check_proposal() {
466
+ require_python3
467
+ local script
468
+ script="$(resolve_template_script "check_memory_proposal.py")" || return 1
469
+ exec python3 "$script" "$@"
470
+ }
471
+
472
+ cmd_proposal_check() {
473
+ require_python3
474
+ local script
475
+ script="$(resolve_script "scripts/check_proposal.py")" || return 1
476
+ exec python3 "$script" "$@"
477
+ }
478
+
479
+ cmd_refine_ticket_detect() {
480
+ require_python3
481
+ local script
482
+ script="$(resolve_script "scripts/refine_ticket_detect.py")" || return 1
483
+ exec python3 "$script" "$@"
484
+ }
485
+
486
+ cmd_chat_history_hook() {
487
+ require_python3
488
+ local script
489
+ script="$(resolve_script "scripts/chat_history.py")" || return 1
490
+ exec python3 "$script" hook-dispatch "$@"
491
+ }
492
+
493
+ cmd_roadmap_progress_hook() {
494
+ require_python3
495
+ local script
496
+ script="$(resolve_script "scripts/roadmap_progress_hook.py")" || return 1
497
+ exec python3 "$script" "$@"
498
+ }
499
+
500
+ cmd_onboarding_gate_hook() {
501
+ require_python3
502
+ local script
503
+ script="$(resolve_script "scripts/onboarding_gate_hook.py")" || return 1
504
+ exec python3 "$script" "$@"
505
+ }
506
+
507
+ cmd_context_hygiene_hook() {
508
+ require_python3
509
+ local script
510
+ script="$(resolve_script "scripts/context_hygiene_hook.py")" || return 1
511
+ exec python3 "$script" "$@"
512
+ }
513
+
514
+ cmd_dispatch_hook() {
515
+ require_python3
516
+ local script
517
+ script="$(resolve_script "scripts/hooks/dispatch_hook.py")" || return 1
518
+ exec python3 "$script" "$@"
519
+ }
520
+
521
+ cmd_hooks_status() {
522
+ require_python3
523
+ local script
524
+ script="$(resolve_script "scripts/hooks_status.py")" || return 1
525
+ exec python3 "$script" "$@"
526
+ }
527
+
528
+ cmd_hooks_doctor() {
529
+ require_python3
530
+ local script
531
+ script="$(resolve_script "scripts/hooks_doctor.py")" || return 1
532
+ exec python3 "$script" "$@"
533
+ }
534
+
535
+ cmd_hooks_replay() {
536
+ require_python3
537
+ local script
538
+ script="$(resolve_script "scripts/hooks/replay_hook.py")" || return 1
539
+ exec python3 "$script" "$@"
540
+ }
541
+
542
+ cmd_chat_history_checkpoint() {
543
+ require_python3
544
+ local script
545
+ script="$(resolve_script "scripts/chat_history.py")" || return 1
546
+ # Default cadence-bearing event when a user/agent invokes /chat-history-checkpoint:
547
+ # "phase" — explicit phase boundary, lands under per_phase / per_turn cadences.
548
+ exec python3 "$script" hook-append --event phase "$@"
549
+ }
550
+
551
+ cmd_hooks_install() {
552
+ local force=false
553
+ local print_only=false
554
+ for arg in "$@"; do
555
+ case "$arg" in
556
+ --force) force=true ;;
557
+ --print) print_only=true ;;
558
+ -h|--help)
559
+ cat <<'HELP'
560
+ agent-config hooks:install — install the pre-commit roadmap-progress hook.
561
+
562
+ Usage:
563
+ ./agent-config hooks:install [--force] [--print]
564
+
565
+ Without flags: copies the hook to .git/hooks/pre-commit. Refuses to
566
+ overwrite an existing pre-commit hook unless --force is given (the
567
+ existing hook may already chain other tooling).
568
+
569
+ --print dump the hook script to stdout (for manual chaining into an
570
+ existing pre-commit script, husky, lefthook, etc.)
571
+ --force overwrite an existing .git/hooks/pre-commit (DESTRUCTIVE)
572
+ HELP
573
+ return 0 ;;
574
+ *)
575
+ echo "❌ hooks:install: unknown argument: $arg" >&2
576
+ echo " Run \`./agent-config hooks:install --help\` for usage." >&2
577
+ return 2 ;;
578
+ esac
579
+ done
580
+
581
+ local hook_src
582
+ hook_src="$(resolve_script ".agent-src/templates/hooks/pre-commit-roadmap-progress" ".augment/templates/hooks/pre-commit-roadmap-progress")" || return 1
583
+
584
+ if $print_only; then
585
+ cat "$hook_src"
586
+ return 0
587
+ fi
588
+
589
+ local git_dir
590
+ git_dir="$(git -C "$CONSUMER_ROOT" rev-parse --git-dir 2>/dev/null || true)"
591
+ if [[ -z "$git_dir" ]]; then
592
+ echo "❌ hooks:install: $CONSUMER_ROOT is not a git repository." >&2
593
+ return 1
594
+ fi
595
+ # Resolve relative git-dir paths (worktrees, submodules) against CONSUMER_ROOT.
596
+ [[ "$git_dir" != /* ]] && git_dir="$CONSUMER_ROOT/$git_dir"
597
+
598
+ local hook_dir="$git_dir/hooks"
599
+ local target="$hook_dir/pre-commit"
600
+ mkdir -p "$hook_dir"
601
+
602
+ if [[ -f "$target" ]] && ! $force; then
603
+ if grep -q "pre-commit-roadmap-progress" "$target" 2>/dev/null; then
604
+ echo "✅ hooks:install: already installed at $target"
605
+ return 0
606
+ fi
607
+ echo "⚠️ hooks:install: $target already exists and looks unrelated." >&2
608
+ echo " Options:" >&2
609
+ echo " 1. Inspect it and append the snippet manually:" >&2
610
+ echo " ./agent-config hooks:install --print >> $target" >&2
611
+ echo " 2. Replace it (destructive):" >&2
612
+ echo " ./agent-config hooks:install --force" >&2
613
+ return 1
614
+ fi
615
+
616
+ cp "$hook_src" "$target"
617
+ chmod +x "$target"
618
+ echo "✅ hooks:install: pre-commit hook installed at $target"
619
+ echo " To uninstall: rm $target"
620
+ }
621
+
622
+ # Wrap the interactive key installers under a stable CLI entry. The shell
623
+ # scripts themselves enforce /dev/tty, 0600, and atomic write — this is
624
+ # pure routing so consumers never have to know the package layout.
625
+ cmd_keys_install_anthropic() {
626
+ local script
627
+ script="$(resolve_script "scripts/install_anthropic_key.sh")" || return 1
628
+ exec bash "$script" "$@"
629
+ }
630
+
631
+ cmd_keys_install_openai() {
632
+ local script
633
+ script="$(resolve_script "scripts/install_openai_key.sh")" || return 1
634
+ exec bash "$script" "$@"
635
+ }
636
+
637
+ # Council CLI — non-interactive wrapper around scripts.ai_council.orchestrator.
638
+ # Three subcommands share one Python entry point; we forward the subcommand
639
+ # verb so `./agent-config council:run --confirm` lands on `council_cli.py run`.
640
+ cmd_council() {
641
+ require_python3
642
+ local sub="$1"; shift || true
643
+ local script
644
+ script="$(resolve_script "scripts/council_cli.py")" || return 1
645
+ exec env PYTHONPATH="$PACKAGE_ROOT" python3 "$script" "$sub" "$@"
646
+ }
647
+
648
+ # `agent-config update` — flip the agent_config_version pin in
649
+ # .agent-settings.yml. See scripts/_cli/cmd_update.py (P3.1 of
650
+ # road-to-portable-runtime-and-update-check.md).
651
+ cmd_update() {
652
+ require_python3
653
+ exec env PYTHONPATH="$PACKAGE_ROOT" python3 -m scripts._cli.cmd_update "$@"
654
+ }
655
+
656
+ # `agent-config migrate` — one-shot migration off legacy composer / npm
657
+ # install paths onto the npx-only runtime. See scripts/_cli/cmd_migrate.py
658
+ # (P3.5 of road-to-portable-runtime-and-update-check.md).
659
+ cmd_migrate() {
660
+ require_python3
661
+ exec env PYTHONPATH="$PACKAGE_ROOT" python3 -m scripts._cli.cmd_migrate "$@"
662
+ }
663
+
664
+ # `agent-config init` — project-scope install entry point. Forwards
665
+ # unmodified args to the bash installer. This is the canonical
666
+ # `npx @event4u/agent-config init` consumer entry point (replaces the
667
+ # deprecated @event4u/create-agent-config wrapper package).
668
+ cmd_init() {
669
+ local script
670
+ script="$(resolve_script "scripts/install")" || return 1
671
+ exec bash "$script" "$@"
672
+ }
673
+
674
+ # `agent-config global` — user-scope install entry point. Forwards to the
675
+ # bash installer with `--global` set (ADR-007). Phase 1.2 of
676
+ # road-to-global-first-install.md. The bash wrapper handles option parsing
677
+ # and forwards to `scripts/install.py --global`, where `install_global()`
678
+ # currently scaffolds the per-tool anchor paths from USER_SCOPE_PATHS.
679
+ # Concrete writes land in Phase 1.5 (export) and Phase 1.6 (lockfile).
680
+ cmd_global() {
681
+ local script
682
+ script="$(resolve_script "scripts/install")" || return 1
683
+ exec bash "$script" --global "$@"
684
+ }
685
+
686
+ # `agent-config export` — write a tool's canonical content into a
687
+ # user-chosen path. ADR-007 D3 / Phase 1.5 of
688
+ # road-to-global-first-install.md. Replaces the rejected symlink-bridge.
689
+ # See scripts/_cli/cmd_export.py for the registry and idempotency logic.
690
+ cmd_export() {
691
+ require_python3
692
+ exec env PYTHONPATH="$PACKAGE_ROOT" python3 -m scripts._cli.cmd_export "$@"
693
+ }
694
+
695
+ # `agent-config sync` — replay agents/installed-tools.lock (ADR-008
696
+ # Phase 3.3). Re-installs any tool whose bridge marker is missing on
697
+ # disk. Typical onboarding flow: clone → `./agent-config sync` → done.
698
+ cmd_sync() {
699
+ require_python3
700
+ exec env PYTHONPATH="$PACKAGE_ROOT" python3 -m scripts._cli.cmd_sync "$@"
701
+ }
702
+
703
+ # `agent-config validate` — read-only drift detection (ADR-008 Phase 3.4).
704
+ # Surfaces marker-missing, scope-divergence, and version-drift; exits 1 on
705
+ # any drift. Never edits the manifest or re-runs the installer.
706
+ cmd_validate() {
707
+ require_python3
708
+ exec env PYTHONPATH="$PACKAGE_ROOT" python3 -m scripts._cli.cmd_validate "$@"
709
+ }
710
+
711
+ # `agent-config settings:check` — read-only YAML-subset validator for
712
+ # `.agent-settings.yml` (P3.2 of road-to-proof-not-features.md). Contract
713
+ # pinned in docs/contracts/settings-sync-yaml-subset.md. Exit 0 clean,
714
+ # 1 finding(s), 2 file absent / unreadable.
715
+ cmd_settings_check() {
716
+ require_python3
717
+ exec env PYTHONPATH="$PACKAGE_ROOT" python3 -m scripts._cli.cmd_settings_check "$@"
718
+ }
719
+
720
+ # `agent-config uninstall` — remove bridge markers (project) or lockfile
721
+ # entries (global). Idempotent. Pass `--purge` to also delete deployed
722
+ # content directories under user-scope anchors (destructive). See
723
+ # scripts/_cli/cmd_uninstall.py.
724
+ cmd_uninstall() {
725
+ require_python3
726
+ exec env PYTHONPATH="$PACKAGE_ROOT" python3 -m scripts._cli.cmd_uninstall "$@"
727
+ }
728
+
729
+ # `agent-config prune` — remove orphaned project bridge markers.
730
+ # Drift-cleanup sibling to `uninstall`: compares on-disk markers
731
+ # against agents/installed-tools.lock and unlinks anything not
732
+ # declared. Hard-floors when lockfile is absent. See
733
+ # scripts/_cli/cmd_prune.py.
734
+ cmd_prune() {
735
+ require_python3
736
+ exec env PYTHONPATH="$PACKAGE_ROOT" python3 -m scripts._cli.cmd_prune "$@"
737
+ }
738
+
739
+ # `agent-config doctor` — read-only drift report against the manifest.
740
+ # Surfaces missing / modified / foreign files. Exit 0 clean, 1 drift,
741
+ # 2 manifest-absent. See scripts/_cli/cmd_doctor.py.
742
+ cmd_doctor() {
743
+ require_python3
744
+ exec env PYTHONPATH="$PACKAGE_ROOT" python3 -m scripts._cli.cmd_doctor "$@"
745
+ }
746
+
747
+ # `agent-config versions` — list available @event4u/agent-config versions
748
+ # on the npm registry. Marks the current pin (from .agent-settings.yml)
749
+ # and the latest published version. Offline-tolerant. See
750
+ # scripts/_cli/cmd_versions.py.
751
+ cmd_versions() {
752
+ require_python3
753
+ exec env PYTHONPATH="$PACKAGE_ROOT" python3 -m scripts._cli.cmd_versions "$@"
754
+ }
755
+
756
+ # `agent-config explain <config|rule|route>` — print the decision chain
757
+ # behind a configuration or routing outcome. Read-only diagnostic; never
758
+ # edits state. See scripts/_cli/cmd_explain.py.
759
+ cmd_explain() {
760
+ require_python3
761
+ exec env PYTHONPATH="$PACKAGE_ROOT" python3 -m scripts._cli.cmd_explain "$@"
762
+ }
763
+
764
+ main() {
765
+ local cmd="${1-}"
766
+ [[ $# -gt 0 ]] && shift || true
767
+
768
+ case "$cmd" in
769
+ mcp:render) cmd_mcp_render "$@" ;;
770
+ mcp:check) cmd_mcp_check "$@" ;;
771
+ mcp:setup) cmd_mcp_setup "$@" ;;
772
+ mcp:run) cmd_mcp_run "$@" ;;
773
+ roadmap:progress) cmd_roadmap_progress "$@" ;;
774
+ roadmap:progress-check) cmd_roadmap_progress_check "$@" ;;
775
+ hooks:install) cmd_hooks_install "$@" ;;
776
+ keys:install-anthropic) cmd_keys_install_anthropic "$@" ;;
777
+ keys:install-openai) cmd_keys_install_openai "$@" ;;
778
+ first-run) cmd_first_run "$@" ;;
779
+ implement-ticket) cmd_implement_ticket "$@" ;;
780
+ work) cmd_work "$@" ;;
781
+ migrate-state) cmd_migrate_state "$@" ;;
782
+ memory:lookup) cmd_memory_lookup "$@" ;;
783
+ memory:signal) cmd_memory_signal "$@" ;;
784
+ memory:hash) cmd_memory_hash "$@" ;;
785
+ memory:check) cmd_memory_check "$@" ;;
786
+ memory:check-proposal) cmd_memory_check_proposal "$@" ;;
787
+ proposal:check) cmd_proposal_check "$@" ;;
788
+ refine-ticket:detect) cmd_refine_ticket_detect "$@" ;;
789
+ chat-history:hook) cmd_chat_history_hook "$@" ;;
790
+ chat-history:checkpoint) cmd_chat_history_checkpoint "$@" ;;
791
+ roadmap-progress:hook) cmd_roadmap_progress_hook "$@" ;;
792
+ onboarding-gate:hook) cmd_onboarding_gate_hook "$@" ;;
793
+ context-hygiene:hook) cmd_context_hygiene_hook "$@" ;;
794
+ dispatch:hook) cmd_dispatch_hook "$@" ;;
795
+ hooks:status) cmd_hooks_status "$@" ;;
796
+ hooks:doctor) cmd_hooks_doctor "$@" ;;
797
+ hooks:replay) cmd_hooks_replay "$@" ;;
798
+ telemetry:record) cmd_telemetry_record "$@" ;;
799
+ telemetry:status) cmd_telemetry_status "$@" ;;
800
+ telemetry:report) cmd_telemetry_report "$@" ;;
801
+ council:estimate) cmd_council estimate "$@" ;;
802
+ council:run) cmd_council run "$@" ;;
803
+ council:render) cmd_council render "$@" ;;
804
+ update) cmd_update "$@" ;;
805
+ migrate) cmd_migrate "$@" ;;
806
+ init) cmd_init "$@" ;;
807
+ global) cmd_global "$@" ;;
808
+ export) cmd_export "$@" ;;
809
+ sync) cmd_sync "$@" ;;
810
+ validate) cmd_validate "$@" ;;
811
+ settings:check) cmd_settings_check "$@" ;;
812
+ uninstall) cmd_uninstall "$@" ;;
813
+ prune) cmd_prune "$@" ;;
814
+ doctor) cmd_doctor "$@" ;;
815
+ versions) cmd_versions "$@" ;;
816
+ explain) cmd_explain "$@" ;;
817
+ help|--help|-h|"")
818
+ # Optional `--tier=0|1|all` filter (default 0).
819
+ local tier_arg="0"
820
+ for arg in "$@"; do
821
+ case "$arg" in
822
+ --tier=0|--tier=1|--tier=all) tier_arg="${arg#--tier=}" ;;
823
+ --tier|-t) ;; # next arg
824
+ 0|1|all)
825
+ # Positional after --tier/-t.
826
+ tier_arg="$arg" ;;
827
+ --all) tier_arg="all" ;;
828
+ esac
829
+ done
830
+ usage "$tier_arg" ;;
831
+ --version|-V) print_version ;;
832
+ *)
833
+ echo "❌ agent-config: unknown command: $cmd" >&2
834
+ echo " Run \`./agent-config help\` for the command list." >&2
835
+ exit 2
836
+ ;;
837
+ esac
838
+ }
839
+
840
+ # Pre-flight pin resolver: when `.agent-settings.yml` carries a
841
+ # non-empty `agent_config_version` that differs from the running
842
+ # package version, re-exec via `npx @event4u/agent-config@<pin>`.
843
+ # Skipped for `--version`, `help`, `update` and `migrate` (so consumers
844
+ # can escape a bad pin or run the legacy-cleanup before a pin exists),
845
+ # and when `AGENT_CONFIG_NO_PIN_REEXEC=1`. See P3.2 of
846
+ # road-to-portable-runtime-and-update-check.md.
847
+ maybe_pin_reexec() {
848
+ local cmd="${1-}"
849
+ case "$cmd" in
850
+ help|--help|-h|--version|-V|update|migrate|init|"") return 0 ;;
851
+ esac
852
+ if ! command -v python3 >/dev/null 2>&1; then
853
+ return 0
854
+ fi
855
+ local installed
856
+ installed="$(print_version)"
857
+ [[ -z "$installed" || "$installed" == "unknown" ]] && return 0
858
+ env PYTHONPATH="$PACKAGE_ROOT" python3 -m scripts._lib.pin_resolver \
859
+ --cwd "$CONSUMER_ROOT" --installed "$installed" -- "$@" || true
860
+ }
861
+
862
+ # Post-subcommand banner: best-effort daily update-check notice on
863
+ # stderr. Runs after the dispatch returns (subshell wrapper below)
864
+ # so the banner appears post-output and never delays the subcommand.
865
+ # Suppressed in CI, on non-TTY stdout, by AGENT_CONFIG_NO_UPDATE_CHECK=1,
866
+ # or by `update_check.enabled: false` in settings. See P2 of
867
+ # road-to-portable-runtime-and-update-check.md.
868
+ run_update_check_banner() {
869
+ local cmd="${1-}"
870
+ case "$cmd" in
871
+ help|--help|-h|--version|-V|"") return 0 ;;
872
+ esac
873
+ if ! command -v python3 >/dev/null 2>&1; then
874
+ return 0
875
+ fi
876
+ local banner_script="$PACKAGE_ROOT/scripts/check_update_banner.py"
877
+ [[ -f "$banner_script" ]] || return 0
878
+ python3 "$banner_script" --cwd "$CONSUMER_ROOT" 2>/dev/null || true
879
+ }
880
+
881
+ # Global `--root <path>` / `--root=<path>` parsing (Step 8 A3).
882
+ # Strips the flag from $@, validates the path is an existing directory,
883
+ # and exports `AGENT_CONFIG_PROJECT_ROOT` + `AGENT_CONFIG_ROOT_OVERRIDE=1`
884
+ # so the Python resolver picks origin=root-flag with fail-loud semantics.
885
+ # Invalid path → exit 2 immediately, no fallback to anchor walk or CWD.
886
+ parse_global_root_flag() {
887
+ local -a filtered=()
888
+ local root_value=""
889
+ local saw_flag=false
890
+ while [[ $# -gt 0 ]]; do
891
+ case "$1" in
892
+ --root)
893
+ saw_flag=true
894
+ if [[ $# -lt 2 ]]; then
895
+ echo "❌ agent-config: --root requires a path argument" >&2
896
+ exit 2
897
+ fi
898
+ root_value="$2"
899
+ shift 2
900
+ ;;
901
+ --root=*)
902
+ saw_flag=true
903
+ root_value="${1#--root=}"
904
+ shift
905
+ ;;
906
+ *)
907
+ filtered+=("$1")
908
+ shift
909
+ ;;
910
+ esac
911
+ done
912
+ if $saw_flag; then
913
+ if [[ -z "$root_value" ]]; then
914
+ echo "❌ agent-config: --root requires a non-empty path" >&2
915
+ exit 2
916
+ fi
917
+ if [[ ! -e "$root_value" ]]; then
918
+ echo "❌ agent-config: --root points to a path that does not exist: $root_value" >&2
919
+ exit 2
920
+ fi
921
+ if [[ ! -d "$root_value" ]]; then
922
+ echo "❌ agent-config: --root points to a non-directory: $root_value" >&2
923
+ exit 2
924
+ fi
925
+ # Absolutize so downstream Python sees a fully-resolved path.
926
+ root_value="$(cd "$root_value" && pwd)"
927
+ export AGENT_CONFIG_PROJECT_ROOT="$root_value"
928
+ export AGENT_CONFIG_ROOT_OVERRIDE=1
929
+ # Wrapper-coupling guard: when invoked through a consumer-root wrapper
930
+ # (CONSUMER_ROOT != root_value), surface a one-line warning on stderr
931
+ # so the operator notices the divergence. Non-fatal: --root is the
932
+ # deliberate override channel.
933
+ if [[ "$CONSUMER_ROOT" != "$root_value" ]]; then
934
+ echo "⚠️ agent-config: --root ($root_value) differs from wrapper CWD ($CONSUMER_ROOT)" >&2
935
+ fi
936
+ fi
937
+ # Re-emit the filtered argv via a global array consumed by main().
938
+ GLOBAL_FILTERED_ARGS=("${filtered[@]+"${filtered[@]}"}")
939
+ }
940
+
941
+ declare -a GLOBAL_FILTERED_ARGS
942
+ parse_global_root_flag "$@"
943
+ set -- "${GLOBAL_FILTERED_ARGS[@]+"${GLOBAL_FILTERED_ARGS[@]}"}"
944
+
945
+ # Pin re-exec runs before dispatch — if it triggers, the process is
946
+ # replaced and nothing else here matters.
947
+ maybe_pin_reexec "$@"
948
+
949
+ # Dispatch in a subshell so internal ``exec`` calls do not replace this
950
+ # process — we still get to run the post-subcommand banner.
951
+ ( main "$@" )
952
+ rc=$?
953
+ run_update_check_banner "${1-}"
954
+ exit "$rc"