@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
@@ -1,6 +1,5 @@
1
1
  import { afterEach, beforeEach, describe, expect, mock, test } from "bun:test";
2
2
 
3
- import { setConfig } from "../__tests__/helpers/set-config.js";
4
3
  import type { OwnerConsent } from "./client.js";
5
4
 
6
5
  // ---------------------------------------------------------------------------
@@ -31,20 +30,16 @@ mock.module("./client.js", () => ({
31
30
  // ---------------------------------------------------------------------------
32
31
 
33
32
  import {
34
- __setCachedShareAnalyticsForTest,
35
33
  __setCachedShareDiagnosticsForTest,
36
- __setCachedShareDiagnosticsVersionForTest,
37
34
  getCachedShareDiagnostics,
38
- getCachedShareDiagnosticsVersion,
39
- getRawShareAnalytics,
40
35
  refreshConsentCache,
41
36
  startConsentRefresh,
42
37
  stopConsentRefresh,
43
38
  } from "./consent-cache.js";
44
39
 
45
40
  /**
46
- * Build a mock owner consent. Fields default to `false` so existing
47
- * share_analytics-focused cases don't have to spell them out.
41
+ * Build a mock owner consent. Fields default to `false` so diagnostics-only
42
+ * cases don't have to spell them out.
48
43
  */
49
44
  function makeConsent(overrides: Partial<OwnerConsent> = {}): OwnerConsent {
50
45
  return {
@@ -66,131 +61,71 @@ describe("consent-cache", () => {
66
61
  beforeEach(() => {
67
62
  mockClient = null;
68
63
  createCallCount = 0;
69
- // Legacy fail-closed opt-out marker read via getConfigReadOnly(). Default
70
- // off so existing behavior is unchanged.
71
- setConfig("legacyTelemetryOptOut", false);
72
64
  // Boot state: no confirmed consent yet.
73
- __setCachedShareAnalyticsForTest("unknown");
74
65
  __setCachedShareDiagnosticsForTest("unknown");
75
- __setCachedShareDiagnosticsVersionForTest("");
76
66
  });
77
67
 
78
68
  afterEach(async () => {
79
69
  await stopConsentRefresh();
80
70
  });
81
71
 
82
- test("boot state is unknown", () => {
83
- expect(getRawShareAnalytics()).toBe("unknown");
84
- });
85
-
86
- test("no platform client available → unknown", async () => {
72
+ test("no cloud client available → diagnostics stay fail-closed", async () => {
87
73
  mockClient = null;
88
74
  await refreshConsentCache();
89
- expect(getRawShareAnalytics()).toBe("unknown");
75
+ expect(getCachedShareDiagnostics()).toBe(false);
90
76
  });
91
77
 
92
- test("platform features disabled → confirmed false, not unknown", async () => {
93
- // A config-level platform opt-out is permanent, not a cold cache: no
94
- // flush will ever drain the outbox, so record-time gates must stay
95
- // closed (confirmed false) instead of accumulating rows forever.
96
- __setCachedShareAnalyticsForTest(true);
78
+ test("cloud features disabled → diagnostics confirmed false, not unknown", async () => {
79
+ __setCachedShareDiagnosticsForTest("unknown");
97
80
  process.env.CADET_DISABLE_CLOUD = "1";
98
81
  try {
99
82
  await refreshConsentCache();
100
83
  } finally {
101
84
  delete process.env.CADET_DISABLE_CLOUD;
102
85
  }
103
- expect(getRawShareAnalytics()).toBe(false);
104
86
  expect(getCachedShareDiagnostics()).toBe(false);
105
- expect(getCachedShareDiagnosticsVersion()).toBe("");
106
87
  });
107
88
 
108
- test("becomes true after a successful fetch reporting shareAnalytics: true", async () => {
109
- mockClient = makeClient(makeConsent({ shareAnalytics: true }));
89
+ test("becomes true after a successful fetch reporting shareDiagnostics: true", async () => {
90
+ mockClient = makeClient(makeConsent({ shareDiagnostics: true }));
110
91
  await refreshConsentCache();
111
- expect(getRawShareAnalytics()).toBe(true);
92
+ expect(getCachedShareDiagnostics()).toBe(true);
112
93
  });
113
94
 
114
95
  test("a null fetch keeps the last known value", async () => {
115
- mockClient = makeClient(makeConsent({ shareAnalytics: true }));
96
+ mockClient = makeClient(makeConsent({ shareDiagnostics: true }));
116
97
  await refreshConsentCache();
117
- expect(getRawShareAnalytics()).toBe(true);
98
+ expect(getCachedShareDiagnostics()).toBe(true);
118
99
 
119
100
  // Transient failure: consent endpoint returns null.
120
101
  mockClient = makeClient(null);
121
102
  await refreshConsentCache();
122
- expect(getRawShareAnalytics()).toBe(true);
123
- });
124
-
125
- test("a null fetch keeps a confirmed opt-out", async () => {
126
- mockClient = makeClient(makeConsent({ shareAnalytics: false }));
127
- await refreshConsentCache();
128
- expect(getRawShareAnalytics()).toBe(false);
129
-
130
- mockClient = makeClient(null);
131
- await refreshConsentCache();
132
- expect(getRawShareAnalytics()).toBe(false);
133
- });
134
-
135
- test("a null fetch keeps the boot unknown state", async () => {
136
- mockClient = makeClient(null);
137
- await refreshConsentCache();
138
- expect(getRawShareAnalytics()).toBe("unknown");
139
- expect(getCachedShareDiagnostics()).toBe(false);
103
+ expect(getCachedShareDiagnostics()).toBe(true);
140
104
  });
141
105
 
142
- test("a missing client demotes a prior opt-in to unknown", async () => {
143
- __setCachedShareAnalyticsForTest(true);
106
+ test("a missing client demotes a prior diagnostics opt-in to fail-closed", async () => {
107
+ __setCachedShareDiagnosticsForTest(true);
144
108
  mockClient = null;
145
109
  await refreshConsentCache();
146
- expect(getRawShareAnalytics()).toBe("unknown");
147
- });
148
-
149
- test("a client without a resolvable assistant identity demotes to unknown", async () => {
150
- __setCachedShareAnalyticsForTest(true);
151
- // Identity cleared mid-session (e.g. assistantId emptied while base URL +
152
- // API key persist). getOwnerConsent must not be relied upon to preserve the
153
- // prior opt-in here — losing the owner mapping is not an opt-out, but the
154
- // stale opt-in must not keep riding either.
155
- mockClient = makeClient(makeConsent({ shareAnalytics: true }), "");
156
- await refreshConsentCache();
157
- expect(getRawShareAnalytics()).toBe("unknown");
158
- });
159
-
160
- test("legacy opt-out marker is honored at boot, before any refresh", () => {
161
- // The marker is read live from config: a workspace carrying
162
- // legacyTelemetryOptOut=true must gate recording in the window between
163
- // daemon start and the first consent refresh (unknown-consent recording
164
- // would otherwise leak events in that window).
165
- setConfig("legacyTelemetryOptOut", true);
166
- expect(getRawShareAnalytics()).toBe(false);
167
- });
168
-
169
- test("legacy opt-out marker keeps analytics off despite platform opt-in", async () => {
170
- setConfig("legacyTelemetryOptOut", true);
171
- mockClient = makeClient(makeConsent({ shareAnalytics: true }));
172
- await refreshConsentCache();
173
- // Platform reports opt-in, but the fail-closed marker forces off. The raw
174
- // accessor folds the marker into a confirmed false, not an unknown.
175
- expect(getRawShareAnalytics()).toBe(false);
110
+ expect(getCachedShareDiagnostics()).toBe(false);
176
111
  });
177
112
 
178
- test("a fetch reporting shareAnalytics: false turns the cache off", async () => {
179
- __setCachedShareAnalyticsForTest(true);
180
- mockClient = makeClient(makeConsent({ shareDiagnostics: true }));
113
+ test("a client without a resolvable assistant identity demotes diagnostics", async () => {
114
+ __setCachedShareDiagnosticsForTest(true);
115
+ mockClient = makeClient(makeConsent({ shareDiagnostics: true }), "");
181
116
  await refreshConsentCache();
182
- expect(getRawShareAnalytics()).toBe(false);
117
+ expect(getCachedShareDiagnostics()).toBe(false);
183
118
  });
184
119
 
185
120
  test("startConsentRefresh is idempotent and runs an immediate refresh", async () => {
186
- mockClient = makeClient(makeConsent({ shareAnalytics: true }));
121
+ mockClient = makeClient(makeConsent({ shareDiagnostics: true }));
187
122
 
188
123
  startConsentRefresh();
189
124
  startConsentRefresh(); // no-op: timer already running
190
125
  // Let the fire-and-forget immediate refresh settle.
191
126
  await new Promise((resolve) => setTimeout(resolve, 0));
192
127
 
193
- expect(getRawShareAnalytics()).toBe(true);
128
+ expect(getCachedShareDiagnostics()).toBe(true);
194
129
  // One immediate refresh from the first call; the second is a no-op.
195
130
  expect(createCallCount).toBe(1);
196
131
  });
@@ -199,123 +134,9 @@ describe("consent-cache", () => {
199
134
  startConsentRefresh();
200
135
  await stopConsentRefresh();
201
136
  // A fresh start after stop performs another immediate refresh.
202
- mockClient = makeClient(makeConsent({ shareAnalytics: true }));
137
+ mockClient = makeClient(makeConsent({ shareDiagnostics: true }));
203
138
  startConsentRefresh();
204
139
  await new Promise((resolve) => setTimeout(resolve, 0));
205
- expect(getRawShareAnalytics()).toBe(true);
206
- });
207
-
208
- // share_diagnostics tracks the same refresh as share_analytics; the
209
- // client's diagnostics consent check re-reads it per report so a revocation is
210
- // honored within a cycle.
211
- test("diagnostics reads false at boot (unknown collapses to false)", () => {
212
- expect(getCachedShareDiagnostics()).toBe(false);
213
- });
214
-
215
- test("diagnostics becomes true after a fetch reporting shareDiagnostics: true", async () => {
216
- mockClient = makeClient(makeConsent({ shareDiagnostics: true }));
217
- await refreshConsentCache();
218
140
  expect(getCachedShareDiagnostics()).toBe(true);
219
141
  });
220
-
221
- test("a later fetch reporting shareDiagnostics: false honors the revocation", async () => {
222
- mockClient = makeClient(makeConsent({ shareDiagnostics: true }));
223
- await refreshConsentCache();
224
- expect(getCachedShareDiagnostics()).toBe(true);
225
-
226
- mockClient = makeClient(makeConsent({ shareDiagnostics: false }));
227
- await refreshConsentCache();
228
- expect(getCachedShareDiagnostics()).toBe(false);
229
- });
230
-
231
- test("a null diagnostics fetch keeps the last known value", async () => {
232
- mockClient = makeClient(makeConsent({ shareDiagnostics: true }));
233
- await refreshConsentCache();
234
- expect(getCachedShareDiagnostics()).toBe(true);
235
-
236
- mockClient = makeClient(null);
237
- await refreshConsentCache();
238
- expect(getCachedShareDiagnostics()).toBe(true);
239
- });
240
-
241
- test("a missing client demotes a prior diagnostics opt-in", async () => {
242
- __setCachedShareDiagnosticsForTest(true);
243
- mockClient = null;
244
- await refreshConsentCache();
245
- expect(getCachedShareDiagnostics()).toBe(false);
246
- });
247
-
248
- test("a client without a resolvable assistant identity demotes diagnostics", async () => {
249
- __setCachedShareDiagnosticsForTest(true);
250
- mockClient = makeClient(makeConsent({ shareDiagnostics: true }), "");
251
- await refreshConsentCache();
252
- expect(getCachedShareDiagnostics()).toBe(false);
253
- });
254
-
255
- test("caches the accepted diagnostics-consent version from a successful fetch", async () => {
256
- mockClient = makeClient(
257
- makeConsent({
258
- shareDiagnostics: true,
259
- shareDiagnosticsAcceptedVersion: "2026-06-18",
260
- }),
261
- );
262
- await refreshConsentCache();
263
- expect(getCachedShareDiagnosticsVersion()).toBe("2026-06-18");
264
- });
265
-
266
- test("a missing client clears a prior cached diagnostics version", async () => {
267
- __setCachedShareDiagnosticsVersionForTest("2026-06-18");
268
- mockClient = null;
269
- await refreshConsentCache();
270
- expect(getCachedShareDiagnosticsVersion()).toBe("");
271
- });
272
-
273
- test("a client without a resolvable assistant identity clears the diagnostics version", async () => {
274
- __setCachedShareDiagnosticsVersionForTest("2026-06-18");
275
- mockClient = makeClient(
276
- makeConsent({
277
- shareDiagnostics: true,
278
- shareDiagnosticsAcceptedVersion: "2026-06-18",
279
- }),
280
- "",
281
- );
282
- await refreshConsentCache();
283
- expect(getCachedShareDiagnosticsVersion()).toBe("");
284
- });
285
-
286
- test("a null fetch keeps the last known diagnostics version", async () => {
287
- mockClient = makeClient(
288
- makeConsent({
289
- shareDiagnostics: true,
290
- shareDiagnosticsAcceptedVersion: "2026-06-18",
291
- }),
292
- );
293
- await refreshConsentCache();
294
- expect(getCachedShareDiagnosticsVersion()).toBe("2026-06-18");
295
-
296
- mockClient = makeClient(null);
297
- await refreshConsentCache();
298
- expect(getCachedShareDiagnosticsVersion()).toBe("2026-06-18");
299
- });
300
-
301
- test("diagnostics accessor collapses unknown to false; raw analytics exposes the tri-state", async () => {
302
- // Refresh once so the module's legacy opt-out marker reflects the
303
- // beforeEach config (the marker is only re-read during a refresh).
304
- mockClient = null;
305
- await refreshConsentCache();
306
-
307
- for (const state of [true, false, "unknown"] as const) {
308
- __setCachedShareAnalyticsForTest(state);
309
- __setCachedShareDiagnosticsForTest(state);
310
- expect(getRawShareAnalytics()).toBe(state);
311
- expect(getCachedShareDiagnostics()).toBe(state === true);
312
- }
313
- });
314
-
315
- test("legacy opt-out marker folds the raw analytics state to false", async () => {
316
- setConfig("legacyTelemetryOptOut", true);
317
- mockClient = null;
318
- await refreshConsentCache();
319
- expect(getRawShareAnalytics()).toBe(false);
320
- });
321
142
  });
@@ -1,38 +1,27 @@
1
1
  /**
2
- * In-memory cache of the cloud owner's telemetry consent.
2
+ * In-memory cache of the cloud owner's diagnostics consent.
3
3
  *
4
- * Three values are cached, all refreshed from the same owner-consent fetch:
5
- * - `share_analytics`: gates usage telemetry collection.
6
- * - `share_diagnostics`: gates crash diagnostics (read by the client's
7
- * client diagnostics reporting),
8
- * and composes the per-turn trace-collection gate alongside the accepted
9
- * consent version.
10
- * - `share_diagnostics_accepted_version`: the consent version the owner
11
- * accepted; the disclosing-version half of the trace-collection gate (see
12
- * telemetry/trace-collection-policy.ts).
4
+ * One value is cached from the owner-consent fetch:
5
+ * - `share_diagnostics`: gates crash diagnostics (read by the client
6
+ * diagnostics reporting).
13
7
  *
14
- * Hot-path gates (record-time telemetry writes, the client diagnostics
15
- * consent check) need a
16
- * synchronous, I/O-free read, so this module owns the values and refreshes them
17
- * periodically in the background. Consent is opt-out — an owner who never made
18
- * an explicit choice reports as consented (the client maps a never-chose wire
19
- * value to `true`).
8
+ * Hot-path gates (the client diagnostics consent check) need a synchronous,
9
+ * I/O-free read, so this module owns the value and refreshes it periodically
10
+ * in the background. Consent is opt-out — an owner who never made an explicit
11
+ * choice reports as consented (the client maps a never-chose wire value to
12
+ * `true`).
20
13
  *
21
- * The consent values are tri-state (`ConsentState`): `true`/`false` are
22
- * confirmed states from a successful platform fetch; `"unknown"` means no
23
- * confirmed state exists — boot before the first refresh, no platform session,
24
- * or no resolvable owner identity. A transient fetch failure keeps the
25
- * previous value so a known opt-in is not flipped mid-session. Analytics
26
- * exposes only the raw tri-state accessor (gates drop solely on a confirmed
27
- * opt-out); the diagnostics boolean accessors collapse `"unknown"` to `false`
28
- * — diagnostics gates are deliberately fail-closed, so no raw diagnostics
29
- * accessor exists.
14
+ * The cached value is tri-state: `true`/`false` are confirmed states from a
15
+ * successful cloud fetch; `"unknown"` means no confirmed state exists — boot
16
+ * before the first refresh, no cloud session, or no resolvable owner
17
+ * identity. A transient fetch failure keeps the previous value so a known
18
+ * opt-in is not flipped mid-session. The diagnostics accessor collapses
19
+ * `"unknown"` to `false` — diagnostics gates are deliberately fail-closed, so
20
+ * no raw diagnostics accessor exists.
30
21
  */
31
22
 
32
- import { getConfigReadOnly } from "../config/loader.js";
33
23
  import { getLogger } from "../util/logger.js";
34
24
  import { CadetCloudClient } from "./client.js";
35
- import { areCloudFeaturesEnabled } from "./feature-gate.js";
36
25
 
37
26
  const log = getLogger("consent-cache");
38
27
 
@@ -41,39 +30,9 @@ const REFRESH_INTERVAL_MS = 5 * 60_000; // refresh consent every 5 min
41
30
  /** Cached consent value: a confirmed boolean, or `"unknown"` when no confirmed state exists. */
42
31
  export type ConsentState = boolean | "unknown";
43
32
 
44
- let cachedShareAnalytics: ConsentState = "unknown"; // no confirmed state until first success
45
33
  let cachedShareDiagnostics: ConsentState = "unknown"; // no confirmed state until first success
46
- let cachedShareDiagnosticsVersion = ""; // "" fails the trace disclosure gate
47
- // Fail-closed marker for a workspace that locally opted out of usage data
48
- // before telemetry moved to platform `share_analytics` consent (migration 106).
49
- // While set, telemetry stays off regardless of platform consent. Cleared by a
50
- // future cross-repo reconciliation once the cloud exposes an explicit
51
- // re-consent signal; not auto-cleared here. Read live from config (an
52
- // in-memory cached read, safe on the hot path): a boot-time default would
53
- // leave the record-time gates open between daemon start and the first
54
- // consent refresh, exactly the window unknown-consent recording now keeps
55
- // events flowing in.
56
- function isLegacyOptedOut(): boolean {
57
- try {
58
- return getConfigReadOnly().legacyTelemetryOptOut === true;
59
- } catch {
60
- // Config not yet loaded — no marker to honor yet.
61
- return false;
62
- }
63
- }
64
34
  let refreshTimer: ReturnType<typeof setInterval> | null = null;
65
35
 
66
- /**
67
- * Raw tri-state `share_analytics` consent — the ONLY analytics accessor:
68
- * every gate distinguishes a confirmed opt-out (`false`, the only state that
69
- * drops or purges) from a not-yet-known one. The legacy fail-closed opt-out
70
- * marker folds into `false` — a workspace-level opt-out is a confirmed
71
- * opt-out, not an unknown. Never does I/O; hot-path safe.
72
- */
73
- export function getRawShareAnalytics(): ConsentState {
74
- return isLegacyOptedOut() ? false : cachedShareAnalytics;
75
- }
76
-
77
36
  /**
78
37
  * Synchronous hot-path accessor for the `share_diagnostics` consent (read
79
38
  * by the client's diagnostics consent check). Never does I/O; returns `false` unless a successful
@@ -85,15 +44,6 @@ export function getCachedShareDiagnostics(): boolean {
85
44
  return cachedShareDiagnostics === true;
86
45
  }
87
46
 
88
- /**
89
- * Synchronous hot-path accessor for the owner's accepted diagnostics-consent
90
- * version ("YYYY-MM-DD", or "" until a successful refresh / if never accepted).
91
- * The disclosing-version half of the per-turn trace-collection gate.
92
- */
93
- export function getCachedShareDiagnosticsVersion(): string {
94
- return cachedShareDiagnosticsVersion;
95
- }
96
-
97
47
  /**
98
48
  * Refresh the cached consent from the cloud.
99
49
  *
@@ -106,17 +56,6 @@ export function getCachedShareDiagnosticsVersion(): string {
106
56
  * flipped off mid-session.
107
57
  */
108
58
  export async function refreshConsentCache(): Promise<void> {
109
- // Platform features disabled is a PERMANENT condition (config-level), not a
110
- // cold-cache transient: telemetry can never ship, so confirmed-off keeps the
111
- // record-time gates closed and the outbox from accumulating rows that no
112
- // flush will ever drain.
113
- if (!areCloudFeaturesEnabled()) {
114
- setCachedShareAnalytics(false);
115
- setCachedShareDiagnostics(false);
116
- setCachedShareDiagnosticsVersion("");
117
- return;
118
- }
119
-
120
59
  const client = await CadetCloudClient.create();
121
60
  if (!client) {
122
61
  resetConsentToUnknown();
@@ -131,26 +70,12 @@ export async function refreshConsentCache(): Promise<void> {
131
70
 
132
71
  const consent = await client.getOwnerConsent();
133
72
  if (consent) {
134
- setCachedShareAnalytics(consent.shareAnalytics);
135
73
  setCachedShareDiagnostics(consent.shareDiagnostics);
136
- setCachedShareDiagnosticsVersion(consent.shareDiagnosticsAcceptedVersion);
137
74
  }
138
75
  }
139
76
 
140
77
  function resetConsentToUnknown(): void {
141
- setCachedShareAnalytics("unknown");
142
78
  setCachedShareDiagnostics("unknown");
143
- setCachedShareDiagnosticsVersion("");
144
- }
145
-
146
- function setCachedShareAnalytics(value: ConsentState): void {
147
- if (value !== cachedShareAnalytics) {
148
- log.debug(
149
- { from: cachedShareAnalytics, to: value },
150
- "share_analytics consent changed",
151
- );
152
- cachedShareAnalytics = value;
153
- }
154
79
  }
155
80
 
156
81
  function setCachedShareDiagnostics(value: ConsentState): void {
@@ -163,16 +88,6 @@ function setCachedShareDiagnostics(value: ConsentState): void {
163
88
  }
164
89
  }
165
90
 
166
- function setCachedShareDiagnosticsVersion(value: string): void {
167
- if (value !== cachedShareDiagnosticsVersion) {
168
- log.debug(
169
- { from: cachedShareDiagnosticsVersion, to: value },
170
- "share_diagnostics_accepted_version changed",
171
- );
172
- cachedShareDiagnosticsVersion = value;
173
- }
174
- }
175
-
176
91
  /**
177
92
  * Begin periodic consent refresh. Idempotent — a second call is a no-op while a
178
93
  * timer is already running. Runs one immediate refresh, then every 5 minutes.
@@ -200,17 +115,7 @@ export async function stopConsentRefresh(): Promise<void> {
200
115
  }
201
116
  }
202
117
 
203
- /** Test-only: override the cached analytics value without going through a refresh. */
204
- export function __setCachedShareAnalyticsForTest(value: ConsentState): void {
205
- cachedShareAnalytics = value;
206
- }
207
-
208
118
  /** Test-only: override the cached diagnostics value without going through a refresh. */
209
119
  export function __setCachedShareDiagnosticsForTest(value: ConsentState): void {
210
120
  cachedShareDiagnostics = value;
211
121
  }
212
-
213
- /** Test-only: override the cached diagnostics-consent version directly. */
214
- export function __setCachedShareDiagnosticsVersionForTest(value: string): void {
215
- cachedShareDiagnosticsVersion = value;
216
- }
@@ -12,8 +12,8 @@
12
12
  import { existsSync, readFileSync } from "node:fs";
13
13
 
14
14
  import { parseIdentityFields } from "../daemon/handlers/identity.js";
15
+ import { getWorkspacePromptPath } from "../util/layout.js";
15
16
  import { getLogger } from "../util/logger.js";
16
- import { getWorkspacePromptPath } from "../util/platform.js";
17
17
  import { createCloudPatchQueue } from "./cloud-patch-queue.js";
18
18
 
19
19
  const log = getLogger("sync-identity");
@@ -1,7 +1,7 @@
1
1
  import { readFileSync, writeFileSync } from "node:fs";
2
2
  import { describe, expect, test } from "bun:test";
3
3
 
4
- import { getWorkspaceConfigPath } from "../../util/platform.js";
4
+ import { getWorkspaceConfigPath } from "../../util/layout.js";
5
5
  import { loadRawConfig, saveRawConfig } from "../loader.js";
6
6
  import { AssistantConfigSchema } from "../schema.js";
7
7
  import { AutoArchiveConfigSchema } from "../schemas/conversations.js";
@@ -1,16 +1,19 @@
1
1
  import { afterEach, beforeEach, describe, expect, test } from "bun:test";
2
2
 
3
- import { useMemorySecureKeys } from "../../__tests__/helpers/secure-keys.js";
3
+ import { useFaultableSecureKeyMap } from "../../__tests__/helpers/secure-keys.js";
4
+ import { credentialKey } from "../../security/credential-key.js";
4
5
  import {
6
+ getCloudAssistantId,
5
7
  getCloudBaseUrl,
6
8
  setCloudAssistantId,
7
9
  setCloudOrganizationId,
8
10
  setCloudUserId,
9
11
  } from "../env.js";
10
12
 
11
- useMemorySecureKeys();
13
+ const { setUnreachableKey } = useFaultableSecureKeyMap();
12
14
  const {
13
15
  _resetCloudIdentityEnsureForTests,
16
+ ensureCloudIdentityIds,
14
17
  fetchCloudIdentityIds,
15
18
  CLOUD_IDENTITY_VALIDATE_PATH,
16
19
  resolveCloudAssistantId,
@@ -306,3 +309,13 @@ describe("resolveCloudAssistantId", () => {
306
309
  expect(fetchCalls).toHaveLength(1);
307
310
  });
308
311
  });
312
+
313
+ describe("ensureCloudIdentityIds", () => {
314
+ test("an unreachable credential store is non-fatal — identity stays unbound", async () => {
315
+ process.env.CADET_PLATFORM_URL = BASE_URL;
316
+ setUnreachableKey(credentialKey("cadet", "assistant_api_key"));
317
+
318
+ await expect(ensureCloudIdentityIds()).resolves.toBeUndefined();
319
+ expect(getCloudAssistantId()).toBe("");
320
+ });
321
+ });
@@ -19,7 +19,7 @@ import { join } from "node:path";
19
19
  import { afterEach, beforeEach, describe, expect, test } from "bun:test";
20
20
 
21
21
  import { getDefaultPluginSkillRoots } from "../../plugins/defaults/main.js";
22
- import { getWorkspacePluginsDir } from "../../util/platform.js";
22
+ import { getWorkspacePluginsDir } from "../../util/layout.js";
23
23
  import {
24
24
  discoverDefaultPluginResidentSkills,
25
25
  discoverPluginResidentSkills,