@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,367 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Which files hold credentials by construction, and which commands print the
|
|
3
|
+
* process environment — the one list the `pre_tool_use` read guard
|
|
4
|
+
* (`hooks/block_credential_reads.ts`) and the installer's native deny tier read
|
|
5
|
+
* (road-to-one-detector-and-the-senders-we-own 1.1, 1.2).
|
|
6
|
+
*
|
|
7
|
+
* Prevention is the only fail-closed layer the egress work has: a value that is
|
|
8
|
+
* never read cannot leak through any later bug. So the classes are file KINDS,
|
|
9
|
+
* decided from the path alone, never from content — the guard runs before the
|
|
10
|
+
* file is opened.
|
|
11
|
+
*
|
|
12
|
+
* What a path-text guard cannot see, and so does not catch: a glob or an
|
|
13
|
+
* expansion that names the file only after the shell runs (`cat .e*`,
|
|
14
|
+
* `cat .e[n]v`, `$(echo .env)`), a recursive search that never names it, and
|
|
15
|
+
* an interpreter that prints the environment (`node -e 'console.log(process.env)'`,
|
|
16
|
+
* `python -c …`). Those reach the egress stage as tool output, not here.
|
|
17
|
+
*
|
|
18
|
+
* Pure: no I/O. The one import is `node:path`'s POSIX normaliser.
|
|
19
|
+
*/
|
|
20
|
+
import * as path from 'node:path';
|
|
21
|
+
|
|
22
|
+
export type CredentialFileClass =
|
|
23
|
+
| 'env-file'
|
|
24
|
+
| 'private-key'
|
|
25
|
+
| 'cloud-credentials'
|
|
26
|
+
| 'registry-credentials'
|
|
27
|
+
| 'process-environment';
|
|
28
|
+
|
|
29
|
+
/** What each class is, for a refusal a reader can act on. */
|
|
30
|
+
export const CREDENTIAL_CLASS_LABEL: Readonly<Record<CredentialFileClass, string>> = {
|
|
31
|
+
'env-file': 'an environment file (.env)',
|
|
32
|
+
'private-key': 'a private key',
|
|
33
|
+
'cloud-credentials': 'a cloud or CLI credential file',
|
|
34
|
+
'registry-credentials': 'a package-registry credential file',
|
|
35
|
+
'process-environment': 'a process environment',
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
/** `.env.<suffix>` names that document keys rather than hold values. */
|
|
39
|
+
const ENV_TEMPLATE_SUFFIXES: ReadonlySet<string> = new Set(['example', 'sample', 'template', 'dist', 'defaults', 'schema']);
|
|
40
|
+
|
|
41
|
+
const KEY_EXTENSIONS: readonly string[] = ['.key', '.p12', '.pfx', '.ppk', '.jks', '.keystore'];
|
|
42
|
+
/**
|
|
43
|
+
* `.pem` holds public certificates as often as private keys, so it counts only
|
|
44
|
+
* when the name says key: `server-key.pem`, `private.pem`, `id_rsa.pem` refuse;
|
|
45
|
+
* `ca.pem`, `cert.pem`, `chain.pem` pass. The cost, accepted: a private key named
|
|
46
|
+
* like a certificate is not caught by name.
|
|
47
|
+
*/
|
|
48
|
+
const KEY_PEM_NAME = /(?:^|[-_.])(?:key|private|secret)(?:$|[-_.])|^id_/i;
|
|
49
|
+
const SSH_KEY = /^id_(?:rsa|dsa|ecdsa|ed25519)(?:_sk)?$/;
|
|
50
|
+
|
|
51
|
+
/** Path tails (after a `/` or at the start) of cloud, CLI and registry credential files. */
|
|
52
|
+
const CREDENTIAL_TAILS: ReadonlyArray<readonly [string, CredentialFileClass]> = [
|
|
53
|
+
['.aws/credentials', 'cloud-credentials'],
|
|
54
|
+
['.config/gcloud/application_default_credentials.json', 'cloud-credentials'],
|
|
55
|
+
// cache-invalidation: not a cache this package writes — gcloud's own credential store, named only to refuse reading it
|
|
56
|
+
['.config/gcloud/credentials.db', 'cloud-credentials'],
|
|
57
|
+
['.azure/accessTokens.json', 'cloud-credentials'],
|
|
58
|
+
['.azure/msal_token_cache.json', 'cloud-credentials'],
|
|
59
|
+
['.kube/config', 'cloud-credentials'],
|
|
60
|
+
['.docker/config.json', 'cloud-credentials'],
|
|
61
|
+
['.config/gh/hosts.yml', 'cloud-credentials'],
|
|
62
|
+
['.git-credentials', 'cloud-credentials'],
|
|
63
|
+
['.my.cnf', 'registry-credentials'],
|
|
64
|
+
['.pgpass', 'registry-credentials'],
|
|
65
|
+
['.npmrc', 'registry-credentials'],
|
|
66
|
+
['.pypirc', 'registry-credentials'],
|
|
67
|
+
['.netrc', 'registry-credentials'],
|
|
68
|
+
['_netrc', 'registry-credentials'],
|
|
69
|
+
['.gem/credentials', 'registry-credentials'],
|
|
70
|
+
['.cargo/credentials', 'registry-credentials'],
|
|
71
|
+
['.cargo/credentials.toml', 'registry-credentials'],
|
|
72
|
+
['.composer/auth.json', 'registry-credentials'],
|
|
73
|
+
['.config/composer/auth.json', 'registry-credentials'],
|
|
74
|
+
];
|
|
75
|
+
|
|
76
|
+
/** A process's environment, and each of its threads' (`/proc/self/task/<tid>/environ`). */
|
|
77
|
+
const PROC_ENVIRON = /^\/proc\/[^/]+(?:\/task\/[^/]+)?\/environ$/;
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* The host whose filesystem decides what a path names. A backslash separates
|
|
81
|
+
* path segments on Windows only: on a POSIX host it is a filename character, so
|
|
82
|
+
* `'dir\\.env'` — and `'C:\\project\\.env'` too — is one file there, not `.env`.
|
|
83
|
+
* Read from the platform, never from the path's spelling; callers that judge a
|
|
84
|
+
* path for another host pass it.
|
|
85
|
+
*/
|
|
86
|
+
export type PathHost = 'posix' | 'windows';
|
|
87
|
+
export const HOST: PathHost = process.platform === 'win32' ? 'windows' : 'posix';
|
|
88
|
+
|
|
89
|
+
const separated = (p: string, host: PathHost): string => (host === 'windows' ? p.replace(/\\/g, '/') : p);
|
|
90
|
+
|
|
91
|
+
/** The credential class of a path, or null. Decided from the path alone. */
|
|
92
|
+
export function credentialFileClass(rawPath: string, host: PathHost = HOST): CredentialFileClass | null {
|
|
93
|
+
const trimmed = separated(rawPath.trim(), host).replace(/\/+$/, '');
|
|
94
|
+
if (trimmed === '') return null;
|
|
95
|
+
// `.` and `..` segments resolved, so `/proc/self/../self/environ` is the file it names.
|
|
96
|
+
const p = path.posix.normalize(trimmed);
|
|
97
|
+
if (PROC_ENVIRON.test(p)) return 'process-environment';
|
|
98
|
+
// Compared case-folded: on the default macOS and Windows filesystems `.ENV`
|
|
99
|
+
// and `ID_RSA` open the same file. On a case-sensitive one this refuses a
|
|
100
|
+
// differently-cased neighbour too, which is the side a read guard errs on.
|
|
101
|
+
const lp = p.toLowerCase();
|
|
102
|
+
const lower = lp.slice(lp.lastIndexOf('/') + 1);
|
|
103
|
+
if (lower === '.env' || lower === '.envrc') return 'env-file';
|
|
104
|
+
if (lower.startsWith('.env.')) {
|
|
105
|
+
// The LAST suffix decides: `.env.local.example` documents keys, `.env.local` holds values.
|
|
106
|
+
const last = lower.slice(lower.lastIndexOf('.') + 1);
|
|
107
|
+
return ENV_TEMPLATE_SUFFIXES.has(last) ? null : 'env-file';
|
|
108
|
+
}
|
|
109
|
+
if (SSH_KEY.test(lower)) return 'private-key';
|
|
110
|
+
if (KEY_EXTENSIONS.some((ext) => lower.endsWith(ext) && lower.length > ext.length)) return 'private-key';
|
|
111
|
+
if (lower.endsWith('.pem') && KEY_PEM_NAME.test(lower.slice(0, -4))) return 'private-key';
|
|
112
|
+
for (const [tail, cls] of CREDENTIAL_TAILS) {
|
|
113
|
+
const t = tail.toLowerCase();
|
|
114
|
+
if (lp === t || lp.endsWith(`/${t}`)) return cls;
|
|
115
|
+
}
|
|
116
|
+
return null;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Command words that act on a path without printing or executing what it holds.
|
|
121
|
+
* A credential path given to any other command is treated as a read, because
|
|
122
|
+
* the set of commands that print a file is open and the set that do not is
|
|
123
|
+
* small. `cp`, `mv`, `source` and `.` are NOT here: `cp .env /dev/stdout` prints
|
|
124
|
+
* it, `source .env` runs it, and a copy or a rename launders the path for the
|
|
125
|
+
* next command.
|
|
126
|
+
*/
|
|
127
|
+
const NON_READING_COMMANDS: ReadonlySet<string> = new Set([
|
|
128
|
+
'ls', 'stat', 'test', '[', 'touch', 'rm', 'chmod', 'chown', 'mkdir', 'wc',
|
|
129
|
+
]);
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* Words that run the command after them: `sudo`, `nice`, `timeout`, …. Their
|
|
133
|
+
* option grammars differ and clustering (`sudo -nu root`) defeats any table of
|
|
134
|
+
* them, so a segment that starts with one is judged conservatively instead of
|
|
135
|
+
* parsed: any credential path anywhere in it refuses, and so does an `env` or a
|
|
136
|
+
* `printenv` anywhere in it.
|
|
137
|
+
*/
|
|
138
|
+
const WRAPPERS: ReadonlySet<string> = new Set([
|
|
139
|
+
'command', 'builtin', 'exec', 'nohup', 'sudo', 'doas', 'nice', 'timeout', 'stdbuf', 'time', 'xargs', 'watch', 'unbuffer',
|
|
140
|
+
]);
|
|
141
|
+
|
|
142
|
+
/** `git` subcommands that name a path without printing its content. */
|
|
143
|
+
const NON_READING_GIT: ReadonlySet<string> = new Set(['add', 'rm', 'mv', 'check-ignore', 'ls-files', 'status']);
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* Split one command segment into words the way the shell joins them: quoted
|
|
147
|
+
* and unquoted runs with no space between them are one word (`-S'cat .env'` is
|
|
148
|
+
* `-Scat .env`), quotes are removed, and a backslash escapes the next character.
|
|
149
|
+
*/
|
|
150
|
+
export function commandWords(segment: string): string[] {
|
|
151
|
+
const words: string[] = [];
|
|
152
|
+
let word = '';
|
|
153
|
+
let inWord = false;
|
|
154
|
+
for (let i = 0; i < segment.length; i += 1) {
|
|
155
|
+
const ch = segment[i] as string;
|
|
156
|
+
if (/\s/.test(ch)) {
|
|
157
|
+
if (inWord) words.push(word);
|
|
158
|
+
word = '';
|
|
159
|
+
inWord = false;
|
|
160
|
+
continue;
|
|
161
|
+
}
|
|
162
|
+
inWord = true;
|
|
163
|
+
if (ch === "'") {
|
|
164
|
+
const end = segment.indexOf("'", i + 1);
|
|
165
|
+
word += segment.slice(i + 1, end === -1 ? segment.length : end);
|
|
166
|
+
i = end === -1 ? segment.length : end;
|
|
167
|
+
} else if (ch === '"') {
|
|
168
|
+
// Inside double quotes a backslash escapes only $ ` " \ and a newline.
|
|
169
|
+
let j = i + 1;
|
|
170
|
+
for (; j < segment.length && segment[j] !== '"'; j += 1) {
|
|
171
|
+
if (segment[j] === '\\' && segment[j + 1] === '\n') {
|
|
172
|
+
j += 1; // a line continuation: both characters go
|
|
173
|
+
continue;
|
|
174
|
+
}
|
|
175
|
+
if (segment[j] === '\\' && j + 1 < segment.length && '$`"\\'.includes(segment[j + 1] as string)) j += 1;
|
|
176
|
+
word += segment[j];
|
|
177
|
+
}
|
|
178
|
+
i = j;
|
|
179
|
+
} else if (ch === '\\' && i + 1 < segment.length) {
|
|
180
|
+
// An escaped character joins the word; an escaped newline is a continuation and adds nothing.
|
|
181
|
+
if (segment[i + 1] !== '\n') word += segment[i + 1];
|
|
182
|
+
i += 1;
|
|
183
|
+
} else {
|
|
184
|
+
word += ch;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
if (inWord) words.push(word);
|
|
188
|
+
return words;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
const ASSIGNMENT = /^[A-Za-z_][A-Za-z0-9_]*=/;
|
|
192
|
+
const VARIABLE_NAME = /^[A-Za-z_][A-Za-z0-9_]*$/;
|
|
193
|
+
|
|
194
|
+
type Verdict = { class: CredentialFileClass; what: string } | null;
|
|
195
|
+
|
|
196
|
+
/** The basename a refusal may name: backslashes read as separators, so no Windows path leaks whole. */
|
|
197
|
+
export function credentialBasename(p: string): string {
|
|
198
|
+
return path.posix.basename(p.replace(/\\/g, '/'));
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
const named = (cls: CredentialFileClass, p: string): Verdict => ({ class: cls, what: `\`${credentialBasename(p)}\`` });
|
|
202
|
+
const base = (w: string): string => w.replace(/^.*\//, '');
|
|
203
|
+
|
|
204
|
+
/**
|
|
205
|
+
* The first credential path mentioned anywhere in `text`, read from the raw
|
|
206
|
+
* characters rather than from parsed words: the text is cut at every character
|
|
207
|
+
* a path cannot hold unquoted — whitespace, quotes, redirections, pipes,
|
|
208
|
+
* separators, parentheses, `=`, `,`, backticks — so `cat<.env`, `--config=.env`
|
|
209
|
+
* and `<(cat .env)` all expose the path, and an attached short option
|
|
210
|
+
* (`xargs -a.env`) is read both whole and without its `-x` prefix. On a Windows
|
|
211
|
+
* host a backslash path is a path: `credentialFileClass` separates on it there.
|
|
212
|
+
*/
|
|
213
|
+
export function credentialMention(text: string, host: PathHost = HOST): Verdict {
|
|
214
|
+
// Two readings of one segment, because neither alone matches the shell: the
|
|
215
|
+
// raw text (an attached `cat<.env`, `--config=.env`), and each word the shell
|
|
216
|
+
// would build — quotes joined, escapes applied only where the shell applies
|
|
217
|
+
// them (`cat .e''nv`, an unquoted `cat .e\nv`) — each cut at the same
|
|
218
|
+
// characters. In the raw text a backslash is still the shell's to consume,
|
|
219
|
+
// so it never separates there; the host decides only for a built word, where
|
|
220
|
+
// a surviving backslash is a filename character the filesystem reads.
|
|
221
|
+
//
|
|
222
|
+
// One exception, conservative on purpose: the segment arrives with the quotes
|
|
223
|
+
// of its command word already removed (`invokedSegments` strips them so
|
|
224
|
+
// `np''m` is npm), so `cat<"C:\x\.env"` and `cat<C:\x\.env` reach here as the
|
|
225
|
+
// same text. A redirection attached to the command word is therefore judged
|
|
226
|
+
// as the filesystem would read it, uncooked: on a Windows host it refuses
|
|
227
|
+
// both, the second a false positive this guard accepts rather than miss the first.
|
|
228
|
+
const head = /^\S*[<>]\S*/.exec(text.trimStart())?.[0];
|
|
229
|
+
const readings: ReadonlyArray<readonly [string, PathHost]> = [
|
|
230
|
+
[text, 'posix'],
|
|
231
|
+
...(head === undefined ? [] : [[head, host] as const]),
|
|
232
|
+
...commandWords(text).map((w) => [w, host] as const),
|
|
233
|
+
];
|
|
234
|
+
for (const [reading, readingHost] of readings) {
|
|
235
|
+
const v = mentionIn(reading, readingHost);
|
|
236
|
+
if (v !== null) return v;
|
|
237
|
+
}
|
|
238
|
+
return null;
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
function mentionIn(text: string, host: PathHost): Verdict {
|
|
242
|
+
for (const raw of text.split(/[\s'"<>|;&()`=,]+/)) {
|
|
243
|
+
if (raw === '') continue;
|
|
244
|
+
const candidates = raw.startsWith('-') ? [raw, raw.replace(/^-+[A-Za-z]?/, '')] : [raw];
|
|
245
|
+
for (const c of candidates) {
|
|
246
|
+
const cls = c === '' ? null : credentialFileClass(c, host);
|
|
247
|
+
if (cls !== null) return named(cls, c);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
return null;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
/** The first credential path among words the shell already built — judged as data, never re-parsed. */
|
|
254
|
+
function credentialAmong(words: readonly string[], host: PathHost): Verdict {
|
|
255
|
+
for (const w of words) {
|
|
256
|
+
const v = mentionIn(w, host);
|
|
257
|
+
if (v !== null) return v;
|
|
258
|
+
}
|
|
259
|
+
return null;
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
/**
|
|
263
|
+
* `env`'s arguments with each `-S`/`--split-string` value spliced in as the
|
|
264
|
+
* arguments it stands for, then its options and assignments skipped. Returns the
|
|
265
|
+
* command it runs, or an empty list when it runs none and prints the
|
|
266
|
+
* environment. A short option cluster ending in `u`, `C` or `S` takes the next
|
|
267
|
+
* word, `--unset`/`--chdir` take the next word, and a `NAME` operand after them
|
|
268
|
+
* is the variable they name.
|
|
269
|
+
*/
|
|
270
|
+
export function envCommand(args: readonly string[]): string[] {
|
|
271
|
+
const stream: string[] = [];
|
|
272
|
+
for (let k = 0; k < args.length; k += 1) {
|
|
273
|
+
const a = args[k] as string;
|
|
274
|
+
if (a === '-S' || a === '--split-string') {
|
|
275
|
+
stream.push(...commandWords(args[k + 1] ?? ''));
|
|
276
|
+
k += 1;
|
|
277
|
+
} else if (/^--split-string=/.test(a) || /^-[a-zA-Z]*S.+$/.test(a)) {
|
|
278
|
+
stream.push(...commandWords(a.startsWith('--') ? a.slice('--split-string='.length) : a.slice(a.indexOf('S') + 1)));
|
|
279
|
+
} else {
|
|
280
|
+
stream.push(a);
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
let i = 0;
|
|
284
|
+
while (i < stream.length) {
|
|
285
|
+
const w = stream[i] as string;
|
|
286
|
+
if (w === '--') {
|
|
287
|
+
i += 1;
|
|
288
|
+
break;
|
|
289
|
+
}
|
|
290
|
+
if (w.startsWith('-') && w !== '-') {
|
|
291
|
+
i += w === '--unset' || w === '--chdir' || /^-[a-zA-Z]*[uC]$/.test(w) ? 2 : 1;
|
|
292
|
+
continue;
|
|
293
|
+
}
|
|
294
|
+
if (ASSIGNMENT.test(w)) {
|
|
295
|
+
i += 1;
|
|
296
|
+
continue;
|
|
297
|
+
}
|
|
298
|
+
break;
|
|
299
|
+
}
|
|
300
|
+
while (i < stream.length && ASSIGNMENT.test(stream[i] as string)) i += 1;
|
|
301
|
+
return stream.slice(i);
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
/**
|
|
305
|
+
* The sources of a `cp` or `mv`: every operand but the destination, or every
|
|
306
|
+
* operand when a target directory is named (`-t DIR`, a cluster ending in `t`,
|
|
307
|
+
* `-tDIR`, `--target-directory[=DIR]`). `-S`/`--suffix` take the next word.
|
|
308
|
+
*/
|
|
309
|
+
export function copySources(args: readonly string[]): string[] {
|
|
310
|
+
const operands: string[] = [];
|
|
311
|
+
let targetGiven = false;
|
|
312
|
+
for (let k = 0; k < args.length; k += 1) {
|
|
313
|
+
const a = args[k] as string;
|
|
314
|
+
if (a === '--target-directory' || /^-[a-zA-Z]*t$/.test(a)) {
|
|
315
|
+
targetGiven = true;
|
|
316
|
+
k += 1;
|
|
317
|
+
} else if (/^--target-directory=/.test(a) || /^-[a-zA-Z]*t.+$/.test(a)) {
|
|
318
|
+
targetGiven = true;
|
|
319
|
+
} else if (a === '-S' || a === '--suffix') {
|
|
320
|
+
k += 1;
|
|
321
|
+
} else if (!a.startsWith('-') || a === '-') {
|
|
322
|
+
operands.push(a);
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
return targetGiven ? operands : operands.slice(0, -1);
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
/** Why a command segment is refused, or null. `segment` starts at its command word. */
|
|
329
|
+
export function segmentVerdict(segment: string, host: PathHost = HOST, depth = 0): Verdict {
|
|
330
|
+
const words = commandWords(segment);
|
|
331
|
+
let i = 0;
|
|
332
|
+
while (i < words.length && ASSIGNMENT.test(words[i] as string)) i += 1;
|
|
333
|
+
const cmd = base(words[i] ?? '');
|
|
334
|
+
const args = words.slice(i + 1);
|
|
335
|
+
|
|
336
|
+
if (WRAPPERS.has(cmd)) {
|
|
337
|
+
if (args.some((a) => base(a) === 'env' || base(a) === 'printenv')) {
|
|
338
|
+
return { class: 'process-environment', what: `\`${cmd} … env\`` };
|
|
339
|
+
}
|
|
340
|
+
return credentialMention(segment, host);
|
|
341
|
+
}
|
|
342
|
+
if (cmd === 'env') {
|
|
343
|
+
const ran = envCommand(args);
|
|
344
|
+
if (ran.length === 0) return { class: 'process-environment', what: '`env`' };
|
|
345
|
+
if (depth >= 3) return credentialAmong(ran, host);
|
|
346
|
+
return segmentVerdict(ran.map((w) => (/\s/.test(w) ? `'${w}'` : w)).join(' '), host, depth + 1) ?? credentialAmong(args, host);
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
const operands = args.filter((a) => !a.startsWith('-'));
|
|
350
|
+
// Printing the whole environment: `printenv` with no name, `export` with no
|
|
351
|
+
// name, a bare `set` (`set -e` only sets options), and `declare -x|-p` with
|
|
352
|
+
// no name.
|
|
353
|
+
const dumpsEnv =
|
|
354
|
+
(cmd === 'printenv' && !operands.some((a) => VARIABLE_NAME.test(a))) ||
|
|
355
|
+
(cmd === 'export' && operands.length === 0) ||
|
|
356
|
+
(cmd === 'set' && args.length === 0) ||
|
|
357
|
+
((cmd === 'declare' || cmd === 'typeset') && operands.length === 0 && args.some((a) => /^-[a-zA-Z]*[xp]/.test(a)));
|
|
358
|
+
if (dumpsEnv) return { class: 'process-environment', what: `\`${cmd}\`` };
|
|
359
|
+
|
|
360
|
+
// A copy or a rename reads its sources and only writes its destination:
|
|
361
|
+
// `cp .env.example .env` creates the file, while `cp .env /dev/stdout` prints
|
|
362
|
+
// it and `cp .env x` or `mv .env x` launders it for the next command.
|
|
363
|
+
if (cmd === 'cp' || cmd === 'mv') return credentialAmong(copySources(args), host);
|
|
364
|
+
|
|
365
|
+
const reads = !(NON_READING_COMMANDS.has(cmd) || (cmd === 'git' && NON_READING_GIT.has(operands[0] ?? '')));
|
|
366
|
+
return reads ? credentialMention(segment, host) : null;
|
|
367
|
+
}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* WHAT 6.1 ASKS, AND WHY IT IS NOT THE PRICE GRID. Step 6.1 says: measure
|
|
5
5
|
* `eager-all` against `thin` against `delivery` — the three values
|
|
6
|
-
* `_lib/lean_projection_mode.ts
|
|
6
|
+
* `_lib/lean_projection_mode.ts` `LeanProjectionMode` already declares — BEFORE any new retrieval
|
|
7
7
|
* component is written. `model_rule_injection.ts` already prices those three
|
|
8
8
|
* shapes, and a price grid is a cost model rather than a delivery measurement:
|
|
9
9
|
* it reports what each shape COSTS and never what each shape DELIVERS. The
|
|
@@ -236,7 +236,7 @@ export function renderArmExperiment(rows: readonly ArmRow[], capBytes: number):
|
|
|
236
236
|
|
|
237
237
|
push('── three-arm delivery experiment (road-to-governed-harness-evolution 6.1) ──');
|
|
238
238
|
push(
|
|
239
|
-
`arms = LeanProjectionMode (_lib/lean_projection_mode.ts
|
|
239
|
+
`arms = LeanProjectionMode (_lib/lean_projection_mode.ts) · ` +
|
|
240
240
|
`one corpus · one matcher (_lib/router_match.ts) · cap ${capBytes} B`,
|
|
241
241
|
);
|
|
242
242
|
push('');
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Where a lowered ceremony depth may apply, and when it must stop applying.
|
|
3
|
+
*
|
|
4
|
+
* The owner's decision of 2026-10-21 (option (d) of the
|
|
5
|
+
* `class-depth-flip-reopens-the-risk-null` blocker) allows a lower depth only
|
|
6
|
+
* on steps whose every changed path is structurally safe — prose about the work
|
|
7
|
+
* rather than the work, or a test fixture — and only once the shadow reading
|
|
8
|
+
* clears the pre-registered threshold. A sampled full-depth audit then keeps
|
|
9
|
+
* reading each lowered class, and a class whose sampled escapes exceed the same
|
|
10
|
+
* threshold returns to full depth without anyone having to notice.
|
|
11
|
+
*/
|
|
12
|
+
import { createHash } from 'node:crypto';
|
|
13
|
+
|
|
14
|
+
import type { RiskClass } from '../classify_change_risk.js';
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Paths whose risk the path itself bounds.
|
|
18
|
+
*
|
|
19
|
+
* Narrower than R0 on purpose: R0 admits every `.md`, and in this repository a
|
|
20
|
+
* rule, a skill, a contract, a guideline agents read before coding, or a record
|
|
21
|
+
* that grants authority (an owner directive, a ratification) is markdown that
|
|
22
|
+
* changes what agents do. Those stay at full depth whatever their extension.
|
|
23
|
+
*/
|
|
24
|
+
export const SAFE_PATH_PATTERNS: readonly RegExp[] = [
|
|
25
|
+
/^agents\/roadmaps\/.+\.md$/,
|
|
26
|
+
/^agents\/evidence\/(?!owner-directives\/|ratifications\/).+\.md$/,
|
|
27
|
+
/^docs\/(?!contracts\/|decisions\/|guidelines\/).+\.md$/,
|
|
28
|
+
/^README\.md$/,
|
|
29
|
+
/(^|\/)tests?\/(.+\/)?fixtures?\//,
|
|
30
|
+
];
|
|
31
|
+
|
|
32
|
+
export function isStructurallySafe(paths: readonly string[]): boolean {
|
|
33
|
+
return paths.length > 0 && paths.every((p) => SAFE_PATH_PATTERNS.some((re) => re.test(p.replace(/^\.\//, ''))));
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export interface FlipThreshold {
|
|
37
|
+
/** Steps (or audit samples) a class needs before its figures are read. */
|
|
38
|
+
min_steps: number;
|
|
39
|
+
/** Escaped high/critical findings tolerated across those steps. */
|
|
40
|
+
max_escaped: number;
|
|
41
|
+
max_critical: number;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export interface FlipBlock {
|
|
45
|
+
scope: 'structurally-safe-paths';
|
|
46
|
+
classes: RiskClass[];
|
|
47
|
+
requires: FlipThreshold;
|
|
48
|
+
/** Repo-relative path of the committed reading that cleared `requires`; null until then. */
|
|
49
|
+
reading: string | null;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export interface AuditSample {
|
|
53
|
+
step: string;
|
|
54
|
+
cls: RiskClass;
|
|
55
|
+
escaped: boolean;
|
|
56
|
+
critical: boolean;
|
|
57
|
+
date: string;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export interface ParsedReceipt {
|
|
61
|
+
cls: RiskClass;
|
|
62
|
+
mode: 'shadow' | 'active';
|
|
63
|
+
/** The receipt was written for a step whose every path is structurally safe. */
|
|
64
|
+
safe: boolean;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
const RECEIPT_LINE = /<!--\s*receipt:\s*class=(R[0-3])\s*·\s*(shadow|active)\b([^>]*)-->/;
|
|
68
|
+
|
|
69
|
+
export function parseReceipt(line: string): ParsedReceipt | null {
|
|
70
|
+
const m = RECEIPT_LINE.exec(line);
|
|
71
|
+
if (m === null) return null;
|
|
72
|
+
return { cls: m[1] as RiskClass, mode: m[2] as 'shadow' | 'active', safe: /·\s*scope=safe\b/.test(m[3] ?? '') };
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/** Ticked steps of `cls` whose receipt reads `active` — the lowered steps so far, from the roadmaps themselves. */
|
|
76
|
+
export function lowersSoFar(roadmapTexts: readonly string[], cls: RiskClass): number {
|
|
77
|
+
let n = 0;
|
|
78
|
+
for (const text of roadmapTexts) {
|
|
79
|
+
for (const line of text.split('\n')) {
|
|
80
|
+
if (!/^\s*-\s\[x\]\s/.test(line)) continue;
|
|
81
|
+
const r = parseReceipt(line);
|
|
82
|
+
if (r !== null && r.cls === cls && r.mode === 'active') n += 1;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return n;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Whether the step is audited at full depth after merge: 1 in 4 of a class's
|
|
90
|
+
* first `min_steps` lowered steps, 1 in 10 after. Seeded by the step key alone,
|
|
91
|
+
* so anyone re-running it on the same key gets the same answer.
|
|
92
|
+
*/
|
|
93
|
+
export function sampledForAudit(stepKey: string, lowersSoFar: number, threshold: FlipThreshold): boolean {
|
|
94
|
+
const every = lowersSoFar < threshold.min_steps ? 4 : 10;
|
|
95
|
+
const digest = createHash('sha256').update(`depth-audit-v1:${stepKey}`).digest();
|
|
96
|
+
return digest.readUInt32BE(0) % every === 0;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Classes whose audit samples have broken the threshold, read over the latest
|
|
101
|
+
* `min_steps` samples. A window still filling up is read too: a second escape
|
|
102
|
+
* or a critical among fewer samples has already broken the threshold, and
|
|
103
|
+
* waiting for thirty would keep a class lowered after it failed.
|
|
104
|
+
*/
|
|
105
|
+
export function rolledBackClasses(samples: readonly AuditSample[], threshold: FlipThreshold): RiskClass[] {
|
|
106
|
+
const byClass = new Map<RiskClass, AuditSample[]>();
|
|
107
|
+
for (const s of [...samples].sort((a, b) => a.date.localeCompare(b.date))) {
|
|
108
|
+
byClass.set(s.cls, [...(byClass.get(s.cls) ?? []), s]);
|
|
109
|
+
}
|
|
110
|
+
const out: RiskClass[] = [];
|
|
111
|
+
for (const [cls, all] of byClass) {
|
|
112
|
+
const window = all.slice(-threshold.min_steps);
|
|
113
|
+
const escaped = window.filter((s) => s.escaped).length;
|
|
114
|
+
const critical = window.filter((s) => s.critical).length;
|
|
115
|
+
if (escaped > threshold.max_escaped || critical > threshold.max_critical) out.push(cls);
|
|
116
|
+
}
|
|
117
|
+
return out.sort();
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* The depth a step actually runs at: lowered only inside the owner's scope,
|
|
122
|
+
* only once a committed reading has cleared `requires`, and never for a
|
|
123
|
+
* rolled-back class. An `active` table with no reading recorded stays at full
|
|
124
|
+
* depth: the owner decision allows the lowering on the reading, not on the flag.
|
|
125
|
+
*/
|
|
126
|
+
export function effectiveMode(
|
|
127
|
+
tableMode: 'shadow' | 'active',
|
|
128
|
+
cls: RiskClass,
|
|
129
|
+
paths: readonly string[],
|
|
130
|
+
flip: FlipBlock,
|
|
131
|
+
rolledBack: readonly RiskClass[],
|
|
132
|
+
): 'shadow' | 'active' {
|
|
133
|
+
const cleared = typeof flip.reading === 'string' && flip.reading.trim() !== '';
|
|
134
|
+
const lowered =
|
|
135
|
+
tableMode === 'active' &&
|
|
136
|
+
cleared &&
|
|
137
|
+
flip.classes.includes(cls) &&
|
|
138
|
+
isStructurallySafe(paths) &&
|
|
139
|
+
!rolledBack.includes(cls);
|
|
140
|
+
return lowered ? 'active' : 'shadow';
|
|
141
|
+
}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The carrier for a declared Consistency Lock (road-to-a-canvas-the-code-owns
|
|
3
|
+
* step 8.2).
|
|
4
|
+
*
|
|
5
|
+
* `design-system-capture` lets a project declare, in `DESIGN.md` § Consistency
|
|
6
|
+
* Locks, a Colour Lock (one accent family), a Shape Lock (one radius set) and,
|
|
7
|
+
* when it chooses, a Spacing Lock. It said a value outside a Lock "is
|
|
8
|
+
* off-system" and gets flagged — and nothing flagged it: `lint_design_slop`
|
|
9
|
+
* knows no project's Locks and `lint_design_quality` excludes palette opinions by
|
|
10
|
+
* design. This is the narrow, Lock-scoped form of that check.
|
|
11
|
+
*
|
|
12
|
+
* **Flags, never blocks.** A finding is rebuttable — the author states why in the
|
|
13
|
+
* diff or records it in a baseline. A brownfield project records its existing
|
|
14
|
+
* drift once with `--write-baseline`; after that only NEW drift is reported.
|
|
15
|
+
* A Lock line still carrying the template's `[placeholder]` declares nothing.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
export interface Locks {
|
|
19
|
+
/** Hue ranges in degrees, [centre, tolerance]. Empty = no Colour Lock. */
|
|
20
|
+
hues: Array<[number, number]>;
|
|
21
|
+
radius: Set<number> | null;
|
|
22
|
+
spacing: Set<number> | null;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export interface LockFinding {
|
|
26
|
+
file: string;
|
|
27
|
+
line: number;
|
|
28
|
+
lock: 'colour' | 'shape' | 'spacing';
|
|
29
|
+
value: string;
|
|
30
|
+
message: string;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const FAMILY_HUE: Record<string, [number, number]> = {
|
|
34
|
+
red: [0, 15], orange: [28, 13], amber: [42, 10], yellow: [55, 10], lime: [80, 15], green: [125, 30],
|
|
35
|
+
emerald: [155, 15], teal: [175, 18], cyan: [190, 12], sky: [200, 12], blue: [220, 18], indigo: [240, 12],
|
|
36
|
+
violet: [260, 12], purple: [275, 12], fuchsia: [295, 15], pink: [325, 18], rose: [348, 14],
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
function hexToHsl(hex: string): { h: number; s: number; l: number } | null {
|
|
40
|
+
let h = hex.replace('#', '');
|
|
41
|
+
if (h.length === 3 || h.length === 4) h = h.slice(0, 3).split('').map((c) => c + c).join('');
|
|
42
|
+
if (h.length !== 6 && h.length !== 8) return null;
|
|
43
|
+
const [r, g, b] = [0, 2, 4].map((i) => parseInt(h.slice(i, i + 2), 16) / 255) as [number, number, number];
|
|
44
|
+
const max = Math.max(r, g, b);
|
|
45
|
+
const min = Math.min(r, g, b);
|
|
46
|
+
const l = (max + min) / 2;
|
|
47
|
+
const d = max - min;
|
|
48
|
+
if (d === 0) return { h: 0, s: 0, l };
|
|
49
|
+
const s = d / (1 - Math.abs(2 * l - 1));
|
|
50
|
+
const hue = max === r ? ((g - b) / d) % 6 : max === g ? (b - r) / d + 2 : (r - g) / d + 4;
|
|
51
|
+
return { h: (hue * 60 + 360) % 360, s, l };
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
const lockLine = (md: string, name: RegExp): string | null => {
|
|
55
|
+
const m = new RegExp(`^\\s*-\\s*${name.source}\\s*:(.*)$`, 'im').exec(md);
|
|
56
|
+
if (m === null) return null;
|
|
57
|
+
const body = (m[1] as string).trim();
|
|
58
|
+
return /^\[.*\]/.test(body) ? null : body;
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
const pxSet = (line: string | null): Set<number> | null => {
|
|
62
|
+
if (line === null) return null;
|
|
63
|
+
const nums = [...line.matchAll(/(\d+(?:\.\d+)?)(?=\s*(?:\/|px|,|$))/g)].map((m) => Number(m[1]));
|
|
64
|
+
return nums.length > 0 ? new Set([0, ...nums]) : null;
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
export function parseLocks(designMd: string): Locks {
|
|
68
|
+
const hues: Array<[number, number]> = [];
|
|
69
|
+
const colour = lockLine(designMd, /Colou?r Lock/);
|
|
70
|
+
if (colour !== null) {
|
|
71
|
+
for (const word of colour.toLowerCase().match(/[a-z]+/g) ?? []) {
|
|
72
|
+
const f = FAMILY_HUE[word];
|
|
73
|
+
if (f !== undefined) hues.push(f);
|
|
74
|
+
}
|
|
75
|
+
for (const m of colour.matchAll(/#[0-9a-f]{3,8}\b/gi)) {
|
|
76
|
+
const hsl = hexToHsl(m[0]);
|
|
77
|
+
if (hsl !== null) hues.push([Math.round(hsl.h), 15]);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return { hues, radius: pxSet(lockLine(designMd, /Shape Lock/)), spacing: pxSet(lockLine(designMd, /Spacing Lock/)) };
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
const hueDistance = (a: number, b: number): number => Math.min(Math.abs(a - b), 360 - Math.abs(a - b));
|
|
84
|
+
|
|
85
|
+
/** Every value in one UI file that lies outside a declared Lock. */
|
|
86
|
+
export function checkFile(file: string, text: string, locks: Locks): LockFinding[] {
|
|
87
|
+
const out: LockFinding[] = [];
|
|
88
|
+
text.split('\n').forEach((lineText, i) => {
|
|
89
|
+
const line = i + 1;
|
|
90
|
+
if (locks.hues.length > 0) {
|
|
91
|
+
for (const m of lineText.matchAll(/#[0-9a-fA-F]{3,8}\b/g)) {
|
|
92
|
+
const hsl = hexToHsl(m[0]);
|
|
93
|
+
if (hsl === null || hsl.s * (1 - Math.abs(2 * hsl.l - 1)) < 0.08) continue; // low chroma: a neutral is never an accent
|
|
94
|
+
if (locks.hues.some(([c, tol]) => hueDistance(hsl.h, c) <= tol)) continue;
|
|
95
|
+
out.push({ file, line, lock: 'colour', value: m[0], message: `${m[0]} (hue ${Math.round(hsl.h)}°) lies outside the declared Colour Lock` });
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
const prop = /(border(?:-[a-z]+)*-radius|radius)\s*:\s*([^;]+)|(margin|padding|gap|row-gap|column-gap)(?:-[a-z]+)?\s*:\s*([^;]+)/i.exec(lineText);
|
|
99
|
+
if (prop === null) return;
|
|
100
|
+
const isRadius = prop[1] !== undefined;
|
|
101
|
+
const set = isRadius ? locks.radius : locks.spacing;
|
|
102
|
+
if (set === null) return;
|
|
103
|
+
for (const m of (prop[2] ?? prop[4] ?? '').matchAll(/(\d+(?:\.\d+)?)px/g)) {
|
|
104
|
+
const n = Number(m[1]);
|
|
105
|
+
if (set.has(n) || (isRadius && n >= 999)) continue;
|
|
106
|
+
const lock = isRadius ? 'shape' : 'spacing';
|
|
107
|
+
out.push({ file, line, lock, value: `${m[1]}px`, message: `${m[1]}px is not in the declared ${isRadius ? 'Shape' : 'Spacing'} Lock set` });
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
return out;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/** Drop findings a brownfield baseline already records — only new drift counts. */
|
|
114
|
+
export function newDrift(findings: LockFinding[], baseline: ReadonlyArray<{ file: string; value: string }>): LockFinding[] {
|
|
115
|
+
const known = new Set(baseline.map((b) => `${b.file}\0${b.value.toLowerCase()}`));
|
|
116
|
+
return findings.filter((f) => !known.has(`${f.file}\0${f.value.toLowerCase()}`));
|
|
117
|
+
}
|