@event4u/agent-config 8.1.0 → 8.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +1 -1
- package/CHANGELOG.md +50 -297
- 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 +67 -28
- package/dist/mcp/registry-manifest.json +2 -2
- 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/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/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/proof.md +1 -1
- package/docs/setup/per-ide/claude-code.md +10 -4
- package/package.json +3 -2
- 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 +96 -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 +23 -4
- package/src/scripts/_cli/cmd_update.ts +23 -4
- package/src/scripts/_cli/cmd_upgrade.ts +238 -9
- 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/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 +23 -2
- 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.ts +72 -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_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_parity_smoke.ts +23 -2
- package/src/scripts/mcp_render.ts +23 -4
- 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 +23 -4
- 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
|
@@ -439,9 +439,28 @@ export function main(argv: string[] | null = null): number {
|
|
|
439
439
|
return 0;
|
|
440
440
|
}
|
|
441
441
|
|
|
442
|
-
|
|
443
|
-
process.argv[1]
|
|
444
|
-
|
|
445
|
-
|
|
442
|
+
function _isCliEntry(): boolean {
|
|
443
|
+
if (process.argv[1] === undefined) {
|
|
444
|
+
return false;
|
|
445
|
+
}
|
|
446
|
+
const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
|
|
447
|
+
if (import.meta.url === argvUrl) {
|
|
448
|
+
return true;
|
|
449
|
+
}
|
|
450
|
+
// A symlinked invocation (e.g. via an installed `.augment/` projection,
|
|
451
|
+
// or macOS /var → /private/var temp dirs) makes the raw URLs differ:
|
|
452
|
+
// import.meta.url is the resolved real path while argv[1] keeps the
|
|
453
|
+
// symlink path. Compare realpaths so the entry guard still fires
|
|
454
|
+
// (without this the CLI silently no-ops when run through a symlink).
|
|
455
|
+
try {
|
|
456
|
+
const here = fs.realpathSync(fileURLToPath(import.meta.url));
|
|
457
|
+
const argv = fs.realpathSync(path.resolve(process.argv[1]));
|
|
458
|
+
return here === argv;
|
|
459
|
+
} catch {
|
|
460
|
+
return false;
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
if (_isCliEntry()) {
|
|
446
465
|
process.exit(main());
|
|
447
466
|
}
|
|
@@ -20,6 +20,7 @@
|
|
|
20
20
|
* ./scripts-run src/scripts/tool_registry --validate-skill SKILL_TOOLS
|
|
21
21
|
*/
|
|
22
22
|
import * as path from 'node:path';
|
|
23
|
+
import * as fs from 'node:fs';
|
|
23
24
|
import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
24
25
|
|
|
25
26
|
/** Definition of an available tool (mirrors the `ToolDefinition` dataclass). */
|
|
@@ -322,9 +323,28 @@ export function main(argv: readonly string[] = process.argv.slice(2)): number {
|
|
|
322
323
|
}
|
|
323
324
|
|
|
324
325
|
const _HERE = fileURLToPath(import.meta.url);
|
|
325
|
-
|
|
326
|
-
process.argv[1]
|
|
327
|
-
|
|
328
|
-
|
|
326
|
+
function _isCliEntry(): boolean {
|
|
327
|
+
if (process.argv[1] === undefined) {
|
|
328
|
+
return false;
|
|
329
|
+
}
|
|
330
|
+
const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
|
|
331
|
+
if (import.meta.url === argvUrl) {
|
|
332
|
+
return true;
|
|
333
|
+
}
|
|
334
|
+
// A symlinked invocation (e.g. via an installed `.augment/` projection,
|
|
335
|
+
// or macOS /var → /private/var temp dirs) makes the raw URLs differ:
|
|
336
|
+
// import.meta.url is the resolved real path while argv[1] keeps the
|
|
337
|
+
// symlink path. Compare realpaths so the entry guard still fires
|
|
338
|
+
// (without this the CLI silently no-ops when run through a symlink).
|
|
339
|
+
try {
|
|
340
|
+
const here = fs.realpathSync(fileURLToPath(import.meta.url));
|
|
341
|
+
const argv = fs.realpathSync(path.resolve(process.argv[1]));
|
|
342
|
+
return here === argv;
|
|
343
|
+
} catch {
|
|
344
|
+
return false;
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
if (_isCliEntry() || process.argv[1] === _HERE) {
|
|
329
349
|
process.exit(main());
|
|
330
350
|
}
|
|
@@ -243,9 +243,28 @@ export function main(argv: string[] | null = null): number {
|
|
|
243
243
|
return misses ? 1 : 0;
|
|
244
244
|
}
|
|
245
245
|
|
|
246
|
-
|
|
247
|
-
process.argv[1]
|
|
248
|
-
|
|
249
|
-
|
|
246
|
+
function _isCliEntry(): boolean {
|
|
247
|
+
if (process.argv[1] === undefined) {
|
|
248
|
+
return false;
|
|
249
|
+
}
|
|
250
|
+
const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
|
|
251
|
+
if (import.meta.url === argvUrl) {
|
|
252
|
+
return true;
|
|
253
|
+
}
|
|
254
|
+
// A symlinked invocation (e.g. via an installed `.augment/` projection,
|
|
255
|
+
// or macOS /var → /private/var temp dirs) makes the raw URLs differ:
|
|
256
|
+
// import.meta.url is the resolved real path while argv[1] keeps the
|
|
257
|
+
// symlink path. Compare realpaths so the entry guard still fires
|
|
258
|
+
// (without this the CLI silently no-ops when run through a symlink).
|
|
259
|
+
try {
|
|
260
|
+
const here = fs.realpathSync(fileURLToPath(import.meta.url));
|
|
261
|
+
const argv = fs.realpathSync(path.resolve(process.argv[1]));
|
|
262
|
+
return here === argv;
|
|
263
|
+
} catch {
|
|
264
|
+
return false;
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
if (_isCliEntry() || process.argv[1] === _HERE) {
|
|
250
269
|
process.exit(main());
|
|
251
270
|
}
|
|
@@ -276,9 +276,28 @@ export function main(argv: readonly string[] = process.argv.slice(2)): number {
|
|
|
276
276
|
return 0;
|
|
277
277
|
}
|
|
278
278
|
|
|
279
|
-
|
|
280
|
-
process.argv[1]
|
|
281
|
-
|
|
282
|
-
|
|
279
|
+
function _isCliEntry(): boolean {
|
|
280
|
+
if (process.argv[1] === undefined) {
|
|
281
|
+
return false;
|
|
282
|
+
}
|
|
283
|
+
const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
|
|
284
|
+
if (import.meta.url === argvUrl) {
|
|
285
|
+
return true;
|
|
286
|
+
}
|
|
287
|
+
// A symlinked invocation (e.g. via an installed `.augment/` projection,
|
|
288
|
+
// or macOS /var → /private/var temp dirs) makes the raw URLs differ:
|
|
289
|
+
// import.meta.url is the resolved real path while argv[1] keeps the
|
|
290
|
+
// symlink path. Compare realpaths so the entry guard still fires
|
|
291
|
+
// (without this the CLI silently no-ops when run through a symlink).
|
|
292
|
+
try {
|
|
293
|
+
const here = fs.realpathSync(fileURLToPath(import.meta.url));
|
|
294
|
+
const argv = fs.realpathSync(path.resolve(process.argv[1]));
|
|
295
|
+
return here === argv;
|
|
296
|
+
} catch {
|
|
297
|
+
return false;
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
if (_isCliEntry() || process.argv[1] === _HERE) {
|
|
283
302
|
process.exit(main(process.argv.slice(2)));
|
|
284
303
|
}
|
|
@@ -211,7 +211,29 @@ export async function main(argv: string[] | null = null): Promise<number> {
|
|
|
211
211
|
return 0;
|
|
212
212
|
}
|
|
213
213
|
|
|
214
|
-
|
|
214
|
+
function _isCliEntry(): boolean {
|
|
215
|
+
if (process.argv[1] === undefined) {
|
|
216
|
+
return false;
|
|
217
|
+
}
|
|
218
|
+
const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
|
|
219
|
+
if (import.meta.url === argvUrl) {
|
|
220
|
+
return true;
|
|
221
|
+
}
|
|
222
|
+
// A symlinked invocation (e.g. via an installed `.augment/` projection,
|
|
223
|
+
// or macOS /var → /private/var temp dirs) makes the raw URLs differ:
|
|
224
|
+
// import.meta.url is the resolved real path while argv[1] keeps the
|
|
225
|
+
// symlink path. Compare realpaths so the entry guard still fires
|
|
226
|
+
// (without this the CLI silently no-ops when run through a symlink).
|
|
227
|
+
try {
|
|
228
|
+
const here = fs.realpathSync(fileURLToPath(import.meta.url));
|
|
229
|
+
const argv = fs.realpathSync(path.resolve(process.argv[1]));
|
|
230
|
+
return here === argv;
|
|
231
|
+
} catch {
|
|
232
|
+
return false;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
const _isMain = _isCliEntry();
|
|
215
237
|
if (_isMain) {
|
|
216
238
|
void main().then((rc) => {
|
|
217
239
|
process.exitCode = rc;
|
|
@@ -255,10 +255,29 @@ export function main(): number {
|
|
|
255
255
|
return 0;
|
|
256
256
|
}
|
|
257
257
|
|
|
258
|
-
|
|
259
|
-
process.argv[1]
|
|
260
|
-
|
|
261
|
-
|
|
258
|
+
function _isCliEntry(): boolean {
|
|
259
|
+
if (process.argv[1] === undefined) {
|
|
260
|
+
return false;
|
|
261
|
+
}
|
|
262
|
+
const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
|
|
263
|
+
if (import.meta.url === argvUrl) {
|
|
264
|
+
return true;
|
|
265
|
+
}
|
|
266
|
+
// A symlinked invocation (e.g. via an installed `.augment/` projection,
|
|
267
|
+
// or macOS /var → /private/var temp dirs) makes the raw URLs differ:
|
|
268
|
+
// import.meta.url is the resolved real path while argv[1] keeps the
|
|
269
|
+
// symlink path. Compare realpaths so the entry guard still fires
|
|
270
|
+
// (without this the CLI silently no-ops when run through a symlink).
|
|
271
|
+
try {
|
|
272
|
+
const here = fs.realpathSync(fileURLToPath(import.meta.url));
|
|
273
|
+
const argv = fs.realpathSync(path.resolve(process.argv[1]));
|
|
274
|
+
return here === argv;
|
|
275
|
+
} catch {
|
|
276
|
+
return false;
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
if (_isCliEntry() || process.argv[1] === _HERE) {
|
|
262
281
|
process.exit(main());
|
|
263
282
|
}
|
|
264
283
|
|
|
@@ -343,10 +343,29 @@ function main(): number {
|
|
|
343
343
|
return 0;
|
|
344
344
|
}
|
|
345
345
|
|
|
346
|
-
|
|
347
|
-
process.argv[1]
|
|
348
|
-
|
|
349
|
-
|
|
346
|
+
function _isCliEntry(): boolean {
|
|
347
|
+
if (process.argv[1] === undefined) {
|
|
348
|
+
return false;
|
|
349
|
+
}
|
|
350
|
+
const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
|
|
351
|
+
if (import.meta.url === argvUrl) {
|
|
352
|
+
return true;
|
|
353
|
+
}
|
|
354
|
+
// A symlinked invocation (e.g. via an installed `.augment/` projection,
|
|
355
|
+
// or macOS /var → /private/var temp dirs) makes the raw URLs differ:
|
|
356
|
+
// import.meta.url is the resolved real path while argv[1] keeps the
|
|
357
|
+
// symlink path. Compare realpaths so the entry guard still fires
|
|
358
|
+
// (without this the CLI silently no-ops when run through a symlink).
|
|
359
|
+
try {
|
|
360
|
+
const here = fs.realpathSync(fileURLToPath(import.meta.url));
|
|
361
|
+
const argv = fs.realpathSync(path.resolve(process.argv[1]));
|
|
362
|
+
return here === argv;
|
|
363
|
+
} catch {
|
|
364
|
+
return false;
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
if (_isCliEntry() || process.argv[1] === _HERE) {
|
|
350
369
|
try {
|
|
351
370
|
process.exit(main());
|
|
352
371
|
} catch (exc) {
|
|
@@ -142,10 +142,29 @@ function main(argv: readonly string[]): number {
|
|
|
142
142
|
return 0;
|
|
143
143
|
}
|
|
144
144
|
|
|
145
|
-
|
|
146
|
-
process.argv[1]
|
|
147
|
-
|
|
148
|
-
|
|
145
|
+
function _isCliEntry(): boolean {
|
|
146
|
+
if (process.argv[1] === undefined) {
|
|
147
|
+
return false;
|
|
148
|
+
}
|
|
149
|
+
const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
|
|
150
|
+
if (import.meta.url === argvUrl) {
|
|
151
|
+
return true;
|
|
152
|
+
}
|
|
153
|
+
// A symlinked invocation (e.g. via an installed `.augment/` projection,
|
|
154
|
+
// or macOS /var → /private/var temp dirs) makes the raw URLs differ:
|
|
155
|
+
// import.meta.url is the resolved real path while argv[1] keeps the
|
|
156
|
+
// symlink path. Compare realpaths so the entry guard still fires
|
|
157
|
+
// (without this the CLI silently no-ops when run through a symlink).
|
|
158
|
+
try {
|
|
159
|
+
const here = fs.realpathSync(fileURLToPath(import.meta.url));
|
|
160
|
+
const argv = fs.realpathSync(path.resolve(process.argv[1]));
|
|
161
|
+
return here === argv;
|
|
162
|
+
} catch {
|
|
163
|
+
return false;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
if (_isCliEntry() || process.argv[1] === _HERE) {
|
|
149
168
|
try {
|
|
150
169
|
process.exit(main(process.argv.slice(2)));
|
|
151
170
|
} catch (exc) {
|
|
@@ -1023,9 +1023,30 @@ function _globSorted(dir: string, pattern: string): string[] {
|
|
|
1023
1023
|
|
|
1024
1024
|
// Run the CLI only when executed directly (via tsx / the dispatcher), not
|
|
1025
1025
|
// when imported by a test.
|
|
1026
|
+
function _isCliEntry(): boolean {
|
|
1027
|
+
if (process.argv[1] === undefined) {
|
|
1028
|
+
return false;
|
|
1029
|
+
}
|
|
1030
|
+
const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
|
|
1031
|
+
if (import.meta.url === argvUrl) {
|
|
1032
|
+
return true;
|
|
1033
|
+
}
|
|
1034
|
+
// A symlinked invocation (e.g. via an installed `.augment/` projection,
|
|
1035
|
+
// or macOS /var → /private/var temp dirs) makes the raw URLs differ:
|
|
1036
|
+
// import.meta.url is the resolved real path while argv[1] keeps the
|
|
1037
|
+
// symlink path. Compare realpaths so the entry guard still fires
|
|
1038
|
+
// (without this the CLI silently no-ops when run through a symlink).
|
|
1039
|
+
try {
|
|
1040
|
+
const here = fs.realpathSync(fileURLToPath(import.meta.url));
|
|
1041
|
+
const argv = fs.realpathSync(path.resolve(process.argv[1]));
|
|
1042
|
+
return here === argv;
|
|
1043
|
+
} catch {
|
|
1044
|
+
return false;
|
|
1045
|
+
}
|
|
1046
|
+
}
|
|
1047
|
+
|
|
1026
1048
|
const isCliEntry =
|
|
1027
|
-
|
|
1028
|
-
import.meta.url === pathToFileURL(path.resolve(process.argv[1])).href;
|
|
1049
|
+
_isCliEntry();
|
|
1029
1050
|
if (isCliEntry) {
|
|
1030
1051
|
process.exit(_main(process.argv.slice(2)));
|
|
1031
1052
|
}
|
|
Binary file
|
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
*/
|
|
23
23
|
|
|
24
24
|
import * as path from 'node:path';
|
|
25
|
+
import * as fs from 'node:fs';
|
|
25
26
|
import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
26
27
|
|
|
27
28
|
/** Raised when a path matches the sensitive-file denylist. Subclass of TS Error;
|
|
@@ -154,10 +155,29 @@ export function _main(argv: readonly string[]): number {
|
|
|
154
155
|
}
|
|
155
156
|
|
|
156
157
|
const _HERE = fileURLToPath(import.meta.url);
|
|
157
|
-
|
|
158
|
-
process.argv[1]
|
|
159
|
-
|
|
160
|
-
|
|
158
|
+
function _isCliEntry(): boolean {
|
|
159
|
+
if (process.argv[1] === undefined) {
|
|
160
|
+
return false;
|
|
161
|
+
}
|
|
162
|
+
const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
|
|
163
|
+
if (import.meta.url === argvUrl) {
|
|
164
|
+
return true;
|
|
165
|
+
}
|
|
166
|
+
// A symlinked invocation (e.g. via an installed `.augment/` projection,
|
|
167
|
+
// or macOS /var → /private/var temp dirs) makes the raw URLs differ:
|
|
168
|
+
// import.meta.url is the resolved real path while argv[1] keeps the
|
|
169
|
+
// symlink path. Compare realpaths so the entry guard still fires
|
|
170
|
+
// (without this the CLI silently no-ops when run through a symlink).
|
|
171
|
+
try {
|
|
172
|
+
const here = fs.realpathSync(fileURLToPath(import.meta.url));
|
|
173
|
+
const argv = fs.realpathSync(path.resolve(process.argv[1]));
|
|
174
|
+
return here === argv;
|
|
175
|
+
} catch {
|
|
176
|
+
return false;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
if (_isCliEntry() || process.argv[1] === _HERE) {
|
|
161
181
|
// Python passes the full sys.argv (program name + args); replicate by
|
|
162
182
|
// prepending a placeholder program name to the user args.
|
|
163
183
|
process.exit(_main(['validate_safe_paths.ts', ...process.argv.slice(2)]));
|
|
@@ -477,9 +477,28 @@ class SequenceMatcher {
|
|
|
477
477
|
}
|
|
478
478
|
|
|
479
479
|
const _HERE = fileURLToPath(import.meta.url);
|
|
480
|
-
|
|
481
|
-
process.argv[1]
|
|
482
|
-
|
|
483
|
-
|
|
480
|
+
function _isCliEntry(): boolean {
|
|
481
|
+
if (process.argv[1] === undefined) {
|
|
482
|
+
return false;
|
|
483
|
+
}
|
|
484
|
+
const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
|
|
485
|
+
if (import.meta.url === argvUrl) {
|
|
486
|
+
return true;
|
|
487
|
+
}
|
|
488
|
+
// A symlinked invocation (e.g. via an installed `.augment/` projection,
|
|
489
|
+
// or macOS /var → /private/var temp dirs) makes the raw URLs differ:
|
|
490
|
+
// import.meta.url is the resolved real path while argv[1] keeps the
|
|
491
|
+
// symlink path. Compare realpaths so the entry guard still fires
|
|
492
|
+
// (without this the CLI silently no-ops when run through a symlink).
|
|
493
|
+
try {
|
|
494
|
+
const here = fs.realpathSync(fileURLToPath(import.meta.url));
|
|
495
|
+
const argv = fs.realpathSync(path.resolve(process.argv[1]));
|
|
496
|
+
return here === argv;
|
|
497
|
+
} catch {
|
|
498
|
+
return false;
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
|
|
502
|
+
if (_isCliEntry() || process.argv[1] === _HERE) {
|
|
484
503
|
process.exit(main());
|
|
485
504
|
}
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
|
|
35
35
|
import fs from "node:fs";
|
|
36
36
|
import path from "node:path";
|
|
37
|
-
import { pathToFileURL } from "node:url";
|
|
37
|
+
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
38
38
|
|
|
39
39
|
import { atomic_write_json } from "./hooks/state_io.js";
|
|
40
40
|
|
|
@@ -298,9 +298,30 @@ export function main(argv?: string[]): number {
|
|
|
298
298
|
return run(_readStdin(), { consumer_root: process.cwd(), verbose: args.verbose });
|
|
299
299
|
}
|
|
300
300
|
|
|
301
|
+
function _isCliEntry(): boolean {
|
|
302
|
+
if (process.argv[1] === undefined) {
|
|
303
|
+
return false;
|
|
304
|
+
}
|
|
305
|
+
const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
|
|
306
|
+
if (import.meta.url === argvUrl) {
|
|
307
|
+
return true;
|
|
308
|
+
}
|
|
309
|
+
// A symlinked invocation (e.g. via an installed `.augment/` projection,
|
|
310
|
+
// or macOS /var → /private/var temp dirs) makes the raw URLs differ:
|
|
311
|
+
// import.meta.url is the resolved real path while argv[1] keeps the
|
|
312
|
+
// symlink path. Compare realpaths so the entry guard still fires
|
|
313
|
+
// (without this the CLI silently no-ops when run through a symlink).
|
|
314
|
+
try {
|
|
315
|
+
const here = fs.realpathSync(fileURLToPath(import.meta.url));
|
|
316
|
+
const argv = fs.realpathSync(path.resolve(process.argv[1]));
|
|
317
|
+
return here === argv;
|
|
318
|
+
} catch {
|
|
319
|
+
return false;
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
|
|
301
323
|
const isCliEntry =
|
|
302
|
-
|
|
303
|
-
import.meta.url === pathToFileURL(path.resolve(process.argv[1])).href;
|
|
324
|
+
_isCliEntry();
|
|
304
325
|
if (isCliEntry) {
|
|
305
326
|
process.exit(main(process.argv.slice(2)));
|
|
306
327
|
}
|
|
@@ -403,9 +403,28 @@ export function main(argv: string[] | null = null): number {
|
|
|
403
403
|
return ok ? 0 : 1;
|
|
404
404
|
}
|
|
405
405
|
|
|
406
|
-
|
|
407
|
-
process.argv[1]
|
|
408
|
-
|
|
409
|
-
|
|
406
|
+
function _isCliEntry(): boolean {
|
|
407
|
+
if (process.argv[1] === undefined) {
|
|
408
|
+
return false;
|
|
409
|
+
}
|
|
410
|
+
const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
|
|
411
|
+
if (import.meta.url === argvUrl) {
|
|
412
|
+
return true;
|
|
413
|
+
}
|
|
414
|
+
// A symlinked invocation (e.g. via an installed `.augment/` projection,
|
|
415
|
+
// or macOS /var → /private/var temp dirs) makes the raw URLs differ:
|
|
416
|
+
// import.meta.url is the resolved real path while argv[1] keeps the
|
|
417
|
+
// symlink path. Compare realpaths so the entry guard still fires
|
|
418
|
+
// (without this the CLI silently no-ops when run through a symlink).
|
|
419
|
+
try {
|
|
420
|
+
const here = fs.realpathSync(fileURLToPath(import.meta.url));
|
|
421
|
+
const argv = fs.realpathSync(path.resolve(process.argv[1]));
|
|
422
|
+
return here === argv;
|
|
423
|
+
} catch {
|
|
424
|
+
return false;
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
if (_isCliEntry() || process.argv[1] === _HERE) {
|
|
410
429
|
process.exit(main());
|
|
411
430
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
|
-
* session_start concern — keep the project-local `./agent-config`
|
|
3
|
+
* session_start concern — keep the project-local `./agent-config` wrapper
|
|
4
|
+
* AND the installed `.git/hooks/pre-commit` gate fresh.
|
|
4
5
|
*
|
|
5
6
|
* TypeScript twin of `src/scripts/wrapper_freshness_hook.py` (ADR-200 —
|
|
6
7
|
* Python→TS migration, Phase 6 / hooks). Public API mirrors the Python
|
|
@@ -10,7 +11,12 @@
|
|
|
10
11
|
* `refresh --project`). On every session_start the dispatcher runs this in
|
|
11
12
|
* the consumer workspace; if a `./agent-config` wrapper exists there and
|
|
12
13
|
* differs from the canonical template, it is re-stamped so an outdated,
|
|
13
|
-
* fallback-less copy cannot keep breaking the hooks.
|
|
14
|
+
* fallback-less copy cannot keep breaking the hooks. The same self-heal
|
|
15
|
+
* covers `.git/hooks/pre-commit` when it is OURS (identified by the
|
|
16
|
+
* `pre-commit-roadmap-progress` marker) and differs from the shipped
|
|
17
|
+
* template — a hook installed under an older release otherwise keeps its
|
|
18
|
+
* stale body forever (the py2ts-era hooks silently no-op'd exactly this
|
|
19
|
+
* way; `agent-config upgrade` only reaches projects it is run from).
|
|
14
20
|
*
|
|
15
21
|
* Bootstrapping note: this can only heal a wrapper functional enough to
|
|
16
22
|
* invoke the dispatcher in the first place (the current template's global +
|
|
@@ -18,14 +24,15 @@
|
|
|
18
24
|
* this concern — that recovery path is `agent-config upgrade` /
|
|
19
25
|
* `refresh --project`.
|
|
20
26
|
*
|
|
21
|
-
* Contract: never creates a wrapper where none exists (that is an
|
|
22
|
-
* action); never
|
|
23
|
-
* (exit 0) — hook self-heal
|
|
27
|
+
* Contract: never creates a wrapper or hook where none exists (that is an
|
|
28
|
+
* install action); never overwrites a foreign pre-commit hook; never touches
|
|
29
|
+
* the agent-config source repo; always fail-open (exit 0) — hook self-heal
|
|
30
|
+
* must not block a session.
|
|
24
31
|
*/
|
|
25
32
|
|
|
26
33
|
import fs from "node:fs";
|
|
27
34
|
import path from "node:path";
|
|
28
|
-
import { pathToFileURL } from "node:url";
|
|
35
|
+
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
29
36
|
|
|
30
37
|
import {
|
|
31
38
|
install_cli_wrapper,
|
|
@@ -127,6 +134,71 @@ function _parseRoot(argv: string[]): string | null {
|
|
|
127
134
|
return null;
|
|
128
135
|
}
|
|
129
136
|
|
|
137
|
+
/** Marker that identifies OUR installed pre-commit hook (never foreign ones). */
|
|
138
|
+
const _PRECOMMIT_MARKER = "pre-commit-roadmap-progress";
|
|
139
|
+
|
|
140
|
+
/** Resolve `<root>/.git/hooks` — plain dir or worktree/submodule gitdir file. */
|
|
141
|
+
function _git_hooks_dir(root: string): string | null {
|
|
142
|
+
const dotGit = path.join(root, ".git");
|
|
143
|
+
if (_isDir(dotGit)) {
|
|
144
|
+
return path.join(dotGit, "hooks");
|
|
145
|
+
}
|
|
146
|
+
if (_isFile(dotGit)) {
|
|
147
|
+
try {
|
|
148
|
+
const m = /^gitdir:\s*(.+)\s*$/m.exec(fs.readFileSync(dotGit, "utf-8"));
|
|
149
|
+
if (m && m[1] !== undefined) {
|
|
150
|
+
const gitDir = path.isAbsolute(m[1]) ? m[1] : path.join(root, m[1]);
|
|
151
|
+
return path.join(gitDir, "hooks");
|
|
152
|
+
}
|
|
153
|
+
} catch {
|
|
154
|
+
/* fail-open */
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
return null;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* Re-stamp a marker-identified, stale `.git/hooks/pre-commit` from the
|
|
162
|
+
* shipped template. Returns the hook path when re-stamped, else null.
|
|
163
|
+
* Never creates a hook, never touches foreign hooks, never throws.
|
|
164
|
+
*/
|
|
165
|
+
export function refresh_precommit_hook(root: string): string | null {
|
|
166
|
+
try {
|
|
167
|
+
const template = path.join(
|
|
168
|
+
path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..", ".."),
|
|
169
|
+
"dist",
|
|
170
|
+
"agent-src",
|
|
171
|
+
"templates",
|
|
172
|
+
"hooks",
|
|
173
|
+
"pre-commit-roadmap-progress",
|
|
174
|
+
);
|
|
175
|
+
if (!_isFile(template)) {
|
|
176
|
+
return null;
|
|
177
|
+
}
|
|
178
|
+
const hooksDir = _git_hooks_dir(root);
|
|
179
|
+
if (hooksDir === null) {
|
|
180
|
+
return null;
|
|
181
|
+
}
|
|
182
|
+
const target = path.join(hooksDir, "pre-commit");
|
|
183
|
+
if (!_isFile(target)) {
|
|
184
|
+
return null; // no hook installed — never create one
|
|
185
|
+
}
|
|
186
|
+
const current = fs.readFileSync(target, "utf-8");
|
|
187
|
+
if (!current.includes(_PRECOMMIT_MARKER)) {
|
|
188
|
+
return null; // foreign hook — never overwrite
|
|
189
|
+
}
|
|
190
|
+
const canonical = fs.readFileSync(template, "utf-8");
|
|
191
|
+
if (current === canonical) {
|
|
192
|
+
return null; // already fresh
|
|
193
|
+
}
|
|
194
|
+
fs.writeFileSync(target, canonical);
|
|
195
|
+
fs.chmodSync(target, 0o755);
|
|
196
|
+
return target;
|
|
197
|
+
} catch {
|
|
198
|
+
return null; // fail-open — never block the session
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
|
|
130
202
|
export function main(argv?: string[]): number {
|
|
131
203
|
const args = argv ?? process.argv.slice(2);
|
|
132
204
|
const rootArg = _parseRoot(args);
|
|
@@ -140,6 +212,12 @@ export function main(argv?: string[]): number {
|
|
|
140
212
|
if (_is_source_repo(root)) {
|
|
141
213
|
return EXIT_ALLOW;
|
|
142
214
|
}
|
|
215
|
+
const hook = refresh_precommit_hook(root);
|
|
216
|
+
if (hook !== null) {
|
|
217
|
+
process.stderr.write(
|
|
218
|
+
`[wrapper] re-stamped stale .git/hooks/pre-commit at ${hook}\n`,
|
|
219
|
+
);
|
|
220
|
+
}
|
|
143
221
|
if (!_isFile(path.join(root, "agent-config"))) {
|
|
144
222
|
return EXIT_ALLOW; // no wrapper here — never create one
|
|
145
223
|
}
|
|
@@ -171,9 +249,30 @@ export function main(argv?: string[]): number {
|
|
|
171
249
|
return EXIT_ALLOW;
|
|
172
250
|
}
|
|
173
251
|
|
|
252
|
+
function _isCliEntry(): boolean {
|
|
253
|
+
if (process.argv[1] === undefined) {
|
|
254
|
+
return false;
|
|
255
|
+
}
|
|
256
|
+
const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
|
|
257
|
+
if (import.meta.url === argvUrl) {
|
|
258
|
+
return true;
|
|
259
|
+
}
|
|
260
|
+
// A symlinked invocation (e.g. via an installed `.augment/` projection,
|
|
261
|
+
// or macOS /var → /private/var temp dirs) makes the raw URLs differ:
|
|
262
|
+
// import.meta.url is the resolved real path while argv[1] keeps the
|
|
263
|
+
// symlink path. Compare realpaths so the entry guard still fires
|
|
264
|
+
// (without this the CLI silently no-ops when run through a symlink).
|
|
265
|
+
try {
|
|
266
|
+
const here = fs.realpathSync(fileURLToPath(import.meta.url));
|
|
267
|
+
const argv = fs.realpathSync(path.resolve(process.argv[1]));
|
|
268
|
+
return here === argv;
|
|
269
|
+
} catch {
|
|
270
|
+
return false;
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
|
|
174
274
|
const isCliEntry =
|
|
175
|
-
|
|
176
|
-
import.meta.url === pathToFileURL(path.resolve(process.argv[1])).href;
|
|
275
|
+
_isCliEntry();
|
|
177
276
|
if (isCliEntry) {
|
|
178
277
|
process.exit(main(process.argv.slice(2)));
|
|
179
278
|
}
|