@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
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
*/
|
|
28
28
|
import fs from "node:fs";
|
|
29
29
|
import path from "node:path";
|
|
30
|
-
import { pathToFileURL } from "node:url";
|
|
30
|
+
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
31
31
|
|
|
32
32
|
import {
|
|
33
33
|
shlexSplit,
|
|
@@ -220,9 +220,28 @@ export function main(): number {
|
|
|
220
220
|
return EXIT_WARN;
|
|
221
221
|
}
|
|
222
222
|
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
223
|
+
function _isCliEntry(): boolean {
|
|
224
|
+
if (process.argv[1] === undefined) {
|
|
225
|
+
return false;
|
|
226
|
+
}
|
|
227
|
+
const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
|
|
228
|
+
if (import.meta.url === argvUrl) {
|
|
229
|
+
return true;
|
|
230
|
+
}
|
|
231
|
+
// A symlinked invocation (e.g. via an installed `.augment/` projection,
|
|
232
|
+
// or macOS /var → /private/var temp dirs) makes the raw URLs differ:
|
|
233
|
+
// import.meta.url is the resolved real path while argv[1] keeps the
|
|
234
|
+
// symlink path. Compare realpaths so the entry guard still fires
|
|
235
|
+
// (without this the CLI silently no-ops when run through a symlink).
|
|
236
|
+
try {
|
|
237
|
+
const here = fs.realpathSync(fileURLToPath(import.meta.url));
|
|
238
|
+
const argv = fs.realpathSync(path.resolve(process.argv[1]));
|
|
239
|
+
return here === argv;
|
|
240
|
+
} catch {
|
|
241
|
+
return false;
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
if (_isCliEntry()) {
|
|
227
246
|
process.exit(main());
|
|
228
247
|
}
|
|
@@ -410,9 +410,30 @@ export function main(argv?: string[]): number {
|
|
|
410
410
|
return _final_exit_code(payload, args.strict);
|
|
411
411
|
}
|
|
412
412
|
|
|
413
|
+
function _isCliEntry(): boolean {
|
|
414
|
+
if (process.argv[1] === undefined) {
|
|
415
|
+
return false;
|
|
416
|
+
}
|
|
417
|
+
const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
|
|
418
|
+
if (import.meta.url === argvUrl) {
|
|
419
|
+
return true;
|
|
420
|
+
}
|
|
421
|
+
// A symlinked invocation (e.g. via an installed `.augment/` projection,
|
|
422
|
+
// or macOS /var → /private/var temp dirs) makes the raw URLs differ:
|
|
423
|
+
// import.meta.url is the resolved real path while argv[1] keeps the
|
|
424
|
+
// symlink path. Compare realpaths so the entry guard still fires
|
|
425
|
+
// (without this the CLI silently no-ops when run through a symlink).
|
|
426
|
+
try {
|
|
427
|
+
const here = fs.realpathSync(fileURLToPath(import.meta.url));
|
|
428
|
+
const argv = fs.realpathSync(path.resolve(process.argv[1]));
|
|
429
|
+
return here === argv;
|
|
430
|
+
} catch {
|
|
431
|
+
return false;
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
|
|
413
435
|
const isCliEntry =
|
|
414
|
-
|
|
415
|
-
import.meta.url === pathToFileURL(path.resolve(process.argv[1])).href;
|
|
436
|
+
_isCliEntry();
|
|
416
437
|
if (isCliEntry) {
|
|
417
438
|
process.exit(main(process.argv.slice(2)));
|
|
418
439
|
}
|
|
@@ -284,9 +284,30 @@ export function main(argv?: string[]): number {
|
|
|
284
284
|
return _final_exit_code(matrix, args.strict);
|
|
285
285
|
}
|
|
286
286
|
|
|
287
|
+
function _isCliEntry(): boolean {
|
|
288
|
+
if (process.argv[1] === undefined) {
|
|
289
|
+
return false;
|
|
290
|
+
}
|
|
291
|
+
const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
|
|
292
|
+
if (import.meta.url === argvUrl) {
|
|
293
|
+
return true;
|
|
294
|
+
}
|
|
295
|
+
// A symlinked invocation (e.g. via an installed `.augment/` projection,
|
|
296
|
+
// or macOS /var → /private/var temp dirs) makes the raw URLs differ:
|
|
297
|
+
// import.meta.url is the resolved real path while argv[1] keeps the
|
|
298
|
+
// symlink path. Compare realpaths so the entry guard still fires
|
|
299
|
+
// (without this the CLI silently no-ops when run through a symlink).
|
|
300
|
+
try {
|
|
301
|
+
const here = fs.realpathSync(fileURLToPath(import.meta.url));
|
|
302
|
+
const argv = fs.realpathSync(path.resolve(process.argv[1]));
|
|
303
|
+
return here === argv;
|
|
304
|
+
} catch {
|
|
305
|
+
return false;
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
|
|
287
309
|
const isCliEntry =
|
|
288
|
-
|
|
289
|
-
import.meta.url === pathToFileURL(path.resolve(process.argv[1])).href;
|
|
310
|
+
_isCliEntry();
|
|
290
311
|
if (isCliEntry) {
|
|
291
312
|
process.exit(main(process.argv.slice(2)));
|
|
292
313
|
}
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
*/
|
|
29
29
|
import fs from "node:fs";
|
|
30
30
|
import path from "node:path";
|
|
31
|
-
import { pathToFileURL } from "node:url";
|
|
31
|
+
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
32
32
|
|
|
33
33
|
const SETTINGS_FILE = ".agent-settings.yml";
|
|
34
34
|
const EXIT_ALLOW = 0;
|
|
@@ -277,9 +277,28 @@ function _readStdin(): string {
|
|
|
277
277
|
return fs.readFileSync(0, "utf-8");
|
|
278
278
|
}
|
|
279
279
|
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
280
|
+
function _isCliEntry(): boolean {
|
|
281
|
+
if (process.argv[1] === undefined) {
|
|
282
|
+
return false;
|
|
283
|
+
}
|
|
284
|
+
const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
|
|
285
|
+
if (import.meta.url === argvUrl) {
|
|
286
|
+
return true;
|
|
287
|
+
}
|
|
288
|
+
// A symlinked invocation (e.g. via an installed `.augment/` projection,
|
|
289
|
+
// or macOS /var → /private/var temp dirs) makes the raw URLs differ:
|
|
290
|
+
// import.meta.url is the resolved real path while argv[1] keeps the
|
|
291
|
+
// symlink path. Compare realpaths so the entry guard still fires
|
|
292
|
+
// (without this the CLI silently no-ops when run through a symlink).
|
|
293
|
+
try {
|
|
294
|
+
const here = fs.realpathSync(fileURLToPath(import.meta.url));
|
|
295
|
+
const argv = fs.realpathSync(path.resolve(process.argv[1]));
|
|
296
|
+
return here === argv;
|
|
297
|
+
} catch {
|
|
298
|
+
return false;
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
if (_isCliEntry()) {
|
|
284
303
|
process.exit(main());
|
|
285
304
|
}
|
package/src/scripts/install
CHANGED
|
@@ -27,6 +27,9 @@
|
|
|
27
27
|
# the comma-separated values are unioned.
|
|
28
28
|
# --list-tools Print supported tool IDs with descriptions, then exit
|
|
29
29
|
# --yes, -y Non-interactive mode: do not prompt (default for non-TTY)
|
|
30
|
+
# --no-ui Unattended install: never launch the browser setup
|
|
31
|
+
# wizard and skip the terminal tool picker (tools default
|
|
32
|
+
# to all). Used by `agent-config upgrade`.
|
|
30
33
|
# --force Overwrite existing bridge files
|
|
31
34
|
# --dry-run Show what payload sync would do (does not run bridges)
|
|
32
35
|
# --verbose Detailed payload sync output
|
|
@@ -95,12 +98,13 @@ MINIMAL=false
|
|
|
95
98
|
VALIDATE_ONLY=false
|
|
96
99
|
FLEET_CONFIG=""
|
|
97
100
|
USER_TYPE=""
|
|
101
|
+
NO_UI=false
|
|
98
102
|
|
|
99
103
|
# Single source of truth for valid tool IDs (also referenced by install.sh / install.py).
|
|
100
104
|
VALID_TOOLS="claude-code claude-desktop cursor windsurf cline gemini-cli copilot augment aider codex roocode continue kilocode zed jetbrains kiro all"
|
|
101
105
|
|
|
102
106
|
show_help() {
|
|
103
|
-
sed -n '3,
|
|
107
|
+
sed -n '3,61p' "${BASH_SOURCE[0]}" | sed 's/^# \{0,1\}//'
|
|
104
108
|
}
|
|
105
109
|
|
|
106
110
|
list_tools() {
|
|
@@ -167,6 +171,7 @@ while [[ $# -gt 0 ]]; do
|
|
|
167
171
|
--ai=*) TOOLS="${TOOLS:+$TOOLS,}${1#*=}"; TOOLS_EXPLICIT=true; shift ;;
|
|
168
172
|
--list-tools) LIST_TOOLS=true; shift ;;
|
|
169
173
|
--yes|-y) YES=true; shift ;;
|
|
174
|
+
--no-ui) NO_UI=true; shift ;;
|
|
170
175
|
--force) FORCE=true; shift ;;
|
|
171
176
|
--dry-run) DRY_RUN=true; shift ;;
|
|
172
177
|
--verbose) VERBOSE=true; shift ;;
|
|
@@ -194,6 +199,15 @@ if $LIST_TOOLS; then
|
|
|
194
199
|
exit 0
|
|
195
200
|
fi
|
|
196
201
|
|
|
202
|
+
# --no-ui = unattended install (the `agent-config upgrade` path). Export the
|
|
203
|
+
# suppression env so every downstream stage (install.ts honors both the flag
|
|
204
|
+
# and AGENT_CONFIG_NO_UI) skips the browser setup wizard — the wizard is an
|
|
205
|
+
# onboarding surface whose foreground server used to block `upgrade` until
|
|
206
|
+
# Ctrl-C.
|
|
207
|
+
if $NO_UI; then
|
|
208
|
+
export AGENT_CONFIG_NO_UI=1
|
|
209
|
+
fi
|
|
210
|
+
|
|
197
211
|
# road-to-global-only-install § Phase 3.3 — consumer-floor gate.
|
|
198
212
|
#
|
|
199
213
|
# Consumer installs are global-only (ADR-020). Explicit --scope=project
|
|
@@ -282,8 +296,8 @@ prompt_tools() {
|
|
|
282
296
|
# When an interactive global install will hand off to the browser wizard,
|
|
283
297
|
# the wizard is the single tool-selection surface — skip the terminal
|
|
284
298
|
# picker so it does not pre-empt (and, via TOOLS_EXPLICIT, suppress) the
|
|
285
|
-
# GUI. Mirrors install.py::_wizard_should_launch
|
|
286
|
-
#
|
|
299
|
+
# GUI. Mirrors install.py::_wizard_should_launch (the --no-ui flag is
|
|
300
|
+
# handled here too — it suppresses both the wizard and the picker).
|
|
287
301
|
# Headless paths (no TTY / CI / AGENT_CONFIG_NO_UI) still get the picker.
|
|
288
302
|
wizard_will_handle_tools=false
|
|
289
303
|
if $GLOBAL && [[ -t 0 && -t 1 && -z "${CI:-}" ]] \
|
|
@@ -291,8 +305,12 @@ if $GLOBAL && [[ -t 0 && -t 1 && -z "${CI:-}" ]] \
|
|
|
291
305
|
wizard_will_handle_tools=true
|
|
292
306
|
fi
|
|
293
307
|
|
|
308
|
+
# --no-ui also skips the terminal picker: the flag means "fully unattended"
|
|
309
|
+
# (its only caller today is `agent-config upgrade`, where a mid-upgrade
|
|
310
|
+
# prompt reads as a hang). Tools fall through to the "all" default below —
|
|
311
|
+
# the same effective selection the wizard-handoff path used.
|
|
294
312
|
if ! $MINIMAL && ! $TOOLS_EXPLICIT && ! $YES && ! $QUIET && ! $LIST_TOOLS \
|
|
295
|
-
&& [[ -t 0 && -t 1 ]] && ! $wizard_will_handle_tools; then
|
|
313
|
+
&& [[ -t 0 && -t 1 ]] && ! $wizard_will_handle_tools && ! $NO_UI; then
|
|
296
314
|
prompt_tools
|
|
297
315
|
TOOLS_EXPLICIT=true
|
|
298
316
|
fi
|
|
@@ -416,6 +434,7 @@ run_bridges() {
|
|
|
416
434
|
[[ -n "$CUSTOM_PATH" ]] && args+=(--custom-path="$CUSTOM_PATH")
|
|
417
435
|
$OFFLINE && args+=(--offline)
|
|
418
436
|
$MINIMAL && args+=(--minimal)
|
|
437
|
+
$NO_UI && args+=(--no-ui)
|
|
419
438
|
args+=(--tools="$TOOLS")
|
|
420
439
|
"${runner[@]}" "${args[@]}"
|
|
421
440
|
}
|
package/src/scripts/install.ts
CHANGED
|
@@ -62,7 +62,7 @@
|
|
|
62
62
|
* - `signal.SIGTERM`/`SIGKILL` + `os.kill(pid, 0)` liveness → `process.kill`.
|
|
63
63
|
*/
|
|
64
64
|
|
|
65
|
-
import { spawnSync } from 'node:child_process';
|
|
65
|
+
import { spawn, spawnSync, type ChildProcess } from 'node:child_process';
|
|
66
66
|
import * as crypto from 'node:crypto';
|
|
67
67
|
import * as fs from 'node:fs';
|
|
68
68
|
import * as os from 'node:os';
|
|
@@ -78,6 +78,7 @@ import * as global_deploy_inventory from './_lib/global_deploy_inventory.js';
|
|
|
78
78
|
import * as installed_tools from './_lib/installed_tools.js';
|
|
79
79
|
import * as user_global_paths from './_lib/user_global_paths.js';
|
|
80
80
|
import * as claude_desktop_bundler from './_lib/claude_desktop_bundler.js';
|
|
81
|
+
import * as claude_settings_hooks from './_lib/claude_settings_hooks.js';
|
|
81
82
|
import { find_project_root_with_anchor, load_agent_settings } from './_lib/agent_settings.js';
|
|
82
83
|
import { detect_module_roots } from './_lib/module_detection.js';
|
|
83
84
|
import {
|
|
@@ -2914,6 +2915,35 @@ function _deploy_global_content(
|
|
|
2914
2915
|
}
|
|
2915
2916
|
_emit_progress({ type: 'reaped', tool: tool_id, count: reaped.length });
|
|
2916
2917
|
results[tool_id] = [written_total, skipped_total, 'deployed', written_paths];
|
|
2918
|
+
|
|
2919
|
+
// Single-surface model (road-to-claude-code-single-surface): the
|
|
2920
|
+
// deterministic hook matrix registers directly in the user-scope
|
|
2921
|
+
// settings file — the marketplace plugin is no longer required for
|
|
2922
|
+
// hooks. Failure here must not sink the content deploy (hooks can
|
|
2923
|
+
// be re-wired via `agent-config refresh --global` / doctor).
|
|
2924
|
+
if (tool_id === 'claude-code') {
|
|
2925
|
+
try {
|
|
2926
|
+
const manifest = path.join(package_root, 'src', 'scripts', 'hook_manifest.yaml');
|
|
2927
|
+
const matrix = claude_settings_hooks.build_claude_hook_matrix(manifest);
|
|
2928
|
+
const res = claude_settings_hooks.ensure_managed_hooks(
|
|
2929
|
+
path.join(anchor, 'settings.json'),
|
|
2930
|
+
matrix,
|
|
2931
|
+
);
|
|
2932
|
+
if (!state.QUIET) {
|
|
2933
|
+
if (res.changed) {
|
|
2934
|
+
success(
|
|
2935
|
+
`claude-code: managed hooks registered in ~/.claude/settings.json ` +
|
|
2936
|
+
`(${res.events.length} event(s))`,
|
|
2937
|
+
);
|
|
2938
|
+
} else {
|
|
2939
|
+
skip('claude-code: managed hooks already registered');
|
|
2940
|
+
}
|
|
2941
|
+
}
|
|
2942
|
+
} catch (e) {
|
|
2943
|
+
warn(`claude-code: managed-hook registration failed — ${String(e)}`);
|
|
2944
|
+
_emit_progress({ type: 'hooks_failed', tool: tool_id, error: String(e) });
|
|
2945
|
+
}
|
|
2946
|
+
}
|
|
2917
2947
|
}
|
|
2918
2948
|
return results;
|
|
2919
2949
|
}
|
|
@@ -3247,7 +3277,7 @@ function install_global(
|
|
|
3247
3277
|
|
|
3248
3278
|
if (!state.QUIET) {
|
|
3249
3279
|
process.stdout.write('\n');
|
|
3250
|
-
success(
|
|
3280
|
+
success(`Global install completed (v${installed_version}).`);
|
|
3251
3281
|
process.stdout.write('\n');
|
|
3252
3282
|
}
|
|
3253
3283
|
return 0;
|
|
@@ -3843,76 +3873,104 @@ function _wizard_spawn(project_root: string, pass_project_root: boolean = true):
|
|
|
3843
3873
|
}
|
|
3844
3874
|
const env = { ...process.env };
|
|
3845
3875
|
|
|
3846
|
-
// The
|
|
3847
|
-
//
|
|
3848
|
-
//
|
|
3849
|
-
//
|
|
3850
|
-
//
|
|
3851
|
-
//
|
|
3876
|
+
// The wizard child is a long-running local server — it must NOT keep the
|
|
3877
|
+
// installer process in the foreground (a blocking wait here forced users
|
|
3878
|
+
// to Ctrl-C out of `agent-config global` / `upgrade`, which then reported
|
|
3879
|
+
// the step as failed). Spawn it detached, poll for the WIZARD_READY line,
|
|
3880
|
+
// print the banner + open the browser, and return while the server keeps
|
|
3881
|
+
// running in the background.
|
|
3852
3882
|
return _wizard_run_sync(cmd, env, cli);
|
|
3853
3883
|
}
|
|
3854
3884
|
|
|
3855
3885
|
/**
|
|
3856
|
-
*
|
|
3857
|
-
*
|
|
3858
|
-
*
|
|
3859
|
-
* the
|
|
3860
|
-
*
|
|
3861
|
-
*
|
|
3862
|
-
*
|
|
3863
|
-
*
|
|
3864
|
-
*
|
|
3865
|
-
* twin runs the child to completion under the same total budget and surfaces
|
|
3866
|
-
* the same banner/fallback text. This path is network/subprocess-bound and is
|
|
3867
|
-
* NOT exercised by the deterministic golden tests (guarded behind the TTY +
|
|
3868
|
-
* dist-present gates).
|
|
3886
|
+
* Detached wizard launch mirroring `_wizard_spawn` + `_wizard_await_ready`.
|
|
3887
|
+
* The child (a local server that keeps running until the wizard finishes) is
|
|
3888
|
+
* spawned detached with its output redirected to a temp log; a bounded poll
|
|
3889
|
+
* scans the log for the WIZARD_READY line, then prints the banner and opens
|
|
3890
|
+
* the browser. The installer returns immediately after — it never blocks on
|
|
3891
|
+
* the server's lifetime. A child that exits or stays silent past the budget
|
|
3892
|
+
* falls through to the fallback message. This path is network/subprocess-
|
|
3893
|
+
* bound and is NOT exercised by the deterministic golden tests (guarded
|
|
3894
|
+
* behind the TTY + dist-present gates).
|
|
3869
3895
|
*/
|
|
3870
3896
|
function _wizard_run_sync(cmd: string[], env: NodeJS.ProcessEnv, cli: string): number {
|
|
3871
3897
|
const total = _WIZARD_TIMEOUTS.reduce((a, b) => a + b, 0);
|
|
3872
|
-
|
|
3898
|
+
const log_path = path.join(
|
|
3899
|
+
os.tmpdir(),
|
|
3900
|
+
`agent-config-wizard-${process.pid}-${Date.now()}.log`,
|
|
3901
|
+
);
|
|
3902
|
+
let child: ChildProcess;
|
|
3903
|
+
let log_fd: number | null = null;
|
|
3873
3904
|
try {
|
|
3874
|
-
|
|
3905
|
+
log_fd = fs.openSync(log_path, 'w');
|
|
3906
|
+
child = spawn(cmd[0] as string, cmd.slice(1), {
|
|
3875
3907
|
env,
|
|
3876
|
-
|
|
3877
|
-
|
|
3878
|
-
maxBuffer: 64 * 1024 * 1024,
|
|
3908
|
+
detached: true,
|
|
3909
|
+
stdio: ['ignore', log_fd, log_fd],
|
|
3879
3910
|
});
|
|
3911
|
+
// ENOENT & friends surface as an async 'error' event on a detached
|
|
3912
|
+
// spawn — swallow it here; the readiness poll below reports the
|
|
3913
|
+
// failure via the fallback message instead of crashing the installer.
|
|
3914
|
+
child.on('error', () => {});
|
|
3915
|
+
child.unref();
|
|
3880
3916
|
} catch (exc) {
|
|
3881
3917
|
process.stdout.write(
|
|
3882
3918
|
`(Wizard failed to start: ${String(exc)}; run 'node ${cli} install --no-open' manually.)\n`,
|
|
3883
3919
|
);
|
|
3884
3920
|
return 0;
|
|
3921
|
+
} finally {
|
|
3922
|
+
if (log_fd !== null) {
|
|
3923
|
+
try {
|
|
3924
|
+
fs.closeSync(log_fd);
|
|
3925
|
+
} catch {
|
|
3926
|
+
/* already closed */
|
|
3927
|
+
}
|
|
3928
|
+
}
|
|
3885
3929
|
}
|
|
3886
|
-
|
|
3887
|
-
|
|
3888
|
-
|
|
3889
|
-
|
|
3890
|
-
|
|
3891
|
-
|
|
3892
|
-
|
|
3930
|
+
|
|
3931
|
+
const read_log = (): string => {
|
|
3932
|
+
try {
|
|
3933
|
+
return readText(log_path);
|
|
3934
|
+
} catch {
|
|
3935
|
+
return '';
|
|
3936
|
+
}
|
|
3937
|
+
};
|
|
3938
|
+
const deadline = Date.now() + total * 1000;
|
|
3893
3939
|
let matched_url: string | null = null;
|
|
3894
|
-
for (
|
|
3895
|
-
const
|
|
3896
|
-
|
|
3897
|
-
|
|
3898
|
-
|
|
3940
|
+
for (;;) {
|
|
3941
|
+
for (const line of read_log().split('\n')) {
|
|
3942
|
+
const m = _WIZARD_READY_RE.exec(line + '\n');
|
|
3943
|
+
if (m) {
|
|
3944
|
+
matched_url = m[1] as string;
|
|
3945
|
+
break;
|
|
3946
|
+
}
|
|
3899
3947
|
}
|
|
3948
|
+
if (matched_url !== null) break;
|
|
3949
|
+
const pid = child.pid;
|
|
3950
|
+
if (pid === undefined || !pidAlive(pid)) break; // child died before ready
|
|
3951
|
+
if (Date.now() >= deadline) break;
|
|
3952
|
+
sleepMs(200);
|
|
3900
3953
|
}
|
|
3901
3954
|
if (matched_url === null) {
|
|
3902
|
-
const
|
|
3903
|
-
|
|
3955
|
+
const logLines = read_log()
|
|
3956
|
+
.split('\n')
|
|
3957
|
+
.filter((l) => l !== '');
|
|
3958
|
+
const tail = logLines.length ? logLines.slice(-20).join('\n ') : '(no output captured)';
|
|
3904
3959
|
process.stdout.write(
|
|
3905
|
-
`(Wizard server
|
|
3960
|
+
`(Wizard server did not report ready within ${Math.trunc(total)}s; ` +
|
|
3906
3961
|
`run 'node ${cli} install --no-open' manually.)\n` +
|
|
3907
|
-
` Last
|
|
3962
|
+
` Last output:\n ${tail}\n`,
|
|
3908
3963
|
);
|
|
3909
3964
|
return 0;
|
|
3910
3965
|
}
|
|
3911
3966
|
process.stdout.write('\n');
|
|
3912
3967
|
process.stdout.write(`Setup wizard ready: ${matched_url}\n`);
|
|
3913
3968
|
_openBrowser(matched_url);
|
|
3914
|
-
process.stdout.write(
|
|
3915
|
-
|
|
3969
|
+
process.stdout.write(
|
|
3970
|
+
'(Wizard server keeps running in the background — finish the wizard in the ' +
|
|
3971
|
+
'browser tab; the next install run stops any stale server.)\n',
|
|
3972
|
+
);
|
|
3973
|
+
return 0;
|
|
3916
3974
|
}
|
|
3917
3975
|
|
|
3918
3976
|
/** `webbrowser.open` — best-effort platform open; never fatal. */
|
|
@@ -1098,7 +1098,29 @@ export function main(argv: string[] | null = null): number {
|
|
|
1098
1098
|
return 0;
|
|
1099
1099
|
}
|
|
1100
1100
|
|
|
1101
|
-
|
|
1101
|
+
function _isCliEntry(): boolean {
|
|
1102
|
+
if (process.argv[1] === undefined) {
|
|
1103
|
+
return false;
|
|
1104
|
+
}
|
|
1105
|
+
const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
|
|
1106
|
+
if (import.meta.url === argvUrl) {
|
|
1107
|
+
return true;
|
|
1108
|
+
}
|
|
1109
|
+
// A symlinked invocation (e.g. via an installed `.augment/` projection,
|
|
1110
|
+
// or macOS /var → /private/var temp dirs) makes the raw URLs differ:
|
|
1111
|
+
// import.meta.url is the resolved real path while argv[1] keeps the
|
|
1112
|
+
// symlink path. Compare realpaths so the entry guard still fires
|
|
1113
|
+
// (without this the CLI silently no-ops when run through a symlink).
|
|
1114
|
+
try {
|
|
1115
|
+
const here = fs.realpathSync(fileURLToPath(import.meta.url));
|
|
1116
|
+
const argv = fs.realpathSync(path.resolve(process.argv[1]));
|
|
1117
|
+
return here === argv;
|
|
1118
|
+
} catch {
|
|
1119
|
+
return false;
|
|
1120
|
+
}
|
|
1121
|
+
}
|
|
1122
|
+
|
|
1123
|
+
const _isMain = _isCliEntry();
|
|
1102
1124
|
if (_isMain) {
|
|
1103
1125
|
process.exitCode = main();
|
|
1104
1126
|
}
|
|
@@ -315,6 +315,28 @@ function _isPySpace(ch: string): boolean {
|
|
|
315
315
|
return /\s/u.test(ch);
|
|
316
316
|
}
|
|
317
317
|
|
|
318
|
-
|
|
318
|
+
function _isCliEntry(): boolean {
|
|
319
|
+
if (process.argv[1] === undefined) {
|
|
320
|
+
return false;
|
|
321
|
+
}
|
|
322
|
+
const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
|
|
323
|
+
if (import.meta.url === argvUrl) {
|
|
324
|
+
return true;
|
|
325
|
+
}
|
|
326
|
+
// A symlinked invocation (e.g. via an installed `.augment/` projection,
|
|
327
|
+
// or macOS /var → /private/var temp dirs) makes the raw URLs differ:
|
|
328
|
+
// import.meta.url is the resolved real path while argv[1] keeps the
|
|
329
|
+
// symlink path. Compare realpaths so the entry guard still fires
|
|
330
|
+
// (without this the CLI silently no-ops when run through a symlink).
|
|
331
|
+
try {
|
|
332
|
+
const here = fs.realpathSync(fileURLToPath(import.meta.url));
|
|
333
|
+
const argv = fs.realpathSync(path.resolve(process.argv[1]));
|
|
334
|
+
return here === argv;
|
|
335
|
+
} catch {
|
|
336
|
+
return false;
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
if (_isCliEntry()) {
|
|
319
341
|
process.exitCode = main();
|
|
320
342
|
}
|
|
@@ -514,7 +514,29 @@ function _stableSort<T>(items: T[], cmp: (a: T, b: T) => number): T[] {
|
|
|
514
514
|
return indexed.map((e) => e.item);
|
|
515
515
|
}
|
|
516
516
|
|
|
517
|
-
|
|
517
|
+
function _isCliEntry(): boolean {
|
|
518
|
+
if (process.argv[1] === undefined) {
|
|
519
|
+
return false;
|
|
520
|
+
}
|
|
521
|
+
const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
|
|
522
|
+
if (import.meta.url === argvUrl) {
|
|
523
|
+
return true;
|
|
524
|
+
}
|
|
525
|
+
// A symlinked invocation (e.g. via an installed `.augment/` projection,
|
|
526
|
+
// or macOS /var → /private/var temp dirs) makes the raw URLs differ:
|
|
527
|
+
// import.meta.url is the resolved real path while argv[1] keeps the
|
|
528
|
+
// symlink path. Compare realpaths so the entry guard still fires
|
|
529
|
+
// (without this the CLI silently no-ops when run through a symlink).
|
|
530
|
+
try {
|
|
531
|
+
const here = fs.realpathSync(fileURLToPath(import.meta.url));
|
|
532
|
+
const argv = fs.realpathSync(path.resolve(process.argv[1]));
|
|
533
|
+
return here === argv;
|
|
534
|
+
} catch {
|
|
535
|
+
return false;
|
|
536
|
+
}
|
|
537
|
+
}
|
|
538
|
+
|
|
539
|
+
if (_isCliEntry()) {
|
|
518
540
|
try {
|
|
519
541
|
process.exitCode = main();
|
|
520
542
|
} catch (e) {
|
|
@@ -214,10 +214,29 @@ function _ljust(s: string, width: number): string {
|
|
|
214
214
|
return pad > 0 ? s + ' '.repeat(pad) : s;
|
|
215
215
|
}
|
|
216
216
|
|
|
217
|
-
|
|
218
|
-
process.argv[1]
|
|
219
|
-
|
|
220
|
-
|
|
217
|
+
function _isCliEntry(): boolean {
|
|
218
|
+
if (process.argv[1] === undefined) {
|
|
219
|
+
return false;
|
|
220
|
+
}
|
|
221
|
+
const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
|
|
222
|
+
if (import.meta.url === argvUrl) {
|
|
223
|
+
return true;
|
|
224
|
+
}
|
|
225
|
+
// A symlinked invocation (e.g. via an installed `.augment/` projection,
|
|
226
|
+
// or macOS /var → /private/var temp dirs) makes the raw URLs differ:
|
|
227
|
+
// import.meta.url is the resolved real path while argv[1] keeps the
|
|
228
|
+
// symlink path. Compare realpaths so the entry guard still fires
|
|
229
|
+
// (without this the CLI silently no-ops when run through a symlink).
|
|
230
|
+
try {
|
|
231
|
+
const here = fs.realpathSync(fileURLToPath(import.meta.url));
|
|
232
|
+
const argv = fs.realpathSync(path.resolve(process.argv[1]));
|
|
233
|
+
return here === argv;
|
|
234
|
+
} catch {
|
|
235
|
+
return false;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
if (_isCliEntry() || process.argv[1] === _HERE) {
|
|
221
240
|
try {
|
|
222
241
|
process.exitCode = main();
|
|
223
242
|
} catch (err) {
|
package/src/scripts/janitor.ts
CHANGED
|
@@ -248,10 +248,29 @@ function main(argv?: readonly string[]): number {
|
|
|
248
248
|
return 0;
|
|
249
249
|
}
|
|
250
250
|
|
|
251
|
-
|
|
252
|
-
process.argv[1]
|
|
253
|
-
|
|
254
|
-
|
|
251
|
+
function _isCliEntry(): boolean {
|
|
252
|
+
if (process.argv[1] === undefined) {
|
|
253
|
+
return false;
|
|
254
|
+
}
|
|
255
|
+
const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
|
|
256
|
+
if (import.meta.url === argvUrl) {
|
|
257
|
+
return true;
|
|
258
|
+
}
|
|
259
|
+
// A symlinked invocation (e.g. via an installed `.augment/` projection,
|
|
260
|
+
// or macOS /var → /private/var temp dirs) makes the raw URLs differ:
|
|
261
|
+
// import.meta.url is the resolved real path while argv[1] keeps the
|
|
262
|
+
// symlink path. Compare realpaths so the entry guard still fires
|
|
263
|
+
// (without this the CLI silently no-ops when run through a symlink).
|
|
264
|
+
try {
|
|
265
|
+
const here = fs.realpathSync(fileURLToPath(import.meta.url));
|
|
266
|
+
const argv = fs.realpathSync(path.resolve(process.argv[1]));
|
|
267
|
+
return here === argv;
|
|
268
|
+
} catch {
|
|
269
|
+
return false;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
if (_isCliEntry() || process.argv[1] === _HERE) {
|
|
255
274
|
process.exit(main());
|
|
256
275
|
}
|
|
257
276
|
|
|
@@ -36,7 +36,7 @@ import { spawnSync } from 'node:child_process';
|
|
|
36
36
|
import * as fs from 'node:fs';
|
|
37
37
|
import * as path from 'node:path';
|
|
38
38
|
import process from 'node:process';
|
|
39
|
-
import { pathToFileURL } from 'node:url';
|
|
39
|
+
import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
40
40
|
|
|
41
41
|
import type { SettingsDict, SettingsValue } from './_lib/agent_settings.js';
|
|
42
42
|
import { write_atomic } from './_lib/fs_atomic.js';
|
|
@@ -1097,8 +1097,30 @@ function _repoRoot(): string {
|
|
|
1097
1097
|
return path.resolve(path.dirname(_thisFile()), '..', '..');
|
|
1098
1098
|
}
|
|
1099
1099
|
|
|
1100
|
+
function _isCliEntry(): boolean {
|
|
1101
|
+
if (process.argv[1] === undefined) {
|
|
1102
|
+
return false;
|
|
1103
|
+
}
|
|
1104
|
+
const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
|
|
1105
|
+
if (import.meta.url === argvUrl) {
|
|
1106
|
+
return true;
|
|
1107
|
+
}
|
|
1108
|
+
// A symlinked invocation (e.g. via an installed `.augment/` projection,
|
|
1109
|
+
// or macOS /var → /private/var temp dirs) makes the raw URLs differ:
|
|
1110
|
+
// import.meta.url is the resolved real path while argv[1] keeps the
|
|
1111
|
+
// symlink path. Compare realpaths so the entry guard still fires
|
|
1112
|
+
// (without this the CLI silently no-ops when run through a symlink).
|
|
1113
|
+
try {
|
|
1114
|
+
const here = fs.realpathSync(fileURLToPath(import.meta.url));
|
|
1115
|
+
const argv = fs.realpathSync(path.resolve(process.argv[1]));
|
|
1116
|
+
return here === argv;
|
|
1117
|
+
} catch {
|
|
1118
|
+
return false;
|
|
1119
|
+
}
|
|
1120
|
+
}
|
|
1121
|
+
|
|
1100
1122
|
const _isMain =
|
|
1101
|
-
|
|
1123
|
+
_isCliEntry();
|
|
1102
1124
|
if (_isMain) {
|
|
1103
1125
|
// Mirror `raise SystemExit(main())`.
|
|
1104
1126
|
process.exit(main());
|