@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
@@ -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