@event4u/agent-config 16.4.0 → 17.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.augment-plugin/marketplace.json +3 -3
- package/.augment-plugin/plugin.json +1 -1
- package/.claude-plugin/marketplace.json +2 -2
- package/.claude-plugin/skills/install-agent-config/SKILL.md +4 -4
- package/CHANGELOG.md +483 -669
- package/CONTRIBUTING.md +47 -0
- package/README.md +25 -25
- package/dist/agent-src/commands/{design.md → agent-design.md} +11 -7
- package/dist/agent-src/commands/agents/init.md +66 -3
- package/dist/agent-src/commands/agents/user/init.md +3 -0
- package/dist/agent-src/commands/{optimize/deep.md → analyze/and-optimize.md} +72 -33
- package/dist/agent-src/commands/analyze/inbox.md +168 -37
- package/dist/agent-src/commands/analyze/pr.md +144 -0
- package/dist/agent-src/commands/analyze/{repo.md → reference.md} +85 -14
- package/dist/agent-src/commands/analyze/roadmap-repos.md +19 -10
- package/dist/agent-src/commands/analyze.md +28 -12
- package/dist/agent-src/commands/audit.md +115 -0
- package/dist/agent-src/commands/brand/review.md +13 -2
- package/dist/agent-src/commands/brand/tokens.md +3 -3
- package/dist/agent-src/commands/brand/voice.md +8 -5
- package/dist/agent-src/commands/brand.md +2 -2
- package/dist/agent-src/commands/challenge-me/closure.md +25 -0
- package/dist/agent-src/commands/design-system/import.md +8 -3
- package/dist/agent-src/commands/design-system/sync.md +98 -0
- package/dist/agent-src/commands/design-system.md +6 -1
- package/dist/agent-src/commands/evals/analyze.json +44 -0
- package/dist/agent-src/commands/evals/audit.json +12 -0
- package/dist/agent-src/commands/evals/retro.json +12 -0
- package/dist/agent-src/commands/fix/ci.md +10 -8
- package/dist/agent-src/commands/ghostwriter/write.md +22 -0
- package/dist/agent-src/commands/memory/learn-low-impact.md +70 -83
- package/dist/agent-src/commands/memory/propose.md +12 -0
- package/dist/agent-src/commands/memory.md +1 -1
- package/dist/agent-src/commands/optimize.md +4 -3
- package/dist/agent-src/commands/post-as/me.md +18 -0
- package/dist/agent-src/commands/pr/create.md +17 -342
- package/dist/agent-src/commands/pr/merge.md +129 -368
- package/dist/agent-src/commands/retro.md +121 -0
- package/dist/agent-src/commands/review/routing.md +1 -1
- package/dist/agent-src/commands/roadmap/next.md +4 -1
- package/dist/agent-src/commands/roadmap/process-full.md +46 -333
- package/dist/agent-src/commands/roadmap/triage-parked.md +6 -2
- package/dist/agent-src/commands/team-knowledge/consolidate.md +2 -2
- package/dist/agent-src/commands/team-knowledge.md +1 -1
- package/dist/agent-src/commands/threat-model.md +1 -1
- package/dist/agent-src/commands/upstream-contribute.md +91 -101
- package/dist/agent-src/commands/worktree/cleanup.md +18 -11
- package/dist/agent-src/contexts/contracts/consumer-agents-md-guide.md +54 -0
- package/dist/agent-src/contexts/execution/analysis-loop.md +137 -0
- package/dist/agent-src/contexts/execution/auto-dispatch-classification.md +3 -3
- package/dist/agent-src/contexts/execution/decision-closure-execution.md +1 -1
- package/dist/agent-src/contexts/execution/host-capability-manifest.md +6 -0
- package/dist/agent-src/contexts/execution/orchestration-telemetry.md +11 -4
- package/dist/agent-src/contexts/execution/pr-create-branches-content.md +250 -0
- package/dist/agent-src/contexts/execution/pr-create-branches-freshness.md +150 -0
- package/dist/agent-src/contexts/execution/pr-merge-queue.md +287 -0
- package/dist/agent-src/contexts/execution/pr-merge-sync.md +276 -0
- package/dist/agent-src/contexts/execution/pr-merge-trust-boundary.md +69 -0
- package/dist/agent-src/contexts/execution/process-full-all.md +233 -0
- package/dist/agent-src/contexts/execution/process-full-delivery.md +231 -0
- package/dist/agent-src/contexts/execution/roadmap-execution-contract-branches.md +42 -0
- package/dist/agent-src/contexts/execution/roadmap-execution-contract.md +1 -35
- package/dist/agent-src/contexts/execution/roadmap-process-loop-close.md +235 -0
- package/dist/agent-src/contexts/execution/roadmap-process-loop-prescan.md +216 -0
- package/dist/agent-src/contexts/execution/roadmap-process-loop-run.md +253 -0
- package/dist/agent-src/contexts/execution/roadmap-process-loop-set.md +212 -0
- package/dist/agent-src/contexts/execution/roadmap-process-loop.md +25 -864
- package/dist/agent-src/contexts/execution/subagent-spawn-contract.md +14 -2
- package/dist/agent-src/contexts/execution/subagent-steering.md +65 -8
- package/dist/agent-src/contexts/model-recommendations.md +5 -5
- package/dist/agent-src/contexts/subagent-configuration.md +1 -1
- package/dist/agent-src/guidelines/agent-infra/api-cost-levers.md +4 -3
- package/dist/agent-src/guidelines/agent-infra/model-recommendation.md +11 -5
- package/dist/agent-src/guidelines/agent-infra/rule-body-migration-inventory.md +1 -1
- package/dist/agent-src/guidelines/agent-infra/self-improvement-pipeline.md +47 -24
- package/dist/agent-src/guidelines/design-antipatterns.md +6 -1
- package/dist/agent-src/guidelines/design-asset-discipline.md +17 -0
- package/dist/agent-src/guidelines/design-fidelity-routing.md +1 -0
- package/dist/agent-src/guidelines/php/api-design.md +10 -1
- package/dist/agent-src/rules/brand-source-of-truth.md +7 -6
- package/dist/agent-src/rules/code-provenance.md +1 -1
- package/dist/agent-src/rules/context-hygiene.md +0 -1
- package/dist/agent-src/rules/design-fidelity.md +12 -13
- package/dist/agent-src/rules/external-reference-deep-dive.md +2 -2
- package/dist/agent-src/rules/fix-what-you-see.md +1 -1
- package/dist/agent-src/rules/low-impact-corpus-privacy-floor.md +14 -15
- package/dist/agent-src/rules/missing-skill-recovery.md +12 -11
- package/dist/agent-src/rules/neighbour-precedence.md +1 -1
- package/dist/agent-src/rules/recurring-criticism.md +1 -1
- package/dist/agent-src/rules/roadmap-ci-steps-policy.md +0 -2
- package/dist/agent-src/rules/self-repair-loop.md +2 -2
- package/dist/agent-src/rules/token-budget-discipline.md +2 -2
- package/dist/agent-src/scripts/dashboard_mode.ts +4 -1
- package/dist/agent-src/scripts/roadmap_age.ts +175 -0
- package/dist/agent-src/scripts/update_roadmap_progress.ts +10 -2
- package/dist/agent-src/skills/accessibility-auditor/SKILL.md +3 -3
- package/dist/agent-src/skills/accessibility-auditor/data/aria-patterns.csv +2 -0
- package/dist/agent-src/skills/accessibility-auditor/data/manifest.json +3 -3
- package/dist/agent-src/skills/agent-security-review/SKILL.md +2 -2
- package/dist/agent-src/skills/agents-md-thin-root/SKILL.md +12 -4
- package/dist/agent-src/skills/ai-code-blindspots/SKILL.md +7 -0
- package/dist/agent-src/skills/ai-council/references/advanced-modes.md +11 -1
- package/dist/agent-src/skills/ai-council/references/cost-and-redaction.md +7 -0
- package/dist/agent-src/skills/ai-council/references/execution-modes.md +7 -0
- package/dist/agent-src/skills/ai-council/references/output-and-synthesis.md +19 -0
- package/dist/agent-src/skills/ai-council/references/procedure.md +7 -0
- package/dist/agent-src/skills/api-design/SKILL.md +2 -2
- package/dist/agent-src/skills/api-endpoint/SKILL.md +2 -2
- package/dist/agent-src/skills/authz-review/SKILL.md +5 -3
- package/dist/agent-src/skills/blade-ui/SKILL.md +2 -2
- package/dist/agent-src/skills/brand/SKILL.md +7 -3
- package/dist/agent-src/skills/brand-asset-generation/SKILL.md +13 -6
- package/dist/agent-src/skills/brand-audit/SKILL.md +2 -1
- package/dist/agent-src/skills/brand-identity/SKILL.md +5 -4
- package/dist/agent-src/skills/brand-strategy/SKILL.md +5 -4
- package/dist/agent-src/skills/brand-to-tokens/SKILL.md +18 -39
- package/dist/agent-src/skills/brand-to-tokens/templates/marp-brand-deck.md.example +2 -2
- package/dist/agent-src/skills/brand-to-tokens/templates/reveal-brand-deck.yaml +2 -2
- package/dist/agent-src/skills/canvas-design/SKILL.md +16 -4
- package/dist/agent-src/skills/competitive-positioning/SKILL.md +2 -2
- package/dist/agent-src/skills/composer-packages/SKILL.md +18 -0
- package/dist/agent-src/skills/condense-memory/SKILL.md +1 -1
- package/dist/agent-src/skills/content-funnel-design/SKILL.md +8 -1
- package/dist/agent-src/skills/context-authoring/SKILL.md +1 -1
- package/dist/agent-src/skills/context-document/SKILL.md +2 -2
- package/dist/agent-src/skills/corpus-grounding/SKILL.md +6 -6
- package/dist/agent-src/skills/corpus-grounding/scripts/decision_engine.ts +13 -11
- package/dist/agent-src/skills/corpus-grounding/scripts/ground.mjs +1706 -0
- package/dist/agent-src/skills/corpus-grounding/scripts/schema_validator.ts +7 -1
- package/dist/agent-src/skills/dashboard-design/SKILL.md +1 -1
- package/dist/agent-src/skills/data-flow-mapper/SKILL.md +5 -2
- package/dist/agent-src/skills/database/SKILL.md +5 -4
- package/dist/agent-src/skills/decision-record/references/weighted-matrix.md +12 -0
- package/dist/agent-src/skills/deep-reading-analyst/SKILL.md +1 -1
- package/dist/agent-src/skills/dependency-upgrade/SKILL.md +61 -11
- package/dist/agent-src/skills/description-assist/SKILL.md +1 -1
- package/dist/agent-src/skills/design-intelligence/SKILL.md +1 -1
- package/dist/agent-src/skills/design-intelligence/data/landing.csv +1 -1
- package/dist/agent-src/skills/design-intelligence/references/context-and-registers.md +10 -2
- package/dist/agent-src/skills/design-intelligence/references/design-languages.md +1 -1
- package/dist/agent-src/skills/design-intelligence/references/design-rules-checklist.md +4 -3
- package/dist/agent-src/skills/design-intelligence/references/integration-mapping.md +25 -22
- package/dist/agent-src/skills/{wireframe → design-review}/references/story-beat-ledger.schema.json +1 -1
- package/dist/agent-src/skills/design-review/references/verification-automation.md +11 -3
- package/dist/agent-src/skills/design-system-capture/SKILL.md +15 -10
- package/dist/agent-src/skills/design-system-capture/references/design-system-json.md +20 -5
- package/dist/agent-src/skills/design-system-capture/references/import-procedure.md +2 -2
- package/dist/agent-src/skills/design-tokens/SKILL.md +23 -23
- package/dist/agent-src/skills/design-tokens/scripts/tokens.mjs +1037 -0
- package/dist/agent-src/skills/design-tokens/scripts/tokens.ts +336 -13
- package/dist/agent-src/skills/design-tokens/templates/design-tokens-starter.json +52 -53
- package/dist/agent-src/skills/docker/SKILL.md +1 -1
- package/dist/agent-src/skills/estimate-ticket/SKILL.md +1 -1
- package/dist/agent-src/skills/existing-ui-audit/SKILL.md +14 -276
- package/dist/agent-src/skills/existing-ui-audit/procedure.yaml +44 -0
- package/dist/agent-src/skills/existing-ui-audit/references/anti-slop-cross-reference.md +1 -1
- package/dist/agent-src/skills/existing-ui-audit/references/steps/00-inspect-stack-and-input.md +4 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/01-enumerate-components.md +26 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/01b-detect-component-taxonomy.md +7 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/02-identify-design-system.md +12 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/03-detect-design-tokens.md +35 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/04-detect-shadcn-inventory.md +13 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/04b-live-storybook-read.md +26 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/05-list-reusable-patterns.md +14 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/06-match-candidates.md +52 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/07-greenfield-branch.md +29 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/08-a11y-baseline.md +40 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/09-validate-and-write.md +5 -0
- package/dist/agent-src/skills/experiment-loop/SKILL.md +1 -1
- package/dist/agent-src/skills/fe-design/references/design-patterns.md +65 -4
- package/dist/agent-src/skills/fe-design/references/design-read-and-memory.md +1 -1
- package/dist/agent-src/skills/fe-design/references/source-led-port.md +1 -1
- package/dist/agent-src/skills/finishing-a-development-branch/SKILL.md +6 -6
- package/dist/agent-src/skills/flux/SKILL.md +1 -1
- package/dist/agent-src/skills/form-handler/SKILL.md +15 -2
- package/dist/agent-src/skills/frontend-render-security/SKILL.md +9 -0
- package/dist/agent-src/skills/git-workflow/SKILL.md +2 -2
- package/dist/agent-src/skills/git-workflow/references/branch-update.md +7 -0
- package/dist/agent-src/skills/git-workflow/references/commit-subject.md +12 -0
- package/dist/agent-src/skills/git-workflow/references/push-closes-its-loop.md +10 -0
- package/dist/agent-src/skills/gtm-launch/SKILL.md +8 -1
- package/dist/agent-src/skills/html-deck/SKILL.md +7 -2
- package/dist/agent-src/skills/humanizer/SKILL.md +16 -3
- package/dist/agent-src/skills/humanizer/references/anti-aiisms.md +13 -1
- package/dist/agent-src/skills/humanizer/references/fixtures.md +8 -0
- package/dist/agent-src/skills/iconography/SKILL.md +4 -2
- package/dist/agent-src/skills/image-provider-routing/SKILL.md +16 -5
- package/dist/agent-src/skills/js-library-packaging/SKILL.md +5 -4
- package/dist/agent-src/skills/js-library-packaging/scripts/check_package_surface.mjs +197 -0
- package/dist/agent-src/skills/judge-artifact-completeness/SKILL.md +1 -1
- package/dist/agent-src/skills/judge-security-auditor/SKILL.md +2 -2
- package/dist/agent-src/skills/launch-readiness/SKILL.md +18 -22
- package/dist/agent-src/skills/learning-to-rule-or-skill/SKILL.md +5 -5
- package/dist/agent-src/skills/livewire/SKILL.md +1 -1
- package/dist/agent-src/skills/llm-provider-knowledge/SKILL.md +18 -0
- package/dist/agent-src/skills/logo-generation/SKILL.md +21 -11
- package/dist/agent-src/skills/market-entry-analysis/SKILL.md +6 -1
- package/dist/agent-src/skills/markitdown/SKILL.md +1 -1
- package/dist/agent-src/skills/memory-consolidation/SKILL.md +2 -2
- package/dist/agent-src/skills/messaging-architecture/SKILL.md +8 -1
- package/dist/agent-src/skills/motion-choreographer/SKILL.md +2 -2
- package/dist/agent-src/skills/playwright-testing/SKILL.md +2 -0
- package/dist/agent-src/skills/positioning-strategy/SKILL.md +10 -2
- package/dist/agent-src/skills/prediction-pool-optimizer/references/ev-fixtures.md +13 -0
- package/dist/agent-src/skills/prediction-pool-optimizer/references/odds-and-bonus.md +7 -0
- package/dist/agent-src/skills/project-analysis-core/SKILL.md +1 -1
- package/dist/agent-src/skills/project-analysis-hypothesis-driven/SKILL.md +1 -1
- package/dist/agent-src/skills/project-analyzer/SKILL.md +14 -75
- package/dist/agent-src/skills/project-analyzer/procedure.yaml +39 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/01-project-overview.md +9 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/02-architecture.md +7 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/03-data-layer.md +6 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/04-business-domains.md +7 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/05-api-surface.md +6 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/06-service-map.md +6 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/07-module-inventory.md +6 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/08-infrastructure-and-testing.md +5 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/09-agent-docs-audit.md +6 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/10-gap-analysis.md +6 -0
- package/dist/agent-src/skills/quality-tools/references/js-ts-tools.md +10 -0
- package/dist/agent-src/skills/quality-tools/references/php-tools.md +13 -0
- package/dist/agent-src/skills/quality-tools/references/python-tools.md +11 -0
- package/dist/agent-src/skills/react-native-setup/SKILL.md +7 -2
- package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +5 -1
- package/dist/agent-src/skills/react-shadcn-ui/references/registry.md +13 -0
- package/dist/agent-src/skills/react-shadcn-ui/scripts/shadcn_add.mjs +315 -0
- package/dist/agent-src/skills/react-shadcn-ui/scripts/shadcn_add.ts +6 -6
- package/dist/agent-src/skills/receiving-code-review/SKILL.md +1 -1
- package/dist/agent-src/skills/refine-ticket/SKILL.md +2 -2
- package/dist/agent-src/skills/release-comms/SKILL.md +2 -1
- package/dist/agent-src/skills/repomix-packer/SKILL.md +2 -2
- package/dist/agent-src/skills/requesting-code-review/SKILL.md +3 -3
- package/dist/agent-src/skills/roadmap-management/references/archival.md +3 -3
- package/dist/agent-src/skills/roadmap-management/references/authoring.md +9 -2
- package/dist/agent-src/skills/roadmap-management/references/dashboard.md +3 -3
- package/dist/agent-src/skills/roadmap-management/references/lifecycle.md +3 -3
- package/dist/agent-src/skills/roadmap-writing/SKILL.md +4 -4
- package/dist/agent-src/skills/rtk-output-filtering/SKILL.md +1 -1
- package/dist/agent-src/skills/rule-writing/SKILL.md +1 -2
- package/dist/agent-src/skills/security/SKILL.md +41 -5
- package/dist/agent-src/skills/skill-improvement-pipeline/SKILL.md +5 -3
- package/dist/agent-src/skills/skill-reviewer/SKILL.md +1 -1
- package/dist/agent-src/skills/skill-writing/SKILL.md +23 -8
- package/dist/agent-src/skills/skill-writing/references/section-patterns.md +19 -1
- package/dist/agent-src/skills/source-discovery/SKILL.md +3 -3
- package/dist/agent-src/skills/sql-writing/SKILL.md +2 -2
- package/dist/agent-src/skills/standards-from-config/SKILL.md +2 -2
- package/dist/agent-src/skills/storybook-workshop/SKILL.md +5 -0
- package/dist/agent-src/skills/storybook-workshop/scripts/story_contrast_floor.mjs +99 -0
- package/dist/agent-src/skills/subagent-orchestration/SKILL.md +13 -13
- package/dist/agent-src/skills/subagent-orchestration/prompts/README.md +4 -3
- package/dist/agent-src/skills/svg-authoring/SKILL.md +324 -0
- package/dist/agent-src/skills/systematic-debugging/SKILL.md +2 -2
- package/dist/agent-src/skills/tailwind-engineer/SKILL.md +8 -3
- package/dist/agent-src/skills/tailwind-engineer/scripts/tailwind_config_gen.mjs +482 -0
- package/dist/agent-src/skills/test-case-discovery/SKILL.md +1 -1
- package/dist/agent-src/skills/threat-modeling/SKILL.md +8 -1
- package/dist/agent-src/skills/threat-modeling/data/manifest.json +5 -2
- package/dist/agent-src/skills/threat-modeling/data/reasoning.csv +10 -10
- package/dist/agent-src/skills/threat-modeling/data/surfaces.csv +11 -10
- package/dist/agent-src/skills/threat-modeling/data/threats.csv +34 -20
- package/dist/agent-src/skills/type-design/SKILL.md +196 -0
- package/dist/agent-src/skills/type-design/references/font-spec.md +90 -0
- package/dist/agent-src/skills/type-design/references/gates.md +113 -0
- package/dist/agent-src/skills/type-design/references/toolchain.md +66 -0
- package/dist/agent-src/skills/typography-system/SKILL.md +21 -11
- package/dist/agent-src/skills/typography-system/references/worked-scales.md +85 -0
- package/dist/agent-src/skills/ui-apply-generic/SKILL.md +1 -1
- package/dist/agent-src/skills/universal-project-analysis/SKILL.md +1 -1
- package/dist/agent-src/skills/upstream-contribute/SKILL.md +120 -125
- package/dist/agent-src/skills/using-git-worktrees/SKILL.md +1 -0
- package/dist/agent-src/skills/verify-repair-loop/SKILL.md +1 -1
- package/dist/agent-src/skills/voice-and-tone-design/SKILL.md +71 -2
- package/dist/agent-src/skills/wireframe/SKILL.md +5 -2
- package/dist/agent-src/skills/worktree-lifecycle/SKILL.md +16 -14
- package/dist/agent-src/templates/AGENTS.md +1 -1
- package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/dist/agent-src/templates/agents/proposal.example.md +1 -1
- package/dist/agent-src/templates/github-workflows/advisories-daily.yml +85 -0
- package/dist/agent-src/templates/roadmaps.md +39 -1
- package/dist/agent-src/templates/scripts/check_memory.ts +2 -2
- package/dist/agent-src/templates/scripts/historical-bug-patterns.example.yml +13 -1
- package/dist/agent-src/templates/scripts/work_engine/cli.ts +17 -0
- package/dist/agent-src/templates/scripts/work_engine/cli_args.ts +10 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/scaffold.ts +22 -13
- package/dist/agent-src/templates/scripts/work_engine/dispatcher.ts +18 -4
- package/dist/agent-src/templates/scripts/work_engine/procedure/checks.ts +283 -0
- package/dist/agent-src/templates/scripts/work_engine/procedure/run.ts +432 -0
- package/dist/agent-src/templates/scripts/work_engine/procedure/sidecar.ts +185 -0
- package/dist/agent-src/templates/scripts/work_engine/state.ts +3 -0
- package/dist/cli/commands/uiRender.js +265 -13
- package/dist/cli/commands/uiRenderAsset.js +1316 -0
- package/dist/cli/commands/uiRenderAssetCompare.js +752 -0
- package/dist/cli/commands/uiRenderAssetFonts.js +158 -0
- package/dist/cli/commands/uiRenderAssetGrid.js +265 -0
- package/dist/cli/commands/uiRenderAssetGrounds.js +323 -0
- package/dist/cli/commands/uiRenderAssetIsolation.js +85 -0
- package/dist/cli/commands/uiRenderAssetTypes.js +133 -0
- package/dist/cli/initRouting.js +1 -1
- package/dist/cli/main.js +47 -1
- package/dist/cli/mcp/dispatch.js +31 -9
- package/dist/cli/python/knowledge_ingest.js +7 -39
- package/dist/cli/python/workspace_secrets.js +4 -177
- package/dist/cli/registry.js +5 -2
- package/dist/cli-delegate/archive_completed_roadmaps.js +3 -2
- package/dist/cli-delegate/check_update_banner.js +635 -266
- package/dist/cli-delegate/{chunk-AED2VQGM.js → chunk-2CX7NWRB.js} +233 -437
- package/dist/cli-delegate/{chunk-F3QDG2GT.js → chunk-2SFOOFJJ.js} +259 -159
- package/dist/cli-delegate/chunk-2Y5AMLMY.js +136 -0
- package/dist/cli-delegate/{chunk-OKJUIAPS.js → chunk-4E2W63DA.js} +1 -62
- package/dist/cli-delegate/{chunk-6SRJTYJS.js → chunk-4SHNERBL.js} +37 -16
- package/dist/cli-delegate/chunk-5VO3RTMV.js +208 -0
- package/dist/cli-delegate/chunk-6E2LDY4F.js +27 -0
- package/dist/cli-delegate/{chunk-XQTPXKFA.js → chunk-6ZD2QZMN.js} +8 -17
- package/dist/cli-delegate/{chunk-6V5FMA3P.js → chunk-7CEI2YPS.js} +1 -1
- package/dist/cli-delegate/{chunk-DMSZHXZS.js → chunk-7DRWULEQ.js} +80 -7
- package/dist/cli-delegate/chunk-7NXCZSDL.js +54 -0
- package/dist/cli-delegate/chunk-AX3U3UWJ.js +328 -0
- package/dist/cli-delegate/{chunk-WOKWX5PL.js → chunk-BKALSTBZ.js} +18 -3
- package/dist/cli-delegate/chunk-BMGUGSY6.js +103 -0
- package/dist/cli-delegate/chunk-BYV46VRM.js +3309 -0
- package/dist/cli-delegate/{chunk-5GPULQBE.js → chunk-CAL76ADI.js} +4215 -682
- package/dist/cli-delegate/chunk-DSY6LLCQ.js +127 -0
- package/dist/cli-delegate/chunk-E6XNBVE4.js +581 -0
- package/dist/cli-delegate/{chunk-ZUZKZYCN.js → chunk-ESUNQ5XR.js} +46 -10
- package/dist/cli-delegate/{chunk-G5VVIZRC.js → chunk-F7HLSW6P.js} +1 -1
- package/dist/cli-delegate/chunk-FIEEOH5C.js +133 -0
- package/dist/cli-delegate/chunk-FKYZOWVD.js +719 -0
- package/dist/cli-delegate/chunk-GOMILC3O.js +918 -0
- package/dist/cli-delegate/chunk-I4KJYVPB.js +69 -0
- package/dist/cli-delegate/{chunk-JQOM7TTM.js → chunk-IDAOTDPE.js} +1 -100
- package/dist/cli-delegate/chunk-IROAQ77A.js +137 -0
- package/dist/cli-delegate/chunk-J2SJZICO.js +698 -0
- package/dist/cli-delegate/{chunk-6YQC2HLF.js → chunk-JHMMWNJ2.js} +54 -40
- package/dist/cli-delegate/{chunk-WQWXGIWB.js → chunk-M6CRG5O6.js} +165 -15
- package/dist/cli-delegate/{chunk-PHD7OOLE.js → chunk-MQ2UDEGV.js} +14 -3
- package/dist/cli-delegate/chunk-NTM7G2V4.js +220 -0
- package/dist/cli-delegate/chunk-PV7S5DPJ.js +175 -0
- package/dist/cli-delegate/{chunk-F7DQWYR5.js → chunk-RAXQOETZ.js} +6 -2
- package/dist/cli-delegate/{chunk-T7XSJSUQ.js → chunk-SIOMDAKL.js} +980 -784
- package/dist/cli-delegate/{chunk-KR6EM23A.js → chunk-TULVDQ4L.js} +3 -48
- package/dist/cli-delegate/chunk-UUYEKXKR.js +20 -0
- package/dist/cli-delegate/{chunk-7XGD2OEU.js → chunk-UXWHY6CQ.js} +2 -1
- package/dist/cli-delegate/{chunk-PWX7CKMD.js → chunk-VC3ECUEK.js} +1 -1
- package/dist/cli-delegate/{chunk-KXXWJTDO.js → chunk-WMNYVIYX.js} +1 -1
- package/dist/cli-delegate/chunk-XCY5KKUC.js +181 -0
- package/dist/cli-delegate/{chunk-H76PHZBI.js → chunk-XLY5G3CM.js} +14 -19
- package/dist/cli-delegate/cmd_adr_effective.js +41 -2
- package/dist/cli-delegate/cmd_analyze_session.js +7 -7
- package/dist/cli-delegate/cmd_brand_status.js +1287 -10
- package/dist/cli-delegate/cmd_ci_settle.js +330 -0
- package/dist/cli-delegate/cmd_conformance.js +669 -822
- package/dist/cli-delegate/cmd_doctor.js +26 -16
- package/dist/cli-delegate/cmd_doctor_neighbours.js +10 -7
- package/dist/cli-delegate/cmd_explain.js +9 -24
- package/dist/cli-delegate/cmd_export.js +14 -11
- package/dist/cli-delegate/cmd_fleet.js +5 -3
- package/dist/cli-delegate/cmd_git_convention.js +8 -4
- package/dist/cli-delegate/cmd_handoff.js +79 -242
- package/dist/cli-delegate/cmd_mcp_available.js +1 -1
- package/dist/cli-delegate/cmd_memory_get.js +4 -2
- package/dist/cli-delegate/cmd_migrate.js +2 -2
- package/dist/cli-delegate/cmd_packs_active.js +2 -2
- package/dist/cli-delegate/cmd_preflight.js +7 -5
- package/dist/cli-delegate/cmd_prune.js +16 -13
- package/dist/cli-delegate/cmd_route_audit.js +11 -8
- package/dist/cli-delegate/cmd_route_explain.js +649 -16
- package/dist/cli-delegate/cmd_session_recycle.js +15 -6
- package/dist/cli-delegate/cmd_settings_check.js +2 -2
- package/dist/cli-delegate/cmd_settings_get.js +1 -1
- package/dist/cli-delegate/cmd_settings_migrate.js +14 -11
- package/dist/cli-delegate/cmd_settings_set.js +1 -1
- package/dist/cli-delegate/cmd_sync.js +16 -13
- package/dist/cli-delegate/cmd_uninstall.js +185 -31
- package/dist/cli-delegate/cmd_update.js +67 -3
- package/dist/cli-delegate/cmd_upgrade.js +38 -7
- package/dist/cli-delegate/cmd_validate.js +16 -13
- package/dist/cli-delegate/cmd_versions.js +1 -1
- package/dist/cli-delegate/dashboard_mode.js +1 -1
- package/dist/cli-delegate/gate_execute.js +4 -3
- package/dist/cli-delegate/roadmap_age.js +22 -0
- package/dist/cli-delegate/roadmap_gates.js +4 -3
- package/dist/cli-delegate/update_roadmap_progress.js +3 -2
- package/dist/cli-delegate/upgrade_unattended-VVL6JLSX.js +541 -0
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +409 -201
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +8 -8
- package/dist/discovery/dormancy-report.md +1 -1
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +36 -27
- package/dist/discovery/trust-report.md +3 -3
- package/dist/discovery/workspaces.json +25 -16
- package/dist/hooks/chat_history.chunk.cjs +6852 -0
- package/dist/hooks/chat_history.chunk.cjs.sha256 +1 -0
- package/dist/hooks/dispatch.js +17706 -18627
- package/dist/hooks/dispatch.sha256 +1 -1
- package/dist/hooks/egress_engine.chunk.cjs +915 -0
- package/dist/hooks/egress_engine.chunk.cjs.sha256 +1 -0
- package/dist/hooks/svg_rules.chunk.cjs +1858 -0
- package/dist/hooks/svg_rules.chunk.cjs.sha256 +1 -0
- package/dist/install/conflict.js +36 -6
- package/dist/install/conflictTracker.js +81 -7
- package/dist/install/detect.js +3 -3
- package/dist/install/hostPermissionsAdapter.js +106 -0
- package/dist/install/install.mjs +3117 -1949
- package/dist/install/installThinLayer.js +1 -1
- package/dist/install/manifestFiles.js +21 -0
- package/dist/install/noGoDenyRows.js +300 -0
- package/dist/install/noGoRules.js +368 -0
- package/dist/install/ownershipLedger.js +133 -0
- package/dist/install/plan.js +1 -1
- package/dist/install/preflight.js +39 -8
- package/dist/install/preserve.js +74 -12
- package/dist/install/recordedOwnership.js +88 -5
- package/dist/install/rule_scope.js +20 -3
- package/dist/install/stagedRuntime.js +455 -0
- package/dist/install/toolsArg.js +19 -0
- package/dist/install/userPin.js +47 -0
- package/dist/install/wizard-plan.js +26 -4
- package/dist/mcp/awesome-mcp-servers.row.md +1 -1
- package/dist/mcp/mcp-cloudflare-catalogue.json +3 -2
- package/dist/mcp/registry-manifest.json +6 -5
- package/dist/mcp/server.json +3 -3
- package/dist/mcp/server.mjs +9814 -5333
- package/dist/router.json +1 -1
- package/dist/scripts/_lib/agent_settings.js +7 -12
- package/dist/scripts/_lib/asset_render_record.js +219 -0
- package/dist/scripts/_lib/claude_builtin_names.js +9 -4
- package/dist/scripts/_lib/claude_settings_hooks.js +102 -34
- package/dist/scripts/_lib/egress_rules.js +766 -0
- package/dist/scripts/_lib/environment_detector.js +24 -33
- package/dist/scripts/_lib/global_deploy_inventory.js +146 -9
- package/dist/scripts/_lib/guidelines_lane.js +10 -1
- package/dist/scripts/_lib/identifier_redaction.js +24 -0
- package/dist/scripts/_lib/installed_layer.js +17 -0
- package/dist/scripts/_lib/installed_layer_normalise.js +72 -0
- package/dist/scripts/_lib/lean_projection_mode.js +34 -152
- package/dist/scripts/_lib/project_tree_form.js +118 -0
- package/dist/scripts/_lib/scan_scope.js +105 -0
- package/dist/scripts/_lib/scoped_projection.js +133 -3
- package/dist/scripts/_lib/settings_removed_keys.js +29 -0
- package/dist/scripts/_lib/settings_renamed_keys.js +17 -5
- package/dist/scripts/_lib/subagent_native_fields.js +35 -0
- package/dist/scripts/_lib/svg_dom.js +284 -0
- package/dist/scripts/_lib/svg_filled_counter.js +285 -0
- package/dist/scripts/_lib/svg_geometry.js +477 -0
- package/dist/scripts/_lib/svg_motion.js +179 -0
- package/dist/scripts/_lib/svg_rules.js +1339 -0
- package/dist/scripts/_lib/svg_urls.js +67 -0
- package/dist/scripts/_lib/ui_surface.js +19 -0
- package/dist/scripts/_lib/verification_command.js +364 -0
- package/dist/scripts/_lib/workspace_secrets.js +229 -0
- package/dist/scripts/ai_council/seat_policy.js +27 -0
- package/dist/scripts/ai_council/transport_resolver.js +9 -10
- package/dist/scripts/condense.js +25 -29
- package/dist/scripts/lint_svg_asset.js +324 -0
- package/dist/server/io/substituteTemplate.js +2 -2
- package/dist/server/io/yamlIO.js +2 -2
- package/dist/server/routes/install.js +5 -1
- package/dist/server/routes/settings.js +2 -2
- package/dist/server/routes/wizard.js +1 -1
- package/dist/server/schemas/settings.js +22 -16
- package/dist/server/serverInfo.js +1 -1
- package/dist/shared/brandTokenDocument.js +47 -0
- package/dist/shared/brandTokenPaths.js +43 -0
- package/dist/shared/settingsCarveOut.js +0 -7
- package/dist/shared/skillRanking.js +103 -5
- package/dist/shared/userMd/formAdapter.js +16 -0
- package/dist/shared/userMd/schema.js +17 -0
- package/dist/ui/assets/index-w70Ado09.js +23 -0
- package/dist/ui/index.html +1 -1
- package/docs/MIGRATION.md +89 -2
- package/docs/THIRD-PARTY-NOTICES.md +27 -0
- package/docs/contracts/settings-classes.md +27 -9
- package/docs/guidelines/agent-infra/api-cost-levers.md +4 -3
- package/docs/guidelines/agent-infra/model-recommendation.md +11 -5
- package/docs/guidelines/agent-infra/rule-body-migration-inventory.md +1 -1
- package/docs/guidelines/agent-infra/self-improvement-pipeline.md +47 -24
- package/docs/guidelines/design-antipatterns.md +6 -1
- package/docs/guidelines/design-asset-discipline.md +17 -0
- package/docs/guidelines/design-fidelity-routing.md +1 -0
- package/docs/guidelines/php/api-design.md +10 -1
- package/llms.txt +12 -10
- package/package.json +15 -5
- package/src/agent-src/scripts/dashboard_mode.ts +4 -1
- package/src/agent-src/scripts/roadmap_age.ts +175 -0
- package/src/agent-src/scripts/update_roadmap_progress.ts +10 -2
- package/src/agent-src/templates/AGENTS.md +1 -1
- package/src/agent-src/templates/scripts/check_memory.ts +2 -2
- package/src/agent-src/templates/scripts/historical-bug-patterns.example.yml +13 -1
- package/src/agent-src/templates/scripts/work_engine/cli.ts +17 -0
- package/src/agent-src/templates/scripts/work_engine/cli_args.ts +10 -0
- package/src/agent-src/templates/scripts/work_engine/directives/ui/scaffold.ts +22 -13
- package/src/agent-src/templates/scripts/work_engine/dispatcher.ts +18 -4
- package/src/agent-src/templates/scripts/work_engine/procedure/checks.ts +283 -0
- package/src/agent-src/templates/scripts/work_engine/procedure/run.ts +432 -0
- package/src/agent-src/templates/scripts/work_engine/procedure/sidecar.ts +185 -0
- package/src/agent-src/templates/scripts/work_engine/state.ts +3 -0
- package/src/config/agent-settings.template.yml +120 -57
- package/src/config/agents-paths.yml +13 -7
- package/src/config/ci-local-parity.yml +44 -0
- package/src/config/continuity-surface.json +51 -2
- package/src/config/depth-audit-samples.json +5 -0
- package/src/config/discovery/command-verbs.yml +1 -0
- package/src/config/dispatch-economy-metrics.json +1 -0
- package/src/config/egress-mutations/class-precedence-swapped.json +7 -0
- package/src/config/egress-mutations/credential-token-restores.json +7 -0
- package/src/config/egress-mutations/iban-checksum-disabled.json +7 -0
- package/src/config/egress-mutations/raw-value-in-the-count-record.json +7 -0
- package/src/config/evaluator-budgets.json +4 -4
- package/src/config/gate-coverage.yml +149 -3
- package/src/config/gate-reachability-exemptions.json +3 -5
- package/src/config/gate-violation-baselines.json +29 -25
- package/src/config/gitignore-block.txt +6 -3
- package/src/config/hook-bundle-budget.json +34 -3
- package/src/config/hook-carrier-probes.json +30 -0
- package/src/config/hook-latency-budget.json +4 -2
- package/src/config/host-injection-effect.json +8 -1
- package/src/config/host-skill-frontmatter-keys.json +56 -0
- package/src/config/layer-form-brakes.json +4 -0
- package/src/config/layer-form-comparison-corpus.json +42 -0
- package/src/config/loop-surfaces.yaml +28 -47
- package/src/config/memory-twin-verdicts.yml +9 -1
- package/src/config/metric-registry.yml +40 -3
- package/src/config/pack-size-budget.json +15 -0
- package/src/config/procedure-core-budget.json +21 -0
- package/src/config/profiles/minimal.ini +1 -1
- package/src/config/project-tree-form.json +24 -0
- package/src/config/reach-channels.yml +3 -3
- package/src/config/reach-prescriptions-intake.yml +1 -1
- package/src/config/roadmap-step-size-baseline.json +118 -0
- package/src/config/routing-coverage-seed.json +100 -2
- package/src/config/skill-body-budget.json +686 -0
- package/src/config/skill-fork-pilot.json +17 -0
- package/src/config/skill-lifecycle-probes-codex.json +57 -0
- package/src/config/skill-lifecycle-probes.json +57 -0
- package/src/config/skill-output-shape.json +316 -0
- package/src/config/step-depth-table.json +58 -0
- package/src/config/turnaround-budget.json +90 -0
- package/src/install/conflict.ts +38 -6
- package/src/install/conflictTracker.ts +126 -8
- package/src/install/detect.ts +3 -3
- package/src/install/hostPermissionsAdapter.ts +136 -0
- package/src/install/installThinLayer.ts +6 -1
- package/src/install/manifestFiles.ts +24 -0
- package/src/install/noGoDenyRows.ts +368 -0
- package/src/install/noGoRules.ts +438 -0
- package/src/install/ownershipLedger.ts +180 -0
- package/src/install/plan.ts +1 -1
- package/src/install/preflight.ts +42 -10
- package/src/install/preserve.ts +94 -12
- package/src/install/recordedOwnership.ts +121 -3
- package/src/install/rule_scope.ts +20 -3
- package/src/install/stagedRuntime.ts +528 -0
- package/src/install/toolsArg.ts +16 -0
- package/src/install/types.ts +23 -2
- package/src/install/userPin.ts +54 -0
- package/src/install/wizard-plan.ts +25 -4
- package/src/scripts/_cli/_doctor_emit.ts +24 -0
- package/src/scripts/_cli/cmd_brand_status.ts +223 -12
- package/src/scripts/_cli/cmd_ci_settle.ts +32 -0
- package/src/scripts/_cli/cmd_doctor.ts +23 -44
- package/src/scripts/_cli/cmd_route_explain.ts +176 -2
- package/src/scripts/_cli/cmd_uninstall.ts +270 -26
- package/src/scripts/_cli/cmd_update.ts +34 -1
- package/src/scripts/_cli/cmd_upgrade.ts +38 -2
- package/src/scripts/_cli/detection_report.ts +7 -0
- package/src/scripts/_cli/doctor_execution.ts +1 -2
- package/src/scripts/_cli/doctor_install_mode.ts +39 -0
- package/src/scripts/_cli/doctor_network_posture.ts +3 -3
- package/src/scripts/_cli/doctor_ownership_ledger.ts +126 -0
- package/src/scripts/_cli/doctor_update_verdict.ts +104 -0
- package/src/scripts/_cli/explain_last/scrubber.ts +9 -21
- package/src/scripts/_cli/upgrade_unattended.ts +548 -0
- package/src/scripts/_dispatch.bash +42 -9
- package/src/scripts/_lib/activation_ladder.ts +1 -1
- package/src/scripts/_lib/advisory_inventory.ts +405 -0
- package/src/scripts/_lib/advisory_notice.ts +270 -0
- package/src/scripts/_lib/advisory_sources.ts +752 -0
- package/src/scripts/_lib/advisory_verdicts.ts +363 -0
- package/src/scripts/_lib/agent_artifact_location.ts +177 -0
- package/src/scripts/_lib/agent_settings.ts +7 -12
- package/src/scripts/_lib/arrival_record.ts +217 -0
- package/src/scripts/_lib/asset_render_record.ts +247 -0
- package/src/scripts/_lib/billing_grant.ts +4 -2
- package/src/scripts/_lib/brand_voice_slot.ts +258 -0
- package/src/scripts/_lib/canary_status.ts +24 -0
- package/src/scripts/_lib/cc_transcript.ts +276 -0
- package/src/scripts/_lib/changelog_eras.ts +83 -0
- package/src/scripts/_lib/claim_phrases.ts +71 -0
- package/src/scripts/_lib/classify_update.ts +171 -0
- package/src/scripts/_lib/claude_builtin_names.ts +9 -4
- package/src/scripts/_lib/claude_hook_scope.ts +195 -0
- package/src/scripts/_lib/claude_settings_hooks.ts +118 -34
- package/src/scripts/_lib/codex_resident_set.ts +460 -0
- package/src/scripts/_lib/codex_skill_finder.ts +225 -0
- package/src/scripts/_lib/confusables.ts +19 -0
- package/src/scripts/_lib/consumer_impact.ts +199 -0
- package/src/scripts/_lib/content_class.ts +127 -0
- package/src/scripts/_lib/counted_probe.ts +68 -1
- package/src/scripts/_lib/credential_deny_rows.ts +151 -0
- package/src/scripts/_lib/credential_files.ts +367 -0
- package/src/scripts/_lib/delivery_arm_experiment.ts +2 -2
- package/src/scripts/_lib/depth_flip.ts +141 -0
- package/src/scripts/_lib/design_lock.ts +117 -0
- package/src/scripts/_lib/design_sync_ledger.ts +142 -0
- package/src/scripts/_lib/design_sync_plan.ts +177 -0
- package/src/scripts/_lib/design_sync_reconcile.ts +159 -0
- package/src/scripts/_lib/design_sync_verify.ts +99 -0
- package/src/scripts/_lib/design_system_claude_design.ts +323 -0
- package/src/scripts/_lib/design_system_import.ts +84 -6
- package/src/scripts/_lib/dispatch_import_closure.ts +42 -11
- package/src/scripts/_lib/egress_credential_env.ts +35 -0
- package/src/scripts/_lib/egress_engine.ts +22 -0
- package/src/scripts/_lib/egress_known_values.ts +223 -0
- package/src/scripts/_lib/egress_normalize.ts +67 -0
- package/src/scripts/_lib/egress_prefixes.ts +42 -0
- package/src/scripts/_lib/egress_rules.ts +896 -0
- package/src/scripts/_lib/egress_rules_linearity.ts +56 -0
- package/src/scripts/_lib/egress_sender_scan.ts +290 -0
- package/src/scripts/_lib/egress_session_table.ts +510 -0
- package/src/scripts/_lib/egress_text.ts +63 -0
- package/src/scripts/_lib/egress_token.ts +252 -0
- package/src/scripts/_lib/empty_cycles.ts +1 -1
- package/src/scripts/_lib/environment_detector.ts +45 -30
- package/src/scripts/_lib/exemption_shape.ts +75 -1
- package/src/scripts/_lib/floor_posture.ts +185 -0
- package/src/scripts/_lib/forge_protection.ts +140 -2
- package/src/scripts/_lib/global_deploy_inventory.ts +159 -6
- package/src/scripts/_lib/guidelines_lane.ts +12 -1
- package/src/scripts/_lib/hand_kinds.ts +65 -0
- package/src/scripts/_lib/headless_invocation.ts +3 -3
- package/src/scripts/_lib/host_capability.ts +34 -2
- package/src/scripts/_lib/host_env_write.ts +39 -18
- package/src/scripts/_lib/host_listing_model.ts +14 -7
- package/src/scripts/_lib/identifier_redaction.ts +26 -0
- package/src/scripts/_lib/impact_bump.ts +70 -0
- package/src/scripts/_lib/install_reach_checks.ts +53 -1
- package/src/scripts/_lib/installed_layer.ts +31 -0
- package/src/scripts/_lib/installed_layer_normalise.ts +75 -0
- package/src/scripts/_lib/instructions_loaded_classify.ts +75 -0
- package/src/scripts/_lib/instructions_loaded_event.ts +53 -0
- package/src/scripts/_lib/knowledge_global_redaction.ts +2 -2
- package/src/scripts/_lib/layer_form_corpus.ts +165 -0
- package/src/scripts/_lib/layer_form_decision.ts +248 -0
- package/src/scripts/_lib/layer_form_evidence.ts +112 -0
- package/src/scripts/_lib/lean_projection_mode.ts +32 -161
- package/src/scripts/_lib/llm_proposer_transport.ts +1 -0
- package/src/scripts/_lib/loop_guards.ts +8 -120
- package/src/scripts/_lib/major_surface.ts +207 -0
- package/src/scripts/_lib/mcp_bridge.ts +30 -69
- package/src/scripts/_lib/merge_clearance_record.ts +384 -0
- package/src/scripts/_lib/neighbour_census.ts +18 -1
- package/src/scripts/_lib/orchestration_record.ts +61 -0
- package/src/scripts/_lib/outcome_vocabularies.ts +15 -23
- package/src/scripts/_lib/pin_advice.ts +49 -0
- package/src/scripts/_lib/platform_anchor.ts +222 -0
- package/src/scripts/_lib/procedure_checks.ts +5 -0
- package/src/scripts/_lib/project_tree_form.ts +134 -0
- package/src/scripts/_lib/projection_key_migration.ts +122 -0
- package/src/scripts/_lib/prompt_shape.ts +13 -2
- package/src/scripts/_lib/provenance_verify.ts +272 -0
- package/src/scripts/_lib/quota_parked.ts +27 -1
- package/src/scripts/_lib/ratification_artifact.ts +64 -1
- package/src/scripts/_lib/ratification_subject.ts +508 -46
- package/src/scripts/_lib/release_findings_ingest.ts +52 -5
- package/src/scripts/_lib/release_highlights.ts +72 -2
- package/src/scripts/_lib/release_settings_surface.ts +392 -0
- package/src/scripts/_lib/review_round.ts +134 -0
- package/src/scripts/_lib/roadmap_checkboxes.ts +1 -1
- package/src/scripts/_lib/roadmap_slug_lock.ts +254 -0
- package/src/scripts/_lib/roadmap_step_size.ts +75 -0
- package/src/scripts/_lib/run_checkpoint.ts +60 -3
- package/src/scripts/_lib/runtime_wiring_checks.ts +15 -1
- package/src/scripts/_lib/scope_guard.sh +64 -5
- package/src/scripts/_lib/scoped_projection.ts +136 -3
- package/src/scripts/_lib/secret_detector.ts +24 -103
- package/src/scripts/_lib/security_fix.ts +429 -0
- package/src/scripts/_lib/security_fix_context.ts +133 -0
- package/src/scripts/_lib/self_repair.ts +69 -39
- package/src/scripts/_lib/self_repair_outgoing.ts +209 -0
- package/src/scripts/_lib/self_repair_payload.ts +86 -0
- package/src/scripts/_lib/session_eol.ts +3 -0
- package/src/scripts/_lib/session_pr_watch.ts +207 -0
- package/src/scripts/_lib/session_register.ts +51 -1
- package/src/scripts/_lib/session_tag.ts +51 -0
- package/src/scripts/_lib/settings_removed_keys.ts +30 -0
- package/src/scripts/_lib/settings_renamed_keys.ts +19 -5
- package/src/scripts/_lib/skill_catalogue.ts +66 -25
- package/src/scripts/_lib/skill_fork_pilot.ts +121 -0
- package/src/scripts/_lib/skill_leases.ts +203 -0
- package/src/scripts/_lib/skill_listing_overrides.ts +294 -0
- package/src/scripts/_lib/skill_materialisation.ts +388 -0
- package/src/scripts/_lib/skill_materialisation_gate.ts +210 -0
- package/src/scripts/_lib/skill_materialisation_lock.ts +149 -0
- package/src/scripts/_lib/skill_materialisation_triggers.ts +96 -0
- package/src/scripts/_lib/skill_origin.ts +21 -1
- package/src/scripts/_lib/skill_reach.ts +342 -0
- package/src/scripts/_lib/source_shape.ts +7 -2
- package/src/scripts/_lib/sqlite_guard.ts +1 -1
- package/src/scripts/_lib/step_anatomy.ts +330 -0
- package/src/scripts/_lib/subagent_capsule.ts +8 -2
- package/src/scripts/_lib/subagent_native_fields.ts +30 -0
- package/src/scripts/_lib/subagent_spawn.ts +36 -0
- package/src/scripts/_lib/subagent_steering.ts +367 -0
- package/src/scripts/_lib/svg_dom.ts +318 -0
- package/src/scripts/_lib/svg_filled_counter.ts +287 -0
- package/src/scripts/_lib/svg_geometry.ts +480 -0
- package/src/scripts/_lib/svg_motion.ts +208 -0
- package/src/scripts/_lib/svg_rules.ts +1455 -0
- package/src/scripts/_lib/svg_urls.ts +72 -0
- package/src/scripts/_lib/test_delta.ts +89 -6
- package/src/scripts/_lib/tier_downshift_verdict.ts +222 -0
- package/src/scripts/_lib/tool_result_census.ts +62 -0
- package/src/scripts/_lib/trigger_routers.ts +1 -0
- package/src/scripts/_lib/turnaround_throughput.ts +378 -0
- package/src/scripts/_lib/ui_surface.ts +22 -0
- package/src/scripts/_lib/unattended_gates.ts +100 -0
- package/src/scripts/_lib/undeployed_fixes.ts +34 -0
- package/src/scripts/_lib/update_check.ts +143 -12
- package/src/scripts/_lib/update_invite.ts +116 -0
- package/src/scripts/_lib/update_notice.ts +259 -0
- package/src/scripts/_lib/verification_command.ts +59 -0
- package/src/scripts/_lib/verify_clause.ts +31 -19
- package/src/scripts/_lib/version_order.ts +146 -0
- package/src/scripts/_lib/worker_reuse.ts +191 -0
- package/src/scripts/_lib/workspace_secrets.ts +273 -0
- package/src/scripts/_lib/worktree_git.ts +67 -0
- package/src/scripts/_lib/worktree_ignored.ts +116 -0
- package/src/scripts/adoption_status.ts +330 -3
- package/src/scripts/adr_cite_check.ts +93 -0
- package/src/scripts/advisories.ts +803 -0
- package/src/scripts/ai-image/adapters/flux.sh +1 -0
- package/src/scripts/ai-image/adapters/gemini-image.sh +1 -0
- package/src/scripts/ai-image/adapters/ideogram.sh +1 -0
- package/src/scripts/ai-image/adapters/recraft.sh +1 -0
- package/src/scripts/ai-video/adapters/comfyui.sh +1 -0
- package/src/scripts/ai-video/adapters/fal.sh +1 -0
- package/src/scripts/ai-video/adapters/gemini-veo.sh +1 -0
- package/src/scripts/ai-video/adapters/higgsfield.sh +1 -0
- package/src/scripts/ai-video/adapters/kling.sh +1 -0
- package/src/scripts/ai-video/adapters/musetalk.sh +1 -0
- package/src/scripts/ai-video/adapters/openai-images.sh +1 -0
- package/src/scripts/ai-video/adapters/replicate.sh +1 -0
- package/src/scripts/ai-video/adapters/sora.sh +1 -0
- package/src/scripts/ai-video/adapters/syncso.sh +1 -0
- package/src/scripts/ai-video/stitch.sh +115 -2
- package/src/scripts/ai_council/airgap.ts +1 -0
- package/src/scripts/ai_council/api_transport.ts +27 -4
- package/src/scripts/ai_council/budget_guard.ts +300 -11
- package/src/scripts/ai_council/bundler.ts +20 -29
- package/src/scripts/ai_council/chairman.ts +17 -2
- package/src/scripts/ai_council/cli_agency_bounds.ts +158 -0
- package/src/scripts/ai_council/cli_launch_env.ts +54 -0
- package/src/scripts/ai_council/cli_least_agency_canary.ts +18 -2
- package/src/scripts/ai_council/clients.ts +55 -73
- package/src/scripts/ai_council/config.ts +16 -22
- package/src/scripts/ai_council/council_egress.ts +167 -0
- package/src/scripts/ai_council/exposure_ledger.ts +117 -0
- package/src/scripts/ai_council/free_hand_shadow.ts +276 -0
- package/src/scripts/ai_council/free_route.ts +216 -0
- package/src/scripts/ai_council/free_route_catalog.ts +173 -0
- package/src/scripts/ai_council/free_route_client.ts +95 -0
- package/src/scripts/ai_council/free_rung.ts +61 -0
- package/src/scripts/ai_council/hand_payload.ts +230 -0
- package/src/scripts/ai_council/hand_schemas.ts +123 -0
- package/src/scripts/ai_council/jury_aggregate.ts +155 -1
- package/src/scripts/ai_council/kind_flip.ts +221 -0
- package/src/scripts/ai_council/kind_flip_state.ts +19 -0
- package/src/scripts/ai_council/learn_low_impact_preview.ts +50 -22
- package/src/scripts/ai_council/modification_review.ts +98 -5
- package/src/scripts/ai_council/necessity.ts +7 -0
- package/src/scripts/ai_council/orchestrator.ts +16 -16
- package/src/scripts/ai_council/pricing.ts +10 -0
- package/src/scripts/ai_council/redact_low_impact_entry.ts +5 -2
- package/src/scripts/ai_council/response_render.ts +27 -4
- package/src/scripts/ai_council/round_reservations.ts +119 -0
- package/src/scripts/ai_council/route_chooser.ts +161 -0
- package/src/scripts/ai_council/route_liveness.ts +152 -0
- package/src/scripts/ai_council/route_member.ts +52 -0
- package/src/scripts/ai_council/seat_policy.ts +40 -0
- package/src/scripts/ai_council/seat_resume.ts +40 -0
- package/src/scripts/ai_council/shadow_dispatch.ts +13 -3
- package/src/scripts/ai_council/spend_gate.ts +18 -2
- package/src/scripts/ai_council/status_surface.ts +37 -0
- package/src/scripts/ai_council/transport_resolver.ts +15 -18
- package/src/scripts/analysis_analysts.ts +226 -0
- package/src/scripts/analysis_anchors.ts +140 -0
- package/src/scripts/analysis_and_optimize.ts +44 -0
- package/src/scripts/analysis_emit.ts +150 -0
- package/src/scripts/analysis_exchange.ts +186 -0
- package/src/scripts/analysis_gate.ts +158 -0
- package/src/scripts/analysis_inbox_final.ts +173 -0
- package/src/scripts/analysis_ledger.ts +119 -0
- package/src/scripts/analysis_pr_optimize.ts +219 -0
- package/src/scripts/analysis_pr_review.ts +240 -0
- package/src/scripts/analysis_pr_target.ts +121 -0
- package/src/scripts/analysis_prompts.ts +130 -0
- package/src/scripts/analysis_publish.ts +358 -0
- package/src/scripts/analysis_questions.ts +78 -0
- package/src/scripts/analysis_run.ts +248 -0
- package/src/scripts/analysis_run_record.ts +210 -0
- package/src/scripts/analysis_target.ts +343 -0
- package/src/scripts/analysis_validate.ts +161 -0
- package/src/scripts/anchor_eval_falsify.ts +1 -1
- package/src/scripts/arrival_report.ts +115 -0
- package/src/scripts/ask_transport.ts +284 -35
- package/src/scripts/backfill_model_tier.ts +4 -5
- package/src/scripts/before_complete_hook.ts +48 -2
- package/src/scripts/bench_hook_latency.ts +3 -3
- package/src/scripts/bench_procedure_cursor.ts +440 -0
- package/src/scripts/bootstrap.sh +3 -3
- package/src/scripts/build_exit_code_register.ts +440 -0
- package/src/scripts/build_proof.ts +23 -1
- package/src/scripts/cache_realization_report.ts +155 -14
- package/src/scripts/canary_liveness.ts +117 -0
- package/src/scripts/chat_history.ts +12 -15
- package/src/scripts/check_account_surface.ts +318 -0
- package/src/scripts/check_agent_artifact_location.ts +17 -160
- package/src/scripts/check_bundle_path_leakage.ts +6 -0
- package/src/scripts/check_ci_local_parity.ts +21 -13
- package/src/scripts/check_claims.ts +77 -2
- package/src/scripts/check_completion_review.ts +34 -1
- package/src/scripts/check_concern_admissions.ts +41 -5
- package/src/scripts/check_consumer_scope_flip.ts +1 -1
- package/src/scripts/check_context_paths.ts +2 -0
- package/src/scripts/check_council_layout.ts +9 -0
- package/src/scripts/check_credential_spelling.ts +267 -0
- package/src/scripts/check_egress_mutations.ts +239 -0
- package/src/scripts/check_enforcement_coverage.ts +16 -3
- package/src/scripts/check_estate_count.ts +16 -1
- package/src/scripts/check_finding_dispositions.ts +147 -0
- package/src/scripts/check_gate_coverage.ts +123 -21
- package/src/scripts/check_gate_reachability.ts +16 -2
- package/src/scripts/check_generator_sync.ts +46 -0
- package/src/scripts/check_hook_bundle_composition.ts +139 -1
- package/src/scripts/check_host_docs_digest.ts +142 -5
- package/src/scripts/check_kernel_edit_ratified.ts +301 -76
- package/src/scripts/check_kernel_rule_bundle.ts +14 -10
- package/src/scripts/check_knowledge_cards.ts +83 -3
- package/src/scripts/check_memory.ts +13 -3
- package/src/scripts/check_pack_size.ts +1 -1
- package/src/scripts/check_permission_deny_syntax.ts +247 -0
- package/src/scripts/check_platform_anchor.ts +243 -0
- package/src/scripts/check_proposal.ts +183 -1
- package/src/scripts/check_reach_channels.ts +5 -3
- package/src/scripts/check_references.ts +5 -2
- package/src/scripts/check_release_manifest_content.ts +33 -0
- package/src/scripts/check_release_pr_shape.ts +5 -0
- package/src/scripts/check_rule_invariants.ts +9 -1
- package/src/scripts/check_skill_body_budget.ts +343 -0
- package/src/scripts/check_skill_requires.ts +137 -1
- package/src/scripts/check_step_receipts.ts +246 -0
- package/src/scripts/check_structural_breaking.ts +7 -1
- package/src/scripts/check_suppression_hygiene.ts +8 -0
- package/src/scripts/check_test_weakening.ts +14 -0
- package/src/scripts/check_token_quality_golden.ts +5 -1
- package/src/scripts/check_update_banner.ts +50 -3
- package/src/scripts/check_verify_expectation_delta.ts +2 -1
- package/src/scripts/check_voice_lexicon.ts +531 -0
- package/src/scripts/ci_os_attribution.ts +327 -0
- package/src/scripts/ci_platform_scope.ts +69 -0
- package/src/scripts/ci_settle.ts +4 -1
- package/src/scripts/ci_status.ts +0 -1
- package/src/scripts/ci_time_to_green.ts +748 -0
- package/src/scripts/classify_merge_risk.ts +407 -19
- package/src/scripts/code_graph/sqlite_store.ts +1 -1
- package/src/scripts/compile_trigger_evals.ts +353 -0
- package/src/scripts/condense.ts +25 -31
- package/src/scripts/consumer_matrix.ts +61 -3
- package/src/scripts/council_availability_hook.ts +12 -4
- package/src/scripts/council_cli.ts +48 -38
- package/src/scripts/cross_repo_retrieve.ts +9 -72
- package/src/scripts/design_lock.ts +106 -0
- package/src/scripts/design_slop_rules.ts +30 -0
- package/src/scripts/design_sync.ts +264 -0
- package/src/scripts/design_system_import.ts +30 -13
- package/src/scripts/dispatch_economy_report.ts +46 -1
- package/src/scripts/dispatch_r2_reviewer.ts +41 -5
- package/src/scripts/egress_canary.ts +166 -0
- package/src/scripts/egress_sender_census.ts +101 -0
- package/src/scripts/external_sources_denylist.json +94 -12
- package/src/scripts/generate_catalog.ts +6 -2
- package/src/scripts/generate_owned_digest.ts +163 -0
- package/src/scripts/generate_reference_toc.ts +143 -0
- package/src/scripts/generate_subagent_floor.ts +11 -1
- package/src/scripts/handoff_context_hook.ts +34 -0
- package/src/scripts/hook_carrier_census.ts +263 -0
- package/src/scripts/hook_chunks.d.mts +12 -0
- package/src/scripts/hook_chunks.mjs +114 -0
- package/src/scripts/hook_manifest.json +1 -1
- package/src/scripts/hook_manifest.yaml +65 -42
- package/src/scripts/hooks/block_config_weakening.ts +127 -3
- package/src/scripts/hooks/block_credential_reads.ts +165 -0
- package/src/scripts/hooks/block_no_verify.ts +47 -23
- package/src/scripts/hooks/block_speaking_inbox_dir.ts +54 -8
- package/src/scripts/hooks/category_a.ts +202 -25
- package/src/scripts/hooks/concern_failure_policy.ts +6 -6
- package/src/scripts/hooks/concern_registry.ts +31 -6
- package/src/scripts/hooks/concern_registry_types.ts +11 -0
- package/src/scripts/hooks/delegation_nudge_hook.ts +105 -15
- package/src/scripts/hooks/design_pass_hook.ts +199 -13
- package/src/scripts/hooks/dispatch_hook.ts +13 -12
- package/src/scripts/hooks/egress_engine_loader.ts +125 -0
- package/src/scripts/hooks/egress_stage.ts +440 -0
- package/src/scripts/hooks/hook_stdin.ts +29 -4
- package/src/scripts/hooks/host_docs_pages.ts +194 -0
- package/src/scripts/hooks/host_docs_pages.yaml +75 -0
- package/src/scripts/hooks/host_lowering.json +1 -1
- package/src/scripts/hooks/host_lowering.yaml +22 -21
- package/src/scripts/hooks/host_rate_marker_hook.ts +73 -0
- package/src/scripts/hooks/instructions_observer_hook.ts +170 -0
- package/src/scripts/hooks/interruption_ledger_hook.ts +1 -1
- package/src/scripts/hooks/lazy_concern.ts +148 -0
- package/src/scripts/hooks/orchestration_record_hook.ts +80 -2
- package/src/scripts/hooks/payload_stub.ts +16 -6
- package/src/scripts/hooks/permission_gate.ts +7 -7
- package/src/scripts/hooks/push_settle_hook.ts +32 -3
- package/src/scripts/hooks/replay_hook.ts +43 -0
- package/src/scripts/hooks/reread_guard_hook.ts +87 -10
- package/src/scripts/hooks/rtk_wrap_hook.ts +4 -3
- package/src/scripts/hooks/rule_inject_hook.ts +8 -1
- package/src/scripts/hooks/session_eol_hook.ts +48 -1
- package/src/scripts/hooks/source_first_gate_hook.ts +6 -8
- package/src/scripts/hooks/spawn_guard_shadow_hook.ts +203 -10
- package/src/scripts/hooks/state_io.ts +2 -2
- package/src/scripts/hooks/svg_obligation.ts +553 -0
- package/src/scripts/hooks/svg_rules_loader.ts +133 -0
- package/src/scripts/hooks/tool_result_bytes_hook.ts +14 -5
- package/src/scripts/hooks/turn_end_gate_hook.ts +5 -3
- package/src/scripts/hooks/ui_route_nudge_hook.ts +2 -12
- package/src/scripts/hooks_doctor.ts +31 -0
- package/src/scripts/hooks_status.ts +58 -3
- package/src/scripts/inbox_source_census.ts +74 -13
- package/src/scripts/install +25 -3
- package/src/scripts/install.ts +60 -91
- package/src/scripts/interruption_report.ts +11 -1
- package/src/scripts/layer_baseline_report.ts +267 -0
- package/src/scripts/learning_sidecar.ts +1 -1
- package/src/scripts/lint_agents_layout.ts +3 -0
- package/src/scripts/lint_blocker_citations.ts +104 -0
- package/src/scripts/lint_breaking_changes_index.ts +40 -7
- package/src/scripts/lint_consolidation_lineage.ts +150 -19
- package/src/scripts/lint_consumer_internal_refs.ts +90 -42
- package/src/scripts/lint_context_spine_usage.ts +21 -0
- package/src/scripts/lint_design_antipattern_parity.ts +39 -7
- package/src/scripts/lint_design_quality.ts +60 -12
- package/src/scripts/lint_evidence_artifacts.ts +31 -0
- package/src/scripts/lint_example_fences.ts +11 -2
- package/src/scripts/lint_ghostwriter_source.ts +42 -10
- package/src/scripts/lint_hook_manifest.ts +94 -0
- package/src/scripts/lint_marketplace_install_completeness.ts +4 -0
- package/src/scripts/lint_mcp_config_security.ts +9 -11
- package/src/scripts/lint_motion_authority_drift.ts +27 -0
- package/src/scripts/lint_plan_risk_register.ts +28 -1
- package/src/scripts/lint_positioning.ts +4 -4
- package/src/scripts/lint_provenance.ts +1 -0
- package/src/scripts/lint_roadmap_blockers.ts +65 -4
- package/src/scripts/lint_roadmap_complexity.ts +98 -0
- package/src/scripts/lint_skill_link_reach.ts +251 -9
- package/src/scripts/lint_skill_procedures.ts +252 -0
- package/src/scripts/lint_skill_scripts_readonly.ts +12 -1
- package/src/scripts/lint_subagent_determinism.ts +14 -1
- package/src/scripts/lint_svg_asset.ts +365 -0
- package/src/scripts/lint_ticked_unmet_criteria.ts +300 -21
- package/src/scripts/mcp_registry_submit.sh +2 -2
- package/src/scripts/mcp_server/consumer_tool_catalog.json +4 -4
- package/src/scripts/mcp_server/suggest_skill.ts +89 -4
- package/src/scripts/mcp_server/tools.ts +2 -33
- package/src/scripts/measure_skill_ranker_baseline.ts +203 -5
- package/src/scripts/measure_turn_end_gate.ts +61 -1
- package/src/scripts/merge_clearance.ts +225 -0
- package/src/scripts/migrate_command_suggestions.ts +1 -1
- package/src/scripts/network_sources.ts +236 -0
- package/src/scripts/no_go_deny_rows.ts +225 -0
- package/src/scripts/orchestration_record.ts +15 -2
- package/src/scripts/plan_test_shards.ts +103 -0
- package/src/scripts/pr_url_reminder_hook.ts +10 -0
- package/src/scripts/print_required_checks.ts +5 -5
- package/src/scripts/probe_depth_shadow.ts +406 -0
- package/src/scripts/probe_turnaround.ts +342 -10
- package/src/scripts/ratification_subject.ts +176 -0
- package/src/scripts/rdp_gate_classify.ts +1 -0
- package/src/scripts/rdp_quality_eval.ts +1 -0
- package/src/scripts/release.ts +26 -55
- package/src/scripts/release_drill.ts +52 -23
- package/src/scripts/release_env.ts +37 -0
- package/src/scripts/release_publication.ts +11 -1
- package/src/scripts/report_consumer_gate_reach.ts +233 -0
- package/src/scripts/report_merge_gate_load.ts +295 -0
- package/src/scripts/report_project_contract.ts +123 -0
- package/src/scripts/report_reducible_classes.ts +342 -0
- package/src/scripts/report_required_checks_drift.ts +5 -3
- package/src/scripts/report_skill_host_census.ts +199 -0
- package/src/scripts/report_standing_payload_by_host.ts +7 -7
- package/src/scripts/retro.ts +758 -0
- package/src/scripts/retro_facts.ts +575 -0
- package/src/scripts/retro_queue.ts +739 -0
- package/src/scripts/retro_session_facts.ts +218 -0
- package/src/scripts/retro_sweep.ts +493 -0
- package/src/scripts/retro_triage.ts +126 -0
- package/src/scripts/roadmap_context.ts +2 -2
- package/src/scripts/roadmap_drain_queue.ts +601 -0
- package/src/scripts/run_supervise.ts +24 -2
- package/src/scripts/schemas/agent-settings.schema.json +0 -16
- package/src/scripts/schemas/command.schema.json +3 -3
- package/src/scripts/schemas/review-findings.schema.json +8 -0
- package/src/scripts/schemas/skill.schema.json +7 -6
- package/src/scripts/schemas/subagent.schema.json +33 -2
- package/src/scripts/score_skill_selection.ts +5 -2
- package/src/scripts/second_brain_retrieval.ts +1 -0
- package/src/scripts/second_brain_run.ts +1 -0
- package/src/scripts/self_repair_cli.ts +563 -87
- package/src/scripts/self_review_gate.ts +59 -4
- package/src/scripts/session_register_hook.ts +91 -4
- package/src/scripts/sessions_cli.ts +100 -5
- package/src/scripts/skill_collision_clusters.ts +1 -1
- package/src/scripts/skill_tools/score_skill_relevance.ts +31 -2
- package/src/scripts/skill_trigger_eval.ts +4 -2
- package/src/scripts/source_adapters.ts +183 -0
- package/src/scripts/step_receipt.ts +100 -0
- package/src/scripts/sync_pr_branch.ts +4 -0
- package/src/scripts/test_council_qualification.ts +1 -1
- package/src/scripts/trigger_eval_grandfather.json +3 -49
- package/src/scripts/trigger_eval_rotation.ts +31 -3
- package/src/scripts/ui_conformance_probe.ts +405 -1
- package/src/scripts/update_counts.ts +230 -11
- package/src/scripts/update_invite_hook.ts +245 -0
- package/src/scripts/update_notice_hook.ts +298 -0
- package/src/scripts/validate_frontmatter.ts +85 -0
- package/src/scripts/worker_reuse_shadow_report.ts +121 -0
- package/src/scripts/worktree_cleanup_check.ts +915 -121
- package/src/server/io/yamlIO.ts +2 -2
- package/src/server/schemas/settings.ts +37 -23
- package/src/shared/brandTokenDocument.ts +46 -0
- package/src/shared/brandTokenPaths.ts +43 -0
- package/src/shared/settingsCarveOut.ts +0 -8
- package/src/shared/skillRanking.ts +106 -5
- package/src/shared/userMd/formAdapter.ts +15 -1
- package/src/shared/userMd/schema.ts +22 -0
- package/src/templates/agent-user.md +4 -0
- package/src/templates/agent-user.yml +4 -0
- package/dist/cli-delegate/chunk-523HCFYO.js +0 -90
- package/dist/cli-delegate/chunk-AL3RZ22D.js +0 -74
- package/dist/cli-delegate/chunk-KB5FZ655.js +0 -208
- package/dist/cli-delegate/chunk-MDPPKQCQ.js +0 -875
- package/dist/cli-delegate/chunk-MSUL5NYP.js +0 -1123
- package/dist/cli-delegate/chunk-OAFSJBHH.js +0 -272
- package/dist/ui/assets/index-C3djEJah.js +0 -23
- package/src/scripts/_lib/continuation_ladder.ts +0 -335
- package/src/scripts/hooks/run_continuation_hook.ts +0 -1524
|
@@ -0,0 +1,528 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The runtime the hook carrier and the rule stubs need, staged under the
|
|
3
|
+
* machine root (`~/.event4u/agent-config/runtime/`).
|
|
4
|
+
*
|
|
5
|
+
* road-to-a-hook-carrier-that-is-never-silent Phases 1–3. An `npx` install runs
|
|
6
|
+
* from a package directory inside the npm cache (`_npx`), a directory
|
|
7
|
+
* the package manager may clear at any time, and leaves nothing on `PATH`. Every
|
|
8
|
+
* absolute pointer a thinned stub carries and every carrier path the hook command
|
|
9
|
+
* tries therefore resolves HERE, in a directory the package owns.
|
|
10
|
+
*
|
|
11
|
+
* Layout, with `current` a relative symlink swapped by rename:
|
|
12
|
+
*
|
|
13
|
+
* runtime/current -> v-<version>-<nonce>
|
|
14
|
+
* runtime/v-…/node the node the install ran under
|
|
15
|
+
* runtime/v-…/dist/hooks/… the dispatcher bundle
|
|
16
|
+
* runtime/v-…/dist/agent-src/… rule bodies the stubs point at, with the
|
|
17
|
+
* trees their relative links resolve into
|
|
18
|
+
* runtime/v-…/src/scripts/ (data files only), src/config/, package.json,
|
|
19
|
+
* the `yaml` package, in a `node_modules` directory of the stage
|
|
20
|
+
* what the bundle reads from its package root
|
|
21
|
+
* runtime/v-…/claude-rules/ the installed claude layer before thinning,
|
|
22
|
+
* stamped files only — the copy a dead carrier
|
|
23
|
+
* restores from, in shell
|
|
24
|
+
* runtime/thinned present while the claude layer is thinned;
|
|
25
|
+
* its content is that layer's directory
|
|
26
|
+
* runtime/demoted written by the shell branch after a restore
|
|
27
|
+
* runtime/carrier.json the last stripped-environment probe per host
|
|
28
|
+
*
|
|
29
|
+
* The state files are shared with the shell branch in `claude_settings_hooks`,
|
|
30
|
+
* which reads them without node; their names are part of that contract.
|
|
31
|
+
*/
|
|
32
|
+
|
|
33
|
+
import { spawnSync } from 'node:child_process';
|
|
34
|
+
import { randomBytes } from 'node:crypto';
|
|
35
|
+
import * as fs from 'node:fs';
|
|
36
|
+
import { createRequire } from 'node:module';
|
|
37
|
+
import * as os from 'node:os';
|
|
38
|
+
import * as path from 'node:path';
|
|
39
|
+
|
|
40
|
+
import { build_claude_hook_matrix } from '../scripts/_lib/claude_settings_hooks.js';
|
|
41
|
+
import { event4u_root } from '../scripts/_lib/user_global_paths.js';
|
|
42
|
+
import { describeUserPin, readUserPin, writeUserPin } from './userPin.js';
|
|
43
|
+
|
|
44
|
+
export const RUNTIME_DIRNAME = 'runtime';
|
|
45
|
+
export const CLAUDE_LAYER_DIRNAME = 'claude-rules';
|
|
46
|
+
export const THINNED_MARKER = 'thinned';
|
|
47
|
+
export const DEMOTED_MARKER = 'demoted';
|
|
48
|
+
export const CARRIER_RECORD = 'carrier.json';
|
|
49
|
+
export const PACKAGE_STAMP_LINE = 'package: event4u/agent-config';
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Package-relative entries the staged dispatcher reads. A missing entry is
|
|
53
|
+
* skipped, not an error: a checkout without a built bundle still stages its
|
|
54
|
+
* rule bodies, and the hook command checks for the bundle itself.
|
|
55
|
+
*/
|
|
56
|
+
export const STAGED_ENTRIES: readonly string[] = [
|
|
57
|
+
'package.json',
|
|
58
|
+
'dist/hooks',
|
|
59
|
+
'dist/agent-src',
|
|
60
|
+
'dist/router.json',
|
|
61
|
+
'src/scripts',
|
|
62
|
+
'src/config',
|
|
63
|
+
];
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Packages the bundle still resolves at run time (a `createRequire` the bundler
|
|
67
|
+
* cannot inline). Each is copied into the stage's own `node_modules` from wherever
|
|
68
|
+
* the package root resolves it; `yaml` has no dependencies of its own.
|
|
69
|
+
*/
|
|
70
|
+
export const STAGED_RUNTIME_DEPS: readonly string[] = ['yaml'];
|
|
71
|
+
|
|
72
|
+
function stageRuntimeDeps(packageRoot: string, stage: string): void {
|
|
73
|
+
const req = createRequire(path.join(packageRoot, 'package.json'));
|
|
74
|
+
for (const dep of STAGED_RUNTIME_DEPS) {
|
|
75
|
+
let manifest: string;
|
|
76
|
+
try {
|
|
77
|
+
manifest = req.resolve(`${dep}/package.json`);
|
|
78
|
+
} catch {
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
fs.cpSync(path.dirname(manifest), path.join(stage, 'node_modules', dep), { recursive: true, dereference: true });
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Source under `src/scripts/` stays behind: the bundle carries the code, and
|
|
87
|
+
* reads only the data tables beside it (the manifest, the host lowering table,
|
|
88
|
+
* schemas), which are a small fraction of the TypeScript's size.
|
|
89
|
+
*/
|
|
90
|
+
function stagedFilter(src: string): boolean {
|
|
91
|
+
return !/\.m?ts$/.test(src);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
export function runtimeRootFor(env?: NodeJS.ProcessEnv): string {
|
|
95
|
+
return path.join(event4u_root(env ?? process.env), RUNTIME_DIRNAME);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
export function currentRuntimeDir(runtimeRoot: string): string {
|
|
99
|
+
return path.join(runtimeRoot, 'current');
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
export interface StageOptions {
|
|
103
|
+
readonly packageRoot: string;
|
|
104
|
+
readonly runtimeRoot: string;
|
|
105
|
+
/** Absolute node binary the carrier runs the staged dispatcher with. */
|
|
106
|
+
readonly nodePath: string;
|
|
107
|
+
/** The installed claude rule directory to snapshot before thinning. */
|
|
108
|
+
readonly claudeRulesDir?: string | null;
|
|
109
|
+
/** Test hook: throw after this many entries were copied into the stage. */
|
|
110
|
+
readonly _failAfterEntries?: number;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
export interface StageResult {
|
|
114
|
+
readonly currentDir: string;
|
|
115
|
+
readonly version: string;
|
|
116
|
+
readonly dispatcher: boolean;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
function readVersion(packageRoot: string): string {
|
|
120
|
+
try {
|
|
121
|
+
const pkg = JSON.parse(fs.readFileSync(path.join(packageRoot, 'package.json'), 'utf8')) as {
|
|
122
|
+
version?: unknown;
|
|
123
|
+
};
|
|
124
|
+
return typeof pkg.version === 'string' ? pkg.version : 'unknown';
|
|
125
|
+
} catch {
|
|
126
|
+
return 'unknown';
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
function snapshotStampedLayer(rulesDir: string, dest: string): void {
|
|
131
|
+
fs.mkdirSync(dest, { recursive: true });
|
|
132
|
+
let names: string[];
|
|
133
|
+
try {
|
|
134
|
+
names = fs.readdirSync(rulesDir);
|
|
135
|
+
} catch {
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
for (const name of names.sort()) {
|
|
139
|
+
if (!name.endsWith('.md')) continue;
|
|
140
|
+
const src = path.join(rulesDir, name);
|
|
141
|
+
let text: string;
|
|
142
|
+
try {
|
|
143
|
+
if (!fs.statSync(src).isFile()) continue;
|
|
144
|
+
text = fs.readFileSync(src, 'utf8');
|
|
145
|
+
} catch {
|
|
146
|
+
continue;
|
|
147
|
+
}
|
|
148
|
+
// The same test the shell branch applies before overwriting a file.
|
|
149
|
+
if (!text.split(/\r?\n/).includes(PACKAGE_STAMP_LINE)) continue;
|
|
150
|
+
fs.writeFileSync(path.join(dest, name), text);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
function sweepStale(runtimeRoot: string, keep: string): void {
|
|
155
|
+
for (const name of fs.readdirSync(runtimeRoot)) {
|
|
156
|
+
const stale =
|
|
157
|
+
(name.startsWith('v-') && name !== keep) || name.startsWith('.stage-') || name.startsWith('.current-');
|
|
158
|
+
if (stale) fs.rmSync(path.join(runtimeRoot, name), { recursive: true, force: true });
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* Stage the runtime, then make it current by one rename. A stage interrupted at
|
|
164
|
+
* any point leaves `current` on the previous version; the next stage sweeps
|
|
165
|
+
* what the interrupted one left behind, so one version stays on disk.
|
|
166
|
+
*/
|
|
167
|
+
export function stageRuntime(opts: StageOptions): StageResult {
|
|
168
|
+
const runtimeRoot = path.resolve(opts.runtimeRoot);
|
|
169
|
+
const packageRoot = path.resolve(opts.packageRoot);
|
|
170
|
+
fs.mkdirSync(runtimeRoot, { recursive: true });
|
|
171
|
+
const version = readVersion(packageRoot);
|
|
172
|
+
const nonce = `${process.pid}-${randomBytes(4).toString('hex')}`;
|
|
173
|
+
const stage = path.join(runtimeRoot, `.stage-${nonce}`);
|
|
174
|
+
fs.mkdirSync(stage);
|
|
175
|
+
|
|
176
|
+
let copied = 0;
|
|
177
|
+
for (const rel of STAGED_ENTRIES) {
|
|
178
|
+
const src = path.join(packageRoot, rel);
|
|
179
|
+
if (!fs.existsSync(src)) continue;
|
|
180
|
+
fs.cpSync(src, path.join(stage, rel), { recursive: true, dereference: true, filter: stagedFilter });
|
|
181
|
+
copied += 1;
|
|
182
|
+
if (opts._failAfterEntries !== undefined && copied >= opts._failAfterEntries) {
|
|
183
|
+
throw new Error('stageRuntime: injected fault');
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
stageRuntimeDeps(packageRoot, stage);
|
|
187
|
+
if (opts.claudeRulesDir) snapshotStampedLayer(opts.claudeRulesDir, path.join(stage, CLAUDE_LAYER_DIRNAME));
|
|
188
|
+
fs.writeFileSync(path.join(stage, 'node'), `${opts.nodePath}\n`);
|
|
189
|
+
|
|
190
|
+
const versionDir = `v-${version.replace(/[^A-Za-z0-9._-]/g, '_')}-${nonce}`;
|
|
191
|
+
fs.renameSync(stage, path.join(runtimeRoot, versionDir));
|
|
192
|
+
const current = currentRuntimeDir(runtimeRoot);
|
|
193
|
+
const link = path.join(runtimeRoot, `.current-${nonce}`);
|
|
194
|
+
if (process.platform === 'win32') {
|
|
195
|
+
fs.symlinkSync(path.join(runtimeRoot, versionDir), link, 'junction');
|
|
196
|
+
fs.rmSync(current, { recursive: true, force: true });
|
|
197
|
+
} else {
|
|
198
|
+
fs.symlinkSync(versionDir, link);
|
|
199
|
+
}
|
|
200
|
+
fs.renameSync(link, current);
|
|
201
|
+
sweepStale(runtimeRoot, versionDir);
|
|
202
|
+
return {
|
|
203
|
+
currentDir: current,
|
|
204
|
+
version,
|
|
205
|
+
dispatcher: fs.existsSync(path.join(current, 'dist', 'hooks', 'dispatch.js')),
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
export type LayerState = 'full' | 'thinned' | 'demoted';
|
|
211
|
+
export type ProbeOutcome = 'reached' | 'not-reached';
|
|
212
|
+
|
|
213
|
+
export interface ProbeRecord {
|
|
214
|
+
readonly host: string;
|
|
215
|
+
readonly outcome: ProbeOutcome;
|
|
216
|
+
readonly date: string;
|
|
217
|
+
readonly version: string;
|
|
218
|
+
/** First probe date of the current outcome — when the carrier state last changed. */
|
|
219
|
+
readonly since?: string;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
export interface CarrierState {
|
|
223
|
+
readonly layer: LayerState;
|
|
224
|
+
readonly probe: ProbeRecord | null;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
/** Write or clear the thinned marker. Clearing it also clears a demotion. */
|
|
228
|
+
export function markClaudeLayer(runtimeRoot: string, opts: { thinned: boolean; rulesDir: string }): void {
|
|
229
|
+
fs.mkdirSync(runtimeRoot, { recursive: true });
|
|
230
|
+
const marker = path.join(runtimeRoot, THINNED_MARKER);
|
|
231
|
+
fs.rmSync(path.join(runtimeRoot, DEMOTED_MARKER), { force: true });
|
|
232
|
+
if (opts.thinned) fs.writeFileSync(marker, `${path.resolve(opts.rulesDir)}\n`);
|
|
233
|
+
else fs.rmSync(marker, { force: true });
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
export function readCarrierState(runtimeRoot: string): CarrierState {
|
|
237
|
+
const layer: LayerState = fs.existsSync(path.join(runtimeRoot, DEMOTED_MARKER))
|
|
238
|
+
? 'demoted'
|
|
239
|
+
: fs.existsSync(path.join(runtimeRoot, THINNED_MARKER))
|
|
240
|
+
? 'thinned'
|
|
241
|
+
: 'full';
|
|
242
|
+
let probe: ProbeRecord | null = null;
|
|
243
|
+
try {
|
|
244
|
+
const raw = JSON.parse(fs.readFileSync(path.join(runtimeRoot, CARRIER_RECORD), 'utf8')) as {
|
|
245
|
+
hosts?: Record<string, ProbeRecord>;
|
|
246
|
+
};
|
|
247
|
+
probe = raw.hosts?.['claude'] ?? null;
|
|
248
|
+
} catch {
|
|
249
|
+
probe = null;
|
|
250
|
+
}
|
|
251
|
+
return { layer, probe };
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
/**
|
|
255
|
+
* What a session leaves behind. A live carrier changes nothing; a dead one on a
|
|
256
|
+
* thinned layer restores it and demotes. Nothing a session does promotes — that
|
|
257
|
+
* is what keeps a terminal launch and an app launch from flapping the layer.
|
|
258
|
+
* The shell branch is the implementation; this is its specification.
|
|
259
|
+
*/
|
|
260
|
+
export function layerAfterSession(state: LayerState, carrierAlive: boolean): LayerState {
|
|
261
|
+
if (state === 'thinned' && !carrierAlive) return 'demoted';
|
|
262
|
+
return state;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
/**
|
|
266
|
+
* What an install, upgrade or doctor run leaves behind. A layer is thinned only
|
|
267
|
+
* on a carrier the stripped-environment probe reached, so a demoted machine is
|
|
268
|
+
* promoted by a passing probe and by nothing else.
|
|
269
|
+
*/
|
|
270
|
+
export function layerAfterInstall(
|
|
271
|
+
state: LayerState,
|
|
272
|
+
opts: { wantsThin: boolean; probe: ProbeOutcome },
|
|
273
|
+
): LayerState {
|
|
274
|
+
if (!opts.wantsThin) return 'full';
|
|
275
|
+
if (opts.probe === 'reached') return 'thinned';
|
|
276
|
+
return state === 'demoted' ? 'demoted' : 'full';
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
|
|
280
|
+
export const STRIPPED_PATH = '/usr/bin:/bin';
|
|
281
|
+
|
|
282
|
+
/**
|
|
283
|
+
* Run an installed hook command the way a launcher with a bare `PATH` would,
|
|
284
|
+
* from an empty project directory, and report whether it reached a dispatcher.
|
|
285
|
+
*
|
|
286
|
+
* The command is run with `--read-exit` appended to each dispatch, the
|
|
287
|
+
* dispatcher's measurement-only mode, which exits before any concern runs; and
|
|
288
|
+
* with `AC_HOOK_PROBE` set, which the shell branch reads to skip the restore.
|
|
289
|
+
*/
|
|
290
|
+
export function probeHookCommand(command: string, env: NodeJS.ProcessEnv = process.env): ProbeOutcome {
|
|
291
|
+
const probeCommand = command.replace(/--min-version (\d+)/g, '--min-version $1 --read-exit');
|
|
292
|
+
const project = fs.mkdtempSync(path.join(os.tmpdir(), 'ac-carrier-probe-'));
|
|
293
|
+
const stdinPath = path.join(project, 'stdin.json');
|
|
294
|
+
fs.writeFileSync(stdinPath, '{}');
|
|
295
|
+
const fd = fs.openSync(stdinPath, 'r');
|
|
296
|
+
try {
|
|
297
|
+
const childEnv: NodeJS.ProcessEnv = {
|
|
298
|
+
PATH: STRIPPED_PATH,
|
|
299
|
+
CLAUDE_PROJECT_DIR: project,
|
|
300
|
+
AC_HOOK_PROBE: '1',
|
|
301
|
+
};
|
|
302
|
+
for (const key of ['HOME', 'USERPROFILE', 'EVENT4U_CONFIG_HOME']) {
|
|
303
|
+
if (env[key] !== undefined) childEnv[key] = env[key];
|
|
304
|
+
}
|
|
305
|
+
const res = spawnSync('/bin/sh', ['-c', probeCommand], {
|
|
306
|
+
cwd: project,
|
|
307
|
+
stdio: [fd, 'pipe', 'pipe'],
|
|
308
|
+
encoding: 'utf-8',
|
|
309
|
+
env: childEnv,
|
|
310
|
+
timeout: 30000,
|
|
311
|
+
});
|
|
312
|
+
return typeof res.stderr === 'string' && res.stderr.includes('--read-exit ok') ? 'reached' : 'not-reached';
|
|
313
|
+
} catch {
|
|
314
|
+
return 'not-reached';
|
|
315
|
+
} finally {
|
|
316
|
+
fs.closeSync(fd);
|
|
317
|
+
fs.rmSync(project, { recursive: true, force: true });
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
export function recordCarrierProbe(
|
|
322
|
+
runtimeRoot: string,
|
|
323
|
+
host: string,
|
|
324
|
+
outcome: ProbeOutcome,
|
|
325
|
+
version: string,
|
|
326
|
+
now: Date = new Date(),
|
|
327
|
+
): ProbeRecord {
|
|
328
|
+
fs.mkdirSync(runtimeRoot, { recursive: true });
|
|
329
|
+
const file = path.join(runtimeRoot, CARRIER_RECORD);
|
|
330
|
+
let receipt: { hosts?: Record<string, ProbeRecord> } & Record<string, unknown> = {};
|
|
331
|
+
try {
|
|
332
|
+
receipt = JSON.parse(fs.readFileSync(file, 'utf8')) as typeof receipt;
|
|
333
|
+
} catch {
|
|
334
|
+
receipt = {};
|
|
335
|
+
}
|
|
336
|
+
const hosts: Record<string, ProbeRecord> = receipt.hosts ?? {};
|
|
337
|
+
const date = now.toISOString().slice(0, 10);
|
|
338
|
+
const previous = hosts[host];
|
|
339
|
+
const since = previous !== undefined && previous.outcome === outcome ? (previous.since ?? previous.date) : date;
|
|
340
|
+
const record: ProbeRecord = { host, outcome, date, version, since };
|
|
341
|
+
hosts[host] = record;
|
|
342
|
+
// Other receipt fields — the `install --full` pin among them — survive a probe.
|
|
343
|
+
fs.writeFileSync(file, `${JSON.stringify({ ...receipt, hosts }, null, 2)}\n`);
|
|
344
|
+
return record;
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
/** One receipt / doctor line per probe outcome, including the never-probed one. */
|
|
348
|
+
export function describeCarrierProbe(probe: ProbeRecord | null): string[] {
|
|
349
|
+
if (probe === null) return ['hook carrier (claude): not probed'];
|
|
350
|
+
const verdict = probe.outcome === 'reached' ? 'reached' : 'NOT reached';
|
|
351
|
+
return [
|
|
352
|
+
`hook carrier (${probe.host}): ${verdict} from a stripped environment (PATH=${STRIPPED_PATH}) — ` +
|
|
353
|
+
`probed ${probe.date}, package ${probe.version}`,
|
|
354
|
+
];
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
/** The doctor line: the layer on disk, and since when the carrier outcome holds. */
|
|
358
|
+
export function describeCarrierState(state: CarrierState): string {
|
|
359
|
+
const since = state.probe === null ? 'never probed' : `carrier ${state.probe.outcome} since ${state.probe.since ?? state.probe.date}`;
|
|
360
|
+
return `hook carrier (claude): rule layer ${state.layer}, ${since}`;
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
export interface ClaudeCarrierPlan {
|
|
364
|
+
/** Run the thin pass, with stub pointers rooted at {@link bodyLinkRoot}. */
|
|
365
|
+
readonly thin: boolean;
|
|
366
|
+
readonly bodyLinkRoot: string | null;
|
|
367
|
+
readonly runtimeRoot: string;
|
|
368
|
+
readonly lines: readonly string[];
|
|
369
|
+
readonly warnings: readonly string[];
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
/**
|
|
373
|
+
* The install-time half of the carrier, run after the claude layer is copied
|
|
374
|
+
* and rewritten and before it may be thinned: stage the runtime, probe the
|
|
375
|
+
* SessionStart command from a stripped environment, record the outcome, and
|
|
376
|
+
* decide the layer by {@link layerAfterInstall}. The caller thins only when
|
|
377
|
+
* `thin` is true and then calls {@link markClaudeLayer}; a full outcome is
|
|
378
|
+
* marked here and a demoted one is left as the shell branch wrote it.
|
|
379
|
+
*
|
|
380
|
+
* Windows has no `/bin/sh` to probe with, so there the decision stays what it
|
|
381
|
+
* was before the probe existed and nothing is recorded — "not probed" is the
|
|
382
|
+
* honest reading.
|
|
383
|
+
*/
|
|
384
|
+
export function prepareClaudeCarrier(opts: {
|
|
385
|
+
readonly packageRoot: string;
|
|
386
|
+
readonly rulesDir: string;
|
|
387
|
+
readonly sessionStartCommand: string | null;
|
|
388
|
+
readonly wantsThin: boolean;
|
|
389
|
+
/** `install --full`: write the sticky user pin before anything is decided. */
|
|
390
|
+
readonly userPin?: boolean;
|
|
391
|
+
readonly env?: NodeJS.ProcessEnv;
|
|
392
|
+
}): ClaudeCarrierPlan {
|
|
393
|
+
const env = opts.env ?? process.env;
|
|
394
|
+
const runtimeRoot = runtimeRootFor(env);
|
|
395
|
+
const warnings: string[] = [];
|
|
396
|
+
let staged: StageResult | null = null;
|
|
397
|
+
try {
|
|
398
|
+
staged = stageRuntime({
|
|
399
|
+
packageRoot: opts.packageRoot,
|
|
400
|
+
runtimeRoot,
|
|
401
|
+
nodePath: process.execPath,
|
|
402
|
+
claudeRulesDir: opts.rulesDir,
|
|
403
|
+
});
|
|
404
|
+
} catch (e) {
|
|
405
|
+
warnings.push(`claude-code: runtime not staged under ${runtimeRoot} — ${String(e)}`);
|
|
406
|
+
}
|
|
407
|
+
if (opts.userPin === true) writeUserPin(runtimeRoot);
|
|
408
|
+
const pin = readUserPin(runtimeRoot);
|
|
409
|
+
const wantsThin = opts.wantsThin && staged !== null && pin === null;
|
|
410
|
+
const probe =
|
|
411
|
+
process.platform === 'win32' || opts.sessionStartCommand === null
|
|
412
|
+
? null
|
|
413
|
+
: probeHookCommand(opts.sessionStartCommand, env);
|
|
414
|
+
if (probe !== null) recordCarrierProbe(runtimeRoot, 'claude', probe, staged?.version ?? 'unknown');
|
|
415
|
+
const before = readCarrierState(runtimeRoot);
|
|
416
|
+
const next: LayerState =
|
|
417
|
+
probe === null ? (wantsThin ? 'thinned' : 'full') : layerAfterInstall(before.layer, { wantsThin, probe });
|
|
418
|
+
if (next === 'full') markClaudeLayer(runtimeRoot, { thinned: false, rulesDir: opts.rulesDir });
|
|
419
|
+
const lines = describeCarrierProbe(readCarrierState(runtimeRoot).probe);
|
|
420
|
+
const pinLine = describeUserPin(pin);
|
|
421
|
+
if (pinLine !== null) lines.push(pinLine);
|
|
422
|
+
if (next === 'demoted') {
|
|
423
|
+
lines.push('hook carrier (claude): machine demoted — the rule layer stays full until the probe passes');
|
|
424
|
+
}
|
|
425
|
+
return { thin: next === 'thinned', bodyLinkRoot: staged?.currentDir ?? null, runtimeRoot, lines, warnings };
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
/**
|
|
429
|
+
* The doctor half of 3.3: probe the installed command, record it, and promote
|
|
430
|
+
* a demoted machine whose probe now passes. Promotion clears the demotion only;
|
|
431
|
+
* the layer stays full until the next install thins it, because the thin pass
|
|
432
|
+
* belongs to the installer.
|
|
433
|
+
*/
|
|
434
|
+
export function probeAndPromote(sessionStartCommand: string, env: NodeJS.ProcessEnv = process.env): CarrierState {
|
|
435
|
+
const runtimeRoot = runtimeRootFor(env);
|
|
436
|
+
const before = readCarrierState(runtimeRoot);
|
|
437
|
+
if (process.platform === 'win32') return before;
|
|
438
|
+
const outcome = probeHookCommand(sessionStartCommand, env);
|
|
439
|
+
const staged = readVersion(currentRuntimeDir(runtimeRoot));
|
|
440
|
+
const version = staged !== 'unknown' ? staged : (before.probe?.version ?? 'unknown');
|
|
441
|
+
recordCarrierProbe(runtimeRoot, 'claude', outcome, version);
|
|
442
|
+
if (before.layer === 'demoted' && outcome === 'reached') {
|
|
443
|
+
fs.rmSync(path.join(runtimeRoot, DEMOTED_MARKER), { force: true });
|
|
444
|
+
}
|
|
445
|
+
return readCarrierState(runtimeRoot);
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
/** Remove the staged runtime and its state files; returns the path removed, or null when absent. */
|
|
449
|
+
export function removeStagedRuntime(env: NodeJS.ProcessEnv = process.env): string | null {
|
|
450
|
+
const runtimeRoot = runtimeRootFor(env);
|
|
451
|
+
if (!fs.existsSync(runtimeRoot)) return null;
|
|
452
|
+
fs.rmSync(runtimeRoot, { recursive: true, force: true });
|
|
453
|
+
return runtimeRoot;
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
/** The `SessionStart` command the installer writes for this package, or null. */
|
|
457
|
+
export function sessionStartCommandFor(packageRoot: string): string | null {
|
|
458
|
+
try {
|
|
459
|
+
return build_claude_hook_matrix(path.join(packageRoot, 'src', 'scripts', 'hook_manifest.yaml'))['SessionStart'] ?? null;
|
|
460
|
+
} catch {
|
|
461
|
+
return null;
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
/**
|
|
466
|
+
* The claude-code deploy step, after the copy and the rewrite: prepare the
|
|
467
|
+
* carrier, thin through `thin` only when the plan says so, and mark the layer
|
|
468
|
+
* by what actually happened — a thin pass that throws leaves it marked full.
|
|
469
|
+
*/
|
|
470
|
+
export function deployClaudeCarrier(opts: {
|
|
471
|
+
readonly packageRoot: string;
|
|
472
|
+
readonly rulesDir: string;
|
|
473
|
+
readonly wantsThin: boolean;
|
|
474
|
+
readonly userPin?: boolean;
|
|
475
|
+
readonly quiet: boolean;
|
|
476
|
+
readonly thin: (bodyLinkRoot: string | null) => readonly string[];
|
|
477
|
+
readonly info: (line: string) => void;
|
|
478
|
+
readonly warn: (line: string) => void;
|
|
479
|
+
}): void {
|
|
480
|
+
const carrier = prepareClaudeCarrier({
|
|
481
|
+
packageRoot: opts.packageRoot,
|
|
482
|
+
rulesDir: opts.rulesDir,
|
|
483
|
+
sessionStartCommand: sessionStartCommandFor(opts.packageRoot),
|
|
484
|
+
wantsThin: opts.wantsThin,
|
|
485
|
+
...(opts.userPin === true ? { userPin: true } : {}),
|
|
486
|
+
});
|
|
487
|
+
for (const w of carrier.warnings) opts.warn(w);
|
|
488
|
+
if (!opts.quiet) for (const l of carrier.lines) opts.info(l);
|
|
489
|
+
if (!carrier.thin) return;
|
|
490
|
+
try {
|
|
491
|
+
const lines = opts.thin(carrier.bodyLinkRoot);
|
|
492
|
+
markClaudeLayer(carrier.runtimeRoot, { thinned: true, rulesDir: opts.rulesDir });
|
|
493
|
+
if (!opts.quiet) for (const l of lines) opts.info(l);
|
|
494
|
+
} catch (e) {
|
|
495
|
+
markClaudeLayer(carrier.runtimeRoot, { thinned: false, rulesDir: opts.rulesDir });
|
|
496
|
+
opts.warn(`claude-code: thinned rule layer not written — ${String(e)}`);
|
|
497
|
+
}
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
/**
|
|
501
|
+
* The doctor `hook-carrier` check (2.2, 3.3, 4.1): probe the SessionStart
|
|
502
|
+
* command from a stripped environment, record it, promote a demoted machine
|
|
503
|
+
* whose probe now passes, and print the layer and since when the carrier
|
|
504
|
+
* outcome holds. Skipped until an install staged a runtime.
|
|
505
|
+
*/
|
|
506
|
+
export function checkHookCarrier(
|
|
507
|
+
packageRoot: string,
|
|
508
|
+
env: NodeJS.ProcessEnv = process.env,
|
|
509
|
+
): { id: string; status: string; message: string; remedy: string } {
|
|
510
|
+
const runtimeRoot = runtimeRootFor(env);
|
|
511
|
+
const command = sessionStartCommandFor(packageRoot);
|
|
512
|
+
if (!fs.existsSync(currentRuntimeDir(runtimeRoot)) || command === null) {
|
|
513
|
+
return {
|
|
514
|
+
id: 'hook-carrier',
|
|
515
|
+
status: 'skipped',
|
|
516
|
+
message: `no staged runtime under ${runtimeRoot}`,
|
|
517
|
+
remedy: 'run `agent-config upgrade` (or `npx -y @event4u/agent-config init`) to stage it',
|
|
518
|
+
};
|
|
519
|
+
}
|
|
520
|
+
const state = probeAndPromote(command, env);
|
|
521
|
+
const reached = state.probe?.outcome === 'reached';
|
|
522
|
+
return {
|
|
523
|
+
id: 'hook-carrier',
|
|
524
|
+
status: reached ? 'ok' : 'warn',
|
|
525
|
+
message: [...describeCarrierProbe(state.probe), describeCarrierState(state)].join(' · '),
|
|
526
|
+
remedy: reached ? '' : 'install node where the hook launcher can run it, then run `agent-config upgrade`',
|
|
527
|
+
};
|
|
528
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `--tools` / `--ai` value of `agent-config install`: the two flags are
|
|
3
|
+
* aliases, so their comma lists are unioned in order with duplicates dropped,
|
|
4
|
+
* and an empty union means every tool.
|
|
5
|
+
*/
|
|
6
|
+
export function mergeToolsAliases(tools: string | null, ai: string | null): string {
|
|
7
|
+
const items: string[] = [];
|
|
8
|
+
for (const raw of [tools, ai]) {
|
|
9
|
+
if (!raw) continue;
|
|
10
|
+
for (const piece of raw.split(',')) {
|
|
11
|
+
const stripped = piece.trim();
|
|
12
|
+
if (stripped && !items.includes(stripped)) items.push(stripped);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
return items.length > 0 ? items.join(',') : 'all';
|
|
16
|
+
}
|
package/src/install/types.ts
CHANGED
|
@@ -47,7 +47,7 @@ export type FileKind = 'deployed' | 'marker' | 'bridge';
|
|
|
47
47
|
* One file the install plan will touch.
|
|
48
48
|
*
|
|
49
49
|
* Mirrors the dict produced by `_file_entry(path, kind, hash_content=...)`
|
|
50
|
-
* in
|
|
50
|
+
* in the retired Python installer, line 2744. `sha256` is `null` for bridges (we do
|
|
51
51
|
* not own the bytes) and a hex digest for deployed/marker files.
|
|
52
52
|
*
|
|
53
53
|
* `path` is the absolute target path on disk — the v2 manifest is
|
|
@@ -79,7 +79,7 @@ export type ConflictStrategy = 'skip' | 'overwrite' | 'surface-to-ui';
|
|
|
79
79
|
/**
|
|
80
80
|
* Per-install conflict resolution policy.
|
|
81
81
|
*
|
|
82
|
-
* 1:1 mirror of `class ConflictPolicy` in
|
|
82
|
+
* 1:1 mirror of `class ConflictPolicy` in the retired Python installer, line 169.
|
|
83
83
|
*
|
|
84
84
|
* - `force` — true when `--force-overwrite` was passed OR the
|
|
85
85
|
* `AGENT_CONFIG_ALLOW_OVERWRITE=1` env var is set.
|
|
@@ -159,6 +159,27 @@ export interface ConflictEntry {
|
|
|
159
159
|
* a readable manifest reports.
|
|
160
160
|
*/
|
|
161
161
|
readonly ownership: RecordedOwnership;
|
|
162
|
+
/**
|
|
163
|
+
* True when this entry is a CANDIDATE for the ledger-migration branch: the
|
|
164
|
+
* ownership ledger lists the path and holds no digest for it.
|
|
165
|
+
*
|
|
166
|
+
* A candidate, not a verdict, and the difference is load-bearing. The
|
|
167
|
+
* branch preserves only when the bytes on disk differ from what the run
|
|
168
|
+
* WOULD write — source plus the install-time tag — and this surface cannot
|
|
169
|
+
* compute that: `plannedSha256` is the digest of the UNTAGGED source
|
|
170
|
+
* (`plan.ts` hashes `srcFile` before overriding `path` to the target), so
|
|
171
|
+
* for the tagged `.md` files that make up most of the deployed tree it is
|
|
172
|
+
* not the digest of anything that ever lands on disk. Only the writer,
|
|
173
|
+
* which tags a temp copy before hashing it, can settle the equality half.
|
|
174
|
+
*
|
|
175
|
+
* `ownership` stays `unknown` for such a path: the tree genuinely cannot
|
|
176
|
+
* say whether the bytes are an edit or an older version, and labelling it
|
|
177
|
+
* `recorded-modified` would assert the edit the branch exists because it
|
|
178
|
+
* cannot prove. The flag says "this one goes down the migration path",
|
|
179
|
+
* which is what a reader needs in order to stop inferring a decision from
|
|
180
|
+
* a label that means something else.
|
|
181
|
+
*/
|
|
182
|
+
readonly migration: boolean;
|
|
162
183
|
}
|
|
163
184
|
|
|
164
185
|
/**
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The user brake on the rule layer: `install --full` writes one field into the
|
|
3
|
+
* install receipt, `runtime/carrier.json`, and the layer-form decision is the
|
|
4
|
+
* only reader that acts on it. No settings key, schema entry or wizard question
|
|
5
|
+
* carries it — the brake exists so a user can keep today's full layer without
|
|
6
|
+
* the package growing a setting for it.
|
|
7
|
+
*
|
|
8
|
+
* Sticky by design: a later plain `install` or upgrade leaves the field in
|
|
9
|
+
* place, because a brake that an upgrade silently released would not be one.
|
|
10
|
+
* `agent-config uninstall` removes the runtime directory and the field with it.
|
|
11
|
+
*/
|
|
12
|
+
import * as fs from 'node:fs';
|
|
13
|
+
import * as path from 'node:path';
|
|
14
|
+
|
|
15
|
+
export const RECEIPT_FILE = 'carrier.json';
|
|
16
|
+
export const USER_PIN_FIELD = 'user_pin';
|
|
17
|
+
|
|
18
|
+
export interface UserPin {
|
|
19
|
+
readonly form: 'full';
|
|
20
|
+
readonly set_at: string;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function readReceipt(runtimeRoot: string): Record<string, unknown> {
|
|
24
|
+
try {
|
|
25
|
+
const raw = JSON.parse(fs.readFileSync(path.join(runtimeRoot, RECEIPT_FILE), 'utf8')) as unknown;
|
|
26
|
+
return typeof raw === 'object' && raw !== null && !Array.isArray(raw) ? (raw as Record<string, unknown>) : {};
|
|
27
|
+
} catch {
|
|
28
|
+
return {};
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/** The pin, or `null`. A field that is present but unreadable still reads as a pin: a brake fails on. */
|
|
33
|
+
export function readUserPin(runtimeRoot: string): UserPin | null {
|
|
34
|
+
const v = readReceipt(runtimeRoot)[USER_PIN_FIELD];
|
|
35
|
+
if (v === undefined || v === null) return null;
|
|
36
|
+
const o = typeof v === 'object' ? (v as Record<string, unknown>) : {};
|
|
37
|
+
return { form: 'full', set_at: typeof o['set_at'] === 'string' ? o['set_at'] : 'unknown' };
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/** Write the pin into the receipt, keeping every other field the receipt holds. */
|
|
41
|
+
export function writeUserPin(runtimeRoot: string, now: Date = new Date()): UserPin {
|
|
42
|
+
fs.mkdirSync(runtimeRoot, { recursive: true });
|
|
43
|
+
const receipt = readReceipt(runtimeRoot);
|
|
44
|
+
const pin: UserPin = { form: 'full', set_at: now.toISOString().slice(0, 10) };
|
|
45
|
+
receipt[USER_PIN_FIELD] = pin;
|
|
46
|
+
fs.writeFileSync(path.join(runtimeRoot, RECEIPT_FILE), `${JSON.stringify(receipt, null, 2)}\n`);
|
|
47
|
+
return pin;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export function describeUserPin(pin: UserPin | null): string | null {
|
|
51
|
+
return pin === null
|
|
52
|
+
? null
|
|
53
|
+
: `rule layer pinned full by \`install --full\` (since ${pin.set_at}) — the package will not thin it on this machine`;
|
|
54
|
+
}
|