@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
|
@@ -18,6 +18,7 @@ import * as fs from 'node:fs';
|
|
|
18
18
|
import * as path from 'node:path';
|
|
19
19
|
import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
20
20
|
|
|
21
|
+
import { validateBrandVoiceSlotFile } from './_lib/brand_voice_slot.js';
|
|
21
22
|
import { DeadScopeError, assertScanned } from './_lib/scan_scope.js';
|
|
22
23
|
|
|
23
24
|
const _HERE = fileURLToPath(import.meta.url);
|
|
@@ -43,6 +44,7 @@ const VALID_SLOTS = [
|
|
|
43
44
|
'channel-stage',
|
|
44
45
|
'funnel-stage',
|
|
45
46
|
'customer-segment',
|
|
47
|
+
'brand-voice',
|
|
46
48
|
'fiscal-period',
|
|
47
49
|
'org-stage',
|
|
48
50
|
'regulatory-regime',
|
|
@@ -116,6 +118,13 @@ function lint_skill(p: string): string[] {
|
|
|
116
118
|
return problems;
|
|
117
119
|
}
|
|
118
120
|
|
|
121
|
+
/** The brand-voice slot is the one slot validated as data (adr-gtm-context-spine-brand-voice). */
|
|
122
|
+
const BRAND_VOICE_SLOT = path.join('agents', 'context-spine', 'brand-voice.md');
|
|
123
|
+
|
|
124
|
+
function lint_brand_voice_slot(p: string): string[] {
|
|
125
|
+
return validateBrandVoiceSlotFile(p).map((i) => `brand_voice_slot: ${i.field}: ${i.message}`);
|
|
126
|
+
}
|
|
127
|
+
|
|
119
128
|
/** Recursively list `SKILL.md` files under `dir`, sorted (mirrors sorted(rglob)). */
|
|
120
129
|
function _rglobSkillSorted(dir: string): string[] {
|
|
121
130
|
const out: string[] = [];
|
|
@@ -187,6 +196,17 @@ function main(): number {
|
|
|
187
196
|
}
|
|
188
197
|
}
|
|
189
198
|
}
|
|
199
|
+
const slotPath = path.join(REPO_ROOT, BRAND_VOICE_SLOT);
|
|
200
|
+
if (fs.existsSync(slotPath)) {
|
|
201
|
+
const problems = lint_brand_voice_slot(slotPath);
|
|
202
|
+
if (problems.length) {
|
|
203
|
+
failed += 1;
|
|
204
|
+
process.stderr.write(`❌ ${_relPosix(slotPath, REPO_ROOT)}\n`);
|
|
205
|
+
for (const pb of problems) {
|
|
206
|
+
process.stderr.write(` - ${pb}\n`);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
190
210
|
if (failed) {
|
|
191
211
|
process.stderr.write(
|
|
192
212
|
`\n❌ ${failed} skill(s) failed context-spine usage lint ` +
|
|
@@ -239,5 +259,6 @@ export {
|
|
|
239
259
|
_read_spine,
|
|
240
260
|
_slot_cited,
|
|
241
261
|
lint_skill,
|
|
262
|
+
lint_brand_voice_slot,
|
|
242
263
|
main,
|
|
243
264
|
};
|
|
@@ -14,8 +14,9 @@
|
|
|
14
14
|
* A. every non-`Q*` catalog entry appears exactly once in § Detector status
|
|
15
15
|
* B. every § Detector status row names a catalog entry that exists
|
|
16
16
|
* C. the set of `backed` rows equals the registry's `catalogId` set
|
|
17
|
-
* D. every status is one of the
|
|
17
|
+
* D. every status is one of the six allowed values
|
|
18
18
|
* E. every non-`backed` row carries a reason
|
|
19
|
+
* H. every `witness` row names a rule the rendered witness emits
|
|
19
20
|
*
|
|
20
21
|
* `Q*` entries are out of scope by construction: they are objective floors owned
|
|
21
22
|
* by `lint_design_quality`, not aesthetic tells, and the status table says so.
|
|
@@ -38,8 +39,21 @@ const REPO = path.resolve(path.dirname(_HERE), '..', '..');
|
|
|
38
39
|
const CATALOG = path.join(REPO, 'docs', 'guidelines', 'design-antipatterns.md');
|
|
39
40
|
const REGISTRY = path.join(REPO, 'src', 'scripts', 'design_slop_rules.ts');
|
|
40
41
|
|
|
41
|
-
/** The
|
|
42
|
-
export const STATUSES = ['backed', 'floor', 'judgment-only', 'deferred', 'candidate'] as const;
|
|
42
|
+
/** The six statuses § Detector status may use. */
|
|
43
|
+
export const STATUSES = ['backed', 'floor', 'judgment-only', 'deferred', 'candidate', 'witness'] as const;
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Where a `witness` row's rule must exist: the asset witness's sources
|
|
47
|
+
* (road-to-type-with-a-witness 2.1). A `witness` entry is read from the
|
|
48
|
+
* rendered asset rather than from text, so its detector lives here and not in
|
|
49
|
+
* the slop registry.
|
|
50
|
+
*/
|
|
51
|
+
export const WITNESS_SOURCES = [
|
|
52
|
+
'src/cli/commands/uiRenderAsset.ts',
|
|
53
|
+
'src/cli/commands/uiRenderAssetFonts.ts',
|
|
54
|
+
] as const;
|
|
55
|
+
|
|
56
|
+
const WITNESS_RULE = /`((?:geometry|structure|accessibility|motion)\/[a-z0-9-]+)`/;
|
|
43
57
|
export type Status = (typeof STATUSES)[number];
|
|
44
58
|
|
|
45
59
|
export interface ParityFinding {
|
|
@@ -119,8 +133,12 @@ export function registryCatalogIds(registryTs: string): string[] {
|
|
|
119
133
|
return [...registryTs.matchAll(CATALOG_ID)].map((m) => m[1] as string);
|
|
120
134
|
}
|
|
121
135
|
|
|
122
|
-
/**
|
|
123
|
-
|
|
136
|
+
/**
|
|
137
|
+
* Pure invariant check over both documents, plus the witness source text a
|
|
138
|
+
* `witness` row is checked against. Omitting it fails every `witness` row
|
|
139
|
+
* rather than passing it unread.
|
|
140
|
+
*/
|
|
141
|
+
export function parityFindings(catalogMd: string, registryTs: string, witnessTs = ''): ParityFinding[] {
|
|
124
142
|
const out: ParityFinding[] = [];
|
|
125
143
|
|
|
126
144
|
if (STATUS_SECTION.exec(catalogMd) === null) {
|
|
@@ -166,6 +184,19 @@ export function parityFindings(catalogMd: string, registryTs: string): ParityFin
|
|
|
166
184
|
if (row.status !== 'backed' && row.note === '') {
|
|
167
185
|
out.push({ kind: 'missing-reason', id, msg: `${id}: status '${row.status}' carries no reason` });
|
|
168
186
|
}
|
|
187
|
+
// H — a witness row names its rendered rule, and the witness emits it.
|
|
188
|
+
if (row.status === 'witness') {
|
|
189
|
+
const rule = WITNESS_RULE.exec(row.note)?.[1];
|
|
190
|
+
if (rule === undefined || !witnessTs.includes(`'${rule}'`)) {
|
|
191
|
+
out.push({
|
|
192
|
+
kind: 'witness-without-rule',
|
|
193
|
+
id,
|
|
194
|
+
msg: rule
|
|
195
|
+
? `${id}: marked witness on \`${rule}\`, which the witness source does not emit`
|
|
196
|
+
: `${id}: marked witness but its note names no witness rule (\`geometry/...\`)`,
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
}
|
|
169
200
|
}
|
|
170
201
|
|
|
171
202
|
// F — the census columns: present, non-empty, and from the closed vocabularies.
|
|
@@ -243,7 +274,7 @@ export function main(): number {
|
|
|
243
274
|
try {
|
|
244
275
|
assertWatchlistResolves({
|
|
245
276
|
gate: 'lint_design_antipattern_parity',
|
|
246
|
-
candidates: [path.relative(REPO, CATALOG), path.relative(REPO, REGISTRY)],
|
|
277
|
+
candidates: [path.relative(REPO, CATALOG), path.relative(REPO, REGISTRY), ...WITNESS_SOURCES],
|
|
247
278
|
repoRoot: REPO,
|
|
248
279
|
});
|
|
249
280
|
} catch (exc) {
|
|
@@ -256,7 +287,8 @@ export function main(): number {
|
|
|
256
287
|
|
|
257
288
|
const catalogMd = fs.readFileSync(CATALOG, 'utf-8');
|
|
258
289
|
const registryTs = fs.readFileSync(REGISTRY, 'utf-8');
|
|
259
|
-
const
|
|
290
|
+
const witnessTs = WITNESS_SOURCES.map((rel) => fs.readFileSync(path.join(REPO, rel), 'utf-8')).join('\n');
|
|
291
|
+
const findings = parityFindings(catalogMd, registryTs, witnessTs);
|
|
260
292
|
|
|
261
293
|
const rows = statusRows(catalogMd);
|
|
262
294
|
const entries = catalogEntries(catalogMd).length;
|
|
@@ -13,7 +13,8 @@
|
|
|
13
13
|
* DQ1 contrast — Text/background contrast < WCAG AA (4.5:1 normal, 3:1 large)
|
|
14
14
|
* DQ2 font-size — Body font-size < 14px (floor; 16px strongly preferred)
|
|
15
15
|
* DQ3 line-length — Prose line-length > 75ch without column constraint
|
|
16
|
-
* DQ4 reduced-motion — @keyframes / animation present without prefers-reduced-motion alt
|
|
16
|
+
* DQ4 reduced-motion — @keyframes / animation present without prefers-reduced-motion alt,
|
|
17
|
+
* and (for INLINE SVG in HTML) SMIL with no route or a CSS-only one
|
|
17
18
|
* DQ5 heading-skip — Heading levels skipped (h1 → h3 without h2)
|
|
18
19
|
* DQ6 focus-indicator— Interactive element with no :focus-visible indicator
|
|
19
20
|
*
|
|
@@ -45,6 +46,7 @@
|
|
|
45
46
|
import fs from "node:fs";
|
|
46
47
|
import path from "node:path";
|
|
47
48
|
import { assertScanned, DeadScopeError } from "./_lib/scan_scope.js";
|
|
49
|
+
import { firstSmilLine, smilVerdict } from "./_lib/svg_motion.js";
|
|
48
50
|
|
|
49
51
|
interface Finding {
|
|
50
52
|
rule: string;
|
|
@@ -94,25 +96,71 @@ function checkFontSize(lines: string[], filePath: string): Finding[] {
|
|
|
94
96
|
return findings;
|
|
95
97
|
}
|
|
96
98
|
|
|
97
|
-
/**
|
|
99
|
+
/**
|
|
100
|
+
* DQ4: animation without a reduced-motion route.
|
|
101
|
+
*
|
|
102
|
+
* Two halves. The CSS half is the original rule. The SMIL half (step 1.3 of
|
|
103
|
+
* `road-to-svg-with-a-witness`) covers INLINE SVG inside an HTML document and
|
|
104
|
+
* closes a measured blind spot: an HTML file whose only animation is an
|
|
105
|
+
* infinite `<animate>` read "clean — 1 file(s) checked" here, because
|
|
106
|
+
* `@keyframes` and `animation:` are the only two things the CSS half looks
|
|
107
|
+
* for, and SMIL is neither (R10).
|
|
108
|
+
*
|
|
109
|
+
* It also reports the subtler case: SMIL whose ONLY reduced-motion route is a
|
|
110
|
+
* CSS declaration. Under an emulated `reduce`, a page-level
|
|
111
|
+
* `svg * { animation: none !important }` left an `<animate>` moving `cx` from
|
|
112
|
+
* 20.2 to 76.8 in 700 ms (R4) — CSS animation properties do not reach SMIL, so
|
|
113
|
+
* the file looks covered and is not.
|
|
114
|
+
*
|
|
115
|
+
* STANDALONE `.svg` IS DELIBERATELY NOT HERE. A file cannot see its host's
|
|
116
|
+
* `<picture>` route, so judging the route from inside it would red correct
|
|
117
|
+
* assets and break this linter's zero-false-positive promise (line 12). That
|
|
118
|
+
* case belongs to `lint_svg_asset`, which knows it is reading a whole asset.
|
|
119
|
+
* Both halves read the same `_lib/svg_motion.ts`, so the two cannot drift.
|
|
120
|
+
*/
|
|
98
121
|
function checkReducedMotion(content: string, filePath: string, lines: string[]): Finding[] {
|
|
99
|
-
const
|
|
100
|
-
if (!hasAnimation) return [];
|
|
122
|
+
const findings: Finding[] = [];
|
|
101
123
|
|
|
124
|
+
const hasAnimation = /@keyframes\s+\w+|animation\s*:/i.test(content);
|
|
102
125
|
const hasReducedMotion = /@media\s*\([^)]*prefers-reduced-motion/i.test(content);
|
|
103
|
-
if (hasReducedMotion)
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
const animLine = lines.findIndex((l) => /@keyframes\s+\w+|animation\s*:/.test(l));
|
|
107
|
-
return [
|
|
108
|
-
{
|
|
126
|
+
if (hasAnimation && !hasReducedMotion) {
|
|
127
|
+
const animLine = lines.findIndex((l) => /@keyframes\s+\w+|animation\s*:/.test(l));
|
|
128
|
+
findings.push({
|
|
109
129
|
rule: "dq4-reduced-motion",
|
|
110
130
|
file: filePath,
|
|
111
131
|
line: animLine + 1,
|
|
112
132
|
snippet: "@keyframes or animation present without @media (prefers-reduced-motion) alternative",
|
|
113
133
|
severity: "error",
|
|
114
|
-
}
|
|
115
|
-
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
// The SMIL half runs for documents that can HOST an inline graphic. A `.css`
|
|
138
|
+
// file cannot carry one, and a standalone `.svg` is the other linter's.
|
|
139
|
+
if (!/\.(html|htm|vue|svelte|astro)$/i.test(filePath)) return findings;
|
|
140
|
+
|
|
141
|
+
const verdict = smilVerdict(content);
|
|
142
|
+
if (verdict === "no-route") {
|
|
143
|
+
findings.push({
|
|
144
|
+
rule: "dq4-reduced-motion",
|
|
145
|
+
file: filePath,
|
|
146
|
+
line: firstSmilLine(content),
|
|
147
|
+
snippet:
|
|
148
|
+
"inline SVG animates with SMIL (<animate>/<animateTransform>/<set>) and the document carries " +
|
|
149
|
+
"no @media (prefers-reduced-motion) route at all",
|
|
150
|
+
severity: "error",
|
|
151
|
+
});
|
|
152
|
+
} else if (verdict === "css-only") {
|
|
153
|
+
findings.push({
|
|
154
|
+
rule: "dq4-reduced-motion",
|
|
155
|
+
file: filePath,
|
|
156
|
+
line: firstSmilLine(content),
|
|
157
|
+
snippet:
|
|
158
|
+
"inline SVG animates with SMIL and the only reduced-motion route is a CSS animation/transition " +
|
|
159
|
+
"declaration — CSS does not reach SMIL, so the animation keeps running under `reduce`",
|
|
160
|
+
severity: "error",
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
return findings;
|
|
116
164
|
}
|
|
117
165
|
|
|
118
166
|
/** DQ5: heading levels skipped (h1 → h3 without h2) in HTML */
|
|
@@ -49,6 +49,8 @@ import path from 'node:path';
|
|
|
49
49
|
import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
50
50
|
|
|
51
51
|
import { GateLedger } from './_lib/gate_ledger.js';
|
|
52
|
+
import { parseClearance } from './_lib/merge_clearance_record.js';
|
|
53
|
+
import { readRequiredProviders } from './_lib/ratification_artifact.js';
|
|
52
54
|
import { resolveBaseRef } from './_lib/ratchet_base_ref.js';
|
|
53
55
|
import { parseExecutionMode } from './_lib/repeated_run.js';
|
|
54
56
|
import { reportScanned } from './_lib/scan_scope.js';
|
|
@@ -65,6 +67,8 @@ export const EVIDENCE_TYPES = [
|
|
|
65
67
|
'analysis',
|
|
66
68
|
'feel',
|
|
67
69
|
'ratification',
|
|
70
|
+
'merge-clearance',
|
|
71
|
+
'bypass-record',
|
|
68
72
|
] as const;
|
|
69
73
|
|
|
70
74
|
/**
|
|
@@ -202,6 +206,22 @@ export interface Finding {
|
|
|
202
206
|
readonly reason: string;
|
|
203
207
|
}
|
|
204
208
|
|
|
209
|
+
const RATIFICATION_POLICY = path.join('src', 'config', 'ratification-policy.json');
|
|
210
|
+
|
|
211
|
+
function clearanceProblems(root: string, contents: string): string[] {
|
|
212
|
+
let required: number | null = null;
|
|
213
|
+
try {
|
|
214
|
+
required = readRequiredProviders(fs.readFileSync(path.join(root, RATIFICATION_POLICY), 'utf8'));
|
|
215
|
+
} catch {
|
|
216
|
+
required = null;
|
|
217
|
+
}
|
|
218
|
+
if (required === null) {
|
|
219
|
+
return [`${RATIFICATION_POLICY} is missing or unreadable, so the outcome cannot be derived`];
|
|
220
|
+
}
|
|
221
|
+
const parsed = parseClearance(contents, required);
|
|
222
|
+
return Array.isArray(parsed) ? parsed : [];
|
|
223
|
+
}
|
|
224
|
+
|
|
205
225
|
export function checkFiles(root: string, files: readonly string[], ledger?: GateLedger): Finding[] {
|
|
206
226
|
const findings: Finding[] = [];
|
|
207
227
|
ledger?.plan([...files]);
|
|
@@ -248,6 +268,17 @@ export function checkFiles(root: string, files: readonly string[], ledger?: Gate
|
|
|
248
268
|
continue;
|
|
249
269
|
}
|
|
250
270
|
}
|
|
271
|
+
// A clearance decides whether a `needs-council` PR merges, so one that
|
|
272
|
+
// does not parse — or whose outcome its own seats do not support under
|
|
273
|
+
// the committed quorum policy — is a finding rather than a typed record.
|
|
274
|
+
if (res.type === 'merge-clearance') {
|
|
275
|
+
const problems = clearanceProblems(root, contents);
|
|
276
|
+
if (problems.length > 0) {
|
|
277
|
+
ledger?.fail(rel, 'merge clearance does not parse');
|
|
278
|
+
findings.push({ file: rel, reason: `merge-clearance does not parse: ${problems.join('; ')}` });
|
|
279
|
+
continue;
|
|
280
|
+
}
|
|
281
|
+
}
|
|
251
282
|
if (res.type === null) {
|
|
252
283
|
ledger?.fail(rel, 'no evidence type declared');
|
|
253
284
|
findings.push({
|
|
@@ -71,6 +71,7 @@ import * as os from 'node:os';
|
|
|
71
71
|
import * as path from 'node:path';
|
|
72
72
|
import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
73
73
|
|
|
74
|
+
import { assignmentPattern } from './_lib/egress_rules.js';
|
|
74
75
|
import { GateLedger } from './_lib/gate_ledger.js';
|
|
75
76
|
import { runGateCli, runSelfTest } from './_lib/gate_self_test.js';
|
|
76
77
|
import { reportScanned } from './_lib/scan_scope.js';
|
|
@@ -159,8 +160,16 @@ export const PATTERNS: readonly FencePattern[] = [
|
|
|
159
160
|
source: 'tool-safety',
|
|
160
161
|
langs: 'any',
|
|
161
162
|
label: 'Credential assigned a literal value in an example',
|
|
162
|
-
pattern:
|
|
163
|
-
|
|
163
|
+
pattern: assignmentPattern(
|
|
164
|
+
{
|
|
165
|
+
keywords: ['apiKey', 'apikey', 'password', 'passwd', 'secret', 'accessToken', 'clientSecret'],
|
|
166
|
+
before: '\\b',
|
|
167
|
+
after: '\\b',
|
|
168
|
+
capture: true,
|
|
169
|
+
value: `["'][^"']{8,}["']`,
|
|
170
|
+
},
|
|
171
|
+
'i',
|
|
172
|
+
),
|
|
164
173
|
// Placeholders are the correct way to show the shape and must not fire.
|
|
165
174
|
// `secret-vcs-guard` owns real credentials; this pattern owns the
|
|
166
175
|
// *teaching* of an inline literal, so anything self-evidently fake is out.
|
|
@@ -36,7 +36,12 @@ const QUIET = process.argv.slice(2).includes('--quiet');
|
|
|
36
36
|
const REPO = path.resolve(path.dirname(_HERE), '..', '..');
|
|
37
37
|
// 6.0.x (ADR-051): ghostwriter fixtures live at src/agent-src/ghostwriter/.
|
|
38
38
|
const PACKAGE_DIR = path.join(REPO, 'src', 'agent-src', 'ghostwriter');
|
|
39
|
-
|
|
39
|
+
// Every ghostwriter command writes profiles to `agents/reference/ghostwriter/`
|
|
40
|
+
// (docs/contracts/ghostwriter-schema.md); `agents/ghostwriter/` is the legacy
|
|
41
|
+
// path. Both are linted, canonical first, so a profile at either is checked.
|
|
42
|
+
const CONSUMER_DIR = path.join(REPO, 'agents', 'reference', 'ghostwriter');
|
|
43
|
+
const LEGACY_CONSUMER_DIR = path.join(REPO, 'agents', 'ghostwriter');
|
|
44
|
+
const CONSUMER_DIRS: readonly string[] = [CONSUMER_DIR, LEGACY_CONSUMER_DIR];
|
|
40
45
|
const ALLOWLIST = path.join(REPO, 'src', 'scripts', 'ghostwriter_fixture_allowlist.txt');
|
|
41
46
|
const EXEMPT_STEMS: ReadonlySet<string> = new Set(['README']);
|
|
42
47
|
|
|
@@ -86,6 +91,35 @@ function _globMdSorted(dir: string): string[] {
|
|
|
86
91
|
return out.sort();
|
|
87
92
|
}
|
|
88
93
|
|
|
94
|
+
/** Sorted `*.md` files anywhere under `dir`, nested directories included. */
|
|
95
|
+
function _globMdRecursiveSorted(dir: string): string[] {
|
|
96
|
+
let entries: fs.Dirent[];
|
|
97
|
+
try {
|
|
98
|
+
entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
99
|
+
} catch {
|
|
100
|
+
return [];
|
|
101
|
+
}
|
|
102
|
+
const out: string[] = [];
|
|
103
|
+
for (const entry of entries) {
|
|
104
|
+
const full = path.join(dir, entry.name);
|
|
105
|
+
if (entry.isDirectory()) {
|
|
106
|
+
out.push(..._globMdRecursiveSorted(full));
|
|
107
|
+
} else if (entry.isFile() && entry.name.endsWith('.md')) {
|
|
108
|
+
out.push(full);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return out.sort();
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/** Every consumer-side profile file, canonical path first, then legacy. */
|
|
115
|
+
function consumer_profile_files(dirs: readonly string[] = CONSUMER_DIRS): string[] {
|
|
116
|
+
const out: string[] = [];
|
|
117
|
+
for (const dir of dirs) {
|
|
118
|
+
out.push(..._globMdRecursiveSorted(dir));
|
|
119
|
+
}
|
|
120
|
+
return out;
|
|
121
|
+
}
|
|
122
|
+
|
|
89
123
|
function _stem(p: string): string {
|
|
90
124
|
const base = path.basename(p);
|
|
91
125
|
const dot = base.lastIndexOf('.');
|
|
@@ -213,14 +247,11 @@ function lint_package_side(allowlist: Set<string>): string[] {
|
|
|
213
247
|
return errors;
|
|
214
248
|
}
|
|
215
249
|
|
|
216
|
-
function lint_consumer_side(): string[] {
|
|
250
|
+
function lint_consumer_side(dirs: readonly string[] = CONSUMER_DIRS): string[] {
|
|
217
251
|
const errors: string[] = [];
|
|
218
|
-
if (!_exists(CONSUMER_DIR)) {
|
|
219
|
-
return errors;
|
|
220
|
-
}
|
|
221
252
|
// (alias_ci → [source_path, source_value, source_kind])
|
|
222
253
|
const seen = new Map<string, [string, string, string]>();
|
|
223
|
-
for (const p of
|
|
254
|
+
for (const p of consumer_profile_files(dirs)) {
|
|
224
255
|
if (EXEMPT_STEMS.has(_stem(p))) {
|
|
225
256
|
continue;
|
|
226
257
|
}
|
|
@@ -302,15 +333,13 @@ function main(): number {
|
|
|
302
333
|
const pkg_count = _exists(PACKAGE_DIR)
|
|
303
334
|
? _globMdSorted(PACKAGE_DIR).filter((p) => !EXEMPT_STEMS.has(_stem(p))).length
|
|
304
335
|
: 0;
|
|
305
|
-
const cons_count =
|
|
306
|
-
? _globMdSorted(CONSUMER_DIR).filter((p) => !EXEMPT_STEMS.has(_stem(p))).length
|
|
307
|
-
: 0;
|
|
336
|
+
const cons_count = consumer_profile_files().filter((p) => !EXEMPT_STEMS.has(_stem(p))).length;
|
|
308
337
|
try {
|
|
309
338
|
assertScanned({
|
|
310
339
|
gate: 'lint_ghostwriter_source',
|
|
311
340
|
scanned: pkg_count + cons_count,
|
|
312
341
|
units: 'profile(s)',
|
|
313
|
-
roots: ['src/agent-src/ghostwriter', 'agents/ghostwriter'],
|
|
342
|
+
roots: ['src/agent-src/ghostwriter', 'agents/reference/ghostwriter', 'agents/ghostwriter'],
|
|
314
343
|
});
|
|
315
344
|
} catch (exc) {
|
|
316
345
|
if (exc instanceof DeadScopeError) {
|
|
@@ -414,6 +443,9 @@ export {
|
|
|
414
443
|
REPO,
|
|
415
444
|
PACKAGE_DIR,
|
|
416
445
|
CONSUMER_DIR,
|
|
446
|
+
LEGACY_CONSUMER_DIR,
|
|
447
|
+
CONSUMER_DIRS,
|
|
448
|
+
consumer_profile_files,
|
|
417
449
|
ALLOWLIST,
|
|
418
450
|
EXEMPT_STEMS,
|
|
419
451
|
ALIAS_MIN_LEN,
|
|
@@ -36,6 +36,7 @@ import { assertScanned, DeadScopeError } from "./_lib/scan_scope.js";
|
|
|
36
36
|
import { asOf } from "./_lib/as_of.js";
|
|
37
37
|
import { parseHostLowering, type HostLowering } from "./hooks/host_lowering.js";
|
|
38
38
|
import { RE_ARM_EVENTS } from "./_lib/prefix_stable_surfaces.js";
|
|
39
|
+
import { EXECUTION_VIEW_GRANTS } from "./hooks/egress_stage.js";
|
|
39
40
|
|
|
40
41
|
// src/scripts/lint_hook_manifest.ts → two levels up is the repo root.
|
|
41
42
|
const REPO_ROOT = path.resolve(
|
|
@@ -826,6 +827,97 @@ export function _check_slot_answers(table: HostLowering, errors: string[]): void
|
|
|
826
827
|
}
|
|
827
828
|
}
|
|
828
829
|
|
|
830
|
+
/**
|
|
831
|
+
* Host fields that replace what a tool or the model receives. The tool-output
|
|
832
|
+
* name is assembled rather than spelled, because a test pins that no file under
|
|
833
|
+
* src/ names it until the egress stage emits it (road-to-placeholders-on-the-wire
|
|
834
|
+
* step 3.2); refusing the field is not emitting it.
|
|
835
|
+
*/
|
|
836
|
+
const HOST_REWRITE_FIELDS: readonly string[] = ["updatedInput", ["updated", "ToolOutput"].join("")];
|
|
837
|
+
const REWRITE_DECLARATION_KEYS: readonly string[] = ["rewrite", "rewrites"];
|
|
838
|
+
|
|
839
|
+
/**
|
|
840
|
+
* ADR-285 — one dispatcher stage is the only rewriter. A concern that declares
|
|
841
|
+
* a rewrite, or whose own script names a host rewrite field, is refused: two
|
|
842
|
+
* concerns rewriting one input have no composition answer, so none may try.
|
|
843
|
+
*/
|
|
844
|
+
function _check_no_concern_rewrites(manifest: YamlObject, errors: string[]): void {
|
|
845
|
+
const concernsRaw = manifest["concerns"];
|
|
846
|
+
if (!isObject(concernsRaw)) return;
|
|
847
|
+
for (const [name, spec] of Object.entries(concernsRaw)) {
|
|
848
|
+
if (!isObject(spec)) continue;
|
|
849
|
+
const declared = REWRITE_DECLARATION_KEYS.find((k) => spec[k] !== undefined);
|
|
850
|
+
if (declared !== undefined) {
|
|
851
|
+
errors.push(
|
|
852
|
+
`concerns.${name}: rewrite-concern-refused — declares '${declared}', but only the ` +
|
|
853
|
+
`dispatcher's egress stage may produce a rewrite (ADR-285)`,
|
|
854
|
+
);
|
|
855
|
+
}
|
|
856
|
+
const script = spec["script"];
|
|
857
|
+
if (typeof script !== "string") continue;
|
|
858
|
+
let source = "";
|
|
859
|
+
try {
|
|
860
|
+
source = fs.readFileSync(path.join(REPO_ROOT, script), "utf8");
|
|
861
|
+
} catch {
|
|
862
|
+
continue; // missing script is already reported by _check_concerns
|
|
863
|
+
}
|
|
864
|
+
// Code forms only — a key, a quoted name, a property read. A header that
|
|
865
|
+
// explains the field in backticks (rtk_wrap_hook does) produces nothing.
|
|
866
|
+
const field = HOST_REWRITE_FIELDS.find((f) =>
|
|
867
|
+
[`${f}:`, `'${f}'`, `"${f}"`, `.${f}`].some((form) => source.includes(form)),
|
|
868
|
+
);
|
|
869
|
+
if (field !== undefined) {
|
|
870
|
+
errors.push(
|
|
871
|
+
`concerns.${name}: rewrite-concern-refused — ${script} names the host rewrite ` +
|
|
872
|
+
`field '${field}'; only the dispatcher's egress stage may produce a rewrite (ADR-285)`,
|
|
873
|
+
);
|
|
874
|
+
}
|
|
875
|
+
}
|
|
876
|
+
}
|
|
877
|
+
|
|
878
|
+
/**
|
|
879
|
+
* The execution view is granted by the dispatcher's closed list, never
|
|
880
|
+
* requested. Refused: a concern declaring `payload_view: execution` off the
|
|
881
|
+
* list, a blocking concern the list omits (it would be served tokens instead
|
|
882
|
+
* of the value it guards), and a listed concern that is not blocking.
|
|
883
|
+
*/
|
|
884
|
+
function _check_execution_view_grants(manifest: YamlObject, errors: string[]): void {
|
|
885
|
+
const concernsRaw = manifest["concerns"];
|
|
886
|
+
if (!isObject(concernsRaw)) return;
|
|
887
|
+
for (const [name, spec] of Object.entries(concernsRaw)) {
|
|
888
|
+
if (!isObject(spec)) continue;
|
|
889
|
+
const view = spec["payload_view"];
|
|
890
|
+
const granted = EXECUTION_VIEW_GRANTS.has(name);
|
|
891
|
+
const blocking = spec["severity"] === "blocking";
|
|
892
|
+
if (view !== undefined && view !== "execution" && view !== "placeholder") {
|
|
893
|
+
errors.push(`concerns.${name}: 'payload_view' must be execution or placeholder, got ${JSON.stringify(view)}`);
|
|
894
|
+
} else if (view === "execution" && !granted) {
|
|
895
|
+
errors.push(
|
|
896
|
+
`concerns.${name}: execution-view-not-granted — declares 'payload_view: execution' but is not on ` +
|
|
897
|
+
`EXECUTION_VIEW_GRANTS in src/scripts/hooks/egress_stage.ts; a declaration grants nothing`,
|
|
898
|
+
);
|
|
899
|
+
}
|
|
900
|
+
if (blocking && !granted) {
|
|
901
|
+
errors.push(
|
|
902
|
+
`concerns.${name}: execution-view-not-granted — severity: blocking but missing from ` +
|
|
903
|
+
`EXECUTION_VIEW_GRANTS; under protect it would be served placeholder tokens instead of the values it guards`,
|
|
904
|
+
);
|
|
905
|
+
} else if (granted && !blocking) {
|
|
906
|
+
errors.push(
|
|
907
|
+
`concerns.${name}: execution-view-not-granted — on EXECUTION_VIEW_GRANTS but not severity: blocking; ` +
|
|
908
|
+
`the execution view is for concerns that decide whether a call runs`,
|
|
909
|
+
);
|
|
910
|
+
}
|
|
911
|
+
if (granted && spec["script"] !== EXECUTION_VIEW_GRANTS.get(name)) {
|
|
912
|
+
errors.push(
|
|
913
|
+
`concerns.${name}: execution-view-not-granted — the grant is bound to ` +
|
|
914
|
+
`${String(EXECUTION_VIEW_GRANTS.get(name))}, but the manifest runs ${JSON.stringify(spec["script"])}; ` +
|
|
915
|
+
`the dispatcher will serve it the placeholder view`,
|
|
916
|
+
);
|
|
917
|
+
}
|
|
918
|
+
}
|
|
919
|
+
}
|
|
920
|
+
|
|
829
921
|
export function lint(
|
|
830
922
|
manifestPath: string,
|
|
831
923
|
strict: boolean,
|
|
@@ -858,6 +950,8 @@ export function lint(
|
|
|
858
950
|
const concernNames = _check_concerns(manifest, errors);
|
|
859
951
|
const bound = _check_platforms(manifest, concernNames, errors, warnings);
|
|
860
952
|
_check_guard_payload_bodies(manifest, errors);
|
|
953
|
+
_check_no_concern_rewrites(manifest, errors);
|
|
954
|
+
_check_execution_view_grants(manifest, errors);
|
|
861
955
|
_check_roles(manifest, concernNames, errors);
|
|
862
956
|
_check_aliases(manifest, errors);
|
|
863
957
|
_check_orphan_trampolines(manifest, errors);
|
|
@@ -97,6 +97,10 @@ function load_hook_commands(hooks_path: string): Array<[string, string]> {
|
|
|
97
97
|
|
|
98
98
|
/** Pull the agent-config subcommand out of a hooks.json command line. */
|
|
99
99
|
function extract_subcommand(command_line: string): string | null {
|
|
100
|
+
// What `echo` or `printf` prints is not what the line runs: the
|
|
101
|
+
// no-dispatcher branch echoes prose that names "agent-config hook". A
|
|
102
|
+
// quoted string a shell executes, as in `sh -c '…'`, is left to match.
|
|
103
|
+
command_line = command_line.replace(/\b(echo|printf)((?:\s+(?:-\w+|'[^']*'))+)/g, (_m, verb: string) => verb);
|
|
100
104
|
const m = _CMD_RE.exec(command_line);
|
|
101
105
|
if (m) {
|
|
102
106
|
return m[1] as string;
|
|
@@ -23,6 +23,7 @@ import * as path from 'node:path';
|
|
|
23
23
|
import * as fs from 'node:fs';
|
|
24
24
|
import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
25
25
|
|
|
26
|
+
import { detect } from './_lib/egress_rules.js';
|
|
26
27
|
import * as sl from './_lib/security_lint.js';
|
|
27
28
|
import { assertScanned, DeadScopeError } from './_lib/scan_scope.js';
|
|
28
29
|
|
|
@@ -31,16 +32,13 @@ export const CHECK = 'mcp-config-security';
|
|
|
31
32
|
// Python: re.compile(r"(^|/)(\.mcp\.json|mcp\.json|claude_desktop_config\.json)")
|
|
32
33
|
const _NAME_HINTS = /(^|\/)(\.mcp\.json|mcp\.json|claude_desktop_config\.json)/;
|
|
33
34
|
|
|
34
|
-
// Real secret VALUES
|
|
35
|
-
//
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
'|ghp_[0-9A-Za-z]{36}' +
|
|
42
|
-
'|eyJ[A-Za-z0-9_\\-]{10,}\\.[A-Za-z0-9_\\-]{10,}\\.[A-Za-z0-9_\\-]{10,}',
|
|
43
|
-
);
|
|
35
|
+
// Real secret VALUES — detected by the one rule table, which owns every
|
|
36
|
+
// credential pattern (road-to-one-detector-and-the-senders-we-own 2.2). The
|
|
37
|
+
// heuristic keyword assignment is not a structural credential and never was HIGH
|
|
38
|
+
// here; this lint's HIGH tier stays the structural rows.
|
|
39
|
+
export function hasInlineSecret(text: string): boolean {
|
|
40
|
+
return detect(text).some((span) => span.class === 'credential' && span.rule !== 'generic-assignment');
|
|
41
|
+
}
|
|
44
42
|
|
|
45
43
|
// Line-level smells (match on a single line).
|
|
46
44
|
const _MED: ReadonlyArray<[RegExp, string]> = [
|
|
@@ -135,7 +133,7 @@ export function _scan(sf: sl.ScannedFile): sl.Finding[] {
|
|
|
135
133
|
const out: sl.Finding[] = [];
|
|
136
134
|
for (const [start, numbered] of _candidate_chunks(sf)) {
|
|
137
135
|
for (const [lineno, text] of numbered) {
|
|
138
|
-
if (
|
|
136
|
+
if (hasInlineSecret(text)) {
|
|
139
137
|
out.push(
|
|
140
138
|
new sl.Finding(
|
|
141
139
|
sf.rel,
|
|
@@ -325,6 +325,33 @@ interface Allowed {
|
|
|
325
325
|
|
|
326
326
|
const norm = (s: string): string => s.replace(/\s+/g, ' ').trim();
|
|
327
327
|
|
|
328
|
+
/**
|
|
329
|
+
* The reviewed statements, one verdict each.
|
|
330
|
+
*
|
|
331
|
+
* THE AUTHORITY IS NOT IN THIS TABLE, AND THAT IS THE DESIGN. The table is what
|
|
332
|
+
* the five DEPENDENTS are checked against; `design-patterns.md` § Motion is the
|
|
333
|
+
* thing they are compared TO, so it is PARSED — bands, ceiling, both curves —
|
|
334
|
+
* and never passed to {@link checkStatement}. A row keyed to it would be inert,
|
|
335
|
+
* and an inert row reads as enforcement.
|
|
336
|
+
*
|
|
337
|
+
* Measured 2026-10-11, when § Motion gained step 6b (the SVG mechanisms): of
|
|
338
|
+
* the 49 lines the authority gained, {@link carriesMotionValue} flags two when
|
|
339
|
+
* applied to them directly, and this gate reads neither, because neither
|
|
340
|
+
* reaches the scan path. Both verdicts are `permitted`, recorded here rather
|
|
341
|
+
* than left to be rediscovered by whoever next widens the scanned set:
|
|
342
|
+
*
|
|
343
|
+
* · "Step 2's bounce prohibition already rules the intent out" — a deferral
|
|
344
|
+
* to the prohibition, not a curve. The `keySplines` bullet states which
|
|
345
|
+
* values the MECHANISM accepts; step 2 still owns whether to want one.
|
|
346
|
+
* · "All of them still obey step 3's bands, step 2's single `ease-out` curve"
|
|
347
|
+
* — the authority naming its own curve, in a sentence widened from the six
|
|
348
|
+
* HTML mechanisms to those plus the SVG ones. No band, curve or duration
|
|
349
|
+
* moved with it.
|
|
350
|
+
*
|
|
351
|
+
* If the authority is ever added to the scanned set, those two are the rows it
|
|
352
|
+
* needs on day one — and every band line in § Motion needs one too, which is
|
|
353
|
+
* the cost that keeps it parsed instead.
|
|
354
|
+
*/
|
|
328
355
|
export const PROSE_ALLOWLIST: readonly Allowed[] = [
|
|
329
356
|
{
|
|
330
357
|
file: CHECKLIST_REL, key: 'table:7',
|