@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
package/src/scripts/release.ts
CHANGED
|
@@ -8,16 +8,27 @@
|
|
|
8
8
|
* subprocess argv/cwd/env. No behaviour changes — latent quirks are
|
|
9
9
|
* replicated and flagged inline, not fixed.
|
|
10
10
|
*
|
|
11
|
-
* Invoked via `task release
|
|
12
|
-
*
|
|
13
|
-
*
|
|
11
|
+
* Invoked via `task release` (interactive, local) OR
|
|
12
|
+
* `.github/workflows/release.yml` (unattended, triggered by merging a PR
|
|
13
|
+
* labeled `release` / `release:major` / `release:minor` / `release:patch`
|
|
14
|
+
* — pass `--ci`). Both entry points share this one pipeline; `--ci` only
|
|
15
|
+
* changes the gh-auth probe (GITHUB_TOKEN, not a user token), adds a
|
|
16
|
+
* nothing-to-release short-circuit (see `nothing_to_release_ci`) so firing
|
|
17
|
+
* the label path twice is a clean no-op, and dispatch-chains
|
|
18
|
+
* release-guard.yml + publish-npm.yml + cloud-release.yml after the
|
|
19
|
+
* release (a bot-pushed tag does not trigger them — GitHub's GITHUB_TOKEN
|
|
20
|
+
* recursion guard). The bump
|
|
21
|
+
* level (major/minor/patch) is auto-detected from Conventional Commits
|
|
22
|
+
* since the last tag; pass `--as {major,minor,patch}` to force, or
|
|
23
|
+
* `--version X.Y.Z` to pin.
|
|
14
24
|
*
|
|
15
25
|
* Pipeline:
|
|
16
26
|
* 1. Preflight — on main, clean tree, origin in sync, gh available,
|
|
17
27
|
* target tag doesn't exist yet.
|
|
18
28
|
* 2. Plan — compute new version, parse Conventional Commits
|
|
19
29
|
* since the last tag, render CHANGELOG section.
|
|
20
|
-
* 3. Confirm — show preview, ask once (skippable with --yes
|
|
30
|
+
* 3. Confirm — show preview, ask once (skippable with --yes;
|
|
31
|
+
* `--ci` always needs --yes — CI has no terminal).
|
|
21
32
|
* 4. Branch + bump — create `release/X.Y.Z`, update package.json,
|
|
22
33
|
* .claude-plugin/marketplace.json, CHANGELOG.md,
|
|
23
34
|
* then run `task release-prepare` so pack
|
|
@@ -27,15 +38,22 @@
|
|
|
27
38
|
* 5. Commit + push — `release: X.Y.Z`, push branch, open PR.
|
|
28
39
|
* 6. Wait for CI — `gh pr checks --watch` (skippable with --no-wait).
|
|
29
40
|
* 7. Merge — `gh pr merge --merge --delete-branch`.
|
|
30
|
-
* 8. Tag main — fast-forward main, tag the merge commit,
|
|
31
|
-
*
|
|
32
|
-
*
|
|
41
|
+
* 8. Tag main — fast-forward main, tag the merge commit, push
|
|
42
|
+
* the tag (triggers publish-npm.yml — except
|
|
43
|
+
* under `--ci`, see step 9).
|
|
44
|
+
* 9. GitHub Release — `gh release create X.Y.Z --notes <changelog>`;
|
|
45
|
+
* under `--ci`, also dispatches
|
|
46
|
+
* release-guard.yml + publish-npm.yml +
|
|
47
|
+
* cloud-release.yml explicitly.
|
|
33
48
|
*
|
|
34
49
|
* Idempotency: pass `--resume` to recover from a partial failure. Each
|
|
35
50
|
* step then probes existing state (branch, commit, PR, tag, GitHub
|
|
36
51
|
* Release) and skips work that is already done, instead of erroring out.
|
|
37
52
|
* Without `--resume` the pipeline still mutates git/network state, so
|
|
38
|
-
* re-running on a dirty tree needs `--resume` (or a manual cleanup).
|
|
53
|
+
* re-running on a dirty tree needs `--resume` (or a manual cleanup). The
|
|
54
|
+
* two entry points guard against colliding with each other via these same
|
|
55
|
+
* probes plus the CI workflow's concurrency group — whichever starts
|
|
56
|
+
* second sees the other's in-progress state and skips or refuses cleanly.
|
|
39
57
|
* Each step prints what it's about to do before doing it, so a crash
|
|
40
58
|
* leaves a recoverable trail.
|
|
41
59
|
*
|
|
@@ -95,6 +113,7 @@ import type {
|
|
|
95
113
|
import {
|
|
96
114
|
CURRENT_ERA_BODY_CAP,
|
|
97
115
|
current_era_accumulated_body_size,
|
|
116
|
+
current_era_body_size,
|
|
98
117
|
current_era_insertion_point,
|
|
99
118
|
perform_split,
|
|
100
119
|
plan_split,
|
|
@@ -930,9 +949,13 @@ function set_template_pin(p: string, version: string): void {
|
|
|
930
949
|
* Tree cleanliness, gh auth, and `main` in-sync with origin are still
|
|
931
950
|
* enforced, so resuming has the same starting posture as a fresh run; only
|
|
932
951
|
* step-level outcomes differ.
|
|
952
|
+
*
|
|
953
|
+
* `opts.ci` swaps the gh-auth probe (see below) for the CI-mode variant —
|
|
954
|
+
* everything else is identical between the two entry points.
|
|
933
955
|
*/
|
|
934
|
-
function preflight(target: string, opts: { resume?: boolean } = {}): void {
|
|
956
|
+
function preflight(target: string, opts: { resume?: boolean; ci?: boolean } = {}): void {
|
|
935
957
|
const resume = opts.resume ?? false;
|
|
958
|
+
const ci = opts.ci ?? false;
|
|
936
959
|
for (const b of ['git', 'gh']) {
|
|
937
960
|
if (!have(b)) {
|
|
938
961
|
die(`'${b}' not found on PATH`);
|
|
@@ -943,9 +966,22 @@ function preflight(target: string, opts: { resume?: boolean } = {}): void {
|
|
|
943
966
|
// status` returns non-zero if *any* account in the keyring is broken, even
|
|
944
967
|
// when the active one is fine — so we'd rather ask "does the token the
|
|
945
968
|
// release will actually use work?" than parse multi-account status output.
|
|
946
|
-
|
|
969
|
+
//
|
|
970
|
+
// `--ci` runs under the GitHub Actions default GITHUB_TOKEN, which is an
|
|
971
|
+
// installation token, not a user token — `gh api user` returns 403
|
|
972
|
+
// ("Resource not accessible by integration") for it even when the token
|
|
973
|
+
// is perfectly valid for everything the release actually needs (repo
|
|
974
|
+
// read/write). Probe repo access instead, which the token always has.
|
|
975
|
+
const authCmd = ci
|
|
976
|
+
? ['gh', 'api', `repos/${REPO_SLUG}`, '--jq', '.id']
|
|
977
|
+
: ['gh', 'api', 'user', '--jq', '.login'];
|
|
978
|
+
const r = run(authCmd, { check: false, capture: true });
|
|
947
979
|
if (r.returncode !== 0) {
|
|
948
|
-
die(
|
|
980
|
+
die(
|
|
981
|
+
ci
|
|
982
|
+
? 'gh is not authenticated for this repo (GITHUB_TOKEN missing or invalid)'
|
|
983
|
+
: 'gh is not authenticated; run `gh auth login` first',
|
|
984
|
+
);
|
|
949
985
|
}
|
|
950
986
|
|
|
951
987
|
const branch = git(['rev-parse', '--abbrev-ref', 'HEAD'], { capture: true });
|
|
@@ -1159,11 +1195,12 @@ function _step(n: number, total: number, msg: string): void {
|
|
|
1159
1195
|
|
|
1160
1196
|
function execute(
|
|
1161
1197
|
plan: Plan,
|
|
1162
|
-
opts: { wait_for_checks: boolean; dry_run: boolean; resume?: boolean },
|
|
1198
|
+
opts: { wait_for_checks: boolean; dry_run: boolean; resume?: boolean; ci?: boolean },
|
|
1163
1199
|
): void {
|
|
1164
1200
|
const wait_for_checks = opts.wait_for_checks;
|
|
1165
1201
|
const dry_run = opts.dry_run;
|
|
1166
1202
|
const resume = opts.resume ?? false;
|
|
1203
|
+
const ci = opts.ci ?? false;
|
|
1167
1204
|
|
|
1168
1205
|
const branch = `release/${plan.target}`;
|
|
1169
1206
|
const total = 10;
|
|
@@ -1371,7 +1408,13 @@ function execute(
|
|
|
1371
1408
|
if (_release_exists(plan.target)) {
|
|
1372
1409
|
_step(9, total, `GitHub Release ${plan.target} already exists — skip`);
|
|
1373
1410
|
} else {
|
|
1374
|
-
_step(
|
|
1411
|
+
_step(
|
|
1412
|
+
9,
|
|
1413
|
+
total,
|
|
1414
|
+
ci
|
|
1415
|
+
? 'Create GitHub Release (tag push under GITHUB_TOKEN triggers nothing — dispatching next)'
|
|
1416
|
+
: 'Create GitHub Release (triggers publish-npm on the tag)',
|
|
1417
|
+
);
|
|
1375
1418
|
const notes = _cap_body(
|
|
1376
1419
|
plan.changelog_body || `Release ${plan.target}`,
|
|
1377
1420
|
GH_RELEASE_NOTES_LIMIT,
|
|
@@ -1387,6 +1430,23 @@ function execute(
|
|
|
1387
1430
|
'--notes',
|
|
1388
1431
|
notes,
|
|
1389
1432
|
]);
|
|
1433
|
+
|
|
1434
|
+
// ─── 9b. dispatch-chain the tag-triggered workflows (--ci only) ──────
|
|
1435
|
+
// release-guard.yml, publish-npm.yml, and cloud-release.yml all
|
|
1436
|
+
// trigger on `push: tags: [0-9]+.[0-9]+.[0-9]+`, but a tag pushed
|
|
1437
|
+
// with the default GITHUB_TOKEN does NOT fire other workflows
|
|
1438
|
+
// (GitHub's recursion guard). All three already accept a `tag`
|
|
1439
|
+
// input for exactly this recovery case, so dispatch them
|
|
1440
|
+
// explicitly instead of relying on an event that will never
|
|
1441
|
+
// arrive. Only reached here (not in the `_release_exists` skip
|
|
1442
|
+
// branch above), so a --resume re-run never re-dispatches a
|
|
1443
|
+
// publish that already happened.
|
|
1444
|
+
if (ci) {
|
|
1445
|
+
_step(9, total, 'Dispatch release-guard.yml + publish-npm.yml + cloud-release.yml for the tag');
|
|
1446
|
+
run(['gh', 'workflow', 'run', 'release-guard.yml', '--ref', MAIN_BRANCH, '-f', `tag=${plan.target}`]);
|
|
1447
|
+
run(['gh', 'workflow', 'run', 'publish-npm.yml', '--ref', MAIN_BRANCH, '-f', `tag=${plan.target}`]);
|
|
1448
|
+
run(['gh', 'workflow', 'run', 'cloud-release.yml', '--ref', MAIN_BRANCH, '-f', `tag=${plan.target}`]);
|
|
1449
|
+
}
|
|
1390
1450
|
}
|
|
1391
1451
|
|
|
1392
1452
|
// ─── 10. delete the merged release branch (local + remote) ───────────────
|
|
@@ -1430,6 +1490,7 @@ interface Args {
|
|
|
1430
1490
|
no_wait: boolean;
|
|
1431
1491
|
resume: boolean;
|
|
1432
1492
|
check_confirm: boolean;
|
|
1493
|
+
ci: boolean;
|
|
1433
1494
|
}
|
|
1434
1495
|
|
|
1435
1496
|
const PROG = 'release.py';
|
|
@@ -1437,9 +1498,15 @@ const PROG = 'release.py';
|
|
|
1437
1498
|
// (per-flag descriptions) is a documented divergence — argparse re-wraps it to
|
|
1438
1499
|
// the live terminal width; the tests assert the `usage:` token + exit code,
|
|
1439
1500
|
// not the body prose.
|
|
1501
|
+
//
|
|
1502
|
+
// `--ci` (added for the label-triggered GitHub Actions release path, see
|
|
1503
|
+
// `.github/workflows/release.yml`) is NOT part of the original argparse
|
|
1504
|
+
// contract this file mirrors byte-for-byte — it postdates the py2ts
|
|
1505
|
+
// migration (ADR-200) and has no Python counterpart. It is additive only:
|
|
1506
|
+
// every existing flag/behaviour is unchanged when `--ci` is absent.
|
|
1440
1507
|
const USAGE =
|
|
1441
1508
|
`usage: ${PROG} [-h] [--as {major,minor,patch}] [--version EXPLICIT] [--yes]\n` +
|
|
1442
|
-
' [--dry-run] [--no-wait] [--resume] [--check-confirm]\n';
|
|
1509
|
+
' [--dry-run] [--no-wait] [--resume] [--check-confirm] [--ci]\n';
|
|
1443
1510
|
|
|
1444
1511
|
function _argError(msg: string): never {
|
|
1445
1512
|
process.stderr.write(USAGE);
|
|
@@ -1456,6 +1523,7 @@ function _parse_args(argv: readonly string[]): Args {
|
|
|
1456
1523
|
no_wait: false,
|
|
1457
1524
|
resume: false,
|
|
1458
1525
|
check_confirm: false,
|
|
1526
|
+
ci: false,
|
|
1459
1527
|
};
|
|
1460
1528
|
|
|
1461
1529
|
const positionals: string[] = [];
|
|
@@ -1537,6 +1605,12 @@ function _parse_args(argv: readonly string[]): Args {
|
|
|
1537
1605
|
i += 1;
|
|
1538
1606
|
continue;
|
|
1539
1607
|
}
|
|
1608
|
+
if (flag === '--ci') {
|
|
1609
|
+
if (inlineVal !== null) _argError(`argument --ci: ignored explicit argument '${inlineVal}'`);
|
|
1610
|
+
args.ci = true;
|
|
1611
|
+
i += 1;
|
|
1612
|
+
continue;
|
|
1613
|
+
}
|
|
1540
1614
|
if (a.startsWith('-') && a !== '-') {
|
|
1541
1615
|
_argError(`unrecognized arguments: ${a}`);
|
|
1542
1616
|
}
|
|
@@ -1557,6 +1631,26 @@ function resolve_bump(override: string | null, commits: readonly Commit[]): stri
|
|
|
1557
1631
|
return infer_bump(commits);
|
|
1558
1632
|
}
|
|
1559
1633
|
|
|
1634
|
+
/**
|
|
1635
|
+
* Should a `--ci` run stop early with no release? Empty commits + no
|
|
1636
|
+
* explicit override + no bump override means `infer_bump` would fall back
|
|
1637
|
+
* to a hollow 'patch' bump — fine for a deliberate interactive `task
|
|
1638
|
+
* release`, but the label-triggered CI path (`.github/workflows/release.yml`)
|
|
1639
|
+
* can fire on a merged `release`-labeled PR whose commits were already
|
|
1640
|
+
* shipped by an earlier run in the same batch (the double-fire case). This
|
|
1641
|
+
* is the guard that makes firing the CI path twice a clean no-op instead of
|
|
1642
|
+
* a spurious empty release. The interactive path is unaffected — this only
|
|
1643
|
+
* ever returns true when `ci` is true.
|
|
1644
|
+
*/
|
|
1645
|
+
export function nothing_to_release_ci(
|
|
1646
|
+
ci: boolean,
|
|
1647
|
+
explicit: string | null,
|
|
1648
|
+
bump_override: string | null,
|
|
1649
|
+
commits: readonly Commit[],
|
|
1650
|
+
): boolean {
|
|
1651
|
+
return ci && explicit === null && bump_override === null && commits.length === 0;
|
|
1652
|
+
}
|
|
1653
|
+
|
|
1560
1654
|
const _RELEASE_BRANCH_RE = /^release\/(\d+\.\d+\.\d+)$/;
|
|
1561
1655
|
|
|
1562
1656
|
/**
|
|
@@ -1613,6 +1707,64 @@ function _detect_in_flight_target(): string | null {
|
|
|
1613
1707
|
return version;
|
|
1614
1708
|
}
|
|
1615
1709
|
|
|
1710
|
+
/** Outcome of the release-time era-split gate (pure, unit-testable). */
|
|
1711
|
+
export interface SplitDecision {
|
|
1712
|
+
split: SplitPlan | null;
|
|
1713
|
+
die_message: string | null;
|
|
1714
|
+
warning: string | null;
|
|
1715
|
+
}
|
|
1716
|
+
|
|
1717
|
+
/**
|
|
1718
|
+
* Decide whether releasing `target` must split the current era — measured
|
|
1719
|
+
* against the POST-release state the drift test will see (the era's raw
|
|
1720
|
+
* total today, because today's exempt newest section stops being exempt the
|
|
1721
|
+
* moment the new release section is prepended).
|
|
1722
|
+
*
|
|
1723
|
+
* - post-release body over the cap + minor/major target → split.
|
|
1724
|
+
* - post-release body over the cap + patch target:
|
|
1725
|
+
* - accumulated (prior releases beyond the newest) ALSO over the cap →
|
|
1726
|
+
* die — waiting cannot fix it; a minor release or manual split must
|
|
1727
|
+
* come first (pre-fix behaviour, unchanged).
|
|
1728
|
+
* - only the newest section busts the cap → proceed with a warning; a
|
|
1729
|
+
* patch cannot cross an era boundary, and blocking it was the failure
|
|
1730
|
+
* the newest-release exemption was introduced for. The drift gate will
|
|
1731
|
+
* be red until the next minor/major performs the split.
|
|
1732
|
+
*
|
|
1733
|
+
* Reads the CHANGELOG via the changelog_eras lib — tests point it at a
|
|
1734
|
+
* fixture with `_set_changelog_path` (plan_split reads the same file).
|
|
1735
|
+
*/
|
|
1736
|
+
export function resolve_split_decision(target: string): SplitDecision {
|
|
1737
|
+
const post_release_body = current_era_body_size();
|
|
1738
|
+
if (post_release_body <= CURRENT_ERA_BODY_CAP) {
|
|
1739
|
+
return { split: null, die_message: null, warning: null };
|
|
1740
|
+
}
|
|
1741
|
+
const candidate = plan_split(target);
|
|
1742
|
+
if (candidate !== null) {
|
|
1743
|
+
return { split: candidate, die_message: null, warning: null };
|
|
1744
|
+
}
|
|
1745
|
+
const accumulated = current_era_accumulated_body_size();
|
|
1746
|
+
if (accumulated > CURRENT_ERA_BODY_CAP) {
|
|
1747
|
+
return {
|
|
1748
|
+
split: null,
|
|
1749
|
+
die_message:
|
|
1750
|
+
`current era body is ${accumulated} lines (cap ` +
|
|
1751
|
+
`${CURRENT_ERA_BODY_CAP}) but release ${target} is a patch ` +
|
|
1752
|
+
`within the same era — split needs a minor/major bump. ` +
|
|
1753
|
+
'Cut a minor release or split CHANGELOG.md manually first.',
|
|
1754
|
+
warning: null,
|
|
1755
|
+
};
|
|
1756
|
+
}
|
|
1757
|
+
return {
|
|
1758
|
+
split: null,
|
|
1759
|
+
die_message: null,
|
|
1760
|
+
warning:
|
|
1761
|
+
`after this release the current era's accumulated body will be ` +
|
|
1762
|
+
`${post_release_body} lines (cap ${CURRENT_ERA_BODY_CAP}); a patch ` +
|
|
1763
|
+
`cannot split the era, so the changelog drift gate will be RED ` +
|
|
1764
|
+
`until the next minor/major release performs the split.`,
|
|
1765
|
+
};
|
|
1766
|
+
}
|
|
1767
|
+
|
|
1616
1768
|
function main(argv: readonly string[] | null = null): number {
|
|
1617
1769
|
const args = _parse_args(argv === null ? process.argv.slice(2) : argv);
|
|
1618
1770
|
|
|
@@ -1649,6 +1801,14 @@ function main(argv: readonly string[] | null = null): number {
|
|
|
1649
1801
|
|
|
1650
1802
|
const prev = latest_tag();
|
|
1651
1803
|
const commits = commits_since(prev);
|
|
1804
|
+
|
|
1805
|
+
if (nothing_to_release_ci(args.ci, args.explicit, args.bump_override, commits)) {
|
|
1806
|
+
process.stdout.write(
|
|
1807
|
+
`nothing to release — no commits since ${prev ?? 'the start of history'}; exiting cleanly.\n`,
|
|
1808
|
+
);
|
|
1809
|
+
return 0;
|
|
1810
|
+
}
|
|
1811
|
+
|
|
1652
1812
|
const bump = resolve_bump(args.bump_override, commits);
|
|
1653
1813
|
|
|
1654
1814
|
// Resume mode: prefer an existing `release/X.Y.Z` over computed bump,
|
|
@@ -1669,7 +1829,7 @@ function main(argv: readonly string[] | null = null): number {
|
|
|
1669
1829
|
parse_version(target);
|
|
1670
1830
|
|
|
1671
1831
|
if (!args.dry_run) {
|
|
1672
|
-
preflight(target, { resume: args.resume });
|
|
1832
|
+
preflight(target, { resume: args.resume, ci: args.ci });
|
|
1673
1833
|
}
|
|
1674
1834
|
|
|
1675
1835
|
const today = todayIso();
|
|
@@ -1678,30 +1838,33 @@ function main(argv: readonly string[] | null = null): number {
|
|
|
1678
1838
|
test_trend_line,
|
|
1679
1839
|
});
|
|
1680
1840
|
|
|
1681
|
-
// Era-split planning
|
|
1682
|
-
//
|
|
1683
|
-
//
|
|
1684
|
-
//
|
|
1685
|
-
//
|
|
1686
|
-
//
|
|
1687
|
-
//
|
|
1688
|
-
//
|
|
1689
|
-
//
|
|
1690
|
-
//
|
|
1691
|
-
|
|
1692
|
-
|
|
1693
|
-
|
|
1694
|
-
|
|
1695
|
-
|
|
1696
|
-
|
|
1697
|
-
|
|
1698
|
-
|
|
1699
|
-
|
|
1700
|
-
|
|
1701
|
-
|
|
1702
|
-
|
|
1703
|
-
|
|
1704
|
-
|
|
1841
|
+
// Era-split planning — gate on the POST-release view (2026-07-07 fix).
|
|
1842
|
+
// The drift test measures the era AFTER this release's section is
|
|
1843
|
+
// prepended: the new section becomes the exempt "newest", so everything
|
|
1844
|
+
// currently in the era — INCLUDING today's still-exempt newest section —
|
|
1845
|
+
// counts as accumulated the moment this release lands. That future
|
|
1846
|
+
// quantity equals today's raw era total (current_era_body_size). The old
|
|
1847
|
+
// gate measured current_era_accumulated_body_size (pre-release snapshot),
|
|
1848
|
+
// which is ~0 right after a big catch-up release — so the 8.0.0 and 8.1.0
|
|
1849
|
+
// releases each skipped the split and left main red on the drift gate
|
|
1850
|
+
// until a manual chore split. Same function as the drift test, wrong
|
|
1851
|
+
// moment in time.
|
|
1852
|
+
//
|
|
1853
|
+
// The newest-release exemption is still honoured where it matters: a
|
|
1854
|
+
// PATCH release cannot cross an era boundary, so when only the newest
|
|
1855
|
+
// section busts the cap (accumulated still under it) the patch proceeds
|
|
1856
|
+
// with a loud warning instead of dying — the split then fires on the
|
|
1857
|
+
// next minor/major. A patch on top of a genuinely over-cap accumulated
|
|
1858
|
+
// body still dies (unchanged), because that state is unfixable by
|
|
1859
|
+
// waiting and needs a minor release or a manual split.
|
|
1860
|
+
const decision = resolve_split_decision(target);
|
|
1861
|
+
if (decision.die_message !== null) {
|
|
1862
|
+
die(decision.die_message);
|
|
1863
|
+
}
|
|
1864
|
+
if (decision.warning !== null) {
|
|
1865
|
+
process.stderr.write(`warning: ${decision.warning}\n`);
|
|
1866
|
+
}
|
|
1867
|
+
const split: SplitPlan | null = decision.split;
|
|
1705
1868
|
|
|
1706
1869
|
const plan = new Plan(current, target, bump, commits, prev, body, full, split);
|
|
1707
1870
|
print_preview(plan);
|
|
@@ -1726,16 +1889,36 @@ function main(argv: readonly string[] | null = null): number {
|
|
|
1726
1889
|
wait_for_checks: !args.no_wait,
|
|
1727
1890
|
dry_run: false,
|
|
1728
1891
|
resume: args.resume,
|
|
1892
|
+
ci: args.ci,
|
|
1729
1893
|
});
|
|
1730
1894
|
return 0;
|
|
1731
1895
|
}
|
|
1732
1896
|
|
|
1733
1897
|
// ─── CLI entry (release.py:1090-1091 `raise SystemExit(main())`) ──────────────
|
|
1734
1898
|
|
|
1735
|
-
|
|
1736
|
-
process.argv[1]
|
|
1737
|
-
|
|
1738
|
-
|
|
1899
|
+
function _isCliEntry(): boolean {
|
|
1900
|
+
if (process.argv[1] === undefined) {
|
|
1901
|
+
return false;
|
|
1902
|
+
}
|
|
1903
|
+
const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
|
|
1904
|
+
if (import.meta.url === argvUrl) {
|
|
1905
|
+
return true;
|
|
1906
|
+
}
|
|
1907
|
+
// A symlinked invocation (e.g. via an installed `.augment/` projection,
|
|
1908
|
+
// or macOS /var → /private/var temp dirs) makes the raw URLs differ:
|
|
1909
|
+
// import.meta.url is the resolved real path while argv[1] keeps the
|
|
1910
|
+
// symlink path. Compare realpaths so the entry guard still fires
|
|
1911
|
+
// (without this the CLI silently no-ops when run through a symlink).
|
|
1912
|
+
try {
|
|
1913
|
+
const here = fs.realpathSync(fileURLToPath(import.meta.url));
|
|
1914
|
+
const argv = fs.realpathSync(path.resolve(process.argv[1]));
|
|
1915
|
+
return here === argv;
|
|
1916
|
+
} catch {
|
|
1917
|
+
return false;
|
|
1918
|
+
}
|
|
1919
|
+
}
|
|
1920
|
+
|
|
1921
|
+
if (_isCliEntry() || process.argv[1] === _HERE) {
|
|
1739
1922
|
try {
|
|
1740
1923
|
// main() can return an int directly OR throw SystemExitError via die();
|
|
1741
1924
|
// both flow into process.exitCode. CalledProcessError is intentionally
|
|
@@ -370,9 +370,28 @@ export function main(argv: string[] | null = null): number {
|
|
|
370
370
|
|
|
371
371
|
// --- CLI entry ---
|
|
372
372
|
|
|
373
|
-
|
|
374
|
-
process.argv[1]
|
|
375
|
-
|
|
376
|
-
|
|
373
|
+
function _isCliEntry(): boolean {
|
|
374
|
+
if (process.argv[1] === undefined) {
|
|
375
|
+
return false;
|
|
376
|
+
}
|
|
377
|
+
const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
|
|
378
|
+
if (import.meta.url === argvUrl) {
|
|
379
|
+
return true;
|
|
380
|
+
}
|
|
381
|
+
// A symlinked invocation (e.g. via an installed `.augment/` projection,
|
|
382
|
+
// or macOS /var → /private/var temp dirs) makes the raw URLs differ:
|
|
383
|
+
// import.meta.url is the resolved real path while argv[1] keeps the
|
|
384
|
+
// symlink path. Compare realpaths so the entry guard still fires
|
|
385
|
+
// (without this the CLI silently no-ops when run through a symlink).
|
|
386
|
+
try {
|
|
387
|
+
const here = fs.realpathSync(fileURLToPath(import.meta.url));
|
|
388
|
+
const argv = fs.realpathSync(path.resolve(process.argv[1]));
|
|
389
|
+
return here === argv;
|
|
390
|
+
} catch {
|
|
391
|
+
return false;
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
if (_isCliEntry() || process.argv[1] === _HERE) {
|
|
377
396
|
process.exitCode = main(process.argv.slice(2));
|
|
378
397
|
}
|
|
@@ -656,9 +656,28 @@ export function main(argv: string[] | null = null): number {
|
|
|
656
656
|
return render(args.quiet);
|
|
657
657
|
}
|
|
658
658
|
|
|
659
|
-
|
|
660
|
-
process.argv[1]
|
|
661
|
-
|
|
662
|
-
|
|
659
|
+
function _isCliEntry(): boolean {
|
|
660
|
+
if (process.argv[1] === undefined) {
|
|
661
|
+
return false;
|
|
662
|
+
}
|
|
663
|
+
const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
|
|
664
|
+
if (import.meta.url === argvUrl) {
|
|
665
|
+
return true;
|
|
666
|
+
}
|
|
667
|
+
// A symlinked invocation (e.g. via an installed `.augment/` projection,
|
|
668
|
+
// or macOS /var → /private/var temp dirs) makes the raw URLs differ:
|
|
669
|
+
// import.meta.url is the resolved real path while argv[1] keeps the
|
|
670
|
+
// symlink path. Compare realpaths so the entry guard still fires
|
|
671
|
+
// (without this the CLI silently no-ops when run through a symlink).
|
|
672
|
+
try {
|
|
673
|
+
const here = fs.realpathSync(fileURLToPath(import.meta.url));
|
|
674
|
+
const argv = fs.realpathSync(path.resolve(process.argv[1]));
|
|
675
|
+
return here === argv;
|
|
676
|
+
} catch {
|
|
677
|
+
return false;
|
|
678
|
+
}
|
|
679
|
+
}
|
|
680
|
+
|
|
681
|
+
if (_isCliEntry() || process.argv[1] === _HERE) {
|
|
663
682
|
process.exit(main());
|
|
664
683
|
}
|
|
@@ -289,24 +289,33 @@ function _isFile(p: string): boolean {
|
|
|
289
289
|
/**
|
|
290
290
|
* Resolve how to run the `.ts` regenerator: prefer the `tsx` binary from a
|
|
291
291
|
* `node_modules/.bin` directory found by walking up from the regenerator's
|
|
292
|
-
* directory
|
|
293
|
-
* `dispatch_hook.ts::_resolve_tsx_invocation` so the
|
|
294
|
-
* TypeScript with no python3 dependency
|
|
295
|
-
*
|
|
292
|
+
* directory, then from THIS module's own package tree; only then fall back
|
|
293
|
+
* to `npx tsx`. Mirrors `dispatch_hook.ts::_resolve_tsx_invocation` so the
|
|
294
|
+
* regenerator runs as TypeScript with no python3 dependency. The package-
|
|
295
|
+
* tree branch matters when the regenerator lives in a consumer
|
|
296
|
+
* `.augment/scripts/` whose tree carries no tsx — `npx tsx` there runs
|
|
297
|
+
* against the consumer's npm config and fails hard on e.g. devEngines pins
|
|
298
|
+
* (the 8.1.0 EBADDEVENGINES regression).
|
|
296
299
|
*/
|
|
297
300
|
function _resolve_tsx_invocation(scriptPath: string): { command: string; args: string[] } {
|
|
298
301
|
const binName = process.platform === "win32" ? "tsx.cmd" : "tsx";
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
302
|
+
const walkUp = (start: string): string | null => {
|
|
303
|
+
let dir = start;
|
|
304
|
+
for (;;) {
|
|
305
|
+
const candidate = path.join(dir, "node_modules", ".bin", binName);
|
|
306
|
+
if (_isFile(candidate)) {
|
|
307
|
+
return candidate;
|
|
308
|
+
}
|
|
309
|
+
const parent = path.dirname(dir);
|
|
310
|
+
if (parent === dir) {
|
|
311
|
+
return null;
|
|
312
|
+
}
|
|
313
|
+
dir = parent;
|
|
308
314
|
}
|
|
309
|
-
|
|
315
|
+
};
|
|
316
|
+
const tsx = walkUp(path.dirname(scriptPath)) ?? walkUp(path.dirname(fileURLToPath(import.meta.url)));
|
|
317
|
+
if (tsx !== null) {
|
|
318
|
+
return { command: tsx, args: [scriptPath] };
|
|
310
319
|
}
|
|
311
320
|
return { command: "npx", args: ["tsx", scriptPath] };
|
|
312
321
|
}
|
|
@@ -460,9 +469,30 @@ export function main(argv?: string[]): number {
|
|
|
460
469
|
return run(_readStdin(), { consumer_root: root, verbose: args.verbose });
|
|
461
470
|
}
|
|
462
471
|
|
|
472
|
+
function _isCliEntry(): boolean {
|
|
473
|
+
if (process.argv[1] === undefined) {
|
|
474
|
+
return false;
|
|
475
|
+
}
|
|
476
|
+
const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
|
|
477
|
+
if (import.meta.url === argvUrl) {
|
|
478
|
+
return true;
|
|
479
|
+
}
|
|
480
|
+
// A symlinked invocation (e.g. via an installed `.augment/` projection,
|
|
481
|
+
// or macOS /var → /private/var temp dirs) makes the raw URLs differ:
|
|
482
|
+
// import.meta.url is the resolved real path while argv[1] keeps the
|
|
483
|
+
// symlink path. Compare realpaths so the entry guard still fires
|
|
484
|
+
// (without this the CLI silently no-ops when run through a symlink).
|
|
485
|
+
try {
|
|
486
|
+
const here = fs.realpathSync(fileURLToPath(import.meta.url));
|
|
487
|
+
const argv = fs.realpathSync(path.resolve(process.argv[1]));
|
|
488
|
+
return here === argv;
|
|
489
|
+
} catch {
|
|
490
|
+
return false;
|
|
491
|
+
}
|
|
492
|
+
}
|
|
493
|
+
|
|
463
494
|
const isCliEntry =
|
|
464
|
-
|
|
465
|
-
import.meta.url === pathToFileURL(path.resolve(process.argv[1])).href;
|
|
495
|
+
_isCliEntry();
|
|
466
496
|
if (isCliEntry) {
|
|
467
497
|
process.exit(main(process.argv.slice(2)));
|
|
468
498
|
}
|
|
@@ -507,9 +507,28 @@ function _runCli(): number {
|
|
|
507
507
|
}
|
|
508
508
|
}
|
|
509
509
|
|
|
510
|
-
|
|
511
|
-
process.argv[1]
|
|
512
|
-
|
|
513
|
-
|
|
510
|
+
function _isCliEntry(): boolean {
|
|
511
|
+
if (process.argv[1] === undefined) {
|
|
512
|
+
return false;
|
|
513
|
+
}
|
|
514
|
+
const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
|
|
515
|
+
if (import.meta.url === argvUrl) {
|
|
516
|
+
return true;
|
|
517
|
+
}
|
|
518
|
+
// A symlinked invocation (e.g. via an installed `.augment/` projection,
|
|
519
|
+
// or macOS /var → /private/var temp dirs) makes the raw URLs differ:
|
|
520
|
+
// import.meta.url is the resolved real path while argv[1] keeps the
|
|
521
|
+
// symlink path. Compare realpaths so the entry guard still fires
|
|
522
|
+
// (without this the CLI silently no-ops when run through a symlink).
|
|
523
|
+
try {
|
|
524
|
+
const here = fs.realpathSync(fileURLToPath(import.meta.url));
|
|
525
|
+
const argv = fs.realpathSync(path.resolve(process.argv[1]));
|
|
526
|
+
return here === argv;
|
|
527
|
+
} catch {
|
|
528
|
+
return false;
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
|
|
532
|
+
if (_isCliEntry() || process.argv[1] === _HERE) {
|
|
514
533
|
process.exit(_runCli());
|
|
515
534
|
}
|
|
@@ -571,10 +571,29 @@ export function main(argv: string[]): number {
|
|
|
571
571
|
return result.request.is_ready || result.request.status === 'blocked' ? 0 : 1;
|
|
572
572
|
}
|
|
573
573
|
|
|
574
|
-
|
|
575
|
-
process.argv[1]
|
|
576
|
-
|
|
577
|
-
|
|
574
|
+
function _isCliEntry(): boolean {
|
|
575
|
+
if (process.argv[1] === undefined) {
|
|
576
|
+
return false;
|
|
577
|
+
}
|
|
578
|
+
const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
|
|
579
|
+
if (import.meta.url === argvUrl) {
|
|
580
|
+
return true;
|
|
581
|
+
}
|
|
582
|
+
// A symlinked invocation (e.g. via an installed `.augment/` projection,
|
|
583
|
+
// or macOS /var → /private/var temp dirs) makes the raw URLs differ:
|
|
584
|
+
// import.meta.url is the resolved real path while argv[1] keeps the
|
|
585
|
+
// symlink path. Compare realpaths so the entry guard still fires
|
|
586
|
+
// (without this the CLI silently no-ops when run through a symlink).
|
|
587
|
+
try {
|
|
588
|
+
const here = fs.realpathSync(fileURLToPath(import.meta.url));
|
|
589
|
+
const argv = fs.realpathSync(path.resolve(process.argv[1]));
|
|
590
|
+
return here === argv;
|
|
591
|
+
} catch {
|
|
592
|
+
return false;
|
|
593
|
+
}
|
|
594
|
+
}
|
|
595
|
+
|
|
596
|
+
if (_isCliEntry() || process.argv[1] === _HERE) {
|
|
578
597
|
try {
|
|
579
598
|
process.exitCode = main(process.argv.slice(2));
|
|
580
599
|
} catch (err) {
|