@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,131 @@
1
+ /**
2
+ * Detect whether AC is currently running under an agent-switch (AS)
3
+ * profile (`road-to-reciprocal-ecosystem.md` Phase 2 — correctness
4
+ * work, not the Phase 1 promotion card).
5
+ *
6
+ * Pure and injectable: reads only the supplied environment map, no
7
+ * filesystem I/O. Detection is deliberately topology-free — it never
8
+ * needs to understand AS's on-disk share model (that lives in
9
+ * `sharedWriteCheck.ts`, which DOES touch disk via `lstat`).
10
+ *
11
+ * AS root resolution mirrors `agent-switch/src/profiles.ts:11`:
12
+ * `AGENT_SWITCH_HOME` env override, else `~/.agent-switch`. Profile
13
+ * config dirs live at `<ROOT>/<provider>/<name>/config` (profiles.ts
14
+ * :143-145). Provider env vars mirror `agent-switch/src/providers.ts`:
15
+ * claude → `CLAUDE_CONFIG_DIR`, codex → `CODEX_HOME`. `HOME`
16
+ * (antigravity's provider var) is deliberately NOT checked here — it
17
+ * is set on every process, so treating it as an AS signal would
18
+ * false-positive constantly; antigravity profile detection is left to
19
+ * a future, more specific probe.
20
+ */
21
+ import { homedir } from 'node:os';
22
+ import * as path from 'node:path';
23
+
24
+ export interface AgentSwitchProfile {
25
+ active: boolean;
26
+ provider: string | null;
27
+ profile: string | null;
28
+ }
29
+
30
+ const INACTIVE: AgentSwitchProfile = { active: false, provider: null, profile: null };
31
+
32
+ /** Provider env vars checked, in priority order (claude wins on a tie). */
33
+ const PROVIDER_ENV_VARS: readonly string[] = ['CLAUDE_CONFIG_DIR', 'CODEX_HOME'];
34
+
35
+ interface AgentSwitchMatch {
36
+ /** The resolved AS root implied by the matching env var. */
37
+ root: string;
38
+ /** Path segments below `root` (e.g. `[provider, profile, 'config']`). */
39
+ afterRoot: string[];
40
+ }
41
+
42
+ /** Expand a leading `~` the way a shell would, for env values set programmatically. */
43
+ function expandTilde(p: string): string {
44
+ if (p === '~') return homedir();
45
+ if (p.startsWith('~/') || (process.platform === 'win32' && p.startsWith('~\\'))) {
46
+ return path.join(homedir(), p.slice(2));
47
+ }
48
+ return p;
49
+ }
50
+
51
+ function normalize(p: string): string {
52
+ return path.resolve(expandTilde(p));
53
+ }
54
+
55
+ function nonEmpty(v: string | undefined): v is string {
56
+ return typeof v === 'string' && v.trim() !== '';
57
+ }
58
+
59
+ /**
60
+ * Find the first provider env var whose (normalized) value lies
61
+ * inside the AS root, and return the root + the path segments below
62
+ * it. Shared by `detectAgentSwitchProfile` and `resolveAgentSwitchRoot`
63
+ * so both stay in lockstep with a single matching rule.
64
+ */
65
+ function resolveMatch(env: NodeJS.ProcessEnv): AgentSwitchMatch | null {
66
+ const overrideRaw = env['AGENT_SWITCH_HOME'];
67
+ const overrideRoot = nonEmpty(overrideRaw) ? normalize(overrideRaw) : null;
68
+
69
+ for (const varName of PROVIDER_ENV_VARS) {
70
+ const raw = env[varName];
71
+ if (!nonEmpty(raw)) continue;
72
+ const candidate = normalize(raw);
73
+
74
+ let root: string | null = null;
75
+ if (overrideRoot !== null) {
76
+ if (candidate === overrideRoot || candidate.startsWith(overrideRoot + path.sep)) {
77
+ root = overrideRoot;
78
+ }
79
+ } else {
80
+ const bareMarker = `${path.sep}.agent-switch`;
81
+ const nestedMarker = `${bareMarker}${path.sep}`;
82
+ if (candidate.endsWith(bareMarker)) {
83
+ root = candidate;
84
+ } else {
85
+ const idx = candidate.indexOf(nestedMarker);
86
+ if (idx !== -1) root = candidate.slice(0, idx + bareMarker.length);
87
+ }
88
+ }
89
+ if (root === null) continue;
90
+
91
+ const rest = candidate === root ? '' : candidate.slice(root.length + 1);
92
+ const afterRoot = rest === '' ? [] : rest.split(path.sep).filter((s) => s.length > 0);
93
+ return { root, afterRoot };
94
+ }
95
+ return null;
96
+ }
97
+
98
+ /**
99
+ * Detect the active AS profile (if any) from the current environment.
100
+ *
101
+ * - Not inside `.agent-switch` at all → `{ active: false, ... }`.
102
+ * - Inside the AS root, but the env var points AT the root itself
103
+ * (no `<provider>/<profile>` segments below it) → treated as
104
+ * inactive; an env var pointing at the bare root is not a profile
105
+ * directory.
106
+ * - Inside the AS root with only one segment below it (a provider dir
107
+ * with no profile name) → active, but unparseable (`provider`/
108
+ * `profile` both `null`).
109
+ * - Inside the AS root with `<provider>/<profile>/...` below it →
110
+ * active, with `provider`/`profile` parsed from the first two
111
+ * segments.
112
+ */
113
+ export function detectAgentSwitchProfile(env: NodeJS.ProcessEnv = process.env): AgentSwitchProfile {
114
+ const match = resolveMatch(env);
115
+ if (match === null) return INACTIVE;
116
+ if (match.afterRoot.length === 0) return INACTIVE;
117
+ if (match.afterRoot.length < 2) return { active: true, provider: null, profile: null };
118
+ // `length >= 2` guaranteed above — `??` only satisfies noUncheckedIndexedAccess.
119
+ return { active: true, provider: match.afterRoot[0] ?? null, profile: match.afterRoot[1] ?? null };
120
+ }
121
+
122
+ /**
123
+ * Resolve the AS root directory implied by the environment (the same
124
+ * matching rule `detectAgentSwitchProfile` uses), for callers that
125
+ * need a boundary to stop an upward filesystem walk at — see
126
+ * `sharedWriteCheck.ts`. Returns `null` when no provider env var
127
+ * resolves inside an AS tree.
128
+ */
129
+ export function resolveAgentSwitchRoot(env: NodeJS.ProcessEnv = process.env): string | null {
130
+ return resolveMatch(env)?.root ?? null;
131
+ }
@@ -2,7 +2,7 @@
2
2
  * Atomic file writer — Phase A4 primitive.
3
3
  *
4
4
  * 1:1 port of the `tempfile.mkstemp` + `os.replace` pattern used across
5
- * `scripts/install.py` (see `_write_consumer_bridge_marker` ~line 3036).
5
+ * the retired Python installer's `_write_consumer_bridge_marker` (ADR-200).
6
6
  *
7
7
  * Contract:
8
8
  * 1. Open a sibling `.tmp.<rand>` file in the destination directory
@@ -26,7 +26,7 @@ import type { InstallTarget } from './types.js';
26
26
  /**
27
27
  * Settings-file name used as the strongest project-scope signal.
28
28
  *
29
- * Matches `SETTINGS_FILE` in `scripts/install.py`. Presence in `cwd`
29
+ * Matches `SETTINGS_FILE` in the retired Python installer (ADR-200). Presence in `cwd`
30
30
  * short-circuits scope detection to `'project'` without consulting
31
31
  * the manifest / AI-tool lists.
32
32
  */
@@ -0,0 +1,274 @@
1
+ /**
2
+ * rtk (Rust Token Killer) detection — two-stage identity probe.
3
+ *
4
+ * rtk is a THIRD-PARTY Apache-2.0 tool (upstream: https://github.com/rtk-ai/rtk,
5
+ * not an event4u project). Its binary name collides with an unrelated crate —
6
+ * `reachingforthejack/rtk` (Rust Type Kit), which is also what the bare
7
+ * crates.io `rtk` crate resolves to. Upstream's INSTALL.md documents the
8
+ * collision and the discriminator: `rtk gain` renders the token-savings
9
+ * dashboard only on Rust Token Killer.
10
+ *
11
+ * Stage 1 — presence: an executable named `rtk` resolvable on PATH.
12
+ * Stage 2 — identity: run `rtk gain` (short timeout) and judge the OUTPUT
13
+ * SIGNATURE, not the exit code (upstream documents no exit-code contract for
14
+ * `rtk gain`, and `rtk --version` does not distinguish the two tools — both
15
+ * print `rtk <ver>`). The signature is the dashboard header "RTK Token
16
+ * Savings" (captured live from rtk 0.43.0, 2026-07-28).
17
+ *
18
+ * Four states, never a boolean — a broken RIGHT tool is not the WRONG tool:
19
+ * { present: false }
20
+ * { present: true, identity: 'token-killer', version } — signature matched
21
+ * { present: true, identity: 'unknown-rtk' } — probe ran, output
22
+ * clearly not Token Killer (e.g. unknown-subcommand / usage error)
23
+ * { present: true, identity: 'unverified' } — timeout, spawn
24
+ * failure, crash, or ambiguous (empty) output
25
+ *
26
+ * Consumers: the wizard `detect-rtk` endpoint, the `rtk:detect` CLI readout,
27
+ * and the `rtk_wrap` PreToolUse hook (which gates on
28
+ * `identity === 'token-killer'` — never on bare presence). Contract:
29
+ * docs/contracts/rtk-detection.md.
30
+ */
31
+ import { spawnSync } from 'node:child_process';
32
+ import { existsSync, statSync, readFileSync, writeFileSync, mkdirSync } from 'node:fs';
33
+ import { homedir } from 'node:os';
34
+ import { delimiter, join, dirname } from 'node:path';
35
+
36
+ export const RTK_UPSTREAM_REPO = 'https://github.com/rtk-ai/rtk';
37
+
38
+ export type RtkIdentity = 'token-killer' | 'unknown-rtk' | 'unverified';
39
+
40
+ export interface RtkDetection {
41
+ /** An executable named `rtk` is resolvable on PATH. */
42
+ present: boolean;
43
+ /** Only set when present. */
44
+ identity?: RtkIdentity;
45
+ /** Only set when identity === 'token-killer' (from `rtk --version`). */
46
+ version?: string;
47
+ /** Resolved binary path (diagnostic; only set when present). */
48
+ binPath?: string;
49
+ }
50
+
51
+ /**
52
+ * Output signature of Rust Token Killer's `rtk gain` savings dashboard.
53
+ * Rust Type Kit has no `gain` subcommand and errors with a usage message
54
+ * that never contains this header.
55
+ */
56
+ const TOKEN_KILLER_GAIN_SIGNATURE = /RTK Token Savings/;
57
+
58
+ /** Probe timeout — `rtk gain` renders from a local DB (sub-second upstream). */
59
+ const PROBE_TIMEOUT_MS = 3000;
60
+
61
+ /** Resolve the first executable named `name` on the given PATH string. */
62
+ export function resolveBinaryOnPath(name: string, pathEnv?: string): string | null {
63
+ const pathVar = pathEnv ?? process.env['PATH'] ?? '';
64
+ if (pathVar.length === 0) return null;
65
+ const suffixes = process.platform === 'win32' ? ['', '.exe', '.cmd', '.bat'] : [''];
66
+ for (const dir of pathVar.split(delimiter)) {
67
+ if (dir.length === 0) continue;
68
+ for (const suffix of suffixes) {
69
+ const candidate = join(dir, `${name}${suffix}`);
70
+ if (existsSync(candidate)) return candidate;
71
+ }
72
+ }
73
+ return null;
74
+ }
75
+
76
+ export interface ProbeResult {
77
+ /** Process completed (spawned and exited, regardless of exit code). */
78
+ completed: boolean;
79
+ stdout: string;
80
+ stderr: string;
81
+ }
82
+
83
+ type ProbeFn = (binPath: string) => ProbeResult;
84
+
85
+ function runGainProbe(binPath: string): ProbeResult {
86
+ try {
87
+ const res = spawnSync(binPath, ['gain'], {
88
+ timeout: PROBE_TIMEOUT_MS,
89
+ encoding: 'utf-8',
90
+ windowsHide: true,
91
+ });
92
+ // spawn error or timeout/signal kill → not a completed probe.
93
+ if (res.error !== undefined || res.signal !== null) {
94
+ return { completed: false, stdout: res.stdout ?? '', stderr: res.stderr ?? '' };
95
+ }
96
+ return { completed: true, stdout: res.stdout ?? '', stderr: res.stderr ?? '' };
97
+ } catch {
98
+ return { completed: false, stdout: '', stderr: '' };
99
+ }
100
+ }
101
+
102
+ function readVersion(binPath: string): string | undefined {
103
+ try {
104
+ const res = spawnSync(binPath, ['--version'], {
105
+ timeout: PROBE_TIMEOUT_MS,
106
+ encoding: 'utf-8',
107
+ windowsHide: true,
108
+ });
109
+ const m = /^rtk\s+(\S+)/m.exec(res.stdout ?? '');
110
+ return m?.[1];
111
+ } catch {
112
+ return undefined;
113
+ }
114
+ }
115
+
116
+ /** Judge identity from a finished probe — output signature, never exit code. */
117
+ export function classifyGainOutput(probe: ProbeResult): RtkIdentity {
118
+ if (!probe.completed) return 'unverified';
119
+ const combined = `${probe.stdout}\n${probe.stderr}`;
120
+ if (TOKEN_KILLER_GAIN_SIGNATURE.test(probe.stdout)) return 'token-killer';
121
+ // Probe ran and produced output that is clearly not the savings dashboard
122
+ // (Rust Type Kit answers `gain` with a usage/unknown-subcommand error).
123
+ if (combined.trim().length > 0) return 'unknown-rtk';
124
+ // Completed silently with no output — ambiguous, don't accuse the tool.
125
+ return 'unverified';
126
+ }
127
+
128
+ export interface DetectRtkOptions {
129
+ /** Override PATH (tests / isolated probes). */
130
+ pathEnv?: string;
131
+ /** Override the gain probe (tests). */
132
+ probe?: ProbeFn;
133
+ /** Override the version read (tests). */
134
+ versionReader?: (binPath: string) => string | undefined;
135
+ }
136
+
137
+ /**
138
+ * Two-stage rtk detection. Never throws; failure modes collapse into
139
+ * `unverified` (fail-open for diagnostics, fail-CLOSED for consumers that
140
+ * gate behavior — `rtk_wrap` activates only on `token-killer`).
141
+ */
142
+ export function detectRtk(options: DetectRtkOptions = {}): RtkDetection {
143
+ const binPath = resolveBinaryOnPath('rtk', options.pathEnv);
144
+ if (binPath === null) return { present: false };
145
+ const probe = options.probe ?? runGainProbe;
146
+ const identity = classifyGainOutput(probe(binPath));
147
+ if (identity !== 'token-killer') return { present: true, identity, binPath };
148
+ const version = (options.versionReader ?? readVersion)(binPath);
149
+ return version === undefined
150
+ ? { present: true, identity, binPath }
151
+ : { present: true, identity, version, binPath };
152
+ }
153
+
154
+ /* ------------------------------------------------------------------ */
155
+ /* Cached variant — for high-frequency callers (PreToolUse hook). */
156
+ /* ------------------------------------------------------------------ */
157
+
158
+ interface IdentityCacheEntry {
159
+ binPath: string;
160
+ mtimeMs: number;
161
+ size: number;
162
+ identity: RtkIdentity;
163
+ version?: string;
164
+ checkedAt: string;
165
+ }
166
+
167
+ function cacheFile(): string {
168
+ return join(homedir(), '.event4u', 'agent-config', 'state', 'rtk-identity.json');
169
+ }
170
+
171
+ /**
172
+ * `detectRtk` with a user-global identity cache keyed on the resolved binary's
173
+ * path + mtime + size — the probe re-runs only when the binary changes. An
174
+ * `unverified` verdict is never cached (transient by definition). Any cache
175
+ * I/O error falls through to a live probe (fail-open).
176
+ */
177
+ export function detectRtkCached(options: DetectRtkOptions = {}): RtkDetection {
178
+ const binPath = resolveBinaryOnPath('rtk', options.pathEnv);
179
+ if (binPath === null) return { present: false };
180
+
181
+ let stat: { mtimeMs: number; size: number } | null = null;
182
+ try {
183
+ const st = statSync(binPath);
184
+ stat = { mtimeMs: st.mtimeMs, size: st.size };
185
+ } catch {
186
+ stat = null;
187
+ }
188
+
189
+ const file = cacheFile();
190
+ if (stat !== null) {
191
+ try {
192
+ const cached = JSON.parse(readFileSync(file, 'utf-8')) as IdentityCacheEntry;
193
+ if (
194
+ cached.binPath === binPath &&
195
+ cached.mtimeMs === stat.mtimeMs &&
196
+ cached.size === stat.size
197
+ ) {
198
+ return cached.version === undefined
199
+ ? { present: true, identity: cached.identity, binPath }
200
+ : { present: true, identity: cached.identity, version: cached.version, binPath };
201
+ }
202
+ } catch {
203
+ /* no / stale / unreadable cache — fall through to a live probe */
204
+ }
205
+ }
206
+
207
+ const detection = detectRtk(options);
208
+ if (stat !== null && detection.identity !== undefined && detection.identity !== 'unverified') {
209
+ const entry: IdentityCacheEntry = {
210
+ binPath,
211
+ mtimeMs: stat.mtimeMs,
212
+ size: stat.size,
213
+ identity: detection.identity,
214
+ checkedAt: new Date().toISOString(),
215
+ };
216
+ if (detection.version !== undefined) entry.version = detection.version;
217
+ try {
218
+ mkdirSync(dirname(file), { recursive: true });
219
+ writeFileSync(file, `${JSON.stringify(entry, null, 2)}\n`, 'utf-8');
220
+ } catch {
221
+ /* cache write is best-effort */
222
+ }
223
+ }
224
+ return detection;
225
+ }
226
+
227
+ /* ------------------------------------------------------------------ */
228
+ /* Per-OS install commands — verified upstream paths only. */
229
+ /* ------------------------------------------------------------------ */
230
+
231
+ export interface RtkInstallCommands {
232
+ /** The primary copy-and-run command for this platform. */
233
+ recommended: string;
234
+ /** Human-readable label for the recommended path. */
235
+ recommendedLabel: string;
236
+ /** Secondary/manual path (only where a packaged one may be unavailable). */
237
+ manual?: string;
238
+ manualLabel?: string;
239
+ /** Caveat the UI must surface next to the command. */
240
+ note?: string;
241
+ }
242
+
243
+ /**
244
+ * Per-OS install commands from verified upstream paths. NEVER emit a bare
245
+ * `cargo install rtk` — the crates.io `rtk` crate is the colliding Rust Type
246
+ * Kit, not Rust Token Killer.
247
+ */
248
+ export function rtkInstallCommands(platform: NodeJS.Platform = process.platform): RtkInstallCommands {
249
+ switch (platform) {
250
+ case 'darwin':
251
+ return {
252
+ recommended: 'brew install rtk',
253
+ recommendedLabel: 'Homebrew (official homebrew-core formula)',
254
+ };
255
+ case 'win32':
256
+ return {
257
+ recommended: 'winget install rtk-ai.rtk',
258
+ recommendedLabel: 'Recommended (automated, winget)',
259
+ manual: `Download rtk-x86_64-pc-windows-msvc.zip from ${RTK_UPSTREAM_REPO}/releases and place rtk.exe on PATH`,
260
+ manualLabel: 'Manual (all Windows versions, incl. winget-less images)',
261
+ note:
262
+ 'ripgrep is a documented Windows runtime dependency: `winget install BurntSushi.ripgrep.MSVC`. ' +
263
+ 'The winget path is documented upstream (microsoft/winget-pkgs manifests) but has not been live-verified by agent-config — verify with `rtk gain` after install.',
264
+ };
265
+ default:
266
+ // linux + everything POSIX-ish: upstream's install.sh (errors out
267
+ // on unsupported platforms itself; installs to ~/.local/bin).
268
+ return {
269
+ recommended: `curl -fsSL https://raw.githubusercontent.com/rtk-ai/rtk/master/install.sh | sh`,
270
+ recommendedLabel: "Upstream install.sh (installs to ~/.local/bin)",
271
+ note: 'Ensure ~/.local/bin is on PATH.',
272
+ };
273
+ }
274
+ }
@@ -36,10 +36,16 @@ import { rule_in_scope } from '../scripts/condense.js';
36
36
  */
37
37
  export const COMPAT_ALWAYS_EXCLUDED: readonly string[] = ['source-of-truth.md'];
38
38
 
39
- /** Workspace/pack scope read from consumer settings. `null` axis = unset. */
39
+ /**
40
+ * Workspace/pack/role scope read from consumer settings. `null` axis =
41
+ * unset. `roles` is optional (additive — road-to-lean-agent-init Phase 4,
42
+ * the subagent role-scoping axis) so pre-existing `RuleScope` literals
43
+ * without the field keep compiling unchanged.
44
+ */
40
45
  export interface RuleScope {
41
46
  readonly workspaces: readonly string[] | null;
42
47
  readonly packs: readonly string[] | null;
48
+ readonly roles?: readonly string[] | null;
43
49
  }
44
50
 
45
51
  export const LEGACY_ALL: RuleScope = { workspaces: null, packs: null };
@@ -66,6 +72,7 @@ export function ruleScopeFromSettings(settings: Record<string, unknown>): RuleSc
66
72
  return {
67
73
  workspaces: _list(p['rule_workspaces']),
68
74
  packs: _list(p['rule_packs']),
75
+ roles: _list(p['rule_roles']),
69
76
  };
70
77
  }
71
78
 
@@ -85,7 +92,7 @@ export function ruleFileArrives(sourcePath: string, scope: RuleScope): boolean {
85
92
  if (COMPAT_ALWAYS_EXCLUDED.includes(basename)) {
86
93
  return false;
87
94
  }
88
- return rule_in_scope(sourcePath, scope.workspaces, scope.packs);
95
+ return rule_in_scope(sourcePath, scope.workspaces, scope.packs, scope.roles ?? null);
89
96
  }
90
97
 
91
98
  /**
@@ -2,7 +2,7 @@
2
2
  * Core types for the unified TypeScript install engine (v4.0.0).
3
3
  *
4
4
  * Mirrors the on-disk schema used by the legacy Python installer
5
- * (`scripts/install.py`) so the v4 engine reads/writes the same
5
+ * (the retired Python installer, ADR-200) so the v4 engine reads/writes the same
6
6
  * `~/.event4u/agent-config/` tree and v2 manifest entries without a
7
7
  * migration step.
8
8
  *
@@ -10,7 +10,7 @@
10
10
  * apply, and conflict-resolution modules. Pure types, no runtime
11
11
  * dependencies.
12
12
  *
13
- * Reference: `scripts/install.py`
13
+ * Reference: the retired Python installer (ADR-200)
14
14
  * - `_file_entry()` → {@link FileEntry}
15
15
  * - `class ConflictPolicy` → {@link ConflictPolicy}
16
16
  * - v2 manifest `files_by_tool` → {@link InstallPlan.filesByTool}
@@ -63,7 +63,7 @@ export const USER_SCOPE_PATHS: Readonly<Record<string, string>> = {
63
63
 
64
64
  /**
65
65
  * Universal Anthropic-shaped skill bundle deployed to markdown-skills
66
- * tools. Mirrors `_CLAUDE_SKILL_BUNDLE` in `scripts/install.py`.
66
+ * tools. Mirrors `_CLAUDE_SKILL_BUNDLE` in the retired Python installer (ADR-200).
67
67
  */
68
68
  const CLAUDE_SKILL_BUNDLE: ReadonlyArray<readonly [string, string]> = [
69
69
  ['dist/agent-src/rules', 'rules'],
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Permanent wizard-recommendation dismissals, persisted at
3
+ * `~/.event4u/agent-config/wizard-dismissals.json`.
4
+ *
5
+ * A dismissed recommendation (e.g. `"agent-switch"`) never returns — there
6
+ * is deliberately NO un-dismiss function (S0.1 council verdict, 2026-07-28:
7
+ * a passive row the user closed once stays closed). The file lives in the
8
+ * user-global config root, not inside the installed package, so a
9
+ * dismissal survives package updates.
10
+ *
11
+ * `AGENT_CONFIG_WIZARD_DISMISSALS` overrides the path (tests only).
12
+ */
13
+ import { readFileSync, writeFileSync, mkdirSync } from 'node:fs';
14
+ import { homedir } from 'node:os';
15
+ import { resolve, dirname } from 'node:path';
16
+
17
+ function wizardDismissalsPath(): string {
18
+ const override = process.env['AGENT_CONFIG_WIZARD_DISMISSALS'];
19
+ if (override !== undefined && override.length > 0) return override;
20
+ return resolve(homedir(), '.event4u', 'agent-config', 'wizard-dismissals.json');
21
+ }
22
+
23
+ interface DismissalsFile {
24
+ dismissed?: unknown;
25
+ }
26
+
27
+ /**
28
+ * Return the recorded dismissal ids, or `[]` when absent / unreadable.
29
+ * Best-effort: a missing or corrupted file behaves as "nothing dismissed
30
+ * yet" rather than throwing.
31
+ */
32
+ export function readDismissedRecommendations(): readonly string[] {
33
+ try {
34
+ const raw = readFileSync(wizardDismissalsPath(), 'utf8');
35
+ const parsed = JSON.parse(raw) as DismissalsFile;
36
+ return Array.isArray(parsed.dismissed)
37
+ ? parsed.dismissed.filter((d): d is string => typeof d === 'string')
38
+ : [];
39
+ } catch {
40
+ return [];
41
+ }
42
+ }
43
+
44
+ /**
45
+ * Record `id` as permanently dismissed. Idempotent — a repeat call for an
46
+ * already-dismissed id is a no-op.
47
+ */
48
+ export function dismissRecommendation(id: string): void {
49
+ try {
50
+ const existing = readDismissedRecommendations();
51
+ if (existing.includes(id)) return;
52
+ const path = wizardDismissalsPath();
53
+ mkdirSync(dirname(path), { recursive: true, mode: 0o700 });
54
+ const record = { dismissed: [...existing, id] };
55
+ writeFileSync(path, `${JSON.stringify(record, null, 2)}\n`, { encoding: 'utf8', mode: 0o600 });
56
+ } catch {
57
+ // Best-effort: a failed write just means the recommendation may
58
+ // resurface on the next load — never throw out of a dismiss action.
59
+ }
60
+ }
@@ -30,7 +30,8 @@
30
30
  * lockfile-freshness · bridge-drift · mcp-mode · mcp-beta-readiness ·
31
31
  * offline-readiness · python-runtime · humanizer-runtime · tier-usage-readiness ·
32
32
  * council-cli · team ·
33
- * unsupported-combos · wizard-state.
33
+ * unsupported-combos · wizard-state · settings-review-pending ·
34
+ * memory-merge-union.
34
35
  * Each emits a structured `{id, status, message, remedy}` record with
35
36
  * `status` ∈ `ok` / `warn` / `fail` / `skipped` (rendered
36
37
  * `✅` / `⚠️` / `❌` / `⏭️`). `--check <id>` runs a single check.
@@ -88,6 +89,7 @@ import * as installed_lock from '../_lib/installed_lock.js';
88
89
  import * as installed_tools from '../_lib/installed_tools.js';
89
90
  import * as user_global_paths from '../_lib/user_global_paths.js';
90
91
  import * as global_deploy_inventory from '../_lib/global_deploy_inventory.js';
92
+ import * as sync_gitattributes from '../sync_gitattributes.js';
91
93
  import {
92
94
  PROJECT_ROOT_ENV,
93
95
  ROOT_OVERRIDE_ENV,
@@ -759,6 +761,7 @@ const CHECK_IDS = [
759
761
  'unsupported-combos',
760
762
  'wizard-state',
761
763
  'settings-review-pending',
764
+ 'memory-merge-union',
762
765
  ] as const;
763
766
 
764
767
  /** Checks that need only the project root and run regardless of a lockfile. */
@@ -782,6 +785,7 @@ const GLOBAL_CHECK_IDS: ReadonlySet<string> = new Set([
782
785
  'team',
783
786
  'wizard-state',
784
787
  'settings-review-pending',
788
+ 'memory-merge-union',
785
789
  ]);
786
790
 
787
791
  /** Checks that genuinely cannot run without the project manifest. */
@@ -2557,6 +2561,61 @@ function _check_settings_review_pending(): Dict {
2557
2561
  };
2558
2562
  }
2559
2563
 
2564
+ /**
2565
+ * `memory-merge-union` — read-only warn check (road-to-reachable-code-memory
2566
+ * Phase 5). The `merge=union` .gitattributes block lets two branches each
2567
+ * appending a NEW memory entry (intake JSONL, or the flat curated
2568
+ * `agents/memory/<type>.yml` files) merge cleanly instead of conflicting.
2569
+ * Without it, ordinary parallel memory writes on separate branches produce a
2570
+ * merge conflict the human has to resolve by hand. Never fails the run —
2571
+ * this is advisory, same posture as `offline-readiness`.
2572
+ */
2573
+ function _check_memory_merge_union(project_root: string): Dict {
2574
+ const remedy =
2575
+ 'run: npx tsx src/scripts/sync_gitattributes.ts (or `agent-config refresh --project`)';
2576
+ const target = path.join(project_root, sync_gitattributes.DEFAULT_GITATTRIBUTES);
2577
+ if (!pathExists(target)) {
2578
+ return {
2579
+ id: 'memory-merge-union',
2580
+ status: 'warn',
2581
+ message:
2582
+ 'no .gitattributes at project root — memory merge-safety attributes not applied',
2583
+ remedy,
2584
+ };
2585
+ }
2586
+ let text: string;
2587
+ try {
2588
+ text = readText(target);
2589
+ } catch (exc) {
2590
+ return {
2591
+ id: 'memory-merge-union',
2592
+ status: 'warn',
2593
+ message: `unreadable .gitattributes at ${target}: ${osErrorStr(exc)}`,
2594
+ remedy,
2595
+ };
2596
+ }
2597
+ const has_block = text.includes(sync_gitattributes.SECTION_HEADER);
2598
+ const has_intake_union = /agents\/memory\/intake\/\*\.jsonl\s+merge=union/.test(text);
2599
+ if (has_block && has_intake_union) {
2600
+ return {
2601
+ id: 'memory-merge-union',
2602
+ status: 'ok',
2603
+ message:
2604
+ '.gitattributes carries the memory merge-safety block (intake JSONL union-merge present)',
2605
+ remedy: '',
2606
+ };
2607
+ }
2608
+ return {
2609
+ id: 'memory-merge-union',
2610
+ status: 'warn',
2611
+ message: has_block
2612
+ ? '.gitattributes has the managed block but is missing the intake merge=union line'
2613
+ : '.gitattributes is missing the memory merge-safety block — parallel-branch ' +
2614
+ 'memory writes can conflict instead of merging',
2615
+ remedy,
2616
+ };
2617
+ }
2618
+
2560
2619
  interface JsonDecodeError {
2561
2620
  msg: string;
2562
2621
  lineno: number;
@@ -2691,6 +2750,7 @@ function _run_checks(
2691
2750
  'unsupported-combos': () => _check_unsupported_combos(manifest),
2692
2751
  'wizard-state': _check_wizard_state,
2693
2752
  'settings-review-pending': _check_settings_review_pending,
2753
+ 'memory-merge-union': () => _check_memory_merge_union(project_root),
2694
2754
  };
2695
2755
  const out: Dict[] = [];
2696
2756
  for (const cid of CHECK_IDS) {
@@ -2765,6 +2825,7 @@ function _run_checks_no_manifest(
2765
2825
  'unsupported-combos': () => _skipped_manifest_check('unsupported-combos'),
2766
2826
  'wizard-state': _check_wizard_state,
2767
2827
  'settings-review-pending': _check_settings_review_pending,
2828
+ 'memory-merge-union': () => _check_memory_merge_union(project_root),
2768
2829
  };
2769
2830
  const out: Dict[] = [];
2770
2831
  for (const cid of CHECK_IDS) {