@event4u/agent-config 16.5.0 → 17.1.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 +114 -530
- package/CONTRIBUTING.md +47 -0
- package/README.md +25 -24
- 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 +10 -2
- 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 +44 -2
- 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-2Y5AMLMY.js +136 -0
- package/dist/cli-delegate/chunk-3PK3VZHB.js +235 -0
- package/dist/cli-delegate/{chunk-OKJUIAPS.js → chunk-4E2W63DA.js} +1 -62
- 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-F3QDG2GT.js → chunk-BZJ4Y3CI.js} +259 -159
- package/dist/cli-delegate/{chunk-5GPULQBE.js → chunk-CMZEKSNN.js} +4280 -705
- package/dist/cli-delegate/chunk-DSY6LLCQ.js +127 -0
- package/dist/cli-delegate/{chunk-ZUZKZYCN.js → chunk-E3CFULNX.js} +67 -13
- 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-I4KJYVPB.js +69 -0
- package/dist/cli-delegate/{chunk-JQOM7TTM.js → chunk-IDAOTDPE.js} +1 -100
- package/dist/cli-delegate/chunk-J2SJZICO.js +698 -0
- package/dist/cli-delegate/chunk-KR5ZIFPO.js +581 -0
- 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-QBHEI5N4.js +919 -0
- package/dist/cli-delegate/{chunk-F7DQWYR5.js → chunk-RAXQOETZ.js} +6 -2
- 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-T7XSJSUQ.js → chunk-VYZGJLCA.js} +1000 -814
- package/dist/cli-delegate/chunk-W5JXMF2T.js +77 -0
- 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-6SRJTYJS.js → chunk-XIAPY44N.js} +37 -16
- package/dist/cli-delegate/{chunk-H76PHZBI.js → chunk-XLY5G3CM.js} +14 -19
- package/dist/cli-delegate/{chunk-6YQC2HLF.js → chunk-YHAPONWV.js} +54 -40
- 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 +487 -820
- 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 +15 -12
- package/dist/cli-delegate/cmd_fleet.js +6 -4
- 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 +8 -6
- package/dist/cli-delegate/cmd_prune.js +17 -14
- 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 +15 -12
- package/dist/cli-delegate/cmd_settings_set.js +1 -1
- package/dist/cli-delegate/cmd_sync.js +17 -14
- package/dist/cli-delegate/cmd_uninstall.js +186 -32
- package/dist/cli-delegate/cmd_update.js +76 -16
- package/dist/cli-delegate/cmd_upgrade.js +38 -7
- package/dist/cli-delegate/cmd_validate.js +17 -14
- 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 +17450 -18612
- 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/claudeRuleRewrite.js +10 -3
- package/dist/install/conflict.js +59 -7
- package/dist/install/conflictTracker.js +93 -8
- package/dist/install/detect.js +3 -3
- package/dist/install/hostPermissionsAdapter.js +106 -0
- package/dist/install/install.mjs +3234 -1961
- package/dist/install/installThinLayer.js +2 -1
- package/dist/install/loggedWrites.js +142 -0
- 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/paths.js +12 -2
- package/dist/install/plan.js +1 -1
- package/dist/install/preflight.js +39 -8
- package/dist/install/preserve.js +96 -13
- 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/txlog.js +10 -6
- 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 +10716 -5880
- 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 +769 -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 +57 -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 +33 -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 +45 -1
- 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 +176 -10
- package/src/config/gate-reachability-exemptions.json +3 -5
- package/src/config/gate-violation-baselines.json +32 -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/production-entries.json +18 -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/release-gate-locality.yml +0 -7
- 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/claudeRuleRewrite.ts +10 -1
- package/src/install/conflict.ts +61 -6
- package/src/install/conflictTracker.ts +143 -9
- package/src/install/detect.ts +3 -3
- package/src/install/hostPermissionsAdapter.ts +136 -0
- package/src/install/installThinLayer.ts +12 -1
- package/src/install/loggedWrites.ts +148 -0
- 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/paths.ts +11 -2
- package/src/install/plan.ts +1 -1
- package/src/install/preflight.ts +42 -10
- package/src/install/preserve.ts +131 -13
- 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/txlog.ts +10 -6
- 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_conformance.ts +3 -2
- 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 +49 -18
- 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/council_settings_block.ts +9 -2
- 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 +899 -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 +44 -7
- 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 +62 -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/price_freshness.ts +112 -0
- package/src/scripts/_lib/procedure_checks.ts +5 -0
- package/src/scripts/_lib/production_reach.ts +194 -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 +29 -14
- 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 +36 -311
- 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 +268 -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 +20 -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 +56 -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 +288 -0
- package/src/scripts/ai_council/free_route.ts +216 -0
- package/src/scripts/ai_council/free_route_catalog.ts +310 -0
- package/src/scripts/ai_council/free_route_client.ts +99 -0
- package/src/scripts/ai_council/free_rung.ts +61 -0
- package/src/scripts/ai_council/hand_payload.ts +338 -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 +23 -26
- 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 +114 -0
- package/src/scripts/ai_council/seat_policy.ts +47 -0
- package/src/scripts/ai_council/seat_resume.ts +40 -0
- package/src/scripts/ai_council/self_hosted_probe.ts +327 -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 +39 -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 +406 -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 +174 -73
- 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 +8 -3
- 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_production_reach.ts +257 -0
- 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 +56 -44
- 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 +68 -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 +14 -13
- 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 +43 -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 +162 -10
- package/src/scripts/hooks/state_io.ts +2 -2
- package/src/scripts/hooks/subagent_ledger_hook.ts +80 -0
- 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 +61 -92
- 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_decision_classes.ts +34 -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 +118 -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 +114 -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 +31 -64
- package/src/scripts/release_drill.ts +63 -188
- package/src/scripts/release_env.ts +37 -0
- package/src/scripts/release_publication.ts +11 -10
- package/src/scripts/report_consumer_gate_reach.ts +233 -0
- package/src/scripts/report_merge_gate_load.ts +295 -0
- package/src/scripts/report_production_reach.ts +35 -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 +519 -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-A4QJ6ENT.js +0 -50
- 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
|
@@ -48,6 +48,9 @@ import * as fs from 'node:fs';
|
|
|
48
48
|
import * as path from 'node:path';
|
|
49
49
|
|
|
50
50
|
import { _claude_paths_plan } from './claudePathsPlan.js';
|
|
51
|
+
// Re-exported for `install.ts`, which sits past the source-size ceiling and so
|
|
52
|
+
// reaches it through the namespace it already imports instead of a new line.
|
|
53
|
+
export { onlyDeployed } from './loggedWrites.js';
|
|
51
54
|
import { parseFrontmatter } from './ruleInScope.js';
|
|
52
55
|
|
|
53
56
|
/**
|
|
@@ -134,8 +137,9 @@ export function rewriteAndReport(
|
|
|
134
137
|
warn: (m: string) => void,
|
|
135
138
|
wrappers?: { wrapped: readonly string[]; reserved: readonly string[]; foreign?: readonly string[] },
|
|
136
139
|
preserved: ReadonlySet<string> = new Set(),
|
|
140
|
+
onWrite?: (target: string) => void,
|
|
137
141
|
): ClaudeRuleRewriteResult {
|
|
138
|
-
const result = rewriteClaudeRules(rulesDir, preserved);
|
|
142
|
+
const result = rewriteClaudeRules(rulesDir, preserved, onWrite);
|
|
139
143
|
// The flat-command wrapper report rides along rather than sitting at the
|
|
140
144
|
// call site: `install.ts` is thousands of lines past
|
|
141
145
|
// `check_source_size_budget`'s ceiling, and this module is the one place
|
|
@@ -248,10 +252,14 @@ export function renderClaudeRule(sourceText: string): {
|
|
|
248
252
|
* disappearing from the frontmatter.
|
|
249
253
|
*
|
|
250
254
|
* Returns counts rather than printing. The caller owns the reporting surface.
|
|
255
|
+
* `onWrite` receives each rewritten path, so the installer can log it: the
|
|
256
|
+
* transaction log is read back as proof the bytes on disk are ours, and a
|
|
257
|
+
* write it never saw would leave every rewritten rule unprovable.
|
|
251
258
|
*/
|
|
252
259
|
export function rewriteClaudeRules(
|
|
253
260
|
rulesDir: string,
|
|
254
261
|
preserved: ReadonlySet<string> = new Set(),
|
|
262
|
+
onWrite?: (target: string) => void,
|
|
255
263
|
): ClaudeRuleRewriteResult {
|
|
256
264
|
const result: ClaudeRuleRewriteResult = { rewritten: 0, scoped: [], dropped: [], failed: [] };
|
|
257
265
|
let entries: string[];
|
|
@@ -299,6 +307,7 @@ export function rewriteClaudeRules(
|
|
|
299
307
|
});
|
|
300
308
|
continue;
|
|
301
309
|
}
|
|
310
|
+
onWrite?.(full);
|
|
302
311
|
result.rewritten += 1;
|
|
303
312
|
}
|
|
304
313
|
const stem = name.slice(0, -3);
|
package/src/install/conflict.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Conflict resolution — Phase A5 (simplified, three modes).
|
|
3
3
|
*
|
|
4
4
|
* Three decisions only, replacing the legacy `prompt → write / skip /
|
|
5
|
-
* abort` triple from `
|
|
5
|
+
* abort` triple from `_resolve_file_conflict` in the retired Python installer:
|
|
6
6
|
*
|
|
7
7
|
* - `write` — target either does not exist OR policy authorises overwrite.
|
|
8
8
|
* - `skip` — target exists, known path, not forced: leave it alone.
|
|
@@ -18,9 +18,12 @@
|
|
|
18
18
|
import { existsSync } from 'node:fs';
|
|
19
19
|
|
|
20
20
|
import { sha256File } from './plan.js';
|
|
21
|
+
import { loggedWriteDigests, wroteTheseBytes, type LoggedWrites } from './loggedWrites.js';
|
|
22
|
+
import { isLedgerMigration, logProofApplies, sidecarPathFor } from './preserve.js';
|
|
21
23
|
import {
|
|
22
24
|
classifyOwnership,
|
|
23
|
-
|
|
25
|
+
ledgerListedPaths,
|
|
26
|
+
recordedHashesWithLedger,
|
|
24
27
|
type RecordedHashes,
|
|
25
28
|
} from './recordedOwnership.js';
|
|
26
29
|
import type {
|
|
@@ -102,7 +105,7 @@ export type JsonArray = ReadonlyArray<JsonValue>;
|
|
|
102
105
|
/**
|
|
103
106
|
* Recursive object merge — overlay wins, nested dicts merged, arrays replaced.
|
|
104
107
|
*
|
|
105
|
-
* Mirrors `
|
|
108
|
+
* Mirrors `deep_merge` in the retired Python installer. Arrays do **not** concatenate;
|
|
106
109
|
* Claude / Cursor / Cline hook configs rely on whole-array replacement to
|
|
107
110
|
* stay idempotent across re-runs.
|
|
108
111
|
*
|
|
@@ -197,17 +200,29 @@ export const CONFLICT_BATCH_THRESHOLD = 5;
|
|
|
197
200
|
* modified rows above and loses the unchanged ones below.
|
|
198
201
|
*
|
|
199
202
|
* `recorded` is injectable for tests; by default it is read from the
|
|
200
|
-
* manifest at `plan.root
|
|
203
|
+
* manifest at `plan.root`, with the user-scoped ownership ledger laid over it.
|
|
204
|
+
* `logged` likewise; by default it is the install transaction log, opened only
|
|
205
|
+
* for an entry `logProofApplies` to.
|
|
201
206
|
*/
|
|
202
207
|
export function computeConflicts(
|
|
203
208
|
plan: InstallPlan,
|
|
204
209
|
recordedOverride?: RecordedHashes,
|
|
210
|
+
loggedOverride?: LoggedWrites,
|
|
205
211
|
): readonly ConflictEntry[] {
|
|
206
212
|
// Force returns before the manifest is read. As a default parameter the
|
|
207
213
|
// map was built at call entry and discarded on the next line, so every
|
|
208
214
|
// force-mode plan paid a read and a YAML parse for nothing.
|
|
209
215
|
if (plan.policy.force) return [];
|
|
210
|
-
const recorded = recordedOverride ??
|
|
216
|
+
const recorded = recordedOverride ?? recordedHashesWithLedger(plan.root);
|
|
217
|
+
// Read lazily and once: a pass over a tree whose ledger paths all carry
|
|
218
|
+
// digests never reaches the branch that needs this, and an unconditional
|
|
219
|
+
// read would charge every plan for an answer most of them discard.
|
|
220
|
+
let ledgerFiles: ReadonlySet<string> | null = null;
|
|
221
|
+
let logged: LoggedWrites | undefined;
|
|
222
|
+
const ledgerLists = (p: string): boolean => {
|
|
223
|
+
ledgerFiles ??= ledgerListedPaths();
|
|
224
|
+
return ledgerFiles.has(p);
|
|
225
|
+
};
|
|
211
226
|
const out: ConflictEntry[] = [];
|
|
212
227
|
for (const entries of Object.values(plan.filesByTool)) {
|
|
213
228
|
for (const entry of entries) {
|
|
@@ -224,8 +239,47 @@ export function computeConflicts(
|
|
|
224
239
|
const onDisk = sha256File(entry.path);
|
|
225
240
|
const ownership = classifyOwnership(recorded.get(entry.path), onDisk);
|
|
226
241
|
if (ownership === 'recorded-unchanged') continue;
|
|
242
|
+
// The writer's transaction-log proof, under the writer's own
|
|
243
|
+
// condition (`logProofApplies`): where it holds and the log records
|
|
244
|
+
// these bytes, the writer replaces the file, so the preview must
|
|
245
|
+
// not name it.
|
|
246
|
+
const recordedSha = recorded.get(entry.path);
|
|
247
|
+
const unproven = {
|
|
248
|
+
exists: true,
|
|
249
|
+
recordedSha256: recordedSha,
|
|
250
|
+
onDiskSha256: onDisk,
|
|
251
|
+
force: false,
|
|
252
|
+
ledgerListed: ledgerLists(entry.path),
|
|
253
|
+
recordedIsStaged:
|
|
254
|
+
typeof recordedSha === 'string' && recordedSha === recorded.get(sidecarPathFor(entry.path)),
|
|
255
|
+
};
|
|
256
|
+
if (logProofApplies(unproven)) {
|
|
257
|
+
logged ??= loggedOverride ?? loggedWriteDigests();
|
|
258
|
+
if (wroteTheseBytes(entry.path, onDisk as string, logged)) continue;
|
|
259
|
+
}
|
|
227
260
|
if (ownership === 'unknown' && plan.policy.knownPaths.has(entry.path)) continue;
|
|
228
|
-
|
|
261
|
+
// CANDIDACY, not the verdict, and it is computed BEFORE the
|
|
262
|
+
// equality short-circuit below rather than after. The migration
|
|
263
|
+
// branch preserves when the bytes differ from what the run WOULD
|
|
264
|
+
// write — source plus the install-time tag — while `entry.sha256`
|
|
265
|
+
// is the digest of the UNTAGGED source. The two comparisons are
|
|
266
|
+
// not the same for any tagged `.md`, which is most of the deployed
|
|
267
|
+
// tree, so a file that matches the untagged source can still be
|
|
268
|
+
// preserved by the writer. Short-circuiting first would make the
|
|
269
|
+
// preview silent about exactly those, and silence is the one
|
|
270
|
+
// answer a preview must not give about a file the install is
|
|
271
|
+
// going to keep. Only the writer can tag before hashing, so only
|
|
272
|
+
// the writer decides; this reports which entries take that path.
|
|
273
|
+
const migration =
|
|
274
|
+
ownership === 'unknown' &&
|
|
275
|
+
isLedgerMigration({
|
|
276
|
+
exists: true,
|
|
277
|
+
recordedSha256: recorded.get(entry.path),
|
|
278
|
+
onDiskSha256: onDisk,
|
|
279
|
+
force: false,
|
|
280
|
+
ledgerListed: ledgerLists(entry.path),
|
|
281
|
+
});
|
|
282
|
+
if (onDisk === entry.sha256 && !migration) continue;
|
|
229
283
|
out.push({
|
|
230
284
|
path: entry.path,
|
|
231
285
|
kind: entry.kind,
|
|
@@ -233,6 +287,7 @@ export function computeConflicts(
|
|
|
233
287
|
existingSha256: onDisk,
|
|
234
288
|
mergeable: isJsonTarget(entry),
|
|
235
289
|
ownership,
|
|
290
|
+
migration,
|
|
236
291
|
});
|
|
237
292
|
}
|
|
238
293
|
}
|
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
*/
|
|
19
19
|
import * as crypto from 'node:crypto';
|
|
20
20
|
import * as fs from 'node:fs';
|
|
21
|
+
import * as os from 'node:os';
|
|
21
22
|
import * as path from 'node:path';
|
|
22
23
|
|
|
23
24
|
import { mkdirp, pathExists, resolvePath, sha256OfFile } from './fsPrimitives.js';
|
|
@@ -26,11 +27,26 @@ import {
|
|
|
26
27
|
conflictSummaryMessage,
|
|
27
28
|
decideDeployWrite,
|
|
28
29
|
foreignSidecarMessage,
|
|
30
|
+
isLedgerMigration,
|
|
31
|
+
logProofApplies,
|
|
32
|
+
migrationPreservedMessage,
|
|
29
33
|
preservedFileMessage,
|
|
30
34
|
sidecarPathFor,
|
|
31
35
|
type DeployWriteDecision,
|
|
32
36
|
} from './preserve.js';
|
|
33
|
-
import {
|
|
37
|
+
import { loggedWriteDigests, wroteTheseBytes, type LoggedWrites } from './loggedWrites.js';
|
|
38
|
+
import { ledgerListedPaths, recordedHashesWithLedger, type RecordedHashes } from './recordedOwnership.js';
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* The bytes a run would write to one target, named rather than computed.
|
|
42
|
+
*
|
|
43
|
+
* A copy carries the package file plus its install-time tag; a generated
|
|
44
|
+
* marker carries its own content. The tracker turns either into a digest, and
|
|
45
|
+
* only when the migration branch needs one.
|
|
46
|
+
*/
|
|
47
|
+
export type WouldWrite =
|
|
48
|
+
| { readonly from: string; readonly packageRoot: string | null }
|
|
49
|
+
| { readonly content: string };
|
|
34
50
|
|
|
35
51
|
/** The installer-owned reporting surface the tracker borrows. */
|
|
36
52
|
export interface ConflictTrackerHost {
|
|
@@ -67,7 +83,25 @@ export interface ConflictTrackerHost {
|
|
|
67
83
|
export interface ConflictState {
|
|
68
84
|
root: string | null;
|
|
69
85
|
recorded: RecordedHashes | null;
|
|
86
|
+
/**
|
|
87
|
+
* Paths the ownership ledger lists, read lazily and cached for the run.
|
|
88
|
+
*
|
|
89
|
+
* Same discipline as `recorded`, for the same reason: the ledger is
|
|
90
|
+
* rewritten at the end of the install, so re-reading it mid-run would
|
|
91
|
+
* compare a file against a listing this very run had just produced.
|
|
92
|
+
*/
|
|
93
|
+
ledgerFiles: ReadonlySet<string> | null;
|
|
94
|
+
/** The transaction log's writes, read lazily once per run for the same reason. */
|
|
95
|
+
logged: LoggedWrites | null;
|
|
70
96
|
preserved: string[];
|
|
97
|
+
/**
|
|
98
|
+
* Targets this run preserved on the migration branch.
|
|
99
|
+
*
|
|
100
|
+
* The report line differs there — the run cannot say the file was edited,
|
|
101
|
+
* only that it cannot tell — and the writer learns which is which from
|
|
102
|
+
* `resolve`, not from re-deriving the classification at report time.
|
|
103
|
+
*/
|
|
104
|
+
migrated: Set<string>;
|
|
71
105
|
/**
|
|
72
106
|
* Sidecar path → the digest of the package content staged there this run.
|
|
73
107
|
*
|
|
@@ -85,8 +119,17 @@ export interface ConflictTracker {
|
|
|
85
119
|
readonly conflictState: ConflictState;
|
|
86
120
|
/** Reset the tracker and point it at the tree whose manifest records ownership. */
|
|
87
121
|
begin(root: string | null): void;
|
|
88
|
-
/**
|
|
89
|
-
|
|
122
|
+
/**
|
|
123
|
+
* Decide what the writer does with one deploy target.
|
|
124
|
+
*
|
|
125
|
+
* `would` is required rather than optional: a call site that cannot say
|
|
126
|
+
* what it would write cannot be classified on the migration branch, and an
|
|
127
|
+
* optional argument would let a new one skip that branch silently instead
|
|
128
|
+
* of having to decide.
|
|
129
|
+
*/
|
|
130
|
+
resolve(target: string, force: boolean, would: WouldWrite): DeployWriteDecision;
|
|
131
|
+
/** The digest recorded before this run for `target` — what decided a preservation. */
|
|
132
|
+
recordedDigest(target: string): string | null | undefined;
|
|
90
133
|
/** Stage package content beside a preserved target, then record and report it. */
|
|
91
134
|
preserve(target: string, source: string, packageRoot: string | null): void;
|
|
92
135
|
/** The same, for a managed file the installer generates rather than copies. */
|
|
@@ -108,7 +151,10 @@ export function createConflictTracker(host: ConflictTrackerHost): ConflictTracke
|
|
|
108
151
|
const conflictState: ConflictState = {
|
|
109
152
|
root: null,
|
|
110
153
|
recorded: null,
|
|
154
|
+
ledgerFiles: null,
|
|
155
|
+
logged: null,
|
|
111
156
|
preserved: [],
|
|
157
|
+
migrated: new Set(),
|
|
112
158
|
staged: new Map(),
|
|
113
159
|
};
|
|
114
160
|
|
|
@@ -129,13 +175,68 @@ export function createConflictTracker(host: ConflictTrackerHost): ConflictTracke
|
|
|
129
175
|
*/
|
|
130
176
|
function recordedHashFor(target: string): string | null | undefined {
|
|
131
177
|
if (conflictState.root === null) return undefined;
|
|
132
|
-
conflictState.recorded ??=
|
|
178
|
+
conflictState.recorded ??= recordedHashesWithLedger(conflictState.root);
|
|
133
179
|
const plain = path.resolve(target);
|
|
134
180
|
if (conflictState.recorded.has(plain)) return conflictState.recorded.get(plain);
|
|
135
181
|
const real = resolvePath(target);
|
|
136
182
|
return real === plain ? undefined : conflictState.recorded.get(real);
|
|
137
183
|
}
|
|
138
184
|
|
|
185
|
+
/**
|
|
186
|
+
* Does the ownership ledger list this path, under either spelling?
|
|
187
|
+
*
|
|
188
|
+
* Both keys are tried for the reason `recordedHashFor` documents: on macOS
|
|
189
|
+
* the temp and home trees sit behind a realpath symlink that rewrites a
|
|
190
|
+
* `/var` prefix onto its private twin, so a single spelling misses every
|
|
191
|
+
* entry on the platform this is developed on.
|
|
192
|
+
*/
|
|
193
|
+
function ledgerLists(target: string): boolean {
|
|
194
|
+
conflictState.ledgerFiles ??= ledgerListedPaths();
|
|
195
|
+
const files = conflictState.ledgerFiles;
|
|
196
|
+
return files.has(path.resolve(target)) || files.has(resolvePath(target));
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
/**
|
|
200
|
+
* The digest of the bytes this run would write to `target`.
|
|
201
|
+
*
|
|
202
|
+
* Built into a temp file rather than hashed off the package source,
|
|
203
|
+
* because a deployed file is the package bytes PLUS the install-time tag
|
|
204
|
+
* and the two differ — comparing against the untagged source would call
|
|
205
|
+
* every up-to-date file divergent. The temp name carries the TARGET's
|
|
206
|
+
* extension because `tagDeployed` keys on it, the same constraint
|
|
207
|
+
* `stageInto` works around.
|
|
208
|
+
*
|
|
209
|
+
* `null` on any failure, which preserves: this is consulted only where
|
|
210
|
+
* nothing can be proven, and failing toward the recoverable direction is
|
|
211
|
+
* the whole point of the branch that calls it.
|
|
212
|
+
*/
|
|
213
|
+
function wouldWriteDigest(target: string, would: WouldWrite): string | null {
|
|
214
|
+
// Under the OS temp dir, never beside the target: a host rule directory
|
|
215
|
+
// loads every `.md` in it, and a process killed before the unlink below
|
|
216
|
+
// would leave this file there to be loaded as a rule.
|
|
217
|
+
const tmp = path.join(
|
|
218
|
+
os.tmpdir(),
|
|
219
|
+
`agent-config-would.${process.pid}.${crypto.randomBytes(6).toString('hex')}${path.extname(target)}`,
|
|
220
|
+
);
|
|
221
|
+
try {
|
|
222
|
+
if ('content' in would) {
|
|
223
|
+
fs.writeFileSync(tmp, would.content, 'utf-8');
|
|
224
|
+
} else {
|
|
225
|
+
fs.copyFileSync(would.from, tmp);
|
|
226
|
+
host.tagDeployed(tmp, would.from, would.packageRoot);
|
|
227
|
+
}
|
|
228
|
+
return sha256OfFile(tmp);
|
|
229
|
+
} catch {
|
|
230
|
+
return null;
|
|
231
|
+
} finally {
|
|
232
|
+
try {
|
|
233
|
+
fs.unlinkSync(tmp);
|
|
234
|
+
} catch {
|
|
235
|
+
/* swallow — best-effort cleanup of our own temp file */
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
|
|
139
240
|
/**
|
|
140
241
|
* Produce the bytes this run would have written, then reconcile them with
|
|
141
242
|
* whatever already sits at the sidecar path.
|
|
@@ -219,16 +320,25 @@ export function createConflictTracker(host: ConflictTrackerHost): ConflictTracke
|
|
|
219
320
|
// NDJSON frame and anything downstream reading either.
|
|
220
321
|
if (conflictState.preserved.includes(target)) return;
|
|
221
322
|
conflictState.preserved.push(target);
|
|
222
|
-
host.warn(
|
|
323
|
+
host.warn(
|
|
324
|
+
conflictState.migrated.has(path.resolve(target))
|
|
325
|
+
? migrationPreservedMessage(target, sidecar)
|
|
326
|
+
: preservedFileMessage(target, sidecar),
|
|
327
|
+
);
|
|
223
328
|
}
|
|
224
329
|
|
|
225
330
|
return {
|
|
226
331
|
conflictState,
|
|
227
332
|
|
|
333
|
+
recordedDigest: recordedHashFor,
|
|
334
|
+
|
|
228
335
|
begin(root: string | null): void {
|
|
229
336
|
conflictState.root = root;
|
|
230
337
|
conflictState.recorded = null;
|
|
338
|
+
conflictState.ledgerFiles = null;
|
|
339
|
+
conflictState.logged = null;
|
|
231
340
|
conflictState.preserved = [];
|
|
341
|
+
conflictState.migrated = new Set();
|
|
232
342
|
conflictState.staged = new Map();
|
|
233
343
|
},
|
|
234
344
|
|
|
@@ -238,14 +348,38 @@ export function createConflictTracker(host: ConflictTrackerHost): ConflictTracke
|
|
|
238
348
|
* so a file edited between planning and writing is still classified
|
|
239
349
|
* from the bytes that are actually about to be destroyed.
|
|
240
350
|
*/
|
|
241
|
-
resolve(target: string, force: boolean): DeployWriteDecision {
|
|
351
|
+
resolve(target: string, force: boolean, would: WouldWrite): DeployWriteDecision {
|
|
242
352
|
const exists = pathExists(target);
|
|
243
|
-
|
|
353
|
+
const recordedSha256 = exists ? recordedHashFor(target) : undefined;
|
|
354
|
+
const unproven = {
|
|
244
355
|
exists,
|
|
245
|
-
recordedSha256
|
|
356
|
+
recordedSha256,
|
|
246
357
|
onDiskSha256: exists ? sha256OfFile(target) : null,
|
|
247
358
|
force,
|
|
248
|
-
|
|
359
|
+
ledgerListed: exists && ledgerLists(target),
|
|
360
|
+
recordedIsStaged:
|
|
361
|
+
typeof recordedSha256 === 'string' && recordedSha256 === recordedHashFor(sidecarPathFor(target)),
|
|
362
|
+
};
|
|
363
|
+
// The log is opened only where the record alone would preserve
|
|
364
|
+
// without cause, and read once per run: this run's own appends
|
|
365
|
+
// cannot prove a file it has not reached yet.
|
|
366
|
+
const loggedWrite =
|
|
367
|
+
logProofApplies(unproven) &&
|
|
368
|
+
wroteTheseBytes(target, unproven.onDiskSha256 as string, (conflictState.logged ??= loggedWriteDigests()));
|
|
369
|
+
const base = { ...unproven, loggedWrite };
|
|
370
|
+
// The packaged digest costs a temp write and a tag, so it is
|
|
371
|
+
// computed only for the targets that can consume it. On a tree
|
|
372
|
+
// where every ledger-listed path carries a digest — which is every
|
|
373
|
+
// tree the ledger itself has written — this is false throughout
|
|
374
|
+
// and the run pays nothing.
|
|
375
|
+
const migrating = isLedgerMigration(base);
|
|
376
|
+
const decision = decideDeployWrite(
|
|
377
|
+
migrating ? { ...base, packagedSha256: wouldWriteDigest(target, would) } : base,
|
|
378
|
+
);
|
|
379
|
+
if (decision === 'preserve' && migrating) {
|
|
380
|
+
conflictState.migrated.add(path.resolve(target));
|
|
381
|
+
}
|
|
382
|
+
return decision;
|
|
249
383
|
},
|
|
250
384
|
|
|
251
385
|
/**
|
package/src/install/detect.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Detection layer — Phase A2 port of `
|
|
2
|
+
* Detection layer — Phase A2 port of ``detect_` in the retired Python installer*`.
|
|
3
3
|
*
|
|
4
4
|
* Pure functions only: read once, return a plan. No side effects in
|
|
5
5
|
* the detection itself — atomic writes and conflict resolution happen
|
|
@@ -98,7 +98,7 @@ export interface ScopeDecision {
|
|
|
98
98
|
/**
|
|
99
99
|
* Multi-signal scope detection (ADR-007 D2 / Phase 1.3).
|
|
100
100
|
*
|
|
101
|
-
* 1:1 port of `
|
|
101
|
+
* 1:1 port of `detect_scope` in the retired Python installer. Pure — no side effects.
|
|
102
102
|
*/
|
|
103
103
|
export function detectScope(cwd: string): ScopeDecision {
|
|
104
104
|
if (existsSync(join(cwd, SETTINGS_FILE))) {
|
|
@@ -241,7 +241,7 @@ export function discoverPacks(workspaceRoot: string): readonly string[] {
|
|
|
241
241
|
/**
|
|
242
242
|
* Locate the agent-config package root from a project root.
|
|
243
243
|
*
|
|
244
|
-
* 1:1 port of `
|
|
244
|
+
* 1:1 port of `detect_package_root` in the retired Python installer — prefers an
|
|
245
245
|
* npm-installed copy under `node_modules/@event4u/agent-config/`,
|
|
246
246
|
* falls back to the project root itself for in-package development
|
|
247
247
|
* (presence of `src/config/profiles/minimal.ini` is the development-mode
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* How each host spells a permission deny rule, and where that spelling was
|
|
3
|
+
* read from.
|
|
4
|
+
*
|
|
5
|
+
* `road-to-a-project-contract-written-down` step 2.1 named
|
|
6
|
+
* `src/scripts/hooks/host_lowering.yaml` as the home for this pin. It is not
|
|
7
|
+
* the home, and the departure is recorded in the roadmap's Decisions table
|
|
8
|
+
* rather than taken quietly. The measurement that forced it:
|
|
9
|
+
*
|
|
10
|
+
* - That table is keyed `(host, surface, slot)` and its own header states
|
|
11
|
+
* its subject — "how each host lowers a dispatcher verdict into its own
|
|
12
|
+
* hook contract". A permission deny rule has no slot and no verdict; it is
|
|
13
|
+
* consulted BEFORE a tool runs, not after a hook dispatches.
|
|
14
|
+
* - `_structure()` there reads only named hook keys, so a `permissions:`
|
|
15
|
+
* block added to the YAML would be dropped from the typed table and read
|
|
16
|
+
* by nobody, while still moving the compiled body's fingerprint.
|
|
17
|
+
*
|
|
18
|
+
* Put to the AI council on 2026-10-13 (anthropic + openai, 2/2 present, both
|
|
19
|
+
* seats converging): place the fact here, keep the classifier host-neutral,
|
|
20
|
+
* and let a provenance gate stand in for the plumbing ratification the hook
|
|
21
|
+
* table would have carried.
|
|
22
|
+
*
|
|
23
|
+
* ```
|
|
24
|
+
* THE CLASSIFIER DECIDES WHAT A BULLET MEANS. THIS DECIDES HOW A HOST SPELLS IT.
|
|
25
|
+
* A HOST ABSENT FROM THE TABLE IS A HOST NOBODY ESTABLISHED — NEVER A REFUSAL.
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
|
|
29
|
+
import type { NoGoClassification } from './noGoRules.js';
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Everything a later reader needs to re-check one host's spelling.
|
|
33
|
+
*
|
|
34
|
+
* `examples` are VERBATIM quotes from the page at `docs_url`, as read on
|
|
35
|
+
* `docs_at`. They are the grammar the renderer is checked against by
|
|
36
|
+
* `check_permission_deny_syntax`; they are not independent of the renderer in
|
|
37
|
+
* the way a live probe would be, and that limit is stated here rather than
|
|
38
|
+
* implied — see that gate's own honesty note.
|
|
39
|
+
*/
|
|
40
|
+
export interface HostPermissionSyntax {
|
|
41
|
+
readonly host: string;
|
|
42
|
+
readonly docs_url: string;
|
|
43
|
+
/** The day the page was read, ISO. */
|
|
44
|
+
readonly docs_at: string;
|
|
45
|
+
/**
|
|
46
|
+
* Review-by date for this row. No host this package supports publishes a
|
|
47
|
+
* documentation cadence, so this is a date THIS PACKAGE chose — `docs_at`
|
|
48
|
+
* plus a year — and never a vendor commitment. The same convention
|
|
49
|
+
* `host_lowering.yaml` states for its own `expires`.
|
|
50
|
+
*/
|
|
51
|
+
readonly expires: string;
|
|
52
|
+
/** Where a row goes in the settings file, as a dotted key path. */
|
|
53
|
+
readonly deny_key: string;
|
|
54
|
+
/** Verbatim rule spellings from the page. */
|
|
55
|
+
readonly examples: readonly string[];
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export const HOST_PERMISSION_SYNTAX: Readonly<Record<string, HostPermissionSyntax>> = {
|
|
59
|
+
claude: {
|
|
60
|
+
host: 'claude',
|
|
61
|
+
docs_url: 'https://code.claude.com/docs/en/permissions.md',
|
|
62
|
+
docs_at: '2026-10-13',
|
|
63
|
+
expires: '2027-10-13',
|
|
64
|
+
deny_key: 'permissions.deny',
|
|
65
|
+
examples: [
|
|
66
|
+
// "Claude Code checks file permissions against `Edit(path)` and
|
|
67
|
+
// `Read(path)` rules only. … Use `Edit(docs/**)` in place of
|
|
68
|
+
// `Write(docs/**)`, `NotebookEdit(docs/**)`, or `MultiEdit(docs/**)`."
|
|
69
|
+
'Edit(docs/**)',
|
|
70
|
+
// "To block Claude's file tools from reading a file or directory,
|
|
71
|
+
// add a `Read` deny rule for its path, such as `Read(./.env)` or
|
|
72
|
+
// `Read(./secrets/**)`."
|
|
73
|
+
'Read(./secrets/**)',
|
|
74
|
+
// "`Bash(npm run build)` | Matches the exact command `npm run build`"
|
|
75
|
+
'Bash(npm run build)',
|
|
76
|
+
// "A `*` at the end, with a space before it, also matches the bare
|
|
77
|
+
// command. `Bash(ls *)` matches `ls`, and `Bash(git log *)` matches
|
|
78
|
+
// `git log`. That holds only when the trailing `*` is the rule's
|
|
79
|
+
// only wildcard: `Bash(* --help *)` matches `npm --help x` but not
|
|
80
|
+
// `npm --help`."
|
|
81
|
+
'Bash(ls *)',
|
|
82
|
+
],
|
|
83
|
+
},
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
/** The row for `host`, or `null` when nothing is established for it. */
|
|
87
|
+
export function syntaxFor(host: string): HostPermissionSyntax | null {
|
|
88
|
+
return HOST_PERMISSION_SYNTAX[host] ?? null;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* The path spec a rule carries.
|
|
93
|
+
*
|
|
94
|
+
* A trailing `/` means the directory's contents, which the host spells `/**`.
|
|
95
|
+
* Everything else is passed through as the consumer wrote it: "a deny or ask
|
|
96
|
+
* rule whose path isn't usable as a gitignore pattern still guards that exact
|
|
97
|
+
* path", and widening `src/generated` to `src/generated/**` on a guess would be
|
|
98
|
+
* the same guess the classifier refuses.
|
|
99
|
+
*/
|
|
100
|
+
function pathSpec(token: string): string {
|
|
101
|
+
return token.endsWith('/') ? `${token}**` : token;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* The deny rows `c` becomes on `host`. Empty for prose, and empty for a host
|
|
106
|
+
* with no established row.
|
|
107
|
+
*
|
|
108
|
+
* A COMMAND BECOMES TWO ROWS, and the reason is NOT the one an earlier version
|
|
109
|
+
* of this comment gave. It claimed `Bash(x *)` never matches the bare `x`; the
|
|
110
|
+
* page says the opposite one line above the sentence that was read — "A `*` at
|
|
111
|
+
* the end, with a space before it, also matches the bare command." A review
|
|
112
|
+
* caught it, and it had reached the roadmap as that step's "one non-obvious
|
|
113
|
+
* finding", so the correction is recorded rather than quietly applied.
|
|
114
|
+
*
|
|
115
|
+
* The real reason is the page's own qualifier: the bare-command match "holds
|
|
116
|
+
* only when the trailing `*` is the rule's only wildcard". A consumer token
|
|
117
|
+
* carrying its own `*` breaks that, and the exact row is what still guards the
|
|
118
|
+
* plain command then. One row would be right for most tokens and silently
|
|
119
|
+
* wrong for those — Risk 3 in the register, "a rule in the wrong syntax is
|
|
120
|
+
* accepted by the file and enforced by nothing".
|
|
121
|
+
*
|
|
122
|
+
* A READ no-go renders `Read(...)` AND `Edit(...)`. The `Read` deny covers the
|
|
123
|
+
* Edit and Write tools on the same path, but the page names the exception:
|
|
124
|
+
* "NotebookEdit isn't covered, so add an `Edit` deny rule for paths no tool may
|
|
125
|
+
* change." A read no-go over a directory holding notebooks would otherwise
|
|
126
|
+
* leave NotebookEdit able to change it.
|
|
127
|
+
*/
|
|
128
|
+
export function denyRulesFor(host: string, c: NoGoClassification): readonly string[] {
|
|
129
|
+
if (syntaxFor(host) === null || c.action === null || c.token === null) return [];
|
|
130
|
+
if (c.kind === 'command') return [`Bash(${c.token})`, `Bash(${c.token} *)`];
|
|
131
|
+
if (c.kind === 'path') {
|
|
132
|
+
const spec = pathSpec(c.token);
|
|
133
|
+
return c.action === 'read' ? [`Read(${spec})`, `Edit(${spec})`] : [`Edit(${spec})`];
|
|
134
|
+
}
|
|
135
|
+
return [];
|
|
136
|
+
}
|
|
@@ -104,6 +104,16 @@ export interface ThinInstalledLayerOptions {
|
|
|
104
104
|
readonly packageRoot: string;
|
|
105
105
|
/** Absolute paths the conflict tracker preserved; never rewritten here. */
|
|
106
106
|
readonly preserved?: ReadonlySet<string>;
|
|
107
|
+
/**
|
|
108
|
+
* The root stub `Body:` pointers are built on, when it is not the package:
|
|
109
|
+
* the staged runtime, which outlives a cleared package-manager cache.
|
|
110
|
+
*/
|
|
111
|
+
readonly bodyLinkRoot?: string | null;
|
|
112
|
+
/**
|
|
113
|
+
* Called with each path this pass rewrote — the installer logs it, because
|
|
114
|
+
* the transaction log is read back as proof the bytes on disk are ours.
|
|
115
|
+
*/
|
|
116
|
+
readonly onWrite?: (target: string) => void;
|
|
107
117
|
}
|
|
108
118
|
|
|
109
119
|
/**
|
|
@@ -115,7 +125,7 @@ export interface ThinInstalledLayerOptions {
|
|
|
115
125
|
export function thinInstalledRuleLayer(opts: ThinInstalledLayerOptions): ThinInstalledLayerResult {
|
|
116
126
|
const packageRoot = path.resolve(opts.packageRoot);
|
|
117
127
|
const bodySourceDir = path.join(packageRoot, 'dist', 'agent-src', 'rules');
|
|
118
|
-
const bodyLinkPrefix = absoluteBodyLinkPrefix(packageRoot);
|
|
128
|
+
const bodyLinkPrefix = absoluteBodyLinkPrefix(opts.bodyLinkRoot ?? packageRoot);
|
|
119
129
|
const preserved = opts.preserved ?? new Set<string>();
|
|
120
130
|
|
|
121
131
|
// Scope is `null` on purpose. The copy already applied the install's rule
|
|
@@ -207,6 +217,7 @@ export function thinInstalledRuleLayer(opts: ThinInstalledLayerOptions): ThinIns
|
|
|
207
217
|
try {
|
|
208
218
|
if (next !== installed) {
|
|
209
219
|
fs.writeFileSync(target, next, 'utf-8');
|
|
220
|
+
opts.onWrite?.(target);
|
|
210
221
|
rewritten += 1;
|
|
211
222
|
}
|
|
212
223
|
thinned += 1;
|