@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
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
// The placeholder grammar of docs/contracts/egress-placeholders-v1.md and its
|
|
2
|
+
// one recogniser. The spelling is the one the pre-registered model-fidelity bar
|
|
3
|
+
// selected (internal/bench/egress-placeholders-PREREG.md, endpoint d); no other
|
|
4
|
+
// spelling may exist under src/, which egress_token.test.ts enforces.
|
|
5
|
+
|
|
6
|
+
import { createHmac, randomBytes } from 'node:crypto';
|
|
7
|
+
|
|
8
|
+
import { detect, EGRESS_RULES, type EgressClass, type EgressSpan, replaceSpans } from './egress_rules.js';
|
|
9
|
+
|
|
10
|
+
export const TOKEN_FP_LENGTH = 6;
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* `__TYPE_n_fingerprint__`, or `__TYPE_n_fingerprint_vK__` for the K-th spelling
|
|
14
|
+
* of one entity — type upper-case, number from 1, fingerprint lower hex, K from 2.
|
|
15
|
+
*/
|
|
16
|
+
export const TOKEN_PATTERN = /__([A-Z][A-Z0-9]{1,15})_([1-9][0-9]{0,5})_([0-9a-f]{6})(?:_v([2-9]|[1-9][0-9]))?__/g;
|
|
17
|
+
|
|
18
|
+
const TOKEN_TYPE = /^[A-Z][A-Z0-9]{1,15}$/;
|
|
19
|
+
const MAX_TOKEN_NUMBER = 999_999;
|
|
20
|
+
/** Spellings one entity may carry in a scope; the recogniser parses up to two digits. */
|
|
21
|
+
export const MAX_TOKEN_VARIANT = 99;
|
|
22
|
+
/**
|
|
23
|
+
* Unknown tokens a scope answers before it stops resolving anything. With a
|
|
24
|
+
* 24-bit fingerprint this bounds the chance that guessing ever resolves a value
|
|
25
|
+
* to at most 64 × 2^-24 (about 4 in a million) per scope.
|
|
26
|
+
*/
|
|
27
|
+
export const MAX_FAILED_RESOLUTIONS = 64;
|
|
28
|
+
|
|
29
|
+
export interface TokenParts {
|
|
30
|
+
readonly type: string;
|
|
31
|
+
readonly number: number;
|
|
32
|
+
readonly fingerprint: string;
|
|
33
|
+
/** Which spelling of the entity, from 1; 1 carries no suffix. */
|
|
34
|
+
readonly variant?: number;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export interface ParsedToken extends TokenParts {
|
|
38
|
+
readonly start: number;
|
|
39
|
+
readonly end: number;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
const TOKEN_FP = /^[0-9a-f]{6}$/;
|
|
43
|
+
|
|
44
|
+
/** The one writer of the grammar; it refuses parts the recogniser would not parse back. */
|
|
45
|
+
export function formatToken(p: TokenParts): string {
|
|
46
|
+
if (
|
|
47
|
+
!TOKEN_TYPE.test(p.type) ||
|
|
48
|
+
!Number.isInteger(p.number) ||
|
|
49
|
+
p.number < 1 ||
|
|
50
|
+
p.number > MAX_TOKEN_NUMBER ||
|
|
51
|
+
!TOKEN_FP.test(p.fingerprint) ||
|
|
52
|
+
(p.variant !== undefined &&
|
|
53
|
+
(!Number.isInteger(p.variant) || p.variant < 1 || p.variant > MAX_TOKEN_VARIANT))
|
|
54
|
+
) {
|
|
55
|
+
throw new Error('formatToken: parts outside the token grammar');
|
|
56
|
+
}
|
|
57
|
+
const suffix = p.variant === undefined || p.variant === 1 ? '' : `_v${p.variant}`;
|
|
58
|
+
return `__${p.type}_${p.number}_${p.fingerprint}${suffix}__`;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export function parseTokens(text: string): ParsedToken[] {
|
|
62
|
+
const out: ParsedToken[] = [];
|
|
63
|
+
TOKEN_PATTERN.lastIndex = 0;
|
|
64
|
+
let m: RegExpExecArray | null;
|
|
65
|
+
while ((m = TOKEN_PATTERN.exec(text)) !== null) {
|
|
66
|
+
out.push({
|
|
67
|
+
type: m[1] as string,
|
|
68
|
+
number: Number(m[2]),
|
|
69
|
+
fingerprint: m[3] as string,
|
|
70
|
+
variant: m[4] === undefined ? 1 : Number(m[4]),
|
|
71
|
+
start: m.index,
|
|
72
|
+
end: m.index + m[0].length,
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
return out;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
interface Entry {
|
|
79
|
+
readonly type: string;
|
|
80
|
+
readonly class: EgressClass;
|
|
81
|
+
readonly number: number;
|
|
82
|
+
readonly fingerprint: string;
|
|
83
|
+
/**
|
|
84
|
+
* Keyed digests of each spelling seen, in order; its index + 1 is the
|
|
85
|
+
* spelling's variant. A digest, so a credential's spelling is never kept.
|
|
86
|
+
*/
|
|
87
|
+
readonly spellings: string[];
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
interface Issued {
|
|
91
|
+
readonly entry: Entry;
|
|
92
|
+
/** The spelling this token restores to — identifiers only; a credential value is never kept. */
|
|
93
|
+
readonly value: string | null;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* The form two spellings of one entity share. Only types whose spelling varies
|
|
98
|
+
* without changing the value are listed; every other type is its own canonical
|
|
99
|
+
* form, so two spellings of it are two entities.
|
|
100
|
+
*/
|
|
101
|
+
const CANONICAL_FORMS: Readonly<Record<string, (raw: string) => string>> = {
|
|
102
|
+
IBAN: (raw) => raw.replace(/\s+/g, '').toUpperCase(),
|
|
103
|
+
CARD: (raw) => raw.replace(/[\s-]+/g, ''),
|
|
104
|
+
PHONE: (raw) => raw.replace(/[\s().\-/]+/g, ''),
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
export function canonicalValue(type: string, raw: string): string {
|
|
108
|
+
return CANONICAL_FORMS[type]?.(raw) ?? raw;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* One issuing scope: a random key that is never sent and never persisted, and
|
|
113
|
+
* the in-memory mapping from minted tokens back to identifier values.
|
|
114
|
+
*/
|
|
115
|
+
export class TokenScope {
|
|
116
|
+
private readonly key: Uint8Array;
|
|
117
|
+
private readonly byDigest = new Map<string, Entry>();
|
|
118
|
+
private readonly byToken = new Map<string, Issued>();
|
|
119
|
+
private readonly counters = new Map<string, number>();
|
|
120
|
+
private failedResolutions = 0;
|
|
121
|
+
/** Keyed digest of the canonical value alone → its class, whatever type it was minted under. */
|
|
122
|
+
private readonly classByValue = new Map<string, EgressClass>();
|
|
123
|
+
|
|
124
|
+
constructor() {
|
|
125
|
+
this.key = randomBytes(32);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* The token for one spelling. Spellings with one canonical form share number
|
|
130
|
+
* and fingerprint and differ in the variant suffix, so each restores to its
|
|
131
|
+
* own bytes.
|
|
132
|
+
*/
|
|
133
|
+
mint(type: string, cls: EgressClass, spelling: string): string {
|
|
134
|
+
const canonical = canonicalValue(type, spelling);
|
|
135
|
+
if (!TOKEN_TYPE.test(type)) {
|
|
136
|
+
throw new Error(`TokenScope: type ${JSON.stringify(type)} is outside the token grammar`);
|
|
137
|
+
}
|
|
138
|
+
const valueDigest = createHmac('sha256', this.key).update(`value\u0000${canonical}`).digest('hex');
|
|
139
|
+
const seenClass = this.classByValue.get(valueDigest);
|
|
140
|
+
if (seenClass !== undefined && seenClass !== cls) {
|
|
141
|
+
throw new Error(`TokenScope: this value was minted under class ${seenClass}, refusing class ${cls}`);
|
|
142
|
+
}
|
|
143
|
+
const digest = createHmac('sha256', this.key).update(`${type}\u0000${canonical}`).digest('hex');
|
|
144
|
+
const spellingDigest = createHmac('sha256', this.key).update(`spelling\u0000${type}\u0000${spelling}`).digest('hex');
|
|
145
|
+
const known = this.byDigest.get(digest);
|
|
146
|
+
if (known !== undefined) {
|
|
147
|
+
const at = known.spellings.indexOf(spellingDigest);
|
|
148
|
+
if (at !== -1) return formatToken({ ...known, variant: at + 1 });
|
|
149
|
+
if (known.spellings.length >= MAX_TOKEN_VARIANT) {
|
|
150
|
+
throw new Error(`TokenScope: this ${type} has used every variant the grammar can carry`);
|
|
151
|
+
}
|
|
152
|
+
known.spellings.push(spellingDigest);
|
|
153
|
+
return this.issue(known, known.spellings.length, cls, spelling);
|
|
154
|
+
}
|
|
155
|
+
const number = (this.counters.get(type) ?? 0) + 1;
|
|
156
|
+
if (number > MAX_TOKEN_NUMBER) {
|
|
157
|
+
throw new Error(`TokenScope: ${type} has used every number the grammar can carry`);
|
|
158
|
+
}
|
|
159
|
+
this.counters.set(type, number);
|
|
160
|
+
const entry: Entry = {
|
|
161
|
+
type,
|
|
162
|
+
class: cls,
|
|
163
|
+
number,
|
|
164
|
+
fingerprint: digest.slice(0, TOKEN_FP_LENGTH),
|
|
165
|
+
spellings: [spellingDigest],
|
|
166
|
+
};
|
|
167
|
+
this.classByValue.set(valueDigest, cls);
|
|
168
|
+
this.byDigest.set(digest, entry);
|
|
169
|
+
return this.issue(entry, 1, cls, spelling);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
private issue(entry: Entry, variant: number, cls: EgressClass, spelling: string): string {
|
|
173
|
+
const token = formatToken({ ...entry, variant });
|
|
174
|
+
this.byToken.set(token, { entry, value: cls === 'identifier' ? spelling : null });
|
|
175
|
+
return token;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
/** True only for a token this scope minted; token syntax alone proves nothing. */
|
|
179
|
+
owns(token: string): boolean {
|
|
180
|
+
return this.byToken.has(token);
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
/** The identifier value a token stands for, or null: unknown, forged, foreign or credential. */
|
|
184
|
+
resolve(token: string): string | null {
|
|
185
|
+
if (this.failedResolutions >= MAX_FAILED_RESOLUTIONS) return null;
|
|
186
|
+
const issued = this.byToken.get(token);
|
|
187
|
+
if (issued === undefined) {
|
|
188
|
+
this.failedResolutions += 1;
|
|
189
|
+
return null;
|
|
190
|
+
}
|
|
191
|
+
return issued.value;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
/** What the scope holds, without any value or spelling digest. */
|
|
195
|
+
snapshot(): Array<Omit<Entry, 'spellings'> & { variants: number }> {
|
|
196
|
+
return [...this.byDigest.values()].map(({ spellings, ...rest }) => ({ ...rest, variants: spellings.length }));
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
/** Thrown when a rule cannot prove which bytes its secret spans; carries the rule id, never a byte of the text. */
|
|
201
|
+
export class EgressRefusedError extends Error {
|
|
202
|
+
constructor(readonly rule: string) {
|
|
203
|
+
super(`egress refused: rule ${rule} could not prove the extent of a detected secret`);
|
|
204
|
+
this.name = 'EgressRefusedError';
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
const RULE_BY_ID = new Map(EGRESS_RULES.map((r) => [r.rule, r]));
|
|
209
|
+
const CLASS_RANK: Readonly<Record<EgressClass, number>> = { credential: 1, identifier: 0 };
|
|
210
|
+
|
|
211
|
+
/** The bytes each detection obliges a replacement to remove; overlapping extents merge. */
|
|
212
|
+
function replacementSpans(text: string, detected: readonly EgressSpan[]): EgressSpan[] {
|
|
213
|
+
const extents = detected.map((s) => {
|
|
214
|
+
const policy = RULE_BY_ID.get(s.rule)?.replacement;
|
|
215
|
+
if (policy === undefined) throw new EgressRefusedError(s.rule);
|
|
216
|
+
if (policy === 'detection') return s;
|
|
217
|
+
const end = policy.through(text, s);
|
|
218
|
+
if (end === null || end < s.end) throw new EgressRefusedError(s.rule);
|
|
219
|
+
return { ...s, end };
|
|
220
|
+
});
|
|
221
|
+
extents.sort((a, b) => a.start - b.start);
|
|
222
|
+
const merged: EgressSpan[] = [];
|
|
223
|
+
for (const s of extents) {
|
|
224
|
+
const last = merged[merged.length - 1];
|
|
225
|
+
if (last !== undefined && s.start < last.end) {
|
|
226
|
+
const keep = CLASS_RANK[s.class] > CLASS_RANK[last.class] ? s : last;
|
|
227
|
+
merged[merged.length - 1] = { ...keep, start: last.start, end: Math.max(last.end, s.end) };
|
|
228
|
+
} else {
|
|
229
|
+
merged.push(s);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
return merged;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
/**
|
|
236
|
+
* Replaces every detected secret with its token, removing each rule's full
|
|
237
|
+
* replacement extent, not just the bytes that triggered detection. A rule that
|
|
238
|
+
* cannot prove its extent makes the whole call throw EgressRefusedError: the
|
|
239
|
+
* text is refused, never partly replaced. A detection is left alone only when it
|
|
240
|
+
* lies inside a token this scope minted, so a second pass returns the same bytes
|
|
241
|
+
* while a token-shaped substring planted inside a credential, or a token from
|
|
242
|
+
* another scope, shields nothing.
|
|
243
|
+
*/
|
|
244
|
+
export function replaceValues(text: string, scope: TokenScope): string {
|
|
245
|
+
const owned = parseTokens(text).filter((t) => scope.owns(text.slice(t.start, t.end)));
|
|
246
|
+
const detected = detect(text).filter((s) => !owned.some((t) => t.start <= s.start && s.end <= t.end));
|
|
247
|
+
const spans = replacementSpans(text, detected);
|
|
248
|
+
// Mint in text order first: replaceSpans substitutes right to left, and minting
|
|
249
|
+
// inside its callback would number the last value 1.
|
|
250
|
+
const tokens = spans.map((s) => scope.mint(s.type, s.class, text.slice(s.start, s.end)));
|
|
251
|
+
return replaceSpans(text, spans, (_s, i) => tokens[i] as string);
|
|
252
|
+
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* A double trigger is one event, not two outcomes.
|
|
3
3
|
*
|
|
4
4
|
* Hosts fire the same slot more than once for a single logical event —
|
|
5
|
-
* `run_continuation_hook.ts`
|
|
5
|
+
* `run_continuation_hook.ts` documented the same quirk on `stop` and deduped it
|
|
6
6
|
* with an ordinal + open-count + short-window key. The consequence here is
|
|
7
7
|
* arithmetic rather than cosmetic: if a duplicate fire writes a second outcome
|
|
8
8
|
* record, every per-asset rate computed over the stream is inflated by exactly
|
|
@@ -90,8 +90,12 @@ export type AuthSource = 'cli-subscription' | 'cli-api-key' | 'key-file' | 'env-
|
|
|
90
90
|
* `subscription` — covered by a flat-rate plan the user already pays; the USD
|
|
91
91
|
* cost gate does not apply (`cli_call_budget` guards the quota instead).
|
|
92
92
|
* `per-token` — metered spend; the full `cost_budget` applies.
|
|
93
|
+
* `free-quota` — a `base_url` route whose free terms carry a dated proof; USD 0.
|
|
94
|
+
* `self-hosted` — a loopback route whose probe showed local weights; USD 0.
|
|
95
|
+
*
|
|
96
|
+
* `classifyBilling` never returns the last two: only a route resolution can.
|
|
93
97
|
*/
|
|
94
|
-
export type BillingClass = 'subscription' | 'per-token';
|
|
98
|
+
export type BillingClass = 'subscription' | 'per-token' | 'free-quota' | 'self-hosted';
|
|
95
99
|
|
|
96
100
|
/** Version string when parseable, the literal `'unknown'` when not, `null` when unprobed. */
|
|
97
101
|
export type HostVersion = string | 'unknown' | null;
|
|
@@ -124,39 +128,50 @@ export interface EnvironmentReport {
|
|
|
124
128
|
}
|
|
125
129
|
|
|
126
130
|
/**
|
|
127
|
-
*
|
|
131
|
+
* One row per provider: the default CLI binary, whether that CLI is a
|
|
132
|
+
* community wrapper, the environment variable carrying a raw API key, and the
|
|
133
|
+
* key-file name under the user-global root. Adding a provider is this one
|
|
134
|
+
* edit; a row missing any field is no provider at all (`providerRow`).
|
|
128
135
|
*
|
|
129
|
-
*
|
|
130
|
-
* layer. The boolean is the load-bearing billing input: a VENDOR-OFFICIAL CLI
|
|
136
|
+
* `community` is the load-bearing billing input: a VENDOR-OFFICIAL CLI
|
|
131
137
|
* (`false`) runs under the user's subscription; a COMMUNITY wrapper (`true`)
|
|
132
|
-
* shells out to the same paid API and stays metered.
|
|
133
|
-
*
|
|
138
|
+
* shells out to the same paid API and stays metered. Mirrors the `CliClient`
|
|
139
|
+
* subclass attributes without importing the client layer.
|
|
134
140
|
*/
|
|
135
|
-
export
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
};
|
|
141
|
+
export interface ProviderRow {
|
|
142
|
+
readonly cli: string;
|
|
143
|
+
readonly community: boolean;
|
|
144
|
+
readonly envKey: string;
|
|
145
|
+
readonly keyFile: string;
|
|
146
|
+
}
|
|
142
147
|
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
perplexity: 'PERPLEXITY_API_KEY',
|
|
148
|
+
export const PROVIDER_TABLE: Readonly<Record<string, ProviderRow>> = {
|
|
149
|
+
anthropic: { cli: 'claude', community: false, envKey: 'ANTHROPIC_API_KEY', keyFile: 'anthropic.key' },
|
|
150
|
+
openai: { cli: 'codex', community: false, envKey: 'OPENAI_API_KEY', keyFile: 'openai.key' },
|
|
151
|
+
gemini: { cli: 'gemini', community: false, envKey: 'GEMINI_API_KEY', keyFile: 'gemini.key' },
|
|
152
|
+
xai: { cli: 'grok', community: true, envKey: 'XAI_API_KEY', keyFile: 'xai.key' },
|
|
153
|
+
perplexity: { cli: 'perplexity', community: true, envKey: 'PERPLEXITY_API_KEY', keyFile: 'perplexity.key' },
|
|
150
154
|
};
|
|
151
155
|
|
|
152
|
-
/**
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
156
|
+
/** The complete row for `provider`, or null when it is absent or any field is missing. */
|
|
157
|
+
export function providerRow(provider: string, table: Readonly<Record<string, ProviderRow>> = PROVIDER_TABLE): ProviderRow | null {
|
|
158
|
+
const row = table[provider] as Partial<ProviderRow> | undefined;
|
|
159
|
+
if (row === undefined) return null;
|
|
160
|
+
const complete =
|
|
161
|
+
typeof row.cli === 'string' && row.cli !== '' &&
|
|
162
|
+
typeof row.community === 'boolean' &&
|
|
163
|
+
typeof row.envKey === 'string' && row.envKey !== '' &&
|
|
164
|
+
typeof row.keyFile === 'string' && row.keyFile !== '';
|
|
165
|
+
return complete ? (row as ProviderRow) : null;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/** Provider → (default CLI binary, community-wrapper flag); a projection of `PROVIDER_TABLE`. */
|
|
169
|
+
export const PROVIDER_CLI_META: Readonly<Record<string, readonly [string, boolean]>> = Object.fromEntries(
|
|
170
|
+
Object.keys(PROVIDER_TABLE).flatMap((p) => {
|
|
171
|
+
const row = providerRow(p);
|
|
172
|
+
return row === null ? [] : [[p, [row.cli, row.community] as const]];
|
|
173
|
+
}),
|
|
174
|
+
);
|
|
160
175
|
|
|
161
176
|
/** Providers this module knows how to classify, in a stable order. */
|
|
162
177
|
export function knownProviders(): readonly string[] {
|
|
@@ -419,7 +434,7 @@ function detectAuth(opts: DetectEnvironmentOptions): {
|
|
|
419
434
|
auth.push({ provider, source: cli.source, evidence: cli.evidence });
|
|
420
435
|
}
|
|
421
436
|
|
|
422
|
-
const keyFile =
|
|
437
|
+
const keyFile = providerRow(provider)?.keyFile;
|
|
423
438
|
if (keyFile !== undefined) {
|
|
424
439
|
let resolved: string | null = null;
|
|
425
440
|
try {
|
|
@@ -433,7 +448,7 @@ function detectAuth(opts: DetectEnvironmentOptions): {
|
|
|
433
448
|
}
|
|
434
449
|
}
|
|
435
450
|
|
|
436
|
-
const envVar =
|
|
451
|
+
const envVar = providerRow(provider)?.envKey;
|
|
437
452
|
if (envVar !== undefined && (env[envVar] ?? '').trim() !== '') {
|
|
438
453
|
auth.push({ provider, source: 'env-key', evidence: `env:${envVar}` });
|
|
439
454
|
keys.push({ provider, ref: `env:${envVar}` });
|
|
@@ -91,6 +91,80 @@ export function lemmasNamed(reason: string): string[] {
|
|
|
91
91
|
return DISPOSITION_LEMMAS.filter((l) => new RegExp(`\\b(?:${l.source})`, 'i').test(reason)).map((l) => l.name);
|
|
92
92
|
}
|
|
93
93
|
|
|
94
|
+
/**
|
|
95
|
+
* Does this reason quote the owner search it ran — in ONE clause, a search verb,
|
|
96
|
+
* what was searched for, where, and an empty result?
|
|
97
|
+
*
|
|
98
|
+
* A disposition word says what was rejected; it does not say anyone looked for
|
|
99
|
+
* an existing owner first, and re-arrival of an owned subject as a new file is
|
|
100
|
+
* the measured cost. The AI council of 2026-10-16 refused a first version that tested the three parts anywhere in the reason:
|
|
101
|
+
* "grep was considered; agents/roadmaps contains plans; another check returned
|
|
102
|
+
* 0 hits" passed and describes no search. So all of it has to sit in one clause
|
|
103
|
+
* (split on `;` and on a sentence-ending period):
|
|
104
|
+
*
|
|
105
|
+
* - a verb — `grep`, `rg`, `find`, searched, scanned — or `roadmap:context`;
|
|
106
|
+
* - a query — a quoted pattern, or `for <identifiers>`; `roadmap:context`
|
|
107
|
+
* carries its own;
|
|
108
|
+
* - the whole roadmap tree as scope — its root, its `/*` glob, or a brace set
|
|
109
|
+
* naming `later` and `stubs`; one subdirectory alone is not a
|
|
110
|
+
* search for an owner, and `archive/` owns nothing new (an archived file
|
|
111
|
+
* lands nothing);
|
|
112
|
+
* - an EMPTY result, or one whose every hit is named as a non-owner with
|
|
113
|
+
* `only` ("returns only archived files"). A search that found an owner is a
|
|
114
|
+
* reason to land the finding there, never to add a file.
|
|
115
|
+
*
|
|
116
|
+
* Like the disposition check, this sees that a search is QUOTED, not that it was
|
|
117
|
+
* run or was a good one. The council's stronger objection — author-written prose
|
|
118
|
+
* is not provenance — is why this reports and does not refuse.
|
|
119
|
+
*/
|
|
120
|
+
const SEARCH_VERB_RE = /\b(?:grep|rg|ripgrep|find|search(?:ed|es|ing)?|scan(?:ned|s)?)\b|roadmap:context/i;
|
|
121
|
+
const SEARCH_QUERY_RE = /\bfor\s+\S|['"`][^'"`\s][^'"`]*['"`]|roadmap:context/i;
|
|
122
|
+
const SEARCH_SCOPE_RE =
|
|
123
|
+
/agents\/roadmaps(?:\/\*|\/\{(?=[^}]*\blater\b)(?=[^}]*\bstubs\b)[^}]*\}|\/?(?=[\s,;:)`'"]|$))|roadmap:context/i;
|
|
124
|
+
const SEARCH_EMPTY_RE = new RegExp(
|
|
125
|
+
[
|
|
126
|
+
String.raw`\b(?:returns?|returned|found|finds|yield(?:s|ed)?|gives?|gave|match(?:es|ed)?|shows?|showed|lists?|listed)\b[^;]{0,40}?\b(?:nothing|none|no\b|zero|0\b|only\b)`,
|
|
127
|
+
String.raw`(?:^|[\s(:→>-])(?:0|no|zero)\s+(?:hits?|match(?:es)?|results?|files?|owners?)\b`,
|
|
128
|
+
String.raw`(?:→|->)\s*(?:nothing|none|no\b|0\b|empty)`,
|
|
129
|
+
].join('|'),
|
|
130
|
+
'i',
|
|
131
|
+
);
|
|
132
|
+
|
|
133
|
+
/** One clause per `;` or sentence-ending period; a period inside `tokens.json` does not split. */
|
|
134
|
+
function clauses(reason: string): string[] {
|
|
135
|
+
return reason.split(/;|\.(?=\s|$)/);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* `only` followed by a live (non-archived) roadmap file path is a search that
|
|
140
|
+
* FOUND an owner, unlike "only archived files", which names no owner.
|
|
141
|
+
*/
|
|
142
|
+
const ONLY_NAMES_OWNER_RE = /\bonly\b[^;]*?agents\/roadmaps\/(?!archive\/)[\w.-]+(?:\/[\w.-]+)*\.md\b/i;
|
|
143
|
+
|
|
144
|
+
export function quotesOwnerSearch(reason: string): boolean {
|
|
145
|
+
return clauses(reason).some(
|
|
146
|
+
(c) =>
|
|
147
|
+
SEARCH_VERB_RE.test(c) &&
|
|
148
|
+
SEARCH_QUERY_RE.test(c) &&
|
|
149
|
+
SEARCH_SCOPE_RE.test(c) &&
|
|
150
|
+
SEARCH_EMPTY_RE.test(c) &&
|
|
151
|
+
!ONLY_NAMES_OWNER_RE.test(c),
|
|
152
|
+
);
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* The added exemptions that quote no owner search. REPORT-ONLY: the estate gate
|
|
157
|
+
* prints these as warnings and stays green, by the council verdict above, until a
|
|
158
|
+
* report-only window has been read.
|
|
159
|
+
*/
|
|
160
|
+
export function unsearchedExemptions(
|
|
161
|
+
exempt: readonly { readonly file: string; readonly reason: string }[],
|
|
162
|
+
): ExemptionFinding[] {
|
|
163
|
+
return exempt
|
|
164
|
+
.filter((e) => namesDisposition(e.reason) && !quotesOwnerSearch(e.reason))
|
|
165
|
+
.map((e) => ({ file: e.file, kind: 'unsearched' as const, twin: null, reason: e.reason }));
|
|
166
|
+
}
|
|
167
|
+
|
|
94
168
|
/**
|
|
95
169
|
* The comparison key for "two added files say the same thing".
|
|
96
170
|
*
|
|
@@ -106,7 +180,7 @@ export function reasonKey(reason: string): string {
|
|
|
106
180
|
/** One added file whose exemption reason does not hold up. */
|
|
107
181
|
export interface ExemptionFinding {
|
|
108
182
|
readonly file: string;
|
|
109
|
-
readonly kind: 'shapeless' | 'duplicate';
|
|
183
|
+
readonly kind: 'shapeless' | 'unsearched' | 'duplicate';
|
|
110
184
|
/** For `duplicate`, the other added file carrying the same reason. */
|
|
111
185
|
readonly twin: string | null;
|
|
112
186
|
readonly reason: string;
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* floor_posture — what stands between a destructive shell command and its
|
|
3
|
+
* execution on this machine, reported for `hooks:doctor` and written nowhere.
|
|
4
|
+
*
|
|
5
|
+
* WHY. The destructive-action floor has two possible carriers on `claude`: the
|
|
6
|
+
* host's own OS sandbox and this package's `pre_tool_use` hook. Neither is
|
|
7
|
+
* visible from inside a session. The trampoline in `hooks/hooks.json` exits 0
|
|
8
|
+
* when it reaches no dispatcher (contracted in `docs/contracts/hook-architecture-v1.md`),
|
|
9
|
+
* so a machine where no hook runs looks exactly like a session where no hook had
|
|
10
|
+
* anything to say. This module names that state "floor not running".
|
|
11
|
+
*
|
|
12
|
+
* REPORT, NEVER WRITE — the `host_permission_checks` pattern. Sandbox and hook
|
|
13
|
+
* settings are the consumer's; a doctor that rewrites them has decided their
|
|
14
|
+
* posture for them. Every key is named on every run, absent included, because
|
|
15
|
+
* "absent" and "did not look" must not read the same.
|
|
16
|
+
*
|
|
17
|
+
* The sandbox keys were read from the Claude Code 2.1.302 binary's own strings
|
|
18
|
+
* on 2026-10-18: `sandbox.enabled`, `sandbox.failIfUnavailable` ("Exit with an
|
|
19
|
+
* error at startup if sandbox.enabled is true but the sandbox cannot start") and
|
|
20
|
+
* `sandbox.allowUnsandboxedCommands`. Managed settings are not read, so a
|
|
21
|
+
* policy-locked value is reported as whatever the user layers say.
|
|
22
|
+
*/
|
|
23
|
+
import * as fs from "node:fs";
|
|
24
|
+
import * as os from "node:os";
|
|
25
|
+
import * as path from "node:path";
|
|
26
|
+
|
|
27
|
+
/** Injected so a test never reads the developer's own machine. */
|
|
28
|
+
export interface FloorPostureDeps {
|
|
29
|
+
projectRoot: string;
|
|
30
|
+
homeDir: string;
|
|
31
|
+
env: NodeJS.ProcessEnv;
|
|
32
|
+
readFile: (p: string) => string | null;
|
|
33
|
+
exists: (p: string) => boolean;
|
|
34
|
+
isExecutable: (p: string) => boolean;
|
|
35
|
+
onPath: (bin: string) => boolean;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/** Which dispatcher the trampoline would reach, in its own order. */
|
|
39
|
+
export type FloorRuntime = "project-bundle" | "runtime-current" | "cli" | "floor-not-running";
|
|
40
|
+
|
|
41
|
+
export interface FloorPosture {
|
|
42
|
+
runtime: FloorRuntime;
|
|
43
|
+
sandbox: {
|
|
44
|
+
enabled: boolean | null;
|
|
45
|
+
failIfUnavailable: boolean | null;
|
|
46
|
+
allowUnsandboxedCommands: boolean | null;
|
|
47
|
+
};
|
|
48
|
+
/** `PreToolUse` hooks in the settings layers that are not this package's dispatcher. */
|
|
49
|
+
foreignPreToolUseHooks: number;
|
|
50
|
+
unreadable: string[];
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
function _executable(p: string): boolean {
|
|
54
|
+
try {
|
|
55
|
+
fs.accessSync(p, fs.constants.X_OK);
|
|
56
|
+
return fs.statSync(p).isFile();
|
|
57
|
+
} catch {
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/** Default deps — the only place the real filesystem and PATH are touched. */
|
|
63
|
+
export function defaultFloorPostureDeps(projectRoot: string): FloorPostureDeps {
|
|
64
|
+
const env = process.env;
|
|
65
|
+
return {
|
|
66
|
+
projectRoot,
|
|
67
|
+
homeDir: os.homedir(),
|
|
68
|
+
env,
|
|
69
|
+
readFile: (p) => {
|
|
70
|
+
try {
|
|
71
|
+
return fs.readFileSync(p, "utf8");
|
|
72
|
+
} catch {
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
exists: (p) => fs.existsSync(p),
|
|
77
|
+
isExecutable: _executable,
|
|
78
|
+
onPath: (bin) =>
|
|
79
|
+
(env["PATH"] ?? "").split(path.delimiter).some((dir) => dir !== "" && _executable(path.join(dir, bin))),
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* The trampoline's resolution order, mirrored: the project's own bundle with
|
|
85
|
+
* `node` on PATH, then the installed runtime's pinned node, then the CLI.
|
|
86
|
+
*/
|
|
87
|
+
function _runtime(deps: FloorPostureDeps): FloorRuntime {
|
|
88
|
+
const root = deps.projectRoot;
|
|
89
|
+
const bundle = path.join(root, "node_modules", "@event4u", "agent-config", "dist", "hooks", "dispatch.js");
|
|
90
|
+
const selfHosted =
|
|
91
|
+
deps.exists(path.join(root, "dist", "hooks", "dispatch.js")) &&
|
|
92
|
+
deps.exists(path.join(root, "src", "scripts", "hook_manifest.yaml"));
|
|
93
|
+
if ((deps.exists(bundle) || selfHosted) && deps.onPath("node")) return "project-bundle";
|
|
94
|
+
|
|
95
|
+
const configHome = deps.env["EVENT4U_CONFIG_HOME"] || path.join(deps.homeDir, ".event4u", "agent-config");
|
|
96
|
+
const current = path.join(configHome, "runtime", "current");
|
|
97
|
+
const node = (deps.readFile(path.join(current, "node")) ?? "").split("\n")[0]?.trim() ?? "";
|
|
98
|
+
if (node && deps.isExecutable(node) && deps.exists(path.join(current, "dist", "hooks", "dispatch.js"))) {
|
|
99
|
+
return "runtime-current";
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
if (deps.isExecutable(path.join(root, "agent-config")) || deps.onPath("agent-config")) return "cli";
|
|
103
|
+
return "floor-not-running";
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
function _bool(v: unknown): boolean | null {
|
|
107
|
+
return typeof v === "boolean" ? v : null;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Is this hook command this package's own dispatcher? The invocation, not a
|
|
112
|
+
* name: `rewrite-dispatch.js` or a path containing `agent-config` is another
|
|
113
|
+
* hook, and counting it as ours would hide the warning it exists for.
|
|
114
|
+
*/
|
|
115
|
+
function _ours(command: string): boolean {
|
|
116
|
+
return /dispatch(?:\.js"?|:hook) --platform claude\b/.test(command);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
export function readFloorPosture(deps: FloorPostureDeps): FloorPosture {
|
|
120
|
+
const layers = [
|
|
121
|
+
path.join(deps.homeDir, ".claude", "settings.json"),
|
|
122
|
+
path.join(deps.projectRoot, ".claude", "settings.json"),
|
|
123
|
+
path.join(deps.projectRoot, ".claude", "settings.local.json"),
|
|
124
|
+
];
|
|
125
|
+
const sandbox: FloorPosture["sandbox"] = { enabled: null, failIfUnavailable: null, allowUnsandboxedCommands: null };
|
|
126
|
+
const unreadable: string[] = [];
|
|
127
|
+
let foreign = 0;
|
|
128
|
+
for (const file of layers) {
|
|
129
|
+
const raw = deps.readFile(file);
|
|
130
|
+
if (raw === null) continue;
|
|
131
|
+
let parsed: Record<string, unknown>;
|
|
132
|
+
try {
|
|
133
|
+
parsed = JSON.parse(raw) as Record<string, unknown>;
|
|
134
|
+
} catch {
|
|
135
|
+
unreadable.push(file);
|
|
136
|
+
continue;
|
|
137
|
+
}
|
|
138
|
+
const box = parsed["sandbox"];
|
|
139
|
+
if (box !== null && typeof box === "object") {
|
|
140
|
+
for (const key of Object.keys(sandbox) as Array<keyof FloorPosture["sandbox"]>) {
|
|
141
|
+
const value = _bool((box as Record<string, unknown>)[key]);
|
|
142
|
+
if (value !== null) sandbox[key] = value;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
const hooks = (parsed["hooks"] as Record<string, unknown> | undefined)?.["PreToolUse"];
|
|
146
|
+
for (const group of Array.isArray(hooks) ? hooks : []) {
|
|
147
|
+
const entries = (group as Record<string, unknown> | null)?.["hooks"];
|
|
148
|
+
for (const entry of Array.isArray(entries) ? entries : []) {
|
|
149
|
+
const command = (entry as Record<string, unknown> | null)?.["command"];
|
|
150
|
+
if (typeof command === "string" && !_ours(command)) foreign += 1;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
return { runtime: _runtime(deps), sandbox, foreignPreToolUseHooks: foreign, unreadable };
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
const RUNTIME_TEXT: Record<FloorRuntime, string> = {
|
|
158
|
+
// "reaches", not "runs": what was checked is that the trampoline finds a
|
|
159
|
+
// dispatcher, not that a PreToolUse entry is registered or enabled.
|
|
160
|
+
"project-bundle": "reaches a dispatcher — the project's own bundle",
|
|
161
|
+
"runtime-current": "reaches a dispatcher — the installed runtime's",
|
|
162
|
+
cli: "reaches a dispatcher — through the agent-config CLI",
|
|
163
|
+
"floor-not-running":
|
|
164
|
+
"floor not running — the trampoline reaches no dispatcher and exits 0, so no hook runs in a session here",
|
|
165
|
+
};
|
|
166
|
+
|
|
167
|
+
function _key(name: string, value: boolean | null): string {
|
|
168
|
+
return `${name}: ${value === null ? "absent" : String(value)}`;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
export function renderFloorPosture(p: FloorPosture): string[] {
|
|
172
|
+
const lines = [
|
|
173
|
+
`hook runtime: ${RUNTIME_TEXT[p.runtime]}`,
|
|
174
|
+
_key("sandbox.enabled", p.sandbox.enabled),
|
|
175
|
+
_key("sandbox.failIfUnavailable", p.sandbox.failIfUnavailable),
|
|
176
|
+
_key("sandbox.allowUnsandboxedCommands", p.sandbox.allowUnsandboxedCommands),
|
|
177
|
+
p.foreignPreToolUseHooks === 0
|
|
178
|
+
? "other PreToolUse hooks: none in the settings layers"
|
|
179
|
+
: `other PreToolUse hooks: ${p.foreignPreToolUseHooks} PreToolUse hook(s) not from agent-config — ` +
|
|
180
|
+
"one may rewrite the command after this package's verdict",
|
|
181
|
+
];
|
|
182
|
+
for (const file of p.unreadable) lines.push(`unreadable: ${file} is not valid JSON`);
|
|
183
|
+
lines.push("a guardrail, not a security boundary — agent-config never writes these settings");
|
|
184
|
+
return lines;
|
|
185
|
+
}
|