@event4u/agent-config 16.5.0 → 17.0.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/.augment-plugin/marketplace.json +3 -3
- package/.augment-plugin/plugin.json +1 -1
- package/.claude-plugin/marketplace.json +2 -2
- package/.claude-plugin/skills/install-agent-config/SKILL.md +4 -4
- package/CHANGELOG.md +463 -498
- package/CONTRIBUTING.md +47 -0
- package/README.md +25 -25
- package/dist/agent-src/commands/{design.md → agent-design.md} +10 -6
- package/dist/agent-src/commands/agents/init.md +66 -3
- package/dist/agent-src/commands/agents/user/init.md +3 -0
- package/dist/agent-src/commands/{optimize/deep.md → analyze/and-optimize.md} +72 -33
- package/dist/agent-src/commands/analyze/inbox.md +168 -37
- package/dist/agent-src/commands/analyze/pr.md +144 -0
- package/dist/agent-src/commands/analyze/{repo.md → reference.md} +85 -14
- package/dist/agent-src/commands/analyze/roadmap-repos.md +19 -10
- package/dist/agent-src/commands/analyze.md +28 -12
- package/dist/agent-src/commands/audit.md +115 -0
- package/dist/agent-src/commands/brand/review.md +13 -2
- package/dist/agent-src/commands/brand/tokens.md +3 -3
- package/dist/agent-src/commands/brand/voice.md +8 -5
- package/dist/agent-src/commands/brand.md +2 -2
- package/dist/agent-src/commands/challenge-me/closure.md +25 -0
- package/dist/agent-src/commands/design-system/import.md +8 -3
- package/dist/agent-src/commands/design-system/sync.md +98 -0
- package/dist/agent-src/commands/design-system.md +6 -1
- package/dist/agent-src/commands/evals/analyze.json +44 -0
- package/dist/agent-src/commands/evals/audit.json +12 -0
- package/dist/agent-src/commands/evals/retro.json +12 -0
- package/dist/agent-src/commands/fix/ci.md +10 -8
- package/dist/agent-src/commands/ghostwriter/write.md +22 -0
- package/dist/agent-src/commands/memory/learn-low-impact.md +70 -83
- package/dist/agent-src/commands/memory/propose.md +12 -0
- package/dist/agent-src/commands/memory.md +1 -1
- package/dist/agent-src/commands/optimize.md +4 -3
- package/dist/agent-src/commands/post-as/me.md +18 -0
- package/dist/agent-src/commands/pr/create.md +17 -342
- package/dist/agent-src/commands/pr/merge.md +129 -368
- package/dist/agent-src/commands/retro.md +121 -0
- package/dist/agent-src/commands/review/routing.md +1 -1
- package/dist/agent-src/commands/roadmap/next.md +4 -1
- package/dist/agent-src/commands/roadmap/process-full.md +46 -333
- package/dist/agent-src/commands/roadmap/triage-parked.md +6 -2
- package/dist/agent-src/commands/team-knowledge/consolidate.md +2 -2
- package/dist/agent-src/commands/team-knowledge.md +1 -1
- package/dist/agent-src/commands/threat-model.md +1 -1
- package/dist/agent-src/commands/upstream-contribute.md +91 -101
- package/dist/agent-src/commands/worktree/cleanup.md +18 -11
- package/dist/agent-src/contexts/contracts/consumer-agents-md-guide.md +54 -0
- package/dist/agent-src/contexts/execution/analysis-loop.md +137 -0
- package/dist/agent-src/contexts/execution/auto-dispatch-classification.md +3 -3
- package/dist/agent-src/contexts/execution/decision-closure-execution.md +1 -1
- package/dist/agent-src/contexts/execution/host-capability-manifest.md +6 -0
- package/dist/agent-src/contexts/execution/orchestration-telemetry.md +11 -4
- package/dist/agent-src/contexts/execution/pr-create-branches-content.md +250 -0
- package/dist/agent-src/contexts/execution/pr-create-branches-freshness.md +150 -0
- package/dist/agent-src/contexts/execution/pr-merge-queue.md +287 -0
- package/dist/agent-src/contexts/execution/pr-merge-sync.md +276 -0
- package/dist/agent-src/contexts/execution/pr-merge-trust-boundary.md +69 -0
- package/dist/agent-src/contexts/execution/process-full-all.md +233 -0
- package/dist/agent-src/contexts/execution/process-full-delivery.md +231 -0
- package/dist/agent-src/contexts/execution/roadmap-execution-contract-branches.md +42 -0
- package/dist/agent-src/contexts/execution/roadmap-execution-contract.md +1 -35
- package/dist/agent-src/contexts/execution/roadmap-process-loop-close.md +235 -0
- package/dist/agent-src/contexts/execution/roadmap-process-loop-prescan.md +216 -0
- package/dist/agent-src/contexts/execution/roadmap-process-loop-run.md +253 -0
- package/dist/agent-src/contexts/execution/roadmap-process-loop-set.md +212 -0
- package/dist/agent-src/contexts/execution/roadmap-process-loop.md +25 -864
- package/dist/agent-src/contexts/execution/subagent-spawn-contract.md +14 -2
- package/dist/agent-src/contexts/execution/subagent-steering.md +65 -8
- package/dist/agent-src/contexts/model-recommendations.md +5 -5
- package/dist/agent-src/contexts/subagent-configuration.md +1 -1
- package/dist/agent-src/guidelines/agent-infra/api-cost-levers.md +4 -3
- package/dist/agent-src/guidelines/agent-infra/model-recommendation.md +11 -5
- package/dist/agent-src/guidelines/agent-infra/rule-body-migration-inventory.md +1 -1
- package/dist/agent-src/guidelines/agent-infra/self-improvement-pipeline.md +47 -24
- package/dist/agent-src/guidelines/design-antipatterns.md +5 -0
- package/dist/agent-src/guidelines/design-asset-discipline.md +17 -0
- package/dist/agent-src/guidelines/design-fidelity-routing.md +1 -0
- package/dist/agent-src/guidelines/php/api-design.md +10 -1
- package/dist/agent-src/rules/brand-source-of-truth.md +7 -6
- package/dist/agent-src/rules/code-provenance.md +1 -1
- package/dist/agent-src/rules/context-hygiene.md +0 -1
- package/dist/agent-src/rules/design-fidelity.md +12 -13
- package/dist/agent-src/rules/external-reference-deep-dive.md +2 -2
- package/dist/agent-src/rules/fix-what-you-see.md +1 -1
- package/dist/agent-src/rules/low-impact-corpus-privacy-floor.md +14 -15
- package/dist/agent-src/rules/missing-skill-recovery.md +12 -11
- package/dist/agent-src/rules/neighbour-precedence.md +1 -1
- package/dist/agent-src/rules/recurring-criticism.md +1 -1
- package/dist/agent-src/rules/roadmap-ci-steps-policy.md +0 -2
- package/dist/agent-src/rules/self-repair-loop.md +2 -2
- package/dist/agent-src/rules/token-budget-discipline.md +1 -1
- package/dist/agent-src/scripts/dashboard_mode.ts +4 -1
- package/dist/agent-src/scripts/roadmap_age.ts +175 -0
- package/dist/agent-src/scripts/update_roadmap_progress.ts +10 -2
- package/dist/agent-src/skills/accessibility-auditor/SKILL.md +3 -3
- package/dist/agent-src/skills/agent-security-review/SKILL.md +2 -2
- package/dist/agent-src/skills/agents-md-thin-root/SKILL.md +12 -4
- package/dist/agent-src/skills/ai-code-blindspots/SKILL.md +7 -0
- package/dist/agent-src/skills/ai-council/references/advanced-modes.md +11 -1
- package/dist/agent-src/skills/ai-council/references/cost-and-redaction.md +7 -0
- package/dist/agent-src/skills/ai-council/references/execution-modes.md +7 -0
- package/dist/agent-src/skills/ai-council/references/output-and-synthesis.md +19 -0
- package/dist/agent-src/skills/ai-council/references/procedure.md +7 -0
- package/dist/agent-src/skills/api-design/SKILL.md +2 -2
- package/dist/agent-src/skills/api-endpoint/SKILL.md +2 -2
- package/dist/agent-src/skills/authz-review/SKILL.md +5 -3
- package/dist/agent-src/skills/blade-ui/SKILL.md +2 -2
- package/dist/agent-src/skills/brand/SKILL.md +7 -3
- package/dist/agent-src/skills/brand-asset-generation/SKILL.md +13 -6
- package/dist/agent-src/skills/brand-audit/SKILL.md +2 -1
- package/dist/agent-src/skills/brand-identity/SKILL.md +5 -4
- package/dist/agent-src/skills/brand-strategy/SKILL.md +5 -4
- package/dist/agent-src/skills/brand-to-tokens/SKILL.md +18 -39
- package/dist/agent-src/skills/brand-to-tokens/templates/marp-brand-deck.md.example +2 -2
- package/dist/agent-src/skills/brand-to-tokens/templates/reveal-brand-deck.yaml +2 -2
- package/dist/agent-src/skills/canvas-design/SKILL.md +12 -2
- package/dist/agent-src/skills/competitive-positioning/SKILL.md +2 -2
- package/dist/agent-src/skills/composer-packages/SKILL.md +18 -0
- package/dist/agent-src/skills/condense-memory/SKILL.md +1 -1
- package/dist/agent-src/skills/content-funnel-design/SKILL.md +8 -1
- package/dist/agent-src/skills/context-authoring/SKILL.md +1 -1
- package/dist/agent-src/skills/context-document/SKILL.md +2 -2
- package/dist/agent-src/skills/corpus-grounding/SKILL.md +6 -6
- package/dist/agent-src/skills/corpus-grounding/scripts/decision_engine.ts +13 -11
- package/dist/agent-src/skills/corpus-grounding/scripts/ground.mjs +1706 -0
- package/dist/agent-src/skills/corpus-grounding/scripts/schema_validator.ts +7 -1
- package/dist/agent-src/skills/dashboard-design/SKILL.md +1 -1
- package/dist/agent-src/skills/data-flow-mapper/SKILL.md +5 -2
- package/dist/agent-src/skills/database/SKILL.md +5 -4
- package/dist/agent-src/skills/decision-record/references/weighted-matrix.md +12 -0
- package/dist/agent-src/skills/deep-reading-analyst/SKILL.md +1 -1
- package/dist/agent-src/skills/dependency-upgrade/SKILL.md +61 -11
- package/dist/agent-src/skills/description-assist/SKILL.md +1 -1
- package/dist/agent-src/skills/design-intelligence/SKILL.md +1 -1
- package/dist/agent-src/skills/design-intelligence/data/landing.csv +1 -1
- package/dist/agent-src/skills/design-intelligence/references/context-and-registers.md +10 -2
- package/dist/agent-src/skills/design-intelligence/references/design-languages.md +1 -1
- package/dist/agent-src/skills/design-intelligence/references/design-rules-checklist.md +4 -3
- package/dist/agent-src/skills/design-intelligence/references/integration-mapping.md +14 -14
- package/dist/agent-src/skills/{wireframe → design-review}/references/story-beat-ledger.schema.json +1 -1
- package/dist/agent-src/skills/design-review/references/verification-automation.md +11 -3
- package/dist/agent-src/skills/design-system-capture/SKILL.md +15 -10
- package/dist/agent-src/skills/design-system-capture/references/design-system-json.md +20 -5
- package/dist/agent-src/skills/design-system-capture/references/import-procedure.md +2 -2
- package/dist/agent-src/skills/design-tokens/SKILL.md +23 -23
- package/dist/agent-src/skills/design-tokens/scripts/tokens.mjs +1037 -0
- package/dist/agent-src/skills/design-tokens/scripts/tokens.ts +336 -13
- package/dist/agent-src/skills/design-tokens/templates/design-tokens-starter.json +52 -53
- package/dist/agent-src/skills/docker/SKILL.md +1 -1
- package/dist/agent-src/skills/estimate-ticket/SKILL.md +1 -1
- package/dist/agent-src/skills/existing-ui-audit/SKILL.md +14 -276
- package/dist/agent-src/skills/existing-ui-audit/procedure.yaml +44 -0
- package/dist/agent-src/skills/existing-ui-audit/references/anti-slop-cross-reference.md +1 -1
- package/dist/agent-src/skills/existing-ui-audit/references/steps/00-inspect-stack-and-input.md +4 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/01-enumerate-components.md +26 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/01b-detect-component-taxonomy.md +7 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/02-identify-design-system.md +12 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/03-detect-design-tokens.md +35 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/04-detect-shadcn-inventory.md +13 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/04b-live-storybook-read.md +26 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/05-list-reusable-patterns.md +14 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/06-match-candidates.md +52 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/07-greenfield-branch.md +29 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/08-a11y-baseline.md +40 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/09-validate-and-write.md +5 -0
- package/dist/agent-src/skills/experiment-loop/SKILL.md +1 -1
- package/dist/agent-src/skills/fe-design/references/design-patterns.md +16 -2
- package/dist/agent-src/skills/fe-design/references/design-read-and-memory.md +1 -1
- package/dist/agent-src/skills/fe-design/references/source-led-port.md +1 -1
- package/dist/agent-src/skills/finishing-a-development-branch/SKILL.md +6 -6
- package/dist/agent-src/skills/flux/SKILL.md +1 -1
- package/dist/agent-src/skills/form-handler/SKILL.md +15 -2
- package/dist/agent-src/skills/git-workflow/SKILL.md +2 -2
- package/dist/agent-src/skills/git-workflow/references/branch-update.md +7 -0
- package/dist/agent-src/skills/git-workflow/references/commit-subject.md +12 -0
- package/dist/agent-src/skills/git-workflow/references/push-closes-its-loop.md +10 -0
- package/dist/agent-src/skills/gtm-launch/SKILL.md +8 -1
- package/dist/agent-src/skills/html-deck/SKILL.md +7 -2
- package/dist/agent-src/skills/humanizer/SKILL.md +16 -3
- package/dist/agent-src/skills/humanizer/references/anti-aiisms.md +13 -1
- package/dist/agent-src/skills/humanizer/references/fixtures.md +8 -0
- package/dist/agent-src/skills/js-library-packaging/SKILL.md +5 -4
- package/dist/agent-src/skills/js-library-packaging/scripts/check_package_surface.mjs +197 -0
- package/dist/agent-src/skills/judge-artifact-completeness/SKILL.md +1 -1
- package/dist/agent-src/skills/judge-security-auditor/SKILL.md +2 -2
- package/dist/agent-src/skills/launch-readiness/SKILL.md +18 -22
- package/dist/agent-src/skills/learning-to-rule-or-skill/SKILL.md +5 -5
- package/dist/agent-src/skills/livewire/SKILL.md +1 -1
- package/dist/agent-src/skills/llm-provider-knowledge/SKILL.md +18 -0
- package/dist/agent-src/skills/logo-generation/SKILL.md +9 -3
- package/dist/agent-src/skills/market-entry-analysis/SKILL.md +6 -1
- package/dist/agent-src/skills/markitdown/SKILL.md +1 -1
- package/dist/agent-src/skills/memory-consolidation/SKILL.md +2 -2
- package/dist/agent-src/skills/messaging-architecture/SKILL.md +8 -1
- package/dist/agent-src/skills/motion-choreographer/SKILL.md +2 -2
- package/dist/agent-src/skills/playwright-testing/SKILL.md +2 -0
- package/dist/agent-src/skills/positioning-strategy/SKILL.md +10 -2
- package/dist/agent-src/skills/prediction-pool-optimizer/references/ev-fixtures.md +13 -0
- package/dist/agent-src/skills/prediction-pool-optimizer/references/odds-and-bonus.md +7 -0
- package/dist/agent-src/skills/project-analysis-core/SKILL.md +1 -1
- package/dist/agent-src/skills/project-analysis-hypothesis-driven/SKILL.md +1 -1
- package/dist/agent-src/skills/project-analyzer/SKILL.md +14 -75
- package/dist/agent-src/skills/project-analyzer/procedure.yaml +39 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/01-project-overview.md +9 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/02-architecture.md +7 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/03-data-layer.md +6 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/04-business-domains.md +7 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/05-api-surface.md +6 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/06-service-map.md +6 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/07-module-inventory.md +6 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/08-infrastructure-and-testing.md +5 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/09-agent-docs-audit.md +6 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/10-gap-analysis.md +6 -0
- package/dist/agent-src/skills/quality-tools/references/js-ts-tools.md +10 -0
- package/dist/agent-src/skills/quality-tools/references/php-tools.md +13 -0
- package/dist/agent-src/skills/quality-tools/references/python-tools.md +11 -0
- package/dist/agent-src/skills/react-native-setup/SKILL.md +7 -2
- package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +5 -1
- package/dist/agent-src/skills/react-shadcn-ui/references/registry.md +13 -0
- package/dist/agent-src/skills/react-shadcn-ui/scripts/shadcn_add.mjs +315 -0
- package/dist/agent-src/skills/react-shadcn-ui/scripts/shadcn_add.ts +6 -6
- package/dist/agent-src/skills/receiving-code-review/SKILL.md +1 -1
- package/dist/agent-src/skills/refine-ticket/SKILL.md +2 -2
- package/dist/agent-src/skills/release-comms/SKILL.md +2 -1
- package/dist/agent-src/skills/repomix-packer/SKILL.md +2 -2
- package/dist/agent-src/skills/requesting-code-review/SKILL.md +3 -3
- package/dist/agent-src/skills/roadmap-management/references/archival.md +3 -3
- package/dist/agent-src/skills/roadmap-management/references/authoring.md +9 -2
- package/dist/agent-src/skills/roadmap-management/references/dashboard.md +3 -3
- package/dist/agent-src/skills/roadmap-management/references/lifecycle.md +3 -3
- package/dist/agent-src/skills/roadmap-writing/SKILL.md +4 -4
- package/dist/agent-src/skills/rtk-output-filtering/SKILL.md +1 -1
- package/dist/agent-src/skills/rule-writing/SKILL.md +1 -2
- package/dist/agent-src/skills/security/SKILL.md +41 -5
- package/dist/agent-src/skills/skill-improvement-pipeline/SKILL.md +5 -3
- package/dist/agent-src/skills/skill-reviewer/SKILL.md +1 -1
- package/dist/agent-src/skills/skill-writing/SKILL.md +23 -8
- package/dist/agent-src/skills/skill-writing/references/section-patterns.md +19 -1
- package/dist/agent-src/skills/source-discovery/SKILL.md +3 -3
- package/dist/agent-src/skills/sql-writing/SKILL.md +2 -2
- package/dist/agent-src/skills/standards-from-config/SKILL.md +2 -2
- package/dist/agent-src/skills/storybook-workshop/SKILL.md +5 -0
- package/dist/agent-src/skills/storybook-workshop/scripts/story_contrast_floor.mjs +99 -0
- package/dist/agent-src/skills/subagent-orchestration/SKILL.md +13 -13
- package/dist/agent-src/skills/subagent-orchestration/prompts/README.md +4 -3
- package/dist/agent-src/skills/svg-authoring/SKILL.md +7 -1
- package/dist/agent-src/skills/systematic-debugging/SKILL.md +2 -2
- package/dist/agent-src/skills/tailwind-engineer/SKILL.md +8 -3
- package/dist/agent-src/skills/tailwind-engineer/scripts/tailwind_config_gen.mjs +482 -0
- package/dist/agent-src/skills/test-case-discovery/SKILL.md +1 -1
- package/dist/agent-src/skills/threat-modeling/SKILL.md +8 -1
- package/dist/agent-src/skills/threat-modeling/data/manifest.json +5 -2
- package/dist/agent-src/skills/threat-modeling/data/reasoning.csv +10 -10
- package/dist/agent-src/skills/threat-modeling/data/surfaces.csv +11 -10
- package/dist/agent-src/skills/threat-modeling/data/threats.csv +34 -20
- package/dist/agent-src/skills/type-design/SKILL.md +196 -0
- package/dist/agent-src/skills/type-design/references/font-spec.md +90 -0
- package/dist/agent-src/skills/type-design/references/gates.md +113 -0
- package/dist/agent-src/skills/type-design/references/toolchain.md +66 -0
- package/dist/agent-src/skills/typography-system/SKILL.md +21 -11
- package/dist/agent-src/skills/typography-system/references/worked-scales.md +85 -0
- package/dist/agent-src/skills/ui-apply-generic/SKILL.md +1 -1
- package/dist/agent-src/skills/universal-project-analysis/SKILL.md +1 -1
- package/dist/agent-src/skills/upstream-contribute/SKILL.md +120 -125
- package/dist/agent-src/skills/using-git-worktrees/SKILL.md +1 -0
- package/dist/agent-src/skills/verify-repair-loop/SKILL.md +1 -1
- package/dist/agent-src/skills/voice-and-tone-design/SKILL.md +71 -2
- package/dist/agent-src/skills/worktree-lifecycle/SKILL.md +16 -14
- package/dist/agent-src/templates/AGENTS.md +1 -1
- package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/dist/agent-src/templates/agents/proposal.example.md +1 -1
- package/dist/agent-src/templates/github-workflows/advisories-daily.yml +85 -0
- package/dist/agent-src/templates/roadmaps.md +39 -1
- package/dist/agent-src/templates/scripts/check_memory.ts +2 -2
- package/dist/agent-src/templates/scripts/historical-bug-patterns.example.yml +13 -1
- package/dist/agent-src/templates/scripts/work_engine/cli.ts +17 -0
- package/dist/agent-src/templates/scripts/work_engine/cli_args.ts +10 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/scaffold.ts +22 -13
- package/dist/agent-src/templates/scripts/work_engine/dispatcher.ts +18 -4
- package/dist/agent-src/templates/scripts/work_engine/procedure/checks.ts +283 -0
- package/dist/agent-src/templates/scripts/work_engine/procedure/run.ts +432 -0
- package/dist/agent-src/templates/scripts/work_engine/procedure/sidecar.ts +185 -0
- package/dist/agent-src/templates/scripts/work_engine/state.ts +3 -0
- package/dist/cli/commands/uiRender.js +72 -17
- package/dist/cli/commands/uiRenderAsset.js +10 -2
- package/dist/cli/commands/uiRenderAssetFonts.js +158 -0
- package/dist/cli/commands/uiRenderAssetTypes.js +8 -20
- package/dist/cli/initRouting.js +1 -1
- package/dist/cli/mcp/dispatch.js +31 -9
- package/dist/cli/python/knowledge_ingest.js +7 -39
- package/dist/cli/python/workspace_secrets.js +4 -177
- package/dist/cli/registry.js +4 -1
- package/dist/cli-delegate/archive_completed_roadmaps.js +3 -2
- package/dist/cli-delegate/check_update_banner.js +635 -266
- package/dist/cli-delegate/{chunk-TMWYUOK4.js → chunk-2CX7NWRB.js} +224 -437
- package/dist/cli-delegate/{chunk-F3QDG2GT.js → chunk-2SFOOFJJ.js} +259 -159
- package/dist/cli-delegate/chunk-2Y5AMLMY.js +136 -0
- package/dist/cli-delegate/{chunk-OKJUIAPS.js → chunk-4E2W63DA.js} +1 -62
- package/dist/cli-delegate/{chunk-6SRJTYJS.js → chunk-4SHNERBL.js} +37 -16
- package/dist/cli-delegate/chunk-5VO3RTMV.js +208 -0
- package/dist/cli-delegate/chunk-6E2LDY4F.js +27 -0
- package/dist/cli-delegate/{chunk-XQTPXKFA.js → chunk-6ZD2QZMN.js} +8 -17
- package/dist/cli-delegate/{chunk-6V5FMA3P.js → chunk-7CEI2YPS.js} +1 -1
- package/dist/cli-delegate/{chunk-DMSZHXZS.js → chunk-7DRWULEQ.js} +80 -7
- package/dist/cli-delegate/chunk-7NXCZSDL.js +54 -0
- package/dist/cli-delegate/chunk-AX3U3UWJ.js +328 -0
- package/dist/cli-delegate/{chunk-WOKWX5PL.js → chunk-BKALSTBZ.js} +18 -3
- package/dist/cli-delegate/chunk-BMGUGSY6.js +103 -0
- package/dist/cli-delegate/chunk-BYV46VRM.js +3309 -0
- package/dist/cli-delegate/{chunk-5GPULQBE.js → chunk-CAL76ADI.js} +4215 -682
- package/dist/cli-delegate/chunk-DSY6LLCQ.js +127 -0
- package/dist/cli-delegate/chunk-E6XNBVE4.js +581 -0
- package/dist/cli-delegate/{chunk-ZUZKZYCN.js → chunk-ESUNQ5XR.js} +46 -10
- package/dist/cli-delegate/{chunk-G5VVIZRC.js → chunk-F7HLSW6P.js} +1 -1
- package/dist/cli-delegate/chunk-FIEEOH5C.js +133 -0
- package/dist/cli-delegate/chunk-FKYZOWVD.js +719 -0
- package/dist/cli-delegate/chunk-GOMILC3O.js +918 -0
- package/dist/cli-delegate/chunk-I4KJYVPB.js +69 -0
- package/dist/cli-delegate/{chunk-JQOM7TTM.js → chunk-IDAOTDPE.js} +1 -100
- package/dist/cli-delegate/chunk-IROAQ77A.js +137 -0
- package/dist/cli-delegate/chunk-J2SJZICO.js +698 -0
- package/dist/cli-delegate/{chunk-6YQC2HLF.js → chunk-JHMMWNJ2.js} +54 -40
- package/dist/cli-delegate/{chunk-WQWXGIWB.js → chunk-M6CRG5O6.js} +165 -15
- package/dist/cli-delegate/{chunk-PHD7OOLE.js → chunk-MQ2UDEGV.js} +14 -3
- package/dist/cli-delegate/chunk-NTM7G2V4.js +220 -0
- package/dist/cli-delegate/chunk-PV7S5DPJ.js +175 -0
- package/dist/cli-delegate/{chunk-F7DQWYR5.js → chunk-RAXQOETZ.js} +6 -2
- package/dist/cli-delegate/{chunk-T7XSJSUQ.js → chunk-SIOMDAKL.js} +980 -784
- package/dist/cli-delegate/{chunk-KR6EM23A.js → chunk-TULVDQ4L.js} +3 -48
- package/dist/cli-delegate/chunk-UUYEKXKR.js +20 -0
- package/dist/cli-delegate/{chunk-7XGD2OEU.js → chunk-UXWHY6CQ.js} +2 -1
- package/dist/cli-delegate/{chunk-PWX7CKMD.js → chunk-VC3ECUEK.js} +1 -1
- package/dist/cli-delegate/{chunk-KXXWJTDO.js → chunk-WMNYVIYX.js} +1 -1
- package/dist/cli-delegate/chunk-XCY5KKUC.js +181 -0
- package/dist/cli-delegate/{chunk-H76PHZBI.js → chunk-XLY5G3CM.js} +14 -19
- package/dist/cli-delegate/cmd_adr_effective.js +41 -2
- package/dist/cli-delegate/cmd_analyze_session.js +7 -7
- package/dist/cli-delegate/cmd_brand_status.js +1287 -10
- package/dist/cli-delegate/cmd_ci_settle.js +330 -0
- package/dist/cli-delegate/cmd_conformance.js +483 -817
- package/dist/cli-delegate/cmd_doctor.js +26 -16
- package/dist/cli-delegate/cmd_doctor_neighbours.js +10 -7
- package/dist/cli-delegate/cmd_explain.js +9 -24
- package/dist/cli-delegate/cmd_export.js +14 -11
- package/dist/cli-delegate/cmd_fleet.js +5 -3
- package/dist/cli-delegate/cmd_git_convention.js +8 -4
- package/dist/cli-delegate/cmd_handoff.js +79 -242
- package/dist/cli-delegate/cmd_mcp_available.js +1 -1
- package/dist/cli-delegate/cmd_memory_get.js +4 -2
- package/dist/cli-delegate/cmd_migrate.js +2 -2
- package/dist/cli-delegate/cmd_packs_active.js +2 -2
- package/dist/cli-delegate/cmd_preflight.js +7 -5
- package/dist/cli-delegate/cmd_prune.js +16 -13
- package/dist/cli-delegate/cmd_route_audit.js +11 -8
- package/dist/cli-delegate/cmd_route_explain.js +649 -16
- package/dist/cli-delegate/cmd_session_recycle.js +15 -6
- package/dist/cli-delegate/cmd_settings_check.js +2 -2
- package/dist/cli-delegate/cmd_settings_get.js +1 -1
- package/dist/cli-delegate/cmd_settings_migrate.js +14 -11
- package/dist/cli-delegate/cmd_settings_set.js +1 -1
- package/dist/cli-delegate/cmd_sync.js +16 -13
- package/dist/cli-delegate/cmd_uninstall.js +185 -31
- package/dist/cli-delegate/cmd_update.js +67 -3
- package/dist/cli-delegate/cmd_upgrade.js +38 -7
- package/dist/cli-delegate/cmd_validate.js +16 -13
- package/dist/cli-delegate/cmd_versions.js +1 -1
- package/dist/cli-delegate/dashboard_mode.js +1 -1
- package/dist/cli-delegate/gate_execute.js +4 -3
- package/dist/cli-delegate/roadmap_age.js +22 -0
- package/dist/cli-delegate/roadmap_gates.js +4 -3
- package/dist/cli-delegate/update_roadmap_progress.js +3 -2
- package/dist/cli-delegate/upgrade_unattended-VVL6JLSX.js +541 -0
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +373 -190
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +5 -5
- package/dist/discovery/dormancy-report.md +1 -1
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +21 -16
- package/dist/discovery/trust-report.md +3 -3
- package/dist/discovery/workspaces.json +16 -11
- package/dist/hooks/chat_history.chunk.cjs +6852 -0
- package/dist/hooks/chat_history.chunk.cjs.sha256 +1 -0
- package/dist/hooks/dispatch.js +17506 -18692
- package/dist/hooks/dispatch.sha256 +1 -1
- package/dist/hooks/egress_engine.chunk.cjs +915 -0
- package/dist/hooks/egress_engine.chunk.cjs.sha256 +1 -0
- package/dist/hooks/svg_rules.chunk.cjs +281 -49
- package/dist/hooks/svg_rules.chunk.cjs.sha256 +1 -1
- package/dist/install/conflict.js +36 -6
- package/dist/install/conflictTracker.js +81 -7
- package/dist/install/detect.js +3 -3
- package/dist/install/hostPermissionsAdapter.js +106 -0
- package/dist/install/install.mjs +3117 -1949
- package/dist/install/installThinLayer.js +1 -1
- package/dist/install/manifestFiles.js +21 -0
- package/dist/install/noGoDenyRows.js +300 -0
- package/dist/install/noGoRules.js +368 -0
- package/dist/install/ownershipLedger.js +133 -0
- package/dist/install/plan.js +1 -1
- package/dist/install/preflight.js +39 -8
- package/dist/install/preserve.js +74 -12
- package/dist/install/recordedOwnership.js +88 -5
- package/dist/install/rule_scope.js +20 -3
- package/dist/install/stagedRuntime.js +455 -0
- package/dist/install/toolsArg.js +19 -0
- package/dist/install/userPin.js +47 -0
- package/dist/install/wizard-plan.js +26 -4
- package/dist/mcp/awesome-mcp-servers.row.md +1 -1
- package/dist/mcp/mcp-cloudflare-catalogue.json +3 -2
- package/dist/mcp/registry-manifest.json +6 -5
- package/dist/mcp/server.json +3 -3
- package/dist/mcp/server.mjs +9831 -5546
- package/dist/router.json +1 -1
- package/dist/scripts/_lib/agent_settings.js +7 -12
- package/dist/scripts/_lib/asset_render_record.js +219 -0
- package/dist/scripts/_lib/claude_builtin_names.js +9 -4
- package/dist/scripts/_lib/claude_settings_hooks.js +102 -34
- package/dist/scripts/_lib/egress_rules.js +766 -0
- package/dist/scripts/_lib/environment_detector.js +24 -33
- package/dist/scripts/_lib/global_deploy_inventory.js +146 -9
- package/dist/scripts/_lib/guidelines_lane.js +10 -1
- package/dist/scripts/_lib/identifier_redaction.js +24 -0
- package/dist/scripts/_lib/installed_layer.js +17 -0
- package/dist/scripts/_lib/installed_layer_normalise.js +72 -0
- package/dist/scripts/_lib/lean_projection_mode.js +34 -152
- package/dist/scripts/_lib/project_tree_form.js +118 -0
- package/dist/scripts/_lib/scoped_projection.js +133 -3
- package/dist/scripts/_lib/settings_removed_keys.js +29 -0
- package/dist/scripts/_lib/settings_renamed_keys.js +17 -5
- package/dist/scripts/_lib/subagent_native_fields.js +35 -0
- package/dist/scripts/_lib/svg_filled_counter.js +285 -0
- package/dist/scripts/_lib/svg_rules.js +2 -0
- package/dist/scripts/_lib/ui_surface.js +19 -0
- package/dist/scripts/_lib/verification_command.js +364 -0
- package/dist/scripts/_lib/workspace_secrets.js +229 -0
- package/dist/scripts/ai_council/seat_policy.js +27 -0
- package/dist/scripts/ai_council/transport_resolver.js +9 -10
- package/dist/scripts/condense.js +25 -29
- package/dist/server/io/substituteTemplate.js +2 -2
- package/dist/server/io/yamlIO.js +2 -2
- package/dist/server/routes/install.js +5 -1
- package/dist/server/routes/settings.js +2 -2
- package/dist/server/routes/wizard.js +1 -1
- package/dist/server/schemas/settings.js +22 -16
- package/dist/server/serverInfo.js +1 -1
- package/dist/shared/brandTokenDocument.js +47 -0
- package/dist/shared/brandTokenPaths.js +43 -0
- package/dist/shared/settingsCarveOut.js +0 -7
- package/dist/shared/skillRanking.js +103 -5
- package/dist/shared/userMd/formAdapter.js +16 -0
- package/dist/shared/userMd/schema.js +17 -0
- package/dist/ui/assets/index-w70Ado09.js +23 -0
- package/dist/ui/index.html +1 -1
- package/docs/MIGRATION.md +89 -2
- package/docs/THIRD-PARTY-NOTICES.md +27 -0
- package/docs/contracts/settings-classes.md +27 -9
- package/docs/guidelines/agent-infra/api-cost-levers.md +4 -3
- package/docs/guidelines/agent-infra/model-recommendation.md +11 -5
- package/docs/guidelines/agent-infra/rule-body-migration-inventory.md +1 -1
- package/docs/guidelines/agent-infra/self-improvement-pipeline.md +47 -24
- package/docs/guidelines/design-antipatterns.md +5 -0
- package/docs/guidelines/design-asset-discipline.md +17 -0
- package/docs/guidelines/design-fidelity-routing.md +1 -0
- package/docs/guidelines/php/api-design.md +10 -1
- package/llms.txt +12 -10
- package/package.json +13 -4
- package/src/agent-src/scripts/dashboard_mode.ts +4 -1
- package/src/agent-src/scripts/roadmap_age.ts +175 -0
- package/src/agent-src/scripts/update_roadmap_progress.ts +10 -2
- package/src/agent-src/templates/AGENTS.md +1 -1
- package/src/agent-src/templates/scripts/check_memory.ts +2 -2
- package/src/agent-src/templates/scripts/historical-bug-patterns.example.yml +13 -1
- package/src/agent-src/templates/scripts/work_engine/cli.ts +17 -0
- package/src/agent-src/templates/scripts/work_engine/cli_args.ts +10 -0
- package/src/agent-src/templates/scripts/work_engine/directives/ui/scaffold.ts +22 -13
- package/src/agent-src/templates/scripts/work_engine/dispatcher.ts +18 -4
- package/src/agent-src/templates/scripts/work_engine/procedure/checks.ts +283 -0
- package/src/agent-src/templates/scripts/work_engine/procedure/run.ts +432 -0
- package/src/agent-src/templates/scripts/work_engine/procedure/sidecar.ts +185 -0
- package/src/agent-src/templates/scripts/work_engine/state.ts +3 -0
- package/src/config/agent-settings.template.yml +120 -57
- package/src/config/agents-paths.yml +13 -7
- package/src/config/ci-local-parity.yml +44 -0
- package/src/config/continuity-surface.json +51 -2
- package/src/config/depth-audit-samples.json +5 -0
- package/src/config/discovery/command-verbs.yml +1 -0
- package/src/config/dispatch-economy-metrics.json +1 -0
- package/src/config/egress-mutations/class-precedence-swapped.json +7 -0
- package/src/config/egress-mutations/credential-token-restores.json +7 -0
- package/src/config/egress-mutations/iban-checksum-disabled.json +7 -0
- package/src/config/egress-mutations/raw-value-in-the-count-record.json +7 -0
- package/src/config/evaluator-budgets.json +4 -4
- package/src/config/gate-coverage.yml +149 -3
- package/src/config/gate-reachability-exemptions.json +3 -5
- package/src/config/gate-violation-baselines.json +26 -22
- package/src/config/gitignore-block.txt +6 -3
- package/src/config/hook-bundle-budget.json +34 -3
- package/src/config/hook-carrier-probes.json +30 -0
- package/src/config/hook-latency-budget.json +4 -2
- package/src/config/host-injection-effect.json +8 -1
- package/src/config/host-skill-frontmatter-keys.json +56 -0
- package/src/config/layer-form-brakes.json +4 -0
- package/src/config/layer-form-comparison-corpus.json +42 -0
- package/src/config/loop-surfaces.yaml +28 -47
- package/src/config/memory-twin-verdicts.yml +9 -1
- package/src/config/metric-registry.yml +40 -3
- package/src/config/pack-size-budget.json +15 -0
- package/src/config/procedure-core-budget.json +21 -0
- package/src/config/profiles/minimal.ini +1 -1
- package/src/config/project-tree-form.json +24 -0
- package/src/config/reach-channels.yml +3 -3
- package/src/config/reach-prescriptions-intake.yml +1 -1
- package/src/config/roadmap-step-size-baseline.json +118 -0
- package/src/config/routing-coverage-seed.json +93 -2
- package/src/config/skill-body-budget.json +686 -0
- package/src/config/skill-fork-pilot.json +17 -0
- package/src/config/skill-lifecycle-probes-codex.json +57 -0
- package/src/config/skill-lifecycle-probes.json +57 -0
- package/src/config/skill-output-shape.json +316 -0
- package/src/config/step-depth-table.json +58 -0
- package/src/config/turnaround-budget.json +90 -0
- package/src/install/conflict.ts +38 -6
- package/src/install/conflictTracker.ts +126 -8
- package/src/install/detect.ts +3 -3
- package/src/install/hostPermissionsAdapter.ts +136 -0
- package/src/install/installThinLayer.ts +6 -1
- package/src/install/manifestFiles.ts +24 -0
- package/src/install/noGoDenyRows.ts +368 -0
- package/src/install/noGoRules.ts +438 -0
- package/src/install/ownershipLedger.ts +180 -0
- package/src/install/plan.ts +1 -1
- package/src/install/preflight.ts +42 -10
- package/src/install/preserve.ts +94 -12
- package/src/install/recordedOwnership.ts +121 -3
- package/src/install/rule_scope.ts +20 -3
- package/src/install/stagedRuntime.ts +528 -0
- package/src/install/toolsArg.ts +16 -0
- package/src/install/types.ts +23 -2
- package/src/install/userPin.ts +54 -0
- package/src/install/wizard-plan.ts +25 -4
- package/src/scripts/_cli/_doctor_emit.ts +24 -0
- package/src/scripts/_cli/cmd_brand_status.ts +223 -12
- package/src/scripts/_cli/cmd_ci_settle.ts +32 -0
- package/src/scripts/_cli/cmd_doctor.ts +23 -44
- package/src/scripts/_cli/cmd_route_explain.ts +176 -2
- package/src/scripts/_cli/cmd_uninstall.ts +270 -26
- package/src/scripts/_cli/cmd_update.ts +34 -1
- package/src/scripts/_cli/cmd_upgrade.ts +38 -2
- package/src/scripts/_cli/detection_report.ts +7 -0
- package/src/scripts/_cli/doctor_execution.ts +1 -2
- package/src/scripts/_cli/doctor_install_mode.ts +39 -0
- package/src/scripts/_cli/doctor_network_posture.ts +3 -3
- package/src/scripts/_cli/doctor_ownership_ledger.ts +126 -0
- package/src/scripts/_cli/doctor_update_verdict.ts +104 -0
- package/src/scripts/_cli/explain_last/scrubber.ts +9 -21
- package/src/scripts/_cli/upgrade_unattended.ts +548 -0
- package/src/scripts/_dispatch.bash +42 -9
- package/src/scripts/_lib/activation_ladder.ts +1 -1
- package/src/scripts/_lib/advisory_inventory.ts +405 -0
- package/src/scripts/_lib/advisory_notice.ts +270 -0
- package/src/scripts/_lib/advisory_sources.ts +752 -0
- package/src/scripts/_lib/advisory_verdicts.ts +363 -0
- package/src/scripts/_lib/agent_artifact_location.ts +177 -0
- package/src/scripts/_lib/agent_settings.ts +7 -12
- package/src/scripts/_lib/arrival_record.ts +217 -0
- package/src/scripts/_lib/asset_render_record.ts +247 -0
- package/src/scripts/_lib/billing_grant.ts +4 -2
- package/src/scripts/_lib/brand_voice_slot.ts +258 -0
- package/src/scripts/_lib/canary_status.ts +24 -0
- package/src/scripts/_lib/cc_transcript.ts +276 -0
- package/src/scripts/_lib/changelog_eras.ts +83 -0
- package/src/scripts/_lib/claim_phrases.ts +71 -0
- package/src/scripts/_lib/classify_update.ts +171 -0
- package/src/scripts/_lib/claude_builtin_names.ts +9 -4
- package/src/scripts/_lib/claude_hook_scope.ts +195 -0
- package/src/scripts/_lib/claude_settings_hooks.ts +118 -34
- package/src/scripts/_lib/codex_resident_set.ts +460 -0
- package/src/scripts/_lib/codex_skill_finder.ts +225 -0
- package/src/scripts/_lib/confusables.ts +19 -0
- package/src/scripts/_lib/consumer_impact.ts +199 -0
- package/src/scripts/_lib/content_class.ts +127 -0
- package/src/scripts/_lib/counted_probe.ts +68 -1
- package/src/scripts/_lib/credential_deny_rows.ts +151 -0
- package/src/scripts/_lib/credential_files.ts +367 -0
- package/src/scripts/_lib/delivery_arm_experiment.ts +2 -2
- package/src/scripts/_lib/depth_flip.ts +141 -0
- package/src/scripts/_lib/design_lock.ts +117 -0
- package/src/scripts/_lib/design_sync_ledger.ts +142 -0
- package/src/scripts/_lib/design_sync_plan.ts +177 -0
- package/src/scripts/_lib/design_sync_reconcile.ts +159 -0
- package/src/scripts/_lib/design_sync_verify.ts +99 -0
- package/src/scripts/_lib/design_system_claude_design.ts +323 -0
- package/src/scripts/_lib/design_system_import.ts +84 -6
- package/src/scripts/_lib/dispatch_import_closure.ts +42 -11
- package/src/scripts/_lib/egress_credential_env.ts +35 -0
- package/src/scripts/_lib/egress_engine.ts +22 -0
- package/src/scripts/_lib/egress_known_values.ts +223 -0
- package/src/scripts/_lib/egress_normalize.ts +67 -0
- package/src/scripts/_lib/egress_prefixes.ts +42 -0
- package/src/scripts/_lib/egress_rules.ts +896 -0
- package/src/scripts/_lib/egress_rules_linearity.ts +56 -0
- package/src/scripts/_lib/egress_sender_scan.ts +290 -0
- package/src/scripts/_lib/egress_session_table.ts +510 -0
- package/src/scripts/_lib/egress_text.ts +63 -0
- package/src/scripts/_lib/egress_token.ts +252 -0
- package/src/scripts/_lib/empty_cycles.ts +1 -1
- package/src/scripts/_lib/environment_detector.ts +45 -30
- package/src/scripts/_lib/exemption_shape.ts +75 -1
- package/src/scripts/_lib/floor_posture.ts +185 -0
- package/src/scripts/_lib/forge_protection.ts +140 -2
- package/src/scripts/_lib/global_deploy_inventory.ts +159 -6
- package/src/scripts/_lib/guidelines_lane.ts +12 -1
- package/src/scripts/_lib/hand_kinds.ts +65 -0
- package/src/scripts/_lib/headless_invocation.ts +3 -3
- package/src/scripts/_lib/host_capability.ts +34 -2
- package/src/scripts/_lib/host_env_write.ts +39 -18
- package/src/scripts/_lib/host_listing_model.ts +14 -7
- package/src/scripts/_lib/identifier_redaction.ts +26 -0
- package/src/scripts/_lib/impact_bump.ts +70 -0
- package/src/scripts/_lib/install_reach_checks.ts +53 -1
- package/src/scripts/_lib/installed_layer.ts +31 -0
- package/src/scripts/_lib/installed_layer_normalise.ts +75 -0
- package/src/scripts/_lib/instructions_loaded_classify.ts +75 -0
- package/src/scripts/_lib/instructions_loaded_event.ts +53 -0
- package/src/scripts/_lib/knowledge_global_redaction.ts +2 -2
- package/src/scripts/_lib/layer_form_corpus.ts +165 -0
- package/src/scripts/_lib/layer_form_decision.ts +248 -0
- package/src/scripts/_lib/layer_form_evidence.ts +112 -0
- package/src/scripts/_lib/lean_projection_mode.ts +32 -161
- package/src/scripts/_lib/llm_proposer_transport.ts +1 -0
- package/src/scripts/_lib/loop_guards.ts +8 -120
- package/src/scripts/_lib/major_surface.ts +207 -0
- package/src/scripts/_lib/mcp_bridge.ts +30 -69
- package/src/scripts/_lib/merge_clearance_record.ts +384 -0
- package/src/scripts/_lib/neighbour_census.ts +18 -1
- package/src/scripts/_lib/orchestration_record.ts +61 -0
- package/src/scripts/_lib/outcome_vocabularies.ts +15 -23
- package/src/scripts/_lib/pin_advice.ts +49 -0
- package/src/scripts/_lib/platform_anchor.ts +222 -0
- package/src/scripts/_lib/procedure_checks.ts +5 -0
- package/src/scripts/_lib/project_tree_form.ts +134 -0
- package/src/scripts/_lib/projection_key_migration.ts +122 -0
- package/src/scripts/_lib/prompt_shape.ts +13 -2
- package/src/scripts/_lib/provenance_verify.ts +272 -0
- package/src/scripts/_lib/quota_parked.ts +27 -1
- package/src/scripts/_lib/ratification_artifact.ts +64 -1
- package/src/scripts/_lib/ratification_subject.ts +508 -46
- package/src/scripts/_lib/release_findings_ingest.ts +52 -5
- package/src/scripts/_lib/release_highlights.ts +72 -2
- package/src/scripts/_lib/release_settings_surface.ts +392 -0
- package/src/scripts/_lib/review_round.ts +134 -0
- package/src/scripts/_lib/roadmap_checkboxes.ts +1 -1
- package/src/scripts/_lib/roadmap_slug_lock.ts +254 -0
- package/src/scripts/_lib/roadmap_step_size.ts +75 -0
- package/src/scripts/_lib/run_checkpoint.ts +60 -3
- package/src/scripts/_lib/runtime_wiring_checks.ts +15 -1
- package/src/scripts/_lib/scope_guard.sh +64 -5
- package/src/scripts/_lib/scoped_projection.ts +136 -3
- package/src/scripts/_lib/secret_detector.ts +24 -103
- package/src/scripts/_lib/security_fix.ts +429 -0
- package/src/scripts/_lib/security_fix_context.ts +133 -0
- package/src/scripts/_lib/self_repair.ts +69 -39
- package/src/scripts/_lib/self_repair_outgoing.ts +209 -0
- package/src/scripts/_lib/self_repair_payload.ts +86 -0
- package/src/scripts/_lib/session_eol.ts +3 -0
- package/src/scripts/_lib/session_pr_watch.ts +207 -0
- package/src/scripts/_lib/session_register.ts +51 -1
- package/src/scripts/_lib/session_tag.ts +51 -0
- package/src/scripts/_lib/settings_removed_keys.ts +30 -0
- package/src/scripts/_lib/settings_renamed_keys.ts +19 -5
- package/src/scripts/_lib/skill_catalogue.ts +66 -25
- package/src/scripts/_lib/skill_fork_pilot.ts +121 -0
- package/src/scripts/_lib/skill_leases.ts +203 -0
- package/src/scripts/_lib/skill_listing_overrides.ts +294 -0
- package/src/scripts/_lib/skill_materialisation.ts +388 -0
- package/src/scripts/_lib/skill_materialisation_gate.ts +210 -0
- package/src/scripts/_lib/skill_materialisation_lock.ts +149 -0
- package/src/scripts/_lib/skill_materialisation_triggers.ts +96 -0
- package/src/scripts/_lib/skill_origin.ts +21 -1
- package/src/scripts/_lib/skill_reach.ts +342 -0
- package/src/scripts/_lib/source_shape.ts +7 -2
- package/src/scripts/_lib/sqlite_guard.ts +1 -1
- package/src/scripts/_lib/step_anatomy.ts +330 -0
- package/src/scripts/_lib/subagent_capsule.ts +8 -2
- package/src/scripts/_lib/subagent_native_fields.ts +30 -0
- package/src/scripts/_lib/subagent_spawn.ts +36 -0
- package/src/scripts/_lib/subagent_steering.ts +367 -0
- package/src/scripts/_lib/svg_filled_counter.ts +287 -0
- package/src/scripts/_lib/svg_rules.ts +2 -0
- package/src/scripts/_lib/test_delta.ts +89 -6
- package/src/scripts/_lib/tier_downshift_verdict.ts +222 -0
- package/src/scripts/_lib/tool_result_census.ts +62 -0
- package/src/scripts/_lib/trigger_routers.ts +1 -0
- package/src/scripts/_lib/turnaround_throughput.ts +378 -0
- package/src/scripts/_lib/ui_surface.ts +22 -0
- package/src/scripts/_lib/unattended_gates.ts +100 -0
- package/src/scripts/_lib/undeployed_fixes.ts +34 -0
- package/src/scripts/_lib/update_check.ts +143 -12
- package/src/scripts/_lib/update_invite.ts +116 -0
- package/src/scripts/_lib/update_notice.ts +259 -0
- package/src/scripts/_lib/verify_clause.ts +4 -2
- package/src/scripts/_lib/version_order.ts +146 -0
- package/src/scripts/_lib/worker_reuse.ts +191 -0
- package/src/scripts/_lib/workspace_secrets.ts +273 -0
- package/src/scripts/_lib/worktree_git.ts +67 -0
- package/src/scripts/_lib/worktree_ignored.ts +116 -0
- package/src/scripts/adoption_status.ts +330 -3
- package/src/scripts/adr_cite_check.ts +93 -0
- package/src/scripts/advisories.ts +803 -0
- package/src/scripts/ai-image/adapters/flux.sh +1 -0
- package/src/scripts/ai-image/adapters/gemini-image.sh +1 -0
- package/src/scripts/ai-image/adapters/ideogram.sh +1 -0
- package/src/scripts/ai-image/adapters/recraft.sh +1 -0
- package/src/scripts/ai-video/adapters/comfyui.sh +1 -0
- package/src/scripts/ai-video/adapters/fal.sh +1 -0
- package/src/scripts/ai-video/adapters/gemini-veo.sh +1 -0
- package/src/scripts/ai-video/adapters/higgsfield.sh +1 -0
- package/src/scripts/ai-video/adapters/kling.sh +1 -0
- package/src/scripts/ai-video/adapters/musetalk.sh +1 -0
- package/src/scripts/ai-video/adapters/openai-images.sh +1 -0
- package/src/scripts/ai-video/adapters/replicate.sh +1 -0
- package/src/scripts/ai-video/adapters/sora.sh +1 -0
- package/src/scripts/ai-video/adapters/syncso.sh +1 -0
- package/src/scripts/ai-video/stitch.sh +115 -2
- package/src/scripts/ai_council/airgap.ts +1 -0
- package/src/scripts/ai_council/api_transport.ts +27 -4
- package/src/scripts/ai_council/budget_guard.ts +300 -11
- package/src/scripts/ai_council/bundler.ts +20 -29
- package/src/scripts/ai_council/chairman.ts +17 -2
- package/src/scripts/ai_council/cli_agency_bounds.ts +158 -0
- package/src/scripts/ai_council/cli_launch_env.ts +54 -0
- package/src/scripts/ai_council/cli_least_agency_canary.ts +18 -2
- package/src/scripts/ai_council/clients.ts +55 -73
- package/src/scripts/ai_council/config.ts +16 -22
- package/src/scripts/ai_council/council_egress.ts +167 -0
- package/src/scripts/ai_council/exposure_ledger.ts +117 -0
- package/src/scripts/ai_council/free_hand_shadow.ts +276 -0
- package/src/scripts/ai_council/free_route.ts +216 -0
- package/src/scripts/ai_council/free_route_catalog.ts +173 -0
- package/src/scripts/ai_council/free_route_client.ts +95 -0
- package/src/scripts/ai_council/free_rung.ts +61 -0
- package/src/scripts/ai_council/hand_payload.ts +230 -0
- package/src/scripts/ai_council/hand_schemas.ts +123 -0
- package/src/scripts/ai_council/jury_aggregate.ts +155 -1
- package/src/scripts/ai_council/kind_flip.ts +221 -0
- package/src/scripts/ai_council/kind_flip_state.ts +19 -0
- package/src/scripts/ai_council/learn_low_impact_preview.ts +50 -22
- package/src/scripts/ai_council/modification_review.ts +98 -5
- package/src/scripts/ai_council/necessity.ts +7 -0
- package/src/scripts/ai_council/orchestrator.ts +16 -16
- package/src/scripts/ai_council/pricing.ts +10 -0
- package/src/scripts/ai_council/redact_low_impact_entry.ts +5 -2
- package/src/scripts/ai_council/response_render.ts +27 -4
- package/src/scripts/ai_council/round_reservations.ts +119 -0
- package/src/scripts/ai_council/route_chooser.ts +161 -0
- package/src/scripts/ai_council/route_liveness.ts +152 -0
- package/src/scripts/ai_council/route_member.ts +52 -0
- package/src/scripts/ai_council/seat_policy.ts +40 -0
- package/src/scripts/ai_council/seat_resume.ts +40 -0
- package/src/scripts/ai_council/shadow_dispatch.ts +13 -3
- package/src/scripts/ai_council/spend_gate.ts +18 -2
- package/src/scripts/ai_council/status_surface.ts +37 -0
- package/src/scripts/ai_council/transport_resolver.ts +15 -18
- package/src/scripts/analysis_analysts.ts +226 -0
- package/src/scripts/analysis_anchors.ts +140 -0
- package/src/scripts/analysis_and_optimize.ts +44 -0
- package/src/scripts/analysis_emit.ts +150 -0
- package/src/scripts/analysis_exchange.ts +186 -0
- package/src/scripts/analysis_gate.ts +158 -0
- package/src/scripts/analysis_inbox_final.ts +173 -0
- package/src/scripts/analysis_ledger.ts +119 -0
- package/src/scripts/analysis_pr_optimize.ts +219 -0
- package/src/scripts/analysis_pr_review.ts +240 -0
- package/src/scripts/analysis_pr_target.ts +121 -0
- package/src/scripts/analysis_prompts.ts +130 -0
- package/src/scripts/analysis_publish.ts +358 -0
- package/src/scripts/analysis_questions.ts +78 -0
- package/src/scripts/analysis_run.ts +248 -0
- package/src/scripts/analysis_run_record.ts +210 -0
- package/src/scripts/analysis_target.ts +343 -0
- package/src/scripts/analysis_validate.ts +161 -0
- package/src/scripts/anchor_eval_falsify.ts +1 -1
- package/src/scripts/arrival_report.ts +115 -0
- package/src/scripts/ask_transport.ts +284 -35
- package/src/scripts/backfill_model_tier.ts +4 -5
- package/src/scripts/before_complete_hook.ts +48 -2
- package/src/scripts/bench_hook_latency.ts +3 -3
- package/src/scripts/bench_procedure_cursor.ts +440 -0
- package/src/scripts/bootstrap.sh +3 -3
- package/src/scripts/build_exit_code_register.ts +440 -0
- package/src/scripts/build_proof.ts +23 -1
- package/src/scripts/cache_realization_report.ts +155 -14
- package/src/scripts/canary_liveness.ts +117 -0
- package/src/scripts/chat_history.ts +12 -15
- package/src/scripts/check_account_surface.ts +318 -0
- package/src/scripts/check_agent_artifact_location.ts +17 -160
- package/src/scripts/check_bundle_path_leakage.ts +6 -0
- package/src/scripts/check_ci_local_parity.ts +21 -13
- package/src/scripts/check_claims.ts +77 -2
- package/src/scripts/check_completion_review.ts +34 -1
- package/src/scripts/check_concern_admissions.ts +41 -5
- package/src/scripts/check_consumer_scope_flip.ts +1 -1
- package/src/scripts/check_context_paths.ts +2 -0
- package/src/scripts/check_council_layout.ts +9 -0
- package/src/scripts/check_credential_spelling.ts +267 -0
- package/src/scripts/check_egress_mutations.ts +239 -0
- package/src/scripts/check_enforcement_coverage.ts +16 -3
- package/src/scripts/check_estate_count.ts +16 -1
- package/src/scripts/check_finding_dispositions.ts +147 -0
- package/src/scripts/check_gate_coverage.ts +123 -21
- package/src/scripts/check_gate_reachability.ts +16 -2
- package/src/scripts/check_generator_sync.ts +46 -0
- package/src/scripts/check_hook_bundle_composition.ts +139 -1
- package/src/scripts/check_host_docs_digest.ts +142 -5
- package/src/scripts/check_kernel_edit_ratified.ts +301 -76
- package/src/scripts/check_kernel_rule_bundle.ts +14 -10
- package/src/scripts/check_knowledge_cards.ts +83 -3
- package/src/scripts/check_memory.ts +13 -3
- package/src/scripts/check_pack_size.ts +1 -1
- package/src/scripts/check_permission_deny_syntax.ts +247 -0
- package/src/scripts/check_platform_anchor.ts +243 -0
- package/src/scripts/check_proposal.ts +183 -1
- package/src/scripts/check_reach_channels.ts +5 -3
- package/src/scripts/check_references.ts +5 -2
- package/src/scripts/check_release_manifest_content.ts +33 -0
- package/src/scripts/check_release_pr_shape.ts +5 -0
- package/src/scripts/check_rule_invariants.ts +9 -1
- package/src/scripts/check_skill_body_budget.ts +343 -0
- package/src/scripts/check_skill_requires.ts +137 -1
- package/src/scripts/check_step_receipts.ts +246 -0
- package/src/scripts/check_structural_breaking.ts +7 -1
- package/src/scripts/check_suppression_hygiene.ts +8 -0
- package/src/scripts/check_test_weakening.ts +14 -0
- package/src/scripts/check_token_quality_golden.ts +5 -1
- package/src/scripts/check_update_banner.ts +50 -3
- package/src/scripts/check_verify_expectation_delta.ts +2 -1
- package/src/scripts/check_voice_lexicon.ts +531 -0
- package/src/scripts/ci_os_attribution.ts +327 -0
- package/src/scripts/ci_platform_scope.ts +69 -0
- package/src/scripts/ci_settle.ts +4 -1
- package/src/scripts/ci_status.ts +0 -1
- package/src/scripts/ci_time_to_green.ts +748 -0
- package/src/scripts/classify_merge_risk.ts +407 -19
- package/src/scripts/code_graph/sqlite_store.ts +1 -1
- package/src/scripts/compile_trigger_evals.ts +353 -0
- package/src/scripts/condense.ts +25 -31
- package/src/scripts/consumer_matrix.ts +61 -3
- package/src/scripts/council_availability_hook.ts +12 -4
- package/src/scripts/council_cli.ts +48 -38
- package/src/scripts/cross_repo_retrieve.ts +9 -72
- package/src/scripts/design_lock.ts +106 -0
- package/src/scripts/design_slop_rules.ts +30 -0
- package/src/scripts/design_sync.ts +264 -0
- package/src/scripts/design_system_import.ts +30 -13
- package/src/scripts/dispatch_economy_report.ts +46 -1
- package/src/scripts/dispatch_r2_reviewer.ts +41 -5
- package/src/scripts/egress_canary.ts +166 -0
- package/src/scripts/egress_sender_census.ts +101 -0
- package/src/scripts/external_sources_denylist.json +94 -12
- package/src/scripts/generate_catalog.ts +6 -2
- package/src/scripts/generate_owned_digest.ts +163 -0
- package/src/scripts/generate_reference_toc.ts +143 -0
- package/src/scripts/generate_subagent_floor.ts +11 -1
- package/src/scripts/handoff_context_hook.ts +34 -0
- package/src/scripts/hook_carrier_census.ts +263 -0
- package/src/scripts/hook_chunks.d.mts +12 -0
- package/src/scripts/hook_chunks.mjs +114 -0
- package/src/scripts/hook_manifest.json +1 -1
- package/src/scripts/hook_manifest.yaml +65 -42
- package/src/scripts/hooks/block_config_weakening.ts +127 -3
- package/src/scripts/hooks/block_credential_reads.ts +165 -0
- package/src/scripts/hooks/block_no_verify.ts +47 -23
- package/src/scripts/hooks/block_speaking_inbox_dir.ts +38 -7
- package/src/scripts/hooks/category_a.ts +202 -25
- package/src/scripts/hooks/concern_failure_policy.ts +6 -6
- package/src/scripts/hooks/concern_registry.ts +31 -6
- package/src/scripts/hooks/concern_registry_types.ts +11 -0
- package/src/scripts/hooks/delegation_nudge_hook.ts +105 -15
- package/src/scripts/hooks/design_pass_hook.ts +42 -10
- package/src/scripts/hooks/dispatch_hook.ts +13 -12
- package/src/scripts/hooks/egress_engine_loader.ts +125 -0
- package/src/scripts/hooks/egress_stage.ts +440 -0
- package/src/scripts/hooks/hook_stdin.ts +29 -4
- package/src/scripts/hooks/host_docs_pages.ts +194 -0
- package/src/scripts/hooks/host_docs_pages.yaml +75 -0
- package/src/scripts/hooks/host_lowering.json +1 -1
- package/src/scripts/hooks/host_lowering.yaml +22 -21
- package/src/scripts/hooks/host_rate_marker_hook.ts +73 -0
- package/src/scripts/hooks/instructions_observer_hook.ts +170 -0
- package/src/scripts/hooks/interruption_ledger_hook.ts +1 -1
- package/src/scripts/hooks/lazy_concern.ts +148 -0
- package/src/scripts/hooks/orchestration_record_hook.ts +80 -2
- package/src/scripts/hooks/payload_stub.ts +16 -6
- package/src/scripts/hooks/permission_gate.ts +7 -7
- package/src/scripts/hooks/push_settle_hook.ts +32 -3
- package/src/scripts/hooks/replay_hook.ts +43 -0
- package/src/scripts/hooks/reread_guard_hook.ts +87 -10
- package/src/scripts/hooks/rtk_wrap_hook.ts +4 -3
- package/src/scripts/hooks/rule_inject_hook.ts +8 -1
- package/src/scripts/hooks/session_eol_hook.ts +48 -1
- package/src/scripts/hooks/source_first_gate_hook.ts +6 -8
- package/src/scripts/hooks/spawn_guard_shadow_hook.ts +203 -10
- package/src/scripts/hooks/state_io.ts +2 -2
- package/src/scripts/hooks/svg_obligation.ts +75 -19
- package/src/scripts/hooks/tool_result_bytes_hook.ts +14 -5
- package/src/scripts/hooks/turn_end_gate_hook.ts +1 -1
- package/src/scripts/hooks/ui_route_nudge_hook.ts +2 -12
- package/src/scripts/hooks_doctor.ts +31 -0
- package/src/scripts/hooks_status.ts +58 -3
- package/src/scripts/inbox_source_census.ts +74 -13
- package/src/scripts/install +25 -3
- package/src/scripts/install.ts +60 -91
- package/src/scripts/interruption_report.ts +11 -1
- package/src/scripts/layer_baseline_report.ts +267 -0
- package/src/scripts/learning_sidecar.ts +1 -1
- package/src/scripts/lint_agents_layout.ts +3 -0
- package/src/scripts/lint_blocker_citations.ts +104 -0
- package/src/scripts/lint_breaking_changes_index.ts +40 -7
- package/src/scripts/lint_consolidation_lineage.ts +144 -16
- package/src/scripts/lint_consumer_internal_refs.ts +90 -42
- package/src/scripts/lint_context_spine_usage.ts +21 -0
- package/src/scripts/lint_design_antipattern_parity.ts +39 -7
- package/src/scripts/lint_evidence_artifacts.ts +31 -0
- package/src/scripts/lint_example_fences.ts +11 -2
- package/src/scripts/lint_ghostwriter_source.ts +42 -10
- package/src/scripts/lint_hook_manifest.ts +94 -0
- package/src/scripts/lint_marketplace_install_completeness.ts +4 -0
- package/src/scripts/lint_mcp_config_security.ts +9 -11
- package/src/scripts/lint_plan_risk_register.ts +28 -1
- package/src/scripts/lint_positioning.ts +4 -4
- package/src/scripts/lint_provenance.ts +1 -0
- package/src/scripts/lint_roadmap_blockers.ts +65 -4
- package/src/scripts/lint_roadmap_complexity.ts +98 -0
- package/src/scripts/lint_skill_link_reach.ts +251 -9
- package/src/scripts/lint_skill_procedures.ts +252 -0
- package/src/scripts/lint_skill_scripts_readonly.ts +12 -1
- package/src/scripts/lint_subagent_determinism.ts +14 -1
- package/src/scripts/lint_ticked_unmet_criteria.ts +300 -21
- package/src/scripts/mcp_registry_submit.sh +2 -2
- package/src/scripts/mcp_server/consumer_tool_catalog.json +4 -4
- package/src/scripts/mcp_server/suggest_skill.ts +89 -4
- package/src/scripts/mcp_server/tools.ts +2 -33
- package/src/scripts/measure_skill_ranker_baseline.ts +203 -5
- package/src/scripts/measure_turn_end_gate.ts +61 -1
- package/src/scripts/merge_clearance.ts +225 -0
- package/src/scripts/migrate_command_suggestions.ts +1 -1
- package/src/scripts/network_sources.ts +236 -0
- package/src/scripts/no_go_deny_rows.ts +225 -0
- package/src/scripts/orchestration_record.ts +15 -2
- package/src/scripts/plan_test_shards.ts +103 -0
- package/src/scripts/pr_url_reminder_hook.ts +10 -0
- package/src/scripts/print_required_checks.ts +5 -5
- package/src/scripts/probe_depth_shadow.ts +406 -0
- package/src/scripts/probe_turnaround.ts +342 -10
- package/src/scripts/ratification_subject.ts +176 -0
- package/src/scripts/rdp_gate_classify.ts +1 -0
- package/src/scripts/rdp_quality_eval.ts +1 -0
- package/src/scripts/release.ts +26 -55
- package/src/scripts/release_drill.ts +52 -23
- package/src/scripts/release_env.ts +37 -0
- package/src/scripts/release_publication.ts +11 -1
- package/src/scripts/report_consumer_gate_reach.ts +233 -0
- package/src/scripts/report_merge_gate_load.ts +295 -0
- package/src/scripts/report_project_contract.ts +123 -0
- package/src/scripts/report_reducible_classes.ts +342 -0
- package/src/scripts/report_required_checks_drift.ts +5 -3
- package/src/scripts/report_skill_host_census.ts +199 -0
- package/src/scripts/report_standing_payload_by_host.ts +7 -7
- package/src/scripts/retro.ts +758 -0
- package/src/scripts/retro_facts.ts +575 -0
- package/src/scripts/retro_queue.ts +739 -0
- package/src/scripts/retro_session_facts.ts +218 -0
- package/src/scripts/retro_sweep.ts +493 -0
- package/src/scripts/retro_triage.ts +126 -0
- package/src/scripts/roadmap_context.ts +2 -2
- package/src/scripts/roadmap_drain_queue.ts +601 -0
- package/src/scripts/run_supervise.ts +24 -2
- package/src/scripts/schemas/agent-settings.schema.json +0 -16
- package/src/scripts/schemas/command.schema.json +3 -3
- package/src/scripts/schemas/review-findings.schema.json +8 -0
- package/src/scripts/schemas/skill.schema.json +7 -6
- package/src/scripts/schemas/subagent.schema.json +33 -2
- package/src/scripts/score_skill_selection.ts +5 -2
- package/src/scripts/second_brain_retrieval.ts +1 -0
- package/src/scripts/second_brain_run.ts +1 -0
- package/src/scripts/self_repair_cli.ts +563 -87
- package/src/scripts/self_review_gate.ts +59 -4
- package/src/scripts/session_register_hook.ts +91 -4
- package/src/scripts/sessions_cli.ts +100 -5
- package/src/scripts/skill_collision_clusters.ts +1 -1
- package/src/scripts/skill_tools/score_skill_relevance.ts +31 -2
- package/src/scripts/skill_trigger_eval.ts +4 -2
- package/src/scripts/source_adapters.ts +183 -0
- package/src/scripts/step_receipt.ts +100 -0
- package/src/scripts/sync_pr_branch.ts +4 -0
- package/src/scripts/test_council_qualification.ts +1 -1
- package/src/scripts/trigger_eval_grandfather.json +3 -49
- package/src/scripts/trigger_eval_rotation.ts +31 -3
- package/src/scripts/ui_conformance_probe.ts +405 -1
- package/src/scripts/update_counts.ts +230 -11
- package/src/scripts/update_invite_hook.ts +245 -0
- package/src/scripts/update_notice_hook.ts +298 -0
- package/src/scripts/validate_frontmatter.ts +85 -0
- package/src/scripts/worker_reuse_shadow_report.ts +121 -0
- package/src/scripts/worktree_cleanup_check.ts +915 -121
- package/src/server/io/yamlIO.ts +2 -2
- package/src/server/schemas/settings.ts +37 -23
- package/src/shared/brandTokenDocument.ts +46 -0
- package/src/shared/brandTokenPaths.ts +43 -0
- package/src/shared/settingsCarveOut.ts +0 -8
- package/src/shared/skillRanking.ts +106 -5
- package/src/shared/userMd/formAdapter.ts +15 -1
- package/src/shared/userMd/schema.ts +22 -0
- package/src/templates/agent-user.md +4 -0
- package/src/templates/agent-user.yml +4 -0
- package/dist/cli-delegate/chunk-4DBG5K7M.js +0 -1123
- package/dist/cli-delegate/chunk-523HCFYO.js +0 -90
- package/dist/cli-delegate/chunk-AL3RZ22D.js +0 -74
- package/dist/cli-delegate/chunk-KB5FZ655.js +0 -208
- package/dist/cli-delegate/chunk-MDPPKQCQ.js +0 -875
- package/dist/cli-delegate/chunk-OAFSJBHH.js +0 -272
- package/dist/ui/assets/index-C3djEJah.js +0 -23
- package/src/scripts/_lib/continuation_ladder.ts +0 -335
- package/src/scripts/hooks/run_continuation_hook.ts +0 -1524
|
@@ -32,6 +32,10 @@ import {
|
|
|
32
32
|
import { measure, method_note } from '../_lib/token_count.js';
|
|
33
33
|
import { load_agent_settings } from '../_lib/agent_settings.js';
|
|
34
34
|
import { resolvePackageRoot } from '../_lib/package_root.js';
|
|
35
|
+
import { resolveSkillCatalogueRoots } from '../_lib/skill_catalogue.js';
|
|
36
|
+
import { splitQualifiedName } from '../_lib/skill_origin.js';
|
|
37
|
+
import { rankDetailed, type RankRow } from '../skill_tools/score_skill_relevance.js';
|
|
38
|
+
import { DEFAULT_SUGGEST_LIMIT } from '../../shared/skillRanking.js';
|
|
35
39
|
|
|
36
40
|
// Marker-anchored, not hop-counted: this module runs from `src/scripts/_cli/`
|
|
37
41
|
// (three levels down) AND from the precompiled `dist/cli-delegate/` (two), and
|
|
@@ -231,16 +235,162 @@ export function render_text(report: Report): string {
|
|
|
231
235
|
return out.join('\n') + '\n';
|
|
232
236
|
}
|
|
233
237
|
|
|
238
|
+
/**
|
|
239
|
+
* `--skills "<task>"` — the SAME ranked rows the MCP servers return, on a host
|
|
240
|
+
* that has no MCP server at all.
|
|
241
|
+
*
|
|
242
|
+
* WHY A FLAG AND NOT A VERB. The ranker already exists as a script; what was
|
|
243
|
+
* missing was a reachable `agent-config` surface for it. A new top-level verb
|
|
244
|
+
* is the thing the package's own kill register refuses, and this answers the
|
|
245
|
+
* same question `route:explain` already answers — "what does this prompt
|
|
246
|
+
* reach" — one layer up from rules.
|
|
247
|
+
*
|
|
248
|
+
* WHY IT NAMES THE ROOT. Reproduced before the fallback below existed: a
|
|
249
|
+
* workspace carrying only another host's directory, with an empty home,
|
|
250
|
+
* resolves to zero catalogue roots and the shell path answers nothing, even
|
|
251
|
+
* though the installed package ships its own projected skills. The fallback
|
|
252
|
+
* closes that — but a row ranked out of the PACKAGE's own tree is a different
|
|
253
|
+
* claim from a row ranked out of the consumer's catalogue, so the output says
|
|
254
|
+
* which root answered rather than leaving the reader to assume.
|
|
255
|
+
*/
|
|
256
|
+
export interface SkillRow {
|
|
257
|
+
skill: string;
|
|
258
|
+
score: number;
|
|
259
|
+
personas: string[];
|
|
260
|
+
description: string;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
export interface SkillsReport {
|
|
264
|
+
measurement_level: string;
|
|
265
|
+
task: string;
|
|
266
|
+
/** Every root that was ranked, in precedence order. Empty is a real answer. */
|
|
267
|
+
skills_roots: string[];
|
|
268
|
+
/** True when the ONLY root is the installed package's own projection. */
|
|
269
|
+
package_fallback_used: boolean;
|
|
270
|
+
skills_indexed: number;
|
|
271
|
+
limit: number;
|
|
272
|
+
suggestions: SkillRow[];
|
|
273
|
+
/**
|
|
274
|
+
* Ranked rows reachable from the installed package's own projection whose
|
|
275
|
+
* name no resolved root carries — a skill the package ships but this host
|
|
276
|
+
* does not have. Empty when the projection IS the only root: then every
|
|
277
|
+
* suggestion is not installed, and the text output says so per row.
|
|
278
|
+
*/
|
|
279
|
+
not_installed: SkillRow[];
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
export const SKILLS_MEASUREMENT_HEADER =
|
|
283
|
+
'Measurement level: lexical ranking only — a high score is a pointer, not a verdict.';
|
|
284
|
+
|
|
285
|
+
export function build_skills_report(
|
|
286
|
+
task: string,
|
|
287
|
+
opts: { workspaceRoot: string; packageRoot: string; limit: number; home?: string },
|
|
288
|
+
): SkillsReport {
|
|
289
|
+
const roots = resolveSkillCatalogueRoots(opts.workspaceRoot, opts.home, {
|
|
290
|
+
packageFallback: opts.packageRoot,
|
|
291
|
+
});
|
|
292
|
+
const packageRootAbs = path.join(opts.packageRoot, 'dist', 'agent-src', 'skills');
|
|
293
|
+
const { rows, descriptions } = roots.length > 0
|
|
294
|
+
? rankDetailed(task, roots)
|
|
295
|
+
: { rows: [], descriptions: new Map<string, string>() };
|
|
296
|
+
const fallbackOnly = roots.length === 1 && roots[0] === packageRootAbs;
|
|
297
|
+
const toRow = (d: ReadonlyMap<string, string>) => ([name, score, personas]: RankRow): SkillRow => ({
|
|
298
|
+
skill: name,
|
|
299
|
+
score,
|
|
300
|
+
personas,
|
|
301
|
+
description: d.get(name) ?? '',
|
|
302
|
+
});
|
|
303
|
+
let notInstalled: SkillRow[] = [];
|
|
304
|
+
if (roots.length > 0 && !fallbackOnly && _hasSkills(packageRootAbs)) {
|
|
305
|
+
const installed = new Set(roots.flatMap(_skillNames));
|
|
306
|
+
const pkg = rankDetailed(task, [packageRootAbs]);
|
|
307
|
+
notInstalled = pkg.rows
|
|
308
|
+
.filter(([name]) => !installed.has(splitQualifiedName(name).name))
|
|
309
|
+
.slice(0, opts.limit)
|
|
310
|
+
.map(toRow(pkg.descriptions));
|
|
311
|
+
}
|
|
312
|
+
return {
|
|
313
|
+
measurement_level: SKILLS_MEASUREMENT_HEADER,
|
|
314
|
+
task,
|
|
315
|
+
skills_roots: roots,
|
|
316
|
+
package_fallback_used: fallbackOnly,
|
|
317
|
+
skills_indexed: rows.length,
|
|
318
|
+
limit: opts.limit,
|
|
319
|
+
suggestions: rows.slice(0, opts.limit).map(toRow(descriptions)),
|
|
320
|
+
not_installed: notInstalled,
|
|
321
|
+
};
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
function _skillNames(root: string): string[] {
|
|
325
|
+
try {
|
|
326
|
+
return fs
|
|
327
|
+
.readdirSync(root)
|
|
328
|
+
.filter((n) => fs.existsSync(path.join(root, n, 'SKILL.md')));
|
|
329
|
+
} catch {
|
|
330
|
+
return [];
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
function _hasSkills(root: string): boolean {
|
|
335
|
+
return _skillNames(root).length > 0;
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
function _pushRow(out: string[], r: SkillRow, label: string): void {
|
|
339
|
+
out.push(` · ${r.skill} [${r.score}]${label}`);
|
|
340
|
+
if (r.description) out.push(` ${r.description}`);
|
|
341
|
+
if (r.personas.length > 0) out.push(` personas: ${r.personas.join(', ')}`);
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
export function render_skills_text(report: SkillsReport): string {
|
|
345
|
+
const out: string[] = [report.measurement_level, ''];
|
|
346
|
+
out.push(`task: ${JSON.stringify(report.task)}`);
|
|
347
|
+
if (report.skills_roots.length === 0) {
|
|
348
|
+
out.push('catalogue: NONE readable — no workspace root, no host root, no package fallback.');
|
|
349
|
+
out.push('');
|
|
350
|
+
out.push(' · (no catalogue to rank — this is "unknown", never "no skill covers this")');
|
|
351
|
+
return out.join('\n') + '\n';
|
|
352
|
+
}
|
|
353
|
+
out.push(
|
|
354
|
+
`catalogue: ${report.skills_roots.join(' · ')}`
|
|
355
|
+
+ (report.package_fallback_used ? " [the installed package's own projection — no workspace or host root resolved]" : ''),
|
|
356
|
+
);
|
|
357
|
+
out.push('');
|
|
358
|
+
out.push(`ranked skills (${report.suggestions.length} of ${report.skills_indexed} scoring above zero, limit ${report.limit}):`);
|
|
359
|
+
const label = report.package_fallback_used ? ' not-installed' : '';
|
|
360
|
+
for (const r of report.suggestions) _pushRow(out, r, label);
|
|
361
|
+
if (report.suggestions.length === 0) {
|
|
362
|
+
out.push(' · (nothing scored above zero — say that, and proceed without a skill)');
|
|
363
|
+
}
|
|
364
|
+
if (report.not_installed.length > 0) {
|
|
365
|
+
out.push('');
|
|
366
|
+
out.push(
|
|
367
|
+
`not installed on this host — reachable from the installed package's own projection (${report.not_installed.length}):`,
|
|
368
|
+
);
|
|
369
|
+
for (const r of report.not_installed) _pushRow(out, r, ' not-installed');
|
|
370
|
+
}
|
|
371
|
+
return out.join('\n') + '\n';
|
|
372
|
+
}
|
|
373
|
+
|
|
234
374
|
export function main(argv: string[]): number {
|
|
235
375
|
const args = [...argv];
|
|
236
376
|
const as_json = args.includes('--json');
|
|
237
377
|
let files: string[] = [];
|
|
238
378
|
let profile = 'full';
|
|
379
|
+
let skillsTask: string | null = null;
|
|
380
|
+
let limit = DEFAULT_SUGGEST_LIMIT;
|
|
239
381
|
const positional: string[] = [];
|
|
240
382
|
for (let i = 0; i < args.length; i++) {
|
|
241
383
|
const a = args[i] as string;
|
|
242
384
|
if (a === '--json') continue;
|
|
243
|
-
if (a === '--
|
|
385
|
+
if (a === '--skills') {
|
|
386
|
+
skillsTask = String(args[++i] ?? '');
|
|
387
|
+
} else if (a.startsWith('--skills=')) {
|
|
388
|
+
skillsTask = a.slice('--skills='.length);
|
|
389
|
+
} else if (a === '--limit') {
|
|
390
|
+
limit = Number.parseInt(String(args[++i] ?? ''), 10);
|
|
391
|
+
} else if (a.startsWith('--limit=')) {
|
|
392
|
+
limit = Number.parseInt(a.slice('--limit='.length), 10);
|
|
393
|
+
} else if (a === '--files') {
|
|
244
394
|
files = String(args[++i] ?? '').split(',').map((s) => s.trim()).filter(Boolean);
|
|
245
395
|
} else if (a.startsWith('--files=')) {
|
|
246
396
|
files = a.slice('--files='.length).split(',').map((s) => s.trim()).filter(Boolean);
|
|
@@ -250,13 +400,37 @@ export function main(argv: string[]): number {
|
|
|
250
400
|
profile = a.slice('--profile='.length);
|
|
251
401
|
} else if (a === '-h' || a === '--help') {
|
|
252
402
|
process.stdout.write(
|
|
253
|
-
'usage: agent-config route:explain "<prompt>" [--files a,b] [--profile full|balanced] [--json]\n'
|
|
403
|
+
'usage: agent-config route:explain "<prompt>" [--files a,b] [--profile full|balanced] [--json]\n'
|
|
404
|
+
+ ' agent-config route:explain --skills "<task>" [--limit N] [--json]\n',
|
|
254
405
|
);
|
|
255
406
|
return 0;
|
|
256
407
|
} else {
|
|
257
408
|
positional.push(a);
|
|
258
409
|
}
|
|
259
410
|
}
|
|
411
|
+
if (skillsTask !== null) {
|
|
412
|
+
const task = (skillsTask.trim() === '' ? positional.join(' ') : skillsTask).trim();
|
|
413
|
+
if (!task) {
|
|
414
|
+
process.stderr.write('route:explain: --skills needs a task description\n');
|
|
415
|
+
return 2;
|
|
416
|
+
}
|
|
417
|
+
if (!Number.isFinite(limit) || limit < 1) {
|
|
418
|
+
process.stderr.write('route:explain: --limit expects a positive integer\n');
|
|
419
|
+
return 2;
|
|
420
|
+
}
|
|
421
|
+
const report = build_skills_report(task, {
|
|
422
|
+
workspaceRoot: process.cwd(),
|
|
423
|
+
packageRoot: REPO_ROOT,
|
|
424
|
+
limit,
|
|
425
|
+
});
|
|
426
|
+
process.stdout.write(
|
|
427
|
+
as_json ? JSON.stringify(report, null, 2) + '\n' : render_skills_text(report),
|
|
428
|
+
);
|
|
429
|
+
// 1 is "nothing to show", the same meaning the rule arm gives it. A
|
|
430
|
+
// catalogue that could not be read and a catalogue with no match are
|
|
431
|
+
// both 1 here and are distinguished in the OUTPUT, never silently.
|
|
432
|
+
return report.suggestions.length === 0 && report.not_installed.length === 0 ? 1 : 0;
|
|
433
|
+
}
|
|
260
434
|
const prompt = positional.join(' ').trim();
|
|
261
435
|
if (!prompt) {
|
|
262
436
|
process.stderr.write('route:explain: a prompt is required\n');
|
|
@@ -61,12 +61,23 @@ import process from 'node:process';
|
|
|
61
61
|
import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
62
62
|
|
|
63
63
|
import * as fs_atomic from '../_lib/fs_atomic.js';
|
|
64
|
+
import * as global_deploy_inventory from '../_lib/global_deploy_inventory.js';
|
|
64
65
|
import * as installed_lock from '../_lib/installed_lock.js';
|
|
65
66
|
import * as installed_tools from '../_lib/installed_tools.js';
|
|
66
67
|
import { remove_managed_hooks } from '../_lib/claude_settings_hooks.js';
|
|
68
|
+
import {
|
|
69
|
+
recordPath as overridesRecordPath,
|
|
70
|
+
removeListingOverrides,
|
|
71
|
+
} from '../_lib/skill_listing_overrides.js';
|
|
72
|
+
import {
|
|
73
|
+
codexSkillRoots,
|
|
74
|
+
recordPath as codexResidentRecordPath,
|
|
75
|
+
removeCodexResidentSet,
|
|
76
|
+
} from '../_lib/codex_resident_set.js';
|
|
67
77
|
import { resolve_project_root } from '../_lib/agent_settings.js';
|
|
68
78
|
import { subtract_pointers } from '../_lib/json_pointers.js';
|
|
69
79
|
import { PROJECT_BRIDGE_MARKERS, USER_SCOPE_PATHS } from '../install.js';
|
|
80
|
+
import { removeStagedRuntime } from '../../install/stagedRuntime.js';
|
|
70
81
|
|
|
71
82
|
type AnyDict = Record<string, unknown>;
|
|
72
83
|
|
|
@@ -256,10 +267,39 @@ function _remove_project_marker(
|
|
|
256
267
|
}
|
|
257
268
|
}
|
|
258
269
|
|
|
259
|
-
|
|
270
|
+
/**
|
|
271
|
+
* Delete the files a previous global deploy RECORDED writing under `anchor`.
|
|
272
|
+
*
|
|
273
|
+
* This used to call `fs.rmSync` recursively on the resolved anchor itself —
|
|
274
|
+
* spelled out rather than quoted, because AC-2 of
|
|
275
|
+
* `road-to-an-uninstall-that-only-removes-what-it-brought` greps this file for
|
|
276
|
+
* that exact call and a comment reproducing it would read as a survivor.
|
|
277
|
+
* The anchors are whole host configuration roots — `~/.claude/`,
|
|
278
|
+
* `~/.codex/`, `~/.config/zed/` — so a purge took everything under them,
|
|
279
|
+
* whoever wrote it, including a host's own credentials file. That is not a
|
|
280
|
+
* quirk this port replicated from Python deliberately; it is a defect, and the
|
|
281
|
+
* ownership proof that fixes it has existed since the 2026-06 Zed fix:
|
|
282
|
+
* `global_deploy_inventory` records, per tool, the anchor plus the
|
|
283
|
+
* anchor-relative path of every file the deploy maintains there.
|
|
284
|
+
*
|
|
285
|
+
* Three properties, each one a thing the old code could not do:
|
|
286
|
+
*
|
|
287
|
+
* - **Only recorded paths are deleted.** `recorded_rel_files` returns the empty
|
|
288
|
+
* set when the inventory's anchor does not match the one being purged, so a
|
|
289
|
+
* moved anchor purges nothing rather than purging the wrong tree.
|
|
290
|
+
* - **An unreadable or empty record REFUSES.** There is deliberately no
|
|
291
|
+
* fall-back to the old recursive delete: a fall-back on missing evidence is
|
|
292
|
+
* how this defect would return on the first corrupted inventory.
|
|
293
|
+
* - **Symlinks are unlinked, never followed.** `lstatSync` + `unlinkSync`, so a
|
|
294
|
+
* recorded path that is a link removes the link and leaves its target alone.
|
|
295
|
+
*
|
|
296
|
+
* Directories are pruned only when they are left empty, and only up to the
|
|
297
|
+
* anchor — an anchor that still holds a user's own files stays.
|
|
298
|
+
*/
|
|
299
|
+
export function _remove_global_content(
|
|
260
300
|
tool: string,
|
|
261
301
|
opts: { dry_run: boolean; purge: boolean },
|
|
262
|
-
): [string, boolean] {
|
|
302
|
+
): [string, boolean, boolean?] {
|
|
263
303
|
const anchor = USER_SCOPE_PATHS[tool];
|
|
264
304
|
if (!anchor) {
|
|
265
305
|
return [`${tool}: no global anchor registered (skipped)`, false];
|
|
@@ -269,21 +309,95 @@ function _remove_global_content(
|
|
|
269
309
|
return [`${tool}: ${anchor} already absent`, false];
|
|
270
310
|
}
|
|
271
311
|
if (!opts.purge) {
|
|
272
|
-
return [
|
|
312
|
+
return [
|
|
313
|
+
`${tool}: ${anchor} preserved (--purge removes the files this package recorded writing there)`,
|
|
314
|
+
false,
|
|
315
|
+
];
|
|
273
316
|
}
|
|
317
|
+
|
|
318
|
+
let recorded: ReadonlySet<string>;
|
|
319
|
+
try {
|
|
320
|
+
recorded = global_deploy_inventory.recorded_rel_files(tool, target);
|
|
321
|
+
} catch (exc) {
|
|
322
|
+
return [
|
|
323
|
+
`${tool}: ❌ refusing to purge ${anchor} — deploy inventory unreadable (${_osErr(exc)})`,
|
|
324
|
+
false,
|
|
325
|
+
true,
|
|
326
|
+
];
|
|
327
|
+
}
|
|
328
|
+
if (recorded.size === 0) {
|
|
329
|
+
return [
|
|
330
|
+
`${tool}: ❌ refusing to purge ${anchor} — no recorded inventory for this anchor; nothing was deleted`,
|
|
331
|
+
false,
|
|
332
|
+
true,
|
|
333
|
+
];
|
|
334
|
+
}
|
|
335
|
+
|
|
274
336
|
if (opts.dry_run) {
|
|
275
|
-
return [`${tool}: would purge ${anchor}`, true];
|
|
337
|
+
return [`${tool}: would purge ${recorded.size} recorded file(s) under ${anchor}`, true];
|
|
276
338
|
}
|
|
339
|
+
|
|
340
|
+
const resolved_anchor = path.resolve(target);
|
|
341
|
+
// The lexical check below does not see a symlinked intermediate directory,
|
|
342
|
+
// so each parent is also resolved and held to the anchor's real path.
|
|
343
|
+
let real_anchor: string;
|
|
277
344
|
try {
|
|
278
|
-
|
|
279
|
-
fs.rmSync(target, { recursive: true, force: false });
|
|
280
|
-
} else {
|
|
281
|
-
fs.unlinkSync(target);
|
|
282
|
-
}
|
|
283
|
-
return [`${tool}: purged ${anchor}`, true];
|
|
345
|
+
real_anchor = fs.realpathSync(resolved_anchor);
|
|
284
346
|
} catch (exc) {
|
|
285
|
-
return [`${tool}: ❌
|
|
347
|
+
return [`${tool}: ❌ refusing to purge ${anchor} — anchor unresolvable (${_osErr(exc)})`, false, true];
|
|
348
|
+
}
|
|
349
|
+
const really_inside = (p: string): boolean => {
|
|
350
|
+
try {
|
|
351
|
+
const real = fs.realpathSync(p);
|
|
352
|
+
return real === real_anchor || real.startsWith(real_anchor + path.sep);
|
|
353
|
+
} catch {
|
|
354
|
+
return false;
|
|
355
|
+
}
|
|
356
|
+
};
|
|
357
|
+
let deleted = 0;
|
|
358
|
+
const touched_dirs = new Set<string>();
|
|
359
|
+
for (const rel of recorded) {
|
|
360
|
+
const abs = path.resolve(resolved_anchor, rel);
|
|
361
|
+
// Containment, re-checked here rather than trusted: a `..` in a
|
|
362
|
+
// recorded path must not reach outside the anchor even if the record
|
|
363
|
+
// was written by an older or tampered-with install.
|
|
364
|
+
if (abs !== resolved_anchor && !abs.startsWith(resolved_anchor + path.sep)) {
|
|
365
|
+
continue;
|
|
366
|
+
}
|
|
367
|
+
if (!really_inside(path.dirname(abs))) {
|
|
368
|
+
continue;
|
|
369
|
+
}
|
|
370
|
+
try {
|
|
371
|
+
// lstat, so a symlink is removed as a link and its target is not
|
|
372
|
+
// touched; a directory recorded by mistake is skipped rather than
|
|
373
|
+
// recursed into.
|
|
374
|
+
const st = fs.lstatSync(abs);
|
|
375
|
+
if (st.isDirectory()) continue;
|
|
376
|
+
fs.unlinkSync(abs);
|
|
377
|
+
deleted += 1;
|
|
378
|
+
touched_dirs.add(path.dirname(abs));
|
|
379
|
+
} catch {
|
|
380
|
+
// Already gone is success; anything else is reported by the count.
|
|
381
|
+
}
|
|
286
382
|
}
|
|
383
|
+
|
|
384
|
+
// Prune directories this package emptied, deepest first, never the anchor's
|
|
385
|
+
// parent and never a directory that still holds somebody else's file.
|
|
386
|
+
for (const dir of [...touched_dirs].sort((a, b) => b.length - a.length)) {
|
|
387
|
+
let cur = dir;
|
|
388
|
+
while (cur.startsWith(resolved_anchor + path.sep)) {
|
|
389
|
+
try {
|
|
390
|
+
if (!really_inside(cur) || fs.realpathSync(cur) === real_anchor) break;
|
|
391
|
+
if (fs.readdirSync(cur).length > 0) break;
|
|
392
|
+
fs.rmdirSync(cur);
|
|
393
|
+
} catch {
|
|
394
|
+
break;
|
|
395
|
+
}
|
|
396
|
+
cur = path.dirname(cur);
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
return [`${tool}: purged ${deleted} recorded file(s) under ${anchor}`, deleted > 0];
|
|
287
401
|
}
|
|
288
402
|
|
|
289
403
|
/** Render an OSError-shaped message: Python `str(OSError)` is the strerror. */
|
|
@@ -668,6 +782,16 @@ function _uninstall_project(opts: Options): number {
|
|
|
668
782
|
continue;
|
|
669
783
|
}
|
|
670
784
|
|
|
785
|
+
if (entry['scope'] === 'global') {
|
|
786
|
+
// A global entry's files belong to the user-scoped ledger; a lock
|
|
787
|
+
// committed before they left it still lists `$HOME` paths, and the
|
|
788
|
+
// project-marker map below names a PROJECT file the global install
|
|
789
|
+
// never wrote. Neither is this command's to delete: `uninstall --global` is.
|
|
790
|
+
const verb = opts.dry_run ? 'would remove' : 'removed';
|
|
791
|
+
_print(_stdout, ` · ${tool}: ${verb} global-scope entry, no file touched (content: \`uninstall --global\`)`);
|
|
792
|
+
if (!opts.dry_run) removed_names.push(tool);
|
|
793
|
+
continue;
|
|
794
|
+
}
|
|
671
795
|
if (!_is_v2_entry(entry)) {
|
|
672
796
|
// v1 entry — keep the legacy single-marker behaviour.
|
|
673
797
|
const [line, removed] = _remove_project_marker(project_root, tool, {
|
|
@@ -738,6 +862,56 @@ function _uninstall_project(opts: Options): number {
|
|
|
738
862
|
return 0;
|
|
739
863
|
}
|
|
740
864
|
|
|
865
|
+
/**
|
|
866
|
+
* Tools whose anchor still holds files the deploy inventory records.
|
|
867
|
+
*
|
|
868
|
+
* The lockfile is what makes a purge possible at all: `_uninstall_global`
|
|
869
|
+
* resolves the tool set from it, so a run that finds no lockfile prints
|
|
870
|
+
* `no tools to uninstall` and returns before the deletion function is
|
|
871
|
+
* reached. Deleting the lockfile while recorded content is still on disk
|
|
872
|
+
* therefore does not merely lose a record — it strands the content, because
|
|
873
|
+
* the inventory is a deletion ALLOWLIST (D1) and there is deliberately no
|
|
874
|
+
* path that deletes without one.
|
|
875
|
+
*
|
|
876
|
+
* Measured end to end on 2026-10-16: `uninstall --global` then
|
|
877
|
+
* `uninstall --global --purge` gave `plain_rc=0 purge_after_rc=1
|
|
878
|
+
* files_left=892` — the run and its reproduction are recorded in
|
|
879
|
+
* `tests/install/uninstall_lockfile_retention.test.ts`, which pins the flow at
|
|
880
|
+
* CLI level. The sibling unit case passed throughout, because the
|
|
881
|
+
* defect sits between the deletion function and the lockfile block that runs
|
|
882
|
+
* after it.
|
|
883
|
+
*
|
|
884
|
+
* An unreadable record counts as content left, deliberately: that is the
|
|
885
|
+
* state in which the lockfile is most needed and least able to prove it.
|
|
886
|
+
*/
|
|
887
|
+
function _tools_with_recorded_content_left(tools: readonly string[]): string[] {
|
|
888
|
+
const left: string[] = [];
|
|
889
|
+
for (const tool of tools) {
|
|
890
|
+
const anchor = USER_SCOPE_PATHS[tool];
|
|
891
|
+
if (!anchor) {
|
|
892
|
+
continue;
|
|
893
|
+
}
|
|
894
|
+
const target = expanduser(anchor);
|
|
895
|
+
if (!_exists(target)) {
|
|
896
|
+
continue;
|
|
897
|
+
}
|
|
898
|
+
let recorded: ReadonlySet<string>;
|
|
899
|
+
try {
|
|
900
|
+
recorded = global_deploy_inventory.recorded_rel_files(tool, target);
|
|
901
|
+
} catch {
|
|
902
|
+
left.push(tool);
|
|
903
|
+
continue;
|
|
904
|
+
}
|
|
905
|
+
for (const rel of recorded) {
|
|
906
|
+
if (_exists(path.join(target, rel))) {
|
|
907
|
+
left.push(tool);
|
|
908
|
+
break;
|
|
909
|
+
}
|
|
910
|
+
}
|
|
911
|
+
}
|
|
912
|
+
return left;
|
|
913
|
+
}
|
|
914
|
+
|
|
741
915
|
function _uninstall_global(opts: Options): number {
|
|
742
916
|
const lock_path = installed_lock.lockfile_path();
|
|
743
917
|
const write_path = installed_lock.lockfile_write_path();
|
|
@@ -763,22 +937,65 @@ function _uninstall_global(opts: Options): number {
|
|
|
763
937
|
`${opts.dry_run ? '[dry-run] ' : ''}uninstalling ${tools.length} tool(s) from global scope:`,
|
|
764
938
|
);
|
|
765
939
|
const removed_names: string[] = [];
|
|
940
|
+
// A purge that REFUSED must not look like a purge that succeeded. The
|
|
941
|
+
// refusal is the whole point of reading the inventory — reporting it on
|
|
942
|
+
// stdout and exiting 0 would leave the caller believing the content is
|
|
943
|
+
// gone, which is the state this fix exists to make impossible.
|
|
944
|
+
let refused = false;
|
|
945
|
+
// The codex resident set writes one policy file into each non-resident skill
|
|
946
|
+
// directory. That file is not in the deploy inventory, so the content removal
|
|
947
|
+
// below cannot see it — drop it first, or it survives as the only thing left
|
|
948
|
+
// in a directory the uninstall emptied.
|
|
949
|
+
if (tools.includes('codex') && !opts.dry_run) {
|
|
950
|
+
try {
|
|
951
|
+
let removed = 0;
|
|
952
|
+
let kept = 0;
|
|
953
|
+
let finder = 0;
|
|
954
|
+
for (const anchor of codexSkillRoots(os.homedir())) {
|
|
955
|
+
const res = removeCodexResidentSet(anchor, codexResidentRecordPath(anchor));
|
|
956
|
+
removed += res.removed.length;
|
|
957
|
+
kept += res.kept_user.length;
|
|
958
|
+
if (res.finder === 'removed') finder += 1;
|
|
959
|
+
}
|
|
960
|
+
if (removed > 0 || kept > 0 || finder > 0) {
|
|
961
|
+
_print(
|
|
962
|
+
_stdout,
|
|
963
|
+
` · codex: removed ${removed} resident-set policy file(s) and ${finder} finder entr(ies), ` +
|
|
964
|
+
`kept ${kept} the user changed`,
|
|
965
|
+
);
|
|
966
|
+
}
|
|
967
|
+
} catch (e) {
|
|
968
|
+
_print(_stderr, `⚠️ codex: resident-set removal skipped — ${String(e)}`);
|
|
969
|
+
}
|
|
970
|
+
}
|
|
766
971
|
for (const tool of tools) {
|
|
767
|
-
const [line, removed] = _remove_global_content(tool, {
|
|
972
|
+
const [line, removed, refusedHere] = _remove_global_content(tool, {
|
|
768
973
|
dry_run: opts.dry_run,
|
|
769
974
|
purge: opts.purge,
|
|
770
975
|
});
|
|
771
976
|
_print(_stdout, ` · ${line}`);
|
|
977
|
+
if (refusedHere === true) {
|
|
978
|
+
refused = true;
|
|
979
|
+
}
|
|
772
980
|
if (removed && !opts.dry_run) {
|
|
773
981
|
removed_names.push(tool);
|
|
774
982
|
}
|
|
775
983
|
}
|
|
776
|
-
//
|
|
777
|
-
//
|
|
984
|
+
// The staged hook runtime is the package's own; a plain uninstall keeps it
|
|
985
|
+
// because the preserved stubs under ~/.claude point into it.
|
|
986
|
+
if (tools.includes('claude-code') && opts.purge && !refused && !opts.dry_run) {
|
|
987
|
+
const staged = removeStagedRuntime();
|
|
988
|
+
if (staged !== null) _print(_stdout, ` · claude-code: removed the staged hook runtime (${staged})`);
|
|
989
|
+
}
|
|
990
|
+
// Managed Claude hooks and the listing override live in ~/.claude/settings.json
|
|
991
|
+
// (single-surface model) — remove exactly our entries, never user-owned ones.
|
|
778
992
|
if (tools.includes('claude-code')) {
|
|
779
993
|
const settings_path = path.join(os.homedir(), '.claude', 'settings.json');
|
|
780
994
|
if (opts.dry_run) {
|
|
781
|
-
_print(
|
|
995
|
+
_print(
|
|
996
|
+
_stdout,
|
|
997
|
+
` · claude-code: would remove managed hooks and recorded listing overrides from ${settings_path}`,
|
|
998
|
+
);
|
|
782
999
|
} else {
|
|
783
1000
|
try {
|
|
784
1001
|
const res = remove_managed_hooks(settings_path);
|
|
@@ -791,6 +1008,18 @@ function _uninstall_global(opts: Options): number {
|
|
|
791
1008
|
} catch (e) {
|
|
792
1009
|
_print(_stderr, `⚠️ claude-code: managed-hook removal skipped — ${String(e)}`);
|
|
793
1010
|
}
|
|
1011
|
+
try {
|
|
1012
|
+
const res = removeListingOverrides(settings_path, overridesRecordPath());
|
|
1013
|
+
if (res.changed || res.kept_user.length > 0) {
|
|
1014
|
+
_print(
|
|
1015
|
+
_stdout,
|
|
1016
|
+
` · claude-code: removed ${res.removed.length} listing override(s), ` +
|
|
1017
|
+
`kept ${res.kept_user.length} the user changed`,
|
|
1018
|
+
);
|
|
1019
|
+
}
|
|
1020
|
+
} catch (e) {
|
|
1021
|
+
_print(_stderr, `⚠️ claude-code: listing-override removal skipped — ${String(e)}`);
|
|
1022
|
+
}
|
|
794
1023
|
}
|
|
795
1024
|
}
|
|
796
1025
|
if (lock !== null && !opts.dry_run) {
|
|
@@ -812,21 +1041,36 @@ function _uninstall_global(opts: Options): number {
|
|
|
812
1041
|
`✅ lockfile updated (${tools.length} entries removed, ${remaining.length} kept)`,
|
|
813
1042
|
);
|
|
814
1043
|
} else {
|
|
815
|
-
//
|
|
816
|
-
//
|
|
817
|
-
//
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
1044
|
+
// Nothing is left to KEEP in the lockfile — but that is not the
|
|
1045
|
+
// same question as whether the lockfile may go. See
|
|
1046
|
+
// `_tools_with_recorded_content_left`: the record is the only
|
|
1047
|
+
// route to the content it records.
|
|
1048
|
+
const stranded = refused ? tools : _tools_with_recorded_content_left(tools);
|
|
1049
|
+
if (stranded.length) {
|
|
1050
|
+
_print(
|
|
1051
|
+
_stdout,
|
|
1052
|
+
`ℹ️ lockfile kept (${write_path}) — ${stranded.join(', ')} still holds ` +
|
|
1053
|
+
'files this package recorded writing; `--purge` removes them, and ' +
|
|
1054
|
+
'without this record nothing can',
|
|
1055
|
+
);
|
|
1056
|
+
} else {
|
|
1057
|
+
// Python iterates a set `{lock_path, write_path}` (order
|
|
1058
|
+
// irrelevant — both unlinks are best-effort, no output depends
|
|
1059
|
+
// on order); a deduped list reproduces it.
|
|
1060
|
+
const targets =
|
|
1061
|
+
lock_path === write_path ? [write_path] : [lock_path, write_path];
|
|
1062
|
+
for (const target of targets) {
|
|
1063
|
+
try {
|
|
1064
|
+
fs.unlinkSync(target);
|
|
1065
|
+
} catch {
|
|
1066
|
+
// pass
|
|
1067
|
+
}
|
|
824
1068
|
}
|
|
1069
|
+
_print(_stdout, `✅ lockfile deleted (${write_path})`);
|
|
825
1070
|
}
|
|
826
|
-
_print(_stdout, `✅ lockfile deleted (${write_path})`);
|
|
827
1071
|
}
|
|
828
1072
|
}
|
|
829
|
-
return 0;
|
|
1073
|
+
return refused ? 1 : 0;
|
|
830
1074
|
}
|
|
831
1075
|
|
|
832
1076
|
export function main(argv: string[] | null = null): number {
|
|
@@ -14,7 +14,9 @@
|
|
|
14
14
|
*
|
|
15
15
|
* Flags:
|
|
16
16
|
*
|
|
17
|
-
* - `--check` — print the available latest version + return; no write.
|
|
17
|
+
* - `--check` — print the available latest version + return; no write. In a
|
|
18
|
+
* project that pins a version, also list what the latest release's impact
|
|
19
|
+
* map records between the pin and latest (skipped with `--offline`).
|
|
18
20
|
* - `--to <version>` — pin to an exact version (registry-existence checked).
|
|
19
21
|
* Downgrades are allowed; the pin is a project decision.
|
|
20
22
|
* - (no flag) — pin to the registry's `latest` tag.
|
|
@@ -68,6 +70,7 @@ import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
|
68
70
|
import * as installed_lock from '../_lib/installed_lock.js';
|
|
69
71
|
import * as update_check from '../_lib/update_check.js';
|
|
70
72
|
import { resolvePackageRoot } from '../_lib/package_root.js';
|
|
73
|
+
import { pin_advice_lines } from '../_lib/pin_advice.js';
|
|
71
74
|
import {
|
|
72
75
|
DEFAULT_PROJECT_FILE,
|
|
73
76
|
LOCAL_PROJECT_FILE,
|
|
@@ -291,6 +294,30 @@ function _read_pin_line(p: string): number | null {
|
|
|
291
294
|
return null;
|
|
292
295
|
}
|
|
293
296
|
|
|
297
|
+
/** The pinned version in `p`, unquoted; `null` when the file carries no pin. */
|
|
298
|
+
function _read_pin_value(p: string): string | null {
|
|
299
|
+
const idx = _read_pin_line(p);
|
|
300
|
+
if (idx === null) return null;
|
|
301
|
+
const line = _splitlinesKeepends(fs.readFileSync(p, { encoding: 'utf-8' }))[idx] as string;
|
|
302
|
+
const raw = (PIN_LINE_RE.exec(line)?.[2] ?? '').replace(/\s+#.*$/, '').trim().replace(/^["']|["']$/g, '');
|
|
303
|
+
return raw === '' ? null : _normalize(raw);
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
/** The release's `agentConfig.impact`: `null` when the document carries none, `undefined` when it could not be fetched. */
|
|
307
|
+
async function _fetch_impact_map(version: string, timeout = 1.0): Promise<unknown> {
|
|
308
|
+
try {
|
|
309
|
+
const resp = await fetch(REGISTRY_VERSION_URL.replace('{version}', _normalize(version)), {
|
|
310
|
+
headers: { Accept: 'application/json' },
|
|
311
|
+
signal: AbortSignal.timeout(timeout * 1000),
|
|
312
|
+
});
|
|
313
|
+
if (resp.status !== 200) return undefined;
|
|
314
|
+
const doc = (await resp.json()) as { agentConfig?: { impact?: unknown } } | null;
|
|
315
|
+
return doc?.agentConfig?.impact ?? null;
|
|
316
|
+
} catch {
|
|
317
|
+
return undefined;
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
|
|
294
321
|
/** Rewrite the pin in `path`; return `true` if the file changed. */
|
|
295
322
|
function _write_pin(p: string, new_version: string): boolean {
|
|
296
323
|
const target = `agent_config_version: "${_normalize(new_version)}"\n`;
|
|
@@ -374,6 +401,7 @@ interface MainOptions {
|
|
|
374
401
|
fetcher?: () => string | null | Promise<string | null>;
|
|
375
402
|
version_checker?: (version: string) => boolean | Promise<boolean>;
|
|
376
403
|
cache_warmer?: (version: string) => void;
|
|
404
|
+
impact_fetcher?: (version: string) => unknown;
|
|
377
405
|
state_path?: string | null;
|
|
378
406
|
out?: OutSink;
|
|
379
407
|
err?: OutSink;
|
|
@@ -490,6 +518,11 @@ export async function main(argv: string[] | null = null, options: MainOptions =
|
|
|
490
518
|
} else {
|
|
491
519
|
_print(out, `agent-config is up to date (${installed_version}).`);
|
|
492
520
|
}
|
|
521
|
+
const pin = _read_pin_value(_find_pin_file(cwd));
|
|
522
|
+
if (pin !== null && !offline) {
|
|
523
|
+
const fetch_impact = options.impact_fetcher ?? _fetch_impact_map;
|
|
524
|
+
for (const line of pin_advice_lines(pin, latest, await fetch_impact(latest), args.to ? 'target' : 'latest')) _print(out, line);
|
|
525
|
+
}
|
|
493
526
|
return 0;
|
|
494
527
|
}
|
|
495
528
|
|