@event4u/agent-config 16.5.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 +463 -498
- package/CONTRIBUTING.md +47 -0
- package/README.md +25 -25
- package/dist/agent-src/commands/{design.md → agent-design.md} +10 -6
- 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 +5 -0
- 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 +1 -1
- 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/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 +12 -2
- 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 +14 -14
- 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 +16 -2
- 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/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/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 +9 -3
- 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 +7 -1
- 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/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 +72 -17
- package/dist/cli/commands/uiRenderAsset.js +10 -2
- package/dist/cli/commands/uiRenderAssetFonts.js +158 -0
- package/dist/cli/commands/uiRenderAssetTypes.js +8 -20
- package/dist/cli/initRouting.js +1 -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 +4 -1
- 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-TMWYUOK4.js → chunk-2CX7NWRB.js} +224 -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 +483 -817
- 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 +373 -190
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +5 -5
- package/dist/discovery/dormancy-report.md +1 -1
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +21 -16
- package/dist/discovery/trust-report.md +3 -3
- package/dist/discovery/workspaces.json +16 -11
- package/dist/hooks/chat_history.chunk.cjs +6852 -0
- package/dist/hooks/chat_history.chunk.cjs.sha256 +1 -0
- package/dist/hooks/dispatch.js +17506 -18692
- 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 +281 -49
- package/dist/hooks/svg_rules.chunk.cjs.sha256 +1 -1
- 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 +9831 -5546
- 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/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_filled_counter.js +285 -0
- package/dist/scripts/_lib/svg_rules.js +2 -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/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 +5 -0
- 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 +13 -4
- 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 +26 -22
- 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 +93 -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_filled_counter.ts +287 -0
- package/src/scripts/_lib/svg_rules.ts +2 -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/verify_clause.ts +4 -2
- 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 +38 -7
- 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 +42 -10
- 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 +75 -19
- package/src/scripts/hooks/tool_result_bytes_hook.ts +14 -5
- package/src/scripts/hooks/turn_end_gate_hook.ts +1 -1
- 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 +144 -16
- 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_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_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_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-4DBG5K7M.js +0 -1123
- 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-OAFSJBHH.js +0 -272
- package/dist/ui/assets/index-C3djEJah.js +0 -23
- package/src/scripts/_lib/continuation_ladder.ts +0 -335
- package/src/scripts/hooks/run_continuation_hook.ts +0 -1524
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claim-phrase registry for `check_voice_lexicon` (brand-checkability roadmap 5.3).
|
|
3
|
+
*
|
|
4
|
+
* Static, literal, multi-word PHRASES — never bare words. A single word such as
|
|
5
|
+
* "only" or "best" is ordinary prose far too often to mean a claim (NG-10); a
|
|
6
|
+
* phrase like "industry-leading" or "the number one platform" is a claim that
|
|
7
|
+
* needs a proof. A hit is advisory: the finding says "needs proof", never
|
|
8
|
+
* "unlawful".
|
|
9
|
+
*
|
|
10
|
+
* PRE-REGISTERED: this list was frozen before each measurement. v1 missed the
|
|
11
|
+
* bar on `tests/fixtures/voice-lexicon/negative-corpus.txt`; v2 drops the four
|
|
12
|
+
* English single-word entries NG-10 already excludes and is measured on
|
|
13
|
+
* `negative-corpus-v2.txt`, a corpus it was not revised against (bar ≤ 0.1 hits
|
|
14
|
+
* per 10k words). Changing it re-opens the measurement.
|
|
15
|
+
*
|
|
16
|
+
* German phrases run at `hint` severity until a German negative corpus is
|
|
17
|
+
* registered (E5, 5.3).
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
export type ClaimClass = 'superlative' | 'comparative' | 'absolute' | 'certification' | 'guarantee';
|
|
21
|
+
|
|
22
|
+
export interface ClaimPhrase {
|
|
23
|
+
phrase: string;
|
|
24
|
+
cls: ClaimClass;
|
|
25
|
+
language: 'en' | 'de';
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
const en = (cls: ClaimClass, ...phrases: string[]): ClaimPhrase[] =>
|
|
29
|
+
phrases.map((phrase) => ({ phrase, cls, language: 'en' as const }));
|
|
30
|
+
const de = (cls: ClaimClass, ...phrases: string[]): ClaimPhrase[] =>
|
|
31
|
+
phrases.map((phrase) => ({ phrase, cls, language: 'de' as const }));
|
|
32
|
+
|
|
33
|
+
export const CLAIM_PHRASES: readonly ClaimPhrase[] = [
|
|
34
|
+
...en(
|
|
35
|
+
'superlative',
|
|
36
|
+
'number one',
|
|
37
|
+
'no. 1',
|
|
38
|
+
"world's best",
|
|
39
|
+
"world's leading",
|
|
40
|
+
'world-leading',
|
|
41
|
+
'world-class',
|
|
42
|
+
'industry-leading',
|
|
43
|
+
'industry leading',
|
|
44
|
+
'market-leading',
|
|
45
|
+
'market leader',
|
|
46
|
+
'best-in-class',
|
|
47
|
+
'best in class',
|
|
48
|
+
'best-of-breed',
|
|
49
|
+
'the leading provider',
|
|
50
|
+
'the leading platform',
|
|
51
|
+
'second to none',
|
|
52
|
+
),
|
|
53
|
+
...en(
|
|
54
|
+
'comparative',
|
|
55
|
+
'faster than any',
|
|
56
|
+
'better than any',
|
|
57
|
+
'cheaper than any',
|
|
58
|
+
'more secure than any',
|
|
59
|
+
'outperforms all',
|
|
60
|
+
'outperforms every',
|
|
61
|
+
'beats every',
|
|
62
|
+
),
|
|
63
|
+
...en('absolute', 'never fails', 'zero downtime', '100% secure', '100% uptime', '100% accurate', 'completely secure'),
|
|
64
|
+
...en('certification', 'officially certified', 'award-winning', 'award winning', 'clinically proven', 'scientifically proven'),
|
|
65
|
+
...en('guarantee', 'guaranteed results', 'guaranteed to work', 'we guarantee', 'money-back guarantee', 'risk-free'),
|
|
66
|
+
...de('superlative', 'nummer eins', 'marktführer', 'weltweit führend', 'branchenführend', 'unschlagbar', 'unübertroffen'),
|
|
67
|
+
...de('comparative', 'schneller als jede', 'besser als jede', 'günstiger als jede'),
|
|
68
|
+
...de('absolute', '100 % sicher', '100% sicher', 'absolut sicher', 'null ausfallzeit'),
|
|
69
|
+
...de('certification', 'preisgekrönt', 'klinisch bewiesen', 'wissenschaftlich bewiesen'),
|
|
70
|
+
...de('guarantee', 'garantiert', 'geld-zurück-garantie', 'risikofrei'),
|
|
71
|
+
];
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `classifyUpdate` — what an update from `installed` to `candidate` should do on
|
|
3
|
+
* this machine: install it (`auto`), ask first (`ask`), tell the user (`notify`),
|
|
4
|
+
* nothing (`none`), or `action` — this machine cannot run the candidate until the
|
|
5
|
+
* user changes it (its `engines.node`), so it is never installed, not even on an
|
|
6
|
+
* approval. Every verdict carries the reasons that produced it.
|
|
7
|
+
*
|
|
8
|
+
* Pure by contract: no filesystem, no network, no process state. The caller
|
|
9
|
+
* gathers the inputs — the cached registry document, the running Node version, the
|
|
10
|
+
* install origin `classify_install_origin` already detects — and this only
|
|
11
|
+
* decides. `doctor --json` reports the verdict read-only (`update_verdict`), the surface it is
|
|
12
|
+
* meant to be reported on.
|
|
13
|
+
*
|
|
14
|
+
* The one invariant everything else serves: uncertainty of any kind never
|
|
15
|
+
* resolves to `auto`.
|
|
16
|
+
*/
|
|
17
|
+
import { CONSUMER_IMPACT_VALUES, type ConsumerImpact } from './consumer_impact';
|
|
18
|
+
import type { InstallOrigin as RunningOrigin } from './update_check';
|
|
19
|
+
import { compare_versions, node_engine_satisfied, parse_version } from './version_order';
|
|
20
|
+
|
|
21
|
+
export type UpdateAction = 'auto' | 'ask' | 'notify' | 'none' | 'action';
|
|
22
|
+
/** The running install as `classify_install_origin` reports it, plus a source checkout. */
|
|
23
|
+
export type InstallOrigin = RunningOrigin | 'source-checkout';
|
|
24
|
+
export type UpdateMode = 'off' | 'notify' | 'ask' | 'auto';
|
|
25
|
+
|
|
26
|
+
export interface ClassifyUpdateInput {
|
|
27
|
+
readonly installed: string;
|
|
28
|
+
readonly candidate: string;
|
|
29
|
+
readonly origin: InstallOrigin;
|
|
30
|
+
readonly env: {
|
|
31
|
+
readonly ci: boolean;
|
|
32
|
+
readonly interactive: boolean;
|
|
33
|
+
readonly noUpdateCheck: boolean;
|
|
34
|
+
/** The Node version of the machine the update would run on, `v`-prefixed. */
|
|
35
|
+
readonly nodeVersion: string;
|
|
36
|
+
/** ISO-8601 instant the decision is made at. */
|
|
37
|
+
readonly now: string;
|
|
38
|
+
};
|
|
39
|
+
/** The `agentConfig.impact` block of the candidate's registry document — untrusted. */
|
|
40
|
+
readonly impactMap: unknown;
|
|
41
|
+
/** The candidate's `engines` block — untrusted. */
|
|
42
|
+
readonly engines: unknown;
|
|
43
|
+
readonly publishedAt: string | null;
|
|
44
|
+
readonly deprecated: unknown;
|
|
45
|
+
/** True only when the registry document carried a provenance attestation. */
|
|
46
|
+
readonly provenance: boolean | null;
|
|
47
|
+
readonly settings: {
|
|
48
|
+
readonly mode?: UpdateMode | undefined;
|
|
49
|
+
readonly projectPin?: string | null;
|
|
50
|
+
readonly minReleaseAgeHours?: number;
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export interface UpdateVerdict {
|
|
55
|
+
readonly action: UpdateAction;
|
|
56
|
+
readonly reasons: readonly string[];
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
interface RangeImpact {
|
|
60
|
+
readonly forged: string | null;
|
|
61
|
+
readonly worst: ConsumerImpact | null;
|
|
62
|
+
readonly security: boolean;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
function read_impact_range(map: unknown, installed: string, candidate: string): RangeImpact | null {
|
|
66
|
+
if (map === null || map === undefined) return null;
|
|
67
|
+
if (typeof map !== 'object' || Array.isArray(map)) {
|
|
68
|
+
return { forged: 'impact map is not an object', worst: null, security: false };
|
|
69
|
+
}
|
|
70
|
+
const rank = (i: ConsumerImpact): number => CONSUMER_IMPACT_VALUES.indexOf(i);
|
|
71
|
+
let worst: ConsumerImpact | null = null;
|
|
72
|
+
let security = false;
|
|
73
|
+
for (const [version, entry] of Object.entries(map as Record<string, unknown>)) {
|
|
74
|
+
if (parse_version(version) === null) return { forged: `impact map key '${version}' is not a version`, worst, security };
|
|
75
|
+
if (entry === null || typeof entry !== 'object') {
|
|
76
|
+
return { forged: `impact map entry ${version} is not an object`, worst, security };
|
|
77
|
+
}
|
|
78
|
+
const impact = (entry as Record<string, unknown>)['impact'];
|
|
79
|
+
if (!(CONSUMER_IMPACT_VALUES as readonly unknown[]).includes(impact)) {
|
|
80
|
+
return { forged: `impact map entry ${version} has impact '${String(impact)}'`, worst, security };
|
|
81
|
+
}
|
|
82
|
+
if (compare_versions(version, installed) !== 1 || compare_versions(version, candidate) === 1) continue;
|
|
83
|
+
if (worst === null || rank(impact as ConsumerImpact) > rank(worst)) worst = impact as ConsumerImpact;
|
|
84
|
+
security = security || (entry as Record<string, unknown>)['security'] === true;
|
|
85
|
+
}
|
|
86
|
+
return { forged: null, worst, security };
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* The local machine overrides the published map: a candidate whose
|
|
91
|
+
* `engines.node` this runtime does not satisfy — or that cannot be checked —
|
|
92
|
+
* is `action` here whatever the map says. No `engines.node` at all, or a
|
|
93
|
+
* prerelease runtime, is an unknown, not an override.
|
|
94
|
+
*/
|
|
95
|
+
export function machine_override(
|
|
96
|
+
engines: unknown,
|
|
97
|
+
nodeVersion: string,
|
|
98
|
+
): { impact: 'action'; reason: string } | { impact: null; reason: string | null } {
|
|
99
|
+
const range = engines !== null && typeof engines === 'object' ? (engines as Record<string, unknown>)['node'] : undefined;
|
|
100
|
+
if (range === undefined) return { impact: null, reason: 'candidate declares no engines.node' };
|
|
101
|
+
if ((parse_version(nodeVersion)?.pre.length ?? 0) > 0) return { impact: null, reason: `running Node ${nodeVersion} is a prerelease` };
|
|
102
|
+
const ok = node_engine_satisfied(range, nodeVersion);
|
|
103
|
+
if (ok === true) return { impact: null, reason: null };
|
|
104
|
+
const why = ok === false ? 'is not satisfied by' : 'cannot be checked against';
|
|
105
|
+
return { impact: 'action', reason: `engines.node '${String(range)}' ${why} ${nodeVersion}` };
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
function suppression(input: ClassifyUpdateInput): string | null {
|
|
109
|
+
if (input.env.ci) return 'suppressed: CI';
|
|
110
|
+
if (!input.env.interactive) return 'suppressed: non-interactive';
|
|
111
|
+
if (input.origin === 'source-checkout') return 'suppressed: source checkout';
|
|
112
|
+
if (input.origin === 'ephemeral') return 'suppressed: ephemeral npx run has nothing to update';
|
|
113
|
+
if (input.env.noUpdateCheck) return 'suppressed: AGENT_CONFIG_NO_UPDATE_CHECK=1';
|
|
114
|
+
if (input.settings.mode === 'off') return 'suppressed: mode off';
|
|
115
|
+
return null;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
export function classifyUpdate(input: ClassifyUpdateInput): UpdateVerdict {
|
|
119
|
+
const suppressed = suppression(input);
|
|
120
|
+
if (suppressed !== null) return { action: 'none', reasons: [suppressed] };
|
|
121
|
+
|
|
122
|
+
const order = compare_versions(input.candidate, input.installed);
|
|
123
|
+
if (order === null) return { action: 'none', reasons: ['unparseable version: no action'] };
|
|
124
|
+
if (order !== 1) return { action: 'none', reasons: [`candidate ${input.candidate} is not newer than ${input.installed}`] };
|
|
125
|
+
|
|
126
|
+
const ask: string[] = [];
|
|
127
|
+
const uncertain: string[] = [];
|
|
128
|
+
|
|
129
|
+
const local = machine_override(input.engines, input.env.nodeVersion);
|
|
130
|
+
if (local.impact === 'action') return { action: 'action', reasons: [local.reason] };
|
|
131
|
+
if (local.reason !== null) uncertain.push(local.reason);
|
|
132
|
+
|
|
133
|
+
const range = read_impact_range(input.impactMap, input.installed, input.candidate);
|
|
134
|
+
const security = range?.security === true;
|
|
135
|
+
const waits: string[] = [];
|
|
136
|
+
if (input.deprecated === true || (typeof input.deprecated === 'string' && input.deprecated !== '')) {
|
|
137
|
+
waits.push('wait: candidate is deprecated');
|
|
138
|
+
}
|
|
139
|
+
const gateHours = input.settings.minReleaseAgeHours ?? 0;
|
|
140
|
+
// `NaN > 0` is false, so an unreadable gate would otherwise read as no gate.
|
|
141
|
+
if (!Number.isFinite(gateHours)) uncertain.push('release-age gate is not a number');
|
|
142
|
+
else if (gateHours > 0) {
|
|
143
|
+
const published = input.publishedAt === null ? NaN : Date.parse(input.publishedAt);
|
|
144
|
+
const now = Date.parse(input.env.now);
|
|
145
|
+
if (Number.isNaN(published) || Number.isNaN(now)) uncertain.push('publish time unknown under a release-age gate');
|
|
146
|
+
else if (now - published < gateHours * 3_600_000) waits.push(`wait: published less than ${gateHours} h ago`);
|
|
147
|
+
}
|
|
148
|
+
if (waits.length > 0) {
|
|
149
|
+
return security ? { action: 'notify', reasons: [...waits, 'security fix in range'] } : { action: 'none', reasons: waits };
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
if (range === null) uncertain.push('impact map unavailable');
|
|
153
|
+
else if (range.forged !== null) ask.push(`untrusted impact map: ${range.forged}`);
|
|
154
|
+
else if (range.worst === 'action') ask.push('a release in range needs consumer action');
|
|
155
|
+
if (ask.length > 0) return { action: 'ask', reasons: ask };
|
|
156
|
+
|
|
157
|
+
const notify: string[] = [];
|
|
158
|
+
if (range?.worst === 'notice') notify.push('a release in range carries a notice');
|
|
159
|
+
if (security) notify.push('security fix in range');
|
|
160
|
+
if (input.provenance !== true) uncertain.push('provenance attestation missing');
|
|
161
|
+
if (input.settings.projectPin) uncertain.push(`project pins ${input.settings.projectPin}`);
|
|
162
|
+
else if (input.origin === 'project-pin') uncertain.push('install is pinned by the project');
|
|
163
|
+
if (input.origin === 'unknown') uncertain.push('install origin unknown');
|
|
164
|
+
if (parse_version(input.candidate)!.pre.length > 0) uncertain.push('candidate is a prerelease');
|
|
165
|
+
if (input.settings.mode === undefined) uncertain.push('update mode not set');
|
|
166
|
+
|
|
167
|
+
const blocking = [...uncertain, ...(range?.worst === 'notice' ? notify : [])];
|
|
168
|
+
if (blocking.length > 0) return { action: 'notify', reasons: [...uncertain, ...notify] };
|
|
169
|
+
if (input.settings.mode !== 'auto') return { action: 'notify', reasons: [`mode ${input.settings.mode} does not install`, ...notify] };
|
|
170
|
+
return { action: 'auto', reasons: ['every input known and no release in range needs a hand', ...notify] };
|
|
171
|
+
}
|
|
@@ -19,10 +19,12 @@
|
|
|
19
19
|
// registration with `user-invocable: false` (Claude may still load it
|
|
20
20
|
// automatically; the built-in keeps the `/name`).
|
|
21
21
|
//
|
|
22
|
-
// Source: https://code.claude.com/docs/en/commands (fetched 2026-07-10),
|
|
23
|
-
//
|
|
24
|
-
//
|
|
25
|
-
//
|
|
22
|
+
// Source: https://code.claude.com/docs/en/commands (fetched 2026-07-10), the
|
|
23
|
+
// design family read offline from host 2.1.301 (2026-10-16), plus a small
|
|
24
|
+
// legacy set still present in older Claude Code versions.
|
|
25
|
+
// Refresh trigger: a package artefact stops appearing in Claude Code, a
|
|
26
|
+
// release-notes entry adds a new built-in command, or the pinned host fixture
|
|
27
|
+
// `tests/fixtures/host-builtins/<version>.json` is re-read at a newer host.
|
|
26
28
|
|
|
27
29
|
const _CURRENT = [
|
|
28
30
|
'add-dir',
|
|
@@ -47,7 +49,10 @@ const _CURRENT = [
|
|
|
47
49
|
'dataviz',
|
|
48
50
|
'debug',
|
|
49
51
|
'deep-research',
|
|
52
|
+
'design',
|
|
53
|
+
'design-consent',
|
|
50
54
|
'design-login',
|
|
55
|
+
'design-revoke',
|
|
51
56
|
'design-sync',
|
|
52
57
|
'desktop',
|
|
53
58
|
'diff',
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Where agent-config's Claude hooks are registered, which runtime they would
|
|
3
|
+
* reach right now, and which of four states that adds up to.
|
|
4
|
+
*
|
|
5
|
+
* `hooks:status` used to answer from one file: `<project>/.claude/settings.json`.
|
|
6
|
+
* Claude Code merges that file with `~/.claude/settings.json`, and a global
|
|
7
|
+
* install registers its hooks in the second, so a working global install read
|
|
8
|
+
* "missing" from any project without its own settings file — every fresh
|
|
9
|
+
* worktree. The same check also read "installed" for a project settings file
|
|
10
|
+
* that merely existed, whatever hooks it carried, foreign ones included.
|
|
11
|
+
*
|
|
12
|
+
* Read-only and never throws: the post-install smoke probe runs this, and a
|
|
13
|
+
* malformed settings file must degrade the report, not abort it.
|
|
14
|
+
*/
|
|
15
|
+
import * as fs from 'node:fs';
|
|
16
|
+
import * as path from 'node:path';
|
|
17
|
+
|
|
18
|
+
import { MANAGED_SIGNATURE } from './claude_settings_hooks.js';
|
|
19
|
+
|
|
20
|
+
export type ClaudeHookState = 'not-installed' | 'installed-not-executable' | 'executable' | 'observed-at-runtime';
|
|
21
|
+
|
|
22
|
+
/** The dispatcher a hook command would reach, in the order the command tries them. */
|
|
23
|
+
export type ClaudeHookRuntime = 'staged' | 'path-cli' | 'none';
|
|
24
|
+
|
|
25
|
+
export interface ClaudeHookScope {
|
|
26
|
+
registered_in: Array<'global' | 'project'>;
|
|
27
|
+
/** Commands carrying the managed signature; foreign commands are never counted here. */
|
|
28
|
+
managed_commands: { global: number; project: number };
|
|
29
|
+
foreign_commands: { global: number; project: number };
|
|
30
|
+
runtime: ClaudeHookRuntime;
|
|
31
|
+
runtime_version: string | null;
|
|
32
|
+
/** Set when the runtime that wins is OLDER than the source checkout it serves. */
|
|
33
|
+
version_skew: string | null;
|
|
34
|
+
state: ClaudeHookState;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export interface ClaudeHookScopeInput {
|
|
38
|
+
projectRoot: string;
|
|
39
|
+
home: string;
|
|
40
|
+
/** `<event4u root>/runtime` — where the staged runtime and carrier.json live. */
|
|
41
|
+
runtimeRoot: string;
|
|
42
|
+
/** The PATH to search for a global `agent-config`. */
|
|
43
|
+
pathEnv: string;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
function readJson(file: string): unknown {
|
|
47
|
+
try {
|
|
48
|
+
return JSON.parse(fs.readFileSync(file, 'utf8'));
|
|
49
|
+
} catch {
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function isObject(v: unknown): v is Record<string, unknown> {
|
|
55
|
+
return typeof v === 'object' && v !== null && !Array.isArray(v);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/** Managed and foreign command counts in one settings file. */
|
|
59
|
+
function countCommands(file: string): { managed: number; foreign: number } {
|
|
60
|
+
const out = { managed: 0, foreign: 0 };
|
|
61
|
+
const doc = readJson(file);
|
|
62
|
+
const hooks = isObject(doc) ? doc['hooks'] : null;
|
|
63
|
+
if (!isObject(hooks)) return out;
|
|
64
|
+
for (const groups of Object.values(hooks)) {
|
|
65
|
+
if (!Array.isArray(groups)) continue;
|
|
66
|
+
for (const group of groups) {
|
|
67
|
+
const entries = isObject(group) ? group['hooks'] : null;
|
|
68
|
+
if (!Array.isArray(entries)) continue;
|
|
69
|
+
for (const h of entries) {
|
|
70
|
+
const cmd = isObject(h) ? h['command'] : null;
|
|
71
|
+
if (typeof cmd !== 'string') continue;
|
|
72
|
+
if (cmd.includes(MANAGED_SIGNATURE)) out.managed += 1;
|
|
73
|
+
else out.foreign += 1;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return out;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
function exists(p: string): boolean {
|
|
81
|
+
try {
|
|
82
|
+
fs.accessSync(p);
|
|
83
|
+
return true;
|
|
84
|
+
} catch {
|
|
85
|
+
return false;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
function executable(p: string): boolean {
|
|
90
|
+
try {
|
|
91
|
+
fs.accessSync(p, fs.constants.X_OK);
|
|
92
|
+
return fs.statSync(p).isFile();
|
|
93
|
+
} catch {
|
|
94
|
+
return false;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
function versionAt(pkgDir: string): string | null {
|
|
99
|
+
const doc = readJson(path.join(pkgDir, 'package.json'));
|
|
100
|
+
const v = isObject(doc) ? doc['version'] : null;
|
|
101
|
+
return typeof v === 'string' ? v : null;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/** Numeric dotted-version compare; a non-numeric part compares as 0. */
|
|
105
|
+
function olderThan(a: string, b: string): boolean {
|
|
106
|
+
const pa = a.split(/[.-]/).map((x) => Number.parseInt(x, 10) || 0);
|
|
107
|
+
const pb = b.split(/[.-]/).map((x) => Number.parseInt(x, 10) || 0);
|
|
108
|
+
for (let i = 0; i < Math.max(pa.length, pb.length); i += 1) {
|
|
109
|
+
const d = (pa[i] ?? 0) - (pb[i] ?? 0);
|
|
110
|
+
if (d !== 0) return d < 0;
|
|
111
|
+
}
|
|
112
|
+
return false;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* The runtime the installed hook command reaches, tried in the SAME order as
|
|
117
|
+
* `build_claude_hook_matrix` — a status that resolved in a different order
|
|
118
|
+
* would report a runtime the hooks never use. That command trusts only two:
|
|
119
|
+
* the staged runtime, then an `agent-config` on PATH whose path is absolute and
|
|
120
|
+
* outside the project. Nothing inside the project counts, however runnable.
|
|
121
|
+
*/
|
|
122
|
+
function resolveRuntime(input: ClaudeHookScopeInput): { runtime: ClaudeHookRuntime; version: string | null } {
|
|
123
|
+
const { projectRoot, runtimeRoot, pathEnv } = input;
|
|
124
|
+
const current = path.join(runtimeRoot, 'current');
|
|
125
|
+
let nodePath = '';
|
|
126
|
+
try {
|
|
127
|
+
nodePath = fs.readFileSync(path.join(current, 'node'), 'utf8').trim();
|
|
128
|
+
} catch {
|
|
129
|
+
nodePath = '';
|
|
130
|
+
}
|
|
131
|
+
if (nodePath !== '' && executable(nodePath) && exists(path.join(current, 'dist', 'hooks', 'dispatch.js'))) {
|
|
132
|
+
return { runtime: 'staged', version: versionAt(current) };
|
|
133
|
+
}
|
|
134
|
+
const cli = firstOnPath('agent-config', pathEnv);
|
|
135
|
+
if (cli !== null && path.isAbsolute(cli) && !insideDir(cli, projectRoot)) return { runtime: 'path-cli', version: null };
|
|
136
|
+
return { runtime: 'none', version: null };
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/** `command -v` reads the first PATH hit, so only that one decides. */
|
|
140
|
+
function firstOnPath(name: string, pathEnv: string): string | null {
|
|
141
|
+
for (const dir of pathEnv.split(path.delimiter)) {
|
|
142
|
+
if (dir === '') continue;
|
|
143
|
+
const p = path.join(dir, name);
|
|
144
|
+
if (executable(p)) return p;
|
|
145
|
+
}
|
|
146
|
+
return null;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
function insideDir(p: string, dir: string): boolean {
|
|
150
|
+
const rel = path.relative(path.resolve(dir), path.resolve(p));
|
|
151
|
+
return rel !== '' && !rel.startsWith('..') && !path.isAbsolute(rel);
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
function observedReached(runtimeRoot: string): boolean {
|
|
155
|
+
const doc = readJson(path.join(runtimeRoot, 'carrier.json'));
|
|
156
|
+
const hosts = isObject(doc) ? doc['hosts'] : null;
|
|
157
|
+
const claude = isObject(hosts) ? hosts['claude'] : null;
|
|
158
|
+
return isObject(claude) && claude['outcome'] === 'reached';
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
export function claudeHookScope(input: ClaudeHookScopeInput): ClaudeHookScope {
|
|
162
|
+
const global = countCommands(path.join(input.home, '.claude', 'settings.json'));
|
|
163
|
+
const project = countCommands(path.join(input.projectRoot, '.claude', 'settings.json'));
|
|
164
|
+
const registered_in: Array<'global' | 'project'> = [];
|
|
165
|
+
if (global.managed > 0) registered_in.push('global');
|
|
166
|
+
if (project.managed > 0) registered_in.push('project');
|
|
167
|
+
|
|
168
|
+
const { runtime, version } = resolveRuntime(input);
|
|
169
|
+
|
|
170
|
+
// A source checkout served by an OLDER staged or global runtime runs the old
|
|
171
|
+
// guards while the maintainer edits the new ones. Surfaced, never enforced
|
|
172
|
+
// here: a status report that refused would hide the very thing it reports.
|
|
173
|
+
let version_skew: string | null = null;
|
|
174
|
+
const isSource = exists(path.join(input.projectRoot, 'src', 'scripts', 'hook_manifest.yaml'));
|
|
175
|
+
const checkoutVersion = isSource ? versionAt(input.projectRoot) : null;
|
|
176
|
+
if (runtime === 'staged' && version !== null && checkoutVersion !== null && olderThan(version, checkoutVersion)) {
|
|
177
|
+
version_skew = `staged runtime ${version} is older than this checkout ${checkoutVersion} — its hooks run the older guards until the checkout's bundle is built (npm run build:hooks) or the runtime is restaged`;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
let state: ClaudeHookState;
|
|
181
|
+
if (registered_in.length === 0) state = 'not-installed';
|
|
182
|
+
else if (runtime === 'none') state = 'installed-not-executable';
|
|
183
|
+
else if (observedReached(input.runtimeRoot)) state = 'observed-at-runtime';
|
|
184
|
+
else state = 'executable';
|
|
185
|
+
|
|
186
|
+
return {
|
|
187
|
+
registered_in,
|
|
188
|
+
managed_commands: { global: global.managed, project: project.managed },
|
|
189
|
+
foreign_commands: { global: global.foreign, project: project.foreign },
|
|
190
|
+
runtime,
|
|
191
|
+
runtime_version: version,
|
|
192
|
+
version_skew,
|
|
193
|
+
state,
|
|
194
|
+
};
|
|
195
|
+
}
|
|
@@ -110,49 +110,133 @@ export function build_claude_hook_matrix(manifest_path: string): ClaudeHookMatri
|
|
|
110
110
|
const ac_event = String(ac_raw);
|
|
111
111
|
const concerns = claude_events[ac_event];
|
|
112
112
|
if (!concerns || (Array.isArray(concerns) && concerns.length === 0)) continue;
|
|
113
|
-
//
|
|
114
|
-
//
|
|
115
|
-
//
|
|
116
|
-
//
|
|
117
|
-
//
|
|
118
|
-
//
|
|
119
|
-
//
|
|
120
|
-
//
|
|
121
|
-
//
|
|
122
|
-
//
|
|
123
|
-
//
|
|
124
|
-
// have no project-relative bundle path and take the CLI fallback
|
|
125
|
-
// below, which boots the same bundle in-process via the launcher
|
|
126
|
-
// fast path (src/cli/agent-config.ts).
|
|
113
|
+
// Only package-owned dispatchers are trusted (17.0.0 finding
|
|
114
|
+
// feaebdef733b, owner decision of 2026-10-21): the staged runtime,
|
|
115
|
+
// then an `agent-config` on PATH whose resolved path is absolute and
|
|
116
|
+
// outside the opened project. Nothing inside $CLAUDE_PROJECT_DIR runs
|
|
117
|
+
// — not a project npm install, not a source checkout's dist/, not a
|
|
118
|
+
// local wrapper — because a cloned repository can commit any of them
|
|
119
|
+
// and would then run as the user's global hook, ahead of the guards.
|
|
120
|
+
// `exec` replaces the shell; stdin and exit codes flow through, so a
|
|
121
|
+
// fail_closed concern still denies. PreToolUse is the exception: it
|
|
122
|
+
// runs the dispatcher as a child so a missing verdict can be refused
|
|
123
|
+
// (see _pre_tool_use_exit_guard).
|
|
127
124
|
//
|
|
128
|
-
//
|
|
129
|
-
//
|
|
130
|
-
//
|
|
131
|
-
//
|
|
132
|
-
//
|
|
133
|
-
//
|
|
134
|
-
// (
|
|
125
|
+
// With no dispatcher, PreToolUse refuses (exit 2) on the settings
|
|
126
|
+
// carrier (finding bb6ab0f5f37d): every fail_closed guard would
|
|
127
|
+
// otherwise pass silently, which an upgrade swap was measured doing
|
|
128
|
+
// 487 times in 4,190 invocations. The plugin carrier keeps the warning
|
|
129
|
+
// and exit 0 — a plugin-only install has no package to enforce with,
|
|
130
|
+
// and the session-start context line names the guards that are off
|
|
131
|
+
// (council 2026-10-21). Every other event stays exit 0.
|
|
135
132
|
// NOTE: the CLI fallback carries MANAGED_SIGNATURE — keep it, or
|
|
136
133
|
// previously installed managed entries orphan on refresh.
|
|
137
134
|
const dispatchArgs =
|
|
138
135
|
`--platform claude --event ${ac_event} --native-event ${native} ` +
|
|
139
136
|
`--project-dir "$CLAUDE_PROJECT_DIR" --min-version ${String(hook_spec)}`;
|
|
140
137
|
matrix[native] =
|
|
141
|
-
'
|
|
142
|
-
'[ -f "$
|
|
143
|
-
'
|
|
144
|
-
|
|
145
|
-
'
|
|
146
|
-
'
|
|
147
|
-
'
|
|
148
|
-
`
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
`"$BIN" dispatch:hook ${dispatchArgs}`;
|
|
138
|
+
'R="${EVENT4U_CONFIG_HOME:-$HOME/.event4u/agent-config}/runtime"; S="$R/current"; N=""; ' +
|
|
139
|
+
'[ -f "$S/node" ] && read -r N < "$S/node"; ' +
|
|
140
|
+
'if [ -n "$N" ] && [ -x "$N" ] && [ -f "$S/dist/hooks/dispatch.js" ]; then ' +
|
|
141
|
+
`${native === 'PreToolUse' ? '' : 'exec '}"$N" "$S/dist/hooks/dispatch.js" ${dispatchArgs}; ` +
|
|
142
|
+
`${native === 'PreToolUse' ? 'else ' : 'fi; '}` +
|
|
143
|
+
'BIN=$(command -v agent-config); [ "${BIN#/}" = "$BIN" ] && BIN=""; ' +
|
|
144
|
+
'[ -n "$CLAUDE_PROJECT_DIR" ] && [ "${BIN#"$CLAUDE_PROJECT_DIR"/}" != "$BIN" ] && BIN=""; ' +
|
|
145
|
+
`[ -n "$BIN" ] || { ${_no_dispatcher_notice(native)}${_thinned_dead_carrier(native)}${_no_dispatcher_exit(native)} }; ` +
|
|
146
|
+
`"$BIN" dispatch:hook ${dispatchArgs}` +
|
|
147
|
+
(native === 'PreToolUse' ? _pre_tool_use_exit_guard() : '');
|
|
152
148
|
}
|
|
153
149
|
return matrix;
|
|
154
150
|
}
|
|
155
151
|
|
|
152
|
+
export const NO_DISPATCHER_STDERR =
|
|
153
|
+
'agent-config: no hook dispatcher reachable, so no agent-config hook runs in this session. ' +
|
|
154
|
+
'Hooks need the npm package where they can reach it: npm i -g @event4u/agent-config ' +
|
|
155
|
+
'(then npx -y @event4u/agent-config init)';
|
|
156
|
+
|
|
157
|
+
export const NO_DISPATCHER_CONTEXT =
|
|
158
|
+
'agent-config hooks are NOT running in this session: the plugin found no dispatcher, so no ' +
|
|
159
|
+
'concern runs, the fail_closed guards block-no-verify, block-kernel-rule-writes and ' +
|
|
160
|
+
'block-plumbing-writes included.';
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* The no-dispatcher branch, keyed on CLAUDE_PLUGIN_ROOT — set by the host for
|
|
164
|
+
* a plugin's hooks only (road-to-a-hook-carrier-that-is-never-silent 5.1, D5).
|
|
165
|
+
* The settings carrier runs the byte-same string, which the host's dedupe
|
|
166
|
+
* needs, and stays silent there: that carrier's branch belongs to Phase 3.
|
|
167
|
+
* One stderr line per event (exit 0, never blocking); the context line goes to
|
|
168
|
+
* stdout on SessionStart only, so a tool call is never followed by context.
|
|
169
|
+
* Both texts are single-quoted shell literals: no `'`, and no `;` either,
|
|
170
|
+
* because commandHead() splits on the last `;`.
|
|
171
|
+
*/
|
|
172
|
+
function _no_dispatcher_notice(native: string): string {
|
|
173
|
+
const context = native === 'SessionStart' ? ` echo '${NO_DISPATCHER_CONTEXT}';` : '';
|
|
174
|
+
return `[ -n "$CLAUDE_PLUGIN_ROOT" ] && { echo '${NO_DISPATCHER_STDERR}' >&2;${context} }; `;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
export const NO_DISPATCHER_REFUSAL =
|
|
178
|
+
'agent-config: no hook dispatcher reachable, so this tool call is refused: the fail_closed guards ' +
|
|
179
|
+
'block-no-verify, block-kernel-rule-writes and block-plumbing-writes cannot run. Repair in a terminal: ' +
|
|
180
|
+
'npm i -g @event4u/agent-config then npx -y @event4u/agent-config init. To drop the hooks instead: ' +
|
|
181
|
+
'agent-config uninstall, or delete the agent-config entries from ~/.claude/settings.json.';
|
|
182
|
+
|
|
183
|
+
/**
|
|
184
|
+
* How the no-dispatcher branch ends. PreToolUse on the settings carrier
|
|
185
|
+
* refuses; the plugin carrier and every other event exit 0. Single-quoted
|
|
186
|
+
* literal like the notices: no `'`, no `;`.
|
|
187
|
+
*/
|
|
188
|
+
function _no_dispatcher_exit(native: string): string {
|
|
189
|
+
if (native !== 'PreToolUse') return 'exit 0;';
|
|
190
|
+
return `[ -z "$CLAUDE_PLUGIN_ROOT" ] && { echo '${NO_DISPATCHER_REFUSAL}' >&2; exit 2; }; exit 0;`;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
export const DISPATCHER_FAILED_REFUSAL =
|
|
194
|
+
'agent-config: the hook dispatcher did not return a verdict, so this tool call is refused: the fail_closed ' +
|
|
195
|
+
'guards could not decide. If an agent-config upgrade is running, retry once it has finished.';
|
|
196
|
+
|
|
197
|
+
/**
|
|
198
|
+
* PreToolUse runs its dispatcher as a child, never via `exec`, so this tail can
|
|
199
|
+
* read the exit code: Claude Code lets a tool call through on any exit other
|
|
200
|
+
* than 2, so a dispatcher that vanished mid-upgrade (127) or crashed on a
|
|
201
|
+
* half-written tree (1) used to pass the call. Only 0 and 2 are verdicts.
|
|
202
|
+
*/
|
|
203
|
+
function _pre_tool_use_exit_guard(): string {
|
|
204
|
+
return (
|
|
205
|
+
`; fi; RC=$?; [ "$RC" = 0 ] || [ "$RC" = 2 ] || { echo '${DISPATCHER_FAILED_REFUSAL}' >&2; exit 2; }; ` +
|
|
206
|
+
'exit $RC'
|
|
207
|
+
);
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
export const THINNED_DEAD_CARRIER_LINE =
|
|
211
|
+
'agent-config: no hook dispatcher was reached and the rule layer on disk is thinned, so routed rule ' +
|
|
212
|
+
'bodies will not arrive in this session. Open a rule body from the absolute Body path in its stub. ' +
|
|
213
|
+
'The full rule layer is restored for the next session.';
|
|
214
|
+
|
|
215
|
+
/**
|
|
216
|
+
* The dead-carrier branch on a THINNED layer (road-to-a-hook-carrier-that-is-never-silent
|
|
217
|
+
* 3.1, 3.2), SessionStart only and without node. `$R/thinned` exists only while
|
|
218
|
+
* the install left the claude layer thinned and holds that layer's directory; on
|
|
219
|
+
* a full layer the branch is silent, which is what keeps an uninstalled
|
|
220
|
+
* repository quiet. It prints one context line, then restores the staged full
|
|
221
|
+
* layer — overwriting only files that carry the package stamp, adding missing
|
|
222
|
+
* ones, removing none, each by an atomic rename — and demotes the machine. A
|
|
223
|
+
* failed copy leaves the marker, so the line keeps printing rather than the
|
|
224
|
+
* session going quiet on a layer that is still thin. `AC_HOOK_PROBE` is the
|
|
225
|
+
* stripped-environment probe, which must observe and never restore.
|
|
226
|
+
*/
|
|
227
|
+
function _thinned_dead_carrier(native: string): string {
|
|
228
|
+
if (native !== 'SessionStart') return '';
|
|
229
|
+
return (
|
|
230
|
+
`[ -z "$AC_HOOK_PROBE" ] && [ -f "$R/thinned" ] && { echo '${THINNED_DEAD_CARRIER_LINE}'; ` +
|
|
231
|
+
'L=""; read -r L < "$R/thinned"; F=1; ' +
|
|
232
|
+
'if [ -d "$L" ] && [ -d "$S/claude-rules" ]; then F=0; for f in "$S/claude-rules"/*.md; do ' +
|
|
233
|
+
'[ -f "$f" ] || continue; t="$L/${f##*/}"; ' +
|
|
234
|
+
'if [ ! -e "$t" ] || grep -qx "package: event4u/agent-config" "$t"; then ' +
|
|
235
|
+
'cp "$f" "$t.ac-restore" && mv -f "$t.ac-restore" "$t" || F=1; fi; done; fi; ' +
|
|
236
|
+
'[ "$F" = 0 ] && mv -f "$R/thinned" "$R/demoted"; }; '
|
|
237
|
+
);
|
|
238
|
+
}
|
|
239
|
+
|
|
156
240
|
function _is_managed_group(group: unknown): boolean {
|
|
157
241
|
if (typeof group !== 'object' || group === null || Array.isArray(group)) return false;
|
|
158
242
|
const hooks = (group as HookGroup).hooks;
|
|
@@ -166,7 +250,7 @@ function _is_managed_group(group: unknown): boolean {
|
|
|
166
250
|
);
|
|
167
251
|
}
|
|
168
252
|
|
|
169
|
-
function _read_settings(settings_path: string): Record<string, unknown> {
|
|
253
|
+
export function _read_settings(settings_path: string): Record<string, unknown> {
|
|
170
254
|
if (!fs.existsSync(settings_path)) return {};
|
|
171
255
|
const raw = fs.readFileSync(settings_path, 'utf8');
|
|
172
256
|
if (raw.trim() === '') return {};
|
|
@@ -182,7 +266,7 @@ function _read_settings(settings_path: string): Record<string, unknown> {
|
|
|
182
266
|
return parsed as Record<string, unknown>;
|
|
183
267
|
}
|
|
184
268
|
|
|
185
|
-
function _with_lock<T>(settings_path: string, fn: () => T): T {
|
|
269
|
+
export function _with_lock<T>(settings_path: string, fn: () => T): T {
|
|
186
270
|
const lockPath = settings_path + '.agent-config.lock';
|
|
187
271
|
fs.mkdirSync(path.dirname(lockPath), { recursive: true });
|
|
188
272
|
let fd: number;
|