@event4u/agent-config 9.9.0 → 9.10.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.
Files changed (384) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/CHANGELOG.md +153 -194
  3. package/README.md +1 -1
  4. package/dist/agent-src/commands/agent-status.md +12 -11
  5. package/dist/agent-src/commands/agents/user/accept.md +115 -30
  6. package/dist/agent-src/commands/agents/user/delete.md +147 -0
  7. package/dist/agent-src/commands/agents/user/review.md +65 -28
  8. package/dist/agent-src/commands/agents/user/show.md +82 -29
  9. package/dist/agent-src/commands/agents/user/update.md +2 -2
  10. package/dist/agent-src/commands/agents/user.md +16 -3
  11. package/dist/agent-src/commands/check-current-md.md +0 -10
  12. package/dist/agent-src/commands/condense.md +28 -97
  13. package/dist/agent-src/commands/cost/report.md +7 -0
  14. package/dist/agent-src/commands/fix/portability.md +0 -8
  15. package/dist/agent-src/commands/fix/refs.md +0 -8
  16. package/dist/agent-src/commands/humanize.md +2 -2
  17. package/dist/agent-src/commands/jira-ticket.md +1 -1
  18. package/dist/agent-src/commands/memory/load.md +11 -0
  19. package/dist/agent-src/commands/optimize/skills.md +1 -1
  20. package/dist/agent-src/commands/pr/create.md +4 -4
  21. package/dist/agent-src/commands/profile/show.md +3 -3
  22. package/dist/agent-src/commands/rule-compliance-audit.md +5 -4
  23. package/dist/agent-src/commands/security-audit-config.md +1 -1
  24. package/dist/agent-src/commands/sync/gitignore/fix.md +1 -1
  25. package/dist/agent-src/commands/tdd.md +21 -0
  26. package/dist/agent-src/commands/team/delegate.md +2 -2
  27. package/dist/agent-src/commands/team-knowledge/bootstrap.md +9 -8
  28. package/dist/agent-src/commands/team-knowledge/consolidate.md +8 -7
  29. package/dist/agent-src/commands/team.md +4 -1
  30. package/dist/agent-src/commands/upstream-contribute.md +0 -1
  31. package/dist/agent-src/contexts/authority/commit-mechanics.md +7 -0
  32. package/dist/agent-src/contexts/authority/destructive-mechanics.md +16 -0
  33. package/dist/agent-src/contexts/authority/scope-mechanics.md +61 -0
  34. package/dist/agent-src/contexts/communication/rules-auto/reply-close-mechanics.md +20 -18
  35. package/dist/agent-src/contexts/communication/rules-auto/skill-quality-mechanics.md +1 -1
  36. package/dist/agent-src/contexts/communication/rules-auto/slash-command-routing-policy-mechanics.md +1 -1
  37. package/dist/agent-src/contexts/communication/rules-auto/source-of-truth-mechanics.md +9 -10
  38. package/dist/agent-src/contexts/communication/rules-auto/think-before-action-mechanics.md +1 -1
  39. package/dist/agent-src/contexts/communication/rules-auto/user-interaction-mechanics.md +11 -0
  40. package/dist/agent-src/contexts/contracts/artifact-engagement-flow.md +26 -15
  41. package/dist/agent-src/contexts/contracts/command-suggestion-flow.md +3 -0
  42. package/dist/agent-src/contexts/execution/auto-dispatch-classification.md +67 -37
  43. package/dist/agent-src/contexts/execution/auto-orchestration-activation.md +1 -1
  44. package/dist/agent-src/contexts/execution/autonomy-examples.md +1 -1
  45. package/dist/agent-src/contexts/execution/autonomy-mechanics.md +7 -6
  46. package/dist/agent-src/contexts/execution/evidence-discipline.md +92 -77
  47. package/dist/agent-src/contexts/execution/orchestration-benchmark-gate.md +22 -21
  48. package/dist/agent-src/contexts/execution/orchestration-telemetry.md +24 -0
  49. package/dist/agent-src/contexts/execution/project-intelligence.md +122 -103
  50. package/dist/agent-src/contexts/execution/roadmap-execution-contract.md +23 -21
  51. package/dist/agent-src/contexts/execution/subagent-response-contract.md +5 -5
  52. package/dist/agent-src/contexts/execution/subagent-routing.md +11 -0
  53. package/dist/agent-src/contexts/execution/subagent-spawn-contract.md +13 -13
  54. package/dist/agent-src/contexts/execution/subagent-steering.md +36 -34
  55. package/dist/agent-src/contexts/execution/toolchain-resolver.md +1 -1
  56. package/dist/agent-src/contexts/execution/user-memory-channels.md +189 -0
  57. package/dist/agent-src/contexts/execution/verification-mechanics.md +9 -0
  58. package/dist/agent-src/contexts/model-recommendations.md +3 -2
  59. package/dist/agent-src/contexts/subagent-configuration.md +3 -3
  60. package/dist/agent-src/ghostwriter/README.md +2 -2
  61. package/dist/agent-src/packs/README.md +1 -1
  62. package/dist/agent-src/personas/README.md +5 -5
  63. package/dist/agent-src/personas/_template-specialist/persona.md +3 -3
  64. package/dist/agent-src/personas/backend-architect.md +24 -23
  65. package/dist/agent-src/personas/eloquent-tamer.md +30 -30
  66. package/dist/agent-src/personas/frontend-engineer.md +30 -30
  67. package/dist/agent-src/personas/product-owner.md +41 -38
  68. package/dist/agent-src/personas/qa.md +13 -13
  69. package/dist/agent-src/personas/security-engineer.md +22 -22
  70. package/dist/agent-src/presets/README.md +3 -3
  71. package/dist/agent-src/profiles/README.md +3 -3
  72. package/dist/agent-src/rules/active-remediation.md +2 -2
  73. package/dist/agent-src/rules/artifact-engagement-recording.md +4 -4
  74. package/dist/agent-src/rules/ask-when-uncertain.md +0 -4
  75. package/dist/agent-src/rules/augment-edit-discipline.md +1 -1
  76. package/dist/agent-src/rules/broken-access-control.md +4 -4
  77. package/dist/agent-src/rules/code-comment-discipline.md +1 -1
  78. package/dist/agent-src/rules/code-provenance.md +2 -2
  79. package/dist/agent-src/rules/commit-policy.md +4 -9
  80. package/dist/agent-src/rules/communication-through-line.md +5 -5
  81. package/dist/agent-src/rules/decision-revisit-gate.md +1 -1
  82. package/dist/agent-src/rules/doc-screenshot-hygiene.md +1 -1
  83. package/dist/agent-src/rules/domain-adoption-policy.md +1 -1
  84. package/dist/agent-src/rules/domain-safety-pii.md +1 -1
  85. package/dist/agent-src/rules/external-code-graph-interop.md +1 -1
  86. package/dist/agent-src/rules/fast-path-marker-visibility.md +43 -7
  87. package/dist/agent-src/rules/finance-safety-floor.md +1 -1
  88. package/dist/agent-src/rules/framework-neutrality-in-generic-skills.md +3 -3
  89. package/dist/agent-src/rules/history-discipline.md +1 -1
  90. package/dist/agent-src/rules/legal-safety-floor.md +1 -1
  91. package/dist/agent-src/rules/lethal-trifecta-guard.md +5 -5
  92. package/dist/agent-src/rules/low-impact-corpus-privacy-floor.md +10 -8
  93. package/dist/agent-src/rules/media-governance-routing.md +13 -13
  94. package/dist/agent-src/rules/media-sync-ground-truth.md +29 -11
  95. package/dist/agent-src/rules/no-cheap-questions.md +7 -7
  96. package/dist/agent-src/rules/no-decorative-emojis-in-git-surfaces.md +29 -18
  97. package/dist/agent-src/rules/non-destructive-by-default.md +5 -23
  98. package/dist/agent-src/rules/onboarding-gate.md +14 -4
  99. package/dist/agent-src/rules/persona-governance.md +2 -2
  100. package/dist/agent-src/rules/prefer-enums-over-literals.md +9 -9
  101. package/dist/agent-src/rules/preservation-guard.md +10 -2
  102. package/dist/agent-src/rules/question-not-instruction.md +1 -1
  103. package/dist/agent-src/rules/roadmap-progress-sync.md +6 -6
  104. package/dist/agent-src/rules/rule-type-governance.md +1 -1
  105. package/dist/agent-src/rules/scale-discipline.md +1 -1
  106. package/dist/agent-src/rules/scope-control.md +1 -1
  107. package/dist/agent-src/rules/secret-vcs-guard.md +1 -1
  108. package/dist/agent-src/rules/security-sensitive-stop.md +17 -11
  109. package/dist/agent-src/rules/senior-engineering-discipline.md +17 -17
  110. package/dist/agent-src/rules/session-canary.md +1 -1
  111. package/dist/agent-src/rules/skill-quality.md +1 -1
  112. package/dist/agent-src/rules/source-confidentiality.md +21 -19
  113. package/dist/agent-src/rules/source-of-truth.md +6 -5
  114. package/dist/agent-src/rules/spreadsheet-source-quality.md +2 -2
  115. package/dist/agent-src/rules/strategy-safety-floor.md +1 -1
  116. package/dist/agent-src/rules/think-before-action.md +5 -5
  117. package/dist/agent-src/rules/token-budget-discipline.md +5 -3
  118. package/dist/agent-src/rules/token-efficiency.md +2 -2
  119. package/dist/agent-src/rules/untrusted-input-defense.md +4 -4
  120. package/dist/agent-src/rules/user-interaction.md +12 -0
  121. package/dist/agent-src/rules/verify-before-complete.md +4 -24
  122. package/dist/agent-src/skills/adversarial-review/SKILL.md +2 -2
  123. package/dist/agent-src/skills/agent-security-review/SKILL.md +52 -45
  124. package/dist/agent-src/skills/agents-md-thin-root/SKILL.md +2 -2
  125. package/dist/agent-src/skills/ai-code-blindspots/SKILL.md +20 -20
  126. package/dist/agent-src/skills/ai-council/SKILL.md +185 -128
  127. package/dist/agent-src/skills/analysis-skill-router/SKILL.md +3 -3
  128. package/dist/agent-src/skills/api-endpoint/SKILL.md +2 -2
  129. package/dist/agent-src/skills/artisan-commands/SKILL.md +2 -2
  130. package/dist/agent-src/skills/async-python-patterns/SKILL.md +8 -7
  131. package/dist/agent-src/skills/authz-review/SKILL.md +16 -15
  132. package/dist/agent-src/skills/aws-infrastructure/SKILL.md +5 -5
  133. package/dist/agent-src/skills/blade-ui/SKILL.md +1 -1
  134. package/dist/agent-src/skills/bug-analyzer/SKILL.md +30 -12
  135. package/dist/agent-src/skills/code-intelligence/SKILL.md +0 -1
  136. package/dist/agent-src/skills/code-intelligence/evals/triggers.json +52 -0
  137. package/dist/agent-src/skills/code-review/SKILL.md +6 -6
  138. package/dist/agent-src/skills/command-routing/SKILL.md +5 -4
  139. package/dist/agent-src/skills/composer-packages/SKILL.md +2 -2
  140. package/dist/agent-src/skills/condense-memory/SKILL.md +43 -41
  141. package/dist/agent-src/skills/context-document/SKILL.md +23 -21
  142. package/dist/agent-src/skills/copilot-config/SKILL.md +6 -1
  143. package/dist/agent-src/skills/decision-record/SKILL.md +20 -18
  144. package/dist/agent-src/skills/design-intelligence/SKILL.md +4 -4
  145. package/dist/agent-src/skills/design-review/SKILL.md +15 -14
  146. package/dist/agent-src/skills/design-system-capture/reference/design-system-json.md +28 -25
  147. package/dist/agent-src/skills/devcontainer/SKILL.md +2 -2
  148. package/dist/agent-src/skills/docker/SKILL.md +1 -1
  149. package/dist/agent-src/skills/docx-authoring/evals/triggers.json +52 -0
  150. package/dist/agent-src/skills/emit-tickets/SKILL.md +2 -2
  151. package/dist/agent-src/skills/error-handling-patterns/SKILL.md +1 -1
  152. package/dist/agent-src/skills/estimate-ticket/SKILL.md +2 -2
  153. package/dist/agent-src/skills/evaluate-llm-feature/SKILL.md +0 -1
  154. package/dist/agent-src/skills/evaluate-llm-feature/evals/triggers.json +52 -0
  155. package/dist/agent-src/skills/existing-ui-audit/SKILL.md +6 -5
  156. package/dist/agent-src/skills/feature-planning/SKILL.md +2 -2
  157. package/dist/agent-src/skills/finishing-a-development-branch/SKILL.md +3 -3
  158. package/dist/agent-src/skills/flux/SKILL.md +1 -1
  159. package/dist/agent-src/skills/frontend-render-security/SKILL.md +13 -13
  160. package/dist/agent-src/skills/git-workflow/SKILL.md +33 -33
  161. package/dist/agent-src/skills/grafana/SKILL.md +5 -0
  162. package/dist/agent-src/skills/humanizer/SKILL.md +83 -66
  163. package/dist/agent-src/skills/humanizer/data/patterns.md +14 -14
  164. package/dist/agent-src/skills/humanizer/references/anti-aiisms.md +4 -4
  165. package/dist/agent-src/skills/judge-artifact-completeness/SKILL.md +82 -37
  166. package/dist/agent-src/skills/judge-bug-hunter/SKILL.md +17 -5
  167. package/dist/agent-src/skills/judge-injection-defense/SKILL.md +63 -25
  168. package/dist/agent-src/skills/judge-security-auditor/SKILL.md +2 -0
  169. package/dist/agent-src/skills/judge-synthesis/SKILL.md +72 -28
  170. package/dist/agent-src/skills/laravel-horizon/SKILL.md +5 -0
  171. package/dist/agent-src/skills/laravel-mail/SKILL.md +5 -4
  172. package/dist/agent-src/skills/laravel-middleware/SKILL.md +5 -4
  173. package/dist/agent-src/skills/laravel-notifications/SKILL.md +10 -9
  174. package/dist/agent-src/skills/laravel-pennant/SKILL.md +1 -1
  175. package/dist/agent-src/skills/laravel-pulse/SKILL.md +9 -8
  176. package/dist/agent-src/skills/laravel-reverb/SKILL.md +6 -5
  177. package/dist/agent-src/skills/laravel-scheduling/SKILL.md +6 -1
  178. package/dist/agent-src/skills/laravel-validation/SKILL.md +12 -0
  179. package/dist/agent-src/skills/launch-readiness/SKILL.md +1 -1
  180. package/dist/agent-src/skills/learning-to-rule-or-skill/SKILL.md +7 -7
  181. package/dist/agent-src/skills/learning-tutor/SKILL.md +44 -43
  182. package/dist/agent-src/skills/learning-tutor/evals/triggers.json +52 -0
  183. package/dist/agent-src/skills/license-compliance-audit/SKILL.md +7 -7
  184. package/dist/agent-src/skills/license-compliance-borrow-check/SKILL.md +3 -3
  185. package/dist/agent-src/skills/license-compliance-credits/SKILL.md +4 -4
  186. package/dist/agent-src/skills/llm-provider-knowledge/SKILL.md +0 -1
  187. package/dist/agent-src/skills/memory-consolidation/SKILL.md +69 -64
  188. package/dist/agent-src/skills/motion-choreographer/SKILL.md +6 -6
  189. package/dist/agent-src/skills/pdf-tools/evals/triggers.json +52 -0
  190. package/dist/agent-src/skills/performance-analysis/SKILL.md +7 -3
  191. package/dist/agent-src/skills/persona-improvement/SKILL.md +0 -2
  192. package/dist/agent-src/skills/persona-improvement/evals/triggers.json +52 -0
  193. package/dist/agent-src/skills/php-coder/SKILL.md +10 -0
  194. package/dist/agent-src/skills/prediction-pool-optimizer/SKILL.md +129 -120
  195. package/dist/agent-src/skills/prediction-pool-optimizer/reference/ev-fixtures.md +36 -35
  196. package/dist/agent-src/skills/prediction-pool-optimizer/reference/odds-and-bonus.md +45 -41
  197. package/dist/agent-src/skills/project-analysis-core/SKILL.md +4 -4
  198. package/dist/agent-src/skills/project-analysis-hypothesis-driven/SKILL.md +3 -3
  199. package/dist/agent-src/skills/project-analysis-react/SKILL.md +1 -1
  200. package/dist/agent-src/skills/project-analysis-symfony/SKILL.md +1 -1
  201. package/dist/agent-src/skills/project-analysis-zend-laminas/SKILL.md +2 -2
  202. package/dist/agent-src/skills/prompt-engineering-patterns/SKILL.md +1 -1
  203. package/dist/agent-src/skills/prompt-validator/SKILL.md +39 -39
  204. package/dist/agent-src/skills/quality-tools/SKILL.md +15 -15
  205. package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +55 -19
  206. package/dist/agent-src/skills/react-shadcn-ui/reference/registry.md +29 -27
  207. package/dist/agent-src/skills/readme-writing-package/SKILL.md +2 -2
  208. package/dist/agent-src/skills/reasoning-orchestrator/SKILL.md +25 -25
  209. package/dist/agent-src/skills/recursive-verification/SKILL.md +6 -5
  210. package/dist/agent-src/skills/refine-prompt/SKILL.md +1 -1
  211. package/dist/agent-src/skills/refine-ticket/SKILL.md +20 -2
  212. package/dist/agent-src/skills/repomix-packer/SKILL.md +1 -1
  213. package/dist/agent-src/skills/requesting-code-review/SKILL.md +2 -2
  214. package/dist/agent-src/skills/roadmap-management/SKILL.md +80 -66
  215. package/dist/agent-src/skills/roadmap-writing/SKILL.md +84 -77
  216. package/dist/agent-src/skills/rule-refactor/SKILL.md +1 -1
  217. package/dist/agent-src/skills/screenshot-hygiene/evals/triggers.json +52 -0
  218. package/dist/agent-src/skills/security-audit/SKILL.md +26 -9
  219. package/dist/agent-src/skills/security-maturity-assessment/SKILL.md +38 -16
  220. package/dist/agent-src/skills/skill-improvement-pipeline/SKILL.md +14 -11
  221. package/dist/agent-src/skills/skill-writing/SKILL.md +9 -8
  222. package/dist/agent-src/skills/song-to-script/SKILL.md +93 -85
  223. package/dist/agent-src/skills/sql-writing/SKILL.md +2 -2
  224. package/dist/agent-src/skills/stakeholder-tradeoff/SKILL.md +4 -3
  225. package/dist/agent-src/skills/standards-from-config/SKILL.md +61 -43
  226. package/dist/agent-src/skills/subagent-orchestration/SKILL.md +22 -8
  227. package/dist/agent-src/skills/subagent-orchestration/prompts/README.md +28 -2
  228. package/dist/agent-src/skills/supply-chain-intake/SKILL.md +13 -13
  229. package/dist/agent-src/skills/systematic-debugging/SKILL.md +22 -21
  230. package/dist/agent-src/skills/tailwind-engineer/SKILL.md +1 -1
  231. package/dist/agent-src/skills/technical-specification/SKILL.md +5 -0
  232. package/dist/agent-src/skills/terraform/SKILL.md +2 -2
  233. package/dist/agent-src/skills/terragrunt/SKILL.md +8 -8
  234. package/dist/agent-src/skills/testing-anti-patterns/process-anti-patterns.md +1 -1
  235. package/dist/agent-src/skills/threat-modeling/SKILL.md +19 -13
  236. package/dist/agent-src/skills/universal-project-analysis/SKILL.md +1 -1
  237. package/dist/agent-src/skills/upstream-contribute/SKILL.md +0 -1
  238. package/dist/agent-src/skills/using-git-worktrees/SKILL.md +9 -9
  239. package/dist/agent-src/skills/validate-feature-fit/SKILL.md +3 -1
  240. package/dist/agent-src/skills/verify-completion-evidence/SKILL.md +4 -6
  241. package/dist/agent-src/skills/verify-repair-loop/SKILL.md +67 -61
  242. package/dist/agent-src/skills/video-director/SKILL.md +7 -7
  243. package/dist/agent-src/skills/worktree-lifecycle/SKILL.md +3 -3
  244. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  245. package/dist/agent-src/templates/contexts/knowledge-pages.md +47 -45
  246. package/dist/agent-src/templates/contexts/lesson-card.md +2 -2
  247. package/dist/agent-src/templates/contexts/tenant-boundaries.md +2 -2
  248. package/dist/agent-src/templates/contexts.md +1 -1
  249. package/dist/agent-src/templates/features.md +1 -1
  250. package/dist/agent-src/templates/roadmaps.md +125 -116
  251. package/dist/agent-src/templates/rule.md +2 -1
  252. package/dist/agent-src/templates/scripts/pr_risk_review.ts +0 -0
  253. package/dist/agent-src/templates/scripts/telemetry/aggregator.ts +0 -0
  254. package/dist/agent-src/templates/scripts/tier_usage_report.ts +2 -2
  255. package/dist/agent-src/templates/scripts/work_engine/directives/ui/polish.ts +2 -2
  256. package/dist/agent-src/templates/scripts/work_engine/directives/ui/review.ts +1 -1
  257. package/dist/agent-src/user-types/README.md +8 -8
  258. package/dist/agent-src/user-types/galabau-field-crew.md +34 -33
  259. package/dist/agent-src/user-types/metalworking-shop.md +35 -34
  260. package/dist/agent-src/user-types/truck-driver.md +22 -20
  261. package/dist/cli/python/workspace_roles.js +2 -2
  262. package/dist/cli/python/workspace_roles.js.map +1 -1
  263. package/dist/discovery/deprecation-report.md +1 -1
  264. package/dist/discovery/discovery-manifest.json +88 -62
  265. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  266. package/dist/discovery/discovery-manifest.summary.md +3 -3
  267. package/dist/discovery/orphan-report.md +1 -1
  268. package/dist/discovery/packs.json +6 -5
  269. package/dist/discovery/trust-report.md +2 -2
  270. package/dist/discovery/workspaces.json +5 -4
  271. package/dist/hooks/dispatch.js +186 -12
  272. package/dist/install/install.mjs +8 -0
  273. package/dist/mcp/registry-manifest.json +3 -3
  274. package/dist/mcp/server.json +2 -2
  275. package/dist/mcp/server.mjs +1199 -857
  276. package/dist/router.json +1 -1
  277. package/dist/scripts/_lib/compile_time_toggles.js +48 -0
  278. package/dist/scripts/_lib/compile_time_toggles.js.map +1 -0
  279. package/dist/scripts/condense.js +234 -217
  280. package/dist/scripts/condense.js.map +1 -1
  281. package/dist/server/schemas/settings.js +4 -0
  282. package/dist/server/schemas/settings.js.map +1 -1
  283. package/dist/shared/userMd/utils.js +30 -0
  284. package/dist/shared/userMd/utils.js.map +1 -1
  285. package/dist/ui/assets/index-BpSQt5vm.js.map +1 -1
  286. package/docs/guidelines/agent-infra/api-cost-levers.md +56 -5
  287. package/docs/guidelines/agent-infra/simplicity-and-goal-demos.md +93 -33
  288. package/package.json +1 -1
  289. package/src/agent-src/templates/scripts/pr_risk_review.ts +0 -0
  290. package/src/agent-src/templates/scripts/telemetry/aggregator.ts +0 -0
  291. package/src/agent-src/templates/scripts/tier_usage_report.ts +2 -2
  292. package/src/agent-src/templates/scripts/work_engine/directives/ui/polish.ts +2 -2
  293. package/src/agent-src/templates/scripts/work_engine/directives/ui/review.ts +1 -1
  294. package/src/config/agent-settings.template.yml +32 -2
  295. package/src/config/ci-local-parity.yml +142 -0
  296. package/src/config/gate-coverage.yml +127 -0
  297. package/src/config/preamble-payload-budget.json +44 -0
  298. package/src/scripts/_cli/cmd_doctor.ts +78 -2
  299. package/src/scripts/_lib/agent_user_profile.ts +381 -0
  300. package/src/scripts/_lib/agents_overlay.ts +9 -0
  301. package/src/scripts/_lib/anchor_eval.ts +311 -0
  302. package/src/scripts/_lib/cc_transcript.ts +316 -0
  303. package/src/scripts/_lib/compile_time_toggles.ts +79 -0
  304. package/src/scripts/_lib/confusables.ts +101 -0
  305. package/src/scripts/_lib/duplicate_scope_census.ts +77 -0
  306. package/src/scripts/_lib/managed_agents_folder.ts +181 -0
  307. package/src/scripts/_lib/payload_hash_drift.ts +126 -0
  308. package/src/scripts/_lib/preservation_migration.ts +291 -0
  309. package/src/scripts/_lib/retrieval_sanitize.ts +166 -2
  310. package/src/scripts/_lib/scan_scope.ts +115 -0
  311. package/src/scripts/_lib/user_global_memory_audit.ts +187 -0
  312. package/src/scripts/_lib/user_global_observations.ts +830 -0
  313. package/src/scripts/_lib/user_global_revocations.ts +110 -0
  314. package/src/scripts/_lib/user_memory_gate_counters.ts +291 -0
  315. package/src/scripts/ai_council/blind_review.ts +0 -0
  316. package/src/scripts/ai_council/budget_guard.ts +90 -11
  317. package/src/scripts/ai_council/bundler.ts +2 -2
  318. package/src/scripts/ai_council/clients.ts +59 -3
  319. package/src/scripts/ai_council/config.ts +38 -0
  320. package/src/scripts/ai_council/orchestrator.ts +54 -9
  321. package/src/scripts/ai_team/team_dispatch.ts +17 -6
  322. package/src/scripts/anchor_eval_falsify.ts +198 -0
  323. package/src/scripts/anchor_scoring_run.ts +239 -0
  324. package/src/scripts/annotate_discovery.ts +1 -65
  325. package/src/scripts/bench_quality_run.ts +168 -4
  326. package/src/scripts/cache_realization_report.ts +782 -0
  327. package/src/scripts/check_artefact_count_messaging.ts +5 -1
  328. package/src/scripts/check_augment_description_cap.ts +15 -4
  329. package/src/scripts/check_ci_local_parity.ts +317 -0
  330. package/src/scripts/check_condensation.ts +96 -191
  331. package/src/scripts/check_context_paths.ts +38 -9
  332. package/src/scripts/check_gate_coverage.ts +299 -0
  333. package/src/scripts/check_iron_law_prominence.ts +22 -1
  334. package/src/scripts/check_kernel_prefix_stability.ts +0 -0
  335. package/src/scripts/check_no_new_legacy_path.ts +16 -6
  336. package/src/scripts/check_no_roadmap_refs.ts +22 -9
  337. package/src/scripts/check_originality_freshness.ts +167 -0
  338. package/src/scripts/check_preamble_payload_budget.ts +130 -0
  339. package/src/scripts/check_proposal.ts +0 -0
  340. package/src/scripts/check_references.ts +0 -1
  341. package/src/scripts/check_safety_floor_untouched.ts +171 -24
  342. package/src/scripts/check_site_links.ts +62 -3
  343. package/src/scripts/ci_status.ts +0 -0
  344. package/src/scripts/cluster_near_miss_patterns.ts +0 -0
  345. package/src/scripts/code_graph/build.ts +0 -0
  346. package/src/scripts/command_suggester/types.ts +0 -0
  347. package/src/scripts/compile_router.ts +10 -14
  348. package/src/scripts/condense.sh +3 -4
  349. package/src/scripts/condense.ts +247 -228
  350. package/src/scripts/cost/track.mjs +168 -33
  351. package/src/scripts/cost_summary.ts +33 -1
  352. package/src/scripts/council_cli.ts +45 -3
  353. package/src/scripts/discovery_graph.ts +0 -0
  354. package/src/scripts/encoding_corpus.ts +500 -0
  355. package/src/scripts/encoding_corpus_report.ts +216 -0
  356. package/src/scripts/generate_index.ts +19 -2
  357. package/src/scripts/install-hooks.sh +2 -2
  358. package/src/scripts/learning_sidecar.ts +0 -0
  359. package/src/scripts/lint_confusables.ts +10 -72
  360. package/src/scripts/lint_featured_skills.ts +0 -0
  361. package/src/scripts/lint_hidden_unicode.ts +208 -0
  362. package/src/scripts/lint_load_context.ts +17 -5
  363. package/src/scripts/lint_new_skill_gate.ts +9 -3
  364. package/src/scripts/lint_no_python_twin_rationale.ts +17 -2
  365. package/src/scripts/lint_originality.ts +1 -1
  366. package/src/scripts/lint_skill_originality.ts +1 -1
  367. package/src/scripts/lint_ticket_buildable.ts +1 -1
  368. package/src/scripts/mcp_server/tools.ts +4 -4
  369. package/src/scripts/measure_scope_dedup.ts +224 -0
  370. package/src/scripts/memory_lookup.ts +0 -0
  371. package/src/scripts/mine_session.ts +98 -0
  372. package/src/scripts/orchestration_payload_hash_drift.ts +145 -0
  373. package/src/scripts/preamble_byte_census.ts +574 -0
  374. package/src/scripts/probe_skill_registration.ts +2 -2
  375. package/src/scripts/redact_hook_capture.ts +13 -0
  376. package/src/scripts/release.ts +65 -10
  377. package/src/scripts/router_telemetry.ts +1 -1
  378. package/src/scripts/second_brain_retrieval.ts +14 -4
  379. package/src/scripts/skill_linter.ts +5 -0
  380. package/src/scripts/surface-tiers.yml +2 -0
  381. package/src/scripts/validate_pack_yaml.ts +0 -0
  382. package/src/server/schemas/settings.ts +8 -0
  383. package/src/shared/userMd/utils.ts +31 -0
  384. package/dist/agent-src/rules/telegraph-speak.md +0 -87
@@ -0,0 +1,381 @@
1
+ #!/usr/bin/env tsx
2
+ /**
3
+ * Two-layer cascade for the user-persona profile (ADR-138,
4
+ * road-to-global-user-memory Phase 1 — read path only).
5
+ *
6
+ * Layers, weakest first:
7
+ *
8
+ * 1. Global — `~/.event4u/agent-config/user/profile.md` (this package's
9
+ * vendor-namespaced root; `$EVENT4U_CONFIG_HOME` override honoured,
10
+ * legacy `~/.config/agent-config/` read as a fallback — see
11
+ * `user_global_paths.ts`).
12
+ * 2. Project — `.agent-user.md` at the project root (unchanged; the sole
13
+ * layer before this phase — see `docs/contracts/agent-user-schema.md`).
14
+ *
15
+ * Merge rule: the authoring discipline is DISJOINT FIELDS (global owns
16
+ * durable identity/style, project owns project-specific addenda). The
17
+ * mechanism for when a field is declared in both anyway is
18
+ * PRIMITIVE-LEVEL DEEPEST-WINS — the project value replaces the global
19
+ * value outright, never an object/array merge. `notes` is the one
20
+ * exception: both layers' text is concatenated under `[global]` /
21
+ * `[project]` markers so neither voice is dropped.
22
+ *
23
+ * The 100-line cap (`docs/contracts/agent-user-schema.md`) applies PER
24
+ * LAYER, never as a shared total — a shared cap would force deleting
25
+ * global identity to make room for project context.
26
+ *
27
+ * Parsing reuses `parseLegacyUserMd` from `shared/userMd/utils.ts` — the
28
+ * same fenced-frontmatter-plus-body parser the wizard's legacy-read path
29
+ * already uses for `.agent-user.md`, so both layers are read identically.
30
+ *
31
+ * Pure, read-only. Never writes, never creates directories.
32
+ */
33
+ import * as fs from 'node:fs';
34
+ import * as path from 'node:path';
35
+
36
+ import { composeLegacyUserMd, parseLegacyUserMd } from '../../shared/userMd/utils.js';
37
+ import * as revocations from './user_global_revocations.js';
38
+ import type { RevocationEntry } from './user_global_revocations.js';
39
+ import * as user_global_paths from './user_global_paths.js';
40
+ import { recordObservationAccepted } from './user_memory_gate_counters.js';
41
+
42
+ /** Relative-to-root path of the global profile (weakest layer). */
43
+ export const GLOBAL_PROFILE_RELATIVE = path.join('user', 'profile.md');
44
+
45
+ /** Hard cap, enforced per layer independently (see module docstring). */
46
+ export const USER_PROFILE_LINE_CAP = 100;
47
+
48
+ export type ProfileSource = 'global' | 'project';
49
+
50
+ export interface UserProfileLayer {
51
+ source: ProfileSource;
52
+ path: string;
53
+ raw: string;
54
+ data: Record<string, unknown>;
55
+ lineCount: number;
56
+ overCap: boolean;
57
+ }
58
+
59
+ export interface MergedUserProfile {
60
+ /** Merged plain object — only the fields a layer actually declared. */
61
+ profile: Record<string, unknown>;
62
+ /** Dotted-path -> which layer supplied the value (`identity.name`, `style.pace`, ...). */
63
+ sources: Record<string, ProfileSource>;
64
+ /** One entry per layer that exceeds `USER_PROFILE_LINE_CAP`; empty when both are within cap. */
65
+ capWarnings: string[];
66
+ }
67
+
68
+ /**
69
+ * Leaf field paths the cascade resolves individually. `notes` is handled
70
+ * separately (concatenation, not override) and is deliberately absent here.
71
+ */
72
+ const KNOWN_LEAF_PATHS: readonly (readonly string[])[] = [
73
+ ['identity', 'name'],
74
+ ['identity', 'nickname'],
75
+ ['language'],
76
+ ['role'],
77
+ ['style', 'pace'],
78
+ ['voice_sample'],
79
+ ['last_updated'],
80
+ ];
81
+
82
+ /** Canonical write target for the global profile (Phase 2 writes here; Phase 1 only reads). */
83
+ export function globalProfileWriteTarget(env?: user_global_paths.EnvMap | null): string {
84
+ return user_global_paths.write_target(GLOBAL_PROFILE_RELATIVE, { env: env ?? null });
85
+ }
86
+
87
+ /** Resolve the global profile's on-disk path — new namespace first, legacy fallback, `null` if neither exists. */
88
+ export function resolveGlobalProfilePath(env?: user_global_paths.EnvMap | null): string | null {
89
+ return user_global_paths.resolve_with_fallback(GLOBAL_PROFILE_RELATIVE, { env: env ?? null });
90
+ }
91
+
92
+ /** Count lines the same way the schema's 100-line cap is defined: whole-file, `\r\n` normalized. */
93
+ export function countLines(body: string): number {
94
+ const normalized = body.replace(/\r\n/g, '\n');
95
+ return normalized === '' ? 0 : normalized.split('\n').length;
96
+ }
97
+
98
+ /** Read + parse a single layer file. Returns `null` when the file does not exist. */
99
+ export function loadProfileLayer(filePath: string, source: ProfileSource): UserProfileLayer | null {
100
+ let raw: string;
101
+ try {
102
+ raw = fs.readFileSync(filePath, 'utf-8');
103
+ } catch {
104
+ return null;
105
+ }
106
+ const lineCount = countLines(raw);
107
+ return {
108
+ source,
109
+ path: filePath,
110
+ raw,
111
+ data: parseLegacyUserMd(raw),
112
+ lineCount,
113
+ overCap: lineCount > USER_PROFILE_LINE_CAP,
114
+ };
115
+ }
116
+
117
+ /** Load the global (weakest) layer, honouring the new-namespace/legacy-fallback resolution order. */
118
+ export function loadGlobalProfileLayer(env?: user_global_paths.EnvMap | null): UserProfileLayer | null {
119
+ const resolved = resolveGlobalProfilePath(env);
120
+ return resolved === null ? null : loadProfileLayer(resolved, 'global');
121
+ }
122
+
123
+ /** Load the project (deepest) layer — `.agent-user.md` directly under `projectRoot`. */
124
+ export function loadProjectProfileLayer(projectRoot: string): UserProfileLayer | null {
125
+ return loadProfileLayer(path.join(projectRoot, '.agent-user.md'), 'project');
126
+ }
127
+
128
+ /** Read a dotted leaf path out of a parsed profile object. Exported for the Phase 4 audit render (`user_global_memory_audit.ts`), which enumerates `mergeUserProfileLayers`' `sources` keys back into values. */
129
+ export function getPath(obj: Record<string, unknown> | undefined, keys: readonly string[]): unknown {
130
+ let cur: unknown = obj;
131
+ for (const key of keys) {
132
+ if (cur === null || typeof cur !== 'object') return undefined;
133
+ cur = (cur as Record<string, unknown>)[key];
134
+ }
135
+ return cur;
136
+ }
137
+
138
+ export function setPath(obj: Record<string, unknown>, keys: readonly string[], value: unknown): void {
139
+ let cur = obj;
140
+ for (let i = 0; i < keys.length - 1; i += 1) {
141
+ const key = keys[i] as string;
142
+ const next = cur[key];
143
+ if (typeof next !== 'object' || next === null) {
144
+ cur[key] = {};
145
+ }
146
+ cur = cur[key] as Record<string, unknown>;
147
+ }
148
+ cur[keys[keys.length - 1] as string] = value;
149
+ }
150
+
151
+ /** Concatenate `# Notes` bodies with `[global]` / `[project]` markers — only when BOTH sides carry text. */
152
+ function mergeNotes(globalNotes: string | undefined, projectNotes: string | undefined): string | undefined {
153
+ const g = globalNotes?.trim();
154
+ const p = projectNotes?.trim();
155
+ if (g && p) {
156
+ return `[global]\n${g}\n\n[project]\n${p}`;
157
+ }
158
+ return p || g || undefined;
159
+ }
160
+
161
+ /**
162
+ * Merge two already-loaded layers per the deepest-wins rule above.
163
+ * Either layer may be `null` (file absent) — the "neither" case returns an
164
+ * empty profile so the existing "agent uses generic address forms"
165
+ * fallback keeps working unchanged.
166
+ */
167
+ export function mergeUserProfileLayers(
168
+ global: UserProfileLayer | null,
169
+ project: UserProfileLayer | null,
170
+ ): MergedUserProfile {
171
+ const profile: Record<string, unknown> = {};
172
+ const sources: Record<string, ProfileSource> = {};
173
+
174
+ for (const leafPath of KNOWN_LEAF_PATHS) {
175
+ const globalValue = global ? getPath(global.data, leafPath) : undefined;
176
+ const projectValue = project ? getPath(project.data, leafPath) : undefined;
177
+ if (projectValue !== undefined) {
178
+ setPath(profile, leafPath, projectValue);
179
+ sources[leafPath.join('.')] = 'project';
180
+ } else if (globalValue !== undefined) {
181
+ setPath(profile, leafPath, globalValue);
182
+ sources[leafPath.join('.')] = 'global';
183
+ }
184
+ }
185
+
186
+ const globalNotes = typeof global?.data.notes === 'string' ? global.data.notes : undefined;
187
+ const projectNotes = typeof project?.data.notes === 'string' ? project.data.notes : undefined;
188
+ const mergedNotes = mergeNotes(globalNotes, projectNotes);
189
+ if (mergedNotes !== undefined) {
190
+ profile.notes = mergedNotes;
191
+ // Provenance for `notes` is "both" whenever concatenation actually
192
+ // happened; a single-layer note keeps that layer's provenance.
193
+ sources.notes = globalNotes && projectNotes ? 'project' : project ? 'project' : 'global';
194
+ }
195
+
196
+ const capWarnings: string[] = [];
197
+ if (global?.overCap) {
198
+ capWarnings.push(
199
+ `global profile exceeds ${USER_PROFILE_LINE_CAP}-line cap (${global.lineCount} lines): ${global.path}`,
200
+ );
201
+ }
202
+ if (project?.overCap) {
203
+ capWarnings.push(
204
+ `project profile exceeds ${USER_PROFILE_LINE_CAP}-line cap (${project.lineCount} lines): ${project.path}`,
205
+ );
206
+ }
207
+
208
+ return { profile, sources, capWarnings };
209
+ }
210
+
211
+ /** Load both layers for `projectRoot` and merge them — the one call sites need. */
212
+ export function loadEffectiveUserProfile(
213
+ projectRoot: string,
214
+ env?: user_global_paths.EnvMap | null,
215
+ ): MergedUserProfile {
216
+ const global = loadGlobalProfileLayer(env);
217
+ const project = loadProjectProfileLayer(projectRoot);
218
+ return mergeUserProfileLayers(global, project);
219
+ }
220
+
221
+ // ---------------------------------------------------------------------------
222
+ // Write path (road-to-global-user-memory Phase 2) — the learning channel's
223
+ // ONLY writer of `profile.md`. Everything upstream of this function
224
+ // (`user_global_observations.ts`'s buffer, `/agents:user review`) only ever
225
+ // proposes; this is the human-gated `accept` step's write primitive. No
226
+ // other function in this module, and no function in
227
+ // `user_global_observations.ts`, ever touches `profile.md`.
228
+ // ---------------------------------------------------------------------------
229
+
230
+ /** Leaf path a `field` string from the observation-buffer schema resolves to (`'notes'` is top-level, never nested). */
231
+ function fieldToLeafPath(field: string): readonly string[] {
232
+ return field === 'notes' ? ['notes'] : field.split('.');
233
+ }
234
+
235
+ export interface ApplyObservationResult {
236
+ /** Absolute path written. */
237
+ readonly path: string;
238
+ /** Line count of the file AFTER the write (already validated ≤ the cap). */
239
+ readonly lineCount: number;
240
+ }
241
+
242
+ /**
243
+ * Apply one accepted observation to the global `profile.md`, bump
244
+ * `last_updated`, and enforce the per-layer 100-line cap. The ONLY function
245
+ * in this module (or in `user_global_observations.ts`) that writes
246
+ * `profile.md` — everything else in the learning channel only reads or
247
+ * proposes. Called exclusively from the human-confirmed
248
+ * `/agents:user accept` step; never invoked automatically.
249
+ *
250
+ * Preserves every field the file already declares (round-trips through
251
+ * `parseLegacyUserMd` / `composeLegacyUserMd`) except the one field being
252
+ * set and `last_updated`. Throws rather than writing when the result would
253
+ * exceed the cap — the caller is expected to surface that as a rollback,
254
+ * matching `/agents:user accept`'s "any violation → roll back and print the
255
+ * error" contract.
256
+ */
257
+ export function applyObservationToGlobalProfile(
258
+ field: string,
259
+ value: unknown,
260
+ options: { env?: user_global_paths.EnvMap | null; today?: string } = {},
261
+ ): ApplyObservationResult {
262
+ const target = globalProfileWriteTarget(options.env ?? null);
263
+ let raw = '';
264
+ try {
265
+ raw = fs.readFileSync(target, 'utf-8');
266
+ } catch {
267
+ raw = '';
268
+ }
269
+ const data = raw === '' ? {} : parseLegacyUserMd(raw);
270
+
271
+ setPath(data, fieldToLeafPath(field), value);
272
+ if (data.version === undefined) {
273
+ data.version = 1;
274
+ }
275
+ data.last_updated = options.today ?? new Date().toISOString().slice(0, 10);
276
+
277
+ const serialized = composeLegacyUserMd(data);
278
+ const lineCount = countLines(serialized);
279
+ if (lineCount > USER_PROFILE_LINE_CAP) {
280
+ throw new Error(
281
+ `applying '${field}' would grow the global profile to ${lineCount} lines, ` +
282
+ `exceeding the ${USER_PROFILE_LINE_CAP}-line-per-layer cap — write refused`,
283
+ );
284
+ }
285
+
286
+ fs.mkdirSync(path.dirname(target), { recursive: true });
287
+ fs.writeFileSync(target, serialized, 'utf-8');
288
+ // Phase 5 gate: the accept count is what makes the kill-criterion able to
289
+ // fire, so it increments where the accept actually lands — not at the
290
+ // command layer, which a caller could bypass. Counter failures never fail
291
+ // the accept: the profile write already succeeded and is the user's data.
292
+ try {
293
+ recordObservationAccepted({ env: options.env ?? null });
294
+ } catch {
295
+ /* a counter is telemetry, never a gate on the user's own write */
296
+ }
297
+ return { path: target, lineCount };
298
+ }
299
+
300
+ // ---------------------------------------------------------------------------
301
+ // Phase 4 (road-to-global-user-memory) — delete, revoke, audit. Delete
302
+ // counterpart of `applyObservationToGlobalProfile` above: this module
303
+ // remains the ONLY writer (now also the only revoker) of `profile.md`.
304
+ // ---------------------------------------------------------------------------
305
+
306
+ /** Unset a dotted leaf path, pruning an emptied parent object so a revoked `identity.name` does not leave a dangling `identity: {}` behind. */
307
+ function _deletePath(obj: Record<string, unknown>, keys: readonly string[]): void {
308
+ if (keys.length === 0) {
309
+ return;
310
+ }
311
+ const [head, ...rest] = keys as [string, ...string[]];
312
+ if (rest.length === 0) {
313
+ delete obj[head];
314
+ return;
315
+ }
316
+ const child = obj[head];
317
+ if (typeof child !== 'object' || child === null || Array.isArray(child)) {
318
+ return;
319
+ }
320
+ _deletePath(child as Record<string, unknown>, rest);
321
+ if (Object.keys(child as Record<string, unknown>).length === 0) {
322
+ delete obj[head];
323
+ }
324
+ }
325
+
326
+ export interface RevokeProfileFieldResult {
327
+ /** `false` when the field had no value in `profile.md` to revoke (no tombstone written, no file touched). */
328
+ readonly revoked: boolean;
329
+ readonly tombstone?: RevocationEntry | undefined;
330
+ /** Absolute path of the global profile that was (or would have been) rewritten. */
331
+ readonly path: string;
332
+ }
333
+
334
+ /**
335
+ * Revoke (delete) one field's value from the global `profile.md` — the
336
+ * delete counterpart of `applyObservationToGlobalProfile`, covering BOTH the
337
+ * plain-accept write and the Phase 3 promotion write (promotion calls the
338
+ * same function, so one revoke path covers both). Writes an append-only
339
+ * tombstone to `user_global_revocations.ts`'s ledger BEFORE the file is
340
+ * rewritten without the field — reusing ADR-121's tombstone-before-deletion
341
+ * discipline exactly as `user_global_observations.ts`'s
342
+ * `deleteGlobalObservation` does for the buffer.
343
+ *
344
+ * A profile field has no natural content-derived id the way a buffered
345
+ * observation or a knowledge card does — it is a fixed YAML key in a
346
+ * closed enum — so the tombstone's `entity_id` is simply `profile:<field>`,
347
+ * human-readable and stable across revokes of the same field.
348
+ *
349
+ * Never invoked automatically; the matching `/agents user delete` step
350
+ * requires the same explicit human confirmation `accept` requires to write.
351
+ */
352
+ export function revokeGlobalProfileField(
353
+ field: string,
354
+ reason: string,
355
+ options: { env?: user_global_paths.EnvMap | null; today?: string } = {},
356
+ ): RevokeProfileFieldResult {
357
+ const target = globalProfileWriteTarget(options.env ?? null);
358
+ let raw: string;
359
+ try {
360
+ raw = fs.readFileSync(target, 'utf-8');
361
+ } catch {
362
+ return { revoked: false, path: target };
363
+ }
364
+ const data = parseLegacyUserMd(raw);
365
+ const leafPath = fieldToLeafPath(field);
366
+ if (getPath(data, leafPath) === undefined) {
367
+ return { revoked: false, path: target };
368
+ }
369
+
370
+ const tombstone = revocations.appendTombstone(`profile:${field}`, reason, {
371
+ today: options.today,
372
+ env: options.env ?? null,
373
+ });
374
+
375
+ _deletePath(data, leafPath);
376
+ data.last_updated = options.today ?? new Date().toISOString().slice(0, 10);
377
+ const serialized = composeLegacyUserMd(data);
378
+ fs.mkdirSync(path.dirname(target), { recursive: true });
379
+ fs.writeFileSync(target, serialized, 'utf-8');
380
+ return { revoked: true, tombstone, path: target };
381
+ }
@@ -60,6 +60,15 @@ export const CASCADE_ELIGIBLE_KINDS: ReadonlySet<string> = new Set([
60
60
  * layer (`~/.event4u/agent-config/agents/<kind>/`). `contexts/` and
61
61
  * `decisions/` are project-shaped and must not leak across projects;
62
62
  * only `overrides/` — the developer's personal layer — is whitelisted.
63
+ *
64
+ * Unrelated to the global USER-PROFILE layer added by ADR-138
65
+ * (`~/.event4u/agent-config/user/profile.md`, resolved by
66
+ * `agent_user_profile.ts`): that file is not an `agents/<kind>/<name>.md`
67
+ * overlay, so it does not extend this set. Read this comment as
68
+ * confirmation that ADR-138 is a *different* mechanism, not evidence
69
+ * that the `contexts/`/`decisions/` asymmetry above has been relaxed —
70
+ * it hasn't; that lock is unamended (see the global-user-memory council
71
+ * cut, `agents/settings/contexts/global-user-memory-cut.md`).
63
72
  */
64
73
  export const USER_GLOBAL_OVERLAY_KINDS: ReadonlySet<string> = new Set(['overrides']);
65
74