@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
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Scan-scope assertions — "a gate that read nothing did not pass".
|
|
3
|
+
*
|
|
4
|
+
* WHY THIS EXISTS (audit 2026-07-29, `agents/settings/contexts/gates-that-cannot-fail.md`):
|
|
5
|
+
* ADR-051 moved the source container and a later commit deleted `packages/`.
|
|
6
|
+
* Fourteen `lint_*`/`check_*` gates kept a hardcoded literal path, and every
|
|
7
|
+
* one of them treats a missing directory as "nothing to check" — so they exit 0
|
|
8
|
+
* and print a green checkmark while scanning zero files. Their own output said
|
|
9
|
+
* so (`0 file(s) scanned`, `0 name(s) checked`, `0 declarer(s)`); nothing ever
|
|
10
|
+
* asserted on the number.
|
|
11
|
+
*
|
|
12
|
+
* Two shapes cover the whole class:
|
|
13
|
+
*
|
|
14
|
+
* - **Corpus gates** walk a root and check N units → {@link assertScanned}.
|
|
15
|
+
* Zero units is a failure unless the gate declares a justified `allowEmpty`.
|
|
16
|
+
* - **Watch-list gates** (diff-based, no corpus to count) name specific files
|
|
17
|
+
* they guard → {@link assertWatchlistResolves}. A watch list that resolves to
|
|
18
|
+
* nothing on disk means the guard is watching phantoms.
|
|
19
|
+
*
|
|
20
|
+
* Both throw {@link DeadScopeError}; callers map it to a non-zero exit. The
|
|
21
|
+
* point is that the failure is LOUD and names the root, so the next path
|
|
22
|
+
* migration cannot silently disarm a gate again.
|
|
23
|
+
*/
|
|
24
|
+
import * as fs from 'node:fs';
|
|
25
|
+
import * as path from 'node:path';
|
|
26
|
+
|
|
27
|
+
/** Raised when a gate's scope is empty — it cannot have checked anything. */
|
|
28
|
+
export class DeadScopeError extends Error {
|
|
29
|
+
readonly gate: string;
|
|
30
|
+
|
|
31
|
+
constructor(gate: string, message: string) {
|
|
32
|
+
super(message);
|
|
33
|
+
this.name = 'DeadScopeError';
|
|
34
|
+
this.gate = gate;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export interface ScannedOptions {
|
|
39
|
+
/** Gate name, for the error message (e.g. `lint_namespace`). */
|
|
40
|
+
gate: string;
|
|
41
|
+
/** How many units the gate actually examined. */
|
|
42
|
+
scanned: number;
|
|
43
|
+
/** Plural noun for the unit — `file(s)`, `name(s)`, `declarer(s)`. */
|
|
44
|
+
units: string;
|
|
45
|
+
/** The root(s) the gate walked, repo-relative, for the error message. */
|
|
46
|
+
roots: readonly string[];
|
|
47
|
+
/**
|
|
48
|
+
* Justification for legitimately scanning zero. Supply ONLY when an empty
|
|
49
|
+
* corpus is a real, expected state (an optional consumer surface that may
|
|
50
|
+
* genuinely be absent) — never to silence a moved root. The string is the
|
|
51
|
+
* reason and is printed, so it is reviewable in a diff.
|
|
52
|
+
*/
|
|
53
|
+
allowEmpty?: string;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Assert a corpus gate examined at least one unit.
|
|
58
|
+
*
|
|
59
|
+
* @throws {DeadScopeError} when `scanned === 0` and no `allowEmpty` reason is given.
|
|
60
|
+
*/
|
|
61
|
+
export function assertScanned(opts: ScannedOptions): void {
|
|
62
|
+
if (opts.scanned > 0) {
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
if (opts.allowEmpty !== undefined && opts.allowEmpty.trim() !== '') {
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
const roots = opts.roots.length > 0 ? opts.roots.join(', ') : '(no root declared)';
|
|
69
|
+
throw new DeadScopeError(
|
|
70
|
+
opts.gate,
|
|
71
|
+
`${opts.gate}: scanned 0 ${opts.units} under ${roots} — the scan scope is ` +
|
|
72
|
+
'dead or the root moved. A gate that read nothing has not passed. ' +
|
|
73
|
+
'Repoint the root (prefer the shared resolver in _lib/agent_src.ts), ' +
|
|
74
|
+
'or declare a justified `allowEmpty` reason if an empty corpus is genuinely expected.',
|
|
75
|
+
);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
export interface WatchlistOptions {
|
|
79
|
+
/** Gate name, for the error message. */
|
|
80
|
+
gate: string;
|
|
81
|
+
/** Repo-relative candidate paths the gate guards. */
|
|
82
|
+
candidates: readonly string[];
|
|
83
|
+
/** Absolute repo root the candidates resolve against. */
|
|
84
|
+
repoRoot: string;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Assert a watch-list gate's targets exist on disk, and return the ones that do.
|
|
89
|
+
*
|
|
90
|
+
* A diff-based guard has no corpus to count: it compares changed paths against
|
|
91
|
+
* a fixed list. If that list resolves to nothing, the guard reports "clean"
|
|
92
|
+
* forever — the exact shape of the `check_safety_floor_untouched` defect, which
|
|
93
|
+
* announced `4 rules guarded` while guarding none.
|
|
94
|
+
*
|
|
95
|
+
* @returns the subset of `candidates` that exist.
|
|
96
|
+
* @throws {DeadScopeError} when none of them exist.
|
|
97
|
+
*/
|
|
98
|
+
export function assertWatchlistResolves(opts: WatchlistOptions): string[] {
|
|
99
|
+
const resolved = opts.candidates.filter((rel) => {
|
|
100
|
+
try {
|
|
101
|
+
return fs.statSync(path.join(opts.repoRoot, rel)).isFile();
|
|
102
|
+
} catch {
|
|
103
|
+
return false;
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
if (resolved.length === 0) {
|
|
107
|
+
throw new DeadScopeError(
|
|
108
|
+
opts.gate,
|
|
109
|
+
`${opts.gate}: none of its ${opts.candidates.length} guarded path(s) exist ` +
|
|
110
|
+
`under ${opts.repoRoot} — the guard is watching phantoms and can never fire. ` +
|
|
111
|
+
`Checked: ${opts.candidates.join(', ')}`,
|
|
112
|
+
);
|
|
113
|
+
}
|
|
114
|
+
return resolved;
|
|
115
|
+
}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The global user-memory audit render — Phase 4 of road-to-global-user-memory
|
|
3
|
+
* ("delete, revoke, audit"). Renders what the GLOBAL layer currently holds —
|
|
4
|
+
* `~/.event4u/agent-config/user/profile.md` and its `observations.jsonl`
|
|
5
|
+
* buffer — without requiring a human to open raw JSONL. This is the global
|
|
6
|
+
* layer only, not the merged effective profile `/agents user show` already
|
|
7
|
+
* renders (project-local `.agent-user.md` never leaves the project it lives
|
|
8
|
+
* in, so it has nothing to audit at this layer).
|
|
9
|
+
*
|
|
10
|
+
* Every free-text value that ever originated from a buffered observation or
|
|
11
|
+
* a profile field — `suggest`, `evidence`, `project_name`, a profile field's
|
|
12
|
+
* string value, a tombstone's `reason` — is routed through the SAME
|
|
13
|
+
* `knowledge_global_redaction.redaction_scan` gate the write path already
|
|
14
|
+
* runs (Phase 2's `evaluateCaptureGuards` /
|
|
15
|
+
* `evaluateContextCaptureGuards`) before it may appear in the rendered
|
|
16
|
+
* output. That gate's `project_path` category already flags absolute-path
|
|
17
|
+
* shapes (`/Users/`, `/home/`, `/opt/`, `/private/`, a configured
|
|
18
|
+
* `repo_root`) in free text, so a stray path mentioned inside an
|
|
19
|
+
* observation's own `suggest`/`evidence` text is caught the same way a
|
|
20
|
+
* credential or an email would be — this module never needs a second path
|
|
21
|
+
* detector. The only path-shaped strings this render ever emits verbatim
|
|
22
|
+
* are the two canonical, tool-owned storage locations (`profilePath`,
|
|
23
|
+
* `bufferPath`) it resolves itself — never a value that came from
|
|
24
|
+
* user-authored or agent-authored content. `context.project_path` (a raw
|
|
25
|
+
* project directory, one of the fields road-to-global-user-memory Phase 3
|
|
26
|
+
* flagged as a narrower-but-real metadata surface) is never read by this
|
|
27
|
+
* module at all — only `context.project_name` (already a basename) ever
|
|
28
|
+
* reaches the render, and it still passes the same scan.
|
|
29
|
+
*
|
|
30
|
+
* Pure, read-only. Never writes to `profile.md`, the buffer, or the
|
|
31
|
+
* revocation ledger.
|
|
32
|
+
*/
|
|
33
|
+
import { redaction_scan } from './knowledge_global_redaction.js';
|
|
34
|
+
import {
|
|
35
|
+
getPath,
|
|
36
|
+
loadGlobalProfileLayer,
|
|
37
|
+
mergeUserProfileLayers,
|
|
38
|
+
resolveGlobalProfilePath,
|
|
39
|
+
} from './agent_user_profile.js';
|
|
40
|
+
import * as revocations from './user_global_revocations.js';
|
|
41
|
+
import {
|
|
42
|
+
ALLOWED_OBSERVATION_FIELDS,
|
|
43
|
+
findPromotionCandidates,
|
|
44
|
+
readGlobalObservations,
|
|
45
|
+
resolveGlobalObservationsPath,
|
|
46
|
+
} from './user_global_observations.js';
|
|
47
|
+
import type { ObservationField } from './user_global_observations.js';
|
|
48
|
+
import type * as user_global_paths from './user_global_paths.js';
|
|
49
|
+
|
|
50
|
+
const REDACTED_MARKER = '[redacted]';
|
|
51
|
+
|
|
52
|
+
/** `true` when `text` fails the write-path redaction gate — the sole criterion for masking a render value. */
|
|
53
|
+
function _isClean(text: string): boolean {
|
|
54
|
+
return redaction_scan(text).length === 0;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/** Redact `text` if it fails the same gate the write path already runs; pass through unchanged otherwise. */
|
|
58
|
+
function _safe(text: string): string {
|
|
59
|
+
return _isClean(text) ? text : REDACTED_MARKER;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/** Render a parsed profile leaf value (string, string[], or other scalar) as a redaction-checked display string. */
|
|
63
|
+
function _renderFieldValue(value: unknown): string {
|
|
64
|
+
if (Array.isArray(value)) {
|
|
65
|
+
return _safe(value.map((v) => String(v)).join(', '));
|
|
66
|
+
}
|
|
67
|
+
return _safe(String(value));
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export interface AuditProfileField {
|
|
71
|
+
readonly path: string;
|
|
72
|
+
readonly value: string;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
export interface AuditBufferFieldCount {
|
|
76
|
+
readonly field: string;
|
|
77
|
+
readonly count: number;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
export interface AuditPromotionCandidate {
|
|
81
|
+
readonly suggest: string;
|
|
82
|
+
readonly seenCount: number;
|
|
83
|
+
readonly projects: readonly string[];
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
export interface GlobalMemoryAuditRender {
|
|
87
|
+
readonly profilePath: string | null;
|
|
88
|
+
readonly profileExists: boolean;
|
|
89
|
+
readonly profileLastUpdated: string | undefined;
|
|
90
|
+
readonly profileFields: readonly AuditProfileField[];
|
|
91
|
+
readonly bufferPath: string | null;
|
|
92
|
+
readonly bufferEntryCount: number;
|
|
93
|
+
readonly bufferFieldCounts: readonly AuditBufferFieldCount[];
|
|
94
|
+
readonly promotionCandidates: readonly AuditPromotionCandidate[];
|
|
95
|
+
readonly revocationCount: number;
|
|
96
|
+
/** Pre-formatted, print-ready block — every value already passed the redaction gate above. */
|
|
97
|
+
readonly text: string;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Build the audit render for the global layer. `env` is honoured exactly
|
|
102
|
+
* like every other global-artefact reader (`$EVENT4U_CONFIG_HOME`, the
|
|
103
|
+
* legacy `~/.config/agent-config/` fallback) — tests MUST inject it rather
|
|
104
|
+
* than touch the real `~/.event4u/`.
|
|
105
|
+
*/
|
|
106
|
+
export function renderGlobalMemoryAudit(
|
|
107
|
+
options: { env?: user_global_paths.EnvMap | null } = {},
|
|
108
|
+
): GlobalMemoryAuditRender {
|
|
109
|
+
const env = options.env ?? null;
|
|
110
|
+
|
|
111
|
+
const profileLayer = loadGlobalProfileLayer(env);
|
|
112
|
+
const merged = mergeUserProfileLayers(profileLayer, null);
|
|
113
|
+
const profilePath = resolveGlobalProfilePath(env);
|
|
114
|
+
const profileFields: AuditProfileField[] = Object.keys(merged.sources)
|
|
115
|
+
.sort()
|
|
116
|
+
.map((dottedPath) => ({
|
|
117
|
+
path: dottedPath,
|
|
118
|
+
value: _renderFieldValue(getPath(merged.profile, dottedPath.split('.'))),
|
|
119
|
+
}));
|
|
120
|
+
const profileLastUpdated =
|
|
121
|
+
typeof profileLayer?.data.last_updated === 'string' ? profileLayer.data.last_updated : undefined;
|
|
122
|
+
|
|
123
|
+
const bufferPath = resolveGlobalObservationsPath(env);
|
|
124
|
+
const { entries } = readGlobalObservations({ env });
|
|
125
|
+
const fieldCounts = new Map<ObservationField, number>();
|
|
126
|
+
for (const entry of entries) {
|
|
127
|
+
if ((ALLOWED_OBSERVATION_FIELDS as readonly string[]).includes(entry.field)) {
|
|
128
|
+
const field = entry.field as ObservationField;
|
|
129
|
+
fieldCounts.set(field, (fieldCounts.get(field) ?? 0) + 1);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
const bufferFieldCounts: AuditBufferFieldCount[] = [...fieldCounts.entries()]
|
|
133
|
+
.sort(([a], [b]) => a.localeCompare(b))
|
|
134
|
+
.map(([field, count]) => ({ field, count }));
|
|
135
|
+
|
|
136
|
+
const promotionCandidates: AuditPromotionCandidate[] = findPromotionCandidates(entries).map((c) => ({
|
|
137
|
+
suggest: _safe(c.observation.suggest),
|
|
138
|
+
seenCount: c.seenCount,
|
|
139
|
+
projects: c.projects.map((p) => _safe(p)),
|
|
140
|
+
}));
|
|
141
|
+
|
|
142
|
+
const revocationCount = revocations.loadTombstones(env).length;
|
|
143
|
+
|
|
144
|
+
const lines: string[] = [];
|
|
145
|
+
lines.push('Global user-memory audit');
|
|
146
|
+
lines.push('');
|
|
147
|
+
lines.push(`Profile: ${profilePath ?? '(none — no observation has been accepted yet)'}`);
|
|
148
|
+
if (profileFields.length === 0) {
|
|
149
|
+
lines.push(' (no fields set)');
|
|
150
|
+
} else {
|
|
151
|
+
for (const field of profileFields) {
|
|
152
|
+
lines.push(` ${field.path}: ${field.value}`);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
if (profileLastUpdated !== undefined) {
|
|
156
|
+
lines.push(` last_updated: ${profileLastUpdated}`);
|
|
157
|
+
}
|
|
158
|
+
lines.push('');
|
|
159
|
+
lines.push(`Buffer: ${bufferPath ?? '(none — no observation has been buffered yet)'} (${entries.length} entries)`);
|
|
160
|
+
if (bufferFieldCounts.length === 0) {
|
|
161
|
+
lines.push(' (empty)');
|
|
162
|
+
} else {
|
|
163
|
+
for (const fc of bufferFieldCounts) {
|
|
164
|
+
lines.push(` ${fc.field}: ${fc.count}×`);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
lines.push('');
|
|
168
|
+
lines.push(`Promotion candidates (seen_count ≥ 3): ${promotionCandidates.length}`);
|
|
169
|
+
for (const candidate of promotionCandidates) {
|
|
170
|
+
lines.push(` "${candidate.suggest}" — seen in ${candidate.seenCount} projects (${candidate.projects.join(', ')})`);
|
|
171
|
+
}
|
|
172
|
+
lines.push('');
|
|
173
|
+
lines.push(`Revocation ledger: ${revocationCount} tombstone(s)`);
|
|
174
|
+
|
|
175
|
+
return {
|
|
176
|
+
profilePath,
|
|
177
|
+
profileExists: profileLayer !== null,
|
|
178
|
+
profileLastUpdated,
|
|
179
|
+
profileFields,
|
|
180
|
+
bufferPath,
|
|
181
|
+
bufferEntryCount: entries.length,
|
|
182
|
+
bufferFieldCounts,
|
|
183
|
+
promotionCandidates,
|
|
184
|
+
revocationCount,
|
|
185
|
+
text: lines.join('\n'),
|
|
186
|
+
};
|
|
187
|
+
}
|