@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,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* How a browser reads the URLs and names in an SVG, for the safety rules in
|
|
3
|
+
* `svg_rules.ts`: references decoded, controls stripped, CSS escapes resolved,
|
|
4
|
+
* and an element prefix stripped only where it is bound to the SVG namespace.
|
|
5
|
+
* Its own module so `svg_rules.ts` stays under the source-size ceiling.
|
|
6
|
+
*/
|
|
7
|
+
/** Prefixes the document binds to the SVG namespace (`xmlns:svg="…/2000/svg"`). */
|
|
8
|
+
export function svgPrefixes(content) {
|
|
9
|
+
const out = new Set();
|
|
10
|
+
const re = /xmlns:([\w.-]+)\s*=\s*["']http:\/\/www\.w3\.org\/2000\/svg["']/gi;
|
|
11
|
+
let m;
|
|
12
|
+
while ((m = re.exec(content)) !== null)
|
|
13
|
+
out.add((m[1] ?? '').toLowerCase());
|
|
14
|
+
return out;
|
|
15
|
+
}
|
|
16
|
+
/** The SVG local name: `svg:script` is a `script` where `svg` is bound to SVG; `foo:script` is not. */
|
|
17
|
+
export function localName(name, prefixes) {
|
|
18
|
+
const colon = name.indexOf(':');
|
|
19
|
+
return colon !== -1 && prefixes.has(name.slice(0, colon)) ? name.slice(colon + 1) : name;
|
|
20
|
+
}
|
|
21
|
+
/** Attributes read from the raw tag, unquoted values included — HTML parses those. */
|
|
22
|
+
export function rawAttrs(raw) {
|
|
23
|
+
const out = {};
|
|
24
|
+
const re = /([\w:.-]+)\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\s>"'`=]+))/g;
|
|
25
|
+
let m;
|
|
26
|
+
while ((m = re.exec(raw)) !== null)
|
|
27
|
+
out[(m[1] ?? '').toLowerCase()] = m[2] ?? m[3] ?? m[4] ?? '';
|
|
28
|
+
return out;
|
|
29
|
+
}
|
|
30
|
+
/** Attributes whose value is followed as a URL. */
|
|
31
|
+
export const URL_ATTRS = new Set(['href', 'xlink:href', 'src']);
|
|
32
|
+
/** A URL that executes or opens a document when followed. */
|
|
33
|
+
export const isActiveUrl = (raw) => /^(javascript:|data:text\/html)/i.test(resolvedUrl(raw));
|
|
34
|
+
const NAMED_URL_ENTITIES = {
|
|
35
|
+
colon: ':', sol: '/', tab: '\t', newline: '\n', period: '.', lpar: '(', rpar: ')', amp: '&',
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* The URL a browser would actually resolve from an attribute value: character
|
|
39
|
+
* references decoded, leading/trailing C0 controls and spaces stripped, tab and
|
|
40
|
+
* newline removed anywhere. The trailing `;` of a reference is optional on
|
|
41
|
+
* purpose: an `.svg` parsed as XML needs it, but the same graphic inlined in an
|
|
42
|
+
* HTML host is parsed by the HTML tokenizer, which decodes `javascript:`
|
|
43
|
+
* too — over-reading XML here costs precision, under-reading HTML costs a miss.
|
|
44
|
+
* The raw value is attacker-chosen, so a scheme test
|
|
45
|
+
* against it is a test of one spelling — ` https:`, `ht\ttps:`, `javascript:`
|
|
46
|
+
* all load, and all passed.
|
|
47
|
+
*/
|
|
48
|
+
export function resolvedUrl(raw) {
|
|
49
|
+
const decoded = raw.replace(/&(?:#x([0-9a-f]+)|#(\d+)|([a-z]+));?/gi, (m, hex, dec, name) => {
|
|
50
|
+
const cp = hex ? parseInt(hex, 16) : dec ? parseInt(dec, 10) : NaN;
|
|
51
|
+
if (!Number.isNaN(cp))
|
|
52
|
+
return cp <= 0x10ffff ? String.fromCodePoint(cp) : m;
|
|
53
|
+
return NAMED_URL_ENTITIES[name.toLowerCase()] ?? m;
|
|
54
|
+
});
|
|
55
|
+
return decoded.replace(/^[\u0000- ]+|[\u0000- ]+$/g, '').replace(/[\t\n\r]/g, '');
|
|
56
|
+
}
|
|
57
|
+
/** CSS escapes decoded: `\\68 ` and `\\h` both read `h`. */
|
|
58
|
+
export function cssUnescape(raw) {
|
|
59
|
+
return raw.replace(/\\([0-9a-f]{1,6})\s?|\\(.)/gi, (m, hex, ch) => {
|
|
60
|
+
if (hex) {
|
|
61
|
+
const cp = parseInt(hex, 16);
|
|
62
|
+
return cp <= 0x10ffff ? String.fromCodePoint(cp) : m;
|
|
63
|
+
}
|
|
64
|
+
return ch;
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=svg_urls.js.map
|
|
@@ -86,4 +86,23 @@ export function isUiTreePath(p) {
|
|
|
86
86
|
return false;
|
|
87
87
|
return UI_PATH_FRAGMENTS.some((fragment) => normalized.includes(fragment));
|
|
88
88
|
}
|
|
89
|
+
/**
|
|
90
|
+
* The file-shaped triggers of `design-fidelity` — the ONE list every handover
|
|
91
|
+
* carrier reads (`isArtifactRead`, `isHandoverPath`, `HANDOVER_TRIGGERS`).
|
|
92
|
+
* Three hand copies drifted: one lacked `*.dc.html`. `design_pass.test.ts`
|
|
93
|
+
* pins this list to the rule's frontmatter in both directions.
|
|
94
|
+
*/
|
|
95
|
+
export const HANDOVER_SHAPES = [
|
|
96
|
+
{ file_pattern: '*design.html' },
|
|
97
|
+
{ file_pattern: '*.dc.html' },
|
|
98
|
+
{ path_prefix: '.claude/design-system/' },
|
|
99
|
+
{ path_prefix: '.design-sync/' },
|
|
100
|
+
];
|
|
101
|
+
/** True when `file` has a handover shape. Direction-agnostic, case-insensitive. */
|
|
102
|
+
export function isHandoverShape(file) {
|
|
103
|
+
if (!file)
|
|
104
|
+
return false;
|
|
105
|
+
const normalized = file.replace(/\\/g, '/').toLowerCase();
|
|
106
|
+
return HANDOVER_SHAPES.some((s) => 'path_prefix' in s ? normalized.includes(s.path_prefix) : normalized.endsWith(s.file_pattern.slice(1)));
|
|
107
|
+
}
|
|
89
108
|
//# sourceMappingURL=ui_surface.js.map
|
|
@@ -0,0 +1,364 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The verification-command selector — one predicate, two importers.
|
|
3
|
+
*
|
|
4
|
+
* It first moved here byte-identical out of `hooks/turn_end_gate_hook.ts` so
|
|
5
|
+
* that `_lib/verification_evidence.ts` could read it without importing a hook
|
|
6
|
+
* that imports the evidence module straight back. That cycle resolves at
|
|
7
|
+
* runtime today and breaks the day either side grows a module-level constant
|
|
8
|
+
* reading the other, which is a failure nobody would trace to an import line.
|
|
9
|
+
*
|
|
10
|
+
* The hook re-exports the name, so every existing consumer — including both
|
|
11
|
+
* pinning test files — addresses it at the path it always did.
|
|
12
|
+
*
|
|
13
|
+
* WHY IT STOPPED BEING A REGEX (2026-09-30).
|
|
14
|
+
* The tree carried TWO expressions answering "did this command verify
|
|
15
|
+
* anything", and they disagreed in both directions:
|
|
16
|
+
*
|
|
17
|
+
* - `_VERIFY_RE` here matched a verification token **anywhere on the line**, so
|
|
18
|
+
* `ls tests`, `cat build.log`, `git checkout main`, `mkdir build` and
|
|
19
|
+
* `git commit -m "fix ci"` all cleared detector C — the exact case this
|
|
20
|
+
* header claimed to reject. Measured at the pin: all six returned `true`.
|
|
21
|
+
* - `_VERIFICATION_RE` in `before_complete_hook.ts` was head-anchored to a
|
|
22
|
+
* fixed vendor list and refused `npx vitest run`, `tsc --noEmit` and every
|
|
23
|
+
* `./scripts-run src/scripts/lint_*` — commands this project runs constantly.
|
|
24
|
+
* Measured at the pin: all three returned `false`.
|
|
25
|
+
*
|
|
26
|
+
* Both accepted `npm test || true`, where the shell discards the failure.
|
|
27
|
+
*
|
|
28
|
+
* The audited allowlist passed the whole time the first defect was live,
|
|
29
|
+
* because not one of its seven negatives put a verify token in an ARGUMENT
|
|
30
|
+
* position. A word-boundary regex cannot express "the head of the segment",
|
|
31
|
+
* which is the property that actually distinguishes `npm test` from `ls tests`,
|
|
32
|
+
* so the predicate is now structural: split on shell separators, drop a
|
|
33
|
+
* segment whose failure the shell discards, and classify each remaining
|
|
34
|
+
* segment on its HEAD.
|
|
35
|
+
*
|
|
36
|
+
* THE LISTS ARE STILL DELIBERATELY NARROW.
|
|
37
|
+
* A positive list. The alternative — treating any `Bash` call as verification —
|
|
38
|
+
* was rejected because `ls` would then clear an unverified edit, which is the
|
|
39
|
+
* failure mode `verify-before-complete` names ("relying on partial
|
|
40
|
+
* verification"). The cost of narrowness is a MISSED detection when a project
|
|
41
|
+
* verifies by some command not listed here, and that is the safe direction for
|
|
42
|
+
* a gate that can refuse a turn: a false negative costs one unguarded turn, a
|
|
43
|
+
* false positive teaches the user to switch the gate off.
|
|
44
|
+
*
|
|
45
|
+
* AUDITED 2026-08-17, re-seeded 2026-09-30 from the union of both lists minus
|
|
46
|
+
* every row that only ever matched on an argument. The table of every command
|
|
47
|
+
* with its verdict is `turn_end_verify_allowlist.test.ts`; the two directions
|
|
48
|
+
* of the old disagreement are `verification_command_anchoring.test.ts`.
|
|
49
|
+
*
|
|
50
|
+
* Deliberate NON-additions, kept because Risk 2 of the originating roadmap is
|
|
51
|
+
* that every addition is a way to satisfy the gate without verifying anything:
|
|
52
|
+
*
|
|
53
|
+
* · `npm run prepack` — a lifecycle hook whose content is per-project. Here
|
|
54
|
+
* it validates; elsewhere it copies files.
|
|
55
|
+
* · `task sync` / `task generate-tools` / `agent-config roadmap:progress` —
|
|
56
|
+
* GENERATORS. They rewrite the tree; they check nothing.
|
|
57
|
+
* · `agent-config gates --all` — enumerates gates, runs none.
|
|
58
|
+
* · `rector` — a refactoring tool. Its dry run prints a diff; it asserts
|
|
59
|
+
* nothing. It appears in `_VERIFICATION_RE`'s list and is dropped from the
|
|
60
|
+
* union on the strength of the audited `false` row, which carries a reason
|
|
61
|
+
* where the other list carried only a name.
|
|
62
|
+
* · `./scripts-run src/scripts/rule_activation_census` — a census writes a
|
|
63
|
+
* report; it asserts nothing. This is why the `scripts-run` rule keys on
|
|
64
|
+
* the `check_` / `lint_` prefix rather than on the runner.
|
|
65
|
+
*
|
|
66
|
+
* `psalm` IS carried, unlike the pre-2026-09-30 note here which argued it out
|
|
67
|
+
* for want of a local user: it was in `_VERIFICATION_RE` all along, so the
|
|
68
|
+
* union rule admits it and dropping it would be a narrowing this change did not
|
|
69
|
+
* set out to make.
|
|
70
|
+
*
|
|
71
|
+
* WHAT THIS SELECTOR STILL CANNOT DO: it reads the command TEXT, so
|
|
72
|
+
* `vitest run` matches whether or not it passed. Deciding whether a run proved
|
|
73
|
+
* anything is `verification_evidence.ts`, which reads the exit code and the
|
|
74
|
+
* summary the command printed. This selector decides only what is WORTH
|
|
75
|
+
* recording and classifying.
|
|
76
|
+
*/
|
|
77
|
+
/** Binaries that verify when they are the head of a segment. */
|
|
78
|
+
const VERIFY_BINARIES = new Set([
|
|
79
|
+
'vitest',
|
|
80
|
+
'jest',
|
|
81
|
+
'pytest',
|
|
82
|
+
'phpunit',
|
|
83
|
+
'pest',
|
|
84
|
+
'tsc',
|
|
85
|
+
'eslint',
|
|
86
|
+
'ruff',
|
|
87
|
+
'mypy',
|
|
88
|
+
'pyright',
|
|
89
|
+
'clippy',
|
|
90
|
+
'phpstan',
|
|
91
|
+
'psalm',
|
|
92
|
+
'ecs',
|
|
93
|
+
]);
|
|
94
|
+
/** Prefixes that delegate to the real command; dropped before classifying. */
|
|
95
|
+
const DELEGATING_HEADS = new Set([
|
|
96
|
+
'npx',
|
|
97
|
+
'bunx',
|
|
98
|
+
'sudo',
|
|
99
|
+
'time',
|
|
100
|
+
'command',
|
|
101
|
+
]);
|
|
102
|
+
/** Path prefixes a binary is commonly reached through. */
|
|
103
|
+
const PATH_PREFIXES = [
|
|
104
|
+
'./',
|
|
105
|
+
'vendor/bin/',
|
|
106
|
+
'.venv/bin/',
|
|
107
|
+
'node_modules/.bin/',
|
|
108
|
+
'bin/',
|
|
109
|
+
];
|
|
110
|
+
/** A script or subcommand name that names a check rather than a build step. */
|
|
111
|
+
const VERIFY_WORD = /(^|[-_:])(test|tests|check|checks|lint|typecheck|tsc|qa|preflight|smoke|validate)([-_:]|$)/i;
|
|
112
|
+
/** `npm run build` verifies here; `task build` is not in the audited surface. */
|
|
113
|
+
const NPM_SCRIPT_WORD = /(^|[-_:])(test|tests|check|checks|lint|typecheck|tsc|build)([-_:]|$)/i;
|
|
114
|
+
/** Strip an unquoted trailing `#` comment. */
|
|
115
|
+
function stripComment(command) {
|
|
116
|
+
let inSingle = false;
|
|
117
|
+
let inDouble = false;
|
|
118
|
+
for (let i = 0; i < command.length; i += 1) {
|
|
119
|
+
const ch = command[i];
|
|
120
|
+
if (ch === "'" && !inDouble)
|
|
121
|
+
inSingle = !inSingle;
|
|
122
|
+
else if (ch === '"' && !inSingle)
|
|
123
|
+
inDouble = !inDouble;
|
|
124
|
+
else if (ch === '#' && !inSingle && !inDouble && (i === 0 || /\s/.test(command[i - 1] ?? ''))) {
|
|
125
|
+
return command.slice(0, i);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
return command;
|
|
129
|
+
}
|
|
130
|
+
/** Split into segments, remembering the separator that follows each. */
|
|
131
|
+
function splitSegments(command) {
|
|
132
|
+
const raw = [];
|
|
133
|
+
let buf = '';
|
|
134
|
+
let inSingle = false;
|
|
135
|
+
let inDouble = false;
|
|
136
|
+
for (let i = 0; i < command.length; i += 1) {
|
|
137
|
+
const ch = command[i];
|
|
138
|
+
const two = command.slice(i, i + 2);
|
|
139
|
+
if (ch === "'" && !inDouble) {
|
|
140
|
+
inSingle = !inSingle;
|
|
141
|
+
buf += ch;
|
|
142
|
+
continue;
|
|
143
|
+
}
|
|
144
|
+
if (ch === '"' && !inSingle) {
|
|
145
|
+
inDouble = !inDouble;
|
|
146
|
+
buf += ch;
|
|
147
|
+
continue;
|
|
148
|
+
}
|
|
149
|
+
if (!inSingle && !inDouble) {
|
|
150
|
+
if (two === '&&' || two === '||') {
|
|
151
|
+
raw.push({ text: buf, sep: two });
|
|
152
|
+
buf = '';
|
|
153
|
+
i += 1;
|
|
154
|
+
continue;
|
|
155
|
+
}
|
|
156
|
+
if (ch === ';' || ch === '|') {
|
|
157
|
+
raw.push({ text: buf, sep: ch });
|
|
158
|
+
buf = '';
|
|
159
|
+
continue;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
buf += ch;
|
|
163
|
+
}
|
|
164
|
+
raw.push({ text: buf, sep: null });
|
|
165
|
+
return raw.map((entry, idx) => {
|
|
166
|
+
const next = raw[idx + 1];
|
|
167
|
+
const nextWords = next ? words(next.text) : [];
|
|
168
|
+
return {
|
|
169
|
+
words: words(entry.text),
|
|
170
|
+
nextSep: entry.sep,
|
|
171
|
+
nextHead: (nextWords[0] ?? null)?.toLowerCase() ?? null,
|
|
172
|
+
};
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
/** Tokenise a segment, dropping leading `VAR=value` assignments. */
|
|
176
|
+
function words(text) {
|
|
177
|
+
const tokens = text.trim().split(/\s+/).filter((w) => w.length > 0);
|
|
178
|
+
let i = 0;
|
|
179
|
+
while (i < tokens.length && /^[A-Za-z_][A-Za-z0-9_]*=/.test(tokens[i]))
|
|
180
|
+
i += 1;
|
|
181
|
+
return tokens.slice(i);
|
|
182
|
+
}
|
|
183
|
+
/** Strip a path prefix from a binary name. */
|
|
184
|
+
function bareName(word) {
|
|
185
|
+
let w = word;
|
|
186
|
+
for (const prefix of PATH_PREFIXES) {
|
|
187
|
+
if (w.startsWith(prefix)) {
|
|
188
|
+
w = w.slice(prefix.length);
|
|
189
|
+
break;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
const slash = w.lastIndexOf('/');
|
|
193
|
+
return (slash >= 0 ? w.slice(slash + 1) : w).toLowerCase();
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Does the shell discard this segment's failure?
|
|
197
|
+
*
|
|
198
|
+
* `cmd || true`, `cmd || :` and `cmd ; true` all leave the caller with exit 0
|
|
199
|
+
* whatever `cmd` did, so a verification there proves nothing about the tree.
|
|
200
|
+
* Deliberately narrow: `cmd || exit 1` propagates the failure and still counts.
|
|
201
|
+
*/
|
|
202
|
+
function failureIsDiscarded(seg) {
|
|
203
|
+
if (seg.nextSep === '||')
|
|
204
|
+
return seg.nextHead === 'true' || seg.nextHead === ':';
|
|
205
|
+
if (seg.nextSep === ';')
|
|
206
|
+
return seg.nextHead === 'true' || seg.nextHead === ':';
|
|
207
|
+
return false;
|
|
208
|
+
}
|
|
209
|
+
/** Classify one segment on its head. */
|
|
210
|
+
function segmentVerifies(rawWords) {
|
|
211
|
+
const w = rawWords.filter((x) => x.length > 0);
|
|
212
|
+
let idx = 0;
|
|
213
|
+
// Peel delegating prefixes: `npx vitest run`, `sudo make test`.
|
|
214
|
+
while (idx < w.length && DELEGATING_HEADS.has(bareName(w[idx])))
|
|
215
|
+
idx += 1;
|
|
216
|
+
if (idx >= w.length)
|
|
217
|
+
return false;
|
|
218
|
+
const head = bareName(w[idx]);
|
|
219
|
+
const rest = w.slice(idx + 1).map((x) => x.toLowerCase());
|
|
220
|
+
const arg1 = rest[0] ?? '';
|
|
221
|
+
if (VERIFY_BINARIES.has(head))
|
|
222
|
+
return true;
|
|
223
|
+
switch (head) {
|
|
224
|
+
case 'npm':
|
|
225
|
+
case 'pnpm':
|
|
226
|
+
case 'yarn':
|
|
227
|
+
case 'bun': {
|
|
228
|
+
// `pnpm dlx vitest` delegates; `npm run test:ts` names a script.
|
|
229
|
+
if (arg1 === 'dlx' || arg1 === 'exec')
|
|
230
|
+
return segmentVerifies(rest.slice(1));
|
|
231
|
+
const script = arg1 === 'run' ? (rest[1] ?? '') : arg1;
|
|
232
|
+
return NPM_SCRIPT_WORD.test(script);
|
|
233
|
+
}
|
|
234
|
+
case 'task':
|
|
235
|
+
return VERIFY_WORD.test(arg1) || /^ci([-_:]|$)/i.test(arg1);
|
|
236
|
+
case 'cargo':
|
|
237
|
+
return arg1 === 'test' || arg1 === 'check' || arg1 === 'clippy';
|
|
238
|
+
case 'go':
|
|
239
|
+
return arg1 === 'test' || arg1 === 'vet';
|
|
240
|
+
case 'make':
|
|
241
|
+
return VERIFY_WORD.test(arg1) || /^ci([-_:]|$)/i.test(arg1);
|
|
242
|
+
case 'composer':
|
|
243
|
+
return VERIFY_WORD.test(arg1) || arg1 === 'phpstan';
|
|
244
|
+
case 'php':
|
|
245
|
+
return arg1 === 'artisan' && (rest[1] ?? '') === 'test';
|
|
246
|
+
case 'artisan':
|
|
247
|
+
return arg1 === 'test';
|
|
248
|
+
case 'python':
|
|
249
|
+
case 'python3':
|
|
250
|
+
return arg1 === '-m' && VERIFY_BINARIES.has(rest[1] ?? '');
|
|
251
|
+
case 'node':
|
|
252
|
+
case 'deno':
|
|
253
|
+
// `node --test` is a runner selected by a FLAG, not by a
|
|
254
|
+
// subcommand, so head-anchoring alone would refuse it. Caught by
|
|
255
|
+
// `verification_evidence.test.ts` when this predicate narrowed:
|
|
256
|
+
// the old token-anywhere regex accepted it by accident and neither
|
|
257
|
+
// explicit list named it, so the union seeding missed it too.
|
|
258
|
+
return rest.some((a) => a === 'test' || a.startsWith('--test'));
|
|
259
|
+
case 'agent-config':
|
|
260
|
+
// NEITHER `ui:render` NOR `xmllint` verifies here, and the first
|
|
261
|
+
// half of that was true, then false, and is true again.
|
|
262
|
+
//
|
|
263
|
+
// Step 3.5 of `road-to-svg-with-a-witness` taught this predicate
|
|
264
|
+
// `ui:render --profile asset`, reasoning that it is the one
|
|
265
|
+
// subcommand which opens the delivered file in a real engine. Step
|
|
266
|
+
// 2.1(b) of `road-to-svg-review-followups` removed it again on
|
|
267
|
+
// review claim C2, which is narrower than the first argument and
|
|
268
|
+
// refutes it: the turn-end gate's TRANSCRIPT path matches a command
|
|
269
|
+
// and never sees an exit code, so a call that rendered nothing —
|
|
270
|
+
// the ordinary case on a machine with no Playwright, where the
|
|
271
|
+
// command also exited 0 until the same day — discharged the
|
|
272
|
+
// obligation from its text alone.
|
|
273
|
+
//
|
|
274
|
+
// What replaces it reads the RENDER instead of the call:
|
|
275
|
+
// `hooks/svg_obligation.ts` matches a manifest to the file's own
|
|
276
|
+
// digest, and accepts a renderer-absent manifest only together with
|
|
277
|
+
// a clean static witness on those same bytes. `xmllint --noout`
|
|
278
|
+
// stays out for its original reason (S6): a file can parse and
|
|
279
|
+
// still be the wrong picture.
|
|
280
|
+
return false;
|
|
281
|
+
case 'scripts-run': {
|
|
282
|
+
// `./scripts-run src/scripts/lint_x` verifies; `…/rule_activation_census`
|
|
283
|
+
// writes a report and asserts nothing, which is why this keys on the
|
|
284
|
+
// script's own prefix rather than on the runner.
|
|
285
|
+
const script = bareName(arg1);
|
|
286
|
+
return /^(check|lint|verify|validate)[-_]/.test(script);
|
|
287
|
+
}
|
|
288
|
+
default:
|
|
289
|
+
return false;
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* True when the command runs something that asserts the tree still holds.
|
|
294
|
+
*
|
|
295
|
+
* Classified per shell segment on the segment's HEAD, so a verification token
|
|
296
|
+
* appearing as an argument — `ls tests`, `git commit -m "fix ci"` — never
|
|
297
|
+
* counts, and a chained `task sync && task ci` counts on its second segment.
|
|
298
|
+
*/
|
|
299
|
+
export function isVerificationCommand(command) {
|
|
300
|
+
if (!command)
|
|
301
|
+
return false;
|
|
302
|
+
const segments = splitSegments(stripComment(command));
|
|
303
|
+
return segments.some((seg) => !failureIsDiscarded(seg) && segmentVerifies(seg.words));
|
|
304
|
+
}
|
|
305
|
+
/**
|
|
306
|
+
* The RECORDER's net — deliberately wider than the predicate above, and not a
|
|
307
|
+
* leftover of the two-regex era it replaces.
|
|
308
|
+
*
|
|
309
|
+
* The two answer different questions. `isVerificationCommand` answers *did
|
|
310
|
+
* this verify*, and a false positive there clears an unverified edit, so it is
|
|
311
|
+
* head-anchored and narrow. This one answers *is this worth writing down for
|
|
312
|
+
* `classifyRun` to judge*, and there the costly error is the opposite: a
|
|
313
|
+
* recorder that filtered `echo test` out would leave the turn-end gate unable
|
|
314
|
+
* to tell "the turn ran a non-verification command" from "the turn ran
|
|
315
|
+
* nothing at all", and `not_a_verification_command` is a verdict the gate
|
|
316
|
+
* needs to SEE rather than infer from silence.
|
|
317
|
+
*
|
|
318
|
+
* That is why unifying the two call sites into one predicate was tried and
|
|
319
|
+
* rejected on 2026-09-30: it is not two spellings of one idea, it is two
|
|
320
|
+
* questions with opposite error costs. What was wrong before was that each
|
|
321
|
+
* question had its own private regex in its own file and the two also
|
|
322
|
+
* disagreed about the FIRST question. Both now live here, and only this one
|
|
323
|
+
* matches on a token anywhere in the line.
|
|
324
|
+
*/
|
|
325
|
+
const _WIDE_CANDIDATE_RE = /\b(test|tests|vitest|jest|pytest|phpunit|pest|tsc|eslint|ruff|mypy|pyright|clippy|phpstan|typecheck|lint[-_:a-z]*|build|ci|preflight|smoke[-_:a-z]*|check[-_:a-z]*|validate[-_:a-z]*)\b|\b(task|npm|pnpm|yarn|composer|cargo|go|make|php artisan|bun)\s+(run\s+)?\S*(test|check|lint|build|ci|typecheck)/i;
|
|
326
|
+
export function mightBeVerification(command) {
|
|
327
|
+
return _WIDE_CANDIDATE_RE.test(command);
|
|
328
|
+
}
|
|
329
|
+
/**
|
|
330
|
+
* `agent-config ui:render … --profile asset`, by shape.
|
|
331
|
+
*
|
|
332
|
+
* Moved here from `hooks/svg_obligation.ts` by finding 3 of this change's
|
|
333
|
+
* SECOND completion review: two detectors need it and one of them is in
|
|
334
|
+
* `_lib`, so a hook module was the wrong home. Re-exported there, so no
|
|
335
|
+
* caller moved.
|
|
336
|
+
*/
|
|
337
|
+
export function isAssetRenderCommand(command) {
|
|
338
|
+
return /\bui:render\b/.test(command) && /--profile[= ]\s*asset\b/.test(command);
|
|
339
|
+
}
|
|
340
|
+
/**
|
|
341
|
+
* Did this command ATTEMPT to verify something — as opposed to: did it produce
|
|
342
|
+
* a verdict this gate may read?
|
|
343
|
+
*
|
|
344
|
+
* The distinction is the whole point, and the first review round and the
|
|
345
|
+
* second each saw one half of it. Round one (claim C2) was right that
|
|
346
|
+
* `isVerificationCommand` must NOT learn the asset render: the transcript path
|
|
347
|
+
* never sees an exit code, so the command's TEXT would have discharged the SVG
|
|
348
|
+
* obligation on a machine where the render produced nothing. Round two
|
|
349
|
+
* (finding 3) was right that removing it left detector C — "did any
|
|
350
|
+
* verification command follow the last edit" — unable to see the one command
|
|
351
|
+
* this package PRESCRIBES for an `.svg`, so the prescribed turn was refused.
|
|
352
|
+
*
|
|
353
|
+
* Both hold because they are about different detectors. Detector C asks
|
|
354
|
+
* whether the author tried; it is satisfied by `eslint` and must be satisfied
|
|
355
|
+
* by a render too. The SVG obligation asks what the render FOUND, and still
|
|
356
|
+
* reads the manifest and the file's digest — an attempt that produced nothing
|
|
357
|
+
* discharges nothing there, with a far better reason than detector C's.
|
|
358
|
+
*
|
|
359
|
+
* So: one predicate per question, and `isVerificationCommand` is unchanged.
|
|
360
|
+
*/
|
|
361
|
+
export function isVerificationAttempt(command) {
|
|
362
|
+
return isVerificationCommand(command) || isAssetRenderCommand(command);
|
|
363
|
+
}
|
|
364
|
+
//# sourceMappingURL=verification_command.js.map
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared secret-detection + scrub primitives for the workspace stores.
|
|
3
|
+
*
|
|
4
|
+
* Lives under `src/scripts/_lib/` because a shipped module
|
|
5
|
+
* (`cross_repo_retrieve.ts`) reads it and `src/cli/` is not in the package;
|
|
6
|
+
* `src/cli/python/workspace_secrets.ts` re-exports it for the workspace stores.
|
|
7
|
+
* The contract — the exported names, the per-call match counts, `scrub_obj`'s
|
|
8
|
+
* depth and cycle guard and the `[SECRET]` placeholder — is pinned by
|
|
9
|
+
* `tests/scripts/cli/python/workspace_secrets.test.ts`, and what it detects by
|
|
10
|
+
* `egress_legacy_superset.test.ts`.
|
|
11
|
+
*
|
|
12
|
+
* Near-leaf module — its one import is the pure rule table (no I/O) — so the
|
|
13
|
+
* hot-path analytics `emit()` and the heavier `knowledge_ingest` can both
|
|
14
|
+
* depend on it cheaply without dragging in PII redaction, chunking, or file
|
|
15
|
+
* I/O. Every workspace store that persists text or arbitrary payloads at rest
|
|
16
|
+
* routes through this module before writing (Phase 8 Step 5 secret-hygiene
|
|
17
|
+
* sweep).
|
|
18
|
+
*
|
|
19
|
+
* Two confidence tiers:
|
|
20
|
+
*
|
|
21
|
+
* - **HIGH** — structurally unambiguous credentials: the credential rows of
|
|
22
|
+
* the one rule table (vendor keys, tokens, PEM private-key block, a
|
|
23
|
+
* connection URI with an inline password). Near-zero false-positive rate, so
|
|
24
|
+
* safe to scrub destructively or to refuse a write over.
|
|
25
|
+
* - **FUZZY** — the generic `key/secret/token/password = <value>` assignment.
|
|
26
|
+
* Fires on legitimate prose ("password reset token: see attached"), so it is
|
|
27
|
+
* warn-only on user-authored content and only scrubbed on disposable,
|
|
28
|
+
* machine-generated telemetry (sessions / analytics).
|
|
29
|
+
*
|
|
30
|
+
* The `[SECRET]` placeholder matches the knowledge-ingestion redactor so the
|
|
31
|
+
* two surfaces stay byte-consistent.
|
|
32
|
+
*/
|
|
33
|
+
import { assignmentPattern, detect, EGRESS_RULES, maskingEnd, prefixesOf, rawKeyPrefixPattern, } from './egress_rules.js';
|
|
34
|
+
export const PLACEHOLDER = '[SECRET]';
|
|
35
|
+
// --- HIGH-confidence tier: the credential rows of the one rule table -------
|
|
36
|
+
//
|
|
37
|
+
// Detection lives in `src/scripts/_lib/egress_rules.ts`, the only place a
|
|
38
|
+
// credential pattern is defined (road-to-one-detector-and-the-senders-we-own
|
|
39
|
+
// 2.2); this module keeps its own policy — the `[SECRET]` placeholder, the
|
|
40
|
+
// HIGH/FUZZY tiers and the counts. `generic-assignment` is left to the FUZZY tier
|
|
41
|
+
// below, which is this module's own, looser reading of the same shape.
|
|
42
|
+
const HIGH_RULES = EGRESS_RULES.filter((r) => r.class === 'credential' && r.rule !== 'generic-assignment');
|
|
43
|
+
// The finding names this module has always reported; a row without one reports
|
|
44
|
+
// its rule id.
|
|
45
|
+
const LEGACY_NAME = {
|
|
46
|
+
'pem-private-key': 'private_key',
|
|
47
|
+
'aws-access-key': 'aws_access_key',
|
|
48
|
+
'github-pat': 'github_pat',
|
|
49
|
+
'github-app-token': 'github_pat',
|
|
50
|
+
'openai-api-key': 'openai_key',
|
|
51
|
+
};
|
|
52
|
+
const LEGACY_ORDER = ['private_key', 'aws_access_key', 'github_pat', 'openai_key'];
|
|
53
|
+
const rank = (name) => {
|
|
54
|
+
const i = LEGACY_ORDER.indexOf(name);
|
|
55
|
+
return i < 0 ? LEGACY_ORDER.length : i;
|
|
56
|
+
};
|
|
57
|
+
// This module's own, looser readings of two shapes, kept so the move to the
|
|
58
|
+
// table narrows nothing: the GitHub token family at any length and an OpenAI key
|
|
59
|
+
// glued to a preceding word. The prefixes are the table's.
|
|
60
|
+
const OWN_SHAPES = [
|
|
61
|
+
[
|
|
62
|
+
'github_pat',
|
|
63
|
+
rawKeyPrefixPattern(36, [...prefixesOf('github-pat'), ...prefixesOf('github-app-token')], {
|
|
64
|
+
boundary: 'never',
|
|
65
|
+
tail: 'A-Za-z0-9',
|
|
66
|
+
}),
|
|
67
|
+
],
|
|
68
|
+
['openai_key', rawKeyPrefixPattern(20, prefixesOf('openai-api-key'), { boundary: 'never', tail: 'A-Za-z0-9' })],
|
|
69
|
+
];
|
|
70
|
+
/** HIGH spans in report order, each widened to the bytes a scrub must remove. */
|
|
71
|
+
function highSpans(text) {
|
|
72
|
+
const spans = detect(text, HIGH_RULES).map((s) => ({
|
|
73
|
+
name: LEGACY_NAME[s.rule] ?? s.rule,
|
|
74
|
+
start: s.start,
|
|
75
|
+
end: maskingEnd(text, s),
|
|
76
|
+
}));
|
|
77
|
+
for (const [name, re] of OWN_SHAPES) {
|
|
78
|
+
for (const m of text.matchAll(re))
|
|
79
|
+
spans.push({ name, start: m.index, end: m.index + m[0].length });
|
|
80
|
+
}
|
|
81
|
+
// One finding per value: a span inside another span of the same name is that span.
|
|
82
|
+
const kept = spans.filter((a, i) => !spans.some((b, j) => j !== i &&
|
|
83
|
+
b.name === a.name &&
|
|
84
|
+
b.start <= a.start &&
|
|
85
|
+
b.end >= a.end &&
|
|
86
|
+
(b.end - b.start > a.end - a.start || j < i)));
|
|
87
|
+
return kept.sort((x, y) => rank(x.name) - rank(y.name) || x.start - y.start);
|
|
88
|
+
}
|
|
89
|
+
// --- FUZZY pattern (heuristic key/value assignment) -------------------------
|
|
90
|
+
// Python `(?i)` inline flag → JS `i` flag. Character class is identical.
|
|
91
|
+
// The keyword shape is the table's; the 12-character value is this module's threshold.
|
|
92
|
+
const _RE_KV_SECRET = assignmentPattern({
|
|
93
|
+
keywords: ['apiKey', 'secret', 'token', 'password', 'passwd', 'bearer'],
|
|
94
|
+
value: `['"]?[A-Za-z0-9_\\-+/=]{12,}['"]?`,
|
|
95
|
+
}, 'i');
|
|
96
|
+
export const FUZZY = [['kv_secret', _RE_KV_SECRET]];
|
|
97
|
+
// Recursion guard for `scrub_obj` — deep / cyclic structures degrade to a
|
|
98
|
+
// controlled return instead of a RangeError on the never-raises hot path.
|
|
99
|
+
const _MAX_DEPTH = 50;
|
|
100
|
+
/**
|
|
101
|
+
* Build a global-flagged clone of `pat` so `matchAll` / `replace` get
|
|
102
|
+
* left-to-right non-overlapping iteration matching Python `finditer` / `subn`,
|
|
103
|
+
* without mutating the shared stateless module-level pattern.
|
|
104
|
+
*/
|
|
105
|
+
function _global(pat) {
|
|
106
|
+
const flags = pat.flags.includes('g') ? pat.flags : pat.flags + 'g';
|
|
107
|
+
return new RegExp(pat.source, flags);
|
|
108
|
+
}
|
|
109
|
+
/** Count of non-overlapping matches — mirrors `len(list(pat.finditer(text)))`. */
|
|
110
|
+
function _finditerCount(pat, text) {
|
|
111
|
+
let n = 0;
|
|
112
|
+
for (const _m of text.matchAll(_global(pat)))
|
|
113
|
+
n += 1;
|
|
114
|
+
return n;
|
|
115
|
+
}
|
|
116
|
+
/** `pat.subn(repl, text)` → `[clean, count]` (non-overlapping, left-to-right). */
|
|
117
|
+
function _subn(pat, repl, text) {
|
|
118
|
+
let count = 0;
|
|
119
|
+
const clean = text.replace(_global(pat), () => {
|
|
120
|
+
count += 1;
|
|
121
|
+
return repl;
|
|
122
|
+
});
|
|
123
|
+
return [clean, count];
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Non-destructive detection: one {@link Finding} per match.
|
|
127
|
+
*
|
|
128
|
+
* Never echoes the matched secret value — only the pattern name and tier,
|
|
129
|
+
* so a caller can warn or refuse without re-leaking the secret into a log.
|
|
130
|
+
*/
|
|
131
|
+
export function scan(text, opts) {
|
|
132
|
+
const include_fuzzy = opts?.include_fuzzy ?? true;
|
|
133
|
+
if (typeof text !== 'string' || !text) {
|
|
134
|
+
return [];
|
|
135
|
+
}
|
|
136
|
+
const out = highSpans(text).map((s) => ({ pattern: s.name, confidence: 'high' }));
|
|
137
|
+
if (include_fuzzy) {
|
|
138
|
+
for (const [name, pat] of FUZZY) {
|
|
139
|
+
const n = _finditerCount(pat, text);
|
|
140
|
+
for (let i = 0; i < n; i += 1)
|
|
141
|
+
out.push({ pattern: name, confidence: 'fuzzy' });
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
return out;
|
|
145
|
+
}
|
|
146
|
+
/** Replace every secret match with `[SECRET]`; return `[clean, count]`. */
|
|
147
|
+
export function scrub(text, opts) {
|
|
148
|
+
const include_fuzzy = opts?.include_fuzzy ?? true;
|
|
149
|
+
if (typeof text !== 'string' || !text) {
|
|
150
|
+
return [text, 0];
|
|
151
|
+
}
|
|
152
|
+
const spans = highSpans(text).sort((x, y) => x.start - y.start);
|
|
153
|
+
const merged = [];
|
|
154
|
+
for (const sp of spans) {
|
|
155
|
+
const last = merged[merged.length - 1];
|
|
156
|
+
if (last !== undefined && sp.start < last.end)
|
|
157
|
+
last.end = Math.max(last.end, sp.end);
|
|
158
|
+
else
|
|
159
|
+
merged.push({ start: sp.start, end: sp.end });
|
|
160
|
+
}
|
|
161
|
+
let out = text;
|
|
162
|
+
for (let i = merged.length - 1; i >= 0; i -= 1) {
|
|
163
|
+
const m = merged[i];
|
|
164
|
+
out = out.slice(0, m.start) + PLACEHOLDER + out.slice(m.end);
|
|
165
|
+
}
|
|
166
|
+
let count = merged.length;
|
|
167
|
+
if (include_fuzzy) {
|
|
168
|
+
for (const [, pat] of FUZZY) {
|
|
169
|
+
const [next, n] = _subn(pat, PLACEHOLDER, out);
|
|
170
|
+
out = next;
|
|
171
|
+
count += n;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
return [out, count];
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Recursively scrub string leaves in object / array structures.
|
|
178
|
+
*
|
|
179
|
+
* Non-string leaves (number, boolean, null) pass through untouched. Recursion
|
|
180
|
+
* is bounded by a depth cap and a cycle guard so malformed or self-referential
|
|
181
|
+
* payloads degrade to a controlled return, never a stack overflow — callers on
|
|
182
|
+
* a never-raises hot path (`workspace_analytics.emit`) rely on this. Returns
|
|
183
|
+
* `[clean, count]`.
|
|
184
|
+
*
|
|
185
|
+
* Python distinguishes `list` (→ list) from `tuple` (→ tuple); JS has only
|
|
186
|
+
* `Array`, so an array round-trips as an array, matching the Python `list`
|
|
187
|
+
* branch (the workspace stores never feed a tuple through this path).
|
|
188
|
+
*/
|
|
189
|
+
export function scrub_obj(obj, opts) {
|
|
190
|
+
const include_fuzzy = opts?.include_fuzzy ?? true;
|
|
191
|
+
const _depth = opts?._depth ?? 0;
|
|
192
|
+
const _seen = opts?._seen ?? new Set();
|
|
193
|
+
if (_depth > _MAX_DEPTH) {
|
|
194
|
+
return [obj, 0];
|
|
195
|
+
}
|
|
196
|
+
if (typeof obj === 'string') {
|
|
197
|
+
return scrub(obj, { include_fuzzy });
|
|
198
|
+
}
|
|
199
|
+
if (Array.isArray(obj)) {
|
|
200
|
+
if (_seen.has(obj)) {
|
|
201
|
+
return [obj, 0];
|
|
202
|
+
}
|
|
203
|
+
_seen.add(obj);
|
|
204
|
+
let total = 0;
|
|
205
|
+
const items = [];
|
|
206
|
+
for (const value of obj) {
|
|
207
|
+
const [cv, n] = scrub_obj(value, { include_fuzzy, _depth: _depth + 1, _seen });
|
|
208
|
+
items.push(cv);
|
|
209
|
+
total += n;
|
|
210
|
+
}
|
|
211
|
+
return [items, total];
|
|
212
|
+
}
|
|
213
|
+
if (obj !== null && typeof obj === 'object') {
|
|
214
|
+
if (_seen.has(obj)) {
|
|
215
|
+
return [obj, 0];
|
|
216
|
+
}
|
|
217
|
+
_seen.add(obj);
|
|
218
|
+
let total = 0;
|
|
219
|
+
const clean = {};
|
|
220
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
221
|
+
const [cv, n] = scrub_obj(value, { include_fuzzy, _depth: _depth + 1, _seen });
|
|
222
|
+
clean[key] = cv;
|
|
223
|
+
total += n;
|
|
224
|
+
}
|
|
225
|
+
return [clean, total];
|
|
226
|
+
}
|
|
227
|
+
return [obj, 0];
|
|
228
|
+
}
|
|
229
|
+
//# sourceMappingURL=workspace_secrets.js.map
|