@event4u/agent-config 2.26.0 → 3.1.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 (870) 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 +12 -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 +12 -0
  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 +12 -0
  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/install-via-agent.md +129 -0
  66. package/.agent-src/commands/jira-ticket.md +12 -0
  67. package/.agent-src/commands/judge/on-diff.md +12 -0
  68. package/.agent-src/commands/judge/solo.md +12 -0
  69. package/.agent-src/commands/judge/steps.md +12 -0
  70. package/.agent-src/commands/judge.md +12 -0
  71. package/.agent-src/commands/memory/add.md +12 -0
  72. package/.agent-src/commands/memory/learn-low-impact.md +18 -6
  73. package/.agent-src/commands/memory/load.md +12 -0
  74. package/.agent-src/commands/memory/mine-session.md +12 -0
  75. package/.agent-src/commands/memory/promote.md +12 -0
  76. package/.agent-src/commands/memory/propose.md +12 -0
  77. package/.agent-src/commands/memory.md +12 -0
  78. package/.agent-src/commands/mode.md +12 -0
  79. package/.agent-src/commands/module/create.md +12 -0
  80. package/.agent-src/commands/module/explore.md +13 -1
  81. package/.agent-src/commands/module.md +12 -0
  82. package/.agent-src/commands/optimize/agents-dir.md +14 -2
  83. package/.agent-src/commands/optimize/augmentignore.md +12 -0
  84. package/.agent-src/commands/optimize/rtk.md +12 -0
  85. package/.agent-src/commands/optimize/skills.md +12 -0
  86. package/.agent-src/commands/optimize-prompt.md +12 -0
  87. package/.agent-src/commands/optimize.md +12 -0
  88. package/.agent-src/commands/orchestrate.md +13 -1
  89. package/.agent-src/commands/override/create.md +12 -0
  90. package/.agent-src/commands/override/manage.md +12 -0
  91. package/.agent-src/commands/override.md +12 -0
  92. package/.agent-src/commands/package-reset.md +12 -0
  93. package/.agent-src/commands/package-test.md +12 -0
  94. package/.agent-src/commands/post-as/ghostwriter.md +12 -0
  95. package/.agent-src/commands/post-as/me.md +13 -1
  96. package/.agent-src/commands/post-as.md +12 -0
  97. package/.agent-src/commands/prepare-for-review.md +12 -0
  98. package/.agent-src/commands/project-analyze.md +27 -15
  99. package/.agent-src/commands/project-health.md +13 -1
  100. package/.agent-src/commands/quality-fix.md +12 -0
  101. package/.agent-src/commands/refine-ticket.md +12 -0
  102. package/.agent-src/commands/research/deep.md +12 -0
  103. package/.agent-src/commands/research/report.md +12 -0
  104. package/.agent-src/commands/research.md +12 -0
  105. package/.agent-src/commands/review-changes.md +12 -0
  106. package/.agent-src/commands/review-routing.md +12 -0
  107. package/.agent-src/commands/roadmap/ai-council.md +15 -3
  108. package/.agent-src/commands/roadmap/create.md +13 -1
  109. package/.agent-src/commands/roadmap/process-full.md +12 -0
  110. package/.agent-src/commands/roadmap/process-phase.md +12 -0
  111. package/.agent-src/commands/roadmap/process-step.md +12 -0
  112. package/.agent-src/commands/roadmap.md +12 -0
  113. package/.agent-src/commands/rule-compliance-audit.md +12 -0
  114. package/.agent-src/commands/set-cost-profile.md +12 -0
  115. package/.agent-src/commands/sync-agent-settings.md +12 -0
  116. package/.agent-src/commands/sync-gitignore/fix.md +32 -13
  117. package/.agent-src/commands/sync-gitignore.md +13 -1
  118. package/.agent-src/commands/tests/create.md +12 -0
  119. package/.agent-src/commands/tests/execute.md +12 -0
  120. package/.agent-src/commands/tests.md +12 -0
  121. package/.agent-src/commands/threat-model.md +12 -0
  122. package/.agent-src/commands/update-form-request-messages.md +12 -0
  123. package/.agent-src/commands/upstream-contribute.md +12 -0
  124. package/.agent-src/commands/video/from-script.md +13 -1
  125. package/.agent-src/commands/video/scene.md +12 -0
  126. package/.agent-src/commands/video/stitch.md +13 -1
  127. package/.agent-src/commands/video/storyboard.md +12 -0
  128. package/.agent-src/commands/video.md +13 -1
  129. package/.agent-src/commands/work.md +12 -0
  130. package/.agent-src/contexts/augment-infrastructure.md +2 -2
  131. package/.agent-src/contexts/authority/scope-mechanics.md +11 -0
  132. package/.agent-src/contexts/contracts/agents-md-anatomy.md +1 -1
  133. package/.agent-src/contexts/documentation-hierarchy.md +2 -2
  134. package/.agent-src/contexts/execution/cheap-question-mechanics.md +81 -0
  135. package/.agent-src/contexts/execution/roadmap-process-loop.md +19 -0
  136. package/.agent-src/ghostwriter/README.md +2 -2
  137. package/.agent-src/ghostwriter/fictional-fixture-v1.md +1 -1
  138. package/.agent-src/personas/README.md +1 -1
  139. package/.agent-src/personas/advisors/contrarian.md +1 -1
  140. package/.agent-src/personas/advisors/executor.md +1 -1
  141. package/.agent-src/personas/advisors/expansionist.md +1 -1
  142. package/.agent-src/personas/advisors/first-principles.md +1 -1
  143. package/.agent-src/personas/advisors/outsider.md +1 -1
  144. package/.agent-src/rules/agent-authority.md +12 -0
  145. package/.agent-src/rules/analysis-skill-routing.md +12 -0
  146. package/.agent-src/rules/architecture.md +13 -1
  147. package/.agent-src/rules/artifact-drafting-protocol.md +13 -1
  148. package/.agent-src/rules/artifact-engagement-recording.md +13 -1
  149. package/.agent-src/rules/ask-when-uncertain.md +12 -0
  150. package/.agent-src/rules/augment-edit-discipline.md +13 -1
  151. package/.agent-src/rules/augment-source-of-truth.md +13 -1
  152. package/.agent-src/rules/autonomous-execution.md +13 -1
  153. package/.agent-src/rules/caveman-speak.md +15 -3
  154. package/.agent-src/rules/cli-output-handling.md +13 -1
  155. package/.agent-src/rules/command-suggestion-policy.md +13 -1
  156. package/.agent-src/rules/commit-conventions.md +13 -1
  157. package/.agent-src/rules/commit-policy.md +12 -0
  158. package/.agent-src/rules/context-hygiene.md +51 -3
  159. package/.agent-src/rules/copilot-routing.md +13 -1
  160. package/.agent-src/rules/devcontainer-routing.md +13 -1
  161. package/.agent-src/rules/direct-answers.md +12 -0
  162. package/.agent-src/rules/docker-commands.md +13 -1
  163. package/.agent-src/rules/domain-adoption-policy.md +17 -5
  164. package/.agent-src/rules/domain-safety-disclaimer.md +13 -1
  165. package/.agent-src/rules/domain-safety-pii.md +13 -1
  166. package/.agent-src/rules/domain-safety-retention.md +13 -1
  167. package/.agent-src/rules/downstream-changes.md +13 -1
  168. package/.agent-src/rules/engineering-safety-floor.md +102 -0
  169. package/.agent-src/rules/external-reference-deep-dive.md +13 -1
  170. package/.agent-src/rules/fast-path-marker-visibility.md +21 -1
  171. package/.agent-src/rules/finance-safety-floor.md +114 -0
  172. package/.agent-src/rules/framework-neutrality-in-generic-skills.md +13 -1
  173. package/.agent-src/rules/git-history-discipline.md +14 -2
  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 +13 -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 +46 -32
  188. package/.agent-src/rules/no-roadmap-references.md +28 -16
  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 +18 -6
  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/strategy-safety-floor.md +114 -0
  209. package/.agent-src/rules/symfony-routing.md +13 -1
  210. package/.agent-src/rules/think-before-action.md +13 -1
  211. package/.agent-src/rules/token-efficiency.md +13 -1
  212. package/.agent-src/rules/token-optimizer-maintenance.md +12 -0
  213. package/.agent-src/rules/tool-safety.md +13 -1
  214. package/.agent-src/rules/ui-audit-gate.md +13 -1
  215. package/.agent-src/rules/upstream-proposal.md +13 -1
  216. package/.agent-src/rules/user-interaction.md +13 -1
  217. package/.agent-src/rules/user-interrupt-priority.md +12 -0
  218. package/.agent-src/rules/verify-before-complete.md +12 -0
  219. package/.agent-src/skills/accessibility-auditor/SKILL.md +12 -0
  220. package/.agent-src/skills/activation-design/SKILL.md +12 -0
  221. package/.agent-src/skills/adr-create/SKILL.md +12 -0
  222. package/.agent-src/skills/adversarial-review/SKILL.md +12 -0
  223. package/.agent-src/skills/agent-docs-writing/SKILL.md +16 -4
  224. package/.agent-src/skills/agents-md-thin-root/SKILL.md +28 -10
  225. package/.agent-src/skills/ai-council/SKILL.md +28 -15
  226. package/.agent-src/skills/analysis-autonomous-mode/SKILL.md +12 -0
  227. package/.agent-src/skills/analysis-skill-router/SKILL.md +12 -0
  228. package/.agent-src/skills/api-design/SKILL.md +13 -3
  229. package/.agent-src/skills/api-endpoint/SKILL.md +12 -0
  230. package/.agent-src/skills/api-testing/SKILL.md +12 -0
  231. package/.agent-src/skills/architecture-review-lens/SKILL.md +12 -0
  232. package/.agent-src/skills/artisan-commands/SKILL.md +12 -0
  233. package/.agent-src/skills/async-python-patterns/SKILL.md +13 -1
  234. package/.agent-src/skills/authz-review/SKILL.md +12 -2
  235. package/.agent-src/skills/aws-infrastructure/SKILL.md +12 -0
  236. package/.agent-src/skills/blade-ui/SKILL.md +12 -0
  237. package/.agent-src/skills/blast-radius-analyzer/SKILL.md +12 -0
  238. package/.agent-src/skills/bug-analyzer/SKILL.md +14 -2
  239. package/.agent-src/skills/build-buy-partner/SKILL.md +12 -0
  240. package/.agent-src/skills/canvas-design/SKILL.md +12 -0
  241. package/.agent-src/skills/character-consistency/SKILL.md +23 -11
  242. package/.agent-src/skills/check-refs/SKILL.md +12 -0
  243. package/.agent-src/skills/churn-prevention/SKILL.md +12 -0
  244. package/.agent-src/skills/code-refactoring/SKILL.md +16 -4
  245. package/.agent-src/skills/code-review/SKILL.md +12 -0
  246. package/.agent-src/skills/command-routing/SKILL.md +12 -0
  247. package/.agent-src/skills/command-writing/SKILL.md +14 -2
  248. package/.agent-src/skills/comp-banding/SKILL.md +12 -0
  249. package/.agent-src/skills/competitive-moat-analysis/SKILL.md +12 -2
  250. package/.agent-src/skills/competitive-positioning/SKILL.md +12 -2
  251. package/.agent-src/skills/composer-packages/SKILL.md +12 -0
  252. package/.agent-src/skills/compress-memory/SKILL.md +12 -0
  253. package/.agent-src/skills/content-funnel-design/SKILL.md +12 -2
  254. package/.agent-src/skills/context-authoring/SKILL.md +18 -6
  255. package/.agent-src/skills/context-document/SKILL.md +17 -5
  256. package/.agent-src/skills/contracts-cognition/SKILL.md +12 -2
  257. package/.agent-src/skills/conventional-commits-writing/SKILL.md +12 -0
  258. package/.agent-src/skills/copilot-agents-optimization/SKILL.md +13 -1
  259. package/.agent-src/skills/copilot-config/SKILL.md +12 -0
  260. package/.agent-src/skills/customer-research/SKILL.md +12 -0
  261. package/.agent-src/skills/dashboard-design/SKILL.md +12 -0
  262. package/.agent-src/skills/data-flow-mapper/SKILL.md +12 -0
  263. package/.agent-src/skills/data-handling-judgment/SKILL.md +12 -2
  264. package/.agent-src/skills/database/SKILL.md +14 -2
  265. package/.agent-src/skills/dcf-modeling/SKILL.md +12 -2
  266. package/.agent-src/skills/deal-qualification-meddic/SKILL.md +12 -2
  267. package/.agent-src/skills/decision-record/SKILL.md +12 -0
  268. package/.agent-src/skills/deep-reading-analyst/SKILL.md +12 -0
  269. package/.agent-src/skills/defense-in-depth/SKILL.md +13 -1
  270. package/.agent-src/skills/dependency-upgrade/SKILL.md +12 -0
  271. package/.agent-src/skills/description-assist/SKILL.md +12 -0
  272. package/.agent-src/skills/design-review/SKILL.md +12 -0
  273. package/.agent-src/skills/devcontainer/SKILL.md +12 -0
  274. package/.agent-src/skills/developer-like-execution/SKILL.md +12 -0
  275. package/.agent-src/skills/discovery-interview/SKILL.md +12 -2
  276. package/.agent-src/skills/doc-coauthoring/SKILL.md +12 -0
  277. package/.agent-src/skills/docker/SKILL.md +12 -0
  278. package/.agent-src/skills/editorial-calendar/SKILL.md +12 -2
  279. package/.agent-src/skills/eloquent/SKILL.md +12 -0
  280. package/.agent-src/skills/eloquent/evals/triggers.json +1 -1
  281. package/.agent-src/skills/error-handling-patterns/SKILL.md +13 -1
  282. package/.agent-src/skills/estimate-ticket/SKILL.md +12 -0
  283. package/.agent-src/skills/existing-ui-audit/SKILL.md +12 -0
  284. package/.agent-src/skills/expansion-playbook/SKILL.md +12 -0
  285. package/.agent-src/skills/fe-design/SKILL.md +12 -0
  286. package/.agent-src/skills/feature-planning/SKILL.md +12 -0
  287. package/.agent-src/skills/file-editor/SKILL.md +12 -0
  288. package/.agent-src/skills/finishing-a-development-branch/SKILL.md +12 -0
  289. package/.agent-src/skills/flux/SKILL.md +12 -0
  290. package/.agent-src/skills/forecast-accuracy/SKILL.md +12 -2
  291. package/.agent-src/skills/forecasting/SKILL.md +12 -2
  292. package/.agent-src/skills/form-handler/SKILL.md +12 -0
  293. package/.agent-src/skills/fundraising-narrative/SKILL.md +12 -2
  294. package/.agent-src/skills/funnel-analysis/SKILL.md +12 -0
  295. package/.agent-src/skills/git-workflow/SKILL.md +12 -0
  296. package/.agent-src/skills/github-ci/SKILL.md +12 -0
  297. package/.agent-src/skills/grafana/SKILL.md +12 -0
  298. package/.agent-src/skills/gtm-launch/SKILL.md +12 -2
  299. package/.agent-src/skills/guideline-writing/SKILL.md +12 -0
  300. package/.agent-src/skills/hiring-loop-design/SKILL.md +12 -0
  301. package/.agent-src/skills/incident-commander/SKILL.md +12 -2
  302. package/.agent-src/skills/jira-integration/SKILL.md +12 -0
  303. package/.agent-src/skills/jobs-events/SKILL.md +12 -0
  304. package/.agent-src/skills/judge-bug-hunter/SKILL.md +12 -0
  305. package/.agent-src/skills/judge-code-quality/SKILL.md +12 -0
  306. package/.agent-src/skills/judge-security-auditor/SKILL.md +12 -0
  307. package/.agent-src/skills/judge-test-coverage/SKILL.md +12 -0
  308. package/.agent-src/skills/laravel/SKILL.md +12 -0
  309. package/.agent-src/skills/laravel-api-endpoint/SKILL.md +15 -3
  310. package/.agent-src/skills/laravel-dto/SKILL.md +14 -2
  311. package/.agent-src/skills/laravel-horizon/SKILL.md +12 -0
  312. package/.agent-src/skills/laravel-mail/SKILL.md +12 -0
  313. package/.agent-src/skills/laravel-middleware/SKILL.md +12 -0
  314. package/.agent-src/skills/laravel-migration/SKILL.md +12 -0
  315. package/.agent-src/skills/laravel-notifications/SKILL.md +12 -0
  316. package/.agent-src/skills/laravel-pennant/SKILL.md +12 -0
  317. package/.agent-src/skills/laravel-pulse/SKILL.md +12 -0
  318. package/.agent-src/skills/laravel-reverb/SKILL.md +12 -0
  319. package/.agent-src/skills/laravel-scheduling/SKILL.md +12 -0
  320. package/.agent-src/skills/laravel-validation/SKILL.md +12 -0
  321. package/.agent-src/skills/laravel-websocket/SKILL.md +12 -0
  322. package/.agent-src/skills/launch-readiness/SKILL.md +12 -2
  323. package/.agent-src/skills/learning-to-rule-or-skill/SKILL.md +15 -3
  324. package/.agent-src/skills/lint-skills/SKILL.md +12 -0
  325. package/.agent-src/skills/livewire/SKILL.md +12 -0
  326. package/.agent-src/skills/livewire-architect/SKILL.md +12 -0
  327. package/.agent-src/skills/logging-monitoring/SKILL.md +12 -0
  328. package/.agent-src/skills/market-entry-analysis/SKILL.md +12 -0
  329. package/.agent-src/skills/markitdown/SKILL.md +14 -2
  330. package/.agent-src/skills/mcp/SKILL.md +12 -0
  331. package/.agent-src/skills/mcp-builder/SKILL.md +14 -2
  332. package/.agent-src/skills/md-language-check/SKILL.md +13 -1
  333. package/.agent-src/skills/memory-consolidation/SKILL.md +12 -0
  334. package/.agent-src/skills/merge-conflicts/SKILL.md +12 -0
  335. package/.agent-src/skills/messaging-architecture/SKILL.md +12 -2
  336. package/.agent-src/skills/migration-architect/SKILL.md +12 -0
  337. package/.agent-src/skills/mobile-e2e-strategy/SKILL.md +12 -0
  338. package/.agent-src/skills/module-management/SKILL.md +12 -0
  339. package/.agent-src/skills/motion-choreographer/SKILL.md +16 -4
  340. package/.agent-src/skills/multi-tenancy/SKILL.md +14 -2
  341. package/.agent-src/skills/nextjs-patterns/SKILL.md +12 -0
  342. package/.agent-src/skills/okr-tree-modeling/SKILL.md +12 -2
  343. package/.agent-src/skills/onboarding-design/SKILL.md +12 -0
  344. package/.agent-src/skills/onboarding-program/SKILL.md +12 -0
  345. package/.agent-src/skills/one-on-one-cadence/SKILL.md +12 -0
  346. package/.agent-src/skills/openapi/SKILL.md +13 -1
  347. package/.agent-src/skills/org-design/SKILL.md +12 -0
  348. package/.agent-src/skills/override-management/SKILL.md +12 -0
  349. package/.agent-src/skills/perf-feedback-craft/SKILL.md +12 -0
  350. package/.agent-src/skills/performance/SKILL.md +12 -0
  351. package/.agent-src/skills/performance-analysis/SKILL.md +12 -0
  352. package/.agent-src/skills/persona-writing/SKILL.md +12 -0
  353. package/.agent-src/skills/pest-testing/SKILL.md +12 -0
  354. package/.agent-src/skills/php-coder/SKILL.md +12 -0
  355. package/.agent-src/skills/php-debugging/SKILL.md +12 -0
  356. package/.agent-src/skills/php-service/SKILL.md +12 -0
  357. package/.agent-src/skills/pipeline-strategy/SKILL.md +12 -2
  358. package/.agent-src/skills/pixar-storyteller/SKILL.md +17 -5
  359. package/.agent-src/skills/playwright-architect/SKILL.md +12 -2
  360. package/.agent-src/skills/playwright-testing/SKILL.md +12 -0
  361. package/.agent-src/skills/po-discovery/SKILL.md +12 -0
  362. package/.agent-src/skills/positioning-strategy/SKILL.md +12 -0
  363. package/.agent-src/skills/privacy-review/SKILL.md +12 -2
  364. package/.agent-src/skills/project-analysis-core/SKILL.md +12 -0
  365. package/.agent-src/skills/project-analysis-hypothesis-driven/SKILL.md +12 -0
  366. package/.agent-src/skills/project-analysis-laravel/SKILL.md +12 -0
  367. package/.agent-src/skills/project-analysis-nextjs/SKILL.md +12 -0
  368. package/.agent-src/skills/project-analysis-node-express/SKILL.md +12 -0
  369. package/.agent-src/skills/project-analysis-react/SKILL.md +12 -0
  370. package/.agent-src/skills/project-analysis-symfony/SKILL.md +12 -0
  371. package/.agent-src/skills/project-analysis-zend-laminas/SKILL.md +12 -0
  372. package/.agent-src/skills/project-analyzer/SKILL.md +30 -18
  373. package/.agent-src/skills/project-docs/SKILL.md +25 -13
  374. package/.agent-src/skills/prompt-engineering-patterns/SKILL.md +13 -1
  375. package/.agent-src/skills/prompt-optimizer/SKILL.md +13 -1
  376. package/.agent-src/skills/quality-tools/SKILL.md +12 -2
  377. package/.agent-src/skills/react-native-setup/SKILL.md +12 -0
  378. package/.agent-src/skills/react-shadcn-ui/SKILL.md +12 -0
  379. package/.agent-src/skills/readme-reviewer/SKILL.md +64 -3
  380. package/.agent-src/skills/readme-writing/SKILL.md +64 -4
  381. package/.agent-src/skills/readme-writing-package/SKILL.md +60 -5
  382. package/.agent-src/skills/receiving-code-review/SKILL.md +12 -0
  383. package/.agent-src/skills/refine-prompt/SKILL.md +13 -1
  384. package/.agent-src/skills/refine-ticket/SKILL.md +14 -2
  385. package/.agent-src/skills/refine-ticket/detection-map.yml +2 -2
  386. package/.agent-src/skills/release-comms/SKILL.md +12 -2
  387. package/.agent-src/skills/repomix-packer/SKILL.md +13 -1
  388. package/.agent-src/skills/requesting-code-review/SKILL.md +12 -0
  389. package/.agent-src/skills/retention-loops/SKILL.md +12 -0
  390. package/.agent-src/skills/review-routing/SKILL.md +12 -0
  391. package/.agent-src/skills/rice-prioritization/SKILL.md +12 -0
  392. package/.agent-src/skills/risk-officer/SKILL.md +12 -0
  393. package/.agent-src/skills/roadmap-management/SKILL.md +12 -0
  394. package/.agent-src/skills/roadmap-writing/SKILL.md +12 -0
  395. package/.agent-src/skills/rtk-output-filtering/SKILL.md +12 -0
  396. package/.agent-src/skills/rule-refactor/SKILL.md +15 -3
  397. package/.agent-src/skills/rule-writing/SKILL.md +13 -1
  398. package/.agent-src/skills/runway-cognition/SKILL.md +12 -2
  399. package/.agent-src/skills/scenario-modeling/SKILL.md +12 -2
  400. package/.agent-src/skills/scene-expander/SKILL.md +18 -6
  401. package/.agent-src/skills/script-writing/SKILL.md +13 -1
  402. package/.agent-src/skills/secrets-management/SKILL.md +13 -3
  403. package/.agent-src/skills/security/SKILL.md +12 -0
  404. package/.agent-src/skills/security-audit/SKILL.md +12 -0
  405. package/.agent-src/skills/sentry-integration/SKILL.md +12 -0
  406. package/.agent-src/skills/sequential-thinking/SKILL.md +12 -0
  407. package/.agent-src/skills/skill-improvement-pipeline/SKILL.md +12 -0
  408. package/.agent-src/skills/skill-management/SKILL.md +12 -0
  409. package/.agent-src/skills/skill-reviewer/SKILL.md +12 -0
  410. package/.agent-src/skills/skill-writing/SKILL.md +12 -0
  411. package/.agent-src/skills/sql-writing/SKILL.md +12 -0
  412. package/.agent-src/skills/stakeholder-tradeoff/SKILL.md +12 -0
  413. package/.agent-src/skills/subagent-orchestration/SKILL.md +13 -1
  414. package/.agent-src/skills/symfony-workflow/SKILL.md +12 -0
  415. package/.agent-src/skills/systematic-debugging/SKILL.md +53 -0
  416. package/.agent-src/skills/tailwind-engineer/SKILL.md +12 -0
  417. package/.agent-src/skills/tech-debt-tracker/SKILL.md +12 -2
  418. package/.agent-src/skills/technical-specification/SKILL.md +12 -0
  419. package/.agent-src/skills/terraform/SKILL.md +12 -0
  420. package/.agent-src/skills/terragrunt/SKILL.md +12 -0
  421. package/.agent-src/skills/test-driven-development/SKILL.md +12 -0
  422. package/.agent-src/skills/test-performance/SKILL.md +13 -1
  423. package/.agent-src/skills/testing-anti-patterns/SKILL.md +13 -1
  424. package/.agent-src/skills/threat-modeling/SKILL.md +12 -0
  425. package/.agent-src/skills/throughput-vs-morale-tradeoff/SKILL.md +12 -0
  426. package/.agent-src/skills/token-optimizer/SKILL.md +12 -0
  427. package/.agent-src/skills/traefik/SKILL.md +12 -0
  428. package/.agent-src/skills/ui-component-architect/SKILL.md +12 -0
  429. package/.agent-src/skills/unit-economics-modeling/SKILL.md +12 -2
  430. package/.agent-src/skills/universal-project-analysis/SKILL.md +12 -0
  431. package/.agent-src/skills/upstream-contribute/SKILL.md +12 -0
  432. package/.agent-src/skills/using-git-worktrees/SKILL.md +12 -0
  433. package/.agent-src/skills/validate-feature-fit/SKILL.md +12 -0
  434. package/.agent-src/skills/verify-completion-evidence/SKILL.md +12 -0
  435. package/.agent-src/skills/video-director/SKILL.md +18 -6
  436. package/.agent-src/skills/vision-articulation/SKILL.md +12 -0
  437. package/.agent-src/skills/voc-extract/SKILL.md +12 -2
  438. package/.agent-src/skills/voice-and-tone-design/SKILL.md +12 -2
  439. package/.agent-src/templates/agent-settings.md +5 -5
  440. package/.agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  441. package/.agent-src/templates/agents/memory/ownership.example.yml +1 -1
  442. package/.agent-src/templates/agents/proposal.example.md +12 -0
  443. package/.agent-src/templates/command.md +1 -1
  444. package/.agent-src/templates/contexts/auth-model.md +2 -2
  445. package/.agent-src/templates/contexts/data-sensitivity.md +3 -3
  446. package/.agent-src/templates/contexts/deployment-order.md +2 -2
  447. package/.agent-src/templates/contexts/observability.md +3 -3
  448. package/.agent-src/templates/contexts/tenant-boundaries.md +3 -3
  449. package/.agent-src/templates/contexts.md +1 -1
  450. package/.agent-src/templates/hooks/pre-commit-frontmatter +66 -0
  451. package/.agent-src/templates/hooks/pre-commit-roadmap-progress +78 -39
  452. package/.agent-src/templates/rule.md +1 -1
  453. package/.agent-src/templates/scripts/work_engine/_lib/agent_settings.py +7 -4
  454. package/.agent-src/templates/scripts/work_engine/cli.py +6 -6
  455. package/.agent-src/templates/scripts/work_engine/emitters.py +29 -4
  456. package/.agent-src/templates/scripts/work_engine/hooks/builtin/decision_trace.py +3 -3
  457. package/.agent-src/templates/scripts/work_engine/orchestration.py +25 -11
  458. package/.agent-src/templates/scripts/work_engine/state.py +53 -0
  459. package/.agent-src/templates/skill-archive-note.md +4 -4
  460. package/.claude-plugin/marketplace.json +2 -2
  461. package/AGENTS.md +12 -9
  462. package/CHANGELOG.md +268 -90
  463. package/CONTRIBUTING.md +61 -0
  464. package/README.md +173 -558
  465. package/config/agent-settings.template.yml +11 -8
  466. package/config/discovery/packs.yml +162 -0
  467. package/config/discovery/unassigned-artefacts.yml +68 -0
  468. package/config/discovery/workspaces.yml +59 -0
  469. package/config/gitignore-block.txt +36 -23
  470. package/dist/cli/agent-config.js +199 -0
  471. package/dist/cli/agent-config.js.map +1 -0
  472. package/dist/cli/bash/runBash.js +40 -0
  473. package/dist/cli/bash/runBash.js.map +1 -0
  474. package/dist/cli/commands/doctorShell.js +91 -0
  475. package/dist/cli/commands/doctorShell.js.map +1 -0
  476. package/dist/cli/commands/packs.js +59 -0
  477. package/dist/cli/commands/packs.js.map +1 -0
  478. package/dist/cli/commands/settings.js +35 -0
  479. package/dist/cli/commands/settings.js.map +1 -0
  480. package/dist/cli/commands/uiServe.js +119 -0
  481. package/dist/cli/commands/uiServe.js.map +1 -0
  482. package/dist/cli/commands/versions.js +64 -0
  483. package/dist/cli/commands/versions.js.map +1 -0
  484. package/dist/cli/commands/workspaces.js +58 -0
  485. package/dist/cli/commands/workspaces.js.map +1 -0
  486. package/dist/cli/discovery/loadManifest.js +62 -0
  487. package/dist/cli/discovery/loadManifest.js.map +1 -0
  488. package/dist/cli/log/logger.js +41 -0
  489. package/dist/cli/log/logger.js.map +1 -0
  490. package/dist/cli/paths.js +60 -0
  491. package/dist/cli/paths.js.map +1 -0
  492. package/dist/cli/python/resolvePython.js +38 -0
  493. package/dist/cli/python/resolvePython.js.map +1 -0
  494. package/dist/cli/registry.js +77 -0
  495. package/dist/cli/registry.js.map +1 -0
  496. package/dist/discovery/deprecation-report.md +7 -0
  497. package/dist/discovery/discovery-manifest.json +9893 -0
  498. package/dist/discovery/discovery-manifest.json.sha256 +1 -0
  499. package/dist/discovery/discovery-manifest.summary.md +93 -0
  500. package/dist/discovery/orphan-report.md +10 -0
  501. package/dist/discovery/packs.json +1002 -0
  502. package/dist/discovery/trust-report.md +26 -0
  503. package/dist/discovery/workspaces.json +705 -0
  504. package/dist/mcp/awesome-mcp-servers.row.md +1 -0
  505. package/dist/mcp/mcp-cloudflare-catalogue.json +27 -0
  506. package/dist/mcp/registry-manifest.json +63 -0
  507. package/dist/router.json +1623 -0
  508. package/dist/server/app.js +125 -0
  509. package/dist/server/app.js.map +1 -0
  510. package/dist/server/io/atomicMultiWrite.js +204 -0
  511. package/dist/server/io/atomicMultiWrite.js.map +1 -0
  512. package/dist/server/io/atomicWrite.js +79 -0
  513. package/dist/server/io/atomicWrite.js.map +1 -0
  514. package/dist/server/io/substituteTemplate.js +87 -0
  515. package/dist/server/io/substituteTemplate.js.map +1 -0
  516. package/dist/server/io/yamlIO.js +162 -0
  517. package/dist/server/io/yamlIO.js.map +1 -0
  518. package/dist/server/port.js +97 -0
  519. package/dist/server/port.js.map +1 -0
  520. package/dist/server/routes/discovery.js +72 -0
  521. package/dist/server/routes/discovery.js.map +1 -0
  522. package/dist/server/routes/ping.js +57 -0
  523. package/dist/server/routes/ping.js.map +1 -0
  524. package/dist/server/routes/schema.js +41 -0
  525. package/dist/server/routes/schema.js.map +1 -0
  526. package/dist/server/routes/settings.js +236 -0
  527. package/dist/server/routes/settings.js.map +1 -0
  528. package/dist/server/routes/userMd.js +127 -0
  529. package/dist/server/routes/userMd.js.map +1 -0
  530. package/dist/server/routes/wizard.js +374 -0
  531. package/dist/server/routes/wizard.js.map +1 -0
  532. package/dist/server/schemas/settings.js +137 -0
  533. package/dist/server/schemas/settings.js.map +1 -0
  534. package/dist/server/token.js +75 -0
  535. package/dist/server/token.js.map +1 -0
  536. package/dist/server/writeRoot.js +84 -0
  537. package/dist/server/writeRoot.js.map +1 -0
  538. package/dist/server/writeRoot.test.js +91 -0
  539. package/dist/server/writeRoot.test.js.map +1 -0
  540. package/dist/shared/userMd/formAdapter.js +83 -0
  541. package/dist/shared/userMd/formAdapter.js.map +1 -0
  542. package/dist/shared/userMd/schema.js +46 -0
  543. package/dist/shared/userMd/schema.js.map +1 -0
  544. package/dist/shared/userMd/utils.js +88 -0
  545. package/dist/shared/userMd/utils.js.map +1 -0
  546. package/dist/ui/assets/index-D-DY1ywI.js +35 -0
  547. package/dist/ui/assets/index-D-DY1ywI.js.map +1 -0
  548. package/dist/ui/assets/index-Dqfhmg-d.css +1 -0
  549. package/dist/ui/index.html +14 -0
  550. package/docs/adrs/caveman/0001-default-off-until-bench.md +2 -2
  551. package/docs/adrs/cost/0001-hard-stop-hook.md +1 -1
  552. package/docs/adrs/router/0001-three-tier-routing.md +5 -5
  553. package/docs/adrs/schema/0001-json-schema-frontmatter.md +4 -4
  554. package/docs/adrs/schema/README.md +1 -1
  555. package/docs/adrs/smoke/0001-per-tier-smoke-scripts.md +3 -3
  556. package/docs/architecture/setup-vs-settings-shared-surface.md +114 -0
  557. package/docs/architecture.md +3 -2
  558. package/docs/archive/CHANGELOG-pre-2.2.0.md +7 -7
  559. package/docs/archive/CHANGELOG-pre-3.0.0.md +130 -0
  560. package/docs/archive/CHANGELOG-pre-3.1.0.md +167 -0
  561. package/docs/catalog.md +92 -100
  562. package/docs/contracts/CHANGELOG-conventions.md +1 -1
  563. package/docs/contracts/STABILITY.md +1 -1
  564. package/docs/contracts/adr-architectural-consensus-mechanism.md +5 -5
  565. package/docs/contracts/adr-chat-history-split.md +1 -1
  566. package/docs/contracts/adr-implement-ticket-runtime.md +1 -1
  567. package/docs/contracts/adr-install-user-type-axis.md +1 -1
  568. package/docs/contracts/adr-mcp-runtime.md +2 -2
  569. package/docs/contracts/agent-user-schema.md +17 -11
  570. package/docs/contracts/ai-council-config.md +13 -13
  571. package/docs/contracts/audit-log-v1.md +2 -2
  572. package/docs/contracts/command-clusters.md +2 -2
  573. package/docs/contracts/compression-default-kill-criterion.md +3 -3
  574. package/docs/contracts/consumer-bridge.md +79 -0
  575. package/docs/contracts/decision-trace-v1.md +5 -5
  576. package/docs/contracts/discovery-manifest.md +209 -0
  577. package/docs/contracts/discovery-manifest.schema.json +219 -0
  578. package/docs/contracts/explain-trace.schema.json +144 -0
  579. package/docs/contracts/file-ownership-matrix.json +288 -328
  580. package/docs/contracts/file-ownership-matrix.md +1 -1
  581. package/docs/contracts/frontmatter-contract.md +140 -0
  582. package/docs/contracts/ghostwriter-schema.md +3 -3
  583. package/docs/contracts/gui-wizard.md +223 -0
  584. package/docs/contracts/hook-architecture-v1.md +10 -10
  585. package/docs/contracts/installer-agent-mode.md +137 -0
  586. package/docs/contracts/kernel-membership.md +5 -5
  587. package/docs/contracts/linter-structural-model.md +3 -3
  588. package/docs/contracts/load-context-schema.md +5 -5
  589. package/docs/contracts/local-server-api.md +134 -0
  590. package/docs/contracts/low-impact-corpus-format.md +1 -1
  591. package/docs/contracts/mcp-cloud-scope.md +2 -2
  592. package/docs/contracts/mcp-discovery-phase-notice.md +1 -1
  593. package/docs/contracts/mcp-phase-1-scope.md +5 -4
  594. package/docs/contracts/mcp-registry-manifest.schema.json +129 -0
  595. package/docs/contracts/mcp-tool-inventory.md +9 -9
  596. package/docs/contracts/mcp-tool-stub-envelope.md +1 -1
  597. package/docs/contracts/memory-visibility-v1.md +2 -2
  598. package/docs/contracts/multi-tool-projection-fidelity.md +3 -3
  599. package/docs/contracts/namespace.md +7 -7
  600. package/docs/contracts/one-off-script-lifecycle.md +1 -1
  601. package/docs/contracts/package-self-orientation.md +1 -1
  602. package/docs/contracts/provider-lifecycle.md +7 -7
  603. package/docs/contracts/router-blending.md +1 -1
  604. package/docs/contracts/rule-classification.md +2 -2
  605. package/docs/contracts/rule-router.md +4 -4
  606. package/docs/contracts/settings-api.md +207 -0
  607. package/docs/contracts/settings-gui-agent-mode.schema.json +128 -0
  608. package/docs/contracts/smoke-contracts.md +3 -3
  609. package/docs/contracts/tier-3-contrib-plugin.md +1 -1
  610. package/docs/contracts/trust-and-safety.md +144 -0
  611. package/docs/contracts/universal-skills.md +1 -1
  612. package/docs/contracts/write-engine.md +1 -1
  613. package/docs/customization.md +139 -13
  614. package/docs/decisions/ADR-001-kernel-swap-deferred.md +1 -1
  615. package/docs/decisions/ADR-002-kernel-bucket-overrides.md +1 -1
  616. package/docs/decisions/ADR-004-rule-governance-pruning.md +8 -8
  617. package/docs/decisions/ADR-006-skill-tools-python-pilot.md +5 -5
  618. package/docs/decisions/ADR-007-agent-discovery-scopes.md +16 -4
  619. package/docs/decisions/ADR-008-installed-tools-manifest.md +2 -2
  620. package/docs/decisions/ADR-010-profile-pack-preset-boundary.md +2 -2
  621. package/docs/decisions/ADR-011-domain-pack-readiness.md +4 -4
  622. package/docs/decisions/ADR-012-typescript-cli-shell.md +162 -0
  623. package/docs/decisions/ADR-013-discovery-frontmatter-contract.md +234 -0
  624. package/docs/decisions/ADR-014-gui-framework-choice.md +136 -0
  625. package/docs/decisions/ADR-015-discovery-manifest-contract.md +146 -0
  626. package/docs/decisions/ADR-016-installer-architecture.md +189 -0
  627. package/docs/decisions/ADR-017-monorepo-physical-layout.md +261 -0
  628. package/docs/decisions/ADR-018-trust-and-safety-layer.md +159 -0
  629. package/docs/decisions/ADR-019-router-json-dist-location.md +124 -0
  630. package/docs/decisions/ADR-020-global-only-consumer-scope.md +123 -0
  631. package/docs/decisions/ADR-021-deployment-shape.md +153 -0
  632. package/docs/decisions/ADR-rule-kernel-and-router.md +2 -2
  633. package/docs/decisions/INDEX.md +10 -0
  634. package/docs/deploy/connector-setup.md +129 -0
  635. package/docs/deploy/env-vars.md +70 -0
  636. package/docs/deploy/policy-cookbook.md +130 -0
  637. package/docs/deploy/quickstart.md +112 -0
  638. package/docs/distribution/mcp-submission-checklist.md +95 -0
  639. package/docs/distribution/public-install-smoke.md +68 -0
  640. package/docs/distribution/registries.md +55 -0
  641. package/docs/distribution/telemetry-privacy.md +128 -0
  642. package/docs/distribution/telemetry-schema.md +174 -0
  643. package/docs/distribution/topics-equivalents-decay-policy.md +51 -0
  644. package/docs/examples/agent-user.example.md +3 -1
  645. package/docs/featured-skills.md +95 -0
  646. package/docs/getting-started-by-role.md +19 -1
  647. package/docs/getting-started.md +5 -4
  648. package/docs/guidelines/agent-infra/ask-when-uncertain-demos.md +1 -1
  649. package/docs/guidelines/agent-infra/installed-tools-manifest.md +11 -8
  650. package/docs/guidelines/agent-infra/roadmap-progress-mechanics.md +10 -1
  651. package/docs/guidelines/agent-infra/rule-type-governance.md +2 -2
  652. package/docs/guidelines/agent-infra/tool-integration.md +1 -1
  653. package/docs/guidelines/docs/readme-size-and-splitting.md +53 -1
  654. package/docs/guidelines/php/api-design.md +1 -1
  655. package/docs/guidelines/prompt-templates.md +2 -2
  656. package/docs/hook-payload-capture.md +3 -3
  657. package/docs/installation.md +39 -18
  658. package/docs/maintainers/dev-mode.md +105 -0
  659. package/docs/migrations/commands-1.15.0.md +3 -3
  660. package/docs/parity/bench-ruflo.json +1 -1
  661. package/docs/parity/ruflo.md +3 -3
  662. package/docs/profiles.md +1 -1
  663. package/docs/quality.md +2 -2
  664. package/docs/recruits/_template.md +3 -3
  665. package/docs/setup/enterprise-and-offline.md +3 -3
  666. package/docs/setup/mcp-server-docker.md +5 -3
  667. package/docs/setup/per-ide/claude-desktop.md +3 -2
  668. package/docs/skills-catalog.md +62 -18
  669. package/docs/wizard.md +156 -0
  670. package/llms.txt +61 -17
  671. package/package.json +63 -3
  672. package/scripts/__pycache__/validate_frontmatter.cpython-312.pyc +0 -0
  673. package/scripts/_archive/README.md +2 -2
  674. package/scripts/_archive/_p4_migrate.py +1 -1
  675. package/scripts/_cli/cmd_doctor.py +155 -7
  676. package/scripts/_cli/cmd_explain.py +108 -3
  677. package/scripts/_cli/cmd_migrate.py +2 -2
  678. package/scripts/_cli/cmd_migrate_to_global.py +415 -0
  679. package/scripts/_cli/cmd_settings_migrate.py +146 -0
  680. package/scripts/_cli/explain_last/__init__.py +122 -0
  681. package/scripts/_cli/explain_last/assumptions.py +59 -0
  682. package/scripts/_cli/explain_last/council.py +105 -0
  683. package/scripts/_cli/explain_last/halt.py +44 -0
  684. package/scripts/_cli/explain_last/inputs.py +125 -0
  685. package/scripts/_cli/explain_last/memory.py +94 -0
  686. package/scripts/_cli/explain_last/provider.py +52 -0
  687. package/scripts/_cli/explain_last/render.py +52 -0
  688. package/scripts/_cli/explain_last/route.py +59 -0
  689. package/scripts/_cli/explain_last/scrubber.py +105 -0
  690. package/scripts/_cli/explain_last/sections/__init__.py +35 -0
  691. package/scripts/_cli/explain_last/sections/assumptions.py +21 -0
  692. package/scripts/_cli/explain_last/sections/council.py +27 -0
  693. package/scripts/_cli/explain_last/sections/halt.py +31 -0
  694. package/scripts/_cli/explain_last/sections/header.py +24 -0
  695. package/scripts/_cli/explain_last/sections/inputs.py +27 -0
  696. package/scripts/_cli/explain_last/sections/memory.py +21 -0
  697. package/scripts/_cli/explain_last/sections/pack.py +16 -0
  698. package/scripts/_cli/explain_last/sections/provider.py +26 -0
  699. package/scripts/_cli/explain_last/sections/route.py +22 -0
  700. package/scripts/_cli/explain_last/state_loader.py +76 -0
  701. package/scripts/_dispatch.bash +987 -0
  702. package/scripts/_lib/__pycache__/__init__.cpython-312.pyc +0 -0
  703. package/scripts/_lib/__pycache__/agent_src.cpython-312.pyc +0 -0
  704. package/scripts/_lib/agent_settings.py +7 -4
  705. package/scripts/_lib/agent_src.py +157 -0
  706. package/scripts/_lib/agents_overlay.py +3 -3
  707. package/scripts/_phase4_bucket.py +210 -0
  708. package/scripts/agent-config +50 -947
  709. package/scripts/ai-video/adapters/higgsfield.sh +1 -1
  710. package/scripts/ai-video/adapters/sora.sh +1 -1
  711. package/scripts/ai-video/test-pipeline.sh +2 -2
  712. package/scripts/ai_council/_default_prices.py +5 -5
  713. package/scripts/ai_council/advisors.py +1 -1
  714. package/scripts/ai_council/clients.py +2 -2
  715. package/scripts/ai_council/compile_corpus.py +9 -8
  716. package/scripts/ai_council/config.py +3 -3
  717. package/scripts/ai_council/events_log.py +8 -4
  718. package/scripts/ai_council/low_impact_corpus.py +1 -1
  719. package/scripts/ai_council/low_impact_intake.py +1 -1
  720. package/scripts/ai_council/one_off_archive/2026-05/_one_off_budget_v2_audit.py +2 -2
  721. package/scripts/ai_council/one_off_archive/2026-05/_one_off_structural_optimization.py +1 -1
  722. package/scripts/ai_council/one_off_archive/2026-05/_one_off_tier_retrofit.py +3 -3
  723. package/scripts/ai_council/pricing.py +8 -7
  724. package/scripts/ai_council/probation_gate.py +1 -1
  725. package/scripts/ai_council/redact_low_impact_entry.py +1 -1
  726. package/scripts/ai_council/session.py +13 -13
  727. package/scripts/ai_council/shadow_dispatch.py +2 -2
  728. package/scripts/annotate_discovery.py +149 -0
  729. package/scripts/audit_adr_coverage.py +1 -1
  730. package/scripts/audit_auto_rules.py +2 -2
  731. package/scripts/audit_cloud_compatibility.py +1 -1
  732. package/scripts/audit_command_surface.py +2 -2
  733. package/scripts/audit_likelihood.py +4 -4
  734. package/scripts/audit_overlap.py +3 -3
  735. package/scripts/audit_skill_descriptions.py +18 -6
  736. package/scripts/audit_user_type_axis.py +1 -1
  737. package/scripts/build_discovery_manifest.py +658 -0
  738. package/scripts/build_mcp_registry_manifest.py +181 -0
  739. package/scripts/build_rule_trigger_matrix.py +2 -2
  740. package/scripts/capture_showcase_session.py +1 -1
  741. package/scripts/chat_history.py +5 -5
  742. package/scripts/check_always_budget.py +7 -2
  743. package/scripts/check_artefact_checksums.py +104 -0
  744. package/scripts/check_cluster_patterns.py +20 -4
  745. package/scripts/check_command_count_messaging.py +33 -14
  746. package/scripts/check_council_layout.py +26 -20
  747. package/scripts/check_council_references.py +53 -14
  748. package/scripts/check_discovery_determinism.py +70 -0
  749. package/scripts/check_kernel_rule_bundle.py +2 -2
  750. package/scripts/check_no_roadmap_refs.py +2 -2
  751. package/scripts/check_one_off_location.py +1 -1
  752. package/scripts/check_overlay_cascade_subdirs.py +7 -3
  753. package/scripts/check_public_links.py +2 -2
  754. package/scripts/check_references.py +19 -23
  755. package/scripts/check_release_includes_discovery.py +61 -0
  756. package/scripts/check_reply_consistency.py +32 -9
  757. package/scripts/check_template_pin_drift.py +24 -7
  758. package/scripts/check_token_optimizer_freshness.py +18 -3
  759. package/scripts/ci_summary.py +2 -2
  760. package/scripts/ci_time_ratio.py +1 -1
  761. package/scripts/command_suggester/__init__.py +1 -1
  762. package/scripts/compile_router.py +34 -2
  763. package/scripts/compress.py +162 -44
  764. package/scripts/config/presets.py +19 -1
  765. package/scripts/config/profiles.py +16 -1
  766. package/scripts/context_hygiene_hook.py +2 -2
  767. package/scripts/council_cli.py +22 -22
  768. package/scripts/council_prune.py +3 -3
  769. package/scripts/discovery_stats.py +70 -0
  770. package/scripts/expected_perms.json +47 -0
  771. package/scripts/extract_audit_patterns.py +2 -2
  772. package/scripts/gen_discovery_baseline.py +127 -0
  773. package/scripts/generate_index.py +78 -46
  774. package/scripts/generate_ownership_matrix.py +99 -44
  775. package/scripts/generate_pack_manifests.py +183 -0
  776. package/scripts/hook_manifest.yaml +5 -5
  777. package/scripts/hooks/cline-dispatcher.sh +1 -1
  778. package/scripts/hooks/cowork-dispatcher.sh +1 -1
  779. package/scripts/hooks/dispatch_hook.py +3 -3
  780. package/scripts/hooks/gemini-dispatcher.sh +1 -1
  781. package/scripts/hooks/replay_hook.py +1 -1
  782. package/scripts/hooks/state_io.py +5 -5
  783. package/scripts/hooks_doctor.py +4 -4
  784. package/scripts/install +18 -1
  785. package/scripts/install-hooks.sh +2 -2
  786. package/scripts/install.py +937 -62
  787. package/scripts/install.sh +147 -27
  788. package/scripts/inventory_frontmatter.py +1 -1
  789. package/scripts/lint_agents_layout.py +183 -0
  790. package/scripts/lint_agents_md.py +1 -1
  791. package/scripts/lint_archived_skills.py +35 -19
  792. package/scripts/lint_artefact_frontmatter.py +180 -0
  793. package/scripts/lint_bench_corpus.py +14 -2
  794. package/scripts/lint_command_tiers.py +15 -2
  795. package/scripts/lint_discovery_manifest.py +136 -0
  796. package/scripts/lint_discovery_vocabulary.py +148 -0
  797. package/scripts/lint_explain_trace.py +80 -0
  798. package/scripts/lint_featured_skills.py +139 -0
  799. package/scripts/lint_framework_leakage.py +33 -6
  800. package/scripts/lint_framework_leakage_allowlist.json +63 -62
  801. package/scripts/lint_ghostwriter_source.py +1 -1
  802. package/scripts/lint_global_paths.py +147 -0
  803. package/scripts/lint_load_context.py +3 -3
  804. package/scripts/lint_mcp_registry_manifest.py +69 -0
  805. package/scripts/lint_media_policy_linkage.py +6 -6
  806. package/scripts/lint_orchestration_dsl.py +6 -3
  807. package/scripts/lint_pack_boundaries.py +147 -0
  808. package/scripts/lint_pack_first_win.py +103 -0
  809. package/scripts/lint_positioning.py +143 -0
  810. package/scripts/lint_readme_jargon.py +131 -0
  811. package/scripts/lint_readme_size.py +33 -0
  812. package/scripts/lint_rule_interactions.py +23 -5
  813. package/scripts/lint_rule_tiers.py +14 -5
  814. package/scripts/lint_skill_tools.py +1 -1
  815. package/scripts/lint_topics_yaml.py +89 -0
  816. package/scripts/lint_trust_coherence.py +212 -0
  817. package/scripts/mcp_server/consumer_tool_catalog.json +3 -3
  818. package/scripts/mcp_server/telemetry.py +2 -2
  819. package/scripts/mcp_server/tools.py +27 -11
  820. package/scripts/mcp_telemetry_health.py +2 -2
  821. package/scripts/mcp_telemetry_store.py +1 -1
  822. package/scripts/measure_augment_budget.py +3 -3
  823. package/scripts/measure_density.py +2 -2
  824. package/scripts/measure_frugality_savings.py +3 -3
  825. package/scripts/measure_roadmap_trajectory.py +1 -1
  826. package/scripts/measure_rule_budget.py +25 -7
  827. package/scripts/memory_report.py +1 -1
  828. package/scripts/migrate_command_suggestions.py +3 -3
  829. package/scripts/minimal_safe_diff_hook.py +1 -1
  830. package/scripts/move_artefact.py +143 -0
  831. package/scripts/new_skill.py +148 -0
  832. package/scripts/onboarding_gate_hook.py +4 -4
  833. package/scripts/plan_physical_move.py +353 -0
  834. package/scripts/prepack-check.mjs +62 -0
  835. package/scripts/probe_projection_fidelity.py +2 -2
  836. package/scripts/refine_ticket_detect.py +31 -8
  837. package/scripts/schemas/command.schema.json +45 -1
  838. package/scripts/schemas/persona.schema.json +1 -1
  839. package/scripts/schemas/rule.schema.json +44 -4
  840. package/scripts/schemas/skill.schema.json +41 -1
  841. package/scripts/score_skill_selection.py +1 -1
  842. package/scripts/skill_collision_clusters.py +1 -1
  843. package/scripts/skill_linter.py +250 -120
  844. package/scripts/skill_overlap.py +1 -1
  845. package/scripts/skill_tools/run_block_d_eval.py +1 -1
  846. package/scripts/skill_trigger_eval.py +28 -8
  847. package/scripts/skill_usage_collect.py +3 -3
  848. package/scripts/skill_usage_report.py +3 -3
  849. package/scripts/smoke/kernel.sh +1 -1
  850. package/scripts/smoke/router.sh +24 -5
  851. package/scripts/smoke/skills.sh +15 -7
  852. package/scripts/smoke_quickstart.py +12 -3
  853. package/scripts/snapshot_agent_outputs.py +144 -0
  854. package/scripts/spotcheck_thin_root.py +1 -1
  855. package/scripts/sync_github_metadata.py +147 -0
  856. package/scripts/sync_gitignore.py +15 -5
  857. package/scripts/update_counts.py +45 -17
  858. package/scripts/update_prices.py +4 -3
  859. package/scripts/validate_decision_engine.py +9 -1
  860. package/scripts/validate_discovery_manifest.py +94 -0
  861. package/scripts/validate_frontmatter.py +39 -20
  862. package/scripts/verify_before_complete_hook.py +1 -1
  863. package/scripts/verify_physical_move.py +185 -0
  864. package/scripts/verify_roadmap_closure.py +1 -1
  865. package/templates/agent-user.md +34 -0
  866. package/templates/agent-user.yml +21 -0
  867. package/templates/minimal/agents-overrides-readme.md +46 -0
  868. package/templates/minimal/overrides-gitkeep +2 -0
  869. package/.agent-src/commands/onboard.md +0 -467
  870. package/templates/minimal/agents-gitkeep +0 -2
@@ -0,0 +1,415 @@
1
+ """``agent-config migrate-to-global`` — one-shot legacy → global migration.
2
+
3
+ Phase 5.1 + 5.3 + 5.5 of ``agents/roadmaps/road-to-global-only-install.md``.
4
+ Lifts a v2.x global-default consumer onto the v2.x global-only surface
5
+ (ADR-020).
6
+
7
+ **Order (per A2)**: ``copy → verify → move → bridge`` — never the inverse.
8
+
9
+ 1. **Gate** — run ``scripts/lint_global_paths.py`` first; any finding aborts
10
+ before a single byte is written. Once ``.legacy-pre-global-only/`` is on
11
+ disk, a perms leak cannot be un-written.
12
+ 2. **Detect** — project-local YAML settings (``.agent-settings.yml``,
13
+ ``.agent-user.yml``, optionally under ``settings/``) and tool-scope
14
+ leftover directories (``.augment/``, ``.claude/``, ``.cursor/``).
15
+ 3. **Copy** YAML values into ``~/.event4u/agent-config/``. Refuses to
16
+ overwrite a non-empty global file without ``--force``.
17
+ 4. **Verify** every global copy round-trip parses and has mode ``0600``.
18
+ 5. **Move** legacy originals into ``.legacy-pre-global-only/<stamp>/``
19
+ alongside a ``manifest.json`` recording every file moved and every
20
+ global file this migration created (used by ``--rollback``).
21
+ 6. **Bridge** — write ``agents/.event4u-bridge.yml`` last.
22
+ 7. **Summary** — single block: copied / verified / moved / skipped per file.
23
+
24
+ ``--dry-run`` lists the plan without touching disk; exit 0.
25
+ ``--rollback`` reads the latest snapshot manifest and reverses the
26
+ migration byte-identically (Phase 5.5 / A3).
27
+ """
28
+ from __future__ import annotations
29
+
30
+ import argparse
31
+ import json
32
+ import os
33
+ import shutil
34
+ import sys
35
+ from datetime import datetime, timezone
36
+ from pathlib import Path
37
+ from typing import Optional
38
+
39
+ # Filenames detected at the project root (Phase 5.1 step 1).
40
+ LEGACY_YAML_FILES: tuple[str, ...] = (".agent-settings.yml", ".agent-user.yml")
41
+ LEGACY_TOOL_DIRS: tuple[str, ...] = (".augment", ".claude", ".cursor")
42
+ SNAPSHOT_DIRNAME = ".legacy-pre-global-only"
43
+ MANIFEST_NAME = "manifest.json"
44
+
45
+
46
+ def _import_install():
47
+ here = Path(__file__).resolve().parents[2]
48
+ if str(here) not in sys.path:
49
+ sys.path.insert(0, str(here))
50
+ from scripts import install as install_mod # noqa: PLC0415
51
+ return install_mod
52
+
53
+
54
+ def _import_lint_global_paths():
55
+ here = Path(__file__).resolve().parents[2]
56
+ if str(here) not in sys.path:
57
+ sys.path.insert(0, str(here))
58
+ from scripts import lint_global_paths as lgp # noqa: PLC0415
59
+ return lgp
60
+
61
+
62
+ def _resolve_installed_version(install_mod) -> str:
63
+ """Return the current package version via the install module's lock helper."""
64
+ try:
65
+ lock_mod = install_mod._load_installed_lock_module()
66
+ return lock_mod.current_package_version()
67
+ except Exception: # noqa: BLE001 — best-effort version resolution.
68
+ return "unknown"
69
+
70
+
71
+ def _consumer_bridge_marker_abs(project: Path, install_mod) -> Path:
72
+ """Resolve ``agents/.event4u-bridge.yml`` for ``project``."""
73
+ relpath = install_mod.CONSUMER_BRIDGE_MARKER_RELPATH
74
+ return project / relpath
75
+
76
+
77
+ def _is_non_empty(path: Path) -> bool:
78
+ try:
79
+ return path.is_file() and path.read_text(encoding="utf-8").strip() != ""
80
+ except OSError:
81
+ return False
82
+
83
+
84
+ def _parse_yaml(path: Path) -> tuple[bool, str]:
85
+ try:
86
+ import yaml # type: ignore[import-not-found]
87
+ except ImportError:
88
+ return True, "" # No PyYAML available — defer validation.
89
+ try:
90
+ text = path.read_text(encoding="utf-8")
91
+ yaml.safe_load(text)
92
+ return True, ""
93
+ except (OSError, Exception) as exc: # noqa: BLE001 — argparse-style error.
94
+ return False, str(exc)
95
+
96
+
97
+ def _stamp() -> str:
98
+ return datetime.now(timezone.utc).strftime("%Y%m%dT%H%M%SZ")
99
+
100
+
101
+ def _resolve_yaml_sources(project: Path, install_mod) -> dict[str, Path]:
102
+ """Map ``.agent-settings.yml`` / ``.agent-user.yml`` to their on-disk
103
+ source — typed ``settings/`` subdir wins over the legacy flat path."""
104
+ out: dict[str, Path] = {}
105
+ for name in LEGACY_YAML_FILES:
106
+ candidate_typed = project / "settings" / name
107
+ candidate_flat = project / name
108
+ if candidate_typed.is_file():
109
+ out[name] = candidate_typed
110
+ elif candidate_flat.is_file():
111
+ out[name] = candidate_flat
112
+ return out
113
+
114
+
115
+ def _yaml_destination(install_mod, name: str) -> Path:
116
+ if name == ".agent-settings.yml":
117
+ return install_mod.GLOBAL_AGENT_SETTINGS_PATH
118
+ if name == ".agent-user.yml":
119
+ return install_mod.GLOBAL_USER_SETTINGS_PATH
120
+ raise ValueError(f"unknown YAML target: {name}")
121
+
122
+
123
+ def _copy_yaml(src: Path, dst: Path) -> None:
124
+ dst.parent.mkdir(parents=True, exist_ok=True, mode=0o700)
125
+ shutil.copy2(src, dst)
126
+ try:
127
+ os.chmod(dst, 0o600)
128
+ except OSError:
129
+ pass
130
+
131
+
132
+ def _verify_yaml(path: Path) -> tuple[bool, str]:
133
+ """Verify the global YAML copy: exists, parses, mode ``0600``."""
134
+ if not path.is_file():
135
+ return False, f"missing after copy: {path}"
136
+ ok, err = _parse_yaml(path)
137
+ if not ok:
138
+ return False, f"reparse failed: {err}"
139
+ try:
140
+ mode = path.stat().st_mode & 0o777
141
+ except OSError as exc:
142
+ return False, f"stat failed: {exc}"
143
+ if mode != 0o600:
144
+ return False, f"mode {oct(mode)} (expected 0o600)"
145
+ return True, ""
146
+
147
+
148
+ def _move_into_snapshot(src: Path, snapshot_root: Path, project: Path) -> Path:
149
+ """Move ``src`` under ``snapshot_root`` preserving project-relative layout.
150
+ Returns the new path inside the snapshot."""
151
+ rel = src.relative_to(project)
152
+ dst = snapshot_root / rel
153
+ dst.parent.mkdir(parents=True, exist_ok=True)
154
+ shutil.move(str(src), str(dst))
155
+ return dst
156
+
157
+
158
+
159
+ def _run_perms_gate(out) -> int:
160
+ """Run the Phase 5.0 entry-gate; return ``lint`` exit code."""
161
+ lgp = _import_lint_global_paths()
162
+ return lgp.lint(lgp.DEFAULT_POLICY, quiet=True)
163
+
164
+
165
+ def _build_plan(project: Path, install_mod) -> dict:
166
+ """Return a plan describing every detected legacy artefact."""
167
+ yaml_sources = _resolve_yaml_sources(project, install_mod)
168
+ yaml_plan: list[dict] = []
169
+ for name, src in yaml_sources.items():
170
+ dst = _yaml_destination(install_mod, name)
171
+ yaml_plan.append({
172
+ "name": name,
173
+ "src": str(src),
174
+ "dst": str(dst),
175
+ "global_existed_non_empty": _is_non_empty(dst),
176
+ })
177
+ dir_plan: list[dict] = []
178
+ for name in LEGACY_TOOL_DIRS:
179
+ p = project / name
180
+ if p.is_dir() and not p.is_symlink():
181
+ dir_plan.append({"name": name, "src": str(p)})
182
+ return {"yaml": yaml_plan, "dirs": dir_plan}
183
+
184
+
185
+ def _format_plan(plan: dict, dry_run: bool, out) -> None:
186
+ n_yaml = len(plan["yaml"])
187
+ n_dirs = len(plan["dirs"])
188
+ if n_yaml + n_dirs == 0:
189
+ print("✅ nothing to migrate — no legacy artefacts detected.", file=out)
190
+ return
191
+ verb = "would migrate" if dry_run else "migrating"
192
+ print(f"📦 {verb} {n_yaml} YAML file(s) + {n_dirs} directory(ies):", file=out)
193
+ for entry in plan["yaml"]:
194
+ flag = " (would overwrite)" if entry["global_existed_non_empty"] else ""
195
+ print(f" - copy {entry['src']} → {entry['dst']}{flag}", file=out)
196
+ for entry in plan["dirs"]:
197
+ print(f" - move {entry['src']} → snapshot", file=out)
198
+
199
+
200
+ def _do_migrate(project: Path, force: bool, install_mod, out) -> int:
201
+ plan = _build_plan(project, install_mod)
202
+ if not plan["yaml"] and not plan["dirs"]:
203
+ print("✅ nothing to migrate — no legacy artefacts detected.", file=out)
204
+ return 0
205
+
206
+ for entry in plan["yaml"]:
207
+ if entry["global_existed_non_empty"] and not force:
208
+ print(f"❌ {entry['dst']} is non-empty — pass --force to overwrite.",
209
+ file=sys.stderr)
210
+ return 1
211
+
212
+ for entry in plan["yaml"]:
213
+ ok, err = _parse_yaml(Path(entry["src"]))
214
+ if not ok:
215
+ print(f"❌ {entry['src']}: cannot parse as YAML: {err}",
216
+ file=sys.stderr)
217
+ return 1
218
+
219
+ # COPY
220
+ copied: list[tuple[Path, Path]] = []
221
+ for entry in plan["yaml"]:
222
+ src, dst = Path(entry["src"]), Path(entry["dst"])
223
+ _copy_yaml(src, dst)
224
+ copied.append((src, dst))
225
+
226
+ # VERIFY
227
+ for _src, dst in copied:
228
+ ok, err = _verify_yaml(dst)
229
+ if not ok:
230
+ print(f"❌ verify failed for {dst}: {err}", file=sys.stderr)
231
+ print(" aborting migration — local originals untouched.",
232
+ file=sys.stderr)
233
+ return 1
234
+
235
+ # MOVE — only after verify passes.
236
+ snapshot_root = project / SNAPSHOT_DIRNAME / _stamp()
237
+ snapshot_root.mkdir(parents=True, exist_ok=True)
238
+ moved_yaml: list[tuple[str, str]] = []
239
+ moved_dirs: list[tuple[str, str]] = []
240
+ for entry in plan["yaml"]:
241
+ src = Path(entry["src"])
242
+ if src.is_file():
243
+ dst_snap = _move_into_snapshot(src, snapshot_root, project)
244
+ moved_yaml.append((str(src), str(dst_snap)))
245
+ for entry in plan["dirs"]:
246
+ src = Path(entry["src"])
247
+ if src.is_dir():
248
+ dst_snap = _move_into_snapshot(src, snapshot_root, project)
249
+ moved_dirs.append((str(src), str(dst_snap)))
250
+
251
+ manifest = {
252
+ "schema": "event4u-migrate-snapshot/v1",
253
+ "stamp": _stamp(),
254
+ "project_root": str(project),
255
+ "global_root": str(install_mod.GLOBAL_ROOT),
256
+ "moved_yaml": moved_yaml,
257
+ "moved_dirs": moved_dirs,
258
+ "global_copies": [str(dst) for _src, dst in copied],
259
+ }
260
+ (snapshot_root / MANIFEST_NAME).write_text(
261
+ json.dumps(manifest, indent=2) + "\n", encoding="utf-8",
262
+ )
263
+
264
+ # BRIDGE (last)
265
+ version = _resolve_installed_version(install_mod)
266
+ marker = install_mod._write_consumer_bridge_marker(project, version)
267
+
268
+ print(f"✅ migrated — snapshot at {snapshot_root}", file=out)
269
+ for src, dst in copied:
270
+ print(f" - copied {src} → {dst}", file=out)
271
+ for src, dst in moved_yaml:
272
+ print(f" - moved {src} → {dst}", file=out)
273
+ for src, dst in moved_dirs:
274
+ print(f" - moved {src} → {dst}", file=out)
275
+ if marker is not None:
276
+ print(f" - bridge {marker}", file=out)
277
+ return 0
278
+
279
+
280
+
281
+ def _find_latest_snapshot(project: Path) -> Optional[Path]:
282
+ root = project / SNAPSHOT_DIRNAME
283
+ if not root.is_dir():
284
+ return None
285
+ stamps = sorted(
286
+ (p for p in root.iterdir() if p.is_dir() and (p / MANIFEST_NAME).is_file()),
287
+ key=lambda p: p.name,
288
+ )
289
+ return stamps[-1] if stamps else None
290
+
291
+
292
+ def _do_rollback(project: Path, dry_run: bool, install_mod, out) -> int:
293
+ snapshot = _find_latest_snapshot(project)
294
+ if snapshot is None:
295
+ print(f"❌ no snapshot under {project / SNAPSHOT_DIRNAME} — nothing to roll back.",
296
+ file=sys.stderr)
297
+ return 1
298
+ try:
299
+ manifest = json.loads((snapshot / MANIFEST_NAME).read_text(encoding="utf-8"))
300
+ except (OSError, json.JSONDecodeError) as exc:
301
+ print(f"❌ cannot read manifest {snapshot / MANIFEST_NAME}: {exc}",
302
+ file=sys.stderr)
303
+ return 1
304
+
305
+ moved_yaml = manifest.get("moved_yaml", [])
306
+ moved_dirs = manifest.get("moved_dirs", [])
307
+ global_copies = manifest.get("global_copies", [])
308
+
309
+ if dry_run:
310
+ print(f"🔁 would roll back from {snapshot}", file=out)
311
+ for original, snap in moved_yaml + moved_dirs:
312
+ print(f" - restore {snap} → {original}", file=out)
313
+ for path in global_copies:
314
+ print(f" - delete {path}", file=out)
315
+ print(f" - remove {_consumer_bridge_marker_abs(project, install_mod)}", file=out)
316
+ return 0
317
+
318
+ # Pre-flight: every restore target must be vacant.
319
+ for original, _snap in moved_yaml + moved_dirs:
320
+ if Path(original).exists():
321
+ print(f"❌ restore target already exists: {original}", file=sys.stderr)
322
+ print(" aborting — manual cleanup required.", file=sys.stderr)
323
+ return 1
324
+
325
+ # Restore moved originals.
326
+ for original, snap in moved_yaml + moved_dirs:
327
+ src, dst = Path(snap), Path(original)
328
+ dst.parent.mkdir(parents=True, exist_ok=True)
329
+ shutil.move(str(src), str(dst))
330
+
331
+ # Delete global copies this migration created.
332
+ for path in global_copies:
333
+ p = Path(path)
334
+ try:
335
+ if p.is_file():
336
+ p.unlink()
337
+ except OSError as exc:
338
+ print(f"⚠️ could not delete {p}: {exc}", file=sys.stderr)
339
+
340
+ # Drop the bridge marker.
341
+ marker = _consumer_bridge_marker_abs(project, install_mod)
342
+ try:
343
+ if marker.is_file():
344
+ marker.unlink()
345
+ except OSError as exc:
346
+ print(f"⚠️ could not remove bridge marker {marker}: {exc}", file=sys.stderr)
347
+
348
+ # Archive the consumed snapshot directory so a second rollback cleanly
349
+ # surfaces "no snapshot found" rather than re-restoring stale data.
350
+ consumed = snapshot.with_name(snapshot.name + ".consumed")
351
+ try:
352
+ snapshot.rename(consumed)
353
+ except OSError:
354
+ pass
355
+
356
+ print(f"✅ rolled back — originals restored, global copies removed.", file=out)
357
+ return 0
358
+
359
+
360
+ def main(argv: Optional[list[str]] = None) -> int:
361
+ parser = argparse.ArgumentParser(
362
+ prog="agent-config migrate-to-global",
363
+ description="Lift legacy project-local config into ~/.event4u/agent-config/.",
364
+ )
365
+ parser.add_argument(
366
+ "--from", dest="project", type=Path, default=Path.cwd(),
367
+ help="Project root to migrate (default: cwd).",
368
+ )
369
+ parser.add_argument(
370
+ "--dry-run", action="store_true",
371
+ help="Print the plan without touching disk.",
372
+ )
373
+ parser.add_argument(
374
+ "--force", action="store_true",
375
+ help="Overwrite non-empty global files.",
376
+ )
377
+ parser.add_argument(
378
+ "--rollback", action="store_true",
379
+ help="Reverse the latest snapshot under .legacy-pre-global-only/.",
380
+ )
381
+ parser.add_argument(
382
+ "--skip-perms-gate", action="store_true",
383
+ help="Skip the Phase 5.0 permissions audit (NOT recommended).",
384
+ )
385
+ args = parser.parse_args(argv)
386
+
387
+ project = args.project.resolve()
388
+ if not project.is_dir():
389
+ print(f"❌ not a directory: {project}", file=sys.stderr)
390
+ return 2
391
+
392
+ install_mod = _import_install()
393
+ out = sys.stdout
394
+
395
+ if args.rollback:
396
+ return _do_rollback(project, args.dry_run, install_mod, out)
397
+
398
+ if not args.skip_perms_gate:
399
+ rc = _run_perms_gate(out)
400
+ if rc != 0:
401
+ print("❌ permissions audit failed — refusing to migrate.", file=sys.stderr)
402
+ print(" run `agent-config doctor` (or `python3 scripts/lint_global_paths.py`) for details.",
403
+ file=sys.stderr)
404
+ return rc
405
+
406
+ if args.dry_run:
407
+ plan = _build_plan(project, install_mod)
408
+ _format_plan(plan, dry_run=True, out=out)
409
+ return 0
410
+
411
+ return _do_migrate(project, args.force, install_mod, out)
412
+
413
+
414
+ if __name__ == "__main__": # pragma: no cover
415
+ sys.exit(main())
@@ -0,0 +1,146 @@
1
+ """``agent-config settings:migrate`` — lift project-local settings into the global store.
2
+
3
+ Phase 2.4 of ``agents/roadmaps/road-to-global-only-install.md``. Copies
4
+ an existing project-local ``.agent-settings.yml`` / ``.agent-user.yml``
5
+ into ``~/.event4u/agent-config/`` so the global-only consumer surface
6
+ (ADR-020) can take over. Read-only on the source — the destructive
7
+ ``move`` step is owned by the Phase 5 ``migrate-to-global`` subcommand.
8
+
9
+ Idempotent — refuses to overwrite a non-empty global file without
10
+ ``--force``. ``--dry-run`` lists intended copies; zero writes; exit 0.
11
+
12
+ Exit codes:
13
+
14
+ * ``0`` — success or no-op (nothing to migrate / already migrated).
15
+ * ``1`` — at least one global file is non-empty and ``--force`` was
16
+ not passed, or a source file failed YAML parse.
17
+ """
18
+ from __future__ import annotations
19
+
20
+ import argparse
21
+ import os
22
+ import shutil
23
+ import sys
24
+ from pathlib import Path
25
+ from typing import Optional
26
+
27
+
28
+ def _import_install():
29
+ """Lazy import so ``--help`` works without the package on sys.path."""
30
+ here = Path(__file__).resolve().parents[2]
31
+ if str(here) not in sys.path:
32
+ sys.path.insert(0, str(here))
33
+ from scripts import install as install_mod # noqa: PLC0415
34
+ return install_mod
35
+
36
+
37
+ def _is_non_empty_yaml(path: Path) -> bool:
38
+ """Return True when the file exists and has non-whitespace content."""
39
+ if not path.is_file():
40
+ return False
41
+ try:
42
+ text = path.read_text(encoding="utf-8")
43
+ except OSError:
44
+ return False
45
+ return text.strip() != ""
46
+
47
+
48
+ def _parse_yaml_or_fail(path: Path, out) -> bool:
49
+ """Soft-parse a YAML file; print the error and return False on failure."""
50
+ try:
51
+ import yaml # type: ignore[import-not-found]
52
+ except ImportError:
53
+ return True # No PyYAML — defer the validation to the consumer.
54
+ try:
55
+ text = path.read_text(encoding="utf-8")
56
+ yaml.safe_load(text)
57
+ return True
58
+ except (OSError, yaml.YAMLError) as exc:
59
+ print(f"❌ {path}: cannot parse as YAML: {exc}", file=out)
60
+ return False
61
+
62
+
63
+ def _copy(src: Path, dst: Path, *, dry_run: bool, out) -> str:
64
+ """Copy `src` to `dst` with mode 0600. Returns a one-line summary."""
65
+ if dry_run:
66
+ return f"would copy {src} → {dst}"
67
+ dst.parent.mkdir(parents=True, exist_ok=True, mode=0o700)
68
+ shutil.copy2(src, dst)
69
+ try:
70
+ os.chmod(dst, 0o600)
71
+ except OSError:
72
+ pass
73
+ return f"copied {src} → {dst}"
74
+
75
+
76
+ def main(argv: Optional[list[str]] = None) -> int:
77
+ parser = argparse.ArgumentParser(
78
+ prog="agent-config settings:migrate",
79
+ description=(
80
+ "Lift project-local .agent-settings.yml / .agent-user.yml into "
81
+ "~/.event4u/agent-config/ (the global-only consumer surface)."
82
+ ),
83
+ )
84
+ parser.add_argument("--from", dest="from_dir", default=None,
85
+ help="project root to read from (default: cwd)")
86
+ parser.add_argument("--force", action="store_true",
87
+ help="overwrite a non-empty global file")
88
+ parser.add_argument("--dry-run", action="store_true",
89
+ help="list intended copies; zero writes; exit 0")
90
+ opts = parser.parse_args(argv)
91
+
92
+ install_mod = _import_install()
93
+ project = Path(opts.from_dir).resolve() if opts.from_dir else Path.cwd()
94
+
95
+ # Source candidates — typed subdir wins over the legacy flat path.
96
+ src_settings = project / "settings" / install_mod.SETTINGS_FILE
97
+ if not src_settings.is_file():
98
+ src_settings = project / install_mod.SETTINGS_FILE
99
+ src_user = project / "settings" / ".agent-user.yml"
100
+ if not src_user.is_file():
101
+ src_user = project / ".agent-user.yml"
102
+
103
+ dst_settings = install_mod.GLOBAL_AGENT_SETTINGS_PATH
104
+ dst_user = install_mod.GLOBAL_USER_SETTINGS_PATH
105
+
106
+ plan: list[tuple[Path, Path]] = []
107
+ skipped: list[str] = []
108
+
109
+ for src, dst, label in (
110
+ (src_settings, dst_settings, "settings"),
111
+ (src_user, dst_user, "user"),
112
+ ):
113
+ if not src.is_file():
114
+ skipped.append(f"{label}: source absent ({src})")
115
+ continue
116
+ if _is_non_empty_yaml(dst) and not opts.force:
117
+ print(f"❌ {dst} is non-empty — pass --force to overwrite.",
118
+ file=sys.stderr)
119
+ return 1
120
+ if not _parse_yaml_or_fail(src, sys.stderr):
121
+ return 1
122
+ plan.append((src, dst))
123
+
124
+ if not plan:
125
+ print("✅ nothing to migrate — no project-local settings detected.")
126
+ for line in skipped:
127
+ print(f" - {line}")
128
+ return 0
129
+
130
+ summary: list[str] = []
131
+ for src, dst in plan:
132
+ summary.append(_copy(src, dst, dry_run=opts.dry_run, out=sys.stdout))
133
+
134
+ verb = "would migrate" if opts.dry_run else "migrated"
135
+ print(f"✅ {verb} {len(plan)} file(s):")
136
+ for line in summary:
137
+ print(f" - {line}")
138
+ for line in skipped:
139
+ print(f" - {line}")
140
+ if opts.dry_run:
141
+ print("\n Re-run without --dry-run to apply.")
142
+ return 0
143
+
144
+
145
+ if __name__ == "__main__": # pragma: no cover
146
+ sys.exit(main())
@@ -0,0 +1,122 @@
1
+ """``agent-config explain last`` — execution-trace builder.
2
+
3
+ Phase 2 of the *Explainability v2* roadmap
4
+ (``agents/roadmaps/explainability-v2-explain-last.md``). Reads the
5
+ persisted :mod:`work_engine` state plus its sibling artefacts (council
6
+ sessions, memory hits, router snapshot) and projects them into the
7
+ versioned :data:`ExplainTrace` v1 contract documented at
8
+ ``docs/contracts/explain-trace.schema.json``.
9
+
10
+ Read-only by construction:
11
+
12
+ * never writes back to disk;
13
+ * never opens a network socket (Phase 4 enforces via ``test_no_network``);
14
+ * never raises on missing data — every slot degrades to ``null`` and the
15
+ Markdown renderer emits a ``(none)`` placeholder instead.
16
+
17
+ The public surface is :func:`build_trace`. Everything else is internal
18
+ plumbing. The CLI dispatcher lives in :mod:`scripts._cli.cmd_explain`
19
+ and is the only intended caller besides the test suite.
20
+ """
21
+ from __future__ import annotations
22
+
23
+ from datetime import datetime, timezone
24
+ from pathlib import Path
25
+ from typing import Any
26
+
27
+ from scripts._cli.explain_last import (
28
+ assumptions as _assumptions,
29
+ council as _council,
30
+ halt as _halt,
31
+ inputs as _inputs,
32
+ memory as _memory,
33
+ provider as _provider,
34
+ route as _route,
35
+ )
36
+ from scripts._cli.explain_last.scrubber import scrub_string
37
+ from scripts._cli.explain_last.state_loader import StateLoadError, load_state
38
+
39
+ TRACE_VERSION = 1
40
+ SUBJECT_BY_KIND = {
41
+ "ticket": "implement-ticket",
42
+ "prompt": "work",
43
+ "diff": "work",
44
+ "file": "work",
45
+ }
46
+
47
+
48
+ def _derive_subject(state: dict[str, Any]) -> str:
49
+ """Map ``state.input.kind`` + ``state.directive_set`` to a trace subject.
50
+
51
+ The schema enum is ``work | implement-ticket | council | video |
52
+ unknown``. ``council`` and ``video`` are reserved for Phase 3 and
53
+ forward; today they only fire when the engine explicitly stamps the
54
+ directive set, never from a kind alone.
55
+ """
56
+ directive_set = state.get("directive_set") or ""
57
+ if directive_set == "video":
58
+ return "video"
59
+ if directive_set == "council":
60
+ return "council"
61
+ kind = (state.get("input") or {}).get("kind")
62
+ return SUBJECT_BY_KIND.get(kind or "", "unknown")
63
+
64
+
65
+ def _derive_run_id(state: dict[str, Any], state_file: Path) -> str:
66
+ """Pull ``state.input.data.id`` with mtime fallback.
67
+
68
+ Schema requires a non-empty string; the file mtime serialised as
69
+ ISO-8601 UTC is the documented fallback. Both branches return scrub
70
+ pre-processed values so a ticket id containing PII never leaks.
71
+ """
72
+ data = (state.get("input") or {}).get("data") or {}
73
+ raw_id = data.get("id")
74
+ if isinstance(raw_id, str) and raw_id.strip():
75
+ return scrub_string(raw_id.strip())
76
+ try:
77
+ mtime = state_file.stat().st_mtime
78
+ except OSError:
79
+ mtime = 0.0
80
+ return datetime.fromtimestamp(mtime, tz=timezone.utc).isoformat()
81
+
82
+
83
+ def build_trace(
84
+ project_root: Path,
85
+ state_file: Path,
86
+ *,
87
+ now: datetime | None = None,
88
+ ) -> dict[str, Any]:
89
+ """Aggregate every why-slot for the most recent ``/work`` run.
90
+
91
+ Returns a JSON-serialisable dict that conforms to
92
+ ``explain-trace.schema.json``. ``now`` is only injected by the test
93
+ harness; the production caller passes ``None`` and gets the wall
94
+ clock. All free-form strings pass through :func:`scrub_string`
95
+ before being placed in the output (FATAL council fix — see roadmap
96
+ § "External AI-Council pass").
97
+ """
98
+ state = load_state(state_file)
99
+ generated_at = (now or datetime.now(tz=timezone.utc)).isoformat()
100
+ return {
101
+ "version": TRACE_VERSION,
102
+ "generated_at": generated_at,
103
+ "run_id": _derive_run_id(state, state_file),
104
+ "subject": _derive_subject(state),
105
+ "inputs": _inputs.build(project_root),
106
+ "route": _route.build(project_root, state),
107
+ "council": _council.build(project_root, state_file),
108
+ "memory": _memory.build(project_root, state),
109
+ "pack": _inputs.build_pack(project_root),
110
+ "assumptions": _assumptions.build(state),
111
+ "halt": _halt.build(state),
112
+ "provider": _provider.build(state),
113
+ }
114
+
115
+
116
+ __all__ = [
117
+ "TRACE_VERSION",
118
+ "StateLoadError",
119
+ "build_trace",
120
+ "load_state",
121
+ "scrub_string",
122
+ ]