@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
|
@@ -2,58 +2,33 @@
|
|
|
2
2
|
import { createRequire as __acCreateRequire } from 'node:module'; const require = globalThis.require ?? __acCreateRequire(import.meta.url);
|
|
3
3
|
|
|
4
4
|
// src/scripts/check_update_banner.ts
|
|
5
|
-
import * as
|
|
6
|
-
import * as
|
|
5
|
+
import * as fs9 from "node:fs";
|
|
6
|
+
import * as tty from "node:tty";
|
|
7
|
+
import * as path9 from "node:path";
|
|
7
8
|
import { fileURLToPath as fileURLToPath2, pathToFileURL } from "node:url";
|
|
8
9
|
|
|
9
|
-
// src/scripts/
|
|
10
|
-
import { createRequire } from "node:module";
|
|
10
|
+
// src/scripts/_cli/doctor_install_mode.ts
|
|
11
11
|
import * as fs3 from "node:fs";
|
|
12
12
|
import * as path3 from "node:path";
|
|
13
13
|
|
|
14
|
-
// src/scripts/_lib/
|
|
15
|
-
import
|
|
16
|
-
import * as
|
|
17
|
-
import
|
|
18
|
-
var PACKAGE_NAME = "@event4u/agent-config";
|
|
19
|
-
var MAX_ASCENT = 16;
|
|
20
|
-
function resolvePackageRoot(fromUrlOrPath, legacyHops = 3) {
|
|
21
|
-
const start = fromUrlOrPath.startsWith("file:") ? fileURLToPath(fromUrlOrPath) : fromUrlOrPath;
|
|
22
|
-
const startDir = path.dirname(start);
|
|
23
|
-
let dir = startDir;
|
|
24
|
-
for (let i = 0; i < MAX_ASCENT; i++) {
|
|
25
|
-
const manifest = path.join(dir, "package.json");
|
|
26
|
-
if (fs.existsSync(manifest)) {
|
|
27
|
-
try {
|
|
28
|
-
const parsed = JSON.parse(fs.readFileSync(manifest, "utf8"));
|
|
29
|
-
if (parsed.name === PACKAGE_NAME) {
|
|
30
|
-
return dir;
|
|
31
|
-
}
|
|
32
|
-
} catch {
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
const parent = path.dirname(dir);
|
|
36
|
-
if (parent === dir) {
|
|
37
|
-
break;
|
|
38
|
-
}
|
|
39
|
-
dir = parent;
|
|
40
|
-
}
|
|
41
|
-
return path.resolve(startDir, ...Array.from({ length: legacyHops }, () => ".."));
|
|
42
|
-
}
|
|
14
|
+
// src/scripts/_lib/update_check.ts
|
|
15
|
+
import { randomBytes } from "node:crypto";
|
|
16
|
+
import * as fs2 from "node:fs";
|
|
17
|
+
import * as path2 from "node:path";
|
|
43
18
|
|
|
44
19
|
// src/scripts/_lib/user_global_paths.ts
|
|
45
|
-
import * as
|
|
20
|
+
import * as fs from "node:fs";
|
|
46
21
|
import * as os from "node:os";
|
|
47
|
-
import * as
|
|
22
|
+
import * as path from "node:path";
|
|
48
23
|
var EVENT4U_HOME_ENV = "EVENT4U_CONFIG_HOME";
|
|
49
|
-
var DEFAULT_EVENT4U_ROOT_RELATIVE =
|
|
50
|
-
var LEGACY_XDG_ROOT_RELATIVE =
|
|
24
|
+
var DEFAULT_EVENT4U_ROOT_RELATIVE = path.join(".event4u", "agent-config");
|
|
25
|
+
var LEGACY_XDG_ROOT_RELATIVE = path.join(".config", "agent-config");
|
|
51
26
|
function expanduser(p) {
|
|
52
27
|
if (p === "~") {
|
|
53
28
|
return os.homedir();
|
|
54
29
|
}
|
|
55
30
|
if (p.startsWith("~/") || process.platform === "win32" && p.startsWith("~\\")) {
|
|
56
|
-
return
|
|
31
|
+
return path.join(os.homedir(), p.slice(2));
|
|
57
32
|
}
|
|
58
33
|
return p;
|
|
59
34
|
}
|
|
@@ -69,10 +44,10 @@ function event4u_root(env) {
|
|
|
69
44
|
if (override) {
|
|
70
45
|
return expanduser(override);
|
|
71
46
|
}
|
|
72
|
-
return
|
|
47
|
+
return path.join(os.homedir(), DEFAULT_EVENT4U_ROOT_RELATIVE);
|
|
73
48
|
}
|
|
74
49
|
function legacy_xdg_root() {
|
|
75
|
-
return
|
|
50
|
+
return path.join(os.homedir(), LEGACY_XDG_ROOT_RELATIVE);
|
|
76
51
|
}
|
|
77
52
|
function resolve_with_fallback(relative_name, options = {}) {
|
|
78
53
|
if (is_absolute_like_python(relative_name)) {
|
|
@@ -80,12 +55,12 @@ function resolve_with_fallback(relative_name, options = {}) {
|
|
|
80
55
|
`resolve_with_fallback expects a relative path, got '${relative_name}'`
|
|
81
56
|
);
|
|
82
57
|
}
|
|
83
|
-
const new_path =
|
|
84
|
-
if (
|
|
58
|
+
const new_path = path.join(event4u_root(options.env ?? null), relative_name);
|
|
59
|
+
if (fs.existsSync(new_path)) {
|
|
85
60
|
return new_path;
|
|
86
61
|
}
|
|
87
|
-
const legacy_path =
|
|
88
|
-
if (
|
|
62
|
+
const legacy_path = path.join(legacy_xdg_root(), relative_name);
|
|
63
|
+
if (fs.existsSync(legacy_path)) {
|
|
89
64
|
return legacy_path;
|
|
90
65
|
}
|
|
91
66
|
return null;
|
|
@@ -94,7 +69,295 @@ function write_target(relative_name, options = {}) {
|
|
|
94
69
|
if (is_absolute_like_python(relative_name)) {
|
|
95
70
|
throw new Error(`write_target expects a relative path, got '${relative_name}'`);
|
|
96
71
|
}
|
|
97
|
-
return
|
|
72
|
+
return path.join(event4u_root(options.env ?? null), relative_name);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// src/scripts/_lib/version_order.ts
|
|
76
|
+
var NUM = "(0|[1-9]\\d*)";
|
|
77
|
+
var IDENT = "[0-9A-Za-z-]+";
|
|
78
|
+
var VERSION_RE = new RegExp(
|
|
79
|
+
`^v*${NUM}\\.${NUM}\\.${NUM}(?:-(${IDENT}(?:\\.${IDENT})*))?(?:\\+${IDENT}(?:\\.${IDENT})*)?$`
|
|
80
|
+
);
|
|
81
|
+
|
|
82
|
+
// src/scripts/_lib/update_check.ts
|
|
83
|
+
var PACKAGE_NAME = "@event4u/agent-config";
|
|
84
|
+
var NPM_REGISTRY_URL = `https://registry.npmjs.org/${PACKAGE_NAME}/latest`;
|
|
85
|
+
var FETCH_TIMEOUT_S = 1;
|
|
86
|
+
var CHECK_WINDOW_MS = 24 * 60 * 60 * 1e3;
|
|
87
|
+
var STATE_FILENAME = "update-check.json";
|
|
88
|
+
var DEFAULT_STATE_PATH = write_target(STATE_FILENAME);
|
|
89
|
+
function _resolve_state_path() {
|
|
90
|
+
const found = resolve_with_fallback(STATE_FILENAME);
|
|
91
|
+
if (found !== null) {
|
|
92
|
+
return found;
|
|
93
|
+
}
|
|
94
|
+
return DEFAULT_STATE_PATH;
|
|
95
|
+
}
|
|
96
|
+
async function fetch_latest_document(options = {}) {
|
|
97
|
+
const timeout = options.timeout ?? FETCH_TIMEOUT_S;
|
|
98
|
+
const url = options.url ?? NPM_REGISTRY_URL;
|
|
99
|
+
const fetch_impl = options.fetch_impl ?? fetch;
|
|
100
|
+
try {
|
|
101
|
+
const resp = await fetch_impl(url, {
|
|
102
|
+
headers: {
|
|
103
|
+
Accept: "application/json",
|
|
104
|
+
"User-Agent": "agent-config-update-check"
|
|
105
|
+
},
|
|
106
|
+
signal: AbortSignal.timeout(timeout * 1e3)
|
|
107
|
+
});
|
|
108
|
+
const payload = await resp.json();
|
|
109
|
+
if (payload !== null && typeof payload === "object" && !Array.isArray(payload)) {
|
|
110
|
+
const doc = payload;
|
|
111
|
+
const version = doc["version"];
|
|
112
|
+
if (typeof version === "string" && version.trim()) {
|
|
113
|
+
const cfg = doc["agentConfig"];
|
|
114
|
+
const impact = cfg !== null && typeof cfg === "object" && !Array.isArray(cfg) ? cfg["impact"] : null;
|
|
115
|
+
return { version: version.trim(), impact: impact ?? null };
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
} catch {
|
|
119
|
+
return null;
|
|
120
|
+
}
|
|
121
|
+
return null;
|
|
122
|
+
}
|
|
123
|
+
function _cacheable_impact(impact) {
|
|
124
|
+
if (impact === null || typeof impact !== "object" || Array.isArray(impact)) return null;
|
|
125
|
+
const out = {};
|
|
126
|
+
for (const [version, entry] of Object.entries(impact)) {
|
|
127
|
+
if (!/^\d+\.\d+\.\d+(?:[-+][0-9A-Za-z.-]+)?$/.test(version)) continue;
|
|
128
|
+
if (entry === null || typeof entry !== "object" || Array.isArray(entry)) continue;
|
|
129
|
+
const value = entry["impact"];
|
|
130
|
+
if (!["none", "automatic", "notice", "action"].includes(String(value))) continue;
|
|
131
|
+
out[version] = { impact: String(value), security: entry["security"] === true };
|
|
132
|
+
}
|
|
133
|
+
return Object.keys(out).length > 0 ? out : null;
|
|
134
|
+
}
|
|
135
|
+
function _read_state(state_path) {
|
|
136
|
+
try {
|
|
137
|
+
const raw = fs2.readFileSync(state_path, "utf-8");
|
|
138
|
+
const data = JSON.parse(raw);
|
|
139
|
+
if (data !== null && typeof data === "object" && !Array.isArray(data)) {
|
|
140
|
+
return data;
|
|
141
|
+
}
|
|
142
|
+
} catch {
|
|
143
|
+
}
|
|
144
|
+
return {};
|
|
145
|
+
}
|
|
146
|
+
function _write_state(state_path, payload) {
|
|
147
|
+
const parent = path2.dirname(state_path);
|
|
148
|
+
fs2.mkdirSync(parent, { recursive: true });
|
|
149
|
+
const tmp = path2.join(parent, `.update-check-${randomBytes(8).toString("hex")}`);
|
|
150
|
+
try {
|
|
151
|
+
const sorted = {};
|
|
152
|
+
for (const key of Object.keys(payload).sort()) {
|
|
153
|
+
sorted[key] = payload[key];
|
|
154
|
+
}
|
|
155
|
+
fs2.writeFileSync(tmp, JSON.stringify(sorted, null, 2), { encoding: "utf-8", mode: 384 });
|
|
156
|
+
fs2.chmodSync(tmp, 384);
|
|
157
|
+
fs2.renameSync(tmp, state_path);
|
|
158
|
+
} catch (err) {
|
|
159
|
+
try {
|
|
160
|
+
fs2.unlinkSync(tmp);
|
|
161
|
+
} catch {
|
|
162
|
+
}
|
|
163
|
+
throw err;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
function _should_check(state, now) {
|
|
167
|
+
const last = state.last_check_utc;
|
|
168
|
+
if (typeof last !== "string") {
|
|
169
|
+
return true;
|
|
170
|
+
}
|
|
171
|
+
let normalized = last.replace(/Z/g, "+00:00");
|
|
172
|
+
if (!/[+-]\d{2}:?\d{2}$/.test(normalized)) {
|
|
173
|
+
normalized = `${normalized}+00:00`;
|
|
174
|
+
}
|
|
175
|
+
const last_ms = Date.parse(normalized);
|
|
176
|
+
if (Number.isNaN(last_ms)) {
|
|
177
|
+
return true;
|
|
178
|
+
}
|
|
179
|
+
return now.getTime() - last_ms >= CHECK_WINDOW_MS;
|
|
180
|
+
}
|
|
181
|
+
var GLOBAL_TREE = /[\\/](?:lib|npm)[\\/]node_modules[\\/]@event4u[\\/]agent-config[\\/]?$/;
|
|
182
|
+
function classify_install_origin(signals) {
|
|
183
|
+
const pin = signals.project_pin?.trim() ?? "";
|
|
184
|
+
if (pin !== "") {
|
|
185
|
+
return signals.latest && _is_newer(signals.latest, pin) ? "project-pin" : "unknown";
|
|
186
|
+
}
|
|
187
|
+
if (signals.package_root.split(/[\\/]+/).includes("_npx")) {
|
|
188
|
+
return "ephemeral";
|
|
189
|
+
}
|
|
190
|
+
if (signals.is_global_consumer || GLOBAL_TREE.test(signals.package_root)) {
|
|
191
|
+
return "global";
|
|
192
|
+
}
|
|
193
|
+
return "unknown";
|
|
194
|
+
}
|
|
195
|
+
function _format_banner(latest, installed, origin = "unknown") {
|
|
196
|
+
const head = `\u2139\uFE0F agent-config ${latest} available (you have ${installed}).`;
|
|
197
|
+
if (origin === "global") {
|
|
198
|
+
return `${head}
|
|
199
|
+
Update: agent-config upgrade`;
|
|
200
|
+
}
|
|
201
|
+
if (origin === "project-pin") {
|
|
202
|
+
return `${head}
|
|
203
|
+
Update: agent-config update`;
|
|
204
|
+
}
|
|
205
|
+
return head;
|
|
206
|
+
}
|
|
207
|
+
function _int_or_zero(part) {
|
|
208
|
+
const trimmed = part.trim();
|
|
209
|
+
if (/^[+-]?\d+$/.test(trimmed)) {
|
|
210
|
+
return parseInt(trimmed, 10);
|
|
211
|
+
}
|
|
212
|
+
return 0;
|
|
213
|
+
}
|
|
214
|
+
function _is_newer(latest, installed) {
|
|
215
|
+
const parse = (v) => {
|
|
216
|
+
const core = v.replace(/^v+/, "").split("-")[0] ?? "";
|
|
217
|
+
const parts = core.split(".");
|
|
218
|
+
const out = [];
|
|
219
|
+
for (const p of parts.slice(0, 3)) {
|
|
220
|
+
out.push(_int_or_zero(p));
|
|
221
|
+
}
|
|
222
|
+
while (out.length < 3) {
|
|
223
|
+
out.push(0);
|
|
224
|
+
}
|
|
225
|
+
return [out[0], out[1], out[2]];
|
|
226
|
+
};
|
|
227
|
+
const a = parse(latest);
|
|
228
|
+
const b = parse(installed);
|
|
229
|
+
for (let i = 0; i < 3; i += 1) {
|
|
230
|
+
if (a[i] > b[i]) {
|
|
231
|
+
return true;
|
|
232
|
+
}
|
|
233
|
+
if (a[i] < b[i]) {
|
|
234
|
+
return false;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
return false;
|
|
238
|
+
}
|
|
239
|
+
function _resolve_origin(origin, latest) {
|
|
240
|
+
return typeof origin === "function" ? origin(latest) : origin;
|
|
241
|
+
}
|
|
242
|
+
function _format_utc(d) {
|
|
243
|
+
return d.toISOString().replace(/\.\d{3}Z$/, "Z");
|
|
244
|
+
}
|
|
245
|
+
async function check_for_update(installed_version, options = {}) {
|
|
246
|
+
const env = options.env ?? process.env;
|
|
247
|
+
if (env.AGENT_CONFIG_NO_UPDATE_CHECK === "1") {
|
|
248
|
+
return null;
|
|
249
|
+
}
|
|
250
|
+
if (env.CI === "1" || env.CI === "true" || env.GITHUB_ACTIONS === "true") {
|
|
251
|
+
return null;
|
|
252
|
+
}
|
|
253
|
+
const settings_enabled = options.settings_enabled ?? true;
|
|
254
|
+
if (!settings_enabled) {
|
|
255
|
+
return null;
|
|
256
|
+
}
|
|
257
|
+
let is_tty = options.is_tty ?? null;
|
|
258
|
+
if (is_tty === null) {
|
|
259
|
+
is_tty = Boolean(process.stdout.isTTY);
|
|
260
|
+
}
|
|
261
|
+
if (!is_tty) {
|
|
262
|
+
return null;
|
|
263
|
+
}
|
|
264
|
+
const now = options.now ?? /* @__PURE__ */ new Date();
|
|
265
|
+
const read_path = options.state_path ?? _resolve_state_path();
|
|
266
|
+
const write_path = options.state_path ?? DEFAULT_STATE_PATH;
|
|
267
|
+
const state = _read_state(read_path);
|
|
268
|
+
if (!_should_check(state, now)) {
|
|
269
|
+
const latest2 = state.last_seen_version;
|
|
270
|
+
if (typeof latest2 === "string" && _is_newer(latest2, installed_version)) {
|
|
271
|
+
return _format_banner(latest2, installed_version, _resolve_origin(options.origin, latest2));
|
|
272
|
+
}
|
|
273
|
+
return null;
|
|
274
|
+
}
|
|
275
|
+
let impact = null;
|
|
276
|
+
let latest;
|
|
277
|
+
if (options.fetcher === void 0) {
|
|
278
|
+
const doc = await fetch_latest_document();
|
|
279
|
+
latest = doc?.version ?? null;
|
|
280
|
+
impact = doc?.impact ?? null;
|
|
281
|
+
} else {
|
|
282
|
+
latest = await options.fetcher();
|
|
283
|
+
}
|
|
284
|
+
const fallback_seen = Object.prototype.hasOwnProperty.call(state, "last_seen_version") ? state.last_seen_version : "";
|
|
285
|
+
const payload = {
|
|
286
|
+
last_check_utc: _format_utc(now),
|
|
287
|
+
// Python: `latest or state.get("last_seen_version", "")`.
|
|
288
|
+
last_seen_version: latest ? latest : fallback_seen,
|
|
289
|
+
installed_version
|
|
290
|
+
};
|
|
291
|
+
const cacheable = _cacheable_impact(impact);
|
|
292
|
+
if (cacheable !== null) payload["last_seen_impact"] = cacheable;
|
|
293
|
+
else if (state["last_seen_impact"] !== void 0 && !latest) payload["last_seen_impact"] = state["last_seen_impact"];
|
|
294
|
+
try {
|
|
295
|
+
_write_state(write_path, payload);
|
|
296
|
+
} catch (err) {
|
|
297
|
+
const code = err.code;
|
|
298
|
+
if (typeof code !== "string") {
|
|
299
|
+
throw err;
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
if (!latest || !_is_newer(latest, installed_version)) {
|
|
303
|
+
return null;
|
|
304
|
+
}
|
|
305
|
+
return _format_banner(latest, installed_version, _resolve_origin(options.origin, latest));
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
// src/scripts/_cli/doctor_install_mode.ts
|
|
309
|
+
function isFile(p) {
|
|
310
|
+
try {
|
|
311
|
+
return fs3.statSync(p).isFile();
|
|
312
|
+
} catch {
|
|
313
|
+
return false;
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
function isDir(p) {
|
|
317
|
+
try {
|
|
318
|
+
return fs3.statSync(p).isDirectory();
|
|
319
|
+
} catch {
|
|
320
|
+
return false;
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
var INSTALL_MODE_MARKER_RELATIVE = "agents/.agent-state/install-mode.txt";
|
|
324
|
+
function _is_global_only_consumer(project_root) {
|
|
325
|
+
return isFile(path3.join(project_root, INSTALL_MODE_MARKER_RELATIVE)) || isDir(path3.join(project_root, "agents", "overrides"));
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
// src/scripts/_lib/agent_settings.ts
|
|
329
|
+
import { createRequire } from "node:module";
|
|
330
|
+
import * as fs5 from "node:fs";
|
|
331
|
+
import * as path5 from "node:path";
|
|
332
|
+
|
|
333
|
+
// src/scripts/_lib/package_root.ts
|
|
334
|
+
import * as fs4 from "node:fs";
|
|
335
|
+
import * as path4 from "node:path";
|
|
336
|
+
import { fileURLToPath } from "node:url";
|
|
337
|
+
var PACKAGE_NAME2 = "@event4u/agent-config";
|
|
338
|
+
var MAX_ASCENT = 16;
|
|
339
|
+
function resolvePackageRoot(fromUrlOrPath, legacyHops = 3) {
|
|
340
|
+
const start = fromUrlOrPath.startsWith("file:") ? fileURLToPath(fromUrlOrPath) : fromUrlOrPath;
|
|
341
|
+
const startDir = path4.dirname(start);
|
|
342
|
+
let dir = startDir;
|
|
343
|
+
for (let i = 0; i < MAX_ASCENT; i++) {
|
|
344
|
+
const manifest = path4.join(dir, "package.json");
|
|
345
|
+
if (fs4.existsSync(manifest)) {
|
|
346
|
+
try {
|
|
347
|
+
const parsed = JSON.parse(fs4.readFileSync(manifest, "utf8"));
|
|
348
|
+
if (parsed.name === PACKAGE_NAME2) {
|
|
349
|
+
return dir;
|
|
350
|
+
}
|
|
351
|
+
} catch {
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
const parent = path4.dirname(dir);
|
|
355
|
+
if (parent === dir) {
|
|
356
|
+
break;
|
|
357
|
+
}
|
|
358
|
+
dir = parent;
|
|
359
|
+
}
|
|
360
|
+
return path4.resolve(startDir, ...Array.from({ length: legacyHops }, () => ".."));
|
|
98
361
|
}
|
|
99
362
|
|
|
100
363
|
// src/shared/settingsCarveOut.ts
|
|
@@ -105,12 +368,6 @@ var SETTINGS_CARVE_OUT = [
|
|
|
105
368
|
absentResolvesTo: "legacy-all",
|
|
106
369
|
reason: "The template fallback applies only when NO global settings file exists. Once a file exists, an absent key means legacy-all by documented contract, so an existing install is never silently narrowed on upgrade."
|
|
107
370
|
},
|
|
108
|
-
{
|
|
109
|
-
key: "projection.rule_workspaces",
|
|
110
|
-
reader: "src/install/rule_scope.ts:96 ruleScopeFromSettings",
|
|
111
|
-
absentResolvesTo: "null \u2014 LEGACY_ALL, i.e. every rule ships including maintainer-only ones",
|
|
112
|
-
reason: "Same upgrade contract as projection.mode, and the failure is louder: an absent list widens the projection instead of narrowing it."
|
|
113
|
-
},
|
|
114
371
|
{
|
|
115
372
|
key: "discipline_profile",
|
|
116
373
|
reader: "work_engine/_lib/agent_settings.ts:1263",
|
|
@@ -153,6 +410,7 @@ function carveOutKeys() {
|
|
|
153
410
|
}
|
|
154
411
|
|
|
155
412
|
// src/scripts/_lib/settings_renamed_keys.ts
|
|
413
|
+
var SETTINGS_REMOVAL_RULE = "A settings key may be removed or renamed in a minor release only when no consumer project can rely on it \u2014 default-neutral and derivable, proven by a named test; any other removal or rename ships only in a major, and a renamed key's alias is dropped only in a major.";
|
|
156
414
|
var RENAMED_KEYS = /* @__PURE__ */ new Map([
|
|
157
415
|
["planning.challenge_on_create", "planning.closure_pass"]
|
|
158
416
|
]);
|
|
@@ -183,7 +441,7 @@ function applyRenamedKeys(layer) {
|
|
|
183
441
|
if (_warned.has(oldKey)) continue;
|
|
184
442
|
_warned.add(oldKey);
|
|
185
443
|
process.stderr.write(
|
|
186
|
-
`\u26A0\uFE0F settings: \`${oldKey}\` was renamed to \`${newKey}
|
|
444
|
+
`\u26A0\uFE0F settings: \`${oldKey}\` was renamed to \`${newKey}\`; the old key still works. ${SETTINGS_REMOVAL_RULE} Rename it in your .agent-settings.yml.
|
|
187
445
|
`
|
|
188
446
|
);
|
|
189
447
|
}
|
|
@@ -259,7 +517,11 @@ var REMOVED_KEYS = /* @__PURE__ */ new Map([
|
|
|
259
517
|
["pipelines.skill_improvement", "the skill-improvement-trigger rule; the capture is a proposal the user confirms"],
|
|
260
518
|
["consistency.cross_source", "the cross-source-consistency rule, always on; batching and the no-cheap-questions floor bound the noise"],
|
|
261
519
|
["subagents.downshift", "the model_tier each sub-task declares; downshift is always on"],
|
|
262
|
-
["ai_team.suppress_setup_hint", "nothing: the one-line team-mode setup hint is always shown"]
|
|
520
|
+
["ai_team.suppress_setup_hint", "nothing: the one-line team-mode setup hint is always shown"],
|
|
521
|
+
// 2026-10-20 — the projection keys (ADR-293, road-to-a-setup-that-decides-itself Phase 4)
|
|
522
|
+
["lean_projection.mode", "the computed layer-form decision (_lib/layer_form_decision.ts), plus `install --full` and src/config/layer-form-brakes.json as the two brakes. For one release window an installer converts a leftover `eager-all` into the install receipt pin and drops any other value, saying which (_lib/projection_key_migration.ts); the project tree reads the package-owned src/config/project-tree-form.json, never this key"],
|
|
523
|
+
["lean_projection.hosts", "THINNABLE_HOSTS in _lib/lean_projection_mode.ts and the per-host row in src/config/host-injection-effect.json; no reader of this key remains"],
|
|
524
|
+
["projection.rule_workspaces", "consumerRuleWorkspaces() in _lib/scoped_projection.ts, which derives the consumer workspace set from src/config/discovery/packs.yml \u2014 every id minus `agent-config-maintainer` \u2014 so a new pack reaches consumers without a settings edit"]
|
|
263
525
|
]);
|
|
264
526
|
var _warnedRemovedKeys = /* @__PURE__ */ new Set();
|
|
265
527
|
function _readDotted(root, dotted) {
|
|
@@ -326,10 +588,10 @@ var DEFAULT_PROJECT_FILE = ".agent-settings.yml";
|
|
|
326
588
|
var LOCAL_PROJECT_FILE = ".agent-settings.local.yml";
|
|
327
589
|
var LOCAL_PROJECT_SUBDIR = ["agents", "settings"];
|
|
328
590
|
function _local_settings_path(project_root) {
|
|
329
|
-
return
|
|
591
|
+
return path5.join(project_root, ...LOCAL_PROJECT_SUBDIR, LOCAL_PROJECT_FILE);
|
|
330
592
|
}
|
|
331
593
|
function _canonical_settings_path(project_root) {
|
|
332
|
-
return
|
|
594
|
+
return path5.join(project_root, ...LOCAL_PROJECT_SUBDIR, DEFAULT_PROJECT_FILE);
|
|
333
595
|
}
|
|
334
596
|
var USER_GLOBAL_FILENAME = "agent-settings.yml";
|
|
335
597
|
function DEFAULT_USER_GLOBAL_FILE() {
|
|
@@ -385,22 +647,17 @@ var MERGEABLE_KEYS = [
|
|
|
385
647
|
// GUI; whitelisting decides only whether the value SURVIVES the merge
|
|
386
648
|
// (ADR-271, road-to-design-intent-conformance 2.3).
|
|
387
649
|
"design.fidelity_mode",
|
|
388
|
-
// `
|
|
389
|
-
//
|
|
390
|
-
//
|
|
391
|
-
//
|
|
392
|
-
//
|
|
393
|
-
|
|
394
|
-
// an ADR-020 global-only install, where no project layer exists to carry it.
|
|
395
|
-
// Whitelisting decides only whether a value SURVIVES the merge: it sets
|
|
396
|
-
// nothing, and `installerThinsHost` still refuses a template-only value.
|
|
397
|
-
"lean_projection.mode",
|
|
398
|
-
"lean_projection.hosts"
|
|
650
|
+
// `retro.enabled` is the one switch over the automatic retro (ADR-292). It
|
|
651
|
+
// ships `true`, so the only value worth writing is `false`, and a user who
|
|
652
|
+
// writes it once in the user-global file expects every checkout without its
|
|
653
|
+
// own value to honour it — without this row the off switch would be
|
|
654
|
+
// discarded silently. A project value still wins.
|
|
655
|
+
"retro.enabled"
|
|
399
656
|
];
|
|
400
|
-
var TEMPLATE_RELATIVE =
|
|
657
|
+
var TEMPLATE_RELATIVE = path5.join("src", "config", "agent-settings.template.yml");
|
|
401
658
|
var _PACKAGE_ROOT = resolvePackageRoot(import.meta.url);
|
|
402
659
|
function default_template_path() {
|
|
403
|
-
return
|
|
660
|
+
return path5.join(_PACKAGE_ROOT, TEMPLATE_RELATIVE);
|
|
404
661
|
}
|
|
405
662
|
function _is_placeholder(value) {
|
|
406
663
|
return typeof value === "string" && /^__[A-Z0-9_]+__$/.test(value);
|
|
@@ -451,8 +708,8 @@ var _AGENTS_DIR_MARKERS = [
|
|
|
451
708
|
var _LEGACY_ANCHOR_ENV = "AGENT_CONFIG_LEGACY_ANCHOR";
|
|
452
709
|
function _exists(p) {
|
|
453
710
|
try {
|
|
454
|
-
|
|
455
|
-
|
|
711
|
+
fs5.lstatSync(p);
|
|
712
|
+
fs5.statSync(p);
|
|
456
713
|
return true;
|
|
457
714
|
} catch {
|
|
458
715
|
return false;
|
|
@@ -460,22 +717,22 @@ function _exists(p) {
|
|
|
460
717
|
}
|
|
461
718
|
function _is_dir(p) {
|
|
462
719
|
try {
|
|
463
|
-
return
|
|
720
|
+
return fs5.statSync(p).isDirectory();
|
|
464
721
|
} catch {
|
|
465
722
|
return false;
|
|
466
723
|
}
|
|
467
724
|
}
|
|
468
725
|
function _is_file(p) {
|
|
469
726
|
try {
|
|
470
|
-
return
|
|
727
|
+
return fs5.statSync(p).isFile();
|
|
471
728
|
} catch {
|
|
472
729
|
return false;
|
|
473
730
|
}
|
|
474
731
|
}
|
|
475
732
|
function _resolve(p) {
|
|
476
|
-
const absolute =
|
|
733
|
+
const absolute = path5.resolve(p);
|
|
477
734
|
try {
|
|
478
|
-
return
|
|
735
|
+
return fs5.realpathSync(absolute);
|
|
479
736
|
} catch {
|
|
480
737
|
return absolute;
|
|
481
738
|
}
|
|
@@ -485,7 +742,7 @@ function _ancestor_chain(start) {
|
|
|
485
742
|
let cursor = start;
|
|
486
743
|
for (; ; ) {
|
|
487
744
|
chain.push(cursor);
|
|
488
|
-
const parent =
|
|
745
|
+
const parent = path5.dirname(cursor);
|
|
489
746
|
if (parent === cursor) {
|
|
490
747
|
break;
|
|
491
748
|
}
|
|
@@ -494,15 +751,15 @@ function _ancestor_chain(start) {
|
|
|
494
751
|
return chain;
|
|
495
752
|
}
|
|
496
753
|
function _boundary_anchor_at(dir) {
|
|
497
|
-
const agents_dir =
|
|
754
|
+
const agents_dir = path5.join(dir, "agents");
|
|
498
755
|
if (_is_dir(agents_dir)) {
|
|
499
756
|
for (const marker of _AGENTS_DIR_MARKERS) {
|
|
500
|
-
if (_exists(
|
|
757
|
+
if (_exists(path5.join(agents_dir, marker))) {
|
|
501
758
|
return ANCHOR_AGENTS_DIR;
|
|
502
759
|
}
|
|
503
760
|
}
|
|
504
761
|
}
|
|
505
|
-
if (_exists(
|
|
762
|
+
if (_exists(path5.join(dir, ".git"))) {
|
|
506
763
|
return ANCHOR_GIT;
|
|
507
764
|
}
|
|
508
765
|
return null;
|
|
@@ -513,7 +770,7 @@ function find_project_root_with_anchor(start) {
|
|
|
513
770
|
const chain = _ancestor_chain(current);
|
|
514
771
|
if (legacy) {
|
|
515
772
|
for (const candidate of chain) {
|
|
516
|
-
if (_exists(
|
|
773
|
+
if (_exists(path5.join(candidate, ".git"))) {
|
|
517
774
|
return [candidate, ANCHOR_GIT];
|
|
518
775
|
}
|
|
519
776
|
}
|
|
@@ -527,7 +784,7 @@ function find_project_root_with_anchor(start) {
|
|
|
527
784
|
}
|
|
528
785
|
let outermost = null;
|
|
529
786
|
for (const candidate of chain) {
|
|
530
|
-
if (_exists(
|
|
787
|
+
if (_exists(path5.join(candidate, DEFAULT_PROJECT_FILE))) {
|
|
531
788
|
outermost = candidate;
|
|
532
789
|
}
|
|
533
790
|
}
|
|
@@ -543,13 +800,13 @@ function find_project_root(start) {
|
|
|
543
800
|
function _resolve_cascade_paths(cwd, project_path) {
|
|
544
801
|
if (cwd === null) {
|
|
545
802
|
const legacy = project_path ? project_path : DEFAULT_PROJECT_FILE;
|
|
546
|
-
const parent =
|
|
803
|
+
const parent = path5.dirname(legacy);
|
|
547
804
|
return [legacy, _canonical_settings_path(parent), _local_settings_path(parent)];
|
|
548
805
|
}
|
|
549
806
|
const root = find_project_root(cwd);
|
|
550
807
|
if (root === null) {
|
|
551
808
|
const legacy = project_path ? project_path : DEFAULT_PROJECT_FILE;
|
|
552
|
-
const parent =
|
|
809
|
+
const parent = path5.dirname(legacy);
|
|
553
810
|
return [legacy, _canonical_settings_path(parent), _local_settings_path(parent)];
|
|
554
811
|
}
|
|
555
812
|
const cwd_resolved = _resolve(cwd);
|
|
@@ -560,7 +817,7 @@ function _resolve_cascade_paths(cwd, project_path) {
|
|
|
560
817
|
if (cursor === root) {
|
|
561
818
|
break;
|
|
562
819
|
}
|
|
563
|
-
const parent =
|
|
820
|
+
const parent = path5.dirname(cursor);
|
|
564
821
|
if (parent === cursor) {
|
|
565
822
|
break;
|
|
566
823
|
}
|
|
@@ -568,11 +825,37 @@ function _resolve_cascade_paths(cwd, project_path) {
|
|
|
568
825
|
}
|
|
569
826
|
chain.reverse();
|
|
570
827
|
return [
|
|
571
|
-
...chain.map((d) =>
|
|
828
|
+
...chain.map((d) => path5.join(d, DEFAULT_PROJECT_FILE)),
|
|
572
829
|
_canonical_settings_path(root),
|
|
573
830
|
_local_settings_path(root)
|
|
574
831
|
];
|
|
575
832
|
}
|
|
833
|
+
function _probe_yaml(p) {
|
|
834
|
+
if (!_is_file(p)) return "absent";
|
|
835
|
+
let YAML;
|
|
836
|
+
try {
|
|
837
|
+
YAML = _require("yaml");
|
|
838
|
+
} catch {
|
|
839
|
+
return "malformed";
|
|
840
|
+
}
|
|
841
|
+
try {
|
|
842
|
+
YAML.parse(fs5.readFileSync(p, "utf-8"), { version: "1.1" });
|
|
843
|
+
return "valid";
|
|
844
|
+
} catch (err) {
|
|
845
|
+
if (_is_yaml_error(err) || _is_os_error(err)) return "malformed";
|
|
846
|
+
throw err;
|
|
847
|
+
}
|
|
848
|
+
}
|
|
849
|
+
function settings_layer_states(options = {}) {
|
|
850
|
+
const project_path = options.project_path ?? null;
|
|
851
|
+
const cwd = options.cwd ?? null;
|
|
852
|
+
const user_global = options.user_global_path ? [options.user_global_path] : user_global_settings_paths();
|
|
853
|
+
const out = [];
|
|
854
|
+
for (const p of [...user_global, ..._resolve_cascade_paths(cwd, project_path)]) {
|
|
855
|
+
out.push({ path: p, state: _probe_yaml(p) });
|
|
856
|
+
}
|
|
857
|
+
return out;
|
|
858
|
+
}
|
|
576
859
|
function load_agent_settings(options = {}) {
|
|
577
860
|
const project_path = options.project_path ?? null;
|
|
578
861
|
const user_global_path = options.user_global_path ?? null;
|
|
@@ -614,7 +897,7 @@ function _read_yaml(p) {
|
|
|
614
897
|
}
|
|
615
898
|
let data;
|
|
616
899
|
try {
|
|
617
|
-
const text =
|
|
900
|
+
const text = fs5.readFileSync(p, "utf-8");
|
|
618
901
|
data = YAML.parse(text, { version: "1.1" });
|
|
619
902
|
if (data === null || data === void 0) {
|
|
620
903
|
data = {};
|
|
@@ -713,216 +996,269 @@ function _is_plain_dict(value) {
|
|
|
713
996
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
714
997
|
}
|
|
715
998
|
|
|
716
|
-
// src/scripts/_lib/
|
|
717
|
-
import
|
|
718
|
-
import * as
|
|
719
|
-
|
|
720
|
-
gate;
|
|
721
|
-
constructor(gate, message) {
|
|
722
|
-
super(message);
|
|
723
|
-
this.name = "DeadScopeError";
|
|
724
|
-
this.gate = gate;
|
|
725
|
-
}
|
|
726
|
-
};
|
|
727
|
-
function assertWatchlistResolves(opts) {
|
|
728
|
-
const resolved = opts.candidates.filter((rel) => {
|
|
729
|
-
try {
|
|
730
|
-
return fs4.statSync(path4.join(opts.repoRoot, rel)).isFile();
|
|
731
|
-
} catch {
|
|
732
|
-
return false;
|
|
733
|
-
}
|
|
734
|
-
});
|
|
735
|
-
if (resolved.length === 0) {
|
|
736
|
-
throw new DeadScopeError(
|
|
737
|
-
opts.gate,
|
|
738
|
-
`${opts.gate}: none of its ${opts.candidates.length} guarded path(s) exist under ${opts.repoRoot} \u2014 the guard is watching phantoms and can never fire. Checked: ${opts.candidates.join(", ")}`
|
|
739
|
-
);
|
|
740
|
-
}
|
|
741
|
-
return resolved;
|
|
742
|
-
}
|
|
999
|
+
// src/scripts/_lib/advisory_notice.ts
|
|
1000
|
+
import { createHash } from "node:crypto";
|
|
1001
|
+
import * as fs7 from "node:fs";
|
|
1002
|
+
import * as path7 from "node:path";
|
|
743
1003
|
|
|
744
|
-
// src/scripts/_lib/
|
|
745
|
-
import
|
|
746
|
-
import
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
var STATE_FILENAME = "update-check.json";
|
|
753
|
-
var DEFAULT_STATE_PATH = write_target(STATE_FILENAME);
|
|
754
|
-
function _resolve_state_path() {
|
|
755
|
-
const found = resolve_with_fallback(STATE_FILENAME);
|
|
756
|
-
if (found !== null) {
|
|
757
|
-
return found;
|
|
1004
|
+
// src/scripts/_lib/git_common_dir.ts
|
|
1005
|
+
import fs6 from "node:fs";
|
|
1006
|
+
import path6 from "node:path";
|
|
1007
|
+
function realpath_or_self(p) {
|
|
1008
|
+
try {
|
|
1009
|
+
return fs6.realpathSync(p);
|
|
1010
|
+
} catch {
|
|
1011
|
+
return p;
|
|
758
1012
|
}
|
|
759
|
-
return DEFAULT_STATE_PATH;
|
|
760
1013
|
}
|
|
761
|
-
|
|
762
|
-
const
|
|
763
|
-
const url = options.url ?? NPM_REGISTRY_URL;
|
|
764
|
-
const fetch_impl = options.fetch_impl ?? fetch;
|
|
1014
|
+
function git_common_dir(project_root) {
|
|
1015
|
+
const dot_git = path6.join(project_root, ".git");
|
|
765
1016
|
try {
|
|
766
|
-
const
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
1017
|
+
const st = fs6.statSync(dot_git);
|
|
1018
|
+
if (st.isDirectory()) {
|
|
1019
|
+
return realpath_or_self(dot_git);
|
|
1020
|
+
}
|
|
1021
|
+
const m = fs6.readFileSync(dot_git, "utf-8").match(/^gitdir:\s*(.+)\s*$/m);
|
|
1022
|
+
if (m === null) {
|
|
1023
|
+
return null;
|
|
1024
|
+
}
|
|
1025
|
+
const gitdir = path6.resolve(project_root, m[1].trim());
|
|
1026
|
+
const commondir_file = path6.join(gitdir, "commondir");
|
|
1027
|
+
if (fs6.existsSync(commondir_file)) {
|
|
1028
|
+
const common = path6.resolve(gitdir, fs6.readFileSync(commondir_file, "utf-8").trim());
|
|
1029
|
+
return realpath_or_self(common);
|
|
779
1030
|
}
|
|
1031
|
+
return realpath_or_self(gitdir);
|
|
780
1032
|
} catch {
|
|
781
1033
|
return null;
|
|
782
1034
|
}
|
|
783
|
-
return null;
|
|
784
1035
|
}
|
|
785
|
-
|
|
1036
|
+
|
|
1037
|
+
// src/scripts/_lib/undeployed_fixes.ts
|
|
1038
|
+
var UNDEPLOYED_AFTER_HOURS = 24;
|
|
1039
|
+
function mergedNotDeployed(all, findings, now = /* @__PURE__ */ new Date()) {
|
|
1040
|
+
const byKey = new Map(findings.map((f) => [f.key, f]));
|
|
1041
|
+
const rows = [];
|
|
1042
|
+
for (const r of Object.values(all)) {
|
|
1043
|
+
if (r.state !== "fixed-in-trunk" && r.state !== "fixed-released") continue;
|
|
1044
|
+
const since = r.stamps["fixed-in-trunk"];
|
|
1045
|
+
if (since === void 0) continue;
|
|
1046
|
+
const hours = (now.getTime() - Date.parse(since)) / 36e5;
|
|
1047
|
+
if (!Number.isFinite(hours) || hours < UNDEPLOYED_AFTER_HOURS) continue;
|
|
1048
|
+
const f = byKey.get(r.key);
|
|
1049
|
+
if (f !== void 0 && f.tier !== "T0" && f.tier !== "T1") continue;
|
|
1050
|
+
rows.push({ id: r.key.split("|")[0] ?? r.key, mergeSha: r.merge_sha, hours: Math.floor(hours) });
|
|
1051
|
+
}
|
|
1052
|
+
return rows;
|
|
1053
|
+
}
|
|
1054
|
+
|
|
1055
|
+
// src/scripts/_lib/advisory_notice.ts
|
|
1056
|
+
var STALE_AFTER_HOURS = 24;
|
|
1057
|
+
var SILENCE_NOTICE_DAYS = 3;
|
|
1058
|
+
function readAdvisorySettings(root) {
|
|
786
1059
|
try {
|
|
787
|
-
|
|
788
|
-
const
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
1060
|
+
if (settings_layer_states({ cwd: root }).some((l) => l.state === "malformed")) return { mode: "off", egress: "none", kev: "off" };
|
|
1061
|
+
const section = load_agent_settings({ cwd: root })["advisories"];
|
|
1062
|
+
const s = section !== null && typeof section === "object" && !Array.isArray(section) ? section : {};
|
|
1063
|
+
return {
|
|
1064
|
+
// An unquoted `off` is YAML's boolean false: both mean off.
|
|
1065
|
+
mode: s["mode"] === "off" || s["mode"] === false ? "off" : "notify",
|
|
1066
|
+
egress: s["egress"] === "none" ? "none" : "query",
|
|
1067
|
+
kev: s["kev"] === "off" || s["kev"] === false ? "off" : "on"
|
|
1068
|
+
};
|
|
792
1069
|
} catch {
|
|
1070
|
+
return { mode: "off", egress: "none", kev: "off" };
|
|
793
1071
|
}
|
|
794
|
-
return {};
|
|
795
1072
|
}
|
|
796
|
-
function
|
|
797
|
-
const
|
|
798
|
-
|
|
799
|
-
|
|
1073
|
+
function statePath(root) {
|
|
1074
|
+
const common = git_common_dir(root);
|
|
1075
|
+
if (common === null) return null;
|
|
1076
|
+
let real = path7.resolve(root);
|
|
800
1077
|
try {
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
1078
|
+
real = fs7.realpathSync(root);
|
|
1079
|
+
} catch {
|
|
1080
|
+
}
|
|
1081
|
+
const key = createHash("sha256").update(real).digest("hex").slice(0, 16);
|
|
1082
|
+
return path7.join(common, "agent-config", "advisories", `${key}.json`);
|
|
1083
|
+
}
|
|
1084
|
+
function remediationsPath(root) {
|
|
1085
|
+
const common = git_common_dir(root);
|
|
1086
|
+
return common === null ? null : path7.join(common, "agent-config", "advisories", "remediations.json");
|
|
1087
|
+
}
|
|
1088
|
+
function readRemediations(root) {
|
|
1089
|
+
const p = remediationsPath(root);
|
|
1090
|
+
if (p !== null) {
|
|
809
1091
|
try {
|
|
810
|
-
|
|
1092
|
+
const doc = JSON.parse(fs7.readFileSync(p, "utf-8"));
|
|
1093
|
+
if (isObject(doc)) return doc;
|
|
811
1094
|
} catch {
|
|
812
1095
|
}
|
|
813
|
-
throw err;
|
|
814
1096
|
}
|
|
1097
|
+
return readState(root)?.remediations ?? {};
|
|
815
1098
|
}
|
|
816
|
-
function
|
|
817
|
-
const
|
|
818
|
-
if (
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
}
|
|
825
|
-
const last_ms = Date.parse(normalized);
|
|
826
|
-
if (Number.isNaN(last_ms)) {
|
|
827
|
-
return true;
|
|
1099
|
+
function readState(root) {
|
|
1100
|
+
const p = statePath(root);
|
|
1101
|
+
if (p === null) return null;
|
|
1102
|
+
try {
|
|
1103
|
+
const doc = JSON.parse(fs7.readFileSync(p, "utf-8"));
|
|
1104
|
+
return isState(doc) ? doc : null;
|
|
1105
|
+
} catch {
|
|
1106
|
+
return null;
|
|
828
1107
|
}
|
|
829
|
-
return now.getTime() - last_ms >= CHECK_WINDOW_MS;
|
|
830
1108
|
}
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
1109
|
+
var isObject = (v) => v !== null && typeof v === "object" && !Array.isArray(v);
|
|
1110
|
+
function isState(doc) {
|
|
1111
|
+
if (!isObject(doc) || doc["schema"] !== 1 || typeof doc["at"] !== "string") return false;
|
|
1112
|
+
if (!Array.isArray(doc["findings"]) || !doc["findings"].every((f) => isObject(f) && typeof f["key"] === "string")) return false;
|
|
1113
|
+
const n = doc["notice"];
|
|
1114
|
+
if (n !== null && n !== void 0 && !(isObject(n) && Array.isArray(n["interrupt"]) && typeof n["digest"] === "number")) return false;
|
|
1115
|
+
if (doc["silent_since"] !== void 0 && !isObject(doc["silent_since"])) return false;
|
|
1116
|
+
if (doc["remediations"] !== void 0 && !isObject(doc["remediations"])) return false;
|
|
1117
|
+
return true;
|
|
834
1118
|
}
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
return
|
|
1119
|
+
var MAX_NOTICE_LINES = 8;
|
|
1120
|
+
var FIELD = /^[A-Za-z0-9@._:/+~^<>=*-]{1,200}$/;
|
|
1121
|
+
function safeField(v, max = 80) {
|
|
1122
|
+
if (typeof v === "number" && Number.isInteger(v) && v >= 0 && v < 1e7) return String(v);
|
|
1123
|
+
if (typeof v !== "string" || v.length > max || !FIELD.test(v)) return "?";
|
|
1124
|
+
return v;
|
|
841
1125
|
}
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
for (let i = 0; i < 3; i += 1) {
|
|
858
|
-
if (a[i] > b[i]) {
|
|
859
|
-
return true;
|
|
860
|
-
}
|
|
861
|
-
if (a[i] < b[i]) {
|
|
862
|
-
return false;
|
|
863
|
-
}
|
|
864
|
-
}
|
|
865
|
-
return false;
|
|
1126
|
+
var TIERS = /* @__PURE__ */ new Set(["T0", "T1", "T2", "T3"]);
|
|
1127
|
+
var VERDICTS = /* @__PURE__ */ new Set([
|
|
1128
|
+
"affected",
|
|
1129
|
+
"fix-available",
|
|
1130
|
+
"fix-fresh",
|
|
1131
|
+
"no-fix",
|
|
1132
|
+
"malware",
|
|
1133
|
+
"eol",
|
|
1134
|
+
"eol-soon",
|
|
1135
|
+
"pre-announced",
|
|
1136
|
+
"unknown",
|
|
1137
|
+
"accepted"
|
|
1138
|
+
]);
|
|
1139
|
+
function enumField(v, allowed) {
|
|
1140
|
+
return typeof v === "string" && allowed.has(v) ? v : "?";
|
|
866
1141
|
}
|
|
867
|
-
function
|
|
868
|
-
return
|
|
1142
|
+
function where(f) {
|
|
1143
|
+
return f.file === "" ? "" : ` (${safeField(f.file, 200)}:${safeField(f.line)})`;
|
|
869
1144
|
}
|
|
870
|
-
|
|
871
|
-
const
|
|
872
|
-
|
|
873
|
-
|
|
1145
|
+
function describe(f) {
|
|
1146
|
+
const tier = enumField(f.tier, TIERS);
|
|
1147
|
+
const verdict = enumField(f.verdict, VERDICTS);
|
|
1148
|
+
const pkg = safeField(f.package);
|
|
1149
|
+
const ver = f.version === null ? "" : ` ${safeField(f.version)}`;
|
|
1150
|
+
const fix = f.fixed === null ? "" : ` \u2192 ${safeField(f.fixed)}`;
|
|
1151
|
+
const date = safeField(f.date);
|
|
1152
|
+
const ids = [f.id, ...Array.isArray(f.aliases) ? f.aliases : []].slice(0, 3).map((i) => safeField(i)).join(", ");
|
|
1153
|
+
const kev = f.kev === true ? " \u2014 known exploited (KEV)" : "";
|
|
1154
|
+
switch (verdict) {
|
|
1155
|
+
case "pre-announced":
|
|
1156
|
+
return `${tier} ${pkg}: a security release is pre-announced (${date}); fixed versions not yet named${where(f)}`;
|
|
1157
|
+
case "eol":
|
|
1158
|
+
return `${tier} ${pkg}${ver}: security support ended ${date}${where(f)}`;
|
|
1159
|
+
case "eol-soon":
|
|
1160
|
+
return `${tier} ${pkg}${ver}: security support ends ${date}${where(f)}`;
|
|
1161
|
+
case "unknown":
|
|
1162
|
+
if (typeof f.note === "string" && f.note.includes("egress-none")) return `${tier} ${pkg}: not checked \u2014 advisories.egress is none`;
|
|
1163
|
+
if (typeof f.note === "string" && f.note.includes("lockfile-unsupported")) return `${tier} ${pkg}: not checked \u2014 a lockfile format this audit cannot read (yarn, pnpm, bun or npm v1)`;
|
|
1164
|
+
if (typeof f.note === "string" && f.note.startsWith("vendor-patched")) return `${tier} ${pkg}${ver}: distro-patched \u2014 judge it by the distro's own advisory${where(f)}`;
|
|
1165
|
+
return `${tier} ${pkg}: unknown \u2014 the source did not answer`;
|
|
1166
|
+
default:
|
|
1167
|
+
return `${tier} ${pkg}${ver}${fix} [${verdict}] ${ids}${kev}${where(f)}`;
|
|
874
1168
|
}
|
|
875
|
-
|
|
876
|
-
|
|
1169
|
+
}
|
|
1170
|
+
function noticeLines(state, now = /* @__PURE__ */ new Date(), remediations = null) {
|
|
1171
|
+
if (state === null) return [];
|
|
1172
|
+
const lines = [];
|
|
1173
|
+
const atMs = Date.parse(state.at);
|
|
1174
|
+
const ageH = Number.isFinite(atMs) && atMs <= now.getTime() ? (now.getTime() - atMs) / 36e5 : Number.POSITIVE_INFINITY;
|
|
1175
|
+
const byKey = new Map(state.findings.map((f) => [f.key, f]));
|
|
1176
|
+
const pending = state.notice?.interrupt.map((k) => byKey.get(k)).filter((f) => f !== void 0) ?? [];
|
|
1177
|
+
for (const f of pending) {
|
|
1178
|
+
lines.push(`advisory ${describe(f)} \u2014 fix now: /audit deps fix ${safeField(f.id)} (here or in its own worktree), or later`);
|
|
1179
|
+
}
|
|
1180
|
+
if ((state.notice?.digest ?? 0) > 0) lines.push(`advisories: ${safeField(state.notice.digest)} more in the digest \u2014 /audit deps`);
|
|
1181
|
+
for (const [source, since] of Object.entries(state.silent_since ?? {}).slice(0, 4)) {
|
|
1182
|
+
const sinceMs = Date.parse(String(since));
|
|
1183
|
+
if (!Number.isFinite(sinceMs) || sinceMs > now.getTime()) {
|
|
1184
|
+
lines.push(`advisories: ${safeField(source)} silent since an unreadable date \u2014 findings from it are unknown, not clear`);
|
|
1185
|
+
continue;
|
|
1186
|
+
}
|
|
1187
|
+
const days = (now.getTime() - sinceMs) / 864e5;
|
|
1188
|
+
if (days >= SILENCE_NOTICE_DAYS) lines.push(`advisories: ${safeField(source)} has not answered for ${Math.floor(days)} days \u2014 findings from it are unknown, not clear`);
|
|
877
1189
|
}
|
|
878
|
-
const
|
|
879
|
-
|
|
880
|
-
|
|
1190
|
+
for (const u of mergedNotDeployed(remediations ?? state.remediations ?? {}, state.findings, now)) {
|
|
1191
|
+
const sha = u.mergeSha === null ? "" : ` (${safeField(u.mergeSha.slice(0, 12))})`;
|
|
1192
|
+
lines.push(`advisory ${safeField(u.id)}: merged${sha} but not deployed for ${safeField(u.hours)} h \u2014 deploy it the way this project deploys`);
|
|
881
1193
|
}
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
1194
|
+
if (ageH === Number.POSITIVE_INFINITY) {
|
|
1195
|
+
lines.push("advisories: data age unreadable \u2014 run `agent-config audit:deps refresh`");
|
|
1196
|
+
} else if (ageH >= STALE_AFTER_HOURS) {
|
|
1197
|
+
lines.push(`advisories: data is ${Math.floor(ageH / 24) || 1} day(s) old \u2014 run \`agent-config audit:deps refresh\``);
|
|
885
1198
|
}
|
|
886
|
-
|
|
887
|
-
|
|
1199
|
+
return lines.length > MAX_NOTICE_LINES ? [...lines.slice(0, MAX_NOTICE_LINES - 1), `advisories: ${lines.length - MAX_NOTICE_LINES + 1} more \u2014 /audit deps`] : lines;
|
|
1200
|
+
}
|
|
1201
|
+
function sessionNotice(root, now = /* @__PURE__ */ new Date(), deliver) {
|
|
1202
|
+
if (readAdvisorySettings(root).mode === "off") return null;
|
|
1203
|
+
const state = readState(root);
|
|
1204
|
+
if (state === null) return null;
|
|
1205
|
+
const stamp = statePath(root) + ".shown";
|
|
1206
|
+
let prev = {};
|
|
1207
|
+
try {
|
|
1208
|
+
prev = JSON.parse(fs7.readFileSync(stamp, "utf-8"));
|
|
1209
|
+
} catch {
|
|
1210
|
+
prev = {};
|
|
1211
|
+
}
|
|
1212
|
+
const day = now.toISOString().slice(0, 10);
|
|
1213
|
+
const lines = noticeLines(state, now, readRemediations(root));
|
|
1214
|
+
const keyOf = (l) => createHash("sha256").update(l.replace(/\b\d+ (?:h|days?|day\(s\))\b/g, "#")).digest("hex").slice(0, 16);
|
|
1215
|
+
const isReminder = (l) => /^advisories: (?:data|\S+ (?:has not answered|silent since))|: merged/.test(l);
|
|
1216
|
+
const once = new Set(Array.isArray(prev.once) ? prev.once : []);
|
|
1217
|
+
const today = new Set(prev.day === day && Array.isArray(prev.today) ? prev.today : []);
|
|
1218
|
+
const out = lines.filter((l) => isReminder(l) ? !today.has(keyOf(l)) : !once.has(keyOf(l)));
|
|
1219
|
+
if (out.length === 0) return null;
|
|
1220
|
+
const text = out.join("\n");
|
|
1221
|
+
if (deliver !== void 0 && !deliver(text)) return null;
|
|
1222
|
+
for (const l of out) (isReminder(l) ? today : once).add(keyOf(l));
|
|
1223
|
+
try {
|
|
1224
|
+
fs7.writeFileSync(stamp, `${JSON.stringify({ day, once: [...once].slice(-200), today: [...today] })}
|
|
1225
|
+
`);
|
|
1226
|
+
} catch {
|
|
888
1227
|
}
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
1228
|
+
return text;
|
|
1229
|
+
}
|
|
1230
|
+
|
|
1231
|
+
// src/scripts/_lib/scan_scope.ts
|
|
1232
|
+
import * as fs8 from "node:fs";
|
|
1233
|
+
import * as path8 from "node:path";
|
|
1234
|
+
var DeadScopeError = class extends Error {
|
|
1235
|
+
gate;
|
|
1236
|
+
constructor(gate, message) {
|
|
1237
|
+
super(message);
|
|
1238
|
+
this.name = "DeadScopeError";
|
|
1239
|
+
this.gate = gate;
|
|
899
1240
|
}
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
const
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
installed_version
|
|
908
|
-
};
|
|
909
|
-
try {
|
|
910
|
-
_write_state(write_path, payload);
|
|
911
|
-
} catch (err) {
|
|
912
|
-
const code = err.code;
|
|
913
|
-
if (typeof code !== "string") {
|
|
914
|
-
throw err;
|
|
1241
|
+
};
|
|
1242
|
+
function assertWatchlistResolves(opts) {
|
|
1243
|
+
const resolved = opts.candidates.filter((rel) => {
|
|
1244
|
+
try {
|
|
1245
|
+
return fs8.statSync(path8.join(opts.repoRoot, rel)).isFile();
|
|
1246
|
+
} catch {
|
|
1247
|
+
return false;
|
|
915
1248
|
}
|
|
1249
|
+
});
|
|
1250
|
+
if (resolved.length === 0) {
|
|
1251
|
+
throw new DeadScopeError(
|
|
1252
|
+
opts.gate,
|
|
1253
|
+
`${opts.gate}: none of its ${opts.candidates.length} guarded path(s) exist under ${opts.repoRoot} \u2014 the guard is watching phantoms and can never fire. Checked: ${opts.candidates.join(", ")}`
|
|
1254
|
+
);
|
|
916
1255
|
}
|
|
917
|
-
|
|
918
|
-
return null;
|
|
919
|
-
}
|
|
920
|
-
return _format_banner(latest, installed_version);
|
|
1256
|
+
return resolved;
|
|
921
1257
|
}
|
|
922
1258
|
|
|
923
1259
|
// src/scripts/check_update_banner.ts
|
|
924
1260
|
var _HERE = fileURLToPath2(import.meta.url);
|
|
925
|
-
var ROOT =
|
|
1261
|
+
var ROOT = path9.resolve(path9.dirname(_HERE), "..", "..");
|
|
926
1262
|
var DOC = `Thin CLI wrapper: emit the daily update-check banner to stderr.
|
|
927
1263
|
|
|
928
1264
|
Invoked by the \`scripts/agent-config\` dispatcher **after** a
|
|
@@ -936,9 +1272,9 @@ Usage:
|
|
|
936
1272
|
When \`--installed-version\` is omitted, reads \`package.json\` next to
|
|
937
1273
|
the package root (\`$PACKAGE_ROOT/package.json\`).`;
|
|
938
1274
|
function _read_installed_version(package_root) {
|
|
939
|
-
const candidate =
|
|
1275
|
+
const candidate = path9.join(package_root, "package.json");
|
|
940
1276
|
try {
|
|
941
|
-
const data = JSON.parse(
|
|
1277
|
+
const data = JSON.parse(fs9.readFileSync(candidate, "utf-8"));
|
|
942
1278
|
const version = data["version"];
|
|
943
1279
|
if (typeof version === "string" && version.trim()) {
|
|
944
1280
|
return version.trim();
|
|
@@ -962,6 +1298,22 @@ function _read_settings_flag(cwd) {
|
|
|
962
1298
|
}
|
|
963
1299
|
return true;
|
|
964
1300
|
}
|
|
1301
|
+
function _read_project_pin(cwd) {
|
|
1302
|
+
try {
|
|
1303
|
+
const pin = load_agent_settings({ cwd })["agent_config_version"];
|
|
1304
|
+
return typeof pin === "string" && pin.trim() !== "" ? pin.trim() : null;
|
|
1305
|
+
} catch {
|
|
1306
|
+
return null;
|
|
1307
|
+
}
|
|
1308
|
+
}
|
|
1309
|
+
function _detect_origin(package_root, cwd, latest) {
|
|
1310
|
+
return classify_install_origin({
|
|
1311
|
+
package_root,
|
|
1312
|
+
project_pin: _read_project_pin(cwd),
|
|
1313
|
+
latest,
|
|
1314
|
+
is_global_consumer: _is_global_only_consumer(cwd)
|
|
1315
|
+
});
|
|
1316
|
+
}
|
|
965
1317
|
function parse_args(argv) {
|
|
966
1318
|
let installed_version = "";
|
|
967
1319
|
let cwd = process.cwd();
|
|
@@ -988,6 +1340,19 @@ async function main(argv = process.argv.slice(2)) {
|
|
|
988
1340
|
process.stdout.write(DOC + "\n");
|
|
989
1341
|
return 0;
|
|
990
1342
|
}
|
|
1343
|
+
try {
|
|
1344
|
+
sessionNotice(path9.resolve(args.cwd), void 0, (text) => {
|
|
1345
|
+
if (!tty.isatty(3)) return false;
|
|
1346
|
+
try {
|
|
1347
|
+
fs9.writeSync(3, `${text}
|
|
1348
|
+
`);
|
|
1349
|
+
return true;
|
|
1350
|
+
} catch {
|
|
1351
|
+
return false;
|
|
1352
|
+
}
|
|
1353
|
+
});
|
|
1354
|
+
} catch {
|
|
1355
|
+
}
|
|
991
1356
|
if (!args.installed_version) {
|
|
992
1357
|
try {
|
|
993
1358
|
assertWatchlistResolves({
|
|
@@ -1010,14 +1375,17 @@ async function main(argv = process.argv.slice(2)) {
|
|
|
1010
1375
|
}
|
|
1011
1376
|
let cwd;
|
|
1012
1377
|
try {
|
|
1013
|
-
cwd =
|
|
1378
|
+
cwd = path9.resolve(args.cwd);
|
|
1014
1379
|
} catch {
|
|
1015
1380
|
cwd = ROOT;
|
|
1016
1381
|
}
|
|
1017
1382
|
const enabled = _read_settings_flag(cwd);
|
|
1018
1383
|
let banner;
|
|
1019
1384
|
try {
|
|
1020
|
-
banner = await check_for_update(installed, {
|
|
1385
|
+
banner = await check_for_update(installed, {
|
|
1386
|
+
settings_enabled: enabled,
|
|
1387
|
+
origin: (latest) => _detect_origin(ROOT, cwd, latest)
|
|
1388
|
+
});
|
|
1021
1389
|
} catch {
|
|
1022
1390
|
return 0;
|
|
1023
1391
|
}
|
|
@@ -1031,17 +1399,17 @@ function _isCliEntry() {
|
|
|
1031
1399
|
return false;
|
|
1032
1400
|
}
|
|
1033
1401
|
if (true) {
|
|
1034
|
-
if (
|
|
1402
|
+
if (path9.basename(process.argv[1], ".js") === "check_update_banner") {
|
|
1035
1403
|
return true;
|
|
1036
1404
|
}
|
|
1037
1405
|
}
|
|
1038
|
-
const argvUrl = pathToFileURL(
|
|
1406
|
+
const argvUrl = pathToFileURL(path9.resolve(process.argv[1])).href;
|
|
1039
1407
|
if (import.meta.url === argvUrl) {
|
|
1040
1408
|
return true;
|
|
1041
1409
|
}
|
|
1042
1410
|
try {
|
|
1043
|
-
const here =
|
|
1044
|
-
const argv =
|
|
1411
|
+
const here = fs9.realpathSync(fileURLToPath2(import.meta.url));
|
|
1412
|
+
const argv = fs9.realpathSync(path9.resolve(process.argv[1]));
|
|
1045
1413
|
return here === argv;
|
|
1046
1414
|
} catch {
|
|
1047
1415
|
return false;
|
|
@@ -1052,6 +1420,7 @@ if (_isCliEntry() || process.argv[1] === _HERE) {
|
|
|
1052
1420
|
}
|
|
1053
1421
|
export {
|
|
1054
1422
|
ROOT,
|
|
1423
|
+
_detect_origin,
|
|
1055
1424
|
_read_installed_version,
|
|
1056
1425
|
_read_settings_flag,
|
|
1057
1426
|
main,
|