@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,477 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* svg_geometry — the numeric readings over SVG geometry: path data, points
|
|
3
|
+
* lists, and the box of a statically-sized element.
|
|
4
|
+
*
|
|
5
|
+
* Split out of `svg_rules` because `svg_rules` crossed the 1,500-line
|
|
6
|
+
* source-size ceiling while the completion review of
|
|
7
|
+
* `road-to-svg-review-followups` was being remediated, and a ratchet only
|
|
8
|
+
* turns one way. This block is the extraction that costs nothing to read: it
|
|
9
|
+
* takes numbers and returns numbers, it reports no finding, and it shares no
|
|
10
|
+
* state with the rules — the two rules that consume it (`svg-geometry-outside-
|
|
11
|
+
* viewbox`, `svg-structure-unparseable-path`) stay where the other rules are.
|
|
12
|
+
*
|
|
13
|
+
* `SvgElement` is imported as a TYPE only, so the import is erased and the two
|
|
14
|
+
* modules carry no runtime edge in either direction.
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* The box of an element whose geometry is fully numeric and untransformed.
|
|
18
|
+
*
|
|
19
|
+
* Returns `null` for anything else — a transform, a percentage, a unit, a
|
|
20
|
+
* `path`. That conservatism is the rule's whole safety margin: a box this
|
|
21
|
+
* function guesses at is a box the "entirely outside" test would flag wrongly.
|
|
22
|
+
*/
|
|
23
|
+
export function staticBox(el) {
|
|
24
|
+
if (el.attrs['transform'] || el.attrs['style']?.includes('transform'))
|
|
25
|
+
return null;
|
|
26
|
+
const num = (k) => {
|
|
27
|
+
const v = el.attrs[k];
|
|
28
|
+
if (v === undefined)
|
|
29
|
+
return null;
|
|
30
|
+
if (!/^-?\d+(\.\d+)?$/.test(v.trim()))
|
|
31
|
+
return null;
|
|
32
|
+
return Number(v);
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* A coordinate that defaults to 0 when ABSENT — and refuses the element
|
|
36
|
+
* when present and unreadable.
|
|
37
|
+
*
|
|
38
|
+
* Finding 7 of this change's second completion review. `num(k) ?? 0`
|
|
39
|
+
* conflated the two, so `<rect x="50%" width="10" height="10"/>` read as
|
|
40
|
+
* `x = 0`: a percentage, which this function's own doc promises to refuse,
|
|
41
|
+
* silently became a number. The rule that reads this box then reported an
|
|
42
|
+
* element outside the viewBox that is not, and missed one that is — a
|
|
43
|
+
* wrong answer in both directions, from a function whose entire safety
|
|
44
|
+
* margin is that it returns `null` when it cannot be sure.
|
|
45
|
+
*/
|
|
46
|
+
const originOr0 = (k) => (el.attrs[k] === undefined ? 0 : num(k));
|
|
47
|
+
switch (el.name) {
|
|
48
|
+
case 'rect': {
|
|
49
|
+
const x = originOr0('x');
|
|
50
|
+
const y = originOr0('y');
|
|
51
|
+
const w = num('width');
|
|
52
|
+
const h = num('height');
|
|
53
|
+
if (x === null || y === null || w === null || h === null)
|
|
54
|
+
return null;
|
|
55
|
+
return { minX: x, minY: y, maxX: x + w, maxY: y + h };
|
|
56
|
+
}
|
|
57
|
+
case 'circle': {
|
|
58
|
+
const cx = originOr0('cx');
|
|
59
|
+
const cy = originOr0('cy');
|
|
60
|
+
const r = num('r');
|
|
61
|
+
if (cx === null || cy === null || r === null)
|
|
62
|
+
return null;
|
|
63
|
+
return { minX: cx - r, minY: cy - r, maxX: cx + r, maxY: cy + r };
|
|
64
|
+
}
|
|
65
|
+
case 'ellipse': {
|
|
66
|
+
const cx = originOr0('cx');
|
|
67
|
+
const cy = originOr0('cy');
|
|
68
|
+
const rx = num('rx');
|
|
69
|
+
const ry = num('ry');
|
|
70
|
+
if (cx === null || cy === null || rx === null || ry === null)
|
|
71
|
+
return null;
|
|
72
|
+
return { minX: cx - rx, minY: cy - ry, maxX: cx + rx, maxY: cy + ry };
|
|
73
|
+
}
|
|
74
|
+
case 'line': {
|
|
75
|
+
const x1 = num('x1');
|
|
76
|
+
const y1 = num('y1');
|
|
77
|
+
const x2 = num('x2');
|
|
78
|
+
const y2 = num('y2');
|
|
79
|
+
if (x1 === null || y1 === null || x2 === null || y2 === null)
|
|
80
|
+
return null;
|
|
81
|
+
return {
|
|
82
|
+
minX: Math.min(x1, x2),
|
|
83
|
+
minY: Math.min(y1, y2),
|
|
84
|
+
maxX: Math.max(x1, x2),
|
|
85
|
+
maxY: Math.max(y1, y2),
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
default:
|
|
89
|
+
return null;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* The extent of a path's own points, with relative commands walked properly.
|
|
94
|
+
*
|
|
95
|
+
* Finding 2.1 of `road-to-svg-rules-in-the-dispatch-path`. The icon reference
|
|
96
|
+
* reader used to scrape `d` with `/(-?[\d.]+)[\s,]+(-?[\d.]+)/g`, which reads
|
|
97
|
+
* every number pair as an absolute coordinate — so `m 2 2 l 4 0` was read as
|
|
98
|
+
* the points (2,2) and (4,0) rather than (2,2) and (6,2). That is not a
|
|
99
|
+
* rounding error: a path drawn entirely with relative commands reports an
|
|
100
|
+
* extent anchored at the origin.
|
|
101
|
+
*
|
|
102
|
+
* APPROXIMATE, AND DELIBERATELY SO. Curve control points are included rather
|
|
103
|
+
* than the curve's true hull, which can over-estimate a Bézier's extent by
|
|
104
|
+
* the control polygon. The alternative is a full flattener, and the consumer
|
|
105
|
+
* here is a padding comparison against other icons measured exactly the same
|
|
106
|
+
* way — a shared conservative bound is a comparison; a precise bound on one
|
|
107
|
+
* side and a loose one on the other is finding 2.2.
|
|
108
|
+
*
|
|
109
|
+
* Returns null for an empty or unparseable `d`, which is a separate finding
|
|
110
|
+
* (`pathDataError`) and not this function's to report.
|
|
111
|
+
*/
|
|
112
|
+
export function pathExtent(d) {
|
|
113
|
+
const tokens = tokenisePath(d);
|
|
114
|
+
if (!tokens)
|
|
115
|
+
return null;
|
|
116
|
+
const argCount = { m: 2, l: 2, t: 2, h: 1, v: 1, c: 6, s: 4, q: 4, a: 7, z: 0 };
|
|
117
|
+
let minX = Number.POSITIVE_INFINITY;
|
|
118
|
+
let minY = Number.POSITIVE_INFINITY;
|
|
119
|
+
let maxX = Number.NEGATIVE_INFINITY;
|
|
120
|
+
let maxY = Number.NEGATIVE_INFINITY;
|
|
121
|
+
const see = (x, y) => {
|
|
122
|
+
if (!Number.isFinite(x) || !Number.isFinite(y))
|
|
123
|
+
return;
|
|
124
|
+
minX = Math.min(minX, x);
|
|
125
|
+
maxX = Math.max(maxX, x);
|
|
126
|
+
minY = Math.min(minY, y);
|
|
127
|
+
maxY = Math.max(maxY, y);
|
|
128
|
+
};
|
|
129
|
+
// Current point, and the subpath start `Z` returns to.
|
|
130
|
+
let cx = 0;
|
|
131
|
+
let cy = 0;
|
|
132
|
+
let sx = 0;
|
|
133
|
+
let sy = 0;
|
|
134
|
+
let i = 0;
|
|
135
|
+
let cmd = '';
|
|
136
|
+
let rel = false;
|
|
137
|
+
while (i < tokens.length) {
|
|
138
|
+
const tok = tokens[i];
|
|
139
|
+
if (/^[a-zA-Z]$/.test(tok)) {
|
|
140
|
+
cmd = tok.toLowerCase();
|
|
141
|
+
rel = tok === tok.toLowerCase();
|
|
142
|
+
i += 1;
|
|
143
|
+
if (cmd === 'z') {
|
|
144
|
+
cx = sx;
|
|
145
|
+
cy = sy;
|
|
146
|
+
continue;
|
|
147
|
+
}
|
|
148
|
+
if (!(cmd in argCount))
|
|
149
|
+
return null;
|
|
150
|
+
}
|
|
151
|
+
else if (cmd === '' || cmd === 'z') {
|
|
152
|
+
// A number where no repeatable command is open.
|
|
153
|
+
return null;
|
|
154
|
+
}
|
|
155
|
+
const need = argCount[cmd];
|
|
156
|
+
if (need === 0)
|
|
157
|
+
continue;
|
|
158
|
+
const args = [];
|
|
159
|
+
while (args.length < need && i < tokens.length && !/^[a-zA-Z]$/.test(tokens[i])) {
|
|
160
|
+
args.push(Number(tokens[i]));
|
|
161
|
+
i += 1;
|
|
162
|
+
}
|
|
163
|
+
if (args.length < need)
|
|
164
|
+
return null;
|
|
165
|
+
switch (cmd) {
|
|
166
|
+
case 'h': {
|
|
167
|
+
cx = rel ? cx + args[0] : args[0];
|
|
168
|
+
break;
|
|
169
|
+
}
|
|
170
|
+
case 'v': {
|
|
171
|
+
cy = rel ? cy + args[0] : args[0];
|
|
172
|
+
break;
|
|
173
|
+
}
|
|
174
|
+
case 'a': {
|
|
175
|
+
// rx ry rotation large-arc sweep x y — only the last pair is a
|
|
176
|
+
// point, and the SWEEP between the two is most of the shape.
|
|
177
|
+
//
|
|
178
|
+
// Finding 4 of the fourth completion review: this used to take
|
|
179
|
+
// the endpoints alone, so `M 10 12 A 20 20 0 0 1 90 12` read as
|
|
180
|
+
// a flat box of zero height while the curve reaches y = -28.
|
|
181
|
+
// Everything downstream is a comparison — the icon-grid padding
|
|
182
|
+
// on both sides, and the `data-hole` and translucent masks the
|
|
183
|
+
// grounds reading excludes by box — so a too-small extent is a
|
|
184
|
+
// wrong NUMBER, not a missing one, which is the failure this
|
|
185
|
+
// branch keeps finding in its own work.
|
|
186
|
+
const ex = rel ? cx + args[5] : args[5];
|
|
187
|
+
const ey = rel ? cy + args[6] : args[6];
|
|
188
|
+
for (const [px, py] of arcExtremes(cx, cy, ex, ey, args[0], args[1], args[2], args[3] !== 0, args[4] !== 0)) {
|
|
189
|
+
see(px, py);
|
|
190
|
+
}
|
|
191
|
+
cx = ex;
|
|
192
|
+
cy = ey;
|
|
193
|
+
break;
|
|
194
|
+
}
|
|
195
|
+
default: {
|
|
196
|
+
// Every remaining command is a run of (x, y) pairs; the last
|
|
197
|
+
// pair is the new current point and the earlier ones are
|
|
198
|
+
// control points, which are included as the bound above says.
|
|
199
|
+
for (let k = 0; k + 1 < args.length; k += 2) {
|
|
200
|
+
const px = rel ? cx + args[k] : args[k];
|
|
201
|
+
const py = rel ? cy + args[k + 1] : args[k + 1];
|
|
202
|
+
see(px, py);
|
|
203
|
+
if (k + 2 >= args.length) {
|
|
204
|
+
cx = px;
|
|
205
|
+
cy = py;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
break;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
see(cx, cy);
|
|
212
|
+
if (cmd === 'm') {
|
|
213
|
+
// `m`/`M` opens a subpath at its FIRST pair; `Z` returns there, not
|
|
214
|
+
// to wherever the run ended. One `need`-sized group is read per
|
|
215
|
+
// iteration, so this pair is that start.
|
|
216
|
+
sx = cx;
|
|
217
|
+
sy = cy;
|
|
218
|
+
// A repeated `m` argument group is an implicit lineto, per the path
|
|
219
|
+
// grammar — so the command for the next group is `l`, not `m`.
|
|
220
|
+
cmd = 'l';
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
if (!Number.isFinite(minX))
|
|
224
|
+
return null;
|
|
225
|
+
return { minX, minY, maxX, maxY };
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Path-data tokens, with the two shapes a number-or-letter alternation misses.
|
|
229
|
+
*
|
|
230
|
+
* Finding 17 of this change's completion review. `a 5 5 0 0130 30` is valid:
|
|
231
|
+
* `large-arc-flag` and `sweep-flag` are single digits and the grammar lets
|
|
232
|
+
* them run together with what follows. The old regex read `0130` as ONE
|
|
233
|
+
* number, shifted every argument of that command and every relative command
|
|
234
|
+
* after it, and produced a silently WRONG extent rather than `null` — so the
|
|
235
|
+
* grid padding degraded to a wrong number instead of to `unverified`. A
|
|
236
|
+
* leading `+`, also legal, was dropped by the same alternation.
|
|
237
|
+
*
|
|
238
|
+
* So the arc command is tokenised positionally: four numbers, then two single
|
|
239
|
+
* digits, then two numbers. Everything else keeps the general form.
|
|
240
|
+
*/
|
|
241
|
+
export function tokenisePath(d) {
|
|
242
|
+
const NUM = /[+-]?(?:\d*\.\d+|\d+\.?)(?:[eE][+-]?\d+)?/y;
|
|
243
|
+
const FLAG = /[01]/y;
|
|
244
|
+
const SEP = /[\s,]*/y;
|
|
245
|
+
const out = [];
|
|
246
|
+
const text = d.trim();
|
|
247
|
+
let i = 0;
|
|
248
|
+
let cmd = '';
|
|
249
|
+
const eat = (re) => {
|
|
250
|
+
re.lastIndex = i;
|
|
251
|
+
const m = re.exec(text);
|
|
252
|
+
if (m === null)
|
|
253
|
+
return null;
|
|
254
|
+
i = re.lastIndex;
|
|
255
|
+
return m[0];
|
|
256
|
+
};
|
|
257
|
+
const skip = () => {
|
|
258
|
+
void eat(SEP);
|
|
259
|
+
};
|
|
260
|
+
while (i < text.length) {
|
|
261
|
+
skip();
|
|
262
|
+
if (i >= text.length)
|
|
263
|
+
break;
|
|
264
|
+
const ch = text[i];
|
|
265
|
+
if (/[a-zA-Z]/.test(ch)) {
|
|
266
|
+
cmd = ch;
|
|
267
|
+
out.push(ch);
|
|
268
|
+
i += 1;
|
|
269
|
+
continue;
|
|
270
|
+
}
|
|
271
|
+
if (cmd.toLowerCase() === 'a') {
|
|
272
|
+
// rx ry rotation | large-arc sweep | x y
|
|
273
|
+
for (let k = 0; k < 3; k += 1) {
|
|
274
|
+
skip();
|
|
275
|
+
const n = eat(NUM);
|
|
276
|
+
if (n === null)
|
|
277
|
+
return null;
|
|
278
|
+
out.push(n);
|
|
279
|
+
}
|
|
280
|
+
for (let k = 0; k < 2; k += 1) {
|
|
281
|
+
skip();
|
|
282
|
+
const f = eat(FLAG);
|
|
283
|
+
if (f === null)
|
|
284
|
+
return null;
|
|
285
|
+
out.push(f);
|
|
286
|
+
}
|
|
287
|
+
for (let k = 0; k < 2; k += 1) {
|
|
288
|
+
skip();
|
|
289
|
+
const n = eat(NUM);
|
|
290
|
+
if (n === null)
|
|
291
|
+
return null;
|
|
292
|
+
out.push(n);
|
|
293
|
+
}
|
|
294
|
+
continue;
|
|
295
|
+
}
|
|
296
|
+
const n = eat(NUM);
|
|
297
|
+
if (n === null)
|
|
298
|
+
return null;
|
|
299
|
+
out.push(n);
|
|
300
|
+
}
|
|
301
|
+
return out.length > 0 ? out : null;
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* The axis extremes an elliptical arc actually reaches, endpoints included.
|
|
305
|
+
*
|
|
306
|
+
* The endpoint parameterisation SVG writes is converted to the centre
|
|
307
|
+
* parameterisation the geometry needs (F.6.5 of the SVG 1.1 implementation
|
|
308
|
+
* notes), and then each of the four axis-aligned extremes of the ellipse is
|
|
309
|
+
* kept when its angle lies inside the swept range. For a rotated ellipse the
|
|
310
|
+
* extremes are not at the axis endpoints, so the angles are derived from the
|
|
311
|
+
* rotation rather than assumed.
|
|
312
|
+
*
|
|
313
|
+
* Degenerate input — a zero radius, or coincident endpoints — is a straight
|
|
314
|
+
* line per the spec, and the endpoints are then the whole extent.
|
|
315
|
+
*/
|
|
316
|
+
function arcExtremes(x1, y1, x2, y2, rxIn, ryIn, rotationDeg, largeArc, sweep) {
|
|
317
|
+
const ends = [
|
|
318
|
+
[x1, y1],
|
|
319
|
+
[x2, y2],
|
|
320
|
+
];
|
|
321
|
+
let rx = Math.abs(rxIn);
|
|
322
|
+
let ry = Math.abs(ryIn);
|
|
323
|
+
if (rx === 0 || ry === 0 || (x1 === x2 && y1 === y2))
|
|
324
|
+
return ends;
|
|
325
|
+
const phi = (rotationDeg * Math.PI) / 180;
|
|
326
|
+
const cosP = Math.cos(phi);
|
|
327
|
+
const sinP = Math.sin(phi);
|
|
328
|
+
const dx2 = (x1 - x2) / 2;
|
|
329
|
+
const dy2 = (y1 - y2) / 2;
|
|
330
|
+
const x1p = cosP * dx2 + sinP * dy2;
|
|
331
|
+
const y1p = -sinP * dx2 + cosP * dy2;
|
|
332
|
+
// Scale the radii up when they are too small to span the endpoints (F.6.6).
|
|
333
|
+
const lambda = (x1p * x1p) / (rx * rx) + (y1p * y1p) / (ry * ry);
|
|
334
|
+
if (lambda > 1) {
|
|
335
|
+
const k = Math.sqrt(lambda);
|
|
336
|
+
rx *= k;
|
|
337
|
+
ry *= k;
|
|
338
|
+
}
|
|
339
|
+
const num = rx * rx * ry * ry - rx * rx * y1p * y1p - ry * ry * x1p * x1p;
|
|
340
|
+
const den = rx * rx * y1p * y1p + ry * ry * x1p * x1p;
|
|
341
|
+
if (den === 0)
|
|
342
|
+
return ends;
|
|
343
|
+
const coef = (largeArc === sweep ? -1 : 1) * Math.sqrt(Math.max(0, num / den));
|
|
344
|
+
const cxp = (coef * rx * y1p) / ry;
|
|
345
|
+
const cyp = (-coef * ry * x1p) / rx;
|
|
346
|
+
const ccx = cosP * cxp - sinP * cyp + (x1 + x2) / 2;
|
|
347
|
+
const ccy = sinP * cxp + cosP * cyp + (y1 + y2) / 2;
|
|
348
|
+
const angleOf = (px, py) => {
|
|
349
|
+
const ux = (cosP * (px - ccx) + sinP * (py - ccy)) / rx;
|
|
350
|
+
const uy = (-sinP * (px - ccx) + cosP * (py - ccy)) / ry;
|
|
351
|
+
return Math.atan2(uy, ux);
|
|
352
|
+
};
|
|
353
|
+
const start = angleOf(x1, y1);
|
|
354
|
+
const end = angleOf(x2, y2);
|
|
355
|
+
const TAU = Math.PI * 2;
|
|
356
|
+
// Normalised sweep, in the direction the flag names.
|
|
357
|
+
let delta = end - start;
|
|
358
|
+
if (sweep && delta < 0)
|
|
359
|
+
delta += TAU;
|
|
360
|
+
if (!sweep && delta > 0)
|
|
361
|
+
delta -= TAU;
|
|
362
|
+
const within = (theta) => {
|
|
363
|
+
let t = theta - start;
|
|
364
|
+
if (sweep) {
|
|
365
|
+
while (t < 0)
|
|
366
|
+
t += TAU;
|
|
367
|
+
return t <= delta + 1e-9;
|
|
368
|
+
}
|
|
369
|
+
while (t > 0)
|
|
370
|
+
t -= TAU;
|
|
371
|
+
return t >= delta - 1e-9;
|
|
372
|
+
};
|
|
373
|
+
const at = (theta) => [
|
|
374
|
+
ccx + rx * Math.cos(theta) * cosP - ry * Math.sin(theta) * sinP,
|
|
375
|
+
ccy + rx * Math.cos(theta) * sinP + ry * Math.sin(theta) * cosP,
|
|
376
|
+
];
|
|
377
|
+
const out = [...ends];
|
|
378
|
+
// The parameter angles at which x and y are stationary on the rotated
|
|
379
|
+
// ellipse; each has a partner half a turn away.
|
|
380
|
+
const tx = Math.atan2(-ry * sinP, rx * cosP);
|
|
381
|
+
const ty = Math.atan2(ry * cosP, rx * sinP);
|
|
382
|
+
for (const base of [tx, ty]) {
|
|
383
|
+
for (const theta of [base, base + Math.PI]) {
|
|
384
|
+
if (within(theta))
|
|
385
|
+
out.push(at(theta));
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
return out;
|
|
389
|
+
}
|
|
390
|
+
/** Extent of a `points` list (`<polygon>`, `<polyline>`). Absolute by definition. */
|
|
391
|
+
export function pointsExtent(points) {
|
|
392
|
+
const nums = points.trim().match(/-?\d*\.?\d+(?:[eE][-+]?\d+)?/g);
|
|
393
|
+
if (!nums || nums.length < 2)
|
|
394
|
+
return null;
|
|
395
|
+
let minX = Number.POSITIVE_INFINITY;
|
|
396
|
+
let minY = Number.POSITIVE_INFINITY;
|
|
397
|
+
let maxX = Number.NEGATIVE_INFINITY;
|
|
398
|
+
let maxY = Number.NEGATIVE_INFINITY;
|
|
399
|
+
for (let i = 0; i + 1 < nums.length; i += 2) {
|
|
400
|
+
const x = Number(nums[i]);
|
|
401
|
+
const y = Number(nums[i + 1]);
|
|
402
|
+
if (!Number.isFinite(x) || !Number.isFinite(y))
|
|
403
|
+
continue;
|
|
404
|
+
minX = Math.min(minX, x);
|
|
405
|
+
maxX = Math.max(maxX, x);
|
|
406
|
+
minY = Math.min(minY, y);
|
|
407
|
+
maxY = Math.max(maxY, y);
|
|
408
|
+
}
|
|
409
|
+
return Number.isFinite(minX) ? { minX, minY, maxX, maxY } : null;
|
|
410
|
+
}
|
|
411
|
+
/**
|
|
412
|
+
* One element's own extent in user units, whichever way it was drawn.
|
|
413
|
+
*
|
|
414
|
+
* The union of `staticBox` (rect, circle, ellipse, line), `pathExtent` and
|
|
415
|
+
* `pointsExtent`. Finding 2.1's first half: a reference icon drawn with
|
|
416
|
+
* primitives used to yield no extent at all and was dropped from the set
|
|
417
|
+
* SILENTLY — after which the reading reported "no icon reference set was
|
|
418
|
+
* supplied" although one was.
|
|
419
|
+
*
|
|
420
|
+
* Returns null for a transformed element, inheriting `staticBox`'s refusal to
|
|
421
|
+
* guess at a transform, and for anything that carries no geometry.
|
|
422
|
+
*/
|
|
423
|
+
export function elementExtent(el) {
|
|
424
|
+
if (el.closing)
|
|
425
|
+
return null;
|
|
426
|
+
if (el.attrs['transform'] || el.attrs['style']?.includes('transform'))
|
|
427
|
+
return null;
|
|
428
|
+
if (el.name === 'path')
|
|
429
|
+
return pathExtent(el.attrs['d'] ?? '');
|
|
430
|
+
if (el.name === 'polygon' || el.name === 'polyline')
|
|
431
|
+
return pointsExtent(el.attrs['points'] ?? '');
|
|
432
|
+
return staticBox(el);
|
|
433
|
+
}
|
|
434
|
+
export function pathDataError(d) {
|
|
435
|
+
const trimmed = d.trim();
|
|
436
|
+
if (!trimmed)
|
|
437
|
+
return 'empty d attribute';
|
|
438
|
+
if (!/^[mM]/.test(trimmed))
|
|
439
|
+
return 'path data does not start with a moveto command';
|
|
440
|
+
const argCount = {
|
|
441
|
+
m: 2, l: 2, t: 2, h: 1, v: 1, c: 6, s: 4, q: 4, a: 7, z: 0,
|
|
442
|
+
};
|
|
443
|
+
// The SAME tokeniser `pathExtent` reads. Finding 5 of this change's second
|
|
444
|
+
// completion review: this one kept the superseded letter-or-number
|
|
445
|
+
// alternation, so `M 0 0 a 5 5 0 0130 30` — valid path data whose two arc
|
|
446
|
+
// flags are written without separators — read as five arguments where the
|
|
447
|
+
// arc takes seven, and was reported as an UNPARSEABLE PATH. Worse than
|
|
448
|
+
// finding 17's wrong extent: a finding against a correct file, from the
|
|
449
|
+
// rule whose job is to say a file cannot be read.
|
|
450
|
+
const tokens = tokenisePath(trimmed);
|
|
451
|
+
if (!tokens) {
|
|
452
|
+
return 'path data could not be read — a coordinate, an arc flag or a command letter is malformed';
|
|
453
|
+
}
|
|
454
|
+
let i = 0;
|
|
455
|
+
while (i < tokens.length) {
|
|
456
|
+
const tok = tokens[i];
|
|
457
|
+
if (!/^[a-zA-Z]$/.test(tok))
|
|
458
|
+
return `unexpected token "${tok}" where a command letter was required`;
|
|
459
|
+
const cmd = tok.toLowerCase();
|
|
460
|
+
if (!(cmd in argCount))
|
|
461
|
+
return `unknown path command "${tok}"`;
|
|
462
|
+
const need = argCount[cmd];
|
|
463
|
+
i += 1;
|
|
464
|
+
if (need === 0)
|
|
465
|
+
continue;
|
|
466
|
+
let consumed = 0;
|
|
467
|
+
while (i < tokens.length && !/^[a-zA-Z]$/.test(tokens[i])) {
|
|
468
|
+
i += 1;
|
|
469
|
+
consumed += 1;
|
|
470
|
+
}
|
|
471
|
+
if (consumed === 0 || consumed % need !== 0) {
|
|
472
|
+
return `command "${tok}" takes ${need} coordinate(s) per repetition, got ${consumed}`;
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
return null;
|
|
476
|
+
}
|
|
477
|
+
//# sourceMappingURL=svg_geometry.js.map
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* svg_motion — the ONE reading of "does this file's reduced-motion route
|
|
3
|
+
* actually reach its SMIL animation".
|
|
4
|
+
*
|
|
5
|
+
* Two linters need the same answer and would otherwise disagree about it:
|
|
6
|
+
* `lint_svg_asset` (standalone `.svg`, step 1.1 of `road-to-svg-with-a-witness`)
|
|
7
|
+
* and `lint_design_quality`'s DQ4 (inline SVG inside HTML, step 1.3). A
|
|
8
|
+
* standalone file and an inline graphic hitting different definitions of
|
|
9
|
+
* "covered" is how a consumer ends up with one linter clearing what the other
|
|
10
|
+
* reds, for the same bytes.
|
|
11
|
+
*
|
|
12
|
+
* The measurement behind the `css-only` verdict (R4 of that roadmap): under an
|
|
13
|
+
* emulated `prefers-reduced-motion: reduce`, a page-level
|
|
14
|
+
* `svg * { animation: none !important }` left an `<animate>` moving `cx` from
|
|
15
|
+
* 20.2 to 76.8 in 700 ms. CSS `animation` and `transition` properties do not
|
|
16
|
+
* reach SMIL at all, so a file whose only route is one of them is covered by
|
|
17
|
+
* nothing — and reads, to a human and to a naive linter, exactly like a file
|
|
18
|
+
* that is covered.
|
|
19
|
+
*/
|
|
20
|
+
/** SMIL animation elements. `<set>` is included: it animates too. */
|
|
21
|
+
export const SMIL_TAGS = new Set([
|
|
22
|
+
'animate',
|
|
23
|
+
'animatetransform',
|
|
24
|
+
'animatemotion',
|
|
25
|
+
'animatecolor',
|
|
26
|
+
'set',
|
|
27
|
+
]);
|
|
28
|
+
const SMIL_MARKUP_RE = /<(animate|animateTransform|animateMotion|animateColor|set)\b/i;
|
|
29
|
+
const REDUCED_MOTION_RE = /@media[^{]*prefers-reduced-motion/i;
|
|
30
|
+
/** True when the markup carries any SMIL animation element. */
|
|
31
|
+
export function hasSmilMarkup(content) {
|
|
32
|
+
return SMIL_MARKUP_RE.test(content);
|
|
33
|
+
}
|
|
34
|
+
/** True when the markup carries any CSS/WAAPI animation. */
|
|
35
|
+
export function hasCssAnimation(content) {
|
|
36
|
+
return /@keyframes\s+[\w-]+/i.test(content) || /\banimation(?:-name)?\s*:/i.test(content);
|
|
37
|
+
}
|
|
38
|
+
/** True when a `prefers-reduced-motion` media query exists anywhere. */
|
|
39
|
+
export function hasReducedMotionQuery(content) {
|
|
40
|
+
return REDUCED_MOTION_RE.test(content);
|
|
41
|
+
}
|
|
42
|
+
function lineIndexer(content) {
|
|
43
|
+
const starts = [0];
|
|
44
|
+
for (let i = 0; i < content.length; i++)
|
|
45
|
+
if (content[i] === '\n')
|
|
46
|
+
starts.push(i + 1);
|
|
47
|
+
return (offset) => {
|
|
48
|
+
let lo = 0;
|
|
49
|
+
let hi = starts.length - 1;
|
|
50
|
+
while (lo < hi) {
|
|
51
|
+
const mid = (lo + hi + 1) >> 1;
|
|
52
|
+
if (starts[mid] <= offset)
|
|
53
|
+
lo = mid;
|
|
54
|
+
else
|
|
55
|
+
hi = mid - 1;
|
|
56
|
+
}
|
|
57
|
+
return lo + 1;
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
function matchBrace(css, open) {
|
|
61
|
+
let depth = 0;
|
|
62
|
+
for (let i = open; i < css.length; i++) {
|
|
63
|
+
if (css[i] === '{')
|
|
64
|
+
depth += 1;
|
|
65
|
+
else if (css[i] === '}') {
|
|
66
|
+
depth -= 1;
|
|
67
|
+
if (depth === 0)
|
|
68
|
+
return i;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return -1;
|
|
72
|
+
}
|
|
73
|
+
function collectRules(css, base, atRule, lineOf, out) {
|
|
74
|
+
let i = 0;
|
|
75
|
+
while (i < css.length) {
|
|
76
|
+
const brace = css.indexOf('{', i);
|
|
77
|
+
if (brace === -1)
|
|
78
|
+
break;
|
|
79
|
+
const prelude = css.slice(i, brace).trim();
|
|
80
|
+
const end = matchBrace(css, brace);
|
|
81
|
+
if (end === -1)
|
|
82
|
+
break;
|
|
83
|
+
const body = css.slice(brace + 1, end);
|
|
84
|
+
if (prelude.startsWith('@')) {
|
|
85
|
+
collectRules(body, base + brace + 1, prelude, lineOf, out);
|
|
86
|
+
}
|
|
87
|
+
else if (prelude) {
|
|
88
|
+
out.push({ selector: prelude, body, line: lineOf(base + i), atRule });
|
|
89
|
+
}
|
|
90
|
+
i = end + 1;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
/** Every rule inside every `<style>` element, with its enclosing at-rule. */
|
|
94
|
+
export function readCssRules(content) {
|
|
95
|
+
const rules = [];
|
|
96
|
+
const lineOf = lineIndexer(content);
|
|
97
|
+
const styleRe = /<style\b[^>]*>([\s\S]*?)<\/style\s*>/gi;
|
|
98
|
+
let sm;
|
|
99
|
+
while ((sm = styleRe.exec(content)) !== null) {
|
|
100
|
+
// Blank out comments while preserving newlines, so line numbers hold.
|
|
101
|
+
const css = (sm[1] ?? '').replace(/\/\*[\s\S]*?\*\//g, (c) => c.replace(/[^\n]/g, ' '));
|
|
102
|
+
const base = sm.index + (sm[0] ?? '').indexOf(sm[1] ?? '');
|
|
103
|
+
collectRules(css, base, '', lineOf, rules);
|
|
104
|
+
}
|
|
105
|
+
return rules;
|
|
106
|
+
}
|
|
107
|
+
/** Every rule of a bare stylesheet (a `.css` file, no `<style>` wrapper). */
|
|
108
|
+
export function readStylesheetRules(css) {
|
|
109
|
+
const rules = [];
|
|
110
|
+
const lineOf = lineIndexer(css);
|
|
111
|
+
const blanked = css.replace(/\/\*[\s\S]*?\*\//g, (c) => c.replace(/[^\n]/g, ' '));
|
|
112
|
+
collectRules(blanked, 0, '', lineOf, rules);
|
|
113
|
+
return rules;
|
|
114
|
+
}
|
|
115
|
+
/** Declarations of one rule body, lower-cased property → value. */
|
|
116
|
+
export function declarationsOf(body) {
|
|
117
|
+
const out = {};
|
|
118
|
+
for (const decl of body.split(';')) {
|
|
119
|
+
const idx = decl.indexOf(':');
|
|
120
|
+
if (idx === -1)
|
|
121
|
+
continue;
|
|
122
|
+
const prop = decl.slice(0, idx).trim().toLowerCase();
|
|
123
|
+
if (!prop || prop.startsWith('@') || prop.includes('{'))
|
|
124
|
+
continue;
|
|
125
|
+
out[prop] = decl.slice(idx + 1).trim();
|
|
126
|
+
}
|
|
127
|
+
return out;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Does a reduced-motion route exist that can take effect on a SMIL subtree?
|
|
131
|
+
*
|
|
132
|
+
* Two kinds can: a declaration that is not an animation shorthand (a
|
|
133
|
+
* `display`/`visibility` switch, a swapped `fill`, a `d` override removes or
|
|
134
|
+
* replaces the animating subtree), and a `begin="indefinite"`, which says the
|
|
135
|
+
* animation does not start on its own.
|
|
136
|
+
*
|
|
137
|
+
* Deliberately generous in the "routed" direction. This rule ships advisory,
|
|
138
|
+
* and the cost of a false red here is a linter the agent learns to ignore —
|
|
139
|
+
* Risk 1 of the parent roadmap.
|
|
140
|
+
*/
|
|
141
|
+
export function reducedMotionReachesSmil(content) {
|
|
142
|
+
const scoped = readCssRules(content).filter((r) => /prefers-reduced-motion/i.test(r.atRule));
|
|
143
|
+
for (const rule of scoped) {
|
|
144
|
+
for (const prop of Object.keys(declarationsOf(rule.body))) {
|
|
145
|
+
if (prop === 'animation' || prop.startsWith('animation-'))
|
|
146
|
+
continue;
|
|
147
|
+
if (prop === 'transition' || prop.startsWith('transition-'))
|
|
148
|
+
continue;
|
|
149
|
+
return true;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
// A `<set>` is NOT a route, and treating it as one was a hole: `<set>` is
|
|
153
|
+
// itself a SMIL animation — it is in `SMIL_TAGS` — so a file that animates
|
|
154
|
+
// with one was its own reduced-motion branch, and both this rule and DQ4's
|
|
155
|
+
// SMIL half went silent on exactly the R4 case they exist to catch.
|
|
156
|
+
// `begin="indefinite"` stays, because it says something a `<set>` does not:
|
|
157
|
+
// the animation does not start on its own.
|
|
158
|
+
if (/begin\s*=\s*["']indefinite["']/i.test(content))
|
|
159
|
+
return true;
|
|
160
|
+
return false;
|
|
161
|
+
}
|
|
162
|
+
/** The whole SMIL reduced-motion reading for one document's bytes. */
|
|
163
|
+
export function smilVerdict(content) {
|
|
164
|
+
if (!hasSmilMarkup(content))
|
|
165
|
+
return 'no-smil';
|
|
166
|
+
if (!hasReducedMotionQuery(content))
|
|
167
|
+
return 'no-route';
|
|
168
|
+
return reducedMotionReachesSmil(content) ? 'routed' : 'css-only';
|
|
169
|
+
}
|
|
170
|
+
/** The first line carrying a SMIL element, 1-based; `1` when none is found. */
|
|
171
|
+
export function firstSmilLine(content) {
|
|
172
|
+
const lines = content.split('\n');
|
|
173
|
+
for (let i = 0; i < lines.length; i++) {
|
|
174
|
+
if (SMIL_MARKUP_RE.test(lines[i] ?? ''))
|
|
175
|
+
return i + 1;
|
|
176
|
+
}
|
|
177
|
+
return 1;
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=svg_motion.js.map
|