@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,388 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Materialise a skill the install did not write — `road-to-skills-that-arrive-
|
|
3
|
+
* when-called` 4.3 and 4.5.
|
|
4
|
+
*
|
|
5
|
+
* WHERE THE BYTES COME FROM. The staged runtime under
|
|
6
|
+
* `~/.event4u/agent-config/runtime/current/dist/agent-src/skills/<name>` — the
|
|
7
|
+
* payload the carrier roadmap already stages for this exact version, on this
|
|
8
|
+
* machine, offline. Never the network and never a package-manager cache: K4,
|
|
9
|
+
* and an `npx` install runs out of a directory the package manager may clear at
|
|
10
|
+
* any moment.
|
|
11
|
+
*
|
|
12
|
+
* HOW AN ENTRY IS PLACED, AND WHY IT IS TWO STEPS. The folder is copied into a
|
|
13
|
+
* package-owned store, written to a temporary name and renamed into place, so a
|
|
14
|
+
* half-written entry is never visible under its real name. The HOST then sees a
|
|
15
|
+
* symlink from its skills root into that store. Two steps rather than one
|
|
16
|
+
* because the two halves answer different questions: the copy is what makes the
|
|
17
|
+
* entry checkable and tamper-evident, and the symlink is the only placement 0.2
|
|
18
|
+
* observed the host pick up — a copy into the skills root is `unobserved` there
|
|
19
|
+
* and no step is allowed to assume it. It also buys the removal shape 0.2 (b)
|
|
20
|
+
* measured: dropping the symlink leaves a live session working, because its
|
|
21
|
+
* target still exists, and only collecting the target ends it.
|
|
22
|
+
*
|
|
23
|
+
* WHAT IT REFUSES, AND WHY EACH ONE IS A REAL FAILURE SHAPE AND NOT A GUESS.
|
|
24
|
+
* Public issue reports against an external skills CLI describe removal of
|
|
25
|
+
* unmanaged directories and stale lock entries (K4). The refusals below are
|
|
26
|
+
* those shapes, each with a fixture:
|
|
27
|
+
*
|
|
28
|
+
* `not-in-payload` the name is not in the staged payload of this version
|
|
29
|
+
* `path-escape` an entry path resolves outside the payload root
|
|
30
|
+
* `symlink-escape` a symlink inside the payload points outside it
|
|
31
|
+
* `hash-mismatch` the payload folder's content hash is not what was recorded
|
|
32
|
+
* `partial-write` a staging directory survived a previous interrupted write
|
|
33
|
+
* `would-shadow` the name already exists at the host root, or is a host built-in
|
|
34
|
+
* `project-tree` the target root is not the host's user-scope root (K8, ADR-020)
|
|
35
|
+
* `host-not-enabled` the host's probe rows do not support materialisation
|
|
36
|
+
*
|
|
37
|
+
* THE LOCK. `materialised-skills.json` beside the deploy inventory: sorted,
|
|
38
|
+
* timestamp-free, one row per entry with the content hash of the projected
|
|
39
|
+
* folder. Timestamp-free so two runs at one payload produce a byte-identical
|
|
40
|
+
* file — a lock that changed every run could not be diffed, and a diff is the
|
|
41
|
+
* only way to see an entry nobody meant to add. K7: this is the install log's
|
|
42
|
+
* `sha256` idea applied to a folder, not a new content-addressed store.
|
|
43
|
+
*
|
|
44
|
+
* ONLY ITS OWN ENTRIES (4.5). Removal reads the lock, never the directory. An
|
|
45
|
+
* entry the lock does not name is left alone whatever it looks like, so a
|
|
46
|
+
* user's own skill, a host built-in and another tool's directory all survive a
|
|
47
|
+
* full collect. The lock also pins the root each entry was written under, so a
|
|
48
|
+
* lock from another machine or another profile removes nothing here.
|
|
49
|
+
*/
|
|
50
|
+
|
|
51
|
+
import { createHash } from 'node:crypto';
|
|
52
|
+
import * as fs from 'node:fs';
|
|
53
|
+
import * as path from 'node:path';
|
|
54
|
+
|
|
55
|
+
import { currentRuntimeDir, runtimeRootFor } from '../../install/stagedRuntime.js';
|
|
56
|
+
import { is_claude_builtin_name } from './claude_builtin_names.js';
|
|
57
|
+
import { collectLeases, holdLease, readLeaseNames } from './skill_leases.js';
|
|
58
|
+
import { PLACEMENT, materialisationEnabled } from './skill_materialisation_gate.js';
|
|
59
|
+
import {
|
|
60
|
+
LOCK_BASENAME,
|
|
61
|
+
STORE_DIRNAME,
|
|
62
|
+
loadLock,
|
|
63
|
+
materialisedNames,
|
|
64
|
+
release,
|
|
65
|
+
saveLock,
|
|
66
|
+
type Lock,
|
|
67
|
+
type LockEntry,
|
|
68
|
+
type ReleaseResult,
|
|
69
|
+
} from './skill_materialisation_lock.js';
|
|
70
|
+
import { event4u_root, type EnvMap } from './user_global_paths.js';
|
|
71
|
+
|
|
72
|
+
// Re-exported so a caller that does the whole job — inspect, place, release —
|
|
73
|
+
// has one import. The lock itself lives next door because the `session_start`
|
|
74
|
+
// collect needs it inside the hook bundle and must not drag this file in.
|
|
75
|
+
export {
|
|
76
|
+
LOCK_BASENAME,
|
|
77
|
+
STORE_DIRNAME,
|
|
78
|
+
loadLock,
|
|
79
|
+
materialisedNames,
|
|
80
|
+
release,
|
|
81
|
+
saveLock,
|
|
82
|
+
type Lock,
|
|
83
|
+
type LockEntry,
|
|
84
|
+
type ReleaseResult,
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
export const STAGING_SUFFIX = '.staging';
|
|
88
|
+
export const EMPTY_LOCK: Lock = { schema_version: 1, entries: [] };
|
|
89
|
+
|
|
90
|
+
export type RefusalCode =
|
|
91
|
+
| 'not-in-payload'
|
|
92
|
+
| 'path-escape'
|
|
93
|
+
| 'symlink-escape'
|
|
94
|
+
| 'hash-mismatch'
|
|
95
|
+
| 'partial-write'
|
|
96
|
+
| 'would-shadow'
|
|
97
|
+
| 'project-tree'
|
|
98
|
+
| 'host-not-enabled';
|
|
99
|
+
|
|
100
|
+
export interface Refusal {
|
|
101
|
+
code: RefusalCode;
|
|
102
|
+
name: string;
|
|
103
|
+
detail: string;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
export function lockPath(env?: EnvMap | null): string {
|
|
107
|
+
return path.join(event4u_root(env), LOCK_BASENAME);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
export function storeRoot(env?: EnvMap | null): string {
|
|
111
|
+
return path.join(event4u_root(env), STORE_DIRNAME);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/** The staged payload's skills directory for the running version. */
|
|
115
|
+
export function payloadSkillsDir(env?: NodeJS.ProcessEnv): string {
|
|
116
|
+
return path.join(currentRuntimeDir(runtimeRootFor(env)), 'dist', 'agent-src', 'skills');
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Content hash of a folder: sha256 over `relpath\0<file sha256>\n` lines in
|
|
121
|
+
* sorted relative-path order.
|
|
122
|
+
*
|
|
123
|
+
* Sorted so the hash does not depend on readdir order, and relative so it does
|
|
124
|
+
* not depend on where the folder sits. A symlink inside the folder is hashed by
|
|
125
|
+
* its TARGET TEXT, not by what it points at — a link is content, and following
|
|
126
|
+
* it would make the hash depend on something outside the folder.
|
|
127
|
+
*/
|
|
128
|
+
export function hashFolder(dir: string): string {
|
|
129
|
+
const lines: string[] = [];
|
|
130
|
+
const walk = (abs: string, rel: string): void => {
|
|
131
|
+
const entries = fs.readdirSync(abs, { withFileTypes: true }).sort((a, b) => (a.name < b.name ? -1 : 1));
|
|
132
|
+
for (const e of entries) {
|
|
133
|
+
const childAbs = path.join(abs, e.name);
|
|
134
|
+
const childRel = rel === '' ? e.name : `${rel}/${e.name}`;
|
|
135
|
+
if (e.isSymbolicLink()) {
|
|
136
|
+
lines.push(`${childRel}\u0000link:${fs.readlinkSync(childAbs)}\n`);
|
|
137
|
+
} else if (e.isDirectory()) {
|
|
138
|
+
walk(childAbs, childRel);
|
|
139
|
+
} else if (e.isFile()) {
|
|
140
|
+
lines.push(`${childRel}\u0000${createHash('sha256').update(fs.readFileSync(childAbs)).digest('hex')}\n`);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
};
|
|
144
|
+
walk(dir, '');
|
|
145
|
+
return createHash('sha256').update(lines.join('')).digest('hex');
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/** True when `child` resolves inside `root`. Both are resolved first. */
|
|
149
|
+
export function contains(root: string, child: string): boolean {
|
|
150
|
+
const r = path.resolve(root);
|
|
151
|
+
const c = path.resolve(child);
|
|
152
|
+
return c === r || c.startsWith(r + path.sep);
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* Walk a payload folder and refuse anything that leaves it.
|
|
157
|
+
*
|
|
158
|
+
* Two different escapes, because they fail differently: a path that resolves
|
|
159
|
+
* out (`..` in a name, an absolute component) and a symlink whose target is
|
|
160
|
+
* outside. The first is caught before anything is read, the second before
|
|
161
|
+
* anything is copied.
|
|
162
|
+
*/
|
|
163
|
+
export function inspectPayload(root: string, name: string): Refusal | null {
|
|
164
|
+
const dir = path.join(root, name);
|
|
165
|
+
if (!contains(root, dir)) {
|
|
166
|
+
return { code: 'path-escape', name, detail: `${name} resolves outside the payload root` };
|
|
167
|
+
}
|
|
168
|
+
if (!fs.existsSync(path.join(dir, 'SKILL.md'))) {
|
|
169
|
+
return { code: 'not-in-payload', name, detail: `no SKILL.md under ${dir}` };
|
|
170
|
+
}
|
|
171
|
+
const stack = [dir];
|
|
172
|
+
while (stack.length > 0) {
|
|
173
|
+
const cur = stack.pop()!;
|
|
174
|
+
let entries: fs.Dirent[];
|
|
175
|
+
try {
|
|
176
|
+
entries = fs.readdirSync(cur, { withFileTypes: true });
|
|
177
|
+
} catch (e) {
|
|
178
|
+
return { code: 'not-in-payload', name, detail: `unreadable: ${String(e)}` };
|
|
179
|
+
}
|
|
180
|
+
for (const e of entries) {
|
|
181
|
+
const abs = path.join(cur, e.name);
|
|
182
|
+
if (!contains(dir, abs)) {
|
|
183
|
+
return { code: 'path-escape', name, detail: `${abs} resolves outside ${dir}` };
|
|
184
|
+
}
|
|
185
|
+
if (e.isSymbolicLink()) {
|
|
186
|
+
const target = path.resolve(cur, fs.readlinkSync(abs));
|
|
187
|
+
if (!contains(dir, target)) {
|
|
188
|
+
return { code: 'symlink-escape', name, detail: `${abs} -> ${target}` };
|
|
189
|
+
}
|
|
190
|
+
continue;
|
|
191
|
+
}
|
|
192
|
+
if (e.isDirectory()) stack.push(abs);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
return null;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
/** Copy a tree, refusing a symlink that leaves `boundary`. */
|
|
199
|
+
function copyTree(src: string, dest: string, boundary: string): void {
|
|
200
|
+
fs.mkdirSync(dest, { recursive: true });
|
|
201
|
+
for (const e of fs.readdirSync(src, { withFileTypes: true })) {
|
|
202
|
+
const from = path.join(src, e.name);
|
|
203
|
+
const to = path.join(dest, e.name);
|
|
204
|
+
if (e.isSymbolicLink()) {
|
|
205
|
+
const target = path.resolve(src, fs.readlinkSync(from));
|
|
206
|
+
if (!contains(boundary, target)) throw new Error(`symlink escapes payload: ${from}`);
|
|
207
|
+
fs.copyFileSync(target, to);
|
|
208
|
+
} else if (e.isDirectory()) {
|
|
209
|
+
copyTree(from, to, boundary);
|
|
210
|
+
} else if (e.isFile()) {
|
|
211
|
+
fs.copyFileSync(from, to);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
export interface MaterialiseOptions {
|
|
217
|
+
host: string;
|
|
218
|
+
/** The host's user-scope skills root, e.g. `~/.claude/skills`. */
|
|
219
|
+
hostSkillsRoot: string;
|
|
220
|
+
/** The host's user-scope anchor, e.g. `~/.claude`. The root must sit inside it. */
|
|
221
|
+
hostAnchor: string;
|
|
222
|
+
payloadDir: string;
|
|
223
|
+
storeDir: string;
|
|
224
|
+
lockFile: string;
|
|
225
|
+
packageRoot: string;
|
|
226
|
+
now?: Date;
|
|
227
|
+
/** Skip the probe-row gate. Only a test that is testing something else does this. */
|
|
228
|
+
skipGate?: boolean;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
export interface MaterialiseResult {
|
|
232
|
+
placed: boolean;
|
|
233
|
+
refusal: Refusal | null;
|
|
234
|
+
/** The store path the host entry points at, when placed. */
|
|
235
|
+
target: string | null;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
/**
|
|
239
|
+
* Bring one skill into the host's skills root, or refuse and say why.
|
|
240
|
+
*
|
|
241
|
+
* Idempotent: a second call for an entry already in the lock, whose payload
|
|
242
|
+
* hash still matches and whose symlink is still in place, changes nothing.
|
|
243
|
+
*/
|
|
244
|
+
export function materialise(name: string, opts: MaterialiseOptions): MaterialiseResult {
|
|
245
|
+
const refuse = (code: RefusalCode, detail: string): MaterialiseResult => ({
|
|
246
|
+
placed: false,
|
|
247
|
+
refusal: { code, name, detail },
|
|
248
|
+
target: null,
|
|
249
|
+
});
|
|
250
|
+
|
|
251
|
+
if (opts.skipGate !== true) {
|
|
252
|
+
const gate = materialisationEnabled(opts.host, opts.packageRoot, opts.now);
|
|
253
|
+
if (!gate.enabled) return refuse('host-not-enabled', gate.reasons.join('; '));
|
|
254
|
+
}
|
|
255
|
+
if (PLACEMENT[opts.host] !== 'symlink') {
|
|
256
|
+
return refuse('host-not-enabled', `no observed placement mechanism for ${opts.host}`);
|
|
257
|
+
}
|
|
258
|
+
// K8 / ADR-020: never into a project tree. The skills root must sit inside
|
|
259
|
+
// the host's own user-scope anchor, which is the only place this package
|
|
260
|
+
// deploys global content.
|
|
261
|
+
if (!contains(opts.hostAnchor, opts.hostSkillsRoot)) {
|
|
262
|
+
return refuse('project-tree', `${opts.hostSkillsRoot} is not inside ${opts.hostAnchor}`);
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
const bad = inspectPayload(opts.payloadDir, name);
|
|
266
|
+
if (bad !== null) return { placed: false, refusal: bad, target: null };
|
|
267
|
+
|
|
268
|
+
const lock = loadLock(opts.lockFile);
|
|
269
|
+
const recorded = lock.entries.find((e) => e.name === name && e.root === opts.hostSkillsRoot);
|
|
270
|
+
const dest = path.join(opts.hostSkillsRoot, name);
|
|
271
|
+
const store = path.join(opts.storeDir, opts.host, name);
|
|
272
|
+
|
|
273
|
+
// `would-shadow` covers the host built-ins by name AND anything already on
|
|
274
|
+
// disk under that name that this lock does not claim — a user's own skill
|
|
275
|
+
// and a bundled one are indistinguishable from here, and neither is ours.
|
|
276
|
+
if (is_claude_builtin_name(name)) {
|
|
277
|
+
return refuse('would-shadow', `${name} is a host built-in`);
|
|
278
|
+
}
|
|
279
|
+
if (recorded === undefined && fs.existsSync(dest)) {
|
|
280
|
+
return refuse('would-shadow', `${dest} already exists and the lock does not claim it`);
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
const staging = `${store}${STAGING_SUFFIX}`;
|
|
284
|
+
if (fs.existsSync(staging)) {
|
|
285
|
+
// A staging directory that outlived its run is the interrupted-write
|
|
286
|
+
// shape. Report it rather than silently reusing or deleting it: the
|
|
287
|
+
// caller decides, and a silent delete is the unmanaged-directory
|
|
288
|
+
// removal K4 names.
|
|
289
|
+
return refuse('partial-write', `staging directory survived a previous run: ${staging}`);
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
const payloadHash = hashFolder(path.join(opts.payloadDir, name));
|
|
293
|
+
if (recorded !== undefined && recorded.sha256 !== payloadHash) {
|
|
294
|
+
return refuse(
|
|
295
|
+
'hash-mismatch',
|
|
296
|
+
`payload hash ${payloadHash} does not match the locked ${recorded.sha256}`,
|
|
297
|
+
);
|
|
298
|
+
}
|
|
299
|
+
if (recorded !== undefined && fs.existsSync(store) && hashFolder(store) !== payloadHash) {
|
|
300
|
+
return refuse('hash-mismatch', `materialised copy at ${store} no longer matches the payload`);
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
try {
|
|
304
|
+
if (!fs.existsSync(store)) {
|
|
305
|
+
fs.mkdirSync(path.dirname(store), { recursive: true });
|
|
306
|
+
copyTree(path.join(opts.payloadDir, name), staging, path.join(opts.payloadDir, name));
|
|
307
|
+
if (hashFolder(staging) !== payloadHash) {
|
|
308
|
+
fs.rmSync(staging, { recursive: true, force: true });
|
|
309
|
+
return refuse('hash-mismatch', 'the staged copy does not match the payload it was copied from');
|
|
310
|
+
}
|
|
311
|
+
fs.renameSync(staging, store);
|
|
312
|
+
}
|
|
313
|
+
fs.mkdirSync(opts.hostSkillsRoot, { recursive: true });
|
|
314
|
+
if (!fs.existsSync(dest)) fs.symlinkSync(store, dest);
|
|
315
|
+
} catch (e) {
|
|
316
|
+
fs.rmSync(staging, { recursive: true, force: true });
|
|
317
|
+
return refuse('partial-write', String(e));
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
if (recorded === undefined) {
|
|
321
|
+
lock.entries.push({ host: opts.host, name, root: opts.hostSkillsRoot, sha256: payloadHash });
|
|
322
|
+
saveLock(opts.lockFile, lock);
|
|
323
|
+
}
|
|
324
|
+
return { placed: true, refusal: null, target: store };
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
/**
|
|
328
|
+
* Materialise under a lease — the 4.4 lifetime, applied at the one moment the
|
|
329
|
+
* package is already doing this work.
|
|
330
|
+
*
|
|
331
|
+
* WHERE THE COLLECT RUNS, AND WHY NOT WHERE 4.4 SAID. The step names the
|
|
332
|
+
* `session_start` read, chosen against a daemon (K9) and against `stop` (K3) as
|
|
333
|
+
* "the cheapest existing periodic moment". Measured on 2026-10-20 it is not
|
|
334
|
+
* cheap here: `session_start` for this package runs inside the hook dispatcher
|
|
335
|
+
* bundle, which had 454 bytes of headroom, and wiring the collector in measured
|
|
336
|
+
* 5,595 bytes over the ceiling — a standing cost on every hook event on every
|
|
337
|
+
* host, for a collect that finds an empty lock on every install today.
|
|
338
|
+
*
|
|
339
|
+
* So the collect runs at the START OF EVERY MATERIALISATION REQUEST instead,
|
|
340
|
+
* plus on uninstall. The mechanism is untouched: the lease, its TTL, the keying
|
|
341
|
+
* by host config root and the never-remove-under-a-live-lease rule are exactly
|
|
342
|
+
* as 4.4 specifies. Only the slot moved, and it moved to another existing
|
|
343
|
+
* moment — still no daemon, still nothing on `stop`.
|
|
344
|
+
*
|
|
345
|
+
* WHAT THIS ACCEPTS. An entry whose last holder died lingers until the next
|
|
346
|
+
* materialisation on that machine, rather than until the next session start. A
|
|
347
|
+
* lingering entry is an installed skill: the host lists it and it works. The
|
|
348
|
+
* harm 4.4 exists to prevent is removal UNDER a live lease, and that is
|
|
349
|
+
* enforced by the lease check wherever the check runs — a LATE collect cannot
|
|
350
|
+
* cause it, only an eager one could.
|
|
351
|
+
*/
|
|
352
|
+
export function materialiseUnderLease(
|
|
353
|
+
name: string,
|
|
354
|
+
opts: MaterialiseOptions & {
|
|
355
|
+
session: { session_id: string; platform: string; worktree: string };
|
|
356
|
+
leaseDirectory: string;
|
|
357
|
+
now?: Date;
|
|
358
|
+
},
|
|
359
|
+
): MaterialiseResult & { collected: string[] } {
|
|
360
|
+
const now = opts.now ?? new Date();
|
|
361
|
+
const known = materialisedNames(opts.lockFile, opts.hostSkillsRoot);
|
|
362
|
+
const { releasable } = collectLeases(opts.leaseDirectory, known, now);
|
|
363
|
+
const collected = releasable.length
|
|
364
|
+
? release(opts.lockFile, opts.hostSkillsRoot, releasable, opts.storeDir).removed
|
|
365
|
+
: [];
|
|
366
|
+
|
|
367
|
+
const res = materialise(name, opts);
|
|
368
|
+
if (!res.placed) return { ...res, collected };
|
|
369
|
+
|
|
370
|
+
const held = new Set(
|
|
371
|
+
(readLeaseNames(opts.leaseDirectory, opts.session.session_id) ?? []).filter(
|
|
372
|
+
(n) => !collected.includes(n),
|
|
373
|
+
),
|
|
374
|
+
);
|
|
375
|
+
held.add(name);
|
|
376
|
+
holdLease(opts.leaseDirectory, {
|
|
377
|
+
session_id: opts.session.session_id,
|
|
378
|
+
platform: opts.session.platform,
|
|
379
|
+
worktree: opts.session.worktree,
|
|
380
|
+
branch: null,
|
|
381
|
+
roadmap_slug: null,
|
|
382
|
+
started_at: now.toISOString().replace(/\.\d{3}Z$/, 'Z'),
|
|
383
|
+
last_seen: now.toISOString().replace(/\.\d{3}Z$/, 'Z'),
|
|
384
|
+
host_root: opts.hostSkillsRoot,
|
|
385
|
+
names: [...held],
|
|
386
|
+
});
|
|
387
|
+
return { ...res, collected };
|
|
388
|
+
}
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Whether a host may have a skill materialised into it — the Phase 4 gate of
|
|
3
|
+
* `road-to-skills-that-arrive-when-called`, as code rather than as prose.
|
|
4
|
+
*
|
|
5
|
+
* WHY THIS IS CODE. The roadmap states the gate as a sentence: Phase 4 is
|
|
6
|
+
* "gated on 0.2 (a)–(b) and 0.3 being `observed-true` for the host in question".
|
|
7
|
+
* A sentence is applied by whoever reads it, and the probe rows it points at are
|
|
8
|
+
* a JSON file with an expiry — so the gate and the evidence can drift apart with
|
|
9
|
+
* nobody noticing. Reading the rows at the decision point makes the gate fail
|
|
10
|
+
* the moment the evidence stops supporting it, including when a row expires.
|
|
11
|
+
*
|
|
12
|
+
* WHAT THE GATE ACTUALLY ASKS. Not "has every probe been run" — two cells stay
|
|
13
|
+
* `unobserved` because the host's own permission classifier refused the set-up
|
|
14
|
+
* twice, and a third lane did not re-attempt it. It asks the narrower question
|
|
15
|
+
* materialisation depends on: **can this host pick up a skill that appears
|
|
16
|
+
* after its session started, and does a removal not break a session already
|
|
17
|
+
* using one?** For the first host both are `observed-true` (by symlink, racing
|
|
18
|
+
* the watcher — hence the single retry callers owe). For the second host the
|
|
19
|
+
* pickup cell is `unobserved` after four runs, three of them stopped by a
|
|
20
|
+
* subscription rate limit, so materialisation is OFF there and 4.1's
|
|
21
|
+
* install-time resident set is what that host gets instead.
|
|
22
|
+
*
|
|
23
|
+
* `unobserved` and `observed-false` both deny. They are not the same answer —
|
|
24
|
+
* one is a wait and one is a reading — but neither is permission, and a gate
|
|
25
|
+
* that treated silence as a yes would be the failure the probe rows exist to
|
|
26
|
+
* prevent.
|
|
27
|
+
*/
|
|
28
|
+
|
|
29
|
+
import * as fs from 'node:fs';
|
|
30
|
+
import * as path from 'node:path';
|
|
31
|
+
|
|
32
|
+
/** One probe row, as `skill-lifecycle-probes*.json` carries it. */
|
|
33
|
+
export interface ProbeRow {
|
|
34
|
+
host: string;
|
|
35
|
+
state: string;
|
|
36
|
+
host_version: string | null;
|
|
37
|
+
transcript: string | null;
|
|
38
|
+
date: string | null;
|
|
39
|
+
expiry?: string;
|
|
40
|
+
reason: string;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export type ProbeFile = Record<string, ProbeRow | string>;
|
|
44
|
+
|
|
45
|
+
export interface GateVerdict {
|
|
46
|
+
enabled: boolean;
|
|
47
|
+
/** Every cell the gate read, with the state it found. */
|
|
48
|
+
cells: Array<{ id: string; state: string; expired: boolean }>;
|
|
49
|
+
/** Empty when `enabled`. One sentence per cell that denied. */
|
|
50
|
+
reasons: string[];
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* The cells each host's materialisation depends on, by probe-file key.
|
|
55
|
+
*
|
|
56
|
+
* (a) is same-turn pickup and (b) is what a removal does to a live session.
|
|
57
|
+
* `d-context-large` is NOT here: it answers Phase 3's question, not this one.
|
|
58
|
+
*/
|
|
59
|
+
export const REQUIRED_CELLS: Readonly<Record<string, readonly string[]>> = {
|
|
60
|
+
'claude-code': ['a-same-turn-pickup-symlink', 'b-removed-skill-second-session'],
|
|
61
|
+
codex: ['live-pickup-agents-skills'],
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
/** Probe file per host, relative to the package root. */
|
|
65
|
+
export const PROBE_FILES: Readonly<Record<string, string>> = {
|
|
66
|
+
'claude-code': path.join('src', 'config', 'skill-lifecycle-probes.json'),
|
|
67
|
+
codex: path.join('src', 'config', 'skill-lifecycle-probes-codex.json'),
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
function isRow(v: ProbeRow | string | undefined): v is ProbeRow {
|
|
71
|
+
return typeof v === 'object' && v !== null && typeof (v as ProbeRow).state === 'string';
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Decide from already-loaded rows. Pure — no I/O, no clock beyond `now`.
|
|
76
|
+
*
|
|
77
|
+
* A host with no entry in {@link REQUIRED_CELLS} is denied: an unlisted host is
|
|
78
|
+
* one nobody has decided about, and materialisation is not the safe default.
|
|
79
|
+
*/
|
|
80
|
+
export function materialisationEnabledFrom(
|
|
81
|
+
host: string,
|
|
82
|
+
rows: ProbeFile,
|
|
83
|
+
now: Date = new Date(),
|
|
84
|
+
): GateVerdict {
|
|
85
|
+
const required = REQUIRED_CELLS[host];
|
|
86
|
+
if (required === undefined) {
|
|
87
|
+
return { enabled: false, cells: [], reasons: [`host ${host} has no recorded materialisation cells`] };
|
|
88
|
+
}
|
|
89
|
+
const cells: GateVerdict['cells'] = [];
|
|
90
|
+
const reasons: string[] = [];
|
|
91
|
+
for (const id of required) {
|
|
92
|
+
const row = rows[id];
|
|
93
|
+
if (!isRow(row)) {
|
|
94
|
+
cells.push({ id, state: 'missing', expired: false });
|
|
95
|
+
reasons.push(`${id}: no row`);
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
const expired = typeof row.expiry === 'string' && Date.parse(row.expiry) < now.getTime();
|
|
99
|
+
cells.push({ id, state: row.state, expired });
|
|
100
|
+
if (row.state !== 'observed-true') {
|
|
101
|
+
reasons.push(`${id}: ${row.state}`);
|
|
102
|
+
} else if (expired) {
|
|
103
|
+
reasons.push(`${id}: observed-true but the row expired on ${row.expiry}`);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return { enabled: reasons.length === 0, cells, reasons };
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/** Read the host's probe file and decide. A missing or unreadable file denies. */
|
|
110
|
+
export function materialisationEnabled(
|
|
111
|
+
host: string,
|
|
112
|
+
packageRoot: string,
|
|
113
|
+
now: Date = new Date(),
|
|
114
|
+
): GateVerdict {
|
|
115
|
+
const rel = PROBE_FILES[host];
|
|
116
|
+
if (rel === undefined) {
|
|
117
|
+
return { enabled: false, cells: [], reasons: [`host ${host} has no probe file`] };
|
|
118
|
+
}
|
|
119
|
+
let rows: ProbeFile;
|
|
120
|
+
try {
|
|
121
|
+
rows = JSON.parse(fs.readFileSync(path.join(packageRoot, rel), 'utf-8')) as ProbeFile;
|
|
122
|
+
} catch (e) {
|
|
123
|
+
return { enabled: false, cells: [], reasons: [`probe file unreadable: ${String(e)}`] };
|
|
124
|
+
}
|
|
125
|
+
return materialisationEnabledFrom(host, rows, now);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* The host's observed pickup mechanism — what a materialiser may use to place
|
|
130
|
+
* an entry, and the only one 0.2 observed.
|
|
131
|
+
*
|
|
132
|
+
* `symlink` for the first host. A copy is `unobserved` there, so no caller may
|
|
133
|
+
* assume it, and the materialiser never uses one.
|
|
134
|
+
*/
|
|
135
|
+
export const PLACEMENT: Readonly<Record<string, 'symlink'>> = { 'claude-code': 'symlink' };
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* Whether a caller must retry once on `Unknown skill` after placing an entry.
|
|
139
|
+
*
|
|
140
|
+
* 0.2 (a): one of two sessions missed the first call and launched on one retry —
|
|
141
|
+
* the host's directory watcher races the write. Risk-register row 1.
|
|
142
|
+
*/
|
|
143
|
+
export const RETRY_ONCE_AFTER_PLACEMENT: ReadonlySet<string> = new Set(['claude-code']);
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* The completeness reading the package promises — the blocker
|
|
147
|
+
* `which-completeness-skills-owe`, resolved to (b) by ADR-289.
|
|
148
|
+
*
|
|
149
|
+
* Kept as a type rather than hard-coded to `reach` so {@link firstHostMaterialisation}
|
|
150
|
+
* can be exercised for all three, which is what 4.6's verify asks for: a
|
|
151
|
+
* decision test for EACH answer, not for the one that happened to win.
|
|
152
|
+
*/
|
|
153
|
+
export type CompletenessAnswer =
|
|
154
|
+
/** (a) every skill installed on every host with native skills. */
|
|
155
|
+
| 'presence'
|
|
156
|
+
/** (b) every skill reachable in one deterministic step; presence per host. */
|
|
157
|
+
| 'reach'
|
|
158
|
+
/** (c) today's pack-scoped install, recorded as the promise. */
|
|
159
|
+
| 'pack-scoped';
|
|
160
|
+
|
|
161
|
+
/** What Phase 5 read about materialisation's effect, if it has run. */
|
|
162
|
+
export type Phase5Reading = 'no-harm' | 'harm' | 'not-read';
|
|
163
|
+
|
|
164
|
+
export interface FirstHostDecision {
|
|
165
|
+
materialises: boolean;
|
|
166
|
+
reason: string;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* Step 4.6 — whether the FIRST host gets materialisation, or keeps the full
|
|
171
|
+
* install.
|
|
172
|
+
*
|
|
173
|
+
* Two conditions, both required: the completeness answer must make presence
|
|
174
|
+
* optional, and Phase 5 must have read no harm. Under (a) presence is the
|
|
175
|
+
* promise, so there is nothing to materialise on demand — every skill is
|
|
176
|
+
* already there. Under (c) the pack-scoped install IS the recorded promise, so
|
|
177
|
+
* widening it on demand would quietly exceed what was promised rather than
|
|
178
|
+
* fulfil it. Only (b) makes presence a per-host decision, which is what
|
|
179
|
+
* materialisation needs to be legal at all.
|
|
180
|
+
*
|
|
181
|
+
* `not-read` is a wait and `harm` is a reading, and like the probe states
|
|
182
|
+
* above neither is permission.
|
|
183
|
+
*/
|
|
184
|
+
export function firstHostMaterialisation(
|
|
185
|
+
answer: CompletenessAnswer,
|
|
186
|
+
phase5: Phase5Reading,
|
|
187
|
+
): FirstHostDecision {
|
|
188
|
+
if (answer === 'presence') {
|
|
189
|
+
return { materialises: false, reason: '(a) presence: every skill is installed, so nothing is materialised' };
|
|
190
|
+
}
|
|
191
|
+
if (answer === 'pack-scoped') {
|
|
192
|
+
return { materialises: false, reason: '(c) pack-scoped: the install as it stands is the promise' };
|
|
193
|
+
}
|
|
194
|
+
if (phase5 !== 'no-harm') {
|
|
195
|
+
return {
|
|
196
|
+
materialises: false,
|
|
197
|
+
reason:
|
|
198
|
+
phase5 === 'harm'
|
|
199
|
+
? '(b) reach: presence is optional, but Phase 5 read harm'
|
|
200
|
+
: '(b) reach: presence is optional, and Phase 5 has not read yet',
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
return { materialises: true, reason: '(b) reach, and Phase 5 read no harm' };
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
/**
|
|
207
|
+
* The answer on record: ADR-289 § Decision 2, AI council 2026-10-18 under the
|
|
208
|
+
* owner's delegation of that day.
|
|
209
|
+
*/
|
|
210
|
+
export const RECORDED_COMPLETENESS_ANSWER: CompletenessAnswer = 'reach';
|