@event4u/agent-config 16.5.0 → 17.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.augment-plugin/marketplace.json +3 -3
- package/.augment-plugin/plugin.json +1 -1
- package/.claude-plugin/marketplace.json +2 -2
- package/.claude-plugin/skills/install-agent-config/SKILL.md +4 -4
- package/CHANGELOG.md +463 -498
- package/CONTRIBUTING.md +47 -0
- package/README.md +25 -25
- package/dist/agent-src/commands/{design.md → agent-design.md} +10 -6
- package/dist/agent-src/commands/agents/init.md +66 -3
- package/dist/agent-src/commands/agents/user/init.md +3 -0
- package/dist/agent-src/commands/{optimize/deep.md → analyze/and-optimize.md} +72 -33
- package/dist/agent-src/commands/analyze/inbox.md +168 -37
- package/dist/agent-src/commands/analyze/pr.md +144 -0
- package/dist/agent-src/commands/analyze/{repo.md → reference.md} +85 -14
- package/dist/agent-src/commands/analyze/roadmap-repos.md +19 -10
- package/dist/agent-src/commands/analyze.md +28 -12
- package/dist/agent-src/commands/audit.md +115 -0
- package/dist/agent-src/commands/brand/review.md +13 -2
- package/dist/agent-src/commands/brand/tokens.md +3 -3
- package/dist/agent-src/commands/brand/voice.md +8 -5
- package/dist/agent-src/commands/brand.md +2 -2
- package/dist/agent-src/commands/challenge-me/closure.md +25 -0
- package/dist/agent-src/commands/design-system/import.md +8 -3
- package/dist/agent-src/commands/design-system/sync.md +98 -0
- package/dist/agent-src/commands/design-system.md +6 -1
- package/dist/agent-src/commands/evals/analyze.json +44 -0
- package/dist/agent-src/commands/evals/audit.json +12 -0
- package/dist/agent-src/commands/evals/retro.json +12 -0
- package/dist/agent-src/commands/fix/ci.md +10 -8
- package/dist/agent-src/commands/ghostwriter/write.md +22 -0
- package/dist/agent-src/commands/memory/learn-low-impact.md +70 -83
- package/dist/agent-src/commands/memory/propose.md +12 -0
- package/dist/agent-src/commands/memory.md +1 -1
- package/dist/agent-src/commands/optimize.md +4 -3
- package/dist/agent-src/commands/post-as/me.md +18 -0
- package/dist/agent-src/commands/pr/create.md +17 -342
- package/dist/agent-src/commands/pr/merge.md +129 -368
- package/dist/agent-src/commands/retro.md +121 -0
- package/dist/agent-src/commands/review/routing.md +1 -1
- package/dist/agent-src/commands/roadmap/next.md +4 -1
- package/dist/agent-src/commands/roadmap/process-full.md +46 -333
- package/dist/agent-src/commands/roadmap/triage-parked.md +6 -2
- package/dist/agent-src/commands/team-knowledge/consolidate.md +2 -2
- package/dist/agent-src/commands/team-knowledge.md +1 -1
- package/dist/agent-src/commands/threat-model.md +1 -1
- package/dist/agent-src/commands/upstream-contribute.md +91 -101
- package/dist/agent-src/commands/worktree/cleanup.md +18 -11
- package/dist/agent-src/contexts/contracts/consumer-agents-md-guide.md +54 -0
- package/dist/agent-src/contexts/execution/analysis-loop.md +137 -0
- package/dist/agent-src/contexts/execution/auto-dispatch-classification.md +3 -3
- package/dist/agent-src/contexts/execution/decision-closure-execution.md +1 -1
- package/dist/agent-src/contexts/execution/host-capability-manifest.md +6 -0
- package/dist/agent-src/contexts/execution/orchestration-telemetry.md +11 -4
- package/dist/agent-src/contexts/execution/pr-create-branches-content.md +250 -0
- package/dist/agent-src/contexts/execution/pr-create-branches-freshness.md +150 -0
- package/dist/agent-src/contexts/execution/pr-merge-queue.md +287 -0
- package/dist/agent-src/contexts/execution/pr-merge-sync.md +276 -0
- package/dist/agent-src/contexts/execution/pr-merge-trust-boundary.md +69 -0
- package/dist/agent-src/contexts/execution/process-full-all.md +233 -0
- package/dist/agent-src/contexts/execution/process-full-delivery.md +231 -0
- package/dist/agent-src/contexts/execution/roadmap-execution-contract-branches.md +42 -0
- package/dist/agent-src/contexts/execution/roadmap-execution-contract.md +1 -35
- package/dist/agent-src/contexts/execution/roadmap-process-loop-close.md +235 -0
- package/dist/agent-src/contexts/execution/roadmap-process-loop-prescan.md +216 -0
- package/dist/agent-src/contexts/execution/roadmap-process-loop-run.md +253 -0
- package/dist/agent-src/contexts/execution/roadmap-process-loop-set.md +212 -0
- package/dist/agent-src/contexts/execution/roadmap-process-loop.md +25 -864
- package/dist/agent-src/contexts/execution/subagent-spawn-contract.md +14 -2
- package/dist/agent-src/contexts/execution/subagent-steering.md +65 -8
- package/dist/agent-src/contexts/model-recommendations.md +5 -5
- package/dist/agent-src/contexts/subagent-configuration.md +1 -1
- package/dist/agent-src/guidelines/agent-infra/api-cost-levers.md +4 -3
- package/dist/agent-src/guidelines/agent-infra/model-recommendation.md +11 -5
- package/dist/agent-src/guidelines/agent-infra/rule-body-migration-inventory.md +1 -1
- package/dist/agent-src/guidelines/agent-infra/self-improvement-pipeline.md +47 -24
- package/dist/agent-src/guidelines/design-antipatterns.md +5 -0
- package/dist/agent-src/guidelines/design-asset-discipline.md +17 -0
- package/dist/agent-src/guidelines/design-fidelity-routing.md +1 -0
- package/dist/agent-src/guidelines/php/api-design.md +10 -1
- package/dist/agent-src/rules/brand-source-of-truth.md +7 -6
- package/dist/agent-src/rules/code-provenance.md +1 -1
- package/dist/agent-src/rules/context-hygiene.md +0 -1
- package/dist/agent-src/rules/design-fidelity.md +12 -13
- package/dist/agent-src/rules/external-reference-deep-dive.md +2 -2
- package/dist/agent-src/rules/fix-what-you-see.md +1 -1
- package/dist/agent-src/rules/low-impact-corpus-privacy-floor.md +14 -15
- package/dist/agent-src/rules/missing-skill-recovery.md +12 -11
- package/dist/agent-src/rules/neighbour-precedence.md +1 -1
- package/dist/agent-src/rules/recurring-criticism.md +1 -1
- package/dist/agent-src/rules/roadmap-ci-steps-policy.md +0 -2
- package/dist/agent-src/rules/self-repair-loop.md +2 -2
- package/dist/agent-src/rules/token-budget-discipline.md +1 -1
- package/dist/agent-src/scripts/dashboard_mode.ts +4 -1
- package/dist/agent-src/scripts/roadmap_age.ts +175 -0
- package/dist/agent-src/scripts/update_roadmap_progress.ts +10 -2
- package/dist/agent-src/skills/accessibility-auditor/SKILL.md +3 -3
- package/dist/agent-src/skills/agent-security-review/SKILL.md +2 -2
- package/dist/agent-src/skills/agents-md-thin-root/SKILL.md +12 -4
- package/dist/agent-src/skills/ai-code-blindspots/SKILL.md +7 -0
- package/dist/agent-src/skills/ai-council/references/advanced-modes.md +11 -1
- package/dist/agent-src/skills/ai-council/references/cost-and-redaction.md +7 -0
- package/dist/agent-src/skills/ai-council/references/execution-modes.md +7 -0
- package/dist/agent-src/skills/ai-council/references/output-and-synthesis.md +19 -0
- package/dist/agent-src/skills/ai-council/references/procedure.md +7 -0
- package/dist/agent-src/skills/api-design/SKILL.md +2 -2
- package/dist/agent-src/skills/api-endpoint/SKILL.md +2 -2
- package/dist/agent-src/skills/authz-review/SKILL.md +5 -3
- package/dist/agent-src/skills/blade-ui/SKILL.md +2 -2
- package/dist/agent-src/skills/brand/SKILL.md +7 -3
- package/dist/agent-src/skills/brand-asset-generation/SKILL.md +13 -6
- package/dist/agent-src/skills/brand-audit/SKILL.md +2 -1
- package/dist/agent-src/skills/brand-identity/SKILL.md +5 -4
- package/dist/agent-src/skills/brand-strategy/SKILL.md +5 -4
- package/dist/agent-src/skills/brand-to-tokens/SKILL.md +18 -39
- package/dist/agent-src/skills/brand-to-tokens/templates/marp-brand-deck.md.example +2 -2
- package/dist/agent-src/skills/brand-to-tokens/templates/reveal-brand-deck.yaml +2 -2
- package/dist/agent-src/skills/canvas-design/SKILL.md +12 -2
- package/dist/agent-src/skills/competitive-positioning/SKILL.md +2 -2
- package/dist/agent-src/skills/composer-packages/SKILL.md +18 -0
- package/dist/agent-src/skills/condense-memory/SKILL.md +1 -1
- package/dist/agent-src/skills/content-funnel-design/SKILL.md +8 -1
- package/dist/agent-src/skills/context-authoring/SKILL.md +1 -1
- package/dist/agent-src/skills/context-document/SKILL.md +2 -2
- package/dist/agent-src/skills/corpus-grounding/SKILL.md +6 -6
- package/dist/agent-src/skills/corpus-grounding/scripts/decision_engine.ts +13 -11
- package/dist/agent-src/skills/corpus-grounding/scripts/ground.mjs +1706 -0
- package/dist/agent-src/skills/corpus-grounding/scripts/schema_validator.ts +7 -1
- package/dist/agent-src/skills/dashboard-design/SKILL.md +1 -1
- package/dist/agent-src/skills/data-flow-mapper/SKILL.md +5 -2
- package/dist/agent-src/skills/database/SKILL.md +5 -4
- package/dist/agent-src/skills/decision-record/references/weighted-matrix.md +12 -0
- package/dist/agent-src/skills/deep-reading-analyst/SKILL.md +1 -1
- package/dist/agent-src/skills/dependency-upgrade/SKILL.md +61 -11
- package/dist/agent-src/skills/description-assist/SKILL.md +1 -1
- package/dist/agent-src/skills/design-intelligence/SKILL.md +1 -1
- package/dist/agent-src/skills/design-intelligence/data/landing.csv +1 -1
- package/dist/agent-src/skills/design-intelligence/references/context-and-registers.md +10 -2
- package/dist/agent-src/skills/design-intelligence/references/design-languages.md +1 -1
- package/dist/agent-src/skills/design-intelligence/references/design-rules-checklist.md +4 -3
- package/dist/agent-src/skills/design-intelligence/references/integration-mapping.md +14 -14
- package/dist/agent-src/skills/{wireframe → design-review}/references/story-beat-ledger.schema.json +1 -1
- package/dist/agent-src/skills/design-review/references/verification-automation.md +11 -3
- package/dist/agent-src/skills/design-system-capture/SKILL.md +15 -10
- package/dist/agent-src/skills/design-system-capture/references/design-system-json.md +20 -5
- package/dist/agent-src/skills/design-system-capture/references/import-procedure.md +2 -2
- package/dist/agent-src/skills/design-tokens/SKILL.md +23 -23
- package/dist/agent-src/skills/design-tokens/scripts/tokens.mjs +1037 -0
- package/dist/agent-src/skills/design-tokens/scripts/tokens.ts +336 -13
- package/dist/agent-src/skills/design-tokens/templates/design-tokens-starter.json +52 -53
- package/dist/agent-src/skills/docker/SKILL.md +1 -1
- package/dist/agent-src/skills/estimate-ticket/SKILL.md +1 -1
- package/dist/agent-src/skills/existing-ui-audit/SKILL.md +14 -276
- package/dist/agent-src/skills/existing-ui-audit/procedure.yaml +44 -0
- package/dist/agent-src/skills/existing-ui-audit/references/anti-slop-cross-reference.md +1 -1
- package/dist/agent-src/skills/existing-ui-audit/references/steps/00-inspect-stack-and-input.md +4 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/01-enumerate-components.md +26 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/01b-detect-component-taxonomy.md +7 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/02-identify-design-system.md +12 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/03-detect-design-tokens.md +35 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/04-detect-shadcn-inventory.md +13 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/04b-live-storybook-read.md +26 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/05-list-reusable-patterns.md +14 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/06-match-candidates.md +52 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/07-greenfield-branch.md +29 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/08-a11y-baseline.md +40 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/09-validate-and-write.md +5 -0
- package/dist/agent-src/skills/experiment-loop/SKILL.md +1 -1
- package/dist/agent-src/skills/fe-design/references/design-patterns.md +16 -2
- package/dist/agent-src/skills/fe-design/references/design-read-and-memory.md +1 -1
- package/dist/agent-src/skills/fe-design/references/source-led-port.md +1 -1
- package/dist/agent-src/skills/finishing-a-development-branch/SKILL.md +6 -6
- package/dist/agent-src/skills/flux/SKILL.md +1 -1
- package/dist/agent-src/skills/form-handler/SKILL.md +15 -2
- package/dist/agent-src/skills/git-workflow/SKILL.md +2 -2
- package/dist/agent-src/skills/git-workflow/references/branch-update.md +7 -0
- package/dist/agent-src/skills/git-workflow/references/commit-subject.md +12 -0
- package/dist/agent-src/skills/git-workflow/references/push-closes-its-loop.md +10 -0
- package/dist/agent-src/skills/gtm-launch/SKILL.md +8 -1
- package/dist/agent-src/skills/html-deck/SKILL.md +7 -2
- package/dist/agent-src/skills/humanizer/SKILL.md +16 -3
- package/dist/agent-src/skills/humanizer/references/anti-aiisms.md +13 -1
- package/dist/agent-src/skills/humanizer/references/fixtures.md +8 -0
- package/dist/agent-src/skills/js-library-packaging/SKILL.md +5 -4
- package/dist/agent-src/skills/js-library-packaging/scripts/check_package_surface.mjs +197 -0
- package/dist/agent-src/skills/judge-artifact-completeness/SKILL.md +1 -1
- package/dist/agent-src/skills/judge-security-auditor/SKILL.md +2 -2
- package/dist/agent-src/skills/launch-readiness/SKILL.md +18 -22
- package/dist/agent-src/skills/learning-to-rule-or-skill/SKILL.md +5 -5
- package/dist/agent-src/skills/livewire/SKILL.md +1 -1
- package/dist/agent-src/skills/llm-provider-knowledge/SKILL.md +18 -0
- package/dist/agent-src/skills/logo-generation/SKILL.md +9 -3
- package/dist/agent-src/skills/market-entry-analysis/SKILL.md +6 -1
- package/dist/agent-src/skills/markitdown/SKILL.md +1 -1
- package/dist/agent-src/skills/memory-consolidation/SKILL.md +2 -2
- package/dist/agent-src/skills/messaging-architecture/SKILL.md +8 -1
- package/dist/agent-src/skills/motion-choreographer/SKILL.md +2 -2
- package/dist/agent-src/skills/playwright-testing/SKILL.md +2 -0
- package/dist/agent-src/skills/positioning-strategy/SKILL.md +10 -2
- package/dist/agent-src/skills/prediction-pool-optimizer/references/ev-fixtures.md +13 -0
- package/dist/agent-src/skills/prediction-pool-optimizer/references/odds-and-bonus.md +7 -0
- package/dist/agent-src/skills/project-analysis-core/SKILL.md +1 -1
- package/dist/agent-src/skills/project-analysis-hypothesis-driven/SKILL.md +1 -1
- package/dist/agent-src/skills/project-analyzer/SKILL.md +14 -75
- package/dist/agent-src/skills/project-analyzer/procedure.yaml +39 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/01-project-overview.md +9 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/02-architecture.md +7 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/03-data-layer.md +6 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/04-business-domains.md +7 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/05-api-surface.md +6 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/06-service-map.md +6 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/07-module-inventory.md +6 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/08-infrastructure-and-testing.md +5 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/09-agent-docs-audit.md +6 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/10-gap-analysis.md +6 -0
- package/dist/agent-src/skills/quality-tools/references/js-ts-tools.md +10 -0
- package/dist/agent-src/skills/quality-tools/references/php-tools.md +13 -0
- package/dist/agent-src/skills/quality-tools/references/python-tools.md +11 -0
- package/dist/agent-src/skills/react-native-setup/SKILL.md +7 -2
- package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +5 -1
- package/dist/agent-src/skills/react-shadcn-ui/references/registry.md +13 -0
- package/dist/agent-src/skills/react-shadcn-ui/scripts/shadcn_add.mjs +315 -0
- package/dist/agent-src/skills/react-shadcn-ui/scripts/shadcn_add.ts +6 -6
- package/dist/agent-src/skills/receiving-code-review/SKILL.md +1 -1
- package/dist/agent-src/skills/refine-ticket/SKILL.md +2 -2
- package/dist/agent-src/skills/release-comms/SKILL.md +2 -1
- package/dist/agent-src/skills/repomix-packer/SKILL.md +2 -2
- package/dist/agent-src/skills/requesting-code-review/SKILL.md +3 -3
- package/dist/agent-src/skills/roadmap-management/references/archival.md +3 -3
- package/dist/agent-src/skills/roadmap-management/references/authoring.md +9 -2
- package/dist/agent-src/skills/roadmap-management/references/dashboard.md +3 -3
- package/dist/agent-src/skills/roadmap-management/references/lifecycle.md +3 -3
- package/dist/agent-src/skills/roadmap-writing/SKILL.md +4 -4
- package/dist/agent-src/skills/rtk-output-filtering/SKILL.md +1 -1
- package/dist/agent-src/skills/rule-writing/SKILL.md +1 -2
- package/dist/agent-src/skills/security/SKILL.md +41 -5
- package/dist/agent-src/skills/skill-improvement-pipeline/SKILL.md +5 -3
- package/dist/agent-src/skills/skill-reviewer/SKILL.md +1 -1
- package/dist/agent-src/skills/skill-writing/SKILL.md +23 -8
- package/dist/agent-src/skills/skill-writing/references/section-patterns.md +19 -1
- package/dist/agent-src/skills/source-discovery/SKILL.md +3 -3
- package/dist/agent-src/skills/sql-writing/SKILL.md +2 -2
- package/dist/agent-src/skills/standards-from-config/SKILL.md +2 -2
- package/dist/agent-src/skills/storybook-workshop/SKILL.md +5 -0
- package/dist/agent-src/skills/storybook-workshop/scripts/story_contrast_floor.mjs +99 -0
- package/dist/agent-src/skills/subagent-orchestration/SKILL.md +13 -13
- package/dist/agent-src/skills/subagent-orchestration/prompts/README.md +4 -3
- package/dist/agent-src/skills/svg-authoring/SKILL.md +7 -1
- package/dist/agent-src/skills/systematic-debugging/SKILL.md +2 -2
- package/dist/agent-src/skills/tailwind-engineer/SKILL.md +8 -3
- package/dist/agent-src/skills/tailwind-engineer/scripts/tailwind_config_gen.mjs +482 -0
- package/dist/agent-src/skills/test-case-discovery/SKILL.md +1 -1
- package/dist/agent-src/skills/threat-modeling/SKILL.md +8 -1
- package/dist/agent-src/skills/threat-modeling/data/manifest.json +5 -2
- package/dist/agent-src/skills/threat-modeling/data/reasoning.csv +10 -10
- package/dist/agent-src/skills/threat-modeling/data/surfaces.csv +11 -10
- package/dist/agent-src/skills/threat-modeling/data/threats.csv +34 -20
- package/dist/agent-src/skills/type-design/SKILL.md +196 -0
- package/dist/agent-src/skills/type-design/references/font-spec.md +90 -0
- package/dist/agent-src/skills/type-design/references/gates.md +113 -0
- package/dist/agent-src/skills/type-design/references/toolchain.md +66 -0
- package/dist/agent-src/skills/typography-system/SKILL.md +21 -11
- package/dist/agent-src/skills/typography-system/references/worked-scales.md +85 -0
- package/dist/agent-src/skills/ui-apply-generic/SKILL.md +1 -1
- package/dist/agent-src/skills/universal-project-analysis/SKILL.md +1 -1
- package/dist/agent-src/skills/upstream-contribute/SKILL.md +120 -125
- package/dist/agent-src/skills/using-git-worktrees/SKILL.md +1 -0
- package/dist/agent-src/skills/verify-repair-loop/SKILL.md +1 -1
- package/dist/agent-src/skills/voice-and-tone-design/SKILL.md +71 -2
- package/dist/agent-src/skills/worktree-lifecycle/SKILL.md +16 -14
- package/dist/agent-src/templates/AGENTS.md +1 -1
- package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/dist/agent-src/templates/agents/proposal.example.md +1 -1
- package/dist/agent-src/templates/github-workflows/advisories-daily.yml +85 -0
- package/dist/agent-src/templates/roadmaps.md +39 -1
- package/dist/agent-src/templates/scripts/check_memory.ts +2 -2
- package/dist/agent-src/templates/scripts/historical-bug-patterns.example.yml +13 -1
- package/dist/agent-src/templates/scripts/work_engine/cli.ts +17 -0
- package/dist/agent-src/templates/scripts/work_engine/cli_args.ts +10 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/scaffold.ts +22 -13
- package/dist/agent-src/templates/scripts/work_engine/dispatcher.ts +18 -4
- package/dist/agent-src/templates/scripts/work_engine/procedure/checks.ts +283 -0
- package/dist/agent-src/templates/scripts/work_engine/procedure/run.ts +432 -0
- package/dist/agent-src/templates/scripts/work_engine/procedure/sidecar.ts +185 -0
- package/dist/agent-src/templates/scripts/work_engine/state.ts +3 -0
- package/dist/cli/commands/uiRender.js +72 -17
- package/dist/cli/commands/uiRenderAsset.js +10 -2
- package/dist/cli/commands/uiRenderAssetFonts.js +158 -0
- package/dist/cli/commands/uiRenderAssetTypes.js +8 -20
- package/dist/cli/initRouting.js +1 -1
- package/dist/cli/mcp/dispatch.js +31 -9
- package/dist/cli/python/knowledge_ingest.js +7 -39
- package/dist/cli/python/workspace_secrets.js +4 -177
- package/dist/cli/registry.js +4 -1
- package/dist/cli-delegate/archive_completed_roadmaps.js +3 -2
- package/dist/cli-delegate/check_update_banner.js +635 -266
- package/dist/cli-delegate/{chunk-TMWYUOK4.js → chunk-2CX7NWRB.js} +224 -437
- package/dist/cli-delegate/{chunk-F3QDG2GT.js → chunk-2SFOOFJJ.js} +259 -159
- package/dist/cli-delegate/chunk-2Y5AMLMY.js +136 -0
- package/dist/cli-delegate/{chunk-OKJUIAPS.js → chunk-4E2W63DA.js} +1 -62
- package/dist/cli-delegate/{chunk-6SRJTYJS.js → chunk-4SHNERBL.js} +37 -16
- package/dist/cli-delegate/chunk-5VO3RTMV.js +208 -0
- package/dist/cli-delegate/chunk-6E2LDY4F.js +27 -0
- package/dist/cli-delegate/{chunk-XQTPXKFA.js → chunk-6ZD2QZMN.js} +8 -17
- package/dist/cli-delegate/{chunk-6V5FMA3P.js → chunk-7CEI2YPS.js} +1 -1
- package/dist/cli-delegate/{chunk-DMSZHXZS.js → chunk-7DRWULEQ.js} +80 -7
- package/dist/cli-delegate/chunk-7NXCZSDL.js +54 -0
- package/dist/cli-delegate/chunk-AX3U3UWJ.js +328 -0
- package/dist/cli-delegate/{chunk-WOKWX5PL.js → chunk-BKALSTBZ.js} +18 -3
- package/dist/cli-delegate/chunk-BMGUGSY6.js +103 -0
- package/dist/cli-delegate/chunk-BYV46VRM.js +3309 -0
- package/dist/cli-delegate/{chunk-5GPULQBE.js → chunk-CAL76ADI.js} +4215 -682
- package/dist/cli-delegate/chunk-DSY6LLCQ.js +127 -0
- package/dist/cli-delegate/chunk-E6XNBVE4.js +581 -0
- package/dist/cli-delegate/{chunk-ZUZKZYCN.js → chunk-ESUNQ5XR.js} +46 -10
- package/dist/cli-delegate/{chunk-G5VVIZRC.js → chunk-F7HLSW6P.js} +1 -1
- package/dist/cli-delegate/chunk-FIEEOH5C.js +133 -0
- package/dist/cli-delegate/chunk-FKYZOWVD.js +719 -0
- package/dist/cli-delegate/chunk-GOMILC3O.js +918 -0
- package/dist/cli-delegate/chunk-I4KJYVPB.js +69 -0
- package/dist/cli-delegate/{chunk-JQOM7TTM.js → chunk-IDAOTDPE.js} +1 -100
- package/dist/cli-delegate/chunk-IROAQ77A.js +137 -0
- package/dist/cli-delegate/chunk-J2SJZICO.js +698 -0
- package/dist/cli-delegate/{chunk-6YQC2HLF.js → chunk-JHMMWNJ2.js} +54 -40
- package/dist/cli-delegate/{chunk-WQWXGIWB.js → chunk-M6CRG5O6.js} +165 -15
- package/dist/cli-delegate/{chunk-PHD7OOLE.js → chunk-MQ2UDEGV.js} +14 -3
- package/dist/cli-delegate/chunk-NTM7G2V4.js +220 -0
- package/dist/cli-delegate/chunk-PV7S5DPJ.js +175 -0
- package/dist/cli-delegate/{chunk-F7DQWYR5.js → chunk-RAXQOETZ.js} +6 -2
- package/dist/cli-delegate/{chunk-T7XSJSUQ.js → chunk-SIOMDAKL.js} +980 -784
- package/dist/cli-delegate/{chunk-KR6EM23A.js → chunk-TULVDQ4L.js} +3 -48
- package/dist/cli-delegate/chunk-UUYEKXKR.js +20 -0
- package/dist/cli-delegate/{chunk-7XGD2OEU.js → chunk-UXWHY6CQ.js} +2 -1
- package/dist/cli-delegate/{chunk-PWX7CKMD.js → chunk-VC3ECUEK.js} +1 -1
- package/dist/cli-delegate/{chunk-KXXWJTDO.js → chunk-WMNYVIYX.js} +1 -1
- package/dist/cli-delegate/chunk-XCY5KKUC.js +181 -0
- package/dist/cli-delegate/{chunk-H76PHZBI.js → chunk-XLY5G3CM.js} +14 -19
- package/dist/cli-delegate/cmd_adr_effective.js +41 -2
- package/dist/cli-delegate/cmd_analyze_session.js +7 -7
- package/dist/cli-delegate/cmd_brand_status.js +1287 -10
- package/dist/cli-delegate/cmd_ci_settle.js +330 -0
- package/dist/cli-delegate/cmd_conformance.js +483 -817
- package/dist/cli-delegate/cmd_doctor.js +26 -16
- package/dist/cli-delegate/cmd_doctor_neighbours.js +10 -7
- package/dist/cli-delegate/cmd_explain.js +9 -24
- package/dist/cli-delegate/cmd_export.js +14 -11
- package/dist/cli-delegate/cmd_fleet.js +5 -3
- package/dist/cli-delegate/cmd_git_convention.js +8 -4
- package/dist/cli-delegate/cmd_handoff.js +79 -242
- package/dist/cli-delegate/cmd_mcp_available.js +1 -1
- package/dist/cli-delegate/cmd_memory_get.js +4 -2
- package/dist/cli-delegate/cmd_migrate.js +2 -2
- package/dist/cli-delegate/cmd_packs_active.js +2 -2
- package/dist/cli-delegate/cmd_preflight.js +7 -5
- package/dist/cli-delegate/cmd_prune.js +16 -13
- package/dist/cli-delegate/cmd_route_audit.js +11 -8
- package/dist/cli-delegate/cmd_route_explain.js +649 -16
- package/dist/cli-delegate/cmd_session_recycle.js +15 -6
- package/dist/cli-delegate/cmd_settings_check.js +2 -2
- package/dist/cli-delegate/cmd_settings_get.js +1 -1
- package/dist/cli-delegate/cmd_settings_migrate.js +14 -11
- package/dist/cli-delegate/cmd_settings_set.js +1 -1
- package/dist/cli-delegate/cmd_sync.js +16 -13
- package/dist/cli-delegate/cmd_uninstall.js +185 -31
- package/dist/cli-delegate/cmd_update.js +67 -3
- package/dist/cli-delegate/cmd_upgrade.js +38 -7
- package/dist/cli-delegate/cmd_validate.js +16 -13
- package/dist/cli-delegate/cmd_versions.js +1 -1
- package/dist/cli-delegate/dashboard_mode.js +1 -1
- package/dist/cli-delegate/gate_execute.js +4 -3
- package/dist/cli-delegate/roadmap_age.js +22 -0
- package/dist/cli-delegate/roadmap_gates.js +4 -3
- package/dist/cli-delegate/update_roadmap_progress.js +3 -2
- package/dist/cli-delegate/upgrade_unattended-VVL6JLSX.js +541 -0
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +373 -190
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +5 -5
- package/dist/discovery/dormancy-report.md +1 -1
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +21 -16
- package/dist/discovery/trust-report.md +3 -3
- package/dist/discovery/workspaces.json +16 -11
- package/dist/hooks/chat_history.chunk.cjs +6852 -0
- package/dist/hooks/chat_history.chunk.cjs.sha256 +1 -0
- package/dist/hooks/dispatch.js +17506 -18692
- package/dist/hooks/dispatch.sha256 +1 -1
- package/dist/hooks/egress_engine.chunk.cjs +915 -0
- package/dist/hooks/egress_engine.chunk.cjs.sha256 +1 -0
- package/dist/hooks/svg_rules.chunk.cjs +281 -49
- package/dist/hooks/svg_rules.chunk.cjs.sha256 +1 -1
- package/dist/install/conflict.js +36 -6
- package/dist/install/conflictTracker.js +81 -7
- package/dist/install/detect.js +3 -3
- package/dist/install/hostPermissionsAdapter.js +106 -0
- package/dist/install/install.mjs +3117 -1949
- package/dist/install/installThinLayer.js +1 -1
- package/dist/install/manifestFiles.js +21 -0
- package/dist/install/noGoDenyRows.js +300 -0
- package/dist/install/noGoRules.js +368 -0
- package/dist/install/ownershipLedger.js +133 -0
- package/dist/install/plan.js +1 -1
- package/dist/install/preflight.js +39 -8
- package/dist/install/preserve.js +74 -12
- package/dist/install/recordedOwnership.js +88 -5
- package/dist/install/rule_scope.js +20 -3
- package/dist/install/stagedRuntime.js +455 -0
- package/dist/install/toolsArg.js +19 -0
- package/dist/install/userPin.js +47 -0
- package/dist/install/wizard-plan.js +26 -4
- package/dist/mcp/awesome-mcp-servers.row.md +1 -1
- package/dist/mcp/mcp-cloudflare-catalogue.json +3 -2
- package/dist/mcp/registry-manifest.json +6 -5
- package/dist/mcp/server.json +3 -3
- package/dist/mcp/server.mjs +9831 -5546
- package/dist/router.json +1 -1
- package/dist/scripts/_lib/agent_settings.js +7 -12
- package/dist/scripts/_lib/asset_render_record.js +219 -0
- package/dist/scripts/_lib/claude_builtin_names.js +9 -4
- package/dist/scripts/_lib/claude_settings_hooks.js +102 -34
- package/dist/scripts/_lib/egress_rules.js +766 -0
- package/dist/scripts/_lib/environment_detector.js +24 -33
- package/dist/scripts/_lib/global_deploy_inventory.js +146 -9
- package/dist/scripts/_lib/guidelines_lane.js +10 -1
- package/dist/scripts/_lib/identifier_redaction.js +24 -0
- package/dist/scripts/_lib/installed_layer.js +17 -0
- package/dist/scripts/_lib/installed_layer_normalise.js +72 -0
- package/dist/scripts/_lib/lean_projection_mode.js +34 -152
- package/dist/scripts/_lib/project_tree_form.js +118 -0
- package/dist/scripts/_lib/scoped_projection.js +133 -3
- package/dist/scripts/_lib/settings_removed_keys.js +29 -0
- package/dist/scripts/_lib/settings_renamed_keys.js +17 -5
- package/dist/scripts/_lib/subagent_native_fields.js +35 -0
- package/dist/scripts/_lib/svg_filled_counter.js +285 -0
- package/dist/scripts/_lib/svg_rules.js +2 -0
- package/dist/scripts/_lib/ui_surface.js +19 -0
- package/dist/scripts/_lib/verification_command.js +364 -0
- package/dist/scripts/_lib/workspace_secrets.js +229 -0
- package/dist/scripts/ai_council/seat_policy.js +27 -0
- package/dist/scripts/ai_council/transport_resolver.js +9 -10
- package/dist/scripts/condense.js +25 -29
- package/dist/server/io/substituteTemplate.js +2 -2
- package/dist/server/io/yamlIO.js +2 -2
- package/dist/server/routes/install.js +5 -1
- package/dist/server/routes/settings.js +2 -2
- package/dist/server/routes/wizard.js +1 -1
- package/dist/server/schemas/settings.js +22 -16
- package/dist/server/serverInfo.js +1 -1
- package/dist/shared/brandTokenDocument.js +47 -0
- package/dist/shared/brandTokenPaths.js +43 -0
- package/dist/shared/settingsCarveOut.js +0 -7
- package/dist/shared/skillRanking.js +103 -5
- package/dist/shared/userMd/formAdapter.js +16 -0
- package/dist/shared/userMd/schema.js +17 -0
- package/dist/ui/assets/index-w70Ado09.js +23 -0
- package/dist/ui/index.html +1 -1
- package/docs/MIGRATION.md +89 -2
- package/docs/THIRD-PARTY-NOTICES.md +27 -0
- package/docs/contracts/settings-classes.md +27 -9
- package/docs/guidelines/agent-infra/api-cost-levers.md +4 -3
- package/docs/guidelines/agent-infra/model-recommendation.md +11 -5
- package/docs/guidelines/agent-infra/rule-body-migration-inventory.md +1 -1
- package/docs/guidelines/agent-infra/self-improvement-pipeline.md +47 -24
- package/docs/guidelines/design-antipatterns.md +5 -0
- package/docs/guidelines/design-asset-discipline.md +17 -0
- package/docs/guidelines/design-fidelity-routing.md +1 -0
- package/docs/guidelines/php/api-design.md +10 -1
- package/llms.txt +12 -10
- package/package.json +13 -4
- package/src/agent-src/scripts/dashboard_mode.ts +4 -1
- package/src/agent-src/scripts/roadmap_age.ts +175 -0
- package/src/agent-src/scripts/update_roadmap_progress.ts +10 -2
- package/src/agent-src/templates/AGENTS.md +1 -1
- package/src/agent-src/templates/scripts/check_memory.ts +2 -2
- package/src/agent-src/templates/scripts/historical-bug-patterns.example.yml +13 -1
- package/src/agent-src/templates/scripts/work_engine/cli.ts +17 -0
- package/src/agent-src/templates/scripts/work_engine/cli_args.ts +10 -0
- package/src/agent-src/templates/scripts/work_engine/directives/ui/scaffold.ts +22 -13
- package/src/agent-src/templates/scripts/work_engine/dispatcher.ts +18 -4
- package/src/agent-src/templates/scripts/work_engine/procedure/checks.ts +283 -0
- package/src/agent-src/templates/scripts/work_engine/procedure/run.ts +432 -0
- package/src/agent-src/templates/scripts/work_engine/procedure/sidecar.ts +185 -0
- package/src/agent-src/templates/scripts/work_engine/state.ts +3 -0
- package/src/config/agent-settings.template.yml +120 -57
- package/src/config/agents-paths.yml +13 -7
- package/src/config/ci-local-parity.yml +44 -0
- package/src/config/continuity-surface.json +51 -2
- package/src/config/depth-audit-samples.json +5 -0
- package/src/config/discovery/command-verbs.yml +1 -0
- package/src/config/dispatch-economy-metrics.json +1 -0
- package/src/config/egress-mutations/class-precedence-swapped.json +7 -0
- package/src/config/egress-mutations/credential-token-restores.json +7 -0
- package/src/config/egress-mutations/iban-checksum-disabled.json +7 -0
- package/src/config/egress-mutations/raw-value-in-the-count-record.json +7 -0
- package/src/config/evaluator-budgets.json +4 -4
- package/src/config/gate-coverage.yml +149 -3
- package/src/config/gate-reachability-exemptions.json +3 -5
- package/src/config/gate-violation-baselines.json +26 -22
- package/src/config/gitignore-block.txt +6 -3
- package/src/config/hook-bundle-budget.json +34 -3
- package/src/config/hook-carrier-probes.json +30 -0
- package/src/config/hook-latency-budget.json +4 -2
- package/src/config/host-injection-effect.json +8 -1
- package/src/config/host-skill-frontmatter-keys.json +56 -0
- package/src/config/layer-form-brakes.json +4 -0
- package/src/config/layer-form-comparison-corpus.json +42 -0
- package/src/config/loop-surfaces.yaml +28 -47
- package/src/config/memory-twin-verdicts.yml +9 -1
- package/src/config/metric-registry.yml +40 -3
- package/src/config/pack-size-budget.json +15 -0
- package/src/config/procedure-core-budget.json +21 -0
- package/src/config/profiles/minimal.ini +1 -1
- package/src/config/project-tree-form.json +24 -0
- package/src/config/reach-channels.yml +3 -3
- package/src/config/reach-prescriptions-intake.yml +1 -1
- package/src/config/roadmap-step-size-baseline.json +118 -0
- package/src/config/routing-coverage-seed.json +93 -2
- package/src/config/skill-body-budget.json +686 -0
- package/src/config/skill-fork-pilot.json +17 -0
- package/src/config/skill-lifecycle-probes-codex.json +57 -0
- package/src/config/skill-lifecycle-probes.json +57 -0
- package/src/config/skill-output-shape.json +316 -0
- package/src/config/step-depth-table.json +58 -0
- package/src/config/turnaround-budget.json +90 -0
- package/src/install/conflict.ts +38 -6
- package/src/install/conflictTracker.ts +126 -8
- package/src/install/detect.ts +3 -3
- package/src/install/hostPermissionsAdapter.ts +136 -0
- package/src/install/installThinLayer.ts +6 -1
- package/src/install/manifestFiles.ts +24 -0
- package/src/install/noGoDenyRows.ts +368 -0
- package/src/install/noGoRules.ts +438 -0
- package/src/install/ownershipLedger.ts +180 -0
- package/src/install/plan.ts +1 -1
- package/src/install/preflight.ts +42 -10
- package/src/install/preserve.ts +94 -12
- package/src/install/recordedOwnership.ts +121 -3
- package/src/install/rule_scope.ts +20 -3
- package/src/install/stagedRuntime.ts +528 -0
- package/src/install/toolsArg.ts +16 -0
- package/src/install/types.ts +23 -2
- package/src/install/userPin.ts +54 -0
- package/src/install/wizard-plan.ts +25 -4
- package/src/scripts/_cli/_doctor_emit.ts +24 -0
- package/src/scripts/_cli/cmd_brand_status.ts +223 -12
- package/src/scripts/_cli/cmd_ci_settle.ts +32 -0
- package/src/scripts/_cli/cmd_doctor.ts +23 -44
- package/src/scripts/_cli/cmd_route_explain.ts +176 -2
- package/src/scripts/_cli/cmd_uninstall.ts +270 -26
- package/src/scripts/_cli/cmd_update.ts +34 -1
- package/src/scripts/_cli/cmd_upgrade.ts +38 -2
- package/src/scripts/_cli/detection_report.ts +7 -0
- package/src/scripts/_cli/doctor_execution.ts +1 -2
- package/src/scripts/_cli/doctor_install_mode.ts +39 -0
- package/src/scripts/_cli/doctor_network_posture.ts +3 -3
- package/src/scripts/_cli/doctor_ownership_ledger.ts +126 -0
- package/src/scripts/_cli/doctor_update_verdict.ts +104 -0
- package/src/scripts/_cli/explain_last/scrubber.ts +9 -21
- package/src/scripts/_cli/upgrade_unattended.ts +548 -0
- package/src/scripts/_dispatch.bash +42 -9
- package/src/scripts/_lib/activation_ladder.ts +1 -1
- package/src/scripts/_lib/advisory_inventory.ts +405 -0
- package/src/scripts/_lib/advisory_notice.ts +270 -0
- package/src/scripts/_lib/advisory_sources.ts +752 -0
- package/src/scripts/_lib/advisory_verdicts.ts +363 -0
- package/src/scripts/_lib/agent_artifact_location.ts +177 -0
- package/src/scripts/_lib/agent_settings.ts +7 -12
- package/src/scripts/_lib/arrival_record.ts +217 -0
- package/src/scripts/_lib/asset_render_record.ts +247 -0
- package/src/scripts/_lib/billing_grant.ts +4 -2
- package/src/scripts/_lib/brand_voice_slot.ts +258 -0
- package/src/scripts/_lib/canary_status.ts +24 -0
- package/src/scripts/_lib/cc_transcript.ts +276 -0
- package/src/scripts/_lib/changelog_eras.ts +83 -0
- package/src/scripts/_lib/claim_phrases.ts +71 -0
- package/src/scripts/_lib/classify_update.ts +171 -0
- package/src/scripts/_lib/claude_builtin_names.ts +9 -4
- package/src/scripts/_lib/claude_hook_scope.ts +195 -0
- package/src/scripts/_lib/claude_settings_hooks.ts +118 -34
- package/src/scripts/_lib/codex_resident_set.ts +460 -0
- package/src/scripts/_lib/codex_skill_finder.ts +225 -0
- package/src/scripts/_lib/confusables.ts +19 -0
- package/src/scripts/_lib/consumer_impact.ts +199 -0
- package/src/scripts/_lib/content_class.ts +127 -0
- package/src/scripts/_lib/counted_probe.ts +68 -1
- package/src/scripts/_lib/credential_deny_rows.ts +151 -0
- package/src/scripts/_lib/credential_files.ts +367 -0
- package/src/scripts/_lib/delivery_arm_experiment.ts +2 -2
- package/src/scripts/_lib/depth_flip.ts +141 -0
- package/src/scripts/_lib/design_lock.ts +117 -0
- package/src/scripts/_lib/design_sync_ledger.ts +142 -0
- package/src/scripts/_lib/design_sync_plan.ts +177 -0
- package/src/scripts/_lib/design_sync_reconcile.ts +159 -0
- package/src/scripts/_lib/design_sync_verify.ts +99 -0
- package/src/scripts/_lib/design_system_claude_design.ts +323 -0
- package/src/scripts/_lib/design_system_import.ts +84 -6
- package/src/scripts/_lib/dispatch_import_closure.ts +42 -11
- package/src/scripts/_lib/egress_credential_env.ts +35 -0
- package/src/scripts/_lib/egress_engine.ts +22 -0
- package/src/scripts/_lib/egress_known_values.ts +223 -0
- package/src/scripts/_lib/egress_normalize.ts +67 -0
- package/src/scripts/_lib/egress_prefixes.ts +42 -0
- package/src/scripts/_lib/egress_rules.ts +896 -0
- package/src/scripts/_lib/egress_rules_linearity.ts +56 -0
- package/src/scripts/_lib/egress_sender_scan.ts +290 -0
- package/src/scripts/_lib/egress_session_table.ts +510 -0
- package/src/scripts/_lib/egress_text.ts +63 -0
- package/src/scripts/_lib/egress_token.ts +252 -0
- package/src/scripts/_lib/empty_cycles.ts +1 -1
- package/src/scripts/_lib/environment_detector.ts +45 -30
- package/src/scripts/_lib/exemption_shape.ts +75 -1
- package/src/scripts/_lib/floor_posture.ts +185 -0
- package/src/scripts/_lib/forge_protection.ts +140 -2
- package/src/scripts/_lib/global_deploy_inventory.ts +159 -6
- package/src/scripts/_lib/guidelines_lane.ts +12 -1
- package/src/scripts/_lib/hand_kinds.ts +65 -0
- package/src/scripts/_lib/headless_invocation.ts +3 -3
- package/src/scripts/_lib/host_capability.ts +34 -2
- package/src/scripts/_lib/host_env_write.ts +39 -18
- package/src/scripts/_lib/host_listing_model.ts +14 -7
- package/src/scripts/_lib/identifier_redaction.ts +26 -0
- package/src/scripts/_lib/impact_bump.ts +70 -0
- package/src/scripts/_lib/install_reach_checks.ts +53 -1
- package/src/scripts/_lib/installed_layer.ts +31 -0
- package/src/scripts/_lib/installed_layer_normalise.ts +75 -0
- package/src/scripts/_lib/instructions_loaded_classify.ts +75 -0
- package/src/scripts/_lib/instructions_loaded_event.ts +53 -0
- package/src/scripts/_lib/knowledge_global_redaction.ts +2 -2
- package/src/scripts/_lib/layer_form_corpus.ts +165 -0
- package/src/scripts/_lib/layer_form_decision.ts +248 -0
- package/src/scripts/_lib/layer_form_evidence.ts +112 -0
- package/src/scripts/_lib/lean_projection_mode.ts +32 -161
- package/src/scripts/_lib/llm_proposer_transport.ts +1 -0
- package/src/scripts/_lib/loop_guards.ts +8 -120
- package/src/scripts/_lib/major_surface.ts +207 -0
- package/src/scripts/_lib/mcp_bridge.ts +30 -69
- package/src/scripts/_lib/merge_clearance_record.ts +384 -0
- package/src/scripts/_lib/neighbour_census.ts +18 -1
- package/src/scripts/_lib/orchestration_record.ts +61 -0
- package/src/scripts/_lib/outcome_vocabularies.ts +15 -23
- package/src/scripts/_lib/pin_advice.ts +49 -0
- package/src/scripts/_lib/platform_anchor.ts +222 -0
- package/src/scripts/_lib/procedure_checks.ts +5 -0
- package/src/scripts/_lib/project_tree_form.ts +134 -0
- package/src/scripts/_lib/projection_key_migration.ts +122 -0
- package/src/scripts/_lib/prompt_shape.ts +13 -2
- package/src/scripts/_lib/provenance_verify.ts +272 -0
- package/src/scripts/_lib/quota_parked.ts +27 -1
- package/src/scripts/_lib/ratification_artifact.ts +64 -1
- package/src/scripts/_lib/ratification_subject.ts +508 -46
- package/src/scripts/_lib/release_findings_ingest.ts +52 -5
- package/src/scripts/_lib/release_highlights.ts +72 -2
- package/src/scripts/_lib/release_settings_surface.ts +392 -0
- package/src/scripts/_lib/review_round.ts +134 -0
- package/src/scripts/_lib/roadmap_checkboxes.ts +1 -1
- package/src/scripts/_lib/roadmap_slug_lock.ts +254 -0
- package/src/scripts/_lib/roadmap_step_size.ts +75 -0
- package/src/scripts/_lib/run_checkpoint.ts +60 -3
- package/src/scripts/_lib/runtime_wiring_checks.ts +15 -1
- package/src/scripts/_lib/scope_guard.sh +64 -5
- package/src/scripts/_lib/scoped_projection.ts +136 -3
- package/src/scripts/_lib/secret_detector.ts +24 -103
- package/src/scripts/_lib/security_fix.ts +429 -0
- package/src/scripts/_lib/security_fix_context.ts +133 -0
- package/src/scripts/_lib/self_repair.ts +69 -39
- package/src/scripts/_lib/self_repair_outgoing.ts +209 -0
- package/src/scripts/_lib/self_repair_payload.ts +86 -0
- package/src/scripts/_lib/session_eol.ts +3 -0
- package/src/scripts/_lib/session_pr_watch.ts +207 -0
- package/src/scripts/_lib/session_register.ts +51 -1
- package/src/scripts/_lib/session_tag.ts +51 -0
- package/src/scripts/_lib/settings_removed_keys.ts +30 -0
- package/src/scripts/_lib/settings_renamed_keys.ts +19 -5
- package/src/scripts/_lib/skill_catalogue.ts +66 -25
- package/src/scripts/_lib/skill_fork_pilot.ts +121 -0
- package/src/scripts/_lib/skill_leases.ts +203 -0
- package/src/scripts/_lib/skill_listing_overrides.ts +294 -0
- package/src/scripts/_lib/skill_materialisation.ts +388 -0
- package/src/scripts/_lib/skill_materialisation_gate.ts +210 -0
- package/src/scripts/_lib/skill_materialisation_lock.ts +149 -0
- package/src/scripts/_lib/skill_materialisation_triggers.ts +96 -0
- package/src/scripts/_lib/skill_origin.ts +21 -1
- package/src/scripts/_lib/skill_reach.ts +342 -0
- package/src/scripts/_lib/source_shape.ts +7 -2
- package/src/scripts/_lib/sqlite_guard.ts +1 -1
- package/src/scripts/_lib/step_anatomy.ts +330 -0
- package/src/scripts/_lib/subagent_capsule.ts +8 -2
- package/src/scripts/_lib/subagent_native_fields.ts +30 -0
- package/src/scripts/_lib/subagent_spawn.ts +36 -0
- package/src/scripts/_lib/subagent_steering.ts +367 -0
- package/src/scripts/_lib/svg_filled_counter.ts +287 -0
- package/src/scripts/_lib/svg_rules.ts +2 -0
- package/src/scripts/_lib/test_delta.ts +89 -6
- package/src/scripts/_lib/tier_downshift_verdict.ts +222 -0
- package/src/scripts/_lib/tool_result_census.ts +62 -0
- package/src/scripts/_lib/trigger_routers.ts +1 -0
- package/src/scripts/_lib/turnaround_throughput.ts +378 -0
- package/src/scripts/_lib/ui_surface.ts +22 -0
- package/src/scripts/_lib/unattended_gates.ts +100 -0
- package/src/scripts/_lib/undeployed_fixes.ts +34 -0
- package/src/scripts/_lib/update_check.ts +143 -12
- package/src/scripts/_lib/update_invite.ts +116 -0
- package/src/scripts/_lib/update_notice.ts +259 -0
- package/src/scripts/_lib/verify_clause.ts +4 -2
- package/src/scripts/_lib/version_order.ts +146 -0
- package/src/scripts/_lib/worker_reuse.ts +191 -0
- package/src/scripts/_lib/workspace_secrets.ts +273 -0
- package/src/scripts/_lib/worktree_git.ts +67 -0
- package/src/scripts/_lib/worktree_ignored.ts +116 -0
- package/src/scripts/adoption_status.ts +330 -3
- package/src/scripts/adr_cite_check.ts +93 -0
- package/src/scripts/advisories.ts +803 -0
- package/src/scripts/ai-image/adapters/flux.sh +1 -0
- package/src/scripts/ai-image/adapters/gemini-image.sh +1 -0
- package/src/scripts/ai-image/adapters/ideogram.sh +1 -0
- package/src/scripts/ai-image/adapters/recraft.sh +1 -0
- package/src/scripts/ai-video/adapters/comfyui.sh +1 -0
- package/src/scripts/ai-video/adapters/fal.sh +1 -0
- package/src/scripts/ai-video/adapters/gemini-veo.sh +1 -0
- package/src/scripts/ai-video/adapters/higgsfield.sh +1 -0
- package/src/scripts/ai-video/adapters/kling.sh +1 -0
- package/src/scripts/ai-video/adapters/musetalk.sh +1 -0
- package/src/scripts/ai-video/adapters/openai-images.sh +1 -0
- package/src/scripts/ai-video/adapters/replicate.sh +1 -0
- package/src/scripts/ai-video/adapters/sora.sh +1 -0
- package/src/scripts/ai-video/adapters/syncso.sh +1 -0
- package/src/scripts/ai-video/stitch.sh +115 -2
- package/src/scripts/ai_council/airgap.ts +1 -0
- package/src/scripts/ai_council/api_transport.ts +27 -4
- package/src/scripts/ai_council/budget_guard.ts +300 -11
- package/src/scripts/ai_council/bundler.ts +20 -29
- package/src/scripts/ai_council/chairman.ts +17 -2
- package/src/scripts/ai_council/cli_agency_bounds.ts +158 -0
- package/src/scripts/ai_council/cli_launch_env.ts +54 -0
- package/src/scripts/ai_council/cli_least_agency_canary.ts +18 -2
- package/src/scripts/ai_council/clients.ts +55 -73
- package/src/scripts/ai_council/config.ts +16 -22
- package/src/scripts/ai_council/council_egress.ts +167 -0
- package/src/scripts/ai_council/exposure_ledger.ts +117 -0
- package/src/scripts/ai_council/free_hand_shadow.ts +276 -0
- package/src/scripts/ai_council/free_route.ts +216 -0
- package/src/scripts/ai_council/free_route_catalog.ts +173 -0
- package/src/scripts/ai_council/free_route_client.ts +95 -0
- package/src/scripts/ai_council/free_rung.ts +61 -0
- package/src/scripts/ai_council/hand_payload.ts +230 -0
- package/src/scripts/ai_council/hand_schemas.ts +123 -0
- package/src/scripts/ai_council/jury_aggregate.ts +155 -1
- package/src/scripts/ai_council/kind_flip.ts +221 -0
- package/src/scripts/ai_council/kind_flip_state.ts +19 -0
- package/src/scripts/ai_council/learn_low_impact_preview.ts +50 -22
- package/src/scripts/ai_council/modification_review.ts +98 -5
- package/src/scripts/ai_council/necessity.ts +7 -0
- package/src/scripts/ai_council/orchestrator.ts +16 -16
- package/src/scripts/ai_council/pricing.ts +10 -0
- package/src/scripts/ai_council/redact_low_impact_entry.ts +5 -2
- package/src/scripts/ai_council/response_render.ts +27 -4
- package/src/scripts/ai_council/round_reservations.ts +119 -0
- package/src/scripts/ai_council/route_chooser.ts +161 -0
- package/src/scripts/ai_council/route_liveness.ts +152 -0
- package/src/scripts/ai_council/route_member.ts +52 -0
- package/src/scripts/ai_council/seat_policy.ts +40 -0
- package/src/scripts/ai_council/seat_resume.ts +40 -0
- package/src/scripts/ai_council/shadow_dispatch.ts +13 -3
- package/src/scripts/ai_council/spend_gate.ts +18 -2
- package/src/scripts/ai_council/status_surface.ts +37 -0
- package/src/scripts/ai_council/transport_resolver.ts +15 -18
- package/src/scripts/analysis_analysts.ts +226 -0
- package/src/scripts/analysis_anchors.ts +140 -0
- package/src/scripts/analysis_and_optimize.ts +44 -0
- package/src/scripts/analysis_emit.ts +150 -0
- package/src/scripts/analysis_exchange.ts +186 -0
- package/src/scripts/analysis_gate.ts +158 -0
- package/src/scripts/analysis_inbox_final.ts +173 -0
- package/src/scripts/analysis_ledger.ts +119 -0
- package/src/scripts/analysis_pr_optimize.ts +219 -0
- package/src/scripts/analysis_pr_review.ts +240 -0
- package/src/scripts/analysis_pr_target.ts +121 -0
- package/src/scripts/analysis_prompts.ts +130 -0
- package/src/scripts/analysis_publish.ts +358 -0
- package/src/scripts/analysis_questions.ts +78 -0
- package/src/scripts/analysis_run.ts +248 -0
- package/src/scripts/analysis_run_record.ts +210 -0
- package/src/scripts/analysis_target.ts +343 -0
- package/src/scripts/analysis_validate.ts +161 -0
- package/src/scripts/anchor_eval_falsify.ts +1 -1
- package/src/scripts/arrival_report.ts +115 -0
- package/src/scripts/ask_transport.ts +284 -35
- package/src/scripts/backfill_model_tier.ts +4 -5
- package/src/scripts/before_complete_hook.ts +48 -2
- package/src/scripts/bench_hook_latency.ts +3 -3
- package/src/scripts/bench_procedure_cursor.ts +440 -0
- package/src/scripts/bootstrap.sh +3 -3
- package/src/scripts/build_exit_code_register.ts +440 -0
- package/src/scripts/build_proof.ts +23 -1
- package/src/scripts/cache_realization_report.ts +155 -14
- package/src/scripts/canary_liveness.ts +117 -0
- package/src/scripts/chat_history.ts +12 -15
- package/src/scripts/check_account_surface.ts +318 -0
- package/src/scripts/check_agent_artifact_location.ts +17 -160
- package/src/scripts/check_bundle_path_leakage.ts +6 -0
- package/src/scripts/check_ci_local_parity.ts +21 -13
- package/src/scripts/check_claims.ts +77 -2
- package/src/scripts/check_completion_review.ts +34 -1
- package/src/scripts/check_concern_admissions.ts +41 -5
- package/src/scripts/check_consumer_scope_flip.ts +1 -1
- package/src/scripts/check_context_paths.ts +2 -0
- package/src/scripts/check_council_layout.ts +9 -0
- package/src/scripts/check_credential_spelling.ts +267 -0
- package/src/scripts/check_egress_mutations.ts +239 -0
- package/src/scripts/check_enforcement_coverage.ts +16 -3
- package/src/scripts/check_estate_count.ts +16 -1
- package/src/scripts/check_finding_dispositions.ts +147 -0
- package/src/scripts/check_gate_coverage.ts +123 -21
- package/src/scripts/check_gate_reachability.ts +16 -2
- package/src/scripts/check_generator_sync.ts +46 -0
- package/src/scripts/check_hook_bundle_composition.ts +139 -1
- package/src/scripts/check_host_docs_digest.ts +142 -5
- package/src/scripts/check_kernel_edit_ratified.ts +301 -76
- package/src/scripts/check_kernel_rule_bundle.ts +14 -10
- package/src/scripts/check_knowledge_cards.ts +83 -3
- package/src/scripts/check_memory.ts +13 -3
- package/src/scripts/check_pack_size.ts +1 -1
- package/src/scripts/check_permission_deny_syntax.ts +247 -0
- package/src/scripts/check_platform_anchor.ts +243 -0
- package/src/scripts/check_proposal.ts +183 -1
- package/src/scripts/check_reach_channels.ts +5 -3
- package/src/scripts/check_references.ts +5 -2
- package/src/scripts/check_release_manifest_content.ts +33 -0
- package/src/scripts/check_release_pr_shape.ts +5 -0
- package/src/scripts/check_rule_invariants.ts +9 -1
- package/src/scripts/check_skill_body_budget.ts +343 -0
- package/src/scripts/check_skill_requires.ts +137 -1
- package/src/scripts/check_step_receipts.ts +246 -0
- package/src/scripts/check_structural_breaking.ts +7 -1
- package/src/scripts/check_suppression_hygiene.ts +8 -0
- package/src/scripts/check_test_weakening.ts +14 -0
- package/src/scripts/check_token_quality_golden.ts +5 -1
- package/src/scripts/check_update_banner.ts +50 -3
- package/src/scripts/check_verify_expectation_delta.ts +2 -1
- package/src/scripts/check_voice_lexicon.ts +531 -0
- package/src/scripts/ci_os_attribution.ts +327 -0
- package/src/scripts/ci_platform_scope.ts +69 -0
- package/src/scripts/ci_settle.ts +4 -1
- package/src/scripts/ci_status.ts +0 -1
- package/src/scripts/ci_time_to_green.ts +748 -0
- package/src/scripts/classify_merge_risk.ts +407 -19
- package/src/scripts/code_graph/sqlite_store.ts +1 -1
- package/src/scripts/compile_trigger_evals.ts +353 -0
- package/src/scripts/condense.ts +25 -31
- package/src/scripts/consumer_matrix.ts +61 -3
- package/src/scripts/council_availability_hook.ts +12 -4
- package/src/scripts/council_cli.ts +48 -38
- package/src/scripts/cross_repo_retrieve.ts +9 -72
- package/src/scripts/design_lock.ts +106 -0
- package/src/scripts/design_slop_rules.ts +30 -0
- package/src/scripts/design_sync.ts +264 -0
- package/src/scripts/design_system_import.ts +30 -13
- package/src/scripts/dispatch_economy_report.ts +46 -1
- package/src/scripts/dispatch_r2_reviewer.ts +41 -5
- package/src/scripts/egress_canary.ts +166 -0
- package/src/scripts/egress_sender_census.ts +101 -0
- package/src/scripts/external_sources_denylist.json +94 -12
- package/src/scripts/generate_catalog.ts +6 -2
- package/src/scripts/generate_owned_digest.ts +163 -0
- package/src/scripts/generate_reference_toc.ts +143 -0
- package/src/scripts/generate_subagent_floor.ts +11 -1
- package/src/scripts/handoff_context_hook.ts +34 -0
- package/src/scripts/hook_carrier_census.ts +263 -0
- package/src/scripts/hook_chunks.d.mts +12 -0
- package/src/scripts/hook_chunks.mjs +114 -0
- package/src/scripts/hook_manifest.json +1 -1
- package/src/scripts/hook_manifest.yaml +65 -42
- package/src/scripts/hooks/block_config_weakening.ts +127 -3
- package/src/scripts/hooks/block_credential_reads.ts +165 -0
- package/src/scripts/hooks/block_no_verify.ts +47 -23
- package/src/scripts/hooks/block_speaking_inbox_dir.ts +38 -7
- package/src/scripts/hooks/category_a.ts +202 -25
- package/src/scripts/hooks/concern_failure_policy.ts +6 -6
- package/src/scripts/hooks/concern_registry.ts +31 -6
- package/src/scripts/hooks/concern_registry_types.ts +11 -0
- package/src/scripts/hooks/delegation_nudge_hook.ts +105 -15
- package/src/scripts/hooks/design_pass_hook.ts +42 -10
- package/src/scripts/hooks/dispatch_hook.ts +13 -12
- package/src/scripts/hooks/egress_engine_loader.ts +125 -0
- package/src/scripts/hooks/egress_stage.ts +440 -0
- package/src/scripts/hooks/hook_stdin.ts +29 -4
- package/src/scripts/hooks/host_docs_pages.ts +194 -0
- package/src/scripts/hooks/host_docs_pages.yaml +75 -0
- package/src/scripts/hooks/host_lowering.json +1 -1
- package/src/scripts/hooks/host_lowering.yaml +22 -21
- package/src/scripts/hooks/host_rate_marker_hook.ts +73 -0
- package/src/scripts/hooks/instructions_observer_hook.ts +170 -0
- package/src/scripts/hooks/interruption_ledger_hook.ts +1 -1
- package/src/scripts/hooks/lazy_concern.ts +148 -0
- package/src/scripts/hooks/orchestration_record_hook.ts +80 -2
- package/src/scripts/hooks/payload_stub.ts +16 -6
- package/src/scripts/hooks/permission_gate.ts +7 -7
- package/src/scripts/hooks/push_settle_hook.ts +32 -3
- package/src/scripts/hooks/replay_hook.ts +43 -0
- package/src/scripts/hooks/reread_guard_hook.ts +87 -10
- package/src/scripts/hooks/rtk_wrap_hook.ts +4 -3
- package/src/scripts/hooks/rule_inject_hook.ts +8 -1
- package/src/scripts/hooks/session_eol_hook.ts +48 -1
- package/src/scripts/hooks/source_first_gate_hook.ts +6 -8
- package/src/scripts/hooks/spawn_guard_shadow_hook.ts +203 -10
- package/src/scripts/hooks/state_io.ts +2 -2
- package/src/scripts/hooks/svg_obligation.ts +75 -19
- package/src/scripts/hooks/tool_result_bytes_hook.ts +14 -5
- package/src/scripts/hooks/turn_end_gate_hook.ts +1 -1
- package/src/scripts/hooks/ui_route_nudge_hook.ts +2 -12
- package/src/scripts/hooks_doctor.ts +31 -0
- package/src/scripts/hooks_status.ts +58 -3
- package/src/scripts/inbox_source_census.ts +74 -13
- package/src/scripts/install +25 -3
- package/src/scripts/install.ts +60 -91
- package/src/scripts/interruption_report.ts +11 -1
- package/src/scripts/layer_baseline_report.ts +267 -0
- package/src/scripts/learning_sidecar.ts +1 -1
- package/src/scripts/lint_agents_layout.ts +3 -0
- package/src/scripts/lint_blocker_citations.ts +104 -0
- package/src/scripts/lint_breaking_changes_index.ts +40 -7
- package/src/scripts/lint_consolidation_lineage.ts +144 -16
- package/src/scripts/lint_consumer_internal_refs.ts +90 -42
- package/src/scripts/lint_context_spine_usage.ts +21 -0
- package/src/scripts/lint_design_antipattern_parity.ts +39 -7
- package/src/scripts/lint_evidence_artifacts.ts +31 -0
- package/src/scripts/lint_example_fences.ts +11 -2
- package/src/scripts/lint_ghostwriter_source.ts +42 -10
- package/src/scripts/lint_hook_manifest.ts +94 -0
- package/src/scripts/lint_marketplace_install_completeness.ts +4 -0
- package/src/scripts/lint_mcp_config_security.ts +9 -11
- package/src/scripts/lint_plan_risk_register.ts +28 -1
- package/src/scripts/lint_positioning.ts +4 -4
- package/src/scripts/lint_provenance.ts +1 -0
- package/src/scripts/lint_roadmap_blockers.ts +65 -4
- package/src/scripts/lint_roadmap_complexity.ts +98 -0
- package/src/scripts/lint_skill_link_reach.ts +251 -9
- package/src/scripts/lint_skill_procedures.ts +252 -0
- package/src/scripts/lint_skill_scripts_readonly.ts +12 -1
- package/src/scripts/lint_subagent_determinism.ts +14 -1
- package/src/scripts/lint_ticked_unmet_criteria.ts +300 -21
- package/src/scripts/mcp_registry_submit.sh +2 -2
- package/src/scripts/mcp_server/consumer_tool_catalog.json +4 -4
- package/src/scripts/mcp_server/suggest_skill.ts +89 -4
- package/src/scripts/mcp_server/tools.ts +2 -33
- package/src/scripts/measure_skill_ranker_baseline.ts +203 -5
- package/src/scripts/measure_turn_end_gate.ts +61 -1
- package/src/scripts/merge_clearance.ts +225 -0
- package/src/scripts/migrate_command_suggestions.ts +1 -1
- package/src/scripts/network_sources.ts +236 -0
- package/src/scripts/no_go_deny_rows.ts +225 -0
- package/src/scripts/orchestration_record.ts +15 -2
- package/src/scripts/plan_test_shards.ts +103 -0
- package/src/scripts/pr_url_reminder_hook.ts +10 -0
- package/src/scripts/print_required_checks.ts +5 -5
- package/src/scripts/probe_depth_shadow.ts +406 -0
- package/src/scripts/probe_turnaround.ts +342 -10
- package/src/scripts/ratification_subject.ts +176 -0
- package/src/scripts/rdp_gate_classify.ts +1 -0
- package/src/scripts/rdp_quality_eval.ts +1 -0
- package/src/scripts/release.ts +26 -55
- package/src/scripts/release_drill.ts +52 -23
- package/src/scripts/release_env.ts +37 -0
- package/src/scripts/release_publication.ts +11 -1
- package/src/scripts/report_consumer_gate_reach.ts +233 -0
- package/src/scripts/report_merge_gate_load.ts +295 -0
- package/src/scripts/report_project_contract.ts +123 -0
- package/src/scripts/report_reducible_classes.ts +342 -0
- package/src/scripts/report_required_checks_drift.ts +5 -3
- package/src/scripts/report_skill_host_census.ts +199 -0
- package/src/scripts/report_standing_payload_by_host.ts +7 -7
- package/src/scripts/retro.ts +758 -0
- package/src/scripts/retro_facts.ts +575 -0
- package/src/scripts/retro_queue.ts +739 -0
- package/src/scripts/retro_session_facts.ts +218 -0
- package/src/scripts/retro_sweep.ts +493 -0
- package/src/scripts/retro_triage.ts +126 -0
- package/src/scripts/roadmap_context.ts +2 -2
- package/src/scripts/roadmap_drain_queue.ts +601 -0
- package/src/scripts/run_supervise.ts +24 -2
- package/src/scripts/schemas/agent-settings.schema.json +0 -16
- package/src/scripts/schemas/command.schema.json +3 -3
- package/src/scripts/schemas/review-findings.schema.json +8 -0
- package/src/scripts/schemas/skill.schema.json +7 -6
- package/src/scripts/schemas/subagent.schema.json +33 -2
- package/src/scripts/score_skill_selection.ts +5 -2
- package/src/scripts/second_brain_retrieval.ts +1 -0
- package/src/scripts/second_brain_run.ts +1 -0
- package/src/scripts/self_repair_cli.ts +563 -87
- package/src/scripts/self_review_gate.ts +59 -4
- package/src/scripts/session_register_hook.ts +91 -4
- package/src/scripts/sessions_cli.ts +100 -5
- package/src/scripts/skill_collision_clusters.ts +1 -1
- package/src/scripts/skill_tools/score_skill_relevance.ts +31 -2
- package/src/scripts/skill_trigger_eval.ts +4 -2
- package/src/scripts/source_adapters.ts +183 -0
- package/src/scripts/step_receipt.ts +100 -0
- package/src/scripts/sync_pr_branch.ts +4 -0
- package/src/scripts/test_council_qualification.ts +1 -1
- package/src/scripts/trigger_eval_grandfather.json +3 -49
- package/src/scripts/trigger_eval_rotation.ts +31 -3
- package/src/scripts/ui_conformance_probe.ts +405 -1
- package/src/scripts/update_counts.ts +230 -11
- package/src/scripts/update_invite_hook.ts +245 -0
- package/src/scripts/update_notice_hook.ts +298 -0
- package/src/scripts/validate_frontmatter.ts +85 -0
- package/src/scripts/worker_reuse_shadow_report.ts +121 -0
- package/src/scripts/worktree_cleanup_check.ts +915 -121
- package/src/server/io/yamlIO.ts +2 -2
- package/src/server/schemas/settings.ts +37 -23
- package/src/shared/brandTokenDocument.ts +46 -0
- package/src/shared/brandTokenPaths.ts +43 -0
- package/src/shared/settingsCarveOut.ts +0 -8
- package/src/shared/skillRanking.ts +106 -5
- package/src/shared/userMd/formAdapter.ts +15 -1
- package/src/shared/userMd/schema.ts +22 -0
- package/src/templates/agent-user.md +4 -0
- package/src/templates/agent-user.yml +4 -0
- package/dist/cli-delegate/chunk-4DBG5K7M.js +0 -1123
- package/dist/cli-delegate/chunk-523HCFYO.js +0 -90
- package/dist/cli-delegate/chunk-AL3RZ22D.js +0 -74
- package/dist/cli-delegate/chunk-KB5FZ655.js +0 -208
- package/dist/cli-delegate/chunk-MDPPKQCQ.js +0 -875
- package/dist/cli-delegate/chunk-OAFSJBHH.js +0 -272
- package/dist/ui/assets/index-C3djEJah.js +0 -23
- package/src/scripts/_lib/continuation_ladder.ts +0 -335
- package/src/scripts/hooks/run_continuation_hook.ts +0 -1524
|
@@ -162,6 +162,32 @@ export function count(kind: string): number {
|
|
|
162
162
|
const [, , active] = canonical_counts();
|
|
163
163
|
return active;
|
|
164
164
|
}
|
|
165
|
+
if (kind === 'commands_toplevel') {
|
|
166
|
+
// Command files at the TOP LEVEL of the projected directory, not
|
|
167
|
+
// recursively. The README sub-note exists to explain why the badge and
|
|
168
|
+
// the linked directory disagree, so this count is the directory's own
|
|
169
|
+
// listing — a recursive count here would make the sentence explain
|
|
170
|
+
// nothing (`road-to-surfaces-no-gate-reads` 1.1).
|
|
171
|
+
const dir = path.join(REPO_ROOT, 'dist', 'agent-src', 'commands');
|
|
172
|
+
if (!_exists(dir)) return 0;
|
|
173
|
+
let n = 0;
|
|
174
|
+
for (const f of fs.readdirSync(dir)) {
|
|
175
|
+
if (f.endsWith('.md') && f !== 'AGENTS.md') n += 1;
|
|
176
|
+
}
|
|
177
|
+
return n;
|
|
178
|
+
}
|
|
179
|
+
if (kind === 'rules_projected') {
|
|
180
|
+
// Rules in the projection, which is NOT the source count: a dormant
|
|
181
|
+
// rule ships in `src/rules/` and is not projected. The sub-note states
|
|
182
|
+
// both and the difference is the thing it explains.
|
|
183
|
+
const dir = path.join(REPO_ROOT, 'dist', 'agent-src', 'rules');
|
|
184
|
+
if (!_exists(dir)) return 0;
|
|
185
|
+
let n = 0;
|
|
186
|
+
for (const f of fs.readdirSync(dir)) {
|
|
187
|
+
if (f.endsWith('.md') && f !== 'README.md') n += 1;
|
|
188
|
+
}
|
|
189
|
+
return n;
|
|
190
|
+
}
|
|
165
191
|
if (kind === 'skills_scoped') {
|
|
166
192
|
// Skills a DEFAULT `projection.mode: scoped` install deploys. Derived
|
|
167
193
|
// by the installer's own prune predicate over the same walk the
|
|
@@ -197,6 +223,21 @@ export function count(kind: string): number {
|
|
|
197
223
|
}
|
|
198
224
|
let total = 0;
|
|
199
225
|
const seen = new Set<string>();
|
|
226
|
+
if (kind === 'advisors') {
|
|
227
|
+
// The Advisors badge sat on the claim row with no pattern behind it,
|
|
228
|
+
// while the sub-note said all six badge counts are re-derived. The
|
|
229
|
+
// `personas` walk is flat, so the advisors subdirectory is its own kind.
|
|
230
|
+
for (const root of artefact_roots()) {
|
|
231
|
+
for (const f of _glob(path.join(root, 'personas', 'advisors'), (n) => n.endsWith('.md'))) {
|
|
232
|
+
if (path.basename(f) === 'README.md') continue;
|
|
233
|
+
const rel = path.relative(root, f).split(path.sep).join('/');
|
|
234
|
+
if (seen.has(rel)) continue;
|
|
235
|
+
seen.add(rel);
|
|
236
|
+
total += 1;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
return total;
|
|
240
|
+
}
|
|
200
241
|
if (kind === 'commands') {
|
|
201
242
|
// Commands live under packages/*/commands/ AND the 6.0.0-D
|
|
202
243
|
// src/domains/<pack>/<subpath>/command.md homes; iter_commands()
|
|
@@ -263,6 +304,20 @@ export const TARGETS: ReadonlyArray<[string, ReadonlyArray<[string, string]>]> =
|
|
|
263
304
|
['(/badge/Commands-)(\\d+)(-)', 'commands_active'],
|
|
264
305
|
['(/badge/Guidelines-)(\\d+)(-)', 'guidelines'],
|
|
265
306
|
['(/badge/Personas-)(\\d+)(-)', 'personas'],
|
|
307
|
+
['(/badge/Advisors-)(\\d+)(-)', 'advisors'],
|
|
308
|
+
// The sub-note under the badges. The comment above used to end at
|
|
309
|
+
// "Prose counts were removed from the README on purpose", and the
|
|
310
|
+
// sub-note re-added four of them in `fc1bdec4f` without an owner.
|
|
311
|
+
// At 2026-10-12 two had drifted — "Rules 121" against 122 source
|
|
312
|
+
// rules, "projection holds 120" against 121 — while the two
|
|
313
|
+
// Commands figures happened to be right, which is exactly how a
|
|
314
|
+
// hand-typed number fails: silently, and only on some of them.
|
|
315
|
+
// Gated rather than deleted (D1): the sentence answers a real
|
|
316
|
+
// reader question about why the badge and the directory differ.
|
|
317
|
+
['(\\*\\*Commands )(\\d+)(\\*\\* counts every command file)', 'commands_active'],
|
|
318
|
+
['(holds )(\\d+)( at its top level)', 'commands_toplevel'],
|
|
319
|
+
['(\\*\\*Rules )(\\d+)(\\*\\* counts the)', 'rules'],
|
|
320
|
+
['(projection holds )(\\d+)()', 'rules_projected'],
|
|
266
321
|
],
|
|
267
322
|
],
|
|
268
323
|
[
|
|
@@ -294,6 +349,54 @@ export const TARGETS: ReadonlyArray<[string, ReadonlyArray<[string, string]>]> =
|
|
|
294
349
|
'docs/command-flows.md',
|
|
295
350
|
[['(\\*\\*)(\\d+)( commands\\*\\*)', 'commands_active']],
|
|
296
351
|
],
|
|
352
|
+
// The documentation site carried the same figures by hand and nothing read
|
|
353
|
+
// them. Measured 2026-10-14 against a tree of skills 300 / rules 122 /
|
|
354
|
+
// commands 205 / guidelines 121, the two "what's inside" tables were stale
|
|
355
|
+
// on EVERY generated row — 278 / 105 / 190 / 101 — and seven further
|
|
356
|
+
// literal `190`s sat across five files, while the README two directories up
|
|
357
|
+
// said one canonical counter re-derives the figures and fails CI on a drift
|
|
358
|
+
// of one. It did; its TARGETS list simply stopped at `docs/`. Gated rather
|
|
359
|
+
// than deleted, the same call the README sub-note took: the numbers answer
|
|
360
|
+
// a reader's question, and a generated number is a better answer than none.
|
|
361
|
+
[
|
|
362
|
+
'site/src/content/docs/architecture/overview.md',
|
|
363
|
+
[
|
|
364
|
+
['(\\| \\*\\*Skills\\*\\* \\| )(\\d+)( \\|)', 'skills'],
|
|
365
|
+
['(\\| \\*\\*Rules\\*\\* \\| )(\\d+)( \\|)', 'rules'],
|
|
366
|
+
['(\\| \\*\\*Commands\\*\\* \\| )(\\d+)( \\|)', 'commands_active'],
|
|
367
|
+
['(\\| \\*\\*Guidelines\\*\\* \\| )(\\d+)( \\|)', 'guidelines'],
|
|
368
|
+
['(\\| \\*\\*Personas\\*\\* \\| )(\\d+)( \\()', 'personas'],
|
|
369
|
+
],
|
|
370
|
+
],
|
|
371
|
+
[
|
|
372
|
+
'site/src/content/docs/getting-started/introduction.md',
|
|
373
|
+
[
|
|
374
|
+
['(\\| \\*\\*Skills\\*\\* \\| )(\\d+)( \\|)', 'skills'],
|
|
375
|
+
['(\\| \\*\\*Rules\\*\\* \\| )(\\d+)( \\|)', 'rules'],
|
|
376
|
+
['(\\| \\*\\*Commands\\*\\* \\| )(\\d+)( \\|)', 'commands_active'],
|
|
377
|
+
['(\\| \\*\\*Guidelines\\*\\* \\| )(\\d+)( \\|)', 'guidelines'],
|
|
378
|
+
['(\\| \\*\\*Personas\\*\\* \\| )(\\d+)( \\|)', 'personas'],
|
|
379
|
+
],
|
|
380
|
+
],
|
|
381
|
+
[
|
|
382
|
+
'site/src/content/docs/agent-commands/overview.md',
|
|
383
|
+
[
|
|
384
|
+
['(ships \\*\\*)(\\d+)(\\*\\* agent commands)', 'commands_active'],
|
|
385
|
+
['(index of all )(\\d+)(:)', 'commands_active'],
|
|
386
|
+
],
|
|
387
|
+
],
|
|
388
|
+
[
|
|
389
|
+
'site/src/content/docs/agent-commands/key-commands.md',
|
|
390
|
+
[['(exhaustive list of all )(\\d+)(, see)', 'commands_active']],
|
|
391
|
+
],
|
|
392
|
+
[
|
|
393
|
+
'site/src/content/docs/agent-commands/clusters.md',
|
|
394
|
+
// The page's own `description:` frontmatter carried a second copy of
|
|
395
|
+
// the figure. A meta description is not where a reader goes for a
|
|
396
|
+
// count, so that one is dropped rather than generated; the body line
|
|
397
|
+
// that a reader does act on stays, and is generated.
|
|
398
|
+
[['(\\) lists all )(\\d+)(\\.)', 'commands_active']],
|
|
399
|
+
],
|
|
297
400
|
[
|
|
298
401
|
'docs/getting-started-by-role.md',
|
|
299
402
|
[
|
|
@@ -343,13 +446,24 @@ export const TARGETS: ReadonlyArray<[string, ReadonlyArray<[string, string]>]> =
|
|
|
343
446
|
],
|
|
344
447
|
];
|
|
345
448
|
|
|
346
|
-
/**
|
|
449
|
+
/**
|
|
450
|
+
* Return [new_text, drifts, unapplied]. Each drift is [kind, old, new]; each
|
|
451
|
+
* unapplied entry is a pattern that produced NO substitution and the reason.
|
|
452
|
+
*
|
|
453
|
+
* A pattern that matches nothing used to warn on stderr and continue, so
|
|
454
|
+
* `--check` reported "All counts in sync" for a sentence it could no longer
|
|
455
|
+
* find — a figure that drifts after its pattern stops matching it is exactly
|
|
456
|
+
* the silent pass a counter exists to prevent. The caller decides what to do
|
|
457
|
+
* with the list; in check mode it is a failure.
|
|
458
|
+
*/
|
|
347
459
|
export function apply_to_text(
|
|
348
460
|
text: string,
|
|
349
461
|
patterns: ReadonlyArray<[string, string]>,
|
|
350
462
|
counts: Record<string, number>,
|
|
351
|
-
): [string, Array<[string, number, number]>] {
|
|
463
|
+
): [string, Array<[string, number, number]>, Array<[string, string, string]>] {
|
|
352
464
|
const drifts: Array<[string, number, number]> = [];
|
|
465
|
+
// [pattern, kind, reason]
|
|
466
|
+
const unapplied: Array<[string, string, string]> = [];
|
|
353
467
|
let new_text = text;
|
|
354
468
|
for (const [pattern, kind] of patterns) {
|
|
355
469
|
// Python re.compile(pattern).finditer / .sub — global, non-overlapping.
|
|
@@ -357,34 +471,100 @@ export function apply_to_text(
|
|
|
357
471
|
const matches = [...new_text.matchAll(reFind)];
|
|
358
472
|
if (matches.length === 0) {
|
|
359
473
|
process.stderr.write(` ⚠️ pattern missed: /${pattern}/ (kind=${kind})\n`);
|
|
474
|
+
unapplied.push([pattern, kind, 'pattern matched nothing']);
|
|
475
|
+
continue;
|
|
476
|
+
}
|
|
477
|
+
// A kind with no count is a BUG in TARGETS or KINDS, and writing it
|
|
478
|
+
// anyway puts the literal `undefined` into a published file. Measured
|
|
479
|
+
// on 2026-10-12: adding two patterns without adding their kinds to
|
|
480
|
+
// KINDS rewrote the README sub-note to "holds undefined at its top
|
|
481
|
+
// level" and `--check` then reported "All counts in sync", because the
|
|
482
|
+
// pattern no longer matched its own output. Refuse instead, loudly.
|
|
483
|
+
const next = counts[kind];
|
|
484
|
+
if (typeof next !== 'number' || !Number.isFinite(next)) {
|
|
485
|
+
process.stderr.write(
|
|
486
|
+
` ❌ no count for kind=${kind} (pattern /${pattern}/) — ` +
|
|
487
|
+
'add it to KINDS; refusing to write `undefined` into the target\n',
|
|
488
|
+
);
|
|
489
|
+
unapplied.push([pattern, kind, 'no count for this kind']);
|
|
360
490
|
continue;
|
|
361
491
|
}
|
|
362
492
|
for (const m of matches) {
|
|
363
493
|
const old = Number.parseInt(m[2] as string, 10);
|
|
364
|
-
const next = counts[kind] as number;
|
|
365
494
|
if (old !== next) {
|
|
366
495
|
drifts.push([kind, old, next]);
|
|
367
496
|
}
|
|
368
497
|
}
|
|
369
498
|
const reSub = new RegExp(pattern, 'g');
|
|
370
499
|
new_text = new_text.replace(reSub, (_full, g1: string, _g2: string, g3: string) => {
|
|
371
|
-
return `${g1}${
|
|
500
|
+
return `${g1}${next}${g3}`;
|
|
372
501
|
});
|
|
373
502
|
}
|
|
374
|
-
return [new_text, drifts];
|
|
503
|
+
return [new_text, drifts, unapplied];
|
|
375
504
|
}
|
|
376
505
|
|
|
377
|
-
const KINDS = [
|
|
506
|
+
export const KINDS = [
|
|
378
507
|
'skills',
|
|
379
508
|
'skills_scoped',
|
|
380
509
|
'rules',
|
|
381
510
|
'commands',
|
|
382
511
|
'commands_active',
|
|
512
|
+
'commands_toplevel',
|
|
513
|
+
'rules_projected',
|
|
383
514
|
'guidelines',
|
|
384
515
|
'personas',
|
|
516
|
+
'advisors',
|
|
385
517
|
'router_rules',
|
|
386
518
|
] as const;
|
|
387
519
|
|
|
520
|
+
export const CLAIM_ROW_MARKER = '<!-- claim:published-artifact-counts -->';
|
|
521
|
+
|
|
522
|
+
/**
|
|
523
|
+
* Badges on a claim-row line that no count pattern re-derives.
|
|
524
|
+
*
|
|
525
|
+
* The counts are matched by URL pattern, never by position, so a badge dropped
|
|
526
|
+
* onto the claim row that matches no pattern used to pass `--check` unseen
|
|
527
|
+
* while the row promises every figure on it is machine-checked. The allowed
|
|
528
|
+
* set is the target's own `/badge/` patterns, so adding a count adds its badge.
|
|
529
|
+
* Inline, reference-style and HTML `<img>` images are all read.
|
|
530
|
+
*/
|
|
531
|
+
export function claim_row_findings(
|
|
532
|
+
text: string,
|
|
533
|
+
patterns: ReadonlyArray<[string, string]>,
|
|
534
|
+
): Array<[number, string]> {
|
|
535
|
+
const badge_patterns = patterns
|
|
536
|
+
.filter(([pattern]) => pattern.includes('/badge/'))
|
|
537
|
+
.map(([pattern]) => new RegExp(pattern));
|
|
538
|
+
const definitions = new Map<string, string>();
|
|
539
|
+
for (const m of text.matchAll(/^ {0,3}\[([^\]]+)\]:\s*<?([^\s>]+)>?/gm)) {
|
|
540
|
+
definitions.set((m[1] as string).trim().toLowerCase(), m[2] as string);
|
|
541
|
+
}
|
|
542
|
+
const findings: Array<[number, string]> = [];
|
|
543
|
+
text.split('\n').forEach((line, index) => {
|
|
544
|
+
if (!line.includes(CLAIM_ROW_MARKER)) return;
|
|
545
|
+
const urls: string[] = [];
|
|
546
|
+
for (const m of line.matchAll(/!\[([^\]]*)\](?:\(([^)\s]+)[^)]*\)|\[([^\]]*)\])?/g)) {
|
|
547
|
+
if (m[2] !== undefined) {
|
|
548
|
+
urls.push(m[2]);
|
|
549
|
+
continue;
|
|
550
|
+
}
|
|
551
|
+
// Reference (`![a][ref]`), collapsed (`![a][]`) and shortcut (`![a]`)
|
|
552
|
+
// forms. An unresolvable label is reported as itself, never skipped.
|
|
553
|
+
const label = (m[3] || m[1] || '').trim();
|
|
554
|
+
urls.push(definitions.get(label.toLowerCase()) ?? `[${label}]`);
|
|
555
|
+
}
|
|
556
|
+
for (const m of line.matchAll(/<img\b[^>]*?\ssrc\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\s>]+))/gi)) {
|
|
557
|
+
urls.push((m[1] ?? m[2] ?? m[3]) as string);
|
|
558
|
+
}
|
|
559
|
+
for (const url of urls) {
|
|
560
|
+
if (!badge_patterns.some((re) => re.test(url))) {
|
|
561
|
+
findings.push([index + 1, url]);
|
|
562
|
+
}
|
|
563
|
+
}
|
|
564
|
+
});
|
|
565
|
+
return findings;
|
|
566
|
+
}
|
|
567
|
+
|
|
388
568
|
function parse_args(argv: readonly string[]): { check: boolean } {
|
|
389
569
|
const args = { check: false };
|
|
390
570
|
const usage = 'usage: update_counts.py [-h] [--check]\n';
|
|
@@ -403,8 +583,19 @@ function parse_args(argv: readonly string[]): { check: boolean } {
|
|
|
403
583
|
return args;
|
|
404
584
|
}
|
|
405
585
|
|
|
406
|
-
|
|
586
|
+
/**
|
|
587
|
+
* `opts` exists so the check-mode contract can be tested against a fixture
|
|
588
|
+
* tree instead of the real one. A test that has to edit a tracked file to
|
|
589
|
+
* exercise a gate is a test that cannot run, so the seam is here rather than
|
|
590
|
+
* in the test.
|
|
591
|
+
*/
|
|
592
|
+
export function main(
|
|
593
|
+
argv: readonly string[] = process.argv.slice(2),
|
|
594
|
+
opts: { root?: string; targets?: ReadonlyArray<[string, ReadonlyArray<[string, string]>]> } = {},
|
|
595
|
+
): number {
|
|
407
596
|
const args = parse_args(argv);
|
|
597
|
+
const root = opts.root ?? REPO_ROOT;
|
|
598
|
+
const targets = opts.targets ?? TARGETS;
|
|
408
599
|
|
|
409
600
|
const counts: Record<string, number> = {};
|
|
410
601
|
for (const k of KINDS) {
|
|
@@ -415,19 +606,32 @@ export function main(argv: readonly string[] = process.argv.slice(2)): number {
|
|
|
415
606
|
`rules=${counts['rules']} commands=${counts['commands']} ` +
|
|
416
607
|
`commands_active=${counts['commands_active']} ` +
|
|
417
608
|
`guidelines=${counts['guidelines']} ` +
|
|
418
|
-
`personas=${counts['personas']}
|
|
609
|
+
`personas=${counts['personas']} advisors=${counts['advisors']} ` +
|
|
610
|
+
`router_rules=${counts['router_rules']}\n`,
|
|
419
611
|
);
|
|
420
612
|
|
|
421
613
|
let any_drift = false;
|
|
422
614
|
let any_change = false;
|
|
423
|
-
|
|
424
|
-
|
|
615
|
+
let any_unapplied = false;
|
|
616
|
+
let any_unguarded = false;
|
|
617
|
+
for (const [rel, patterns] of targets) {
|
|
618
|
+
const p = path.join(root, rel);
|
|
425
619
|
if (!_exists(p)) {
|
|
426
620
|
process.stderr.write(`❌ Missing target: ${rel}\n`);
|
|
427
621
|
return 1;
|
|
428
622
|
}
|
|
429
623
|
const text = fs.readFileSync(p, 'utf-8');
|
|
430
|
-
const [new_text, drifts] = apply_to_text(text, patterns, counts);
|
|
624
|
+
const [new_text, drifts, unapplied] = apply_to_text(text, patterns, counts);
|
|
625
|
+
for (const [line, url] of claim_row_findings(text, patterns)) {
|
|
626
|
+
any_unguarded = true;
|
|
627
|
+
process.stderr.write(
|
|
628
|
+
` ❌ ${rel}:${line}: badge on the claim row that no count re-derives — ${url}\n`,
|
|
629
|
+
);
|
|
630
|
+
}
|
|
631
|
+
for (const [pattern, kind, reason] of unapplied) {
|
|
632
|
+
any_unapplied = true;
|
|
633
|
+
process.stderr.write(` ❌ ${rel}: ${reason} — /${pattern}/ (kind=${kind})\n`);
|
|
634
|
+
}
|
|
431
635
|
if (drifts.length > 0) {
|
|
432
636
|
any_drift = true;
|
|
433
637
|
for (const [kind, old, next] of drifts) {
|
|
@@ -441,6 +645,21 @@ export function main(argv: readonly string[] = process.argv.slice(2)): number {
|
|
|
441
645
|
}
|
|
442
646
|
|
|
443
647
|
if (args.check) {
|
|
648
|
+
if (any_unapplied) {
|
|
649
|
+
process.stderr.write(
|
|
650
|
+
'\n❌ A pattern applied to nothing (named above). The figure it owns is ' +
|
|
651
|
+
'no longer generated, so a drift in it would pass unseen. Fix the pattern ' +
|
|
652
|
+
'or drop it with the figure.\n',
|
|
653
|
+
);
|
|
654
|
+
return 1;
|
|
655
|
+
}
|
|
656
|
+
if (any_unguarded) {
|
|
657
|
+
process.stderr.write(
|
|
658
|
+
'\n❌ A badge on the claim row is not re-derived (named above). Move it off ' +
|
|
659
|
+
'the line carrying the claim marker, or add a count that derives it.\n',
|
|
660
|
+
);
|
|
661
|
+
return 1;
|
|
662
|
+
}
|
|
444
663
|
if (any_drift) {
|
|
445
664
|
process.stderr.write('\n❌ Stale counts detected. Run `task counts-update` to fix.\n');
|
|
446
665
|
return 1;
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* `update-auto-invite` — the `stop` concern that asks an EXISTING install,
|
|
4
|
+
* once, whether updates may install themselves.
|
|
5
|
+
*
|
|
6
|
+
* ADR-291 is the policy: `auto` may default for a new install; an existing one
|
|
7
|
+
* is asked once, after the ring-0 exit and the live-session register, with a
|
|
8
|
+
* binding "never", and dismissal keeps `notify`. Step 4.3 adds the moment —
|
|
9
|
+
* after a turn that ended on a verified success, which is the one point in a
|
|
10
|
+
* session where an unrelated question is not an interruption of something.
|
|
11
|
+
*
|
|
12
|
+
* **It is closed today, by a file rather than by a flag.**
|
|
13
|
+
* The ring-0 record (`RING_ZERO_PREFIX`) carries a single
|
|
14
|
+
* `ring-0-exit:` line, written by a human after reading the record's own table,
|
|
15
|
+
* and while it reads `no` this concern returns before it has read anything
|
|
16
|
+
* else. That is deliberate: the gate on asking an existing install to change
|
|
17
|
+
* how it updates itself should be a record somebody signed, not a boolean in
|
|
18
|
+
* code the next change can flip.
|
|
19
|
+
*
|
|
20
|
+
* **It never writes `update.mode`.** That key is class C — only a hand-edit or
|
|
21
|
+
* the GUI's write route may set it. The invitation says how, and setting it to
|
|
22
|
+
* anything but `ask` is also how it stops.
|
|
23
|
+
*
|
|
24
|
+
* **State: one timestamp, per user-global config home.** `update-invite.json`
|
|
25
|
+
* holds `{invited_at}`. Every repository and session of one OS user shares it,
|
|
26
|
+
* so "once" means once per config home. Absent means never invited; present but
|
|
27
|
+
* unreadable counts as invited, because a corrupt record must not re-open the
|
|
28
|
+
* question. Deleting the file is the reset. Created once, exclusively, at mode
|
|
29
|
+
* 0600 — see {@link claimInvite}.
|
|
30
|
+
*
|
|
31
|
+
* Fail-open, exit 0 on every path except the one that carries the question,
|
|
32
|
+
* which exits 2 — the warn path, so the question reaches the agent that can
|
|
33
|
+
* put it to the user in the host's own ask shape.
|
|
34
|
+
*/
|
|
35
|
+
import * as fs from 'node:fs';
|
|
36
|
+
import * as path from 'node:path';
|
|
37
|
+
import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
38
|
+
|
|
39
|
+
import { readTurnRunState } from './before_complete_hook.js';
|
|
40
|
+
import type { UpdateMode } from './_lib/classify_update.js';
|
|
41
|
+
import { autoInviteDecision, ringZeroExited, type InviteDecision } from './_lib/update_invite.js';
|
|
42
|
+
import { readRunEvidence } from './_lib/verification_evidence.js';
|
|
43
|
+
import * as user_global_paths from './_lib/user_global_paths.js';
|
|
44
|
+
import { readHookStdin } from './hooks/hook_stdin.js';
|
|
45
|
+
import { is_replay_mode } from './hooks/state_io.js';
|
|
46
|
+
import { readUpdateMode } from './update_notice_hook.js';
|
|
47
|
+
|
|
48
|
+
export const CONCERN = 'update-auto-invite';
|
|
49
|
+
export const INVITE_STATE_FILENAME = 'update-invite.json';
|
|
50
|
+
export const RING_ZERO_GLOB_DIR = path.join('agents', 'evidence', 'analysis');
|
|
51
|
+
export const RING_ZERO_PREFIX = 'ring-0-unattended-record-';
|
|
52
|
+
|
|
53
|
+
export interface InviteState {
|
|
54
|
+
/** `null` only when no record exists; a record that does not parse reads as invited. */
|
|
55
|
+
readonly invited_at: string | null;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export const UNREADABLE_INVITE_RECORD = 'unreadable record';
|
|
59
|
+
|
|
60
|
+
export function readInviteState(statePath: string): InviteState {
|
|
61
|
+
let text: string;
|
|
62
|
+
try {
|
|
63
|
+
text = fs.readFileSync(statePath, 'utf-8');
|
|
64
|
+
} catch (err) {
|
|
65
|
+
return { invited_at: (err as NodeJS.ErrnoException).code === 'ENOENT' ? null : UNREADABLE_INVITE_RECORD };
|
|
66
|
+
}
|
|
67
|
+
try {
|
|
68
|
+
const raw: unknown = JSON.parse(text);
|
|
69
|
+
const o = raw !== null && typeof raw === 'object' && !Array.isArray(raw) ? (raw as Record<string, unknown>) : {};
|
|
70
|
+
return { invited_at: typeof o['invited_at'] === 'string' && o['invited_at'] !== '' ? o['invited_at'] : UNREADABLE_INVITE_RECORD };
|
|
71
|
+
} catch {
|
|
72
|
+
return { invited_at: UNREADABLE_INVITE_RECORD };
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Claim the one invitation: create the record only if it does not exist yet.
|
|
78
|
+
*
|
|
79
|
+
* `O_CREAT | O_EXCL` makes the claim, not the read before it, so of two
|
|
80
|
+
* sessions that both decided to ask, exactly one creates the record and only
|
|
81
|
+
* that one prints. It also refuses a symlink at the path. Nothing here throws:
|
|
82
|
+
* a claim that cannot be made asks nothing, because a question that cannot be
|
|
83
|
+
* recorded could repeat; a record created but not fully written is removed
|
|
84
|
+
* again, so a failed write cannot silence the invitation forever. A reader
|
|
85
|
+
* racing the content write sees an unreadable record, which counts as invited.
|
|
86
|
+
*/
|
|
87
|
+
export function claimInvite(
|
|
88
|
+
statePath: string,
|
|
89
|
+
invitedAt: string,
|
|
90
|
+
writeRecord: (fd: number, text: string) => void = (fd, text) => fs.writeFileSync(fd, text),
|
|
91
|
+
): boolean {
|
|
92
|
+
let fd: number;
|
|
93
|
+
try {
|
|
94
|
+
fs.mkdirSync(path.dirname(statePath), { recursive: true });
|
|
95
|
+
fd = fs.openSync(statePath, 'wx', 0o600);
|
|
96
|
+
} catch {
|
|
97
|
+
return false;
|
|
98
|
+
}
|
|
99
|
+
let written = false;
|
|
100
|
+
try {
|
|
101
|
+
writeRecord(fd, `${JSON.stringify({ invited_at: invitedAt } satisfies InviteState, null, 2)}\n`);
|
|
102
|
+
written = true;
|
|
103
|
+
} catch {
|
|
104
|
+
/* handled below: the half-written claim is withdrawn */
|
|
105
|
+
}
|
|
106
|
+
try {
|
|
107
|
+
fs.closeSync(fd);
|
|
108
|
+
} catch {
|
|
109
|
+
written = false;
|
|
110
|
+
}
|
|
111
|
+
if (!written) {
|
|
112
|
+
try {
|
|
113
|
+
fs.unlinkSync(statePath);
|
|
114
|
+
} catch {
|
|
115
|
+
/* an unremovable half-record reads as invited, the direction that cannot repeat */
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
return written;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* The newest ring-0 record's text, or `null`.
|
|
123
|
+
*
|
|
124
|
+
* Newest by filename, which carries the date — the records are dated and never
|
|
125
|
+
* renamed, so a lexical sort is a chronological one. A directory with none is
|
|
126
|
+
* `null`, which reads as "not exited".
|
|
127
|
+
*/
|
|
128
|
+
export function readRingZeroRecord(packageRoot: string): string | null {
|
|
129
|
+
try {
|
|
130
|
+
const dir = path.join(packageRoot, RING_ZERO_GLOB_DIR);
|
|
131
|
+
const names = fs
|
|
132
|
+
.readdirSync(dir)
|
|
133
|
+
.filter((n) => n.startsWith(RING_ZERO_PREFIX) && n.endsWith('.md'))
|
|
134
|
+
.sort();
|
|
135
|
+
const newest = names[names.length - 1];
|
|
136
|
+
return newest === undefined ? null : fs.readFileSync(path.join(dir, newest), 'utf-8');
|
|
137
|
+
} catch {
|
|
138
|
+
return null;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
export interface InviteDeps {
|
|
143
|
+
readonly packageRoot: string;
|
|
144
|
+
readonly workspaceRoot: string;
|
|
145
|
+
readonly sessionId: string;
|
|
146
|
+
readonly mode: UpdateMode | undefined;
|
|
147
|
+
readonly statePath: string;
|
|
148
|
+
readonly ringZeroText: string | null;
|
|
149
|
+
readonly env: NodeJS.ProcessEnv;
|
|
150
|
+
readonly isTty: boolean;
|
|
151
|
+
readonly out: { write(text: string): void };
|
|
152
|
+
/** Overrides the read of the turn's verification evidence. */
|
|
153
|
+
readonly turnEndedOnVerifiedSuccess?: boolean;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/** Decide, claim, emit. Returns the decision so a test asserts on a value. */
|
|
157
|
+
export function runInvite(deps: InviteDeps): InviteDecision {
|
|
158
|
+
const state = readInviteState(deps.statePath);
|
|
159
|
+
const decision = autoInviteDecision({
|
|
160
|
+
mode: deps.mode,
|
|
161
|
+
ringZeroExited: ringZeroExited(deps.ringZeroText),
|
|
162
|
+
// Step 1.4 landed the machine-wide register, so this is true wherever
|
|
163
|
+
// this code runs. It stays an input because the condition is ADR-291's,
|
|
164
|
+
// not this file's, and a reader should see it being checked.
|
|
165
|
+
registerAvailable: true,
|
|
166
|
+
alreadyInvited: state.invited_at !== null,
|
|
167
|
+
turnEndedOnVerifiedSuccess: deps.turnEndedOnVerifiedSuccess ?? verifiedSuccess(deps.workspaceRoot, deps.sessionId),
|
|
168
|
+
env: {
|
|
169
|
+
ci: ['1', 'true'].includes((deps.env['CI'] ?? '').trim().toLowerCase()) || deps.env['GITHUB_ACTIONS'] === 'true',
|
|
170
|
+
noUpdateCheck: deps.env['AGENT_CONFIG_NO_UPDATE_CHECK'] === '1',
|
|
171
|
+
interactive: deps.isTty,
|
|
172
|
+
headless: deps.env['AGENT_CONFIG_NO_UI'] === '1' || (deps.env['DISPLAY'] === '' && deps.env['AGENT_CONFIG_HEADLESS'] === '1'),
|
|
173
|
+
jsonOutput: deps.env['AGENT_CONFIG_JSON'] === '1' || (deps.env['AGENT_CONFIG_ARGV'] ?? '').includes('--json'),
|
|
174
|
+
subagent: deps.env['AGENT_CONFIG_SUBAGENT'] === '1' || deps.env['CLAUDE_AGENT_TYPE'] !== undefined,
|
|
175
|
+
},
|
|
176
|
+
});
|
|
177
|
+
if (!decision.ask) return decision;
|
|
178
|
+
if (!claimInvite(deps.statePath, new Date().toISOString())) return { ask: false, reason: 'already invited once' };
|
|
179
|
+
for (const line of decision.lines) deps.out.write(`${line}\n`);
|
|
180
|
+
return decision;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
function verifiedSuccess(workspaceRoot: string, sessionId: string): boolean {
|
|
184
|
+
const runState = readTurnRunState(workspaceRoot, sessionId);
|
|
185
|
+
return runState !== null && readRunEvidence(runState).passed;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
function envelopeField(raw: string, key: string): string {
|
|
189
|
+
try {
|
|
190
|
+
const doc: unknown = JSON.parse(raw);
|
|
191
|
+
const v = (doc as Record<string, unknown> | null)?.[key];
|
|
192
|
+
return typeof v === 'string' ? v : '';
|
|
193
|
+
} catch {
|
|
194
|
+
return '';
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
function packageRootOf(): string {
|
|
199
|
+
return process.env['AGENT_CONFIG_PACKAGE_ROOT'] ?? path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..', '..');
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
export function main(argv?: string[]): number {
|
|
203
|
+
void argv;
|
|
204
|
+
const raw = readHookStdin();
|
|
205
|
+
if (is_replay_mode()) return 0;
|
|
206
|
+
try {
|
|
207
|
+
const packageRoot = packageRootOf();
|
|
208
|
+
// The cheapest refusal first: while the record says `no` there is
|
|
209
|
+
// nothing else worth reading, and on every install today it says `no`.
|
|
210
|
+
const ringZeroText = readRingZeroRecord(packageRoot);
|
|
211
|
+
if (!ringZeroExited(ringZeroText)) return 0;
|
|
212
|
+
const decision = runInvite({
|
|
213
|
+
packageRoot,
|
|
214
|
+
workspaceRoot: envelopeField(raw, 'workspace_root') || process.cwd(),
|
|
215
|
+
sessionId: envelopeField(raw, 'session_id'),
|
|
216
|
+
mode: readUpdateMode(),
|
|
217
|
+
statePath: user_global_paths.write_target(INVITE_STATE_FILENAME),
|
|
218
|
+
ringZeroText,
|
|
219
|
+
env: process.env,
|
|
220
|
+
isTty: Boolean(process.stderr.isTTY) && Boolean(process.stdout.isTTY),
|
|
221
|
+
out: process.stderr,
|
|
222
|
+
});
|
|
223
|
+
// Exit 2 is the warn delivery path: the question reaches the agent,
|
|
224
|
+
// which puts it to the user in this host's declared ask shape.
|
|
225
|
+
return decision.ask ? 2 : 0;
|
|
226
|
+
} catch {
|
|
227
|
+
return 0;
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
declare const __AGENT_CONFIG_BUNDLE__: boolean | undefined;
|
|
232
|
+
function _isCliEntry(): boolean {
|
|
233
|
+
if (typeof __AGENT_CONFIG_BUNDLE__ !== 'undefined' && __AGENT_CONFIG_BUNDLE__) return false;
|
|
234
|
+
if (process.argv[1] === undefined) return false;
|
|
235
|
+
if (import.meta.url === pathToFileURL(path.resolve(process.argv[1])).href) return true;
|
|
236
|
+
try {
|
|
237
|
+
return fs.realpathSync(fileURLToPath(import.meta.url)) === fs.realpathSync(path.resolve(process.argv[1]));
|
|
238
|
+
} catch {
|
|
239
|
+
return false;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
if (_isCliEntry()) {
|
|
244
|
+
process.exit(main(process.argv.slice(2)));
|
|
245
|
+
}
|