@event4u/agent-config 8.4.1 → 8.5.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 (572) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/CHANGELOG.md +67 -0
  3. package/README.md +17 -5
  4. package/dist/agent-src/README.md +1 -1
  5. package/dist/agent-src/commands/{analyze-reference-repo.md → analyze/reference-repo.md} +3 -1
  6. package/dist/agent-src/commands/analyze.md +9 -6
  7. package/dist/agent-src/commands/{bug-fix.md → bug/fix.md} +3 -1
  8. package/dist/agent-src/commands/{bug-investigate.md → bug/investigate.md} +4 -2
  9. package/dist/agent-src/commands/bug.md +59 -0
  10. package/dist/agent-src/commands/{set-cost-profile.md → cost/profile.md} +9 -6
  11. package/dist/agent-src/commands/{cost-report.md → cost/report.md} +18 -17
  12. package/dist/agent-src/commands/cost.md +57 -0
  13. package/dist/agent-src/commands/evals/{review-changes.json → review.json} +12 -8
  14. package/dist/agent-src/commands/{quality-fix.md → fix/quality.md} +5 -2
  15. package/dist/agent-src/commands/fix.md +7 -4
  16. package/dist/agent-src/commands/optimize/project.md +250 -0
  17. package/dist/agent-src/commands/{optimize-prompt.md → optimize/prompt.md} +3 -2
  18. package/dist/agent-src/commands/optimize.md +17 -12
  19. package/dist/agent-src/commands/{package-reset.md → package/reset.md} +2 -0
  20. package/dist/agent-src/commands/{package-test.md → package/test.md} +3 -1
  21. package/dist/agent-src/commands/package.md +56 -0
  22. package/dist/agent-src/commands/{project-analyze.md → project/analyze.md} +10 -8
  23. package/dist/agent-src/commands/{project-health.md → project/health.md} +2 -0
  24. package/dist/agent-src/commands/project.md +60 -0
  25. package/dist/agent-src/commands/{review-changes.md → review/changes.md} +26 -24
  26. package/dist/agent-src/commands/{review-routing.md → review/routing.md} +21 -17
  27. package/dist/agent-src/commands/review.md +61 -0
  28. package/dist/agent-src/commands/security-audit-config.md +24 -23
  29. package/dist/agent-src/commands/{sync-agent-settings.md → sync/agent-settings.md} +11 -7
  30. package/dist/agent-src/commands/{sync-gitignore → sync/gitignore}/fix.md +36 -27
  31. package/dist/agent-src/commands/{sync-gitignore.md → sync/gitignore.md} +22 -21
  32. package/dist/agent-src/commands/sync.md +58 -0
  33. package/dist/agent-src/commands/{e2e-heal.md → tests/e2e-heal.md} +5 -2
  34. package/dist/agent-src/commands/{e2e-plan.md → tests/e2e-plan.md} +5 -2
  35. package/dist/agent-src/commands/tests.md +11 -5
  36. package/dist/agent-src/contexts/augment-infrastructure.md +3 -3
  37. package/dist/agent-src/contexts/execution/toolchain-resolver.md +1 -1
  38. package/dist/agent-src/contexts/skills-and-commands.md +2 -2
  39. package/dist/agent-src/rules/external-reference-deep-dive.md +1 -1
  40. package/dist/agent-src/skills/finishing-a-development-branch/SKILL.md +2 -2
  41. package/dist/agent-src/skills/judge-artifact-completeness/SKILL.md +1 -1
  42. package/dist/agent-src/skills/judge-bug-hunter/SKILL.md +1 -1
  43. package/dist/agent-src/skills/judge-code-quality/SKILL.md +1 -1
  44. package/dist/agent-src/skills/judge-security-auditor/SKILL.md +1 -1
  45. package/dist/agent-src/skills/judge-synthesis/SKILL.md +1 -1
  46. package/dist/agent-src/skills/judge-test-coverage/SKILL.md +1 -1
  47. package/dist/agent-src/skills/markitdown/SKILL.md +1 -1
  48. package/dist/agent-src/skills/mobile-e2e-strategy/SKILL.md +5 -5
  49. package/dist/agent-src/skills/prompt-optimizer/SKILL.md +2 -2
  50. package/dist/agent-src/skills/quality-tools/SKILL.md +1 -1
  51. package/dist/agent-src/skills/repomix-packer/SKILL.md +1 -1
  52. package/dist/agent-src/skills/requesting-code-review/SKILL.md +2 -2
  53. package/dist/agent-src/skills/verify-repair-loop/SKILL.md +2 -2
  54. package/dist/agent-src/templates/agent-settings.md +1 -1
  55. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +2 -2
  56. package/dist/agent-src/templates/scripts/work_engine/stack/runner.ts +1 -1
  57. package/dist/cli/commands/config.js +44 -0
  58. package/dist/cli/commands/config.js.map +1 -0
  59. package/dist/cli/commands/uiServe.js +1 -0
  60. package/dist/cli/commands/uiServe.js.map +1 -1
  61. package/dist/cli/help.js +38 -0
  62. package/dist/cli/help.js.map +1 -0
  63. package/dist/cli/initRouting.js +16 -1
  64. package/dist/cli/initRouting.js.map +1 -1
  65. package/dist/cli/main.js +43 -37
  66. package/dist/cli/main.js.map +1 -1
  67. package/dist/cli/registry.js +45 -44
  68. package/dist/cli/registry.js.map +1 -1
  69. package/dist/discovery/deprecation-report.md +1 -1
  70. package/dist/discovery/discovery-manifest.json +419 -210
  71. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  72. package/dist/discovery/discovery-manifest.summary.md +4 -4
  73. package/dist/discovery/orphan-report.md +1 -1
  74. package/dist/discovery/packs.json +31 -25
  75. package/dist/discovery/trust-report.md +2 -2
  76. package/dist/discovery/workspaces.json +30 -24
  77. package/dist/install/install.mjs +6064 -159
  78. package/dist/install/selectedTools.js +39 -10
  79. package/dist/install/selectedTools.js.map +1 -1
  80. package/dist/mcp/registry-manifest.json +3 -3
  81. package/dist/server/app.js +15 -3
  82. package/dist/server/app.js.map +1 -1
  83. package/dist/server/routes/ping.js +16 -0
  84. package/dist/server/routes/ping.js.map +1 -1
  85. package/dist/server/routes/settings.js +42 -6
  86. package/dist/server/routes/settings.js.map +1 -1
  87. package/dist/server/routes/settingsChanges.js +55 -0
  88. package/dist/server/routes/settingsChanges.js.map +1 -0
  89. package/dist/server/routes/userMd.js +7 -2
  90. package/dist/server/routes/userMd.js.map +1 -1
  91. package/dist/server/routes/wizard.js +76 -14
  92. package/dist/server/routes/wizard.js.map +1 -1
  93. package/dist/server/writeRoot.js +17 -0
  94. package/dist/server/writeRoot.js.map +1 -1
  95. package/dist/shared/settingsSurface.js +120 -0
  96. package/dist/shared/settingsSurface.js.map +1 -0
  97. package/dist/ui/assets/index-BPFMZWUs.css +1 -0
  98. package/dist/ui/assets/index-BiEZiZ31.js +40 -0
  99. package/dist/ui/assets/index-BiEZiZ31.js.map +1 -0
  100. package/dist/ui/index.html +15 -2
  101. package/docs/CLAIMS.md +20 -15
  102. package/docs/architecture.md +1 -1
  103. package/docs/catalog.md +37 -31
  104. package/docs/command-flows.md +22 -16
  105. package/docs/contracts/command-clusters.md +39 -9
  106. package/docs/contracts/file-ownership-matrix.json +21 -0
  107. package/docs/contracts/frontmatter-contract.md +1 -1
  108. package/docs/contracts/gui-wizard.md +16 -4
  109. package/docs/contracts/iron-law-overrides.txt +1 -0
  110. package/docs/contracts/rule-classification.md +2 -2
  111. package/docs/contracts/settings-api.md +58 -2
  112. package/docs/contracts/surface-matrix.md +5 -0
  113. package/docs/cookbook.md +7 -7
  114. package/docs/decisions/ADR-114-commit-policy-iron-law-override.md +74 -0
  115. package/docs/decisions/ADR-115-command-cluster-consolidation-phase-4.md +91 -0
  116. package/docs/decisions/INDEX.md +2 -0
  117. package/docs/featured-commands.md +1 -1
  118. package/docs/featured-skills.md +4 -4
  119. package/docs/flows.md +2 -2
  120. package/docs/getting-started-by-role.md +1 -1
  121. package/docs/getting-started-laravel.md +1 -1
  122. package/docs/getting-started.md +6 -3
  123. package/docs/governance-advantage.md +1 -1
  124. package/docs/guidelines/agent-infra/5w2h-analysis.md +1 -1
  125. package/docs/guidelines/agent-infra/ios-simulator-guide.md +1 -1
  126. package/docs/proof.md +11 -2
  127. package/package.json +3 -1
  128. package/src/agent-src/README.md +1 -1
  129. package/src/agent-src/templates/scripts/work_engine/stack/runner.ts +1 -1
  130. package/src/config/agent-settings.template.yml +1 -1
  131. package/src/install/selectedTools.ts +38 -10
  132. package/src/scripts/_cli/cmd_converge.ts +38 -0
  133. package/src/scripts/_cli/cmd_doctor.ts +113 -2
  134. package/src/scripts/_cli/cmd_explain.ts +2 -2
  135. package/src/scripts/_cli/cmd_export.ts +3 -3
  136. package/src/scripts/_cli/cmd_fleet.ts +13 -1
  137. package/src/scripts/_cli/cmd_migrate.ts +3 -3
  138. package/src/scripts/_cli/cmd_prune.ts +2 -2
  139. package/src/scripts/_cli/cmd_refresh.ts +4 -4
  140. package/src/scripts/_cli/cmd_settings_check.ts +2 -2
  141. package/src/scripts/_cli/cmd_settings_migrate.ts +2 -2
  142. package/src/scripts/_cli/cmd_sync.ts +2 -2
  143. package/src/scripts/_cli/cmd_uninstall.ts +2 -2
  144. package/src/scripts/_cli/cmd_update.ts +8 -8
  145. package/src/scripts/_cli/cmd_upgrade.ts +4 -3
  146. package/src/scripts/_cli/cmd_validate.ts +3 -3
  147. package/src/scripts/_cli/cmd_versions.ts +2 -2
  148. package/src/scripts/_cli/explain_last/assumptions.ts +2 -2
  149. package/src/scripts/_cli/explain_last/council.ts +2 -2
  150. package/src/scripts/_cli/explain_last/halt.ts +2 -2
  151. package/src/scripts/_cli/explain_last/index.ts +2 -2
  152. package/src/scripts/_cli/explain_last/inputs.ts +4 -4
  153. package/src/scripts/_cli/explain_last/memory.ts +2 -2
  154. package/src/scripts/_cli/explain_last/provider.ts +2 -2
  155. package/src/scripts/_cli/explain_last/render.ts +2 -2
  156. package/src/scripts/_cli/explain_last/route.ts +2 -2
  157. package/src/scripts/_cli/explain_last/scrubber.ts +2 -2
  158. package/src/scripts/_cli/explain_last/sections/assumptions.ts +2 -2
  159. package/src/scripts/_cli/explain_last/sections/council.ts +2 -2
  160. package/src/scripts/_cli/explain_last/sections/halt.ts +2 -2
  161. package/src/scripts/_cli/explain_last/sections/header.ts +2 -2
  162. package/src/scripts/_cli/explain_last/sections/index.ts +1 -1
  163. package/src/scripts/_cli/explain_last/sections/inputs.ts +2 -2
  164. package/src/scripts/_cli/explain_last/sections/memory.ts +2 -2
  165. package/src/scripts/_cli/explain_last/sections/pack.ts +2 -2
  166. package/src/scripts/_cli/explain_last/sections/provider.ts +2 -2
  167. package/src/scripts/_cli/explain_last/sections/route.ts +2 -2
  168. package/src/scripts/_cli/explain_last/state_loader.ts +2 -2
  169. package/src/scripts/_dispatch.bash +20 -1
  170. package/src/scripts/_lib/agent_settings.ts +1 -1
  171. package/src/scripts/_lib/agent_src.ts +7 -7
  172. package/src/scripts/_lib/agents_overlay.ts +1 -1
  173. package/src/scripts/_lib/bench_ab_cache.ts +1 -1
  174. package/src/scripts/_lib/bench_ab_scoring.ts +1 -1
  175. package/src/scripts/_lib/bench_ab_scoring_v2.ts +3 -3
  176. package/src/scripts/_lib/bench_cost.ts +1 -1
  177. package/src/scripts/_lib/bench_quality.ts +3 -3
  178. package/src/scripts/_lib/bench_report.ts +4 -4
  179. package/src/scripts/_lib/bench_telegraph.ts +1 -1
  180. package/src/scripts/_lib/bench_telegraph_report.ts +4 -4
  181. package/src/scripts/_lib/changelog_eras.ts +1 -1
  182. package/src/scripts/_lib/claude_desktop_bundler.ts +1 -1
  183. package/src/scripts/_lib/cli_wrapper.ts +1 -1
  184. package/src/scripts/_lib/fs_atomic.ts +1 -1
  185. package/src/scripts/_lib/global_deploy_inventory.ts +1 -1
  186. package/src/scripts/_lib/install_layout.ts +1 -1
  187. package/src/scripts/_lib/install_regenerator.ts +1 -1
  188. package/src/scripts/_lib/installed_lock.ts +1 -1
  189. package/src/scripts/_lib/installed_tools.ts +1 -1
  190. package/src/scripts/_lib/json_pointers.ts +1 -1
  191. package/src/scripts/_lib/knowledge_global.ts +1 -1
  192. package/src/scripts/_lib/knowledge_global_promote.ts +2 -2
  193. package/src/scripts/_lib/knowledge_global_redaction.ts +2 -2
  194. package/src/scripts/_lib/link_crypto.ts +4 -4
  195. package/src/scripts/_lib/linked_projects.ts +4 -4
  196. package/src/scripts/_lib/model_tier.ts +1 -1
  197. package/src/scripts/_lib/module_detection.ts +2 -2
  198. package/src/scripts/_lib/pin_resolver.ts +1 -1
  199. package/src/scripts/_lib/script_output.ts +1 -1
  200. package/src/scripts/_lib/security_lint.ts +1 -1
  201. package/src/scripts/_lib/surface_tiers.ts +1 -1
  202. package/src/scripts/_lib/text_similarity.ts +1 -1
  203. package/src/scripts/_lib/update_check.ts +2 -2
  204. package/src/scripts/_lib/user_global_paths.ts +1 -1
  205. package/src/scripts/_lib/value_ladder.ts +1 -1
  206. package/src/scripts/_lib/value_report.ts +1 -1
  207. package/src/scripts/_lib/zip_min.ts +2 -2
  208. package/src/scripts/adoption_report.ts +3 -3
  209. package/src/scripts/adoption_snapshot.ts +3 -3
  210. package/src/scripts/adoption_status.ts +2 -2
  211. package/src/scripts/adr/regenerate_index.ts +3 -3
  212. package/src/scripts/ai_council/_default_prices.ts +2 -3
  213. package/src/scripts/ai_council/advisors.ts +1 -1
  214. package/src/scripts/ai_council/airgap.ts +1 -1
  215. package/src/scripts/ai_council/budget_guard.ts +1 -1
  216. package/src/scripts/ai_council/bundler.ts +1 -1
  217. package/src/scripts/ai_council/cli_hints.ts +1 -1
  218. package/src/scripts/ai_council/clients.ts +5 -5
  219. package/src/scripts/ai_council/compile_corpus.ts +1 -1
  220. package/src/scripts/ai_council/confidence_gate.ts +1 -1
  221. package/src/scripts/ai_council/config.ts +1 -1
  222. package/src/scripts/ai_council/consensus.ts +1 -1
  223. package/src/scripts/ai_council/events_log.ts +1 -1
  224. package/src/scripts/ai_council/learn_low_impact_preview.ts +1 -1
  225. package/src/scripts/ai_council/low_impact_corpus.ts +1 -1
  226. package/src/scripts/ai_council/low_impact_intake.ts +1 -1
  227. package/src/scripts/ai_council/modes.ts +1 -1
  228. package/src/scripts/ai_council/orchestrator.ts +3 -3
  229. package/src/scripts/ai_council/pricing.ts +2 -2
  230. package/src/scripts/ai_council/probation_gate.ts +2 -2
  231. package/src/scripts/ai_council/project_context.ts +1 -1
  232. package/src/scripts/ai_council/prompts.ts +1 -1
  233. package/src/scripts/ai_council/redact_low_impact_entry.ts +2 -2
  234. package/src/scripts/ai_council/session.ts +1 -1
  235. package/src/scripts/ai_council/shadow_dispatch.ts +1 -1
  236. package/src/scripts/ai_council/solo_dispatch.ts +1 -1
  237. package/src/scripts/analysis_freshness.ts +2 -2
  238. package/src/scripts/annotate_discovery.ts +2 -2
  239. package/src/scripts/apply_modules_config.ts +2 -2
  240. package/src/scripts/audit_adr_coverage.ts +3 -3
  241. package/src/scripts/audit_auto_rules.ts +2 -2
  242. package/src/scripts/audit_cloud_compatibility.ts +3 -3
  243. package/src/scripts/audit_command_surface.ts +2 -2
  244. package/src/scripts/audit_initial_context.ts +7 -6
  245. package/src/scripts/audit_likelihood.ts +5 -5
  246. package/src/scripts/audit_mcp_tools.ts +3 -3
  247. package/src/scripts/audit_overlap.ts +2 -2
  248. package/src/scripts/audit_skill_descriptions.ts +2 -2
  249. package/src/scripts/audit_skill_overlap.ts +5 -5
  250. package/src/scripts/audit_user_type_axis.ts +4 -4
  251. package/src/scripts/backfill_model_tier.ts +1 -1
  252. package/src/scripts/bench_ab_cache_dispatch.ts +2 -2
  253. package/src/scripts/bench_ab_clone.ts +2 -2
  254. package/src/scripts/bench_ab_diff.ts +3 -3
  255. package/src/scripts/bench_ab_integrity.ts +2 -2
  256. package/src/scripts/bench_ab_run.ts +4 -4
  257. package/src/scripts/bench_ab_task_runner.ts +1 -1
  258. package/src/scripts/bench_ab_tracka_run.ts +2 -2
  259. package/src/scripts/bench_ab_v2_run.ts +1 -1
  260. package/src/scripts/bench_ab_v2_stats.ts +2 -2
  261. package/src/scripts/bench_baseline_ready.ts +1 -1
  262. package/src/scripts/bench_condense_memory.ts +4 -4
  263. package/src/scripts/bench_drift_check.ts +3 -3
  264. package/src/scripts/bench_per_tool.ts +1 -1
  265. package/src/scripts/bench_rtk_savings.ts +4 -4
  266. package/src/scripts/bench_run.ts +4 -4
  267. package/src/scripts/bench_runner.ts +1 -1
  268. package/src/scripts/build_cloud_bundle.ts +3 -3
  269. package/src/scripts/build_discovery_manifest.ts +13 -15
  270. package/src/scripts/build_linear_digest.ts +2 -2
  271. package/src/scripts/build_mcp_registry_manifest.ts +3 -3
  272. package/src/scripts/build_proof.ts +6 -0
  273. package/src/scripts/build_rule_trigger_matrix.ts +2 -2
  274. package/src/scripts/capture_showcase_session.ts +3 -3
  275. package/src/scripts/chat_history.ts +1 -1
  276. package/src/scripts/check_always_budget.ts +1 -1
  277. package/src/scripts/check_artefact_checksums.ts +4 -4
  278. package/src/scripts/check_artefact_count_messaging.ts +197 -0
  279. package/src/scripts/check_augment_description_cap.ts +3 -3
  280. package/src/scripts/check_augmentignore.ts +1 -1
  281. package/src/scripts/check_beta_review_markers.ts +3 -3
  282. package/src/scripts/check_bite_sized_granularity.ts +1 -1
  283. package/src/scripts/check_cluster_patterns.ts +47 -3
  284. package/src/scripts/check_command_count_messaging.ts +2 -2
  285. package/src/scripts/check_condensation.ts +2 -2
  286. package/src/scripts/check_condensed_paths.ts +6 -6
  287. package/src/scripts/check_context_paths.ts +1 -1
  288. package/src/scripts/check_council_config_location.ts +3 -3
  289. package/src/scripts/check_council_layout.ts +2 -2
  290. package/src/scripts/check_council_references.ts +2 -2
  291. package/src/scripts/check_discovery_determinism.ts +3 -3
  292. package/src/scripts/check_gate_paths.ts +4 -4
  293. package/src/scripts/check_iron_law_prominence.ts +2 -2
  294. package/src/scripts/check_kernel_rule_bundle.ts +3 -3
  295. package/src/scripts/check_knowledge_cards.ts +4 -4
  296. package/src/scripts/check_knowledge_pages.ts +1 -1
  297. package/src/scripts/check_md_language.ts +3 -3
  298. package/src/scripts/check_memory.ts +3 -3
  299. package/src/scripts/check_memory_proposal.ts +2 -2
  300. package/src/scripts/check_module_management_neutral.ts +1 -1
  301. package/src/scripts/check_no_conflict_markers.ts +1 -1
  302. package/src/scripts/check_no_external_sources.ts +1 -1
  303. package/src/scripts/check_no_local_settings_committed.ts +2 -2
  304. package/src/scripts/check_no_new_legacy_path.ts +3 -3
  305. package/src/scripts/check_no_roadmap_refs.ts +3 -3
  306. package/src/scripts/check_one_off_location.ts +3 -3
  307. package/src/scripts/check_overlay_cascade_subdirs.ts +3 -3
  308. package/src/scripts/check_portability.ts +3 -3
  309. package/src/scripts/check_proposal.ts +0 -0
  310. package/src/scripts/check_public_catalog_links.ts +1 -1
  311. package/src/scripts/check_public_links.ts +2 -2
  312. package/src/scripts/check_references.ts +3 -3
  313. package/src/scripts/check_release_includes_discovery.ts +2 -2
  314. package/src/scripts/check_release_pr_shape.ts +2 -2
  315. package/src/scripts/check_release_published.ts +1 -1
  316. package/src/scripts/check_release_trunk_sync.ts +3 -3
  317. package/src/scripts/check_reply_consistency.ts +1 -1
  318. package/src/scripts/check_roadmap_trackable.ts +2 -2
  319. package/src/scripts/check_role_doc_links.ts +2 -2
  320. package/src/scripts/check_safety_floor_untouched.ts +3 -3
  321. package/src/scripts/check_skill_requires.ts +2 -2
  322. package/src/scripts/check_structural_breaking.ts +2 -2
  323. package/src/scripts/check_surface_tiers.ts +2 -2
  324. package/src/scripts/check_template_pin_drift.ts +1 -1
  325. package/src/scripts/check_test_coverage_diff.ts +2 -2
  326. package/src/scripts/check_token_optimizer_freshness.ts +3 -3
  327. package/src/scripts/check_trigger_evals.ts +2 -2
  328. package/src/scripts/check_update_banner.ts +1 -1
  329. package/src/scripts/ci_status.ts +0 -0
  330. package/src/scripts/ci_summary.ts +3 -3
  331. package/src/scripts/ci_time_ratio.ts +1 -1
  332. package/src/scripts/command_suggester/cooldown.ts +1 -1
  333. package/src/scripts/command_suggester/index.ts +1 -1
  334. package/src/scripts/command_suggester/loader.ts +1 -1
  335. package/src/scripts/command_suggester/match.ts +1 -1
  336. package/src/scripts/command_suggester/rank.ts +1 -1
  337. package/src/scripts/command_suggester/render.ts +1 -1
  338. package/src/scripts/command_suggester/sanitize.ts +1 -1
  339. package/src/scripts/command_suggester/settings.ts +1 -1
  340. package/src/scripts/command_suggester/types.ts +0 -0
  341. package/src/scripts/compile_router.ts +4 -4
  342. package/src/scripts/condense.ts +3 -3
  343. package/src/scripts/condense_memory.ts +1 -1
  344. package/src/scripts/config/index.ts +1 -1
  345. package/src/scripts/config/packs.ts +1 -1
  346. package/src/scripts/config/presets.ts +1 -1
  347. package/src/scripts/config/profile_explain.ts +1 -1
  348. package/src/scripts/config/profiles.ts +1 -1
  349. package/src/scripts/config/session_profiles.ts +1 -1
  350. package/src/scripts/context_hygiene_hook.ts +2 -2
  351. package/src/scripts/cost_by_conversation.ts +1 -1
  352. package/src/scripts/cost_summary.ts +2 -2
  353. package/src/scripts/council_cli.ts +1 -1
  354. package/src/scripts/council_prune.ts +1 -1
  355. package/src/scripts/cross_repo_retrieve.ts +2 -2
  356. package/src/scripts/discovery_stats.ts +3 -3
  357. package/src/scripts/evidence_report.ts +4 -4
  358. package/src/scripts/extract_audit_patterns.ts +2 -2
  359. package/src/scripts/first_run_gate_hook.ts +1 -1
  360. package/src/scripts/gen_discovery_baseline.ts +2 -2
  361. package/src/scripts/generate_capabilities_index.ts +2 -2
  362. package/src/scripts/generate_capability_matrix.ts +2 -2
  363. package/src/scripts/generate_catalog.ts +2 -2
  364. package/src/scripts/generate_command_flows.ts +2 -2
  365. package/src/scripts/generate_cookbook.ts +1 -1
  366. package/src/scripts/generate_index.ts +3 -3
  367. package/src/scripts/generate_ownership_matrix.ts +2 -2
  368. package/src/scripts/generate_pack_manifests.ts +2 -2
  369. package/src/scripts/generate_role_experiences_catalog.ts +3 -3
  370. package/src/scripts/hooks/block_no_verify.ts +2 -2
  371. package/src/scripts/hooks/dispatch_hook.ts +2 -2
  372. package/src/scripts/hooks/dispatch_issues.ts +1 -1
  373. package/src/scripts/hooks/envelope.ts +1 -1
  374. package/src/scripts/hooks/replay_hook.ts +1 -1
  375. package/src/scripts/hooks/state_io.ts +1 -1
  376. package/src/scripts/hooks_doctor.ts +1 -1
  377. package/src/scripts/hooks_status.ts +1 -1
  378. package/src/scripts/injection_scan_hook.ts +1 -1
  379. package/src/scripts/install.ts +145 -3
  380. package/src/scripts/inventory_abstraction_budget.ts +5 -5
  381. package/src/scripts/inventory_frontmatter.ts +1 -1
  382. package/src/scripts/inventory_meta_layers.ts +1 -1
  383. package/src/scripts/iron_law_sha.ts +1 -1
  384. package/src/scripts/knowledge_global_cli.ts +3 -3
  385. package/src/scripts/linked_projects_list.ts +1 -1
  386. package/src/scripts/lint_agent_security.ts +4 -4
  387. package/src/scripts/lint_agent_skill_names.ts +1 -1
  388. package/src/scripts/lint_agents_layout.ts +2 -2
  389. package/src/scripts/lint_agents_md.ts +3 -3
  390. package/src/scripts/lint_archived_skills.ts +2 -2
  391. package/src/scripts/lint_artefact_frontmatter.ts +2 -2
  392. package/src/scripts/lint_bench_ab.ts +2 -2
  393. package/src/scripts/lint_bench_corpus.ts +1 -1
  394. package/src/scripts/lint_command_flow_coverage.ts +1 -1
  395. package/src/scripts/lint_command_routing.ts +2 -2
  396. package/src/scripts/lint_command_tiers.ts +1 -1
  397. package/src/scripts/lint_command_verbs.ts +4 -4
  398. package/src/scripts/lint_commit_subjects.ts +2 -2
  399. package/src/scripts/lint_context_spine_usage.ts +3 -3
  400. package/src/scripts/lint_discovery_manifest.ts +4 -4
  401. package/src/scripts/lint_discovery_vocabulary.ts +2 -2
  402. package/src/scripts/lint_empty_roadmaps.ts +3 -3
  403. package/src/scripts/lint_eval_freshness.ts +2 -2
  404. package/src/scripts/lint_examples.ts +2 -2
  405. package/src/scripts/lint_explain_trace.ts +2 -2
  406. package/src/scripts/lint_featured_skills.ts +0 -0
  407. package/src/scripts/lint_flows.ts +5 -5
  408. package/src/scripts/lint_framework_leakage.ts +1 -1
  409. package/src/scripts/lint_framework_leakage_allowlist.json +10 -2
  410. package/src/scripts/lint_frontmatter_boilerplate.ts +2 -2
  411. package/src/scripts/lint_ghostwriter_source.ts +3 -3
  412. package/src/scripts/lint_global_paths.ts +1 -1
  413. package/src/scripts/lint_handoffs.ts +1 -1
  414. package/src/scripts/lint_hidden_unicode.ts +1 -1
  415. package/src/scripts/lint_hook_concern_budget.ts +2 -2
  416. package/src/scripts/lint_hook_manifest.ts +2 -2
  417. package/src/scripts/lint_instruction_smuggling.ts +1 -1
  418. package/src/scripts/lint_load_context.ts +2 -2
  419. package/src/scripts/lint_marketplace.ts +1 -1
  420. package/src/scripts/lint_marketplace_install_completeness.ts +2 -2
  421. package/src/scripts/lint_mcp_config_security.ts +1 -1
  422. package/src/scripts/lint_mcp_registry_manifest.ts +1 -1
  423. package/src/scripts/lint_media_policy_linkage.ts +3 -3
  424. package/src/scripts/lint_missions.ts +3 -3
  425. package/src/scripts/lint_model_tier_coverage.ts +3 -3
  426. package/src/scripts/lint_namespace.ts +2 -2
  427. package/src/scripts/lint_namespace_collisions.ts +2 -2
  428. package/src/scripts/lint_new_skill_gate.ts +3 -3
  429. package/src/scripts/lint_no_new_atomic_commands.ts +9 -6
  430. package/src/scripts/lint_no_python_twin_rationale.ts +102 -0
  431. package/src/scripts/lint_one_off_age.ts +2 -2
  432. package/src/scripts/lint_orchestration_dsl.ts +3 -3
  433. package/src/scripts/lint_orchestrator_auto_detect.ts +1 -1
  434. package/src/scripts/lint_pack_boundaries.ts +2 -2
  435. package/src/scripts/lint_pack_dependencies.ts +2 -2
  436. package/src/scripts/lint_pack_first_win.ts +2 -2
  437. package/src/scripts/lint_persona_governance.ts +3 -3
  438. package/src/scripts/lint_positioning.ts +1 -1
  439. package/src/scripts/lint_profile_overlay_set_only.ts +2 -2
  440. package/src/scripts/lint_readme_jargon.ts +2 -2
  441. package/src/scripts/lint_readme_size.ts +2 -2
  442. package/src/scripts/lint_regression.ts +3 -3
  443. package/src/scripts/lint_roadmap_ci_steps.ts +3 -3
  444. package/src/scripts/lint_roadmap_complexity.ts +1 -1
  445. package/src/scripts/lint_roadmap_later_disposition.ts +2 -2
  446. package/src/scripts/lint_role_experiences.ts +2 -2
  447. package/src/scripts/lint_rule_interactions.ts +1 -1
  448. package/src/scripts/lint_rule_tiers.ts +1 -1
  449. package/src/scripts/lint_showcase_sessions.ts +2 -2
  450. package/src/scripts/lint_skill_frontmatter_safety.ts +1 -1
  451. package/src/scripts/lint_skill_originality.ts +1 -1
  452. package/src/scripts/lint_skill_tools.ts +3 -3
  453. package/src/scripts/lint_ticket_buildable.ts +2 -2
  454. package/src/scripts/lint_topics_yaml.ts +3 -3
  455. package/src/scripts/lint_trust_coherence.ts +3 -3
  456. package/src/scripts/lint_value_dashboard.ts +3 -3
  457. package/src/scripts/lint_workflow_security.ts +3 -3
  458. package/src/scripts/lint_workspace_boundary.ts +2 -2
  459. package/src/scripts/mcp_parity_smoke.ts +1 -1
  460. package/src/scripts/mcp_render.ts +1 -1
  461. package/src/scripts/mcp_server/catalog.ts +1 -1
  462. package/src/scripts/mcp_server/index.ts +1 -1
  463. package/src/scripts/mcp_server/metadata.ts +1 -1
  464. package/src/scripts/mcp_server/prompts.ts +1 -1
  465. package/src/scripts/mcp_server/resources.ts +1 -1
  466. package/src/scripts/mcp_server/server.ts +1 -1
  467. package/src/scripts/mcp_server/telemetry.ts +1 -1
  468. package/src/scripts/mcp_server/tools.ts +1 -1
  469. package/src/scripts/mcp_telemetry_health.ts +1 -1
  470. package/src/scripts/mcp_telemetry_query.ts +3 -3
  471. package/src/scripts/mcp_telemetry_store.ts +3 -3
  472. package/src/scripts/measure_augment_budget.ts +2 -2
  473. package/src/scripts/measure_density.ts +2 -2
  474. package/src/scripts/measure_frugality_savings.ts +3 -3
  475. package/src/scripts/measure_markitdown_lift.ts +1 -1
  476. package/src/scripts/measure_patterns.ts +1 -1
  477. package/src/scripts/measure_projection_bytes.ts +1 -1
  478. package/src/scripts/measure_rule_budget.ts +1 -1
  479. package/src/scripts/measure_skill_reduction.ts +1 -1
  480. package/src/scripts/memory_hash.ts +1 -1
  481. package/src/scripts/memory_lookup.ts +6 -6
  482. package/src/scripts/memory_report.ts +1 -1
  483. package/src/scripts/memory_signal.ts +1 -1
  484. package/src/scripts/memory_status.ts +2 -2
  485. package/src/scripts/migrate_command_suggestions.ts +1 -1
  486. package/src/scripts/migrate_frontmatter_defaults.ts +1 -1
  487. package/src/scripts/mine_session.ts +3 -3
  488. package/src/scripts/minimal_safe_diff_hook.ts +2 -2
  489. package/src/scripts/move_artefact.ts +3 -3
  490. package/src/scripts/new_skill.ts +3 -3
  491. package/src/scripts/onboarding_gate_hook.ts +2 -2
  492. package/src/scripts/pack_mcp_content.ts +1 -1
  493. package/src/scripts/parity/replay.ts +3 -2
  494. package/src/scripts/pattern_share.ts +2 -2
  495. package/src/scripts/plan_physical_move.ts +3 -3
  496. package/src/scripts/prediction-pool/poisson_sim.ts +2 -2
  497. package/src/scripts/prediction-pool/pool_winsim.ts +2 -2
  498. package/src/scripts/prediction-pool/score_ev.ts +2 -2
  499. package/src/scripts/print_required_checks.ts +2 -2
  500. package/src/scripts/probe_projection_fidelity.ts +2 -2
  501. package/src/scripts/probe_skill_registration.ts +2 -2
  502. package/src/scripts/profile_staleness_hook.ts +2 -2
  503. package/src/scripts/profile_use.ts +2 -2
  504. package/src/scripts/project_thin_rules.ts +3 -3
  505. package/src/scripts/propose_modules_config.ts +2 -2
  506. package/src/scripts/prototype_lint_contradictions.ts +2 -2
  507. package/src/scripts/prove_pack_extractable.ts +1 -1
  508. package/src/scripts/readme_linter.ts +4 -4
  509. package/src/scripts/redact_hook_capture.ts +2 -2
  510. package/src/scripts/refine_ticket_detect.ts +1 -1
  511. package/src/scripts/release.ts +30 -19
  512. package/src/scripts/render_benchmark_md.ts +2 -2
  513. package/src/scripts/render_value_md.ts +2 -2
  514. package/src/scripts/roadmap_progress_hook.ts +1 -1
  515. package/src/scripts/router_telemetry.ts +1 -1
  516. package/src/scripts/run_skill_evals.ts +2 -2
  517. package/src/scripts/runtime_dispatcher.ts +1 -1
  518. package/src/scripts/runtime_handler.ts +1 -1
  519. package/src/scripts/runtime_registry.ts +3 -3
  520. package/src/scripts/score_skill_selection.ts +1 -1
  521. package/src/scripts/security_audit_config.ts +2 -2
  522. package/src/scripts/skill_collision_clusters.ts +1 -1
  523. package/src/scripts/skill_discovery.ts +1 -1
  524. package/src/scripts/skill_linter.ts +8 -7
  525. package/src/scripts/skill_overlap.ts +2 -2
  526. package/src/scripts/skill_preview.ts +1 -1
  527. package/src/scripts/skill_tools/audit_persona_coverage.ts +3 -3
  528. package/src/scripts/skill_tools/audit_user_type_coverage.ts +3 -3
  529. package/src/scripts/skill_tools/index.ts +1 -1
  530. package/src/scripts/skill_tools/run_block_d_eval.ts +3 -3
  531. package/src/scripts/skill_tools/score_skill_relevance.ts +3 -3
  532. package/src/scripts/skill_tools/suggest_skill_for_task.ts +3 -3
  533. package/src/scripts/skill_trigger_eval.ts +2 -2
  534. package/src/scripts/skill_usage_collect.ts +2 -2
  535. package/src/scripts/skill_usage_report.ts +2 -2
  536. package/src/scripts/smoke_path_resolution.ts +2 -2
  537. package/src/scripts/smoke_quickstart.ts +4 -4
  538. package/src/scripts/snapshot_agent_outputs.ts +2 -2
  539. package/src/scripts/spotcheck_thin_root.ts +2 -2
  540. package/src/scripts/surface-tiers.yml +1 -0
  541. package/src/scripts/sync_agent_settings.ts +2 -2
  542. package/src/scripts/sync_github_metadata.ts +4 -4
  543. package/src/scripts/sync_gitignore.ts +3 -3
  544. package/src/scripts/sync_yaml_rt.ts +2 -2
  545. package/src/scripts/telegraph_stats.ts +1 -1
  546. package/src/scripts/tool_registry.ts +2 -2
  547. package/src/scripts/tools/adapter_errors.ts +1 -1
  548. package/src/scripts/tools/base_adapter.ts +1 -1
  549. package/src/scripts/tools/github_adapter.ts +1 -1
  550. package/src/scripts/tools/jira_adapter.ts +1 -1
  551. package/src/scripts/trigger_coverage.ts +2 -2
  552. package/src/scripts/update_counts.ts +68 -6
  553. package/src/scripts/update_prices.ts +3 -3
  554. package/src/scripts/validate_agent_settings.ts +3 -3
  555. package/src/scripts/validate_decision_engine.ts +2 -2
  556. package/src/scripts/validate_discovery_manifest.ts +3 -3
  557. package/src/scripts/validate_frontmatter.ts +5 -5
  558. package/src/scripts/validate_pack_yaml.ts +0 -0
  559. package/src/scripts/validate_safe_paths.ts +2 -2
  560. package/src/scripts/validate_telegraph_carveouts.ts +3 -3
  561. package/src/scripts/verify_before_complete_hook.ts +2 -2
  562. package/src/scripts/verify_physical_move.ts +2 -2
  563. package/src/scripts/wrapper_freshness_hook.ts +3 -3
  564. package/src/server/schemas/settings.ts +426 -0
  565. package/src/shared/settingsSurface.ts +184 -0
  566. package/src/shared/userMd/formAdapter.ts +86 -0
  567. package/src/shared/userMd/schema.ts +59 -0
  568. package/src/shared/userMd/utils.ts +91 -0
  569. package/dist/agent-src/commands/optimize-project.md +0 -243
  570. package/dist/ui/assets/index-BbWWuFrF.css +0 -1
  571. package/dist/ui/assets/index-UjcTG_9O.js +0 -40
  572. package/dist/ui/assets/index-UjcTG_9O.js.map +0 -1
@@ -11,7 +11,7 @@
11
11
  * runner and quality tools does this stack actually use, and what is the
12
12
  * exact command to invoke them?* It is the engine behind 6.1.0 Step 6 — the
13
13
  * toolchain resolver that lets one set of commands (`/tests execute`,
14
- * `/tests create`, `/quality-fix`, `/review-changes`, `/work`) adapt to
14
+ * `/tests create`, `/fix quality`, `/review changes`, `/work`) adapt to
15
15
  * phpunit / pest / vitest / jest / playwright / pytest / go / cargo instead
16
16
  * of exploding into per-stack command variants.
17
17
  *
@@ -460,7 +460,7 @@ quality:
460
460
  # tokens. The user runs quality tools manually; remote CI is
461
461
  # the authoritative gate. The agent runs a quality tool ONLY
462
462
  # when one of three triggers fires:
463
- # 1. the user explicitly asks this turn (e.g. /quality-fix),
463
+ # 1. the user explicitly asks this turn (e.g. /fix quality),
464
464
  # 2. CI / the remote pipeline reports a concrete failure —
465
465
  # then run exactly that failing check to reproduce + fix,
466
466
  # 3. the new-gate carve-out below.
@@ -1,14 +1,20 @@
1
1
  /**
2
- * Persisted record of the AI tools the user actually selected in the wizard,
3
- * at `~/.event4u/agent-config/wizard-tools.json`. This is the user's prior
4
- * *selection* — distinct from `installed.lock` (every tool agent-config was
5
- * deployed to, which for an `--tools=all` install is the full set) and from
6
- * machine tool *detection*.
2
+ * Persisted record of the AI tools AND capability packs the user actually
3
+ * selected in the wizard, at `~/.event4u/agent-config/wizard-tools.json`.
4
+ * This is the user's prior *selection* — distinct from `installed.lock`
5
+ * (every tool agent-config was deployed to, which for an `--tools=all`
6
+ * install is the full set) and from machine tool *detection*.
7
7
  *
8
8
  * Written by the apply route on a real (non-dry-run) wizard-v2 apply, and
9
- * read by `detect-tools` so Step 1 pre-selects exactly the prior selection on
10
- * a repeat run. Empty / missing → first run → Step 1 falls back to
11
- * pre-selecting every installed tool.
9
+ * read by `detect-tools` / the manifest endpoint so a repeat run pre-selects
10
+ * exactly the prior selection. Empty / missing → first run → Step 1 falls
11
+ * back to pre-selecting every installed tool.
12
+ *
13
+ * `packs` was added by road-to-setup-experience (council 2026-07-08,
14
+ * lockfile-extension over settings-YAML surgery): the `packs:` list in
15
+ * `.agent-settings.yml` is only rendered into FRESH settings files, so on
16
+ * machines with an existing file the selection was never persisted anywhere
17
+ * — the wizard forgot installed packs between runs.
12
18
  *
13
19
  * `AGENT_CONFIG_WIZARD_TOOLS` overrides the path (tests only).
14
20
  */
@@ -23,17 +29,39 @@ function selectedToolsPath(): string {
23
29
  return resolve(homedir(), '.event4u', 'agent-config', 'wizard-tools.json');
24
30
  }
25
31
 
26
- export function writeSelectedTools(tools: string[]): void {
32
+ export function writeSelectedTools(tools: string[], packs?: string[]): void {
27
33
  try {
28
34
  const path = selectedToolsPath();
29
35
  mkdirSync(dirname(path), { recursive: true, mode: 0o700 });
30
- writeFileSync(path, `${JSON.stringify({ tools }, null, 2)}\n`, { encoding: 'utf8', mode: 0o600 });
36
+ // Preserve a previously recorded packs list when the caller does not
37
+ // pass one (older call sites) — never silently drop the selection.
38
+ const record: { tools: string[]; packs?: string[] } = { tools };
39
+ const packsToWrite = packs ?? readSelectedPacks();
40
+ if (packsToWrite.length > 0 || packs !== undefined) record.packs = packsToWrite;
41
+ writeFileSync(path, `${JSON.stringify(record, null, 2)}\n`, { encoding: 'utf8', mode: 0o600 });
31
42
  } catch {
32
43
  // Best-effort: a failed write just means the next run falls back to
33
44
  // pre-selecting installed tools.
34
45
  }
35
46
  }
36
47
 
48
+ /**
49
+ * Return the recorded pack selection, or `[]` when absent / unreadable.
50
+ * Optionally intersect with the known-pack set so a stale id never surfaces.
51
+ */
52
+ export function readSelectedPacks(knownIds?: ReadonlySet<string>): string[] {
53
+ try {
54
+ const raw = readFileSync(selectedToolsPath(), 'utf8');
55
+ const parsed = JSON.parse(raw) as { packs?: unknown };
56
+ const packs = Array.isArray(parsed.packs)
57
+ ? parsed.packs.filter((p): p is string => typeof p === 'string')
58
+ : [];
59
+ return knownIds === undefined ? packs : packs.filter((p) => knownIds.has(p));
60
+ } catch {
61
+ return [];
62
+ }
63
+ }
64
+
37
65
  /**
38
66
  * Return the recorded selection, or `[]` when absent / unreadable. Optionally
39
67
  * intersect with the known-tool set so a stale id never surfaces.
@@ -250,6 +250,37 @@ export interface MainOptions {
250
250
  err?: OutSink;
251
251
  }
252
252
 
253
+ /**
254
+ * Live-session notice for reaped Claude Code plugin caches — or null when no
255
+ * reap touched `~/.claude/plugins/`.
256
+ *
257
+ * Removing an installed plugin's cache does NOT reach into Claude Code
258
+ * sessions that are already running: they registered the plugin's hooks at
259
+ * session start and keep firing them, so every subsequent event logs
260
+ * `Failed to run: Plugin directory does not exist: …/plugins/cache/… — run
261
+ * /plugin to reinstall` until the session restarts. Claude Code's own
262
+ * `/plugin to reinstall` hint would recreate exactly the duplicate surface
263
+ * converge just removed — the correct remedy is a restart, so converge says
264
+ * so explicitly (road-to-truth-and-reference-hygiene follow-up, 2026-07-08).
265
+ */
266
+ export function live_session_notice(executed_reaps: readonly string[]): string | null {
267
+ const hit = executed_reaps.some((r) => r.startsWith('~/.claude/plugins/'));
268
+ if (!hit) {
269
+ return null;
270
+ }
271
+ return (
272
+ '⚠️ Live-session note: Claude Code sessions that were ALREADY RUNNING still\n' +
273
+ ' hold the removed plugin\'s hook registrations. Until you restart them,\n' +
274
+ ' every event logs a non-blocking\n' +
275
+ ' "Failed to run: Plugin directory does not exist: …/plugins/cache/…"\n' +
276
+ ' error. This is cosmetic for new sessions but means the affected LIVE\n' +
277
+ ' session\'s plugin-sourced hooks no longer run — restart Claude Code\n' +
278
+ ' sessions to clear it. Do NOT follow the error\'s "/plugin to reinstall"\n' +
279
+ ' hint: reinstalling recreates the duplicate surface converge just removed\n' +
280
+ ' (the ~/.claude/ file projection already carries content AND hooks).'
281
+ );
282
+ }
283
+
253
284
  export function main(argv: string[] | null = null, opts: MainOptions = {}): number {
254
285
  let args: Args;
255
286
  try {
@@ -329,6 +360,7 @@ export function main(argv: string[] | null = null, opts: MainOptions = {}): numb
329
360
  // Perform the cleanup — matrix-declared actions ONLY.
330
361
  let failures = 0;
331
362
  const report: string[] = [];
363
+ const executed_reaps: string[] = [];
332
364
  for (const f of findings) {
333
365
  if (f.command) {
334
366
  _print(out, `→ ${f.command}`);
@@ -351,6 +383,7 @@ export function main(argv: string[] | null = null, opts: MainOptions = {}): numb
351
383
  try {
352
384
  fs.rmSync(abs, { recursive: true, force: true });
353
385
  report.push(`${f.tool}: reaped package-tagged orphan \`${reap}\``);
386
+ executed_reaps.push(reap);
354
387
  _print(out, `→ reaped ${reap}`);
355
388
  } catch (e) {
356
389
  failures += 1;
@@ -367,6 +400,11 @@ export function main(argv: string[] | null = null, opts: MainOptions = {}): numb
367
400
  if (report.length === 0) {
368
401
  _print(out, ' (no actions completed)');
369
402
  }
403
+ const notice = live_session_notice(executed_reaps);
404
+ if (notice !== null) {
405
+ _print(out);
406
+ _print(out, notice);
407
+ }
370
408
  _print(
371
409
  out,
372
410
  'Rollback hint: a removed Claude Code plugin can be reinstalled with\n' +
@@ -2,8 +2,8 @@
2
2
  /**
3
3
  * `agent-config doctor` — install + manifest health report (TypeScript twin).
4
4
  *
5
- * TypeScript twin of `src/scripts/_cli/cmd_doctor.py` (ADR-200, py2ts
6
- * migration). The CLI contract mirrors the Python original EXACTLY — same
5
+ * Ported from the retired Python `src/scripts/_cli/cmd_doctor.py` (ADR-200, py2ts
6
+ * migration). The CLI contract pins the historical contract exactly — same
7
7
  * flags, same exit codes, same stdout/stderr split, byte-identical emitted
8
8
  * report lines (✅/❌/⚠️/⏭️ glyphs, ordering, fix hints), same filesystem
9
9
  * semantics. No behaviour changes — latent quirks are replicated, not fixed.
@@ -731,6 +731,7 @@ const CHECK_IDS = [
731
731
  'scope',
732
732
  'global-binary',
733
733
  'claude-plugin',
734
+ 'claude-command-wrappers',
734
735
  'surface-state',
735
736
  'hook-wiring',
736
737
  'stale-orphans',
@@ -745,6 +746,7 @@ const CHECK_IDS = [
745
746
  'council-cli',
746
747
  'unsupported-combos',
747
748
  'wizard-state',
749
+ 'settings-review-pending',
748
750
  ] as const;
749
751
 
750
752
  /** Checks that need only the project root and run regardless of a lockfile. */
@@ -752,6 +754,7 @@ const GLOBAL_CHECK_IDS: ReadonlySet<string> = new Set([
752
754
  'scope',
753
755
  'global-binary',
754
756
  'claude-plugin',
757
+ 'claude-command-wrappers',
755
758
  'surface-state',
756
759
  'hook-wiring',
757
760
  'stale-orphans',
@@ -762,6 +765,7 @@ const GLOBAL_CHECK_IDS: ReadonlySet<string> = new Set([
762
765
  'tier-usage-readiness',
763
766
  'council-cli',
764
767
  'wizard-state',
768
+ 'settings-review-pending',
765
769
  ]);
766
770
 
767
771
  /** Checks that genuinely cannot run without the project manifest. */
@@ -1077,6 +1081,69 @@ function _check_claude_plugin(): Dict {
1077
1081
  };
1078
1082
  }
1079
1083
 
1084
+ /**
1085
+ * Claude Code flat-command discovery mitigation (council 2026-07-08,
1086
+ * cc-user-command-discovery): Claude Code ≤ 2.1.204 does not register FLAT
1087
+ * user-scope command files (`~/.claude/commands/<name>.md`) — nested
1088
+ * commands and user-scope skills do. The installer therefore projects
1089
+ * tier-0/1 visible flat commands as skill wrappers. This check flags the
1090
+ * silent-failure state: a projection deployed by an OLDER release that
1091
+ * still carries visible flat commands without wrappers (users see
1092
+ * "Unknown command" for /commit etc. with zero error anywhere).
1093
+ * Probe = `commit` (the canonical always-shipped visible flat command);
1094
+ * static file checks only — never a live model call.
1095
+ */
1096
+ function _check_claude_command_wrappers(): Dict {
1097
+ const claude = shutilWhich('claude');
1098
+ if (claude === null) {
1099
+ return {
1100
+ id: 'claude-command-wrappers',
1101
+ status: 'skipped',
1102
+ message: 'Claude Code CLI not on PATH — wrapper check not applicable',
1103
+ remedy: '',
1104
+ };
1105
+ }
1106
+ const anchor = path.join(os.homedir(), '.claude');
1107
+ const commands_dir = path.join(anchor, 'commands');
1108
+ if (!isDir(commands_dir)) {
1109
+ return {
1110
+ id: 'claude-command-wrappers',
1111
+ status: 'skipped',
1112
+ message: 'no ~/.claude/commands projection — nothing to check',
1113
+ remedy: '',
1114
+ };
1115
+ }
1116
+ const flat_probe = fs.existsSync(path.join(commands_dir, 'commit.md'));
1117
+ const wrapper_probe = fs.existsSync(path.join(anchor, 'skills', 'commit', 'SKILL.md'));
1118
+ if (wrapper_probe) {
1119
+ return {
1120
+ id: 'claude-command-wrappers',
1121
+ status: 'ok',
1122
+ message:
1123
+ 'flat-command skill wrappers present (Claude Code flat-command ' +
1124
+ 'discovery workaround active)',
1125
+ remedy: '',
1126
+ };
1127
+ }
1128
+ if (flat_probe) {
1129
+ return {
1130
+ id: 'claude-command-wrappers',
1131
+ status: 'warn',
1132
+ message:
1133
+ 'visible flat commands deployed WITHOUT skill wrappers — Claude Code ' +
1134
+ '\u2264 2.1.204 does not register flat user-scope command files, so ' +
1135
+ '/commit and other visible commands appear as "Unknown command"',
1136
+ remedy: 'agent-config refresh --global (re-deploys with the wrapper projection)',
1137
+ };
1138
+ }
1139
+ return {
1140
+ id: 'claude-command-wrappers',
1141
+ status: 'skipped',
1142
+ message: 'no visible flat commands in the projection — nothing to wrap',
1143
+ remedy: '',
1144
+ };
1145
+ }
1146
+
1080
1147
  /**
1081
1148
  * Matrix-driven duplicate-surface check (road-to-install-path-convergence
1082
1149
  * Phase 2): reads src/config/surface-matrix.yml and flags every tool whose
@@ -1167,6 +1234,7 @@ function pathExistsAny(p: string): boolean {
1167
1234
  }
1168
1235
  }
1169
1236
 
1237
+
1170
1238
  /**
1171
1239
  * Managed hook wiring (single-surface model): the deterministic hook matrix
1172
1240
  * must be registered in ~/.claude/settings.json AND the dispatch target
@@ -1900,6 +1968,43 @@ function _check_wizard_state(): Dict {
1900
1968
  };
1901
1969
  }
1902
1970
 
1971
+ /**
1972
+ * Pending settings-surface review (road-to-settings-change-review): the
1973
+ * installer writes `state/settings-delta.json` when an upgrade changed
1974
+ * defaults / enum vocabularies / added settings. The flag persists until
1975
+ * the user resolves the review form (`agent-config config` → Settings →
1976
+ * banner) — this check keeps it visible in every doctor run.
1977
+ */
1978
+ function _check_settings_review_pending(): Dict {
1979
+ const delta_pth = path.join(user_global_paths.event4u_root(), 'state', 'settings-delta.json');
1980
+ if (!pathExists(delta_pth)) {
1981
+ return {
1982
+ id: 'settings-review-pending',
1983
+ status: 'ok',
1984
+ message: 'no pending settings-surface changes',
1985
+ remedy: '',
1986
+ };
1987
+ }
1988
+ let summary = '';
1989
+ try {
1990
+ const data = JSON.parse(readText0(delta_pth)) as {
1991
+ oldVersion?: string;
1992
+ newVersion?: string;
1993
+ changes?: unknown[];
1994
+ };
1995
+ const n = Array.isArray(data.changes) ? data.changes.length : 0;
1996
+ summary = `${n} change${n === 1 ? '' : 's'} (${data.oldVersion ?? '?'} → ${data.newVersion ?? '?'})`;
1997
+ } catch {
1998
+ summary = 'unreadable delta file';
1999
+ }
2000
+ return {
2001
+ id: 'settings-review-pending',
2002
+ status: 'warn',
2003
+ message: `settings surface changed on upgrade — ${summary} awaiting review`,
2004
+ remedy: 'agent-config config (Settings → “Review changes” banner)',
2005
+ };
2006
+ }
2007
+
1903
2008
  interface JsonDecodeError {
1904
2009
  msg: string;
1905
2010
  lineno: number;
@@ -2008,6 +2113,7 @@ function _run_checks(
2008
2113
  scope: () => _check_scope(project_root),
2009
2114
  'global-binary': () => _check_global_binary(project_root),
2010
2115
  'claude-plugin': _check_claude_plugin,
2116
+ 'claude-command-wrappers': _check_claude_command_wrappers,
2011
2117
  'surface-state': _check_surface_state,
2012
2118
  'hook-wiring': _check_hook_wiring,
2013
2119
  'stale-orphans': _check_stale_orphans,
@@ -2028,6 +2134,7 @@ function _run_checks(
2028
2134
  'council-cli': () => _check_council_cli(project_root),
2029
2135
  'unsupported-combos': () => _check_unsupported_combos(manifest),
2030
2136
  'wizard-state': _check_wizard_state,
2137
+ 'settings-review-pending': _check_settings_review_pending,
2031
2138
  };
2032
2139
  const out: Dict[] = [];
2033
2140
  for (const cid of CHECK_IDS) {
@@ -2082,6 +2189,7 @@ function _run_checks_no_manifest(
2082
2189
  scope: () => _check_scope(project_root),
2083
2190
  'global-binary': () => _check_global_binary(project_root),
2084
2191
  'claude-plugin': _check_claude_plugin,
2192
+ 'claude-command-wrappers': _check_claude_command_wrappers,
2085
2193
  'surface-state': _check_surface_state,
2086
2194
  'hook-wiring': _check_hook_wiring,
2087
2195
  'stale-orphans': _check_stale_orphans,
@@ -2096,6 +2204,7 @@ function _run_checks_no_manifest(
2096
2204
  'council-cli': () => _check_council_cli(project_root),
2097
2205
  'unsupported-combos': () => _skipped_manifest_check('unsupported-combos'),
2098
2206
  'wizard-state': _check_wizard_state,
2207
+ 'settings-review-pending': _check_settings_review_pending,
2099
2208
  };
2100
2209
  const out: Dict[] = [];
2101
2210
  for (const cid of CHECK_IDS) {
@@ -2572,6 +2681,7 @@ export {
2572
2681
  _check_lockfile_freshness,
2573
2682
  _check_global_binary,
2574
2683
  _check_claude_plugin,
2684
+ _check_claude_command_wrappers,
2575
2685
  _check_bridge_drift,
2576
2686
  _check_mcp_mode,
2577
2687
  _check_offline_readiness,
@@ -2582,6 +2692,7 @@ export {
2582
2692
  _check_council_cli,
2583
2693
  _check_unsupported_combos,
2584
2694
  _check_wizard_state,
2695
+ _check_settings_review_pending,
2585
2696
  _run_checks,
2586
2697
  _skipped_manifest_check,
2587
2698
  _check_bridge_drift_no_manifest,
@@ -3,8 +3,8 @@
3
3
  * `agent-config explain` — print the decision chain behind an outcome
4
4
  * (TypeScript twin).
5
5
  *
6
- * TypeScript twin of `src/scripts/_cli/cmd_explain.py` (ADR-200, py2ts
7
- * migration). The CLI contract mirrors the Python original EXACTLY — same
6
+ * Ported from the retired Python `src/scripts/_cli/cmd_explain.py` (ADR-200, py2ts
7
+ * migration). The CLI contract pins the historical contract exactly — same
8
8
  * flags, same exit codes, same stdout/stderr split, byte-identical emitted
9
9
  * output. No behaviour changes — latent quirks are replicated, not fixed.
10
10
  *
@@ -2,8 +2,8 @@
2
2
  * `agent-config export` — eject a tool's canonical content into the project
3
3
  * (TypeScript twin).
4
4
  *
5
- * TypeScript twin of `src/scripts/_cli/cmd_export.py` (ADR-200, py2ts
6
- * migration). The CLI contract mirrors the Python original EXACTLY — same
5
+ * Ported from the retired Python `src/scripts/_cli/cmd_export.py` (ADR-200, py2ts
6
+ * migration). The CLI contract pins the historical contract exactly — same
7
7
  * flags, same exit codes, same stdout/stderr split, byte-identical emitted
8
8
  * output, same filesystem effects. No behaviour changes; latent quirks are
9
9
  * replicated and flagged inline, not fixed.
@@ -19,7 +19,7 @@
19
19
  * and never calls `process.exit()`. argparse usage errors throw
20
20
  * `ArgparseExit(2)`; `-h`/`--help` throws `ArgparseExit(0)`.
21
21
  * - The 9 marker constants and templates resolve to the same byte content as
22
- * the Python originals: marker constants are re-exported from the
22
+ * the retired Python implementations: marker constants are re-exported from the
23
23
  * `install.ts` twin (single source of truth); templates are read from
24
24
  * `dist/agent-src/templates` via `_from_template` exactly as Python does.
25
25
  * - `hashlib.sha256(content.encode("utf-8")).hexdigest()` →
@@ -43,7 +43,19 @@ export interface FleetRepo {
43
43
  readonly tools?: string;
44
44
  }
45
45
 
46
- /** Parsed fleet config. */
46
+ /**
47
+ * Parsed fleet config.
48
+ *
49
+ * INPUT-SCHEMA STABILITY: **stable, v1** (marked 2026-07-08,
50
+ * road-to-truth-and-reference-hygiene P3 — the output report was versioned
51
+ * from day one via {@link FleetReport.schema_version}; the input contract
52
+ * deserves the same explicitness). The accepted `fleet.yaml` shape is
53
+ * `repos: [<path-string> | {path, tools?}]` + optional `max_concurrency`;
54
+ * unknown keys are IGNORED (tolerant reader — forward-compatible by
55
+ * construction). Additive optional keys bump nothing; a breaking key
56
+ * rename/removal or semantics change requires an explicit `schema_version`
57
+ * field in the input and a reader that accepts the versionless v1 form.
58
+ */
47
59
  export interface FleetSpec {
48
60
  readonly repos: readonly FleetRepo[];
49
61
  readonly maxConcurrency: number;
@@ -2,8 +2,8 @@
2
2
  * `agent-config migrate` — one-shot, opinionated migration off every legacy
3
3
  * install / state shape (TypeScript twin).
4
4
  *
5
- * TypeScript twin of `src/scripts/_cli/cmd_migrate.py` (ADR-200, py2ts
6
- * migration). The CLI contract mirrors the Python original EXACTLY — same
5
+ * Ported from the retired Python `src/scripts/_cli/cmd_migrate.py` (ADR-200, py2ts
6
+ * migration). The CLI contract pins the historical contract exactly — same
7
7
  * flags, same exit codes, same stdout/stderr split, byte-identical emitted
8
8
  * output, same filesystem effects. No behaviour changes — latent quirks are
9
9
  * replicated and flagged inline, not fixed.
@@ -82,7 +82,7 @@ import { resolve_project_root } from '../_lib/agent_settings.js';
82
82
  // specifier into the uncompiled template tree (`.ts` only) and crash the whole
83
83
  // CLI at module load — breaking every command (e.g. `agent-config init`).
84
84
  // `_load_state_migrator` spawns it via tsx instead (the install orchestrator
85
- // pattern), keeping the migrator lazy like the Python original.
85
+ // pattern), keeping the migrator lazy like the retired Python implementation.
86
86
 
87
87
  const PACKAGE_NAME_NPM = '@event4u/agent-config';
88
88
  const PACKAGE_NAME_COMPOSER = 'event4u/agent-config';
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * `agent-config prune` — remove orphaned project bridge markers (TypeScript twin).
3
3
  *
4
- * TypeScript twin of `src/scripts/_cli/cmd_prune.py` (ADR-200, py2ts
5
- * migration). The CLI contract mirrors the Python original EXACTLY — same
4
+ * Ported from the retired Python `src/scripts/_cli/cmd_prune.py` (ADR-200, py2ts
5
+ * migration). The CLI contract pins the historical contract exactly — same
6
6
  * flags, same exit codes, same stdout/stderr split, byte-identical emitted
7
7
  * output, same filesystem effects. No behaviour changes — latent quirks are
8
8
  * replicated and flagged inline, not fixed.
@@ -3,8 +3,8 @@
3
3
  * `agent-config refresh` — idempotent re-install, no version change
4
4
  * (TypeScript twin).
5
5
  *
6
- * TypeScript twin of `src/scripts/_cli/cmd_refresh.py` (ADR-200, py2ts
7
- * migration). The CLI contract mirrors the Python original EXACTLY — same
6
+ * Ported from the retired Python `src/scripts/_cli/cmd_refresh.py` (ADR-200, py2ts
7
+ * migration). The CLI contract pins the historical contract exactly — same
8
8
  * flags, same exit codes, same stdout/stderr split, byte-identical emitted
9
9
  * output, same filesystem effects, same subprocess argv/cwd/env. No behaviour
10
10
  * changes — latent quirks are replicated and flagged inline, not fixed.
@@ -145,7 +145,7 @@ const CONSUMER_BRIDGE_MARKER_RELPATH = path.join('agents', '.event4u-bridge.yml'
145
145
  * agent-config package source tree. Shared by the bridge-marker writer guard
146
146
  * and the `_is_source_repo` monorepo probe so the literal lives in one place
147
147
  * (the only other textual mention is the `_is_source_repo` docstring, matching
148
- * the Python original's two occurrences for the ADR-051 path-count parity).
148
+ * the retired Python implementation's two occurrences for the ADR-051 path-count parity).
149
149
  */
150
150
  const SRC_MARKER_DIR = '.agent-src.uncondensed';
151
151
 
@@ -215,7 +215,7 @@ function atomicWrite0644(target: string, body: string, prefix: string): void {
215
215
  }
216
216
 
217
217
  /**
218
- * Twin of `install._write_consumer_bridge_marker` (module-private). Returns the
218
+ * Mirrors `install._write_consumer_bridge_marker` (module-private). Returns the
219
219
  * written path, or `null` when skipped (dev mode / source repo).
220
220
  */
221
221
  function _write_consumer_bridge_marker(
@@ -2,8 +2,8 @@
2
2
  * `agent-config settings:check` — validate `.agent-settings.yml` against the
3
3
  * supported YAML subset (TypeScript twin).
4
4
  *
5
- * TypeScript twin of `src/scripts/_cli/cmd_settings_check.py` (ADR-200, py2ts
6
- * migration). The CLI contract mirrors the Python original EXACTLY — same
5
+ * Ported from the retired Python `src/scripts/_cli/cmd_settings_check.py` (ADR-200, py2ts
6
+ * migration). The CLI contract pins the historical contract exactly — same
7
7
  * flags, same exit codes, same stdout/stderr split, byte-identical emitted
8
8
  * output. Read-only — no filesystem mutation, no network. No behaviour
9
9
  * changes; latent quirks are replicated and flagged inline, not fixed.
@@ -2,8 +2,8 @@
2
2
  * `agent-config settings:migrate` — lift project-local settings into the
3
3
  * global store (TypeScript twin).
4
4
  *
5
- * TypeScript twin of `src/scripts/_cli/cmd_settings_migrate.py` (ADR-200,
6
- * py2ts migration). The CLI contract mirrors the Python original EXACTLY —
5
+ * Ported from the retired Python `src/scripts/_cli/cmd_settings_migrate.py` (ADR-200,
6
+ * py2ts migration). The CLI contract pins the historical contract exactly —
7
7
  * same flags, same exit codes, same stdout/stderr split, byte-identical
8
8
  * emitted output, same filesystem effects. No behaviour changes; latent quirks
9
9
  * are replicated and flagged inline, not fixed.
@@ -2,8 +2,8 @@
2
2
  * `agent-config sync` — replay the installed-tools manifest (ADR-008)
3
3
  * (TypeScript twin).
4
4
  *
5
- * TypeScript twin of `src/scripts/_cli/cmd_sync.py` (ADR-200, py2ts
6
- * migration). The CLI contract mirrors the Python original EXACTLY — same
5
+ * Ported from the retired Python `src/scripts/_cli/cmd_sync.py` (ADR-200, py2ts
6
+ * migration). The CLI contract pins the historical contract exactly — same
7
7
  * flags, same exit codes, same stdout/stderr split, byte-identical emitted
8
8
  * output, same installer invocation. No behaviour changes; latent quirks are
9
9
  * replicated and flagged inline, not fixed.
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * `agent-config uninstall` — remove bridge markers (Phase 4.1) (TypeScript twin).
3
3
  *
4
- * TypeScript twin of `src/scripts/_cli/cmd_uninstall.py` (ADR-200, py2ts
5
- * migration). The CLI contract mirrors the Python original EXACTLY — same
4
+ * Ported from the retired Python `src/scripts/_cli/cmd_uninstall.py` (ADR-200, py2ts
5
+ * migration). The CLI contract pins the historical contract exactly — same
6
6
  * flags, same exit codes, same stdout/stderr split, byte-identical emitted
7
7
  * output, same filesystem effects. No behaviour changes — latent quirks are
8
8
  * replicated and flagged inline, not fixed.
@@ -2,8 +2,8 @@
2
2
  * `agent-config update` — explicit, opt-in update of the version pin
3
3
  * (TypeScript twin).
4
4
  *
5
- * TypeScript twin of `src/scripts/_cli/cmd_update.py` (ADR-200, py2ts
6
- * migration). The CLI contract mirrors the Python original EXACTLY — same
5
+ * Ported from the retired Python `src/scripts/_cli/cmd_update.py` (ADR-200, py2ts
6
+ * migration). The CLI contract pins the historical contract exactly — same
7
7
  * flags, same exit codes, same stdout/stderr split, byte-identical emitted
8
8
  * output, same filesystem effects, same subprocess argv/cwd/env. No behaviour
9
9
  * changes — latent quirks are replicated and flagged inline, not fixed.
@@ -140,23 +140,23 @@ function _splitlinesKeepends(text: string): string[] {
140
140
  // Replicated module-private helpers (see header parity note)
141
141
  // ---------------------------------------------------------------------------
142
142
 
143
- /** Twin of `agent_settings._canonical_settings_path` (file-local private). */
143
+ /** Mirrors `agent_settings._canonical_settings_path` (file-local private). */
144
144
  function _canonical_settings_path(project_root: string): string {
145
145
  return path.join(project_root, ...LOCAL_PROJECT_SUBDIR, DEFAULT_PROJECT_FILE);
146
146
  }
147
147
 
148
- /** Twin of `agent_settings._local_settings_path` (file-local private). */
148
+ /** Mirrors `agent_settings._local_settings_path` (file-local private). */
149
149
  function _local_settings_path(project_root: string): string {
150
150
  return path.join(project_root, ...LOCAL_PROJECT_SUBDIR, LOCAL_PROJECT_FILE);
151
151
  }
152
152
 
153
- /** Twin of `agent_settings._resolve` — absolute, normalised path. */
153
+ /** Mirrors `agent_settings._resolve` — absolute, normalised path. */
154
154
  function _resolve(p: string): string {
155
155
  return path.resolve(p);
156
156
  }
157
157
 
158
158
  /**
159
- * Twin of `agent_settings._resolve_cascade_paths` (file-local private).
159
+ * Mirrors `agent_settings._resolve_cascade_paths` (file-local private).
160
160
  *
161
161
  * Returns the ordered cascade of in-project settings files (shallow → deep).
162
162
  */
@@ -199,7 +199,7 @@ function _resolve_cascade_paths(cwd: string | null, project_path: string | null)
199
199
  return out;
200
200
  }
201
201
 
202
- /** Twin of `update_check._read_state` (module-private). */
202
+ /** Mirrors `update_check._read_state` (module-private). */
203
203
  function _read_state(state_path: string): Record<string, unknown> {
204
204
  try {
205
205
  const raw = fs.readFileSync(state_path, 'utf-8');
@@ -213,7 +213,7 @@ function _read_state(state_path: string): Record<string, unknown> {
213
213
  return {};
214
214
  }
215
215
 
216
- /** Twin of `update_check._write_state` (module-private). */
216
+ /** Mirrors `update_check._write_state` (module-private). */
217
217
  function _write_state(state_path: string, payload: Record<string, unknown>): void {
218
218
  const parent = path.dirname(state_path);
219
219
  fs.mkdirSync(parent, { recursive: true });
@@ -3,8 +3,8 @@
3
3
  * `agent-config upgrade` — fetch + install the latest global binary + refresh
4
4
  * (TypeScript twin).
5
5
  *
6
- * TypeScript twin of `src/scripts/_cli/cmd_upgrade.py` (ADR-200, py2ts
7
- * migration). The CLI contract mirrors the Python original EXACTLY — same
6
+ * Ported from the retired Python `src/scripts/_cli/cmd_upgrade.py` (ADR-200, py2ts
7
+ * migration). The CLI contract pins the historical contract exactly — same
8
8
  * flags, same exit codes, same stdout/stderr split, byte-identical emitted
9
9
  * output, same filesystem effects, same subprocess argv/cwd/env. No behaviour
10
10
  * changes — latent quirks are replicated and flagged inline, not fixed.
@@ -644,7 +644,8 @@ export async function main(argv: string[] | null = null, options: MainOptions =
644
644
  _print(
645
645
  out,
646
646
  '✅ agent-config upgraded' +
647
- (doctor_rc === 0 ? ' — doctor green.' : ' — review the doctor findings above.'),
647
+ (doctor_rc === 0 ? ' — doctor green.' : ' — review the doctor findings above.') +
648
+ ' Tune settings any time with `agent-config config`.',
648
649
  );
649
650
  return 0;
650
651
  }
@@ -3,8 +3,8 @@
3
3
  * `agent-config validate` — drift detection for the installed-tools manifest
4
4
  * (TypeScript twin).
5
5
  *
6
- * TypeScript twin of `src/scripts/_cli/cmd_validate.py` (ADR-200, py2ts
7
- * migration). The CLI contract mirrors the Python original EXACTLY — same
6
+ * Ported from the retired Python `src/scripts/_cli/cmd_validate.py` (ADR-200, py2ts
7
+ * migration). The CLI contract pins the historical contract exactly — same
8
8
  * flags, same exit codes, same stdout/stderr split, byte-identical emitted
9
9
  * output, same filesystem semantics. No behaviour changes — latent quirks are
10
10
  * replicated, not fixed.
@@ -77,7 +77,7 @@ class ArgparseExit extends Error {
77
77
  /**
78
78
  * `pathlib.Path(p)` string form — collapse repeated separators and strip a
79
79
  * trailing separator (Python `str(Path("~/.cursor/"))` → `~/.cursor`), keeping
80
- * a lone root `/`. Mirrors how the Python original wraps every marker/anchor in
80
+ * a lone root `/`. Mirrors how the retired Python implementation wraps every marker/anchor in
81
81
  * `Path(...)` before `str()`-ing it into a message.
82
82
  */
83
83
  function pyPathStr(p: string): string {
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * `agent-config versions` — list available package versions (TypeScript twin).
3
3
  *
4
- * TypeScript twin of `src/scripts/_cli/cmd_versions.py` (ADR-200, py2ts
5
- * migration). The CLI contract mirrors the Python original EXACTLY — same
4
+ * Ported from the retired Python `src/scripts/_cli/cmd_versions.py` (ADR-200, py2ts
5
+ * migration). The CLI contract pins the historical contract exactly — same
6
6
  * flags, same exit codes, same stdout/stderr split, byte-identical emitted
7
7
  * output, same subprocess invocation. Read-only (queries npm; never mutates).
8
8
  * No behaviour changes; latent quirks are replicated and flagged inline.