@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
@@ -24,7 +24,7 @@ import {
24
24
  } from "../daemon/conversation-runtime-assembly.js";
25
25
  import { registerDefaultPluginInjectors } from "../plugins/defaults/index.js";
26
26
  import type { Message } from "../providers/types.js";
27
- import { getWorkspacePluginsDir } from "../util/platform.js";
27
+ import { getWorkspacePluginsDir } from "../util/layout.js";
28
28
  import { asConversation } from "./helpers/mock-conversation.js";
29
29
 
30
30
  // The injector chain is registered by the daemon bootstrap in production; do
@@ -8,7 +8,7 @@ let mockCredentialReadiness: Record<string, unknown>;
8
8
  let credentialReadinessCalls = 0;
9
9
 
10
10
  // Spread the real env-registry so the config loader's transitive
11
- // `util/platform` imports still resolve; only getIsCloud is driven per test.
11
+ // `util/layout` imports still resolve; only getIsCloud is driven per test.
12
12
  mock.module("../config/env-registry.js", () => ({
13
13
  ...realEnvRegistry,
14
14
  getIsCloud: () => mockGetIsPlatform(),
@@ -14,7 +14,7 @@ import { tmpdir } from "node:os";
14
14
  import { dirname, join } from "node:path";
15
15
  import { afterEach, beforeEach, describe, expect, test } from "bun:test";
16
16
 
17
- import { getWorkspaceConfigPath } from "../util/platform.js";
17
+ import { getWorkspaceConfigPath } from "../util/layout.js";
18
18
  import {
19
19
  _getConsecutiveFailures,
20
20
  _getInitConsecutiveFailures,
@@ -9,7 +9,7 @@ import {
9
9
  parseGreetingsSection,
10
10
  readWorkspaceGreetings,
11
11
  } from "../runtime/routes/workspace-greetings.js";
12
- import { getWorkspacePromptPath } from "../util/platform.js";
12
+ import { getWorkspacePromptPath } from "../util/layout.js";
13
13
 
14
14
  // Real SOUL.md in the preload's per-process workspace; dropped after each
15
15
  // test so absence assertions are honest.
@@ -6,7 +6,7 @@
6
6
  * mutable `mockAcpConfig` + `mock.module(..., () => ({ getConfig: ... }))`
7
7
  * boilerplate; this helper consolidates it. The real loader's other named
8
8
  * exports are spread into the mock so tests whose code path transitively
9
- * imports `loadConfig`, `invalidateConfigCache`, etc. don't fail at parse
9
+ * imports `getConfig`, `invalidateConfigCache`, etc. don't fail at parse
10
10
  * time on "Export named 'X' not found".
11
11
  *
12
12
  * Like `which-stub.ts`, this is a process-global hook by design — Bun's
@@ -75,8 +75,8 @@ import {
75
75
  ServiceUnavailableError,
76
76
  } from "../runtime/routes/errors.js";
77
77
  import { publishActivationProgressChanged } from "../runtime/sync/resource-sync-events.js";
78
+ import { getDataDir } from "../util/layout.js";
78
79
  import { getLogger } from "../util/logger.js";
79
- import { getDataDir } from "../util/platform.js";
80
80
 
81
81
  const log = getLogger("activation-progress-store");
82
82
 
@@ -12,8 +12,8 @@ import { basename, isAbsolute, relative, resolve, sep } from "node:path";
12
12
 
13
13
  import type { ActivationArtifact } from "../api/responses/activation.js";
14
14
  import type { AttachmentSourceType } from "../daemon/assistant-attachments.js";
15
+ import { getWorkspaceDir } from "../util/layout.js";
15
16
  import { getLogger } from "../util/logger.js";
16
- import { getWorkspaceDir } from "../util/platform.js";
17
17
  import {
18
18
  bumpActivationStepCount,
19
19
  markActivationTurnComplete,
package/src/agent/loop.ts CHANGED
@@ -62,7 +62,6 @@ import {
62
62
  boundUnparseableToolArgs,
63
63
  isUnparseableToolArgs,
64
64
  } from "../providers/unparseable-tool-args.js";
65
- import { recordWatchdogEvent } from "../telemetry/watchdog-events-store.js";
66
65
  import {
67
66
  ABORT_SETTLE_GRACE_MS,
68
67
  CANCELLED_TOOL_RESULT,
@@ -92,8 +91,6 @@ import { buildToolResultFollowUp } from "./tool-result-follow-up.js";
92
91
 
93
92
  const log = getLogger("agent-loop");
94
93
 
95
- /** Watchdog check name for both tool-gated reply outcomes. */
96
- const SEND_USER_MESSAGE_CHECK = "send_user_message_delivery";
97
94
  const MAX_CONSECUTIVE_UNPARSEABLE_TOOL_TURNS = 3;
98
95
  const SKILL_EXECUTE_TOOL_NAME = "skill_execute";
99
96
 
@@ -121,26 +118,6 @@ function deliveredUserMessage(block: {
121
118
  : null;
122
119
  }
123
120
 
124
- /**
125
- * Count one outcome of the tool-gated reply surface: the model was nudged for
126
- * a `send_user_message` call, or the run ended without one and the raw text
127
- * was surfaced as the fallback. Tagged with the model that served the call.
128
- * Best-effort observability, never a reason to fail a turn.
129
- */
130
- function recordSendUserMessageOutcome(
131
- outcome: "nudge" | "fallback",
132
- model: string | undefined,
133
- ): void {
134
- try {
135
- recordWatchdogEvent({
136
- checkName: SEND_USER_MESSAGE_CHECK,
137
- detail: { outcome, model: model ?? null },
138
- });
139
- } catch {
140
- // Telemetry must not affect the turn.
141
- }
142
- }
143
-
144
121
  /**
145
122
  * Whether a response reported the OUTCOME of the work before it: it called
146
123
  * tools, and every one of them delivered a message to the user.
@@ -762,12 +739,6 @@ interface AgentLoopRunOptionsBase {
762
739
  * call-site named profile. Missing profile names silently fall through.
763
740
  */
764
741
  overrideProfile?: string;
765
- /**
766
- * Who chose `overrideProfile`: `"auto"` when the Auto profile's router
767
- * picked it for this turn. Threaded onto each send's config so usage
768
- * attribution reports the routed profile under the `auto` source.
769
- */
770
- overrideProfileOrigin?: "auto";
771
742
  /**
772
743
  * Float the override profile above the call-site layers (named site
773
744
  * profile + call-site override) for non-main-agent call sites — the
@@ -1510,7 +1481,6 @@ export class AgentLoop {
1510
1481
  supportsDynamicUi = true,
1511
1482
  trust,
1512
1483
  overrideProfile,
1513
- overrideProfileOrigin,
1514
1484
  forceOverrideProfile = false,
1515
1485
  resolveOverrideProfile,
1516
1486
  onModelCallPrepared,
@@ -2099,12 +2069,6 @@ export class AgentLoop {
2099
2069
  // in mid-turn (a confirmed profile session) is the user's pick, so
2100
2070
  // the origin applies only while the effective override is still
2101
2071
  // the one the turn started with.
2102
- if (
2103
- overrideProfileOrigin &&
2104
- effectiveOverrideProfile === overrideProfile
2105
- ) {
2106
- providerConfig.overrideProfileOrigin = overrideProfileOrigin;
2107
- }
2108
2072
  if (forceOverrideProfile) {
2109
2073
  providerConfig.forceOverrideProfile = true;
2110
2074
  }
@@ -2305,13 +2269,7 @@ export class AgentLoop {
2305
2269
  // resolver layers `llm.profiles[overrideProfile]` at the top of
2306
2270
  // precedence for the user-facing call, so a model router can pick
2307
2271
  // the profile per message; clearing it drops any seeded override.
2308
- // The hook context is seeded with the effective override, so an
2309
- // unchanged profile is still the router's pick and keeps its
2310
- // origin; a profile the hook changed or cleared is the hook's.
2311
2272
  const hookModelProfile = finalPreModelCtx.modelProfile?.trim();
2312
- if (hookModelProfile !== effectiveOverrideProfile) {
2313
- delete providerConfig.overrideProfileOrigin;
2314
- }
2315
2273
  if (hookModelProfile) {
2316
2274
  providerConfig.overrideProfile = hookModelProfile;
2317
2275
  if (forceOverrideProfile) {
@@ -2577,9 +2535,6 @@ export class AgentLoop {
2577
2535
  if (!suppressAssistantText) {
2578
2536
  return undefined;
2579
2537
  }
2580
- if (fallbackSurfaced) {
2581
- recordSendUserMessageOutcome("fallback", response.model);
2582
- }
2583
2538
  return fallbackSurfaced ? "visible" : "private";
2584
2539
  };
2585
2540
 
@@ -2854,12 +2809,6 @@ export class AgentLoop {
2854
2809
  { turn: toolUseTurns, retry: postModelCallContinues },
2855
2810
  "post-model-call requested a retry — re-querying the model",
2856
2811
  );
2857
- // On a suppressed run with nothing sent, this retry IS the
2858
- // send-user-message nudge (the default `empty-response` plugin
2859
- // owns the decision, the counter is the host's).
2860
- if (suppressAssistantText && !userToldOutcome) {
2861
- recordSendUserMessageOutcome("nudge", response.model);
2862
- }
2863
2812
  history = postModelCallMessages;
2864
2813
  continue;
2865
2814
  } else {
@@ -41,8 +41,8 @@ import { rawAll } from "../persistence/raw-query.js";
41
41
  import { isPluginDisabled } from "../plugins/disabled-state.js";
42
42
  import type { EditEngineResult } from "../tools/shared/filesystem/edit-engine.js";
43
43
  import { applyEdit } from "../tools/shared/filesystem/edit-engine.js";
44
+ import { getDataDir, getWorkspacePluginsDir } from "../util/layout.js";
44
45
  import { getLogger } from "../util/logger.js";
45
- import { getDataDir, getWorkspacePluginsDir } from "../util/platform.js";
46
46
  import { hasPluginManifest } from "../util/plugin-manifest.js";
47
47
 
48
48
  const log = getLogger("app-store");
@@ -48,20 +48,6 @@ mock.module("../../runtime/sync/resource-sync-events.js", () => ({
48
48
  },
49
49
  }));
50
50
 
51
- /** Every telemetry event the store records, in order. */
52
- const recorded: Array<{ name: string; fields: Record<string, unknown> }> = [];
53
- /** When set, the outbox throws it instead of recording (an unmigrated DB). */
54
- let recordFailure: Error | null = null;
55
- mock.module("../../telemetry/telemetry-events-outbox.js", () => ({
56
- recordTelemetryEvent: (name: string, fields: Record<string, unknown>) => {
57
- if (recordFailure) {
58
- throw recordFailure;
59
- }
60
- recorded.push({ name, fields });
61
- return { id: "evt", createdAt: 0 };
62
- },
63
- }));
64
-
65
51
  import { backfillAccent } from "../accent-backfill.js";
66
52
  import {
67
53
  clearAvatar,
@@ -111,8 +97,6 @@ describe("avatar-store", () => {
111
97
  // into it before the store's own mkdir runs.
112
98
  mkdirSync(avatarDir, { recursive: true });
113
99
  publishedOrigins.length = 0;
114
- recorded.length = 0;
115
- recordFailure = null;
116
100
  });
117
101
 
118
102
  afterEach(() => {
@@ -485,13 +469,12 @@ describe("avatar-store", () => {
485
469
  expect(avatarNote()).toBe("A custom image the user uploaded.");
486
470
  });
487
471
 
488
- test("a refused accent publishes and records nothing", async () => {
472
+ test("a refused accent publishes nothing", async () => {
489
473
  expect(await setAccent("#12ab34")).toBeNull();
490
474
  expect(publishedOrigins).toEqual([]);
491
- expect(recorded).toEqual([]);
492
475
  });
493
476
 
494
- test("backfillAccent is a read-time repair: it publishes and records nothing", async () => {
477
+ test("backfillAccent is a read-time repair: it publishes nothing", async () => {
495
478
  writeFileSync(path(IMAGE_FILENAME), RED_PNG);
496
479
  const state = imageState("quiet-red");
497
480
  writeFileSync(path(MANIFEST_FILENAME), JSON.stringify(state));
@@ -499,159 +482,6 @@ describe("avatar-store", () => {
499
482
  await backfillAccent(state);
500
483
 
501
484
  expect(publishedOrigins).toEqual([]);
502
- expect(recorded).toEqual([]);
503
- });
504
- });
505
-
506
- describe("avatar_changed telemetry", () => {
507
- const RED_ACCENT = { accent_hex: "#c81e1e", accent_source: "derived" };
508
- const events = () => recorded.map((entry) => entry.fields);
509
-
510
- test("an identical re-upload above the raster serving cap is not a change", async () => {
511
- const big = Buffer.alloc(5 * 1024 * 1024 + 1, 7);
512
-
513
- await setImage(big, "upload");
514
- await setImage(big, "upload");
515
-
516
- expect(events()).toHaveLength(1);
517
- expect(events()[0]).toMatchObject({ previous_kind: "none" });
518
- });
519
-
520
- test("a failed record never fails the change: the manifest and fan-out stand", async () => {
521
- recordFailure = new Error("no such table: telemetry_events");
522
-
523
- await setImage(RED_PNG, "upload", { originClientId: "web-1" });
524
-
525
- expect(readManifestFile()?.kind).toBe("image");
526
- expect(publishedOrigins).toEqual(["web-1"]);
527
- expect(recorded).toEqual([]);
528
- });
529
-
530
- test("an upload over an empty workspace records one image event carrying the client OS", async () => {
531
- await setImage(RED_PNG, "upload", { clientOs: "macos" });
532
-
533
- expect(recorded.map((entry) => entry.name)).toEqual(["avatar_changed"]);
534
- expect(events()).toEqual([
535
- {
536
- action: "upload_image",
537
- kind: "image",
538
- previous_kind: "none",
539
- ...RED_ACCENT,
540
- client_os: "macos",
541
- },
542
- ]);
543
- });
544
-
545
- test("an AI image records generate_image, with no client_os key when none was given", async () => {
546
- await setImage(RED_PNG, "ai");
547
-
548
- expect(events()).toEqual([
549
- {
550
- action: "generate_image",
551
- kind: "image",
552
- previous_kind: "none",
553
- ...RED_ACCENT,
554
- },
555
- ]);
556
- });
557
-
558
- test("the same bytes uploaded twice count once; different bytes count again", async () => {
559
- await setImage(RED_PNG, "upload");
560
- await setImage(RED_PNG, "upload");
561
- expect(events()).toHaveLength(1);
562
-
563
- await setImage(Buffer.from("v2"), "upload");
564
- expect(events()).toHaveLength(2);
565
- expect(events()[1]).toMatchObject({
566
- action: "upload_image",
567
- kind: "image",
568
- previous_kind: "image",
569
- });
570
- });
571
-
572
- test("the same bytes from a different source count again", async () => {
573
- await setImage(RED_PNG, "upload");
574
- await setImage(RED_PNG, "ai");
575
-
576
- expect(events().map((fields) => fields.action)).toEqual([
577
- "upload_image",
578
- "generate_image",
579
- ]);
580
- });
581
-
582
- test(
583
- "a character records its traits and palette accent once, and an identical re-set not at all",
584
- () => {
585
- const result = setCharacter(VALID_TRAITS);
586
- if (!result.ok) {
587
- expect(result.reason).toBe("native_unavailable");
588
- expect(recorded).toEqual([]);
589
- return;
590
- }
591
-
592
- expect(events()).toEqual([
593
- {
594
- action: "set_character",
595
- kind: "character",
596
- previous_kind: "none",
597
- body_shape: "blob",
598
- eye_style: "curious",
599
- color: "green",
600
- accent_hex: "#4c9b50",
601
- accent_source: "palette",
602
- },
603
- ]);
604
-
605
- expect(setCharacter(VALID_TRAITS).ok).toBe(true);
606
- expect(events()).toHaveLength(1);
607
- },
608
- NATIVE_RENDER_TEST_TIMEOUT_MS,
609
- );
610
-
611
- test("an accent counts only when it lands somewhere new", async () => {
612
- await setImage(RED_PNG, "upload");
613
- recorded.length = 0;
614
-
615
- await setAccent("#123456");
616
- expect(events()).toEqual([
617
- {
618
- action: "set_accent",
619
- kind: "image",
620
- previous_kind: "image",
621
- accent_hex: "#123456",
622
- accent_source: "custom",
623
- },
624
- ]);
625
-
626
- await setAccent("#123456");
627
- expect(events()).toHaveLength(1);
628
-
629
- await setAccent(null);
630
- expect(events()).toHaveLength(2);
631
- expect(events()[1]).toEqual({
632
- action: "set_accent",
633
- kind: "image",
634
- previous_kind: "image",
635
- ...RED_ACCENT,
636
- });
637
-
638
- await setAccent(null);
639
- expect(events()).toHaveLength(2);
640
- });
641
-
642
- test("clearing an image records a bare clear; clearing nothing publishes but records nothing", async () => {
643
- await setImage(RED_PNG, "upload");
644
- recorded.length = 0;
645
-
646
- clearAvatar();
647
- expect(events()).toEqual([
648
- { action: "clear", kind: "none", previous_kind: "image" },
649
- ]);
650
-
651
- const publishedBefore = publishedOrigins.length;
652
- clearAvatar();
653
- expect(events()).toHaveLength(1);
654
- expect(publishedOrigins.length).toBe(publishedBefore + 1);
655
485
  });
656
486
  });
657
487
  });
@@ -8,8 +8,8 @@
8
8
  */
9
9
  import type { AvatarAccent } from "@mycadet/avatar-manifest";
10
10
 
11
+ import { getAvatarImagePath } from "../util/layout.js";
11
12
  import { getLogger } from "../util/logger.js";
12
- import { getAvatarImagePath } from "../util/platform.js";
13
13
  import {
14
14
  deriveAccentHexFromImage,
15
15
  derivedAccent,
@@ -31,8 +31,8 @@ import {
31
31
  parseAvatarManifest,
32
32
  } from "@mycadet/avatar-manifest";
33
33
 
34
+ import { getAvatarDir } from "../util/layout.js";
34
35
  import { getLogger } from "../util/logger.js";
35
- import { getAvatarDir } from "../util/platform.js";
36
36
  import { paletteAccent } from "./avatar-accent.js";
37
37
 
38
38
  const log = getLogger("avatar-manifest");
@@ -32,9 +32,8 @@ import {
32
32
  } from "@mycadet/avatar-manifest";
33
33
 
34
34
  import { publishAvatarChanged } from "../runtime/sync/resource-sync-events.js";
35
- import { recordTelemetryEvent } from "../telemetry/telemetry-events-outbox.js";
35
+ import { getAvatarDir, getAvatarImagePath } from "../util/layout.js";
36
36
  import { getLogger } from "../util/logger.js";
37
- import { getAvatarDir, getAvatarImagePath } from "../util/platform.js";
38
37
  import { automaticAccent } from "./accent-backfill.js";
39
38
  import {
40
39
  deriveAccentHexFromImage,
@@ -42,20 +41,15 @@ import {
42
41
  paletteAccent,
43
42
  } from "./avatar-accent.js";
44
43
  import {
45
- type AvatarChangeAction,
46
- avatarChangedFields,
47
- IMAGE_ACTIONS,
48
- type ImageSource,
49
- isSameAvatar,
50
- } from "./avatar-changed-telemetry.js";
51
- import {
44
+ type AvatarSource,
52
45
  type AvatarState,
53
46
  computeImageMeta,
54
- NONE_AVATAR_STATE,
55
47
  readAvatarState,
56
48
  writeManifest,
57
49
  } from "./avatar-manifest.js";
58
- import { readContainedAvatarRaster } from "./ensure-raster.js";
50
+
51
+ /** The sources an image can be set from (everything but the builder render). */
52
+ type ImageSource = Exclude<AvatarSource, "builder">;
59
53
  import {
60
54
  describeAvatarState,
61
55
  NO_AVATAR_IDENTITY_NOTE,
@@ -73,11 +67,6 @@ const log = getLogger("avatar-store");
73
67
  export interface AvatarChangeOptions {
74
68
  /** The client that made the change, so it can ignore its own sync echo. */
75
69
  originClientId?: string;
76
- /**
77
- * The caller's OS as reported by the client-metadata header, already
78
- * sanitized; carried on the telemetry event.
79
- */
80
- clientOs?: string;
81
70
  }
82
71
 
83
72
  export interface ImageChangeOptions extends AvatarChangeOptions {
@@ -85,21 +74,11 @@ export interface ImageChangeOptions extends AvatarChangeOptions {
85
74
  imageDescription?: string;
86
75
  }
87
76
 
88
- interface AvatarTransition {
89
- action: AvatarChangeAction;
90
- previous: AvatarState;
91
- next: AvatarState;
92
- /** Set by the image write: the PNG bytes differ from the previous image's. */
93
- imageBytesChanged?: boolean;
94
- }
95
-
96
77
  /**
97
- * The side effects every persisted change owes. An identical re-set notifies
98
- * and is not counted. Telemetry is best effort: the avatar is
99
- * already written and announced, so a failed record is logged, not thrown.
78
+ * The side effects every persisted change owes: refresh the identity note and
79
+ * notify connected clients so they re-read the avatar.
100
80
  */
101
81
  function announceChange(
102
- transition: AvatarTransition,
103
82
  identityNote: string | null,
104
83
  options?: AvatarChangeOptions,
105
84
  ): void {
@@ -107,18 +86,6 @@ function announceChange(
107
86
  updateIdentityAvatarSection(identityNote);
108
87
  }
109
88
  publishAvatarChanged(options?.originClientId);
110
- const { action, previous, next, imageBytesChanged } = transition;
111
- if (isSameAvatar(previous, next, imageBytesChanged)) {
112
- return;
113
- }
114
- try {
115
- recordTelemetryEvent(
116
- "avatar_changed",
117
- avatarChangedFields(action, previous, next, options?.clientOs),
118
- );
119
- } catch (err) {
120
- log.warn({ err, action }, "Failed to record the avatar_changed event");
121
- }
122
89
  }
123
90
 
124
91
  /**
@@ -136,7 +103,6 @@ export function setCharacter(
136
103
  traits: CharacterTraits,
137
104
  options?: AvatarChangeOptions,
138
105
  ): TraitsSyncResult {
139
- const previous = readAvatarState();
140
106
  const result = writeTraitsAndRenderAvatar(traits);
141
107
  if (!result.ok) {
142
108
  return result;
@@ -150,11 +116,7 @@ export function setCharacter(
150
116
  accent: paletteAccent(traits.color),
151
117
  };
152
118
  writeManifest(state);
153
- announceChange(
154
- { action: "set_character", previous, next: state },
155
- describeAvatarState(state),
156
- options,
157
- );
119
+ announceChange(describeAvatarState(state), options);
158
120
  return result;
159
121
  }
160
122
 
@@ -175,13 +137,6 @@ export async function setImage(
175
137
  mkdirSync(avatarDir, { recursive: true });
176
138
 
177
139
  const pngPath = join(avatarDir, AVATAR_IMAGE_FILENAME);
178
- const previous = readAvatarState();
179
- // Capped at the upload's own size: a larger file cannot be identical, and
180
- // the serving cap must not turn a big re-upload into a counted change.
181
- const previousBytes =
182
- previous.kind === "image"
183
- ? readContainedAvatarRaster(pngPath, pngBuffer.length)
184
- : null;
185
140
  const pngTmp = `${pngPath}.${randomUUID()}.tmp`;
186
141
  writeFileSync(pngTmp, pngBuffer);
187
142
  renameSync(pngTmp, pngPath);
@@ -203,12 +158,6 @@ export async function setImage(
203
158
  "Set avatar from image and removed character sidecars",
204
159
  );
205
160
  announceChange(
206
- {
207
- action: IMAGE_ACTIONS[source],
208
- previous,
209
- next: state,
210
- imageBytesChanged: !previousBytes?.equals(pngBuffer),
211
- },
212
161
  describeAvatarState(state, options?.imageDescription),
213
162
  options,
214
163
  );
@@ -234,11 +183,7 @@ export async function setAccent(
234
183
  accent: hex ? { hex, source: "custom" } : await automaticAccent(state),
235
184
  };
236
185
  writeManifest(next);
237
- announceChange(
238
- { action: "set_accent", previous: state, next },
239
- null,
240
- options,
241
- );
186
+ announceChange(null, options);
242
187
  return next;
243
188
  }
244
189
 
@@ -264,10 +209,6 @@ export function clearAvatar(options?: AvatarChangeOptions): AvatarState {
264
209
  rmSync(join(avatarDir, AVATAR_MANIFEST_FILENAME), { force: true });
265
210
 
266
211
  log.info("Cleared avatar — removed all artifacts");
267
- announceChange(
268
- { action: "clear", previous, next: NONE_AVATAR_STATE },
269
- NO_AVATAR_IDENTITY_NOTE,
270
- options,
271
- );
212
+ announceChange(NO_AVATAR_IDENTITY_NOTE, options);
272
213
  return previous;
273
214
  }
@@ -10,8 +10,8 @@ import {
10
10
  } from "node:fs";
11
11
  import { basename, dirname, isAbsolute, join, relative } from "node:path";
12
12
 
13
+ import { getAvatarImagePath, getWorkspaceDir } from "../util/layout.js";
13
14
  import { getLogger } from "../util/logger.js";
14
- import { getAvatarImagePath, getWorkspaceDir } from "../util/platform.js";
15
15
  import { type AvatarState, readAvatarState } from "./avatar-manifest.js";
16
16
  import { writeTraitsAndRenderAvatar } from "./traits-png-sync.js";
17
17
 
@@ -3,8 +3,8 @@ import { existsSync, readFileSync, writeFileSync } from "node:fs";
3
3
  import type { AvatarState } from "@mycadet/avatar-manifest";
4
4
 
5
5
  import { isTemplateContent } from "../prompts/template-detection.js";
6
+ import { getWorkspacePromptPath } from "../util/layout.js";
6
7
  import { getLogger } from "../util/logger.js";
7
- import { getWorkspacePromptPath } from "../util/platform.js";
8
8
  import { safeStringSlice } from "../util/unicode.js";
9
9
 
10
10
  const log = getLogger("identity-avatar");
@@ -62,8 +62,8 @@ import {
62
62
  type SyncedKey,
63
63
  } from "../cloud/cloud-patch-queue.js";
64
64
  import { detectMediaType } from "../tools/shared/filesystem/image-read.js";
65
+ import { getWorkspaceDir } from "../util/layout.js";
65
66
  import { getLogger } from "../util/logger.js";
66
- import { getWorkspaceDir } from "../util/platform.js";
67
67
  import { backfillAccent } from "./accent-backfill.js";
68
68
  import { readAvatarState } from "./avatar-manifest.js";
69
69
  import {
@@ -9,8 +9,8 @@ import {
9
9
  type CharacterTraits,
10
10
  } from "@mycadet/avatar-manifest";
11
11
 
12
+ import { getAvatarDir } from "../util/layout.js";
12
13
  import { getLogger } from "../util/logger.js";
13
- import { getAvatarDir } from "../util/platform.js";
14
14
  import { renderCharacterAscii } from "./ascii-renderer.js";
15
15
  import { renderCharacterPng } from "./png-renderer.js";
16
16
  import { isResvgAvailable } from "./resvg-lazy.js";
@@ -18,8 +18,8 @@ import {
18
18
  import { arch, platform } from "node:os";
19
19
  import { basename, join } from "node:path";
20
20
 
21
+ import { getWorkspaceDir } from "../util/layout.js";
21
22
  import { getLogger } from "../util/logger.js";
22
- import { getWorkspaceDir } from "../util/platform.js";
23
23
  import { PromiseGuard } from "../util/promise-guard.js";
24
24
 
25
25
  const log = getLogger("compiler-tools");
@@ -10,8 +10,8 @@ import { mkdir } from "node:fs/promises";
10
10
  import { join } from "node:path";
11
11
 
12
12
  import { ensureBun } from "../util/bun-runtime.js";
13
+ import { getWorkspaceDir } from "../util/layout.js";
13
14
  import { getLogger } from "../util/logger.js";
14
- import { getWorkspaceDir } from "../util/platform.js";
15
15
 
16
16
  const log = getLogger("package-resolver");
17
17