@event4u/agent-config 16.4.0 → 17.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.augment-plugin/marketplace.json +3 -3
- package/.augment-plugin/plugin.json +1 -1
- package/.claude-plugin/marketplace.json +2 -2
- package/.claude-plugin/skills/install-agent-config/SKILL.md +4 -4
- package/CHANGELOG.md +483 -669
- package/CONTRIBUTING.md +47 -0
- package/README.md +25 -25
- package/dist/agent-src/commands/{design.md → agent-design.md} +11 -7
- package/dist/agent-src/commands/agents/init.md +66 -3
- package/dist/agent-src/commands/agents/user/init.md +3 -0
- package/dist/agent-src/commands/{optimize/deep.md → analyze/and-optimize.md} +72 -33
- package/dist/agent-src/commands/analyze/inbox.md +168 -37
- package/dist/agent-src/commands/analyze/pr.md +144 -0
- package/dist/agent-src/commands/analyze/{repo.md → reference.md} +85 -14
- package/dist/agent-src/commands/analyze/roadmap-repos.md +19 -10
- package/dist/agent-src/commands/analyze.md +28 -12
- package/dist/agent-src/commands/audit.md +115 -0
- package/dist/agent-src/commands/brand/review.md +13 -2
- package/dist/agent-src/commands/brand/tokens.md +3 -3
- package/dist/agent-src/commands/brand/voice.md +8 -5
- package/dist/agent-src/commands/brand.md +2 -2
- package/dist/agent-src/commands/challenge-me/closure.md +25 -0
- package/dist/agent-src/commands/design-system/import.md +8 -3
- package/dist/agent-src/commands/design-system/sync.md +98 -0
- package/dist/agent-src/commands/design-system.md +6 -1
- package/dist/agent-src/commands/evals/analyze.json +44 -0
- package/dist/agent-src/commands/evals/audit.json +12 -0
- package/dist/agent-src/commands/evals/retro.json +12 -0
- package/dist/agent-src/commands/fix/ci.md +10 -8
- package/dist/agent-src/commands/ghostwriter/write.md +22 -0
- package/dist/agent-src/commands/memory/learn-low-impact.md +70 -83
- package/dist/agent-src/commands/memory/propose.md +12 -0
- package/dist/agent-src/commands/memory.md +1 -1
- package/dist/agent-src/commands/optimize.md +4 -3
- package/dist/agent-src/commands/post-as/me.md +18 -0
- package/dist/agent-src/commands/pr/create.md +17 -342
- package/dist/agent-src/commands/pr/merge.md +129 -368
- package/dist/agent-src/commands/retro.md +121 -0
- package/dist/agent-src/commands/review/routing.md +1 -1
- package/dist/agent-src/commands/roadmap/next.md +4 -1
- package/dist/agent-src/commands/roadmap/process-full.md +46 -333
- package/dist/agent-src/commands/roadmap/triage-parked.md +6 -2
- package/dist/agent-src/commands/team-knowledge/consolidate.md +2 -2
- package/dist/agent-src/commands/team-knowledge.md +1 -1
- package/dist/agent-src/commands/threat-model.md +1 -1
- package/dist/agent-src/commands/upstream-contribute.md +91 -101
- package/dist/agent-src/commands/worktree/cleanup.md +18 -11
- package/dist/agent-src/contexts/contracts/consumer-agents-md-guide.md +54 -0
- package/dist/agent-src/contexts/execution/analysis-loop.md +137 -0
- package/dist/agent-src/contexts/execution/auto-dispatch-classification.md +3 -3
- package/dist/agent-src/contexts/execution/decision-closure-execution.md +1 -1
- package/dist/agent-src/contexts/execution/host-capability-manifest.md +6 -0
- package/dist/agent-src/contexts/execution/orchestration-telemetry.md +11 -4
- package/dist/agent-src/contexts/execution/pr-create-branches-content.md +250 -0
- package/dist/agent-src/contexts/execution/pr-create-branches-freshness.md +150 -0
- package/dist/agent-src/contexts/execution/pr-merge-queue.md +287 -0
- package/dist/agent-src/contexts/execution/pr-merge-sync.md +276 -0
- package/dist/agent-src/contexts/execution/pr-merge-trust-boundary.md +69 -0
- package/dist/agent-src/contexts/execution/process-full-all.md +233 -0
- package/dist/agent-src/contexts/execution/process-full-delivery.md +231 -0
- package/dist/agent-src/contexts/execution/roadmap-execution-contract-branches.md +42 -0
- package/dist/agent-src/contexts/execution/roadmap-execution-contract.md +1 -35
- package/dist/agent-src/contexts/execution/roadmap-process-loop-close.md +235 -0
- package/dist/agent-src/contexts/execution/roadmap-process-loop-prescan.md +216 -0
- package/dist/agent-src/contexts/execution/roadmap-process-loop-run.md +253 -0
- package/dist/agent-src/contexts/execution/roadmap-process-loop-set.md +212 -0
- package/dist/agent-src/contexts/execution/roadmap-process-loop.md +25 -864
- package/dist/agent-src/contexts/execution/subagent-spawn-contract.md +14 -2
- package/dist/agent-src/contexts/execution/subagent-steering.md +65 -8
- package/dist/agent-src/contexts/model-recommendations.md +5 -5
- package/dist/agent-src/contexts/subagent-configuration.md +1 -1
- package/dist/agent-src/guidelines/agent-infra/api-cost-levers.md +4 -3
- package/dist/agent-src/guidelines/agent-infra/model-recommendation.md +11 -5
- package/dist/agent-src/guidelines/agent-infra/rule-body-migration-inventory.md +1 -1
- package/dist/agent-src/guidelines/agent-infra/self-improvement-pipeline.md +47 -24
- package/dist/agent-src/guidelines/design-antipatterns.md +6 -1
- package/dist/agent-src/guidelines/design-asset-discipline.md +17 -0
- package/dist/agent-src/guidelines/design-fidelity-routing.md +1 -0
- package/dist/agent-src/guidelines/php/api-design.md +10 -1
- package/dist/agent-src/rules/brand-source-of-truth.md +7 -6
- package/dist/agent-src/rules/code-provenance.md +1 -1
- package/dist/agent-src/rules/context-hygiene.md +0 -1
- package/dist/agent-src/rules/design-fidelity.md +12 -13
- package/dist/agent-src/rules/external-reference-deep-dive.md +2 -2
- package/dist/agent-src/rules/fix-what-you-see.md +1 -1
- package/dist/agent-src/rules/low-impact-corpus-privacy-floor.md +14 -15
- package/dist/agent-src/rules/missing-skill-recovery.md +12 -11
- package/dist/agent-src/rules/neighbour-precedence.md +1 -1
- package/dist/agent-src/rules/recurring-criticism.md +1 -1
- package/dist/agent-src/rules/roadmap-ci-steps-policy.md +0 -2
- package/dist/agent-src/rules/self-repair-loop.md +2 -2
- package/dist/agent-src/rules/token-budget-discipline.md +2 -2
- package/dist/agent-src/scripts/dashboard_mode.ts +4 -1
- package/dist/agent-src/scripts/roadmap_age.ts +175 -0
- package/dist/agent-src/scripts/update_roadmap_progress.ts +10 -2
- package/dist/agent-src/skills/accessibility-auditor/SKILL.md +3 -3
- package/dist/agent-src/skills/accessibility-auditor/data/aria-patterns.csv +2 -0
- package/dist/agent-src/skills/accessibility-auditor/data/manifest.json +3 -3
- package/dist/agent-src/skills/agent-security-review/SKILL.md +2 -2
- package/dist/agent-src/skills/agents-md-thin-root/SKILL.md +12 -4
- package/dist/agent-src/skills/ai-code-blindspots/SKILL.md +7 -0
- package/dist/agent-src/skills/ai-council/references/advanced-modes.md +11 -1
- package/dist/agent-src/skills/ai-council/references/cost-and-redaction.md +7 -0
- package/dist/agent-src/skills/ai-council/references/execution-modes.md +7 -0
- package/dist/agent-src/skills/ai-council/references/output-and-synthesis.md +19 -0
- package/dist/agent-src/skills/ai-council/references/procedure.md +7 -0
- package/dist/agent-src/skills/api-design/SKILL.md +2 -2
- package/dist/agent-src/skills/api-endpoint/SKILL.md +2 -2
- package/dist/agent-src/skills/authz-review/SKILL.md +5 -3
- package/dist/agent-src/skills/blade-ui/SKILL.md +2 -2
- package/dist/agent-src/skills/brand/SKILL.md +7 -3
- package/dist/agent-src/skills/brand-asset-generation/SKILL.md +13 -6
- package/dist/agent-src/skills/brand-audit/SKILL.md +2 -1
- package/dist/agent-src/skills/brand-identity/SKILL.md +5 -4
- package/dist/agent-src/skills/brand-strategy/SKILL.md +5 -4
- package/dist/agent-src/skills/brand-to-tokens/SKILL.md +18 -39
- package/dist/agent-src/skills/brand-to-tokens/templates/marp-brand-deck.md.example +2 -2
- package/dist/agent-src/skills/brand-to-tokens/templates/reveal-brand-deck.yaml +2 -2
- package/dist/agent-src/skills/canvas-design/SKILL.md +16 -4
- package/dist/agent-src/skills/competitive-positioning/SKILL.md +2 -2
- package/dist/agent-src/skills/composer-packages/SKILL.md +18 -0
- package/dist/agent-src/skills/condense-memory/SKILL.md +1 -1
- package/dist/agent-src/skills/content-funnel-design/SKILL.md +8 -1
- package/dist/agent-src/skills/context-authoring/SKILL.md +1 -1
- package/dist/agent-src/skills/context-document/SKILL.md +2 -2
- package/dist/agent-src/skills/corpus-grounding/SKILL.md +6 -6
- package/dist/agent-src/skills/corpus-grounding/scripts/decision_engine.ts +13 -11
- package/dist/agent-src/skills/corpus-grounding/scripts/ground.mjs +1706 -0
- package/dist/agent-src/skills/corpus-grounding/scripts/schema_validator.ts +7 -1
- package/dist/agent-src/skills/dashboard-design/SKILL.md +1 -1
- package/dist/agent-src/skills/data-flow-mapper/SKILL.md +5 -2
- package/dist/agent-src/skills/database/SKILL.md +5 -4
- package/dist/agent-src/skills/decision-record/references/weighted-matrix.md +12 -0
- package/dist/agent-src/skills/deep-reading-analyst/SKILL.md +1 -1
- package/dist/agent-src/skills/dependency-upgrade/SKILL.md +61 -11
- package/dist/agent-src/skills/description-assist/SKILL.md +1 -1
- package/dist/agent-src/skills/design-intelligence/SKILL.md +1 -1
- package/dist/agent-src/skills/design-intelligence/data/landing.csv +1 -1
- package/dist/agent-src/skills/design-intelligence/references/context-and-registers.md +10 -2
- package/dist/agent-src/skills/design-intelligence/references/design-languages.md +1 -1
- package/dist/agent-src/skills/design-intelligence/references/design-rules-checklist.md +4 -3
- package/dist/agent-src/skills/design-intelligence/references/integration-mapping.md +25 -22
- package/dist/agent-src/skills/{wireframe → design-review}/references/story-beat-ledger.schema.json +1 -1
- package/dist/agent-src/skills/design-review/references/verification-automation.md +11 -3
- package/dist/agent-src/skills/design-system-capture/SKILL.md +15 -10
- package/dist/agent-src/skills/design-system-capture/references/design-system-json.md +20 -5
- package/dist/agent-src/skills/design-system-capture/references/import-procedure.md +2 -2
- package/dist/agent-src/skills/design-tokens/SKILL.md +23 -23
- package/dist/agent-src/skills/design-tokens/scripts/tokens.mjs +1037 -0
- package/dist/agent-src/skills/design-tokens/scripts/tokens.ts +336 -13
- package/dist/agent-src/skills/design-tokens/templates/design-tokens-starter.json +52 -53
- package/dist/agent-src/skills/docker/SKILL.md +1 -1
- package/dist/agent-src/skills/estimate-ticket/SKILL.md +1 -1
- package/dist/agent-src/skills/existing-ui-audit/SKILL.md +14 -276
- package/dist/agent-src/skills/existing-ui-audit/procedure.yaml +44 -0
- package/dist/agent-src/skills/existing-ui-audit/references/anti-slop-cross-reference.md +1 -1
- package/dist/agent-src/skills/existing-ui-audit/references/steps/00-inspect-stack-and-input.md +4 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/01-enumerate-components.md +26 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/01b-detect-component-taxonomy.md +7 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/02-identify-design-system.md +12 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/03-detect-design-tokens.md +35 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/04-detect-shadcn-inventory.md +13 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/04b-live-storybook-read.md +26 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/05-list-reusable-patterns.md +14 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/06-match-candidates.md +52 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/07-greenfield-branch.md +29 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/08-a11y-baseline.md +40 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/09-validate-and-write.md +5 -0
- package/dist/agent-src/skills/experiment-loop/SKILL.md +1 -1
- package/dist/agent-src/skills/fe-design/references/design-patterns.md +65 -4
- package/dist/agent-src/skills/fe-design/references/design-read-and-memory.md +1 -1
- package/dist/agent-src/skills/fe-design/references/source-led-port.md +1 -1
- package/dist/agent-src/skills/finishing-a-development-branch/SKILL.md +6 -6
- package/dist/agent-src/skills/flux/SKILL.md +1 -1
- package/dist/agent-src/skills/form-handler/SKILL.md +15 -2
- package/dist/agent-src/skills/frontend-render-security/SKILL.md +9 -0
- package/dist/agent-src/skills/git-workflow/SKILL.md +2 -2
- package/dist/agent-src/skills/git-workflow/references/branch-update.md +7 -0
- package/dist/agent-src/skills/git-workflow/references/commit-subject.md +12 -0
- package/dist/agent-src/skills/git-workflow/references/push-closes-its-loop.md +10 -0
- package/dist/agent-src/skills/gtm-launch/SKILL.md +8 -1
- package/dist/agent-src/skills/html-deck/SKILL.md +7 -2
- package/dist/agent-src/skills/humanizer/SKILL.md +16 -3
- package/dist/agent-src/skills/humanizer/references/anti-aiisms.md +13 -1
- package/dist/agent-src/skills/humanizer/references/fixtures.md +8 -0
- package/dist/agent-src/skills/iconography/SKILL.md +4 -2
- package/dist/agent-src/skills/image-provider-routing/SKILL.md +16 -5
- package/dist/agent-src/skills/js-library-packaging/SKILL.md +5 -4
- package/dist/agent-src/skills/js-library-packaging/scripts/check_package_surface.mjs +197 -0
- package/dist/agent-src/skills/judge-artifact-completeness/SKILL.md +1 -1
- package/dist/agent-src/skills/judge-security-auditor/SKILL.md +2 -2
- package/dist/agent-src/skills/launch-readiness/SKILL.md +18 -22
- package/dist/agent-src/skills/learning-to-rule-or-skill/SKILL.md +5 -5
- package/dist/agent-src/skills/livewire/SKILL.md +1 -1
- package/dist/agent-src/skills/llm-provider-knowledge/SKILL.md +18 -0
- package/dist/agent-src/skills/logo-generation/SKILL.md +21 -11
- package/dist/agent-src/skills/market-entry-analysis/SKILL.md +6 -1
- package/dist/agent-src/skills/markitdown/SKILL.md +1 -1
- package/dist/agent-src/skills/memory-consolidation/SKILL.md +2 -2
- package/dist/agent-src/skills/messaging-architecture/SKILL.md +8 -1
- package/dist/agent-src/skills/motion-choreographer/SKILL.md +2 -2
- package/dist/agent-src/skills/playwright-testing/SKILL.md +2 -0
- package/dist/agent-src/skills/positioning-strategy/SKILL.md +10 -2
- package/dist/agent-src/skills/prediction-pool-optimizer/references/ev-fixtures.md +13 -0
- package/dist/agent-src/skills/prediction-pool-optimizer/references/odds-and-bonus.md +7 -0
- package/dist/agent-src/skills/project-analysis-core/SKILL.md +1 -1
- package/dist/agent-src/skills/project-analysis-hypothesis-driven/SKILL.md +1 -1
- package/dist/agent-src/skills/project-analyzer/SKILL.md +14 -75
- package/dist/agent-src/skills/project-analyzer/procedure.yaml +39 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/01-project-overview.md +9 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/02-architecture.md +7 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/03-data-layer.md +6 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/04-business-domains.md +7 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/05-api-surface.md +6 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/06-service-map.md +6 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/07-module-inventory.md +6 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/08-infrastructure-and-testing.md +5 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/09-agent-docs-audit.md +6 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/10-gap-analysis.md +6 -0
- package/dist/agent-src/skills/quality-tools/references/js-ts-tools.md +10 -0
- package/dist/agent-src/skills/quality-tools/references/php-tools.md +13 -0
- package/dist/agent-src/skills/quality-tools/references/python-tools.md +11 -0
- package/dist/agent-src/skills/react-native-setup/SKILL.md +7 -2
- package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +5 -1
- package/dist/agent-src/skills/react-shadcn-ui/references/registry.md +13 -0
- package/dist/agent-src/skills/react-shadcn-ui/scripts/shadcn_add.mjs +315 -0
- package/dist/agent-src/skills/react-shadcn-ui/scripts/shadcn_add.ts +6 -6
- package/dist/agent-src/skills/receiving-code-review/SKILL.md +1 -1
- package/dist/agent-src/skills/refine-ticket/SKILL.md +2 -2
- package/dist/agent-src/skills/release-comms/SKILL.md +2 -1
- package/dist/agent-src/skills/repomix-packer/SKILL.md +2 -2
- package/dist/agent-src/skills/requesting-code-review/SKILL.md +3 -3
- package/dist/agent-src/skills/roadmap-management/references/archival.md +3 -3
- package/dist/agent-src/skills/roadmap-management/references/authoring.md +9 -2
- package/dist/agent-src/skills/roadmap-management/references/dashboard.md +3 -3
- package/dist/agent-src/skills/roadmap-management/references/lifecycle.md +3 -3
- package/dist/agent-src/skills/roadmap-writing/SKILL.md +4 -4
- package/dist/agent-src/skills/rtk-output-filtering/SKILL.md +1 -1
- package/dist/agent-src/skills/rule-writing/SKILL.md +1 -2
- package/dist/agent-src/skills/security/SKILL.md +41 -5
- package/dist/agent-src/skills/skill-improvement-pipeline/SKILL.md +5 -3
- package/dist/agent-src/skills/skill-reviewer/SKILL.md +1 -1
- package/dist/agent-src/skills/skill-writing/SKILL.md +23 -8
- package/dist/agent-src/skills/skill-writing/references/section-patterns.md +19 -1
- package/dist/agent-src/skills/source-discovery/SKILL.md +3 -3
- package/dist/agent-src/skills/sql-writing/SKILL.md +2 -2
- package/dist/agent-src/skills/standards-from-config/SKILL.md +2 -2
- package/dist/agent-src/skills/storybook-workshop/SKILL.md +5 -0
- package/dist/agent-src/skills/storybook-workshop/scripts/story_contrast_floor.mjs +99 -0
- package/dist/agent-src/skills/subagent-orchestration/SKILL.md +13 -13
- package/dist/agent-src/skills/subagent-orchestration/prompts/README.md +4 -3
- package/dist/agent-src/skills/svg-authoring/SKILL.md +324 -0
- package/dist/agent-src/skills/systematic-debugging/SKILL.md +2 -2
- package/dist/agent-src/skills/tailwind-engineer/SKILL.md +8 -3
- package/dist/agent-src/skills/tailwind-engineer/scripts/tailwind_config_gen.mjs +482 -0
- package/dist/agent-src/skills/test-case-discovery/SKILL.md +1 -1
- package/dist/agent-src/skills/threat-modeling/SKILL.md +8 -1
- package/dist/agent-src/skills/threat-modeling/data/manifest.json +5 -2
- package/dist/agent-src/skills/threat-modeling/data/reasoning.csv +10 -10
- package/dist/agent-src/skills/threat-modeling/data/surfaces.csv +11 -10
- package/dist/agent-src/skills/threat-modeling/data/threats.csv +34 -20
- package/dist/agent-src/skills/type-design/SKILL.md +196 -0
- package/dist/agent-src/skills/type-design/references/font-spec.md +90 -0
- package/dist/agent-src/skills/type-design/references/gates.md +113 -0
- package/dist/agent-src/skills/type-design/references/toolchain.md +66 -0
- package/dist/agent-src/skills/typography-system/SKILL.md +21 -11
- package/dist/agent-src/skills/typography-system/references/worked-scales.md +85 -0
- package/dist/agent-src/skills/ui-apply-generic/SKILL.md +1 -1
- package/dist/agent-src/skills/universal-project-analysis/SKILL.md +1 -1
- package/dist/agent-src/skills/upstream-contribute/SKILL.md +120 -125
- package/dist/agent-src/skills/using-git-worktrees/SKILL.md +1 -0
- package/dist/agent-src/skills/verify-repair-loop/SKILL.md +1 -1
- package/dist/agent-src/skills/voice-and-tone-design/SKILL.md +71 -2
- package/dist/agent-src/skills/wireframe/SKILL.md +5 -2
- package/dist/agent-src/skills/worktree-lifecycle/SKILL.md +16 -14
- package/dist/agent-src/templates/AGENTS.md +1 -1
- package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/dist/agent-src/templates/agents/proposal.example.md +1 -1
- package/dist/agent-src/templates/github-workflows/advisories-daily.yml +85 -0
- package/dist/agent-src/templates/roadmaps.md +39 -1
- package/dist/agent-src/templates/scripts/check_memory.ts +2 -2
- package/dist/agent-src/templates/scripts/historical-bug-patterns.example.yml +13 -1
- package/dist/agent-src/templates/scripts/work_engine/cli.ts +17 -0
- package/dist/agent-src/templates/scripts/work_engine/cli_args.ts +10 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/scaffold.ts +22 -13
- package/dist/agent-src/templates/scripts/work_engine/dispatcher.ts +18 -4
- package/dist/agent-src/templates/scripts/work_engine/procedure/checks.ts +283 -0
- package/dist/agent-src/templates/scripts/work_engine/procedure/run.ts +432 -0
- package/dist/agent-src/templates/scripts/work_engine/procedure/sidecar.ts +185 -0
- package/dist/agent-src/templates/scripts/work_engine/state.ts +3 -0
- package/dist/cli/commands/uiRender.js +265 -13
- package/dist/cli/commands/uiRenderAsset.js +1316 -0
- package/dist/cli/commands/uiRenderAssetCompare.js +752 -0
- package/dist/cli/commands/uiRenderAssetFonts.js +158 -0
- package/dist/cli/commands/uiRenderAssetGrid.js +265 -0
- package/dist/cli/commands/uiRenderAssetGrounds.js +323 -0
- package/dist/cli/commands/uiRenderAssetIsolation.js +85 -0
- package/dist/cli/commands/uiRenderAssetTypes.js +133 -0
- package/dist/cli/initRouting.js +1 -1
- package/dist/cli/main.js +47 -1
- package/dist/cli/mcp/dispatch.js +31 -9
- package/dist/cli/python/knowledge_ingest.js +7 -39
- package/dist/cli/python/workspace_secrets.js +4 -177
- package/dist/cli/registry.js +5 -2
- package/dist/cli-delegate/archive_completed_roadmaps.js +3 -2
- package/dist/cli-delegate/check_update_banner.js +635 -266
- package/dist/cli-delegate/{chunk-AED2VQGM.js → chunk-2CX7NWRB.js} +233 -437
- package/dist/cli-delegate/{chunk-F3QDG2GT.js → chunk-2SFOOFJJ.js} +259 -159
- package/dist/cli-delegate/chunk-2Y5AMLMY.js +136 -0
- package/dist/cli-delegate/{chunk-OKJUIAPS.js → chunk-4E2W63DA.js} +1 -62
- package/dist/cli-delegate/{chunk-6SRJTYJS.js → chunk-4SHNERBL.js} +37 -16
- package/dist/cli-delegate/chunk-5VO3RTMV.js +208 -0
- package/dist/cli-delegate/chunk-6E2LDY4F.js +27 -0
- package/dist/cli-delegate/{chunk-XQTPXKFA.js → chunk-6ZD2QZMN.js} +8 -17
- package/dist/cli-delegate/{chunk-6V5FMA3P.js → chunk-7CEI2YPS.js} +1 -1
- package/dist/cli-delegate/{chunk-DMSZHXZS.js → chunk-7DRWULEQ.js} +80 -7
- package/dist/cli-delegate/chunk-7NXCZSDL.js +54 -0
- package/dist/cli-delegate/chunk-AX3U3UWJ.js +328 -0
- package/dist/cli-delegate/{chunk-WOKWX5PL.js → chunk-BKALSTBZ.js} +18 -3
- package/dist/cli-delegate/chunk-BMGUGSY6.js +103 -0
- package/dist/cli-delegate/chunk-BYV46VRM.js +3309 -0
- package/dist/cli-delegate/{chunk-5GPULQBE.js → chunk-CAL76ADI.js} +4215 -682
- package/dist/cli-delegate/chunk-DSY6LLCQ.js +127 -0
- package/dist/cli-delegate/chunk-E6XNBVE4.js +581 -0
- package/dist/cli-delegate/{chunk-ZUZKZYCN.js → chunk-ESUNQ5XR.js} +46 -10
- package/dist/cli-delegate/{chunk-G5VVIZRC.js → chunk-F7HLSW6P.js} +1 -1
- package/dist/cli-delegate/chunk-FIEEOH5C.js +133 -0
- package/dist/cli-delegate/chunk-FKYZOWVD.js +719 -0
- package/dist/cli-delegate/chunk-GOMILC3O.js +918 -0
- package/dist/cli-delegate/chunk-I4KJYVPB.js +69 -0
- package/dist/cli-delegate/{chunk-JQOM7TTM.js → chunk-IDAOTDPE.js} +1 -100
- package/dist/cli-delegate/chunk-IROAQ77A.js +137 -0
- package/dist/cli-delegate/chunk-J2SJZICO.js +698 -0
- package/dist/cli-delegate/{chunk-6YQC2HLF.js → chunk-JHMMWNJ2.js} +54 -40
- package/dist/cli-delegate/{chunk-WQWXGIWB.js → chunk-M6CRG5O6.js} +165 -15
- package/dist/cli-delegate/{chunk-PHD7OOLE.js → chunk-MQ2UDEGV.js} +14 -3
- package/dist/cli-delegate/chunk-NTM7G2V4.js +220 -0
- package/dist/cli-delegate/chunk-PV7S5DPJ.js +175 -0
- package/dist/cli-delegate/{chunk-F7DQWYR5.js → chunk-RAXQOETZ.js} +6 -2
- package/dist/cli-delegate/{chunk-T7XSJSUQ.js → chunk-SIOMDAKL.js} +980 -784
- package/dist/cli-delegate/{chunk-KR6EM23A.js → chunk-TULVDQ4L.js} +3 -48
- package/dist/cli-delegate/chunk-UUYEKXKR.js +20 -0
- package/dist/cli-delegate/{chunk-7XGD2OEU.js → chunk-UXWHY6CQ.js} +2 -1
- package/dist/cli-delegate/{chunk-PWX7CKMD.js → chunk-VC3ECUEK.js} +1 -1
- package/dist/cli-delegate/{chunk-KXXWJTDO.js → chunk-WMNYVIYX.js} +1 -1
- package/dist/cli-delegate/chunk-XCY5KKUC.js +181 -0
- package/dist/cli-delegate/{chunk-H76PHZBI.js → chunk-XLY5G3CM.js} +14 -19
- package/dist/cli-delegate/cmd_adr_effective.js +41 -2
- package/dist/cli-delegate/cmd_analyze_session.js +7 -7
- package/dist/cli-delegate/cmd_brand_status.js +1287 -10
- package/dist/cli-delegate/cmd_ci_settle.js +330 -0
- package/dist/cli-delegate/cmd_conformance.js +669 -822
- package/dist/cli-delegate/cmd_doctor.js +26 -16
- package/dist/cli-delegate/cmd_doctor_neighbours.js +10 -7
- package/dist/cli-delegate/cmd_explain.js +9 -24
- package/dist/cli-delegate/cmd_export.js +14 -11
- package/dist/cli-delegate/cmd_fleet.js +5 -3
- package/dist/cli-delegate/cmd_git_convention.js +8 -4
- package/dist/cli-delegate/cmd_handoff.js +79 -242
- package/dist/cli-delegate/cmd_mcp_available.js +1 -1
- package/dist/cli-delegate/cmd_memory_get.js +4 -2
- package/dist/cli-delegate/cmd_migrate.js +2 -2
- package/dist/cli-delegate/cmd_packs_active.js +2 -2
- package/dist/cli-delegate/cmd_preflight.js +7 -5
- package/dist/cli-delegate/cmd_prune.js +16 -13
- package/dist/cli-delegate/cmd_route_audit.js +11 -8
- package/dist/cli-delegate/cmd_route_explain.js +649 -16
- package/dist/cli-delegate/cmd_session_recycle.js +15 -6
- package/dist/cli-delegate/cmd_settings_check.js +2 -2
- package/dist/cli-delegate/cmd_settings_get.js +1 -1
- package/dist/cli-delegate/cmd_settings_migrate.js +14 -11
- package/dist/cli-delegate/cmd_settings_set.js +1 -1
- package/dist/cli-delegate/cmd_sync.js +16 -13
- package/dist/cli-delegate/cmd_uninstall.js +185 -31
- package/dist/cli-delegate/cmd_update.js +67 -3
- package/dist/cli-delegate/cmd_upgrade.js +38 -7
- package/dist/cli-delegate/cmd_validate.js +16 -13
- package/dist/cli-delegate/cmd_versions.js +1 -1
- package/dist/cli-delegate/dashboard_mode.js +1 -1
- package/dist/cli-delegate/gate_execute.js +4 -3
- package/dist/cli-delegate/roadmap_age.js +22 -0
- package/dist/cli-delegate/roadmap_gates.js +4 -3
- package/dist/cli-delegate/update_roadmap_progress.js +3 -2
- package/dist/cli-delegate/upgrade_unattended-VVL6JLSX.js +541 -0
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +409 -201
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +8 -8
- package/dist/discovery/dormancy-report.md +1 -1
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +36 -27
- package/dist/discovery/trust-report.md +3 -3
- package/dist/discovery/workspaces.json +25 -16
- package/dist/hooks/chat_history.chunk.cjs +6852 -0
- package/dist/hooks/chat_history.chunk.cjs.sha256 +1 -0
- package/dist/hooks/dispatch.js +17706 -18627
- package/dist/hooks/dispatch.sha256 +1 -1
- package/dist/hooks/egress_engine.chunk.cjs +915 -0
- package/dist/hooks/egress_engine.chunk.cjs.sha256 +1 -0
- package/dist/hooks/svg_rules.chunk.cjs +1858 -0
- package/dist/hooks/svg_rules.chunk.cjs.sha256 +1 -0
- package/dist/install/conflict.js +36 -6
- package/dist/install/conflictTracker.js +81 -7
- package/dist/install/detect.js +3 -3
- package/dist/install/hostPermissionsAdapter.js +106 -0
- package/dist/install/install.mjs +3117 -1949
- package/dist/install/installThinLayer.js +1 -1
- package/dist/install/manifestFiles.js +21 -0
- package/dist/install/noGoDenyRows.js +300 -0
- package/dist/install/noGoRules.js +368 -0
- package/dist/install/ownershipLedger.js +133 -0
- package/dist/install/plan.js +1 -1
- package/dist/install/preflight.js +39 -8
- package/dist/install/preserve.js +74 -12
- package/dist/install/recordedOwnership.js +88 -5
- package/dist/install/rule_scope.js +20 -3
- package/dist/install/stagedRuntime.js +455 -0
- package/dist/install/toolsArg.js +19 -0
- package/dist/install/userPin.js +47 -0
- package/dist/install/wizard-plan.js +26 -4
- package/dist/mcp/awesome-mcp-servers.row.md +1 -1
- package/dist/mcp/mcp-cloudflare-catalogue.json +3 -2
- package/dist/mcp/registry-manifest.json +6 -5
- package/dist/mcp/server.json +3 -3
- package/dist/mcp/server.mjs +9814 -5333
- package/dist/router.json +1 -1
- package/dist/scripts/_lib/agent_settings.js +7 -12
- package/dist/scripts/_lib/asset_render_record.js +219 -0
- package/dist/scripts/_lib/claude_builtin_names.js +9 -4
- package/dist/scripts/_lib/claude_settings_hooks.js +102 -34
- package/dist/scripts/_lib/egress_rules.js +766 -0
- package/dist/scripts/_lib/environment_detector.js +24 -33
- package/dist/scripts/_lib/global_deploy_inventory.js +146 -9
- package/dist/scripts/_lib/guidelines_lane.js +10 -1
- package/dist/scripts/_lib/identifier_redaction.js +24 -0
- package/dist/scripts/_lib/installed_layer.js +17 -0
- package/dist/scripts/_lib/installed_layer_normalise.js +72 -0
- package/dist/scripts/_lib/lean_projection_mode.js +34 -152
- package/dist/scripts/_lib/project_tree_form.js +118 -0
- package/dist/scripts/_lib/scan_scope.js +105 -0
- package/dist/scripts/_lib/scoped_projection.js +133 -3
- package/dist/scripts/_lib/settings_removed_keys.js +29 -0
- package/dist/scripts/_lib/settings_renamed_keys.js +17 -5
- package/dist/scripts/_lib/subagent_native_fields.js +35 -0
- package/dist/scripts/_lib/svg_dom.js +284 -0
- package/dist/scripts/_lib/svg_filled_counter.js +285 -0
- package/dist/scripts/_lib/svg_geometry.js +477 -0
- package/dist/scripts/_lib/svg_motion.js +179 -0
- package/dist/scripts/_lib/svg_rules.js +1339 -0
- package/dist/scripts/_lib/svg_urls.js +67 -0
- package/dist/scripts/_lib/ui_surface.js +19 -0
- package/dist/scripts/_lib/verification_command.js +364 -0
- package/dist/scripts/_lib/workspace_secrets.js +229 -0
- package/dist/scripts/ai_council/seat_policy.js +27 -0
- package/dist/scripts/ai_council/transport_resolver.js +9 -10
- package/dist/scripts/condense.js +25 -29
- package/dist/scripts/lint_svg_asset.js +324 -0
- package/dist/server/io/substituteTemplate.js +2 -2
- package/dist/server/io/yamlIO.js +2 -2
- package/dist/server/routes/install.js +5 -1
- package/dist/server/routes/settings.js +2 -2
- package/dist/server/routes/wizard.js +1 -1
- package/dist/server/schemas/settings.js +22 -16
- package/dist/server/serverInfo.js +1 -1
- package/dist/shared/brandTokenDocument.js +47 -0
- package/dist/shared/brandTokenPaths.js +43 -0
- package/dist/shared/settingsCarveOut.js +0 -7
- package/dist/shared/skillRanking.js +103 -5
- package/dist/shared/userMd/formAdapter.js +16 -0
- package/dist/shared/userMd/schema.js +17 -0
- package/dist/ui/assets/index-w70Ado09.js +23 -0
- package/dist/ui/index.html +1 -1
- package/docs/MIGRATION.md +89 -2
- package/docs/THIRD-PARTY-NOTICES.md +27 -0
- package/docs/contracts/settings-classes.md +27 -9
- package/docs/guidelines/agent-infra/api-cost-levers.md +4 -3
- package/docs/guidelines/agent-infra/model-recommendation.md +11 -5
- package/docs/guidelines/agent-infra/rule-body-migration-inventory.md +1 -1
- package/docs/guidelines/agent-infra/self-improvement-pipeline.md +47 -24
- package/docs/guidelines/design-antipatterns.md +6 -1
- package/docs/guidelines/design-asset-discipline.md +17 -0
- package/docs/guidelines/design-fidelity-routing.md +1 -0
- package/docs/guidelines/php/api-design.md +10 -1
- package/llms.txt +12 -10
- package/package.json +15 -5
- package/src/agent-src/scripts/dashboard_mode.ts +4 -1
- package/src/agent-src/scripts/roadmap_age.ts +175 -0
- package/src/agent-src/scripts/update_roadmap_progress.ts +10 -2
- package/src/agent-src/templates/AGENTS.md +1 -1
- package/src/agent-src/templates/scripts/check_memory.ts +2 -2
- package/src/agent-src/templates/scripts/historical-bug-patterns.example.yml +13 -1
- package/src/agent-src/templates/scripts/work_engine/cli.ts +17 -0
- package/src/agent-src/templates/scripts/work_engine/cli_args.ts +10 -0
- package/src/agent-src/templates/scripts/work_engine/directives/ui/scaffold.ts +22 -13
- package/src/agent-src/templates/scripts/work_engine/dispatcher.ts +18 -4
- package/src/agent-src/templates/scripts/work_engine/procedure/checks.ts +283 -0
- package/src/agent-src/templates/scripts/work_engine/procedure/run.ts +432 -0
- package/src/agent-src/templates/scripts/work_engine/procedure/sidecar.ts +185 -0
- package/src/agent-src/templates/scripts/work_engine/state.ts +3 -0
- package/src/config/agent-settings.template.yml +120 -57
- package/src/config/agents-paths.yml +13 -7
- package/src/config/ci-local-parity.yml +44 -0
- package/src/config/continuity-surface.json +51 -2
- package/src/config/depth-audit-samples.json +5 -0
- package/src/config/discovery/command-verbs.yml +1 -0
- package/src/config/dispatch-economy-metrics.json +1 -0
- package/src/config/egress-mutations/class-precedence-swapped.json +7 -0
- package/src/config/egress-mutations/credential-token-restores.json +7 -0
- package/src/config/egress-mutations/iban-checksum-disabled.json +7 -0
- package/src/config/egress-mutations/raw-value-in-the-count-record.json +7 -0
- package/src/config/evaluator-budgets.json +4 -4
- package/src/config/gate-coverage.yml +149 -3
- package/src/config/gate-reachability-exemptions.json +3 -5
- package/src/config/gate-violation-baselines.json +29 -25
- package/src/config/gitignore-block.txt +6 -3
- package/src/config/hook-bundle-budget.json +34 -3
- package/src/config/hook-carrier-probes.json +30 -0
- package/src/config/hook-latency-budget.json +4 -2
- package/src/config/host-injection-effect.json +8 -1
- package/src/config/host-skill-frontmatter-keys.json +56 -0
- package/src/config/layer-form-brakes.json +4 -0
- package/src/config/layer-form-comparison-corpus.json +42 -0
- package/src/config/loop-surfaces.yaml +28 -47
- package/src/config/memory-twin-verdicts.yml +9 -1
- package/src/config/metric-registry.yml +40 -3
- package/src/config/pack-size-budget.json +15 -0
- package/src/config/procedure-core-budget.json +21 -0
- package/src/config/profiles/minimal.ini +1 -1
- package/src/config/project-tree-form.json +24 -0
- package/src/config/reach-channels.yml +3 -3
- package/src/config/reach-prescriptions-intake.yml +1 -1
- package/src/config/roadmap-step-size-baseline.json +118 -0
- package/src/config/routing-coverage-seed.json +100 -2
- package/src/config/skill-body-budget.json +686 -0
- package/src/config/skill-fork-pilot.json +17 -0
- package/src/config/skill-lifecycle-probes-codex.json +57 -0
- package/src/config/skill-lifecycle-probes.json +57 -0
- package/src/config/skill-output-shape.json +316 -0
- package/src/config/step-depth-table.json +58 -0
- package/src/config/turnaround-budget.json +90 -0
- package/src/install/conflict.ts +38 -6
- package/src/install/conflictTracker.ts +126 -8
- package/src/install/detect.ts +3 -3
- package/src/install/hostPermissionsAdapter.ts +136 -0
- package/src/install/installThinLayer.ts +6 -1
- package/src/install/manifestFiles.ts +24 -0
- package/src/install/noGoDenyRows.ts +368 -0
- package/src/install/noGoRules.ts +438 -0
- package/src/install/ownershipLedger.ts +180 -0
- package/src/install/plan.ts +1 -1
- package/src/install/preflight.ts +42 -10
- package/src/install/preserve.ts +94 -12
- package/src/install/recordedOwnership.ts +121 -3
- package/src/install/rule_scope.ts +20 -3
- package/src/install/stagedRuntime.ts +528 -0
- package/src/install/toolsArg.ts +16 -0
- package/src/install/types.ts +23 -2
- package/src/install/userPin.ts +54 -0
- package/src/install/wizard-plan.ts +25 -4
- package/src/scripts/_cli/_doctor_emit.ts +24 -0
- package/src/scripts/_cli/cmd_brand_status.ts +223 -12
- package/src/scripts/_cli/cmd_ci_settle.ts +32 -0
- package/src/scripts/_cli/cmd_doctor.ts +23 -44
- package/src/scripts/_cli/cmd_route_explain.ts +176 -2
- package/src/scripts/_cli/cmd_uninstall.ts +270 -26
- package/src/scripts/_cli/cmd_update.ts +34 -1
- package/src/scripts/_cli/cmd_upgrade.ts +38 -2
- package/src/scripts/_cli/detection_report.ts +7 -0
- package/src/scripts/_cli/doctor_execution.ts +1 -2
- package/src/scripts/_cli/doctor_install_mode.ts +39 -0
- package/src/scripts/_cli/doctor_network_posture.ts +3 -3
- package/src/scripts/_cli/doctor_ownership_ledger.ts +126 -0
- package/src/scripts/_cli/doctor_update_verdict.ts +104 -0
- package/src/scripts/_cli/explain_last/scrubber.ts +9 -21
- package/src/scripts/_cli/upgrade_unattended.ts +548 -0
- package/src/scripts/_dispatch.bash +42 -9
- package/src/scripts/_lib/activation_ladder.ts +1 -1
- package/src/scripts/_lib/advisory_inventory.ts +405 -0
- package/src/scripts/_lib/advisory_notice.ts +270 -0
- package/src/scripts/_lib/advisory_sources.ts +752 -0
- package/src/scripts/_lib/advisory_verdicts.ts +363 -0
- package/src/scripts/_lib/agent_artifact_location.ts +177 -0
- package/src/scripts/_lib/agent_settings.ts +7 -12
- package/src/scripts/_lib/arrival_record.ts +217 -0
- package/src/scripts/_lib/asset_render_record.ts +247 -0
- package/src/scripts/_lib/billing_grant.ts +4 -2
- package/src/scripts/_lib/brand_voice_slot.ts +258 -0
- package/src/scripts/_lib/canary_status.ts +24 -0
- package/src/scripts/_lib/cc_transcript.ts +276 -0
- package/src/scripts/_lib/changelog_eras.ts +83 -0
- package/src/scripts/_lib/claim_phrases.ts +71 -0
- package/src/scripts/_lib/classify_update.ts +171 -0
- package/src/scripts/_lib/claude_builtin_names.ts +9 -4
- package/src/scripts/_lib/claude_hook_scope.ts +195 -0
- package/src/scripts/_lib/claude_settings_hooks.ts +118 -34
- package/src/scripts/_lib/codex_resident_set.ts +460 -0
- package/src/scripts/_lib/codex_skill_finder.ts +225 -0
- package/src/scripts/_lib/confusables.ts +19 -0
- package/src/scripts/_lib/consumer_impact.ts +199 -0
- package/src/scripts/_lib/content_class.ts +127 -0
- package/src/scripts/_lib/counted_probe.ts +68 -1
- package/src/scripts/_lib/credential_deny_rows.ts +151 -0
- package/src/scripts/_lib/credential_files.ts +367 -0
- package/src/scripts/_lib/delivery_arm_experiment.ts +2 -2
- package/src/scripts/_lib/depth_flip.ts +141 -0
- package/src/scripts/_lib/design_lock.ts +117 -0
- package/src/scripts/_lib/design_sync_ledger.ts +142 -0
- package/src/scripts/_lib/design_sync_plan.ts +177 -0
- package/src/scripts/_lib/design_sync_reconcile.ts +159 -0
- package/src/scripts/_lib/design_sync_verify.ts +99 -0
- package/src/scripts/_lib/design_system_claude_design.ts +323 -0
- package/src/scripts/_lib/design_system_import.ts +84 -6
- package/src/scripts/_lib/dispatch_import_closure.ts +42 -11
- package/src/scripts/_lib/egress_credential_env.ts +35 -0
- package/src/scripts/_lib/egress_engine.ts +22 -0
- package/src/scripts/_lib/egress_known_values.ts +223 -0
- package/src/scripts/_lib/egress_normalize.ts +67 -0
- package/src/scripts/_lib/egress_prefixes.ts +42 -0
- package/src/scripts/_lib/egress_rules.ts +896 -0
- package/src/scripts/_lib/egress_rules_linearity.ts +56 -0
- package/src/scripts/_lib/egress_sender_scan.ts +290 -0
- package/src/scripts/_lib/egress_session_table.ts +510 -0
- package/src/scripts/_lib/egress_text.ts +63 -0
- package/src/scripts/_lib/egress_token.ts +252 -0
- package/src/scripts/_lib/empty_cycles.ts +1 -1
- package/src/scripts/_lib/environment_detector.ts +45 -30
- package/src/scripts/_lib/exemption_shape.ts +75 -1
- package/src/scripts/_lib/floor_posture.ts +185 -0
- package/src/scripts/_lib/forge_protection.ts +140 -2
- package/src/scripts/_lib/global_deploy_inventory.ts +159 -6
- package/src/scripts/_lib/guidelines_lane.ts +12 -1
- package/src/scripts/_lib/hand_kinds.ts +65 -0
- package/src/scripts/_lib/headless_invocation.ts +3 -3
- package/src/scripts/_lib/host_capability.ts +34 -2
- package/src/scripts/_lib/host_env_write.ts +39 -18
- package/src/scripts/_lib/host_listing_model.ts +14 -7
- package/src/scripts/_lib/identifier_redaction.ts +26 -0
- package/src/scripts/_lib/impact_bump.ts +70 -0
- package/src/scripts/_lib/install_reach_checks.ts +53 -1
- package/src/scripts/_lib/installed_layer.ts +31 -0
- package/src/scripts/_lib/installed_layer_normalise.ts +75 -0
- package/src/scripts/_lib/instructions_loaded_classify.ts +75 -0
- package/src/scripts/_lib/instructions_loaded_event.ts +53 -0
- package/src/scripts/_lib/knowledge_global_redaction.ts +2 -2
- package/src/scripts/_lib/layer_form_corpus.ts +165 -0
- package/src/scripts/_lib/layer_form_decision.ts +248 -0
- package/src/scripts/_lib/layer_form_evidence.ts +112 -0
- package/src/scripts/_lib/lean_projection_mode.ts +32 -161
- package/src/scripts/_lib/llm_proposer_transport.ts +1 -0
- package/src/scripts/_lib/loop_guards.ts +8 -120
- package/src/scripts/_lib/major_surface.ts +207 -0
- package/src/scripts/_lib/mcp_bridge.ts +30 -69
- package/src/scripts/_lib/merge_clearance_record.ts +384 -0
- package/src/scripts/_lib/neighbour_census.ts +18 -1
- package/src/scripts/_lib/orchestration_record.ts +61 -0
- package/src/scripts/_lib/outcome_vocabularies.ts +15 -23
- package/src/scripts/_lib/pin_advice.ts +49 -0
- package/src/scripts/_lib/platform_anchor.ts +222 -0
- package/src/scripts/_lib/procedure_checks.ts +5 -0
- package/src/scripts/_lib/project_tree_form.ts +134 -0
- package/src/scripts/_lib/projection_key_migration.ts +122 -0
- package/src/scripts/_lib/prompt_shape.ts +13 -2
- package/src/scripts/_lib/provenance_verify.ts +272 -0
- package/src/scripts/_lib/quota_parked.ts +27 -1
- package/src/scripts/_lib/ratification_artifact.ts +64 -1
- package/src/scripts/_lib/ratification_subject.ts +508 -46
- package/src/scripts/_lib/release_findings_ingest.ts +52 -5
- package/src/scripts/_lib/release_highlights.ts +72 -2
- package/src/scripts/_lib/release_settings_surface.ts +392 -0
- package/src/scripts/_lib/review_round.ts +134 -0
- package/src/scripts/_lib/roadmap_checkboxes.ts +1 -1
- package/src/scripts/_lib/roadmap_slug_lock.ts +254 -0
- package/src/scripts/_lib/roadmap_step_size.ts +75 -0
- package/src/scripts/_lib/run_checkpoint.ts +60 -3
- package/src/scripts/_lib/runtime_wiring_checks.ts +15 -1
- package/src/scripts/_lib/scope_guard.sh +64 -5
- package/src/scripts/_lib/scoped_projection.ts +136 -3
- package/src/scripts/_lib/secret_detector.ts +24 -103
- package/src/scripts/_lib/security_fix.ts +429 -0
- package/src/scripts/_lib/security_fix_context.ts +133 -0
- package/src/scripts/_lib/self_repair.ts +69 -39
- package/src/scripts/_lib/self_repair_outgoing.ts +209 -0
- package/src/scripts/_lib/self_repair_payload.ts +86 -0
- package/src/scripts/_lib/session_eol.ts +3 -0
- package/src/scripts/_lib/session_pr_watch.ts +207 -0
- package/src/scripts/_lib/session_register.ts +51 -1
- package/src/scripts/_lib/session_tag.ts +51 -0
- package/src/scripts/_lib/settings_removed_keys.ts +30 -0
- package/src/scripts/_lib/settings_renamed_keys.ts +19 -5
- package/src/scripts/_lib/skill_catalogue.ts +66 -25
- package/src/scripts/_lib/skill_fork_pilot.ts +121 -0
- package/src/scripts/_lib/skill_leases.ts +203 -0
- package/src/scripts/_lib/skill_listing_overrides.ts +294 -0
- package/src/scripts/_lib/skill_materialisation.ts +388 -0
- package/src/scripts/_lib/skill_materialisation_gate.ts +210 -0
- package/src/scripts/_lib/skill_materialisation_lock.ts +149 -0
- package/src/scripts/_lib/skill_materialisation_triggers.ts +96 -0
- package/src/scripts/_lib/skill_origin.ts +21 -1
- package/src/scripts/_lib/skill_reach.ts +342 -0
- package/src/scripts/_lib/source_shape.ts +7 -2
- package/src/scripts/_lib/sqlite_guard.ts +1 -1
- package/src/scripts/_lib/step_anatomy.ts +330 -0
- package/src/scripts/_lib/subagent_capsule.ts +8 -2
- package/src/scripts/_lib/subagent_native_fields.ts +30 -0
- package/src/scripts/_lib/subagent_spawn.ts +36 -0
- package/src/scripts/_lib/subagent_steering.ts +367 -0
- package/src/scripts/_lib/svg_dom.ts +318 -0
- package/src/scripts/_lib/svg_filled_counter.ts +287 -0
- package/src/scripts/_lib/svg_geometry.ts +480 -0
- package/src/scripts/_lib/svg_motion.ts +208 -0
- package/src/scripts/_lib/svg_rules.ts +1455 -0
- package/src/scripts/_lib/svg_urls.ts +72 -0
- package/src/scripts/_lib/test_delta.ts +89 -6
- package/src/scripts/_lib/tier_downshift_verdict.ts +222 -0
- package/src/scripts/_lib/tool_result_census.ts +62 -0
- package/src/scripts/_lib/trigger_routers.ts +1 -0
- package/src/scripts/_lib/turnaround_throughput.ts +378 -0
- package/src/scripts/_lib/ui_surface.ts +22 -0
- package/src/scripts/_lib/unattended_gates.ts +100 -0
- package/src/scripts/_lib/undeployed_fixes.ts +34 -0
- package/src/scripts/_lib/update_check.ts +143 -12
- package/src/scripts/_lib/update_invite.ts +116 -0
- package/src/scripts/_lib/update_notice.ts +259 -0
- package/src/scripts/_lib/verification_command.ts +59 -0
- package/src/scripts/_lib/verify_clause.ts +31 -19
- package/src/scripts/_lib/version_order.ts +146 -0
- package/src/scripts/_lib/worker_reuse.ts +191 -0
- package/src/scripts/_lib/workspace_secrets.ts +273 -0
- package/src/scripts/_lib/worktree_git.ts +67 -0
- package/src/scripts/_lib/worktree_ignored.ts +116 -0
- package/src/scripts/adoption_status.ts +330 -3
- package/src/scripts/adr_cite_check.ts +93 -0
- package/src/scripts/advisories.ts +803 -0
- package/src/scripts/ai-image/adapters/flux.sh +1 -0
- package/src/scripts/ai-image/adapters/gemini-image.sh +1 -0
- package/src/scripts/ai-image/adapters/ideogram.sh +1 -0
- package/src/scripts/ai-image/adapters/recraft.sh +1 -0
- package/src/scripts/ai-video/adapters/comfyui.sh +1 -0
- package/src/scripts/ai-video/adapters/fal.sh +1 -0
- package/src/scripts/ai-video/adapters/gemini-veo.sh +1 -0
- package/src/scripts/ai-video/adapters/higgsfield.sh +1 -0
- package/src/scripts/ai-video/adapters/kling.sh +1 -0
- package/src/scripts/ai-video/adapters/musetalk.sh +1 -0
- package/src/scripts/ai-video/adapters/openai-images.sh +1 -0
- package/src/scripts/ai-video/adapters/replicate.sh +1 -0
- package/src/scripts/ai-video/adapters/sora.sh +1 -0
- package/src/scripts/ai-video/adapters/syncso.sh +1 -0
- package/src/scripts/ai-video/stitch.sh +115 -2
- package/src/scripts/ai_council/airgap.ts +1 -0
- package/src/scripts/ai_council/api_transport.ts +27 -4
- package/src/scripts/ai_council/budget_guard.ts +300 -11
- package/src/scripts/ai_council/bundler.ts +20 -29
- package/src/scripts/ai_council/chairman.ts +17 -2
- package/src/scripts/ai_council/cli_agency_bounds.ts +158 -0
- package/src/scripts/ai_council/cli_launch_env.ts +54 -0
- package/src/scripts/ai_council/cli_least_agency_canary.ts +18 -2
- package/src/scripts/ai_council/clients.ts +55 -73
- package/src/scripts/ai_council/config.ts +16 -22
- package/src/scripts/ai_council/council_egress.ts +167 -0
- package/src/scripts/ai_council/exposure_ledger.ts +117 -0
- package/src/scripts/ai_council/free_hand_shadow.ts +276 -0
- package/src/scripts/ai_council/free_route.ts +216 -0
- package/src/scripts/ai_council/free_route_catalog.ts +173 -0
- package/src/scripts/ai_council/free_route_client.ts +95 -0
- package/src/scripts/ai_council/free_rung.ts +61 -0
- package/src/scripts/ai_council/hand_payload.ts +230 -0
- package/src/scripts/ai_council/hand_schemas.ts +123 -0
- package/src/scripts/ai_council/jury_aggregate.ts +155 -1
- package/src/scripts/ai_council/kind_flip.ts +221 -0
- package/src/scripts/ai_council/kind_flip_state.ts +19 -0
- package/src/scripts/ai_council/learn_low_impact_preview.ts +50 -22
- package/src/scripts/ai_council/modification_review.ts +98 -5
- package/src/scripts/ai_council/necessity.ts +7 -0
- package/src/scripts/ai_council/orchestrator.ts +16 -16
- package/src/scripts/ai_council/pricing.ts +10 -0
- package/src/scripts/ai_council/redact_low_impact_entry.ts +5 -2
- package/src/scripts/ai_council/response_render.ts +27 -4
- package/src/scripts/ai_council/round_reservations.ts +119 -0
- package/src/scripts/ai_council/route_chooser.ts +161 -0
- package/src/scripts/ai_council/route_liveness.ts +152 -0
- package/src/scripts/ai_council/route_member.ts +52 -0
- package/src/scripts/ai_council/seat_policy.ts +40 -0
- package/src/scripts/ai_council/seat_resume.ts +40 -0
- package/src/scripts/ai_council/shadow_dispatch.ts +13 -3
- package/src/scripts/ai_council/spend_gate.ts +18 -2
- package/src/scripts/ai_council/status_surface.ts +37 -0
- package/src/scripts/ai_council/transport_resolver.ts +15 -18
- package/src/scripts/analysis_analysts.ts +226 -0
- package/src/scripts/analysis_anchors.ts +140 -0
- package/src/scripts/analysis_and_optimize.ts +44 -0
- package/src/scripts/analysis_emit.ts +150 -0
- package/src/scripts/analysis_exchange.ts +186 -0
- package/src/scripts/analysis_gate.ts +158 -0
- package/src/scripts/analysis_inbox_final.ts +173 -0
- package/src/scripts/analysis_ledger.ts +119 -0
- package/src/scripts/analysis_pr_optimize.ts +219 -0
- package/src/scripts/analysis_pr_review.ts +240 -0
- package/src/scripts/analysis_pr_target.ts +121 -0
- package/src/scripts/analysis_prompts.ts +130 -0
- package/src/scripts/analysis_publish.ts +358 -0
- package/src/scripts/analysis_questions.ts +78 -0
- package/src/scripts/analysis_run.ts +248 -0
- package/src/scripts/analysis_run_record.ts +210 -0
- package/src/scripts/analysis_target.ts +343 -0
- package/src/scripts/analysis_validate.ts +161 -0
- package/src/scripts/anchor_eval_falsify.ts +1 -1
- package/src/scripts/arrival_report.ts +115 -0
- package/src/scripts/ask_transport.ts +284 -35
- package/src/scripts/backfill_model_tier.ts +4 -5
- package/src/scripts/before_complete_hook.ts +48 -2
- package/src/scripts/bench_hook_latency.ts +3 -3
- package/src/scripts/bench_procedure_cursor.ts +440 -0
- package/src/scripts/bootstrap.sh +3 -3
- package/src/scripts/build_exit_code_register.ts +440 -0
- package/src/scripts/build_proof.ts +23 -1
- package/src/scripts/cache_realization_report.ts +155 -14
- package/src/scripts/canary_liveness.ts +117 -0
- package/src/scripts/chat_history.ts +12 -15
- package/src/scripts/check_account_surface.ts +318 -0
- package/src/scripts/check_agent_artifact_location.ts +17 -160
- package/src/scripts/check_bundle_path_leakage.ts +6 -0
- package/src/scripts/check_ci_local_parity.ts +21 -13
- package/src/scripts/check_claims.ts +77 -2
- package/src/scripts/check_completion_review.ts +34 -1
- package/src/scripts/check_concern_admissions.ts +41 -5
- package/src/scripts/check_consumer_scope_flip.ts +1 -1
- package/src/scripts/check_context_paths.ts +2 -0
- package/src/scripts/check_council_layout.ts +9 -0
- package/src/scripts/check_credential_spelling.ts +267 -0
- package/src/scripts/check_egress_mutations.ts +239 -0
- package/src/scripts/check_enforcement_coverage.ts +16 -3
- package/src/scripts/check_estate_count.ts +16 -1
- package/src/scripts/check_finding_dispositions.ts +147 -0
- package/src/scripts/check_gate_coverage.ts +123 -21
- package/src/scripts/check_gate_reachability.ts +16 -2
- package/src/scripts/check_generator_sync.ts +46 -0
- package/src/scripts/check_hook_bundle_composition.ts +139 -1
- package/src/scripts/check_host_docs_digest.ts +142 -5
- package/src/scripts/check_kernel_edit_ratified.ts +301 -76
- package/src/scripts/check_kernel_rule_bundle.ts +14 -10
- package/src/scripts/check_knowledge_cards.ts +83 -3
- package/src/scripts/check_memory.ts +13 -3
- package/src/scripts/check_pack_size.ts +1 -1
- package/src/scripts/check_permission_deny_syntax.ts +247 -0
- package/src/scripts/check_platform_anchor.ts +243 -0
- package/src/scripts/check_proposal.ts +183 -1
- package/src/scripts/check_reach_channels.ts +5 -3
- package/src/scripts/check_references.ts +5 -2
- package/src/scripts/check_release_manifest_content.ts +33 -0
- package/src/scripts/check_release_pr_shape.ts +5 -0
- package/src/scripts/check_rule_invariants.ts +9 -1
- package/src/scripts/check_skill_body_budget.ts +343 -0
- package/src/scripts/check_skill_requires.ts +137 -1
- package/src/scripts/check_step_receipts.ts +246 -0
- package/src/scripts/check_structural_breaking.ts +7 -1
- package/src/scripts/check_suppression_hygiene.ts +8 -0
- package/src/scripts/check_test_weakening.ts +14 -0
- package/src/scripts/check_token_quality_golden.ts +5 -1
- package/src/scripts/check_update_banner.ts +50 -3
- package/src/scripts/check_verify_expectation_delta.ts +2 -1
- package/src/scripts/check_voice_lexicon.ts +531 -0
- package/src/scripts/ci_os_attribution.ts +327 -0
- package/src/scripts/ci_platform_scope.ts +69 -0
- package/src/scripts/ci_settle.ts +4 -1
- package/src/scripts/ci_status.ts +0 -1
- package/src/scripts/ci_time_to_green.ts +748 -0
- package/src/scripts/classify_merge_risk.ts +407 -19
- package/src/scripts/code_graph/sqlite_store.ts +1 -1
- package/src/scripts/compile_trigger_evals.ts +353 -0
- package/src/scripts/condense.ts +25 -31
- package/src/scripts/consumer_matrix.ts +61 -3
- package/src/scripts/council_availability_hook.ts +12 -4
- package/src/scripts/council_cli.ts +48 -38
- package/src/scripts/cross_repo_retrieve.ts +9 -72
- package/src/scripts/design_lock.ts +106 -0
- package/src/scripts/design_slop_rules.ts +30 -0
- package/src/scripts/design_sync.ts +264 -0
- package/src/scripts/design_system_import.ts +30 -13
- package/src/scripts/dispatch_economy_report.ts +46 -1
- package/src/scripts/dispatch_r2_reviewer.ts +41 -5
- package/src/scripts/egress_canary.ts +166 -0
- package/src/scripts/egress_sender_census.ts +101 -0
- package/src/scripts/external_sources_denylist.json +94 -12
- package/src/scripts/generate_catalog.ts +6 -2
- package/src/scripts/generate_owned_digest.ts +163 -0
- package/src/scripts/generate_reference_toc.ts +143 -0
- package/src/scripts/generate_subagent_floor.ts +11 -1
- package/src/scripts/handoff_context_hook.ts +34 -0
- package/src/scripts/hook_carrier_census.ts +263 -0
- package/src/scripts/hook_chunks.d.mts +12 -0
- package/src/scripts/hook_chunks.mjs +114 -0
- package/src/scripts/hook_manifest.json +1 -1
- package/src/scripts/hook_manifest.yaml +65 -42
- package/src/scripts/hooks/block_config_weakening.ts +127 -3
- package/src/scripts/hooks/block_credential_reads.ts +165 -0
- package/src/scripts/hooks/block_no_verify.ts +47 -23
- package/src/scripts/hooks/block_speaking_inbox_dir.ts +54 -8
- package/src/scripts/hooks/category_a.ts +202 -25
- package/src/scripts/hooks/concern_failure_policy.ts +6 -6
- package/src/scripts/hooks/concern_registry.ts +31 -6
- package/src/scripts/hooks/concern_registry_types.ts +11 -0
- package/src/scripts/hooks/delegation_nudge_hook.ts +105 -15
- package/src/scripts/hooks/design_pass_hook.ts +199 -13
- package/src/scripts/hooks/dispatch_hook.ts +13 -12
- package/src/scripts/hooks/egress_engine_loader.ts +125 -0
- package/src/scripts/hooks/egress_stage.ts +440 -0
- package/src/scripts/hooks/hook_stdin.ts +29 -4
- package/src/scripts/hooks/host_docs_pages.ts +194 -0
- package/src/scripts/hooks/host_docs_pages.yaml +75 -0
- package/src/scripts/hooks/host_lowering.json +1 -1
- package/src/scripts/hooks/host_lowering.yaml +22 -21
- package/src/scripts/hooks/host_rate_marker_hook.ts +73 -0
- package/src/scripts/hooks/instructions_observer_hook.ts +170 -0
- package/src/scripts/hooks/interruption_ledger_hook.ts +1 -1
- package/src/scripts/hooks/lazy_concern.ts +148 -0
- package/src/scripts/hooks/orchestration_record_hook.ts +80 -2
- package/src/scripts/hooks/payload_stub.ts +16 -6
- package/src/scripts/hooks/permission_gate.ts +7 -7
- package/src/scripts/hooks/push_settle_hook.ts +32 -3
- package/src/scripts/hooks/replay_hook.ts +43 -0
- package/src/scripts/hooks/reread_guard_hook.ts +87 -10
- package/src/scripts/hooks/rtk_wrap_hook.ts +4 -3
- package/src/scripts/hooks/rule_inject_hook.ts +8 -1
- package/src/scripts/hooks/session_eol_hook.ts +48 -1
- package/src/scripts/hooks/source_first_gate_hook.ts +6 -8
- package/src/scripts/hooks/spawn_guard_shadow_hook.ts +203 -10
- package/src/scripts/hooks/state_io.ts +2 -2
- package/src/scripts/hooks/svg_obligation.ts +553 -0
- package/src/scripts/hooks/svg_rules_loader.ts +133 -0
- package/src/scripts/hooks/tool_result_bytes_hook.ts +14 -5
- package/src/scripts/hooks/turn_end_gate_hook.ts +5 -3
- package/src/scripts/hooks/ui_route_nudge_hook.ts +2 -12
- package/src/scripts/hooks_doctor.ts +31 -0
- package/src/scripts/hooks_status.ts +58 -3
- package/src/scripts/inbox_source_census.ts +74 -13
- package/src/scripts/install +25 -3
- package/src/scripts/install.ts +60 -91
- package/src/scripts/interruption_report.ts +11 -1
- package/src/scripts/layer_baseline_report.ts +267 -0
- package/src/scripts/learning_sidecar.ts +1 -1
- package/src/scripts/lint_agents_layout.ts +3 -0
- package/src/scripts/lint_blocker_citations.ts +104 -0
- package/src/scripts/lint_breaking_changes_index.ts +40 -7
- package/src/scripts/lint_consolidation_lineage.ts +150 -19
- package/src/scripts/lint_consumer_internal_refs.ts +90 -42
- package/src/scripts/lint_context_spine_usage.ts +21 -0
- package/src/scripts/lint_design_antipattern_parity.ts +39 -7
- package/src/scripts/lint_design_quality.ts +60 -12
- package/src/scripts/lint_evidence_artifacts.ts +31 -0
- package/src/scripts/lint_example_fences.ts +11 -2
- package/src/scripts/lint_ghostwriter_source.ts +42 -10
- package/src/scripts/lint_hook_manifest.ts +94 -0
- package/src/scripts/lint_marketplace_install_completeness.ts +4 -0
- package/src/scripts/lint_mcp_config_security.ts +9 -11
- package/src/scripts/lint_motion_authority_drift.ts +27 -0
- package/src/scripts/lint_plan_risk_register.ts +28 -1
- package/src/scripts/lint_positioning.ts +4 -4
- package/src/scripts/lint_provenance.ts +1 -0
- package/src/scripts/lint_roadmap_blockers.ts +65 -4
- package/src/scripts/lint_roadmap_complexity.ts +98 -0
- package/src/scripts/lint_skill_link_reach.ts +251 -9
- package/src/scripts/lint_skill_procedures.ts +252 -0
- package/src/scripts/lint_skill_scripts_readonly.ts +12 -1
- package/src/scripts/lint_subagent_determinism.ts +14 -1
- package/src/scripts/lint_svg_asset.ts +365 -0
- package/src/scripts/lint_ticked_unmet_criteria.ts +300 -21
- package/src/scripts/mcp_registry_submit.sh +2 -2
- package/src/scripts/mcp_server/consumer_tool_catalog.json +4 -4
- package/src/scripts/mcp_server/suggest_skill.ts +89 -4
- package/src/scripts/mcp_server/tools.ts +2 -33
- package/src/scripts/measure_skill_ranker_baseline.ts +203 -5
- package/src/scripts/measure_turn_end_gate.ts +61 -1
- package/src/scripts/merge_clearance.ts +225 -0
- package/src/scripts/migrate_command_suggestions.ts +1 -1
- package/src/scripts/network_sources.ts +236 -0
- package/src/scripts/no_go_deny_rows.ts +225 -0
- package/src/scripts/orchestration_record.ts +15 -2
- package/src/scripts/plan_test_shards.ts +103 -0
- package/src/scripts/pr_url_reminder_hook.ts +10 -0
- package/src/scripts/print_required_checks.ts +5 -5
- package/src/scripts/probe_depth_shadow.ts +406 -0
- package/src/scripts/probe_turnaround.ts +342 -10
- package/src/scripts/ratification_subject.ts +176 -0
- package/src/scripts/rdp_gate_classify.ts +1 -0
- package/src/scripts/rdp_quality_eval.ts +1 -0
- package/src/scripts/release.ts +26 -55
- package/src/scripts/release_drill.ts +52 -23
- package/src/scripts/release_env.ts +37 -0
- package/src/scripts/release_publication.ts +11 -1
- package/src/scripts/report_consumer_gate_reach.ts +233 -0
- package/src/scripts/report_merge_gate_load.ts +295 -0
- package/src/scripts/report_project_contract.ts +123 -0
- package/src/scripts/report_reducible_classes.ts +342 -0
- package/src/scripts/report_required_checks_drift.ts +5 -3
- package/src/scripts/report_skill_host_census.ts +199 -0
- package/src/scripts/report_standing_payload_by_host.ts +7 -7
- package/src/scripts/retro.ts +758 -0
- package/src/scripts/retro_facts.ts +575 -0
- package/src/scripts/retro_queue.ts +739 -0
- package/src/scripts/retro_session_facts.ts +218 -0
- package/src/scripts/retro_sweep.ts +493 -0
- package/src/scripts/retro_triage.ts +126 -0
- package/src/scripts/roadmap_context.ts +2 -2
- package/src/scripts/roadmap_drain_queue.ts +601 -0
- package/src/scripts/run_supervise.ts +24 -2
- package/src/scripts/schemas/agent-settings.schema.json +0 -16
- package/src/scripts/schemas/command.schema.json +3 -3
- package/src/scripts/schemas/review-findings.schema.json +8 -0
- package/src/scripts/schemas/skill.schema.json +7 -6
- package/src/scripts/schemas/subagent.schema.json +33 -2
- package/src/scripts/score_skill_selection.ts +5 -2
- package/src/scripts/second_brain_retrieval.ts +1 -0
- package/src/scripts/second_brain_run.ts +1 -0
- package/src/scripts/self_repair_cli.ts +563 -87
- package/src/scripts/self_review_gate.ts +59 -4
- package/src/scripts/session_register_hook.ts +91 -4
- package/src/scripts/sessions_cli.ts +100 -5
- package/src/scripts/skill_collision_clusters.ts +1 -1
- package/src/scripts/skill_tools/score_skill_relevance.ts +31 -2
- package/src/scripts/skill_trigger_eval.ts +4 -2
- package/src/scripts/source_adapters.ts +183 -0
- package/src/scripts/step_receipt.ts +100 -0
- package/src/scripts/sync_pr_branch.ts +4 -0
- package/src/scripts/test_council_qualification.ts +1 -1
- package/src/scripts/trigger_eval_grandfather.json +3 -49
- package/src/scripts/trigger_eval_rotation.ts +31 -3
- package/src/scripts/ui_conformance_probe.ts +405 -1
- package/src/scripts/update_counts.ts +230 -11
- package/src/scripts/update_invite_hook.ts +245 -0
- package/src/scripts/update_notice_hook.ts +298 -0
- package/src/scripts/validate_frontmatter.ts +85 -0
- package/src/scripts/worker_reuse_shadow_report.ts +121 -0
- package/src/scripts/worktree_cleanup_check.ts +915 -121
- package/src/server/io/yamlIO.ts +2 -2
- package/src/server/schemas/settings.ts +37 -23
- package/src/shared/brandTokenDocument.ts +46 -0
- package/src/shared/brandTokenPaths.ts +43 -0
- package/src/shared/settingsCarveOut.ts +0 -8
- package/src/shared/skillRanking.ts +106 -5
- package/src/shared/userMd/formAdapter.ts +15 -1
- package/src/shared/userMd/schema.ts +22 -0
- package/src/templates/agent-user.md +4 -0
- package/src/templates/agent-user.yml +4 -0
- package/dist/cli-delegate/chunk-523HCFYO.js +0 -90
- package/dist/cli-delegate/chunk-AL3RZ22D.js +0 -74
- package/dist/cli-delegate/chunk-KB5FZ655.js +0 -208
- package/dist/cli-delegate/chunk-MDPPKQCQ.js +0 -875
- package/dist/cli-delegate/chunk-MSUL5NYP.js +0 -1123
- package/dist/cli-delegate/chunk-OAFSJBHH.js +0 -272
- package/dist/ui/assets/index-C3djEJah.js +0 -23
- package/src/scripts/_lib/continuation_ladder.ts +0 -335
- package/src/scripts/hooks/run_continuation_hook.ts +0 -1524
|
@@ -116,6 +116,12 @@ export interface CostEstimate {
|
|
|
116
116
|
output_tokens: number;
|
|
117
117
|
input_usd: number;
|
|
118
118
|
output_usd: number;
|
|
119
|
+
/**
|
|
120
|
+
* False when `lookup` found no row. The two amounts are then zero so
|
|
121
|
+
* arithmetic callers keep working, but zero is not the price: a ceiling
|
|
122
|
+
* that compared against it would let an unknown model through as free.
|
|
123
|
+
*/
|
|
124
|
+
priced: boolean;
|
|
119
125
|
}
|
|
120
126
|
|
|
121
127
|
export function estimate_cost(
|
|
@@ -134,6 +140,7 @@ export function estimate_cost(
|
|
|
134
140
|
output_tokens: maxOutputTokens,
|
|
135
141
|
input_usd: 0.0,
|
|
136
142
|
output_usd: 0.0,
|
|
143
|
+
priced: false,
|
|
137
144
|
};
|
|
138
145
|
}
|
|
139
146
|
const inputUsd = (inputTokens / 1_000_000) * price.input_per_1m_usd;
|
|
@@ -145,6 +152,7 @@ export function estimate_cost(
|
|
|
145
152
|
output_tokens: maxOutputTokens,
|
|
146
153
|
input_usd: inputUsd,
|
|
147
154
|
output_usd: outputUsd,
|
|
155
|
+
priced: true,
|
|
148
156
|
};
|
|
149
157
|
}
|
|
150
158
|
|
|
@@ -357,6 +365,7 @@ export function reprice_with_cache(
|
|
|
357
365
|
output_tokens: tokens.output_tokens,
|
|
358
366
|
input_usd: 0.0,
|
|
359
367
|
output_usd: 0.0,
|
|
368
|
+
priced: false,
|
|
360
369
|
};
|
|
361
370
|
}
|
|
362
371
|
const writeMult = ttl === '1h' ? CACHE_WRITE_MULTIPLIER_1H : CACHE_WRITE_MULTIPLIER_5M;
|
|
@@ -372,6 +381,7 @@ export function reprice_with_cache(
|
|
|
372
381
|
output_tokens: tokens.output_tokens,
|
|
373
382
|
input_usd: inputUsd,
|
|
374
383
|
output_usd: outputUsd,
|
|
384
|
+
priced: true,
|
|
375
385
|
};
|
|
376
386
|
}
|
|
377
387
|
|
|
@@ -43,6 +43,7 @@
|
|
|
43
43
|
* module guarantees its callers.
|
|
44
44
|
*/
|
|
45
45
|
|
|
46
|
+
import { API_KEY_ASSIGNMENT_KEYWORD } from '../_lib/egress_prefixes.js';
|
|
46
47
|
import { _RAW_KEY_PREFIXES } from './config.js';
|
|
47
48
|
|
|
48
49
|
/**
|
|
@@ -189,9 +190,11 @@ const _MONEY_RE = new RegExp(
|
|
|
189
190
|
'gu',
|
|
190
191
|
);
|
|
191
192
|
|
|
192
|
-
//
|
|
193
|
+
// The keyword is the rule table's, read through its bundled projection (this
|
|
194
|
+
// module rides in the dispatch bundle); the Unicode word boundary and the
|
|
195
|
+
// 12-character value are this redactor's threshold.
|
|
193
196
|
const _API_KEY_RE = new RegExp(
|
|
194
|
-
`${_UNB_BEFORE}
|
|
197
|
+
`${_UNB_BEFORE}${API_KEY_ASSIGNMENT_KEYWORD}${_UNB_AFTER}\\s*[:=]\\s*[A-Za-z0-9+/=_\\-]{12,}`,
|
|
195
198
|
'giu',
|
|
196
199
|
);
|
|
197
200
|
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
11
|
import { CouncilResponse, type ExternalAIClient } from './clients.js';
|
|
12
|
+
import { councilEgress } from './council_egress.js';
|
|
12
13
|
import { _metaGet } from './py_parity.js';
|
|
13
14
|
|
|
14
15
|
/**
|
|
@@ -62,14 +63,25 @@ export function renderResponseMeta(r: CouncilResponse, deps: MetaRenderDeps): st
|
|
|
62
63
|
: `transport: api (fell back from ${fallback_from}${why})`,
|
|
63
64
|
);
|
|
64
65
|
}
|
|
66
|
+
// Same reasoning for a size-fit downgrade: the model that answered is not
|
|
67
|
+
// the one configured, and only the artefact outlives the stdout line.
|
|
68
|
+
const configured = _metaGet(meta_dict, 'configured_model', null);
|
|
69
|
+
if (typeof configured === 'string' && configured !== '' && configured !== r.model) {
|
|
70
|
+
const reason = _metaGet(meta_dict, 'size_fit_reason', null);
|
|
71
|
+
const why = typeof reason === 'string' && reason !== '' ? `: ${reason}` : '';
|
|
72
|
+
parts.push(`model: ${r.model} (downgraded from ${configured}${why})`);
|
|
73
|
+
}
|
|
65
74
|
return `*${parts.join(' · ')}*`;
|
|
66
75
|
}
|
|
67
76
|
|
|
68
77
|
|
|
69
|
-
/** Error-tagged member call — the split/ask branch is one shape, not three. */
|
|
70
78
|
/**
|
|
71
79
|
* One member call, error-tagged rather than throwing — the split/ask branch
|
|
72
|
-
* appeared three times before this and is one shape, not three.
|
|
80
|
+
* appeared three times before this and is one shape, not three. It is also the
|
|
81
|
+
* council channel's final egress check: immediately before the request is
|
|
82
|
+
* written, the whole body is rescanned for every value this run replaced and
|
|
83
|
+
* every high-confidence finding, and a hit refuses the send — the member is
|
|
84
|
+
* never called and the response carries only the reason.
|
|
73
85
|
*/
|
|
74
86
|
export function callMember(
|
|
75
87
|
client: ExternalAIClient,
|
|
@@ -79,14 +91,25 @@ export function callMember(
|
|
|
79
91
|
excTag: (e: unknown) => string,
|
|
80
92
|
): CouncilResponse {
|
|
81
93
|
try {
|
|
94
|
+
const system = systemFor(client);
|
|
95
|
+
const body = opts.split ? `${system}\n${opts.split.stable}${opts.split.suffix}` : `${system}\n${question.user_prompt}`;
|
|
96
|
+
const refusal = councilEgress().check(body);
|
|
97
|
+
if (refusal !== null) {
|
|
98
|
+
return new CouncilResponse({
|
|
99
|
+
provider: client.name,
|
|
100
|
+
model: client.model,
|
|
101
|
+
text: '',
|
|
102
|
+
error: `egress refused: ${refusal.reason} (${refusal.what}); nothing was sent`,
|
|
103
|
+
});
|
|
104
|
+
}
|
|
82
105
|
return opts.split
|
|
83
106
|
? client.ask_split(
|
|
84
|
-
|
|
107
|
+
system,
|
|
85
108
|
opts.split.stable,
|
|
86
109
|
opts.split.suffix,
|
|
87
110
|
question.max_tokens,
|
|
88
111
|
)
|
|
89
|
-
: client.ask(
|
|
112
|
+
: client.ask(system, question.user_prompt, question.max_tokens);
|
|
90
113
|
} catch (exc) {
|
|
91
114
|
return new CouncilResponse({
|
|
92
115
|
provider: client.name,
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* round_reservations — reserve-then-reconcile for one council round
|
|
3
|
+
* (road-to-unknowns-that-say-so Phase 3).
|
|
4
|
+
*
|
|
5
|
+
* Extracted rather than written into `orchestrator.ts`, which sits over the
|
|
6
|
+
* source-size ceiling; the orchestrator calls three methods and nothing else.
|
|
7
|
+
*
|
|
8
|
+
* Inert unless a daily ceiling is set: `reserve` returns `null` without
|
|
9
|
+
* touching the ledger, and `settle` records exactly what the orchestrator
|
|
10
|
+
* recorded before this existed, so with every ceiling at zero the ledger is
|
|
11
|
+
* byte-identical (ADR-279).
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
import { randomUUID } from 'node:crypto';
|
|
15
|
+
|
|
16
|
+
import {
|
|
17
|
+
close_reservation,
|
|
18
|
+
record_spend,
|
|
19
|
+
reserve_spend,
|
|
20
|
+
} from './budget_guard.js';
|
|
21
|
+
import { DEFAULT_CLI_TIMEOUT_SECONDS, type CouncilResponse, type ExternalAIClient } from './clients.js';
|
|
22
|
+
import { type CostEstimate } from './pricing.js';
|
|
23
|
+
import { _total_usd, type CostBudget } from './spend_gate.js';
|
|
24
|
+
|
|
25
|
+
/** One hour past the call's own timeout (D8). */
|
|
26
|
+
const HOLD_PAST_TIMEOUT_MS = 3_600_000;
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* An error whose outcome nobody knows: the provider may have generated and
|
|
30
|
+
* billed before the connection died. Anything else that fails with no tokens
|
|
31
|
+
* failed before the provider accepted the request — auth, a missing key, a
|
|
32
|
+
* refused connection — and releases its reservation. `parse_failed` is an
|
|
33
|
+
* answer that arrived unreadable, so it was billed. A 5xx counts only where it
|
|
34
|
+
* is named as a status, so `line 500` or `500 ms` in a message is not one.
|
|
35
|
+
*/
|
|
36
|
+
const UNKNOWN_OUTCOME =
|
|
37
|
+
/time[sd]?\s*out|timeout|deadline exceeded|ETIMEDOUT|ECONNRESET|socket hang up|server[_ ]error|overloaded|parse_failed|(?:\bHTTP\s*|\bstatus(?:\s+code)?\s*:?\s*|\bexit_|\berror\s+)5\d\d\b/iu;
|
|
38
|
+
|
|
39
|
+
export function outcomeIsUnknown(error: string): boolean {
|
|
40
|
+
return UNKNOWN_OUTCOME.test(error);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export class RoundReservations {
|
|
44
|
+
readonly run_id = randomUUID();
|
|
45
|
+
private current: string | null = null;
|
|
46
|
+
private readonly unknown: string[] = [];
|
|
47
|
+
|
|
48
|
+
constructor(
|
|
49
|
+
private readonly budget: CostBudget,
|
|
50
|
+
private readonly ledgerPath: string | null = null,
|
|
51
|
+
) {}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Claim the seat's estimate under the ledger lock. Returns `'daily'` when
|
|
55
|
+
* the ceiling cannot hold it (or the lock cannot be taken — an unchecked
|
|
56
|
+
* ceiling is not that ceiling), `null` when the call may go ahead.
|
|
57
|
+
*/
|
|
58
|
+
reserve(est: CostEstimate | null, member: ExternalAIClient): 'daily' | null {
|
|
59
|
+
this.current = null;
|
|
60
|
+
if (this.budget.daily_limit_usd <= 0 || est === null || !est.priced) {
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
const timeout = (member as { timeout_seconds?: number }).timeout_seconds ?? DEFAULT_CLI_TIMEOUT_SECONDS;
|
|
64
|
+
const res = reserve_spend(this.budget.daily_limit_usd, _total_usd(est), member.name, member.model, {
|
|
65
|
+
path: this.ledgerPath,
|
|
66
|
+
run_id: this.run_id,
|
|
67
|
+
hold_ms: timeout * 1000 + HOLD_PAST_TIMEOUT_MS,
|
|
68
|
+
});
|
|
69
|
+
if (!res.ok) return 'daily';
|
|
70
|
+
this.current = res.id;
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Reconcile the seat's call. Without a reservation this is the ledger write
|
|
76
|
+
* the orchestrator always made. With one: `completed` at the actual amount
|
|
77
|
+
* when tokens came back or no error was raised; `released` when it failed
|
|
78
|
+
* before the provider accepted it; an unknown outcome waits for `finish`.
|
|
79
|
+
*/
|
|
80
|
+
settle(response: CouncilResponse, effective: ExternalAIClient, actual: CostEstimate): void {
|
|
81
|
+
const id = this.current;
|
|
82
|
+
this.current = null;
|
|
83
|
+
if (id === null) {
|
|
84
|
+
if (!response.error) {
|
|
85
|
+
record_spend(_total_usd(actual), effective.name, effective.model, {
|
|
86
|
+
path: this.ledgerPath,
|
|
87
|
+
cache_read_input_tokens: response.cache_read_input_tokens,
|
|
88
|
+
cache_creation_input_tokens: response.cache_creation_input_tokens,
|
|
89
|
+
cache_ttl: '5m',
|
|
90
|
+
...(actual.priced ? {} : { unpriced: true, input_tokens: actual.input_tokens, output_tokens: actual.output_tokens }),
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
const tokens = response.input_tokens + response.output_tokens;
|
|
96
|
+
if (!response.error || tokens > 0) {
|
|
97
|
+
close_reservation(id, 'completed', {
|
|
98
|
+
path: this.ledgerPath,
|
|
99
|
+
usd: _total_usd(actual),
|
|
100
|
+
provider: effective.name,
|
|
101
|
+
model: effective.model,
|
|
102
|
+
});
|
|
103
|
+
} else if (outcomeIsUnknown(String(response.error))) {
|
|
104
|
+
this.unknown.push(id);
|
|
105
|
+
} else {
|
|
106
|
+
close_reservation(id, 'released', { path: this.ledgerPath });
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/** Run end: every reservation still waiting on an outcome closes at its estimate, never zero. */
|
|
111
|
+
finish<T>(passthrough: T): T {
|
|
112
|
+
if (this.current !== null) this.unknown.push(this.current);
|
|
113
|
+
this.current = null;
|
|
114
|
+
for (const id of this.unknown.splice(0)) {
|
|
115
|
+
close_reservation(id, 'unreconciled', { path: this.ledgerPath });
|
|
116
|
+
}
|
|
117
|
+
return passthrough;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Which route serves one rung-0.5 call. Replaces "the first configured member":
|
|
3
|
+
* list order says nothing about cost, content ceiling, quota or liveness.
|
|
4
|
+
*
|
|
5
|
+
* Order: an admissible unpaid route, else a paid fallback, else an honest ∅.
|
|
6
|
+
* Head-only work (plan, decide, chair, final review, anything that writes) is
|
|
7
|
+
* refused here before any candidate is looked at, and an untyped ask may only
|
|
8
|
+
* use a paid route: a free hand is defined by its typed, schema-checked return.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import type { ExternalAIClient } from './clients.js';
|
|
12
|
+
import { EXPOSURE_SHARE_CAP } from './exposure_ledger.js';
|
|
13
|
+
import { admitsContent, classifyContentClass, DEFAULT_SEAT_CEILING, type ContentClass } from './content_ceiling.js';
|
|
14
|
+
import {
|
|
15
|
+
isHeadOnlyKind,
|
|
16
|
+
isUnpaid,
|
|
17
|
+
ROUTE_BILLINGS,
|
|
18
|
+
type HandKind,
|
|
19
|
+
type HeadOnlyKind,
|
|
20
|
+
type RouteBilling,
|
|
21
|
+
} from '../_lib/hand_kinds.js';
|
|
22
|
+
|
|
23
|
+
export { isUnpaid, ROUTE_BILLINGS, type RouteBilling };
|
|
24
|
+
|
|
25
|
+
/** The route shape the chooser reads; built from a council member by {@link routeCandidateFromMember}. */
|
|
26
|
+
export interface RouteCandidate {
|
|
27
|
+
readonly name: string;
|
|
28
|
+
readonly billing: RouteBilling;
|
|
29
|
+
readonly ceiling: ContentClass;
|
|
30
|
+
/** Calls left in the current quota window; null when unknown or unmetered. */
|
|
31
|
+
readonly remainingQuota: number | null;
|
|
32
|
+
readonly live: boolean;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export type RouteRefusalReason =
|
|
36
|
+
| 'not-live'
|
|
37
|
+
| 'quota-exhausted'
|
|
38
|
+
| 'content-ceiling'
|
|
39
|
+
| 'untyped-call'
|
|
40
|
+
| 'kind-not-flipped'
|
|
41
|
+
| 'exposure-cap'
|
|
42
|
+
| 'exposure-unknown';
|
|
43
|
+
|
|
44
|
+
export interface RouteRefusal {
|
|
45
|
+
readonly name: string;
|
|
46
|
+
readonly reason: RouteRefusalReason;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export interface ChooseInput {
|
|
50
|
+
readonly kind: HandKind | HeadOnlyKind | null;
|
|
51
|
+
readonly contentClass: ContentClass;
|
|
52
|
+
readonly candidates: readonly RouteCandidate[];
|
|
53
|
+
/**
|
|
54
|
+
* Each route's share of tracked files after this call; null when the share
|
|
55
|
+
* cannot be computed. Absent means exposure is not tracked for this call.
|
|
56
|
+
*/
|
|
57
|
+
readonly exposureShare?: (route: string) => number | null;
|
|
58
|
+
/** Default {@link EXPOSURE_SHARE_CAP}. */
|
|
59
|
+
readonly exposureCap?: number;
|
|
60
|
+
/**
|
|
61
|
+
* False when the kind has not cleared the shadow bars (free-hands 6.3):
|
|
62
|
+
* every unpaid route is then refused. Absent keeps the chooser's own order.
|
|
63
|
+
*/
|
|
64
|
+
readonly unpaidAllowed?: boolean;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export type RouteChoice =
|
|
68
|
+
| { readonly route: RouteCandidate; readonly reason: 'unpaid-route' | 'paid-fallback'; readonly refused: RouteRefusal[] }
|
|
69
|
+
| { readonly route: null; readonly reason: 'head-only' | 'no-admissible-route'; readonly refused: RouteRefusal[] };
|
|
70
|
+
|
|
71
|
+
function refusalOf(c: RouteCandidate, input: ChooseInput): RouteRefusalReason | null {
|
|
72
|
+
if (!c.live) return 'not-live';
|
|
73
|
+
if (c.remainingQuota !== null && c.remainingQuota <= 0) return 'quota-exhausted';
|
|
74
|
+
if (!admitsContent(c.ceiling, input.contentClass).admitted) return 'content-ceiling';
|
|
75
|
+
if (isUnpaid(c.billing) && input.kind === null) return 'untyped-call';
|
|
76
|
+
if (isUnpaid(c.billing) && input.unpaidAllowed === false) return 'kind-not-flipped';
|
|
77
|
+
if (input.exposureShare !== undefined) {
|
|
78
|
+
const share = input.exposureShare(c.name);
|
|
79
|
+
// Unknown exposure fails closed for an unpaid route only; a paid route
|
|
80
|
+
// stays usable so an untracked project still has a fallback.
|
|
81
|
+
if (share === null) return isUnpaid(c.billing) ? 'exposure-unknown' : null;
|
|
82
|
+
if (share > (input.exposureCap ?? EXPOSURE_SHARE_CAP)) return 'exposure-cap';
|
|
83
|
+
}
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/** A known positive quota before an unknown one, more before less; list order breaks ties. */
|
|
88
|
+
function byQuota(a: RouteCandidate, b: RouteCandidate): number {
|
|
89
|
+
if (a.remainingQuota === b.remainingQuota) return 0;
|
|
90
|
+
if (a.remainingQuota === null) return 1;
|
|
91
|
+
if (b.remainingQuota === null) return -1;
|
|
92
|
+
return b.remainingQuota - a.remainingQuota;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
export interface RouteChain {
|
|
96
|
+
/** Every admissible route, in the order a failed call walks them. */
|
|
97
|
+
readonly chain: RouteCandidate[];
|
|
98
|
+
readonly headOnly: boolean;
|
|
99
|
+
readonly refused: RouteRefusal[];
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
export function chooseRouteChain(input: ChooseInput): RouteChain {
|
|
103
|
+
const refused: RouteRefusal[] = [];
|
|
104
|
+
if (isHeadOnlyKind(input.kind)) return { chain: [], headOnly: true, refused };
|
|
105
|
+
const admissible: RouteCandidate[] = [];
|
|
106
|
+
for (const c of input.candidates) {
|
|
107
|
+
const why = refusalOf(c, input);
|
|
108
|
+
if (why === null) admissible.push(c);
|
|
109
|
+
else refused.push({ name: c.name, reason: why });
|
|
110
|
+
}
|
|
111
|
+
const share = (c: RouteCandidate): number => input.exposureShare?.(c.name) ?? 0;
|
|
112
|
+
const order = (a: RouteCandidate, b: RouteCandidate): number => share(a) - share(b) || byQuota(a, b);
|
|
113
|
+
const unpaid = admissible.filter((c) => isUnpaid(c.billing)).sort(order);
|
|
114
|
+
const paid = admissible.filter((c) => !isUnpaid(c.billing)).sort(order);
|
|
115
|
+
return { chain: [...unpaid, ...paid], headOnly: false, refused };
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
export function chooseRoute(input: ChooseInput): RouteChoice {
|
|
119
|
+
const { chain, headOnly, refused } = chooseRouteChain(input);
|
|
120
|
+
if (headOnly) return { route: null, reason: 'head-only', refused };
|
|
121
|
+
const first = chain[0];
|
|
122
|
+
if (first === undefined) return { route: null, reason: 'no-admissible-route', refused };
|
|
123
|
+
return { route: first, reason: isUnpaid(first.billing) ? 'unpaid-route' : 'paid-fallback', refused };
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
const _BILLINGS: ReadonlySet<string> = new Set<string>(ROUTE_BILLINGS);
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* A council member as a route. Members built today carry none of the route
|
|
130
|
+
* fields, so they map to a paid, project-content, live route — exactly the seat
|
|
131
|
+
* they were. A member whose billing is `free-quota` is pinned to
|
|
132
|
+
* `public-artifact` whatever ceiling it declares: every free route stays there.
|
|
133
|
+
* A `self-hosted` member that declares no ceiling gets `public-artifact` too;
|
|
134
|
+
* only a declared, probed `content_ceiling` raises it.
|
|
135
|
+
*/
|
|
136
|
+
export function routeCandidateFromMember(member: ExternalAIClient): RouteCandidate {
|
|
137
|
+
const m = member as unknown as Record<string, unknown>;
|
|
138
|
+
const name = (typeof m['name'] === 'string' && m['name']) || (typeof m['provider'] === 'string' && m['provider']) || 'unknown';
|
|
139
|
+
// A base_url route member names its class `billing`; other members may say `billing_class`.
|
|
140
|
+
const declared = m['billing_class'] ?? m['billing'];
|
|
141
|
+
const billing: RouteBilling =
|
|
142
|
+
typeof declared === 'string' && _BILLINGS.has(declared)
|
|
143
|
+
? (declared as RouteBilling)
|
|
144
|
+
: m['billable'] === false
|
|
145
|
+
? 'subscription'
|
|
146
|
+
: 'per-token';
|
|
147
|
+
// An unpaid route that names no ceiling gets the narrow one; only a member
|
|
148
|
+
// that predates route fields keeps the default seat ceiling.
|
|
149
|
+
const ceiling: ContentClass =
|
|
150
|
+
billing === 'free-quota'
|
|
151
|
+
? 'public-artifact'
|
|
152
|
+
: classifyContentClass(m['content_ceiling'], isUnpaid(billing) ? 'public-artifact' : DEFAULT_SEAT_CEILING);
|
|
153
|
+
const quota = m['remaining_quota'];
|
|
154
|
+
return {
|
|
155
|
+
name,
|
|
156
|
+
billing,
|
|
157
|
+
ceiling,
|
|
158
|
+
remainingQuota: typeof quota === 'number' && Number.isFinite(quota) ? quota : null,
|
|
159
|
+
live: m['live'] !== false,
|
|
160
|
+
};
|
|
161
|
+
}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Liveness of a `base_url` route, per route and model: streaks, not last
|
|
3
|
+
* outcomes (gateway M9).
|
|
4
|
+
*
|
|
5
|
+
* The outcome names are the closed failure vocabulary of
|
|
6
|
+
* road-to-seats-that-know-why-they-failed — `rate_limited`,
|
|
7
|
+
* `quota_exhausted`, `model_unservable`, `server_error`, `billing` — read here
|
|
8
|
+
* from the route's own HTTP answer by a small local classifier, so the two
|
|
9
|
+
* converge when that roadmap's shared table lands instead of meeting a second
|
|
10
|
+
* vocabulary.
|
|
11
|
+
*
|
|
12
|
+
* Only `model_unservable` speaks about the model: a throttle, an empty quota or
|
|
13
|
+
* a server fault says the route is busy or down for this pass, never that the
|
|
14
|
+
* model is gone, so they never count against liveness and never break a streak.
|
|
15
|
+
* An answered call resets it. Three consecutive unservable answers retire the
|
|
16
|
+
* model from the discovered roster until a later discovery serves it again.
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
import fs from 'node:fs';
|
|
20
|
+
import path from 'node:path';
|
|
21
|
+
|
|
22
|
+
import { readRouteRoster, retireRouteModel } from './free_route_catalog.js';
|
|
23
|
+
import type { CliFailureClass } from './transport_resolver.js';
|
|
24
|
+
|
|
25
|
+
export const ROUTE_OUTCOMES = [
|
|
26
|
+
'ok',
|
|
27
|
+
'rate_limited',
|
|
28
|
+
'quota_exhausted',
|
|
29
|
+
'model_unservable',
|
|
30
|
+
'server_error',
|
|
31
|
+
'billing',
|
|
32
|
+
'other',
|
|
33
|
+
] as const;
|
|
34
|
+
export type RouteOutcome = (typeof ROUTE_OUTCOMES)[number];
|
|
35
|
+
|
|
36
|
+
export const RETIRE_STREAK = 3;
|
|
37
|
+
|
|
38
|
+
/** Runtime state beside `council-route-models.json`; gitignored, never committed. */
|
|
39
|
+
export const ROUTE_LIVENESS_RELPATH = path.join('agents', 'runtime', 'state', 'council-route-liveness.json');
|
|
40
|
+
|
|
41
|
+
const _QUOTA_TEXT = /insufficient_quota|quota exceeded|exceeded your current quota|usage limit/i;
|
|
42
|
+
|
|
43
|
+
/** The route's answer as one vocabulary name; `null` / empty means it answered. */
|
|
44
|
+
export function classifyRouteOutcome(error: string | null | undefined): RouteOutcome {
|
|
45
|
+
if (error === null || error === undefined || error.trim() === '') return 'ok';
|
|
46
|
+
const s = error.trim();
|
|
47
|
+
if (s.startsWith('policy_unproven_cost')) return 'billing';
|
|
48
|
+
const m = /^HTTP (\d{3})\b:?\s*([\s\S]*)$/.exec(s);
|
|
49
|
+
if (m === null) return 'other';
|
|
50
|
+
const status = Number(m[1]);
|
|
51
|
+
const body = m[2] ?? '';
|
|
52
|
+
if (status === 402) return 'billing';
|
|
53
|
+
if (status === 429) return _QUOTA_TEXT.test(body) ? 'quota_exhausted' : 'rate_limited';
|
|
54
|
+
if (status === 410) return 'model_unservable';
|
|
55
|
+
if (status === 404) return /\bmodel\b/i.test(body) ? 'model_unservable' : 'other';
|
|
56
|
+
// 501 and 505 say the route cannot do this at all; retrying is pointless.
|
|
57
|
+
if (status >= 500 && status <= 599 && status !== 501 && status !== 505) return 'server_error';
|
|
58
|
+
return 'other';
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/** Absent for this pass only: busy or down, never evidence about the model. */
|
|
62
|
+
export function isAbsentForPass(outcome: RouteOutcome): boolean {
|
|
63
|
+
return outcome === 'rate_limited' || outcome === 'quota_exhausted' || outcome === 'server_error';
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/** The outcome as the class `MidFlightFallback` gates on. */
|
|
67
|
+
export function routeFailureClass(outcome: RouteOutcome): CliFailureClass {
|
|
68
|
+
switch (outcome) {
|
|
69
|
+
case 'rate_limited':
|
|
70
|
+
case 'quota_exhausted':
|
|
71
|
+
return 'quota_exhausted';
|
|
72
|
+
case 'model_unservable':
|
|
73
|
+
return 'model_unservable';
|
|
74
|
+
case 'server_error':
|
|
75
|
+
return 'server_error';
|
|
76
|
+
default:
|
|
77
|
+
return 'other';
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
interface LivenessEntry {
|
|
82
|
+
readonly streak: number;
|
|
83
|
+
readonly last: RouteOutcome;
|
|
84
|
+
readonly observed_at: string;
|
|
85
|
+
readonly retired_at?: string;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
type Store = Record<string, Record<string, LivenessEntry>>;
|
|
89
|
+
|
|
90
|
+
function _storePath(repoRoot: string): string {
|
|
91
|
+
return path.join(repoRoot, ROUTE_LIVENESS_RELPATH);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
function _readStore(repoRoot: string): Store {
|
|
95
|
+
try {
|
|
96
|
+
const raw = JSON.parse(fs.readFileSync(_storePath(repoRoot), 'utf8')) as unknown;
|
|
97
|
+
return raw !== null && typeof raw === 'object' && !Array.isArray(raw) ? (raw as Store) : {};
|
|
98
|
+
} catch {
|
|
99
|
+
return {};
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
function _writeStore(repoRoot: string, store: Store): void {
|
|
104
|
+
const target = _storePath(repoRoot);
|
|
105
|
+
fs.mkdirSync(path.dirname(target), { recursive: true });
|
|
106
|
+
const tmp = `${target}.${process.pid}.tmp`;
|
|
107
|
+
fs.writeFileSync(tmp, `${JSON.stringify(store, null, 2)}\n`, 'utf8');
|
|
108
|
+
fs.renameSync(tmp, target);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/** A retirement stands until the roster is re-discovered after it. */
|
|
112
|
+
function _retirementStands(repoRoot: string, routeKey: string, entry: LivenessEntry | undefined): boolean {
|
|
113
|
+
if (entry?.retired_at === undefined) return false;
|
|
114
|
+
const roster = readRouteRoster(repoRoot, routeKey);
|
|
115
|
+
return roster.status !== 'known' || roster.observed_at <= entry.retired_at;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
export function isRouteModelLive(repoRoot: string, routeKey: string, model: string): boolean {
|
|
119
|
+
return !_retirementStands(repoRoot, routeKey, _readStore(repoRoot)[routeKey]?.[model]);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
export interface RecordedOutcome {
|
|
123
|
+
readonly streak: number;
|
|
124
|
+
readonly retired: boolean;
|
|
125
|
+
readonly absentForPass: boolean;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
export function recordRouteOutcome(
|
|
129
|
+
repoRoot: string,
|
|
130
|
+
routeKey: string,
|
|
131
|
+
model: string,
|
|
132
|
+
outcome: RouteOutcome,
|
|
133
|
+
now: Date = new Date(),
|
|
134
|
+
): RecordedOutcome {
|
|
135
|
+
const store = _readStore(repoRoot);
|
|
136
|
+
const route = store[routeKey] ?? {};
|
|
137
|
+
let prev = route[model];
|
|
138
|
+
if (prev?.retired_at !== undefined && !_retirementStands(repoRoot, routeKey, prev)) prev = undefined;
|
|
139
|
+
const before = prev?.streak ?? 0;
|
|
140
|
+
const streak = outcome === 'ok' ? 0 : outcome === 'model_unservable' ? before + 1 : before;
|
|
141
|
+
const observed_at = now.toISOString();
|
|
142
|
+
let retiredAt = prev?.retired_at;
|
|
143
|
+
if (retiredAt === undefined && streak >= RETIRE_STREAK) {
|
|
144
|
+
retiredAt = observed_at;
|
|
145
|
+
retireRouteModel(repoRoot, routeKey, model);
|
|
146
|
+
}
|
|
147
|
+
route[model] = { streak, last: outcome, observed_at, ...(retiredAt !== undefined ? { retired_at: retiredAt } : {}) };
|
|
148
|
+
store[routeKey] = route;
|
|
149
|
+
_writeStore(repoRoot, store);
|
|
150
|
+
return { streak, retired: retiredAt !== undefined, absentForPass: isAbsentForPass(outcome) };
|
|
151
|
+
}
|
|
152
|
+
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Construct a `base_url` route member for a council pass, or say why it is
|
|
3
|
+
* absent. Lives apart from `council_cli.ts`, which is far past the source
|
|
4
|
+
* ceiling, and apart from `free_route.ts`, which `config.ts` imports and which
|
|
5
|
+
* therefore must not import the loader back.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { PROVIDER_TABLE } from '../_lib/environment_detector.js';
|
|
9
|
+
import { resolve_api_key } from './config.js';
|
|
10
|
+
import type { ContentClass } from './content_ceiling.js';
|
|
11
|
+
import { FreeRouteClient } from './free_route_client.js';
|
|
12
|
+
import {
|
|
13
|
+
parseRouteFields,
|
|
14
|
+
resolveRouteTransport,
|
|
15
|
+
UNPROVEN_PROBE,
|
|
16
|
+
type RouteBilling,
|
|
17
|
+
type SelfHostedProbe,
|
|
18
|
+
} from './free_route.js';
|
|
19
|
+
import { keyResolves } from './status_surface.js';
|
|
20
|
+
|
|
21
|
+
export type RouteMemberResult =
|
|
22
|
+
| { readonly client: FreeRouteClient }
|
|
23
|
+
| { readonly absent: { member: string; reason: string; detail: string } };
|
|
24
|
+
|
|
25
|
+
/** `null` for a provider member; otherwise the constructed client or its absence. */
|
|
26
|
+
export function routeMemberFor(
|
|
27
|
+
name: string,
|
|
28
|
+
cfg: Record<string, unknown>,
|
|
29
|
+
contentClass: ContentClass,
|
|
30
|
+
modelOverride?: string,
|
|
31
|
+
probe: SelfHostedProbe = UNPROVEN_PROBE,
|
|
32
|
+
): RouteMemberResult | null {
|
|
33
|
+
const parsed = parseRouteFields(name, cfg, Object.hasOwn(PROVIDER_TABLE, name));
|
|
34
|
+
if ('error' in parsed) return { absent: { member: name, reason: 'policy_unknown', detail: parsed.error } };
|
|
35
|
+
const route = parsed.route;
|
|
36
|
+
if (route === null) return null;
|
|
37
|
+
const model = modelOverride || (typeof cfg['model'] === 'string' ? cfg['model'] : '');
|
|
38
|
+
const ref = typeof cfg['api_key_ref'] === 'string' ? cfg['api_key_ref'] : null;
|
|
39
|
+
const t = resolveRouteTransport({ name, route, model, contentClass, keyPresent: keyResolves(ref), probe });
|
|
40
|
+
if (!t.available) {
|
|
41
|
+
return { absent: { member: name, reason: t.absentReason ?? 'unavailable', detail: t.reason ?? 'route unavailable' } };
|
|
42
|
+
}
|
|
43
|
+
return {
|
|
44
|
+
client: new FreeRouteClient({
|
|
45
|
+
name,
|
|
46
|
+
model,
|
|
47
|
+
base_url: route.base_url,
|
|
48
|
+
api_key: ref === null ? null : resolve_api_key(ref, `ai_council.members.${name}`),
|
|
49
|
+
billing: t.billing as RouteBilling,
|
|
50
|
+
}),
|
|
51
|
+
};
|
|
52
|
+
}
|
|
@@ -135,3 +135,43 @@ export function parseSeatFields(
|
|
|
135
135
|
},
|
|
136
136
|
};
|
|
137
137
|
}
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Council roles, and the three a route this package does not pay for may never
|
|
141
|
+
* hold (ADR-257: an unpaid route may propose and score, never decide). Kept
|
|
142
|
+
* apart from `PolicyExclusion`: that union makes a seat ABSENT for the whole
|
|
143
|
+
* run, while a role refusal leaves the seat free to propose or judge.
|
|
144
|
+
*/
|
|
145
|
+
export const COUNCIL_ROLES = ['proposer', 'juror', 'chair', 'synthesis', 'verdict'] as const;
|
|
146
|
+
export type CouncilRole = (typeof COUNCIL_ROLES)[number];
|
|
147
|
+
export const HEAD_ROLES: ReadonlySet<CouncilRole> = new Set<CouncilRole>(['chair', 'synthesis', 'verdict']);
|
|
148
|
+
|
|
149
|
+
const _PAID_BILLING: ReadonlySet<string> = new Set(['subscription', 'per-token']);
|
|
150
|
+
/** The classes positively known to cost the package nothing per call. */
|
|
151
|
+
export const UNPAID_BILLING_CLASSES: readonly string[] = ['free-quota', 'self-hosted'];
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* True unless the billing class is a paid one. Absent means a seat configured
|
|
155
|
+
* before billing classes existed, all of them paid; any other unrecognised
|
|
156
|
+
* value fails closed, so a typo cannot hand a free route the chair.
|
|
157
|
+
*/
|
|
158
|
+
export function isUnpaidBilling(billing: string | null | undefined): boolean {
|
|
159
|
+
return billing !== undefined && billing !== null && !_PAID_BILLING.has(billing);
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
export interface RoleRefusal {
|
|
163
|
+
readonly reason: 'unpaid_head_role';
|
|
164
|
+
readonly message: string;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
export function seatRoleRefusal(
|
|
168
|
+
role: CouncilRole,
|
|
169
|
+
billing: string | null | undefined,
|
|
170
|
+
seat = 'this seat',
|
|
171
|
+
): RoleRefusal | null {
|
|
172
|
+
if (!HEAD_ROLES.has(role) || !isUnpaidBilling(billing)) return null;
|
|
173
|
+
return {
|
|
174
|
+
reason: 'unpaid_head_role',
|
|
175
|
+
message: `${seat} (billing ${String(billing)}) may not hold the ${role} role: an unpaid route proposes and scores, never decides (ADR-257)`,
|
|
176
|
+
};
|
|
177
|
+
}
|