@mycadet/assistant 0.12.9 → 0.12.11

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 (658) hide show
  1. package/Dockerfile +0 -8
  2. package/eslint-rules/__tests__/cli-no-daemon-internals.test.ts +1 -1
  3. package/node_modules/@mycadet/ces-client/node_modules/@mycadet/service-contracts/src/__tests__/ingress.test.ts +8 -8
  4. package/node_modules/@mycadet/ces-client/node_modules/@mycadet/service-contracts/src/ingress.ts +1 -1
  5. package/node_modules/@mycadet/ces-client/src/http-credentials.ts +18 -1
  6. package/node_modules/@mycadet/gateway-client/node_modules/@mycadet/service-contracts/src/__tests__/ingress.test.ts +8 -8
  7. package/node_modules/@mycadet/gateway-client/node_modules/@mycadet/service-contracts/src/ingress.ts +1 -1
  8. package/node_modules/@mycadet/service-contracts/src/__tests__/ingress.test.ts +8 -8
  9. package/node_modules/@mycadet/service-contracts/src/ingress.ts +1 -1
  10. package/openapi.yaml +62 -910
  11. package/package.json +3 -7
  12. package/scripts/build-test-fixtures.ts +1 -1
  13. package/scripts/generate-openapi.ts +22 -6
  14. package/scripts/postinstall.ts +4 -10
  15. package/scripts/run-tests.ts +0 -21
  16. package/src/__tests__/adaptive-thinking-repair.test.ts +19 -57
  17. package/src/__tests__/agent-loop.test.ts +0 -76
  18. package/src/__tests__/anthropic-provider.test.ts +6 -6
  19. package/src/__tests__/assert-not-live-db.ts +1 -1
  20. package/src/__tests__/assistant-id-boundary-guard.test.ts +3 -3
  21. package/src/__tests__/attachments-store-heic-normalize.test.ts +1 -1
  22. package/src/__tests__/attachments-store.test.ts +1 -1
  23. package/src/__tests__/audit-log-rotation.test.ts +1 -1
  24. package/src/__tests__/btw-routes.test.ts +1 -1
  25. package/src/__tests__/byok-default-profile-ensure.test.ts +21 -27
  26. package/src/__tests__/call-conversation-messages.test.ts +0 -5
  27. package/src/__tests__/call-recovery.test.ts +2 -7
  28. package/src/__tests__/call-routes-http.test.ts +0 -12
  29. package/src/__tests__/call-store.test.ts +2 -7
  30. package/src/__tests__/catalog-files.test.ts +7 -5
  31. package/src/__tests__/checker.test.ts +1 -1
  32. package/src/__tests__/cli-memory-v2-reembed-skills.test.ts +4 -4
  33. package/src/__tests__/cloud-client-verify-credential.test.ts +0 -4
  34. package/src/__tests__/cloud-credential-catalog-cli.test.ts +14 -14
  35. package/src/__tests__/cloud-profile-guard.test.ts +87 -404
  36. package/src/__tests__/compaction-events.test.ts +2 -2
  37. package/src/__tests__/config-loader-backfill.test.ts +74 -163
  38. package/src/__tests__/config-loader-cloud-defaults.test.ts +11 -11
  39. package/src/__tests__/config-loader-corrupt.test.ts +10 -10
  40. package/src/__tests__/config-loader-quarantine-notice.test.ts +7 -7
  41. package/src/__tests__/config-loader-validation-reset-notice.test.ts +11 -11
  42. package/src/__tests__/config-schema.test.ts +26 -27
  43. package/src/__tests__/config-set-route.test.ts +2 -6
  44. package/src/__tests__/conversation-agent-loop-inference-profile.test.ts +28 -300
  45. package/src/__tests__/conversation-agent-loop-overflow.test.ts +39 -246
  46. package/src/__tests__/conversation-agent-loop.test.ts +2 -58
  47. package/src/__tests__/conversation-clear-safety.test.ts +0 -30
  48. package/src/__tests__/conversation-inference-profile-route.test.ts +1 -1
  49. package/src/__tests__/conversation-queue.test.ts +1 -1
  50. package/src/__tests__/conversation-runtime-assembly.test.ts +1 -1
  51. package/src/__tests__/conversation-skill-tools.test.ts +4 -444
  52. package/src/__tests__/conversation-slash-commands.test.ts +1 -1
  53. package/src/__tests__/conversation-store.test.ts +1 -84
  54. package/src/__tests__/conversation-surface-state.test.ts +0 -16
  55. package/src/__tests__/credential-health-service.test.ts +14 -1
  56. package/src/__tests__/credential-record-retire.test.ts +1 -1
  57. package/src/__tests__/credential-record-write-through.test.ts +1 -1
  58. package/src/__tests__/credential-security-invariants.test.ts +0 -145
  59. package/src/__tests__/custom-profile-ensure.test.ts +1 -1
  60. package/src/__tests__/default-profile-catalog-fallback.test.ts +5 -15
  61. package/src/__tests__/deterministic-verification-control-plane.test.ts +0 -2
  62. package/src/__tests__/dictation-profile-store.test.ts +6 -6
  63. package/src/__tests__/disk-usage.test.ts +28 -164
  64. package/src/__tests__/docker-signing-key-bootstrap.test.ts +1 -1
  65. package/src/__tests__/embedding-cloud-proxy-selection.test.ts +1 -1
  66. package/src/__tests__/emit-event-signal.test.ts +1 -1
  67. package/src/__tests__/gateway-client-cloud-outbound.test.ts +3 -3
  68. package/src/__tests__/gateway-only-enforcement.test.ts +1 -1
  69. package/src/__tests__/guardian-dispatch.test.ts +0 -13
  70. package/src/__tests__/helpers/seed-app.ts +1 -1
  71. package/src/__tests__/host-cu-routes-targeted.test.ts +1 -1
  72. package/src/__tests__/host-shell-tool.test.ts +1 -1
  73. package/src/__tests__/identity-routes.test.ts +1 -1
  74. package/src/__tests__/inference-profile-session-handler.test.ts +1 -1
  75. package/src/__tests__/inference-profile-session-ipc.test.ts +1 -1
  76. package/src/__tests__/injector-chain.test.ts +1 -1
  77. package/src/__tests__/injector-config-quarantine-notice.test.ts +1 -1
  78. package/src/__tests__/injector-config-validation-reset-notice.test.ts +1 -1
  79. package/src/__tests__/injector-pkb-v2-silenced.test.ts +1 -1
  80. package/src/__tests__/{platform.test.ts → layout.test.ts} +1 -1
  81. package/src/__tests__/list-all-apps.test.ts +1 -1
  82. package/src/__tests__/live-workspace-guard.test.ts +2 -2
  83. package/src/__tests__/llm-resolver-override-or-default.test.ts +5 -6
  84. package/src/__tests__/llm-resolver.test.ts +7 -7
  85. package/src/__tests__/llm-schema-fallback-profile.test.ts +9 -10
  86. package/src/__tests__/llm-usage-store.test.ts +0 -495
  87. package/src/__tests__/log-export-routes.test.ts +1 -1
  88. package/src/__tests__/mcp-config-secret-boundary.test.ts +12 -53
  89. package/src/__tests__/mcp-list-plugin-servers.test.ts +1 -1
  90. package/src/__tests__/memory-config-file-parity.test.ts +1 -1
  91. package/src/__tests__/memory-v2-static-injector.test.ts +1 -1
  92. package/src/__tests__/messages-read-boundary-guard.test.ts +0 -2
  93. package/src/__tests__/notification-guardian-path.test.ts +0 -7
  94. package/src/__tests__/onboarding-persona-write.test.ts +1 -1
  95. package/src/__tests__/openai-provider.test.ts +8 -8
  96. package/src/__tests__/path-policy.test.ts +1 -1
  97. package/src/__tests__/persona-resolver.test.ts +1 -1
  98. package/src/__tests__/plugin-app-serve-routes.test.ts +1 -1
  99. package/src/__tests__/plugin-effective-enabled-set.test.ts +1 -1
  100. package/src/__tests__/plugin-import-boundary-guard.test.ts +4 -6
  101. package/src/__tests__/plugin-import-boundary-reverse-guard.test.ts +0 -3
  102. package/src/__tests__/provider-cloud-proxy-integration.test.ts +1 -5
  103. package/src/__tests__/provider-connections-backfill.test.ts +10 -10
  104. package/src/__tests__/prune-old-conversations-job.test.ts +6 -31
  105. package/src/__tests__/resolve-app.test.ts +1 -1
  106. package/src/__tests__/run-due-schedules.test.ts +1 -1
  107. package/src/__tests__/scaffold-managed-skill-tool.test.ts +0 -53
  108. package/src/__tests__/schedule-routes.test.ts +1 -1
  109. package/src/__tests__/schedule-store.test.ts +1 -1
  110. package/src/__tests__/secret-routes-cloud-proxy.test.ts +1 -1
  111. package/src/__tests__/skill-load-plugin-scope.test.ts +1 -1
  112. package/src/__tests__/surface-completion-compaction-boundary.test.ts +1 -1
  113. package/src/__tests__/tool-approval-handler.test.ts +1 -1
  114. package/src/__tests__/tool-audit.test.ts +5 -235
  115. package/src/__tests__/tool-executor-lifecycle-events.test.ts +54 -114
  116. package/src/__tests__/tools-get-route.test.ts +1 -1
  117. package/src/__tests__/turn-outcome-read.test.ts +1 -1
  118. package/src/__tests__/twilio-routes.test.ts +0 -1
  119. package/src/__tests__/usage-attribution.test.ts +0 -31
  120. package/src/__tests__/verification-control-plane-policy.test.ts +3 -10
  121. package/src/__tests__/visible-app-context.test.ts +1 -1
  122. package/src/__tests__/voice-ingress-preflight.test.ts +1 -1
  123. package/src/__tests__/workspace-git-service.test.ts +1 -1
  124. package/src/__tests__/workspace-greetings.test.ts +1 -1
  125. package/src/acp/__tests__/helpers/acp-config-stub.ts +1 -1
  126. package/src/activation/progress-store.ts +1 -1
  127. package/src/activation/turn-hooks.ts +1 -1
  128. package/src/agent/loop.ts +0 -51
  129. package/src/apps/app-store.ts +1 -1
  130. package/src/avatar/__tests__/avatar-store.test.ts +2 -172
  131. package/src/avatar/accent-backfill.ts +1 -1
  132. package/src/avatar/avatar-manifest.ts +1 -1
  133. package/src/avatar/avatar-store.ts +10 -69
  134. package/src/avatar/ensure-raster.ts +1 -1
  135. package/src/avatar/identity-avatar.ts +1 -1
  136. package/src/avatar/sync-avatar.ts +1 -1
  137. package/src/avatar/traits-png-sync.ts +1 -1
  138. package/src/bundler/compiler-tools.ts +1 -1
  139. package/src/bundler/package-resolver.ts +1 -1
  140. package/src/calls/__tests__/call-controller.test.ts +25 -27
  141. package/src/calls/active-call-lease.ts +1 -1
  142. package/src/calls/call-controller.ts +3 -3
  143. package/src/calls/call-domain.ts +4 -8
  144. package/src/calls/call-store.ts +2 -76
  145. package/src/calls/resolve-call-tts-provider.ts +3 -3
  146. package/src/calls/twilio-config.ts +3 -3
  147. package/src/calls/twilio-rest.ts +2 -2
  148. package/src/calls/voice-ingress-preflight.ts +2 -2
  149. package/src/cli/bundled-modules.ts +0 -2
  150. package/src/cli/commands/__tests__/apps.test.ts +1 -1
  151. package/src/cli/commands/__tests__/plugins.test.ts +9 -66
  152. package/src/cli/commands/__tests__/ps.test.ts +67 -0
  153. package/src/cli/commands/auth.help.ts +2 -2
  154. package/src/cli/commands/avatar.ts +1 -1
  155. package/src/cli/commands/changelog.ts +1 -1
  156. package/src/cli/commands/cloud/__tests__/subscription.test.ts +2 -2
  157. package/src/cli/commands/cloud/index.help.ts +1 -1
  158. package/src/cli/commands/cloud/index.ts +2 -2
  159. package/src/cli/commands/db/refresh.ts +1 -1
  160. package/src/cli/commands/db/repair-step-conversation-backfill.ts +1 -1
  161. package/src/cli/commands/db/repair.ts +1 -1
  162. package/src/cli/commands/db/status.ts +1 -1
  163. package/src/cli/commands/inference-profiles.ts +1 -12
  164. package/src/cli/commands/memory/__tests__/memory-v3.test.ts +1 -116
  165. package/src/cli/commands/memory/index.help.ts +1 -43
  166. package/src/cli/commands/memory/memory-v3.ts +0 -64
  167. package/src/cli/commands/plugins.ts +54 -205
  168. package/src/cli/commands/ps.ts +5 -2
  169. package/src/cli/commands/status.ts +1 -1
  170. package/src/cli/index.help.ts +0 -2
  171. package/src/cli/lib/__tests__/inspect-plugin.test.ts +36 -66
  172. package/src/cli/lib/__tests__/install-from-cloud.test.ts +1 -1
  173. package/src/cli/lib/__tests__/install-from-github.test.ts +41 -117
  174. package/src/cli/lib/__tests__/plugin-catalog-cache.test.ts +2 -185
  175. package/src/cli/lib/__tests__/plugin-catalog-resolve.test.ts +36 -66
  176. package/src/cli/lib/__tests__/plugin-catalog-visibility.test.ts +4 -6
  177. package/src/cli/lib/__tests__/plugin-details.test.ts +113 -96
  178. package/src/cli/lib/__tests__/search-plugins.test.ts +9 -16
  179. package/src/cli/lib/__tests__/uninstall-plugin.test.ts +1 -1
  180. package/src/cli/lib/__tests__/upgrade-plugin.test.ts +38 -15
  181. package/src/cli/lib/diff-plugin.ts +1 -1
  182. package/src/cli/lib/inspect-plugin.ts +13 -97
  183. package/src/cli/lib/install-from-cloud.ts +1 -1
  184. package/src/cli/lib/install-from-github.ts +75 -154
  185. package/src/cli/lib/install-plugin-dependencies.ts +1 -1
  186. package/src/cli/lib/list-installed-plugins.ts +1 -1
  187. package/src/cli/lib/open-browser.ts +1 -1
  188. package/src/cli/lib/plugin-catalog-cache.ts +8 -51
  189. package/src/cli/lib/plugin-catalog-resolve.ts +3 -22
  190. package/src/cli/lib/plugin-details.ts +5 -27
  191. package/src/cli/lib/plugin-marketplace.ts +18 -266
  192. package/src/cli/lib/search-plugins.ts +23 -43
  193. package/src/cli/lib/toggle-plugin.ts +1 -1
  194. package/src/cli/lib/uninstall-plugin.ts +1 -1
  195. package/src/cli/lib/upgrade-plugin.ts +3 -49
  196. package/src/cli/program.ts +1 -3
  197. package/src/cli.ts +1 -1
  198. package/src/cloud/client.ts +0 -6
  199. package/src/cloud/consent-cache.test.ts +22 -201
  200. package/src/cloud/consent-cache.ts +16 -111
  201. package/src/cloud/sync-identity.ts +1 -1
  202. package/src/config/__tests__/chat-settings.test.ts +1 -1
  203. package/src/config/__tests__/cloud-identity.test.ts +15 -2
  204. package/src/config/__tests__/default-plugin-skill-discovery.test.ts +1 -1
  205. package/src/config/__tests__/default-profile-catalog.test.ts +12 -51
  206. package/src/config/__tests__/deployment-context-defaults.test.ts +13 -13
  207. package/src/config/__tests__/loader-callsite-strip-fallback.test.ts +4 -4
  208. package/src/config/__tests__/loader-last-known-good.test.ts +9 -9
  209. package/src/config/__tests__/loader-sparse-array-cleanup.test.ts +7 -7
  210. package/src/config/__tests__/plugin-resident-skill-discovery.test.ts +1 -1
  211. package/src/config/__tests__/profile-materialization.test.ts +2 -4
  212. package/src/config/__tests__/sync-gated-profiles.test.ts +1 -106
  213. package/src/config/acp-agent-write.ts +1 -1
  214. package/src/config/bundled-skills/settings/tools/open-system-settings.test.ts +1 -1
  215. package/src/config/bundled-skills/settings/tools/open-system-settings.ts +1 -1
  216. package/src/config/call-site-defaults.ts +0 -6
  217. package/src/config/cloud-identity.ts +12 -5
  218. package/src/config/composer-preferences.ts +1 -1
  219. package/src/config/default-profile-catalog.ts +8 -75
  220. package/src/config/default-profile-names.ts +2 -25
  221. package/src/config/env-registry.ts +1 -14
  222. package/src/config/env.ts +8 -6
  223. package/src/config/llm-resolver.ts +1 -2
  224. package/src/config/loader.ts +13 -17
  225. package/src/config/profile-materialization.ts +1 -1
  226. package/src/config/schema.ts +1 -7
  227. package/src/config/schemas/call-site-catalog.ts +0 -7
  228. package/src/config/schemas/llm.ts +25 -32
  229. package/src/config/seed-inference-profiles.ts +16 -17
  230. package/src/config/skills.ts +2 -2
  231. package/src/config/sync-gated-profiles.ts +6 -24
  232. package/src/credential-health/credential-health-service.ts +10 -3
  233. package/src/daemon/approval-generators.ts +3 -3
  234. package/src/daemon/config-watcher.ts +2 -2
  235. package/src/daemon/conversation-agent-loop-handlers.ts +0 -18
  236. package/src/daemon/conversation-agent-loop.ts +6 -97
  237. package/src/daemon/conversation-process.ts +1 -1
  238. package/src/daemon/conversation-skill-tools.ts +4 -72
  239. package/src/daemon/conversation-store.ts +1 -1
  240. package/src/daemon/conversation-surface-state.ts +0 -33
  241. package/src/daemon/conversation-surfaces.ts +1 -86
  242. package/src/daemon/conversation-tool-setup.test.ts +1 -1
  243. package/src/daemon/conversation-tool-setup.ts +0 -23
  244. package/src/daemon/conversation.ts +3 -5
  245. package/src/daemon/daemon-control.ts +3 -3
  246. package/src/daemon/dictation-profile-store.ts +3 -3
  247. package/src/daemon/event-loop-watchdog.test.ts +2 -198
  248. package/src/daemon/event-loop-watchdog.ts +0 -185
  249. package/src/daemon/external-plugins-bootstrap.ts +1 -1
  250. package/src/daemon/first-greeting.ts +1 -1
  251. package/src/daemon/handlers/skills.ts +1 -1
  252. package/src/daemon/host-app-control-proxy.ts +1 -1
  253. package/src/daemon/host-cu-proxy.ts +2 -2
  254. package/src/daemon/identity-helpers.ts +1 -1
  255. package/src/daemon/lifecycle.ts +11 -15
  256. package/src/daemon/main.ts +1 -1
  257. package/src/daemon/now-scratchpad.ts +1 -1
  258. package/src/daemon/process-message.ts +4 -4
  259. package/src/daemon/profiler-run-store.ts +2 -2
  260. package/src/daemon/providers-setup.ts +2 -2
  261. package/src/daemon/shutdown-handlers.ts +0 -10
  262. package/src/daemon/sqlite-corruption-watchdog.test.ts +2 -142
  263. package/src/daemon/sqlite-corruption-watchdog.ts +17 -81
  264. package/src/daemon/tool-side-effects.ts +1 -1
  265. package/src/desktop/desktop-session-manager.ts +1 -1
  266. package/src/desktop/desktop-wallpaper-renderer.ts +1 -1
  267. package/src/heartbeat/heartbeat-service.ts +1 -1
  268. package/src/home/feed-writer.ts +1 -1
  269. package/src/home/home-greeting-cache.ts +1 -1
  270. package/src/home/relationship-state-writer.ts +2 -2
  271. package/src/hooks/__tests__/hook-live-reload.test.ts +1 -1
  272. package/src/hooks/hook-loader.ts +2 -2
  273. package/src/inbound/__tests__/oauth-callback-url.test.ts +2 -2
  274. package/src/inbound/oauth-callback-url.ts +3 -3
  275. package/src/ipc/__tests__/attachment-ipc.test.ts +1 -1
  276. package/src/ipc/socket-path.ts +1 -1
  277. package/src/live-voice/__tests__/live-voice-archive.test.ts +1 -1
  278. package/src/live-voice/__tests__/live-voice-vad.test.ts +1 -1
  279. package/src/live-voice/live-voice-session.ts +3 -66
  280. package/src/mcp/__tests__/effective-config.test.ts +1 -1
  281. package/src/mcp/__tests__/mcp-oauth-client-registration.test.ts +2 -2
  282. package/src/mcp/__tests__/mcp-oauth-provider.test.ts +2 -3
  283. package/src/mcp/__tests__/reload-signal-emission.test.ts +1 -1
  284. package/src/mcp/__tests__/reload-signal.test.ts +1 -1
  285. package/src/mcp/__tests__/workspace-mcp-config.test.ts +19 -21
  286. package/src/mcp/reload-signal.ts +1 -1
  287. package/src/mcp/workspace-mcp-config.ts +1 -23
  288. package/src/messaging/draft-store.ts +1 -1
  289. package/src/monitoring/__tests__/active-conversations.test.ts +1 -1
  290. package/src/monitoring/__tests__/page-cache.test.ts +1 -1
  291. package/src/monitoring/__tests__/stall-capture.test.ts +1 -1
  292. package/src/monitoring/__tests__/workspace-git-heartbeat.test.ts +1 -1
  293. package/src/monitoring/active-conversations.ts +1 -1
  294. package/src/monitoring/control.ts +1 -1
  295. package/src/monitoring/daemon-boot-time.ts +1 -1
  296. package/src/monitoring/daemon-heartbeat.ts +1 -1
  297. package/src/monitoring/page-cache.ts +1 -1
  298. package/src/monitoring/plugin-auto-update.ts +1 -7
  299. package/src/monitoring/plugin-source-watch.ts +1 -1
  300. package/src/monitoring/recovery/db.ts +1 -1
  301. package/src/monitoring/recovery/inflight-content.ts +1 -1
  302. package/src/monitoring/resource-sampler.ts +3 -14
  303. package/src/monitoring/stall-capture.ts +1 -1
  304. package/src/monitoring/worker.ts +9 -76
  305. package/src/monitoring/workspace-git-heartbeat.ts +1 -1
  306. package/src/oauth/connect-orchestrator.ts +4 -4
  307. package/src/permissions/checker.ts +1 -1
  308. package/src/permissions/workspace-policy.ts +1 -1
  309. package/src/persistence/__tests__/main-db-readonly-probe.ts +27 -52
  310. package/src/persistence/__tests__/message-content-file.test.ts +1 -1
  311. package/src/persistence/__tests__/slow-sync-log.test.ts +0 -2
  312. package/src/persistence/attachments-store.ts +1 -1
  313. package/src/persistence/conversation-crud.ts +1 -38
  314. package/src/persistence/conversation-directories.ts +1 -1
  315. package/src/persistence/conversation-types.ts +0 -8
  316. package/src/persistence/db-async-query.ts +1 -1
  317. package/src/persistence/db-connection.ts +11 -1
  318. package/src/persistence/db-init.ts +1 -1
  319. package/src/persistence/db-maintenance.ts +1 -1
  320. package/src/persistence/embeddings/__tests__/embedding-local-lifecycle.test.ts +1 -1
  321. package/src/persistence/embeddings/embedding-local.ts +4 -4
  322. package/src/persistence/embeddings/embedding-runtime-manager.ts +1 -1
  323. package/src/persistence/embeddings/qdrant-client.ts +1 -1
  324. package/src/persistence/embeddings/qdrant-manager.ts +1 -1
  325. package/src/persistence/job-handlers/__tests__/message-lexical-backfill.test.ts +1 -1
  326. package/src/persistence/job-handlers/__tests__/message-lexical-enqueue.test.ts +1 -1
  327. package/src/persistence/job-handlers/cleanup.ts +8 -17
  328. package/src/persistence/llm-usage-store.ts +2 -229
  329. package/src/persistence/message-content-file.ts +1 -1
  330. package/src/persistence/migrations/209-strip-thinking-from-consolidated.ts +1 -1
  331. package/src/persistence/migrations/222-strip-placeholder-sentinels-from-messages.ts +1 -1
  332. package/src/persistence/migrations/296-rewrite-balanced-economy-profile-pins.test.ts +1 -1
  333. package/src/persistence/migrations/306-rewrite-frontier-profile-pins.test.ts +1 -1
  334. package/src/persistence/migrations/329-move-onboarding-events-to-telemetry-db.test.ts +13 -0
  335. package/src/persistence/migrations/330-move-auth-fallback-events-to-telemetry-db.test.ts +13 -0
  336. package/src/persistence/migrations/331-move-lifecycle-events-to-telemetry-db.test.ts +13 -0
  337. package/src/persistence/migrations/332-move-skill-loaded-events-to-telemetry-db.test.ts +13 -0
  338. package/src/persistence/migrations/333-create-telemetry-events-table.test.ts +7 -4
  339. package/src/persistence/migrations/334-backfill-telemetry-events-outbox.test.ts +13 -0
  340. package/src/persistence/migrations/387-drop-telemetry-tables.ts +51 -0
  341. package/src/persistence/migrations/__tests__/327-create-flush-checkpoints.test.ts +9 -1
  342. package/src/persistence/migrations/__tests__/387-drop-telemetry-tables.test.ts +79 -0
  343. package/src/persistence/migrations/helpers/relocation.ts +1 -1
  344. package/src/persistence/migrations/run-migrations.ts +1 -1
  345. package/src/persistence/migrations/validate-migration-state.ts +1 -1
  346. package/src/persistence/raw-query.ts +1 -29
  347. package/src/persistence/slow-sync-log.ts +0 -23
  348. package/src/persistence/steps.ts +2 -0
  349. package/src/{telemetry → persistence}/tool-audit.ts +6 -121
  350. package/src/plugin-api/index.ts +1 -1
  351. package/src/plugin-api/plugin-name-env.ts +1 -1
  352. package/src/plugins/__tests__/installed-plugin-dirs.test.ts +1 -1
  353. package/src/plugins/collect-source-versions.ts +1 -1
  354. package/src/plugins/defaults/channel/package.json +1 -1
  355. package/src/plugins/defaults/cloud-hosted/package.json +1 -1
  356. package/src/plugins/defaults/compaction/package.json +1 -1
  357. package/src/plugins/defaults/documents/package.json +1 -1
  358. package/src/plugins/defaults/empty-response/package.json +1 -1
  359. package/src/plugins/defaults/exploration-drift/package.json +1 -1
  360. package/src/plugins/defaults/image-fallback/package.json +1 -1
  361. package/src/plugins/defaults/image-recovery/package.json +1 -1
  362. package/src/plugins/defaults/max-tokens-continue/package.json +1 -1
  363. package/src/plugins/defaults/memory/__tests__/db-async-query.test.ts +1 -1
  364. package/src/plugins/defaults/memory/__tests__/db-maintenance.test.ts +1 -1
  365. package/src/plugins/defaults/memory/__tests__/memory-retrospective-job.test.ts +0 -82
  366. package/src/plugins/defaults/memory/__tests__/memory-retrospective-skill-card.test.ts +0 -41
  367. package/src/plugins/defaults/memory/__tests__/memory-tier-boundary-guard.test.ts +0 -2
  368. package/src/plugins/defaults/memory/memory-retrospective-job.ts +3 -52
  369. package/src/plugins/defaults/memory/memory-retrospective-skill-card.ts +0 -18
  370. package/src/plugins/defaults/memory/package.json +1 -1
  371. package/src/plugins/defaults/memory/paths.ts +4 -4
  372. package/src/plugins/defaults/memory/src/__tests__/memory-worker-routes.test.ts +1 -1
  373. package/src/plugins/defaults/memory/src/memory-v2-routes.ts +5 -5
  374. package/src/plugins/defaults/memory/src/memory-v3-routes.ts +0 -207
  375. package/src/plugins/defaults/memory/src/memory-worker-routes.ts +1 -1
  376. package/src/plugins/defaults/memory/startup.ts +1 -22
  377. package/src/plugins/defaults/memory/v3/__tests__/orchestrate.test.ts +2 -253
  378. package/src/plugins/defaults/memory/v3/orchestrate.ts +5 -129
  379. package/src/plugins/defaults/memory/worker-control.ts +1 -1
  380. package/src/plugins/defaults/memory/worker.ts +2 -2
  381. package/src/plugins/defaults/session/package.json +1 -1
  382. package/src/plugins/defaults/surface-completion-nudge/package.json +1 -1
  383. package/src/plugins/defaults/task-progress/package.json +1 -1
  384. package/src/plugins/defaults/task-progress-nudge/package.json +1 -1
  385. package/src/plugins/defaults/title-generate/package.json +1 -1
  386. package/src/plugins/defaults/tool-error/package.json +1 -1
  387. package/src/plugins/defaults/tool-result-truncate/package.json +1 -1
  388. package/src/plugins/defaults/turn-context/package.json +1 -1
  389. package/src/plugins/defaults/workspace/injectors.ts +1 -1
  390. package/src/plugins/defaults/workspace/package.json +1 -1
  391. package/src/plugins/disabled-state.ts +1 -1
  392. package/src/plugins/ensure-plugin-api-shim.ts +1 -1
  393. package/src/plugins/ensure-shared-dep-links.ts +1 -1
  394. package/src/plugins/installed-plugin-dirs.ts +1 -1
  395. package/src/plugins/mcp-servers.ts +7 -9
  396. package/src/plugins/mtime-cache.ts +2 -2
  397. package/src/plugins/source-versions.ts +1 -1
  398. package/src/prompts/bootstrap-cleanup.ts +1 -1
  399. package/src/prompts/persona-resolver.ts +1 -1
  400. package/src/prompts/sections.ts +2 -2
  401. package/src/prompts/system-prompt.ts +10 -42
  402. package/src/prompts/templates/BOOTSTRAP-ACTIVATION-RAIL.md +0 -37
  403. package/src/providers/__tests__/cadet-connection-routing.test.ts +2 -2
  404. package/src/providers/cadet/client.ts +1 -1
  405. package/src/providers/inference/__tests__/base-url-route-validation.test.ts +1 -1
  406. package/src/providers/inference/adapter-factory.ts +1 -1
  407. package/src/providers/inference/backfill.ts +3 -10
  408. package/src/providers/inference/profile-probe.ts +1 -1
  409. package/src/providers/retry.ts +0 -2
  410. package/src/providers/types.ts +0 -7
  411. package/src/providers/usage-tracking.ts +1 -1
  412. package/src/routes/__tests__/route-host.test.ts +1 -1
  413. package/src/routes/control.ts +1 -1
  414. package/src/routes/route-host-client.ts +1 -1
  415. package/src/routes/worker.ts +2 -2
  416. package/src/runtime/agent-wake.ts +1 -1
  417. package/src/runtime/assistant-stream-state.ts +1 -1
  418. package/src/runtime/auth/token-service.ts +1 -1
  419. package/src/runtime/background-job-runner.ts +1 -1
  420. package/src/runtime/middleware/twilio-validation.ts +2 -2
  421. package/src/runtime/routes/__tests__/app-pin-routes.test.ts +1 -1
  422. package/src/runtime/routes/__tests__/apps-refresh-route.test.ts +1 -1
  423. package/src/runtime/routes/__tests__/avatar-state-routes.test.ts +3 -33
  424. package/src/runtime/routes/__tests__/cloud-credits-routes.test.ts +5 -4
  425. package/src/runtime/routes/__tests__/cloud-invoice-routes.test.ts +4 -3
  426. package/src/runtime/routes/__tests__/conversation-query-routes.test.ts +72 -298
  427. package/src/runtime/routes/__tests__/default-plugin-routes.test.ts +1 -1
  428. package/src/runtime/routes/__tests__/deprecated-route-context.test.ts +15 -62
  429. package/src/runtime/routes/__tests__/inference-profiles-routes.test.ts +105 -12
  430. package/src/runtime/routes/__tests__/ingress-status-routes.test.ts +1 -1
  431. package/src/runtime/routes/__tests__/monitoring-routes.test.ts +1 -1
  432. package/src/runtime/routes/__tests__/plugins-routes.test.ts +47 -211
  433. package/src/runtime/routes/__tests__/route-host-worker-routes.test.ts +1 -1
  434. package/src/runtime/routes/__tests__/schedule-routes-disarm-reason.test.ts +1 -1
  435. package/src/runtime/routes/__tests__/schedule-worker-routes.test.ts +1 -1
  436. package/src/runtime/routes/__tests__/user-route-dispatcher-host.test.ts +1 -1
  437. package/src/runtime/routes/__tests__/user-route-dispatcher.test.ts +1 -1
  438. package/src/runtime/routes/__tests__/user-routes-cli.test.ts +1 -1
  439. package/src/runtime/routes/__tests__/user-routes-notices.test.ts +1 -1
  440. package/src/runtime/routes/__tests__/user-routes-request.test.ts +1 -1
  441. package/src/runtime/routes/app-management-routes.ts +1 -1
  442. package/src/runtime/routes/attachment-routes.ts +1 -1
  443. package/src/runtime/routes/audit-routes.ts +1 -1
  444. package/src/runtime/routes/avatar-routes.ts +3 -10
  445. package/src/runtime/routes/cloud-routes.ts +3 -3
  446. package/src/runtime/routes/content-source-routes.ts +1 -1
  447. package/src/runtime/routes/conversation-query-routes.ts +49 -706
  448. package/src/runtime/routes/conversation-routes.ts +1 -38
  449. package/src/runtime/routes/debug-routes.ts +1 -1
  450. package/src/runtime/routes/deprecated-route-context.ts +5 -61
  451. package/src/runtime/routes/heartbeat-routes.ts +1 -1
  452. package/src/runtime/routes/identity-routes.ts +1 -1
  453. package/src/runtime/routes/index.ts +0 -6
  454. package/src/runtime/routes/inference-profile-session-handler.ts +3 -3
  455. package/src/runtime/routes/inference-profiles-routes.ts +48 -21
  456. package/src/runtime/routes/inference-provider-connection-routes.ts +0 -1
  457. package/src/runtime/routes/llm-call-sites-routes.ts +3 -3
  458. package/src/runtime/routes/log-export/__tests__/installed-inventory.test.ts +1 -1
  459. package/src/runtime/routes/log-export/__tests__/workspace-allowlist-error-contract.test.ts +1 -1
  460. package/src/runtime/routes/log-export/__tests__/workspace-allowlist.test.ts +1 -1
  461. package/src/runtime/routes/log-export/workspace-allowlist.ts +1 -1
  462. package/src/runtime/routes/log-export-routes.ts +17 -15
  463. package/src/runtime/routes/migration-rollback-routes.ts +1 -1
  464. package/src/runtime/routes/migration-routes.ts +2 -3
  465. package/src/runtime/routes/monitoring-routes.ts +2 -2
  466. package/src/runtime/routes/oauth-providers.ts +5 -5
  467. package/src/runtime/routes/plugins-routes.ts +38 -163
  468. package/src/runtime/routes/profiler-routes.ts +1 -1
  469. package/src/runtime/routes/route-host-worker-routes.ts +1 -1
  470. package/src/runtime/routes/sanity-routes.ts +1 -1
  471. package/src/runtime/routes/schedule-routes.ts +1 -1
  472. package/src/runtime/routes/schedule-worker-routes.ts +1 -1
  473. package/src/runtime/routes/settings-routes.ts +1 -1
  474. package/src/runtime/routes/sounds-config-routes.ts +1 -1
  475. package/src/runtime/routes/surface-conversation-resolver.ts +1 -7
  476. package/src/runtime/routes/user-route-dispatcher.ts +1 -3
  477. package/src/runtime/routes/user-route-import.ts +1 -1
  478. package/src/runtime/routes/user-route-resolution.ts +1 -1
  479. package/src/runtime/routes/user-routes-cli.ts +1 -1
  480. package/src/runtime/routes/workspace-commit-routes.ts +1 -1
  481. package/src/runtime/routes/workspace-greetings.ts +1 -1
  482. package/src/runtime/routes/workspace-routes.ts +1 -1
  483. package/src/runtime/routes/workspace-utils.ts +1 -1
  484. package/src/runtime/sync/resource-sync-events.ts +1 -1
  485. package/src/schedule/__tests__/plugin-schedule-declarations.test.ts +1 -1
  486. package/src/schedule/__tests__/plugin-schedule-reconciler.test.ts +1 -1
  487. package/src/schedule/plugin-schedule-availability.ts +1 -1
  488. package/src/schedule/plugin-schedule-declarations.ts +1 -1
  489. package/src/schedule/run-script.ts +1 -1
  490. package/src/schedule/scheduler.ts +1 -11
  491. package/src/schedule/worker-control.ts +1 -1
  492. package/src/schedule/worker.ts +3 -3
  493. package/src/security/oauth2.ts +2 -2
  494. package/src/security/secret-allowlist.ts +1 -1
  495. package/src/signals/cancel.ts +1 -1
  496. package/src/signals/conversation-undo.ts +1 -1
  497. package/src/signals/emit-event.ts +1 -1
  498. package/src/signals/event-stream.ts +1 -1
  499. package/src/signals/user-message.ts +1 -1
  500. package/src/skills/catalog-install.ts +2 -1
  501. package/src/skills/clawhub.ts +1 -1
  502. package/src/skills/cloud-store.ts +1 -1
  503. package/src/skills/path-classifier.ts +1 -1
  504. package/src/skills/skill-history.ts +1 -1
  505. package/src/skills/skillssh-registry.ts +1 -1
  506. package/src/skills/uninstall.ts +1 -1
  507. package/src/skills/workspace-skill-md-signature.ts +1 -1
  508. package/src/subagent/manager.ts +1 -1
  509. package/src/theme/workspace-theme.ts +1 -1
  510. package/src/tools/browser/auth-cache.ts +1 -1
  511. package/src/tools/browser/browser-manager.ts +1 -1
  512. package/src/tools/browser/runtime-check.ts +1 -1
  513. package/src/tools/executor.ts +4 -4
  514. package/src/tools/filesystem/write.ts +1 -1
  515. package/src/tools/permission-checker.ts +2 -51
  516. package/src/tools/run-standalone.ts +1 -1
  517. package/src/tools/skills/format-input-schema.ts +1 -1
  518. package/src/tools/skills/load.ts +1 -1
  519. package/src/tools/skills/scaffold-cloud.ts +0 -32
  520. package/src/tools/terminal/safe-env.ts +1 -2
  521. package/src/tools/terminal/sanitized-bash.ts +1 -1
  522. package/src/tools/terminal/shell.ts +1 -1
  523. package/src/tools/tool-approval-handler.ts +4 -1
  524. package/src/tools/workflows/manage-workflows.ts +2 -2
  525. package/src/tools/workflows/run-workflow.test.ts +1 -1
  526. package/src/tools/workspace-tools/loader.ts +1 -1
  527. package/src/tts/synthesis-stream.ts +2 -2
  528. package/src/usage/attribution.ts +1 -11
  529. package/src/util/browser.ts +1 -1
  530. package/src/util/bun-runtime.ts +2 -1
  531. package/src/util/device-id.ts +1 -1
  532. package/src/util/disk-usage.ts +4 -139
  533. package/src/util/layout.ts +3 -3
  534. package/src/util/logger.ts +1 -1
  535. package/src/util/logs-db-path.ts +1 -1
  536. package/src/util/memory-db-path.ts +1 -1
  537. package/src/util/{platform.ts → os.ts} +5 -30
  538. package/src/util/process-tree.ts +19 -0
  539. package/src/util/sqlite3-runtime.ts +1 -1
  540. package/src/util/telemetry-db-path.ts +1 -1
  541. package/src/watcher/__tests__/engine.test.ts +0 -23
  542. package/src/watcher/engine.ts +0 -7
  543. package/src/windows-compiled-cli.ts +0 -4
  544. package/src/windows-compiled-worker-entry.ts +0 -6
  545. package/src/workflows/leaf-runner.test.ts +1 -1
  546. package/src/workflows/leaf-runner.ts +1 -1
  547. package/src/workflows/library.ts +1 -1
  548. package/src/workspace/adaptive-thinking-repair.ts +5 -24
  549. package/src/workspace/byok-default-profile-ensure.ts +24 -26
  550. package/src/workspace/custom-profile-ensure.ts +2 -2
  551. package/src/workspace/git-service.ts +1 -1
  552. package/src/workspace/hatched-date.ts +1 -1
  553. package/src/workspace/migrations/038-unify-llm-callsite-configs.ts +2 -2
  554. package/src/workspace/migrations/040-seed-latency-callsite-defaults.ts +1 -1
  555. package/src/workspace/migrations/050-seed-main-agent-opus-callsite.ts +1 -1
  556. package/src/workspace/migrations/077-seed-memory-router-callsite.ts +1 -1
  557. package/src/workspace/migrations/registry.ts +0 -4
  558. package/src/workspace/turn-commit.ts +1 -1
  559. package/docs/activation-funnel-telemetry.md +0 -324
  560. package/scripts/bundled-plugin-packages.ts +0 -154
  561. package/scripts/generate-bundled-plugin-packages.ts +0 -29
  562. package/src/__tests__/activation-early-marking.test.ts +0 -114
  563. package/src/__tests__/auth-fallback-events-store.test.ts +0 -99
  564. package/src/__tests__/config-get-vision-flag.test.ts +0 -139
  565. package/src/__tests__/conversation-surfaces-activation-emit.test.ts +0 -400
  566. package/src/__tests__/internal-telemetry-routes.test.ts +0 -213
  567. package/src/__tests__/telemetry-routes.test.ts +0 -182
  568. package/src/__tests__/turn-events-store.test.ts +0 -376
  569. package/src/__tests__/ui-channel-variants.test.ts +0 -53
  570. package/src/avatar/__tests__/avatar-changed-telemetry.test.ts +0 -217
  571. package/src/avatar/avatar-changed-telemetry.ts +0 -128
  572. package/src/calls/__tests__/call-funnel-telemetry.test.ts +0 -204
  573. package/src/cli/commands/telemetry.help.ts +0 -27
  574. package/src/cli/commands/telemetry.ts +0 -83
  575. package/src/cli/lib/__tests__/local-plugin-upgrade.test.ts +0 -251
  576. package/src/cli/lib/__tests__/plugin-catalog-local.test.ts +0 -113
  577. package/src/cli/lib/__tests__/plugin-marketplace.test.ts +0 -384
  578. package/src/cli/lib/__tests__/plugin-pin-history.test.ts +0 -164
  579. package/src/cli/lib/__tests__/plugins-install-offline.test.ts +0 -228
  580. package/src/cli/lib/bundled-marketplace.json +0 -1575
  581. package/src/cli/lib/bundled-plugin-packages.json +0 -827
  582. package/src/cli/lib/bundled-plugin-packages.ts +0 -87
  583. package/src/cli/lib/plugin-catalog-local.ts +0 -94
  584. package/src/cli/lib/plugin-pin-history.ts +0 -276
  585. package/src/cloud/feature-gate.ts +0 -8
  586. package/src/config/__tests__/cloud-rehydration.test.ts +0 -180
  587. package/src/config/cloud-rehydration.ts +0 -35
  588. package/src/daemon/__tests__/auto-profile-router.test.ts +0 -380
  589. package/src/daemon/auto-profile-router.ts +0 -428
  590. package/src/live-voice/__tests__/live-voice-session-telemetry.test.ts +0 -391
  591. package/src/monitoring/__tests__/db-integrity-sample.test.ts +0 -113
  592. package/src/monitoring/__tests__/oom-kill-reporter.test.ts +0 -374
  593. package/src/monitoring/db-integrity-check.ts +0 -163
  594. package/src/monitoring/db-integrity-sample.ts +0 -176
  595. package/src/monitoring/oom-kill-reporter.ts +0 -469
  596. package/src/onboarding/__tests__/onboarding-events-store.test.ts +0 -158
  597. package/src/onboarding/onboarding-events-store.ts +0 -296
  598. package/src/persistence/__tests__/raw-query-telemetry.test.ts +0 -76
  599. package/src/persistence/lifecycle-events-store.test.ts +0 -134
  600. package/src/persistence/lifecycle-events-store.ts +0 -110
  601. package/src/plugins/defaults/memory/__tests__/activation-session-store.test.ts +0 -76
  602. package/src/plugins/defaults/memory/activation-session-store.ts +0 -50
  603. package/src/plugins/defaults/memory/src/__tests__/memory-v3-gate-stats.test.ts +0 -281
  604. package/src/runtime/routes/auto-profile-routes.ts +0 -83
  605. package/src/runtime/routes/internal-telemetry-routes.ts +0 -142
  606. package/src/runtime/routes/telemetry-routes.ts +0 -274
  607. package/src/security/auth-fallback-events-store.ts +0 -57
  608. package/src/telemetry/__tests__/activation-funnel.test.ts +0 -95
  609. package/src/telemetry/__tests__/config-setting-events-store.test.ts +0 -63
  610. package/src/telemetry/__tests__/config-setting-snapshot.test.ts +0 -143
  611. package/src/telemetry/__tests__/flush-checkpoints.test.ts +0 -56
  612. package/src/telemetry/__tests__/live-voice-funnel.test.ts +0 -174
  613. package/src/telemetry/__tests__/outbox-test-harness.ts +0 -85
  614. package/src/telemetry/__tests__/phone-call-funnel.test.ts +0 -72
  615. package/src/telemetry/__tests__/telemetry-event-fixtures.ts +0 -282
  616. package/src/telemetry/__tests__/watchdog-events-store.test.ts +0 -71
  617. package/src/telemetry/activation-funnel.ts +0 -172
  618. package/src/telemetry/config-setting-events-store.ts +0 -40
  619. package/src/telemetry/config-setting-snapshot.ts +0 -170
  620. package/src/telemetry/flush-checkpoints.ts +0 -70
  621. package/src/telemetry/live-voice-funnel.ts +0 -185
  622. package/src/telemetry/memory-corpus-size.test.ts +0 -120
  623. package/src/telemetry/memory-corpus-size.ts +0 -184
  624. package/src/telemetry/memory-tier-reporter.test.ts +0 -195
  625. package/src/telemetry/memory-tier-reporter.ts +0 -130
  626. package/src/telemetry/phone-call-funnel.ts +0 -144
  627. package/src/telemetry/skill-loaded-events-store.test.ts +0 -93
  628. package/src/telemetry/skill-loaded-events-store.ts +0 -39
  629. package/src/telemetry/telemetry-event-sources.test.ts +0 -223
  630. package/src/telemetry/telemetry-event-sources.ts +0 -597
  631. package/src/telemetry/telemetry-events-outbox.test.ts +0 -375
  632. package/src/telemetry/telemetry-events-outbox.ts +0 -237
  633. package/src/telemetry/telemetry-main-db.ts +0 -48
  634. package/src/telemetry/telemetry-wire-source.json +0 -4
  635. package/src/telemetry/telemetry-wire-validation.test.ts +0 -157
  636. package/src/telemetry/telemetry-wire-validation.ts +0 -162
  637. package/src/telemetry/telemetry-wire.generated.ts +0 -483
  638. package/src/telemetry/tool-executed-events-store.test.ts +0 -210
  639. package/src/telemetry/tool-executed-events-store.ts +0 -102
  640. package/src/telemetry/trace-collection-policy.test.ts +0 -28
  641. package/src/telemetry/trace-collection-policy.ts +0 -30
  642. package/src/telemetry/turn-events-store.ts +0 -216
  643. package/src/telemetry/turn-trace-store.test.ts +0 -884
  644. package/src/telemetry/turn-trace-store.ts +0 -399
  645. package/src/telemetry/types.test.ts +0 -38
  646. package/src/telemetry/types.ts +0 -780
  647. package/src/telemetry/usage-telemetry-reporter.test.ts +0 -3445
  648. package/src/telemetry/usage-telemetry-reporter.ts +0 -566
  649. package/src/telemetry/watchdog-direct-emit.test.ts +0 -112
  650. package/src/telemetry/watchdog-direct-emit.ts +0 -104
  651. package/src/telemetry/watchdog-events-store.ts +0 -31
  652. package/src/tools/ui-surface/channel-variants.ts +0 -52
  653. package/src/watcher/__tests__/telemetry.test.ts +0 -178
  654. package/src/watcher/telemetry.ts +0 -93
  655. package/src/workspace/migrations/097-enable-adaptive-thinking-managed-profiles.ts +0 -165
  656. package/src/workspace/migrations/104-recheck-adaptive-thinking-model-implied-anthropic.ts +0 -151
  657. /package/src/{telemetry → persistence}/tool-usage-store.ts +0 -0
  658. /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";