@mycadet/assistant 0.12.9 → 0.12.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (651) hide show
  1. package/Dockerfile +0 -8
  2. package/eslint-rules/__tests__/cli-no-daemon-internals.test.ts +1 -1
  3. package/openapi.yaml +62 -910
  4. package/package.json +3 -7
  5. package/scripts/build-test-fixtures.ts +1 -1
  6. package/scripts/generate-openapi.ts +22 -6
  7. package/scripts/postinstall.ts +4 -10
  8. package/scripts/run-tests.ts +0 -21
  9. package/src/__tests__/adaptive-thinking-repair.test.ts +19 -57
  10. package/src/__tests__/agent-loop.test.ts +0 -76
  11. package/src/__tests__/anthropic-provider.test.ts +6 -6
  12. package/src/__tests__/assert-not-live-db.ts +1 -1
  13. package/src/__tests__/assistant-id-boundary-guard.test.ts +3 -3
  14. package/src/__tests__/attachments-store-heic-normalize.test.ts +1 -1
  15. package/src/__tests__/attachments-store.test.ts +1 -1
  16. package/src/__tests__/audit-log-rotation.test.ts +1 -1
  17. package/src/__tests__/btw-routes.test.ts +1 -1
  18. package/src/__tests__/byok-default-profile-ensure.test.ts +21 -27
  19. package/src/__tests__/call-conversation-messages.test.ts +0 -5
  20. package/src/__tests__/call-recovery.test.ts +2 -7
  21. package/src/__tests__/call-routes-http.test.ts +0 -12
  22. package/src/__tests__/call-store.test.ts +2 -7
  23. package/src/__tests__/catalog-files.test.ts +7 -5
  24. package/src/__tests__/checker.test.ts +1 -1
  25. package/src/__tests__/cli-memory-v2-reembed-skills.test.ts +4 -4
  26. package/src/__tests__/cloud-client-verify-credential.test.ts +0 -4
  27. package/src/__tests__/cloud-credential-catalog-cli.test.ts +14 -14
  28. package/src/__tests__/cloud-profile-guard.test.ts +48 -401
  29. package/src/__tests__/compaction-events.test.ts +2 -2
  30. package/src/__tests__/config-loader-backfill.test.ts +74 -163
  31. package/src/__tests__/config-loader-cloud-defaults.test.ts +11 -11
  32. package/src/__tests__/config-loader-corrupt.test.ts +10 -10
  33. package/src/__tests__/config-loader-quarantine-notice.test.ts +7 -7
  34. package/src/__tests__/config-loader-validation-reset-notice.test.ts +11 -11
  35. package/src/__tests__/config-schema.test.ts +26 -27
  36. package/src/__tests__/config-set-route.test.ts +2 -6
  37. package/src/__tests__/conversation-agent-loop-inference-profile.test.ts +28 -300
  38. package/src/__tests__/conversation-agent-loop-overflow.test.ts +39 -246
  39. package/src/__tests__/conversation-agent-loop.test.ts +2 -58
  40. package/src/__tests__/conversation-clear-safety.test.ts +0 -30
  41. package/src/__tests__/conversation-inference-profile-route.test.ts +1 -1
  42. package/src/__tests__/conversation-queue.test.ts +1 -1
  43. package/src/__tests__/conversation-runtime-assembly.test.ts +1 -1
  44. package/src/__tests__/conversation-skill-tools.test.ts +4 -444
  45. package/src/__tests__/conversation-slash-commands.test.ts +1 -1
  46. package/src/__tests__/conversation-store.test.ts +1 -84
  47. package/src/__tests__/conversation-surface-state.test.ts +0 -16
  48. package/src/__tests__/credential-health-service.test.ts +14 -1
  49. package/src/__tests__/credential-record-retire.test.ts +1 -1
  50. package/src/__tests__/credential-record-write-through.test.ts +1 -1
  51. package/src/__tests__/credential-security-invariants.test.ts +0 -145
  52. package/src/__tests__/custom-profile-ensure.test.ts +1 -1
  53. package/src/__tests__/default-profile-catalog-fallback.test.ts +5 -15
  54. package/src/__tests__/deterministic-verification-control-plane.test.ts +0 -2
  55. package/src/__tests__/dictation-profile-store.test.ts +6 -6
  56. package/src/__tests__/disk-usage.test.ts +28 -164
  57. package/src/__tests__/docker-signing-key-bootstrap.test.ts +1 -1
  58. package/src/__tests__/embedding-cloud-proxy-selection.test.ts +1 -1
  59. package/src/__tests__/emit-event-signal.test.ts +1 -1
  60. package/src/__tests__/gateway-client-cloud-outbound.test.ts +3 -3
  61. package/src/__tests__/gateway-only-enforcement.test.ts +1 -1
  62. package/src/__tests__/guardian-dispatch.test.ts +0 -13
  63. package/src/__tests__/helpers/seed-app.ts +1 -1
  64. package/src/__tests__/host-cu-routes-targeted.test.ts +1 -1
  65. package/src/__tests__/host-shell-tool.test.ts +1 -1
  66. package/src/__tests__/identity-routes.test.ts +1 -1
  67. package/src/__tests__/inference-profile-session-handler.test.ts +1 -1
  68. package/src/__tests__/inference-profile-session-ipc.test.ts +1 -1
  69. package/src/__tests__/injector-chain.test.ts +1 -1
  70. package/src/__tests__/injector-config-quarantine-notice.test.ts +1 -1
  71. package/src/__tests__/injector-config-validation-reset-notice.test.ts +1 -1
  72. package/src/__tests__/injector-pkb-v2-silenced.test.ts +1 -1
  73. package/src/__tests__/{platform.test.ts → layout.test.ts} +1 -1
  74. package/src/__tests__/list-all-apps.test.ts +1 -1
  75. package/src/__tests__/live-workspace-guard.test.ts +2 -2
  76. package/src/__tests__/llm-resolver-override-or-default.test.ts +5 -6
  77. package/src/__tests__/llm-resolver.test.ts +7 -7
  78. package/src/__tests__/llm-schema-fallback-profile.test.ts +9 -10
  79. package/src/__tests__/llm-usage-store.test.ts +0 -495
  80. package/src/__tests__/log-export-routes.test.ts +1 -1
  81. package/src/__tests__/mcp-config-secret-boundary.test.ts +12 -53
  82. package/src/__tests__/mcp-list-plugin-servers.test.ts +1 -1
  83. package/src/__tests__/memory-config-file-parity.test.ts +1 -1
  84. package/src/__tests__/memory-v2-static-injector.test.ts +1 -1
  85. package/src/__tests__/messages-read-boundary-guard.test.ts +0 -2
  86. package/src/__tests__/notification-guardian-path.test.ts +0 -7
  87. package/src/__tests__/onboarding-persona-write.test.ts +1 -1
  88. package/src/__tests__/openai-provider.test.ts +8 -8
  89. package/src/__tests__/path-policy.test.ts +1 -1
  90. package/src/__tests__/persona-resolver.test.ts +1 -1
  91. package/src/__tests__/plugin-app-serve-routes.test.ts +1 -1
  92. package/src/__tests__/plugin-effective-enabled-set.test.ts +1 -1
  93. package/src/__tests__/plugin-import-boundary-guard.test.ts +4 -6
  94. package/src/__tests__/plugin-import-boundary-reverse-guard.test.ts +0 -3
  95. package/src/__tests__/provider-cloud-proxy-integration.test.ts +1 -5
  96. package/src/__tests__/provider-connections-backfill.test.ts +10 -10
  97. package/src/__tests__/prune-old-conversations-job.test.ts +6 -31
  98. package/src/__tests__/resolve-app.test.ts +1 -1
  99. package/src/__tests__/run-due-schedules.test.ts +1 -1
  100. package/src/__tests__/scaffold-managed-skill-tool.test.ts +0 -53
  101. package/src/__tests__/schedule-routes.test.ts +1 -1
  102. package/src/__tests__/schedule-store.test.ts +1 -1
  103. package/src/__tests__/secret-routes-cloud-proxy.test.ts +1 -1
  104. package/src/__tests__/skill-load-plugin-scope.test.ts +1 -1
  105. package/src/__tests__/surface-completion-compaction-boundary.test.ts +1 -1
  106. package/src/__tests__/tool-approval-handler.test.ts +1 -1
  107. package/src/__tests__/tool-audit.test.ts +5 -235
  108. package/src/__tests__/tool-executor-lifecycle-events.test.ts +54 -114
  109. package/src/__tests__/tools-get-route.test.ts +1 -1
  110. package/src/__tests__/turn-outcome-read.test.ts +1 -1
  111. package/src/__tests__/twilio-routes.test.ts +0 -1
  112. package/src/__tests__/usage-attribution.test.ts +0 -31
  113. package/src/__tests__/verification-control-plane-policy.test.ts +3 -10
  114. package/src/__tests__/visible-app-context.test.ts +1 -1
  115. package/src/__tests__/voice-ingress-preflight.test.ts +1 -1
  116. package/src/__tests__/workspace-git-service.test.ts +1 -1
  117. package/src/__tests__/workspace-greetings.test.ts +1 -1
  118. package/src/acp/__tests__/helpers/acp-config-stub.ts +1 -1
  119. package/src/activation/progress-store.ts +1 -1
  120. package/src/activation/turn-hooks.ts +1 -1
  121. package/src/agent/loop.ts +0 -51
  122. package/src/apps/app-store.ts +1 -1
  123. package/src/avatar/__tests__/avatar-store.test.ts +2 -172
  124. package/src/avatar/accent-backfill.ts +1 -1
  125. package/src/avatar/avatar-manifest.ts +1 -1
  126. package/src/avatar/avatar-store.ts +10 -69
  127. package/src/avatar/ensure-raster.ts +1 -1
  128. package/src/avatar/identity-avatar.ts +1 -1
  129. package/src/avatar/sync-avatar.ts +1 -1
  130. package/src/avatar/traits-png-sync.ts +1 -1
  131. package/src/bundler/compiler-tools.ts +1 -1
  132. package/src/bundler/package-resolver.ts +1 -1
  133. package/src/calls/__tests__/call-controller.test.ts +25 -27
  134. package/src/calls/active-call-lease.ts +1 -1
  135. package/src/calls/call-controller.ts +3 -3
  136. package/src/calls/call-domain.ts +4 -8
  137. package/src/calls/call-store.ts +2 -76
  138. package/src/calls/resolve-call-tts-provider.ts +3 -3
  139. package/src/calls/twilio-config.ts +3 -3
  140. package/src/calls/twilio-rest.ts +2 -2
  141. package/src/calls/voice-ingress-preflight.ts +2 -2
  142. package/src/cli/bundled-modules.ts +0 -2
  143. package/src/cli/commands/__tests__/apps.test.ts +1 -1
  144. package/src/cli/commands/__tests__/plugins.test.ts +9 -66
  145. package/src/cli/commands/__tests__/ps.test.ts +67 -0
  146. package/src/cli/commands/auth.help.ts +2 -2
  147. package/src/cli/commands/avatar.ts +1 -1
  148. package/src/cli/commands/changelog.ts +1 -1
  149. package/src/cli/commands/cloud/__tests__/subscription.test.ts +2 -2
  150. package/src/cli/commands/cloud/index.help.ts +1 -1
  151. package/src/cli/commands/cloud/index.ts +2 -2
  152. package/src/cli/commands/db/refresh.ts +1 -1
  153. package/src/cli/commands/db/repair-step-conversation-backfill.ts +1 -1
  154. package/src/cli/commands/db/repair.ts +1 -1
  155. package/src/cli/commands/db/status.ts +1 -1
  156. package/src/cli/commands/inference-profiles.ts +1 -12
  157. package/src/cli/commands/memory/__tests__/memory-v3.test.ts +1 -116
  158. package/src/cli/commands/memory/index.help.ts +1 -43
  159. package/src/cli/commands/memory/memory-v3.ts +0 -64
  160. package/src/cli/commands/plugins.ts +54 -205
  161. package/src/cli/commands/ps.ts +5 -2
  162. package/src/cli/commands/status.ts +1 -1
  163. package/src/cli/index.help.ts +0 -2
  164. package/src/cli/lib/__tests__/inspect-plugin.test.ts +36 -66
  165. package/src/cli/lib/__tests__/install-from-cloud.test.ts +1 -1
  166. package/src/cli/lib/__tests__/install-from-github.test.ts +41 -117
  167. package/src/cli/lib/__tests__/plugin-catalog-cache.test.ts +2 -185
  168. package/src/cli/lib/__tests__/plugin-catalog-resolve.test.ts +36 -66
  169. package/src/cli/lib/__tests__/plugin-catalog-visibility.test.ts +4 -6
  170. package/src/cli/lib/__tests__/plugin-details.test.ts +113 -96
  171. package/src/cli/lib/__tests__/search-plugins.test.ts +9 -16
  172. package/src/cli/lib/__tests__/uninstall-plugin.test.ts +1 -1
  173. package/src/cli/lib/__tests__/upgrade-plugin.test.ts +38 -15
  174. package/src/cli/lib/diff-plugin.ts +1 -1
  175. package/src/cli/lib/inspect-plugin.ts +13 -97
  176. package/src/cli/lib/install-from-cloud.ts +1 -1
  177. package/src/cli/lib/install-from-github.ts +75 -154
  178. package/src/cli/lib/install-plugin-dependencies.ts +1 -1
  179. package/src/cli/lib/list-installed-plugins.ts +1 -1
  180. package/src/cli/lib/open-browser.ts +1 -1
  181. package/src/cli/lib/plugin-catalog-cache.ts +8 -51
  182. package/src/cli/lib/plugin-catalog-resolve.ts +3 -22
  183. package/src/cli/lib/plugin-details.ts +5 -27
  184. package/src/cli/lib/plugin-marketplace.ts +18 -266
  185. package/src/cli/lib/search-plugins.ts +23 -43
  186. package/src/cli/lib/toggle-plugin.ts +1 -1
  187. package/src/cli/lib/uninstall-plugin.ts +1 -1
  188. package/src/cli/lib/upgrade-plugin.ts +3 -49
  189. package/src/cli/program.ts +1 -3
  190. package/src/cli.ts +1 -1
  191. package/src/cloud/client.ts +0 -6
  192. package/src/cloud/consent-cache.test.ts +22 -201
  193. package/src/cloud/consent-cache.ts +16 -111
  194. package/src/cloud/sync-identity.ts +1 -1
  195. package/src/config/__tests__/chat-settings.test.ts +1 -1
  196. package/src/config/__tests__/cloud-identity.test.ts +15 -2
  197. package/src/config/__tests__/default-plugin-skill-discovery.test.ts +1 -1
  198. package/src/config/__tests__/default-profile-catalog.test.ts +12 -51
  199. package/src/config/__tests__/deployment-context-defaults.test.ts +13 -13
  200. package/src/config/__tests__/loader-callsite-strip-fallback.test.ts +4 -4
  201. package/src/config/__tests__/loader-last-known-good.test.ts +9 -9
  202. package/src/config/__tests__/loader-sparse-array-cleanup.test.ts +7 -7
  203. package/src/config/__tests__/plugin-resident-skill-discovery.test.ts +1 -1
  204. package/src/config/__tests__/profile-materialization.test.ts +2 -4
  205. package/src/config/__tests__/sync-gated-profiles.test.ts +1 -106
  206. package/src/config/acp-agent-write.ts +1 -1
  207. package/src/config/bundled-skills/settings/tools/open-system-settings.test.ts +1 -1
  208. package/src/config/bundled-skills/settings/tools/open-system-settings.ts +1 -1
  209. package/src/config/call-site-defaults.ts +0 -6
  210. package/src/config/cloud-identity.ts +12 -5
  211. package/src/config/composer-preferences.ts +1 -1
  212. package/src/config/default-profile-catalog.ts +8 -75
  213. package/src/config/default-profile-names.ts +2 -25
  214. package/src/config/env-registry.ts +1 -14
  215. package/src/config/env.ts +8 -6
  216. package/src/config/llm-resolver.ts +1 -2
  217. package/src/config/loader.ts +13 -17
  218. package/src/config/profile-materialization.ts +1 -1
  219. package/src/config/schema.ts +1 -7
  220. package/src/config/schemas/call-site-catalog.ts +0 -7
  221. package/src/config/schemas/llm.ts +22 -27
  222. package/src/config/seed-inference-profiles.ts +16 -17
  223. package/src/config/skills.ts +2 -2
  224. package/src/config/sync-gated-profiles.ts +6 -24
  225. package/src/credential-health/credential-health-service.ts +10 -3
  226. package/src/daemon/approval-generators.ts +3 -3
  227. package/src/daemon/config-watcher.ts +2 -2
  228. package/src/daemon/conversation-agent-loop-handlers.ts +0 -18
  229. package/src/daemon/conversation-agent-loop.ts +6 -97
  230. package/src/daemon/conversation-process.ts +1 -1
  231. package/src/daemon/conversation-skill-tools.ts +4 -72
  232. package/src/daemon/conversation-store.ts +1 -1
  233. package/src/daemon/conversation-surface-state.ts +0 -33
  234. package/src/daemon/conversation-surfaces.ts +1 -86
  235. package/src/daemon/conversation-tool-setup.test.ts +1 -1
  236. package/src/daemon/conversation-tool-setup.ts +0 -23
  237. package/src/daemon/conversation.ts +3 -5
  238. package/src/daemon/daemon-control.ts +3 -3
  239. package/src/daemon/dictation-profile-store.ts +3 -3
  240. package/src/daemon/event-loop-watchdog.test.ts +2 -198
  241. package/src/daemon/event-loop-watchdog.ts +0 -185
  242. package/src/daemon/external-plugins-bootstrap.ts +1 -1
  243. package/src/daemon/first-greeting.ts +1 -1
  244. package/src/daemon/handlers/skills.ts +1 -1
  245. package/src/daemon/host-app-control-proxy.ts +1 -1
  246. package/src/daemon/host-cu-proxy.ts +2 -2
  247. package/src/daemon/identity-helpers.ts +1 -1
  248. package/src/daemon/lifecycle.ts +11 -15
  249. package/src/daemon/main.ts +1 -1
  250. package/src/daemon/now-scratchpad.ts +1 -1
  251. package/src/daemon/process-message.ts +4 -4
  252. package/src/daemon/profiler-run-store.ts +2 -2
  253. package/src/daemon/providers-setup.ts +2 -2
  254. package/src/daemon/shutdown-handlers.ts +0 -10
  255. package/src/daemon/sqlite-corruption-watchdog.test.ts +2 -142
  256. package/src/daemon/sqlite-corruption-watchdog.ts +17 -81
  257. package/src/daemon/tool-side-effects.ts +1 -1
  258. package/src/desktop/desktop-session-manager.ts +1 -1
  259. package/src/desktop/desktop-wallpaper-renderer.ts +1 -1
  260. package/src/heartbeat/heartbeat-service.ts +1 -1
  261. package/src/home/feed-writer.ts +1 -1
  262. package/src/home/home-greeting-cache.ts +1 -1
  263. package/src/home/relationship-state-writer.ts +2 -2
  264. package/src/hooks/__tests__/hook-live-reload.test.ts +1 -1
  265. package/src/hooks/hook-loader.ts +2 -2
  266. package/src/inbound/__tests__/oauth-callback-url.test.ts +2 -2
  267. package/src/inbound/oauth-callback-url.ts +3 -3
  268. package/src/ipc/__tests__/attachment-ipc.test.ts +1 -1
  269. package/src/ipc/socket-path.ts +1 -1
  270. package/src/live-voice/__tests__/live-voice-archive.test.ts +1 -1
  271. package/src/live-voice/__tests__/live-voice-vad.test.ts +1 -1
  272. package/src/live-voice/live-voice-session.ts +3 -66
  273. package/src/mcp/__tests__/effective-config.test.ts +1 -1
  274. package/src/mcp/__tests__/mcp-oauth-client-registration.test.ts +2 -2
  275. package/src/mcp/__tests__/mcp-oauth-provider.test.ts +2 -3
  276. package/src/mcp/__tests__/reload-signal-emission.test.ts +1 -1
  277. package/src/mcp/__tests__/reload-signal.test.ts +1 -1
  278. package/src/mcp/__tests__/workspace-mcp-config.test.ts +19 -21
  279. package/src/mcp/reload-signal.ts +1 -1
  280. package/src/mcp/workspace-mcp-config.ts +1 -23
  281. package/src/messaging/draft-store.ts +1 -1
  282. package/src/monitoring/__tests__/active-conversations.test.ts +1 -1
  283. package/src/monitoring/__tests__/page-cache.test.ts +1 -1
  284. package/src/monitoring/__tests__/stall-capture.test.ts +1 -1
  285. package/src/monitoring/__tests__/workspace-git-heartbeat.test.ts +1 -1
  286. package/src/monitoring/active-conversations.ts +1 -1
  287. package/src/monitoring/control.ts +1 -1
  288. package/src/monitoring/daemon-boot-time.ts +1 -1
  289. package/src/monitoring/daemon-heartbeat.ts +1 -1
  290. package/src/monitoring/page-cache.ts +1 -1
  291. package/src/monitoring/plugin-auto-update.ts +1 -7
  292. package/src/monitoring/plugin-source-watch.ts +1 -1
  293. package/src/monitoring/recovery/db.ts +1 -1
  294. package/src/monitoring/recovery/inflight-content.ts +1 -1
  295. package/src/monitoring/resource-sampler.ts +3 -14
  296. package/src/monitoring/stall-capture.ts +1 -1
  297. package/src/monitoring/worker.ts +9 -76
  298. package/src/monitoring/workspace-git-heartbeat.ts +1 -1
  299. package/src/oauth/connect-orchestrator.ts +4 -4
  300. package/src/permissions/checker.ts +1 -1
  301. package/src/permissions/workspace-policy.ts +1 -1
  302. package/src/persistence/__tests__/main-db-readonly-probe.ts +27 -52
  303. package/src/persistence/__tests__/message-content-file.test.ts +1 -1
  304. package/src/persistence/__tests__/slow-sync-log.test.ts +0 -2
  305. package/src/persistence/attachments-store.ts +1 -1
  306. package/src/persistence/conversation-crud.ts +1 -38
  307. package/src/persistence/conversation-directories.ts +1 -1
  308. package/src/persistence/conversation-types.ts +0 -8
  309. package/src/persistence/db-async-query.ts +1 -1
  310. package/src/persistence/db-connection.ts +11 -1
  311. package/src/persistence/db-init.ts +1 -1
  312. package/src/persistence/db-maintenance.ts +1 -1
  313. package/src/persistence/embeddings/__tests__/embedding-local-lifecycle.test.ts +1 -1
  314. package/src/persistence/embeddings/embedding-local.ts +4 -4
  315. package/src/persistence/embeddings/embedding-runtime-manager.ts +1 -1
  316. package/src/persistence/embeddings/qdrant-client.ts +1 -1
  317. package/src/persistence/embeddings/qdrant-manager.ts +1 -1
  318. package/src/persistence/job-handlers/__tests__/message-lexical-backfill.test.ts +1 -1
  319. package/src/persistence/job-handlers/__tests__/message-lexical-enqueue.test.ts +1 -1
  320. package/src/persistence/job-handlers/cleanup.ts +8 -17
  321. package/src/persistence/llm-usage-store.ts +2 -229
  322. package/src/persistence/message-content-file.ts +1 -1
  323. package/src/persistence/migrations/209-strip-thinking-from-consolidated.ts +1 -1
  324. package/src/persistence/migrations/222-strip-placeholder-sentinels-from-messages.ts +1 -1
  325. package/src/persistence/migrations/296-rewrite-balanced-economy-profile-pins.test.ts +1 -1
  326. package/src/persistence/migrations/306-rewrite-frontier-profile-pins.test.ts +1 -1
  327. package/src/persistence/migrations/329-move-onboarding-events-to-telemetry-db.test.ts +13 -0
  328. package/src/persistence/migrations/330-move-auth-fallback-events-to-telemetry-db.test.ts +13 -0
  329. package/src/persistence/migrations/331-move-lifecycle-events-to-telemetry-db.test.ts +13 -0
  330. package/src/persistence/migrations/332-move-skill-loaded-events-to-telemetry-db.test.ts +13 -0
  331. package/src/persistence/migrations/333-create-telemetry-events-table.test.ts +7 -4
  332. package/src/persistence/migrations/334-backfill-telemetry-events-outbox.test.ts +13 -0
  333. package/src/persistence/migrations/387-drop-telemetry-tables.ts +51 -0
  334. package/src/persistence/migrations/__tests__/327-create-flush-checkpoints.test.ts +9 -1
  335. package/src/persistence/migrations/__tests__/387-drop-telemetry-tables.test.ts +79 -0
  336. package/src/persistence/migrations/helpers/relocation.ts +1 -1
  337. package/src/persistence/migrations/run-migrations.ts +1 -1
  338. package/src/persistence/migrations/validate-migration-state.ts +1 -1
  339. package/src/persistence/raw-query.ts +1 -29
  340. package/src/persistence/slow-sync-log.ts +0 -23
  341. package/src/persistence/steps.ts +2 -0
  342. package/src/{telemetry → persistence}/tool-audit.ts +6 -121
  343. package/src/plugin-api/index.ts +1 -1
  344. package/src/plugin-api/plugin-name-env.ts +1 -1
  345. package/src/plugins/__tests__/installed-plugin-dirs.test.ts +1 -1
  346. package/src/plugins/collect-source-versions.ts +1 -1
  347. package/src/plugins/defaults/channel/package.json +1 -1
  348. package/src/plugins/defaults/cloud-hosted/package.json +1 -1
  349. package/src/plugins/defaults/compaction/package.json +1 -1
  350. package/src/plugins/defaults/documents/package.json +1 -1
  351. package/src/plugins/defaults/empty-response/package.json +1 -1
  352. package/src/plugins/defaults/exploration-drift/package.json +1 -1
  353. package/src/plugins/defaults/image-fallback/package.json +1 -1
  354. package/src/plugins/defaults/image-recovery/package.json +1 -1
  355. package/src/plugins/defaults/max-tokens-continue/package.json +1 -1
  356. package/src/plugins/defaults/memory/__tests__/db-async-query.test.ts +1 -1
  357. package/src/plugins/defaults/memory/__tests__/db-maintenance.test.ts +1 -1
  358. package/src/plugins/defaults/memory/__tests__/memory-retrospective-job.test.ts +0 -82
  359. package/src/plugins/defaults/memory/__tests__/memory-retrospective-skill-card.test.ts +0 -41
  360. package/src/plugins/defaults/memory/__tests__/memory-tier-boundary-guard.test.ts +0 -2
  361. package/src/plugins/defaults/memory/memory-retrospective-job.ts +3 -52
  362. package/src/plugins/defaults/memory/memory-retrospective-skill-card.ts +0 -18
  363. package/src/plugins/defaults/memory/package.json +1 -1
  364. package/src/plugins/defaults/memory/paths.ts +4 -4
  365. package/src/plugins/defaults/memory/src/__tests__/memory-worker-routes.test.ts +1 -1
  366. package/src/plugins/defaults/memory/src/memory-v2-routes.ts +5 -5
  367. package/src/plugins/defaults/memory/src/memory-v3-routes.ts +0 -207
  368. package/src/plugins/defaults/memory/src/memory-worker-routes.ts +1 -1
  369. package/src/plugins/defaults/memory/startup.ts +1 -22
  370. package/src/plugins/defaults/memory/v3/__tests__/orchestrate.test.ts +2 -253
  371. package/src/plugins/defaults/memory/v3/orchestrate.ts +5 -129
  372. package/src/plugins/defaults/memory/worker-control.ts +1 -1
  373. package/src/plugins/defaults/memory/worker.ts +2 -2
  374. package/src/plugins/defaults/session/package.json +1 -1
  375. package/src/plugins/defaults/surface-completion-nudge/package.json +1 -1
  376. package/src/plugins/defaults/task-progress/package.json +1 -1
  377. package/src/plugins/defaults/task-progress-nudge/package.json +1 -1
  378. package/src/plugins/defaults/title-generate/package.json +1 -1
  379. package/src/plugins/defaults/tool-error/package.json +1 -1
  380. package/src/plugins/defaults/tool-result-truncate/package.json +1 -1
  381. package/src/plugins/defaults/turn-context/package.json +1 -1
  382. package/src/plugins/defaults/workspace/injectors.ts +1 -1
  383. package/src/plugins/defaults/workspace/package.json +1 -1
  384. package/src/plugins/disabled-state.ts +1 -1
  385. package/src/plugins/ensure-plugin-api-shim.ts +1 -1
  386. package/src/plugins/ensure-shared-dep-links.ts +1 -1
  387. package/src/plugins/installed-plugin-dirs.ts +1 -1
  388. package/src/plugins/mcp-servers.ts +7 -9
  389. package/src/plugins/mtime-cache.ts +2 -2
  390. package/src/plugins/source-versions.ts +1 -1
  391. package/src/prompts/bootstrap-cleanup.ts +1 -1
  392. package/src/prompts/persona-resolver.ts +1 -1
  393. package/src/prompts/sections.ts +2 -2
  394. package/src/prompts/system-prompt.ts +10 -42
  395. package/src/prompts/templates/BOOTSTRAP-ACTIVATION-RAIL.md +0 -37
  396. package/src/providers/__tests__/cadet-connection-routing.test.ts +2 -2
  397. package/src/providers/cadet/client.ts +1 -1
  398. package/src/providers/inference/__tests__/base-url-route-validation.test.ts +1 -1
  399. package/src/providers/inference/adapter-factory.ts +1 -1
  400. package/src/providers/inference/backfill.ts +3 -10
  401. package/src/providers/inference/profile-probe.ts +1 -1
  402. package/src/providers/retry.ts +0 -2
  403. package/src/providers/types.ts +0 -7
  404. package/src/providers/usage-tracking.ts +1 -1
  405. package/src/routes/__tests__/route-host.test.ts +1 -1
  406. package/src/routes/control.ts +1 -1
  407. package/src/routes/route-host-client.ts +1 -1
  408. package/src/routes/worker.ts +2 -2
  409. package/src/runtime/agent-wake.ts +1 -1
  410. package/src/runtime/assistant-stream-state.ts +1 -1
  411. package/src/runtime/auth/token-service.ts +1 -1
  412. package/src/runtime/background-job-runner.ts +1 -1
  413. package/src/runtime/middleware/twilio-validation.ts +2 -2
  414. package/src/runtime/routes/__tests__/app-pin-routes.test.ts +1 -1
  415. package/src/runtime/routes/__tests__/apps-refresh-route.test.ts +1 -1
  416. package/src/runtime/routes/__tests__/avatar-state-routes.test.ts +3 -33
  417. package/src/runtime/routes/__tests__/cloud-credits-routes.test.ts +5 -4
  418. package/src/runtime/routes/__tests__/cloud-invoice-routes.test.ts +4 -3
  419. package/src/runtime/routes/__tests__/conversation-query-routes.test.ts +59 -287
  420. package/src/runtime/routes/__tests__/default-plugin-routes.test.ts +1 -1
  421. package/src/runtime/routes/__tests__/deprecated-route-context.test.ts +15 -62
  422. package/src/runtime/routes/__tests__/inference-profiles-routes.test.ts +105 -12
  423. package/src/runtime/routes/__tests__/ingress-status-routes.test.ts +1 -1
  424. package/src/runtime/routes/__tests__/monitoring-routes.test.ts +1 -1
  425. package/src/runtime/routes/__tests__/plugins-routes.test.ts +47 -211
  426. package/src/runtime/routes/__tests__/route-host-worker-routes.test.ts +1 -1
  427. package/src/runtime/routes/__tests__/schedule-routes-disarm-reason.test.ts +1 -1
  428. package/src/runtime/routes/__tests__/schedule-worker-routes.test.ts +1 -1
  429. package/src/runtime/routes/__tests__/user-route-dispatcher-host.test.ts +1 -1
  430. package/src/runtime/routes/__tests__/user-route-dispatcher.test.ts +1 -1
  431. package/src/runtime/routes/__tests__/user-routes-cli.test.ts +1 -1
  432. package/src/runtime/routes/__tests__/user-routes-notices.test.ts +1 -1
  433. package/src/runtime/routes/__tests__/user-routes-request.test.ts +1 -1
  434. package/src/runtime/routes/app-management-routes.ts +1 -1
  435. package/src/runtime/routes/attachment-routes.ts +1 -1
  436. package/src/runtime/routes/audit-routes.ts +1 -1
  437. package/src/runtime/routes/avatar-routes.ts +3 -10
  438. package/src/runtime/routes/cloud-routes.ts +3 -3
  439. package/src/runtime/routes/content-source-routes.ts +1 -1
  440. package/src/runtime/routes/conversation-query-routes.ts +60 -621
  441. package/src/runtime/routes/conversation-routes.ts +1 -38
  442. package/src/runtime/routes/debug-routes.ts +1 -1
  443. package/src/runtime/routes/deprecated-route-context.ts +5 -61
  444. package/src/runtime/routes/heartbeat-routes.ts +1 -1
  445. package/src/runtime/routes/identity-routes.ts +1 -1
  446. package/src/runtime/routes/index.ts +0 -6
  447. package/src/runtime/routes/inference-profile-session-handler.ts +3 -3
  448. package/src/runtime/routes/inference-profiles-routes.ts +48 -21
  449. package/src/runtime/routes/inference-provider-connection-routes.ts +0 -1
  450. package/src/runtime/routes/llm-call-sites-routes.ts +3 -3
  451. package/src/runtime/routes/log-export/__tests__/installed-inventory.test.ts +1 -1
  452. package/src/runtime/routes/log-export/__tests__/workspace-allowlist-error-contract.test.ts +1 -1
  453. package/src/runtime/routes/log-export/__tests__/workspace-allowlist.test.ts +1 -1
  454. package/src/runtime/routes/log-export/workspace-allowlist.ts +1 -1
  455. package/src/runtime/routes/log-export-routes.ts +17 -15
  456. package/src/runtime/routes/migration-rollback-routes.ts +1 -1
  457. package/src/runtime/routes/migration-routes.ts +2 -3
  458. package/src/runtime/routes/monitoring-routes.ts +2 -2
  459. package/src/runtime/routes/oauth-providers.ts +5 -5
  460. package/src/runtime/routes/plugins-routes.ts +38 -163
  461. package/src/runtime/routes/profiler-routes.ts +1 -1
  462. package/src/runtime/routes/route-host-worker-routes.ts +1 -1
  463. package/src/runtime/routes/sanity-routes.ts +1 -1
  464. package/src/runtime/routes/schedule-routes.ts +1 -1
  465. package/src/runtime/routes/schedule-worker-routes.ts +1 -1
  466. package/src/runtime/routes/settings-routes.ts +1 -1
  467. package/src/runtime/routes/sounds-config-routes.ts +1 -1
  468. package/src/runtime/routes/surface-conversation-resolver.ts +1 -7
  469. package/src/runtime/routes/user-route-dispatcher.ts +1 -3
  470. package/src/runtime/routes/user-route-import.ts +1 -1
  471. package/src/runtime/routes/user-route-resolution.ts +1 -1
  472. package/src/runtime/routes/user-routes-cli.ts +1 -1
  473. package/src/runtime/routes/workspace-commit-routes.ts +1 -1
  474. package/src/runtime/routes/workspace-greetings.ts +1 -1
  475. package/src/runtime/routes/workspace-routes.ts +1 -1
  476. package/src/runtime/routes/workspace-utils.ts +1 -1
  477. package/src/runtime/sync/resource-sync-events.ts +1 -1
  478. package/src/schedule/__tests__/plugin-schedule-declarations.test.ts +1 -1
  479. package/src/schedule/__tests__/plugin-schedule-reconciler.test.ts +1 -1
  480. package/src/schedule/plugin-schedule-availability.ts +1 -1
  481. package/src/schedule/plugin-schedule-declarations.ts +1 -1
  482. package/src/schedule/run-script.ts +1 -1
  483. package/src/schedule/scheduler.ts +1 -11
  484. package/src/schedule/worker-control.ts +1 -1
  485. package/src/schedule/worker.ts +3 -3
  486. package/src/security/oauth2.ts +2 -2
  487. package/src/security/secret-allowlist.ts +1 -1
  488. package/src/signals/cancel.ts +1 -1
  489. package/src/signals/conversation-undo.ts +1 -1
  490. package/src/signals/emit-event.ts +1 -1
  491. package/src/signals/event-stream.ts +1 -1
  492. package/src/signals/user-message.ts +1 -1
  493. package/src/skills/catalog-install.ts +2 -1
  494. package/src/skills/clawhub.ts +1 -1
  495. package/src/skills/cloud-store.ts +1 -1
  496. package/src/skills/path-classifier.ts +1 -1
  497. package/src/skills/skill-history.ts +1 -1
  498. package/src/skills/skillssh-registry.ts +1 -1
  499. package/src/skills/uninstall.ts +1 -1
  500. package/src/skills/workspace-skill-md-signature.ts +1 -1
  501. package/src/subagent/manager.ts +1 -1
  502. package/src/theme/workspace-theme.ts +1 -1
  503. package/src/tools/browser/auth-cache.ts +1 -1
  504. package/src/tools/browser/browser-manager.ts +1 -1
  505. package/src/tools/browser/runtime-check.ts +1 -1
  506. package/src/tools/executor.ts +4 -4
  507. package/src/tools/filesystem/write.ts +1 -1
  508. package/src/tools/permission-checker.ts +2 -51
  509. package/src/tools/run-standalone.ts +1 -1
  510. package/src/tools/skills/format-input-schema.ts +1 -1
  511. package/src/tools/skills/load.ts +1 -1
  512. package/src/tools/skills/scaffold-cloud.ts +0 -32
  513. package/src/tools/terminal/safe-env.ts +1 -2
  514. package/src/tools/terminal/sanitized-bash.ts +1 -1
  515. package/src/tools/terminal/shell.ts +1 -1
  516. package/src/tools/tool-approval-handler.ts +4 -1
  517. package/src/tools/workflows/manage-workflows.ts +2 -2
  518. package/src/tools/workflows/run-workflow.test.ts +1 -1
  519. package/src/tools/workspace-tools/loader.ts +1 -1
  520. package/src/tts/synthesis-stream.ts +2 -2
  521. package/src/usage/attribution.ts +1 -11
  522. package/src/util/browser.ts +1 -1
  523. package/src/util/bun-runtime.ts +2 -1
  524. package/src/util/device-id.ts +1 -1
  525. package/src/util/disk-usage.ts +4 -139
  526. package/src/util/layout.ts +3 -3
  527. package/src/util/logger.ts +1 -1
  528. package/src/util/logs-db-path.ts +1 -1
  529. package/src/util/memory-db-path.ts +1 -1
  530. package/src/util/{platform.ts → os.ts} +5 -30
  531. package/src/util/process-tree.ts +19 -0
  532. package/src/util/sqlite3-runtime.ts +1 -1
  533. package/src/util/telemetry-db-path.ts +1 -1
  534. package/src/watcher/__tests__/engine.test.ts +0 -23
  535. package/src/watcher/engine.ts +0 -7
  536. package/src/windows-compiled-cli.ts +0 -4
  537. package/src/windows-compiled-worker-entry.ts +0 -6
  538. package/src/workflows/leaf-runner.test.ts +1 -1
  539. package/src/workflows/leaf-runner.ts +1 -1
  540. package/src/workflows/library.ts +1 -1
  541. package/src/workspace/adaptive-thinking-repair.ts +5 -24
  542. package/src/workspace/byok-default-profile-ensure.ts +24 -26
  543. package/src/workspace/custom-profile-ensure.ts +2 -2
  544. package/src/workspace/git-service.ts +1 -1
  545. package/src/workspace/hatched-date.ts +1 -1
  546. package/src/workspace/migrations/038-unify-llm-callsite-configs.ts +2 -2
  547. package/src/workspace/migrations/040-seed-latency-callsite-defaults.ts +1 -1
  548. package/src/workspace/migrations/050-seed-main-agent-opus-callsite.ts +1 -1
  549. package/src/workspace/migrations/077-seed-memory-router-callsite.ts +1 -1
  550. package/src/workspace/migrations/registry.ts +0 -4
  551. package/src/workspace/turn-commit.ts +1 -1
  552. package/docs/activation-funnel-telemetry.md +0 -324
  553. package/scripts/bundled-plugin-packages.ts +0 -154
  554. package/scripts/generate-bundled-plugin-packages.ts +0 -29
  555. package/src/__tests__/activation-early-marking.test.ts +0 -114
  556. package/src/__tests__/auth-fallback-events-store.test.ts +0 -99
  557. package/src/__tests__/config-get-vision-flag.test.ts +0 -139
  558. package/src/__tests__/conversation-surfaces-activation-emit.test.ts +0 -400
  559. package/src/__tests__/internal-telemetry-routes.test.ts +0 -213
  560. package/src/__tests__/telemetry-routes.test.ts +0 -182
  561. package/src/__tests__/turn-events-store.test.ts +0 -376
  562. package/src/__tests__/ui-channel-variants.test.ts +0 -53
  563. package/src/avatar/__tests__/avatar-changed-telemetry.test.ts +0 -217
  564. package/src/avatar/avatar-changed-telemetry.ts +0 -128
  565. package/src/calls/__tests__/call-funnel-telemetry.test.ts +0 -204
  566. package/src/cli/commands/telemetry.help.ts +0 -27
  567. package/src/cli/commands/telemetry.ts +0 -83
  568. package/src/cli/lib/__tests__/local-plugin-upgrade.test.ts +0 -251
  569. package/src/cli/lib/__tests__/plugin-catalog-local.test.ts +0 -113
  570. package/src/cli/lib/__tests__/plugin-marketplace.test.ts +0 -384
  571. package/src/cli/lib/__tests__/plugin-pin-history.test.ts +0 -164
  572. package/src/cli/lib/__tests__/plugins-install-offline.test.ts +0 -228
  573. package/src/cli/lib/bundled-marketplace.json +0 -1575
  574. package/src/cli/lib/bundled-plugin-packages.json +0 -827
  575. package/src/cli/lib/bundled-plugin-packages.ts +0 -87
  576. package/src/cli/lib/plugin-catalog-local.ts +0 -94
  577. package/src/cli/lib/plugin-pin-history.ts +0 -276
  578. package/src/cloud/feature-gate.ts +0 -8
  579. package/src/config/__tests__/cloud-rehydration.test.ts +0 -180
  580. package/src/config/cloud-rehydration.ts +0 -35
  581. package/src/daemon/__tests__/auto-profile-router.test.ts +0 -380
  582. package/src/daemon/auto-profile-router.ts +0 -428
  583. package/src/live-voice/__tests__/live-voice-session-telemetry.test.ts +0 -391
  584. package/src/monitoring/__tests__/db-integrity-sample.test.ts +0 -113
  585. package/src/monitoring/__tests__/oom-kill-reporter.test.ts +0 -374
  586. package/src/monitoring/db-integrity-check.ts +0 -163
  587. package/src/monitoring/db-integrity-sample.ts +0 -176
  588. package/src/monitoring/oom-kill-reporter.ts +0 -469
  589. package/src/onboarding/__tests__/onboarding-events-store.test.ts +0 -158
  590. package/src/onboarding/onboarding-events-store.ts +0 -296
  591. package/src/persistence/__tests__/raw-query-telemetry.test.ts +0 -76
  592. package/src/persistence/lifecycle-events-store.test.ts +0 -134
  593. package/src/persistence/lifecycle-events-store.ts +0 -110
  594. package/src/plugins/defaults/memory/__tests__/activation-session-store.test.ts +0 -76
  595. package/src/plugins/defaults/memory/activation-session-store.ts +0 -50
  596. package/src/plugins/defaults/memory/src/__tests__/memory-v3-gate-stats.test.ts +0 -281
  597. package/src/runtime/routes/auto-profile-routes.ts +0 -83
  598. package/src/runtime/routes/internal-telemetry-routes.ts +0 -142
  599. package/src/runtime/routes/telemetry-routes.ts +0 -274
  600. package/src/security/auth-fallback-events-store.ts +0 -57
  601. package/src/telemetry/__tests__/activation-funnel.test.ts +0 -95
  602. package/src/telemetry/__tests__/config-setting-events-store.test.ts +0 -63
  603. package/src/telemetry/__tests__/config-setting-snapshot.test.ts +0 -143
  604. package/src/telemetry/__tests__/flush-checkpoints.test.ts +0 -56
  605. package/src/telemetry/__tests__/live-voice-funnel.test.ts +0 -174
  606. package/src/telemetry/__tests__/outbox-test-harness.ts +0 -85
  607. package/src/telemetry/__tests__/phone-call-funnel.test.ts +0 -72
  608. package/src/telemetry/__tests__/telemetry-event-fixtures.ts +0 -282
  609. package/src/telemetry/__tests__/watchdog-events-store.test.ts +0 -71
  610. package/src/telemetry/activation-funnel.ts +0 -172
  611. package/src/telemetry/config-setting-events-store.ts +0 -40
  612. package/src/telemetry/config-setting-snapshot.ts +0 -170
  613. package/src/telemetry/flush-checkpoints.ts +0 -70
  614. package/src/telemetry/live-voice-funnel.ts +0 -185
  615. package/src/telemetry/memory-corpus-size.test.ts +0 -120
  616. package/src/telemetry/memory-corpus-size.ts +0 -184
  617. package/src/telemetry/memory-tier-reporter.test.ts +0 -195
  618. package/src/telemetry/memory-tier-reporter.ts +0 -130
  619. package/src/telemetry/phone-call-funnel.ts +0 -144
  620. package/src/telemetry/skill-loaded-events-store.test.ts +0 -93
  621. package/src/telemetry/skill-loaded-events-store.ts +0 -39
  622. package/src/telemetry/telemetry-event-sources.test.ts +0 -223
  623. package/src/telemetry/telemetry-event-sources.ts +0 -597
  624. package/src/telemetry/telemetry-events-outbox.test.ts +0 -375
  625. package/src/telemetry/telemetry-events-outbox.ts +0 -237
  626. package/src/telemetry/telemetry-main-db.ts +0 -48
  627. package/src/telemetry/telemetry-wire-source.json +0 -4
  628. package/src/telemetry/telemetry-wire-validation.test.ts +0 -157
  629. package/src/telemetry/telemetry-wire-validation.ts +0 -162
  630. package/src/telemetry/telemetry-wire.generated.ts +0 -483
  631. package/src/telemetry/tool-executed-events-store.test.ts +0 -210
  632. package/src/telemetry/tool-executed-events-store.ts +0 -102
  633. package/src/telemetry/trace-collection-policy.test.ts +0 -28
  634. package/src/telemetry/trace-collection-policy.ts +0 -30
  635. package/src/telemetry/turn-events-store.ts +0 -216
  636. package/src/telemetry/turn-trace-store.test.ts +0 -884
  637. package/src/telemetry/turn-trace-store.ts +0 -399
  638. package/src/telemetry/types.test.ts +0 -38
  639. package/src/telemetry/types.ts +0 -780
  640. package/src/telemetry/usage-telemetry-reporter.test.ts +0 -3445
  641. package/src/telemetry/usage-telemetry-reporter.ts +0 -566
  642. package/src/telemetry/watchdog-direct-emit.test.ts +0 -112
  643. package/src/telemetry/watchdog-direct-emit.ts +0 -104
  644. package/src/telemetry/watchdog-events-store.ts +0 -31
  645. package/src/tools/ui-surface/channel-variants.ts +0 -52
  646. package/src/watcher/__tests__/telemetry.test.ts +0 -178
  647. package/src/watcher/telemetry.ts +0 -93
  648. package/src/workspace/migrations/097-enable-adaptive-thinking-managed-profiles.ts +0 -165
  649. package/src/workspace/migrations/104-recheck-adaptive-thinking-model-implied-anthropic.ts +0 -151
  650. /package/src/{telemetry → persistence}/tool-usage-store.ts +0 -0
  651. /package/src/{telemetry → persistence}/turn-outcome.ts +0 -0
@@ -12,106 +12,8 @@
12
12
  */
13
13
  import { describe, expect, test } from "bun:test";
14
14
 
15
- import type { StallCapture } from "../monitoring/stall-capture.js";
16
- import type { SectionTrailEntry } from "../persistence/slow-sync-log.js";
17
- import type { DaemonActivityGroup } from "./activity-trail.js";
18
-
19
- const {
20
- buildBlockTelemetryDetail,
21
- detailFitsServerCap,
22
- evaluateTick,
23
- startEventLoopWatchdog,
24
- stopEventLoopWatchdog,
25
- } = await import("./event-loop-watchdog.js");
26
-
27
- function captureWith(conversationCount: number): StallCapture {
28
- return {
29
- ts: 1,
30
- daemonPid: 1,
31
- heartbeatAgeMs: 21_000,
32
- kernelStack: "[<0>] do_epoll_wait+0x4a0/0x4e0\n".repeat(12),
33
- processState: "S",
34
- waitState: {
35
- syscall: 232,
36
- epoll: {
37
- fd: 7,
38
- watched: 1,
39
- listeningSockets: 0,
40
- sockets: 0,
41
- pipes: 1,
42
- eventfds: 0,
43
- timerfds: 0,
44
- other: 0,
45
- },
46
- children: [{ pid: 200, comm: "git", state: "R", ageMs: 20_000 }],
47
- threads: Array.from({ length: 8 }, (_, i) => ({
48
- comm: `Bun Pool ${i}`,
49
- state: "S",
50
- wchan: "futex_wait_queue",
51
- count: 1,
52
- })),
53
- },
54
- sample: {
55
- ts: 1,
56
- memory: null,
57
- memoryStat: null,
58
- reclaim: null,
59
- cpu: null,
60
- events: null,
61
- deltas: null,
62
- disk: null,
63
- processes: [
64
- ...Array.from({ length: 6 }, (_, i) => ({
65
- pid: 100 + i,
66
- name: i === 0 ? "memory-worker" : `chrome-${i}`,
67
- cpuPct: 150 - i * 10,
68
- rssMb: 800,
69
- })),
70
- { pid: 1, name: "daemon", cpuPct: 4, rssMb: 900 },
71
- ],
72
- activeConversations: Array.from(
73
- { length: conversationCount },
74
- (_, i) => ({
75
- conversationId: `01a0c9a0-0000-7000-8000-00000000000${i % 10}`,
76
- title:
77
- "A long title drawn from the user's own first message x".repeat(2),
78
- originChannel: "cadet",
79
- originInterface: "web",
80
- processingStartedAt: 1,
81
- }),
82
- ),
83
- },
84
- };
85
- }
86
-
87
- /** The report's maximum of 10 activity groups, longest (a user turn) first. */
88
- const fullActivity: DaemonActivityGroup[] = [
89
- {
90
- kind: "turn",
91
- conversationType: "standard",
92
- callSite: "mainAgent",
93
- turnInterface: "web",
94
- interactive: true,
95
- count: 1,
96
- running: 1,
97
- longestMs: 90_000,
98
- },
99
- ...Array.from({ length: 9 }, (_, i) => ({
100
- kind: "turn" as const,
101
- conversationType: "background" as const,
102
- callSite: "heartbeatAgent" as const,
103
- interactive: false,
104
- count: i + 1,
105
- running: 0,
106
- longestMs: 60_000 - i,
107
- })),
108
- ];
109
-
110
- const trail: SectionTrailEntry[] = Array.from({ length: 16 }, (_, i) => ({
111
- label: "conversation-crud:get-messages",
112
- startedAgoMs: 100_000 + i * 1_000,
113
- endedAgoMs: 99_000 + i * 1_000,
114
- }));
15
+ const { evaluateTick, startEventLoopWatchdog, stopEventLoopWatchdog } =
16
+ await import("./event-loop-watchdog.js");
115
17
 
116
18
  describe("evaluateTick", () => {
117
19
  const INTERVAL = 1_000;
@@ -179,101 +81,3 @@ describe("start/stop lifecycle", () => {
179
81
  expect(() => stopEventLoopWatchdog()).not.toThrow();
180
82
  });
181
83
  });
182
-
183
- describe("buildBlockTelemetryDetail", () => {
184
- test("never sends conversation titles", () => {
185
- // GIVEN a capture whose active conversations carry titles
186
- // WHEN the telemetry detail is built
187
- const detail = buildBlockTelemetryDetail({
188
- thresholdMs: 5_000,
189
- daemonUptimeMs: 60_000,
190
- activity: [],
191
- sectionTrail: [],
192
- stallCapture: captureWith(2),
193
- });
194
- // THEN every title is nulled but the rest of the entry is kept
195
- const conversations = detail.stall_capture!.sample.activeConversations!;
196
- expect(conversations).toHaveLength(2);
197
- expect(conversations.every((c) => c.title === null)).toBe(true);
198
- expect(conversations[0]!.originInterface).toBe("web");
199
- });
200
-
201
- test("does not mutate the caller's capture", () => {
202
- // GIVEN a capture the caller also logs locally
203
- const capture = captureWith(2);
204
- // WHEN the telemetry detail is built
205
- buildBlockTelemetryDetail({
206
- thresholdMs: 5_000,
207
- daemonUptimeMs: 60_000,
208
- activity: [],
209
- sectionTrail: trail,
210
- stallCapture: capture,
211
- });
212
- // THEN the local copy still has its titles
213
- expect(capture.sample.activeConversations![0]!.title).not.toBeNull();
214
- });
215
-
216
- test("a small report is sent untrimmed", () => {
217
- // GIVEN a report well under the byte cap
218
- // WHEN the telemetry detail is built
219
- const detail = buildBlockTelemetryDetail({
220
- thresholdMs: 5_000,
221
- daemonUptimeMs: 60_000,
222
- activity: [],
223
- sectionTrail: trail.slice(0, 2),
224
- stallCapture: captureWith(1),
225
- });
226
- // THEN nothing is trimmed and the wait state survives intact
227
- expect(detail.trimmed).toBeUndefined();
228
- expect(detail.stall_capture!.waitState!.threads).toHaveLength(8);
229
- });
230
-
231
- test("an oversize report is trimmed to fit, keeping the wait state", () => {
232
- // GIVEN a full trail and many active conversations (the heavy-user case)
233
- // WHEN the telemetry detail is built
234
- const detail = buildBlockTelemetryDetail({
235
- thresholdMs: 5_000,
236
- daemonUptimeMs: 60_000,
237
- activity: fullActivity,
238
- sectionTrail: trail,
239
- stallCapture: captureWith(20),
240
- });
241
- // THEN it fits the server cap, records what was trimmed, and still
242
- // carries the attribution the report exists for
243
- expect(detailFitsServerCap(detail)).toBe(true);
244
- expect(detail.trimmed!.length).toBeGreaterThan(0);
245
- expect(detail.stall_capture!.waitState!.epoll!.pipes).toBe(1);
246
- expect(detail.stall_capture!.waitState!.children).toHaveLength(1);
247
- expect(detail.activity.length).toBeGreaterThanOrEqual(4);
248
- expect(
249
- detail.stall_capture!.sample.processes!.length,
250
- ).toBeGreaterThanOrEqual(3);
251
- expect(detail.stall_capture!.sample.processes![0]!.name).toBe(
252
- "memory-worker",
253
- );
254
- // Trimming keeps the daemon for comparison.
255
- expect(
256
- detail.stall_capture!.sample.processes!.some((p) => p.name === "daemon"),
257
- ).toBe(true);
258
- expect(detail.activity[0]).toMatchObject({
259
- kind: "turn",
260
- conversationType: "standard",
261
- });
262
- });
263
- });
264
-
265
- describe("detailFitsServerCap", () => {
266
- test("ignores undefined keys, which serialization drops", () => {
267
- // GIVEN a small detail with an undefined field
268
- // WHEN it is checked against the server cap
269
- // THEN the undefined key does not count as an invalid payload
270
- expect(detailFitsServerCap({ a: 1, b: undefined })).toBe(true);
271
- });
272
-
273
- test("rejects a detail over the server cap", () => {
274
- // GIVEN a detail larger than 4096 serialized bytes
275
- // WHEN it is checked against the server cap
276
- // THEN it does not fit
277
- expect(detailFitsServerCap({ blob: "x".repeat(5_000) })).toBe(false);
278
- });
279
- });
@@ -53,8 +53,6 @@ import {
53
53
  getSectionTrail,
54
54
  type SectionTrailEntry,
55
55
  } from "../persistence/slow-sync-log.js";
56
- import { watchdogTelemetryEventSchema } from "../telemetry/telemetry-wire.generated.js";
57
- import { recordWatchdogEvent } from "../telemetry/watchdog-events-store.js";
58
56
  import { getLogger } from "../util/logger.js";
59
57
  import {
60
58
  type DaemonActivityGroup,
@@ -90,167 +88,6 @@ const REPORT_COOLDOWN_MS = 30_000;
90
88
  */
91
89
  const STALL_CAPTURE_MATCH_GRACE_MS = 5_000;
92
90
 
93
- /**
94
- * Whether ingest accepts `detail`, judged by the generated wire contract so
95
- * the byte measurement matches the server's exactly. The detail is checked
96
- * as serialized (undefined keys dropped, as on the wire). The other event
97
- * fields are fixed valid values; only issues on `detail` count.
98
- */
99
- export function detailFitsServerCap(detail: object): boolean {
100
- const result = watchdogTelemetryEventSchema.safeParse({
101
- type: "watchdog",
102
- daemon_event_id: "size-check",
103
- recorded_at: 0,
104
- check_name: EVENT_LOOP_BLOCKED_CHECK_NAME,
105
- detail: JSON.parse(JSON.stringify(detail)),
106
- });
107
- return (
108
- result.success || !result.error.issues.some((i) => i.path[0] === "detail")
109
- );
110
- }
111
-
112
- type BlockTelemetryDetail = {
113
- threshold_ms: number;
114
- tick_interval_ms: number;
115
- /** Process uptime at report time; small values mean boot work. */
116
- daemon_uptime_ms: number;
117
- /** Work on this process that overlapped the block, grouped by label. */
118
- activity: DaemonActivityGroup[];
119
- section_trail: SectionTrailEntry[];
120
- stall_capture: StallCapture | null;
121
- /** Trim steps applied to fit the byte cap, in order. Absent when none. */
122
- trimmed?: string[];
123
- };
124
-
125
- /**
126
- * Ordered steps that shrink an oversize report, least diagnostic loss first.
127
- * The activity groups, the busiest processes, the newest section-trail
128
- * entries, and the capture's wait state are what attribute a block, so they
129
- * go last.
130
- */
131
- const TRIM_STEPS: Array<{
132
- name: string;
133
- apply: (detail: BlockTelemetryDetail) => void;
134
- }> = [
135
- {
136
- name: "section_trail_8",
137
- apply: (d) => {
138
- d.section_trail = d.section_trail.slice(0, 8);
139
- },
140
- },
141
- {
142
- name: "thread_groups",
143
- apply: (d) => {
144
- if (d.stall_capture?.waitState) {
145
- d.stall_capture.waitState.threads = [];
146
- }
147
- },
148
- },
149
- {
150
- name: "active_conversations",
151
- apply: (d) => {
152
- if (d.stall_capture) {
153
- d.stall_capture.sample.activeConversations = null;
154
- }
155
- },
156
- },
157
- {
158
- name: "memory_stat",
159
- apply: (d) => {
160
- if (d.stall_capture) {
161
- d.stall_capture.sample.memoryStat = null;
162
- }
163
- },
164
- },
165
- {
166
- name: "kernel_stack_512",
167
- apply: (d) => {
168
- if (d.stall_capture?.kernelStack) {
169
- d.stall_capture.kernelStack = d.stall_capture.kernelStack.slice(0, 512);
170
- }
171
- },
172
- },
173
- {
174
- name: "section_trail_3",
175
- apply: (d) => {
176
- d.section_trail = d.section_trail.slice(0, 3);
177
- },
178
- },
179
- {
180
- // Keeps the daemon, which the sampler always lists last, for comparison.
181
- name: "processes_3",
182
- apply: (d) => {
183
- const processes = d.stall_capture?.sample.processes;
184
- if (processes) {
185
- const daemon = processes.find((p) => p.name === "daemon");
186
- const kept = processes.slice(0, 3);
187
- d.stall_capture!.sample.processes =
188
- daemon && !kept.includes(daemon) ? [...kept, daemon] : kept;
189
- }
190
- },
191
- },
192
- {
193
- name: "activity_4",
194
- apply: (d) => {
195
- d.activity = d.activity.slice(0, 4);
196
- },
197
- },
198
- {
199
- // Last resort so the report itself always lands: blockedMs and the
200
- // longest activity groups survive.
201
- name: "stall_capture",
202
- apply: (d) => {
203
- d.stall_capture = null;
204
- d.section_trail = [];
205
- },
206
- },
207
- ];
208
-
209
- /**
210
- * The telemetry `detail` for a block report. Conversation titles are dropped
211
- * (the event is metadata only and titles can carry user content), then trim
212
- * steps apply until the bag fits the server's byte cap. An oversize bag is
213
- * rejected outright, losing the whole report. Pure so the budget
214
- * logic is unit-testable.
215
- */
216
- export function buildBlockTelemetryDetail(input: {
217
- thresholdMs: number;
218
- daemonUptimeMs: number;
219
- activity: DaemonActivityGroup[];
220
- sectionTrail: SectionTrailEntry[];
221
- stallCapture: StallCapture | null;
222
- }): BlockTelemetryDetail {
223
- // Deep copy: the trim steps mutate, and the caller's objects also feed the log.
224
- const stallCapture: StallCapture | null = input.stallCapture
225
- ? structuredClone(input.stallCapture)
226
- : null;
227
- if (stallCapture?.sample.activeConversations) {
228
- stallCapture.sample.activeConversations =
229
- stallCapture.sample.activeConversations.map((conversation) => ({
230
- ...conversation,
231
- title: null,
232
- }));
233
- }
234
- const detail: BlockTelemetryDetail = {
235
- threshold_ms: input.thresholdMs,
236
- tick_interval_ms: TICK_INTERVAL_MS,
237
- daemon_uptime_ms: input.daemonUptimeMs,
238
- activity: [...input.activity],
239
- section_trail: [...input.sectionTrail],
240
- stall_capture: stallCapture,
241
- };
242
-
243
- for (const step of TRIM_STEPS) {
244
- if (detailFitsServerCap(detail)) {
245
- break;
246
- }
247
- step.apply(detail);
248
- // Assigned before the next measurement so the marker counts too.
249
- detail.trimmed = [...(detail.trimmed ?? []), step.name];
250
- }
251
- return detail;
252
- }
253
-
254
91
  let tickTimer: ReturnType<typeof setInterval> | null = null;
255
92
  let lastTickAt = 0;
256
93
  let lastReportAt = Number.NEGATIVE_INFINITY;
@@ -275,7 +112,6 @@ export function evaluateTick(
275
112
  * this exact string, so it is the primary group-by dimension downstream —
276
113
  * keep it stable.
277
114
  */
278
- export const EVENT_LOOP_BLOCKED_CHECK_NAME = "event_loop_blocked";
279
115
 
280
116
  async function reportBlock(
281
117
  blockedMs: number,
@@ -322,27 +158,6 @@ async function reportBlock(
322
158
  },
323
159
  "event loop blocked",
324
160
  );
325
- // Persist a `watchdog` telemetry event so the cloud can surface
326
- // event-loop blocking in the infrastructure admin chart. `recordWatchdogEvent`
327
- // no-ops when usage-data collection is disabled (the event is dropped to
328
- // honor the opt-out), so the watchdog runs unconditionally without leaking
329
- // health data for opted-out owners. Never let a telemetry failure escape
330
- // the timer callback.
331
- try {
332
- recordWatchdogEvent({
333
- checkName: EVENT_LOOP_BLOCKED_CHECK_NAME,
334
- value: blockedMs,
335
- detail: buildBlockTelemetryDetail({
336
- thresholdMs,
337
- daemonUptimeMs: Math.round(process.uptime() * 1000),
338
- activity,
339
- sectionTrail,
340
- stallCapture,
341
- }),
342
- });
343
- } catch {
344
- // Never let a telemetry failure escape the timer callback.
345
- }
346
161
  }
347
162
 
348
163
  /**
@@ -73,8 +73,8 @@ import {
73
73
  registerPluginTools,
74
74
  unregisterPluginTools,
75
75
  } from "../tools/registry.js";
76
+ import { getWorkspaceDir, getWorkspacePluginsDir } from "../util/layout.js";
76
77
  import { getLogger } from "../util/logger.js";
77
- import { getWorkspaceDir, getWorkspacePluginsDir } from "../util/platform.js";
78
78
  import { APP_VERSION } from "../version.js";
79
79
 
80
80
  const log = getLogger("plugins-bootstrap");
@@ -1,6 +1,6 @@
1
1
  import { existsSync } from "node:fs";
2
2
 
3
- import { getWorkspacePromptPath } from "../util/platform.js";
3
+ import { getWorkspacePromptPath } from "../util/layout.js";
4
4
 
5
5
  type Tone = "grounded" | "warm" | "energetic" | "poetic";
6
6
 
@@ -81,7 +81,7 @@ import {
81
81
  resolveSkillSource,
82
82
  searchSkillsRegistry,
83
83
  } from "../../skills/skillssh-registry.js";
84
- import { getWorkspaceSkillsDir } from "../../util/platform.js";
84
+ import { getWorkspaceSkillsDir } from "../../util/layout.js";
85
85
  import { safeStringSlice } from "../../util/unicode.js";
86
86
  import { getConfigWatcher } from "../config-watcher.js";
87
87
  import type {
@@ -39,7 +39,7 @@
39
39
  * specific app.
40
40
  *
41
41
  * **No step cap.** Unlike {@link HostCuProxy} which enforces a per-session
42
- * step ceiling via `loadConfig().maxStepsPerSession`, app-control sessions
42
+ * step ceiling via `getConfig().maxStepsPerSession`, app-control sessions
43
43
  * are not capped. App-control flows are typically narrower (single-app,
44
44
  * shorter horizons) and the loop guard plus user oversight are the
45
45
  * intended safeguards.
@@ -15,7 +15,7 @@
15
15
  */
16
16
  import { v4 as uuid } from "uuid";
17
17
 
18
- import { loadConfig } from "../config/loader.js";
18
+ import { getConfig } from "../config/loader.js";
19
19
  import { escapeAxTreeContent } from "../context/outbound-sanitize.js";
20
20
  import type { ContentBlock } from "../providers/types.js";
21
21
  import {
@@ -256,7 +256,7 @@ export class HostCuProxy {
256
256
  }
257
257
  >();
258
258
 
259
- constructor(maxSteps = loadConfig().maxStepsPerSession) {
259
+ constructor(maxSteps = getConfig().maxStepsPerSession) {
260
260
  this._maxSteps = maxSteps;
261
261
  }
262
262
 
@@ -3,7 +3,7 @@ import { join } from "node:path";
3
3
 
4
4
  import { resolveGuardianPersonaStrict } from "../prompts/persona-resolver.js";
5
5
  import { DECLINED_BY_USER_SENTINEL } from "../prompts/user-reference.js";
6
- import { getWorkspacePromptPath } from "../util/platform.js";
6
+ import { getWorkspacePromptPath } from "../util/layout.js";
7
7
 
8
8
  /** Read the assistant's name from IDENTITY.md for personalized responses. */
9
9
  export function getAssistantName(): string | null {
@@ -11,8 +11,8 @@ import { syncWorkspaceIdentityToPlatform } from "../cloud/sync-identity.js";
11
11
  import { initFeatureFlagOverrides } from "../config/assistant-feature-flags.js";
12
12
  import { setIngressPublicBaseUrl, validateEnv } from "../config/env.js";
13
13
  import {
14
+ getConfig,
14
15
  hasPendingDefaultWorkspaceConfig,
15
- loadConfig,
16
16
  mergeDefaultWorkspaceConfig,
17
17
  } from "../config/loader.js";
18
18
  import { seedInferenceProfiles } from "../config/seed-inference-profiles.js";
@@ -56,14 +56,13 @@ import { reconcilePluginSchedules } from "../schedule/plugin-schedule-reconciler
56
56
  import { recoverStaleSchedules } from "../schedule/schedule-recovery.js";
57
57
  import { startScheduler } from "../schedule/scheduler.js";
58
58
  import { getSubagentManager } from "../subagent/index.js";
59
- import { startUsageTelemetryReporter } from "../telemetry/usage-telemetry-reporter.js";
60
- import { getLogger, initLogger } from "../util/logger.js";
61
- import { DAEMON_OOM_SCORE_ADJ, setOomScoreAdj } from "../util/oom-priority.js";
62
59
  import {
63
60
  ensureDataDir,
64
61
  getDotEnvPath,
65
62
  getWorkspaceDir,
66
- } from "../util/platform.js";
63
+ } from "../util/layout.js";
64
+ import { getLogger, initLogger } from "../util/logger.js";
65
+ import { DAEMON_OOM_SCORE_ADJ, setOomScoreAdj } from "../util/oom-priority.js";
67
66
  import { APP_VERSION } from "../version.js";
68
67
  import { drainOrphanedWatchTimelineEntries } from "../watch/watch-timeline.js";
69
68
  import { getWorkflowRunManager } from "../workflows/run-manager.js";
@@ -545,7 +544,7 @@ export async function runDaemon(): Promise<void> {
545
544
 
546
545
  // Merge CLI-provided default config (from CADET_DEFAULT_WORKSPACE_CONFIG_PATH)
547
546
  // into the workspace config file before profile seeding and the first
548
- // loadConfig() call so onboarding/platform preferences are visible to the
547
+ // getConfig() call so onboarding/platform preferences are visible to the
549
548
  // seeder and persisted alongside schema defaults.
550
549
  const defaultConfigMerge = mergeDefaultWorkspaceConfig();
551
550
 
@@ -600,7 +599,7 @@ export async function runDaemon(): Promise<void> {
600
599
  }
601
600
 
602
601
  // Runs on every boot, after the overlay merge and profile seeding and
603
- // before the first loadConfig(), so no resolution ever sees a partial
602
+ // before the first getConfig(), so no resolution ever sees a partial
604
603
  // custom profile. See workspace/custom-profile-ensure.ts for why this is
605
604
  // an ensure pass rather than a workspace migration.
606
605
  try {
@@ -614,7 +613,7 @@ export async function runDaemon(): Promise<void> {
614
613
  }
615
614
 
616
615
  log.info("Daemon startup: loading config");
617
- const config = loadConfig();
616
+ const config = getConfig();
618
617
 
619
618
  // Select conversations left mid-turn by the previous shutdown for auto-resume
620
619
  // when `conversations.resumeProcessingOnStartup` is enabled. Their
@@ -678,12 +677,10 @@ export async function runDaemon(): Promise<void> {
678
677
  });
679
678
  }
680
679
 
681
- // Refresh the consent cache regardless of dev mode so record-time telemetry
682
- // writes (which drop on a confirmed opt-out) work in dev too. The usage
683
- // telemetry reporter re-checks share_analytics on every flush, so dev still
684
- // never sends telemetry to the cloud. Fire-and-forget: startConsentRefresh()
685
- // runs an immediate non-blocking refresh, so the startup hot path is never
686
- // blocked.
680
+ // Refresh the consent cache (gates crash-diagnostics sharing) regardless of
681
+ // dev mode so the cache is warm in dev too. Fire-and-forget:
682
+ // startConsentRefresh() runs an immediate non-blocking refresh, so the
683
+ // startup hot path is never blocked.
687
684
  startConsentRefresh();
688
685
 
689
686
  // Open the assistant's CES RPC client (handshake + reconnect wiring).
@@ -732,7 +729,6 @@ export async function runDaemon(): Promise<void> {
732
729
  log.warn({ err }, "Guardian principal cache warm failed — continuing"),
733
730
  );
734
731
 
735
- startUsageTelemetryReporter();
736
732
  startDiskPressureGuardForLifecycle();
737
733
  startResourcePressureGuardForLifecycle();
738
734
  startOrphanReaper();
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env bun
2
2
  process.title = "cadet-daemon";
3
3
 
4
+ import { getDataDir, getWorkspaceDir } from "../util/layout.js";
4
5
  import { getLogger } from "../util/logger.js";
5
- import { getDataDir, getWorkspaceDir } from "../util/platform.js";
6
6
  import { runDaemon } from "./lifecycle.js";
7
7
  import { emitDaemonError } from "./startup-error.js";
8
8
 
@@ -1,6 +1,6 @@
1
1
  import { existsSync, readFileSync } from "node:fs";
2
2
 
3
- import { getWorkspacePromptPath } from "../util/platform.js";
3
+ import { getWorkspacePromptPath } from "../util/layout.js";
4
4
  import { stripCommentLines } from "../util/strip-comment-lines.js";
5
5
 
6
6
  /**
@@ -29,13 +29,13 @@ import {
29
29
  setConversationOriginInterfaceIfUnset,
30
30
  } from "../persistence/conversation-crud.js";
31
31
  import { updateMetaFile } from "../persistence/conversation-disk-view.js";
32
- import { broadcastMessage } from "../runtime/assistant-event-hub.js";
33
- import { DAEMON_INTERNAL_ASSISTANT_ID } from "../runtime/assistant-scope.js";
34
- import { publishConversationMessagesChanged } from "../runtime/sync/resource-sync-events.js";
35
32
  import {
36
33
  readTurnFailure,
37
34
  type TurnFailure,
38
- } from "../telemetry/turn-outcome.js";
35
+ } from "../persistence/turn-outcome.js";
36
+ import { broadcastMessage } from "../runtime/assistant-event-hub.js";
37
+ import { DAEMON_INTERNAL_ASSISTANT_ID } from "../runtime/assistant-scope.js";
38
+ import { publishConversationMessagesChanged } from "../runtime/sync/resource-sync-events.js";
39
39
  import { getLogger } from "../util/logger.js";
40
40
  import type { Conversation } from "./conversation.js";
41
41
  import {
@@ -32,12 +32,12 @@ import {
32
32
  getProfilerMode,
33
33
  getProfilerRunId,
34
34
  } from "../config/env-registry.js";
35
- import { getLogger } from "../util/logger.js";
36
35
  import {
37
36
  getProfilerRootDir,
38
37
  getProfilerRunDir,
39
38
  getProfilerRunsDir,
40
- } from "../util/platform.js";
39
+ } from "../util/layout.js";
40
+ import { getLogger } from "../util/logger.js";
41
41
 
42
42
  const log = getLogger("profiler-run-store");
43
43
 
@@ -1,4 +1,4 @@
1
- import { rehydrateCloudCredentials } from "../config/cloud-rehydration.js";
1
+ import { ensureCloudIdentityIds } from "../config/cloud-identity.js";
2
2
  import { maybeDefaultSpeechToCloud } from "../config/cloud-speech-defaults.js";
3
3
  import type { AssistantConfig } from "../config/types.js";
4
4
  import { getMcpServerManager } from "../mcp/manager.js";
@@ -32,7 +32,7 @@ export async function initializeProvidersAndTools(
32
32
  // Rehydrate the cloud base URL and IDs from the credential store so
33
33
  // cloud proxy activation survives assistant restarts. The in-memory
34
34
  // overrides are normally only set by the secret-routes handlers at runtime.
35
- await rehydrateCloudCredentials();
35
+ await ensureCloudIdentityIds();
36
36
 
37
37
  // Speech defaulting normally fires when the cloud credentials land
38
38
  // (secret-routes); evaluating it once per boot also covers assistants whose
@@ -20,7 +20,6 @@ import { stopRouteHost } from "../routes/control.js";
20
20
  import { stopRuntimeHttpServer } from "../runtime/http-server.js";
21
21
  import { stopScheduler } from "../schedule/scheduler.js";
22
22
  import { getSubagentManager } from "../subagent/index.js";
23
- import { stopUsageTelemetryReporter } from "../telemetry/usage-telemetry-reporter.js";
24
23
  import { browserManager } from "../tools/browser/browser-manager.js";
25
24
  import { getLogger } from "../util/logger.js";
26
25
  import { APP_VERSION } from "../version.js";
@@ -152,15 +151,6 @@ async function shutdown(): Promise<void> {
152
151
  log.warn({ err }, "Enrichment service shutdown failed (non-fatal)");
153
152
  }
154
153
 
155
- try {
156
- const timeout = new Promise<void>((_, reject) =>
157
- setTimeout(() => reject(new Error("Telemetry flush timed out")), 3_000),
158
- );
159
- await Promise.race([stopUsageTelemetryReporter(), timeout]);
160
- } catch (err) {
161
- log.warn({ err }, "Telemetry reporter shutdown failed (non-fatal)");
162
- }
163
-
164
154
  await stopRuntimeHttpServer();
165
155
  await browserManager.closeAllPages();
166
156
  stopScheduler();