@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
@@ -1,5 +1,5 @@
1
1
  /**
2
- * When IS_CLOUD=true and no config.json exists yet, loadConfig() must
2
+ * When IS_CLOUD=true and no config.json exists yet, getConfig() must
3
3
  * write all managed-capable service modes as "managed" instead of the
4
4
  * per-service schema default. When IS_CLOUD is absent/false, or when
5
5
  * config.json already exists, the Zod schema defaults and existing values
@@ -38,7 +38,7 @@ afterAll(() => {
38
38
  mock.restore();
39
39
  });
40
40
 
41
- import { invalidateConfigCache, loadConfig } from "../config/loader.js";
41
+ import { getConfig, invalidateConfigCache } from "../config/loader.js";
42
42
 
43
43
  // ---------------------------------------------------------------------------
44
44
  // Helpers
@@ -135,7 +135,7 @@ describe("cloud-managed config defaults", () => {
135
135
  test("IS_CLOUD=true, no config file → all 6 cloud service modes written as 'managed', image-generation provider written as 'cadet'", () => {
136
136
  process.env.IS_CLOUD = "true";
137
137
 
138
- loadConfig();
138
+ getConfig();
139
139
 
140
140
  expect(existsSync(CONFIG_PATH)).toBe(true);
141
141
  const written = readConfig() as { services?: Record<string, unknown> };
@@ -161,7 +161,7 @@ describe("cloud-managed config defaults", () => {
161
161
  test("IS_CLOUD=false, no config file → service modes follow schema defaults (your-own except google/notion-oauth which are managed)", () => {
162
162
  process.env.IS_CLOUD = "false";
163
163
 
164
- loadConfig();
164
+ getConfig();
165
165
 
166
166
  expect(existsSync(CONFIG_PATH)).toBe(true);
167
167
  const written = readConfig() as { services?: Record<string, unknown> };
@@ -178,7 +178,7 @@ describe("cloud-managed config defaults", () => {
178
178
  test("IS_CLOUD unset, no config file → service modes follow schema defaults (your-own except google/notion-oauth which are managed)", () => {
179
179
  delete process.env.IS_CLOUD;
180
180
 
181
- loadConfig();
181
+ getConfig();
182
182
 
183
183
  expect(existsSync(CONFIG_PATH)).toBe(true);
184
184
  const written = readConfig() as { services?: Record<string, unknown> };
@@ -209,7 +209,7 @@ describe("cloud-managed config defaults", () => {
209
209
  ) + "\n",
210
210
  );
211
211
 
212
- const config = loadConfig();
212
+ const config = getConfig();
213
213
 
214
214
  const written = readConfig() as { services?: Record<string, unknown> };
215
215
  expect(written.services).toBeDefined();
@@ -246,7 +246,7 @@ describe("cloud-managed config defaults", () => {
246
246
  ) + "\n",
247
247
  );
248
248
 
249
- const config = loadConfig();
249
+ const config = getConfig();
250
250
 
251
251
  const written = readConfig() as { services?: Record<string, unknown> };
252
252
  expect(written.services).toBeDefined();
@@ -258,7 +258,7 @@ describe("cloud-managed config defaults", () => {
258
258
 
259
259
  test("IS_CLOUD=true, config file exists without a services key → in-memory config has all managed modes", () => {
260
260
  // Regression guard for the cloud-managed boot order: by the time
261
- // `loadConfig()` runs, lifecycle steps such as `seedInferenceProfiles`
261
+ // `getConfig()` runs, lifecycle steps such as `seedInferenceProfiles`
262
262
  // have already written `config.json` (with `llm.profiles` etc.), so
263
263
  // `configFileExisted` is true even on a brand-new cloud-managed
264
264
  // assistant. Deployment-context defaults must still be applied to the
@@ -281,7 +281,7 @@ describe("cloud-managed config defaults", () => {
281
281
  ) + "\n",
282
282
  );
283
283
 
284
- const config = loadConfig();
284
+ const config = getConfig();
285
285
 
286
286
  // In-memory config has the deployment-context defaults applied for the
287
287
  // missing service-mode fields.
@@ -320,7 +320,7 @@ describe("cloud-managed config defaults", () => {
320
320
  ) + "\n",
321
321
  );
322
322
 
323
- const config = loadConfig();
323
+ const config = getConfig();
324
324
 
325
325
  const imageGen = (
326
326
  config.services as unknown as Record<
@@ -355,7 +355,7 @@ describe("cloud-managed config defaults", () => {
355
355
  ) + "\n",
356
356
  );
357
357
 
358
- const config = loadConfig();
358
+ const config = getConfig();
359
359
 
360
360
  for (const svc of SCHEMA_YOUR_OWN_DEFAULT_SERVICES) {
361
361
  expect(
@@ -3,7 +3,7 @@
3
3
  * hand-edited to invalid JSON) is quarantined by the loader, which
4
4
  * logs an error with a remediation hint and falls through to the
5
5
  * default-config path so startup proceeds. These tests verify that
6
- * loadConfig() / loadRawConfig() never throw on corrupt input, and
6
+ * getConfig() / loadRawConfig() never throw on corrupt input, and
7
7
  * that the corrupt file is preserved for debugging.
8
8
  */
9
9
 
@@ -19,8 +19,8 @@ import { join } from "node:path";
19
19
  import { afterEach, beforeEach, describe, expect, test } from "bun:test";
20
20
 
21
21
  import {
22
+ getConfig,
22
23
  invalidateConfigCache,
23
- loadConfig,
24
24
  loadRawConfig,
25
25
  } from "../config/loader.js";
26
26
 
@@ -63,7 +63,7 @@ function listQuarantinedFiles(): string[] {
63
63
  // Tests
64
64
  // ---------------------------------------------------------------------------
65
65
 
66
- describe("loadConfig corrupt-file recovery", () => {
66
+ describe("getConfig corrupt-file recovery", () => {
67
67
  beforeEach(() => {
68
68
  resetWorkspace();
69
69
  invalidateConfigCache();
@@ -78,7 +78,7 @@ describe("loadConfig corrupt-file recovery", () => {
78
78
  writeFileSync(CONFIG_PATH, '{"provider": "anthropic", "mo');
79
79
 
80
80
  // Must not throw — the daemon must never block startup on corrupt config.
81
- const config = loadConfig();
81
+ const config = getConfig();
82
82
 
83
83
  // Defaults loaded — config is populated through the Zod schema.
84
84
  expect(config).toBeDefined();
@@ -102,7 +102,7 @@ describe("loadConfig corrupt-file recovery", () => {
102
102
  JSON.stringify({ provider: "anthropic", model: "claude-opus-4-7" }),
103
103
  );
104
104
 
105
- const config = loadConfig();
105
+ const config = getConfig();
106
106
  expect(config).toBeDefined();
107
107
 
108
108
  // No quarantine file for valid JSON.
@@ -114,7 +114,7 @@ describe("loadConfig corrupt-file recovery", () => {
114
114
  test("does not re-quarantine existing quarantine files on subsequent startups", () => {
115
115
  // First startup: corrupt config is quarantined.
116
116
  writeFileSync(CONFIG_PATH, "}{not json");
117
- loadConfig();
117
+ getConfig();
118
118
 
119
119
  const firstBatch = listQuarantinedFiles();
120
120
  expect(firstBatch).toHaveLength(1);
@@ -123,7 +123,7 @@ describe("loadConfig corrupt-file recovery", () => {
123
123
  // the quarantine on the previous load, so there IS now a valid config.json
124
124
  // on disk — no second quarantine should occur).
125
125
  invalidateConfigCache();
126
- loadConfig();
126
+ getConfig();
127
127
 
128
128
  // Still exactly one quarantined file — the loader did not re-rename a
129
129
  // pristine or already-quarantined file.
@@ -133,7 +133,7 @@ describe("loadConfig corrupt-file recovery", () => {
133
133
 
134
134
  test("quarantine filenames are filesystem-safe (no colons)", () => {
135
135
  writeFileSync(CONFIG_PATH, "not-valid-json");
136
- loadConfig();
136
+ getConfig();
137
137
 
138
138
  const quarantined = listQuarantinedFiles();
139
139
  expect(quarantined).toHaveLength(1);
@@ -149,7 +149,7 @@ describe("loadConfig corrupt-file recovery", () => {
149
149
  // ---------------------------------------------------------------------------
150
150
  // Shape-mismatch quarantine — same JSON.parse caveat as `loadRawConfig`.
151
151
  // Without an `isPlainObject` check, downstream code (e.g. the cloud-Gemini
152
- // `setNestedValue` block in `loadConfig`) would TypeError on `null` or
152
+ // `setNestedValue` block in `getConfig`) would TypeError on `null` or
153
153
  // primitive `fileConfig`, and only the broad try/catch around the migration
154
154
  // saved startup. Treating the wrong-shape case as a parse error here moves
155
155
  // the boundary check to the loader so callers don't have to defend.
@@ -167,7 +167,7 @@ describe("loadConfig corrupt-file recovery", () => {
167
167
  writeFileSync(CONFIG_PATH, jsonText);
168
168
 
169
169
  // Must not throw — daemon startup contract.
170
- const config = loadConfig();
170
+ const config = getConfig();
171
171
 
172
172
  // Defaults loaded — config is populated through the Zod schema.
173
173
  expect(config).toBeDefined();
@@ -1,5 +1,5 @@
1
1
  /**
2
- * When loadConfig()/loadRawConfig() quarantines a corrupt config.json, it
2
+ * When getConfig()/loadRawConfig() quarantines a corrupt config.json, it
3
3
  * writes a small JSON sentinel to <workspace>/data/config-quarantine-notice.json
4
4
  * recording the event. The per-turn `config-quarantine-notice` injector reads
5
5
  * that sentinel and surfaces the reset to the agent — it's agent-visible
@@ -23,10 +23,10 @@ import { afterEach, beforeEach, describe, expect, test } from "bun:test";
23
23
 
24
24
  import {
25
25
  _writeQuarantineNotice,
26
+ getConfig,
26
27
  invalidateConfigCache,
27
- loadConfig,
28
28
  } from "../config/loader.js";
29
- import { getConfigQuarantineNoticePath } from "../util/platform.js";
29
+ import { getConfigQuarantineNoticePath } from "../util/layout.js";
30
30
 
31
31
  // ---------------------------------------------------------------------------
32
32
  // Helpers
@@ -89,7 +89,7 @@ describe("config-quarantine notice sentinel", () => {
89
89
  test("writes a sentinel recording the quarantine when config.json is corrupt", () => {
90
90
  writeFileSync(CONFIG_PATH, '{"provider": "anthropic", "mo');
91
91
 
92
- loadConfig();
92
+ getConfig();
93
93
 
94
94
  const [quarantinedName] = listQuarantinedFiles();
95
95
  expect(quarantinedName).toBeDefined();
@@ -106,7 +106,7 @@ describe("config-quarantine notice sentinel", () => {
106
106
  test("a second quarantine overwrites the sentinel with the latest event", () => {
107
107
  // First corruption round.
108
108
  writeFileSync(CONFIG_PATH, '{"partial": ');
109
- loadConfig();
109
+ getConfig();
110
110
  invalidateConfigCache();
111
111
 
112
112
  const firstNotice = readNotice();
@@ -120,7 +120,7 @@ describe("config-quarantine notice sentinel", () => {
120
120
  /* spin */
121
121
  }
122
122
  writeFileSync(CONFIG_PATH, "still not json");
123
- loadConfig();
123
+ getConfig();
124
124
 
125
125
  const quarantined = listQuarantinedFiles().sort();
126
126
  expect(quarantined).toHaveLength(2);
@@ -139,7 +139,7 @@ describe("config-quarantine notice sentinel", () => {
139
139
  JSON.stringify({ provider: "anthropic", model: "claude-opus-4-7" }),
140
140
  );
141
141
 
142
- loadConfig();
142
+ getConfig();
143
143
 
144
144
  expect(listQuarantinedFiles()).toHaveLength(0);
145
145
  expect(existsSync(NOTICE_PATH)).toBe(false);
@@ -1,5 +1,5 @@
1
1
  /**
2
- * When loadConfig() parses config.json as valid JSON but schema validation
2
+ * When getConfig() parses config.json as valid JSON but schema validation
3
3
  * fails so hard that the loader falls back to *full* defaults (via
4
4
  * cloneDefaultConfig), it writes a JSON sentinel to
5
5
  * <workspace>/data/config-validation-reset-notice.json recording the reset.
@@ -25,11 +25,11 @@ import { join } from "node:path";
25
25
  import { afterEach, beforeEach, describe, expect, test } from "bun:test";
26
26
 
27
27
  import {
28
+ getConfig,
28
29
  invalidateConfigCache,
29
- loadConfig,
30
30
  withSuppressedConfigDiskWritesSync,
31
31
  } from "../config/loader.js";
32
- import { getConfigValidationResetNoticePath } from "../util/platform.js";
32
+ import { getConfigValidationResetNoticePath } from "../util/layout.js";
33
33
 
34
34
  const WORKSPACE_DIR = process.env.CADET_WORKSPACE_DIR!;
35
35
  const CONFIG_PATH = join(WORKSPACE_DIR, "config.json");
@@ -101,7 +101,7 @@ describe("config-validation-reset notice sentinel", () => {
101
101
  test("writes a sentinel when validation falls back to full defaults", () => {
102
102
  writeFullResetConfig();
103
103
 
104
- loadConfig();
104
+ getConfig();
105
105
 
106
106
  expect(existsSync(NOTICE_PATH)).toBe(true);
107
107
  const notice = readNotice();
@@ -119,7 +119,7 @@ describe("config-validation-reset notice sentinel", () => {
119
119
  JSON.stringify({ provider: "anthropic", model: "claude-opus-4-7" }),
120
120
  );
121
121
 
122
- loadConfig();
122
+ getConfig();
123
123
 
124
124
  expect(existsSync(NOTICE_PATH)).toBe(false);
125
125
  });
@@ -133,7 +133,7 @@ describe("config-validation-reset notice sentinel", () => {
133
133
  writeFullResetConfig();
134
134
  invalidateConfigCache();
135
135
 
136
- withSuppressedConfigDiskWritesSync(() => loadConfig());
136
+ withSuppressedConfigDiskWritesSync(() => getConfig());
137
137
 
138
138
  expect(existsSync(NOTICE_PATH)).toBe(true);
139
139
  expect(readNotice().invalidPaths).toContain("llm.activeProfile");
@@ -142,7 +142,7 @@ describe("config-validation-reset notice sentinel", () => {
142
142
  test("clears the sentinel under suppressed disk writes when the fix lands (config-set path)", () => {
143
143
  // First cause a reset so the sentinel exists.
144
144
  writeFullResetConfig();
145
- loadConfig();
145
+ getConfig();
146
146
  expect(existsSync(NOTICE_PATH)).toBe(true);
147
147
  invalidateConfigCache();
148
148
 
@@ -154,7 +154,7 @@ describe("config-validation-reset notice sentinel", () => {
154
154
  CONFIG_PATH,
155
155
  JSON.stringify({ provider: "anthropic", model: "claude-opus-4-7" }),
156
156
  );
157
- withSuppressedConfigDiskWritesSync(() => loadConfig());
157
+ withSuppressedConfigDiskWritesSync(() => getConfig());
158
158
 
159
159
  expect(existsSync(NOTICE_PATH)).toBe(false);
160
160
  });
@@ -184,7 +184,7 @@ describe("config-validation-reset notice sentinel", () => {
184
184
  ),
185
185
  );
186
186
 
187
- const config = loadConfig();
187
+ const config = getConfig();
188
188
 
189
189
  expect(existsSync(NOTICE_PATH)).toBe(false);
190
190
  expect(config.llm.activeProfile).toBe("glm-default");
@@ -197,7 +197,7 @@ describe("config-validation-reset notice sentinel", () => {
197
197
  test("a later clean load clears a stale reset sentinel", () => {
198
198
  // First: force a reset so the sentinel exists.
199
199
  writeFullResetConfig();
200
- loadConfig();
200
+ getConfig();
201
201
  expect(existsSync(NOTICE_PATH)).toBe(true);
202
202
  invalidateConfigCache();
203
203
 
@@ -207,7 +207,7 @@ describe("config-validation-reset notice sentinel", () => {
207
207
  CONFIG_PATH,
208
208
  JSON.stringify({ provider: "anthropic", model: "claude-opus-4-7" }),
209
209
  );
210
- loadConfig();
210
+ getConfig();
211
211
 
212
212
  expect(existsSync(NOTICE_PATH)).toBe(false);
213
213
  });
@@ -30,7 +30,7 @@ function ensureTestDir(): void {
30
30
  }
31
31
  }
32
32
 
33
- import { invalidateConfigCache, loadConfig } from "../config/loader.js";
33
+ import { getConfig, invalidateConfigCache } from "../config/loader.js";
34
34
  import {
35
35
  AssistantConfigSchema,
36
36
  DEFAULT_ELEVENLABS_VOICE_ID,
@@ -2360,10 +2360,10 @@ describe("032-tts-provider-unification migration", () => {
2360
2360
  });
2361
2361
 
2362
2362
  // ---------------------------------------------------------------------------
2363
- // Tests: loader integration (config file -> loadConfig with fallback)
2363
+ // Tests: loader integration (config file -> getConfig with fallback)
2364
2364
  // ---------------------------------------------------------------------------
2365
2365
 
2366
- describe("loadConfig with schema validation", () => {
2366
+ describe("getConfig with schema validation", () => {
2367
2367
  beforeEach(() => {
2368
2368
  // Keep WORKSPACE_DIR and logs in place to avoid racing async logger stream init.
2369
2369
  ensureTestDir();
@@ -2397,7 +2397,7 @@ describe("loadConfig with schema validation", () => {
2397
2397
  },
2398
2398
  },
2399
2399
  });
2400
- const config = loadConfig();
2400
+ const config = getConfig();
2401
2401
  expect(config.llm.callSites?.mainAgent?.provider).toBe("openai");
2402
2402
  expect(config.llm.callSites?.mainAgent?.model).toBe("gpt-4");
2403
2403
  expect(config.llm.callSites?.mainAgent?.maxTokens).toBe(4096);
@@ -2405,7 +2405,7 @@ describe("loadConfig with schema validation", () => {
2405
2405
 
2406
2406
  test("applies defaults for missing fields", () => {
2407
2407
  writeConfig({});
2408
- const config = loadConfig();
2408
+ const config = getConfig();
2409
2409
  expect(config.llm.profiles).toEqual({});
2410
2410
  expect(config.llm.profileOrder).toEqual([]);
2411
2411
  expect(config.llm.callSites).toEqual({});
@@ -2425,7 +2425,7 @@ describe("loadConfig with schema validation", () => {
2425
2425
  callSites: { mainAgent: { maxTokens: 4096 } },
2426
2426
  },
2427
2427
  });
2428
- const config = loadConfig();
2428
+ const config = getConfig();
2429
2429
  expect(config.llm.default).toEqual({
2430
2430
  provider: "openai",
2431
2431
  model: "gpt-4",
@@ -2442,7 +2442,7 @@ describe("loadConfig with schema validation", () => {
2442
2442
  profiles: { custom: { provider: "unknown-provider", model: "gpt-4" } },
2443
2443
  },
2444
2444
  });
2445
- const config = loadConfig();
2445
+ const config = getConfig();
2446
2446
  expect(config.llm.profiles.custom?.provider).toBe("unknown-provider");
2447
2447
  expect(config.llm.profiles.custom?.model).toBe("gpt-4");
2448
2448
  });
@@ -2451,7 +2451,7 @@ describe("loadConfig with schema validation", () => {
2451
2451
  writeConfig({
2452
2452
  llm: { callSites: { mainAgent: { maxTokens: -100, model: "gpt-4" } } },
2453
2453
  });
2454
- const config = loadConfig();
2454
+ const config = getConfig();
2455
2455
  expect(config.llm.callSites?.mainAgent?.maxTokens).toBeUndefined();
2456
2456
  expect(config.llm.callSites?.mainAgent?.model).toBe("gpt-4");
2457
2457
  });
@@ -2460,7 +2460,7 @@ describe("loadConfig with schema validation", () => {
2460
2460
  writeConfig({
2461
2461
  timeouts: { shellDefaultTimeoutSec: -5, shellMaxTimeoutSec: "bad" },
2462
2462
  });
2463
- const config = loadConfig();
2463
+ const config = getConfig();
2464
2464
  expect(config.timeouts.shellDefaultTimeoutSec).toBe(120);
2465
2465
  expect(config.timeouts.shellMaxTimeoutSec).toBe(600);
2466
2466
  expect(config.timeouts.permissionTimeoutSec).toBe(300);
@@ -2479,7 +2479,7 @@ describe("loadConfig with schema validation", () => {
2479
2479
  },
2480
2480
  },
2481
2481
  });
2482
- const config = loadConfig();
2482
+ const config = getConfig();
2483
2483
  expect(config.llm.callSites?.mainAgent?.provider).toBe("openai");
2484
2484
  expect(config.llm.callSites?.mainAgent?.model).toBe("gpt-4");
2485
2485
  expect(config.llm.callSites?.mainAgent?.thinking?.enabled).toBe(true);
@@ -2487,7 +2487,7 @@ describe("loadConfig with schema validation", () => {
2487
2487
  });
2488
2488
 
2489
2489
  test("handles no config file", () => {
2490
- const config = loadConfig();
2490
+ const config = getConfig();
2491
2491
  expect(config.llm.profiles).toEqual({});
2492
2492
  expect(config.llm.profileSession.defaultTtlSeconds).toBe(1800);
2493
2493
  });
@@ -2496,7 +2496,7 @@ describe("loadConfig with schema validation", () => {
2496
2496
  writeConfig({
2497
2497
  timeouts: { shellDefaultTimeoutSec: 30 },
2498
2498
  });
2499
- const config = loadConfig();
2499
+ const config = getConfig();
2500
2500
  expect(config.timeouts.shellDefaultTimeoutSec).toBe(30);
2501
2501
  expect(config.timeouts.shellMaxTimeoutSec).toBe(600);
2502
2502
  expect(config.timeouts.permissionTimeoutSec).toBe(300);
@@ -2514,7 +2514,7 @@ describe("loadConfig with schema validation", () => {
2514
2514
  },
2515
2515
  },
2516
2516
  });
2517
- const config = loadConfig();
2517
+ const config = getConfig();
2518
2518
  expect(
2519
2519
  config.llm.callSites?.mainAgent?.contextWindow?.targetBudgetRatio,
2520
2520
  ).toBeUndefined();
@@ -2527,13 +2527,13 @@ describe("loadConfig with schema validation", () => {
2527
2527
  writeConfig({
2528
2528
  rateLimit: { maxRequestsPerMinute: -1 },
2529
2529
  });
2530
- const config = loadConfig();
2530
+ const config = getConfig();
2531
2531
  expect(config.rateLimit.maxRequestsPerMinute).toBe(0);
2532
2532
  });
2533
2533
 
2534
2534
  test("falls back for invalid auditLog.retentionDays", () => {
2535
2535
  writeConfig({ auditLog: { retentionDays: -7 } });
2536
- const config = loadConfig();
2536
+ const config = getConfig();
2537
2537
  expect(config.auditLog.retentionDays).toBe(0);
2538
2538
  });
2539
2539
 
@@ -2543,7 +2543,7 @@ describe("loadConfig with schema validation", () => {
2543
2543
  writeConfig({
2544
2544
  calls: { enabled: false, maxDurationSeconds: 600 },
2545
2545
  });
2546
- const config = loadConfig();
2546
+ const config = getConfig();
2547
2547
  expect(config.calls.enabled).toBe(false);
2548
2548
  expect(config.calls.maxDurationSeconds).toBe(600);
2549
2549
  expect(config.calls.userConsultTimeoutSeconds).toBe(120);
@@ -2552,7 +2552,7 @@ describe("loadConfig with schema validation", () => {
2552
2552
 
2553
2553
  test("falls back for invalid calls.provider", () => {
2554
2554
  writeConfig({ calls: { provider: "vonage" } });
2555
- const config = loadConfig();
2555
+ const config = getConfig();
2556
2556
  expect(config.calls.provider).toBe("twilio");
2557
2557
  });
2558
2558
 
@@ -2565,7 +2565,7 @@ describe("loadConfig with schema validation", () => {
2565
2565
  llm: { callSites: { mainAgent: { maxTokens: 4096 } } },
2566
2566
  filing: { activeHoursStart: 8 },
2567
2567
  });
2568
- const config = loadConfig();
2568
+ const config = getConfig();
2569
2569
  expect(config.llm.callSites?.mainAgent?.maxTokens).toBe(4096);
2570
2570
  expect(config.filing.activeHoursStart).toBeNull();
2571
2571
  expect(config.filing.activeHoursEnd).toBeNull();
@@ -2579,7 +2579,7 @@ describe("loadConfig with schema validation", () => {
2579
2579
  llm: { callSites: { mainAgent: { maxTokens: 4096 } } },
2580
2580
  heartbeat: { activeHoursStart: null },
2581
2581
  });
2582
- const config = loadConfig();
2582
+ const config = getConfig();
2583
2583
  expect(config.llm.callSites?.mainAgent?.maxTokens).toBe(4096);
2584
2584
  expect(config.heartbeat.activeHoursStart).toBe(8);
2585
2585
  expect(config.heartbeat.activeHoursEnd).toBe(22);
@@ -2595,7 +2595,7 @@ describe("loadConfig with schema validation", () => {
2595
2595
  llm: { callSites: { mainAgent: { maxTokens: 4096 } } },
2596
2596
  heartbeat: { activeHoursStart: null, activeHoursEnd: 8 },
2597
2597
  });
2598
- const config = loadConfig();
2598
+ const config = getConfig();
2599
2599
  expect(config.llm.callSites?.mainAgent?.maxTokens).toBe(4096);
2600
2600
  expect(config.heartbeat.activeHoursStart).toBe(8);
2601
2601
  expect(config.heartbeat.activeHoursEnd).toBe(22);
@@ -2607,7 +2607,7 @@ describe("loadConfig with schema validation", () => {
2607
2607
  llm: { callSites: { mainAgent: { maxTokens: 4096 } } },
2608
2608
  heartbeat: { activeHoursStart: 22, activeHoursEnd: null },
2609
2609
  });
2610
- const config = loadConfig();
2610
+ const config = getConfig();
2611
2611
  expect(config.llm.callSites?.mainAgent?.maxTokens).toBe(4096);
2612
2612
  expect(config.heartbeat.activeHoursStart).toBe(8);
2613
2613
  expect(config.heartbeat.activeHoursEnd).toBe(22);
@@ -2623,7 +2623,7 @@ describe("loadConfig with schema validation", () => {
2623
2623
  llm: { callSites: { mainAgent: { maxTokens: 4096 } } },
2624
2624
  heartbeat: { activeHoursStart: 22, activeHoursEnd: 22 },
2625
2625
  });
2626
- const config = loadConfig();
2626
+ const config = getConfig();
2627
2627
  expect(config.llm.callSites?.mainAgent?.maxTokens).toBe(4096);
2628
2628
  expect(config.heartbeat.activeHoursStart).toBe(8);
2629
2629
  expect(config.heartbeat.activeHoursEnd).toBe(22);
@@ -2639,7 +2639,7 @@ describe("loadConfig with schema validation", () => {
2639
2639
  llm: { callSites: { mainAgent: { maxTokens: 1234 } } },
2640
2640
  filing: { activeHoursStart: 5, activeHoursEnd: 5 },
2641
2641
  });
2642
- const config = loadConfig();
2642
+ const config = getConfig();
2643
2643
  expect(config.llm.callSites?.mainAgent?.maxTokens).toBe(1234);
2644
2644
  expect(config.filing.activeHoursStart).toBeNull();
2645
2645
  expect(config.filing.activeHoursEnd).toBeNull();
@@ -2647,7 +2647,7 @@ describe("loadConfig with schema validation", () => {
2647
2647
 
2648
2648
  test("applies calls defaults when not specified", () => {
2649
2649
  writeConfig({});
2650
- const config = loadConfig();
2650
+ const config = getConfig();
2651
2651
  expect(config.calls.enabled).toBe(true);
2652
2652
  expect(config.calls.maxDurationSeconds).toBe(3600);
2653
2653
  expect(config.calls.userConsultTimeoutSeconds).toBe(120);
@@ -2697,21 +2697,20 @@ describe("Call entrypoint gating", () => {
2697
2697
  test("call_start tool returns error when calls.enabled is false", async () => {
2698
2698
  writeConfig({ calls: { enabled: false } });
2699
2699
  // Force config reload
2700
- loadConfig();
2700
+ getConfig();
2701
2701
 
2702
2702
  const { executeCallStart: _executeCallStart } =
2703
2703
  await import("../tools/calls/call-start.js");
2704
2704
 
2705
2705
  // The tool is registered via side effect. We need to test the gating logic directly.
2706
2706
  // Since the module registers itself, we test by loading config and checking behavior.
2707
- const { getConfig } = await import("../config/loader.js");
2708
2707
  const config = getConfig();
2709
2708
  expect(config.calls.enabled).toBe(false);
2710
2709
  });
2711
2710
 
2712
2711
  test("calls_start route throws ForbiddenError when calls.enabled is false", async () => {
2713
2712
  writeConfig({ calls: { enabled: false } });
2714
- loadConfig();
2713
+ getConfig();
2715
2714
 
2716
2715
  const { ROUTES } = await import("../runtime/routes/call-routes.js");
2717
2716
  const { RouteError } = await import("../runtime/routes/errors.js");
@@ -132,12 +132,10 @@ describe("config_set route - request validation", () => {
132
132
  activeProfile: "my-custom-profile",
133
133
  profiles: {
134
134
  balanced: {
135
- source: "managed",
136
- provider: "anthropic",
135
+ provider: "cadet",
137
136
  model: "claude-sonnet-4-6",
138
137
  },
139
138
  "my-custom-profile": {
140
- source: "user",
141
139
  provider: "anthropic",
142
140
  model: "claude-opus-4-6",
143
141
  maxTokens: 32000,
@@ -162,14 +160,12 @@ describe("config_set route - request validation", () => {
162
160
 
163
161
  const profiles = llm.profiles as Record<string, Record<string, unknown>>;
164
162
  expect(profiles["my-custom-profile"]).toEqual({
165
- source: "user",
166
163
  provider: "anthropic",
167
164
  model: "claude-opus-4-6",
168
165
  maxTokens: 32000,
169
166
  });
170
167
  expect(profiles.balanced).toEqual({
171
- source: "managed",
172
- provider: "anthropic",
168
+ provider: "cadet",
173
169
  model: "claude-sonnet-4-6",
174
170
  });
175
171