@event4u/agent-config 9.9.0 → 9.11.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/.claude-plugin/marketplace.json +1 -1
- package/CHANGELOG.md +212 -194
- package/README.md +13 -16
- package/agents/templates/.ai-council.yml.example +481 -0
- package/agents/templates/.ai-video.xml.example +247 -0
- package/dist/agent-src/commands/agent-status.md +12 -11
- package/dist/agent-src/commands/agents/user/accept.md +115 -30
- package/dist/agent-src/commands/agents/user/delete.md +147 -0
- package/dist/agent-src/commands/agents/user/review.md +65 -28
- package/dist/agent-src/commands/agents/user/show.md +82 -29
- package/dist/agent-src/commands/agents/user/update.md +2 -2
- package/dist/agent-src/commands/agents/user.md +16 -3
- package/dist/agent-src/commands/check-current-md.md +0 -10
- package/dist/agent-src/commands/condense.md +28 -97
- package/dist/agent-src/commands/cost/report.md +7 -0
- package/dist/agent-src/commands/fix/portability.md +0 -8
- package/dist/agent-src/commands/fix/refs.md +0 -8
- package/dist/agent-src/commands/humanize.md +2 -2
- package/dist/agent-src/commands/jira-ticket.md +1 -1
- package/dist/agent-src/commands/memory/load.md +11 -0
- package/dist/agent-src/commands/optimize/skills.md +1 -1
- package/dist/agent-src/commands/pr/create.md +4 -4
- package/dist/agent-src/commands/profile/show.md +3 -3
- package/dist/agent-src/commands/rule-compliance-audit.md +5 -4
- package/dist/agent-src/commands/security-audit-config.md +1 -1
- package/dist/agent-src/commands/sync/gitignore/fix.md +1 -1
- package/dist/agent-src/commands/tdd.md +21 -0
- package/dist/agent-src/commands/team/delegate.md +2 -2
- package/dist/agent-src/commands/team-knowledge/bootstrap.md +9 -8
- package/dist/agent-src/commands/team-knowledge/consolidate.md +8 -7
- package/dist/agent-src/commands/team.md +4 -1
- package/dist/agent-src/commands/upstream-contribute.md +0 -1
- package/dist/agent-src/contexts/authority/commit-mechanics.md +7 -0
- package/dist/agent-src/contexts/authority/destructive-mechanics.md +16 -0
- package/dist/agent-src/contexts/authority/scope-mechanics.md +61 -0
- package/dist/agent-src/contexts/communication/rules-auto/reply-close-mechanics.md +20 -18
- package/dist/agent-src/contexts/communication/rules-auto/skill-quality-mechanics.md +1 -1
- package/dist/agent-src/contexts/communication/rules-auto/slash-command-routing-policy-mechanics.md +1 -1
- package/dist/agent-src/contexts/communication/rules-auto/source-of-truth-mechanics.md +9 -10
- package/dist/agent-src/contexts/communication/rules-auto/think-before-action-mechanics.md +1 -1
- package/dist/agent-src/contexts/communication/rules-auto/user-interaction-mechanics.md +11 -0
- package/dist/agent-src/contexts/contracts/artifact-engagement-flow.md +26 -15
- package/dist/agent-src/contexts/contracts/command-suggestion-flow.md +3 -0
- package/dist/agent-src/contexts/execution/auto-dispatch-classification.md +67 -37
- package/dist/agent-src/contexts/execution/auto-orchestration-activation.md +1 -1
- package/dist/agent-src/contexts/execution/autonomy-examples.md +1 -1
- package/dist/agent-src/contexts/execution/autonomy-mechanics.md +7 -6
- package/dist/agent-src/contexts/execution/evidence-discipline.md +92 -77
- package/dist/agent-src/contexts/execution/orchestration-benchmark-gate.md +22 -21
- package/dist/agent-src/contexts/execution/orchestration-telemetry.md +24 -0
- package/dist/agent-src/contexts/execution/project-intelligence.md +122 -103
- package/dist/agent-src/contexts/execution/roadmap-execution-contract.md +23 -21
- package/dist/agent-src/contexts/execution/subagent-response-contract.md +5 -5
- package/dist/agent-src/contexts/execution/subagent-routing.md +11 -0
- package/dist/agent-src/contexts/execution/subagent-spawn-contract.md +13 -13
- package/dist/agent-src/contexts/execution/subagent-steering.md +36 -34
- package/dist/agent-src/contexts/execution/toolchain-resolver.md +1 -1
- package/dist/agent-src/contexts/execution/user-memory-channels.md +189 -0
- package/dist/agent-src/contexts/execution/verification-mechanics.md +9 -0
- package/dist/agent-src/contexts/model-recommendations.md +3 -2
- package/dist/agent-src/contexts/subagent-configuration.md +3 -3
- package/dist/agent-src/ghostwriter/README.md +2 -2
- package/dist/agent-src/packs/README.md +1 -1
- package/dist/agent-src/personas/README.md +5 -5
- package/dist/agent-src/personas/_template-specialist/persona.md +3 -3
- package/dist/agent-src/personas/backend-architect.md +24 -23
- package/dist/agent-src/personas/eloquent-tamer.md +30 -30
- package/dist/agent-src/personas/frontend-engineer.md +30 -30
- package/dist/agent-src/personas/product-owner.md +41 -38
- package/dist/agent-src/personas/qa.md +13 -13
- package/dist/agent-src/personas/security-engineer.md +22 -22
- package/dist/agent-src/presets/README.md +3 -3
- package/dist/agent-src/profiles/README.md +3 -3
- package/dist/agent-src/rules/active-remediation.md +2 -2
- package/dist/agent-src/rules/artifact-engagement-recording.md +4 -4
- package/dist/agent-src/rules/ask-when-uncertain.md +0 -4
- package/dist/agent-src/rules/augment-edit-discipline.md +1 -1
- package/dist/agent-src/rules/broken-access-control.md +4 -4
- package/dist/agent-src/rules/code-comment-discipline.md +1 -1
- package/dist/agent-src/rules/code-provenance.md +2 -2
- package/dist/agent-src/rules/commit-policy.md +4 -9
- package/dist/agent-src/rules/communication-through-line.md +5 -5
- package/dist/agent-src/rules/decision-revisit-gate.md +1 -1
- package/dist/agent-src/rules/design-fidelity.md +1 -1
- package/dist/agent-src/rules/doc-screenshot-hygiene.md +1 -1
- package/dist/agent-src/rules/domain-adoption-policy.md +1 -1
- package/dist/agent-src/rules/domain-safety-pii.md +1 -1
- package/dist/agent-src/rules/external-code-graph-interop.md +1 -1
- package/dist/agent-src/rules/fast-path-marker-visibility.md +43 -7
- package/dist/agent-src/rules/finance-safety-floor.md +1 -1
- package/dist/agent-src/rules/framework-neutrality-in-generic-skills.md +3 -3
- package/dist/agent-src/rules/history-discipline.md +1 -1
- package/dist/agent-src/rules/legal-safety-floor.md +1 -1
- package/dist/agent-src/rules/lethal-trifecta-guard.md +5 -5
- package/dist/agent-src/rules/low-impact-corpus-privacy-floor.md +10 -8
- package/dist/agent-src/rules/media-governance-routing.md +13 -13
- package/dist/agent-src/rules/media-sync-ground-truth.md +29 -11
- package/dist/agent-src/rules/no-cheap-questions.md +7 -7
- package/dist/agent-src/rules/no-decorative-emojis-in-git-surfaces.md +29 -18
- package/dist/agent-src/rules/non-destructive-by-default.md +5 -23
- package/dist/agent-src/rules/onboarding-gate.md +14 -4
- package/dist/agent-src/rules/persona-governance.md +2 -2
- package/dist/agent-src/rules/prefer-enums-over-literals.md +9 -9
- package/dist/agent-src/rules/preservation-guard.md +10 -2
- package/dist/agent-src/rules/question-not-instruction.md +1 -1
- package/dist/agent-src/rules/roadmap-progress-sync.md +6 -6
- package/dist/agent-src/rules/rule-type-governance.md +1 -1
- package/dist/agent-src/rules/scale-discipline.md +1 -1
- package/dist/agent-src/rules/scope-control.md +1 -1
- package/dist/agent-src/rules/secret-vcs-guard.md +1 -1
- package/dist/agent-src/rules/security-sensitive-stop.md +17 -11
- package/dist/agent-src/rules/senior-engineering-discipline.md +17 -17
- package/dist/agent-src/rules/session-canary.md +1 -1
- package/dist/agent-src/rules/skill-quality.md +1 -1
- package/dist/agent-src/rules/source-confidentiality.md +21 -19
- package/dist/agent-src/rules/source-of-truth.md +6 -5
- package/dist/agent-src/rules/spreadsheet-source-quality.md +2 -2
- package/dist/agent-src/rules/strategy-safety-floor.md +1 -1
- package/dist/agent-src/rules/think-before-action.md +5 -5
- package/dist/agent-src/rules/token-budget-discipline.md +5 -3
- package/dist/agent-src/rules/token-efficiency.md +2 -2
- package/dist/agent-src/rules/untrusted-input-defense.md +4 -4
- package/dist/agent-src/rules/user-interaction.md +12 -0
- package/dist/agent-src/rules/verify-before-complete.md +4 -24
- package/dist/agent-src/skills/adversarial-review/SKILL.md +2 -2
- package/dist/agent-src/skills/agent-security-review/SKILL.md +52 -45
- package/dist/agent-src/skills/agents-md-thin-root/SKILL.md +2 -2
- package/dist/agent-src/skills/ai-code-blindspots/SKILL.md +20 -20
- package/dist/agent-src/skills/ai-council/SKILL.md +185 -128
- package/dist/agent-src/skills/analysis-skill-router/SKILL.md +3 -3
- package/dist/agent-src/skills/api-endpoint/SKILL.md +2 -2
- package/dist/agent-src/skills/artisan-commands/SKILL.md +2 -2
- package/dist/agent-src/skills/async-python-patterns/SKILL.md +8 -7
- package/dist/agent-src/skills/authz-review/SKILL.md +16 -15
- package/dist/agent-src/skills/aws-infrastructure/SKILL.md +5 -5
- package/dist/agent-src/skills/blade-ui/SKILL.md +1 -1
- package/dist/agent-src/skills/bug-analyzer/SKILL.md +30 -12
- package/dist/agent-src/skills/code-intelligence/SKILL.md +0 -1
- package/dist/agent-src/skills/code-intelligence/evals/triggers.json +52 -0
- package/dist/agent-src/skills/code-review/SKILL.md +6 -6
- package/dist/agent-src/skills/command-routing/SKILL.md +5 -4
- package/dist/agent-src/skills/composer-packages/SKILL.md +2 -2
- package/dist/agent-src/skills/condense-memory/SKILL.md +43 -41
- package/dist/agent-src/skills/context-document/SKILL.md +23 -21
- package/dist/agent-src/skills/copilot-config/SKILL.md +6 -1
- package/dist/agent-src/skills/decision-record/SKILL.md +20 -18
- package/dist/agent-src/skills/design-intelligence/SKILL.md +4 -4
- package/dist/agent-src/skills/design-review/SKILL.md +15 -14
- package/dist/agent-src/skills/design-system-capture/reference/design-system-json.md +28 -25
- package/dist/agent-src/skills/devcontainer/SKILL.md +2 -2
- package/dist/agent-src/skills/docker/SKILL.md +1 -1
- package/dist/agent-src/skills/docx-authoring/evals/triggers.json +52 -0
- package/dist/agent-src/skills/emit-tickets/SKILL.md +2 -2
- package/dist/agent-src/skills/error-handling-patterns/SKILL.md +1 -1
- package/dist/agent-src/skills/estimate-ticket/SKILL.md +2 -2
- package/dist/agent-src/skills/evaluate-llm-feature/SKILL.md +0 -1
- package/dist/agent-src/skills/evaluate-llm-feature/evals/triggers.json +52 -0
- package/dist/agent-src/skills/existing-ui-audit/SKILL.md +21 -7
- package/dist/agent-src/skills/fe-design/SKILL.md +10 -0
- package/dist/agent-src/skills/feature-planning/SKILL.md +2 -2
- package/dist/agent-src/skills/finishing-a-development-branch/SKILL.md +3 -3
- package/dist/agent-src/skills/flux/SKILL.md +1 -1
- package/dist/agent-src/skills/frontend-render-security/SKILL.md +13 -13
- package/dist/agent-src/skills/git-workflow/SKILL.md +33 -33
- package/dist/agent-src/skills/grafana/SKILL.md +5 -0
- package/dist/agent-src/skills/humanizer/SKILL.md +83 -66
- package/dist/agent-src/skills/humanizer/data/patterns.md +14 -14
- package/dist/agent-src/skills/humanizer/references/anti-aiisms.md +4 -4
- package/dist/agent-src/skills/judge-artifact-completeness/SKILL.md +82 -37
- package/dist/agent-src/skills/judge-bug-hunter/SKILL.md +17 -5
- package/dist/agent-src/skills/judge-injection-defense/SKILL.md +63 -25
- package/dist/agent-src/skills/judge-security-auditor/SKILL.md +2 -0
- package/dist/agent-src/skills/judge-synthesis/SKILL.md +72 -28
- package/dist/agent-src/skills/laravel-horizon/SKILL.md +5 -0
- package/dist/agent-src/skills/laravel-mail/SKILL.md +5 -4
- package/dist/agent-src/skills/laravel-middleware/SKILL.md +5 -4
- package/dist/agent-src/skills/laravel-notifications/SKILL.md +10 -9
- package/dist/agent-src/skills/laravel-pennant/SKILL.md +1 -1
- package/dist/agent-src/skills/laravel-pulse/SKILL.md +9 -8
- package/dist/agent-src/skills/laravel-reverb/SKILL.md +6 -5
- package/dist/agent-src/skills/laravel-scheduling/SKILL.md +6 -1
- package/dist/agent-src/skills/laravel-validation/SKILL.md +12 -0
- package/dist/agent-src/skills/launch-readiness/SKILL.md +1 -1
- package/dist/agent-src/skills/learning-to-rule-or-skill/SKILL.md +7 -7
- package/dist/agent-src/skills/learning-tutor/SKILL.md +44 -43
- package/dist/agent-src/skills/learning-tutor/evals/triggers.json +52 -0
- package/dist/agent-src/skills/license-compliance-audit/SKILL.md +7 -7
- package/dist/agent-src/skills/license-compliance-borrow-check/SKILL.md +3 -3
- package/dist/agent-src/skills/license-compliance-credits/SKILL.md +4 -4
- package/dist/agent-src/skills/llm-provider-knowledge/SKILL.md +0 -1
- package/dist/agent-src/skills/memory-consolidation/SKILL.md +69 -64
- package/dist/agent-src/skills/motion-choreographer/SKILL.md +6 -6
- package/dist/agent-src/skills/pdf-tools/evals/triggers.json +52 -0
- package/dist/agent-src/skills/performance-analysis/SKILL.md +7 -3
- package/dist/agent-src/skills/persona-improvement/SKILL.md +0 -2
- package/dist/agent-src/skills/persona-improvement/evals/triggers.json +52 -0
- package/dist/agent-src/skills/php-coder/SKILL.md +10 -0
- package/dist/agent-src/skills/prediction-pool-optimizer/SKILL.md +129 -120
- package/dist/agent-src/skills/prediction-pool-optimizer/reference/ev-fixtures.md +36 -35
- package/dist/agent-src/skills/prediction-pool-optimizer/reference/odds-and-bonus.md +45 -41
- package/dist/agent-src/skills/project-analysis-core/SKILL.md +4 -4
- package/dist/agent-src/skills/project-analysis-hypothesis-driven/SKILL.md +3 -3
- package/dist/agent-src/skills/project-analysis-react/SKILL.md +1 -1
- package/dist/agent-src/skills/project-analysis-symfony/SKILL.md +1 -1
- package/dist/agent-src/skills/project-analysis-zend-laminas/SKILL.md +2 -2
- package/dist/agent-src/skills/prompt-engineering-patterns/SKILL.md +1 -1
- package/dist/agent-src/skills/prompt-validator/SKILL.md +39 -39
- package/dist/agent-src/skills/quality-tools/SKILL.md +15 -15
- package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +55 -19
- package/dist/agent-src/skills/react-shadcn-ui/reference/registry.md +29 -27
- package/dist/agent-src/skills/readme-writing-package/SKILL.md +2 -2
- package/dist/agent-src/skills/reasoning-orchestrator/SKILL.md +25 -25
- package/dist/agent-src/skills/recursive-verification/SKILL.md +6 -5
- package/dist/agent-src/skills/refine-prompt/SKILL.md +1 -1
- package/dist/agent-src/skills/refine-ticket/SKILL.md +20 -2
- package/dist/agent-src/skills/repomix-packer/SKILL.md +1 -1
- package/dist/agent-src/skills/requesting-code-review/SKILL.md +2 -2
- package/dist/agent-src/skills/roadmap-management/SKILL.md +80 -66
- package/dist/agent-src/skills/roadmap-writing/SKILL.md +84 -77
- package/dist/agent-src/skills/rule-refactor/SKILL.md +1 -1
- package/dist/agent-src/skills/screenshot-hygiene/evals/triggers.json +52 -0
- package/dist/agent-src/skills/security-audit/SKILL.md +26 -9
- package/dist/agent-src/skills/security-maturity-assessment/SKILL.md +38 -16
- package/dist/agent-src/skills/skill-improvement-pipeline/SKILL.md +14 -11
- package/dist/agent-src/skills/skill-writing/SKILL.md +9 -8
- package/dist/agent-src/skills/song-to-script/SKILL.md +93 -85
- package/dist/agent-src/skills/sql-writing/SKILL.md +2 -2
- package/dist/agent-src/skills/stakeholder-tradeoff/SKILL.md +4 -3
- package/dist/agent-src/skills/standards-from-config/SKILL.md +61 -43
- package/dist/agent-src/skills/subagent-orchestration/SKILL.md +22 -8
- package/dist/agent-src/skills/subagent-orchestration/prompts/README.md +28 -2
- package/dist/agent-src/skills/supply-chain-intake/SKILL.md +13 -13
- package/dist/agent-src/skills/systematic-debugging/SKILL.md +22 -21
- package/dist/agent-src/skills/tailwind-engineer/SKILL.md +1 -1
- package/dist/agent-src/skills/technical-specification/SKILL.md +5 -0
- package/dist/agent-src/skills/terraform/SKILL.md +2 -2
- package/dist/agent-src/skills/terragrunt/SKILL.md +8 -8
- package/dist/agent-src/skills/testing-anti-patterns/process-anti-patterns.md +1 -1
- package/dist/agent-src/skills/threat-modeling/SKILL.md +19 -13
- package/dist/agent-src/skills/universal-project-analysis/SKILL.md +1 -1
- package/dist/agent-src/skills/upstream-contribute/SKILL.md +0 -1
- package/dist/agent-src/skills/using-git-worktrees/SKILL.md +9 -9
- package/dist/agent-src/skills/validate-feature-fit/SKILL.md +3 -1
- package/dist/agent-src/skills/verify-completion-evidence/SKILL.md +4 -6
- package/dist/agent-src/skills/verify-repair-loop/SKILL.md +67 -61
- package/dist/agent-src/skills/video-director/SKILL.md +7 -7
- package/dist/agent-src/skills/worktree-lifecycle/SKILL.md +3 -3
- package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/dist/agent-src/templates/contexts/knowledge-pages.md +47 -45
- package/dist/agent-src/templates/contexts/lesson-card.md +2 -2
- package/dist/agent-src/templates/contexts/tenant-boundaries.md +2 -2
- package/dist/agent-src/templates/contexts.md +1 -1
- package/dist/agent-src/templates/features.md +1 -1
- package/dist/agent-src/templates/roadmaps.md +125 -116
- package/dist/agent-src/templates/rule.md +2 -1
- package/dist/agent-src/templates/scripts/pr_risk_review.ts +0 -0
- package/dist/agent-src/templates/scripts/telemetry/aggregator.ts +0 -0
- package/dist/agent-src/templates/scripts/tier_usage_report.ts +2 -2
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/apply.ts +30 -30
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/design.ts +88 -33
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/polish.ts +22 -2
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/review.ts +21 -2
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/stack_bundles.ts +179 -0
- package/dist/agent-src/templates/scripts/work_engine/stack/detect.ts +155 -4
- package/dist/agent-src/templates/scripts/work_engine/state.ts +21 -4
- package/dist/agent-src/user-types/README.md +8 -8
- package/dist/agent-src/user-types/galabau-field-crew.md +34 -33
- package/dist/agent-src/user-types/metalworking-shop.md +35 -34
- package/dist/agent-src/user-types/truck-driver.md +22 -20
- package/dist/cli/initRouting.js +74 -11
- package/dist/cli/initRouting.js.map +1 -1
- package/dist/cli/main.js +14 -3
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/python/workspace_roles.js +2 -2
- package/dist/cli/python/workspace_roles.js.map +1 -1
- package/dist/cli-delegate/chunk-4SV3XGFA.js +6910 -0
- package/dist/cli-delegate/chunk-736JCWLM.js +1104 -0
- package/dist/cli-delegate/chunk-7DSAMZFU.js +356 -0
- package/dist/cli-delegate/chunk-7HQ52DHU.js +74 -0
- package/dist/cli-delegate/chunk-BJGXZNPM.js +266 -0
- package/dist/cli-delegate/chunk-FTAISGDQ.js +117 -0
- package/dist/cli-delegate/chunk-GME3Q44L.js +82 -0
- package/dist/cli-delegate/chunk-GRRPEPRN.js +336 -0
- package/dist/cli-delegate/chunk-HJ6DAJHR.js +502 -0
- package/dist/cli-delegate/chunk-IR7P7JWA.js +872 -0
- package/dist/cli-delegate/chunk-J55WI3RR.js +47 -0
- package/dist/cli-delegate/chunk-MCJYCQPF.js +35 -0
- package/dist/cli-delegate/chunk-NDJLNC6Q.js +169 -0
- package/dist/cli-delegate/chunk-OMIVVCG2.js +26 -0
- package/dist/cli-delegate/chunk-OY53J6II.js +7336 -0
- package/dist/cli-delegate/chunk-RDGRHAAB.js +259 -0
- package/dist/cli-delegate/chunk-TFG57JJM.js +1969 -0
- package/dist/cli-delegate/chunk-XX6TOPD7.js +715 -0
- package/dist/cli-delegate/chunk-YMFO6FDN.js +10603 -0
- package/dist/cli-delegate/cmd_analyze_session.js +294 -0
- package/dist/cli-delegate/cmd_conformance.js +646 -0
- package/dist/cli-delegate/cmd_converge.js +326 -0
- package/dist/cli-delegate/cmd_doctor.js +144 -0
- package/dist/cli-delegate/cmd_explain.js +2508 -0
- package/dist/cli-delegate/cmd_export.js +296 -0
- package/dist/cli-delegate/cmd_fleet.js +332 -0
- package/dist/cli-delegate/cmd_memory_get.js +3878 -0
- package/dist/cli-delegate/cmd_migrate.js +11 -0
- package/dist/cli-delegate/cmd_preflight.js +270 -0
- package/dist/cli-delegate/cmd_prune.js +444 -0
- package/dist/cli-delegate/cmd_refresh.js +28 -0
- package/dist/cli-delegate/cmd_settings_check.js +574 -0
- package/dist/cli-delegate/cmd_settings_migrate.js +223 -0
- package/dist/cli-delegate/cmd_sync.js +264 -0
- package/dist/cli-delegate/cmd_uninstall.js +656 -0
- package/dist/cli-delegate/cmd_update.js +425 -0
- package/dist/cli-delegate/cmd_upgrade.js +444 -0
- package/dist/cli-delegate/cmd_validate.js +305 -0
- package/dist/cli-delegate/cmd_versions.js +370 -0
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +100 -67
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +4 -4
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +16 -10
- package/dist/discovery/trust-report.md +2 -2
- package/dist/discovery/workspaces.json +7 -5
- package/dist/hooks/dispatch.js +186 -12
- package/dist/install/emit_host_rules_cli.js +2 -1
- package/dist/install/emit_host_rules_cli.js.map +1 -1
- package/dist/install/install.mjs +418 -378
- package/dist/install/rule_scope.js +5 -1
- package/dist/install/rule_scope.js.map +1 -1
- package/dist/install/toolDetection.js +40 -12
- package/dist/install/toolDetection.js.map +1 -1
- package/dist/install/wizard-plan.js +2 -2
- package/dist/install/wizard-plan.js.map +1 -1
- package/dist/mcp/registry-manifest.json +3 -3
- package/dist/mcp/server.json +2 -2
- package/dist/mcp/server.mjs +2194 -1003
- package/dist/router.json +1 -1
- package/dist/scripts/_lib/compile_time_toggles.js +48 -0
- package/dist/scripts/_lib/compile_time_toggles.js.map +1 -0
- package/dist/scripts/condense.js +234 -217
- package/dist/scripts/condense.js.map +1 -1
- package/dist/server/schemas/settings.js +4 -0
- package/dist/server/schemas/settings.js.map +1 -1
- package/dist/shared/userMd/utils.js +30 -0
- package/dist/shared/userMd/utils.js.map +1 -1
- package/dist/ui/assets/index-BpSQt5vm.js.map +1 -1
- package/docs/guidelines/agent-infra/api-cost-levers.md +56 -5
- package/docs/guidelines/agent-infra/simplicity-and-goal-demos.md +93 -33
- package/package.json +4 -2
- package/src/agent-src/templates/scripts/pr_risk_review.ts +0 -0
- package/src/agent-src/templates/scripts/telemetry/aggregator.ts +0 -0
- package/src/agent-src/templates/scripts/tier_usage_report.ts +2 -2
- package/src/agent-src/templates/scripts/work_engine/directives/ui/apply.ts +30 -30
- package/src/agent-src/templates/scripts/work_engine/directives/ui/design.ts +88 -33
- package/src/agent-src/templates/scripts/work_engine/directives/ui/polish.ts +22 -2
- package/src/agent-src/templates/scripts/work_engine/directives/ui/review.ts +21 -2
- package/src/agent-src/templates/scripts/work_engine/directives/ui/stack_bundles.ts +179 -0
- package/src/agent-src/templates/scripts/work_engine/stack/detect.ts +155 -4
- package/src/agent-src/templates/scripts/work_engine/state.ts +21 -4
- package/src/config/agent-settings.template.yml +32 -2
- package/src/config/ci-local-parity.yml +142 -0
- package/src/config/discovery/packs.yml +7 -0
- package/src/config/evaluator-budgets.json +1 -1
- package/src/config/gate-coverage.yml +127 -0
- package/src/config/pack-size-budget.json +27 -0
- package/src/config/preamble-payload-budget.json +44 -0
- package/src/install/emit_host_rules_cli.ts +2 -1
- package/src/install/rule_scope.ts +5 -1
- package/src/install/toolDetection.ts +39 -8
- package/src/install/wizard-plan.ts +2 -2
- package/src/scripts/_cli/cmd_conformance.ts +2 -1
- package/src/scripts/_cli/cmd_converge.ts +2 -1
- package/src/scripts/_cli/cmd_doctor.ts +292 -15
- package/src/scripts/_cli/cmd_export.ts +2 -1
- package/src/scripts/_cli/cmd_fleet.ts +2 -1
- package/src/scripts/_cli/cmd_migrate.ts +2 -1
- package/src/scripts/_cli/cmd_preflight.ts +2 -1
- package/src/scripts/_cli/cmd_refresh.ts +2 -1
- package/src/scripts/_cli/cmd_update.ts +2 -1
- package/src/scripts/_cli/cmd_upgrade.ts +2 -1
- package/src/scripts/_cli/cmd_versions.ts +2 -1
- package/src/scripts/_cli/detection_report.ts +480 -0
- package/src/scripts/_dispatch.bash +52 -14
- package/src/scripts/_lib/agent_user_profile.ts +381 -0
- package/src/scripts/_lib/agents_overlay.ts +9 -0
- package/src/scripts/_lib/anchor_eval.ts +311 -0
- package/src/scripts/_lib/cc_transcript.ts +316 -0
- package/src/scripts/_lib/changelog_eras.ts +103 -9
- package/src/scripts/_lib/compile_time_toggles.ts +79 -0
- package/src/scripts/_lib/confusables.ts +101 -0
- package/src/scripts/_lib/duplicate_scope_census.ts +77 -0
- package/src/scripts/_lib/environment_detector.ts +441 -0
- package/src/scripts/_lib/managed_agents_folder.ts +181 -0
- package/src/scripts/_lib/package_root.ts +72 -0
- package/src/scripts/_lib/payload_hash_drift.ts +126 -0
- package/src/scripts/_lib/preservation_migration.ts +291 -0
- package/src/scripts/_lib/retrieval_sanitize.ts +166 -2
- package/src/scripts/_lib/scan_scope.ts +115 -0
- package/src/scripts/_lib/user_global_memory_audit.ts +187 -0
- package/src/scripts/_lib/user_global_observations.ts +830 -0
- package/src/scripts/_lib/user_global_revocations.ts +110 -0
- package/src/scripts/_lib/user_memory_gate_counters.ts +291 -0
- package/src/scripts/ai_council/blind_review.ts +0 -0
- package/src/scripts/ai_council/budget_guard.ts +90 -11
- package/src/scripts/ai_council/bundler.ts +2 -2
- package/src/scripts/ai_council/clients.ts +59 -3
- package/src/scripts/ai_council/config.ts +53 -7
- package/src/scripts/ai_council/modes.ts +68 -2
- package/src/scripts/ai_council/orchestrator.ts +54 -9
- package/src/scripts/ai_council/transport_resolver.ts +331 -0
- package/src/scripts/ai_team/team_dispatch.ts +17 -6
- package/src/scripts/anchor_eval_falsify.ts +198 -0
- package/src/scripts/anchor_scoring_run.ts +239 -0
- package/src/scripts/annotate_discovery.ts +1 -65
- package/src/scripts/bench_quality_run.ts +168 -4
- package/src/scripts/cache_realization_report.ts +782 -0
- package/src/scripts/check_artefact_count_messaging.ts +5 -1
- package/src/scripts/check_augment_description_cap.ts +15 -4
- package/src/scripts/check_bundle_path_leakage.ts +10 -4
- package/src/scripts/check_ci_local_parity.ts +317 -0
- package/src/scripts/check_condensation.ts +96 -191
- package/src/scripts/check_context_paths.ts +38 -9
- package/src/scripts/check_dependency_floors.ts +153 -0
- package/src/scripts/check_gate_coverage.ts +299 -0
- package/src/scripts/check_iron_law_prominence.ts +22 -1
- package/src/scripts/check_kernel_prefix_stability.ts +0 -0
- package/src/scripts/check_no_new_legacy_path.ts +16 -6
- package/src/scripts/check_no_roadmap_refs.ts +22 -9
- package/src/scripts/check_originality_freshness.ts +167 -0
- package/src/scripts/check_pack_size.ts +188 -0
- package/src/scripts/check_preamble_payload_budget.ts +130 -0
- package/src/scripts/check_proposal.ts +0 -0
- package/src/scripts/check_references.ts +0 -1
- package/src/scripts/check_safety_floor_untouched.ts +171 -24
- package/src/scripts/check_site_links.ts +62 -3
- package/src/scripts/ci_status.ts +0 -0
- package/src/scripts/cluster_near_miss_patterns.ts +0 -0
- package/src/scripts/code_graph/build.ts +0 -0
- package/src/scripts/command_suggester/types.ts +0 -0
- package/src/scripts/compile_router.ts +10 -14
- package/src/scripts/condense.sh +3 -4
- package/src/scripts/condense.ts +247 -228
- package/src/scripts/cost/track.mjs +168 -33
- package/src/scripts/cost_summary.ts +33 -1
- package/src/scripts/council_cli.ts +51 -5
- package/src/scripts/discovery_graph.ts +0 -0
- package/src/scripts/encoding_corpus.ts +500 -0
- package/src/scripts/encoding_corpus_report.ts +216 -0
- package/src/scripts/evaluator_umbrella.sh +34 -1
- package/src/scripts/generate_index.ts +19 -2
- package/src/scripts/install-hooks.sh +2 -2
- package/src/scripts/learning_sidecar.ts +0 -0
- package/src/scripts/lint_confusables.ts +10 -72
- package/src/scripts/lint_eval_fixture_citations.ts +113 -0
- package/src/scripts/lint_featured_skills.ts +0 -0
- package/src/scripts/lint_hidden_unicode.ts +208 -0
- package/src/scripts/lint_load_context.ts +17 -5
- package/src/scripts/lint_new_skill_gate.ts +9 -3
- package/src/scripts/lint_no_python_twin_rationale.ts +17 -2
- package/src/scripts/lint_originality.ts +1 -1
- package/src/scripts/lint_skill_originality.ts +1 -1
- package/src/scripts/lint_ticket_buildable.ts +1 -1
- package/src/scripts/lint_ui_stack_bundles.ts +170 -0
- package/src/scripts/mcp_server/tools.ts +4 -4
- package/src/scripts/measure_scope_dedup.ts +224 -0
- package/src/scripts/memory_lookup.ts +0 -0
- package/src/scripts/mine_session.ts +98 -0
- package/src/scripts/orchestration_payload_hash_drift.ts +145 -0
- package/src/scripts/preamble_byte_census.ts +574 -0
- package/src/scripts/probe_skill_registration.ts +2 -2
- package/src/scripts/redact_hook_capture.ts +13 -0
- package/src/scripts/release.ts +65 -10
- package/src/scripts/router_telemetry.ts +1 -1
- package/src/scripts/second_brain_retrieval.ts +14 -4
- package/src/scripts/skill_linter.ts +5 -0
- package/src/scripts/surface-tiers.yml +2 -0
- package/src/scripts/validate_pack_yaml.ts +0 -0
- package/src/server/schemas/settings.ts +8 -0
- package/src/shared/userMd/utils.ts +31 -0
- package/dist/agent-src/rules/telegraph-speak.md +0 -87
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
* offline-readiness · python-runtime · humanizer-runtime · tier-usage-readiness ·
|
|
32
32
|
* council-cli · team ·
|
|
33
33
|
* unsupported-combos · wizard-state · settings-review-pending ·
|
|
34
|
-
* memory-merge-union.
|
|
34
|
+
* memory-merge-union · duplicate-scope-rules.
|
|
35
35
|
* Each emits a structured `{id, status, message, remedy}` record with
|
|
36
36
|
* `status` ∈ `ok` / `warn` / `fail` / `skipped` (rendered
|
|
37
37
|
* `✅` / `⚠️` / `❌` / `⏭️`). `--check <id>` runs a single check.
|
|
@@ -89,6 +89,7 @@ import * as installed_lock from '../_lib/installed_lock.js';
|
|
|
89
89
|
import * as installed_tools from '../_lib/installed_tools.js';
|
|
90
90
|
import * as user_global_paths from '../_lib/user_global_paths.js';
|
|
91
91
|
import * as global_deploy_inventory from '../_lib/global_deploy_inventory.js';
|
|
92
|
+
import { censusDuplicateScope } from '../_lib/duplicate_scope_census.js';
|
|
92
93
|
import * as sync_gitattributes from '../sync_gitattributes.js';
|
|
93
94
|
import {
|
|
94
95
|
PROJECT_ROOT_ENV,
|
|
@@ -101,7 +102,22 @@ import {
|
|
|
101
102
|
} from '../_lib/agent_settings.js';
|
|
102
103
|
import * as ai_council_clients from '../ai_council/clients.js';
|
|
103
104
|
import * as ai_council_config from '../ai_council/config.js';
|
|
105
|
+
import {
|
|
106
|
+
PROVIDER_CLI_META,
|
|
107
|
+
codexHome,
|
|
108
|
+
detectEnvironment,
|
|
109
|
+
} from '../_lib/environment_detector.js';
|
|
110
|
+
import {
|
|
111
|
+
absentCouncilFacts,
|
|
112
|
+
buildDetectionReport,
|
|
113
|
+
detectionJson,
|
|
114
|
+
renderDetectionLines,
|
|
115
|
+
type CouncilFacts,
|
|
116
|
+
type CouncilMemberFacts,
|
|
117
|
+
type DetectionReport,
|
|
118
|
+
} from './detection_report.js';
|
|
104
119
|
import { review_gate_doctor_signal } from '../ai_team/review_gate.js';
|
|
120
|
+
import { resolvePackageRoot } from '../_lib/package_root.js';
|
|
105
121
|
import {
|
|
106
122
|
LEGACY_ALL,
|
|
107
123
|
excludedRuleBasenames,
|
|
@@ -511,7 +527,7 @@ function splitlines(text: string): string[] {
|
|
|
511
527
|
|
|
512
528
|
/** Python `str.rstrip()` (default whitespace, ASCII+Unicode). */
|
|
513
529
|
function rstrip(s: string): string {
|
|
514
|
-
return s.replace(/[\s
|
|
530
|
+
return s.replace(/[\s\u0085 ]+$/u, '');
|
|
515
531
|
}
|
|
516
532
|
|
|
517
533
|
/** Python `value.strip().strip("'\"")` tail (after `.strip()` already done). */
|
|
@@ -757,11 +773,13 @@ const CHECK_IDS = [
|
|
|
757
773
|
'humanizer-runtime',
|
|
758
774
|
'tier-usage-readiness',
|
|
759
775
|
'council-cli',
|
|
776
|
+
'detection',
|
|
760
777
|
'team',
|
|
761
778
|
'unsupported-combos',
|
|
762
779
|
'wizard-state',
|
|
763
780
|
'settings-review-pending',
|
|
764
781
|
'memory-merge-union',
|
|
782
|
+
'duplicate-scope-rules',
|
|
765
783
|
] as const;
|
|
766
784
|
|
|
767
785
|
/** Checks that need only the project root and run regardless of a lockfile. */
|
|
@@ -782,10 +800,12 @@ const GLOBAL_CHECK_IDS: ReadonlySet<string> = new Set([
|
|
|
782
800
|
'humanizer-runtime',
|
|
783
801
|
'tier-usage-readiness',
|
|
784
802
|
'council-cli',
|
|
803
|
+
'detection',
|
|
785
804
|
'team',
|
|
786
805
|
'wizard-state',
|
|
787
806
|
'settings-review-pending',
|
|
788
807
|
'memory-merge-union',
|
|
808
|
+
'duplicate-scope-rules',
|
|
789
809
|
]);
|
|
790
810
|
|
|
791
811
|
/** Checks that genuinely cannot run without the project manifest. */
|
|
@@ -991,7 +1011,7 @@ function _check_manifest_integrity(manifest: Dict): Dict {
|
|
|
991
1011
|
/** Resolve the @event4u/agent-config package root (this repo). */
|
|
992
1012
|
function _package_root(): string {
|
|
993
1013
|
// cmd_doctor lives at src/scripts/_cli/cmd_doctor.{py,ts}; parents[3] = repo.
|
|
994
|
-
return
|
|
1014
|
+
return resolvePackageRoot(import.meta.url);
|
|
995
1015
|
}
|
|
996
1016
|
|
|
997
1017
|
/** Read `version` from this package's package.json; null on error. */
|
|
@@ -1739,6 +1759,76 @@ function _check_rule_scope_drift(project_root: string): Dict {
|
|
|
1739
1759
|
};
|
|
1740
1760
|
}
|
|
1741
1761
|
|
|
1762
|
+
/**
|
|
1763
|
+
* Duplicate-scope rule detection (road-to-cache-economy Phase 3, C-2 —
|
|
1764
|
+
* confirmed at 38.5% of subagent write volume on this maintainer's own
|
|
1765
|
+
* checkout). When the same `.md` rule filenames are installed at BOTH the
|
|
1766
|
+
* user-scope Claude Code config (`~/.claude/rules`) and the project scope,
|
|
1767
|
+
* every session AND every subagent spawn injects two near-identical copies
|
|
1768
|
+
* of the same rule set. This check is DETECTION ONLY: it reports the
|
|
1769
|
+
* measured redundant-token estimate and names which copy is authoritative —
|
|
1770
|
+
* it never deletes, rewrites, or otherwise touches a user's files (per
|
|
1771
|
+
* `non-destructive-by-default`).
|
|
1772
|
+
*
|
|
1773
|
+
* Project scope resolves the same way the census in
|
|
1774
|
+
* `cache_realization_report.ts` does: `dist/agent-src/rules` in this
|
|
1775
|
+
* source repo itself (the only place the ~37% finding was measured), or the
|
|
1776
|
+
* first populated {@link _RULE_PROJECTION_DIRS} entry in a consumer install.
|
|
1777
|
+
* `userRulesDirOverride` exists solely so tests never touch the real
|
|
1778
|
+
* `~/.claude/rules` on the machine running the suite.
|
|
1779
|
+
*/
|
|
1780
|
+
function _check_duplicate_scope_rules(project_root: string, userRulesDirOverride?: string): Dict {
|
|
1781
|
+
const user_rules_dir = userRulesDirOverride ?? path.join(os.homedir(), '.claude', 'rules');
|
|
1782
|
+
|
|
1783
|
+
let project_rules_dir: string | null = null;
|
|
1784
|
+
if (_is_source_repo(project_root)) {
|
|
1785
|
+
const cand = path.join(project_root, 'dist', 'agent-src', 'rules');
|
|
1786
|
+
if (isDir(cand)) project_rules_dir = cand;
|
|
1787
|
+
} else {
|
|
1788
|
+
for (const rel of _RULE_PROJECTION_DIRS) {
|
|
1789
|
+
const cand = path.join(project_root, rel);
|
|
1790
|
+
if (isDir(cand)) {
|
|
1791
|
+
project_rules_dir = cand;
|
|
1792
|
+
break;
|
|
1793
|
+
}
|
|
1794
|
+
}
|
|
1795
|
+
}
|
|
1796
|
+
|
|
1797
|
+
if (project_rules_dir === null) {
|
|
1798
|
+
return {
|
|
1799
|
+
id: 'duplicate-scope-rules',
|
|
1800
|
+
status: 'skipped',
|
|
1801
|
+
message: 'no project-scope rule tree found (dist/agent-src/rules, .augment/rules, …) — nothing to compare against the user-scope copy',
|
|
1802
|
+
remedy: '',
|
|
1803
|
+
};
|
|
1804
|
+
}
|
|
1805
|
+
|
|
1806
|
+
const census = censusDuplicateScope(user_rules_dir, project_rules_dir);
|
|
1807
|
+
if (!census.evaluable) {
|
|
1808
|
+
return {
|
|
1809
|
+
id: 'duplicate-scope-rules',
|
|
1810
|
+
status: 'ok',
|
|
1811
|
+
message: census.reason ?? 'no duplicate-scope rule install detected',
|
|
1812
|
+
remedy: '',
|
|
1813
|
+
};
|
|
1814
|
+
}
|
|
1815
|
+
|
|
1816
|
+
const tokens = Math.round(census.duplicate_chars / 4);
|
|
1817
|
+
const rel_project = relativeTo(project_rules_dir, project_root) ?? project_rules_dir;
|
|
1818
|
+
return {
|
|
1819
|
+
id: 'duplicate-scope-rules',
|
|
1820
|
+
status: 'warn',
|
|
1821
|
+
message:
|
|
1822
|
+
`${census.shared_filenames.length} rule(s) installed at BOTH user scope (${user_rules_dir}) and ` +
|
|
1823
|
+
`project scope (${rel_project}) — an estimated ${tokens} redundant tokens are injected on every ` +
|
|
1824
|
+
'session AND every subagent spawn (both copies are always-loaded). Project scope is authoritative ' +
|
|
1825
|
+
'for this checkout.',
|
|
1826
|
+
remedy:
|
|
1827
|
+
'detection only — no file is modified. If the duplication is unwanted, refresh the user-scope copy ' +
|
|
1828
|
+
'(e.g. `agent-config global`) to re-sync it with the project-scope version.',
|
|
1829
|
+
};
|
|
1830
|
+
}
|
|
1831
|
+
|
|
1742
1832
|
function _check_python_runtime(): Dict {
|
|
1743
1833
|
// Post-teardown: the package runtime is TypeScript-on-`tsx`. python3 is no
|
|
1744
1834
|
// longer a runtime dependency, so this check no longer probes for an
|
|
@@ -1982,16 +2072,13 @@ function osErrorStr(exc: unknown): string {
|
|
|
1982
2072
|
}
|
|
1983
2073
|
|
|
1984
2074
|
/**
|
|
1985
|
-
* Provider → (default binary,
|
|
1986
|
-
*
|
|
2075
|
+
* Provider → (default binary, community-wrapper flag). Canonical definition
|
|
2076
|
+
* lives in `_lib/environment_detector.ts` so this check and the detection
|
|
2077
|
+
* report cannot drift on the billing-relevant boolean; aliased here to keep
|
|
2078
|
+
* the existing call sites unchanged.
|
|
1987
2079
|
*/
|
|
1988
|
-
const _CLI_PROVIDER_META: Record<string, [string, boolean]
|
|
1989
|
-
|
|
1990
|
-
openai: ['codex', false],
|
|
1991
|
-
gemini: ['gemini', false],
|
|
1992
|
-
xai: ['grok', true],
|
|
1993
|
-
perplexity: ['perplexity', true],
|
|
1994
|
-
};
|
|
2080
|
+
const _CLI_PROVIDER_META: Readonly<Record<string, readonly [string, boolean]>> =
|
|
2081
|
+
PROVIDER_CLI_META;
|
|
1995
2082
|
|
|
1996
2083
|
function _check_council_cli(project_root: string): Dict {
|
|
1997
2084
|
// Python wraps the council-module import in a try/except ImportError so a
|
|
@@ -2134,11 +2221,12 @@ function pyFloat(value: number): string {
|
|
|
2134
2221
|
|
|
2135
2222
|
/**
|
|
2136
2223
|
* Codex CLI home — `CODEX_HOME` env override (the codex CLI's own
|
|
2137
|
-
* convention), else `~/.codex`.
|
|
2224
|
+
* convention), else `~/.codex`. Single definition in
|
|
2225
|
+
* `_lib/environment_detector.ts` so the detection report and this check probe
|
|
2226
|
+
* the same path; aliased here to keep the existing call sites unchanged.
|
|
2138
2227
|
*/
|
|
2139
2228
|
function _codex_home(): string {
|
|
2140
|
-
|
|
2141
|
-
return env !== '' ? env : path.join(os.homedir(), '.codex');
|
|
2229
|
+
return codexHome();
|
|
2142
2230
|
}
|
|
2143
2231
|
|
|
2144
2232
|
/**
|
|
@@ -2295,6 +2383,162 @@ function _read_ai_team_block(project_root: string): Dict {
|
|
|
2295
2383
|
* check reports ok ("team mode not configured (default-off)"); WARN fires
|
|
2296
2384
|
* only on failing sub-signals or inconsistent half-configured states.
|
|
2297
2385
|
*/
|
|
2386
|
+
// ---------------------------------------------------------------------------
|
|
2387
|
+
// detection check (road-to-zero-ceremony-detection Phases 3 + 4)
|
|
2388
|
+
// ---------------------------------------------------------------------------
|
|
2389
|
+
|
|
2390
|
+
/** Per-process memo so the check row and the rendered section agree exactly. */
|
|
2391
|
+
let _detection_memo: { root: string; report: DetectionReport } | null = null;
|
|
2392
|
+
|
|
2393
|
+
/**
|
|
2394
|
+
* Read the council-config facts the detection rows need. Never throws — an
|
|
2395
|
+
* absent or unreadable config degrades to "no config", which the report renders
|
|
2396
|
+
* as a fix rather than a failure.
|
|
2397
|
+
*/
|
|
2398
|
+
function _read_council_facts(project_root: string): CouncilFacts {
|
|
2399
|
+
const { load_council_config, resolve_config_path } = ai_council_config;
|
|
2400
|
+
const config_path = String(resolve_config_path(project_root));
|
|
2401
|
+
if (!pathExists(config_path)) {
|
|
2402
|
+
return absentCouncilFacts(config_path);
|
|
2403
|
+
}
|
|
2404
|
+
let cfg: ai_council_config.CouncilConfig;
|
|
2405
|
+
try {
|
|
2406
|
+
cfg = load_council_config(config_path);
|
|
2407
|
+
} catch {
|
|
2408
|
+
// An invalid config is reported by the `council-cli` check, which owns
|
|
2409
|
+
// that problem; here it simply means no facts are derivable.
|
|
2410
|
+
return absentCouncilFacts(config_path);
|
|
2411
|
+
}
|
|
2412
|
+
const members: Record<string, CouncilMemberFacts> = {};
|
|
2413
|
+
for (const [name, m] of cfg.members) {
|
|
2414
|
+
members[name] = {
|
|
2415
|
+
enabled: m.enabled,
|
|
2416
|
+
mode: m.mode,
|
|
2417
|
+
binary: m.binary,
|
|
2418
|
+
apiKeyRef: m.api_key_ref,
|
|
2419
|
+
};
|
|
2420
|
+
}
|
|
2421
|
+
const cliCaps: Record<string, number> = {};
|
|
2422
|
+
for (const [provider, cap] of cfg.cli_call_budget.max_calls_per_day) {
|
|
2423
|
+
cliCaps[provider] = cap;
|
|
2424
|
+
}
|
|
2425
|
+
return {
|
|
2426
|
+
configPath: config_path,
|
|
2427
|
+
configPresent: true,
|
|
2428
|
+
enabled: cfg.enabled,
|
|
2429
|
+
defaultsMode: cfg.defaults.mode,
|
|
2430
|
+
members,
|
|
2431
|
+
cliCaps,
|
|
2432
|
+
costBudgetMaxUsd: cfg.cost_budget.max_total_usd,
|
|
2433
|
+
};
|
|
2434
|
+
}
|
|
2435
|
+
|
|
2436
|
+
/** Build (once per process, per root) the detection report. */
|
|
2437
|
+
function _detection_report(project_root: string): DetectionReport {
|
|
2438
|
+
if (_detection_memo !== null && _detection_memo.root === project_root) {
|
|
2439
|
+
return _detection_memo.report;
|
|
2440
|
+
}
|
|
2441
|
+
const council = _read_council_facts(project_root);
|
|
2442
|
+
let used: Record<string, number> = {};
|
|
2443
|
+
try {
|
|
2444
|
+
const counts = ai_council_clients.load_cli_call_counts();
|
|
2445
|
+
for (const provider of Object.keys(council.cliCaps)) {
|
|
2446
|
+
used[provider] = Number((counts as Dict)[provider] ?? 0);
|
|
2447
|
+
}
|
|
2448
|
+
} catch {
|
|
2449
|
+
used = {};
|
|
2450
|
+
}
|
|
2451
|
+
const report = buildDetectionReport({
|
|
2452
|
+
environment: detectEnvironment(),
|
|
2453
|
+
council,
|
|
2454
|
+
cliCallsUsed: used,
|
|
2455
|
+
});
|
|
2456
|
+
_detection_memo = { root: project_root, report };
|
|
2457
|
+
return report;
|
|
2458
|
+
}
|
|
2459
|
+
|
|
2460
|
+
/** Test seam — drop the memo so a fixture root is not served a stale report. */
|
|
2461
|
+
function _reset_detection_memo(): void {
|
|
2462
|
+
_detection_memo = null;
|
|
2463
|
+
}
|
|
2464
|
+
|
|
2465
|
+
/**
|
|
2466
|
+
* `detection` health check — what this machine can do, and what it is allowed
|
|
2467
|
+
* to do, as two separate facts.
|
|
2468
|
+
*
|
|
2469
|
+
* Reports per provider: detected · authenticated · auth source · billing class
|
|
2470
|
+
* · enabled-in-config, plus the transport `auto` would pick and a one-line fix
|
|
2471
|
+
* for every unusable capability. All rows come from the read-only, spend-free
|
|
2472
|
+
* detector; nothing here makes a provider call.
|
|
2473
|
+
*
|
|
2474
|
+
* Status model — a recorded consent decision is NOT a defect:
|
|
2475
|
+
*
|
|
2476
|
+
* - no council config, or council disabled → `ok` ("not configured"), with the
|
|
2477
|
+
* fix. Absent feature ≠ broken feature (same stance as the `team` check).
|
|
2478
|
+
* - detected but `enabled: false` → `ok`. That flag is a deliberate spend gate;
|
|
2479
|
+
* warning on it would train the user to silence their own consent record.
|
|
2480
|
+
* - enabled to spend but no transport resolves → `warn`. That IS broken: the
|
|
2481
|
+
* member is permitted to run and cannot.
|
|
2482
|
+
*/
|
|
2483
|
+
function _check_detection(project_root: string): Dict {
|
|
2484
|
+
const report = _detection_report(project_root);
|
|
2485
|
+
const detected = report.providers.filter((r) => r.detected);
|
|
2486
|
+
const hosts_installed = report.hosts.filter((h) => h.installed).length;
|
|
2487
|
+
|
|
2488
|
+
if (!report.council_config_present) {
|
|
2489
|
+
return {
|
|
2490
|
+
id: 'detection',
|
|
2491
|
+
status: 'ok',
|
|
2492
|
+
message:
|
|
2493
|
+
`${hosts_installed} host(s) · ${detected.length} provider(s) detected · ` +
|
|
2494
|
+
'council not configured (default-off)',
|
|
2495
|
+
remedy: report.providers[0]?.fix ?? `create ${report.council_config_path}`,
|
|
2496
|
+
};
|
|
2497
|
+
}
|
|
2498
|
+
|
|
2499
|
+
if (!report.council_enabled) {
|
|
2500
|
+
return {
|
|
2501
|
+
id: 'detection',
|
|
2502
|
+
status: 'ok',
|
|
2503
|
+
message:
|
|
2504
|
+
`${hosts_installed} host(s) · ${detected.length} provider(s) detected · ` +
|
|
2505
|
+
'council disabled (default-off)',
|
|
2506
|
+
remedy: `set \`enabled: true\` in ${report.council_config_path}`,
|
|
2507
|
+
};
|
|
2508
|
+
}
|
|
2509
|
+
|
|
2510
|
+
const broken = report.providers.filter((r) => r.enabledInConfig && !r.available);
|
|
2511
|
+
const spending = report.providers.filter((r) => r.enabledInConfig && r.available);
|
|
2512
|
+
const unpermitted = detected.filter((r) => !r.enabledInConfig);
|
|
2513
|
+
|
|
2514
|
+
const summary =
|
|
2515
|
+
`${hosts_installed} host(s) · ${spending.length} member(s) ready ` +
|
|
2516
|
+
`(${spending.map((r) => `${r.provider}→${r.transport}/${r.billing}`).join(', ') || 'none'})` +
|
|
2517
|
+
(unpermitted.length === 0
|
|
2518
|
+
? ''
|
|
2519
|
+
: ` · ${unpermitted.length} detected but not allowed to spend: ` +
|
|
2520
|
+
unpermitted.map((r) => r.provider).join(', '));
|
|
2521
|
+
|
|
2522
|
+
if (broken.length > 0) {
|
|
2523
|
+
return {
|
|
2524
|
+
id: 'detection',
|
|
2525
|
+
status: 'warn',
|
|
2526
|
+
message: `${summary} · ${broken.length} enabled member(s) have no transport`,
|
|
2527
|
+
remedy: broken.map((r) => `${r.provider}: ${r.fix}`).join(' · '),
|
|
2528
|
+
};
|
|
2529
|
+
}
|
|
2530
|
+
|
|
2531
|
+
return {
|
|
2532
|
+
id: 'detection',
|
|
2533
|
+
status: 'ok',
|
|
2534
|
+
message: summary,
|
|
2535
|
+
remedy:
|
|
2536
|
+
unpermitted.length === 0
|
|
2537
|
+
? `run \`agent-config doctor --check detection\` for the full table`
|
|
2538
|
+
: unpermitted.map((r) => r.fix).join(' · '),
|
|
2539
|
+
};
|
|
2540
|
+
}
|
|
2541
|
+
|
|
2298
2542
|
function _check_team(project_root: string): Dict {
|
|
2299
2543
|
const ai_team = _read_ai_team_block(project_root);
|
|
2300
2544
|
const enabled = _settings_flag(ai_team['enabled']);
|
|
@@ -2746,11 +2990,13 @@ function _run_checks(
|
|
|
2746
2990
|
'humanizer-runtime': () => _check_humanizer_runtime(),
|
|
2747
2991
|
'tier-usage-readiness': () => _check_tier_usage_readiness(project_root),
|
|
2748
2992
|
'council-cli': () => _check_council_cli(project_root),
|
|
2993
|
+
'detection': () => _check_detection(project_root),
|
|
2749
2994
|
team: () => _check_team(project_root),
|
|
2750
2995
|
'unsupported-combos': () => _check_unsupported_combos(manifest),
|
|
2751
2996
|
'wizard-state': _check_wizard_state,
|
|
2752
2997
|
'settings-review-pending': _check_settings_review_pending,
|
|
2753
2998
|
'memory-merge-union': () => _check_memory_merge_union(project_root),
|
|
2999
|
+
'duplicate-scope-rules': () => _check_duplicate_scope_rules(project_root),
|
|
2754
3000
|
};
|
|
2755
3001
|
const out: Dict[] = [];
|
|
2756
3002
|
for (const cid of CHECK_IDS) {
|
|
@@ -2821,11 +3067,13 @@ function _run_checks_no_manifest(
|
|
|
2821
3067
|
'humanizer-runtime': () => _check_humanizer_runtime(),
|
|
2822
3068
|
'tier-usage-readiness': () => _check_tier_usage_readiness(project_root),
|
|
2823
3069
|
'council-cli': () => _check_council_cli(project_root),
|
|
3070
|
+
'detection': () => _check_detection(project_root),
|
|
2824
3071
|
team: () => _check_team(project_root),
|
|
2825
3072
|
'unsupported-combos': () => _skipped_manifest_check('unsupported-combos'),
|
|
2826
3073
|
'wizard-state': _check_wizard_state,
|
|
2827
3074
|
'settings-review-pending': _check_settings_review_pending,
|
|
2828
3075
|
'memory-merge-union': () => _check_memory_merge_union(project_root),
|
|
3076
|
+
'duplicate-scope-rules': () => _check_duplicate_scope_rules(project_root),
|
|
2829
3077
|
};
|
|
2830
3078
|
const out: Dict[] = [];
|
|
2831
3079
|
for (const cid of CHECK_IDS) {
|
|
@@ -2870,8 +3118,10 @@ function _run_no_manifest(
|
|
|
2870
3118
|
);
|
|
2871
3119
|
}
|
|
2872
3120
|
_emit_checks_text(checks);
|
|
3121
|
+
_emit_detection_text(project_root, checks);
|
|
2873
3122
|
} else {
|
|
2874
3123
|
_emit_checks_text(checks);
|
|
3124
|
+
_emit_detection_text(project_root, checks);
|
|
2875
3125
|
}
|
|
2876
3126
|
|
|
2877
3127
|
if (opts.check !== null) {
|
|
@@ -2908,6 +3158,12 @@ function _emit_json(
|
|
|
2908
3158
|
}
|
|
2909
3159
|
if (checks !== null) {
|
|
2910
3160
|
payload['checks'] = checks;
|
|
3161
|
+
// The detection section rides along whenever checks ran, so the agent /
|
|
3162
|
+
// GUI contract carries the full provider → transport → billing table
|
|
3163
|
+
// and not just the one-line check row.
|
|
3164
|
+
if (checks.some((c) => c['id'] === 'detection')) {
|
|
3165
|
+
payload['detection'] = detectionJson(_detection_report(project_root));
|
|
3166
|
+
}
|
|
2911
3167
|
}
|
|
2912
3168
|
print(_jsonDumpsIndentAscii(payload, 2));
|
|
2913
3169
|
}
|
|
@@ -2927,6 +3183,21 @@ function _emit_checks_text(checks: Dict[]): void {
|
|
|
2927
3183
|
print('');
|
|
2928
3184
|
}
|
|
2929
3185
|
|
|
3186
|
+
/**
|
|
3187
|
+
* The detection section in text mode. Rendered from the same report the
|
|
3188
|
+
* `detection` check row and the `--json` payload use, so the three cannot
|
|
3189
|
+
* disagree about which members spend money.
|
|
3190
|
+
*/
|
|
3191
|
+
function _emit_detection_text(project_root: string, checks: Dict[]): void {
|
|
3192
|
+
if (!checks.some((c) => c['id'] === 'detection')) {
|
|
3193
|
+
return;
|
|
3194
|
+
}
|
|
3195
|
+
for (const line of renderDetectionLines(_detection_report(project_root))) {
|
|
3196
|
+
print(line);
|
|
3197
|
+
}
|
|
3198
|
+
print('');
|
|
3199
|
+
}
|
|
3200
|
+
|
|
2930
3201
|
function _emit_text(
|
|
2931
3202
|
project_root: string,
|
|
2932
3203
|
missing: Dict[],
|
|
@@ -3229,6 +3500,7 @@ function main(argv: string[] | null = null): number {
|
|
|
3229
3500
|
print(` 📍 project_root: ${project_root} (origin: ${origin})`);
|
|
3230
3501
|
}
|
|
3231
3502
|
_emit_checks_text(checks);
|
|
3503
|
+
_emit_detection_text(project_root, checks);
|
|
3232
3504
|
if (opts.check === null) {
|
|
3233
3505
|
_emit_text(project_root, missing, modified, foreign, tag_drift);
|
|
3234
3506
|
}
|
|
@@ -3308,11 +3580,16 @@ export {
|
|
|
3308
3580
|
_check_offline_readiness,
|
|
3309
3581
|
_check_stale_orphans,
|
|
3310
3582
|
_check_rule_scope_drift,
|
|
3583
|
+
_check_duplicate_scope_rules,
|
|
3311
3584
|
_check_python_runtime,
|
|
3312
3585
|
_check_humanizer_runtime,
|
|
3313
3586
|
_check_mcp_beta_readiness,
|
|
3314
3587
|
_check_tier_usage_readiness,
|
|
3315
3588
|
_check_council_cli,
|
|
3589
|
+
_check_detection,
|
|
3590
|
+
_detection_report,
|
|
3591
|
+
_read_council_facts,
|
|
3592
|
+
_reset_detection_memo,
|
|
3316
3593
|
_check_team,
|
|
3317
3594
|
_check_unsupported_combos,
|
|
3318
3595
|
_check_wizard_state,
|
|
@@ -44,6 +44,7 @@ import * as os from 'node:os';
|
|
|
44
44
|
import * as path from 'node:path';
|
|
45
45
|
import * as crypto from 'node:crypto';
|
|
46
46
|
import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
47
|
+
import { resolvePackageRoot } from '../_lib/package_root.js';
|
|
47
48
|
|
|
48
49
|
import {
|
|
49
50
|
AIDER_MARKER,
|
|
@@ -57,7 +58,7 @@ import {
|
|
|
57
58
|
ZED_MARKER,
|
|
58
59
|
} from '../install.js';
|
|
59
60
|
|
|
60
|
-
const PACKAGE_ROOT =
|
|
61
|
+
const PACKAGE_ROOT = resolvePackageRoot(import.meta.url);
|
|
61
62
|
const TEMPLATES_DIR = path.join(PACKAGE_ROOT, 'dist/agent-src', 'templates');
|
|
62
63
|
|
|
63
64
|
// ---------------------------------------------------------------------------
|
|
@@ -32,9 +32,10 @@ import * as YAML from 'yaml';
|
|
|
32
32
|
|
|
33
33
|
import { runPreflight, hasBlockingFinding, type PreflightFinding } from '../../install/preflight.js';
|
|
34
34
|
import type { ConflictPolicy } from '../../install/types.js';
|
|
35
|
+
import { resolvePackageRoot } from '../_lib/package_root.js';
|
|
35
36
|
|
|
36
37
|
const _HERE = fileURLToPath(import.meta.url);
|
|
37
|
-
const PACKAGE_ROOT =
|
|
38
|
+
const PACKAGE_ROOT = resolvePackageRoot(import.meta.url);
|
|
38
39
|
|
|
39
40
|
/** One fleet target, parsed from `fleet.yaml`. */
|
|
40
41
|
export interface FleetRepo {
|
|
@@ -75,6 +75,7 @@ import process from 'node:process';
|
|
|
75
75
|
import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
76
76
|
|
|
77
77
|
import { resolve_project_root } from '../_lib/agent_settings.js';
|
|
78
|
+
import { resolvePackageRoot } from '../_lib/package_root.js';
|
|
78
79
|
// NOTE: the v0→v1 migrator is NOT statically imported. It lives in the
|
|
79
80
|
// consumer-shipped work_engine template, which ships as `.ts` (run via tsx),
|
|
80
81
|
// while this CLI is compiled to `dist/cli/*.js` and run under plain `node` in
|
|
@@ -521,7 +522,7 @@ function _load_state_migrator(): StateMigrator | null {
|
|
|
521
522
|
// Locate the shipped v0→v1 migration driver (`.ts`). Prefer the shipped
|
|
522
523
|
// `dist/` tree; fall back to the dev `src/` tree. A stripped install with
|
|
523
524
|
// no engine yields `null` (Python ImportError parity).
|
|
524
|
-
const pkg_root =
|
|
525
|
+
const pkg_root = resolvePackageRoot(import.meta.url);
|
|
525
526
|
const rel = path.join(
|
|
526
527
|
'agent-src', 'templates', 'scripts', 'work_engine', 'migration', 'v0_to_v1.ts',
|
|
527
528
|
);
|
|
@@ -28,11 +28,12 @@ import {
|
|
|
28
28
|
} from '../../install/preflight.js';
|
|
29
29
|
import { GLOBAL_DEPLOY_SOURCES, expandWizardSources } from '../../install/wizard-plan.js';
|
|
30
30
|
import type { ConflictPolicy } from '../../install/types.js';
|
|
31
|
+
import { resolvePackageRoot } from '../_lib/package_root.js';
|
|
31
32
|
|
|
32
33
|
const _HERE = fileURLToPath(import.meta.url);
|
|
33
34
|
|
|
34
35
|
/** Package root — three levels above `src/scripts/_cli/`. */
|
|
35
|
-
const PACKAGE_ROOT =
|
|
36
|
+
const PACKAGE_ROOT = resolvePackageRoot(import.meta.url);
|
|
36
37
|
|
|
37
38
|
const USAGE =
|
|
38
39
|
'usage: cmd_preflight [-h] [--tools a,b,...] [--target DIR] [--json]\n';
|
|
@@ -69,8 +69,9 @@ import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
|
69
69
|
import * as cli_wrapper from '../_lib/cli_wrapper.js';
|
|
70
70
|
import * as sync_gitignore from '../sync_gitignore.js';
|
|
71
71
|
import * as sync_gitattributes from '../sync_gitattributes.js';
|
|
72
|
+
import { resolvePackageRoot } from '../_lib/package_root.js';
|
|
72
73
|
|
|
73
|
-
const PACKAGE_ROOT =
|
|
74
|
+
const PACKAGE_ROOT = resolvePackageRoot(import.meta.url);
|
|
74
75
|
|
|
75
76
|
// ---------------------------------------------------------------------------
|
|
76
77
|
// Parity primitives (ADR-200).
|
|
@@ -67,6 +67,7 @@ import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
|
67
67
|
|
|
68
68
|
import * as installed_lock from '../_lib/installed_lock.js';
|
|
69
69
|
import * as update_check from '../_lib/update_check.js';
|
|
70
|
+
import { resolvePackageRoot } from '../_lib/package_root.js';
|
|
70
71
|
import {
|
|
71
72
|
DEFAULT_PROJECT_FILE,
|
|
72
73
|
LOCAL_PROJECT_FILE,
|
|
@@ -550,7 +551,7 @@ function _refresh_global_lockfile(version: string, out: OutSink): void {
|
|
|
550
551
|
|
|
551
552
|
/** Read `version` from the package's own `package.json`. */
|
|
552
553
|
function _detect_installed_version(): string {
|
|
553
|
-
const pkg_json = path.join(
|
|
554
|
+
const pkg_json = path.join(resolvePackageRoot(import.meta.url), 'package.json');
|
|
554
555
|
try {
|
|
555
556
|
const data = JSON.parse(fs.readFileSync(pkg_json, { encoding: 'utf-8' })) as Record<
|
|
556
557
|
string,
|
|
@@ -93,9 +93,10 @@ import * as claude_plugin from '../_lib/claude_plugin.js';
|
|
|
93
93
|
import { event4u_root, write_target } from '../_lib/user_global_paths.js';
|
|
94
94
|
import { project_settings_path } from '../_lib/agent_settings.js';
|
|
95
95
|
import { _is_source_repo } from './cmd_refresh.js';
|
|
96
|
+
import { resolvePackageRoot } from '../_lib/package_root.js';
|
|
96
97
|
|
|
97
98
|
const PACKAGE_NAME = '@event4u/agent-config';
|
|
98
|
-
const PACKAGE_ROOT =
|
|
99
|
+
const PACKAGE_ROOT = resolvePackageRoot(import.meta.url);
|
|
99
100
|
|
|
100
101
|
// ---------------------------------------------------------------------------
|
|
101
102
|
// Parity primitives (ADR-200).
|
|
@@ -47,6 +47,7 @@ import { spawnSync } from 'node:child_process';
|
|
|
47
47
|
import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
48
48
|
|
|
49
49
|
import { project_settings_path, resolve_project_root } from '../_lib/agent_settings.js';
|
|
50
|
+
import { resolvePackageRoot } from '../_lib/package_root.js';
|
|
50
51
|
|
|
51
52
|
const PACKAGE_NAME = '@event4u/agent-config';
|
|
52
53
|
|
|
@@ -171,7 +172,7 @@ function _project_root(): string {
|
|
|
171
172
|
/** Return `version` from the local `package.json`, or `""` if absent. */
|
|
172
173
|
function _local_package_version(): string {
|
|
173
174
|
const candidates = [
|
|
174
|
-
path.join(
|
|
175
|
+
path.join(resolvePackageRoot(import.meta.url), 'package.json'),
|
|
175
176
|
path.join(_project_root(), 'package.json'),
|
|
176
177
|
];
|
|
177
178
|
for (const p of candidates) {
|