@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
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Per-kind flip of typed hands to the free route (free-hands 6.3).
|
|
4
|
+
*
|
|
5
|
+
* A kind is served by a free route only after the shadow ledger clears both
|
|
6
|
+
* pre-registered bars for it: `free-hands-quality-held` (free failure rate at
|
|
7
|
+
* most the paid rate + 5 pp, and below the 0.3 escalation kill) and
|
|
8
|
+
* `free-hands-limit-relief` (paid tokens avoided minus the head's verify tokens
|
|
9
|
+
* above zero in every shadow week). Missing or underpowered data is "not
|
|
10
|
+
* ready" — never a flip.
|
|
11
|
+
*
|
|
12
|
+
* A flipped kind whose free-routed asks reach the kill reverts on its own and
|
|
13
|
+
* stays reverted: the same shadow data that was outvoted by live data does not
|
|
14
|
+
* flip it back, so a re-flip needs the record cleared by a person. Every flip
|
|
15
|
+
* and every reversion is an event in gitignored runtime state, with one line a
|
|
16
|
+
* claim row can cite. This module never edits `docs/CLAIMS.md`.
|
|
17
|
+
*
|
|
18
|
+
* Usage: ./scripts-run src/scripts/ai_council/kind_flip [--apply] [--audit-dir <dir>]
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
import * as fs from 'node:fs';
|
|
22
|
+
import * as path from 'node:path';
|
|
23
|
+
import { pathToFileURL } from 'node:url';
|
|
24
|
+
|
|
25
|
+
import { readShadowLedger, shadowReport, SHADOW_CALL_CAP, type KindShadowStats } from './free_hand_shadow.js';
|
|
26
|
+
import { HAND_KINDS, isHandKind, isUnpaid, ROUTE_BILLINGS, type HandKind, type RouteBilling, type VerifyVerdict } from '../_lib/hand_kinds.js';
|
|
27
|
+
|
|
28
|
+
/** The escalation kill registered on `ask_economy`; the quality claim's second half. */
|
|
29
|
+
export const ESCALATION_KILL = 0.3;
|
|
30
|
+
export const QUALITY_MARGIN = 0.05;
|
|
31
|
+
/** The A5 cap shared evenly across the kinds; below it a kind's rates settle nothing. */
|
|
32
|
+
export const MIN_SHADOW_PER_KIND = Math.floor(SHADOW_CALL_CAP / HAND_KINDS.length);
|
|
33
|
+
/** Free-routed asks a flipped kind needs before its live rate may revert it. */
|
|
34
|
+
export const REVERT_MIN_SAMPLE = 30;
|
|
35
|
+
|
|
36
|
+
import { isKindFlipped, KIND_FLIPS_RELPATH } from './kind_flip_state.js';
|
|
37
|
+
export { isKindFlipped, KIND_FLIPS_RELPATH } from './kind_flip_state.js';
|
|
38
|
+
|
|
39
|
+
export interface FlipVerdict {
|
|
40
|
+
readonly ready: boolean;
|
|
41
|
+
readonly reasons: string[];
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export function flipVerdict(s: KindShadowStats | undefined): FlipVerdict {
|
|
45
|
+
if (s === undefined) return { ready: false, reasons: ['no shadow data'] };
|
|
46
|
+
const reasons: string[] = [];
|
|
47
|
+
if (s.n < MIN_SHADOW_PER_KIND) reasons.push(`underpowered: ${String(s.n)} of ${String(MIN_SHADOW_PER_KIND)} shadow calls`);
|
|
48
|
+
if (s.free_rate > s.paid_rate + QUALITY_MARGIN) {
|
|
49
|
+
reasons.push(`quality margin: free ${s.free_rate.toFixed(3)} > paid ${s.paid_rate.toFixed(3)} + ${String(QUALITY_MARGIN)}`);
|
|
50
|
+
}
|
|
51
|
+
if (s.free_rate >= ESCALATION_KILL) reasons.push(`kill: free ${s.free_rate.toFixed(3)} >= ${String(ESCALATION_KILL)}`);
|
|
52
|
+
if (s.weeks.length === 0 || s.weeks.some((w) => w.net <= 0)) reasons.push('relief: a shadow week without net relief after verify tokens');
|
|
53
|
+
return { ready: reasons.length === 0, reasons };
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/** One free-routed typed ask after a flip, as the head recorded its verify. */
|
|
57
|
+
export interface FreeObservation {
|
|
58
|
+
readonly kind: HandKind;
|
|
59
|
+
readonly verified: VerifyVerdict;
|
|
60
|
+
readonly ts: string;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
const _BILLINGS: ReadonlySet<string> = new Set<string>(ROUTE_BILLINGS);
|
|
64
|
+
|
|
65
|
+
/** The free-routed asks among orchestration audit lines. */
|
|
66
|
+
export function observationsFromAuditLines(lines: readonly Record<string, unknown>[]): FreeObservation[] {
|
|
67
|
+
const out: FreeObservation[] = [];
|
|
68
|
+
for (const l of lines) {
|
|
69
|
+
const o = (l['orchestration'] ?? {}) as Record<string, unknown>;
|
|
70
|
+
const billing = o['route_billing'];
|
|
71
|
+
const verified = o['verified'];
|
|
72
|
+
if (o['route_taken'] !== 'ask' || !isHandKind(o['hand_kind']) || typeof l['ts'] !== 'string') continue;
|
|
73
|
+
if (typeof billing !== 'string' || !_BILLINGS.has(billing) || !isUnpaid(billing as RouteBilling)) continue;
|
|
74
|
+
if (verified !== 'pass' && verified !== 'fail' && verified !== 'skipped') continue;
|
|
75
|
+
out.push({ kind: o['hand_kind'] as HandKind, verified, ts: l['ts'] });
|
|
76
|
+
}
|
|
77
|
+
return out;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
export interface FlipEvent {
|
|
81
|
+
readonly ts: string;
|
|
82
|
+
readonly kind: HandKind;
|
|
83
|
+
readonly to: 'free' | 'paid';
|
|
84
|
+
readonly n: number;
|
|
85
|
+
readonly free_rate: number;
|
|
86
|
+
readonly line: string;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
interface KindState {
|
|
90
|
+
readonly route: 'free' | 'paid';
|
|
91
|
+
readonly since: string;
|
|
92
|
+
readonly reverted?: true;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
interface Store {
|
|
96
|
+
kinds: Partial<Record<HandKind, KindState>>;
|
|
97
|
+
events: FlipEvent[];
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
function _path(stateRoot: string): string {
|
|
101
|
+
return path.join(stateRoot, KIND_FLIPS_RELPATH);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
function _read(stateRoot: string): Store {
|
|
105
|
+
try {
|
|
106
|
+
const raw = JSON.parse(fs.readFileSync(_path(stateRoot), 'utf8')) as Partial<Store>;
|
|
107
|
+
return { kinds: raw.kinds ?? {}, events: Array.isArray(raw.events) ? raw.events : [] };
|
|
108
|
+
} catch {
|
|
109
|
+
return { kinds: {}, events: [] };
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
function _write(stateRoot: string, store: Store): void {
|
|
114
|
+
const target = _path(stateRoot);
|
|
115
|
+
fs.mkdirSync(path.dirname(target), { recursive: true });
|
|
116
|
+
const tmp = `${target}.${process.pid}.tmp`;
|
|
117
|
+
fs.writeFileSync(tmp, `${JSON.stringify(store, null, 2)}\n`, 'utf8');
|
|
118
|
+
fs.renameSync(tmp, target);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
function _flipLine(kind: HandKind, day: string, s: KindShadowStats): string {
|
|
123
|
+
return (
|
|
124
|
+
`free-hands-quality-held: ${kind} flipped to the free route on ${day} — shadow n=${String(s.n)}, ` +
|
|
125
|
+
`free ${s.free_rate.toFixed(3)} vs paid ${s.paid_rate.toFixed(3)}, net relief ${String(s.net)} tokens`
|
|
126
|
+
);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
function _revertLine(kind: HandKind, day: string, n: number, rate: number): string {
|
|
130
|
+
return (
|
|
131
|
+
`free-hands-quality-held: ${kind} reverted to the paid route on ${day} — free failure rate ` +
|
|
132
|
+
`${rate.toFixed(3)} over ${String(n)} free-routed asks >= kill ${String(ESCALATION_KILL)}`
|
|
133
|
+
);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/** The live breach that reverts a flipped kind: free-routed asks since the flip, at or above the kill. */
|
|
137
|
+
function _revertOf(kind: HandKind, state: KindState, live: readonly FreeObservation[]): { n: number; rate: number } | null {
|
|
138
|
+
const since = live.filter((o) => o.kind === kind && o.ts >= state.since);
|
|
139
|
+
if (since.length < REVERT_MIN_SAMPLE) return null;
|
|
140
|
+
// A `skipped` verify on a free return counts as an escalation, as in the claim.
|
|
141
|
+
const rate = since.filter((o) => o.verified !== 'pass').length / since.length;
|
|
142
|
+
return rate >= ESCALATION_KILL ? { n: since.length, rate } : null;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
export interface ApplyInput {
|
|
146
|
+
readonly shadow: readonly KindShadowStats[];
|
|
147
|
+
readonly live: readonly FreeObservation[];
|
|
148
|
+
readonly now?: Date;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/** Flip the ready kinds, revert the breaching ones; returns this pass's events. */
|
|
152
|
+
export function applyFlips(stateRoot: string, input: ApplyInput): FlipEvent[] {
|
|
153
|
+
const store = _read(stateRoot);
|
|
154
|
+
const now = input.now ?? new Date();
|
|
155
|
+
const ts = now.toISOString();
|
|
156
|
+
const day = ts.slice(0, 10);
|
|
157
|
+
const events: FlipEvent[] = [];
|
|
158
|
+
for (const kind of HAND_KINDS) {
|
|
159
|
+
const state = store.kinds[kind];
|
|
160
|
+
if (state?.route === 'free') {
|
|
161
|
+
const breach = _revertOf(kind, state, input.live);
|
|
162
|
+
if (breach === null) continue;
|
|
163
|
+
store.kinds[kind] = { route: 'paid', since: ts, reverted: true };
|
|
164
|
+
events.push({ ts, kind, to: 'paid', n: breach.n, free_rate: breach.rate, line: _revertLine(kind, day, breach.n, breach.rate) });
|
|
165
|
+
continue;
|
|
166
|
+
}
|
|
167
|
+
if (state?.reverted === true) continue;
|
|
168
|
+
const s = input.shadow.find((x) => x.kind === kind);
|
|
169
|
+
if (s === undefined || !flipVerdict(s).ready) continue;
|
|
170
|
+
store.kinds[kind] = { route: 'free', since: ts };
|
|
171
|
+
events.push({ ts, kind, to: 'free', n: s.n, free_rate: s.free_rate, line: _flipLine(kind, day, s) });
|
|
172
|
+
}
|
|
173
|
+
if (events.length > 0) {
|
|
174
|
+
store.events.push(...events);
|
|
175
|
+
_write(stateRoot, store);
|
|
176
|
+
}
|
|
177
|
+
return events;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
function _auditLines(dir: string): Record<string, unknown>[] {
|
|
181
|
+
let files: string[];
|
|
182
|
+
try {
|
|
183
|
+
files = fs.readdirSync(dir).filter((f) => f.endsWith('.jsonl'));
|
|
184
|
+
} catch {
|
|
185
|
+
return [];
|
|
186
|
+
}
|
|
187
|
+
const out: Record<string, unknown>[] = [];
|
|
188
|
+
for (const f of files) {
|
|
189
|
+
for (const line of fs.readFileSync(path.join(dir, f), 'utf8').split('\n')) {
|
|
190
|
+
if (line.trim() === '') continue;
|
|
191
|
+
try {
|
|
192
|
+
out.push(JSON.parse(line) as Record<string, unknown>);
|
|
193
|
+
} catch {
|
|
194
|
+
/* a torn line is skipped */
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
return out;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
export async function main(argv: readonly string[], cwd: string = process.cwd()): Promise<number> {
|
|
202
|
+
const i = argv.indexOf('--audit-dir');
|
|
203
|
+
const { DEFAULT_DIR } = await import('../orchestration_record.js');
|
|
204
|
+
const auditDir = i >= 0 && argv[i + 1] !== undefined ? argv[i + 1]! : path.join(cwd, DEFAULT_DIR);
|
|
205
|
+
const shadow = shadowReport(readShadowLedger(cwd));
|
|
206
|
+
if (argv.includes('--apply')) {
|
|
207
|
+
for (const e of applyFlips(cwd, { shadow, live: observationsFromAuditLines(_auditLines(auditDir)) })) {
|
|
208
|
+
process.stdout.write(`${e.line}\n`);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
for (const kind of HAND_KINDS) {
|
|
212
|
+
const v = flipVerdict(shadow.find((s) => s.kind === kind));
|
|
213
|
+
const route = isKindFlipped(cwd, kind) ? 'free' : 'paid';
|
|
214
|
+
process.stdout.write(` ${kind}: ${route}${v.ready ? '' : ` · not ready: ${v.reasons.join('; ')}`}\n`);
|
|
215
|
+
}
|
|
216
|
+
return 0;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
if (process.argv[1] !== undefined && import.meta.url === pathToFileURL(path.resolve(process.argv[1])).href) {
|
|
220
|
+
void main(process.argv.slice(2)).then((code) => process.exit(code));
|
|
221
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Where a hand kind's flip is stored, and the one read the per-prompt nudge
|
|
3
|
+
* needs. Apart from `kind_flip.ts`, whose shadow-report imports would put the
|
|
4
|
+
* whole measurement path into the hook bundle.
|
|
5
|
+
*/
|
|
6
|
+
import * as fs from 'node:fs';
|
|
7
|
+
import * as path from 'node:path';
|
|
8
|
+
|
|
9
|
+
export const KIND_FLIPS_RELPATH = path.join('agents', 'runtime', 'state', 'hand-kind-flips.json');
|
|
10
|
+
|
|
11
|
+
/** Unreadable or absent state is "not flipped". */
|
|
12
|
+
export function isKindFlipped(stateRoot: string, kind: string): boolean {
|
|
13
|
+
try {
|
|
14
|
+
const raw = JSON.parse(fs.readFileSync(path.join(stateRoot, KIND_FLIPS_RELPATH), 'utf8')) as { kinds?: Record<string, { route?: unknown }> };
|
|
15
|
+
return raw.kinds?.[kind]?.route === 'free';
|
|
16
|
+
} catch {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -4,14 +4,15 @@
|
|
|
4
4
|
* Ported from the retired Python `src/scripts/ai_council/learn_low_impact_preview.py`
|
|
5
5
|
* (ADR-200 — Python→TS migration, Phase 1).
|
|
6
6
|
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
7
|
+
* The command is read-only: it builds a structured plan describing which
|
|
8
|
+
* Validated entries would be worth upstreaming, and opens nothing. The
|
|
9
|
+
* `--apply` flag that once drove an upstream PR from here was retired on
|
|
10
|
+
* 2026-10-13 — it wrote into a package seed file that is not in the tree,
|
|
11
|
+
* and a second outward route would be a second set of guarantees. The one
|
|
12
|
+
* gated outward step is `self-repair:release`.
|
|
11
13
|
*
|
|
12
14
|
* The module is import-light by design — pure parsing + redaction + diff
|
|
13
|
-
* rendering.
|
|
14
|
-
* this module only hands the agent the material to surface.
|
|
15
|
+
* rendering. It hands the agent the material to surface and nothing else.
|
|
15
16
|
*/
|
|
16
17
|
|
|
17
18
|
import * as fs from 'node:fs';
|
|
@@ -22,6 +23,24 @@ import {
|
|
|
22
23
|
redact_low_impact_entry,
|
|
23
24
|
} from './redact_low_impact_entry.js';
|
|
24
25
|
|
|
26
|
+
/**
|
|
27
|
+
* The package-side seed the preview diffs against — the one place a CALLER
|
|
28
|
+
* reads this literal from, so no caller restates it. The privacy floor names
|
|
29
|
+
* the same path for its own purpose, which is a lock rather than a second
|
|
30
|
+
* source: the rule has to name what it locks.
|
|
31
|
+
*
|
|
32
|
+
* The file is deliberately NOT in the tree: the package ships no seed
|
|
33
|
+
* corpus, `_readSeedPhrases` treats a missing seed as an empty set, and the
|
|
34
|
+
* preview therefore diffs against an empty baseline. The path is still
|
|
35
|
+
* named here, and locked by `low-impact-corpus-privacy-floor`, so that a
|
|
36
|
+
* seed reappearing arrives already under the privacy floor.
|
|
37
|
+
*
|
|
38
|
+
* It is RELATIVE. A caller resolves it against the package root; resolving it
|
|
39
|
+
* against an arbitrary cwd would let a same-named file in a consumer project
|
|
40
|
+
* mark entries `already_seeded` and suppress them silently.
|
|
41
|
+
*/
|
|
42
|
+
export const PACKAGE_SEED_PATH = 'data/low-impact-decisions-seed.md';
|
|
43
|
+
|
|
25
44
|
// Python: re.compile(r"^last-upstreamed:\s*([0-9a-f]{6,40}|0+)\s*$",
|
|
26
45
|
// re.IGNORECASE | re.MULTILINE)
|
|
27
46
|
// \s is Unicode in Python; emulate via the explicit Unicode whitespace class.
|
|
@@ -57,10 +76,10 @@ export class RefusedEntry {
|
|
|
57
76
|
}
|
|
58
77
|
|
|
59
78
|
/**
|
|
60
|
-
* Structured preview for `/memory learn-low-impact
|
|
79
|
+
* Structured preview for `/memory learn-low-impact`.
|
|
61
80
|
*
|
|
62
|
-
* Consumed by the agent which renders the human-facing preview block
|
|
63
|
-
*
|
|
81
|
+
* Consumed by the agent which renders the human-facing preview block. The
|
|
82
|
+
* command ends there: it opens nothing and sends nothing.
|
|
64
83
|
*/
|
|
65
84
|
export class LearnLowImpactPreview {
|
|
66
85
|
readonly promoted: readonly PreviewEntry[];
|
|
@@ -97,10 +116,14 @@ export class LearnLowImpactPreview {
|
|
|
97
116
|
}
|
|
98
117
|
|
|
99
118
|
/**
|
|
100
|
-
* True when
|
|
119
|
+
* True when the promoted set is both non-empty and wholly clean — the
|
|
120
|
+
* shape an upstream contribution would need. Nothing here acts on it;
|
|
121
|
+
* `render()` reads it to decide which closing line to print.
|
|
101
122
|
*
|
|
102
|
-
*
|
|
103
|
-
*
|
|
123
|
+
* The name predates the retirement of `--apply` and is kept because it
|
|
124
|
+
* is the published accessor; what changed is that no caller opens
|
|
125
|
+
* anything. Iron Law, unchanged: any redactor refusal blocks promotion —
|
|
126
|
+
* the author rephrases or drops the offending entry locally and re-runs.
|
|
104
127
|
*/
|
|
105
128
|
get would_open_pr(): boolean {
|
|
106
129
|
return this.promoted.length > 0 && this.refused.length === 0;
|
|
@@ -148,13 +171,17 @@ export class LearnLowImpactPreview {
|
|
|
148
171
|
}
|
|
149
172
|
if (this.refused.length > 0) {
|
|
150
173
|
lines.push(
|
|
151
|
-
'> Refusals block
|
|
174
|
+
'> Refusals block promotion. Rephrase the entries locally' +
|
|
152
175
|
' (or drop them) and re-run.',
|
|
153
176
|
);
|
|
154
177
|
} else if (this.promoted.length > 0) {
|
|
155
178
|
lines.push(
|
|
156
|
-
|
|
157
|
-
|
|
179
|
+
// Deliberately no onward pointer. The outward ladder releases
|
|
180
|
+
// a RECORDED defect and nothing here opens a record, so a
|
|
181
|
+
// corpus entry cannot ride it today; naming a route the
|
|
182
|
+
// reader cannot take is worse than naming none.
|
|
183
|
+
'> This command sends nothing. Promoting an entry upstream is' +
|
|
184
|
+
' a separate, explicitly authorised decision.',
|
|
158
185
|
);
|
|
159
186
|
}
|
|
160
187
|
// Python: "\n".join(lines).rstrip() + "\n"
|
|
@@ -162,11 +189,11 @@ export class LearnLowImpactPreview {
|
|
|
162
189
|
}
|
|
163
190
|
|
|
164
191
|
/**
|
|
165
|
-
* Source-project-stripped diff
|
|
192
|
+
* Source-project-stripped diff the preview proposes for a reader.
|
|
166
193
|
*
|
|
167
194
|
* Emits unified-diff-style `+` lines for each promoted phrase under the
|
|
168
|
-
* seed file's `## Validated` section
|
|
169
|
-
*
|
|
195
|
+
* seed file's `## Validated` section — material for a reader to judge,
|
|
196
|
+
* not a patch this command applies anywhere.
|
|
170
197
|
*/
|
|
171
198
|
render_diff(): string {
|
|
172
199
|
if (this.promoted.length === 0) {
|
|
@@ -187,7 +214,7 @@ export class LearnLowImpactPreview {
|
|
|
187
214
|
const bodyLines: string[] = [
|
|
188
215
|
`# ${title}`,
|
|
189
216
|
'',
|
|
190
|
-
'
|
|
217
|
+
'Prepared from `/memory learn-low-impact`, which sends nothing.',
|
|
191
218
|
'',
|
|
192
219
|
'## Entries',
|
|
193
220
|
'',
|
|
@@ -223,9 +250,10 @@ function _rstrip(s: string): string {
|
|
|
223
250
|
/**
|
|
224
251
|
* Return the set of normalised phrases already in the seed file.
|
|
225
252
|
*
|
|
226
|
-
* Missing seed file is not an error — it returns an empty set
|
|
227
|
-
*
|
|
228
|
-
*
|
|
253
|
+
* Missing seed file is not an error — it returns an empty set, which is the
|
|
254
|
+
* standing case rather than an edge one: the package ships no seed, so every
|
|
255
|
+
* preview diffs against an empty baseline (see `PACKAGE_SEED_PATH`). Reuses
|
|
256
|
+
* the strict parser so a seed that does appear is contract-validated.
|
|
229
257
|
*/
|
|
230
258
|
function _readSeedPhrases(seedPath: string): Set<string> {
|
|
231
259
|
if (!fs.existsSync(seedPath)) {
|
|
@@ -24,6 +24,12 @@
|
|
|
24
24
|
*/
|
|
25
25
|
|
|
26
26
|
import { parse_stance_line } from './stance_tally.js';
|
|
27
|
+
import {
|
|
28
|
+
SEAT_NO_FINAL_VERDICT,
|
|
29
|
+
deriveRatificationHeader,
|
|
30
|
+
type RatificationVerdict,
|
|
31
|
+
type SeatVerdict,
|
|
32
|
+
} from '../_lib/ratification_artifact.js';
|
|
27
33
|
|
|
28
34
|
/**
|
|
29
35
|
* The closed vocabulary a seat may close on. Open it and a grep for a passing
|
|
@@ -66,7 +72,9 @@ export function seatConclusion(text: string): ModificationVerdictLabel | null {
|
|
|
66
72
|
export function readSeatConclusions(
|
|
67
73
|
replies: Readonly<Record<string, string>>,
|
|
68
74
|
): Record<string, ModificationVerdictLabel | null> {
|
|
69
|
-
|
|
75
|
+
// Prototype-free: on a plain object, assigning a seat named `__proto__`
|
|
76
|
+
// replaces the prototype and the seat silently disappears.
|
|
77
|
+
const out = Object.create(null) as Record<string, ModificationVerdictLabel | null>;
|
|
70
78
|
for (const [seat, text] of Object.entries(replies)) {
|
|
71
79
|
out[seat] = seatConclusion(text);
|
|
72
80
|
}
|
|
@@ -74,7 +82,54 @@ export function readSeatConclusions(
|
|
|
74
82
|
}
|
|
75
83
|
|
|
76
84
|
/**
|
|
77
|
-
*
|
|
85
|
+
* A threshold that is not a positive integer is refused, never coerced. At zero
|
|
86
|
+
* or below, an empty council would satisfy it; a fraction or a non-finite value
|
|
87
|
+
* has no count of providers it could mean.
|
|
88
|
+
*/
|
|
89
|
+
function assertRequiredProviders(requiredProviders: number): void {
|
|
90
|
+
if (!Number.isInteger(requiredProviders) || requiredProviders < 1) {
|
|
91
|
+
throw new RangeError(
|
|
92
|
+
`requiredProviders must be a positive integer, got ${String(requiredProviders)}`,
|
|
93
|
+
);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Every seat value is checked at run time, because the declared type is erased
|
|
99
|
+
* and a seat map often arrives as parsed JSON. A value outside the closed
|
|
100
|
+
* vocabulary or `null` throws: counted, it would add a provider to the quorum
|
|
101
|
+
* and could fall through to acceptance.
|
|
102
|
+
*/
|
|
103
|
+
function concludedSeats(
|
|
104
|
+
seats: Readonly<Record<string, ModificationVerdictLabel | null>>,
|
|
105
|
+
): [string, ModificationVerdictLabel][] {
|
|
106
|
+
const out: [string, ModificationVerdictLabel][] = [];
|
|
107
|
+
for (const [seat, value] of Object.entries(seats) as [string, unknown][]) {
|
|
108
|
+
if (value === null) continue;
|
|
109
|
+
if (
|
|
110
|
+
typeof value !== 'string' ||
|
|
111
|
+
!(MODIFICATION_VERDICT_LABELS as readonly string[]).includes(value)
|
|
112
|
+
) {
|
|
113
|
+
throw new TypeError(
|
|
114
|
+
`seat ${JSON.stringify(seat)} carries ${JSON.stringify(value)}, not a modification verdict label or null`,
|
|
115
|
+
);
|
|
116
|
+
}
|
|
117
|
+
out.push([seat, value as ModificationVerdictLabel]);
|
|
118
|
+
}
|
|
119
|
+
return out;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Derive the review's DISPOSITION rule — what the run does next. It is not the
|
|
124
|
+
* artifact's `verdict` field: for one seat `ratified` and another without a
|
|
125
|
+
* final verdict this returns `non-convergent`, while the reader's
|
|
126
|
+
* `deriveRatificationHeader` returns `ratified` with one provider, and the
|
|
127
|
+
* reader refuses a record carrying this answer as `header-not-derived`.
|
|
128
|
+
* {@link deriveModificationOutcome} returns both answers under different names;
|
|
129
|
+
* this function stays exported, so that is a clearer interface, not an enforced
|
|
130
|
+
* one.
|
|
131
|
+
*
|
|
132
|
+
* ONE rule, and the ORDER is the rule:
|
|
78
133
|
*
|
|
79
134
|
* 1. any concluding seat on `refused` → `refused`
|
|
80
135
|
* 2. concluding providers < required → `non-convergent`
|
|
@@ -90,11 +145,49 @@ export function deriveModificationVerdict(
|
|
|
90
145
|
seats: Readonly<Record<string, ModificationVerdictLabel | null>>,
|
|
91
146
|
requiredProviders: number,
|
|
92
147
|
): ModificationVerdict {
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
);
|
|
148
|
+
assertRequiredProviders(requiredProviders);
|
|
149
|
+
const concluded = concludedSeats(seats).map(([, v]) => v);
|
|
96
150
|
if (concluded.includes('refused')) return 'refused';
|
|
97
151
|
if (concluded.length < requiredProviders) return 'non-convergent';
|
|
98
152
|
if (concluded.includes('ratified')) return 'ratified';
|
|
99
153
|
return 'confirmed-non-expanding';
|
|
100
154
|
}
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* What a run does next. Never written into the artifact. A refusal and a short
|
|
158
|
+
* quorum stay apart because only the second is cured by asking again.
|
|
159
|
+
*/
|
|
160
|
+
export type ModificationDisposition = 'accepted' | 'refused' | 'quorum-short';
|
|
161
|
+
|
|
162
|
+
export interface ModificationOutcome {
|
|
163
|
+
/** The header the record carries, from the one canonical derivation. */
|
|
164
|
+
header: { providers: string[]; verdict: RatificationVerdict };
|
|
165
|
+
/** Whether enough distinct providers concluded. */
|
|
166
|
+
quorumSatisfied: boolean;
|
|
167
|
+
disposition: ModificationDisposition;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* The record's header and the run's disposition from one call, under different
|
|
172
|
+
* names. Throws a `RangeError` when `requiredProviders` is not a positive
|
|
173
|
+
* integer and a `TypeError` when a seat carries a value outside the vocabulary.
|
|
174
|
+
*/
|
|
175
|
+
export function deriveModificationOutcome(
|
|
176
|
+
seats: Readonly<Record<string, ModificationVerdictLabel | null>>,
|
|
177
|
+
requiredProviders: number,
|
|
178
|
+
): ModificationOutcome {
|
|
179
|
+
assertRequiredProviders(requiredProviders);
|
|
180
|
+
const concluded = new Map(concludedSeats(seats));
|
|
181
|
+
const asSeatVerdicts = new Map<string, SeatVerdict>();
|
|
182
|
+
for (const seat of Object.keys(seats)) {
|
|
183
|
+
asSeatVerdicts.set(seat, concluded.get(seat) ?? SEAT_NO_FINAL_VERDICT);
|
|
184
|
+
}
|
|
185
|
+
const header = deriveRatificationHeader(asSeatVerdicts);
|
|
186
|
+
const quorumSatisfied = new Set(header.providers).size >= requiredProviders;
|
|
187
|
+
const verdict = deriveModificationVerdict(seats, requiredProviders);
|
|
188
|
+
let disposition: ModificationDisposition;
|
|
189
|
+
if (verdict === 'refused') disposition = 'refused';
|
|
190
|
+
else if (!quorumSatisfied || verdict === 'non-convergent') disposition = 'quorum-short';
|
|
191
|
+
else disposition = 'accepted';
|
|
192
|
+
return { header, quorumSatisfied, disposition };
|
|
193
|
+
}
|
|
@@ -235,6 +235,7 @@ export function classify_necessity(
|
|
|
235
235
|
prompt: string,
|
|
236
236
|
lens = 'analysis',
|
|
237
237
|
_invocation: Invocation = 'agent',
|
|
238
|
+
opts: { readonly ratePressure?: boolean } = {},
|
|
238
239
|
): ClassificationResult {
|
|
239
240
|
const text = _pyStrip(prompt || '');
|
|
240
241
|
if (!text) {
|
|
@@ -299,6 +300,12 @@ export function classify_necessity(
|
|
|
299
300
|
rationale =
|
|
300
301
|
`Lens \`${lens}\` is strict (expensive deliberation); ` +
|
|
301
302
|
`borderline with zero \`necessary\` markers → unnecessary.`;
|
|
303
|
+
} else if (opts.ratePressure === true && verdict === 'borderline' && n_hits === 0) {
|
|
304
|
+
// Inside a host rate window every lens applies the strict bar.
|
|
305
|
+
verdict = 'unnecessary';
|
|
306
|
+
rationale =
|
|
307
|
+
'A recent host rate marker applies the strict bar; ' +
|
|
308
|
+
`borderline with zero \`necessary\` markers → unnecessary.`;
|
|
302
309
|
}
|
|
303
310
|
|
|
304
311
|
return new ClassificationResult({
|
|
@@ -30,12 +30,11 @@ export type { RunConsensusScoringOptions, RunPeerReviewOptions } from './orchest
|
|
|
30
30
|
// existing importer of `run_consensus_scoring` is untouched.
|
|
31
31
|
export { run_consensus_scoring } from './consensus_round.js';
|
|
32
32
|
import {
|
|
33
|
-
record_spend as _record_daily_spend,
|
|
34
33
|
today_spend_usd as _today_spend_usd,
|
|
35
34
|
would_exceed as _would_exceed_daily,
|
|
36
35
|
} from './budget_guard.js';
|
|
37
36
|
import type {
|
|
38
|
-
ExternalAIClient} from './clients.js';
|
|
37
|
+
CliClient, ExternalAIClient} from './clients.js';
|
|
39
38
|
import {
|
|
40
39
|
DEFAULT_MAX_TOKENS,
|
|
41
40
|
CouncilResponse
|
|
@@ -99,10 +98,12 @@ import {
|
|
|
99
98
|
CostBudget,
|
|
100
99
|
OverrunEvent,
|
|
101
100
|
_breach,
|
|
101
|
+
breachErrorTag,
|
|
102
102
|
_total_usd,
|
|
103
103
|
type Spent,
|
|
104
104
|
} from './spend_gate.js';
|
|
105
105
|
import { callMember, renderResponseMeta } from './response_render.js';
|
|
106
|
+
import { RoundReservations } from './round_reservations.js';
|
|
106
107
|
import {
|
|
107
108
|
_excTag,
|
|
108
109
|
_metaGet,
|
|
@@ -498,6 +499,9 @@ export function consult(
|
|
|
498
499
|
// health and structural validity are INDEPENDENT failure modes,
|
|
499
500
|
// so refusing the retry would discard salvageable work for an
|
|
500
501
|
// unrelated reason. Bounded by the retry's own spend gate.
|
|
502
|
+
// Non-blind: the seat is asked about its own reply, so it continues the session that wrote it.
|
|
503
|
+
const seat = member as Partial<Pick<CliClient, 'lastSession' | 'resumeNext'>>;
|
|
504
|
+
if (seat.lastSession !== undefined) seat.resumeNext = seat.lastSession;
|
|
501
505
|
const rr = _run_round([member], repairQ, resolvedBudget, spent, {
|
|
502
506
|
table,
|
|
503
507
|
on_overrun,
|
|
@@ -589,6 +593,7 @@ function _run_round(
|
|
|
589
593
|
};
|
|
590
594
|
|
|
591
595
|
const results: CouncilResponse[] = [];
|
|
596
|
+
const reservations = new RoundReservations(budget);
|
|
592
597
|
const estimates: CostEstimate[] | null =
|
|
593
598
|
table !== null
|
|
594
599
|
? estimate(question, members, table, {
|
|
@@ -661,13 +666,10 @@ function _run_round(
|
|
|
661
666
|
: estimates
|
|
662
667
|
? (estimates[idx] as CostEstimate)
|
|
663
668
|
: null;
|
|
664
|
-
const breach = _breach(est, spent, budget);
|
|
669
|
+
const breach = _breach(est, spent, budget) ?? reservations.reserve(est, member);
|
|
665
670
|
if (breach !== null) {
|
|
666
671
|
const breach_kind = breach;
|
|
667
|
-
const error_tag =
|
|
668
|
-
breach_kind === 'daily'
|
|
669
|
-
? 'daily_budget_exceeded'
|
|
670
|
-
: 'cost_budget_exceeded';
|
|
672
|
+
const error_tag = breachErrorTag(breach_kind);
|
|
671
673
|
// A seat that arrived here by escalating from an UNMETERED cli
|
|
672
674
|
// call degrades to its own original failure — never to an abort,
|
|
673
675
|
// and never to the round-wide short-circuit below. The reasoning,
|
|
@@ -717,7 +719,7 @@ function _run_round(
|
|
|
717
719
|
for (const left of members.slice(idx)) {
|
|
718
720
|
results.push(_aborted(left, error_tag));
|
|
719
721
|
}
|
|
720
|
-
return results;
|
|
722
|
+
return reservations.finish(results);
|
|
721
723
|
}
|
|
722
724
|
}
|
|
723
725
|
|
|
@@ -804,18 +806,13 @@ function _run_round(
|
|
|
804
806
|
spent.usd += _total_usd(actual);
|
|
805
807
|
// Ledger every billable response, bounded or not (ADR-279): a cap
|
|
806
808
|
// decides whether the total is compared, never whether it is kept.
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
cache_read_input_tokens: response.cache_read_input_tokens,
|
|
810
|
-
cache_creation_input_tokens: response.cache_creation_input_tokens,
|
|
811
|
-
cache_ttl: '5m',
|
|
812
|
-
});
|
|
813
|
-
}
|
|
809
|
+
// With a daily ceiling set the seat's reservation is reconciled instead.
|
|
810
|
+
reservations.settle(response, effective, actual);
|
|
814
811
|
}
|
|
815
812
|
_stamp_transport_metadata(response, effective, actual_usd);
|
|
816
813
|
}
|
|
817
814
|
|
|
818
|
-
return results;
|
|
815
|
+
return reservations.finish(results);
|
|
819
816
|
}
|
|
820
817
|
|
|
821
818
|
function _aborted(member: ExternalAIClient, reason: string): CouncilResponse {
|
|
@@ -855,6 +852,9 @@ function _stamp_transport_metadata(
|
|
|
855
852
|
if (cost_usd !== null) {
|
|
856
853
|
meta['cost_usd'] = Number(cost_usd);
|
|
857
854
|
}
|
|
855
|
+
// A size-fit downgrade (`council_cli._size_fit_gate`) leaves the configured
|
|
856
|
+
// model and the reason on the member; they ride into the response here.
|
|
857
|
+
Object.assign(meta, _getattr(member, 'size_fit', null));
|
|
858
858
|
response.metadata = meta;
|
|
859
859
|
}
|
|
860
860
|
|