@mycadet/assistant 0.12.9 → 0.12.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (651) hide show
  1. package/Dockerfile +0 -8
  2. package/eslint-rules/__tests__/cli-no-daemon-internals.test.ts +1 -1
  3. package/openapi.yaml +62 -910
  4. package/package.json +3 -7
  5. package/scripts/build-test-fixtures.ts +1 -1
  6. package/scripts/generate-openapi.ts +22 -6
  7. package/scripts/postinstall.ts +4 -10
  8. package/scripts/run-tests.ts +0 -21
  9. package/src/__tests__/adaptive-thinking-repair.test.ts +19 -57
  10. package/src/__tests__/agent-loop.test.ts +0 -76
  11. package/src/__tests__/anthropic-provider.test.ts +6 -6
  12. package/src/__tests__/assert-not-live-db.ts +1 -1
  13. package/src/__tests__/assistant-id-boundary-guard.test.ts +3 -3
  14. package/src/__tests__/attachments-store-heic-normalize.test.ts +1 -1
  15. package/src/__tests__/attachments-store.test.ts +1 -1
  16. package/src/__tests__/audit-log-rotation.test.ts +1 -1
  17. package/src/__tests__/btw-routes.test.ts +1 -1
  18. package/src/__tests__/byok-default-profile-ensure.test.ts +21 -27
  19. package/src/__tests__/call-conversation-messages.test.ts +0 -5
  20. package/src/__tests__/call-recovery.test.ts +2 -7
  21. package/src/__tests__/call-routes-http.test.ts +0 -12
  22. package/src/__tests__/call-store.test.ts +2 -7
  23. package/src/__tests__/catalog-files.test.ts +7 -5
  24. package/src/__tests__/checker.test.ts +1 -1
  25. package/src/__tests__/cli-memory-v2-reembed-skills.test.ts +4 -4
  26. package/src/__tests__/cloud-client-verify-credential.test.ts +0 -4
  27. package/src/__tests__/cloud-credential-catalog-cli.test.ts +14 -14
  28. package/src/__tests__/cloud-profile-guard.test.ts +48 -401
  29. package/src/__tests__/compaction-events.test.ts +2 -2
  30. package/src/__tests__/config-loader-backfill.test.ts +74 -163
  31. package/src/__tests__/config-loader-cloud-defaults.test.ts +11 -11
  32. package/src/__tests__/config-loader-corrupt.test.ts +10 -10
  33. package/src/__tests__/config-loader-quarantine-notice.test.ts +7 -7
  34. package/src/__tests__/config-loader-validation-reset-notice.test.ts +11 -11
  35. package/src/__tests__/config-schema.test.ts +26 -27
  36. package/src/__tests__/config-set-route.test.ts +2 -6
  37. package/src/__tests__/conversation-agent-loop-inference-profile.test.ts +28 -300
  38. package/src/__tests__/conversation-agent-loop-overflow.test.ts +39 -246
  39. package/src/__tests__/conversation-agent-loop.test.ts +2 -58
  40. package/src/__tests__/conversation-clear-safety.test.ts +0 -30
  41. package/src/__tests__/conversation-inference-profile-route.test.ts +1 -1
  42. package/src/__tests__/conversation-queue.test.ts +1 -1
  43. package/src/__tests__/conversation-runtime-assembly.test.ts +1 -1
  44. package/src/__tests__/conversation-skill-tools.test.ts +4 -444
  45. package/src/__tests__/conversation-slash-commands.test.ts +1 -1
  46. package/src/__tests__/conversation-store.test.ts +1 -84
  47. package/src/__tests__/conversation-surface-state.test.ts +0 -16
  48. package/src/__tests__/credential-health-service.test.ts +14 -1
  49. package/src/__tests__/credential-record-retire.test.ts +1 -1
  50. package/src/__tests__/credential-record-write-through.test.ts +1 -1
  51. package/src/__tests__/credential-security-invariants.test.ts +0 -145
  52. package/src/__tests__/custom-profile-ensure.test.ts +1 -1
  53. package/src/__tests__/default-profile-catalog-fallback.test.ts +5 -15
  54. package/src/__tests__/deterministic-verification-control-plane.test.ts +0 -2
  55. package/src/__tests__/dictation-profile-store.test.ts +6 -6
  56. package/src/__tests__/disk-usage.test.ts +28 -164
  57. package/src/__tests__/docker-signing-key-bootstrap.test.ts +1 -1
  58. package/src/__tests__/embedding-cloud-proxy-selection.test.ts +1 -1
  59. package/src/__tests__/emit-event-signal.test.ts +1 -1
  60. package/src/__tests__/gateway-client-cloud-outbound.test.ts +3 -3
  61. package/src/__tests__/gateway-only-enforcement.test.ts +1 -1
  62. package/src/__tests__/guardian-dispatch.test.ts +0 -13
  63. package/src/__tests__/helpers/seed-app.ts +1 -1
  64. package/src/__tests__/host-cu-routes-targeted.test.ts +1 -1
  65. package/src/__tests__/host-shell-tool.test.ts +1 -1
  66. package/src/__tests__/identity-routes.test.ts +1 -1
  67. package/src/__tests__/inference-profile-session-handler.test.ts +1 -1
  68. package/src/__tests__/inference-profile-session-ipc.test.ts +1 -1
  69. package/src/__tests__/injector-chain.test.ts +1 -1
  70. package/src/__tests__/injector-config-quarantine-notice.test.ts +1 -1
  71. package/src/__tests__/injector-config-validation-reset-notice.test.ts +1 -1
  72. package/src/__tests__/injector-pkb-v2-silenced.test.ts +1 -1
  73. package/src/__tests__/{platform.test.ts → layout.test.ts} +1 -1
  74. package/src/__tests__/list-all-apps.test.ts +1 -1
  75. package/src/__tests__/live-workspace-guard.test.ts +2 -2
  76. package/src/__tests__/llm-resolver-override-or-default.test.ts +5 -6
  77. package/src/__tests__/llm-resolver.test.ts +7 -7
  78. package/src/__tests__/llm-schema-fallback-profile.test.ts +9 -10
  79. package/src/__tests__/llm-usage-store.test.ts +0 -495
  80. package/src/__tests__/log-export-routes.test.ts +1 -1
  81. package/src/__tests__/mcp-config-secret-boundary.test.ts +12 -53
  82. package/src/__tests__/mcp-list-plugin-servers.test.ts +1 -1
  83. package/src/__tests__/memory-config-file-parity.test.ts +1 -1
  84. package/src/__tests__/memory-v2-static-injector.test.ts +1 -1
  85. package/src/__tests__/messages-read-boundary-guard.test.ts +0 -2
  86. package/src/__tests__/notification-guardian-path.test.ts +0 -7
  87. package/src/__tests__/onboarding-persona-write.test.ts +1 -1
  88. package/src/__tests__/openai-provider.test.ts +8 -8
  89. package/src/__tests__/path-policy.test.ts +1 -1
  90. package/src/__tests__/persona-resolver.test.ts +1 -1
  91. package/src/__tests__/plugin-app-serve-routes.test.ts +1 -1
  92. package/src/__tests__/plugin-effective-enabled-set.test.ts +1 -1
  93. package/src/__tests__/plugin-import-boundary-guard.test.ts +4 -6
  94. package/src/__tests__/plugin-import-boundary-reverse-guard.test.ts +0 -3
  95. package/src/__tests__/provider-cloud-proxy-integration.test.ts +1 -5
  96. package/src/__tests__/provider-connections-backfill.test.ts +10 -10
  97. package/src/__tests__/prune-old-conversations-job.test.ts +6 -31
  98. package/src/__tests__/resolve-app.test.ts +1 -1
  99. package/src/__tests__/run-due-schedules.test.ts +1 -1
  100. package/src/__tests__/scaffold-managed-skill-tool.test.ts +0 -53
  101. package/src/__tests__/schedule-routes.test.ts +1 -1
  102. package/src/__tests__/schedule-store.test.ts +1 -1
  103. package/src/__tests__/secret-routes-cloud-proxy.test.ts +1 -1
  104. package/src/__tests__/skill-load-plugin-scope.test.ts +1 -1
  105. package/src/__tests__/surface-completion-compaction-boundary.test.ts +1 -1
  106. package/src/__tests__/tool-approval-handler.test.ts +1 -1
  107. package/src/__tests__/tool-audit.test.ts +5 -235
  108. package/src/__tests__/tool-executor-lifecycle-events.test.ts +54 -114
  109. package/src/__tests__/tools-get-route.test.ts +1 -1
  110. package/src/__tests__/turn-outcome-read.test.ts +1 -1
  111. package/src/__tests__/twilio-routes.test.ts +0 -1
  112. package/src/__tests__/usage-attribution.test.ts +0 -31
  113. package/src/__tests__/verification-control-plane-policy.test.ts +3 -10
  114. package/src/__tests__/visible-app-context.test.ts +1 -1
  115. package/src/__tests__/voice-ingress-preflight.test.ts +1 -1
  116. package/src/__tests__/workspace-git-service.test.ts +1 -1
  117. package/src/__tests__/workspace-greetings.test.ts +1 -1
  118. package/src/acp/__tests__/helpers/acp-config-stub.ts +1 -1
  119. package/src/activation/progress-store.ts +1 -1
  120. package/src/activation/turn-hooks.ts +1 -1
  121. package/src/agent/loop.ts +0 -51
  122. package/src/apps/app-store.ts +1 -1
  123. package/src/avatar/__tests__/avatar-store.test.ts +2 -172
  124. package/src/avatar/accent-backfill.ts +1 -1
  125. package/src/avatar/avatar-manifest.ts +1 -1
  126. package/src/avatar/avatar-store.ts +10 -69
  127. package/src/avatar/ensure-raster.ts +1 -1
  128. package/src/avatar/identity-avatar.ts +1 -1
  129. package/src/avatar/sync-avatar.ts +1 -1
  130. package/src/avatar/traits-png-sync.ts +1 -1
  131. package/src/bundler/compiler-tools.ts +1 -1
  132. package/src/bundler/package-resolver.ts +1 -1
  133. package/src/calls/__tests__/call-controller.test.ts +25 -27
  134. package/src/calls/active-call-lease.ts +1 -1
  135. package/src/calls/call-controller.ts +3 -3
  136. package/src/calls/call-domain.ts +4 -8
  137. package/src/calls/call-store.ts +2 -76
  138. package/src/calls/resolve-call-tts-provider.ts +3 -3
  139. package/src/calls/twilio-config.ts +3 -3
  140. package/src/calls/twilio-rest.ts +2 -2
  141. package/src/calls/voice-ingress-preflight.ts +2 -2
  142. package/src/cli/bundled-modules.ts +0 -2
  143. package/src/cli/commands/__tests__/apps.test.ts +1 -1
  144. package/src/cli/commands/__tests__/plugins.test.ts +9 -66
  145. package/src/cli/commands/__tests__/ps.test.ts +67 -0
  146. package/src/cli/commands/auth.help.ts +2 -2
  147. package/src/cli/commands/avatar.ts +1 -1
  148. package/src/cli/commands/changelog.ts +1 -1
  149. package/src/cli/commands/cloud/__tests__/subscription.test.ts +2 -2
  150. package/src/cli/commands/cloud/index.help.ts +1 -1
  151. package/src/cli/commands/cloud/index.ts +2 -2
  152. package/src/cli/commands/db/refresh.ts +1 -1
  153. package/src/cli/commands/db/repair-step-conversation-backfill.ts +1 -1
  154. package/src/cli/commands/db/repair.ts +1 -1
  155. package/src/cli/commands/db/status.ts +1 -1
  156. package/src/cli/commands/inference-profiles.ts +1 -12
  157. package/src/cli/commands/memory/__tests__/memory-v3.test.ts +1 -116
  158. package/src/cli/commands/memory/index.help.ts +1 -43
  159. package/src/cli/commands/memory/memory-v3.ts +0 -64
  160. package/src/cli/commands/plugins.ts +54 -205
  161. package/src/cli/commands/ps.ts +5 -2
  162. package/src/cli/commands/status.ts +1 -1
  163. package/src/cli/index.help.ts +0 -2
  164. package/src/cli/lib/__tests__/inspect-plugin.test.ts +36 -66
  165. package/src/cli/lib/__tests__/install-from-cloud.test.ts +1 -1
  166. package/src/cli/lib/__tests__/install-from-github.test.ts +41 -117
  167. package/src/cli/lib/__tests__/plugin-catalog-cache.test.ts +2 -185
  168. package/src/cli/lib/__tests__/plugin-catalog-resolve.test.ts +36 -66
  169. package/src/cli/lib/__tests__/plugin-catalog-visibility.test.ts +4 -6
  170. package/src/cli/lib/__tests__/plugin-details.test.ts +113 -96
  171. package/src/cli/lib/__tests__/search-plugins.test.ts +9 -16
  172. package/src/cli/lib/__tests__/uninstall-plugin.test.ts +1 -1
  173. package/src/cli/lib/__tests__/upgrade-plugin.test.ts +38 -15
  174. package/src/cli/lib/diff-plugin.ts +1 -1
  175. package/src/cli/lib/inspect-plugin.ts +13 -97
  176. package/src/cli/lib/install-from-cloud.ts +1 -1
  177. package/src/cli/lib/install-from-github.ts +75 -154
  178. package/src/cli/lib/install-plugin-dependencies.ts +1 -1
  179. package/src/cli/lib/list-installed-plugins.ts +1 -1
  180. package/src/cli/lib/open-browser.ts +1 -1
  181. package/src/cli/lib/plugin-catalog-cache.ts +8 -51
  182. package/src/cli/lib/plugin-catalog-resolve.ts +3 -22
  183. package/src/cli/lib/plugin-details.ts +5 -27
  184. package/src/cli/lib/plugin-marketplace.ts +18 -266
  185. package/src/cli/lib/search-plugins.ts +23 -43
  186. package/src/cli/lib/toggle-plugin.ts +1 -1
  187. package/src/cli/lib/uninstall-plugin.ts +1 -1
  188. package/src/cli/lib/upgrade-plugin.ts +3 -49
  189. package/src/cli/program.ts +1 -3
  190. package/src/cli.ts +1 -1
  191. package/src/cloud/client.ts +0 -6
  192. package/src/cloud/consent-cache.test.ts +22 -201
  193. package/src/cloud/consent-cache.ts +16 -111
  194. package/src/cloud/sync-identity.ts +1 -1
  195. package/src/config/__tests__/chat-settings.test.ts +1 -1
  196. package/src/config/__tests__/cloud-identity.test.ts +15 -2
  197. package/src/config/__tests__/default-plugin-skill-discovery.test.ts +1 -1
  198. package/src/config/__tests__/default-profile-catalog.test.ts +12 -51
  199. package/src/config/__tests__/deployment-context-defaults.test.ts +13 -13
  200. package/src/config/__tests__/loader-callsite-strip-fallback.test.ts +4 -4
  201. package/src/config/__tests__/loader-last-known-good.test.ts +9 -9
  202. package/src/config/__tests__/loader-sparse-array-cleanup.test.ts +7 -7
  203. package/src/config/__tests__/plugin-resident-skill-discovery.test.ts +1 -1
  204. package/src/config/__tests__/profile-materialization.test.ts +2 -4
  205. package/src/config/__tests__/sync-gated-profiles.test.ts +1 -106
  206. package/src/config/acp-agent-write.ts +1 -1
  207. package/src/config/bundled-skills/settings/tools/open-system-settings.test.ts +1 -1
  208. package/src/config/bundled-skills/settings/tools/open-system-settings.ts +1 -1
  209. package/src/config/call-site-defaults.ts +0 -6
  210. package/src/config/cloud-identity.ts +12 -5
  211. package/src/config/composer-preferences.ts +1 -1
  212. package/src/config/default-profile-catalog.ts +8 -75
  213. package/src/config/default-profile-names.ts +2 -25
  214. package/src/config/env-registry.ts +1 -14
  215. package/src/config/env.ts +8 -6
  216. package/src/config/llm-resolver.ts +1 -2
  217. package/src/config/loader.ts +13 -17
  218. package/src/config/profile-materialization.ts +1 -1
  219. package/src/config/schema.ts +1 -7
  220. package/src/config/schemas/call-site-catalog.ts +0 -7
  221. package/src/config/schemas/llm.ts +22 -27
  222. package/src/config/seed-inference-profiles.ts +16 -17
  223. package/src/config/skills.ts +2 -2
  224. package/src/config/sync-gated-profiles.ts +6 -24
  225. package/src/credential-health/credential-health-service.ts +10 -3
  226. package/src/daemon/approval-generators.ts +3 -3
  227. package/src/daemon/config-watcher.ts +2 -2
  228. package/src/daemon/conversation-agent-loop-handlers.ts +0 -18
  229. package/src/daemon/conversation-agent-loop.ts +6 -97
  230. package/src/daemon/conversation-process.ts +1 -1
  231. package/src/daemon/conversation-skill-tools.ts +4 -72
  232. package/src/daemon/conversation-store.ts +1 -1
  233. package/src/daemon/conversation-surface-state.ts +0 -33
  234. package/src/daemon/conversation-surfaces.ts +1 -86
  235. package/src/daemon/conversation-tool-setup.test.ts +1 -1
  236. package/src/daemon/conversation-tool-setup.ts +0 -23
  237. package/src/daemon/conversation.ts +3 -5
  238. package/src/daemon/daemon-control.ts +3 -3
  239. package/src/daemon/dictation-profile-store.ts +3 -3
  240. package/src/daemon/event-loop-watchdog.test.ts +2 -198
  241. package/src/daemon/event-loop-watchdog.ts +0 -185
  242. package/src/daemon/external-plugins-bootstrap.ts +1 -1
  243. package/src/daemon/first-greeting.ts +1 -1
  244. package/src/daemon/handlers/skills.ts +1 -1
  245. package/src/daemon/host-app-control-proxy.ts +1 -1
  246. package/src/daemon/host-cu-proxy.ts +2 -2
  247. package/src/daemon/identity-helpers.ts +1 -1
  248. package/src/daemon/lifecycle.ts +11 -15
  249. package/src/daemon/main.ts +1 -1
  250. package/src/daemon/now-scratchpad.ts +1 -1
  251. package/src/daemon/process-message.ts +4 -4
  252. package/src/daemon/profiler-run-store.ts +2 -2
  253. package/src/daemon/providers-setup.ts +2 -2
  254. package/src/daemon/shutdown-handlers.ts +0 -10
  255. package/src/daemon/sqlite-corruption-watchdog.test.ts +2 -142
  256. package/src/daemon/sqlite-corruption-watchdog.ts +17 -81
  257. package/src/daemon/tool-side-effects.ts +1 -1
  258. package/src/desktop/desktop-session-manager.ts +1 -1
  259. package/src/desktop/desktop-wallpaper-renderer.ts +1 -1
  260. package/src/heartbeat/heartbeat-service.ts +1 -1
  261. package/src/home/feed-writer.ts +1 -1
  262. package/src/home/home-greeting-cache.ts +1 -1
  263. package/src/home/relationship-state-writer.ts +2 -2
  264. package/src/hooks/__tests__/hook-live-reload.test.ts +1 -1
  265. package/src/hooks/hook-loader.ts +2 -2
  266. package/src/inbound/__tests__/oauth-callback-url.test.ts +2 -2
  267. package/src/inbound/oauth-callback-url.ts +3 -3
  268. package/src/ipc/__tests__/attachment-ipc.test.ts +1 -1
  269. package/src/ipc/socket-path.ts +1 -1
  270. package/src/live-voice/__tests__/live-voice-archive.test.ts +1 -1
  271. package/src/live-voice/__tests__/live-voice-vad.test.ts +1 -1
  272. package/src/live-voice/live-voice-session.ts +3 -66
  273. package/src/mcp/__tests__/effective-config.test.ts +1 -1
  274. package/src/mcp/__tests__/mcp-oauth-client-registration.test.ts +2 -2
  275. package/src/mcp/__tests__/mcp-oauth-provider.test.ts +2 -3
  276. package/src/mcp/__tests__/reload-signal-emission.test.ts +1 -1
  277. package/src/mcp/__tests__/reload-signal.test.ts +1 -1
  278. package/src/mcp/__tests__/workspace-mcp-config.test.ts +19 -21
  279. package/src/mcp/reload-signal.ts +1 -1
  280. package/src/mcp/workspace-mcp-config.ts +1 -23
  281. package/src/messaging/draft-store.ts +1 -1
  282. package/src/monitoring/__tests__/active-conversations.test.ts +1 -1
  283. package/src/monitoring/__tests__/page-cache.test.ts +1 -1
  284. package/src/monitoring/__tests__/stall-capture.test.ts +1 -1
  285. package/src/monitoring/__tests__/workspace-git-heartbeat.test.ts +1 -1
  286. package/src/monitoring/active-conversations.ts +1 -1
  287. package/src/monitoring/control.ts +1 -1
  288. package/src/monitoring/daemon-boot-time.ts +1 -1
  289. package/src/monitoring/daemon-heartbeat.ts +1 -1
  290. package/src/monitoring/page-cache.ts +1 -1
  291. package/src/monitoring/plugin-auto-update.ts +1 -7
  292. package/src/monitoring/plugin-source-watch.ts +1 -1
  293. package/src/monitoring/recovery/db.ts +1 -1
  294. package/src/monitoring/recovery/inflight-content.ts +1 -1
  295. package/src/monitoring/resource-sampler.ts +3 -14
  296. package/src/monitoring/stall-capture.ts +1 -1
  297. package/src/monitoring/worker.ts +9 -76
  298. package/src/monitoring/workspace-git-heartbeat.ts +1 -1
  299. package/src/oauth/connect-orchestrator.ts +4 -4
  300. package/src/permissions/checker.ts +1 -1
  301. package/src/permissions/workspace-policy.ts +1 -1
  302. package/src/persistence/__tests__/main-db-readonly-probe.ts +27 -52
  303. package/src/persistence/__tests__/message-content-file.test.ts +1 -1
  304. package/src/persistence/__tests__/slow-sync-log.test.ts +0 -2
  305. package/src/persistence/attachments-store.ts +1 -1
  306. package/src/persistence/conversation-crud.ts +1 -38
  307. package/src/persistence/conversation-directories.ts +1 -1
  308. package/src/persistence/conversation-types.ts +0 -8
  309. package/src/persistence/db-async-query.ts +1 -1
  310. package/src/persistence/db-connection.ts +11 -1
  311. package/src/persistence/db-init.ts +1 -1
  312. package/src/persistence/db-maintenance.ts +1 -1
  313. package/src/persistence/embeddings/__tests__/embedding-local-lifecycle.test.ts +1 -1
  314. package/src/persistence/embeddings/embedding-local.ts +4 -4
  315. package/src/persistence/embeddings/embedding-runtime-manager.ts +1 -1
  316. package/src/persistence/embeddings/qdrant-client.ts +1 -1
  317. package/src/persistence/embeddings/qdrant-manager.ts +1 -1
  318. package/src/persistence/job-handlers/__tests__/message-lexical-backfill.test.ts +1 -1
  319. package/src/persistence/job-handlers/__tests__/message-lexical-enqueue.test.ts +1 -1
  320. package/src/persistence/job-handlers/cleanup.ts +8 -17
  321. package/src/persistence/llm-usage-store.ts +2 -229
  322. package/src/persistence/message-content-file.ts +1 -1
  323. package/src/persistence/migrations/209-strip-thinking-from-consolidated.ts +1 -1
  324. package/src/persistence/migrations/222-strip-placeholder-sentinels-from-messages.ts +1 -1
  325. package/src/persistence/migrations/296-rewrite-balanced-economy-profile-pins.test.ts +1 -1
  326. package/src/persistence/migrations/306-rewrite-frontier-profile-pins.test.ts +1 -1
  327. package/src/persistence/migrations/329-move-onboarding-events-to-telemetry-db.test.ts +13 -0
  328. package/src/persistence/migrations/330-move-auth-fallback-events-to-telemetry-db.test.ts +13 -0
  329. package/src/persistence/migrations/331-move-lifecycle-events-to-telemetry-db.test.ts +13 -0
  330. package/src/persistence/migrations/332-move-skill-loaded-events-to-telemetry-db.test.ts +13 -0
  331. package/src/persistence/migrations/333-create-telemetry-events-table.test.ts +7 -4
  332. package/src/persistence/migrations/334-backfill-telemetry-events-outbox.test.ts +13 -0
  333. package/src/persistence/migrations/387-drop-telemetry-tables.ts +51 -0
  334. package/src/persistence/migrations/__tests__/327-create-flush-checkpoints.test.ts +9 -1
  335. package/src/persistence/migrations/__tests__/387-drop-telemetry-tables.test.ts +79 -0
  336. package/src/persistence/migrations/helpers/relocation.ts +1 -1
  337. package/src/persistence/migrations/run-migrations.ts +1 -1
  338. package/src/persistence/migrations/validate-migration-state.ts +1 -1
  339. package/src/persistence/raw-query.ts +1 -29
  340. package/src/persistence/slow-sync-log.ts +0 -23
  341. package/src/persistence/steps.ts +2 -0
  342. package/src/{telemetry → persistence}/tool-audit.ts +6 -121
  343. package/src/plugin-api/index.ts +1 -1
  344. package/src/plugin-api/plugin-name-env.ts +1 -1
  345. package/src/plugins/__tests__/installed-plugin-dirs.test.ts +1 -1
  346. package/src/plugins/collect-source-versions.ts +1 -1
  347. package/src/plugins/defaults/channel/package.json +1 -1
  348. package/src/plugins/defaults/cloud-hosted/package.json +1 -1
  349. package/src/plugins/defaults/compaction/package.json +1 -1
  350. package/src/plugins/defaults/documents/package.json +1 -1
  351. package/src/plugins/defaults/empty-response/package.json +1 -1
  352. package/src/plugins/defaults/exploration-drift/package.json +1 -1
  353. package/src/plugins/defaults/image-fallback/package.json +1 -1
  354. package/src/plugins/defaults/image-recovery/package.json +1 -1
  355. package/src/plugins/defaults/max-tokens-continue/package.json +1 -1
  356. package/src/plugins/defaults/memory/__tests__/db-async-query.test.ts +1 -1
  357. package/src/plugins/defaults/memory/__tests__/db-maintenance.test.ts +1 -1
  358. package/src/plugins/defaults/memory/__tests__/memory-retrospective-job.test.ts +0 -82
  359. package/src/plugins/defaults/memory/__tests__/memory-retrospective-skill-card.test.ts +0 -41
  360. package/src/plugins/defaults/memory/__tests__/memory-tier-boundary-guard.test.ts +0 -2
  361. package/src/plugins/defaults/memory/memory-retrospective-job.ts +3 -52
  362. package/src/plugins/defaults/memory/memory-retrospective-skill-card.ts +0 -18
  363. package/src/plugins/defaults/memory/package.json +1 -1
  364. package/src/plugins/defaults/memory/paths.ts +4 -4
  365. package/src/plugins/defaults/memory/src/__tests__/memory-worker-routes.test.ts +1 -1
  366. package/src/plugins/defaults/memory/src/memory-v2-routes.ts +5 -5
  367. package/src/plugins/defaults/memory/src/memory-v3-routes.ts +0 -207
  368. package/src/plugins/defaults/memory/src/memory-worker-routes.ts +1 -1
  369. package/src/plugins/defaults/memory/startup.ts +1 -22
  370. package/src/plugins/defaults/memory/v3/__tests__/orchestrate.test.ts +2 -253
  371. package/src/plugins/defaults/memory/v3/orchestrate.ts +5 -129
  372. package/src/plugins/defaults/memory/worker-control.ts +1 -1
  373. package/src/plugins/defaults/memory/worker.ts +2 -2
  374. package/src/plugins/defaults/session/package.json +1 -1
  375. package/src/plugins/defaults/surface-completion-nudge/package.json +1 -1
  376. package/src/plugins/defaults/task-progress/package.json +1 -1
  377. package/src/plugins/defaults/task-progress-nudge/package.json +1 -1
  378. package/src/plugins/defaults/title-generate/package.json +1 -1
  379. package/src/plugins/defaults/tool-error/package.json +1 -1
  380. package/src/plugins/defaults/tool-result-truncate/package.json +1 -1
  381. package/src/plugins/defaults/turn-context/package.json +1 -1
  382. package/src/plugins/defaults/workspace/injectors.ts +1 -1
  383. package/src/plugins/defaults/workspace/package.json +1 -1
  384. package/src/plugins/disabled-state.ts +1 -1
  385. package/src/plugins/ensure-plugin-api-shim.ts +1 -1
  386. package/src/plugins/ensure-shared-dep-links.ts +1 -1
  387. package/src/plugins/installed-plugin-dirs.ts +1 -1
  388. package/src/plugins/mcp-servers.ts +7 -9
  389. package/src/plugins/mtime-cache.ts +2 -2
  390. package/src/plugins/source-versions.ts +1 -1
  391. package/src/prompts/bootstrap-cleanup.ts +1 -1
  392. package/src/prompts/persona-resolver.ts +1 -1
  393. package/src/prompts/sections.ts +2 -2
  394. package/src/prompts/system-prompt.ts +10 -42
  395. package/src/prompts/templates/BOOTSTRAP-ACTIVATION-RAIL.md +0 -37
  396. package/src/providers/__tests__/cadet-connection-routing.test.ts +2 -2
  397. package/src/providers/cadet/client.ts +1 -1
  398. package/src/providers/inference/__tests__/base-url-route-validation.test.ts +1 -1
  399. package/src/providers/inference/adapter-factory.ts +1 -1
  400. package/src/providers/inference/backfill.ts +3 -10
  401. package/src/providers/inference/profile-probe.ts +1 -1
  402. package/src/providers/retry.ts +0 -2
  403. package/src/providers/types.ts +0 -7
  404. package/src/providers/usage-tracking.ts +1 -1
  405. package/src/routes/__tests__/route-host.test.ts +1 -1
  406. package/src/routes/control.ts +1 -1
  407. package/src/routes/route-host-client.ts +1 -1
  408. package/src/routes/worker.ts +2 -2
  409. package/src/runtime/agent-wake.ts +1 -1
  410. package/src/runtime/assistant-stream-state.ts +1 -1
  411. package/src/runtime/auth/token-service.ts +1 -1
  412. package/src/runtime/background-job-runner.ts +1 -1
  413. package/src/runtime/middleware/twilio-validation.ts +2 -2
  414. package/src/runtime/routes/__tests__/app-pin-routes.test.ts +1 -1
  415. package/src/runtime/routes/__tests__/apps-refresh-route.test.ts +1 -1
  416. package/src/runtime/routes/__tests__/avatar-state-routes.test.ts +3 -33
  417. package/src/runtime/routes/__tests__/cloud-credits-routes.test.ts +5 -4
  418. package/src/runtime/routes/__tests__/cloud-invoice-routes.test.ts +4 -3
  419. package/src/runtime/routes/__tests__/conversation-query-routes.test.ts +59 -287
  420. package/src/runtime/routes/__tests__/default-plugin-routes.test.ts +1 -1
  421. package/src/runtime/routes/__tests__/deprecated-route-context.test.ts +15 -62
  422. package/src/runtime/routes/__tests__/inference-profiles-routes.test.ts +105 -12
  423. package/src/runtime/routes/__tests__/ingress-status-routes.test.ts +1 -1
  424. package/src/runtime/routes/__tests__/monitoring-routes.test.ts +1 -1
  425. package/src/runtime/routes/__tests__/plugins-routes.test.ts +47 -211
  426. package/src/runtime/routes/__tests__/route-host-worker-routes.test.ts +1 -1
  427. package/src/runtime/routes/__tests__/schedule-routes-disarm-reason.test.ts +1 -1
  428. package/src/runtime/routes/__tests__/schedule-worker-routes.test.ts +1 -1
  429. package/src/runtime/routes/__tests__/user-route-dispatcher-host.test.ts +1 -1
  430. package/src/runtime/routes/__tests__/user-route-dispatcher.test.ts +1 -1
  431. package/src/runtime/routes/__tests__/user-routes-cli.test.ts +1 -1
  432. package/src/runtime/routes/__tests__/user-routes-notices.test.ts +1 -1
  433. package/src/runtime/routes/__tests__/user-routes-request.test.ts +1 -1
  434. package/src/runtime/routes/app-management-routes.ts +1 -1
  435. package/src/runtime/routes/attachment-routes.ts +1 -1
  436. package/src/runtime/routes/audit-routes.ts +1 -1
  437. package/src/runtime/routes/avatar-routes.ts +3 -10
  438. package/src/runtime/routes/cloud-routes.ts +3 -3
  439. package/src/runtime/routes/content-source-routes.ts +1 -1
  440. package/src/runtime/routes/conversation-query-routes.ts +60 -621
  441. package/src/runtime/routes/conversation-routes.ts +1 -38
  442. package/src/runtime/routes/debug-routes.ts +1 -1
  443. package/src/runtime/routes/deprecated-route-context.ts +5 -61
  444. package/src/runtime/routes/heartbeat-routes.ts +1 -1
  445. package/src/runtime/routes/identity-routes.ts +1 -1
  446. package/src/runtime/routes/index.ts +0 -6
  447. package/src/runtime/routes/inference-profile-session-handler.ts +3 -3
  448. package/src/runtime/routes/inference-profiles-routes.ts +48 -21
  449. package/src/runtime/routes/inference-provider-connection-routes.ts +0 -1
  450. package/src/runtime/routes/llm-call-sites-routes.ts +3 -3
  451. package/src/runtime/routes/log-export/__tests__/installed-inventory.test.ts +1 -1
  452. package/src/runtime/routes/log-export/__tests__/workspace-allowlist-error-contract.test.ts +1 -1
  453. package/src/runtime/routes/log-export/__tests__/workspace-allowlist.test.ts +1 -1
  454. package/src/runtime/routes/log-export/workspace-allowlist.ts +1 -1
  455. package/src/runtime/routes/log-export-routes.ts +17 -15
  456. package/src/runtime/routes/migration-rollback-routes.ts +1 -1
  457. package/src/runtime/routes/migration-routes.ts +2 -3
  458. package/src/runtime/routes/monitoring-routes.ts +2 -2
  459. package/src/runtime/routes/oauth-providers.ts +5 -5
  460. package/src/runtime/routes/plugins-routes.ts +38 -163
  461. package/src/runtime/routes/profiler-routes.ts +1 -1
  462. package/src/runtime/routes/route-host-worker-routes.ts +1 -1
  463. package/src/runtime/routes/sanity-routes.ts +1 -1
  464. package/src/runtime/routes/schedule-routes.ts +1 -1
  465. package/src/runtime/routes/schedule-worker-routes.ts +1 -1
  466. package/src/runtime/routes/settings-routes.ts +1 -1
  467. package/src/runtime/routes/sounds-config-routes.ts +1 -1
  468. package/src/runtime/routes/surface-conversation-resolver.ts +1 -7
  469. package/src/runtime/routes/user-route-dispatcher.ts +1 -3
  470. package/src/runtime/routes/user-route-import.ts +1 -1
  471. package/src/runtime/routes/user-route-resolution.ts +1 -1
  472. package/src/runtime/routes/user-routes-cli.ts +1 -1
  473. package/src/runtime/routes/workspace-commit-routes.ts +1 -1
  474. package/src/runtime/routes/workspace-greetings.ts +1 -1
  475. package/src/runtime/routes/workspace-routes.ts +1 -1
  476. package/src/runtime/routes/workspace-utils.ts +1 -1
  477. package/src/runtime/sync/resource-sync-events.ts +1 -1
  478. package/src/schedule/__tests__/plugin-schedule-declarations.test.ts +1 -1
  479. package/src/schedule/__tests__/plugin-schedule-reconciler.test.ts +1 -1
  480. package/src/schedule/plugin-schedule-availability.ts +1 -1
  481. package/src/schedule/plugin-schedule-declarations.ts +1 -1
  482. package/src/schedule/run-script.ts +1 -1
  483. package/src/schedule/scheduler.ts +1 -11
  484. package/src/schedule/worker-control.ts +1 -1
  485. package/src/schedule/worker.ts +3 -3
  486. package/src/security/oauth2.ts +2 -2
  487. package/src/security/secret-allowlist.ts +1 -1
  488. package/src/signals/cancel.ts +1 -1
  489. package/src/signals/conversation-undo.ts +1 -1
  490. package/src/signals/emit-event.ts +1 -1
  491. package/src/signals/event-stream.ts +1 -1
  492. package/src/signals/user-message.ts +1 -1
  493. package/src/skills/catalog-install.ts +2 -1
  494. package/src/skills/clawhub.ts +1 -1
  495. package/src/skills/cloud-store.ts +1 -1
  496. package/src/skills/path-classifier.ts +1 -1
  497. package/src/skills/skill-history.ts +1 -1
  498. package/src/skills/skillssh-registry.ts +1 -1
  499. package/src/skills/uninstall.ts +1 -1
  500. package/src/skills/workspace-skill-md-signature.ts +1 -1
  501. package/src/subagent/manager.ts +1 -1
  502. package/src/theme/workspace-theme.ts +1 -1
  503. package/src/tools/browser/auth-cache.ts +1 -1
  504. package/src/tools/browser/browser-manager.ts +1 -1
  505. package/src/tools/browser/runtime-check.ts +1 -1
  506. package/src/tools/executor.ts +4 -4
  507. package/src/tools/filesystem/write.ts +1 -1
  508. package/src/tools/permission-checker.ts +2 -51
  509. package/src/tools/run-standalone.ts +1 -1
  510. package/src/tools/skills/format-input-schema.ts +1 -1
  511. package/src/tools/skills/load.ts +1 -1
  512. package/src/tools/skills/scaffold-cloud.ts +0 -32
  513. package/src/tools/terminal/safe-env.ts +1 -2
  514. package/src/tools/terminal/sanitized-bash.ts +1 -1
  515. package/src/tools/terminal/shell.ts +1 -1
  516. package/src/tools/tool-approval-handler.ts +4 -1
  517. package/src/tools/workflows/manage-workflows.ts +2 -2
  518. package/src/tools/workflows/run-workflow.test.ts +1 -1
  519. package/src/tools/workspace-tools/loader.ts +1 -1
  520. package/src/tts/synthesis-stream.ts +2 -2
  521. package/src/usage/attribution.ts +1 -11
  522. package/src/util/browser.ts +1 -1
  523. package/src/util/bun-runtime.ts +2 -1
  524. package/src/util/device-id.ts +1 -1
  525. package/src/util/disk-usage.ts +4 -139
  526. package/src/util/layout.ts +3 -3
  527. package/src/util/logger.ts +1 -1
  528. package/src/util/logs-db-path.ts +1 -1
  529. package/src/util/memory-db-path.ts +1 -1
  530. package/src/util/{platform.ts → os.ts} +5 -30
  531. package/src/util/process-tree.ts +19 -0
  532. package/src/util/sqlite3-runtime.ts +1 -1
  533. package/src/util/telemetry-db-path.ts +1 -1
  534. package/src/watcher/__tests__/engine.test.ts +0 -23
  535. package/src/watcher/engine.ts +0 -7
  536. package/src/windows-compiled-cli.ts +0 -4
  537. package/src/windows-compiled-worker-entry.ts +0 -6
  538. package/src/workflows/leaf-runner.test.ts +1 -1
  539. package/src/workflows/leaf-runner.ts +1 -1
  540. package/src/workflows/library.ts +1 -1
  541. package/src/workspace/adaptive-thinking-repair.ts +5 -24
  542. package/src/workspace/byok-default-profile-ensure.ts +24 -26
  543. package/src/workspace/custom-profile-ensure.ts +2 -2
  544. package/src/workspace/git-service.ts +1 -1
  545. package/src/workspace/hatched-date.ts +1 -1
  546. package/src/workspace/migrations/038-unify-llm-callsite-configs.ts +2 -2
  547. package/src/workspace/migrations/040-seed-latency-callsite-defaults.ts +1 -1
  548. package/src/workspace/migrations/050-seed-main-agent-opus-callsite.ts +1 -1
  549. package/src/workspace/migrations/077-seed-memory-router-callsite.ts +1 -1
  550. package/src/workspace/migrations/registry.ts +0 -4
  551. package/src/workspace/turn-commit.ts +1 -1
  552. package/docs/activation-funnel-telemetry.md +0 -324
  553. package/scripts/bundled-plugin-packages.ts +0 -154
  554. package/scripts/generate-bundled-plugin-packages.ts +0 -29
  555. package/src/__tests__/activation-early-marking.test.ts +0 -114
  556. package/src/__tests__/auth-fallback-events-store.test.ts +0 -99
  557. package/src/__tests__/config-get-vision-flag.test.ts +0 -139
  558. package/src/__tests__/conversation-surfaces-activation-emit.test.ts +0 -400
  559. package/src/__tests__/internal-telemetry-routes.test.ts +0 -213
  560. package/src/__tests__/telemetry-routes.test.ts +0 -182
  561. package/src/__tests__/turn-events-store.test.ts +0 -376
  562. package/src/__tests__/ui-channel-variants.test.ts +0 -53
  563. package/src/avatar/__tests__/avatar-changed-telemetry.test.ts +0 -217
  564. package/src/avatar/avatar-changed-telemetry.ts +0 -128
  565. package/src/calls/__tests__/call-funnel-telemetry.test.ts +0 -204
  566. package/src/cli/commands/telemetry.help.ts +0 -27
  567. package/src/cli/commands/telemetry.ts +0 -83
  568. package/src/cli/lib/__tests__/local-plugin-upgrade.test.ts +0 -251
  569. package/src/cli/lib/__tests__/plugin-catalog-local.test.ts +0 -113
  570. package/src/cli/lib/__tests__/plugin-marketplace.test.ts +0 -384
  571. package/src/cli/lib/__tests__/plugin-pin-history.test.ts +0 -164
  572. package/src/cli/lib/__tests__/plugins-install-offline.test.ts +0 -228
  573. package/src/cli/lib/bundled-marketplace.json +0 -1575
  574. package/src/cli/lib/bundled-plugin-packages.json +0 -827
  575. package/src/cli/lib/bundled-plugin-packages.ts +0 -87
  576. package/src/cli/lib/plugin-catalog-local.ts +0 -94
  577. package/src/cli/lib/plugin-pin-history.ts +0 -276
  578. package/src/cloud/feature-gate.ts +0 -8
  579. package/src/config/__tests__/cloud-rehydration.test.ts +0 -180
  580. package/src/config/cloud-rehydration.ts +0 -35
  581. package/src/daemon/__tests__/auto-profile-router.test.ts +0 -380
  582. package/src/daemon/auto-profile-router.ts +0 -428
  583. package/src/live-voice/__tests__/live-voice-session-telemetry.test.ts +0 -391
  584. package/src/monitoring/__tests__/db-integrity-sample.test.ts +0 -113
  585. package/src/monitoring/__tests__/oom-kill-reporter.test.ts +0 -374
  586. package/src/monitoring/db-integrity-check.ts +0 -163
  587. package/src/monitoring/db-integrity-sample.ts +0 -176
  588. package/src/monitoring/oom-kill-reporter.ts +0 -469
  589. package/src/onboarding/__tests__/onboarding-events-store.test.ts +0 -158
  590. package/src/onboarding/onboarding-events-store.ts +0 -296
  591. package/src/persistence/__tests__/raw-query-telemetry.test.ts +0 -76
  592. package/src/persistence/lifecycle-events-store.test.ts +0 -134
  593. package/src/persistence/lifecycle-events-store.ts +0 -110
  594. package/src/plugins/defaults/memory/__tests__/activation-session-store.test.ts +0 -76
  595. package/src/plugins/defaults/memory/activation-session-store.ts +0 -50
  596. package/src/plugins/defaults/memory/src/__tests__/memory-v3-gate-stats.test.ts +0 -281
  597. package/src/runtime/routes/auto-profile-routes.ts +0 -83
  598. package/src/runtime/routes/internal-telemetry-routes.ts +0 -142
  599. package/src/runtime/routes/telemetry-routes.ts +0 -274
  600. package/src/security/auth-fallback-events-store.ts +0 -57
  601. package/src/telemetry/__tests__/activation-funnel.test.ts +0 -95
  602. package/src/telemetry/__tests__/config-setting-events-store.test.ts +0 -63
  603. package/src/telemetry/__tests__/config-setting-snapshot.test.ts +0 -143
  604. package/src/telemetry/__tests__/flush-checkpoints.test.ts +0 -56
  605. package/src/telemetry/__tests__/live-voice-funnel.test.ts +0 -174
  606. package/src/telemetry/__tests__/outbox-test-harness.ts +0 -85
  607. package/src/telemetry/__tests__/phone-call-funnel.test.ts +0 -72
  608. package/src/telemetry/__tests__/telemetry-event-fixtures.ts +0 -282
  609. package/src/telemetry/__tests__/watchdog-events-store.test.ts +0 -71
  610. package/src/telemetry/activation-funnel.ts +0 -172
  611. package/src/telemetry/config-setting-events-store.ts +0 -40
  612. package/src/telemetry/config-setting-snapshot.ts +0 -170
  613. package/src/telemetry/flush-checkpoints.ts +0 -70
  614. package/src/telemetry/live-voice-funnel.ts +0 -185
  615. package/src/telemetry/memory-corpus-size.test.ts +0 -120
  616. package/src/telemetry/memory-corpus-size.ts +0 -184
  617. package/src/telemetry/memory-tier-reporter.test.ts +0 -195
  618. package/src/telemetry/memory-tier-reporter.ts +0 -130
  619. package/src/telemetry/phone-call-funnel.ts +0 -144
  620. package/src/telemetry/skill-loaded-events-store.test.ts +0 -93
  621. package/src/telemetry/skill-loaded-events-store.ts +0 -39
  622. package/src/telemetry/telemetry-event-sources.test.ts +0 -223
  623. package/src/telemetry/telemetry-event-sources.ts +0 -597
  624. package/src/telemetry/telemetry-events-outbox.test.ts +0 -375
  625. package/src/telemetry/telemetry-events-outbox.ts +0 -237
  626. package/src/telemetry/telemetry-main-db.ts +0 -48
  627. package/src/telemetry/telemetry-wire-source.json +0 -4
  628. package/src/telemetry/telemetry-wire-validation.test.ts +0 -157
  629. package/src/telemetry/telemetry-wire-validation.ts +0 -162
  630. package/src/telemetry/telemetry-wire.generated.ts +0 -483
  631. package/src/telemetry/tool-executed-events-store.test.ts +0 -210
  632. package/src/telemetry/tool-executed-events-store.ts +0 -102
  633. package/src/telemetry/trace-collection-policy.test.ts +0 -28
  634. package/src/telemetry/trace-collection-policy.ts +0 -30
  635. package/src/telemetry/turn-events-store.ts +0 -216
  636. package/src/telemetry/turn-trace-store.test.ts +0 -884
  637. package/src/telemetry/turn-trace-store.ts +0 -399
  638. package/src/telemetry/types.test.ts +0 -38
  639. package/src/telemetry/types.ts +0 -780
  640. package/src/telemetry/usage-telemetry-reporter.test.ts +0 -3445
  641. package/src/telemetry/usage-telemetry-reporter.ts +0 -566
  642. package/src/telemetry/watchdog-direct-emit.test.ts +0 -112
  643. package/src/telemetry/watchdog-direct-emit.ts +0 -104
  644. package/src/telemetry/watchdog-events-store.ts +0 -31
  645. package/src/tools/ui-surface/channel-variants.ts +0 -52
  646. package/src/watcher/__tests__/telemetry.test.ts +0 -178
  647. package/src/watcher/telemetry.ts +0 -93
  648. package/src/workspace/migrations/097-enable-adaptive-thinking-managed-profiles.ts +0 -165
  649. package/src/workspace/migrations/104-recheck-adaptive-thinking-model-implied-anthropic.ts +0 -151
  650. /package/src/{telemetry → persistence}/tool-usage-store.ts +0 -0
  651. /package/src/{telemetry → persistence}/turn-outcome.ts +0 -0
@@ -1,87 +0,0 @@
1
- /**
2
- * Materialize reviewed local marketplace packages from the generated bundle.
3
- * Package keys come from plugins/marketplace.json and never resolve against a
4
- * caller-controlled filesystem root.
5
- */
6
-
7
- import { mkdirSync, writeFileSync } from "node:fs";
8
- import { dirname, join } from "node:path";
9
-
10
- import bundledPackages from "./bundled-plugin-packages.json" with { type: "json" };
11
-
12
- interface BundledPackageFile {
13
- readonly path: string;
14
- readonly contentBase64: string;
15
- }
16
-
17
- interface BundledPackage {
18
- readonly version: string;
19
- readonly files: readonly BundledPackageFile[];
20
- }
21
-
22
- const packages = bundledPackages.packages as Record<string, BundledPackage>;
23
-
24
- export class BundledPluginPackageError extends Error {
25
- constructor(message: string) {
26
- super(message);
27
- this.name = "BundledPluginPackageError";
28
- }
29
- }
30
-
31
- /** Return the embedded package when its path and version match the catalog. */
32
- export function getBundledPluginPackage(
33
- path: string,
34
- version: string,
35
- ): BundledPackage | null {
36
- const pluginPackage = packages[path];
37
- return pluginPackage?.version === version ? pluginPackage : null;
38
- }
39
-
40
- /** Read one UTF-8 file from an exact embedded package. */
41
- export function readBundledPluginFile(
42
- path: string,
43
- version: string,
44
- filePath: string,
45
- ): string | null {
46
- const file = getBundledPluginPackage(path, version)?.files.find(
47
- (candidate) => candidate.path === filePath,
48
- );
49
- return file
50
- ? Buffer.from(file.contentBase64, "base64").toString("utf8")
51
- : null;
52
- }
53
-
54
- /** Copy one exact embedded package into an existing staging directory. */
55
- export function materializeBundledPluginPackage(
56
- path: string,
57
- version: string,
58
- destination: string,
59
- ): number {
60
- const pluginPackage = getBundledPluginPackage(path, version);
61
- if (!pluginPackage) {
62
- throw new BundledPluginPackageError(
63
- `Bundled plugin package ${path} @ ${version} is unavailable`,
64
- );
65
- }
66
-
67
- for (const file of pluginPackage.files) {
68
- if (
69
- file.path.length === 0 ||
70
- file.path.startsWith("/") ||
71
- file.path.includes("\\") ||
72
- file.path
73
- .split("/")
74
- .some(
75
- (segment) => segment === "." || segment === ".." || segment === "",
76
- )
77
- ) {
78
- throw new BundledPluginPackageError(
79
- `Bundled plugin package ${path} contains an unsafe file path`,
80
- );
81
- }
82
- const target = join(destination, ...file.path.split("/"));
83
- mkdirSync(dirname(target), { recursive: true });
84
- writeFileSync(target, Buffer.from(file.contentBase64, "base64"));
85
- }
86
- return pluginPackage.files.length;
87
- }
@@ -1,94 +0,0 @@
1
- /**
2
- * Offline plugin catalog reader backed by the manifest bundled into the
3
- * package at build time. `bundled-marketplace.json` is a generated artifact
4
- * (git-ignored) that meta/sync-bundled-copies.ts copies from the canonical
5
- * plugins/marketplace.json before every build, test, and install — the same
6
- * treatment as the feature-flag registry.
7
- *
8
- * `getPluginCatalog` selects this reader only when platform features are
9
- * disabled (air-gapped / self-hosted, `CADET_DISABLE_CLOUD=true`). Importing
10
- * the JSON directly (resolveJsonModule) inlines it into the bundle, so there is
11
- * no filesystem path resolution and the manifest is always present at runtime —
12
- * it works identically in dev, Docker, and an npm-packed macOS install.
13
- */
14
-
15
- import bundledManifest from "./bundled-marketplace.json" with { type: "json" };
16
- import {
17
- isPluginCatalogEntryVisible,
18
- type PluginCatalogFeatureFlagResolver,
19
- } from "./plugin-catalog-visibility.js";
20
- import {
21
- type MarketplaceEntry,
22
- marketplaceManifestSchema,
23
- type ResolvedPluginSource,
24
- resolveMarketplaceSource,
25
- } from "./plugin-marketplace.js";
26
- import {
27
- type PluginCatalog,
28
- projectMarketplaceEntries,
29
- } from "./search-plugins.js";
30
-
31
- // Re-exported so `local`-tagged CLI commands can gate on platform features
32
- // without importing `platform/` directly (cli/no-daemon-internals allows lib).
33
- export { areCloudFeaturesEnabled } from "../../cloud/feature-gate.js";
34
- export { isPluginCatalogEntryVisible };
35
-
36
- let memoizedEntries: readonly MarketplaceEntry[] | undefined;
37
-
38
- /** Validated bundled manifest entries, parsed once and reused. */
39
- function bundledEntries(): readonly MarketplaceEntry[] {
40
- memoizedEntries ??= marketplaceManifestSchema.parse(bundledManifest).plugins;
41
- return memoizedEntries;
42
- }
43
-
44
- /**
45
- * Validate and project a marketplace manifest into a {@link PluginCatalog}:
46
- * every entry deduped by name, projected, and sorted alphabetically. A
47
- * malformed bundled manifest is a build defect, so parsing throws rather than
48
- * silently degrading. Defaults to the bundled manifest (parsed once); tests
49
- * pass an override to assert it throws on invalid input.
50
- */
51
- export function buildBundledPluginCatalog(
52
- rawManifest: unknown = bundledManifest,
53
- ): PluginCatalog {
54
- const plugins =
55
- rawManifest === bundledManifest
56
- ? bundledEntries()
57
- : marketplaceManifestSchema.parse(rawManifest).plugins;
58
- return { ref: "bundled", matches: projectMarketplaceEntries(plugins) };
59
- }
60
-
61
- let memoized: PluginCatalog | undefined;
62
-
63
- /** Memoized {@link buildBundledPluginCatalog}, so the mapping runs once. */
64
- export function readBundledPluginCatalog(): PluginCatalog {
65
- memoized ??= buildBundledPluginCatalog();
66
- return memoized;
67
- }
68
-
69
- /** Local packages the current assistant release can materialize itself. */
70
- export function readBundledLocalPluginCatalog(): PluginCatalog {
71
- return {
72
- ref: "bundled",
73
- matches: projectMarketplaceEntries(
74
- bundledEntries().filter((entry) => entry.source.source === "local"),
75
- ),
76
- };
77
- }
78
-
79
- /**
80
- * Resolve an install name to its exact source from the bundled manifest, or
81
- * `null` when no bundled entry claims the name. The offline analogue of
82
- * resolving against the remote-fetched marketplace, used when platform
83
- * features are disabled and `assistant plugins install <name>` must resolve the
84
- * pin without any network call.
85
- */
86
- export function resolveBundledPluginSource(
87
- name: string,
88
- isFeatureFlagEnabled?: PluginCatalogFeatureFlagResolver,
89
- ): ResolvedPluginSource | null {
90
- if (!isPluginCatalogEntryVisible(name, isFeatureFlagEnabled)) {
91
- return null;
92
- }
93
- return resolveMarketplaceSource(name, bundledEntries());
94
- }
@@ -1,276 +0,0 @@
1
- /**
2
- * Reconstruct the history of marketplace pins for a single plugin.
3
- *
4
- * The curated `plugins/marketplace.json` manifest (see {@link ./plugin-marketplace})
5
- * records only the *current* pin for each plugin — there is no stored version
6
- * list. But the manifest is a file in a Git repo, and every time a curator bumps
7
- * a plugin's pin, that is a commit to the manifest. So the history of reviewed
8
- * pins already exists as the commit history of that one file: this module walks
9
- * it (newest → oldest) via the GitHub API and reports the distinct pins a plugin
10
- * has been promoted to over time, each tagged with the marketplace commit an
11
- * install can reproduce it from.
12
- *
13
- * Why this is the safe source for "install an older version": every commit on
14
- * the default branch was reviewed and merged, so a pin drawn from this history
15
- * is a reviewed, known-good revision — unlike an arbitrary caller-supplied ref,
16
- * which the install route deliberately refuses. Resolving an older pin to the
17
- * marketplace commit that introduced it (rather than the plugin SHA directly)
18
- * also means the install reads that era's manifest, so the curated adapter stub
19
- * matches the pin and the historical version reproduces coherently.
20
- *
21
- * Designed for direct programmatic use with an injected `fetch`, mirroring the
22
- * sibling plugin libraries.
23
- */
24
-
25
- import type { FetchLike } from "./fetch-like.js";
26
- import { sanitizePluginName } from "./install-from-github.js";
27
- import { DEFAULT_PIN_HISTORY_LIMIT } from "./plugin-constants.js";
28
- import {
29
- fetchMarketplaceEntries,
30
- MARKETPLACE_MANIFEST_LOCATION,
31
- } from "./plugin-marketplace.js";
32
- import { USER_AGENT } from "./user-agent.js";
33
-
34
- /**
35
- * Cap on how many manifest-touching commits are inspected in one walk. Bounds
36
- * the GitHub API cost: a plugin whose pin changes rarely could otherwise force
37
- * a fetch of the manifest at every commit that touched it for *any* plugin.
38
- * Well above {@link DEFAULT_PIN_HISTORY_LIMIT} so the default listing is
39
- * complete in all but pathological histories.
40
- */
41
- const MAX_MARKETPLACE_COMMITS_SCANNED = 100;
42
-
43
- /** A single point in a plugin's marketplace-pin history. */
44
- export interface PluginPinHistoryEntry {
45
- /** Plugin commit SHA pinned at this point in history. */
46
- readonly pin: string;
47
- /**
48
- * Marketplace-manifest commit to install this pin from — the newest commit
49
- * that carries it. Installing with this as the marketplace ref reproduces the
50
- * pin together with the curated adapter stub of the same era.
51
- */
52
- readonly marketplaceCommit: string;
53
- /**
54
- * ISO-8601 committer date (UTC) of {@link PluginPinHistoryEntry.marketplaceCommit},
55
- * i.e. when this pin was promoted; `null` when the date could not be read.
56
- */
57
- readonly promotedAt: string | null;
58
- /** True for the pin currently active on the default branch. */
59
- readonly current: boolean;
60
- }
61
-
62
- /** Options controlling the pin-history walk. */
63
- export interface ListPinHistoryOptions {
64
- /** Max distinct pins to return (newest first). Defaults to {@link DEFAULT_PIN_HISTORY_LIMIT}. */
65
- readonly limit?: number;
66
- /** Marketplace branch to read history from. Defaults to `main`. */
67
- readonly ref?: string;
68
- }
69
-
70
- /** Dependencies injected by the caller. */
71
- export interface ListPinHistoryDeps {
72
- /** HTTP client. Production callers pass `globalThis.fetch.bind(globalThis)`. */
73
- readonly fetch: FetchLike;
74
- }
75
-
76
- /** Shape of a commit entry from the GitHub commits API. */
77
- interface GitHubCommitListEntry {
78
- readonly sha: string;
79
- readonly commit: {
80
- readonly committer?: { readonly date?: string } | null;
81
- } | null;
82
- }
83
-
84
- /** A manifest-touching commit and its committer date. */
85
- interface ManifestCommit {
86
- readonly sha: string;
87
- readonly date: string | null;
88
- }
89
-
90
- /** The pin-history walk could not read the marketplace commit list. */
91
- export class PluginPinHistoryError extends Error {
92
- constructor(message: string) {
93
- super(message);
94
- this.name = "PluginPinHistoryError";
95
- }
96
- }
97
-
98
- /**
99
- * List the commits that touched the marketplace manifest on `ref`, newest
100
- * first, capped at {@link MAX_MARKETPLACE_COMMITS_SCANNED}. A 404 (the file
101
- * never existed at this ref) yields an empty list.
102
- */
103
- async function listManifestCommits(
104
- ref: string,
105
- fetchFn: FetchLike,
106
- ): Promise<ManifestCommit[]> {
107
- const { owner, repo, path } = MARKETPLACE_MANIFEST_LOCATION;
108
- const url =
109
- `https://api.github.com/repos/${owner}/${repo}/commits` +
110
- `?path=${encodeURIComponent(path)}` +
111
- `&sha=${encodeURIComponent(ref)}` +
112
- `&per_page=${MAX_MARKETPLACE_COMMITS_SCANNED}`;
113
-
114
- const res = await fetchFn(url, {
115
- headers: {
116
- Accept: "application/vnd.github+json",
117
- "User-Agent": USER_AGENT,
118
- },
119
- });
120
- if (res.status === 404) {
121
- return [];
122
- }
123
- if (!res.ok) {
124
- throw new PluginPinHistoryError(
125
- `Marketplace commit history fetch failed for ${path} @ ${ref}: HTTP ${res.status}`,
126
- );
127
- }
128
-
129
- let body: unknown;
130
- try {
131
- body = JSON.parse(await res.text());
132
- } catch (err) {
133
- throw new PluginPinHistoryError(
134
- `Marketplace commit history is not valid JSON: ${
135
- err instanceof Error ? err.message : String(err)
136
- }`,
137
- );
138
- }
139
- if (!Array.isArray(body)) {
140
- throw new PluginPinHistoryError(
141
- "Marketplace commit history response was not an array",
142
- );
143
- }
144
-
145
- const commits: ManifestCommit[] = [];
146
- for (const item of body as GitHubCommitListEntry[]) {
147
- if (typeof item?.sha !== "string") {
148
- continue;
149
- }
150
- const rawDate = item.commit?.committer?.date;
151
- commits.push({
152
- sha: item.sha,
153
- date: typeof rawDate === "string" ? rawDate : null,
154
- });
155
- }
156
- return commits;
157
- }
158
-
159
- /**
160
- * Resolve the plugin's pinned SHA in the manifest at a specific marketplace
161
- * commit, or `null` when no entry claims the name at that revision.
162
- */
163
- async function pinAtCommit(
164
- name: string,
165
- marketplaceCommit: string,
166
- fetchFn: FetchLike,
167
- ): Promise<string | null> {
168
- const entries = await fetchMarketplaceEntries(
169
- { fetch: fetchFn },
170
- { ref: marketplaceCommit },
171
- );
172
- const source = entries.find((entry) => entry.name === name)?.source;
173
- return source?.source === "github" ? source.ref : null;
174
- }
175
-
176
- /**
177
- * Walk a plugin's distinct marketplace pins, newest first. Each pin is yielded
178
- * once, tagged with the newest marketplace commit carrying it. Revisions where
179
- * the plugin is absent from the manifest are skipped (a gap, not a pin). The
180
- * `current` flag is set against the pin live on `ref` today.
181
- *
182
- * Bounded by {@link MAX_MARKETPLACE_COMMITS_SCANNED} commits scanned.
183
- */
184
- async function* iteratePinHistory(
185
- name: string,
186
- ref: string,
187
- fetchFn: FetchLike,
188
- ): AsyncGenerator<PluginPinHistoryEntry> {
189
- const commits = await listManifestCommits(ref, fetchFn);
190
- if (commits.length === 0) {
191
- return;
192
- }
193
-
194
- // The pin live on the branch today, used to flag the current entry. Reading
195
- // it explicitly (rather than assuming the newest commit carries it) stays
196
- // correct even if the plugin was just removed from the manifest at the tip.
197
- const currentPin = await pinAtCommit(name, ref, fetchFn);
198
-
199
- let lastPin: string | null = null;
200
- for (const commit of commits) {
201
- const pin = await pinAtCommit(name, commit.sha, fetchFn);
202
- if (pin === null) {
203
- continue;
204
- }
205
- if (pin === lastPin) {
206
- continue;
207
- }
208
- lastPin = pin;
209
- yield {
210
- pin,
211
- marketplaceCommit: commit.sha,
212
- promotedAt: commit.date,
213
- current: currentPin !== null && pin === currentPin,
214
- };
215
- }
216
- }
217
-
218
- /**
219
- * List a plugin's distinct marketplace pins, newest first, capped at
220
- * `limit` (default {@link DEFAULT_PIN_HISTORY_LIMIT}). The first entry is the
221
- * current pin. An empty list means the plugin has no resolvable history at this
222
- * ref (never in the manifest, or the manifest does not exist).
223
- *
224
- * Throws {@link PluginPinHistoryError} when the commit list cannot be read, and
225
- * propagates a `MarketplaceFetchError` if a manifest revision fails to parse.
226
- */
227
- export async function listPinHistory(
228
- name: string,
229
- deps: ListPinHistoryDeps,
230
- opts: ListPinHistoryOptions = {},
231
- ): Promise<PluginPinHistoryEntry[]> {
232
- const sanitized = sanitizePluginName(name);
233
- const ref = opts.ref ?? "main";
234
- const limit = opts.limit ?? DEFAULT_PIN_HISTORY_LIMIT;
235
-
236
- const out: PluginPinHistoryEntry[] = [];
237
- for await (const entry of iteratePinHistory(sanitized, ref, deps.fetch)) {
238
- out.push(entry);
239
- if (out.length >= limit) {
240
- break;
241
- }
242
- }
243
- return out;
244
- }
245
-
246
- /**
247
- * Resolve a plugin pin (a full commit SHA) to the marketplace commit it should
248
- * be installed from, by searching the plugin's pin history. Returns `null` when
249
- * the pin is not found in the scanned history — i.e. it is not a reviewed pin
250
- * this plugin was ever promoted to (or it predates the scan window).
251
- *
252
- * Case-insensitive on the SHA, matching the rest of the install pipeline. The
253
- * search walks the full scan window, not just the `limit` shown by
254
- * {@link listPinHistory}, so a pin older than the default listing still
255
- * resolves.
256
- */
257
- export async function resolvePinToMarketplaceCommit(
258
- name: string,
259
- pin: string,
260
- deps: ListPinHistoryDeps,
261
- opts: { readonly ref?: string } = {},
262
- ): Promise<PluginPinHistoryEntry | null> {
263
- const sanitized = sanitizePluginName(name);
264
- const ref = opts.ref ?? "main";
265
- const target = pin.trim().toLowerCase();
266
- if (target.length === 0) {
267
- return null;
268
- }
269
-
270
- for await (const entry of iteratePinHistory(sanitized, ref, deps.fetch)) {
271
- if (entry.pin.toLowerCase() === target) {
272
- return entry;
273
- }
274
- }
275
- return null;
276
- }
@@ -1,8 +0,0 @@
1
- import { getDisableCloud, getIsCloud } from "../config/env-registry.js";
2
-
3
- export function areCloudFeaturesEnabled(): boolean {
4
- if (getIsCloud()) {
5
- return true;
6
- }
7
- return !getDisableCloud();
8
- }
@@ -1,180 +0,0 @@
1
- import { afterEach, beforeEach, describe, expect, mock, test } from "bun:test";
2
-
3
- import { credentialKey } from "../../security/credential-key.js";
4
-
5
- let mockSecureKeys: Record<string, string> = {};
6
- let throwForKey: string | undefined;
7
-
8
- mock.module("../../security/secure-keys.js", () => ({
9
- getSecureKeyAsync: async (key: string) => {
10
- if (throwForKey && key === throwForKey) {
11
- throw new Error("credential store unreachable");
12
- }
13
- return mockSecureKeys[key] ?? undefined;
14
- },
15
- // Peer tests in a combined run import this name from the same module; stub
16
- // it so their ESM named-import validation is satisfied when this mock wins.
17
- deleteSecureKeyAsync: async () => ({ deleted: false }),
18
- }));
19
-
20
- const {
21
- getCloudAssistantId,
22
- getCloudOrganizationId,
23
- getCloudUserId,
24
- setCloudAssistantId,
25
- setCloudOrganizationId,
26
- setCloudUserId,
27
- } = await import("../env.js");
28
- const { _resetCloudIdentityEnsureForTests } =
29
- await import("../cloud-identity.js");
30
- const { rehydrateCloudCredentials } = await import("../cloud-rehydration.js");
31
-
32
- const PROD_URL = "https://cloud.mycadet.ai";
33
- const ASSISTANT_ID = "11111111-2222-4333-8444-555555555555";
34
- const ORG_ID = "22222222-3333-4444-8555-666666666666";
35
- const USER_ID = "33333333-4444-4555-8666-777777777777";
36
-
37
- describe("rehydrateCloudCredentials", () => {
38
- const originalCloudUrlEnv = process.env.CADET_CLOUD_URL;
39
- const originalOrgEnv = process.env.CLOUD_ORGANIZATION_ID;
40
- const originalUserEnv = process.env.CLOUD_USER_ID;
41
- const originalAssistantApiKeyEnv = process.env.ASSISTANT_API_KEY;
42
- const originalFetch = globalThis.fetch;
43
- const fetchCalls: Array<{ url: string; init?: RequestInit }> = [];
44
- let fetchImpl: (
45
- input: RequestInfo | URL,
46
- init?: RequestInit,
47
- ) => Promise<Response> = async () =>
48
- new Response("not found", { status: 404 });
49
-
50
- beforeEach(() => {
51
- mockSecureKeys = {};
52
- throwForKey = undefined;
53
- fetchCalls.length = 0;
54
- fetchImpl = async () => new Response("not found", { status: 404 });
55
- globalThis.fetch = (async (
56
- input: RequestInfo | URL,
57
- init?: RequestInit,
58
- ) => {
59
- const url = typeof input === "string" ? input : input.toString();
60
- fetchCalls.push({ url, init });
61
- return fetchImpl(input, init);
62
- }) as unknown as typeof fetch;
63
- // Env vars take precedence over the rehydrated overrides for some fields;
64
- // clear them so the credential-store values are what we observe.
65
- delete process.env.CADET_CLOUD_URL;
66
- delete process.env.CLOUD_ORGANIZATION_ID;
67
- delete process.env.CLOUD_USER_ID;
68
- delete process.env.ASSISTANT_API_KEY;
69
- // Reset in-memory overrides between tests.
70
- setCloudAssistantId(undefined);
71
- setCloudOrganizationId(undefined);
72
- setCloudUserId(undefined);
73
- _resetCloudIdentityEnsureForTests();
74
- });
75
-
76
- afterEach(() => {
77
- globalThis.fetch = originalFetch;
78
- if (originalCloudUrlEnv === undefined) {
79
- delete process.env.CADET_CLOUD_URL;
80
- } else {
81
- process.env.CADET_CLOUD_URL = originalCloudUrlEnv;
82
- }
83
- if (originalOrgEnv === undefined) {
84
- delete process.env.PLATFORM_ORGANIZATION_ID;
85
- } else {
86
- process.env.CLOUD_ORGANIZATION_ID = originalOrgEnv;
87
- }
88
- if (originalUserEnv === undefined) {
89
- delete process.env.PLATFORM_USER_ID;
90
- } else {
91
- process.env.CLOUD_USER_ID = originalUserEnv;
92
- }
93
- if (originalAssistantApiKeyEnv === undefined) {
94
- delete process.env.ASSISTANT_API_KEY;
95
- } else {
96
- process.env.ASSISTANT_API_KEY = originalAssistantApiKeyEnv;
97
- }
98
- setCloudAssistantId(undefined);
99
- setCloudOrganizationId(undefined);
100
- setCloudUserId(undefined);
101
- });
102
-
103
- test("leaves overrides untouched when nothing is stored", async () => {
104
- await rehydrateCloudCredentials();
105
-
106
- expect(getCloudAssistantId()).toBe("");
107
- expect(getCloudOrganizationId()).toBe("");
108
- expect(getCloudUserId()).toBe("");
109
- });
110
-
111
- test("a credential-store read failure does not throw", async () => {
112
- throwForKey = credentialKey("cadet", "assistant_api_key");
113
-
114
- await expect(rehydrateCloudCredentials()).resolves.toBeUndefined();
115
- expect(getCloudAssistantId()).toBe("");
116
- });
117
-
118
- test("trades the assistant API key for ids via cloud validate", async () => {
119
- process.env.CADET_CLOUD_URL = PROD_URL;
120
- mockSecureKeys[credentialKey("cadet", "assistant_api_key")] =
121
- "assistant-key";
122
- fetchImpl = async () =>
123
- new Response(
124
- JSON.stringify({
125
- assistant_id: ASSISTANT_ID,
126
- organization_id: ORG_ID,
127
- user_id: USER_ID,
128
- }),
129
- { status: 200 },
130
- );
131
-
132
- await rehydrateCloudCredentials();
133
-
134
- expect(fetchCalls).toHaveLength(1);
135
- expect(fetchCalls[0]?.url).toBe(
136
- `${PROD_URL}/v1/internal/assistants/validate/`,
137
- );
138
- const headers = new Headers(fetchCalls[0]?.init?.headers);
139
- expect(headers.get("Authorization")).toBe("Api-Key assistant-key");
140
- expect(getCloudAssistantId()).toBe(ASSISTANT_ID);
141
- expect(getCloudOrganizationId()).toBe(ORG_ID);
142
- expect(getCloudUserId()).toBe(USER_ID);
143
- });
144
-
145
- test("validate ids are used when the vault also has a copy", async () => {
146
- mockSecureKeys[credentialKey("cadet", "assistant_api_key")] =
147
- "assistant-key";
148
- mockSecureKeys[credentialKey("cadet", "platform_assistant_id")] =
149
- "asst-from-vault";
150
- fetchImpl = async () =>
151
- new Response(
152
- JSON.stringify({
153
- assistant_id: ASSISTANT_ID,
154
- organization_id: ORG_ID,
155
- user_id: USER_ID,
156
- }),
157
- { status: 200 },
158
- );
159
-
160
- await rehydrateCloudCredentials();
161
-
162
- expect(getCloudAssistantId()).toBe(ASSISTANT_ID);
163
- });
164
-
165
- test("does not populate ids from the vault when validate is unreachable", async () => {
166
- mockSecureKeys[credentialKey("cadet", "assistant_api_key")] =
167
- "assistant-key";
168
- mockSecureKeys[credentialKey("cadet", "platform_assistant_id")] =
169
- ASSISTANT_ID;
170
- fetchImpl = async () => {
171
- throw new Error("network down");
172
- };
173
-
174
- await rehydrateCloudCredentials();
175
-
176
- expect(getCloudAssistantId()).toBe("");
177
- expect(getCloudOrganizationId()).toBe("");
178
- expect(getCloudUserId()).toBe("");
179
- });
180
- });
@@ -1,35 +0,0 @@
1
- /**
2
- * Rehydrate the in-memory cloud identity overrides at process startup.
3
- *
4
- * The identity overrides (the ID setters in `config/env.ts`) are normally
5
- * only populated at runtime when the cloud pushes values. Any standalone
6
- * process that talks to the cloud — the daemon and the schedule worker —
7
- * must rehydrate them before its first request.
8
- *
9
- * Bound ids come from `POST /v1/internal/assistants/validate/`, which trades
10
- * the assistant API key for assistant/organization/user ids. The base URL is
11
- * intentionally NOT rehydrated here: it resolves from `config.cloud.baseUrl`
12
- * or the `CADET_CLOUD_URL` environment variable, never the credential
13
- * store.
14
- *
15
- * Safe to call more than once.
16
- */
17
- import { getLogger } from "../util/logger.js";
18
- import { ensureCloudIdentityIds } from "./cloud-identity.js";
19
-
20
- const log = getLogger("cloud-rehydration");
21
-
22
- /**
23
- * Rehydrate the cloud identity ids (assistant, organization, user). Safe to
24
- * call more than once.
25
- */
26
- export async function rehydrateCloudCredentials(): Promise<void> {
27
- try {
28
- await ensureCloudIdentityIds();
29
- } catch (err) {
30
- log.warn(
31
- { error: err instanceof Error ? err.message : String(err) },
32
- "Failed to rehydrate cloud identity ids (non-fatal)",
33
- );
34
- }
35
- }