@vellumai/assistant 0.8.4 → 0.8.5

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 (438) hide show
  1. package/ARCHITECTURE.md +2 -2
  2. package/docs/browser-use-architecture-phase2.md +1 -1
  3. package/knip.json +2 -1
  4. package/openapi.yaml +809 -11
  5. package/package.json +1 -1
  6. package/src/__tests__/anthropic-provider.test.ts +34 -37
  7. package/src/__tests__/assistant-event-hub-self-exclusion.test.ts +293 -0
  8. package/src/__tests__/assistant-feature-flags-integration.test.ts +3 -3
  9. package/src/__tests__/audit-log-rotation.test.ts +70 -16
  10. package/src/__tests__/background-workers-disk-pressure.test.ts +3 -3
  11. package/src/__tests__/btw-routes.test.ts +2 -3
  12. package/src/__tests__/call-controller.test.ts +0 -1
  13. package/src/__tests__/cancel-resolves-conversation-key.test.ts +1 -1
  14. package/src/__tests__/channel-guardian.test.ts +3 -3
  15. package/src/__tests__/checker.test.ts +6 -15
  16. package/src/__tests__/compaction-events.test.ts +1 -0
  17. package/src/__tests__/compactor-call-site-logging.test.ts +214 -0
  18. package/src/__tests__/computer-use-skill-manifest-regression.test.ts +5 -11
  19. package/src/__tests__/computer-use-tools.test.ts +2 -4
  20. package/src/__tests__/confirmation-request-guardian-bridge.test.ts +0 -1
  21. package/src/__tests__/conversation-agent-loop-disk-pressure.test.ts +1 -1
  22. package/src/__tests__/conversation-agent-loop-inference-profile.test.ts +1 -1
  23. package/src/__tests__/conversation-agent-loop-overflow.test.ts +197 -2
  24. package/src/__tests__/conversation-agent-loop.test.ts +163 -122
  25. package/src/__tests__/conversation-app-control-instantiation.test.ts +2 -5
  26. package/src/__tests__/conversation-clear-safety.test.ts +25 -25
  27. package/src/__tests__/conversation-delete-schedule-cleanup.test.ts +1 -1
  28. package/src/__tests__/conversation-disk-view-integration.test.ts +2 -2
  29. package/src/__tests__/conversation-error.test.ts +31 -0
  30. package/src/__tests__/conversation-fork-crud.test.ts +178 -15
  31. package/src/__tests__/conversation-lifecycle.test.ts +52 -11
  32. package/src/__tests__/{conversation-load-cleaned-at.test.ts → conversation-load-history-stripped.test.ts} +13 -13
  33. package/src/__tests__/conversation-provider-retry-repair.test.ts +1 -0
  34. package/src/__tests__/conversation-routes-disk-view.test.ts +109 -0
  35. package/src/__tests__/conversation-routes-slash-commands.test.ts +35 -0
  36. package/src/__tests__/conversation-skill-tools.test.ts +2 -5
  37. package/src/__tests__/conversation-store.test.ts +1 -1
  38. package/src/__tests__/conversation-sync-tags.test.ts +99 -32
  39. package/src/__tests__/conversation-workspace-cache-state.test.ts +1 -0
  40. package/src/__tests__/conversation-workspace-injection.test.ts +1 -1
  41. package/src/__tests__/conversation-workspace-tool-tracking.test.ts +1 -1
  42. package/src/__tests__/credential-execution-feature-gates.test.ts +9 -7
  43. package/src/__tests__/credential-execution-tools.test.ts +6 -6
  44. package/src/__tests__/credential-security-invariants.test.ts +1 -0
  45. package/src/__tests__/credential-vault-unit.test.ts +2 -2
  46. package/src/__tests__/dynamic-page-surface.test.ts +2 -2
  47. package/src/__tests__/email-html-renderer.test.ts +12 -0
  48. package/src/__tests__/gateway-flag-listener.test.ts +237 -0
  49. package/src/__tests__/gemini-provider.test.ts +78 -0
  50. package/src/__tests__/guardian-dispatch.test.ts +0 -1
  51. package/src/__tests__/guardian-outbound-http.test.ts +7 -5
  52. package/src/__tests__/handlers-user-message-approval-consumption.test.ts +1 -1
  53. package/src/__tests__/heartbeat-disk-pressure.test.ts +4 -0
  54. package/src/__tests__/heartbeat-service.test.ts +4 -0
  55. package/src/__tests__/host-shell-tool.test.ts +1 -1
  56. package/src/__tests__/init-feature-flag-overrides.test.ts +5 -6
  57. package/src/__tests__/list-messages-tool-merge.test.ts +70 -11
  58. package/src/__tests__/llm-request-log-call-site.test.ts +136 -0
  59. package/src/__tests__/llm-request-log-source-clickhouse.test.ts +26 -0
  60. package/src/__tests__/llm-resolver.test.ts +77 -9
  61. package/src/__tests__/llm-usage-store.test.ts +66 -0
  62. package/src/__tests__/logger.test.ts +89 -0
  63. package/src/__tests__/mcp-abort-signal.test.ts +2 -2
  64. package/src/__tests__/media-generate-image.test.ts +31 -0
  65. package/src/__tests__/memory-v2-static-injector.test.ts +7 -7
  66. package/src/__tests__/model-intents.test.ts +2 -4
  67. package/src/__tests__/notification-guardian-path.test.ts +0 -1
  68. package/src/__tests__/onboarding-template-contract.test.ts +1 -1
  69. package/src/__tests__/openai-provider.test.ts +46 -0
  70. package/src/__tests__/openai-responses-provider.test.ts +114 -12
  71. package/src/__tests__/pending-interactions-resolved-event.test.ts +0 -1
  72. package/src/__tests__/platform-bash-auto-approve.test.ts +2 -2
  73. package/src/__tests__/platform.test.ts +2 -2
  74. package/src/__tests__/plugin-api-tool-definition.test.ts +92 -0
  75. package/src/__tests__/plugin-bootstrap.test.ts +2 -2
  76. package/src/__tests__/plugin-tool-contribution.test.ts +13 -6
  77. package/src/__tests__/plugin-types.test.ts +3 -2
  78. package/src/__tests__/prechat-onboarding-contract.test.ts +131 -98
  79. package/src/__tests__/pricing.test.ts +12 -0
  80. package/src/__tests__/prune-jobs-changes-parser.test.ts +61 -0
  81. package/src/__tests__/registry.test.ts +2 -8
  82. package/src/__tests__/require-fresh-approval.test.ts +2 -2
  83. package/src/__tests__/runtime-events-sse-bilingual.test.ts +154 -0
  84. package/src/__tests__/shell-tool-proxy-mode.test.ts +1 -1
  85. package/src/__tests__/skill-feature-flags.test.ts +2 -2
  86. package/src/__tests__/skill-projection-feature-flag.test.ts +4 -7
  87. package/src/__tests__/skill-projection.benchmark.test.ts +2 -6
  88. package/src/__tests__/skill-tool-factory.test.ts +1 -1
  89. package/src/__tests__/subagent-notify-parent.test.ts +1 -1
  90. package/src/__tests__/suggestion-routes.test.ts +1 -0
  91. package/src/__tests__/sync-message-contract.test.ts +59 -0
  92. package/src/__tests__/system-prompt.test.ts +145 -131
  93. package/src/__tests__/terminal-tools.test.ts +1 -1
  94. package/src/__tests__/tool-approval-handler.test.ts +1 -5
  95. package/src/__tests__/tool-execute-pipeline.test.ts +2 -2
  96. package/src/__tests__/tool-execution-pipeline.benchmark.test.ts +2 -5
  97. package/src/__tests__/tool-executor-lifecycle-events.test.ts +15 -5
  98. package/src/__tests__/tool-executor.test.ts +9 -62
  99. package/src/__tests__/tool-grant-request-escalation.test.ts +1 -6
  100. package/src/__tests__/trusted-contact-approval-notifier.test.ts +0 -1
  101. package/src/__tests__/trusted-contact-inline-approval-integration.test.ts +1 -6
  102. package/src/__tests__/trusted-contact-multichannel.test.ts +0 -1
  103. package/src/__tests__/ui-file-upload-surface.test.ts +2 -2
  104. package/src/__tests__/usage-routes.test.ts +3 -0
  105. package/src/__tests__/verification-control-plane-policy.test.ts +2 -2
  106. package/src/__tests__/workspace-git-service.test.ts +6 -5
  107. package/src/__tests__/workspace-migration-089-move-memory-tree-out-of-v3.test.ts +86 -0
  108. package/src/acp/__tests__/prepare-agent-env.test.ts +146 -0
  109. package/src/acp/prepare-agent-env.ts +78 -0
  110. package/src/acp/session-manager.ts +1 -1
  111. package/src/agent/loop.ts +8 -0
  112. package/src/api/README.md +5 -0
  113. package/src/api/index.ts +4 -0
  114. package/src/api/package.json +10 -0
  115. package/src/background-wake/background-wake-routes.test.ts +233 -0
  116. package/src/background-wake/runtime-registry.ts +24 -0
  117. package/src/cli/commands/__tests__/browser.test.ts +23 -5
  118. package/src/cli/commands/__tests__/domain-register.test.ts +110 -0
  119. package/src/cli/commands/__tests__/domain-status.test.ts +33 -33
  120. package/src/cli/commands/__tests__/inference-send.test.ts +108 -5
  121. package/src/cli/commands/__tests__/memory-v2-compare-render.test.ts +98 -0
  122. package/src/cli/commands/__tests__/memory-v2.test.ts +1 -0
  123. package/src/cli/commands/__tests__/memory-v3-render.test.ts +340 -0
  124. package/src/cli/commands/browser.ts +247 -0
  125. package/src/cli/commands/domain.ts +91 -41
  126. package/src/cli/commands/inference.ts +93 -40
  127. package/src/cli/commands/memory-v2-compare-render.ts +115 -0
  128. package/src/cli/commands/memory-v2.ts +176 -1
  129. package/src/cli/commands/memory-v3-render.ts +344 -0
  130. package/src/cli/commands/memory-v3.ts +316 -0
  131. package/src/cli/program.ts +2 -0
  132. package/src/config/assistant-feature-flags.ts +21 -9
  133. package/src/config/bundled-skills/document-editor/SKILL.md +11 -2
  134. package/src/config/bundled-skills/document-editor/TOOLS.json +18 -0
  135. package/src/config/bundled-skills/document-editor/tools/document-open.ts +12 -0
  136. package/src/config/bundled-skills/image-studio/SKILL.md +4 -0
  137. package/src/config/bundled-skills/image-studio/tools/media-generate-image.ts +2 -2
  138. package/src/config/bundled-skills/media-processing/tools/ingest-media.ts +13 -8
  139. package/src/config/bundled-skills/messaging/tools/messaging-analyze-style.ts +10 -3
  140. package/src/config/bundled-skills/phone-calls/references/TRANSCRIPTS.md +16 -14
  141. package/src/config/bundled-skills/playbooks/tools/playbook-create.ts +7 -2
  142. package/src/config/bundled-skills/playbooks/tools/playbook-update.ts +7 -2
  143. package/src/config/bundled-tool-registry.ts +2 -0
  144. package/src/config/call-site-defaults.ts +7 -6
  145. package/src/config/feature-flag-registry.json +16 -0
  146. package/src/config/schemas/__tests__/memory-v2.test.ts +213 -1
  147. package/src/config/schemas/call-site-catalog.ts +21 -7
  148. package/src/config/schemas/llm.ts +12 -1
  149. package/src/config/schemas/memory-v2.ts +246 -0
  150. package/src/config/schemas/memory.ts +2 -1
  151. package/src/context/compactor.ts +52 -0
  152. package/src/conversations/__tests__/message-consolidation.test.ts +350 -0
  153. package/src/conversations/message-consolidation.ts +404 -0
  154. package/src/daemon/__tests__/conversation-tool-setup-exclude.test.ts +1 -1
  155. package/src/daemon/__tests__/meet-manifest-loader.test.ts +1 -1
  156. package/src/daemon/conversation-agent-loop-handlers.ts +2 -13
  157. package/src/daemon/conversation-agent-loop.ts +126 -76
  158. package/src/daemon/conversation-error.ts +31 -1
  159. package/src/daemon/conversation-lifecycle.ts +27 -22
  160. package/src/daemon/conversation-runtime-assembly.ts +10 -9
  161. package/src/daemon/conversation-tool-setup.ts +63 -3
  162. package/src/daemon/conversation-usage.ts +2 -0
  163. package/src/daemon/conversation.ts +14 -29
  164. package/src/daemon/disk-pressure-guard.ts +14 -2
  165. package/src/daemon/handlers/config-model.test.ts +1 -0
  166. package/src/daemon/handlers/conversations.ts +11 -3
  167. package/src/daemon/host-browser-proxy.ts +5 -5
  168. package/src/daemon/host-cu-proxy.ts +4 -4
  169. package/src/daemon/host-file-proxy.ts +4 -4
  170. package/src/daemon/host-proxy-base.ts +4 -4
  171. package/src/daemon/host-transfer-proxy.ts +10 -10
  172. package/src/daemon/lifecycle.ts +23 -20
  173. package/src/daemon/meet-manifest-loader.ts +1 -7
  174. package/src/daemon/message-types/conversations.ts +6 -9
  175. package/src/daemon/message-types/home.ts +1 -13
  176. package/src/daemon/message-types/messages.ts +6 -14
  177. package/src/daemon/message-types/sync.ts +14 -0
  178. package/src/daemon/shutdown-handlers.ts +24 -5
  179. package/src/daemon/switch-inference-profile-tool.ts +52 -0
  180. package/src/daemon/tool-setup-types.ts +13 -0
  181. package/src/events/relationship-state-updated.ts +25 -0
  182. package/src/heartbeat/__tests__/heartbeat-service.test.ts +1 -1
  183. package/src/home/home-greeting.ts +0 -9
  184. package/src/home/suggested-prompts.ts +0 -9
  185. package/src/ipc/gateway-flag-listener.ts +123 -0
  186. package/src/ipc/skill-routes/registries.ts +8 -12
  187. package/src/memory/__tests__/db-async-query.test.ts +165 -0
  188. package/src/memory/__tests__/db-maintenance.test.ts +115 -0
  189. package/src/memory/__tests__/jobs-store-enqueue-gate.test.ts +241 -0
  190. package/src/memory/__tests__/jobs-store-job-classes.test.ts +28 -1
  191. package/src/memory/__tests__/memory-retrospective-job.test.ts +7 -0
  192. package/src/memory/auto-analysis-enqueue.ts +5 -1
  193. package/src/memory/conversation-crud.ts +71 -70
  194. package/src/memory/conversation-starters-cadence.ts +3 -1
  195. package/src/memory/conversation-title-service.ts +19 -3
  196. package/src/memory/db-async-query.ts +214 -0
  197. package/src/memory/db-init.ts +10 -0
  198. package/src/memory/db-maintenance.ts +30 -21
  199. package/src/memory/graph/bootstrap.ts +8 -1
  200. package/src/memory/graph/capability-seed.ts +7 -3
  201. package/src/memory/graph/conversation-graph-memory.ts +100 -17
  202. package/src/memory/graph/extraction.ts +1 -5
  203. package/src/memory/graph/graph-search.ts +7 -1
  204. package/src/memory/indexer.ts +28 -18
  205. package/src/memory/job-handlers/cleanup.ts +76 -18
  206. package/src/memory/job-handlers/conversation-starters.ts +1 -4
  207. package/src/memory/jobs/embed-pkb-file.ts +6 -1
  208. package/src/memory/jobs-store.ts +14 -0
  209. package/src/memory/jobs-worker.ts +55 -22
  210. package/src/memory/llm-request-log-source-clickhouse.ts +42 -2
  211. package/src/memory/llm-request-log-source-local.ts +7 -0
  212. package/src/memory/llm-request-log-source.ts +9 -2
  213. package/src/memory/llm-request-log-store.ts +43 -1
  214. package/src/memory/llm-usage-store.ts +24 -0
  215. package/src/memory/memory-retrospective-enqueue.ts +8 -1
  216. package/src/memory/memory-retrospective-job.ts +5 -0
  217. package/src/memory/memory-v2-activation-log-store.ts +15 -6
  218. package/src/memory/migrations/260-rename-cleaned-at.ts +44 -0
  219. package/src/memory/migrations/261-llm-usage-add-raw-usage.ts +36 -0
  220. package/src/memory/migrations/262-memory-v3-coactivation.ts +57 -0
  221. package/src/memory/migrations/263-memory-v3-auto-edges.ts +50 -0
  222. package/src/memory/migrations/264-llm-request-log-call-site.ts +29 -0
  223. package/src/memory/migrations/index.ts +17 -0
  224. package/src/memory/migrations/registry.ts +33 -0
  225. package/src/memory/schema/conversations.ts +1 -1
  226. package/src/memory/schema/infrastructure.ts +21 -0
  227. package/src/memory/tool-usage-store.ts +36 -8
  228. package/src/memory/v2/__tests__/consolidation-job.test.ts +1 -0
  229. package/src/memory/v2/__tests__/harness-compare.test.ts +186 -0
  230. package/src/memory/v2/__tests__/harness-metrics.test.ts +74 -0
  231. package/src/memory/v2/__tests__/harness-oracle.test.ts +257 -0
  232. package/src/memory/v2/__tests__/harness-replay-input.test.ts +225 -0
  233. package/src/memory/v2/__tests__/harness-runner.test.ts +109 -0
  234. package/src/memory/v2/__tests__/injection.test.ts +127 -98
  235. package/src/memory/v2/__tests__/qdrant.test.ts +36 -0
  236. package/src/memory/v2/__tests__/router.test.ts +171 -3
  237. package/src/memory/v2/harness/compare.ts +57 -0
  238. package/src/memory/v2/harness/metrics.ts +124 -0
  239. package/src/memory/v2/harness/oracle.ts +145 -0
  240. package/src/memory/v2/harness/replay-input.ts +224 -0
  241. package/src/memory/v2/harness/retriever.ts +74 -0
  242. package/src/memory/v2/harness/router-retriever.ts +43 -0
  243. package/src/memory/v2/harness/runner.ts +106 -0
  244. package/src/memory/v2/harness/trace.ts +58 -0
  245. package/src/memory/v2/injection.ts +21 -15
  246. package/src/memory/v2/prompts/router.ts +26 -1
  247. package/src/memory/v2/qdrant.ts +14 -2
  248. package/src/memory/v2/router.ts +171 -18
  249. package/src/memory/v3/__tests__/coactivation-store.test.ts +422 -0
  250. package/src/memory/v3/__tests__/consolidation-job.test.ts +468 -0
  251. package/src/memory/v3/__tests__/edge-learning-job.test.ts +324 -0
  252. package/src/memory/v3/__tests__/edges.test.ts +563 -0
  253. package/src/memory/v3/__tests__/filter.test.ts +512 -0
  254. package/src/memory/v3/__tests__/gate.test.ts +574 -0
  255. package/src/memory/v3/__tests__/index-composition.test.ts +233 -0
  256. package/src/memory/v3/__tests__/loop.test.ts +530 -0
  257. package/src/memory/v3/__tests__/retriever.test.ts +226 -0
  258. package/src/memory/v3/__tests__/scouts.test.ts +440 -0
  259. package/src/memory/v3/__tests__/shadow-middleware.test.ts +312 -0
  260. package/src/memory/v3/__tests__/system-prompts.test.ts +154 -0
  261. package/src/memory/v3/__tests__/traversal.test.ts +469 -0
  262. package/src/memory/v3/__tests__/tree-index.test.ts +280 -0
  263. package/src/memory/v3/__tests__/tree-store.test.ts +529 -0
  264. package/src/memory/v3/__tests__/tree-walk.test.ts +707 -0
  265. package/src/memory/v3/__tests__/validate.test.ts +245 -0
  266. package/src/memory/v3/auto-edges.ts +223 -0
  267. package/src/memory/v3/coactivation-store.ts +124 -0
  268. package/src/memory/v3/consolidation-job.ts +323 -0
  269. package/src/memory/v3/edge-learning-job.ts +160 -0
  270. package/src/memory/v3/edges.ts +249 -0
  271. package/src/memory/v3/filter.ts +281 -0
  272. package/src/memory/v3/gate.ts +334 -0
  273. package/src/memory/v3/index-composition.ts +113 -0
  274. package/src/memory/v3/llm-capture.ts +46 -0
  275. package/src/memory/v3/loop.ts +382 -0
  276. package/src/memory/v3/maintenance.ts +144 -0
  277. package/src/memory/v3/prompt-context.ts +33 -0
  278. package/src/memory/v3/prompts/consolidation.ts +458 -0
  279. package/src/memory/v3/prompts/system-prompts.ts +196 -0
  280. package/src/memory/v3/retriever.ts +33 -0
  281. package/src/memory/v3/scouts.ts +420 -0
  282. package/src/memory/v3/shadow-middleware.ts +305 -0
  283. package/src/memory/v3/traversal.ts +206 -0
  284. package/src/memory/v3/tree-index.ts +237 -0
  285. package/src/memory/v3/tree-store.ts +394 -0
  286. package/src/memory/v3/tree-walk.ts +351 -0
  287. package/src/memory/v3/types.ts +65 -0
  288. package/src/memory/v3/validate.ts +300 -0
  289. package/src/notifications/adapters/macos.ts +18 -1
  290. package/src/notifications/adapters/platform.ts +1 -1
  291. package/src/notifications/decision-engine.ts +1 -4
  292. package/src/notifications/emit-signal.ts +29 -49
  293. package/src/permissions/prompter.ts +3 -3
  294. package/src/permissions/question-prompter.ts +5 -2
  295. package/src/permissions/secret-prompter.ts +2 -2
  296. package/src/plugin-api/index.ts +4 -0
  297. package/src/plugin-api/types.ts +7 -33
  298. package/src/plugins/defaults/index.ts +6 -0
  299. package/src/plugins/defaults/injectors.ts +18 -11
  300. package/src/plugins/external-plugin-loader.ts +5 -68
  301. package/src/plugins/types.ts +11 -16
  302. package/src/proactive-artifact/aux-message-injector.ts +17 -4
  303. package/src/prompts/__tests__/task-progress-hint-section.test.ts +3 -9
  304. package/src/prompts/persona-resolver.ts +36 -21
  305. package/src/prompts/sections.ts +39 -7
  306. package/src/prompts/system-prompt.ts +50 -185
  307. package/src/prompts/templates/BOOTSTRAP.md +2 -2
  308. package/src/prompts/templates/system-sections.ts +230 -8
  309. package/src/providers/__tests__/connection-model-compat.test.ts +234 -0
  310. package/src/providers/__tests__/retry-callsite.test.ts +85 -5
  311. package/src/providers/anthropic/client.ts +32 -66
  312. package/src/providers/call-site-routing.ts +14 -2
  313. package/src/providers/connection-model-compat.ts +38 -0
  314. package/src/providers/connection-resolution.ts +16 -2
  315. package/src/providers/gemini/client.ts +49 -6
  316. package/src/providers/inference/adapter-factory.ts +3 -0
  317. package/src/providers/minimax/client.ts +106 -0
  318. package/src/providers/model-catalog.ts +43 -0
  319. package/src/providers/model-intents.ts +1 -1
  320. package/src/providers/openai/chat-completions-provider.ts +6 -3
  321. package/src/providers/openai/codex-models.ts +18 -0
  322. package/src/providers/openai/responses-provider.ts +78 -21
  323. package/src/providers/provider-send-message.ts +7 -1
  324. package/src/providers/retry.ts +34 -3
  325. package/src/providers/thinking-config.ts +26 -1
  326. package/src/providers/usage-tracking.ts +2 -0
  327. package/src/runtime/AGENTS.md +2 -2
  328. package/src/runtime/agent-wake.ts +1 -0
  329. package/src/runtime/assistant-event-hub.ts +76 -6
  330. package/src/runtime/auth/route-policy.ts +36 -0
  331. package/src/runtime/btw-sidechain.ts +0 -6
  332. package/src/runtime/http-types.ts +0 -2
  333. package/src/runtime/migrations/vbundle-builder.ts +10 -3
  334. package/src/runtime/pending-interactions.ts +0 -1
  335. package/src/runtime/routes/__tests__/conversation-query-routes.test.ts +106 -0
  336. package/src/runtime/routes/__tests__/memory-v2-simulate-route.test.ts +25 -6
  337. package/src/runtime/routes/__tests__/plugins-routes.test.ts +512 -0
  338. package/src/runtime/routes/acp-routes.test.ts +255 -6
  339. package/src/runtime/routes/acp-routes.ts +8 -1
  340. package/src/runtime/routes/avatar-routes.ts +10 -10
  341. package/src/runtime/routes/background-wake-routes.ts +188 -0
  342. package/src/runtime/routes/browser-tabs-routes.ts +200 -0
  343. package/src/runtime/routes/btw-routes.ts +0 -6
  344. package/src/runtime/routes/conversation-cli-routes.ts +1 -1
  345. package/src/runtime/routes/conversation-list-routes.ts +12 -4
  346. package/src/runtime/routes/conversation-management-routes.ts +77 -20
  347. package/src/runtime/routes/conversation-query-routes.ts +142 -36
  348. package/src/runtime/routes/conversation-routes.ts +252 -410
  349. package/src/runtime/routes/conversation-starter-routes.ts +6 -3
  350. package/src/runtime/routes/disk-pressure-routes.ts +1 -1
  351. package/src/runtime/routes/domain-routes.ts +60 -10
  352. package/src/runtime/routes/email-routes.ts +5 -2
  353. package/src/runtime/routes/events-routes.ts +54 -10
  354. package/src/runtime/routes/group-routes.ts +24 -8
  355. package/src/runtime/routes/host-browser-routes.ts +10 -2
  356. package/src/runtime/routes/host-cu-routes.ts +2 -2
  357. package/src/runtime/routes/inbound-stages/acl-enforcement.ts +96 -3
  358. package/src/runtime/routes/index.ts +8 -0
  359. package/src/runtime/routes/inference-profile-session-handler.ts +22 -12
  360. package/src/runtime/routes/inference-profile-session-routes.ts +7 -1
  361. package/src/runtime/routes/llm-call-sites-routes.ts +32 -5
  362. package/src/runtime/routes/memory-item-routes.ts +8 -3
  363. package/src/runtime/routes/memory-v2-routes.ts +215 -5
  364. package/src/runtime/routes/memory-v3-routes.ts +316 -0
  365. package/src/runtime/routes/migration-routes.ts +21 -24
  366. package/src/runtime/routes/plugins-routes.ts +337 -0
  367. package/src/runtime/routes/rename-conversation-routes.ts +6 -2
  368. package/src/runtime/routes/secret-routes.ts +25 -5
  369. package/src/runtime/routes/settings-routes.ts +12 -11
  370. package/src/runtime/routes/slack-channel-routes.ts +5 -4
  371. package/src/runtime/routes/workspace-routes.ts +25 -10
  372. package/src/runtime/sync/resource-sync-events.ts +106 -38
  373. package/src/runtime/sync/sync-publisher.test.ts +49 -0
  374. package/src/runtime/sync/sync-publisher.ts +2 -1
  375. package/src/runtime/verification-outbound-actions.ts +73 -1
  376. package/src/telemetry/types.ts +12 -0
  377. package/src/telemetry/usage-telemetry-reporter.test.ts +48 -0
  378. package/src/telemetry/usage-telemetry-reporter.ts +1 -0
  379. package/src/tools/acp/spawn.test.ts +119 -0
  380. package/src/tools/acp/spawn.ts +15 -2
  381. package/src/tools/apps/definitions.ts +2 -8
  382. package/src/tools/ask-question/ask-question-tool.test.ts +3 -3
  383. package/src/tools/ask-question/ask-question-tool.ts +38 -45
  384. package/src/tools/browser/__tests__/pinned-tabs.test.ts +70 -0
  385. package/src/tools/browser/browser-execution.ts +16 -3
  386. package/src/tools/browser/cdp-client/__tests__/browser-tabs-factory.test.ts +402 -0
  387. package/src/tools/browser/cdp-client/__tests__/types.test.ts +3 -0
  388. package/src/tools/browser/cdp-client/cdp-inspect-client.ts +12 -0
  389. package/src/tools/browser/cdp-client/extension-cdp-client.ts +27 -1
  390. package/src/tools/browser/cdp-client/factory.ts +100 -17
  391. package/src/tools/browser/cdp-client/local-cdp-client.ts +12 -0
  392. package/src/tools/browser/cdp-client/types.ts +65 -0
  393. package/src/tools/browser/pinned-tabs.ts +96 -40
  394. package/src/tools/computer-use/definitions.ts +22 -78
  395. package/src/tools/credential-execution/make-authenticated-request.ts +3 -9
  396. package/src/tools/credential-execution/manage-secure-command-tool.ts +3 -9
  397. package/src/tools/credential-execution/run-authenticated-command.ts +3 -9
  398. package/src/tools/credentials/vault.ts +3 -9
  399. package/src/tools/document/document-tool.ts +59 -0
  400. package/src/tools/execution-target.ts +21 -23
  401. package/src/tools/executor.ts +6 -1
  402. package/src/tools/filesystem/edit.ts +3 -9
  403. package/src/tools/filesystem/list.ts +3 -9
  404. package/src/tools/filesystem/read.ts +3 -9
  405. package/src/tools/filesystem/write.ts +3 -9
  406. package/src/tools/host-filesystem/edit.ts +3 -9
  407. package/src/tools/host-filesystem/read.ts +3 -9
  408. package/src/tools/host-filesystem/transfer.ts +3 -9
  409. package/src/tools/host-filesystem/write.ts +3 -9
  410. package/src/tools/host-terminal/host-shell.ts +3 -9
  411. package/src/tools/mcp/mcp-tool-factory.ts +1 -8
  412. package/src/tools/memory/register.test.ts +1 -1
  413. package/src/tools/memory/register.ts +4 -9
  414. package/src/tools/network/web-fetch.ts +3 -9
  415. package/src/tools/network/web-search.ts +25 -32
  416. package/src/tools/registry.ts +7 -23
  417. package/src/tools/schema-transforms.ts +1 -1
  418. package/src/tools/skills/execute.ts +3 -9
  419. package/src/tools/skills/load.ts +3 -9
  420. package/src/tools/skills/skill-tool-factory.ts +1 -8
  421. package/src/tools/subagent/notify-parent.ts +3 -9
  422. package/src/tools/system/request-permission.ts +3 -9
  423. package/src/tools/terminal/shell.ts +3 -9
  424. package/src/tools/tool-defaults.ts +94 -0
  425. package/src/tools/types.ts +27 -98
  426. package/src/tools/ui-surface/definitions.ts +6 -22
  427. package/src/usage/pricing.ts +23 -0
  428. package/src/usage/types.ts +12 -0
  429. package/src/util/logger.ts +16 -7
  430. package/src/util/platform.ts +7 -2
  431. package/src/util/sqlite3-runtime.ts +65 -0
  432. package/src/workspace/migrations/086-revert-stale-gemini-mis-rewrites.ts +1 -0
  433. package/src/workspace/migrations/089-move-memory-tree-out-of-v3.ts +86 -0
  434. package/src/workspace/migrations/registry.ts +2 -0
  435. package/src/__tests__/compaction-strip-metadata-clear.test.ts +0 -206
  436. package/src/__tests__/message-complete-display-id.test.ts +0 -175
  437. package/src/daemon/query-complexity-router.ts +0 -75
  438. package/src/prompts/cache-boundary.ts +0 -8
package/openapi.yaml CHANGED
@@ -3,7 +3,7 @@
3
3
  openapi: 3.0.0
4
4
  info:
5
5
  title: Vellum Assistant API
6
- version: 0.8.4
6
+ version: 0.8.5
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
@@ -1823,6 +1823,247 @@ paths:
1823
1823
  required:
1824
1824
  - id
1825
1825
  additionalProperties: false
1826
+ /v1/background-wake/drain-due:
1827
+ post:
1828
+ operationId: backgroundwake_draindue_post
1829
+ summary: Drain due background wake work
1830
+ description: Run due heartbeat and scheduler work for a background wake lease.
1831
+ tags:
1832
+ - background-wake
1833
+ responses:
1834
+ "200":
1835
+ description: Successful response
1836
+ content:
1837
+ application/json:
1838
+ schema:
1839
+ type: object
1840
+ properties:
1841
+ leaseId:
1842
+ type: string
1843
+ reason:
1844
+ type: string
1845
+ sourceGeneration:
1846
+ type: string
1847
+ startedAt:
1848
+ type: number
1849
+ deadlineAt:
1850
+ type: number
1851
+ counts:
1852
+ type: object
1853
+ properties:
1854
+ heartbeat:
1855
+ type: number
1856
+ scheduler:
1857
+ type: number
1858
+ total:
1859
+ type: number
1860
+ required:
1861
+ - heartbeat
1862
+ - scheduler
1863
+ - total
1864
+ additionalProperties: false
1865
+ nextIntent:
1866
+ anyOf:
1867
+ - type: object
1868
+ properties:
1869
+ nextWakeAt:
1870
+ type: number
1871
+ actualNextDueAt:
1872
+ type: number
1873
+ reason:
1874
+ type: string
1875
+ enum:
1876
+ - heartbeat
1877
+ - schedule
1878
+ - mixed
1879
+ sourceGeneration:
1880
+ type: string
1881
+ computedAt:
1882
+ type: number
1883
+ sourcePayload:
1884
+ type: object
1885
+ propertyNames:
1886
+ type: string
1887
+ additionalProperties: {}
1888
+ required:
1889
+ - nextWakeAt
1890
+ - actualNextDueAt
1891
+ - reason
1892
+ - sourceGeneration
1893
+ - computedAt
1894
+ - sourcePayload
1895
+ additionalProperties: false
1896
+ - type: "null"
1897
+ required:
1898
+ - leaseId
1899
+ - reason
1900
+ - sourceGeneration
1901
+ - startedAt
1902
+ - deadlineAt
1903
+ - counts
1904
+ - nextIntent
1905
+ additionalProperties: false
1906
+ requestBody:
1907
+ required: true
1908
+ content:
1909
+ application/json:
1910
+ schema:
1911
+ anyOf:
1912
+ - type: object
1913
+ properties:
1914
+ leaseId:
1915
+ type: string
1916
+ minLength: 1
1917
+ reason:
1918
+ type: string
1919
+ minLength: 1
1920
+ sourceGeneration:
1921
+ type: string
1922
+ minLength: 1
1923
+ startedAt:
1924
+ anyOf:
1925
+ - type: number
1926
+ - type: string
1927
+ deadlineAt:
1928
+ anyOf:
1929
+ - type: number
1930
+ - type: string
1931
+ required:
1932
+ - leaseId
1933
+ - reason
1934
+ - sourceGeneration
1935
+ - startedAt
1936
+ - deadlineAt
1937
+ additionalProperties: false
1938
+ - type: object
1939
+ properties:
1940
+ lease_id:
1941
+ type: string
1942
+ minLength: 1
1943
+ reason:
1944
+ type: string
1945
+ minLength: 1
1946
+ source_generation:
1947
+ type: string
1948
+ minLength: 1
1949
+ started_at:
1950
+ anyOf:
1951
+ - type: number
1952
+ - type: string
1953
+ deadline_at:
1954
+ anyOf:
1955
+ - type: number
1956
+ - type: string
1957
+ required:
1958
+ - lease_id
1959
+ - reason
1960
+ - source_generation
1961
+ - started_at
1962
+ - deadline_at
1963
+ additionalProperties: false
1964
+ /v1/background-wake/intent:
1965
+ get:
1966
+ operationId: backgroundwake_intent_get
1967
+ summary: Get background wake intent
1968
+ description: Return the current computed background wake intent.
1969
+ tags:
1970
+ - background-wake
1971
+ responses:
1972
+ "200":
1973
+ description: Successful response
1974
+ content:
1975
+ application/json:
1976
+ schema:
1977
+ type: object
1978
+ properties:
1979
+ intent:
1980
+ anyOf:
1981
+ - type: object
1982
+ properties:
1983
+ nextWakeAt:
1984
+ type: number
1985
+ actualNextDueAt:
1986
+ type: number
1987
+ reason:
1988
+ type: string
1989
+ enum:
1990
+ - heartbeat
1991
+ - schedule
1992
+ - mixed
1993
+ sourceGeneration:
1994
+ type: string
1995
+ computedAt:
1996
+ type: number
1997
+ sourcePayload:
1998
+ type: object
1999
+ propertyNames:
2000
+ type: string
2001
+ additionalProperties: {}
2002
+ required:
2003
+ - nextWakeAt
2004
+ - actualNextDueAt
2005
+ - reason
2006
+ - sourceGeneration
2007
+ - computedAt
2008
+ - sourcePayload
2009
+ additionalProperties: false
2010
+ - type: "null"
2011
+ required:
2012
+ - intent
2013
+ additionalProperties: false
2014
+ /v1/background-wake/prepare-sleep:
2015
+ post:
2016
+ operationId: backgroundwake_preparesleep_post
2017
+ summary: Prepare for assistant sleep
2018
+ description: Return the current background wake intent and whether sleep should be deferred.
2019
+ tags:
2020
+ - background-wake
2021
+ responses:
2022
+ "200":
2023
+ description: Successful response
2024
+ content:
2025
+ application/json:
2026
+ schema:
2027
+ type: object
2028
+ properties:
2029
+ intent:
2030
+ anyOf:
2031
+ - type: object
2032
+ properties:
2033
+ nextWakeAt:
2034
+ type: number
2035
+ actualNextDueAt:
2036
+ type: number
2037
+ reason:
2038
+ type: string
2039
+ enum:
2040
+ - heartbeat
2041
+ - schedule
2042
+ - mixed
2043
+ sourceGeneration:
2044
+ type: string
2045
+ computedAt:
2046
+ type: number
2047
+ sourcePayload:
2048
+ type: object
2049
+ propertyNames:
2050
+ type: string
2051
+ additionalProperties: {}
2052
+ required:
2053
+ - nextWakeAt
2054
+ - actualNextDueAt
2055
+ - reason
2056
+ - sourceGeneration
2057
+ - computedAt
2058
+ - sourcePayload
2059
+ additionalProperties: false
2060
+ - type: "null"
2061
+ deferSleep:
2062
+ type: boolean
2063
+ required:
2064
+ - intent
2065
+ - deferSleep
2066
+ additionalProperties: false
1826
2067
  /v1/backup/destinations:
1827
2068
  get:
1828
2069
  operationId: backup_destinations_get
@@ -2552,6 +2793,85 @@ paths:
2552
2793
  required:
2553
2794
  - operation
2554
2795
  additionalProperties: false
2796
+ /v1/browser/tabs:
2797
+ post:
2798
+ operationId: browser_tabs_post
2799
+ summary: Manage browser tabs
2800
+ description: List, create, select, or close browser tabs via the Chrome extension backend.
2801
+ tags:
2802
+ - browser
2803
+ responses:
2804
+ "200":
2805
+ description: Successful response
2806
+ content:
2807
+ application/json:
2808
+ schema:
2809
+ type: object
2810
+ properties:
2811
+ ok:
2812
+ type: boolean
2813
+ tabs:
2814
+ type: array
2815
+ items:
2816
+ type: object
2817
+ properties:
2818
+ tabId:
2819
+ type: number
2820
+ windowId:
2821
+ type: number
2822
+ url:
2823
+ type: string
2824
+ title:
2825
+ type: string
2826
+ active:
2827
+ type: boolean
2828
+ pinned:
2829
+ type: boolean
2830
+ required:
2831
+ - active
2832
+ - pinned
2833
+ additionalProperties: false
2834
+ tab: {}
2835
+ tabId:
2836
+ type: number
2837
+ clientId:
2838
+ type: string
2839
+ closed:
2840
+ type: boolean
2841
+ required:
2842
+ - ok
2843
+ additionalProperties: false
2844
+ requestBody:
2845
+ required: true
2846
+ content:
2847
+ application/json:
2848
+ schema:
2849
+ type: object
2850
+ properties:
2851
+ command:
2852
+ type: string
2853
+ enum:
2854
+ - list
2855
+ - select
2856
+ - new
2857
+ - close
2858
+ sessionId:
2859
+ default: default
2860
+ type: string
2861
+ minLength: 1
2862
+ conversationId:
2863
+ type: string
2864
+ minLength: 1
2865
+ tabId:
2866
+ type: number
2867
+ url:
2868
+ type: string
2869
+ targetClientId:
2870
+ type: string
2871
+ minLength: 1
2872
+ required:
2873
+ - command
2874
+ additionalProperties: false
2555
2875
  /v1/btw:
2556
2876
  post:
2557
2877
  operationId: btw_post
@@ -3411,6 +3731,19 @@ paths:
3411
3731
  responses:
3412
3732
  "200":
3413
3733
  description: Successful response
3734
+ /v1/config/llm/profiles:
3735
+ get:
3736
+ operationId: config_llm_profiles_get
3737
+ summary: List defined LLM profiles
3738
+ description:
3739
+ Returns the sorted list of profile names defined in `llm.profiles` plus the workspace-wide active profile.
3740
+ Used to populate per-call profile dropdowns (e.g. memory router playground) without requiring the caller to type
3741
+ profile names.
3742
+ tags:
3743
+ - config
3744
+ responses:
3745
+ "200":
3746
+ description: Successful response
3414
3747
  /v1/config/llm/profiles/{name}:
3415
3748
  put:
3416
3749
  operationId: config_llm_profiles_by_name_put
@@ -4362,8 +4695,10 @@ paths:
4362
4695
  properties:
4363
4696
  id:
4364
4697
  type: string
4698
+ description: Assistant-minted internal conversation id. The authoritative identifier for the conversation.
4365
4699
  conversationKey:
4366
4700
  type: string
4701
+ description: Echo of the optional external key supplied by the client.
4367
4702
  conversationType:
4368
4703
  type: string
4369
4704
  created:
@@ -4382,14 +4717,15 @@ paths:
4382
4717
  type: object
4383
4718
  properties:
4384
4719
  conversationKey:
4720
+ description:
4721
+ Optional external key. Echoed back in the response. Non-vellum channels (Telegram, WhatsApp) use this to
4722
+ scope to a logical channel thread; vellum-web clients can omit it and rely on the assistant-minted
4723
+ `id`.
4385
4724
  type: string
4386
- description: Idempotency key for the conversation
4387
4725
  conversationType:
4388
4726
  description: Only standard conversations are created by this endpoint
4389
4727
  type: string
4390
4728
  const: standard
4391
- required:
4392
- - conversationKey
4393
4729
  additionalProperties: false
4394
4730
  /v1/conversations/{conversationId}/slack-channel/resolve:
4395
4731
  post:
@@ -5432,6 +5768,76 @@ paths:
5432
5768
  schema:
5433
5769
  type: string
5434
5770
  description: Optional conversation ID filter
5771
+ /v1/conversations/llm-context:
5772
+ get:
5773
+ operationId: conversations_llmcontext_get
5774
+ summary: Get LLM context for a conversation
5775
+ description: Returns normalized LLM request/response logs for an entire conversation.
5776
+ tags:
5777
+ - conversations
5778
+ responses:
5779
+ "200":
5780
+ description: Successful response
5781
+ content:
5782
+ application/json:
5783
+ schema:
5784
+ type: object
5785
+ properties:
5786
+ conversationKey:
5787
+ anyOf:
5788
+ - type: string
5789
+ - type: "null"
5790
+ conversationId:
5791
+ anyOf:
5792
+ - type: string
5793
+ - type: "null"
5794
+ conversationKind:
5795
+ type: string
5796
+ enum:
5797
+ - user
5798
+ - background
5799
+ - background_memory_consolidation
5800
+ - scheduled
5801
+ conversationTotalEstimatedCostUsd:
5802
+ anyOf:
5803
+ - type: number
5804
+ - type: "null"
5805
+ logs:
5806
+ type: array
5807
+ items: {}
5808
+ memoryRecall:
5809
+ anyOf:
5810
+ - type: object
5811
+ properties: {}
5812
+ additionalProperties: {}
5813
+ - type: "null"
5814
+ memoryV2Activation:
5815
+ anyOf:
5816
+ - type: object
5817
+ properties: {}
5818
+ additionalProperties: {}
5819
+ - type: "null"
5820
+ required:
5821
+ - conversationId
5822
+ - conversationKind
5823
+ - conversationTotalEstimatedCostUsd
5824
+ - logs
5825
+ - memoryRecall
5826
+ - memoryV2Activation
5827
+ additionalProperties: false
5828
+ parameters:
5829
+ - name: conversationKey
5830
+ in: query
5831
+ required: false
5832
+ schema:
5833
+ type: string
5834
+ description: Stable external conversation key.
5835
+ - name: conversationId
5836
+ in: query
5837
+ required: false
5838
+ schema:
5839
+ type: string
5840
+ description: Internal conversation identifier.
5435
5841
  /v1/conversations/rename:
5436
5842
  post:
5437
5843
  operationId: conversations_rename_post
@@ -6338,6 +6744,7 @@ paths:
6338
6744
  enum:
6339
6745
  - disabled
6340
6746
  - ok
6747
+ - warning
6341
6748
  - critical
6342
6749
  - unknown
6343
6750
  locked:
@@ -6423,6 +6830,7 @@ paths:
6423
6830
  enum:
6424
6831
  - disabled
6425
6832
  - ok
6833
+ - warning
6426
6834
  - critical
6427
6835
  - unknown
6428
6836
  locked:
@@ -6524,6 +6932,7 @@ paths:
6524
6932
  enum:
6525
6933
  - disabled
6526
6934
  - ok
6935
+ - warning
6527
6936
  - critical
6528
6937
  - unknown
6529
6938
  locked:
@@ -7006,6 +7415,15 @@ paths:
7006
7415
  responses:
7007
7416
  "200":
7008
7417
  description: Successful response
7418
+ /v1/domain/verification-status:
7419
+ post:
7420
+ operationId: domain_verificationstatus_post
7421
+ summary: Get live DNS verification status for a domain
7422
+ tags:
7423
+ - domain
7424
+ responses:
7425
+ "200":
7426
+ description: Successful response
7009
7427
  /v1/email/attachment-get:
7010
7428
  get:
7011
7429
  operationId: email_attachmentget_get
@@ -7327,12 +7745,20 @@ paths:
7327
7745
  "200":
7328
7746
  description: Successful response
7329
7747
  parameters:
7748
+ - name: conversationId
7749
+ in: query
7750
+ required: false
7751
+ schema:
7752
+ type: string
7753
+ description: Scope to a single conversation by its assistant-minted internal id. 404s if no such conversation exists.
7330
7754
  - name: conversationKey
7331
7755
  in: query
7332
7756
  required: false
7333
7757
  schema:
7334
7758
  type: string
7335
- description: Scope to a single conversation
7759
+ description:
7760
+ Scope to a single conversation by an external key (non-vellum channels) or the web idempotency key.
7761
+ Materializes a row on first use. Ignored when conversationId is also provided.
7336
7762
  /v1/events/emit:
7337
7763
  post:
7338
7764
  operationId: events_emit_post
@@ -8967,6 +9393,9 @@ paths:
8967
9393
  reason:
8968
9394
  description: Detach reason
8969
9395
  type: string
9396
+ clientId:
9397
+ description: Extension client ID that reported the invalidation
9398
+ type: string
8970
9399
  additionalProperties: false
8971
9400
  /v1/host-cu-result:
8972
9401
  post:
@@ -9298,6 +9727,7 @@ paths:
9298
9727
  - fireworks
9299
9728
  - openrouter
9300
9729
  - openai-compatible
9730
+ - minimax
9301
9731
  auth:
9302
9732
  oneOf:
9303
9733
  - type: object
@@ -9414,7 +9844,9 @@ paths:
9414
9844
  required: false
9415
9845
  schema:
9416
9846
  type: string
9417
- description: "Filter by provider. One of: anthropic, openai, gemini, ollama, fireworks, openrouter, openai-compatible"
9847
+ description:
9848
+ "Filter by provider. One of: anthropic, openai, gemini, ollama, fireworks, openrouter, openai-compatible,
9849
+ minimax"
9418
9850
  post:
9419
9851
  operationId: inference_providerconnections_post
9420
9852
  summary: Create a provider connection
@@ -9442,6 +9874,7 @@ paths:
9442
9874
  - fireworks
9443
9875
  - openrouter
9444
9876
  - openai-compatible
9877
+ - minimax
9445
9878
  auth:
9446
9879
  oneOf:
9447
9880
  - type: object
@@ -9573,6 +10006,7 @@ paths:
9573
10006
  - fireworks
9574
10007
  - openrouter
9575
10008
  - openai-compatible
10009
+ - minimax
9576
10010
  auth:
9577
10011
  oneOf:
9578
10012
  - type: object
@@ -9724,6 +10158,7 @@ paths:
9724
10158
  - fireworks
9725
10159
  - openrouter
9726
10160
  - openai-compatible
10161
+ - minimax
9727
10162
  auth:
9728
10163
  oneOf:
9729
10164
  - type: object
@@ -9869,6 +10304,7 @@ paths:
9869
10304
  - fireworks
9870
10305
  - openrouter
9871
10306
  - openai-compatible
10307
+ - minimax
9872
10308
  auth:
9873
10309
  oneOf:
9874
10310
  - type: object
@@ -11000,6 +11436,50 @@ paths:
11000
11436
  required:
11001
11437
  - op
11002
11438
  additionalProperties: false
11439
+ /v1/memory/v2/compare-retrievers:
11440
+ post:
11441
+ operationId: memory_v2_compareretrievers_post
11442
+ summary: Compare retrievers against the router's logged selections (read-only)
11443
+ description:
11444
+ Runs one or more retrievers over a sample of historical turns (memory_v2_activation_logs, mode='router')
11445
+ and scores their selected pages against the logged selections as ground truth, reconstructing each turn's inputs
11446
+ from the messages table + current NOW. Read-only — writes nothing. Each scored turn re-runs the router (one LLM
11447
+ call), so keep `limit` modest. Today the only retriever is the router itself, so this is the harness self-test.
11448
+ tags:
11449
+ - memory
11450
+ responses:
11451
+ "200":
11452
+ description: Successful response
11453
+ requestBody:
11454
+ required: true
11455
+ content:
11456
+ application/json:
11457
+ schema:
11458
+ type: object
11459
+ properties:
11460
+ limit:
11461
+ type: integer
11462
+ exclusiveMinimum: 0
11463
+ maximum: 9007199254740991
11464
+ strategy:
11465
+ type: string
11466
+ enum:
11467
+ - recent
11468
+ - random
11469
+ conversationIds:
11470
+ type: array
11471
+ items:
11472
+ type: string
11473
+ minLength: 1
11474
+ ks:
11475
+ type: array
11476
+ items:
11477
+ type: integer
11478
+ exclusiveMinimum: 0
11479
+ maximum: 9007199254740991
11480
+ includeNotInjected:
11481
+ type: boolean
11482
+ additionalProperties: false
11003
11483
  /v1/memory/v2/concept-frequency:
11004
11484
  post:
11005
11485
  operationId: memory_v2_conceptfrequency_post
@@ -11096,6 +11576,18 @@ paths:
11096
11576
  type: object
11097
11577
  properties: {}
11098
11578
  additionalProperties: false
11579
+ /v1/memory/v2/now-text:
11580
+ get:
11581
+ operationId: memory_v2_nowtext_get
11582
+ summary: Return the current rendered `<now>` body
11583
+ description:
11584
+ Returns the current NOW.md (autoloaded essentials/threads/recent). Used by the memory router playground to
11585
+ seed its `<now>` text area with a production-like default so callers can edit from a realistic baseline.
11586
+ tags:
11587
+ - memory
11588
+ responses:
11589
+ "200":
11590
+ description: Successful response
11099
11591
  /v1/memory/v2/reembed-skills:
11100
11592
  post:
11101
11593
  operationId: memory_v2_reembedskills_post
@@ -11114,6 +11606,19 @@ paths:
11114
11606
  type: object
11115
11607
  properties: {}
11116
11608
  additionalProperties: false
11609
+ /v1/memory/v2/router-prompt-template:
11610
+ get:
11611
+ operationId: memory_v2_routerprompttemplate_get
11612
+ summary: Return the bundled router system-prompt template
11613
+ description:
11614
+ Returns the bundled `ROUTER_PROMPT` body with placeholders intact (`{{ASSISTANT_NAME}}`, `{{USER_NAME}}`,
11615
+ `{{PAGE_INDEX}}`). Used by the memory router playground's 'Load default' affordance so users have a known-good
11616
+ starting point when authoring an inline prompt override.
11617
+ tags:
11618
+ - memory
11619
+ responses:
11620
+ "200":
11621
+ description: Successful response
11117
11622
  /v1/memory/v2/simulate-router:
11118
11623
  post:
11119
11624
  operationId: memory_v2_simulaterouter_post
@@ -11135,9 +11640,22 @@ paths:
11135
11640
  schema:
11136
11641
  type: object
11137
11642
  properties:
11138
- query:
11643
+ recentTurnPairs:
11644
+ minItems: 1
11645
+ type: array
11646
+ items:
11647
+ type: object
11648
+ properties:
11649
+ assistantMessage:
11650
+ type: string
11651
+ userMessage:
11652
+ type: string
11653
+ required:
11654
+ - assistantMessage
11655
+ - userMessage
11656
+ additionalProperties: false
11657
+ nowText:
11139
11658
  type: string
11140
- minLength: 1
11141
11659
  configOverrides:
11142
11660
  type: object
11143
11661
  properties:
@@ -11160,8 +11678,14 @@ paths:
11160
11678
  maximum: 9007199254740991
11161
11679
  - type: "null"
11162
11680
  additionalProperties: false
11681
+ profileOverride:
11682
+ type: string
11683
+ minLength: 1
11684
+ routerPromptOverride:
11685
+ type: string
11686
+ maxLength: 1000000
11163
11687
  required:
11164
- - query
11688
+ - recentTurnPairs
11165
11689
  additionalProperties: false
11166
11690
  /v1/memory/v2/validate:
11167
11691
  post:
@@ -11183,6 +11707,93 @@ paths:
11183
11707
  type: object
11184
11708
  properties: {}
11185
11709
  additionalProperties: false
11710
+ /v1/memory/v3/simulate:
11711
+ post:
11712
+ operationId: memory_v3_simulate_post
11713
+ summary: Dry-run the v3 retrieval loop against an ad-hoc query (read-only)
11714
+ description:
11715
+ Runs the v3 multi-lane bounded-descent retrieval loop read-only against a single synthetic turn built from
11716
+ the supplied query plus the live (or supplied) NOW context. Returns the selected page slugs, per-lane
11717
+ provenance, the full multi-pass descent trace, and accumulated cost. Optional passCap / lane-allowlist overrides
11718
+ apply on top of live config. Invoked directly (not gated by memory.v3.enabled/shadow) so operators can probe v3
11719
+ retrieval before flipping the flags; writes nothing (co-activation persistence is forced off), though each pass
11720
+ still spends the loop's filter + gate LLM calls.
11721
+ tags:
11722
+ - memory
11723
+ responses:
11724
+ "200":
11725
+ description: Successful response
11726
+ requestBody:
11727
+ required: true
11728
+ content:
11729
+ application/json:
11730
+ schema:
11731
+ type: object
11732
+ properties:
11733
+ query:
11734
+ type: string
11735
+ minLength: 1
11736
+ nowText:
11737
+ type: string
11738
+ passCap:
11739
+ type: integer
11740
+ exclusiveMinimum: 0
11741
+ maximum: 9007199254740991
11742
+ lanes:
11743
+ type: array
11744
+ items:
11745
+ type: string
11746
+ enum:
11747
+ - hot
11748
+ - sparse
11749
+ - dense
11750
+ - tree
11751
+ - edges
11752
+ required:
11753
+ - query
11754
+ additionalProperties: false
11755
+ /v1/memory/v3/tree:
11756
+ post:
11757
+ operationId: memory_v3_tree_post
11758
+ summary: Return a serializable view of the memory v3 tree DAG (read-only)
11759
+ description:
11760
+ Returns the v3 tree root id plus every node and its ordered child refs (page:/node:) as a JSON-serializable
11761
+ projection of the in-memory TreeIndex. Read-only; the CLI uses it to print an indented tree with shared-DAG
11762
+ re-entries marked.
11763
+ tags:
11764
+ - memory
11765
+ responses:
11766
+ "200":
11767
+ description: Successful response
11768
+ requestBody:
11769
+ required: true
11770
+ content:
11771
+ application/json:
11772
+ schema:
11773
+ type: object
11774
+ properties: {}
11775
+ additionalProperties: false
11776
+ /v1/memory/v3/validate:
11777
+ post:
11778
+ operationId: memory_v3_validate_post
11779
+ summary: Validate the memory v3 tree structure (read-only)
11780
+ description:
11781
+ Read-only structural validation of the hand-authored v3 tree DAG. Reports dangling child refs, orphan
11782
+ pages, cycles, stale compositional indexes, and unknown edge targets. Writes nothing and runs no LLM — operators
11783
+ dry-run it while the v2 → v3 migration is in flight.
11784
+ tags:
11785
+ - memory
11786
+ responses:
11787
+ "200":
11788
+ description: Successful response
11789
+ requestBody:
11790
+ required: true
11791
+ content:
11792
+ application/json:
11793
+ schema:
11794
+ type: object
11795
+ properties: {}
11796
+ additionalProperties: false
11186
11797
  /v1/messages:
11187
11798
  get:
11188
11799
  operationId: messages_get
@@ -12522,6 +13133,168 @@ paths:
12522
13133
  required: true
12523
13134
  schema:
12524
13135
  type: string
13136
+ /v1/plugins:
13137
+ get:
13138
+ operationId: plugins_get
13139
+ summary: List installed plugins
13140
+ description:
13141
+ Return one entry per directory under `<workspaceDir>/plugins/`, sorted alphabetically. Matches the CLI's
13142
+ `assistant plugins list`. Supports `?q=<text>` for case-insensitive substring matching across plugin id, name,
13143
+ and description.
13144
+ tags:
13145
+ - plugins
13146
+ responses:
13147
+ "200":
13148
+ description: Successful response
13149
+ content:
13150
+ application/json:
13151
+ schema:
13152
+ type: object
13153
+ properties:
13154
+ plugins:
13155
+ type: array
13156
+ items:
13157
+ type: object
13158
+ properties:
13159
+ id:
13160
+ type: string
13161
+ description: Plugin's directory name (kebab-case). Matches `assistant plugins install <id>`.
13162
+ name:
13163
+ type: string
13164
+ description: Display name. Equal to `id` today.
13165
+ description:
13166
+ anyOf:
13167
+ - type: string
13168
+ - type: "null"
13169
+ description: From `package.json#description`; `null` when unknown.
13170
+ version:
13171
+ anyOf:
13172
+ - type: string
13173
+ - type: "null"
13174
+ description: From `package.json#version`; `null` when unknown.
13175
+ path:
13176
+ description: Absolute path to the plugin directory on the assistant host.
13177
+ type: string
13178
+ issues:
13179
+ description: Non-fatal issues with this entry (missing `package.json`, malformed JSON, ...). Omitted when clean.
13180
+ type: array
13181
+ items:
13182
+ type: string
13183
+ required:
13184
+ - id
13185
+ - name
13186
+ - description
13187
+ - version
13188
+ additionalProperties: false
13189
+ required:
13190
+ - plugins
13191
+ additionalProperties: false
13192
+ parameters:
13193
+ - name: q
13194
+ in: query
13195
+ required: false
13196
+ schema:
13197
+ type: string
13198
+ description: Optional substring filter applied to plugin id, name, and description.
13199
+ /v1/plugins/{name}:
13200
+ delete:
13201
+ operationId: plugins_by_name_delete
13202
+ summary: Uninstall a plugin
13203
+ description:
13204
+ Remove the directory at `<workspaceDir>/plugins/<name>/`. Mirrors the CLI's `assistant plugins uninstall
13205
+ <name>` (without the interactive confirmation — the API caller is responsible for any prompt). The plugin name
13206
+ is sanitized by the same regex the CLI uses; `../escape`-style values, hidden names, and absolute paths return
13207
+ 400. Missing plugins return 404. The assistant must be restarted to drop the plugin from the running runtime.
13208
+ tags:
13209
+ - plugins
13210
+ responses:
13211
+ "200":
13212
+ description: Successful response
13213
+ content:
13214
+ application/json:
13215
+ schema:
13216
+ type: object
13217
+ properties:
13218
+ name:
13219
+ type: string
13220
+ description: Directory name that was removed. Echoes the request's `:name` path parameter after sanitization.
13221
+ target:
13222
+ type: string
13223
+ description: Absolute path that was removed on the assistant host. Useful for audit logs and confirmation toasts.
13224
+ required:
13225
+ - name
13226
+ - target
13227
+ additionalProperties: false
13228
+ "400":
13229
+ description: The plugin name failed sanitization (e.g. contained slashes, dots, or uppercase letters).
13230
+ "404":
13231
+ description: No plugin directory exists with the given name.
13232
+ parameters:
13233
+ - name: name
13234
+ in: path
13235
+ required: true
13236
+ schema:
13237
+ type: string
13238
+ /v1/plugins/search:
13239
+ get:
13240
+ operationId: plugins_search_get
13241
+ summary: Search the plugin catalog
13242
+ description:
13243
+ List installable plugins from the canonical `vellum-ai/vellum-assistant` catalog at
13244
+ `experimental/plugins/`. The query is an ECMAScript regex matched case-insensitively against the directory name
13245
+ (e.g. `memory`, `^simple`). Empty query returns every entry. Mirrors the CLI's `assistant plugins search`.
13246
+ tags:
13247
+ - plugins
13248
+ responses:
13249
+ "200":
13250
+ description: Successful response
13251
+ content:
13252
+ application/json:
13253
+ schema:
13254
+ type: object
13255
+ properties:
13256
+ query:
13257
+ type: string
13258
+ description: Echo of the requested query (ECMAScript regex source).
13259
+ ref:
13260
+ type: string
13261
+ description: Git ref the catalog was listed at.
13262
+ matches:
13263
+ type: array
13264
+ items:
13265
+ type: object
13266
+ properties:
13267
+ name:
13268
+ type: string
13269
+ description: Directory name under `experimental/plugins/`. Matches `assistant plugins install <name>`.
13270
+ path:
13271
+ type: string
13272
+ description: Repo-relative path of the match (e.g. `experimental/plugins/<name>`).
13273
+ required:
13274
+ - name
13275
+ - path
13276
+ additionalProperties: false
13277
+ description: Directory matches, sorted alphabetically by name.
13278
+ required:
13279
+ - query
13280
+ - ref
13281
+ - matches
13282
+ additionalProperties: false
13283
+ parameters:
13284
+ - name: q
13285
+ in: query
13286
+ required: false
13287
+ schema:
13288
+ type: string
13289
+ description:
13290
+ ECMAScript regex pattern matched case-insensitively against catalog directory names. Empty/missing matches
13291
+ everything.
13292
+ - name: ref
13293
+ in: query
13294
+ required: false
13295
+ schema:
13296
+ type: string
13297
+ description: Optional git ref to list the catalog at. Defaults to the CLI's `DEFAULT_PLUGIN_REF` (typically `main`).
12525
13298
  /v1/profiler/runs:
12526
13299
  get:
12527
13300
  operationId: profiler_runs_get
@@ -15437,16 +16210,41 @@ paths:
15437
16210
  type: object
15438
16211
  properties:
15439
16212
  suggestion:
15440
- type: string
16213
+ anyOf:
16214
+ - type: string
16215
+ - type: "null"
15441
16216
  messageId:
15442
- type: string
16217
+ anyOf:
16218
+ - type: string
16219
+ - type: "null"
15443
16220
  source:
15444
16221
  type: string
16222
+ stale:
16223
+ type: boolean
15445
16224
  required:
15446
16225
  - suggestion
15447
16226
  - messageId
15448
16227
  - source
15449
16228
  additionalProperties: false
16229
+ parameters:
16230
+ - name: conversationId
16231
+ in: query
16232
+ required: false
16233
+ schema:
16234
+ type: string
16235
+ description: Conversation ID to fetch a suggestion for. Either this or conversationKey is required.
16236
+ - name: conversationKey
16237
+ in: query
16238
+ required: false
16239
+ schema:
16240
+ type: string
16241
+ description: Legacy conversation key. Either this or conversationId is required.
16242
+ - name: messageId
16243
+ in: query
16244
+ required: false
16245
+ schema:
16246
+ type: string
16247
+ description: Optional. Latest assistant message ID the client has seen — used to detect staleness.
15450
16248
  /v1/surface-actions:
15451
16249
  post:
15452
16250
  operationId: surfaceactions_post