@event4u/agent-config 16.4.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 +483 -669
- package/CONTRIBUTING.md +47 -0
- package/README.md +25 -25
- package/dist/agent-src/commands/{design.md → agent-design.md} +11 -7
- 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 +6 -1
- 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 +2 -2
- 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/accessibility-auditor/data/aria-patterns.csv +2 -0
- package/dist/agent-src/skills/accessibility-auditor/data/manifest.json +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 +16 -4
- 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 +25 -22
- 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 +65 -4
- 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/frontend-render-security/SKILL.md +9 -0
- 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/iconography/SKILL.md +4 -2
- package/dist/agent-src/skills/image-provider-routing/SKILL.md +16 -5
- 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 +21 -11
- 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 +324 -0
- 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/wireframe/SKILL.md +5 -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 +265 -13
- package/dist/cli/commands/uiRenderAsset.js +1316 -0
- package/dist/cli/commands/uiRenderAssetCompare.js +752 -0
- package/dist/cli/commands/uiRenderAssetFonts.js +158 -0
- package/dist/cli/commands/uiRenderAssetGrid.js +265 -0
- package/dist/cli/commands/uiRenderAssetGrounds.js +323 -0
- package/dist/cli/commands/uiRenderAssetIsolation.js +85 -0
- package/dist/cli/commands/uiRenderAssetTypes.js +133 -0
- package/dist/cli/initRouting.js +1 -1
- package/dist/cli/main.js +47 -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 +5 -2
- 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-AED2VQGM.js → chunk-2CX7NWRB.js} +233 -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 +669 -822
- 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 +409 -201
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +8 -8
- package/dist/discovery/dormancy-report.md +1 -1
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +36 -27
- package/dist/discovery/trust-report.md +3 -3
- package/dist/discovery/workspaces.json +25 -16
- package/dist/hooks/chat_history.chunk.cjs +6852 -0
- package/dist/hooks/chat_history.chunk.cjs.sha256 +1 -0
- package/dist/hooks/dispatch.js +17706 -18627
- 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 +1858 -0
- package/dist/hooks/svg_rules.chunk.cjs.sha256 +1 -0
- 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 +9814 -5333
- 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/scan_scope.js +105 -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_dom.js +284 -0
- package/dist/scripts/_lib/svg_filled_counter.js +285 -0
- package/dist/scripts/_lib/svg_geometry.js +477 -0
- package/dist/scripts/_lib/svg_motion.js +179 -0
- package/dist/scripts/_lib/svg_rules.js +1339 -0
- package/dist/scripts/_lib/svg_urls.js +67 -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/scripts/lint_svg_asset.js +324 -0
- 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 +6 -1
- 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 +15 -5
- 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 +29 -25
- 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 +100 -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_dom.ts +318 -0
- package/src/scripts/_lib/svg_filled_counter.ts +287 -0
- package/src/scripts/_lib/svg_geometry.ts +480 -0
- package/src/scripts/_lib/svg_motion.ts +208 -0
- package/src/scripts/_lib/svg_rules.ts +1455 -0
- package/src/scripts/_lib/svg_urls.ts +72 -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/verification_command.ts +59 -0
- package/src/scripts/_lib/verify_clause.ts +31 -19
- 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 +54 -8
- 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 +199 -13
- 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 +553 -0
- package/src/scripts/hooks/svg_rules_loader.ts +133 -0
- package/src/scripts/hooks/tool_result_bytes_hook.ts +14 -5
- package/src/scripts/hooks/turn_end_gate_hook.ts +5 -3
- 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 +150 -19
- 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_design_quality.ts +60 -12
- 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_motion_authority_drift.ts +27 -0
- 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_svg_asset.ts +365 -0
- 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-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-MSUL5NYP.js +0 -1123
- 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
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The materialisation lock, and removal from it — the half of
|
|
3
|
+
* `road-to-skills-that-arrive-when-called` 4.3/4.5 that the `session_start`
|
|
4
|
+
* collect needs.
|
|
5
|
+
*
|
|
6
|
+
* WHY THIS IS ITS OWN FILE. 4.4 puts collection in the `session_start` read,
|
|
7
|
+
* which runs inside the hook dispatcher bundle — a bundle with a measured
|
|
8
|
+
* ceiling that every hook event on every host pays for. The materialiser
|
|
9
|
+
* reaches the staged runtime and the host built-in table, so importing it from
|
|
10
|
+
* a hook would carry both into that bundle. Splitting the lock out keeps ONE
|
|
11
|
+
* reader of the lock format (a second reader written "just for the hook" is how
|
|
12
|
+
* two formats drift apart) while the writer-side machinery — payload
|
|
13
|
+
* inspection, hashing, placement — stays out of the bundle entirely.
|
|
14
|
+
*
|
|
15
|
+
* Imports are `node:fs`, `node:path` and the atomic write, all of which the
|
|
16
|
+
* bundle already carries.
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
import * as fs from 'node:fs';
|
|
20
|
+
import * as path from 'node:path';
|
|
21
|
+
|
|
22
|
+
import { atomicWriteFile } from '../../install/atomic.js';
|
|
23
|
+
|
|
24
|
+
export const LOCK_BASENAME = 'materialised-skills.json';
|
|
25
|
+
export const STORE_DIRNAME = 'materialised';
|
|
26
|
+
|
|
27
|
+
export interface LockEntry {
|
|
28
|
+
host: string;
|
|
29
|
+
name: string;
|
|
30
|
+
/** The host skills root the symlink was placed under. */
|
|
31
|
+
root: string;
|
|
32
|
+
/** Content hash of the projected folder. */
|
|
33
|
+
sha256: string;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export interface Lock {
|
|
37
|
+
schema_version: 1;
|
|
38
|
+
entries: LockEntry[];
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export function sortEntries(entries: readonly LockEntry[]): LockEntry[] {
|
|
42
|
+
return [...entries].sort((a, b) =>
|
|
43
|
+
a.root === b.root ? (a.name < b.name ? -1 : a.name > b.name ? 1 : 0) : a.root < b.root ? -1 : 1,
|
|
44
|
+
);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* One path segment: `release` joins `host` and `name` into a recursive delete,
|
|
49
|
+
* so a lock row from a synced dotfile or a corrupted write must not be able to
|
|
50
|
+
* climb out of the store with `..` or a separator.
|
|
51
|
+
*/
|
|
52
|
+
function isSegment(s: string): boolean {
|
|
53
|
+
return s !== '' && s !== '.' && s !== '..' && !/[/\\\0]/.test(s);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export function loadLock(file: string): Lock {
|
|
57
|
+
try {
|
|
58
|
+
const data = JSON.parse(fs.readFileSync(file, 'utf-8')) as Partial<Lock>;
|
|
59
|
+
if (!data || !Array.isArray(data.entries)) return { schema_version: 1, entries: [] };
|
|
60
|
+
const entries = data.entries.filter(
|
|
61
|
+
(e): e is LockEntry =>
|
|
62
|
+
!!e && typeof e.host === 'string' && typeof e.name === 'string' &&
|
|
63
|
+
typeof e.root === 'string' && typeof e.sha256 === 'string' &&
|
|
64
|
+
isSegment(e.host) && isSegment(e.name),
|
|
65
|
+
);
|
|
66
|
+
return { schema_version: 1, entries: sortEntries(entries) };
|
|
67
|
+
} catch {
|
|
68
|
+
return { schema_version: 1, entries: [] };
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export function saveLock(file: string, lock: Lock): void {
|
|
73
|
+
if (lock.entries.length === 0) {
|
|
74
|
+
fs.rmSync(file, { force: true });
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
fs.mkdirSync(path.dirname(file), { recursive: true });
|
|
78
|
+
atomicWriteFile(file, `${JSON.stringify({ schema_version: 1, entries: sortEntries(lock.entries) }, null, 2)}\n`);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/** Names this lock holds for one host root. */
|
|
82
|
+
export function materialisedNames(lockFile: string, hostSkillsRoot: string): string[] {
|
|
83
|
+
const want = path.resolve(hostSkillsRoot);
|
|
84
|
+
return loadLock(lockFile)
|
|
85
|
+
.entries.filter((e) => path.resolve(e.root) === want)
|
|
86
|
+
.map((e) => e.name)
|
|
87
|
+
.sort();
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
export interface ReleaseResult {
|
|
91
|
+
removed: string[];
|
|
92
|
+
/** Entries the lock names whose host side is not our link — left in place. */
|
|
93
|
+
kept_foreign: string[];
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Remove exactly the named entries, and only when the lock claims them.
|
|
98
|
+
*
|
|
99
|
+
* The host link goes first and the store second, which is the order 0.2 (b)
|
|
100
|
+
* makes safe: a live session that already resolved the skill keeps working
|
|
101
|
+
* while its target exists, so a collection that loses a race degrades to a
|
|
102
|
+
* listing change rather than to a broken session.
|
|
103
|
+
*/
|
|
104
|
+
export function release(
|
|
105
|
+
lockFile: string,
|
|
106
|
+
hostSkillsRoot: string,
|
|
107
|
+
names: Iterable<string>,
|
|
108
|
+
storeDir: string = path.join(path.dirname(lockFile), STORE_DIRNAME),
|
|
109
|
+
): ReleaseResult {
|
|
110
|
+
const lock = loadLock(lockFile);
|
|
111
|
+
const want = new Set(names);
|
|
112
|
+
const root = path.resolve(hostSkillsRoot);
|
|
113
|
+
const result: ReleaseResult = { removed: [], kept_foreign: [] };
|
|
114
|
+
const keep: LockEntry[] = [];
|
|
115
|
+
for (const e of lock.entries) {
|
|
116
|
+
if (path.resolve(e.root) !== root || !want.has(e.name)) {
|
|
117
|
+
keep.push(e);
|
|
118
|
+
continue;
|
|
119
|
+
}
|
|
120
|
+
const dest = path.join(e.root, e.name);
|
|
121
|
+
let ours = true;
|
|
122
|
+
try {
|
|
123
|
+
// Only a symlink this package placed is ours to remove: one that
|
|
124
|
+
// points into the store. A real directory, or a link elsewhere, is
|
|
125
|
+
// somebody else's, and the lock being stale does not make it ours.
|
|
126
|
+
ours =
|
|
127
|
+
fs.lstatSync(dest).isSymbolicLink() &&
|
|
128
|
+
path.resolve(path.dirname(dest), fs.readlinkSync(dest)).startsWith(path.resolve(storeDir) + path.sep);
|
|
129
|
+
} catch {
|
|
130
|
+
ours = true; // already gone; dropping the row is the repair
|
|
131
|
+
}
|
|
132
|
+
if (!ours) {
|
|
133
|
+
result.kept_foreign.push(e.name);
|
|
134
|
+
keep.push(e);
|
|
135
|
+
continue;
|
|
136
|
+
}
|
|
137
|
+
try {
|
|
138
|
+
fs.rmSync(dest, { force: true });
|
|
139
|
+
fs.rmSync(path.join(storeDir, e.host, e.name), { recursive: true, force: true });
|
|
140
|
+
} catch {
|
|
141
|
+
/* a vanished entry is the state we wanted */
|
|
142
|
+
}
|
|
143
|
+
result.removed.push(e.name);
|
|
144
|
+
}
|
|
145
|
+
saveLock(lockFile, { schema_version: 1, entries: keep });
|
|
146
|
+
result.removed.sort();
|
|
147
|
+
result.kept_foreign.sort();
|
|
148
|
+
return result;
|
|
149
|
+
}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What makes a skill arrive — `road-to-skills-that-arrive-when-called` 4.2.
|
|
3
|
+
*
|
|
4
|
+
* THE WHOLE POINT IS THE NEGATIVE. A skill is materialised when a deterministic
|
|
5
|
+
* package entry point NAMES it, and never when a model guesses it might be
|
|
6
|
+
* useful. ADR-263 records skills here as explicitly invoked reference material,
|
|
7
|
+
* and the activation census counted zero model invocations over 30 sessions —
|
|
8
|
+
* so "the model thought of it" is not a trigger this package has, and inventing
|
|
9
|
+
* one would be the single change that turns an on-demand install into an
|
|
10
|
+
* unbounded one.
|
|
11
|
+
*
|
|
12
|
+
* THREE KINDS, AND EACH ONE IS AN ENTRY POINT THAT ALREADY EXISTS (K6: no new
|
|
13
|
+
* verbs):
|
|
14
|
+
*
|
|
15
|
+
* `command-expanded` a command or skill body was expanded and its `skills:`
|
|
16
|
+
* / `requires_skills:` frontmatter names the skill. This
|
|
17
|
+
* is the edge data `report_skill_menu_census` already
|
|
18
|
+
* walks, and the same closure 6.3 taught the installer.
|
|
19
|
+
* `search-read` a search answer was READ — not merely returned. A
|
|
20
|
+
* ranked list is a pointer; the read is the commitment,
|
|
21
|
+
* so the row the caller opened is the trigger and the
|
|
22
|
+
* other nine rows are not.
|
|
23
|
+
* `called-by-name` the name was typed, by the user or by a command.
|
|
24
|
+
*
|
|
25
|
+
* A fourth value exists only to be refused: `model-suggested` is accepted by the
|
|
26
|
+
* type so a caller cannot smuggle one in under another label, and
|
|
27
|
+
* {@link triggeredNames} returns nothing for it.
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
export type TriggerKind = 'command-expanded' | 'search-read' | 'called-by-name' | 'model-suggested';
|
|
31
|
+
|
|
32
|
+
export interface Trigger {
|
|
33
|
+
kind: TriggerKind;
|
|
34
|
+
/**
|
|
35
|
+
* Names the trigger carries. For `command-expanded` these are the declared
|
|
36
|
+
* dependencies of the artefact that expanded; for `search-read` the single
|
|
37
|
+
* row that was read; for `called-by-name` the one name.
|
|
38
|
+
*/
|
|
39
|
+
names: readonly string[];
|
|
40
|
+
/** The artefact that produced the trigger, for the refusal message. */
|
|
41
|
+
source?: string;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/** Trigger kinds that may materialise. `model-suggested` is deliberately absent. */
|
|
45
|
+
export const DETERMINISTIC_KINDS: ReadonlySet<TriggerKind> = new Set<TriggerKind>([
|
|
46
|
+
'command-expanded',
|
|
47
|
+
'search-read',
|
|
48
|
+
'called-by-name',
|
|
49
|
+
]);
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* The names a trigger may materialise: sorted, de-duplicated, empty for a
|
|
53
|
+
* non-deterministic kind.
|
|
54
|
+
*
|
|
55
|
+
* `installed` is the set already on disk — a name that is already there is not
|
|
56
|
+
* a materialisation candidate, so the common case does no work at all.
|
|
57
|
+
*/
|
|
58
|
+
export function triggeredNames(trigger: Trigger, installed: ReadonlySet<string>): string[] {
|
|
59
|
+
if (!DETERMINISTIC_KINDS.has(trigger.kind)) return [];
|
|
60
|
+
const out = new Set<string>();
|
|
61
|
+
for (const n of trigger.names) {
|
|
62
|
+
const name = n.trim();
|
|
63
|
+
if (name === '' || installed.has(name)) continue;
|
|
64
|
+
out.add(name);
|
|
65
|
+
}
|
|
66
|
+
return [...out].sort();
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Declared skill dependencies of one artefact's frontmatter.
|
|
71
|
+
*
|
|
72
|
+
* Both keys, because 6.3's closure keeps both and a trigger that read only one
|
|
73
|
+
* of them would materialise a different set than the installer keeps.
|
|
74
|
+
*/
|
|
75
|
+
export function declaredSkills(frontmatter: string): string[] {
|
|
76
|
+
const out = new Set<string>();
|
|
77
|
+
for (const key of ['skills', 'requires_skills']) {
|
|
78
|
+
// `key: [a, b]` and a block list both occur in this tree.
|
|
79
|
+
const inline = new RegExp(`^${key}:[ \\t]*\\[([^\\]]*)\\]`, 'm').exec(frontmatter);
|
|
80
|
+
if (inline !== null) {
|
|
81
|
+
for (const part of inline[1]!.split(',')) {
|
|
82
|
+
const v = part.trim().replace(/^["']|["']$/g, '');
|
|
83
|
+
if (v !== '') out.add(v);
|
|
84
|
+
}
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
const block = new RegExp(`^${key}:[ \\t]*\\n((?:[ \\t]*-[ \\t]*.*\\n?)+)`, 'm').exec(frontmatter);
|
|
88
|
+
if (block !== null) {
|
|
89
|
+
for (const line of block[1]!.split('\n')) {
|
|
90
|
+
const m = /^[ \t]*-[ \t]*(.+?)[ \t]*$/.exec(line);
|
|
91
|
+
if (m) out.add(m[1]!.replace(/^["']|["']$/g, ''));
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return [...out].sort();
|
|
96
|
+
}
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
* loads on every dispatch, under a ceiling `check_hook_bundle_composition` holds.
|
|
10
10
|
* So the primitives live here, importing only the manifest reader, and the census
|
|
11
11
|
* re-exports them — one definition, two call sites, no second module graph.
|
|
12
|
+
* (`user_global_paths` is the one other import: it locates the deploy inventory.)
|
|
12
13
|
*
|
|
13
14
|
* ORIGIN IS READ FROM A CLAIM RECORD, NEVER INFERRED FROM A ROOT. The temptation
|
|
14
15
|
* is to call `~/.claude/skills` foreign and the workspace ours. That is wrong in
|
|
@@ -26,6 +27,7 @@ import * as path from 'node:path';
|
|
|
26
27
|
import { parse as parseYaml } from 'yaml';
|
|
27
28
|
|
|
28
29
|
import { manifest_path } from './installed_tools.js';
|
|
30
|
+
import { write_target } from './user_global_paths.js';
|
|
29
31
|
|
|
30
32
|
/**
|
|
31
33
|
* Where a RANKED skill came from — a question about AUTHORSHIP.
|
|
@@ -94,7 +96,10 @@ export function splitQualifiedName(qualified: string): { origin: SkillOrigin; na
|
|
|
94
96
|
* budget this whole module was split out to protect. The `~` expansion below is
|
|
95
97
|
* the same one all three use.
|
|
96
98
|
*/
|
|
97
|
-
export function packageClaimedPaths(
|
|
99
|
+
export function packageClaimedPaths(
|
|
100
|
+
projectRoot: string,
|
|
101
|
+
inventoryFile: string = process.env['AGENT_CONFIG_DEPLOY_INVENTORY'] || write_target('deployed-files.json'),
|
|
102
|
+
): ReadonlySet<string> | null {
|
|
98
103
|
const manifest = manifest_path(projectRoot);
|
|
99
104
|
let doc: unknown;
|
|
100
105
|
try {
|
|
@@ -118,6 +123,21 @@ export function packageClaimedPaths(projectRoot: string): ReadonlySet<string> |
|
|
|
118
123
|
out.add(path.resolve(projectRoot, _expanduser(raw)));
|
|
119
124
|
}
|
|
120
125
|
}
|
|
126
|
+
// A global entry records no files[]: the user-scoped deploy inventory is
|
|
127
|
+
// where its paths live (`global_deploy_inventory.ts`), so it claims them.
|
|
128
|
+
try {
|
|
129
|
+
const inv = JSON.parse(fs.readFileSync(_expanduser(inventoryFile), 'utf-8')) as {
|
|
130
|
+
tools?: Record<string, { anchor?: unknown; files?: unknown }>;
|
|
131
|
+
};
|
|
132
|
+
for (const t of Object.values(inv.tools ?? {})) {
|
|
133
|
+
if (typeof t?.anchor !== 'string' || !Array.isArray(t.files)) continue;
|
|
134
|
+
for (const rel of t.files) {
|
|
135
|
+
if (typeof rel === 'string') out.add(path.resolve(_expanduser(t.anchor), rel));
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
} catch {
|
|
139
|
+
// No inventory: the lock's own claims are the whole answer.
|
|
140
|
+
}
|
|
121
141
|
return out;
|
|
122
142
|
}
|
|
123
143
|
|
|
@@ -0,0 +1,342 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skill reach for `agent-config doctor --check skill-reach`.
|
|
3
|
+
*
|
|
4
|
+
* `road-to-skills-that-arrive-when-called` 2.2 and 2.3. Every authored skill
|
|
5
|
+
* lands in exactly one of six buckets on the first host, and the six sum to the
|
|
6
|
+
* authored count — a silent subset is a number that does not add up, not a
|
|
7
|
+
* feeling. The partition was set by an AI council on 2026-10-18 (both seats):
|
|
8
|
+
*
|
|
9
|
+
* installed, by listing state (in the host root, `~/.claude/skills`):
|
|
10
|
+
* described listed with its description
|
|
11
|
+
* name-only listed by name only (`skillOverrides: name-only`)
|
|
12
|
+
* unlisted installed but kept off the model listing (`off`,
|
|
13
|
+
* `user-invocable-only`)
|
|
14
|
+
* not installed, by the BEST available path:
|
|
15
|
+
* reachable-not-installed a path carries every declared property the host
|
|
16
|
+
* would have applied
|
|
17
|
+
* degraded a path exists, and every one drops at least one
|
|
18
|
+
* unreachable no path exists
|
|
19
|
+
*
|
|
20
|
+
* `installed` is printed as the subtotal of the first three, never as a seventh
|
|
21
|
+
* bucket.
|
|
22
|
+
*
|
|
23
|
+
* WHAT "DROPS" MEANS — 2.3, "degraded is never called reach". Two paths exist:
|
|
24
|
+
*
|
|
25
|
+
* shell `route:explain --skills` ranks the installed package's projection and
|
|
26
|
+
* the agent reads that SKILL.md as text. Everything reaches the model as
|
|
27
|
+
* text, but a key the HOST applies (allowed-tools, model, effort, context,
|
|
28
|
+
* user-invocable, ...) is not applied by anyone. A skill declaring one is
|
|
29
|
+
* degraded on this path.
|
|
30
|
+
* mcp the MCP read carries only `CARRIED_KEYS` whole; any other declared key
|
|
31
|
+
* is dropped (`semantic-parity-census`).
|
|
32
|
+
*
|
|
33
|
+
* The host-applied set is the host's own documented key list
|
|
34
|
+
* (`src/config/host-skill-frontmatter-keys.json`) minus the keys that only
|
|
35
|
+
* describe a skill and change nothing about how it runs.
|
|
36
|
+
*
|
|
37
|
+
* A report, never a refusal: the check returns `warn` only when the buckets fail
|
|
38
|
+
* to sum, which would be this module's defect, not the install's.
|
|
39
|
+
*/
|
|
40
|
+
import * as fs from 'node:fs';
|
|
41
|
+
import * as os from 'node:os';
|
|
42
|
+
import * as path from 'node:path';
|
|
43
|
+
|
|
44
|
+
import { CARRIED_KEYS } from './body_portable.js';
|
|
45
|
+
import { FINDER_NAME, finderRoutes, readFinderIndex } from './codex_skill_finder.js';
|
|
46
|
+
import { resolvePackageRoot } from './package_root.js';
|
|
47
|
+
import { declaredSkills } from './skill_materialisation_triggers.js';
|
|
48
|
+
import type { WiringCheck } from './runtime_wiring_checks.js';
|
|
49
|
+
|
|
50
|
+
export const REACH_BUCKETS = [
|
|
51
|
+
'described',
|
|
52
|
+
'name-only',
|
|
53
|
+
'unlisted',
|
|
54
|
+
'reachable-not-installed',
|
|
55
|
+
'degraded',
|
|
56
|
+
'unreachable',
|
|
57
|
+
] as const;
|
|
58
|
+
export type ReachBucket = (typeof REACH_BUCKETS)[number];
|
|
59
|
+
|
|
60
|
+
/** Host keys that describe a skill; reading them as text loses nothing. */
|
|
61
|
+
const DESCRIPTIVE_HOST_KEYS: ReadonlySet<string> = new Set([
|
|
62
|
+
'name',
|
|
63
|
+
'description',
|
|
64
|
+
'when_to_use',
|
|
65
|
+
'argument-hint',
|
|
66
|
+
'arguments',
|
|
67
|
+
'license',
|
|
68
|
+
'metadata',
|
|
69
|
+
'compatibility',
|
|
70
|
+
]);
|
|
71
|
+
|
|
72
|
+
export interface SkillReachInput {
|
|
73
|
+
/** Top-level frontmatter keys the projected SKILL.md declares. */
|
|
74
|
+
keys: readonly string[];
|
|
75
|
+
installed: boolean;
|
|
76
|
+
/** The host's `skillOverrides` value for this name, when one is set. */
|
|
77
|
+
override?: string;
|
|
78
|
+
/**
|
|
79
|
+
* Installed and unlisted, and a listed entry routes to it — on the second
|
|
80
|
+
* host, the finder (`second-host-unlisted-reachability`, remedy (a)). Such a
|
|
81
|
+
* skill is reached the way a not-installed one is: one listed invocation,
|
|
82
|
+
* then a read. So it is classified by the same path rule, never as listed.
|
|
83
|
+
*/
|
|
84
|
+
routed?: boolean;
|
|
85
|
+
/** A skill it declares (`skills:` / `requires_skills:`) is absent from the authored set. */
|
|
86
|
+
missingDeps?: boolean;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
export interface ReachPaths {
|
|
90
|
+
shell: boolean;
|
|
91
|
+
mcp: boolean;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/** Keys of `keys` the host applies and a text read therefore leaves unapplied. */
|
|
95
|
+
export function hostAppliedKeys(keys: readonly string[], hostKeys: ReadonlySet<string>): string[] {
|
|
96
|
+
return keys.filter((k) => hostKeys.has(k) && !DESCRIPTIVE_HOST_KEYS.has(k));
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/** One skill, one bucket. Pure; the caller supplies every observation. */
|
|
100
|
+
export function classifySkillReach(
|
|
101
|
+
s: SkillReachInput,
|
|
102
|
+
paths: ReachPaths,
|
|
103
|
+
hostKeys: ReadonlySet<string>,
|
|
104
|
+
): ReachBucket {
|
|
105
|
+
if (s.installed) {
|
|
106
|
+
if (s.override === 'name-only') return 'name-only';
|
|
107
|
+
const unlisted = s.override === 'off' || s.override === 'user-invocable-only';
|
|
108
|
+
if (unlisted && !s.routed) return 'unlisted';
|
|
109
|
+
if (!unlisted) return 'described';
|
|
110
|
+
}
|
|
111
|
+
// A path that reaches a skill whose declared dependency is missing reaches
|
|
112
|
+
// it without everything it relies on: degraded, never reach.
|
|
113
|
+
if (s.missingDeps && (paths.shell || paths.mcp)) return 'degraded';
|
|
114
|
+
if (paths.shell && hostAppliedKeys(s.keys, hostKeys).length === 0) return 'reachable-not-installed';
|
|
115
|
+
if (paths.mcp && s.keys.every((k) => CARRIED_KEYS.includes(k))) return 'reachable-not-installed';
|
|
116
|
+
if (paths.shell || paths.mcp) return 'degraded';
|
|
117
|
+
return 'unreachable';
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/** Top-level keys of a markdown file's frontmatter block, in order. */
|
|
121
|
+
export function frontmatterKeys(text: string): string[] {
|
|
122
|
+
const m = /^---\r?\n([\s\S]*?)\r?\n---/.exec(text);
|
|
123
|
+
if (m === null) return [];
|
|
124
|
+
const out: string[] = [];
|
|
125
|
+
for (const line of (m[1] as string).split(/\r?\n/)) {
|
|
126
|
+
const k = /^([A-Za-z_][\w-]*):/.exec(line);
|
|
127
|
+
if (k !== null) out.push(k[1] as string);
|
|
128
|
+
}
|
|
129
|
+
return out;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* A host's documented skill keys, from the committed key list. Throws when the
|
|
134
|
+
* host has no row: an empty set would classify every skill on that host as
|
|
135
|
+
* reachable, which is the one answer an unknown must never produce.
|
|
136
|
+
*/
|
|
137
|
+
export function loadHostKeys(packageRoot: string, host = 'claude-code'): Set<string> {
|
|
138
|
+
const file = path.join(packageRoot, 'src', 'config', 'host-skill-frontmatter-keys.json');
|
|
139
|
+
const data = JSON.parse(fs.readFileSync(file, 'utf-8')) as { hosts: Array<{ host: string; keys: string[] }> };
|
|
140
|
+
const row = data.hosts.find((h) => h.host === host);
|
|
141
|
+
if (row === undefined) throw new Error(`no row for host ${host} in ${file}`);
|
|
142
|
+
return new Set(row.keys);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
function skillNames(root: string): string[] {
|
|
146
|
+
try {
|
|
147
|
+
return fs
|
|
148
|
+
.readdirSync(root)
|
|
149
|
+
.filter((n) => fs.existsSync(path.join(root, n, 'SKILL.md')))
|
|
150
|
+
.sort();
|
|
151
|
+
} catch {
|
|
152
|
+
return [];
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
function readOverrides(settingsPath: string): Record<string, string> {
|
|
157
|
+
try {
|
|
158
|
+
const data = JSON.parse(fs.readFileSync(settingsPath, 'utf-8')) as Record<string, unknown>;
|
|
159
|
+
const v = data['skillOverrides'];
|
|
160
|
+
if (typeof v !== 'object' || v === null || Array.isArray(v)) return {};
|
|
161
|
+
const out: Record<string, string> = {};
|
|
162
|
+
for (const [k, val] of Object.entries(v as Record<string, unknown>)) {
|
|
163
|
+
if (typeof val === 'string') out[k] = val;
|
|
164
|
+
}
|
|
165
|
+
return out;
|
|
166
|
+
} catch {
|
|
167
|
+
return {};
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
export interface ReachCensus {
|
|
172
|
+
authored: number;
|
|
173
|
+
counts: Record<ReachBucket, number>;
|
|
174
|
+
installed: number;
|
|
175
|
+
sums: boolean;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* Partition the projection at `projectionRoot` against the host root and the
|
|
180
|
+
* host settings file. `paths.shell` is true whenever the projection is readable:
|
|
181
|
+
* the shell search path ranks exactly that tree.
|
|
182
|
+
*/
|
|
183
|
+
export function reachCensus(opts: {
|
|
184
|
+
projectionRoot: string;
|
|
185
|
+
hostRoot: string;
|
|
186
|
+
settingsPath: string;
|
|
187
|
+
hostKeys: ReadonlySet<string>;
|
|
188
|
+
mcp: boolean;
|
|
189
|
+
/**
|
|
190
|
+
* The host's listing override for one name, when the host does not keep it
|
|
191
|
+
* in a settings file.
|
|
192
|
+
*
|
|
193
|
+
* The first host writes `skillOverrides` into its settings; the second host
|
|
194
|
+
* has no such setting and a skill leaves its listing by carrying a policy
|
|
195
|
+
* file instead (4.1). Same bucket, different place to look — so the LOOKUP
|
|
196
|
+
* is the seam, not a second census.
|
|
197
|
+
*/
|
|
198
|
+
overrideOf?: (name: string) => string | undefined;
|
|
199
|
+
/** Whether a listed entry routes to an unlisted `name`. Absent: nothing does. */
|
|
200
|
+
routedOf?: (name: string) => boolean;
|
|
201
|
+
}): ReachCensus {
|
|
202
|
+
const authoredNames = skillNames(opts.projectionRoot);
|
|
203
|
+
const authored = new Set(authoredNames);
|
|
204
|
+
const installed = new Set(skillNames(opts.hostRoot));
|
|
205
|
+
const overrides = opts.overrideOf ? {} : readOverrides(opts.settingsPath);
|
|
206
|
+
const paths: ReachPaths = { shell: authoredNames.length > 0, mcp: opts.mcp };
|
|
207
|
+
const counts = Object.fromEntries(REACH_BUCKETS.map((b) => [b, 0])) as Record<ReachBucket, number>;
|
|
208
|
+
for (const name of authoredNames) {
|
|
209
|
+
const text = fs.readFileSync(path.join(opts.projectionRoot, name, 'SKILL.md'), 'utf-8');
|
|
210
|
+
const input: SkillReachInput = { keys: frontmatterKeys(text), installed: installed.has(name) };
|
|
211
|
+
const ov = opts.overrideOf ? opts.overrideOf(name) : overrides[name];
|
|
212
|
+
if (ov !== undefined) input.override = ov;
|
|
213
|
+
if (opts.routedOf?.(name)) input.routed = true;
|
|
214
|
+
const fm = /^---\r?\n([\s\S]*?)\r?\n---/.exec(text);
|
|
215
|
+
if (fm && declaredSkills(fm[1] as string).some((d) => !authored.has(d))) input.missingDeps = true;
|
|
216
|
+
counts[classifySkillReach(input, paths, opts.hostKeys)] += 1;
|
|
217
|
+
}
|
|
218
|
+
const total = REACH_BUCKETS.reduce((n, b) => n + counts[b], 0);
|
|
219
|
+
return {
|
|
220
|
+
authored: authoredNames.length,
|
|
221
|
+
counts,
|
|
222
|
+
installed: counts.described + counts['name-only'] + counts.unlisted,
|
|
223
|
+
sums: total === authoredNames.length,
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
export function renderReach(c: ReachCensus, hostRootLabel: string, host = 'claude-code'): string {
|
|
228
|
+
return (
|
|
229
|
+
`${host} (${hostRootLabel}): installed ${c.installed} (described ${c.counts.described} · ` +
|
|
230
|
+
`name-only ${c.counts['name-only']} · unlisted ${c.counts.unlisted}) · ` +
|
|
231
|
+
`reachable-not-installed ${c.counts['reachable-not-installed']} · degraded ${c.counts.degraded} · ` +
|
|
232
|
+
`unreachable ${c.counts.unreachable} — of ${c.authored} authored`
|
|
233
|
+
);
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
/** The doctor check. `home` and `packageRoot` are seams for tests. */
|
|
237
|
+
export function checkSkillReach(
|
|
238
|
+
opts: { home?: string; packageRoot?: string; mcp?: boolean } = {},
|
|
239
|
+
): WiringCheck {
|
|
240
|
+
const id = 'skill-reach';
|
|
241
|
+
const packageRoot = opts.packageRoot ?? resolvePackageRoot(import.meta.url);
|
|
242
|
+
const home = opts.home ?? os.homedir();
|
|
243
|
+
const projectionRoot = path.join(packageRoot, 'dist', 'agent-src', 'skills');
|
|
244
|
+
if (skillNames(projectionRoot).length === 0) {
|
|
245
|
+
return { id, status: 'skipped', message: `no skill projection at ${projectionRoot}`, remedy: '' };
|
|
246
|
+
}
|
|
247
|
+
let hostKeys: Set<string>;
|
|
248
|
+
let specKeys: Set<string>;
|
|
249
|
+
try {
|
|
250
|
+
hostKeys = loadHostKeys(packageRoot);
|
|
251
|
+
specKeys = loadHostKeys(packageRoot, 'agent-skills-spec');
|
|
252
|
+
} catch (e) {
|
|
253
|
+
return { id, status: 'skipped', message: `host skill-key list unusable: ${(e as Error).message}`, remedy: '' };
|
|
254
|
+
}
|
|
255
|
+
const mcp = opts.mcp ?? false;
|
|
256
|
+
|
|
257
|
+
// AC-1 reads "every host with native skills", so the check reports a row
|
|
258
|
+
// per such host rather than one row for the first one. The second host
|
|
259
|
+
// appears only once something is installed there: a row of zeros for a host
|
|
260
|
+
// nobody installed would read as a finding.
|
|
261
|
+
const rows: Array<{ host: string; label: string; c: ReachCensus }> = [];
|
|
262
|
+
rows.push({
|
|
263
|
+
host: 'claude-code',
|
|
264
|
+
label: '~/.claude/skills',
|
|
265
|
+
c: reachCensus({
|
|
266
|
+
projectionRoot,
|
|
267
|
+
hostRoot: path.join(home, '.claude', 'skills'),
|
|
268
|
+
settingsPath: path.join(home, '.claude', 'settings.json'),
|
|
269
|
+
hostKeys,
|
|
270
|
+
mcp,
|
|
271
|
+
}),
|
|
272
|
+
});
|
|
273
|
+
const codexRoot = path.join(home, '.codex', 'skills');
|
|
274
|
+
if (skillNames(codexRoot).filter((n) => n !== FINDER_NAME).length > 0) {
|
|
275
|
+
const codexDirs = [codexRoot, path.join(home, '.agents', 'skills')];
|
|
276
|
+
const finderIndex = readFinderIndex(path.join(codexRoot, FINDER_NAME, 'SKILL.md'));
|
|
277
|
+
rows.push({
|
|
278
|
+
host: 'codex',
|
|
279
|
+
label: '~/.codex/skills',
|
|
280
|
+
c: reachCensus({
|
|
281
|
+
projectionRoot,
|
|
282
|
+
hostRoot: codexRoot,
|
|
283
|
+
settingsPath: '',
|
|
284
|
+
hostKeys: specKeys,
|
|
285
|
+
mcp,
|
|
286
|
+
// 4.1: a skill outside the resident set carries a policy file
|
|
287
|
+
// that takes it out of the listing. `off` is the bucket's own
|
|
288
|
+
// vocabulary — installed and not listed.
|
|
289
|
+
//
|
|
290
|
+
// Unlisted alone is NOT reach on this host: probe row
|
|
291
|
+
// `unlisted-skill-not-in-model-list` (two-armed) has the model
|
|
292
|
+
// not seeing a policy-disabled skill and answering
|
|
293
|
+
// `UNAVAILABLE` when asked to invoke it. What reaches it is the
|
|
294
|
+
// finder — a listed entry indexing every unlisted name
|
|
295
|
+
// (`second-host-unlisted-reachability`, remedy (a), AI council
|
|
296
|
+
// 2026-10-20). So an unlisted skill the finder routes to is
|
|
297
|
+
// classified by the path rule, against the keys THIS host
|
|
298
|
+
// applies; one it does not route to stays `unlisted`, and the
|
|
299
|
+
// check warns on it below.
|
|
300
|
+
overrideOf: (name) =>
|
|
301
|
+
fs.existsSync(path.join(codexRoot, name, 'agents', 'openai.yaml')) ? 'off' : undefined,
|
|
302
|
+
routedOf: (name) => finderRoutes(finderIndex, name, codexDirs),
|
|
303
|
+
}),
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
const message = rows.map((r) => renderReach(r.c, r.label, r.host)).join('; ');
|
|
308
|
+
const notSumming = rows.filter((r) => !r.c.sums).map((r) => r.host);
|
|
309
|
+
if (notSumming.length > 0) {
|
|
310
|
+
return {
|
|
311
|
+
id,
|
|
312
|
+
status: 'warn',
|
|
313
|
+
message: `${message} — the buckets do not sum for ${notSumming.join(', ')}`,
|
|
314
|
+
remedy: 'report this as a defect',
|
|
315
|
+
};
|
|
316
|
+
}
|
|
317
|
+
// AC-1's own condition, as a verdict rather than as a number a reader has
|
|
318
|
+
// to notice: a skill no path reaches on a host that has native skills is
|
|
319
|
+
// the defect this whole roadmap is about.
|
|
320
|
+
// On the second host `unlisted` means no listed entry routes to the skill —
|
|
321
|
+
// the model cannot see it (`unlisted-skill-not-in-model-list`). That is
|
|
322
|
+
// the same defect as `unreachable`, reported under its own name.
|
|
323
|
+
const unreachable = rows
|
|
324
|
+
.filter((r) => r.c.counts.unreachable > 0 || (r.host === 'codex' && r.c.counts.unlisted > 0))
|
|
325
|
+
.map((r) => r.host);
|
|
326
|
+
if (unreachable.length > 0) {
|
|
327
|
+
return {
|
|
328
|
+
id,
|
|
329
|
+
status: 'warn',
|
|
330
|
+
message: `${message} — unreachable skills on ${unreachable.join(', ')}`,
|
|
331
|
+
remedy: 'install the skill, or give the host a retrieval path that carries its declared keys',
|
|
332
|
+
};
|
|
333
|
+
}
|
|
334
|
+
return {
|
|
335
|
+
id,
|
|
336
|
+
status: 'ok',
|
|
337
|
+
message,
|
|
338
|
+
remedy: rows.some((r) => r.c.counts.degraded > 0)
|
|
339
|
+
? 'a degraded skill is reachable as text only; the host keys it declares are not applied'
|
|
340
|
+
: '',
|
|
341
|
+
};
|
|
342
|
+
}
|
|
@@ -103,8 +103,13 @@ const SOURCE_HEADER_RE = /^\s*(?:>\s*)?\*\*Source\*?\*?:?\*{0,2}\s*:?\s*(\S.*)$/
|
|
|
103
103
|
/** A quoted inbox directory. Terminated by `/`, so a bare mention of the parent is not a hit. */
|
|
104
104
|
const TMP_QUOTE_RE = /agents\/tmp(?:\.old)?\/([A-Za-z0-9._-]+)\//g;
|
|
105
105
|
|
|
106
|
-
/**
|
|
107
|
-
|
|
106
|
+
/**
|
|
107
|
+
* A GitHub repository URL, scheme-optional. The lookbehind excuses only the
|
|
108
|
+
* documentation host, whose `docs.github.com/en/copilot` would otherwise read as
|
|
109
|
+
* owner `en`, repo `copilot`. Every other subdomain (`api.`, `gist.`,
|
|
110
|
+
* `codeload.`) still flags the line, as it did before.
|
|
111
|
+
*/
|
|
112
|
+
const GITHUB_URL_RE = /(?<!docs\.)(?:https?:\/\/)?(?:www\.)?github\.com\/([A-Za-z0-9][A-Za-z0-9-]{0,38})\/([A-Za-z0-9][A-Za-z0-9._-]{0,99})/g;
|
|
108
113
|
|
|
109
114
|
export interface SlugAllowlist {
|
|
110
115
|
/** GitHub owners whose repos may be named openly (own org, integrated tools). */
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
// copies of the same lazy-import + warning-silencer dance.
|
|
8
8
|
//
|
|
9
9
|
// `node:sqlite` ships from Node 22.5 (experimental on 22.x, stable/silent on
|
|
10
|
-
// >= 23); the package's supported floor is `>=
|
|
10
|
+
// >= 23); the package's supported floor is `>=22.6` (package.json
|
|
11
11
|
// `engines`), so every caller MUST treat this module's failure modes as
|
|
12
12
|
// expected, not exceptional — lazy import + graceful fallback, never a hard
|
|
13
13
|
// dependency (ADR-129).
|