@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
@@ -16,10 +16,10 @@
16
16
  */
17
17
 
18
18
  import { execFileSync } from 'node:child_process';
19
- import { mkdirSync, readdirSync, writeFileSync } from 'node:fs';
19
+ import { realpathSync, mkdirSync, readdirSync, writeFileSync } from 'node:fs';
20
20
  import { dirname, resolve } from 'node:path';
21
21
  import process from 'node:process';
22
- import { pathToFileURL } from 'node:url';
22
+ import { fileURLToPath, pathToFileURL } from 'node:url';
23
23
 
24
24
  // ---------------------------------------------------------------------------
25
25
  // Categories and phase mapping
@@ -297,9 +297,30 @@ function main(): void {
297
297
 
298
298
  // Run the CLI only when executed directly (`npx tsx src/scripts/migration_status.ts`),
299
299
  // not when imported (e.g. by src/scripts/parity/phase_gate.ts for `categorize`).
300
+ function _isCliEntry(): boolean {
301
+ if (process.argv[1] === undefined) {
302
+ return false;
303
+ }
304
+ const argvUrl = pathToFileURL(resolve(process.argv[1])).href;
305
+ if (import.meta.url === argvUrl) {
306
+ return true;
307
+ }
308
+ // A symlinked invocation (e.g. via an installed `.augment/` projection,
309
+ // or macOS /var → /private/var temp dirs) makes the raw URLs differ:
310
+ // import.meta.url is the resolved real path while argv[1] keeps the
311
+ // symlink path. Compare realpaths so the entry guard still fires
312
+ // (without this the CLI silently no-ops when run through a symlink).
313
+ try {
314
+ const here = realpathSync(fileURLToPath(import.meta.url));
315
+ const argv = realpathSync(resolve(process.argv[1]));
316
+ return here === argv;
317
+ } catch {
318
+ return false;
319
+ }
320
+ }
321
+
300
322
  const isCliEntry =
301
- process.argv[1] !== undefined &&
302
- import.meta.url === pathToFileURL(resolve(process.argv[1])).href;
323
+ _isCliEntry();
303
324
  if (isCliEntry) {
304
325
  main();
305
326
  }
@@ -184,6 +184,28 @@ export function main(argv: string[] = process.argv.slice(2)): number {
184
184
  return 0;
185
185
  }
186
186
 
187
+ function _isCliEntry(): boolean {
188
+ if (process.argv[1] === undefined) {
189
+ return false;
190
+ }
191
+ const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
192
+ if (import.meta.url === argvUrl) {
193
+ return true;
194
+ }
195
+ // A symlinked invocation (e.g. via an installed `.augment/` projection,
196
+ // or macOS /var → /private/var temp dirs) makes the raw URLs differ:
197
+ // import.meta.url is the resolved real path while argv[1] keeps the
198
+ // symlink path. Compare realpaths so the entry guard still fires
199
+ // (without this the CLI silently no-ops when run through a symlink).
200
+ try {
201
+ const here = fs.realpathSync(fileURLToPath(import.meta.url));
202
+ const argv = fs.realpathSync(path.resolve(process.argv[1]));
203
+ return here === argv;
204
+ } catch {
205
+ return false;
206
+ }
207
+ }
208
+
187
209
  const _isCli =
188
- process.argv[1] !== undefined && import.meta.url === pathToFileURL(path.resolve(process.argv[1])).href;
210
+ _isCliEntry();
189
211
  if (_isCli) process.exit(main());
@@ -639,7 +639,29 @@ function _dateIso(d: Date): string {
639
639
  return d.toISOString().slice(0, 10);
640
640
  }
641
641
 
642
- const _isMain = import.meta.url === pathToFileURL(path.resolve(process.argv[1] ?? '')).href;
642
+ function _isCliEntry(): boolean {
643
+ if (process.argv[1] === undefined) {
644
+ return false;
645
+ }
646
+ const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
647
+ if (import.meta.url === argvUrl) {
648
+ return true;
649
+ }
650
+ // A symlinked invocation (e.g. via an installed `.augment/` projection,
651
+ // or macOS /var → /private/var temp dirs) makes the raw URLs differ:
652
+ // import.meta.url is the resolved real path while argv[1] keeps the
653
+ // symlink path. Compare realpaths so the entry guard still fires
654
+ // (without this the CLI silently no-ops when run through a symlink).
655
+ try {
656
+ const here = fs.realpathSync(fileURLToPath(import.meta.url));
657
+ const argv = fs.realpathSync(path.resolve(process.argv[1]));
658
+ return here === argv;
659
+ } catch {
660
+ return false;
661
+ }
662
+ }
663
+
664
+ const _isMain = _isCliEntry();
643
665
  if (_isMain) {
644
666
  process.exitCode = main();
645
667
  }
@@ -33,7 +33,7 @@
33
33
 
34
34
  import fs from "node:fs";
35
35
  import path from "node:path";
36
- import { pathToFileURL } from "node:url";
36
+ import { fileURLToPath, pathToFileURL } from "node:url";
37
37
 
38
38
  import { atomic_write_json } from "./hooks/state_io.js";
39
39
 
@@ -347,9 +347,30 @@ export function main(argv?: string[]): number {
347
347
  return run(_readStdin(), { consumer_root: process.cwd(), verbose: args.verbose });
348
348
  }
349
349
 
350
+ function _isCliEntry(): boolean {
351
+ if (process.argv[1] === undefined) {
352
+ return false;
353
+ }
354
+ const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
355
+ if (import.meta.url === argvUrl) {
356
+ return true;
357
+ }
358
+ // A symlinked invocation (e.g. via an installed `.augment/` projection,
359
+ // or macOS /var → /private/var temp dirs) makes the raw URLs differ:
360
+ // import.meta.url is the resolved real path while argv[1] keeps the
361
+ // symlink path. Compare realpaths so the entry guard still fires
362
+ // (without this the CLI silently no-ops when run through a symlink).
363
+ try {
364
+ const here = fs.realpathSync(fileURLToPath(import.meta.url));
365
+ const argv = fs.realpathSync(path.resolve(process.argv[1]));
366
+ return here === argv;
367
+ } catch {
368
+ return false;
369
+ }
370
+ }
371
+
350
372
  const isCliEntry =
351
- process.argv[1] !== undefined &&
352
- import.meta.url === pathToFileURL(path.resolve(process.argv[1])).href;
373
+ _isCliEntry();
353
374
  if (isCliEntry) {
354
375
  process.exit(main(process.argv.slice(2)));
355
376
  }
@@ -397,8 +397,28 @@ function _pyListRepr(items: string[]): string {
397
397
  return '[' + items.map((s) => "'" + s.replace(/\\/g, '\\\\').replace(/'/g, "\\'") + "'").join(', ') + ']';
398
398
  }
399
399
 
400
- const _isCliEntry =
401
- process.argv[1] !== undefined && import.meta.url === pathToFileURL(path.resolve(process.argv[1])).href;
402
- if (_isCliEntry || process.argv[1] === _HERE) {
400
+ function _isCliEntry(): boolean {
401
+ if (process.argv[1] === undefined) {
402
+ return false;
403
+ }
404
+ const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
405
+ if (import.meta.url === argvUrl) {
406
+ return true;
407
+ }
408
+ // A symlinked invocation (e.g. via an installed `.augment/` projection,
409
+ // or macOS /var → /private/var temp dirs) makes the raw URLs differ:
410
+ // import.meta.url is the resolved real path while argv[1] keeps the
411
+ // symlink path. Compare realpaths so the entry guard still fires
412
+ // (without this the CLI silently no-ops when run through a symlink).
413
+ try {
414
+ const here = fs.realpathSync(fileURLToPath(import.meta.url));
415
+ const argv = fs.realpathSync(path.resolve(process.argv[1]));
416
+ return here === argv;
417
+ } catch {
418
+ return false;
419
+ }
420
+ }
421
+
422
+ if (_isCliEntry() || process.argv[1] === _HERE) {
403
423
  process.exit(main());
404
424
  }
@@ -30,7 +30,7 @@
30
30
 
31
31
  import fs from "node:fs";
32
32
  import path from "node:path";
33
- import { pathToFileURL } from "node:url";
33
+ import { fileURLToPath, pathToFileURL } from "node:url";
34
34
 
35
35
  // Re-use the shared atomic-write helper so concerns honour the single
36
36
  // `agents/runtime/state/.dispatcher.lock` discipline (hook-architecture-v1.md
@@ -216,9 +216,30 @@ export function main(argv?: string[]): number {
216
216
  return run({ consumer_root: process.cwd(), verbose: args.verbose });
217
217
  }
218
218
 
219
+ function _isCliEntry(): boolean {
220
+ if (process.argv[1] === undefined) {
221
+ return false;
222
+ }
223
+ const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
224
+ if (import.meta.url === argvUrl) {
225
+ return true;
226
+ }
227
+ // A symlinked invocation (e.g. via an installed `.augment/` projection,
228
+ // or macOS /var → /private/var temp dirs) makes the raw URLs differ:
229
+ // import.meta.url is the resolved real path while argv[1] keeps the
230
+ // symlink path. Compare realpaths so the entry guard still fires
231
+ // (without this the CLI silently no-ops when run through a symlink).
232
+ try {
233
+ const here = fs.realpathSync(fileURLToPath(import.meta.url));
234
+ const argv = fs.realpathSync(path.resolve(process.argv[1]));
235
+ return here === argv;
236
+ } catch {
237
+ return false;
238
+ }
239
+ }
240
+
219
241
  const isCliEntry =
220
- process.argv[1] !== undefined &&
221
- import.meta.url === pathToFileURL(path.resolve(process.argv[1])).href;
242
+ _isCliEntry();
222
243
  if (isCliEntry) {
223
244
  process.exit(main(process.argv.slice(2)));
224
245
  }
@@ -13,11 +13,11 @@
13
13
  * file is an error unless --allow-missing is given (then warn + exit 0).
14
14
  */
15
15
 
16
- import { existsSync, readFileSync } from "node:fs";
16
+ import { realpathSync, existsSync, readFileSync } from "node:fs";
17
17
  import path from "node:path";
18
18
  import process from "node:process";
19
19
  import { parseArgs } from "node:util";
20
- import { pathToFileURL } from "node:url";
20
+ import { fileURLToPath, pathToFileURL } from "node:url";
21
21
 
22
22
  export interface CoverageAggregate {
23
23
  linesCovered: number;
@@ -192,8 +192,30 @@ function main(): void {
192
192
  }
193
193
  }
194
194
 
195
+ function _isCliEntry(): boolean {
196
+ if (process.argv[1] === undefined) {
197
+ return false;
198
+ }
199
+ const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
200
+ if (import.meta.url === argvUrl) {
201
+ return true;
202
+ }
203
+ // A symlinked invocation (e.g. via an installed `.augment/` projection,
204
+ // or macOS /var → /private/var temp dirs) makes the raw URLs differ:
205
+ // import.meta.url is the resolved real path while argv[1] keeps the
206
+ // symlink path. Compare realpaths so the entry guard still fires
207
+ // (without this the CLI silently no-ops when run through a symlink).
208
+ try {
209
+ const here = realpathSync(fileURLToPath(import.meta.url));
210
+ const argv = realpathSync(path.resolve(process.argv[1]));
211
+ return here === argv;
212
+ } catch {
213
+ return false;
214
+ }
215
+ }
216
+
195
217
  const isCliEntry =
196
- process.argv[1] !== undefined && import.meta.url === pathToFileURL(path.resolve(process.argv[1])).href;
218
+ _isCliEntry();
197
219
  if (isCliEntry) {
198
220
  main();
199
221
  }
@@ -20,10 +20,10 @@
20
20
  * Exit 0 only when every check passes. Node builtins only.
21
21
  */
22
22
 
23
- import { readFileSync } from 'node:fs';
23
+ import { realpathSync, readFileSync } from 'node:fs';
24
24
  import { resolve } from 'node:path';
25
25
  import process from 'node:process';
26
- import { pathToFileURL } from 'node:url';
26
+ import { fileURLToPath, pathToFileURL } from 'node:url';
27
27
 
28
28
  import {
29
29
  CATEGORY_ORDER,
@@ -262,9 +262,30 @@ function main(): void {
262
262
  process.exit(exitCode);
263
263
  }
264
264
 
265
+ function _isCliEntry(): boolean {
266
+ if (process.argv[1] === undefined) {
267
+ return false;
268
+ }
269
+ const argvUrl = pathToFileURL(resolve(process.argv[1])).href;
270
+ if (import.meta.url === argvUrl) {
271
+ return true;
272
+ }
273
+ // A symlinked invocation (e.g. via an installed `.augment/` projection,
274
+ // or macOS /var → /private/var temp dirs) makes the raw URLs differ:
275
+ // import.meta.url is the resolved real path while argv[1] keeps the
276
+ // symlink path. Compare realpaths so the entry guard still fires
277
+ // (without this the CLI silently no-ops when run through a symlink).
278
+ try {
279
+ const here = realpathSync(fileURLToPath(import.meta.url));
280
+ const argv = realpathSync(resolve(process.argv[1]));
281
+ return here === argv;
282
+ } catch {
283
+ return false;
284
+ }
285
+ }
286
+
265
287
  const isCliEntry =
266
- process.argv[1] !== undefined &&
267
- import.meta.url === pathToFileURL(resolve(process.argv[1])).href;
288
+ _isCliEntry();
268
289
  if (isCliEntry) {
269
290
  main();
270
291
  }
@@ -26,12 +26,12 @@
26
26
 
27
27
  import { Buffer } from "node:buffer";
28
28
  import { spawnSync } from "node:child_process";
29
- import { cpSync, existsSync, mkdtempSync, readdirSync, readFileSync, rmSync, statSync } from "node:fs";
29
+ import { realpathSync, cpSync, existsSync, mkdtempSync, readdirSync, readFileSync, rmSync, statSync } from "node:fs";
30
30
  import { tmpdir } from "node:os";
31
31
  import path from "node:path";
32
32
  import process from "node:process";
33
33
  import { parseArgs } from "node:util";
34
- import { pathToFileURL } from "node:url";
34
+ import { fileURLToPath, pathToFileURL } from "node:url";
35
35
 
36
36
  import { compareOutcomes, type ChannelDiff, type NormalizeMode, type RunOutcome } from "./compare.js";
37
37
 
@@ -334,8 +334,30 @@ function main(): void {
334
334
  process.exit(report.status === "fail" ? 1 : 0);
335
335
  }
336
336
 
337
+ function _isCliEntry(): boolean {
338
+ if (process.argv[1] === undefined) {
339
+ return false;
340
+ }
341
+ const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
342
+ if (import.meta.url === argvUrl) {
343
+ return true;
344
+ }
345
+ // A symlinked invocation (e.g. via an installed `.augment/` projection,
346
+ // or macOS /var → /private/var temp dirs) makes the raw URLs differ:
347
+ // import.meta.url is the resolved real path while argv[1] keeps the
348
+ // symlink path. Compare realpaths so the entry guard still fires
349
+ // (without this the CLI silently no-ops when run through a symlink).
350
+ try {
351
+ const here = realpathSync(fileURLToPath(import.meta.url));
352
+ const argv = realpathSync(path.resolve(process.argv[1]));
353
+ return here === argv;
354
+ } catch {
355
+ return false;
356
+ }
357
+ }
358
+
337
359
  const isCliEntry =
338
- process.argv[1] !== undefined && import.meta.url === pathToFileURL(path.resolve(process.argv[1])).href;
360
+ _isCliEntry();
339
361
  if (isCliEntry) {
340
362
  main();
341
363
  }
@@ -355,9 +355,28 @@ export function main(argv: string[] | null = null): number {
355
355
  return cmd_import(parsed.args);
356
356
  }
357
357
 
358
- const _isCliEntry =
359
- process.argv[1] !== undefined &&
360
- import.meta.url === pathToFileURL(path.resolve(process.argv[1])).href;
361
- if (_isCliEntry || process.argv[1] === _HERE) {
358
+ function _isCliEntry(): boolean {
359
+ if (process.argv[1] === undefined) {
360
+ return false;
361
+ }
362
+ const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
363
+ if (import.meta.url === argvUrl) {
364
+ return true;
365
+ }
366
+ // A symlinked invocation (e.g. via an installed `.augment/` projection,
367
+ // or macOS /var → /private/var temp dirs) makes the raw URLs differ:
368
+ // import.meta.url is the resolved real path while argv[1] keeps the
369
+ // symlink path. Compare realpaths so the entry guard still fires
370
+ // (without this the CLI silently no-ops when run through a symlink).
371
+ try {
372
+ const here = fs.realpathSync(fileURLToPath(import.meta.url));
373
+ const argv = fs.realpathSync(path.resolve(process.argv[1]));
374
+ return here === argv;
375
+ } catch {
376
+ return false;
377
+ }
378
+ }
379
+
380
+ if (_isCliEntry() || process.argv[1] === _HERE) {
362
381
  process.exitCode = main();
363
382
  }
@@ -597,9 +597,28 @@ export function main(argv: string[] | null = null): number {
597
597
  return plan.conflicts.length ? 1 : 0;
598
598
  }
599
599
 
600
- const _isCliEntry =
601
- process.argv[1] !== undefined &&
602
- import.meta.url === pathToFileURL(path.resolve(process.argv[1])).href;
603
- if (_isCliEntry || process.argv[1] === _HERE) {
600
+ function _isCliEntry(): boolean {
601
+ if (process.argv[1] === undefined) {
602
+ return false;
603
+ }
604
+ const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
605
+ if (import.meta.url === argvUrl) {
606
+ return true;
607
+ }
608
+ // A symlinked invocation (e.g. via an installed `.augment/` projection,
609
+ // or macOS /var → /private/var temp dirs) makes the raw URLs differ:
610
+ // import.meta.url is the resolved real path while argv[1] keeps the
611
+ // symlink path. Compare realpaths so the entry guard still fires
612
+ // (without this the CLI silently no-ops when run through a symlink).
613
+ try {
614
+ const here = fs.realpathSync(fileURLToPath(import.meta.url));
615
+ const argv = fs.realpathSync(path.resolve(process.argv[1]));
616
+ return here === argv;
617
+ } catch {
618
+ return false;
619
+ }
620
+ }
621
+
622
+ if (_isCliEntry() || process.argv[1] === _HERE) {
604
623
  process.exit(main());
605
624
  }
@@ -48,7 +48,7 @@
48
48
  import * as fs from 'node:fs';
49
49
  import * as path from 'node:path';
50
50
  import process from 'node:process';
51
- import { pathToFileURL } from 'node:url';
51
+ import { fileURLToPath, pathToFileURL } from 'node:url';
52
52
 
53
53
  import { PyRandom } from '../_lib/py_random.js';
54
54
 
@@ -520,9 +520,30 @@ function isFile(p: string): boolean {
520
520
  }
521
521
  }
522
522
 
523
+ function _isCliEntry(): boolean {
524
+ if (process.argv[1] === undefined) {
525
+ return false;
526
+ }
527
+ const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
528
+ if (import.meta.url === argvUrl) {
529
+ return true;
530
+ }
531
+ // A symlinked invocation (e.g. via an installed `.augment/` projection,
532
+ // or macOS /var → /private/var temp dirs) makes the raw URLs differ:
533
+ // import.meta.url is the resolved real path while argv[1] keeps the
534
+ // symlink path. Compare realpaths so the entry guard still fires
535
+ // (without this the CLI silently no-ops when run through a symlink).
536
+ try {
537
+ const here = fs.realpathSync(fileURLToPath(import.meta.url));
538
+ const argv = fs.realpathSync(path.resolve(process.argv[1]));
539
+ return here === argv;
540
+ } catch {
541
+ return false;
542
+ }
543
+ }
544
+
523
545
  const _invokedDirectly =
524
- process.argv[1] !== undefined &&
525
- import.meta.url === pathToFileURL(path.resolve(process.argv[1])).href;
546
+ _isCliEntry();
526
547
  if (_invokedDirectly) {
527
548
  try {
528
549
  const rc = main();
@@ -70,7 +70,7 @@
70
70
  import * as fs from 'node:fs';
71
71
  import * as path from 'node:path';
72
72
  import process from 'node:process';
73
- import { pathToFileURL } from 'node:url';
73
+ import { fileURLToPath, pathToFileURL } from 'node:url';
74
74
 
75
75
  import { PyRandom } from '../_lib/py_random.js';
76
76
  import { _score, ev_table, grid, type EvRow } from './score_ev.js';
@@ -660,9 +660,30 @@ function pyFloatRepr(x: number): string {
660
660
  return Number.isInteger(x) ? `${x}.0` : String(x);
661
661
  }
662
662
 
663
+ function _isCliEntry(): boolean {
664
+ if (process.argv[1] === undefined) {
665
+ return false;
666
+ }
667
+ const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
668
+ if (import.meta.url === argvUrl) {
669
+ return true;
670
+ }
671
+ // A symlinked invocation (e.g. via an installed `.augment/` projection,
672
+ // or macOS /var → /private/var temp dirs) makes the raw URLs differ:
673
+ // import.meta.url is the resolved real path while argv[1] keeps the
674
+ // symlink path. Compare realpaths so the entry guard still fires
675
+ // (without this the CLI silently no-ops when run through a symlink).
676
+ try {
677
+ const here = fs.realpathSync(fileURLToPath(import.meta.url));
678
+ const argv = fs.realpathSync(path.resolve(process.argv[1]));
679
+ return here === argv;
680
+ } catch {
681
+ return false;
682
+ }
683
+ }
684
+
663
685
  const _invokedDirectly =
664
- process.argv[1] !== undefined &&
665
- import.meta.url === pathToFileURL(path.resolve(process.argv[1])).href;
686
+ _isCliEntry();
666
687
  if (_invokedDirectly) {
667
688
  try {
668
689
  const rc = main();
@@ -40,7 +40,7 @@
40
40
  import * as fs from 'node:fs';
41
41
  import * as path from 'node:path';
42
42
  import process from 'node:process';
43
- import { pathToFileURL } from 'node:url';
43
+ import { fileURLToPath, pathToFileURL } from 'node:url';
44
44
 
45
45
  import { pyRound } from '../_lib/value_ladder.js';
46
46
 
@@ -529,9 +529,30 @@ export function main(argv: string[] = process.argv.slice(2)): number {
529
529
  return 0;
530
530
  }
531
531
 
532
+ function _isCliEntry(): boolean {
533
+ if (process.argv[1] === undefined) {
534
+ return false;
535
+ }
536
+ const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
537
+ if (import.meta.url === argvUrl) {
538
+ return true;
539
+ }
540
+ // A symlinked invocation (e.g. via an installed `.augment/` projection,
541
+ // or macOS /var → /private/var temp dirs) makes the raw URLs differ:
542
+ // import.meta.url is the resolved real path while argv[1] keeps the
543
+ // symlink path. Compare realpaths so the entry guard still fires
544
+ // (without this the CLI silently no-ops when run through a symlink).
545
+ try {
546
+ const here = fs.realpathSync(fileURLToPath(import.meta.url));
547
+ const argv = fs.realpathSync(path.resolve(process.argv[1]));
548
+ return here === argv;
549
+ } catch {
550
+ return false;
551
+ }
552
+ }
553
+
532
554
  const _invokedDirectly =
533
- process.argv[1] !== undefined &&
534
- import.meta.url === pathToFileURL(path.resolve(process.argv[1])).href;
555
+ _isCliEntry();
535
556
  if (_invokedDirectly) {
536
557
  try {
537
558
  const rc = main();
@@ -43,6 +43,7 @@
43
43
 
44
44
  import { spawnSync } from 'node:child_process';
45
45
  import * as path from 'node:path';
46
+ import * as fs from 'node:fs';
46
47
  import { fileURLToPath, pathToFileURL } from 'node:url';
47
48
 
48
49
  import { _matches } from './check_release_pr_shape.js';
@@ -227,10 +228,29 @@ function main(argv?: readonly string[]): number {
227
228
  return exit_code;
228
229
  }
229
230
 
230
- const _isCliEntry =
231
- process.argv[1] !== undefined &&
232
- import.meta.url === pathToFileURL(path.resolve(process.argv[1])).href;
233
- if (_isCliEntry || process.argv[1] === _HERE) {
231
+ function _isCliEntry(): boolean {
232
+ if (process.argv[1] === undefined) {
233
+ return false;
234
+ }
235
+ const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
236
+ if (import.meta.url === argvUrl) {
237
+ return true;
238
+ }
239
+ // A symlinked invocation (e.g. via an installed `.augment/` projection,
240
+ // or macOS /var → /private/var temp dirs) makes the raw URLs differ:
241
+ // import.meta.url is the resolved real path while argv[1] keeps the
242
+ // symlink path. Compare realpaths so the entry guard still fires
243
+ // (without this the CLI silently no-ops when run through a symlink).
244
+ try {
245
+ const here = fs.realpathSync(fileURLToPath(import.meta.url));
246
+ const argv = fs.realpathSync(path.resolve(process.argv[1]));
247
+ return here === argv;
248
+ } catch {
249
+ return false;
250
+ }
251
+ }
252
+
253
+ if (_isCliEntry() || process.argv[1] === _HERE) {
234
254
  process.exitCode = main();
235
255
  }
236
256
 
@@ -134,9 +134,30 @@ function main(argv: string[]): number {
134
134
  return 0;
135
135
  }
136
136
 
137
+ function _isCliEntry(): boolean {
138
+ if (process.argv[1] === undefined) {
139
+ return false;
140
+ }
141
+ const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
142
+ if (import.meta.url === argvUrl) {
143
+ return true;
144
+ }
145
+ // A symlinked invocation (e.g. via an installed `.augment/` projection,
146
+ // or macOS /var → /private/var temp dirs) makes the raw URLs differ:
147
+ // import.meta.url is the resolved real path while argv[1] keeps the
148
+ // symlink path. Compare realpaths so the entry guard still fires
149
+ // (without this the CLI silently no-ops when run through a symlink).
150
+ try {
151
+ const here = fs.realpathSync(fileURLToPath(import.meta.url));
152
+ const argv = fs.realpathSync(path.resolve(process.argv[1]));
153
+ return here === argv;
154
+ } catch {
155
+ return false;
156
+ }
157
+ }
158
+
137
159
  const _IS_MAIN =
138
- process.argv[1] !== undefined &&
139
- import.meta.url === pathToFileURL(path.resolve(process.argv[1])).href;
160
+ _isCliEntry();
140
161
 
141
162
  if (_IS_MAIN) {
142
163
  process.exit(main(process.argv.slice(2)));
@@ -469,6 +469,28 @@ function _splitMax(s: string, sep: string, maxsplit: number): string[] {
469
469
  return parts;
470
470
  }
471
471
 
472
- if (import.meta.url === pathToFileURL(process.argv[1] ?? '').href) {
472
+ function _isCliEntry(): boolean {
473
+ if (process.argv[1] === undefined) {
474
+ return false;
475
+ }
476
+ const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
477
+ if (import.meta.url === argvUrl) {
478
+ return true;
479
+ }
480
+ // A symlinked invocation (e.g. via an installed `.augment/` projection,
481
+ // or macOS /var → /private/var temp dirs) makes the raw URLs differ:
482
+ // import.meta.url is the resolved real path while argv[1] keeps the
483
+ // symlink path. Compare realpaths so the entry guard still fires
484
+ // (without this the CLI silently no-ops when run through a symlink).
485
+ try {
486
+ const here = fs.realpathSync(fileURLToPath(import.meta.url));
487
+ const argv = fs.realpathSync(path.resolve(process.argv[1]));
488
+ return here === argv;
489
+ } catch {
490
+ return false;
491
+ }
492
+ }
493
+
494
+ if (_isCliEntry()) {
473
495
  process.exitCode = main();
474
496
  }