@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
@@ -26,10 +26,10 @@
26
26
  * here; files without frontmatter are skipped (P5.1 contract).
27
27
  *
28
28
  * Health checks (see `CHECK_IDS`):
29
- * scope · stale-orphans · manifest-integrity · lockfile-freshness · bridge-drift ·
30
- * mcp-mode · mcp-beta-readiness · offline-readiness · python-runtime ·
31
- * tier-usage-readiness · council-cli · unsupported-combos ·
32
- * wizard-state.
29
+ * scope · global-binary · claude-plugin · stale-orphans · manifest-integrity ·
30
+ * lockfile-freshness · bridge-drift · mcp-mode · mcp-beta-readiness ·
31
+ * offline-readiness · python-runtime · tier-usage-readiness · council-cli ·
32
+ * unsupported-combos · wizard-state.
33
33
  * Each emits a structured `{id, status, message, remedy}` record with
34
34
  * `status` ∈ `ok` / `warn` / `fail` / `skipped` (rendered
35
35
  * `✅` / `⚠️` / `❌` / `⏭️`). `--check <id>` runs a single check.
@@ -80,6 +80,9 @@ import { fileURLToPath, pathToFileURL } from 'node:url';
80
80
 
81
81
  import * as YAML from 'yaml';
82
82
 
83
+ import * as claude_plugin from '../_lib/claude_plugin.js';
84
+ import * as claude_settings_hooks from '../_lib/claude_settings_hooks.js';
85
+ import { _is_source_repo } from './cmd_refresh.js';
83
86
  import * as installed_lock from '../_lib/installed_lock.js';
84
87
  import * as installed_tools from '../_lib/installed_tools.js';
85
88
  import * as user_global_paths from '../_lib/user_global_paths.js';
@@ -727,6 +730,8 @@ function relativeTo(p: string, base: string): string | null {
727
730
  const CHECK_IDS = [
728
731
  'scope',
729
732
  'global-binary',
733
+ 'claude-plugin',
734
+ 'hook-wiring',
730
735
  'stale-orphans',
731
736
  'manifest-integrity',
732
737
  'lockfile-freshness',
@@ -745,6 +750,8 @@ const CHECK_IDS = [
745
750
  const GLOBAL_CHECK_IDS: ReadonlySet<string> = new Set([
746
751
  'scope',
747
752
  'global-binary',
753
+ 'claude-plugin',
754
+ 'hook-wiring',
748
755
  'stale-orphans',
749
756
  'mcp-mode',
750
757
  'mcp-beta-readiness',
@@ -1000,6 +1007,149 @@ function lstripV(s: string): string {
1000
1007
  return out;
1001
1008
  }
1002
1009
 
1010
+ /**
1011
+ * Claude Code plugin state under the single-surface model
1012
+ * (road-to-claude-code-single-surface): the `~/.claude/` file projection is
1013
+ * THE distribution surface for Claude Code — content, and hooks via the
1014
+ * managed settings.json block. An installed marketplace plugin next to the
1015
+ * projection is a **duplicate surface**: every skill/command lists twice
1016
+ * and the plugin's SHA snapshot rots silently. That is `fail`, with the
1017
+ * uninstall command as the fix (never uninstalled autonomously — the plugin
1018
+ * is a user-owned surface).
1019
+ */
1020
+ function _check_claude_plugin(): Dict {
1021
+ const claude = shutilWhich('claude');
1022
+ if (claude === null) {
1023
+ return {
1024
+ id: 'claude-plugin',
1025
+ status: 'skipped',
1026
+ message: 'Claude Code CLI not on PATH — plugin check not applicable',
1027
+ remedy: '',
1028
+ };
1029
+ }
1030
+ if (!claude_plugin.claude_plugin_installed()) {
1031
+ return {
1032
+ id: 'claude-plugin',
1033
+ status: 'ok',
1034
+ message:
1035
+ 'plugin not installed (single-surface model — the ~/.claude/ file ' +
1036
+ 'projection carries content AND hooks)',
1037
+ remedy: '',
1038
+ };
1039
+ }
1040
+ const projection = path.join(os.homedir(), '.claude', 'skills');
1041
+ const projection_present = isDir(projection);
1042
+ if (projection_present) {
1043
+ return {
1044
+ id: 'claude-plugin',
1045
+ status: 'fail',
1046
+ message:
1047
+ 'duplicate surface: the marketplace plugin AND the ~/.claude/ file ' +
1048
+ 'projection are both installed — every skill/command lists twice and ' +
1049
+ 'the plugin snapshot rots silently',
1050
+ remedy:
1051
+ `claude plugin uninstall ${claude_plugin.CLAUDE_PLUGIN_ID}@${claude_plugin.CLAUDE_MARKETPLACE_NAME} ` +
1052
+ '(hooks stay — they are registered in ~/.claude/settings.json; ' +
1053
+ 'verify with the hook-wiring check)',
1054
+ };
1055
+ }
1056
+ const snapshot_v = lstripV(claude_plugin.claude_plugin_snapshot_version() || '');
1057
+ const binary_v = lstripV(_current_package_version() || '');
1058
+ if (snapshot_v && binary_v && snapshot_v !== binary_v) {
1059
+ return {
1060
+ id: 'claude-plugin',
1061
+ status: 'warn',
1062
+ message: `plugin snapshot ${snapshot_v} lags binary ${binary_v} — its command surface is stale`,
1063
+ remedy:
1064
+ 'agent-config upgrade (refreshes the plugin), or ' +
1065
+ `claude plugin update ${claude_plugin.CLAUDE_PLUGIN_ID}@${claude_plugin.CLAUDE_MARKETPLACE_NAME}`,
1066
+ };
1067
+ }
1068
+ return {
1069
+ id: 'claude-plugin',
1070
+ status: 'warn',
1071
+ message:
1072
+ `plugin installed${snapshot_v ? ` (snapshot ${snapshot_v})` : ''} without the ` +
1073
+ 'file projection — deprecated surface; the projection is the supported path',
1074
+ remedy: 'agent-config global (then uninstall the plugin per the printed hint)',
1075
+ };
1076
+ }
1077
+
1078
+ /**
1079
+ * Managed hook wiring (single-surface model): the deterministic hook matrix
1080
+ * must be registered in ~/.claude/settings.json AND the dispatch target
1081
+ * (`agent-config` binary) must resolve on PATH. Both halves are required —
1082
+ * hooks without a binary silently no-op every session.
1083
+ */
1084
+ function _check_hook_wiring(): Dict {
1085
+ const claude = shutilWhich('claude');
1086
+ if (claude === null) {
1087
+ return {
1088
+ id: 'hook-wiring',
1089
+ status: 'skipped',
1090
+ message: 'Claude Code CLI not on PATH — hook-wiring check not applicable',
1091
+ remedy: '',
1092
+ };
1093
+ }
1094
+ const settings_path = path.join(os.homedir(), '.claude', 'settings.json');
1095
+ let missing: string[];
1096
+ try {
1097
+ const matrix = claude_settings_hooks.build_claude_hook_matrix(
1098
+ path.join(_package_root(), 'src', 'scripts', 'hook_manifest.yaml'),
1099
+ );
1100
+ const settings = pathExists(settings_path)
1101
+ ? (JSON.parse(fs.readFileSync(settings_path, 'utf8')) as Record<string, unknown>)
1102
+ : {};
1103
+ const hooks = ((settings['hooks'] ?? {}) as Record<string, unknown>) || {};
1104
+ missing = Object.keys(matrix).filter((ev) => {
1105
+ const groups = hooks[ev];
1106
+ if (!Array.isArray(groups)) return true;
1107
+ return !JSON.stringify(groups).includes(claude_settings_hooks.MANAGED_SIGNATURE);
1108
+ });
1109
+ } catch (e) {
1110
+ return {
1111
+ id: 'hook-wiring',
1112
+ status: 'fail',
1113
+ message: `cannot evaluate managed hooks: ${String(e)}`,
1114
+ remedy: 'fix ~/.claude/settings.json (invalid JSON?), then agent-config refresh --global',
1115
+ };
1116
+ }
1117
+ const binary_ok = shutilWhich('agent-config') !== null;
1118
+ if (missing.length === 0 && binary_ok) {
1119
+ return {
1120
+ id: 'hook-wiring',
1121
+ status: 'ok',
1122
+ message: 'managed hooks registered in ~/.claude/settings.json; dispatch binary on PATH',
1123
+ remedy: '',
1124
+ };
1125
+ }
1126
+ if (missing.length > 0 && claude_plugin.claude_plugin_installed()) {
1127
+ return {
1128
+ id: 'hook-wiring',
1129
+ status: 'warn',
1130
+ message:
1131
+ `managed hooks missing for: ${missing.join(', ')} — currently carried by the ` +
1132
+ 'installed plugin (deprecated surface)',
1133
+ remedy: 'agent-config refresh --global (writes the managed settings.json block)',
1134
+ };
1135
+ }
1136
+ const parts: string[] = [];
1137
+ if (missing.length > 0) parts.push(`managed hooks missing for: ${missing.join(', ')}`);
1138
+ if (!binary_ok) parts.push('`agent-config` not on PATH (hooks would silently no-op)');
1139
+ if (parts.length === 0) {
1140
+ // hooks complete, binary missing was the only issue → covered above.
1141
+ parts.push('`agent-config` not on PATH');
1142
+ }
1143
+ return {
1144
+ id: 'hook-wiring',
1145
+ status: 'fail',
1146
+ message: parts.join('; '),
1147
+ remedy: binary_ok
1148
+ ? 'agent-config refresh --global'
1149
+ : 'npm install -g @event4u/agent-config, then agent-config refresh --global',
1150
+ };
1151
+ }
1152
+
1003
1153
  function _check_bridge_drift(
1004
1154
  missing: Dict[],
1005
1155
  modified: Dict[],
@@ -1196,6 +1346,20 @@ function _check_python_runtime(): Dict {
1196
1346
  }
1197
1347
 
1198
1348
  function _check_mcp_beta_readiness(project_root: string): Dict {
1349
+ // Maintainer-scoped gate: the six artefacts live in the agent-config
1350
+ // SOURCE repo. In a consumer project the paths can never exist, so the
1351
+ // check used to emit a meaningless "6/6 gates pending" warning on every
1352
+ // consumer doctor run — skip instead.
1353
+ if (!_is_source_repo(project_root)) {
1354
+ return {
1355
+ id: 'mcp-beta-readiness',
1356
+ status: 'skipped',
1357
+ message:
1358
+ 'MCP beta promotion gates apply to the agent-config source repo, ' +
1359
+ 'not consumer projects',
1360
+ remedy: '',
1361
+ };
1362
+ }
1199
1363
  const pending: string[] = [];
1200
1364
  for (const [gate_id, rel] of MCP_BETA_GATES) {
1201
1365
  if (!pathExists(path.join(project_root, rel))) {
@@ -1751,6 +1915,8 @@ function _run_checks(
1751
1915
  const runners: Record<string, CheckRunner> = {
1752
1916
  scope: () => _check_scope(project_root),
1753
1917
  'global-binary': () => _check_global_binary(project_root),
1918
+ 'claude-plugin': _check_claude_plugin,
1919
+ 'hook-wiring': _check_hook_wiring,
1754
1920
  'stale-orphans': _check_stale_orphans,
1755
1921
  'manifest-integrity': () => _check_manifest_integrity(manifest),
1756
1922
  'lockfile-freshness': () => _check_lockfile_freshness(manifest),
@@ -1822,6 +1988,8 @@ function _run_checks_no_manifest(
1822
1988
  const runners: Record<string, CheckRunner> = {
1823
1989
  scope: () => _check_scope(project_root),
1824
1990
  'global-binary': () => _check_global_binary(project_root),
1991
+ 'claude-plugin': _check_claude_plugin,
1992
+ 'hook-wiring': _check_hook_wiring,
1825
1993
  'stale-orphans': _check_stale_orphans,
1826
1994
  'manifest-integrity': () => _skipped_manifest_check('manifest-integrity'),
1827
1995
  'lockfile-freshness': () => _skipped_manifest_check('lockfile-freshness'),
@@ -2258,10 +2426,29 @@ function main(argv: string[] | null = null): number {
2258
2426
 
2259
2427
  // --- CLI entry ---
2260
2428
 
2261
- const _isCliEntry =
2262
- process.argv[1] !== undefined &&
2263
- import.meta.url === pathToFileURL(path.resolve(process.argv[1])).href;
2264
- if (_isCliEntry || process.argv[1] === _HERE) {
2429
+ function _isCliEntry(): boolean {
2430
+ if (process.argv[1] === undefined) {
2431
+ return false;
2432
+ }
2433
+ const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
2434
+ if (import.meta.url === argvUrl) {
2435
+ return true;
2436
+ }
2437
+ // A symlinked invocation (e.g. via an installed `.augment/` projection,
2438
+ // or macOS /var → /private/var temp dirs) makes the raw URLs differ:
2439
+ // import.meta.url is the resolved real path while argv[1] keeps the
2440
+ // symlink path. Compare realpaths so the entry guard still fires
2441
+ // (without this the CLI silently no-ops when run through a symlink).
2442
+ try {
2443
+ const here = fs.realpathSync(fileURLToPath(import.meta.url));
2444
+ const argv = fs.realpathSync(path.resolve(process.argv[1]));
2445
+ return here === argv;
2446
+ } catch {
2447
+ return false;
2448
+ }
2449
+ }
2450
+
2451
+ if (_isCliEntry() || process.argv[1] === _HERE) {
2265
2452
  try {
2266
2453
  process.exitCode = main(process.argv.slice(2));
2267
2454
  } catch (e) {
@@ -2290,6 +2477,7 @@ export {
2290
2477
  _check_manifest_integrity,
2291
2478
  _check_lockfile_freshness,
2292
2479
  _check_global_binary,
2480
+ _check_claude_plugin,
2293
2481
  _check_bridge_drift,
2294
2482
  _check_mcp_mode,
2295
2483
  _check_offline_readiness,
@@ -713,10 +713,29 @@ export function main(argv: string[] | null = null): number {
713
713
 
714
714
  // --- CLI entry ---
715
715
 
716
- const _isCliEntry =
717
- process.argv[1] !== undefined &&
718
- import.meta.url === pathToFileURL(path.resolve(process.argv[1])).href;
719
- if (_isCliEntry || process.argv[1] === _HERE) {
716
+ function _isCliEntry(): boolean {
717
+ if (process.argv[1] === undefined) {
718
+ return false;
719
+ }
720
+ const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
721
+ if (import.meta.url === argvUrl) {
722
+ return true;
723
+ }
724
+ // A symlinked invocation (e.g. via an installed `.augment/` projection,
725
+ // or macOS /var → /private/var temp dirs) makes the raw URLs differ:
726
+ // import.meta.url is the resolved real path while argv[1] keeps the
727
+ // symlink path. Compare realpaths so the entry guard still fires
728
+ // (without this the CLI silently no-ops when run through a symlink).
729
+ try {
730
+ const here = fs.realpathSync(fileURLToPath(import.meta.url));
731
+ const argv = fs.realpathSync(path.resolve(process.argv[1]));
732
+ return here === argv;
733
+ } catch {
734
+ return false;
735
+ }
736
+ }
737
+
738
+ if (_isCliEntry() || process.argv[1] === _HERE) {
720
739
  try {
721
740
  process.exitCode = main(process.argv.slice(2));
722
741
  } catch (e) {
@@ -359,10 +359,29 @@ export function main(argv: string[] | null = null, options: MainOptions = {}): n
359
359
  // Python: `if __name__ == "__main__": sys.exit(main())` (argparse reads
360
360
  // sys.argv[1:] inside the parser default).
361
361
  const _HERE = fileURLToPath(import.meta.url);
362
- const _isCliEntry =
363
- process.argv[1] !== undefined &&
364
- import.meta.url === pathToFileURL(path.resolve(process.argv[1])).href;
365
- if (_isCliEntry || process.argv[1] === _HERE) {
362
+ function _isCliEntry(): boolean {
363
+ if (process.argv[1] === undefined) {
364
+ return false;
365
+ }
366
+ const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
367
+ if (import.meta.url === argvUrl) {
368
+ return true;
369
+ }
370
+ // A symlinked invocation (e.g. via an installed `.augment/` projection,
371
+ // or macOS /var → /private/var temp dirs) makes the raw URLs differ:
372
+ // import.meta.url is the resolved real path while argv[1] keeps the
373
+ // symlink path. Compare realpaths so the entry guard still fires
374
+ // (without this the CLI silently no-ops when run through a symlink).
375
+ try {
376
+ const here = fs.realpathSync(fileURLToPath(import.meta.url));
377
+ const argv = fs.realpathSync(path.resolve(process.argv[1]));
378
+ return here === argv;
379
+ } catch {
380
+ return false;
381
+ }
382
+ }
383
+
384
+ if (_isCliEntry() || process.argv[1] === _HERE) {
366
385
  try {
367
386
  process.exitCode = main();
368
387
  } catch (exc) {
@@ -385,10 +385,29 @@ export async function main(argv: string[] | null = null): Promise<number> {
385
385
 
386
386
  // --- CLI entry ---
387
387
 
388
- const _isCliEntry =
389
- process.argv[1] !== undefined &&
390
- import.meta.url === pathToFileURL(path.resolve(process.argv[1])).href;
391
- if (_isCliEntry || process.argv[1] === _HERE) {
388
+ function _isCliEntry(): boolean {
389
+ if (process.argv[1] === undefined) {
390
+ return false;
391
+ }
392
+ const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
393
+ if (import.meta.url === argvUrl) {
394
+ return true;
395
+ }
396
+ // A symlinked invocation (e.g. via an installed `.augment/` projection,
397
+ // or macOS /var → /private/var temp dirs) makes the raw URLs differ:
398
+ // import.meta.url is the resolved real path while argv[1] keeps the
399
+ // symlink path. Compare realpaths so the entry guard still fires
400
+ // (without this the CLI silently no-ops when run through a symlink).
401
+ try {
402
+ const here = fs.realpathSync(fileURLToPath(import.meta.url));
403
+ const argv = fs.realpathSync(path.resolve(process.argv[1]));
404
+ return here === argv;
405
+ } catch {
406
+ return false;
407
+ }
408
+ }
409
+
410
+ if (_isCliEntry() || process.argv[1] === _HERE) {
392
411
  main(process.argv.slice(2)).then(
393
412
  (code) => {
394
413
  process.exitCode = code;
@@ -935,10 +935,29 @@ declare const __AGENT_CONFIG_BUNDLE__: boolean | undefined;
935
935
  const _bundled =
936
936
  typeof __AGENT_CONFIG_BUNDLE__ !== 'undefined' && __AGENT_CONFIG_BUNDLE__;
937
937
  const _HERE = fileURLToPath(import.meta.url);
938
- const _isCliEntry =
939
- process.argv[1] !== undefined &&
940
- import.meta.url === pathToFileURL(path.resolve(process.argv[1])).href;
941
- if (!_bundled && (_isCliEntry || process.argv[1] === _HERE)) {
938
+ function _isCliEntry(): boolean {
939
+ if (process.argv[1] === undefined) {
940
+ return false;
941
+ }
942
+ const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
943
+ if (import.meta.url === argvUrl) {
944
+ return true;
945
+ }
946
+ // A symlinked invocation (e.g. via an installed `.augment/` projection,
947
+ // or macOS /var → /private/var temp dirs) makes the raw URLs differ:
948
+ // import.meta.url is the resolved real path while argv[1] keeps the
949
+ // symlink path. Compare realpaths so the entry guard still fires
950
+ // (without this the CLI silently no-ops when run through a symlink).
951
+ try {
952
+ const here = fs.realpathSync(fileURLToPath(import.meta.url));
953
+ const argv = fs.realpathSync(path.resolve(process.argv[1]));
954
+ return here === argv;
955
+ } catch {
956
+ return false;
957
+ }
958
+ }
959
+
960
+ if (!_bundled && (_isCliEntry() || process.argv[1] === _HERE)) {
942
961
  try {
943
962
  process.exitCode = main(process.argv.slice(2));
944
963
  } catch (exc) {
@@ -18,6 +18,7 @@
18
18
  import * as os from 'node:os';
19
19
  import * as path from 'node:path';
20
20
  import process from 'node:process';
21
+ import * as fs from 'node:fs';
21
22
  import { fileURLToPath, pathToFileURL } from 'node:url';
22
23
 
23
24
  import {
@@ -151,9 +152,28 @@ export function main(argv: string[] | null = null): number {
151
152
 
152
153
  // --- CLI entry ---
153
154
 
154
- const _isCliEntry =
155
- process.argv[1] !== undefined &&
156
- import.meta.url === pathToFileURL(path.resolve(process.argv[1])).href;
157
- if (_isCliEntry || process.argv[1] === _HERE) {
155
+ function _isCliEntry(): boolean {
156
+ if (process.argv[1] === undefined) {
157
+ return false;
158
+ }
159
+ const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
160
+ if (import.meta.url === argvUrl) {
161
+ return true;
162
+ }
163
+ // A symlinked invocation (e.g. via an installed `.augment/` projection,
164
+ // or macOS /var → /private/var temp dirs) makes the raw URLs differ:
165
+ // import.meta.url is the resolved real path while argv[1] keeps the
166
+ // symlink path. Compare realpaths so the entry guard still fires
167
+ // (without this the CLI silently no-ops when run through a symlink).
168
+ try {
169
+ const here = fs.realpathSync(fileURLToPath(import.meta.url));
170
+ const argv = fs.realpathSync(path.resolve(process.argv[1]));
171
+ return here === argv;
172
+ } catch {
173
+ return false;
174
+ }
175
+ }
176
+
177
+ if (_isCliEntry() || process.argv[1] === _HERE) {
158
178
  process.exitCode = main(process.argv.slice(2));
159
179
  }
@@ -594,10 +594,29 @@ export function main(argv: string[] | null = null): number {
594
594
 
595
595
  // CLI entry guard — set process.exitCode; never call process.exit().
596
596
  const _HERE = fileURLToPath(import.meta.url);
597
- const _isCliEntry =
598
- process.argv[1] !== undefined &&
599
- import.meta.url === pathToFileURL(path.resolve(process.argv[1])).href;
600
- if (_isCliEntry || process.argv[1] === _HERE) {
597
+ function _isCliEntry(): boolean {
598
+ if (process.argv[1] === undefined) {
599
+ return false;
600
+ }
601
+ const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
602
+ if (import.meta.url === argvUrl) {
603
+ return true;
604
+ }
605
+ // A symlinked invocation (e.g. via an installed `.augment/` projection,
606
+ // or macOS /var → /private/var temp dirs) makes the raw URLs differ:
607
+ // import.meta.url is the resolved real path while argv[1] keeps the
608
+ // symlink path. Compare realpaths so the entry guard still fires
609
+ // (without this the CLI silently no-ops when run through a symlink).
610
+ try {
611
+ const here = fs.realpathSync(fileURLToPath(import.meta.url));
612
+ const argv = fs.realpathSync(path.resolve(process.argv[1]));
613
+ return here === argv;
614
+ } catch {
615
+ return false;
616
+ }
617
+ }
618
+
619
+ if (_isCliEntry() || process.argv[1] === _HERE) {
601
620
  try {
602
621
  process.exitCode = main(process.argv.slice(2));
603
622
  } catch (exc) {
@@ -502,10 +502,29 @@ export function main(argv: string[] | null = null, options: MainOptions = {}): n
502
502
 
503
503
  // --- CLI entry ---
504
504
 
505
- const _isCliEntry =
506
- process.argv[1] !== undefined &&
507
- import.meta.url === pathToFileURL(path.resolve(process.argv[1])).href;
508
- if (_isCliEntry || process.argv[1] === _HERE) {
505
+ function _isCliEntry(): boolean {
506
+ if (process.argv[1] === undefined) {
507
+ return false;
508
+ }
509
+ const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
510
+ if (import.meta.url === argvUrl) {
511
+ return true;
512
+ }
513
+ // A symlinked invocation (e.g. via an installed `.augment/` projection,
514
+ // or macOS /var → /private/var temp dirs) makes the raw URLs differ:
515
+ // import.meta.url is the resolved real path while argv[1] keeps the
516
+ // symlink path. Compare realpaths so the entry guard still fires
517
+ // (without this the CLI silently no-ops when run through a symlink).
518
+ try {
519
+ const here = fs.realpathSync(fileURLToPath(import.meta.url));
520
+ const argv = fs.realpathSync(path.resolve(process.argv[1]));
521
+ return here === argv;
522
+ } catch {
523
+ return false;
524
+ }
525
+ }
526
+
527
+ if (_isCliEntry() || process.argv[1] === _HERE) {
509
528
  try {
510
529
  process.exitCode = main(process.argv.slice(2));
511
530
  } catch (e) {
@@ -391,10 +391,29 @@ export function main(argv: string[] | null = null, options: MainOptions = {}): n
391
391
 
392
392
  // CLI entry guard — set process.exitCode; never call process.exit().
393
393
  const _HERE = fileURLToPath(import.meta.url);
394
- const _isCliEntry =
395
- process.argv[1] !== undefined &&
396
- import.meta.url === pathToFileURL(path.resolve(process.argv[1])).href;
397
- if (_isCliEntry || process.argv[1] === _HERE) {
394
+ function _isCliEntry(): boolean {
395
+ if (process.argv[1] === undefined) {
396
+ return false;
397
+ }
398
+ const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
399
+ if (import.meta.url === argvUrl) {
400
+ return true;
401
+ }
402
+ // A symlinked invocation (e.g. via an installed `.augment/` projection,
403
+ // or macOS /var → /private/var temp dirs) makes the raw URLs differ:
404
+ // import.meta.url is the resolved real path while argv[1] keeps the
405
+ // symlink path. Compare realpaths so the entry guard still fires
406
+ // (without this the CLI silently no-ops when run through a symlink).
407
+ try {
408
+ const here = fs.realpathSync(fileURLToPath(import.meta.url));
409
+ const argv = fs.realpathSync(path.resolve(process.argv[1]));
410
+ return here === argv;
411
+ } catch {
412
+ return false;
413
+ }
414
+ }
415
+
416
+ if (_isCliEntry() || process.argv[1] === _HERE) {
398
417
  try {
399
418
  process.exitCode = main(process.argv.slice(2));
400
419
  } catch (exc) {
@@ -328,10 +328,29 @@ export function main(argv: string[] | null = null, options: MainOptions = {}): n
328
328
  // CLI entry guard — set process.exitCode; never call process.exit().
329
329
  // Python: `if __name__ == "__main__": sys.exit(main())`.
330
330
  const _HERE = fileURLToPath(import.meta.url);
331
- const _isCliEntry =
332
- process.argv[1] !== undefined &&
333
- import.meta.url === pathToFileURL(path.resolve(process.argv[1])).href;
334
- if (_isCliEntry || process.argv[1] === _HERE) {
331
+ function _isCliEntry(): boolean {
332
+ if (process.argv[1] === undefined) {
333
+ return false;
334
+ }
335
+ const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
336
+ if (import.meta.url === argvUrl) {
337
+ return true;
338
+ }
339
+ // A symlinked invocation (e.g. via an installed `.augment/` projection,
340
+ // or macOS /var → /private/var temp dirs) makes the raw URLs differ:
341
+ // import.meta.url is the resolved real path while argv[1] keeps the
342
+ // symlink path. Compare realpaths so the entry guard still fires
343
+ // (without this the CLI silently no-ops when run through a symlink).
344
+ try {
345
+ const here = fs.realpathSync(fileURLToPath(import.meta.url));
346
+ const argv = fs.realpathSync(path.resolve(process.argv[1]));
347
+ return here === argv;
348
+ } catch {
349
+ return false;
350
+ }
351
+ }
352
+
353
+ if (_isCliEntry() || process.argv[1] === _HERE) {
335
354
  try {
336
355
  process.exitCode = main();
337
356
  } catch (exc) {
@@ -365,10 +365,29 @@ export function main(argv: string[] | null = null, options: MainOptions = {}): n
365
365
  // CLI entry guard — set process.exitCode; never call process.exit().
366
366
  // Python: `if __name__ == "__main__": sys.exit(main(sys.argv[1:]))`.
367
367
  const _HERE = fileURLToPath(import.meta.url);
368
- const _isCliEntry =
369
- process.argv[1] !== undefined &&
370
- import.meta.url === pathToFileURL(path.resolve(process.argv[1])).href;
371
- if (_isCliEntry || process.argv[1] === _HERE) {
368
+ function _isCliEntry(): boolean {
369
+ if (process.argv[1] === undefined) {
370
+ return false;
371
+ }
372
+ const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
373
+ if (import.meta.url === argvUrl) {
374
+ return true;
375
+ }
376
+ // A symlinked invocation (e.g. via an installed `.augment/` projection,
377
+ // or macOS /var → /private/var temp dirs) makes the raw URLs differ:
378
+ // import.meta.url is the resolved real path while argv[1] keeps the
379
+ // symlink path. Compare realpaths so the entry guard still fires
380
+ // (without this the CLI silently no-ops when run through a symlink).
381
+ try {
382
+ const here = fs.realpathSync(fileURLToPath(import.meta.url));
383
+ const argv = fs.realpathSync(path.resolve(process.argv[1]));
384
+ return here === argv;
385
+ } catch {
386
+ return false;
387
+ }
388
+ }
389
+
390
+ if (_isCliEntry() || process.argv[1] === _HERE) {
372
391
  try {
373
392
  process.exitCode = main(process.argv.slice(2));
374
393
  } catch (exc) {