@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
@@ -9,6 +9,6 @@
9
9
  "node": ">=20.12.0"
10
10
  },
11
11
  "peerDependencies": {
12
- "@mycadet/plugin-api": "^0.8.0"
12
+ "@mycadet/plugin-api": "^0.12.7"
13
13
  }
14
14
  }
@@ -23,7 +23,7 @@ import type { TrustContext } from "../../../daemon/trust-context-types.js";
23
23
  import {
24
24
  getConfigQuarantineNoticePath,
25
25
  getConfigValidationResetNoticePath,
26
- } from "../../../util/platform.js";
26
+ } from "../../../util/layout.js";
27
27
  import {
28
28
  type InjectionBlock,
29
29
  type Injector,
@@ -9,6 +9,6 @@
9
9
  "node": ">=20.12.0"
10
10
  },
11
11
  "peerDependencies": {
12
- "@mycadet/plugin-api": "^0.8.0"
12
+ "@mycadet/plugin-api": "^0.12.7"
13
13
  }
14
14
  }
@@ -15,7 +15,7 @@
15
15
  import { existsSync } from "node:fs";
16
16
  import { join } from "node:path";
17
17
 
18
- import { getWorkspacePluginsDir } from "../util/platform.js";
18
+ import { getWorkspacePluginsDir } from "../util/layout.js";
19
19
 
20
20
  /**
21
21
  * Return `true` when the `.disabled` sentinel exists for `pluginName`.
@@ -42,8 +42,8 @@ import {
42
42
  PLUGIN_API_EXPORTS,
43
43
  PLUGIN_API_REGISTRY_KEY,
44
44
  } from "../embedded/plugin-api.js";
45
+ import { getWorkspaceDir } from "../util/layout.js";
45
46
  import { getLogger } from "../util/logger.js";
46
- import { getWorkspaceDir } from "../util/platform.js";
47
47
 
48
48
  const log = getLogger("plugin-api-shim");
49
49
 
@@ -56,8 +56,8 @@ import { existsSync, readFileSync } from "node:fs";
56
56
  import { mkdir, symlink } from "node:fs/promises";
57
57
  import { dirname, join } from "node:path";
58
58
 
59
+ import { getWorkspaceDir } from "../util/layout.js";
59
60
  import { getLogger } from "../util/logger.js";
60
- import { getWorkspaceDir } from "../util/platform.js";
61
61
 
62
62
  const log = getLogger("shared-dep-links");
63
63
 
@@ -21,7 +21,7 @@
21
21
  import { readdirSync, realpathSync, statSync } from "node:fs";
22
22
  import { join, sep } from "node:path";
23
23
 
24
- import { getWorkspacePluginsDir } from "../util/platform.js";
24
+ import { getWorkspacePluginsDir } from "../util/layout.js";
25
25
  import { hasPluginManifest } from "../util/plugin-manifest.js";
26
26
 
27
27
  export interface InstalledPluginDir {
@@ -54,17 +54,15 @@ export const PLUGIN_MCP_MANIFEST = "mcp.json";
54
54
  * `mcp.json` has no risk field, since the spec defines none, so a host
55
55
  * default applies.
56
56
  *
57
- * The review happens earlier: the marketplace catalog
58
- * (`plugins/marketplace.json`) is a curated whitelist of SHA-pinned
59
- * entries, and installing a plugin is itself the user's decision to run
60
- * the code it ships. Gating every call afterwards prompts on the tools
61
- * the user installed the plugin to get.
57
+ * The review happens earlier: the installable catalog is the Cadet Cloud
58
+ * marketplace's reviewed entries, and installing a plugin is itself the
59
+ * user's decision to run the code it ships. Gating every call afterwards
60
+ * prompts on the tools the user installed the plugin to get.
62
61
  *
63
62
  * The gap this leaves is deliberate and known: a plugin installed
64
- * off-marketplace straight from a GitHub URL gets the same default, and
65
- * nothing recorded at install time distinguishes the two afterwards. A
66
- * provenance signal is what would let this default be curation-gated
67
- * rather than blanket. A workspace entry of the same id replaces the
63
+ * straight from a GitHub URL gets the same default, and nothing recorded
64
+ * at install time distinguishes the two afterwards. A provenance signal
65
+ * is what would let this default be curation-gated rather than blanket. A workspace entry of the same id replaces the
68
66
  * plugin server wholesale (transport included) and uses the workspace
69
67
  * origin risk.
70
68
  */
@@ -54,11 +54,11 @@ import {
54
54
  } from "../security/plugin-secret-patterns.js";
55
55
  import { finalizeTool } from "../tools/tool-defaults.js";
56
56
  import type { Tool, ToolDefinition } from "../tools/types.js";
57
- import { getLogger } from "../util/logger.js";
58
57
  import {
59
58
  getWorkspaceHooksDir,
60
59
  getWorkspacePluginsDir,
61
- } from "../util/platform.js";
60
+ } from "../util/layout.js";
61
+ import { getLogger } from "../util/logger.js";
62
62
  import { hasPluginManifest } from "../util/plugin-manifest.js";
63
63
  import { collectSourceVersions } from "./collect-source-versions.js";
64
64
  import {
@@ -21,7 +21,7 @@
21
21
  import { readFileSync } from "node:fs";
22
22
  import { join } from "node:path";
23
23
 
24
- import { getMonitoringDataDir } from "../util/platform.js";
24
+ import { getMonitoringDataDir } from "../util/layout.js";
25
25
 
26
26
  /**
27
27
  * Sentinel filename, under the monitoring data directory
@@ -1,7 +1,7 @@
1
1
  import { existsSync, unlinkSync } from "node:fs";
2
2
 
3
+ import { getWorkspacePromptPath } from "../util/layout.js";
3
4
  import { getLogger } from "../util/logger.js";
4
- import { getWorkspacePromptPath } from "../util/platform.js";
5
5
 
6
6
  const log = getLogger("bootstrap-cleanup");
7
7
 
@@ -11,8 +11,8 @@ import {
11
11
  } from "../contacts/guardian-delivery-reader.js";
12
12
  import type { ChannelCapabilities } from "../daemon/conversation-runtime-assembly.js";
13
13
  import type { TrustContext } from "../daemon/trust-context-types.js";
14
+ import { getWorkspaceDir, getWorkspacePromptPath } from "../util/layout.js";
14
15
  import { getLogger } from "../util/logger.js";
15
- import { getWorkspaceDir, getWorkspacePromptPath } from "../util/platform.js";
16
16
  import { stripCommentLines } from "../util/strip-comment-lines.js";
17
17
  import type { NormalizedOnboarding } from "./normalize-onboarding.js";
18
18
 
@@ -2,11 +2,11 @@ import { existsSync, readdirSync, readFileSync } from "node:fs";
2
2
  import { join } from "node:path";
3
3
 
4
4
  import { parseFrontmatterFields } from "../skills/frontmatter.js";
5
- import { getLogger } from "../util/logger.js";
6
5
  import {
7
6
  getWorkspacePromptPath,
8
7
  getWorkspaceSystemPromptDir,
9
- } from "../util/platform.js";
8
+ } from "../util/layout.js";
9
+ import { getLogger } from "../util/logger.js";
10
10
  import { stripCommentLines } from "../util/strip-comment-lines.js";
11
11
  import {
12
12
  BUNDLED_SYSTEM_SECTIONS,
@@ -12,17 +12,15 @@ import { getIsContainerized } from "../config/env-registry.js";
12
12
  import type { ChannelCapabilities } from "../daemon/conversation-runtime-assembly.js";
13
13
  import { resolveTrustClass } from "../daemon/trust-context.js";
14
14
  import type { TrustContext } from "../daemon/trust-context-types.js";
15
- import { markActivationSession } from "../plugins/defaults/memory/activation-session-store.js";
16
15
  import { derivePersonaTrustFlags } from "../runtime/trust-class.js";
17
- import { ACTIVATION_RAIL_BOOTSTRAP_TEMPLATE } from "../telemetry/activation-funnel.js";
18
16
  import type { OnboardingContext } from "../types/onboarding-context.js";
19
17
  import { resolveBundledDir } from "../util/bundled-asset.js";
20
- import { getLogger } from "../util/logger.js";
21
18
  import {
22
19
  getConversationsDir,
23
20
  getWorkspaceDir,
24
21
  getWorkspacePromptPath,
25
- } from "../util/platform.js";
22
+ } from "../util/layout.js";
23
+ import { getLogger } from "../util/logger.js";
26
24
  import { stripCommentLines } from "../util/strip-comment-lines.js";
27
25
  import { cleanupBootstrapFiles } from "./bootstrap-cleanup.js";
28
26
  import { SYSTEM_PROMPT_CACHE_BOUNDARY } from "./cache-boundary.js";
@@ -336,40 +334,11 @@ export function maybeReseedBootstrap(templateFileName: string): boolean {
336
334
 
337
335
  /**
338
336
  * Reseed BOOTSTRAP.md from the requested onboarding template (one-shot,
339
- * idempotent) and, when that template is the activation rail AND the rail is
340
- * now the active bootstrap, mark the conversation as an activation session.
341
- *
342
- * Marking happens here — at the single point where the bootstrap selection is
343
- * known — so it lands BEFORE the agent loop resolves tools and BEFORE the model
344
- * can call the emit tool on the first activation-rail turn. (`resolveTools`
345
- * runs before the system-prompt build in the loop, so the system-prompt build is
346
- * too late to be the *only* marking site.) The marker write is best-effort and
347
- * idempotent (`markActivationSession` swallows errors and dedups on the PK), so
348
- * calling this from both `setOnboardingContext` and `buildSystemPrompt` is safe.
349
- *
350
- * The activation mark is gated on the rail actually being the active bootstrap —
351
- * either this call just installed it, OR BOOTSTRAP.md already holds the
352
- * activation-rail template. When the reseed no-ops because BOOTSTRAP.md is
353
- * missing or customized to something else, the rail is NOT active, so we must
354
- * NOT mark (otherwise non-rail conversations would pollute activation
355
- * telemetry).
337
+ * idempotent). No-op when the workspace's BOOTSTRAP.md is missing or has been
338
+ * customized away from the generic template.
356
339
  */
357
- export function applyBootstrapTemplate(
358
- bootstrapTemplate: string,
359
- conversationId?: string,
360
- ): void {
361
- const installedActivationRail = maybeReseedBootstrap(bootstrapTemplate);
362
- if (
363
- bootstrapTemplate === ACTIVATION_RAIL_BOOTSTRAP_TEMPLATE &&
364
- conversationId &&
365
- (installedActivationRail ||
366
- isTemplateContent(
367
- readPromptFile(getWorkspacePromptPath("BOOTSTRAP.md")),
368
- ACTIVATION_RAIL_BOOTSTRAP_TEMPLATE,
369
- ))
370
- ) {
371
- markActivationSession(conversationId);
372
- }
340
+ export function applyBootstrapTemplate(bootstrapTemplate: string): void {
341
+ maybeReseedBootstrap(bootstrapTemplate);
373
342
  }
374
343
 
375
344
  /**
@@ -460,13 +429,12 @@ export interface BuildSystemPromptOptions {
460
429
  * file-backed bodies, and runtime-computed transforms.
461
430
  */
462
431
  export function buildSystemPrompt(options?: BuildSystemPromptOptions): string {
463
- // One-shot bootstrap reseed + activation-rail marking. The marking also runs
464
- // earlier, at `setOnboardingContext`, so the activation session is recorded
465
- // before the agent loop resolves tools on the first turn; this call is a
466
- // harmless idempotent backstop for prompt builds outside that path.
432
+ // One-shot bootstrap reseed, at prompt build for prompt paths outside the
433
+ // onboarding-context entry point (idempotent — no-op once BOOTSTRAP.md is
434
+ // customized).
467
435
  const bootstrapTemplate = options?.onboardingContext?.bootstrapTemplate;
468
436
  if (bootstrapTemplate) {
469
- applyBootstrapTemplate(bootstrapTemplate, options?.conversationId);
437
+ applyBootstrapTemplate(bootstrapTemplate);
470
438
  }
471
439
 
472
440
  // Slugs used by the persona sections (`10-user-persona`,
@@ -16,8 +16,6 @@ The prompt itself must be one-click copyable. Inline paragraph text the user has
16
16
 
17
17
  DONE: the user has the copyable prompt in hand (or you've explicitly backfilled/skipped Port per the task-first opener below).
18
18
 
19
- <!-- Funnel: segment activation events by port_accepted vs port_declined so the no-port branch can be tuned separately. Instrumentation is a follow-up; this template only defines the branch. -->
20
-
21
19
  _If the user declines the port (`port_declined`)._ Don't re-pitch and don't ask two questions to make up for the missing paste. Ask exactly ONE question — the one that buys the most signal for Propose ("what's the one thing you most want off your plate this week?"). Their answer is the Moment 1 output that Port would have produced. Stay in a bounded context loop: at most two context-gathering turns total. If you still don't have a surface to point at after that, propose anyway with what you have — a thin proposal beats stalling for more input.
22
20
 
23
21
  On `port_declined`, render exactly ONE small structured intake surface before moving to Propose — a `ui_show` `choice` surface (`display: "inline"`, single-select) whose options are a short background list (Founder / Engineer / Creative / Operator / Investor / Student / Other), so the no-port branch still hands Propose a structured signal. (A `form` with one short field, or a `choice` phrased as a single top-of-mind question, is an acceptable substitute — pick one; the background `choice` is the default.) This is the deliberate structured-intake exception to the "don't enumerate options / the recommendation IS the click" guidance — scoped to the no-port branch only, where there's no paste to infer from, so a small menu is the cheapest way to get traction. The port (paste) branch is unchanged: it never renders this surface.
@@ -85,41 +83,6 @@ Identity writes (IDENTITY.md, SOUL.md), user-profile writes, journal entries: al
85
83
 
86
84
  Your opener is the Port pitch — no other intake surface precedes it.
87
85
 
88
- ## Telemetry: tag your `ui_show` surfaces
89
-
90
- The activation funnel is measured passively — there is no separate tool to call.
91
- When you render the `ui_show` surface for a rail move that IS a funnel moment,
92
- add the optional `activation_moment` parameter to that same `ui_show` call. It's
93
- a tag on a surface you're already showing, not extra work.
94
-
95
- Most moments record when the user COMMITS the tagged surface (clicks an action /
96
- submits / selects). The one exception is `first_wow_executed`, which records the
97
- moment the surface RENDERS — because the wow has already happened by the time you
98
- show its result, and a result card is often display-only with nothing to commit.
99
-
100
- Which surface to tag with which moment:
101
-
102
- - `moment_1` — the no-port intake `choice` surface, OR the Port-summary card
103
- (background + top-of-mind captured, or the user explicitly skipped). Records on
104
- commit (when the intake resolves).
105
- - `moment_2` — the Propose offer surface (the `ui_show` offer card/choice where
106
- the user picks an outcome). Records on commit.
107
- - `moment_3` — the task-selection surface (the specific thing you're about to
108
- run is chosen). Records on commit.
109
- - `first_wow_executed` — the Run result surface (e.g. `work_result` / the result
110
- the user sees after the wow ran against real data). Records on RENDER — you do
111
- not need the user to click anything; just tag the result surface.
112
- - `first_wow_interacted` — the user's first engagement AFTER the wow. Tag the
113
- surface they act on (a result-card action button, or the follow-through
114
- `choice` you render next). Records on commit. Don't put this on the same
115
- surface as `first_wow_executed` — one tag per surface, and that surface already
116
- records "executed" on render.
117
-
118
- A surface carries at most one `activation_moment`. The milestone no-ops outside
119
- an activation session, and a missing or mistimed tag is non-fatal — but accurate,
120
- move-bound tags are what make the funnel meaningful. Omit `activation_moment` on
121
- every non-funnel surface.
122
-
123
86
  ## Wrap
124
87
 
125
88
  <!-- Open question: the default wrap tone below is opinionated (brisk, dataset-first). Whether that's the right note to end the activation rail on is a conscious call we haven't made yet — flag, don't silently change. -->
@@ -39,7 +39,7 @@ const cadetConnection = {
39
39
  const resolvedAuth: ResolvedAuth = {
40
40
  kind: "header",
41
41
  headers: { Authorization: "Bearer test-key" },
42
- baseUrl: "https://platform.example/v1/runtime-proxy/fireworks",
42
+ baseUrl: "https://test-cloud.mycadet.ai/v1/runtime-proxy/fireworks",
43
43
  };
44
44
 
45
45
  describe("cadet connection routing", () => {
@@ -76,7 +76,7 @@ describe("cadet connection routing", () => {
76
76
  {
77
77
  kind: "header",
78
78
  headers: { Authorization: "Bearer test-key" },
79
- baseUrl: "https://platform.example/v1/runtime-proxy/cadet",
79
+ baseUrl: "https://test-cloud.mycadet.ai/v1/runtime-proxy/cadet",
80
80
  },
81
81
  {
82
82
  model: "qwen/qwen3-8b",
@@ -1,4 +1,4 @@
1
- import { getWorkspaceDir } from "../../util/platform.js";
1
+ import { getWorkspaceDir } from "../../util/layout.js";
2
2
  import { OpenAIChatCompletionsProvider } from "../openai/chat-completions-provider.js";
3
3
  import type { SendMessageOptions } from "../types.js";
4
4
  import { hostedDirectionsExtraBody } from "./personality-directions.js";
@@ -42,7 +42,7 @@ mock.module("../../../config/assistant-feature-flags.js", () => ({
42
42
 
43
43
  // Mock platform detection: tests default to platform mode (SSRF enforced).
44
44
  // Individual tests can override via `mockIsPlatform = false`. Spread the real
45
- // module so the config loader's transitive `util/platform` imports still
45
+ // module so the config loader's transitive `util/layout` imports still
46
46
  // resolve — only `getIsCloud` is overridden.
47
47
  let mockIsPlatform = true;
48
48
 
@@ -371,7 +371,7 @@ export function createAdapterFromConnection(
371
371
  }
372
372
  const expectedFallback = FALLBACK_PROFILE_BY_KEY[primaryProfile];
373
373
  if (
374
- winner.entry?.source !== "managed" ||
374
+ winner.entry?.provider !== "cadet" ||
375
375
  winner.entry.fallbackProfile !== expectedFallback
376
376
  ) {
377
377
  return null;
@@ -17,7 +17,6 @@
17
17
  * default profile and on any legacy bare-`provider` callsite override.
18
18
  */
19
19
 
20
- import { MANAGED_PROFILE_NAMES } from "../../config/default-profile-catalog.js";
21
20
  import { getIsCloud } from "../../config/env-registry.js";
22
21
  import { loadRawConfig, saveRawConfig } from "../../config/loader.js";
23
22
  import type { DrizzleDb } from "../../persistence/db-connection.js";
@@ -207,17 +206,11 @@ function ensureProviderConnection(
207
206
  // custom-named connection already exists.
208
207
  //
209
208
  // Managed-owned entries are excluded: a cloud preset must stay on the
210
- // cloud route, not start dispatching against a key the user
211
- // brought for their own profiles. Managed-owned means `source: "managed"`
212
- // or a canonical managed name without an explicit `source: "user"` —
213
- // legacy seeders wrote canonical entries source-less, and only an explicit
214
- // user source marks a shadow the user took ownership of (mirrors
215
- // workspace migration 109). `entryLabel` is the profile name for the
209
+ // cloud route, not start dispatching against a key the user brought for
210
+ // their own profiles. `entryLabel` is the profile name for the
216
211
  // `llm.profiles.*` walk; the other walks pass bracketed labels that never
217
212
  // collide with canonical names.
218
- const isManagedOwned =
219
- entry.source === "managed" ||
220
- (entry.source !== "user" && MANAGED_PROFILE_NAMES.has(entryLabel));
213
+ const isManagedOwned = entry.provider === "cadet";
221
214
  const entryModel = typeof entry.model === "string" ? entry.model : undefined;
222
215
  const existingForProvider = isManagedOwned
223
216
  ? undefined
@@ -127,7 +127,7 @@ export async function probeInferenceProfile(
127
127
  ): Promise<ProfileCheck | null> {
128
128
  const { llm } = getConfigReadOnly();
129
129
  const entry = llm.profiles?.[name] as Record<string, unknown> | undefined;
130
- if (!entry || entry.status === "disabled" || entry.source === "managed") {
130
+ if (!entry || entry.status === "disabled" || entry.provider === "cadet") {
131
131
  return null;
132
132
  }
133
133
 
@@ -710,7 +710,6 @@ function normalizeSendMessageOptions(
710
710
  // (after the `openai` promptCacheKey copy above) so they never leak into
711
711
  // provider request bodies even when callers set them without a `callSite`.
712
712
  delete nextConfig.overrideProfile;
713
- delete nextConfig.overrideProfileOrigin;
714
713
  delete nextConfig.forceOverrideProfile;
715
714
  delete nextConfig.selectionSeed;
716
715
  delete nextConfig.conversationId;
@@ -725,7 +724,6 @@ function normalizeSendMessageOptions(
725
724
  const attribution = resolveUsageAttribution({
726
725
  callSite: config.callSite,
727
726
  overrideProfile: config.overrideProfile,
728
- overrideProfileOrigin: config.overrideProfileOrigin,
729
727
  forceOverrideProfile: config.forceOverrideProfile,
730
728
  selectionSeed: config.selectionSeed,
731
729
  });
@@ -346,13 +346,6 @@ export interface SendMessageConfig {
346
346
  * silently fall through.
347
347
  */
348
348
  overrideProfile?: string;
349
- /**
350
- * Who chose `overrideProfile`: `"auto"` when the Auto profile's router
351
- * picked it for the turn. Usage attribution reports it as the profile
352
- * source so a routed turn is not counted as a user pin. A routing-time
353
- * concern only; stripped before any provider wire request.
354
- */
355
- overrideProfileOrigin?: "auto";
356
349
  /**
357
350
  * When true, the resolver floats `overrideProfile` above the call-site
358
351
  * layers (named site profile + call-site override) for non-main-agent call
@@ -80,7 +80,7 @@ export class UsageTrackingProvider implements Provider {
80
80
  // A rerouted serve ran on the backup the wrapper chose, not on the
81
81
  // router's pick, so the origin applies only to the original route.
82
82
  ...(response.actualInferenceProfile === undefined
83
- ? { overrideProfileOrigin: config.overrideProfileOrigin }
83
+ ? {}
84
84
  : { forceOverrideProfile: true }),
85
85
  });
86
86
  const providerName = response.actualProvider ?? this.inner.name;
@@ -17,7 +17,7 @@ import {
17
17
  test,
18
18
  } from "bun:test";
19
19
 
20
- import { getProcPidPath, getProcSocketPath } from "../../util/platform.js";
20
+ import { getProcPidPath, getProcSocketPath } from "../../util/layout.js";
21
21
  import {
22
22
  RouteHostClient,
23
23
  RouteHostTimeoutError,
@@ -17,8 +17,8 @@
17
17
  */
18
18
 
19
19
  import { getConfigReadOnly } from "../config/loader.js";
20
+ import { getProcPidPath } from "../util/layout.js";
20
21
  import { getLogger } from "../util/logger.js";
21
- import { getProcPidPath } from "../util/platform.js";
22
22
  import {
23
23
  probeWorkerPidFile,
24
24
  spawnWorkerProcess,
@@ -23,8 +23,8 @@ import { connect, type Socket } from "node:net";
23
23
  import type { IpcEnvelope } from "@mycadet/ipc-server-utils";
24
24
  import { IpcFrameReader, writeMessage } from "@mycadet/ipc-server-utils";
25
25
 
26
+ import { getProcPidPath, getProcSocketPath } from "../util/layout.js";
26
27
  import { getLogger } from "../util/logger.js";
27
- import { getProcPidPath, getProcSocketPath } from "../util/platform.js";
28
28
  import { spawnWorkerProcess } from "../util/worker-process.js";
29
29
  import {
30
30
  ROUTE_HOST_PROC_NAME,
@@ -31,12 +31,12 @@ import {
31
31
  importRouteModule,
32
32
  sourceRootForHandler,
33
33
  } from "../runtime/routes/user-route-import.js";
34
- import { getLogger } from "../util/logger.js";
35
34
  import {
36
35
  ensureProcDir,
37
36
  getProcPidPath,
38
37
  getProcSocketPath,
39
- } from "../util/platform.js";
38
+ } from "../util/layout.js";
39
+ import { getLogger } from "../util/logger.js";
40
40
  import {
41
41
  cleanupWorkerPidFile,
42
42
  startWorkerPidFileGuard,
@@ -120,6 +120,7 @@ import {
120
120
  recordRequestLog,
121
121
  setAgentLoopExitReasonOnLatestLog,
122
122
  } from "../persistence/llm-request-log-store.js";
123
+ import { stampTurnOutcome } from "../persistence/turn-outcome.js";
123
124
  import type { SystemPromptPersonaOverride } from "../prompts/system-prompt.js";
124
125
  import type { Message, ToolDefinition } from "../providers/types.js";
125
126
  import { getScheduleRunStatus } from "../schedule/schedule-store.js";
@@ -127,7 +128,6 @@ import {
127
128
  type UntrustedContentSource,
128
129
  wrapUntrustedContent,
129
130
  } from "../security/untrusted-content.js";
130
- import { stampTurnOutcome } from "../telemetry/turn-outcome.js";
131
131
  import type { CompletedBackgroundTool } from "../tools/background-tool-registry.js";
132
132
  import { getLogger } from "../util/logger.js";
133
133
  import { safeStringSlice } from "../util/unicode.js";
@@ -68,8 +68,8 @@ import {
68
68
  SSE_REPLAY_RING_COUNT_LIMIT,
69
69
  } from "../api/constants/sse-replay.js";
70
70
  import type { AssistantEventEnvelope } from "../api/index.js";
71
+ import { getWorkspaceDir } from "../util/layout.js";
71
72
  import { getLogger } from "../util/logger.js";
72
- import { getWorkspaceDir } from "../util/platform.js";
73
73
  import type { AssistantEventPublishOptions } from "./assistant-event-publish-options.js";
74
74
  import {
75
75
  matchesTargeting,
@@ -22,8 +22,8 @@ import {
22
22
  import { dirname, join } from "node:path";
23
23
 
24
24
  import { getIsContainerized } from "../../config/env-registry.js";
25
+ import { getDeprecatedDir } from "../../util/layout.js";
25
26
  import { getLogger } from "../../util/logger.js";
26
- import { getDeprecatedDir } from "../../util/platform.js";
27
27
  import { isStaleEpoch } from "./policy.js";
28
28
  import type { ScopeProfile, TokenAudience, TokenClaims } from "./types.js";
29
29
 
@@ -28,8 +28,8 @@ import { emitBackgroundFailureSignal } from "../notifications/background-failure
28
28
  import { bootstrapConversation } from "../persistence/conversation-bootstrap.js";
29
29
  import { addMessage } from "../persistence/conversation-crud.js";
30
30
  import type { TitleOrigin } from "../persistence/conversation-title-service.js";
31
+ import type { TurnFailure } from "../persistence/turn-outcome.js";
31
32
  import { dispatchProviderResolvable } from "../providers/provider-resolvability.js";
32
- import type { TurnFailure } from "../telemetry/turn-outcome.js";
33
33
  import { getLogger } from "../util/logger.js";
34
34
  import { hasReceivedUserMessage } from "./pre-first-message-gate.js";
35
35
 
@@ -3,7 +3,7 @@
3
3
  */
4
4
 
5
5
  import { TwilioVoiceProvider } from "../../calls/twilio-provider.js";
6
- import { loadConfig } from "../../config/loader.js";
6
+ import { getConfig } from "../../config/loader.js";
7
7
  import { getPublicBaseUrl } from "../../inbound/public-ingress-urls.js";
8
8
  import { getLogger } from "../../util/logger.js";
9
9
  import { httpError } from "../http-errors.js";
@@ -84,7 +84,7 @@ export async function validateTwilioWebhook(
84
84
  // signature.
85
85
  let publicBaseUrl: string | undefined;
86
86
  try {
87
- publicBaseUrl = getPublicBaseUrl(loadConfig());
87
+ publicBaseUrl = getPublicBaseUrl(getConfig());
88
88
  } catch {
89
89
  // No webhook base URL configured -- fall back to using req.url as-is
90
90
  }
@@ -29,7 +29,7 @@ import {
29
29
  import { getDb } from "../../../persistence/db-connection.js";
30
30
  import { initializeDb } from "../../../persistence/db-init.js";
31
31
  import { appPins } from "../../../persistence/schema/index.js";
32
- import { getWorkspacePluginsDir } from "../../../util/platform.js";
32
+ import { getWorkspacePluginsDir } from "../../../util/layout.js";
33
33
  import { ROUTES as APP_ROUTES } from "../app-management-routes.js";
34
34
  import { BadRequestError } from "../errors.js";
35
35
  import type { RouteDefinition, RouteHandlerArgs } from "../types.js";
@@ -84,7 +84,7 @@ mock.module("../../../apps/app-pin-store.js", () => ({
84
84
  }));
85
85
 
86
86
  const { createApp } = await import("../../../apps/app-store.js");
87
- const { getWorkspacePluginsDir } = await import("../../../util/platform.js");
87
+ const { getWorkspacePluginsDir } = await import("../../../util/layout.js");
88
88
  const { ROUTES } = await import("../app-management-routes.js");
89
89
 
90
90
  function findHandler(operationId: string) {
@@ -22,15 +22,6 @@ mock.module("../../sync/resource-sync-events.js", () => ({
22
22
  },
23
23
  }));
24
24
 
25
- /** Every telemetry event the store records, in order. */
26
- const recorded: Array<{ name: string; fields: Record<string, unknown> }> = [];
27
- mock.module("../../../telemetry/telemetry-events-outbox.js", () => ({
28
- recordTelemetryEvent: (name: string, fields: Record<string, unknown>) => {
29
- recorded.push({ name, fields });
30
- return { id: "evt", createdAt: 0 };
31
- },
32
- }));
33
-
34
25
  import type { AvatarState } from "../../../avatar/avatar-manifest.js";
35
26
  import { writeManifest } from "../../../avatar/avatar-manifest.js";
36
27
  import { ROUTES } from "../avatar-routes.js";
@@ -253,7 +244,6 @@ describe("avatar write/remove handlers", () => {
253
244
  prevWorkspaceDir = process.env.CADET_WORKSPACE_DIR;
254
245
  process.env.CADET_WORKSPACE_DIR = workspaceDir;
255
246
  publishedOrigins.length = 0;
256
- recorded.length = 0;
257
247
  });
258
248
 
259
249
  afterEach(() => {
@@ -585,30 +575,10 @@ describe("avatar write/remove handlers", () => {
585
575
  });
586
576
  });
587
577
 
588
- describe("client OS on avatar_changed", () => {
589
- test("the client-os header reaches the event, sanitized", async () => {
590
- await uploadRed({ "x-cadet-client-os": " macOS " });
591
-
592
- expect(recorded).toHaveLength(1);
593
- expect(recorded[0]!.name).toBe("avatar_changed");
594
- expect(recorded[0]!.fields).toMatchObject({
595
- action: "upload_image",
596
- client_os: "macos",
597
- });
598
- });
578
+ test("the client id reaches the fan-out", async () => {
579
+ await uploadRed({ "x-cadet-client-id": "web-1" });
599
580
 
600
- test("an out-of-bounds client-os header is dropped, not forwarded", async () => {
601
- await uploadRed({ "x-cadet-client-os": "a".repeat(65) });
602
-
603
- expect(recorded).toHaveLength(1);
604
- expect(recorded[0]!.fields).not.toHaveProperty("client_os");
605
- });
606
-
607
- test("the client id reaches the fan-out", async () => {
608
- await uploadRed({ "x-cadet-client-id": "web-1" });
609
-
610
- expect(publishedOrigins).toEqual(["web-1"]);
611
- });
581
+ expect(publishedOrigins).toEqual(["web-1"]);
612
582
  });
613
583
  });
614
584