@vellumai/assistant 0.11.1 → 0.11.2-dev.202608042257.9e99b1d

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 (514) hide show
  1. package/Dockerfile +1 -3
  2. package/README.md +1 -1
  3. package/eslint.config.mjs +28 -8
  4. package/node_modules/@vellumai/ces-client/node_modules/@vellumai/service-contracts/package.json +1 -0
  5. package/node_modules/@vellumai/ces-client/node_modules/@vellumai/service-contracts/src/__tests__/stripe-currency.test.ts +37 -0
  6. package/node_modules/@vellumai/ces-client/node_modules/@vellumai/service-contracts/src/stripe-currency.ts +55 -0
  7. package/node_modules/@vellumai/environments/src/__tests__/install-layout.test.ts +98 -0
  8. package/node_modules/@vellumai/environments/src/__tests__/package-boundary.test.ts +5 -5
  9. package/node_modules/@vellumai/environments/src/index.ts +17 -6
  10. package/node_modules/@vellumai/environments/src/install-layout.ts +49 -0
  11. package/node_modules/@vellumai/gateway-client/node_modules/@vellumai/service-contracts/package.json +1 -0
  12. package/node_modules/@vellumai/gateway-client/node_modules/@vellumai/service-contracts/src/__tests__/stripe-currency.test.ts +37 -0
  13. package/node_modules/@vellumai/gateway-client/node_modules/@vellumai/service-contracts/src/stripe-currency.ts +55 -0
  14. package/node_modules/@vellumai/service-contracts/package.json +1 -0
  15. package/node_modules/@vellumai/service-contracts/src/__tests__/stripe-currency.test.ts +37 -0
  16. package/node_modules/@vellumai/service-contracts/src/stripe-currency.ts +55 -0
  17. package/node_modules/@vellumai/slack-text/src/index.test.ts +48 -0
  18. package/node_modules/@vellumai/slack-text/src/index.ts +41 -8
  19. package/openapi.yaml +442 -8
  20. package/package.json +1 -1
  21. package/src/__tests__/agent-image-optimize.test.ts +4 -4
  22. package/src/__tests__/agent-loop-resume-interrupted.test.ts +223 -0
  23. package/src/__tests__/agent-loop-subagent-billing-headers.test.ts +166 -0
  24. package/src/__tests__/answered-question-persistence.test.ts +240 -0
  25. package/src/__tests__/assistant-feature-flags-integration.test.ts +10 -0
  26. package/src/__tests__/attachments-store-heic-normalize.test.ts +16 -12
  27. package/src/__tests__/attachments-store.test.ts +130 -68
  28. package/src/__tests__/attachments.test.ts +36 -36
  29. package/src/__tests__/byok-default-profile-ensure.test.ts +43 -0
  30. package/src/__tests__/cli-logger-boundary-guard.test.ts +87 -0
  31. package/src/__tests__/compaction-events.test.ts +139 -2
  32. package/src/__tests__/compactor-image-manifest-trust.test.ts +1 -1
  33. package/src/__tests__/compactor-truncation-pairing.test.ts +368 -0
  34. package/src/__tests__/config-loader-backfill.test.ts +35 -3
  35. package/src/__tests__/config-schema.test.ts +1 -0
  36. package/src/__tests__/consult-deadline.test.ts +65 -0
  37. package/src/__tests__/conversation-agent-loop-fatal-cleanup.test.ts +30 -0
  38. package/src/__tests__/conversation-agent-loop.test.ts +255 -8
  39. package/src/__tests__/conversation-disk-view-integration.test.ts +5 -1
  40. package/src/__tests__/conversation-disk-view.test.ts +4 -4
  41. package/src/__tests__/conversation-error.test.ts +211 -4
  42. package/src/__tests__/conversation-fork-crud.test.ts +5 -1
  43. package/src/__tests__/conversation-fork-retrospective.test.ts +5 -1
  44. package/src/__tests__/conversation-options-turn-scoped-transport.test.ts +64 -0
  45. package/src/__tests__/conversation-queue.test.ts +255 -1
  46. package/src/__tests__/conversation-retry-route.test.ts +46 -7
  47. package/src/__tests__/conversation-slash.test.ts +4 -2
  48. package/src/__tests__/conversation-store.test.ts +26 -10
  49. package/src/__tests__/conversation-summarize-route.test.ts +7 -1
  50. package/src/__tests__/conversation-summarize-up-to.test.ts +71 -5
  51. package/src/__tests__/conversation-surfaces-action-delivery.test.ts +10 -0
  52. package/src/__tests__/conversation-surfaces-history-restored-completion.test.ts +969 -0
  53. package/src/__tests__/conversation-surfaces-persisted-info.test.ts +312 -0
  54. package/src/__tests__/cu-unified-flow.test.ts +75 -11
  55. package/src/__tests__/disk-pressure-guard.test.ts +55 -55
  56. package/src/__tests__/disk-pressure-routes.test.ts +10 -10
  57. package/src/__tests__/disk-pressure-tools.test.ts +2 -2
  58. package/src/__tests__/disk-usage.test.ts +35 -20
  59. package/src/__tests__/document-create-dedupe.test.ts +2 -1
  60. package/src/__tests__/document-find-replace.test.ts +2 -1
  61. package/src/__tests__/document-tool-security.test.ts +2 -1
  62. package/src/__tests__/document-update-default-surface.test.ts +2 -1
  63. package/src/__tests__/document-workspace-file.test.ts +467 -0
  64. package/src/__tests__/dynamic-skill-background-guard.test.ts +2 -2
  65. package/src/__tests__/emit-signal-routing-intent.test.ts +290 -49
  66. package/src/__tests__/file-list-tool.test.ts +12 -10
  67. package/src/__tests__/file-ops-service.test.ts +76 -40
  68. package/src/__tests__/file-url-path-guard.test.ts +83 -0
  69. package/src/__tests__/filesystem-tools.test.ts +82 -66
  70. package/src/__tests__/guardian-card-withdrawal.test.ts +91 -3
  71. package/src/__tests__/history-repair.test.ts +39 -0
  72. package/src/__tests__/http-user-message-parity.test.ts +66 -0
  73. package/src/__tests__/identity-routes.test.ts +13 -13
  74. package/src/__tests__/image-conversion.test.ts +29 -26
  75. package/src/__tests__/image-source-path-reinject.test.ts +2 -2
  76. package/src/__tests__/list-messages-attachments.test.ts +139 -28
  77. package/src/__tests__/list-messages-background-tool-completion.test.ts +4 -4
  78. package/src/__tests__/list-messages-client-message-id.test.ts +2 -2
  79. package/src/__tests__/list-messages-hidden-metadata.test.ts +16 -16
  80. package/src/__tests__/list-messages-page-latest.test.ts +61 -61
  81. package/src/__tests__/list-messages-provider-error.test.ts +143 -0
  82. package/src/__tests__/list-messages-queued.test.ts +6 -6
  83. package/src/__tests__/list-messages-system-card.test.ts +100 -0
  84. package/src/__tests__/list-messages-tool-merge.test.ts +9 -9
  85. package/src/__tests__/llm-resolver.test.ts +19 -9
  86. package/src/__tests__/llm-usage-store.test.ts +55 -0
  87. package/src/__tests__/managed-profile-guard.test.ts +23 -0
  88. package/src/__tests__/migration-export-http.test.ts +1 -1
  89. package/src/__tests__/migration-import-commit-http.test.ts +1 -1
  90. package/src/__tests__/migration-import-preflight-http.test.ts +1 -1
  91. package/src/__tests__/migration-validate-http.test.ts +1 -1
  92. package/src/__tests__/notification-platform-adapter.test.ts +130 -2
  93. package/src/__tests__/notification-telegram-adapter.test.ts +6 -0
  94. package/src/__tests__/notification-vellum-adapter.test.ts +45 -0
  95. package/src/__tests__/persist-media-references.test.ts +2 -2
  96. package/src/__tests__/persist-unsendable-image-downscale.test.ts +5 -5
  97. package/src/__tests__/persist-unsendable-image.test.ts +23 -23
  98. package/src/__tests__/plugin-api-model-profiles.test.ts +10 -1
  99. package/src/__tests__/plugin-import-boundary-guard.test.ts +3 -0
  100. package/src/__tests__/profiler-routes.test.ts +13 -13
  101. package/src/__tests__/provider-error-scenarios.test.ts +140 -0
  102. package/src/__tests__/provider-send-message-override-profile.test.ts +95 -0
  103. package/src/__tests__/run-conversation-turn-persistence.test.ts +66 -3
  104. package/src/__tests__/runtime-attachment-metadata.test.ts +15 -7
  105. package/src/__tests__/scripted-turn-metadata-persistence.test.ts +209 -0
  106. package/src/__tests__/server-history-render.test.ts +97 -7
  107. package/src/__tests__/size-guard.test.ts +8 -8
  108. package/src/__tests__/skill-docs-sync-guard.test.ts +3 -2
  109. package/src/__tests__/skill-tool-factory.test.ts +247 -0
  110. package/src/__tests__/skills-install-staging.test.ts +15 -6
  111. package/src/__tests__/skills.test.ts +27 -0
  112. package/src/__tests__/slack-channels-routes.test.ts +0 -2
  113. package/src/__tests__/slack-edit-ordering-characterization.test.ts +103 -0
  114. package/src/__tests__/slack-mention-binding-invariance.test.ts +103 -0
  115. package/src/__tests__/slack-mention-provider-leak-audit.test.ts +135 -0
  116. package/src/__tests__/slack-share-routes.test.ts +0 -3
  117. package/src/__tests__/slack-users-routes.test.ts +0 -2
  118. package/src/__tests__/subagent-allowlist-validation.test.ts +26 -4
  119. package/src/__tests__/subagent-disposal.test.ts +10 -0
  120. package/src/__tests__/subagent-fork-notifications.test.ts +10 -0
  121. package/src/__tests__/subagent-fork-prompt-role.test.ts +85 -11
  122. package/src/__tests__/subagent-fork-spawn.test.ts +15 -7
  123. package/src/__tests__/subagent-manager-notify.test.ts +148 -0
  124. package/src/__tests__/subagent-notify-parent.test.ts +1 -1
  125. package/src/__tests__/subagent-persistence.test.ts +141 -0
  126. package/src/__tests__/subagent-role-registry.test.ts +172 -63
  127. package/src/__tests__/subagent-role-resolution.test.ts +88 -0
  128. package/src/__tests__/subagent-spawn-and-await.test.ts +48 -0
  129. package/src/__tests__/subagent-spawn-tool-fork.test.ts +111 -10
  130. package/src/__tests__/subagent-terminal-message.test.ts +88 -1
  131. package/src/__tests__/subagent-tool-gate-mode.test.ts +215 -0
  132. package/src/__tests__/subagent-tools.test.ts +1945 -97
  133. package/src/__tests__/surface-completion-compaction-boundary.test.ts +124 -0
  134. package/src/__tests__/surface-completion-in-flight-snapshot.test.ts +298 -0
  135. package/src/__tests__/tool-preview-lifecycle.test.ts +58 -0
  136. package/src/__tests__/tool-result-spool.test.ts +5 -4
  137. package/src/__tests__/tools-audio-read.test.ts +10 -10
  138. package/src/__tests__/tools-get-route.test.ts +85 -12
  139. package/src/__tests__/tools-list-cli.test.ts +171 -0
  140. package/src/__tests__/turn-boundary-resolution.test.ts +53 -0
  141. package/src/__tests__/turn-events-store.test.ts +26 -0
  142. package/src/__tests__/ui-visual-surface.test.ts +695 -0
  143. package/src/__tests__/unified-turn-context-visible-app.test.ts +99 -0
  144. package/src/__tests__/visible-app-context.test.ts +189 -0
  145. package/src/__tests__/workspace-git-service.test.ts +173 -33
  146. package/src/__tests__/workspace-migration-137-repair-retired-fireworks-minimax-model-id.test.ts +157 -0
  147. package/src/__tests__/workspace-migration-138-backfill-home-feed-titles.test.ts +373 -0
  148. package/src/__tests__/workspace-migration-139-clear-renamed-cost-profile-label.test.ts +137 -0
  149. package/src/agent/attachments.ts +26 -24
  150. package/src/agent/history-repair/history-repair.ts +8 -0
  151. package/src/agent/image-optimize.ts +6 -6
  152. package/src/agent/loop.ts +57 -16
  153. package/src/agent/message-types.ts +3 -3
  154. package/src/api/events/context-window-usage.ts +31 -0
  155. package/src/api/events/notification-intent.ts +8 -0
  156. package/src/api/events/question-answered.ts +53 -0
  157. package/src/api/events/tool-result.ts +7 -0
  158. package/src/api/events/ui-surface-pending.ts +35 -0
  159. package/src/api/index.ts +20 -0
  160. package/src/api/responses/conversation-message.ts +36 -4
  161. package/src/api/surfaces.ts +90 -1
  162. package/src/approvals/guardian-card-withdrawal.ts +66 -31
  163. package/src/approvals/guardian-decision-primitive.ts +4 -0
  164. package/src/calls/__tests__/call-setup-router.test.ts +156 -26
  165. package/src/calls/__tests__/voice-session-bridge.test.ts +201 -12
  166. package/src/calls/call-setup-router.ts +80 -36
  167. package/src/calls/voice-session-bridge.ts +173 -26
  168. package/src/cli/commands/__tests__/cache.test.ts +7 -4
  169. package/src/cli/commands/inference.help.ts +3 -3
  170. package/src/cli/commands/mcp.help.ts +4 -2
  171. package/src/cli/commands/notifications.help.ts +3 -2
  172. package/src/cli/commands/platform/__tests__/callback-routes-list.test.ts +42 -128
  173. package/src/cli/commands/platform/__tests__/credits.test.ts +9 -78
  174. package/src/cli/commands/platform/__tests__/helpers.ts +90 -0
  175. package/src/cli/commands/platform/__tests__/invoices.test.ts +238 -0
  176. package/src/cli/commands/platform/__tests__/plans.test.ts +9 -88
  177. package/src/cli/commands/platform/__tests__/status.test.ts +12 -87
  178. package/src/cli/commands/platform/__tests__/subscription.test.ts +9 -86
  179. package/src/cli/commands/platform/index.help.ts +92 -0
  180. package/src/cli/commands/platform/index.ts +7 -0
  181. package/src/cli/commands/platform/invoices.ts +132 -0
  182. package/src/cli/commands/tools.help.ts +4 -2
  183. package/src/cli/commands/tools.ts +38 -0
  184. package/src/cli/commands/usage.help.ts +1 -1
  185. package/src/cli/lib/list-installed-plugins.ts +2 -1
  186. package/src/config/__tests__/default-profile-catalog.test.ts +7 -10
  187. package/src/config/__tests__/deployment-context-defaults.test.ts +27 -5
  188. package/src/config/__tests__/profile-tool-support.test.ts +131 -0
  189. package/src/config/assistant-feature-flags.ts +7 -2
  190. package/src/config/bundled-skills/AGENTS.md +1 -1
  191. package/src/config/bundled-skills/app-builder/SKILL.md +3 -2
  192. package/src/config/bundled-skills/media-processing/SKILL.md +1 -1
  193. package/src/config/bundled-skills/media-processing/TOOLS.json +1 -1
  194. package/src/config/bundled-skills/media-processing/__tests__/media-analysis-default-model.test.ts +177 -0
  195. package/src/config/bundled-skills/media-processing/services/gemini-map.ts +4 -3
  196. package/src/config/bundled-skills/media-processing/services/gemini-video.ts +2 -1
  197. package/src/config/bundled-skills/media-processing/services/media-analysis-model.ts +12 -0
  198. package/src/config/bundled-skills/subagent/SKILL.md +55 -22
  199. package/src/config/bundled-skills/subagent/TOOLS.json +15 -14
  200. package/src/config/bundled-skills/visualize/SKILL.md +163 -0
  201. package/src/config/call-site-defaults.ts +3 -2
  202. package/src/config/default-profile-catalog.ts +75 -70
  203. package/src/config/default-profile-names.ts +13 -28
  204. package/src/config/env-registry.ts +1 -0
  205. package/src/config/feature-flag-registry.json +32 -8
  206. package/src/config/llm-resolver.ts +25 -8
  207. package/src/config/loader.ts +18 -11
  208. package/src/config/profile-tool-support.ts +110 -0
  209. package/src/config/schemas/llm.ts +1 -9
  210. package/src/config/schemas/memory-retrospective.ts +9 -0
  211. package/src/config/schemas/monitoring.ts +28 -2
  212. package/src/config/schemas/workspace-git.ts +15 -0
  213. package/src/config/seed-inference-profiles.ts +19 -5
  214. package/src/context/compactor.ts +45 -8
  215. package/src/context/post-turn-tool-result-truncation.ts +2 -2
  216. package/src/conversations/__tests__/message-consolidation.test.ts +54 -0
  217. package/src/conversations/message-consolidation.ts +17 -15
  218. package/src/daemon/__tests__/abort-null-controller.test.ts +141 -5
  219. package/src/daemon/__tests__/install-assistant-command.test.ts +234 -0
  220. package/src/daemon/__tests__/turn-tail-assistant-reply-notify.test.ts +182 -0
  221. package/src/daemon/__tests__/turn-tail-deleted-conversation.test.ts +181 -0
  222. package/src/daemon/conversation-agent-loop-handlers.ts +204 -64
  223. package/src/daemon/conversation-agent-loop.ts +115 -23
  224. package/src/daemon/conversation-attachments.ts +1 -1
  225. package/src/daemon/conversation-error.ts +169 -48
  226. package/src/daemon/conversation-lifecycle.ts +119 -17
  227. package/src/daemon/conversation-messaging.ts +118 -30
  228. package/src/daemon/conversation-process.ts +91 -64
  229. package/src/daemon/conversation-runtime-assembly.ts +57 -0
  230. package/src/daemon/conversation-store.ts +36 -1
  231. package/src/daemon/conversation-surface-state.ts +9 -0
  232. package/src/daemon/conversation-surfaces.ts +476 -108
  233. package/src/daemon/conversation-tool-setup.ts +54 -2
  234. package/src/daemon/conversation-turn-finalize.ts +76 -18
  235. package/src/daemon/conversation.ts +151 -29
  236. package/src/daemon/disk-pressure-guard-lifecycle.ts +2 -2
  237. package/src/daemon/disk-pressure-guard.ts +3 -3
  238. package/src/daemon/handlers/shared.ts +12 -0
  239. package/src/daemon/handlers/skills.ts +1 -1
  240. package/src/daemon/install-assistant-command.ts +322 -0
  241. package/src/daemon/lifecycle.ts +12 -3
  242. package/src/daemon/message-types/conversations.ts +8 -0
  243. package/src/daemon/message-types/surfaces.ts +3 -0
  244. package/src/daemon/persist-media-references.ts +23 -14
  245. package/src/daemon/process-message.ts +6 -6
  246. package/src/daemon/tool-setup-types.ts +31 -2
  247. package/src/documents/document-store.ts +247 -10
  248. package/src/home/__tests__/feed-types.test.ts +43 -8
  249. package/src/home/__tests__/feed-writer.test.ts +59 -0
  250. package/src/home/feed-types.ts +34 -7
  251. package/src/home/feed-writer.ts +15 -6
  252. package/src/live-voice/__tests__/activity-label.test.ts +95 -0
  253. package/src/live-voice/__tests__/live-activity-reporter.test.ts +86 -5
  254. package/src/live-voice/__tests__/live-voice-agent-turn.test.ts +310 -25
  255. package/src/live-voice/__tests__/live-voice-archive.test.ts +16 -16
  256. package/src/live-voice/__tests__/live-voice-events.test.ts +4 -4
  257. package/src/live-voice/__tests__/live-voice-integration.test.ts +7 -5
  258. package/src/live-voice/__tests__/live-voice-triage-escalate.test.ts +8 -4
  259. package/src/live-voice/__tests__/live-voice-vad.test.ts +44 -16
  260. package/src/live-voice/activity-label.ts +169 -0
  261. package/src/live-voice/live-activity-reporter.ts +35 -6
  262. package/src/live-voice/live-voice-archive.ts +13 -13
  263. package/src/live-voice/live-voice-session.ts +288 -41
  264. package/src/live-voice/protocol.ts +35 -0
  265. package/src/messaging/providers/slack/__tests__/adapter-mention-rendering.test.ts +84 -2
  266. package/src/messaging/providers/slack/adapter.ts +86 -19
  267. package/src/messaging/providers/slack/api.test.ts +85 -1
  268. package/src/messaging/providers/slack/api.ts +121 -288
  269. package/src/messaging/providers/slack/client.ts +20 -251
  270. package/src/messaging/providers/slack/mention-source.test.ts +285 -0
  271. package/src/messaging/providers/slack/mention-source.ts +287 -0
  272. package/src/messaging/providers/slack/send.test.ts +4 -9
  273. package/src/messaging/providers/slack/send.ts +1 -1
  274. package/src/messaging/providers/slack/types.ts +5 -0
  275. package/src/messaging/providers/slack/web-api-transport.test.ts +181 -0
  276. package/src/messaging/providers/slack/web-api-transport.ts +367 -0
  277. package/src/messaging/providers/slack/withdraw.ts +6 -14
  278. package/src/messaging/providers/telegram-bot/send.test.ts +31 -1
  279. package/src/messaging/providers/telegram-bot/send.ts +23 -2
  280. package/src/messaging/providers/telegram-bot/withdraw.test.ts +152 -0
  281. package/src/messaging/providers/telegram-bot/withdraw.ts +166 -0
  282. package/src/monitoring/__tests__/db-integrity-sample.test.ts +22 -5
  283. package/src/monitoring/__tests__/file-descriptors.test.ts +144 -0
  284. package/src/monitoring/db-integrity-sample.ts +6 -1
  285. package/src/monitoring/file-descriptors.ts +262 -0
  286. package/src/monitoring/process-memory.ts +4 -11
  287. package/src/monitoring/resource-sampler.ts +26 -5
  288. package/src/monitoring/worker.ts +12 -0
  289. package/src/notifications/__tests__/assistant-reply-producer.test.ts +740 -0
  290. package/src/notifications/__tests__/broadcaster.test.ts +347 -7
  291. package/src/notifications/__tests__/copy-composer.test.ts +53 -3
  292. package/src/notifications/__tests__/decision-engine.test.ts +349 -29
  293. package/src/notifications/__tests__/deterministic-checks.test.ts +21 -0
  294. package/src/notifications/__tests__/edit-notification.test.ts +330 -0
  295. package/src/notifications/__tests__/guardian-delivery-recorder.test.ts +71 -0
  296. package/src/notifications/__tests__/home-feed-side-effect.test.ts +170 -12
  297. package/src/notifications/adapters/macos.ts +3 -0
  298. package/src/notifications/adapters/platform.ts +90 -14
  299. package/src/notifications/adapters/telegram.ts +6 -4
  300. package/src/notifications/assistant-reply-producer.ts +219 -0
  301. package/src/notifications/broadcaster.ts +523 -317
  302. package/src/notifications/copy-composer.ts +27 -6
  303. package/src/notifications/decision-engine.ts +154 -77
  304. package/src/notifications/deterministic-checks.ts +6 -7
  305. package/src/notifications/edit-notification.ts +8 -4
  306. package/src/notifications/emit-signal.ts +49 -16
  307. package/src/notifications/guardian-delivery-recorder.ts +8 -2
  308. package/src/notifications/home-feed-side-effect.ts +43 -6
  309. package/src/notifications/notification-utils.ts +39 -4
  310. package/src/notifications/signal.ts +10 -0
  311. package/src/notifications/types.ts +17 -0
  312. package/src/permissions/question-prompter.test.ts +4 -0
  313. package/src/permissions/question-prompter.ts +21 -4
  314. package/src/persistence/attachments-store.ts +15 -15
  315. package/src/persistence/bookmark-crud.ts +18 -9
  316. package/src/persistence/conversation-attention-store.ts +26 -0
  317. package/src/persistence/conversation-bootstrap.ts +17 -0
  318. package/src/persistence/conversation-crud.ts +89 -32
  319. package/src/persistence/conversation-queries.ts +30 -15
  320. package/src/persistence/conversation-title-service.ts +5 -170
  321. package/src/persistence/conversation-types.ts +192 -1
  322. package/src/persistence/db-init.ts +14 -1
  323. package/src/persistence/db-maintenance.ts +5 -4
  324. package/src/persistence/embeddings/__tests__/plugin-index-qdrant-init.test.ts +219 -0
  325. package/src/persistence/embeddings/__tests__/plugin-index.test.ts +22 -0
  326. package/src/persistence/embeddings/__tests__/worker-script-version.test.ts +76 -0
  327. package/src/persistence/embeddings/embedding-local.ts +2 -1
  328. package/src/persistence/embeddings/embedding-runtime-manager.ts +29 -5
  329. package/src/persistence/embeddings/plugin-index.ts +84 -12
  330. package/src/persistence/llm-usage-store.ts +22 -0
  331. package/src/persistence/migrations/360-add-document-workspace-path.test.ts +110 -0
  332. package/src/persistence/migrations/360-add-document-workspace-path.ts +39 -0
  333. package/src/persistence/migrations/361-normalize-managed-connection-rows.test.ts +168 -0
  334. package/src/persistence/migrations/361-normalize-managed-connection-rows.ts +76 -0
  335. package/src/persistence/migrations/362-add-conversation-subagent-kind.test.ts +187 -0
  336. package/src/persistence/migrations/362-add-conversation-subagent-kind.ts +93 -0
  337. package/src/persistence/planner-statistics.ts +14 -0
  338. package/src/persistence/schema/conversations.ts +22 -0
  339. package/src/persistence/schema/documents.ts +26 -11
  340. package/src/persistence/steps.ts +19 -0
  341. package/src/persistence/subagent-store.ts +148 -6
  342. package/src/platform/client.test.ts +172 -2
  343. package/src/platform/client.ts +178 -55
  344. package/src/plugin-api/conversation-turn.ts +13 -0
  345. package/src/plugin-api/model-profiles.test.ts +6 -2
  346. package/src/plugins/defaults/exploration-drift/hooks/post-tool-use.ts +5 -5
  347. package/src/plugins/defaults/exploration-drift/package.json +1 -1
  348. package/src/plugins/defaults/image-recovery/hooks/post-model-call.ts +4 -2
  349. package/src/plugins/defaults/image-recovery/recover.ts +67 -57
  350. package/src/plugins/defaults/index.ts +1 -1
  351. package/src/plugins/defaults/memory/__tests__/bookmark-crud.test.ts +34 -0
  352. package/src/plugins/defaults/memory/__tests__/conversation-queries.test.ts +22 -0
  353. package/src/plugins/defaults/memory/__tests__/jobs-store-enqueue-gate.test.ts +11 -0
  354. package/src/plugins/defaults/memory/__tests__/memory-retrospective-accounting.test.ts +199 -0
  355. package/src/plugins/defaults/memory/__tests__/memory-retrospective-enqueue.test.ts +98 -1
  356. package/src/plugins/defaults/memory/__tests__/memory-retrospective-job.test.ts +105 -1
  357. package/src/plugins/defaults/memory/__tests__/memory-retrospective-sweep.test.ts +24 -2
  358. package/src/plugins/defaults/memory/__tests__/memory-retrospective-wake-chain.test.ts +524 -0
  359. package/src/plugins/defaults/memory/__tests__/memory-tier-boundary-guard.test.ts +1 -1
  360. package/src/plugins/defaults/memory/graph/__tests__/conversation-graph-memory-v2-routing.test.ts +9 -4
  361. package/src/plugins/defaults/memory/host-utils.ts +5 -0
  362. package/src/plugins/defaults/memory/memory-retrospective-accounting.ts +105 -1
  363. package/src/plugins/defaults/memory/memory-retrospective-enqueue.ts +64 -5
  364. package/src/plugins/defaults/memory/memory-retrospective-job.ts +36 -1
  365. package/src/plugins/defaults/memory/memory-retrospective-sweep.ts +12 -3
  366. package/src/plugins/defaults/memory/src/__tests__/memory-v2-simulate-route.test.ts +1 -0
  367. package/src/plugins/defaults/memory/substrate/__tests__/skill-store.test.ts +195 -1
  368. package/src/plugins/defaults/memory/substrate/consolidation-job.ts +1 -1
  369. package/src/plugins/defaults/memory/substrate/skill-store.ts +167 -29
  370. package/src/plugins/defaults/memory/v1/graph/injection.ts +1 -1
  371. package/src/plugins/defaults/memory/v2/__tests__/injection.test.ts +131 -0
  372. package/src/plugins/defaults/memory/v2/__tests__/router.test.ts +1 -0
  373. package/src/plugins/defaults/memory/v2/activation-log-store.ts +4 -0
  374. package/src/plugins/defaults/memory/v2/injection.ts +48 -3
  375. package/src/plugins/defaults/memory/v2/rerank-local.ts +6 -2
  376. package/src/plugins/defaults/memory/v3/__tests__/pool-select.test.ts +1 -1
  377. package/src/plugins/defaults/platform-hosted/routes/reengage.ts +1 -1
  378. package/src/plugins/defaults/turn-context/injectors.ts +1 -0
  379. package/src/plugins/defaults/turn-context/unified-turn-context.ts +26 -0
  380. package/src/plugins/types.ts +17 -0
  381. package/src/prompts/templates/system-sections.ts +2 -2
  382. package/src/providers/__tests__/dispatch-connection-routing.test.ts +43 -2
  383. package/src/providers/__tests__/retry-callsite.test.ts +67 -0
  384. package/src/providers/__tests__/vellum-connection-routing.test.ts +5 -10
  385. package/src/providers/__tests__/vellum-mismatch-routing.test.ts +8 -0
  386. package/src/providers/anthropic/client.ts +6 -4
  387. package/src/providers/call-site-routing.ts +77 -14
  388. package/src/providers/connection-resolution.ts +42 -2
  389. package/src/providers/gemini/client.ts +5 -5
  390. package/src/providers/inference/__tests__/adapter-factory-openai-compatible.test.ts +127 -1
  391. package/src/providers/inference/adapter-factory.ts +71 -12
  392. package/src/providers/media-resolve.ts +21 -11
  393. package/src/providers/model-catalog.ts +0 -11
  394. package/src/providers/model-intents.ts +11 -0
  395. package/src/providers/openai/__tests__/orphan-tool-result-guard.test.ts +478 -0
  396. package/src/providers/openai/chat-completions-provider.ts +50 -34
  397. package/src/providers/openai/orphaned-tool-result.ts +79 -0
  398. package/src/providers/openai/responses-provider.ts +53 -27
  399. package/src/providers/registry.ts +8 -0
  400. package/src/providers/retry.ts +110 -17
  401. package/src/providers/types.ts +8 -1
  402. package/src/providers/vellum-model-routing.ts +6 -7
  403. package/src/runtime/AGENTS.md +2 -0
  404. package/src/runtime/__tests__/agent-wake.test.ts +181 -0
  405. package/src/runtime/agent-wake.ts +132 -9
  406. package/src/runtime/channel-approval-types.ts +25 -0
  407. package/src/runtime/routes/__tests__/connection-routes-vs-cli-parity.test.ts +2 -2
  408. package/src/runtime/routes/__tests__/conversation-query-routes.test.ts +11 -0
  409. package/src/runtime/routes/__tests__/inference-provider-connection-routes.test.ts +121 -9
  410. package/src/runtime/routes/__tests__/llm-call-sites-routes.test.ts +28 -1
  411. package/src/runtime/routes/__tests__/platform-invoice-routes.test.ts +392 -0
  412. package/src/runtime/routes/__tests__/question-routes.test.ts +64 -0
  413. package/src/runtime/routes/__tests__/slack-channel-routes.test.ts +7 -0
  414. package/src/runtime/routes/__tests__/workspace-commit-routes.test.ts +63 -0
  415. package/src/runtime/routes/archive-utils.ts +16 -12
  416. package/src/runtime/routes/attachment-routes.ts +13 -6
  417. package/src/runtime/routes/consolidation-routes.ts +1 -1
  418. package/src/runtime/routes/conversation-management-routes.ts +18 -6
  419. package/src/runtime/routes/conversation-query-routes.ts +14 -23
  420. package/src/runtime/routes/conversation-routes.ts +297 -181
  421. package/src/runtime/routes/credential-routes.ts +1 -5
  422. package/src/runtime/routes/documents-routes.ts +207 -12
  423. package/src/runtime/routes/identity-routes.ts +9 -99
  424. package/src/runtime/routes/inbound-message-handler.ts +5 -5
  425. package/src/runtime/routes/inbound-stages/admission-policy.test.ts +31 -1
  426. package/src/runtime/routes/inbound-stages/admission-policy.ts +18 -0
  427. package/src/runtime/routes/inference-profiles-routes.ts +1 -1
  428. package/src/runtime/routes/inference-provider-connection-routes.ts +52 -19
  429. package/src/runtime/routes/llm-call-sites-routes.ts +13 -0
  430. package/src/runtime/routes/log-export-routes.ts +1 -1
  431. package/src/runtime/routes/notification-routes.ts +4 -1
  432. package/src/runtime/routes/platform-routes.ts +238 -3
  433. package/src/runtime/routes/playground/guard.ts +1 -2
  434. package/src/runtime/routes/profiler-routes.ts +4 -2
  435. package/src/runtime/routes/question-routes.ts +28 -10
  436. package/src/runtime/routes/secret-routes.ts +8 -2
  437. package/src/runtime/routes/settings-routes.ts +41 -13
  438. package/src/runtime/routes/slack-channel-routes.ts +2 -4
  439. package/src/runtime/routes/workspace-commit-routes.ts +49 -2
  440. package/src/runtime/routes/workspace-routes.ts +11 -12
  441. package/src/runtime/routes/workspace-utils.ts +49 -2
  442. package/src/runtime/services/conversation-serializer.ts +2 -4
  443. package/src/skills/catalog-install.ts +20 -7
  444. package/src/skills/skillssh-registry.ts +1 -1
  445. package/src/subagent/__tests__/consult-context-gating.test.ts +98 -0
  446. package/src/subagent/__tests__/consult-context-skills.test.ts +82 -0
  447. package/src/subagent/__tests__/consult-context.test.ts +84 -0
  448. package/src/subagent/__tests__/consult-prompt.test.ts +61 -0
  449. package/src/subagent/consult-context.ts +410 -0
  450. package/src/subagent/consult-prompt.ts +41 -6
  451. package/src/subagent/consult-transcript.ts +1 -1
  452. package/src/subagent/manager.ts +288 -46
  453. package/src/subagent/progress-events.ts +35 -0
  454. package/src/subagent/role-resolution.ts +88 -0
  455. package/src/subagent/types.ts +303 -67
  456. package/src/subagent/validate-allowlists.ts +3 -4
  457. package/src/telemetry/__tests__/telemetry-event-fixtures.ts +2 -0
  458. package/src/telemetry/telemetry-event-sources.ts +13 -0
  459. package/src/telemetry/telemetry-wire-source.json +1 -1
  460. package/src/telemetry/telemetry-wire.generated.ts +3 -0
  461. package/src/telemetry/turn-events-store.ts +30 -1
  462. package/src/telemetry/types.ts +44 -0
  463. package/src/telemetry/usage-telemetry-reporter.test.ts +52 -0
  464. package/src/tools/__tests__/subagent-workflow-tool-input-schemas.test.ts +1 -1
  465. package/src/tools/ask-question/ask-question-tool.test.ts +118 -3
  466. package/src/tools/ask-question/ask-question-tool.ts +56 -2
  467. package/src/tools/browser/browser-execution.ts +1 -1
  468. package/src/tools/browser/pinned-tabs.ts +3 -1
  469. package/src/tools/executor.ts +7 -6
  470. package/src/tools/filesystem/edit.ts +1 -1
  471. package/src/tools/filesystem/list.ts +1 -1
  472. package/src/tools/filesystem/read.ts +1 -1
  473. package/src/tools/filesystem/search.ts +23 -21
  474. package/src/tools/filesystem/write.ts +4 -1
  475. package/src/tools/host-filesystem/edit.ts +1 -1
  476. package/src/tools/host-filesystem/read.ts +1 -1
  477. package/src/tools/host-filesystem/write.ts +4 -1
  478. package/src/tools/permission-checker.ts +8 -3
  479. package/src/tools/shared/filesystem/audio-read.ts +6 -4
  480. package/src/tools/shared/filesystem/file-ops-service.ts +140 -113
  481. package/src/tools/shared/filesystem/image-read.ts +12 -12
  482. package/src/tools/shared/filesystem/size-guard.ts +6 -6
  483. package/src/tools/shared/input-misuse.ts +72 -0
  484. package/src/tools/skills/skill-tool-factory.ts +14 -1
  485. package/src/tools/subagent/consult-deadline.ts +12 -7
  486. package/src/tools/subagent/read.ts +66 -4
  487. package/src/tools/subagent/spawn.ts +541 -51
  488. package/src/tools/terminal/safe-env.ts +1 -0
  489. package/src/tools/types.ts +9 -0
  490. package/src/tools/ui-surface/definitions.ts +39 -1
  491. package/src/tools/ui-surface/surface-shape-docs.ts +38 -4
  492. package/src/tools/ui-surface/visual-validation.ts +789 -0
  493. package/src/tools/workflows/run-workflow.test.ts +1 -0
  494. package/src/usage/__tests__/subagent-attribution.test.ts +109 -0
  495. package/src/usage/subagent-attribution.ts +108 -0
  496. package/src/util/__tests__/short-title.test.ts +229 -0
  497. package/src/util/__tests__/worker-compute.test.ts +65 -0
  498. package/src/util/abort-reasons.ts +16 -0
  499. package/src/util/cgroup-cpu.ts +93 -0
  500. package/src/util/disk-usage.ts +17 -13
  501. package/src/util/errors.ts +27 -0
  502. package/src/util/image-conversion.ts +20 -13
  503. package/src/util/process-tree.ts +19 -0
  504. package/src/util/short-title.ts +189 -0
  505. package/src/util/worker-compute.ts +83 -0
  506. package/src/util/worker-process.ts +7 -1
  507. package/src/workspace/byok-default-profile-ensure.ts +25 -15
  508. package/src/workspace/git-service.ts +89 -39
  509. package/src/workspace/migrations/137-repair-retired-fireworks-minimax-model-id.ts +131 -0
  510. package/src/workspace/migrations/138-backfill-home-feed-titles.ts +179 -0
  511. package/src/workspace/migrations/139-clear-renamed-cost-profile-label.ts +92 -0
  512. package/src/workspace/migrations/registry.ts +6 -0
  513. package/src/daemon/install-symlink.ts +0 -207
  514. package/src/plugins/defaults/memory/substrate/constants.ts +0 -8
@@ -5,7 +5,7 @@ export interface RenderSlackTextOptions {
5
5
  channelFallbackLabel?: string;
6
6
  }
7
7
 
8
- const SLACK_USER_MENTION_RE = /<@([UW][A-Z0-9]+)>/g;
8
+ const SLACK_USER_MENTION_RE = /<@([UW][A-Z0-9]+)(?:\|[^>]*)?>/g;
9
9
  const SLACK_CHANNEL_REFERENCE_RE = /<#([CDG][A-Z0-9]+)(?:\|[^>]*)?>/g;
10
10
 
11
11
  export function extractSlackUserMentionIds(text: string): string[] {
@@ -107,7 +107,14 @@ export async function buildSlackUserLabelMap(
107
107
 
108
108
  for (const text of texts) {
109
109
  if (!text) continue;
110
- for (const id of extractSlackUserMentionIds(text)) {
110
+ for (const match of text.matchAll(SLACK_USER_MENTION_RE)) {
111
+ const id = match[1];
112
+ // A pipe-form mention carrying a usable embedded label renders from
113
+ // that label directly; only queue a lookup when the label is missing,
114
+ // empty, or ID-shaped. Mirrors the channel builder below.
115
+ const [, embeddedLabel] = splitSlackLabel(match[0].slice(1, -1));
116
+ const sanitizedEmbeddedLabel = sanitizeOptionalLabel(embeddedLabel);
117
+ if (sanitizedEmbeddedLabel && sanitizedEmbeddedLabel !== id) continue;
111
118
  if (seen.has(id)) continue;
112
119
  seen.add(id);
113
120
  ids.push(id);
@@ -175,17 +182,29 @@ function renderUserMention(
175
182
  content: string,
176
183
  options: RenderSlackTextOptions,
177
184
  ): string {
178
- const id = content.slice(1);
185
+ const [idWithPrefix, label] = splitSlackLabel(content);
186
+ const id = idWithPrefix.slice(1);
179
187
  if (!isSlackUserId(id)) {
180
188
  return `<${content}>`;
181
189
  }
182
190
 
191
+ // Slack's legacy pipe form (`<@U123|username>`) carries its own label:
192
+ // prefer it over a lookup, mirroring renderChannelReference. The embedded
193
+ // label is Slack-sourced (part of the token), so entities decode before
194
+ // sanitization; the caller-resolved label below is not.
195
+ const embeddedLabel = sanitizeOptionalLabel(
196
+ label === undefined ? undefined : decodeSlackHtmlEntities(label),
197
+ );
198
+ if (embeddedLabel && embeddedLabel !== id) {
199
+ return `@${embeddedLabel}`;
200
+ }
201
+
183
202
  const fallback = sanitizeLabel(options.userFallbackLabel, "unknown-user");
184
- const label = sanitizeLabel(options.userLabels?.[id], fallback);
185
- if (label === id) {
203
+ const resolvedLabel = sanitizeLabel(options.userLabels?.[id], fallback);
204
+ if (resolvedLabel === id) {
186
205
  return `@${fallback}`;
187
206
  }
188
- return `@${label}`;
207
+ return `@${resolvedLabel}`;
189
208
  }
190
209
 
191
210
  function renderChannelReference(
@@ -282,13 +301,27 @@ function sanitizeLabel(label: string | undefined, fallback: string): string {
282
301
  return sanitizedFallback || "unknown";
283
302
  }
284
303
 
285
- function sanitizeOptionalLabel(label: string | undefined): string | undefined {
286
- return label
304
+ /**
305
+ * Normalize a mention label to the renderer's semantics: strip angle
306
+ * brackets, collapse whitespace, strip leading `@`/`#` prefixes. Exported as
307
+ * the single source of truth so persistence-side validation applies exactly
308
+ * the normalization rendering applies; returns `undefined` when nothing
309
+ * usable remains.
310
+ */
311
+ export function sanitizeSlackLabel(
312
+ label: string | undefined,
313
+ ): string | undefined {
314
+ const sanitized = label
287
315
  ?.replace(/[<>]/g, "")
288
316
  .replace(/\s+/g, " ")
289
317
  .trim()
290
318
  .replace(/^[@#]+/, "")
291
319
  .trim();
320
+ return sanitized || undefined;
321
+ }
322
+
323
+ function sanitizeOptionalLabel(label: string | undefined): string | undefined {
324
+ return sanitizeSlackLabel(label);
292
325
  }
293
326
 
294
327
  function isSlackUserId(value: string): boolean {
package/openapi.yaml CHANGED
@@ -3,7 +3,7 @@
3
3
  openapi: 3.1.0
4
4
  info:
5
5
  title: Vellum Assistant API
6
- version: 0.11.1
6
+ version: 0.11.2
7
7
  description: Auto-generated OpenAPI specification for the Vellum Assistant runtime HTTP server.
8
8
  servers:
9
9
  - url: http://127.0.0.1:7821
@@ -699,6 +699,52 @@ paths:
699
699
  required:
700
700
  - ok
701
701
  additionalProperties: false
702
+ /v1/admin/workspace-compact-history:
703
+ post:
704
+ operationId: admin_workspacecompacthistory_post
705
+ summary: Compact workspace git history
706
+ description:
707
+ Squash workspace git history older than the retention window into a single base commit and prune reclaimed
708
+ objects. By default acts only when an oversized blob is reclaimable; with force, the squash runs
709
+ unconditionally.
710
+ tags:
711
+ - admin
712
+ requestBody:
713
+ required: true
714
+ content:
715
+ application/json:
716
+ schema:
717
+ type: object
718
+ properties:
719
+ force:
720
+ description: Squash aged history even when no oversized blob is reclaimable
721
+ type: boolean
722
+ retentionDays:
723
+ description: Retention window override in days (default 7)
724
+ type: integer
725
+ exclusiveMinimum: 0
726
+ maximum: 9007199254740991
727
+ responses:
728
+ "200":
729
+ description: Successful response
730
+ content:
731
+ application/json:
732
+ schema:
733
+ type: object
734
+ properties:
735
+ rewrote:
736
+ type: boolean
737
+ squashedCommits:
738
+ type: number
739
+ keptCommits:
740
+ type: number
741
+ retryAfterMs:
742
+ type: number
743
+ required:
744
+ - rewrote
745
+ - squashedCommits
746
+ - keptCommits
747
+ additionalProperties: false
702
748
  /v1/apps:
703
749
  get:
704
750
  operationId: apps_get
@@ -4691,6 +4737,8 @@ paths:
4691
4737
  type: string
4692
4738
  defaultProfile:
4693
4739
  type: string
4740
+ shippedDefaultProfile:
4741
+ type: string
4694
4742
  required:
4695
4743
  - id
4696
4744
  - displayName
@@ -10665,6 +10713,11 @@ paths:
10665
10713
  type: number
10666
10714
  updatedAt:
10667
10715
  type: number
10716
+ workspacePath:
10717
+ anyOf:
10718
+ - type: string
10719
+ - type: "null"
10720
+ description: Workspace-relative file this document is bound to, or null
10668
10721
  required:
10669
10722
  - success
10670
10723
  - surfaceId
@@ -10674,6 +10727,7 @@ paths:
10674
10727
  - wordCount
10675
10728
  - createdAt
10676
10729
  - updatedAt
10730
+ - workspacePath
10677
10731
  additionalProperties: false
10678
10732
  /v1/documents/{id}/comments:
10679
10733
  get:
@@ -11091,6 +11145,74 @@ paths:
11091
11145
  schema:
11092
11146
  type: string
11093
11147
  format: binary
11148
+ /v1/documents/for-workspace-file:
11149
+ post:
11150
+ operationId: documents_forworkspacefile_post
11151
+ summary: Get or create the document for a workspace markdown file
11152
+ description:
11153
+ "Return the document bound to a workspace markdown file, creating it on first open. The file is the source
11154
+ of truth at open time: stored content that has drifted from the file is refreshed from disk before the document
11155
+ is returned."
11156
+ tags:
11157
+ - documents
11158
+ requestBody:
11159
+ required: true
11160
+ content:
11161
+ application/json:
11162
+ schema:
11163
+ type: object
11164
+ properties:
11165
+ path:
11166
+ type: string
11167
+ description: Workspace-relative path to a .md/.markdown file
11168
+ conversationId:
11169
+ type: string
11170
+ description: Conversation the document is opened from
11171
+ required:
11172
+ - path
11173
+ - conversationId
11174
+ responses:
11175
+ "200":
11176
+ description: Successful response
11177
+ content:
11178
+ application/json:
11179
+ schema:
11180
+ type: object
11181
+ properties:
11182
+ success:
11183
+ type: boolean
11184
+ surfaceId:
11185
+ type: string
11186
+ conversationId:
11187
+ type: string
11188
+ title:
11189
+ type: string
11190
+ content:
11191
+ type: string
11192
+ wordCount:
11193
+ type: number
11194
+ createdAt:
11195
+ type: number
11196
+ updatedAt:
11197
+ type: number
11198
+ workspacePath:
11199
+ anyOf:
11200
+ - type: string
11201
+ - type: "null"
11202
+ description: Workspace-relative file this document is bound to, or null
11203
+ required:
11204
+ - success
11205
+ - surfaceId
11206
+ - conversationId
11207
+ - title
11208
+ - content
11209
+ - wordCount
11210
+ - createdAt
11211
+ - updatedAt
11212
+ - workspacePath
11213
+ additionalProperties: false
11214
+ "422":
11215
+ description: Path is not a markdown file
11094
11216
  /v1/domain/register:
11095
11217
  post:
11096
11218
  operationId: domain_register_post
@@ -14517,7 +14639,9 @@ paths:
14517
14639
  "404":
14518
14640
  description: Profile not found
14519
14641
  "409":
14520
- description: Profile is still referenced by activeProfile, advisorProfile, a call site, or a mix arm
14642
+ description:
14643
+ Profile is still referenced by activeProfile, advisorProfile, a call site, a default-tier override, or a
14644
+ mix arm
14521
14645
  get:
14522
14646
  operationId: inference_profiles_by_name_get
14523
14647
  summary: Get an effective inference profile
@@ -14633,8 +14757,9 @@ paths:
14633
14757
  summary: Create a provider connection
14634
14758
  description:
14635
14759
  Create a new named provider connection. When auth is omitted it is derived from the provider (keyless
14636
- providers get none, vellum gets platform, everything else needs credential for api_key auth). Fails with 409 if
14637
- a connection with this name already exists.
14760
+ providers get none, vellum gets platform, everything else needs credential for api_key auth). An explicit auth
14761
+ object must agree with the provider; platform auth belongs to vellum and only to vellum. Fails with 409 if a
14762
+ connection with this name already exists.
14638
14763
  tags:
14639
14764
  - inference
14640
14765
  requestBody:
@@ -14743,8 +14868,9 @@ paths:
14743
14868
  summary: Update a provider connection
14744
14869
  description:
14745
14870
  Update an existing connection. Cannot rename or change the provider. Omitting auth keeps the stored auth;
14746
- passing credential alone rotates the key via provider-derived api_key auth. For the Vellum-managed connection
14747
- (vellum) the auth is locked to platform; label remains editable.
14871
+ passing credential alone rotates the key via provider-derived api_key auth. An explicit auth object must agree
14872
+ with the connection's provider; platform auth belongs to vellum and only to vellum. For the Vellum-managed
14873
+ connection (vellum) the auth is locked to platform; label remains editable.
14748
14874
  tags:
14749
14875
  - inference
14750
14876
  parameters:
@@ -18930,6 +19056,76 @@ paths:
18930
19056
  - requestId
18931
19057
  - entries
18932
19058
  additionalProperties: false
19059
+ answeredQuestion:
19060
+ type: object
19061
+ properties:
19062
+ requestId:
19063
+ type: string
19064
+ questions:
19065
+ type: array
19066
+ items:
19067
+ type: object
19068
+ properties:
19069
+ id:
19070
+ type: string
19071
+ question:
19072
+ type: string
19073
+ description:
19074
+ type: string
19075
+ options:
19076
+ type: array
19077
+ items:
19078
+ type: object
19079
+ properties:
19080
+ id:
19081
+ type: string
19082
+ label:
19083
+ type: string
19084
+ description:
19085
+ type: string
19086
+ required:
19087
+ - id
19088
+ - label
19089
+ additionalProperties: false
19090
+ freeTextPlaceholder:
19091
+ type: string
19092
+ required:
19093
+ - id
19094
+ - question
19095
+ - options
19096
+ additionalProperties: false
19097
+ responses:
19098
+ type: array
19099
+ items:
19100
+ type: object
19101
+ properties:
19102
+ questionId:
19103
+ type: string
19104
+ decision:
19105
+ type: string
19106
+ enum:
19107
+ - option
19108
+ - free_text
19109
+ - skipped
19110
+ optionId:
19111
+ type: string
19112
+ text:
19113
+ type: string
19114
+ required:
19115
+ - questionId
19116
+ - decision
19117
+ additionalProperties: false
19118
+ overall:
19119
+ type: string
19120
+ enum:
19121
+ - completed
19122
+ - closed
19123
+ required:
19124
+ - requestId
19125
+ - questions
19126
+ - responses
19127
+ - overall
19128
+ additionalProperties: false
18933
19129
  required:
18934
19130
  - name
18935
19131
  - input
@@ -19369,6 +19565,76 @@ paths:
19369
19565
  - requestId
19370
19566
  - entries
19371
19567
  additionalProperties: false
19568
+ answeredQuestion:
19569
+ type: object
19570
+ properties:
19571
+ requestId:
19572
+ type: string
19573
+ questions:
19574
+ type: array
19575
+ items:
19576
+ type: object
19577
+ properties:
19578
+ id:
19579
+ type: string
19580
+ question:
19581
+ type: string
19582
+ description:
19583
+ type: string
19584
+ options:
19585
+ type: array
19586
+ items:
19587
+ type: object
19588
+ properties:
19589
+ id:
19590
+ type: string
19591
+ label:
19592
+ type: string
19593
+ description:
19594
+ type: string
19595
+ required:
19596
+ - id
19597
+ - label
19598
+ additionalProperties: false
19599
+ freeTextPlaceholder:
19600
+ type: string
19601
+ required:
19602
+ - id
19603
+ - question
19604
+ - options
19605
+ additionalProperties: false
19606
+ responses:
19607
+ type: array
19608
+ items:
19609
+ type: object
19610
+ properties:
19611
+ questionId:
19612
+ type: string
19613
+ decision:
19614
+ type: string
19615
+ enum:
19616
+ - option
19617
+ - free_text
19618
+ - skipped
19619
+ optionId:
19620
+ type: string
19621
+ text:
19622
+ type: string
19623
+ required:
19624
+ - questionId
19625
+ - decision
19626
+ additionalProperties: false
19627
+ overall:
19628
+ type: string
19629
+ enum:
19630
+ - completed
19631
+ - closed
19632
+ required:
19633
+ - requestId
19634
+ - questions
19635
+ - responses
19636
+ - overall
19637
+ additionalProperties: false
19372
19638
  required:
19373
19639
  - name
19374
19640
  - input
@@ -19543,6 +19809,14 @@ paths:
19543
19809
  additionalProperties: false
19544
19810
  systemCard:
19545
19811
  type: boolean
19812
+ providerError:
19813
+ type: object
19814
+ properties:
19815
+ code:
19816
+ type: string
19817
+ category:
19818
+ type: string
19819
+ additionalProperties: false
19546
19820
  slackMessage:
19547
19821
  type: object
19548
19822
  properties:
@@ -19709,6 +19983,13 @@ paths:
19709
19983
  Client OS surface ("web" | "ios" | "macos" | "android"), reported separately from `interface`. Drives the
19710
19984
  per-turn `client_os` context only; does not affect transport/host-proxy capabilities.
19711
19985
  type: string
19986
+ visibleAppId:
19987
+ description:
19988
+ 'Id of the app the client currently has open on screen (app viewer or the app-editing split). Drives the
19989
+ per-turn `visible_app:` context line so the assistant can resolve "the app" to what the user is
19990
+ looking at. View state only: it never affects transport, routing, or tool gating, and is omitted
19991
+ whenever no app is in view.'
19992
+ type: string
19712
19993
  clientMessageId:
19713
19994
  type: string
19714
19995
  description:
@@ -19752,6 +20033,16 @@ paths:
19752
20033
  snapshots, emits no echo, and does not supersede pending interactions. Honored on the standard send
19753
20034
  path only — slash-command content bypasses it."
19754
20035
  type: boolean
20036
+ scripted:
20037
+ description:
20038
+ "When true, this turn was auto-sent on the user's behalf rather than typed by them: onboarding research
20039
+ prompts, the personality rewrite message, research corrections, hidden kickoff greetings, the legacy
20040
+ pre-chat bootstrap. Stamped onto the persisted message and forwarded to turn telemetry, where
20041
+ activation metrics exclude it. Send false for a genuine typed message; OMIT the field only if the
20042
+ client genuinely cannot tell, since absent means UNKNOWN and a wrong false is trusted downstream.
20043
+ Independent of `hidden`: a turn can be visible and scripted (the research prompt) or hidden and
20044
+ scripted (the kickoff greeting)."
20045
+ type: boolean
19755
20046
  onboarding:
19756
20047
  type: object
19757
20048
  properties:
@@ -21372,6 +21663,7 @@ paths:
21372
21663
  minLength: 1
21373
21664
  description: Feed item id (notif:<uuid>) or bare uuid
21374
21665
  title:
21666
+ description: New title. An empty value is ignored, never cleared.
21375
21667
  type: string
21376
21668
  body:
21377
21669
  type: string
@@ -22765,6 +23057,145 @@ paths:
22765
23057
  - disconnected
22766
23058
  - previousBaseUrl
22767
23059
  additionalProperties: false
23060
+ /v1/platform/invoices:
23061
+ get:
23062
+ operationId: platform_invoices_get
23063
+ summary: List one page of the organization's Stripe invoices
23064
+ description:
23065
+ Fetches one page of the org's Stripe invoice history (newest first) from the platform billing invoices
23066
+ endpoint. Amounts are in the currency's minor units. When has_more is true, pass the last invoice's id as
23067
+ starting_after to fetch the next page.
23068
+ tags:
23069
+ - platform
23070
+ parameters:
23071
+ - name: starting_after
23072
+ in: query
23073
+ required: false
23074
+ schema:
23075
+ type: string
23076
+ description: "Cursor: return invoices older than the invoice with this id (from the previous page's last entry)."
23077
+ responses:
23078
+ "200":
23079
+ description: Successful response
23080
+ content:
23081
+ application/json:
23082
+ schema:
23083
+ type: object
23084
+ properties:
23085
+ invoices:
23086
+ type: array
23087
+ items:
23088
+ type: object
23089
+ properties:
23090
+ id:
23091
+ type: string
23092
+ number:
23093
+ anyOf:
23094
+ - type: string
23095
+ - type: "null"
23096
+ status:
23097
+ anyOf:
23098
+ - type: string
23099
+ - type: "null"
23100
+ currency:
23101
+ type: string
23102
+ amount_due:
23103
+ type: number
23104
+ amount_paid:
23105
+ type: number
23106
+ amount_remaining:
23107
+ type: number
23108
+ created:
23109
+ type: number
23110
+ hosted_invoice_url:
23111
+ anyOf:
23112
+ - type: string
23113
+ - type: "null"
23114
+ invoice_pdf:
23115
+ anyOf:
23116
+ - type: string
23117
+ - type: "null"
23118
+ required:
23119
+ - id
23120
+ - number
23121
+ - status
23122
+ - currency
23123
+ - amount_due
23124
+ - amount_paid
23125
+ - amount_remaining
23126
+ - created
23127
+ - hosted_invoice_url
23128
+ - invoice_pdf
23129
+ additionalProperties: false
23130
+ has_more:
23131
+ type: boolean
23132
+ required:
23133
+ - invoices
23134
+ - has_more
23135
+ additionalProperties: false
23136
+ /v1/platform/invoices/{id}:
23137
+ get:
23138
+ operationId: platform_invoices_by_id_get
23139
+ summary: Get a single Stripe invoice by ID
23140
+ description:
23141
+ Pages through the org's invoice list from the platform and returns the invoice matching the given Stripe
23142
+ invoice ID (e.g. in_xxx). 404 if no such invoice.
23143
+ tags:
23144
+ - platform
23145
+ parameters:
23146
+ - name: id
23147
+ in: path
23148
+ required: true
23149
+ schema:
23150
+ type: string
23151
+ responses:
23152
+ "200":
23153
+ description: Successful response
23154
+ content:
23155
+ application/json:
23156
+ schema:
23157
+ type: object
23158
+ properties:
23159
+ id:
23160
+ type: string
23161
+ number:
23162
+ anyOf:
23163
+ - type: string
23164
+ - type: "null"
23165
+ status:
23166
+ anyOf:
23167
+ - type: string
23168
+ - type: "null"
23169
+ currency:
23170
+ type: string
23171
+ amount_due:
23172
+ type: number
23173
+ amount_paid:
23174
+ type: number
23175
+ amount_remaining:
23176
+ type: number
23177
+ created:
23178
+ type: number
23179
+ hosted_invoice_url:
23180
+ anyOf:
23181
+ - type: string
23182
+ - type: "null"
23183
+ invoice_pdf:
23184
+ anyOf:
23185
+ - type: string
23186
+ - type: "null"
23187
+ required:
23188
+ - id
23189
+ - number
23190
+ - status
23191
+ - currency
23192
+ - amount_due
23193
+ - amount_paid
23194
+ - amount_remaining
23195
+ - created
23196
+ - hosted_invoice_url
23197
+ - invoice_pdf
23198
+ additionalProperties: false
22768
23199
  /v1/platform/plans:
22769
23200
  get:
22770
23201
  operationId: platform_plans_get
@@ -26999,10 +27430,13 @@ paths:
26999
27430
  type: string
27000
27431
  name:
27001
27432
  type: string
27433
+ error:
27434
+ description:
27435
+ Why the secret was not stored (e.g. provider-side API key validation failed). Present only when success is
27436
+ false.
27437
+ type: string
27002
27438
  required:
27003
27439
  - success
27004
- - type
27005
- - name
27006
27440
  additionalProperties: false
27007
27441
  /v1/secrets/read:
27008
27442
  post:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vellumai/assistant",
3
- "version": "0.11.1",
3
+ "version": "0.11.2-dev.202608042257.9e99b1d",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "exports": {
@@ -115,9 +115,9 @@ describe("upscaleTargetDimensions", () => {
115
115
  });
116
116
 
117
117
  describe("upscaleImageToMinimum", () => {
118
- it("returns null when dimensions are unparseable", () => {
118
+ it("returns null when dimensions are unparseable", async () => {
119
119
  expect(
120
- upscaleImageToMinimum(
120
+ await upscaleImageToMinimum(
121
121
  Buffer.from("not an image").toString("base64"),
122
122
  "image/png",
123
123
  ),
@@ -126,12 +126,12 @@ describe("upscaleImageToMinimum", () => {
126
126
  });
127
127
 
128
128
  describe("optimizeImageForTransport", () => {
129
- it("passes an undersized image through unchanged — the minimum floor is rejection-path only", () => {
129
+ it("passes an undersized image through unchanged: the minimum floor is rejection-path only", async () => {
130
130
  // The floor is undocumented provider behavior, so pre-send transport
131
131
  // never enforces it; only the image-recovery plugin reacts to an actual
132
132
  // "Could not process image" rejection.
133
133
  const tiny = makePngBase64(16, 14);
134
- expect(optimizeImageForTransport(tiny, "image/png")).toEqual({
134
+ expect(await optimizeImageForTransport(tiny, "image/png")).toEqual({
135
135
  data: tiny,
136
136
  mediaType: "image/png",
137
137
  });