@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
|
@@ -3,10 +3,12 @@
|
|
|
3
3
|
* Spawn-guard — SHADOW ONLY (road-to-subagent-lifecycle-integrity Phase 3
|
|
4
4
|
* Step 1, activated per `docs/contracts/concern-activation-policy.md`).
|
|
5
5
|
*
|
|
6
|
-
* What it does: on every `Agent` / `Task`
|
|
7
|
-
* set the Phase-1 ledger maintains, and append one
|
|
8
|
-
* recording what a guard WOULD have done at several
|
|
9
|
-
*
|
|
6
|
+
* What it does: on every `Agent` / `Task` call and every resume (`SendMessage`),
|
|
7
|
+
* read the open-dispatch set the Phase-1 ledger maintains, and append one
|
|
8
|
+
* `spawn_guard_shadow` line recording what a guard WOULD have done at several
|
|
9
|
+
* candidate thresholds; a spawn also records whether a warm worker would have
|
|
10
|
+
* been re-tasked instead (`reuse`). It emits nothing to the model and it never
|
|
11
|
+
* blocks. Exit is always 0.
|
|
10
12
|
*
|
|
11
13
|
* ── Why shadow and not warn ───────────────────────────────────────────────
|
|
12
14
|
*
|
|
@@ -46,14 +48,26 @@
|
|
|
46
48
|
* rides along as context and becomes a real measurement only when Phase 0
|
|
47
49
|
* Step 4 establishes whether `agent_id` reaches a PreToolUse payload.
|
|
48
50
|
*
|
|
49
|
-
* PRIVACY BY CONSTRUCTION: counts
|
|
50
|
-
*
|
|
51
|
+
* PRIVACY BY CONSTRUCTION: counts, candidate verdicts, and a reuse verdict whose
|
|
52
|
+
* only free string is a worker's durable name from the register. A name read
|
|
53
|
+
* from the tool input reaches disk only as a session-bound digest. No prompt, no
|
|
54
|
+
* message, no recipient, no agent id.
|
|
51
55
|
*/
|
|
52
56
|
import * as fs from 'node:fs';
|
|
53
57
|
import * as path from 'node:path';
|
|
54
58
|
import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
55
59
|
|
|
56
|
-
import {
|
|
60
|
+
import { probeHostCapabilities } from '../_lib/host_capability.js';
|
|
61
|
+
import { recentHostMarker } from '../_lib/quota_parked.js';
|
|
62
|
+
import { shadowReuseVerdict, type ReuseContext, type WorkerState } from '../_lib/worker_reuse.js';
|
|
63
|
+
import {
|
|
64
|
+
LEDGER_DIR,
|
|
65
|
+
appendLedgerLine,
|
|
66
|
+
openRecordStats,
|
|
67
|
+
readOpenRecords,
|
|
68
|
+
refFor,
|
|
69
|
+
resolveConsumerRoot,
|
|
70
|
+
} from './subagent_ledger_hook.js';
|
|
57
71
|
import { readHookStdin } from './hook_stdin.js';
|
|
58
72
|
import { EXIT_ALLOW } from './exit_codes.js';
|
|
59
73
|
|
|
@@ -67,6 +81,154 @@ function isObject(v: unknown): v is JsonObject {
|
|
|
67
81
|
/** The two subagent-dispatch tool names this repo has observed across hosts. */
|
|
68
82
|
export const DISPATCH_TOOL_NAMES: ReadonlySet<string> = new Set(['Agent', 'Task']);
|
|
69
83
|
|
|
84
|
+
/**
|
|
85
|
+
* The tool that re-tasks a finished worker — and also messages a running one,
|
|
86
|
+
* a teammate, or the lead. The host's concurrency cap checks new spawns only
|
|
87
|
+
* and admits a resume past it, so a guard that counted spawns only would
|
|
88
|
+
* undercount exactly the runs the host does not bound. Only a send the ledger
|
|
89
|
+
* can place on a finished leg is called a resume; see {@link classifySend}.
|
|
90
|
+
*/
|
|
91
|
+
export const RESUME_TOOL_NAMES: ReadonlySet<string> = new Set(['SendMessage']);
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* `resume` — the recipient hashes to a ledger ref that is not open and whose
|
|
95
|
+
* stop this same session recorded: a finished leg of this session is
|
|
96
|
+
* re-entered, which starts a run.
|
|
97
|
+
* `message_running` — the ref is open: the message starts no run.
|
|
98
|
+
* `message_or_resume` — the ledger cannot place the recipient in this session
|
|
99
|
+
* (a name, a teammate, the lead, another session's leg, no session id, a stop
|
|
100
|
+
* older than the scan window). Recorded, never called a resume.
|
|
101
|
+
*
|
|
102
|
+
* The verdict describes the attempted send at `pre_tool_use`; whether the host
|
|
103
|
+
* then accepts it is not visible here.
|
|
104
|
+
*/
|
|
105
|
+
export type SendKind = 'resume' | 'message_running' | 'message_or_resume';
|
|
106
|
+
|
|
107
|
+
/** Bytes read from the end of each monthly ledger file when looking for a stop. */
|
|
108
|
+
export const STOP_SCAN_BYTES = 1024 * 1024;
|
|
109
|
+
|
|
110
|
+
function tailOf(file: string): string {
|
|
111
|
+
let fd: number;
|
|
112
|
+
try {
|
|
113
|
+
fd = fs.openSync(file, 'r');
|
|
114
|
+
} catch {
|
|
115
|
+
return '';
|
|
116
|
+
}
|
|
117
|
+
try {
|
|
118
|
+
const size = fs.fstatSync(fd).size;
|
|
119
|
+
const length = Math.min(size, STOP_SCAN_BYTES);
|
|
120
|
+
const buf = Buffer.alloc(length);
|
|
121
|
+
fs.readSync(fd, buf, 0, length, size - length);
|
|
122
|
+
return buf.toString('utf8');
|
|
123
|
+
} finally {
|
|
124
|
+
fs.closeSync(fd);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
function stoppedInSession(root: string, ref: string, sessionId: string, now: Date): boolean {
|
|
129
|
+
const prev = new Date(Date.UTC(now.getUTCFullYear(), now.getUTCMonth() - 1, 1));
|
|
130
|
+
for (const month of [now.toISOString().slice(0, 7), prev.toISOString().slice(0, 7)]) {
|
|
131
|
+
for (const line of tailOf(path.join(root, LEDGER_DIR, `${month}.jsonl`)).split('\n')) {
|
|
132
|
+
if (!line.includes(ref)) continue;
|
|
133
|
+
try {
|
|
134
|
+
const rec = JSON.parse(line) as Record<string, unknown>;
|
|
135
|
+
if (rec['event'] === 'subagent_stop' && rec['ref'] === ref && rec['session_id'] === sessionId) {
|
|
136
|
+
return true;
|
|
137
|
+
}
|
|
138
|
+
} catch {
|
|
139
|
+
// The first line of a tail is usually cut; a torn line is no evidence.
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return false;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* The ref a named spawn of this session left in the register, read from the
|
|
148
|
+
* same bounded tails as a stop; null when this session named no such worker.
|
|
149
|
+
*/
|
|
150
|
+
/** Longer names are neither recorded nor resolved: a name is an address, not a payload. */
|
|
151
|
+
export const NAME_MAX = 128;
|
|
152
|
+
|
|
153
|
+
/** Domain-separated digest of (session, name); the only form a tool-input name takes on disk. */
|
|
154
|
+
function nameKey(sessionId: string, name: string): string {
|
|
155
|
+
return refFor(`subagent-name\0${sessionId}\0${name}`);
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
function refForName(root: string, name: string, sessionId: string, now: Date): string | null {
|
|
159
|
+
if (name.length > NAME_MAX) return null;
|
|
160
|
+
const key = nameKey(sessionId, name);
|
|
161
|
+
let found: string | null = null;
|
|
162
|
+
const prev = new Date(Date.UTC(now.getUTCFullYear(), now.getUTCMonth() - 1, 1));
|
|
163
|
+
for (const month of [prev.toISOString().slice(0, 7), now.toISOString().slice(0, 7)]) {
|
|
164
|
+
for (const line of tailOf(path.join(root, LEDGER_DIR, `${month}.jsonl`)).split('\n')) {
|
|
165
|
+
if (!line.includes('subagent_named')) continue;
|
|
166
|
+
try {
|
|
167
|
+
const rec = JSON.parse(line) as Record<string, unknown>;
|
|
168
|
+
if (rec['event'] === 'subagent_named' && rec['name_key'] === key && typeof rec['ref'] === 'string') {
|
|
169
|
+
found = rec['ref'];
|
|
170
|
+
}
|
|
171
|
+
} catch {
|
|
172
|
+
// A torn line is no evidence.
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
return found;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* Classify one send. `recipient_kind: name` is resolved through the register a
|
|
181
|
+
* named spawn of this session left; any other recipient is taken as an agent id
|
|
182
|
+
* and hashed with the ledger's own `refFor`. Neither the recipient nor its ref
|
|
183
|
+
* is written.
|
|
184
|
+
*/
|
|
185
|
+
export function classifySend(
|
|
186
|
+
root: string,
|
|
187
|
+
toolInput: unknown,
|
|
188
|
+
sessionId: string | null,
|
|
189
|
+
now: Date = new Date(),
|
|
190
|
+
): SendKind {
|
|
191
|
+
const input = isObject(toolInput) ? toolInput : {};
|
|
192
|
+
const recipient = input['to'];
|
|
193
|
+
if (typeof recipient !== 'string' || recipient === '') return 'message_or_resume';
|
|
194
|
+
if (sessionId === null || sessionId === '') return 'message_or_resume';
|
|
195
|
+
const ref = input['recipient_kind'] === 'name' ? refForName(root, recipient, sessionId, now) : refFor(recipient);
|
|
196
|
+
if (ref === null) return 'message_or_resume';
|
|
197
|
+
if (readOpenRecords(root).has(ref)) return 'message_running';
|
|
198
|
+
return stoppedInSession(root, ref, sessionId, now) ? 'resume' : 'message_or_resume';
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* On a completed named spawn, record which ledger ref the name now addresses.
|
|
203
|
+
* Neither the name nor the agent id reaches disk in clear; both are digested first.
|
|
204
|
+
*/
|
|
205
|
+
export function recordNamedSpawn(root: string, payload: JsonObject, sessionId: string | null, nowIso: string): void {
|
|
206
|
+
const input = isObject(payload['tool_input']) ? payload['tool_input'] : {};
|
|
207
|
+
const result = isObject(payload['tool_response']) ? payload['tool_response'] : {};
|
|
208
|
+
const name = input['name'];
|
|
209
|
+
const agentId = result['agentId'];
|
|
210
|
+
if (typeof name !== 'string' || name === '' || name.length > NAME_MAX || typeof agentId !== 'string' || agentId === '') return;
|
|
211
|
+
if (sessionId === null) return;
|
|
212
|
+
appendLedgerLine(root, nowIso, { event: 'subagent_named', ts: nowIso, ref: refFor(agentId), name_key: nameKey(sessionId, name), session_id: sessionId });
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
/**
|
|
216
|
+
* Platforms where `pre_tool_use` was observed firing on the resume tool, with a
|
|
217
|
+
* deny honoured there. Elsewhere the line says the resume half is unobserved.
|
|
218
|
+
*/
|
|
219
|
+
export const RESUME_ADMISSION_OBSERVED: ReadonlySet<string> = new Set(['claude']);
|
|
220
|
+
|
|
221
|
+
/**
|
|
222
|
+
* Inputs to the reuse verdict. Production passes none: `host_resume` comes
|
|
223
|
+
* from the host row, and no worker register is recorded yet, which the verdict
|
|
224
|
+
* names as `worker_register_unrecorded` rather than reading as empty.
|
|
225
|
+
*/
|
|
226
|
+
export interface ShadowDeps {
|
|
227
|
+
host_resume?: boolean;
|
|
228
|
+
workers?: readonly WorkerState[] | null;
|
|
229
|
+
context?: ReuseContext | null;
|
|
230
|
+
}
|
|
231
|
+
|
|
70
232
|
/** One candidate guard configuration under shadow evaluation. */
|
|
71
233
|
export interface Candidate {
|
|
72
234
|
readonly label: string;
|
|
@@ -136,12 +298,34 @@ function extractToolName(payload: JsonObject): string | null {
|
|
|
136
298
|
return typeof v === 'string' && v ? v : null;
|
|
137
299
|
}
|
|
138
300
|
|
|
139
|
-
export function processEnvelope(envelope: JsonValue, consumerRoot: string): number {
|
|
301
|
+
export function processEnvelope(envelope: JsonValue, consumerRoot: string, deps: ShadowDeps = {}): number {
|
|
140
302
|
try {
|
|
141
303
|
if (!isObject(envelope)) return EXIT_ALLOW;
|
|
142
304
|
const payload = unwrapPayload(envelope);
|
|
143
305
|
const toolName = extractToolName(payload);
|
|
144
|
-
if (toolName === null
|
|
306
|
+
if (toolName === null) return EXIT_ALLOW;
|
|
307
|
+
if (envelope['event'] === 'post_tool_use' || payload['hook_event_name'] === 'PostToolUse') {
|
|
308
|
+
if (DISPATCH_TOOL_NAMES.has(toolName)) {
|
|
309
|
+
const sid = payload['session_id'] ?? envelope['session_id'];
|
|
310
|
+
recordNamedSpawn(consumerRoot, payload, typeof sid === 'string' ? sid : null, new Date().toISOString());
|
|
311
|
+
}
|
|
312
|
+
return EXIT_ALLOW;
|
|
313
|
+
}
|
|
314
|
+
const isResume = RESUME_TOOL_NAMES.has(toolName);
|
|
315
|
+
if (!isResume && !DISPATCH_TOOL_NAMES.has(toolName)) return EXIT_ALLOW;
|
|
316
|
+
const platform = typeof envelope['platform'] === 'string' ? envelope['platform'] : null;
|
|
317
|
+
const toolInput = isObject(payload['tool_input']) ? payload['tool_input'] : {};
|
|
318
|
+
const sessionRaw = payload['session_id'] ?? envelope['session_id'];
|
|
319
|
+
const sessionId = typeof sessionRaw === 'string' ? sessionRaw : null;
|
|
320
|
+
const sendKind: SendKind | null = isResume ? classifySend(consumerRoot, toolInput, sessionId) : null;
|
|
321
|
+
// Only the verdict's label and reason codes reach disk — never the tool input.
|
|
322
|
+
const reuse = isResume
|
|
323
|
+
? null
|
|
324
|
+
: shadowReuseVerdict({
|
|
325
|
+
host_resume: deps.host_resume ?? probeHostCapabilities(platform).worker_resume,
|
|
326
|
+
workers: deps.workers ?? null,
|
|
327
|
+
context: deps.context ?? null,
|
|
328
|
+
});
|
|
145
329
|
|
|
146
330
|
const stats = openRecordStats(consumerRoot);
|
|
147
331
|
// Pre-spawn there is no agent id to resolve a parent from; the deepest
|
|
@@ -167,7 +351,16 @@ export function processEnvelope(envelope: JsonValue, consumerRoot: string): numb
|
|
|
167
351
|
// one the ledger already fixed for itself.
|
|
168
352
|
ledger_present: stats.ledger_present,
|
|
169
353
|
stale_open_excluded: stats.stale_excluded,
|
|
170
|
-
|
|
354
|
+
// A message to a running worker starts no run, so it is not set
|
|
355
|
+
// against a threshold that counts runs.
|
|
356
|
+
...(sendKind === 'message_running'
|
|
357
|
+
? {}
|
|
358
|
+
: { candidates: verdicts.map((v) => ({ label: v.label, would_deny: v.would_deny, on: v.on })) }),
|
|
359
|
+
dispatch_kind: sendKind ?? 'spawn',
|
|
360
|
+
resume_admission: platform !== null && RESUME_ADMISSION_OBSERVED.has(platform) ? 'counted' : 'unobserved',
|
|
361
|
+
...(reuse === null ? {} : { reuse }),
|
|
362
|
+
// A recent host-sourced rate marker: a new spawn would have waited.
|
|
363
|
+
...(isResume ? {} : { rate_window: recentHostMarker(consumerRoot) ? 'would_wait' : 'clear' }),
|
|
171
364
|
// Shadow posture is a property of this file, not of a setting —
|
|
172
365
|
// there is no code path here that can deny.
|
|
173
366
|
posture: 'shadow',
|
|
@@ -280,7 +280,7 @@ export function atomic_write_text(target: string, text: string): void {
|
|
|
280
280
|
*
|
|
281
281
|
* PLATFORM AND VERSION the guarantee is claimed on: **local filesystems on the
|
|
282
282
|
* platforms this package supports** — macOS/APFS and Linux/ext4|btrfs|xfs, on
|
|
283
|
-
* Node >=
|
|
283
|
+
* Node >= 22.6.0 (`package.json` `engines`). Native Windows is explicitly not
|
|
284
284
|
* a first-class target (`docs/installation.md` § Windows names WSL2 or Git
|
|
285
285
|
* Bash), so no claim is made for it. Verified locally on Darwin 24.6.0 arm64.
|
|
286
286
|
*
|
|
@@ -708,7 +708,7 @@ export function session_state_file(dir: string, session_id: string): string {
|
|
|
708
708
|
* FILESYSTEMS WITHOUT HARD LINKS fall back to the racy sequence, deliberately.
|
|
709
709
|
* The peer-review round asked for this before accepting `link` as the fix, and
|
|
710
710
|
* it was the one condition of the three not already met: `linkSync` is the
|
|
711
|
-
* tree's first, `engines` only pins Node >=
|
|
711
|
+
* tree's first, `engines` only pins Node >= 22.6, and `installation.md` names
|
|
712
712
|
* Windows — so a share, a FUSE mount, or a restricted container can answer
|
|
713
713
|
* `EPERM` / `ENOSYS` / `EXDEV` / `EOPNOTSUPP` / `EMLINK`. Throwing there would
|
|
714
714
|
* be caught by the pruner's outer handler and leave the tombstone behind, which
|
|
@@ -54,6 +54,15 @@
|
|
|
54
54
|
* paragraph promised more than the code did (finding 2 of this
|
|
55
55
|
* change's own completion review), and a gate whose documented
|
|
56
56
|
* assurance outruns its implementation is quoted as written.
|
|
57
|
+
*
|
|
58
|
+
* SUPERSEDED WHERE A RECORD EXISTS. On a host whose `post_tool_use`
|
|
59
|
+
* recorder is live, the transcript reading above is not consulted at all: a manifest counts
|
|
60
|
+
* only when its current bytes hash to the digest the hook recorded as
|
|
61
|
+
* a standalone render of that file finished (`_lib/asset_render_record.ts`).
|
|
62
|
+
* No write-route pattern list stands in for that observation, so a
|
|
63
|
+
* manifest written by ANY other route discharges nothing. The paragraph
|
|
64
|
+
* above remains the rule only where no record exists, and the refusal
|
|
65
|
+
* says so.
|
|
57
66
|
* (iv) A deleted `.svg` opens no obligation — it has no current digest, so
|
|
58
67
|
* there is nothing a render could be bound to.
|
|
59
68
|
*
|
|
@@ -74,6 +83,14 @@ import * as fs from 'node:fs';
|
|
|
74
83
|
import * as path from 'node:path';
|
|
75
84
|
|
|
76
85
|
import { isAssetRenderCommand } from '../_lib/verification_command.js';
|
|
86
|
+
import {
|
|
87
|
+
RENDER_REL,
|
|
88
|
+
hasInstrumentGap,
|
|
89
|
+
isPureRender,
|
|
90
|
+
readAssetRenderRecords,
|
|
91
|
+
recordedManifest,
|
|
92
|
+
type AssetRenderRecord,
|
|
93
|
+
} from '../_lib/asset_render_record.js';
|
|
77
94
|
import type { ToolCall } from '../_lib/turn_end_transcript.js';
|
|
78
95
|
|
|
79
96
|
/**
|
|
@@ -83,7 +100,7 @@ import type { ToolCall } from '../_lib/turn_end_transcript.js';
|
|
|
83
100
|
* Two copies of a command-shape regex is how the two detectors come to
|
|
84
101
|
* disagree about what a render is.
|
|
85
102
|
*/
|
|
86
|
-
export { isAssetRenderCommand };
|
|
103
|
+
export { isAssetRenderCommand, isPureRender, RENDER_REL };
|
|
87
104
|
|
|
88
105
|
/**
|
|
89
106
|
* Tools that WRITE. One copy, here rather than imported from the gate: the
|
|
@@ -91,9 +108,6 @@ export { isAssetRenderCommand };
|
|
|
91
108
|
*/
|
|
92
109
|
const EDIT_TOOLS = new Set(['Edit', 'Write', 'MultiEdit', 'NotebookEdit']);
|
|
93
110
|
|
|
94
|
-
/** Where `ui:render` writes. One copy of the path, shared with the CLI by value. */
|
|
95
|
-
export const RENDER_REL = path.join('agents', 'runtime', 'state', 'render');
|
|
96
|
-
|
|
97
111
|
/**
|
|
98
112
|
* Paths whose `.svg` files are planted on purpose. Precision (ii).
|
|
99
113
|
*
|
|
@@ -255,6 +269,44 @@ export interface SvgObligationInputs {
|
|
|
255
269
|
* none of them discharges anything (16.5.0 release review).
|
|
256
270
|
*/
|
|
257
271
|
renderDirTampered?: boolean;
|
|
272
|
+
/**
|
|
273
|
+
* The renders the `post_tool_use` recorder saw finish this turn, or
|
|
274
|
+
* `null` where no recorder is live. An array — even an empty one — is the
|
|
275
|
+
* ONLY evidence read: the transcript fields above are then ignored.
|
|
276
|
+
*/
|
|
277
|
+
recorded?: readonly AssetRenderRecord[] | null;
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
/** Appended to every refusal on a host with no live recorder. Pinned verbatim. */
|
|
281
|
+
export const TRANSCRIPT_FALLBACK_REASON =
|
|
282
|
+
'transcript fallback: no readable `post_tool_use` render record exists for this turn — no live ' +
|
|
283
|
+
'recorder on this host (`agent-config hooks:status`), or a render whose exit status the host did not ' +
|
|
284
|
+
'report — so the manifest was read under the transcript rule — ' +
|
|
285
|
+
'an omission check, not an attestation';
|
|
286
|
+
|
|
287
|
+
/** The record-path verdict for one file. */
|
|
288
|
+
function recordVerdict(
|
|
289
|
+
root: string,
|
|
290
|
+
abs: string,
|
|
291
|
+
digest: string,
|
|
292
|
+
records: readonly AssetRenderRecord[],
|
|
293
|
+
): DischargeKind | string {
|
|
294
|
+
let changed = false;
|
|
295
|
+
for (const r of records) {
|
|
296
|
+
if (path.resolve(root, r.file) !== abs || r.file_digest !== digest) continue;
|
|
297
|
+
const read = recordedManifest(root, r);
|
|
298
|
+
if (read === null) continue;
|
|
299
|
+
if ('changed' in read) {
|
|
300
|
+
changed = true;
|
|
301
|
+
continue;
|
|
302
|
+
}
|
|
303
|
+
const kind = dischargeFor([read.manifest as AssetManifestish], digest);
|
|
304
|
+
if (kind !== null) return kind;
|
|
305
|
+
}
|
|
306
|
+
return changed
|
|
307
|
+
? 'the manifest the observed render left has changed since, so it is no longer the record of that render'
|
|
308
|
+
: 'no successful `ui:render --profile asset` of these bytes was observed by the hook this turn with a ' +
|
|
309
|
+
'manifest that discharges them — a manifest written by any other route discharges nothing';
|
|
258
310
|
}
|
|
259
311
|
|
|
260
312
|
/**
|
|
@@ -294,6 +346,13 @@ export function readSvgObligations(root: string, inputs: SvgObligationInputs): S
|
|
|
294
346
|
}
|
|
295
347
|
const digest = crypto.createHash('sha256').update(bytes).digest('hex');
|
|
296
348
|
|
|
349
|
+
if (Array.isArray(inputs.recorded)) {
|
|
350
|
+
const verdict = recordVerdict(root, path.resolve(root, abs), digest, inputs.recorded);
|
|
351
|
+
if (verdict === 'verified' || verdict === 'static-only') discharged.push({ file: relPath, kind: verdict });
|
|
352
|
+
else open.push({ file: relPath, reason: verdict });
|
|
353
|
+
continue;
|
|
354
|
+
}
|
|
355
|
+
|
|
297
356
|
// (iii) The manifests are only consulted once a render was observed.
|
|
298
357
|
// Reading them first and then discarding the verdict would make the
|
|
299
358
|
// ordering look like a performance detail rather than the rule.
|
|
@@ -365,19 +424,6 @@ export function renderNames(commands: readonly string[], relPath: string): boole
|
|
|
365
424
|
});
|
|
366
425
|
}
|
|
367
426
|
|
|
368
|
-
/**
|
|
369
|
-
* A render call standing alone — no second command chained to it and no
|
|
370
|
-
* redirect — so its text cannot also carry a write. A leading `cd <dir> &&`,
|
|
371
|
-
* piping its output to a read-only filter, and folding stderr into stdout are
|
|
372
|
-
* allowed.
|
|
373
|
-
*/
|
|
374
|
-
export function isPureRender(command: string): boolean {
|
|
375
|
-
if (!isAssetRenderCommand(command)) return false;
|
|
376
|
-
const [head, ...pipes] = command.replace(/^\s*cd\s+[^;&|<>`$\n]+&&\s*/, '').replace(/\s\d?>&\d\b/g, ' ').replace(/\s2>\s*\/dev\/null\b/g, ' ').split('|');
|
|
377
|
-
if (/[;&<>`\n]|\$\(/.test(head ?? '')) return false;
|
|
378
|
-
return pipes.every((p) => /^\s*(tail|head|grep|jq|cat|less|wc)\b[^;&<>`|]*$/.test(p) && !/\$\(/.test(p));
|
|
379
|
-
}
|
|
380
|
-
|
|
381
427
|
/**
|
|
382
428
|
* Does a shell command (other than a pure render) write somewhere a render
|
|
383
429
|
* manifest could live? Read by shape: a write operator, together with the
|
|
@@ -430,7 +476,12 @@ function escapeRe(s: string): string {
|
|
|
430
476
|
export function openSvgObligation(
|
|
431
477
|
workspaceRoot: string,
|
|
432
478
|
toolCalls: readonly ToolCall[],
|
|
479
|
+
recordedRaw: readonly unknown[] | null = null,
|
|
433
480
|
): { detector: 'verification'; evidence: string; reason: string; mode: 'transcript' } | null {
|
|
481
|
+
// A render the host reported no exit for is an instrument gap, never a
|
|
482
|
+
// missing render: refusing on it would refuse honest work for the host's
|
|
483
|
+
// silence, so the transcript rule answers instead.
|
|
484
|
+
const recordedRenders = recordedRaw === null || hasInstrumentGap(recordedRaw) ? null : recordedRaw;
|
|
434
485
|
// Precision (iii). The render has to come AFTER the edit it describes, on
|
|
435
486
|
// both evidence paths — `toolCalls` is assembled for both, so one rule
|
|
436
487
|
// covers them rather than two that can disagree.
|
|
@@ -470,7 +521,11 @@ export function openSvgObligation(
|
|
|
470
521
|
|
|
471
522
|
let reading: SvgObligationReading;
|
|
472
523
|
try {
|
|
473
|
-
reading = readSvgObligations(workspaceRoot, {
|
|
524
|
+
reading = readSvgObligations(workspaceRoot, {
|
|
525
|
+
edits,
|
|
526
|
+
renderDirTampered,
|
|
527
|
+
recorded: recordedRenders === null ? null : readAssetRenderRecords(recordedRenders),
|
|
528
|
+
});
|
|
474
529
|
} catch {
|
|
475
530
|
// A gate that crashed on its own instrument is a new failure mode on a
|
|
476
531
|
// path meant to be inert. An unreadable render directory is no finding.
|
|
@@ -492,6 +547,7 @@ export function openSvgObligation(
|
|
|
492
547
|
reason:
|
|
493
548
|
`this turn edited an .svg and no render describes it${more} — ${first.reason}. ` +
|
|
494
549
|
'A bare `ui:render --profile asset` that rendered nothing, and a test or lint run over other ' +
|
|
495
|
-
'files, both discharge nothing: the gate reads the render, never the call.'
|
|
550
|
+
'files, both discharge nothing: the gate reads the render, never the call.' +
|
|
551
|
+
(recordedRenders === null ? ` (${TRANSCRIPT_FALLBACK_REASON})` : ''),
|
|
496
552
|
};
|
|
497
553
|
}
|
|
@@ -47,9 +47,17 @@
|
|
|
47
47
|
* identical while the cost came back. The `RESULT_KEYS` literals below are the
|
|
48
48
|
* key NAMES this concern looks under, not a read of the body.
|
|
49
49
|
*
|
|
50
|
-
* TWO COUNTS, ONE OF THEM REDUNDANT TODAY.
|
|
51
|
-
*
|
|
52
|
-
* model.
|
|
50
|
+
* TWO COUNTS, ONE OF THEM REDUNDANT TODAY. Both count the host's HOOK
|
|
51
|
+
* ENVELOPE — the serialised `tool_response` the host hands a post_tool_use
|
|
52
|
+
* hook — and NOT what reached the model. The two differ by tool: for Edit and
|
|
53
|
+
* Write the hook envelope carries the whole original file while the model
|
|
54
|
+
* receives a short confirmation, so for those two tools the envelope is many
|
|
55
|
+
* times what the model saw, and for a text Read it is about the same. The
|
|
56
|
+
* payload the model received is a separate metric,
|
|
57
|
+
* `tool-result-payload-bytes`, read from transcripts. `raw_bytes` is
|
|
58
|
+
* the hook envelope the host handed the dispatcher; `delivered_bytes` is the
|
|
59
|
+
* hook envelope after any rewrite a concern could apply on its way back.
|
|
60
|
+
* Today they are EQUAL BY CONSTRUCTION, and the construction is
|
|
53
61
|
* checkable: nothing under `src/` or `docs/` emits the host's result-rewrite
|
|
54
62
|
* field, so no concern can rewrite a tool result on its way past. That
|
|
55
63
|
* absence is a grep, and the grep lives in this concern's test rather than
|
|
@@ -196,10 +204,11 @@ function censusFile(consumerRoot: string): string {
|
|
|
196
204
|
export interface CensusLine {
|
|
197
205
|
ts: string;
|
|
198
206
|
tool: string | null;
|
|
199
|
-
/** UTF-8 bytes the host handed the dispatcher. `null` ⇒ unmeasurable. */
|
|
207
|
+
/** UTF-8 bytes of the hook envelope the host handed the dispatcher. `null` ⇒ unmeasurable. */
|
|
200
208
|
raw_bytes: number | null;
|
|
201
209
|
/**
|
|
202
|
-
* UTF-8 bytes
|
|
210
|
+
* UTF-8 bytes of the hook envelope after any rewrite — NOT what reached
|
|
211
|
+
* the model (see the header; that figure is `tool-result-payload-bytes`).
|
|
203
212
|
*
|
|
204
213
|
* Equal to {@link CensusLine.raw_bytes} by construction today — nothing in
|
|
205
214
|
* this tree rewrites a tool result. It is recorded anyway so that a later
|
|
@@ -1282,7 +1282,7 @@ function runDetectors(inputs: DetectorInputs): Finding[] {
|
|
|
1282
1282
|
// on a completion CLAIM, and a turn waiting on a subagent has not
|
|
1283
1283
|
// finished — so its closing is not the claim F is about. Same slot,
|
|
1284
1284
|
// opposite trigger, opposite treatment of `dispatchOpen`.
|
|
1285
|
-
openSvgObligation(workspaceRoot, toolCalls),
|
|
1285
|
+
openSvgObligation(workspaceRoot, toolCalls, runState?.asset_renders ?? null),
|
|
1286
1286
|
dispatchOpen ? null : detectUntestedChange(lastAssistant, toolCalls, runState),
|
|
1287
1287
|
]) {
|
|
1288
1288
|
if (f) findings.push(f);
|
|
@@ -46,7 +46,7 @@ import * as path from 'node:path';
|
|
|
46
46
|
import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
47
47
|
|
|
48
48
|
import { hookSectionEnabled } from '../_lib/hook_settings.js';
|
|
49
|
-
import { isUiPath, isUiTreePath } from '../_lib/ui_surface.js';
|
|
49
|
+
import { isHandoverShape, isUiPath, isUiTreePath } from '../_lib/ui_surface.js';
|
|
50
50
|
import { readHookStdin } from './hook_stdin.js';
|
|
51
51
|
import { EXIT_ALLOW, EXIT_WARN } from './exit_codes.js';
|
|
52
52
|
|
|
@@ -164,17 +164,7 @@ export function isUiWrite(event: ToolEvent): boolean {
|
|
|
164
164
|
* read-before-write, and `report_consultation_rate`'s output says so.
|
|
165
165
|
*/
|
|
166
166
|
export function isArtifactRead(event: ToolEvent): boolean {
|
|
167
|
-
|
|
168
|
-
const normalized = event.file.replace(/\\/g, '/').toLowerCase();
|
|
169
|
-
return (
|
|
170
|
-
normalized.endsWith('design.html') ||
|
|
171
|
-
// The Claude Design canvas artboard. NOT covered by the line above:
|
|
172
|
-
// `ToDo.dc.html` does not end in `design.html`, which is exactly why
|
|
173
|
-
// the rule needed a second file pattern (2.5) and why the drift guard
|
|
174
|
-
// below reds when one is added here without the other.
|
|
175
|
-
normalized.endsWith('.dc.html') ||
|
|
176
|
-
normalized.includes('.claude/design-system/')
|
|
177
|
-
);
|
|
167
|
+
return !event.isWrite && isHandoverShape(event.file);
|
|
178
168
|
}
|
|
179
169
|
|
|
180
170
|
export interface SessionState {
|
|
@@ -46,6 +46,17 @@ import {
|
|
|
46
46
|
type RefusalStats,
|
|
47
47
|
} from "./_lib/turn_end_refusals.js";
|
|
48
48
|
import { ledgerWritable, readDelivered } from "./_lib/obligations.js";
|
|
49
|
+
import {
|
|
50
|
+
defaultFloorPostureDeps,
|
|
51
|
+
readFloorPosture,
|
|
52
|
+
renderFloorPosture,
|
|
53
|
+
type FloorPosture,
|
|
54
|
+
} from "./_lib/floor_posture.js";
|
|
55
|
+
import {
|
|
56
|
+
readCredentialDenyTier,
|
|
57
|
+
renderCredentialDenyTier,
|
|
58
|
+
type CredentialDenyReport,
|
|
59
|
+
} from "./_lib/credential_deny_rows.js";
|
|
49
60
|
|
|
50
61
|
// src/scripts/hooks_doctor.ts → parents[2] (../../..) is the repo root,
|
|
51
62
|
// mirroring the Python `Path(__file__).resolve().parents[2]`.
|
|
@@ -205,6 +216,18 @@ export interface DoctorPayload {
|
|
|
205
216
|
obligation_ledger: ObligationLedgerStats;
|
|
206
217
|
/** The machine's install stamp, for reading the version split below it. */
|
|
207
218
|
install_boundary: InstallBoundary;
|
|
219
|
+
/**
|
|
220
|
+
* What carries the destructive-action floor here: whether the hook runtime
|
|
221
|
+
* resolves at all, the host sandbox keys, and any neighbour PreToolUse hook.
|
|
222
|
+
* Report only — it never changes the exit code and never writes a setting.
|
|
223
|
+
*/
|
|
224
|
+
floor_posture: FloorPosture;
|
|
225
|
+
/**
|
|
226
|
+
* The host's own deny rows for the credential classes the read guard refuses:
|
|
227
|
+
* which are in force, and which the user would paste. Offered, never written:
|
|
228
|
+
* a written row would break the published no-host-setting-write commitment.
|
|
229
|
+
*/
|
|
230
|
+
credential_deny: CredentialDenyReport;
|
|
208
231
|
}
|
|
209
232
|
|
|
210
233
|
/** What the doctor can say about the ledger without interpreting a single row. */
|
|
@@ -316,6 +339,8 @@ export function collect(
|
|
|
316
339
|
turn_end_refusals,
|
|
317
340
|
obligation_ledger: collectLedgerStats(project_root),
|
|
318
341
|
install_boundary: readInstallBoundary(),
|
|
342
|
+
floor_posture: readFloorPosture(defaultFloorPostureDeps(project_root)),
|
|
343
|
+
credential_deny: readCredentialDenyTier(defaultFloorPostureDeps(project_root)),
|
|
319
344
|
};
|
|
320
345
|
}
|
|
321
346
|
|
|
@@ -500,6 +525,12 @@ export function _render_table(payload: DoctorPayload): string {
|
|
|
500
525
|
lines.push(..._render_refusals(payload));
|
|
501
526
|
lines.push("");
|
|
502
527
|
lines.push(..._render_ledger(payload));
|
|
528
|
+
lines.push("");
|
|
529
|
+
lines.push("Floor posture");
|
|
530
|
+
lines.push("-".repeat(60));
|
|
531
|
+
lines.push(...renderFloorPosture(payload.floor_posture));
|
|
532
|
+
lines.push("");
|
|
533
|
+
lines.push(...renderCredentialDenyTier(payload.credential_deny));
|
|
503
534
|
// Dispatch-issues detail — last 20 grouped by concern.
|
|
504
535
|
if (payload.dispatch_issues.length > 0) {
|
|
505
536
|
lines.push("");
|