@vellumai/assistant 0.10.2 → 0.10.3-dev.202606252046.9075fd5

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 (546) hide show
  1. package/bun.lock +20 -0
  2. package/docs/workspace-tools.md +42 -33
  3. package/eslint-rules/cli-no-daemon-internals.js +6 -0
  4. package/node_modules/@vellumai/gateway-client/src/__tests__/guardian-delivery-contract.test.ts +91 -0
  5. package/node_modules/@vellumai/gateway-client/src/__tests__/trust-verdict-contract.test.ts +31 -0
  6. package/node_modules/@vellumai/gateway-client/src/gateway-ipc-contracts.ts +44 -0
  7. package/node_modules/@vellumai/gateway-client/src/guardian-delivery-contract.ts +48 -0
  8. package/node_modules/@vellumai/gateway-client/src/index.ts +14 -0
  9. package/node_modules/@vellumai/gateway-client/src/trust-verdict-contract.ts +17 -0
  10. package/node_modules/@vellumai/service-contracts/package.json +1 -0
  11. package/node_modules/@vellumai/service-contracts/src/__tests__/channels.test.ts +28 -0
  12. package/node_modules/@vellumai/service-contracts/src/channels.ts +41 -0
  13. package/node_modules/@vellumai/service-contracts/src/index.ts +1 -0
  14. package/openapi.yaml +196 -56
  15. package/package.json +4 -1
  16. package/scripts/test.sh +36 -15
  17. package/src/__tests__/actor-token-service.test.ts +36 -14
  18. package/src/__tests__/actor-trust-resolver-address-fallback.test.ts +83 -31
  19. package/src/__tests__/agent-loop-override-profile.test.ts +1 -0
  20. package/src/__tests__/agent-wake-disk-pressure-callsite.test.ts +2 -0
  21. package/src/__tests__/agent-wake-override-profile.test.ts +2 -0
  22. package/src/__tests__/annotate-activity-metadata.test.ts +2 -0
  23. package/src/__tests__/annotate-risk-options.test.ts +2 -0
  24. package/src/__tests__/approval-cascade.test.ts +2 -0
  25. package/src/__tests__/assistant-attachments.test.ts +42 -0
  26. package/src/__tests__/background-workers-disk-pressure.test.ts +2 -0
  27. package/src/__tests__/btw-routes.test.ts +2 -0
  28. package/src/__tests__/build-persisted-content.test.ts +2 -0
  29. package/src/__tests__/call-controller.test.ts +19 -0
  30. package/src/__tests__/channel-approval-routes.test.ts +21 -26
  31. package/src/__tests__/channel-delivery-store.test.ts +28 -0
  32. package/src/__tests__/channel-guardian.test.ts +164 -78
  33. package/src/__tests__/channel-inbound-disk-pressure.test.ts +11 -19
  34. package/src/__tests__/channel-reply-delivery.test.ts +2 -0
  35. package/src/__tests__/code-search-tool.test.ts +585 -0
  36. package/src/__tests__/compaction-events.test.ts +2 -0
  37. package/src/__tests__/compaction-ledger-store.test.ts +128 -0
  38. package/src/__tests__/compaction.benchmark.test.ts +2 -0
  39. package/src/__tests__/compactor-call-site-logging.test.ts +2 -0
  40. package/src/__tests__/compactor-low-watermark-cut.test.ts +2 -0
  41. package/src/__tests__/compactor-preserved-tail-count.test.ts +2 -0
  42. package/src/__tests__/compactor-summary-call-truncation.test.ts +2 -0
  43. package/src/__tests__/compactor-web-search-strip.test.ts +2 -0
  44. package/src/__tests__/config-loader-backfill.test.ts +123 -10
  45. package/src/__tests__/config-schema.test.ts +1 -0
  46. package/src/__tests__/confirmation-request-guardian-bridge.test.ts +31 -29
  47. package/src/__tests__/consult-deadline.test.ts +60 -0
  48. package/src/__tests__/contact-store-interaction-info.test.ts +156 -0
  49. package/src/__tests__/contact-store-user-file.test.ts +7 -10
  50. package/src/__tests__/contacts-relay-reads.test.ts +19 -24
  51. package/src/__tests__/contacts-write.test.ts +0 -2
  52. package/src/__tests__/conversation-abort-tool-results.test.ts +2 -0
  53. package/src/__tests__/conversation-agent-loop-disk-pressure.test.ts +2 -0
  54. package/src/__tests__/conversation-agent-loop-inference-profile.test.ts +2 -0
  55. package/src/__tests__/conversation-agent-loop-overflow.test.ts +2 -0
  56. package/src/__tests__/conversation-agent-loop.test.ts +134 -0
  57. package/src/__tests__/conversation-analysis-routes.test.ts +2 -0
  58. package/src/__tests__/conversation-app-control-lifecycle.test.ts +2 -0
  59. package/src/__tests__/conversation-attention-telegram.test.ts +9 -11
  60. package/src/__tests__/conversation-confirmation-signals.test.ts +2 -0
  61. package/src/__tests__/conversation-fork-crud.test.ts +354 -24
  62. package/src/__tests__/conversation-history-web-search.test.ts +2 -0
  63. package/src/__tests__/conversation-load-history-repair.test.ts +2 -0
  64. package/src/__tests__/conversation-load-history-stripped.test.ts +2 -0
  65. package/src/__tests__/conversation-pairing.test.ts +2 -0
  66. package/src/__tests__/conversation-process-app-control-preactivation.test.ts +2 -0
  67. package/src/__tests__/conversation-process-callsite.test.ts +2 -0
  68. package/src/__tests__/conversation-provider-retry-repair.test.ts +2 -0
  69. package/src/__tests__/conversation-queue.test.ts +91 -0
  70. package/src/__tests__/conversation-routes-guardian-reply.test.ts +14 -0
  71. package/src/__tests__/conversation-routes-slash-commands.test.ts +14 -0
  72. package/src/__tests__/conversation-slash-queue.test.ts +2 -0
  73. package/src/__tests__/conversation-slash-unknown.test.ts +2 -0
  74. package/src/__tests__/conversation-speed-override.test.ts +2 -0
  75. package/src/__tests__/conversation-surfaces-task-progress.test.ts +29 -0
  76. package/src/__tests__/conversation-title-service.test.ts +2 -0
  77. package/src/__tests__/conversation-tool-setup-attribution.test.ts +47 -0
  78. package/src/__tests__/conversation-usage.test.ts +2 -0
  79. package/src/__tests__/conversation-workspace-cache-state.test.ts +2 -0
  80. package/src/__tests__/conversation-workspace-injection.test.ts +2 -0
  81. package/src/__tests__/conversation-workspace-tool-tracking.test.ts +2 -0
  82. package/src/__tests__/credential-security-invariants.test.ts +1 -1
  83. package/src/__tests__/db-compaction-events-migration.test.ts +129 -0
  84. package/src/__tests__/db-migration-rollback.test.ts +205 -171
  85. package/src/__tests__/db-test-helpers.ts +5 -4
  86. package/src/__tests__/delete-propagation.test.ts +5 -3
  87. package/src/__tests__/deterministic-verification-control-plane.test.ts +4 -2
  88. package/src/__tests__/disk-pressure-guard.test.ts +41 -0
  89. package/src/__tests__/dm-backfill.test.ts +6 -4
  90. package/src/__tests__/dm-persistence.test.ts +2 -0
  91. package/src/__tests__/emit-signal-routing-intent.test.ts +7 -6
  92. package/src/__tests__/events-dev-bypass-actor.test.ts +7 -1
  93. package/src/__tests__/exploration-drift-hook.test.ts +3 -2
  94. package/src/__tests__/filing-service.test.ts +2 -0
  95. package/src/__tests__/guardian-binding-drift-heal.test.ts +104 -19
  96. package/src/__tests__/guardian-dispatch.test.ts +140 -1
  97. package/src/__tests__/guardian-expiry-notifier.test.ts +282 -0
  98. package/src/__tests__/guardian-outbound-http.test.ts +13 -0
  99. package/src/__tests__/guardian-routing-state.test.ts +6 -10
  100. package/src/__tests__/heartbeat-disk-pressure.test.ts +2 -0
  101. package/src/__tests__/heartbeat-service.test.ts +2 -0
  102. package/src/__tests__/helpers/channel-test-adapter.ts +46 -19
  103. package/src/__tests__/helpers/create-guardian-binding.ts +15 -23
  104. package/src/__tests__/helpers/mock-logger.ts +1 -0
  105. package/src/__tests__/helpers/seed-contact-channel.ts +96 -0
  106. package/src/__tests__/host-app-control-routes.test.ts +24 -30
  107. package/src/__tests__/host-bash-routes.test.ts +31 -41
  108. package/src/__tests__/host-browser-routes.test.ts +26 -32
  109. package/src/__tests__/host-cu-routes-targeted.test.ts +25 -33
  110. package/src/__tests__/host-file-routes-targeted.test.ts +40 -52
  111. package/src/__tests__/host-transfer-routes-targeted.test.ts +31 -43
  112. package/src/__tests__/http-user-message-parity.test.ts +290 -8
  113. package/src/__tests__/inbound-invite-redemption.test.ts +115 -10
  114. package/src/__tests__/inbound-slack-persistence.test.ts +2 -0
  115. package/src/__tests__/invite-redemption-service.test.ts +471 -53
  116. package/src/__tests__/invite-routes-http.test.ts +34 -0
  117. package/src/__tests__/invite-service-ipc.test.ts +65 -2
  118. package/src/__tests__/llm-context-normalization.test.ts +105 -0
  119. package/src/__tests__/llm-request-log-error-payload.test.ts +71 -9
  120. package/src/__tests__/llm-usage-store.test.ts +25 -0
  121. package/src/__tests__/mcp-config-secret-boundary.test.ts +392 -0
  122. package/src/__tests__/mcp-health-check.test.ts +2 -1
  123. package/src/__tests__/media-stream-server-integration.test.ts +127 -0
  124. package/src/__tests__/memory-retrieval-hook.test.ts +2 -0
  125. package/src/__tests__/messaging-send-tool.test.ts +2 -0
  126. package/src/__tests__/migration-import-from-url.test.ts +2 -2
  127. package/src/__tests__/mtime-cache.test.ts +275 -5
  128. package/src/__tests__/native-web-search.test.ts +2 -0
  129. package/src/__tests__/non-member-access-request.test.ts +191 -17
  130. package/src/__tests__/notification-broadcaster.test.ts +4 -0
  131. package/src/__tests__/notification-decision-recipient-context.test.ts +33 -32
  132. package/src/__tests__/notification-deep-link.test.ts +6 -0
  133. package/src/__tests__/notification-guardian-path.test.ts +19 -0
  134. package/src/__tests__/onboarding-persona-write.test.ts +52 -22
  135. package/src/__tests__/openai-provider.test.ts +22 -12
  136. package/src/__tests__/openai-responses-provider.test.ts +12 -2
  137. package/src/__tests__/outbound-slack-persistence.test.ts +2 -0
  138. package/src/__tests__/pending-interactions-resolved-event.test.ts +7 -4
  139. package/src/__tests__/persist-onboarding-artifacts.test.ts +1 -0
  140. package/src/__tests__/persistence-secret-redaction.test.ts +2 -0
  141. package/src/__tests__/persona-resolver.test.ts +75 -45
  142. package/src/__tests__/plugin-bootstrap.test.ts +21 -83
  143. package/src/__tests__/plugin-disabled-state.test.ts +190 -0
  144. package/src/__tests__/plugin-pipeline.test.ts +96 -0
  145. package/src/__tests__/plugin-route-contribution.test.ts +6 -19
  146. package/src/__tests__/plugin-tool-contribution.test.ts +5 -20
  147. package/src/__tests__/plugin-types.test.ts +2 -4
  148. package/src/__tests__/process-message-background-slack.test.ts +2 -0
  149. package/src/__tests__/process-message-display-content.test.ts +2 -0
  150. package/src/__tests__/provider-error-scenarios.test.ts +5 -4
  151. package/src/__tests__/provider-usage-tracking.test.ts +39 -0
  152. package/src/__tests__/reaction-intercept-cold-cache-warm.test.ts +135 -0
  153. package/src/__tests__/reaction-intercept-member-verdict-warm.test.ts +158 -0
  154. package/src/__tests__/reaction-persistence.test.ts +51 -4
  155. package/src/__tests__/regenerate-fire-and-forget-trace.test.ts +2 -0
  156. package/src/__tests__/registry.test.ts +4 -1
  157. package/src/__tests__/relay-server.test.ts +758 -32
  158. package/src/__tests__/runtime-attachment-metadata.test.ts +9 -12
  159. package/src/__tests__/secret-ingress-http.test.ts +14 -0
  160. package/src/__tests__/send-endpoint-busy.test.ts +30 -8
  161. package/src/__tests__/settings-routes.test.ts +32 -0
  162. package/src/__tests__/skills.test.ts +44 -0
  163. package/src/__tests__/slack-inbound-verification.test.ts +47 -2
  164. package/src/__tests__/sse-actor-principal-guardian-source.test.ts +79 -0
  165. package/src/__tests__/steer-on-enqueue-question.test.ts +181 -0
  166. package/src/__tests__/stt-hints.test.ts +49 -15
  167. package/src/__tests__/subagent-detail.test.ts +27 -0
  168. package/src/__tests__/subagent-disposal.test.ts +65 -0
  169. package/src/__tests__/subagent-fork-prompt-role.test.ts +195 -0
  170. package/src/__tests__/subagent-fork-spawn.test.ts +6 -7
  171. package/src/__tests__/subagent-notify-parent.test.ts +2 -0
  172. package/src/__tests__/subagent-role-registry.test.ts +24 -6
  173. package/src/__tests__/subagent-spawn-and-await.test.ts +546 -0
  174. package/src/__tests__/subagent-spawn-tool-fork.test.ts +2 -0
  175. package/src/__tests__/subagent-tools.test.ts +398 -1
  176. package/src/__tests__/suggestion-routes.test.ts +2 -0
  177. package/src/__tests__/thread-backfill.test.ts +3 -3
  178. package/src/__tests__/title-generate-hook.test.ts +2 -0
  179. package/src/__tests__/tool-executor-lifecycle-events.test.ts +2 -0
  180. package/src/__tests__/tool-executor.test.ts +16 -11
  181. package/src/__tests__/tool-preview-lifecycle.test.ts +2 -0
  182. package/src/__tests__/tool-result-metadata-plumbing.test.ts +2 -0
  183. package/src/__tests__/tool-start-timestamp.test.ts +2 -0
  184. package/src/__tests__/trusted-contact-approval-notifier.test.ts +37 -51
  185. package/src/__tests__/trusted-contact-inline-approval-integration.test.ts +12 -12
  186. package/src/__tests__/trusted-contact-lifecycle-notifications.test.ts +9 -7
  187. package/src/__tests__/trusted-contact-multichannel.test.ts +16 -7
  188. package/src/__tests__/trusted-contact-verification.test.ts +79 -54
  189. package/src/__tests__/twilio-routes.test.ts +96 -0
  190. package/src/__tests__/ui-file-upload-surface.test.ts +86 -0
  191. package/src/__tests__/verification-control-plane-policy.test.ts +2 -0
  192. package/src/__tests__/voice-guardian-cold-cache-warm.test.ts +137 -0
  193. package/src/__tests__/voice-invite-redemption.test.ts +216 -20
  194. package/src/__tests__/web-search-backend-failure.test.ts +2 -0
  195. package/src/__tests__/workspace-migration-102-preserve-heartbeat-enabled-for-existing-workspaces.test.ts +3 -3
  196. package/src/__tests__/workspace-migration-111-prune-seeded-callsite-defaults.test.ts +208 -0
  197. package/src/__tests__/workspace-migration-112-remove-advisor-callsite-override.test.ts +170 -0
  198. package/src/__tests__/workspace-migration-drop-user-md.test.ts +196 -238
  199. package/src/__tests__/workspace-migration-remove-hooks.test.ts +14 -35
  200. package/src/__tests__/workspace-tool-loader.test.ts +195 -2
  201. package/src/a2a/__tests__/e2e-a2a-channel.test.ts +35 -47
  202. package/src/agent/loop-exclusive-tool.test.ts +154 -0
  203. package/src/agent/loop-native-web-search.test.ts +200 -0
  204. package/src/agent/loop.ts +164 -1
  205. package/src/api/constants/sse-replay.ts +41 -0
  206. package/src/api/events/conversation-notice.ts +26 -0
  207. package/src/api/index.ts +19 -1
  208. package/src/api/responses/llm-request-log-entry.ts +29 -0
  209. package/src/api/responses/subagent-detail.ts +17 -0
  210. package/src/api/surfaces.ts +39 -3
  211. package/src/approvals/guardian-channel-delivery.ts +30 -0
  212. package/src/approvals/guardian-expiry-notifier.ts +148 -0
  213. package/src/approvals/guardian-request-resolvers.ts +17 -15
  214. package/src/calls/__tests__/relay-setup-router.test.ts +267 -17
  215. package/src/calls/call-domain.ts +3 -3
  216. package/src/calls/guardian-dispatch.ts +14 -9
  217. package/src/calls/inbound-trust-reader.ts +24 -2
  218. package/src/calls/media-stream-server.ts +21 -0
  219. package/src/calls/relay-access-wait.ts +6 -6
  220. package/src/calls/relay-server.ts +188 -51
  221. package/src/calls/relay-setup-router.ts +47 -17
  222. package/src/calls/relay-verification.ts +4 -4
  223. package/src/calls/stt-hints.ts +9 -12
  224. package/src/calls/twilio-routes.ts +14 -4
  225. package/src/channels/types.ts +10 -20
  226. package/src/cli/commands/__tests__/cache.test.ts +8 -1
  227. package/src/cli/commands/__tests__/conversations-slack.test.ts +1 -0
  228. package/src/cli/commands/cache.ts +194 -181
  229. package/src/cli/commands/contacts.ts +10 -7
  230. package/src/cli/commands/db/__tests__/repair.test.ts +6 -5
  231. package/src/cli/commands/db/status.ts +37 -1
  232. package/src/cli/commands/mcp.ts +252 -218
  233. package/src/cli/commands/memory/__tests__/worker.test.ts +432 -0
  234. package/src/cli/commands/memory/index.ts +2 -0
  235. package/src/cli/commands/memory/worker.ts +242 -0
  236. package/src/cli/commands/plugins.ts +125 -13
  237. package/src/cli/lib/__tests__/install-from-github.test.ts +102 -0
  238. package/src/cli/lib/__tests__/list-installed-plugins.test.ts +160 -1
  239. package/src/cli/lib/__tests__/publish-plugin.test.ts +404 -0
  240. package/src/cli/lib/list-installed-plugins.ts +179 -1
  241. package/src/cli/lib/publish-plugin.ts +633 -0
  242. package/src/config/__tests__/loader-callsite-strip-fallback.test.ts +143 -0
  243. package/src/config/__tests__/sync-gated-profiles.test.ts +16 -10
  244. package/src/config/bundled-skills/contacts/tools/contact-merge.ts +27 -17
  245. package/src/config/bundled-skills/contacts/tools/contact-search.ts +13 -3
  246. package/src/config/bundled-skills/subagent/SKILL.md +17 -2
  247. package/src/config/bundled-skills/subagent/TOOLS.json +5 -4
  248. package/src/config/call-site-defaults.ts +0 -6
  249. package/src/config/feature-flag-registry.json +5 -13
  250. package/src/config/llm-resolver.ts +0 -3
  251. package/src/config/loader.ts +38 -5
  252. package/src/config/prune-seeded-callsite-defaults.ts +110 -0
  253. package/src/config/schemas/__tests__/memory-v3.test.ts +1 -0
  254. package/src/config/schemas/call-site-catalog.ts +0 -7
  255. package/src/config/schemas/heartbeat.ts +2 -5
  256. package/src/config/schemas/llm.ts +3 -12
  257. package/src/config/schemas/memory-lifecycle.ts +12 -0
  258. package/src/config/schemas/memory-v3.ts +7 -0
  259. package/src/config/schemas/memory.ts +4 -0
  260. package/src/config/schemas/timeouts.ts +8 -0
  261. package/src/config/seed-inference-profiles.ts +30 -34
  262. package/src/config/skills.ts +27 -5
  263. package/src/config/sync-gated-profiles.ts +12 -16
  264. package/src/contacts/__tests__/contacts-write-revoke-relay.test.ts +128 -0
  265. package/src/contacts/__tests__/guardian-delivery-reader.test.ts +312 -0
  266. package/src/contacts/__tests__/member-write-relay.test.ts +226 -0
  267. package/src/contacts/contact-store.ts +27 -237
  268. package/src/contacts/contacts-write.ts +18 -55
  269. package/src/contacts/gateway-channel-read.ts +51 -0
  270. package/src/contacts/guardian-delivery-reader.ts +223 -0
  271. package/src/contacts/member-write-relay.ts +183 -0
  272. package/src/contacts/types.ts +3 -15
  273. package/src/daemon/__tests__/conversation-tool-setup-exclude.test.ts +35 -0
  274. package/src/daemon/__tests__/conversation-tool-setup.test.ts +0 -44
  275. package/src/daemon/assistant-attachments.ts +27 -4
  276. package/src/daemon/conversation-agent-loop.ts +28 -0
  277. package/src/daemon/conversation-notices.ts +60 -0
  278. package/src/daemon/conversation-process.ts +35 -16
  279. package/src/daemon/conversation-surfaces.ts +111 -38
  280. package/src/daemon/conversation-tool-setup.ts +71 -30
  281. package/src/daemon/conversation.ts +23 -1
  282. package/src/daemon/disk-pressure-guard.ts +12 -2
  283. package/src/daemon/event-loop-watchdog.ts +28 -1
  284. package/src/daemon/external-plugins-bootstrap.ts +17 -41
  285. package/src/daemon/handlers/__tests__/config-a2a-accept.test.ts +0 -1
  286. package/src/daemon/handlers/__tests__/config-a2a-complete.test.ts +0 -2
  287. package/src/daemon/handlers/__tests__/config-a2a-redeem.test.ts +25 -2
  288. package/src/daemon/handlers/__tests__/config-channels.test.ts +220 -0
  289. package/src/daemon/handlers/config-a2a.ts +6 -14
  290. package/src/daemon/handlers/config-channels.ts +67 -26
  291. package/src/daemon/handlers/conversations.ts +77 -0
  292. package/src/daemon/lifecycle.ts +16 -0
  293. package/src/daemon/mcp-reload-service.ts +10 -0
  294. package/src/daemon/memory-v2-startup.test.ts +72 -0
  295. package/src/daemon/memory-v2-startup.ts +87 -19
  296. package/src/daemon/message-types/conversations.ts +2 -0
  297. package/src/daemon/message-types/surfaces.ts +12 -12
  298. package/src/daemon/server.ts +0 -4
  299. package/src/daemon/shutdown-handlers.ts +20 -0
  300. package/src/daemon/tool-setup-types.ts +9 -0
  301. package/src/heartbeat/heartbeat-service.ts +5 -0
  302. package/src/home/relationship-state-writer.ts +5 -0
  303. package/src/hooks/hook-loader.ts +341 -0
  304. package/src/ipc/__tests__/clients-list-ipc.test.ts +1 -1
  305. package/src/ipc/assistant-server.ts +2 -2
  306. package/src/mcp/__tests__/mcp-auth-orchestrator.test.ts +1 -0
  307. package/src/mcp/client.ts +15 -1
  308. package/src/mcp/mcp-auth-orchestrator.ts +6 -1
  309. package/src/mcp/mcp-header-store.ts +134 -0
  310. package/src/mcp/mcp-oauth-provider.ts +19 -8
  311. package/src/memory/__tests__/301-create-watchdog-events.test.ts +110 -0
  312. package/src/memory/__tests__/memory-retrospective-job.test.ts +8 -0
  313. package/src/memory/__tests__/prompt-override.test.ts +192 -0
  314. package/src/memory/__tests__/watchdog-events-store.test.ts +161 -0
  315. package/src/memory/compaction-ledger-store.ts +107 -0
  316. package/src/memory/conversation-crud.ts +129 -61
  317. package/src/memory/db-connection.ts +22 -3
  318. package/src/memory/db-init.ts +37 -503
  319. package/src/memory/db-singleton.ts +6 -4
  320. package/src/memory/jobs-worker.ts +104 -0
  321. package/src/memory/llm-request-log-store.ts +26 -1
  322. package/src/memory/llm-usage-store.ts +48 -20
  323. package/src/memory/memory-retrospective-job.ts +14 -8
  324. package/src/memory/migrations/209-strip-thinking-from-consolidated.ts +152 -56
  325. package/src/memory/migrations/300-add-processing-started-at.ts +30 -0
  326. package/src/memory/migrations/301-create-watchdog-events.ts +45 -0
  327. package/src/memory/migrations/302-create-compaction-events.ts +107 -0
  328. package/src/memory/migrations/__tests__/209-strip-thinking-from-consolidated.test.ts +297 -0
  329. package/src/memory/migrations/__tests__/run-migrations.test.ts +2 -2
  330. package/src/memory/migrations/run-migrations.ts +106 -10
  331. package/src/memory/migrations/validate-migration-state.ts +105 -67
  332. package/src/memory/prompt-override.ts +129 -0
  333. package/src/memory/schema/contacts.ts +6 -2
  334. package/src/memory/schema/conversations.ts +37 -0
  335. package/src/memory/schema/infrastructure.ts +20 -0
  336. package/src/memory/steps.ts +1294 -0
  337. package/src/memory/v2/__tests__/cli-command-store.test.ts +25 -0
  338. package/src/memory/v2/__tests__/skill-store.test.ts +80 -0
  339. package/src/memory/v2/cli-command-store.ts +75 -38
  340. package/src/memory/v2/prompts/consolidation.ts +13 -82
  341. package/src/memory/v2/prompts/router.ts +21 -93
  342. package/src/memory/v2/skill-store.ts +68 -31
  343. package/src/memory/watchdog-events-store.ts +87 -0
  344. package/src/memory/worker-control.ts +204 -0
  345. package/src/memory/worker-process.ts +89 -0
  346. package/src/messaging/channel-binding-metadata.ts +31 -0
  347. package/src/messaging/provider-types.ts +8 -0
  348. package/src/messaging/providers/slack/binding-metadata.ts +60 -0
  349. package/src/notifications/__tests__/broadcaster.test.ts +8 -8
  350. package/src/notifications/__tests__/connected-channels.test.ts +86 -0
  351. package/src/notifications/__tests__/decision-engine.test.ts +78 -9
  352. package/src/notifications/__tests__/destination-resolver.test.ts +151 -0
  353. package/src/notifications/broadcaster.ts +8 -1
  354. package/src/notifications/decision-engine.ts +15 -7
  355. package/src/notifications/destination-resolver.ts +53 -25
  356. package/src/notifications/emit-signal.ts +34 -15
  357. package/src/onboarding/checkin-event.test.ts +222 -0
  358. package/src/onboarding/checkin-event.ts +321 -0
  359. package/src/onboarding/schedule-checkin.ts +190 -0
  360. package/src/permissions/question-prompter.test.ts +1 -1
  361. package/src/permissions/question-prompter.ts +7 -4
  362. package/src/plugin-api/index.ts +12 -12
  363. package/src/plugin-api/types.ts +12 -14
  364. package/src/plugin-api/vision-support.test.ts +28 -4
  365. package/src/plugin-api/vision-support.ts +66 -31
  366. package/src/plugins/defaults/empty-response/hooks/post-model-call.ts +2 -2
  367. package/src/plugins/defaults/empty-response/hooks/stop.ts +2 -2
  368. package/src/plugins/defaults/exploration-drift/hooks/post-tool-use.ts +4 -3
  369. package/src/plugins/defaults/history-repair/hooks/post-model-call.ts +2 -2
  370. package/src/plugins/defaults/history-repair/hooks/stop.ts +2 -2
  371. package/src/plugins/defaults/history-repair/hooks/user-prompt-submit.ts +2 -2
  372. package/src/plugins/defaults/image-fallback/__tests__/image-fallback.test.ts +47 -7
  373. package/src/plugins/defaults/image-fallback/hooks/post-tool-use.ts +12 -13
  374. package/src/plugins/defaults/image-fallback/hooks/user-prompt-submit.ts +14 -22
  375. package/src/plugins/defaults/image-fallback/src/caption-blocks.ts +42 -11
  376. package/src/plugins/defaults/image-recovery/hooks/post-model-call.ts +2 -2
  377. package/src/plugins/defaults/image-recovery/hooks/stop.ts +2 -2
  378. package/src/plugins/defaults/index.ts +0 -35
  379. package/src/plugins/defaults/max-tokens-continue/hooks/post-model-call.ts +2 -2
  380. package/src/plugins/defaults/max-tokens-continue/hooks/stop.ts +2 -2
  381. package/src/plugins/defaults/memory-retrieval/hooks/post-compact.ts +2 -2
  382. package/src/plugins/defaults/memory-retrieval/hooks/user-prompt-submit.ts +2 -2
  383. package/src/plugins/defaults/memory-v3-shadow/__tests__/injection.test.ts +33 -3
  384. package/src/plugins/defaults/memory-v3-shadow/__tests__/pool-select.test.ts +48 -4
  385. package/src/plugins/defaults/memory-v3-shadow/__tests__/shadow-plugin.test.ts +4 -8
  386. package/src/plugins/defaults/memory-v3-shadow/hooks/post-compact.ts +2 -2
  387. package/src/plugins/defaults/memory-v3-shadow/hooks/user-prompt-submit.ts +2 -2
  388. package/src/plugins/defaults/memory-v3-shadow/injector.ts +43 -15
  389. package/src/plugins/defaults/memory-v3-shadow/orchestrate.ts +11 -2
  390. package/src/plugins/defaults/memory-v3-shadow/pool-select.test.ts +146 -0
  391. package/src/plugins/defaults/memory-v3-shadow/pool-select.ts +77 -13
  392. package/src/plugins/defaults/memory-v3-shadow/shadow-plugin.ts +12 -11
  393. package/src/plugins/defaults/surface-completion-nudge/hooks/post-model-call.ts +2 -2
  394. package/src/plugins/defaults/surface-completion-nudge/hooks/stop.ts +2 -2
  395. package/src/plugins/defaults/task-progress-nudge/hooks/post-tool-use.ts +2 -2
  396. package/src/plugins/defaults/title-generate/hooks/stop.ts +2 -2
  397. package/src/plugins/defaults/title-generate/hooks/user-prompt-submit.ts +2 -2
  398. package/src/plugins/defaults/tool-error/hooks/post-tool-use.ts +2 -2
  399. package/src/plugins/defaults/tool-result-truncate/hooks/post-tool-use.ts +2 -2
  400. package/src/plugins/disabled-state.ts +31 -0
  401. package/src/plugins/external-plugin-loader.ts +2 -2
  402. package/src/plugins/mtime-cache.ts +186 -330
  403. package/src/plugins/pipeline.ts +111 -13
  404. package/src/plugins/registry.ts +59 -16
  405. package/src/plugins/surface-import.ts +121 -0
  406. package/src/plugins/types.ts +7 -9
  407. package/src/prompts/persona-resolver.ts +43 -11
  408. package/src/providers/anthropic/client.ts +5 -0
  409. package/src/providers/call-site-routing.ts +45 -0
  410. package/src/providers/model-catalog.ts +16 -0
  411. package/src/providers/openai/__tests__/api-error-normalization.test.ts +321 -0
  412. package/src/providers/openai/api-error-normalization.ts +270 -0
  413. package/src/providers/openai/chat-completions-provider.ts +37 -83
  414. package/src/providers/openai/responses-provider.ts +50 -46
  415. package/src/providers/openrouter/client.ts +5 -0
  416. package/src/providers/provider-send-message.ts +10 -0
  417. package/src/providers/ratelimit.ts +10 -0
  418. package/src/providers/registry.ts +1 -1
  419. package/src/providers/retry.ts +10 -0
  420. package/src/providers/types.ts +22 -0
  421. package/src/providers/usage-tracking.ts +10 -0
  422. package/src/runtime/__tests__/channel-verification-service.test.ts +133 -0
  423. package/src/runtime/__tests__/guardian-vellum-migration.test.ts +184 -0
  424. package/src/runtime/__tests__/is-guardian-bound-for-channel.test.ts +66 -0
  425. package/src/runtime/__tests__/local-principal-trust.test.ts +162 -0
  426. package/src/runtime/__tests__/member-verdict-cache.test.ts +119 -0
  427. package/src/runtime/__tests__/trust-verdict-consumer.test.ts +402 -123
  428. package/src/runtime/access-request-helper.ts +18 -39
  429. package/src/runtime/actor-trust-resolver.ts +46 -19
  430. package/src/runtime/anchored-guardian.test.ts +109 -0
  431. package/src/runtime/anchored-guardian.ts +86 -0
  432. package/src/runtime/assistant-event-hub.ts +1 -1
  433. package/src/runtime/assistant-stream-state.ts +9 -2
  434. package/src/runtime/auth/__tests__/require-bound-guardian.test.ts +99 -0
  435. package/src/runtime/auth/require-bound-guardian.ts +21 -11
  436. package/src/runtime/channel-verification-service.ts +56 -31
  437. package/src/runtime/confirmation-request-guardian-bridge.ts +3 -3
  438. package/src/runtime/guardian-vellum-migration.ts +69 -8
  439. package/src/runtime/invite-redemption-service.ts +213 -187
  440. package/src/runtime/local-actor-identity.test.ts +108 -0
  441. package/src/runtime/local-actor-identity.ts +85 -13
  442. package/src/runtime/local-principal-trust.ts +52 -0
  443. package/src/runtime/member-verdict-cache.ts +0 -0
  444. package/src/runtime/pending-interactions.ts +11 -1
  445. package/src/runtime/routes/__tests__/channel-verification-revoke.test.ts +56 -5
  446. package/src/runtime/routes/__tests__/channel-verification-routes.test.ts +1 -1
  447. package/src/runtime/routes/__tests__/contact-routes.test.ts +305 -0
  448. package/src/runtime/routes/__tests__/global-search-routes.test.ts +92 -0
  449. package/src/runtime/routes/__tests__/http-adapter-actor-header.test.ts +129 -0
  450. package/src/runtime/routes/__tests__/surface-action-routes.test.ts +188 -0
  451. package/src/runtime/routes/browser-routes.ts +1 -1
  452. package/src/runtime/routes/canonical-guardian-expiry-sweep.ts +13 -5
  453. package/src/runtime/routes/channel-verification-routes.ts +3 -3
  454. package/src/runtime/routes/contact-routes.ts +48 -57
  455. package/src/runtime/routes/conversation-cli-routes.ts +4 -5
  456. package/src/runtime/routes/conversation-list-routes.ts +4 -7
  457. package/src/runtime/routes/conversation-query-routes.ts +72 -0
  458. package/src/runtime/routes/conversation-routes.ts +84 -85
  459. package/src/runtime/routes/events-routes.ts +2 -2
  460. package/src/runtime/routes/global-search-routes.ts +3 -1
  461. package/src/runtime/routes/guardian-action-routes.ts +4 -5
  462. package/src/runtime/routes/host-app-control-routes.ts +5 -4
  463. package/src/runtime/routes/host-bash-routes.ts +5 -4
  464. package/src/runtime/routes/host-browser-routes.ts +9 -11
  465. package/src/runtime/routes/host-cu-routes.ts +5 -4
  466. package/src/runtime/routes/host-file-routes.ts +5 -4
  467. package/src/runtime/routes/host-transfer-routes.ts +6 -6
  468. package/src/runtime/routes/http-adapter.ts +16 -1
  469. package/src/runtime/routes/identity-routes.ts +3 -2
  470. package/src/runtime/routes/inbound-message-handler.ts +5 -5
  471. package/src/runtime/routes/inbound-stages/acl-enforcement.test.ts +97 -5
  472. package/src/runtime/routes/inbound-stages/acl-enforcement.ts +61 -59
  473. package/src/runtime/routes/inbound-stages/background-dispatch.ts +13 -5
  474. package/src/runtime/routes/inbound-stages/escalation-intercept.ts +7 -7
  475. package/src/runtime/routes/inbound-stages/guardian-activation-intercept.test.ts +21 -8
  476. package/src/runtime/routes/inbound-stages/guardian-activation-intercept.ts +14 -3
  477. package/src/runtime/routes/inbound-stages/reaction-intercept.ts +19 -0
  478. package/src/runtime/routes/index.ts +2 -0
  479. package/src/runtime/routes/llm-context-normalization.ts +83 -0
  480. package/src/runtime/routes/mcp-auth-routes.ts +171 -19
  481. package/src/runtime/routes/migration-rollback-routes.ts +4 -3
  482. package/src/runtime/routes/migration-routes.ts +4 -1
  483. package/src/runtime/routes/onboarding-checkin-routes.ts +86 -0
  484. package/src/runtime/routes/settings-routes.ts +8 -3
  485. package/src/runtime/routes/subagents-routes.ts +5 -0
  486. package/src/runtime/routes/surface-action-routes.ts +42 -56
  487. package/src/runtime/services/__tests__/conversation-serializer.test.ts +1 -0
  488. package/src/runtime/services/conversation-serializer.ts +13 -58
  489. package/src/runtime/tool-grant-request-helper.ts +3 -3
  490. package/src/runtime/trust-verdict-consumer.ts +111 -40
  491. package/src/runtime/verification-outbound-actions.ts +18 -18
  492. package/src/signals/user-message.ts +16 -0
  493. package/src/subagent/__tests__/consult-prompt.test.ts +35 -0
  494. package/src/{plugins/defaults/advisor/__tests__/transcript.test.ts → subagent/__tests__/consult-transcript.test.ts} +47 -10
  495. package/src/{plugins/defaults/advisor/steering.ts → subagent/consult-prompt.ts} +22 -32
  496. package/src/{plugins/defaults/advisor/transcript.ts → subagent/consult-transcript.ts} +18 -8
  497. package/src/subagent/index.ts +1 -1
  498. package/src/subagent/manager.ts +254 -33
  499. package/src/subagent/types.ts +11 -4
  500. package/src/telemetry/types.ts +34 -1
  501. package/src/telemetry/usage-telemetry-reporter.test.ts +3 -2
  502. package/src/telemetry/usage-telemetry-reporter.ts +87 -3
  503. package/src/tools/ask-question/ask-question-tool.test.ts +29 -0
  504. package/src/tools/ask-question/ask-question-tool.ts +13 -0
  505. package/src/tools/executor.ts +4 -4
  506. package/src/tools/filesystem/search.ts +543 -0
  507. package/src/tools/registry.ts +38 -0
  508. package/src/tools/shared/filesystem/path-policy.ts +12 -5
  509. package/src/tools/subagent/consult-deadline.ts +49 -0
  510. package/src/tools/subagent/spawn.ts +234 -5
  511. package/src/tools/tool-approval-handler.ts +1 -1
  512. package/src/tools/tool-defaults.ts +9 -2
  513. package/src/tools/tool-manifest.ts +3 -0
  514. package/src/tools/types.ts +131 -25
  515. package/src/tools/workspace-tools/loader.ts +348 -244
  516. package/src/util/errors.ts +26 -1
  517. package/src/util/logger.ts +9 -0
  518. package/src/util/platform.ts +19 -0
  519. package/src/util/telemetry-db-path.ts +24 -0
  520. package/src/workflows/library.test.ts +140 -0
  521. package/src/workflows/library.ts +82 -28
  522. package/src/workspace/migrations/017-seed-persona-dirs.ts +3 -34
  523. package/src/workspace/migrations/019-scope-journal-to-guardian.ts +3 -24
  524. package/src/workspace/migrations/031-drop-user-md.ts +232 -148
  525. package/src/workspace/migrations/048-remove-workspace-hooks.ts +14 -66
  526. package/src/workspace/migrations/111-prune-seeded-callsite-defaults.ts +134 -0
  527. package/src/workspace/migrations/112-remove-advisor-callsite-override.ts +64 -0
  528. package/src/workspace/migrations/registry.ts +4 -0
  529. package/src/__tests__/workspace-tools-watcher-flag.test.ts +0 -70
  530. package/src/daemon/workspace-tools-watcher.ts +0 -328
  531. package/src/memory/migrations/registry.ts +0 -573
  532. package/src/plugins/defaults/advisor/__tests__/advisor-gate.test.ts +0 -56
  533. package/src/plugins/defaults/advisor/__tests__/advisor-state-store.test.ts +0 -43
  534. package/src/plugins/defaults/advisor/__tests__/agent-loop-integration.test.ts +0 -137
  535. package/src/plugins/defaults/advisor/__tests__/consult.test.ts +0 -153
  536. package/src/plugins/defaults/advisor/__tests__/hooks.test.ts +0 -138
  537. package/src/plugins/defaults/advisor/advisor-gate.ts +0 -29
  538. package/src/plugins/defaults/advisor/advisor-state-store.ts +0 -94
  539. package/src/plugins/defaults/advisor/config.ts +0 -21
  540. package/src/plugins/defaults/advisor/consult.ts +0 -93
  541. package/src/plugins/defaults/advisor/hooks/post-model-call.ts +0 -34
  542. package/src/plugins/defaults/advisor/hooks/pre-model-call.ts +0 -30
  543. package/src/plugins/defaults/advisor/hooks/user-prompt-submit.ts +0 -19
  544. package/src/plugins/defaults/advisor/package.json +0 -14
  545. package/src/plugins/defaults/advisor/tools/advisor.ts +0 -65
  546. package/src/providers/openai/__tests__/api-error-detail.test.ts +0 -120
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.10.2
6
+ version: 0.10.3
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
@@ -3973,6 +3973,8 @@ paths:
3973
3973
  anyOf:
3974
3974
  - type: string
3975
3975
  - type: "null"
3976
+ resolutionFailed:
3977
+ type: boolean
3976
3978
  guardianExternalUserId:
3977
3979
  type: string
3978
3980
  guardianDeliveryChatId:
@@ -4839,14 +4841,18 @@ paths:
4839
4841
  type: string
4840
4842
  role:
4841
4843
  type: string
4844
+ enum:
4845
+ - guardian
4846
+ - contact
4842
4847
  notes:
4843
4848
  anyOf:
4844
4849
  - type: string
4845
4850
  - type: "null"
4846
4851
  contactType:
4847
- anyOf:
4848
- - type: string
4849
- - type: "null"
4852
+ type: string
4853
+ enum:
4854
+ - human
4855
+ - assistant
4850
4856
  lastInteraction:
4851
4857
  anyOf:
4852
4858
  - type: number
@@ -4913,20 +4919,15 @@ paths:
4913
4919
  - address
4914
4920
  - isPrimary
4915
4921
  - externalUserId
4916
- - status
4917
- - policy
4918
- - verifiedAt
4919
- - verifiedVia
4920
4922
  - lastSeenAt
4921
4923
  - interactionCount
4922
4924
  - lastInteraction
4923
- - revokedReason
4924
- - blockedReason
4925
4925
  additionalProperties: false
4926
4926
  required:
4927
4927
  - id
4928
4928
  - displayName
4929
4929
  - role
4930
+ - contactType
4930
4931
  - interactionCount
4931
4932
  - createdAt
4932
4933
  - updatedAt
@@ -5000,14 +5001,18 @@ paths:
5000
5001
  type: string
5001
5002
  role:
5002
5003
  type: string
5004
+ enum:
5005
+ - guardian
5006
+ - contact
5003
5007
  notes:
5004
5008
  anyOf:
5005
5009
  - type: string
5006
5010
  - type: "null"
5007
5011
  contactType:
5008
- anyOf:
5009
- - type: string
5010
- - type: "null"
5012
+ type: string
5013
+ enum:
5014
+ - human
5015
+ - assistant
5011
5016
  lastInteraction:
5012
5017
  anyOf:
5013
5018
  - type: number
@@ -5074,20 +5079,15 @@ paths:
5074
5079
  - address
5075
5080
  - isPrimary
5076
5081
  - externalUserId
5077
- - status
5078
- - policy
5079
- - verifiedAt
5080
- - verifiedVia
5081
5082
  - lastSeenAt
5082
5083
  - interactionCount
5083
5084
  - lastInteraction
5084
- - revokedReason
5085
- - blockedReason
5086
5085
  additionalProperties: false
5087
5086
  required:
5088
5087
  - id
5089
5088
  - displayName
5090
5089
  - role
5090
+ - contactType
5091
5091
  - interactionCount
5092
5092
  - createdAt
5093
5093
  - updatedAt
@@ -5130,14 +5130,18 @@ paths:
5130
5130
  type: string
5131
5131
  role:
5132
5132
  type: string
5133
+ enum:
5134
+ - guardian
5135
+ - contact
5133
5136
  notes:
5134
5137
  anyOf:
5135
5138
  - type: string
5136
5139
  - type: "null"
5137
5140
  contactType:
5138
- anyOf:
5139
- - type: string
5140
- - type: "null"
5141
+ type: string
5142
+ enum:
5143
+ - human
5144
+ - assistant
5141
5145
  lastInteraction:
5142
5146
  anyOf:
5143
5147
  - type: number
@@ -5204,20 +5208,15 @@ paths:
5204
5208
  - address
5205
5209
  - isPrimary
5206
5210
  - externalUserId
5207
- - status
5208
- - policy
5209
- - verifiedAt
5210
- - verifiedVia
5211
5211
  - lastSeenAt
5212
5212
  - interactionCount
5213
5213
  - lastInteraction
5214
- - revokedReason
5215
- - blockedReason
5216
5214
  additionalProperties: false
5217
5215
  required:
5218
5216
  - id
5219
5217
  - displayName
5220
5218
  - role
5219
+ - contactType
5221
5220
  - interactionCount
5222
5221
  - createdAt
5223
5222
  - updatedAt
@@ -5505,14 +5504,18 @@ paths:
5505
5504
  type: string
5506
5505
  role:
5507
5506
  type: string
5507
+ enum:
5508
+ - guardian
5509
+ - contact
5508
5510
  notes:
5509
5511
  anyOf:
5510
5512
  - type: string
5511
5513
  - type: "null"
5512
5514
  contactType:
5513
- anyOf:
5514
- - type: string
5515
- - type: "null"
5515
+ type: string
5516
+ enum:
5517
+ - human
5518
+ - assistant
5516
5519
  lastInteraction:
5517
5520
  anyOf:
5518
5521
  - type: number
@@ -5579,20 +5582,15 @@ paths:
5579
5582
  - address
5580
5583
  - isPrimary
5581
5584
  - externalUserId
5582
- - status
5583
- - policy
5584
- - verifiedAt
5585
- - verifiedVia
5586
5585
  - lastSeenAt
5587
5586
  - interactionCount
5588
5587
  - lastInteraction
5589
- - revokedReason
5590
- - blockedReason
5591
5588
  additionalProperties: false
5592
5589
  required:
5593
5590
  - id
5594
5591
  - displayName
5595
5592
  - role
5593
+ - contactType
5596
5594
  - interactionCount
5597
5595
  - createdAt
5598
5596
  - updatedAt
@@ -5700,14 +5698,18 @@ paths:
5700
5698
  type: string
5701
5699
  role:
5702
5700
  type: string
5701
+ enum:
5702
+ - guardian
5703
+ - contact
5703
5704
  notes:
5704
5705
  anyOf:
5705
5706
  - type: string
5706
5707
  - type: "null"
5707
5708
  contactType:
5708
- anyOf:
5709
- - type: string
5710
- - type: "null"
5709
+ type: string
5710
+ enum:
5711
+ - human
5712
+ - assistant
5711
5713
  lastInteraction:
5712
5714
  anyOf:
5713
5715
  - type: number
@@ -5774,20 +5776,15 @@ paths:
5774
5776
  - address
5775
5777
  - isPrimary
5776
5778
  - externalUserId
5777
- - status
5778
- - policy
5779
- - verifiedAt
5780
- - verifiedVia
5781
5779
  - lastSeenAt
5782
5780
  - interactionCount
5783
5781
  - lastInteraction
5784
- - revokedReason
5785
- - blockedReason
5786
5782
  additionalProperties: false
5787
5783
  required:
5788
5784
  - id
5789
5785
  - displayName
5790
5786
  - role
5787
+ - contactType
5791
5788
  - interactionCount
5792
5789
  - createdAt
5793
5790
  - updatedAt
@@ -8406,6 +8403,22 @@ paths:
8406
8403
  anyOf:
8407
8404
  - type: number
8408
8405
  - type: "null"
8406
+ apiErrorCode:
8407
+ anyOf:
8408
+ - type: string
8409
+ - type: "null"
8410
+ apiErrorType:
8411
+ anyOf:
8412
+ - type: string
8413
+ - type: "null"
8414
+ apiErrorParam:
8415
+ anyOf:
8416
+ - type: string
8417
+ - type: "null"
8418
+ requestId:
8419
+ anyOf:
8420
+ - type: string
8421
+ - type: "null"
8409
8422
  additionalProperties: false
8410
8423
  - type: "null"
8411
8424
  required:
@@ -14709,12 +14722,49 @@ paths:
14709
14722
  type: string
14710
14723
  disabled:
14711
14724
  type: boolean
14725
+ headers:
14726
+ type: object
14727
+ propertyNames:
14728
+ type: string
14729
+ additionalProperties:
14730
+ type: string
14712
14731
  required:
14713
14732
  - name
14714
14733
  - transportType
14715
14734
  responses:
14716
14735
  "200":
14717
14736
  description: Successful response
14737
+ /v1/internal/mcp/auth/revoke:
14738
+ post:
14739
+ operationId: internal_mcp_auth_revoke_post
14740
+ summary: Revoke MCP OAuth credentials
14741
+ description: Deletes stored OAuth tokens for an MCP server and triggers a reload.
14742
+ tags:
14743
+ - internal
14744
+ requestBody:
14745
+ required: true
14746
+ content:
14747
+ application/json:
14748
+ schema:
14749
+ type: object
14750
+ properties:
14751
+ serverId:
14752
+ type: string
14753
+ required:
14754
+ - serverId
14755
+ responses:
14756
+ "200":
14757
+ description: Successful response
14758
+ content:
14759
+ application/json:
14760
+ schema:
14761
+ type: object
14762
+ properties:
14763
+ revoked:
14764
+ type: boolean
14765
+ required:
14766
+ - revoked
14767
+ additionalProperties: false
14718
14768
  /v1/internal/mcp/auth/start:
14719
14769
  post:
14720
14770
  operationId: internal_mcp_auth_start_post
@@ -14794,6 +14844,8 @@ paths:
14794
14844
  type: boolean
14795
14845
  defaultRiskLevel:
14796
14846
  type: string
14847
+ hasOAuth:
14848
+ type: boolean
14797
14849
  allowedTools:
14798
14850
  type: array
14799
14851
  items:
@@ -14808,6 +14860,7 @@ paths:
14808
14860
  - transport
14809
14861
  - enabled
14810
14862
  - defaultRiskLevel
14863
+ - hasOAuth
14811
14864
  additionalProperties: false
14812
14865
  required:
14813
14866
  - servers
@@ -14936,6 +14989,14 @@ paths:
14936
14989
  items:
14937
14990
  type: string
14938
14991
  - type: "null"
14992
+ headers:
14993
+ anyOf:
14994
+ - type: object
14995
+ propertyNames:
14996
+ type: string
14997
+ additionalProperties:
14998
+ type: string
14999
+ - type: "null"
14939
15000
  required:
14940
15001
  - name
14941
15002
  responses:
@@ -15336,6 +15397,22 @@ paths:
15336
15397
  anyOf:
15337
15398
  - type: number
15338
15399
  - type: "null"
15400
+ apiErrorCode:
15401
+ anyOf:
15402
+ - type: string
15403
+ - type: "null"
15404
+ apiErrorType:
15405
+ anyOf:
15406
+ - type: string
15407
+ - type: "null"
15408
+ apiErrorParam:
15409
+ anyOf:
15410
+ - type: string
15411
+ - type: "null"
15412
+ requestId:
15413
+ anyOf:
15414
+ - type: string
15415
+ - type: "null"
15339
15416
  additionalProperties: false
15340
15417
  - type: "null"
15341
15418
  required:
@@ -17793,6 +17870,22 @@ paths:
17793
17870
  anyOf:
17794
17871
  - type: number
17795
17872
  - type: "null"
17873
+ apiErrorCode:
17874
+ anyOf:
17875
+ - type: string
17876
+ - type: "null"
17877
+ apiErrorType:
17878
+ anyOf:
17879
+ - type: string
17880
+ - type: "null"
17881
+ apiErrorParam:
17882
+ anyOf:
17883
+ - type: string
17884
+ - type: "null"
17885
+ requestId:
17886
+ anyOf:
17887
+ - type: string
17888
+ - type: "null"
17796
17889
  additionalProperties: false
17797
17890
  - type: "null"
17798
17891
  required:
@@ -19605,6 +19698,56 @@ paths:
19605
19698
  responses:
19606
19699
  "200":
19607
19700
  description: Successful response
19701
+ /v1/onboarding/checkin:
19702
+ post:
19703
+ operationId: onboarding_checkin_post
19704
+ summary: Schedule the onboarding Day 2 check-in
19705
+ description:
19706
+ "Find the first open 15-minute slot between 12pm and 5pm tomorrow (widening to 8am–8pm if booked) on the
19707
+ user's Google Calendar and create the Day 2 Check-in event. Best-effort: returns scheduled=false when no
19708
+ calendar is connected or the calendar scope wasn't granted."
19709
+ tags:
19710
+ - onboarding
19711
+ requestBody:
19712
+ required: true
19713
+ content:
19714
+ application/json:
19715
+ schema:
19716
+ type: object
19717
+ properties:
19718
+ userName:
19719
+ type: string
19720
+ assistantName:
19721
+ type: string
19722
+ timezone:
19723
+ type: string
19724
+ responses:
19725
+ "200":
19726
+ description: Successful response
19727
+ content:
19728
+ application/json:
19729
+ schema:
19730
+ type: object
19731
+ properties:
19732
+ scheduled:
19733
+ type: boolean
19734
+ reason:
19735
+ type: string
19736
+ eventId:
19737
+ type: string
19738
+ htmlLink:
19739
+ anyOf:
19740
+ - type: string
19741
+ - type: "null"
19742
+ start:
19743
+ type: string
19744
+ end:
19745
+ type: string
19746
+ timeZone:
19747
+ type: string
19748
+ required:
19749
+ - scheduled
19750
+ additionalProperties: false
19608
19751
  /v1/pages/{appId}:
19609
19752
  get:
19610
19753
  operationId: pages_by_appId_get
@@ -25978,6 +26121,13 @@ paths:
25978
26121
  type: boolean
25979
26122
  messageId:
25980
26123
  type: string
26124
+ toolUseId:
26125
+ type: string
26126
+ input:
26127
+ type: object
26128
+ propertyNames:
26129
+ type: string
26130
+ additionalProperties: {}
25981
26131
  required:
25982
26132
  - type
25983
26133
  - content
@@ -29533,12 +29683,6 @@ components:
29533
29683
  - $ref: "#/components/schemas/ProfileStatus"
29534
29684
  - type: "null"
29535
29685
  - type: "null"
29536
- advisorEnabled:
29537
- anyOf:
29538
- - anyOf:
29539
- - type: boolean
29540
- - type: "null"
29541
- - type: "null"
29542
29686
  mix:
29543
29687
  anyOf:
29544
29688
  - minItems: 2
@@ -30266,10 +30410,6 @@ components:
30266
30410
  anyOf:
30267
30411
  - $ref: "#/components/schemas/ProfileStatus"
30268
30412
  - type: "null"
30269
- advisorEnabled:
30270
- anyOf:
30271
- - type: boolean
30272
- - type: "null"
30273
30413
  mix:
30274
30414
  minItems: 2
30275
30415
  type: array
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vellumai/assistant",
3
- "version": "0.10.2",
3
+ "version": "0.10.3-dev.202606252046.9075fd5",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "exports": {
@@ -24,6 +24,7 @@
24
24
  "lint:circular": "bun run scripts/check-circular-deps.ts",
25
25
  "lint:unused:production": "knip --production --include exports",
26
26
  "typecheck": "bunx tsc --noEmit",
27
+ "typecheck:fast": "bunx tsgo --noEmit",
27
28
  "test": "bash scripts/test.sh",
28
29
  "test:coverage": "COVERAGE=true bash scripts/test.sh",
29
30
  "test:stable": "EXCLUDE_EXPERIMENTAL=true bash scripts/test.sh",
@@ -66,6 +67,7 @@
66
67
  "playwright": "1.58.2",
67
68
  "postgres": "3.4.8",
68
69
  "quickjs-emscripten": "0.32.0",
70
+ "re2js": "2.8.3",
69
71
  "rrule": "2.8.1",
70
72
  "semver": "7.8.0",
71
73
  "stemmer": "2.0.1",
@@ -105,6 +107,7 @@
105
107
  "@types/node": "25.5.0",
106
108
  "@types/semver": "7.5.8",
107
109
  "@types/uuid": "10.0.0",
110
+ "@typescript/native-preview": "7.0.0-dev.20260624.1",
108
111
  "ajv": "8.18.0",
109
112
  "drizzle-kit": "0.31.10",
110
113
  "eslint": "10.0.3",
package/scripts/test.sh CHANGED
@@ -169,6 +169,7 @@ printf '%s\n' "${test_files[@]}" | xargs -P "${WORKERS}" -I {} bash -c '
169
169
 
170
170
  safe_name="$(echo "${test_file}" | tr "/" "_")"
171
171
  out_file="${results_dir}/${safe_name}.out"
172
+ base="$(basename "${test_file}")"
172
173
 
173
174
  coverage_args=""
174
175
  if [[ "${coverage_enabled}" == "true" ]]; then
@@ -185,28 +186,48 @@ printf '%s\n' "${test_files[@]}" | xargs -P "${WORKERS}" -I {} bash -c '
185
186
  timeout_cmd="gtimeout"
186
187
  fi
187
188
 
188
- start_ms=$(perl -MTime::HiRes=time -e "printf \"%d\", time*1000")
189
-
190
- if [[ -n "${timeout_cmd}" ]]; then
191
- if [[ "${exclude_exp}" == "true" ]]; then
192
- "${timeout_cmd}" -k 10 "${per_test_timeout}" bun test ${coverage_args} --test-name-pattern "^(?!.*\\[experimental\\])" "${test_file}" > "${out_file}" 2>&1
193
- else
194
- "${timeout_cmd}" -k 10 "${per_test_timeout}" bun test ${coverage_args} "${test_file}" > "${out_file}" 2>&1
195
- fi
196
- else
197
- if [[ "${exclude_exp}" == "true" ]]; then
198
- bun test ${coverage_args} --test-name-pattern "^(?!.*\\[experimental\\])" "${test_file}" > "${out_file}" 2>&1
189
+ # Run the test file in its own bun process. Wrapped in a function so a
190
+ # transient infrastructure crash can be retried without duplicating the
191
+ # four-way (timeout × experimental-filter) invocation.
192
+ run_bun_test() {
193
+ if [[ -n "${timeout_cmd}" ]]; then
194
+ if [[ "${exclude_exp}" == "true" ]]; then
195
+ "${timeout_cmd}" -k 10 "${per_test_timeout}" bun test ${coverage_args} --test-name-pattern "^(?!.*\\[experimental\\])" "${test_file}" > "${out_file}" 2>&1
196
+ else
197
+ "${timeout_cmd}" -k 10 "${per_test_timeout}" bun test ${coverage_args} "${test_file}" > "${out_file}" 2>&1
198
+ fi
199
199
  else
200
- bun test ${coverage_args} "${test_file}" > "${out_file}" 2>&1
200
+ if [[ "${exclude_exp}" == "true" ]]; then
201
+ bun test ${coverage_args} --test-name-pattern "^(?!.*\\[experimental\\])" "${test_file}" > "${out_file}" 2>&1
202
+ else
203
+ bun test ${coverage_args} "${test_file}" > "${out_file}" 2>&1
204
+ fi
201
205
  fi
202
- fi
206
+ }
207
+
208
+ start_ms=$(perl -MTime::HiRes=time -e "printf \"%d\", time*1000")
209
+
210
+ run_bun_test
203
211
  exit_code=$?
204
212
 
213
+ # Retry once on a transient bun loader/runtime crash. Bun occasionally aborts
214
+ # a worker before its tests run — e.g. "# Unhandled error between tests" with
215
+ # "error: ENOENT reading <corrupted path>" — failing the whole job even though
216
+ # the file is green on a clean process. Such a crash truncates the run before
217
+ # any assertion executes, so it prints no "(fail)" line; genuine assertion
218
+ # failures do, and are reported immediately without a retry (fast feedback, no
219
+ # masking of intermittent real failures). Timeouts (124/137) are handled by the
220
+ # hang branch below, not here.
221
+ if [[ ${exit_code} -ne 0 && ${exit_code} -ne 124 && ${exit_code} -ne 137 ]] \
222
+ && ! grep -q "^(fail)" "${out_file}" 2>/dev/null; then
223
+ echo " ↻ ${base} (transient crash, exit ${exit_code} — retrying once)"
224
+ run_bun_test
225
+ exit_code=$?
226
+ fi
227
+
205
228
  end_ms=$(perl -MTime::HiRes=time -e "printf \"%d\", time*1000")
206
229
  elapsed=$(( end_ms - start_ms ))
207
230
 
208
- base="$(basename "${test_file}")"
209
-
210
231
  # Record duration for longest-first scheduling in future runs.
211
232
  # Write the repo-relative path (not the basename) so the lookup in future
212
233
  # runs disambiguates files that share a basename across directories.
@@ -29,6 +29,17 @@ mock.module("../config/env.js", () => ({
29
29
  checkUnrecognizedEnvVars: () => {},
30
30
  }));
31
31
 
32
+ // No gateway in tests: force the reader to miss so resolution exercises the
33
+ // local-store bootstrap fallback deterministically.
34
+ let fakeGuardianDelivery: { principalId?: string | null } | null = null;
35
+ mock.module("../contacts/guardian-delivery-reader.js", () => ({
36
+ getGuardianDelivery: async () =>
37
+ fakeGuardianDelivery ? [fakeGuardianDelivery] : null,
38
+ guardianForChannel: (list: { principalId?: string | null }[]) => list[0],
39
+ invalidateGuardianDeliveryCache: () => {},
40
+ onContactChange: () => {},
41
+ }));
42
+
32
43
  import { getDb } from "../memory/db-connection.js";
33
44
  import { initializeDb } from "../memory/db-init.js";
34
45
  import { resetExternalAssistantIdCache } from "../runtime/auth/external-assistant-id.js";
@@ -51,6 +62,7 @@ await initializeDb();
51
62
  beforeEach(async () => {
52
63
  initAuthSigningKey(TEST_KEY);
53
64
  resetExternalAssistantIdCache();
65
+ fakeGuardianDelivery = null;
54
66
  resetDbForTesting();
55
67
  await initializeDb();
56
68
  });
@@ -60,8 +72,8 @@ beforeEach(async () => {
60
72
  // ---------------------------------------------------------------------------
61
73
 
62
74
  describe("resolveLocalTrustContext", () => {
63
- test("falls back to minimal trust context when no vellum binding exists", () => {
64
- const ctx = resolveLocalTrustContext();
75
+ test("falls back to minimal trust context when no vellum binding exists", async () => {
76
+ const ctx = await resolveLocalTrustContext();
65
77
  expect(ctx.sourceChannel).toBe("vellum");
66
78
  });
67
79
  });
@@ -71,38 +83,48 @@ describe("resolveLocalTrustContext", () => {
71
83
  // ---------------------------------------------------------------------------
72
84
 
73
85
  describe("resolveLocalAuthContext", () => {
74
- test("returns AuthContext with local principal type", () => {
75
- const ctx = resolveLocalAuthContext("session-123");
86
+ test("returns AuthContext with local principal type", async () => {
87
+ const ctx = await resolveLocalAuthContext("session-123");
76
88
  expect(ctx.principalType).toBe("local");
77
89
  });
78
90
 
79
- test("subject follows local:self:<conversationId> pattern", () => {
80
- const ctx = resolveLocalAuthContext("session-abc");
91
+ test("subject follows local:self:<conversationId> pattern", async () => {
92
+ const ctx = await resolveLocalAuthContext("session-abc");
81
93
  expect(ctx.subject).toBe("local:self:session-abc");
82
94
  });
83
95
 
84
- test("assistantId is always self", () => {
85
- const ctx = resolveLocalAuthContext("session-123");
96
+ test("assistantId is always self", async () => {
97
+ const ctx = await resolveLocalAuthContext("session-123");
86
98
  expect(ctx.assistantId).toBe("self");
87
99
  });
88
100
 
89
- test("uses local_v1 scope profile with local.all scope", () => {
90
- const ctx = resolveLocalAuthContext("session-123");
101
+ test("uses local_v1 scope profile with local.all scope", async () => {
102
+ const ctx = await resolveLocalAuthContext("session-123");
91
103
  expect(ctx.scopeProfile).toBe("local_v1");
92
104
  expect(ctx.scopes.has("local.all")).toBe(true);
93
105
  });
94
106
 
95
- test("actorPrincipalId is undefined when no vellum binding exists", () => {
107
+ test("actorPrincipalId is undefined when no vellum binding exists", async () => {
96
108
  const db = getDb();
97
109
  db.run("DELETE FROM contact_channels");
98
110
  db.run("DELETE FROM contacts");
99
111
 
100
- const ctx = resolveLocalAuthContext("session-123");
112
+ const ctx = await resolveLocalAuthContext("session-123");
101
113
  expect(ctx.actorPrincipalId).toBeUndefined();
102
114
  });
103
115
 
104
- test("conversationId matches the provided argument", () => {
105
- const ctx = resolveLocalAuthContext("my-session");
116
+ test("resolves the guardian principal from the gateway when available", async () => {
117
+ const db = getDb();
118
+ db.run("DELETE FROM contact_channels");
119
+ db.run("DELETE FROM contacts");
120
+ fakeGuardianDelivery = { principalId: "gateway-guardian-id" };
121
+
122
+ const ctx = await resolveLocalAuthContext("session-123");
123
+ expect(ctx.actorPrincipalId).toBe("gateway-guardian-id");
124
+ });
125
+
126
+ test("conversationId matches the provided argument", async () => {
127
+ const ctx = await resolveLocalAuthContext("my-session");
106
128
  expect(ctx.conversationId).toBe("my-session");
107
129
  });
108
130
  });