@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
@@ -39,7 +39,11 @@ import {
39
39
  resolveTreeRefPath,
40
40
  sanitizePluginName,
41
41
  } from "../install-from-github.js";
42
- import { readValidatedPluginIcon } from "../plugin-icon-file.js";
42
+ import { invalidatePluginCatalogCache } from "../plugin-catalog-cache.js";
43
+
44
+ beforeEach(() => {
45
+ invalidatePluginCatalogCache();
46
+ });
43
47
 
44
48
  const CANON_REPO = "vargasjr-dev/mycadet";
45
49
  /** Synthetic host the fixtures use for Contents API `download_url`s. */
@@ -54,21 +58,21 @@ const DOWNLOAD_HOST = "https://files.test/";
54
58
  * Directory listings are derived from the key set; file `download_url`s point
55
59
  * at {@link DOWNLOAD_HOST} and are served with the stored bytes.
56
60
  *
57
- * The marketplace manifest lookup is answered with `manifest` (or a 404 when
58
- * omitted, so the name resolves to no installable source).
61
+ * The plugin catalog lookup is answered with `manifest` flattened into cloud
62
+ * rows (or a 404 when omitted, so the name resolves to no installable source).
59
63
  */
60
64
  function makeContentsFetch(opts: {
61
65
  tree: Record<string, Uint8Array | string | null>;
62
66
  manifest?: unknown;
63
67
  /**
64
- * HTTP status to answer the manifest fetch with. Defaults to 200 (when
68
+ * HTTP status to answer the catalog fetch with. Defaults to 200 (when
65
69
  * `manifest` is provided) or 404 (when omitted). Set to a transient status
66
- * (e.g. 500) to simulate a marketplace lookup that fails rather than being
70
+ * (e.g. 500) to simulate a catalog lookup that fails rather than being
67
71
  * absent.
68
72
  */
69
73
  manifestStatus?: number;
70
74
  }): FetchLike {
71
- const MANIFEST_URL = `https://api.github.com/repos/${CANON_REPO}/contents/plugins/marketplace.json`;
75
+ const CATALOG_URL = "https://test-cloud.mycadet.ai/v1/plugins/";
72
76
  const CONTENTS = `https://api.github.com/repos/${CANON_REPO}/contents/`;
73
77
  const { tree } = opts;
74
78
 
@@ -108,16 +112,43 @@ function makeContentsFetch(opts: {
108
112
  return (async (input: RequestInfo | URL) => {
109
113
  const url = typeof input === "string" ? input : input.toString();
110
114
 
111
- if (url.startsWith(MANIFEST_URL)) {
115
+ if (url.startsWith(CATALOG_URL)) {
112
116
  if (opts.manifestStatus !== undefined && opts.manifestStatus !== 200) {
113
- return new Response("manifest unavailable", {
117
+ return new Response("catalog unavailable", {
114
118
  status: opts.manifestStatus,
115
119
  });
116
120
  }
117
121
  if (opts.manifest === undefined) {
118
122
  return new Response("not found", { status: 404 });
119
123
  }
120
- return new Response(JSON.stringify(opts.manifest), { status: 200 });
124
+ const manifest = opts.manifest as {
125
+ plugins?: Array<{
126
+ name: string;
127
+ source?: {
128
+ source: string;
129
+ repo?: string;
130
+ ref?: string;
131
+ path?: string;
132
+ };
133
+ description?: string;
134
+ category?: string;
135
+ homepage?: string;
136
+ license?: string;
137
+ icon?: string;
138
+ }>;
139
+ };
140
+ const rows = (manifest.plugins ?? []).map((entry) => ({
141
+ name: entry.name,
142
+ ...(entry.source?.repo ? { repo: entry.source.repo } : {}),
143
+ ...(entry.source?.ref ? { ref: entry.source.ref } : {}),
144
+ ...(entry.source?.path ? { path: entry.source.path } : {}),
145
+ description: entry.description,
146
+ category: entry.category,
147
+ homepage: entry.homepage,
148
+ license: entry.license,
149
+ icon: entry.icon,
150
+ }));
151
+ return new Response(JSON.stringify({ plugins: rows }), { status: 200 });
121
152
  }
122
153
 
123
154
  if (url.startsWith(DOWNLOAD_HOST)) {
@@ -254,113 +285,6 @@ describe("installPlugin — install lifecycle", () => {
254
285
  rmSync(ws, { recursive: true, force: true });
255
286
  });
256
287
 
257
- test("installs a bundled standard package and discovers its MCP server", async () => {
258
- const result = await installPlugin(
259
- {
260
- name: "fathom",
261
- trustedSource: {
262
- kind: "local",
263
- path: "plugins/mcp-catalog/fathom",
264
- version: "1.0.0",
265
- },
266
- },
267
- {
268
- fetch: (async () => {
269
- throw new Error("local package install must not fetch");
270
- }) as FetchLike,
271
- runGit: unusedGitRunner,
272
- workspacePluginsDir: pluginsDir,
273
- materializeLocalPackage: (path, version, destination) => {
274
- expect(path).toBe("plugins/mcp-catalog/fathom");
275
- expect(version).toBe("1.0.0");
276
- writeFileSync(
277
- join(destination, "plugin.json"),
278
- JSON.stringify({
279
- $schema:
280
- "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
281
- name: "fathom",
282
- version: "1.0.0",
283
- }),
284
- );
285
- writeFileSync(
286
- join(destination, "mcp.json"),
287
- JSON.stringify({
288
- $schema:
289
- "https://agent-plugins.org/schemas/1.0.0/mcp.schema.json",
290
- mcpServers: {
291
- fathom: {
292
- type: "streamable-http",
293
- url: "https://api.fathom.ai/mcp",
294
- },
295
- },
296
- }),
297
- );
298
- return 2;
299
- },
300
- },
301
- );
302
-
303
- expect(result).toMatchObject({
304
- name: "fathom",
305
- fileCount: 2,
306
- ref: "1.0.0",
307
- commit: null,
308
- });
309
- expect(readInstallMeta(result.target)?.source).toEqual({
310
- kind: "local",
311
- path: "plugins/mcp-catalog/fathom",
312
- version: "1.0.0",
313
- });
314
- expect(
315
- readPluginMcpServers({ workspacePluginsDir: pluginsDir }).servers,
316
- ).toEqual([
317
- expect.objectContaining({
318
- pluginName: "fathom",
319
- serverKey: "fathom",
320
- }),
321
- ]);
322
- });
323
-
324
- test("installs the reviewed Fathom package from the generated bundle", async () => {
325
- const result = await installPlugin(
326
- {
327
- name: "fathom",
328
- trustedSource: {
329
- kind: "local",
330
- path: "plugins/mcp-catalog/fathom",
331
- version: "1.0.2",
332
- },
333
- },
334
- {
335
- fetch: (async () => {
336
- throw new Error("local package install must not fetch");
337
- }) as FetchLike,
338
- runGit: unusedGitRunner,
339
- workspacePluginsDir: pluginsDir,
340
- },
341
- );
342
-
343
- expect(result).toMatchObject({
344
- name: "fathom",
345
- ref: "1.0.2",
346
- commit: null,
347
- });
348
- expect(readValidatedPluginIcon(result.target).hasIcon).toBe(true);
349
- expect(
350
- readPluginMcpServers({ workspacePluginsDir: pluginsDir }).servers,
351
- ).toEqual([
352
- expect.objectContaining({
353
- pluginName: "fathom",
354
- serverKey: "fathom",
355
- config: expect.objectContaining({
356
- transport: expect.objectContaining({
357
- url: "https://api.fathom.ai/mcp",
358
- }),
359
- }),
360
- }),
361
- ]);
362
- });
363
-
364
288
  test("refuses to overwrite an existing install without --force", async () => {
365
289
  // GIVEN a plugin already installed at <pluginsDir>/caveman
366
290
  const target = join(pluginsDir, "caveman");
@@ -845,7 +769,7 @@ describe("installPlugin — marketplace resolution", () => {
845
769
  ),
846
770
  ).rejects.toMatchObject({
847
771
  constructor: PluginNotFoundError,
848
- message: expect.stringContaining("plugins/marketplace.json"),
772
+ message: expect.stringContaining("the plugin catalog"),
849
773
  });
850
774
  });
851
775
 
@@ -1,10 +1,8 @@
1
1
  /**
2
2
  * Tests for {@link getPluginCatalog}.
3
3
  *
4
- * Exercises the gate between the cloud fetcher and the bundled reader plus
5
- * the per-ref TTL cache. Platform paths drive a fake `deps.fetch` returning a
6
- * `/v1/plugins/` payload (no real network); the offline path reads the bundled
7
- * manifest and must touch the network zero times.
4
+ * Exercises the cloud fetcher wiring and the per-ref TTL cache via a fake
5
+ * `deps.fetch` returning a `/v1/plugins/` payload (no real network).
8
6
  */
9
7
 
10
8
  import {
@@ -19,12 +17,9 @@ import {
19
17
  import type { FetchLike } from "../fetch-like.js";
20
18
  import {
21
19
  getPluginCatalog,
22
- getPluginCatalogForInstalledMetadata,
23
20
  invalidatePluginCatalogCache,
24
- mergePlatformCatalogWithBundledLocals,
25
21
  PLUGIN_CATALOG_CACHE_TTL_MS,
26
22
  } from "../plugin-catalog-cache.js";
27
- import { readBundledPluginCatalog } from "../plugin-catalog-local.js";
28
23
  import type { SearchPluginsDeps } from "../search-plugins.js";
29
24
  import type { PluginCatalog } from "../search-plugins.js";
30
25
 
@@ -68,28 +63,13 @@ function failingFetch(): { fetch: FetchLike; calls: () => number } {
68
63
  return { fetch, calls: () => calls };
69
64
  }
70
65
 
71
- const ORIGINAL_ENV = {
72
- IS_CLOUD: process.env.IS_CLOUD,
73
- CADET_DISABLE_CLOUD: process.env.CADET_DISABLE_CLOUD,
74
- };
75
-
76
66
  describe("getPluginCatalog", () => {
77
67
  beforeEach(() => {
78
68
  invalidatePluginCatalogCache();
79
- // Default: platform features enabled (neither flag set).
80
- delete process.env.IS_CLOUD;
81
- delete process.env.CADET_DISABLE_CLOUD;
82
69
  });
83
70
 
84
71
  afterEach(() => {
85
72
  setSystemTime();
86
- for (const [key, value] of Object.entries(ORIGINAL_ENV)) {
87
- if (value === undefined) {
88
- delete process.env[key];
89
- } else {
90
- process.env[key] = value;
91
- }
92
- }
93
73
  });
94
74
 
95
75
  test("fetches from the cloud once, then serves cache within the TTL", async () => {
@@ -155,167 +135,4 @@ describe("getPluginCatalog", () => {
155
135
  expect(err).toBeInstanceOf(Error);
156
136
  expect(failing.calls()).toBe(1);
157
137
  });
158
-
159
- test("reads the bundled catalog with zero network when platform is disabled", async () => {
160
- // GIVEN platform features disabled (offline / self-hosted)
161
- process.env.CADET_DISABLE_CLOUD = "true";
162
- delete process.env.IS_CLOUD;
163
-
164
- const { fetch, calls } = platformFetch(["ignored"]);
165
- const deps: SearchPluginsDeps = {
166
- fetch,
167
- featureFlagEnabled: () => true,
168
- };
169
-
170
- // WHEN we request the catalog
171
- const result = await getPluginCatalog("main", deps);
172
-
173
- // THEN it comes from the bundled manifest and no fetch is made
174
- expect(calls()).toBe(0);
175
- const bundled = readBundledPluginCatalog();
176
- expect(result.matches).toEqual(bundled.matches);
177
- // The requested ref is echoed onto the wire contract.
178
- expect(result.ref).toBe("main");
179
- });
180
-
181
- test("applies feature-flag visibility to bundled catalog entries", async () => {
182
- process.env.CADET_DISABLE_CLOUD = "true";
183
- delete process.env.IS_CLOUD;
184
-
185
- const { fetch } = platformFetch(["ignored"]);
186
- const result = await getPluginCatalog("main", {
187
- fetch,
188
- featureFlagEnabled: () => false,
189
- });
190
-
191
- expect(result.matches.map((match) => match.name)).not.toContain("gamma");
192
- expect(result.matches.map((match) => match.name)).toContain("fathom");
193
- });
194
-
195
- test("preserves hidden entries for installed-plugin metadata", async () => {
196
- process.env.CADET_DISABLE_CLOUD = "true";
197
- delete process.env.IS_CLOUD;
198
-
199
- const { fetch } = platformFetch(["ignored"]);
200
- const result = await getPluginCatalogForInstalledMetadata("main", {
201
- fetch,
202
- });
203
-
204
- expect(result.matches.map((match) => match.name)).toContain("gamma");
205
- });
206
- });
207
-
208
- describe("mergePlatformCatalogWithBundledLocals", () => {
209
- test("adds local packages while keeping a cloud row on name collision", () => {
210
- const platform: PluginCatalog = {
211
- ref: "main",
212
- matches: [
213
- {
214
- name: "fathom",
215
- path: "github:provider/fathom@pin",
216
- category: null,
217
- source: {
218
- kind: "github",
219
- repo: "provider/fathom",
220
- ref: "0".repeat(40),
221
- },
222
- },
223
- ],
224
- };
225
- const bundled: PluginCatalog = {
226
- ref: "bundled",
227
- matches: [
228
- {
229
- name: "fathom",
230
- path: "local:plugins/mcp-catalog/fathom@1.0.0",
231
- category: null,
232
- source: {
233
- kind: "local",
234
- path: "plugins/mcp-catalog/fathom",
235
- version: "1.0.0",
236
- },
237
- },
238
- {
239
- name: "notion",
240
- path: "local:plugins/mcp-catalog/notion@1.0.0",
241
- category: null,
242
- source: {
243
- kind: "local",
244
- path: "plugins/mcp-catalog/notion",
245
- version: "1.0.0",
246
- },
247
- },
248
- ],
249
- };
250
-
251
- const merged = mergePlatformCatalogWithBundledLocals(platform, bundled);
252
-
253
- expect(merged.matches.map((match) => match.name)).toEqual([
254
- "fathom",
255
- "notion",
256
- ]);
257
- expect(merged.matches[0]?.source.kind).toBe("github");
258
- expect(merged.matches[1]?.source.kind).toBe("local");
259
- expect(merged.ref).toBe("main");
260
- });
261
- test("keeps the bundled integration when a cloud row without one shadows it", () => {
262
- const integration = {
263
- kind: "mcp",
264
- displayName: "Fathom",
265
- documentationUrl: "https://example.com/docs",
266
- verifiedAt: "2026-09-10",
267
- verification: "documentation-only",
268
- setup: { mode: "oauth", instructions: "Sign in." },
269
- logo: "fathom.png",
270
- } as const;
271
- const platformIntegration = { ...integration, displayName: "Platform" };
272
- const platform: PluginCatalog = {
273
- ref: "main",
274
- matches: [
275
- {
276
- name: "fathom",
277
- path: "github:provider/fathom@pin",
278
- category: null,
279
- source: {
280
- kind: "github",
281
- repo: "provider/fathom",
282
- ref: "0".repeat(40),
283
- },
284
- },
285
- {
286
- name: "linear",
287
- path: "github:provider/linear@pin",
288
- category: null,
289
- integration: platformIntegration,
290
- source: {
291
- kind: "github",
292
- repo: "provider/linear",
293
- ref: "0".repeat(40),
294
- },
295
- },
296
- ],
297
- };
298
- const bundled: PluginCatalog = {
299
- ref: "bundled",
300
- matches: ["fathom", "linear"].map((name) => ({
301
- name,
302
- path: `local:plugins/mcp-catalog/${name}@1.0.0`,
303
- category: null,
304
- integration,
305
- source: {
306
- kind: "local",
307
- path: `plugins/mcp-catalog/${name}`,
308
- version: "1.0.0",
309
- },
310
- })),
311
- };
312
-
313
- const merged = mergePlatformCatalogWithBundledLocals(platform, bundled);
314
-
315
- const [fathom, linear] = merged.matches;
316
- expect(fathom?.source.kind).toBe("github");
317
- expect(fathom?.integration).toEqual(integration);
318
- expect(linear?.source.kind).toBe("github");
319
- expect(linear?.integration).toEqual(platformIntegration);
320
- });
321
138
  });
@@ -2,9 +2,9 @@
2
2
  * Tests for the gated catalog resolvers.
3
3
  *
4
4
  * `resolveSourceFromMatch` is exercised as a pure function. The catalog-backed
5
- * resolvers run against the bundled manifest with platform features disabled
6
- * (`CADET_DISABLE_CLOUD`, zero network), plus a cloud-enabled case that
7
- * asserts a rejecting catalog fetch propagates rather than resolving to `null`.
5
+ * resolvers run against a mocked cloud catalog (zero real network), plus a
6
+ * case that asserts a rejecting catalog fetch propagates rather than
7
+ * resolving to `null`.
8
8
  */
9
9
 
10
10
  import { afterEach, beforeEach, describe, expect, test } from "bun:test";
@@ -39,25 +39,6 @@ function match(
39
39
  }
40
40
 
41
41
  describe("resolveSourceFromMatch", () => {
42
- test("returns an exact bundled package path and version", () => {
43
- expect(
44
- resolveSourceFromMatch({
45
- name: "fathom",
46
- path: "local:plugins/mcp-catalog/fathom@1.0.0",
47
- category: null,
48
- source: {
49
- kind: "local",
50
- path: "plugins/mcp-catalog/fathom",
51
- version: "1.0.0",
52
- },
53
- }),
54
- ).toEqual({
55
- kind: "local",
56
- path: "plugins/mcp-catalog/fathom",
57
- version: "1.0.0",
58
- });
59
- });
60
-
61
42
  test("returns owner/repo/path/ref for a full-SHA match", () => {
62
43
  expect(
63
44
  resolveSourceFromMatch(
@@ -138,37 +119,39 @@ describe("resolveSourceFromMatch", () => {
138
119
  });
139
120
  });
140
121
 
141
- describe("catalog-backed resolvers (bundled, offline)", () => {
142
- const ORIGINAL_ENV = {
143
- IS_CLOUD: process.env.IS_CLOUD,
144
- CADET_DISABLE_CLOUD: process.env.CADET_DISABLE_CLOUD,
145
- };
146
-
122
+ describe("catalog-backed resolvers (cloud catalog)", () => {
147
123
  beforeEach(() => {
148
124
  invalidatePluginCatalogCache();
149
- process.env.CADET_DISABLE_CLOUD = "true";
150
- delete process.env.IS_CLOUD;
151
125
  });
152
126
 
153
127
  afterEach(() => {
154
- for (const [key, value] of Object.entries(ORIGINAL_ENV)) {
155
- if (value === undefined) {
156
- delete process.env[key];
157
- } else {
158
- process.env[key] = value;
159
- }
160
- }
161
- });
162
-
163
- // A rejecting fetch proves the bundled path never touches the network.
164
- const rejectingDeps: SearchPluginsDeps = {
165
- fetch: (async () => {
166
- throw new Error("network must not be used");
167
- }) as FetchLike,
128
+ invalidatePluginCatalogCache();
129
+ });
130
+
131
+ /** A `deps.fetch` serving a small `/v1/plugins/` payload. */
132
+ const catalogDeps: SearchPluginsDeps = {
133
+ fetch: (async () =>
134
+ new Response(
135
+ JSON.stringify({
136
+ plugins: [
137
+ {
138
+ name: "caveman",
139
+ repo: "JuliusBrussee/caveman",
140
+ ref: FULL_SHA,
141
+ },
142
+ {
143
+ name: "gamma",
144
+ repo: "acme/gamma",
145
+ ref: FULL_SHA,
146
+ },
147
+ ],
148
+ }),
149
+ { status: 200 },
150
+ )) as FetchLike,
168
151
  };
169
152
 
170
- test("findCatalogEntry returns the bundled entry for a known name", async () => {
171
- const entry = await findCatalogEntry("caveman", rejectingDeps);
153
+ test("findCatalogEntry returns the catalog entry for a known name", async () => {
154
+ const entry = await findCatalogEntry("caveman", catalogDeps);
172
155
  expect(entry?.name).toBe("caveman");
173
156
  expect(entry?.source).toEqual({
174
157
  kind: "github",
@@ -180,7 +163,7 @@ describe("catalog-backed resolvers (bundled, offline)", () => {
180
163
 
181
164
  test("resolvePluginSourceFromCatalog resolves a known name to its pinned source", async () => {
182
165
  expect(
183
- await resolvePluginSourceFromCatalog("caveman", rejectingDeps),
166
+ await resolvePluginSourceFromCatalog("caveman", catalogDeps),
184
167
  ).toEqual({
185
168
  kind: "github",
186
169
  owner: "JuliusBrussee",
@@ -192,14 +175,14 @@ describe("catalog-backed resolvers (bundled, offline)", () => {
192
175
 
193
176
  test("resolvePluginSourceFromCatalog returns null for an unknown name", async () => {
194
177
  expect(
195
- await resolvePluginSourceFromCatalog("no-such-plugin", rejectingDeps),
178
+ await resolvePluginSourceFromCatalog("no-such-plugin", catalogDeps),
196
179
  ).toBeNull();
197
180
  });
198
181
 
199
182
  test("does not resolve a QA integration while its feature flag is off", async () => {
200
183
  expect(
201
184
  await resolvePluginSourceFromCatalog("gamma", {
202
- ...rejectingDeps,
185
+ ...catalogDeps,
203
186
  featureFlagEnabled: () => false,
204
187
  }),
205
188
  ).toBeNull();
@@ -208,37 +191,24 @@ describe("catalog-backed resolvers (bundled, offline)", () => {
208
191
  test("resolves a QA integration while its feature flag is on", async () => {
209
192
  expect(
210
193
  await resolvePluginSourceFromCatalog("gamma", {
211
- ...rejectingDeps,
194
+ ...catalogDeps,
212
195
  featureFlagEnabled: () => true,
213
196
  }),
214
197
  ).toMatchObject({
215
- kind: "local",
216
- path: "plugins/mcp-catalog/gamma",
198
+ kind: "github",
199
+ owner: "acme",
200
+ repo: "gamma",
217
201
  });
218
202
  });
219
203
  });
220
204
 
221
205
  describe("catalog-backed resolvers (platform enabled)", () => {
222
- const ORIGINAL_ENV = {
223
- IS_CLOUD: process.env.IS_CLOUD,
224
- CADET_DISABLE_CLOUD: process.env.CADET_DISABLE_CLOUD,
225
- };
226
-
227
206
  beforeEach(() => {
228
207
  invalidatePluginCatalogCache();
229
- delete process.env.IS_CLOUD;
230
- delete process.env.CADET_DISABLE_CLOUD;
231
208
  });
232
209
 
233
210
  afterEach(() => {
234
211
  invalidatePluginCatalogCache();
235
- for (const [key, value] of Object.entries(ORIGINAL_ENV)) {
236
- if (value === undefined) {
237
- delete process.env[key];
238
- } else {
239
- process.env[key] = value;
240
- }
241
- }
242
212
  });
243
213
 
244
214
  test("propagates PluginCatalogUnavailableError instead of resolving to null", async () => {
@@ -6,16 +6,14 @@ import {
6
6
  } from "../plugin-catalog-visibility.js";
7
7
  import type { PluginCatalog, PluginSearchMatch } from "../search-plugins.js";
8
8
 
9
+ const SHA = "0".repeat(40);
10
+
9
11
  function match(name: string): PluginSearchMatch {
10
12
  return {
11
13
  name,
12
- path: `local:plugins/mcp-catalog/${name}@1.0.0`,
14
+ path: `github:acme/${name}@${SHA}`,
13
15
  category: null,
14
- source: {
15
- kind: "local",
16
- path: `plugins/mcp-catalog/${name}`,
17
- version: "1.0.0",
18
- },
16
+ source: { kind: "github", repo: `acme/${name}`, ref: SHA },
19
17
  };
20
18
  }
21
19