@event4u/agent-config 16.2.0 → 16.4.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 +1 -1
- package/CHANGELOG.md +337 -234
- package/README.md +15 -13
- package/agents/templates/.ai-council.yml.example +26 -8
- package/dist/agent-src/commands/analyze/inbox.md +11 -8
- package/dist/agent-src/commands/analyze/roadmap-repos.md +1 -1
- package/dist/agent-src/commands/bug/fix.md +17 -2
- package/dist/agent-src/commands/bug/investigate.md +1 -1
- package/dist/agent-src/commands/commit/in-chunks.md +40 -31
- package/dist/agent-src/commands/commit.md +72 -33
- package/dist/agent-src/commands/condense.md +2 -8
- package/dist/agent-src/commands/council/debate.md +11 -7
- package/dist/agent-src/commands/council/default.md +10 -9
- package/dist/agent-src/commands/council.md +1 -1
- package/dist/agent-src/commands/estimate-ticket.md +1 -1
- package/dist/agent-src/commands/feature/explore.md +3 -3
- package/dist/agent-src/commands/feature/plan.md +2 -2
- package/dist/agent-src/commands/feature/roadmap.md +1 -1
- package/dist/agent-src/commands/fix/ci.md +18 -4
- package/dist/agent-src/commands/fix/commit-messages.md +48 -23
- package/dist/agent-src/commands/fix/pr-comments.md +3 -6
- package/dist/agent-src/commands/implement-ticket.md +4 -4
- package/dist/agent-src/commands/jira-ticket.md +1 -1
- package/dist/agent-src/commands/memory/add.md +4 -16
- package/dist/agent-src/commands/memory/load.md +5 -6
- package/dist/agent-src/commands/memory/promote.md +3 -16
- package/dist/agent-src/commands/mission/upgrade.md +3 -2
- package/dist/agent-src/commands/optimize/agents-dir.md +2 -2
- package/dist/agent-src/commands/optimize/deep.md +4 -2
- package/dist/agent-src/commands/optimize/rtk.md +4 -26
- package/dist/agent-src/commands/pr/create/description-only.md +18 -15
- package/dist/agent-src/commands/pr/create.md +42 -34
- package/dist/agent-src/commands/pr/merge.md +136 -9
- package/dist/agent-src/commands/prepare-for-review.md +13 -11
- package/dist/agent-src/commands/project/analyze.md +7 -35
- package/dist/agent-src/commands/refine-ticket.md +1 -1
- package/dist/agent-src/commands/review/changes.md +14 -19
- package/dist/agent-src/commands/roadmap/create.md +1 -1
- package/dist/agent-src/commands/roadmap/materialize.md +1 -1
- package/dist/agent-src/commands/roadmap/next.md +10 -1
- package/dist/agent-src/commands/roadmap/process-full.md +56 -42
- package/dist/agent-src/commands/roadmap/resolve-blockers.md +411 -0
- package/dist/agent-src/commands/roadmap/triage-parked.md +325 -0
- package/dist/agent-src/commands/roadmap.md +18 -4
- package/dist/agent-src/commands/tests/create.md +17 -3
- package/dist/agent-src/commands/tests/execute.md +22 -5
- package/dist/agent-src/commands/worktree/create.md +7 -3
- package/dist/agent-src/commands/worktree/verify.md +2 -1
- package/dist/agent-src/contexts/authority/decision-revisit-gate-enforcement.md +43 -0
- package/dist/agent-src/contexts/communication/rules-auto/design-fidelity-enforcement.md +24 -0
- package/dist/agent-src/contexts/communication/rules-auto/think-before-action-mechanics.md +5 -3
- package/dist/agent-src/contexts/communication/rules-auto/token-efficiency-mechanics.md +7 -9
- package/dist/agent-src/contexts/contracts/command-suggestion-flow.md +8 -6
- package/dist/agent-src/contexts/contracts/frugality-charter.md +8 -5
- package/dist/agent-src/contexts/execution/auto-dispatch-classification.md +7 -7
- package/dist/agent-src/contexts/execution/auto-orchestration-activation.md +0 -1
- package/dist/agent-src/contexts/execution/evidence-discipline.md +2 -2
- package/dist/agent-src/contexts/execution/non-interactive-contract.md +5 -8
- package/dist/agent-src/contexts/execution/rdp-gate.md +4 -4
- package/dist/agent-src/contexts/execution/roadmap-execution-contract.md +9 -8
- package/dist/agent-src/contexts/execution/roadmap-process-loop.md +99 -54
- package/dist/agent-src/contexts/execution/session-canary-enforcement-history.md +67 -0
- package/dist/agent-src/contexts/execution/subagent-routing.md +8 -8
- package/dist/agent-src/contexts/execution/subagent-steering.md +6 -4
- package/dist/agent-src/contexts/execution/terminal-states.md +2 -2
- package/dist/agent-src/contexts/execution/toolchain-resolver.md +95 -7
- package/dist/agent-src/contexts/subagent-configuration.md +1 -1
- package/dist/agent-src/guidelines/agent-infra/active-remediation-mechanics.md +39 -0
- package/dist/agent-src/guidelines/agent-infra/context-hygiene-mechanics.md +1 -1
- package/dist/agent-src/guidelines/agent-infra/cross-source-consistency-mechanics.md +8 -10
- package/dist/agent-src/guidelines/agent-infra/frontier-reasoning-operating-profile.md +3 -2
- package/dist/agent-src/guidelines/agent-infra/layered-settings.md +13 -1
- package/dist/agent-src/guidelines/agent-infra/roadmap-progress-mechanics.md +1 -1
- package/dist/agent-src/guidelines/agent-infra/self-improvement-pipeline.md +10 -3
- package/dist/agent-src/guidelines/agent-infra/size-and-scope.md +36 -0
- package/dist/agent-src/guidelines/php/git.md +15 -2
- package/dist/agent-src/rules/active-remediation.md +1 -2
- package/dist/agent-src/rules/analysis-skill-routing.md +0 -1
- package/dist/agent-src/rules/architecture.md +0 -1
- package/dist/agent-src/rules/artifact-drafting-protocol.md +0 -1
- package/dist/agent-src/rules/artifact-engagement-recording.md +0 -1
- package/dist/agent-src/rules/augment-edit-discipline.md +0 -1
- package/dist/agent-src/rules/autonomous-execution.md +1 -1
- package/dist/agent-src/rules/brand-consistency.md +0 -1
- package/dist/agent-src/rules/brand-source-of-truth.md +0 -1
- package/dist/agent-src/rules/broken-access-control.md +1 -1
- package/dist/agent-src/rules/cli-output-handling.md +0 -1
- package/dist/agent-src/rules/code-comment-discipline.md +0 -1
- package/dist/agent-src/rules/code-provenance.md +0 -1
- package/dist/agent-src/rules/command-suggestion-policy.md +1 -1
- package/dist/agent-src/rules/commit-conventions.md +1 -2
- package/dist/agent-src/rules/communication-through-line.md +1 -2
- package/dist/agent-src/rules/content-quoting-floor.md +1 -2
- package/dist/agent-src/rules/context-hygiene.md +6 -6
- package/dist/agent-src/rules/copilot-routing.md +1 -2
- package/dist/agent-src/rules/council-availability.md +4 -4
- package/dist/agent-src/rules/cross-source-consistency.md +4 -6
- package/dist/agent-src/rules/decision-revisit-gate.md +17 -35
- package/dist/agent-src/rules/delegation-policy.md +2 -3
- package/dist/agent-src/rules/design-fidelity.md +12 -16
- package/dist/agent-src/rules/design-review-after-ui-write.md +3 -3
- package/dist/agent-src/rules/devcontainer-routing.md +1 -2
- package/dist/agent-src/rules/doc-screenshot-hygiene.md +1 -1
- package/dist/agent-src/rules/docker-commands.md +0 -1
- package/dist/agent-src/rules/domain-adoption-policy.md +0 -1
- package/dist/agent-src/rules/domain-safety-disclaimer.md +1 -1
- package/dist/agent-src/rules/domain-safety-pii.md +1 -1
- package/dist/agent-src/rules/domain-safety-retention.md +1 -1
- package/dist/agent-src/rules/downstream-changes.md +0 -1
- package/dist/agent-src/rules/engineering-safety-floor.md +1 -1
- package/dist/agent-src/rules/evaluator-independence.md +3 -2
- package/dist/agent-src/rules/external-code-graph-interop.md +0 -1
- package/dist/agent-src/rules/external-reference-deep-dive.md +0 -1
- package/dist/agent-src/rules/fast-path-marker-visibility.md +2 -2
- package/dist/agent-src/rules/finance-safety-floor.md +1 -1
- package/dist/agent-src/rules/fix-what-you-see.md +6 -32
- package/dist/agent-src/rules/framework-neutrality-in-generic-skills.md +0 -1
- package/dist/agent-src/rules/git-history-discipline.md +2 -2
- package/dist/agent-src/rules/guidelines.md +0 -1
- package/dist/agent-src/rules/history-discipline.md +0 -1
- package/dist/agent-src/rules/icon-consistency.md +0 -1
- package/dist/agent-src/rules/image-likeness-and-rights.md +1 -1
- package/dist/agent-src/rules/improve-before-implement.md +0 -1
- package/dist/agent-src/rules/invite-challenge.md +0 -1
- package/dist/agent-src/rules/laravel-routing.md +1 -2
- package/dist/agent-src/rules/laravel-translations.md +0 -1
- package/dist/agent-src/rules/legal-safety-floor.md +3 -3
- package/dist/agent-src/rules/lethal-trifecta-guard.md +1 -1
- package/dist/agent-src/rules/linked-projects-onboarding-gate.md +0 -1
- package/dist/agent-src/rules/low-impact-corpus-privacy-floor.md +1 -1
- package/dist/agent-src/rules/markdown-safe-codeblocks.md +0 -1
- package/dist/agent-src/rules/media-governance-routing.md +13 -17
- package/dist/agent-src/rules/media-sync-ground-truth.md +0 -1
- package/dist/agent-src/rules/minimal-safe-diff.md +0 -1
- package/dist/agent-src/rules/missing-skill-recovery.md +0 -1
- package/dist/agent-src/rules/missing-tool-handling.md +0 -1
- package/dist/agent-src/rules/model-recommendation.md +0 -1
- package/dist/agent-src/rules/neighbour-precedence.md +64 -0
- package/dist/agent-src/rules/no-attribution-footers.md +0 -1
- package/dist/agent-src/rules/no-decorative-emojis-in-git-surfaces.md +0 -1
- package/dist/agent-src/rules/no-pr-progress-comments.md +0 -1
- package/dist/agent-src/rules/no-roadmap-references.md +0 -1
- package/dist/agent-src/rules/notes-first-reasoning.md +0 -1
- package/dist/agent-src/rules/onboarding-gate.md +0 -1
- package/dist/agent-src/rules/output-discipline.md +0 -1
- package/dist/agent-src/rules/package-ci-checks.md +0 -1
- package/dist/agent-src/rules/persona-governance.md +4 -5
- package/dist/agent-src/rules/php-coding.md +0 -1
- package/dist/agent-src/rules/prefer-enums-over-literals.md +0 -1
- package/dist/agent-src/rules/preservation-guard.md +0 -1
- package/dist/agent-src/rules/provider-lifecycle-discipline.md +3 -4
- package/dist/agent-src/rules/question-not-instruction.md +1 -1
- package/dist/agent-src/rules/reviewer-awareness.md +0 -1
- package/dist/agent-src/rules/roadmap-ci-steps-policy.md +0 -1
- package/dist/agent-src/rules/roadmap-progress-sync.md +4 -7
- package/dist/agent-src/rules/role-mode-adherence.md +0 -1
- package/dist/agent-src/rules/rule-type-governance.md +0 -1
- package/dist/agent-src/rules/runtime-safety.md +1 -1
- package/dist/agent-src/rules/scale-discipline.md +0 -1
- package/dist/agent-src/rules/secret-vcs-guard.md +1 -1
- package/dist/agent-src/rules/security-sensitive-stop.md +3 -3
- package/dist/agent-src/rules/self-repair-loop.md +0 -1
- package/dist/agent-src/rules/senior-engineering-discipline.md +0 -1
- package/dist/agent-src/rules/session-canary.md +7 -62
- package/dist/agent-src/rules/settings-ask-protocol.md +6 -6
- package/dist/agent-src/rules/size-enforcement.md +0 -1
- package/dist/agent-src/rules/skill-improvement-trigger.md +2 -3
- package/dist/agent-src/rules/skill-quality.md +0 -1
- package/dist/agent-src/rules/slash-command-routing-policy.md +0 -1
- package/dist/agent-src/rules/source-confidentiality.md +1 -1
- package/dist/agent-src/rules/source-discovery-gate.md +0 -1
- package/dist/agent-src/rules/source-of-truth.md +0 -1
- package/dist/agent-src/rules/spreadsheet-source-quality.md +1 -2
- package/dist/agent-src/rules/strategy-safety-floor.md +1 -1
- package/dist/agent-src/rules/symfony-routing.md +1 -2
- package/dist/agent-src/rules/think-before-action.md +0 -1
- package/dist/agent-src/rules/token-budget-discipline.md +12 -46
- package/dist/agent-src/rules/token-efficiency.md +0 -1
- package/dist/agent-src/rules/token-optimizer-maintenance.md +0 -1
- package/dist/agent-src/rules/tool-safety.md +1 -1
- package/dist/agent-src/rules/ui-audit-gate.md +1 -2
- package/dist/agent-src/rules/untrusted-input-defense.md +1 -1
- package/dist/agent-src/rules/upstream-proposal.md +0 -1
- package/dist/agent-src/rules/user-interaction.md +0 -1
- package/dist/agent-src/rules/user-interrupt-priority.md +1 -1
- package/dist/agent-src/scripts/archive_completed_roadmaps.ts +115 -20
- package/dist/agent-src/scripts/deferral_carry.ts +339 -0
- package/dist/agent-src/scripts/gate_budget.ts +47 -23
- package/dist/agent-src/scripts/gate_execute.ts +12 -4
- package/dist/agent-src/scripts/update_roadmap_progress.ts +4 -1
- package/dist/agent-src/skills/ai-council/SKILL.md +7 -4
- package/dist/agent-src/skills/ai-council/references/cost-and-redaction.md +21 -11
- package/dist/agent-src/skills/ai-council/references/procedure.md +12 -6
- package/dist/agent-src/skills/analysis-autonomous-mode/SKILL.md +1 -1
- package/dist/agent-src/skills/api-design/data/manifest.json +2 -2
- package/dist/agent-src/skills/api-testing/SKILL.md +17 -0
- package/dist/agent-src/skills/bug-analyzer/SKILL.md +1 -1
- package/dist/agent-src/skills/code-intelligence/SKILL.md +14 -2
- package/dist/agent-src/skills/command-routing/SKILL.md +3 -4
- package/dist/agent-src/skills/conventional-commits-writing/SKILL.md +127 -139
- package/dist/agent-src/skills/corpus-grounding/ATTRIBUTION.md +39 -0
- package/dist/agent-src/skills/corpus-grounding/SKILL.md +8 -2
- package/dist/agent-src/skills/database/data/manifest.json +2 -2
- package/dist/agent-src/skills/database/data/query-tuning.csv +13 -13
- package/dist/agent-src/skills/design-system-capture/SKILL.md +0 -3
- package/dist/agent-src/skills/design-system-capture/references/import-procedure.md +1 -1
- package/dist/agent-src/skills/estimate-ticket/SKILL.md +1 -1
- package/dist/agent-src/skills/existing-ui-audit/SKILL.md +2 -2
- package/dist/agent-src/skills/fe-design/SKILL.md +1 -1
- package/dist/agent-src/skills/feature-planning/SKILL.md +1 -1
- package/dist/agent-src/skills/git-workflow/SKILL.md +44 -44
- package/dist/agent-src/skills/git-workflow/references/branch-update.md +312 -0
- package/dist/agent-src/skills/git-workflow/references/commit-subject.md +205 -0
- package/dist/agent-src/skills/iconography/SKILL.md +1 -1
- package/dist/agent-src/skills/jira-integration/SKILL.md +3 -3
- package/dist/agent-src/skills/js-library-packaging/SKILL.md +2 -2
- package/dist/agent-src/skills/merge-conflicts/SKILL.md +10 -4
- package/dist/agent-src/skills/monorepo-workspace/SKILL.md +1 -1
- package/dist/agent-src/skills/po-discovery/SKILL.md +1 -1
- package/dist/agent-src/skills/quality-tools/SKILL.md +11 -1
- package/dist/agent-src/skills/quality-tools/references/go-tools.md +76 -0
- package/dist/agent-src/skills/quality-tools/references/python-tools.md +104 -0
- package/dist/agent-src/skills/refine-ticket/SKILL.md +4 -4
- package/dist/agent-src/skills/review-routing/SKILL.md +2 -2
- package/dist/agent-src/skills/roadmap-writing/SKILL.md +2 -2
- package/dist/agent-src/skills/skill-improvement-pipeline/SKILL.md +5 -3
- package/dist/agent-src/skills/source-discovery/SKILL.md +1 -1
- package/dist/agent-src/skills/storybook-workshop/SKILL.md +3 -3
- package/dist/agent-src/skills/tailwind-engineer/SKILL.md +4 -2
- package/dist/agent-src/skills/test-case-discovery/SKILL.md +7 -0
- package/dist/agent-src/skills/test-driven-development/SKILL.md +17 -0
- package/dist/agent-src/skills/test-performance/SKILL.md +19 -1
- package/dist/agent-src/skills/testing-anti-patterns/SKILL.md +1 -1
- package/dist/agent-src/skills/ui-component-architect/SKILL.md +2 -2
- package/dist/agent-src/skills/using-git-worktrees/SKILL.md +1 -1
- package/dist/agent-src/skills/verify-repair-loop/SKILL.md +2 -2
- package/dist/agent-src/templates/AGENTS.md +1 -1
- package/dist/agent-src/templates/agent-settings.md +46 -129
- package/dist/agent-src/templates/agents/agent-project-settings.example.yml +3 -3
- package/dist/agent-src/templates/command.md +2 -2
- package/dist/agent-src/templates/roadmaps.md +6 -1
- package/dist/agent-src/templates/scripts/work_engine/_lib/agent_settings.ts +0 -6
- package/dist/agent-src/templates/scripts/work_engine/directives/backend/_self_fix.ts +11 -7
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/apply.ts +48 -6
- package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/decision_trace.ts +3 -2
- package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/memory_visibility.ts +2 -1
- package/dist/agent-src/templates/scripts/work_engine/hooks/settings.ts +0 -6
- package/dist/agent-src/templates/scripts/work_engine/scoring/decision_engine.ts +9 -12
- package/dist/agent-src/templates/scripts/work_engine/scoring/memory_visibility.ts +2 -1
- package/dist/agent-src/templates/scripts/work_engine/stack/runner.ts +774 -109
- package/dist/agent-src/templates/skill.md +1 -1
- package/dist/cli/registry.js +2 -1
- package/dist/cli-delegate/archive_completed_roadmaps.js +92 -12
- package/dist/cli-delegate/check_update_banner.js +207 -120
- package/dist/cli-delegate/chunk-523HCFYO.js +90 -0
- package/dist/cli-delegate/{chunk-FP36SWJD.js → chunk-5GPULQBE.js} +2797 -338
- package/dist/cli-delegate/{chunk-IGD6ERX6.js → chunk-6SRJTYJS.js} +42 -176
- package/dist/cli-delegate/chunk-6V5FMA3P.js +186 -0
- package/dist/cli-delegate/{chunk-M2DPGFZ4.js → chunk-6V6TA25H.js} +22 -152
- package/dist/cli-delegate/chunk-6YQC2HLF.js +415 -0
- package/dist/cli-delegate/{chunk-E4XIZDIB.js → chunk-7HKRE54K.js} +1 -64
- package/dist/cli-delegate/chunk-7IQE3D5S.js +191 -0
- package/dist/cli-delegate/{chunk-YJ72UIAK.js → chunk-AED2VQGM.js} +1245 -249
- package/dist/cli-delegate/{chunk-7HQ52DHU.js → chunk-AL3RZ22D.js} +1 -1
- package/dist/cli-delegate/chunk-DEIV7XP7.js +108 -0
- package/dist/cli-delegate/{chunk-DBH4AHDK.js → chunk-ED7KCMLB.js} +9 -11
- package/dist/cli-delegate/chunk-F3QDG2GT.js +2569 -0
- package/dist/cli-delegate/{chunk-6KFEC3G7.js → chunk-G5VVIZRC.js} +3 -3
- package/dist/cli-delegate/{chunk-FC75PGJE.js → chunk-H76PHZBI.js} +149 -61
- package/dist/cli-delegate/chunk-IAYTIIQW.js +67 -0
- package/dist/cli-delegate/chunk-JQOM7TTM.js +1201 -0
- package/dist/cli-delegate/chunk-KB5FZ655.js +208 -0
- package/dist/cli-delegate/{chunk-7RQP4UDH.js → chunk-KR6EM23A.js} +235 -1455
- package/dist/cli-delegate/{chunk-LTYVIY76.js → chunk-KXXWJTDO.js} +6 -11
- package/dist/cli-delegate/{chunk-T7L2QK3K.js → chunk-LQOCRFWT.js} +1 -1
- package/dist/cli-delegate/{chunk-6KM6ORRY.js → chunk-MDPPKQCQ.js} +58 -9
- package/dist/cli-delegate/{chunk-4XFP2Y3E.js → chunk-MSUL5NYP.js} +5 -5
- package/dist/cli-delegate/chunk-OAFSJBHH.js +272 -0
- package/dist/cli-delegate/{chunk-4E2W63DA.js → chunk-OKJUIAPS.js} +62 -1
- package/dist/cli-delegate/{chunk-QAJS5YWY.js → chunk-PHD7OOLE.js} +2 -1
- package/dist/cli-delegate/{chunk-P6ZHP5W2.js → chunk-PWX7CKMD.js} +4 -4
- package/dist/cli-delegate/{chunk-NDJLNC6Q.js → chunk-T6BP34WI.js} +1 -0
- package/dist/cli-delegate/{chunk-7XGBX6ZH.js → chunk-T7XSJSUQ.js} +1144 -589
- package/dist/cli-delegate/chunk-ULQRUR23.js +208 -0
- package/dist/cli-delegate/chunk-WQWXGIWB.js +1779 -0
- package/dist/cli-delegate/{chunk-RGNIWTEA.js → chunk-XQTPXKFA.js} +1 -1
- package/dist/cli-delegate/{chunk-NUHLI2RX.js → chunk-YCU3TIXH.js} +2 -0
- package/dist/cli-delegate/chunk-ZBZV2G5R.js +210 -0
- package/dist/cli-delegate/{chunk-WGXTVKCQ.js → chunk-ZUZKZYCN.js} +5 -3
- package/dist/cli-delegate/cmd_analyze_session.js +223 -43
- package/dist/cli-delegate/cmd_brand_status.js +3 -2
- package/dist/cli-delegate/cmd_conformance.js +1252 -249
- package/dist/cli-delegate/cmd_converge.js +3 -3
- package/dist/cli-delegate/cmd_doctor.js +19 -9
- package/dist/cli-delegate/cmd_doctor_neighbours.js +30 -0
- package/dist/cli-delegate/cmd_explain.js +45 -21
- package/dist/cli-delegate/cmd_export.js +13 -10
- package/dist/cli-delegate/cmd_fleet.js +3 -3
- package/dist/cli-delegate/cmd_git_convention.js +1851 -0
- package/dist/cli-delegate/cmd_handoff.js +44 -22
- package/dist/cli-delegate/cmd_mcp_available.js +3 -2
- package/dist/cli-delegate/cmd_memory_get.js +3 -1
- package/dist/cli-delegate/cmd_migrate.js +3 -3
- package/dist/cli-delegate/cmd_packs_active.js +5 -4
- package/dist/cli-delegate/cmd_preflight.js +6 -6
- package/dist/cli-delegate/cmd_prune.js +14 -11
- package/dist/cli-delegate/cmd_refresh.js +2 -1
- package/dist/cli-delegate/cmd_route_audit.js +10 -8
- package/dist/cli-delegate/cmd_route_explain.js +4 -4
- package/dist/cli-delegate/cmd_session_recycle.js +10 -7
- package/dist/cli-delegate/cmd_settings_check.js +54 -7
- package/dist/cli-delegate/cmd_settings_get.js +18 -8
- package/dist/cli-delegate/cmd_settings_migrate.js +13 -10
- package/dist/cli-delegate/cmd_settings_set.js +4 -4
- package/dist/cli-delegate/cmd_sync.js +14 -11
- package/dist/cli-delegate/cmd_uninstall.js +15 -12
- package/dist/cli-delegate/cmd_update.js +7 -7
- package/dist/cli-delegate/cmd_upgrade.js +9 -8
- package/dist/cli-delegate/cmd_validate.js +15 -12
- package/dist/cli-delegate/cmd_versions.js +5 -5
- package/dist/cli-delegate/deferral_carry.js +16 -0
- package/dist/cli-delegate/gate_budget.js +1 -1
- package/dist/cli-delegate/gate_execute.js +3 -3
- package/dist/cli-delegate/roadmap_gates.js +6 -6
- package/dist/cli-delegate/update_roadmap_progress.js +1 -1
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +232 -141
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +3 -3
- package/dist/discovery/dormancy-report.md +1 -1
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +26 -9
- package/dist/discovery/trust-report.md +3 -3
- package/dist/discovery/workspaces.json +7 -4
- package/dist/hooks/dispatch.js +5655 -6623
- package/dist/hooks/dispatch.sha256 +1 -1
- package/dist/install/claudePathsPlan.js +47 -6
- package/dist/install/claudeRuleRewrite.js +7 -0
- package/dist/install/emit_host_rules_cli.js +39 -36
- package/dist/install/globalRuleScope.js +87 -0
- package/dist/install/host_rule_ownership.js +160 -0
- package/dist/install/install.mjs +2336 -1249
- package/dist/install/installThinLayer.js +289 -0
- package/dist/install/installedRuleLinks.js +262 -0
- package/dist/install/wizard-plan.js +24 -0
- package/dist/mcp/awesome-mcp-servers.row.md +1 -1
- package/dist/mcp/mcp-cloudflare-catalogue.json +2 -2
- package/dist/mcp/registry-manifest.json +5 -5
- package/dist/mcp/server.json +2 -2
- package/dist/mcp/server.mjs +36504 -30986
- package/dist/router.json +1 -1
- package/dist/scripts/_lib/agent_settings.js +26 -120
- package/dist/scripts/_lib/claude_settings_hooks.js +10 -8
- package/dist/scripts/_lib/compile_time_toggles.js +12 -21
- package/dist/scripts/_lib/git_convention.js +232 -0
- package/dist/scripts/_lib/global_deploy_inventory.js +730 -0
- package/dist/scripts/_lib/installed_layer.js +704 -0
- package/dist/scripts/_lib/lean_projection_mode.js +218 -15
- package/dist/scripts/_lib/package_root.js +68 -0
- package/dist/scripts/_lib/rule_consequence_class.js +45 -0
- package/dist/scripts/_lib/rule_injection.js +67 -10
- package/dist/scripts/_lib/rule_law_section.js +122 -0
- package/dist/scripts/_lib/settings_removed_keys.js +168 -0
- package/dist/scripts/_lib/thin_rules.js +535 -0
- package/dist/scripts/_lib/windsurf_render.js +60 -0
- package/dist/scripts/condense.js +14 -26
- package/dist/scripts/project_thin_rules.js +14 -294
- package/dist/server/app.js +2 -1
- package/dist/server/gitKeysGate.js +105 -0
- package/dist/server/routes/settings.js +67 -8
- package/dist/server/routes/wizard.js +4 -0
- package/dist/server/schemas/settings.js +29 -81
- package/dist/shared/skillRanking.js +103 -16
- package/dist/ui/assets/{index-Cwq4d0hX.js → index-C3djEJah.js} +2 -2
- package/dist/ui/index.html +1 -1
- package/docs/MIGRATION.md +72 -1
- package/docs/contracts/settings-classes.md +39 -67
- package/docs/guidelines/agent-infra/active-remediation-mechanics.md +39 -0
- package/docs/guidelines/agent-infra/context-hygiene-mechanics.md +1 -1
- package/docs/guidelines/agent-infra/cross-source-consistency-mechanics.md +8 -10
- package/docs/guidelines/agent-infra/frontier-reasoning-operating-profile.md +3 -2
- package/docs/guidelines/agent-infra/layered-settings.md +13 -1
- package/docs/guidelines/agent-infra/roadmap-progress-mechanics.md +1 -1
- package/docs/guidelines/agent-infra/self-improvement-pipeline.md +10 -3
- package/docs/guidelines/agent-infra/size-and-scope.md +36 -0
- package/docs/guidelines/php/git.md +15 -2
- package/package.json +1 -1
- package/src/agent-src/scripts/archive_completed_roadmaps.ts +115 -20
- package/src/agent-src/scripts/deferral_carry.ts +339 -0
- package/src/agent-src/scripts/gate_budget.ts +47 -23
- package/src/agent-src/scripts/gate_execute.ts +12 -4
- package/src/agent-src/scripts/update_roadmap_progress.ts +4 -1
- package/src/agent-src/templates/AGENTS.md +1 -1
- package/src/agent-src/templates/scripts/work_engine/_lib/agent_settings.ts +0 -6
- package/src/agent-src/templates/scripts/work_engine/directives/backend/_self_fix.ts +11 -7
- package/src/agent-src/templates/scripts/work_engine/directives/ui/apply.ts +48 -6
- package/src/agent-src/templates/scripts/work_engine/hooks/builtin/decision_trace.ts +3 -2
- package/src/agent-src/templates/scripts/work_engine/hooks/builtin/memory_visibility.ts +2 -1
- package/src/agent-src/templates/scripts/work_engine/hooks/settings.ts +0 -6
- package/src/agent-src/templates/scripts/work_engine/scoring/decision_engine.ts +9 -12
- package/src/agent-src/templates/scripts/work_engine/scoring/memory_visibility.ts +2 -1
- package/src/agent-src/templates/scripts/work_engine/stack/runner.ts +774 -109
- package/src/config/agent-settings.template.yml +141 -334
- package/src/config/agents-paths.yml +16 -0
- package/src/config/assurance-capability-registry.json +7 -3
- package/src/config/ci-local-parity.yml +3 -0
- package/src/config/continuity-surface.json +10 -3
- package/src/config/discovery/packs.yml +17 -1
- package/src/config/evaluator-budgets.json +23 -10
- package/src/config/gate-coverage.yml +138 -3
- package/src/config/gate-violation-baselines.json +64 -16
- package/src/config/gitignore-block.txt +19 -0
- package/src/config/hook-bundle-budget.json +25 -0
- package/src/config/hook-token-budget.json +6 -1
- package/src/config/host-instruction-limits.json +33 -0
- package/src/config/release-gate-locality.yml +2 -1
- package/src/config/routing-coverage-seed.json +67 -4
- package/src/config/rule-activation-census.json +7 -3
- package/src/config/rule-consequence-class.json +161 -0
- package/src/config/rule-law-ceilings.json +105 -0
- package/src/config/rule-obligations.json +833 -0
- package/src/install/claudePathsPlan.ts +46 -4
- package/src/install/claudeRuleRewrite.ts +10 -1
- package/src/install/emit_host_rules_cli.ts +43 -34
- package/src/install/globalRuleScope.ts +109 -0
- package/src/install/host_rule_ownership.ts +170 -0
- package/src/install/installThinLayer.ts +378 -0
- package/src/install/installedRuleLinks.ts +308 -0
- package/src/install/wizard-plan.ts +24 -0
- package/src/scripts/_cli/cmd_analyze_session.ts +9 -15
- package/src/scripts/_cli/cmd_conformance.ts +13 -2
- package/src/scripts/_cli/cmd_doctor.ts +33 -81
- package/src/scripts/_cli/cmd_doctor_neighbours.ts +426 -0
- package/src/scripts/_cli/cmd_explain.ts +72 -14
- package/src/scripts/_cli/cmd_git_convention.ts +637 -0
- package/src/scripts/_cli/cmd_settings_check.ts +66 -8
- package/src/scripts/_cli/cmd_settings_get.ts +18 -3
- package/src/scripts/_cli/doctor_execution.ts +72 -1
- package/src/scripts/_dispatch.bash +53 -4
- package/src/scripts/_lib/agent_settings.ts +26 -124
- package/src/scripts/_lib/blocked_by_marker.ts +1 -1
- package/src/scripts/_lib/claude_settings_hooks.ts +10 -8
- package/src/scripts/_lib/compile_time_toggles.ts +12 -21
- package/src/scripts/_lib/dispatch_import_closure.ts +163 -0
- package/src/scripts/_lib/estate_offsets.ts +241 -0
- package/src/scripts/_lib/exemption_shape.ts +143 -0
- package/src/scripts/_lib/fnv.ts +23 -0
- package/src/scripts/_lib/foreign_scan.ts +106 -0
- package/src/scripts/_lib/git_base_ref.ts +92 -0
- package/src/scripts/_lib/git_convention.ts +291 -0
- package/src/scripts/_lib/git_convention_carrier.ts +389 -0
- package/src/scripts/_lib/git_convention_grammar.ts +246 -0
- package/src/scripts/_lib/git_convention_measure.ts +344 -0
- package/src/scripts/_lib/gitignore_block.ts +314 -0
- package/src/scripts/_lib/global_deploy_inventory.ts +106 -0
- package/src/scripts/_lib/graph_feeder_record.ts +437 -0
- package/src/scripts/_lib/hook_settings.ts +73 -0
- package/src/scripts/_lib/host_capability.ts +40 -19
- package/src/scripts/_lib/host_hook_merge.ts +165 -0
- package/src/scripts/_lib/installed_layer.ts +963 -0
- package/src/scripts/_lib/json_merge.ts +82 -0
- package/src/scripts/_lib/json_pointers.ts +93 -11
- package/src/scripts/_lib/knowledge_global.ts +14 -1
- package/src/scripts/_lib/lean_projection_mode.ts +275 -15
- package/src/scripts/_lib/machine_wake.ts +16 -3
- package/src/scripts/_lib/module_reach.ts +456 -0
- package/src/scripts/_lib/neighbour_census.ts +760 -0
- package/src/scripts/_lib/neighbour_contradictions.ts +236 -0
- package/src/scripts/_lib/neighbour_scan.ts +122 -0
- package/src/scripts/_lib/neighbour_tool_use.ts +187 -0
- package/src/scripts/_lib/prompt_shape.ts +46 -0
- package/src/scripts/_lib/ratification_artifact.ts +220 -1
- package/src/scripts/_lib/ratification_subject.ts +92 -0
- package/src/scripts/_lib/release_findings_ingest.ts +15 -7
- package/src/scripts/_lib/release_highlights.ts +5 -0
- package/src/scripts/_lib/release_migration_gate.ts +19 -3
- package/src/scripts/_lib/reserved_name_sweep.ts +73 -0
- package/src/scripts/_lib/review_coverage.ts +134 -0
- package/src/scripts/_lib/rule_consequence_class.ts +71 -0
- package/src/scripts/_lib/rule_injection.ts +130 -10
- package/src/scripts/_lib/rule_law_section.ts +147 -0
- package/src/scripts/_lib/rule_layer_overlap.ts +58 -0
- package/src/scripts/_lib/rule_obligations.ts +205 -0
- package/src/scripts/_lib/self_repair.ts +1 -1
- package/src/scripts/_lib/settings_removed_keys.ts +173 -0
- package/src/scripts/_lib/skill_origin.ts +254 -0
- package/src/scripts/_lib/structured_ask.ts +64 -21
- package/src/scripts/_lib/test_red_state.ts +5 -0
- package/src/scripts/_lib/thin_rules.ts +620 -0
- package/src/scripts/_lib/touched_file_quality.ts +570 -0
- package/src/scripts/_lib/turn_end_refusals.ts +77 -2
- package/src/scripts/_lib/windsurf_render.ts +63 -0
- package/src/scripts/_lib/worker_budget.ts +1 -1
- package/src/scripts/adr/regenerate_index.ts +16 -1
- package/src/scripts/ai_council/cli_call_budget.ts +13 -5
- package/src/scripts/ai_council/clients.ts +26 -57
- package/src/scripts/ai_council/config.ts +8 -8
- package/src/scripts/ai_council/modification_review.ts +100 -0
- package/src/scripts/ai_council/modification_review_questions.ts +90 -0
- package/src/scripts/ai_council/orchestrator.ts +5 -5
- package/src/scripts/ai_council/spend_gate.ts +18 -7
- package/src/scripts/ai_council/vendor_defaults.ts +45 -0
- package/src/scripts/ai_team/config.ts +11 -16
- package/src/scripts/audit_skill_overlap.ts +261 -0
- package/src/scripts/audit_user_type_axis.ts +20 -8
- package/src/scripts/before_complete_hook.ts +243 -12
- package/src/scripts/bench_ab_clone.ts +1 -2
- package/src/scripts/bench_concern_spawn_path.ts +129 -0
- package/src/scripts/bench_graph_feeder_latency.ts +584 -0
- package/src/scripts/bench_touched_file_quality.ts +238 -0
- package/src/scripts/check_agent_artifact_location.ts +36 -0
- package/src/scripts/check_branch_freshness.ts +147 -24
- package/src/scripts/check_enforcement_coverage.ts +130 -0
- package/src/scripts/check_enforcement_matrix.ts +377 -20
- package/src/scripts/check_estate_count.ts +130 -153
- package/src/scripts/check_evaluator_budgets.ts +4 -0
- package/src/scripts/check_finding_dispositions.ts +196 -21
- package/src/scripts/check_gate_coverage.ts +4 -3
- package/src/scripts/check_gate_reachability.ts +48 -1
- package/src/scripts/check_generator_sync.ts +48 -0
- package/src/scripts/check_hook_bundle_composition.ts +477 -0
- package/src/scripts/check_kernel_edit_ratified.ts +132 -14
- package/src/scripts/check_memory.ts +7 -1
- package/src/scripts/check_pack_size.ts +1 -1
- package/src/scripts/check_release_highlights.ts +10 -0
- package/src/scripts/check_release_manifest_content.ts +189 -0
- package/src/scripts/check_release_pr_shape.ts +38 -15
- package/src/scripts/check_standing_rule_delivery.ts +129 -13
- package/src/scripts/check_suppression_hygiene.ts +2 -5
- package/src/scripts/check_verify_expectation_delta.ts +521 -0
- package/src/scripts/ci_settle.ts +42 -5
- package/src/scripts/classify_merge_risk.ts +320 -0
- package/src/scripts/closure_scan.ts +91 -1
- package/src/scripts/code_graph/detect.ts +127 -7
- package/src/scripts/code_graph/foreign.ts +194 -0
- package/src/scripts/code_graph/query.ts +217 -4
- package/src/scripts/code_graph/types.ts +26 -2
- package/src/scripts/code_graph/validate.ts +3 -1
- package/src/scripts/code_graph/verbs.ts +103 -0
- package/src/scripts/command_suggester/settings.ts +8 -108
- package/src/scripts/command_suggester/types.ts +4 -5
- package/src/scripts/compile_hook_manifest.ts +33 -1
- package/src/scripts/condense.ts +14 -27
- package/src/scripts/consumer_matrix.ts +102 -0
- package/src/scripts/context_hygiene_hook.ts +13 -23
- package/src/scripts/cost/preflight.mjs +12 -1
- package/src/scripts/council_cli.ts +7 -7
- package/src/scripts/dispatch_r2_reviewer.ts +24 -11
- package/src/scripts/estate_exemption_shape.ts +202 -0
- package/src/scripts/explain_run.ts +8 -13
- package/src/scripts/generate_git_convention_grammar.ts +127 -0
- package/src/scripts/generate_host_cost_table.ts +21 -4
- package/src/scripts/handoff_context_hook.ts +86 -37
- package/src/scripts/hook_manifest.json +1 -1
- package/src/scripts/hook_manifest.yaml +175 -15
- package/src/scripts/hooks/block_config_weakening.ts +115 -7
- package/src/scripts/hooks/block_plumbing_writes.ts +37 -5
- package/src/scripts/hooks/code_graph_context_hook.ts +252 -23
- package/src/scripts/hooks/concern_failure_policy.ts +280 -0
- package/src/scripts/hooks/concern_registry.ts +2 -0
- package/src/scripts/hooks/delegation_nudge_hook.ts +2 -3
- package/src/scripts/hooks/dispatch_hook.ts +52 -52
- package/src/scripts/hooks/evidence_independence.ts +12 -4
- package/src/scripts/hooks/exit_codes.ts +2 -1
- package/src/scripts/hooks/host_lowering.json +1 -1
- package/src/scripts/hooks/host_lowering.ts +19 -1
- package/src/scripts/hooks/mcp_usage_observation_hook.ts +121 -0
- package/src/scripts/hooks/one_question_per_ask_hook.ts +41 -25
- package/src/scripts/hooks/payload_stub.ts +10 -1
- package/src/scripts/hooks/push_settle_hook.ts +4 -3
- package/src/scripts/hooks/rule_inject_hook.ts +795 -60
- package/src/scripts/hooks/state_io.ts +8 -4
- package/src/scripts/hooks/table_fingerprint.ts +21 -0
- package/src/scripts/hooks/telemetry_usage_hook.ts +24 -7
- package/src/scripts/hooks/turn_end_gate_hook.ts +85 -0
- package/src/scripts/hooks_status.ts +112 -0
- package/src/scripts/injection_scan_hook.ts +7 -0
- package/src/scripts/install-hooks.sh +42 -14
- package/src/scripts/install.ts +78 -215
- package/src/scripts/installed_layer_report.ts +103 -0
- package/src/scripts/language_mirror_hook.ts +15 -6
- package/src/scripts/learning_sidecar.ts +119 -8
- package/src/scripts/lint_blocker_citations.ts +198 -0
- package/src/scripts/lint_evidence_artifacts.ts +9 -0
- package/src/scripts/lint_hook_concern_budget.ts +10 -21
- package/src/scripts/lint_hook_manifest.ts +53 -0
- package/src/scripts/lint_major_migration_sections.ts +156 -26
- package/src/scripts/lint_pack_boundaries.ts +465 -29
- package/src/scripts/lint_roadmap_blockers.ts +282 -29
- package/src/scripts/lint_roadmap_complexity.ts +4 -2
- package/src/scripts/lint_rule_law_section.ts +647 -0
- package/src/scripts/lint_rule_skill_pack_reach.ts +17 -0
- package/src/scripts/lint_settings_classes.ts +1 -1
- package/src/scripts/lint_ticked_unmet_criteria.ts +165 -0
- package/src/scripts/lint_workflow_security.ts +173 -6
- package/src/scripts/mcp_server/consumer_tool_catalog.json +53 -0
- package/src/scripts/mcp_server/graph_tools.ts +72 -3
- package/src/scripts/measure_routing_signal.ts +54 -16
- package/src/scripts/measure_skill_ranker_baseline.ts +221 -8
- package/src/scripts/memory_learn_hook.ts +91 -6
- package/src/scripts/model_rule_injection.ts +55 -8
- package/src/scripts/onboarding_gate_hook.ts +7 -6
- package/src/scripts/print_required_checks.ts +15 -3
- package/src/scripts/probe_host_compliance.ts +33 -5
- package/src/scripts/probe_turnaround.ts +183 -3
- package/src/scripts/project_thin_rules.ts +34 -327
- package/src/scripts/ratification_header.ts +77 -0
- package/src/scripts/refusal_envelope.ts +138 -0
- package/src/scripts/release_publication.ts +29 -3
- package/src/scripts/report_dispatch_import_closure.ts +76 -0
- package/src/scripts/report_evidence_temperature.ts +657 -0
- package/src/scripts/report_installed_rule_links.ts +274 -0
- package/src/scripts/report_label_agreement.ts +233 -0
- package/src/scripts/report_module_reach.ts +212 -0
- package/src/scripts/report_obligation_mechanism.ts +228 -0
- package/src/scripts/report_parked_blockers.ts +222 -0
- package/src/scripts/report_required_checks_drift.ts +196 -0
- package/src/scripts/report_single_token_triggers.ts +277 -0
- package/src/scripts/report_skill_ranker_confusion.ts +543 -0
- package/src/scripts/report_standing_payload_by_host.ts +188 -15
- package/src/scripts/report_verification_record_coverage.ts +306 -0
- package/src/scripts/routing_doctor.ts +2 -2
- package/src/scripts/rule_activation_census.ts +5 -2
- package/src/scripts/rule_trigger_eval.ts +9 -9
- package/src/scripts/schemas/agent-settings.schema.json +17 -31
- package/src/scripts/schemas/command.schema.json +1 -1
- package/src/scripts/schemas/review-findings.schema.json +3 -2
- package/src/scripts/schemas/rule.schema.json +5 -0
- package/src/scripts/schemas/skill.schema.json +1 -1
- package/src/scripts/self_review_gate.ts +101 -9
- package/src/scripts/skill_tools/score_skill_relevance.ts +314 -40
- package/src/scripts/sweep_skill_ranker_signals.ts +129 -0
- package/src/scripts/sync_gitignore.ts +29 -235
- package/src/scripts/sync_pr_branch.ts +403 -132
- package/src/scripts/trigger_eval_grandfather.json +0 -21
- package/src/server/schemas/settings.ts +42 -176
- package/src/shared/skillRanking.ts +169 -14
- package/dist/cli-delegate/chunk-5R7HOLAF.js +0 -99
- package/dist/cli-delegate/chunk-JNMVLWLR.js +0 -4457
- package/dist/cli-delegate/chunk-YDPILCOL.js +0 -152
- package/src/scripts/_lib/config_chain.ts +0 -477
- package/src/scripts/_lib/conformance_report.ts +0 -403
- package/src/scripts/_lib/eval_discrimination.ts +0 -95
- package/src/scripts/_lib/evaluator_promotion.ts +0 -225
- package/src/scripts/_lib/file_slicer.ts +0 -117
- package/src/scripts/_lib/legacy_boundary_map.ts +0 -228
- package/src/scripts/_lib/minimality_tiebreak.ts +0 -168
- package/src/scripts/_lib/overbuild_lens_contract.ts +0 -196
- package/src/scripts/_lib/role_split.ts +0 -338
package/src/scripts/install.ts
CHANGED
|
@@ -76,6 +76,9 @@ import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
|
76
76
|
import type * as YamlModule from 'yaml';
|
|
77
77
|
|
|
78
78
|
import { build_merge_entries } from './_lib/json_pointers.js';
|
|
79
|
+
import { deepMerge as deep_merge, isPlainObject as _isPlainObject, jsonEqual } from './_lib/json_merge.js';
|
|
80
|
+
import { mergeHostConfig, HOOK_SIGNATURES } from './_lib/host_hook_merge.js';
|
|
81
|
+
import { sweepReservedNames } from './_lib/reserved_name_sweep.js';
|
|
79
82
|
import { withHostEnv } from './_lib/host_env_write.js';
|
|
80
83
|
import { jsonDumpsCompact, jsonDumpsIndent } from './_lib/json_python_parity.js';
|
|
81
84
|
import { is_claude_builtin_name } from './_lib/claude_builtin_names.js';
|
|
@@ -93,6 +96,7 @@ import * as rule_layer_overlap from './_lib/rule_layer_overlap.js';
|
|
|
93
96
|
import * as installed_tools from './_lib/installed_tools.js';
|
|
94
97
|
import { collect_drift, format_drift_report } from './_lib/install_drift.js';
|
|
95
98
|
import * as user_global_paths from './_lib/user_global_paths.js';
|
|
99
|
+
import * as gitignore_block from './_lib/gitignore_block.js';
|
|
96
100
|
// The LIBRARY half, deliberately not `capture_skill_catalogue.js`: that module
|
|
97
101
|
// is a CLI entry with a top-level `process.exit()`, and esbuild would bundle
|
|
98
102
|
// that exit into the installer a consumer loads (`check_installer_import_purity`
|
|
@@ -103,15 +107,17 @@ import * as claude_desktop_bundler from './_lib/claude_desktop_bundler.js';
|
|
|
103
107
|
import * as claude_settings_hooks from './_lib/claude_settings_hooks.js';
|
|
104
108
|
import { hostBindings } from './hooks/host_lowering.js';
|
|
105
109
|
import { find_project_root_with_anchor, load_agent_settings } from './_lib/agent_settings.js';
|
|
106
|
-
import {
|
|
107
|
-
LEGACY_ALL,
|
|
108
|
-
ruleFileArrives,
|
|
109
|
-
ruleScopeFromSettings,
|
|
110
|
-
type RuleScope,
|
|
111
|
-
} from '../install/rule_scope.js';
|
|
110
|
+
import { ruleFileArrives, type RuleScope } from '../install/rule_scope.js';
|
|
112
111
|
import { isExclusivelyPackageOnly, stampHostLayerFingerprint } from '../install/partitionEligibility.js'; // ADR-236
|
|
113
112
|
import * as claude_rule_rewrite from '../install/claudeRuleRewrite.js';
|
|
114
|
-
import {
|
|
113
|
+
import {
|
|
114
|
+
describeThinInstalledLayer,
|
|
115
|
+
installReceiptBudgetLines,
|
|
116
|
+
thinInstalledRuleLayer,
|
|
117
|
+
} from '../install/installThinLayer.js';
|
|
118
|
+
import { resolveGlobalRuleScope } from '../install/globalRuleScope.js';
|
|
119
|
+
import { installerThinsHost } from './_lib/lean_projection_mode.js';
|
|
120
|
+
import { GLOBAL_DEPLOY_SOURCES, RULE_SOURCE_REL } from '../install/wizard-plan.js';
|
|
115
121
|
import { flattenSurface, computeSurfaceDelta, type SettingsSurface } from '../shared/settingsSurface.js';
|
|
116
122
|
import { settingsSchema } from '../server/schemas/settings.js';
|
|
117
123
|
import { zodToJsonSchema } from 'zod-to-json-schema';
|
|
@@ -328,15 +334,10 @@ const LEGACY_RENAME_MAP: Record<string, string> = {
|
|
|
328
334
|
open_edited_files: 'personal.open_edited_files',
|
|
329
335
|
user_name: 'personal.user_name',
|
|
330
336
|
rtk_installed: 'personal.rtk_installed',
|
|
331
|
-
minimal_output: 'personal.minimal_output',
|
|
332
|
-
play_by_play: 'personal.play_by_play',
|
|
333
|
-
pr_comment_bot_icon: 'project.pr_comment_bot_icon',
|
|
334
|
-
pr_template: 'project.pr_template',
|
|
335
337
|
upstream_repo: 'project.upstream_repo',
|
|
336
338
|
improvement_pr_branch_prefix: 'project.improvement_pr_branch_prefix',
|
|
337
339
|
github_pr_reply_method: 'github.pr_reply_method',
|
|
338
340
|
eloquent_access_style: 'eloquent.access_style',
|
|
339
|
-
skill_improvement_pipeline: 'pipelines.skill_improvement',
|
|
340
341
|
subagent_implementer_model: 'subagents.implementer_model',
|
|
341
342
|
subagent_judge_model: 'subagents.judge_model',
|
|
342
343
|
subagent_max_parallel: 'subagents.max_parallel',
|
|
@@ -481,63 +482,6 @@ function write_json_file(p: string, data: unknown): void {
|
|
|
481
482
|
write_file(p, content);
|
|
482
483
|
}
|
|
483
484
|
|
|
484
|
-
function _isPlainObject(v: unknown): v is Record<string, unknown> {
|
|
485
|
-
return typeof v === 'object' && v !== null && !Array.isArray(v);
|
|
486
|
-
}
|
|
487
|
-
|
|
488
|
-
/** `copy.deepcopy` for JSON-shaped values. */
|
|
489
|
-
function deepcopy<T>(v: T): T {
|
|
490
|
-
if (v === null || typeof v !== 'object') return v;
|
|
491
|
-
if (Array.isArray(v)) return v.map((x) => deepcopy(x)) as unknown as T;
|
|
492
|
-
const out: Record<string, unknown> = {};
|
|
493
|
-
for (const k of Object.keys(v as Record<string, unknown>)) {
|
|
494
|
-
out[k] = deepcopy((v as Record<string, unknown>)[k]);
|
|
495
|
-
}
|
|
496
|
-
return out as unknown as T;
|
|
497
|
-
}
|
|
498
|
-
|
|
499
|
-
function deep_merge(
|
|
500
|
-
base: Record<string, unknown>,
|
|
501
|
-
overlay: Record<string, unknown>,
|
|
502
|
-
): Record<string, unknown> {
|
|
503
|
-
const result = deepcopy(base);
|
|
504
|
-
for (const key of Object.keys(overlay)) {
|
|
505
|
-
const value = overlay[key];
|
|
506
|
-
if (
|
|
507
|
-
Object.prototype.hasOwnProperty.call(result, key) &&
|
|
508
|
-
_isPlainObject(result[key]) &&
|
|
509
|
-
_isPlainObject(value)
|
|
510
|
-
) {
|
|
511
|
-
result[key] = deep_merge(
|
|
512
|
-
result[key] as Record<string, unknown>,
|
|
513
|
-
value as Record<string, unknown>,
|
|
514
|
-
);
|
|
515
|
-
} else {
|
|
516
|
-
result[key] = deepcopy(value);
|
|
517
|
-
}
|
|
518
|
-
}
|
|
519
|
-
return result;
|
|
520
|
-
}
|
|
521
|
-
|
|
522
|
-
/** Deep structural equality for JSON-shaped values (Python dict `==`). */
|
|
523
|
-
function jsonEqual(a: unknown, b: unknown): boolean {
|
|
524
|
-
if (a === b) return true;
|
|
525
|
-
if (typeof a !== typeof b) return false;
|
|
526
|
-
if (Array.isArray(a) || Array.isArray(b)) {
|
|
527
|
-
if (!Array.isArray(a) || !Array.isArray(b) || a.length !== b.length) return false;
|
|
528
|
-
return a.every((v, i) => jsonEqual(v, b[i]));
|
|
529
|
-
}
|
|
530
|
-
if (_isPlainObject(a) && _isPlainObject(b)) {
|
|
531
|
-
const ka = Object.keys(a);
|
|
532
|
-
const kb = Object.keys(b);
|
|
533
|
-
if (ka.length !== kb.length) return false;
|
|
534
|
-
return ka.every(
|
|
535
|
-
(k) => Object.prototype.hasOwnProperty.call(b, k) && jsonEqual(a[k], (b as Record<string, unknown>)[k]),
|
|
536
|
-
);
|
|
537
|
-
}
|
|
538
|
-
return false;
|
|
539
|
-
}
|
|
540
|
-
|
|
541
485
|
function merge_json_file(
|
|
542
486
|
p: string,
|
|
543
487
|
new_data: Record<string, unknown>,
|
|
@@ -557,7 +501,9 @@ function merge_json_file(
|
|
|
557
501
|
}
|
|
558
502
|
|
|
559
503
|
const existing = read_json_file(p);
|
|
560
|
-
|
|
504
|
+
// Hook arrays are shared with whatever else the consumer installed, so the
|
|
505
|
+
// `hooks` key merges per event by signature instead of being replaced.
|
|
506
|
+
const merged = mergeHostConfig(existing, new_data, HOOK_SIGNATURES[label] ?? '', deep_merge);
|
|
561
507
|
|
|
562
508
|
if (jsonEqual(merged, existing)) {
|
|
563
509
|
skip(`${label} already configured`);
|
|
@@ -1803,48 +1749,20 @@ export const PROJECT_BRIDGE_MARKERS: Record<string, string> = {
|
|
|
1803
1749
|
kiro: '.kiro/steering/agent-config.md',
|
|
1804
1750
|
};
|
|
1805
1751
|
|
|
1806
|
-
|
|
1807
|
-
|
|
1808
|
-
|
|
1809
|
-
|
|
1810
|
-
|
|
1811
|
-
|
|
1812
|
-
|
|
1813
|
-
|
|
1814
|
-
|
|
1815
|
-
|
|
1816
|
-
|
|
1817
|
-
|
|
1818
|
-
|
|
1819
|
-
|
|
1820
|
-
['dist/agent-src/personas', 'personas'],
|
|
1821
|
-
['dist/agent-src/templates', 'templates'],
|
|
1822
|
-
],
|
|
1823
|
-
cursor: [
|
|
1824
|
-
['dist/agent-src/rules', 'rules'],
|
|
1825
|
-
['dist/agent-src/commands', 'commands'],
|
|
1826
|
-
['dist/agent-src/personas', 'personas'],
|
|
1827
|
-
],
|
|
1828
|
-
windsurf: [['dist/agent-src/rules', 'rules']],
|
|
1829
|
-
cline: [['dist/agent-src/rules', '']],
|
|
1830
|
-
'gemini-cli': _CLAUDE_SKILL_BUNDLE,
|
|
1831
|
-
codex: _CLAUDE_SKILL_BUNDLE,
|
|
1832
|
-
continue: _CLAUDE_SKILL_BUNDLE,
|
|
1833
|
-
roocode: _CLAUDE_SKILL_BUNDLE,
|
|
1834
|
-
kilocode: _CLAUDE_SKILL_BUNDLE,
|
|
1835
|
-
qoder: _CLAUDE_SKILL_BUNDLE,
|
|
1836
|
-
opencode: _CLAUDE_SKILL_BUNDLE,
|
|
1837
|
-
trae: _CLAUDE_SKILL_BUNDLE,
|
|
1838
|
-
antigravity: _CLAUDE_SKILL_BUNDLE,
|
|
1839
|
-
codebuddy: _CLAUDE_SKILL_BUNDLE,
|
|
1840
|
-
droid: _CLAUDE_SKILL_BUNDLE,
|
|
1841
|
-
warp: _CLAUDE_SKILL_BUNDLE,
|
|
1842
|
-
kiro: [
|
|
1843
|
-
['dist/agent-src/rules', 'rules'],
|
|
1844
|
-
['dist/agent-src/skills', 'steering'],
|
|
1845
|
-
['dist/agent-src/personas', 'personas'],
|
|
1846
|
-
],
|
|
1847
|
-
};
|
|
1752
|
+
/**
|
|
1753
|
+
* Re-exported from `wizard-plan.ts`, which is now the ONLY definition.
|
|
1754
|
+
*
|
|
1755
|
+
* It was defined here too, and the two copies were byte-identical in every
|
|
1756
|
+
* one of their 18 host rows — a duplicate of the same truth, and the kind
|
|
1757
|
+
* that stays correct right up until somebody edits one of them. Step 1.2 of
|
|
1758
|
+
* `road-to-rule-triggers-and-links-that-hold` did exactly that: it added two
|
|
1759
|
+
* directories here and the wizard kept installing without them.
|
|
1760
|
+
*
|
|
1761
|
+
* Re-exported rather than moved-and-left-broken so every caller of
|
|
1762
|
+
* `install.ts::GLOBAL_DEPLOY_SOURCES` keeps working unchanged. Imported as
|
|
1763
|
+
* well as re-exported because this file's own call sites read the binding.
|
|
1764
|
+
*/
|
|
1765
|
+
export { GLOBAL_DEPLOY_SOURCES };
|
|
1848
1766
|
|
|
1849
1767
|
const _CLAUDE_DESKTOP_MARKER_TEMPLATE_HEAD = `# agent-config — Claude Desktop marker
|
|
1850
1768
|
|
|
@@ -2108,8 +2026,9 @@ export function _gate_rule_layer_overlap(
|
|
|
2108
2026
|
layer: string | null,
|
|
2109
2027
|
dry_run: boolean,
|
|
2110
2028
|
): boolean {
|
|
2111
|
-
|
|
2112
|
-
|
|
2029
|
+
// ONE source of truth for which directories the host loads, shared with the
|
|
2030
|
+
// delivery carrier's scope filter (`rule_layer_overlap.hostRuleLayerDirs`).
|
|
2031
|
+
const [global_dir, project_dir] = rule_layer_overlap.hostRuleLayerDirs(project_root);
|
|
2113
2032
|
const g = rule_layer_overlap.readRuleLayer(global_dir);
|
|
2114
2033
|
const p = rule_layer_overlap.readRuleLayer(project_dir);
|
|
2115
2034
|
if (g === null || p === null) return true; // only one layer exists — nothing to double
|
|
@@ -2957,26 +2876,12 @@ export function _apply_claude_flat_command_wrappers(
|
|
|
2957
2876
|
anchor: string,
|
|
2958
2877
|
package_root: string,
|
|
2959
2878
|
current_files: Set<string>,
|
|
2960
|
-
|
|
2879
|
+
recorded_files: ReadonlySet<string> = new Set<string>(),
|
|
2880
|
+
): { wrapped: string[]; collisions: string[]; reserved: string[]; foreign: string[] } {
|
|
2961
2881
|
const wrapped: string[] = [];
|
|
2962
2882
|
const collisions: string[] = [];
|
|
2963
|
-
const reserved: string[] = [];
|
|
2964
|
-
// Reserved-name sweep over ALL flat command files (any tier): a name
|
|
2965
|
-
// shadowing a Claude Code built-in never ships on the claude-code anchor.
|
|
2966
2883
|
const commands_dir = path.join(anchor, 'commands');
|
|
2967
|
-
|
|
2968
|
-
try {
|
|
2969
|
-
flat_entries = fs.readdirSync(commands_dir).filter((f) => f.endsWith('.md'));
|
|
2970
|
-
} catch {
|
|
2971
|
-
// No commands dir → nothing to sweep.
|
|
2972
|
-
}
|
|
2973
|
-
for (const fname of flat_entries.sort()) {
|
|
2974
|
-
const slug = fname.slice(0, -'.md'.length);
|
|
2975
|
-
if (!is_claude_builtin_name(slug)) continue;
|
|
2976
|
-
fs.rmSync(path.join(commands_dir, fname), { force: true });
|
|
2977
|
-
current_files.delete(`commands/${fname}`);
|
|
2978
|
-
reserved.push(slug);
|
|
2979
|
-
}
|
|
2884
|
+
const { reserved, foreign } = sweepReservedNames(commands_dir, current_files, is_claude_builtin_name, recorded_files);
|
|
2980
2885
|
// Visible command slugs from the locked discovery manifest. `visibility`
|
|
2981
2886
|
// is the source of truth (ADR-090/092); the integer `tier` stays only as
|
|
2982
2887
|
// the fallback for a manifest published before `visibility` was emitted,
|
|
@@ -3023,7 +2928,7 @@ export function _apply_claude_flat_command_wrappers(
|
|
|
3023
2928
|
current_files.add(`skills/${slug}/SKILL.md`);
|
|
3024
2929
|
wrapped.push(slug);
|
|
3025
2930
|
}
|
|
3026
|
-
return { wrapped, collisions, reserved };
|
|
2931
|
+
return { wrapped, collisions, reserved, foreign };
|
|
3027
2932
|
}
|
|
3028
2933
|
|
|
3029
2934
|
function _deploy_global_content(
|
|
@@ -3096,15 +3001,33 @@ function _deploy_global_content(
|
|
|
3096
3001
|
if (tool_id === 'claude-code') {
|
|
3097
3002
|
// Rules land verbatim from the copy above; see the module. It also
|
|
3098
3003
|
// renders the flat-command wrapper report, unchanged.
|
|
3099
|
-
const res = _apply_claude_flat_command_wrappers(anchor, package_root, current_files);
|
|
3004
|
+
const res = _apply_claude_flat_command_wrappers(anchor, package_root, current_files, global_deploy_inventory.recorded_rel_files(tool_id, anchor));
|
|
3005
|
+
const preserved_now = new Set(
|
|
3006
|
+
tracker.conflictState.preserved.map((p) => path.resolve(p)),
|
|
3007
|
+
);
|
|
3100
3008
|
claude_rule_rewrite.rewriteAndReport(
|
|
3101
3009
|
path.join(anchor, 'rules'),
|
|
3102
3010
|
state.QUIET,
|
|
3103
3011
|
info,
|
|
3104
3012
|
warn,
|
|
3105
3013
|
res,
|
|
3106
|
-
|
|
3014
|
+
preserved_now,
|
|
3107
3015
|
);
|
|
3016
|
+
// Steps 1.1 and 1.4 of road-to-an-installed-layer-that-is-thinned;
|
|
3017
|
+
// both modules' headers carry the reasoning.
|
|
3018
|
+
if (installerThinsHost(tool_id, { packageRoot: package_root })) {
|
|
3019
|
+
try {
|
|
3020
|
+
const thin = thinInstalledRuleLayer({
|
|
3021
|
+
rulesDir: path.join(anchor, 'rules'),
|
|
3022
|
+
packageRoot: package_root,
|
|
3023
|
+
preserved: preserved_now,
|
|
3024
|
+
});
|
|
3025
|
+
if (!state.QUIET) for (const l of describeThinInstalledLayer(thin)) info(l);
|
|
3026
|
+
} catch (e) {
|
|
3027
|
+
warn(`claude-code: thinned rule layer not written — ${String(e)}`);
|
|
3028
|
+
}
|
|
3029
|
+
}
|
|
3030
|
+
if (!state.QUIET) for (const l of installReceiptBudgetLines(package_root, undefined, { thisDeploy: new Map([[anchor, current_files]]) })) info(l);
|
|
3108
3031
|
}
|
|
3109
3032
|
|
|
3110
3033
|
const missing_targets = _verify_deploy_targets(anchor, plan);
|
|
@@ -3339,65 +3262,21 @@ function _resolve_scoped_projection(
|
|
|
3339
3262
|
}
|
|
3340
3263
|
|
|
3341
3264
|
/**
|
|
3342
|
-
* Resolve the rule scope governing THIS global deploy
|
|
3343
|
-
* does (`src/server/routes/install.ts::_resolveRuleScope`), so the two global
|
|
3344
|
-
* paths cannot ship different rule sets for the same settings.
|
|
3265
|
+
* Resolve the rule scope governing THIS global deploy.
|
|
3345
3266
|
*
|
|
3346
|
-
*
|
|
3347
|
-
*
|
|
3348
|
-
*
|
|
3349
|
-
* `LEGACY_ALL` — over-shipping is the safe direction, and the compat exclusion
|
|
3350
|
-
* (`source-of-truth.md`) still applies even then.
|
|
3267
|
+
* Thin wrapper: the body moved to `src/install/globalRuleScope.ts` (see that
|
|
3268
|
+
* module's header for why). Name, signature and behaviour are unchanged, so the
|
|
3269
|
+
* re-export below and every caller and test keep what they had.
|
|
3351
3270
|
*/
|
|
3352
3271
|
function _resolve_global_rule_scope(package_root: string): RuleScope {
|
|
3353
|
-
|
|
3354
|
-
|
|
3355
|
-
|
|
3356
|
-
|
|
3357
|
-
|
|
3358
|
-
|
|
3359
|
-
|
|
3360
|
-
|
|
3361
|
-
} catch {
|
|
3362
|
-
return LEGACY_ALL;
|
|
3363
|
-
}
|
|
3364
|
-
}
|
|
3365
|
-
|
|
3366
|
-
// A doc EXISTS, so the user has expressed a configuration. Failing to read
|
|
3367
|
-
// it is not the same as not having one: falling back to legacy-all here
|
|
3368
|
-
// ships the maintainer-only rules the user may have deliberately scoped out,
|
|
3369
|
-
// and `_load_yaml_doc` would report that as an indistinguishable `{}`. So
|
|
3370
|
-
// parse it explicitly and be LOUD when it does not parse — over-shipping
|
|
3371
|
-
// stays the safe direction, but it must not be a silent one.
|
|
3372
|
-
let text: string;
|
|
3373
|
-
try {
|
|
3374
|
-
text = readText(settings_path);
|
|
3375
|
-
} catch (e) {
|
|
3376
|
-
warn(
|
|
3377
|
-
`could not read ${settings_path} (${String(e)}) — rule scoping falls back ` +
|
|
3378
|
-
'to legacy-all, so ALL rules including maintainer-only ones will be ' +
|
|
3379
|
-
'installed. Fix the file to restore scoping.',
|
|
3380
|
-
);
|
|
3381
|
-
return LEGACY_ALL;
|
|
3382
|
-
}
|
|
3383
|
-
const parsed = yamlSafeLoad(text);
|
|
3384
|
-
if (!_isPlainObject(parsed)) {
|
|
3385
|
-
warn(
|
|
3386
|
-
`${settings_path} is not a YAML mapping — rule scoping falls back to ` +
|
|
3387
|
-
'legacy-all, so ALL rules including maintainer-only ones will be ' +
|
|
3388
|
-
'installed. Fix the file to restore scoping.',
|
|
3389
|
-
);
|
|
3390
|
-
return LEGACY_ALL;
|
|
3391
|
-
}
|
|
3392
|
-
try {
|
|
3393
|
-
return ruleScopeFromSettings(parsed as Record<string, unknown>, package_root);
|
|
3394
|
-
} catch (e) {
|
|
3395
|
-
warn(
|
|
3396
|
-
`could not derive rule scope from ${settings_path} (${String(e)}) — ` +
|
|
3397
|
-
'falling back to legacy-all; ALL rules will be installed.',
|
|
3398
|
-
);
|
|
3399
|
-
return LEGACY_ALL;
|
|
3400
|
-
}
|
|
3272
|
+
return resolveGlobalRuleScope({
|
|
3273
|
+
settingsPath: _resolve_global_settings_path(),
|
|
3274
|
+
packageRoot: package_root,
|
|
3275
|
+
readText,
|
|
3276
|
+
parseYaml: yamlSafeLoad,
|
|
3277
|
+
loadDefaults: () => _load_default_settings(package_root),
|
|
3278
|
+
warn,
|
|
3279
|
+
});
|
|
3401
3280
|
}
|
|
3402
3281
|
|
|
3403
3282
|
/**
|
|
@@ -4889,27 +4768,11 @@ function _read_consumer_auto_switch(project_root: string): string {
|
|
|
4889
4768
|
/**
|
|
4890
4769
|
* Team-mode setup hint (road-to-team-mode Phase 1 Step 2) — a one-line
|
|
4891
4770
|
* recommendation printed after a claude-code install/init pointing at the
|
|
4892
|
-
* doctor `team` section.
|
|
4893
|
-
*
|
|
4894
|
-
*
|
|
4895
|
-
* leniently). Pointer only: never auto-installs, never modifies
|
|
4896
|
-
* `~/.claude/plugins`.
|
|
4771
|
+
* doctor `team` section. Always shown: the `ai_team.suppress_setup_hint` key
|
|
4772
|
+
* that could silence it was retired with its default (false). Pointer only:
|
|
4773
|
+
* never auto-installs, never modifies `~/.claude/plugins`.
|
|
4897
4774
|
*/
|
|
4898
|
-
function _team_setup_hint_line(
|
|
4899
|
-
let data: Record<string, unknown>;
|
|
4900
|
-
try {
|
|
4901
|
-
data = load_agent_settings({ project_path: _resolve_settings_read(project_root) });
|
|
4902
|
-
} catch {
|
|
4903
|
-
data = {};
|
|
4904
|
-
}
|
|
4905
|
-
const ai_team = _isPlainObject(data) ? data['ai_team'] : null;
|
|
4906
|
-
const flag = _isPlainObject(ai_team)
|
|
4907
|
-
? (ai_team as Record<string, unknown>)['suppress_setup_hint']
|
|
4908
|
-
: null;
|
|
4909
|
-
const suppressed =
|
|
4910
|
-
flag === true ||
|
|
4911
|
-
(typeof flag === 'string' && ['true', 'yes', 'on', '1'].includes(flag.trim().toLowerCase()));
|
|
4912
|
-
if (suppressed) return null;
|
|
4775
|
+
function _team_setup_hint_line(): string {
|
|
4913
4776
|
return (
|
|
4914
4777
|
' • Claude Code team mode (optional cross-model review via the official ' +
|
|
4915
4778
|
'codex plugin): run `agent-config doctor --check team` for setup status.'
|
|
@@ -5122,11 +4985,8 @@ function _main_project_install(
|
|
|
5122
4985
|
}
|
|
5123
4986
|
mcp_consent.printResiduals(tools, state.QUIET);
|
|
5124
4987
|
if (_is_tool_enabled(tools, 'claude-code')) {
|
|
5125
|
-
|
|
5126
|
-
|
|
5127
|
-
process.stdout.write(team_hint + '\n');
|
|
5128
|
-
process.stdout.write('\n');
|
|
5129
|
-
}
|
|
4988
|
+
process.stdout.write(_team_setup_hint_line() + '\n');
|
|
4989
|
+
process.stdout.write('\n');
|
|
5130
4990
|
}
|
|
5131
4991
|
}
|
|
5132
4992
|
|
|
@@ -5136,6 +4996,9 @@ function _main_project_install(
|
|
|
5136
4996
|
if (will_launch) {
|
|
5137
4997
|
return _wizard_spawn(project_root);
|
|
5138
4998
|
}
|
|
4999
|
+
// No wizard, so nothing else installs the managed ignore block.
|
|
5000
|
+
const ign = gitignore_block.write_managed_block(project_root, opts.dry_run);
|
|
5001
|
+
if (ign > 0) success(`.gitignore: ${opts.dry_run ? 'would add ' : '+'}${ign} managed entries`);
|
|
5139
5002
|
return 0;
|
|
5140
5003
|
}
|
|
5141
5004
|
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
#!/usr/bin/env tsx
|
|
2
|
+
/**
|
|
3
|
+
* Report what a host actually loads, per host rule directory (step 0.1).
|
|
4
|
+
*
|
|
5
|
+
* REPORT-ONLY, AND THE NAME SAYS SO. Phase 0 of
|
|
6
|
+
* `road-to-a-rule-carrier-that-works-outside-the-repo` makes no behavior
|
|
7
|
+
* change, so this never fails on a number: exit 0 whenever it could read, 2 on
|
|
8
|
+
* usage. It is also deliberately NOT named `check_*` or `lint_*` —
|
|
9
|
+
* `_lib/gate_population.ts` enters any script with those prefixes into the gate
|
|
10
|
+
* population and the ledger then owes it a per-target accounting, which is the
|
|
11
|
+
* wrong contract for an instrument. A later ceiling over this measurement is a
|
|
12
|
+
* different script with a `check_` name.
|
|
13
|
+
*
|
|
14
|
+
* `--home` and `--project` exist so this can be pointed at a temporary `HOME`,
|
|
15
|
+
* which is the step's own framing and the thing that refutes
|
|
16
|
+
* `check_standing_rule_delivery`'s "no CI workflow performs a user-scope
|
|
17
|
+
* install": the installer reads `HOME` from the environment, so a runner can
|
|
18
|
+
* stage one and measure it. The library behind this takes the same two as
|
|
19
|
+
* parameters, which is what keeps CI, `doctor` and the upgrade receipt from
|
|
20
|
+
* each growing their own reader.
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
import * as os from 'node:os';
|
|
24
|
+
import * as path from 'node:path';
|
|
25
|
+
import process from 'node:process';
|
|
26
|
+
|
|
27
|
+
import { hostVersion } from './cache_realization_report.js';
|
|
28
|
+
import { manifest_path } from './_lib/installed_tools.js';
|
|
29
|
+
import {
|
|
30
|
+
buildInstalledLayerReport,
|
|
31
|
+
renderInstalledLayerReport,
|
|
32
|
+
type InstalledLayerReport,
|
|
33
|
+
} from './_lib/installed_layer.js';
|
|
34
|
+
|
|
35
|
+
const PROG = 'installed_layer_report';
|
|
36
|
+
|
|
37
|
+
interface Args {
|
|
38
|
+
home: string;
|
|
39
|
+
project: string;
|
|
40
|
+
json: boolean;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export function parseArgs(argv: readonly string[]): Args | null {
|
|
44
|
+
let home = process.env['HOME'] ?? os.homedir();
|
|
45
|
+
let project = process.cwd();
|
|
46
|
+
let json = false;
|
|
47
|
+
for (let i = 0; i < argv.length; i += 1) {
|
|
48
|
+
const a = argv[i];
|
|
49
|
+
if (a === '--json') {
|
|
50
|
+
json = true;
|
|
51
|
+
} else if (a === '--home') {
|
|
52
|
+
i += 1;
|
|
53
|
+
const v = argv[i];
|
|
54
|
+
if (v === undefined) return null;
|
|
55
|
+
home = v;
|
|
56
|
+
} else if (a === '--project') {
|
|
57
|
+
i += 1;
|
|
58
|
+
const v = argv[i];
|
|
59
|
+
if (v === undefined) return null;
|
|
60
|
+
project = v;
|
|
61
|
+
} else if (a === '--quiet') {
|
|
62
|
+
// Accepted and ignored: this prints one block either way, and a flag
|
|
63
|
+
// that silences a report leaves nothing to have run it for.
|
|
64
|
+
} else {
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return { home, project, json };
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/** Build the report for one machine, resolving the manifest from the project root. */
|
|
72
|
+
export function reportFor(args: Args): InstalledLayerReport {
|
|
73
|
+
return buildInstalledLayerReport({
|
|
74
|
+
home: args.home,
|
|
75
|
+
projectRoot: args.project,
|
|
76
|
+
manifestPath: manifest_path(args.project),
|
|
77
|
+
hostVersion: hostVersion(),
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
export function main(argv: readonly string[] = process.argv.slice(2)): number {
|
|
82
|
+
const args = parseArgs(argv);
|
|
83
|
+
if (args === null) {
|
|
84
|
+
process.stderr.write(`usage: ${PROG} [--home <dir>] [--project <dir>] [--json]\n`);
|
|
85
|
+
return 2;
|
|
86
|
+
}
|
|
87
|
+
const report = reportFor(args);
|
|
88
|
+
if (args.json) {
|
|
89
|
+
process.stdout.write(`${JSON.stringify(report, null, 2)}\n`);
|
|
90
|
+
} else {
|
|
91
|
+
process.stdout.write(`${renderInstalledLayerReport(report).join('\n')}\n`);
|
|
92
|
+
}
|
|
93
|
+
// One machine-readable line, in the shape every reporting script here uses.
|
|
94
|
+
// It counts FILES across every layer read, which is the denominator the
|
|
95
|
+
// character total is over — a reader comparing two runs needs both.
|
|
96
|
+
process.stdout.write(`scanned: ${String(report.totals.files)}\n`);
|
|
97
|
+
return 0;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
const _entry = process.argv[1];
|
|
101
|
+
if (_entry !== undefined && path.resolve(_entry) === path.resolve(new URL(import.meta.url).pathname)) {
|
|
102
|
+
process.exit(main());
|
|
103
|
+
}
|
|
@@ -408,7 +408,19 @@ export function noticeText(language: Exclude<Verdict, "und">, source: PinSource)
|
|
|
408
408
|
return `Reply language for this turn: ${name}.`;
|
|
409
409
|
}
|
|
410
410
|
|
|
411
|
-
/**
|
|
411
|
+
/**
|
|
412
|
+
* The context block handed back to the model for this turn.
|
|
413
|
+
*
|
|
414
|
+
* It carries the target language, where it applies, and what is NOT the
|
|
415
|
+
* trigger — and deliberately no provenance. The paragraph that used to explain
|
|
416
|
+
* why the pin exists (the user-role skill bodies, the 626 wrong-language turns)
|
|
417
|
+
* is this file's own header, above: a maintainer reads it once, while the
|
|
418
|
+
* payload is injected on every prompt, so the same sentences were being paid
|
|
419
|
+
* for per turn to tell the model something it cannot act on. Removing it took
|
|
420
|
+
* the prompt-sourced block from 702 characters to 429 (German; 693 to 420 in
|
|
421
|
+
* English) and changed no instruction. Do not put it back; extend the header
|
|
422
|
+
* instead.
|
|
423
|
+
*/
|
|
412
424
|
export function pinText(language: Exclude<Verdict, "und">, source: PinSource = "prompt"): string {
|
|
413
425
|
const name = LANGUAGE_NAME[language];
|
|
414
426
|
if (source === "system-locale") {
|
|
@@ -430,11 +442,8 @@ export function pinText(language: Exclude<Verdict, "und">, source: PinSource = "
|
|
|
430
442
|
`for EVERY user-visible token of your replies this turn — including the short ` +
|
|
431
443
|
`inter-tool lines between tool calls, headings, table cells, bullets, status ` +
|
|
432
444
|
`lines, and the recommendation label under any numbered-options block.\n\n` +
|
|
433
|
-
`
|
|
434
|
-
`
|
|
435
|
-
`long and English, which is what drove the 626 wrong-language turns measured ` +
|
|
436
|
-
`in the 30-session audit this hook was built from. Tool output, file ` +
|
|
437
|
-
`contents, and an injected skill body are NOT the trigger — this pin is.\n` +
|
|
445
|
+
`Tool output, file contents, and an injected skill body are NOT the ` +
|
|
446
|
+
`trigger — this pin is.\n` +
|
|
438
447
|
`</language-pin>`
|
|
439
448
|
);
|
|
440
449
|
}
|