@event4u/agent-config 8.1.0 → 8.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +3 -3
- package/CHANGELOG.md +83 -292
- package/MIGRATION.md +18 -0
- package/README.md +86 -3
- package/dist/agent-src/commands/agents/init.md +3 -3
- package/dist/agent-src/commands/chat-history/import.md +5 -5
- package/dist/agent-src/commands/chat-history.md +1 -1
- package/dist/agent-src/commands/condense.md +1 -1
- package/dist/agent-src/commands/context/create.md +1 -1
- package/dist/agent-src/commands/council/analysis.md +2 -2
- package/dist/agent-src/commands/council/default.md +3 -3
- package/dist/agent-src/commands/council/design.md +2 -2
- package/dist/agent-src/commands/council/optimize.md +1 -1
- package/dist/agent-src/commands/council/pr.md +2 -2
- package/dist/agent-src/commands/council.md +1 -1
- package/dist/agent-src/commands/feature/plan.md +1 -1
- package/dist/agent-src/commands/ghostwriter/list.md +1 -1
- package/dist/agent-src/commands/ghostwriter/write.md +1 -1
- package/dist/agent-src/commands/ghostwriter.md +1 -1
- package/dist/agent-src/commands/implement-ticket.md +2 -2
- package/dist/agent-src/commands/judge/on-diff.md +1 -1
- package/dist/agent-src/commands/judge/steps.md +3 -1
- package/dist/agent-src/commands/memory/add.md +2 -2
- package/dist/agent-src/commands/memory/learn-low-impact.md +1 -1
- package/dist/agent-src/commands/memory/load.md +1 -1
- package/dist/agent-src/commands/memory/mine-session.md +1 -1
- package/dist/agent-src/commands/memory/promote.md +1 -1
- package/dist/agent-src/commands/memory/propose.md +1 -1
- package/dist/agent-src/commands/mission/upgrade.md +1 -1
- package/dist/agent-src/commands/module/explore.md +3 -3
- package/dist/agent-src/commands/optimize/agents-dir.md +1 -1
- package/dist/agent-src/commands/optimize/skills.md +1 -1
- package/dist/agent-src/commands/optimize-project.md +1 -1
- package/dist/agent-src/commands/orchestrate.md +2 -2
- package/dist/agent-src/commands/project-analyze.md +1 -1
- package/dist/agent-src/commands/project-health.md +1 -1
- package/dist/agent-src/commands/roadmap/ai-council.md +1 -1
- package/dist/agent-src/commands/roadmap/create.md +2 -2
- package/dist/agent-src/commands/roadmap/process-full.md +3 -1
- package/dist/agent-src/commands/roadmap/process-phase.md +4 -2
- package/dist/agent-src/commands/roadmap/process-step.md +3 -1
- package/dist/agent-src/commands/security-audit-config.md +1 -1
- package/dist/agent-src/commands/sync-agent-settings.md +7 -7
- package/dist/agent-src/commands/sync-gitignore/fix.md +3 -3
- package/dist/agent-src/commands/sync-gitignore.md +4 -4
- package/dist/agent-src/commands/work.md +3 -3
- package/dist/agent-src/contexts/communication/rules-auto/skill-quality-mechanics.md +1 -1
- package/dist/agent-src/contexts/communication/rules-auto/slash-command-routing-policy-mechanics.md +2 -2
- package/dist/agent-src/contexts/contracts/artifact-engagement-flow.md +1 -1
- package/dist/agent-src/contexts/contracts/command-suggestion-flow.md +8 -7
- package/dist/agent-src/contexts/execution/evidence-discipline.md +2 -2
- package/dist/agent-src/contexts/execution/roadmap-process-loop.md +9 -4
- package/dist/agent-src/contexts/execution/toolchain-resolver.md +10 -9
- package/dist/agent-src/contexts/execution/verification-mechanics.md +13 -1
- package/dist/agent-src/packs/README.md +1 -1
- package/dist/agent-src/presets/README.md +1 -1
- package/dist/agent-src/profiles/README.md +1 -1
- package/dist/agent-src/rules/architecture.md +2 -2
- package/dist/agent-src/rules/context-hygiene.md +2 -2
- package/dist/agent-src/rules/fast-path-marker-visibility.md +1 -1
- package/dist/agent-src/rules/framework-neutrality-in-generic-skills.md +1 -1
- package/dist/agent-src/rules/linked-projects-onboarding-gate.md +1 -1
- package/dist/agent-src/rules/low-impact-corpus-privacy-floor.md +3 -3
- package/dist/agent-src/rules/media-governance-routing.md +1 -1
- package/dist/agent-src/rules/no-roadmap-references.md +3 -3
- package/dist/agent-src/rules/preservation-guard.md +2 -2
- package/dist/agent-src/rules/roadmap-ci-steps-policy.md +6 -5
- package/dist/agent-src/rules/roadmap-progress-sync.md +3 -3
- package/dist/agent-src/rules/security-sensitive-stop.md +7 -9
- package/dist/agent-src/rules/source-confidentiality.md +1 -1
- package/dist/agent-src/rules/telegraph-speak.md +1 -1
- package/dist/agent-src/rules/token-optimizer-maintenance.md +1 -1
- package/dist/agent-src/rules/ui-audit-gate.md +1 -1
- package/dist/agent-src/scripts/archive_completed_roadmaps.ts +22 -4
- package/dist/agent-src/scripts/update_roadmap_progress.ts +29 -1
- package/dist/agent-src/skills/accessibility-auditor/SKILL.md +3 -2
- package/dist/agent-src/skills/adr-create/SKILL.md +8 -6
- package/dist/agent-src/skills/agent-docs-writing/SKILL.md +1 -1
- package/dist/agent-src/skills/agents-md-thin-root/SKILL.md +2 -2
- package/dist/agent-src/skills/ai-council/SKILL.md +15 -15
- package/dist/agent-src/skills/api-design/SKILL.md +1 -1
- package/dist/agent-src/skills/api-endpoint/SKILL.md +2 -1
- package/dist/agent-src/skills/authz-review/SKILL.md +1 -1
- package/dist/agent-src/skills/blade-ui/SKILL.md +11 -10
- package/dist/agent-src/skills/blameless-post-mortem/SKILL.md +9 -8
- package/dist/agent-src/skills/code-review/SKILL.md +3 -4
- package/dist/agent-src/skills/command-routing/SKILL.md +3 -3
- package/dist/agent-src/skills/command-writing/SKILL.md +3 -3
- package/dist/agent-src/skills/condense-memory/SKILL.md +2 -2
- package/dist/agent-src/skills/context-authoring/SKILL.md +1 -1
- package/dist/agent-src/skills/context-document/SKILL.md +1 -1
- package/dist/agent-src/skills/copilot-agents-optimization/SKILL.md +1 -1
- package/dist/agent-src/skills/corpus-grounding/SKILL.md +16 -11
- package/dist/agent-src/skills/corpus-grounding/scripts/ground.ts +24 -3
- package/dist/agent-src/skills/dashboard-design/SKILL.md +2 -1
- package/dist/agent-src/skills/database/SKILL.md +2 -1
- package/dist/agent-src/skills/description-assist/SKILL.md +6 -6
- package/dist/agent-src/skills/design-intelligence/SKILL.md +6 -5
- package/dist/agent-src/skills/design-tokens/SKILL.md +5 -5
- package/dist/agent-src/skills/design-tokens/scripts/tokens.ts +24 -3
- package/dist/agent-src/skills/existing-ui-audit/SKILL.md +3 -3
- package/dist/agent-src/skills/fe-design/SKILL.md +7 -7
- package/dist/agent-src/skills/finishing-a-development-branch/SKILL.md +11 -4
- package/dist/agent-src/skills/flux/SKILL.md +10 -9
- package/dist/agent-src/skills/git-workflow/SKILL.md +4 -5
- package/dist/agent-src/skills/guideline-writing/SKILL.md +2 -2
- package/dist/agent-src/skills/learning-to-rule-or-skill/SKILL.md +2 -2
- package/dist/agent-src/skills/livewire/SKILL.md +10 -9
- package/dist/agent-src/skills/memory-consolidation/SKILL.md +2 -2
- package/dist/agent-src/skills/module-detect-on-the-fly/SKILL.md +5 -5
- package/dist/agent-src/skills/module-management/SKILL.md +2 -2
- package/dist/agent-src/skills/prediction-pool-optimizer/SKILL.md +11 -11
- package/dist/agent-src/skills/prediction-pool-optimizer/reference/ev-fixtures.md +6 -6
- package/dist/agent-src/skills/prediction-pool-optimizer/reference/odds-and-bonus.md +1 -1
- package/dist/agent-src/skills/premortem/SKILL.md +1 -1
- package/dist/agent-src/skills/project-docs/SKILL.md +1 -1
- package/dist/agent-src/skills/quality-tools/SKILL.md +26 -2
- package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +8 -7
- package/dist/agent-src/skills/react-shadcn-ui/scripts/shadcn_add.ts +31 -10
- package/dist/agent-src/skills/refine-prompt/SKILL.md +14 -14
- package/dist/agent-src/skills/refine-ticket/SKILL.md +24 -25
- package/dist/agent-src/skills/refine-ticket/detection-map.yml +1 -1
- package/dist/agent-src/skills/review-routing/SKILL.md +6 -7
- package/dist/agent-src/skills/roadmap-management/SKILL.md +11 -6
- package/dist/agent-src/skills/rule-refactor/SKILL.md +1 -1
- package/dist/agent-src/skills/rule-writing/SKILL.md +5 -5
- package/dist/agent-src/skills/script-writing/SKILL.md +28 -41
- package/dist/agent-src/skills/skill-writing/SKILL.md +3 -3
- package/dist/agent-src/skills/source-discovery/SKILL.md +3 -3
- package/dist/agent-src/skills/sql-writing/SKILL.md +2 -1
- package/dist/agent-src/skills/subagent-orchestration/SKILL.md +1 -1
- package/dist/agent-src/skills/systematic-debugging/SKILL.md +5 -7
- package/dist/agent-src/skills/tailwind-engineer/SKILL.md +2 -2
- package/dist/agent-src/skills/tailwind-engineer/scripts/tailwind_config_gen.ts +25 -4
- package/dist/agent-src/skills/token-optimizer/SKILL.md +1 -1
- package/dist/agent-src/skills/typography-system/SKILL.md +1 -1
- package/dist/agent-src/skills/validate-feature-fit/SKILL.md +5 -7
- package/dist/agent-src/skills/verify-completion-evidence/SKILL.md +13 -1
- package/dist/agent-src/templates/agent-settings.md +34 -25
- package/dist/agent-src/templates/agents/agent-project-settings.example.yml +3 -3
- package/dist/agent-src/templates/agents/memory/incident-learnings.example.yml +1 -1
- package/dist/agent-src/templates/agents/proposal.example.md +4 -4
- package/dist/agent-src/templates/copilot-instructions.md +1 -1
- package/dist/agent-src/templates/github-workflows/memory-hygiene.yml +10 -10
- package/dist/agent-src/templates/github-workflows/pr-risk-review.yml +19 -8
- package/dist/agent-src/templates/github-workflows/proposal-drift.yml +11 -8
- package/dist/agent-src/templates/github-workflows/roadmap-progress-check.yml +10 -12
- package/dist/agent-src/templates/hooks/pre-commit-frontmatter +21 -11
- package/dist/agent-src/templates/hooks/pre-commit-roadmap-progress +43 -29
- package/dist/agent-src/templates/roadmaps.md +9 -4
- package/dist/agent-src/templates/rule.md +3 -3
- package/dist/agent-src/templates/scripts/README.md +6 -6
- package/dist/agent-src/templates/scripts/check_memory.ts +24 -2
- package/dist/agent-src/templates/scripts/check_memory_proposal.ts +23 -4
- package/dist/agent-src/templates/scripts/historical-bug-patterns.example.yml +1 -1
- package/dist/agent-src/templates/scripts/memory_hash.ts +24 -2
- package/dist/agent-src/templates/scripts/memory_lookup.ts +24 -2
- package/dist/agent-src/templates/scripts/memory_report.ts +24 -2
- package/dist/agent-src/templates/scripts/memory_signal.ts +24 -2
- package/dist/agent-src/templates/scripts/memory_status.ts +26 -2
- package/dist/agent-src/templates/scripts/ownership-map.example.yml +1 -1
- package/dist/agent-src/templates/scripts/pr-risk-config.example.yml +1 -1
- package/dist/agent-src/templates/scripts/pr_review_routing.ts +24 -3
- package/dist/agent-src/templates/scripts/pr_risk_review.ts +0 -0
- package/dist/agent-src/templates/scripts/telemetry_record.ts +24 -3
- package/dist/agent-src/templates/scripts/telemetry_report.ts +25 -3
- package/dist/agent-src/templates/scripts/telemetry_status.ts +24 -3
- package/dist/agent-src/templates/scripts/tier_usage_report.ts +24 -2
- package/dist/agent-src/templates/scripts/work_engine/_lib/agent_settings.ts +44 -10
- package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/_chat_history_base.ts +26 -13
- package/dist/agent-src/templates/skill.md +2 -2
- package/dist/cli/python/knowledge_ingest.js +24 -3
- package/dist/cli/python/knowledge_ingest.js.map +1 -1
- package/dist/cli/python/workspace_analytics.js +23 -3
- package/dist/cli/python/workspace_analytics.js.map +1 -1
- package/dist/cli/python/workspace_crypto.js +23 -3
- package/dist/cli/python/workspace_crypto.js.map +1 -1
- package/dist/cli/python/workspace_documents.js +23 -3
- package/dist/cli/python/workspace_documents.js.map +1 -1
- package/dist/cli/python/workspace_drive.js +24 -3
- package/dist/cli/python/workspace_drive.js.map +1 -1
- package/dist/cli/python/workspace_drive_health.js +23 -3
- package/dist/cli/python/workspace_drive_health.js.map +1 -1
- package/dist/cli/python/workspace_explain.js +23 -3
- package/dist/cli/python/workspace_explain.js.map +1 -1
- package/dist/cli/python/workspace_hosts.js +23 -3
- package/dist/cli/python/workspace_hosts.js.map +1 -1
- package/dist/cli/python/workspace_inbox.js +23 -3
- package/dist/cli/python/workspace_inbox.js.map +1 -1
- package/dist/cli/python/workspace_render.js +23 -3
- package/dist/cli/python/workspace_render.js.map +1 -1
- package/dist/cli/python/workspace_roles.js +23 -3
- package/dist/cli/python/workspace_roles.js.map +1 -1
- package/dist/cli/python/workspace_sessions.js +23 -3
- package/dist/cli/python/workspace_sessions.js.map +1 -1
- package/dist/cli/python/workspace_skills.js +23 -3
- package/dist/cli/python/workspace_skills.js.map +1 -1
- package/dist/cli/registry.js +2 -0
- package/dist/cli/registry.js.map +1 -1
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +118 -118
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +2 -2
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +3 -3
- package/dist/discovery/trust-report.md +1 -1
- package/dist/discovery/workspaces.json +3 -3
- package/dist/install/install.mjs +647 -408
- package/dist/mcp/registry-manifest.json +3 -3
- package/dist/server/routes/settings.js +4 -4
- package/dist/server/routes/settings.js.map +1 -1
- package/dist/server/schemas/settings.js +1 -1
- package/dist/server/schemas/settings.js.map +1 -1
- package/docs/CLAIMS.md +2 -2
- package/docs/archive/CHANGELOG-pre-8.1.0.md +316 -0
- package/docs/benchmark.md +40 -0
- package/docs/contracts/CHANGELOG-conventions.md +8 -5
- package/docs/contracts/branch-protection-policy.md +14 -5
- package/docs/contracts/mcp-phase-1-scope.md +75 -0
- package/docs/contracts/mcp-tool-inventory.md +22 -15
- package/docs/contracts/release-pr-gating.md +22 -11
- package/docs/contracts/skill-bundled-assets.md +2 -2
- package/docs/customization.md +1 -1
- package/docs/decisions/ADR-110-discipline-profile-resolution-locus.md +9 -4
- package/docs/decisions/ADR-111-canonical-glama-listing.md +97 -0
- package/docs/decisions/ADR-112-stdio-lite-stays-read-only.md +92 -0
- package/docs/decisions/ADR-113-ci-native-release-label-trigger.md +201 -0
- package/docs/decisions/INDEX.md +3 -0
- package/docs/distribution/registry-submissions.md +1 -1
- package/docs/getting-started.md +8 -6
- package/docs/guidelines/agent-infra/corpus-grounding-authoring.md +2 -2
- package/docs/guidelines/agent-infra/engineering-memory-data-format.md +4 -4
- package/docs/guidelines/agent-infra/installed-tools-manifest.md +3 -3
- package/docs/guidelines/agent-infra/language-and-tone-examples.md +2 -2
- package/docs/guidelines/agent-infra/layered-settings.md +4 -4
- package/docs/guidelines/agent-infra/memory-access.md +19 -18
- package/docs/guidelines/agent-infra/naming.md +1 -1
- package/docs/guidelines/agent-infra/roadmap-progress-mechanics.md +5 -5
- package/docs/guidelines/agent-infra/role-contracts.md +1 -1
- package/docs/guidelines/agent-infra/security-lint-containment.md +2 -2
- package/docs/guidelines/agent-infra/self-improvement-pipeline.md +1 -1
- package/docs/guidelines/agent-infra/size-and-scope.md +1 -1
- package/docs/guidelines/agent-infra/skill-quality-checklist.md +5 -5
- package/docs/guidelines/augment-portability-patterns.md +1 -1
- package/docs/installation.md +13 -14
- package/docs/mcp-server.md +32 -20
- package/docs/proof.md +1 -1
- package/docs/setup/mcp-cloud-endpoints.md +9 -2
- package/docs/setup/per-ide/claude-code.md +10 -4
- package/package.json +4 -3
- package/src/config/agent-settings.template.yml +31 -17
- package/src/config/host-capabilities.yml +25 -16
- package/src/config/profiles/balanced.ini +5 -3
- package/src/scripts/_cli/cmd_analyze_session.ts +23 -4
- package/src/scripts/_cli/cmd_conformance.ts +23 -4
- package/src/scripts/_cli/cmd_doctor.ts +196 -8
- package/src/scripts/_cli/cmd_explain.ts +23 -4
- package/src/scripts/_cli/cmd_export.ts +23 -4
- package/src/scripts/_cli/cmd_fleet.ts +23 -4
- package/src/scripts/_cli/cmd_migrate.ts +23 -4
- package/src/scripts/_cli/cmd_preflight.ts +24 -4
- package/src/scripts/_cli/cmd_prune.ts +23 -4
- package/src/scripts/_cli/cmd_refresh.ts +23 -4
- package/src/scripts/_cli/cmd_settings_check.ts +23 -4
- package/src/scripts/_cli/cmd_settings_migrate.ts +23 -4
- package/src/scripts/_cli/cmd_sync.ts +23 -4
- package/src/scripts/_cli/cmd_uninstall.ts +45 -4
- package/src/scripts/_cli/cmd_update.ts +23 -4
- package/src/scripts/_cli/cmd_upgrade.ts +307 -17
- package/src/scripts/_cli/cmd_validate.ts +23 -4
- package/src/scripts/_cli/cmd_versions.ts +23 -4
- package/src/scripts/_dispatch.bash +62 -19
- package/src/scripts/_lib/claude_plugin.ts +83 -0
- package/src/scripts/_lib/claude_settings_hooks.ts +251 -0
- package/src/scripts/_lib/knowledge_global.ts +24 -2
- package/src/scripts/_lib/knowledge_global_promote.ts +24 -2
- package/src/scripts/_lib/knowledge_global_redaction.ts +24 -2
- package/src/scripts/_lib/link_crypto.ts +24 -5
- package/src/scripts/_lib/pin_resolver.ts +24 -3
- package/src/scripts/adoption_report.ts +23 -4
- package/src/scripts/adoption_snapshot.ts +23 -1
- package/src/scripts/adoption_status.ts +23 -4
- package/src/scripts/adr/regenerate_index.ts +24 -3
- package/src/scripts/ai_council/airgap.ts +25 -2
- package/src/scripts/ai_council/compile_corpus.ts +24 -2
- package/src/scripts/ai_council/pricing.ts +11 -1
- package/src/scripts/analysis_freshness.ts +23 -4
- package/src/scripts/annotate_discovery.ts +23 -1
- package/src/scripts/apply_modules_config.ts +23 -4
- package/src/scripts/audit_adr_coverage.ts +23 -4
- package/src/scripts/audit_auto_rules.ts +23 -1
- package/src/scripts/audit_cloud_compatibility.ts +23 -4
- package/src/scripts/audit_command_surface.ts +23 -4
- package/src/scripts/audit_initial_context.ts +23 -3
- package/src/scripts/audit_likelihood.ts +23 -1
- package/src/scripts/audit_mcp_tools.ts +23 -3
- package/src/scripts/audit_overlap.ts +23 -1
- package/src/scripts/audit_skill_descriptions.ts +24 -2
- package/src/scripts/audit_skill_overlap.ts +23 -1
- package/src/scripts/audit_user_type_axis.ts +23 -4
- package/src/scripts/backfill_model_tier.ts +23 -4
- package/src/scripts/bench_ab_cache_dispatch.ts +23 -1
- package/src/scripts/bench_ab_clone.ts +23 -1
- package/src/scripts/bench_ab_diff.ts +23 -1
- package/src/scripts/bench_ab_integrity.ts +23 -1
- package/src/scripts/bench_ab_run.ts +23 -2
- package/src/scripts/bench_ab_task_runner.ts +23 -1
- package/src/scripts/bench_ab_tracka_run.ts +23 -2
- package/src/scripts/bench_ab_v2_run.ts +23 -1
- package/src/scripts/bench_ab_v2_stats.ts +23 -1
- package/src/scripts/bench_baseline_ready.ts +23 -1
- package/src/scripts/bench_condense_memory.ts +23 -1
- package/src/scripts/bench_drift_check.ts +23 -2
- package/src/scripts/bench_matrix.ts +23 -4
- package/src/scripts/bench_per_tool.ts +23 -1
- package/src/scripts/bench_quality_run.ts +23 -2
- package/src/scripts/bench_rtk_savings.ts +23 -1
- package/src/scripts/bench_rule_load_latency.ts +23 -2
- package/src/scripts/bench_run.ts +23 -2
- package/src/scripts/bench_runner.ts +23 -1
- package/src/scripts/build_cloud_bundle.ts +23 -3
- package/src/scripts/build_discovery_manifest.ts +23 -4
- package/src/scripts/build_linear_digest.ts +23 -3
- package/src/scripts/build_mcp_registry_manifest.ts +23 -4
- package/src/scripts/build_rule_trigger_matrix.ts +23 -4
- package/src/scripts/capture_showcase_session.ts +23 -1
- package/src/scripts/chat_history.ts +24 -3
- package/src/scripts/check_always_budget.ts +23 -2
- package/src/scripts/check_artefact_checksums.ts +23 -4
- package/src/scripts/check_augment_description_cap.ts +23 -4
- package/src/scripts/check_augmentignore.ts +23 -4
- package/src/scripts/check_beta_review_markers.ts +23 -4
- package/src/scripts/check_cluster_patterns.ts +23 -4
- package/src/scripts/check_command_count_messaging.ts +23 -4
- package/src/scripts/check_comparison.ts +23 -1
- package/src/scripts/check_condensation.ts +24 -3
- package/src/scripts/check_condensed_paths.ts +23 -2
- package/src/scripts/check_context_paths.ts +23 -4
- package/src/scripts/check_council_config_location.ts +23 -4
- package/src/scripts/check_council_layout.ts +23 -4
- package/src/scripts/check_council_references.ts +23 -4
- package/src/scripts/check_discovery_determinism.ts +24 -4
- package/src/scripts/check_gate_paths.ts +23 -4
- package/src/scripts/check_generated_artefact_headers.ts +23 -4
- package/src/scripts/check_generator_output_coverage.ts +23 -4
- package/src/scripts/check_gitignore_freshness.ts +23 -4
- package/src/scripts/check_iron_law_prominence.ts +23 -4
- package/src/scripts/check_kernel_prefix_stability.ts +0 -0
- package/src/scripts/check_kernel_rule_bundle.ts +23 -4
- package/src/scripts/check_knowledge_cards.ts +23 -1
- package/src/scripts/check_md_language.ts +23 -4
- package/src/scripts/check_media_deps.ts +24 -1
- package/src/scripts/check_memory.ts +24 -2
- package/src/scripts/check_memory_proposal.ts +23 -4
- package/src/scripts/check_module_management_neutral.ts +23 -4
- package/src/scripts/check_no_conflict_markers.ts +23 -4
- package/src/scripts/check_no_external_sources.ts +23 -4
- package/src/scripts/check_no_local_settings_committed.ts +24 -4
- package/src/scripts/check_no_new_legacy_path.ts +23 -4
- package/src/scripts/check_no_roadmap_refs.ts +23 -4
- package/src/scripts/check_one_off_location.ts +23 -4
- package/src/scripts/check_overlay_cascade_subdirs.ts +23 -4
- package/src/scripts/check_portability.ts +24 -3
- package/src/scripts/check_proposal.ts +0 -0
- package/src/scripts/check_public_catalog_links.ts +23 -4
- package/src/scripts/check_public_links.ts +23 -4
- package/src/scripts/check_quality_regression.ts +23 -2
- package/src/scripts/check_references.ts +23 -4
- package/src/scripts/check_release_includes_discovery.ts +23 -4
- package/src/scripts/check_release_pr_shape.ts +23 -4
- package/src/scripts/check_release_published.ts +23 -4
- package/src/scripts/check_release_trunk_sync.ts +23 -4
- package/src/scripts/check_reply_consistency.ts +23 -4
- package/src/scripts/check_roadmap_trackable.ts +23 -4
- package/src/scripts/check_role_doc_links.ts +23 -4
- package/src/scripts/check_safety_floor_untouched.ts +24 -4
- package/src/scripts/check_site_links.ts +23 -1
- package/src/scripts/check_skill_gaps.ts +23 -1
- package/src/scripts/check_skill_requires.ts +23 -4
- package/src/scripts/check_structural_breaking.ts +24 -4
- package/src/scripts/check_surface_tiers.ts +23 -4
- package/src/scripts/check_template_pin_drift.ts +23 -4
- package/src/scripts/check_test_coverage_diff.ts +23 -4
- package/src/scripts/check_token_optimizer_freshness.ts +23 -4
- package/src/scripts/check_token_quality_golden.ts +23 -2
- package/src/scripts/check_token_regression.ts +23 -2
- package/src/scripts/check_tracked_but_ignored.ts +24 -4
- package/src/scripts/check_trigger_evals.ts +23 -4
- package/src/scripts/check_trunk_drift.ts +24 -1
- package/src/scripts/check_update_banner.ts +23 -4
- package/src/scripts/ci_summary.ts +23 -4
- package/src/scripts/ci_time_ratio.ts +23 -4
- package/src/scripts/cluster_near_miss_patterns.ts +0 -0
- package/src/scripts/compile_router.ts +23 -4
- package/src/scripts/condense.ts +30 -31
- package/src/scripts/condense_memory.ts +24 -2
- package/src/scripts/config/packs.ts +24 -4
- package/src/scripts/config/session_profiles.ts +23 -4
- package/src/scripts/context_hygiene_hook.ts +24 -3
- package/src/scripts/cost_by_conversation.ts +23 -4
- package/src/scripts/cost_summary.ts +23 -4
- package/src/scripts/council_cli.ts +35 -7
- package/src/scripts/council_prune.ts +25 -2
- package/src/scripts/cross_repo_retrieve.ts +23 -4
- package/src/scripts/discovery_stats.ts +23 -4
- package/src/scripts/evidence_report.ts +23 -1
- package/src/scripts/export_replay_corpus.ts +23 -2
- package/src/scripts/extract_audit_patterns.ts +23 -1
- package/src/scripts/first_run_gate_hook.ts +24 -3
- package/src/scripts/gen_discovery_baseline.ts +23 -4
- package/src/scripts/generate_capabilities_index.ts +24 -5
- package/src/scripts/generate_capability_matrix.ts +23 -4
- package/src/scripts/generate_catalog.ts +23 -1
- package/src/scripts/generate_command_flows.ts +23 -4
- package/src/scripts/generate_cookbook.ts +23 -4
- package/src/scripts/generate_index.ts +23 -4
- package/src/scripts/generate_ownership_matrix.ts +23 -1
- package/src/scripts/generate_pack_manifests.ts +24 -5
- package/src/scripts/generate_role_experiences_catalog.ts +23 -4
- package/src/scripts/hooks/block_no_verify.ts +23 -4
- package/src/scripts/hooks/design_slop_hook.ts +24 -3
- package/src/scripts/hooks/dispatch_hook.ts +47 -14
- package/src/scripts/hooks/replay_hook.ts +23 -2
- package/src/scripts/hooks/rtk_wrap_hook.ts +24 -5
- package/src/scripts/hooks_doctor.ts +23 -2
- package/src/scripts/hooks_status.ts +23 -2
- package/src/scripts/injection_scan_hook.ts +24 -5
- package/src/scripts/install +23 -4
- package/src/scripts/install.ts +102 -44
- package/src/scripts/inventory_abstraction_budget.ts +23 -1
- package/src/scripts/inventory_frontmatter.ts +23 -1
- package/src/scripts/inventory_meta_layers.ts +23 -1
- package/src/scripts/iron_law_sha.ts +23 -4
- package/src/scripts/janitor.ts +23 -4
- package/src/scripts/knowledge_global_cli.ts +24 -2
- package/src/scripts/linked_projects_list.ts +23 -4
- package/src/scripts/lint_agent_security.ts +23 -4
- package/src/scripts/lint_agent_skill_names.ts +23 -4
- package/src/scripts/lint_agents_layout.ts +23 -4
- package/src/scripts/lint_agents_md.ts +23 -4
- package/src/scripts/lint_archived_skills.ts +23 -4
- package/src/scripts/lint_artefact_frontmatter.ts +23 -4
- package/src/scripts/lint_bench_ab.ts +23 -4
- package/src/scripts/lint_bench_corpus.ts +23 -2
- package/src/scripts/lint_command_flow_coverage.ts +23 -4
- package/src/scripts/lint_command_routing.ts +23 -4
- package/src/scripts/lint_command_tiers.ts +23 -2
- package/src/scripts/lint_command_verbs.ts +23 -4
- package/src/scripts/lint_commit_subjects.ts +24 -4
- package/src/scripts/lint_confusables.ts +25 -5
- package/src/scripts/lint_context_spine_usage.ts +23 -4
- package/src/scripts/lint_discovery_manifest.ts +23 -4
- package/src/scripts/lint_discovery_vocabulary.ts +23 -4
- package/src/scripts/lint_empty_roadmaps.ts +23 -4
- package/src/scripts/lint_eval_freshness.ts +23 -4
- package/src/scripts/lint_examples.ts +23 -4
- package/src/scripts/lint_explain_trace.ts +23 -4
- package/src/scripts/lint_featured_skills.ts +0 -0
- package/src/scripts/lint_flows.ts +23 -4
- package/src/scripts/lint_framework_leakage.ts +23 -4
- package/src/scripts/lint_frontmatter_boilerplate.ts +23 -4
- package/src/scripts/lint_ghostwriter_source.ts +23 -4
- package/src/scripts/lint_glama_drift.ts +75 -0
- package/src/scripts/lint_global_paths.ts +23 -2
- package/src/scripts/lint_handoffs.ts +23 -4
- package/src/scripts/lint_hidden_unicode.ts +24 -5
- package/src/scripts/lint_hook_concern_budget.ts +23 -4
- package/src/scripts/lint_hook_manifest.ts +23 -2
- package/src/scripts/lint_instruction_smuggling.ts +25 -5
- package/src/scripts/lint_legal_pack.ts +23 -1
- package/src/scripts/lint_load_context.ts +23 -4
- package/src/scripts/lint_marketplace.ts +24 -3
- package/src/scripts/lint_marketplace_install_completeness.ts +23 -4
- package/src/scripts/lint_mcp_config_security.ts +25 -5
- package/src/scripts/lint_mcp_registry_manifest.ts +23 -4
- package/src/scripts/lint_media_policy_linkage.ts +23 -4
- package/src/scripts/lint_missions.ts +23 -4
- package/src/scripts/lint_model_tier_coverage.ts +23 -4
- package/src/scripts/lint_namespace.ts +23 -4
- package/src/scripts/lint_namespace_collisions.ts +23 -4
- package/src/scripts/lint_new_skill_gate.ts +23 -4
- package/src/scripts/lint_no_new_atomic_commands.ts +23 -4
- package/src/scripts/lint_one_off_age.ts +23 -4
- package/src/scripts/lint_orchestration_dsl.ts +23 -4
- package/src/scripts/lint_orchestrator_auto_detect.ts +23 -4
- package/src/scripts/lint_pack_boundaries.ts +23 -4
- package/src/scripts/lint_pack_dependencies.ts +23 -2
- package/src/scripts/lint_pack_first_win.ts +23 -4
- package/src/scripts/lint_pack_risk_class.ts +23 -1
- package/src/scripts/lint_persona_governance.ts +23 -4
- package/src/scripts/lint_positioning.ts +23 -4
- package/src/scripts/lint_profile_overlay_set_only.ts +23 -4
- package/src/scripts/lint_readme_jargon.ts +23 -4
- package/src/scripts/lint_readme_size.ts +23 -4
- package/src/scripts/lint_regression.ts +23 -4
- package/src/scripts/lint_roadmap_blockers.ts +23 -4
- package/src/scripts/lint_roadmap_ci_steps.ts +23 -4
- package/src/scripts/lint_roadmap_complexity.ts +23 -4
- package/src/scripts/lint_roadmap_later_disposition.ts +23 -4
- package/src/scripts/lint_role_experiences.ts +23 -4
- package/src/scripts/lint_rule_interactions.ts +23 -4
- package/src/scripts/lint_rule_tiers.ts +24 -3
- package/src/scripts/lint_showcase_sessions.ts +23 -4
- package/src/scripts/lint_skill_frontmatter_safety.ts +25 -5
- package/src/scripts/lint_skill_originality.ts +23 -4
- package/src/scripts/lint_skill_tools.ts +23 -4
- package/src/scripts/lint_subagent_determinism.ts +23 -4
- package/src/scripts/lint_ticket_buildable.ts +23 -4
- package/src/scripts/lint_topics_yaml.ts +23 -4
- package/src/scripts/lint_trust_coherence.ts +23 -4
- package/src/scripts/lint_value_dashboard.ts +23 -4
- package/src/scripts/lint_workflow_security.ts +23 -4
- package/src/scripts/lint_workspace_boundary.ts +23 -4
- package/src/scripts/mcp_exec/safety_envelope.ts +105 -0
- package/src/scripts/mcp_parity_smoke.ts +23 -2
- package/src/scripts/mcp_registry_submit.sh +14 -3
- package/src/scripts/mcp_render.ts +23 -4
- package/src/scripts/mcp_server/__main__.ts +6 -8
- package/src/scripts/mcp_server/consumer_tool_catalog.json +78 -3
- package/src/scripts/mcp_server/tools.ts +731 -0
- package/src/scripts/mcp_telemetry_health.ts +23 -4
- package/src/scripts/mcp_telemetry_query.ts +23 -4
- package/src/scripts/mcp_telemetry_store.ts +23 -4
- package/src/scripts/measure_augment_budget.ts +23 -1
- package/src/scripts/measure_density.ts +23 -1
- package/src/scripts/measure_frugality_savings.ts +23 -1
- package/src/scripts/measure_markitdown_lift.ts +23 -1
- package/src/scripts/measure_patterns.ts +23 -1
- package/src/scripts/measure_projection_bytes.ts +23 -1
- package/src/scripts/measure_rule_budget.ts +23 -4
- package/src/scripts/measure_skill_reduction.ts +23 -1
- package/src/scripts/memory_hash.ts +24 -2
- package/src/scripts/memory_lookup.ts +24 -2
- package/src/scripts/memory_report.ts +24 -2
- package/src/scripts/memory_signal.ts +24 -2
- package/src/scripts/memory_status.ts +26 -2
- package/src/scripts/migrate_command_suggestions.ts +23 -4
- package/src/scripts/migrate_frontmatter_defaults.ts +23 -4
- package/src/scripts/migration_status.ts +25 -4
- package/src/scripts/mine_missing_guardrails.ts +23 -1
- package/src/scripts/mine_session.ts +23 -1
- package/src/scripts/minimal_safe_diff_hook.ts +24 -3
- package/src/scripts/new_skill.ts +23 -3
- package/src/scripts/onboarding_gate_hook.ts +24 -3
- package/src/scripts/parity/coverage_diff.ts +25 -3
- package/src/scripts/parity/phase_gate.ts +25 -4
- package/src/scripts/parity/replay.ts +25 -3
- package/src/scripts/pattern_share.ts +23 -4
- package/src/scripts/plan_physical_move.ts +23 -4
- package/src/scripts/prediction-pool/poisson_sim.ts +24 -3
- package/src/scripts/prediction-pool/pool_winsim.ts +24 -3
- package/src/scripts/prediction-pool/score_ev.ts +24 -3
- package/src/scripts/print_required_checks.ts +24 -4
- package/src/scripts/probe_host_compliance.ts +23 -2
- package/src/scripts/probe_projection_fidelity.ts +23 -1
- package/src/scripts/probe_skill_registration.ts +24 -2
- package/src/scripts/profile_staleness_hook.ts +24 -3
- package/src/scripts/profile_use.ts +23 -4
- package/src/scripts/project_thin_rules.ts +23 -3
- package/src/scripts/propose_modules_config.ts +23 -4
- package/src/scripts/prototype_lint_contradictions.ts +23 -1
- package/src/scripts/prove_pack_extractable.ts +23 -4
- package/src/scripts/readme_linter.ts +23 -3
- package/src/scripts/redact_hook_capture.ts +23 -4
- package/src/scripts/refine_ticket_detect.ts +23 -4
- package/src/scripts/release.ts +226 -43
- package/src/scripts/render_benchmark_composite.ts +23 -4
- package/src/scripts/render_benchmark_md.ts +23 -4
- package/src/scripts/roadmap_progress_hook.ts +46 -16
- package/src/scripts/run_skill_evals.ts +23 -4
- package/src/scripts/runtime_dispatcher.ts +23 -4
- package/src/scripts/runtime_registry.ts +23 -4
- package/src/scripts/score_skill_selection.ts +23 -1
- package/src/scripts/security_audit_config.ts +24 -5
- package/src/scripts/skill_collision_clusters.ts +23 -4
- package/src/scripts/skill_discovery.ts +23 -4
- package/src/scripts/skill_linter.ts +23 -2
- package/src/scripts/skill_preview.ts +23 -4
- package/src/scripts/skill_tools/audit_persona_coverage.ts +23 -1
- package/src/scripts/skill_tools/audit_user_type_coverage.ts +23 -1
- package/src/scripts/skill_tools/run_block_d_eval.ts +23 -1
- package/src/scripts/skill_tools/score_skill_relevance.ts +23 -1
- package/src/scripts/skill_tools/suggest_skill_for_task.ts +24 -1
- package/src/scripts/skill_usage_collect.ts +23 -4
- package/src/scripts/smoke_path_resolution.ts +23 -4
- package/src/scripts/smoke_quickstart.ts +23 -4
- package/src/scripts/snapshot_agent_outputs.ts +23 -4
- package/src/scripts/spotcheck_thin_root.ts +23 -4
- package/src/scripts/sync_agent_settings.ts +23 -4
- package/src/scripts/sync_github_metadata.ts +23 -4
- package/src/scripts/sync_gitignore.ts +23 -4
- package/src/scripts/telegraph_stats.ts +23 -4
- package/src/scripts/tool_registry.ts +24 -4
- package/src/scripts/trigger_coverage.ts +23 -4
- package/src/scripts/update_counts.ts +23 -4
- package/src/scripts/update_prices.ts +23 -1
- package/src/scripts/validate_agent_settings.ts +23 -4
- package/src/scripts/validate_decision_engine.ts +23 -4
- package/src/scripts/validate_discovery_manifest.ts +23 -4
- package/src/scripts/validate_frontmatter.ts +23 -2
- package/src/scripts/validate_pack_yaml.ts +0 -0
- package/src/scripts/validate_safe_paths.ts +24 -4
- package/src/scripts/validate_telegraph_carveouts.ts +23 -4
- package/src/scripts/verify_before_complete_hook.ts +24 -3
- package/src/scripts/verify_physical_move.ts +23 -4
- package/src/scripts/wrapper_freshness_hook.ts +107 -8
- package/tests/fixtures/hooks/README.md +92 -0
- package/tests/fixtures/hooks/agent_error.json +7 -0
- package/tests/fixtures/hooks/post_tool_use.json +13 -0
- package/tests/fixtures/hooks/pre_compact.json +7 -0
- package/tests/fixtures/hooks/pre_tool_use.json +9 -0
- package/tests/fixtures/hooks/session_end.json +6 -0
- package/tests/fixtures/hooks/session_start.json +6 -0
- package/tests/fixtures/hooks/stop.json +6 -0
- package/tests/fixtures/hooks/user_prompt_submit.json +7 -0
|
@@ -26,10 +26,10 @@
|
|
|
26
26
|
* here; files without frontmatter are skipped (P5.1 contract).
|
|
27
27
|
*
|
|
28
28
|
* Health checks (see `CHECK_IDS`):
|
|
29
|
-
* scope ·
|
|
30
|
-
*
|
|
31
|
-
* tier-usage-readiness · council-cli ·
|
|
32
|
-
* wizard-state.
|
|
29
|
+
* scope · global-binary · claude-plugin · stale-orphans · manifest-integrity ·
|
|
30
|
+
* lockfile-freshness · bridge-drift · mcp-mode · mcp-beta-readiness ·
|
|
31
|
+
* offline-readiness · python-runtime · tier-usage-readiness · council-cli ·
|
|
32
|
+
* unsupported-combos · wizard-state.
|
|
33
33
|
* Each emits a structured `{id, status, message, remedy}` record with
|
|
34
34
|
* `status` ∈ `ok` / `warn` / `fail` / `skipped` (rendered
|
|
35
35
|
* `✅` / `⚠️` / `❌` / `⏭️`). `--check <id>` runs a single check.
|
|
@@ -80,6 +80,9 @@ import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
|
80
80
|
|
|
81
81
|
import * as YAML from 'yaml';
|
|
82
82
|
|
|
83
|
+
import * as claude_plugin from '../_lib/claude_plugin.js';
|
|
84
|
+
import * as claude_settings_hooks from '../_lib/claude_settings_hooks.js';
|
|
85
|
+
import { _is_source_repo } from './cmd_refresh.js';
|
|
83
86
|
import * as installed_lock from '../_lib/installed_lock.js';
|
|
84
87
|
import * as installed_tools from '../_lib/installed_tools.js';
|
|
85
88
|
import * as user_global_paths from '../_lib/user_global_paths.js';
|
|
@@ -727,6 +730,8 @@ function relativeTo(p: string, base: string): string | null {
|
|
|
727
730
|
const CHECK_IDS = [
|
|
728
731
|
'scope',
|
|
729
732
|
'global-binary',
|
|
733
|
+
'claude-plugin',
|
|
734
|
+
'hook-wiring',
|
|
730
735
|
'stale-orphans',
|
|
731
736
|
'manifest-integrity',
|
|
732
737
|
'lockfile-freshness',
|
|
@@ -745,6 +750,8 @@ const CHECK_IDS = [
|
|
|
745
750
|
const GLOBAL_CHECK_IDS: ReadonlySet<string> = new Set([
|
|
746
751
|
'scope',
|
|
747
752
|
'global-binary',
|
|
753
|
+
'claude-plugin',
|
|
754
|
+
'hook-wiring',
|
|
748
755
|
'stale-orphans',
|
|
749
756
|
'mcp-mode',
|
|
750
757
|
'mcp-beta-readiness',
|
|
@@ -1000,6 +1007,149 @@ function lstripV(s: string): string {
|
|
|
1000
1007
|
return out;
|
|
1001
1008
|
}
|
|
1002
1009
|
|
|
1010
|
+
/**
|
|
1011
|
+
* Claude Code plugin state under the single-surface model
|
|
1012
|
+
* (road-to-claude-code-single-surface): the `~/.claude/` file projection is
|
|
1013
|
+
* THE distribution surface for Claude Code — content, and hooks via the
|
|
1014
|
+
* managed settings.json block. An installed marketplace plugin next to the
|
|
1015
|
+
* projection is a **duplicate surface**: every skill/command lists twice
|
|
1016
|
+
* and the plugin's SHA snapshot rots silently. That is `fail`, with the
|
|
1017
|
+
* uninstall command as the fix (never uninstalled autonomously — the plugin
|
|
1018
|
+
* is a user-owned surface).
|
|
1019
|
+
*/
|
|
1020
|
+
function _check_claude_plugin(): Dict {
|
|
1021
|
+
const claude = shutilWhich('claude');
|
|
1022
|
+
if (claude === null) {
|
|
1023
|
+
return {
|
|
1024
|
+
id: 'claude-plugin',
|
|
1025
|
+
status: 'skipped',
|
|
1026
|
+
message: 'Claude Code CLI not on PATH — plugin check not applicable',
|
|
1027
|
+
remedy: '',
|
|
1028
|
+
};
|
|
1029
|
+
}
|
|
1030
|
+
if (!claude_plugin.claude_plugin_installed()) {
|
|
1031
|
+
return {
|
|
1032
|
+
id: 'claude-plugin',
|
|
1033
|
+
status: 'ok',
|
|
1034
|
+
message:
|
|
1035
|
+
'plugin not installed (single-surface model — the ~/.claude/ file ' +
|
|
1036
|
+
'projection carries content AND hooks)',
|
|
1037
|
+
remedy: '',
|
|
1038
|
+
};
|
|
1039
|
+
}
|
|
1040
|
+
const projection = path.join(os.homedir(), '.claude', 'skills');
|
|
1041
|
+
const projection_present = isDir(projection);
|
|
1042
|
+
if (projection_present) {
|
|
1043
|
+
return {
|
|
1044
|
+
id: 'claude-plugin',
|
|
1045
|
+
status: 'fail',
|
|
1046
|
+
message:
|
|
1047
|
+
'duplicate surface: the marketplace plugin AND the ~/.claude/ file ' +
|
|
1048
|
+
'projection are both installed — every skill/command lists twice and ' +
|
|
1049
|
+
'the plugin snapshot rots silently',
|
|
1050
|
+
remedy:
|
|
1051
|
+
`claude plugin uninstall ${claude_plugin.CLAUDE_PLUGIN_ID}@${claude_plugin.CLAUDE_MARKETPLACE_NAME} ` +
|
|
1052
|
+
'(hooks stay — they are registered in ~/.claude/settings.json; ' +
|
|
1053
|
+
'verify with the hook-wiring check)',
|
|
1054
|
+
};
|
|
1055
|
+
}
|
|
1056
|
+
const snapshot_v = lstripV(claude_plugin.claude_plugin_snapshot_version() || '');
|
|
1057
|
+
const binary_v = lstripV(_current_package_version() || '');
|
|
1058
|
+
if (snapshot_v && binary_v && snapshot_v !== binary_v) {
|
|
1059
|
+
return {
|
|
1060
|
+
id: 'claude-plugin',
|
|
1061
|
+
status: 'warn',
|
|
1062
|
+
message: `plugin snapshot ${snapshot_v} lags binary ${binary_v} — its command surface is stale`,
|
|
1063
|
+
remedy:
|
|
1064
|
+
'agent-config upgrade (refreshes the plugin), or ' +
|
|
1065
|
+
`claude plugin update ${claude_plugin.CLAUDE_PLUGIN_ID}@${claude_plugin.CLAUDE_MARKETPLACE_NAME}`,
|
|
1066
|
+
};
|
|
1067
|
+
}
|
|
1068
|
+
return {
|
|
1069
|
+
id: 'claude-plugin',
|
|
1070
|
+
status: 'warn',
|
|
1071
|
+
message:
|
|
1072
|
+
`plugin installed${snapshot_v ? ` (snapshot ${snapshot_v})` : ''} without the ` +
|
|
1073
|
+
'file projection — deprecated surface; the projection is the supported path',
|
|
1074
|
+
remedy: 'agent-config global (then uninstall the plugin per the printed hint)',
|
|
1075
|
+
};
|
|
1076
|
+
}
|
|
1077
|
+
|
|
1078
|
+
/**
|
|
1079
|
+
* Managed hook wiring (single-surface model): the deterministic hook matrix
|
|
1080
|
+
* must be registered in ~/.claude/settings.json AND the dispatch target
|
|
1081
|
+
* (`agent-config` binary) must resolve on PATH. Both halves are required —
|
|
1082
|
+
* hooks without a binary silently no-op every session.
|
|
1083
|
+
*/
|
|
1084
|
+
function _check_hook_wiring(): Dict {
|
|
1085
|
+
const claude = shutilWhich('claude');
|
|
1086
|
+
if (claude === null) {
|
|
1087
|
+
return {
|
|
1088
|
+
id: 'hook-wiring',
|
|
1089
|
+
status: 'skipped',
|
|
1090
|
+
message: 'Claude Code CLI not on PATH — hook-wiring check not applicable',
|
|
1091
|
+
remedy: '',
|
|
1092
|
+
};
|
|
1093
|
+
}
|
|
1094
|
+
const settings_path = path.join(os.homedir(), '.claude', 'settings.json');
|
|
1095
|
+
let missing: string[];
|
|
1096
|
+
try {
|
|
1097
|
+
const matrix = claude_settings_hooks.build_claude_hook_matrix(
|
|
1098
|
+
path.join(_package_root(), 'src', 'scripts', 'hook_manifest.yaml'),
|
|
1099
|
+
);
|
|
1100
|
+
const settings = pathExists(settings_path)
|
|
1101
|
+
? (JSON.parse(fs.readFileSync(settings_path, 'utf8')) as Record<string, unknown>)
|
|
1102
|
+
: {};
|
|
1103
|
+
const hooks = ((settings['hooks'] ?? {}) as Record<string, unknown>) || {};
|
|
1104
|
+
missing = Object.keys(matrix).filter((ev) => {
|
|
1105
|
+
const groups = hooks[ev];
|
|
1106
|
+
if (!Array.isArray(groups)) return true;
|
|
1107
|
+
return !JSON.stringify(groups).includes(claude_settings_hooks.MANAGED_SIGNATURE);
|
|
1108
|
+
});
|
|
1109
|
+
} catch (e) {
|
|
1110
|
+
return {
|
|
1111
|
+
id: 'hook-wiring',
|
|
1112
|
+
status: 'fail',
|
|
1113
|
+
message: `cannot evaluate managed hooks: ${String(e)}`,
|
|
1114
|
+
remedy: 'fix ~/.claude/settings.json (invalid JSON?), then agent-config refresh --global',
|
|
1115
|
+
};
|
|
1116
|
+
}
|
|
1117
|
+
const binary_ok = shutilWhich('agent-config') !== null;
|
|
1118
|
+
if (missing.length === 0 && binary_ok) {
|
|
1119
|
+
return {
|
|
1120
|
+
id: 'hook-wiring',
|
|
1121
|
+
status: 'ok',
|
|
1122
|
+
message: 'managed hooks registered in ~/.claude/settings.json; dispatch binary on PATH',
|
|
1123
|
+
remedy: '',
|
|
1124
|
+
};
|
|
1125
|
+
}
|
|
1126
|
+
if (missing.length > 0 && claude_plugin.claude_plugin_installed()) {
|
|
1127
|
+
return {
|
|
1128
|
+
id: 'hook-wiring',
|
|
1129
|
+
status: 'warn',
|
|
1130
|
+
message:
|
|
1131
|
+
`managed hooks missing for: ${missing.join(', ')} — currently carried by the ` +
|
|
1132
|
+
'installed plugin (deprecated surface)',
|
|
1133
|
+
remedy: 'agent-config refresh --global (writes the managed settings.json block)',
|
|
1134
|
+
};
|
|
1135
|
+
}
|
|
1136
|
+
const parts: string[] = [];
|
|
1137
|
+
if (missing.length > 0) parts.push(`managed hooks missing for: ${missing.join(', ')}`);
|
|
1138
|
+
if (!binary_ok) parts.push('`agent-config` not on PATH (hooks would silently no-op)');
|
|
1139
|
+
if (parts.length === 0) {
|
|
1140
|
+
// hooks complete, binary missing was the only issue → covered above.
|
|
1141
|
+
parts.push('`agent-config` not on PATH');
|
|
1142
|
+
}
|
|
1143
|
+
return {
|
|
1144
|
+
id: 'hook-wiring',
|
|
1145
|
+
status: 'fail',
|
|
1146
|
+
message: parts.join('; '),
|
|
1147
|
+
remedy: binary_ok
|
|
1148
|
+
? 'agent-config refresh --global'
|
|
1149
|
+
: 'npm install -g @event4u/agent-config, then agent-config refresh --global',
|
|
1150
|
+
};
|
|
1151
|
+
}
|
|
1152
|
+
|
|
1003
1153
|
function _check_bridge_drift(
|
|
1004
1154
|
missing: Dict[],
|
|
1005
1155
|
modified: Dict[],
|
|
@@ -1196,6 +1346,20 @@ function _check_python_runtime(): Dict {
|
|
|
1196
1346
|
}
|
|
1197
1347
|
|
|
1198
1348
|
function _check_mcp_beta_readiness(project_root: string): Dict {
|
|
1349
|
+
// Maintainer-scoped gate: the six artefacts live in the agent-config
|
|
1350
|
+
// SOURCE repo. In a consumer project the paths can never exist, so the
|
|
1351
|
+
// check used to emit a meaningless "6/6 gates pending" warning on every
|
|
1352
|
+
// consumer doctor run — skip instead.
|
|
1353
|
+
if (!_is_source_repo(project_root)) {
|
|
1354
|
+
return {
|
|
1355
|
+
id: 'mcp-beta-readiness',
|
|
1356
|
+
status: 'skipped',
|
|
1357
|
+
message:
|
|
1358
|
+
'MCP beta promotion gates apply to the agent-config source repo, ' +
|
|
1359
|
+
'not consumer projects',
|
|
1360
|
+
remedy: '',
|
|
1361
|
+
};
|
|
1362
|
+
}
|
|
1199
1363
|
const pending: string[] = [];
|
|
1200
1364
|
for (const [gate_id, rel] of MCP_BETA_GATES) {
|
|
1201
1365
|
if (!pathExists(path.join(project_root, rel))) {
|
|
@@ -1751,6 +1915,8 @@ function _run_checks(
|
|
|
1751
1915
|
const runners: Record<string, CheckRunner> = {
|
|
1752
1916
|
scope: () => _check_scope(project_root),
|
|
1753
1917
|
'global-binary': () => _check_global_binary(project_root),
|
|
1918
|
+
'claude-plugin': _check_claude_plugin,
|
|
1919
|
+
'hook-wiring': _check_hook_wiring,
|
|
1754
1920
|
'stale-orphans': _check_stale_orphans,
|
|
1755
1921
|
'manifest-integrity': () => _check_manifest_integrity(manifest),
|
|
1756
1922
|
'lockfile-freshness': () => _check_lockfile_freshness(manifest),
|
|
@@ -1822,6 +1988,8 @@ function _run_checks_no_manifest(
|
|
|
1822
1988
|
const runners: Record<string, CheckRunner> = {
|
|
1823
1989
|
scope: () => _check_scope(project_root),
|
|
1824
1990
|
'global-binary': () => _check_global_binary(project_root),
|
|
1991
|
+
'claude-plugin': _check_claude_plugin,
|
|
1992
|
+
'hook-wiring': _check_hook_wiring,
|
|
1825
1993
|
'stale-orphans': _check_stale_orphans,
|
|
1826
1994
|
'manifest-integrity': () => _skipped_manifest_check('manifest-integrity'),
|
|
1827
1995
|
'lockfile-freshness': () => _skipped_manifest_check('lockfile-freshness'),
|
|
@@ -2258,10 +2426,29 @@ function main(argv: string[] | null = null): number {
|
|
|
2258
2426
|
|
|
2259
2427
|
// --- CLI entry ---
|
|
2260
2428
|
|
|
2261
|
-
|
|
2262
|
-
process.argv[1]
|
|
2263
|
-
|
|
2264
|
-
|
|
2429
|
+
function _isCliEntry(): boolean {
|
|
2430
|
+
if (process.argv[1] === undefined) {
|
|
2431
|
+
return false;
|
|
2432
|
+
}
|
|
2433
|
+
const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
|
|
2434
|
+
if (import.meta.url === argvUrl) {
|
|
2435
|
+
return true;
|
|
2436
|
+
}
|
|
2437
|
+
// A symlinked invocation (e.g. via an installed `.augment/` projection,
|
|
2438
|
+
// or macOS /var → /private/var temp dirs) makes the raw URLs differ:
|
|
2439
|
+
// import.meta.url is the resolved real path while argv[1] keeps the
|
|
2440
|
+
// symlink path. Compare realpaths so the entry guard still fires
|
|
2441
|
+
// (without this the CLI silently no-ops when run through a symlink).
|
|
2442
|
+
try {
|
|
2443
|
+
const here = fs.realpathSync(fileURLToPath(import.meta.url));
|
|
2444
|
+
const argv = fs.realpathSync(path.resolve(process.argv[1]));
|
|
2445
|
+
return here === argv;
|
|
2446
|
+
} catch {
|
|
2447
|
+
return false;
|
|
2448
|
+
}
|
|
2449
|
+
}
|
|
2450
|
+
|
|
2451
|
+
if (_isCliEntry() || process.argv[1] === _HERE) {
|
|
2265
2452
|
try {
|
|
2266
2453
|
process.exitCode = main(process.argv.slice(2));
|
|
2267
2454
|
} catch (e) {
|
|
@@ -2290,6 +2477,7 @@ export {
|
|
|
2290
2477
|
_check_manifest_integrity,
|
|
2291
2478
|
_check_lockfile_freshness,
|
|
2292
2479
|
_check_global_binary,
|
|
2480
|
+
_check_claude_plugin,
|
|
2293
2481
|
_check_bridge_drift,
|
|
2294
2482
|
_check_mcp_mode,
|
|
2295
2483
|
_check_offline_readiness,
|
|
@@ -713,10 +713,29 @@ export function main(argv: string[] | null = null): number {
|
|
|
713
713
|
|
|
714
714
|
// --- CLI entry ---
|
|
715
715
|
|
|
716
|
-
|
|
717
|
-
process.argv[1]
|
|
718
|
-
|
|
719
|
-
|
|
716
|
+
function _isCliEntry(): boolean {
|
|
717
|
+
if (process.argv[1] === undefined) {
|
|
718
|
+
return false;
|
|
719
|
+
}
|
|
720
|
+
const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
|
|
721
|
+
if (import.meta.url === argvUrl) {
|
|
722
|
+
return true;
|
|
723
|
+
}
|
|
724
|
+
// A symlinked invocation (e.g. via an installed `.augment/` projection,
|
|
725
|
+
// or macOS /var → /private/var temp dirs) makes the raw URLs differ:
|
|
726
|
+
// import.meta.url is the resolved real path while argv[1] keeps the
|
|
727
|
+
// symlink path. Compare realpaths so the entry guard still fires
|
|
728
|
+
// (without this the CLI silently no-ops when run through a symlink).
|
|
729
|
+
try {
|
|
730
|
+
const here = fs.realpathSync(fileURLToPath(import.meta.url));
|
|
731
|
+
const argv = fs.realpathSync(path.resolve(process.argv[1]));
|
|
732
|
+
return here === argv;
|
|
733
|
+
} catch {
|
|
734
|
+
return false;
|
|
735
|
+
}
|
|
736
|
+
}
|
|
737
|
+
|
|
738
|
+
if (_isCliEntry() || process.argv[1] === _HERE) {
|
|
720
739
|
try {
|
|
721
740
|
process.exitCode = main(process.argv.slice(2));
|
|
722
741
|
} catch (e) {
|
|
@@ -359,10 +359,29 @@ export function main(argv: string[] | null = null, options: MainOptions = {}): n
|
|
|
359
359
|
// Python: `if __name__ == "__main__": sys.exit(main())` (argparse reads
|
|
360
360
|
// sys.argv[1:] inside the parser default).
|
|
361
361
|
const _HERE = fileURLToPath(import.meta.url);
|
|
362
|
-
|
|
363
|
-
process.argv[1]
|
|
364
|
-
|
|
365
|
-
|
|
362
|
+
function _isCliEntry(): boolean {
|
|
363
|
+
if (process.argv[1] === undefined) {
|
|
364
|
+
return false;
|
|
365
|
+
}
|
|
366
|
+
const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
|
|
367
|
+
if (import.meta.url === argvUrl) {
|
|
368
|
+
return true;
|
|
369
|
+
}
|
|
370
|
+
// A symlinked invocation (e.g. via an installed `.augment/` projection,
|
|
371
|
+
// or macOS /var → /private/var temp dirs) makes the raw URLs differ:
|
|
372
|
+
// import.meta.url is the resolved real path while argv[1] keeps the
|
|
373
|
+
// symlink path. Compare realpaths so the entry guard still fires
|
|
374
|
+
// (without this the CLI silently no-ops when run through a symlink).
|
|
375
|
+
try {
|
|
376
|
+
const here = fs.realpathSync(fileURLToPath(import.meta.url));
|
|
377
|
+
const argv = fs.realpathSync(path.resolve(process.argv[1]));
|
|
378
|
+
return here === argv;
|
|
379
|
+
} catch {
|
|
380
|
+
return false;
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
if (_isCliEntry() || process.argv[1] === _HERE) {
|
|
366
385
|
try {
|
|
367
386
|
process.exitCode = main();
|
|
368
387
|
} catch (exc) {
|
|
@@ -385,10 +385,29 @@ export async function main(argv: string[] | null = null): Promise<number> {
|
|
|
385
385
|
|
|
386
386
|
// --- CLI entry ---
|
|
387
387
|
|
|
388
|
-
|
|
389
|
-
process.argv[1]
|
|
390
|
-
|
|
391
|
-
|
|
388
|
+
function _isCliEntry(): boolean {
|
|
389
|
+
if (process.argv[1] === undefined) {
|
|
390
|
+
return false;
|
|
391
|
+
}
|
|
392
|
+
const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
|
|
393
|
+
if (import.meta.url === argvUrl) {
|
|
394
|
+
return true;
|
|
395
|
+
}
|
|
396
|
+
// A symlinked invocation (e.g. via an installed `.augment/` projection,
|
|
397
|
+
// or macOS /var → /private/var temp dirs) makes the raw URLs differ:
|
|
398
|
+
// import.meta.url is the resolved real path while argv[1] keeps the
|
|
399
|
+
// symlink path. Compare realpaths so the entry guard still fires
|
|
400
|
+
// (without this the CLI silently no-ops when run through a symlink).
|
|
401
|
+
try {
|
|
402
|
+
const here = fs.realpathSync(fileURLToPath(import.meta.url));
|
|
403
|
+
const argv = fs.realpathSync(path.resolve(process.argv[1]));
|
|
404
|
+
return here === argv;
|
|
405
|
+
} catch {
|
|
406
|
+
return false;
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
if (_isCliEntry() || process.argv[1] === _HERE) {
|
|
392
411
|
main(process.argv.slice(2)).then(
|
|
393
412
|
(code) => {
|
|
394
413
|
process.exitCode = code;
|
|
@@ -935,10 +935,29 @@ declare const __AGENT_CONFIG_BUNDLE__: boolean | undefined;
|
|
|
935
935
|
const _bundled =
|
|
936
936
|
typeof __AGENT_CONFIG_BUNDLE__ !== 'undefined' && __AGENT_CONFIG_BUNDLE__;
|
|
937
937
|
const _HERE = fileURLToPath(import.meta.url);
|
|
938
|
-
|
|
939
|
-
process.argv[1]
|
|
940
|
-
|
|
941
|
-
|
|
938
|
+
function _isCliEntry(): boolean {
|
|
939
|
+
if (process.argv[1] === undefined) {
|
|
940
|
+
return false;
|
|
941
|
+
}
|
|
942
|
+
const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
|
|
943
|
+
if (import.meta.url === argvUrl) {
|
|
944
|
+
return true;
|
|
945
|
+
}
|
|
946
|
+
// A symlinked invocation (e.g. via an installed `.augment/` projection,
|
|
947
|
+
// or macOS /var → /private/var temp dirs) makes the raw URLs differ:
|
|
948
|
+
// import.meta.url is the resolved real path while argv[1] keeps the
|
|
949
|
+
// symlink path. Compare realpaths so the entry guard still fires
|
|
950
|
+
// (without this the CLI silently no-ops when run through a symlink).
|
|
951
|
+
try {
|
|
952
|
+
const here = fs.realpathSync(fileURLToPath(import.meta.url));
|
|
953
|
+
const argv = fs.realpathSync(path.resolve(process.argv[1]));
|
|
954
|
+
return here === argv;
|
|
955
|
+
} catch {
|
|
956
|
+
return false;
|
|
957
|
+
}
|
|
958
|
+
}
|
|
959
|
+
|
|
960
|
+
if (!_bundled && (_isCliEntry() || process.argv[1] === _HERE)) {
|
|
942
961
|
try {
|
|
943
962
|
process.exitCode = main(process.argv.slice(2));
|
|
944
963
|
} catch (exc) {
|
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
import * as os from 'node:os';
|
|
19
19
|
import * as path from 'node:path';
|
|
20
20
|
import process from 'node:process';
|
|
21
|
+
import * as fs from 'node:fs';
|
|
21
22
|
import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
22
23
|
|
|
23
24
|
import {
|
|
@@ -151,9 +152,28 @@ export function main(argv: string[] | null = null): number {
|
|
|
151
152
|
|
|
152
153
|
// --- CLI entry ---
|
|
153
154
|
|
|
154
|
-
|
|
155
|
-
process.argv[1]
|
|
156
|
-
|
|
157
|
-
|
|
155
|
+
function _isCliEntry(): boolean {
|
|
156
|
+
if (process.argv[1] === undefined) {
|
|
157
|
+
return false;
|
|
158
|
+
}
|
|
159
|
+
const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
|
|
160
|
+
if (import.meta.url === argvUrl) {
|
|
161
|
+
return true;
|
|
162
|
+
}
|
|
163
|
+
// A symlinked invocation (e.g. via an installed `.augment/` projection,
|
|
164
|
+
// or macOS /var → /private/var temp dirs) makes the raw URLs differ:
|
|
165
|
+
// import.meta.url is the resolved real path while argv[1] keeps the
|
|
166
|
+
// symlink path. Compare realpaths so the entry guard still fires
|
|
167
|
+
// (without this the CLI silently no-ops when run through a symlink).
|
|
168
|
+
try {
|
|
169
|
+
const here = fs.realpathSync(fileURLToPath(import.meta.url));
|
|
170
|
+
const argv = fs.realpathSync(path.resolve(process.argv[1]));
|
|
171
|
+
return here === argv;
|
|
172
|
+
} catch {
|
|
173
|
+
return false;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
if (_isCliEntry() || process.argv[1] === _HERE) {
|
|
158
178
|
process.exitCode = main(process.argv.slice(2));
|
|
159
179
|
}
|
|
@@ -594,10 +594,29 @@ export function main(argv: string[] | null = null): number {
|
|
|
594
594
|
|
|
595
595
|
// CLI entry guard — set process.exitCode; never call process.exit().
|
|
596
596
|
const _HERE = fileURLToPath(import.meta.url);
|
|
597
|
-
|
|
598
|
-
process.argv[1]
|
|
599
|
-
|
|
600
|
-
|
|
597
|
+
function _isCliEntry(): boolean {
|
|
598
|
+
if (process.argv[1] === undefined) {
|
|
599
|
+
return false;
|
|
600
|
+
}
|
|
601
|
+
const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
|
|
602
|
+
if (import.meta.url === argvUrl) {
|
|
603
|
+
return true;
|
|
604
|
+
}
|
|
605
|
+
// A symlinked invocation (e.g. via an installed `.augment/` projection,
|
|
606
|
+
// or macOS /var → /private/var temp dirs) makes the raw URLs differ:
|
|
607
|
+
// import.meta.url is the resolved real path while argv[1] keeps the
|
|
608
|
+
// symlink path. Compare realpaths so the entry guard still fires
|
|
609
|
+
// (without this the CLI silently no-ops when run through a symlink).
|
|
610
|
+
try {
|
|
611
|
+
const here = fs.realpathSync(fileURLToPath(import.meta.url));
|
|
612
|
+
const argv = fs.realpathSync(path.resolve(process.argv[1]));
|
|
613
|
+
return here === argv;
|
|
614
|
+
} catch {
|
|
615
|
+
return false;
|
|
616
|
+
}
|
|
617
|
+
}
|
|
618
|
+
|
|
619
|
+
if (_isCliEntry() || process.argv[1] === _HERE) {
|
|
601
620
|
try {
|
|
602
621
|
process.exitCode = main(process.argv.slice(2));
|
|
603
622
|
} catch (exc) {
|
|
@@ -502,10 +502,29 @@ export function main(argv: string[] | null = null, options: MainOptions = {}): n
|
|
|
502
502
|
|
|
503
503
|
// --- CLI entry ---
|
|
504
504
|
|
|
505
|
-
|
|
506
|
-
process.argv[1]
|
|
507
|
-
|
|
508
|
-
|
|
505
|
+
function _isCliEntry(): boolean {
|
|
506
|
+
if (process.argv[1] === undefined) {
|
|
507
|
+
return false;
|
|
508
|
+
}
|
|
509
|
+
const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
|
|
510
|
+
if (import.meta.url === argvUrl) {
|
|
511
|
+
return true;
|
|
512
|
+
}
|
|
513
|
+
// A symlinked invocation (e.g. via an installed `.augment/` projection,
|
|
514
|
+
// or macOS /var → /private/var temp dirs) makes the raw URLs differ:
|
|
515
|
+
// import.meta.url is the resolved real path while argv[1] keeps the
|
|
516
|
+
// symlink path. Compare realpaths so the entry guard still fires
|
|
517
|
+
// (without this the CLI silently no-ops when run through a symlink).
|
|
518
|
+
try {
|
|
519
|
+
const here = fs.realpathSync(fileURLToPath(import.meta.url));
|
|
520
|
+
const argv = fs.realpathSync(path.resolve(process.argv[1]));
|
|
521
|
+
return here === argv;
|
|
522
|
+
} catch {
|
|
523
|
+
return false;
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
|
|
527
|
+
if (_isCliEntry() || process.argv[1] === _HERE) {
|
|
509
528
|
try {
|
|
510
529
|
process.exitCode = main(process.argv.slice(2));
|
|
511
530
|
} catch (e) {
|
|
@@ -391,10 +391,29 @@ export function main(argv: string[] | null = null, options: MainOptions = {}): n
|
|
|
391
391
|
|
|
392
392
|
// CLI entry guard — set process.exitCode; never call process.exit().
|
|
393
393
|
const _HERE = fileURLToPath(import.meta.url);
|
|
394
|
-
|
|
395
|
-
process.argv[1]
|
|
396
|
-
|
|
397
|
-
|
|
394
|
+
function _isCliEntry(): boolean {
|
|
395
|
+
if (process.argv[1] === undefined) {
|
|
396
|
+
return false;
|
|
397
|
+
}
|
|
398
|
+
const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
|
|
399
|
+
if (import.meta.url === argvUrl) {
|
|
400
|
+
return true;
|
|
401
|
+
}
|
|
402
|
+
// A symlinked invocation (e.g. via an installed `.augment/` projection,
|
|
403
|
+
// or macOS /var → /private/var temp dirs) makes the raw URLs differ:
|
|
404
|
+
// import.meta.url is the resolved real path while argv[1] keeps the
|
|
405
|
+
// symlink path. Compare realpaths so the entry guard still fires
|
|
406
|
+
// (without this the CLI silently no-ops when run through a symlink).
|
|
407
|
+
try {
|
|
408
|
+
const here = fs.realpathSync(fileURLToPath(import.meta.url));
|
|
409
|
+
const argv = fs.realpathSync(path.resolve(process.argv[1]));
|
|
410
|
+
return here === argv;
|
|
411
|
+
} catch {
|
|
412
|
+
return false;
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
if (_isCliEntry() || process.argv[1] === _HERE) {
|
|
398
417
|
try {
|
|
399
418
|
process.exitCode = main(process.argv.slice(2));
|
|
400
419
|
} catch (exc) {
|
|
@@ -328,10 +328,29 @@ export function main(argv: string[] | null = null, options: MainOptions = {}): n
|
|
|
328
328
|
// CLI entry guard — set process.exitCode; never call process.exit().
|
|
329
329
|
// Python: `if __name__ == "__main__": sys.exit(main())`.
|
|
330
330
|
const _HERE = fileURLToPath(import.meta.url);
|
|
331
|
-
|
|
332
|
-
process.argv[1]
|
|
333
|
-
|
|
334
|
-
|
|
331
|
+
function _isCliEntry(): boolean {
|
|
332
|
+
if (process.argv[1] === undefined) {
|
|
333
|
+
return false;
|
|
334
|
+
}
|
|
335
|
+
const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
|
|
336
|
+
if (import.meta.url === argvUrl) {
|
|
337
|
+
return true;
|
|
338
|
+
}
|
|
339
|
+
// A symlinked invocation (e.g. via an installed `.augment/` projection,
|
|
340
|
+
// or macOS /var → /private/var temp dirs) makes the raw URLs differ:
|
|
341
|
+
// import.meta.url is the resolved real path while argv[1] keeps the
|
|
342
|
+
// symlink path. Compare realpaths so the entry guard still fires
|
|
343
|
+
// (without this the CLI silently no-ops when run through a symlink).
|
|
344
|
+
try {
|
|
345
|
+
const here = fs.realpathSync(fileURLToPath(import.meta.url));
|
|
346
|
+
const argv = fs.realpathSync(path.resolve(process.argv[1]));
|
|
347
|
+
return here === argv;
|
|
348
|
+
} catch {
|
|
349
|
+
return false;
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
if (_isCliEntry() || process.argv[1] === _HERE) {
|
|
335
354
|
try {
|
|
336
355
|
process.exitCode = main();
|
|
337
356
|
} catch (exc) {
|
|
@@ -365,10 +365,29 @@ export function main(argv: string[] | null = null, options: MainOptions = {}): n
|
|
|
365
365
|
// CLI entry guard — set process.exitCode; never call process.exit().
|
|
366
366
|
// Python: `if __name__ == "__main__": sys.exit(main(sys.argv[1:]))`.
|
|
367
367
|
const _HERE = fileURLToPath(import.meta.url);
|
|
368
|
-
|
|
369
|
-
process.argv[1]
|
|
370
|
-
|
|
371
|
-
|
|
368
|
+
function _isCliEntry(): boolean {
|
|
369
|
+
if (process.argv[1] === undefined) {
|
|
370
|
+
return false;
|
|
371
|
+
}
|
|
372
|
+
const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
|
|
373
|
+
if (import.meta.url === argvUrl) {
|
|
374
|
+
return true;
|
|
375
|
+
}
|
|
376
|
+
// A symlinked invocation (e.g. via an installed `.augment/` projection,
|
|
377
|
+
// or macOS /var → /private/var temp dirs) makes the raw URLs differ:
|
|
378
|
+
// import.meta.url is the resolved real path while argv[1] keeps the
|
|
379
|
+
// symlink path. Compare realpaths so the entry guard still fires
|
|
380
|
+
// (without this the CLI silently no-ops when run through a symlink).
|
|
381
|
+
try {
|
|
382
|
+
const here = fs.realpathSync(fileURLToPath(import.meta.url));
|
|
383
|
+
const argv = fs.realpathSync(path.resolve(process.argv[1]));
|
|
384
|
+
return here === argv;
|
|
385
|
+
} catch {
|
|
386
|
+
return false;
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
if (_isCliEntry() || process.argv[1] === _HERE) {
|
|
372
391
|
try {
|
|
373
392
|
process.exitCode = main(process.argv.slice(2));
|
|
374
393
|
} catch (exc) {
|