@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
|
@@ -20,9 +20,27 @@
|
|
|
20
20
|
*
|
|
21
21
|
* 1. `npm install -g @event4u/agent-config@latest` — refresh the global binary
|
|
22
22
|
* on PATH (the binary the Claude plugin hook resolves).
|
|
23
|
-
* 2. `agent-config global` (→ `install
|
|
24
|
-
* (`~/.event4u/agent-config/`) + regenerate plugin hooks.
|
|
25
|
-
*
|
|
23
|
+
* 2. `agent-config global --no-ui` (→ `install --global`) — refresh the global
|
|
24
|
+
* root (`~/.event4u/agent-config/`) + regenerate plugin hooks. `--no-ui`
|
|
25
|
+
* suppresses the setup-wizard auto-launch: the wizard is an onboarding
|
|
26
|
+
* surface, not an upgrade step, and a foreground wizard server would block
|
|
27
|
+
* the remaining upgrade steps until Ctrl-C (which then failed the run).
|
|
28
|
+
* 2b. When the Claude Code plugin (`agent-config@event4u-agent-config`) is
|
|
29
|
+
* installed, refresh it: `claude plugin marketplace update` +
|
|
30
|
+
* `claude plugin update` — otherwise the plugin snapshot stays pinned to
|
|
31
|
+
* its install-time git SHA and its command surface silently rots while
|
|
32
|
+
* the file projection moves ahead. Non-fatal: a refresh failure warns and
|
|
33
|
+
* names the manual commands. The plugin is OPTIONAL — the file projection
|
|
34
|
+
* is a full install on its own; no plugin → no step, no nag.
|
|
35
|
+
* 3. `agent-config settings:sync --path <file>` for every EXISTING settings
|
|
36
|
+
* file (global `~/.event4u/agent-config/settings/.agent-settings.yml`,
|
|
37
|
+
* then the project settings when run inside a consumer project) — additive
|
|
38
|
+
* merge that inserts keys the new release added to the template while
|
|
39
|
+
* preserving user lines verbatim. Runs as a subprocess of the freshly
|
|
40
|
+
* installed binary so the NEW template is the merge source. Non-fatal:
|
|
41
|
+
* a sync failure warns and names the manual command, never fails the
|
|
42
|
+
* upgrade. Never creates a settings file that did not exist.
|
|
43
|
+
* 4. If run from inside a consumer project that already has a `./agent-config`
|
|
26
44
|
* wrapper, re-stamp that wrapper from the canonical template.
|
|
27
45
|
*
|
|
28
46
|
* Flags:
|
|
@@ -71,6 +89,9 @@ import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
|
71
89
|
import * as installed_lock from '../_lib/installed_lock.js';
|
|
72
90
|
import * as update_check from '../_lib/update_check.js';
|
|
73
91
|
import * as cli_wrapper from '../_lib/cli_wrapper.js';
|
|
92
|
+
import * as claude_plugin from '../_lib/claude_plugin.js';
|
|
93
|
+
import { event4u_root } from '../_lib/user_global_paths.js';
|
|
94
|
+
import { project_settings_path } from '../_lib/agent_settings.js';
|
|
74
95
|
import { _is_source_repo } from './cmd_refresh.js';
|
|
75
96
|
|
|
76
97
|
const PACKAGE_NAME = '@event4u/agent-config';
|
|
@@ -219,6 +240,170 @@ function _maybe_refresh_project_wrapper(project_root: string, out: OutSink, _err
|
|
|
219
240
|
}
|
|
220
241
|
}
|
|
221
242
|
|
|
243
|
+
/**
|
|
244
|
+
* Refresh the consumer's installed `.git/hooks/pre-commit` gate after a
|
|
245
|
+
* global upgrade — but only when the hook is OURS (identified by the
|
|
246
|
+
* `pre-commit-roadmap-progress` marker) and only when run from inside a
|
|
247
|
+
* project that has it. Without this, a hook installed under an older
|
|
248
|
+
* release keeps running the old template forever (`hooks:install` without
|
|
249
|
+
* `--force` short-circuits on the marker) — the py2ts-era hooks silently
|
|
250
|
+
* no-op'd for exactly this reason. Non-fatal: a failure warns and names
|
|
251
|
+
* the manual command.
|
|
252
|
+
*/
|
|
253
|
+
function _maybe_refresh_git_hook(
|
|
254
|
+
project_root: string,
|
|
255
|
+
runner: (cmd: string[]) => number,
|
|
256
|
+
out: OutSink,
|
|
257
|
+
err: OutSink,
|
|
258
|
+
): void {
|
|
259
|
+
const hook = path.join(project_root, '.git', 'hooks', 'pre-commit');
|
|
260
|
+
let text: string;
|
|
261
|
+
try {
|
|
262
|
+
text = fs.readFileSync(hook, 'utf-8');
|
|
263
|
+
} catch {
|
|
264
|
+
return; // no hook installed (or worktree indirection) — nothing to refresh
|
|
265
|
+
}
|
|
266
|
+
if (!text.includes('pre-commit-roadmap-progress')) {
|
|
267
|
+
return; // not our hook — never overwrite a foreign pre-commit
|
|
268
|
+
}
|
|
269
|
+
const cmd = [_agent_config_bin(), 'hooks:install', '--force'];
|
|
270
|
+
_print(out, '→ ' + cmd.join(' '));
|
|
271
|
+
let rc: number;
|
|
272
|
+
try {
|
|
273
|
+
rc = runner(cmd);
|
|
274
|
+
} catch (exc) {
|
|
275
|
+
rc = 127;
|
|
276
|
+
_print(err, `cannot run ${cmd[0]}: ${osErrorStr(exc)}`);
|
|
277
|
+
}
|
|
278
|
+
if (rc !== 0) {
|
|
279
|
+
_print(
|
|
280
|
+
err,
|
|
281
|
+
`⚠️ agent-config upgrade: pre-commit hook refresh failed (exit ${rc}) — ` +
|
|
282
|
+
'run `agent-config hooks:install --force` manually.',
|
|
283
|
+
);
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
/**
|
|
288
|
+
* Existing settings files the post-upgrade sync should bring up to the new
|
|
289
|
+
* template (additive merge — user lines preserved verbatim, only missing
|
|
290
|
+
* template keys inserted; see `sync_agent_settings.ts`).
|
|
291
|
+
*
|
|
292
|
+
* Targets, in order:
|
|
293
|
+
* 1. Global settings — `~/.event4u/agent-config/settings/.agent-settings.yml`
|
|
294
|
+
* (the canonical wizard-written file; `EVENT4U_CONFIG_HOME` honored).
|
|
295
|
+
* 2. Project settings — the project's read-path settings file when the
|
|
296
|
+
* upgrade runs inside a consumer project that already has one.
|
|
297
|
+
*
|
|
298
|
+
* Only files that ALREADY EXIST are returned — the sync never creates a
|
|
299
|
+
* settings file as an upgrade side effect (fresh installs get theirs from
|
|
300
|
+
* the wizard / installer).
|
|
301
|
+
*/
|
|
302
|
+
function _settings_sync_targets(project_root: string): string[] {
|
|
303
|
+
const targets: string[] = [];
|
|
304
|
+
const global_settings = path.join(event4u_root(), 'settings', '.agent-settings.yml');
|
|
305
|
+
if (_isFile(global_settings)) {
|
|
306
|
+
targets.push(global_settings);
|
|
307
|
+
}
|
|
308
|
+
const project_settings = project_settings_path(project_root);
|
|
309
|
+
if (project_settings !== global_settings && _isFile(project_settings)) {
|
|
310
|
+
targets.push(project_settings);
|
|
311
|
+
}
|
|
312
|
+
return targets;
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
/**
|
|
316
|
+
* Run the additive settings sync for every existing target — as a SUBPROCESS
|
|
317
|
+
* of the freshly installed binary, never in-process: after `npm install -g`
|
|
318
|
+
* the running module is still the OLD version, so an in-process merge would
|
|
319
|
+
* use the OLD template and miss exactly the new keys the upgrade shipped.
|
|
320
|
+
*
|
|
321
|
+
* Non-fatal by design: the upgrade itself already succeeded; a sync failure
|
|
322
|
+
* surfaces a warning + the manual command instead of failing the run.
|
|
323
|
+
*/
|
|
324
|
+
function _sync_settings_files(
|
|
325
|
+
targets: readonly string[],
|
|
326
|
+
runner: (cmd: string[]) => number,
|
|
327
|
+
out: OutSink,
|
|
328
|
+
err: OutSink,
|
|
329
|
+
): void {
|
|
330
|
+
for (const target of targets) {
|
|
331
|
+
const cmd = [_agent_config_bin(), 'settings:sync', '--path', target];
|
|
332
|
+
_print(out, '→ ' + cmd.join(' '));
|
|
333
|
+
let rc: number;
|
|
334
|
+
try {
|
|
335
|
+
rc = runner(cmd);
|
|
336
|
+
} catch (exc) {
|
|
337
|
+
rc = 127;
|
|
338
|
+
_print(err, `cannot run ${cmd[0]}: ${osErrorStr(exc)}`);
|
|
339
|
+
}
|
|
340
|
+
if (rc !== 0) {
|
|
341
|
+
_print(
|
|
342
|
+
err,
|
|
343
|
+
`⚠️ agent-config upgrade: settings sync failed (exit ${rc}) for ` +
|
|
344
|
+
`${target} — run \`agent-config settings:sync --path ${target}\` manually.`,
|
|
345
|
+
);
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
/**
|
|
351
|
+
* Refresh steps for the OPTIONAL Claude Code plugin. Non-empty only when the
|
|
352
|
+
* `claude` CLI is on PATH AND the plugin is recorded as installed — the file
|
|
353
|
+
* projection is a complete install on its own, so a missing plugin is not a
|
|
354
|
+
* gap to nag about. When present, the plugin must be refreshed alongside the
|
|
355
|
+
* global install: Claude Code pins it to the install-time git SHA, so without
|
|
356
|
+
* this step its command surface silently lags every upgrade.
|
|
357
|
+
*/
|
|
358
|
+
function _claude_plugin_refresh_steps(): string[][] {
|
|
359
|
+
const claude = shutilWhich('claude');
|
|
360
|
+
if (claude === null) return [];
|
|
361
|
+
if (!claude_plugin.claude_plugin_installed()) return [];
|
|
362
|
+
return [
|
|
363
|
+
[claude, 'plugin', 'marketplace', 'update', claude_plugin.CLAUDE_MARKETPLACE_NAME],
|
|
364
|
+
[
|
|
365
|
+
claude,
|
|
366
|
+
'plugin',
|
|
367
|
+
'update',
|
|
368
|
+
`${claude_plugin.CLAUDE_PLUGIN_ID}@${claude_plugin.CLAUDE_MARKETPLACE_NAME}`,
|
|
369
|
+
],
|
|
370
|
+
];
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
/**
|
|
374
|
+
* Run the plugin-refresh steps. Non-fatal by design (same contract as the
|
|
375
|
+
* settings sync): the upgrade itself already succeeded; a failure surfaces a
|
|
376
|
+
* warning + the manual command instead of failing the run.
|
|
377
|
+
*/
|
|
378
|
+
function _refresh_claude_plugin(
|
|
379
|
+
steps: readonly string[][],
|
|
380
|
+
runner: (cmd: string[]) => number,
|
|
381
|
+
out: OutSink,
|
|
382
|
+
err: OutSink,
|
|
383
|
+
): void {
|
|
384
|
+
for (const cmd of steps) {
|
|
385
|
+
_print(out, '→ ' + cmd.join(' '));
|
|
386
|
+
let rc: number;
|
|
387
|
+
try {
|
|
388
|
+
rc = runner(cmd);
|
|
389
|
+
} catch (exc) {
|
|
390
|
+
rc = 127;
|
|
391
|
+
_print(err, `cannot run ${cmd[0]}: ${osErrorStr(exc)}`);
|
|
392
|
+
}
|
|
393
|
+
if (rc !== 0) {
|
|
394
|
+
_print(
|
|
395
|
+
err,
|
|
396
|
+
`⚠️ agent-config upgrade: Claude Code plugin refresh failed (exit ${rc}) — ` +
|
|
397
|
+
`run \`${cmd.join(' ')}\` manually.`,
|
|
398
|
+
);
|
|
399
|
+
return;
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
if (steps.length > 0) {
|
|
403
|
+
_print(out, 'ℹ️ Claude Code plugin refreshed — restart Claude Code to load it.');
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
|
|
222
407
|
interface Args {
|
|
223
408
|
check: boolean;
|
|
224
409
|
dry_run: boolean;
|
|
@@ -321,14 +506,26 @@ export async function main(argv: string[] | null = null, options: MainOptions =
|
|
|
321
506
|
const target = `${PACKAGE_NAME}@latest`;
|
|
322
507
|
const steps: string[][] = [
|
|
323
508
|
['npm', 'install', '-g', target],
|
|
324
|
-
|
|
509
|
+
// --no-ui: the setup wizard is an onboarding surface, not an upgrade
|
|
510
|
+
// step — its foreground server used to block the upgrade until Ctrl-C.
|
|
511
|
+
[_agent_config_bin(), 'global', '--no-ui'],
|
|
325
512
|
];
|
|
326
513
|
|
|
514
|
+
const project_root = options.project_root ?? process.cwd();
|
|
515
|
+
const sync_targets = _settings_sync_targets(project_root);
|
|
516
|
+
const plugin_steps = _claude_plugin_refresh_steps();
|
|
517
|
+
|
|
327
518
|
if (args.dry_run) {
|
|
328
519
|
_print(out, 'agent-config upgrade — dry run, would execute:');
|
|
329
520
|
for (const cmd of steps) {
|
|
330
521
|
_print(out, ' ' + cmd.join(' '));
|
|
331
522
|
}
|
|
523
|
+
for (const cmd of plugin_steps) {
|
|
524
|
+
_print(out, ' ' + cmd.join(' '));
|
|
525
|
+
}
|
|
526
|
+
for (const target of sync_targets) {
|
|
527
|
+
_print(out, ' ' + [_agent_config_bin(), 'settings:sync', '--path', target].join(' '));
|
|
528
|
+
}
|
|
332
529
|
return 0;
|
|
333
530
|
}
|
|
334
531
|
|
|
@@ -344,7 +541,20 @@ export async function main(argv: string[] | null = null, options: MainOptions =
|
|
|
344
541
|
}
|
|
345
542
|
}
|
|
346
543
|
|
|
347
|
-
|
|
544
|
+
// Refresh the OPTIONAL Claude Code plugin so its command surface tracks
|
|
545
|
+
// the upgrade (no-op when the plugin is not installed — the file
|
|
546
|
+
// projection is a full install on its own).
|
|
547
|
+
_refresh_claude_plugin(plugin_steps, runner, out, err);
|
|
548
|
+
|
|
549
|
+
// Bring existing settings files up to the NEW template (additive; the
|
|
550
|
+
// subprocess resolves the freshly installed binary + template).
|
|
551
|
+
_sync_settings_files(sync_targets, runner, out, err);
|
|
552
|
+
|
|
553
|
+
_maybe_refresh_project_wrapper(project_root, out, err);
|
|
554
|
+
|
|
555
|
+
// Re-stamp OUR installed .git/hooks/pre-commit from the new template
|
|
556
|
+
// (marker-guarded; foreign hooks are never touched).
|
|
557
|
+
_maybe_refresh_git_hook(project_root, runner, out, err);
|
|
348
558
|
|
|
349
559
|
_print(
|
|
350
560
|
out,
|
|
@@ -361,10 +571,29 @@ function installed_lock_is_newer(latest: string, installed: string): boolean {
|
|
|
361
571
|
|
|
362
572
|
// --- CLI entry ---
|
|
363
573
|
|
|
364
|
-
|
|
365
|
-
process.argv[1]
|
|
366
|
-
|
|
367
|
-
|
|
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) {
|
|
368
597
|
main(process.argv.slice(2))
|
|
369
598
|
.then((code) => {
|
|
370
599
|
process.exitCode = code;
|
|
@@ -367,10 +367,29 @@ export function main(argv: string[]): number {
|
|
|
367
367
|
|
|
368
368
|
// --- CLI entry ---
|
|
369
369
|
|
|
370
|
-
|
|
371
|
-
process.argv[1]
|
|
372
|
-
|
|
373
|
-
|
|
370
|
+
function _isCliEntry(): boolean {
|
|
371
|
+
if (process.argv[1] === undefined) {
|
|
372
|
+
return false;
|
|
373
|
+
}
|
|
374
|
+
const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
|
|
375
|
+
if (import.meta.url === argvUrl) {
|
|
376
|
+
return true;
|
|
377
|
+
}
|
|
378
|
+
// A symlinked invocation (e.g. via an installed `.augment/` projection,
|
|
379
|
+
// or macOS /var → /private/var temp dirs) makes the raw URLs differ:
|
|
380
|
+
// import.meta.url is the resolved real path while argv[1] keeps the
|
|
381
|
+
// symlink path. Compare realpaths so the entry guard still fires
|
|
382
|
+
// (without this the CLI silently no-ops when run through a symlink).
|
|
383
|
+
try {
|
|
384
|
+
const here = fs.realpathSync(fileURLToPath(import.meta.url));
|
|
385
|
+
const argv = fs.realpathSync(path.resolve(process.argv[1]));
|
|
386
|
+
return here === argv;
|
|
387
|
+
} catch {
|
|
388
|
+
return false;
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
if (_isCliEntry() || process.argv[1] === _HERE) {
|
|
374
393
|
try {
|
|
375
394
|
process.exitCode = main(process.argv.slice(2));
|
|
376
395
|
} catch (e) {
|
|
@@ -476,10 +476,29 @@ export function main(argv: string[] | null = null, options: MainOptions = {}): n
|
|
|
476
476
|
// Python: `if __name__ == "__main__": raise SystemExit(main())` (no argv slice;
|
|
477
477
|
// argparse reads sys.argv[1:] inside `_parse` default).
|
|
478
478
|
const _HERE = fileURLToPath(import.meta.url);
|
|
479
|
-
|
|
480
|
-
process.argv[1]
|
|
481
|
-
|
|
482
|
-
|
|
479
|
+
function _isCliEntry(): boolean {
|
|
480
|
+
if (process.argv[1] === undefined) {
|
|
481
|
+
return false;
|
|
482
|
+
}
|
|
483
|
+
const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
|
|
484
|
+
if (import.meta.url === argvUrl) {
|
|
485
|
+
return true;
|
|
486
|
+
}
|
|
487
|
+
// A symlinked invocation (e.g. via an installed `.augment/` projection,
|
|
488
|
+
// or macOS /var → /private/var temp dirs) makes the raw URLs differ:
|
|
489
|
+
// import.meta.url is the resolved real path while argv[1] keeps the
|
|
490
|
+
// symlink path. Compare realpaths so the entry guard still fires
|
|
491
|
+
// (without this the CLI silently no-ops when run through a symlink).
|
|
492
|
+
try {
|
|
493
|
+
const here = fs.realpathSync(fileURLToPath(import.meta.url));
|
|
494
|
+
const argv = fs.realpathSync(path.resolve(process.argv[1]));
|
|
495
|
+
return here === argv;
|
|
496
|
+
} catch {
|
|
497
|
+
return false;
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
if (_isCliEntry() || process.argv[1] === _HERE) {
|
|
483
502
|
try {
|
|
484
503
|
process.exitCode = main();
|
|
485
504
|
} catch (exc) {
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
# * CWD on entry is the consumer's repo root — we keep it that way
|
|
14
14
|
# so underlying scripts resolve paths correctly.
|
|
15
15
|
# * PACKAGE_ROOT is derived from this script's location, used only to
|
|
16
|
-
# locate the package-internal
|
|
16
|
+
# locate the package-internal TypeScript scripts (mcp_render.ts, …).
|
|
17
17
|
# * Unknown arguments are forwarded verbatim to the underlying script.
|
|
18
18
|
|
|
19
19
|
set -euo pipefail
|
|
@@ -138,19 +138,26 @@ Tier 2 — maintenance / internal (hooks, MCP, memory, telemetry):
|
|
|
138
138
|
mcp:render Render mcp.json → .cursor/mcp.json, .windsurf/mcp.json
|
|
139
139
|
(pass --claude-desktop to also write user-scope config)
|
|
140
140
|
mcp:check Dry-run mcp:render; exit non-zero if targets are stale
|
|
141
|
-
mcp:setup
|
|
141
|
+
mcp:setup Verify the tsx runtime + MCP server module and
|
|
142
|
+
print the client config snippet
|
|
142
143
|
(one-line MCP server onboarding; idempotent)
|
|
143
144
|
mcp:run Run the built-in MCP server over stdio
|
|
144
145
|
(requires `mcp:setup` first; see docs/mcp-server.md)
|
|
145
146
|
(experimental — beta gates: docs/contracts/mcp-beta-criteria.md)
|
|
146
147
|
roadmap:progress Regenerate agents/roadmaps-progress.md from open roadmaps
|
|
147
148
|
roadmap:progress-check Fail if agents/roadmaps-progress.md is stale (for CI)
|
|
149
|
+
roadmap:archive Archive completed roadmaps (branch-touched by default;
|
|
150
|
+
--all for every complete one; --dry-run to preview)
|
|
148
151
|
capabilities:index Regenerate CAPABILITIES.yaml — the package coverage index
|
|
149
152
|
(capability area → coverage → backing skills/commands → gaps).
|
|
150
153
|
Pass --check to fail if stale (for CI). Reads src/ (package repo).
|
|
151
154
|
settings:check Validate .agent-settings.yml against the YAML-subset contract
|
|
152
155
|
(docs/contracts/settings-sync-yaml-subset.md). Read-only.
|
|
153
156
|
Exit 0 clean, 1 finding(s), 2 file absent / unreadable.
|
|
157
|
+
settings:sync Additively merge new template keys into an existing
|
|
158
|
+
.agent-settings.yml (user lines preserved verbatim).
|
|
159
|
+
Run automatically by `upgrade`. Flags: --path <file>
|
|
160
|
+
| --dry-run | --check (exit 2 on drift) | --profile.
|
|
154
161
|
settings:migrate Lift project-local .agent-settings.yml / .agent-user.yml into
|
|
155
162
|
~/.event4u/agent-config/ (the global-only consumer surface,
|
|
156
163
|
ADR-020). Idempotent; --force overwrites a non-empty global
|
|
@@ -284,20 +291,35 @@ print_version() {
|
|
|
284
291
|
fi
|
|
285
292
|
}
|
|
286
293
|
|
|
287
|
-
# Resolve the tsx runner (Python→TypeScript migration).
|
|
288
|
-
#
|
|
289
|
-
#
|
|
294
|
+
# Resolve the tsx runner (Python→TypeScript migration). tsx ships as a
|
|
295
|
+
# RUNTIME dependency of the package, so the package-local install is the
|
|
296
|
+
# canonical source — first via node_modules/.bin, then via the module's CLI
|
|
297
|
+
# entry (covers installs where .bin shims are missing). `npx tsx` is a last
|
|
298
|
+
# resort only: npx runs against the CONSUMER project's cwd, so its npm config
|
|
299
|
+
# and devEngines/engines constraints apply — a consumer pinning e.g.
|
|
300
|
+
# `node <24` hard-fails every hook and TS command with EBADDEVENGINES (the
|
|
301
|
+
# 8.1.0 regression that silently broke hooks + roadmap:progress in consumer
|
|
302
|
+
# projects). Exits 127 when nothing works — the runtime is Node/tsx, there is
|
|
303
|
+
# no Python fallback.
|
|
290
304
|
require_tsx() {
|
|
291
305
|
if [[ -x "$PACKAGE_ROOT/node_modules/.bin/tsx" ]]; then
|
|
292
306
|
TSX_BIN="$PACKAGE_ROOT/node_modules/.bin/tsx"
|
|
293
307
|
return 0
|
|
294
308
|
fi
|
|
309
|
+
if [[ -f "$PACKAGE_ROOT/node_modules/tsx/dist/cli.mjs" ]] && command -v node >/dev/null 2>&1; then
|
|
310
|
+
TSX_BIN="node $PACKAGE_ROOT/node_modules/tsx/dist/cli.mjs"
|
|
311
|
+
return 0
|
|
312
|
+
fi
|
|
295
313
|
if command -v npx >/dev/null 2>&1; then
|
|
314
|
+
echo "⚠️ agent-config: package-local tsx not found — falling back to \`npx tsx\`" >&2
|
|
315
|
+
echo " (subject to this project's npm config; reinstall the package to fix:" >&2
|
|
316
|
+
echo " npm install -g @event4u/agent-config)" >&2
|
|
296
317
|
TSX_BIN="npx tsx"
|
|
297
318
|
return 0
|
|
298
319
|
fi
|
|
299
|
-
echo "❌ agent-config: tsx runner not found
|
|
300
|
-
echo "
|
|
320
|
+
echo "❌ agent-config: tsx runner not found" >&2
|
|
321
|
+
echo " Reinstall the package (npm install -g @event4u/agent-config) to provide" >&2
|
|
322
|
+
echo " node_modules/tsx, or run \`npm install\` at the package root." >&2
|
|
301
323
|
exit 127
|
|
302
324
|
}
|
|
303
325
|
|
|
@@ -335,7 +357,7 @@ exec_hook() {
|
|
|
335
357
|
|
|
336
358
|
# Locate a script. First argument is relative to PACKAGE_ROOT, second is
|
|
337
359
|
# an optional fallback relative to CONSUMER_ROOT (for scripts that ship
|
|
338
|
-
# to the consumer via .augment/, e.g. update_roadmap_progress.
|
|
360
|
+
# to the consumer via .augment/, e.g. update_roadmap_progress.ts).
|
|
339
361
|
resolve_script() {
|
|
340
362
|
local pkg_rel="$1"
|
|
341
363
|
local consumer_rel="${2-}"
|
|
@@ -422,6 +444,14 @@ cmd_roadmap_progress_check() {
|
|
|
422
444
|
exec_ts "$script" --check "$@"
|
|
423
445
|
}
|
|
424
446
|
|
|
447
|
+
# The PR-gate archival sweep (`/create-pr` § 1c and roadmap-progress-sync's
|
|
448
|
+
# PR-gate) instructs `./agent-config roadmap:archive` — this is that command.
|
|
449
|
+
cmd_roadmap_archive() {
|
|
450
|
+
local script
|
|
451
|
+
script="$(resolve_script "dist/agent-src/scripts/archive_completed_roadmaps.ts" ".augment/scripts/archive_completed_roadmaps.ts")"
|
|
452
|
+
exec_ts "$script" "$@"
|
|
453
|
+
}
|
|
454
|
+
|
|
425
455
|
cmd_capabilities_index() {
|
|
426
456
|
local script
|
|
427
457
|
script="$(resolve_script "src/scripts/generate_capabilities_index.ts")"
|
|
@@ -593,7 +623,7 @@ Three modes, picked by flag combination:
|
|
|
593
623
|
at the consumer root. Idempotent.
|
|
594
624
|
|
|
595
625
|
--regen Provision the roadmap-progress regenerator at
|
|
596
|
-
.augment/scripts/update_roadmap_progress.
|
|
626
|
+
.augment/scripts/update_roadmap_progress.ts
|
|
597
627
|
(canonical path per docs/contracts/hook-architecture-v1.md
|
|
598
628
|
§ Regenerator location). Idempotent.
|
|
599
629
|
|
|
@@ -793,7 +823,7 @@ cmd_keys_install_openai() {
|
|
|
793
823
|
|
|
794
824
|
# Council CLI — non-interactive wrapper around scripts.ai_council.orchestrator.
|
|
795
825
|
# Three subcommands share one Python entry point; we forward the subcommand
|
|
796
|
-
# verb so `./agent-config council:run --confirm` lands on `council_cli.
|
|
826
|
+
# verb so `./agent-config council:run --confirm` lands on `council_cli.ts run`.
|
|
797
827
|
cmd_council() {
|
|
798
828
|
local sub="$1"; shift || true
|
|
799
829
|
local script
|
|
@@ -811,7 +841,7 @@ cmd_use() {
|
|
|
811
841
|
}
|
|
812
842
|
|
|
813
843
|
# `agent-config update` — flip the agent_config_version pin in
|
|
814
|
-
# .agent-settings.yml. See scripts/_cli/cmd_update.
|
|
844
|
+
# .agent-settings.yml. See scripts/_cli/cmd_update.ts (P3.1 of
|
|
815
845
|
# road-to-portable-runtime-and-update-check.md).
|
|
816
846
|
cmd_update() {
|
|
817
847
|
exec_ts "$PACKAGE_ROOT/src/scripts/_cli/cmd_update.ts" "$@"
|
|
@@ -826,7 +856,7 @@ cmd_refresh() {
|
|
|
826
856
|
}
|
|
827
857
|
|
|
828
858
|
# `agent-config migrate` — one-shot migration off legacy composer / npm
|
|
829
|
-
# install paths onto the npx-only runtime. See scripts/_cli/cmd_migrate.
|
|
859
|
+
# install paths onto the npx-only runtime. See scripts/_cli/cmd_migrate.ts
|
|
830
860
|
# (P3.5 of road-to-portable-runtime-and-update-check.md).
|
|
831
861
|
cmd_migrate() {
|
|
832
862
|
exec_ts "$PACKAGE_ROOT/src/scripts/_cli/cmd_migrate.ts" "$@"
|
|
@@ -845,7 +875,7 @@ cmd_init() {
|
|
|
845
875
|
# `agent-config global` — user-scope install entry point. Forwards to the
|
|
846
876
|
# bash installer with `--global` set (ADR-007). Phase 1.2 of
|
|
847
877
|
# road-to-global-first-install.md. The bash wrapper handles option parsing
|
|
848
|
-
# and forwards to `scripts/install.
|
|
878
|
+
# and forwards to `scripts/install.ts --global`, where `install_global()`
|
|
849
879
|
# currently scaffolds the per-tool anchor paths from USER_SCOPE_PATHS.
|
|
850
880
|
# Concrete writes land in Phase 1.5 (export) and Phase 1.6 (lockfile).
|
|
851
881
|
cmd_global() {
|
|
@@ -857,7 +887,7 @@ cmd_global() {
|
|
|
857
887
|
# `agent-config export` — write a tool's canonical content into a
|
|
858
888
|
# user-chosen path. ADR-007 D3 / Phase 1.5 of
|
|
859
889
|
# road-to-global-first-install.md. Replaces the rejected symlink-bridge.
|
|
860
|
-
# See scripts/_cli/cmd_export.
|
|
890
|
+
# See scripts/_cli/cmd_export.ts for the registry and idempotency logic.
|
|
861
891
|
cmd_export() {
|
|
862
892
|
exec_ts "$PACKAGE_ROOT/src/scripts/_cli/cmd_export.ts" "$@"
|
|
863
893
|
}
|
|
@@ -884,6 +914,17 @@ cmd_settings_check() {
|
|
|
884
914
|
exec_ts "$PACKAGE_ROOT/src/scripts/_cli/cmd_settings_check.ts" "$@"
|
|
885
915
|
}
|
|
886
916
|
|
|
917
|
+
# `agent-config settings:sync` — additive merge of the current
|
|
918
|
+
# agent-settings template into an existing .agent-settings.yml. User lines
|
|
919
|
+
# are preserved verbatim; only missing template keys are inserted.
|
|
920
|
+
# Idempotent. Invoked automatically by `agent-config upgrade` for every
|
|
921
|
+
# existing settings file (global + project) so nobody keeps stale settings
|
|
922
|
+
# after a release. Flags: --path <file> | --dry-run | --check | --profile.
|
|
923
|
+
# Exit 0 in-sync / updated, 2 drift under --check or bad input.
|
|
924
|
+
cmd_settings_sync() {
|
|
925
|
+
exec_ts "$PACKAGE_ROOT/src/scripts/sync_agent_settings.ts" "$@"
|
|
926
|
+
}
|
|
927
|
+
|
|
887
928
|
# `agent-config settings:migrate` — lift project-local
|
|
888
929
|
# .agent-settings.yml / .agent-user.yml into ~/.event4u/agent-config/.
|
|
889
930
|
# Phase 2.4 of road-to-global-only-install.md. Read-only on the source —
|
|
@@ -897,7 +938,7 @@ cmd_settings_migrate() {
|
|
|
897
938
|
# `agent-config uninstall` — remove bridge markers (project) or lockfile
|
|
898
939
|
# entries (global). Idempotent. Pass `--purge` to also delete deployed
|
|
899
940
|
# content directories under user-scope anchors (destructive). See
|
|
900
|
-
# scripts/_cli/cmd_uninstall.
|
|
941
|
+
# scripts/_cli/cmd_uninstall.ts.
|
|
901
942
|
cmd_uninstall() {
|
|
902
943
|
exec_ts "$PACKAGE_ROOT/src/scripts/_cli/cmd_uninstall.ts" "$@"
|
|
903
944
|
}
|
|
@@ -906,14 +947,14 @@ cmd_uninstall() {
|
|
|
906
947
|
# Drift-cleanup sibling to `uninstall`: compares on-disk markers
|
|
907
948
|
# against agents/installed-tools.lock and unlinks anything not
|
|
908
949
|
# declared. Hard-floors when lockfile is absent. See
|
|
909
|
-
# scripts/_cli/cmd_prune.
|
|
950
|
+
# scripts/_cli/cmd_prune.ts.
|
|
910
951
|
cmd_prune() {
|
|
911
952
|
exec_ts "$PACKAGE_ROOT/src/scripts/_cli/cmd_prune.ts" "$@"
|
|
912
953
|
}
|
|
913
954
|
|
|
914
955
|
# `agent-config doctor` — read-only drift report against the manifest.
|
|
915
956
|
# Surfaces missing / modified / foreign files. Exit 0 clean, 1 drift,
|
|
916
|
-
# 2 manifest-absent. See scripts/_cli/cmd_doctor.
|
|
957
|
+
# 2 manifest-absent. See scripts/_cli/cmd_doctor.ts.
|
|
917
958
|
cmd_doctor() {
|
|
918
959
|
exec_ts "$PACKAGE_ROOT/src/scripts/_cli/cmd_doctor.ts" "$@"
|
|
919
960
|
}
|
|
@@ -930,14 +971,14 @@ cmd_conformance() {
|
|
|
930
971
|
# `agent-config versions` — list available @event4u/agent-config versions
|
|
931
972
|
# on the npm registry. Marks the current pin (from .agent-settings.yml)
|
|
932
973
|
# and the latest published version. Offline-tolerant. See
|
|
933
|
-
# scripts/_cli/cmd_versions.
|
|
974
|
+
# scripts/_cli/cmd_versions.ts.
|
|
934
975
|
cmd_versions() {
|
|
935
976
|
exec_ts "$PACKAGE_ROOT/src/scripts/_cli/cmd_versions.ts" "$@"
|
|
936
977
|
}
|
|
937
978
|
|
|
938
979
|
# `agent-config explain <config|rule|route>` — print the decision chain
|
|
939
980
|
# behind a configuration or routing outcome. Read-only diagnostic; never
|
|
940
|
-
# edits state. See scripts/_cli/cmd_explain.
|
|
981
|
+
# edits state. See scripts/_cli/cmd_explain.ts.
|
|
941
982
|
cmd_explain() {
|
|
942
983
|
exec_ts "$PACKAGE_ROOT/src/scripts/_cli/cmd_explain.ts" "$@"
|
|
943
984
|
}
|
|
@@ -961,6 +1002,7 @@ main() {
|
|
|
961
1002
|
use) cmd_use "$@" ;;
|
|
962
1003
|
roadmap:progress) cmd_roadmap_progress "$@" ;;
|
|
963
1004
|
roadmap:progress-check) cmd_roadmap_progress_check "$@" ;;
|
|
1005
|
+
roadmap:archive) cmd_roadmap_archive "$@" ;;
|
|
964
1006
|
capabilities:index) cmd_capabilities_index "$@" ;;
|
|
965
1007
|
hooks:install) cmd_hooks_install "$@" ;;
|
|
966
1008
|
keys:install-anthropic) cmd_keys_install_anthropic "$@" ;;
|
|
@@ -1001,6 +1043,7 @@ main() {
|
|
|
1001
1043
|
sync) cmd_sync "$@" ;;
|
|
1002
1044
|
validate) cmd_validate "$@" ;;
|
|
1003
1045
|
settings:check) cmd_settings_check "$@" ;;
|
|
1046
|
+
settings:sync) cmd_settings_sync "$@" ;;
|
|
1004
1047
|
settings:migrate) cmd_settings_migrate "$@" ;;
|
|
1005
1048
|
uninstall) cmd_uninstall "$@" ;;
|
|
1006
1049
|
prune) cmd_prune "$@" ;;
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claude Code plugin detection helpers — shared by `cmd_upgrade`,
|
|
3
|
+
* `cmd_doctor`, and the installer.
|
|
4
|
+
*
|
|
5
|
+
* Claude Code loads the FULL top-level command set (`/implement-ticket`,
|
|
6
|
+
* `/work`, `/review-changes`, …) from the installed plugin
|
|
7
|
+
* (`agent-config@event4u-agent-config`), NOT from the `~/.claude/commands/`
|
|
8
|
+
* file projection. A file-only install therefore silently misses top-level
|
|
9
|
+
* commands while namespaced subcommands (`/fix:pr-comments`, …) keep working
|
|
10
|
+
* — and an installed plugin stays pinned to its install-time git SHA until
|
|
11
|
+
* `claude plugin update` runs. These helpers detect both states so
|
|
12
|
+
* upgrade / doctor / install can refresh the plugin or surface the gap.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import * as fs from 'node:fs';
|
|
16
|
+
import * as os from 'node:os';
|
|
17
|
+
import * as path from 'node:path';
|
|
18
|
+
import process from 'node:process';
|
|
19
|
+
|
|
20
|
+
export const CLAUDE_PLUGIN_ID = 'agent-config';
|
|
21
|
+
export const CLAUDE_MARKETPLACE_NAME = 'event4u-agent-config';
|
|
22
|
+
export const CLAUDE_MARKETPLACE_REPO = 'event4u-app/agent-config';
|
|
23
|
+
|
|
24
|
+
/** The one-time install commands surfaced when the plugin is missing. */
|
|
25
|
+
export const CLAUDE_PLUGIN_INSTALL_HINT: readonly string[] = [
|
|
26
|
+
`claude plugin marketplace add ${CLAUDE_MARKETPLACE_REPO}`,
|
|
27
|
+
`claude plugin install ${CLAUDE_PLUGIN_ID}@${CLAUDE_MARKETPLACE_NAME}`,
|
|
28
|
+
];
|
|
29
|
+
|
|
30
|
+
/** Claude Code config dir — `CLAUDE_CONFIG_DIR` env override, else `~/.claude`. */
|
|
31
|
+
export function claude_config_dir(): string {
|
|
32
|
+
const env = (process.env['CLAUDE_CONFIG_DIR'] ?? '').trim();
|
|
33
|
+
return env !== '' ? env : path.join(os.homedir(), '.claude');
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* True when the agent-config plugin is recorded in Claude Code's
|
|
38
|
+
* `plugins/installed_plugins.json` (any marketplace — matched by the
|
|
39
|
+
* `agent-config@` id prefix). Unreadable / absent file → false.
|
|
40
|
+
*/
|
|
41
|
+
export function claude_plugin_installed(): boolean {
|
|
42
|
+
const p = path.join(claude_config_dir(), 'plugins', 'installed_plugins.json');
|
|
43
|
+
let data: unknown;
|
|
44
|
+
try {
|
|
45
|
+
data = JSON.parse(fs.readFileSync(p, 'utf-8'));
|
|
46
|
+
} catch {
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
if (data === null || typeof data !== 'object') return false;
|
|
50
|
+
const plugins = (data as { plugins?: unknown }).plugins;
|
|
51
|
+
if (plugins === null || plugins === undefined || typeof plugins !== 'object') return false;
|
|
52
|
+
return Object.keys(plugins as Record<string, unknown>).some((k) =>
|
|
53
|
+
k.startsWith(`${CLAUDE_PLUGIN_ID}@`),
|
|
54
|
+
);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Version recorded in the installed marketplace snapshot's
|
|
59
|
+
* `.claude-plugin/marketplace.json` (`metadata.version` — bumped per
|
|
60
|
+
* release, so it tracks the package version the snapshot was taken from).
|
|
61
|
+
* Null when the snapshot is absent or unreadable.
|
|
62
|
+
*/
|
|
63
|
+
export function claude_plugin_snapshot_version(): string | null {
|
|
64
|
+
const p = path.join(
|
|
65
|
+
claude_config_dir(),
|
|
66
|
+
'plugins',
|
|
67
|
+
'marketplaces',
|
|
68
|
+
CLAUDE_MARKETPLACE_NAME,
|
|
69
|
+
'.claude-plugin',
|
|
70
|
+
'marketplace.json',
|
|
71
|
+
);
|
|
72
|
+
let data: unknown;
|
|
73
|
+
try {
|
|
74
|
+
data = JSON.parse(fs.readFileSync(p, 'utf-8'));
|
|
75
|
+
} catch {
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
if (data === null || typeof data !== 'object') return null;
|
|
79
|
+
const metadata = (data as { metadata?: unknown }).metadata;
|
|
80
|
+
if (metadata === null || metadata === undefined || typeof metadata !== 'object') return null;
|
|
81
|
+
const v = (metadata as { version?: unknown }).version;
|
|
82
|
+
return typeof v === 'string' && v.trim() !== '' ? v.trim() : null;
|
|
83
|
+
}
|