@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
@@ -3,7 +3,7 @@ import { join } from "node:path";
3
3
 
4
4
  import { z } from "zod";
5
5
 
6
- import { getDataDir } from "../util/platform.js";
6
+ import { getDataDir } from "../util/layout.js";
7
7
 
8
8
  const HATCHED_SIDECAR_FILENAME = "hatched.json";
9
9
  const HatchedSidecarSchema = z.object({
@@ -67,7 +67,7 @@ export const unifyLlmCallSiteConfigsMigration: WorkspaceMigration = {
67
67
  // Idempotency: skip only when `llm.default` is present AND no legacy
68
68
  // source key remains on disk. The `&& !hasLegacyData` clause matters
69
69
  // because `AssistantConfigSchema` wires `llm: LLMSchema.default(LLMSchema
70
- // .parse({}))`, which makes `loadConfig()` inject a full schema-default
70
+ // .parse({}))`, which makes `getConfig()` inject a full schema-default
71
71
  // `llm.default` block to disk on first daemon boot under the new schema.
72
72
  // If that boot happened before this migration was added (or before the
73
73
  // daemon binary that includes it landed on the user's machine),
@@ -454,7 +454,7 @@ function readTemperature(value: unknown): number | undefined {
454
454
  * cover the `services.inference` and top-level legacy locations; their
455
455
  * presence proves migration 039 hasn't yet stripped them, which means we
456
456
  * MUST re-process even if `llm.default` already exists (it may have been
457
- * injected by `loadConfig()`'s schema-default backfill rather than by a
457
+ * injected by `getConfig()`'s schema-default backfill rather than by a
458
458
  * previous run of this migration).
459
459
  */
460
460
  function hasLegacyLlmDefaultSource(config: Record<string, unknown>): boolean {
@@ -21,7 +21,7 @@ import type { WorkspaceMigration } from "./types.js";
21
21
  * overwriting any user-defined overrides.
22
22
  * 2. **Fresh install** (config.json absent): write a minimal starter
23
23
  * config with just the callSite seeds, using the default provider
24
- * (anthropic — same as the schema default). `loadConfig()` runs
24
+ * (anthropic — same as the schema default). `getConfig()` runs
25
25
  * after migrations and applies schema defaults only to the
26
26
  * in-memory config (disk is left untouched), so our seeded
27
27
  * callSites are preserved verbatim.
@@ -11,7 +11,7 @@ import type { WorkspaceMigration } from "./types.js";
11
11
  * 1. **Existing workspace** (config.json present): merge the seed into
12
12
  * `llm.callSites` without overwriting a user-defined override.
13
13
  * 2. **Fresh install** (config.json absent): write a minimal starter
14
- * config with just this seed. `loadConfig()` runs after migrations
14
+ * config with just this seed. `getConfig()` runs after migrations
15
15
  * and applies schema defaults to the in-memory config without
16
16
  * rewriting disk, so the seeded callSite is preserved as-is.
17
17
  *
@@ -21,7 +21,7 @@ import type { WorkspaceMigration } from "./types.js";
21
21
  * 1. Existing workspace (config.json present): merge the seed into
22
22
  * `llm.callSites` without overwriting a user-defined override.
23
23
  * 2. Fresh install (config.json absent): write a minimal starter
24
- * config carrying just the seed; `loadConfig()` applies schema
24
+ * config carrying just the seed; `getConfig()` applies schema
25
25
  * defaults to the in-memory config after migrations run.
26
26
  *
27
27
  * Skipped when:
@@ -94,14 +94,12 @@ import { backfillLeafIdsMigration } from "./093-backfill-leaf-ids.js";
94
94
  import { seedAvatarManifestMigration } from "./094-seed-avatar-manifest.js";
95
95
  import { bumpHeartbeatInterval30mTo60mMigration } from "./095-bump-heartbeat-interval-30m-to-60m.js";
96
96
  import { reduceQualityProfileEffortMigration } from "./096-reduce-quality-profile-effort.js";
97
- import { enableAdaptiveThinkingCloudProfilesMigration } from "./097-enable-adaptive-thinking-managed-profiles.js";
98
97
  import { removeStaleUpdatesBulletinFileMigration } from "./098-remove-stale-updates-bulletin-file.js";
99
98
  import { disableCacheOneShotCallsitesMigration } from "./099-disable-cache-one-shot-callsites.js";
100
99
  import { upgradeQualityProfileToFable5Migration } from "./100-upgrade-quality-profile-to-fable-5.js";
101
100
  import { upgradeBalancedEconomyToMinimaxM3Migration } from "./101-upgrade-balanced-economy-to-minimax-m3.js";
102
101
  import { preserveHeartbeatEnabledForExistingWorkspacesMigration } from "./102-preserve-heartbeat-enabled-for-existing-workspaces.js";
103
102
  import { upgradeQualityProfileToOpus48Migration } from "./103-upgrade-quality-profile-to-opus-4-8.js";
104
- import { recheckAdaptiveThinkingModelImpliedAnthropicMigration } from "./104-recheck-adaptive-thinking-model-implied-anthropic.js";
105
103
  import { enableMemoryV3LiveForNewWorkspacesMigration } from "./105-enable-memory-v3-live-for-new-workspaces.js";
106
104
  import { dropCollectUsageDataMigration } from "./106-drop-collect-usage-data.js";
107
105
  import { dropSendDiagnosticsMigration } from "./107-drop-send-diagnostics.js";
@@ -264,14 +262,12 @@ export const WORKSPACE_MIGRATIONS: WorkspaceMigration[] = [
264
262
  seedAvatarManifestMigration,
265
263
  bumpHeartbeatInterval30mTo60mMigration,
266
264
  reduceQualityProfileEffortMigration,
267
- enableAdaptiveThinkingCloudProfilesMigration,
268
265
  removeStaleUpdatesBulletinFileMigration,
269
266
  disableCacheOneShotCallsitesMigration,
270
267
  upgradeQualityProfileToFable5Migration,
271
268
  upgradeBalancedEconomyToMinimaxM3Migration,
272
269
  preserveHeartbeatEnabledForExistingWorkspacesMigration,
273
270
  upgradeQualityProfileToOpus48Migration,
274
- recheckAdaptiveThinkingModelImpliedAnthropicMigration,
275
271
  enableMemoryV3LiveForNewWorkspacesMigration,
276
272
  dropCollectUsageDataMigration,
277
273
  dropSendDiagnosticsMigration,
@@ -13,8 +13,8 @@ import { existsSync, readFileSync } from "node:fs";
13
13
 
14
14
  import { syncIdentityNameToPlatform } from "../cloud/sync-identity.js";
15
15
  import { parseIdentityFields } from "../daemon/handlers/identity.js";
16
+ import { getWorkspacePromptPath } from "../util/layout.js";
16
17
  import { getLogger } from "../util/logger.js";
17
- import { getWorkspacePromptPath } from "../util/platform.js";
18
18
  import { getEnrichmentService } from "./commit-message-enrichment-service.js";
19
19
  import {
20
20
  type CommitContext,
@@ -1,324 +0,0 @@
1
- # Activation Funnel Telemetry — Runbook + Analytics Handoff
2
-
3
- > **Linear:** event emission ticket — gates rollout and dashboard tickets.
4
- > **Funnel version:** `activation_v1_2026_06`
5
- > **LD flag:** `experiment-activation-flow-2026-06-03`
6
- > **Cohort arm tag:** `ab_variant = "variant-a"` (treatment); `control` = the no-rail arm.
7
-
8
- This doc is the single executable reference for the activation-rail funnel
9
- telemetry: what it measures, how it flows, the event vocabulary, the dedup
10
- contract, the local smoke-test runbook, the BigQuery verification query, and the
11
- canonical handoff blurb for the dashboard work. It is meant to be runnable by
12
- another engineer without reading the implementation.
13
-
14
- ---
15
-
16
- ## 1. Overview — what it measures and how it flows
17
-
18
- The activation funnel measures how far a new user gets on their first run of the
19
- **activation rail** (the onboarding experience driven by
20
- `BOOTSTRAP-ACTIVATION-RAIL.md`). It emits five milestone ("funnel") events per
21
- session into the **existing onboarding telemetry substrate** — no new event type,
22
- no new ingest endpoint, no new BigQuery table.
23
-
24
- The north-star "≥5 user messages within 24h per LD variant" metric is **not** a
25
- materialized activation event. It is computed downstream by joining the existing
26
- per-user-message `turn` telemetry events (`turn_index` per conversation) to the
27
- platform's `flag_assignment_raw` cohort-assignment table — so a dedicated event
28
- and a custom daemon turn-counting hook are not needed.
29
-
30
- Flow, end to end:
31
-
32
- 1. **Daemon records** an activation event into the SQLite `telemetry_events`
33
- outbox — the row stores the record-time wire payload, including the
34
- deterministic activation `daemon_event_id` (§3) — via
35
- `recordActivationEvent()` in
36
- `assistant/src/onboarding/onboarding-events-store.ts`:
37
- - emission is **deterministic, tied to a `ui_show` surface** — there is no
38
- model-facing tool. The model tags the surface it is already rendering for a
39
- rail move with an optional `activation_moment` parameter on `ui_show` (the
40
- param is present in ui_show's schema only for activation-rail
41
- conversations — `injectActivationMomentParam` in
42
- `tools/ui-surface/channel-variants.ts`, applied at tool resolution when
43
- `isActivationSession` is true); the
44
- daemon captures that tag on the surface's server-side state and records the
45
- milestone (gated on `isActivationSession`). **Timing is per-moment**
46
- (`ACTIVATION_MOMENT_EMIT_AT` in `activation-funnel.ts`): most moments record
47
- when the user **commits** the surface (clicks an action / submits /
48
- selects) via `handleSurfaceAction()`; the one exception is
49
- `first_wow_executed`, which records at **render time** in
50
- `surfaceProxyResolver` — the Run result/`work_result` surface is often
51
- display-only and may never be committed, so a commit-time emit would never
52
- fire (and deferring it to a later click would conflate "executed" with
53
- "interacted"). Show-timing tags are recorded immediately and not stored, so
54
- the commit path never double-emits. The token→step-name map and the
55
- show/commit timing both live in
56
- `assistant/src/telemetry/activation-funnel.ts`;
57
- - emission is best-effort (wrapped in try/catch) and never blocks or alters
58
- the surface-action flow;
59
- - `recordActivationEvent` respects the cloud `share_analytics` consent gate
60
- via `getRawShareAnalytics()`: only a confirmed opt-out (`false`) drops the
61
- event; an `"unknown"` state (cold cache, no platform session) records and
62
- lets the flush/ingest gates enforce consent before anything ships.
63
- 2. **Reporter flushes** every ~5 min: `usage-telemetry-reporter.ts`
64
- (`REPORT_INTERVAL_MS = 5 * 60 * 1000`, with a one-time
65
- `INITIAL_FLUSH_DELAY_MS = 30_000` after startup) POSTs queued onboarding
66
- rows to `/v1/telemetry/ingest/` as `type: "onboarding"` events — the stored
67
- record-time payloads as-is — and deletes the rows after a successful upload.
68
- 3. **Platform ingests** the onboarding events and writes GCS NDJSON.
69
- 4. **BigQuery** exposes them via the external table
70
- `mycadet-prod.telemetry.onboarding_raw`, which already carries the
71
- `session_id / step_name / step_index / completed_at / funnel_version /
72
- ab_variant` columns. The existing dbt model dedups on `daemon_event_id`
73
- (earliest-wins).
74
-
75
- No platform / dbt / terraform change is required — the activation events ride the
76
- `type: "onboarding"` substrate that already exists end to end.
77
-
78
- ---
79
-
80
- ## 2. Event vocabulary
81
-
82
- The single source of truth is `assistant/src/telemetry/activation-funnel.ts`
83
- (`ACTIVATION_STEPS`). `funnel_version = "activation_v1_2026_06"`
84
- (`ACTIVATION_FUNNEL_VERSION`). `ab_variant = "variant-a"`
85
- (`ACTIVATION_AB_VARIANT`, the treatment arm).
86
-
87
- Each step is recorded when the user commits the `ui_show` surface the model
88
- tagged with the corresponding `activation_moment` token (see §1). The
89
- token→step-name map is the `moment_*` column below.
90
-
91
- | step_index | step_name | `activation_moment` token | Recorded on commit of |
92
- | ---------- | --------------------------------- | ------------------------- | --------------------------------------------------------------- |
93
- | 1 | `activation_moment_1_complete` | `moment_1` | Port-summary card OR no-port intake `choice` surface |
94
- | 2 | `activation_moment_2_complete` | `moment_2` | Propose offer surface (the `ui_show` offer card/choice) |
95
- | 3 | `activation_moment_3_complete` | `moment_3` | task-selection surface |
96
- | 4 | `activation_first_wow_executed` | `first_wow_executed` | Run result surface (e.g. `work_result`) |
97
- | 5 | `activation_first_wow_interacted` | `first_wow_interacted` | user clicks an action on the tagged result surface (see §1, §4) |
98
-
99
- All five steps are recorded deterministically on surface commit. The north star
100
- (≥5 user messages) is derived downstream from the existing `turn` telemetry, not
101
- a materialized activation event (see §1).
102
-
103
- On the wire, each onboarding event also sets `screen = step_name` (to satisfy
104
- the cloud's legacy-path validation), and `completed_at` is the ISO-8601
105
- record time.
106
-
107
- ---
108
-
109
- ## 3. Dedup contract
110
-
111
- Activation rows carry a **deterministic** `daemon_event_id`:
112
-
113
- ```
114
- daemon_event_id = `${funnel_version}:${session_id}:${step_name}`
115
- ```
116
-
117
- Built by `buildActivationDaemonEventId()` in
118
- `assistant/src/telemetry/activation-funnel.ts`. The store freezes the id into
119
- the outbox payload **at record time**, keyed on the **funnel version the row was
120
- recorded under**, NOT whatever constant the binary that later flushes it carries.
121
- This keeps the id stable across a version bump so rows queued offline / flushed
122
- after an upgrade still collapse with already-ingested rows from the same session.
123
-
124
- A moment that fires more than once (e.g. a model double-emit) therefore lands
125
- with the same `daemon_event_id` and is collapsed downstream by the existing dbt
126
- earliest-wins dedup on `daemon_event_id`. For boolean "moment complete"
127
- semantics, earliest-wins is correct.
128
-
129
- **Flush safety:** each outbox row keeps its own random row `id`, and the reporter
130
- acknowledges (deletes) shipped rows by that row id, NOT by `daemon_event_id`. The
131
- deterministic id lives only in the wire payload, so it never affects flush
132
- bookkeeping.
133
-
134
- ---
135
-
136
- ## 4. Cohort scoping
137
-
138
- Events only emit for conversations explicitly marked as **activation-rail
139
- sessions**:
140
-
141
- - The marker lives in the `activation_sessions` table
142
- (`assistant/src/memory/activation-session-store.ts`,
143
- `markActivationSession` / `isActivationSession`).
144
- - It is set in `assistant/src/prompts/system-prompt.ts` **only when the
145
- `BOOTSTRAP-ACTIVATION-RAIL.md` template is actually active** (i.e.
146
- `bootstrapTemplate === ACTIVATION_RAIL_BOOTSTRAP_TEMPLATE`), which the web
147
- prechat context selects only for users whose
148
- `experiment-activation-flow-2026-06-03` cohort puts them on the rail. (It is
149
- also set up-front in `conversation.ts` `setOnboardingContext` so the marker is
150
- available before the first turn's tool resolution.)
151
- - Emission is **gated on the marker at commit time**: when a tagged `ui_show`
152
- surface is committed, the daemon records the milestone only if
153
- `isActivationSession(conversationId)` is true. A stray `activation_moment` tag
154
- in a normal chat is therefore ignored and never pollutes the funnel. (`moment_4`
155
- / `first_wow_interacted` deduping is handled the same way as any other moment —
156
- see the dedup contract in §3 — and the per-surface tag is cleared after the
157
- first record so a single surface commit emits at most once.)
158
-
159
- The activation **session id is the daemon `conversation_id`** of the rail
160
- conversation. That same value is `session_id` on every activation event.
161
-
162
- ---
163
-
164
- ## 5. Local smoke-test runbook
165
-
166
- Goal: drive one dev session through the activation cohort, emit all five events,
167
- flush, and verify rows in BigQuery. Executable by another engineer.
168
-
169
- ### 5.1 Put the dev user in the activation cohort
170
-
171
- The rail is gated by the LD flag `experiment-activation-flow-2026-06-03`. Two
172
- options:
173
-
174
- - **In-app feature-flags override (fastest):** open the in-app Feature Flags
175
- panel and force `experiment-activation-flow-2026-06-03` ON for the dev user.
176
- - **LaunchDarkly targeting:** target the dev user for the flag in the LD
177
- dashboard (per the LD-flag-two-repo convention, targeting is dashboard-side).
178
-
179
- When the flag is ON, the web prechat context selects
180
- `BOOTSTRAP-ACTIVATION-RAIL.md` as the bootstrap template, and the daemon marks
181
- the conversation in `activation_sessions` on first build of the system prompt.
182
-
183
- ### 5.2 Confirm share_analytics consent is on — and pick the right daemon mode
184
-
185
- Two distinct concerns: whether record-time rows reach SQLite (consent gate), and
186
- whether those rows reach BigQuery (flush gate, dev-disabled).
187
-
188
- 1. `recordActivationEvent` no-ops only on a confirmed `share_analytics` opt-out
189
- (it reads `getRawShareAnalytics()`); an `"unknown"` state records, but the
190
- flush defers until consent resolves. So for rows to actually SHIP, the dev
191
- session must be signed in to
192
- the cloud with `share_analytics` consent enabled, or no rows reach
193
- SQLite. The consent cache is refreshed by `startConsentRefresh()` in
194
- `assistant/src/daemon/lifecycle.ts`, which runs **regardless of dev mode** — so
195
- a dev session signed in with `share_analytics` consent enabled writes
196
- record-time rows to SQLite, where they can be inspected directly.
197
- 2. **Dev mode disables the flush entirely.** When the daemon runs in dev mode
198
- (`CADET_DEV=1`), `assistant/src/daemon/lifecycle.ts` never starts the
199
- `UsageTelemetryReporter` — rows accumulate in SQLite (consent permitting) but
200
- are never POSTed, and the "wait/restart for flush" steps below will never reach
201
- BigQuery. For an end-to-end smoke test, run the daemon **outside dev mode** (so
202
- the reporter starts), or explicitly invoke the reporter's `flush()` via a dev
203
- hook. The SQLite rows can be inspected directly in dev mode, but the BigQuery
204
- verification (§6) requires a real flush.
205
-
206
- ### 5.3 Start a fresh activation conversation and capture its id
207
-
208
- Start a brand-new conversation with the flag ON (it must be the rail bootstrap, so
209
- start it from the web prechat flow / activation entry, not an existing chat).
210
- Note its `conversation_id` — this is the `session_id` you will query on.
211
-
212
- If multiple daemons are running, kill ALL `daemon/main.ts` processes, remove
213
- `~/.cadet/cadet.sock`, and start fresh, so the conversation is served by a known
214
- daemon writing to a known SQLite DB.
215
-
216
- ### 5.4 Drive the rail through all five model moments
217
-
218
- Work the conversation through the rail moves so the model tags each surface and
219
- you commit it (the model tags surfaces via `ui_show`'s `activation_moment`
220
- parameter; which surface maps to which moment is documented in
221
- `BOOTSTRAP-ACTIVATION-RAIL.md` and §2). Each milestone records when YOU commit
222
- the tagged surface:
223
-
224
- 1. Commit the Port-summary card / no-port intake `choice` → `activation_moment_1_complete`.
225
- 2. Commit the Propose offer surface → `activation_moment_2_complete`.
226
- 3. Commit the task-selection surface → `activation_moment_3_complete`.
227
- 4. Commit the Run result surface → `activation_first_wow_executed`.
228
- 5. Click an action on the result surface → `activation_first_wow_interacted`.
229
-
230
- ### 5.5 Force / await a telemetry flush
231
-
232
- The reporter flushes on a schedule: a first flush ~30s after startup
233
- (`INITIAL_FLUSH_DELAY_MS`) and then every ~5 min (`REPORT_INTERVAL_MS`). Either:
234
-
235
- - **Wait** for the next scheduled flush (≤ ~5 min), or
236
- - **Restart the daemon** to take the ~30s post-startup flush, or
237
- - call the reporter's `flush()` path directly if you have a dev hook into the
238
- running daemon.
239
-
240
- A successful flush POSTs the unreported onboarding rows to
241
- `/v1/telemetry/ingest/` as `type: "onboarding"` events.
242
-
243
- ### 5.6 Verify in BigQuery
244
-
245
- Wait for the cloud → GCS NDJSON → BigQuery pipeline to land the events, then
246
- run the query in §6.
247
-
248
- ---
249
-
250
- ## 6. BigQuery verification query
251
-
252
- ```sql
253
- SELECT step_name, step_index, COUNT(*) AS n
254
- FROM `mycadet-prod.telemetry.onboarding_raw`
255
- WHERE funnel_version = 'activation_v1_2026_06'
256
- AND session_id = '<dev conversation id>'
257
- GROUP BY 1, 2
258
- ORDER BY 2;
259
- ```
260
-
261
- **Expected:** all five `activation_*` step names for the one session, step_index
262
- 1–5, each with `n = 1`:
263
-
264
- ```
265
- activation_moment_1_complete | 1 | 1
266
- activation_moment_2_complete | 2 | 1
267
- activation_moment_3_complete | 3 | 1
268
- activation_first_wow_executed | 4 | 1
269
- activation_first_wow_interacted | 5 | 1
270
- ```
271
-
272
- A missing row means that milestone never emitted (re-drive that rail move); an
273
- `n > 1` before dbt dedup is harmless (the deterministic `daemon_event_id`
274
- collapses it earliest-wins).
275
-
276
- ---
277
-
278
- ## 7. Canonical handoff blurb (paste-ready for the final PR description)
279
-
280
- > **Activation funnel telemetry — handoff for dashboard ticket.** The activation rail
281
- > now emits five milestone funnel events into the existing onboarding telemetry
282
- > substrate (`type: "onboarding"` → `/v1/telemetry/ingest/` → GCS NDJSON →
283
- > `mycadet-prod.telemetry.onboarding_raw`), so no new event type, ingest
284
- > endpoint, or BigQuery table is involved. Cohort is gated by the LaunchDarkly
285
- > flag **`experiment-activation-flow-2026-06-03`**; only rail (treatment)
286
- > conversations emit. Every event carries **`funnel_version =
287
- "activation_v1_2026_06"`** and **`ab_variant`** tagged `"variant-a"` for
288
- > treatment (`"control"` is the no-rail arm, measured for now from generic `turn`
289
- > events). The event vocabulary (step_name → step_index): `activation_moment_1_complete`
290
- > (1), `activation_moment_2_complete` (2), `activation_moment_3_complete` (3),
291
- > `activation_first_wow_executed` (4), `activation_first_wow_interacted` (5).
292
- > `session_id` is the rail conversation's id. The **north star** ("≥5 user
293
- > messages within 24h per LD variant") is **not** a funnel event — compute it
294
- > downstream by joining the existing `turn` telemetry events (`turn_index` per
295
- > conversation) to the cloud's `flag_assignment_raw` cohort-assignment table.
296
- > **Dedup contract:** each row's `daemon_event_id` is deterministic,
297
- > `${funnel_version}:${session_id}:${step_name}`, keyed on the row's stored
298
- > `funnel_version`; the existing dbt earliest-wins dedup on `daemon_event_id`
299
- > collapses any repeated moment to a single row. Build funnel conversion as a
300
- > step_index 1→5 progression per `session_id`, filtered to `funnel_version =
301
- 'activation_v1_2026_06'`.
302
-
303
- ---
304
-
305
- ## 8. Notes
306
-
307
- - **"naming check" (resolved).** Events fire **deterministically on
308
- the real user commit of a `ui_show` surface, not every text turn**. The model
309
- passively tags the surface for a rail move with `activation_moment`; the daemon
310
- records the milestone in `handleSurfaceAction` when the user commits that
311
- surface (firing conditions / surface→moment mapping documented in
312
- `BOOTSTRAP-ACTIVATION-RAIL.md`). This removes the standalone
313
- `emit_activation_event` tool (and its cohort preactivation) entirely and ties
314
- emission to a genuine user action, resolving the naming-check open
315
- interpretation.
316
- - **Stream B (multivariate cohort flag conversion) is NOT in this work.** It is
317
- gated on the cloud team's in-flight string-flag serving — until the cloud
318
- can serve string/multivariate flags, flipping
319
- `experiment-activation-flow-2026-06-03` boolean→multivariate client-side would
320
- silently disable the live allowlisted rail. Until then, `ab_variant` is the
321
- constant `"variant-a"` (only treatment runs the rail), and the **control side**
322
- of the comparison is measured from generic `turn` events split by the
323
- platform's experiment exposure mapping. Once Stream B lands, the daemon tags the
324
- real assigned arm and the cross-cohort comparison works with zero rework.
@@ -1,154 +0,0 @@
1
- import { lstatSync, readdirSync, readFileSync, realpathSync } from "node:fs";
2
- import { join, relative, resolve, sep } from "node:path";
3
-
4
- import {
5
- AGENT_PLUGINS_MCP_SCHEMA_URL,
6
- SpecMcpDocumentSchema,
7
- SpecMcpServerSchema,
8
- } from "../src/mcp/spec-schema.js";
9
- import {
10
- readPluginManifest,
11
- STANDARD_PLUGIN_MANIFEST,
12
- } from "../src/util/plugin-manifest.js";
13
-
14
- export interface BundledPackageFile {
15
- path: string;
16
- contentBase64: string;
17
- }
18
-
19
- export interface BundledPackage {
20
- version: string;
21
- files: BundledPackageFile[];
22
- }
23
-
24
- /** Validate and embed every local source in the canonical marketplace. */
25
- export function buildBundledPluginPackages(
26
- repoRoot: string,
27
- ): Record<string, BundledPackage> {
28
- const marketplacePath = join(repoRoot, "plugins", "marketplace.json");
29
- const manifest = JSON.parse(readFileSync(marketplacePath, "utf8")) as {
30
- plugins?: unknown;
31
- };
32
- if (!Array.isArray(manifest.plugins)) {
33
- throw new Error("plugins/marketplace.json is missing its plugins array");
34
- }
35
-
36
- const pluginsRoot = realpathSync(join(repoRoot, "plugins"));
37
- const packages: Record<string, BundledPackage> = {};
38
- for (const rawEntry of manifest.plugins) {
39
- if (typeof rawEntry !== "object" || rawEntry === null) {
40
- continue;
41
- }
42
- const entry = rawEntry as Record<string, unknown>;
43
- const rawSource = entry.source;
44
- if (typeof rawSource !== "object" || rawSource === null) {
45
- continue;
46
- }
47
- const source = rawSource as Record<string, unknown>;
48
- if (source.source !== "local") {
49
- continue;
50
- }
51
- if (
52
- typeof entry.name !== "string" ||
53
- typeof source.path !== "string" ||
54
- typeof source.version !== "string"
55
- ) {
56
- throw new Error(
57
- "local marketplace entries require name, path, and version",
58
- );
59
- }
60
-
61
- const pathSegments = source.path.split("/");
62
- if (
63
- !source.path.startsWith("plugins/") ||
64
- source.path.includes("\\") ||
65
- pathSegments.some(
66
- (segment) => segment === "" || segment === "." || segment === "..",
67
- )
68
- ) {
69
- throw new Error(
70
- `local marketplace package path is not canonical: ${source.path}`,
71
- );
72
- }
73
- let packageRoot = resolve(repoRoot);
74
- for (const segment of pathSegments) {
75
- packageRoot = join(packageRoot, segment);
76
- if (lstatSync(packageRoot).isSymbolicLink()) {
77
- throw new Error(
78
- `local marketplace package path may not contain symlinks: ${source.path}`,
79
- );
80
- }
81
- }
82
- const packageRealpath = realpathSync(packageRoot);
83
- const relativeToPlugins = relative(pluginsRoot, packageRealpath);
84
- if (
85
- relativeToPlugins === "" ||
86
- relativeToPlugins === ".." ||
87
- relativeToPlugins.startsWith(`..${sep}`)
88
- ) {
89
- throw new Error(
90
- `local marketplace package escapes plugins/: ${source.path}`,
91
- );
92
- }
93
-
94
- const pluginManifest = readPluginManifest(packageRealpath);
95
- if (
96
- pluginManifest.source !== STANDARD_PLUGIN_MANIFEST ||
97
- pluginManifest.name !== entry.name ||
98
- pluginManifest.version !== source.version
99
- ) {
100
- throw new Error(
101
- `local marketplace package ${source.path} must match entry name and version`,
102
- );
103
- }
104
- const rawMcp = JSON.parse(
105
- readFileSync(join(packageRealpath, "mcp.json"), "utf8"),
106
- ) as unknown;
107
- const mcp = SpecMcpDocumentSchema.parse(rawMcp);
108
- if (mcp.$schema !== AGENT_PLUGINS_MCP_SCHEMA_URL) {
109
- throw new Error(
110
- `local marketplace package ${source.path} must use the Agent Plugins MCP schema`,
111
- );
112
- }
113
- if (Object.keys(mcp.mcpServers).length === 0) {
114
- throw new Error(
115
- `local marketplace package ${source.path} must declare an MCP server`,
116
- );
117
- }
118
- for (const server of Object.values(mcp.mcpServers)) {
119
- SpecMcpServerSchema.parse(server);
120
- }
121
-
122
- const files: BundledPackageFile[] = [];
123
- const visit = (directory: string): void => {
124
- for (const child of readdirSync(directory, { withFileTypes: true })) {
125
- const childPath = join(directory, child.name);
126
- if (child.isSymbolicLink() || lstatSync(childPath).isSymbolicLink()) {
127
- throw new Error(
128
- `local marketplace packages may not contain symlinks: ${source.path}/${child.name}`,
129
- );
130
- }
131
- if (child.isDirectory()) {
132
- visit(childPath);
133
- continue;
134
- }
135
- if (!child.isFile()) {
136
- throw new Error(
137
- `local marketplace package contains an unsupported entry: ${childPath}`,
138
- );
139
- }
140
- files.push({
141
- path: relative(packageRealpath, childPath).split(sep).join("/"),
142
- contentBase64: readFileSync(childPath).toString("base64"),
143
- });
144
- }
145
- };
146
- visit(packageRealpath);
147
- files.sort((a, b) => a.path.localeCompare(b.path));
148
- if (packages[source.path]) {
149
- throw new Error(`duplicate local marketplace package: ${source.path}`);
150
- }
151
- packages[source.path] = { version: source.version, files };
152
- }
153
- return packages;
154
- }
@@ -1,29 +0,0 @@
1
- #!/usr/bin/env bun
2
-
3
- import { writeFileSync } from "node:fs";
4
- import { join, resolve } from "node:path";
5
-
6
- import { buildBundledPluginPackages } from "./bundled-plugin-packages.js";
7
-
8
- const repoRoot = resolve(import.meta.dir, "../..");
9
- const output = {
10
- version: 1,
11
- packages: buildBundledPluginPackages(repoRoot),
12
- };
13
-
14
- if (process.argv.includes("--check")) {
15
- console.log("✓ Local marketplace packages are valid");
16
- } else {
17
- writeFileSync(
18
- join(
19
- repoRoot,
20
- "assistant",
21
- "src",
22
- "cli",
23
- "lib",
24
- "bundled-plugin-packages.json",
25
- ),
26
- `${JSON.stringify(output, null, 2)}\n`,
27
- );
28
- console.log("✓ Generated bundled local plugin packages");
29
- }