@event4u/agent-config 8.0.0 → 8.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (593) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/CHANGELOG.md +53 -568
  3. package/dist/agent-src/commands/agents/init.md +3 -3
  4. package/dist/agent-src/commands/chat-history/import.md +5 -5
  5. package/dist/agent-src/commands/chat-history.md +1 -1
  6. package/dist/agent-src/commands/condense.md +1 -1
  7. package/dist/agent-src/commands/context/create.md +1 -1
  8. package/dist/agent-src/commands/council/analysis.md +2 -2
  9. package/dist/agent-src/commands/council/default.md +3 -3
  10. package/dist/agent-src/commands/council/design.md +2 -2
  11. package/dist/agent-src/commands/council/optimize.md +1 -1
  12. package/dist/agent-src/commands/council/pr.md +2 -2
  13. package/dist/agent-src/commands/council.md +1 -1
  14. package/dist/agent-src/commands/feature/plan.md +1 -1
  15. package/dist/agent-src/commands/ghostwriter/list.md +1 -1
  16. package/dist/agent-src/commands/ghostwriter/write.md +1 -1
  17. package/dist/agent-src/commands/ghostwriter.md +1 -1
  18. package/dist/agent-src/commands/implement-ticket.md +2 -2
  19. package/dist/agent-src/commands/judge/on-diff.md +1 -1
  20. package/dist/agent-src/commands/judge/steps.md +3 -1
  21. package/dist/agent-src/commands/memory/add.md +2 -2
  22. package/dist/agent-src/commands/memory/learn-low-impact.md +1 -1
  23. package/dist/agent-src/commands/memory/load.md +1 -1
  24. package/dist/agent-src/commands/memory/mine-session.md +1 -1
  25. package/dist/agent-src/commands/memory/promote.md +1 -1
  26. package/dist/agent-src/commands/memory/propose.md +1 -1
  27. package/dist/agent-src/commands/mission/upgrade.md +1 -1
  28. package/dist/agent-src/commands/module/explore.md +3 -3
  29. package/dist/agent-src/commands/optimize/agents-dir.md +1 -1
  30. package/dist/agent-src/commands/optimize/skills.md +1 -1
  31. package/dist/agent-src/commands/optimize-project.md +1 -1
  32. package/dist/agent-src/commands/orchestrate.md +2 -2
  33. package/dist/agent-src/commands/project-analyze.md +1 -1
  34. package/dist/agent-src/commands/project-health.md +1 -1
  35. package/dist/agent-src/commands/roadmap/ai-council.md +1 -1
  36. package/dist/agent-src/commands/roadmap/create.md +2 -2
  37. package/dist/agent-src/commands/roadmap/process-full.md +3 -1
  38. package/dist/agent-src/commands/roadmap/process-phase.md +4 -2
  39. package/dist/agent-src/commands/roadmap/process-step.md +3 -1
  40. package/dist/agent-src/commands/security-audit-config.md +1 -1
  41. package/dist/agent-src/commands/sync-agent-settings.md +7 -7
  42. package/dist/agent-src/commands/sync-gitignore/fix.md +3 -3
  43. package/dist/agent-src/commands/sync-gitignore.md +4 -4
  44. package/dist/agent-src/commands/work.md +3 -3
  45. package/dist/agent-src/contexts/communication/rules-auto/skill-quality-mechanics.md +1 -1
  46. package/dist/agent-src/contexts/communication/rules-auto/slash-command-routing-policy-mechanics.md +2 -2
  47. package/dist/agent-src/contexts/contracts/artifact-engagement-flow.md +1 -1
  48. package/dist/agent-src/contexts/contracts/command-suggestion-flow.md +8 -7
  49. package/dist/agent-src/contexts/execution/evidence-discipline.md +2 -2
  50. package/dist/agent-src/contexts/execution/roadmap-process-loop.md +9 -4
  51. package/dist/agent-src/contexts/execution/toolchain-resolver.md +10 -9
  52. package/dist/agent-src/contexts/execution/verification-mechanics.md +13 -1
  53. package/dist/agent-src/packs/README.md +1 -1
  54. package/dist/agent-src/presets/README.md +1 -1
  55. package/dist/agent-src/profiles/README.md +1 -1
  56. package/dist/agent-src/rules/architecture.md +2 -2
  57. package/dist/agent-src/rules/commit-policy.md +10 -0
  58. package/dist/agent-src/rules/context-hygiene.md +2 -2
  59. package/dist/agent-src/rules/fast-path-marker-visibility.md +1 -1
  60. package/dist/agent-src/rules/framework-neutrality-in-generic-skills.md +1 -1
  61. package/dist/agent-src/rules/linked-projects-onboarding-gate.md +1 -1
  62. package/dist/agent-src/rules/low-impact-corpus-privacy-floor.md +3 -3
  63. package/dist/agent-src/rules/media-governance-routing.md +1 -1
  64. package/dist/agent-src/rules/no-roadmap-references.md +3 -3
  65. package/dist/agent-src/rules/preservation-guard.md +2 -2
  66. package/dist/agent-src/rules/roadmap-ci-steps-policy.md +6 -5
  67. package/dist/agent-src/rules/roadmap-progress-sync.md +3 -3
  68. package/dist/agent-src/rules/security-sensitive-stop.md +7 -9
  69. package/dist/agent-src/rules/source-confidentiality.md +1 -1
  70. package/dist/agent-src/rules/telegraph-speak.md +1 -1
  71. package/dist/agent-src/rules/token-optimizer-maintenance.md +1 -1
  72. package/dist/agent-src/rules/ui-audit-gate.md +1 -1
  73. package/dist/agent-src/scripts/archive_completed_roadmaps.ts +22 -4
  74. package/dist/agent-src/scripts/update_roadmap_progress.ts +29 -1
  75. package/dist/agent-src/skills/accessibility-auditor/SKILL.md +3 -2
  76. package/dist/agent-src/skills/adr-create/SKILL.md +8 -6
  77. package/dist/agent-src/skills/agent-docs-writing/SKILL.md +1 -1
  78. package/dist/agent-src/skills/agents-md-thin-root/SKILL.md +2 -2
  79. package/dist/agent-src/skills/ai-council/SKILL.md +15 -15
  80. package/dist/agent-src/skills/api-design/SKILL.md +1 -1
  81. package/dist/agent-src/skills/api-endpoint/SKILL.md +2 -1
  82. package/dist/agent-src/skills/authz-review/SKILL.md +1 -1
  83. package/dist/agent-src/skills/blade-ui/SKILL.md +11 -10
  84. package/dist/agent-src/skills/blameless-post-mortem/SKILL.md +9 -8
  85. package/dist/agent-src/skills/code-review/SKILL.md +3 -4
  86. package/dist/agent-src/skills/command-routing/SKILL.md +3 -3
  87. package/dist/agent-src/skills/command-writing/SKILL.md +3 -3
  88. package/dist/agent-src/skills/condense-memory/SKILL.md +2 -2
  89. package/dist/agent-src/skills/context-authoring/SKILL.md +1 -1
  90. package/dist/agent-src/skills/context-document/SKILL.md +1 -1
  91. package/dist/agent-src/skills/copilot-agents-optimization/SKILL.md +1 -1
  92. package/dist/agent-src/skills/corpus-grounding/SKILL.md +16 -11
  93. package/dist/agent-src/skills/corpus-grounding/scripts/ground.ts +24 -3
  94. package/dist/agent-src/skills/dashboard-design/SKILL.md +2 -1
  95. package/dist/agent-src/skills/database/SKILL.md +2 -1
  96. package/dist/agent-src/skills/description-assist/SKILL.md +6 -6
  97. package/dist/agent-src/skills/design-intelligence/SKILL.md +6 -5
  98. package/dist/agent-src/skills/design-tokens/SKILL.md +5 -5
  99. package/dist/agent-src/skills/design-tokens/scripts/tokens.ts +24 -3
  100. package/dist/agent-src/skills/existing-ui-audit/SKILL.md +3 -3
  101. package/dist/agent-src/skills/fe-design/SKILL.md +7 -7
  102. package/dist/agent-src/skills/finishing-a-development-branch/SKILL.md +11 -4
  103. package/dist/agent-src/skills/flux/SKILL.md +10 -9
  104. package/dist/agent-src/skills/git-workflow/SKILL.md +4 -5
  105. package/dist/agent-src/skills/guideline-writing/SKILL.md +2 -2
  106. package/dist/agent-src/skills/learning-to-rule-or-skill/SKILL.md +2 -2
  107. package/dist/agent-src/skills/livewire/SKILL.md +10 -9
  108. package/dist/agent-src/skills/memory-consolidation/SKILL.md +2 -2
  109. package/dist/agent-src/skills/module-detect-on-the-fly/SKILL.md +5 -5
  110. package/dist/agent-src/skills/module-management/SKILL.md +2 -2
  111. package/dist/agent-src/skills/prediction-pool-optimizer/SKILL.md +11 -11
  112. package/dist/agent-src/skills/prediction-pool-optimizer/reference/ev-fixtures.md +6 -6
  113. package/dist/agent-src/skills/prediction-pool-optimizer/reference/odds-and-bonus.md +1 -1
  114. package/dist/agent-src/skills/premortem/SKILL.md +1 -1
  115. package/dist/agent-src/skills/project-docs/SKILL.md +1 -1
  116. package/dist/agent-src/skills/quality-tools/SKILL.md +26 -2
  117. package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +8 -7
  118. package/dist/agent-src/skills/react-shadcn-ui/scripts/shadcn_add.ts +31 -10
  119. package/dist/agent-src/skills/refine-prompt/SKILL.md +14 -14
  120. package/dist/agent-src/skills/refine-ticket/SKILL.md +24 -25
  121. package/dist/agent-src/skills/refine-ticket/detection-map.yml +1 -1
  122. package/dist/agent-src/skills/review-routing/SKILL.md +6 -7
  123. package/dist/agent-src/skills/roadmap-management/SKILL.md +11 -6
  124. package/dist/agent-src/skills/rule-refactor/SKILL.md +1 -1
  125. package/dist/agent-src/skills/rule-writing/SKILL.md +5 -5
  126. package/dist/agent-src/skills/script-writing/SKILL.md +28 -41
  127. package/dist/agent-src/skills/skill-writing/SKILL.md +3 -3
  128. package/dist/agent-src/skills/source-discovery/SKILL.md +3 -3
  129. package/dist/agent-src/skills/sql-writing/SKILL.md +2 -1
  130. package/dist/agent-src/skills/subagent-orchestration/SKILL.md +1 -1
  131. package/dist/agent-src/skills/systematic-debugging/SKILL.md +5 -7
  132. package/dist/agent-src/skills/tailwind-engineer/SKILL.md +2 -2
  133. package/dist/agent-src/skills/tailwind-engineer/scripts/tailwind_config_gen.ts +25 -4
  134. package/dist/agent-src/skills/token-optimizer/SKILL.md +1 -1
  135. package/dist/agent-src/skills/typography-system/SKILL.md +1 -1
  136. package/dist/agent-src/skills/validate-feature-fit/SKILL.md +5 -7
  137. package/dist/agent-src/skills/verify-completion-evidence/SKILL.md +13 -1
  138. package/dist/agent-src/templates/agent-settings.md +34 -25
  139. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +3 -3
  140. package/dist/agent-src/templates/agents/memory/incident-learnings.example.yml +1 -1
  141. package/dist/agent-src/templates/agents/proposal.example.md +4 -4
  142. package/dist/agent-src/templates/copilot-instructions.md +1 -1
  143. package/dist/agent-src/templates/github-workflows/memory-hygiene.yml +10 -10
  144. package/dist/agent-src/templates/github-workflows/pr-risk-review.yml +19 -8
  145. package/dist/agent-src/templates/github-workflows/proposal-drift.yml +11 -8
  146. package/dist/agent-src/templates/github-workflows/roadmap-progress-check.yml +10 -12
  147. package/dist/agent-src/templates/hooks/pre-commit-frontmatter +21 -11
  148. package/dist/agent-src/templates/hooks/pre-commit-roadmap-progress +43 -29
  149. package/dist/agent-src/templates/roadmaps.md +9 -4
  150. package/dist/agent-src/templates/rule.md +3 -3
  151. package/dist/agent-src/templates/scripts/README.md +6 -6
  152. package/dist/agent-src/templates/scripts/check_memory.ts +24 -2
  153. package/dist/agent-src/templates/scripts/check_memory_proposal.ts +23 -4
  154. package/dist/agent-src/templates/scripts/historical-bug-patterns.example.yml +1 -1
  155. package/dist/agent-src/templates/scripts/memory_hash.ts +24 -2
  156. package/dist/agent-src/templates/scripts/memory_lookup.ts +24 -2
  157. package/dist/agent-src/templates/scripts/memory_report.ts +24 -2
  158. package/dist/agent-src/templates/scripts/memory_signal.ts +24 -2
  159. package/dist/agent-src/templates/scripts/memory_status.ts +26 -2
  160. package/dist/agent-src/templates/scripts/ownership-map.example.yml +1 -1
  161. package/dist/agent-src/templates/scripts/pr-risk-config.example.yml +1 -1
  162. package/dist/agent-src/templates/scripts/pr_review_routing.ts +24 -3
  163. package/dist/agent-src/templates/scripts/pr_risk_review.ts +0 -0
  164. package/dist/agent-src/templates/scripts/telemetry_record.ts +24 -3
  165. package/dist/agent-src/templates/scripts/telemetry_report.ts +25 -3
  166. package/dist/agent-src/templates/scripts/telemetry_status.ts +24 -3
  167. package/dist/agent-src/templates/scripts/tier_usage_report.ts +24 -2
  168. package/dist/agent-src/templates/scripts/work_engine/_lib/agent_settings.ts +44 -10
  169. package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/_chat_history_base.ts +26 -13
  170. package/dist/agent-src/templates/skill.md +2 -2
  171. package/dist/cli/python/knowledge_ingest.js +24 -3
  172. package/dist/cli/python/knowledge_ingest.js.map +1 -1
  173. package/dist/cli/python/workspace_analytics.js +23 -3
  174. package/dist/cli/python/workspace_analytics.js.map +1 -1
  175. package/dist/cli/python/workspace_crypto.js +23 -3
  176. package/dist/cli/python/workspace_crypto.js.map +1 -1
  177. package/dist/cli/python/workspace_documents.js +23 -3
  178. package/dist/cli/python/workspace_documents.js.map +1 -1
  179. package/dist/cli/python/workspace_drive.js +24 -3
  180. package/dist/cli/python/workspace_drive.js.map +1 -1
  181. package/dist/cli/python/workspace_drive_health.js +23 -3
  182. package/dist/cli/python/workspace_drive_health.js.map +1 -1
  183. package/dist/cli/python/workspace_explain.js +23 -3
  184. package/dist/cli/python/workspace_explain.js.map +1 -1
  185. package/dist/cli/python/workspace_hosts.js +23 -3
  186. package/dist/cli/python/workspace_hosts.js.map +1 -1
  187. package/dist/cli/python/workspace_inbox.js +23 -3
  188. package/dist/cli/python/workspace_inbox.js.map +1 -1
  189. package/dist/cli/python/workspace_render.js +23 -3
  190. package/dist/cli/python/workspace_render.js.map +1 -1
  191. package/dist/cli/python/workspace_roles.js +23 -3
  192. package/dist/cli/python/workspace_roles.js.map +1 -1
  193. package/dist/cli/python/workspace_sessions.js +23 -3
  194. package/dist/cli/python/workspace_sessions.js.map +1 -1
  195. package/dist/cli/python/workspace_skills.js +23 -3
  196. package/dist/cli/python/workspace_skills.js.map +1 -1
  197. package/dist/cli/registry.js +2 -0
  198. package/dist/cli/registry.js.map +1 -1
  199. package/dist/discovery/deprecation-report.md +1 -1
  200. package/dist/discovery/discovery-manifest.json +119 -119
  201. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  202. package/dist/discovery/discovery-manifest.summary.md +2 -2
  203. package/dist/discovery/orphan-report.md +1 -1
  204. package/dist/discovery/packs.json +3 -3
  205. package/dist/discovery/trust-report.md +1 -1
  206. package/dist/discovery/workspaces.json +3 -3
  207. package/dist/install/install.mjs +67 -28
  208. package/dist/mcp/registry-manifest.json +2 -2
  209. package/dist/server/routes/settings.js +4 -4
  210. package/dist/server/routes/settings.js.map +1 -1
  211. package/dist/server/schemas/settings.js +1 -1
  212. package/dist/server/schemas/settings.js.map +1 -1
  213. package/docs/CLAIMS.md +2 -2
  214. package/docs/archive/CHANGELOG-pre-8.0.0.md +301 -0
  215. package/docs/archive/CHANGELOG-pre-8.1.0.md +316 -0
  216. package/docs/benchmark.md +40 -0
  217. package/docs/contracts/skill-bundled-assets.md +2 -2
  218. package/docs/customization.md +1 -1
  219. package/docs/decisions/ADR-110-discipline-profile-resolution-locus.md +9 -4
  220. package/docs/guidelines/agent-infra/corpus-grounding-authoring.md +2 -2
  221. package/docs/guidelines/agent-infra/engineering-memory-data-format.md +4 -4
  222. package/docs/guidelines/agent-infra/installed-tools-manifest.md +3 -3
  223. package/docs/guidelines/agent-infra/language-and-tone-examples.md +2 -2
  224. package/docs/guidelines/agent-infra/layered-settings.md +4 -4
  225. package/docs/guidelines/agent-infra/memory-access.md +19 -18
  226. package/docs/guidelines/agent-infra/naming.md +1 -1
  227. package/docs/guidelines/agent-infra/roadmap-progress-mechanics.md +5 -5
  228. package/docs/guidelines/agent-infra/role-contracts.md +1 -1
  229. package/docs/guidelines/agent-infra/security-lint-containment.md +2 -2
  230. package/docs/guidelines/agent-infra/self-improvement-pipeline.md +1 -1
  231. package/docs/guidelines/agent-infra/size-and-scope.md +1 -1
  232. package/docs/guidelines/agent-infra/skill-quality-checklist.md +5 -5
  233. package/docs/guidelines/augment-portability-patterns.md +1 -1
  234. package/docs/proof.md +1 -1
  235. package/docs/setup/per-ide/claude-code.md +10 -4
  236. package/package.json +3 -2
  237. package/src/config/agent-settings.template.yml +31 -17
  238. package/src/config/host-capabilities.yml +25 -16
  239. package/src/config/profiles/balanced.ini +5 -3
  240. package/src/scripts/_cli/cmd_analyze_session.ts +23 -4
  241. package/src/scripts/_cli/cmd_conformance.ts +23 -4
  242. package/src/scripts/_cli/cmd_doctor.ts +96 -8
  243. package/src/scripts/_cli/cmd_explain.ts +23 -4
  244. package/src/scripts/_cli/cmd_export.ts +23 -4
  245. package/src/scripts/_cli/cmd_fleet.ts +23 -4
  246. package/src/scripts/_cli/cmd_migrate.ts +23 -4
  247. package/src/scripts/_cli/cmd_preflight.ts +24 -4
  248. package/src/scripts/_cli/cmd_prune.ts +23 -4
  249. package/src/scripts/_cli/cmd_refresh.ts +23 -4
  250. package/src/scripts/_cli/cmd_settings_check.ts +23 -4
  251. package/src/scripts/_cli/cmd_settings_migrate.ts +23 -4
  252. package/src/scripts/_cli/cmd_sync.ts +23 -4
  253. package/src/scripts/_cli/cmd_uninstall.ts +23 -4
  254. package/src/scripts/_cli/cmd_update.ts +23 -4
  255. package/src/scripts/_cli/cmd_upgrade.ts +238 -9
  256. package/src/scripts/_cli/cmd_validate.ts +23 -4
  257. package/src/scripts/_cli/cmd_versions.ts +23 -4
  258. package/src/scripts/_dispatch.bash +62 -19
  259. package/src/scripts/_lib/claude_plugin.ts +83 -0
  260. package/src/scripts/_lib/knowledge_global.ts +24 -2
  261. package/src/scripts/_lib/knowledge_global_promote.ts +24 -2
  262. package/src/scripts/_lib/knowledge_global_redaction.ts +24 -2
  263. package/src/scripts/_lib/link_crypto.ts +24 -5
  264. package/src/scripts/_lib/pin_resolver.ts +24 -3
  265. package/src/scripts/adoption_report.ts +23 -4
  266. package/src/scripts/adoption_snapshot.ts +23 -1
  267. package/src/scripts/adoption_status.ts +23 -4
  268. package/src/scripts/adr/regenerate_index.ts +24 -3
  269. package/src/scripts/ai_council/airgap.ts +25 -2
  270. package/src/scripts/ai_council/compile_corpus.ts +24 -2
  271. package/src/scripts/ai_council/pricing.ts +11 -1
  272. package/src/scripts/analysis_freshness.ts +23 -4
  273. package/src/scripts/annotate_discovery.ts +23 -1
  274. package/src/scripts/apply_modules_config.ts +23 -4
  275. package/src/scripts/audit_adr_coverage.ts +23 -4
  276. package/src/scripts/audit_auto_rules.ts +23 -1
  277. package/src/scripts/audit_cloud_compatibility.ts +23 -4
  278. package/src/scripts/audit_command_surface.ts +23 -4
  279. package/src/scripts/audit_initial_context.ts +23 -3
  280. package/src/scripts/audit_likelihood.ts +23 -1
  281. package/src/scripts/audit_mcp_tools.ts +23 -3
  282. package/src/scripts/audit_overlap.ts +23 -1
  283. package/src/scripts/audit_skill_descriptions.ts +24 -2
  284. package/src/scripts/audit_skill_overlap.ts +23 -1
  285. package/src/scripts/audit_user_type_axis.ts +23 -4
  286. package/src/scripts/backfill_model_tier.ts +23 -4
  287. package/src/scripts/bench_ab_cache_dispatch.ts +23 -1
  288. package/src/scripts/bench_ab_clone.ts +23 -1
  289. package/src/scripts/bench_ab_diff.ts +23 -1
  290. package/src/scripts/bench_ab_integrity.ts +23 -1
  291. package/src/scripts/bench_ab_run.ts +23 -2
  292. package/src/scripts/bench_ab_task_runner.ts +23 -1
  293. package/src/scripts/bench_ab_tracka_run.ts +23 -2
  294. package/src/scripts/bench_ab_v2_run.ts +23 -1
  295. package/src/scripts/bench_ab_v2_stats.ts +23 -1
  296. package/src/scripts/bench_baseline_ready.ts +23 -1
  297. package/src/scripts/bench_condense_memory.ts +23 -1
  298. package/src/scripts/bench_drift_check.ts +23 -2
  299. package/src/scripts/bench_matrix.ts +23 -4
  300. package/src/scripts/bench_per_tool.ts +23 -1
  301. package/src/scripts/bench_quality_run.ts +23 -2
  302. package/src/scripts/bench_rtk_savings.ts +23 -1
  303. package/src/scripts/bench_rule_load_latency.ts +23 -2
  304. package/src/scripts/bench_run.ts +23 -2
  305. package/src/scripts/bench_runner.ts +23 -1
  306. package/src/scripts/build_cloud_bundle.ts +23 -3
  307. package/src/scripts/build_discovery_manifest.ts +23 -4
  308. package/src/scripts/build_linear_digest.ts +23 -3
  309. package/src/scripts/build_mcp_registry_manifest.ts +23 -4
  310. package/src/scripts/build_rule_trigger_matrix.ts +23 -4
  311. package/src/scripts/capture_showcase_session.ts +23 -1
  312. package/src/scripts/chat_history.ts +24 -3
  313. package/src/scripts/check_always_budget.ts +23 -2
  314. package/src/scripts/check_artefact_checksums.ts +23 -4
  315. package/src/scripts/check_augment_description_cap.ts +23 -4
  316. package/src/scripts/check_augmentignore.ts +23 -4
  317. package/src/scripts/check_beta_review_markers.ts +23 -4
  318. package/src/scripts/check_cluster_patterns.ts +23 -4
  319. package/src/scripts/check_command_count_messaging.ts +23 -4
  320. package/src/scripts/check_comparison.ts +23 -1
  321. package/src/scripts/check_condensation.ts +24 -3
  322. package/src/scripts/check_condensed_paths.ts +23 -2
  323. package/src/scripts/check_context_paths.ts +23 -4
  324. package/src/scripts/check_council_config_location.ts +23 -4
  325. package/src/scripts/check_council_layout.ts +23 -4
  326. package/src/scripts/check_council_references.ts +23 -4
  327. package/src/scripts/check_discovery_determinism.ts +24 -4
  328. package/src/scripts/check_gate_paths.ts +23 -4
  329. package/src/scripts/check_generated_artefact_headers.ts +23 -4
  330. package/src/scripts/check_generator_output_coverage.ts +23 -4
  331. package/src/scripts/check_gitignore_freshness.ts +23 -4
  332. package/src/scripts/check_iron_law_prominence.ts +23 -4
  333. package/src/scripts/check_kernel_prefix_stability.ts +0 -0
  334. package/src/scripts/check_kernel_rule_bundle.ts +23 -4
  335. package/src/scripts/check_knowledge_cards.ts +23 -1
  336. package/src/scripts/check_md_language.ts +23 -4
  337. package/src/scripts/check_media_deps.ts +24 -1
  338. package/src/scripts/check_memory.ts +24 -2
  339. package/src/scripts/check_memory_proposal.ts +23 -4
  340. package/src/scripts/check_module_management_neutral.ts +23 -4
  341. package/src/scripts/check_no_conflict_markers.ts +23 -4
  342. package/src/scripts/check_no_external_sources.ts +23 -4
  343. package/src/scripts/check_no_local_settings_committed.ts +24 -4
  344. package/src/scripts/check_no_new_legacy_path.ts +23 -4
  345. package/src/scripts/check_no_roadmap_refs.ts +23 -4
  346. package/src/scripts/check_one_off_location.ts +23 -4
  347. package/src/scripts/check_overlay_cascade_subdirs.ts +23 -4
  348. package/src/scripts/check_portability.ts +24 -3
  349. package/src/scripts/check_proposal.ts +0 -0
  350. package/src/scripts/check_public_catalog_links.ts +23 -4
  351. package/src/scripts/check_public_links.ts +23 -4
  352. package/src/scripts/check_quality_regression.ts +23 -2
  353. package/src/scripts/check_references.ts +23 -4
  354. package/src/scripts/check_release_includes_discovery.ts +23 -4
  355. package/src/scripts/check_release_pr_shape.ts +23 -4
  356. package/src/scripts/check_release_published.ts +23 -4
  357. package/src/scripts/check_release_trunk_sync.ts +23 -4
  358. package/src/scripts/check_reply_consistency.ts +23 -4
  359. package/src/scripts/check_roadmap_trackable.ts +23 -4
  360. package/src/scripts/check_role_doc_links.ts +23 -4
  361. package/src/scripts/check_safety_floor_untouched.ts +24 -4
  362. package/src/scripts/check_site_links.ts +23 -1
  363. package/src/scripts/check_skill_gaps.ts +23 -1
  364. package/src/scripts/check_skill_requires.ts +23 -4
  365. package/src/scripts/check_structural_breaking.ts +24 -4
  366. package/src/scripts/check_surface_tiers.ts +23 -4
  367. package/src/scripts/check_template_pin_drift.ts +23 -4
  368. package/src/scripts/check_test_coverage_diff.ts +23 -4
  369. package/src/scripts/check_token_optimizer_freshness.ts +23 -4
  370. package/src/scripts/check_token_quality_golden.ts +23 -2
  371. package/src/scripts/check_token_regression.ts +23 -2
  372. package/src/scripts/check_tracked_but_ignored.ts +24 -4
  373. package/src/scripts/check_trigger_evals.ts +23 -4
  374. package/src/scripts/check_trunk_drift.ts +24 -1
  375. package/src/scripts/check_update_banner.ts +23 -4
  376. package/src/scripts/ci_summary.ts +23 -4
  377. package/src/scripts/ci_time_ratio.ts +23 -4
  378. package/src/scripts/cluster_near_miss_patterns.ts +0 -0
  379. package/src/scripts/compile_router.ts +23 -4
  380. package/src/scripts/condense.ts +23 -2
  381. package/src/scripts/condense_memory.ts +24 -2
  382. package/src/scripts/config/packs.ts +24 -4
  383. package/src/scripts/config/session_profiles.ts +23 -4
  384. package/src/scripts/context_hygiene_hook.ts +24 -3
  385. package/src/scripts/cost_by_conversation.ts +23 -4
  386. package/src/scripts/cost_summary.ts +23 -4
  387. package/src/scripts/council_cli.ts +35 -7
  388. package/src/scripts/council_prune.ts +25 -2
  389. package/src/scripts/cross_repo_retrieve.ts +23 -4
  390. package/src/scripts/discovery_stats.ts +23 -4
  391. package/src/scripts/evidence_report.ts +23 -1
  392. package/src/scripts/export_replay_corpus.ts +23 -2
  393. package/src/scripts/extract_audit_patterns.ts +23 -1
  394. package/src/scripts/first_run_gate_hook.ts +24 -3
  395. package/src/scripts/gen_discovery_baseline.ts +23 -4
  396. package/src/scripts/generate_capabilities_index.ts +24 -5
  397. package/src/scripts/generate_capability_matrix.ts +23 -4
  398. package/src/scripts/generate_catalog.ts +23 -1
  399. package/src/scripts/generate_command_flows.ts +23 -4
  400. package/src/scripts/generate_cookbook.ts +23 -4
  401. package/src/scripts/generate_index.ts +23 -4
  402. package/src/scripts/generate_ownership_matrix.ts +23 -1
  403. package/src/scripts/generate_pack_manifests.ts +24 -5
  404. package/src/scripts/generate_role_experiences_catalog.ts +23 -4
  405. package/src/scripts/hooks/block_no_verify.ts +23 -4
  406. package/src/scripts/hooks/design_slop_hook.ts +24 -3
  407. package/src/scripts/hooks/dispatch_hook.ts +47 -14
  408. package/src/scripts/hooks/replay_hook.ts +23 -2
  409. package/src/scripts/hooks/rtk_wrap_hook.ts +24 -5
  410. package/src/scripts/hooks_doctor.ts +23 -2
  411. package/src/scripts/hooks_status.ts +23 -2
  412. package/src/scripts/injection_scan_hook.ts +24 -5
  413. package/src/scripts/install.ts +72 -44
  414. package/src/scripts/inventory_abstraction_budget.ts +23 -1
  415. package/src/scripts/inventory_frontmatter.ts +23 -1
  416. package/src/scripts/inventory_meta_layers.ts +23 -1
  417. package/src/scripts/iron_law_sha.ts +23 -4
  418. package/src/scripts/janitor.ts +23 -4
  419. package/src/scripts/knowledge_global_cli.ts +24 -2
  420. package/src/scripts/linked_projects_list.ts +23 -4
  421. package/src/scripts/lint_agent_security.ts +23 -4
  422. package/src/scripts/lint_agent_skill_names.ts +23 -4
  423. package/src/scripts/lint_agents_layout.ts +23 -4
  424. package/src/scripts/lint_agents_md.ts +23 -4
  425. package/src/scripts/lint_archived_skills.ts +23 -4
  426. package/src/scripts/lint_artefact_frontmatter.ts +23 -4
  427. package/src/scripts/lint_bench_ab.ts +23 -4
  428. package/src/scripts/lint_bench_corpus.ts +23 -2
  429. package/src/scripts/lint_command_flow_coverage.ts +23 -4
  430. package/src/scripts/lint_command_routing.ts +23 -4
  431. package/src/scripts/lint_command_tiers.ts +23 -2
  432. package/src/scripts/lint_command_verbs.ts +23 -4
  433. package/src/scripts/lint_commit_subjects.ts +24 -4
  434. package/src/scripts/lint_confusables.ts +25 -5
  435. package/src/scripts/lint_context_spine_usage.ts +23 -4
  436. package/src/scripts/lint_discovery_manifest.ts +23 -4
  437. package/src/scripts/lint_discovery_vocabulary.ts +23 -4
  438. package/src/scripts/lint_empty_roadmaps.ts +23 -4
  439. package/src/scripts/lint_eval_freshness.ts +23 -4
  440. package/src/scripts/lint_examples.ts +23 -4
  441. package/src/scripts/lint_explain_trace.ts +23 -4
  442. package/src/scripts/lint_featured_skills.ts +0 -0
  443. package/src/scripts/lint_flows.ts +23 -4
  444. package/src/scripts/lint_framework_leakage.ts +23 -4
  445. package/src/scripts/lint_frontmatter_boilerplate.ts +23 -4
  446. package/src/scripts/lint_ghostwriter_source.ts +23 -4
  447. package/src/scripts/lint_global_paths.ts +23 -2
  448. package/src/scripts/lint_handoffs.ts +23 -4
  449. package/src/scripts/lint_hidden_unicode.ts +24 -5
  450. package/src/scripts/lint_hook_concern_budget.ts +23 -4
  451. package/src/scripts/lint_hook_manifest.ts +23 -2
  452. package/src/scripts/lint_instruction_smuggling.ts +25 -5
  453. package/src/scripts/lint_legal_pack.ts +23 -1
  454. package/src/scripts/lint_load_context.ts +23 -4
  455. package/src/scripts/lint_marketplace.ts +24 -3
  456. package/src/scripts/lint_marketplace_install_completeness.ts +23 -4
  457. package/src/scripts/lint_mcp_config_security.ts +25 -5
  458. package/src/scripts/lint_mcp_registry_manifest.ts +23 -4
  459. package/src/scripts/lint_media_policy_linkage.ts +23 -4
  460. package/src/scripts/lint_missions.ts +23 -4
  461. package/src/scripts/lint_model_tier_coverage.ts +23 -4
  462. package/src/scripts/lint_namespace.ts +23 -4
  463. package/src/scripts/lint_namespace_collisions.ts +23 -4
  464. package/src/scripts/lint_new_skill_gate.ts +23 -4
  465. package/src/scripts/lint_no_new_atomic_commands.ts +23 -4
  466. package/src/scripts/lint_one_off_age.ts +23 -4
  467. package/src/scripts/lint_orchestration_dsl.ts +23 -4
  468. package/src/scripts/lint_orchestrator_auto_detect.ts +23 -4
  469. package/src/scripts/lint_pack_boundaries.ts +23 -4
  470. package/src/scripts/lint_pack_dependencies.ts +23 -2
  471. package/src/scripts/lint_pack_first_win.ts +23 -4
  472. package/src/scripts/lint_pack_risk_class.ts +23 -1
  473. package/src/scripts/lint_persona_governance.ts +23 -4
  474. package/src/scripts/lint_positioning.ts +23 -4
  475. package/src/scripts/lint_profile_overlay_set_only.ts +23 -4
  476. package/src/scripts/lint_readme_jargon.ts +23 -4
  477. package/src/scripts/lint_readme_size.ts +23 -4
  478. package/src/scripts/lint_regression.ts +23 -4
  479. package/src/scripts/lint_roadmap_blockers.ts +23 -4
  480. package/src/scripts/lint_roadmap_ci_steps.ts +23 -4
  481. package/src/scripts/lint_roadmap_complexity.ts +23 -4
  482. package/src/scripts/lint_roadmap_later_disposition.ts +23 -4
  483. package/src/scripts/lint_role_experiences.ts +23 -4
  484. package/src/scripts/lint_rule_interactions.ts +23 -4
  485. package/src/scripts/lint_rule_tiers.ts +24 -3
  486. package/src/scripts/lint_showcase_sessions.ts +23 -4
  487. package/src/scripts/lint_skill_frontmatter_safety.ts +25 -5
  488. package/src/scripts/lint_skill_originality.ts +23 -4
  489. package/src/scripts/lint_skill_tools.ts +23 -4
  490. package/src/scripts/lint_subagent_determinism.ts +23 -4
  491. package/src/scripts/lint_ticket_buildable.ts +23 -4
  492. package/src/scripts/lint_topics_yaml.ts +23 -4
  493. package/src/scripts/lint_trust_coherence.ts +23 -4
  494. package/src/scripts/lint_value_dashboard.ts +23 -4
  495. package/src/scripts/lint_workflow_security.ts +23 -4
  496. package/src/scripts/lint_workspace_boundary.ts +23 -4
  497. package/src/scripts/mcp_parity_smoke.ts +23 -2
  498. package/src/scripts/mcp_render.ts +23 -4
  499. package/src/scripts/mcp_telemetry_health.ts +23 -4
  500. package/src/scripts/mcp_telemetry_query.ts +23 -4
  501. package/src/scripts/mcp_telemetry_store.ts +23 -4
  502. package/src/scripts/measure_augment_budget.ts +23 -1
  503. package/src/scripts/measure_density.ts +23 -1
  504. package/src/scripts/measure_frugality_savings.ts +23 -1
  505. package/src/scripts/measure_markitdown_lift.ts +23 -1
  506. package/src/scripts/measure_patterns.ts +23 -1
  507. package/src/scripts/measure_projection_bytes.ts +23 -1
  508. package/src/scripts/measure_rule_budget.ts +23 -4
  509. package/src/scripts/measure_skill_reduction.ts +23 -1
  510. package/src/scripts/memory_hash.ts +24 -2
  511. package/src/scripts/memory_lookup.ts +24 -2
  512. package/src/scripts/memory_report.ts +24 -2
  513. package/src/scripts/memory_signal.ts +24 -2
  514. package/src/scripts/memory_status.ts +26 -2
  515. package/src/scripts/migrate_command_suggestions.ts +23 -4
  516. package/src/scripts/migrate_frontmatter_defaults.ts +23 -4
  517. package/src/scripts/migration_status.ts +25 -4
  518. package/src/scripts/mine_missing_guardrails.ts +23 -1
  519. package/src/scripts/mine_session.ts +23 -1
  520. package/src/scripts/minimal_safe_diff_hook.ts +24 -3
  521. package/src/scripts/new_skill.ts +23 -3
  522. package/src/scripts/onboarding_gate_hook.ts +24 -3
  523. package/src/scripts/parity/coverage_diff.ts +25 -3
  524. package/src/scripts/parity/phase_gate.ts +25 -4
  525. package/src/scripts/parity/replay.ts +25 -3
  526. package/src/scripts/pattern_share.ts +23 -4
  527. package/src/scripts/plan_physical_move.ts +23 -4
  528. package/src/scripts/prediction-pool/poisson_sim.ts +24 -3
  529. package/src/scripts/prediction-pool/pool_winsim.ts +24 -3
  530. package/src/scripts/prediction-pool/score_ev.ts +24 -3
  531. package/src/scripts/print_required_checks.ts +24 -4
  532. package/src/scripts/probe_host_compliance.ts +23 -2
  533. package/src/scripts/probe_projection_fidelity.ts +23 -1
  534. package/src/scripts/probe_skill_registration.ts +24 -2
  535. package/src/scripts/profile_staleness_hook.ts +24 -3
  536. package/src/scripts/profile_use.ts +23 -4
  537. package/src/scripts/project_thin_rules.ts +23 -3
  538. package/src/scripts/propose_modules_config.ts +23 -4
  539. package/src/scripts/prototype_lint_contradictions.ts +23 -1
  540. package/src/scripts/prove_pack_extractable.ts +23 -4
  541. package/src/scripts/readme_linter.ts +23 -3
  542. package/src/scripts/redact_hook_capture.ts +23 -4
  543. package/src/scripts/refine_ticket_detect.ts +23 -4
  544. package/src/scripts/release.ts +23 -4
  545. package/src/scripts/render_benchmark_composite.ts +23 -4
  546. package/src/scripts/render_benchmark_md.ts +23 -4
  547. package/src/scripts/roadmap_progress_hook.ts +46 -16
  548. package/src/scripts/run_skill_evals.ts +23 -4
  549. package/src/scripts/runtime_dispatcher.ts +23 -4
  550. package/src/scripts/runtime_registry.ts +23 -4
  551. package/src/scripts/score_skill_selection.ts +23 -1
  552. package/src/scripts/security_audit_config.ts +24 -5
  553. package/src/scripts/skill_collision_clusters.ts +23 -4
  554. package/src/scripts/skill_discovery.ts +23 -4
  555. package/src/scripts/skill_linter.ts +23 -2
  556. package/src/scripts/skill_preview.ts +23 -4
  557. package/src/scripts/skill_tools/audit_persona_coverage.ts +23 -1
  558. package/src/scripts/skill_tools/audit_user_type_coverage.ts +23 -1
  559. package/src/scripts/skill_tools/run_block_d_eval.ts +23 -1
  560. package/src/scripts/skill_tools/score_skill_relevance.ts +23 -1
  561. package/src/scripts/skill_tools/suggest_skill_for_task.ts +24 -1
  562. package/src/scripts/skill_usage_collect.ts +23 -4
  563. package/src/scripts/smoke_path_resolution.ts +23 -4
  564. package/src/scripts/smoke_quickstart.ts +23 -4
  565. package/src/scripts/snapshot_agent_outputs.ts +23 -4
  566. package/src/scripts/spotcheck_thin_root.ts +23 -4
  567. package/src/scripts/sync_agent_settings.ts +23 -4
  568. package/src/scripts/sync_github_metadata.ts +23 -4
  569. package/src/scripts/sync_gitignore.ts +23 -4
  570. package/src/scripts/telegraph_stats.ts +23 -4
  571. package/src/scripts/tool_registry.ts +24 -4
  572. package/src/scripts/trigger_coverage.ts +23 -4
  573. package/src/scripts/update_counts.ts +23 -4
  574. package/src/scripts/update_prices.ts +23 -1
  575. package/src/scripts/validate_agent_settings.ts +23 -4
  576. package/src/scripts/validate_decision_engine.ts +23 -4
  577. package/src/scripts/validate_discovery_manifest.ts +23 -4
  578. package/src/scripts/validate_frontmatter.ts +23 -2
  579. package/src/scripts/validate_pack_yaml.ts +0 -0
  580. package/src/scripts/validate_safe_paths.ts +24 -4
  581. package/src/scripts/validate_telegraph_carveouts.ts +23 -4
  582. package/src/scripts/verify_before_complete_hook.ts +24 -3
  583. package/src/scripts/verify_physical_move.ts +23 -4
  584. package/src/scripts/wrapper_freshness_hook.ts +107 -8
  585. package/tests/fixtures/hooks/README.md +92 -0
  586. package/tests/fixtures/hooks/agent_error.json +7 -0
  587. package/tests/fixtures/hooks/post_tool_use.json +13 -0
  588. package/tests/fixtures/hooks/pre_compact.json +7 -0
  589. package/tests/fixtures/hooks/pre_tool_use.json +9 -0
  590. package/tests/fixtures/hooks/session_end.json +6 -0
  591. package/tests/fixtures/hooks/session_start.json +6 -0
  592. package/tests/fixtures/hooks/stop.json +6 -0
  593. package/tests/fixtures/hooks/user_prompt_submit.json +7 -0
@@ -356,9 +356,30 @@ function _py_json_dumps(value: unknown, indent: number): string {
356
356
  return render(value, 0);
357
357
  }
358
358
 
359
+ function _isCliEntry(): boolean {
360
+ if (process.argv[1] === undefined) {
361
+ return false;
362
+ }
363
+ const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
364
+ if (import.meta.url === argvUrl) {
365
+ return true;
366
+ }
367
+ // A symlinked invocation (e.g. via an installed `.augment/` projection,
368
+ // or macOS /var → /private/var temp dirs) makes the raw URLs differ:
369
+ // import.meta.url is the resolved real path while argv[1] keeps the
370
+ // symlink path. Compare realpaths so the entry guard still fires
371
+ // (without this the CLI silently no-ops when run through a symlink).
372
+ try {
373
+ const here = fs.realpathSync(fileURLToPath(import.meta.url));
374
+ const argv = fs.realpathSync(path.resolve(process.argv[1]));
375
+ return here === argv;
376
+ } catch {
377
+ return false;
378
+ }
379
+ }
380
+
359
381
  const isCliEntry =
360
- process.argv[1] !== undefined &&
361
- import.meta.url === pathToFileURL(path.resolve(process.argv[1])).href;
382
+ _isCliEntry();
362
383
  if (isCliEntry) {
363
384
  process.exit(main(process.argv.slice(2)));
364
385
  }
@@ -27,7 +27,7 @@
27
27
  */
28
28
  import fs from "node:fs";
29
29
  import path from "node:path";
30
- import { pathToFileURL } from "node:url";
30
+ import { fileURLToPath, pathToFileURL } from "node:url";
31
31
 
32
32
  import {
33
33
  shlexSplit,
@@ -220,9 +220,28 @@ export function main(): number {
220
220
  return EXIT_WARN;
221
221
  }
222
222
 
223
- const _isCliEntry =
224
- process.argv[1] !== undefined &&
225
- import.meta.url === pathToFileURL(path.resolve(process.argv[1])).href;
226
- if (_isCliEntry) {
223
+ function _isCliEntry(): boolean {
224
+ if (process.argv[1] === undefined) {
225
+ return false;
226
+ }
227
+ const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
228
+ if (import.meta.url === argvUrl) {
229
+ return true;
230
+ }
231
+ // A symlinked invocation (e.g. via an installed `.augment/` projection,
232
+ // or macOS /var → /private/var temp dirs) makes the raw URLs differ:
233
+ // import.meta.url is the resolved real path while argv[1] keeps the
234
+ // symlink path. Compare realpaths so the entry guard still fires
235
+ // (without this the CLI silently no-ops when run through a symlink).
236
+ try {
237
+ const here = fs.realpathSync(fileURLToPath(import.meta.url));
238
+ const argv = fs.realpathSync(path.resolve(process.argv[1]));
239
+ return here === argv;
240
+ } catch {
241
+ return false;
242
+ }
243
+ }
244
+
245
+ if (_isCliEntry()) {
227
246
  process.exit(main());
228
247
  }
@@ -410,9 +410,30 @@ export function main(argv?: string[]): number {
410
410
  return _final_exit_code(payload, args.strict);
411
411
  }
412
412
 
413
+ function _isCliEntry(): boolean {
414
+ if (process.argv[1] === undefined) {
415
+ return false;
416
+ }
417
+ const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
418
+ if (import.meta.url === argvUrl) {
419
+ return true;
420
+ }
421
+ // A symlinked invocation (e.g. via an installed `.augment/` projection,
422
+ // or macOS /var → /private/var temp dirs) makes the raw URLs differ:
423
+ // import.meta.url is the resolved real path while argv[1] keeps the
424
+ // symlink path. Compare realpaths so the entry guard still fires
425
+ // (without this the CLI silently no-ops when run through a symlink).
426
+ try {
427
+ const here = fs.realpathSync(fileURLToPath(import.meta.url));
428
+ const argv = fs.realpathSync(path.resolve(process.argv[1]));
429
+ return here === argv;
430
+ } catch {
431
+ return false;
432
+ }
433
+ }
434
+
413
435
  const isCliEntry =
414
- process.argv[1] !== undefined &&
415
- import.meta.url === pathToFileURL(path.resolve(process.argv[1])).href;
436
+ _isCliEntry();
416
437
  if (isCliEntry) {
417
438
  process.exit(main(process.argv.slice(2)));
418
439
  }
@@ -284,9 +284,30 @@ export function main(argv?: string[]): number {
284
284
  return _final_exit_code(matrix, args.strict);
285
285
  }
286
286
 
287
+ function _isCliEntry(): boolean {
288
+ if (process.argv[1] === undefined) {
289
+ return false;
290
+ }
291
+ const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
292
+ if (import.meta.url === argvUrl) {
293
+ return true;
294
+ }
295
+ // A symlinked invocation (e.g. via an installed `.augment/` projection,
296
+ // or macOS /var → /private/var temp dirs) makes the raw URLs differ:
297
+ // import.meta.url is the resolved real path while argv[1] keeps the
298
+ // symlink path. Compare realpaths so the entry guard still fires
299
+ // (without this the CLI silently no-ops when run through a symlink).
300
+ try {
301
+ const here = fs.realpathSync(fileURLToPath(import.meta.url));
302
+ const argv = fs.realpathSync(path.resolve(process.argv[1]));
303
+ return here === argv;
304
+ } catch {
305
+ return false;
306
+ }
307
+ }
308
+
287
309
  const isCliEntry =
288
- process.argv[1] !== undefined &&
289
- import.meta.url === pathToFileURL(path.resolve(process.argv[1])).href;
310
+ _isCliEntry();
290
311
  if (isCliEntry) {
291
312
  process.exit(main(process.argv.slice(2)));
292
313
  }
@@ -28,7 +28,7 @@
28
28
  */
29
29
  import fs from "node:fs";
30
30
  import path from "node:path";
31
- import { pathToFileURL } from "node:url";
31
+ import { fileURLToPath, pathToFileURL } from "node:url";
32
32
 
33
33
  const SETTINGS_FILE = ".agent-settings.yml";
34
34
  const EXIT_ALLOW = 0;
@@ -277,9 +277,28 @@ function _readStdin(): string {
277
277
  return fs.readFileSync(0, "utf-8");
278
278
  }
279
279
 
280
- const _isCliEntry =
281
- process.argv[1] !== undefined &&
282
- import.meta.url === pathToFileURL(path.resolve(process.argv[1])).href;
283
- if (_isCliEntry) {
280
+ function _isCliEntry(): boolean {
281
+ if (process.argv[1] === undefined) {
282
+ return false;
283
+ }
284
+ const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
285
+ if (import.meta.url === argvUrl) {
286
+ return true;
287
+ }
288
+ // A symlinked invocation (e.g. via an installed `.augment/` projection,
289
+ // or macOS /var → /private/var temp dirs) makes the raw URLs differ:
290
+ // import.meta.url is the resolved real path while argv[1] keeps the
291
+ // symlink path. Compare realpaths so the entry guard still fires
292
+ // (without this the CLI silently no-ops when run through a symlink).
293
+ try {
294
+ const here = fs.realpathSync(fileURLToPath(import.meta.url));
295
+ const argv = fs.realpathSync(path.resolve(process.argv[1]));
296
+ return here === argv;
297
+ } catch {
298
+ return false;
299
+ }
300
+ }
301
+
302
+ if (_isCliEntry()) {
284
303
  process.exit(main());
285
304
  }
@@ -62,7 +62,7 @@
62
62
  * - `signal.SIGTERM`/`SIGKILL` + `os.kill(pid, 0)` liveness → `process.kill`.
63
63
  */
64
64
 
65
- import { spawnSync } from 'node:child_process';
65
+ import { spawn, spawnSync, type ChildProcess } from 'node:child_process';
66
66
  import * as crypto from 'node:crypto';
67
67
  import * as fs from 'node:fs';
68
68
  import * as os from 'node:os';
@@ -3247,7 +3247,7 @@ function install_global(
3247
3247
 
3248
3248
  if (!state.QUIET) {
3249
3249
  process.stdout.write('\n');
3250
- success('Global install completed.');
3250
+ success(`Global install completed (v${installed_version}).`);
3251
3251
  process.stdout.write('\n');
3252
3252
  }
3253
3253
  return 0;
@@ -3843,76 +3843,104 @@ function _wizard_spawn(project_root: string, pass_project_root: boolean = true):
3843
3843
  }
3844
3844
  const env = { ...process.env };
3845
3845
 
3846
- // The Python uses subprocess.Popen + a stderr-draining thread + a
3847
- // readline loop with progressive timeouts, then child.wait(). Node has no
3848
- // synchronous equivalent that also streams; we run the whole wizard
3849
- // handoff via a synchronous helper that mirrors the observable behaviour
3850
- // (URL banner, stderr tail, browser open, blocking wait). Implemented with
3851
- // spawnSync for the simple boot+wait, and a bounded readiness poll.
3846
+ // The wizard child is a long-running local server — it must NOT keep the
3847
+ // installer process in the foreground (a blocking wait here forced users
3848
+ // to Ctrl-C out of `agent-config global` / `upgrade`, which then reported
3849
+ // the step as failed). Spawn it detached, poll for the WIZARD_READY line,
3850
+ // print the banner + open the browser, and return while the server keeps
3851
+ // running in the background.
3852
3852
  return _wizard_run_sync(cmd, env, cli);
3853
3853
  }
3854
3854
 
3855
3855
  /**
3856
- * Synchronous wizard run mirroring `_wizard_spawn` + `_wizard_await_ready`.
3857
- * spawnSync blocks until the child exits and captures stdout/stderr; we then
3858
- * scan the captured stdout for the WIZARD_READY line, print the banner / open
3859
- * the browser, and return the child's exit code. A child that never prints
3860
- * WIZARD_READY before exiting falls through to the timeout fallback message.
3861
- *
3862
- * Divergence note: the Python streams stdout line-by-line with a 150s
3863
- * progressive-timeout budget and hands the terminal to a still-running child
3864
- * (Ctrl-C forwarding). spawnSync cannot hand off an interactive child, so this
3865
- * twin runs the child to completion under the same total budget and surfaces
3866
- * the same banner/fallback text. This path is network/subprocess-bound and is
3867
- * NOT exercised by the deterministic golden tests (guarded behind the TTY +
3868
- * dist-present gates).
3856
+ * Detached wizard launch mirroring `_wizard_spawn` + `_wizard_await_ready`.
3857
+ * The child (a local server that keeps running until the wizard finishes) is
3858
+ * spawned detached with its output redirected to a temp log; a bounded poll
3859
+ * scans the log for the WIZARD_READY line, then prints the banner and opens
3860
+ * the browser. The installer returns immediately after — it never blocks on
3861
+ * the server's lifetime. A child that exits or stays silent past the budget
3862
+ * falls through to the fallback message. This path is network/subprocess-
3863
+ * bound and is NOT exercised by the deterministic golden tests (guarded
3864
+ * behind the TTY + dist-present gates).
3869
3865
  */
3870
3866
  function _wizard_run_sync(cmd: string[], env: NodeJS.ProcessEnv, cli: string): number {
3871
3867
  const total = _WIZARD_TIMEOUTS.reduce((a, b) => a + b, 0);
3872
- let res;
3868
+ const log_path = path.join(
3869
+ os.tmpdir(),
3870
+ `agent-config-wizard-${process.pid}-${Date.now()}.log`,
3871
+ );
3872
+ let child: ChildProcess;
3873
+ let log_fd: number | null = null;
3873
3874
  try {
3874
- res = spawnSync(cmd[0] as string, cmd.slice(1), {
3875
+ log_fd = fs.openSync(log_path, 'w');
3876
+ child = spawn(cmd[0] as string, cmd.slice(1), {
3875
3877
  env,
3876
- encoding: 'utf-8',
3877
- timeout: total * 1000,
3878
- maxBuffer: 64 * 1024 * 1024,
3878
+ detached: true,
3879
+ stdio: ['ignore', log_fd, log_fd],
3879
3880
  });
3881
+ // ENOENT & friends surface as an async 'error' event on a detached
3882
+ // spawn — swallow it here; the readiness poll below reports the
3883
+ // failure via the fallback message instead of crashing the installer.
3884
+ child.on('error', () => {});
3885
+ child.unref();
3880
3886
  } catch (exc) {
3881
3887
  process.stdout.write(
3882
3888
  `(Wizard failed to start: ${String(exc)}; run 'node ${cli} install --no-open' manually.)\n`,
3883
3889
  );
3884
3890
  return 0;
3891
+ } finally {
3892
+ if (log_fd !== null) {
3893
+ try {
3894
+ fs.closeSync(log_fd);
3895
+ } catch {
3896
+ /* already closed */
3897
+ }
3898
+ }
3885
3899
  }
3886
- if (res.error && (res.error as NodeJS.ErrnoException).code === 'ENOENT') {
3887
- process.stdout.write(
3888
- `(Wizard failed to start: ${String(res.error)}; run 'node ${cli} install --no-open' manually.)\n`,
3889
- );
3890
- return 0;
3891
- }
3892
- const stdout = res.stdout || '';
3900
+
3901
+ const read_log = (): string => {
3902
+ try {
3903
+ return readText(log_path);
3904
+ } catch {
3905
+ return '';
3906
+ }
3907
+ };
3908
+ const deadline = Date.now() + total * 1000;
3893
3909
  let matched_url: string | null = null;
3894
- for (const line of stdout.split('\n')) {
3895
- const m = _WIZARD_READY_RE.exec(line + '\n');
3896
- if (m) {
3897
- matched_url = m[1] as string;
3898
- break;
3910
+ for (;;) {
3911
+ for (const line of read_log().split('\n')) {
3912
+ const m = _WIZARD_READY_RE.exec(line + '\n');
3913
+ if (m) {
3914
+ matched_url = m[1] as string;
3915
+ break;
3916
+ }
3899
3917
  }
3918
+ if (matched_url !== null) break;
3919
+ const pid = child.pid;
3920
+ if (pid === undefined || !pidAlive(pid)) break; // child died before ready
3921
+ if (Date.now() >= deadline) break;
3922
+ sleepMs(200);
3900
3923
  }
3901
3924
  if (matched_url === null) {
3902
- const stderrLines = (res.stderr || '').split('\n').filter((l) => l !== '');
3903
- const tail = stderrLines.length ? stderrLines.slice(-20).join('\n ') : '(no stderr captured)';
3925
+ const logLines = read_log()
3926
+ .split('\n')
3927
+ .filter((l) => l !== '');
3928
+ const tail = logLines.length ? logLines.slice(-20).join('\n ') : '(no output captured)';
3904
3929
  process.stdout.write(
3905
- `(Wizard server boot timed out after ${Math.trunc(total)}s; ` +
3930
+ `(Wizard server did not report ready within ${Math.trunc(total)}s; ` +
3906
3931
  `run 'node ${cli} install --no-open' manually.)\n` +
3907
- ` Last stderr:\n ${tail}\n`,
3932
+ ` Last output:\n ${tail}\n`,
3908
3933
  );
3909
3934
  return 0;
3910
3935
  }
3911
3936
  process.stdout.write('\n');
3912
3937
  process.stdout.write(`Setup wizard ready: ${matched_url}\n`);
3913
3938
  _openBrowser(matched_url);
3914
- process.stdout.write('(Wizard runs in the background; close the tab or press Ctrl-C to stop.)\n');
3915
- return res.status ?? 0;
3939
+ process.stdout.write(
3940
+ '(Wizard server keeps running in the background — finish the wizard in the ' +
3941
+ 'browser tab; the next install run stops any stale server.)\n',
3942
+ );
3943
+ return 0;
3916
3944
  }
3917
3945
 
3918
3946
  /** `webbrowser.open` — best-effort platform open; never fatal. */
@@ -1098,7 +1098,29 @@ export function main(argv: string[] | null = null): number {
1098
1098
  return 0;
1099
1099
  }
1100
1100
 
1101
- const _isMain = import.meta.url === pathToFileURL(path.resolve(process.argv[1] ?? '')).href;
1101
+ function _isCliEntry(): boolean {
1102
+ if (process.argv[1] === undefined) {
1103
+ return false;
1104
+ }
1105
+ const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
1106
+ if (import.meta.url === argvUrl) {
1107
+ return true;
1108
+ }
1109
+ // A symlinked invocation (e.g. via an installed `.augment/` projection,
1110
+ // or macOS /var → /private/var temp dirs) makes the raw URLs differ:
1111
+ // import.meta.url is the resolved real path while argv[1] keeps the
1112
+ // symlink path. Compare realpaths so the entry guard still fires
1113
+ // (without this the CLI silently no-ops when run through a symlink).
1114
+ try {
1115
+ const here = fs.realpathSync(fileURLToPath(import.meta.url));
1116
+ const argv = fs.realpathSync(path.resolve(process.argv[1]));
1117
+ return here === argv;
1118
+ } catch {
1119
+ return false;
1120
+ }
1121
+ }
1122
+
1123
+ const _isMain = _isCliEntry();
1102
1124
  if (_isMain) {
1103
1125
  process.exitCode = main();
1104
1126
  }
@@ -315,6 +315,28 @@ function _isPySpace(ch: string): boolean {
315
315
  return /\s/u.test(ch);
316
316
  }
317
317
 
318
- if (import.meta.url === pathToFileURL(process.argv[1] ?? '').href) {
318
+ function _isCliEntry(): boolean {
319
+ if (process.argv[1] === undefined) {
320
+ return false;
321
+ }
322
+ const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
323
+ if (import.meta.url === argvUrl) {
324
+ return true;
325
+ }
326
+ // A symlinked invocation (e.g. via an installed `.augment/` projection,
327
+ // or macOS /var → /private/var temp dirs) makes the raw URLs differ:
328
+ // import.meta.url is the resolved real path while argv[1] keeps the
329
+ // symlink path. Compare realpaths so the entry guard still fires
330
+ // (without this the CLI silently no-ops when run through a symlink).
331
+ try {
332
+ const here = fs.realpathSync(fileURLToPath(import.meta.url));
333
+ const argv = fs.realpathSync(path.resolve(process.argv[1]));
334
+ return here === argv;
335
+ } catch {
336
+ return false;
337
+ }
338
+ }
339
+
340
+ if (_isCliEntry()) {
319
341
  process.exitCode = main();
320
342
  }
@@ -514,7 +514,29 @@ function _stableSort<T>(items: T[], cmp: (a: T, b: T) => number): T[] {
514
514
  return indexed.map((e) => e.item);
515
515
  }
516
516
 
517
- if (import.meta.url === pathToFileURL(process.argv[1] ?? '').href) {
517
+ function _isCliEntry(): boolean {
518
+ if (process.argv[1] === undefined) {
519
+ return false;
520
+ }
521
+ const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
522
+ if (import.meta.url === argvUrl) {
523
+ return true;
524
+ }
525
+ // A symlinked invocation (e.g. via an installed `.augment/` projection,
526
+ // or macOS /var → /private/var temp dirs) makes the raw URLs differ:
527
+ // import.meta.url is the resolved real path while argv[1] keeps the
528
+ // symlink path. Compare realpaths so the entry guard still fires
529
+ // (without this the CLI silently no-ops when run through a symlink).
530
+ try {
531
+ const here = fs.realpathSync(fileURLToPath(import.meta.url));
532
+ const argv = fs.realpathSync(path.resolve(process.argv[1]));
533
+ return here === argv;
534
+ } catch {
535
+ return false;
536
+ }
537
+ }
538
+
539
+ if (_isCliEntry()) {
518
540
  try {
519
541
  process.exitCode = main();
520
542
  } catch (e) {
@@ -214,10 +214,29 @@ function _ljust(s: string, width: number): string {
214
214
  return pad > 0 ? s + ' '.repeat(pad) : s;
215
215
  }
216
216
 
217
- const _isCliEntry =
218
- process.argv[1] !== undefined &&
219
- import.meta.url === pathToFileURL(path.resolve(process.argv[1])).href;
220
- if (_isCliEntry || process.argv[1] === _HERE) {
217
+ function _isCliEntry(): boolean {
218
+ if (process.argv[1] === undefined) {
219
+ return false;
220
+ }
221
+ const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
222
+ if (import.meta.url === argvUrl) {
223
+ return true;
224
+ }
225
+ // A symlinked invocation (e.g. via an installed `.augment/` projection,
226
+ // or macOS /var → /private/var temp dirs) makes the raw URLs differ:
227
+ // import.meta.url is the resolved real path while argv[1] keeps the
228
+ // symlink path. Compare realpaths so the entry guard still fires
229
+ // (without this the CLI silently no-ops when run through a symlink).
230
+ try {
231
+ const here = fs.realpathSync(fileURLToPath(import.meta.url));
232
+ const argv = fs.realpathSync(path.resolve(process.argv[1]));
233
+ return here === argv;
234
+ } catch {
235
+ return false;
236
+ }
237
+ }
238
+
239
+ if (_isCliEntry() || process.argv[1] === _HERE) {
221
240
  try {
222
241
  process.exitCode = main();
223
242
  } catch (err) {
@@ -248,10 +248,29 @@ function main(argv?: readonly string[]): number {
248
248
  return 0;
249
249
  }
250
250
 
251
- const _isCliEntry =
252
- process.argv[1] !== undefined &&
253
- import.meta.url === pathToFileURL(path.resolve(process.argv[1])).href;
254
- if (_isCliEntry || process.argv[1] === _HERE) {
251
+ function _isCliEntry(): boolean {
252
+ if (process.argv[1] === undefined) {
253
+ return false;
254
+ }
255
+ const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
256
+ if (import.meta.url === argvUrl) {
257
+ return true;
258
+ }
259
+ // A symlinked invocation (e.g. via an installed `.augment/` projection,
260
+ // or macOS /var → /private/var temp dirs) makes the raw URLs differ:
261
+ // import.meta.url is the resolved real path while argv[1] keeps the
262
+ // symlink path. Compare realpaths so the entry guard still fires
263
+ // (without this the CLI silently no-ops when run through a symlink).
264
+ try {
265
+ const here = fs.realpathSync(fileURLToPath(import.meta.url));
266
+ const argv = fs.realpathSync(path.resolve(process.argv[1]));
267
+ return here === argv;
268
+ } catch {
269
+ return false;
270
+ }
271
+ }
272
+
273
+ if (_isCliEntry() || process.argv[1] === _HERE) {
255
274
  process.exit(main());
256
275
  }
257
276
 
@@ -36,7 +36,7 @@ import { spawnSync } from 'node:child_process';
36
36
  import * as fs from 'node:fs';
37
37
  import * as path from 'node:path';
38
38
  import process from 'node:process';
39
- import { pathToFileURL } from 'node:url';
39
+ import { fileURLToPath, pathToFileURL } from 'node:url';
40
40
 
41
41
  import type { SettingsDict, SettingsValue } from './_lib/agent_settings.js';
42
42
  import { write_atomic } from './_lib/fs_atomic.js';
@@ -1097,8 +1097,30 @@ function _repoRoot(): string {
1097
1097
  return path.resolve(path.dirname(_thisFile()), '..', '..');
1098
1098
  }
1099
1099
 
1100
+ function _isCliEntry(): boolean {
1101
+ if (process.argv[1] === undefined) {
1102
+ return false;
1103
+ }
1104
+ const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
1105
+ if (import.meta.url === argvUrl) {
1106
+ return true;
1107
+ }
1108
+ // A symlinked invocation (e.g. via an installed `.augment/` projection,
1109
+ // or macOS /var → /private/var temp dirs) makes the raw URLs differ:
1110
+ // import.meta.url is the resolved real path while argv[1] keeps the
1111
+ // symlink path. Compare realpaths so the entry guard still fires
1112
+ // (without this the CLI silently no-ops when run through a symlink).
1113
+ try {
1114
+ const here = fs.realpathSync(fileURLToPath(import.meta.url));
1115
+ const argv = fs.realpathSync(path.resolve(process.argv[1]));
1116
+ return here === argv;
1117
+ } catch {
1118
+ return false;
1119
+ }
1120
+ }
1121
+
1100
1122
  const _isMain =
1101
- process.argv[1] !== undefined && import.meta.url === pathToFileURL(path.resolve(process.argv[1])).href;
1123
+ _isCliEntry();
1102
1124
  if (_isMain) {
1103
1125
  // Mirror `raise SystemExit(main())`.
1104
1126
  process.exit(main());
@@ -302,9 +302,28 @@ function _dumpString(s: string): string {
302
302
  return out + '"';
303
303
  }
304
304
 
305
- const _isCliEntry =
306
- process.argv[1] !== undefined &&
307
- import.meta.url === pathToFileURL(path.resolve(process.argv[1])).href;
308
- if (_isCliEntry || process.argv[1] === _HERE) {
305
+ function _isCliEntry(): boolean {
306
+ if (process.argv[1] === undefined) {
307
+ return false;
308
+ }
309
+ const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
310
+ if (import.meta.url === argvUrl) {
311
+ return true;
312
+ }
313
+ // A symlinked invocation (e.g. via an installed `.augment/` projection,
314
+ // or macOS /var → /private/var temp dirs) makes the raw URLs differ:
315
+ // import.meta.url is the resolved real path while argv[1] keeps the
316
+ // symlink path. Compare realpaths so the entry guard still fires
317
+ // (without this the CLI silently no-ops when run through a symlink).
318
+ try {
319
+ const here = fs.realpathSync(fileURLToPath(import.meta.url));
320
+ const argv = fs.realpathSync(path.resolve(process.argv[1]));
321
+ return here === argv;
322
+ } catch {
323
+ return false;
324
+ }
325
+ }
326
+
327
+ if (_isCliEntry() || process.argv[1] === _HERE) {
309
328
  process.exitCode = main();
310
329
  }
@@ -217,9 +217,28 @@ export function main(argv: string[] | null = null): number {
217
217
  return 0;
218
218
  }
219
219
 
220
- const _isCliEntry =
221
- process.argv[1] !== undefined &&
222
- import.meta.url === pathToFileURL(path.resolve(process.argv[1])).href;
223
- if (_isCliEntry) {
220
+ function _isCliEntry(): boolean {
221
+ if (process.argv[1] === undefined) {
222
+ return false;
223
+ }
224
+ const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
225
+ if (import.meta.url === argvUrl) {
226
+ return true;
227
+ }
228
+ // A symlinked invocation (e.g. via an installed `.augment/` projection,
229
+ // or macOS /var → /private/var temp dirs) makes the raw URLs differ:
230
+ // import.meta.url is the resolved real path while argv[1] keeps the
231
+ // symlink path. Compare realpaths so the entry guard still fires
232
+ // (without this the CLI silently no-ops when run through a symlink).
233
+ try {
234
+ const here = fs.realpathSync(fileURLToPath(import.meta.url));
235
+ const argv = fs.realpathSync(path.resolve(process.argv[1]));
236
+ return here === argv;
237
+ } catch {
238
+ return false;
239
+ }
240
+ }
241
+
242
+ if (_isCliEntry()) {
224
243
  process.exit(main());
225
244
  }
@@ -233,9 +233,28 @@ export function main(argv?: readonly string[]): number {
233
233
  }
234
234
 
235
235
  const _HERE = fileURLToPath(import.meta.url);
236
- const _isCliEntry =
237
- process.argv[1] !== undefined &&
238
- import.meta.url === pathToFileURL(path.resolve(process.argv[1])).href;
239
- if (_isCliEntry || process.argv[1] === _HERE) {
236
+ function _isCliEntry(): boolean {
237
+ if (process.argv[1] === undefined) {
238
+ return false;
239
+ }
240
+ const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
241
+ if (import.meta.url === argvUrl) {
242
+ return true;
243
+ }
244
+ // A symlinked invocation (e.g. via an installed `.augment/` projection,
245
+ // or macOS /var → /private/var temp dirs) makes the raw URLs differ:
246
+ // import.meta.url is the resolved real path while argv[1] keeps the
247
+ // symlink path. Compare realpaths so the entry guard still fires
248
+ // (without this the CLI silently no-ops when run through a symlink).
249
+ try {
250
+ const here = fs.realpathSync(fileURLToPath(import.meta.url));
251
+ const argv = fs.realpathSync(path.resolve(process.argv[1]));
252
+ return here === argv;
253
+ } catch {
254
+ return false;
255
+ }
256
+ }
257
+
258
+ if (_isCliEntry() || process.argv[1] === _HERE) {
240
259
  process.exit(main());
241
260
  }