@event4u/agent-config 16.4.0 → 17.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.augment-plugin/marketplace.json +3 -3
- package/.augment-plugin/plugin.json +1 -1
- package/.claude-plugin/marketplace.json +2 -2
- package/.claude-plugin/skills/install-agent-config/SKILL.md +4 -4
- package/CHANGELOG.md +483 -669
- package/CONTRIBUTING.md +47 -0
- package/README.md +25 -25
- package/dist/agent-src/commands/{design.md → agent-design.md} +11 -7
- package/dist/agent-src/commands/agents/init.md +66 -3
- package/dist/agent-src/commands/agents/user/init.md +3 -0
- package/dist/agent-src/commands/{optimize/deep.md → analyze/and-optimize.md} +72 -33
- package/dist/agent-src/commands/analyze/inbox.md +168 -37
- package/dist/agent-src/commands/analyze/pr.md +144 -0
- package/dist/agent-src/commands/analyze/{repo.md → reference.md} +85 -14
- package/dist/agent-src/commands/analyze/roadmap-repos.md +19 -10
- package/dist/agent-src/commands/analyze.md +28 -12
- package/dist/agent-src/commands/audit.md +115 -0
- package/dist/agent-src/commands/brand/review.md +13 -2
- package/dist/agent-src/commands/brand/tokens.md +3 -3
- package/dist/agent-src/commands/brand/voice.md +8 -5
- package/dist/agent-src/commands/brand.md +2 -2
- package/dist/agent-src/commands/challenge-me/closure.md +25 -0
- package/dist/agent-src/commands/design-system/import.md +8 -3
- package/dist/agent-src/commands/design-system/sync.md +98 -0
- package/dist/agent-src/commands/design-system.md +6 -1
- package/dist/agent-src/commands/evals/analyze.json +44 -0
- package/dist/agent-src/commands/evals/audit.json +12 -0
- package/dist/agent-src/commands/evals/retro.json +12 -0
- package/dist/agent-src/commands/fix/ci.md +10 -8
- package/dist/agent-src/commands/ghostwriter/write.md +22 -0
- package/dist/agent-src/commands/memory/learn-low-impact.md +70 -83
- package/dist/agent-src/commands/memory/propose.md +12 -0
- package/dist/agent-src/commands/memory.md +1 -1
- package/dist/agent-src/commands/optimize.md +4 -3
- package/dist/agent-src/commands/post-as/me.md +18 -0
- package/dist/agent-src/commands/pr/create.md +17 -342
- package/dist/agent-src/commands/pr/merge.md +129 -368
- package/dist/agent-src/commands/retro.md +121 -0
- package/dist/agent-src/commands/review/routing.md +1 -1
- package/dist/agent-src/commands/roadmap/next.md +4 -1
- package/dist/agent-src/commands/roadmap/process-full.md +46 -333
- package/dist/agent-src/commands/roadmap/triage-parked.md +6 -2
- package/dist/agent-src/commands/team-knowledge/consolidate.md +2 -2
- package/dist/agent-src/commands/team-knowledge.md +1 -1
- package/dist/agent-src/commands/threat-model.md +1 -1
- package/dist/agent-src/commands/upstream-contribute.md +91 -101
- package/dist/agent-src/commands/worktree/cleanup.md +18 -11
- package/dist/agent-src/contexts/contracts/consumer-agents-md-guide.md +54 -0
- package/dist/agent-src/contexts/execution/analysis-loop.md +137 -0
- package/dist/agent-src/contexts/execution/auto-dispatch-classification.md +3 -3
- package/dist/agent-src/contexts/execution/decision-closure-execution.md +1 -1
- package/dist/agent-src/contexts/execution/host-capability-manifest.md +6 -0
- package/dist/agent-src/contexts/execution/orchestration-telemetry.md +11 -4
- package/dist/agent-src/contexts/execution/pr-create-branches-content.md +250 -0
- package/dist/agent-src/contexts/execution/pr-create-branches-freshness.md +150 -0
- package/dist/agent-src/contexts/execution/pr-merge-queue.md +287 -0
- package/dist/agent-src/contexts/execution/pr-merge-sync.md +276 -0
- package/dist/agent-src/contexts/execution/pr-merge-trust-boundary.md +69 -0
- package/dist/agent-src/contexts/execution/process-full-all.md +233 -0
- package/dist/agent-src/contexts/execution/process-full-delivery.md +231 -0
- package/dist/agent-src/contexts/execution/roadmap-execution-contract-branches.md +42 -0
- package/dist/agent-src/contexts/execution/roadmap-execution-contract.md +1 -35
- package/dist/agent-src/contexts/execution/roadmap-process-loop-close.md +235 -0
- package/dist/agent-src/contexts/execution/roadmap-process-loop-prescan.md +216 -0
- package/dist/agent-src/contexts/execution/roadmap-process-loop-run.md +253 -0
- package/dist/agent-src/contexts/execution/roadmap-process-loop-set.md +212 -0
- package/dist/agent-src/contexts/execution/roadmap-process-loop.md +25 -864
- package/dist/agent-src/contexts/execution/subagent-spawn-contract.md +14 -2
- package/dist/agent-src/contexts/execution/subagent-steering.md +65 -8
- package/dist/agent-src/contexts/model-recommendations.md +5 -5
- package/dist/agent-src/contexts/subagent-configuration.md +1 -1
- package/dist/agent-src/guidelines/agent-infra/api-cost-levers.md +4 -3
- package/dist/agent-src/guidelines/agent-infra/model-recommendation.md +11 -5
- package/dist/agent-src/guidelines/agent-infra/rule-body-migration-inventory.md +1 -1
- package/dist/agent-src/guidelines/agent-infra/self-improvement-pipeline.md +47 -24
- package/dist/agent-src/guidelines/design-antipatterns.md +6 -1
- package/dist/agent-src/guidelines/design-asset-discipline.md +17 -0
- package/dist/agent-src/guidelines/design-fidelity-routing.md +1 -0
- package/dist/agent-src/guidelines/php/api-design.md +10 -1
- package/dist/agent-src/rules/brand-source-of-truth.md +7 -6
- package/dist/agent-src/rules/code-provenance.md +1 -1
- package/dist/agent-src/rules/context-hygiene.md +0 -1
- package/dist/agent-src/rules/design-fidelity.md +12 -13
- package/dist/agent-src/rules/external-reference-deep-dive.md +2 -2
- package/dist/agent-src/rules/fix-what-you-see.md +1 -1
- package/dist/agent-src/rules/low-impact-corpus-privacy-floor.md +14 -15
- package/dist/agent-src/rules/missing-skill-recovery.md +12 -11
- package/dist/agent-src/rules/neighbour-precedence.md +1 -1
- package/dist/agent-src/rules/recurring-criticism.md +1 -1
- package/dist/agent-src/rules/roadmap-ci-steps-policy.md +0 -2
- package/dist/agent-src/rules/self-repair-loop.md +2 -2
- package/dist/agent-src/rules/token-budget-discipline.md +2 -2
- package/dist/agent-src/scripts/dashboard_mode.ts +4 -1
- package/dist/agent-src/scripts/roadmap_age.ts +175 -0
- package/dist/agent-src/scripts/update_roadmap_progress.ts +10 -2
- package/dist/agent-src/skills/accessibility-auditor/SKILL.md +3 -3
- package/dist/agent-src/skills/accessibility-auditor/data/aria-patterns.csv +2 -0
- package/dist/agent-src/skills/accessibility-auditor/data/manifest.json +3 -3
- package/dist/agent-src/skills/agent-security-review/SKILL.md +2 -2
- package/dist/agent-src/skills/agents-md-thin-root/SKILL.md +12 -4
- package/dist/agent-src/skills/ai-code-blindspots/SKILL.md +7 -0
- package/dist/agent-src/skills/ai-council/references/advanced-modes.md +11 -1
- package/dist/agent-src/skills/ai-council/references/cost-and-redaction.md +7 -0
- package/dist/agent-src/skills/ai-council/references/execution-modes.md +7 -0
- package/dist/agent-src/skills/ai-council/references/output-and-synthesis.md +19 -0
- package/dist/agent-src/skills/ai-council/references/procedure.md +7 -0
- package/dist/agent-src/skills/api-design/SKILL.md +2 -2
- package/dist/agent-src/skills/api-endpoint/SKILL.md +2 -2
- package/dist/agent-src/skills/authz-review/SKILL.md +5 -3
- package/dist/agent-src/skills/blade-ui/SKILL.md +2 -2
- package/dist/agent-src/skills/brand/SKILL.md +7 -3
- package/dist/agent-src/skills/brand-asset-generation/SKILL.md +13 -6
- package/dist/agent-src/skills/brand-audit/SKILL.md +2 -1
- package/dist/agent-src/skills/brand-identity/SKILL.md +5 -4
- package/dist/agent-src/skills/brand-strategy/SKILL.md +5 -4
- package/dist/agent-src/skills/brand-to-tokens/SKILL.md +18 -39
- package/dist/agent-src/skills/brand-to-tokens/templates/marp-brand-deck.md.example +2 -2
- package/dist/agent-src/skills/brand-to-tokens/templates/reveal-brand-deck.yaml +2 -2
- package/dist/agent-src/skills/canvas-design/SKILL.md +16 -4
- package/dist/agent-src/skills/competitive-positioning/SKILL.md +2 -2
- package/dist/agent-src/skills/composer-packages/SKILL.md +18 -0
- package/dist/agent-src/skills/condense-memory/SKILL.md +1 -1
- package/dist/agent-src/skills/content-funnel-design/SKILL.md +8 -1
- package/dist/agent-src/skills/context-authoring/SKILL.md +1 -1
- package/dist/agent-src/skills/context-document/SKILL.md +2 -2
- package/dist/agent-src/skills/corpus-grounding/SKILL.md +6 -6
- package/dist/agent-src/skills/corpus-grounding/scripts/decision_engine.ts +13 -11
- package/dist/agent-src/skills/corpus-grounding/scripts/ground.mjs +1706 -0
- package/dist/agent-src/skills/corpus-grounding/scripts/schema_validator.ts +7 -1
- package/dist/agent-src/skills/dashboard-design/SKILL.md +1 -1
- package/dist/agent-src/skills/data-flow-mapper/SKILL.md +5 -2
- package/dist/agent-src/skills/database/SKILL.md +5 -4
- package/dist/agent-src/skills/decision-record/references/weighted-matrix.md +12 -0
- package/dist/agent-src/skills/deep-reading-analyst/SKILL.md +1 -1
- package/dist/agent-src/skills/dependency-upgrade/SKILL.md +61 -11
- package/dist/agent-src/skills/description-assist/SKILL.md +1 -1
- package/dist/agent-src/skills/design-intelligence/SKILL.md +1 -1
- package/dist/agent-src/skills/design-intelligence/data/landing.csv +1 -1
- package/dist/agent-src/skills/design-intelligence/references/context-and-registers.md +10 -2
- package/dist/agent-src/skills/design-intelligence/references/design-languages.md +1 -1
- package/dist/agent-src/skills/design-intelligence/references/design-rules-checklist.md +4 -3
- package/dist/agent-src/skills/design-intelligence/references/integration-mapping.md +25 -22
- package/dist/agent-src/skills/{wireframe → design-review}/references/story-beat-ledger.schema.json +1 -1
- package/dist/agent-src/skills/design-review/references/verification-automation.md +11 -3
- package/dist/agent-src/skills/design-system-capture/SKILL.md +15 -10
- package/dist/agent-src/skills/design-system-capture/references/design-system-json.md +20 -5
- package/dist/agent-src/skills/design-system-capture/references/import-procedure.md +2 -2
- package/dist/agent-src/skills/design-tokens/SKILL.md +23 -23
- package/dist/agent-src/skills/design-tokens/scripts/tokens.mjs +1037 -0
- package/dist/agent-src/skills/design-tokens/scripts/tokens.ts +336 -13
- package/dist/agent-src/skills/design-tokens/templates/design-tokens-starter.json +52 -53
- package/dist/agent-src/skills/docker/SKILL.md +1 -1
- package/dist/agent-src/skills/estimate-ticket/SKILL.md +1 -1
- package/dist/agent-src/skills/existing-ui-audit/SKILL.md +14 -276
- package/dist/agent-src/skills/existing-ui-audit/procedure.yaml +44 -0
- package/dist/agent-src/skills/existing-ui-audit/references/anti-slop-cross-reference.md +1 -1
- package/dist/agent-src/skills/existing-ui-audit/references/steps/00-inspect-stack-and-input.md +4 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/01-enumerate-components.md +26 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/01b-detect-component-taxonomy.md +7 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/02-identify-design-system.md +12 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/03-detect-design-tokens.md +35 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/04-detect-shadcn-inventory.md +13 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/04b-live-storybook-read.md +26 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/05-list-reusable-patterns.md +14 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/06-match-candidates.md +52 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/07-greenfield-branch.md +29 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/08-a11y-baseline.md +40 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/09-validate-and-write.md +5 -0
- package/dist/agent-src/skills/experiment-loop/SKILL.md +1 -1
- package/dist/agent-src/skills/fe-design/references/design-patterns.md +65 -4
- package/dist/agent-src/skills/fe-design/references/design-read-and-memory.md +1 -1
- package/dist/agent-src/skills/fe-design/references/source-led-port.md +1 -1
- package/dist/agent-src/skills/finishing-a-development-branch/SKILL.md +6 -6
- package/dist/agent-src/skills/flux/SKILL.md +1 -1
- package/dist/agent-src/skills/form-handler/SKILL.md +15 -2
- package/dist/agent-src/skills/frontend-render-security/SKILL.md +9 -0
- package/dist/agent-src/skills/git-workflow/SKILL.md +2 -2
- package/dist/agent-src/skills/git-workflow/references/branch-update.md +7 -0
- package/dist/agent-src/skills/git-workflow/references/commit-subject.md +12 -0
- package/dist/agent-src/skills/git-workflow/references/push-closes-its-loop.md +10 -0
- package/dist/agent-src/skills/gtm-launch/SKILL.md +8 -1
- package/dist/agent-src/skills/html-deck/SKILL.md +7 -2
- package/dist/agent-src/skills/humanizer/SKILL.md +16 -3
- package/dist/agent-src/skills/humanizer/references/anti-aiisms.md +13 -1
- package/dist/agent-src/skills/humanizer/references/fixtures.md +8 -0
- package/dist/agent-src/skills/iconography/SKILL.md +4 -2
- package/dist/agent-src/skills/image-provider-routing/SKILL.md +16 -5
- package/dist/agent-src/skills/js-library-packaging/SKILL.md +5 -4
- package/dist/agent-src/skills/js-library-packaging/scripts/check_package_surface.mjs +197 -0
- package/dist/agent-src/skills/judge-artifact-completeness/SKILL.md +1 -1
- package/dist/agent-src/skills/judge-security-auditor/SKILL.md +2 -2
- package/dist/agent-src/skills/launch-readiness/SKILL.md +18 -22
- package/dist/agent-src/skills/learning-to-rule-or-skill/SKILL.md +5 -5
- package/dist/agent-src/skills/livewire/SKILL.md +1 -1
- package/dist/agent-src/skills/llm-provider-knowledge/SKILL.md +18 -0
- package/dist/agent-src/skills/logo-generation/SKILL.md +21 -11
- package/dist/agent-src/skills/market-entry-analysis/SKILL.md +6 -1
- package/dist/agent-src/skills/markitdown/SKILL.md +1 -1
- package/dist/agent-src/skills/memory-consolidation/SKILL.md +2 -2
- package/dist/agent-src/skills/messaging-architecture/SKILL.md +8 -1
- package/dist/agent-src/skills/motion-choreographer/SKILL.md +2 -2
- package/dist/agent-src/skills/playwright-testing/SKILL.md +2 -0
- package/dist/agent-src/skills/positioning-strategy/SKILL.md +10 -2
- package/dist/agent-src/skills/prediction-pool-optimizer/references/ev-fixtures.md +13 -0
- package/dist/agent-src/skills/prediction-pool-optimizer/references/odds-and-bonus.md +7 -0
- package/dist/agent-src/skills/project-analysis-core/SKILL.md +1 -1
- package/dist/agent-src/skills/project-analysis-hypothesis-driven/SKILL.md +1 -1
- package/dist/agent-src/skills/project-analyzer/SKILL.md +14 -75
- package/dist/agent-src/skills/project-analyzer/procedure.yaml +39 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/01-project-overview.md +9 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/02-architecture.md +7 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/03-data-layer.md +6 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/04-business-domains.md +7 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/05-api-surface.md +6 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/06-service-map.md +6 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/07-module-inventory.md +6 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/08-infrastructure-and-testing.md +5 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/09-agent-docs-audit.md +6 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/10-gap-analysis.md +6 -0
- package/dist/agent-src/skills/quality-tools/references/js-ts-tools.md +10 -0
- package/dist/agent-src/skills/quality-tools/references/php-tools.md +13 -0
- package/dist/agent-src/skills/quality-tools/references/python-tools.md +11 -0
- package/dist/agent-src/skills/react-native-setup/SKILL.md +7 -2
- package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +5 -1
- package/dist/agent-src/skills/react-shadcn-ui/references/registry.md +13 -0
- package/dist/agent-src/skills/react-shadcn-ui/scripts/shadcn_add.mjs +315 -0
- package/dist/agent-src/skills/react-shadcn-ui/scripts/shadcn_add.ts +6 -6
- package/dist/agent-src/skills/receiving-code-review/SKILL.md +1 -1
- package/dist/agent-src/skills/refine-ticket/SKILL.md +2 -2
- package/dist/agent-src/skills/release-comms/SKILL.md +2 -1
- package/dist/agent-src/skills/repomix-packer/SKILL.md +2 -2
- package/dist/agent-src/skills/requesting-code-review/SKILL.md +3 -3
- package/dist/agent-src/skills/roadmap-management/references/archival.md +3 -3
- package/dist/agent-src/skills/roadmap-management/references/authoring.md +9 -2
- package/dist/agent-src/skills/roadmap-management/references/dashboard.md +3 -3
- package/dist/agent-src/skills/roadmap-management/references/lifecycle.md +3 -3
- package/dist/agent-src/skills/roadmap-writing/SKILL.md +4 -4
- package/dist/agent-src/skills/rtk-output-filtering/SKILL.md +1 -1
- package/dist/agent-src/skills/rule-writing/SKILL.md +1 -2
- package/dist/agent-src/skills/security/SKILL.md +41 -5
- package/dist/agent-src/skills/skill-improvement-pipeline/SKILL.md +5 -3
- package/dist/agent-src/skills/skill-reviewer/SKILL.md +1 -1
- package/dist/agent-src/skills/skill-writing/SKILL.md +23 -8
- package/dist/agent-src/skills/skill-writing/references/section-patterns.md +19 -1
- package/dist/agent-src/skills/source-discovery/SKILL.md +3 -3
- package/dist/agent-src/skills/sql-writing/SKILL.md +2 -2
- package/dist/agent-src/skills/standards-from-config/SKILL.md +2 -2
- package/dist/agent-src/skills/storybook-workshop/SKILL.md +5 -0
- package/dist/agent-src/skills/storybook-workshop/scripts/story_contrast_floor.mjs +99 -0
- package/dist/agent-src/skills/subagent-orchestration/SKILL.md +13 -13
- package/dist/agent-src/skills/subagent-orchestration/prompts/README.md +4 -3
- package/dist/agent-src/skills/svg-authoring/SKILL.md +324 -0
- package/dist/agent-src/skills/systematic-debugging/SKILL.md +2 -2
- package/dist/agent-src/skills/tailwind-engineer/SKILL.md +8 -3
- package/dist/agent-src/skills/tailwind-engineer/scripts/tailwind_config_gen.mjs +482 -0
- package/dist/agent-src/skills/test-case-discovery/SKILL.md +1 -1
- package/dist/agent-src/skills/threat-modeling/SKILL.md +8 -1
- package/dist/agent-src/skills/threat-modeling/data/manifest.json +5 -2
- package/dist/agent-src/skills/threat-modeling/data/reasoning.csv +10 -10
- package/dist/agent-src/skills/threat-modeling/data/surfaces.csv +11 -10
- package/dist/agent-src/skills/threat-modeling/data/threats.csv +34 -20
- package/dist/agent-src/skills/type-design/SKILL.md +196 -0
- package/dist/agent-src/skills/type-design/references/font-spec.md +90 -0
- package/dist/agent-src/skills/type-design/references/gates.md +113 -0
- package/dist/agent-src/skills/type-design/references/toolchain.md +66 -0
- package/dist/agent-src/skills/typography-system/SKILL.md +21 -11
- package/dist/agent-src/skills/typography-system/references/worked-scales.md +85 -0
- package/dist/agent-src/skills/ui-apply-generic/SKILL.md +1 -1
- package/dist/agent-src/skills/universal-project-analysis/SKILL.md +1 -1
- package/dist/agent-src/skills/upstream-contribute/SKILL.md +120 -125
- package/dist/agent-src/skills/using-git-worktrees/SKILL.md +1 -0
- package/dist/agent-src/skills/verify-repair-loop/SKILL.md +1 -1
- package/dist/agent-src/skills/voice-and-tone-design/SKILL.md +71 -2
- package/dist/agent-src/skills/wireframe/SKILL.md +5 -2
- package/dist/agent-src/skills/worktree-lifecycle/SKILL.md +16 -14
- package/dist/agent-src/templates/AGENTS.md +1 -1
- package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/dist/agent-src/templates/agents/proposal.example.md +1 -1
- package/dist/agent-src/templates/github-workflows/advisories-daily.yml +85 -0
- package/dist/agent-src/templates/roadmaps.md +39 -1
- package/dist/agent-src/templates/scripts/check_memory.ts +2 -2
- package/dist/agent-src/templates/scripts/historical-bug-patterns.example.yml +13 -1
- package/dist/agent-src/templates/scripts/work_engine/cli.ts +17 -0
- package/dist/agent-src/templates/scripts/work_engine/cli_args.ts +10 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/scaffold.ts +22 -13
- package/dist/agent-src/templates/scripts/work_engine/dispatcher.ts +18 -4
- package/dist/agent-src/templates/scripts/work_engine/procedure/checks.ts +283 -0
- package/dist/agent-src/templates/scripts/work_engine/procedure/run.ts +432 -0
- package/dist/agent-src/templates/scripts/work_engine/procedure/sidecar.ts +185 -0
- package/dist/agent-src/templates/scripts/work_engine/state.ts +3 -0
- package/dist/cli/commands/uiRender.js +265 -13
- package/dist/cli/commands/uiRenderAsset.js +1316 -0
- package/dist/cli/commands/uiRenderAssetCompare.js +752 -0
- package/dist/cli/commands/uiRenderAssetFonts.js +158 -0
- package/dist/cli/commands/uiRenderAssetGrid.js +265 -0
- package/dist/cli/commands/uiRenderAssetGrounds.js +323 -0
- package/dist/cli/commands/uiRenderAssetIsolation.js +85 -0
- package/dist/cli/commands/uiRenderAssetTypes.js +133 -0
- package/dist/cli/initRouting.js +1 -1
- package/dist/cli/main.js +47 -1
- package/dist/cli/mcp/dispatch.js +31 -9
- package/dist/cli/python/knowledge_ingest.js +7 -39
- package/dist/cli/python/workspace_secrets.js +4 -177
- package/dist/cli/registry.js +5 -2
- package/dist/cli-delegate/archive_completed_roadmaps.js +3 -2
- package/dist/cli-delegate/check_update_banner.js +635 -266
- package/dist/cli-delegate/{chunk-AED2VQGM.js → chunk-2CX7NWRB.js} +233 -437
- package/dist/cli-delegate/{chunk-F3QDG2GT.js → chunk-2SFOOFJJ.js} +259 -159
- package/dist/cli-delegate/chunk-2Y5AMLMY.js +136 -0
- package/dist/cli-delegate/{chunk-OKJUIAPS.js → chunk-4E2W63DA.js} +1 -62
- package/dist/cli-delegate/{chunk-6SRJTYJS.js → chunk-4SHNERBL.js} +37 -16
- package/dist/cli-delegate/chunk-5VO3RTMV.js +208 -0
- package/dist/cli-delegate/chunk-6E2LDY4F.js +27 -0
- package/dist/cli-delegate/{chunk-XQTPXKFA.js → chunk-6ZD2QZMN.js} +8 -17
- package/dist/cli-delegate/{chunk-6V5FMA3P.js → chunk-7CEI2YPS.js} +1 -1
- package/dist/cli-delegate/{chunk-DMSZHXZS.js → chunk-7DRWULEQ.js} +80 -7
- package/dist/cli-delegate/chunk-7NXCZSDL.js +54 -0
- package/dist/cli-delegate/chunk-AX3U3UWJ.js +328 -0
- package/dist/cli-delegate/{chunk-WOKWX5PL.js → chunk-BKALSTBZ.js} +18 -3
- package/dist/cli-delegate/chunk-BMGUGSY6.js +103 -0
- package/dist/cli-delegate/chunk-BYV46VRM.js +3309 -0
- package/dist/cli-delegate/{chunk-5GPULQBE.js → chunk-CAL76ADI.js} +4215 -682
- package/dist/cli-delegate/chunk-DSY6LLCQ.js +127 -0
- package/dist/cli-delegate/chunk-E6XNBVE4.js +581 -0
- package/dist/cli-delegate/{chunk-ZUZKZYCN.js → chunk-ESUNQ5XR.js} +46 -10
- package/dist/cli-delegate/{chunk-G5VVIZRC.js → chunk-F7HLSW6P.js} +1 -1
- package/dist/cli-delegate/chunk-FIEEOH5C.js +133 -0
- package/dist/cli-delegate/chunk-FKYZOWVD.js +719 -0
- package/dist/cli-delegate/chunk-GOMILC3O.js +918 -0
- package/dist/cli-delegate/chunk-I4KJYVPB.js +69 -0
- package/dist/cli-delegate/{chunk-JQOM7TTM.js → chunk-IDAOTDPE.js} +1 -100
- package/dist/cli-delegate/chunk-IROAQ77A.js +137 -0
- package/dist/cli-delegate/chunk-J2SJZICO.js +698 -0
- package/dist/cli-delegate/{chunk-6YQC2HLF.js → chunk-JHMMWNJ2.js} +54 -40
- package/dist/cli-delegate/{chunk-WQWXGIWB.js → chunk-M6CRG5O6.js} +165 -15
- package/dist/cli-delegate/{chunk-PHD7OOLE.js → chunk-MQ2UDEGV.js} +14 -3
- package/dist/cli-delegate/chunk-NTM7G2V4.js +220 -0
- package/dist/cli-delegate/chunk-PV7S5DPJ.js +175 -0
- package/dist/cli-delegate/{chunk-F7DQWYR5.js → chunk-RAXQOETZ.js} +6 -2
- package/dist/cli-delegate/{chunk-T7XSJSUQ.js → chunk-SIOMDAKL.js} +980 -784
- package/dist/cli-delegate/{chunk-KR6EM23A.js → chunk-TULVDQ4L.js} +3 -48
- package/dist/cli-delegate/chunk-UUYEKXKR.js +20 -0
- package/dist/cli-delegate/{chunk-7XGD2OEU.js → chunk-UXWHY6CQ.js} +2 -1
- package/dist/cli-delegate/{chunk-PWX7CKMD.js → chunk-VC3ECUEK.js} +1 -1
- package/dist/cli-delegate/{chunk-KXXWJTDO.js → chunk-WMNYVIYX.js} +1 -1
- package/dist/cli-delegate/chunk-XCY5KKUC.js +181 -0
- package/dist/cli-delegate/{chunk-H76PHZBI.js → chunk-XLY5G3CM.js} +14 -19
- package/dist/cli-delegate/cmd_adr_effective.js +41 -2
- package/dist/cli-delegate/cmd_analyze_session.js +7 -7
- package/dist/cli-delegate/cmd_brand_status.js +1287 -10
- package/dist/cli-delegate/cmd_ci_settle.js +330 -0
- package/dist/cli-delegate/cmd_conformance.js +669 -822
- package/dist/cli-delegate/cmd_doctor.js +26 -16
- package/dist/cli-delegate/cmd_doctor_neighbours.js +10 -7
- package/dist/cli-delegate/cmd_explain.js +9 -24
- package/dist/cli-delegate/cmd_export.js +14 -11
- package/dist/cli-delegate/cmd_fleet.js +5 -3
- package/dist/cli-delegate/cmd_git_convention.js +8 -4
- package/dist/cli-delegate/cmd_handoff.js +79 -242
- package/dist/cli-delegate/cmd_mcp_available.js +1 -1
- package/dist/cli-delegate/cmd_memory_get.js +4 -2
- package/dist/cli-delegate/cmd_migrate.js +2 -2
- package/dist/cli-delegate/cmd_packs_active.js +2 -2
- package/dist/cli-delegate/cmd_preflight.js +7 -5
- package/dist/cli-delegate/cmd_prune.js +16 -13
- package/dist/cli-delegate/cmd_route_audit.js +11 -8
- package/dist/cli-delegate/cmd_route_explain.js +649 -16
- package/dist/cli-delegate/cmd_session_recycle.js +15 -6
- package/dist/cli-delegate/cmd_settings_check.js +2 -2
- package/dist/cli-delegate/cmd_settings_get.js +1 -1
- package/dist/cli-delegate/cmd_settings_migrate.js +14 -11
- package/dist/cli-delegate/cmd_settings_set.js +1 -1
- package/dist/cli-delegate/cmd_sync.js +16 -13
- package/dist/cli-delegate/cmd_uninstall.js +185 -31
- package/dist/cli-delegate/cmd_update.js +67 -3
- package/dist/cli-delegate/cmd_upgrade.js +38 -7
- package/dist/cli-delegate/cmd_validate.js +16 -13
- package/dist/cli-delegate/cmd_versions.js +1 -1
- package/dist/cli-delegate/dashboard_mode.js +1 -1
- package/dist/cli-delegate/gate_execute.js +4 -3
- package/dist/cli-delegate/roadmap_age.js +22 -0
- package/dist/cli-delegate/roadmap_gates.js +4 -3
- package/dist/cli-delegate/update_roadmap_progress.js +3 -2
- package/dist/cli-delegate/upgrade_unattended-VVL6JLSX.js +541 -0
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +409 -201
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +8 -8
- package/dist/discovery/dormancy-report.md +1 -1
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +36 -27
- package/dist/discovery/trust-report.md +3 -3
- package/dist/discovery/workspaces.json +25 -16
- package/dist/hooks/chat_history.chunk.cjs +6852 -0
- package/dist/hooks/chat_history.chunk.cjs.sha256 +1 -0
- package/dist/hooks/dispatch.js +17706 -18627
- package/dist/hooks/dispatch.sha256 +1 -1
- package/dist/hooks/egress_engine.chunk.cjs +915 -0
- package/dist/hooks/egress_engine.chunk.cjs.sha256 +1 -0
- package/dist/hooks/svg_rules.chunk.cjs +1858 -0
- package/dist/hooks/svg_rules.chunk.cjs.sha256 +1 -0
- package/dist/install/conflict.js +36 -6
- package/dist/install/conflictTracker.js +81 -7
- package/dist/install/detect.js +3 -3
- package/dist/install/hostPermissionsAdapter.js +106 -0
- package/dist/install/install.mjs +3117 -1949
- package/dist/install/installThinLayer.js +1 -1
- package/dist/install/manifestFiles.js +21 -0
- package/dist/install/noGoDenyRows.js +300 -0
- package/dist/install/noGoRules.js +368 -0
- package/dist/install/ownershipLedger.js +133 -0
- package/dist/install/plan.js +1 -1
- package/dist/install/preflight.js +39 -8
- package/dist/install/preserve.js +74 -12
- package/dist/install/recordedOwnership.js +88 -5
- package/dist/install/rule_scope.js +20 -3
- package/dist/install/stagedRuntime.js +455 -0
- package/dist/install/toolsArg.js +19 -0
- package/dist/install/userPin.js +47 -0
- package/dist/install/wizard-plan.js +26 -4
- package/dist/mcp/awesome-mcp-servers.row.md +1 -1
- package/dist/mcp/mcp-cloudflare-catalogue.json +3 -2
- package/dist/mcp/registry-manifest.json +6 -5
- package/dist/mcp/server.json +3 -3
- package/dist/mcp/server.mjs +9814 -5333
- package/dist/router.json +1 -1
- package/dist/scripts/_lib/agent_settings.js +7 -12
- package/dist/scripts/_lib/asset_render_record.js +219 -0
- package/dist/scripts/_lib/claude_builtin_names.js +9 -4
- package/dist/scripts/_lib/claude_settings_hooks.js +102 -34
- package/dist/scripts/_lib/egress_rules.js +766 -0
- package/dist/scripts/_lib/environment_detector.js +24 -33
- package/dist/scripts/_lib/global_deploy_inventory.js +146 -9
- package/dist/scripts/_lib/guidelines_lane.js +10 -1
- package/dist/scripts/_lib/identifier_redaction.js +24 -0
- package/dist/scripts/_lib/installed_layer.js +17 -0
- package/dist/scripts/_lib/installed_layer_normalise.js +72 -0
- package/dist/scripts/_lib/lean_projection_mode.js +34 -152
- package/dist/scripts/_lib/project_tree_form.js +118 -0
- package/dist/scripts/_lib/scan_scope.js +105 -0
- package/dist/scripts/_lib/scoped_projection.js +133 -3
- package/dist/scripts/_lib/settings_removed_keys.js +29 -0
- package/dist/scripts/_lib/settings_renamed_keys.js +17 -5
- package/dist/scripts/_lib/subagent_native_fields.js +35 -0
- package/dist/scripts/_lib/svg_dom.js +284 -0
- package/dist/scripts/_lib/svg_filled_counter.js +285 -0
- package/dist/scripts/_lib/svg_geometry.js +477 -0
- package/dist/scripts/_lib/svg_motion.js +179 -0
- package/dist/scripts/_lib/svg_rules.js +1339 -0
- package/dist/scripts/_lib/svg_urls.js +67 -0
- package/dist/scripts/_lib/ui_surface.js +19 -0
- package/dist/scripts/_lib/verification_command.js +364 -0
- package/dist/scripts/_lib/workspace_secrets.js +229 -0
- package/dist/scripts/ai_council/seat_policy.js +27 -0
- package/dist/scripts/ai_council/transport_resolver.js +9 -10
- package/dist/scripts/condense.js +25 -29
- package/dist/scripts/lint_svg_asset.js +324 -0
- package/dist/server/io/substituteTemplate.js +2 -2
- package/dist/server/io/yamlIO.js +2 -2
- package/dist/server/routes/install.js +5 -1
- package/dist/server/routes/settings.js +2 -2
- package/dist/server/routes/wizard.js +1 -1
- package/dist/server/schemas/settings.js +22 -16
- package/dist/server/serverInfo.js +1 -1
- package/dist/shared/brandTokenDocument.js +47 -0
- package/dist/shared/brandTokenPaths.js +43 -0
- package/dist/shared/settingsCarveOut.js +0 -7
- package/dist/shared/skillRanking.js +103 -5
- package/dist/shared/userMd/formAdapter.js +16 -0
- package/dist/shared/userMd/schema.js +17 -0
- package/dist/ui/assets/index-w70Ado09.js +23 -0
- package/dist/ui/index.html +1 -1
- package/docs/MIGRATION.md +89 -2
- package/docs/THIRD-PARTY-NOTICES.md +27 -0
- package/docs/contracts/settings-classes.md +27 -9
- package/docs/guidelines/agent-infra/api-cost-levers.md +4 -3
- package/docs/guidelines/agent-infra/model-recommendation.md +11 -5
- package/docs/guidelines/agent-infra/rule-body-migration-inventory.md +1 -1
- package/docs/guidelines/agent-infra/self-improvement-pipeline.md +47 -24
- package/docs/guidelines/design-antipatterns.md +6 -1
- package/docs/guidelines/design-asset-discipline.md +17 -0
- package/docs/guidelines/design-fidelity-routing.md +1 -0
- package/docs/guidelines/php/api-design.md +10 -1
- package/llms.txt +12 -10
- package/package.json +15 -5
- package/src/agent-src/scripts/dashboard_mode.ts +4 -1
- package/src/agent-src/scripts/roadmap_age.ts +175 -0
- package/src/agent-src/scripts/update_roadmap_progress.ts +10 -2
- package/src/agent-src/templates/AGENTS.md +1 -1
- package/src/agent-src/templates/scripts/check_memory.ts +2 -2
- package/src/agent-src/templates/scripts/historical-bug-patterns.example.yml +13 -1
- package/src/agent-src/templates/scripts/work_engine/cli.ts +17 -0
- package/src/agent-src/templates/scripts/work_engine/cli_args.ts +10 -0
- package/src/agent-src/templates/scripts/work_engine/directives/ui/scaffold.ts +22 -13
- package/src/agent-src/templates/scripts/work_engine/dispatcher.ts +18 -4
- package/src/agent-src/templates/scripts/work_engine/procedure/checks.ts +283 -0
- package/src/agent-src/templates/scripts/work_engine/procedure/run.ts +432 -0
- package/src/agent-src/templates/scripts/work_engine/procedure/sidecar.ts +185 -0
- package/src/agent-src/templates/scripts/work_engine/state.ts +3 -0
- package/src/config/agent-settings.template.yml +120 -57
- package/src/config/agents-paths.yml +13 -7
- package/src/config/ci-local-parity.yml +44 -0
- package/src/config/continuity-surface.json +51 -2
- package/src/config/depth-audit-samples.json +5 -0
- package/src/config/discovery/command-verbs.yml +1 -0
- package/src/config/dispatch-economy-metrics.json +1 -0
- package/src/config/egress-mutations/class-precedence-swapped.json +7 -0
- package/src/config/egress-mutations/credential-token-restores.json +7 -0
- package/src/config/egress-mutations/iban-checksum-disabled.json +7 -0
- package/src/config/egress-mutations/raw-value-in-the-count-record.json +7 -0
- package/src/config/evaluator-budgets.json +4 -4
- package/src/config/gate-coverage.yml +149 -3
- package/src/config/gate-reachability-exemptions.json +3 -5
- package/src/config/gate-violation-baselines.json +29 -25
- package/src/config/gitignore-block.txt +6 -3
- package/src/config/hook-bundle-budget.json +34 -3
- package/src/config/hook-carrier-probes.json +30 -0
- package/src/config/hook-latency-budget.json +4 -2
- package/src/config/host-injection-effect.json +8 -1
- package/src/config/host-skill-frontmatter-keys.json +56 -0
- package/src/config/layer-form-brakes.json +4 -0
- package/src/config/layer-form-comparison-corpus.json +42 -0
- package/src/config/loop-surfaces.yaml +28 -47
- package/src/config/memory-twin-verdicts.yml +9 -1
- package/src/config/metric-registry.yml +40 -3
- package/src/config/pack-size-budget.json +15 -0
- package/src/config/procedure-core-budget.json +21 -0
- package/src/config/profiles/minimal.ini +1 -1
- package/src/config/project-tree-form.json +24 -0
- package/src/config/reach-channels.yml +3 -3
- package/src/config/reach-prescriptions-intake.yml +1 -1
- package/src/config/roadmap-step-size-baseline.json +118 -0
- package/src/config/routing-coverage-seed.json +100 -2
- package/src/config/skill-body-budget.json +686 -0
- package/src/config/skill-fork-pilot.json +17 -0
- package/src/config/skill-lifecycle-probes-codex.json +57 -0
- package/src/config/skill-lifecycle-probes.json +57 -0
- package/src/config/skill-output-shape.json +316 -0
- package/src/config/step-depth-table.json +58 -0
- package/src/config/turnaround-budget.json +90 -0
- package/src/install/conflict.ts +38 -6
- package/src/install/conflictTracker.ts +126 -8
- package/src/install/detect.ts +3 -3
- package/src/install/hostPermissionsAdapter.ts +136 -0
- package/src/install/installThinLayer.ts +6 -1
- package/src/install/manifestFiles.ts +24 -0
- package/src/install/noGoDenyRows.ts +368 -0
- package/src/install/noGoRules.ts +438 -0
- package/src/install/ownershipLedger.ts +180 -0
- package/src/install/plan.ts +1 -1
- package/src/install/preflight.ts +42 -10
- package/src/install/preserve.ts +94 -12
- package/src/install/recordedOwnership.ts +121 -3
- package/src/install/rule_scope.ts +20 -3
- package/src/install/stagedRuntime.ts +528 -0
- package/src/install/toolsArg.ts +16 -0
- package/src/install/types.ts +23 -2
- package/src/install/userPin.ts +54 -0
- package/src/install/wizard-plan.ts +25 -4
- package/src/scripts/_cli/_doctor_emit.ts +24 -0
- package/src/scripts/_cli/cmd_brand_status.ts +223 -12
- package/src/scripts/_cli/cmd_ci_settle.ts +32 -0
- package/src/scripts/_cli/cmd_doctor.ts +23 -44
- package/src/scripts/_cli/cmd_route_explain.ts +176 -2
- package/src/scripts/_cli/cmd_uninstall.ts +270 -26
- package/src/scripts/_cli/cmd_update.ts +34 -1
- package/src/scripts/_cli/cmd_upgrade.ts +38 -2
- package/src/scripts/_cli/detection_report.ts +7 -0
- package/src/scripts/_cli/doctor_execution.ts +1 -2
- package/src/scripts/_cli/doctor_install_mode.ts +39 -0
- package/src/scripts/_cli/doctor_network_posture.ts +3 -3
- package/src/scripts/_cli/doctor_ownership_ledger.ts +126 -0
- package/src/scripts/_cli/doctor_update_verdict.ts +104 -0
- package/src/scripts/_cli/explain_last/scrubber.ts +9 -21
- package/src/scripts/_cli/upgrade_unattended.ts +548 -0
- package/src/scripts/_dispatch.bash +42 -9
- package/src/scripts/_lib/activation_ladder.ts +1 -1
- package/src/scripts/_lib/advisory_inventory.ts +405 -0
- package/src/scripts/_lib/advisory_notice.ts +270 -0
- package/src/scripts/_lib/advisory_sources.ts +752 -0
- package/src/scripts/_lib/advisory_verdicts.ts +363 -0
- package/src/scripts/_lib/agent_artifact_location.ts +177 -0
- package/src/scripts/_lib/agent_settings.ts +7 -12
- package/src/scripts/_lib/arrival_record.ts +217 -0
- package/src/scripts/_lib/asset_render_record.ts +247 -0
- package/src/scripts/_lib/billing_grant.ts +4 -2
- package/src/scripts/_lib/brand_voice_slot.ts +258 -0
- package/src/scripts/_lib/canary_status.ts +24 -0
- package/src/scripts/_lib/cc_transcript.ts +276 -0
- package/src/scripts/_lib/changelog_eras.ts +83 -0
- package/src/scripts/_lib/claim_phrases.ts +71 -0
- package/src/scripts/_lib/classify_update.ts +171 -0
- package/src/scripts/_lib/claude_builtin_names.ts +9 -4
- package/src/scripts/_lib/claude_hook_scope.ts +195 -0
- package/src/scripts/_lib/claude_settings_hooks.ts +118 -34
- package/src/scripts/_lib/codex_resident_set.ts +460 -0
- package/src/scripts/_lib/codex_skill_finder.ts +225 -0
- package/src/scripts/_lib/confusables.ts +19 -0
- package/src/scripts/_lib/consumer_impact.ts +199 -0
- package/src/scripts/_lib/content_class.ts +127 -0
- package/src/scripts/_lib/counted_probe.ts +68 -1
- package/src/scripts/_lib/credential_deny_rows.ts +151 -0
- package/src/scripts/_lib/credential_files.ts +367 -0
- package/src/scripts/_lib/delivery_arm_experiment.ts +2 -2
- package/src/scripts/_lib/depth_flip.ts +141 -0
- package/src/scripts/_lib/design_lock.ts +117 -0
- package/src/scripts/_lib/design_sync_ledger.ts +142 -0
- package/src/scripts/_lib/design_sync_plan.ts +177 -0
- package/src/scripts/_lib/design_sync_reconcile.ts +159 -0
- package/src/scripts/_lib/design_sync_verify.ts +99 -0
- package/src/scripts/_lib/design_system_claude_design.ts +323 -0
- package/src/scripts/_lib/design_system_import.ts +84 -6
- package/src/scripts/_lib/dispatch_import_closure.ts +42 -11
- package/src/scripts/_lib/egress_credential_env.ts +35 -0
- package/src/scripts/_lib/egress_engine.ts +22 -0
- package/src/scripts/_lib/egress_known_values.ts +223 -0
- package/src/scripts/_lib/egress_normalize.ts +67 -0
- package/src/scripts/_lib/egress_prefixes.ts +42 -0
- package/src/scripts/_lib/egress_rules.ts +896 -0
- package/src/scripts/_lib/egress_rules_linearity.ts +56 -0
- package/src/scripts/_lib/egress_sender_scan.ts +290 -0
- package/src/scripts/_lib/egress_session_table.ts +510 -0
- package/src/scripts/_lib/egress_text.ts +63 -0
- package/src/scripts/_lib/egress_token.ts +252 -0
- package/src/scripts/_lib/empty_cycles.ts +1 -1
- package/src/scripts/_lib/environment_detector.ts +45 -30
- package/src/scripts/_lib/exemption_shape.ts +75 -1
- package/src/scripts/_lib/floor_posture.ts +185 -0
- package/src/scripts/_lib/forge_protection.ts +140 -2
- package/src/scripts/_lib/global_deploy_inventory.ts +159 -6
- package/src/scripts/_lib/guidelines_lane.ts +12 -1
- package/src/scripts/_lib/hand_kinds.ts +65 -0
- package/src/scripts/_lib/headless_invocation.ts +3 -3
- package/src/scripts/_lib/host_capability.ts +34 -2
- package/src/scripts/_lib/host_env_write.ts +39 -18
- package/src/scripts/_lib/host_listing_model.ts +14 -7
- package/src/scripts/_lib/identifier_redaction.ts +26 -0
- package/src/scripts/_lib/impact_bump.ts +70 -0
- package/src/scripts/_lib/install_reach_checks.ts +53 -1
- package/src/scripts/_lib/installed_layer.ts +31 -0
- package/src/scripts/_lib/installed_layer_normalise.ts +75 -0
- package/src/scripts/_lib/instructions_loaded_classify.ts +75 -0
- package/src/scripts/_lib/instructions_loaded_event.ts +53 -0
- package/src/scripts/_lib/knowledge_global_redaction.ts +2 -2
- package/src/scripts/_lib/layer_form_corpus.ts +165 -0
- package/src/scripts/_lib/layer_form_decision.ts +248 -0
- package/src/scripts/_lib/layer_form_evidence.ts +112 -0
- package/src/scripts/_lib/lean_projection_mode.ts +32 -161
- package/src/scripts/_lib/llm_proposer_transport.ts +1 -0
- package/src/scripts/_lib/loop_guards.ts +8 -120
- package/src/scripts/_lib/major_surface.ts +207 -0
- package/src/scripts/_lib/mcp_bridge.ts +30 -69
- package/src/scripts/_lib/merge_clearance_record.ts +384 -0
- package/src/scripts/_lib/neighbour_census.ts +18 -1
- package/src/scripts/_lib/orchestration_record.ts +61 -0
- package/src/scripts/_lib/outcome_vocabularies.ts +15 -23
- package/src/scripts/_lib/pin_advice.ts +49 -0
- package/src/scripts/_lib/platform_anchor.ts +222 -0
- package/src/scripts/_lib/procedure_checks.ts +5 -0
- package/src/scripts/_lib/project_tree_form.ts +134 -0
- package/src/scripts/_lib/projection_key_migration.ts +122 -0
- package/src/scripts/_lib/prompt_shape.ts +13 -2
- package/src/scripts/_lib/provenance_verify.ts +272 -0
- package/src/scripts/_lib/quota_parked.ts +27 -1
- package/src/scripts/_lib/ratification_artifact.ts +64 -1
- package/src/scripts/_lib/ratification_subject.ts +508 -46
- package/src/scripts/_lib/release_findings_ingest.ts +52 -5
- package/src/scripts/_lib/release_highlights.ts +72 -2
- package/src/scripts/_lib/release_settings_surface.ts +392 -0
- package/src/scripts/_lib/review_round.ts +134 -0
- package/src/scripts/_lib/roadmap_checkboxes.ts +1 -1
- package/src/scripts/_lib/roadmap_slug_lock.ts +254 -0
- package/src/scripts/_lib/roadmap_step_size.ts +75 -0
- package/src/scripts/_lib/run_checkpoint.ts +60 -3
- package/src/scripts/_lib/runtime_wiring_checks.ts +15 -1
- package/src/scripts/_lib/scope_guard.sh +64 -5
- package/src/scripts/_lib/scoped_projection.ts +136 -3
- package/src/scripts/_lib/secret_detector.ts +24 -103
- package/src/scripts/_lib/security_fix.ts +429 -0
- package/src/scripts/_lib/security_fix_context.ts +133 -0
- package/src/scripts/_lib/self_repair.ts +69 -39
- package/src/scripts/_lib/self_repair_outgoing.ts +209 -0
- package/src/scripts/_lib/self_repair_payload.ts +86 -0
- package/src/scripts/_lib/session_eol.ts +3 -0
- package/src/scripts/_lib/session_pr_watch.ts +207 -0
- package/src/scripts/_lib/session_register.ts +51 -1
- package/src/scripts/_lib/session_tag.ts +51 -0
- package/src/scripts/_lib/settings_removed_keys.ts +30 -0
- package/src/scripts/_lib/settings_renamed_keys.ts +19 -5
- package/src/scripts/_lib/skill_catalogue.ts +66 -25
- package/src/scripts/_lib/skill_fork_pilot.ts +121 -0
- package/src/scripts/_lib/skill_leases.ts +203 -0
- package/src/scripts/_lib/skill_listing_overrides.ts +294 -0
- package/src/scripts/_lib/skill_materialisation.ts +388 -0
- package/src/scripts/_lib/skill_materialisation_gate.ts +210 -0
- package/src/scripts/_lib/skill_materialisation_lock.ts +149 -0
- package/src/scripts/_lib/skill_materialisation_triggers.ts +96 -0
- package/src/scripts/_lib/skill_origin.ts +21 -1
- package/src/scripts/_lib/skill_reach.ts +342 -0
- package/src/scripts/_lib/source_shape.ts +7 -2
- package/src/scripts/_lib/sqlite_guard.ts +1 -1
- package/src/scripts/_lib/step_anatomy.ts +330 -0
- package/src/scripts/_lib/subagent_capsule.ts +8 -2
- package/src/scripts/_lib/subagent_native_fields.ts +30 -0
- package/src/scripts/_lib/subagent_spawn.ts +36 -0
- package/src/scripts/_lib/subagent_steering.ts +367 -0
- package/src/scripts/_lib/svg_dom.ts +318 -0
- package/src/scripts/_lib/svg_filled_counter.ts +287 -0
- package/src/scripts/_lib/svg_geometry.ts +480 -0
- package/src/scripts/_lib/svg_motion.ts +208 -0
- package/src/scripts/_lib/svg_rules.ts +1455 -0
- package/src/scripts/_lib/svg_urls.ts +72 -0
- package/src/scripts/_lib/test_delta.ts +89 -6
- package/src/scripts/_lib/tier_downshift_verdict.ts +222 -0
- package/src/scripts/_lib/tool_result_census.ts +62 -0
- package/src/scripts/_lib/trigger_routers.ts +1 -0
- package/src/scripts/_lib/turnaround_throughput.ts +378 -0
- package/src/scripts/_lib/ui_surface.ts +22 -0
- package/src/scripts/_lib/unattended_gates.ts +100 -0
- package/src/scripts/_lib/undeployed_fixes.ts +34 -0
- package/src/scripts/_lib/update_check.ts +143 -12
- package/src/scripts/_lib/update_invite.ts +116 -0
- package/src/scripts/_lib/update_notice.ts +259 -0
- package/src/scripts/_lib/verification_command.ts +59 -0
- package/src/scripts/_lib/verify_clause.ts +31 -19
- package/src/scripts/_lib/version_order.ts +146 -0
- package/src/scripts/_lib/worker_reuse.ts +191 -0
- package/src/scripts/_lib/workspace_secrets.ts +273 -0
- package/src/scripts/_lib/worktree_git.ts +67 -0
- package/src/scripts/_lib/worktree_ignored.ts +116 -0
- package/src/scripts/adoption_status.ts +330 -3
- package/src/scripts/adr_cite_check.ts +93 -0
- package/src/scripts/advisories.ts +803 -0
- package/src/scripts/ai-image/adapters/flux.sh +1 -0
- package/src/scripts/ai-image/adapters/gemini-image.sh +1 -0
- package/src/scripts/ai-image/adapters/ideogram.sh +1 -0
- package/src/scripts/ai-image/adapters/recraft.sh +1 -0
- package/src/scripts/ai-video/adapters/comfyui.sh +1 -0
- package/src/scripts/ai-video/adapters/fal.sh +1 -0
- package/src/scripts/ai-video/adapters/gemini-veo.sh +1 -0
- package/src/scripts/ai-video/adapters/higgsfield.sh +1 -0
- package/src/scripts/ai-video/adapters/kling.sh +1 -0
- package/src/scripts/ai-video/adapters/musetalk.sh +1 -0
- package/src/scripts/ai-video/adapters/openai-images.sh +1 -0
- package/src/scripts/ai-video/adapters/replicate.sh +1 -0
- package/src/scripts/ai-video/adapters/sora.sh +1 -0
- package/src/scripts/ai-video/adapters/syncso.sh +1 -0
- package/src/scripts/ai-video/stitch.sh +115 -2
- package/src/scripts/ai_council/airgap.ts +1 -0
- package/src/scripts/ai_council/api_transport.ts +27 -4
- package/src/scripts/ai_council/budget_guard.ts +300 -11
- package/src/scripts/ai_council/bundler.ts +20 -29
- package/src/scripts/ai_council/chairman.ts +17 -2
- package/src/scripts/ai_council/cli_agency_bounds.ts +158 -0
- package/src/scripts/ai_council/cli_launch_env.ts +54 -0
- package/src/scripts/ai_council/cli_least_agency_canary.ts +18 -2
- package/src/scripts/ai_council/clients.ts +55 -73
- package/src/scripts/ai_council/config.ts +16 -22
- package/src/scripts/ai_council/council_egress.ts +167 -0
- package/src/scripts/ai_council/exposure_ledger.ts +117 -0
- package/src/scripts/ai_council/free_hand_shadow.ts +276 -0
- package/src/scripts/ai_council/free_route.ts +216 -0
- package/src/scripts/ai_council/free_route_catalog.ts +173 -0
- package/src/scripts/ai_council/free_route_client.ts +95 -0
- package/src/scripts/ai_council/free_rung.ts +61 -0
- package/src/scripts/ai_council/hand_payload.ts +230 -0
- package/src/scripts/ai_council/hand_schemas.ts +123 -0
- package/src/scripts/ai_council/jury_aggregate.ts +155 -1
- package/src/scripts/ai_council/kind_flip.ts +221 -0
- package/src/scripts/ai_council/kind_flip_state.ts +19 -0
- package/src/scripts/ai_council/learn_low_impact_preview.ts +50 -22
- package/src/scripts/ai_council/modification_review.ts +98 -5
- package/src/scripts/ai_council/necessity.ts +7 -0
- package/src/scripts/ai_council/orchestrator.ts +16 -16
- package/src/scripts/ai_council/pricing.ts +10 -0
- package/src/scripts/ai_council/redact_low_impact_entry.ts +5 -2
- package/src/scripts/ai_council/response_render.ts +27 -4
- package/src/scripts/ai_council/round_reservations.ts +119 -0
- package/src/scripts/ai_council/route_chooser.ts +161 -0
- package/src/scripts/ai_council/route_liveness.ts +152 -0
- package/src/scripts/ai_council/route_member.ts +52 -0
- package/src/scripts/ai_council/seat_policy.ts +40 -0
- package/src/scripts/ai_council/seat_resume.ts +40 -0
- package/src/scripts/ai_council/shadow_dispatch.ts +13 -3
- package/src/scripts/ai_council/spend_gate.ts +18 -2
- package/src/scripts/ai_council/status_surface.ts +37 -0
- package/src/scripts/ai_council/transport_resolver.ts +15 -18
- package/src/scripts/analysis_analysts.ts +226 -0
- package/src/scripts/analysis_anchors.ts +140 -0
- package/src/scripts/analysis_and_optimize.ts +44 -0
- package/src/scripts/analysis_emit.ts +150 -0
- package/src/scripts/analysis_exchange.ts +186 -0
- package/src/scripts/analysis_gate.ts +158 -0
- package/src/scripts/analysis_inbox_final.ts +173 -0
- package/src/scripts/analysis_ledger.ts +119 -0
- package/src/scripts/analysis_pr_optimize.ts +219 -0
- package/src/scripts/analysis_pr_review.ts +240 -0
- package/src/scripts/analysis_pr_target.ts +121 -0
- package/src/scripts/analysis_prompts.ts +130 -0
- package/src/scripts/analysis_publish.ts +358 -0
- package/src/scripts/analysis_questions.ts +78 -0
- package/src/scripts/analysis_run.ts +248 -0
- package/src/scripts/analysis_run_record.ts +210 -0
- package/src/scripts/analysis_target.ts +343 -0
- package/src/scripts/analysis_validate.ts +161 -0
- package/src/scripts/anchor_eval_falsify.ts +1 -1
- package/src/scripts/arrival_report.ts +115 -0
- package/src/scripts/ask_transport.ts +284 -35
- package/src/scripts/backfill_model_tier.ts +4 -5
- package/src/scripts/before_complete_hook.ts +48 -2
- package/src/scripts/bench_hook_latency.ts +3 -3
- package/src/scripts/bench_procedure_cursor.ts +440 -0
- package/src/scripts/bootstrap.sh +3 -3
- package/src/scripts/build_exit_code_register.ts +440 -0
- package/src/scripts/build_proof.ts +23 -1
- package/src/scripts/cache_realization_report.ts +155 -14
- package/src/scripts/canary_liveness.ts +117 -0
- package/src/scripts/chat_history.ts +12 -15
- package/src/scripts/check_account_surface.ts +318 -0
- package/src/scripts/check_agent_artifact_location.ts +17 -160
- package/src/scripts/check_bundle_path_leakage.ts +6 -0
- package/src/scripts/check_ci_local_parity.ts +21 -13
- package/src/scripts/check_claims.ts +77 -2
- package/src/scripts/check_completion_review.ts +34 -1
- package/src/scripts/check_concern_admissions.ts +41 -5
- package/src/scripts/check_consumer_scope_flip.ts +1 -1
- package/src/scripts/check_context_paths.ts +2 -0
- package/src/scripts/check_council_layout.ts +9 -0
- package/src/scripts/check_credential_spelling.ts +267 -0
- package/src/scripts/check_egress_mutations.ts +239 -0
- package/src/scripts/check_enforcement_coverage.ts +16 -3
- package/src/scripts/check_estate_count.ts +16 -1
- package/src/scripts/check_finding_dispositions.ts +147 -0
- package/src/scripts/check_gate_coverage.ts +123 -21
- package/src/scripts/check_gate_reachability.ts +16 -2
- package/src/scripts/check_generator_sync.ts +46 -0
- package/src/scripts/check_hook_bundle_composition.ts +139 -1
- package/src/scripts/check_host_docs_digest.ts +142 -5
- package/src/scripts/check_kernel_edit_ratified.ts +301 -76
- package/src/scripts/check_kernel_rule_bundle.ts +14 -10
- package/src/scripts/check_knowledge_cards.ts +83 -3
- package/src/scripts/check_memory.ts +13 -3
- package/src/scripts/check_pack_size.ts +1 -1
- package/src/scripts/check_permission_deny_syntax.ts +247 -0
- package/src/scripts/check_platform_anchor.ts +243 -0
- package/src/scripts/check_proposal.ts +183 -1
- package/src/scripts/check_reach_channels.ts +5 -3
- package/src/scripts/check_references.ts +5 -2
- package/src/scripts/check_release_manifest_content.ts +33 -0
- package/src/scripts/check_release_pr_shape.ts +5 -0
- package/src/scripts/check_rule_invariants.ts +9 -1
- package/src/scripts/check_skill_body_budget.ts +343 -0
- package/src/scripts/check_skill_requires.ts +137 -1
- package/src/scripts/check_step_receipts.ts +246 -0
- package/src/scripts/check_structural_breaking.ts +7 -1
- package/src/scripts/check_suppression_hygiene.ts +8 -0
- package/src/scripts/check_test_weakening.ts +14 -0
- package/src/scripts/check_token_quality_golden.ts +5 -1
- package/src/scripts/check_update_banner.ts +50 -3
- package/src/scripts/check_verify_expectation_delta.ts +2 -1
- package/src/scripts/check_voice_lexicon.ts +531 -0
- package/src/scripts/ci_os_attribution.ts +327 -0
- package/src/scripts/ci_platform_scope.ts +69 -0
- package/src/scripts/ci_settle.ts +4 -1
- package/src/scripts/ci_status.ts +0 -1
- package/src/scripts/ci_time_to_green.ts +748 -0
- package/src/scripts/classify_merge_risk.ts +407 -19
- package/src/scripts/code_graph/sqlite_store.ts +1 -1
- package/src/scripts/compile_trigger_evals.ts +353 -0
- package/src/scripts/condense.ts +25 -31
- package/src/scripts/consumer_matrix.ts +61 -3
- package/src/scripts/council_availability_hook.ts +12 -4
- package/src/scripts/council_cli.ts +48 -38
- package/src/scripts/cross_repo_retrieve.ts +9 -72
- package/src/scripts/design_lock.ts +106 -0
- package/src/scripts/design_slop_rules.ts +30 -0
- package/src/scripts/design_sync.ts +264 -0
- package/src/scripts/design_system_import.ts +30 -13
- package/src/scripts/dispatch_economy_report.ts +46 -1
- package/src/scripts/dispatch_r2_reviewer.ts +41 -5
- package/src/scripts/egress_canary.ts +166 -0
- package/src/scripts/egress_sender_census.ts +101 -0
- package/src/scripts/external_sources_denylist.json +94 -12
- package/src/scripts/generate_catalog.ts +6 -2
- package/src/scripts/generate_owned_digest.ts +163 -0
- package/src/scripts/generate_reference_toc.ts +143 -0
- package/src/scripts/generate_subagent_floor.ts +11 -1
- package/src/scripts/handoff_context_hook.ts +34 -0
- package/src/scripts/hook_carrier_census.ts +263 -0
- package/src/scripts/hook_chunks.d.mts +12 -0
- package/src/scripts/hook_chunks.mjs +114 -0
- package/src/scripts/hook_manifest.json +1 -1
- package/src/scripts/hook_manifest.yaml +65 -42
- package/src/scripts/hooks/block_config_weakening.ts +127 -3
- package/src/scripts/hooks/block_credential_reads.ts +165 -0
- package/src/scripts/hooks/block_no_verify.ts +47 -23
- package/src/scripts/hooks/block_speaking_inbox_dir.ts +54 -8
- package/src/scripts/hooks/category_a.ts +202 -25
- package/src/scripts/hooks/concern_failure_policy.ts +6 -6
- package/src/scripts/hooks/concern_registry.ts +31 -6
- package/src/scripts/hooks/concern_registry_types.ts +11 -0
- package/src/scripts/hooks/delegation_nudge_hook.ts +105 -15
- package/src/scripts/hooks/design_pass_hook.ts +199 -13
- package/src/scripts/hooks/dispatch_hook.ts +13 -12
- package/src/scripts/hooks/egress_engine_loader.ts +125 -0
- package/src/scripts/hooks/egress_stage.ts +440 -0
- package/src/scripts/hooks/hook_stdin.ts +29 -4
- package/src/scripts/hooks/host_docs_pages.ts +194 -0
- package/src/scripts/hooks/host_docs_pages.yaml +75 -0
- package/src/scripts/hooks/host_lowering.json +1 -1
- package/src/scripts/hooks/host_lowering.yaml +22 -21
- package/src/scripts/hooks/host_rate_marker_hook.ts +73 -0
- package/src/scripts/hooks/instructions_observer_hook.ts +170 -0
- package/src/scripts/hooks/interruption_ledger_hook.ts +1 -1
- package/src/scripts/hooks/lazy_concern.ts +148 -0
- package/src/scripts/hooks/orchestration_record_hook.ts +80 -2
- package/src/scripts/hooks/payload_stub.ts +16 -6
- package/src/scripts/hooks/permission_gate.ts +7 -7
- package/src/scripts/hooks/push_settle_hook.ts +32 -3
- package/src/scripts/hooks/replay_hook.ts +43 -0
- package/src/scripts/hooks/reread_guard_hook.ts +87 -10
- package/src/scripts/hooks/rtk_wrap_hook.ts +4 -3
- package/src/scripts/hooks/rule_inject_hook.ts +8 -1
- package/src/scripts/hooks/session_eol_hook.ts +48 -1
- package/src/scripts/hooks/source_first_gate_hook.ts +6 -8
- package/src/scripts/hooks/spawn_guard_shadow_hook.ts +203 -10
- package/src/scripts/hooks/state_io.ts +2 -2
- package/src/scripts/hooks/svg_obligation.ts +553 -0
- package/src/scripts/hooks/svg_rules_loader.ts +133 -0
- package/src/scripts/hooks/tool_result_bytes_hook.ts +14 -5
- package/src/scripts/hooks/turn_end_gate_hook.ts +5 -3
- package/src/scripts/hooks/ui_route_nudge_hook.ts +2 -12
- package/src/scripts/hooks_doctor.ts +31 -0
- package/src/scripts/hooks_status.ts +58 -3
- package/src/scripts/inbox_source_census.ts +74 -13
- package/src/scripts/install +25 -3
- package/src/scripts/install.ts +60 -91
- package/src/scripts/interruption_report.ts +11 -1
- package/src/scripts/layer_baseline_report.ts +267 -0
- package/src/scripts/learning_sidecar.ts +1 -1
- package/src/scripts/lint_agents_layout.ts +3 -0
- package/src/scripts/lint_blocker_citations.ts +104 -0
- package/src/scripts/lint_breaking_changes_index.ts +40 -7
- package/src/scripts/lint_consolidation_lineage.ts +150 -19
- package/src/scripts/lint_consumer_internal_refs.ts +90 -42
- package/src/scripts/lint_context_spine_usage.ts +21 -0
- package/src/scripts/lint_design_antipattern_parity.ts +39 -7
- package/src/scripts/lint_design_quality.ts +60 -12
- package/src/scripts/lint_evidence_artifacts.ts +31 -0
- package/src/scripts/lint_example_fences.ts +11 -2
- package/src/scripts/lint_ghostwriter_source.ts +42 -10
- package/src/scripts/lint_hook_manifest.ts +94 -0
- package/src/scripts/lint_marketplace_install_completeness.ts +4 -0
- package/src/scripts/lint_mcp_config_security.ts +9 -11
- package/src/scripts/lint_motion_authority_drift.ts +27 -0
- package/src/scripts/lint_plan_risk_register.ts +28 -1
- package/src/scripts/lint_positioning.ts +4 -4
- package/src/scripts/lint_provenance.ts +1 -0
- package/src/scripts/lint_roadmap_blockers.ts +65 -4
- package/src/scripts/lint_roadmap_complexity.ts +98 -0
- package/src/scripts/lint_skill_link_reach.ts +251 -9
- package/src/scripts/lint_skill_procedures.ts +252 -0
- package/src/scripts/lint_skill_scripts_readonly.ts +12 -1
- package/src/scripts/lint_subagent_determinism.ts +14 -1
- package/src/scripts/lint_svg_asset.ts +365 -0
- package/src/scripts/lint_ticked_unmet_criteria.ts +300 -21
- package/src/scripts/mcp_registry_submit.sh +2 -2
- package/src/scripts/mcp_server/consumer_tool_catalog.json +4 -4
- package/src/scripts/mcp_server/suggest_skill.ts +89 -4
- package/src/scripts/mcp_server/tools.ts +2 -33
- package/src/scripts/measure_skill_ranker_baseline.ts +203 -5
- package/src/scripts/measure_turn_end_gate.ts +61 -1
- package/src/scripts/merge_clearance.ts +225 -0
- package/src/scripts/migrate_command_suggestions.ts +1 -1
- package/src/scripts/network_sources.ts +236 -0
- package/src/scripts/no_go_deny_rows.ts +225 -0
- package/src/scripts/orchestration_record.ts +15 -2
- package/src/scripts/plan_test_shards.ts +103 -0
- package/src/scripts/pr_url_reminder_hook.ts +10 -0
- package/src/scripts/print_required_checks.ts +5 -5
- package/src/scripts/probe_depth_shadow.ts +406 -0
- package/src/scripts/probe_turnaround.ts +342 -10
- package/src/scripts/ratification_subject.ts +176 -0
- package/src/scripts/rdp_gate_classify.ts +1 -0
- package/src/scripts/rdp_quality_eval.ts +1 -0
- package/src/scripts/release.ts +26 -55
- package/src/scripts/release_drill.ts +52 -23
- package/src/scripts/release_env.ts +37 -0
- package/src/scripts/release_publication.ts +11 -1
- package/src/scripts/report_consumer_gate_reach.ts +233 -0
- package/src/scripts/report_merge_gate_load.ts +295 -0
- package/src/scripts/report_project_contract.ts +123 -0
- package/src/scripts/report_reducible_classes.ts +342 -0
- package/src/scripts/report_required_checks_drift.ts +5 -3
- package/src/scripts/report_skill_host_census.ts +199 -0
- package/src/scripts/report_standing_payload_by_host.ts +7 -7
- package/src/scripts/retro.ts +758 -0
- package/src/scripts/retro_facts.ts +575 -0
- package/src/scripts/retro_queue.ts +739 -0
- package/src/scripts/retro_session_facts.ts +218 -0
- package/src/scripts/retro_sweep.ts +493 -0
- package/src/scripts/retro_triage.ts +126 -0
- package/src/scripts/roadmap_context.ts +2 -2
- package/src/scripts/roadmap_drain_queue.ts +601 -0
- package/src/scripts/run_supervise.ts +24 -2
- package/src/scripts/schemas/agent-settings.schema.json +0 -16
- package/src/scripts/schemas/command.schema.json +3 -3
- package/src/scripts/schemas/review-findings.schema.json +8 -0
- package/src/scripts/schemas/skill.schema.json +7 -6
- package/src/scripts/schemas/subagent.schema.json +33 -2
- package/src/scripts/score_skill_selection.ts +5 -2
- package/src/scripts/second_brain_retrieval.ts +1 -0
- package/src/scripts/second_brain_run.ts +1 -0
- package/src/scripts/self_repair_cli.ts +563 -87
- package/src/scripts/self_review_gate.ts +59 -4
- package/src/scripts/session_register_hook.ts +91 -4
- package/src/scripts/sessions_cli.ts +100 -5
- package/src/scripts/skill_collision_clusters.ts +1 -1
- package/src/scripts/skill_tools/score_skill_relevance.ts +31 -2
- package/src/scripts/skill_trigger_eval.ts +4 -2
- package/src/scripts/source_adapters.ts +183 -0
- package/src/scripts/step_receipt.ts +100 -0
- package/src/scripts/sync_pr_branch.ts +4 -0
- package/src/scripts/test_council_qualification.ts +1 -1
- package/src/scripts/trigger_eval_grandfather.json +3 -49
- package/src/scripts/trigger_eval_rotation.ts +31 -3
- package/src/scripts/ui_conformance_probe.ts +405 -1
- package/src/scripts/update_counts.ts +230 -11
- package/src/scripts/update_invite_hook.ts +245 -0
- package/src/scripts/update_notice_hook.ts +298 -0
- package/src/scripts/validate_frontmatter.ts +85 -0
- package/src/scripts/worker_reuse_shadow_report.ts +121 -0
- package/src/scripts/worktree_cleanup_check.ts +915 -121
- package/src/server/io/yamlIO.ts +2 -2
- package/src/server/schemas/settings.ts +37 -23
- package/src/shared/brandTokenDocument.ts +46 -0
- package/src/shared/brandTokenPaths.ts +43 -0
- package/src/shared/settingsCarveOut.ts +0 -8
- package/src/shared/skillRanking.ts +106 -5
- package/src/shared/userMd/formAdapter.ts +15 -1
- package/src/shared/userMd/schema.ts +22 -0
- package/src/templates/agent-user.md +4 -0
- package/src/templates/agent-user.yml +4 -0
- package/dist/cli-delegate/chunk-523HCFYO.js +0 -90
- package/dist/cli-delegate/chunk-AL3RZ22D.js +0 -74
- package/dist/cli-delegate/chunk-KB5FZ655.js +0 -208
- package/dist/cli-delegate/chunk-MDPPKQCQ.js +0 -875
- package/dist/cli-delegate/chunk-MSUL5NYP.js +0 -1123
- package/dist/cli-delegate/chunk-OAFSJBHH.js +0 -272
- package/dist/ui/assets/index-C3djEJah.js +0 -23
- package/src/scripts/_lib/continuation_ladder.ts +0 -335
- package/src/scripts/hooks/run_continuation_hook.ts +0 -1524
|
@@ -68,7 +68,8 @@ import * as fs from 'node:fs';
|
|
|
68
68
|
import * as path from 'node:path';
|
|
69
69
|
import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
70
70
|
|
|
71
|
-
import {
|
|
71
|
+
import { TIER_TO_CLAUDE_MODEL } from '../_lib/model_tier.js';
|
|
72
|
+
import { buildOrchestrationLine, type RecordInput, type TierChosen } from '../_lib/orchestration_record.js';
|
|
72
73
|
import { DEFAULT_DIR } from '../orchestration_record.js';
|
|
73
74
|
import { is_replay_mode } from './state_io.js';
|
|
74
75
|
import { readHookStdin } from './hook_stdin.js';
|
|
@@ -137,6 +138,10 @@ export interface DispatchFacts {
|
|
|
137
138
|
returnChannelChars: number | null;
|
|
138
139
|
isAsync: boolean;
|
|
139
140
|
isError: boolean;
|
|
141
|
+
/** The per-call `model` argument of the dispatch, verbatim; null when it carried none. */
|
|
142
|
+
requestedModel?: string | null;
|
|
143
|
+
/** The model id of the head's latest assistant call, read from its transcript tail. */
|
|
144
|
+
sessionModel?: string | null;
|
|
140
145
|
}
|
|
141
146
|
|
|
142
147
|
function numOrNull(v: JsonValue | undefined): number | null {
|
|
@@ -215,9 +220,71 @@ export function extractDispatchFacts(payload: JsonObject): DispatchFacts {
|
|
|
215
220
|
}
|
|
216
221
|
}
|
|
217
222
|
|
|
218
|
-
|
|
223
|
+
const requestedModel = input && typeof input['model'] === 'string' && input['model'] ? (input['model'] as string) : null;
|
|
224
|
+
const sessionModel = lastAssistantModel(payload['transcript_path']);
|
|
225
|
+
|
|
226
|
+
return {
|
|
227
|
+
subagentType,
|
|
228
|
+
resolvedModel,
|
|
229
|
+
totalTokens,
|
|
230
|
+
totalDurationMs,
|
|
231
|
+
returnChannelChars,
|
|
232
|
+
isAsync,
|
|
233
|
+
isError,
|
|
234
|
+
requestedModel,
|
|
235
|
+
sessionModel,
|
|
236
|
+
};
|
|
219
237
|
}
|
|
220
238
|
|
|
239
|
+
const TRANSCRIPT_TAIL_BYTES = 256 * 1024;
|
|
240
|
+
|
|
241
|
+
/**
|
|
242
|
+
* The `model` of the last assistant line in a host transcript, read from its
|
|
243
|
+
* tail only. The path is host-supplied: anything but an existing `.jsonl`
|
|
244
|
+
* regular file is not read, and only a model id leaves this function.
|
|
245
|
+
*/
|
|
246
|
+
function lastAssistantModel(transcriptPath: JsonValue | undefined): string | null {
|
|
247
|
+
if (typeof transcriptPath !== 'string' || !path.isAbsolute(transcriptPath) || !transcriptPath.endsWith('.jsonl')) {
|
|
248
|
+
return null;
|
|
249
|
+
}
|
|
250
|
+
let fd: number | null = null;
|
|
251
|
+
try {
|
|
252
|
+
const st = fs.statSync(transcriptPath);
|
|
253
|
+
if (!st.isFile()) return null;
|
|
254
|
+
const len = Math.min(st.size, TRANSCRIPT_TAIL_BYTES);
|
|
255
|
+
const buf = Buffer.alloc(len);
|
|
256
|
+
fd = fs.openSync(transcriptPath, 'r');
|
|
257
|
+
fs.readSync(fd, buf, 0, len, st.size - len);
|
|
258
|
+
const lines = buf.toString('utf8').split('\n');
|
|
259
|
+
for (let i = lines.length - 1; i >= 0; i--) {
|
|
260
|
+
const line = lines[i]!;
|
|
261
|
+
if (!line.includes('"assistant"')) continue;
|
|
262
|
+
try {
|
|
263
|
+
const rec = JSON.parse(line) as JsonObject;
|
|
264
|
+
const msg = rec['message'];
|
|
265
|
+
if (rec['type'] === 'assistant' && isObject(msg) && typeof msg['model'] === 'string') return msg['model'];
|
|
266
|
+
} catch {
|
|
267
|
+
// A line cut by the tail window, or not JSON.
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
} catch {
|
|
271
|
+
return null;
|
|
272
|
+
} finally {
|
|
273
|
+
if (fd !== null) fs.closeSync(fd);
|
|
274
|
+
}
|
|
275
|
+
return null;
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
/** The tier whose model family a model id or alias names, via the one tier→model map. */
|
|
279
|
+
function tierForModel(model: string | null | undefined): string | null {
|
|
280
|
+
if (model == null) return null;
|
|
281
|
+
const family = extractModelFamily(model);
|
|
282
|
+
if (family === null) return null;
|
|
283
|
+
return Object.entries(TIER_TO_CLAUDE_MODEL).find(([, m]) => m === family)?.[0] ?? null;
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
const CHOSEN_TIERS: readonly string[] = ['lite', 'medium', 'high'];
|
|
287
|
+
|
|
221
288
|
/**
|
|
222
289
|
* Build the `RecordInput` for one dispatch-completion event. Pure — no I/O,
|
|
223
290
|
* no `Date.now()` / random call inside (both are supplied by the caller so
|
|
@@ -238,6 +305,17 @@ export function buildRecordInput(facts: DispatchFacts, ts: string, id: string):
|
|
|
238
305
|
id,
|
|
239
306
|
};
|
|
240
307
|
if (facts.subagentType) input.agent_combo = [facts.subagentType];
|
|
308
|
+
|
|
309
|
+
const requestedTier = tierForModel(facts.requestedModel);
|
|
310
|
+
if (facts.requestedModel != null) input.model_requested = facts.requestedModel;
|
|
311
|
+
if (requestedTier !== null && CHOSEN_TIERS.includes(requestedTier)) {
|
|
312
|
+
input.tier_chosen = requestedTier as TierChosen;
|
|
313
|
+
input.tier_source = 'static';
|
|
314
|
+
} else if (facts.requestedModel == null) {
|
|
315
|
+
input.tier_source = 'inherit';
|
|
316
|
+
}
|
|
317
|
+
const sessionTier = tierForModel(facts.sessionModel);
|
|
318
|
+
if (sessionTier !== null) input.session_tier = sessionTier;
|
|
241
319
|
if (facts.isError) input.dispatch_outcome = 'killed';
|
|
242
320
|
|
|
243
321
|
if (!facts.isAsync) {
|
|
@@ -389,8 +389,11 @@ export function _concern_body_classes(concern: JsonObject): Set<BodyClass> {
|
|
|
389
389
|
|
|
390
390
|
/** The per-dispatch shaping plan. Built once, read per concern. */
|
|
391
391
|
export interface PayloadShapePlan {
|
|
392
|
-
/**
|
|
393
|
-
|
|
392
|
+
/**
|
|
393
|
+
* The envelope a concern with this keep-set receives, built from the
|
|
394
|
+
* placeholder view when one was planned and `view` asks for it.
|
|
395
|
+
*/
|
|
396
|
+
shapeFor(keep: ReadonlySet<BodyClass>, view?: "execution" | "placeholder"): JsonObject;
|
|
394
397
|
/** How many payload keys were omitted for that concern. */
|
|
395
398
|
stubsFor(keep: ReadonlySet<BodyClass>): number;
|
|
396
399
|
/** The classes actually SERVED — declared AND present. Sorted. */
|
|
@@ -416,10 +419,16 @@ export interface PayloadShapePlan {
|
|
|
416
419
|
* Extracted from the dispatcher loop rather than inlined there: the decision
|
|
417
420
|
* has four moving parts that are only correct together, and the source-size
|
|
418
421
|
* ratchet was right to object to a dispatcher carrying them.
|
|
422
|
+
*
|
|
423
|
+
* `placeholder` is the egress stage's placeholder view of the same envelope.
|
|
424
|
+
* Presence and byte lengths are always read from the received envelope, so a
|
|
425
|
+
* stub reports the size the host sent whichever view it was cut from; only
|
|
426
|
+
* the body that survives differs between the two views.
|
|
419
427
|
*/
|
|
420
428
|
export function planPayloadShapes(
|
|
421
429
|
envelope: JsonObject,
|
|
422
430
|
keepSets: Iterable<ReadonlySet<BodyClass>>,
|
|
431
|
+
placeholder?: JsonObject,
|
|
423
432
|
): PayloadShapePlan {
|
|
424
433
|
const present = presentBodyClasses(envelope);
|
|
425
434
|
const stubbedSomewhere = new Set<BodyClass>();
|
|
@@ -436,12 +445,13 @@ export function planPayloadShapes(
|
|
|
436
445
|
const cacheKey = (keep: ReadonlySet<BodyClass>): string =>
|
|
437
446
|
[...keep].sort().join(",");
|
|
438
447
|
return {
|
|
439
|
-
shapeFor(keep) {
|
|
440
|
-
|
|
441
|
-
|
|
448
|
+
shapeFor(keep, view = "execution") {
|
|
449
|
+
const base = view === "placeholder" && placeholder !== undefined ? placeholder : envelope;
|
|
450
|
+
if (present.size === 0) return base;
|
|
451
|
+
const key = `${base === envelope ? "execution" : "placeholder"}:${cacheKey(keep)}`;
|
|
442
452
|
const hit = shaped.get(key);
|
|
443
453
|
if (hit !== undefined) return hit;
|
|
444
|
-
const built = stubPayloadBodies(
|
|
454
|
+
const built = stubPayloadBodies(base, keep, measured);
|
|
445
455
|
shaped.set(key, built);
|
|
446
456
|
return built;
|
|
447
457
|
},
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
* concerns and reduces exit codes, this module reads the result and decides
|
|
15
15
|
* what the host is told about permission.
|
|
16
16
|
*/
|
|
17
|
-
import {
|
|
17
|
+
import { categoryAVerdict, type ToolInput } from "./category_a.js";
|
|
18
18
|
import {
|
|
19
19
|
composePermissionDecision,
|
|
20
20
|
type PermissionDecision,
|
|
@@ -104,13 +104,13 @@ export function _permission_for(
|
|
|
104
104
|
if (final_rc !== EXIT_ALLOW) return null;
|
|
105
105
|
if (composePermissionDecision(verdicts) !== "allow") return null;
|
|
106
106
|
const tool_name = _payload_tool_name(envelope);
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
107
|
+
const verdict = categoryAVerdict(tool_name, _payload_tool_input(envelope), _working_tree_root(envelope));
|
|
108
|
+
if (!verdict.categoryA) return null;
|
|
109
|
+
// The reason may only name a check that ran for this call: a bare `pwd`
|
|
110
|
+
// had no path argument to confine, so it must not claim it was confined.
|
|
111
|
+
const where = verdict.confined ? " inside the working tree" : ", no path argument to confine";
|
|
110
112
|
return {
|
|
111
113
|
decision: "allow",
|
|
112
|
-
reason:
|
|
113
|
-
`agent-config: category-A ${tool_name} inside the working tree — ` +
|
|
114
|
-
`no concern gates it and none asked to.`,
|
|
114
|
+
reason: `agent-config: category-A ${tool_name}${where} — no concern gates it and none asked to.`,
|
|
115
115
|
};
|
|
116
116
|
}
|
|
@@ -55,6 +55,7 @@ import { execFileSync } from "node:child_process";
|
|
|
55
55
|
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
56
56
|
import { readHookStdin } from "./hook_stdin.js";
|
|
57
57
|
import { EXIT_ALLOW, EXIT_WARN } from './exit_codes.js';
|
|
58
|
+
import { writeMergeMarker } from "../retro_queue.js";
|
|
58
59
|
|
|
59
60
|
type JsonValue = string | number | boolean | null | JsonValue[] | { [k: string]: JsonValue };
|
|
60
61
|
type JsonObject = { [k: string]: JsonValue };
|
|
@@ -171,13 +172,21 @@ export function resolvePr(
|
|
|
171
172
|
}
|
|
172
173
|
}
|
|
173
174
|
|
|
175
|
+
/**
|
|
176
|
+
* How a consumer reaches the waiter. A project-local install puts the binary in
|
|
177
|
+
* `node_modules/.bin`, which is not on an ordinary shell's PATH; `npm exec --no`
|
|
178
|
+
* resolves that, a global install and the package's own checkout alike, and
|
|
179
|
+
* `--no` refuses to fetch an unrelated registry package named `agent-config`.
|
|
180
|
+
*/
|
|
181
|
+
export const CI_SETTLE_INVOCATION = "npm exec --no -- agent-config ci:settle";
|
|
182
|
+
|
|
174
183
|
/** The reminder text. Split out so the test can read it without a `gh` on PATH. */
|
|
175
184
|
export function buildReminder(branch: string, pr: number | null): { reason: string; additional_context: string } {
|
|
176
185
|
const settle =
|
|
177
186
|
pr === null
|
|
178
187
|
? `gh pr view ${branch} --json number -q .number # then:\n` +
|
|
179
|
-
|
|
180
|
-
:
|
|
188
|
+
`${CI_SETTLE_INVOCATION} <that number>`
|
|
189
|
+
: `${CI_SETTLE_INVOCATION} ${pr}`;
|
|
181
190
|
const subject = pr === null ? `branch ${branch}` : `PR #${pr} (${branch})`;
|
|
182
191
|
const reason =
|
|
183
192
|
`Pushed ${subject} — the turn is not finished until its CI has settled green ` +
|
|
@@ -205,6 +214,24 @@ export function buildReminder(branch: string, pr: number | null): { reason: stri
|
|
|
205
214
|
return { reason, additional_context };
|
|
206
215
|
}
|
|
207
216
|
|
|
217
|
+
/**
|
|
218
|
+
* Path B of the retro (`docs/contracts/retro-v1.md`): a push that resolved a
|
|
219
|
+
* PR leaves a marker, so a later merge through the web UI, by automerge or by
|
|
220
|
+
* someone else is found by the daily probe even though no session existed at
|
|
221
|
+
* merge time. Off with `retro.enabled: false`; best effort, never a block.
|
|
222
|
+
*/
|
|
223
|
+
export function recordMergeMarker(envelope: JsonObject, pr: number | null, branch: string): void {
|
|
224
|
+
if (pr === null) return;
|
|
225
|
+
const root = typeof envelope["workspace_root"] === "string" && envelope["workspace_root"] !== ""
|
|
226
|
+
? envelope["workspace_root"]
|
|
227
|
+
: process.cwd();
|
|
228
|
+
try {
|
|
229
|
+
writeMergeMarker(root, { pr, branch }, new Date().toISOString());
|
|
230
|
+
} catch {
|
|
231
|
+
// a marker that cannot be written costs one retro, never the push reminder
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
|
|
208
235
|
export function main(): number {
|
|
209
236
|
let envelope: JsonValue;
|
|
210
237
|
try {
|
|
@@ -225,7 +252,9 @@ export function main(): number {
|
|
|
225
252
|
const branch = pushedBranch(toolOutput(inner));
|
|
226
253
|
if (branch === null) return EXIT_ALLOW; // up-to-date, rejected, delete — nothing advanced
|
|
227
254
|
|
|
228
|
-
const
|
|
255
|
+
const pr = resolvePr(branch);
|
|
256
|
+
recordMergeMarker(envelope, pr, branch);
|
|
257
|
+
const { reason, additional_context } = buildReminder(branch, pr);
|
|
229
258
|
process.stdout.write(`${JSON.stringify({ decision: "warn", reason, additional_context })}\n`);
|
|
230
259
|
return EXIT_WARN;
|
|
231
260
|
}
|
|
@@ -37,6 +37,15 @@ import fs from "node:fs";
|
|
|
37
37
|
import path from "node:path";
|
|
38
38
|
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
39
39
|
import { EXIT_USAGE } from './exit_codes.js';
|
|
40
|
+
import {
|
|
41
|
+
countEnvelope,
|
|
42
|
+
ENGINE_UNAVAILABLE,
|
|
43
|
+
readEgressMode,
|
|
44
|
+
type EgressCount,
|
|
45
|
+
type EgressMode,
|
|
46
|
+
type EgressRefusal,
|
|
47
|
+
} from "./egress_stage.js";
|
|
48
|
+
import type { JsonObject } from "./payload_stub.js";
|
|
40
49
|
|
|
41
50
|
// src/scripts/hooks/replay_hook.ts → parents[3] is the repo root.
|
|
42
51
|
const REPO_ROOT = path.resolve(
|
|
@@ -208,6 +217,8 @@ export function main(argv?: string[]): number {
|
|
|
208
217
|
return 2;
|
|
209
218
|
}
|
|
210
219
|
|
|
220
|
+
const egress = _egressPreview(decoded);
|
|
221
|
+
|
|
211
222
|
const env = { ...process.env };
|
|
212
223
|
env[REPLAY_ENV_VAR] = "1";
|
|
213
224
|
|
|
@@ -253,6 +264,7 @@ export function main(argv?: string[]): number {
|
|
|
253
264
|
dispatcher_stdout: (proc.stdout || "").trim(),
|
|
254
265
|
dispatcher_stderr: (proc.stderr || "").trim(),
|
|
255
266
|
replay_mode: true,
|
|
267
|
+
egress,
|
|
256
268
|
};
|
|
257
269
|
process.stdout.write(_py_json_dumps(summary, 2) + "\n");
|
|
258
270
|
} else {
|
|
@@ -267,10 +279,41 @@ export function main(argv?: string[]): number {
|
|
|
267
279
|
`payload=${path.basename(payload_path)} rc=${returncode} ` +
|
|
268
280
|
`(AGENT_CONFIG_REPLAY=1, no writes)\n`,
|
|
269
281
|
);
|
|
282
|
+
const found = egress.counts.map((c) => `${c.field}:${c.type}×${c.count}`).join(" ") || "nothing";
|
|
283
|
+
process.stderr.write(
|
|
284
|
+
`replay_hook: egress mode=${egress.mode} action=${egress.action} found=${found}` +
|
|
285
|
+
(egress.refused.length > 0 ? ` refused=${egress.refused.map((x) => x.rule).join(",")}` : "") +
|
|
286
|
+
"\n",
|
|
287
|
+
);
|
|
270
288
|
}
|
|
271
289
|
return returncode;
|
|
272
290
|
}
|
|
273
291
|
|
|
292
|
+
/**
|
|
293
|
+
* What the egress stage would do with this payload under the workspace's
|
|
294
|
+
* mode: counts and refusals by type, never a value. Pure — no state written.
|
|
295
|
+
*/
|
|
296
|
+
export function _egressPreview(decoded: unknown): {
|
|
297
|
+
mode: EgressMode;
|
|
298
|
+
action: "none" | "count" | "replace";
|
|
299
|
+
counts: readonly EgressCount[];
|
|
300
|
+
refused: readonly EgressRefusal[];
|
|
301
|
+
} {
|
|
302
|
+
const mode = readEgressMode(process.cwd());
|
|
303
|
+
const isObj = decoded !== null && typeof decoded === "object" && !Array.isArray(decoded);
|
|
304
|
+
let counted: Pick<ReturnType<typeof countEnvelope>, "counts" | "refused"> = { counts: [], refused: [] };
|
|
305
|
+
if (isObj) {
|
|
306
|
+
try {
|
|
307
|
+
counted = countEnvelope({ payload: decoded as JsonObject });
|
|
308
|
+
} catch {
|
|
309
|
+
// The engine did not load: say so rather than reporting zero findings.
|
|
310
|
+
counted = { counts: [], refused: [{ field: "prompt", rule: ENGINE_UNAVAILABLE }] };
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
const action = mode === "off" ? "none" : mode === "observe" ? "count" : "replace";
|
|
314
|
+
return { mode, action, counts: counted.counts, refused: counted.refused };
|
|
315
|
+
}
|
|
316
|
+
|
|
274
317
|
// Python json.dumps(summary, indent=2) byte-for-byte (ensure_ascii=True).
|
|
275
318
|
function _py_json_dumps(value: unknown, indent: number): string {
|
|
276
319
|
const pad = " ".repeat(indent);
|
|
@@ -6,7 +6,9 @@
|
|
|
6
6
|
* Two signals, one session-scoped read ledger:
|
|
7
7
|
*
|
|
8
8
|
* 6.1 A full-file `Read` of a path that was ALREADY fully read this session
|
|
9
|
-
* AND is unchanged since (
|
|
9
|
+
* AND whose content is unchanged since (sha256 compare against the
|
|
10
|
+
* ledger; above HASH_BOUND_BYTES, mtime + size, said so in the line; a
|
|
11
|
+
* file under the bound without both digests never fires) gets
|
|
10
12
|
* one advisory line naming the earlier read and the ranged-read
|
|
11
13
|
* alternative. A ranged read (any `offset`/`limit` in the tool input)
|
|
12
14
|
* is already the cheap form and never fires — nor is it recorded as a
|
|
@@ -21,8 +23,8 @@
|
|
|
21
23
|
* `<workspace_root>/agents/runtime/state/reread-guard/<sha256(session)>.json`
|
|
22
24
|
* (gitignored — `agents/runtime/` is blanket-ignored), keyed by session id
|
|
23
25
|
* the same way `end_review_nudge_hook.deriveSessionKey` does (hashed, never
|
|
24
|
-
* raw). Per path it stores `{mtime, size, ts}` for reads, a `ts` for the last
|
|
25
|
-
* own write, and a per-path fired flag — NO field can hold file content, by
|
|
26
|
+
* raw). Per path it stores `{mtime, size, ts, sha256?}` for reads, a `ts` for the last
|
|
27
|
+
* own write, and a per-path fired flag — numbers and a digest; NO field can hold file content, by
|
|
26
28
|
* construction (same PII/content-exclusion-by-construction discipline as the
|
|
27
29
|
* telemetry schemas).
|
|
28
30
|
*
|
|
@@ -105,11 +107,81 @@ export function isExemptPath(filePath: string): boolean {
|
|
|
105
107
|
return EXEMPT_PATH_PATTERNS.some((re) => re.test(normalized));
|
|
106
108
|
}
|
|
107
109
|
|
|
108
|
-
/** Per-path read record —
|
|
110
|
+
/** Per-path read record — numbers and a digest, never content. */
|
|
109
111
|
export interface ReadRecord {
|
|
110
112
|
mtime: number;
|
|
111
113
|
size: number;
|
|
112
114
|
ts: number;
|
|
115
|
+
/** sha256 of the file; absent above {@link HASH_BOUND_BYTES}, on a read failure, or in a legacy entry. */
|
|
116
|
+
sha256?: string;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Above this size the guard keeps mtime + size and says so: the
|
|
121
|
+
* hash is a full read of the file on the pre_tool_use path.
|
|
122
|
+
*/
|
|
123
|
+
export const HASH_BOUND_BYTES = 2 * 1024 * 1024;
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* What the content key could say about one read. Only `over-bound` — the stat
|
|
127
|
+
* itself was over — licenses the stat fallback: after `grew-during-read` the
|
|
128
|
+
* stat pair is stale, and after `unreadable` nothing was compared.
|
|
129
|
+
*/
|
|
130
|
+
export type Digest =
|
|
131
|
+
| { kind: 'sha256'; value: string }
|
|
132
|
+
| { kind: 'over-bound' }
|
|
133
|
+
| { kind: 'grew-during-read' }
|
|
134
|
+
| { kind: 'unreadable' };
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* sha256 of a file at or under the bound. The stat `size` skips the read when it
|
|
138
|
+
* is already over; the read itself stops at `HASH_BOUND_BYTES + 1`, because the
|
|
139
|
+
* file can grow between the stat and the read.
|
|
140
|
+
*/
|
|
141
|
+
export function contentDigest(absPath: string, size: number): Digest {
|
|
142
|
+
if (size > HASH_BOUND_BYTES) return { kind: 'over-bound' };
|
|
143
|
+
let fd: number | undefined;
|
|
144
|
+
try {
|
|
145
|
+
fd = fs.openSync(absPath, 'r');
|
|
146
|
+
// Sized to the stat, not the bound: a full 2 MB buffer per small Read
|
|
147
|
+
// is the hottest slot's largest cost. One byte over the stat size is
|
|
148
|
+
// enough to see that the file grew, which voids the stat pair anyway.
|
|
149
|
+
const limit = Math.max(0, Math.min(size, HASH_BOUND_BYTES));
|
|
150
|
+
const buf = Buffer.allocUnsafe(limit + 1);
|
|
151
|
+
let filled = 0;
|
|
152
|
+
while (filled < buf.length) {
|
|
153
|
+
const n = fs.readSync(fd, buf, filled, buf.length - filled, null);
|
|
154
|
+
if (n === 0) break;
|
|
155
|
+
filled += n;
|
|
156
|
+
}
|
|
157
|
+
if (filled > limit) return { kind: 'grew-during-read' };
|
|
158
|
+
return { kind: 'sha256', value: crypto.createHash('sha256').update(buf.subarray(0, filled)).digest('hex') };
|
|
159
|
+
} catch {
|
|
160
|
+
return { kind: 'unreadable' };
|
|
161
|
+
} finally {
|
|
162
|
+
if (fd !== undefined) {
|
|
163
|
+
try {
|
|
164
|
+
fs.closeSync(fd);
|
|
165
|
+
} catch {
|
|
166
|
+
// closing a descriptor we opened cannot change the answer
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/** The basis on which a read was found unchanged. */
|
|
173
|
+
export type CompareBasis = 'content' | 'stat-over-bound';
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* The basis on which the file is unchanged since `prior`, or `null` when that
|
|
177
|
+
* cannot be asserted. Content equality needs both digests; the stat pair
|
|
178
|
+
* decides only for a file over the bound. A hash-eligible file missing either
|
|
179
|
+
* digest — a legacy ledger entry, a read that failed — is never called unchanged.
|
|
180
|
+
*/
|
|
181
|
+
export function compareRead(prior: ReadRecord, mtime: number, size: number, digest: Digest): CompareBasis | null {
|
|
182
|
+
if (digest.kind === 'over-bound') return prior.mtime === mtime && prior.size === size ? 'stat-over-bound' : null;
|
|
183
|
+
if (digest.kind === 'sha256' && prior.sha256 !== undefined) return prior.sha256 === digest.value ? 'content' : null;
|
|
184
|
+
return null;
|
|
113
185
|
}
|
|
114
186
|
|
|
115
187
|
/** The session ledger — paths as keys, numbers as values, no content field. */
|
|
@@ -183,11 +255,13 @@ export function isRangedRead(toolInput: JsonObject): boolean {
|
|
|
183
255
|
}
|
|
184
256
|
|
|
185
257
|
/** 6.1 advisory — duplicate full read of an unchanged, already-read path. */
|
|
186
|
-
export function buildDuplicateReadLine(relPath: string, earlierTs: number): string {
|
|
258
|
+
export function buildDuplicateReadLine(relPath: string, earlierTs: number, compared: CompareBasis): string {
|
|
187
259
|
const when = new Date(earlierTs).toISOString();
|
|
260
|
+
const basis =
|
|
261
|
+
compared === 'content' ? 'unchanged content (same sha256)' : 'unchanged since (same mtime+size; over the 2 MB hash bound)';
|
|
188
262
|
return (
|
|
189
|
-
`re-read guard: ${relPath} was already fully read this session (${when})
|
|
190
|
-
|
|
263
|
+
`re-read guard: ${relPath} was already fully read this session (${when}) with ` +
|
|
264
|
+
`${basis} — the content is still in context; if you only ` +
|
|
191
265
|
`need part of it, a ranged Read (offset/limit) pays for the range, not the file.`
|
|
192
266
|
);
|
|
193
267
|
}
|
|
@@ -252,20 +326,23 @@ export function main(): number {
|
|
|
252
326
|
return EXIT_ALLOW; // unreadable/missing target — nothing to compare
|
|
253
327
|
}
|
|
254
328
|
|
|
329
|
+
const digest = contentDigest(absPath, size);
|
|
255
330
|
const prior = ledger.reads[key];
|
|
256
331
|
const ownWrite = ledger.writes[key];
|
|
257
332
|
const alreadyFired = ledger.fired[key] === true;
|
|
258
333
|
|
|
259
334
|
let advisory: string | null = null;
|
|
335
|
+
const compared = prior === undefined ? null : compareRead(prior, mtime, size, digest);
|
|
260
336
|
if (!alreadyFired && ownWrite !== undefined) {
|
|
261
337
|
advisory = buildPostEditReadLine(key); // 6.2 wins when both hold
|
|
262
|
-
} else if (!alreadyFired && prior !== undefined &&
|
|
263
|
-
advisory = buildDuplicateReadLine(key, prior.ts);
|
|
338
|
+
} else if (!alreadyFired && prior !== undefined && compared !== null) {
|
|
339
|
+
advisory = buildDuplicateReadLine(key, prior.ts, compared);
|
|
264
340
|
}
|
|
265
341
|
|
|
266
342
|
// Record the read that is about to happen (numbers only), consume the
|
|
267
343
|
// one-shot own-write marker, and latch the per-path fire flag.
|
|
268
|
-
ledger.reads[key] =
|
|
344
|
+
ledger.reads[key] =
|
|
345
|
+
digest.kind === 'sha256' ? { mtime, size, ts: Date.now(), sha256: digest.value } : { mtime, size, ts: Date.now() };
|
|
269
346
|
if (ownWrite !== undefined) delete ledger.writes[key];
|
|
270
347
|
if (advisory !== null) ledger.fired[key] = true;
|
|
271
348
|
writeLedger(workspaceRoot, sessionKey, ledger);
|
|
@@ -24,7 +24,8 @@
|
|
|
24
24
|
* (`agents/evidence/analysis/host-input-rewrite-probe-2026-08-23.md`).
|
|
25
25
|
*
|
|
26
26
|
* What IS true, and is why this hook still only warns: **this dispatcher does not
|
|
27
|
-
* emit it, and no
|
|
27
|
+
* emit it, and since ADR-285 no concern may produce a rewrite at all** — one
|
|
28
|
+
* egress stage is the only writer, and a command nudge is not egress. The dispatcher
|
|
28
29
|
* aggregates many concerns per event and reduces them to one exit code; what
|
|
29
30
|
* happens when two concerns both want to rewrite the same tool input is an
|
|
30
31
|
* unanswered design question, not a plumbing detail. A default-OFF hook that
|
|
@@ -209,8 +210,8 @@ export function classify(command: string): Eligibility {
|
|
|
209
210
|
// carries no `updatedInput`". Re-probed against Claude Code 2.1.241: the host
|
|
210
211
|
// carries it (see the header, and
|
|
211
212
|
// agents/evidence/analysis/host-input-rewrite-probe-2026-08-23.md). The real
|
|
212
|
-
// reason is that THIS dispatcher emits no such field and
|
|
213
|
-
//
|
|
213
|
+
// reason is that THIS dispatcher emits no such field and, under ADR-285, no
|
|
214
|
+
// concern may produce one. Same outcome, correct cause: a committed
|
|
214
215
|
// per-command cap table (this constant — rows individually removable,
|
|
215
216
|
// per-row opt-out via `enabled`) and a warn naming the bounded alternative.
|
|
216
217
|
// Nothing is ever truncated; ignoring the advisory IS the uncapped re-run,
|
|
@@ -970,7 +970,14 @@ export function gateOpen(root: string, cliEntry: boolean, packageRoot?: string |
|
|
|
970
970
|
// found; inside the bundle nothing else can locate it.
|
|
971
971
|
const { mode, hosts } = resolveLeanProjection({
|
|
972
972
|
projectRoot: root,
|
|
973
|
-
|
|
973
|
+
// FALLS BACK TO `root`, and the fallback is what makes this work in a
|
|
974
|
+
// source checkout. Since ADR-293 the form comes from the package-owned
|
|
975
|
+
// record under `<packageRoot>/src/config/`, and `packageRoot` here is
|
|
976
|
+
// `AGENT_CONFIG_PACKAGE_ROOT` — unset outside an install, where the
|
|
977
|
+
// project root IS the package root. A consumer project has no such
|
|
978
|
+
// record, so the fallback reads nothing there and the full form stands,
|
|
979
|
+
// which is the same answer it gave before.
|
|
980
|
+
packageRoot: packageRoot ?? root,
|
|
974
981
|
});
|
|
975
982
|
if (deliversBodies(mode) && hosts.hosts.includes(DELIVERY_HOST)) return true;
|
|
976
983
|
if (hookSectionEnabled(root, 'rule_inject')) return true;
|
|
@@ -76,6 +76,10 @@ import {
|
|
|
76
76
|
run_checkpoints_enabled,
|
|
77
77
|
} from '../_lib/continuity_writer.js';
|
|
78
78
|
import { publishContinuityRecord } from '../_lib/continuity_slot.js';
|
|
79
|
+
import { current_branch } from '../_lib/git_common_dir.js';
|
|
80
|
+
import { derive_session_tag } from '../_lib/session_tag.js';
|
|
81
|
+
import { localDay, pruneStaleMarkers, pruneStalePointers, writeSessionPointer } from '../retro_queue.js';
|
|
82
|
+
import { probeRanToday, stampProbeRun } from './probe_throttle.js';
|
|
79
83
|
import { read_claimed_slug } from '../session_register_hook.js';
|
|
80
84
|
import { unwrap, type JsonObject, type JsonValue } from './envelope.js';
|
|
81
85
|
import { readHookStdin } from './hook_stdin.js';
|
|
@@ -377,7 +381,7 @@ export function main(): number {
|
|
|
377
381
|
// record, which is the deliberate departure from resuming by
|
|
378
382
|
// bookkeeping (Phase 3.2).
|
|
379
383
|
//
|
|
380
|
-
// "Inside a running contract" is the same carrier `run-continuation`
|
|
384
|
+
// "Inside a running contract" is the same carrier the withdrawn `run-continuation`
|
|
381
385
|
// uses — a `sessions:claim` for this session — and no second one is
|
|
382
386
|
// invented. Outside a contract this is silent: a checkpoint for a
|
|
383
387
|
// conversational session names work nobody is executing.
|
|
@@ -408,6 +412,7 @@ export function main(): number {
|
|
|
408
412
|
}
|
|
409
413
|
|
|
410
414
|
writeContinuityRecord(workspaceRoot, rawSessionId, counters, threshold, tokens);
|
|
415
|
+
writeRetroPointer(workspaceRoot, sessionKey, rawSessionId, now);
|
|
411
416
|
|
|
412
417
|
// No warn path. Both emitters this hook used to carry were the recycle
|
|
413
418
|
// advisory and its counter-check, and both are retired (step 3.2). The hook
|
|
@@ -416,6 +421,48 @@ export function main(): number {
|
|
|
416
421
|
return 0;
|
|
417
422
|
}
|
|
418
423
|
|
|
424
|
+
/**
|
|
425
|
+
* The retro's session pointer (`docs/contracts/retro-v1.md`, path C): one small
|
|
426
|
+
* file per session in the git common directory, refreshed on every Stop. It is
|
|
427
|
+
* what lets the next day's sweep find a session that ran only in a worktree,
|
|
428
|
+
* after the worktree is gone, and what records the session's branch. A fourth
|
|
429
|
+
* handler inside this concern for the reason the continuity record is one: the
|
|
430
|
+
* concern count is ratcheted. Off with `retro.enabled: false`, which
|
|
431
|
+
* `writeSessionPointer` reads; never blocks.
|
|
432
|
+
*/
|
|
433
|
+
export function writeRetroPointer(
|
|
434
|
+
workspaceRoot: string,
|
|
435
|
+
eolKey: string,
|
|
436
|
+
rawSessionId: string | null,
|
|
437
|
+
now: string,
|
|
438
|
+
): boolean {
|
|
439
|
+
const sessionId = String(rawSessionId ?? '').trim();
|
|
440
|
+
if (sessionId === '') return false;
|
|
441
|
+
try {
|
|
442
|
+
const written = writeSessionPointer(workspaceRoot, {
|
|
443
|
+
eol_key: eolKey,
|
|
444
|
+
tag: derive_session_tag(sessionId),
|
|
445
|
+
branch: current_branch(workspaceRoot),
|
|
446
|
+
workspace: workspaceRoot,
|
|
447
|
+
ended_at: now,
|
|
448
|
+
});
|
|
449
|
+
// Once a day, drop pointers and markers nothing can still use, so the
|
|
450
|
+
// stores stay bounded even while no sweep runs.
|
|
451
|
+
if (written && !probeRanToday(workspaceRoot, RETRO_PRUNE_STAMP)) {
|
|
452
|
+
const tz = Intl.DateTimeFormat().resolvedOptions().timeZone;
|
|
453
|
+
pruneStalePointers(workspaceRoot, localDay(now, tz), tz);
|
|
454
|
+
pruneStaleMarkers(workspaceRoot, Date.parse(now));
|
|
455
|
+
stampProbeRun(workspaceRoot, RETRO_PRUNE_STAMP);
|
|
456
|
+
}
|
|
457
|
+
return written;
|
|
458
|
+
} catch {
|
|
459
|
+
return false;
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
/** The `probe_throttle` stamp for the once-a-day retro store prune. */
|
|
464
|
+
const RETRO_PRUNE_STAMP = 'retro-prune';
|
|
465
|
+
|
|
419
466
|
/**
|
|
420
467
|
* The continuity-record handler — one of the three lifecycle handlers this
|
|
421
468
|
* concern carries, and independently switchable from the other two.
|
|
@@ -96,6 +96,7 @@ import { is_replay_mode } from './state_io.js';
|
|
|
96
96
|
import { readHookStdin } from './hook_stdin.js';
|
|
97
97
|
import { resolveConsumerRoot } from './subagent_ledger_hook.js';
|
|
98
98
|
import { EXIT_ALLOW } from './exit_codes.js';
|
|
99
|
+
import { isHandoverShape } from '../_lib/ui_surface.js';
|
|
99
100
|
|
|
100
101
|
/** Would-warns per session before the valve goes silent — `MAX_NUDGES` shape. */
|
|
101
102
|
export const MAX_SHADOW_WARNS = 2;
|
|
@@ -170,20 +171,17 @@ export const COMMAND_MATCHERS: readonly { pattern: RegExp; hit: MatcherHit }[] =
|
|
|
170
171
|
|
|
171
172
|
/**
|
|
172
173
|
* The handover path shapes `design-fidelity` routes on a FILE rather than on a
|
|
173
|
-
* word
|
|
174
|
+
* word, read from the one shared list `HANDOVER_SHAPES` in `_lib/ui_surface`.
|
|
174
175
|
*
|
|
175
176
|
* DIRECTION-AGNOSTIC ON PURPOSE, and that is the one difference from
|
|
176
177
|
* `ui_route_nudge_hook.isArtifactRead`, which requires a non-write. Handover
|
|
177
178
|
* *presence* and handover *having been read* are the two separate facts this
|
|
178
|
-
* concern needs, and a single predicate cannot carry both.
|
|
179
|
-
*
|
|
180
|
-
*
|
|
181
|
-
* the copy cannot drift.
|
|
179
|
+
* concern needs, and a single predicate cannot carry both.
|
|
180
|
+
* `handover_predicate_parity.test.ts` probes every carrier with one example per
|
|
181
|
+
* shape, so a shape no carrier accepts reds there.
|
|
182
182
|
*/
|
|
183
183
|
export function isHandoverPath(file: string): boolean {
|
|
184
|
-
|
|
185
|
-
const normalized = file.replace(/\\/g, '/').toLowerCase();
|
|
186
|
-
return normalized.endsWith('design.html') || normalized.includes('.claude/design-system/');
|
|
184
|
+
return isHandoverShape(file);
|
|
187
185
|
}
|
|
188
186
|
|
|
189
187
|
export interface CaptureEvent {
|