@vellumai/assistant 0.11.7 → 0.11.8-staging.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 (446) hide show
  1. package/ARCHITECTURE.md +10 -10
  2. package/Dockerfile +1 -0
  3. package/docs/architecture/security.md +1 -1
  4. package/docs/error-handling.md +1 -2
  5. package/docs/guardian-request-flow.md +51 -5
  6. package/docs/trusted-contact-access.md +13 -12
  7. package/knip.json +1 -0
  8. package/node_modules/@vellumai/avatar-catalog/package.json +19 -0
  9. package/{src/avatar/character-components.ts → node_modules/@vellumai/avatar-catalog/src/catalog.ts} +12 -44
  10. package/node_modules/@vellumai/avatar-catalog/src/colors.ts +19 -0
  11. package/node_modules/@vellumai/avatar-catalog/src/index.ts +25 -0
  12. package/node_modules/@vellumai/avatar-catalog/src/types.ts +47 -0
  13. package/node_modules/@vellumai/avatar-catalog/tsconfig.json +20 -0
  14. package/node_modules/@vellumai/ces-client/node_modules/@vellumai/service-contracts/package.json +1 -0
  15. package/node_modules/@vellumai/ces-client/node_modules/@vellumai/service-contracts/src/channels.ts +7 -0
  16. package/node_modules/@vellumai/ces-client/node_modules/@vellumai/service-contracts/src/index.ts +1 -0
  17. package/node_modules/@vellumai/ces-client/node_modules/@vellumai/service-contracts/src/no-response.ts +84 -0
  18. package/node_modules/@vellumai/credential-storage/src/static-credentials.ts +43 -12
  19. package/node_modules/@vellumai/environments/package.json +2 -1
  20. package/node_modules/@vellumai/environments/src/__tests__/test-path-guard.test.ts +89 -0
  21. package/node_modules/@vellumai/environments/src/test-path-guard.ts +113 -0
  22. package/node_modules/@vellumai/gateway-client/node_modules/@vellumai/service-contracts/package.json +1 -0
  23. package/node_modules/@vellumai/gateway-client/node_modules/@vellumai/service-contracts/src/channels.ts +7 -0
  24. package/node_modules/@vellumai/gateway-client/node_modules/@vellumai/service-contracts/src/index.ts +1 -0
  25. package/node_modules/@vellumai/gateway-client/node_modules/@vellumai/service-contracts/src/no-response.ts +84 -0
  26. package/node_modules/@vellumai/gateway-client/src/__tests__/guardian-request-contract.test.ts +8 -18
  27. package/node_modules/@vellumai/gateway-client/src/__tests__/inbound-event-kind.test.ts +46 -0
  28. package/node_modules/@vellumai/gateway-client/src/__tests__/invite-contract.test.ts +1 -0
  29. package/node_modules/@vellumai/gateway-client/src/gateway-ipc-contracts.ts +46 -0
  30. package/node_modules/@vellumai/gateway-client/src/guardian-request-contract.ts +62 -21
  31. package/node_modules/@vellumai/gateway-client/src/inbound-contract.ts +14 -0
  32. package/node_modules/@vellumai/gateway-client/src/inbound-event-kind.ts +53 -0
  33. package/node_modules/@vellumai/gateway-client/src/index.ts +11 -5
  34. package/node_modules/@vellumai/gateway-client/src/invite-contract.ts +1 -0
  35. package/node_modules/@vellumai/service-contracts/package.json +1 -0
  36. package/node_modules/@vellumai/service-contracts/src/channels.ts +7 -0
  37. package/node_modules/@vellumai/service-contracts/src/index.ts +1 -0
  38. package/node_modules/@vellumai/service-contracts/src/no-response.ts +84 -0
  39. package/openapi.yaml +481 -9
  40. package/package.json +3 -1
  41. package/scripts/sync-llm-catalog.ts +3 -0
  42. package/src/__tests__/agent-loop-callsite-precedence.test.ts +16 -0
  43. package/src/__tests__/agent-loop-compacted-history-transform.test.ts +304 -0
  44. package/src/__tests__/agent-wake-disk-pressure-callsite.test.ts +3 -0
  45. package/src/__tests__/agent-wake-override-profile.test.ts +3 -0
  46. package/src/__tests__/anthropic-provider.test.ts +56 -0
  47. package/src/__tests__/approval-cascade.test.ts +0 -13
  48. package/src/__tests__/attachments-store.test.ts +117 -6
  49. package/src/__tests__/attachments.test.ts +122 -0
  50. package/src/__tests__/bundled-asset.test.ts +22 -1
  51. package/src/__tests__/channel-approval.test.ts +14 -7
  52. package/src/__tests__/channel-approvals.test.ts +3 -3
  53. package/src/__tests__/channel-delivery-store.test.ts +58 -0
  54. package/src/__tests__/channel-inbound-disk-pressure.test.ts +1 -0
  55. package/src/__tests__/channel-invite-transport.test.ts +1 -0
  56. package/src/__tests__/channel-readiness-slack-remote.test.ts +3 -3
  57. package/src/__tests__/compaction-events.test.ts +0 -12
  58. package/src/__tests__/compactor-call-site-logging.test.ts +7 -1
  59. package/src/__tests__/compactor-retained-image-validation.test.ts +15 -0
  60. package/src/__tests__/config-schema.test.ts +35 -0
  61. package/src/__tests__/contacts-write.test.ts +141 -3
  62. package/src/__tests__/conversation-abort-tool-results.test.ts +0 -13
  63. package/src/__tests__/conversation-agent-loop-inference-profile.test.ts +0 -12
  64. package/src/__tests__/conversation-agent-loop-overflow.test.ts +0 -13
  65. package/src/__tests__/conversation-agent-loop.test.ts +95 -13
  66. package/src/__tests__/conversation-confirmation-signals.test.ts +0 -13
  67. package/src/__tests__/conversation-load-history-repair.test.ts +418 -0
  68. package/src/__tests__/conversation-media-retry.test.ts +33 -2
  69. package/src/__tests__/conversation-pairing.test.ts +54 -0
  70. package/src/__tests__/conversation-process-callsite.test.ts +0 -12
  71. package/src/__tests__/conversation-provider-retry-repair.test.ts +0 -13
  72. package/src/__tests__/conversation-queue.test.ts +4 -13
  73. package/src/__tests__/conversation-retry-route.test.ts +5 -0
  74. package/src/__tests__/conversation-routes-disk-view.test.ts +1 -1
  75. package/src/__tests__/conversation-routes-enabled-plugins.test.ts +1 -1
  76. package/src/__tests__/conversation-routes-hidden-queue.test.ts +1 -1
  77. package/src/__tests__/conversation-routes-slash-commands.test.ts +1 -1
  78. package/src/__tests__/conversation-sight-frames.test.ts +615 -0
  79. package/src/__tests__/conversation-slash-queue.test.ts +0 -13
  80. package/src/__tests__/conversation-slash-unknown.test.ts +0 -13
  81. package/src/__tests__/conversation-speed-override.test.ts +0 -12
  82. package/src/__tests__/conversation-store-ephemeral.test.ts +0 -12
  83. package/src/__tests__/conversation-summarize-route.test.ts +5 -0
  84. package/src/__tests__/conversation-summarize-up-to.test.ts +102 -0
  85. package/src/__tests__/conversation-wait-for-idle.test.ts +0 -12
  86. package/src/__tests__/conversation-workspace-cache-state.test.ts +0 -5
  87. package/src/__tests__/conversation-workspace-injection.test.ts +0 -17
  88. package/src/__tests__/conversation-workspace-tool-tracking.test.ts +0 -17
  89. package/src/__tests__/credential-health-service.test.ts +45 -0
  90. package/src/__tests__/credential-record-retire.test.ts +256 -0
  91. package/src/__tests__/credential-record-write-through.test.ts +8 -4
  92. package/src/__tests__/db-conversation-fork-lineage-migration.test.ts +0 -4
  93. package/src/__tests__/db-conversation-inference-profile-migration.test.ts +0 -4
  94. package/src/__tests__/db-llm-request-log-provider-migration.test.ts +0 -8
  95. package/src/__tests__/delete-propagation.test.ts +121 -3
  96. package/src/__tests__/evict-conversations-for-reload.test.ts +46 -6
  97. package/src/__tests__/file-ops-service.test.ts +8 -3
  98. package/src/__tests__/gemini-provider.test.ts +64 -0
  99. package/src/__tests__/guardian-action-service-scope.test.ts +118 -0
  100. package/src/__tests__/guardian-card-withdrawal.test.ts +299 -5
  101. package/src/__tests__/guardian-expiry-notifier.test.ts +117 -13
  102. package/src/__tests__/guardian-gateway-sim.test.ts +119 -0
  103. package/src/__tests__/guardian-gateway-sim.ts +56 -20
  104. package/src/__tests__/guardian-reply-router-answer-mode.test.ts +6 -0
  105. package/src/__tests__/guardian-request-status-sync.test.ts +162 -0
  106. package/src/__tests__/guardian-wait-controller.test.ts +6 -0
  107. package/src/__tests__/headless-browser-mode.test.ts +27 -0
  108. package/src/__tests__/helpers/mock-conversation.ts +2 -0
  109. package/src/__tests__/list-messages-system-card.test.ts +70 -0
  110. package/src/__tests__/llm-catalog-parity.test.ts +2 -0
  111. package/src/__tests__/managed-profile-guard.test.ts +2 -2
  112. package/src/__tests__/media-resolve-image-validation.test.ts +106 -0
  113. package/src/__tests__/media-stream-server-integration.test.ts +6 -0
  114. package/src/__tests__/non-member-access-request.test.ts +12 -0
  115. package/src/__tests__/notification-discord-adapter.test.ts +76 -4
  116. package/src/__tests__/oauth-commands-routes.test.ts +21 -0
  117. package/src/__tests__/openai-provider.test.ts +63 -0
  118. package/src/__tests__/outbound-slack-persistence.test.ts +114 -2
  119. package/src/__tests__/persist-unsendable-image-downscale.test.ts +63 -1
  120. package/src/__tests__/persist-unsendable-image.test.ts +19 -0
  121. package/src/__tests__/plugin-app-serve-routes.test.ts +2 -2
  122. package/src/__tests__/plugin-import-boundary-guard.test.ts +1 -0
  123. package/src/__tests__/process-message-background-slack.test.ts +1 -1
  124. package/src/__tests__/process-message-display-content.test.ts +1 -1
  125. package/src/__tests__/processing-flag-persist-failure.test.ts +0 -5
  126. package/src/__tests__/prompt-cache-cross-turn-stability.test.ts +0 -17
  127. package/src/__tests__/qdrant-manager.test.ts +6 -0
  128. package/src/__tests__/reaction-persistence.test.ts +58 -62
  129. package/src/__tests__/retry-thinking-adaptive-only.test.ts +67 -0
  130. package/src/__tests__/server-history-render.test.ts +22 -0
  131. package/src/__tests__/sight-frame-retention.test.ts +362 -0
  132. package/src/__tests__/slack-reaction-approvals.test.ts +44 -24
  133. package/src/__tests__/slack-reaction-guardian-approval.test.ts +29 -1
  134. package/src/__tests__/subagent-fork-notifications.test.ts +2 -0
  135. package/src/__tests__/subagent-manager-notify.test.ts +2 -0
  136. package/src/__tests__/subagent-notify-parent.test.ts +2 -0
  137. package/src/__tests__/subagent-notify-stale-rebuild.test.ts +85 -0
  138. package/src/__tests__/subagent-tool-gate-mode.test.ts +4 -4
  139. package/src/__tests__/terminal-tools.test.ts +9 -9
  140. package/src/__tests__/tool-result-spool.test.ts +5 -8
  141. package/src/__tests__/usage-attribution.test.ts +26 -0
  142. package/src/acp/__tests__/acp-auth-marker-store.test.ts +191 -0
  143. package/src/acp/__tests__/acp-claude-oauth.test.ts +262 -0
  144. package/src/acp/__tests__/acp-connect-card-state.test.ts +17 -0
  145. package/src/acp/__tests__/helpers/acp-history-db.ts +10 -3
  146. package/src/acp/acp-auth-marker-store.ts +196 -0
  147. package/src/acp/acp-claude-oauth.ts +154 -4
  148. package/src/acp/acp-connect-card-state.ts +49 -8
  149. package/src/acp/agent-process.ts +1 -0
  150. package/src/acp/auto-install.ts +1 -0
  151. package/src/acp/client-handler.ts +1 -0
  152. package/src/acp/prepare-agent-env.ts +79 -1
  153. package/src/acp/resolve-agent.ts +12 -0
  154. package/src/acp/session-manager.test.ts +183 -0
  155. package/src/acp/session-manager.ts +110 -6
  156. package/src/acp/types.ts +17 -0
  157. package/src/agent/attachments.ts +7 -2
  158. package/src/agent/loop.ts +59 -1
  159. package/src/api/events/contact-form-closed.ts +32 -0
  160. package/src/api/events/contact-record-request.ts +63 -0
  161. package/src/api/events/contact-request.ts +10 -3
  162. package/src/api/index.ts +20 -0
  163. package/src/api/responses/conversation-message.ts +20 -0
  164. package/src/api/responses/home.ts +101 -0
  165. package/src/approvals/AGENTS.md +1 -1
  166. package/src/approvals/guardian-card-withdrawal.ts +127 -30
  167. package/src/approvals/guardian-decision-primitive.ts +9 -0
  168. package/src/approvals/guardian-expiry-notifier.ts +22 -16
  169. package/src/approvals/guardian-request-status-sync.ts +98 -0
  170. package/src/avatar/svg-compositor.ts +1 -1
  171. package/src/avatar/traits-png-sync.ts +1 -1
  172. package/src/bundler/app-compiler.ts +1 -0
  173. package/src/bundler/compiler-tools.ts +1 -0
  174. package/src/bundler/package-resolver.ts +1 -0
  175. package/src/calls/__tests__/voice-session-bridge.test.ts +183 -3
  176. package/src/calls/guardian-action-sweep.ts +6 -1
  177. package/src/calls/voice-session-bridge.ts +46 -1
  178. package/src/channels/__tests__/gateway-guardian-requests.test.ts +13 -18
  179. package/src/channels/gateway-guardian-requests.ts +37 -18
  180. package/src/cli/__tests__/contacts-record-prompt-cli.test.ts +329 -0
  181. package/src/cli/commands/__tests__/browser.test.ts +65 -1
  182. package/src/cli/commands/browser.ts +30 -10
  183. package/src/cli/commands/contacts.help.ts +173 -11
  184. package/src/cli/commands/contacts.ts +343 -4
  185. package/src/cli/commands/db/refresh.ts +1 -0
  186. package/src/cli/commands/oauth/index.help.ts +6 -3
  187. package/src/cli/commands/oauth/request.test.ts +37 -0
  188. package/src/cli/commands/oauth/request.ts +7 -6
  189. package/src/cli/lib/bundled-marketplace.json +1 -1
  190. package/src/cli/lib/install-from-github.ts +20 -19
  191. package/src/cli/lib/install-plugin-dependencies.ts +3 -5
  192. package/src/cli/lib/merge-plugin-tree.ts +1 -0
  193. package/src/cli/lib/publish-plugin.ts +4 -1
  194. package/src/config/__tests__/balanced-model-experiment.test.ts +63 -31
  195. package/src/config/__tests__/default-profile-catalog.test.ts +2 -2
  196. package/src/config/balanced-model-experiment.ts +15 -9
  197. package/src/config/bundled-skills/contacts/SKILL.md +61 -18
  198. package/src/config/default-profile-catalog.ts +12 -11
  199. package/src/config/feature-flag-registry.json +22 -13
  200. package/src/config/schema.ts +2 -0
  201. package/src/config/schemas/__tests__/live-voice.test.ts +13 -0
  202. package/src/config/schemas/live-voice.ts +7 -0
  203. package/src/config/schemas/sight.ts +45 -0
  204. package/src/config/skills.ts +2 -1
  205. package/src/contacts/__tests__/mirror-reconciler.test.ts +352 -0
  206. package/src/contacts/contact-store.ts +47 -4
  207. package/src/contacts/contacts-write.ts +5 -2
  208. package/src/contacts/mirror-reconciler.ts +210 -0
  209. package/src/contacts/mirror-tombstones.ts +42 -0
  210. package/src/contacts/notify-contacts-changed.ts +11 -2
  211. package/src/context/compactor.ts +47 -19
  212. package/src/context/tool-result-spool.ts +21 -14
  213. package/src/conversations/message-consolidation.ts +2 -2
  214. package/src/credential-health/credential-health-service.ts +37 -6
  215. package/src/daemon/conversation-agent-loop-handlers.ts +19 -2
  216. package/src/daemon/conversation-agent-loop.ts +100 -1
  217. package/src/daemon/conversation-media-retry.ts +11 -6
  218. package/src/daemon/conversation-messaging.ts +293 -30
  219. package/src/daemon/conversation-runtime-assembly.ts +67 -0
  220. package/src/daemon/conversation-sight-frames.ts +187 -0
  221. package/src/daemon/conversation-store.ts +18 -28
  222. package/src/daemon/conversation-surfaces.ts +12 -2
  223. package/src/daemon/conversation-tool-setup.ts +39 -10
  224. package/src/daemon/conversation.ts +159 -16
  225. package/src/daemon/daemon-control.ts +6 -17
  226. package/src/daemon/handlers/config-model.test.ts +1 -0
  227. package/src/daemon/handlers/conversations.ts +10 -11
  228. package/src/daemon/install-assistant-command.ts +1 -0
  229. package/src/daemon/lifecycle.ts +10 -13
  230. package/src/daemon/message-types/sync.ts +4 -0
  231. package/src/daemon/process-message.ts +2 -17
  232. package/src/daemon/reaction-history-render.test.ts +162 -0
  233. package/src/daemon/reaction-history-render.ts +115 -0
  234. package/src/daemon/reaction-record.test.ts +162 -0
  235. package/src/daemon/reaction-record.ts +83 -0
  236. package/src/daemon/shutdown-handlers.ts +0 -2
  237. package/src/daemon/summarize-boundary.ts +12 -0
  238. package/src/daemon/video-thumbnail.ts +1 -1
  239. package/src/home/feed-types.ts +4 -0
  240. package/src/home/feed-writer.ts +25 -0
  241. package/src/live-voice/__tests__/live-voice-attach-frame.test.ts +679 -0
  242. package/src/live-voice/__tests__/live-voice-attach-image.test.ts +8 -5
  243. package/src/live-voice/__tests__/live-voice-photo.test.ts +637 -1
  244. package/src/live-voice/__tests__/live-voice-sight-frame-inline.test.ts +787 -0
  245. package/src/live-voice/__tests__/live-voice-sight-frame.test.ts +347 -0
  246. package/src/live-voice/__tests__/live-voice-vad.test.ts +109 -0
  247. package/src/live-voice/live-voice-photo.ts +420 -65
  248. package/src/live-voice/live-voice-session.ts +311 -27
  249. package/src/live-voice/protocol.ts +147 -11
  250. package/src/messaging/provider-message-metadata.ts +7 -0
  251. package/src/messaging/providers/__tests__/transport-dispatch.test.ts +113 -1
  252. package/src/messaging/providers/channel-transport.ts +37 -0
  253. package/src/messaging/providers/discord/api.ts +4 -4
  254. package/src/messaging/providers/discord/send.test.ts +177 -2
  255. package/src/messaging/providers/discord/send.ts +197 -10
  256. package/src/messaging/providers/discord/transport.ts +10 -0
  257. package/src/messaging/providers/index.ts +42 -0
  258. package/src/messaging/providers/slack/__tests__/adapter-mention-rendering.test.ts +129 -3
  259. package/src/messaging/providers/slack/__tests__/auth.test.ts +35 -0
  260. package/src/messaging/providers/slack/__tests__/message-content.test.ts +152 -0
  261. package/src/messaging/providers/slack/adapter.ts +112 -27
  262. package/src/messaging/providers/slack/api.test.ts +10 -0
  263. package/src/messaging/providers/slack/auth.ts +32 -6
  264. package/src/messaging/providers/slack/client.ts +0 -15
  265. package/src/messaging/providers/slack/message-content.ts +137 -0
  266. package/src/messaging/providers/slack/send.test.ts +43 -2
  267. package/src/messaging/providers/slack/send.ts +18 -5
  268. package/src/messaging/providers/slack/transport.ts +10 -0
  269. package/src/messaging/providers/slack/types.ts +21 -2
  270. package/src/messaging/providers/telegram-bot/adapter.ts +5 -1
  271. package/src/messaging/providers/telegram-bot/send.test.ts +49 -2
  272. package/src/messaging/providers/telegram-bot/send.ts +41 -1
  273. package/src/messaging/providers/telegram-bot/transport.ts +10 -0
  274. package/src/messaging/providers/telegram-bot/withdraw.ts +13 -5
  275. package/src/messaging/reaction-envelopes.ts +79 -0
  276. package/src/monitoring/control.ts +2 -2
  277. package/src/monitoring/page-cache.ts +5 -1
  278. package/src/notifications/AGENTS.md +1 -1
  279. package/src/notifications/__tests__/guardian-feed-projection.test.ts +360 -0
  280. package/src/notifications/__tests__/home-feed-side-effect.test.ts +8 -0
  281. package/src/notifications/adapters/discord.ts +62 -9
  282. package/src/notifications/conversation-pairing.ts +31 -4
  283. package/src/notifications/emit-signal.ts +8 -5
  284. package/src/notifications/guardian-delivery-recorder.ts +47 -6
  285. package/src/notifications/guardian-feed-projection.ts +492 -0
  286. package/src/notifications/home-feed-side-effect.ts +59 -11
  287. package/src/oauth/byo-connection.test.ts +22 -0
  288. package/src/oauth/byo-connection.ts +11 -5
  289. package/src/oauth/connection.ts +3 -2
  290. package/src/oauth/platform-connection.test.ts +35 -0
  291. package/src/oauth/platform-connection.ts +18 -13
  292. package/src/oauth/scope-utils.ts +48 -0
  293. package/src/oauth/seed-providers.ts +12 -0
  294. package/src/outbound-proxy/certs.ts +5 -4
  295. package/src/permissions/question-guardian-request.test.ts +7 -1
  296. package/src/persistence/attachments-store.ts +134 -31
  297. package/src/persistence/conversation-crud.ts +137 -4
  298. package/src/persistence/conversation-types.ts +109 -0
  299. package/src/persistence/db-connection.ts +3 -21
  300. package/src/persistence/delivery-crud.ts +42 -12
  301. package/src/persistence/embeddings/__tests__/embedding-local-lifecycle.test.ts +15 -2
  302. package/src/persistence/embeddings/embedding-local.ts +7 -112
  303. package/src/persistence/embeddings/qdrant-manager.ts +4 -1
  304. package/src/persistence/llm-request-log-store.ts +1 -1
  305. package/src/persistence/migrations/370-acp-session-history-auth-error-code.ts +36 -0
  306. package/src/persistence/migrations/371-acp-session-history-auth-error-credential.ts +40 -0
  307. package/src/persistence/migrations/372-create-acp-refused-credentials.ts +34 -0
  308. package/src/persistence/migrations/373-acp-auth-marker-index.ts +27 -0
  309. package/src/persistence/migrations/__tests__/370-acp-session-history-auth-error-code.test.ts +65 -0
  310. package/src/persistence/migrations/__tests__/371-acp-session-history-auth-error-credential.test.ts +68 -0
  311. package/src/persistence/migrations/__tests__/372-create-acp-refused-credentials.test.ts +64 -0
  312. package/src/persistence/migrations/__tests__/373-acp-auth-marker-index.test.ts +82 -0
  313. package/src/persistence/schema/acp.ts +25 -0
  314. package/src/persistence/steps.ts +8 -0
  315. package/src/platform/platform-patch-queue.test.ts +43 -41
  316. package/src/plugin-api/index.ts +12 -0
  317. package/src/plugins/defaults/compaction/window-manager.ts +2 -0
  318. package/src/plugins/defaults/image-recovery/recover.ts +12 -1
  319. package/src/plugins/defaults/memory/__tests__/memory-retrospective-accounting.test.ts +166 -1
  320. package/src/plugins/defaults/memory/__tests__/memory-retrospective-provider-path.test.ts +3 -0
  321. package/src/plugins/defaults/memory/__tests__/memory-retrospective-wake-chain.test.ts +3 -0
  322. package/src/plugins/defaults/memory/jobs-worker.ts +1 -2
  323. package/src/plugins/defaults/memory/memory-retrospective-accounting.ts +53 -9
  324. package/src/plugins/defaults/memory/src/__tests__/memory-worker-routes.test.ts +4 -7
  325. package/src/plugins/defaults/memory/src/memory-worker-routes.ts +1 -1
  326. package/src/plugins/defaults/memory/v1/job-handlers/index-maintenance.ts +15 -1
  327. package/src/plugins/defaults/memory/worker-control.ts +1 -2
  328. package/src/providers/content-block-schema.ts +1 -0
  329. package/src/providers/fireworks/client.ts +9 -1
  330. package/src/providers/gemini/client.ts +22 -15
  331. package/src/providers/media-resolve.ts +24 -10
  332. package/src/providers/model-catalog.ts +91 -0
  333. package/src/providers/openai/chat-completions-provider.ts +44 -5
  334. package/src/providers/retry.ts +16 -11
  335. package/src/providers/types.ts +56 -0
  336. package/src/routes/__tests__/control.test.ts +4 -3
  337. package/src/routes/control.ts +1 -1
  338. package/src/routes/route-host-client.ts +1 -1
  339. package/src/runtime/AGENTS.md +30 -12
  340. package/src/runtime/__tests__/agent-wake.test.ts +71 -6
  341. package/src/runtime/__tests__/guardian-form-registry.test.ts +242 -0
  342. package/src/runtime/access-request-helper.ts +15 -7
  343. package/src/runtime/agent-wake.ts +16 -4
  344. package/src/runtime/channel-approval-types.ts +8 -5
  345. package/src/runtime/channel-invite-transport.ts +2 -0
  346. package/src/runtime/channel-invite-transports/discord.ts +27 -0
  347. package/src/runtime/channel-readiness-service.ts +4 -4
  348. package/src/runtime/channel-reply-delivery.ts +72 -28
  349. package/src/runtime/guardian-action-service.ts +9 -5
  350. package/src/runtime/guardian-form-registry.ts +256 -0
  351. package/src/runtime/guardian-reply-router.ts +33 -14
  352. package/src/runtime/invite-instruction-generator.ts +14 -2
  353. package/src/runtime/migrations/vbundle-metadata-merge.ts +4 -7
  354. package/src/runtime/no-response.ts +13 -74
  355. package/src/runtime/routes/__tests__/acp-routes.test.ts +527 -0
  356. package/src/runtime/routes/__tests__/app-management-shared-apps.test.ts +74 -0
  357. package/src/runtime/routes/__tests__/contact-form-kinds.test.ts +22 -0
  358. package/src/runtime/routes/__tests__/contact-record-prompt-route.test.ts +303 -0
  359. package/src/runtime/routes/__tests__/monitoring-routes.test.ts +3 -4
  360. package/src/runtime/routes/__tests__/pending-interactions-route.test.ts +6 -0
  361. package/src/runtime/routes/__tests__/route-host-worker-routes.test.ts +3 -4
  362. package/src/runtime/routes/__tests__/schedule-worker-routes.test.ts +5 -6
  363. package/src/runtime/routes/acp-routes-list.test.ts +58 -0
  364. package/src/runtime/routes/acp-routes.ts +253 -47
  365. package/src/runtime/routes/app-management-routes.ts +80 -47
  366. package/src/runtime/routes/approval-routes.ts +9 -0
  367. package/src/runtime/routes/archive-utils.ts +6 -1
  368. package/src/runtime/routes/avatar-routes.ts +1 -1
  369. package/src/runtime/routes/channel-route-shared.ts +18 -20
  370. package/src/runtime/routes/contact-prompt-routes.ts +271 -105
  371. package/src/runtime/routes/conversation-routes.ts +41 -32
  372. package/src/runtime/routes/credential-prompt-routes.ts +10 -1
  373. package/src/runtime/routes/debug-bash-routes.ts +1 -0
  374. package/src/runtime/routes/guardian-expiry-sweep.ts +89 -31
  375. package/src/runtime/routes/guardian-form-routes.ts +115 -0
  376. package/src/runtime/routes/inbound-message-handler.ts +82 -29
  377. package/src/runtime/routes/inbound-stages/acl-enforcement.ts +16 -3
  378. package/src/runtime/routes/inbound-stages/edit-intercept.ts +6 -0
  379. package/src/runtime/routes/inbound-stages/guardian-reply-intercept.test.ts +6 -0
  380. package/src/runtime/routes/inbound-stages/guardian-reply-intercept.ts +6 -1
  381. package/src/runtime/routes/inbound-stages/reaction-intercept.test.ts +50 -17
  382. package/src/runtime/routes/inbound-stages/reaction-intercept.ts +97 -94
  383. package/src/runtime/routes/index.ts +2 -0
  384. package/src/runtime/routes/integrations/slack/channel.ts +39 -18
  385. package/src/runtime/routes/migration-routes.ts +1 -3
  386. package/src/runtime/routes/monitoring-routes.ts +0 -3
  387. package/src/runtime/routes/oauth-commands-routes.ts +18 -5
  388. package/src/runtime/routes/route-host-worker-routes.ts +1 -1
  389. package/src/runtime/routes/schedule-worker-routes.ts +1 -1
  390. package/src/runtime/tool-grant-request-helper.ts +4 -0
  391. package/src/schedule/run-script.ts +1 -0
  392. package/src/schedule/scheduler.ts +1 -1
  393. package/src/schedule/worker-control.ts +2 -2
  394. package/src/security/oauth2.ts +2 -11
  395. package/src/security/secure-keys.ts +55 -8
  396. package/src/skills/catalog-install.ts +7 -4
  397. package/src/skills/clawhub.ts +1 -0
  398. package/src/skills/inline-command-runner.ts +1 -0
  399. package/src/stt/__tests__/room-noise-floor.test.ts +108 -0
  400. package/src/stt/room-noise-floor.ts +140 -0
  401. package/src/subagent/notify.ts +49 -3
  402. package/src/tools/__tests__/tool-input-schemas.test.ts +2 -0
  403. package/src/tools/acp/spawn.ts +2 -2
  404. package/src/tools/browser/__tests__/browser-status.test.ts +9 -0
  405. package/src/tools/browser/browser-execution.ts +10 -43
  406. package/src/tools/browser/browser-manager.ts +1 -0
  407. package/src/tools/browser/browser-status-constants.ts +6 -5
  408. package/src/tools/browser/runtime-check.ts +2 -0
  409. package/src/tools/channel/react-to-message.test.ts +193 -0
  410. package/src/tools/channel/react-to-message.ts +159 -0
  411. package/src/tools/credentials/metadata-store.ts +115 -19
  412. package/src/tools/credentials/store.ts +0 -2
  413. package/src/tools/filesystem/read.ts +2 -2
  414. package/src/tools/host-filesystem/read.ts +2 -2
  415. package/src/tools/host-terminal/host-shell.test.ts +24 -0
  416. package/src/tools/host-terminal/host-shell.ts +11 -38
  417. package/src/tools/shared/filesystem/file-ops-service.ts +10 -7
  418. package/src/tools/shared/shell-output.test.ts +104 -0
  419. package/src/tools/shared/shell-output.ts +112 -39
  420. package/src/tools/skills/sandbox-runner.ts +1 -0
  421. package/src/tools/system/request-permission.test.ts +34 -0
  422. package/src/tools/system/request-permission.ts +29 -5
  423. package/src/tools/terminal/shell.test.ts +63 -0
  424. package/src/tools/terminal/shell.ts +12 -44
  425. package/src/tools/tool-input-schemas.ts +2 -0
  426. package/src/tools/tool-manifest.ts +2 -0
  427. package/src/usage/attribution.ts +12 -4
  428. package/src/util/__tests__/worker-ownership.test.ts +77 -0
  429. package/src/util/__tests__/worker-process-command.test.ts +246 -1
  430. package/src/util/bun-runtime.ts +44 -13
  431. package/src/util/bundled-asset.ts +9 -1
  432. package/src/util/disk-usage.ts +1 -0
  433. package/src/util/file-use.ts +4 -1
  434. package/src/util/guardian-form-timeouts.ts +50 -0
  435. package/src/util/image-conversion.ts +1 -0
  436. package/src/util/oauth-request-body.test.ts +59 -0
  437. package/src/util/oauth-request-body.ts +56 -5
  438. package/src/util/platform.ts +69 -73
  439. package/src/util/process-table.ts +16 -5
  440. package/src/util/read-stdin.ts +5 -0
  441. package/src/util/spawn.ts +1 -0
  442. package/src/util/sqlite3-runtime.ts +25 -5
  443. package/src/util/worker-ownership.ts +193 -0
  444. package/src/util/worker-process.ts +375 -37
  445. package/src/workspace/git-service.ts +4 -12
  446. package/src/workspace/migrations/010-app-dir-rename.ts +1 -0
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.7
6
+ version: 0.11.8
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
@@ -467,6 +467,8 @@ paths:
467
467
  type: string
468
468
  parentToolUseId:
469
469
  type: string
470
+ authErrorCode:
471
+ type: string
470
472
  usedTokens:
471
473
  type: number
472
474
  contextSize:
@@ -4198,6 +4200,22 @@ paths:
4198
4200
  - delete
4199
4201
  - reaction
4200
4202
  - button
4203
+ reaction:
4204
+ type: object
4205
+ properties:
4206
+ op:
4207
+ type: string
4208
+ enum:
4209
+ - added
4210
+ - removed
4211
+ emoji:
4212
+ type: string
4213
+ targetMessageId:
4214
+ type: string
4215
+ required:
4216
+ - op
4217
+ - emoji
4218
+ - targetMessageId
4201
4219
  isEdit:
4202
4220
  type: boolean
4203
4221
  callbackQueryId:
@@ -4366,6 +4384,8 @@ paths:
4366
4384
  required:
4367
4385
  - trustClass
4368
4386
  - canonicalSenderId
4387
+ actorUnattributed:
4388
+ type: boolean
4369
4389
  emailProvider:
4370
4390
  type: string
4371
4391
  emailSubject:
@@ -5539,6 +5559,49 @@ paths:
5539
5559
  - runs
5540
5560
  - nextCursor
5541
5561
  additionalProperties: false
5562
+ /v1/contact_prompt_claim:
5563
+ post:
5564
+ operationId: contact_prompt_claim_post
5565
+ summary: Claim a pending contact form for one submission
5566
+ description:
5567
+ Marks a pending form as answered so a second client submitting the same form writes nothing. Returns
5568
+ claimed=false with reason 'already_claimed' when somebody got there first, or 'unknown' when no such form is
5569
+ pending. A granted claim carries the window its write has to report back in.
5570
+ tags:
5571
+ - contacts
5572
+ requestBody:
5573
+ required: true
5574
+ content:
5575
+ application/json:
5576
+ schema:
5577
+ type: object
5578
+ properties:
5579
+ requestId:
5580
+ type: string
5581
+ description: The pending contact_request id.
5582
+ required:
5583
+ - requestId
5584
+ responses:
5585
+ "200":
5586
+ description: Successful response
5587
+ content:
5588
+ application/json:
5589
+ schema:
5590
+ type: object
5591
+ properties:
5592
+ claimed:
5593
+ type: boolean
5594
+ reason:
5595
+ type: string
5596
+ enum:
5597
+ - already_claimed
5598
+ - unknown
5599
+ settleMs:
5600
+ description: How long a granted claim has to report its write back before the waiting call gives up.
5601
+ type: number
5602
+ required:
5603
+ - claimed
5604
+ additionalProperties: false
5542
5605
  /v1/contact_prompt_flags:
5543
5606
  post:
5544
5607
  operationId: contact_prompt_flags_post
@@ -6462,7 +6525,7 @@ paths:
6462
6525
  summary: Prompt user to register a contact channel
6463
6526
  description:
6464
6527
  Broadcasts a contact_request to connected clients, waits for the user to submit an address via the gateway.
6465
- The gateway owns the contact write and notifies the daemon via resolve_contact_prompt IPC.
6528
+ The gateway owns the contact write and reports it back via resolve_contact_prompt.
6466
6529
  tags:
6467
6530
  - contacts
6468
6531
  requestBody:
@@ -6496,8 +6559,17 @@ paths:
6496
6559
  - trusted-contact
6497
6560
  - unknown
6498
6561
  verify:
6499
- description: When true, submitting the address also marks the channel verified. Same attest as Contacts Verify me.
6562
+ description:
6563
+ Pre-check the form's 'mark verified' box. The guardian's answer on submit decides the attest, so an
6564
+ unchecked box leaves the channel unverified.
6500
6565
  type: boolean
6566
+ timeoutMs:
6567
+ description:
6568
+ How long to hold the form open (ms). The caller waits slightly longer than this, so the form closing is
6569
+ what ends the wait. Defaults to 300000.
6570
+ type: integer
6571
+ exclusiveMinimum: 0
6572
+ maximum: 3600000
6501
6573
  responses:
6502
6574
  "200":
6503
6575
  description: Successful response
@@ -6518,6 +6590,106 @@ paths:
6518
6590
  type: string
6519
6591
  address:
6520
6592
  type: string
6593
+ verified:
6594
+ type: boolean
6595
+ required:
6596
+ - ok
6597
+ additionalProperties: false
6598
+ /v1/contacts/record-prompt:
6599
+ post:
6600
+ operationId: contacts_recordprompt_post
6601
+ summary: Ask the guardian to confirm a contact record write
6602
+ description:
6603
+ Broadcasts a contact_record_request to connected clients and waits for the guardian to submit the form. The
6604
+ gateway owns the write and reports it back via resolve_contact_prompt. Nothing is written if nobody answers.
6605
+ tags:
6606
+ - contacts
6607
+ requestBody:
6608
+ required: true
6609
+ content:
6610
+ application/json:
6611
+ schema:
6612
+ type: object
6613
+ properties:
6614
+ operation:
6615
+ type: string
6616
+ enum:
6617
+ - create
6618
+ - update
6619
+ - delete
6620
+ description: Which record write the guardian is being asked to confirm.
6621
+ contactId:
6622
+ description: Target contact. Required for update and delete.
6623
+ type: string
6624
+ currentDisplayName:
6625
+ description:
6626
+ The target's current name, resolved by the caller, so the form can show what is changing. Gateway-owned
6627
+ facts are not read here.
6628
+ type: string
6629
+ currentNotes:
6630
+ description:
6631
+ The target's current notes, resolved by the caller. The form submits a field only when it differs from what
6632
+ is stored.
6633
+ type: string
6634
+ channels:
6635
+ description:
6636
+ The target's channels, resolved by the caller, so a delete confirmation can identify the contact and show
6637
+ what access is about to be lost.
6638
+ type: array
6639
+ items:
6640
+ type: object
6641
+ properties:
6642
+ type:
6643
+ type: string
6644
+ address:
6645
+ type: string
6646
+ required:
6647
+ - type
6648
+ - address
6649
+ displayName:
6650
+ description: Proposed name, prefilled into the form. The guardian can edit it.
6651
+ type: string
6652
+ notes:
6653
+ description: Proposed notes, prefilled into the form. The guardian can edit them.
6654
+ type: string
6655
+ notesProposed:
6656
+ description:
6657
+ Whether the caller asked for these notes explicitly, so the form submits them even when they match what is
6658
+ stored.
6659
+ type: boolean
6660
+ label:
6661
+ description: Display label shown in the form.
6662
+ type: string
6663
+ description:
6664
+ description: Longer description shown in the form.
6665
+ type: string
6666
+ timeoutMs:
6667
+ description:
6668
+ How long to hold the form open (ms). The caller waits slightly longer than this, so the form closing is
6669
+ what ends the wait. Defaults to 300000.
6670
+ type: integer
6671
+ exclusiveMinimum: 0
6672
+ maximum: 3600000
6673
+ required:
6674
+ - operation
6675
+ responses:
6676
+ "200":
6677
+ description: Successful response
6678
+ content:
6679
+ application/json:
6680
+ schema:
6681
+ type: object
6682
+ properties:
6683
+ ok:
6684
+ type: boolean
6685
+ error:
6686
+ type: string
6687
+ contactId:
6688
+ type: string
6689
+ notesSaved:
6690
+ type: boolean
6691
+ nothingWritten:
6692
+ type: boolean
6521
6693
  required:
6522
6694
  - ok
6523
6695
  additionalProperties: false
@@ -12634,6 +12806,56 @@ paths:
12634
12806
  additionalProperties: false
12635
12807
  "403":
12636
12808
  description: Cannot reorder system groups
12809
+ /v1/guardian_form_claim:
12810
+ post:
12811
+ operationId: guardian_form_claim_post
12812
+ summary: Claim a pending guardian form for one submission
12813
+ description:
12814
+ Marks a pending form as answered so a second client submitting the same form writes nothing. Returns
12815
+ claimed=false with reason 'already_claimed' when somebody got there first, 'unknown' when no such form is
12816
+ pending, or 'wrong_kind' when the id belongs to a different form than the caller named. A granted claim carries
12817
+ the window its write has to report back in.
12818
+ tags:
12819
+ - guardian-forms
12820
+ requestBody:
12821
+ required: true
12822
+ content:
12823
+ application/json:
12824
+ schema:
12825
+ type: object
12826
+ properties:
12827
+ requestId:
12828
+ type: string
12829
+ description: The pending form's id.
12830
+ kind:
12831
+ description:
12832
+ The form the caller believes it is writing for. Rejected when it is not what the id is holding. Omitted by
12833
+ callers that predate the check.
12834
+ type: string
12835
+ required:
12836
+ - requestId
12837
+ responses:
12838
+ "200":
12839
+ description: Successful response
12840
+ content:
12841
+ application/json:
12842
+ schema:
12843
+ type: object
12844
+ properties:
12845
+ claimed:
12846
+ type: boolean
12847
+ reason:
12848
+ type: string
12849
+ enum:
12850
+ - already_claimed
12851
+ - unknown
12852
+ - wrong_kind
12853
+ settleMs:
12854
+ description: How long a granted claim has to report its write back before the waiting call gives up.
12855
+ type: number
12856
+ required:
12857
+ - claimed
12858
+ additionalProperties: false
12637
12859
  /v1/guardian-actions/decision:
12638
12860
  post:
12639
12861
  operationId: guardianactions_decision_post
@@ -13540,6 +13762,54 @@ paths:
13540
13762
  required:
13541
13763
  - kind
13542
13764
  additionalProperties: false
13765
+ guardianRequest:
13766
+ type: object
13767
+ properties:
13768
+ requestId:
13769
+ type: string
13770
+ kind:
13771
+ type: string
13772
+ intent:
13773
+ type: string
13774
+ enum:
13775
+ - approval
13776
+ - question
13777
+ status:
13778
+ type: string
13779
+ enum:
13780
+ - pending
13781
+ - approved
13782
+ - denied
13783
+ - expired
13784
+ - cancelled
13785
+ requesterLabel:
13786
+ type: string
13787
+ toolName:
13788
+ type: string
13789
+ sourceChannel:
13790
+ type: string
13791
+ sourceContextLabel:
13792
+ type: string
13793
+ sourceUrl:
13794
+ type: string
13795
+ slackCardUrl:
13796
+ type: string
13797
+ slackCardAppUrl:
13798
+ type: string
13799
+ decidedAction:
13800
+ type: string
13801
+ decidedByLabel:
13802
+ type: string
13803
+ decidedAt:
13804
+ type: string
13805
+ terminalReason:
13806
+ type: string
13807
+ required:
13808
+ - requestId
13809
+ - kind
13810
+ - intent
13811
+ - status
13812
+ additionalProperties: false
13543
13813
  category:
13544
13814
  type: string
13545
13815
  enum:
@@ -13733,6 +14003,54 @@ paths:
13733
14003
  required:
13734
14004
  - kind
13735
14005
  additionalProperties: false
14006
+ guardianRequest:
14007
+ type: object
14008
+ properties:
14009
+ requestId:
14010
+ type: string
14011
+ kind:
14012
+ type: string
14013
+ intent:
14014
+ type: string
14015
+ enum:
14016
+ - approval
14017
+ - question
14018
+ status:
14019
+ type: string
14020
+ enum:
14021
+ - pending
14022
+ - approved
14023
+ - denied
14024
+ - expired
14025
+ - cancelled
14026
+ requesterLabel:
14027
+ type: string
14028
+ toolName:
14029
+ type: string
14030
+ sourceChannel:
14031
+ type: string
14032
+ sourceContextLabel:
14033
+ type: string
14034
+ sourceUrl:
14035
+ type: string
14036
+ slackCardUrl:
14037
+ type: string
14038
+ slackCardAppUrl:
14039
+ type: string
14040
+ decidedAction:
14041
+ type: string
14042
+ decidedByLabel:
14043
+ type: string
14044
+ decidedAt:
14045
+ type: string
14046
+ terminalReason:
14047
+ type: string
14048
+ required:
14049
+ - requestId
14050
+ - kind
14051
+ - intent
14052
+ - status
14053
+ additionalProperties: false
13736
14054
  category:
13737
14055
  type: string
13738
14056
  enum:
@@ -14020,6 +14338,54 @@ paths:
14020
14338
  required:
14021
14339
  - kind
14022
14340
  additionalProperties: false
14341
+ guardianRequest:
14342
+ type: object
14343
+ properties:
14344
+ requestId:
14345
+ type: string
14346
+ kind:
14347
+ type: string
14348
+ intent:
14349
+ type: string
14350
+ enum:
14351
+ - approval
14352
+ - question
14353
+ status:
14354
+ type: string
14355
+ enum:
14356
+ - pending
14357
+ - approved
14358
+ - denied
14359
+ - expired
14360
+ - cancelled
14361
+ requesterLabel:
14362
+ type: string
14363
+ toolName:
14364
+ type: string
14365
+ sourceChannel:
14366
+ type: string
14367
+ sourceContextLabel:
14368
+ type: string
14369
+ sourceUrl:
14370
+ type: string
14371
+ slackCardUrl:
14372
+ type: string
14373
+ slackCardAppUrl:
14374
+ type: string
14375
+ decidedAction:
14376
+ type: string
14377
+ decidedByLabel:
14378
+ type: string
14379
+ decidedAt:
14380
+ type: string
14381
+ terminalReason:
14382
+ type: string
14383
+ required:
14384
+ - requestId
14385
+ - kind
14386
+ - intent
14387
+ - status
14388
+ additionalProperties: false
14023
14389
  category:
14024
14390
  type: string
14025
14391
  enum:
@@ -16233,14 +16599,14 @@ paths:
16233
16599
  type: object
16234
16600
  properties:
16235
16601
  botToken:
16236
- type: string
16237
16602
  description: Slack bot token
16238
- appToken:
16239
16603
  type: string
16604
+ appToken:
16240
16605
  description: Slack app-level token
16241
- required:
16242
- - botToken
16243
- - appToken
16606
+ type: string
16607
+ userToken:
16608
+ description: Slack user token, for reading channels the bot is not in
16609
+ type: string
16244
16610
  responses:
16245
16611
  "200":
16246
16612
  description: Successful response
@@ -20608,6 +20974,29 @@ paths:
20608
20974
  additionalProperties: false
20609
20975
  systemCard:
20610
20976
  type: boolean
20977
+ noResponse:
20978
+ type: boolean
20979
+ reaction:
20980
+ type: object
20981
+ properties:
20982
+ emoji:
20983
+ type: string
20984
+ op:
20985
+ type: string
20986
+ enum:
20987
+ - added
20988
+ - removed
20989
+ targetMessageId:
20990
+ type: string
20991
+ actorDisplayName:
20992
+ type: string
20993
+ selfAuthored:
20994
+ type: boolean
20995
+ required:
20996
+ - emoji
20997
+ - op
20998
+ - targetMessageId
20999
+ additionalProperties: false
20611
21000
  providerError:
20612
21001
  type: object
20613
21002
  properties:
@@ -22586,6 +22975,54 @@ paths:
22586
22975
  required:
22587
22976
  - kind
22588
22977
  additionalProperties: false
22978
+ guardianRequest:
22979
+ type: object
22980
+ properties:
22981
+ requestId:
22982
+ type: string
22983
+ kind:
22984
+ type: string
22985
+ intent:
22986
+ type: string
22987
+ enum:
22988
+ - approval
22989
+ - question
22990
+ status:
22991
+ type: string
22992
+ enum:
22993
+ - pending
22994
+ - approved
22995
+ - denied
22996
+ - expired
22997
+ - cancelled
22998
+ requesterLabel:
22999
+ type: string
23000
+ toolName:
23001
+ type: string
23002
+ sourceChannel:
23003
+ type: string
23004
+ sourceContextLabel:
23005
+ type: string
23006
+ sourceUrl:
23007
+ type: string
23008
+ slackCardUrl:
23009
+ type: string
23010
+ slackCardAppUrl:
23011
+ type: string
23012
+ decidedAction:
23013
+ type: string
23014
+ decidedByLabel:
23015
+ type: string
23016
+ decidedAt:
23017
+ type: string
23018
+ terminalReason:
23019
+ type: string
23020
+ required:
23021
+ - requestId
23022
+ - kind
23023
+ - intent
23024
+ - status
23025
+ additionalProperties: false
22589
23026
  category:
22590
23027
  type: string
22591
23028
  enum:
@@ -26006,12 +26443,47 @@ paths:
26006
26443
  post:
26007
26444
  operationId: resolve_contact_prompt_post
26008
26445
  summary: "Gateway callback: resolve a pending contact prompt"
26009
- description: Called by the gateway after it writes the contact and channel. Unblocks the waiting contacts/prompt IPC call.
26446
+ description: Called by the gateway after it writes the contact and channel. Unblocks the waiting contacts/prompt call.
26010
26447
  tags:
26011
26448
  - contacts
26012
26449
  responses:
26013
26450
  "200":
26014
26451
  description: Successful response
26452
+ /v1/resolve_guardian_form:
26453
+ post:
26454
+ operationId: resolve_guardian_form_post
26455
+ summary: Report a guardian form's outcome back to the waiting command
26456
+ description:
26457
+ Called by the writer once it has committed (or failed). Fields other than requestId and error are passed
26458
+ through to the parked caller untouched; an error makes the outcome a failure.
26459
+ tags:
26460
+ - guardian-forms
26461
+ requestBody:
26462
+ required: true
26463
+ content:
26464
+ application/json:
26465
+ schema:
26466
+ type: object
26467
+ properties:
26468
+ requestId:
26469
+ type: string
26470
+ description: The pending form's id.
26471
+ required:
26472
+ - requestId
26473
+ additionalProperties: {}
26474
+ responses:
26475
+ "200":
26476
+ description: Successful response
26477
+ content:
26478
+ application/json:
26479
+ schema:
26480
+ type: object
26481
+ properties:
26482
+ resolved:
26483
+ type: boolean
26484
+ required:
26485
+ - resolved
26486
+ additionalProperties: false
26015
26487
  /v1/resource-pressure/status:
26016
26488
  get:
26017
26489
  operationId: resourcepressure_status_get
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vellumai/assistant",
3
- "version": "0.11.7",
3
+ "version": "0.11.8-staging.1",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "exports": {
@@ -43,6 +43,7 @@
43
43
  "@qdrant/js-client-rest": "1.17.0",
44
44
  "@resvg/resvg-js": "2.6.2",
45
45
  "@slack/types": "2.22.0",
46
+ "@vellumai/avatar-catalog": "file:../packages/avatar-catalog",
46
47
  "@vellumai/avatar-manifest": "file:../packages/avatar-manifest",
47
48
  "@vellumai/ces-client": "file:../packages/ces-client",
48
49
  "@vellumai/credential-storage": "file:../packages/credential-storage",
@@ -87,6 +88,7 @@
87
88
  "node": ">=20.12.0"
88
89
  },
89
90
  "bundledDependencies": [
91
+ "@vellumai/avatar-catalog",
90
92
  "@vellumai/avatar-manifest",
91
93
  "@vellumai/ces-client",
92
94
  "@vellumai/credential-storage",
@@ -74,6 +74,9 @@ function projectModel(model: CatalogModel): Record<string, unknown> {
74
74
  if (model.adaptiveThinkingOnly !== undefined) {
75
75
  projected.adaptiveThinkingOnly = model.adaptiveThinkingOnly;
76
76
  }
77
+ if (model.thinkingFloor !== undefined) {
78
+ projected.thinkingFloor = model.thinkingFloor;
79
+ }
77
80
  if (model.supportsCaching !== undefined) {
78
81
  projected.supportsCaching = model.supportsCaching;
79
82
  }
@@ -175,6 +175,22 @@ describe("AgentLoop — call-site precedence", () => {
175
175
 
176
176
  test("call-site thinking wins over conversation default when callSite is set", async () => {
177
177
  setLlmConfig({
178
+ // Pinned to a model that can actually be told not to think. Without an
179
+ // active profile the call site resolves the shipped Balanced body, and
180
+ // the disabled shape asserted below only exists for models whose
181
+ // reasoning can be turned off: the normalizer drops a disabled thinking
182
+ // config for adaptive-thinking-only models (they always reason and 4xx
183
+ // the opt-out), so this test would assert the Balanced pin's capabilities
184
+ // rather than call-site precedence.
185
+ profiles: {
186
+ "test-anthropic": {
187
+ source: "user",
188
+ provider: "anthropic",
189
+ model: "claude-sonnet-5",
190
+ },
191
+ },
192
+ profileOrder: ["test-anthropic"],
193
+ activeProfile: "test-anthropic",
178
194
  default: {
179
195
  provider: "anthropic",
180
196
  model: "claude-default",