@mycadet/assistant 0.12.9 → 0.12.10

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 (651) hide show
  1. package/Dockerfile +0 -8
  2. package/eslint-rules/__tests__/cli-no-daemon-internals.test.ts +1 -1
  3. package/openapi.yaml +62 -910
  4. package/package.json +3 -7
  5. package/scripts/build-test-fixtures.ts +1 -1
  6. package/scripts/generate-openapi.ts +22 -6
  7. package/scripts/postinstall.ts +4 -10
  8. package/scripts/run-tests.ts +0 -21
  9. package/src/__tests__/adaptive-thinking-repair.test.ts +19 -57
  10. package/src/__tests__/agent-loop.test.ts +0 -76
  11. package/src/__tests__/anthropic-provider.test.ts +6 -6
  12. package/src/__tests__/assert-not-live-db.ts +1 -1
  13. package/src/__tests__/assistant-id-boundary-guard.test.ts +3 -3
  14. package/src/__tests__/attachments-store-heic-normalize.test.ts +1 -1
  15. package/src/__tests__/attachments-store.test.ts +1 -1
  16. package/src/__tests__/audit-log-rotation.test.ts +1 -1
  17. package/src/__tests__/btw-routes.test.ts +1 -1
  18. package/src/__tests__/byok-default-profile-ensure.test.ts +21 -27
  19. package/src/__tests__/call-conversation-messages.test.ts +0 -5
  20. package/src/__tests__/call-recovery.test.ts +2 -7
  21. package/src/__tests__/call-routes-http.test.ts +0 -12
  22. package/src/__tests__/call-store.test.ts +2 -7
  23. package/src/__tests__/catalog-files.test.ts +7 -5
  24. package/src/__tests__/checker.test.ts +1 -1
  25. package/src/__tests__/cli-memory-v2-reembed-skills.test.ts +4 -4
  26. package/src/__tests__/cloud-client-verify-credential.test.ts +0 -4
  27. package/src/__tests__/cloud-credential-catalog-cli.test.ts +14 -14
  28. package/src/__tests__/cloud-profile-guard.test.ts +48 -401
  29. package/src/__tests__/compaction-events.test.ts +2 -2
  30. package/src/__tests__/config-loader-backfill.test.ts +74 -163
  31. package/src/__tests__/config-loader-cloud-defaults.test.ts +11 -11
  32. package/src/__tests__/config-loader-corrupt.test.ts +10 -10
  33. package/src/__tests__/config-loader-quarantine-notice.test.ts +7 -7
  34. package/src/__tests__/config-loader-validation-reset-notice.test.ts +11 -11
  35. package/src/__tests__/config-schema.test.ts +26 -27
  36. package/src/__tests__/config-set-route.test.ts +2 -6
  37. package/src/__tests__/conversation-agent-loop-inference-profile.test.ts +28 -300
  38. package/src/__tests__/conversation-agent-loop-overflow.test.ts +39 -246
  39. package/src/__tests__/conversation-agent-loop.test.ts +2 -58
  40. package/src/__tests__/conversation-clear-safety.test.ts +0 -30
  41. package/src/__tests__/conversation-inference-profile-route.test.ts +1 -1
  42. package/src/__tests__/conversation-queue.test.ts +1 -1
  43. package/src/__tests__/conversation-runtime-assembly.test.ts +1 -1
  44. package/src/__tests__/conversation-skill-tools.test.ts +4 -444
  45. package/src/__tests__/conversation-slash-commands.test.ts +1 -1
  46. package/src/__tests__/conversation-store.test.ts +1 -84
  47. package/src/__tests__/conversation-surface-state.test.ts +0 -16
  48. package/src/__tests__/credential-health-service.test.ts +14 -1
  49. package/src/__tests__/credential-record-retire.test.ts +1 -1
  50. package/src/__tests__/credential-record-write-through.test.ts +1 -1
  51. package/src/__tests__/credential-security-invariants.test.ts +0 -145
  52. package/src/__tests__/custom-profile-ensure.test.ts +1 -1
  53. package/src/__tests__/default-profile-catalog-fallback.test.ts +5 -15
  54. package/src/__tests__/deterministic-verification-control-plane.test.ts +0 -2
  55. package/src/__tests__/dictation-profile-store.test.ts +6 -6
  56. package/src/__tests__/disk-usage.test.ts +28 -164
  57. package/src/__tests__/docker-signing-key-bootstrap.test.ts +1 -1
  58. package/src/__tests__/embedding-cloud-proxy-selection.test.ts +1 -1
  59. package/src/__tests__/emit-event-signal.test.ts +1 -1
  60. package/src/__tests__/gateway-client-cloud-outbound.test.ts +3 -3
  61. package/src/__tests__/gateway-only-enforcement.test.ts +1 -1
  62. package/src/__tests__/guardian-dispatch.test.ts +0 -13
  63. package/src/__tests__/helpers/seed-app.ts +1 -1
  64. package/src/__tests__/host-cu-routes-targeted.test.ts +1 -1
  65. package/src/__tests__/host-shell-tool.test.ts +1 -1
  66. package/src/__tests__/identity-routes.test.ts +1 -1
  67. package/src/__tests__/inference-profile-session-handler.test.ts +1 -1
  68. package/src/__tests__/inference-profile-session-ipc.test.ts +1 -1
  69. package/src/__tests__/injector-chain.test.ts +1 -1
  70. package/src/__tests__/injector-config-quarantine-notice.test.ts +1 -1
  71. package/src/__tests__/injector-config-validation-reset-notice.test.ts +1 -1
  72. package/src/__tests__/injector-pkb-v2-silenced.test.ts +1 -1
  73. package/src/__tests__/{platform.test.ts → layout.test.ts} +1 -1
  74. package/src/__tests__/list-all-apps.test.ts +1 -1
  75. package/src/__tests__/live-workspace-guard.test.ts +2 -2
  76. package/src/__tests__/llm-resolver-override-or-default.test.ts +5 -6
  77. package/src/__tests__/llm-resolver.test.ts +7 -7
  78. package/src/__tests__/llm-schema-fallback-profile.test.ts +9 -10
  79. package/src/__tests__/llm-usage-store.test.ts +0 -495
  80. package/src/__tests__/log-export-routes.test.ts +1 -1
  81. package/src/__tests__/mcp-config-secret-boundary.test.ts +12 -53
  82. package/src/__tests__/mcp-list-plugin-servers.test.ts +1 -1
  83. package/src/__tests__/memory-config-file-parity.test.ts +1 -1
  84. package/src/__tests__/memory-v2-static-injector.test.ts +1 -1
  85. package/src/__tests__/messages-read-boundary-guard.test.ts +0 -2
  86. package/src/__tests__/notification-guardian-path.test.ts +0 -7
  87. package/src/__tests__/onboarding-persona-write.test.ts +1 -1
  88. package/src/__tests__/openai-provider.test.ts +8 -8
  89. package/src/__tests__/path-policy.test.ts +1 -1
  90. package/src/__tests__/persona-resolver.test.ts +1 -1
  91. package/src/__tests__/plugin-app-serve-routes.test.ts +1 -1
  92. package/src/__tests__/plugin-effective-enabled-set.test.ts +1 -1
  93. package/src/__tests__/plugin-import-boundary-guard.test.ts +4 -6
  94. package/src/__tests__/plugin-import-boundary-reverse-guard.test.ts +0 -3
  95. package/src/__tests__/provider-cloud-proxy-integration.test.ts +1 -5
  96. package/src/__tests__/provider-connections-backfill.test.ts +10 -10
  97. package/src/__tests__/prune-old-conversations-job.test.ts +6 -31
  98. package/src/__tests__/resolve-app.test.ts +1 -1
  99. package/src/__tests__/run-due-schedules.test.ts +1 -1
  100. package/src/__tests__/scaffold-managed-skill-tool.test.ts +0 -53
  101. package/src/__tests__/schedule-routes.test.ts +1 -1
  102. package/src/__tests__/schedule-store.test.ts +1 -1
  103. package/src/__tests__/secret-routes-cloud-proxy.test.ts +1 -1
  104. package/src/__tests__/skill-load-plugin-scope.test.ts +1 -1
  105. package/src/__tests__/surface-completion-compaction-boundary.test.ts +1 -1
  106. package/src/__tests__/tool-approval-handler.test.ts +1 -1
  107. package/src/__tests__/tool-audit.test.ts +5 -235
  108. package/src/__tests__/tool-executor-lifecycle-events.test.ts +54 -114
  109. package/src/__tests__/tools-get-route.test.ts +1 -1
  110. package/src/__tests__/turn-outcome-read.test.ts +1 -1
  111. package/src/__tests__/twilio-routes.test.ts +0 -1
  112. package/src/__tests__/usage-attribution.test.ts +0 -31
  113. package/src/__tests__/verification-control-plane-policy.test.ts +3 -10
  114. package/src/__tests__/visible-app-context.test.ts +1 -1
  115. package/src/__tests__/voice-ingress-preflight.test.ts +1 -1
  116. package/src/__tests__/workspace-git-service.test.ts +1 -1
  117. package/src/__tests__/workspace-greetings.test.ts +1 -1
  118. package/src/acp/__tests__/helpers/acp-config-stub.ts +1 -1
  119. package/src/activation/progress-store.ts +1 -1
  120. package/src/activation/turn-hooks.ts +1 -1
  121. package/src/agent/loop.ts +0 -51
  122. package/src/apps/app-store.ts +1 -1
  123. package/src/avatar/__tests__/avatar-store.test.ts +2 -172
  124. package/src/avatar/accent-backfill.ts +1 -1
  125. package/src/avatar/avatar-manifest.ts +1 -1
  126. package/src/avatar/avatar-store.ts +10 -69
  127. package/src/avatar/ensure-raster.ts +1 -1
  128. package/src/avatar/identity-avatar.ts +1 -1
  129. package/src/avatar/sync-avatar.ts +1 -1
  130. package/src/avatar/traits-png-sync.ts +1 -1
  131. package/src/bundler/compiler-tools.ts +1 -1
  132. package/src/bundler/package-resolver.ts +1 -1
  133. package/src/calls/__tests__/call-controller.test.ts +25 -27
  134. package/src/calls/active-call-lease.ts +1 -1
  135. package/src/calls/call-controller.ts +3 -3
  136. package/src/calls/call-domain.ts +4 -8
  137. package/src/calls/call-store.ts +2 -76
  138. package/src/calls/resolve-call-tts-provider.ts +3 -3
  139. package/src/calls/twilio-config.ts +3 -3
  140. package/src/calls/twilio-rest.ts +2 -2
  141. package/src/calls/voice-ingress-preflight.ts +2 -2
  142. package/src/cli/bundled-modules.ts +0 -2
  143. package/src/cli/commands/__tests__/apps.test.ts +1 -1
  144. package/src/cli/commands/__tests__/plugins.test.ts +9 -66
  145. package/src/cli/commands/__tests__/ps.test.ts +67 -0
  146. package/src/cli/commands/auth.help.ts +2 -2
  147. package/src/cli/commands/avatar.ts +1 -1
  148. package/src/cli/commands/changelog.ts +1 -1
  149. package/src/cli/commands/cloud/__tests__/subscription.test.ts +2 -2
  150. package/src/cli/commands/cloud/index.help.ts +1 -1
  151. package/src/cli/commands/cloud/index.ts +2 -2
  152. package/src/cli/commands/db/refresh.ts +1 -1
  153. package/src/cli/commands/db/repair-step-conversation-backfill.ts +1 -1
  154. package/src/cli/commands/db/repair.ts +1 -1
  155. package/src/cli/commands/db/status.ts +1 -1
  156. package/src/cli/commands/inference-profiles.ts +1 -12
  157. package/src/cli/commands/memory/__tests__/memory-v3.test.ts +1 -116
  158. package/src/cli/commands/memory/index.help.ts +1 -43
  159. package/src/cli/commands/memory/memory-v3.ts +0 -64
  160. package/src/cli/commands/plugins.ts +54 -205
  161. package/src/cli/commands/ps.ts +5 -2
  162. package/src/cli/commands/status.ts +1 -1
  163. package/src/cli/index.help.ts +0 -2
  164. package/src/cli/lib/__tests__/inspect-plugin.test.ts +36 -66
  165. package/src/cli/lib/__tests__/install-from-cloud.test.ts +1 -1
  166. package/src/cli/lib/__tests__/install-from-github.test.ts +41 -117
  167. package/src/cli/lib/__tests__/plugin-catalog-cache.test.ts +2 -185
  168. package/src/cli/lib/__tests__/plugin-catalog-resolve.test.ts +36 -66
  169. package/src/cli/lib/__tests__/plugin-catalog-visibility.test.ts +4 -6
  170. package/src/cli/lib/__tests__/plugin-details.test.ts +113 -96
  171. package/src/cli/lib/__tests__/search-plugins.test.ts +9 -16
  172. package/src/cli/lib/__tests__/uninstall-plugin.test.ts +1 -1
  173. package/src/cli/lib/__tests__/upgrade-plugin.test.ts +38 -15
  174. package/src/cli/lib/diff-plugin.ts +1 -1
  175. package/src/cli/lib/inspect-plugin.ts +13 -97
  176. package/src/cli/lib/install-from-cloud.ts +1 -1
  177. package/src/cli/lib/install-from-github.ts +75 -154
  178. package/src/cli/lib/install-plugin-dependencies.ts +1 -1
  179. package/src/cli/lib/list-installed-plugins.ts +1 -1
  180. package/src/cli/lib/open-browser.ts +1 -1
  181. package/src/cli/lib/plugin-catalog-cache.ts +8 -51
  182. package/src/cli/lib/plugin-catalog-resolve.ts +3 -22
  183. package/src/cli/lib/plugin-details.ts +5 -27
  184. package/src/cli/lib/plugin-marketplace.ts +18 -266
  185. package/src/cli/lib/search-plugins.ts +23 -43
  186. package/src/cli/lib/toggle-plugin.ts +1 -1
  187. package/src/cli/lib/uninstall-plugin.ts +1 -1
  188. package/src/cli/lib/upgrade-plugin.ts +3 -49
  189. package/src/cli/program.ts +1 -3
  190. package/src/cli.ts +1 -1
  191. package/src/cloud/client.ts +0 -6
  192. package/src/cloud/consent-cache.test.ts +22 -201
  193. package/src/cloud/consent-cache.ts +16 -111
  194. package/src/cloud/sync-identity.ts +1 -1
  195. package/src/config/__tests__/chat-settings.test.ts +1 -1
  196. package/src/config/__tests__/cloud-identity.test.ts +15 -2
  197. package/src/config/__tests__/default-plugin-skill-discovery.test.ts +1 -1
  198. package/src/config/__tests__/default-profile-catalog.test.ts +12 -51
  199. package/src/config/__tests__/deployment-context-defaults.test.ts +13 -13
  200. package/src/config/__tests__/loader-callsite-strip-fallback.test.ts +4 -4
  201. package/src/config/__tests__/loader-last-known-good.test.ts +9 -9
  202. package/src/config/__tests__/loader-sparse-array-cleanup.test.ts +7 -7
  203. package/src/config/__tests__/plugin-resident-skill-discovery.test.ts +1 -1
  204. package/src/config/__tests__/profile-materialization.test.ts +2 -4
  205. package/src/config/__tests__/sync-gated-profiles.test.ts +1 -106
  206. package/src/config/acp-agent-write.ts +1 -1
  207. package/src/config/bundled-skills/settings/tools/open-system-settings.test.ts +1 -1
  208. package/src/config/bundled-skills/settings/tools/open-system-settings.ts +1 -1
  209. package/src/config/call-site-defaults.ts +0 -6
  210. package/src/config/cloud-identity.ts +12 -5
  211. package/src/config/composer-preferences.ts +1 -1
  212. package/src/config/default-profile-catalog.ts +8 -75
  213. package/src/config/default-profile-names.ts +2 -25
  214. package/src/config/env-registry.ts +1 -14
  215. package/src/config/env.ts +8 -6
  216. package/src/config/llm-resolver.ts +1 -2
  217. package/src/config/loader.ts +13 -17
  218. package/src/config/profile-materialization.ts +1 -1
  219. package/src/config/schema.ts +1 -7
  220. package/src/config/schemas/call-site-catalog.ts +0 -7
  221. package/src/config/schemas/llm.ts +22 -27
  222. package/src/config/seed-inference-profiles.ts +16 -17
  223. package/src/config/skills.ts +2 -2
  224. package/src/config/sync-gated-profiles.ts +6 -24
  225. package/src/credential-health/credential-health-service.ts +10 -3
  226. package/src/daemon/approval-generators.ts +3 -3
  227. package/src/daemon/config-watcher.ts +2 -2
  228. package/src/daemon/conversation-agent-loop-handlers.ts +0 -18
  229. package/src/daemon/conversation-agent-loop.ts +6 -97
  230. package/src/daemon/conversation-process.ts +1 -1
  231. package/src/daemon/conversation-skill-tools.ts +4 -72
  232. package/src/daemon/conversation-store.ts +1 -1
  233. package/src/daemon/conversation-surface-state.ts +0 -33
  234. package/src/daemon/conversation-surfaces.ts +1 -86
  235. package/src/daemon/conversation-tool-setup.test.ts +1 -1
  236. package/src/daemon/conversation-tool-setup.ts +0 -23
  237. package/src/daemon/conversation.ts +3 -5
  238. package/src/daemon/daemon-control.ts +3 -3
  239. package/src/daemon/dictation-profile-store.ts +3 -3
  240. package/src/daemon/event-loop-watchdog.test.ts +2 -198
  241. package/src/daemon/event-loop-watchdog.ts +0 -185
  242. package/src/daemon/external-plugins-bootstrap.ts +1 -1
  243. package/src/daemon/first-greeting.ts +1 -1
  244. package/src/daemon/handlers/skills.ts +1 -1
  245. package/src/daemon/host-app-control-proxy.ts +1 -1
  246. package/src/daemon/host-cu-proxy.ts +2 -2
  247. package/src/daemon/identity-helpers.ts +1 -1
  248. package/src/daemon/lifecycle.ts +11 -15
  249. package/src/daemon/main.ts +1 -1
  250. package/src/daemon/now-scratchpad.ts +1 -1
  251. package/src/daemon/process-message.ts +4 -4
  252. package/src/daemon/profiler-run-store.ts +2 -2
  253. package/src/daemon/providers-setup.ts +2 -2
  254. package/src/daemon/shutdown-handlers.ts +0 -10
  255. package/src/daemon/sqlite-corruption-watchdog.test.ts +2 -142
  256. package/src/daemon/sqlite-corruption-watchdog.ts +17 -81
  257. package/src/daemon/tool-side-effects.ts +1 -1
  258. package/src/desktop/desktop-session-manager.ts +1 -1
  259. package/src/desktop/desktop-wallpaper-renderer.ts +1 -1
  260. package/src/heartbeat/heartbeat-service.ts +1 -1
  261. package/src/home/feed-writer.ts +1 -1
  262. package/src/home/home-greeting-cache.ts +1 -1
  263. package/src/home/relationship-state-writer.ts +2 -2
  264. package/src/hooks/__tests__/hook-live-reload.test.ts +1 -1
  265. package/src/hooks/hook-loader.ts +2 -2
  266. package/src/inbound/__tests__/oauth-callback-url.test.ts +2 -2
  267. package/src/inbound/oauth-callback-url.ts +3 -3
  268. package/src/ipc/__tests__/attachment-ipc.test.ts +1 -1
  269. package/src/ipc/socket-path.ts +1 -1
  270. package/src/live-voice/__tests__/live-voice-archive.test.ts +1 -1
  271. package/src/live-voice/__tests__/live-voice-vad.test.ts +1 -1
  272. package/src/live-voice/live-voice-session.ts +3 -66
  273. package/src/mcp/__tests__/effective-config.test.ts +1 -1
  274. package/src/mcp/__tests__/mcp-oauth-client-registration.test.ts +2 -2
  275. package/src/mcp/__tests__/mcp-oauth-provider.test.ts +2 -3
  276. package/src/mcp/__tests__/reload-signal-emission.test.ts +1 -1
  277. package/src/mcp/__tests__/reload-signal.test.ts +1 -1
  278. package/src/mcp/__tests__/workspace-mcp-config.test.ts +19 -21
  279. package/src/mcp/reload-signal.ts +1 -1
  280. package/src/mcp/workspace-mcp-config.ts +1 -23
  281. package/src/messaging/draft-store.ts +1 -1
  282. package/src/monitoring/__tests__/active-conversations.test.ts +1 -1
  283. package/src/monitoring/__tests__/page-cache.test.ts +1 -1
  284. package/src/monitoring/__tests__/stall-capture.test.ts +1 -1
  285. package/src/monitoring/__tests__/workspace-git-heartbeat.test.ts +1 -1
  286. package/src/monitoring/active-conversations.ts +1 -1
  287. package/src/monitoring/control.ts +1 -1
  288. package/src/monitoring/daemon-boot-time.ts +1 -1
  289. package/src/monitoring/daemon-heartbeat.ts +1 -1
  290. package/src/monitoring/page-cache.ts +1 -1
  291. package/src/monitoring/plugin-auto-update.ts +1 -7
  292. package/src/monitoring/plugin-source-watch.ts +1 -1
  293. package/src/monitoring/recovery/db.ts +1 -1
  294. package/src/monitoring/recovery/inflight-content.ts +1 -1
  295. package/src/monitoring/resource-sampler.ts +3 -14
  296. package/src/monitoring/stall-capture.ts +1 -1
  297. package/src/monitoring/worker.ts +9 -76
  298. package/src/monitoring/workspace-git-heartbeat.ts +1 -1
  299. package/src/oauth/connect-orchestrator.ts +4 -4
  300. package/src/permissions/checker.ts +1 -1
  301. package/src/permissions/workspace-policy.ts +1 -1
  302. package/src/persistence/__tests__/main-db-readonly-probe.ts +27 -52
  303. package/src/persistence/__tests__/message-content-file.test.ts +1 -1
  304. package/src/persistence/__tests__/slow-sync-log.test.ts +0 -2
  305. package/src/persistence/attachments-store.ts +1 -1
  306. package/src/persistence/conversation-crud.ts +1 -38
  307. package/src/persistence/conversation-directories.ts +1 -1
  308. package/src/persistence/conversation-types.ts +0 -8
  309. package/src/persistence/db-async-query.ts +1 -1
  310. package/src/persistence/db-connection.ts +11 -1
  311. package/src/persistence/db-init.ts +1 -1
  312. package/src/persistence/db-maintenance.ts +1 -1
  313. package/src/persistence/embeddings/__tests__/embedding-local-lifecycle.test.ts +1 -1
  314. package/src/persistence/embeddings/embedding-local.ts +4 -4
  315. package/src/persistence/embeddings/embedding-runtime-manager.ts +1 -1
  316. package/src/persistence/embeddings/qdrant-client.ts +1 -1
  317. package/src/persistence/embeddings/qdrant-manager.ts +1 -1
  318. package/src/persistence/job-handlers/__tests__/message-lexical-backfill.test.ts +1 -1
  319. package/src/persistence/job-handlers/__tests__/message-lexical-enqueue.test.ts +1 -1
  320. package/src/persistence/job-handlers/cleanup.ts +8 -17
  321. package/src/persistence/llm-usage-store.ts +2 -229
  322. package/src/persistence/message-content-file.ts +1 -1
  323. package/src/persistence/migrations/209-strip-thinking-from-consolidated.ts +1 -1
  324. package/src/persistence/migrations/222-strip-placeholder-sentinels-from-messages.ts +1 -1
  325. package/src/persistence/migrations/296-rewrite-balanced-economy-profile-pins.test.ts +1 -1
  326. package/src/persistence/migrations/306-rewrite-frontier-profile-pins.test.ts +1 -1
  327. package/src/persistence/migrations/329-move-onboarding-events-to-telemetry-db.test.ts +13 -0
  328. package/src/persistence/migrations/330-move-auth-fallback-events-to-telemetry-db.test.ts +13 -0
  329. package/src/persistence/migrations/331-move-lifecycle-events-to-telemetry-db.test.ts +13 -0
  330. package/src/persistence/migrations/332-move-skill-loaded-events-to-telemetry-db.test.ts +13 -0
  331. package/src/persistence/migrations/333-create-telemetry-events-table.test.ts +7 -4
  332. package/src/persistence/migrations/334-backfill-telemetry-events-outbox.test.ts +13 -0
  333. package/src/persistence/migrations/387-drop-telemetry-tables.ts +51 -0
  334. package/src/persistence/migrations/__tests__/327-create-flush-checkpoints.test.ts +9 -1
  335. package/src/persistence/migrations/__tests__/387-drop-telemetry-tables.test.ts +79 -0
  336. package/src/persistence/migrations/helpers/relocation.ts +1 -1
  337. package/src/persistence/migrations/run-migrations.ts +1 -1
  338. package/src/persistence/migrations/validate-migration-state.ts +1 -1
  339. package/src/persistence/raw-query.ts +1 -29
  340. package/src/persistence/slow-sync-log.ts +0 -23
  341. package/src/persistence/steps.ts +2 -0
  342. package/src/{telemetry → persistence}/tool-audit.ts +6 -121
  343. package/src/plugin-api/index.ts +1 -1
  344. package/src/plugin-api/plugin-name-env.ts +1 -1
  345. package/src/plugins/__tests__/installed-plugin-dirs.test.ts +1 -1
  346. package/src/plugins/collect-source-versions.ts +1 -1
  347. package/src/plugins/defaults/channel/package.json +1 -1
  348. package/src/plugins/defaults/cloud-hosted/package.json +1 -1
  349. package/src/plugins/defaults/compaction/package.json +1 -1
  350. package/src/plugins/defaults/documents/package.json +1 -1
  351. package/src/plugins/defaults/empty-response/package.json +1 -1
  352. package/src/plugins/defaults/exploration-drift/package.json +1 -1
  353. package/src/plugins/defaults/image-fallback/package.json +1 -1
  354. package/src/plugins/defaults/image-recovery/package.json +1 -1
  355. package/src/plugins/defaults/max-tokens-continue/package.json +1 -1
  356. package/src/plugins/defaults/memory/__tests__/db-async-query.test.ts +1 -1
  357. package/src/plugins/defaults/memory/__tests__/db-maintenance.test.ts +1 -1
  358. package/src/plugins/defaults/memory/__tests__/memory-retrospective-job.test.ts +0 -82
  359. package/src/plugins/defaults/memory/__tests__/memory-retrospective-skill-card.test.ts +0 -41
  360. package/src/plugins/defaults/memory/__tests__/memory-tier-boundary-guard.test.ts +0 -2
  361. package/src/plugins/defaults/memory/memory-retrospective-job.ts +3 -52
  362. package/src/plugins/defaults/memory/memory-retrospective-skill-card.ts +0 -18
  363. package/src/plugins/defaults/memory/package.json +1 -1
  364. package/src/plugins/defaults/memory/paths.ts +4 -4
  365. package/src/plugins/defaults/memory/src/__tests__/memory-worker-routes.test.ts +1 -1
  366. package/src/plugins/defaults/memory/src/memory-v2-routes.ts +5 -5
  367. package/src/plugins/defaults/memory/src/memory-v3-routes.ts +0 -207
  368. package/src/plugins/defaults/memory/src/memory-worker-routes.ts +1 -1
  369. package/src/plugins/defaults/memory/startup.ts +1 -22
  370. package/src/plugins/defaults/memory/v3/__tests__/orchestrate.test.ts +2 -253
  371. package/src/plugins/defaults/memory/v3/orchestrate.ts +5 -129
  372. package/src/plugins/defaults/memory/worker-control.ts +1 -1
  373. package/src/plugins/defaults/memory/worker.ts +2 -2
  374. package/src/plugins/defaults/session/package.json +1 -1
  375. package/src/plugins/defaults/surface-completion-nudge/package.json +1 -1
  376. package/src/plugins/defaults/task-progress/package.json +1 -1
  377. package/src/plugins/defaults/task-progress-nudge/package.json +1 -1
  378. package/src/plugins/defaults/title-generate/package.json +1 -1
  379. package/src/plugins/defaults/tool-error/package.json +1 -1
  380. package/src/plugins/defaults/tool-result-truncate/package.json +1 -1
  381. package/src/plugins/defaults/turn-context/package.json +1 -1
  382. package/src/plugins/defaults/workspace/injectors.ts +1 -1
  383. package/src/plugins/defaults/workspace/package.json +1 -1
  384. package/src/plugins/disabled-state.ts +1 -1
  385. package/src/plugins/ensure-plugin-api-shim.ts +1 -1
  386. package/src/plugins/ensure-shared-dep-links.ts +1 -1
  387. package/src/plugins/installed-plugin-dirs.ts +1 -1
  388. package/src/plugins/mcp-servers.ts +7 -9
  389. package/src/plugins/mtime-cache.ts +2 -2
  390. package/src/plugins/source-versions.ts +1 -1
  391. package/src/prompts/bootstrap-cleanup.ts +1 -1
  392. package/src/prompts/persona-resolver.ts +1 -1
  393. package/src/prompts/sections.ts +2 -2
  394. package/src/prompts/system-prompt.ts +10 -42
  395. package/src/prompts/templates/BOOTSTRAP-ACTIVATION-RAIL.md +0 -37
  396. package/src/providers/__tests__/cadet-connection-routing.test.ts +2 -2
  397. package/src/providers/cadet/client.ts +1 -1
  398. package/src/providers/inference/__tests__/base-url-route-validation.test.ts +1 -1
  399. package/src/providers/inference/adapter-factory.ts +1 -1
  400. package/src/providers/inference/backfill.ts +3 -10
  401. package/src/providers/inference/profile-probe.ts +1 -1
  402. package/src/providers/retry.ts +0 -2
  403. package/src/providers/types.ts +0 -7
  404. package/src/providers/usage-tracking.ts +1 -1
  405. package/src/routes/__tests__/route-host.test.ts +1 -1
  406. package/src/routes/control.ts +1 -1
  407. package/src/routes/route-host-client.ts +1 -1
  408. package/src/routes/worker.ts +2 -2
  409. package/src/runtime/agent-wake.ts +1 -1
  410. package/src/runtime/assistant-stream-state.ts +1 -1
  411. package/src/runtime/auth/token-service.ts +1 -1
  412. package/src/runtime/background-job-runner.ts +1 -1
  413. package/src/runtime/middleware/twilio-validation.ts +2 -2
  414. package/src/runtime/routes/__tests__/app-pin-routes.test.ts +1 -1
  415. package/src/runtime/routes/__tests__/apps-refresh-route.test.ts +1 -1
  416. package/src/runtime/routes/__tests__/avatar-state-routes.test.ts +3 -33
  417. package/src/runtime/routes/__tests__/cloud-credits-routes.test.ts +5 -4
  418. package/src/runtime/routes/__tests__/cloud-invoice-routes.test.ts +4 -3
  419. package/src/runtime/routes/__tests__/conversation-query-routes.test.ts +59 -287
  420. package/src/runtime/routes/__tests__/default-plugin-routes.test.ts +1 -1
  421. package/src/runtime/routes/__tests__/deprecated-route-context.test.ts +15 -62
  422. package/src/runtime/routes/__tests__/inference-profiles-routes.test.ts +105 -12
  423. package/src/runtime/routes/__tests__/ingress-status-routes.test.ts +1 -1
  424. package/src/runtime/routes/__tests__/monitoring-routes.test.ts +1 -1
  425. package/src/runtime/routes/__tests__/plugins-routes.test.ts +47 -211
  426. package/src/runtime/routes/__tests__/route-host-worker-routes.test.ts +1 -1
  427. package/src/runtime/routes/__tests__/schedule-routes-disarm-reason.test.ts +1 -1
  428. package/src/runtime/routes/__tests__/schedule-worker-routes.test.ts +1 -1
  429. package/src/runtime/routes/__tests__/user-route-dispatcher-host.test.ts +1 -1
  430. package/src/runtime/routes/__tests__/user-route-dispatcher.test.ts +1 -1
  431. package/src/runtime/routes/__tests__/user-routes-cli.test.ts +1 -1
  432. package/src/runtime/routes/__tests__/user-routes-notices.test.ts +1 -1
  433. package/src/runtime/routes/__tests__/user-routes-request.test.ts +1 -1
  434. package/src/runtime/routes/app-management-routes.ts +1 -1
  435. package/src/runtime/routes/attachment-routes.ts +1 -1
  436. package/src/runtime/routes/audit-routes.ts +1 -1
  437. package/src/runtime/routes/avatar-routes.ts +3 -10
  438. package/src/runtime/routes/cloud-routes.ts +3 -3
  439. package/src/runtime/routes/content-source-routes.ts +1 -1
  440. package/src/runtime/routes/conversation-query-routes.ts +60 -621
  441. package/src/runtime/routes/conversation-routes.ts +1 -38
  442. package/src/runtime/routes/debug-routes.ts +1 -1
  443. package/src/runtime/routes/deprecated-route-context.ts +5 -61
  444. package/src/runtime/routes/heartbeat-routes.ts +1 -1
  445. package/src/runtime/routes/identity-routes.ts +1 -1
  446. package/src/runtime/routes/index.ts +0 -6
  447. package/src/runtime/routes/inference-profile-session-handler.ts +3 -3
  448. package/src/runtime/routes/inference-profiles-routes.ts +48 -21
  449. package/src/runtime/routes/inference-provider-connection-routes.ts +0 -1
  450. package/src/runtime/routes/llm-call-sites-routes.ts +3 -3
  451. package/src/runtime/routes/log-export/__tests__/installed-inventory.test.ts +1 -1
  452. package/src/runtime/routes/log-export/__tests__/workspace-allowlist-error-contract.test.ts +1 -1
  453. package/src/runtime/routes/log-export/__tests__/workspace-allowlist.test.ts +1 -1
  454. package/src/runtime/routes/log-export/workspace-allowlist.ts +1 -1
  455. package/src/runtime/routes/log-export-routes.ts +17 -15
  456. package/src/runtime/routes/migration-rollback-routes.ts +1 -1
  457. package/src/runtime/routes/migration-routes.ts +2 -3
  458. package/src/runtime/routes/monitoring-routes.ts +2 -2
  459. package/src/runtime/routes/oauth-providers.ts +5 -5
  460. package/src/runtime/routes/plugins-routes.ts +38 -163
  461. package/src/runtime/routes/profiler-routes.ts +1 -1
  462. package/src/runtime/routes/route-host-worker-routes.ts +1 -1
  463. package/src/runtime/routes/sanity-routes.ts +1 -1
  464. package/src/runtime/routes/schedule-routes.ts +1 -1
  465. package/src/runtime/routes/schedule-worker-routes.ts +1 -1
  466. package/src/runtime/routes/settings-routes.ts +1 -1
  467. package/src/runtime/routes/sounds-config-routes.ts +1 -1
  468. package/src/runtime/routes/surface-conversation-resolver.ts +1 -7
  469. package/src/runtime/routes/user-route-dispatcher.ts +1 -3
  470. package/src/runtime/routes/user-route-import.ts +1 -1
  471. package/src/runtime/routes/user-route-resolution.ts +1 -1
  472. package/src/runtime/routes/user-routes-cli.ts +1 -1
  473. package/src/runtime/routes/workspace-commit-routes.ts +1 -1
  474. package/src/runtime/routes/workspace-greetings.ts +1 -1
  475. package/src/runtime/routes/workspace-routes.ts +1 -1
  476. package/src/runtime/routes/workspace-utils.ts +1 -1
  477. package/src/runtime/sync/resource-sync-events.ts +1 -1
  478. package/src/schedule/__tests__/plugin-schedule-declarations.test.ts +1 -1
  479. package/src/schedule/__tests__/plugin-schedule-reconciler.test.ts +1 -1
  480. package/src/schedule/plugin-schedule-availability.ts +1 -1
  481. package/src/schedule/plugin-schedule-declarations.ts +1 -1
  482. package/src/schedule/run-script.ts +1 -1
  483. package/src/schedule/scheduler.ts +1 -11
  484. package/src/schedule/worker-control.ts +1 -1
  485. package/src/schedule/worker.ts +3 -3
  486. package/src/security/oauth2.ts +2 -2
  487. package/src/security/secret-allowlist.ts +1 -1
  488. package/src/signals/cancel.ts +1 -1
  489. package/src/signals/conversation-undo.ts +1 -1
  490. package/src/signals/emit-event.ts +1 -1
  491. package/src/signals/event-stream.ts +1 -1
  492. package/src/signals/user-message.ts +1 -1
  493. package/src/skills/catalog-install.ts +2 -1
  494. package/src/skills/clawhub.ts +1 -1
  495. package/src/skills/cloud-store.ts +1 -1
  496. package/src/skills/path-classifier.ts +1 -1
  497. package/src/skills/skill-history.ts +1 -1
  498. package/src/skills/skillssh-registry.ts +1 -1
  499. package/src/skills/uninstall.ts +1 -1
  500. package/src/skills/workspace-skill-md-signature.ts +1 -1
  501. package/src/subagent/manager.ts +1 -1
  502. package/src/theme/workspace-theme.ts +1 -1
  503. package/src/tools/browser/auth-cache.ts +1 -1
  504. package/src/tools/browser/browser-manager.ts +1 -1
  505. package/src/tools/browser/runtime-check.ts +1 -1
  506. package/src/tools/executor.ts +4 -4
  507. package/src/tools/filesystem/write.ts +1 -1
  508. package/src/tools/permission-checker.ts +2 -51
  509. package/src/tools/run-standalone.ts +1 -1
  510. package/src/tools/skills/format-input-schema.ts +1 -1
  511. package/src/tools/skills/load.ts +1 -1
  512. package/src/tools/skills/scaffold-cloud.ts +0 -32
  513. package/src/tools/terminal/safe-env.ts +1 -2
  514. package/src/tools/terminal/sanitized-bash.ts +1 -1
  515. package/src/tools/terminal/shell.ts +1 -1
  516. package/src/tools/tool-approval-handler.ts +4 -1
  517. package/src/tools/workflows/manage-workflows.ts +2 -2
  518. package/src/tools/workflows/run-workflow.test.ts +1 -1
  519. package/src/tools/workspace-tools/loader.ts +1 -1
  520. package/src/tts/synthesis-stream.ts +2 -2
  521. package/src/usage/attribution.ts +1 -11
  522. package/src/util/browser.ts +1 -1
  523. package/src/util/bun-runtime.ts +2 -1
  524. package/src/util/device-id.ts +1 -1
  525. package/src/util/disk-usage.ts +4 -139
  526. package/src/util/layout.ts +3 -3
  527. package/src/util/logger.ts +1 -1
  528. package/src/util/logs-db-path.ts +1 -1
  529. package/src/util/memory-db-path.ts +1 -1
  530. package/src/util/{platform.ts → os.ts} +5 -30
  531. package/src/util/process-tree.ts +19 -0
  532. package/src/util/sqlite3-runtime.ts +1 -1
  533. package/src/util/telemetry-db-path.ts +1 -1
  534. package/src/watcher/__tests__/engine.test.ts +0 -23
  535. package/src/watcher/engine.ts +0 -7
  536. package/src/windows-compiled-cli.ts +0 -4
  537. package/src/windows-compiled-worker-entry.ts +0 -6
  538. package/src/workflows/leaf-runner.test.ts +1 -1
  539. package/src/workflows/leaf-runner.ts +1 -1
  540. package/src/workflows/library.ts +1 -1
  541. package/src/workspace/adaptive-thinking-repair.ts +5 -24
  542. package/src/workspace/byok-default-profile-ensure.ts +24 -26
  543. package/src/workspace/custom-profile-ensure.ts +2 -2
  544. package/src/workspace/git-service.ts +1 -1
  545. package/src/workspace/hatched-date.ts +1 -1
  546. package/src/workspace/migrations/038-unify-llm-callsite-configs.ts +2 -2
  547. package/src/workspace/migrations/040-seed-latency-callsite-defaults.ts +1 -1
  548. package/src/workspace/migrations/050-seed-main-agent-opus-callsite.ts +1 -1
  549. package/src/workspace/migrations/077-seed-memory-router-callsite.ts +1 -1
  550. package/src/workspace/migrations/registry.ts +0 -4
  551. package/src/workspace/turn-commit.ts +1 -1
  552. package/docs/activation-funnel-telemetry.md +0 -324
  553. package/scripts/bundled-plugin-packages.ts +0 -154
  554. package/scripts/generate-bundled-plugin-packages.ts +0 -29
  555. package/src/__tests__/activation-early-marking.test.ts +0 -114
  556. package/src/__tests__/auth-fallback-events-store.test.ts +0 -99
  557. package/src/__tests__/config-get-vision-flag.test.ts +0 -139
  558. package/src/__tests__/conversation-surfaces-activation-emit.test.ts +0 -400
  559. package/src/__tests__/internal-telemetry-routes.test.ts +0 -213
  560. package/src/__tests__/telemetry-routes.test.ts +0 -182
  561. package/src/__tests__/turn-events-store.test.ts +0 -376
  562. package/src/__tests__/ui-channel-variants.test.ts +0 -53
  563. package/src/avatar/__tests__/avatar-changed-telemetry.test.ts +0 -217
  564. package/src/avatar/avatar-changed-telemetry.ts +0 -128
  565. package/src/calls/__tests__/call-funnel-telemetry.test.ts +0 -204
  566. package/src/cli/commands/telemetry.help.ts +0 -27
  567. package/src/cli/commands/telemetry.ts +0 -83
  568. package/src/cli/lib/__tests__/local-plugin-upgrade.test.ts +0 -251
  569. package/src/cli/lib/__tests__/plugin-catalog-local.test.ts +0 -113
  570. package/src/cli/lib/__tests__/plugin-marketplace.test.ts +0 -384
  571. package/src/cli/lib/__tests__/plugin-pin-history.test.ts +0 -164
  572. package/src/cli/lib/__tests__/plugins-install-offline.test.ts +0 -228
  573. package/src/cli/lib/bundled-marketplace.json +0 -1575
  574. package/src/cli/lib/bundled-plugin-packages.json +0 -827
  575. package/src/cli/lib/bundled-plugin-packages.ts +0 -87
  576. package/src/cli/lib/plugin-catalog-local.ts +0 -94
  577. package/src/cli/lib/plugin-pin-history.ts +0 -276
  578. package/src/cloud/feature-gate.ts +0 -8
  579. package/src/config/__tests__/cloud-rehydration.test.ts +0 -180
  580. package/src/config/cloud-rehydration.ts +0 -35
  581. package/src/daemon/__tests__/auto-profile-router.test.ts +0 -380
  582. package/src/daemon/auto-profile-router.ts +0 -428
  583. package/src/live-voice/__tests__/live-voice-session-telemetry.test.ts +0 -391
  584. package/src/monitoring/__tests__/db-integrity-sample.test.ts +0 -113
  585. package/src/monitoring/__tests__/oom-kill-reporter.test.ts +0 -374
  586. package/src/monitoring/db-integrity-check.ts +0 -163
  587. package/src/monitoring/db-integrity-sample.ts +0 -176
  588. package/src/monitoring/oom-kill-reporter.ts +0 -469
  589. package/src/onboarding/__tests__/onboarding-events-store.test.ts +0 -158
  590. package/src/onboarding/onboarding-events-store.ts +0 -296
  591. package/src/persistence/__tests__/raw-query-telemetry.test.ts +0 -76
  592. package/src/persistence/lifecycle-events-store.test.ts +0 -134
  593. package/src/persistence/lifecycle-events-store.ts +0 -110
  594. package/src/plugins/defaults/memory/__tests__/activation-session-store.test.ts +0 -76
  595. package/src/plugins/defaults/memory/activation-session-store.ts +0 -50
  596. package/src/plugins/defaults/memory/src/__tests__/memory-v3-gate-stats.test.ts +0 -281
  597. package/src/runtime/routes/auto-profile-routes.ts +0 -83
  598. package/src/runtime/routes/internal-telemetry-routes.ts +0 -142
  599. package/src/runtime/routes/telemetry-routes.ts +0 -274
  600. package/src/security/auth-fallback-events-store.ts +0 -57
  601. package/src/telemetry/__tests__/activation-funnel.test.ts +0 -95
  602. package/src/telemetry/__tests__/config-setting-events-store.test.ts +0 -63
  603. package/src/telemetry/__tests__/config-setting-snapshot.test.ts +0 -143
  604. package/src/telemetry/__tests__/flush-checkpoints.test.ts +0 -56
  605. package/src/telemetry/__tests__/live-voice-funnel.test.ts +0 -174
  606. package/src/telemetry/__tests__/outbox-test-harness.ts +0 -85
  607. package/src/telemetry/__tests__/phone-call-funnel.test.ts +0 -72
  608. package/src/telemetry/__tests__/telemetry-event-fixtures.ts +0 -282
  609. package/src/telemetry/__tests__/watchdog-events-store.test.ts +0 -71
  610. package/src/telemetry/activation-funnel.ts +0 -172
  611. package/src/telemetry/config-setting-events-store.ts +0 -40
  612. package/src/telemetry/config-setting-snapshot.ts +0 -170
  613. package/src/telemetry/flush-checkpoints.ts +0 -70
  614. package/src/telemetry/live-voice-funnel.ts +0 -185
  615. package/src/telemetry/memory-corpus-size.test.ts +0 -120
  616. package/src/telemetry/memory-corpus-size.ts +0 -184
  617. package/src/telemetry/memory-tier-reporter.test.ts +0 -195
  618. package/src/telemetry/memory-tier-reporter.ts +0 -130
  619. package/src/telemetry/phone-call-funnel.ts +0 -144
  620. package/src/telemetry/skill-loaded-events-store.test.ts +0 -93
  621. package/src/telemetry/skill-loaded-events-store.ts +0 -39
  622. package/src/telemetry/telemetry-event-sources.test.ts +0 -223
  623. package/src/telemetry/telemetry-event-sources.ts +0 -597
  624. package/src/telemetry/telemetry-events-outbox.test.ts +0 -375
  625. package/src/telemetry/telemetry-events-outbox.ts +0 -237
  626. package/src/telemetry/telemetry-main-db.ts +0 -48
  627. package/src/telemetry/telemetry-wire-source.json +0 -4
  628. package/src/telemetry/telemetry-wire-validation.test.ts +0 -157
  629. package/src/telemetry/telemetry-wire-validation.ts +0 -162
  630. package/src/telemetry/telemetry-wire.generated.ts +0 -483
  631. package/src/telemetry/tool-executed-events-store.test.ts +0 -210
  632. package/src/telemetry/tool-executed-events-store.ts +0 -102
  633. package/src/telemetry/trace-collection-policy.test.ts +0 -28
  634. package/src/telemetry/trace-collection-policy.ts +0 -30
  635. package/src/telemetry/turn-events-store.ts +0 -216
  636. package/src/telemetry/turn-trace-store.test.ts +0 -884
  637. package/src/telemetry/turn-trace-store.ts +0 -399
  638. package/src/telemetry/types.test.ts +0 -38
  639. package/src/telemetry/types.ts +0 -780
  640. package/src/telemetry/usage-telemetry-reporter.test.ts +0 -3445
  641. package/src/telemetry/usage-telemetry-reporter.ts +0 -566
  642. package/src/telemetry/watchdog-direct-emit.test.ts +0 -112
  643. package/src/telemetry/watchdog-direct-emit.ts +0 -104
  644. package/src/telemetry/watchdog-events-store.ts +0 -31
  645. package/src/tools/ui-surface/channel-variants.ts +0 -52
  646. package/src/watcher/__tests__/telemetry.test.ts +0 -178
  647. package/src/watcher/telemetry.ts +0 -93
  648. package/src/workspace/migrations/097-enable-adaptive-thinking-managed-profiles.ts +0 -165
  649. package/src/workspace/migrations/104-recheck-adaptive-thinking-model-implied-anthropic.ts +0 -151
  650. /package/src/{telemetry → persistence}/tool-usage-store.ts +0 -0
  651. /package/src/{telemetry → persistence}/turn-outcome.ts +0 -0
@@ -109,7 +109,6 @@ import {
109
109
  type SlackMessageMetadata,
110
110
  } from "../../messaging/providers/slack/message-metadata.js";
111
111
  import { readProviderMetadata } from "../../messaging/read-provider-metadata.js";
112
- import { recordOnboardingEvent } from "../../onboarding/onboarding-events-store.js";
113
112
  import {
114
113
  classifyKind,
115
114
  getAttachmentById,
@@ -145,7 +144,6 @@ import {
145
144
  import { listConversationModeSessionsByIds } from "../../persistence/conversation-mode-sessions.js";
146
145
  import { searchConversations } from "../../persistence/conversation-queries.js";
147
146
  import {
148
- AUTO_ROUTED_PROFILE_METADATA_KEY,
149
147
  computerUseScreenshotAttachmentIdsFromMetadata,
150
148
  isNoResponseMetadata,
151
149
  messageMetadataIsAmbientSightKeep,
@@ -167,11 +165,8 @@ import {
167
165
  isHeicFilename,
168
166
  normalizeImageBase64,
169
167
  } from "../../util/image-conversion.js";
168
+ import { getWorkspaceDir, getWorkspacePromptPath } from "../../util/layout.js";
170
169
  import { getLogger } from "../../util/logger.js";
171
- import {
172
- getWorkspaceDir,
173
- getWorkspacePromptPath,
174
- } from "../../util/platform.js";
175
170
  import { safeStringSlice } from "../../util/unicode.js";
176
171
  import { assistantEventHub, broadcastMessage } from "../assistant-event-hub.js";
177
172
  import { getCurrentSeq } from "../assistant-stream-state.js";
@@ -1116,7 +1111,6 @@ export async function handleListMessages({
1116
1111
  let backgroundToolCompletion: ConversationMessage["backgroundToolCompletion"];
1117
1112
  let systemCard: boolean | undefined;
1118
1113
  let noResponse: boolean | undefined;
1119
- let autoRoutedProfile: string | undefined;
1120
1114
  const cameraFrame = messageMetadataIsAmbientSightKeep(msg.metadata)
1121
1115
  ? true
1122
1116
  : undefined;
@@ -1137,9 +1131,6 @@ export async function handleListMessages({
1137
1131
  if (isNoResponseMetadata(meta)) {
1138
1132
  noResponse = true;
1139
1133
  }
1140
- if (typeof meta[AUTO_ROUTED_PROFILE_METADATA_KEY] === "string") {
1141
- autoRoutedProfile = meta[AUTO_ROUTED_PROFILE_METADATA_KEY];
1142
- }
1143
1134
  // Channel facts live in the row's provider envelope. A reaction row,
1144
1135
  // either direction, projects its structured fact so clients never
1145
1136
  // render the stored "[reaction]" sentinel; a row deleted on its
@@ -1222,7 +1213,6 @@ export async function handleListMessages({
1222
1213
  backgroundToolCompletion,
1223
1214
  systemCard,
1224
1215
  noResponse,
1225
- autoRoutedProfile,
1226
1216
  cameraFrame,
1227
1217
  reaction,
1228
1218
  providerError,
@@ -1463,9 +1453,6 @@ export async function handleListMessages({
1463
1453
  : {}),
1464
1454
  ...(m.systemCard ? { systemCard: true } : {}),
1465
1455
  ...(m.noResponse ? { noResponse: true } : {}),
1466
- ...(m.autoRoutedProfile
1467
- ? { autoRoutedProfile: m.autoRoutedProfile }
1468
- : {}),
1469
1456
  ...(m.cameraFrame ? { cameraFrame: true as const } : {}),
1470
1457
  // The row's own marker, so a client gates per-row presentation on what
1471
1458
  // this row was written with rather than on the live flag.
@@ -2267,18 +2254,6 @@ export async function handleSendMessage(
2267
2254
 
2268
2255
  if (isFirstOnboarding) {
2269
2256
  persistOnboardingArtifacts(body.onboarding!);
2270
- try {
2271
- recordOnboardingEvent({
2272
- screen: "complete",
2273
- tools: body.onboarding!.tools,
2274
- tasks: body.onboarding!.tasks,
2275
- tone: body.onboarding!.tone,
2276
- googleConnected: body.onboarding!.googleConnected,
2277
- googleScopes: body.onboarding!.googleScopes,
2278
- });
2279
- } catch (err) {
2280
- log.warn({ err }, "Failed to record onboarding telemetry event");
2281
- }
2282
2257
  }
2283
2258
 
2284
2259
  scheduleCannedReplyRelease({
@@ -2360,18 +2335,6 @@ export async function handleSendMessage(
2360
2335
 
2361
2336
  if (isFirstOnboarding) {
2362
2337
  persistOnboardingArtifacts(body.onboarding!);
2363
- try {
2364
- recordOnboardingEvent({
2365
- screen: "complete",
2366
- tools: body.onboarding!.tools,
2367
- tasks: body.onboarding!.tasks,
2368
- tone: body.onboarding!.tone,
2369
- googleConnected: body.onboarding!.googleConnected,
2370
- googleScopes: body.onboarding!.googleScopes,
2371
- });
2372
- } catch (err) {
2373
- log.warn({ err }, "Failed to record onboarding telemetry event");
2374
- }
2375
2338
  }
2376
2339
 
2377
2340
  // When the scan path rewrote the first message, prefer the rewritten
@@ -17,7 +17,7 @@ import {
17
17
  listProviders,
18
18
  } from "../../providers/registry.js";
19
19
  import { countSchedules } from "../../schedule/schedule-store.js";
20
- import { getDbPath } from "../../util/platform.js";
20
+ import { getDbPath } from "../../util/layout.js";
21
21
  import { ACTOR_PRINCIPALS } from "../auth/route-policy.js";
22
22
  import type { RouteDefinition } from "./types.js";
23
23
 
@@ -1,28 +1,18 @@
1
1
  /**
2
- * Deprecated `/x/*` route context — a telemetry-emitting compatibility shim.
2
+ * Deprecated `/x/*` route context — a compatibility shim.
3
3
  *
4
4
  * Route handlers now reach daemon capabilities through `@mycadet/plugin-api`
5
5
  * (`publishEvent`, `runConversationTurn`), which work identically in-process and
6
6
  * in the route-host subprocess. Installed route files written against the older
7
7
  * `(request, context)` signature keep working: each `context` field delegates
8
- * to its plugin-api equivalent and records a deprecation-usage telemetry signal
9
- * the first time a given route touches it, so usage can be watched down to zero
10
- * before the argument is removed.
8
+ * to its plugin-api equivalent.
11
9
  *
12
- * This whole module — and the handler's second parameter — is intended to be
13
- * deleted once the telemetry shows no route still depends on `context`.
14
- *
15
- * Telemetry: emitted daemon-side via the generic `watchdog` event (the
16
- * sanctioned named-label + open-`detail`-bag carrier, as `memory_tier` uses),
17
- * so it ships without a new platform wire type. `check_name` is
18
- * `"deprecated_api_use"`; `detail` carries `{ surface, api, replacement,
19
- * route_path }`. A dedicated first-class `deprecation` wire event is proposed to
20
- * platform; when it lands, swap the emit here to it and freeze.
10
+ * The handler's second parameter is deprecated — prefer importing from
11
+ * `@mycadet/plugin-api` directly in new handlers.
21
12
  */
22
13
 
23
14
  import { runConversationTurn } from "../../plugin-api/conversation-turn.js";
24
15
  import { publishEvent } from "../../plugin-api/publish-event.js";
25
- import { recordWatchdogEvent } from "../../telemetry/watchdog-events-store.js";
26
16
 
27
17
  /**
28
18
  * The deprecated second argument passed to `/x/*` route handlers. Every member
@@ -47,60 +37,19 @@ export interface UserRouteContext {
47
37
  };
48
38
  }
49
39
 
50
- /** Stable `watchdog` label for a deprecated-API-use signal. Frozen once shipped — dashboards pivot on it. */
51
- const DEPRECATED_API_CHECK_NAME = "deprecated_api_use";
52
-
53
- /** Separator for dedup keys. `api` is a fixed `context.*` string, so `::` cannot make two distinct (route, api) pairs collide. */
54
- const KEY_SEPARATOR = "::";
55
-
56
- /**
57
- * Fired-once keys (`route_path <sep> api`) so a route in a hot loop records one
58
- * signal per deprecated field per process rather than one per call. We only
59
- * need to learn *which* route depends on *which* field, not the call count.
60
- */
61
- const reportedUses = new Set<string>();
62
-
63
- function recordDeprecatedUse(
64
- routePath: string,
65
- api: string,
66
- replacement: string,
67
- ): void {
68
- const key = `${routePath}${KEY_SEPARATOR}${api}`;
69
- if (reportedUses.has(key)) {
70
- return;
71
- }
72
- reportedUses.add(key);
73
- recordWatchdogEvent({
74
- checkName: DEPRECATED_API_CHECK_NAME,
75
- detail: {
76
- surface: "custom_route",
77
- api,
78
- replacement,
79
- route_path: routePath,
80
- },
81
- });
82
- }
83
-
84
40
  /**
85
41
  * Build the deprecated `context` argument for a handler serving `routePath`.
86
42
  * The route path is captured so a use signal can be attributed to the specific
87
43
  * route that must migrate. The object is frozen so a handler cannot corrupt the
88
44
  * shared shim by reassigning its members.
89
45
  */
90
- export function buildDeprecatedRouteContext(
91
- routePath: string,
92
- ): UserRouteContext {
46
+ export function buildDeprecatedRouteContext(): UserRouteContext {
93
47
  return Object.freeze({
94
48
  assistantEventHub: Object.freeze({
95
49
  publish: (
96
50
  event: Parameters<typeof publishEvent>[0],
97
51
  options?: Parameters<typeof publishEvent>[1],
98
52
  ): ReturnType<typeof publishEvent> => {
99
- recordDeprecatedUse(
100
- routePath,
101
- "context.assistantEventHub.publish",
102
- "plugin-api:publishEvent",
103
- );
104
53
  return publishEvent(event, options);
105
54
  },
106
55
  }),
@@ -109,11 +58,6 @@ export function buildDeprecatedRouteContext(
109
58
  conversationId: string,
110
59
  text: string,
111
60
  ): Promise<{ messageId: string }> => {
112
- recordDeprecatedUse(
113
- routePath,
114
- "context.conversations.postMessage",
115
- "plugin-api:runConversationTurn",
116
- );
117
61
  const { userMessageId } = await runConversationTurn({
118
62
  conversationId,
119
63
  content: [{ type: "text", text }],
@@ -22,8 +22,8 @@ import { getConversation } from "../../persistence/conversation-crud.js";
22
22
  import { getUsageCostForConversationWindow } from "../../persistence/llm-usage-store.js";
23
23
  import { resolveScheduleTimezone } from "../../schedule/schedule-timezone.js";
24
24
  import { readTextFileSync } from "../../util/fs.js";
25
+ import { getWorkspacePromptPath } from "../../util/layout.js";
25
26
  import { getLogger } from "../../util/logger.js";
26
- import { getWorkspacePromptPath } from "../../util/platform.js";
27
27
  import { ACTOR_PRINCIPALS } from "../auth/route-policy.js";
28
28
  import { BadRequestError, InternalError } from "./errors.js";
29
29
  import {
@@ -21,7 +21,7 @@ import {
21
21
  } from "../../util/cgroup-memory.js";
22
22
  import { getCachedContainerCpuPercent } from "../../util/container-cpu-sampler.js";
23
23
  import { getDiskUsageInfo } from "../../util/disk-usage.js";
24
- import { getWorkspacePromptPath } from "../../util/platform.js";
24
+ import { getWorkspacePromptPath } from "../../util/layout.js";
25
25
  import { APP_VERSION } from "../../version.js";
26
26
  import { resolveHatchedAtReadOnly } from "../../workspace/hatched-date.js";
27
27
  import { WORKSPACE_MIGRATIONS } from "../../workspace/migrations/registry.js";
@@ -25,7 +25,6 @@ import { ROUTES as ATTACHMENT_ROUTES } from "./attachment-routes.js";
25
25
  import { ROUTES as AUDIO_ROUTES } from "./audio-routes.js";
26
26
  import { ROUTES as AUDIT_ROUTES } from "./audit-routes.js";
27
27
  import { ROUTES as AUTH_ROUTES } from "./auth-routes.js";
28
- import { ROUTES as AUTO_PROFILE_ROUTES } from "./auto-profile-routes.js";
29
28
  import { ROUTES as AVATAR_ROUTES } from "./avatar-routes.js";
30
29
  import { ROUTES as BACKGROUND_TOOL_ROUTES } from "./background-tool-routes.js";
31
30
  import { ROUTES as BACKGROUND_WAKE_ROUTES } from "./background-wake-routes.js";
@@ -107,7 +106,6 @@ import { ROUTES as TELEGRAM_ROUTES } from "./integrations/telegram.js";
107
106
  import { ROUTES as TWILIO_ROUTES } from "./integrations/twilio.js";
108
107
  import { ROUTES as VERCEL_ROUTES } from "./integrations/vercel.js";
109
108
  import { ROUTES as INTERNAL_OAUTH_ROUTES } from "./internal-oauth-routes.js";
110
- import { ROUTES as INTERNAL_TELEMETRY_ROUTES } from "./internal-telemetry-routes.js";
111
109
  import { ROUTES as INTERNAL_TWILIO_ROUTES } from "./internal-twilio-routes.js";
112
110
  import { ROUTES as LIFECYCLE_ROUTES } from "./lifecycle-routes.js";
113
111
  import { ROUTES as LIVE_VOICE_ROUTES } from "./live-voice-routes.js";
@@ -153,7 +151,6 @@ import { ROUTES as SUBAGENT_ROUTES } from "./subagents-routes.js";
153
151
  import { ROUTES as SUGGEST_TRUST_RULE_ROUTES } from "./suggest-trust-rule-routes.js";
154
152
  import { ROUTES as SURFACE_ACTION_ROUTES } from "./surface-action-routes.js";
155
153
  import { ROUTES as SURFACE_CONTENT_ROUTES } from "./surface-content-routes.js";
156
- import { ROUTES as TELEMETRY_ROUTES } from "./telemetry-routes.js";
157
154
  import { ROUTES as THEME_ROUTES } from "./theme-routes.js";
158
155
  import { ROUTES as TRUST_RULES_ROUTES } from "./trust-rules-routes.js";
159
156
  import { ROUTES as TTS_ROUTES } from "./tts-routes.js";
@@ -218,7 +215,6 @@ export const ROUTES: RouteDefinition[] = [
218
215
  ...CONVERSATION_QUERY_ROUTES,
219
216
  ...CONVERSATION_STARTER_ROUTES,
220
217
  ...ACTIVATION_ROUTES,
221
- ...AUTO_PROFILE_ROUTES,
222
218
  ...DEBUG_ROUTES,
223
219
  ...DEFAULT_PROVIDER_ROUTES,
224
220
  ...DESKTOP_SETUP_ROUTES,
@@ -255,7 +251,6 @@ export const ROUTES: RouteDefinition[] = [
255
251
  ...INFERENCE_SEND_ROUTES,
256
252
  ...INGRESS_STATUS_ROUTES,
257
253
  ...INTERNAL_OAUTH_ROUTES,
258
- ...INTERNAL_TELEMETRY_ROUTES,
259
254
  ...MCP_AUTH_ROUTES,
260
255
  ...OAUTH_CONNECT_ROUTES,
261
256
  ...INTERNAL_TWILIO_ROUTES,
@@ -315,7 +310,6 @@ export const ROUTES: RouteDefinition[] = [
315
310
  ...SURFACE_CONTENT_ROUTES,
316
311
  ...TELEGRAM_ROUTES,
317
312
  ...TWILIO_ROUTES,
318
- ...TELEMETRY_ROUTES,
319
313
  ...THEME_ROUTES,
320
314
  ...TRUST_RULES_ROUTES,
321
315
  ...TTS_ROUTES,
@@ -15,7 +15,7 @@
15
15
  import { randomUUID } from "node:crypto";
16
16
 
17
17
  import { getUserSelectableProfilesForProvider } from "../../config/default-profile-catalog.js";
18
- import { loadConfig } from "../../config/loader.js";
18
+ import { getConfig } from "../../config/loader.js";
19
19
  import {
20
20
  nonTextConversationProfileMessage,
21
21
  profileSupportsTextGeneration,
@@ -156,7 +156,7 @@ export async function setInferenceProfileSession({
156
156
  }
157
157
 
158
158
  // --- Validate profile ---
159
- const { llm } = loadConfig();
159
+ const { llm } = getConfig();
160
160
  const profiles = getUserSelectableProfilesForProvider(llm);
161
161
  if (!Object.prototype.hasOwnProperty.call(profiles, profile)) {
162
162
  throw new BadRequestError(
@@ -193,7 +193,7 @@ export async function setInferenceProfileSession({
193
193
  let clamped: number | null | undefined;
194
194
 
195
195
  if (typeof ttlSeconds === "number") {
196
- const maxTtl = loadConfig().llm?.profileSession?.maxTtlSeconds ?? 43200;
196
+ const maxTtl = getConfig().llm?.profileSession?.maxTtlSeconds ?? 43200;
197
197
  clamped = Math.min(Math.max(1, ttlSeconds), maxTtl);
198
198
  newExpiresAt = Date.now() + clamped * 1000;
199
199
  newSessionId = callerSessionId ?? randomUUID();
@@ -24,6 +24,11 @@ import {
24
24
  MANAGED_PROFILE_NAMES,
25
25
  resolveDefaultProfileForProvider,
26
26
  } from "../../config/default-profile-catalog.js";
27
+ import {
28
+ catalogEntryFor,
29
+ modalitiesOf,
30
+ resolveModalityOverride,
31
+ } from "../../config/input-modalities.js";
27
32
  import {
28
33
  getConfig,
29
34
  getConfigReadOnly,
@@ -60,11 +65,7 @@ import {
60
65
  isModelInCatalog,
61
66
  } from "../../providers/model-catalog.js";
62
67
  import { ACTOR_PRINCIPALS } from "../auth/route-policy.js";
63
- import {
64
- commitConfigWrite,
65
- normalizeCloudProfileWrites,
66
- rejectCloudProfileDeletion,
67
- } from "./conversation-query-routes.js";
68
+ import { commitConfigWrite } from "./conversation-query-routes.js";
68
69
  import { BadRequestError, ConflictError, NotFoundError } from "./errors.js";
69
70
  import {
70
71
  describeUnavailableProfile,
@@ -111,8 +112,22 @@ const profileSummarySchema = z
111
112
  provider: z.string().nullable(),
112
113
  model: z.string().nullable(),
113
114
  status: z.enum(["active", "disabled"]),
114
- source: z.enum(["managed", "user"]),
115
115
  provider_connection: z.string().optional(),
116
+ /**
117
+ * Whether the entry's (provider, model) accepts image input: the model
118
+ * catalog's answer, with the entry's `inputModalities.image` override
119
+ * winning. Absent when the profile has no provider or model to judge
120
+ * (mix profiles, sparse stubs).
121
+ */
122
+ supportsVision: z.boolean().optional(),
123
+ /**
124
+ * Present when the profile is a mix: the weighted arm list the resolver
125
+ * expands per dispatch, carried so pickers can judge mix
126
+ * dispatchability from the summary. Absent for standard profiles.
127
+ */
128
+ mix: z
129
+ .array(z.object({ profile: z.string(), weight: z.number() }))
130
+ .optional(),
116
131
  /** Null when the profile has no provider to judge (e.g. mix profiles). */
117
132
  availability: availabilitySchema.nullable(),
118
133
  config_issue: profileConfigIssueSchema.optional(),
@@ -122,7 +137,8 @@ const profileSummarySchema = z
122
137
  const profileDetailSchema = z
123
138
  .object({
124
139
  name: z.string(),
125
- entry: z.record(z.string(), z.unknown()),
140
+ /** The full effective body, resolved through the catalog like the list. */
141
+ entry: ProfileEntry,
126
142
  availability: availabilitySchema.nullable(),
127
143
  config_issue: profileConfigIssueSchema.optional(),
128
144
  })
@@ -280,7 +296,7 @@ function profileConfigIssue(record: Record<string, unknown>): {
280
296
  code: "model_unknown" | "over_output_cap" | "no_input_room";
281
297
  message: string;
282
298
  } | null {
283
- if (record.mix != null || record.source === "managed") {
299
+ if (record.mix != null || record.provider === "cadet") {
284
300
  return null;
285
301
  }
286
302
  const provider =
@@ -531,16 +547,18 @@ async function handleListProfiles() {
531
547
  orderProfileKeys(effective, config.llm.profileOrder).map(async (name) => {
532
548
  const record = effective[name] as Record<string, unknown>;
533
549
  const configIssue = profileConfigIssue(record);
550
+ const supportsVision = resolveSupportsVision(effective[name]);
534
551
  return {
535
552
  name,
536
553
  label: typeof record.label === "string" ? record.label : null,
537
554
  provider: typeof record.provider === "string" ? record.provider : null,
538
555
  model: typeof record.model === "string" ? record.model : null,
539
556
  status: record.status === "disabled" ? "disabled" : "active",
540
- source: record.source === "managed" ? "managed" : "user",
541
557
  ...(typeof record.provider_connection === "string"
542
558
  ? { provider_connection: record.provider_connection }
543
559
  : {}),
560
+ ...(record.mix != null ? { mix: record.mix } : {}),
561
+ ...(supportsVision === undefined ? {} : { supportsVision }),
544
562
  availability: await computeProfileAvailability(record),
545
563
  ...(configIssue ? { config_issue: configIssue } : {}),
546
564
  };
@@ -549,6 +567,26 @@ async function handleListProfiles() {
549
567
  return { profiles };
550
568
  }
551
569
 
570
+ /**
571
+ * Resolve whether the entry's (provider, model) accepts image input: the
572
+ * model catalog's answer, with the entry's `inputModalities.image` override
573
+ * winning. Unknown (provider, model) pairs with no override default to
574
+ * `true` (fail-open) so image upload stays available for custom / unlisted
575
+ * models. Undefined when the entry has no provider or model to judge.
576
+ */
577
+ function resolveSupportsVision(
578
+ entry: ProfileEntry | undefined,
579
+ ): boolean | undefined {
580
+ const provider = entry?.provider;
581
+ const model = entry?.model;
582
+ if (provider == null || model == null) {
583
+ return undefined;
584
+ }
585
+ const catalogVision = catalogEntryFor(provider, model)?.supportsVision;
586
+ const imageOverride = modalitiesOf(entry)?.image;
587
+ return resolveModalityOverride(imageOverride, catalogVision) ?? true;
588
+ }
589
+
552
590
  async function handleGetProfile({ pathParams = {} }: RouteHandlerArgs) {
553
591
  const name = (pathParams.name ?? "").trim();
554
592
  if (!name) {
@@ -654,9 +692,6 @@ async function handleCreateProfile({ body = {} }: RouteHandlerArgs) {
654
692
  }
655
693
 
656
694
  profiles[name] = entry;
657
- // Defensive: for a user-owned name this is a no-op; it re-asserts the
658
- // managed-name protection at the shared write choke point.
659
- normalizeCloudProfileWrites({ llm: { profiles: { [name]: entry } } });
660
695
 
661
696
  await commitConfigWrite(raw, "create inference profile");
662
697
 
@@ -703,7 +738,7 @@ async function handleUpdateProfile({
703
738
  }
704
739
  throw new NotFoundError(`Profile "${name}" not found.`);
705
740
  }
706
- if (MANAGED_PROFILE_NAMES.has(name) && existing.source === "managed") {
741
+ if (MANAGED_PROFILE_NAMES.has(name) && existing.provider === "cadet") {
707
742
  throw new BadRequestError(
708
743
  `Cannot edit cloud profile "${name}". Cloud profiles are read-only; duplicate to a custom profile to customize.`,
709
744
  );
@@ -764,8 +799,6 @@ async function handleUpdateProfile({
764
799
  ...fragmentFromBody(body as Record<string, unknown>),
765
800
  ...(input.provider !== undefined ? { provider: input.provider } : {}),
766
801
  ...(input.model !== undefined ? { model: input.model } : {}),
767
- source:
768
- existing.source === "managed" ? "user" : (existing.source ?? "user"),
769
802
  };
770
803
  // Keep the allowUnlisted marker faithful to the pair being stored: stamp
771
804
  // it on a deliberate unlisted acceptance (warnings can only be the
@@ -799,7 +832,6 @@ async function handleUpdateProfile({
799
832
  }
800
833
 
801
834
  profiles[name] = merged;
802
- normalizeCloudProfileWrites({ llm: { profiles: { [name]: merged } } });
803
835
 
804
836
  await commitConfigWrite(raw, "update inference profile");
805
837
 
@@ -834,11 +866,6 @@ async function handleDeleteProfile({ pathParams = {} }: RouteHandlerArgs) {
834
866
  const llm = asPlainObject(raw.llm);
835
867
  const profiles = asPlainObject(llm?.profiles);
836
868
 
837
- // Reject deletion of a cloud default with a clear message before the
838
- // existence check, so `delete balanced` explains itself even when the
839
- // managed stub is on disk.
840
- rejectCloudProfileDeletion({ llm: { profiles: { [name]: null } } });
841
-
842
869
  if (!profiles || profiles[name] === undefined) {
843
870
  throw new NotFoundError(`Profile "${name}" not found.`);
844
871
  }
@@ -600,7 +600,6 @@ async function handleDeleteConnection({ pathParams = {} }: RouteHandlerArgs) {
600
600
  // Cloud connections are write-protected: `seedCanonicalConnections` would
601
601
  // re-upsert them on the next daemon boot anyway, so a successful delete here
602
602
  // produces a confusing delete → reappear loop. Reject outright. Mirrors
603
- // `rejectCloudProfileDeletion` for cloud profiles (which are similarly
604
603
  // re-overlaid by `seed-inference-profiles.ts` on boot).
605
604
  //
606
605
  // Gated on the row, not the name: an install predating the reserved name can
@@ -5,7 +5,7 @@ import {
5
5
  resolveDefaultProfileKey,
6
6
  resolveShippedDefaultProfileKey,
7
7
  } from "../../config/llm-resolver.js";
8
- import { loadConfig } from "../../config/loader.js";
8
+ import { getConfig } from "../../config/loader.js";
9
9
  import {
10
10
  CALL_SITE_CATALOG,
11
11
  CALL_SITE_DOMAINS,
@@ -55,7 +55,7 @@ export function buildCallSiteCatalog(llm: LLMConfig) {
55
55
  }
56
56
 
57
57
  async function handleGetCallSites() {
58
- const { llm } = loadConfig();
58
+ const { llm } = getConfig();
59
59
  return {
60
60
  domains: CALL_SITE_DOMAINS,
61
61
  callSites: buildCallSiteCatalog(llm),
@@ -74,7 +74,7 @@ export type LlmProfilesListResult = z.infer<
74
74
  >;
75
75
 
76
76
  async function handleListProfiles(): Promise<LlmProfilesListResult> {
77
- const { llm } = loadConfig();
77
+ const { llm } = getConfig();
78
78
  const profiles = getUserSelectableProfilesForProvider(llm);
79
79
  return {
80
80
  profiles: Object.keys(profiles).sort(),
@@ -19,7 +19,7 @@ import { afterEach, beforeEach, describe, expect, test } from "bun:test";
19
19
  import {
20
20
  getWorkspacePluginsDir,
21
21
  getWorkspaceSkillsDir,
22
- } from "../../../../util/platform.js";
22
+ } from "../../../../util/layout.js";
23
23
  import {
24
24
  collectInstalledInventory,
25
25
  collectPluginInventory,
@@ -35,7 +35,7 @@ mock.module("../../../../persistence/conversation-directories.js", () => ({
35
35
  },
36
36
  }));
37
37
 
38
- import { getConversationsDir } from "../../../../util/platform.js";
38
+ import { getConversationsDir } from "../../../../util/layout.js";
39
39
  import { collectWorkspaceData } from "../workspace-allowlist.js";
40
40
 
41
41
  let staging: string;
@@ -25,7 +25,7 @@ import { tmpdir } from "node:os";
25
25
  import { join } from "node:path";
26
26
  import { afterEach, beforeEach, describe, expect, test } from "bun:test";
27
27
 
28
- import { getConversationsDir } from "../../../../util/platform.js";
28
+ import { getConversationsDir } from "../../../../util/layout.js";
29
29
  import { collectWorkspaceData } from "../workspace-allowlist.js";
30
30
 
31
31
  // ---------------------------------------------------------------------------
@@ -28,8 +28,8 @@ import { join } from "node:path";
28
28
  import { StringDecoder } from "node:string_decoder";
29
29
 
30
30
  import { parseConversationDirName } from "../../../persistence/conversation-directories.js";
31
+ import { getConversationsDir } from "../../../util/layout.js";
31
32
  import { getLogger } from "../../../util/logger.js";
32
- import { getConversationsDir } from "../../../util/platform.js";
33
33
 
34
34
  const log = getLogger("log-export-workspace");
35
35
 
@@ -22,7 +22,7 @@ import { join } from "node:path";
22
22
  import { and, desc, eq, gte, lte } from "drizzle-orm";
23
23
  import { z } from "zod";
24
24
 
25
- import { overlayWorkspaceMcpForConfigRead } from "../../mcp/workspace-mcp-config.js";
25
+ import { loadWorkspaceMcpConfig } from "../../mcp/workspace-mcp-config.js";
26
26
  import { getDb, getLogsDb } from "../../persistence/db-connection.js";
27
27
  import {
28
28
  llmRequestLogs,
@@ -30,12 +30,12 @@ import {
30
30
  messages,
31
31
  toolInvocations,
32
32
  } from "../../persistence/schema/index.js";
33
- import { getLogger, LOG_FILE_PATTERN } from "../../util/logger.js";
34
33
  import {
35
34
  getDaemonStderrLogPath,
36
35
  getDataDir,
37
36
  getWorkspaceConfigPath,
38
- } from "../../util/platform.js";
37
+ } from "../../util/layout.js";
38
+ import { getLogger, LOG_FILE_PATTERN } from "../../util/logger.js";
39
39
  import { APP_VERSION, COMMIT_SHA } from "../../version.js";
40
40
  import { assistantEventHub } from "../assistant-event-hub.js";
41
41
  import { ACTOR_PRINCIPALS } from "../auth/route-policy.js";
@@ -569,20 +569,22 @@ function readSanitizedConfig(): Record<string, unknown> | undefined {
569
569
  }
570
570
  }
571
571
 
572
- overlayWorkspaceMcpForConfigRead(config);
573
- const mcpServers = asRecord(asRecord(config.mcp)?.servers);
574
- for (const server of Object.values(mcpServers ?? {})) {
575
- const transport = asRecord(asRecord(server)?.transport);
576
- if (!transport) {
572
+ // Project the workspace MCP servers onto the export, read through the
573
+ // module's API. Raw on purpose: the walk below redacts transport
574
+ // headers and env, which must be present to sanitize.
575
+ const mcp = loadWorkspaceMcpConfig();
576
+ config.mcp = mcp;
577
+ const mcpServers = mcp.servers;
578
+ for (const server of Object.values(mcpServers)) {
579
+ const transport = server.transport;
580
+ if (transport.type === "stdio") {
581
+ if (transport.env) {
582
+ transport.env = redactValueMap(transport.env);
583
+ }
577
584
  continue;
578
585
  }
579
- const headers = asRecord(transport.headers);
580
- if (headers) {
581
- transport.headers = redactValueMap(headers);
582
- }
583
- const env = asRecord(transport.env);
584
- if (env) {
585
- transport.env = redactValueMap(env);
586
+ if (transport.headers) {
587
+ transport.headers = redactValueMap(transport.headers);
586
588
  }
587
589
  }
588
590
 
@@ -13,7 +13,7 @@ import { getDb } from "../../persistence/db-connection.js";
13
13
  import { getMaxRollbackVersion } from "../../persistence/migrations/run-migrations.js";
14
14
  import { rollbackMemoryMigration } from "../../persistence/migrations/validate-migration-state.js";
15
15
  import { migrationSteps } from "../../persistence/steps.js";
16
- import { getWorkspaceDir } from "../../util/platform.js";
16
+ import { getWorkspaceDir } from "../../util/layout.js";
17
17
  import { WORKSPACE_MIGRATIONS } from "../../workspace/migrations/registry.js";
18
18
  import {
19
19
  getLastWorkspaceMigrationId,
@@ -33,7 +33,6 @@ import {
33
33
  getDb,
34
34
  getLogsSqlite,
35
35
  getMemorySqlite,
36
- getTelemetrySqlite,
37
36
  resetDb,
38
37
  } from "../../persistence/db-connection.js";
39
38
  import { validateMigrationState } from "../../persistence/migrations/validate-migration-state.js";
@@ -49,8 +48,8 @@ import {
49
48
  getCredentialMetadata,
50
49
  upsertCredentialMetadata,
51
50
  } from "../../tools/credentials/metadata-store.js";
51
+ import { getWorkspaceDir, getWorkspaceHooksDir } from "../../util/layout.js";
52
52
  import { getLogger } from "../../util/logger.js";
53
- import { getWorkspaceDir, getWorkspaceHooksDir } from "../../util/platform.js";
54
53
  import { APP_VERSION } from "../../version.js";
55
54
  import { DAEMON_INTERNAL_ASSISTANT_ID } from "../assistant-scope.js";
56
55
  import { ACTOR_PRINCIPALS } from "../auth/route-policy.js";
@@ -197,7 +196,7 @@ async function checkpointDbsForExport(): Promise<void> {
197
196
  for (const [label, sqlite] of [
198
197
  ["logs", getLogsSqlite()],
199
198
  ["memory", getMemorySqlite()],
200
- ["telemetry", getTelemetrySqlite()],
199
+ // (no telemetry: migration 387 deletes that database file outright)
201
200
  ] as const) {
202
201
  if (!sqlite) {
203
202
  log.warn(
@@ -20,11 +20,11 @@ import {
20
20
  } from "../../monitoring/control.js";
21
21
  import type { ResourceSample } from "../../monitoring/resource-sample-types.js";
22
22
  import { SampleRingBuffer } from "../../monitoring/sample-ring-buffer.js";
23
- import { getLogger } from "../../util/logger.js";
24
23
  import {
25
24
  getMonitoringDataDir,
26
25
  getMonitoringPidPath,
27
- } from "../../util/platform.js";
26
+ } from "../../util/layout.js";
27
+ import { getLogger } from "../../util/logger.js";
28
28
  import { ACTOR_PRINCIPALS } from "../auth/route-policy.js";
29
29
  import { InternalError } from "./errors.js";
30
30
  import type { RouteDefinition } from "./types.js";