@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
@@ -35,7 +35,7 @@ import {
35
35
  } from "../../archive/ustar-size.js";
36
36
  import { getCloudBaseUrl } from "../../config/env.js";
37
37
  import { getExistingDeviceId } from "../../util/device-id.js";
38
- import { getWorkspacePluginsDir } from "../../util/platform.js";
38
+ import { getWorkspacePluginsDir } from "../../util/layout.js";
39
39
  import { getPluginManifestInstallAction } from "../../util/plugin-manifest.js";
40
40
  import { APP_VERSION } from "../../version.js";
41
41
  import type { FetchLike } from "./fetch-like.js";
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * Install a reviewed plugin by name from its catalog source.
3
3
  *
4
- * A name resolves to an entry in the curated `plugins/marketplace.json`
5
- * manifest. A GitHub source is fetched with a shallow clone at its pinned ref.
4
+ * A name resolves to an entry in the curated plugin catalog (Cadet Cloud's
5
+ * marketplace). A GitHub source is fetched with a shallow clone at its pinned ref.
6
6
  * A local source is read from the exact package version embedded in the
7
7
  * assistant distribution. Both are materialized into
8
8
  * `<workspacePluginsDir>/<name>/` and record their source in the provenance
@@ -45,34 +45,31 @@ import {
45
45
  stripPreservedUserState,
46
46
  } from "../../plugins/plugin-tree-walk.js";
47
47
  import { ensureBun } from "../../util/bun-runtime.js";
48
+ import { getWorkspacePluginsDir } from "../../util/layout.js";
48
49
  import {
49
50
  addToPathEnv,
50
51
  getExtraToolPathDirs,
51
- getWorkspacePluginsDir,
52
52
  isWindows,
53
- } from "../../util/platform.js";
53
+ } from "../../util/os.js";
54
54
  import {
55
55
  getPluginManifestInstallAction,
56
56
  readPluginManifest,
57
57
  } from "../../util/plugin-manifest.js";
58
- import { materializeBundledPluginPackage } from "./bundled-plugin-packages.js";
59
58
  import type { FetchLike } from "./fetch-like.js";
60
59
  import {
61
60
  type DependencyInstaller,
62
61
  installPluginDependencies,
63
62
  } from "./install-plugin-dependencies.js";
63
+ import { getPluginCatalog } from "./plugin-catalog-cache.js";
64
+ import { resolveSourceFromMatch } from "./plugin-catalog-resolve.js";
64
65
  import {
65
66
  computeContentHash,
66
67
  computeFingerprint,
67
68
  type Fingerprint,
68
69
  parseFingerprint,
69
70
  } from "./plugin-fingerprint.js";
70
- import {
71
- fetchMarketplaceEntries,
72
- MarketplaceFetchError,
73
- type ResolvedPluginSource,
74
- resolveMarketplaceSource,
75
- } from "./plugin-marketplace.js";
71
+ import type { ResolvedPluginSource } from "./plugin-marketplace.js";
72
+ import { PluginCatalogUnavailableError } from "./search-plugins.js";
76
73
 
77
74
  const execFileAsync = promisify(execFile);
78
75
 
@@ -142,21 +139,19 @@ export interface InstallPluginOptions {
142
139
  readonly commitOverride?: string;
143
140
  /**
144
141
  * Install directly from these GitHub coordinates, bypassing the curated
145
- * `plugins/marketplace.json` whitelist. The tree is materialized verbatim —
146
- * no curated adapter stub is overlaid — and the source is *untrusted*, so the
147
- * caller is responsible for surfacing a warning. Used to install a plugin not
148
- * yet in the marketplace (typically one still under development). When set,
142
+ * plugin catalog. The tree is materialized verbatim — no curated adapter stub
143
+ * is overlaid — and the source is *untrusted*, so the caller is responsible
144
+ * for surfacing a warning. Used to install a plugin not yet in the catalog
145
+ * (typically one still under development). When set,
149
146
  * {@link InstallPluginOptions.ref}, {@link InstallPluginOptions.commitOverride},
150
147
  * and marketplace resolution are all skipped; `directSource.ref` selects the
151
148
  * commit to clone (a branch, tag, `HEAD`, or full SHA).
152
149
  */
153
150
  readonly directSource?: PluginFetchSource;
154
151
  /**
155
- * Install from an exact source resolved by the reviewed catalog. GitHub
156
- * sources retain the curated adapter overlay. Local sources are complete
157
- * packages embedded in the assistant distribution and do not use an adapter.
158
- * Marketplace resolution and {@link InstallPluginOptions.commitOverride} are
159
- * skipped when this is set.
152
+ * Install from an exact source resolved by the reviewed catalog; retains
153
+ * the curated adapter overlay. Marketplace resolution and
154
+ * {@link InstallPluginOptions.commitOverride} are skipped when this is set.
160
155
  */
161
156
  readonly trustedSource?: PluginMaterializeSource;
162
157
  }
@@ -191,8 +186,6 @@ export interface InstallPluginDeps {
191
186
  readonly beforeSwap?: () => Promise<void>;
192
187
  /** Consent gate between staging and finalize; see {@link ConfirmStagedInstall}. */
193
188
  readonly confirmStaged?: ConfirmStagedInstall;
194
- /** Override embedded-package materialization for focused tests. */
195
- readonly materializeLocalPackage?: typeof materializeBundledPluginPackage;
196
189
  }
197
190
 
198
191
  /** Successful install result. */
@@ -315,29 +308,10 @@ export interface PluginFetchSource {
315
308
  readonly ref: string;
316
309
  }
317
310
 
318
- /** Reviewed package embedded in the assistant distribution. */
319
- export interface LocalPluginFetchSource {
320
- readonly kind: "local";
321
- readonly path: string;
322
- readonly version: string;
323
- readonly ref?: undefined;
324
- }
325
-
326
- export type PluginMaterializeSource =
327
- | PluginFetchSource
328
- | LocalPluginFetchSource;
329
-
330
- export function isLocalPluginSource(
331
- source: PluginMaterializeSource,
332
- ): source is LocalPluginFetchSource {
333
- return "kind" in source && source.kind === "local";
334
- }
311
+ export type PluginMaterializeSource = PluginFetchSource;
335
312
 
336
313
  /** Build the `owner/repo/path` label used in not-found errors. */
337
314
  function sourceLabel(source: PluginMaterializeSource): string {
338
- if (isLocalPluginSource(source)) {
339
- return source.path;
340
- }
341
315
  return source.rootPath
342
316
  ? `${source.owner}/${source.repo}/${source.rootPath}`
343
317
  : `${source.owner}/${source.repo}`;
@@ -345,14 +319,11 @@ function sourceLabel(source: PluginMaterializeSource): string {
345
319
 
346
320
  /**
347
321
  * Resolve a plugin name to its exact marketplace source, or `null` when no
348
- * entry claims the name. A GitHub entry may have a same-named adapter stub
349
- * under `plugins/<name>` that is overlaid onto the clone. A local entry refers
350
- * to a fully self-contained package embedded in the assistant distribution.
322
+ * entry claims the name. A GitHub entry resolves to exact repo coordinates.
351
323
  *
352
- * A transient marketplace failure (rate-limit / 5xx) surfaces as a retryable
353
- * {@link PluginSourceUnavailableError}; a malformed manifest propagates as a
354
- * hard error, since the marketplace is the source of truth for what is
355
- * installable.
324
+ * A transient catalog failure (rate-limit / 5xx) surfaces as a retryable
325
+ * {@link PluginSourceUnavailableError}; a malformed row propagates as a hard
326
+ * error, since the catalog is the source of truth for what is installable.
356
327
  */
357
328
  async function resolvePluginSource(
358
329
  name: string,
@@ -361,14 +332,12 @@ async function resolvePluginSource(
361
332
  ): Promise<PluginMaterializeSource | null> {
362
333
  let resolved: ResolvedPluginSource | null;
363
334
  try {
364
- const entries = await fetchMarketplaceEntries(
365
- { fetch: fetchFn },
366
- { ref: marketplaceRef },
367
- );
368
- resolved = resolveMarketplaceSource(name, entries);
335
+ const catalog = await getPluginCatalog(marketplaceRef, { fetch: fetchFn });
336
+ const match = catalog.matches.find((candidate) => candidate.name === name);
337
+ resolved = match ? resolveSourceFromMatch(match) : null;
369
338
  } catch (err) {
370
- if (err instanceof MarketplaceFetchError && err.transient) {
371
- throw new PluginSourceUnavailableError(err.message, err.status ?? 503);
339
+ if (err instanceof PluginCatalogUnavailableError) {
340
+ throw new PluginSourceUnavailableError(err.message, err.status);
372
341
  }
373
342
  throw err;
374
343
  }
@@ -377,14 +346,6 @@ async function resolvePluginSource(
377
346
  return null;
378
347
  }
379
348
 
380
- if (resolved.kind === "local") {
381
- return {
382
- kind: "local",
383
- path: resolved.path,
384
- version: resolved.version,
385
- };
386
- }
387
-
388
349
  return {
389
350
  owner: resolved.owner,
390
351
  repo: resolved.repo,
@@ -479,9 +440,9 @@ export async function installPlugin(
479
440
 
480
441
  // A direct install bypasses the marketplace whitelist entirely: the source is
481
442
  // supplied by the caller and the tree is materialized verbatim (no curated
482
- // adapter stub). A trusted pre-resolved source (offline bundled-catalog
483
- // install) supplies its coordinates too but keeps the curated overlay.
484
- // Otherwise the name is resolved against the reviewed manifest.
443
+ // adapter stub). A trusted pre-resolved source (catalog-backed install)
444
+ // supplies its coordinates too but keeps the curated overlay. Otherwise the
445
+ // name is resolved against the reviewed catalog.
485
446
  let effectiveSource: PluginMaterializeSource;
486
447
  // Ref the curated adapter stub is fetched at, or `null` to skip the overlay.
487
448
  let stubRef: string | null;
@@ -489,35 +450,27 @@ export async function installPlugin(
489
450
  effectiveSource = opts.directSource;
490
451
  stubRef = null;
491
452
  } else if (opts.trustedSource) {
492
- // Offline bundled-catalog install: clone the external content verbatim but
493
- // keep the curated adapter overlay (like the marketplace-git trusted path).
494
- // The stub lives in this repo, not in `trustedSource` (the external plugin),
495
- // so `trustedSource.ref` can't address it; with no canonical-repo pin
496
- // recorded offline, the stub is fetched at `marketplaceRef` (its default,
497
- // DEFAULT_PLUGIN_REF).
453
+ // Trusted-catalog install: clone the external content verbatim but keep
454
+ // the curated adapter overlay (like the marketplace-git trusted path).
455
+ // The stub lives in this repo, not in `trustedSource` (the external
456
+ // plugin), so `trustedSource.ref` can't address it; the stub is fetched
457
+ // at `marketplaceRef` (its default, DEFAULT_PLUGIN_REF).
498
458
  effectiveSource = opts.trustedSource;
499
- stubRef = isLocalPluginSource(effectiveSource) ? null : marketplaceRef;
459
+ stubRef = marketplaceRef;
500
460
  } else {
501
461
  const source = await resolvePluginSource(name, marketplaceRef, deps.fetch);
502
462
  if (!source) {
503
- throw new PluginNotFoundError(
504
- name,
505
- marketplaceRef,
506
- "plugins/marketplace.json",
507
- );
463
+ throw new PluginNotFoundError(name, marketplaceRef, "the plugin catalog");
508
464
  }
509
465
  // A commit override installs a specific plugin revision while still taking
510
466
  // owner/repo/path (and the adapter stub, via `marketplaceRef`) from the
511
467
  // manifest; otherwise the reviewed pin from the manifest is materialized.
512
- effectiveSource =
513
- opts.commitOverride && !isLocalPluginSource(source)
514
- ? { ...source, ref: opts.commitOverride }
515
- : source;
516
- stubRef = isLocalPluginSource(effectiveSource) ? null : marketplaceRef;
468
+ effectiveSource = opts.commitOverride
469
+ ? { ...source, ref: opts.commitOverride }
470
+ : source;
471
+ stubRef = marketplaceRef;
517
472
  }
518
- const ref = isLocalPluginSource(effectiveSource)
519
- ? effectiveSource.version
520
- : effectiveSource.ref;
473
+ const ref = effectiveSource.ref;
521
474
 
522
475
  const pluginsDir = deps.workspacePluginsDir ?? getWorkspacePluginsDir();
523
476
  const target = join(pluginsDir, name);
@@ -754,28 +707,19 @@ export const INSTALL_META_FILENAME = "install-meta.json";
754
707
  /**
755
708
  * Which catalog manages an installed plugin. Mirrors the skill origin values
756
709
  * (`SkillInstallMeta.origin` in `src/skills/install-meta.ts`) so the two
757
- * systems keep a consistent vocabulary. `"cadet"` denotes the first-party
758
- * `marketplace.json`; the union widens as new sources are supported.
710
+ * systems keep a consistent vocabulary. `"cadet"` denotes first-party; the
711
+ * union widens as new sources are supported.
759
712
  */
760
713
  export type InstallOrigin = "cadet";
761
714
 
762
715
  /** Resolved source coordinates recorded in the provenance sidecar. */
763
- export type InstallMetaSource =
764
- | {
765
- readonly kind: "github";
766
- readonly owner: string;
767
- readonly repo: string;
768
- readonly path?: string;
769
- readonly ref: string;
770
- }
771
- | {
772
- readonly kind: "local";
773
- readonly path: string;
774
- readonly version: string;
775
- readonly owner?: undefined;
776
- readonly repo?: undefined;
777
- readonly ref?: undefined;
778
- };
716
+ export type InstallMetaSource = {
717
+ readonly kind: "github";
718
+ readonly owner: string;
719
+ readonly repo: string;
720
+ readonly path?: string;
721
+ readonly ref: string;
722
+ };
779
723
 
780
724
  /**
781
725
  * Parsed contents of the `install-meta.json` provenance sidecar — what was
@@ -885,19 +829,11 @@ export async function materializePluginTree(
885
829
  },
886
830
  deps: InstallPluginDeps,
887
831
  ): Promise<MaterializedTree> {
888
- const cloned = isLocalPluginSource(opts.source)
889
- ? {
890
- fileCount: (
891
- deps.materializeLocalPackage ?? materializeBundledPluginPackage
892
- )(opts.source.path, opts.source.version, opts.destDir),
893
- commit: null,
894
- committedAt: null,
895
- }
896
- : await copyExternalViaGit(
897
- opts.source,
898
- opts.destDir,
899
- deps.runGit ?? defaultGitRunner,
900
- );
832
+ const cloned = await copyExternalViaGit(
833
+ opts.source,
834
+ opts.destDir,
835
+ deps.runGit ?? defaultGitRunner,
836
+ );
901
837
  // An external clone is often a foreign-ecosystem plugin (e.g. a Claude Code
902
838
  // plugin) that the Cadet loader can't run as-is. When we curate an adapter
903
839
  // stub for it, overlay the stub and run its transform so the materialized
@@ -1637,24 +1573,21 @@ function writeInstallMeta(
1637
1573
  contentHash,
1638
1574
  }: WriteInstallMetaParams,
1639
1575
  ): void {
1640
- const local = isLocalPluginSource(source);
1641
1576
  const meta: InstallMeta = {
1642
1577
  origin: "cadet",
1643
1578
  installedAt: new Date().toISOString(),
1644
1579
  version: readStagedManifestVersion(stagingDir),
1645
- sourceRepo: local ? undefined : `${source.owner}/${source.repo}`,
1580
+ sourceRepo: `${source.owner}/${source.repo}`,
1646
1581
  contentHash,
1647
1582
  author: "user",
1648
1583
  name,
1649
- source: local
1650
- ? { kind: "local", path: source.path, version: source.version }
1651
- : {
1652
- kind: "github",
1653
- owner: source.owner,
1654
- repo: source.repo,
1655
- path: source.rootPath || undefined,
1656
- ref,
1657
- },
1584
+ source: {
1585
+ kind: "github",
1586
+ owner: source.owner,
1587
+ repo: source.repo,
1588
+ path: source.rootPath || undefined,
1589
+ ref,
1590
+ },
1658
1591
  commit,
1659
1592
  committedAt,
1660
1593
  ...(etag ? { etag } : {}),
@@ -1702,32 +1635,20 @@ export function readInstallMeta(pluginDir: string): InstallMeta | null {
1702
1635
  return null;
1703
1636
  }
1704
1637
 
1705
- let parsedSource: InstallMetaSource;
1706
- if (source.kind === "local") {
1707
- if (typeof source.path !== "string" || typeof source.version !== "string") {
1708
- return null;
1709
- }
1710
- parsedSource = {
1711
- kind: "local",
1712
- path: source.path,
1713
- version: source.version,
1714
- };
1715
- } else {
1716
- if (
1717
- typeof source.owner !== "string" ||
1718
- typeof source.repo !== "string" ||
1719
- typeof source.ref !== "string"
1720
- ) {
1721
- return null;
1722
- }
1723
- parsedSource = {
1724
- kind: "github",
1725
- owner: source.owner,
1726
- repo: source.repo,
1727
- path: typeof source.path === "string" ? source.path : undefined,
1728
- ref: source.ref,
1729
- };
1638
+ if (
1639
+ typeof source.owner !== "string" ||
1640
+ typeof source.repo !== "string" ||
1641
+ typeof source.ref !== "string"
1642
+ ) {
1643
+ return null;
1730
1644
  }
1645
+ const parsedSource: InstallMetaSource = {
1646
+ kind: "github",
1647
+ owner: source.owner,
1648
+ repo: source.repo,
1649
+ path: typeof source.path === "string" ? source.path : undefined,
1650
+ ref: source.ref,
1651
+ };
1731
1652
 
1732
1653
  const optionalString = (value: unknown): string | undefined =>
1733
1654
  typeof value === "string" ? value : undefined;
@@ -59,7 +59,7 @@ import { promisify } from "node:util";
59
59
 
60
60
  import { ensureBun } from "../../util/bun-runtime.js";
61
61
  import { getLogger } from "../../util/logger.js";
62
- import { addToPathEnv } from "../../util/platform.js";
62
+ import { addToPathEnv } from "../../util/os.js";
63
63
 
64
64
  const execFileAsync = promisify(execFile);
65
65
 
@@ -18,7 +18,7 @@ import { fileURLToPath } from "node:url";
18
18
 
19
19
  import { z } from "zod";
20
20
 
21
- import { getWorkspacePluginsDir } from "../../util/platform.js";
21
+ import { getWorkspacePluginsDir } from "../../util/layout.js";
22
22
  import {
23
23
  LEGACY_PLUGIN_MANIFEST,
24
24
  readPluginManifest,
@@ -16,7 +16,7 @@ import { spawn } from "node:child_process";
16
16
  import { mkdirSync, writeFileSync } from "node:fs";
17
17
  import { join } from "node:path";
18
18
 
19
- import { getWorkspaceDir } from "../../util/platform.js";
19
+ import { getWorkspaceDir } from "../../util/layout.js";
20
20
 
21
21
  export function openInHostBrowser(
22
22
  url: string,
@@ -1,19 +1,13 @@
1
1
  /**
2
2
  * In-memory cache for the installable plugin catalog.
3
3
  *
4
- * Platform-first: when platform features are enabled the catalog is fetched
5
- * from Cadet Cloud and any fetch failure propagates (fail hard — no
4
+ * The catalog is fetched from Cadet Cloud (`CADET_CLOUD_URL`, overridable for
5
+ * air-gapped installs) and any fetch failure propagates (fail hard — no
6
6
  * stale-cache smoothing). Successful loads are held per git ref for a short
7
- * TTL. When `CADET_DISABLE_CLOUD` disables platform features the bundled
8
- * offline manifest is read instead, with zero network calls.
7
+ * TTL.
9
8
  */
10
9
 
11
- import { areCloudFeaturesEnabled } from "../../cloud/feature-gate.js";
12
10
  import { fetchPluginCatalogFromPlatform } from "./plugin-catalog-cloud.js";
13
- import {
14
- readBundledLocalPluginCatalog,
15
- readBundledPluginCatalog,
16
- } from "./plugin-catalog-local.js";
17
11
  import { filterPluginCatalogByFeatureFlags } from "./plugin-catalog-visibility.js";
18
12
  import type { PluginCatalog, SearchPluginsDeps } from "./search-plugins.js";
19
13
 
@@ -29,62 +23,25 @@ type PluginCatalogLoadDeps = Pick<SearchPluginsDeps, "fetch">;
29
23
 
30
24
  const cache = new Map<string, CacheEntry>();
31
25
 
32
- /**
33
- * Add bundled local packages without overriding cloud-authoritative rows.
34
- * A platform row without an integration borrows the bundled row's
35
- * integration of the same name, so an integration the cloud omits or
36
- * serves malformed never disappears from the catalog.
37
- */
38
- export function mergePlatformCatalogWithBundledLocals(
39
- platform: PluginCatalog,
40
- bundledLocal: PluginCatalog = readBundledLocalPluginCatalog(),
41
- ): PluginCatalog {
42
- const bundledByName = new Map(
43
- bundledLocal.matches.map((match) => [match.name, match]),
44
- );
45
- const platformMatches = platform.matches.map((match) => {
46
- const bundledIntegration = bundledByName.get(match.name)?.integration;
47
- if (match.integration || !bundledIntegration) {
48
- return match;
49
- }
50
- return { ...match, integration: bundledIntegration };
51
- });
52
- const seen = new Set(platform.matches.map((match) => match.name));
53
- return {
54
- ref: platform.ref,
55
- matches: [
56
- ...platformMatches,
57
- ...bundledLocal.matches.filter((match) => !seen.has(match.name)),
58
- ].sort((a, b) => a.name.localeCompare(b.name)),
59
- };
60
- }
61
-
62
26
  /**
63
27
  * Resolve the full plugin catalog at {@link ref}.
64
28
  *
65
- * With platform features disabled the bundled manifest is returned directly —
66
- * an in-memory constant, no network and no TTL. Otherwise the catalog is
67
- * fetched from the cloud and, on success, cached per ref for the TTL; a
68
- * fetch failure propagates so the caller can surface it (e.g. map a rate-limit
69
- * to 503) — no stale catalog is ever served.
29
+ * The catalog is fetched from the cloud and, on success, cached per ref for
30
+ * the TTL; a fetch failure propagates so the caller can surface it (e.g. map
31
+ * a rate-limit to 503) — no stale catalog is ever served.
70
32
  */
71
33
  async function loadPluginCatalog(
72
34
  ref: string,
73
35
  deps: PluginCatalogLoadDeps,
74
36
  ): Promise<PluginCatalog> {
75
- if (!areCloudFeaturesEnabled()) {
76
- return { ...readBundledPluginCatalog(), ref };
77
- }
78
-
79
37
  const cached = cache.get(ref);
80
38
  if (cached && Date.now() - cached.timestamp < PLUGIN_CATALOG_CACHE_TTL_MS) {
81
39
  return cached.catalog;
82
40
  }
83
41
 
84
42
  const catalog = await fetchPluginCatalogFromPlatform(deps, { ref });
85
- const merged = mergePlatformCatalogWithBundledLocals(catalog);
86
- cache.set(ref, { catalog: merged, timestamp: Date.now() });
87
- return merged;
43
+ cache.set(ref, { catalog, timestamp: Date.now() });
44
+ return catalog;
88
45
  }
89
46
 
90
47
  /** Installable catalog with feature-flag visibility applied. */
@@ -3,16 +3,15 @@
3
3
  *
4
4
  * The gated analogues of {@link ./plugin-marketplace}'s `resolveMarketplaceSource`
5
5
  * / GitHub `findMarketplaceEntry`: install-by-name and the detail lookup resolve
6
- * the SAME catalog `search` uses (platform-first via {@link ./plugin-catalog-cache}'s
7
- * `getPluginCatalog`, bundled offline) instead of a direct GitHub
8
- * `plugins/marketplace.json` fetch — so search, install, and details read one source.
6
+ * the SAME catalog `search` uses (via {@link ./plugin-catalog-cache}'s
7
+ * `getPluginCatalog`) instead of a direct GitHub `plugins/marketplace.json`
8
+ * fetch — so search, install, and details read one source.
9
9
  */
10
10
 
11
11
  import { getPluginCatalog } from "./plugin-catalog-cache.js";
12
12
  import { DEFAULT_PLUGIN_REF } from "./plugin-constants.js";
13
13
  import {
14
14
  githubSourceSchema,
15
- localSourceSchema,
16
15
  type ResolvedPluginSource,
17
16
  } from "./plugin-marketplace.js";
18
17
  import type { PluginSearchMatch, SearchPluginsDeps } from "./search-plugins.js";
@@ -41,24 +40,6 @@ export async function findCatalogEntry(
41
40
  export function resolveSourceFromMatch(
42
41
  match: PluginSearchMatch,
43
42
  ): ResolvedPluginSource {
44
- if (match.source.kind === "local") {
45
- const parsed = localSourceSchema.safeParse({
46
- source: "local",
47
- path: match.source.path,
48
- version: match.source.version,
49
- });
50
- if (!parsed.success) {
51
- throw new Error(
52
- `Catalog entry "${match.name}" (${match.source.path}) has an invalid source: ` +
53
- parsed.error.issues.map((issue) => issue.message).join("; "),
54
- );
55
- }
56
- return {
57
- kind: "local",
58
- path: parsed.data.path,
59
- version: parsed.data.version,
60
- };
61
- }
62
43
  // Repo-root `""` maps to `undefined` (omitted = root) so the schema's
63
44
  // non-empty path refine does not reject a valid repo-root entry.
64
45
  const path = match.source.path || undefined;
@@ -34,9 +34,8 @@ import { join } from "node:path";
34
34
 
35
35
  import { z } from "zod";
36
36
 
37
- import { getWorkspacePluginsDir } from "../../util/platform.js";
37
+ import { getWorkspacePluginsDir } from "../../util/layout.js";
38
38
  import { readPluginManifest } from "../../util/plugin-manifest.js";
39
- import { readBundledPluginFile } from "./bundled-plugin-packages.js";
40
39
  import type { FetchLike } from "./fetch-like.js";
41
40
  import { sanitizePluginName } from "./install-from-github.js";
42
41
  import {
@@ -50,9 +49,7 @@ import {
50
49
  import { isPluginCatalogEntryVisible } from "./plugin-catalog-visibility.js";
51
50
  import { DEFAULT_PLUGIN_REF } from "./plugin-constants.js";
52
51
  import { readValidatedPluginIcon } from "./plugin-icon-file.js";
53
- import { fetchMarketplaceEntries } from "./plugin-marketplace.js";
54
52
  import {
55
- marketplaceMatch,
56
53
  PluginCatalogUnavailableError,
57
54
  type PluginMatchSource,
58
55
  type PluginSearchMatch,
@@ -311,17 +308,6 @@ async function readRemotePlugin(
311
308
  source: PluginMatchSource,
312
309
  fetchFn: FetchLike,
313
310
  ): Promise<RemotePlugin> {
314
- if (source.kind === "local") {
315
- const manifest = readBundledPluginFile(
316
- source.path,
317
- source.version,
318
- "plugin.json",
319
- );
320
- return {
321
- manifest: manifest ? safeParseManifest(manifest) : emptyManifest(),
322
- readme: null,
323
- };
324
- }
325
311
  const [owner, repo] = source.repo.split("/", 2) as [string, string];
326
312
  const entries = await listDirSafe(
327
313
  owner,
@@ -430,10 +416,13 @@ async function resolveCatalogEntry(
430
416
  return null;
431
417
  }
432
418
  try {
419
+ // Non-default refs named historical revisions of the old local marketplace
420
+ // manifest; with the catalog living in Cadet Cloud there is nothing to
421
+ // resolve a historical ref against.
433
422
  const match =
434
423
  ref === DEFAULT_PLUGIN_REF
435
424
  ? await findCatalogEntry(name, { fetch: fetchFn })
436
- : await findMarketplaceMatch(name, ref, fetchFn);
425
+ : null;
437
426
  return validateCatalogMatchSource(match);
438
427
  } catch (err) {
439
428
  if (err instanceof PluginCatalogUnavailableError && !installed) {
@@ -466,17 +455,6 @@ function validateCatalogMatchSource(
466
455
  }
467
456
  }
468
457
 
469
- /** Read the GitHub marketplace at {@link ref} and project the named entry. */
470
- async function findMarketplaceMatch(
471
- name: string,
472
- ref: string,
473
- fetchFn: FetchLike,
474
- ): Promise<PluginSearchMatch | null> {
475
- const entries = await fetchMarketplaceEntries({ fetch: fetchFn }, { ref });
476
- const entry = entries.find((e) => e.name === name);
477
- return entry ? marketplaceMatch(entry) : null;
478
- }
479
-
480
458
  function githubFetch(
481
459
  url: string,
482
460
  accept: string,