@vellumai/assistant 0.12.1-staging.1 → 0.12.1

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 (404) hide show
  1. package/AGENTS.md +0 -4
  2. package/ARCHITECTURE.md +12 -11
  3. package/docs/architecture/turn-actor.md +8 -15
  4. package/openapi.yaml +1 -291
  5. package/package.json +1 -1
  6. package/src/__tests__/always-loaded-tools-guard.test.ts +10 -18
  7. package/src/__tests__/app-compiler.test.ts +0 -6
  8. package/src/__tests__/app-control-tool-schemas.test.ts +2 -5
  9. package/src/__tests__/app-dir-path-guard.test.ts +3 -1
  10. package/src/__tests__/app-source-watcher.test.ts +218 -0
  11. package/src/{calls/__tests__ → __tests__}/call-controller.test.ts +82 -503
  12. package/src/__tests__/computer-use-skill-proxy-bridge.test.ts +2 -5
  13. package/src/__tests__/computer-use-tools.test.ts +5 -17
  14. package/src/__tests__/config-schema-cmd.test.ts +2 -2
  15. package/src/__tests__/config-schema.test.ts +29 -28
  16. package/src/__tests__/config-watcher-skill-reseed.test.ts +359 -0
  17. package/src/__tests__/config-watcher.test.ts +8 -23
  18. package/src/__tests__/connection-model-compat.test.ts +2 -2
  19. package/src/__tests__/conversation-key-store-disk-view.test.ts +1 -1
  20. package/src/__tests__/conversation-pairing.test.ts +0 -26
  21. package/src/__tests__/conversation-process-app-control-preactivation.test.ts +10 -4
  22. package/src/__tests__/conversation-queue.test.ts +207 -48
  23. package/src/__tests__/conversation-retry-discard.test.ts +1 -54
  24. package/src/__tests__/conversation-skill-tools.test.ts +0 -27
  25. package/src/__tests__/conversation-surfaces-app-control.test.ts +3 -8
  26. package/src/__tests__/conversation-surfaces-task-progress.test.ts +0 -67
  27. package/src/__tests__/conversation-title-service.test.ts +10 -14
  28. package/src/__tests__/conversation-tool-setup-app-refresh.test.ts +5 -3
  29. package/src/__tests__/conversation-tool-setup-attribution.test.ts +0 -51
  30. package/src/__tests__/credential-record-retire.test.ts +1 -171
  31. package/src/__tests__/credential-routes.test.ts +3 -212
  32. package/src/__tests__/credential-security-invariants.test.ts +1 -2
  33. package/src/__tests__/cu-unified-flow.test.ts +2 -8
  34. package/src/__tests__/drain-kick-guard.test.ts +2 -0
  35. package/src/__tests__/drain-requeue-on-contention.test.ts +6 -0
  36. package/src/__tests__/evict-conversations-for-reload.test.ts +1 -1
  37. package/src/__tests__/host-bash-proxy.test.ts +45 -26
  38. package/src/__tests__/host-browser-proxy.test.ts +17 -6
  39. package/src/__tests__/host-file-proxy-targeted.test.ts +0 -23
  40. package/src/__tests__/host-file-proxy.test.ts +23 -11
  41. package/src/__tests__/host-transfer-proxy-targeted.test.ts +9 -30
  42. package/src/__tests__/llm-catalog-parity.test.ts +0 -25
  43. package/src/__tests__/mcp-auth-routes.test.ts +9 -6
  44. package/src/__tests__/mcp-config-secret-boundary.test.ts +136 -78
  45. package/src/__tests__/mcp-health-check.test.ts +11 -8
  46. package/src/__tests__/mcp-list-plugin-servers.test.ts +10 -8
  47. package/src/{calls/__tests__ → __tests__}/media-stream-audio-transcode.test.ts +1 -1
  48. package/src/{calls/__tests__ → __tests__}/media-stream-output.test.ts +8 -37
  49. package/src/{calls/__tests__ → __tests__}/media-stream-parser.test.ts +1 -1
  50. package/src/{calls/__tests__ → __tests__}/media-stream-server-integration.test.ts +57 -150
  51. package/src/{calls/__tests__ → __tests__}/media-stream-stt-session.test.ts +5 -5
  52. package/src/{calls/__tests__ → __tests__}/media-turn-detector.test.ts +1 -1
  53. package/src/__tests__/messages-after-tiebreaker.test.ts +0 -91
  54. package/src/__tests__/messages-read-boundary-guard.test.ts +1 -1
  55. package/src/__tests__/messaging-send-tool.test.ts +548 -355
  56. package/src/__tests__/model-intents.test.ts +0 -3
  57. package/src/__tests__/outlook-messaging-provider.test.ts +6 -6
  58. package/src/__tests__/platform-client-verify-credential.test.ts +0 -2
  59. package/src/__tests__/plugin-import-boundary-guard.test.ts +0 -13
  60. package/src/__tests__/script-proxy-certs.test.ts +0 -35
  61. package/src/__tests__/skill-feature-flags-integration.test.ts +1 -1
  62. package/src/__tests__/skill-feature-flags.test.ts +2 -2
  63. package/src/__tests__/speaker-identification.test.ts +56 -0
  64. package/src/__tests__/subagent-tool-gate-mode.test.ts +3 -19
  65. package/src/__tests__/subagent-tools.test.ts +2 -3
  66. package/src/__tests__/telephony-tts-guard.test.ts +3 -38
  67. package/src/__tests__/vellum-self-knowledge-inline-command.test.ts +0 -4
  68. package/src/{calls/__tests__/voice-session-bridge-turn-flow.test.ts → __tests__/voice-session-bridge.test.ts} +12 -20
  69. package/src/__tests__/watch-retro-tool-availability.test.ts +17 -8
  70. package/src/__tests__/workspace-git-service.test.ts +0 -26
  71. package/src/acp/__tests__/agent-process.test.ts +4 -258
  72. package/src/acp/__tests__/auth-required.test.ts +0 -96
  73. package/src/acp/__tests__/client-handler.test.ts +2 -90
  74. package/src/acp/__tests__/session-manager-persistence.test.ts +1 -5
  75. package/src/acp/__tests__/session-manager-resume.test.ts +6 -270
  76. package/src/acp/__tests__/session-manager-usage.test.ts +2 -4
  77. package/src/acp/__tests__/session-manager.test.ts +4 -895
  78. package/src/acp/agent-process.test.ts +1 -4
  79. package/src/acp/agent-process.ts +9 -94
  80. package/src/acp/auth-required.ts +1 -50
  81. package/src/acp/auto-install.test.ts +7 -9
  82. package/src/acp/client-handler.ts +3 -16
  83. package/src/acp/resolve-agent.test.ts +6 -220
  84. package/src/acp/resolve-agent.ts +23 -88
  85. package/src/acp/session-manager.test.ts +3 -196
  86. package/src/acp/session-manager.ts +18 -441
  87. package/src/acp/types.ts +5 -50
  88. package/src/api/events/app-files-changed.ts +3 -4
  89. package/src/api/index.ts +0 -6
  90. package/src/apps/app-store.ts +1 -1
  91. package/src/bundler/app-compiler.ts +0 -15
  92. package/src/calls/__tests__/voice-control-protocol.test.ts +25 -58
  93. package/src/calls/__tests__/voice-session-bridge.test.ts +1 -37
  94. package/src/calls/__tests__/voice-triage-escalate.test.ts +0 -105
  95. package/src/calls/call-constants.ts +4 -24
  96. package/src/calls/call-controller.ts +199 -499
  97. package/src/calls/call-transport.ts +0 -16
  98. package/src/calls/media-stream-output.ts +0 -32
  99. package/src/calls/media-stream-server.ts +30 -82
  100. package/src/calls/media-stream-stt-session.ts +0 -15
  101. package/src/calls/resolve-call-tts-provider.ts +2 -33
  102. package/src/calls/speaker-identification.ts +233 -0
  103. package/src/calls/tts-call-strategy.ts +5 -9
  104. package/src/calls/types.ts +0 -2
  105. package/src/calls/voice-control-protocol.ts +21 -53
  106. package/src/calls/voice-session-bridge.ts +46 -59
  107. package/src/calls/voice-triage-escalate.ts +56 -175
  108. package/src/cli/commands/apps.help.ts +13 -67
  109. package/src/cli/commands/apps.ts +0 -183
  110. package/src/cli/commands/channels/index.help.ts +2 -70
  111. package/src/cli/commands/channels/index.ts +3 -16
  112. package/src/cli/commands/credentials.help.ts +2 -6
  113. package/src/cli/commands/credentials.ts +2 -2
  114. package/src/cli/commands/mcp.help.ts +8 -8
  115. package/src/cli/commands/mcp.ts +1 -1
  116. package/src/cli/commands/roadmap.help.ts +1 -5
  117. package/src/cli/commands/roadmap.ts +1 -1
  118. package/src/cli/lib/bundled-marketplace.json +90 -103
  119. package/src/config/__tests__/default-profile-catalog.test.ts +0 -22
  120. package/src/config/__tests__/memory-retrospective-schema.test.ts +1 -15
  121. package/src/config/__tests__/platform-rehydration.test.ts +0 -93
  122. package/src/config/acp-defaults.test.ts +3 -13
  123. package/src/config/acp-defaults.ts +6 -23
  124. package/src/config/acp-schema.ts +2 -30
  125. package/src/config/bundled-skills/acp/SKILL.md +14 -22
  126. package/src/config/bundled-skills/acp/TOOLS.json +1 -5
  127. package/src/config/bundled-skills/app-builder/SKILL.md +9 -12
  128. package/src/config/bundled-skills/app-builder/references/CUSTOM_ROUTES.md +1 -1
  129. package/src/config/bundled-skills/messaging/TOOLS.json +3 -3
  130. package/src/config/bundled-skills/messaging/tools/messaging-send.ts +139 -67
  131. package/src/config/bundled-skills/phone-calls/references/TRANSCRIPTS.md +1 -1
  132. package/src/config/bundled-skills/screen-annotation/SKILL.md +1 -8
  133. package/src/config/bundled-skills/screen-annotation/tools/screen-annotation.test.ts +1 -4
  134. package/src/config/bundled-skills/skill-management/TOOLS.json +2 -2
  135. package/src/config/default-profile-catalog.ts +1 -1
  136. package/src/config/env.ts +2 -2
  137. package/src/config/feature-flag-registry.json +12 -8
  138. package/src/config/memory-v3-gate.test.ts +0 -31
  139. package/src/config/memory-v3-gate.ts +16 -20
  140. package/src/config/platform-rehydration.ts +21 -75
  141. package/src/config/schema.ts +2 -2
  142. package/src/config/schemas/__tests__/live-voice.test.ts +158 -8
  143. package/src/config/schemas/calls.ts +28 -1
  144. package/src/config/schemas/live-voice.ts +173 -1
  145. package/src/config/schemas/mcp.ts +1 -1
  146. package/src/config/schemas/memory-retrospective.ts +0 -10
  147. package/src/config/schemas/skills.ts +14 -0
  148. package/src/credential-execution/process-manager.test.ts +19 -18
  149. package/src/daemon/__tests__/conversation-tool-setup.test.ts +121 -66
  150. package/src/daemon/__tests__/plugin-mcp-reconcile.test.ts +1 -4
  151. package/src/daemon/app-source-watcher.ts +218 -0
  152. package/src/daemon/config-watcher.ts +194 -13
  153. package/src/daemon/conversation-process.ts +64 -35
  154. package/src/daemon/conversation-skill-tools.ts +31 -13
  155. package/src/daemon/conversation-store.ts +1 -1
  156. package/src/daemon/conversation-surfaces.ts +8 -10
  157. package/src/daemon/conversation-tool-setup.ts +43 -37
  158. package/src/daemon/conversation.ts +3 -0
  159. package/src/daemon/host-bash-proxy.ts +12 -8
  160. package/src/daemon/host-browser-proxy.ts +1 -15
  161. package/src/daemon/host-file-proxy.ts +10 -8
  162. package/src/daemon/host-transfer-proxy.ts +18 -14
  163. package/src/daemon/lifecycle.ts +5 -0
  164. package/src/daemon/mcp-reload-service.ts +5 -5
  165. package/src/daemon/message-types/sync.ts +0 -1
  166. package/src/daemon/providers-setup.ts +1 -1
  167. package/src/daemon/shutdown-handlers.ts +9 -1
  168. package/src/daemon/skill-memory-refresh.ts +0 -64
  169. package/src/daemon/tool-side-effects.ts +18 -7
  170. package/src/hooks/types.ts +0 -33
  171. package/src/inbound/platform-callback-registration.ts +5 -4
  172. package/src/live-voice/__tests__/live-voice-metrics.test.ts +3 -0
  173. package/src/live-voice/__tests__/live-voice-progress.test.ts +15 -15
  174. package/src/live-voice/__tests__/live-voice-vad.test.ts +2 -2
  175. package/src/{calls → live-voice}/__tests__/progress-narration.test.ts +4 -4
  176. package/src/{calls → live-voice}/__tests__/progress-phrases.test.ts +1 -1
  177. package/src/live-voice/__tests__/runtime-websocket-shell.test.ts +69 -13
  178. package/src/live-voice/live-voice-session.ts +693 -213
  179. package/src/{calls → live-voice}/progress-narration.ts +2 -2
  180. package/src/live-voice/protocol.ts +2 -0
  181. package/src/mcp/__tests__/effective-config.test.ts +2 -2
  182. package/src/mcp/effective-config.ts +3 -3
  183. package/src/mcp/mcp-header-store.ts +45 -29
  184. package/src/mcp/startup.ts +4 -8
  185. package/src/messaging/provider.ts +3 -10
  186. package/src/messaging/providers/callback-routing.ts +0 -18
  187. package/src/messaging/providers/channel-transport.ts +0 -56
  188. package/src/messaging/providers/discord/transport.ts +0 -17
  189. package/src/messaging/providers/slack/__tests__/adapter-token-routing.test.ts +17 -6
  190. package/src/messaging/providers/slack/adapter.ts +44 -7
  191. package/src/messaging/providers/slack/transport.ts +0 -16
  192. package/src/messaging/providers/telegram-bot/adapter.ts +48 -1
  193. package/src/messaging/providers/telegram-bot/client.ts +26 -0
  194. package/src/messaging/providers/telegram-bot/transport.ts +0 -20
  195. package/src/messaging/providers/whatsapp/adapter.ts +48 -1
  196. package/src/messaging/providers/whatsapp/client.ts +29 -0
  197. package/src/messaging/providers/whatsapp/transport.ts +0 -18
  198. package/src/monitoring/__tests__/workspace-git-heartbeat.test.ts +0 -8
  199. package/src/notifications/__tests__/assistant-reply-producer.test.ts +0 -55
  200. package/src/notifications/__tests__/home-feed-side-effect.test.ts +3 -153
  201. package/src/notifications/assistant-reply-producer.ts +3 -8
  202. package/src/notifications/conversation-pairing.ts +16 -36
  203. package/src/notifications/delivered-post-record.ts +1 -11
  204. package/src/notifications/home-feed-side-effect.ts +7 -55
  205. package/src/outbound-proxy/certs.ts +5 -3
  206. package/src/permissions/checker.test.ts +6 -11
  207. package/src/persistence/compaction-log-store-clickhouse.ts +3 -3
  208. package/src/persistence/conversation-crud.ts +63 -71
  209. package/src/persistence/conversation-lineage.ts +4 -12
  210. package/src/persistence/conversation-title-service.ts +26 -9
  211. package/src/persistence/llm-request-log-sink-clickhouse.ts +3 -3
  212. package/src/persistence/llm-request-log-source-clickhouse.ts +3 -3
  213. package/src/persistence/message-reads.ts +0 -30
  214. package/src/persistence/migrations/157-invite-contact-id.ts +6 -18
  215. package/src/persistence/schema/memory-core.ts +0 -5
  216. package/src/platform/client.test.ts +0 -2
  217. package/src/platform/client.ts +10 -2
  218. package/src/plugin-api/constants.ts +0 -2
  219. package/src/plugin-api/index.ts +0 -1
  220. package/src/plugin-api/types.ts +0 -2
  221. package/src/plugins/defaults/index.ts +0 -2
  222. package/src/plugins/defaults/memory/__tests__/memory-retrospective-accounting.test.ts +0 -46
  223. package/src/plugins/defaults/memory/__tests__/memory-retrospective-enqueue.test.ts +5 -9
  224. package/src/plugins/defaults/memory/__tests__/memory-retrospective-job.test.ts +10 -20
  225. package/src/plugins/defaults/memory/__tests__/memory-retrospective-state.test.ts +0 -219
  226. package/src/plugins/defaults/memory/__tests__/memory-retrospective-sweep.test.ts +0 -31
  227. package/src/plugins/defaults/memory/__tests__/memory-retrospective-trigger-check.test.ts +0 -63
  228. package/src/plugins/defaults/memory/__tests__/shutdown-hook.test.ts +0 -4
  229. package/src/plugins/defaults/memory/graph/capability-seed.ts +6 -4
  230. package/src/plugins/defaults/memory/hooks/init.ts +0 -10
  231. package/src/plugins/defaults/memory/hooks/shutdown.ts +0 -2
  232. package/src/plugins/defaults/memory/jobs-worker.ts +0 -13
  233. package/src/plugins/defaults/memory/memory-retrospective-accounting.ts +60 -34
  234. package/src/plugins/defaults/memory/memory-retrospective-enqueue.ts +5 -3
  235. package/src/plugins/defaults/memory/memory-retrospective-job.ts +3 -12
  236. package/src/plugins/defaults/memory/memory-retrospective-state.ts +71 -312
  237. package/src/plugins/defaults/memory/memory-retrospective-sweep.ts +1 -2
  238. package/src/plugins/defaults/memory/memory-retrospective-trigger-check.ts +3 -5
  239. package/src/plugins/defaults/memory/startup.ts +1 -6
  240. package/src/plugins/defaults/memory/substrate/__tests__/skill-content.test.ts +9 -7
  241. package/src/plugins/defaults/memory/substrate/skill-content.ts +2 -2
  242. package/src/plugins/defaults/memory/v3/__tests__/pool-select.test.ts +0 -89
  243. package/src/plugins/defaults/memory/worker.ts +0 -6
  244. package/src/plugins/mcp-servers.ts +75 -15
  245. package/src/providers/__tests__/connection-model-compat.test.ts +3 -3
  246. package/src/providers/gemini/client.ts +23 -9
  247. package/src/providers/model-catalog.ts +0 -34
  248. package/src/providers/model-intents.ts +5 -10
  249. package/src/providers/openai/__tests__/chat-completions-provider-reasoning.test.ts +18 -146
  250. package/src/providers/openai/__tests__/tool-choice-mapping.test.ts +1 -83
  251. package/src/providers/openai/chat-completions-provider.ts +78 -192
  252. package/src/providers/openai/codex-models.ts +4 -0
  253. package/src/runtime/AGENTS.md +0 -2
  254. package/src/runtime/auth/same-actor.ts +3 -38
  255. package/src/runtime/http-server.ts +151 -160
  256. package/src/runtime/routes/__tests__/acp-routes.test.ts +4 -159
  257. package/src/runtime/routes/__tests__/conversation-query-routes.test.ts +1 -108
  258. package/src/runtime/routes/__tests__/mcp-add-default-risk.test.ts +12 -16
  259. package/src/runtime/routes/acp-routes.test.ts +0 -15
  260. package/src/runtime/routes/acp-routes.ts +9 -72
  261. package/src/runtime/routes/app-management-routes.ts +0 -73
  262. package/src/runtime/routes/app-routes.ts +1 -1
  263. package/src/runtime/routes/conversation-list-routes.ts +3 -14
  264. package/src/runtime/routes/conversation-query-routes.ts +0 -40
  265. package/src/runtime/routes/credential-routes.ts +10 -19
  266. package/src/runtime/routes/diagnostics-routes.ts +3 -55
  267. package/src/runtime/routes/index.ts +0 -4
  268. package/src/runtime/routes/log-export-routes.ts +0 -2
  269. package/src/runtime/routes/mcp-auth-routes.ts +47 -39
  270. package/src/runtime/routes/migration-routes.ts +21 -8
  271. package/src/runtime/routes/platform-routes.ts +15 -18
  272. package/src/runtime/services/__tests__/conversation-serializer.test.ts +0 -28
  273. package/src/runtime/services/conversation-serializer.ts +3 -16
  274. package/src/runtime/sync/resource-sync-events.ts +1 -2
  275. package/src/schedule/worker.ts +1 -1
  276. package/src/security/ces-rpc-record-backend.ts +0 -7
  277. package/src/subagent/consult-context.ts +25 -12
  278. package/src/tools/acp/list-agents.test.ts +1 -3
  279. package/src/tools/acp/spawn.test.ts +11 -146
  280. package/src/tools/acp/spawn.ts +3 -21
  281. package/src/tools/acp/status.ts +3 -40
  282. package/src/tools/app-control/skill-proxy-bridge.ts +1 -2
  283. package/src/tools/capability-offer.test.ts +2 -22
  284. package/src/tools/capability-offer.ts +1 -16
  285. package/src/tools/computer-use/definitions.ts +2 -4
  286. package/src/tools/computer-use/skill-proxy-bridge.ts +1 -2
  287. package/src/tools/credentials/metadata-store.ts +0 -100
  288. package/src/tools/host-filesystem/edit.test.ts +1 -2
  289. package/src/tools/host-filesystem/edit.ts +2 -2
  290. package/src/tools/host-filesystem/read.test.ts +1 -2
  291. package/src/tools/host-filesystem/read.ts +2 -2
  292. package/src/tools/host-filesystem/transfer.test.ts +1 -2
  293. package/src/tools/host-filesystem/transfer.ts +2 -2
  294. package/src/tools/host-filesystem/write.test.ts +1 -2
  295. package/src/tools/host-filesystem/write.ts +2 -2
  296. package/src/tools/host-terminal/host-shell.test.ts +0 -16
  297. package/src/tools/host-terminal/host-shell.ts +20 -4
  298. package/src/tools/policy-context.ts +7 -6
  299. package/src/tools/subagent/spawn.ts +8 -5
  300. package/src/tools/watch/watch-retro-report.ts +8 -0
  301. package/src/util/__tests__/language-subtag.test.ts +1 -23
  302. package/src/util/fs-watcher-error.ts +36 -0
  303. package/src/util/language-subtag.ts +0 -16
  304. package/src/util/platform.ts +0 -8
  305. package/src/workspace/git-service.ts +54 -5
  306. package/src/workspace/migrations/registry.ts +0 -6
  307. package/scripts/smoke-desktop-window-theme.ts +0 -186
  308. package/src/__tests__/git-porcelain.test.ts +0 -47
  309. package/src/__tests__/helpers/set-workspace-mcp.ts +0 -11
  310. package/src/__tests__/message-deleted-hook-dispatch.test.ts +0 -119
  311. package/src/__tests__/resolve-app.test.ts +0 -135
  312. package/src/__tests__/source-fingerprint.test.ts +0 -184
  313. package/src/__tests__/workspace-migration-154-repair-retired-codex-gpt-5-4-model-ids.test.ts +0 -336
  314. package/src/acp/__tests__/helpers/acp-model-option.ts +0 -51
  315. package/src/acp/model-config.test.ts +0 -166
  316. package/src/acp/model-config.ts +0 -138
  317. package/src/api/events/acp-session-model-update.test.ts +0 -88
  318. package/src/api/events/acp-session-model-update.ts +0 -46
  319. package/src/apps/resolve-app.ts +0 -81
  320. package/src/apps/source-fingerprint.ts +0 -266
  321. package/src/calls/__tests__/barge-in-guard.test.ts +0 -81
  322. package/src/calls/__tests__/voice-leg-coordinator.test.ts +0 -229
  323. package/src/calls/__tests__/voice-progress-cadence.test.ts +0 -274
  324. package/src/calls/barge-in-guard.ts +0 -118
  325. package/src/calls/voice-leg-coordinator.ts +0 -189
  326. package/src/calls/voice-progress-cadence.ts +0 -423
  327. package/src/cli/commands/__tests__/apps.test.ts +0 -245
  328. package/src/cli/commands/__tests__/roadmap.help.test.ts +0 -19
  329. package/src/cli/commands/channels/__tests__/send.test.ts +0 -218
  330. package/src/cli/commands/channels/send.ts +0 -128
  331. package/src/config/__tests__/platform-identity.test.ts +0 -117
  332. package/src/config/acp-agent-write.ts +0 -43
  333. package/src/config/acp-schema.test.ts +0 -81
  334. package/src/config/platform-identity.ts +0 -144
  335. package/src/config/schemas/__tests__/voice.test.ts +0 -148
  336. package/src/config/schemas/voice.ts +0 -150
  337. package/src/daemon/__tests__/skill-memory-refresh-mtime.test.ts +0 -133
  338. package/src/daemon/app-change-notify.ts +0 -45
  339. package/src/desktop/__tests__/fake-desktop.ts +0 -119
  340. package/src/desktop/desktop-chrome-policy.test.ts +0 -71
  341. package/src/desktop/desktop-chrome-policy.ts +0 -42
  342. package/src/desktop/desktop-dependencies.test.ts +0 -102
  343. package/src/desktop/desktop-dependencies.ts +0 -306
  344. package/src/desktop/desktop-feature.test.ts +0 -18
  345. package/src/desktop/desktop-feature.ts +0 -19
  346. package/src/desktop/desktop-panel-config.test.ts +0 -135
  347. package/src/desktop/desktop-panel-config.ts +0 -149
  348. package/src/desktop/desktop-session-manager.test.ts +0 -627
  349. package/src/desktop/desktop-session-manager.ts +0 -814
  350. package/src/desktop/desktop-stream-bridge.test.ts +0 -395
  351. package/src/desktop/desktop-stream-bridge.ts +0 -214
  352. package/src/desktop/desktop-wallpaper.test.ts +0 -191
  353. package/src/desktop/desktop-wallpaper.ts +0 -113
  354. package/src/desktop/desktop-window-theme.ts +0 -170
  355. package/src/i18n/AGENTS.md +0 -22
  356. package/src/i18n/__tests__/i18n.test.ts +0 -108
  357. package/src/i18n/index.ts +0 -16
  358. package/src/i18n/locales.ts +0 -93
  359. package/src/i18n/messages.ts +0 -61
  360. package/src/i18n/title.ts +0 -25
  361. package/src/mcp/__tests__/workspace-mcp-config.test.ts +0 -135
  362. package/src/mcp/spec-schema.ts +0 -111
  363. package/src/mcp/workspace-mcp-config.ts +0 -188
  364. package/src/messaging/providers/__tests__/proactive-address.test.ts +0 -95
  365. package/src/persistence/conversation-title-placeholders.ts +0 -23
  366. package/src/persistence/message-cursor.ts +0 -78
  367. package/src/persistence/migrations/__tests__/157-invite-contact-id.test.ts +0 -149
  368. package/src/plugins/defaults/memory/__tests__/memory-retrospective-cursor-backfill.test.ts +0 -118
  369. package/src/plugins/defaults/memory/__tests__/memory-retrospective-cursor-preserve.test.ts +0 -83
  370. package/src/plugins/defaults/memory/hooks/message-deleted.ts +0 -21
  371. package/src/plugins/defaults/memory/memory-retrospective-cursor-backfill.ts +0 -126
  372. package/src/plugins/defaults/memory/memory-retrospective-cursor-preserve.ts +0 -79
  373. package/src/plugins/defaults/memory/memory-retrospective-cursor.ts +0 -28
  374. package/src/plugins/defaults/memory/skill-md-mtime-poll.ts +0 -9
  375. package/src/providers/gemini-thought-signature.test.ts +0 -63
  376. package/src/providers/gemini-thought-signature.ts +0 -44
  377. package/src/providers/openai/__tests__/chat-completions-provider-thought-signature.test.ts +0 -613
  378. package/src/providers/openai/__tests__/google-thought-signature.test.ts +0 -235
  379. package/src/providers/openai/google-thought-signature.ts +0 -320
  380. package/src/runtime/__tests__/channel-send.test.ts +0 -443
  381. package/src/runtime/__tests__/desktop-stream-upgrade.test.ts +0 -89
  382. package/src/runtime/__tests__/live-voice-upgrade.test.ts +0 -58
  383. package/src/runtime/__tests__/runtime-ws-test-utils.ts +0 -72
  384. package/src/runtime/__tests__/watch-stream-upgrade.test.ts +0 -59
  385. package/src/runtime/channel-send.ts +0 -316
  386. package/src/runtime/routes/__tests__/apps-refresh-route.test.ts +0 -205
  387. package/src/runtime/routes/__tests__/channel-send-routes.test.ts +0 -127
  388. package/src/runtime/routes/__tests__/dictation-cleanup-guard.test.ts +0 -107
  389. package/src/runtime/routes/channel-send-routes.ts +0 -85
  390. package/src/runtime/routes/desktop-setup-routes.test.ts +0 -74
  391. package/src/runtime/routes/desktop-setup-routes.ts +0 -35
  392. package/src/security/__tests__/ces-http-record-backend.test.ts +0 -137
  393. package/src/security/ces-http-record-backend.ts +0 -120
  394. package/src/skills/__tests__/workspace-skill-md-signature.test.ts +0 -60
  395. package/src/skills/workspace-skill-md-signature.ts +0 -50
  396. package/src/tools/acp/status.test.ts +0 -94
  397. package/src/util/ca-bundle.ts +0 -13
  398. package/src/workspace/git-porcelain.ts +0 -66
  399. package/src/workspace/migrations/154-repair-retired-codex-gpt-5-4-model-ids.ts +0 -258
  400. package/src/workspace/migrations/155-move-front-model-config-to-voice.ts +0 -78
  401. package/src/workspace/migrations/156-extract-workspace-mcp-json.ts +0 -214
  402. package/src/workspace/migrations/__tests__/155-move-front-model-config-to-voice.test.ts +0 -102
  403. package/src/workspace/migrations/__tests__/156-extract-workspace-mcp-json.test.ts +0 -199
  404. /package/src/{calls → live-voice}/progress-phrases.ts +0 -0
@@ -16,7 +16,7 @@
16
16
  "category": "productivity",
17
17
  "homepage": "https://github.com/vellum-ai/admin-copilot",
18
18
  "license": "MIT",
19
- "icon": "\ud83e\uddd1\u200d\ud83d\udcbc"
19
+ "icon": "🧑‍💼"
20
20
  },
21
21
  {
22
22
  "name": "agent-wrapped",
@@ -30,7 +30,7 @@
30
30
  "license": "MIT",
31
31
  "submittedBy": "marina",
32
32
  "homepage": "https://agent-wrapped.com",
33
- "icon": "\ud83c\udf81"
33
+ "icon": "🎁"
34
34
  },
35
35
  {
36
36
  "name": "ai-hero-engineer-kit",
@@ -39,11 +39,11 @@
39
39
  "repo": "marinatrajk/ai-hero-engineer-kit",
40
40
  "ref": "18d33c62b15a3e2cc22dc070723fe3077749dcec"
41
41
  },
42
- "description": "Five engineering skills adapted from Matt Pocock's '5 Agent Skills I Use Every Day' \u2014 plans, PRDs, vertical-slice issues, TDD loop, and codebase deepening in one install.",
42
+ "description": "Five engineering skills adapted from Matt Pocock's '5 Agent Skills I Use Every Day' — plans, PRDs, vertical-slice issues, TDD loop, and codebase deepening in one install.",
43
43
  "category": "developer",
44
44
  "homepage": "https://github.com/marinatrajk/ai-hero-engineer-kit",
45
45
  "license": "MIT",
46
- "icon": "\ud83e\uddf0"
46
+ "icon": "🧰"
47
47
  },
48
48
  {
49
49
  "name": "amex-perk-reminder",
@@ -56,7 +56,7 @@
56
56
  "category": "lifestyle",
57
57
  "homepage": "https://github.com/AnitaKirkovska/amex-perk-reminder",
58
58
  "license": "MIT",
59
- "icon": "\ud83d\udcb3"
59
+ "icon": "💳"
60
60
  },
61
61
  {
62
62
  "name": "astrology-horoscope",
@@ -69,20 +69,7 @@
69
69
  "category": "hobby",
70
70
  "homepage": "https://github.com/vellum-ai/astrology-horoscope",
71
71
  "license": "MIT",
72
- "icon": "\ud83d\udd2e"
73
- },
74
- {
75
- "name": "battleship",
76
- "source": {
77
- "source": "github",
78
- "repo": "vellum-ai/battleship",
79
- "ref": "32391ea3af71597b7507bb710bd29ab8308a4604"
80
- },
81
- "description": "Play Battleship against your assistant. Fire shots, track hits and misses, and sink the fleet before the assistant sinks yours.",
82
- "category": "hobby",
83
- "homepage": "https://github.com/vellum-ai/battleship",
84
- "license": "MIT",
85
- "icon": "\u2693"
72
+ "icon": "🔮"
86
73
  },
87
74
  {
88
75
  "name": "caveman",
@@ -95,7 +82,7 @@
95
82
  "category": "productivity",
96
83
  "homepage": "https://github.com/JuliusBrussee/caveman",
97
84
  "license": "MIT",
98
- "icon": "\ud83e\uddb4"
85
+ "icon": "🦴"
99
86
  },
100
87
  {
101
88
  "name": "coffee-aficionado",
@@ -120,7 +107,7 @@
120
107
  "category": "productivity",
121
108
  "homepage": "https://github.com/vellum-ai/cofounder",
122
109
  "license": "MIT",
123
- "icon": "\ud83e\udd1d"
110
+ "icon": "🤝"
124
111
  },
125
112
  {
126
113
  "name": "cognee",
@@ -133,7 +120,7 @@
133
120
  "description": "Cognee knowledge graph memory for Vellum Assistant: session-aware storage, auto-routing recall, and persistent learning across sessions. Supports local mode and Cognee Cloud.",
134
121
  "category": "memory",
135
122
  "homepage": "https://github.com/topoteretes/cognee-integrations/tree/main/integrations/vellum-assistant",
136
- "icon": "\ud83d\udd78\ufe0f"
123
+ "icon": "🕸️"
137
124
  },
138
125
  {
139
126
  "name": "creatorland",
@@ -147,7 +134,7 @@
147
134
  "category": "marketing",
148
135
  "homepage": "https://github.com/creatorland/creatorland-mcp-skills/tree/main/plugins/creatorland-data",
149
136
  "license": "MIT",
150
- "icon": "\ud83c\udfa8"
137
+ "icon": "🎨"
151
138
  },
152
139
  {
153
140
  "name": "dynamic-notch",
@@ -160,7 +147,7 @@
160
147
  "category": "interface",
161
148
  "homepage": "https://github.com/AnitaKirkovska/dynamic-notch",
162
149
  "license": "MIT",
163
- "icon": "\ud83d\udcbb"
150
+ "icon": "💻"
164
151
  },
165
152
  {
166
153
  "name": "family-briefing",
@@ -173,7 +160,7 @@
173
160
  "category": "productivity",
174
161
  "homepage": "https://github.com/AnitaKirkovska/family-briefing",
175
162
  "license": "MIT",
176
- "icon": "\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc66"
163
+ "icon": "👨‍👩‍👧‍👦"
177
164
  },
178
165
  {
179
166
  "name": "fitness-companion",
@@ -186,7 +173,7 @@
186
173
  "category": "health",
187
174
  "homepage": "https://github.com/vellum-ai/fitness-companion",
188
175
  "license": "MIT",
189
- "icon": "\ud83d\udcaa"
176
+ "icon": "💪"
190
177
  },
191
178
  {
192
179
  "name": "git-workflow",
@@ -199,7 +186,7 @@
199
186
  "category": "developer",
200
187
  "homepage": "https://github.com/vellum-ai/git-workflow",
201
188
  "license": "MIT",
202
- "icon": "\ud83d\udd00"
189
+ "icon": "🔀"
203
190
  },
204
191
  {
205
192
  "name": "google-drive-search",
@@ -212,20 +199,7 @@
212
199
  "category": "productivity",
213
200
  "homepage": "https://github.com/ZeebBoyBlue/google-drive-search",
214
201
  "license": "Apache-2.0",
215
- "icon": "\ud83d\udd0d"
216
- },
217
- {
218
- "name": "imessage",
219
- "source": {
220
- "source": "github",
221
- "repo": "vellum-ai/imessage",
222
- "ref": "41b8e9ad87b4975bf3fbdc9a8e46deda489d3d51"
223
- },
224
- "description": "iMessage and SMS channel for the Vellum assistant, backed by a Photon line.",
225
- "category": "productivity",
226
- "homepage": "https://github.com/vellum-ai/imessage",
227
- "license": "MIT",
228
- "icon": "\ud83d\udcf2"
202
+ "icon": "🔍"
229
203
  },
230
204
  {
231
205
  "name": "influencer-marketing",
@@ -238,33 +212,33 @@
238
212
  "category": "marketing",
239
213
  "homepage": "https://github.com/ZeebBoyBlue/influencer",
240
214
  "license": "MIT",
241
- "icon": "\ud83d\udce3"
215
+ "icon": "📣"
242
216
  },
243
217
  {
244
- "name": "kitchen-companion",
218
+ "name": "imessage",
245
219
  "source": {
246
220
  "source": "github",
247
- "repo": "vellum-ai/kitchen-companion",
248
- "ref": "b6ebdda6992dfa1fd2186a600a642f538fb64584"
221
+ "repo": "vellum-ai/imessage",
222
+ "ref": "41b8e9ad87b4975bf3fbdc9a8e46deda489d3d51"
249
223
  },
250
- "description": "Full kitchen companion. Scan your fridge with a photo to stock a pantry inventory and get 3 makeable-now recipes, get alerts before food expires, clip recipes from any URL into a clean format, and generate meal plans with grocery lists from what you actually have.",
251
- "category": "lifestyle",
252
- "homepage": "https://github.com/vellum-ai/kitchen-companion",
224
+ "description": "iMessage and SMS channel for the Vellum assistant, backed by a Photon line.",
225
+ "category": "productivity",
226
+ "homepage": "https://github.com/vellum-ai/imessage",
253
227
  "license": "MIT",
254
- "icon": "\ud83c\udf73"
228
+ "icon": "📲"
255
229
  },
256
230
  {
257
- "name": "ledger",
231
+ "name": "kitchen-companion",
258
232
  "source": {
259
233
  "source": "github",
260
- "repo": "simensgreen/ledger",
261
- "ref": "7fc04fd77b20ad4b27ccd51be22c101274b370f6"
234
+ "repo": "vellum-ai/kitchen-companion",
235
+ "ref": "b6ebdda6992dfa1fd2186a600a642f538fb64584"
262
236
  },
263
- "description": "Structured storage for Vellum agents: tables via JSON Schema, query/aggregate via JSON, named saved queries.",
264
- "category": "developer",
265
- "homepage": "https://github.com/simensgreen/ledger",
237
+ "description": "Full kitchen companion. Scan your fridge with a photo to stock a pantry inventory and get 3 makeable-now recipes, get alerts before food expires, clip recipes from any URL into a clean format, and generate meal plans with grocery lists from what you actually have.",
238
+ "category": "lifestyle",
239
+ "homepage": "https://github.com/vellum-ai/kitchen-companion",
266
240
  "license": "MIT",
267
- "icon": "\ud83d\uddc4\ufe0f"
241
+ "icon": "🍳"
268
242
  },
269
243
  {
270
244
  "name": "level-up",
@@ -277,7 +251,7 @@
277
251
  "category": "developer",
278
252
  "homepage": "https://github.com/vellum-ai/level-up",
279
253
  "license": "MIT",
280
- "icon": "\ud83c\udd99"
254
+ "icon": "🆙"
281
255
  },
282
256
  {
283
257
  "name": "marketing-expert",
@@ -290,7 +264,7 @@
290
264
  "category": "marketing",
291
265
  "homepage": "https://github.com/vellum-ai/marketing-expert",
292
266
  "license": "MIT",
293
- "icon": "\ud83d\udcc8"
267
+ "icon": "📈"
294
268
  },
295
269
  {
296
270
  "name": "markitdown-vellum",
@@ -299,11 +273,11 @@
299
273
  "repo": "simensgreen/markitdown-vellum",
300
274
  "ref": "5e5a4ecfd6c60d613778106442003a1ed302fc3c"
301
275
  },
302
- "description": "Convert workspace documents (PDF, DOCX, PPTX, XLSX, images, MSG, \u2026) to markdown via @cognipeer/to-markdown, with Vellum vision OCR or Tesseract.",
276
+ "description": "Convert workspace documents (PDF, DOCX, PPTX, XLSX, images, MSG, …) to markdown via @cognipeer/to-markdown, with Vellum vision OCR or Tesseract.",
303
277
  "category": "productivity",
304
278
  "homepage": "https://github.com/simensgreen/markitdown-vellum",
305
279
  "license": "MIT",
306
- "icon": "\ud83d\udcc4"
280
+ "icon": "📄"
307
281
  },
308
282
  {
309
283
  "name": "model-router",
@@ -316,7 +290,7 @@
316
290
  "category": "productivity",
317
291
  "homepage": "https://github.com/AnitaKirkovska/model-router",
318
292
  "license": "MIT",
319
- "icon": "\ud83d\udea6"
293
+ "icon": "🚦"
320
294
  },
321
295
  {
322
296
  "name": "motion-design",
@@ -329,7 +303,7 @@
329
303
  "category": "creative",
330
304
  "homepage": "https://github.com/vellum-ai/motion-design",
331
305
  "license": "MIT",
332
- "icon": "\ud83c\udfac"
306
+ "icon": "🎬"
333
307
  },
334
308
  {
335
309
  "name": "natural",
@@ -342,19 +316,7 @@
342
316
  "category": "finance",
343
317
  "homepage": "https://www.natural.com",
344
318
  "license": "MIT",
345
- "icon": "\ud83d\udcb3"
346
- },
347
- {
348
- "name": "octolens",
349
- "source": {
350
- "source": "github",
351
- "repo": "vellum-ai/octolens",
352
- "ref": "d9117f5c6b97b3bff75dec1a04bedc32571c6538"
353
- },
354
- "description": "Social listening plugin for Octolens. Monitor brand mentions, competitor activity, and industry conversations across 13+ platforms. Query mentions, run analytics, manage keywords and feeds via REST API tools, or connect the Octolens MCP server for natural-language workflows.",
355
- "category": "growth",
356
- "homepage": "https://github.com/vellum-ai/octolens",
357
- "license": "MIT"
319
+ "icon": "💳"
358
320
  },
359
321
  {
360
322
  "name": "openseo",
@@ -368,7 +330,7 @@
368
330
  "category": "marketing",
369
331
  "homepage": "https://openseo.so",
370
332
  "license": "MIT",
371
- "icon": "\ud83d\udd0e"
333
+ "icon": "🔎"
372
334
  },
373
335
  {
374
336
  "name": "originkit",
@@ -381,7 +343,7 @@
381
343
  "category": "productivity",
382
344
  "homepage": "https://github.com/vellum-ai/originkit",
383
345
  "license": "MIT",
384
- "icon": "\ud83e\uddf1"
346
+ "icon": "🧱"
385
347
  },
386
348
  {
387
349
  "name": "personal-finance",
@@ -394,7 +356,7 @@
394
356
  "category": "productivity",
395
357
  "homepage": "https://github.com/AnitaKirkovska/personal-finance",
396
358
  "license": "MIT",
397
- "icon": "\ud83d\udcb0"
359
+ "icon": "💰"
398
360
  },
399
361
  {
400
362
  "name": "plant-doctor",
@@ -407,7 +369,7 @@
407
369
  "category": "lifestyle",
408
370
  "homepage": "https://github.com/vellum-ai/plant-doctor",
409
371
  "license": "MIT",
410
- "icon": "\ud83e\udeb4"
372
+ "icon": "🪴"
411
373
  },
412
374
  {
413
375
  "name": "polyglot",
@@ -420,7 +382,7 @@
420
382
  "category": "education",
421
383
  "homepage": "https://github.com/vellum-ai/polyglot",
422
384
  "license": "MIT",
423
- "icon": "\ud83d\udde3\ufe0f"
385
+ "icon": "🗣️"
424
386
  },
425
387
  {
426
388
  "name": "proactive-slacks",
@@ -433,7 +395,7 @@
433
395
  "category": "productivity",
434
396
  "homepage": "https://github.com/AnitaKirkovska/proactive-slacks",
435
397
  "license": "MIT",
436
- "icon": "\ud83d\udcac"
398
+ "icon": "💬"
437
399
  },
438
400
  {
439
401
  "name": "reading-pal",
@@ -446,20 +408,7 @@
446
408
  "category": "hobby",
447
409
  "homepage": "https://github.com/vellum-ai/reading-pal",
448
410
  "license": "MIT",
449
- "icon": "\ud83d\udcda"
450
- },
451
- {
452
- "name": "restaurant-invoice-auditor",
453
- "description": "Audits restaurant food delivery slips in 14 seconds, flags silent price hikes and pack-size shrinkage, and stages approved bills in QuickBooks.",
454
- "category": "commerce",
455
- "icon": "\ud83e\uddfe",
456
- "license": "MIT",
457
- "homepage": "https://github.com/ZeebBoyBlue/restaurant-invoice-auditor",
458
- "source": {
459
- "source": "github",
460
- "repo": "ZeebBoyBlue/restaurant-invoice-auditor",
461
- "ref": "f1905e639941e98172c5032b6d722f668882d75d"
462
- }
411
+ "icon": "📚"
463
412
  },
464
413
  {
465
414
  "name": "simple-memory",
@@ -472,7 +421,7 @@
472
421
  "category": "memory",
473
422
  "homepage": "https://github.com/vellum-ai/simple-memory",
474
423
  "license": "MIT",
475
- "icon": "\ud83e\udde0"
424
+ "icon": "🧠"
476
425
  },
477
426
  {
478
427
  "name": "smb-inbox-brief",
@@ -485,7 +434,7 @@
485
434
  "category": "productivity",
486
435
  "homepage": "https://github.com/AnitaKirkovska/smb-inbox-brief",
487
436
  "license": "MIT",
488
- "icon": "\ud83d\udce7"
437
+ "icon": "📧"
489
438
  },
490
439
  {
491
440
  "name": "tennis-companion",
@@ -498,7 +447,7 @@
498
447
  "category": "health",
499
448
  "homepage": "https://github.com/vellum-ai/tennis-companion",
500
449
  "license": "MIT",
501
- "icon": "\ud83c\udfbe"
450
+ "icon": "🎾"
502
451
  },
503
452
  {
504
453
  "name": "travel-planner",
@@ -511,7 +460,7 @@
511
460
  "category": "lifestyle",
512
461
  "homepage": "https://github.com/AnitaKirkovska/travel-planner",
513
462
  "license": "MIT",
514
- "icon": "\u2708\ufe0f"
463
+ "icon": "✈️"
515
464
  },
516
465
  {
517
466
  "name": "unabyss",
@@ -524,7 +473,7 @@
524
473
  "category": "memory",
525
474
  "homepage": "https://unabyss.com",
526
475
  "license": "MIT",
527
- "icon": "\ud83c\udf0a"
476
+ "icon": "🌊"
528
477
  },
529
478
  {
530
479
  "name": "vellum-client-qa",
@@ -537,7 +486,20 @@
537
486
  "category": "developer",
538
487
  "homepage": "https://github.com/vellum-ai/vellum-client-qa",
539
488
  "license": "MIT",
540
- "icon": "\ud83e\uddea"
489
+ "icon": "🧪"
490
+ },
491
+ {
492
+ "name": "ledger",
493
+ "source": {
494
+ "source": "github",
495
+ "repo": "simensgreen/ledger",
496
+ "ref": "7fc04fd77b20ad4b27ccd51be22c101274b370f6"
497
+ },
498
+ "description": "Structured storage for Vellum agents: tables via JSON Schema, query/aggregate via JSON, named saved queries.",
499
+ "category": "developer",
500
+ "homepage": "https://github.com/simensgreen/ledger",
501
+ "license": "MIT",
502
+ "icon": "🗄️"
541
503
  },
542
504
  {
543
505
  "name": "virlo",
@@ -551,7 +513,7 @@
551
513
  "category": "marketing",
552
514
  "homepage": "https://github.com/Virlo-AI/virlo-integrations/tree/main/integrations/vellum",
553
515
  "license": "MIT",
554
- "icon": "\ud83d\udcf1"
516
+ "icon": "📱"
555
517
  },
556
518
  {
557
519
  "name": "writing-coach",
@@ -564,7 +526,32 @@
564
526
  "category": "hobby",
565
527
  "homepage": "https://github.com/vellum-ai/writing-coach",
566
528
  "license": "MIT",
567
- "icon": "\u270d\ufe0f"
529
+ "icon": "✍️"
530
+ },
531
+ {
532
+ "name": "battleship",
533
+ "source": {
534
+ "source": "github",
535
+ "repo": "vellum-ai/battleship",
536
+ "ref": "32391ea3af71597b7507bb710bd29ab8308a4604"
537
+ },
538
+ "description": "Play Battleship against your assistant. Fire shots, track hits and misses, and sink the fleet before the assistant sinks yours.",
539
+ "category": "hobby",
540
+ "homepage": "https://github.com/vellum-ai/battleship",
541
+ "license": "MIT",
542
+ "icon": "⚓"
543
+ },
544
+ {
545
+ "name": "octolens",
546
+ "source": {
547
+ "source": "github",
548
+ "repo": "vellum-ai/octolens",
549
+ "ref": "d9117f5c6b97b3bff75dec1a04bedc32571c6538"
550
+ },
551
+ "description": "Social listening plugin for Octolens. Monitor brand mentions, competitor activity, and industry conversations across 13+ platforms. Query mentions, run analytics, manage keywords and feeds via REST API tools, or connect the Octolens MCP server for natural-language workflows.",
552
+ "category": "growth",
553
+ "homepage": "https://github.com/vellum-ai/octolens",
554
+ "license": "MIT"
568
555
  }
569
556
  ]
570
557
  }
@@ -540,28 +540,6 @@ describe("resolveDefaultProfileForProvider", () => {
540
540
  expect(entry).toBe(workspace.balanced);
541
541
  });
542
542
 
543
- // Google limits gemini-2.5-flash-lite to grandfathered accounts (other API
544
- // keys get HTTP 404 "no longer available to new users"), so a default
545
- // profile resolving to it lists as available and fails every request on a
546
- // fresh BYOK key.
547
- test("gemini BYOK defaults never resolve to a model Google refuses new keys", () => {
548
- const budget = resolveDefaultProfileForProvider(
549
- managedStubs(),
550
- "cost-optimized",
551
- dp("gemini"),
552
- );
553
- expect(budget?.provider).toBe("gemini");
554
- expect(budget?.model).toBe("gemini-3.1-flash-lite");
555
- for (const key of DEFAULT_PROFILE_KEYS) {
556
- const entry = resolveDefaultProfileForProvider(
557
- managedStubs(),
558
- key,
559
- dp("gemini"),
560
- );
561
- expect(entry?.model).not.toBe("gemini-2.5-flash-lite");
562
- }
563
- });
564
-
565
543
  test("a managed-source stub contributes only label/status/topP over the provider-resolved body", () => {
566
544
  const workspace: Record<string, ProfileEntry> = {
567
545
  balanced: {
@@ -12,10 +12,9 @@ import { describe, expect, test } from "bun:test";
12
12
  import { MemoryRetrospectiveConfigSchema } from "../schemas/memory-retrospective.js";
13
13
 
14
14
  describe("memory.retrospective config schema", () => {
15
- test("an empty block leaves retrospectives and skill improvement on", () => {
15
+ test("an empty block leaves retrospectives on", () => {
16
16
  const parsed = MemoryRetrospectiveConfigSchema.parse({});
17
17
  expect(parsed.enabled).toBe(true);
18
- expect(parsed.skillImprovement).toBe(true);
19
18
  expect(parsed).not.toHaveProperty("forkStrategy");
20
19
  });
21
20
 
@@ -28,19 +27,6 @@ describe("memory.retrospective config schema", () => {
28
27
  ).toBe(false);
29
28
  });
30
29
 
31
- test("skillImprovement is an independent boolean-only authoring switch", () => {
32
- const parsed = MemoryRetrospectiveConfigSchema.parse({
33
- skillImprovement: false,
34
- });
35
- expect(parsed.enabled).toBe(true);
36
- expect(parsed.skillImprovement).toBe(false);
37
- expect(
38
- MemoryRetrospectiveConfigSchema.safeParse({
39
- skillImprovement: "false",
40
- }).success,
41
- ).toBe(false);
42
- });
43
-
44
30
  test("a leftover forkStrategy key is ignored", () => {
45
31
  const parsed = MemoryRetrospectiveConfigSchema.parse({
46
32
  forkStrategy: "cloning",
@@ -39,34 +39,15 @@ describe("rehydratePlatformCredentials", () => {
39
39
  const originalPlatformUrlEnv = process.env.VELLUM_PLATFORM_URL;
40
40
  const originalOrgEnv = process.env.PLATFORM_ORGANIZATION_ID;
41
41
  const originalUserEnv = process.env.PLATFORM_USER_ID;
42
- const originalAssistantApiKeyEnv = process.env.ASSISTANT_API_KEY;
43
- const originalFetch = globalThis.fetch;
44
- const fetchCalls: Array<{ url: string; init?: RequestInit }> = [];
45
- let fetchImpl: (
46
- input: RequestInfo | URL,
47
- init?: RequestInit,
48
- ) => Promise<Response> = async () =>
49
- new Response("not found", { status: 404 });
50
42
 
51
43
  beforeEach(() => {
52
44
  mockSecureKeys = {};
53
45
  throwForKey = undefined;
54
- fetchCalls.length = 0;
55
- fetchImpl = async () => new Response("not found", { status: 404 });
56
- globalThis.fetch = (async (
57
- input: RequestInfo | URL,
58
- init?: RequestInit,
59
- ) => {
60
- const url = typeof input === "string" ? input : input.toString();
61
- fetchCalls.push({ url, init });
62
- return fetchImpl(input, init);
63
- }) as unknown as typeof fetch;
64
46
  // Env vars take precedence over the rehydrated overrides for some fields;
65
47
  // clear them so the credential-store values are what we observe.
66
48
  delete process.env.VELLUM_PLATFORM_URL;
67
49
  delete process.env.PLATFORM_ORGANIZATION_ID;
68
50
  delete process.env.PLATFORM_USER_ID;
69
- delete process.env.ASSISTANT_API_KEY;
70
51
  // Reset in-memory overrides between tests.
71
52
  setPlatformBaseUrl(undefined);
72
53
  setPlatformAssistantId(undefined);
@@ -75,7 +56,6 @@ describe("rehydratePlatformCredentials", () => {
75
56
  });
76
57
 
77
58
  afterEach(() => {
78
- globalThis.fetch = originalFetch;
79
59
  if (originalPlatformUrlEnv === undefined) {
80
60
  delete process.env.VELLUM_PLATFORM_URL;
81
61
  } else {
@@ -91,11 +71,6 @@ describe("rehydratePlatformCredentials", () => {
91
71
  } else {
92
72
  process.env.PLATFORM_USER_ID = originalUserEnv;
93
73
  }
94
- if (originalAssistantApiKeyEnv === undefined) {
95
- delete process.env.ASSISTANT_API_KEY;
96
- } else {
97
- process.env.ASSISTANT_API_KEY = originalAssistantApiKeyEnv;
98
- }
99
74
  setPlatformBaseUrl(undefined);
100
75
  setPlatformAssistantId(undefined);
101
76
  setPlatformOrganizationId(undefined);
@@ -147,72 +122,4 @@ describe("rehydratePlatformCredentials", () => {
147
122
 
148
123
  expect(getPlatformAssistantId()).toBe(ASSISTANT_ID);
149
124
  });
150
-
151
- test("trades the assistant API key for ids via platform validate", async () => {
152
- mockSecureKeys[credentialKey("vellum", "platform_base_url")] = PROD_URL;
153
- mockSecureKeys[credentialKey("vellum", "assistant_api_key")] =
154
- "assistant-key";
155
- fetchImpl = async () =>
156
- new Response(
157
- JSON.stringify({
158
- assistant_id: ASSISTANT_ID,
159
- organization_id: ORG_ID,
160
- user_id: USER_ID,
161
- }),
162
- { status: 200 },
163
- );
164
-
165
- await rehydratePlatformCredentials();
166
-
167
- expect(fetchCalls).toHaveLength(1);
168
- expect(fetchCalls[0]?.url).toBe(
169
- `${PROD_URL}/v1/internal/assistants/validate/`,
170
- );
171
- const headers = new Headers(fetchCalls[0]?.init?.headers);
172
- expect(headers.get("Authorization")).toBe("Api-Key assistant-key");
173
- expect(getPlatformAssistantId()).toBe(ASSISTANT_ID);
174
- expect(getPlatformOrganizationId()).toBe(ORG_ID);
175
- expect(getPlatformUserId()).toBe(USER_ID);
176
- });
177
-
178
- test("validate ids win over vault leftovers", async () => {
179
- mockSecureKeys[credentialKey("vellum", "platform_base_url")] = PROD_URL;
180
- mockSecureKeys[credentialKey("vellum", "assistant_api_key")] =
181
- "assistant-key";
182
- mockSecureKeys[credentialKey("vellum", "platform_assistant_id")] =
183
- "asst-from-vault";
184
- fetchImpl = async () =>
185
- new Response(
186
- JSON.stringify({
187
- assistant_id: ASSISTANT_ID,
188
- organization_id: ORG_ID,
189
- user_id: USER_ID,
190
- }),
191
- { status: 200 },
192
- );
193
-
194
- await rehydratePlatformCredentials();
195
-
196
- expect(getPlatformAssistantId()).toBe(ASSISTANT_ID);
197
- });
198
-
199
- test("falls back to the credential store when validate is unreachable", async () => {
200
- mockSecureKeys[credentialKey("vellum", "platform_base_url")] = PROD_URL;
201
- mockSecureKeys[credentialKey("vellum", "assistant_api_key")] =
202
- "assistant-key";
203
- mockSecureKeys[credentialKey("vellum", "platform_assistant_id")] =
204
- ASSISTANT_ID;
205
- mockSecureKeys[credentialKey("vellum", "platform_organization_id")] =
206
- ORG_ID;
207
- mockSecureKeys[credentialKey("vellum", "platform_user_id")] = USER_ID;
208
- fetchImpl = async () => {
209
- throw new Error("network down");
210
- };
211
-
212
- await rehydratePlatformCredentials();
213
-
214
- expect(getPlatformAssistantId()).toBe(ASSISTANT_ID);
215
- expect(getPlatformOrganizationId()).toBe(ORG_ID);
216
- expect(getPlatformUserId()).toBe(USER_ID);
217
- });
218
125
  });