@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
@@ -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();