@event4u/agent-config 8.0.0 → 8.2.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 (593) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/CHANGELOG.md +53 -568
  3. package/dist/agent-src/commands/agents/init.md +3 -3
  4. package/dist/agent-src/commands/chat-history/import.md +5 -5
  5. package/dist/agent-src/commands/chat-history.md +1 -1
  6. package/dist/agent-src/commands/condense.md +1 -1
  7. package/dist/agent-src/commands/context/create.md +1 -1
  8. package/dist/agent-src/commands/council/analysis.md +2 -2
  9. package/dist/agent-src/commands/council/default.md +3 -3
  10. package/dist/agent-src/commands/council/design.md +2 -2
  11. package/dist/agent-src/commands/council/optimize.md +1 -1
  12. package/dist/agent-src/commands/council/pr.md +2 -2
  13. package/dist/agent-src/commands/council.md +1 -1
  14. package/dist/agent-src/commands/feature/plan.md +1 -1
  15. package/dist/agent-src/commands/ghostwriter/list.md +1 -1
  16. package/dist/agent-src/commands/ghostwriter/write.md +1 -1
  17. package/dist/agent-src/commands/ghostwriter.md +1 -1
  18. package/dist/agent-src/commands/implement-ticket.md +2 -2
  19. package/dist/agent-src/commands/judge/on-diff.md +1 -1
  20. package/dist/agent-src/commands/judge/steps.md +3 -1
  21. package/dist/agent-src/commands/memory/add.md +2 -2
  22. package/dist/agent-src/commands/memory/learn-low-impact.md +1 -1
  23. package/dist/agent-src/commands/memory/load.md +1 -1
  24. package/dist/agent-src/commands/memory/mine-session.md +1 -1
  25. package/dist/agent-src/commands/memory/promote.md +1 -1
  26. package/dist/agent-src/commands/memory/propose.md +1 -1
  27. package/dist/agent-src/commands/mission/upgrade.md +1 -1
  28. package/dist/agent-src/commands/module/explore.md +3 -3
  29. package/dist/agent-src/commands/optimize/agents-dir.md +1 -1
  30. package/dist/agent-src/commands/optimize/skills.md +1 -1
  31. package/dist/agent-src/commands/optimize-project.md +1 -1
  32. package/dist/agent-src/commands/orchestrate.md +2 -2
  33. package/dist/agent-src/commands/project-analyze.md +1 -1
  34. package/dist/agent-src/commands/project-health.md +1 -1
  35. package/dist/agent-src/commands/roadmap/ai-council.md +1 -1
  36. package/dist/agent-src/commands/roadmap/create.md +2 -2
  37. package/dist/agent-src/commands/roadmap/process-full.md +3 -1
  38. package/dist/agent-src/commands/roadmap/process-phase.md +4 -2
  39. package/dist/agent-src/commands/roadmap/process-step.md +3 -1
  40. package/dist/agent-src/commands/security-audit-config.md +1 -1
  41. package/dist/agent-src/commands/sync-agent-settings.md +7 -7
  42. package/dist/agent-src/commands/sync-gitignore/fix.md +3 -3
  43. package/dist/agent-src/commands/sync-gitignore.md +4 -4
  44. package/dist/agent-src/commands/work.md +3 -3
  45. package/dist/agent-src/contexts/communication/rules-auto/skill-quality-mechanics.md +1 -1
  46. package/dist/agent-src/contexts/communication/rules-auto/slash-command-routing-policy-mechanics.md +2 -2
  47. package/dist/agent-src/contexts/contracts/artifact-engagement-flow.md +1 -1
  48. package/dist/agent-src/contexts/contracts/command-suggestion-flow.md +8 -7
  49. package/dist/agent-src/contexts/execution/evidence-discipline.md +2 -2
  50. package/dist/agent-src/contexts/execution/roadmap-process-loop.md +9 -4
  51. package/dist/agent-src/contexts/execution/toolchain-resolver.md +10 -9
  52. package/dist/agent-src/contexts/execution/verification-mechanics.md +13 -1
  53. package/dist/agent-src/packs/README.md +1 -1
  54. package/dist/agent-src/presets/README.md +1 -1
  55. package/dist/agent-src/profiles/README.md +1 -1
  56. package/dist/agent-src/rules/architecture.md +2 -2
  57. package/dist/agent-src/rules/commit-policy.md +10 -0
  58. package/dist/agent-src/rules/context-hygiene.md +2 -2
  59. package/dist/agent-src/rules/fast-path-marker-visibility.md +1 -1
  60. package/dist/agent-src/rules/framework-neutrality-in-generic-skills.md +1 -1
  61. package/dist/agent-src/rules/linked-projects-onboarding-gate.md +1 -1
  62. package/dist/agent-src/rules/low-impact-corpus-privacy-floor.md +3 -3
  63. package/dist/agent-src/rules/media-governance-routing.md +1 -1
  64. package/dist/agent-src/rules/no-roadmap-references.md +3 -3
  65. package/dist/agent-src/rules/preservation-guard.md +2 -2
  66. package/dist/agent-src/rules/roadmap-ci-steps-policy.md +6 -5
  67. package/dist/agent-src/rules/roadmap-progress-sync.md +3 -3
  68. package/dist/agent-src/rules/security-sensitive-stop.md +7 -9
  69. package/dist/agent-src/rules/source-confidentiality.md +1 -1
  70. package/dist/agent-src/rules/telegraph-speak.md +1 -1
  71. package/dist/agent-src/rules/token-optimizer-maintenance.md +1 -1
  72. package/dist/agent-src/rules/ui-audit-gate.md +1 -1
  73. package/dist/agent-src/scripts/archive_completed_roadmaps.ts +22 -4
  74. package/dist/agent-src/scripts/update_roadmap_progress.ts +29 -1
  75. package/dist/agent-src/skills/accessibility-auditor/SKILL.md +3 -2
  76. package/dist/agent-src/skills/adr-create/SKILL.md +8 -6
  77. package/dist/agent-src/skills/agent-docs-writing/SKILL.md +1 -1
  78. package/dist/agent-src/skills/agents-md-thin-root/SKILL.md +2 -2
  79. package/dist/agent-src/skills/ai-council/SKILL.md +15 -15
  80. package/dist/agent-src/skills/api-design/SKILL.md +1 -1
  81. package/dist/agent-src/skills/api-endpoint/SKILL.md +2 -1
  82. package/dist/agent-src/skills/authz-review/SKILL.md +1 -1
  83. package/dist/agent-src/skills/blade-ui/SKILL.md +11 -10
  84. package/dist/agent-src/skills/blameless-post-mortem/SKILL.md +9 -8
  85. package/dist/agent-src/skills/code-review/SKILL.md +3 -4
  86. package/dist/agent-src/skills/command-routing/SKILL.md +3 -3
  87. package/dist/agent-src/skills/command-writing/SKILL.md +3 -3
  88. package/dist/agent-src/skills/condense-memory/SKILL.md +2 -2
  89. package/dist/agent-src/skills/context-authoring/SKILL.md +1 -1
  90. package/dist/agent-src/skills/context-document/SKILL.md +1 -1
  91. package/dist/agent-src/skills/copilot-agents-optimization/SKILL.md +1 -1
  92. package/dist/agent-src/skills/corpus-grounding/SKILL.md +16 -11
  93. package/dist/agent-src/skills/corpus-grounding/scripts/ground.ts +24 -3
  94. package/dist/agent-src/skills/dashboard-design/SKILL.md +2 -1
  95. package/dist/agent-src/skills/database/SKILL.md +2 -1
  96. package/dist/agent-src/skills/description-assist/SKILL.md +6 -6
  97. package/dist/agent-src/skills/design-intelligence/SKILL.md +6 -5
  98. package/dist/agent-src/skills/design-tokens/SKILL.md +5 -5
  99. package/dist/agent-src/skills/design-tokens/scripts/tokens.ts +24 -3
  100. package/dist/agent-src/skills/existing-ui-audit/SKILL.md +3 -3
  101. package/dist/agent-src/skills/fe-design/SKILL.md +7 -7
  102. package/dist/agent-src/skills/finishing-a-development-branch/SKILL.md +11 -4
  103. package/dist/agent-src/skills/flux/SKILL.md +10 -9
  104. package/dist/agent-src/skills/git-workflow/SKILL.md +4 -5
  105. package/dist/agent-src/skills/guideline-writing/SKILL.md +2 -2
  106. package/dist/agent-src/skills/learning-to-rule-or-skill/SKILL.md +2 -2
  107. package/dist/agent-src/skills/livewire/SKILL.md +10 -9
  108. package/dist/agent-src/skills/memory-consolidation/SKILL.md +2 -2
  109. package/dist/agent-src/skills/module-detect-on-the-fly/SKILL.md +5 -5
  110. package/dist/agent-src/skills/module-management/SKILL.md +2 -2
  111. package/dist/agent-src/skills/prediction-pool-optimizer/SKILL.md +11 -11
  112. package/dist/agent-src/skills/prediction-pool-optimizer/reference/ev-fixtures.md +6 -6
  113. package/dist/agent-src/skills/prediction-pool-optimizer/reference/odds-and-bonus.md +1 -1
  114. package/dist/agent-src/skills/premortem/SKILL.md +1 -1
  115. package/dist/agent-src/skills/project-docs/SKILL.md +1 -1
  116. package/dist/agent-src/skills/quality-tools/SKILL.md +26 -2
  117. package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +8 -7
  118. package/dist/agent-src/skills/react-shadcn-ui/scripts/shadcn_add.ts +31 -10
  119. package/dist/agent-src/skills/refine-prompt/SKILL.md +14 -14
  120. package/dist/agent-src/skills/refine-ticket/SKILL.md +24 -25
  121. package/dist/agent-src/skills/refine-ticket/detection-map.yml +1 -1
  122. package/dist/agent-src/skills/review-routing/SKILL.md +6 -7
  123. package/dist/agent-src/skills/roadmap-management/SKILL.md +11 -6
  124. package/dist/agent-src/skills/rule-refactor/SKILL.md +1 -1
  125. package/dist/agent-src/skills/rule-writing/SKILL.md +5 -5
  126. package/dist/agent-src/skills/script-writing/SKILL.md +28 -41
  127. package/dist/agent-src/skills/skill-writing/SKILL.md +3 -3
  128. package/dist/agent-src/skills/source-discovery/SKILL.md +3 -3
  129. package/dist/agent-src/skills/sql-writing/SKILL.md +2 -1
  130. package/dist/agent-src/skills/subagent-orchestration/SKILL.md +1 -1
  131. package/dist/agent-src/skills/systematic-debugging/SKILL.md +5 -7
  132. package/dist/agent-src/skills/tailwind-engineer/SKILL.md +2 -2
  133. package/dist/agent-src/skills/tailwind-engineer/scripts/tailwind_config_gen.ts +25 -4
  134. package/dist/agent-src/skills/token-optimizer/SKILL.md +1 -1
  135. package/dist/agent-src/skills/typography-system/SKILL.md +1 -1
  136. package/dist/agent-src/skills/validate-feature-fit/SKILL.md +5 -7
  137. package/dist/agent-src/skills/verify-completion-evidence/SKILL.md +13 -1
  138. package/dist/agent-src/templates/agent-settings.md +34 -25
  139. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +3 -3
  140. package/dist/agent-src/templates/agents/memory/incident-learnings.example.yml +1 -1
  141. package/dist/agent-src/templates/agents/proposal.example.md +4 -4
  142. package/dist/agent-src/templates/copilot-instructions.md +1 -1
  143. package/dist/agent-src/templates/github-workflows/memory-hygiene.yml +10 -10
  144. package/dist/agent-src/templates/github-workflows/pr-risk-review.yml +19 -8
  145. package/dist/agent-src/templates/github-workflows/proposal-drift.yml +11 -8
  146. package/dist/agent-src/templates/github-workflows/roadmap-progress-check.yml +10 -12
  147. package/dist/agent-src/templates/hooks/pre-commit-frontmatter +21 -11
  148. package/dist/agent-src/templates/hooks/pre-commit-roadmap-progress +43 -29
  149. package/dist/agent-src/templates/roadmaps.md +9 -4
  150. package/dist/agent-src/templates/rule.md +3 -3
  151. package/dist/agent-src/templates/scripts/README.md +6 -6
  152. package/dist/agent-src/templates/scripts/check_memory.ts +24 -2
  153. package/dist/agent-src/templates/scripts/check_memory_proposal.ts +23 -4
  154. package/dist/agent-src/templates/scripts/historical-bug-patterns.example.yml +1 -1
  155. package/dist/agent-src/templates/scripts/memory_hash.ts +24 -2
  156. package/dist/agent-src/templates/scripts/memory_lookup.ts +24 -2
  157. package/dist/agent-src/templates/scripts/memory_report.ts +24 -2
  158. package/dist/agent-src/templates/scripts/memory_signal.ts +24 -2
  159. package/dist/agent-src/templates/scripts/memory_status.ts +26 -2
  160. package/dist/agent-src/templates/scripts/ownership-map.example.yml +1 -1
  161. package/dist/agent-src/templates/scripts/pr-risk-config.example.yml +1 -1
  162. package/dist/agent-src/templates/scripts/pr_review_routing.ts +24 -3
  163. package/dist/agent-src/templates/scripts/pr_risk_review.ts +0 -0
  164. package/dist/agent-src/templates/scripts/telemetry_record.ts +24 -3
  165. package/dist/agent-src/templates/scripts/telemetry_report.ts +25 -3
  166. package/dist/agent-src/templates/scripts/telemetry_status.ts +24 -3
  167. package/dist/agent-src/templates/scripts/tier_usage_report.ts +24 -2
  168. package/dist/agent-src/templates/scripts/work_engine/_lib/agent_settings.ts +44 -10
  169. package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/_chat_history_base.ts +26 -13
  170. package/dist/agent-src/templates/skill.md +2 -2
  171. package/dist/cli/python/knowledge_ingest.js +24 -3
  172. package/dist/cli/python/knowledge_ingest.js.map +1 -1
  173. package/dist/cli/python/workspace_analytics.js +23 -3
  174. package/dist/cli/python/workspace_analytics.js.map +1 -1
  175. package/dist/cli/python/workspace_crypto.js +23 -3
  176. package/dist/cli/python/workspace_crypto.js.map +1 -1
  177. package/dist/cli/python/workspace_documents.js +23 -3
  178. package/dist/cli/python/workspace_documents.js.map +1 -1
  179. package/dist/cli/python/workspace_drive.js +24 -3
  180. package/dist/cli/python/workspace_drive.js.map +1 -1
  181. package/dist/cli/python/workspace_drive_health.js +23 -3
  182. package/dist/cli/python/workspace_drive_health.js.map +1 -1
  183. package/dist/cli/python/workspace_explain.js +23 -3
  184. package/dist/cli/python/workspace_explain.js.map +1 -1
  185. package/dist/cli/python/workspace_hosts.js +23 -3
  186. package/dist/cli/python/workspace_hosts.js.map +1 -1
  187. package/dist/cli/python/workspace_inbox.js +23 -3
  188. package/dist/cli/python/workspace_inbox.js.map +1 -1
  189. package/dist/cli/python/workspace_render.js +23 -3
  190. package/dist/cli/python/workspace_render.js.map +1 -1
  191. package/dist/cli/python/workspace_roles.js +23 -3
  192. package/dist/cli/python/workspace_roles.js.map +1 -1
  193. package/dist/cli/python/workspace_sessions.js +23 -3
  194. package/dist/cli/python/workspace_sessions.js.map +1 -1
  195. package/dist/cli/python/workspace_skills.js +23 -3
  196. package/dist/cli/python/workspace_skills.js.map +1 -1
  197. package/dist/cli/registry.js +2 -0
  198. package/dist/cli/registry.js.map +1 -1
  199. package/dist/discovery/deprecation-report.md +1 -1
  200. package/dist/discovery/discovery-manifest.json +119 -119
  201. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  202. package/dist/discovery/discovery-manifest.summary.md +2 -2
  203. package/dist/discovery/orphan-report.md +1 -1
  204. package/dist/discovery/packs.json +3 -3
  205. package/dist/discovery/trust-report.md +1 -1
  206. package/dist/discovery/workspaces.json +3 -3
  207. package/dist/install/install.mjs +67 -28
  208. package/dist/mcp/registry-manifest.json +2 -2
  209. package/dist/server/routes/settings.js +4 -4
  210. package/dist/server/routes/settings.js.map +1 -1
  211. package/dist/server/schemas/settings.js +1 -1
  212. package/dist/server/schemas/settings.js.map +1 -1
  213. package/docs/CLAIMS.md +2 -2
  214. package/docs/archive/CHANGELOG-pre-8.0.0.md +301 -0
  215. package/docs/archive/CHANGELOG-pre-8.1.0.md +316 -0
  216. package/docs/benchmark.md +40 -0
  217. package/docs/contracts/skill-bundled-assets.md +2 -2
  218. package/docs/customization.md +1 -1
  219. package/docs/decisions/ADR-110-discipline-profile-resolution-locus.md +9 -4
  220. package/docs/guidelines/agent-infra/corpus-grounding-authoring.md +2 -2
  221. package/docs/guidelines/agent-infra/engineering-memory-data-format.md +4 -4
  222. package/docs/guidelines/agent-infra/installed-tools-manifest.md +3 -3
  223. package/docs/guidelines/agent-infra/language-and-tone-examples.md +2 -2
  224. package/docs/guidelines/agent-infra/layered-settings.md +4 -4
  225. package/docs/guidelines/agent-infra/memory-access.md +19 -18
  226. package/docs/guidelines/agent-infra/naming.md +1 -1
  227. package/docs/guidelines/agent-infra/roadmap-progress-mechanics.md +5 -5
  228. package/docs/guidelines/agent-infra/role-contracts.md +1 -1
  229. package/docs/guidelines/agent-infra/security-lint-containment.md +2 -2
  230. package/docs/guidelines/agent-infra/self-improvement-pipeline.md +1 -1
  231. package/docs/guidelines/agent-infra/size-and-scope.md +1 -1
  232. package/docs/guidelines/agent-infra/skill-quality-checklist.md +5 -5
  233. package/docs/guidelines/augment-portability-patterns.md +1 -1
  234. package/docs/proof.md +1 -1
  235. package/docs/setup/per-ide/claude-code.md +10 -4
  236. package/package.json +3 -2
  237. package/src/config/agent-settings.template.yml +31 -17
  238. package/src/config/host-capabilities.yml +25 -16
  239. package/src/config/profiles/balanced.ini +5 -3
  240. package/src/scripts/_cli/cmd_analyze_session.ts +23 -4
  241. package/src/scripts/_cli/cmd_conformance.ts +23 -4
  242. package/src/scripts/_cli/cmd_doctor.ts +96 -8
  243. package/src/scripts/_cli/cmd_explain.ts +23 -4
  244. package/src/scripts/_cli/cmd_export.ts +23 -4
  245. package/src/scripts/_cli/cmd_fleet.ts +23 -4
  246. package/src/scripts/_cli/cmd_migrate.ts +23 -4
  247. package/src/scripts/_cli/cmd_preflight.ts +24 -4
  248. package/src/scripts/_cli/cmd_prune.ts +23 -4
  249. package/src/scripts/_cli/cmd_refresh.ts +23 -4
  250. package/src/scripts/_cli/cmd_settings_check.ts +23 -4
  251. package/src/scripts/_cli/cmd_settings_migrate.ts +23 -4
  252. package/src/scripts/_cli/cmd_sync.ts +23 -4
  253. package/src/scripts/_cli/cmd_uninstall.ts +23 -4
  254. package/src/scripts/_cli/cmd_update.ts +23 -4
  255. package/src/scripts/_cli/cmd_upgrade.ts +238 -9
  256. package/src/scripts/_cli/cmd_validate.ts +23 -4
  257. package/src/scripts/_cli/cmd_versions.ts +23 -4
  258. package/src/scripts/_dispatch.bash +62 -19
  259. package/src/scripts/_lib/claude_plugin.ts +83 -0
  260. package/src/scripts/_lib/knowledge_global.ts +24 -2
  261. package/src/scripts/_lib/knowledge_global_promote.ts +24 -2
  262. package/src/scripts/_lib/knowledge_global_redaction.ts +24 -2
  263. package/src/scripts/_lib/link_crypto.ts +24 -5
  264. package/src/scripts/_lib/pin_resolver.ts +24 -3
  265. package/src/scripts/adoption_report.ts +23 -4
  266. package/src/scripts/adoption_snapshot.ts +23 -1
  267. package/src/scripts/adoption_status.ts +23 -4
  268. package/src/scripts/adr/regenerate_index.ts +24 -3
  269. package/src/scripts/ai_council/airgap.ts +25 -2
  270. package/src/scripts/ai_council/compile_corpus.ts +24 -2
  271. package/src/scripts/ai_council/pricing.ts +11 -1
  272. package/src/scripts/analysis_freshness.ts +23 -4
  273. package/src/scripts/annotate_discovery.ts +23 -1
  274. package/src/scripts/apply_modules_config.ts +23 -4
  275. package/src/scripts/audit_adr_coverage.ts +23 -4
  276. package/src/scripts/audit_auto_rules.ts +23 -1
  277. package/src/scripts/audit_cloud_compatibility.ts +23 -4
  278. package/src/scripts/audit_command_surface.ts +23 -4
  279. package/src/scripts/audit_initial_context.ts +23 -3
  280. package/src/scripts/audit_likelihood.ts +23 -1
  281. package/src/scripts/audit_mcp_tools.ts +23 -3
  282. package/src/scripts/audit_overlap.ts +23 -1
  283. package/src/scripts/audit_skill_descriptions.ts +24 -2
  284. package/src/scripts/audit_skill_overlap.ts +23 -1
  285. package/src/scripts/audit_user_type_axis.ts +23 -4
  286. package/src/scripts/backfill_model_tier.ts +23 -4
  287. package/src/scripts/bench_ab_cache_dispatch.ts +23 -1
  288. package/src/scripts/bench_ab_clone.ts +23 -1
  289. package/src/scripts/bench_ab_diff.ts +23 -1
  290. package/src/scripts/bench_ab_integrity.ts +23 -1
  291. package/src/scripts/bench_ab_run.ts +23 -2
  292. package/src/scripts/bench_ab_task_runner.ts +23 -1
  293. package/src/scripts/bench_ab_tracka_run.ts +23 -2
  294. package/src/scripts/bench_ab_v2_run.ts +23 -1
  295. package/src/scripts/bench_ab_v2_stats.ts +23 -1
  296. package/src/scripts/bench_baseline_ready.ts +23 -1
  297. package/src/scripts/bench_condense_memory.ts +23 -1
  298. package/src/scripts/bench_drift_check.ts +23 -2
  299. package/src/scripts/bench_matrix.ts +23 -4
  300. package/src/scripts/bench_per_tool.ts +23 -1
  301. package/src/scripts/bench_quality_run.ts +23 -2
  302. package/src/scripts/bench_rtk_savings.ts +23 -1
  303. package/src/scripts/bench_rule_load_latency.ts +23 -2
  304. package/src/scripts/bench_run.ts +23 -2
  305. package/src/scripts/bench_runner.ts +23 -1
  306. package/src/scripts/build_cloud_bundle.ts +23 -3
  307. package/src/scripts/build_discovery_manifest.ts +23 -4
  308. package/src/scripts/build_linear_digest.ts +23 -3
  309. package/src/scripts/build_mcp_registry_manifest.ts +23 -4
  310. package/src/scripts/build_rule_trigger_matrix.ts +23 -4
  311. package/src/scripts/capture_showcase_session.ts +23 -1
  312. package/src/scripts/chat_history.ts +24 -3
  313. package/src/scripts/check_always_budget.ts +23 -2
  314. package/src/scripts/check_artefact_checksums.ts +23 -4
  315. package/src/scripts/check_augment_description_cap.ts +23 -4
  316. package/src/scripts/check_augmentignore.ts +23 -4
  317. package/src/scripts/check_beta_review_markers.ts +23 -4
  318. package/src/scripts/check_cluster_patterns.ts +23 -4
  319. package/src/scripts/check_command_count_messaging.ts +23 -4
  320. package/src/scripts/check_comparison.ts +23 -1
  321. package/src/scripts/check_condensation.ts +24 -3
  322. package/src/scripts/check_condensed_paths.ts +23 -2
  323. package/src/scripts/check_context_paths.ts +23 -4
  324. package/src/scripts/check_council_config_location.ts +23 -4
  325. package/src/scripts/check_council_layout.ts +23 -4
  326. package/src/scripts/check_council_references.ts +23 -4
  327. package/src/scripts/check_discovery_determinism.ts +24 -4
  328. package/src/scripts/check_gate_paths.ts +23 -4
  329. package/src/scripts/check_generated_artefact_headers.ts +23 -4
  330. package/src/scripts/check_generator_output_coverage.ts +23 -4
  331. package/src/scripts/check_gitignore_freshness.ts +23 -4
  332. package/src/scripts/check_iron_law_prominence.ts +23 -4
  333. package/src/scripts/check_kernel_prefix_stability.ts +0 -0
  334. package/src/scripts/check_kernel_rule_bundle.ts +23 -4
  335. package/src/scripts/check_knowledge_cards.ts +23 -1
  336. package/src/scripts/check_md_language.ts +23 -4
  337. package/src/scripts/check_media_deps.ts +24 -1
  338. package/src/scripts/check_memory.ts +24 -2
  339. package/src/scripts/check_memory_proposal.ts +23 -4
  340. package/src/scripts/check_module_management_neutral.ts +23 -4
  341. package/src/scripts/check_no_conflict_markers.ts +23 -4
  342. package/src/scripts/check_no_external_sources.ts +23 -4
  343. package/src/scripts/check_no_local_settings_committed.ts +24 -4
  344. package/src/scripts/check_no_new_legacy_path.ts +23 -4
  345. package/src/scripts/check_no_roadmap_refs.ts +23 -4
  346. package/src/scripts/check_one_off_location.ts +23 -4
  347. package/src/scripts/check_overlay_cascade_subdirs.ts +23 -4
  348. package/src/scripts/check_portability.ts +24 -3
  349. package/src/scripts/check_proposal.ts +0 -0
  350. package/src/scripts/check_public_catalog_links.ts +23 -4
  351. package/src/scripts/check_public_links.ts +23 -4
  352. package/src/scripts/check_quality_regression.ts +23 -2
  353. package/src/scripts/check_references.ts +23 -4
  354. package/src/scripts/check_release_includes_discovery.ts +23 -4
  355. package/src/scripts/check_release_pr_shape.ts +23 -4
  356. package/src/scripts/check_release_published.ts +23 -4
  357. package/src/scripts/check_release_trunk_sync.ts +23 -4
  358. package/src/scripts/check_reply_consistency.ts +23 -4
  359. package/src/scripts/check_roadmap_trackable.ts +23 -4
  360. package/src/scripts/check_role_doc_links.ts +23 -4
  361. package/src/scripts/check_safety_floor_untouched.ts +24 -4
  362. package/src/scripts/check_site_links.ts +23 -1
  363. package/src/scripts/check_skill_gaps.ts +23 -1
  364. package/src/scripts/check_skill_requires.ts +23 -4
  365. package/src/scripts/check_structural_breaking.ts +24 -4
  366. package/src/scripts/check_surface_tiers.ts +23 -4
  367. package/src/scripts/check_template_pin_drift.ts +23 -4
  368. package/src/scripts/check_test_coverage_diff.ts +23 -4
  369. package/src/scripts/check_token_optimizer_freshness.ts +23 -4
  370. package/src/scripts/check_token_quality_golden.ts +23 -2
  371. package/src/scripts/check_token_regression.ts +23 -2
  372. package/src/scripts/check_tracked_but_ignored.ts +24 -4
  373. package/src/scripts/check_trigger_evals.ts +23 -4
  374. package/src/scripts/check_trunk_drift.ts +24 -1
  375. package/src/scripts/check_update_banner.ts +23 -4
  376. package/src/scripts/ci_summary.ts +23 -4
  377. package/src/scripts/ci_time_ratio.ts +23 -4
  378. package/src/scripts/cluster_near_miss_patterns.ts +0 -0
  379. package/src/scripts/compile_router.ts +23 -4
  380. package/src/scripts/condense.ts +23 -2
  381. package/src/scripts/condense_memory.ts +24 -2
  382. package/src/scripts/config/packs.ts +24 -4
  383. package/src/scripts/config/session_profiles.ts +23 -4
  384. package/src/scripts/context_hygiene_hook.ts +24 -3
  385. package/src/scripts/cost_by_conversation.ts +23 -4
  386. package/src/scripts/cost_summary.ts +23 -4
  387. package/src/scripts/council_cli.ts +35 -7
  388. package/src/scripts/council_prune.ts +25 -2
  389. package/src/scripts/cross_repo_retrieve.ts +23 -4
  390. package/src/scripts/discovery_stats.ts +23 -4
  391. package/src/scripts/evidence_report.ts +23 -1
  392. package/src/scripts/export_replay_corpus.ts +23 -2
  393. package/src/scripts/extract_audit_patterns.ts +23 -1
  394. package/src/scripts/first_run_gate_hook.ts +24 -3
  395. package/src/scripts/gen_discovery_baseline.ts +23 -4
  396. package/src/scripts/generate_capabilities_index.ts +24 -5
  397. package/src/scripts/generate_capability_matrix.ts +23 -4
  398. package/src/scripts/generate_catalog.ts +23 -1
  399. package/src/scripts/generate_command_flows.ts +23 -4
  400. package/src/scripts/generate_cookbook.ts +23 -4
  401. package/src/scripts/generate_index.ts +23 -4
  402. package/src/scripts/generate_ownership_matrix.ts +23 -1
  403. package/src/scripts/generate_pack_manifests.ts +24 -5
  404. package/src/scripts/generate_role_experiences_catalog.ts +23 -4
  405. package/src/scripts/hooks/block_no_verify.ts +23 -4
  406. package/src/scripts/hooks/design_slop_hook.ts +24 -3
  407. package/src/scripts/hooks/dispatch_hook.ts +47 -14
  408. package/src/scripts/hooks/replay_hook.ts +23 -2
  409. package/src/scripts/hooks/rtk_wrap_hook.ts +24 -5
  410. package/src/scripts/hooks_doctor.ts +23 -2
  411. package/src/scripts/hooks_status.ts +23 -2
  412. package/src/scripts/injection_scan_hook.ts +24 -5
  413. package/src/scripts/install.ts +72 -44
  414. package/src/scripts/inventory_abstraction_budget.ts +23 -1
  415. package/src/scripts/inventory_frontmatter.ts +23 -1
  416. package/src/scripts/inventory_meta_layers.ts +23 -1
  417. package/src/scripts/iron_law_sha.ts +23 -4
  418. package/src/scripts/janitor.ts +23 -4
  419. package/src/scripts/knowledge_global_cli.ts +24 -2
  420. package/src/scripts/linked_projects_list.ts +23 -4
  421. package/src/scripts/lint_agent_security.ts +23 -4
  422. package/src/scripts/lint_agent_skill_names.ts +23 -4
  423. package/src/scripts/lint_agents_layout.ts +23 -4
  424. package/src/scripts/lint_agents_md.ts +23 -4
  425. package/src/scripts/lint_archived_skills.ts +23 -4
  426. package/src/scripts/lint_artefact_frontmatter.ts +23 -4
  427. package/src/scripts/lint_bench_ab.ts +23 -4
  428. package/src/scripts/lint_bench_corpus.ts +23 -2
  429. package/src/scripts/lint_command_flow_coverage.ts +23 -4
  430. package/src/scripts/lint_command_routing.ts +23 -4
  431. package/src/scripts/lint_command_tiers.ts +23 -2
  432. package/src/scripts/lint_command_verbs.ts +23 -4
  433. package/src/scripts/lint_commit_subjects.ts +24 -4
  434. package/src/scripts/lint_confusables.ts +25 -5
  435. package/src/scripts/lint_context_spine_usage.ts +23 -4
  436. package/src/scripts/lint_discovery_manifest.ts +23 -4
  437. package/src/scripts/lint_discovery_vocabulary.ts +23 -4
  438. package/src/scripts/lint_empty_roadmaps.ts +23 -4
  439. package/src/scripts/lint_eval_freshness.ts +23 -4
  440. package/src/scripts/lint_examples.ts +23 -4
  441. package/src/scripts/lint_explain_trace.ts +23 -4
  442. package/src/scripts/lint_featured_skills.ts +0 -0
  443. package/src/scripts/lint_flows.ts +23 -4
  444. package/src/scripts/lint_framework_leakage.ts +23 -4
  445. package/src/scripts/lint_frontmatter_boilerplate.ts +23 -4
  446. package/src/scripts/lint_ghostwriter_source.ts +23 -4
  447. package/src/scripts/lint_global_paths.ts +23 -2
  448. package/src/scripts/lint_handoffs.ts +23 -4
  449. package/src/scripts/lint_hidden_unicode.ts +24 -5
  450. package/src/scripts/lint_hook_concern_budget.ts +23 -4
  451. package/src/scripts/lint_hook_manifest.ts +23 -2
  452. package/src/scripts/lint_instruction_smuggling.ts +25 -5
  453. package/src/scripts/lint_legal_pack.ts +23 -1
  454. package/src/scripts/lint_load_context.ts +23 -4
  455. package/src/scripts/lint_marketplace.ts +24 -3
  456. package/src/scripts/lint_marketplace_install_completeness.ts +23 -4
  457. package/src/scripts/lint_mcp_config_security.ts +25 -5
  458. package/src/scripts/lint_mcp_registry_manifest.ts +23 -4
  459. package/src/scripts/lint_media_policy_linkage.ts +23 -4
  460. package/src/scripts/lint_missions.ts +23 -4
  461. package/src/scripts/lint_model_tier_coverage.ts +23 -4
  462. package/src/scripts/lint_namespace.ts +23 -4
  463. package/src/scripts/lint_namespace_collisions.ts +23 -4
  464. package/src/scripts/lint_new_skill_gate.ts +23 -4
  465. package/src/scripts/lint_no_new_atomic_commands.ts +23 -4
  466. package/src/scripts/lint_one_off_age.ts +23 -4
  467. package/src/scripts/lint_orchestration_dsl.ts +23 -4
  468. package/src/scripts/lint_orchestrator_auto_detect.ts +23 -4
  469. package/src/scripts/lint_pack_boundaries.ts +23 -4
  470. package/src/scripts/lint_pack_dependencies.ts +23 -2
  471. package/src/scripts/lint_pack_first_win.ts +23 -4
  472. package/src/scripts/lint_pack_risk_class.ts +23 -1
  473. package/src/scripts/lint_persona_governance.ts +23 -4
  474. package/src/scripts/lint_positioning.ts +23 -4
  475. package/src/scripts/lint_profile_overlay_set_only.ts +23 -4
  476. package/src/scripts/lint_readme_jargon.ts +23 -4
  477. package/src/scripts/lint_readme_size.ts +23 -4
  478. package/src/scripts/lint_regression.ts +23 -4
  479. package/src/scripts/lint_roadmap_blockers.ts +23 -4
  480. package/src/scripts/lint_roadmap_ci_steps.ts +23 -4
  481. package/src/scripts/lint_roadmap_complexity.ts +23 -4
  482. package/src/scripts/lint_roadmap_later_disposition.ts +23 -4
  483. package/src/scripts/lint_role_experiences.ts +23 -4
  484. package/src/scripts/lint_rule_interactions.ts +23 -4
  485. package/src/scripts/lint_rule_tiers.ts +24 -3
  486. package/src/scripts/lint_showcase_sessions.ts +23 -4
  487. package/src/scripts/lint_skill_frontmatter_safety.ts +25 -5
  488. package/src/scripts/lint_skill_originality.ts +23 -4
  489. package/src/scripts/lint_skill_tools.ts +23 -4
  490. package/src/scripts/lint_subagent_determinism.ts +23 -4
  491. package/src/scripts/lint_ticket_buildable.ts +23 -4
  492. package/src/scripts/lint_topics_yaml.ts +23 -4
  493. package/src/scripts/lint_trust_coherence.ts +23 -4
  494. package/src/scripts/lint_value_dashboard.ts +23 -4
  495. package/src/scripts/lint_workflow_security.ts +23 -4
  496. package/src/scripts/lint_workspace_boundary.ts +23 -4
  497. package/src/scripts/mcp_parity_smoke.ts +23 -2
  498. package/src/scripts/mcp_render.ts +23 -4
  499. package/src/scripts/mcp_telemetry_health.ts +23 -4
  500. package/src/scripts/mcp_telemetry_query.ts +23 -4
  501. package/src/scripts/mcp_telemetry_store.ts +23 -4
  502. package/src/scripts/measure_augment_budget.ts +23 -1
  503. package/src/scripts/measure_density.ts +23 -1
  504. package/src/scripts/measure_frugality_savings.ts +23 -1
  505. package/src/scripts/measure_markitdown_lift.ts +23 -1
  506. package/src/scripts/measure_patterns.ts +23 -1
  507. package/src/scripts/measure_projection_bytes.ts +23 -1
  508. package/src/scripts/measure_rule_budget.ts +23 -4
  509. package/src/scripts/measure_skill_reduction.ts +23 -1
  510. package/src/scripts/memory_hash.ts +24 -2
  511. package/src/scripts/memory_lookup.ts +24 -2
  512. package/src/scripts/memory_report.ts +24 -2
  513. package/src/scripts/memory_signal.ts +24 -2
  514. package/src/scripts/memory_status.ts +26 -2
  515. package/src/scripts/migrate_command_suggestions.ts +23 -4
  516. package/src/scripts/migrate_frontmatter_defaults.ts +23 -4
  517. package/src/scripts/migration_status.ts +25 -4
  518. package/src/scripts/mine_missing_guardrails.ts +23 -1
  519. package/src/scripts/mine_session.ts +23 -1
  520. package/src/scripts/minimal_safe_diff_hook.ts +24 -3
  521. package/src/scripts/new_skill.ts +23 -3
  522. package/src/scripts/onboarding_gate_hook.ts +24 -3
  523. package/src/scripts/parity/coverage_diff.ts +25 -3
  524. package/src/scripts/parity/phase_gate.ts +25 -4
  525. package/src/scripts/parity/replay.ts +25 -3
  526. package/src/scripts/pattern_share.ts +23 -4
  527. package/src/scripts/plan_physical_move.ts +23 -4
  528. package/src/scripts/prediction-pool/poisson_sim.ts +24 -3
  529. package/src/scripts/prediction-pool/pool_winsim.ts +24 -3
  530. package/src/scripts/prediction-pool/score_ev.ts +24 -3
  531. package/src/scripts/print_required_checks.ts +24 -4
  532. package/src/scripts/probe_host_compliance.ts +23 -2
  533. package/src/scripts/probe_projection_fidelity.ts +23 -1
  534. package/src/scripts/probe_skill_registration.ts +24 -2
  535. package/src/scripts/profile_staleness_hook.ts +24 -3
  536. package/src/scripts/profile_use.ts +23 -4
  537. package/src/scripts/project_thin_rules.ts +23 -3
  538. package/src/scripts/propose_modules_config.ts +23 -4
  539. package/src/scripts/prototype_lint_contradictions.ts +23 -1
  540. package/src/scripts/prove_pack_extractable.ts +23 -4
  541. package/src/scripts/readme_linter.ts +23 -3
  542. package/src/scripts/redact_hook_capture.ts +23 -4
  543. package/src/scripts/refine_ticket_detect.ts +23 -4
  544. package/src/scripts/release.ts +23 -4
  545. package/src/scripts/render_benchmark_composite.ts +23 -4
  546. package/src/scripts/render_benchmark_md.ts +23 -4
  547. package/src/scripts/roadmap_progress_hook.ts +46 -16
  548. package/src/scripts/run_skill_evals.ts +23 -4
  549. package/src/scripts/runtime_dispatcher.ts +23 -4
  550. package/src/scripts/runtime_registry.ts +23 -4
  551. package/src/scripts/score_skill_selection.ts +23 -1
  552. package/src/scripts/security_audit_config.ts +24 -5
  553. package/src/scripts/skill_collision_clusters.ts +23 -4
  554. package/src/scripts/skill_discovery.ts +23 -4
  555. package/src/scripts/skill_linter.ts +23 -2
  556. package/src/scripts/skill_preview.ts +23 -4
  557. package/src/scripts/skill_tools/audit_persona_coverage.ts +23 -1
  558. package/src/scripts/skill_tools/audit_user_type_coverage.ts +23 -1
  559. package/src/scripts/skill_tools/run_block_d_eval.ts +23 -1
  560. package/src/scripts/skill_tools/score_skill_relevance.ts +23 -1
  561. package/src/scripts/skill_tools/suggest_skill_for_task.ts +24 -1
  562. package/src/scripts/skill_usage_collect.ts +23 -4
  563. package/src/scripts/smoke_path_resolution.ts +23 -4
  564. package/src/scripts/smoke_quickstart.ts +23 -4
  565. package/src/scripts/snapshot_agent_outputs.ts +23 -4
  566. package/src/scripts/spotcheck_thin_root.ts +23 -4
  567. package/src/scripts/sync_agent_settings.ts +23 -4
  568. package/src/scripts/sync_github_metadata.ts +23 -4
  569. package/src/scripts/sync_gitignore.ts +23 -4
  570. package/src/scripts/telegraph_stats.ts +23 -4
  571. package/src/scripts/tool_registry.ts +24 -4
  572. package/src/scripts/trigger_coverage.ts +23 -4
  573. package/src/scripts/update_counts.ts +23 -4
  574. package/src/scripts/update_prices.ts +23 -1
  575. package/src/scripts/validate_agent_settings.ts +23 -4
  576. package/src/scripts/validate_decision_engine.ts +23 -4
  577. package/src/scripts/validate_discovery_manifest.ts +23 -4
  578. package/src/scripts/validate_frontmatter.ts +23 -2
  579. package/src/scripts/validate_pack_yaml.ts +0 -0
  580. package/src/scripts/validate_safe_paths.ts +24 -4
  581. package/src/scripts/validate_telegraph_carveouts.ts +23 -4
  582. package/src/scripts/verify_before_complete_hook.ts +24 -3
  583. package/src/scripts/verify_physical_move.ts +23 -4
  584. package/src/scripts/wrapper_freshness_hook.ts +107 -8
  585. package/tests/fixtures/hooks/README.md +92 -0
  586. package/tests/fixtures/hooks/agent_error.json +7 -0
  587. package/tests/fixtures/hooks/post_tool_use.json +13 -0
  588. package/tests/fixtures/hooks/pre_compact.json +7 -0
  589. package/tests/fixtures/hooks/pre_tool_use.json +9 -0
  590. package/tests/fixtures/hooks/session_end.json +6 -0
  591. package/tests/fixtures/hooks/session_start.json +6 -0
  592. package/tests/fixtures/hooks/stop.json +6 -0
  593. package/tests/fixtures/hooks/user_prompt_submit.json +7 -0
@@ -20,9 +20,27 @@
20
20
  *
21
21
  * 1. `npm install -g @event4u/agent-config@latest` — refresh the global binary
22
22
  * on PATH (the binary the Claude plugin hook resolves).
23
- * 2. `agent-config global` (→ `install.py --global`) — refresh the global root
24
- * (`~/.event4u/agent-config/`) + regenerate plugin hooks.
25
- * 3. If run from inside a consumer project that already has a `./agent-config`
23
+ * 2. `agent-config global --no-ui` (→ `install --global`) — refresh the global
24
+ * root (`~/.event4u/agent-config/`) + regenerate plugin hooks. `--no-ui`
25
+ * suppresses the setup-wizard auto-launch: the wizard is an onboarding
26
+ * surface, not an upgrade step, and a foreground wizard server would block
27
+ * the remaining upgrade steps until Ctrl-C (which then failed the run).
28
+ * 2b. When the Claude Code plugin (`agent-config@event4u-agent-config`) is
29
+ * installed, refresh it: `claude plugin marketplace update` +
30
+ * `claude plugin update` — otherwise the plugin snapshot stays pinned to
31
+ * its install-time git SHA and its command surface silently rots while
32
+ * the file projection moves ahead. Non-fatal: a refresh failure warns and
33
+ * names the manual commands. The plugin is OPTIONAL — the file projection
34
+ * is a full install on its own; no plugin → no step, no nag.
35
+ * 3. `agent-config settings:sync --path <file>` for every EXISTING settings
36
+ * file (global `~/.event4u/agent-config/settings/.agent-settings.yml`,
37
+ * then the project settings when run inside a consumer project) — additive
38
+ * merge that inserts keys the new release added to the template while
39
+ * preserving user lines verbatim. Runs as a subprocess of the freshly
40
+ * installed binary so the NEW template is the merge source. Non-fatal:
41
+ * a sync failure warns and names the manual command, never fails the
42
+ * upgrade. Never creates a settings file that did not exist.
43
+ * 4. If run from inside a consumer project that already has a `./agent-config`
26
44
  * wrapper, re-stamp that wrapper from the canonical template.
27
45
  *
28
46
  * Flags:
@@ -71,6 +89,9 @@ import { fileURLToPath, pathToFileURL } from 'node:url';
71
89
  import * as installed_lock from '../_lib/installed_lock.js';
72
90
  import * as update_check from '../_lib/update_check.js';
73
91
  import * as cli_wrapper from '../_lib/cli_wrapper.js';
92
+ import * as claude_plugin from '../_lib/claude_plugin.js';
93
+ import { event4u_root } from '../_lib/user_global_paths.js';
94
+ import { project_settings_path } from '../_lib/agent_settings.js';
74
95
  import { _is_source_repo } from './cmd_refresh.js';
75
96
 
76
97
  const PACKAGE_NAME = '@event4u/agent-config';
@@ -219,6 +240,170 @@ function _maybe_refresh_project_wrapper(project_root: string, out: OutSink, _err
219
240
  }
220
241
  }
221
242
 
243
+ /**
244
+ * Refresh the consumer's installed `.git/hooks/pre-commit` gate after a
245
+ * global upgrade — but only when the hook is OURS (identified by the
246
+ * `pre-commit-roadmap-progress` marker) and only when run from inside a
247
+ * project that has it. Without this, a hook installed under an older
248
+ * release keeps running the old template forever (`hooks:install` without
249
+ * `--force` short-circuits on the marker) — the py2ts-era hooks silently
250
+ * no-op'd for exactly this reason. Non-fatal: a failure warns and names
251
+ * the manual command.
252
+ */
253
+ function _maybe_refresh_git_hook(
254
+ project_root: string,
255
+ runner: (cmd: string[]) => number,
256
+ out: OutSink,
257
+ err: OutSink,
258
+ ): void {
259
+ const hook = path.join(project_root, '.git', 'hooks', 'pre-commit');
260
+ let text: string;
261
+ try {
262
+ text = fs.readFileSync(hook, 'utf-8');
263
+ } catch {
264
+ return; // no hook installed (or worktree indirection) — nothing to refresh
265
+ }
266
+ if (!text.includes('pre-commit-roadmap-progress')) {
267
+ return; // not our hook — never overwrite a foreign pre-commit
268
+ }
269
+ const cmd = [_agent_config_bin(), 'hooks:install', '--force'];
270
+ _print(out, '→ ' + cmd.join(' '));
271
+ let rc: number;
272
+ try {
273
+ rc = runner(cmd);
274
+ } catch (exc) {
275
+ rc = 127;
276
+ _print(err, `cannot run ${cmd[0]}: ${osErrorStr(exc)}`);
277
+ }
278
+ if (rc !== 0) {
279
+ _print(
280
+ err,
281
+ `⚠️ agent-config upgrade: pre-commit hook refresh failed (exit ${rc}) — ` +
282
+ 'run `agent-config hooks:install --force` manually.',
283
+ );
284
+ }
285
+ }
286
+
287
+ /**
288
+ * Existing settings files the post-upgrade sync should bring up to the new
289
+ * template (additive merge — user lines preserved verbatim, only missing
290
+ * template keys inserted; see `sync_agent_settings.ts`).
291
+ *
292
+ * Targets, in order:
293
+ * 1. Global settings — `~/.event4u/agent-config/settings/.agent-settings.yml`
294
+ * (the canonical wizard-written file; `EVENT4U_CONFIG_HOME` honored).
295
+ * 2. Project settings — the project's read-path settings file when the
296
+ * upgrade runs inside a consumer project that already has one.
297
+ *
298
+ * Only files that ALREADY EXIST are returned — the sync never creates a
299
+ * settings file as an upgrade side effect (fresh installs get theirs from
300
+ * the wizard / installer).
301
+ */
302
+ function _settings_sync_targets(project_root: string): string[] {
303
+ const targets: string[] = [];
304
+ const global_settings = path.join(event4u_root(), 'settings', '.agent-settings.yml');
305
+ if (_isFile(global_settings)) {
306
+ targets.push(global_settings);
307
+ }
308
+ const project_settings = project_settings_path(project_root);
309
+ if (project_settings !== global_settings && _isFile(project_settings)) {
310
+ targets.push(project_settings);
311
+ }
312
+ return targets;
313
+ }
314
+
315
+ /**
316
+ * Run the additive settings sync for every existing target — as a SUBPROCESS
317
+ * of the freshly installed binary, never in-process: after `npm install -g`
318
+ * the running module is still the OLD version, so an in-process merge would
319
+ * use the OLD template and miss exactly the new keys the upgrade shipped.
320
+ *
321
+ * Non-fatal by design: the upgrade itself already succeeded; a sync failure
322
+ * surfaces a warning + the manual command instead of failing the run.
323
+ */
324
+ function _sync_settings_files(
325
+ targets: readonly string[],
326
+ runner: (cmd: string[]) => number,
327
+ out: OutSink,
328
+ err: OutSink,
329
+ ): void {
330
+ for (const target of targets) {
331
+ const cmd = [_agent_config_bin(), 'settings:sync', '--path', target];
332
+ _print(out, '→ ' + cmd.join(' '));
333
+ let rc: number;
334
+ try {
335
+ rc = runner(cmd);
336
+ } catch (exc) {
337
+ rc = 127;
338
+ _print(err, `cannot run ${cmd[0]}: ${osErrorStr(exc)}`);
339
+ }
340
+ if (rc !== 0) {
341
+ _print(
342
+ err,
343
+ `⚠️ agent-config upgrade: settings sync failed (exit ${rc}) for ` +
344
+ `${target} — run \`agent-config settings:sync --path ${target}\` manually.`,
345
+ );
346
+ }
347
+ }
348
+ }
349
+
350
+ /**
351
+ * Refresh steps for the OPTIONAL Claude Code plugin. Non-empty only when the
352
+ * `claude` CLI is on PATH AND the plugin is recorded as installed — the file
353
+ * projection is a complete install on its own, so a missing plugin is not a
354
+ * gap to nag about. When present, the plugin must be refreshed alongside the
355
+ * global install: Claude Code pins it to the install-time git SHA, so without
356
+ * this step its command surface silently lags every upgrade.
357
+ */
358
+ function _claude_plugin_refresh_steps(): string[][] {
359
+ const claude = shutilWhich('claude');
360
+ if (claude === null) return [];
361
+ if (!claude_plugin.claude_plugin_installed()) return [];
362
+ return [
363
+ [claude, 'plugin', 'marketplace', 'update', claude_plugin.CLAUDE_MARKETPLACE_NAME],
364
+ [
365
+ claude,
366
+ 'plugin',
367
+ 'update',
368
+ `${claude_plugin.CLAUDE_PLUGIN_ID}@${claude_plugin.CLAUDE_MARKETPLACE_NAME}`,
369
+ ],
370
+ ];
371
+ }
372
+
373
+ /**
374
+ * Run the plugin-refresh steps. Non-fatal by design (same contract as the
375
+ * settings sync): the upgrade itself already succeeded; a failure surfaces a
376
+ * warning + the manual command instead of failing the run.
377
+ */
378
+ function _refresh_claude_plugin(
379
+ steps: readonly string[][],
380
+ runner: (cmd: string[]) => number,
381
+ out: OutSink,
382
+ err: OutSink,
383
+ ): void {
384
+ for (const cmd of steps) {
385
+ _print(out, '→ ' + cmd.join(' '));
386
+ let rc: number;
387
+ try {
388
+ rc = runner(cmd);
389
+ } catch (exc) {
390
+ rc = 127;
391
+ _print(err, `cannot run ${cmd[0]}: ${osErrorStr(exc)}`);
392
+ }
393
+ if (rc !== 0) {
394
+ _print(
395
+ err,
396
+ `⚠️ agent-config upgrade: Claude Code plugin refresh failed (exit ${rc}) — ` +
397
+ `run \`${cmd.join(' ')}\` manually.`,
398
+ );
399
+ return;
400
+ }
401
+ }
402
+ if (steps.length > 0) {
403
+ _print(out, 'ℹ️ Claude Code plugin refreshed — restart Claude Code to load it.');
404
+ }
405
+ }
406
+
222
407
  interface Args {
223
408
  check: boolean;
224
409
  dry_run: boolean;
@@ -321,14 +506,26 @@ export async function main(argv: string[] | null = null, options: MainOptions =
321
506
  const target = `${PACKAGE_NAME}@latest`;
322
507
  const steps: string[][] = [
323
508
  ['npm', 'install', '-g', target],
324
- [_agent_config_bin(), 'global'],
509
+ // --no-ui: the setup wizard is an onboarding surface, not an upgrade
510
+ // step — its foreground server used to block the upgrade until Ctrl-C.
511
+ [_agent_config_bin(), 'global', '--no-ui'],
325
512
  ];
326
513
 
514
+ const project_root = options.project_root ?? process.cwd();
515
+ const sync_targets = _settings_sync_targets(project_root);
516
+ const plugin_steps = _claude_plugin_refresh_steps();
517
+
327
518
  if (args.dry_run) {
328
519
  _print(out, 'agent-config upgrade — dry run, would execute:');
329
520
  for (const cmd of steps) {
330
521
  _print(out, ' ' + cmd.join(' '));
331
522
  }
523
+ for (const cmd of plugin_steps) {
524
+ _print(out, ' ' + cmd.join(' '));
525
+ }
526
+ for (const target of sync_targets) {
527
+ _print(out, ' ' + [_agent_config_bin(), 'settings:sync', '--path', target].join(' '));
528
+ }
332
529
  return 0;
333
530
  }
334
531
 
@@ -344,7 +541,20 @@ export async function main(argv: string[] | null = null, options: MainOptions =
344
541
  }
345
542
  }
346
543
 
347
- _maybe_refresh_project_wrapper(options.project_root ?? process.cwd(), out, err);
544
+ // Refresh the OPTIONAL Claude Code plugin so its command surface tracks
545
+ // the upgrade (no-op when the plugin is not installed — the file
546
+ // projection is a full install on its own).
547
+ _refresh_claude_plugin(plugin_steps, runner, out, err);
548
+
549
+ // Bring existing settings files up to the NEW template (additive; the
550
+ // subprocess resolves the freshly installed binary + template).
551
+ _sync_settings_files(sync_targets, runner, out, err);
552
+
553
+ _maybe_refresh_project_wrapper(project_root, out, err);
554
+
555
+ // Re-stamp OUR installed .git/hooks/pre-commit from the new template
556
+ // (marker-guarded; foreign hooks are never touched).
557
+ _maybe_refresh_git_hook(project_root, runner, out, err);
348
558
 
349
559
  _print(
350
560
  out,
@@ -361,10 +571,29 @@ function installed_lock_is_newer(latest: string, installed: string): boolean {
361
571
 
362
572
  // --- CLI entry ---
363
573
 
364
- const _isCliEntry =
365
- process.argv[1] !== undefined &&
366
- import.meta.url === pathToFileURL(path.resolve(process.argv[1])).href;
367
- if (_isCliEntry || process.argv[1] === _HERE) {
574
+ function _isCliEntry(): boolean {
575
+ if (process.argv[1] === undefined) {
576
+ return false;
577
+ }
578
+ const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
579
+ if (import.meta.url === argvUrl) {
580
+ return true;
581
+ }
582
+ // A symlinked invocation (e.g. via an installed `.augment/` projection,
583
+ // or macOS /var → /private/var temp dirs) makes the raw URLs differ:
584
+ // import.meta.url is the resolved real path while argv[1] keeps the
585
+ // symlink path. Compare realpaths so the entry guard still fires
586
+ // (without this the CLI silently no-ops when run through a symlink).
587
+ try {
588
+ const here = fs.realpathSync(fileURLToPath(import.meta.url));
589
+ const argv = fs.realpathSync(path.resolve(process.argv[1]));
590
+ return here === argv;
591
+ } catch {
592
+ return false;
593
+ }
594
+ }
595
+
596
+ if (_isCliEntry() || process.argv[1] === _HERE) {
368
597
  main(process.argv.slice(2))
369
598
  .then((code) => {
370
599
  process.exitCode = code;
@@ -367,10 +367,29 @@ export function main(argv: string[]): number {
367
367
 
368
368
  // --- CLI entry ---
369
369
 
370
- const _isCliEntry =
371
- process.argv[1] !== undefined &&
372
- import.meta.url === pathToFileURL(path.resolve(process.argv[1])).href;
373
- if (_isCliEntry || process.argv[1] === _HERE) {
370
+ function _isCliEntry(): boolean {
371
+ if (process.argv[1] === undefined) {
372
+ return false;
373
+ }
374
+ const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
375
+ if (import.meta.url === argvUrl) {
376
+ return true;
377
+ }
378
+ // A symlinked invocation (e.g. via an installed `.augment/` projection,
379
+ // or macOS /var → /private/var temp dirs) makes the raw URLs differ:
380
+ // import.meta.url is the resolved real path while argv[1] keeps the
381
+ // symlink path. Compare realpaths so the entry guard still fires
382
+ // (without this the CLI silently no-ops when run through a symlink).
383
+ try {
384
+ const here = fs.realpathSync(fileURLToPath(import.meta.url));
385
+ const argv = fs.realpathSync(path.resolve(process.argv[1]));
386
+ return here === argv;
387
+ } catch {
388
+ return false;
389
+ }
390
+ }
391
+
392
+ if (_isCliEntry() || process.argv[1] === _HERE) {
374
393
  try {
375
394
  process.exitCode = main(process.argv.slice(2));
376
395
  } catch (e) {
@@ -476,10 +476,29 @@ export function main(argv: string[] | null = null, options: MainOptions = {}): n
476
476
  // Python: `if __name__ == "__main__": raise SystemExit(main())` (no argv slice;
477
477
  // argparse reads sys.argv[1:] inside `_parse` default).
478
478
  const _HERE = fileURLToPath(import.meta.url);
479
- const _isCliEntry =
480
- process.argv[1] !== undefined &&
481
- import.meta.url === pathToFileURL(path.resolve(process.argv[1])).href;
482
- if (_isCliEntry || process.argv[1] === _HERE) {
479
+ function _isCliEntry(): boolean {
480
+ if (process.argv[1] === undefined) {
481
+ return false;
482
+ }
483
+ const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
484
+ if (import.meta.url === argvUrl) {
485
+ return true;
486
+ }
487
+ // A symlinked invocation (e.g. via an installed `.augment/` projection,
488
+ // or macOS /var → /private/var temp dirs) makes the raw URLs differ:
489
+ // import.meta.url is the resolved real path while argv[1] keeps the
490
+ // symlink path. Compare realpaths so the entry guard still fires
491
+ // (without this the CLI silently no-ops when run through a symlink).
492
+ try {
493
+ const here = fs.realpathSync(fileURLToPath(import.meta.url));
494
+ const argv = fs.realpathSync(path.resolve(process.argv[1]));
495
+ return here === argv;
496
+ } catch {
497
+ return false;
498
+ }
499
+ }
500
+
501
+ if (_isCliEntry() || process.argv[1] === _HERE) {
483
502
  try {
484
503
  process.exitCode = main();
485
504
  } catch (exc) {
@@ -13,7 +13,7 @@
13
13
  # * CWD on entry is the consumer's repo root — we keep it that way
14
14
  # so underlying scripts resolve paths correctly.
15
15
  # * PACKAGE_ROOT is derived from this script's location, used only to
16
- # locate the package-internal Python scripts (mcp_render.py, …).
16
+ # locate the package-internal TypeScript scripts (mcp_render.ts, …).
17
17
  # * Unknown arguments are forwarded verbatim to the underlying script.
18
18
 
19
19
  set -euo pipefail
@@ -138,19 +138,26 @@ Tier 2 — maintenance / internal (hooks, MCP, memory, telemetry):
138
138
  mcp:render Render mcp.json → .cursor/mcp.json, .windsurf/mcp.json
139
139
  (pass --claude-desktop to also write user-scope config)
140
140
  mcp:check Dry-run mcp:render; exit non-zero if targets are stale
141
- mcp:setup Create .venv-mcp/ and install the mcp SDK
141
+ mcp:setup Verify the tsx runtime + MCP server module and
142
+ print the client config snippet
142
143
  (one-line MCP server onboarding; idempotent)
143
144
  mcp:run Run the built-in MCP server over stdio
144
145
  (requires `mcp:setup` first; see docs/mcp-server.md)
145
146
  (experimental — beta gates: docs/contracts/mcp-beta-criteria.md)
146
147
  roadmap:progress Regenerate agents/roadmaps-progress.md from open roadmaps
147
148
  roadmap:progress-check Fail if agents/roadmaps-progress.md is stale (for CI)
149
+ roadmap:archive Archive completed roadmaps (branch-touched by default;
150
+ --all for every complete one; --dry-run to preview)
148
151
  capabilities:index Regenerate CAPABILITIES.yaml — the package coverage index
149
152
  (capability area → coverage → backing skills/commands → gaps).
150
153
  Pass --check to fail if stale (for CI). Reads src/ (package repo).
151
154
  settings:check Validate .agent-settings.yml against the YAML-subset contract
152
155
  (docs/contracts/settings-sync-yaml-subset.md). Read-only.
153
156
  Exit 0 clean, 1 finding(s), 2 file absent / unreadable.
157
+ settings:sync Additively merge new template keys into an existing
158
+ .agent-settings.yml (user lines preserved verbatim).
159
+ Run automatically by `upgrade`. Flags: --path <file>
160
+ | --dry-run | --check (exit 2 on drift) | --profile.
154
161
  settings:migrate Lift project-local .agent-settings.yml / .agent-user.yml into
155
162
  ~/.event4u/agent-config/ (the global-only consumer surface,
156
163
  ADR-020). Idempotent; --force overwrites a non-empty global
@@ -284,20 +291,35 @@ print_version() {
284
291
  fi
285
292
  }
286
293
 
287
- # Resolve the tsx runner (Python→TypeScript migration). Sets TSX_BIN to the
288
- # repo-local binary when present, else `npx tsx`. Exits 127 if neither works
289
- # since the runtime is now Node/tsx and there is no Python fallback.
294
+ # Resolve the tsx runner (Python→TypeScript migration). tsx ships as a
295
+ # RUNTIME dependency of the package, so the package-local install is the
296
+ # canonical source — first via node_modules/.bin, then via the module's CLI
297
+ # entry (covers installs where .bin shims are missing). `npx tsx` is a last
298
+ # resort only: npx runs against the CONSUMER project's cwd, so its npm config
299
+ # and devEngines/engines constraints apply — a consumer pinning e.g.
300
+ # `node <24` hard-fails every hook and TS command with EBADDEVENGINES (the
301
+ # 8.1.0 regression that silently broke hooks + roadmap:progress in consumer
302
+ # projects). Exits 127 when nothing works — the runtime is Node/tsx, there is
303
+ # no Python fallback.
290
304
  require_tsx() {
291
305
  if [[ -x "$PACKAGE_ROOT/node_modules/.bin/tsx" ]]; then
292
306
  TSX_BIN="$PACKAGE_ROOT/node_modules/.bin/tsx"
293
307
  return 0
294
308
  fi
309
+ if [[ -f "$PACKAGE_ROOT/node_modules/tsx/dist/cli.mjs" ]] && command -v node >/dev/null 2>&1; then
310
+ TSX_BIN="node $PACKAGE_ROOT/node_modules/tsx/dist/cli.mjs"
311
+ return 0
312
+ fi
295
313
  if command -v npx >/dev/null 2>&1; then
314
+ echo "⚠️ agent-config: package-local tsx not found — falling back to \`npx tsx\`" >&2
315
+ echo " (subject to this project's npm config; reinstall the package to fix:" >&2
316
+ echo " npm install -g @event4u/agent-config)" >&2
296
317
  TSX_BIN="npx tsx"
297
318
  return 0
298
319
  fi
299
- echo "❌ agent-config: tsx runner not found on PATH" >&2
300
- echo " Run \`npm install\` in the package to provide node_modules/.bin/tsx." >&2
320
+ echo "❌ agent-config: tsx runner not found" >&2
321
+ echo " Reinstall the package (npm install -g @event4u/agent-config) to provide" >&2
322
+ echo " node_modules/tsx, or run \`npm install\` at the package root." >&2
301
323
  exit 127
302
324
  }
303
325
 
@@ -335,7 +357,7 @@ exec_hook() {
335
357
 
336
358
  # Locate a script. First argument is relative to PACKAGE_ROOT, second is
337
359
  # an optional fallback relative to CONSUMER_ROOT (for scripts that ship
338
- # to the consumer via .augment/, e.g. update_roadmap_progress.py).
360
+ # to the consumer via .augment/, e.g. update_roadmap_progress.ts).
339
361
  resolve_script() {
340
362
  local pkg_rel="$1"
341
363
  local consumer_rel="${2-}"
@@ -422,6 +444,14 @@ cmd_roadmap_progress_check() {
422
444
  exec_ts "$script" --check "$@"
423
445
  }
424
446
 
447
+ # The PR-gate archival sweep (`/create-pr` § 1c and roadmap-progress-sync's
448
+ # PR-gate) instructs `./agent-config roadmap:archive` — this is that command.
449
+ cmd_roadmap_archive() {
450
+ local script
451
+ script="$(resolve_script "dist/agent-src/scripts/archive_completed_roadmaps.ts" ".augment/scripts/archive_completed_roadmaps.ts")"
452
+ exec_ts "$script" "$@"
453
+ }
454
+
425
455
  cmd_capabilities_index() {
426
456
  local script
427
457
  script="$(resolve_script "src/scripts/generate_capabilities_index.ts")"
@@ -593,7 +623,7 @@ Three modes, picked by flag combination:
593
623
  at the consumer root. Idempotent.
594
624
 
595
625
  --regen Provision the roadmap-progress regenerator at
596
- .augment/scripts/update_roadmap_progress.py
626
+ .augment/scripts/update_roadmap_progress.ts
597
627
  (canonical path per docs/contracts/hook-architecture-v1.md
598
628
  § Regenerator location). Idempotent.
599
629
 
@@ -793,7 +823,7 @@ cmd_keys_install_openai() {
793
823
 
794
824
  # Council CLI — non-interactive wrapper around scripts.ai_council.orchestrator.
795
825
  # Three subcommands share one Python entry point; we forward the subcommand
796
- # verb so `./agent-config council:run --confirm` lands on `council_cli.py run`.
826
+ # verb so `./agent-config council:run --confirm` lands on `council_cli.ts run`.
797
827
  cmd_council() {
798
828
  local sub="$1"; shift || true
799
829
  local script
@@ -811,7 +841,7 @@ cmd_use() {
811
841
  }
812
842
 
813
843
  # `agent-config update` — flip the agent_config_version pin in
814
- # .agent-settings.yml. See scripts/_cli/cmd_update.py (P3.1 of
844
+ # .agent-settings.yml. See scripts/_cli/cmd_update.ts (P3.1 of
815
845
  # road-to-portable-runtime-and-update-check.md).
816
846
  cmd_update() {
817
847
  exec_ts "$PACKAGE_ROOT/src/scripts/_cli/cmd_update.ts" "$@"
@@ -826,7 +856,7 @@ cmd_refresh() {
826
856
  }
827
857
 
828
858
  # `agent-config migrate` — one-shot migration off legacy composer / npm
829
- # install paths onto the npx-only runtime. See scripts/_cli/cmd_migrate.py
859
+ # install paths onto the npx-only runtime. See scripts/_cli/cmd_migrate.ts
830
860
  # (P3.5 of road-to-portable-runtime-and-update-check.md).
831
861
  cmd_migrate() {
832
862
  exec_ts "$PACKAGE_ROOT/src/scripts/_cli/cmd_migrate.ts" "$@"
@@ -845,7 +875,7 @@ cmd_init() {
845
875
  # `agent-config global` — user-scope install entry point. Forwards to the
846
876
  # bash installer with `--global` set (ADR-007). Phase 1.2 of
847
877
  # road-to-global-first-install.md. The bash wrapper handles option parsing
848
- # and forwards to `scripts/install.py --global`, where `install_global()`
878
+ # and forwards to `scripts/install.ts --global`, where `install_global()`
849
879
  # currently scaffolds the per-tool anchor paths from USER_SCOPE_PATHS.
850
880
  # Concrete writes land in Phase 1.5 (export) and Phase 1.6 (lockfile).
851
881
  cmd_global() {
@@ -857,7 +887,7 @@ cmd_global() {
857
887
  # `agent-config export` — write a tool's canonical content into a
858
888
  # user-chosen path. ADR-007 D3 / Phase 1.5 of
859
889
  # road-to-global-first-install.md. Replaces the rejected symlink-bridge.
860
- # See scripts/_cli/cmd_export.py for the registry and idempotency logic.
890
+ # See scripts/_cli/cmd_export.ts for the registry and idempotency logic.
861
891
  cmd_export() {
862
892
  exec_ts "$PACKAGE_ROOT/src/scripts/_cli/cmd_export.ts" "$@"
863
893
  }
@@ -884,6 +914,17 @@ cmd_settings_check() {
884
914
  exec_ts "$PACKAGE_ROOT/src/scripts/_cli/cmd_settings_check.ts" "$@"
885
915
  }
886
916
 
917
+ # `agent-config settings:sync` — additive merge of the current
918
+ # agent-settings template into an existing .agent-settings.yml. User lines
919
+ # are preserved verbatim; only missing template keys are inserted.
920
+ # Idempotent. Invoked automatically by `agent-config upgrade` for every
921
+ # existing settings file (global + project) so nobody keeps stale settings
922
+ # after a release. Flags: --path <file> | --dry-run | --check | --profile.
923
+ # Exit 0 in-sync / updated, 2 drift under --check or bad input.
924
+ cmd_settings_sync() {
925
+ exec_ts "$PACKAGE_ROOT/src/scripts/sync_agent_settings.ts" "$@"
926
+ }
927
+
887
928
  # `agent-config settings:migrate` — lift project-local
888
929
  # .agent-settings.yml / .agent-user.yml into ~/.event4u/agent-config/.
889
930
  # Phase 2.4 of road-to-global-only-install.md. Read-only on the source —
@@ -897,7 +938,7 @@ cmd_settings_migrate() {
897
938
  # `agent-config uninstall` — remove bridge markers (project) or lockfile
898
939
  # entries (global). Idempotent. Pass `--purge` to also delete deployed
899
940
  # content directories under user-scope anchors (destructive). See
900
- # scripts/_cli/cmd_uninstall.py.
941
+ # scripts/_cli/cmd_uninstall.ts.
901
942
  cmd_uninstall() {
902
943
  exec_ts "$PACKAGE_ROOT/src/scripts/_cli/cmd_uninstall.ts" "$@"
903
944
  }
@@ -906,14 +947,14 @@ cmd_uninstall() {
906
947
  # Drift-cleanup sibling to `uninstall`: compares on-disk markers
907
948
  # against agents/installed-tools.lock and unlinks anything not
908
949
  # declared. Hard-floors when lockfile is absent. See
909
- # scripts/_cli/cmd_prune.py.
950
+ # scripts/_cli/cmd_prune.ts.
910
951
  cmd_prune() {
911
952
  exec_ts "$PACKAGE_ROOT/src/scripts/_cli/cmd_prune.ts" "$@"
912
953
  }
913
954
 
914
955
  # `agent-config doctor` — read-only drift report against the manifest.
915
956
  # Surfaces missing / modified / foreign files. Exit 0 clean, 1 drift,
916
- # 2 manifest-absent. See scripts/_cli/cmd_doctor.py.
957
+ # 2 manifest-absent. See scripts/_cli/cmd_doctor.ts.
917
958
  cmd_doctor() {
918
959
  exec_ts "$PACKAGE_ROOT/src/scripts/_cli/cmd_doctor.ts" "$@"
919
960
  }
@@ -930,14 +971,14 @@ cmd_conformance() {
930
971
  # `agent-config versions` — list available @event4u/agent-config versions
931
972
  # on the npm registry. Marks the current pin (from .agent-settings.yml)
932
973
  # and the latest published version. Offline-tolerant. See
933
- # scripts/_cli/cmd_versions.py.
974
+ # scripts/_cli/cmd_versions.ts.
934
975
  cmd_versions() {
935
976
  exec_ts "$PACKAGE_ROOT/src/scripts/_cli/cmd_versions.ts" "$@"
936
977
  }
937
978
 
938
979
  # `agent-config explain <config|rule|route>` — print the decision chain
939
980
  # behind a configuration or routing outcome. Read-only diagnostic; never
940
- # edits state. See scripts/_cli/cmd_explain.py.
981
+ # edits state. See scripts/_cli/cmd_explain.ts.
941
982
  cmd_explain() {
942
983
  exec_ts "$PACKAGE_ROOT/src/scripts/_cli/cmd_explain.ts" "$@"
943
984
  }
@@ -961,6 +1002,7 @@ main() {
961
1002
  use) cmd_use "$@" ;;
962
1003
  roadmap:progress) cmd_roadmap_progress "$@" ;;
963
1004
  roadmap:progress-check) cmd_roadmap_progress_check "$@" ;;
1005
+ roadmap:archive) cmd_roadmap_archive "$@" ;;
964
1006
  capabilities:index) cmd_capabilities_index "$@" ;;
965
1007
  hooks:install) cmd_hooks_install "$@" ;;
966
1008
  keys:install-anthropic) cmd_keys_install_anthropic "$@" ;;
@@ -1001,6 +1043,7 @@ main() {
1001
1043
  sync) cmd_sync "$@" ;;
1002
1044
  validate) cmd_validate "$@" ;;
1003
1045
  settings:check) cmd_settings_check "$@" ;;
1046
+ settings:sync) cmd_settings_sync "$@" ;;
1004
1047
  settings:migrate) cmd_settings_migrate "$@" ;;
1005
1048
  uninstall) cmd_uninstall "$@" ;;
1006
1049
  prune) cmd_prune "$@" ;;
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Claude Code plugin detection helpers — shared by `cmd_upgrade`,
3
+ * `cmd_doctor`, and the installer.
4
+ *
5
+ * Claude Code loads the FULL top-level command set (`/implement-ticket`,
6
+ * `/work`, `/review-changes`, …) from the installed plugin
7
+ * (`agent-config@event4u-agent-config`), NOT from the `~/.claude/commands/`
8
+ * file projection. A file-only install therefore silently misses top-level
9
+ * commands while namespaced subcommands (`/fix:pr-comments`, …) keep working
10
+ * — and an installed plugin stays pinned to its install-time git SHA until
11
+ * `claude plugin update` runs. These helpers detect both states so
12
+ * upgrade / doctor / install can refresh the plugin or surface the gap.
13
+ */
14
+
15
+ import * as fs from 'node:fs';
16
+ import * as os from 'node:os';
17
+ import * as path from 'node:path';
18
+ import process from 'node:process';
19
+
20
+ export const CLAUDE_PLUGIN_ID = 'agent-config';
21
+ export const CLAUDE_MARKETPLACE_NAME = 'event4u-agent-config';
22
+ export const CLAUDE_MARKETPLACE_REPO = 'event4u-app/agent-config';
23
+
24
+ /** The one-time install commands surfaced when the plugin is missing. */
25
+ export const CLAUDE_PLUGIN_INSTALL_HINT: readonly string[] = [
26
+ `claude plugin marketplace add ${CLAUDE_MARKETPLACE_REPO}`,
27
+ `claude plugin install ${CLAUDE_PLUGIN_ID}@${CLAUDE_MARKETPLACE_NAME}`,
28
+ ];
29
+
30
+ /** Claude Code config dir — `CLAUDE_CONFIG_DIR` env override, else `~/.claude`. */
31
+ export function claude_config_dir(): string {
32
+ const env = (process.env['CLAUDE_CONFIG_DIR'] ?? '').trim();
33
+ return env !== '' ? env : path.join(os.homedir(), '.claude');
34
+ }
35
+
36
+ /**
37
+ * True when the agent-config plugin is recorded in Claude Code's
38
+ * `plugins/installed_plugins.json` (any marketplace — matched by the
39
+ * `agent-config@` id prefix). Unreadable / absent file → false.
40
+ */
41
+ export function claude_plugin_installed(): boolean {
42
+ const p = path.join(claude_config_dir(), 'plugins', 'installed_plugins.json');
43
+ let data: unknown;
44
+ try {
45
+ data = JSON.parse(fs.readFileSync(p, 'utf-8'));
46
+ } catch {
47
+ return false;
48
+ }
49
+ if (data === null || typeof data !== 'object') return false;
50
+ const plugins = (data as { plugins?: unknown }).plugins;
51
+ if (plugins === null || plugins === undefined || typeof plugins !== 'object') return false;
52
+ return Object.keys(plugins as Record<string, unknown>).some((k) =>
53
+ k.startsWith(`${CLAUDE_PLUGIN_ID}@`),
54
+ );
55
+ }
56
+
57
+ /**
58
+ * Version recorded in the installed marketplace snapshot's
59
+ * `.claude-plugin/marketplace.json` (`metadata.version` — bumped per
60
+ * release, so it tracks the package version the snapshot was taken from).
61
+ * Null when the snapshot is absent or unreadable.
62
+ */
63
+ export function claude_plugin_snapshot_version(): string | null {
64
+ const p = path.join(
65
+ claude_config_dir(),
66
+ 'plugins',
67
+ 'marketplaces',
68
+ CLAUDE_MARKETPLACE_NAME,
69
+ '.claude-plugin',
70
+ 'marketplace.json',
71
+ );
72
+ let data: unknown;
73
+ try {
74
+ data = JSON.parse(fs.readFileSync(p, 'utf-8'));
75
+ } catch {
76
+ return null;
77
+ }
78
+ if (data === null || typeof data !== 'object') return null;
79
+ const metadata = (data as { metadata?: unknown }).metadata;
80
+ if (metadata === null || metadata === undefined || typeof metadata !== 'object') return null;
81
+ const v = (metadata as { version?: unknown }).version;
82
+ return typeof v === 'string' && v.trim() !== '' ? v.trim() : null;
83
+ }