@mycadet/assistant 0.12.9 → 0.12.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (658) hide show
  1. package/Dockerfile +0 -8
  2. package/eslint-rules/__tests__/cli-no-daemon-internals.test.ts +1 -1
  3. package/node_modules/@mycadet/ces-client/node_modules/@mycadet/service-contracts/src/__tests__/ingress.test.ts +8 -8
  4. package/node_modules/@mycadet/ces-client/node_modules/@mycadet/service-contracts/src/ingress.ts +1 -1
  5. package/node_modules/@mycadet/ces-client/src/http-credentials.ts +18 -1
  6. package/node_modules/@mycadet/gateway-client/node_modules/@mycadet/service-contracts/src/__tests__/ingress.test.ts +8 -8
  7. package/node_modules/@mycadet/gateway-client/node_modules/@mycadet/service-contracts/src/ingress.ts +1 -1
  8. package/node_modules/@mycadet/service-contracts/src/__tests__/ingress.test.ts +8 -8
  9. package/node_modules/@mycadet/service-contracts/src/ingress.ts +1 -1
  10. package/openapi.yaml +62 -910
  11. package/package.json +3 -7
  12. package/scripts/build-test-fixtures.ts +1 -1
  13. package/scripts/generate-openapi.ts +22 -6
  14. package/scripts/postinstall.ts +4 -10
  15. package/scripts/run-tests.ts +0 -21
  16. package/src/__tests__/adaptive-thinking-repair.test.ts +19 -57
  17. package/src/__tests__/agent-loop.test.ts +0 -76
  18. package/src/__tests__/anthropic-provider.test.ts +6 -6
  19. package/src/__tests__/assert-not-live-db.ts +1 -1
  20. package/src/__tests__/assistant-id-boundary-guard.test.ts +3 -3
  21. package/src/__tests__/attachments-store-heic-normalize.test.ts +1 -1
  22. package/src/__tests__/attachments-store.test.ts +1 -1
  23. package/src/__tests__/audit-log-rotation.test.ts +1 -1
  24. package/src/__tests__/btw-routes.test.ts +1 -1
  25. package/src/__tests__/byok-default-profile-ensure.test.ts +21 -27
  26. package/src/__tests__/call-conversation-messages.test.ts +0 -5
  27. package/src/__tests__/call-recovery.test.ts +2 -7
  28. package/src/__tests__/call-routes-http.test.ts +0 -12
  29. package/src/__tests__/call-store.test.ts +2 -7
  30. package/src/__tests__/catalog-files.test.ts +7 -5
  31. package/src/__tests__/checker.test.ts +1 -1
  32. package/src/__tests__/cli-memory-v2-reembed-skills.test.ts +4 -4
  33. package/src/__tests__/cloud-client-verify-credential.test.ts +0 -4
  34. package/src/__tests__/cloud-credential-catalog-cli.test.ts +14 -14
  35. package/src/__tests__/cloud-profile-guard.test.ts +87 -404
  36. package/src/__tests__/compaction-events.test.ts +2 -2
  37. package/src/__tests__/config-loader-backfill.test.ts +74 -163
  38. package/src/__tests__/config-loader-cloud-defaults.test.ts +11 -11
  39. package/src/__tests__/config-loader-corrupt.test.ts +10 -10
  40. package/src/__tests__/config-loader-quarantine-notice.test.ts +7 -7
  41. package/src/__tests__/config-loader-validation-reset-notice.test.ts +11 -11
  42. package/src/__tests__/config-schema.test.ts +26 -27
  43. package/src/__tests__/config-set-route.test.ts +2 -6
  44. package/src/__tests__/conversation-agent-loop-inference-profile.test.ts +28 -300
  45. package/src/__tests__/conversation-agent-loop-overflow.test.ts +39 -246
  46. package/src/__tests__/conversation-agent-loop.test.ts +2 -58
  47. package/src/__tests__/conversation-clear-safety.test.ts +0 -30
  48. package/src/__tests__/conversation-inference-profile-route.test.ts +1 -1
  49. package/src/__tests__/conversation-queue.test.ts +1 -1
  50. package/src/__tests__/conversation-runtime-assembly.test.ts +1 -1
  51. package/src/__tests__/conversation-skill-tools.test.ts +4 -444
  52. package/src/__tests__/conversation-slash-commands.test.ts +1 -1
  53. package/src/__tests__/conversation-store.test.ts +1 -84
  54. package/src/__tests__/conversation-surface-state.test.ts +0 -16
  55. package/src/__tests__/credential-health-service.test.ts +14 -1
  56. package/src/__tests__/credential-record-retire.test.ts +1 -1
  57. package/src/__tests__/credential-record-write-through.test.ts +1 -1
  58. package/src/__tests__/credential-security-invariants.test.ts +0 -145
  59. package/src/__tests__/custom-profile-ensure.test.ts +1 -1
  60. package/src/__tests__/default-profile-catalog-fallback.test.ts +5 -15
  61. package/src/__tests__/deterministic-verification-control-plane.test.ts +0 -2
  62. package/src/__tests__/dictation-profile-store.test.ts +6 -6
  63. package/src/__tests__/disk-usage.test.ts +28 -164
  64. package/src/__tests__/docker-signing-key-bootstrap.test.ts +1 -1
  65. package/src/__tests__/embedding-cloud-proxy-selection.test.ts +1 -1
  66. package/src/__tests__/emit-event-signal.test.ts +1 -1
  67. package/src/__tests__/gateway-client-cloud-outbound.test.ts +3 -3
  68. package/src/__tests__/gateway-only-enforcement.test.ts +1 -1
  69. package/src/__tests__/guardian-dispatch.test.ts +0 -13
  70. package/src/__tests__/helpers/seed-app.ts +1 -1
  71. package/src/__tests__/host-cu-routes-targeted.test.ts +1 -1
  72. package/src/__tests__/host-shell-tool.test.ts +1 -1
  73. package/src/__tests__/identity-routes.test.ts +1 -1
  74. package/src/__tests__/inference-profile-session-handler.test.ts +1 -1
  75. package/src/__tests__/inference-profile-session-ipc.test.ts +1 -1
  76. package/src/__tests__/injector-chain.test.ts +1 -1
  77. package/src/__tests__/injector-config-quarantine-notice.test.ts +1 -1
  78. package/src/__tests__/injector-config-validation-reset-notice.test.ts +1 -1
  79. package/src/__tests__/injector-pkb-v2-silenced.test.ts +1 -1
  80. package/src/__tests__/{platform.test.ts → layout.test.ts} +1 -1
  81. package/src/__tests__/list-all-apps.test.ts +1 -1
  82. package/src/__tests__/live-workspace-guard.test.ts +2 -2
  83. package/src/__tests__/llm-resolver-override-or-default.test.ts +5 -6
  84. package/src/__tests__/llm-resolver.test.ts +7 -7
  85. package/src/__tests__/llm-schema-fallback-profile.test.ts +9 -10
  86. package/src/__tests__/llm-usage-store.test.ts +0 -495
  87. package/src/__tests__/log-export-routes.test.ts +1 -1
  88. package/src/__tests__/mcp-config-secret-boundary.test.ts +12 -53
  89. package/src/__tests__/mcp-list-plugin-servers.test.ts +1 -1
  90. package/src/__tests__/memory-config-file-parity.test.ts +1 -1
  91. package/src/__tests__/memory-v2-static-injector.test.ts +1 -1
  92. package/src/__tests__/messages-read-boundary-guard.test.ts +0 -2
  93. package/src/__tests__/notification-guardian-path.test.ts +0 -7
  94. package/src/__tests__/onboarding-persona-write.test.ts +1 -1
  95. package/src/__tests__/openai-provider.test.ts +8 -8
  96. package/src/__tests__/path-policy.test.ts +1 -1
  97. package/src/__tests__/persona-resolver.test.ts +1 -1
  98. package/src/__tests__/plugin-app-serve-routes.test.ts +1 -1
  99. package/src/__tests__/plugin-effective-enabled-set.test.ts +1 -1
  100. package/src/__tests__/plugin-import-boundary-guard.test.ts +4 -6
  101. package/src/__tests__/plugin-import-boundary-reverse-guard.test.ts +0 -3
  102. package/src/__tests__/provider-cloud-proxy-integration.test.ts +1 -5
  103. package/src/__tests__/provider-connections-backfill.test.ts +10 -10
  104. package/src/__tests__/prune-old-conversations-job.test.ts +6 -31
  105. package/src/__tests__/resolve-app.test.ts +1 -1
  106. package/src/__tests__/run-due-schedules.test.ts +1 -1
  107. package/src/__tests__/scaffold-managed-skill-tool.test.ts +0 -53
  108. package/src/__tests__/schedule-routes.test.ts +1 -1
  109. package/src/__tests__/schedule-store.test.ts +1 -1
  110. package/src/__tests__/secret-routes-cloud-proxy.test.ts +1 -1
  111. package/src/__tests__/skill-load-plugin-scope.test.ts +1 -1
  112. package/src/__tests__/surface-completion-compaction-boundary.test.ts +1 -1
  113. package/src/__tests__/tool-approval-handler.test.ts +1 -1
  114. package/src/__tests__/tool-audit.test.ts +5 -235
  115. package/src/__tests__/tool-executor-lifecycle-events.test.ts +54 -114
  116. package/src/__tests__/tools-get-route.test.ts +1 -1
  117. package/src/__tests__/turn-outcome-read.test.ts +1 -1
  118. package/src/__tests__/twilio-routes.test.ts +0 -1
  119. package/src/__tests__/usage-attribution.test.ts +0 -31
  120. package/src/__tests__/verification-control-plane-policy.test.ts +3 -10
  121. package/src/__tests__/visible-app-context.test.ts +1 -1
  122. package/src/__tests__/voice-ingress-preflight.test.ts +1 -1
  123. package/src/__tests__/workspace-git-service.test.ts +1 -1
  124. package/src/__tests__/workspace-greetings.test.ts +1 -1
  125. package/src/acp/__tests__/helpers/acp-config-stub.ts +1 -1
  126. package/src/activation/progress-store.ts +1 -1
  127. package/src/activation/turn-hooks.ts +1 -1
  128. package/src/agent/loop.ts +0 -51
  129. package/src/apps/app-store.ts +1 -1
  130. package/src/avatar/__tests__/avatar-store.test.ts +2 -172
  131. package/src/avatar/accent-backfill.ts +1 -1
  132. package/src/avatar/avatar-manifest.ts +1 -1
  133. package/src/avatar/avatar-store.ts +10 -69
  134. package/src/avatar/ensure-raster.ts +1 -1
  135. package/src/avatar/identity-avatar.ts +1 -1
  136. package/src/avatar/sync-avatar.ts +1 -1
  137. package/src/avatar/traits-png-sync.ts +1 -1
  138. package/src/bundler/compiler-tools.ts +1 -1
  139. package/src/bundler/package-resolver.ts +1 -1
  140. package/src/calls/__tests__/call-controller.test.ts +25 -27
  141. package/src/calls/active-call-lease.ts +1 -1
  142. package/src/calls/call-controller.ts +3 -3
  143. package/src/calls/call-domain.ts +4 -8
  144. package/src/calls/call-store.ts +2 -76
  145. package/src/calls/resolve-call-tts-provider.ts +3 -3
  146. package/src/calls/twilio-config.ts +3 -3
  147. package/src/calls/twilio-rest.ts +2 -2
  148. package/src/calls/voice-ingress-preflight.ts +2 -2
  149. package/src/cli/bundled-modules.ts +0 -2
  150. package/src/cli/commands/__tests__/apps.test.ts +1 -1
  151. package/src/cli/commands/__tests__/plugins.test.ts +9 -66
  152. package/src/cli/commands/__tests__/ps.test.ts +67 -0
  153. package/src/cli/commands/auth.help.ts +2 -2
  154. package/src/cli/commands/avatar.ts +1 -1
  155. package/src/cli/commands/changelog.ts +1 -1
  156. package/src/cli/commands/cloud/__tests__/subscription.test.ts +2 -2
  157. package/src/cli/commands/cloud/index.help.ts +1 -1
  158. package/src/cli/commands/cloud/index.ts +2 -2
  159. package/src/cli/commands/db/refresh.ts +1 -1
  160. package/src/cli/commands/db/repair-step-conversation-backfill.ts +1 -1
  161. package/src/cli/commands/db/repair.ts +1 -1
  162. package/src/cli/commands/db/status.ts +1 -1
  163. package/src/cli/commands/inference-profiles.ts +1 -12
  164. package/src/cli/commands/memory/__tests__/memory-v3.test.ts +1 -116
  165. package/src/cli/commands/memory/index.help.ts +1 -43
  166. package/src/cli/commands/memory/memory-v3.ts +0 -64
  167. package/src/cli/commands/plugins.ts +54 -205
  168. package/src/cli/commands/ps.ts +5 -2
  169. package/src/cli/commands/status.ts +1 -1
  170. package/src/cli/index.help.ts +0 -2
  171. package/src/cli/lib/__tests__/inspect-plugin.test.ts +36 -66
  172. package/src/cli/lib/__tests__/install-from-cloud.test.ts +1 -1
  173. package/src/cli/lib/__tests__/install-from-github.test.ts +41 -117
  174. package/src/cli/lib/__tests__/plugin-catalog-cache.test.ts +2 -185
  175. package/src/cli/lib/__tests__/plugin-catalog-resolve.test.ts +36 -66
  176. package/src/cli/lib/__tests__/plugin-catalog-visibility.test.ts +4 -6
  177. package/src/cli/lib/__tests__/plugin-details.test.ts +113 -96
  178. package/src/cli/lib/__tests__/search-plugins.test.ts +9 -16
  179. package/src/cli/lib/__tests__/uninstall-plugin.test.ts +1 -1
  180. package/src/cli/lib/__tests__/upgrade-plugin.test.ts +38 -15
  181. package/src/cli/lib/diff-plugin.ts +1 -1
  182. package/src/cli/lib/inspect-plugin.ts +13 -97
  183. package/src/cli/lib/install-from-cloud.ts +1 -1
  184. package/src/cli/lib/install-from-github.ts +75 -154
  185. package/src/cli/lib/install-plugin-dependencies.ts +1 -1
  186. package/src/cli/lib/list-installed-plugins.ts +1 -1
  187. package/src/cli/lib/open-browser.ts +1 -1
  188. package/src/cli/lib/plugin-catalog-cache.ts +8 -51
  189. package/src/cli/lib/plugin-catalog-resolve.ts +3 -22
  190. package/src/cli/lib/plugin-details.ts +5 -27
  191. package/src/cli/lib/plugin-marketplace.ts +18 -266
  192. package/src/cli/lib/search-plugins.ts +23 -43
  193. package/src/cli/lib/toggle-plugin.ts +1 -1
  194. package/src/cli/lib/uninstall-plugin.ts +1 -1
  195. package/src/cli/lib/upgrade-plugin.ts +3 -49
  196. package/src/cli/program.ts +1 -3
  197. package/src/cli.ts +1 -1
  198. package/src/cloud/client.ts +0 -6
  199. package/src/cloud/consent-cache.test.ts +22 -201
  200. package/src/cloud/consent-cache.ts +16 -111
  201. package/src/cloud/sync-identity.ts +1 -1
  202. package/src/config/__tests__/chat-settings.test.ts +1 -1
  203. package/src/config/__tests__/cloud-identity.test.ts +15 -2
  204. package/src/config/__tests__/default-plugin-skill-discovery.test.ts +1 -1
  205. package/src/config/__tests__/default-profile-catalog.test.ts +12 -51
  206. package/src/config/__tests__/deployment-context-defaults.test.ts +13 -13
  207. package/src/config/__tests__/loader-callsite-strip-fallback.test.ts +4 -4
  208. package/src/config/__tests__/loader-last-known-good.test.ts +9 -9
  209. package/src/config/__tests__/loader-sparse-array-cleanup.test.ts +7 -7
  210. package/src/config/__tests__/plugin-resident-skill-discovery.test.ts +1 -1
  211. package/src/config/__tests__/profile-materialization.test.ts +2 -4
  212. package/src/config/__tests__/sync-gated-profiles.test.ts +1 -106
  213. package/src/config/acp-agent-write.ts +1 -1
  214. package/src/config/bundled-skills/settings/tools/open-system-settings.test.ts +1 -1
  215. package/src/config/bundled-skills/settings/tools/open-system-settings.ts +1 -1
  216. package/src/config/call-site-defaults.ts +0 -6
  217. package/src/config/cloud-identity.ts +12 -5
  218. package/src/config/composer-preferences.ts +1 -1
  219. package/src/config/default-profile-catalog.ts +8 -75
  220. package/src/config/default-profile-names.ts +2 -25
  221. package/src/config/env-registry.ts +1 -14
  222. package/src/config/env.ts +8 -6
  223. package/src/config/llm-resolver.ts +1 -2
  224. package/src/config/loader.ts +13 -17
  225. package/src/config/profile-materialization.ts +1 -1
  226. package/src/config/schema.ts +1 -7
  227. package/src/config/schemas/call-site-catalog.ts +0 -7
  228. package/src/config/schemas/llm.ts +25 -32
  229. package/src/config/seed-inference-profiles.ts +16 -17
  230. package/src/config/skills.ts +2 -2
  231. package/src/config/sync-gated-profiles.ts +6 -24
  232. package/src/credential-health/credential-health-service.ts +10 -3
  233. package/src/daemon/approval-generators.ts +3 -3
  234. package/src/daemon/config-watcher.ts +2 -2
  235. package/src/daemon/conversation-agent-loop-handlers.ts +0 -18
  236. package/src/daemon/conversation-agent-loop.ts +6 -97
  237. package/src/daemon/conversation-process.ts +1 -1
  238. package/src/daemon/conversation-skill-tools.ts +4 -72
  239. package/src/daemon/conversation-store.ts +1 -1
  240. package/src/daemon/conversation-surface-state.ts +0 -33
  241. package/src/daemon/conversation-surfaces.ts +1 -86
  242. package/src/daemon/conversation-tool-setup.test.ts +1 -1
  243. package/src/daemon/conversation-tool-setup.ts +0 -23
  244. package/src/daemon/conversation.ts +3 -5
  245. package/src/daemon/daemon-control.ts +3 -3
  246. package/src/daemon/dictation-profile-store.ts +3 -3
  247. package/src/daemon/event-loop-watchdog.test.ts +2 -198
  248. package/src/daemon/event-loop-watchdog.ts +0 -185
  249. package/src/daemon/external-plugins-bootstrap.ts +1 -1
  250. package/src/daemon/first-greeting.ts +1 -1
  251. package/src/daemon/handlers/skills.ts +1 -1
  252. package/src/daemon/host-app-control-proxy.ts +1 -1
  253. package/src/daemon/host-cu-proxy.ts +2 -2
  254. package/src/daemon/identity-helpers.ts +1 -1
  255. package/src/daemon/lifecycle.ts +11 -15
  256. package/src/daemon/main.ts +1 -1
  257. package/src/daemon/now-scratchpad.ts +1 -1
  258. package/src/daemon/process-message.ts +4 -4
  259. package/src/daemon/profiler-run-store.ts +2 -2
  260. package/src/daemon/providers-setup.ts +2 -2
  261. package/src/daemon/shutdown-handlers.ts +0 -10
  262. package/src/daemon/sqlite-corruption-watchdog.test.ts +2 -142
  263. package/src/daemon/sqlite-corruption-watchdog.ts +17 -81
  264. package/src/daemon/tool-side-effects.ts +1 -1
  265. package/src/desktop/desktop-session-manager.ts +1 -1
  266. package/src/desktop/desktop-wallpaper-renderer.ts +1 -1
  267. package/src/heartbeat/heartbeat-service.ts +1 -1
  268. package/src/home/feed-writer.ts +1 -1
  269. package/src/home/home-greeting-cache.ts +1 -1
  270. package/src/home/relationship-state-writer.ts +2 -2
  271. package/src/hooks/__tests__/hook-live-reload.test.ts +1 -1
  272. package/src/hooks/hook-loader.ts +2 -2
  273. package/src/inbound/__tests__/oauth-callback-url.test.ts +2 -2
  274. package/src/inbound/oauth-callback-url.ts +3 -3
  275. package/src/ipc/__tests__/attachment-ipc.test.ts +1 -1
  276. package/src/ipc/socket-path.ts +1 -1
  277. package/src/live-voice/__tests__/live-voice-archive.test.ts +1 -1
  278. package/src/live-voice/__tests__/live-voice-vad.test.ts +1 -1
  279. package/src/live-voice/live-voice-session.ts +3 -66
  280. package/src/mcp/__tests__/effective-config.test.ts +1 -1
  281. package/src/mcp/__tests__/mcp-oauth-client-registration.test.ts +2 -2
  282. package/src/mcp/__tests__/mcp-oauth-provider.test.ts +2 -3
  283. package/src/mcp/__tests__/reload-signal-emission.test.ts +1 -1
  284. package/src/mcp/__tests__/reload-signal.test.ts +1 -1
  285. package/src/mcp/__tests__/workspace-mcp-config.test.ts +19 -21
  286. package/src/mcp/reload-signal.ts +1 -1
  287. package/src/mcp/workspace-mcp-config.ts +1 -23
  288. package/src/messaging/draft-store.ts +1 -1
  289. package/src/monitoring/__tests__/active-conversations.test.ts +1 -1
  290. package/src/monitoring/__tests__/page-cache.test.ts +1 -1
  291. package/src/monitoring/__tests__/stall-capture.test.ts +1 -1
  292. package/src/monitoring/__tests__/workspace-git-heartbeat.test.ts +1 -1
  293. package/src/monitoring/active-conversations.ts +1 -1
  294. package/src/monitoring/control.ts +1 -1
  295. package/src/monitoring/daemon-boot-time.ts +1 -1
  296. package/src/monitoring/daemon-heartbeat.ts +1 -1
  297. package/src/monitoring/page-cache.ts +1 -1
  298. package/src/monitoring/plugin-auto-update.ts +1 -7
  299. package/src/monitoring/plugin-source-watch.ts +1 -1
  300. package/src/monitoring/recovery/db.ts +1 -1
  301. package/src/monitoring/recovery/inflight-content.ts +1 -1
  302. package/src/monitoring/resource-sampler.ts +3 -14
  303. package/src/monitoring/stall-capture.ts +1 -1
  304. package/src/monitoring/worker.ts +9 -76
  305. package/src/monitoring/workspace-git-heartbeat.ts +1 -1
  306. package/src/oauth/connect-orchestrator.ts +4 -4
  307. package/src/permissions/checker.ts +1 -1
  308. package/src/permissions/workspace-policy.ts +1 -1
  309. package/src/persistence/__tests__/main-db-readonly-probe.ts +27 -52
  310. package/src/persistence/__tests__/message-content-file.test.ts +1 -1
  311. package/src/persistence/__tests__/slow-sync-log.test.ts +0 -2
  312. package/src/persistence/attachments-store.ts +1 -1
  313. package/src/persistence/conversation-crud.ts +1 -38
  314. package/src/persistence/conversation-directories.ts +1 -1
  315. package/src/persistence/conversation-types.ts +0 -8
  316. package/src/persistence/db-async-query.ts +1 -1
  317. package/src/persistence/db-connection.ts +11 -1
  318. package/src/persistence/db-init.ts +1 -1
  319. package/src/persistence/db-maintenance.ts +1 -1
  320. package/src/persistence/embeddings/__tests__/embedding-local-lifecycle.test.ts +1 -1
  321. package/src/persistence/embeddings/embedding-local.ts +4 -4
  322. package/src/persistence/embeddings/embedding-runtime-manager.ts +1 -1
  323. package/src/persistence/embeddings/qdrant-client.ts +1 -1
  324. package/src/persistence/embeddings/qdrant-manager.ts +1 -1
  325. package/src/persistence/job-handlers/__tests__/message-lexical-backfill.test.ts +1 -1
  326. package/src/persistence/job-handlers/__tests__/message-lexical-enqueue.test.ts +1 -1
  327. package/src/persistence/job-handlers/cleanup.ts +8 -17
  328. package/src/persistence/llm-usage-store.ts +2 -229
  329. package/src/persistence/message-content-file.ts +1 -1
  330. package/src/persistence/migrations/209-strip-thinking-from-consolidated.ts +1 -1
  331. package/src/persistence/migrations/222-strip-placeholder-sentinels-from-messages.ts +1 -1
  332. package/src/persistence/migrations/296-rewrite-balanced-economy-profile-pins.test.ts +1 -1
  333. package/src/persistence/migrations/306-rewrite-frontier-profile-pins.test.ts +1 -1
  334. package/src/persistence/migrations/329-move-onboarding-events-to-telemetry-db.test.ts +13 -0
  335. package/src/persistence/migrations/330-move-auth-fallback-events-to-telemetry-db.test.ts +13 -0
  336. package/src/persistence/migrations/331-move-lifecycle-events-to-telemetry-db.test.ts +13 -0
  337. package/src/persistence/migrations/332-move-skill-loaded-events-to-telemetry-db.test.ts +13 -0
  338. package/src/persistence/migrations/333-create-telemetry-events-table.test.ts +7 -4
  339. package/src/persistence/migrations/334-backfill-telemetry-events-outbox.test.ts +13 -0
  340. package/src/persistence/migrations/387-drop-telemetry-tables.ts +51 -0
  341. package/src/persistence/migrations/__tests__/327-create-flush-checkpoints.test.ts +9 -1
  342. package/src/persistence/migrations/__tests__/387-drop-telemetry-tables.test.ts +79 -0
  343. package/src/persistence/migrations/helpers/relocation.ts +1 -1
  344. package/src/persistence/migrations/run-migrations.ts +1 -1
  345. package/src/persistence/migrations/validate-migration-state.ts +1 -1
  346. package/src/persistence/raw-query.ts +1 -29
  347. package/src/persistence/slow-sync-log.ts +0 -23
  348. package/src/persistence/steps.ts +2 -0
  349. package/src/{telemetry → persistence}/tool-audit.ts +6 -121
  350. package/src/plugin-api/index.ts +1 -1
  351. package/src/plugin-api/plugin-name-env.ts +1 -1
  352. package/src/plugins/__tests__/installed-plugin-dirs.test.ts +1 -1
  353. package/src/plugins/collect-source-versions.ts +1 -1
  354. package/src/plugins/defaults/channel/package.json +1 -1
  355. package/src/plugins/defaults/cloud-hosted/package.json +1 -1
  356. package/src/plugins/defaults/compaction/package.json +1 -1
  357. package/src/plugins/defaults/documents/package.json +1 -1
  358. package/src/plugins/defaults/empty-response/package.json +1 -1
  359. package/src/plugins/defaults/exploration-drift/package.json +1 -1
  360. package/src/plugins/defaults/image-fallback/package.json +1 -1
  361. package/src/plugins/defaults/image-recovery/package.json +1 -1
  362. package/src/plugins/defaults/max-tokens-continue/package.json +1 -1
  363. package/src/plugins/defaults/memory/__tests__/db-async-query.test.ts +1 -1
  364. package/src/plugins/defaults/memory/__tests__/db-maintenance.test.ts +1 -1
  365. package/src/plugins/defaults/memory/__tests__/memory-retrospective-job.test.ts +0 -82
  366. package/src/plugins/defaults/memory/__tests__/memory-retrospective-skill-card.test.ts +0 -41
  367. package/src/plugins/defaults/memory/__tests__/memory-tier-boundary-guard.test.ts +0 -2
  368. package/src/plugins/defaults/memory/memory-retrospective-job.ts +3 -52
  369. package/src/plugins/defaults/memory/memory-retrospective-skill-card.ts +0 -18
  370. package/src/plugins/defaults/memory/package.json +1 -1
  371. package/src/plugins/defaults/memory/paths.ts +4 -4
  372. package/src/plugins/defaults/memory/src/__tests__/memory-worker-routes.test.ts +1 -1
  373. package/src/plugins/defaults/memory/src/memory-v2-routes.ts +5 -5
  374. package/src/plugins/defaults/memory/src/memory-v3-routes.ts +0 -207
  375. package/src/plugins/defaults/memory/src/memory-worker-routes.ts +1 -1
  376. package/src/plugins/defaults/memory/startup.ts +1 -22
  377. package/src/plugins/defaults/memory/v3/__tests__/orchestrate.test.ts +2 -253
  378. package/src/plugins/defaults/memory/v3/orchestrate.ts +5 -129
  379. package/src/plugins/defaults/memory/worker-control.ts +1 -1
  380. package/src/plugins/defaults/memory/worker.ts +2 -2
  381. package/src/plugins/defaults/session/package.json +1 -1
  382. package/src/plugins/defaults/surface-completion-nudge/package.json +1 -1
  383. package/src/plugins/defaults/task-progress/package.json +1 -1
  384. package/src/plugins/defaults/task-progress-nudge/package.json +1 -1
  385. package/src/plugins/defaults/title-generate/package.json +1 -1
  386. package/src/plugins/defaults/tool-error/package.json +1 -1
  387. package/src/plugins/defaults/tool-result-truncate/package.json +1 -1
  388. package/src/plugins/defaults/turn-context/package.json +1 -1
  389. package/src/plugins/defaults/workspace/injectors.ts +1 -1
  390. package/src/plugins/defaults/workspace/package.json +1 -1
  391. package/src/plugins/disabled-state.ts +1 -1
  392. package/src/plugins/ensure-plugin-api-shim.ts +1 -1
  393. package/src/plugins/ensure-shared-dep-links.ts +1 -1
  394. package/src/plugins/installed-plugin-dirs.ts +1 -1
  395. package/src/plugins/mcp-servers.ts +7 -9
  396. package/src/plugins/mtime-cache.ts +2 -2
  397. package/src/plugins/source-versions.ts +1 -1
  398. package/src/prompts/bootstrap-cleanup.ts +1 -1
  399. package/src/prompts/persona-resolver.ts +1 -1
  400. package/src/prompts/sections.ts +2 -2
  401. package/src/prompts/system-prompt.ts +10 -42
  402. package/src/prompts/templates/BOOTSTRAP-ACTIVATION-RAIL.md +0 -37
  403. package/src/providers/__tests__/cadet-connection-routing.test.ts +2 -2
  404. package/src/providers/cadet/client.ts +1 -1
  405. package/src/providers/inference/__tests__/base-url-route-validation.test.ts +1 -1
  406. package/src/providers/inference/adapter-factory.ts +1 -1
  407. package/src/providers/inference/backfill.ts +3 -10
  408. package/src/providers/inference/profile-probe.ts +1 -1
  409. package/src/providers/retry.ts +0 -2
  410. package/src/providers/types.ts +0 -7
  411. package/src/providers/usage-tracking.ts +1 -1
  412. package/src/routes/__tests__/route-host.test.ts +1 -1
  413. package/src/routes/control.ts +1 -1
  414. package/src/routes/route-host-client.ts +1 -1
  415. package/src/routes/worker.ts +2 -2
  416. package/src/runtime/agent-wake.ts +1 -1
  417. package/src/runtime/assistant-stream-state.ts +1 -1
  418. package/src/runtime/auth/token-service.ts +1 -1
  419. package/src/runtime/background-job-runner.ts +1 -1
  420. package/src/runtime/middleware/twilio-validation.ts +2 -2
  421. package/src/runtime/routes/__tests__/app-pin-routes.test.ts +1 -1
  422. package/src/runtime/routes/__tests__/apps-refresh-route.test.ts +1 -1
  423. package/src/runtime/routes/__tests__/avatar-state-routes.test.ts +3 -33
  424. package/src/runtime/routes/__tests__/cloud-credits-routes.test.ts +5 -4
  425. package/src/runtime/routes/__tests__/cloud-invoice-routes.test.ts +4 -3
  426. package/src/runtime/routes/__tests__/conversation-query-routes.test.ts +72 -298
  427. package/src/runtime/routes/__tests__/default-plugin-routes.test.ts +1 -1
  428. package/src/runtime/routes/__tests__/deprecated-route-context.test.ts +15 -62
  429. package/src/runtime/routes/__tests__/inference-profiles-routes.test.ts +105 -12
  430. package/src/runtime/routes/__tests__/ingress-status-routes.test.ts +1 -1
  431. package/src/runtime/routes/__tests__/monitoring-routes.test.ts +1 -1
  432. package/src/runtime/routes/__tests__/plugins-routes.test.ts +47 -211
  433. package/src/runtime/routes/__tests__/route-host-worker-routes.test.ts +1 -1
  434. package/src/runtime/routes/__tests__/schedule-routes-disarm-reason.test.ts +1 -1
  435. package/src/runtime/routes/__tests__/schedule-worker-routes.test.ts +1 -1
  436. package/src/runtime/routes/__tests__/user-route-dispatcher-host.test.ts +1 -1
  437. package/src/runtime/routes/__tests__/user-route-dispatcher.test.ts +1 -1
  438. package/src/runtime/routes/__tests__/user-routes-cli.test.ts +1 -1
  439. package/src/runtime/routes/__tests__/user-routes-notices.test.ts +1 -1
  440. package/src/runtime/routes/__tests__/user-routes-request.test.ts +1 -1
  441. package/src/runtime/routes/app-management-routes.ts +1 -1
  442. package/src/runtime/routes/attachment-routes.ts +1 -1
  443. package/src/runtime/routes/audit-routes.ts +1 -1
  444. package/src/runtime/routes/avatar-routes.ts +3 -10
  445. package/src/runtime/routes/cloud-routes.ts +3 -3
  446. package/src/runtime/routes/content-source-routes.ts +1 -1
  447. package/src/runtime/routes/conversation-query-routes.ts +49 -706
  448. package/src/runtime/routes/conversation-routes.ts +1 -38
  449. package/src/runtime/routes/debug-routes.ts +1 -1
  450. package/src/runtime/routes/deprecated-route-context.ts +5 -61
  451. package/src/runtime/routes/heartbeat-routes.ts +1 -1
  452. package/src/runtime/routes/identity-routes.ts +1 -1
  453. package/src/runtime/routes/index.ts +0 -6
  454. package/src/runtime/routes/inference-profile-session-handler.ts +3 -3
  455. package/src/runtime/routes/inference-profiles-routes.ts +48 -21
  456. package/src/runtime/routes/inference-provider-connection-routes.ts +0 -1
  457. package/src/runtime/routes/llm-call-sites-routes.ts +3 -3
  458. package/src/runtime/routes/log-export/__tests__/installed-inventory.test.ts +1 -1
  459. package/src/runtime/routes/log-export/__tests__/workspace-allowlist-error-contract.test.ts +1 -1
  460. package/src/runtime/routes/log-export/__tests__/workspace-allowlist.test.ts +1 -1
  461. package/src/runtime/routes/log-export/workspace-allowlist.ts +1 -1
  462. package/src/runtime/routes/log-export-routes.ts +17 -15
  463. package/src/runtime/routes/migration-rollback-routes.ts +1 -1
  464. package/src/runtime/routes/migration-routes.ts +2 -3
  465. package/src/runtime/routes/monitoring-routes.ts +2 -2
  466. package/src/runtime/routes/oauth-providers.ts +5 -5
  467. package/src/runtime/routes/plugins-routes.ts +38 -163
  468. package/src/runtime/routes/profiler-routes.ts +1 -1
  469. package/src/runtime/routes/route-host-worker-routes.ts +1 -1
  470. package/src/runtime/routes/sanity-routes.ts +1 -1
  471. package/src/runtime/routes/schedule-routes.ts +1 -1
  472. package/src/runtime/routes/schedule-worker-routes.ts +1 -1
  473. package/src/runtime/routes/settings-routes.ts +1 -1
  474. package/src/runtime/routes/sounds-config-routes.ts +1 -1
  475. package/src/runtime/routes/surface-conversation-resolver.ts +1 -7
  476. package/src/runtime/routes/user-route-dispatcher.ts +1 -3
  477. package/src/runtime/routes/user-route-import.ts +1 -1
  478. package/src/runtime/routes/user-route-resolution.ts +1 -1
  479. package/src/runtime/routes/user-routes-cli.ts +1 -1
  480. package/src/runtime/routes/workspace-commit-routes.ts +1 -1
  481. package/src/runtime/routes/workspace-greetings.ts +1 -1
  482. package/src/runtime/routes/workspace-routes.ts +1 -1
  483. package/src/runtime/routes/workspace-utils.ts +1 -1
  484. package/src/runtime/sync/resource-sync-events.ts +1 -1
  485. package/src/schedule/__tests__/plugin-schedule-declarations.test.ts +1 -1
  486. package/src/schedule/__tests__/plugin-schedule-reconciler.test.ts +1 -1
  487. package/src/schedule/plugin-schedule-availability.ts +1 -1
  488. package/src/schedule/plugin-schedule-declarations.ts +1 -1
  489. package/src/schedule/run-script.ts +1 -1
  490. package/src/schedule/scheduler.ts +1 -11
  491. package/src/schedule/worker-control.ts +1 -1
  492. package/src/schedule/worker.ts +3 -3
  493. package/src/security/oauth2.ts +2 -2
  494. package/src/security/secret-allowlist.ts +1 -1
  495. package/src/signals/cancel.ts +1 -1
  496. package/src/signals/conversation-undo.ts +1 -1
  497. package/src/signals/emit-event.ts +1 -1
  498. package/src/signals/event-stream.ts +1 -1
  499. package/src/signals/user-message.ts +1 -1
  500. package/src/skills/catalog-install.ts +2 -1
  501. package/src/skills/clawhub.ts +1 -1
  502. package/src/skills/cloud-store.ts +1 -1
  503. package/src/skills/path-classifier.ts +1 -1
  504. package/src/skills/skill-history.ts +1 -1
  505. package/src/skills/skillssh-registry.ts +1 -1
  506. package/src/skills/uninstall.ts +1 -1
  507. package/src/skills/workspace-skill-md-signature.ts +1 -1
  508. package/src/subagent/manager.ts +1 -1
  509. package/src/theme/workspace-theme.ts +1 -1
  510. package/src/tools/browser/auth-cache.ts +1 -1
  511. package/src/tools/browser/browser-manager.ts +1 -1
  512. package/src/tools/browser/runtime-check.ts +1 -1
  513. package/src/tools/executor.ts +4 -4
  514. package/src/tools/filesystem/write.ts +1 -1
  515. package/src/tools/permission-checker.ts +2 -51
  516. package/src/tools/run-standalone.ts +1 -1
  517. package/src/tools/skills/format-input-schema.ts +1 -1
  518. package/src/tools/skills/load.ts +1 -1
  519. package/src/tools/skills/scaffold-cloud.ts +0 -32
  520. package/src/tools/terminal/safe-env.ts +1 -2
  521. package/src/tools/terminal/sanitized-bash.ts +1 -1
  522. package/src/tools/terminal/shell.ts +1 -1
  523. package/src/tools/tool-approval-handler.ts +4 -1
  524. package/src/tools/workflows/manage-workflows.ts +2 -2
  525. package/src/tools/workflows/run-workflow.test.ts +1 -1
  526. package/src/tools/workspace-tools/loader.ts +1 -1
  527. package/src/tts/synthesis-stream.ts +2 -2
  528. package/src/usage/attribution.ts +1 -11
  529. package/src/util/browser.ts +1 -1
  530. package/src/util/bun-runtime.ts +2 -1
  531. package/src/util/device-id.ts +1 -1
  532. package/src/util/disk-usage.ts +4 -139
  533. package/src/util/layout.ts +3 -3
  534. package/src/util/logger.ts +1 -1
  535. package/src/util/logs-db-path.ts +1 -1
  536. package/src/util/memory-db-path.ts +1 -1
  537. package/src/util/{platform.ts → os.ts} +5 -30
  538. package/src/util/process-tree.ts +19 -0
  539. package/src/util/sqlite3-runtime.ts +1 -1
  540. package/src/util/telemetry-db-path.ts +1 -1
  541. package/src/watcher/__tests__/engine.test.ts +0 -23
  542. package/src/watcher/engine.ts +0 -7
  543. package/src/windows-compiled-cli.ts +0 -4
  544. package/src/windows-compiled-worker-entry.ts +0 -6
  545. package/src/workflows/leaf-runner.test.ts +1 -1
  546. package/src/workflows/leaf-runner.ts +1 -1
  547. package/src/workflows/library.ts +1 -1
  548. package/src/workspace/adaptive-thinking-repair.ts +5 -24
  549. package/src/workspace/byok-default-profile-ensure.ts +24 -26
  550. package/src/workspace/custom-profile-ensure.ts +2 -2
  551. package/src/workspace/git-service.ts +1 -1
  552. package/src/workspace/hatched-date.ts +1 -1
  553. package/src/workspace/migrations/038-unify-llm-callsite-configs.ts +2 -2
  554. package/src/workspace/migrations/040-seed-latency-callsite-defaults.ts +1 -1
  555. package/src/workspace/migrations/050-seed-main-agent-opus-callsite.ts +1 -1
  556. package/src/workspace/migrations/077-seed-memory-router-callsite.ts +1 -1
  557. package/src/workspace/migrations/registry.ts +0 -4
  558. package/src/workspace/turn-commit.ts +1 -1
  559. package/docs/activation-funnel-telemetry.md +0 -324
  560. package/scripts/bundled-plugin-packages.ts +0 -154
  561. package/scripts/generate-bundled-plugin-packages.ts +0 -29
  562. package/src/__tests__/activation-early-marking.test.ts +0 -114
  563. package/src/__tests__/auth-fallback-events-store.test.ts +0 -99
  564. package/src/__tests__/config-get-vision-flag.test.ts +0 -139
  565. package/src/__tests__/conversation-surfaces-activation-emit.test.ts +0 -400
  566. package/src/__tests__/internal-telemetry-routes.test.ts +0 -213
  567. package/src/__tests__/telemetry-routes.test.ts +0 -182
  568. package/src/__tests__/turn-events-store.test.ts +0 -376
  569. package/src/__tests__/ui-channel-variants.test.ts +0 -53
  570. package/src/avatar/__tests__/avatar-changed-telemetry.test.ts +0 -217
  571. package/src/avatar/avatar-changed-telemetry.ts +0 -128
  572. package/src/calls/__tests__/call-funnel-telemetry.test.ts +0 -204
  573. package/src/cli/commands/telemetry.help.ts +0 -27
  574. package/src/cli/commands/telemetry.ts +0 -83
  575. package/src/cli/lib/__tests__/local-plugin-upgrade.test.ts +0 -251
  576. package/src/cli/lib/__tests__/plugin-catalog-local.test.ts +0 -113
  577. package/src/cli/lib/__tests__/plugin-marketplace.test.ts +0 -384
  578. package/src/cli/lib/__tests__/plugin-pin-history.test.ts +0 -164
  579. package/src/cli/lib/__tests__/plugins-install-offline.test.ts +0 -228
  580. package/src/cli/lib/bundled-marketplace.json +0 -1575
  581. package/src/cli/lib/bundled-plugin-packages.json +0 -827
  582. package/src/cli/lib/bundled-plugin-packages.ts +0 -87
  583. package/src/cli/lib/plugin-catalog-local.ts +0 -94
  584. package/src/cli/lib/plugin-pin-history.ts +0 -276
  585. package/src/cloud/feature-gate.ts +0 -8
  586. package/src/config/__tests__/cloud-rehydration.test.ts +0 -180
  587. package/src/config/cloud-rehydration.ts +0 -35
  588. package/src/daemon/__tests__/auto-profile-router.test.ts +0 -380
  589. package/src/daemon/auto-profile-router.ts +0 -428
  590. package/src/live-voice/__tests__/live-voice-session-telemetry.test.ts +0 -391
  591. package/src/monitoring/__tests__/db-integrity-sample.test.ts +0 -113
  592. package/src/monitoring/__tests__/oom-kill-reporter.test.ts +0 -374
  593. package/src/monitoring/db-integrity-check.ts +0 -163
  594. package/src/monitoring/db-integrity-sample.ts +0 -176
  595. package/src/monitoring/oom-kill-reporter.ts +0 -469
  596. package/src/onboarding/__tests__/onboarding-events-store.test.ts +0 -158
  597. package/src/onboarding/onboarding-events-store.ts +0 -296
  598. package/src/persistence/__tests__/raw-query-telemetry.test.ts +0 -76
  599. package/src/persistence/lifecycle-events-store.test.ts +0 -134
  600. package/src/persistence/lifecycle-events-store.ts +0 -110
  601. package/src/plugins/defaults/memory/__tests__/activation-session-store.test.ts +0 -76
  602. package/src/plugins/defaults/memory/activation-session-store.ts +0 -50
  603. package/src/plugins/defaults/memory/src/__tests__/memory-v3-gate-stats.test.ts +0 -281
  604. package/src/runtime/routes/auto-profile-routes.ts +0 -83
  605. package/src/runtime/routes/internal-telemetry-routes.ts +0 -142
  606. package/src/runtime/routes/telemetry-routes.ts +0 -274
  607. package/src/security/auth-fallback-events-store.ts +0 -57
  608. package/src/telemetry/__tests__/activation-funnel.test.ts +0 -95
  609. package/src/telemetry/__tests__/config-setting-events-store.test.ts +0 -63
  610. package/src/telemetry/__tests__/config-setting-snapshot.test.ts +0 -143
  611. package/src/telemetry/__tests__/flush-checkpoints.test.ts +0 -56
  612. package/src/telemetry/__tests__/live-voice-funnel.test.ts +0 -174
  613. package/src/telemetry/__tests__/outbox-test-harness.ts +0 -85
  614. package/src/telemetry/__tests__/phone-call-funnel.test.ts +0 -72
  615. package/src/telemetry/__tests__/telemetry-event-fixtures.ts +0 -282
  616. package/src/telemetry/__tests__/watchdog-events-store.test.ts +0 -71
  617. package/src/telemetry/activation-funnel.ts +0 -172
  618. package/src/telemetry/config-setting-events-store.ts +0 -40
  619. package/src/telemetry/config-setting-snapshot.ts +0 -170
  620. package/src/telemetry/flush-checkpoints.ts +0 -70
  621. package/src/telemetry/live-voice-funnel.ts +0 -185
  622. package/src/telemetry/memory-corpus-size.test.ts +0 -120
  623. package/src/telemetry/memory-corpus-size.ts +0 -184
  624. package/src/telemetry/memory-tier-reporter.test.ts +0 -195
  625. package/src/telemetry/memory-tier-reporter.ts +0 -130
  626. package/src/telemetry/phone-call-funnel.ts +0 -144
  627. package/src/telemetry/skill-loaded-events-store.test.ts +0 -93
  628. package/src/telemetry/skill-loaded-events-store.ts +0 -39
  629. package/src/telemetry/telemetry-event-sources.test.ts +0 -223
  630. package/src/telemetry/telemetry-event-sources.ts +0 -597
  631. package/src/telemetry/telemetry-events-outbox.test.ts +0 -375
  632. package/src/telemetry/telemetry-events-outbox.ts +0 -237
  633. package/src/telemetry/telemetry-main-db.ts +0 -48
  634. package/src/telemetry/telemetry-wire-source.json +0 -4
  635. package/src/telemetry/telemetry-wire-validation.test.ts +0 -157
  636. package/src/telemetry/telemetry-wire-validation.ts +0 -162
  637. package/src/telemetry/telemetry-wire.generated.ts +0 -483
  638. package/src/telemetry/tool-executed-events-store.test.ts +0 -210
  639. package/src/telemetry/tool-executed-events-store.ts +0 -102
  640. package/src/telemetry/trace-collection-policy.test.ts +0 -28
  641. package/src/telemetry/trace-collection-policy.ts +0 -30
  642. package/src/telemetry/turn-events-store.ts +0 -216
  643. package/src/telemetry/turn-trace-store.test.ts +0 -884
  644. package/src/telemetry/turn-trace-store.ts +0 -399
  645. package/src/telemetry/types.test.ts +0 -38
  646. package/src/telemetry/types.ts +0 -780
  647. package/src/telemetry/usage-telemetry-reporter.test.ts +0 -3445
  648. package/src/telemetry/usage-telemetry-reporter.ts +0 -566
  649. package/src/telemetry/watchdog-direct-emit.test.ts +0 -112
  650. package/src/telemetry/watchdog-direct-emit.ts +0 -104
  651. package/src/telemetry/watchdog-events-store.ts +0 -31
  652. package/src/tools/ui-surface/channel-variants.ts +0 -52
  653. package/src/watcher/__tests__/telemetry.test.ts +0 -178
  654. package/src/watcher/telemetry.ts +0 -93
  655. package/src/workspace/migrations/097-enable-adaptive-thinking-managed-profiles.ts +0 -165
  656. package/src/workspace/migrations/104-recheck-adaptive-thinking-model-implied-anthropic.ts +0 -151
  657. /package/src/{telemetry → persistence}/tool-usage-store.ts +0 -0
  658. /package/src/{telemetry → persistence}/turn-outcome.ts +0 -0
@@ -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
- }