@event4u/agent-config 16.5.0 → 17.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.augment-plugin/marketplace.json +3 -3
- package/.augment-plugin/plugin.json +1 -1
- package/.claude-plugin/marketplace.json +2 -2
- package/.claude-plugin/skills/install-agent-config/SKILL.md +4 -4
- package/CHANGELOG.md +463 -498
- package/CONTRIBUTING.md +47 -0
- package/README.md +25 -25
- package/dist/agent-src/commands/{design.md → agent-design.md} +10 -6
- package/dist/agent-src/commands/agents/init.md +66 -3
- package/dist/agent-src/commands/agents/user/init.md +3 -0
- package/dist/agent-src/commands/{optimize/deep.md → analyze/and-optimize.md} +72 -33
- package/dist/agent-src/commands/analyze/inbox.md +168 -37
- package/dist/agent-src/commands/analyze/pr.md +144 -0
- package/dist/agent-src/commands/analyze/{repo.md → reference.md} +85 -14
- package/dist/agent-src/commands/analyze/roadmap-repos.md +19 -10
- package/dist/agent-src/commands/analyze.md +28 -12
- package/dist/agent-src/commands/audit.md +115 -0
- package/dist/agent-src/commands/brand/review.md +13 -2
- package/dist/agent-src/commands/brand/tokens.md +3 -3
- package/dist/agent-src/commands/brand/voice.md +8 -5
- package/dist/agent-src/commands/brand.md +2 -2
- package/dist/agent-src/commands/challenge-me/closure.md +25 -0
- package/dist/agent-src/commands/design-system/import.md +8 -3
- package/dist/agent-src/commands/design-system/sync.md +98 -0
- package/dist/agent-src/commands/design-system.md +6 -1
- package/dist/agent-src/commands/evals/analyze.json +44 -0
- package/dist/agent-src/commands/evals/audit.json +12 -0
- package/dist/agent-src/commands/evals/retro.json +12 -0
- package/dist/agent-src/commands/fix/ci.md +10 -8
- package/dist/agent-src/commands/ghostwriter/write.md +22 -0
- package/dist/agent-src/commands/memory/learn-low-impact.md +70 -83
- package/dist/agent-src/commands/memory/propose.md +12 -0
- package/dist/agent-src/commands/memory.md +1 -1
- package/dist/agent-src/commands/optimize.md +4 -3
- package/dist/agent-src/commands/post-as/me.md +18 -0
- package/dist/agent-src/commands/pr/create.md +17 -342
- package/dist/agent-src/commands/pr/merge.md +129 -368
- package/dist/agent-src/commands/retro.md +121 -0
- package/dist/agent-src/commands/review/routing.md +1 -1
- package/dist/agent-src/commands/roadmap/next.md +4 -1
- package/dist/agent-src/commands/roadmap/process-full.md +46 -333
- package/dist/agent-src/commands/roadmap/triage-parked.md +6 -2
- package/dist/agent-src/commands/team-knowledge/consolidate.md +2 -2
- package/dist/agent-src/commands/team-knowledge.md +1 -1
- package/dist/agent-src/commands/threat-model.md +1 -1
- package/dist/agent-src/commands/upstream-contribute.md +91 -101
- package/dist/agent-src/commands/worktree/cleanup.md +18 -11
- package/dist/agent-src/contexts/contracts/consumer-agents-md-guide.md +54 -0
- package/dist/agent-src/contexts/execution/analysis-loop.md +137 -0
- package/dist/agent-src/contexts/execution/auto-dispatch-classification.md +3 -3
- package/dist/agent-src/contexts/execution/decision-closure-execution.md +1 -1
- package/dist/agent-src/contexts/execution/host-capability-manifest.md +6 -0
- package/dist/agent-src/contexts/execution/orchestration-telemetry.md +11 -4
- package/dist/agent-src/contexts/execution/pr-create-branches-content.md +250 -0
- package/dist/agent-src/contexts/execution/pr-create-branches-freshness.md +150 -0
- package/dist/agent-src/contexts/execution/pr-merge-queue.md +287 -0
- package/dist/agent-src/contexts/execution/pr-merge-sync.md +276 -0
- package/dist/agent-src/contexts/execution/pr-merge-trust-boundary.md +69 -0
- package/dist/agent-src/contexts/execution/process-full-all.md +233 -0
- package/dist/agent-src/contexts/execution/process-full-delivery.md +231 -0
- package/dist/agent-src/contexts/execution/roadmap-execution-contract-branches.md +42 -0
- package/dist/agent-src/contexts/execution/roadmap-execution-contract.md +1 -35
- package/dist/agent-src/contexts/execution/roadmap-process-loop-close.md +235 -0
- package/dist/agent-src/contexts/execution/roadmap-process-loop-prescan.md +216 -0
- package/dist/agent-src/contexts/execution/roadmap-process-loop-run.md +253 -0
- package/dist/agent-src/contexts/execution/roadmap-process-loop-set.md +212 -0
- package/dist/agent-src/contexts/execution/roadmap-process-loop.md +25 -864
- package/dist/agent-src/contexts/execution/subagent-spawn-contract.md +14 -2
- package/dist/agent-src/contexts/execution/subagent-steering.md +65 -8
- package/dist/agent-src/contexts/model-recommendations.md +5 -5
- package/dist/agent-src/contexts/subagent-configuration.md +1 -1
- package/dist/agent-src/guidelines/agent-infra/api-cost-levers.md +4 -3
- package/dist/agent-src/guidelines/agent-infra/model-recommendation.md +11 -5
- package/dist/agent-src/guidelines/agent-infra/rule-body-migration-inventory.md +1 -1
- package/dist/agent-src/guidelines/agent-infra/self-improvement-pipeline.md +47 -24
- package/dist/agent-src/guidelines/design-antipatterns.md +5 -0
- package/dist/agent-src/guidelines/design-asset-discipline.md +17 -0
- package/dist/agent-src/guidelines/design-fidelity-routing.md +1 -0
- package/dist/agent-src/guidelines/php/api-design.md +10 -1
- package/dist/agent-src/rules/brand-source-of-truth.md +7 -6
- package/dist/agent-src/rules/code-provenance.md +1 -1
- package/dist/agent-src/rules/context-hygiene.md +0 -1
- package/dist/agent-src/rules/design-fidelity.md +12 -13
- package/dist/agent-src/rules/external-reference-deep-dive.md +2 -2
- package/dist/agent-src/rules/fix-what-you-see.md +1 -1
- package/dist/agent-src/rules/low-impact-corpus-privacy-floor.md +14 -15
- package/dist/agent-src/rules/missing-skill-recovery.md +12 -11
- package/dist/agent-src/rules/neighbour-precedence.md +1 -1
- package/dist/agent-src/rules/recurring-criticism.md +1 -1
- package/dist/agent-src/rules/roadmap-ci-steps-policy.md +0 -2
- package/dist/agent-src/rules/self-repair-loop.md +2 -2
- package/dist/agent-src/rules/token-budget-discipline.md +1 -1
- package/dist/agent-src/scripts/dashboard_mode.ts +4 -1
- package/dist/agent-src/scripts/roadmap_age.ts +175 -0
- package/dist/agent-src/scripts/update_roadmap_progress.ts +10 -2
- package/dist/agent-src/skills/accessibility-auditor/SKILL.md +3 -3
- package/dist/agent-src/skills/agent-security-review/SKILL.md +2 -2
- package/dist/agent-src/skills/agents-md-thin-root/SKILL.md +12 -4
- package/dist/agent-src/skills/ai-code-blindspots/SKILL.md +7 -0
- package/dist/agent-src/skills/ai-council/references/advanced-modes.md +11 -1
- package/dist/agent-src/skills/ai-council/references/cost-and-redaction.md +7 -0
- package/dist/agent-src/skills/ai-council/references/execution-modes.md +7 -0
- package/dist/agent-src/skills/ai-council/references/output-and-synthesis.md +19 -0
- package/dist/agent-src/skills/ai-council/references/procedure.md +7 -0
- package/dist/agent-src/skills/api-design/SKILL.md +2 -2
- package/dist/agent-src/skills/api-endpoint/SKILL.md +2 -2
- package/dist/agent-src/skills/authz-review/SKILL.md +5 -3
- package/dist/agent-src/skills/blade-ui/SKILL.md +2 -2
- package/dist/agent-src/skills/brand/SKILL.md +7 -3
- package/dist/agent-src/skills/brand-asset-generation/SKILL.md +13 -6
- package/dist/agent-src/skills/brand-audit/SKILL.md +2 -1
- package/dist/agent-src/skills/brand-identity/SKILL.md +5 -4
- package/dist/agent-src/skills/brand-strategy/SKILL.md +5 -4
- package/dist/agent-src/skills/brand-to-tokens/SKILL.md +18 -39
- package/dist/agent-src/skills/brand-to-tokens/templates/marp-brand-deck.md.example +2 -2
- package/dist/agent-src/skills/brand-to-tokens/templates/reveal-brand-deck.yaml +2 -2
- package/dist/agent-src/skills/canvas-design/SKILL.md +12 -2
- package/dist/agent-src/skills/competitive-positioning/SKILL.md +2 -2
- package/dist/agent-src/skills/composer-packages/SKILL.md +18 -0
- package/dist/agent-src/skills/condense-memory/SKILL.md +1 -1
- package/dist/agent-src/skills/content-funnel-design/SKILL.md +8 -1
- package/dist/agent-src/skills/context-authoring/SKILL.md +1 -1
- package/dist/agent-src/skills/context-document/SKILL.md +2 -2
- package/dist/agent-src/skills/corpus-grounding/SKILL.md +6 -6
- package/dist/agent-src/skills/corpus-grounding/scripts/decision_engine.ts +13 -11
- package/dist/agent-src/skills/corpus-grounding/scripts/ground.mjs +1706 -0
- package/dist/agent-src/skills/corpus-grounding/scripts/schema_validator.ts +7 -1
- package/dist/agent-src/skills/dashboard-design/SKILL.md +1 -1
- package/dist/agent-src/skills/data-flow-mapper/SKILL.md +5 -2
- package/dist/agent-src/skills/database/SKILL.md +5 -4
- package/dist/agent-src/skills/decision-record/references/weighted-matrix.md +12 -0
- package/dist/agent-src/skills/deep-reading-analyst/SKILL.md +1 -1
- package/dist/agent-src/skills/dependency-upgrade/SKILL.md +61 -11
- package/dist/agent-src/skills/description-assist/SKILL.md +1 -1
- package/dist/agent-src/skills/design-intelligence/SKILL.md +1 -1
- package/dist/agent-src/skills/design-intelligence/data/landing.csv +1 -1
- package/dist/agent-src/skills/design-intelligence/references/context-and-registers.md +10 -2
- package/dist/agent-src/skills/design-intelligence/references/design-languages.md +1 -1
- package/dist/agent-src/skills/design-intelligence/references/design-rules-checklist.md +4 -3
- package/dist/agent-src/skills/design-intelligence/references/integration-mapping.md +14 -14
- package/dist/agent-src/skills/{wireframe → design-review}/references/story-beat-ledger.schema.json +1 -1
- package/dist/agent-src/skills/design-review/references/verification-automation.md +11 -3
- package/dist/agent-src/skills/design-system-capture/SKILL.md +15 -10
- package/dist/agent-src/skills/design-system-capture/references/design-system-json.md +20 -5
- package/dist/agent-src/skills/design-system-capture/references/import-procedure.md +2 -2
- package/dist/agent-src/skills/design-tokens/SKILL.md +23 -23
- package/dist/agent-src/skills/design-tokens/scripts/tokens.mjs +1037 -0
- package/dist/agent-src/skills/design-tokens/scripts/tokens.ts +336 -13
- package/dist/agent-src/skills/design-tokens/templates/design-tokens-starter.json +52 -53
- package/dist/agent-src/skills/docker/SKILL.md +1 -1
- package/dist/agent-src/skills/estimate-ticket/SKILL.md +1 -1
- package/dist/agent-src/skills/existing-ui-audit/SKILL.md +14 -276
- package/dist/agent-src/skills/existing-ui-audit/procedure.yaml +44 -0
- package/dist/agent-src/skills/existing-ui-audit/references/anti-slop-cross-reference.md +1 -1
- package/dist/agent-src/skills/existing-ui-audit/references/steps/00-inspect-stack-and-input.md +4 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/01-enumerate-components.md +26 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/01b-detect-component-taxonomy.md +7 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/02-identify-design-system.md +12 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/03-detect-design-tokens.md +35 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/04-detect-shadcn-inventory.md +13 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/04b-live-storybook-read.md +26 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/05-list-reusable-patterns.md +14 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/06-match-candidates.md +52 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/07-greenfield-branch.md +29 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/08-a11y-baseline.md +40 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/09-validate-and-write.md +5 -0
- package/dist/agent-src/skills/experiment-loop/SKILL.md +1 -1
- package/dist/agent-src/skills/fe-design/references/design-patterns.md +16 -2
- package/dist/agent-src/skills/fe-design/references/design-read-and-memory.md +1 -1
- package/dist/agent-src/skills/fe-design/references/source-led-port.md +1 -1
- package/dist/agent-src/skills/finishing-a-development-branch/SKILL.md +6 -6
- package/dist/agent-src/skills/flux/SKILL.md +1 -1
- package/dist/agent-src/skills/form-handler/SKILL.md +15 -2
- package/dist/agent-src/skills/git-workflow/SKILL.md +2 -2
- package/dist/agent-src/skills/git-workflow/references/branch-update.md +7 -0
- package/dist/agent-src/skills/git-workflow/references/commit-subject.md +12 -0
- package/dist/agent-src/skills/git-workflow/references/push-closes-its-loop.md +10 -0
- package/dist/agent-src/skills/gtm-launch/SKILL.md +8 -1
- package/dist/agent-src/skills/html-deck/SKILL.md +7 -2
- package/dist/agent-src/skills/humanizer/SKILL.md +16 -3
- package/dist/agent-src/skills/humanizer/references/anti-aiisms.md +13 -1
- package/dist/agent-src/skills/humanizer/references/fixtures.md +8 -0
- package/dist/agent-src/skills/js-library-packaging/SKILL.md +5 -4
- package/dist/agent-src/skills/js-library-packaging/scripts/check_package_surface.mjs +197 -0
- package/dist/agent-src/skills/judge-artifact-completeness/SKILL.md +1 -1
- package/dist/agent-src/skills/judge-security-auditor/SKILL.md +2 -2
- package/dist/agent-src/skills/launch-readiness/SKILL.md +18 -22
- package/dist/agent-src/skills/learning-to-rule-or-skill/SKILL.md +5 -5
- package/dist/agent-src/skills/livewire/SKILL.md +1 -1
- package/dist/agent-src/skills/llm-provider-knowledge/SKILL.md +18 -0
- package/dist/agent-src/skills/logo-generation/SKILL.md +9 -3
- package/dist/agent-src/skills/market-entry-analysis/SKILL.md +6 -1
- package/dist/agent-src/skills/markitdown/SKILL.md +1 -1
- package/dist/agent-src/skills/memory-consolidation/SKILL.md +2 -2
- package/dist/agent-src/skills/messaging-architecture/SKILL.md +8 -1
- package/dist/agent-src/skills/motion-choreographer/SKILL.md +2 -2
- package/dist/agent-src/skills/playwright-testing/SKILL.md +2 -0
- package/dist/agent-src/skills/positioning-strategy/SKILL.md +10 -2
- package/dist/agent-src/skills/prediction-pool-optimizer/references/ev-fixtures.md +13 -0
- package/dist/agent-src/skills/prediction-pool-optimizer/references/odds-and-bonus.md +7 -0
- package/dist/agent-src/skills/project-analysis-core/SKILL.md +1 -1
- package/dist/agent-src/skills/project-analysis-hypothesis-driven/SKILL.md +1 -1
- package/dist/agent-src/skills/project-analyzer/SKILL.md +14 -75
- package/dist/agent-src/skills/project-analyzer/procedure.yaml +39 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/01-project-overview.md +9 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/02-architecture.md +7 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/03-data-layer.md +6 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/04-business-domains.md +7 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/05-api-surface.md +6 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/06-service-map.md +6 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/07-module-inventory.md +6 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/08-infrastructure-and-testing.md +5 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/09-agent-docs-audit.md +6 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/10-gap-analysis.md +6 -0
- package/dist/agent-src/skills/quality-tools/references/js-ts-tools.md +10 -0
- package/dist/agent-src/skills/quality-tools/references/php-tools.md +13 -0
- package/dist/agent-src/skills/quality-tools/references/python-tools.md +11 -0
- package/dist/agent-src/skills/react-native-setup/SKILL.md +7 -2
- package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +5 -1
- package/dist/agent-src/skills/react-shadcn-ui/references/registry.md +13 -0
- package/dist/agent-src/skills/react-shadcn-ui/scripts/shadcn_add.mjs +315 -0
- package/dist/agent-src/skills/react-shadcn-ui/scripts/shadcn_add.ts +6 -6
- package/dist/agent-src/skills/receiving-code-review/SKILL.md +1 -1
- package/dist/agent-src/skills/refine-ticket/SKILL.md +2 -2
- package/dist/agent-src/skills/release-comms/SKILL.md +2 -1
- package/dist/agent-src/skills/repomix-packer/SKILL.md +2 -2
- package/dist/agent-src/skills/requesting-code-review/SKILL.md +3 -3
- package/dist/agent-src/skills/roadmap-management/references/archival.md +3 -3
- package/dist/agent-src/skills/roadmap-management/references/authoring.md +9 -2
- package/dist/agent-src/skills/roadmap-management/references/dashboard.md +3 -3
- package/dist/agent-src/skills/roadmap-management/references/lifecycle.md +3 -3
- package/dist/agent-src/skills/roadmap-writing/SKILL.md +4 -4
- package/dist/agent-src/skills/rtk-output-filtering/SKILL.md +1 -1
- package/dist/agent-src/skills/rule-writing/SKILL.md +1 -2
- package/dist/agent-src/skills/security/SKILL.md +41 -5
- package/dist/agent-src/skills/skill-improvement-pipeline/SKILL.md +5 -3
- package/dist/agent-src/skills/skill-reviewer/SKILL.md +1 -1
- package/dist/agent-src/skills/skill-writing/SKILL.md +23 -8
- package/dist/agent-src/skills/skill-writing/references/section-patterns.md +19 -1
- package/dist/agent-src/skills/source-discovery/SKILL.md +3 -3
- package/dist/agent-src/skills/sql-writing/SKILL.md +2 -2
- package/dist/agent-src/skills/standards-from-config/SKILL.md +2 -2
- package/dist/agent-src/skills/storybook-workshop/SKILL.md +5 -0
- package/dist/agent-src/skills/storybook-workshop/scripts/story_contrast_floor.mjs +99 -0
- package/dist/agent-src/skills/subagent-orchestration/SKILL.md +13 -13
- package/dist/agent-src/skills/subagent-orchestration/prompts/README.md +4 -3
- package/dist/agent-src/skills/svg-authoring/SKILL.md +7 -1
- package/dist/agent-src/skills/systematic-debugging/SKILL.md +2 -2
- package/dist/agent-src/skills/tailwind-engineer/SKILL.md +8 -3
- package/dist/agent-src/skills/tailwind-engineer/scripts/tailwind_config_gen.mjs +482 -0
- package/dist/agent-src/skills/test-case-discovery/SKILL.md +1 -1
- package/dist/agent-src/skills/threat-modeling/SKILL.md +8 -1
- package/dist/agent-src/skills/threat-modeling/data/manifest.json +5 -2
- package/dist/agent-src/skills/threat-modeling/data/reasoning.csv +10 -10
- package/dist/agent-src/skills/threat-modeling/data/surfaces.csv +11 -10
- package/dist/agent-src/skills/threat-modeling/data/threats.csv +34 -20
- package/dist/agent-src/skills/type-design/SKILL.md +196 -0
- package/dist/agent-src/skills/type-design/references/font-spec.md +90 -0
- package/dist/agent-src/skills/type-design/references/gates.md +113 -0
- package/dist/agent-src/skills/type-design/references/toolchain.md +66 -0
- package/dist/agent-src/skills/typography-system/SKILL.md +21 -11
- package/dist/agent-src/skills/typography-system/references/worked-scales.md +85 -0
- package/dist/agent-src/skills/ui-apply-generic/SKILL.md +1 -1
- package/dist/agent-src/skills/universal-project-analysis/SKILL.md +1 -1
- package/dist/agent-src/skills/upstream-contribute/SKILL.md +120 -125
- package/dist/agent-src/skills/using-git-worktrees/SKILL.md +1 -0
- package/dist/agent-src/skills/verify-repair-loop/SKILL.md +1 -1
- package/dist/agent-src/skills/voice-and-tone-design/SKILL.md +71 -2
- package/dist/agent-src/skills/worktree-lifecycle/SKILL.md +16 -14
- package/dist/agent-src/templates/AGENTS.md +1 -1
- package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/dist/agent-src/templates/agents/proposal.example.md +1 -1
- package/dist/agent-src/templates/github-workflows/advisories-daily.yml +85 -0
- package/dist/agent-src/templates/roadmaps.md +39 -1
- package/dist/agent-src/templates/scripts/check_memory.ts +2 -2
- package/dist/agent-src/templates/scripts/historical-bug-patterns.example.yml +13 -1
- package/dist/agent-src/templates/scripts/work_engine/cli.ts +17 -0
- package/dist/agent-src/templates/scripts/work_engine/cli_args.ts +10 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/scaffold.ts +22 -13
- package/dist/agent-src/templates/scripts/work_engine/dispatcher.ts +18 -4
- package/dist/agent-src/templates/scripts/work_engine/procedure/checks.ts +283 -0
- package/dist/agent-src/templates/scripts/work_engine/procedure/run.ts +432 -0
- package/dist/agent-src/templates/scripts/work_engine/procedure/sidecar.ts +185 -0
- package/dist/agent-src/templates/scripts/work_engine/state.ts +3 -0
- package/dist/cli/commands/uiRender.js +72 -17
- package/dist/cli/commands/uiRenderAsset.js +10 -2
- package/dist/cli/commands/uiRenderAssetFonts.js +158 -0
- package/dist/cli/commands/uiRenderAssetTypes.js +8 -20
- package/dist/cli/initRouting.js +1 -1
- package/dist/cli/mcp/dispatch.js +31 -9
- package/dist/cli/python/knowledge_ingest.js +7 -39
- package/dist/cli/python/workspace_secrets.js +4 -177
- package/dist/cli/registry.js +4 -1
- package/dist/cli-delegate/archive_completed_roadmaps.js +3 -2
- package/dist/cli-delegate/check_update_banner.js +635 -266
- package/dist/cli-delegate/{chunk-TMWYUOK4.js → chunk-2CX7NWRB.js} +224 -437
- package/dist/cli-delegate/{chunk-F3QDG2GT.js → chunk-2SFOOFJJ.js} +259 -159
- package/dist/cli-delegate/chunk-2Y5AMLMY.js +136 -0
- package/dist/cli-delegate/{chunk-OKJUIAPS.js → chunk-4E2W63DA.js} +1 -62
- package/dist/cli-delegate/{chunk-6SRJTYJS.js → chunk-4SHNERBL.js} +37 -16
- package/dist/cli-delegate/chunk-5VO3RTMV.js +208 -0
- package/dist/cli-delegate/chunk-6E2LDY4F.js +27 -0
- package/dist/cli-delegate/{chunk-XQTPXKFA.js → chunk-6ZD2QZMN.js} +8 -17
- package/dist/cli-delegate/{chunk-6V5FMA3P.js → chunk-7CEI2YPS.js} +1 -1
- package/dist/cli-delegate/{chunk-DMSZHXZS.js → chunk-7DRWULEQ.js} +80 -7
- package/dist/cli-delegate/chunk-7NXCZSDL.js +54 -0
- package/dist/cli-delegate/chunk-AX3U3UWJ.js +328 -0
- package/dist/cli-delegate/{chunk-WOKWX5PL.js → chunk-BKALSTBZ.js} +18 -3
- package/dist/cli-delegate/chunk-BMGUGSY6.js +103 -0
- package/dist/cli-delegate/chunk-BYV46VRM.js +3309 -0
- package/dist/cli-delegate/{chunk-5GPULQBE.js → chunk-CAL76ADI.js} +4215 -682
- package/dist/cli-delegate/chunk-DSY6LLCQ.js +127 -0
- package/dist/cli-delegate/chunk-E6XNBVE4.js +581 -0
- package/dist/cli-delegate/{chunk-ZUZKZYCN.js → chunk-ESUNQ5XR.js} +46 -10
- package/dist/cli-delegate/{chunk-G5VVIZRC.js → chunk-F7HLSW6P.js} +1 -1
- package/dist/cli-delegate/chunk-FIEEOH5C.js +133 -0
- package/dist/cli-delegate/chunk-FKYZOWVD.js +719 -0
- package/dist/cli-delegate/chunk-GOMILC3O.js +918 -0
- package/dist/cli-delegate/chunk-I4KJYVPB.js +69 -0
- package/dist/cli-delegate/{chunk-JQOM7TTM.js → chunk-IDAOTDPE.js} +1 -100
- package/dist/cli-delegate/chunk-IROAQ77A.js +137 -0
- package/dist/cli-delegate/chunk-J2SJZICO.js +698 -0
- package/dist/cli-delegate/{chunk-6YQC2HLF.js → chunk-JHMMWNJ2.js} +54 -40
- package/dist/cli-delegate/{chunk-WQWXGIWB.js → chunk-M6CRG5O6.js} +165 -15
- package/dist/cli-delegate/{chunk-PHD7OOLE.js → chunk-MQ2UDEGV.js} +14 -3
- package/dist/cli-delegate/chunk-NTM7G2V4.js +220 -0
- package/dist/cli-delegate/chunk-PV7S5DPJ.js +175 -0
- package/dist/cli-delegate/{chunk-F7DQWYR5.js → chunk-RAXQOETZ.js} +6 -2
- package/dist/cli-delegate/{chunk-T7XSJSUQ.js → chunk-SIOMDAKL.js} +980 -784
- package/dist/cli-delegate/{chunk-KR6EM23A.js → chunk-TULVDQ4L.js} +3 -48
- package/dist/cli-delegate/chunk-UUYEKXKR.js +20 -0
- package/dist/cli-delegate/{chunk-7XGD2OEU.js → chunk-UXWHY6CQ.js} +2 -1
- package/dist/cli-delegate/{chunk-PWX7CKMD.js → chunk-VC3ECUEK.js} +1 -1
- package/dist/cli-delegate/{chunk-KXXWJTDO.js → chunk-WMNYVIYX.js} +1 -1
- package/dist/cli-delegate/chunk-XCY5KKUC.js +181 -0
- package/dist/cli-delegate/{chunk-H76PHZBI.js → chunk-XLY5G3CM.js} +14 -19
- package/dist/cli-delegate/cmd_adr_effective.js +41 -2
- package/dist/cli-delegate/cmd_analyze_session.js +7 -7
- package/dist/cli-delegate/cmd_brand_status.js +1287 -10
- package/dist/cli-delegate/cmd_ci_settle.js +330 -0
- package/dist/cli-delegate/cmd_conformance.js +483 -817
- package/dist/cli-delegate/cmd_doctor.js +26 -16
- package/dist/cli-delegate/cmd_doctor_neighbours.js +10 -7
- package/dist/cli-delegate/cmd_explain.js +9 -24
- package/dist/cli-delegate/cmd_export.js +14 -11
- package/dist/cli-delegate/cmd_fleet.js +5 -3
- package/dist/cli-delegate/cmd_git_convention.js +8 -4
- package/dist/cli-delegate/cmd_handoff.js +79 -242
- package/dist/cli-delegate/cmd_mcp_available.js +1 -1
- package/dist/cli-delegate/cmd_memory_get.js +4 -2
- package/dist/cli-delegate/cmd_migrate.js +2 -2
- package/dist/cli-delegate/cmd_packs_active.js +2 -2
- package/dist/cli-delegate/cmd_preflight.js +7 -5
- package/dist/cli-delegate/cmd_prune.js +16 -13
- package/dist/cli-delegate/cmd_route_audit.js +11 -8
- package/dist/cli-delegate/cmd_route_explain.js +649 -16
- package/dist/cli-delegate/cmd_session_recycle.js +15 -6
- package/dist/cli-delegate/cmd_settings_check.js +2 -2
- package/dist/cli-delegate/cmd_settings_get.js +1 -1
- package/dist/cli-delegate/cmd_settings_migrate.js +14 -11
- package/dist/cli-delegate/cmd_settings_set.js +1 -1
- package/dist/cli-delegate/cmd_sync.js +16 -13
- package/dist/cli-delegate/cmd_uninstall.js +185 -31
- package/dist/cli-delegate/cmd_update.js +67 -3
- package/dist/cli-delegate/cmd_upgrade.js +38 -7
- package/dist/cli-delegate/cmd_validate.js +16 -13
- package/dist/cli-delegate/cmd_versions.js +1 -1
- package/dist/cli-delegate/dashboard_mode.js +1 -1
- package/dist/cli-delegate/gate_execute.js +4 -3
- package/dist/cli-delegate/roadmap_age.js +22 -0
- package/dist/cli-delegate/roadmap_gates.js +4 -3
- package/dist/cli-delegate/update_roadmap_progress.js +3 -2
- package/dist/cli-delegate/upgrade_unattended-VVL6JLSX.js +541 -0
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +373 -190
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +5 -5
- package/dist/discovery/dormancy-report.md +1 -1
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +21 -16
- package/dist/discovery/trust-report.md +3 -3
- package/dist/discovery/workspaces.json +16 -11
- package/dist/hooks/chat_history.chunk.cjs +6852 -0
- package/dist/hooks/chat_history.chunk.cjs.sha256 +1 -0
- package/dist/hooks/dispatch.js +17506 -18692
- package/dist/hooks/dispatch.sha256 +1 -1
- package/dist/hooks/egress_engine.chunk.cjs +915 -0
- package/dist/hooks/egress_engine.chunk.cjs.sha256 +1 -0
- package/dist/hooks/svg_rules.chunk.cjs +281 -49
- package/dist/hooks/svg_rules.chunk.cjs.sha256 +1 -1
- package/dist/install/conflict.js +36 -6
- package/dist/install/conflictTracker.js +81 -7
- package/dist/install/detect.js +3 -3
- package/dist/install/hostPermissionsAdapter.js +106 -0
- package/dist/install/install.mjs +3117 -1949
- package/dist/install/installThinLayer.js +1 -1
- package/dist/install/manifestFiles.js +21 -0
- package/dist/install/noGoDenyRows.js +300 -0
- package/dist/install/noGoRules.js +368 -0
- package/dist/install/ownershipLedger.js +133 -0
- package/dist/install/plan.js +1 -1
- package/dist/install/preflight.js +39 -8
- package/dist/install/preserve.js +74 -12
- package/dist/install/recordedOwnership.js +88 -5
- package/dist/install/rule_scope.js +20 -3
- package/dist/install/stagedRuntime.js +455 -0
- package/dist/install/toolsArg.js +19 -0
- package/dist/install/userPin.js +47 -0
- package/dist/install/wizard-plan.js +26 -4
- package/dist/mcp/awesome-mcp-servers.row.md +1 -1
- package/dist/mcp/mcp-cloudflare-catalogue.json +3 -2
- package/dist/mcp/registry-manifest.json +6 -5
- package/dist/mcp/server.json +3 -3
- package/dist/mcp/server.mjs +9831 -5546
- package/dist/router.json +1 -1
- package/dist/scripts/_lib/agent_settings.js +7 -12
- package/dist/scripts/_lib/asset_render_record.js +219 -0
- package/dist/scripts/_lib/claude_builtin_names.js +9 -4
- package/dist/scripts/_lib/claude_settings_hooks.js +102 -34
- package/dist/scripts/_lib/egress_rules.js +766 -0
- package/dist/scripts/_lib/environment_detector.js +24 -33
- package/dist/scripts/_lib/global_deploy_inventory.js +146 -9
- package/dist/scripts/_lib/guidelines_lane.js +10 -1
- package/dist/scripts/_lib/identifier_redaction.js +24 -0
- package/dist/scripts/_lib/installed_layer.js +17 -0
- package/dist/scripts/_lib/installed_layer_normalise.js +72 -0
- package/dist/scripts/_lib/lean_projection_mode.js +34 -152
- package/dist/scripts/_lib/project_tree_form.js +118 -0
- package/dist/scripts/_lib/scoped_projection.js +133 -3
- package/dist/scripts/_lib/settings_removed_keys.js +29 -0
- package/dist/scripts/_lib/settings_renamed_keys.js +17 -5
- package/dist/scripts/_lib/subagent_native_fields.js +35 -0
- package/dist/scripts/_lib/svg_filled_counter.js +285 -0
- package/dist/scripts/_lib/svg_rules.js +2 -0
- package/dist/scripts/_lib/ui_surface.js +19 -0
- package/dist/scripts/_lib/verification_command.js +364 -0
- package/dist/scripts/_lib/workspace_secrets.js +229 -0
- package/dist/scripts/ai_council/seat_policy.js +27 -0
- package/dist/scripts/ai_council/transport_resolver.js +9 -10
- package/dist/scripts/condense.js +25 -29
- package/dist/server/io/substituteTemplate.js +2 -2
- package/dist/server/io/yamlIO.js +2 -2
- package/dist/server/routes/install.js +5 -1
- package/dist/server/routes/settings.js +2 -2
- package/dist/server/routes/wizard.js +1 -1
- package/dist/server/schemas/settings.js +22 -16
- package/dist/server/serverInfo.js +1 -1
- package/dist/shared/brandTokenDocument.js +47 -0
- package/dist/shared/brandTokenPaths.js +43 -0
- package/dist/shared/settingsCarveOut.js +0 -7
- package/dist/shared/skillRanking.js +103 -5
- package/dist/shared/userMd/formAdapter.js +16 -0
- package/dist/shared/userMd/schema.js +17 -0
- package/dist/ui/assets/index-w70Ado09.js +23 -0
- package/dist/ui/index.html +1 -1
- package/docs/MIGRATION.md +89 -2
- package/docs/THIRD-PARTY-NOTICES.md +27 -0
- package/docs/contracts/settings-classes.md +27 -9
- package/docs/guidelines/agent-infra/api-cost-levers.md +4 -3
- package/docs/guidelines/agent-infra/model-recommendation.md +11 -5
- package/docs/guidelines/agent-infra/rule-body-migration-inventory.md +1 -1
- package/docs/guidelines/agent-infra/self-improvement-pipeline.md +47 -24
- package/docs/guidelines/design-antipatterns.md +5 -0
- package/docs/guidelines/design-asset-discipline.md +17 -0
- package/docs/guidelines/design-fidelity-routing.md +1 -0
- package/docs/guidelines/php/api-design.md +10 -1
- package/llms.txt +12 -10
- package/package.json +13 -4
- package/src/agent-src/scripts/dashboard_mode.ts +4 -1
- package/src/agent-src/scripts/roadmap_age.ts +175 -0
- package/src/agent-src/scripts/update_roadmap_progress.ts +10 -2
- package/src/agent-src/templates/AGENTS.md +1 -1
- package/src/agent-src/templates/scripts/check_memory.ts +2 -2
- package/src/agent-src/templates/scripts/historical-bug-patterns.example.yml +13 -1
- package/src/agent-src/templates/scripts/work_engine/cli.ts +17 -0
- package/src/agent-src/templates/scripts/work_engine/cli_args.ts +10 -0
- package/src/agent-src/templates/scripts/work_engine/directives/ui/scaffold.ts +22 -13
- package/src/agent-src/templates/scripts/work_engine/dispatcher.ts +18 -4
- package/src/agent-src/templates/scripts/work_engine/procedure/checks.ts +283 -0
- package/src/agent-src/templates/scripts/work_engine/procedure/run.ts +432 -0
- package/src/agent-src/templates/scripts/work_engine/procedure/sidecar.ts +185 -0
- package/src/agent-src/templates/scripts/work_engine/state.ts +3 -0
- package/src/config/agent-settings.template.yml +120 -57
- package/src/config/agents-paths.yml +13 -7
- package/src/config/ci-local-parity.yml +44 -0
- package/src/config/continuity-surface.json +51 -2
- package/src/config/depth-audit-samples.json +5 -0
- package/src/config/discovery/command-verbs.yml +1 -0
- package/src/config/dispatch-economy-metrics.json +1 -0
- package/src/config/egress-mutations/class-precedence-swapped.json +7 -0
- package/src/config/egress-mutations/credential-token-restores.json +7 -0
- package/src/config/egress-mutations/iban-checksum-disabled.json +7 -0
- package/src/config/egress-mutations/raw-value-in-the-count-record.json +7 -0
- package/src/config/evaluator-budgets.json +4 -4
- package/src/config/gate-coverage.yml +149 -3
- package/src/config/gate-reachability-exemptions.json +3 -5
- package/src/config/gate-violation-baselines.json +26 -22
- package/src/config/gitignore-block.txt +6 -3
- package/src/config/hook-bundle-budget.json +34 -3
- package/src/config/hook-carrier-probes.json +30 -0
- package/src/config/hook-latency-budget.json +4 -2
- package/src/config/host-injection-effect.json +8 -1
- package/src/config/host-skill-frontmatter-keys.json +56 -0
- package/src/config/layer-form-brakes.json +4 -0
- package/src/config/layer-form-comparison-corpus.json +42 -0
- package/src/config/loop-surfaces.yaml +28 -47
- package/src/config/memory-twin-verdicts.yml +9 -1
- package/src/config/metric-registry.yml +40 -3
- package/src/config/pack-size-budget.json +15 -0
- package/src/config/procedure-core-budget.json +21 -0
- package/src/config/profiles/minimal.ini +1 -1
- package/src/config/project-tree-form.json +24 -0
- package/src/config/reach-channels.yml +3 -3
- package/src/config/reach-prescriptions-intake.yml +1 -1
- package/src/config/roadmap-step-size-baseline.json +118 -0
- package/src/config/routing-coverage-seed.json +93 -2
- package/src/config/skill-body-budget.json +686 -0
- package/src/config/skill-fork-pilot.json +17 -0
- package/src/config/skill-lifecycle-probes-codex.json +57 -0
- package/src/config/skill-lifecycle-probes.json +57 -0
- package/src/config/skill-output-shape.json +316 -0
- package/src/config/step-depth-table.json +58 -0
- package/src/config/turnaround-budget.json +90 -0
- package/src/install/conflict.ts +38 -6
- package/src/install/conflictTracker.ts +126 -8
- package/src/install/detect.ts +3 -3
- package/src/install/hostPermissionsAdapter.ts +136 -0
- package/src/install/installThinLayer.ts +6 -1
- package/src/install/manifestFiles.ts +24 -0
- package/src/install/noGoDenyRows.ts +368 -0
- package/src/install/noGoRules.ts +438 -0
- package/src/install/ownershipLedger.ts +180 -0
- package/src/install/plan.ts +1 -1
- package/src/install/preflight.ts +42 -10
- package/src/install/preserve.ts +94 -12
- package/src/install/recordedOwnership.ts +121 -3
- package/src/install/rule_scope.ts +20 -3
- package/src/install/stagedRuntime.ts +528 -0
- package/src/install/toolsArg.ts +16 -0
- package/src/install/types.ts +23 -2
- package/src/install/userPin.ts +54 -0
- package/src/install/wizard-plan.ts +25 -4
- package/src/scripts/_cli/_doctor_emit.ts +24 -0
- package/src/scripts/_cli/cmd_brand_status.ts +223 -12
- package/src/scripts/_cli/cmd_ci_settle.ts +32 -0
- package/src/scripts/_cli/cmd_doctor.ts +23 -44
- package/src/scripts/_cli/cmd_route_explain.ts +176 -2
- package/src/scripts/_cli/cmd_uninstall.ts +270 -26
- package/src/scripts/_cli/cmd_update.ts +34 -1
- package/src/scripts/_cli/cmd_upgrade.ts +38 -2
- package/src/scripts/_cli/detection_report.ts +7 -0
- package/src/scripts/_cli/doctor_execution.ts +1 -2
- package/src/scripts/_cli/doctor_install_mode.ts +39 -0
- package/src/scripts/_cli/doctor_network_posture.ts +3 -3
- package/src/scripts/_cli/doctor_ownership_ledger.ts +126 -0
- package/src/scripts/_cli/doctor_update_verdict.ts +104 -0
- package/src/scripts/_cli/explain_last/scrubber.ts +9 -21
- package/src/scripts/_cli/upgrade_unattended.ts +548 -0
- package/src/scripts/_dispatch.bash +42 -9
- package/src/scripts/_lib/activation_ladder.ts +1 -1
- package/src/scripts/_lib/advisory_inventory.ts +405 -0
- package/src/scripts/_lib/advisory_notice.ts +270 -0
- package/src/scripts/_lib/advisory_sources.ts +752 -0
- package/src/scripts/_lib/advisory_verdicts.ts +363 -0
- package/src/scripts/_lib/agent_artifact_location.ts +177 -0
- package/src/scripts/_lib/agent_settings.ts +7 -12
- package/src/scripts/_lib/arrival_record.ts +217 -0
- package/src/scripts/_lib/asset_render_record.ts +247 -0
- package/src/scripts/_lib/billing_grant.ts +4 -2
- package/src/scripts/_lib/brand_voice_slot.ts +258 -0
- package/src/scripts/_lib/canary_status.ts +24 -0
- package/src/scripts/_lib/cc_transcript.ts +276 -0
- package/src/scripts/_lib/changelog_eras.ts +83 -0
- package/src/scripts/_lib/claim_phrases.ts +71 -0
- package/src/scripts/_lib/classify_update.ts +171 -0
- package/src/scripts/_lib/claude_builtin_names.ts +9 -4
- package/src/scripts/_lib/claude_hook_scope.ts +195 -0
- package/src/scripts/_lib/claude_settings_hooks.ts +118 -34
- package/src/scripts/_lib/codex_resident_set.ts +460 -0
- package/src/scripts/_lib/codex_skill_finder.ts +225 -0
- package/src/scripts/_lib/confusables.ts +19 -0
- package/src/scripts/_lib/consumer_impact.ts +199 -0
- package/src/scripts/_lib/content_class.ts +127 -0
- package/src/scripts/_lib/counted_probe.ts +68 -1
- package/src/scripts/_lib/credential_deny_rows.ts +151 -0
- package/src/scripts/_lib/credential_files.ts +367 -0
- package/src/scripts/_lib/delivery_arm_experiment.ts +2 -2
- package/src/scripts/_lib/depth_flip.ts +141 -0
- package/src/scripts/_lib/design_lock.ts +117 -0
- package/src/scripts/_lib/design_sync_ledger.ts +142 -0
- package/src/scripts/_lib/design_sync_plan.ts +177 -0
- package/src/scripts/_lib/design_sync_reconcile.ts +159 -0
- package/src/scripts/_lib/design_sync_verify.ts +99 -0
- package/src/scripts/_lib/design_system_claude_design.ts +323 -0
- package/src/scripts/_lib/design_system_import.ts +84 -6
- package/src/scripts/_lib/dispatch_import_closure.ts +42 -11
- package/src/scripts/_lib/egress_credential_env.ts +35 -0
- package/src/scripts/_lib/egress_engine.ts +22 -0
- package/src/scripts/_lib/egress_known_values.ts +223 -0
- package/src/scripts/_lib/egress_normalize.ts +67 -0
- package/src/scripts/_lib/egress_prefixes.ts +42 -0
- package/src/scripts/_lib/egress_rules.ts +896 -0
- package/src/scripts/_lib/egress_rules_linearity.ts +56 -0
- package/src/scripts/_lib/egress_sender_scan.ts +290 -0
- package/src/scripts/_lib/egress_session_table.ts +510 -0
- package/src/scripts/_lib/egress_text.ts +63 -0
- package/src/scripts/_lib/egress_token.ts +252 -0
- package/src/scripts/_lib/empty_cycles.ts +1 -1
- package/src/scripts/_lib/environment_detector.ts +45 -30
- package/src/scripts/_lib/exemption_shape.ts +75 -1
- package/src/scripts/_lib/floor_posture.ts +185 -0
- package/src/scripts/_lib/forge_protection.ts +140 -2
- package/src/scripts/_lib/global_deploy_inventory.ts +159 -6
- package/src/scripts/_lib/guidelines_lane.ts +12 -1
- package/src/scripts/_lib/hand_kinds.ts +65 -0
- package/src/scripts/_lib/headless_invocation.ts +3 -3
- package/src/scripts/_lib/host_capability.ts +34 -2
- package/src/scripts/_lib/host_env_write.ts +39 -18
- package/src/scripts/_lib/host_listing_model.ts +14 -7
- package/src/scripts/_lib/identifier_redaction.ts +26 -0
- package/src/scripts/_lib/impact_bump.ts +70 -0
- package/src/scripts/_lib/install_reach_checks.ts +53 -1
- package/src/scripts/_lib/installed_layer.ts +31 -0
- package/src/scripts/_lib/installed_layer_normalise.ts +75 -0
- package/src/scripts/_lib/instructions_loaded_classify.ts +75 -0
- package/src/scripts/_lib/instructions_loaded_event.ts +53 -0
- package/src/scripts/_lib/knowledge_global_redaction.ts +2 -2
- package/src/scripts/_lib/layer_form_corpus.ts +165 -0
- package/src/scripts/_lib/layer_form_decision.ts +248 -0
- package/src/scripts/_lib/layer_form_evidence.ts +112 -0
- package/src/scripts/_lib/lean_projection_mode.ts +32 -161
- package/src/scripts/_lib/llm_proposer_transport.ts +1 -0
- package/src/scripts/_lib/loop_guards.ts +8 -120
- package/src/scripts/_lib/major_surface.ts +207 -0
- package/src/scripts/_lib/mcp_bridge.ts +30 -69
- package/src/scripts/_lib/merge_clearance_record.ts +384 -0
- package/src/scripts/_lib/neighbour_census.ts +18 -1
- package/src/scripts/_lib/orchestration_record.ts +61 -0
- package/src/scripts/_lib/outcome_vocabularies.ts +15 -23
- package/src/scripts/_lib/pin_advice.ts +49 -0
- package/src/scripts/_lib/platform_anchor.ts +222 -0
- package/src/scripts/_lib/procedure_checks.ts +5 -0
- package/src/scripts/_lib/project_tree_form.ts +134 -0
- package/src/scripts/_lib/projection_key_migration.ts +122 -0
- package/src/scripts/_lib/prompt_shape.ts +13 -2
- package/src/scripts/_lib/provenance_verify.ts +272 -0
- package/src/scripts/_lib/quota_parked.ts +27 -1
- package/src/scripts/_lib/ratification_artifact.ts +64 -1
- package/src/scripts/_lib/ratification_subject.ts +508 -46
- package/src/scripts/_lib/release_findings_ingest.ts +52 -5
- package/src/scripts/_lib/release_highlights.ts +72 -2
- package/src/scripts/_lib/release_settings_surface.ts +392 -0
- package/src/scripts/_lib/review_round.ts +134 -0
- package/src/scripts/_lib/roadmap_checkboxes.ts +1 -1
- package/src/scripts/_lib/roadmap_slug_lock.ts +254 -0
- package/src/scripts/_lib/roadmap_step_size.ts +75 -0
- package/src/scripts/_lib/run_checkpoint.ts +60 -3
- package/src/scripts/_lib/runtime_wiring_checks.ts +15 -1
- package/src/scripts/_lib/scope_guard.sh +64 -5
- package/src/scripts/_lib/scoped_projection.ts +136 -3
- package/src/scripts/_lib/secret_detector.ts +24 -103
- package/src/scripts/_lib/security_fix.ts +429 -0
- package/src/scripts/_lib/security_fix_context.ts +133 -0
- package/src/scripts/_lib/self_repair.ts +69 -39
- package/src/scripts/_lib/self_repair_outgoing.ts +209 -0
- package/src/scripts/_lib/self_repair_payload.ts +86 -0
- package/src/scripts/_lib/session_eol.ts +3 -0
- package/src/scripts/_lib/session_pr_watch.ts +207 -0
- package/src/scripts/_lib/session_register.ts +51 -1
- package/src/scripts/_lib/session_tag.ts +51 -0
- package/src/scripts/_lib/settings_removed_keys.ts +30 -0
- package/src/scripts/_lib/settings_renamed_keys.ts +19 -5
- package/src/scripts/_lib/skill_catalogue.ts +66 -25
- package/src/scripts/_lib/skill_fork_pilot.ts +121 -0
- package/src/scripts/_lib/skill_leases.ts +203 -0
- package/src/scripts/_lib/skill_listing_overrides.ts +294 -0
- package/src/scripts/_lib/skill_materialisation.ts +388 -0
- package/src/scripts/_lib/skill_materialisation_gate.ts +210 -0
- package/src/scripts/_lib/skill_materialisation_lock.ts +149 -0
- package/src/scripts/_lib/skill_materialisation_triggers.ts +96 -0
- package/src/scripts/_lib/skill_origin.ts +21 -1
- package/src/scripts/_lib/skill_reach.ts +342 -0
- package/src/scripts/_lib/source_shape.ts +7 -2
- package/src/scripts/_lib/sqlite_guard.ts +1 -1
- package/src/scripts/_lib/step_anatomy.ts +330 -0
- package/src/scripts/_lib/subagent_capsule.ts +8 -2
- package/src/scripts/_lib/subagent_native_fields.ts +30 -0
- package/src/scripts/_lib/subagent_spawn.ts +36 -0
- package/src/scripts/_lib/subagent_steering.ts +367 -0
- package/src/scripts/_lib/svg_filled_counter.ts +287 -0
- package/src/scripts/_lib/svg_rules.ts +2 -0
- package/src/scripts/_lib/test_delta.ts +89 -6
- package/src/scripts/_lib/tier_downshift_verdict.ts +222 -0
- package/src/scripts/_lib/tool_result_census.ts +62 -0
- package/src/scripts/_lib/trigger_routers.ts +1 -0
- package/src/scripts/_lib/turnaround_throughput.ts +378 -0
- package/src/scripts/_lib/ui_surface.ts +22 -0
- package/src/scripts/_lib/unattended_gates.ts +100 -0
- package/src/scripts/_lib/undeployed_fixes.ts +34 -0
- package/src/scripts/_lib/update_check.ts +143 -12
- package/src/scripts/_lib/update_invite.ts +116 -0
- package/src/scripts/_lib/update_notice.ts +259 -0
- package/src/scripts/_lib/verify_clause.ts +4 -2
- package/src/scripts/_lib/version_order.ts +146 -0
- package/src/scripts/_lib/worker_reuse.ts +191 -0
- package/src/scripts/_lib/workspace_secrets.ts +273 -0
- package/src/scripts/_lib/worktree_git.ts +67 -0
- package/src/scripts/_lib/worktree_ignored.ts +116 -0
- package/src/scripts/adoption_status.ts +330 -3
- package/src/scripts/adr_cite_check.ts +93 -0
- package/src/scripts/advisories.ts +803 -0
- package/src/scripts/ai-image/adapters/flux.sh +1 -0
- package/src/scripts/ai-image/adapters/gemini-image.sh +1 -0
- package/src/scripts/ai-image/adapters/ideogram.sh +1 -0
- package/src/scripts/ai-image/adapters/recraft.sh +1 -0
- package/src/scripts/ai-video/adapters/comfyui.sh +1 -0
- package/src/scripts/ai-video/adapters/fal.sh +1 -0
- package/src/scripts/ai-video/adapters/gemini-veo.sh +1 -0
- package/src/scripts/ai-video/adapters/higgsfield.sh +1 -0
- package/src/scripts/ai-video/adapters/kling.sh +1 -0
- package/src/scripts/ai-video/adapters/musetalk.sh +1 -0
- package/src/scripts/ai-video/adapters/openai-images.sh +1 -0
- package/src/scripts/ai-video/adapters/replicate.sh +1 -0
- package/src/scripts/ai-video/adapters/sora.sh +1 -0
- package/src/scripts/ai-video/adapters/syncso.sh +1 -0
- package/src/scripts/ai-video/stitch.sh +115 -2
- package/src/scripts/ai_council/airgap.ts +1 -0
- package/src/scripts/ai_council/api_transport.ts +27 -4
- package/src/scripts/ai_council/budget_guard.ts +300 -11
- package/src/scripts/ai_council/bundler.ts +20 -29
- package/src/scripts/ai_council/chairman.ts +17 -2
- package/src/scripts/ai_council/cli_agency_bounds.ts +158 -0
- package/src/scripts/ai_council/cli_launch_env.ts +54 -0
- package/src/scripts/ai_council/cli_least_agency_canary.ts +18 -2
- package/src/scripts/ai_council/clients.ts +55 -73
- package/src/scripts/ai_council/config.ts +16 -22
- package/src/scripts/ai_council/council_egress.ts +167 -0
- package/src/scripts/ai_council/exposure_ledger.ts +117 -0
- package/src/scripts/ai_council/free_hand_shadow.ts +276 -0
- package/src/scripts/ai_council/free_route.ts +216 -0
- package/src/scripts/ai_council/free_route_catalog.ts +173 -0
- package/src/scripts/ai_council/free_route_client.ts +95 -0
- package/src/scripts/ai_council/free_rung.ts +61 -0
- package/src/scripts/ai_council/hand_payload.ts +230 -0
- package/src/scripts/ai_council/hand_schemas.ts +123 -0
- package/src/scripts/ai_council/jury_aggregate.ts +155 -1
- package/src/scripts/ai_council/kind_flip.ts +221 -0
- package/src/scripts/ai_council/kind_flip_state.ts +19 -0
- package/src/scripts/ai_council/learn_low_impact_preview.ts +50 -22
- package/src/scripts/ai_council/modification_review.ts +98 -5
- package/src/scripts/ai_council/necessity.ts +7 -0
- package/src/scripts/ai_council/orchestrator.ts +16 -16
- package/src/scripts/ai_council/pricing.ts +10 -0
- package/src/scripts/ai_council/redact_low_impact_entry.ts +5 -2
- package/src/scripts/ai_council/response_render.ts +27 -4
- package/src/scripts/ai_council/round_reservations.ts +119 -0
- package/src/scripts/ai_council/route_chooser.ts +161 -0
- package/src/scripts/ai_council/route_liveness.ts +152 -0
- package/src/scripts/ai_council/route_member.ts +52 -0
- package/src/scripts/ai_council/seat_policy.ts +40 -0
- package/src/scripts/ai_council/seat_resume.ts +40 -0
- package/src/scripts/ai_council/shadow_dispatch.ts +13 -3
- package/src/scripts/ai_council/spend_gate.ts +18 -2
- package/src/scripts/ai_council/status_surface.ts +37 -0
- package/src/scripts/ai_council/transport_resolver.ts +15 -18
- package/src/scripts/analysis_analysts.ts +226 -0
- package/src/scripts/analysis_anchors.ts +140 -0
- package/src/scripts/analysis_and_optimize.ts +44 -0
- package/src/scripts/analysis_emit.ts +150 -0
- package/src/scripts/analysis_exchange.ts +186 -0
- package/src/scripts/analysis_gate.ts +158 -0
- package/src/scripts/analysis_inbox_final.ts +173 -0
- package/src/scripts/analysis_ledger.ts +119 -0
- package/src/scripts/analysis_pr_optimize.ts +219 -0
- package/src/scripts/analysis_pr_review.ts +240 -0
- package/src/scripts/analysis_pr_target.ts +121 -0
- package/src/scripts/analysis_prompts.ts +130 -0
- package/src/scripts/analysis_publish.ts +358 -0
- package/src/scripts/analysis_questions.ts +78 -0
- package/src/scripts/analysis_run.ts +248 -0
- package/src/scripts/analysis_run_record.ts +210 -0
- package/src/scripts/analysis_target.ts +343 -0
- package/src/scripts/analysis_validate.ts +161 -0
- package/src/scripts/anchor_eval_falsify.ts +1 -1
- package/src/scripts/arrival_report.ts +115 -0
- package/src/scripts/ask_transport.ts +284 -35
- package/src/scripts/backfill_model_tier.ts +4 -5
- package/src/scripts/before_complete_hook.ts +48 -2
- package/src/scripts/bench_hook_latency.ts +3 -3
- package/src/scripts/bench_procedure_cursor.ts +440 -0
- package/src/scripts/bootstrap.sh +3 -3
- package/src/scripts/build_exit_code_register.ts +440 -0
- package/src/scripts/build_proof.ts +23 -1
- package/src/scripts/cache_realization_report.ts +155 -14
- package/src/scripts/canary_liveness.ts +117 -0
- package/src/scripts/chat_history.ts +12 -15
- package/src/scripts/check_account_surface.ts +318 -0
- package/src/scripts/check_agent_artifact_location.ts +17 -160
- package/src/scripts/check_bundle_path_leakage.ts +6 -0
- package/src/scripts/check_ci_local_parity.ts +21 -13
- package/src/scripts/check_claims.ts +77 -2
- package/src/scripts/check_completion_review.ts +34 -1
- package/src/scripts/check_concern_admissions.ts +41 -5
- package/src/scripts/check_consumer_scope_flip.ts +1 -1
- package/src/scripts/check_context_paths.ts +2 -0
- package/src/scripts/check_council_layout.ts +9 -0
- package/src/scripts/check_credential_spelling.ts +267 -0
- package/src/scripts/check_egress_mutations.ts +239 -0
- package/src/scripts/check_enforcement_coverage.ts +16 -3
- package/src/scripts/check_estate_count.ts +16 -1
- package/src/scripts/check_finding_dispositions.ts +147 -0
- package/src/scripts/check_gate_coverage.ts +123 -21
- package/src/scripts/check_gate_reachability.ts +16 -2
- package/src/scripts/check_generator_sync.ts +46 -0
- package/src/scripts/check_hook_bundle_composition.ts +139 -1
- package/src/scripts/check_host_docs_digest.ts +142 -5
- package/src/scripts/check_kernel_edit_ratified.ts +301 -76
- package/src/scripts/check_kernel_rule_bundle.ts +14 -10
- package/src/scripts/check_knowledge_cards.ts +83 -3
- package/src/scripts/check_memory.ts +13 -3
- package/src/scripts/check_pack_size.ts +1 -1
- package/src/scripts/check_permission_deny_syntax.ts +247 -0
- package/src/scripts/check_platform_anchor.ts +243 -0
- package/src/scripts/check_proposal.ts +183 -1
- package/src/scripts/check_reach_channels.ts +5 -3
- package/src/scripts/check_references.ts +5 -2
- package/src/scripts/check_release_manifest_content.ts +33 -0
- package/src/scripts/check_release_pr_shape.ts +5 -0
- package/src/scripts/check_rule_invariants.ts +9 -1
- package/src/scripts/check_skill_body_budget.ts +343 -0
- package/src/scripts/check_skill_requires.ts +137 -1
- package/src/scripts/check_step_receipts.ts +246 -0
- package/src/scripts/check_structural_breaking.ts +7 -1
- package/src/scripts/check_suppression_hygiene.ts +8 -0
- package/src/scripts/check_test_weakening.ts +14 -0
- package/src/scripts/check_token_quality_golden.ts +5 -1
- package/src/scripts/check_update_banner.ts +50 -3
- package/src/scripts/check_verify_expectation_delta.ts +2 -1
- package/src/scripts/check_voice_lexicon.ts +531 -0
- package/src/scripts/ci_os_attribution.ts +327 -0
- package/src/scripts/ci_platform_scope.ts +69 -0
- package/src/scripts/ci_settle.ts +4 -1
- package/src/scripts/ci_status.ts +0 -1
- package/src/scripts/ci_time_to_green.ts +748 -0
- package/src/scripts/classify_merge_risk.ts +407 -19
- package/src/scripts/code_graph/sqlite_store.ts +1 -1
- package/src/scripts/compile_trigger_evals.ts +353 -0
- package/src/scripts/condense.ts +25 -31
- package/src/scripts/consumer_matrix.ts +61 -3
- package/src/scripts/council_availability_hook.ts +12 -4
- package/src/scripts/council_cli.ts +48 -38
- package/src/scripts/cross_repo_retrieve.ts +9 -72
- package/src/scripts/design_lock.ts +106 -0
- package/src/scripts/design_slop_rules.ts +30 -0
- package/src/scripts/design_sync.ts +264 -0
- package/src/scripts/design_system_import.ts +30 -13
- package/src/scripts/dispatch_economy_report.ts +46 -1
- package/src/scripts/dispatch_r2_reviewer.ts +41 -5
- package/src/scripts/egress_canary.ts +166 -0
- package/src/scripts/egress_sender_census.ts +101 -0
- package/src/scripts/external_sources_denylist.json +94 -12
- package/src/scripts/generate_catalog.ts +6 -2
- package/src/scripts/generate_owned_digest.ts +163 -0
- package/src/scripts/generate_reference_toc.ts +143 -0
- package/src/scripts/generate_subagent_floor.ts +11 -1
- package/src/scripts/handoff_context_hook.ts +34 -0
- package/src/scripts/hook_carrier_census.ts +263 -0
- package/src/scripts/hook_chunks.d.mts +12 -0
- package/src/scripts/hook_chunks.mjs +114 -0
- package/src/scripts/hook_manifest.json +1 -1
- package/src/scripts/hook_manifest.yaml +65 -42
- package/src/scripts/hooks/block_config_weakening.ts +127 -3
- package/src/scripts/hooks/block_credential_reads.ts +165 -0
- package/src/scripts/hooks/block_no_verify.ts +47 -23
- package/src/scripts/hooks/block_speaking_inbox_dir.ts +38 -7
- package/src/scripts/hooks/category_a.ts +202 -25
- package/src/scripts/hooks/concern_failure_policy.ts +6 -6
- package/src/scripts/hooks/concern_registry.ts +31 -6
- package/src/scripts/hooks/concern_registry_types.ts +11 -0
- package/src/scripts/hooks/delegation_nudge_hook.ts +105 -15
- package/src/scripts/hooks/design_pass_hook.ts +42 -10
- package/src/scripts/hooks/dispatch_hook.ts +13 -12
- package/src/scripts/hooks/egress_engine_loader.ts +125 -0
- package/src/scripts/hooks/egress_stage.ts +440 -0
- package/src/scripts/hooks/hook_stdin.ts +29 -4
- package/src/scripts/hooks/host_docs_pages.ts +194 -0
- package/src/scripts/hooks/host_docs_pages.yaml +75 -0
- package/src/scripts/hooks/host_lowering.json +1 -1
- package/src/scripts/hooks/host_lowering.yaml +22 -21
- package/src/scripts/hooks/host_rate_marker_hook.ts +73 -0
- package/src/scripts/hooks/instructions_observer_hook.ts +170 -0
- package/src/scripts/hooks/interruption_ledger_hook.ts +1 -1
- package/src/scripts/hooks/lazy_concern.ts +148 -0
- package/src/scripts/hooks/orchestration_record_hook.ts +80 -2
- package/src/scripts/hooks/payload_stub.ts +16 -6
- package/src/scripts/hooks/permission_gate.ts +7 -7
- package/src/scripts/hooks/push_settle_hook.ts +32 -3
- package/src/scripts/hooks/replay_hook.ts +43 -0
- package/src/scripts/hooks/reread_guard_hook.ts +87 -10
- package/src/scripts/hooks/rtk_wrap_hook.ts +4 -3
- package/src/scripts/hooks/rule_inject_hook.ts +8 -1
- package/src/scripts/hooks/session_eol_hook.ts +48 -1
- package/src/scripts/hooks/source_first_gate_hook.ts +6 -8
- package/src/scripts/hooks/spawn_guard_shadow_hook.ts +203 -10
- package/src/scripts/hooks/state_io.ts +2 -2
- package/src/scripts/hooks/svg_obligation.ts +75 -19
- package/src/scripts/hooks/tool_result_bytes_hook.ts +14 -5
- package/src/scripts/hooks/turn_end_gate_hook.ts +1 -1
- package/src/scripts/hooks/ui_route_nudge_hook.ts +2 -12
- package/src/scripts/hooks_doctor.ts +31 -0
- package/src/scripts/hooks_status.ts +58 -3
- package/src/scripts/inbox_source_census.ts +74 -13
- package/src/scripts/install +25 -3
- package/src/scripts/install.ts +60 -91
- package/src/scripts/interruption_report.ts +11 -1
- package/src/scripts/layer_baseline_report.ts +267 -0
- package/src/scripts/learning_sidecar.ts +1 -1
- package/src/scripts/lint_agents_layout.ts +3 -0
- package/src/scripts/lint_blocker_citations.ts +104 -0
- package/src/scripts/lint_breaking_changes_index.ts +40 -7
- package/src/scripts/lint_consolidation_lineage.ts +144 -16
- package/src/scripts/lint_consumer_internal_refs.ts +90 -42
- package/src/scripts/lint_context_spine_usage.ts +21 -0
- package/src/scripts/lint_design_antipattern_parity.ts +39 -7
- package/src/scripts/lint_evidence_artifacts.ts +31 -0
- package/src/scripts/lint_example_fences.ts +11 -2
- package/src/scripts/lint_ghostwriter_source.ts +42 -10
- package/src/scripts/lint_hook_manifest.ts +94 -0
- package/src/scripts/lint_marketplace_install_completeness.ts +4 -0
- package/src/scripts/lint_mcp_config_security.ts +9 -11
- package/src/scripts/lint_plan_risk_register.ts +28 -1
- package/src/scripts/lint_positioning.ts +4 -4
- package/src/scripts/lint_provenance.ts +1 -0
- package/src/scripts/lint_roadmap_blockers.ts +65 -4
- package/src/scripts/lint_roadmap_complexity.ts +98 -0
- package/src/scripts/lint_skill_link_reach.ts +251 -9
- package/src/scripts/lint_skill_procedures.ts +252 -0
- package/src/scripts/lint_skill_scripts_readonly.ts +12 -1
- package/src/scripts/lint_subagent_determinism.ts +14 -1
- package/src/scripts/lint_ticked_unmet_criteria.ts +300 -21
- package/src/scripts/mcp_registry_submit.sh +2 -2
- package/src/scripts/mcp_server/consumer_tool_catalog.json +4 -4
- package/src/scripts/mcp_server/suggest_skill.ts +89 -4
- package/src/scripts/mcp_server/tools.ts +2 -33
- package/src/scripts/measure_skill_ranker_baseline.ts +203 -5
- package/src/scripts/measure_turn_end_gate.ts +61 -1
- package/src/scripts/merge_clearance.ts +225 -0
- package/src/scripts/migrate_command_suggestions.ts +1 -1
- package/src/scripts/network_sources.ts +236 -0
- package/src/scripts/no_go_deny_rows.ts +225 -0
- package/src/scripts/orchestration_record.ts +15 -2
- package/src/scripts/plan_test_shards.ts +103 -0
- package/src/scripts/pr_url_reminder_hook.ts +10 -0
- package/src/scripts/print_required_checks.ts +5 -5
- package/src/scripts/probe_depth_shadow.ts +406 -0
- package/src/scripts/probe_turnaround.ts +342 -10
- package/src/scripts/ratification_subject.ts +176 -0
- package/src/scripts/rdp_gate_classify.ts +1 -0
- package/src/scripts/rdp_quality_eval.ts +1 -0
- package/src/scripts/release.ts +26 -55
- package/src/scripts/release_drill.ts +52 -23
- package/src/scripts/release_env.ts +37 -0
- package/src/scripts/release_publication.ts +11 -1
- package/src/scripts/report_consumer_gate_reach.ts +233 -0
- package/src/scripts/report_merge_gate_load.ts +295 -0
- package/src/scripts/report_project_contract.ts +123 -0
- package/src/scripts/report_reducible_classes.ts +342 -0
- package/src/scripts/report_required_checks_drift.ts +5 -3
- package/src/scripts/report_skill_host_census.ts +199 -0
- package/src/scripts/report_standing_payload_by_host.ts +7 -7
- package/src/scripts/retro.ts +758 -0
- package/src/scripts/retro_facts.ts +575 -0
- package/src/scripts/retro_queue.ts +739 -0
- package/src/scripts/retro_session_facts.ts +218 -0
- package/src/scripts/retro_sweep.ts +493 -0
- package/src/scripts/retro_triage.ts +126 -0
- package/src/scripts/roadmap_context.ts +2 -2
- package/src/scripts/roadmap_drain_queue.ts +601 -0
- package/src/scripts/run_supervise.ts +24 -2
- package/src/scripts/schemas/agent-settings.schema.json +0 -16
- package/src/scripts/schemas/command.schema.json +3 -3
- package/src/scripts/schemas/review-findings.schema.json +8 -0
- package/src/scripts/schemas/skill.schema.json +7 -6
- package/src/scripts/schemas/subagent.schema.json +33 -2
- package/src/scripts/score_skill_selection.ts +5 -2
- package/src/scripts/second_brain_retrieval.ts +1 -0
- package/src/scripts/second_brain_run.ts +1 -0
- package/src/scripts/self_repair_cli.ts +563 -87
- package/src/scripts/self_review_gate.ts +59 -4
- package/src/scripts/session_register_hook.ts +91 -4
- package/src/scripts/sessions_cli.ts +100 -5
- package/src/scripts/skill_collision_clusters.ts +1 -1
- package/src/scripts/skill_tools/score_skill_relevance.ts +31 -2
- package/src/scripts/skill_trigger_eval.ts +4 -2
- package/src/scripts/source_adapters.ts +183 -0
- package/src/scripts/step_receipt.ts +100 -0
- package/src/scripts/sync_pr_branch.ts +4 -0
- package/src/scripts/test_council_qualification.ts +1 -1
- package/src/scripts/trigger_eval_grandfather.json +3 -49
- package/src/scripts/trigger_eval_rotation.ts +31 -3
- package/src/scripts/ui_conformance_probe.ts +405 -1
- package/src/scripts/update_counts.ts +230 -11
- package/src/scripts/update_invite_hook.ts +245 -0
- package/src/scripts/update_notice_hook.ts +298 -0
- package/src/scripts/validate_frontmatter.ts +85 -0
- package/src/scripts/worker_reuse_shadow_report.ts +121 -0
- package/src/scripts/worktree_cleanup_check.ts +915 -121
- package/src/server/io/yamlIO.ts +2 -2
- package/src/server/schemas/settings.ts +37 -23
- package/src/shared/brandTokenDocument.ts +46 -0
- package/src/shared/brandTokenPaths.ts +43 -0
- package/src/shared/settingsCarveOut.ts +0 -8
- package/src/shared/skillRanking.ts +106 -5
- package/src/shared/userMd/formAdapter.ts +15 -1
- package/src/shared/userMd/schema.ts +22 -0
- package/src/templates/agent-user.md +4 -0
- package/src/templates/agent-user.yml +4 -0
- package/dist/cli-delegate/chunk-4DBG5K7M.js +0 -1123
- package/dist/cli-delegate/chunk-523HCFYO.js +0 -90
- package/dist/cli-delegate/chunk-AL3RZ22D.js +0 -74
- package/dist/cli-delegate/chunk-KB5FZ655.js +0 -208
- package/dist/cli-delegate/chunk-MDPPKQCQ.js +0 -875
- package/dist/cli-delegate/chunk-OAFSJBHH.js +0 -272
- package/dist/ui/assets/index-C3djEJah.js +0 -23
- package/src/scripts/_lib/continuation_ladder.ts +0 -335
- package/src/scripts/hooks/run_continuation_hook.ts +0 -1524
|
@@ -14,8 +14,10 @@
|
|
|
14
14
|
*
|
|
15
15
|
* Hard caps, per the roadmap's anti-loop discipline (Risk 2 — "rung 0.5
|
|
16
16
|
* becomes a hidden agent loop"):
|
|
17
|
-
* - ONE completion
|
|
18
|
-
*
|
|
17
|
+
* - ONE completion, plus at most ONE retry on the next route of the
|
|
18
|
+
* chooser's chain, gated by `MidFlightFallback`: only a failure that
|
|
19
|
+
* cannot have been generated and charged falls through (an empty free
|
|
20
|
+
* quota or an unservable model does; a server fault never does).
|
|
19
21
|
* - NO tool use, NO session, NO follow-up turn.
|
|
20
22
|
* - Honest ∅: council disabled / no member / transport failure → null
|
|
21
23
|
* (CLI exit 3), never a fabricated answer and never an escalation this
|
|
@@ -35,9 +37,21 @@
|
|
|
35
37
|
* Usage:
|
|
36
38
|
* ./scripts-run src/scripts/ask_transport "is X true in file Y?" \
|
|
37
39
|
* [--system "<system prompt>"] [--member <name>] [--format text|json] \
|
|
38
|
-
* [--
|
|
40
|
+
* [--content-class public-artifact|project-content] \
|
|
41
|
+
* [--kind classify|extract|summarise-given-text|draft-candidate|test-candidates|finding-proposal] \
|
|
42
|
+
* [--callee-file <path>]... [--no-record] [--dir <audit-dir>]
|
|
39
43
|
*
|
|
40
|
-
*
|
|
44
|
+
* `--kind` makes the call a typed hand: the system prompt is the kind's schema
|
|
45
|
+
* and nothing else (so `--system` is refused beside it), and a return that does
|
|
46
|
+
* not match the schema is a failed call (exit 3, logged), never a partial answer.
|
|
47
|
+
* The question becomes the slice's specification; each `--callee-file` adds only
|
|
48
|
+
* the signature of the function in it, and the project's own names, paths and
|
|
49
|
+
* domains are replaced by placeholders before the call.
|
|
50
|
+
* A typed hand reaches a free route only for a kind the shadow bars flipped
|
|
51
|
+
* (`ai_council/kind_flip.ts`); until then the paid route serves it.
|
|
52
|
+
*
|
|
53
|
+
* Exit codes: 0 answer produced · 2 usage error · 3 honest-∅ (no transport, or a
|
|
54
|
+
* typed return that does not parse).
|
|
41
55
|
*/
|
|
42
56
|
import * as crypto from 'node:crypto';
|
|
43
57
|
import * as fs from 'node:fs';
|
|
@@ -45,6 +59,27 @@ import * as path from 'node:path';
|
|
|
45
59
|
import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
46
60
|
|
|
47
61
|
import type { ExternalAIClient } from './ai_council/clients.js';
|
|
62
|
+
import { classifyContentClass, DEFAULT_CONTENT_CLASS, type ContentClass } from './ai_council/content_ceiling.js';
|
|
63
|
+
import { councilEgress, type CouncilEgress } from './ai_council/council_egress.js';
|
|
64
|
+
import { buildHandPayload, projectLinkingIdentifiers, type HandSlice } from './ai_council/hand_payload.js';
|
|
65
|
+
import { handSystemPrompt, parseHandReturn } from './ai_council/hand_schemas.js';
|
|
66
|
+
import { chooseRouteChain, routeCandidateFromMember } from './ai_council/route_chooser.js';
|
|
67
|
+
import {
|
|
68
|
+
classifyRouteOutcome,
|
|
69
|
+
isRouteModelLive,
|
|
70
|
+
recordRouteOutcome,
|
|
71
|
+
routeFailureClass,
|
|
72
|
+
} from './ai_council/route_liveness.js';
|
|
73
|
+
import { MidFlightFallback } from './ai_council/transport_resolver.js';
|
|
74
|
+
import { isKindFlipped } from './ai_council/kind_flip.js';
|
|
75
|
+
import {
|
|
76
|
+
EXPOSURE_LEDGER_RELPATH,
|
|
77
|
+
ExposureLedger,
|
|
78
|
+
exposureShareFn,
|
|
79
|
+
trackedFileCount,
|
|
80
|
+
type Exposure,
|
|
81
|
+
} from './ai_council/exposure_ledger.js';
|
|
82
|
+
import { isHandKind, isUnpaid, type HandKind, type RouteBilling, type VerifyVerdict } from './_lib/hand_kinds.js';
|
|
48
83
|
import { buildOrchestrationLine } from './_lib/orchestration_record.js';
|
|
49
84
|
import { DEFAULT_DIR } from './orchestration_record.js';
|
|
50
85
|
|
|
@@ -65,6 +100,14 @@ export interface AskResult {
|
|
|
65
100
|
input_tokens: number;
|
|
66
101
|
output_tokens: number;
|
|
67
102
|
latency_ms: number;
|
|
103
|
+
/** The schema-valid value of a typed return; untrusted data until the head verifies it. */
|
|
104
|
+
parsed?: unknown;
|
|
105
|
+
/** Set on every typed return: data, never an instruction, and never acted on before the head's verify. */
|
|
106
|
+
untrusted?: true;
|
|
107
|
+
/** The audit work id; the head records its verdict under it with `orchestration_record --work-id`. */
|
|
108
|
+
work_id?: string;
|
|
109
|
+
/** How the route that answered is paid for. */
|
|
110
|
+
route_billing?: RouteBilling;
|
|
68
111
|
}
|
|
69
112
|
|
|
70
113
|
export interface AskOptions {
|
|
@@ -78,6 +121,35 @@ export interface AskOptions {
|
|
|
78
121
|
/** Injected clock/id (tests). */
|
|
79
122
|
now?: () => Date;
|
|
80
123
|
id?: () => string;
|
|
124
|
+
/** The class of the prompt; `project-content` unless the caller declares a repo-owned artefact. */
|
|
125
|
+
contentClass?: ContentClass;
|
|
126
|
+
/** A typed hand call: the kind's schema is the whole system prompt and the return must match it. */
|
|
127
|
+
kind?: HandKind;
|
|
128
|
+
/** What this call shows of the project, the ledger it is counted in, and the tracked-file denominator. */
|
|
129
|
+
exposure?: { ledger: ExposureLedger; exposes: Exposure; trackedFiles: number | null };
|
|
130
|
+
/**
|
|
131
|
+
* Root of the gitignored route state (liveness). Default: the working
|
|
132
|
+
* directory, or none when `auditDir` is null; null reads and writes nothing.
|
|
133
|
+
*/
|
|
134
|
+
stateRoot?: string | null;
|
|
135
|
+
/**
|
|
136
|
+
* Whether a kind may use a free route. Default: the flip state under
|
|
137
|
+
* `stateRoot`; no state, or no `stateRoot`, is not flipped.
|
|
138
|
+
*/
|
|
139
|
+
flips?: (kind: HandKind) => boolean;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/** The model a `base_url` route member calls; null for a provider member. */
|
|
143
|
+
function routeModel(member: ExternalAIClient): string | null {
|
|
144
|
+
const m = member as unknown as Record<string, unknown>;
|
|
145
|
+
return typeof m['base_url'] === 'string' && typeof m['model'] === 'string' && m['model'] !== '' ? m['model'] : null;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
interface LineExtras {
|
|
149
|
+
hand_kind?: HandKind;
|
|
150
|
+
schema_valid?: boolean;
|
|
151
|
+
route_billing?: RouteBilling;
|
|
152
|
+
verified?: VerifyVerdict;
|
|
81
153
|
}
|
|
82
154
|
|
|
83
155
|
const DEFAULT_SYSTEM =
|
|
@@ -87,13 +159,20 @@ const DEFAULT_SYSTEM =
|
|
|
87
159
|
'what is missing. Never invent facts.';
|
|
88
160
|
|
|
89
161
|
/** Lazily import the council CLI surface so tests with injected members never load it. */
|
|
90
|
-
async function defaultMembers(): Promise<ExternalAIClient[]> {
|
|
162
|
+
async function defaultMembers(contentClass: ContentClass): Promise<ExternalAIClient[]> {
|
|
91
163
|
const mod = await import('./council_cli.js');
|
|
92
164
|
const settings = mod.load_settings();
|
|
93
|
-
return mod.build_members(settings);
|
|
165
|
+
return mod.build_members(settings, { content_class: contentClass });
|
|
94
166
|
}
|
|
95
167
|
|
|
96
|
-
function recordAskLine(
|
|
168
|
+
function recordAskLine(
|
|
169
|
+
auditDir: string,
|
|
170
|
+
result: AskResult | null,
|
|
171
|
+
member: string,
|
|
172
|
+
ts: string,
|
|
173
|
+
id: string,
|
|
174
|
+
extras: LineExtras,
|
|
175
|
+
): void {
|
|
97
176
|
const { line, errors } = buildOrchestrationLine({
|
|
98
177
|
spawn_count: 0,
|
|
99
178
|
token_delta: 0,
|
|
@@ -113,6 +192,11 @@ function recordAskLine(auditDir: string, result: AskResult | null, member: strin
|
|
|
113
192
|
model_requested: result === null || result.model === UNKNOWN_MODEL ? null : result.model,
|
|
114
193
|
model_served: result === null ? null : result.model_served,
|
|
115
194
|
origin: 'dispatch-economy-2026',
|
|
195
|
+
...(extras.hand_kind !== undefined ? { hand_kind: extras.hand_kind } : {}),
|
|
196
|
+
...(extras.schema_valid !== undefined ? { schema_valid: extras.schema_valid } : {}),
|
|
197
|
+
...(extras.route_billing !== undefined ? { route_billing: extras.route_billing } : {}),
|
|
198
|
+
...(extras.verified !== undefined ? { verified: extras.verified } : {}),
|
|
199
|
+
work_id: askWorkId(id),
|
|
116
200
|
ts,
|
|
117
201
|
id,
|
|
118
202
|
});
|
|
@@ -136,31 +220,87 @@ export async function askOnce(prompt: string, opts: AskOptions = {}): Promise<As
|
|
|
136
220
|
|
|
137
221
|
let members: ExternalAIClient[];
|
|
138
222
|
try {
|
|
139
|
-
members = opts.members ?? (await defaultMembers());
|
|
223
|
+
members = opts.members ?? (await defaultMembers(opts.contentClass ?? DEFAULT_CONTENT_CLASS));
|
|
140
224
|
} catch {
|
|
141
225
|
return _finish(null, 'none', opts); // disabled / unreadable config → ∅
|
|
142
226
|
}
|
|
143
|
-
const
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
227
|
+
const stateRoot = opts.stateRoot !== undefined ? opts.stateRoot : opts.auditDir === null ? null : process.cwd();
|
|
228
|
+
// `--member` narrows the candidates; it never bypasses the chooser's checks.
|
|
229
|
+
const routed = members.map((m) => {
|
|
230
|
+
const route = routeCandidateFromMember(m);
|
|
231
|
+
const model = routeModel(m);
|
|
232
|
+
const retired = stateRoot !== null && model !== null && !isRouteModelLive(stateRoot, route.name, model);
|
|
233
|
+
return { member: m, route: retired ? { ...route, live: false } : route };
|
|
234
|
+
});
|
|
235
|
+
const pool = opts.member !== undefined ? routed.filter((r) => r.route.name === opts.member) : routed;
|
|
236
|
+
const flipped = opts.flips ?? ((k: HandKind): boolean => stateRoot !== null && isKindFlipped(stateRoot, k));
|
|
237
|
+
const { chain } = chooseRouteChain({
|
|
238
|
+
kind: opts.kind ?? null,
|
|
239
|
+
contentClass: opts.contentClass ?? DEFAULT_CONTENT_CLASS,
|
|
240
|
+
...(opts.kind !== undefined ? { unpaidAllowed: flipped(opts.kind) } : {}),
|
|
241
|
+
candidates: pool.map((r) => r.route),
|
|
242
|
+
...(opts.exposure !== undefined
|
|
243
|
+
? { exposureShare: exposureShareFn(opts.exposure.ledger, opts.exposure.exposes, opts.exposure.trackedFiles) }
|
|
244
|
+
: {}),
|
|
245
|
+
});
|
|
246
|
+
const system = opts.kind !== undefined ? handSystemPrompt(opts.kind) : (opts.systemPrompt ?? DEFAULT_SYSTEM);
|
|
247
|
+
// One retry down the chain, gated like the council's cli→api fallback: a
|
|
248
|
+
// failure that may have been generated and charged never falls through.
|
|
249
|
+
const ledger = new MidFlightFallback();
|
|
250
|
+
let last: { provider: string; billing: RouteBilling } | null = null;
|
|
251
|
+
let failures = 0;
|
|
252
|
+
for (const route of chain) {
|
|
253
|
+
const pick = pool.find((r) => r.route === route)?.member;
|
|
254
|
+
if (pick === undefined) continue;
|
|
255
|
+
const outcome = await _callRoute(pick, route.name, system, trimmed, opts, stateRoot);
|
|
256
|
+
if (outcome.done) return _finish(outcome.result, route.name, opts, outcome.schemaValid, route.billing);
|
|
257
|
+
last = { provider: route.name, billing: route.billing };
|
|
258
|
+
if (++failures > 1) break;
|
|
259
|
+
// An empty quota on a free route is that route's limit, not a cap the user set.
|
|
260
|
+
const failure = routeFailureClass(classifyRouteOutcome(outcome.error));
|
|
261
|
+
if (ledger.attempt(route.name, failure, { apiOnQuota: isUnpaid(route.billing) }) !== 'api') break;
|
|
151
262
|
}
|
|
152
|
-
|
|
263
|
+
return last === null ? _finish(null, opts.member ?? 'none', opts) : _finish(null, last.provider, opts, undefined, last.billing);
|
|
264
|
+
}
|
|
153
265
|
|
|
266
|
+
type RouteCallOutcome =
|
|
267
|
+
| { readonly done: true; readonly result: AskResult | null; readonly schemaValid: boolean | undefined }
|
|
268
|
+
| { readonly done: false; readonly error: string };
|
|
269
|
+
|
|
270
|
+
/**
|
|
271
|
+
* One completion on one route. `done: false` only for a transport failure the
|
|
272
|
+
* route reported; an empty or unparseable answer was generated, so it ends the
|
|
273
|
+
* ask rather than being paid for again elsewhere.
|
|
274
|
+
*/
|
|
275
|
+
async function _callRoute(
|
|
276
|
+
pick: ExternalAIClient,
|
|
277
|
+
provider: string,
|
|
278
|
+
system: string,
|
|
279
|
+
prompt: string,
|
|
280
|
+
opts: AskOptions,
|
|
281
|
+
stateRoot: string | null,
|
|
282
|
+
): Promise<RouteCallOutcome> {
|
|
283
|
+
opts.exposure?.ledger.record(provider, opts.exposure.exposes);
|
|
284
|
+
const model = routeModel(pick);
|
|
154
285
|
try {
|
|
155
|
-
const response = pick.ask(
|
|
286
|
+
const response = pick.ask(system, prompt);
|
|
156
287
|
const r = response instanceof Promise ? await response : response;
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
}
|
|
288
|
+
const error = r === null || r === undefined ? 'no response' : r.error;
|
|
289
|
+
if (stateRoot !== null && model !== null) recordRouteOutcome(stateRoot, provider, model, classifyRouteOutcome(error));
|
|
290
|
+
if (r === null || r === undefined) return { done: true, result: null, schemaValid: undefined };
|
|
291
|
+
if (error !== null && error !== undefined && error !== '') return { done: false, error };
|
|
160
292
|
const text = (r.text ?? '').trim();
|
|
161
|
-
if (!text) return
|
|
162
|
-
|
|
163
|
-
|
|
293
|
+
if (!text) return { done: true, result: null, schemaValid: undefined };
|
|
294
|
+
let parsed: unknown;
|
|
295
|
+
if (opts.kind !== undefined) {
|
|
296
|
+
const p = parseHandReturn(opts.kind, text);
|
|
297
|
+
if (!p.ok) return { done: true, result: null, schemaValid: false };
|
|
298
|
+
parsed = p.value;
|
|
299
|
+
}
|
|
300
|
+
return {
|
|
301
|
+
done: true,
|
|
302
|
+
schemaValid: opts.kind !== undefined ? true : undefined,
|
|
303
|
+
result: {
|
|
164
304
|
answer: text,
|
|
165
305
|
member: provider,
|
|
166
306
|
model: r.model ?? UNKNOWN_MODEL,
|
|
@@ -168,32 +308,85 @@ export async function askOnce(prompt: string, opts: AskOptions = {}): Promise<As
|
|
|
168
308
|
input_tokens: r.input_tokens ?? 0,
|
|
169
309
|
output_tokens: r.output_tokens ?? 0,
|
|
170
310
|
latency_ms: r.latency_ms ?? 0,
|
|
311
|
+
...(opts.kind !== undefined ? { parsed, untrusted: true as const } : {}),
|
|
171
312
|
},
|
|
172
|
-
|
|
173
|
-
opts,
|
|
174
|
-
);
|
|
313
|
+
};
|
|
175
314
|
} catch {
|
|
176
|
-
return
|
|
315
|
+
return { done: true, result: null, schemaValid: undefined }; // a thrown call is never retried
|
|
177
316
|
}
|
|
178
317
|
}
|
|
179
318
|
|
|
180
|
-
function
|
|
319
|
+
function askWorkId(id: string): string {
|
|
320
|
+
return `ask-${id}`;
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
/**
|
|
324
|
+
* A typed return is recorded `skipped` until the head records its own verdict
|
|
325
|
+
* under the same work id; one that never parsed has already failed the check.
|
|
326
|
+
*/
|
|
327
|
+
function _finish(
|
|
328
|
+
result: AskResult | null,
|
|
329
|
+
member: string,
|
|
330
|
+
opts: AskOptions,
|
|
331
|
+
schemaValid?: boolean,
|
|
332
|
+
billing?: RouteBilling,
|
|
333
|
+
): AskResult | null {
|
|
334
|
+
const id = opts.id ? opts.id() : crypto.randomUUID();
|
|
181
335
|
const auditDir = opts.auditDir === undefined ? path.join(process.cwd(), DEFAULT_DIR) : opts.auditDir;
|
|
182
336
|
if (auditDir !== null) {
|
|
183
337
|
const ts = (opts.now ? opts.now() : new Date()).toISOString();
|
|
184
|
-
const
|
|
185
|
-
|
|
338
|
+
const verified: VerifyVerdict | undefined =
|
|
339
|
+
opts.kind === undefined || billing === undefined ? undefined : schemaValid === true ? 'skipped' : 'fail';
|
|
340
|
+
recordAskLine(auditDir, result, member, ts, id, {
|
|
341
|
+
...(opts.kind !== undefined ? { hand_kind: opts.kind } : {}),
|
|
342
|
+
...(schemaValid !== undefined ? { schema_valid: schemaValid } : {}),
|
|
343
|
+
...(billing !== undefined ? { route_billing: billing } : {}),
|
|
344
|
+
...(verified !== undefined ? { verified } : {}),
|
|
345
|
+
});
|
|
186
346
|
}
|
|
187
|
-
return result
|
|
347
|
+
return result === null
|
|
348
|
+
? null
|
|
349
|
+
: { ...result, work_id: askWorkId(id), ...(billing !== undefined ? { route_billing: billing } : {}) };
|
|
188
350
|
}
|
|
189
351
|
|
|
190
|
-
export
|
|
352
|
+
export interface AskHandOptions extends Omit<AskOptions, 'kind' | 'systemPrompt'> {
|
|
353
|
+
/** The run's placeholder scope; default: the council egress state. */
|
|
354
|
+
egress?: CouncilEgress;
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
/**
|
|
358
|
+
* A typed hand call over a slice: the payload is built from the specification
|
|
359
|
+
* and callee signatures only, with linking identifiers replaced, and the system
|
|
360
|
+
* prompt is the kind's schema.
|
|
361
|
+
*/
|
|
362
|
+
export async function askHand(slice: HandSlice, opts: AskHandOptions = {}): Promise<AskResult | null> {
|
|
363
|
+
const { egress, ...rest } = opts;
|
|
364
|
+
const payload = buildHandPayload(slice, egress ?? councilEgress());
|
|
365
|
+
return askOnce(payload.user, { ...rest, kind: slice.kind });
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
/** The declared name of a callee, for the ledger's symbol count. */
|
|
369
|
+
function calleeName(source: string): string[] {
|
|
370
|
+
const m = /\b(?:function|def|class)\s+([A-Za-z_$][\w$]*)|\b(?:const|let|var)\s+([A-Za-z_$][\w$]*)\s*=/.exec(source);
|
|
371
|
+
const name = m?.[1] ?? m?.[2];
|
|
372
|
+
return name === undefined ? [] : [name];
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
/** Test seam: inject members instead of reading the council configuration. */
|
|
376
|
+
export interface MainDeps {
|
|
377
|
+
members?: ExternalAIClient[];
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
export async function main(argv: readonly string[], deps: MainDeps = {}): Promise<number> {
|
|
191
381
|
let prompt = '';
|
|
192
382
|
let system: string | undefined;
|
|
193
383
|
let member: string | undefined;
|
|
194
384
|
let format: 'text' | 'json' = 'text';
|
|
195
385
|
let record = true;
|
|
196
386
|
let dir: string | undefined;
|
|
387
|
+
let contentClass: ContentClass = DEFAULT_CONTENT_CLASS;
|
|
388
|
+
let kindRaw: string | undefined;
|
|
389
|
+
const calleeFiles: string[] = [];
|
|
197
390
|
for (let i = 0; i < argv.length; i++) {
|
|
198
391
|
const a = argv[i] ?? '';
|
|
199
392
|
if (a === '--system') system = argv[++i];
|
|
@@ -201,25 +394,81 @@ export async function main(argv: readonly string[]): Promise<number> {
|
|
|
201
394
|
else if (a === '--format') format = argv[++i] === 'json' ? 'json' : 'text';
|
|
202
395
|
else if (a === '--no-record') record = false;
|
|
203
396
|
else if (a === '--dir') dir = argv[++i];
|
|
397
|
+
else if (a === '--content-class') contentClass = classifyContentClass(argv[++i]);
|
|
398
|
+
else if (a === '--kind') kindRaw = argv[++i] ?? '';
|
|
399
|
+
else if (a === '--callee-file') calleeFiles.push(argv[++i] ?? '');
|
|
204
400
|
else if (!a.startsWith('--')) prompt = prompt ? `${prompt} ${a}` : a;
|
|
205
401
|
}
|
|
206
402
|
if (!prompt.trim()) {
|
|
207
403
|
process.stderr.write('ask_transport: a question argument is required\n');
|
|
208
404
|
return 2;
|
|
209
405
|
}
|
|
406
|
+
if (kindRaw !== undefined && !isHandKind(kindRaw)) {
|
|
407
|
+
process.stderr.write(`ask_transport: --kind must be one of the hand kinds; '${kindRaw}' is not one (head-only work never reaches a hand)\n`);
|
|
408
|
+
return 2;
|
|
409
|
+
}
|
|
410
|
+
if (kindRaw !== undefined && system !== undefined) {
|
|
411
|
+
process.stderr.write('ask_transport: --system cannot be combined with --kind; a hand sees only its kind schema\n');
|
|
412
|
+
return 2;
|
|
413
|
+
}
|
|
414
|
+
if (calleeFiles.length > 0 && kindRaw === undefined) {
|
|
415
|
+
process.stderr.write('ask_transport: --callee-file needs --kind; only a typed hand gets a slice\n');
|
|
416
|
+
return 2;
|
|
417
|
+
}
|
|
210
418
|
const opts: AskOptions = {
|
|
211
419
|
...(system !== undefined ? { systemPrompt: system } : {}),
|
|
212
420
|
...(member !== undefined ? { member } : {}),
|
|
213
421
|
auditDir: record ? (dir ?? path.join(process.cwd(), DEFAULT_DIR)) : null,
|
|
422
|
+
contentClass,
|
|
423
|
+
...(kindRaw !== undefined && isHandKind(kindRaw) ? { kind: kindRaw } : {}),
|
|
424
|
+
...(deps.members !== undefined ? { members: deps.members } : {}),
|
|
214
425
|
};
|
|
215
|
-
|
|
426
|
+
let result: AskResult | null;
|
|
427
|
+
if (opts.kind !== undefined) {
|
|
428
|
+
let callees: string[];
|
|
429
|
+
try {
|
|
430
|
+
callees = calleeFiles.map((f) => fs.readFileSync(f, 'utf8'));
|
|
431
|
+
} catch {
|
|
432
|
+
process.stderr.write('ask_transport: a --callee-file could not be read\n');
|
|
433
|
+
return 2;
|
|
434
|
+
}
|
|
435
|
+
const { kind, systemPrompt: _unused, ...rest } = opts;
|
|
436
|
+
const root = process.cwd();
|
|
437
|
+
const exposes: Exposure = {
|
|
438
|
+
files: calleeFiles.map((f) => path.relative(root, path.resolve(f))),
|
|
439
|
+
symbols: callees.flatMap((c) => calleeName(c)),
|
|
440
|
+
};
|
|
441
|
+
result = await askHand(
|
|
442
|
+
{ kind, spec: prompt, callees, linking: projectLinkingIdentifiers(root) },
|
|
443
|
+
{
|
|
444
|
+
...rest,
|
|
445
|
+
exposure: {
|
|
446
|
+
ledger: ExposureLedger.load(path.join(root, EXPOSURE_LEDGER_RELPATH)),
|
|
447
|
+
exposes,
|
|
448
|
+
trackedFiles: trackedFileCount(root),
|
|
449
|
+
},
|
|
450
|
+
},
|
|
451
|
+
);
|
|
452
|
+
} else {
|
|
453
|
+
result = await askOnce(prompt, opts);
|
|
454
|
+
}
|
|
216
455
|
if (result === null) {
|
|
217
|
-
process.stderr.write(
|
|
456
|
+
process.stderr.write(
|
|
457
|
+
'ask_transport: ∅ — no transport resolved, the single completion failed, or a typed return did not match its schema (no retry by design)\n',
|
|
458
|
+
);
|
|
218
459
|
return 3;
|
|
219
460
|
}
|
|
220
461
|
process.stdout.write(
|
|
221
462
|
format === 'json' ? JSON.stringify(result, null, 2) + '\n' : result.answer + '\n',
|
|
222
463
|
);
|
|
464
|
+
if (result.untrusted === true) {
|
|
465
|
+
process.stderr.write(
|
|
466
|
+
'ask_transport: the return above is untrusted data — verify it before acting on it, then record the verdict: ' +
|
|
467
|
+
`./scripts-run src/scripts/orchestration_record --work-id ${result.work_id ?? ''} --route-taken ask ` +
|
|
468
|
+
`--spawn-count 0 --token-delta 0 --phase verify --route-billing ${result.route_billing ?? ''} ` +
|
|
469
|
+
'--verified pass|fail --verify-tokens <n>\n',
|
|
470
|
+
);
|
|
471
|
+
}
|
|
223
472
|
return 0;
|
|
224
473
|
}
|
|
225
474
|
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
* - Untagged → classify fresh from the task→tier heuristic.
|
|
20
20
|
*
|
|
21
21
|
* A small explicit `_LITE` set demotes obviously-trivial mechanical skills
|
|
22
|
-
* to the cheapest band; `_CONTEXT_LARGE` adds the orthogonal `
|
|
22
|
+
* to the cheapest band; `_CONTEXT_LARGE` adds the orthogonal `context_window: large`
|
|
23
23
|
* modifier to genuinely long-context skills. Writes BOTH the source and its
|
|
24
24
|
* `dist/agent-src` copy (frontmatter stays byte-identical).
|
|
25
25
|
*
|
|
@@ -94,7 +94,7 @@ const _CONTEXT_LARGE = new Set<string>([
|
|
|
94
94
|
// re.MULTILINE patterns. `^...$` anchor per-line.
|
|
95
95
|
const _RM_RE = /^recommended_model:[ \t]*"?[a-z0-9-]+"?[ \t]*$/m;
|
|
96
96
|
const _MT_RE = /^model_tier:/m;
|
|
97
|
-
const _CTX_RE = /^
|
|
97
|
+
const _CTX_RE = /^context_window:/m;
|
|
98
98
|
|
|
99
99
|
type Fm = Record<string, unknown> | null;
|
|
100
100
|
|
|
@@ -152,8 +152,7 @@ function _apply(p: string, tier: string, want_context: boolean): boolean {
|
|
|
152
152
|
changed = true;
|
|
153
153
|
}
|
|
154
154
|
if (want_context && !_CTX_RE.test(fm)) {
|
|
155
|
-
|
|
156
|
-
fm = _subOnce(fm, /^model_tier:.*$/m, (match) => `${match}\ncontext: large`);
|
|
155
|
+
fm = _subOnce(fm, /^model_tier:.*$/m, (match) => `${match}\ncontext_window: large`);
|
|
157
156
|
changed = true;
|
|
158
157
|
}
|
|
159
158
|
if (changed) {
|
|
@@ -221,7 +220,7 @@ export function run(apply: boolean): number {
|
|
|
221
220
|
total += v;
|
|
222
221
|
}
|
|
223
222
|
process.stdout.write(
|
|
224
|
-
`
|
|
223
|
+
` context_window:large on ${ctx} skills · ${verb} ${touched} newly · total ${total}\n`,
|
|
225
224
|
);
|
|
226
225
|
return 0;
|
|
227
226
|
}
|
|
@@ -67,6 +67,7 @@ import {
|
|
|
67
67
|
import { readHookStdin } from "./hooks/hook_stdin.js";
|
|
68
68
|
import { hookSectionValue } from "./_lib/hook_settings.js";
|
|
69
69
|
import { isVerificationCommand, mightBeVerification } from "./_lib/verification_command.js";
|
|
70
|
+
import { observeAssetRender, type AssetRenderGap, type AssetRenderRecord } from "./_lib/asset_render_record.js";
|
|
70
71
|
import {
|
|
71
72
|
advisoryLine,
|
|
72
73
|
runTouchedFileQuality,
|
|
@@ -187,6 +188,7 @@ function _empty_state(): StateDict {
|
|
|
187
188
|
// a reader must never have to distinguish "no runs yet" from "key absent".
|
|
188
189
|
verification_runs: [],
|
|
189
190
|
edits_this_turn: 0,
|
|
191
|
+
asset_renders: [],
|
|
190
192
|
// NOTE — `quality_runs` and `quality_files_source` are deliberately ABSENT
|
|
191
193
|
// here, against the convention `verification_runs` above follows.
|
|
192
194
|
//
|
|
@@ -696,6 +698,9 @@ function _reset_turn(state: StateDict, session_id: string): StateDict {
|
|
|
696
698
|
// turn's edits, which is the freshness argument `verify-before-complete` makes.
|
|
697
699
|
state["verification_runs"] = [];
|
|
698
700
|
state["edits_this_turn"] = 0;
|
|
701
|
+
// Turn-scoped like its neighbours: a render from an earlier turn is not one
|
|
702
|
+
// this turn's hook saw, and the SVG obligation asks for exactly that.
|
|
703
|
+
state["asset_renders"] = [];
|
|
699
704
|
// TURN-scoped for the same reason as its neighbour: a quality verdict from
|
|
700
705
|
// the previous turn describes files this turn may already have changed, and a
|
|
701
706
|
// stale PASS is the direction that misleads. DELETED rather than emptied, so
|
|
@@ -709,6 +714,28 @@ function _reset_turn(state: StateDict, session_id: string): StateDict {
|
|
|
709
714
|
return state;
|
|
710
715
|
}
|
|
711
716
|
|
|
717
|
+
function _observe_asset_render(
|
|
718
|
+
consumer_root: string,
|
|
719
|
+
envelope: StateDict,
|
|
720
|
+
): AssetRenderRecord | AssetRenderGap | null {
|
|
721
|
+
const raw = envelope["payload"];
|
|
722
|
+
if (typeof raw !== "object" || raw === null || Array.isArray(raw)) return null;
|
|
723
|
+
const pl = raw as StateDict;
|
|
724
|
+
const [, cmd] = _extract_command(pl);
|
|
725
|
+
if (!cmd) return null;
|
|
726
|
+
const cwd = pl["cwd"] ?? envelope["cwd"];
|
|
727
|
+
try {
|
|
728
|
+
return observeAssetRender(
|
|
729
|
+
consumer_root,
|
|
730
|
+
cmd,
|
|
731
|
+
_extract_exit_reading(pl, _is_failure_event(pl, envelope)).code,
|
|
732
|
+
typeof cwd === "string" && path.isAbsolute(cwd) ? cwd : consumer_root,
|
|
733
|
+
);
|
|
734
|
+
} catch {
|
|
735
|
+
return null;
|
|
736
|
+
}
|
|
737
|
+
}
|
|
738
|
+
|
|
712
739
|
function _asInt(v: unknown): number {
|
|
713
740
|
if (!v) {
|
|
714
741
|
return 0;
|
|
@@ -732,6 +759,7 @@ function _update(
|
|
|
732
759
|
event: string,
|
|
733
760
|
envelope: StateDict,
|
|
734
761
|
quality: { runs: QualityRun[]; source: string } | null = null,
|
|
762
|
+
assetRender: AssetRenderRecord | AssetRenderGap | null = null,
|
|
735
763
|
): StateDict {
|
|
736
764
|
const session_id = (envelope["session_id"] || state["session_id"] || "") as string;
|
|
737
765
|
if (session_id && session_id !== state["session_id"]) {
|
|
@@ -900,6 +928,12 @@ function _update(
|
|
|
900
928
|
// of its own red-then-green pair.
|
|
901
929
|
state["verification_runs"] = _cap_runs(runs);
|
|
902
930
|
}
|
|
931
|
+
// The finished asset render, observed rather than inferred — read by the
|
|
932
|
+
// turn-end gate's SVG obligation.
|
|
933
|
+
if (assetRender !== null) {
|
|
934
|
+
const renders = Array.isArray(state["asset_renders"]) ? (state["asset_renders"] as unknown[]) : [];
|
|
935
|
+
state["asset_renders"] = [...renders, assetRender].slice(-MAX_VERIFICATION_RUNS_PER_TURN);
|
|
936
|
+
}
|
|
903
937
|
} else if (event === "stop") {
|
|
904
938
|
state["last_stop_at"] = _now();
|
|
905
939
|
if (quality !== null) {
|
|
@@ -975,6 +1009,9 @@ export function run(
|
|
|
975
1009
|
const quality_mode = event === "stop" ? readTouchedFileQualityMode(consumer_root) : "off";
|
|
976
1010
|
const quality =
|
|
977
1011
|
quality_mode === "off" ? null : collectTouchedFileQuality(consumer_root, session_id);
|
|
1012
|
+
// Hashed BEFORE the lock for the same reason as the quality pass: file reads
|
|
1013
|
+
// stay out of the critical section.
|
|
1014
|
+
const assetRender = event === "post_tool_use" ? _observe_asset_render(consumer_root, envelope) : null;
|
|
978
1015
|
|
|
979
1016
|
// LOAD → UPDATE → PUBLISH under ONE lock, not three separate steps.
|
|
980
1017
|
//
|
|
@@ -1006,7 +1043,7 @@ export function run(
|
|
|
1006
1043
|
// treats a missing counter as 0 and the `=== true` guards treat a missing
|
|
1007
1044
|
// flag as false, so every assertion would still pass while `schema_version`
|
|
1008
1045
|
// and an explicit `ci_last: null` vanished from a freshly created file.
|
|
1009
|
-
state = _update({ ..._empty_state(), ...loaded } as StateDict, event, envelope, quality);
|
|
1046
|
+
state = _update({ ..._empty_state(), ...loaded } as StateDict, event, envelope, quality, assetRender);
|
|
1010
1047
|
return state;
|
|
1011
1048
|
});
|
|
1012
1049
|
if (outcome === "failed") {
|
|
@@ -1115,6 +1152,8 @@ export function main(argv?: string[]): number {
|
|
|
1115
1152
|
export interface TurnRunState {
|
|
1116
1153
|
readonly runs: readonly unknown[];
|
|
1117
1154
|
readonly edits_this_turn: number;
|
|
1155
|
+
/** Absent when the recorder that wrote the file predates the field. */
|
|
1156
|
+
readonly asset_renders?: readonly unknown[];
|
|
1118
1157
|
}
|
|
1119
1158
|
|
|
1120
1159
|
/**
|
|
@@ -1153,7 +1192,14 @@ export function readTurnRunState(
|
|
|
1153
1192
|
const edits = state['edits_this_turn'];
|
|
1154
1193
|
if (!Array.isArray(runs)) return null;
|
|
1155
1194
|
if (typeof edits !== 'number' || !Number.isFinite(edits) || edits < 1) return null;
|
|
1156
|
-
|
|
1195
|
+
const renders = state['asset_renders'];
|
|
1196
|
+
return {
|
|
1197
|
+
runs: runs as readonly unknown[],
|
|
1198
|
+
edits_this_turn: edits,
|
|
1199
|
+
// Absent rather than empty when the writer predates the field, so
|
|
1200
|
+
// the SVG obligation falls back instead of reading "no render".
|
|
1201
|
+
...(Array.isArray(renders) ? { asset_renders: renders as readonly unknown[] } : {}),
|
|
1202
|
+
};
|
|
1157
1203
|
} catch {
|
|
1158
1204
|
// Absent, unreadable or malformed — the recorder said nothing, so the
|
|
1159
1205
|
// transcript answers. Never a refusal of its own.
|
|
@@ -103,7 +103,7 @@ const MANIFEST_PATH = path.join(REPO_ROOT, 'src', 'scripts', 'hook_manifest.yaml
|
|
|
103
103
|
const BUDGET_PATH = path.join(REPO_ROOT, 'src', 'config', 'hook-latency-budget.json');
|
|
104
104
|
const RESULTS_PATH = path.join(REPO_ROOT, 'docs', 'hook-latency.json');
|
|
105
105
|
|
|
106
|
-
const EVENTS: readonly string[] = [
|
|
106
|
+
export const EVENTS: readonly string[] = [
|
|
107
107
|
'pre_tool_use',
|
|
108
108
|
'post_tool_use',
|
|
109
109
|
'user_prompt_submit',
|
|
@@ -113,7 +113,7 @@ const EVENTS: readonly string[] = [
|
|
|
113
113
|
];
|
|
114
114
|
|
|
115
115
|
/** snake_case hook event → the platform-native name hooks.json passes. */
|
|
116
|
-
const NATIVE_EVENT: Readonly<Record<string, string>> = {
|
|
116
|
+
export const NATIVE_EVENT: Readonly<Record<string, string>> = {
|
|
117
117
|
pre_tool_use: 'PreToolUse',
|
|
118
118
|
post_tool_use: 'PostToolUse',
|
|
119
119
|
user_prompt_submit: 'UserPromptSubmit',
|
|
@@ -199,7 +199,7 @@ function syntheticPayload(event: string, workspace: string, tool?: ToolShape): s
|
|
|
199
199
|
* pays and concern state stays out of the repo.
|
|
200
200
|
*/
|
|
201
201
|
let _matrixCache: Record<string, string> | null = null;
|
|
202
|
-
function hooksJsonCommand(event: string): string {
|
|
202
|
+
export function hooksJsonCommand(event: string): string {
|
|
203
203
|
_matrixCache ??= build_claude_hook_matrix(MANIFEST_PATH);
|
|
204
204
|
const native = NATIVE_EVENT[event] ?? event;
|
|
205
205
|
const cmd = _matrixCache[native];
|