@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
@@ -23,7 +23,7 @@ mock.module(
23
23
  );
24
24
 
25
25
  // ── Config ──────────────────────────────────────────────────────────
26
- // These tests run against the real config loader. `loadConfig()` returns the
26
+ // These tests run against the real config loader. `getConfig()` returns the
27
27
  // loader's live cached object, so tests set TTS/ingress fields by mutating it
28
28
  // in place; `beforeEach` restores the fields the tests touch. The workspace
29
29
  // config file itself is seeded once below (memory off, ingress base URL).
@@ -58,7 +58,7 @@ mock.module("../../config/cloud-speech-defaults.js", () => ({
58
58
  resolveEffectiveSpeechProviders: async (config?: {
59
59
  services: { stt: { provider: string }; tts: { provider: string } };
60
60
  }) => {
61
- const services = (config ?? loadConfig()).services;
61
+ const services = (config ?? getConfig()).services;
62
62
  return { stt: services.stt.provider, tts: services.tts.provider };
63
63
  },
64
64
  }));
@@ -230,7 +230,7 @@ registerTestTtsProviders();
230
230
  import { resetDbForTesting } from "../../__tests__/db-test-helpers.js";
231
231
  import { createGuardianBinding } from "../../__tests__/helpers/create-guardian-binding.js";
232
232
  import { setConfig } from "../../__tests__/helpers/set-config.js";
233
- import { loadConfig } from "../../config/loader.js";
233
+ import { getConfig } from "../../config/loader.js";
234
234
  import type {
235
235
  VoiceFrontModelConfig,
236
236
  VoiceProgressConfig,
@@ -432,7 +432,6 @@ function setupController(
432
432
  ) {
433
433
  ensureConversation("conv-ctrl-test");
434
434
  const session = createCallSession({
435
- direction: "inbound",
436
435
  conversationId: "conv-ctrl-test",
437
436
  provider: "twilio",
438
437
  fromNumber: "+15551111111",
@@ -484,7 +483,6 @@ function setupControllerWithOrigin(task?: string) {
484
483
  ensureConversation("conv-ctrl-voice");
485
484
  ensureConversation("conv-ctrl-origin");
486
485
  const session = createCallSession({
487
- direction: "inbound",
488
486
  conversationId: "conv-ctrl-voice",
489
487
  provider: "twilio",
490
488
  fromNumber: "+15551111111",
@@ -519,7 +517,7 @@ describe("call-controller", () => {
519
517
  mockEndCallListenWindowMs = 0;
520
518
  mockEndCallDrainMaxWaitMs = 15_000;
521
519
  // Reset TTS config to defaults so per-test mutations don't leak.
522
- const cfg = loadConfig();
520
+ const cfg = getConfig();
523
521
  cfg.services.tts.provider = "elevenlabs";
524
522
  cfg.services.tts.providers["fish-audio"].referenceId = "";
525
523
  cfg.ingress.publicBaseUrl = "https://generic.example.com";
@@ -2966,7 +2964,7 @@ describe("call-controller", () => {
2966
2964
  });
2967
2965
 
2968
2966
  test("synthesized provider: if synthesis fails before first chunk, falls back to text-token speech without sending play URL", async () => {
2969
- const cfg = loadConfig();
2967
+ const cfg = getConfig();
2970
2968
  cfg.services.tts.provider = "fish-audio";
2971
2969
  cfg.services.tts.providers["fish-audio"].referenceId = "fish-ref-123";
2972
2970
 
@@ -3016,7 +3014,7 @@ describe("call-controller", () => {
3016
3014
  });
3017
3015
 
3018
3016
  test("synthesized provider: a superseded run does not emit native fallback text", async () => {
3019
- const cfg = loadConfig();
3017
+ const cfg = getConfig();
3020
3018
  cfg.services.tts.provider = "fish-audio";
3021
3019
  cfg.services.tts.providers["fish-audio"].referenceId = "fish-ref-123";
3022
3020
 
@@ -3075,7 +3073,7 @@ describe("call-controller", () => {
3075
3073
  });
3076
3074
 
3077
3075
  test("synthesized provider: play URL uses public base URL", async () => {
3078
- const cfg = loadConfig();
3076
+ const cfg = getConfig();
3079
3077
  cfg.ingress.publicBaseUrl = "https://twilio.example.com/";
3080
3078
  cfg.services.tts.provider = "fish-audio";
3081
3079
  cfg.services.tts.providers["fish-audio"].referenceId = "fish-ref-123";
@@ -3119,7 +3117,7 @@ describe("call-controller", () => {
3119
3117
  });
3120
3118
 
3121
3119
  test("synthesized provider: stays 'processing' during synthesis latency until the play URL is sent", async () => {
3122
- const cfg = loadConfig();
3120
+ const cfg = getConfig();
3123
3121
  cfg.services.tts.provider = "fish-audio";
3124
3122
  cfg.services.tts.providers["fish-audio"].referenceId = "fish-ref-123";
3125
3123
 
@@ -3175,7 +3173,7 @@ describe("call-controller", () => {
3175
3173
  });
3176
3174
 
3177
3175
  test("synthesized provider: a superseded turn does not send a stale play URL", async () => {
3178
- const cfg = loadConfig();
3176
+ const cfg = getConfig();
3179
3177
  cfg.services.tts.provider = "fish-audio";
3180
3178
  cfg.services.tts.providers["fish-audio"].referenceId = "fish-ref-123";
3181
3179
 
@@ -3226,7 +3224,7 @@ describe("call-controller", () => {
3226
3224
  });
3227
3225
 
3228
3226
  test("synthesized provider: a turn error cancels the queued synthesis chain so no stale speech follows the recovery prompt", async () => {
3229
- const cfg = loadConfig();
3227
+ const cfg = getConfig();
3230
3228
  cfg.services.tts.provider = "fish-audio";
3231
3229
  cfg.services.tts.providers["fish-audio"].referenceId = "fish-ref-123";
3232
3230
 
@@ -3328,7 +3326,7 @@ describe("call-controller", () => {
3328
3326
  });
3329
3327
 
3330
3328
  test("Deepgram selected path resolves useSynthesizedPath to true", async () => {
3331
- const cfg = loadConfig();
3329
+ const cfg = getConfig();
3332
3330
  cfg.services.tts.provider = "deepgram";
3333
3331
 
3334
3332
  const result = await resolveCallTtsProvider();
@@ -3338,7 +3336,7 @@ describe("call-controller", () => {
3338
3336
  });
3339
3337
 
3340
3338
  test("Deepgram synthesis failure does NOT fall back to native token TTS", async () => {
3341
- const cfg = loadConfig();
3339
+ const cfg = getConfig();
3342
3340
  cfg.services.tts.provider = "deepgram";
3343
3341
 
3344
3342
  _resetTtsProviderOverridesForTests();
@@ -3386,7 +3384,7 @@ describe("call-controller", () => {
3386
3384
  });
3387
3385
 
3388
3386
  test("Fish Audio synthesis failure still falls back to native token TTS (unchanged behavior)", async () => {
3389
- const cfg = loadConfig();
3387
+ const cfg = getConfig();
3390
3388
  cfg.services.tts.provider = "fish-audio";
3391
3389
  cfg.services.tts.providers["fish-audio"].referenceId = "fish-ref-abc";
3392
3390
 
@@ -3439,7 +3437,7 @@ describe("call-controller", () => {
3439
3437
  onChunk: (chunk: Buffer) => void,
3440
3438
  ) => Promise<void>;
3441
3439
  }): { synthesizedTexts: string[] } {
3442
- const cfg = loadConfig();
3440
+ const cfg = getConfig();
3443
3441
  cfg.services.tts.provider = "fish-audio";
3444
3442
  cfg.services.tts.providers["fish-audio"].referenceId = "fish-ref-123";
3445
3443
 
@@ -3548,7 +3546,7 @@ describe("call-controller", () => {
3548
3546
  function registerDeepgramRequestRecorder(): {
3549
3547
  requests: Array<{ voiceId?: string; language?: string }>;
3550
3548
  } {
3551
- const cfg = loadConfig();
3549
+ const cfg = getConfig();
3552
3550
  cfg.services.tts.provider = "deepgram";
3553
3551
 
3554
3552
  _resetTtsProviderOverridesForTests();
@@ -3572,7 +3570,7 @@ describe("call-controller", () => {
3572
3570
  }
3573
3571
 
3574
3572
  test("synthesized provider: a configured languageVoices entry for the call language rides the request as voiceId", async () => {
3575
- const cfg = loadConfig();
3573
+ const cfg = getConfig();
3576
3574
  cfg.services.tts.providers.deepgram.languageVoices = {
3577
3575
  hi: "aura-2-hindi-voice",
3578
3576
  };
@@ -3598,7 +3596,7 @@ describe("call-controller", () => {
3598
3596
  });
3599
3597
 
3600
3598
  test("synthesized provider: no voiceId when languageVoices has no entry for the call language", async () => {
3601
- const cfg = loadConfig();
3599
+ const cfg = getConfig();
3602
3600
  cfg.services.tts.providers.deepgram.languageVoices = {
3603
3601
  hi: "aura-2-hindi-voice",
3604
3602
  };
@@ -3996,7 +3994,7 @@ describe("call-controller", () => {
3996
3994
  fishTexts: string[];
3997
3995
  fallbackTexts: string[];
3998
3996
  } {
3999
- const cfg = loadConfig();
3997
+ const cfg = getConfig();
4000
3998
  cfg.services.tts.provider = "fish-audio";
4001
3999
  cfg.services.tts.providers["fish-audio"].referenceId = "fish-ref-123";
4002
4000
 
@@ -4186,7 +4184,7 @@ describe("call-controller", () => {
4186
4184
  test("returns fallback when the configured provider is not in the catalog", async () => {
4187
4185
  // The schema enum rejects unknown providers, so this state can only be
4188
4186
  // produced by mutating the loader's cached config directly.
4189
- const cfg = loadConfig();
4187
+ const cfg = getConfig();
4190
4188
  (cfg.services.tts as { provider: string }).provider =
4191
4189
  "not-a-real-provider";
4192
4190
 
@@ -4197,7 +4195,7 @@ describe("call-controller", () => {
4197
4195
  });
4198
4196
 
4199
4197
  test("degrades fish-audio synthesized path when referenceId is missing", async () => {
4200
- const cfg = loadConfig();
4198
+ const cfg = getConfig();
4201
4199
  cfg.services.tts.provider = "fish-audio";
4202
4200
  cfg.services.tts.providers["fish-audio"].referenceId = "";
4203
4201
 
@@ -4226,7 +4224,7 @@ describe("call-controller", () => {
4226
4224
  });
4227
4225
 
4228
4226
  test("returns synthesized path with deepgram provider", async () => {
4229
- const cfg = loadConfig();
4227
+ const cfg = getConfig();
4230
4228
  cfg.services.tts.provider = "deepgram";
4231
4229
 
4232
4230
  const result = await resolveCallTtsProvider();
@@ -4239,7 +4237,7 @@ describe("call-controller", () => {
4239
4237
  test("Deepgram does not apply fish-audio referenceId gate", async () => {
4240
4238
  // Deepgram has no referenceId requirement. Verify the fish-audio
4241
4239
  // config gate does not apply to deepgram resolution.
4242
- const cfg = loadConfig();
4240
+ const cfg = getConfig();
4243
4241
  cfg.services.tts.provider = "deepgram";
4244
4242
  // fish-audio referenceId left empty — should not affect deepgram.
4245
4243
  cfg.services.tts.providers["fish-audio"].referenceId = "";
@@ -5163,7 +5161,7 @@ describe("call-controller", () => {
5163
5161
  function endpointingConfig(
5164
5162
  overrides: Partial<VoiceFrontModelConfig> = {},
5165
5163
  ): VoiceFrontModelConfig {
5166
- return { ...loadConfig().voice.frontModel, ...overrides };
5164
+ return { ...getConfig().voice.frontModel, ...overrides };
5167
5165
  }
5168
5166
 
5169
5167
  /**
@@ -5306,7 +5304,7 @@ describe("call-controller", () => {
5306
5304
  // A provider that has gone quiet past its commit window plus the
5307
5305
  // margin is gone, not slow, so the interim text is the only record of
5308
5306
  // what the caller said.
5309
- loadConfig().calls.voice.utteranceEndMs = 5;
5307
+ getConfig().calls.voice.utteranceEndMs = 5;
5310
5308
  const { controller } = setupController(undefined, {
5311
5309
  frontModelConfig: endpointingConfig({ endpointExtensionMs: 20 }),
5312
5310
  });
@@ -5323,7 +5321,7 @@ describe("call-controller", () => {
5323
5321
 
5324
5322
  test("interim words re-arm the replay so it fires only once the caller stops", async () => {
5325
5323
  const { legs } = mockHoldingBridge();
5326
- loadConfig().calls.voice.utteranceEndMs = 5;
5324
+ getConfig().calls.voice.utteranceEndMs = 5;
5327
5325
  const { controller } = setupController(undefined, {
5328
5326
  frontModelConfig: endpointingConfig({ endpointExtensionMs: 60 }),
5329
5327
  });
@@ -9,8 +9,8 @@ import {
9
9
  } from "node:fs";
10
10
  import { dirname, join } from "node:path";
11
11
 
12
+ import { getWorkspaceDir } from "../util/layout.js";
12
13
  import { getLogger } from "../util/logger.js";
13
- import { getWorkspaceDir } from "../util/platform.js";
14
14
  import { isTerminalState } from "./call-state-machine.js";
15
15
  import type { CallSession } from "./types.js";
16
16
 
@@ -17,7 +17,7 @@ import {
17
17
  getRequestByPendingQuestionOrNull,
18
18
  listGuardianRequestDeliveriesOrEmpty,
19
19
  } from "../channels/gateway-guardian-requests.js";
20
- import { loadConfig } from "../config/loader.js";
20
+ import { getConfig } from "../config/loader.js";
21
21
  import type {
22
22
  VoiceFrontModelConfig,
23
23
  VoiceProgressConfig,
@@ -365,7 +365,7 @@ export class CallController {
365
365
  opts?.resolveSynthesisLanguage ??
366
366
  (() => resolveTelephonySynthesisLanguage());
367
367
  this.frontModelConfig =
368
- opts?.frontModelConfig ?? loadConfig().voice.frontModel;
368
+ opts?.frontModelConfig ?? getConfig().voice.frontModel;
369
369
  this.progressConfig =
370
370
  opts?.progressConfig ?? this.frontModelConfig.progress;
371
371
  this.progressNarrator =
@@ -936,7 +936,7 @@ export class CallController {
936
936
  }
937
937
  return Math.max(
938
938
  extensionMs,
939
- loadConfig().calls.voice.utteranceEndMs +
939
+ getConfig().calls.voice.utteranceEndMs +
940
940
  PROVIDER_FINAL_FALLBACK_MARGIN_MS,
941
941
  );
942
942
  }
@@ -6,7 +6,7 @@
6
6
  */
7
7
 
8
8
  import { revokeScopedApprovalGrantsForContext } from "../approvals/scoped-approval-grants.js";
9
- import { loadConfig } from "../config/loader.js";
9
+ import { getConfig } from "../config/loader.js";
10
10
  import { VALID_CALLER_IDENTITY_MODES } from "../config/schema.js";
11
11
  import type { AssistantConfig } from "../config/types.js";
12
12
  import { resolveCallbackUrl } from "../inbound/cloud-callback-registration.js";
@@ -299,7 +299,6 @@ export async function createInboundVoiceSession(
299
299
  const session = createCallSession({
300
300
  conversationId: voiceConversationId,
301
301
  provider: "twilio",
302
- direction: "inbound",
303
302
  fromNumber,
304
303
  toNumber,
305
304
  });
@@ -402,7 +401,7 @@ export async function startCall(
402
401
  let sessionId: string | null = null;
403
402
 
404
403
  try {
405
- const config = loadConfig();
404
+ const config = getConfig();
406
405
 
407
406
  // Resolve which phone number to use as caller ID
408
407
  const identityResult = await resolveCallerIdentity(
@@ -439,7 +438,6 @@ export async function startCall(
439
438
  signal?.throwIfAborted();
440
439
 
441
440
  const session = createCallSession({
442
- direction: "outbound",
443
441
  conversationId,
444
442
  provider: "twilio",
445
443
  fromNumber,
@@ -950,7 +948,7 @@ export async function startVerificationCall(
950
948
  let sessionId: string | null = null;
951
949
 
952
950
  try {
953
- const config = loadConfig();
951
+ const config = getConfig();
954
952
  const provider = new TwilioVoiceProvider();
955
953
 
956
954
  // Resolve the assistant's Twilio number as the caller ID
@@ -978,7 +976,6 @@ export async function startVerificationCall(
978
976
  });
979
977
 
980
978
  const session = createCallSession({
981
- direction: "outbound",
982
979
  conversationId,
983
980
  provider: "twilio",
984
981
  fromNumber: identityResult.fromNumber,
@@ -1083,7 +1080,7 @@ export async function startInviteCall(
1083
1080
  let sessionId: string | null = null;
1084
1081
 
1085
1082
  try {
1086
- const config = loadConfig();
1083
+ const config = getConfig();
1087
1084
  const provider = new TwilioVoiceProvider();
1088
1085
 
1089
1086
  // Resolve the assistant's Twilio number as the caller ID
@@ -1112,7 +1109,6 @@ export async function startInviteCall(
1112
1109
  });
1113
1110
 
1114
1111
  const session = createCallSession({
1115
- direction: "outbound",
1116
1112
  conversationId,
1117
1113
  provider: "twilio",
1118
1114
  fromNumber: identityResult.fromNumber,
@@ -1,10 +1,6 @@
1
- import { and, desc, eq, like, notInArray, or } from "drizzle-orm";
1
+ import { and, desc, eq, notInArray, or } from "drizzle-orm";
2
2
  import { v4 as uuid } from "uuid";
3
3
 
4
- import {
5
- recordPhoneCallEnded,
6
- recordPhoneCallStarted,
7
- } from "../onboarding/onboarding-events-store.js";
8
4
  import { getDb } from "../persistence/db-connection.js";
9
5
  import { rawChanges, rawRun } from "../persistence/raw-query.js";
10
6
  import {
@@ -12,16 +8,10 @@ import {
12
8
  callPendingQuestions,
13
9
  callSessions,
14
10
  } from "../persistence/schema/index.js";
15
- import {
16
- type PhoneCallDirection,
17
- phoneCallEndScreen,
18
- phoneCallSilenceReason,
19
- phoneCallStartScreen,
20
- } from "../telemetry/phone-call-funnel.js";
21
11
  import { getLogger } from "../util/logger.js";
22
12
  import { cast, createRowMapper } from "../util/row-mapper.js";
23
13
  import { syncActiveCallLeaseFromSession } from "./active-call-lease.js";
24
- import { isTerminalState, validateTransition } from "./call-state-machine.js";
14
+ import { validateTransition } from "./call-state-machine.js";
25
15
  import type {
26
16
  CallEvent,
27
17
  CallEventType,
@@ -95,12 +85,6 @@ export function createCallSession(opts: {
95
85
  provider: string;
96
86
  fromNumber: string;
97
87
  toNumber: string;
98
- /**
99
- * Which way the call is being placed, for the funnel stamp. Stated rather
100
- * than derived: a verification or invite call carries no task and is still
101
- * outbound, so task presence is not a direction.
102
- */
103
- direction: PhoneCallDirection;
104
88
  task?: string;
105
89
  callMode?: string;
106
90
  verificationSessionId?: string;
@@ -138,14 +122,6 @@ export function createCallSession(opts: {
138
122
  updatedAt: now,
139
123
  };
140
124
  db.insert(callSessions).values(row).run();
141
- // The call is attempted the moment its row exists, which is before the
142
- // provider dials: a call that never connects is exactly the one the funnel
143
- // needs to count. An outbound attempt the ingress preflight rejects never
144
- // reaches here; see `telemetry/phone-call-funnel.ts`.
145
- recordPhoneCallStarted({
146
- callSessionId: row.id,
147
- screen: phoneCallStartScreen(opts.direction, row.callMode),
148
- });
149
125
  return { ...row, skipDisclosure };
150
126
  }
151
127
 
@@ -248,13 +224,6 @@ export function updateCallSession(
248
224
  .where(eq(callSessions.id, id))
249
225
  .run();
250
226
 
251
- // Terminal states are immutable and the validator above rejects any write
252
- // that follows one, so the first terminal transition to get here is the only
253
- // one: the ended event needs no separate once-only latch.
254
- if (updates.status && isTerminalState(updates.status)) {
255
- recordCallEndedEvent(id, updates.status);
256
- }
257
-
258
227
  opts?.beforeLeaseSync?.();
259
228
 
260
229
  if (shouldSyncActiveLease) {
@@ -269,35 +238,6 @@ export function updateCallSession(
269
238
  }
270
239
  }
271
240
 
272
- // ── Recovery queries ─────────────────────────────────────────────────
273
-
274
- /**
275
- * Whether the call's own event log holds an event of this type. Existence
276
- * only: the row itself is never read.
277
- */
278
- function hasCallEvent(
279
- id: string,
280
- eventType: CallEventType,
281
- payloadContains?: string,
282
- ): boolean {
283
- const db = getDb();
284
- const row = db
285
- .select({ id: callEvents.id })
286
- .from(callEvents)
287
- .where(
288
- and(
289
- eq(callEvents.callSessionId, id),
290
- eq(callEvents.eventType, eventType),
291
- ...(payloadContains
292
- ? [like(callEvents.payloadJson, `%${payloadContains}%`)]
293
- : []),
294
- ),
295
- )
296
- .limit(1)
297
- .get();
298
- return row !== undefined;
299
- }
300
-
301
241
  /**
302
242
  * Emit the call's funnel end event, classifying a call that never took a
303
243
  * caller turn by how far it got. Both signals come from the call's own event
@@ -310,20 +250,6 @@ function hasCallEvent(
310
250
  * an event type of its own would be the real fix, but that vocabulary is read
311
251
  * by other consumers and is not this change's to alter.
312
252
  */
313
- function recordCallEndedEvent(id: string, status: CallStatus): void {
314
- const spoke = hasCallEvent(id, "caller_spoke", '"transcript"');
315
- const silence = spoke
316
- ? null
317
- : phoneCallSilenceReason({
318
- connected: hasCallEvent(id, "call_connected"),
319
- });
320
-
321
- recordPhoneCallEnded({
322
- callSessionId: id,
323
- screen: phoneCallEndScreen(status, silence),
324
- outcome: status === "failed" ? "failed" : "completed",
325
- });
326
- }
327
253
 
328
254
  /**
329
255
  * Returns all call sessions that are in a non-terminal state
@@ -8,7 +8,7 @@
8
8
  */
9
9
 
10
10
  import { resolveEffectiveSpeechProviders } from "../config/cloud-speech-defaults.js";
11
- import { loadConfig } from "../config/loader.js";
11
+ import { getConfig } from "../config/loader.js";
12
12
  import {
13
13
  getCatalogProvider,
14
14
  getTtsProvider,
@@ -101,7 +101,7 @@ export async function resolveCallTtsProvider(
101
101
  options?: ResolveCallTtsOptions,
102
102
  ): Promise<ResolvedCallTts> {
103
103
  try {
104
- const config = loadConfig();
104
+ const config = getConfig();
105
105
  const effectiveProviderId = await effectiveTtsProviderId(config);
106
106
  const resolved = resolveTtsConfig(config, effectiveProviderId);
107
107
 
@@ -192,7 +192,7 @@ export async function resolveCallTtsProvider(
192
192
  * silent native path.
193
193
  */
194
194
  async function effectiveTtsProviderId(
195
- config: ReturnType<typeof loadConfig>,
195
+ config: ReturnType<typeof getConfig>,
196
196
  ): Promise<TtsProviderId | undefined> {
197
197
  try {
198
198
  const { tts } = await resolveEffectiveSpeechProviders(config);
@@ -1,4 +1,4 @@
1
- import { loadConfig } from "../config/loader.js";
1
+ import { getConfig } from "../config/loader.js";
2
2
  import { credentialKey } from "../security/credential-key.js";
3
3
  import { getSecureKeyAsync } from "../security/secure-keys.js";
4
4
  import { ConfigError } from "../util/errors.js";
@@ -23,7 +23,7 @@ export interface TwilioConfig {
23
23
  */
24
24
  export function resolveTwilioPhoneNumber(): string {
25
25
  try {
26
- const config = loadConfig();
26
+ const config = getConfig();
27
27
  if (config.twilio?.phoneNumber) {
28
28
  return config.twilio.phoneNumber;
29
29
  }
@@ -35,7 +35,7 @@ export function resolveTwilioPhoneNumber(): string {
35
35
  }
36
36
 
37
37
  export async function getTwilioConfig(): Promise<TwilioConfig> {
38
- const accountSid = loadConfig().twilio?.accountSid || "";
38
+ const accountSid = getConfig().twilio?.accountSid || "";
39
39
  const authToken =
40
40
  (await getSecureKeyAsync(credentialKey("twilio", "auth_token"))) || "";
41
41
  const phoneNumber = resolveTwilioPhoneNumber();
@@ -15,7 +15,7 @@ import {
15
15
  updatePhoneNumberWebhooks as updateTwilioPhoneNumberWebhooks,
16
16
  } from "@mycadet/twilio-client";
17
17
 
18
- import { loadConfig } from "../config/loader.js";
18
+ import { getConfig } from "../config/loader.js";
19
19
  import { credentialKey } from "../security/credential-key.js";
20
20
  import { getSecureKeyAsync } from "../security/secure-keys.js";
21
21
  import { ConfigError, ProviderError } from "../util/errors.js";
@@ -28,7 +28,7 @@ export interface TwilioCredentials {
28
28
  /** Resolve the Twilio Account SID from config. */
29
29
  function resolveAccountSid(): string | undefined {
30
30
  try {
31
- const config = loadConfig();
31
+ const config = getConfig();
32
32
  return config.twilio?.accountSid || undefined;
33
33
  } catch {
34
34
  // Config may not be available during early startup
@@ -1,5 +1,5 @@
1
1
  import { getIsCloud } from "../config/env-registry.js";
2
- import { loadConfig } from "../config/loader.js";
2
+ import { getConfig } from "../config/loader.js";
3
3
  import type { AssistantConfig } from "../config/types.js";
4
4
  import { getPublicBaseUrl } from "../inbound/public-ingress-urls.js";
5
5
  import { resolveTelephonyCredentialReadiness } from "./telephony-credential-preflight.js";
@@ -31,7 +31,7 @@ function fail(error: string): VoiceIngressPreflightFailure {
31
31
  }
32
32
 
33
33
  export async function preflightVoiceIngress(): Promise<VoiceIngressPreflightResult> {
34
- const ingressConfig = loadConfig();
34
+ const ingressConfig = getConfig();
35
35
 
36
36
  // The daemon performs both STT and TTS on the media-stream transport —
37
37
  // in every deployment mode, cloud-hosted included — so credential
@@ -2,13 +2,11 @@ export interface BundledCliModules {
2
2
  configEnv: typeof import("../config/env.js");
3
3
  providerSecretCatalog: typeof import("../providers/provider-secret-catalog.js");
4
4
  pluginCatalogCache: typeof import("./lib/plugin-catalog-cache.js");
5
- pluginCatalogLocal: typeof import("./lib/plugin-catalog-local.js");
6
5
  pluginDiff: typeof import("./lib/diff-plugin.js");
7
6
  pluginInspect: typeof import("./lib/inspect-plugin.js");
8
7
  pluginInstallGitHub: typeof import("./lib/install-from-github.js");
9
8
  pluginInstallPlatform: typeof import("./lib/install-from-cloud.js");
10
9
  pluginInstalled: typeof import("./lib/list-installed-plugins.js");
11
- pluginPinHistory: typeof import("./lib/plugin-pin-history.js");
12
10
  pluginSearch: typeof import("./lib/search-plugins.js");
13
11
  pluginSurfaces: typeof import("./lib/plugin-surfaces.js");
14
12
  pluginUninstall: typeof import("./lib/uninstall-plugin.js");
@@ -10,7 +10,7 @@ import { afterEach, beforeEach, describe, expect, test } from "bun:test";
10
10
  import { mockIpc } from "../../../__tests__/requests-mock.js";
11
11
  import { createApp, getAppDirPath } from "../../../apps/app-store.js";
12
12
  import { writeAppSourceFingerprint } from "../../../apps/source-fingerprint.js";
13
- import { getWorkspacePluginsDir } from "../../../util/platform.js";
13
+ import { getWorkspacePluginsDir } from "../../../util/layout.js";
14
14
  import { runCliCommand } from "./cli-test-harness.js";
15
15
 
16
16
  const ipc = await mockIpc("cli");
@@ -450,45 +450,21 @@ describe("plugins install - declared-schedules consent", () => {
450
450
  expect(r.exitCode).toBe(0);
451
451
  });
452
452
 
453
- test("a bundled-catalog install (platform disabled) is gated too", async () => {
454
- process.env.CADET_DISABLE_CLOUD = "true";
453
+ test("a name install absent from the catalog refuses before anything runs", async () => {
454
+ // A name needs the cloud catalog to resolve; an unclaimed name refuses
455
+ // before any install machinery runs.
455
456
  stageFixture = writeScheduleFixture;
456
457
  confirmResults = ["confirmed"];
457
458
 
458
459
  const r = await runCommand(["plugins", "install", "caveman"]);
459
460
 
460
461
  expect(platformInstallCalls.length).toBe(0);
461
- expect(installPluginCalls.length).toBe(1);
462
- expect(installPluginCalls[0]!.trustedSource).toBeDefined();
463
- expect(confirmCalls.length).toBe(1);
464
- expect(r.stdout).toContain('Plugin "caveman" declares 2 schedules:');
465
- expect(r.exitCode).toBe(0);
466
- });
467
-
468
- test("a local catalog source bypasses the cloud installer", async () => {
469
- catalogMatches = [
470
- {
471
- name: "fathom",
472
- path: "local:plugins/mcp-catalog/fathom@1.0.0",
473
- category: "productivity",
474
- source: {
475
- kind: "local",
476
- path: "plugins/mcp-catalog/fathom",
477
- version: "1.0.0",
478
- },
479
- },
480
- ];
481
-
482
- const r = await runCommand(["plugins", "install", "fathom"]);
483
-
484
- expect(platformInstallCalls).toHaveLength(0);
485
- expect(installPluginCalls).toHaveLength(1);
486
- expect(installPluginCalls[0]?.trustedSource).toEqual({
487
- kind: "local",
488
- path: "plugins/mcp-catalog/fathom",
489
- version: "1.0.0",
490
- });
491
- expect(r.exitCode).toBe(0);
462
+ expect(installPluginCalls.length).toBe(0);
463
+ expect(confirmCalls.length).toBe(0);
464
+ expect(r.stdout + r.stderr).toContain(
465
+ 'Plugin "caveman" is not in the marketplace catalog.',
466
+ );
467
+ expect(r.exitCode).toBe(1);
492
468
  });
493
469
 
494
470
  test("falls back to the cloud installer when catalog discovery fails", async () => {
@@ -781,39 +757,6 @@ describe("plugins inspect - schedules surface", () => {
781
757
  expect(r.stdout).toContain("weekly RRULE:FREQ=WEEKLY;BYDAY=MO (execute)");
782
758
  expect(r.exitCode).toBe(0);
783
759
  });
784
-
785
- test("renders a bundled package location without a GitHub URL", async () => {
786
- inspectResult = {
787
- ...inspectionWithSurfaces({
788
- skills: [],
789
- hooks: [],
790
- tools: [],
791
- schedules: [],
792
- }),
793
- installed: false,
794
- status: "not-installed",
795
- local: null,
796
- remote: {
797
- kind: "local",
798
- repo: "",
799
- path: "plugins/mcp-catalog/fathom",
800
- commit: "1.0.0",
801
- committedAt: null,
802
- description: null,
803
- homepage: null,
804
- license: null,
805
- category: "productivity",
806
- marketplaceRef: "main",
807
- version: "1.0.0",
808
- },
809
- };
810
-
811
- const r = await runCommand(["plugins", "inspect", "fathom"]);
812
-
813
- expect(r.stdout).toContain("bundled:plugins/mcp-catalog/fathom");
814
- expect(r.stdout).not.toContain("https://github.com//");
815
- expect(r.exitCode).toBe(0);
816
- });
817
760
  });
818
761
 
819
762
  describe("plugins install - setup skill hint", () => {