@event4u/agent-config 8.1.0 → 8.3.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 (615) hide show
  1. package/.claude-plugin/marketplace.json +3 -3
  2. package/CHANGELOG.md +83 -292
  3. package/MIGRATION.md +18 -0
  4. package/README.md +86 -3
  5. package/dist/agent-src/commands/agents/init.md +3 -3
  6. package/dist/agent-src/commands/chat-history/import.md +5 -5
  7. package/dist/agent-src/commands/chat-history.md +1 -1
  8. package/dist/agent-src/commands/condense.md +1 -1
  9. package/dist/agent-src/commands/context/create.md +1 -1
  10. package/dist/agent-src/commands/council/analysis.md +2 -2
  11. package/dist/agent-src/commands/council/default.md +3 -3
  12. package/dist/agent-src/commands/council/design.md +2 -2
  13. package/dist/agent-src/commands/council/optimize.md +1 -1
  14. package/dist/agent-src/commands/council/pr.md +2 -2
  15. package/dist/agent-src/commands/council.md +1 -1
  16. package/dist/agent-src/commands/feature/plan.md +1 -1
  17. package/dist/agent-src/commands/ghostwriter/list.md +1 -1
  18. package/dist/agent-src/commands/ghostwriter/write.md +1 -1
  19. package/dist/agent-src/commands/ghostwriter.md +1 -1
  20. package/dist/agent-src/commands/implement-ticket.md +2 -2
  21. package/dist/agent-src/commands/judge/on-diff.md +1 -1
  22. package/dist/agent-src/commands/judge/steps.md +3 -1
  23. package/dist/agent-src/commands/memory/add.md +2 -2
  24. package/dist/agent-src/commands/memory/learn-low-impact.md +1 -1
  25. package/dist/agent-src/commands/memory/load.md +1 -1
  26. package/dist/agent-src/commands/memory/mine-session.md +1 -1
  27. package/dist/agent-src/commands/memory/promote.md +1 -1
  28. package/dist/agent-src/commands/memory/propose.md +1 -1
  29. package/dist/agent-src/commands/mission/upgrade.md +1 -1
  30. package/dist/agent-src/commands/module/explore.md +3 -3
  31. package/dist/agent-src/commands/optimize/agents-dir.md +1 -1
  32. package/dist/agent-src/commands/optimize/skills.md +1 -1
  33. package/dist/agent-src/commands/optimize-project.md +1 -1
  34. package/dist/agent-src/commands/orchestrate.md +2 -2
  35. package/dist/agent-src/commands/project-analyze.md +1 -1
  36. package/dist/agent-src/commands/project-health.md +1 -1
  37. package/dist/agent-src/commands/roadmap/ai-council.md +1 -1
  38. package/dist/agent-src/commands/roadmap/create.md +2 -2
  39. package/dist/agent-src/commands/roadmap/process-full.md +3 -1
  40. package/dist/agent-src/commands/roadmap/process-phase.md +4 -2
  41. package/dist/agent-src/commands/roadmap/process-step.md +3 -1
  42. package/dist/agent-src/commands/security-audit-config.md +1 -1
  43. package/dist/agent-src/commands/sync-agent-settings.md +7 -7
  44. package/dist/agent-src/commands/sync-gitignore/fix.md +3 -3
  45. package/dist/agent-src/commands/sync-gitignore.md +4 -4
  46. package/dist/agent-src/commands/work.md +3 -3
  47. package/dist/agent-src/contexts/communication/rules-auto/skill-quality-mechanics.md +1 -1
  48. package/dist/agent-src/contexts/communication/rules-auto/slash-command-routing-policy-mechanics.md +2 -2
  49. package/dist/agent-src/contexts/contracts/artifact-engagement-flow.md +1 -1
  50. package/dist/agent-src/contexts/contracts/command-suggestion-flow.md +8 -7
  51. package/dist/agent-src/contexts/execution/evidence-discipline.md +2 -2
  52. package/dist/agent-src/contexts/execution/roadmap-process-loop.md +9 -4
  53. package/dist/agent-src/contexts/execution/toolchain-resolver.md +10 -9
  54. package/dist/agent-src/contexts/execution/verification-mechanics.md +13 -1
  55. package/dist/agent-src/packs/README.md +1 -1
  56. package/dist/agent-src/presets/README.md +1 -1
  57. package/dist/agent-src/profiles/README.md +1 -1
  58. package/dist/agent-src/rules/architecture.md +2 -2
  59. package/dist/agent-src/rules/context-hygiene.md +2 -2
  60. package/dist/agent-src/rules/fast-path-marker-visibility.md +1 -1
  61. package/dist/agent-src/rules/framework-neutrality-in-generic-skills.md +1 -1
  62. package/dist/agent-src/rules/linked-projects-onboarding-gate.md +1 -1
  63. package/dist/agent-src/rules/low-impact-corpus-privacy-floor.md +3 -3
  64. package/dist/agent-src/rules/media-governance-routing.md +1 -1
  65. package/dist/agent-src/rules/no-roadmap-references.md +3 -3
  66. package/dist/agent-src/rules/preservation-guard.md +2 -2
  67. package/dist/agent-src/rules/roadmap-ci-steps-policy.md +6 -5
  68. package/dist/agent-src/rules/roadmap-progress-sync.md +3 -3
  69. package/dist/agent-src/rules/security-sensitive-stop.md +7 -9
  70. package/dist/agent-src/rules/source-confidentiality.md +1 -1
  71. package/dist/agent-src/rules/telegraph-speak.md +1 -1
  72. package/dist/agent-src/rules/token-optimizer-maintenance.md +1 -1
  73. package/dist/agent-src/rules/ui-audit-gate.md +1 -1
  74. package/dist/agent-src/scripts/archive_completed_roadmaps.ts +22 -4
  75. package/dist/agent-src/scripts/update_roadmap_progress.ts +29 -1
  76. package/dist/agent-src/skills/accessibility-auditor/SKILL.md +3 -2
  77. package/dist/agent-src/skills/adr-create/SKILL.md +8 -6
  78. package/dist/agent-src/skills/agent-docs-writing/SKILL.md +1 -1
  79. package/dist/agent-src/skills/agents-md-thin-root/SKILL.md +2 -2
  80. package/dist/agent-src/skills/ai-council/SKILL.md +15 -15
  81. package/dist/agent-src/skills/api-design/SKILL.md +1 -1
  82. package/dist/agent-src/skills/api-endpoint/SKILL.md +2 -1
  83. package/dist/agent-src/skills/authz-review/SKILL.md +1 -1
  84. package/dist/agent-src/skills/blade-ui/SKILL.md +11 -10
  85. package/dist/agent-src/skills/blameless-post-mortem/SKILL.md +9 -8
  86. package/dist/agent-src/skills/code-review/SKILL.md +3 -4
  87. package/dist/agent-src/skills/command-routing/SKILL.md +3 -3
  88. package/dist/agent-src/skills/command-writing/SKILL.md +3 -3
  89. package/dist/agent-src/skills/condense-memory/SKILL.md +2 -2
  90. package/dist/agent-src/skills/context-authoring/SKILL.md +1 -1
  91. package/dist/agent-src/skills/context-document/SKILL.md +1 -1
  92. package/dist/agent-src/skills/copilot-agents-optimization/SKILL.md +1 -1
  93. package/dist/agent-src/skills/corpus-grounding/SKILL.md +16 -11
  94. package/dist/agent-src/skills/corpus-grounding/scripts/ground.ts +24 -3
  95. package/dist/agent-src/skills/dashboard-design/SKILL.md +2 -1
  96. package/dist/agent-src/skills/database/SKILL.md +2 -1
  97. package/dist/agent-src/skills/description-assist/SKILL.md +6 -6
  98. package/dist/agent-src/skills/design-intelligence/SKILL.md +6 -5
  99. package/dist/agent-src/skills/design-tokens/SKILL.md +5 -5
  100. package/dist/agent-src/skills/design-tokens/scripts/tokens.ts +24 -3
  101. package/dist/agent-src/skills/existing-ui-audit/SKILL.md +3 -3
  102. package/dist/agent-src/skills/fe-design/SKILL.md +7 -7
  103. package/dist/agent-src/skills/finishing-a-development-branch/SKILL.md +11 -4
  104. package/dist/agent-src/skills/flux/SKILL.md +10 -9
  105. package/dist/agent-src/skills/git-workflow/SKILL.md +4 -5
  106. package/dist/agent-src/skills/guideline-writing/SKILL.md +2 -2
  107. package/dist/agent-src/skills/learning-to-rule-or-skill/SKILL.md +2 -2
  108. package/dist/agent-src/skills/livewire/SKILL.md +10 -9
  109. package/dist/agent-src/skills/memory-consolidation/SKILL.md +2 -2
  110. package/dist/agent-src/skills/module-detect-on-the-fly/SKILL.md +5 -5
  111. package/dist/agent-src/skills/module-management/SKILL.md +2 -2
  112. package/dist/agent-src/skills/prediction-pool-optimizer/SKILL.md +11 -11
  113. package/dist/agent-src/skills/prediction-pool-optimizer/reference/ev-fixtures.md +6 -6
  114. package/dist/agent-src/skills/prediction-pool-optimizer/reference/odds-and-bonus.md +1 -1
  115. package/dist/agent-src/skills/premortem/SKILL.md +1 -1
  116. package/dist/agent-src/skills/project-docs/SKILL.md +1 -1
  117. package/dist/agent-src/skills/quality-tools/SKILL.md +26 -2
  118. package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +8 -7
  119. package/dist/agent-src/skills/react-shadcn-ui/scripts/shadcn_add.ts +31 -10
  120. package/dist/agent-src/skills/refine-prompt/SKILL.md +14 -14
  121. package/dist/agent-src/skills/refine-ticket/SKILL.md +24 -25
  122. package/dist/agent-src/skills/refine-ticket/detection-map.yml +1 -1
  123. package/dist/agent-src/skills/review-routing/SKILL.md +6 -7
  124. package/dist/agent-src/skills/roadmap-management/SKILL.md +11 -6
  125. package/dist/agent-src/skills/rule-refactor/SKILL.md +1 -1
  126. package/dist/agent-src/skills/rule-writing/SKILL.md +5 -5
  127. package/dist/agent-src/skills/script-writing/SKILL.md +28 -41
  128. package/dist/agent-src/skills/skill-writing/SKILL.md +3 -3
  129. package/dist/agent-src/skills/source-discovery/SKILL.md +3 -3
  130. package/dist/agent-src/skills/sql-writing/SKILL.md +2 -1
  131. package/dist/agent-src/skills/subagent-orchestration/SKILL.md +1 -1
  132. package/dist/agent-src/skills/systematic-debugging/SKILL.md +5 -7
  133. package/dist/agent-src/skills/tailwind-engineer/SKILL.md +2 -2
  134. package/dist/agent-src/skills/tailwind-engineer/scripts/tailwind_config_gen.ts +25 -4
  135. package/dist/agent-src/skills/token-optimizer/SKILL.md +1 -1
  136. package/dist/agent-src/skills/typography-system/SKILL.md +1 -1
  137. package/dist/agent-src/skills/validate-feature-fit/SKILL.md +5 -7
  138. package/dist/agent-src/skills/verify-completion-evidence/SKILL.md +13 -1
  139. package/dist/agent-src/templates/agent-settings.md +34 -25
  140. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +3 -3
  141. package/dist/agent-src/templates/agents/memory/incident-learnings.example.yml +1 -1
  142. package/dist/agent-src/templates/agents/proposal.example.md +4 -4
  143. package/dist/agent-src/templates/copilot-instructions.md +1 -1
  144. package/dist/agent-src/templates/github-workflows/memory-hygiene.yml +10 -10
  145. package/dist/agent-src/templates/github-workflows/pr-risk-review.yml +19 -8
  146. package/dist/agent-src/templates/github-workflows/proposal-drift.yml +11 -8
  147. package/dist/agent-src/templates/github-workflows/roadmap-progress-check.yml +10 -12
  148. package/dist/agent-src/templates/hooks/pre-commit-frontmatter +21 -11
  149. package/dist/agent-src/templates/hooks/pre-commit-roadmap-progress +43 -29
  150. package/dist/agent-src/templates/roadmaps.md +9 -4
  151. package/dist/agent-src/templates/rule.md +3 -3
  152. package/dist/agent-src/templates/scripts/README.md +6 -6
  153. package/dist/agent-src/templates/scripts/check_memory.ts +24 -2
  154. package/dist/agent-src/templates/scripts/check_memory_proposal.ts +23 -4
  155. package/dist/agent-src/templates/scripts/historical-bug-patterns.example.yml +1 -1
  156. package/dist/agent-src/templates/scripts/memory_hash.ts +24 -2
  157. package/dist/agent-src/templates/scripts/memory_lookup.ts +24 -2
  158. package/dist/agent-src/templates/scripts/memory_report.ts +24 -2
  159. package/dist/agent-src/templates/scripts/memory_signal.ts +24 -2
  160. package/dist/agent-src/templates/scripts/memory_status.ts +26 -2
  161. package/dist/agent-src/templates/scripts/ownership-map.example.yml +1 -1
  162. package/dist/agent-src/templates/scripts/pr-risk-config.example.yml +1 -1
  163. package/dist/agent-src/templates/scripts/pr_review_routing.ts +24 -3
  164. package/dist/agent-src/templates/scripts/pr_risk_review.ts +0 -0
  165. package/dist/agent-src/templates/scripts/telemetry_record.ts +24 -3
  166. package/dist/agent-src/templates/scripts/telemetry_report.ts +25 -3
  167. package/dist/agent-src/templates/scripts/telemetry_status.ts +24 -3
  168. package/dist/agent-src/templates/scripts/tier_usage_report.ts +24 -2
  169. package/dist/agent-src/templates/scripts/work_engine/_lib/agent_settings.ts +44 -10
  170. package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/_chat_history_base.ts +26 -13
  171. package/dist/agent-src/templates/skill.md +2 -2
  172. package/dist/cli/python/knowledge_ingest.js +24 -3
  173. package/dist/cli/python/knowledge_ingest.js.map +1 -1
  174. package/dist/cli/python/workspace_analytics.js +23 -3
  175. package/dist/cli/python/workspace_analytics.js.map +1 -1
  176. package/dist/cli/python/workspace_crypto.js +23 -3
  177. package/dist/cli/python/workspace_crypto.js.map +1 -1
  178. package/dist/cli/python/workspace_documents.js +23 -3
  179. package/dist/cli/python/workspace_documents.js.map +1 -1
  180. package/dist/cli/python/workspace_drive.js +24 -3
  181. package/dist/cli/python/workspace_drive.js.map +1 -1
  182. package/dist/cli/python/workspace_drive_health.js +23 -3
  183. package/dist/cli/python/workspace_drive_health.js.map +1 -1
  184. package/dist/cli/python/workspace_explain.js +23 -3
  185. package/dist/cli/python/workspace_explain.js.map +1 -1
  186. package/dist/cli/python/workspace_hosts.js +23 -3
  187. package/dist/cli/python/workspace_hosts.js.map +1 -1
  188. package/dist/cli/python/workspace_inbox.js +23 -3
  189. package/dist/cli/python/workspace_inbox.js.map +1 -1
  190. package/dist/cli/python/workspace_render.js +23 -3
  191. package/dist/cli/python/workspace_render.js.map +1 -1
  192. package/dist/cli/python/workspace_roles.js +23 -3
  193. package/dist/cli/python/workspace_roles.js.map +1 -1
  194. package/dist/cli/python/workspace_sessions.js +23 -3
  195. package/dist/cli/python/workspace_sessions.js.map +1 -1
  196. package/dist/cli/python/workspace_skills.js +23 -3
  197. package/dist/cli/python/workspace_skills.js.map +1 -1
  198. package/dist/cli/registry.js +2 -0
  199. package/dist/cli/registry.js.map +1 -1
  200. package/dist/discovery/deprecation-report.md +1 -1
  201. package/dist/discovery/discovery-manifest.json +118 -118
  202. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  203. package/dist/discovery/discovery-manifest.summary.md +2 -2
  204. package/dist/discovery/orphan-report.md +1 -1
  205. package/dist/discovery/packs.json +3 -3
  206. package/dist/discovery/trust-report.md +1 -1
  207. package/dist/discovery/workspaces.json +3 -3
  208. package/dist/install/install.mjs +647 -408
  209. package/dist/mcp/registry-manifest.json +3 -3
  210. package/dist/server/routes/settings.js +4 -4
  211. package/dist/server/routes/settings.js.map +1 -1
  212. package/dist/server/schemas/settings.js +1 -1
  213. package/dist/server/schemas/settings.js.map +1 -1
  214. package/docs/CLAIMS.md +2 -2
  215. package/docs/archive/CHANGELOG-pre-8.1.0.md +316 -0
  216. package/docs/benchmark.md +40 -0
  217. package/docs/contracts/CHANGELOG-conventions.md +8 -5
  218. package/docs/contracts/branch-protection-policy.md +14 -5
  219. package/docs/contracts/mcp-phase-1-scope.md +75 -0
  220. package/docs/contracts/mcp-tool-inventory.md +22 -15
  221. package/docs/contracts/release-pr-gating.md +22 -11
  222. package/docs/contracts/skill-bundled-assets.md +2 -2
  223. package/docs/customization.md +1 -1
  224. package/docs/decisions/ADR-110-discipline-profile-resolution-locus.md +9 -4
  225. package/docs/decisions/ADR-111-canonical-glama-listing.md +97 -0
  226. package/docs/decisions/ADR-112-stdio-lite-stays-read-only.md +92 -0
  227. package/docs/decisions/ADR-113-ci-native-release-label-trigger.md +201 -0
  228. package/docs/decisions/INDEX.md +3 -0
  229. package/docs/distribution/registry-submissions.md +1 -1
  230. package/docs/getting-started.md +8 -6
  231. package/docs/guidelines/agent-infra/corpus-grounding-authoring.md +2 -2
  232. package/docs/guidelines/agent-infra/engineering-memory-data-format.md +4 -4
  233. package/docs/guidelines/agent-infra/installed-tools-manifest.md +3 -3
  234. package/docs/guidelines/agent-infra/language-and-tone-examples.md +2 -2
  235. package/docs/guidelines/agent-infra/layered-settings.md +4 -4
  236. package/docs/guidelines/agent-infra/memory-access.md +19 -18
  237. package/docs/guidelines/agent-infra/naming.md +1 -1
  238. package/docs/guidelines/agent-infra/roadmap-progress-mechanics.md +5 -5
  239. package/docs/guidelines/agent-infra/role-contracts.md +1 -1
  240. package/docs/guidelines/agent-infra/security-lint-containment.md +2 -2
  241. package/docs/guidelines/agent-infra/self-improvement-pipeline.md +1 -1
  242. package/docs/guidelines/agent-infra/size-and-scope.md +1 -1
  243. package/docs/guidelines/agent-infra/skill-quality-checklist.md +5 -5
  244. package/docs/guidelines/augment-portability-patterns.md +1 -1
  245. package/docs/installation.md +13 -14
  246. package/docs/mcp-server.md +32 -20
  247. package/docs/proof.md +1 -1
  248. package/docs/setup/mcp-cloud-endpoints.md +9 -2
  249. package/docs/setup/per-ide/claude-code.md +10 -4
  250. package/package.json +4 -3
  251. package/src/config/agent-settings.template.yml +31 -17
  252. package/src/config/host-capabilities.yml +25 -16
  253. package/src/config/profiles/balanced.ini +5 -3
  254. package/src/scripts/_cli/cmd_analyze_session.ts +23 -4
  255. package/src/scripts/_cli/cmd_conformance.ts +23 -4
  256. package/src/scripts/_cli/cmd_doctor.ts +196 -8
  257. package/src/scripts/_cli/cmd_explain.ts +23 -4
  258. package/src/scripts/_cli/cmd_export.ts +23 -4
  259. package/src/scripts/_cli/cmd_fleet.ts +23 -4
  260. package/src/scripts/_cli/cmd_migrate.ts +23 -4
  261. package/src/scripts/_cli/cmd_preflight.ts +24 -4
  262. package/src/scripts/_cli/cmd_prune.ts +23 -4
  263. package/src/scripts/_cli/cmd_refresh.ts +23 -4
  264. package/src/scripts/_cli/cmd_settings_check.ts +23 -4
  265. package/src/scripts/_cli/cmd_settings_migrate.ts +23 -4
  266. package/src/scripts/_cli/cmd_sync.ts +23 -4
  267. package/src/scripts/_cli/cmd_uninstall.ts +45 -4
  268. package/src/scripts/_cli/cmd_update.ts +23 -4
  269. package/src/scripts/_cli/cmd_upgrade.ts +307 -17
  270. package/src/scripts/_cli/cmd_validate.ts +23 -4
  271. package/src/scripts/_cli/cmd_versions.ts +23 -4
  272. package/src/scripts/_dispatch.bash +62 -19
  273. package/src/scripts/_lib/claude_plugin.ts +83 -0
  274. package/src/scripts/_lib/claude_settings_hooks.ts +251 -0
  275. package/src/scripts/_lib/knowledge_global.ts +24 -2
  276. package/src/scripts/_lib/knowledge_global_promote.ts +24 -2
  277. package/src/scripts/_lib/knowledge_global_redaction.ts +24 -2
  278. package/src/scripts/_lib/link_crypto.ts +24 -5
  279. package/src/scripts/_lib/pin_resolver.ts +24 -3
  280. package/src/scripts/adoption_report.ts +23 -4
  281. package/src/scripts/adoption_snapshot.ts +23 -1
  282. package/src/scripts/adoption_status.ts +23 -4
  283. package/src/scripts/adr/regenerate_index.ts +24 -3
  284. package/src/scripts/ai_council/airgap.ts +25 -2
  285. package/src/scripts/ai_council/compile_corpus.ts +24 -2
  286. package/src/scripts/ai_council/pricing.ts +11 -1
  287. package/src/scripts/analysis_freshness.ts +23 -4
  288. package/src/scripts/annotate_discovery.ts +23 -1
  289. package/src/scripts/apply_modules_config.ts +23 -4
  290. package/src/scripts/audit_adr_coverage.ts +23 -4
  291. package/src/scripts/audit_auto_rules.ts +23 -1
  292. package/src/scripts/audit_cloud_compatibility.ts +23 -4
  293. package/src/scripts/audit_command_surface.ts +23 -4
  294. package/src/scripts/audit_initial_context.ts +23 -3
  295. package/src/scripts/audit_likelihood.ts +23 -1
  296. package/src/scripts/audit_mcp_tools.ts +23 -3
  297. package/src/scripts/audit_overlap.ts +23 -1
  298. package/src/scripts/audit_skill_descriptions.ts +24 -2
  299. package/src/scripts/audit_skill_overlap.ts +23 -1
  300. package/src/scripts/audit_user_type_axis.ts +23 -4
  301. package/src/scripts/backfill_model_tier.ts +23 -4
  302. package/src/scripts/bench_ab_cache_dispatch.ts +23 -1
  303. package/src/scripts/bench_ab_clone.ts +23 -1
  304. package/src/scripts/bench_ab_diff.ts +23 -1
  305. package/src/scripts/bench_ab_integrity.ts +23 -1
  306. package/src/scripts/bench_ab_run.ts +23 -2
  307. package/src/scripts/bench_ab_task_runner.ts +23 -1
  308. package/src/scripts/bench_ab_tracka_run.ts +23 -2
  309. package/src/scripts/bench_ab_v2_run.ts +23 -1
  310. package/src/scripts/bench_ab_v2_stats.ts +23 -1
  311. package/src/scripts/bench_baseline_ready.ts +23 -1
  312. package/src/scripts/bench_condense_memory.ts +23 -1
  313. package/src/scripts/bench_drift_check.ts +23 -2
  314. package/src/scripts/bench_matrix.ts +23 -4
  315. package/src/scripts/bench_per_tool.ts +23 -1
  316. package/src/scripts/bench_quality_run.ts +23 -2
  317. package/src/scripts/bench_rtk_savings.ts +23 -1
  318. package/src/scripts/bench_rule_load_latency.ts +23 -2
  319. package/src/scripts/bench_run.ts +23 -2
  320. package/src/scripts/bench_runner.ts +23 -1
  321. package/src/scripts/build_cloud_bundle.ts +23 -3
  322. package/src/scripts/build_discovery_manifest.ts +23 -4
  323. package/src/scripts/build_linear_digest.ts +23 -3
  324. package/src/scripts/build_mcp_registry_manifest.ts +23 -4
  325. package/src/scripts/build_rule_trigger_matrix.ts +23 -4
  326. package/src/scripts/capture_showcase_session.ts +23 -1
  327. package/src/scripts/chat_history.ts +24 -3
  328. package/src/scripts/check_always_budget.ts +23 -2
  329. package/src/scripts/check_artefact_checksums.ts +23 -4
  330. package/src/scripts/check_augment_description_cap.ts +23 -4
  331. package/src/scripts/check_augmentignore.ts +23 -4
  332. package/src/scripts/check_beta_review_markers.ts +23 -4
  333. package/src/scripts/check_cluster_patterns.ts +23 -4
  334. package/src/scripts/check_command_count_messaging.ts +23 -4
  335. package/src/scripts/check_comparison.ts +23 -1
  336. package/src/scripts/check_condensation.ts +24 -3
  337. package/src/scripts/check_condensed_paths.ts +23 -2
  338. package/src/scripts/check_context_paths.ts +23 -4
  339. package/src/scripts/check_council_config_location.ts +23 -4
  340. package/src/scripts/check_council_layout.ts +23 -4
  341. package/src/scripts/check_council_references.ts +23 -4
  342. package/src/scripts/check_discovery_determinism.ts +24 -4
  343. package/src/scripts/check_gate_paths.ts +23 -4
  344. package/src/scripts/check_generated_artefact_headers.ts +23 -4
  345. package/src/scripts/check_generator_output_coverage.ts +23 -4
  346. package/src/scripts/check_gitignore_freshness.ts +23 -4
  347. package/src/scripts/check_iron_law_prominence.ts +23 -4
  348. package/src/scripts/check_kernel_prefix_stability.ts +0 -0
  349. package/src/scripts/check_kernel_rule_bundle.ts +23 -4
  350. package/src/scripts/check_knowledge_cards.ts +23 -1
  351. package/src/scripts/check_md_language.ts +23 -4
  352. package/src/scripts/check_media_deps.ts +24 -1
  353. package/src/scripts/check_memory.ts +24 -2
  354. package/src/scripts/check_memory_proposal.ts +23 -4
  355. package/src/scripts/check_module_management_neutral.ts +23 -4
  356. package/src/scripts/check_no_conflict_markers.ts +23 -4
  357. package/src/scripts/check_no_external_sources.ts +23 -4
  358. package/src/scripts/check_no_local_settings_committed.ts +24 -4
  359. package/src/scripts/check_no_new_legacy_path.ts +23 -4
  360. package/src/scripts/check_no_roadmap_refs.ts +23 -4
  361. package/src/scripts/check_one_off_location.ts +23 -4
  362. package/src/scripts/check_overlay_cascade_subdirs.ts +23 -4
  363. package/src/scripts/check_portability.ts +24 -3
  364. package/src/scripts/check_proposal.ts +0 -0
  365. package/src/scripts/check_public_catalog_links.ts +23 -4
  366. package/src/scripts/check_public_links.ts +23 -4
  367. package/src/scripts/check_quality_regression.ts +23 -2
  368. package/src/scripts/check_references.ts +23 -4
  369. package/src/scripts/check_release_includes_discovery.ts +23 -4
  370. package/src/scripts/check_release_pr_shape.ts +23 -4
  371. package/src/scripts/check_release_published.ts +23 -4
  372. package/src/scripts/check_release_trunk_sync.ts +23 -4
  373. package/src/scripts/check_reply_consistency.ts +23 -4
  374. package/src/scripts/check_roadmap_trackable.ts +23 -4
  375. package/src/scripts/check_role_doc_links.ts +23 -4
  376. package/src/scripts/check_safety_floor_untouched.ts +24 -4
  377. package/src/scripts/check_site_links.ts +23 -1
  378. package/src/scripts/check_skill_gaps.ts +23 -1
  379. package/src/scripts/check_skill_requires.ts +23 -4
  380. package/src/scripts/check_structural_breaking.ts +24 -4
  381. package/src/scripts/check_surface_tiers.ts +23 -4
  382. package/src/scripts/check_template_pin_drift.ts +23 -4
  383. package/src/scripts/check_test_coverage_diff.ts +23 -4
  384. package/src/scripts/check_token_optimizer_freshness.ts +23 -4
  385. package/src/scripts/check_token_quality_golden.ts +23 -2
  386. package/src/scripts/check_token_regression.ts +23 -2
  387. package/src/scripts/check_tracked_but_ignored.ts +24 -4
  388. package/src/scripts/check_trigger_evals.ts +23 -4
  389. package/src/scripts/check_trunk_drift.ts +24 -1
  390. package/src/scripts/check_update_banner.ts +23 -4
  391. package/src/scripts/ci_summary.ts +23 -4
  392. package/src/scripts/ci_time_ratio.ts +23 -4
  393. package/src/scripts/cluster_near_miss_patterns.ts +0 -0
  394. package/src/scripts/compile_router.ts +23 -4
  395. package/src/scripts/condense.ts +30 -31
  396. package/src/scripts/condense_memory.ts +24 -2
  397. package/src/scripts/config/packs.ts +24 -4
  398. package/src/scripts/config/session_profiles.ts +23 -4
  399. package/src/scripts/context_hygiene_hook.ts +24 -3
  400. package/src/scripts/cost_by_conversation.ts +23 -4
  401. package/src/scripts/cost_summary.ts +23 -4
  402. package/src/scripts/council_cli.ts +35 -7
  403. package/src/scripts/council_prune.ts +25 -2
  404. package/src/scripts/cross_repo_retrieve.ts +23 -4
  405. package/src/scripts/discovery_stats.ts +23 -4
  406. package/src/scripts/evidence_report.ts +23 -1
  407. package/src/scripts/export_replay_corpus.ts +23 -2
  408. package/src/scripts/extract_audit_patterns.ts +23 -1
  409. package/src/scripts/first_run_gate_hook.ts +24 -3
  410. package/src/scripts/gen_discovery_baseline.ts +23 -4
  411. package/src/scripts/generate_capabilities_index.ts +24 -5
  412. package/src/scripts/generate_capability_matrix.ts +23 -4
  413. package/src/scripts/generate_catalog.ts +23 -1
  414. package/src/scripts/generate_command_flows.ts +23 -4
  415. package/src/scripts/generate_cookbook.ts +23 -4
  416. package/src/scripts/generate_index.ts +23 -4
  417. package/src/scripts/generate_ownership_matrix.ts +23 -1
  418. package/src/scripts/generate_pack_manifests.ts +24 -5
  419. package/src/scripts/generate_role_experiences_catalog.ts +23 -4
  420. package/src/scripts/hooks/block_no_verify.ts +23 -4
  421. package/src/scripts/hooks/design_slop_hook.ts +24 -3
  422. package/src/scripts/hooks/dispatch_hook.ts +47 -14
  423. package/src/scripts/hooks/replay_hook.ts +23 -2
  424. package/src/scripts/hooks/rtk_wrap_hook.ts +24 -5
  425. package/src/scripts/hooks_doctor.ts +23 -2
  426. package/src/scripts/hooks_status.ts +23 -2
  427. package/src/scripts/injection_scan_hook.ts +24 -5
  428. package/src/scripts/install +23 -4
  429. package/src/scripts/install.ts +102 -44
  430. package/src/scripts/inventory_abstraction_budget.ts +23 -1
  431. package/src/scripts/inventory_frontmatter.ts +23 -1
  432. package/src/scripts/inventory_meta_layers.ts +23 -1
  433. package/src/scripts/iron_law_sha.ts +23 -4
  434. package/src/scripts/janitor.ts +23 -4
  435. package/src/scripts/knowledge_global_cli.ts +24 -2
  436. package/src/scripts/linked_projects_list.ts +23 -4
  437. package/src/scripts/lint_agent_security.ts +23 -4
  438. package/src/scripts/lint_agent_skill_names.ts +23 -4
  439. package/src/scripts/lint_agents_layout.ts +23 -4
  440. package/src/scripts/lint_agents_md.ts +23 -4
  441. package/src/scripts/lint_archived_skills.ts +23 -4
  442. package/src/scripts/lint_artefact_frontmatter.ts +23 -4
  443. package/src/scripts/lint_bench_ab.ts +23 -4
  444. package/src/scripts/lint_bench_corpus.ts +23 -2
  445. package/src/scripts/lint_command_flow_coverage.ts +23 -4
  446. package/src/scripts/lint_command_routing.ts +23 -4
  447. package/src/scripts/lint_command_tiers.ts +23 -2
  448. package/src/scripts/lint_command_verbs.ts +23 -4
  449. package/src/scripts/lint_commit_subjects.ts +24 -4
  450. package/src/scripts/lint_confusables.ts +25 -5
  451. package/src/scripts/lint_context_spine_usage.ts +23 -4
  452. package/src/scripts/lint_discovery_manifest.ts +23 -4
  453. package/src/scripts/lint_discovery_vocabulary.ts +23 -4
  454. package/src/scripts/lint_empty_roadmaps.ts +23 -4
  455. package/src/scripts/lint_eval_freshness.ts +23 -4
  456. package/src/scripts/lint_examples.ts +23 -4
  457. package/src/scripts/lint_explain_trace.ts +23 -4
  458. package/src/scripts/lint_featured_skills.ts +0 -0
  459. package/src/scripts/lint_flows.ts +23 -4
  460. package/src/scripts/lint_framework_leakage.ts +23 -4
  461. package/src/scripts/lint_frontmatter_boilerplate.ts +23 -4
  462. package/src/scripts/lint_ghostwriter_source.ts +23 -4
  463. package/src/scripts/lint_glama_drift.ts +75 -0
  464. package/src/scripts/lint_global_paths.ts +23 -2
  465. package/src/scripts/lint_handoffs.ts +23 -4
  466. package/src/scripts/lint_hidden_unicode.ts +24 -5
  467. package/src/scripts/lint_hook_concern_budget.ts +23 -4
  468. package/src/scripts/lint_hook_manifest.ts +23 -2
  469. package/src/scripts/lint_instruction_smuggling.ts +25 -5
  470. package/src/scripts/lint_legal_pack.ts +23 -1
  471. package/src/scripts/lint_load_context.ts +23 -4
  472. package/src/scripts/lint_marketplace.ts +24 -3
  473. package/src/scripts/lint_marketplace_install_completeness.ts +23 -4
  474. package/src/scripts/lint_mcp_config_security.ts +25 -5
  475. package/src/scripts/lint_mcp_registry_manifest.ts +23 -4
  476. package/src/scripts/lint_media_policy_linkage.ts +23 -4
  477. package/src/scripts/lint_missions.ts +23 -4
  478. package/src/scripts/lint_model_tier_coverage.ts +23 -4
  479. package/src/scripts/lint_namespace.ts +23 -4
  480. package/src/scripts/lint_namespace_collisions.ts +23 -4
  481. package/src/scripts/lint_new_skill_gate.ts +23 -4
  482. package/src/scripts/lint_no_new_atomic_commands.ts +23 -4
  483. package/src/scripts/lint_one_off_age.ts +23 -4
  484. package/src/scripts/lint_orchestration_dsl.ts +23 -4
  485. package/src/scripts/lint_orchestrator_auto_detect.ts +23 -4
  486. package/src/scripts/lint_pack_boundaries.ts +23 -4
  487. package/src/scripts/lint_pack_dependencies.ts +23 -2
  488. package/src/scripts/lint_pack_first_win.ts +23 -4
  489. package/src/scripts/lint_pack_risk_class.ts +23 -1
  490. package/src/scripts/lint_persona_governance.ts +23 -4
  491. package/src/scripts/lint_positioning.ts +23 -4
  492. package/src/scripts/lint_profile_overlay_set_only.ts +23 -4
  493. package/src/scripts/lint_readme_jargon.ts +23 -4
  494. package/src/scripts/lint_readme_size.ts +23 -4
  495. package/src/scripts/lint_regression.ts +23 -4
  496. package/src/scripts/lint_roadmap_blockers.ts +23 -4
  497. package/src/scripts/lint_roadmap_ci_steps.ts +23 -4
  498. package/src/scripts/lint_roadmap_complexity.ts +23 -4
  499. package/src/scripts/lint_roadmap_later_disposition.ts +23 -4
  500. package/src/scripts/lint_role_experiences.ts +23 -4
  501. package/src/scripts/lint_rule_interactions.ts +23 -4
  502. package/src/scripts/lint_rule_tiers.ts +24 -3
  503. package/src/scripts/lint_showcase_sessions.ts +23 -4
  504. package/src/scripts/lint_skill_frontmatter_safety.ts +25 -5
  505. package/src/scripts/lint_skill_originality.ts +23 -4
  506. package/src/scripts/lint_skill_tools.ts +23 -4
  507. package/src/scripts/lint_subagent_determinism.ts +23 -4
  508. package/src/scripts/lint_ticket_buildable.ts +23 -4
  509. package/src/scripts/lint_topics_yaml.ts +23 -4
  510. package/src/scripts/lint_trust_coherence.ts +23 -4
  511. package/src/scripts/lint_value_dashboard.ts +23 -4
  512. package/src/scripts/lint_workflow_security.ts +23 -4
  513. package/src/scripts/lint_workspace_boundary.ts +23 -4
  514. package/src/scripts/mcp_exec/safety_envelope.ts +105 -0
  515. package/src/scripts/mcp_parity_smoke.ts +23 -2
  516. package/src/scripts/mcp_registry_submit.sh +14 -3
  517. package/src/scripts/mcp_render.ts +23 -4
  518. package/src/scripts/mcp_server/__main__.ts +6 -8
  519. package/src/scripts/mcp_server/consumer_tool_catalog.json +78 -3
  520. package/src/scripts/mcp_server/tools.ts +731 -0
  521. package/src/scripts/mcp_telemetry_health.ts +23 -4
  522. package/src/scripts/mcp_telemetry_query.ts +23 -4
  523. package/src/scripts/mcp_telemetry_store.ts +23 -4
  524. package/src/scripts/measure_augment_budget.ts +23 -1
  525. package/src/scripts/measure_density.ts +23 -1
  526. package/src/scripts/measure_frugality_savings.ts +23 -1
  527. package/src/scripts/measure_markitdown_lift.ts +23 -1
  528. package/src/scripts/measure_patterns.ts +23 -1
  529. package/src/scripts/measure_projection_bytes.ts +23 -1
  530. package/src/scripts/measure_rule_budget.ts +23 -4
  531. package/src/scripts/measure_skill_reduction.ts +23 -1
  532. package/src/scripts/memory_hash.ts +24 -2
  533. package/src/scripts/memory_lookup.ts +24 -2
  534. package/src/scripts/memory_report.ts +24 -2
  535. package/src/scripts/memory_signal.ts +24 -2
  536. package/src/scripts/memory_status.ts +26 -2
  537. package/src/scripts/migrate_command_suggestions.ts +23 -4
  538. package/src/scripts/migrate_frontmatter_defaults.ts +23 -4
  539. package/src/scripts/migration_status.ts +25 -4
  540. package/src/scripts/mine_missing_guardrails.ts +23 -1
  541. package/src/scripts/mine_session.ts +23 -1
  542. package/src/scripts/minimal_safe_diff_hook.ts +24 -3
  543. package/src/scripts/new_skill.ts +23 -3
  544. package/src/scripts/onboarding_gate_hook.ts +24 -3
  545. package/src/scripts/parity/coverage_diff.ts +25 -3
  546. package/src/scripts/parity/phase_gate.ts +25 -4
  547. package/src/scripts/parity/replay.ts +25 -3
  548. package/src/scripts/pattern_share.ts +23 -4
  549. package/src/scripts/plan_physical_move.ts +23 -4
  550. package/src/scripts/prediction-pool/poisson_sim.ts +24 -3
  551. package/src/scripts/prediction-pool/pool_winsim.ts +24 -3
  552. package/src/scripts/prediction-pool/score_ev.ts +24 -3
  553. package/src/scripts/print_required_checks.ts +24 -4
  554. package/src/scripts/probe_host_compliance.ts +23 -2
  555. package/src/scripts/probe_projection_fidelity.ts +23 -1
  556. package/src/scripts/probe_skill_registration.ts +24 -2
  557. package/src/scripts/profile_staleness_hook.ts +24 -3
  558. package/src/scripts/profile_use.ts +23 -4
  559. package/src/scripts/project_thin_rules.ts +23 -3
  560. package/src/scripts/propose_modules_config.ts +23 -4
  561. package/src/scripts/prototype_lint_contradictions.ts +23 -1
  562. package/src/scripts/prove_pack_extractable.ts +23 -4
  563. package/src/scripts/readme_linter.ts +23 -3
  564. package/src/scripts/redact_hook_capture.ts +23 -4
  565. package/src/scripts/refine_ticket_detect.ts +23 -4
  566. package/src/scripts/release.ts +226 -43
  567. package/src/scripts/render_benchmark_composite.ts +23 -4
  568. package/src/scripts/render_benchmark_md.ts +23 -4
  569. package/src/scripts/roadmap_progress_hook.ts +46 -16
  570. package/src/scripts/run_skill_evals.ts +23 -4
  571. package/src/scripts/runtime_dispatcher.ts +23 -4
  572. package/src/scripts/runtime_registry.ts +23 -4
  573. package/src/scripts/score_skill_selection.ts +23 -1
  574. package/src/scripts/security_audit_config.ts +24 -5
  575. package/src/scripts/skill_collision_clusters.ts +23 -4
  576. package/src/scripts/skill_discovery.ts +23 -4
  577. package/src/scripts/skill_linter.ts +23 -2
  578. package/src/scripts/skill_preview.ts +23 -4
  579. package/src/scripts/skill_tools/audit_persona_coverage.ts +23 -1
  580. package/src/scripts/skill_tools/audit_user_type_coverage.ts +23 -1
  581. package/src/scripts/skill_tools/run_block_d_eval.ts +23 -1
  582. package/src/scripts/skill_tools/score_skill_relevance.ts +23 -1
  583. package/src/scripts/skill_tools/suggest_skill_for_task.ts +24 -1
  584. package/src/scripts/skill_usage_collect.ts +23 -4
  585. package/src/scripts/smoke_path_resolution.ts +23 -4
  586. package/src/scripts/smoke_quickstart.ts +23 -4
  587. package/src/scripts/snapshot_agent_outputs.ts +23 -4
  588. package/src/scripts/spotcheck_thin_root.ts +23 -4
  589. package/src/scripts/sync_agent_settings.ts +23 -4
  590. package/src/scripts/sync_github_metadata.ts +23 -4
  591. package/src/scripts/sync_gitignore.ts +23 -4
  592. package/src/scripts/telegraph_stats.ts +23 -4
  593. package/src/scripts/tool_registry.ts +24 -4
  594. package/src/scripts/trigger_coverage.ts +23 -4
  595. package/src/scripts/update_counts.ts +23 -4
  596. package/src/scripts/update_prices.ts +23 -1
  597. package/src/scripts/validate_agent_settings.ts +23 -4
  598. package/src/scripts/validate_decision_engine.ts +23 -4
  599. package/src/scripts/validate_discovery_manifest.ts +23 -4
  600. package/src/scripts/validate_frontmatter.ts +23 -2
  601. package/src/scripts/validate_pack_yaml.ts +0 -0
  602. package/src/scripts/validate_safe_paths.ts +24 -4
  603. package/src/scripts/validate_telegraph_carveouts.ts +23 -4
  604. package/src/scripts/verify_before_complete_hook.ts +24 -3
  605. package/src/scripts/verify_physical_move.ts +23 -4
  606. package/src/scripts/wrapper_freshness_hook.ts +107 -8
  607. package/tests/fixtures/hooks/README.md +92 -0
  608. package/tests/fixtures/hooks/agent_error.json +7 -0
  609. package/tests/fixtures/hooks/post_tool_use.json +13 -0
  610. package/tests/fixtures/hooks/pre_compact.json +7 -0
  611. package/tests/fixtures/hooks/pre_tool_use.json +9 -0
  612. package/tests/fixtures/hooks/session_end.json +6 -0
  613. package/tests/fixtures/hooks/session_start.json +6 -0
  614. package/tests/fixtures/hooks/stop.json +6 -0
  615. package/tests/fixtures/hooks/user_prompt_submit.json +7 -0
@@ -55,6 +55,7 @@
55
55
  */
56
56
 
57
57
  import * as fs from 'node:fs';
58
+ import * as os from 'node:os';
58
59
  import * as path from 'node:path';
59
60
  import process from 'node:process';
60
61
  import { fileURLToPath, pathToFileURL } from 'node:url';
@@ -62,6 +63,7 @@ import { fileURLToPath, pathToFileURL } from 'node:url';
62
63
  import * as fs_atomic from '../_lib/fs_atomic.js';
63
64
  import * as installed_lock from '../_lib/installed_lock.js';
64
65
  import * as installed_tools from '../_lib/installed_tools.js';
66
+ import { remove_managed_hooks } from '../_lib/claude_settings_hooks.js';
65
67
  import { resolve_project_root } from '../_lib/agent_settings.js';
66
68
  import { subtract_pointers } from '../_lib/json_pointers.js';
67
69
  import { PROJECT_BRIDGE_MARKERS, USER_SCOPE_PATHS } from '../install.js';
@@ -771,6 +773,26 @@ function _uninstall_global(opts: Options): number {
771
773
  removed_names.push(tool);
772
774
  }
773
775
  }
776
+ // Managed Claude hooks live in ~/.claude/settings.json (single-surface
777
+ // model) — remove exactly our entries, never user-owned ones.
778
+ if (tools.includes('claude-code')) {
779
+ const settings_path = path.join(os.homedir(), '.claude', 'settings.json');
780
+ if (opts.dry_run) {
781
+ _print(_stdout, ` · claude-code: would remove managed hooks from ${settings_path}`);
782
+ } else {
783
+ try {
784
+ const res = remove_managed_hooks(settings_path);
785
+ if (res.changed) {
786
+ _print(
787
+ _stdout,
788
+ ` · claude-code: removed managed hooks (${res.events.join(', ')})`,
789
+ );
790
+ }
791
+ } catch (e) {
792
+ _print(_stderr, `⚠️ claude-code: managed-hook removal skipped — ${String(e)}`);
793
+ }
794
+ }
795
+ }
774
796
  if (lock !== null && !opts.dry_run) {
775
797
  const remaining = (lock.tools ?? []).filter((t) => !tools.includes(t));
776
798
  const version = String((lock as unknown as AnyDict)['agent_config_version'] ?? '');
@@ -817,10 +839,29 @@ export function main(argv: string[] | null = null): number {
817
839
 
818
840
  // CLI entry guard — set process.exitCode; never call process.exit().
819
841
  const _HERE = fileURLToPath(import.meta.url);
820
- const _isCliEntry =
821
- process.argv[1] !== undefined &&
822
- import.meta.url === pathToFileURL(path.resolve(process.argv[1])).href;
823
- if (_isCliEntry || process.argv[1] === _HERE) {
842
+ function _isCliEntry(): boolean {
843
+ if (process.argv[1] === undefined) {
844
+ return false;
845
+ }
846
+ const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
847
+ if (import.meta.url === argvUrl) {
848
+ return true;
849
+ }
850
+ // A symlinked invocation (e.g. via an installed `.augment/` projection,
851
+ // or macOS /var → /private/var temp dirs) makes the raw URLs differ:
852
+ // import.meta.url is the resolved real path while argv[1] keeps the
853
+ // symlink path. Compare realpaths so the entry guard still fires
854
+ // (without this the CLI silently no-ops when run through a symlink).
855
+ try {
856
+ const here = fs.realpathSync(fileURLToPath(import.meta.url));
857
+ const argv = fs.realpathSync(path.resolve(process.argv[1]));
858
+ return here === argv;
859
+ } catch {
860
+ return false;
861
+ }
862
+ }
863
+
864
+ if (_isCliEntry() || process.argv[1] === _HERE) {
824
865
  try {
825
866
  process.exitCode = main(process.argv.slice(2));
826
867
  } catch (exc) {
@@ -567,10 +567,29 @@ function _detect_installed_version(): string {
567
567
  }
568
568
 
569
569
  // CLI entry guard — set process.exitCode; never call process.exit().
570
- const _isCliEntry =
571
- process.argv[1] !== undefined &&
572
- import.meta.url === pathToFileURL(path.resolve(process.argv[1])).href;
573
- if (_isCliEntry || process.argv[1] === _HERE) {
570
+ function _isCliEntry(): boolean {
571
+ if (process.argv[1] === undefined) {
572
+ return false;
573
+ }
574
+ const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
575
+ if (import.meta.url === argvUrl) {
576
+ return true;
577
+ }
578
+ // A symlinked invocation (e.g. via an installed `.augment/` projection,
579
+ // or macOS /var → /private/var temp dirs) makes the raw URLs differ:
580
+ // import.meta.url is the resolved real path while argv[1] keeps the
581
+ // symlink path. Compare realpaths so the entry guard still fires
582
+ // (without this the CLI silently no-ops when run through a symlink).
583
+ try {
584
+ const here = fs.realpathSync(fileURLToPath(import.meta.url));
585
+ const argv = fs.realpathSync(path.resolve(process.argv[1]));
586
+ return here === argv;
587
+ } catch {
588
+ return false;
589
+ }
590
+ }
591
+
592
+ if (_isCliEntry() || process.argv[1] === _HERE) {
574
593
  main(process.argv.slice(2))
575
594
  .then((code) => {
576
595
  process.exitCode = code;
@@ -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;
@@ -319,37 +504,123 @@ export async function main(argv: string[] | null = null, options: MainOptions =
319
504
  }
320
505
 
321
506
  const target = `${PACKAGE_NAME}@latest`;
322
- const steps: string[][] = [
323
- ['npm', 'install', '-g', target],
324
- [_agent_config_bin(), 'global'],
325
- ];
507
+ const npm_cmd: string[] = ['npm', 'install', '-g', target];
508
+ // --no-ui: the setup wizard is an onboarding surface, not an upgrade
509
+ // step — its foreground server used to block the upgrade until Ctrl-C.
510
+ const global_cmd: string[] = [_agent_config_bin(), 'global', '--no-ui'];
511
+ const steps: string[][] = [npm_cmd, global_cmd];
512
+
513
+ const project_root = options.project_root ?? process.cwd();
514
+ const sync_targets = _settings_sync_targets(project_root);
515
+ const plugin_steps = _claude_plugin_refresh_steps();
326
516
 
327
517
  if (args.dry_run) {
328
518
  _print(out, 'agent-config upgrade — dry run, would execute:');
329
519
  for (const cmd of steps) {
330
520
  _print(out, ' ' + cmd.join(' '));
331
521
  }
522
+ for (const cmd of plugin_steps) {
523
+ _print(out, ' ' + cmd.join(' '));
524
+ }
525
+ for (const target of sync_targets) {
526
+ _print(out, ' ' + [_agent_config_bin(), 'settings:sync', '--path', target].join(' '));
527
+ }
332
528
  return 0;
333
529
  }
334
530
 
335
- for (const cmd of steps) {
531
+ // Step 1 — the new package version. Nothing after makes sense without
532
+ // it, so this is the only hard-abort step.
533
+ _print(out, '→ ' + npm_cmd.join(' '));
534
+ const npm_rc = runner(npm_cmd);
535
+ if (npm_rc !== 0) {
536
+ _print(
537
+ err,
538
+ `❌ agent-config upgrade: step failed (exit ${npm_rc}): ` + `${npm_cmd.join(' ')}`,
539
+ );
540
+ return 1;
541
+ }
542
+
543
+ // Steps 2..N — independent. A failing step no longer skips the rest:
544
+ // the 8.2.0 failure class (aborted `global` step silently skipping the
545
+ // plugin refresh + settings sync) is closed by running every remaining
546
+ // step and reporting per-step outcomes in the summary. A failed
547
+ // essential step (global deploy) still exits 1 — after the others ran.
548
+ const failed_essential: string[] = [];
549
+ for (const cmd of steps.slice(1)) {
336
550
  _print(out, '→ ' + cmd.join(' '));
337
551
  const rc = runner(cmd);
338
552
  if (rc !== 0) {
553
+ failed_essential.push(cmd.join(' '));
339
554
  _print(
340
555
  err,
341
- `❌ agent-config upgrade: step failed (exit ${rc}): ` + `${cmd.join(' ')}`,
556
+ `❌ agent-config upgrade: step failed (exit ${rc}): ${cmd.join(' ')} — ` +
557
+ 'continuing with the remaining steps.',
342
558
  );
343
- return 1;
344
559
  }
345
560
  }
346
561
 
347
- _maybe_refresh_project_wrapper(options.project_root ?? process.cwd(), out, err);
562
+ // Refresh the OPTIONAL Claude Code plugin so its command surface tracks
563
+ // the upgrade — gated on the plugin actually being installed (empty step
564
+ // list otherwise). Deprecation window of the single-surface model: once
565
+ // the plugin is retired this block disappears with it.
566
+ _refresh_claude_plugin(plugin_steps, runner, out, err);
567
+
568
+ // Migration prompt (single-surface model): hooks were wired into
569
+ // ~/.claude/settings.json by the `global` step above, so an installed
570
+ // plugin is now a duplicate surface. Surface the one-line removal —
571
+ // NEVER uninstall autonomously (the plugin is a user-owned surface).
572
+ if (plugin_steps.length > 0) {
573
+ _print(
574
+ out,
575
+ 'ℹ️ Claude Code marketplace plugin detected — deprecated surface. Hooks now ' +
576
+ 'live in ~/.claude/settings.json (wired by the global step above), so the ' +
577
+ 'plugin only duplicates skills/commands. Remove it with:\n' +
578
+ ' claude plugin uninstall ' +
579
+ `${claude_plugin.CLAUDE_PLUGIN_ID}@${claude_plugin.CLAUDE_MARKETPLACE_NAME}`,
580
+ );
581
+ }
582
+
583
+ // Bring existing settings files up to the NEW template (additive; the
584
+ // subprocess resolves the freshly installed binary + template).
585
+ _sync_settings_files(sync_targets, runner, out, err);
586
+
587
+ _maybe_refresh_project_wrapper(project_root, out, err);
588
+
589
+ // Re-stamp OUR installed .git/hooks/pre-commit from the new template
590
+ // (marker-guarded; foreign hooks are never touched).
591
+ _maybe_refresh_git_hook(project_root, runner, out, err);
592
+
593
+ // Doctor runs LAST, every time, non-fatal: its duplicate-surface and
594
+ // hook-wiring findings ARE the upgrade summary's health section — a
595
+ // mixed state (stale plugin, missing hooks) is named in the same run
596
+ // instead of waiting for the user to think of running doctor.
597
+ const doctor_cmd = [_agent_config_bin(), 'doctor'];
598
+ _print(out, '→ ' + doctor_cmd.join(' '));
599
+ const doctor_rc = runner(doctor_cmd);
600
+ if (doctor_rc !== 0) {
601
+ _print(
602
+ err,
603
+ `⚠️ agent-config doctor reported findings (exit ${doctor_rc}) — ` +
604
+ 'see the check output above for per-item fixes.',
605
+ );
606
+ }
607
+
608
+ if (failed_essential.length > 0) {
609
+ _print(
610
+ err,
611
+ `❌ agent-config upgrade finished with ${failed_essential.length} failed ` +
612
+ `step(s):\n` +
613
+ failed_essential.map((c) => ` · ${c}`).join('\n') +
614
+ '\n Re-run `agent-config upgrade`, or run the failed step directly. ' +
615
+ '`agent-config doctor` names anything left in a mixed state.',
616
+ );
617
+ return 1;
618
+ }
348
619
 
349
620
  _print(
350
621
  out,
351
- '✅ agent-config upgraded. Run `agent-config doctor` to verify ' +
352
- 'PATH + plugin parity.',
622
+ '✅ agent-config upgraded' +
623
+ (doctor_rc === 0 ? ' — doctor green.' : ' — review the doctor findings above.'),
353
624
  );
354
625
  return 0;
355
626
  }
@@ -361,10 +632,29 @@ function installed_lock_is_newer(latest: string, installed: string): boolean {
361
632
 
362
633
  // --- CLI entry ---
363
634
 
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) {
635
+ function _isCliEntry(): boolean {
636
+ if (process.argv[1] === undefined) {
637
+ return false;
638
+ }
639
+ const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
640
+ if (import.meta.url === argvUrl) {
641
+ return true;
642
+ }
643
+ // A symlinked invocation (e.g. via an installed `.augment/` projection,
644
+ // or macOS /var → /private/var temp dirs) makes the raw URLs differ:
645
+ // import.meta.url is the resolved real path while argv[1] keeps the
646
+ // symlink path. Compare realpaths so the entry guard still fires
647
+ // (without this the CLI silently no-ops when run through a symlink).
648
+ try {
649
+ const here = fs.realpathSync(fileURLToPath(import.meta.url));
650
+ const argv = fs.realpathSync(path.resolve(process.argv[1]));
651
+ return here === argv;
652
+ } catch {
653
+ return false;
654
+ }
655
+ }
656
+
657
+ if (_isCliEntry() || process.argv[1] === _HERE) {
368
658
  main(process.argv.slice(2))
369
659
  .then((code) => {
370
660
  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) {