@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
|
@@ -23,6 +23,7 @@
|
|
|
23
23
|
* grant — the host's own strings record `permissionDecision=allow ignored: a
|
|
24
24
|
* confined session takes grants only from its command line`.
|
|
25
25
|
*/
|
|
26
|
+
import * as fs from "node:fs";
|
|
26
27
|
import * as path from "node:path";
|
|
27
28
|
|
|
28
29
|
/** A JSON-ish tool input as it arrives in the dispatcher envelope. */
|
|
@@ -145,7 +146,46 @@ export function isInsideWorkingTree(candidate: string, root: string): boolean {
|
|
|
145
146
|
const abs = path.resolve(root, candidate);
|
|
146
147
|
const rel = path.relative(path.resolve(root), abs);
|
|
147
148
|
if (rel === "") return true;
|
|
148
|
-
|
|
149
|
+
// `..` as a whole first segment escapes; `...` or `..cache` is a name.
|
|
150
|
+
const escapes = rel === ".." || rel.startsWith(`..${path.sep}`);
|
|
151
|
+
return !escapes && !path.isAbsolute(rel);
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
/** `p` with every symlink in its longest existing prefix resolved. */
|
|
155
|
+
function _real(p: string): string {
|
|
156
|
+
try {
|
|
157
|
+
return fs.realpathSync(p);
|
|
158
|
+
} catch (e) {
|
|
159
|
+
const code = (e as NodeJS.ErrnoException).code;
|
|
160
|
+
if (code !== "ENOENT" && code !== "ENOTDIR") return "";
|
|
161
|
+
// A dangling link is not a missing suffix: its target is unknowable.
|
|
162
|
+
try {
|
|
163
|
+
if (code === "ENOENT" && fs.lstatSync(p, { throwIfNoEntry: false })?.isSymbolicLink()) return "";
|
|
164
|
+
} catch {
|
|
165
|
+
return "";
|
|
166
|
+
}
|
|
167
|
+
const parent = path.dirname(p);
|
|
168
|
+
if (parent === p) return p;
|
|
169
|
+
const up = _real(parent);
|
|
170
|
+
return up && path.join(up, path.basename(p));
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* {@link isInsideWorkingTree}, and still inside once symlinks are followed.
|
|
176
|
+
*
|
|
177
|
+
* The one place the classifier reads the filesystem, and it can only withhold:
|
|
178
|
+
* an in-tree symlink to `~/.ssh` is lexically inside and really outside. A
|
|
179
|
+
* missing suffix keeps its lexical answer; a dangling link and any other
|
|
180
|
+
* resolution failure (`EACCES`, `ELOOP`) resolve to `""`, which is never inside. The check runs
|
|
181
|
+
* before the command does, so a link swapped in between is not seen — the
|
|
182
|
+
* OS sandbox is the boundary, this is a guardrail.
|
|
183
|
+
*/
|
|
184
|
+
function _reallyInside(candidate: string, root: string): boolean {
|
|
185
|
+
if (!isInsideWorkingTree(candidate, root)) return false;
|
|
186
|
+
const real = _real(path.resolve(root, candidate));
|
|
187
|
+
const realRoot = _real(path.resolve(root));
|
|
188
|
+
return real !== "" && realRoot !== "" && isInsideWorkingTree(real, realRoot);
|
|
149
189
|
}
|
|
150
190
|
|
|
151
191
|
/** Split a command on whitespace; the caller has already refused metacharacters. */
|
|
@@ -182,7 +222,7 @@ const GIT_VALUE_FLAGS: ReadonlySet<string> = new Set([
|
|
|
182
222
|
]);
|
|
183
223
|
|
|
184
224
|
/**
|
|
185
|
-
* The `git` subcommand, with global options skipped.
|
|
225
|
+
* The `git` subcommand and its argv index, with global options skipped.
|
|
186
226
|
*
|
|
187
227
|
* Returns `""` when a global option's VALUE escapes the working tree — an
|
|
188
228
|
* absolute path or a `..` traversal. The check is textual rather than resolved
|
|
@@ -190,21 +230,127 @@ const GIT_VALUE_FLAGS: ReadonlySet<string> = new Set([
|
|
|
190
230
|
* can decide is exactly the property that matters, and a relative path with no
|
|
191
231
|
* `..` cannot escape.
|
|
192
232
|
*/
|
|
193
|
-
function
|
|
233
|
+
function _gitSubcommandAt(argv: readonly string[]): { sub: string; index: number } {
|
|
194
234
|
for (let i = 1; i < argv.length; i++) {
|
|
195
235
|
const token = argv[i] as string;
|
|
196
|
-
if (!_isFlag(token)) return token;
|
|
236
|
+
if (!_isFlag(token)) return { sub: token, index: i };
|
|
197
237
|
const [flag, inlineValue] = token.includes("=")
|
|
198
238
|
? [token.slice(0, token.indexOf("=")), token.slice(token.indexOf("=") + 1)]
|
|
199
239
|
: [token, null];
|
|
200
240
|
const value = inlineValue ?? (GIT_VALUE_FLAGS.has(flag) ? argv[++i] : undefined);
|
|
201
241
|
if (value !== undefined && (path.isAbsolute(value) || value.split("/").includes(".."))) {
|
|
202
|
-
return "";
|
|
242
|
+
return { sub: "", index: -1 };
|
|
203
243
|
}
|
|
204
244
|
}
|
|
205
|
-
return "";
|
|
245
|
+
return { sub: "", index: -1 };
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
/**
|
|
249
|
+
* `git branch` is category A only in its observational forms — an allowlist,
|
|
250
|
+
* like the rest of this file. Every other form writes a ref: `-d`/`-D` and
|
|
251
|
+
* `-f`/`-m`/`-M`/`-C` can lose one, and a bare `git branch <name>`, `-c`,
|
|
252
|
+
* `-u` or `--edit-description` create or rewrite one. A positional operand is
|
|
253
|
+
* admitted only under `-l`/`--list`, where it is a pattern, or as the value of
|
|
254
|
+
* a filter flag.
|
|
255
|
+
*/
|
|
256
|
+
const GIT_BRANCH_OBSERVES =
|
|
257
|
+
/^(-[arlvi]+|--(all|remotes|list|verbose|show-current|(no-)?color)(=.*)?)$/;
|
|
258
|
+
const GIT_BRANCH_FILTER = /^--((no-)?(contains|merged)|points-at|sort|format|abbrev)(=|$)/;
|
|
259
|
+
|
|
260
|
+
function _gitBranchOnlyObserves(argv: readonly string[], index: number): boolean {
|
|
261
|
+
const rest = argv.slice(index + 1);
|
|
262
|
+
const listing = rest.some((t) => /^(-[arvi]*l[arlvi]*|--list)$/.test(t));
|
|
263
|
+
for (let i = 0; i < rest.length; i++) {
|
|
264
|
+
const token = rest[i] as string;
|
|
265
|
+
if (!_isFlag(token)) {
|
|
266
|
+
if (!listing) return false;
|
|
267
|
+
} else if (GIT_BRANCH_FILTER.test(token)) {
|
|
268
|
+
if (!token.includes("=") && !_isFlag(rest[i + 1] ?? "-")) i++;
|
|
269
|
+
} else if (!GIT_BRANCH_OBSERVES.test(token)) {
|
|
270
|
+
return false;
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
return true;
|
|
206
274
|
}
|
|
207
275
|
|
|
276
|
+
/**
|
|
277
|
+
* Heads that never open their arguments, so a path-shaped argument is a string
|
|
278
|
+
* and confining it would only put a prompt on `echo /tmp`. Not `date`: its
|
|
279
|
+
* `-f`/`--file` and `-r`/`--reference` open a path.
|
|
280
|
+
*/
|
|
281
|
+
const NON_OPENING_HEADS = /^(pwd|echo|basename|dirname|which)$/;
|
|
282
|
+
|
|
283
|
+
/**
|
|
284
|
+
* Output-writing flags (0.3). Their target is a path like any other, and the
|
|
285
|
+
* walk below confines every spelling: a separate value token (`--output x`,
|
|
286
|
+
* `-fprint x`, `--outDir x`) is a positional, `--output=x` is an inline value,
|
|
287
|
+
* a glued short value (`sort -o/path`) is the tail of a single-dash token, and
|
|
288
|
+
* the value-less writers (`--write`/`-w`, `--fix`) write their positionals. So
|
|
289
|
+
* no per-head table is needed; one was measured inert and removed.
|
|
290
|
+
*
|
|
291
|
+
* For `grep`/`rg` the first positional, or an `-e`/`--regexp` value, is a
|
|
292
|
+
* pattern and therefore data; an `-f`/`--file` value is a path.
|
|
293
|
+
*/
|
|
294
|
+
const PATTERN_GIVEN = /^(-e|--regexp|-f|--file)(=|$)/;
|
|
295
|
+
|
|
296
|
+
/**
|
|
297
|
+
* Every argument of a Bash command that may name a filesystem location.
|
|
298
|
+
*
|
|
299
|
+
* Positionals, flag inline values and the tail of a single-dash token
|
|
300
|
+
* (`-o/path`, `-f/path`) are all candidates: one that stays inside is harmless
|
|
301
|
+
* to check, and missing one is not. After `--` every token is a positional.
|
|
302
|
+
* Shell quote removal is applied; every other expansion is refused upstream by
|
|
303
|
+
* the metacharacter rule.
|
|
304
|
+
*/
|
|
305
|
+
function _pathArguments(argv: readonly string[], head: string): string[] {
|
|
306
|
+
const out: string[] = [];
|
|
307
|
+
const grep = head === "grep" || head === "rg";
|
|
308
|
+
let patternPending = grep && !argv.some((t) => PATTERN_GIVEN.test(t));
|
|
309
|
+
let endOfOptions = false;
|
|
310
|
+
for (let i = 1; i < argv.length; i++) {
|
|
311
|
+
const raw = argv[i] as string;
|
|
312
|
+
// An unquoted glob is expanded after this check, so what it selects
|
|
313
|
+
// (`.*` to `..`, `le*` to an outward symlink) is never seen. "*" is a
|
|
314
|
+
// candidate nothing confines.
|
|
315
|
+
if (/[*?[]/.test(raw.replace(/'[^']*'|"[^"]*"/g, ""))) out.push("*");
|
|
316
|
+
const token = raw.replace(/["']/g, "");
|
|
317
|
+
if (!endOfOptions && token === "--") {
|
|
318
|
+
endOfOptions = true;
|
|
319
|
+
} else if (endOfOptions || !_isFlag(token)) {
|
|
320
|
+
if (patternPending) patternPending = false;
|
|
321
|
+
else out.push(token);
|
|
322
|
+
} else if (grep && /^(-e|--regexp)$/.test(token)) {
|
|
323
|
+
i++;
|
|
324
|
+
} else if (grep && /^(-f|--file)$/.test(token)) {
|
|
325
|
+
out.push((argv[++i] ?? "").replace(/["']/g, ""));
|
|
326
|
+
} else {
|
|
327
|
+
// A dash-led token may itself be the value of the option before it
|
|
328
|
+
// (`sort -o --/../x`), so one that contains `/` is a path too.
|
|
329
|
+
if (token.includes("/")) out.push(token);
|
|
330
|
+
const eq = token.indexOf("=");
|
|
331
|
+
if (eq >= 0) out.push(token.slice(eq + 1));
|
|
332
|
+
else if (!token.startsWith("--") && token.length > 2) out.push(token.slice(2));
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
return out;
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
/** Stands in for the tree when the caller has none: absolute and `..` still escape it. */
|
|
339
|
+
const UNROOTED = path.resolve("/agent-config-unrooted");
|
|
340
|
+
|
|
341
|
+
function _confined(candidate: string, workingTree: string): boolean {
|
|
342
|
+
if (candidate.startsWith("~") || candidate === "*") return false;
|
|
343
|
+
return _reallyInside(candidate, workingTree.trim() ? workingTree : UNROOTED);
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
/** What the classifier decided, and whether a path confinement actually ran. */
|
|
347
|
+
export interface CategoryAVerdict {
|
|
348
|
+
categoryA: boolean;
|
|
349
|
+
confined: boolean;
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
const NOT_A: CategoryAVerdict = { categoryA: false, confined: false };
|
|
353
|
+
|
|
208
354
|
/** Non-flag token after the subcommand, or `""`. */
|
|
209
355
|
function _secondSubcommand(argv: readonly string[]): string {
|
|
210
356
|
const nonFlags = argv.slice(1).filter((t) => !_isFlag(t));
|
|
@@ -231,20 +377,14 @@ export function namesConsequenceOperation(command: string): boolean {
|
|
|
231
377
|
return false;
|
|
232
378
|
}
|
|
233
379
|
|
|
234
|
-
/**
|
|
235
|
-
|
|
236
|
-
if (typeof command !== "string" || !command.trim()) return false;
|
|
237
|
-
if (SHELL_METACHARACTERS.test(command)) return false;
|
|
238
|
-
if (namesConsequenceOperation(command)) return false;
|
|
239
|
-
|
|
240
|
-
const argv = _argv(command);
|
|
241
|
-
const head = (argv[0] ?? "").toLowerCase();
|
|
242
|
-
if (!head) return false;
|
|
243
|
-
|
|
380
|
+
/** Does the head and its subcommand name a read, build, test or lint? */
|
|
381
|
+
function _namesASafeOperation(argv: readonly string[], head: string): boolean {
|
|
244
382
|
if (SAFE_HEADS.has(head)) return true;
|
|
245
383
|
|
|
246
384
|
if (head === "git") {
|
|
247
|
-
|
|
385
|
+
const { sub, index } = _gitSubcommandAt(argv);
|
|
386
|
+
if (!GIT_READ_SUBCOMMANDS.has(sub)) return false;
|
|
387
|
+
return sub !== "branch" || _gitBranchOnlyObserves(argv, index);
|
|
248
388
|
}
|
|
249
389
|
|
|
250
390
|
const allowed = RUNNER_SUBCOMMANDS[head];
|
|
@@ -258,6 +398,36 @@ export function isCategoryABashCommand(command: string): boolean {
|
|
|
258
398
|
return true;
|
|
259
399
|
}
|
|
260
400
|
|
|
401
|
+
/**
|
|
402
|
+
* Classify a Bash command string.
|
|
403
|
+
*
|
|
404
|
+
* `workingTree` is the root every path argument must resolve inside. Without
|
|
405
|
+
* one, the command is judged against a stand-in root, so an absolute, `~` or
|
|
406
|
+
* `..`-escaping argument still disqualifies it.
|
|
407
|
+
*/
|
|
408
|
+
export function bashCategoryAVerdict(command: string, workingTree = ""): CategoryAVerdict {
|
|
409
|
+
if (typeof command !== "string" || !command.trim()) return NOT_A;
|
|
410
|
+
if (SHELL_METACHARACTERS.test(command)) return NOT_A;
|
|
411
|
+
if (namesConsequenceOperation(command)) return NOT_A;
|
|
412
|
+
|
|
413
|
+
const argv = _argv(command);
|
|
414
|
+
const head = (argv[0] ?? "").toLowerCase();
|
|
415
|
+
if (!head) return NOT_A;
|
|
416
|
+
if (!_namesASafeOperation(argv, head)) return NOT_A;
|
|
417
|
+
|
|
418
|
+
if (NON_OPENING_HEADS.test(head)) return { categoryA: true, confined: false };
|
|
419
|
+
const candidates = _pathArguments(argv, head);
|
|
420
|
+
for (const candidate of candidates) {
|
|
421
|
+
if (!_confined(candidate, workingTree)) return NOT_A;
|
|
422
|
+
}
|
|
423
|
+
return { categoryA: true, confined: candidates.length > 0 };
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
/** Is this Bash command string category A? */
|
|
427
|
+
export function isCategoryABashCommand(command: string, workingTree = ""): boolean {
|
|
428
|
+
return bashCategoryAVerdict(command, workingTree).categoryA;
|
|
429
|
+
}
|
|
430
|
+
|
|
261
431
|
/**
|
|
262
432
|
* Is this tool call category A?
|
|
263
433
|
*
|
|
@@ -265,27 +435,34 @@ export function isCategoryABashCommand(command: string): boolean {
|
|
|
265
435
|
* root means the dispatcher could not establish one, and an unestablished
|
|
266
436
|
* boundary is not a boundary — the call is not category A.
|
|
267
437
|
*/
|
|
268
|
-
export function
|
|
438
|
+
export function categoryAVerdict(
|
|
269
439
|
toolName: string,
|
|
270
440
|
toolInput: ToolInput,
|
|
271
441
|
workingTree: string,
|
|
272
|
-
):
|
|
273
|
-
if (!workingTree.trim()) return
|
|
274
|
-
if (typeof toolName !== "string" || !toolName) return
|
|
442
|
+
): CategoryAVerdict {
|
|
443
|
+
if (!workingTree.trim()) return NOT_A;
|
|
444
|
+
if (typeof toolName !== "string" || !toolName) return NOT_A;
|
|
275
445
|
|
|
276
446
|
if (READ_ONLY_TOOLS.has(toolName)) {
|
|
447
|
+
let checked = false;
|
|
277
448
|
for (const key of PATH_KEYS) {
|
|
278
449
|
const value = toolInput?.[key];
|
|
279
450
|
if (typeof value !== "string") continue;
|
|
280
|
-
if (!
|
|
451
|
+
if (!_reallyInside(value, workingTree)) return NOT_A;
|
|
452
|
+
checked = true;
|
|
281
453
|
}
|
|
282
|
-
return true;
|
|
454
|
+
return { categoryA: true, confined: checked };
|
|
283
455
|
}
|
|
284
456
|
|
|
285
457
|
if (toolName === "Bash") {
|
|
286
458
|
const command = toolInput?.["command"];
|
|
287
|
-
return typeof command === "string"
|
|
459
|
+
return typeof command === "string" ? bashCategoryAVerdict(command, workingTree) : NOT_A;
|
|
288
460
|
}
|
|
289
461
|
|
|
290
|
-
return
|
|
462
|
+
return NOT_A;
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
/** Is this tool call category A? */
|
|
466
|
+
export function isCategoryA(toolName: string, toolInput: ToolInput, workingTree: string): boolean {
|
|
467
|
+
return categoryAVerdict(toolName, toolInput, workingTree).categoryA;
|
|
291
468
|
}
|
|
@@ -95,12 +95,12 @@ export function _is_blocking(concern: JsonObject): boolean {
|
|
|
95
95
|
* it is honoured, however slow it was.
|
|
96
96
|
*
|
|
97
97
|
* THE ONE-RETRY ESCAPE, AND WHY THE STOP SLOT NEEDS IT.
|
|
98
|
-
* `turn-end-gate`
|
|
99
|
-
* and `tests/hooks/concern_severity.test.ts` records
|
|
100
|
-
* words: a turn-end gate that fails closed "does not
|
|
101
|
-
* session".
|
|
102
|
-
* DETERMINISTIC crash in
|
|
103
|
-
* escape the user can reach.
|
|
98
|
+
* `turn-end-gate` is `severity: blocking` on `stop` (`run-continuation` was too,
|
|
99
|
+
* until it was withdrawn), and `tests/hooks/concern_severity.test.ts` records
|
|
100
|
+
* the hazard in as many words: a turn-end gate that fails closed "does not
|
|
101
|
+
* degrade, it wedges the session". It carries no `skip_on_refusal_retry`, so
|
|
102
|
+
* without this clause a DETERMINISTIC crash in it would refuse every Stop,
|
|
103
|
+
* indefinitely, with no escape the user can reach.
|
|
104
104
|
*
|
|
105
105
|
* So the promotion is spent ONCE. On the retry the host itself marks
|
|
106
106
|
* (`stop_hook_active`, read by `_is_refusal_retry`) a crash falls back to
|
|
@@ -24,7 +24,6 @@
|
|
|
24
24
|
* fail-closed reduction unchanged)
|
|
25
25
|
*/
|
|
26
26
|
|
|
27
|
-
import { main as chatHistoryMain } from '../chat_history.js';
|
|
28
27
|
import { main as hotContextMain } from '../hot_context_hook.js';
|
|
29
28
|
import { main as handoffContextMain } from '../handoff_context_hook.js';
|
|
30
29
|
import { main as roadmapProgressMain } from '../roadmap_progress_hook.js';
|
|
@@ -55,6 +54,7 @@ import { main as blockKernelRuleWritesMain } from './block_kernel_rule_writes.js
|
|
|
55
54
|
import { main as blockPlumbingWritesMain } from './block_plumbing_writes.js';
|
|
56
55
|
import { main as blockConfigWeakeningMain } from './block_config_weakening.js';
|
|
57
56
|
import { main as blockSpeakingInboxDirMain } from './block_speaking_inbox_dir.js';
|
|
57
|
+
import { main as blockCredentialReadsMain } from './block_credential_reads.js';
|
|
58
58
|
import { main as oneQuestionPerAskMain } from './one_question_per_ask_hook.js';
|
|
59
59
|
import { main as rtkWrapMain } from './rtk_wrap_hook.js';
|
|
60
60
|
import { _main as designPassMain } from './design_pass_hook.js';
|
|
@@ -81,18 +81,19 @@ import { main as sessionEolMain } from './session_eol_hook.js';
|
|
|
81
81
|
import { main as subagentLedgerMain } from './subagent_ledger_hook.js';
|
|
82
82
|
import { main as toolResultBytesMain } from './tool_result_bytes_hook.js';
|
|
83
83
|
import { main as spawnGuardShadowMain } from './spawn_guard_shadow_hook.js';
|
|
84
|
+
import { main as hostRateMarkerMain } from './host_rate_marker_hook.js';
|
|
84
85
|
import { main as sourceFirstGateMain } from './source_first_gate_hook.js';
|
|
85
86
|
import { main as interruptionLedgerMain } from './interruption_ledger_hook.js';
|
|
86
|
-
import { main as runContinuationMain } from './run_continuation_hook.js';
|
|
87
87
|
import { main as journalRecordMain } from './journal_record_hook.js';
|
|
88
88
|
import { main as obligationSettleMain } from './obligation_settle_hook.js';
|
|
89
89
|
|
|
90
|
-
|
|
91
|
-
|
|
90
|
+
import { LAZY_CONCERNS, loadLazyConcern } from './lazy_concern.js';
|
|
91
|
+
import type { ConcernMain } from './concern_registry_types.js';
|
|
92
|
+
|
|
93
|
+
export type { ConcernMain };
|
|
92
94
|
|
|
93
95
|
/** Keyed by the manifest's `script:` value (repo-relative path). */
|
|
94
96
|
export const CONCERN_REGISTRY: Readonly<Record<string, ConcernMain>> = {
|
|
95
|
-
'src/scripts/chat_history.ts': chatHistoryMain as ConcernMain,
|
|
96
97
|
'src/scripts/hot_context_hook.ts': hotContextMain as ConcernMain,
|
|
97
98
|
'src/scripts/handoff_context_hook.ts': handoffContextMain as ConcernMain,
|
|
98
99
|
'src/scripts/roadmap_progress_hook.ts': roadmapProgressMain as ConcernMain,
|
|
@@ -123,6 +124,7 @@ export const CONCERN_REGISTRY: Readonly<Record<string, ConcernMain>> = {
|
|
|
123
124
|
'src/scripts/hooks/block_plumbing_writes.ts': blockPlumbingWritesMain as ConcernMain,
|
|
124
125
|
'src/scripts/hooks/block_config_weakening.ts': blockConfigWeakeningMain as ConcernMain,
|
|
125
126
|
'src/scripts/hooks/block_speaking_inbox_dir.ts': blockSpeakingInboxDirMain as ConcernMain,
|
|
127
|
+
'src/scripts/hooks/block_credential_reads.ts': blockCredentialReadsMain as ConcernMain,
|
|
126
128
|
'src/scripts/hooks/one_question_per_ask_hook.ts': oneQuestionPerAskMain as ConcernMain,
|
|
127
129
|
'src/scripts/hooks/rtk_wrap_hook.ts': rtkWrapMain as ConcernMain,
|
|
128
130
|
'src/scripts/hooks/design_pass_hook.ts': designPassMain as ConcernMain,
|
|
@@ -150,8 +152,31 @@ export const CONCERN_REGISTRY: Readonly<Record<string, ConcernMain>> = {
|
|
|
150
152
|
'src/scripts/hooks/subagent_ledger_hook.ts': subagentLedgerMain as ConcernMain,
|
|
151
153
|
'src/scripts/hooks/tool_result_bytes_hook.ts': toolResultBytesMain as ConcernMain,
|
|
152
154
|
'src/scripts/hooks/spawn_guard_shadow_hook.ts': spawnGuardShadowMain as ConcernMain,
|
|
155
|
+
'src/scripts/hooks/host_rate_marker_hook.ts': hostRateMarkerMain as ConcernMain,
|
|
153
156
|
'src/scripts/hooks/source_first_gate_hook.ts': sourceFirstGateMain as ConcernMain,
|
|
154
157
|
'src/scripts/hooks/interruption_ledger_hook.ts': interruptionLedgerMain as ConcernMain,
|
|
155
|
-
'src/scripts/hooks/run_continuation_hook.ts': runContinuationMain as ConcernMain,
|
|
156
158
|
'src/scripts/hooks/journal_record_hook.ts': journalRecordMain as ConcernMain,
|
|
157
159
|
};
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* Every concern the dispatcher can run in-process: inlined in the table above,
|
|
163
|
+
* or loadable from a conditional chunk. The parity test asserts against THIS,
|
|
164
|
+
* not against `CONCERN_REGISTRY` alone — a lazy concern is still in-process on
|
|
165
|
+
* the fast path, and a parity check that could not see one would push the next
|
|
166
|
+
* extraction back into the bundle.
|
|
167
|
+
*/
|
|
168
|
+
export function isInProcessConcern(script: string): boolean {
|
|
169
|
+
return CONCERN_REGISTRY[script] !== undefined || LAZY_CONCERNS[script] !== undefined;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* The concern's `main`, inlined or loaded from its chunk, or `null` when the
|
|
174
|
+
* dispatcher must fall back to the spawn path.
|
|
175
|
+
*
|
|
176
|
+
* The one resolver. The dispatcher and every test that drives a concern
|
|
177
|
+
* in-process go through it, so a concern moved into a chunk does not have to be
|
|
178
|
+
* found again at each call site.
|
|
179
|
+
*/
|
|
180
|
+
export function resolveConcernMain(script: string): ConcernMain | null {
|
|
181
|
+
return CONCERN_REGISTRY[script] ?? loadLazyConcern(script);
|
|
182
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The concern-invocation type, in a module that imports nothing.
|
|
3
|
+
*
|
|
4
|
+
* `hooks/lazy_concern.ts` needs the type and `concern_registry.ts` needs the
|
|
5
|
+
* loader, so the type cannot live in either without a cycle. It is five lines,
|
|
6
|
+
* so it gets its own file rather than a `import type` indirection nobody can
|
|
7
|
+
* follow.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
/** A concern `main` — argv-taking or not; both shapes exist. */
|
|
11
|
+
export type ConcernMain = (argv?: string[]) => number | undefined | void;
|
|
@@ -97,12 +97,15 @@ import { fileURLToPath, pathToFileURL } from "node:url";
|
|
|
97
97
|
import { readHookStdin } from "./hook_stdin.js";
|
|
98
98
|
import { load_agent_settings } from "../_lib/agent_settings.js";
|
|
99
99
|
import { probeHostCapabilities } from "../_lib/host_capability.js";
|
|
100
|
-
import type
|
|
100
|
+
import { inferSliceTier, type ActivationInputs, type Classification, type SliceType, type TaskSignals } from "../_lib/auto_dispatch.js";
|
|
101
|
+
import { TIER_TO_CLAUDE_MODEL } from "../_lib/model_tier.js";
|
|
101
102
|
import { classifyLadder, type LadderRung } from "../_lib/judgment_ladder.js";
|
|
102
103
|
import { resolveSessionRole } from "../_lib/session_role.js";
|
|
103
104
|
import { resolveSubagentRouting, type Tier } from "../_lib/subagent_routing.js";
|
|
104
105
|
import { isSyntheticPrompt } from "../_lib/prompt_shape.js";
|
|
106
|
+
import { handKindFromPrompt, type HandKind } from "../_lib/hand_kinds.js";
|
|
105
107
|
import { EXIT_ALLOW, EXIT_WARN } from './exit_codes.js';
|
|
108
|
+
import { councilConfigPath, freeRungFor } from "../ai_council/free_rung.js";
|
|
106
109
|
|
|
107
110
|
// Severity is taken from the EXIT CODE, not from the `decision` field in the
|
|
108
111
|
// stdout payload — mirrors `language_mirror_hook.ts`'s own note (found the
|
|
@@ -330,16 +333,18 @@ export function resolveActivation(
|
|
|
330
333
|
}
|
|
331
334
|
|
|
332
335
|
/**
|
|
333
|
-
* Tier recommendation for the
|
|
334
|
-
*
|
|
335
|
-
*
|
|
336
|
-
* time, so it recommends the cheapest starting point and lets the downshift
|
|
337
|
-
* setting (shipped default: on) decide whether that survives.
|
|
336
|
+
* Tier recommendation for the slices, from the cheapest-sufficient table
|
|
337
|
+
* (`inferSliceTier`) and never from a default: an unknown slice kind is
|
|
338
|
+
* `inherit`, so the nudge cannot name a tier the table did not produce.
|
|
338
339
|
*/
|
|
339
|
-
export function recommendSliceTier(
|
|
340
|
+
export function recommendSliceTier(
|
|
341
|
+
downshift: boolean,
|
|
342
|
+
separate_quota_pool: boolean,
|
|
343
|
+
sliceKind: SliceType = "unknown",
|
|
344
|
+
): Tier {
|
|
340
345
|
const decision = resolveSubagentRouting({
|
|
341
|
-
task_tier:
|
|
342
|
-
session_tier: "
|
|
346
|
+
task_tier: inferSliceTier({ slice_type: sliceKind }).tier,
|
|
347
|
+
session_tier: "inherit",
|
|
343
348
|
downshift,
|
|
344
349
|
quota_arbitrage: false,
|
|
345
350
|
model_map: {},
|
|
@@ -348,6 +353,28 @@ export function recommendSliceTier(downshift: boolean, separate_quota_pool: bool
|
|
|
348
353
|
return decision.tier;
|
|
349
354
|
}
|
|
350
355
|
|
|
356
|
+
const READ_ONLY_FANOUT_RE =
|
|
357
|
+
/\b(find|locate|search|grep|list|inventor(?:y|ise|ize)|enumerate|count|which files|where (?:is|are)|finde|suche|liste|z(?:ä|ae)hle|wo (?:ist|sind))\b/i;
|
|
358
|
+
const MUTATING_RE =
|
|
359
|
+
/\b(fix|implement|edit|write|refactor|change|add|create|remove|delete|update|rename|migrate|build|move|replace|mach|bau|implementier\w*|(?:ä|ae)nder\w*|erstell\w*|l(?:ö|oe)sch\w*|f(?:ü|ue)g\w*|schreib\w*)\b/i;
|
|
360
|
+
|
|
361
|
+
/**
|
|
362
|
+
* The slice kind a prompt names, deterministically: a read verb with no
|
|
363
|
+
* mutating verb is a read-only fan-out; everything else is `unknown`, which
|
|
364
|
+
* the table maps to `inherit`.
|
|
365
|
+
*/
|
|
366
|
+
export function sliceKindFromPrompt(prompt: string): SliceType {
|
|
367
|
+
return READ_ONLY_FANOUT_RE.test(prompt) && !MUTATING_RE.test(prompt) ? "read-only-fanout" : "unknown";
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
/**
|
|
371
|
+
* Median first-call written-or-uncached tokens of a subagent leg — a
|
|
372
|
+
* measurement, not a tuning knob. Re-take it in {@link LEG_COLD_START_SOURCE}
|
|
373
|
+
* and change it here; a test fails while the two disagree.
|
|
374
|
+
*/
|
|
375
|
+
export const LEG_COLD_START_UNCACHED_TOKENS = 182_257;
|
|
376
|
+
export const LEG_COLD_START_SOURCE = "agents/evidence/analysis/subagent-cold-start-2026-10-14.md";
|
|
377
|
+
|
|
351
378
|
/**
|
|
352
379
|
* `rung` names the resolved judgment-ladder rung (2.4): `null` renders as
|
|
353
380
|
* `rung-?` — this concern only ever calls it for a `subagent` verdict
|
|
@@ -359,9 +386,21 @@ export function buildNudgeLine(
|
|
|
359
386
|
classification: Classification,
|
|
360
387
|
sliceCount: number,
|
|
361
388
|
tier: Tier,
|
|
389
|
+
sliceKind?: SliceType,
|
|
390
|
+
handKind?: HandKind,
|
|
362
391
|
): string {
|
|
363
392
|
const unit = sliceCount === 1 ? "slice" : "slices";
|
|
364
393
|
const rungLabel = rung === null ? "rung-?" : `rung-${rung}`;
|
|
394
|
+
// A pointer only: nothing is sent, and the return is a proposal the head verifies.
|
|
395
|
+
if (rung === 0.5 && handKind !== undefined) {
|
|
396
|
+
return (
|
|
397
|
+
`<delegation-nudge>rung-0.5: free rung. This slice is a typed \`${handKind}\` task and an unpaid ` +
|
|
398
|
+
"route is admissible — you may send it as ONE call via " +
|
|
399
|
+
`\`./scripts-run src/scripts/ask_transport --kind ${handKind} --content-class public-artifact "<slice>"\` ` +
|
|
400
|
+
`(public-artifact text only; project content stays on a paid route). The return is a proposal: ` +
|
|
401
|
+
`verify it before acting on it. Nothing was sent for you — ${classification.reason}.</delegation-nudge>`
|
|
402
|
+
);
|
|
403
|
+
}
|
|
365
404
|
// Rung 0.5 (token-economy-dispatch 4.3): cite the sub-spawn ask path —
|
|
366
405
|
// never a spawn recommendation for a question-shaped slice.
|
|
367
406
|
if (rung === 0.5) {
|
|
@@ -403,11 +442,20 @@ export function buildNudgeLine(
|
|
|
403
442
|
// Rung 1 (single bounded slice) carries no do-in-steps/do-in-parallel
|
|
404
443
|
// mode of its own — `classification.mode` is `null` for that shape.
|
|
405
444
|
const modeLabel = classification.mode ?? "single-slice";
|
|
445
|
+
// Advisory only, never a block.
|
|
446
|
+
const coldStart =
|
|
447
|
+
rung === 1
|
|
448
|
+
? ` A leg starts cold (~${Math.round(LEG_COLD_START_UNCACHED_TOKENS / 1000)}k uncached tokens): ` +
|
|
449
|
+
"a slice of one to three direct reads does not amortise it."
|
|
450
|
+
: "";
|
|
451
|
+
// The per-call model value, only for a tier the table produced for a known kind.
|
|
452
|
+
const model = tier === "lite" && sliceKind !== undefined && sliceKind !== "unknown" ? TIER_TO_CLAUDE_MODEL[tier] : undefined;
|
|
453
|
+
const carrier = model ? ` Pass \`model: "${model}"\` on each Agent call (${sliceKind} slices earn lite).` : "";
|
|
406
454
|
return (
|
|
407
455
|
`<delegation-nudge>${rungLabel}: dispatch ${modeLabel} ` +
|
|
408
456
|
`(${sliceCount} ${unit}, ${tier} tier recommended). Consider dispatching via ` +
|
|
409
457
|
`subagent-orchestration instead of doing every slice in-session — ` +
|
|
410
|
-
`${classification.reason}
|
|
458
|
+
`${classification.reason}.${carrier}${coldStart}</delegation-nudge>`
|
|
411
459
|
);
|
|
412
460
|
}
|
|
413
461
|
|
|
@@ -415,9 +463,14 @@ export interface NudgeResult {
|
|
|
415
463
|
classification: Classification;
|
|
416
464
|
sliceCount: number;
|
|
417
465
|
tier: Tier;
|
|
466
|
+
/** The slice kind the tier was read from (`unknown` → `inherit`). */
|
|
467
|
+
sliceKind: SliceType;
|
|
468
|
+
/** Set only for a rung-0.5 slice of a typed hand kind with an admissible unpaid route. */
|
|
469
|
+
handKind?: HandKind;
|
|
418
470
|
/** The judgment-ladder rung this verdict resolved to (2.4) — 1 or 2 in
|
|
419
471
|
* production today: classifyPrompt returns null for every non-subagent
|
|
420
|
-
* verdict including rung 0.5 (the carrier stays silent on questions)
|
|
472
|
+
* verdict including rung 0.5 (the carrier stays silent on questions),
|
|
473
|
+
* except a typed hand slice whose unpaid route an injected check admits;
|
|
421
474
|
* buildNudgeLine's 0.5 branch is vocabulary for orchestrator-facing
|
|
422
475
|
* surfaces and direct callers. */
|
|
423
476
|
rung: LadderRung;
|
|
@@ -429,10 +482,20 @@ export interface NudgeResult {
|
|
|
429
482
|
* verdict out of this concern's scope, activation gate closed, or an
|
|
430
483
|
* internal error — all degrade to the same silent outcome).
|
|
431
484
|
*/
|
|
485
|
+
export interface ClassifyOptions {
|
|
486
|
+
/**
|
|
487
|
+
* Whether an unpaid route would admit this kind. Injected so the verdict does
|
|
488
|
+
* not depend on what is configured; absent means no route, so the free rung
|
|
489
|
+
* stays silent.
|
|
490
|
+
*/
|
|
491
|
+
freeRouteAdmissible?: (kind: HandKind) => boolean;
|
|
492
|
+
}
|
|
493
|
+
|
|
432
494
|
export function classifyPrompt(
|
|
433
495
|
prompt: string,
|
|
434
496
|
workspace_root: string,
|
|
435
497
|
hostId: string | null | undefined,
|
|
498
|
+
opts: ClassifyOptions = {},
|
|
436
499
|
): NudgeResult | null {
|
|
437
500
|
try {
|
|
438
501
|
const { signals, sliceCountForLine } = extractTaskSignals(prompt);
|
|
@@ -476,13 +539,30 @@ export function classifyPrompt(
|
|
|
476
539
|
classification: { delegable: false, action: "ask", mode: null, reason: ladder.reason },
|
|
477
540
|
sliceCount: 0,
|
|
478
541
|
tier: recommendSliceTier(downshift, separate_quota_pool),
|
|
542
|
+
sliceKind: "unknown",
|
|
479
543
|
rung: ladder.rung,
|
|
480
544
|
};
|
|
481
545
|
}
|
|
546
|
+
// The one rung-0.5 exception to silence: a typed hand kind with an admissible
|
|
547
|
+
// unpaid route, which moves paid work off the head rather than adding a line.
|
|
548
|
+
if (ladder.rung === 0.5 && opts.freeRouteAdmissible !== undefined) {
|
|
549
|
+
const handKind = handKindFromPrompt(prompt);
|
|
550
|
+
if (handKind !== null && opts.freeRouteAdmissible(handKind)) {
|
|
551
|
+
return {
|
|
552
|
+
classification: { delegable: false, action: "ask", mode: null, reason: ladder.reason },
|
|
553
|
+
sliceCount: 0,
|
|
554
|
+
tier: recommendSliceTier(downshift, separate_quota_pool),
|
|
555
|
+
sliceKind: "unknown",
|
|
556
|
+
rung: ladder.rung,
|
|
557
|
+
handKind,
|
|
558
|
+
};
|
|
559
|
+
}
|
|
560
|
+
}
|
|
482
561
|
if (ladder.verdict !== "subagent") {
|
|
483
562
|
return null; // rung-0 script, rung-0.5 ask-transport, or ∅ user-ask/in-session
|
|
484
563
|
}
|
|
485
|
-
const
|
|
564
|
+
const sliceKind = sliceKindFromPrompt(prompt);
|
|
565
|
+
const tier = recommendSliceTier(downshift, separate_quota_pool, sliceKind);
|
|
486
566
|
// Rung 1 (single bounded slice) has no explicit slice count of its own —
|
|
487
567
|
// extractTaskSignals never produces one for that shape — so the line
|
|
488
568
|
// always names it as exactly one slice.
|
|
@@ -493,7 +573,7 @@ export function classifyPrompt(
|
|
|
493
573
|
mode: ladder.mode ?? null,
|
|
494
574
|
reason: ladder.reason,
|
|
495
575
|
};
|
|
496
|
-
return { classification, sliceCount, tier, rung: ladder.rung };
|
|
576
|
+
return { classification, sliceCount, tier, sliceKind, rung: ladder.rung };
|
|
497
577
|
} catch {
|
|
498
578
|
return null; // classifier/settings error → silence, never a crash-to-block
|
|
499
579
|
}
|
|
@@ -545,7 +625,10 @@ export function main(): number {
|
|
|
545
625
|
const root = _workspaceRoot(env);
|
|
546
626
|
const platform = env["platform"];
|
|
547
627
|
const hostId = typeof platform === "string" && platform ? platform : null;
|
|
548
|
-
|
|
628
|
+
// Read lazily: the council config is opened only on a rung-0.5 hand-kind slice.
|
|
629
|
+
const result = classifyPrompt(prompt, root, hostId, {
|
|
630
|
+
freeRouteAdmissible: (kind) => freeRungFor(root, kind, councilConfigPath()),
|
|
631
|
+
});
|
|
549
632
|
if (!result) {
|
|
550
633
|
return EXIT_ALLOW; // anti-canary default: no verdict → no output
|
|
551
634
|
}
|
|
@@ -554,7 +637,14 @@ export function main(): number {
|
|
|
554
637
|
`${JSON.stringify({
|
|
555
638
|
decision: "warn",
|
|
556
639
|
reason: `delegation-nudge: rung-${result.rung} verdict (${result.sliceCount} slices, ${result.tier} tier)`,
|
|
557
|
-
additional_context: buildNudgeLine(
|
|
640
|
+
additional_context: buildNudgeLine(
|
|
641
|
+
result.rung,
|
|
642
|
+
result.classification,
|
|
643
|
+
result.sliceCount,
|
|
644
|
+
result.tier,
|
|
645
|
+
result.sliceKind,
|
|
646
|
+
result.handKind,
|
|
647
|
+
),
|
|
558
648
|
})}\n`,
|
|
559
649
|
);
|
|
560
650
|
return EXIT_WARN;
|