@event4u/agent-config 16.5.0 → 17.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.augment-plugin/marketplace.json +3 -3
- package/.augment-plugin/plugin.json +1 -1
- package/.claude-plugin/marketplace.json +2 -2
- package/.claude-plugin/skills/install-agent-config/SKILL.md +4 -4
- package/CHANGELOG.md +463 -498
- package/CONTRIBUTING.md +47 -0
- package/README.md +25 -25
- package/dist/agent-src/commands/{design.md → agent-design.md} +10 -6
- package/dist/agent-src/commands/agents/init.md +66 -3
- package/dist/agent-src/commands/agents/user/init.md +3 -0
- package/dist/agent-src/commands/{optimize/deep.md → analyze/and-optimize.md} +72 -33
- package/dist/agent-src/commands/analyze/inbox.md +168 -37
- package/dist/agent-src/commands/analyze/pr.md +144 -0
- package/dist/agent-src/commands/analyze/{repo.md → reference.md} +85 -14
- package/dist/agent-src/commands/analyze/roadmap-repos.md +19 -10
- package/dist/agent-src/commands/analyze.md +28 -12
- package/dist/agent-src/commands/audit.md +115 -0
- package/dist/agent-src/commands/brand/review.md +13 -2
- package/dist/agent-src/commands/brand/tokens.md +3 -3
- package/dist/agent-src/commands/brand/voice.md +8 -5
- package/dist/agent-src/commands/brand.md +2 -2
- package/dist/agent-src/commands/challenge-me/closure.md +25 -0
- package/dist/agent-src/commands/design-system/import.md +8 -3
- package/dist/agent-src/commands/design-system/sync.md +98 -0
- package/dist/agent-src/commands/design-system.md +6 -1
- package/dist/agent-src/commands/evals/analyze.json +44 -0
- package/dist/agent-src/commands/evals/audit.json +12 -0
- package/dist/agent-src/commands/evals/retro.json +12 -0
- package/dist/agent-src/commands/fix/ci.md +10 -8
- package/dist/agent-src/commands/ghostwriter/write.md +22 -0
- package/dist/agent-src/commands/memory/learn-low-impact.md +70 -83
- package/dist/agent-src/commands/memory/propose.md +12 -0
- package/dist/agent-src/commands/memory.md +1 -1
- package/dist/agent-src/commands/optimize.md +4 -3
- package/dist/agent-src/commands/post-as/me.md +18 -0
- package/dist/agent-src/commands/pr/create.md +17 -342
- package/dist/agent-src/commands/pr/merge.md +129 -368
- package/dist/agent-src/commands/retro.md +121 -0
- package/dist/agent-src/commands/review/routing.md +1 -1
- package/dist/agent-src/commands/roadmap/next.md +4 -1
- package/dist/agent-src/commands/roadmap/process-full.md +46 -333
- package/dist/agent-src/commands/roadmap/triage-parked.md +6 -2
- package/dist/agent-src/commands/team-knowledge/consolidate.md +2 -2
- package/dist/agent-src/commands/team-knowledge.md +1 -1
- package/dist/agent-src/commands/threat-model.md +1 -1
- package/dist/agent-src/commands/upstream-contribute.md +91 -101
- package/dist/agent-src/commands/worktree/cleanup.md +18 -11
- package/dist/agent-src/contexts/contracts/consumer-agents-md-guide.md +54 -0
- package/dist/agent-src/contexts/execution/analysis-loop.md +137 -0
- package/dist/agent-src/contexts/execution/auto-dispatch-classification.md +3 -3
- package/dist/agent-src/contexts/execution/decision-closure-execution.md +1 -1
- package/dist/agent-src/contexts/execution/host-capability-manifest.md +6 -0
- package/dist/agent-src/contexts/execution/orchestration-telemetry.md +11 -4
- package/dist/agent-src/contexts/execution/pr-create-branches-content.md +250 -0
- package/dist/agent-src/contexts/execution/pr-create-branches-freshness.md +150 -0
- package/dist/agent-src/contexts/execution/pr-merge-queue.md +287 -0
- package/dist/agent-src/contexts/execution/pr-merge-sync.md +276 -0
- package/dist/agent-src/contexts/execution/pr-merge-trust-boundary.md +69 -0
- package/dist/agent-src/contexts/execution/process-full-all.md +233 -0
- package/dist/agent-src/contexts/execution/process-full-delivery.md +231 -0
- package/dist/agent-src/contexts/execution/roadmap-execution-contract-branches.md +42 -0
- package/dist/agent-src/contexts/execution/roadmap-execution-contract.md +1 -35
- package/dist/agent-src/contexts/execution/roadmap-process-loop-close.md +235 -0
- package/dist/agent-src/contexts/execution/roadmap-process-loop-prescan.md +216 -0
- package/dist/agent-src/contexts/execution/roadmap-process-loop-run.md +253 -0
- package/dist/agent-src/contexts/execution/roadmap-process-loop-set.md +212 -0
- package/dist/agent-src/contexts/execution/roadmap-process-loop.md +25 -864
- package/dist/agent-src/contexts/execution/subagent-spawn-contract.md +14 -2
- package/dist/agent-src/contexts/execution/subagent-steering.md +65 -8
- package/dist/agent-src/contexts/model-recommendations.md +5 -5
- package/dist/agent-src/contexts/subagent-configuration.md +1 -1
- package/dist/agent-src/guidelines/agent-infra/api-cost-levers.md +4 -3
- package/dist/agent-src/guidelines/agent-infra/model-recommendation.md +11 -5
- package/dist/agent-src/guidelines/agent-infra/rule-body-migration-inventory.md +1 -1
- package/dist/agent-src/guidelines/agent-infra/self-improvement-pipeline.md +47 -24
- package/dist/agent-src/guidelines/design-antipatterns.md +5 -0
- package/dist/agent-src/guidelines/design-asset-discipline.md +17 -0
- package/dist/agent-src/guidelines/design-fidelity-routing.md +1 -0
- package/dist/agent-src/guidelines/php/api-design.md +10 -1
- package/dist/agent-src/rules/brand-source-of-truth.md +7 -6
- package/dist/agent-src/rules/code-provenance.md +1 -1
- package/dist/agent-src/rules/context-hygiene.md +0 -1
- package/dist/agent-src/rules/design-fidelity.md +12 -13
- package/dist/agent-src/rules/external-reference-deep-dive.md +2 -2
- package/dist/agent-src/rules/fix-what-you-see.md +1 -1
- package/dist/agent-src/rules/low-impact-corpus-privacy-floor.md +14 -15
- package/dist/agent-src/rules/missing-skill-recovery.md +12 -11
- package/dist/agent-src/rules/neighbour-precedence.md +1 -1
- package/dist/agent-src/rules/recurring-criticism.md +1 -1
- package/dist/agent-src/rules/roadmap-ci-steps-policy.md +0 -2
- package/dist/agent-src/rules/self-repair-loop.md +2 -2
- package/dist/agent-src/rules/token-budget-discipline.md +1 -1
- package/dist/agent-src/scripts/dashboard_mode.ts +4 -1
- package/dist/agent-src/scripts/roadmap_age.ts +175 -0
- package/dist/agent-src/scripts/update_roadmap_progress.ts +10 -2
- package/dist/agent-src/skills/accessibility-auditor/SKILL.md +3 -3
- package/dist/agent-src/skills/agent-security-review/SKILL.md +2 -2
- package/dist/agent-src/skills/agents-md-thin-root/SKILL.md +12 -4
- package/dist/agent-src/skills/ai-code-blindspots/SKILL.md +7 -0
- package/dist/agent-src/skills/ai-council/references/advanced-modes.md +11 -1
- package/dist/agent-src/skills/ai-council/references/cost-and-redaction.md +7 -0
- package/dist/agent-src/skills/ai-council/references/execution-modes.md +7 -0
- package/dist/agent-src/skills/ai-council/references/output-and-synthesis.md +19 -0
- package/dist/agent-src/skills/ai-council/references/procedure.md +7 -0
- package/dist/agent-src/skills/api-design/SKILL.md +2 -2
- package/dist/agent-src/skills/api-endpoint/SKILL.md +2 -2
- package/dist/agent-src/skills/authz-review/SKILL.md +5 -3
- package/dist/agent-src/skills/blade-ui/SKILL.md +2 -2
- package/dist/agent-src/skills/brand/SKILL.md +7 -3
- package/dist/agent-src/skills/brand-asset-generation/SKILL.md +13 -6
- package/dist/agent-src/skills/brand-audit/SKILL.md +2 -1
- package/dist/agent-src/skills/brand-identity/SKILL.md +5 -4
- package/dist/agent-src/skills/brand-strategy/SKILL.md +5 -4
- package/dist/agent-src/skills/brand-to-tokens/SKILL.md +18 -39
- package/dist/agent-src/skills/brand-to-tokens/templates/marp-brand-deck.md.example +2 -2
- package/dist/agent-src/skills/brand-to-tokens/templates/reveal-brand-deck.yaml +2 -2
- package/dist/agent-src/skills/canvas-design/SKILL.md +12 -2
- package/dist/agent-src/skills/competitive-positioning/SKILL.md +2 -2
- package/dist/agent-src/skills/composer-packages/SKILL.md +18 -0
- package/dist/agent-src/skills/condense-memory/SKILL.md +1 -1
- package/dist/agent-src/skills/content-funnel-design/SKILL.md +8 -1
- package/dist/agent-src/skills/context-authoring/SKILL.md +1 -1
- package/dist/agent-src/skills/context-document/SKILL.md +2 -2
- package/dist/agent-src/skills/corpus-grounding/SKILL.md +6 -6
- package/dist/agent-src/skills/corpus-grounding/scripts/decision_engine.ts +13 -11
- package/dist/agent-src/skills/corpus-grounding/scripts/ground.mjs +1706 -0
- package/dist/agent-src/skills/corpus-grounding/scripts/schema_validator.ts +7 -1
- package/dist/agent-src/skills/dashboard-design/SKILL.md +1 -1
- package/dist/agent-src/skills/data-flow-mapper/SKILL.md +5 -2
- package/dist/agent-src/skills/database/SKILL.md +5 -4
- package/dist/agent-src/skills/decision-record/references/weighted-matrix.md +12 -0
- package/dist/agent-src/skills/deep-reading-analyst/SKILL.md +1 -1
- package/dist/agent-src/skills/dependency-upgrade/SKILL.md +61 -11
- package/dist/agent-src/skills/description-assist/SKILL.md +1 -1
- package/dist/agent-src/skills/design-intelligence/SKILL.md +1 -1
- package/dist/agent-src/skills/design-intelligence/data/landing.csv +1 -1
- package/dist/agent-src/skills/design-intelligence/references/context-and-registers.md +10 -2
- package/dist/agent-src/skills/design-intelligence/references/design-languages.md +1 -1
- package/dist/agent-src/skills/design-intelligence/references/design-rules-checklist.md +4 -3
- package/dist/agent-src/skills/design-intelligence/references/integration-mapping.md +14 -14
- package/dist/agent-src/skills/{wireframe → design-review}/references/story-beat-ledger.schema.json +1 -1
- package/dist/agent-src/skills/design-review/references/verification-automation.md +11 -3
- package/dist/agent-src/skills/design-system-capture/SKILL.md +15 -10
- package/dist/agent-src/skills/design-system-capture/references/design-system-json.md +20 -5
- package/dist/agent-src/skills/design-system-capture/references/import-procedure.md +2 -2
- package/dist/agent-src/skills/design-tokens/SKILL.md +23 -23
- package/dist/agent-src/skills/design-tokens/scripts/tokens.mjs +1037 -0
- package/dist/agent-src/skills/design-tokens/scripts/tokens.ts +336 -13
- package/dist/agent-src/skills/design-tokens/templates/design-tokens-starter.json +52 -53
- package/dist/agent-src/skills/docker/SKILL.md +1 -1
- package/dist/agent-src/skills/estimate-ticket/SKILL.md +1 -1
- package/dist/agent-src/skills/existing-ui-audit/SKILL.md +14 -276
- package/dist/agent-src/skills/existing-ui-audit/procedure.yaml +44 -0
- package/dist/agent-src/skills/existing-ui-audit/references/anti-slop-cross-reference.md +1 -1
- package/dist/agent-src/skills/existing-ui-audit/references/steps/00-inspect-stack-and-input.md +4 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/01-enumerate-components.md +26 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/01b-detect-component-taxonomy.md +7 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/02-identify-design-system.md +12 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/03-detect-design-tokens.md +35 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/04-detect-shadcn-inventory.md +13 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/04b-live-storybook-read.md +26 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/05-list-reusable-patterns.md +14 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/06-match-candidates.md +52 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/07-greenfield-branch.md +29 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/08-a11y-baseline.md +40 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/09-validate-and-write.md +5 -0
- package/dist/agent-src/skills/experiment-loop/SKILL.md +1 -1
- package/dist/agent-src/skills/fe-design/references/design-patterns.md +16 -2
- package/dist/agent-src/skills/fe-design/references/design-read-and-memory.md +1 -1
- package/dist/agent-src/skills/fe-design/references/source-led-port.md +1 -1
- package/dist/agent-src/skills/finishing-a-development-branch/SKILL.md +6 -6
- package/dist/agent-src/skills/flux/SKILL.md +1 -1
- package/dist/agent-src/skills/form-handler/SKILL.md +15 -2
- package/dist/agent-src/skills/git-workflow/SKILL.md +2 -2
- package/dist/agent-src/skills/git-workflow/references/branch-update.md +7 -0
- package/dist/agent-src/skills/git-workflow/references/commit-subject.md +12 -0
- package/dist/agent-src/skills/git-workflow/references/push-closes-its-loop.md +10 -0
- package/dist/agent-src/skills/gtm-launch/SKILL.md +8 -1
- package/dist/agent-src/skills/html-deck/SKILL.md +7 -2
- package/dist/agent-src/skills/humanizer/SKILL.md +16 -3
- package/dist/agent-src/skills/humanizer/references/anti-aiisms.md +13 -1
- package/dist/agent-src/skills/humanizer/references/fixtures.md +8 -0
- package/dist/agent-src/skills/js-library-packaging/SKILL.md +5 -4
- package/dist/agent-src/skills/js-library-packaging/scripts/check_package_surface.mjs +197 -0
- package/dist/agent-src/skills/judge-artifact-completeness/SKILL.md +1 -1
- package/dist/agent-src/skills/judge-security-auditor/SKILL.md +2 -2
- package/dist/agent-src/skills/launch-readiness/SKILL.md +18 -22
- package/dist/agent-src/skills/learning-to-rule-or-skill/SKILL.md +5 -5
- package/dist/agent-src/skills/livewire/SKILL.md +1 -1
- package/dist/agent-src/skills/llm-provider-knowledge/SKILL.md +18 -0
- package/dist/agent-src/skills/logo-generation/SKILL.md +9 -3
- package/dist/agent-src/skills/market-entry-analysis/SKILL.md +6 -1
- package/dist/agent-src/skills/markitdown/SKILL.md +1 -1
- package/dist/agent-src/skills/memory-consolidation/SKILL.md +2 -2
- package/dist/agent-src/skills/messaging-architecture/SKILL.md +8 -1
- package/dist/agent-src/skills/motion-choreographer/SKILL.md +2 -2
- package/dist/agent-src/skills/playwright-testing/SKILL.md +2 -0
- package/dist/agent-src/skills/positioning-strategy/SKILL.md +10 -2
- package/dist/agent-src/skills/prediction-pool-optimizer/references/ev-fixtures.md +13 -0
- package/dist/agent-src/skills/prediction-pool-optimizer/references/odds-and-bonus.md +7 -0
- package/dist/agent-src/skills/project-analysis-core/SKILL.md +1 -1
- package/dist/agent-src/skills/project-analysis-hypothesis-driven/SKILL.md +1 -1
- package/dist/agent-src/skills/project-analyzer/SKILL.md +14 -75
- package/dist/agent-src/skills/project-analyzer/procedure.yaml +39 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/01-project-overview.md +9 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/02-architecture.md +7 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/03-data-layer.md +6 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/04-business-domains.md +7 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/05-api-surface.md +6 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/06-service-map.md +6 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/07-module-inventory.md +6 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/08-infrastructure-and-testing.md +5 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/09-agent-docs-audit.md +6 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/10-gap-analysis.md +6 -0
- package/dist/agent-src/skills/quality-tools/references/js-ts-tools.md +10 -0
- package/dist/agent-src/skills/quality-tools/references/php-tools.md +13 -0
- package/dist/agent-src/skills/quality-tools/references/python-tools.md +11 -0
- package/dist/agent-src/skills/react-native-setup/SKILL.md +7 -2
- package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +5 -1
- package/dist/agent-src/skills/react-shadcn-ui/references/registry.md +13 -0
- package/dist/agent-src/skills/react-shadcn-ui/scripts/shadcn_add.mjs +315 -0
- package/dist/agent-src/skills/react-shadcn-ui/scripts/shadcn_add.ts +6 -6
- package/dist/agent-src/skills/receiving-code-review/SKILL.md +1 -1
- package/dist/agent-src/skills/refine-ticket/SKILL.md +2 -2
- package/dist/agent-src/skills/release-comms/SKILL.md +2 -1
- package/dist/agent-src/skills/repomix-packer/SKILL.md +2 -2
- package/dist/agent-src/skills/requesting-code-review/SKILL.md +3 -3
- package/dist/agent-src/skills/roadmap-management/references/archival.md +3 -3
- package/dist/agent-src/skills/roadmap-management/references/authoring.md +9 -2
- package/dist/agent-src/skills/roadmap-management/references/dashboard.md +3 -3
- package/dist/agent-src/skills/roadmap-management/references/lifecycle.md +3 -3
- package/dist/agent-src/skills/roadmap-writing/SKILL.md +4 -4
- package/dist/agent-src/skills/rtk-output-filtering/SKILL.md +1 -1
- package/dist/agent-src/skills/rule-writing/SKILL.md +1 -2
- package/dist/agent-src/skills/security/SKILL.md +41 -5
- package/dist/agent-src/skills/skill-improvement-pipeline/SKILL.md +5 -3
- package/dist/agent-src/skills/skill-reviewer/SKILL.md +1 -1
- package/dist/agent-src/skills/skill-writing/SKILL.md +23 -8
- package/dist/agent-src/skills/skill-writing/references/section-patterns.md +19 -1
- package/dist/agent-src/skills/source-discovery/SKILL.md +3 -3
- package/dist/agent-src/skills/sql-writing/SKILL.md +2 -2
- package/dist/agent-src/skills/standards-from-config/SKILL.md +2 -2
- package/dist/agent-src/skills/storybook-workshop/SKILL.md +5 -0
- package/dist/agent-src/skills/storybook-workshop/scripts/story_contrast_floor.mjs +99 -0
- package/dist/agent-src/skills/subagent-orchestration/SKILL.md +13 -13
- package/dist/agent-src/skills/subagent-orchestration/prompts/README.md +4 -3
- package/dist/agent-src/skills/svg-authoring/SKILL.md +7 -1
- package/dist/agent-src/skills/systematic-debugging/SKILL.md +2 -2
- package/dist/agent-src/skills/tailwind-engineer/SKILL.md +8 -3
- package/dist/agent-src/skills/tailwind-engineer/scripts/tailwind_config_gen.mjs +482 -0
- package/dist/agent-src/skills/test-case-discovery/SKILL.md +1 -1
- package/dist/agent-src/skills/threat-modeling/SKILL.md +8 -1
- package/dist/agent-src/skills/threat-modeling/data/manifest.json +5 -2
- package/dist/agent-src/skills/threat-modeling/data/reasoning.csv +10 -10
- package/dist/agent-src/skills/threat-modeling/data/surfaces.csv +11 -10
- package/dist/agent-src/skills/threat-modeling/data/threats.csv +34 -20
- package/dist/agent-src/skills/type-design/SKILL.md +196 -0
- package/dist/agent-src/skills/type-design/references/font-spec.md +90 -0
- package/dist/agent-src/skills/type-design/references/gates.md +113 -0
- package/dist/agent-src/skills/type-design/references/toolchain.md +66 -0
- package/dist/agent-src/skills/typography-system/SKILL.md +21 -11
- package/dist/agent-src/skills/typography-system/references/worked-scales.md +85 -0
- package/dist/agent-src/skills/ui-apply-generic/SKILL.md +1 -1
- package/dist/agent-src/skills/universal-project-analysis/SKILL.md +1 -1
- package/dist/agent-src/skills/upstream-contribute/SKILL.md +120 -125
- package/dist/agent-src/skills/using-git-worktrees/SKILL.md +1 -0
- package/dist/agent-src/skills/verify-repair-loop/SKILL.md +1 -1
- package/dist/agent-src/skills/voice-and-tone-design/SKILL.md +71 -2
- package/dist/agent-src/skills/worktree-lifecycle/SKILL.md +16 -14
- package/dist/agent-src/templates/AGENTS.md +1 -1
- package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/dist/agent-src/templates/agents/proposal.example.md +1 -1
- package/dist/agent-src/templates/github-workflows/advisories-daily.yml +85 -0
- package/dist/agent-src/templates/roadmaps.md +39 -1
- package/dist/agent-src/templates/scripts/check_memory.ts +2 -2
- package/dist/agent-src/templates/scripts/historical-bug-patterns.example.yml +13 -1
- package/dist/agent-src/templates/scripts/work_engine/cli.ts +17 -0
- package/dist/agent-src/templates/scripts/work_engine/cli_args.ts +10 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/scaffold.ts +22 -13
- package/dist/agent-src/templates/scripts/work_engine/dispatcher.ts +18 -4
- package/dist/agent-src/templates/scripts/work_engine/procedure/checks.ts +283 -0
- package/dist/agent-src/templates/scripts/work_engine/procedure/run.ts +432 -0
- package/dist/agent-src/templates/scripts/work_engine/procedure/sidecar.ts +185 -0
- package/dist/agent-src/templates/scripts/work_engine/state.ts +3 -0
- package/dist/cli/commands/uiRender.js +72 -17
- package/dist/cli/commands/uiRenderAsset.js +10 -2
- package/dist/cli/commands/uiRenderAssetFonts.js +158 -0
- package/dist/cli/commands/uiRenderAssetTypes.js +8 -20
- package/dist/cli/initRouting.js +1 -1
- package/dist/cli/mcp/dispatch.js +31 -9
- package/dist/cli/python/knowledge_ingest.js +7 -39
- package/dist/cli/python/workspace_secrets.js +4 -177
- package/dist/cli/registry.js +4 -1
- package/dist/cli-delegate/archive_completed_roadmaps.js +3 -2
- package/dist/cli-delegate/check_update_banner.js +635 -266
- package/dist/cli-delegate/{chunk-TMWYUOK4.js → chunk-2CX7NWRB.js} +224 -437
- package/dist/cli-delegate/{chunk-F3QDG2GT.js → chunk-2SFOOFJJ.js} +259 -159
- package/dist/cli-delegate/chunk-2Y5AMLMY.js +136 -0
- package/dist/cli-delegate/{chunk-OKJUIAPS.js → chunk-4E2W63DA.js} +1 -62
- package/dist/cli-delegate/{chunk-6SRJTYJS.js → chunk-4SHNERBL.js} +37 -16
- package/dist/cli-delegate/chunk-5VO3RTMV.js +208 -0
- package/dist/cli-delegate/chunk-6E2LDY4F.js +27 -0
- package/dist/cli-delegate/{chunk-XQTPXKFA.js → chunk-6ZD2QZMN.js} +8 -17
- package/dist/cli-delegate/{chunk-6V5FMA3P.js → chunk-7CEI2YPS.js} +1 -1
- package/dist/cli-delegate/{chunk-DMSZHXZS.js → chunk-7DRWULEQ.js} +80 -7
- package/dist/cli-delegate/chunk-7NXCZSDL.js +54 -0
- package/dist/cli-delegate/chunk-AX3U3UWJ.js +328 -0
- package/dist/cli-delegate/{chunk-WOKWX5PL.js → chunk-BKALSTBZ.js} +18 -3
- package/dist/cli-delegate/chunk-BMGUGSY6.js +103 -0
- package/dist/cli-delegate/chunk-BYV46VRM.js +3309 -0
- package/dist/cli-delegate/{chunk-5GPULQBE.js → chunk-CAL76ADI.js} +4215 -682
- package/dist/cli-delegate/chunk-DSY6LLCQ.js +127 -0
- package/dist/cli-delegate/chunk-E6XNBVE4.js +581 -0
- package/dist/cli-delegate/{chunk-ZUZKZYCN.js → chunk-ESUNQ5XR.js} +46 -10
- package/dist/cli-delegate/{chunk-G5VVIZRC.js → chunk-F7HLSW6P.js} +1 -1
- package/dist/cli-delegate/chunk-FIEEOH5C.js +133 -0
- package/dist/cli-delegate/chunk-FKYZOWVD.js +719 -0
- package/dist/cli-delegate/chunk-GOMILC3O.js +918 -0
- package/dist/cli-delegate/chunk-I4KJYVPB.js +69 -0
- package/dist/cli-delegate/{chunk-JQOM7TTM.js → chunk-IDAOTDPE.js} +1 -100
- package/dist/cli-delegate/chunk-IROAQ77A.js +137 -0
- package/dist/cli-delegate/chunk-J2SJZICO.js +698 -0
- package/dist/cli-delegate/{chunk-6YQC2HLF.js → chunk-JHMMWNJ2.js} +54 -40
- package/dist/cli-delegate/{chunk-WQWXGIWB.js → chunk-M6CRG5O6.js} +165 -15
- package/dist/cli-delegate/{chunk-PHD7OOLE.js → chunk-MQ2UDEGV.js} +14 -3
- package/dist/cli-delegate/chunk-NTM7G2V4.js +220 -0
- package/dist/cli-delegate/chunk-PV7S5DPJ.js +175 -0
- package/dist/cli-delegate/{chunk-F7DQWYR5.js → chunk-RAXQOETZ.js} +6 -2
- package/dist/cli-delegate/{chunk-T7XSJSUQ.js → chunk-SIOMDAKL.js} +980 -784
- package/dist/cli-delegate/{chunk-KR6EM23A.js → chunk-TULVDQ4L.js} +3 -48
- package/dist/cli-delegate/chunk-UUYEKXKR.js +20 -0
- package/dist/cli-delegate/{chunk-7XGD2OEU.js → chunk-UXWHY6CQ.js} +2 -1
- package/dist/cli-delegate/{chunk-PWX7CKMD.js → chunk-VC3ECUEK.js} +1 -1
- package/dist/cli-delegate/{chunk-KXXWJTDO.js → chunk-WMNYVIYX.js} +1 -1
- package/dist/cli-delegate/chunk-XCY5KKUC.js +181 -0
- package/dist/cli-delegate/{chunk-H76PHZBI.js → chunk-XLY5G3CM.js} +14 -19
- package/dist/cli-delegate/cmd_adr_effective.js +41 -2
- package/dist/cli-delegate/cmd_analyze_session.js +7 -7
- package/dist/cli-delegate/cmd_brand_status.js +1287 -10
- package/dist/cli-delegate/cmd_ci_settle.js +330 -0
- package/dist/cli-delegate/cmd_conformance.js +483 -817
- package/dist/cli-delegate/cmd_doctor.js +26 -16
- package/dist/cli-delegate/cmd_doctor_neighbours.js +10 -7
- package/dist/cli-delegate/cmd_explain.js +9 -24
- package/dist/cli-delegate/cmd_export.js +14 -11
- package/dist/cli-delegate/cmd_fleet.js +5 -3
- package/dist/cli-delegate/cmd_git_convention.js +8 -4
- package/dist/cli-delegate/cmd_handoff.js +79 -242
- package/dist/cli-delegate/cmd_mcp_available.js +1 -1
- package/dist/cli-delegate/cmd_memory_get.js +4 -2
- package/dist/cli-delegate/cmd_migrate.js +2 -2
- package/dist/cli-delegate/cmd_packs_active.js +2 -2
- package/dist/cli-delegate/cmd_preflight.js +7 -5
- package/dist/cli-delegate/cmd_prune.js +16 -13
- package/dist/cli-delegate/cmd_route_audit.js +11 -8
- package/dist/cli-delegate/cmd_route_explain.js +649 -16
- package/dist/cli-delegate/cmd_session_recycle.js +15 -6
- package/dist/cli-delegate/cmd_settings_check.js +2 -2
- package/dist/cli-delegate/cmd_settings_get.js +1 -1
- package/dist/cli-delegate/cmd_settings_migrate.js +14 -11
- package/dist/cli-delegate/cmd_settings_set.js +1 -1
- package/dist/cli-delegate/cmd_sync.js +16 -13
- package/dist/cli-delegate/cmd_uninstall.js +185 -31
- package/dist/cli-delegate/cmd_update.js +67 -3
- package/dist/cli-delegate/cmd_upgrade.js +38 -7
- package/dist/cli-delegate/cmd_validate.js +16 -13
- package/dist/cli-delegate/cmd_versions.js +1 -1
- package/dist/cli-delegate/dashboard_mode.js +1 -1
- package/dist/cli-delegate/gate_execute.js +4 -3
- package/dist/cli-delegate/roadmap_age.js +22 -0
- package/dist/cli-delegate/roadmap_gates.js +4 -3
- package/dist/cli-delegate/update_roadmap_progress.js +3 -2
- package/dist/cli-delegate/upgrade_unattended-VVL6JLSX.js +541 -0
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +373 -190
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +5 -5
- package/dist/discovery/dormancy-report.md +1 -1
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +21 -16
- package/dist/discovery/trust-report.md +3 -3
- package/dist/discovery/workspaces.json +16 -11
- package/dist/hooks/chat_history.chunk.cjs +6852 -0
- package/dist/hooks/chat_history.chunk.cjs.sha256 +1 -0
- package/dist/hooks/dispatch.js +17506 -18692
- package/dist/hooks/dispatch.sha256 +1 -1
- package/dist/hooks/egress_engine.chunk.cjs +915 -0
- package/dist/hooks/egress_engine.chunk.cjs.sha256 +1 -0
- package/dist/hooks/svg_rules.chunk.cjs +281 -49
- package/dist/hooks/svg_rules.chunk.cjs.sha256 +1 -1
- package/dist/install/conflict.js +36 -6
- package/dist/install/conflictTracker.js +81 -7
- package/dist/install/detect.js +3 -3
- package/dist/install/hostPermissionsAdapter.js +106 -0
- package/dist/install/install.mjs +3117 -1949
- package/dist/install/installThinLayer.js +1 -1
- package/dist/install/manifestFiles.js +21 -0
- package/dist/install/noGoDenyRows.js +300 -0
- package/dist/install/noGoRules.js +368 -0
- package/dist/install/ownershipLedger.js +133 -0
- package/dist/install/plan.js +1 -1
- package/dist/install/preflight.js +39 -8
- package/dist/install/preserve.js +74 -12
- package/dist/install/recordedOwnership.js +88 -5
- package/dist/install/rule_scope.js +20 -3
- package/dist/install/stagedRuntime.js +455 -0
- package/dist/install/toolsArg.js +19 -0
- package/dist/install/userPin.js +47 -0
- package/dist/install/wizard-plan.js +26 -4
- package/dist/mcp/awesome-mcp-servers.row.md +1 -1
- package/dist/mcp/mcp-cloudflare-catalogue.json +3 -2
- package/dist/mcp/registry-manifest.json +6 -5
- package/dist/mcp/server.json +3 -3
- package/dist/mcp/server.mjs +9831 -5546
- package/dist/router.json +1 -1
- package/dist/scripts/_lib/agent_settings.js +7 -12
- package/dist/scripts/_lib/asset_render_record.js +219 -0
- package/dist/scripts/_lib/claude_builtin_names.js +9 -4
- package/dist/scripts/_lib/claude_settings_hooks.js +102 -34
- package/dist/scripts/_lib/egress_rules.js +766 -0
- package/dist/scripts/_lib/environment_detector.js +24 -33
- package/dist/scripts/_lib/global_deploy_inventory.js +146 -9
- package/dist/scripts/_lib/guidelines_lane.js +10 -1
- package/dist/scripts/_lib/identifier_redaction.js +24 -0
- package/dist/scripts/_lib/installed_layer.js +17 -0
- package/dist/scripts/_lib/installed_layer_normalise.js +72 -0
- package/dist/scripts/_lib/lean_projection_mode.js +34 -152
- package/dist/scripts/_lib/project_tree_form.js +118 -0
- package/dist/scripts/_lib/scoped_projection.js +133 -3
- package/dist/scripts/_lib/settings_removed_keys.js +29 -0
- package/dist/scripts/_lib/settings_renamed_keys.js +17 -5
- package/dist/scripts/_lib/subagent_native_fields.js +35 -0
- package/dist/scripts/_lib/svg_filled_counter.js +285 -0
- package/dist/scripts/_lib/svg_rules.js +2 -0
- package/dist/scripts/_lib/ui_surface.js +19 -0
- package/dist/scripts/_lib/verification_command.js +364 -0
- package/dist/scripts/_lib/workspace_secrets.js +229 -0
- package/dist/scripts/ai_council/seat_policy.js +27 -0
- package/dist/scripts/ai_council/transport_resolver.js +9 -10
- package/dist/scripts/condense.js +25 -29
- package/dist/server/io/substituteTemplate.js +2 -2
- package/dist/server/io/yamlIO.js +2 -2
- package/dist/server/routes/install.js +5 -1
- package/dist/server/routes/settings.js +2 -2
- package/dist/server/routes/wizard.js +1 -1
- package/dist/server/schemas/settings.js +22 -16
- package/dist/server/serverInfo.js +1 -1
- package/dist/shared/brandTokenDocument.js +47 -0
- package/dist/shared/brandTokenPaths.js +43 -0
- package/dist/shared/settingsCarveOut.js +0 -7
- package/dist/shared/skillRanking.js +103 -5
- package/dist/shared/userMd/formAdapter.js +16 -0
- package/dist/shared/userMd/schema.js +17 -0
- package/dist/ui/assets/index-w70Ado09.js +23 -0
- package/dist/ui/index.html +1 -1
- package/docs/MIGRATION.md +89 -2
- package/docs/THIRD-PARTY-NOTICES.md +27 -0
- package/docs/contracts/settings-classes.md +27 -9
- package/docs/guidelines/agent-infra/api-cost-levers.md +4 -3
- package/docs/guidelines/agent-infra/model-recommendation.md +11 -5
- package/docs/guidelines/agent-infra/rule-body-migration-inventory.md +1 -1
- package/docs/guidelines/agent-infra/self-improvement-pipeline.md +47 -24
- package/docs/guidelines/design-antipatterns.md +5 -0
- package/docs/guidelines/design-asset-discipline.md +17 -0
- package/docs/guidelines/design-fidelity-routing.md +1 -0
- package/docs/guidelines/php/api-design.md +10 -1
- package/llms.txt +12 -10
- package/package.json +13 -4
- package/src/agent-src/scripts/dashboard_mode.ts +4 -1
- package/src/agent-src/scripts/roadmap_age.ts +175 -0
- package/src/agent-src/scripts/update_roadmap_progress.ts +10 -2
- package/src/agent-src/templates/AGENTS.md +1 -1
- package/src/agent-src/templates/scripts/check_memory.ts +2 -2
- package/src/agent-src/templates/scripts/historical-bug-patterns.example.yml +13 -1
- package/src/agent-src/templates/scripts/work_engine/cli.ts +17 -0
- package/src/agent-src/templates/scripts/work_engine/cli_args.ts +10 -0
- package/src/agent-src/templates/scripts/work_engine/directives/ui/scaffold.ts +22 -13
- package/src/agent-src/templates/scripts/work_engine/dispatcher.ts +18 -4
- package/src/agent-src/templates/scripts/work_engine/procedure/checks.ts +283 -0
- package/src/agent-src/templates/scripts/work_engine/procedure/run.ts +432 -0
- package/src/agent-src/templates/scripts/work_engine/procedure/sidecar.ts +185 -0
- package/src/agent-src/templates/scripts/work_engine/state.ts +3 -0
- package/src/config/agent-settings.template.yml +120 -57
- package/src/config/agents-paths.yml +13 -7
- package/src/config/ci-local-parity.yml +44 -0
- package/src/config/continuity-surface.json +51 -2
- package/src/config/depth-audit-samples.json +5 -0
- package/src/config/discovery/command-verbs.yml +1 -0
- package/src/config/dispatch-economy-metrics.json +1 -0
- package/src/config/egress-mutations/class-precedence-swapped.json +7 -0
- package/src/config/egress-mutations/credential-token-restores.json +7 -0
- package/src/config/egress-mutations/iban-checksum-disabled.json +7 -0
- package/src/config/egress-mutations/raw-value-in-the-count-record.json +7 -0
- package/src/config/evaluator-budgets.json +4 -4
- package/src/config/gate-coverage.yml +149 -3
- package/src/config/gate-reachability-exemptions.json +3 -5
- package/src/config/gate-violation-baselines.json +26 -22
- package/src/config/gitignore-block.txt +6 -3
- package/src/config/hook-bundle-budget.json +34 -3
- package/src/config/hook-carrier-probes.json +30 -0
- package/src/config/hook-latency-budget.json +4 -2
- package/src/config/host-injection-effect.json +8 -1
- package/src/config/host-skill-frontmatter-keys.json +56 -0
- package/src/config/layer-form-brakes.json +4 -0
- package/src/config/layer-form-comparison-corpus.json +42 -0
- package/src/config/loop-surfaces.yaml +28 -47
- package/src/config/memory-twin-verdicts.yml +9 -1
- package/src/config/metric-registry.yml +40 -3
- package/src/config/pack-size-budget.json +15 -0
- package/src/config/procedure-core-budget.json +21 -0
- package/src/config/profiles/minimal.ini +1 -1
- package/src/config/project-tree-form.json +24 -0
- package/src/config/reach-channels.yml +3 -3
- package/src/config/reach-prescriptions-intake.yml +1 -1
- package/src/config/roadmap-step-size-baseline.json +118 -0
- package/src/config/routing-coverage-seed.json +93 -2
- package/src/config/skill-body-budget.json +686 -0
- package/src/config/skill-fork-pilot.json +17 -0
- package/src/config/skill-lifecycle-probes-codex.json +57 -0
- package/src/config/skill-lifecycle-probes.json +57 -0
- package/src/config/skill-output-shape.json +316 -0
- package/src/config/step-depth-table.json +58 -0
- package/src/config/turnaround-budget.json +90 -0
- package/src/install/conflict.ts +38 -6
- package/src/install/conflictTracker.ts +126 -8
- package/src/install/detect.ts +3 -3
- package/src/install/hostPermissionsAdapter.ts +136 -0
- package/src/install/installThinLayer.ts +6 -1
- package/src/install/manifestFiles.ts +24 -0
- package/src/install/noGoDenyRows.ts +368 -0
- package/src/install/noGoRules.ts +438 -0
- package/src/install/ownershipLedger.ts +180 -0
- package/src/install/plan.ts +1 -1
- package/src/install/preflight.ts +42 -10
- package/src/install/preserve.ts +94 -12
- package/src/install/recordedOwnership.ts +121 -3
- package/src/install/rule_scope.ts +20 -3
- package/src/install/stagedRuntime.ts +528 -0
- package/src/install/toolsArg.ts +16 -0
- package/src/install/types.ts +23 -2
- package/src/install/userPin.ts +54 -0
- package/src/install/wizard-plan.ts +25 -4
- package/src/scripts/_cli/_doctor_emit.ts +24 -0
- package/src/scripts/_cli/cmd_brand_status.ts +223 -12
- package/src/scripts/_cli/cmd_ci_settle.ts +32 -0
- package/src/scripts/_cli/cmd_doctor.ts +23 -44
- package/src/scripts/_cli/cmd_route_explain.ts +176 -2
- package/src/scripts/_cli/cmd_uninstall.ts +270 -26
- package/src/scripts/_cli/cmd_update.ts +34 -1
- package/src/scripts/_cli/cmd_upgrade.ts +38 -2
- package/src/scripts/_cli/detection_report.ts +7 -0
- package/src/scripts/_cli/doctor_execution.ts +1 -2
- package/src/scripts/_cli/doctor_install_mode.ts +39 -0
- package/src/scripts/_cli/doctor_network_posture.ts +3 -3
- package/src/scripts/_cli/doctor_ownership_ledger.ts +126 -0
- package/src/scripts/_cli/doctor_update_verdict.ts +104 -0
- package/src/scripts/_cli/explain_last/scrubber.ts +9 -21
- package/src/scripts/_cli/upgrade_unattended.ts +548 -0
- package/src/scripts/_dispatch.bash +42 -9
- package/src/scripts/_lib/activation_ladder.ts +1 -1
- package/src/scripts/_lib/advisory_inventory.ts +405 -0
- package/src/scripts/_lib/advisory_notice.ts +270 -0
- package/src/scripts/_lib/advisory_sources.ts +752 -0
- package/src/scripts/_lib/advisory_verdicts.ts +363 -0
- package/src/scripts/_lib/agent_artifact_location.ts +177 -0
- package/src/scripts/_lib/agent_settings.ts +7 -12
- package/src/scripts/_lib/arrival_record.ts +217 -0
- package/src/scripts/_lib/asset_render_record.ts +247 -0
- package/src/scripts/_lib/billing_grant.ts +4 -2
- package/src/scripts/_lib/brand_voice_slot.ts +258 -0
- package/src/scripts/_lib/canary_status.ts +24 -0
- package/src/scripts/_lib/cc_transcript.ts +276 -0
- package/src/scripts/_lib/changelog_eras.ts +83 -0
- package/src/scripts/_lib/claim_phrases.ts +71 -0
- package/src/scripts/_lib/classify_update.ts +171 -0
- package/src/scripts/_lib/claude_builtin_names.ts +9 -4
- package/src/scripts/_lib/claude_hook_scope.ts +195 -0
- package/src/scripts/_lib/claude_settings_hooks.ts +118 -34
- package/src/scripts/_lib/codex_resident_set.ts +460 -0
- package/src/scripts/_lib/codex_skill_finder.ts +225 -0
- package/src/scripts/_lib/confusables.ts +19 -0
- package/src/scripts/_lib/consumer_impact.ts +199 -0
- package/src/scripts/_lib/content_class.ts +127 -0
- package/src/scripts/_lib/counted_probe.ts +68 -1
- package/src/scripts/_lib/credential_deny_rows.ts +151 -0
- package/src/scripts/_lib/credential_files.ts +367 -0
- package/src/scripts/_lib/delivery_arm_experiment.ts +2 -2
- package/src/scripts/_lib/depth_flip.ts +141 -0
- package/src/scripts/_lib/design_lock.ts +117 -0
- package/src/scripts/_lib/design_sync_ledger.ts +142 -0
- package/src/scripts/_lib/design_sync_plan.ts +177 -0
- package/src/scripts/_lib/design_sync_reconcile.ts +159 -0
- package/src/scripts/_lib/design_sync_verify.ts +99 -0
- package/src/scripts/_lib/design_system_claude_design.ts +323 -0
- package/src/scripts/_lib/design_system_import.ts +84 -6
- package/src/scripts/_lib/dispatch_import_closure.ts +42 -11
- package/src/scripts/_lib/egress_credential_env.ts +35 -0
- package/src/scripts/_lib/egress_engine.ts +22 -0
- package/src/scripts/_lib/egress_known_values.ts +223 -0
- package/src/scripts/_lib/egress_normalize.ts +67 -0
- package/src/scripts/_lib/egress_prefixes.ts +42 -0
- package/src/scripts/_lib/egress_rules.ts +896 -0
- package/src/scripts/_lib/egress_rules_linearity.ts +56 -0
- package/src/scripts/_lib/egress_sender_scan.ts +290 -0
- package/src/scripts/_lib/egress_session_table.ts +510 -0
- package/src/scripts/_lib/egress_text.ts +63 -0
- package/src/scripts/_lib/egress_token.ts +252 -0
- package/src/scripts/_lib/empty_cycles.ts +1 -1
- package/src/scripts/_lib/environment_detector.ts +45 -30
- package/src/scripts/_lib/exemption_shape.ts +75 -1
- package/src/scripts/_lib/floor_posture.ts +185 -0
- package/src/scripts/_lib/forge_protection.ts +140 -2
- package/src/scripts/_lib/global_deploy_inventory.ts +159 -6
- package/src/scripts/_lib/guidelines_lane.ts +12 -1
- package/src/scripts/_lib/hand_kinds.ts +65 -0
- package/src/scripts/_lib/headless_invocation.ts +3 -3
- package/src/scripts/_lib/host_capability.ts +34 -2
- package/src/scripts/_lib/host_env_write.ts +39 -18
- package/src/scripts/_lib/host_listing_model.ts +14 -7
- package/src/scripts/_lib/identifier_redaction.ts +26 -0
- package/src/scripts/_lib/impact_bump.ts +70 -0
- package/src/scripts/_lib/install_reach_checks.ts +53 -1
- package/src/scripts/_lib/installed_layer.ts +31 -0
- package/src/scripts/_lib/installed_layer_normalise.ts +75 -0
- package/src/scripts/_lib/instructions_loaded_classify.ts +75 -0
- package/src/scripts/_lib/instructions_loaded_event.ts +53 -0
- package/src/scripts/_lib/knowledge_global_redaction.ts +2 -2
- package/src/scripts/_lib/layer_form_corpus.ts +165 -0
- package/src/scripts/_lib/layer_form_decision.ts +248 -0
- package/src/scripts/_lib/layer_form_evidence.ts +112 -0
- package/src/scripts/_lib/lean_projection_mode.ts +32 -161
- package/src/scripts/_lib/llm_proposer_transport.ts +1 -0
- package/src/scripts/_lib/loop_guards.ts +8 -120
- package/src/scripts/_lib/major_surface.ts +207 -0
- package/src/scripts/_lib/mcp_bridge.ts +30 -69
- package/src/scripts/_lib/merge_clearance_record.ts +384 -0
- package/src/scripts/_lib/neighbour_census.ts +18 -1
- package/src/scripts/_lib/orchestration_record.ts +61 -0
- package/src/scripts/_lib/outcome_vocabularies.ts +15 -23
- package/src/scripts/_lib/pin_advice.ts +49 -0
- package/src/scripts/_lib/platform_anchor.ts +222 -0
- package/src/scripts/_lib/procedure_checks.ts +5 -0
- package/src/scripts/_lib/project_tree_form.ts +134 -0
- package/src/scripts/_lib/projection_key_migration.ts +122 -0
- package/src/scripts/_lib/prompt_shape.ts +13 -2
- package/src/scripts/_lib/provenance_verify.ts +272 -0
- package/src/scripts/_lib/quota_parked.ts +27 -1
- package/src/scripts/_lib/ratification_artifact.ts +64 -1
- package/src/scripts/_lib/ratification_subject.ts +508 -46
- package/src/scripts/_lib/release_findings_ingest.ts +52 -5
- package/src/scripts/_lib/release_highlights.ts +72 -2
- package/src/scripts/_lib/release_settings_surface.ts +392 -0
- package/src/scripts/_lib/review_round.ts +134 -0
- package/src/scripts/_lib/roadmap_checkboxes.ts +1 -1
- package/src/scripts/_lib/roadmap_slug_lock.ts +254 -0
- package/src/scripts/_lib/roadmap_step_size.ts +75 -0
- package/src/scripts/_lib/run_checkpoint.ts +60 -3
- package/src/scripts/_lib/runtime_wiring_checks.ts +15 -1
- package/src/scripts/_lib/scope_guard.sh +64 -5
- package/src/scripts/_lib/scoped_projection.ts +136 -3
- package/src/scripts/_lib/secret_detector.ts +24 -103
- package/src/scripts/_lib/security_fix.ts +429 -0
- package/src/scripts/_lib/security_fix_context.ts +133 -0
- package/src/scripts/_lib/self_repair.ts +69 -39
- package/src/scripts/_lib/self_repair_outgoing.ts +209 -0
- package/src/scripts/_lib/self_repair_payload.ts +86 -0
- package/src/scripts/_lib/session_eol.ts +3 -0
- package/src/scripts/_lib/session_pr_watch.ts +207 -0
- package/src/scripts/_lib/session_register.ts +51 -1
- package/src/scripts/_lib/session_tag.ts +51 -0
- package/src/scripts/_lib/settings_removed_keys.ts +30 -0
- package/src/scripts/_lib/settings_renamed_keys.ts +19 -5
- package/src/scripts/_lib/skill_catalogue.ts +66 -25
- package/src/scripts/_lib/skill_fork_pilot.ts +121 -0
- package/src/scripts/_lib/skill_leases.ts +203 -0
- package/src/scripts/_lib/skill_listing_overrides.ts +294 -0
- package/src/scripts/_lib/skill_materialisation.ts +388 -0
- package/src/scripts/_lib/skill_materialisation_gate.ts +210 -0
- package/src/scripts/_lib/skill_materialisation_lock.ts +149 -0
- package/src/scripts/_lib/skill_materialisation_triggers.ts +96 -0
- package/src/scripts/_lib/skill_origin.ts +21 -1
- package/src/scripts/_lib/skill_reach.ts +342 -0
- package/src/scripts/_lib/source_shape.ts +7 -2
- package/src/scripts/_lib/sqlite_guard.ts +1 -1
- package/src/scripts/_lib/step_anatomy.ts +330 -0
- package/src/scripts/_lib/subagent_capsule.ts +8 -2
- package/src/scripts/_lib/subagent_native_fields.ts +30 -0
- package/src/scripts/_lib/subagent_spawn.ts +36 -0
- package/src/scripts/_lib/subagent_steering.ts +367 -0
- package/src/scripts/_lib/svg_filled_counter.ts +287 -0
- package/src/scripts/_lib/svg_rules.ts +2 -0
- package/src/scripts/_lib/test_delta.ts +89 -6
- package/src/scripts/_lib/tier_downshift_verdict.ts +222 -0
- package/src/scripts/_lib/tool_result_census.ts +62 -0
- package/src/scripts/_lib/trigger_routers.ts +1 -0
- package/src/scripts/_lib/turnaround_throughput.ts +378 -0
- package/src/scripts/_lib/ui_surface.ts +22 -0
- package/src/scripts/_lib/unattended_gates.ts +100 -0
- package/src/scripts/_lib/undeployed_fixes.ts +34 -0
- package/src/scripts/_lib/update_check.ts +143 -12
- package/src/scripts/_lib/update_invite.ts +116 -0
- package/src/scripts/_lib/update_notice.ts +259 -0
- package/src/scripts/_lib/verify_clause.ts +4 -2
- package/src/scripts/_lib/version_order.ts +146 -0
- package/src/scripts/_lib/worker_reuse.ts +191 -0
- package/src/scripts/_lib/workspace_secrets.ts +273 -0
- package/src/scripts/_lib/worktree_git.ts +67 -0
- package/src/scripts/_lib/worktree_ignored.ts +116 -0
- package/src/scripts/adoption_status.ts +330 -3
- package/src/scripts/adr_cite_check.ts +93 -0
- package/src/scripts/advisories.ts +803 -0
- package/src/scripts/ai-image/adapters/flux.sh +1 -0
- package/src/scripts/ai-image/adapters/gemini-image.sh +1 -0
- package/src/scripts/ai-image/adapters/ideogram.sh +1 -0
- package/src/scripts/ai-image/adapters/recraft.sh +1 -0
- package/src/scripts/ai-video/adapters/comfyui.sh +1 -0
- package/src/scripts/ai-video/adapters/fal.sh +1 -0
- package/src/scripts/ai-video/adapters/gemini-veo.sh +1 -0
- package/src/scripts/ai-video/adapters/higgsfield.sh +1 -0
- package/src/scripts/ai-video/adapters/kling.sh +1 -0
- package/src/scripts/ai-video/adapters/musetalk.sh +1 -0
- package/src/scripts/ai-video/adapters/openai-images.sh +1 -0
- package/src/scripts/ai-video/adapters/replicate.sh +1 -0
- package/src/scripts/ai-video/adapters/sora.sh +1 -0
- package/src/scripts/ai-video/adapters/syncso.sh +1 -0
- package/src/scripts/ai-video/stitch.sh +115 -2
- package/src/scripts/ai_council/airgap.ts +1 -0
- package/src/scripts/ai_council/api_transport.ts +27 -4
- package/src/scripts/ai_council/budget_guard.ts +300 -11
- package/src/scripts/ai_council/bundler.ts +20 -29
- package/src/scripts/ai_council/chairman.ts +17 -2
- package/src/scripts/ai_council/cli_agency_bounds.ts +158 -0
- package/src/scripts/ai_council/cli_launch_env.ts +54 -0
- package/src/scripts/ai_council/cli_least_agency_canary.ts +18 -2
- package/src/scripts/ai_council/clients.ts +55 -73
- package/src/scripts/ai_council/config.ts +16 -22
- package/src/scripts/ai_council/council_egress.ts +167 -0
- package/src/scripts/ai_council/exposure_ledger.ts +117 -0
- package/src/scripts/ai_council/free_hand_shadow.ts +276 -0
- package/src/scripts/ai_council/free_route.ts +216 -0
- package/src/scripts/ai_council/free_route_catalog.ts +173 -0
- package/src/scripts/ai_council/free_route_client.ts +95 -0
- package/src/scripts/ai_council/free_rung.ts +61 -0
- package/src/scripts/ai_council/hand_payload.ts +230 -0
- package/src/scripts/ai_council/hand_schemas.ts +123 -0
- package/src/scripts/ai_council/jury_aggregate.ts +155 -1
- package/src/scripts/ai_council/kind_flip.ts +221 -0
- package/src/scripts/ai_council/kind_flip_state.ts +19 -0
- package/src/scripts/ai_council/learn_low_impact_preview.ts +50 -22
- package/src/scripts/ai_council/modification_review.ts +98 -5
- package/src/scripts/ai_council/necessity.ts +7 -0
- package/src/scripts/ai_council/orchestrator.ts +16 -16
- package/src/scripts/ai_council/pricing.ts +10 -0
- package/src/scripts/ai_council/redact_low_impact_entry.ts +5 -2
- package/src/scripts/ai_council/response_render.ts +27 -4
- package/src/scripts/ai_council/round_reservations.ts +119 -0
- package/src/scripts/ai_council/route_chooser.ts +161 -0
- package/src/scripts/ai_council/route_liveness.ts +152 -0
- package/src/scripts/ai_council/route_member.ts +52 -0
- package/src/scripts/ai_council/seat_policy.ts +40 -0
- package/src/scripts/ai_council/seat_resume.ts +40 -0
- package/src/scripts/ai_council/shadow_dispatch.ts +13 -3
- package/src/scripts/ai_council/spend_gate.ts +18 -2
- package/src/scripts/ai_council/status_surface.ts +37 -0
- package/src/scripts/ai_council/transport_resolver.ts +15 -18
- package/src/scripts/analysis_analysts.ts +226 -0
- package/src/scripts/analysis_anchors.ts +140 -0
- package/src/scripts/analysis_and_optimize.ts +44 -0
- package/src/scripts/analysis_emit.ts +150 -0
- package/src/scripts/analysis_exchange.ts +186 -0
- package/src/scripts/analysis_gate.ts +158 -0
- package/src/scripts/analysis_inbox_final.ts +173 -0
- package/src/scripts/analysis_ledger.ts +119 -0
- package/src/scripts/analysis_pr_optimize.ts +219 -0
- package/src/scripts/analysis_pr_review.ts +240 -0
- package/src/scripts/analysis_pr_target.ts +121 -0
- package/src/scripts/analysis_prompts.ts +130 -0
- package/src/scripts/analysis_publish.ts +358 -0
- package/src/scripts/analysis_questions.ts +78 -0
- package/src/scripts/analysis_run.ts +248 -0
- package/src/scripts/analysis_run_record.ts +210 -0
- package/src/scripts/analysis_target.ts +343 -0
- package/src/scripts/analysis_validate.ts +161 -0
- package/src/scripts/anchor_eval_falsify.ts +1 -1
- package/src/scripts/arrival_report.ts +115 -0
- package/src/scripts/ask_transport.ts +284 -35
- package/src/scripts/backfill_model_tier.ts +4 -5
- package/src/scripts/before_complete_hook.ts +48 -2
- package/src/scripts/bench_hook_latency.ts +3 -3
- package/src/scripts/bench_procedure_cursor.ts +440 -0
- package/src/scripts/bootstrap.sh +3 -3
- package/src/scripts/build_exit_code_register.ts +440 -0
- package/src/scripts/build_proof.ts +23 -1
- package/src/scripts/cache_realization_report.ts +155 -14
- package/src/scripts/canary_liveness.ts +117 -0
- package/src/scripts/chat_history.ts +12 -15
- package/src/scripts/check_account_surface.ts +318 -0
- package/src/scripts/check_agent_artifact_location.ts +17 -160
- package/src/scripts/check_bundle_path_leakage.ts +6 -0
- package/src/scripts/check_ci_local_parity.ts +21 -13
- package/src/scripts/check_claims.ts +77 -2
- package/src/scripts/check_completion_review.ts +34 -1
- package/src/scripts/check_concern_admissions.ts +41 -5
- package/src/scripts/check_consumer_scope_flip.ts +1 -1
- package/src/scripts/check_context_paths.ts +2 -0
- package/src/scripts/check_council_layout.ts +9 -0
- package/src/scripts/check_credential_spelling.ts +267 -0
- package/src/scripts/check_egress_mutations.ts +239 -0
- package/src/scripts/check_enforcement_coverage.ts +16 -3
- package/src/scripts/check_estate_count.ts +16 -1
- package/src/scripts/check_finding_dispositions.ts +147 -0
- package/src/scripts/check_gate_coverage.ts +123 -21
- package/src/scripts/check_gate_reachability.ts +16 -2
- package/src/scripts/check_generator_sync.ts +46 -0
- package/src/scripts/check_hook_bundle_composition.ts +139 -1
- package/src/scripts/check_host_docs_digest.ts +142 -5
- package/src/scripts/check_kernel_edit_ratified.ts +301 -76
- package/src/scripts/check_kernel_rule_bundle.ts +14 -10
- package/src/scripts/check_knowledge_cards.ts +83 -3
- package/src/scripts/check_memory.ts +13 -3
- package/src/scripts/check_pack_size.ts +1 -1
- package/src/scripts/check_permission_deny_syntax.ts +247 -0
- package/src/scripts/check_platform_anchor.ts +243 -0
- package/src/scripts/check_proposal.ts +183 -1
- package/src/scripts/check_reach_channels.ts +5 -3
- package/src/scripts/check_references.ts +5 -2
- package/src/scripts/check_release_manifest_content.ts +33 -0
- package/src/scripts/check_release_pr_shape.ts +5 -0
- package/src/scripts/check_rule_invariants.ts +9 -1
- package/src/scripts/check_skill_body_budget.ts +343 -0
- package/src/scripts/check_skill_requires.ts +137 -1
- package/src/scripts/check_step_receipts.ts +246 -0
- package/src/scripts/check_structural_breaking.ts +7 -1
- package/src/scripts/check_suppression_hygiene.ts +8 -0
- package/src/scripts/check_test_weakening.ts +14 -0
- package/src/scripts/check_token_quality_golden.ts +5 -1
- package/src/scripts/check_update_banner.ts +50 -3
- package/src/scripts/check_verify_expectation_delta.ts +2 -1
- package/src/scripts/check_voice_lexicon.ts +531 -0
- package/src/scripts/ci_os_attribution.ts +327 -0
- package/src/scripts/ci_platform_scope.ts +69 -0
- package/src/scripts/ci_settle.ts +4 -1
- package/src/scripts/ci_status.ts +0 -1
- package/src/scripts/ci_time_to_green.ts +748 -0
- package/src/scripts/classify_merge_risk.ts +407 -19
- package/src/scripts/code_graph/sqlite_store.ts +1 -1
- package/src/scripts/compile_trigger_evals.ts +353 -0
- package/src/scripts/condense.ts +25 -31
- package/src/scripts/consumer_matrix.ts +61 -3
- package/src/scripts/council_availability_hook.ts +12 -4
- package/src/scripts/council_cli.ts +48 -38
- package/src/scripts/cross_repo_retrieve.ts +9 -72
- package/src/scripts/design_lock.ts +106 -0
- package/src/scripts/design_slop_rules.ts +30 -0
- package/src/scripts/design_sync.ts +264 -0
- package/src/scripts/design_system_import.ts +30 -13
- package/src/scripts/dispatch_economy_report.ts +46 -1
- package/src/scripts/dispatch_r2_reviewer.ts +41 -5
- package/src/scripts/egress_canary.ts +166 -0
- package/src/scripts/egress_sender_census.ts +101 -0
- package/src/scripts/external_sources_denylist.json +94 -12
- package/src/scripts/generate_catalog.ts +6 -2
- package/src/scripts/generate_owned_digest.ts +163 -0
- package/src/scripts/generate_reference_toc.ts +143 -0
- package/src/scripts/generate_subagent_floor.ts +11 -1
- package/src/scripts/handoff_context_hook.ts +34 -0
- package/src/scripts/hook_carrier_census.ts +263 -0
- package/src/scripts/hook_chunks.d.mts +12 -0
- package/src/scripts/hook_chunks.mjs +114 -0
- package/src/scripts/hook_manifest.json +1 -1
- package/src/scripts/hook_manifest.yaml +65 -42
- package/src/scripts/hooks/block_config_weakening.ts +127 -3
- package/src/scripts/hooks/block_credential_reads.ts +165 -0
- package/src/scripts/hooks/block_no_verify.ts +47 -23
- package/src/scripts/hooks/block_speaking_inbox_dir.ts +38 -7
- package/src/scripts/hooks/category_a.ts +202 -25
- package/src/scripts/hooks/concern_failure_policy.ts +6 -6
- package/src/scripts/hooks/concern_registry.ts +31 -6
- package/src/scripts/hooks/concern_registry_types.ts +11 -0
- package/src/scripts/hooks/delegation_nudge_hook.ts +105 -15
- package/src/scripts/hooks/design_pass_hook.ts +42 -10
- package/src/scripts/hooks/dispatch_hook.ts +13 -12
- package/src/scripts/hooks/egress_engine_loader.ts +125 -0
- package/src/scripts/hooks/egress_stage.ts +440 -0
- package/src/scripts/hooks/hook_stdin.ts +29 -4
- package/src/scripts/hooks/host_docs_pages.ts +194 -0
- package/src/scripts/hooks/host_docs_pages.yaml +75 -0
- package/src/scripts/hooks/host_lowering.json +1 -1
- package/src/scripts/hooks/host_lowering.yaml +22 -21
- package/src/scripts/hooks/host_rate_marker_hook.ts +73 -0
- package/src/scripts/hooks/instructions_observer_hook.ts +170 -0
- package/src/scripts/hooks/interruption_ledger_hook.ts +1 -1
- package/src/scripts/hooks/lazy_concern.ts +148 -0
- package/src/scripts/hooks/orchestration_record_hook.ts +80 -2
- package/src/scripts/hooks/payload_stub.ts +16 -6
- package/src/scripts/hooks/permission_gate.ts +7 -7
- package/src/scripts/hooks/push_settle_hook.ts +32 -3
- package/src/scripts/hooks/replay_hook.ts +43 -0
- package/src/scripts/hooks/reread_guard_hook.ts +87 -10
- package/src/scripts/hooks/rtk_wrap_hook.ts +4 -3
- package/src/scripts/hooks/rule_inject_hook.ts +8 -1
- package/src/scripts/hooks/session_eol_hook.ts +48 -1
- package/src/scripts/hooks/source_first_gate_hook.ts +6 -8
- package/src/scripts/hooks/spawn_guard_shadow_hook.ts +203 -10
- package/src/scripts/hooks/state_io.ts +2 -2
- package/src/scripts/hooks/svg_obligation.ts +75 -19
- package/src/scripts/hooks/tool_result_bytes_hook.ts +14 -5
- package/src/scripts/hooks/turn_end_gate_hook.ts +1 -1
- package/src/scripts/hooks/ui_route_nudge_hook.ts +2 -12
- package/src/scripts/hooks_doctor.ts +31 -0
- package/src/scripts/hooks_status.ts +58 -3
- package/src/scripts/inbox_source_census.ts +74 -13
- package/src/scripts/install +25 -3
- package/src/scripts/install.ts +60 -91
- package/src/scripts/interruption_report.ts +11 -1
- package/src/scripts/layer_baseline_report.ts +267 -0
- package/src/scripts/learning_sidecar.ts +1 -1
- package/src/scripts/lint_agents_layout.ts +3 -0
- package/src/scripts/lint_blocker_citations.ts +104 -0
- package/src/scripts/lint_breaking_changes_index.ts +40 -7
- package/src/scripts/lint_consolidation_lineage.ts +144 -16
- package/src/scripts/lint_consumer_internal_refs.ts +90 -42
- package/src/scripts/lint_context_spine_usage.ts +21 -0
- package/src/scripts/lint_design_antipattern_parity.ts +39 -7
- package/src/scripts/lint_evidence_artifacts.ts +31 -0
- package/src/scripts/lint_example_fences.ts +11 -2
- package/src/scripts/lint_ghostwriter_source.ts +42 -10
- package/src/scripts/lint_hook_manifest.ts +94 -0
- package/src/scripts/lint_marketplace_install_completeness.ts +4 -0
- package/src/scripts/lint_mcp_config_security.ts +9 -11
- package/src/scripts/lint_plan_risk_register.ts +28 -1
- package/src/scripts/lint_positioning.ts +4 -4
- package/src/scripts/lint_provenance.ts +1 -0
- package/src/scripts/lint_roadmap_blockers.ts +65 -4
- package/src/scripts/lint_roadmap_complexity.ts +98 -0
- package/src/scripts/lint_skill_link_reach.ts +251 -9
- package/src/scripts/lint_skill_procedures.ts +252 -0
- package/src/scripts/lint_skill_scripts_readonly.ts +12 -1
- package/src/scripts/lint_subagent_determinism.ts +14 -1
- package/src/scripts/lint_ticked_unmet_criteria.ts +300 -21
- package/src/scripts/mcp_registry_submit.sh +2 -2
- package/src/scripts/mcp_server/consumer_tool_catalog.json +4 -4
- package/src/scripts/mcp_server/suggest_skill.ts +89 -4
- package/src/scripts/mcp_server/tools.ts +2 -33
- package/src/scripts/measure_skill_ranker_baseline.ts +203 -5
- package/src/scripts/measure_turn_end_gate.ts +61 -1
- package/src/scripts/merge_clearance.ts +225 -0
- package/src/scripts/migrate_command_suggestions.ts +1 -1
- package/src/scripts/network_sources.ts +236 -0
- package/src/scripts/no_go_deny_rows.ts +225 -0
- package/src/scripts/orchestration_record.ts +15 -2
- package/src/scripts/plan_test_shards.ts +103 -0
- package/src/scripts/pr_url_reminder_hook.ts +10 -0
- package/src/scripts/print_required_checks.ts +5 -5
- package/src/scripts/probe_depth_shadow.ts +406 -0
- package/src/scripts/probe_turnaround.ts +342 -10
- package/src/scripts/ratification_subject.ts +176 -0
- package/src/scripts/rdp_gate_classify.ts +1 -0
- package/src/scripts/rdp_quality_eval.ts +1 -0
- package/src/scripts/release.ts +26 -55
- package/src/scripts/release_drill.ts +52 -23
- package/src/scripts/release_env.ts +37 -0
- package/src/scripts/release_publication.ts +11 -1
- package/src/scripts/report_consumer_gate_reach.ts +233 -0
- package/src/scripts/report_merge_gate_load.ts +295 -0
- package/src/scripts/report_project_contract.ts +123 -0
- package/src/scripts/report_reducible_classes.ts +342 -0
- package/src/scripts/report_required_checks_drift.ts +5 -3
- package/src/scripts/report_skill_host_census.ts +199 -0
- package/src/scripts/report_standing_payload_by_host.ts +7 -7
- package/src/scripts/retro.ts +758 -0
- package/src/scripts/retro_facts.ts +575 -0
- package/src/scripts/retro_queue.ts +739 -0
- package/src/scripts/retro_session_facts.ts +218 -0
- package/src/scripts/retro_sweep.ts +493 -0
- package/src/scripts/retro_triage.ts +126 -0
- package/src/scripts/roadmap_context.ts +2 -2
- package/src/scripts/roadmap_drain_queue.ts +601 -0
- package/src/scripts/run_supervise.ts +24 -2
- package/src/scripts/schemas/agent-settings.schema.json +0 -16
- package/src/scripts/schemas/command.schema.json +3 -3
- package/src/scripts/schemas/review-findings.schema.json +8 -0
- package/src/scripts/schemas/skill.schema.json +7 -6
- package/src/scripts/schemas/subagent.schema.json +33 -2
- package/src/scripts/score_skill_selection.ts +5 -2
- package/src/scripts/second_brain_retrieval.ts +1 -0
- package/src/scripts/second_brain_run.ts +1 -0
- package/src/scripts/self_repair_cli.ts +563 -87
- package/src/scripts/self_review_gate.ts +59 -4
- package/src/scripts/session_register_hook.ts +91 -4
- package/src/scripts/sessions_cli.ts +100 -5
- package/src/scripts/skill_collision_clusters.ts +1 -1
- package/src/scripts/skill_tools/score_skill_relevance.ts +31 -2
- package/src/scripts/skill_trigger_eval.ts +4 -2
- package/src/scripts/source_adapters.ts +183 -0
- package/src/scripts/step_receipt.ts +100 -0
- package/src/scripts/sync_pr_branch.ts +4 -0
- package/src/scripts/test_council_qualification.ts +1 -1
- package/src/scripts/trigger_eval_grandfather.json +3 -49
- package/src/scripts/trigger_eval_rotation.ts +31 -3
- package/src/scripts/ui_conformance_probe.ts +405 -1
- package/src/scripts/update_counts.ts +230 -11
- package/src/scripts/update_invite_hook.ts +245 -0
- package/src/scripts/update_notice_hook.ts +298 -0
- package/src/scripts/validate_frontmatter.ts +85 -0
- package/src/scripts/worker_reuse_shadow_report.ts +121 -0
- package/src/scripts/worktree_cleanup_check.ts +915 -121
- package/src/server/io/yamlIO.ts +2 -2
- package/src/server/schemas/settings.ts +37 -23
- package/src/shared/brandTokenDocument.ts +46 -0
- package/src/shared/brandTokenPaths.ts +43 -0
- package/src/shared/settingsCarveOut.ts +0 -8
- package/src/shared/skillRanking.ts +106 -5
- package/src/shared/userMd/formAdapter.ts +15 -1
- package/src/shared/userMd/schema.ts +22 -0
- package/src/templates/agent-user.md +4 -0
- package/src/templates/agent-user.yml +4 -0
- package/dist/cli-delegate/chunk-4DBG5K7M.js +0 -1123
- package/dist/cli-delegate/chunk-523HCFYO.js +0 -90
- package/dist/cli-delegate/chunk-AL3RZ22D.js +0 -74
- package/dist/cli-delegate/chunk-KB5FZ655.js +0 -208
- package/dist/cli-delegate/chunk-MDPPKQCQ.js +0 -875
- package/dist/cli-delegate/chunk-OAFSJBHH.js +0 -272
- package/dist/ui/assets/index-C3djEJah.js +0 -23
- package/src/scripts/_lib/continuation_ladder.ts +0 -335
- package/src/scripts/hooks/run_continuation_hook.ts +0 -1524
|
@@ -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;
|
|
@@ -90,7 +90,7 @@ import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
|
90
90
|
import { appendDischarge, stamp } from '../_lib/obligations.js';
|
|
91
91
|
import { compareInputs } from '../_lib/probe_inputs.js';
|
|
92
92
|
import { trigger_matches, type Trigger } from '../_lib/router_match.js';
|
|
93
|
-
import { isUiPath, isUiTreePath } from '../_lib/ui_surface.js';
|
|
93
|
+
import { HANDOVER_SHAPES, isUiPath, isUiTreePath } from '../_lib/ui_surface.js';
|
|
94
94
|
import { loadDesignContext, scanFile } from '../lint_design_slop.js';
|
|
95
95
|
import { readHookStdin } from './hook_stdin.js';
|
|
96
96
|
import { CHUNK_BASENAME, loadSvgScan } from './svg_rules_loader.js';
|
|
@@ -239,7 +239,7 @@ export interface ConformanceOptions {
|
|
|
239
239
|
* The file-based half of `src/rules/design-fidelity.md`'s `triggers:` set — the
|
|
240
240
|
* shipped answer to "is this file a provided design handover?".
|
|
241
241
|
*
|
|
242
|
-
*
|
|
242
|
+
* A CONSTANT (the shared `HANDOVER_SHAPES`), MATCHED BY THE SHIPPED MATCHER. Reading and parsing the
|
|
243
243
|
* rule's frontmatter here would put a YAML load on `post_tool_use`, the hottest
|
|
244
244
|
* slot this concern binds, and would depend on a rule path that differs between
|
|
245
245
|
* this repository and an installed consumer. The drift that a constant invites
|
|
@@ -248,18 +248,14 @@ export interface ConformanceOptions {
|
|
|
248
248
|
* and not here fails CI.
|
|
249
249
|
*
|
|
250
250
|
* THE HONEST REACH. Only the two HTML patterns are reachable through this
|
|
251
|
-
* carrier.
|
|
251
|
+
* carrier. Both path prefixes name JSON and token files, which
|
|
252
252
|
* `isUiSurface` does not admit, so `main` returns before the verdict is
|
|
253
253
|
* computed. Widening `isUiSurface` to admit them would change the UI-turn
|
|
254
254
|
* denominator that the consultation-rate measurement is defined against, which
|
|
255
|
-
* is a different decision than this one. The
|
|
256
|
-
* rule and
|
|
255
|
+
* is a different decision than this one. The prefixes stay for parity with the
|
|
256
|
+
* rule and are stated as unreachable rather than quietly dropped.
|
|
257
257
|
*/
|
|
258
|
-
export const HANDOVER_TRIGGERS: readonly Trigger[] =
|
|
259
|
-
{ file_pattern: '*design.html' },
|
|
260
|
-
{ file_pattern: '*.dc.html' },
|
|
261
|
-
{ path_prefix: '.claude/design-system/' },
|
|
262
|
-
];
|
|
258
|
+
export const HANDOVER_TRIGGERS: readonly Trigger[] = HANDOVER_SHAPES;
|
|
263
259
|
|
|
264
260
|
/** True when any of the paths this turn wrote is a provided design handover. */
|
|
265
261
|
export function handoverTouched(paths: readonly string[]): boolean {
|
|
@@ -287,6 +283,16 @@ export function conformanceVerdict(root: string, opts: ConformanceOptions = {}):
|
|
|
287
283
|
inputs?: unknown;
|
|
288
284
|
dimensions?: { dimension: string; status: string; findings: number | null; reason?: string }[];
|
|
289
285
|
findings?: { dimension?: string; probe_id?: string; expected?: string; observed?: string }[];
|
|
286
|
+
page_signature?: {
|
|
287
|
+
status?: string;
|
|
288
|
+
reason?: string;
|
|
289
|
+
widths?: {
|
|
290
|
+
width?: string;
|
|
291
|
+
leaves?: unknown[];
|
|
292
|
+
arrangement?: unknown[];
|
|
293
|
+
overflow?: { reference?: boolean; target?: boolean };
|
|
294
|
+
}[];
|
|
295
|
+
};
|
|
290
296
|
};
|
|
291
297
|
|
|
292
298
|
// Before anything is counted. A finding count measured against inputs
|
|
@@ -336,6 +342,32 @@ export function conformanceVerdict(root: string, opts: ConformanceOptions = {}):
|
|
|
336
342
|
`${addedElements.map((f) => f.probe_id ?? '?').join(', ')} — added, not ported`,
|
|
337
343
|
);
|
|
338
344
|
}
|
|
345
|
+
// ONE LINE, BELOW THE LINES THIS ALREADY PRINTS, and present only when
|
|
346
|
+
// the artefact carries the field — which is only when the reference
|
|
347
|
+
// collected no handle at all. The headline and the shadow-verdict trailer
|
|
348
|
+
// are byte-identical to what the same artefact without the field
|
|
349
|
+
// produces: this adds a line, it does not change one.
|
|
350
|
+
//
|
|
351
|
+
// The counts are per width and the overflow is a PAIR, never a change
|
|
352
|
+
// flag. A reader who is told "overflow changed" has to go and find out
|
|
353
|
+
// which way; a reader who is told `false/true` already knows.
|
|
354
|
+
const sig = a.page_signature;
|
|
355
|
+
if (sig) {
|
|
356
|
+
if (sig.status === 'read') {
|
|
357
|
+
const perWidth = (sig.widths ?? [])
|
|
358
|
+
.map((w) => {
|
|
359
|
+
const changed = (w.leaves?.length ?? 0) + (w.arrangement?.length ?? 0);
|
|
360
|
+
return `${w.width}: ${changed} changed, overflow ${w.overflow?.reference}/${w.overflow?.target}`;
|
|
361
|
+
})
|
|
362
|
+
.join('; ');
|
|
363
|
+
parts.push(
|
|
364
|
+
` · page signature (the reference carried no handle, so the five rows above could ask ` +
|
|
365
|
+
`nothing): ${perWidth} — kinds of leaf and of container, never nodes; not a finding`,
|
|
366
|
+
);
|
|
367
|
+
} else {
|
|
368
|
+
parts.push(` · page signature: not available — ${sig.reason ?? 'no reason given'}`);
|
|
369
|
+
}
|
|
370
|
+
}
|
|
339
371
|
parts.push(
|
|
340
372
|
inputs.verdict === 'unchanged'
|
|
341
373
|
? ' · inputs: unchanged since the probe ran'
|
|
@@ -47,7 +47,7 @@ import {
|
|
|
47
47
|
} from "./state_io.js";
|
|
48
48
|
import { log_dispatch_issue, fix_hint } from "./dispatch_issues.js";
|
|
49
49
|
import { shapeAndRecord, type ConcernMessage } from "./injection_budget.js";
|
|
50
|
-
import {
|
|
50
|
+
import { resolveConcernMain, type ConcernMain } from "./concern_registry.js";
|
|
51
51
|
import {
|
|
52
52
|
setHookStdinOverride,
|
|
53
53
|
clearHookStdinOverride,
|
|
@@ -56,6 +56,7 @@ import { emitFor, type PermissionDecision, type Severity } from "./host_semantic
|
|
|
56
56
|
import { _concern_permission_verdict, _payload_tool_name, _permission_for } from "./permission_gate.js";
|
|
57
57
|
export { _concern_permission_verdict, _payload_tool_input, _payload_tool_name, _permission_for, _working_tree_root } from "./permission_gate.js";
|
|
58
58
|
import { _concern_body_classes, planPayloadShapes } from "./payload_stub.js";
|
|
59
|
+
import { attributeRefusal, egressInjection, egressViewFor, runEgressStage } from "./egress_stage.js";
|
|
59
60
|
import { resolveSessionRole, type SessionRole } from "../_lib/session_role.js";
|
|
60
61
|
import { stdinReadFailure, denyOnStdinFailure } from './stdin_failure_policy.js';
|
|
61
62
|
export { stdinReadFailure, denyOnStdinFailure, _is_fail_closed_blocking } from './stdin_failure_policy.js';
|
|
@@ -678,8 +679,8 @@ function _run_concern(concern: ConcernDef, envelope: JsonObject): RunResult {
|
|
|
678
679
|
// In-process fast path — the default whenever the concern is in the
|
|
679
680
|
// static registry (all manifest concerns; parity is CI-enforced).
|
|
680
681
|
if (process.env["AGENT_CONFIG_HOOKS_ISOLATED"] !== "1") {
|
|
681
|
-
const inproc =
|
|
682
|
-
if (inproc !==
|
|
682
|
+
const inproc = resolveConcernMain(String(concern["script"]));
|
|
683
|
+
if (inproc !== null) {
|
|
683
684
|
return _run_concern_inproc(inproc, concern, envelope);
|
|
684
685
|
}
|
|
685
686
|
}
|
|
@@ -1276,12 +1277,11 @@ export function main(argv?: string[]): number {
|
|
|
1276
1277
|
// Per-concern `tools:` filter (see _concern_matches_tool). Applied here so it
|
|
1277
1278
|
// is one place, after the envelope exists and before any concern is spawned.
|
|
1278
1279
|
const tool_name = _payload_tool_name(envelope);
|
|
1279
|
-
//
|
|
1280
|
-
//
|
|
1281
|
-
|
|
1282
|
-
//
|
|
1283
|
-
|
|
1284
|
-
// every non-tool event, which is why those pay nothing at all.
|
|
1280
|
+
// The egress stage (ADR-285) builds the placeholder view before any concern
|
|
1281
|
+
// runs; `egressViewFor` decides which concern gets which view.
|
|
1282
|
+
const egress = runEgressStage(envelope);
|
|
1283
|
+
// What the concerns inject back into the session passes the engine too (3.5).
|
|
1284
|
+
const injected = egressInjection(String(envelope["workspace_root"] || process.cwd()));
|
|
1285
1285
|
// Payload opt-in (step 2.1). One planner owns the whole decision — which
|
|
1286
1286
|
// classes are present, which any concern loses, the single measurement pass,
|
|
1287
1287
|
// and the at-most-four envelope shapes — so the loop below reads a shape
|
|
@@ -1293,12 +1293,13 @@ export function main(argv?: string[]): number {
|
|
|
1293
1293
|
const shapes = planPayloadShapes(
|
|
1294
1294
|
envelope,
|
|
1295
1295
|
keep_by_concern.map(([, keep]) => keep),
|
|
1296
|
+
egress.placeholder,
|
|
1296
1297
|
);
|
|
1297
1298
|
for (const [concern, keep_classes] of keep_by_concern) {
|
|
1298
1299
|
if (!_concern_matches_tool(concern, tool_name)) {
|
|
1299
1300
|
continue;
|
|
1300
1301
|
}
|
|
1301
|
-
const concern_envelope = shapes.shapeFor(keep_classes);
|
|
1302
|
+
const concern_envelope = shapes.shapeFor(keep_classes, egressViewFor(concern));
|
|
1302
1303
|
const stubs_served = shapes.stubsFor(keep_classes);
|
|
1303
1304
|
// What was actually SERVED, not what was declared. Recording the
|
|
1304
1305
|
// declaration made the record wrong in both directions on a body-less
|
|
@@ -1365,7 +1366,7 @@ export function main(argv?: string[]): number {
|
|
|
1365
1366
|
: "";
|
|
1366
1367
|
const message = [stated, extra].filter(Boolean).join("\n\n");
|
|
1367
1368
|
if (message) {
|
|
1368
|
-
concern_messages.push({ rc, text: message, def: concern });
|
|
1369
|
+
concern_messages.push({ rc, text: attributeRefusal(String(concern["name"]), rc === EXIT_BLOCK, injected(message)), def: concern });
|
|
1369
1370
|
}
|
|
1370
1371
|
if (
|
|
1371
1372
|
args.event === "session_start" &&
|
|
@@ -1373,7 +1374,7 @@ export function main(argv?: string[]): number {
|
|
|
1373
1374
|
typeof reply["context"] === "string" &&
|
|
1374
1375
|
(reply["context"] as string).trim()
|
|
1375
1376
|
) {
|
|
1376
|
-
context_blocks.push((reply["context"] as string).trim());
|
|
1377
|
+
context_blocks.push(injected((reply["context"] as string).trim()));
|
|
1377
1378
|
}
|
|
1378
1379
|
feedback_entries.push({
|
|
1379
1380
|
concern: String(concern["name"]),
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Loads the egress engine (`_lib/egress_engine.ts`) on demand.
|
|
3
|
+
*
|
|
4
|
+
* WHY A CHUNK. The engine is about 19 KB of `dist/hooks/dispatch.js`, the one
|
|
5
|
+
* bundle every hook event loads, while the egress stage's shipped mode is `off`
|
|
6
|
+
* and never touches it. With 3 KB of headroom under the bundle ceiling and
|
|
7
|
+
* 12–15 KB of engine growth queued, an AI council of two providers chose on
|
|
8
|
+
* 2026-10-18 to emit the engine as `egress_engine.chunk.cjs` beside the bundle
|
|
9
|
+
* rather than raise the ceiling — the shape `svg_rules_loader.ts` set.
|
|
10
|
+
*
|
|
11
|
+
* WHY THIS ONE IS STRICTER THAN THE SVG LOADER. A missing SVG rule set costs a
|
|
12
|
+
* lint finding; a missing egress engine would let content through unscanned.
|
|
13
|
+
* So a chunk is refused when its digest does not match its sidecar, when there
|
|
14
|
+
* is no sidecar to match, and when its `ENGINE_SCHEMA` is not the one this
|
|
15
|
+
* loader was built against — a correctly digested chunk of another release is
|
|
16
|
+
* a load failure, never stale rules. Every failure is a value, never a throw,
|
|
17
|
+
* and each caller decides what an unavailable engine means for it: the stage
|
|
18
|
+
* withholds bodies in `protect` and `strict` and records the miss in
|
|
19
|
+
* `observe`; the subagent capsule rejects the envelope.
|
|
20
|
+
*
|
|
21
|
+
* WHY `require` AND THE COMPUTED SPECIFIER — see `svg_rules_loader.ts`: a
|
|
22
|
+
* concern is synchronous, and a literal specifier would be inlined by esbuild,
|
|
23
|
+
* which is the cost this exists to avoid.
|
|
24
|
+
*/
|
|
25
|
+
import * as fs from 'node:fs';
|
|
26
|
+
import { createRequire } from 'node:module';
|
|
27
|
+
import * as path from 'node:path';
|
|
28
|
+
import { fileURLToPath } from 'node:url';
|
|
29
|
+
|
|
30
|
+
import type * as Engine from '../_lib/egress_engine.js';
|
|
31
|
+
import { verifyBundle } from './bundle_integrity.js';
|
|
32
|
+
|
|
33
|
+
/** The engine's exports. Type-only, so no engine byte reaches the bundle. */
|
|
34
|
+
export type EgressEngine = typeof Engine;
|
|
35
|
+
|
|
36
|
+
/** The schema this loader accepts. Must equal `ENGINE_SCHEMA` in the engine. */
|
|
37
|
+
export const EXPECTED_ENGINE_SCHEMA = 2;
|
|
38
|
+
|
|
39
|
+
export const ENGINE_CHUNK_BASENAME = 'egress_engine.chunk.cjs';
|
|
40
|
+
|
|
41
|
+
export type EngineLoad =
|
|
42
|
+
| { readonly ok: true; readonly engine: EgressEngine }
|
|
43
|
+
| { readonly ok: false; readonly reason: 'missing' | 'digest' | 'schema' | 'invalid' };
|
|
44
|
+
|
|
45
|
+
declare const __AGENT_CONFIG_BUNDLE__: boolean | undefined;
|
|
46
|
+
|
|
47
|
+
function isBundled(): boolean {
|
|
48
|
+
return typeof __AGENT_CONFIG_BUNDLE__ !== 'undefined' && __AGENT_CONFIG_BUNDLE__;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/** Where the engine loads from: the sibling chunk when bundled, the source module otherwise. */
|
|
52
|
+
export function engineSpecifier(selfUrl: string, bundled: boolean): string {
|
|
53
|
+
const selfPath = fileURLToPath(selfUrl);
|
|
54
|
+
const dir = path.dirname(selfPath);
|
|
55
|
+
if (bundled) return path.join(dir, ENGINE_CHUNK_BASENAME);
|
|
56
|
+
const ext = selfPath.endsWith('.ts') ? '.ts' : '.js';
|
|
57
|
+
return path.join(dir, '..', '_lib', `egress_engine${ext}`);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* From source the engine is TypeScript whose imports name `.js` siblings, which
|
|
62
|
+
* a plain `require` cannot resolve outside a `tsx` process (a test runner, for
|
|
63
|
+
* one). `tsx`'s own require resolves them; the specifier is computed so esbuild
|
|
64
|
+
* never pulls `tsx` into the bundle, where this branch is not taken. Without
|
|
65
|
+
* `tsx` the plain require fails on such a module, which is `invalid`: the
|
|
66
|
+
* source path is a development path, and it fails closed like every other.
|
|
67
|
+
*/
|
|
68
|
+
function sourceRequire(req: NodeJS.Require): (id: string, from: string) => unknown {
|
|
69
|
+
try {
|
|
70
|
+
const api = req(['tsx', 'cjs', 'api'].join('/')) as { require?: (id: string, from: string) => unknown };
|
|
71
|
+
if (typeof api.require === 'function') return api.require;
|
|
72
|
+
} catch {
|
|
73
|
+
// tsx absent: a plain require is the only reader left.
|
|
74
|
+
}
|
|
75
|
+
return (id: string) => req(id);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* The uncached load; `bundled` is a test seam, the hook path never passes it.
|
|
80
|
+
*
|
|
81
|
+
* Every step — resolving the specifier, the existence check, the digest, the
|
|
82
|
+
* load, the export check — runs inside one conversion boundary, so the function
|
|
83
|
+
* returns a value on every path. `missing` means the chunk file itself is
|
|
84
|
+
* absent; once it exists, anything its load throws (a dependency it cannot
|
|
85
|
+
* resolve included) is `invalid`.
|
|
86
|
+
*/
|
|
87
|
+
export function loadEgressEngineUncached(selfUrl: string = import.meta.url, bundled: boolean = isBundled()): EngineLoad {
|
|
88
|
+
try {
|
|
89
|
+
const specifier = engineSpecifier(selfUrl, bundled);
|
|
90
|
+
if (!fs.existsSync(specifier)) return { ok: false, reason: 'missing' };
|
|
91
|
+
// No sidecar, a malformed one or a mismatch: the chunk is not the one built.
|
|
92
|
+
if (bundled && verifyBundle(specifier).state !== 'ok') return { ok: false, reason: 'digest' };
|
|
93
|
+
let mod: Record<string, unknown>;
|
|
94
|
+
try {
|
|
95
|
+
const req = createRequire(selfUrl);
|
|
96
|
+
mod = (bundled ? req(specifier) : sourceRequire(req)(specifier, fileURLToPath(selfUrl))) as Record<string, unknown>;
|
|
97
|
+
} catch {
|
|
98
|
+
return { ok: false, reason: 'invalid' };
|
|
99
|
+
}
|
|
100
|
+
if (mod['ENGINE_SCHEMA'] !== EXPECTED_ENGINE_SCHEMA) return { ok: false, reason: 'schema' };
|
|
101
|
+
for (const name of ['detect', 'replaceValues', 'scanText', 'TokenScope', 'EgressRefusedError', 'tallyText', 'injectText', 'replaceJson']) {
|
|
102
|
+
if (typeof mod[name] !== 'function') return { ok: false, reason: 'invalid' };
|
|
103
|
+
}
|
|
104
|
+
if (!Array.isArray(mod['EGRESS_RULES'])) return { ok: false, reason: 'invalid' };
|
|
105
|
+
return { ok: true, engine: mod as unknown as EgressEngine };
|
|
106
|
+
} catch {
|
|
107
|
+
return { ok: false, reason: 'invalid' };
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
const cache = new Map<string, EngineLoad>();
|
|
112
|
+
|
|
113
|
+
/** The engine or why it is unavailable; cached per process, failures included. */
|
|
114
|
+
export function loadEgressEngine(selfUrl: string = import.meta.url): EngineLoad {
|
|
115
|
+
const hit = cache.get(selfUrl);
|
|
116
|
+
if (hit !== undefined) return hit;
|
|
117
|
+
const load = loadEgressEngineUncached(selfUrl);
|
|
118
|
+
cache.set(selfUrl, load);
|
|
119
|
+
return load;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/** Test seam: forget every cached load. Never called by the hook path. */
|
|
123
|
+
export function _resetEgressEngineCache(): void {
|
|
124
|
+
cache.clear();
|
|
125
|
+
}
|