@event4u/agent-config 9.7.0 → 9.9.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 (901) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/CHANGELOG.md +314 -190
  3. package/CONTRIBUTING.md +23 -7
  4. package/MIGRATION.md +20 -0
  5. package/README.md +57 -11
  6. package/dist/agent-src/commands/agents/audit.md +1 -1
  7. package/dist/agent-src/commands/agents/optimize.md +2 -2
  8. package/dist/agent-src/commands/agents/user.md +1 -1
  9. package/dist/agent-src/commands/agents.md +1 -1
  10. package/dist/agent-src/commands/check-current-md.md +3 -3
  11. package/dist/agent-src/commands/commit/in-chunks.md +8 -0
  12. package/dist/agent-src/commands/commit.md +17 -0
  13. package/dist/agent-src/commands/fix/portability.md +2 -2
  14. package/dist/agent-src/commands/fix/pr-comments-loop.md +136 -0
  15. package/dist/agent-src/commands/fix/refs.md +2 -2
  16. package/dist/agent-src/commands/fix/route.md +4 -3
  17. package/dist/agent-src/commands/fix.md +9 -6
  18. package/dist/agent-src/commands/ghostwriter.md +1 -1
  19. package/dist/agent-src/commands/image.md +1 -1
  20. package/dist/agent-src/commands/optimize/augmentignore.md +1 -1
  21. package/dist/agent-src/commands/optimize/skills.md +2 -2
  22. package/dist/agent-src/commands/post-as.md +1 -1
  23. package/dist/agent-src/commands/pr/create.md +4 -0
  24. package/dist/agent-src/commands/research.md +1 -1
  25. package/dist/agent-src/commands/roadmap/ai-council.md +1 -1
  26. package/dist/agent-src/commands/security-audit-config.md +1 -1
  27. package/dist/agent-src/commands/team/delegate.md +4 -0
  28. package/dist/agent-src/commands/video.md +1 -1
  29. package/dist/agent-src/contexts/authority/kernel-rule-edits.md +1 -1
  30. package/dist/agent-src/contexts/contracts/emergency-triage-block.md +2 -2
  31. package/dist/agent-src/contexts/execution/auto-dispatch-classification.md +48 -2
  32. package/dist/agent-src/contexts/execution/orchestration-telemetry.md +10 -0
  33. package/dist/agent-src/contexts/execution/subagent-modes-detail.md +109 -8
  34. package/dist/agent-src/contexts/execution/subagent-response-contract.md +20 -0
  35. package/dist/agent-src/contexts/execution/subagent-spawn-contract.md +53 -3
  36. package/dist/agent-src/contexts/override-system.md +75 -5
  37. package/dist/agent-src/rules/code-provenance.md +112 -0
  38. package/dist/agent-src/rules/context-hygiene.md +2 -0
  39. package/dist/agent-src/rules/doc-screenshot-hygiene.md +97 -0
  40. package/dist/agent-src/rules/domain-safety-pii.md +1 -0
  41. package/dist/agent-src/rules/external-code-graph-interop.md +13 -3
  42. package/dist/agent-src/rules/framework-neutrality-in-generic-skills.md +2 -0
  43. package/dist/agent-src/rules/git-history-discipline.md +2 -0
  44. package/dist/agent-src/rules/history-discipline.md +80 -0
  45. package/dist/agent-src/rules/language-and-tone.md +2 -0
  46. package/dist/agent-src/rules/lethal-trifecta-guard.md +3 -0
  47. package/dist/agent-src/rules/media-governance-routing.md +2 -0
  48. package/dist/agent-src/rules/minimal-safe-diff.md +2 -0
  49. package/dist/agent-src/rules/no-roadmap-references.md +4 -1
  50. package/dist/agent-src/rules/non-destructive-by-default.md +20 -0
  51. package/dist/agent-src/rules/onboarding-gate.md +2 -0
  52. package/dist/agent-src/rules/output-discipline.md +2 -0
  53. package/dist/agent-src/rules/persona-governance.md +2 -0
  54. package/dist/agent-src/rules/php-coding.md +1 -0
  55. package/dist/agent-src/rules/preservation-guard.md +3 -0
  56. package/dist/agent-src/rules/reviewer-awareness.md +1 -0
  57. package/dist/agent-src/rules/roadmap-ci-steps-policy.md +1 -0
  58. package/dist/agent-src/rules/roadmap-progress-sync.md +9 -0
  59. package/dist/agent-src/rules/scale-discipline.md +92 -0
  60. package/dist/agent-src/rules/secret-vcs-guard.md +106 -0
  61. package/dist/agent-src/rules/security-sensitive-stop.md +11 -1
  62. package/dist/agent-src/rules/session-canary.md +77 -0
  63. package/dist/agent-src/rules/skill-quality.md +2 -0
  64. package/dist/agent-src/rules/source-confidentiality.md +2 -0
  65. package/dist/agent-src/rules/source-of-truth.md +2 -0
  66. package/dist/agent-src/rules/telegraph-speak.md +2 -0
  67. package/dist/agent-src/rules/token-optimizer-maintenance.md +3 -1
  68. package/dist/agent-src/rules/tool-safety.md +4 -1
  69. package/dist/agent-src/rules/untrusted-input-defense.md +10 -0
  70. package/dist/agent-src/rules/verify-before-complete.md +2 -0
  71. package/dist/agent-src/skills/adr-create/SKILL.md +17 -1
  72. package/dist/agent-src/skills/agent-security-review/SKILL.md +1 -1
  73. package/dist/agent-src/skills/code-intelligence/SKILL.md +97 -0
  74. package/dist/agent-src/skills/condense-memory/SKILL.md +1 -1
  75. package/dist/agent-src/skills/corpus-grounding/SKILL.md +0 -3
  76. package/dist/agent-src/skills/description-assist/SKILL.md +1 -1
  77. package/dist/agent-src/skills/design-review/SKILL.md +5 -6
  78. package/dist/agent-src/skills/design-tokens/SKILL.md +0 -1
  79. package/dist/agent-src/skills/gated-reach/SKILL.md +185 -0
  80. package/dist/agent-src/skills/gated-reach/evals/triggers.json +72 -0
  81. package/dist/agent-src/skills/history-design/SKILL.md +101 -0
  82. package/dist/agent-src/skills/history-design/evals/triggers.json +17 -0
  83. package/dist/agent-src/skills/humanizer/SKILL.md +3 -3
  84. package/dist/agent-src/skills/image-analyser/SKILL.md +14 -12
  85. package/dist/agent-src/skills/image-editing/SKILL.md +2 -1
  86. package/dist/agent-src/skills/image-generation/SKILL.md +2 -1
  87. package/dist/agent-src/skills/image-provider-routing/SKILL.md +2 -2
  88. package/dist/agent-src/skills/launch-readiness/SKILL.md +1 -1
  89. package/dist/agent-src/skills/license-compliance-audit/SKILL.md +161 -0
  90. package/dist/agent-src/skills/license-compliance-audit/evals/triggers.json +52 -0
  91. package/dist/agent-src/skills/license-compliance-borrow-check/SKILL.md +145 -0
  92. package/dist/agent-src/skills/license-compliance-borrow-check/evals/triggers.json +52 -0
  93. package/dist/agent-src/skills/license-compliance-credits/SKILL.md +97 -0
  94. package/dist/agent-src/skills/license-compliance-credits/evals/triggers.json +52 -0
  95. package/dist/agent-src/skills/md-language-check/SKILL.md +1 -1
  96. package/dist/agent-src/skills/override-management/SKILL.md +1 -1
  97. package/dist/agent-src/skills/prediction-pool-optimizer/SKILL.md +7 -7
  98. package/dist/agent-src/skills/project-analysis-core/SKILL.md +1 -1
  99. package/dist/agent-src/skills/prompt-engineering-image/SKILL.md +3 -2
  100. package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +2 -2
  101. package/dist/agent-src/skills/readme-writing/SKILL.md +6 -1
  102. package/dist/agent-src/skills/recursive-verification/SKILL.md +6 -0
  103. package/dist/agent-src/skills/refine-ticket/SKILL.md +3 -3
  104. package/dist/agent-src/skills/roadmap-writing/SKILL.md +4 -0
  105. package/dist/agent-src/skills/rtk-output-filtering/SKILL.md +31 -12
  106. package/dist/agent-src/skills/rule-refactor/SKILL.md +3 -3
  107. package/dist/agent-src/skills/schema-review/SKILL.md +92 -0
  108. package/dist/agent-src/skills/schema-review/evals/triggers.json +17 -0
  109. package/dist/agent-src/skills/screenshot-hygiene/SKILL.md +171 -0
  110. package/dist/agent-src/skills/secrets-management/SKILL.md +43 -1
  111. package/dist/agent-src/skills/security-audit/SKILL.md +1 -1
  112. package/dist/agent-src/skills/security-maturity-assessment/SKILL.md +1 -1
  113. package/dist/agent-src/skills/skill-improvement-pipeline/SKILL.md +3 -3
  114. package/dist/agent-src/skills/skill-writing/SKILL.md +2 -2
  115. package/dist/agent-src/skills/source-discovery/SKILL.md +5 -5
  116. package/dist/agent-src/skills/subagent-orchestration/SKILL.md +45 -85
  117. package/dist/agent-src/skills/subagent-orchestration/prompts/README.md +5 -4
  118. package/dist/agent-src/skills/subagent-orchestration/prompts/adversarial-verification-council.md +29 -0
  119. package/dist/agent-src/skills/subagent-orchestration/prompts/do-and-judge-two-stage.md +29 -0
  120. package/dist/agent-src/skills/subagent-orchestration/prompts/do-and-judge.md +29 -0
  121. package/dist/agent-src/skills/subagent-orchestration/prompts/do-competitively.md +29 -0
  122. package/dist/agent-src/skills/subagent-orchestration/prompts/do-in-parallel.md +29 -0
  123. package/dist/agent-src/skills/subagent-orchestration/prompts/do-in-steps.md +29 -0
  124. package/dist/agent-src/skills/subagent-orchestration/prompts/do-in-worktrees.md +29 -0
  125. package/dist/agent-src/skills/subagent-orchestration/prompts/judge-with-debate.md +29 -0
  126. package/dist/agent-src/skills/systematic-debugging/SKILL.md +2 -2
  127. package/dist/agent-src/skills/tailwind-engineer/SKILL.md +2 -3
  128. package/dist/agent-src/skills/token-optimizer/SKILL.md +4 -4
  129. package/dist/agent-src/skills/verify-repair-loop/SKILL.md +4 -0
  130. package/dist/agent-src/skills/worktree-lifecycle/SKILL.md +2 -3
  131. package/dist/agent-src/templates/AGENTS.md +1 -1
  132. package/dist/agent-src/templates/agents/.gitattributes.fragment +25 -6
  133. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  134. package/dist/agent-src/templates/command.md +3 -3
  135. package/dist/agent-src/templates/github-workflows/secret-scan.yml +65 -0
  136. package/dist/agent-src/templates/persona.md +2 -2
  137. package/dist/agent-src/templates/rule.md +2 -2
  138. package/dist/agent-src/templates/scripts/telemetry/engagement.ts +77 -0
  139. package/dist/agent-src/templates/scripts/telemetry_record.ts +33 -1
  140. package/dist/cli/commands/doctorShell.js +20 -0
  141. package/dist/cli/commands/doctorShell.js.map +1 -1
  142. package/dist/cli/commands/rtkDetect.js +58 -0
  143. package/dist/cli/commands/rtkDetect.js.map +1 -0
  144. package/dist/cli/configRoot.js +112 -0
  145. package/dist/cli/configRoot.js.map +1 -0
  146. package/dist/cli/configRoot.test.js +97 -0
  147. package/dist/cli/configRoot.test.js.map +1 -0
  148. package/dist/cli/firstRunNotice.js +70 -0
  149. package/dist/cli/firstRunNotice.js.map +1 -0
  150. package/dist/cli/help.js +4 -1
  151. package/dist/cli/help.js.map +1 -1
  152. package/dist/cli/main.js +54 -5
  153. package/dist/cli/main.js.map +1 -1
  154. package/dist/cli/registry.js +8 -1
  155. package/dist/cli/registry.js.map +1 -1
  156. package/dist/discovery/deprecation-report.md +1 -1
  157. package/dist/discovery/discovery-manifest.json +502 -101
  158. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  159. package/dist/discovery/discovery-manifest.summary.md +6 -4
  160. package/dist/discovery/orphan-report.md +1 -1
  161. package/dist/discovery/packs.json +95 -8
  162. package/dist/discovery/trust-report.md +11 -11
  163. package/dist/discovery/workspaces.json +36 -7
  164. package/dist/hooks/dispatch.js +19475 -0
  165. package/dist/install/agentSwitchDetection.js +75 -0
  166. package/dist/install/agentSwitchDetection.js.map +1 -0
  167. package/dist/install/agentSwitchProfile.js +117 -0
  168. package/dist/install/agentSwitchProfile.js.map +1 -0
  169. package/dist/install/atomic.js +1 -1
  170. package/dist/install/detect.js +1 -1
  171. package/dist/install/install.mjs +791 -486
  172. package/dist/install/rtkDetection.js +213 -0
  173. package/dist/install/rtkDetection.js.map +1 -0
  174. package/dist/install/rule_scope.js +2 -1
  175. package/dist/install/rule_scope.js.map +1 -1
  176. package/dist/install/types.js +2 -2
  177. package/dist/install/wizard-plan.js +1 -1
  178. package/dist/install/wizardDismissals.js +58 -0
  179. package/dist/install/wizardDismissals.js.map +1 -0
  180. package/dist/mcp/awesome-mcp-servers.row.md +1 -1
  181. package/dist/mcp/mcp-cloudflare-catalogue.json +1 -1
  182. package/dist/mcp/registry-manifest.json +15 -4
  183. package/dist/mcp/server.json +20 -0
  184. package/dist/mcp/server.mjs +44292 -0
  185. package/dist/router.json +1 -1
  186. package/dist/scripts/condense.js +14 -7
  187. package/dist/scripts/condense.js.map +1 -1
  188. package/dist/server/app.js +12 -0
  189. package/dist/server/app.js.map +1 -1
  190. package/dist/server/io/sharedWriteCheck.js +101 -0
  191. package/dist/server/io/sharedWriteCheck.js.map +1 -0
  192. package/dist/server/routes/ping.js +32 -0
  193. package/dist/server/routes/ping.js.map +1 -1
  194. package/dist/server/routes/settings.js +21 -4
  195. package/dist/server/routes/settings.js.map +1 -1
  196. package/dist/server/routes/userMd.js +21 -4
  197. package/dist/server/routes/userMd.js.map +1 -1
  198. package/dist/server/routes/wizard.js +68 -25
  199. package/dist/server/routes/wizard.js.map +1 -1
  200. package/dist/server/schemas/settings.js +12 -2
  201. package/dist/server/schemas/settings.js.map +1 -1
  202. package/dist/server/serverInfo.js +6 -2
  203. package/dist/server/serverInfo.js.map +1 -1
  204. package/dist/server/token.js +11 -4
  205. package/dist/server/token.js.map +1 -1
  206. package/dist/server/writeRoot.js +15 -1
  207. package/dist/server/writeRoot.js.map +1 -1
  208. package/dist/shared/capabilities.js +33 -0
  209. package/dist/shared/capabilities.js.map +1 -0
  210. package/dist/shared/capabilities.test.js +39 -0
  211. package/dist/shared/capabilities.test.js.map +1 -0
  212. package/dist/ui/assets/index-BpSQt5vm.js +40 -0
  213. package/dist/ui/assets/index-BpSQt5vm.js.map +1 -0
  214. package/dist/ui/assets/index-jSfMW8_t.css +1 -0
  215. package/dist/ui/index.html +15 -6
  216. package/docs/MIGRATION.md +16 -0
  217. package/docs/guidelines/component-oriented-and-oop-development.md +4 -2
  218. package/package.json +22 -9
  219. package/src/agent-src/templates/AGENTS.md +1 -1
  220. package/src/agent-src/templates/scripts/telemetry/engagement.ts +77 -0
  221. package/src/agent-src/templates/scripts/telemetry_record.ts +33 -1
  222. package/src/config/agent-settings.template.yml +94 -13
  223. package/src/config/discovery/packs.yml +22 -0
  224. package/src/config/discovery/workspaces.yml +1 -1
  225. package/src/config/evaluator-budgets.json +47 -0
  226. package/src/config/hook-latency-budget.json +20 -0
  227. package/src/config/reach-channels.yml +217 -0
  228. package/src/config/reach-prescriptions-intake.yml +200 -0
  229. package/src/install/agentSwitchDetection.ts +90 -0
  230. package/src/install/agentSwitchProfile.ts +131 -0
  231. package/src/install/atomic.ts +1 -1
  232. package/src/install/detect.ts +1 -1
  233. package/src/install/rtkDetection.ts +274 -0
  234. package/src/install/rule_scope.ts +9 -2
  235. package/src/install/types.ts +2 -2
  236. package/src/install/wizard-plan.ts +1 -1
  237. package/src/install/wizardDismissals.ts +60 -0
  238. package/src/scripts/_cli/cmd_doctor.ts +62 -1
  239. package/src/scripts/_cli/cmd_memory_get.ts +197 -0
  240. package/src/scripts/_cli/cmd_refresh.ts +30 -0
  241. package/src/scripts/_dispatch.bash +96 -0
  242. package/src/scripts/_lib/auto_dispatch.corpus.test.ts +64 -1
  243. package/src/scripts/_lib/auto_dispatch.ts +76 -0
  244. package/src/scripts/_lib/detect_target_license.ts +714 -0
  245. package/src/scripts/_lib/exec_evidence.ts +251 -0
  246. package/src/scripts/_lib/fixtures/secret-detector/negatives.txt +15 -0
  247. package/src/scripts/_lib/fixtures/secret-detector/positives.txt +15 -0
  248. package/src/scripts/_lib/install_drift.ts +194 -0
  249. package/src/scripts/_lib/kernel_rules.ts +46 -0
  250. package/src/scripts/_lib/memory_fts_index.ts +390 -0
  251. package/src/scripts/_lib/orchestration_record.ts +91 -2
  252. package/src/scripts/_lib/persistence/adapter_raw_sql.ts +443 -0
  253. package/src/scripts/_lib/persistence/detect_audit_coverage.ts +423 -0
  254. package/src/scripts/_lib/persistence/detect_bounded_reads.ts +154 -0
  255. package/src/scripts/_lib/persistence/detect_index_parity.ts +576 -0
  256. package/src/scripts/_lib/persistence/detect_n1_eloquent.ts +226 -0
  257. package/src/scripts/_lib/persistence/detect_offload.ts +441 -0
  258. package/src/scripts/_lib/persistence/detect_prisma_growth.ts +74 -0
  259. package/src/scripts/_lib/persistence/offload_catalog.ts +73 -0
  260. package/src/scripts/_lib/persistence/types.ts +109 -0
  261. package/src/scripts/_lib/reddit_thread_parse.ts +598 -0
  262. package/src/scripts/_lib/risk_paths.ts +160 -0
  263. package/src/scripts/_lib/rtk_allowlist.ts +44 -0
  264. package/src/scripts/_lib/secret_detector.test.ts +108 -0
  265. package/src/scripts/_lib/secret_detector.ts +328 -0
  266. package/src/scripts/_lib/secret_detector_adversarial.test.ts +116 -0
  267. package/src/scripts/_lib/spawn_env.ts +7 -0
  268. package/src/scripts/_lib/sqlite_guard.ts +191 -0
  269. package/src/scripts/_lib/subagent_spawn.ts +53 -0
  270. package/src/scripts/_lib/tool_probe.ts +359 -0
  271. package/src/scripts/_lib/worker_budget.ts +107 -0
  272. package/src/scripts/adr/regenerate_index.ts +81 -6
  273. package/src/scripts/ai_council/blind_review.ts +0 -0
  274. package/src/scripts/ai_council/config.ts +12 -6
  275. package/src/scripts/ai_council/orchestrator.ts +73 -3
  276. package/src/scripts/ai_team/review_gate.ts +8 -10
  277. package/src/scripts/ai_team/team_dispatch.ts +48 -0
  278. package/src/scripts/audit_adr_coverage.ts +33 -0
  279. package/src/scripts/audit_initial_context.ts +1 -1
  280. package/src/scripts/bench_cross_source_eval.ts +400 -0
  281. package/src/scripts/bench_honesty_score.ts +1093 -0
  282. package/src/scripts/bench_hook_latency.ts +218 -0
  283. package/src/scripts/build_mcp_catalog.ts +275 -0
  284. package/src/scripts/build_mcp_registry_manifest.ts +46 -0
  285. package/src/scripts/build_proof.ts +207 -0
  286. package/src/scripts/chat_history.ts +8 -5
  287. package/src/scripts/check_adr_frontmatter.ts +195 -0
  288. package/src/scripts/check_artefact_count_messaging.ts +4 -0
  289. package/src/scripts/check_backstop_debt.ts +210 -0
  290. package/src/scripts/check_bundle_path_leakage.ts +343 -0
  291. package/src/scripts/check_claims.ts +188 -8
  292. package/src/scripts/check_comparison.ts +12 -0
  293. package/src/scripts/check_enforcement_coverage.ts +592 -0
  294. package/src/scripts/check_evaluator_budgets.ts +99 -0
  295. package/src/scripts/check_kernel_rule_bundle.ts +16 -12
  296. package/src/scripts/check_knowledge_sharing.ts +12 -1
  297. package/src/scripts/check_no_external_sources.ts +2 -2
  298. package/src/scripts/check_reach_channels.ts +407 -0
  299. package/src/scripts/check_reach_staleness.ts +364 -0
  300. package/src/scripts/check_secret_leak.test.ts +47 -0
  301. package/src/scripts/check_secret_leak.ts +290 -0
  302. package/src/scripts/check_source_pointer_freshness.ts +28 -3
  303. package/src/scripts/code_graph/build.ts +0 -0
  304. package/src/scripts/code_graph/cli.ts +379 -0
  305. package/src/scripts/code_graph/detect.ts +186 -0
  306. package/src/scripts/code_graph/extract.ts +386 -0
  307. package/src/scripts/code_graph/intent.ts +45 -0
  308. package/src/scripts/code_graph/loader.ts +123 -0
  309. package/src/scripts/code_graph/query.ts +290 -0
  310. package/src/scripts/code_graph/sanitize.ts +30 -0
  311. package/src/scripts/code_graph/sqlite_store.ts +174 -0
  312. package/src/scripts/code_graph/types.ts +83 -0
  313. package/src/scripts/code_graph/validate.ts +63 -0
  314. package/src/scripts/condense.ts +14 -6
  315. package/src/scripts/context_hygiene_hook.ts +8 -5
  316. package/src/scripts/council_cli.ts +126 -12
  317. package/src/scripts/detect_target_license.ts +203 -0
  318. package/src/scripts/evaluator_umbrella.sh +145 -0
  319. package/src/scripts/external_sources_denylist.json +8 -4
  320. package/src/scripts/first_run_gate_hook.ts +9 -5
  321. package/src/scripts/generate_subagent_floor.ts +194 -0
  322. package/src/scripts/hermetic-install.sh +3 -3
  323. package/src/scripts/hook_manifest.yaml +65 -16
  324. package/src/scripts/hooks/block_kernel_rule_writes.ts +212 -0
  325. package/src/scripts/hooks/block_no_verify.ts +9 -9
  326. package/src/scripts/hooks/code_graph_nudge_hook.ts +191 -0
  327. package/src/scripts/hooks/concern_registry.ts +75 -0
  328. package/src/scripts/hooks/design_slop_hook.ts +8 -5
  329. package/src/scripts/hooks/dispatch_entry.ts +37 -0
  330. package/src/scripts/hooks/dispatch_hook.ts +176 -3
  331. package/src/scripts/hooks/hook_stdin.ts +42 -0
  332. package/src/scripts/hooks/rtk_wrap_hook.ts +26 -12
  333. package/src/scripts/hot_context_hook.ts +7 -6
  334. package/src/scripts/injection_scan_hook.ts +9 -1
  335. package/src/scripts/install +6 -6
  336. package/src/scripts/install-hooks.sh +4 -4
  337. package/src/scripts/install.sh +5 -4
  338. package/src/scripts/install.ts +264 -23
  339. package/src/scripts/iron_law_sha.ts +3 -12
  340. package/src/scripts/learning_sidecar.ts +0 -0
  341. package/src/scripts/lint_budget_ownership.ts +89 -0
  342. package/src/scripts/lint_command_routing.ts +35 -5
  343. package/src/scripts/lint_command_verbs.ts +42 -9
  344. package/src/scripts/lint_consumer_internal_refs.ts +211 -0
  345. package/src/scripts/lint_discovery_vocabulary.ts +2 -0
  346. package/src/scripts/lint_documented_commands.ts +670 -0
  347. package/src/scripts/lint_framework_leakage.ts +17 -3
  348. package/src/scripts/lint_framework_leakage_allowlist.json +32 -0
  349. package/src/scripts/lint_governed_writes.ts +335 -0
  350. package/src/scripts/lint_hidden_unicode.ts +6 -0
  351. package/src/scripts/lint_mcp_registry_manifest.ts +26 -1
  352. package/src/scripts/lint_memory_tripwire.ts +186 -0
  353. package/src/scripts/lint_override_kernel_guard.ts +267 -0
  354. package/src/scripts/lint_persistence.ts +171 -0
  355. package/src/scripts/lint_pre_migration_refs.ts +106 -0
  356. package/src/scripts/lint_provenance.ts +547 -0
  357. package/src/scripts/lint_provenance_vocabulary.ts +437 -0
  358. package/src/scripts/lint_spawn_payload.ts +283 -0
  359. package/src/scripts/lint_store_boundary.ts +152 -0
  360. package/src/scripts/lint_versioned_cache.ts +7 -1
  361. package/src/scripts/mcp_server/__main__.ts +7 -2
  362. package/src/scripts/mcp_server/catalog.ts +23 -1
  363. package/src/scripts/mcp_server/consumer_tool_catalog.json +563 -193
  364. package/src/scripts/mcp_server/prompts.ts +6 -0
  365. package/src/scripts/mcp_server/tool_catalog_source.ts +332 -0
  366. package/src/scripts/mcp_server/tools.ts +56 -5
  367. package/src/scripts/mcp_telemetry_query.ts +2 -33
  368. package/src/scripts/mcp_telemetry_store.ts +64 -34
  369. package/src/scripts/measure_rule_budget.ts +3 -12
  370. package/src/scripts/memory_learn_hook.ts +126 -0
  371. package/src/scripts/memory_lookup.ts +0 -0
  372. package/src/scripts/memory_replay_24.ts +312 -0
  373. package/src/scripts/memory_report.ts +16 -3
  374. package/src/scripts/memory_signal.ts +48 -0
  375. package/src/scripts/memory_status.ts +6 -0
  376. package/src/scripts/minimal_safe_diff_hook.ts +8 -5
  377. package/src/scripts/onboarding_gate_hook.ts +8 -5
  378. package/src/scripts/orchestration_record.ts +16 -0
  379. package/src/scripts/pr_url_reminder_hook.ts +8 -1
  380. package/src/scripts/prepack-check.mjs +17 -0
  381. package/src/scripts/prepack_lifecycle_check.d.mts +8 -0
  382. package/src/scripts/prepack_lifecycle_check.mjs +82 -0
  383. package/src/scripts/profile_staleness_hook.ts +8 -7
  384. package/src/scripts/reach_doctor.ts +1651 -0
  385. package/src/scripts/release.ts +24 -3
  386. package/src/scripts/report_install_drift.ts +109 -0
  387. package/src/scripts/risk_escalation_shadow.ts +160 -0
  388. package/src/scripts/roadmap_progress_hook.ts +8 -5
  389. package/src/scripts/schemas/agent-settings.schema.json +23 -0
  390. package/src/scripts/schemas/license-policy.schema.json +89 -0
  391. package/src/scripts/schemas/provenance-borrow.schema.json +46 -0
  392. package/src/scripts/schemas/reach-channels.schema.json +134 -0
  393. package/src/scripts/schemas/reach-doctor-payload.schema.json +220 -0
  394. package/src/scripts/schemas/rule.schema.json +20 -0
  395. package/src/scripts/self_review_gate.test.ts +173 -1
  396. package/src/scripts/self_review_gate.ts +155 -15
  397. package/src/scripts/session_canary_hook.ts +182 -0
  398. package/src/scripts/skill_linter.ts +55 -0
  399. package/src/scripts/smoke_quickstart.ts +2 -2
  400. package/src/scripts/surface_probe_hook.ts +8 -7
  401. package/src/scripts/sync_gitattributes.ts +310 -0
  402. package/src/scripts/team_review_gate_hook.ts +13 -16
  403. package/src/scripts/validate_reach_prescriptions.ts +751 -0
  404. package/src/scripts/verify_before_complete_hook.ts +8 -5
  405. package/src/scripts/wrapper_freshness_hook.ts +8 -7
  406. package/src/server/schemas/settings.ts +24 -2
  407. package/src/shared/capabilities.test.ts +43 -0
  408. package/src/shared/capabilities.ts +75 -0
  409. package/src/templates/minimal/agents-overrides-readme.md +20 -0
  410. package/dist/ui/assets/index-BPFMZWUs.css +0 -1
  411. package/dist/ui/assets/index-BiEZiZ31.js +0 -40
  412. package/dist/ui/assets/index-BiEZiZ31.js.map +0 -1
  413. package/docs/CLAIMS.md +0 -261
  414. package/docs/DISTRIBUTION_CHECKLIST.md +0 -170
  415. package/docs/RELEASE_STORY_TEMPLATE.md +0 -37
  416. package/docs/SKILL_CENSUS.md +0 -352
  417. package/docs/adrs/cost/0001-hard-stop-hook.md +0 -114
  418. package/docs/adrs/cost/README.md +0 -9
  419. package/docs/adrs/memory/0001-consumer-side-snapshot.md +0 -119
  420. package/docs/adrs/memory/README.md +0 -10
  421. package/docs/adrs/router/0001-three-tier-routing.md +0 -119
  422. package/docs/adrs/router/README.md +0 -9
  423. package/docs/adrs/schema/0001-json-schema-frontmatter.md +0 -102
  424. package/docs/adrs/schema/README.md +0 -9
  425. package/docs/adrs/smoke/0001-per-tier-smoke-scripts.md +0 -99
  426. package/docs/adrs/smoke/README.md +0 -9
  427. package/docs/adrs/telegraph/0001-default-off-until-bench.md +0 -93
  428. package/docs/adrs/telegraph/README.md +0 -9
  429. package/docs/announcements/2026-05-non-dev-launch.md +0 -79
  430. package/docs/announcements/2026-07-honest-cost-sweep-launch.md +0 -84
  431. package/docs/anti-reskin-gate.md +0 -60
  432. package/docs/architecture/augment-projection.md +0 -70
  433. package/docs/architecture/claude-bundle.md +0 -77
  434. package/docs/architecture/current-onboard-baseline.md +0 -126
  435. package/docs/architecture/current-safety-behavior.md +0 -137
  436. package/docs/architecture/multi-tool-projection.md +0 -125
  437. package/docs/architecture/setup-vs-settings-shared-surface.md +0 -114
  438. package/docs/architecture/source-projection.md +0 -85
  439. package/docs/architecture.md +0 -390
  440. package/docs/archive/CHANGELOG-6.0.0-overview.md +0 -953
  441. package/docs/archive/CHANGELOG-7.0.0.md +0 -419
  442. package/docs/archive/CHANGELOG-pre-2.11.0.md +0 -141
  443. package/docs/archive/CHANGELOG-pre-2.15.0.md +0 -244
  444. package/docs/archive/CHANGELOG-pre-2.16.0.md +0 -48
  445. package/docs/archive/CHANGELOG-pre-2.17.0.md +0 -63
  446. package/docs/archive/CHANGELOG-pre-2.2.0.md +0 -2138
  447. package/docs/archive/CHANGELOG-pre-2.20.0.md +0 -159
  448. package/docs/archive/CHANGELOG-pre-2.25.0.md +0 -191
  449. package/docs/archive/CHANGELOG-pre-2.7.0.md +0 -185
  450. package/docs/archive/CHANGELOG-pre-3.0.0.md +0 -130
  451. package/docs/archive/CHANGELOG-pre-3.1.0.md +0 -167
  452. package/docs/archive/CHANGELOG-pre-3.2.0.md +0 -268
  453. package/docs/archive/CHANGELOG-pre-4.0.0.md +0 -80
  454. package/docs/archive/CHANGELOG-pre-4.5.0.md +0 -289
  455. package/docs/archive/CHANGELOG-pre-5.4.0.md +0 -260
  456. package/docs/archive/CHANGELOG-pre-5.9.0.md +0 -270
  457. package/docs/archive/CHANGELOG-pre-6.0.0.md +0 -473
  458. package/docs/archive/CHANGELOG-pre-7.0.0.md +0 -126
  459. package/docs/archive/CHANGELOG-pre-8.0.0.md +0 -301
  460. package/docs/archive/CHANGELOG-pre-8.1.0.md +0 -316
  461. package/docs/archive/CHANGELOG-pre-8.12.0.md +0 -304
  462. package/docs/archive/CHANGELOG-pre-8.9.0.md +0 -306
  463. package/docs/archive/CHANGELOG-pre-9.2.0.md +0 -276
  464. package/docs/artefact-census.md +0 -71
  465. package/docs/benchmark.md +0 -648
  466. package/docs/benchmark.pinned.yml +0 -31
  467. package/docs/benchmarks.md +0 -85
  468. package/docs/capability-matrix.md +0 -33
  469. package/docs/case-studies/_template.md +0 -60
  470. package/docs/case-studies/frontend-design-positioning.md +0 -86
  471. package/docs/catalog.md +0 -721
  472. package/docs/command-flows.md +0 -272
  473. package/docs/command-naming-audit.md +0 -60
  474. package/docs/comparison.yaml +0 -45
  475. package/docs/contracts/CHANGELOG-conventions.md +0 -149
  476. package/docs/contracts/STABILITY.md +0 -188
  477. package/docs/contracts/adoption-signal-floor.md +0 -127
  478. package/docs/contracts/adr-architectural-consensus-mechanism.md +0 -68
  479. package/docs/contracts/adr-chat-history-split.md +0 -140
  480. package/docs/contracts/adr-command-suggestion.md +0 -144
  481. package/docs/contracts/adr-forecast-construction-shape.md +0 -90
  482. package/docs/contracts/adr-gtm-context-spine.md +0 -116
  483. package/docs/contracts/adr-implement-ticket-runtime.md +0 -121
  484. package/docs/contracts/adr-install-user-type-axis.md +0 -107
  485. package/docs/contracts/adr-layout.md +0 -107
  486. package/docs/contracts/adr-level-6-productization.md +0 -145
  487. package/docs/contracts/adr-mcp-runtime.md +0 -128
  488. package/docs/contracts/adr-product-ui-track.md +0 -381
  489. package/docs/contracts/adr-prompt-driven-execution.md +0 -186
  490. package/docs/contracts/adr-settings-sync-engine.md +0 -128
  491. package/docs/contracts/adr-user-types-axis.md +0 -127
  492. package/docs/contracts/adr-wing4-context-spine.md +0 -126
  493. package/docs/contracts/agent-user-schema.md +0 -170
  494. package/docs/contracts/agents-layout.md +0 -148
  495. package/docs/contracts/agents-md-tech-stack.md +0 -75
  496. package/docs/contracts/ai-council-config.md +0 -829
  497. package/docs/contracts/ai-team-config.md +0 -224
  498. package/docs/contracts/analysis-memory-loop.md +0 -149
  499. package/docs/contracts/at-rest-encryption.md +0 -191
  500. package/docs/contracts/audit-log-v1.md +0 -150
  501. package/docs/contracts/auto-orchestration-v1.md +0 -70
  502. package/docs/contracts/benchmark-ab-contract.md +0 -106
  503. package/docs/contracts/benchmark-corpus-spec.md +0 -125
  504. package/docs/contracts/benchmark-report-schema.md +0 -113
  505. package/docs/contracts/branch-protection-policy.md +0 -139
  506. package/docs/contracts/brand-token-consumption.md +0 -74
  507. package/docs/contracts/capability-boundary.md +0 -69
  508. package/docs/contracts/capability-packs.md +0 -217
  509. package/docs/contracts/ci-cost-budget.md +0 -111
  510. package/docs/contracts/ci-green-floor.md +0 -141
  511. package/docs/contracts/command-category-governance.md +0 -84
  512. package/docs/contracts/command-clusters.md +0 -399
  513. package/docs/contracts/command-surface-tiers.md +0 -176
  514. package/docs/contracts/command-taxonomy.md +0 -137
  515. package/docs/contracts/condensation-default-kill-criterion.md +0 -116
  516. package/docs/contracts/config-presets.md +0 -144
  517. package/docs/contracts/conformance.md +0 -84
  518. package/docs/contracts/consumer-bridge.md +0 -73
  519. package/docs/contracts/context-paths.md +0 -101
  520. package/docs/contracts/context-spine.md +0 -179
  521. package/docs/contracts/cost-dashboard.md +0 -143
  522. package/docs/contracts/cost-enforcement.md +0 -134
  523. package/docs/contracts/cost-profile-defaults.md +0 -110
  524. package/docs/contracts/cost-summary-schema.md +0 -107
  525. package/docs/contracts/creative-pack-boundary.md +0 -63
  526. package/docs/contracts/cross-repo-retrieval.md +0 -64
  527. package/docs/contracts/cross-wing-handoff.md +0 -134
  528. package/docs/contracts/daily-workspace.md +0 -147
  529. package/docs/contracts/decision-engine-gates.md +0 -120
  530. package/docs/contracts/decision-trace-v1.md +0 -177
  531. package/docs/contracts/design-artifact-lifecycle.md +0 -93
  532. package/docs/contracts/design-artifact-verification.md +0 -153
  533. package/docs/contracts/discovery-manifest.md +0 -209
  534. package/docs/contracts/discovery-manifest.schema.json +0 -254
  535. package/docs/contracts/evidence-based-pruning.md +0 -102
  536. package/docs/contracts/explain-modes.md +0 -187
  537. package/docs/contracts/explain-trace.schema.json +0 -144
  538. package/docs/contracts/file-ownership-matrix.json +0 -13941
  539. package/docs/contracts/file-ownership-matrix.md +0 -135
  540. package/docs/contracts/frontmatter-contract.md +0 -140
  541. package/docs/contracts/ghostwriter-schema.md +0 -337
  542. package/docs/contracts/governance-enforcement-projection.md +0 -159
  543. package/docs/contracts/gui-wizard.md +0 -350
  544. package/docs/contracts/harness-expectations.md +0 -128
  545. package/docs/contracts/hook-architecture-v1.md +0 -325
  546. package/docs/contracts/host-agent-protocol.md +0 -110
  547. package/docs/contracts/implement-ticket-flow.md +0 -625
  548. package/docs/contracts/init-telemetry.md +0 -132
  549. package/docs/contracts/injected-block-authenticity-model.md +0 -66
  550. package/docs/contracts/install-layout.md +0 -249
  551. package/docs/contracts/install-scopes.md +0 -82
  552. package/docs/contracts/installed-tools-lockfile.md +0 -144
  553. package/docs/contracts/installer-agent-mode.md +0 -137
  554. package/docs/contracts/iron-law-overrides.txt +0 -26
  555. package/docs/contracts/kernel-membership.md +0 -339
  556. package/docs/contracts/linear-ai-rules-inclusion.md +0 -143
  557. package/docs/contracts/linear-ai-three-layers.md +0 -130
  558. package/docs/contracts/linter-structural-model.md +0 -181
  559. package/docs/contracts/load-context-budget-model.md +0 -259
  560. package/docs/contracts/load-context-schema.md +0 -220
  561. package/docs/contracts/local-analytics.md +0 -160
  562. package/docs/contracts/local-knowledge-ingestion.md +0 -96
  563. package/docs/contracts/local-server-api.md +0 -134
  564. package/docs/contracts/low-impact-corpus-format.md +0 -95
  565. package/docs/contracts/mcp-beta-criteria.md +0 -130
  566. package/docs/contracts/mcp-cloud-scope.md +0 -355
  567. package/docs/contracts/mcp-discovery-phase-notice.md +0 -60
  568. package/docs/contracts/mcp-phase-1-scope.md +0 -272
  569. package/docs/contracts/mcp-registry-manifest.schema.json +0 -129
  570. package/docs/contracts/mcp-tool-inventory.md +0 -64
  571. package/docs/contracts/mcp-tool-stub-envelope.md +0 -78
  572. package/docs/contracts/measurement-baseline.md +0 -103
  573. package/docs/contracts/memory-visibility-v1.md +0 -160
  574. package/docs/contracts/mental-models.md +0 -336
  575. package/docs/contracts/migrate-command.md +0 -233
  576. package/docs/contracts/multi-tool-projection-fidelity.md +0 -134
  577. package/docs/contracts/namespace.md +0 -125
  578. package/docs/contracts/no-runtime-boundary.md +0 -61
  579. package/docs/contracts/one-off-script-lifecycle.md +0 -110
  580. package/docs/contracts/orchestration-dsl-v1.md +0 -153
  581. package/docs/contracts/package-self-orientation.md +0 -163
  582. package/docs/contracts/pilot/agent-authority.md +0 -24
  583. package/docs/contracts/pilot/direct-answers.md +0 -70
  584. package/docs/contracts/pilot/language-and-tone.md +0 -63
  585. package/docs/contracts/plain-language-surface.md +0 -117
  586. package/docs/contracts/prelaunch-diagnostics.md +0 -151
  587. package/docs/contracts/profile-system.md +0 -167
  588. package/docs/contracts/reasoning-discipline-protocol.md +0 -83
  589. package/docs/contracts/release-pr-gating.md +0 -151
  590. package/docs/contracts/release-sizing.md +0 -107
  591. package/docs/contracts/release-trunk-sync.md +0 -105
  592. package/docs/contracts/review-lens-schema.md +0 -64
  593. package/docs/contracts/roadmap-complexity-standard.md +0 -138
  594. package/docs/contracts/role-experience.md +0 -125
  595. package/docs/contracts/router-blending.md +0 -71
  596. package/docs/contracts/rule-classification.md +0 -171
  597. package/docs/contracts/rule-interactions.md +0 -132
  598. package/docs/contracts/rule-interactions.yml +0 -260
  599. package/docs/contracts/rule-priority-hierarchy.md +0 -88
  600. package/docs/contracts/rule-router.md +0 -287
  601. package/docs/contracts/safety-model.md +0 -129
  602. package/docs/contracts/session-profile-overlay.md +0 -157
  603. package/docs/contracts/settings-api.md +0 -264
  604. package/docs/contracts/settings-gui-agent-mode.schema.json +0 -128
  605. package/docs/contracts/settings-sync-yaml-subset.md +0 -139
  606. package/docs/contracts/skill-bundled-assets.md +0 -62
  607. package/docs/contracts/skill-discovery.md +0 -80
  608. package/docs/contracts/skill-distribution-channels.md +0 -66
  609. package/docs/contracts/skill-domains.md +0 -144
  610. package/docs/contracts/skill-dry-run.md +0 -47
  611. package/docs/contracts/skill-family-map.yml +0 -915
  612. package/docs/contracts/smoke-contracts.md +0 -144
  613. package/docs/contracts/subagent-boundary.md +0 -59
  614. package/docs/contracts/surface-agent-contracts.md +0 -153
  615. package/docs/contracts/surface-matrix.md +0 -108
  616. package/docs/contracts/surface-tiers.md +0 -81
  617. package/docs/contracts/telegraph-telemetry.md +0 -83
  618. package/docs/contracts/ticket-bundle-format.md +0 -233
  619. package/docs/contracts/tier-3-contrib-plugin.md +0 -137
  620. package/docs/contracts/trust-and-safety.md +0 -144
  621. package/docs/contracts/ui-stack-extension.md +0 -237
  622. package/docs/contracts/ui-track-flow.md +0 -329
  623. package/docs/contracts/universal-skills.md +0 -91
  624. package/docs/contracts/user-type-schema.md +0 -146
  625. package/docs/contracts/value-dashboard-spec.md +0 -378
  626. package/docs/contracts/value-report-schema.md +0 -168
  627. package/docs/contracts/workflow-packs.md +0 -121
  628. package/docs/contracts/workspace-boundary.md +0 -84
  629. package/docs/contracts/workspace-documents.md +0 -144
  630. package/docs/contracts/write-engine.md +0 -182
  631. package/docs/cookbook.md +0 -152
  632. package/docs/customization.md +0 -685
  633. package/docs/decisions/ADR-001-kernel-swap-deferred.md +0 -109
  634. package/docs/decisions/ADR-002-kernel-bucket-overrides.md +0 -135
  635. package/docs/decisions/ADR-003-flat-cluster-subs-and-colon-syntax.md +0 -137
  636. package/docs/decisions/ADR-004-rule-governance-pruning.md +0 -240
  637. package/docs/decisions/ADR-005-subagent-worktrees.md +0 -120
  638. package/docs/decisions/ADR-006-skill-tools-python-pilot.md +0 -114
  639. package/docs/decisions/ADR-007-agent-discovery-scopes.md +0 -371
  640. package/docs/decisions/ADR-008-installed-tools-manifest.md +0 -160
  641. package/docs/decisions/ADR-009-event4u-namespace.md +0 -188
  642. package/docs/decisions/ADR-010-profile-pack-preset-boundary.md +0 -168
  643. package/docs/decisions/ADR-011-domain-pack-readiness.md +0 -213
  644. package/docs/decisions/ADR-012-typescript-cli-shell.md +0 -162
  645. package/docs/decisions/ADR-013-discovery-frontmatter-contract.md +0 -342
  646. package/docs/decisions/ADR-014-gui-framework-choice.md +0 -136
  647. package/docs/decisions/ADR-015-discovery-manifest-contract.md +0 -146
  648. package/docs/decisions/ADR-016-installer-architecture.md +0 -189
  649. package/docs/decisions/ADR-017-monorepo-physical-layout.md +0 -261
  650. package/docs/decisions/ADR-018-trust-and-safety-layer.md +0 -159
  651. package/docs/decisions/ADR-019-router-json-dist-location.md +0 -124
  652. package/docs/decisions/ADR-020-global-only-consumer-scope.md +0 -213
  653. package/docs/decisions/ADR-021-deployment-shape.md +0 -153
  654. package/docs/decisions/ADR-022-daily-workspace-decomposition.md +0 -140
  655. package/docs/decisions/ADR-023-host-agent-protocol.md +0 -129
  656. package/docs/decisions/ADR-024-workspace-v0-feature-floor.md +0 -126
  657. package/docs/decisions/ADR-025-workspace-chrome.md +0 -119
  658. package/docs/decisions/ADR-026-explain-mode-translation.md +0 -117
  659. package/docs/decisions/ADR-027-changelog-machine-vs-manual.md +0 -129
  660. package/docs/decisions/ADR-028-root-layout.md +0 -147
  661. package/docs/decisions/ADR-029-multi-workspace-deferred.md +0 -122
  662. package/docs/decisions/ADR-030-claude-code-command-projection.md +0 -147
  663. package/docs/decisions/ADR-031-validation-severity-tiers-and-projection-roundtrip.md +0 -97
  664. package/docs/decisions/ADR-032-linked-projects-scope.md +0 -122
  665. package/docs/decisions/ADR-033-distribution-identity-npm-primary.md +0 -81
  666. package/docs/decisions/ADR-034-per-skill-model-recommendation-transport.md +0 -63
  667. package/docs/decisions/ADR-035-model-capability-tiers.md +0 -104
  668. package/docs/decisions/ADR-036-global-install-browser-wizard-handoff.md +0 -106
  669. package/docs/decisions/ADR-037-cost-profile-untangle.md +0 -117
  670. package/docs/decisions/ADR-038-canonical-settings-path.md +0 -96
  671. package/docs/decisions/ADR-039-claude-skills-untracked.md +0 -139
  672. package/docs/decisions/ADR-040-execution-model-projection-time-filtering.md +0 -244
  673. package/docs/decisions/ADR-041-controlled-command-verbs.md +0 -133
  674. package/docs/decisions/ADR-042-runtime-resolver-decision-gate.md +0 -113
  675. package/docs/decisions/ADR-043-monorepo-collapse-to-src-domains.md +0 -128
  676. package/docs/decisions/ADR-044-command-naming-scheme-hyphenated.md +0 -250
  677. package/docs/decisions/ADR-045-src-source-layout-and-profiles-as-views.md +0 -111
  678. package/docs/decisions/ADR-046-thin-command-principle.md +0 -93
  679. package/docs/decisions/ADR-047-framework-neutral-stack-adaptive-commands.md +0 -94
  680. package/docs/decisions/ADR-048-command-justification-rule.md +0 -106
  681. package/docs/decisions/ADR-049-configuration-trust-boundary.md +0 -132
  682. package/docs/decisions/ADR-050-workspace-vs-package-root-boundary.md +0 -121
  683. package/docs/decisions/ADR-051-uncondensed-source-container-relocation.md +0 -114
  684. package/docs/decisions/ADR-052-packages-removal-and-pack-home-migration.md +0 -86
  685. package/docs/decisions/ADR-053-agents-namespace-dual-role-resolution.md +0 -132
  686. package/docs/decisions/ADR-054-rule-adherence-decay-triggered-restate.md +0 -143
  687. package/docs/decisions/ADR-055-flow-layer-data-model.md +0 -235
  688. package/docs/decisions/ADR-056-unvalidated-video-adapters-disposition.md +0 -124
  689. package/docs/decisions/ADR-057-consolidation-evidence-gate-outcomes.md +0 -135
  690. package/docs/decisions/ADR-058-condensed-output-relocation-to-dist.md +0 -94
  691. package/docs/decisions/ADR-059-render-resume-filesystem-as-state.md +0 -161
  692. package/docs/decisions/ADR-060-comfyui-sandbox-model.md +0 -154
  693. package/docs/decisions/ADR-061-corpus-grounding-layer.md +0 -230
  694. package/docs/decisions/ADR-062-encrypt-at-rest-store-architecture.md +0 -121
  695. package/docs/decisions/ADR-063-append-jsonl-encryption-deferred.md +0 -83
  696. package/docs/decisions/ADR-064-append-jsonl-per-record-encryption.md +0 -113
  697. package/docs/decisions/ADR-065-tier3-inbox-handoff-v0.md +0 -86
  698. package/docs/decisions/ADR-066-skill-body-prerendering.md +0 -93
  699. package/docs/decisions/ADR-067-glama-registry-listing.md +0 -259
  700. package/docs/decisions/ADR-068-host-tier-detection.md +0 -90
  701. package/docs/decisions/ADR-069-prompt-renderer.md +0 -97
  702. package/docs/decisions/ADR-070-tier1-drive-loop.md +0 -94
  703. package/docs/decisions/ADR-071-launch-drive-integration.md +0 -95
  704. package/docs/decisions/ADR-072-codex-gemini-drive-configs.md +0 -90
  705. package/docs/decisions/ADR-073-drive-health-kill-switch.md +0 -81
  706. package/docs/decisions/ADR-074-drive-kill-switch-auto-recovery.md +0 -84
  707. package/docs/decisions/ADR-075-workspace-gui-drive.md +0 -83
  708. package/docs/decisions/ADR-076-workspace-multi-turn.md +0 -92
  709. package/docs/decisions/ADR-077-workspace-followup-gui.md +0 -70
  710. package/docs/decisions/ADR-078-drive-health-panel.md +0 -70
  711. package/docs/decisions/ADR-079-workspace-host-picker.md +0 -81
  712. package/docs/decisions/ADR-080-host-session-expired-410.md +0 -92
  713. package/docs/decisions/ADR-081-drive-health-reset-and-410-affordance.md +0 -71
  714. package/docs/decisions/ADR-082-410-one-click-relaunch.md +0 -58
  715. package/docs/decisions/ADR-083-session-thread-and-arbitrary-continuation.md +0 -85
  716. package/docs/decisions/ADR-084-drive-health-refresh-on-drive.md +0 -52
  717. package/docs/decisions/ADR-085-mcp-stdio-end-user-distribution-shape.md +0 -158
  718. package/docs/decisions/ADR-086-read-only-cross-agent-mcp-discovery-helper.md +0 -171
  719. package/docs/decisions/ADR-087-installer-e2e-test-strategy.md +0 -111
  720. package/docs/decisions/ADR-088-no-external-runtime-federation.md +0 -144
  721. package/docs/decisions/ADR-089-lean-local-plugin-install.md +0 -111
  722. package/docs/decisions/ADR-090-visibility-command-frontmatter-field.md +0 -95
  723. package/docs/decisions/ADR-091-split-meta-capability-packs.md +0 -113
  724. package/docs/decisions/ADR-092-defer-command-tier-alias-removal.md +0 -117
  725. package/docs/decisions/ADR-093-ai-council-config-user-global.md +0 -117
  726. package/docs/decisions/ADR-094-agent-memory-layer-removal.md +0 -94
  727. package/docs/decisions/ADR-095-workspace-boundary-contract.md +0 -108
  728. package/docs/decisions/ADR-096-analysis-workbench.md +0 -110
  729. package/docs/decisions/ADR-097-mission-recipe-privilege-boundary.md +0 -121
  730. package/docs/decisions/ADR-098-evidence-first-structure-discovery.md +0 -154
  731. package/docs/decisions/ADR-099-file-first-pattern-library.md +0 -87
  732. package/docs/decisions/ADR-100-global-knowledge-card-sharing.md +0 -140
  733. package/docs/decisions/ADR-101-ticket-bundle-emission.md +0 -109
  734. package/docs/decisions/ADR-102-ticket-handoff-paste-and-mcp.md +0 -72
  735. package/docs/decisions/ADR-103-global-knowledge-default-off-until-measured.md +0 -92
  736. package/docs/decisions/ADR-104-ai-council-config-global-only.md +0 -119
  737. package/docs/decisions/ADR-105-automatic-subagent-orchestration.md +0 -108
  738. package/docs/decisions/ADR-106-recursive-verification-benchmark-gate.md +0 -126
  739. package/docs/decisions/ADR-107-legal-domain-pack-adoption.md +0 -70
  740. package/docs/decisions/ADR-108-open-source-forever-no-commercial-tier.md +0 -46
  741. package/docs/decisions/ADR-109-subagent-v1-contract.md +0 -246
  742. package/docs/decisions/ADR-110-discipline-profile-resolution-locus.md +0 -110
  743. package/docs/decisions/ADR-111-canonical-glama-listing.md +0 -97
  744. package/docs/decisions/ADR-112-stdio-lite-stays-read-only.md +0 -92
  745. package/docs/decisions/ADR-113-ci-native-release-label-trigger.md +0 -201
  746. package/docs/decisions/ADR-114-commit-policy-iron-law-override.md +0 -85
  747. package/docs/decisions/ADR-115-command-cluster-consolidation-phase-4.md +0 -91
  748. package/docs/decisions/ADR-116-memory-tripwire-activation-path.md +0 -144
  749. package/docs/decisions/ADR-117-subagents-auto-default-on.md +0 -89
  750. package/docs/decisions/ADR-118-loop-engineering-boundaries.md +0 -162
  751. package/docs/decisions/ADR-119-global-knowledge-default-on.md +0 -104
  752. package/docs/decisions/ADR-120-council-chairman-mode.md +0 -70
  753. package/docs/decisions/ADR-121-knowledge-sensitivity-classes.md +0 -90
  754. package/docs/decisions/ADR-122-adversarial-verification-council.md +0 -166
  755. package/docs/decisions/ADR-123-runtime-security-scope-and-spawn-hardening.md +0 -142
  756. package/docs/decisions/ADR-200-python-to-typescript-migration.md +0 -203
  757. package/docs/decisions/ADR-rule-kernel-and-router.md +0 -133
  758. package/docs/decisions/INDEX.md +0 -136
  759. package/docs/deploy/connector-setup.md +0 -129
  760. package/docs/deploy/env-vars.md +0 -70
  761. package/docs/deploy/policy-cookbook.md +0 -130
  762. package/docs/deploy/quickstart.md +0 -112
  763. package/docs/deploy/small-team-recipe.md +0 -148
  764. package/docs/deploy/team-deployment-posture.md +0 -111
  765. package/docs/design/adversarial-council-eval.md +0 -106
  766. package/docs/design/council-vs-solo-baseline.md +0 -92
  767. package/docs/design/cross-model-parity-eval.md +0 -82
  768. package/docs/design/length-neutral-judge-rerun.md +0 -92
  769. package/docs/design/utilization-window-criteria.md +0 -51
  770. package/docs/development.md +0 -230
  771. package/docs/distribution/awesome-list-submission.md +0 -46
  772. package/docs/distribution/consumer-matrix.md +0 -96
  773. package/docs/distribution/launch-story-draft.md +0 -58
  774. package/docs/distribution/mcp-submission-checklist.md +0 -95
  775. package/docs/distribution/public-install-smoke.md +0 -68
  776. package/docs/distribution/registries.md +0 -117
  777. package/docs/distribution/registry-submissions.md +0 -85
  778. package/docs/distribution/telemetry-privacy.md +0 -128
  779. package/docs/distribution/telemetry-schema.md +0 -174
  780. package/docs/distribution/topics-equivalents-decay-policy.md +0 -51
  781. package/docs/end-to-end-walkthroughs.md +0 -165
  782. package/docs/enforcement-by-host.md +0 -44
  783. package/docs/examples/agent-user.example.md +0 -22
  784. package/docs/experiences/agency.md +0 -49
  785. package/docs/experiences/content_creator.md +0 -49
  786. package/docs/experiences/developer.md +0 -49
  787. package/docs/experiences/finance.md +0 -50
  788. package/docs/experiences/founder.md +0 -49
  789. package/docs/experiences/ops.md +0 -49
  790. package/docs/featured-commands.md +0 -27
  791. package/docs/featured-skills.md +0 -95
  792. package/docs/flows.md +0 -67
  793. package/docs/getting-started-by-role.md +0 -190
  794. package/docs/getting-started-laravel.md +0 -72
  795. package/docs/getting-started-local-stdio.md +0 -77
  796. package/docs/getting-started.md +0 -254
  797. package/docs/github-topics.md +0 -93
  798. package/docs/governance-advantage.md +0 -72
  799. package/docs/governance.md +0 -96
  800. package/docs/guides/cross-repo-linked-projects.md +0 -93
  801. package/docs/guides/cross-repo-retrieval.md +0 -61
  802. package/docs/guides/frontend-design-corpus-refresh.md +0 -83
  803. package/docs/guides/local-analytics.md +0 -125
  804. package/docs/guides/local-knowledge.md +0 -127
  805. package/docs/guides/skill-discovery.md +0 -71
  806. package/docs/guides/skill-preview.md +0 -71
  807. package/docs/hook-payload-capture.md +0 -221
  808. package/docs/install-friction-report.md +0 -66
  809. package/docs/installation.md +0 -959
  810. package/docs/maintainers/branch-protection.md +0 -105
  811. package/docs/maintainers/dev-mode.md +0 -106
  812. package/docs/maintainers/optional-media-deps.md +0 -50
  813. package/docs/maintainers/system-map.md +0 -85
  814. package/docs/mcp-registries.md +0 -94
  815. package/docs/mcp-server.md +0 -175
  816. package/docs/mcp.md +0 -147
  817. package/docs/media/proof-demo.cast +0 -14
  818. package/docs/media/proof-demo.gif +0 -0
  819. package/docs/migration/consumer-template-consumption-model.md +0 -145
  820. package/docs/migration/divergences/README.md +0 -55
  821. package/docs/migration/divergences/_template.md +0 -50
  822. package/docs/migration/divergences/bench-stats-float-precision.md +0 -72
  823. package/docs/migration/divergences/mcp-telemetry-node-sqlite.md +0 -61
  824. package/docs/migration/divergences/pack-mcp-content-gzip-body.md +0 -53
  825. package/docs/migration/divergences/src-scripts-build_cloud_bundle.md +0 -63
  826. package/docs/migration/divergences/src-scripts-check_memory.md +0 -91
  827. package/docs/migration/divergences/src-scripts-inventory_abstraction_budget.md +0 -65
  828. package/docs/migration/divergences/src-scripts-lint_marketplace.md +0 -57
  829. package/docs/migration/divergences/src-scripts-lint_mcp_registry_manifest.md +0 -70
  830. package/docs/migration/divergences/src-scripts-spotcheck_thin_root.md +0 -60
  831. package/docs/migration/divergences/src-scripts-validate_agent_settings.md +0 -58
  832. package/docs/migration/node-floor.md +0 -86
  833. package/docs/migration/v1-to-v2.md +0 -156
  834. package/docs/migration/yaml-roundtrip-spike.md +0 -163
  835. package/docs/migrations/commands-1.15.0.md +0 -117
  836. package/docs/parity/bench-external.json +0 -58
  837. package/docs/parity/bench.json +0 -41
  838. package/docs/parity/command-frontmatter.md +0 -60
  839. package/docs/parity/external-runtime.md +0 -46
  840. package/docs/personas.md +0 -178
  841. package/docs/positioning-evidence.md +0 -86
  842. package/docs/profiles.md +0 -108
  843. package/docs/proof.md +0 -176
  844. package/docs/quality.md +0 -98
  845. package/docs/readme-split-plan.md +0 -102
  846. package/docs/recruits/_template.md +0 -81
  847. package/docs/release-runbook.md +0 -141
  848. package/docs/role-experiences.md +0 -19
  849. package/docs/safety.md +0 -30
  850. package/docs/second-brain-scope.md +0 -116
  851. package/docs/self-review-gate.md +0 -65
  852. package/docs/setup/enterprise-and-offline.md +0 -201
  853. package/docs/setup/mcp-client-config.md +0 -358
  854. package/docs/setup/mcp-cloud-endpoints.md +0 -116
  855. package/docs/setup/mcp-cloud-registry-listing.md +0 -99
  856. package/docs/setup/mcp-cloud-setup.md +0 -183
  857. package/docs/setup/mcp-r2-bootstrap.md +0 -82
  858. package/docs/setup/mcp-server-docker.md +0 -101
  859. package/docs/setup/per-ide/aider.md +0 -48
  860. package/docs/setup/per-ide/antigravity.md +0 -68
  861. package/docs/setup/per-ide/augment.md +0 -89
  862. package/docs/setup/per-ide/claude-code.md +0 -97
  863. package/docs/setup/per-ide/claude-desktop.md +0 -207
  864. package/docs/setup/per-ide/cline.md +0 -43
  865. package/docs/setup/per-ide/codebuddy.md +0 -63
  866. package/docs/setup/per-ide/codex.md +0 -46
  867. package/docs/setup/per-ide/continue.md +0 -68
  868. package/docs/setup/per-ide/copilot.md +0 -80
  869. package/docs/setup/per-ide/cursor.md +0 -125
  870. package/docs/setup/per-ide/droid.md +0 -65
  871. package/docs/setup/per-ide/gemini-cli.md +0 -45
  872. package/docs/setup/per-ide/jetbrains.md +0 -76
  873. package/docs/setup/per-ide/kilocode.md +0 -66
  874. package/docs/setup/per-ide/kiro.md +0 -72
  875. package/docs/setup/per-ide/opencode.md +0 -62
  876. package/docs/setup/per-ide/qoder.md +0 -63
  877. package/docs/setup/per-ide/roocode.md +0 -68
  878. package/docs/setup/per-ide/trae.md +0 -63
  879. package/docs/setup/per-ide/warp.md +0 -63
  880. package/docs/setup/per-ide/windsurf.md +0 -109
  881. package/docs/setup/per-ide/zed.md +0 -73
  882. package/docs/showcase.md +0 -209
  883. package/docs/skill-duplication-findings.md +0 -91
  884. package/docs/skills-catalog.md +0 -265
  885. package/docs/skills-taxonomy.md +0 -90
  886. package/docs/spawn-site-policy.md +0 -72
  887. package/docs/succession.md +0 -80
  888. package/docs/threat-model.md +0 -29
  889. package/docs/troubleshooting.md +0 -155
  890. package/docs/ui-track-mental-model.md +0 -121
  891. package/docs/us-vs-the-category.md +0 -38
  892. package/docs/value.md +0 -86
  893. package/docs/walkthroughs/assets/workspace-role-grid.png +0 -0
  894. package/docs/walkthroughs/assets/workspace-session-started.png +0 -0
  895. package/docs/walkthroughs/assets/workspace-task-picker.png +0 -0
  896. package/docs/walkthroughs/daily-workspace-a11y.md +0 -87
  897. package/docs/walkthroughs/daily-workspace.md +0 -127
  898. package/docs/wedge/production-validator/README.md +0 -81
  899. package/docs/wedge/production-validator/first-run-check.sh +0 -42
  900. package/docs/wedge/production-validator/production-validator.md +0 -83
  901. package/docs/wizard.md +0 -173
@@ -0,0 +1,191 @@
1
+ #!/usr/bin/env tsx
2
+ /**
3
+ * PreToolUse code-graph nudge (ADR-124 Phase 4) — deterministic, warn-only.
4
+ *
5
+ * When a code-graph source is available and the agent is about to search or
6
+ * read source files, surface a one-line reminder to query the graph first.
7
+ * NEVER blocks (dispatcher contract: 0 allow · 2 warn) — Source G's strict
8
+ * block-the-first-read mode is deliberately NOT ported (blocking reads on a
9
+ * possibly-stale index violates the minimal-safe-diff posture). Once per
10
+ * session (a latch keyed by session id), so it cannot nag.
11
+ *
12
+ * Default-OFF. Fires only when `hooks.code_graph.enabled: true`. Disabled /
13
+ * missing / already-latched → no-op exit 0. fail_closed: false — any error
14
+ * returns allow; a token optimisation must never break a tool call.
15
+ *
16
+ * Branches (first eligible search/read this session):
17
+ * present + fresh → "query the graph first"
18
+ * present + stale → "index N commits behind — rebuild"
19
+ * absent → "no graph — build one?"
20
+ */
21
+ import fs from 'node:fs';
22
+ import path from 'node:path';
23
+ import { fileURLToPath, pathToFileURL } from 'node:url';
24
+
25
+ import { detectSources, pickSource } from '../code_graph/detect.js';
26
+ import { readHookStdin } from './hook_stdin.js';
27
+
28
+ const SETTINGS_FILE = '.agent-settings.yml';
29
+ const EXIT_ALLOW = 0;
30
+ const EXIT_WARN = 2;
31
+ const CODE_EXT = /\.(php|ts|tsx|mts|cts|js|jsx|mjs|cjs)$/i;
32
+
33
+ type JsonValue = string | number | boolean | null | JsonValue[] | { [k: string]: JsonValue };
34
+ type JsonObject = { [k: string]: JsonValue };
35
+
36
+ function isObject(v: unknown): v is JsonObject {
37
+ return typeof v === 'object' && v !== null && !Array.isArray(v);
38
+ }
39
+
40
+ /** `hooks.code_graph.enabled: true` mini-parser (mirrors rtk_wrap_hook). */
41
+ export function enabled(root: string): boolean {
42
+ const f = path.join(root, SETTINGS_FILE);
43
+ let text: string;
44
+ try {
45
+ if (!fs.statSync(f).isFile()) return false;
46
+ text = fs.readFileSync(f, 'utf-8');
47
+ } catch {
48
+ return false;
49
+ }
50
+ let inHooks = false;
51
+ let inCg = false;
52
+ for (const raw of text.split(/\r\n|\r|\n/)) {
53
+ const line = raw.replace(/\s+$/, '');
54
+ if (!line || line.replace(/^\s+/, '').startsWith('#')) continue;
55
+ if (!(line.startsWith(' ') || line.startsWith('\t'))) {
56
+ inHooks = /^hooks\s*:\s*$/.test(line);
57
+ inCg = false;
58
+ continue;
59
+ }
60
+ if (inHooks) {
61
+ if (/^\s+code_graph\s*:\s*$/.test(line)) {
62
+ inCg = true;
63
+ continue;
64
+ }
65
+ if (inCg && /^\s{0,3}\S/.test(line)) inCg = false;
66
+ }
67
+ if (inCg && /^\s+enabled\s*:\s*true\b/.test(line)) return true;
68
+ }
69
+ return false;
70
+ }
71
+
72
+ interface ToolIntent {
73
+ isSearch: boolean;
74
+ isCodeRead: boolean;
75
+ }
76
+
77
+ /** Best-effort read of the intercepted tool + its target from the envelope. */
78
+ export function classifyTool(envelope: JsonObject): ToolIntent {
79
+ const payload = isObject(envelope['payload']) ? envelope['payload'] : envelope;
80
+ const nameVal =
81
+ payload['tool_name'] ?? payload['toolName'] ?? payload['tool'] ?? envelope['tool_name'] ?? envelope['tool'];
82
+ const name = typeof nameVal === 'string' ? nameVal : '';
83
+ const ti = (isObject(payload['tool_input']) ? payload['tool_input'] : envelope['tool_input']) as
84
+ | JsonObject
85
+ | undefined;
86
+ const isSearch = name === 'Grep' || name === 'Glob';
87
+ let isCodeRead = false;
88
+ if (name === 'Read' && isObject(ti)) {
89
+ const fp = ti['file_path'] ?? ti['path'];
90
+ if (typeof fp === 'string') isCodeRead = CODE_EXT.test(fp);
91
+ }
92
+ return { isSearch, isCodeRead };
93
+ }
94
+
95
+ function sessionId(envelope: JsonObject): string {
96
+ const s = envelope['session_id'] ?? envelope['sessionId'];
97
+ return typeof s === 'string' && s ? s : 'default';
98
+ }
99
+
100
+ function latchFile(root: string): string {
101
+ return path.join(root, 'agents', 'runtime', 'state', 'code-graph-nudge.json');
102
+ }
103
+ function alreadyNudged(root: string, session: string): boolean {
104
+ try {
105
+ const state = JSON.parse(fs.readFileSync(latchFile(root), 'utf-8')) as Record<string, boolean>;
106
+ return state[session] === true;
107
+ } catch {
108
+ return false;
109
+ }
110
+ }
111
+ function latch(root: string, session: string): void {
112
+ try {
113
+ const p = latchFile(root);
114
+ let state: Record<string, boolean> = {};
115
+ try {
116
+ state = JSON.parse(fs.readFileSync(p, 'utf-8')) as Record<string, boolean>;
117
+ } catch {
118
+ /* fresh */
119
+ }
120
+ state[session] = true;
121
+ fs.mkdirSync(path.dirname(p), { recursive: true });
122
+ fs.writeFileSync(p, JSON.stringify(state));
123
+ } catch {
124
+ /* fail-open: a persistence failure must not break the tool call */
125
+ }
126
+ }
127
+
128
+ const NATIVE_CACHE = path.join('agents', 'runtime', 'state', 'code-graph-v1.json');
129
+
130
+ /** The nudge line for the current source state (≤40 tokens, one line). */
131
+ export function nudgeReason(root: string): string {
132
+ const verdicts = detectSources(root, path.join(root, NATIVE_CACHE));
133
+ const picked = pickSource(verdicts);
134
+ if (!picked) {
135
+ return 'No code-graph found. For "who calls / where used / impact" run `agent-config code-graph refresh` once, then `agent-config code-graph query <symbol>` instead of grepping blind.';
136
+ }
137
+ if (picked.stale) {
138
+ return `code-graph is ${picked.commits_behind ?? 'N'} commit(s) behind — rebuild with \`agent-config code-graph refresh\` before trusting relationship answers.`;
139
+ }
140
+ return 'A fresh code-graph is present — for structure questions run `agent-config code-graph query|affected <symbol>` first; grep is the fallback (say which answered).';
141
+ }
142
+
143
+ export function main(): number {
144
+ let envelope: JsonValue;
145
+ try {
146
+ const raw = readHookStdin();
147
+ envelope = raw.trim() ? (JSON.parse(raw) as JsonValue) : {};
148
+ } catch {
149
+ return EXIT_ALLOW;
150
+ }
151
+ if (!isObject(envelope)) return EXIT_ALLOW;
152
+
153
+ const cwd = envelope['cwd'];
154
+ const pr = envelope['workspace_root'] ?? envelope['project_root'];
155
+ const root = typeof cwd === 'string' && cwd ? cwd : typeof pr === 'string' && pr ? pr : '.';
156
+ if (!enabled(root)) return EXIT_ALLOW;
157
+
158
+ const { isSearch, isCodeRead } = classifyTool(envelope);
159
+ if (!isSearch && !isCodeRead) return EXIT_ALLOW;
160
+
161
+ const session = sessionId(envelope);
162
+ if (alreadyNudged(root, session)) return EXIT_ALLOW; // once per session
163
+
164
+ let reason: string;
165
+ try {
166
+ reason = nudgeReason(root);
167
+ } catch {
168
+ return EXIT_ALLOW;
169
+ }
170
+ latch(root, session);
171
+ process.stdout.write(`${JSON.stringify({ decision: 'warn', reason })}\n`);
172
+ return EXIT_WARN;
173
+ }
174
+
175
+ // Bundle-safety: never auto-run when inlined into an esbuild bundle, where
176
+ // every module shares the bundle's `import.meta.url` (see cmd_migrate.ts).
177
+ declare const __AGENT_CONFIG_BUNDLE__: boolean | undefined;
178
+ function isCliEntry(): boolean {
179
+ if (typeof __AGENT_CONFIG_BUNDLE__ !== 'undefined' && __AGENT_CONFIG_BUNDLE__) {
180
+ return false;
181
+ }
182
+ if (process.argv[1] === undefined) return false;
183
+ const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
184
+ if (import.meta.url === argvUrl) return true;
185
+ try {
186
+ return fs.realpathSync(fileURLToPath(import.meta.url)) === fs.realpathSync(path.resolve(process.argv[1]));
187
+ } catch {
188
+ return false;
189
+ }
190
+ }
191
+ if (isCliEntry()) process.exit(main());
@@ -0,0 +1,75 @@
1
+ /**
2
+ * concern_registry — in-process concern table for the single-process
3
+ * hook dispatcher (road-to-credible-install Phase 1).
4
+ *
5
+ * Maps every `hook_manifest.yaml` concern script path to its statically
6
+ * imported module so the dispatcher can run concerns IN-PROCESS instead of
7
+ * re-spawning tsx per concern (the verified ~1.6 s p50 hot path). Static
8
+ * imports are deliberate: esbuild folds the whole table into
9
+ * `dist/hooks/dispatch.js`, so one `node` start covers dispatcher + every
10
+ * concern.
11
+ *
12
+ * Parity is CI-enforced (tests/hooks/concern_registry_parity.test.ts):
13
+ * every concern in the manifest MUST have a registry entry — a new concern
14
+ * that forgets the registry line falls back to the spawn path and silently
15
+ * reintroduces the latency class this table removed.
16
+ *
17
+ * Invocation contract (mirrors the historical child process exactly):
18
+ * - stdin → hook_stdin override (concerns read via readHookStdin())
19
+ * - argv → process.argv swapped to [node, <script>, ...args] for the call
20
+ * - cwd → process.chdir(workspace) for the call, restored after
21
+ * - stdout/stderr → captured via write-swap, returned to the dispatcher
22
+ * - rc → the concern's `main()` return value (undefined → 0)
23
+ * - crash → caught by the dispatcher and mapped to rc 3 (fail-open /
24
+ * fail-closed reduction unchanged)
25
+ */
26
+
27
+ import { main as chatHistoryMain } from '../chat_history.js';
28
+ import { main as hotContextMain } from '../hot_context_hook.js';
29
+ import { main as roadmapProgressMain } from '../roadmap_progress_hook.js';
30
+ import { main as onboardingGateMain } from '../onboarding_gate_hook.js';
31
+ import { main as contextHygieneMain } from '../context_hygiene_hook.js';
32
+ import { main as verifyBeforeCompleteMain } from '../verify_before_complete_hook.js';
33
+ import { main as minimalSafeDiffMain } from '../minimal_safe_diff_hook.js';
34
+ import { main as injectionScanMain } from '../injection_scan_hook.js';
35
+ import { main as memoryLearnMain } from '../memory_learn_hook.js';
36
+ import { main as firstRunGateMain } from '../first_run_gate_hook.js';
37
+ import { main as profileStalenessMain } from '../profile_staleness_hook.js';
38
+ import { main as wrapperFreshnessMain } from '../wrapper_freshness_hook.js';
39
+ import { main as surfaceProbeMain } from '../surface_probe_hook.js';
40
+ import { main as teamReviewGateMain } from '../team_review_gate_hook.js';
41
+ import { main as prUrlReminderMain } from '../pr_url_reminder_hook.js';
42
+ import { main as sessionCanaryMain } from '../session_canary_hook.js';
43
+ import { main as blockNoVerifyMain } from './block_no_verify.js';
44
+ import { main as blockKernelRuleWritesMain } from './block_kernel_rule_writes.js';
45
+ import { main as rtkWrapMain } from './rtk_wrap_hook.js';
46
+ import { main as designSlopMain } from './design_slop_hook.js';
47
+ import { main as codeGraphNudgeMain } from './code_graph_nudge_hook.js';
48
+
49
+ /** A concern `main` — argv-taking or not; both shapes exist. */
50
+ export type ConcernMain = (argv?: string[]) => number | undefined | void;
51
+
52
+ /** Keyed by the manifest's `script:` value (repo-relative path). */
53
+ export const CONCERN_REGISTRY: Readonly<Record<string, ConcernMain>> = {
54
+ 'src/scripts/chat_history.ts': chatHistoryMain as ConcernMain,
55
+ 'src/scripts/hot_context_hook.ts': hotContextMain as ConcernMain,
56
+ 'src/scripts/roadmap_progress_hook.ts': roadmapProgressMain as ConcernMain,
57
+ 'src/scripts/onboarding_gate_hook.ts': onboardingGateMain as ConcernMain,
58
+ 'src/scripts/context_hygiene_hook.ts': contextHygieneMain as ConcernMain,
59
+ 'src/scripts/verify_before_complete_hook.ts': verifyBeforeCompleteMain as ConcernMain,
60
+ 'src/scripts/minimal_safe_diff_hook.ts': minimalSafeDiffMain as ConcernMain,
61
+ 'src/scripts/injection_scan_hook.ts': injectionScanMain as ConcernMain,
62
+ 'src/scripts/memory_learn_hook.ts': memoryLearnMain as ConcernMain,
63
+ 'src/scripts/first_run_gate_hook.ts': firstRunGateMain as ConcernMain,
64
+ 'src/scripts/profile_staleness_hook.ts': profileStalenessMain as ConcernMain,
65
+ 'src/scripts/wrapper_freshness_hook.ts': wrapperFreshnessMain as ConcernMain,
66
+ 'src/scripts/surface_probe_hook.ts': surfaceProbeMain as ConcernMain,
67
+ 'src/scripts/team_review_gate_hook.ts': teamReviewGateMain as ConcernMain,
68
+ 'src/scripts/pr_url_reminder_hook.ts': prUrlReminderMain as ConcernMain,
69
+ 'src/scripts/session_canary_hook.ts': sessionCanaryMain as ConcernMain,
70
+ 'src/scripts/hooks/block_no_verify.ts': blockNoVerifyMain as ConcernMain,
71
+ 'src/scripts/hooks/block_kernel_rule_writes.ts': blockKernelRuleWritesMain as ConcernMain,
72
+ 'src/scripts/hooks/rtk_wrap_hook.ts': rtkWrapMain as ConcernMain,
73
+ 'src/scripts/hooks/design_slop_hook.ts': designSlopMain as ConcernMain,
74
+ 'src/scripts/hooks/code_graph_nudge_hook.ts': codeGraphNudgeMain as ConcernMain,
75
+ };
@@ -24,6 +24,7 @@ import path from "node:path";
24
24
  import { fileURLToPath, pathToFileURL } from "node:url";
25
25
  import { type DesignContext } from "../design_slop_rules.js";
26
26
  import { loadDesignContext, scanFile } from "../lint_design_slop.js";
27
+ import { readHookStdin } from "./hook_stdin.js";
27
28
 
28
29
  const SETTINGS_FILE = ".agent-settings.yml";
29
30
  const EXIT_ALLOW = 0;
@@ -109,11 +110,7 @@ function writeState(root: string, state: Record<string, number>): void {
109
110
  }
110
111
 
111
112
  function readStdin(): string {
112
- try {
113
- return fs.readFileSync(0, "utf-8");
114
- } catch {
115
- return "";
116
- }
113
+ return readHookStdin();
117
114
  }
118
115
 
119
116
  export function main(): number {
@@ -175,7 +172,13 @@ export function main(): number {
175
172
  return EXIT_WARN;
176
173
  }
177
174
 
175
+ // Bundle-safety: never auto-run when inlined into an esbuild bundle, where
176
+ // every module shares the bundle's `import.meta.url` (see cmd_migrate.ts).
177
+ declare const __AGENT_CONFIG_BUNDLE__: boolean | undefined;
178
178
  function _isCliEntry(): boolean {
179
+ if (typeof __AGENT_CONFIG_BUNDLE__ !== 'undefined' && __AGENT_CONFIG_BUNDLE__) {
180
+ return false;
181
+ }
179
182
  if (process.argv[1] === undefined) {
180
183
  return false;
181
184
  }
@@ -0,0 +1,37 @@
1
+ /**
2
+ * dispatch_entry — bundle entry point for the precompiled hook dispatcher.
3
+ *
4
+ * road-to-credible-install Phase 1: `npm run build:hooks` bundles this file
5
+ * (dispatcher + concern registry + every concern module) into
6
+ * `dist/hooks/dispatch.js` so a hook event costs ONE node start — no tsx,
7
+ * no per-concern re-spawn. Invoked either
8
+ * - directly: `node dist/hooks/dispatch.js --platform … --event …`, or
9
+ * - in-process from the CLI's native `dispatch:hook` route (dynamic
10
+ * import; the CLI process itself then runs the whole dispatch).
11
+ */
12
+ import * as path from 'node:path';
13
+ import { fileURLToPath } from 'node:url';
14
+
15
+ import { main } from './dispatch_hook.js';
16
+
17
+ /**
18
+ * Direct-invocation detection. Under the esbuild bundle, EVERY inlined
19
+ * module's `import.meta.url` is the bundle file — so a plain
20
+ * argv[1]-vs-self comparison would make the CLI-entry guards of ALL
21
+ * inlined modules (lint scripts, sidecars, …) false-fire at import time
22
+ * and hijack the dispatch argv. The build banner therefore detects
23
+ * `node dist/hooks/dispatch.js` BEFORE any module code runs, sets the
24
+ * global marker, and rewrites argv[1] to a sentinel so no inlined guard
25
+ * can match. Only this entry consults the marker. The plain comparison
26
+ * below covers the unbundled path (`tsx src/scripts/hooks/dispatch_entry.ts`).
27
+ */
28
+ const _selfPath = fileURLToPath(import.meta.url);
29
+ const _invokedDirectly =
30
+ (globalThis as { __AC_HOOKS_BUNDLE_DIRECT?: boolean }).__AC_HOOKS_BUNDLE_DIRECT === true ||
31
+ (process.argv[1] !== undefined && path.resolve(process.argv[1]) === path.resolve(_selfPath));
32
+
33
+ if (_invokedDirectly) {
34
+ process.exitCode = main(process.argv.slice(2));
35
+ }
36
+
37
+ export { main };
@@ -42,6 +42,11 @@ import {
42
42
  is_replay_mode,
43
43
  } from "./state_io.js";
44
44
  import { log_dispatch_issue, fix_hint } from "./dispatch_issues.js";
45
+ import { CONCERN_REGISTRY, type ConcernMain } from "./concern_registry.js";
46
+ import {
47
+ setHookStdinOverride,
48
+ clearHookStdinOverride,
49
+ } from "./hook_stdin.js";
45
50
 
46
51
  // Free-form JSON values flow through every helper here; a documented
47
52
  // alias keeps the surface honest without `any` (ADR-200 § strict TS).
@@ -55,11 +60,14 @@ export type JsonValue =
55
60
  export type JsonObject = { [key: string]: JsonValue };
56
61
 
57
62
  // src/scripts/hooks/dispatch_hook.ts → parents[3] is the repo root.
63
+ // Bundled (dist/hooks/dispatch.js) the module sits two levels below the repo
64
+ // root; under tsx (src/scripts/hooks/) it sits three. The `__AGENT_CONFIG_BUNDLE__`
65
+ // sentinel (esbuild --define) picks the right depth (see cmd_migrate.ts).
66
+ declare const __AGENT_CONFIG_BUNDLE__: boolean | undefined;
67
+ const _IN_BUNDLE = typeof __AGENT_CONFIG_BUNDLE__ !== 'undefined' && __AGENT_CONFIG_BUNDLE__;
58
68
  const REPO_ROOT = path.resolve(
59
69
  path.dirname(fileURLToPath(import.meta.url)),
60
- "..",
61
- "..",
62
- "..",
70
+ ...(_IN_BUNDLE ? ["..", ".."] : ["..", "..", ".."]),
63
71
  );
64
72
  const MANIFEST_PATH = path.join(REPO_ROOT, "src", "scripts", "hook_manifest.yaml");
65
73
 
@@ -471,7 +479,115 @@ function _resolve_tsx_invocation(
471
479
  * through `tsx` (resolved from the package's `node_modules/.bin`, falling
472
480
  * back to `npx tsx`), mirroring how `run.ts` runs its `.ts` twins.
473
481
  */
482
+ /**
483
+ * Single-process dispatch (road-to-credible-install Phase 1): run a concern
484
+ * IN-PROCESS via the static registry instead of re-spawning a per-concern
485
+ * interpreter. Mirrors the child-process contract exactly — stdin via the
486
+ * hook_stdin override, argv swap, cwd = workspace, hardened env, captured
487
+ * stdout/stderr, crash → rc 3 (the caller applies the fail-open /
488
+ * fail-closed reduction unchanged).
489
+ *
490
+ * Escape hatch: AGENT_CONFIG_HOOKS_ISOLATED=1 forces the historical
491
+ * spawn-per-concern path (also used by the bench harness for A/B numbers).
492
+ *
493
+ * Known trade-off vs the spawn path: the 30 s kill-timeout cannot preempt
494
+ * in-process synchronous code. Concerns are repo-owned, budget-capped and
495
+ * fail-open; the latency budget gate (hook-latency-budget.json) is the
496
+ * standing regression net.
497
+ */
498
+ function _run_concern_inproc(
499
+ main_fn: ConcernMain,
500
+ concern: ConcernDef,
501
+ envelope: JsonObject,
502
+ ): RunResult {
503
+ const scriptAbs = path.join(REPO_ROOT, String(concern["script"]));
504
+ const argsList = Array.isArray(concern["args"])
505
+ ? concern["args"].map((a) => String(a))
506
+ : [];
507
+ argsList.push("--platform", String(envelope["platform"] || "generic"));
508
+ const workspace = String(envelope["workspace_root"] || process.cwd());
509
+
510
+ let out = "";
511
+ let err = "";
512
+ type WriteFn = typeof process.stdout.write;
513
+ const makeCapture =
514
+ (sink: (s: string) => void): WriteFn =>
515
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
516
+ ((chunk: any, enc?: any, cb?: any): boolean => {
517
+ sink(typeof chunk === "string" ? chunk : Buffer.from(chunk).toString("utf-8"));
518
+ const callback = typeof enc === "function" ? enc : cb;
519
+ if (typeof callback === "function") callback();
520
+ return true;
521
+ }) as WriteFn;
522
+
523
+ const prevStdoutWrite = process.stdout.write;
524
+ const prevStderrWrite = process.stderr.write;
525
+ const prevArgv = process.argv;
526
+ const prevCwd = process.cwd();
527
+ const prevEnv = { ...process.env };
528
+
529
+ const started = performance.now();
530
+ let rc = 0;
531
+ setHookStdinOverride(_compactJsonDumps(envelope));
532
+ process.stdout.write = makeCapture((s) => {
533
+ out += s;
534
+ });
535
+ process.stderr.write = makeCapture((s) => {
536
+ err += s;
537
+ });
538
+ try {
539
+ process.argv = [prevArgv[0] as string, scriptAbs, ...argsList];
540
+ // Same env-hardening the spawn path applied — concerns may spawn their
541
+ // own children (dashboard regen, git), which inherit process.env.
542
+ const hardened = hardenedSpawnEnv({ AGENT_CONFIG_PACKAGE_ROOT: REPO_ROOT });
543
+ for (const k of Object.keys(process.env)) {
544
+ if (!(k in hardened)) delete process.env[k];
545
+ }
546
+ Object.assign(process.env, hardened);
547
+ if (workspace !== prevCwd && _isDir(workspace)) {
548
+ process.chdir(workspace);
549
+ }
550
+ const result = main_fn(argsList);
551
+ rc = typeof result === "number" ? result : 0;
552
+ } catch (exc) {
553
+ rc = 3;
554
+ const msg = exc instanceof Error ? (exc.stack ?? exc.message) : String(exc);
555
+ err += `${String(concern["name"])}: ${msg}\n`;
556
+ log_dispatch_issue(
557
+ workspace,
558
+ String(concern["name"] || "unknown"),
559
+ "execution_failed",
560
+ `in-process concern crashed: ${exc instanceof Error ? exc.message : String(exc)}`,
561
+ fix_hint(),
562
+ );
563
+ } finally {
564
+ process.stdout.write = prevStdoutWrite;
565
+ process.stderr.write = prevStderrWrite;
566
+ process.argv = prevArgv;
567
+ for (const k of Object.keys(process.env)) {
568
+ if (!(k in prevEnv)) delete process.env[k];
569
+ }
570
+ Object.assign(process.env, prevEnv);
571
+ try {
572
+ if (process.cwd() !== prevCwd) process.chdir(prevCwd);
573
+ } catch {
574
+ /* original cwd vanished — keep going, fail-open */
575
+ }
576
+ clearHookStdinOverride();
577
+ }
578
+ const elapsed = Math.floor(performance.now() - started);
579
+ return { rc, stderr: err, stdout: out, duration_ms: elapsed };
580
+ }
581
+
474
582
  function _run_concern(concern: ConcernDef, envelope: JsonObject): RunResult {
583
+ // In-process fast path — the default whenever the concern is in the
584
+ // static registry (all manifest concerns; parity is CI-enforced).
585
+ if (process.env["AGENT_CONFIG_HOOKS_ISOLATED"] !== "1") {
586
+ const inproc = CONCERN_REGISTRY[String(concern["script"])];
587
+ if (inproc !== undefined) {
588
+ return _run_concern_inproc(inproc, concern, envelope);
589
+ }
590
+ }
475
591
  const script = path.join(REPO_ROOT, String(concern["script"]));
476
592
  const argsList = Array.isArray(concern["args"])
477
593
  ? concern["args"].map((a) => String(a))
@@ -654,6 +770,57 @@ function _write_feedback(
654
770
  }
655
771
  }
656
772
 
773
+ /**
774
+ * Checkable-rule trip counting (road-to-credible-install Phase 6, scoped P3
775
+ * cut): every concern that returns BLOCK (1) or WARN (2) — a violation the
776
+ * gate actually caught — increments a per-concern counter in
777
+ * `agents/runtime/state/rule-trips.json`. Extends the existing dispatcher
778
+ * feedback machinery only; the evaluator/umbrella surfaces read this file.
779
+ *
780
+ * PII-exclusion-by-construction: the schema carries ONLY concern ids,
781
+ * integer counters, and ISO dates — no field capable of holding free-form
782
+ * content, prompt text, or file bodies. Never widen it.
783
+ *
784
+ * Fail-open (a broken counter must never affect dispatch), skipped in
785
+ * replay mode like the feedback dir.
786
+ */
787
+ function _record_rule_trips(envelope: JsonObject, entries: FeedbackEntry[]): void {
788
+ if (is_replay_mode()) return;
789
+ const tripped = entries.filter(
790
+ (e) => e["exit_code"] === EXIT_BLOCK || e["exit_code"] === EXIT_WARN,
791
+ );
792
+ if (tripped.length === 0) return;
793
+ try {
794
+ const workspace = String(envelope["workspace_root"] || process.cwd());
795
+ const state_dir = path.join(workspace, "agents", "runtime", "state");
796
+ const target = path.join(state_dir, "rule-trips.json");
797
+ fs.mkdirSync(state_dir, { recursive: true });
798
+ let doc: JsonObject = { schema_version: 1, concerns: {} };
799
+ try {
800
+ const parsed = JSON.parse(fs.readFileSync(target, "utf-8")) as JsonObject;
801
+ if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) doc = parsed;
802
+ } catch {
803
+ /* absent or corrupt → fresh counter file */
804
+ }
805
+ const concerns = (doc["concerns"] ?? {}) as Record<string, JsonObject>;
806
+ const today = _now_iso().slice(0, 10);
807
+ for (const e of tripped) {
808
+ const name = String(e["concern"]);
809
+ const prev = (concerns[name] ?? { block: 0, warn: 0 }) as JsonObject;
810
+ concerns[name] = {
811
+ block: (Number(prev["block"]) || 0) + (e["exit_code"] === EXIT_BLOCK ? 1 : 0),
812
+ warn: (Number(prev["warn"]) || 0) + (e["exit_code"] === EXIT_WARN ? 1 : 0),
813
+ last_trip: today,
814
+ };
815
+ }
816
+ doc["schema_version"] = 1;
817
+ doc["concerns"] = concerns;
818
+ atomic_write_json(target, doc);
819
+ } catch {
820
+ /* fail-open — counters are observability, never dispatch-critical */
821
+ }
822
+ }
823
+
657
824
  function _parse_args(argv: string[]): Args {
658
825
  const args: Args = {
659
826
  platform: "",
@@ -850,6 +1017,7 @@ export function main(argv?: string[]): number {
850
1017
  }
851
1018
  const final_rc = _reduce(rcs);
852
1019
  _write_feedback(envelope, session_id, feedback_entries, final_rc, started_at);
1020
+ _record_rule_trips(envelope, feedback_entries);
853
1021
  if (context_blocks.length > 0 && final_rc === EXIT_ALLOW) {
854
1022
  process.stdout.write(context_blocks.join("\n\n") + "\n");
855
1023
  }
@@ -877,7 +1045,12 @@ function _readStdin(): string {
877
1045
  }
878
1046
  }
879
1047
 
1048
+ // Bundle-safety: never auto-run when inlined into an esbuild bundle, where
1049
+ // every module shares the bundle's `import.meta.url` (declare at top of file).
880
1050
  function _isCliEntry(): boolean {
1051
+ if (typeof __AGENT_CONFIG_BUNDLE__ !== 'undefined' && __AGENT_CONFIG_BUNDLE__) {
1052
+ return false;
1053
+ }
881
1054
  if (process.argv[1] === undefined) {
882
1055
  return false;
883
1056
  }
@@ -0,0 +1,42 @@
1
+ /**
2
+ * hook_stdin — the single stdin seam for hook concern scripts.
3
+ *
4
+ * road-to-credible-install Phase 1 (single-process dispatch): concern
5
+ * scripts historically read their JSON envelope with `fs.readFileSync(0)`.
6
+ * That only works when each concern is its own child process. Under the
7
+ * in-process dispatcher (dist/hooks bundle) all concerns run inside ONE
8
+ * node process whose fd 0 carries the PLATFORM payload, already consumed
9
+ * by the dispatcher — so the dispatcher injects the per-concern envelope
10
+ * here instead.
11
+ *
12
+ * Contract:
13
+ * - Standalone invocation (a concern run directly as its own process —
14
+ * the historical path, still supported): no override is set, and
15
+ * `readHookStdin()` falls through to `fs.readFileSync(0, 'utf-8')`.
16
+ * - In-process invocation: the dispatcher calls
17
+ * `setHookStdinOverride(raw)` before the concern's `main()` and
18
+ * `clearHookStdinOverride()` after. Nesting is not supported (concerns
19
+ * never dispatch concerns).
20
+ */
21
+ import * as fs from 'node:fs';
22
+
23
+ let _override: string | null = null;
24
+
25
+ export function setHookStdinOverride(raw: string): void {
26
+ _override = raw;
27
+ }
28
+
29
+ export function clearHookStdinOverride(): void {
30
+ _override = null;
31
+ }
32
+
33
+ /** TTY-safe stdin read: injected override first, else fd 0, else "". */
34
+ export function readHookStdin(): string {
35
+ if (_override !== null) return _override;
36
+ try {
37
+ if (process.stdin.isTTY) return '';
38
+ return fs.readFileSync(0, 'utf-8');
39
+ } catch {
40
+ return '';
41
+ }
42
+ }