@vellumai/assistant 0.8.4 → 0.8.6

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 (802) hide show
  1. package/AGENTS.md +33 -1
  2. package/ARCHITECTURE.md +3 -3
  3. package/bunfig.toml +6 -1
  4. package/docs/browser-use-architecture-phase2.md +1 -1
  5. package/docs/credential-execution-service.md +6 -6
  6. package/docs/plugins.md +4 -3
  7. package/knip.json +2 -1
  8. package/node_modules/@vellumai/skill-host-contracts/src/client.ts +12 -13
  9. package/node_modules/@vellumai/skill-host-contracts/src/skill-host.ts +4 -1
  10. package/node_modules/@vellumai/skill-host-contracts/src/tool-types.ts +16 -14
  11. package/openapi.yaml +2748 -216
  12. package/package.json +1 -1
  13. package/src/__tests__/actor-token-service.test.ts +3 -2
  14. package/src/__tests__/agent-loop-exit-reason.test.ts +102 -9
  15. package/src/__tests__/agent-loop-override-profile.test.ts +2 -1
  16. package/src/__tests__/agent-wake-disk-pressure-callsite.test.ts +1 -0
  17. package/src/__tests__/agent-wake-override-profile.test.ts +1 -0
  18. package/src/__tests__/always-loaded-tools-guard.test.ts +2 -2
  19. package/src/__tests__/annotate-risk-options.test.ts +1 -0
  20. package/src/__tests__/anthropic-provider.test.ts +34 -37
  21. package/src/__tests__/approval-cascade.test.ts +1 -0
  22. package/src/__tests__/approval-routes-http.test.ts +9 -13
  23. package/src/__tests__/assert-not-live-db.ts +79 -0
  24. package/src/__tests__/assistant-event-hub-self-exclusion.test.ts +293 -0
  25. package/src/__tests__/assistant-feature-flags-integration.test.ts +12 -28
  26. package/src/__tests__/audit-log-rotation.test.ts +72 -18
  27. package/src/__tests__/auto-analysis-end-to-end.test.ts +6 -6
  28. package/src/__tests__/background-workers-disk-pressure.test.ts +8 -11
  29. package/src/__tests__/browser-skill-endstate.test.ts +3 -3
  30. package/src/__tests__/btw-routes.test.ts +5 -5
  31. package/src/__tests__/call-controller.test.ts +3 -3
  32. package/src/__tests__/cancel-resolves-conversation-key.test.ts +1 -1
  33. package/src/__tests__/channel-approval-routes.test.ts +3 -2
  34. package/src/__tests__/channel-guardian.test.ts +6 -5
  35. package/src/__tests__/channel-readiness-slack-remote.test.ts +175 -0
  36. package/src/__tests__/channel-reply-delivery.test.ts +35 -0
  37. package/src/__tests__/channel-retry-sweep.test.ts +320 -3
  38. package/src/__tests__/checker.test.ts +18 -27
  39. package/src/__tests__/compaction-events.test.ts +2 -0
  40. package/src/__tests__/compaction-trail-store.test.ts +264 -0
  41. package/src/__tests__/compactor-call-site-logging.test.ts +215 -0
  42. package/src/__tests__/compactor-preserved-tail-count.test.ts +1 -0
  43. package/src/__tests__/computer-use-skill-manifest-regression.test.ts +12 -16
  44. package/src/__tests__/computer-use-tools.test.ts +14 -18
  45. package/src/__tests__/config-loader-backfill.test.ts +13 -28
  46. package/src/__tests__/config-loader-corrupt.test.ts +5 -5
  47. package/src/__tests__/config-loader-platform-defaults.test.ts +93 -26
  48. package/src/__tests__/config-loader-quarantine-bulletin.test.ts +3 -3
  49. package/src/__tests__/config-managed-gemini-defaults.test.ts +3 -4
  50. package/src/__tests__/config-schema.test.ts +10 -10
  51. package/src/__tests__/confirmation-request-guardian-bridge.test.ts +0 -1
  52. package/src/__tests__/connection-model-compat.test.ts +83 -0
  53. package/src/__tests__/contacts-tools.test.ts +3 -2
  54. package/src/__tests__/context-token-estimator.test.ts +22 -0
  55. package/src/__tests__/conversation-abort-tool-results.test.ts +5 -0
  56. package/src/__tests__/conversation-agent-loop-disk-pressure.test.ts +2 -1
  57. package/src/__tests__/conversation-agent-loop-handlers-max-tokens.test.ts +55 -0
  58. package/src/__tests__/conversation-agent-loop-inference-profile.test.ts +2 -1
  59. package/src/__tests__/conversation-agent-loop-overflow.test.ts +231 -2
  60. package/src/__tests__/conversation-agent-loop.test.ts +581 -54
  61. package/src/__tests__/conversation-analysis-routes.test.ts +1 -0
  62. package/src/__tests__/conversation-app-control-instantiation.test.ts +31 -24
  63. package/src/__tests__/conversation-app-control-lifecycle.test.ts +1 -0
  64. package/src/__tests__/conversation-attention-store.test.ts +101 -0
  65. package/src/__tests__/conversation-attention-telegram.test.ts +3 -2
  66. package/src/__tests__/conversation-clear-safety.test.ts +25 -25
  67. package/src/__tests__/conversation-confirmation-signals.test.ts +1 -0
  68. package/src/__tests__/conversation-delete-schedule-cleanup.test.ts +1 -1
  69. package/src/__tests__/conversation-disk-view-integration.test.ts +2 -2
  70. package/src/__tests__/conversation-error.test.ts +61 -0
  71. package/src/__tests__/conversation-fork-crud.test.ts +239 -15
  72. package/src/__tests__/conversation-fork-route.test.ts +3 -2
  73. package/src/__tests__/conversation-history-web-search.test.ts +1 -0
  74. package/src/__tests__/conversation-inference-profile-list.test.ts +3 -2
  75. package/src/__tests__/conversation-inference-profile-route.test.ts +3 -2
  76. package/src/__tests__/conversation-lifecycle.test.ts +53 -11
  77. package/src/__tests__/conversation-list-source.test.ts +3 -2
  78. package/src/__tests__/conversation-load-history-repair.test.ts +2 -1
  79. package/src/__tests__/{conversation-load-cleaned-at.test.ts → conversation-load-history-stripped.test.ts} +14 -13
  80. package/src/__tests__/conversation-pairing.test.ts +53 -0
  81. package/src/__tests__/conversation-process-app-control-preactivation.test.ts +26 -7
  82. package/src/__tests__/conversation-process-callsite.test.ts +1 -0
  83. package/src/__tests__/conversation-provider-retry-repair.test.ts +6 -0
  84. package/src/__tests__/conversation-queue.test.ts +333 -291
  85. package/src/__tests__/conversation-routes-disk-view.test.ts +112 -18
  86. package/src/__tests__/conversation-routes-guardian-reply.test.ts +33 -8
  87. package/src/__tests__/conversation-routes-slash-commands.test.ts +68 -2
  88. package/src/__tests__/conversation-runtime-assembly.test.ts +78 -0
  89. package/src/__tests__/conversation-skill-tools.test.ts +40 -147
  90. package/src/__tests__/conversation-slash-queue.test.ts +84 -32
  91. package/src/__tests__/conversation-slash-unknown.test.ts +5 -0
  92. package/src/__tests__/conversation-speed-override.test.ts +1 -0
  93. package/src/__tests__/conversation-store.test.ts +1 -1
  94. package/src/__tests__/conversation-surfaces-action-delivery.test.ts +46 -0
  95. package/src/__tests__/conversation-surfaces-data-persist.test.ts +1 -0
  96. package/src/__tests__/conversation-surfaces-standalone-payloads.test.ts +6 -3
  97. package/src/__tests__/conversation-surfaces-standalone.test.ts +6 -3
  98. package/src/__tests__/conversation-surfaces-state-update.test.ts +3 -3
  99. package/src/__tests__/conversation-surfaces-table-action.test.ts +7 -17
  100. package/src/__tests__/conversation-sync-tags.test.ts +218 -35
  101. package/src/__tests__/conversation-title-service.test.ts +1 -0
  102. package/src/__tests__/conversation-tool-setup-app-refresh.test.ts +30 -0
  103. package/src/__tests__/conversation-usage.test.ts +1 -0
  104. package/src/__tests__/conversation-workspace-cache-state.test.ts +2 -0
  105. package/src/__tests__/conversation-workspace-injection.test.ts +6 -1
  106. package/src/__tests__/conversation-workspace-tool-tracking.test.ts +6 -1
  107. package/src/__tests__/credential-broker-browser-fill.test.ts +3 -3
  108. package/src/__tests__/credential-broker-server-use.test.ts +5 -5
  109. package/src/__tests__/credential-execution-client.test.ts +72 -1
  110. package/src/__tests__/credential-execution-feature-gates.test.ts +19 -19
  111. package/src/__tests__/credential-execution-tools.test.ts +6 -6
  112. package/src/__tests__/credential-health-service.test.ts +252 -3
  113. package/src/__tests__/credential-security-invariants.test.ts +6 -5
  114. package/src/__tests__/credential-vault-unit.test.ts +21 -21
  115. package/src/__tests__/credential-vault.test.ts +5 -5
  116. package/src/__tests__/cross-provider-web-search.test.ts +56 -2
  117. package/src/__tests__/db-connection-isolation.test.ts +7 -6
  118. package/src/__tests__/db-conversation-fork-lineage-migration.test.ts +8 -10
  119. package/src/__tests__/db-conversation-inference-profile-migration.test.ts +7 -10
  120. package/src/__tests__/db-llm-request-log-provider-migration.test.ts +9 -15
  121. package/src/__tests__/db-test-helpers.ts +58 -0
  122. package/src/__tests__/disk-pressure-guard.test.ts +58 -41
  123. package/src/__tests__/disk-pressure-lifecycle.test.ts +13 -10
  124. package/src/__tests__/disk-pressure-routes.test.ts +0 -33
  125. package/src/__tests__/disk-pressure-tools.test.ts +0 -4
  126. package/src/__tests__/dm-persistence.test.ts +26 -40
  127. package/src/__tests__/document-create-dedupe.test.ts +189 -0
  128. package/src/__tests__/document-find-replace.test.ts +3 -2
  129. package/src/__tests__/document-tool-security.test.ts +81 -2
  130. package/src/__tests__/dynamic-page-surface.test.ts +2 -2
  131. package/src/__tests__/dynamic-skill-workflow-prompt.test.ts +5 -4
  132. package/src/__tests__/email-html-renderer.test.ts +12 -0
  133. package/src/__tests__/encrypted-store-test-helpers.ts +56 -0
  134. package/src/__tests__/encrypted-store.test.ts +11 -9
  135. package/src/__tests__/feature-flag-test-helpers.ts +53 -0
  136. package/src/__tests__/filing-service.test.ts +1 -0
  137. package/src/__tests__/first-greeting.test.ts +62 -12
  138. package/src/__tests__/gateway-flag-listener.test.ts +236 -0
  139. package/src/__tests__/gemini-provider.test.ts +104 -0
  140. package/src/__tests__/guardian-action-sweep.test.ts +3 -2
  141. package/src/__tests__/guardian-dispatch.test.ts +0 -1
  142. package/src/__tests__/guardian-outbound-http.test.ts +10 -7
  143. package/src/__tests__/handlers-skills-memory-v2-reseed.test.ts +48 -3
  144. package/src/__tests__/handlers-user-message-approval-consumption.test.ts +2 -1
  145. package/src/__tests__/heartbeat-disk-pressure.test.ts +5 -0
  146. package/src/__tests__/heartbeat-service.test.ts +5 -0
  147. package/src/__tests__/helpers/mock-logger.ts +26 -0
  148. package/src/__tests__/host-bash-routes.test.ts +1 -0
  149. package/src/__tests__/host-cu-routes-targeted.test.ts +1 -0
  150. package/src/__tests__/host-file-routes-targeted.test.ts +1 -0
  151. package/src/__tests__/host-shell-tool.test.ts +6 -5
  152. package/src/__tests__/host-transfer-routes-targeted.test.ts +1 -0
  153. package/src/__tests__/http-conversation-lineage.test.ts +3 -2
  154. package/src/__tests__/http-user-message-parity.test.ts +29 -7
  155. package/src/__tests__/identity-intro-cache.test.ts +133 -22
  156. package/src/__tests__/inbound-slack-persistence.test.ts +44 -72
  157. package/src/__tests__/inference-profile-reaper.test.ts +3 -2
  158. package/src/__tests__/inference-profile-session-ipc.test.ts +3 -2
  159. package/src/__tests__/init-feature-flag-overrides.test.ts +5 -6
  160. package/src/__tests__/injector-disk-pressure.test.ts +3 -17
  161. package/src/__tests__/inline-skill-load-permissions.test.ts +4 -4
  162. package/src/__tests__/list-messages-hidden-metadata.test.ts +80 -0
  163. package/src/__tests__/list-messages-tool-merge.test.ts +70 -11
  164. package/src/__tests__/llm-context-normalization.test.ts +42 -0
  165. package/src/__tests__/llm-request-log-call-site.test.ts +136 -0
  166. package/src/__tests__/llm-request-log-source-clickhouse.test.ts +26 -0
  167. package/src/__tests__/llm-resolver.test.ts +408 -9
  168. package/src/__tests__/llm-schema.test.ts +1 -1
  169. package/src/__tests__/llm-usage-store.test.ts +66 -0
  170. package/src/__tests__/logger.test.ts +89 -0
  171. package/src/__tests__/manual-token-reconciliation.test.ts +76 -1
  172. package/src/__tests__/mcp-abort-signal.test.ts +16 -2
  173. package/src/__tests__/mcp-client-auth.test.ts +14 -0
  174. package/src/__tests__/media-generate-image.test.ts +31 -0
  175. package/src/__tests__/memory-v2-static-injector.test.ts +7 -7
  176. package/src/__tests__/messaging-send-tool.test.ts +1 -0
  177. package/src/__tests__/migration-import-from-url.test.ts +3 -3
  178. package/src/__tests__/mock-gateway-ipc.ts +18 -2
  179. package/src/__tests__/model-intents.test.ts +4 -6
  180. package/src/__tests__/native-web-search.test.ts +30 -2
  181. package/src/__tests__/notification-deep-link.test.ts +62 -0
  182. package/src/__tests__/notification-guardian-path.test.ts +0 -1
  183. package/src/__tests__/oauth-commands-routes.test.ts +37 -0
  184. package/src/__tests__/oauth-provider-visibility.test.ts +8 -8
  185. package/src/__tests__/oauth-store.test.ts +3 -2
  186. package/src/__tests__/onboarding-template-contract.test.ts +4 -3
  187. package/src/__tests__/openai-provider.test.ts +54 -9
  188. package/src/__tests__/openai-responses-provider.test.ts +176 -14
  189. package/src/__tests__/openrouter-provider-only.test.ts +27 -5
  190. package/src/__tests__/outbound-slack-persistence.test.ts +46 -1
  191. package/src/__tests__/pending-interactions-resolved-event.test.ts +0 -1
  192. package/src/__tests__/persistence-pipeline.test.ts +139 -1
  193. package/src/__tests__/persistence-secret-redaction.test.ts +83 -12
  194. package/src/__tests__/platform-bash-auto-approve.test.ts +2 -2
  195. package/src/__tests__/platform.test.ts +2 -2
  196. package/src/__tests__/plugin-api-tool-definition.test.ts +92 -0
  197. package/src/__tests__/plugin-bootstrap.test.ts +11 -13
  198. package/src/__tests__/plugin-tool-contribution.test.ts +50 -40
  199. package/src/__tests__/plugin-types.test.ts +3 -2
  200. package/src/__tests__/prechat-onboarding-contract.test.ts +131 -98
  201. package/src/__tests__/pricing.test.ts +12 -0
  202. package/src/__tests__/process-message-background-slack.test.ts +21 -16
  203. package/src/__tests__/process-message-display-content.test.ts +19 -22
  204. package/src/__tests__/provider-catalog-visibility.test.ts +9 -9
  205. package/src/__tests__/provider-platform-proxy-integration.test.ts +216 -4
  206. package/src/__tests__/provider-registry-ollama.test.ts +45 -22
  207. package/src/__tests__/prune-jobs-changes-parser.test.ts +61 -0
  208. package/src/__tests__/recording-handler.test.ts +1 -0
  209. package/src/__tests__/regenerate-fire-and-forget-trace.test.ts +1 -0
  210. package/src/__tests__/registry.test.ts +84 -84
  211. package/src/__tests__/relay-server.test.ts +10 -10
  212. package/src/__tests__/require-fresh-approval.test.ts +2 -2
  213. package/src/__tests__/runtime-attachment-metadata.test.ts +3 -2
  214. package/src/__tests__/runtime-events-sse-bilingual.test.ts +154 -0
  215. package/src/__tests__/schedule-store.test.ts +16 -1
  216. package/src/__tests__/scheduler-reuse-conversation.test.ts +48 -3
  217. package/src/__tests__/secret-ingress-http.test.ts +5 -1
  218. package/src/__tests__/secure-keys.test.ts +3 -3
  219. package/src/__tests__/send-endpoint-busy.test.ts +81 -42
  220. package/src/__tests__/server-history-render.test.ts +4 -1
  221. package/src/__tests__/shell-tool-proxy-mode.test.ts +1 -1
  222. package/src/__tests__/skill-feature-flags-integration.test.ts +8 -10
  223. package/src/__tests__/skill-feature-flags.test.ts +16 -18
  224. package/src/__tests__/skill-load-feature-flag.test.ts +5 -5
  225. package/src/__tests__/skill-projection-feature-flag.test.ts +48 -37
  226. package/src/__tests__/skill-projection.benchmark.test.ts +7 -13
  227. package/src/__tests__/skill-tool-factory.test.ts +97 -96
  228. package/src/__tests__/slack-channel-config.test.ts +3 -3
  229. package/src/__tests__/subagent-call-site-routing.test.ts +11 -3
  230. package/src/__tests__/subagent-disposal.test.ts +27 -8
  231. package/src/__tests__/subagent-fork-notifications.test.ts +24 -9
  232. package/src/__tests__/subagent-fork-spawn.test.ts +13 -4
  233. package/src/__tests__/subagent-manager-notify.test.ts +20 -8
  234. package/src/__tests__/subagent-notify-parent.test.ts +6 -5
  235. package/src/__tests__/subagent-spawn-tool-fork.test.ts +58 -0
  236. package/src/__tests__/subagent-tools.test.ts +2 -1
  237. package/src/__tests__/suggestion-routes.test.ts +2 -0
  238. package/src/__tests__/sync-message-contract.test.ts +59 -0
  239. package/src/__tests__/system-prompt.test.ts +183 -131
  240. package/src/__tests__/terminal-tools.test.ts +1 -1
  241. package/src/__tests__/test-preload-verifier.ts +68 -0
  242. package/src/__tests__/test-preload.ts +32 -39
  243. package/src/__tests__/tool-approval-handler.test.ts +1 -5
  244. package/src/__tests__/tool-execute-pipeline.test.ts +2 -2
  245. package/src/__tests__/tool-execution-pipeline.benchmark.test.ts +2 -5
  246. package/src/__tests__/tool-executor-lifecycle-events.test.ts +35 -12
  247. package/src/__tests__/tool-executor.test.ts +64 -72
  248. package/src/__tests__/tool-grant-request-escalation.test.ts +1 -6
  249. package/src/__tests__/tool-preview-lifecycle.test.ts +1 -0
  250. package/src/__tests__/tool-result-metadata-plumbing.test.ts +1 -0
  251. package/src/__tests__/trusted-contact-approval-notifier.test.ts +0 -1
  252. package/src/__tests__/trusted-contact-inline-approval-integration.test.ts +1 -6
  253. package/src/__tests__/trusted-contact-multichannel.test.ts +0 -1
  254. package/src/__tests__/twilio-routes.test.ts +3 -2
  255. package/src/__tests__/ui-file-upload-surface.test.ts +2 -2
  256. package/src/__tests__/usage-routes.test.ts +3 -0
  257. package/src/__tests__/validate-input.test.ts +381 -0
  258. package/src/__tests__/verification-control-plane-policy.test.ts +3 -2
  259. package/src/__tests__/voice-scoped-grant-consumer.test.ts +2 -1
  260. package/src/__tests__/voice-session-bridge.test.ts +37 -28
  261. package/src/__tests__/workspace-git-service.test.ts +6 -5
  262. package/src/__tests__/workspace-migration-089-move-memory-tree-out-of-v3.test.ts +86 -0
  263. package/src/__tests__/workspace-migration-090-memory-router-cost-optimized-profile.test.ts +326 -0
  264. package/src/__tests__/workspace-migration-091-retighten-migration-onboarding-thread.test.ts +166 -0
  265. package/src/acp/__tests__/prepare-agent-env.test.ts +146 -0
  266. package/src/acp/prepare-agent-env.ts +78 -0
  267. package/src/acp/session-manager.ts +6 -7
  268. package/src/agent/loop.ts +88 -0
  269. package/src/api/README.md +127 -0
  270. package/src/api/constants/call-sites.ts +27 -0
  271. package/src/api/events/assistant-outbound-attachment.ts +51 -0
  272. package/src/api/events/assistant-text-delta.ts +32 -0
  273. package/src/api/events/assistant-turn-start.ts +33 -0
  274. package/src/api/events/document-comment-created.ts +48 -0
  275. package/src/api/events/document-comment-deleted.ts +24 -0
  276. package/src/api/events/document-comment-reopened.ts +25 -0
  277. package/src/api/events/document-comment-resolved.ts +27 -0
  278. package/src/api/events/generation-cancelled.ts +24 -0
  279. package/src/api/events/generation-handoff.ts +41 -0
  280. package/src/api/events/message-complete.ts +42 -0
  281. package/src/api/events/open-url.ts +30 -0
  282. package/src/api/events/relationship-state-updated.ts +25 -0
  283. package/src/api/events/tool-use-start.ts +32 -0
  284. package/src/api/index.ts +129 -0
  285. package/src/api/package.json +10 -0
  286. package/src/api/responses/llm-context-response.ts +39 -0
  287. package/src/api/responses/llm-request-log-entry.ts +93 -0
  288. package/src/api/responses/memory-recall-log.ts +65 -0
  289. package/src/api/responses/memory-v2-activation-log.ts +78 -0
  290. package/src/background-wake/background-wake-routes.test.ts +868 -0
  291. package/src/background-wake/platform-client.test.ts +308 -0
  292. package/src/background-wake/platform-client.ts +167 -0
  293. package/src/background-wake/publisher.ts +91 -0
  294. package/src/background-wake/runtime-registry.ts +24 -0
  295. package/src/background-wake/wake-intent-hooks.test.ts +282 -0
  296. package/src/calls/guardian-dispatch.ts +1 -0
  297. package/src/calls/voice-session-bridge.ts +4 -4
  298. package/src/cli/commands/__tests__/browser.test.ts +23 -5
  299. package/src/cli/commands/__tests__/conversations-slack.test.ts +16 -0
  300. package/src/cli/commands/__tests__/domain-register.test.ts +110 -0
  301. package/src/cli/commands/__tests__/domain-status.test.ts +33 -33
  302. package/src/cli/commands/__tests__/inference-send.test.ts +108 -5
  303. package/src/cli/commands/__tests__/memory-v2-compare-render.test.ts +98 -0
  304. package/src/cli/commands/__tests__/memory-v2.test.ts +1 -0
  305. package/src/cli/commands/__tests__/memory-v3-render.test.ts +340 -0
  306. package/src/cli/commands/__tests__/notifications.test.ts +184 -40
  307. package/src/cli/commands/browser.ts +247 -0
  308. package/src/cli/commands/channels/__tests__/channels.test.ts +143 -0
  309. package/src/cli/commands/channels/index.ts +229 -0
  310. package/src/cli/commands/domain.ts +91 -41
  311. package/src/cli/commands/inference.ts +93 -40
  312. package/src/cli/commands/memory-v2-compare-render.ts +115 -0
  313. package/src/cli/commands/memory-v2.ts +176 -1
  314. package/src/cli/commands/memory-v3-render.ts +491 -0
  315. package/src/cli/commands/memory-v3.ts +567 -0
  316. package/src/cli/commands/notifications.ts +365 -55
  317. package/src/cli/lib/open-browser.ts +7 -2
  318. package/src/cli/program.ts +4 -0
  319. package/src/config/assistant-feature-flags.ts +39 -46
  320. package/src/config/bundled-skills/document-editor/SKILL.md +16 -3
  321. package/src/config/bundled-skills/document-editor/TOOLS.json +18 -0
  322. package/src/config/bundled-skills/document-editor/tools/document-open.ts +12 -0
  323. package/src/config/bundled-skills/image-studio/SKILL.md +4 -0
  324. package/src/config/bundled-skills/image-studio/tools/media-generate-image.ts +2 -2
  325. package/src/config/bundled-skills/media-processing/tools/ingest-media.ts +13 -8
  326. package/src/config/bundled-skills/messaging/tools/messaging-analyze-style.ts +10 -3
  327. package/src/config/bundled-skills/phone-calls/references/TRANSCRIPTS.md +16 -14
  328. package/src/config/bundled-skills/playbooks/tools/playbook-create.ts +7 -2
  329. package/src/config/bundled-skills/playbooks/tools/playbook-update.ts +7 -2
  330. package/src/config/bundled-skills/schedule/SKILL.md +1 -1
  331. package/src/config/bundled-skills/schedule/TOOLS.json +2 -2
  332. package/src/config/bundled-skills/settings/tools/open-system-settings.ts +1 -0
  333. package/src/config/bundled-tool-registry.ts +2 -0
  334. package/src/config/call-site-defaults.ts +8 -7
  335. package/src/config/feature-flag-cache.ts +86 -0
  336. package/src/config/feature-flag-registry.json +33 -17
  337. package/src/config/llm-context-resolution.ts +10 -1
  338. package/src/config/llm-resolver.ts +121 -15
  339. package/src/config/loader.ts +4 -5
  340. package/src/config/schemas/__tests__/memory-v2.test.ts +228 -1
  341. package/src/config/schemas/call-site-catalog.ts +21 -7
  342. package/src/config/schemas/heartbeat.ts +1 -1
  343. package/src/config/schemas/llm.ts +102 -2
  344. package/src/config/schemas/memory-v2.ts +272 -0
  345. package/src/config/schemas/memory.ts +2 -1
  346. package/src/config/schemas/services.ts +6 -2
  347. package/src/config/seed-inference-profiles.ts +36 -16
  348. package/src/context/compactor.ts +52 -0
  349. package/src/context/token-estimator.ts +10 -5
  350. package/src/conversations/__tests__/message-consolidation.test.ts +350 -0
  351. package/src/conversations/message-consolidation.ts +404 -0
  352. package/src/credential-execution/executable-discovery.ts +40 -0
  353. package/src/credential-execution/process-manager.ts +6 -2
  354. package/src/credential-health/credential-health-service.ts +125 -40
  355. package/src/daemon/__tests__/conversation-lifecycle-auto-analyze.test.ts +3 -6
  356. package/src/daemon/__tests__/conversation-surfaces-launch.test.ts +13 -15
  357. package/src/daemon/__tests__/conversation-tool-setup-exclude.test.ts +2 -3
  358. package/src/daemon/__tests__/daemon-skill-host.test.ts +2 -0
  359. package/src/daemon/__tests__/meet-manifest-loader.test.ts +25 -12
  360. package/src/daemon/__tests__/native-web-search-metadata.test.ts +1 -0
  361. package/src/daemon/__tests__/switch-inference-profile-tool.test.ts +107 -0
  362. package/src/daemon/__tests__/web-search-status-text.test.ts +1 -0
  363. package/src/daemon/conversation-agent-loop-handlers.ts +390 -80
  364. package/src/daemon/conversation-agent-loop.ts +244 -90
  365. package/src/daemon/conversation-error.ts +64 -6
  366. package/src/daemon/conversation-lifecycle.ts +27 -22
  367. package/src/daemon/conversation-messaging.ts +84 -43
  368. package/src/daemon/conversation-process.ts +74 -37
  369. package/src/daemon/conversation-runtime-assembly.ts +38 -17
  370. package/src/daemon/conversation-skill-tools.ts +14 -30
  371. package/src/daemon/conversation-surfaces.ts +69 -34
  372. package/src/daemon/conversation-tool-setup.ts +77 -32
  373. package/src/daemon/conversation-usage.ts +2 -0
  374. package/src/daemon/conversation.ts +40 -75
  375. package/src/daemon/daemon-control.ts +1 -1
  376. package/src/daemon/daemon-skill-host.ts +9 -2
  377. package/src/daemon/disk-pressure-guard.ts +39 -29
  378. package/src/daemon/first-greeting.ts +31 -13
  379. package/src/daemon/handlers/config-model.test.ts +1 -0
  380. package/src/daemon/handlers/conversations.ts +11 -3
  381. package/src/daemon/handlers/shared.ts +6 -1
  382. package/src/daemon/host-browser-proxy.ts +5 -5
  383. package/src/daemon/host-cu-proxy.ts +4 -4
  384. package/src/daemon/host-file-proxy.ts +4 -4
  385. package/src/daemon/host-proxy-base.ts +4 -4
  386. package/src/daemon/host-transfer-proxy.ts +10 -10
  387. package/src/daemon/lifecycle.ts +29 -26
  388. package/src/daemon/mcp-reload-service.ts +1 -1
  389. package/src/daemon/meet-manifest-loader.ts +11 -24
  390. package/src/daemon/message-types/conversations.ts +22 -27
  391. package/src/daemon/message-types/document-comments.ts +8 -44
  392. package/src/daemon/message-types/home.ts +2 -14
  393. package/src/daemon/message-types/integrations.ts +2 -7
  394. package/src/daemon/message-types/messages.ts +25 -48
  395. package/src/daemon/message-types/subagents.ts +6 -0
  396. package/src/daemon/message-types/sync.ts +14 -0
  397. package/src/daemon/process-message.ts +9 -9
  398. package/src/daemon/providers-setup.ts +1 -1
  399. package/src/daemon/server.ts +16 -0
  400. package/src/daemon/shutdown-handlers.ts +24 -5
  401. package/src/daemon/switch-inference-profile-tool.ts +62 -0
  402. package/src/daemon/tool-setup-types.ts +7 -0
  403. package/src/daemon/wake-target-adapter.ts +10 -0
  404. package/src/documents/document-store.ts +38 -0
  405. package/src/export/__tests__/transcript-formatter.test.ts +1 -0
  406. package/src/heartbeat/__tests__/heartbeat-service.test.ts +30 -1
  407. package/src/heartbeat/heartbeat-service.ts +63 -0
  408. package/src/home/__tests__/feed-writer.test.ts +161 -0
  409. package/src/home/__tests__/post-connect-feed.test.ts +1 -0
  410. package/src/home/__tests__/suggested-prompts.test.ts +55 -59
  411. package/src/home/feed-writer.ts +146 -7
  412. package/src/home/home-greeting.ts +0 -9
  413. package/src/home/suggested-prompts.ts +27 -154
  414. package/src/ipc/__tests__/cli-ipc.test.ts +1 -0
  415. package/src/ipc/gateway-client.test.ts +4 -1
  416. package/src/ipc/gateway-flag-listener.ts +123 -0
  417. package/src/ipc/skill-routes/__tests__/memory.test.ts +1 -0
  418. package/src/ipc/skill-routes/__tests__/registries.test.ts +36 -7
  419. package/src/ipc/skill-routes/memory.ts +4 -3
  420. package/src/ipc/skill-routes/registries.ts +35 -40
  421. package/src/memory/__tests__/db-async-query.test.ts +165 -0
  422. package/src/memory/__tests__/db-maintenance.test.ts +115 -0
  423. package/src/memory/__tests__/jobs-store-enqueue-gate.test.ts +242 -0
  424. package/src/memory/__tests__/jobs-store-job-classes.test.ts +28 -1
  425. package/src/memory/__tests__/jobs-worker-v2-schedule.test.ts +26 -5
  426. package/src/memory/__tests__/memory-retrospective-enqueue.test.ts +1 -0
  427. package/src/memory/__tests__/memory-retrospective-job.test.ts +8 -0
  428. package/src/memory/__tests__/memory-retrospective-startup-cleanup.test.ts +1 -0
  429. package/src/memory/__tests__/memory-v2-activation-log-store.test.ts +31 -0
  430. package/src/memory/auto-analysis-enqueue.ts +5 -1
  431. package/src/memory/conversation-attention-store.ts +17 -3
  432. package/src/memory/conversation-crud.ts +423 -182
  433. package/src/memory/conversation-starters-cadence.ts +3 -1
  434. package/src/memory/conversation-title-service.ts +19 -3
  435. package/src/memory/db-async-query.ts +214 -0
  436. package/src/memory/db-connection.ts +29 -19
  437. package/src/memory/db-init.ts +14 -0
  438. package/src/memory/db-maintenance.ts +30 -21
  439. package/src/memory/db-singleton.ts +77 -0
  440. package/src/memory/delivery-channels.ts +82 -0
  441. package/src/memory/graph/__tests__/conversation-graph-memory-v2-routing.test.ts +2 -4
  442. package/src/memory/graph/bootstrap.ts +8 -1
  443. package/src/memory/graph/capability-seed.ts +7 -3
  444. package/src/memory/graph/conversation-graph-memory.ts +100 -17
  445. package/src/memory/graph/extraction.ts +1 -5
  446. package/src/memory/graph/graph-search.ts +7 -1
  447. package/src/memory/graph/retriever.test.ts +3 -3
  448. package/src/memory/indexer.ts +28 -18
  449. package/src/memory/job-handlers/cleanup.ts +76 -18
  450. package/src/memory/job-handlers/conversation-starters.ts +1 -4
  451. package/src/memory/job-handlers/embedding.test.ts +3 -2
  452. package/src/memory/jobs/__tests__/embed-concept-page.test.ts +5 -2
  453. package/src/memory/jobs/embed-pkb-file.ts +6 -1
  454. package/src/memory/jobs-store.ts +14 -0
  455. package/src/memory/jobs-worker.ts +66 -22
  456. package/src/memory/llm-request-log-source-clickhouse.ts +122 -2
  457. package/src/memory/llm-request-log-source-local.ts +31 -0
  458. package/src/memory/llm-request-log-source.ts +40 -2
  459. package/src/memory/llm-request-log-store.ts +228 -1
  460. package/src/memory/llm-usage-store.ts +24 -0
  461. package/src/memory/memory-retrospective-enqueue.ts +8 -1
  462. package/src/memory/memory-retrospective-job.ts +5 -0
  463. package/src/memory/memory-v2-activation-log-store.ts +110 -7
  464. package/src/memory/migrations/260-rename-cleaned-at.ts +44 -0
  465. package/src/memory/migrations/261-llm-usage-add-raw-usage.ts +36 -0
  466. package/src/memory/migrations/262-memory-v3-coactivation.ts +57 -0
  467. package/src/memory/migrations/263-memory-v3-auto-edges.ts +50 -0
  468. package/src/memory/migrations/264-llm-request-log-call-site.ts +29 -0
  469. package/src/memory/migrations/265-drop-provider-connection-status.ts +26 -0
  470. package/src/memory/migrations/266-messages-client-message-id.ts +43 -0
  471. package/src/memory/migrations/index.ts +19 -0
  472. package/src/memory/migrations/registry.ts +33 -0
  473. package/src/memory/schema/conversations.ts +10 -2
  474. package/src/memory/schema/inference.ts +0 -1
  475. package/src/memory/schema/infrastructure.ts +21 -0
  476. package/src/memory/tool-usage-store.ts +36 -8
  477. package/src/memory/v2/__tests__/backfill-jobs.test.ts +5 -2
  478. package/src/memory/v2/__tests__/consolidation-job.test.ts +1 -0
  479. package/src/memory/v2/__tests__/harness-compare.test.ts +186 -0
  480. package/src/memory/v2/__tests__/harness-metrics.test.ts +83 -0
  481. package/src/memory/v2/__tests__/harness-oracle.test.ts +257 -0
  482. package/src/memory/v2/__tests__/harness-replay-input.test.ts +230 -0
  483. package/src/memory/v2/__tests__/harness-runner.test.ts +135 -0
  484. package/src/memory/v2/__tests__/injection.test.ts +127 -98
  485. package/src/memory/v2/__tests__/qdrant.test.ts +36 -0
  486. package/src/memory/v2/__tests__/router.test.ts +171 -3
  487. package/src/memory/v2/__tests__/sweep-job.test.ts +6 -3
  488. package/src/memory/v2/harness/compare.ts +57 -0
  489. package/src/memory/v2/harness/metrics.ts +128 -0
  490. package/src/memory/v2/harness/oracle.ts +145 -0
  491. package/src/memory/v2/harness/replay-input.ts +240 -0
  492. package/src/memory/v2/harness/retriever.ts +74 -0
  493. package/src/memory/v2/harness/router-retriever.ts +43 -0
  494. package/src/memory/v2/harness/runner.ts +112 -0
  495. package/src/memory/v2/harness/trace.ts +64 -0
  496. package/src/memory/v2/injection.ts +21 -15
  497. package/src/memory/v2/prompts/router.ts +26 -1
  498. package/src/memory/v2/qdrant.ts +14 -2
  499. package/src/memory/v2/router.ts +171 -18
  500. package/src/memory/v3/__tests__/coactivation-store.test.ts +422 -0
  501. package/src/memory/v3/__tests__/consolidation-job.test.ts +466 -0
  502. package/src/memory/v3/__tests__/coretrieval-seed.test.ts +270 -0
  503. package/src/memory/v3/__tests__/edge-learning-job.test.ts +324 -0
  504. package/src/memory/v3/__tests__/edges.test.ts +706 -0
  505. package/src/memory/v3/__tests__/filter.test.ts +560 -0
  506. package/src/memory/v3/__tests__/gate.test.ts +637 -0
  507. package/src/memory/v3/__tests__/index-composition.test.ts +291 -0
  508. package/src/memory/v3/__tests__/loop.test.ts +775 -0
  509. package/src/memory/v3/__tests__/retriever.test.ts +226 -0
  510. package/src/memory/v3/__tests__/scouts.test.ts +489 -0
  511. package/src/memory/v3/__tests__/shadow-diff.test.ts +225 -0
  512. package/src/memory/v3/__tests__/shadow-middleware.test.ts +398 -0
  513. package/src/memory/v3/__tests__/system-prompts.test.ts +154 -0
  514. package/src/memory/v3/__tests__/traversal.test.ts +508 -0
  515. package/src/memory/v3/__tests__/tree-index.test.ts +280 -0
  516. package/src/memory/v3/__tests__/tree-store.test.ts +529 -0
  517. package/src/memory/v3/__tests__/tree-walk.test.ts +784 -0
  518. package/src/memory/v3/__tests__/validate.test.ts +277 -0
  519. package/src/memory/v3/auto-edges.ts +223 -0
  520. package/src/memory/v3/coactivation-store.ts +124 -0
  521. package/src/memory/v3/consolidation-job.ts +323 -0
  522. package/src/memory/v3/coretrieval-seed.ts +240 -0
  523. package/src/memory/v3/edge-learning-job.ts +160 -0
  524. package/src/memory/v3/edges.ts +286 -0
  525. package/src/memory/v3/filter.ts +286 -0
  526. package/src/memory/v3/gate.ts +349 -0
  527. package/src/memory/v3/index-composition.ts +126 -0
  528. package/src/memory/v3/llm-capture.ts +46 -0
  529. package/src/memory/v3/loop.ts +430 -0
  530. package/src/memory/v3/maintenance.ts +144 -0
  531. package/src/memory/v3/prompt-context.ts +33 -0
  532. package/src/memory/v3/prompts/consolidation.ts +458 -0
  533. package/src/memory/v3/prompts/system-prompts.ts +196 -0
  534. package/src/memory/v3/retriever.ts +33 -0
  535. package/src/memory/v3/scouts.ts +431 -0
  536. package/src/memory/v3/shadow-diff.ts +287 -0
  537. package/src/memory/v3/shadow-middleware.ts +347 -0
  538. package/src/memory/v3/traversal.ts +211 -0
  539. package/src/memory/v3/tree-index.ts +237 -0
  540. package/src/memory/v3/tree-store.ts +394 -0
  541. package/src/memory/v3/tree-walk.ts +356 -0
  542. package/src/memory/v3/types.ts +65 -0
  543. package/src/memory/v3/validate.ts +323 -0
  544. package/src/notifications/__tests__/emit-signal-home-feed.test.ts +1 -0
  545. package/src/notifications/__tests__/home-feed-side-effect.test.ts +1 -0
  546. package/src/notifications/adapters/macos.ts +18 -1
  547. package/src/notifications/adapters/platform.ts +1 -1
  548. package/src/notifications/adapters/slack.ts +45 -11
  549. package/src/notifications/broadcaster.ts +114 -63
  550. package/src/notifications/conversation-pairing.ts +23 -3
  551. package/src/notifications/decision-engine.ts +1 -4
  552. package/src/notifications/decisions-store.ts +32 -1
  553. package/src/notifications/deliveries-store.ts +45 -0
  554. package/src/notifications/edit-notification.ts +201 -0
  555. package/src/notifications/emit-signal.ts +40 -50
  556. package/src/notifications/signal.ts +10 -0
  557. package/src/notifications/types.ts +37 -0
  558. package/src/oauth/byo-connection.test.ts +67 -3
  559. package/src/oauth/byo-connection.ts +32 -5
  560. package/src/oauth/connect-orchestrator.ts +9 -0
  561. package/src/oauth/connection-resolver.test.ts +76 -0
  562. package/src/oauth/connection-resolver.ts +49 -10
  563. package/src/oauth/manual-token-connection.ts +51 -3
  564. package/src/oauth/seed-providers.ts +3 -0
  565. package/src/permissions/approval-policy.test.ts +19 -5
  566. package/src/permissions/approval-policy.ts +14 -3
  567. package/src/permissions/checker.ts +21 -8
  568. package/src/permissions/prompter.ts +3 -3
  569. package/src/permissions/question-prompter.ts +5 -2
  570. package/src/permissions/secret-prompter.ts +2 -2
  571. package/src/platform/client.test.ts +24 -1
  572. package/src/platform/client.ts +8 -0
  573. package/src/platform/feature-gate.ts +15 -0
  574. package/src/plugin-api/index.ts +4 -0
  575. package/src/plugin-api/types.ts +7 -33
  576. package/src/plugins/defaults/index.ts +6 -0
  577. package/src/plugins/defaults/injectors.ts +20 -19
  578. package/src/plugins/defaults/persistence.ts +25 -6
  579. package/src/plugins/external-plugin-loader.ts +5 -68
  580. package/src/plugins/types.ts +68 -29
  581. package/src/proactive-artifact/aux-message-injector.ts +17 -4
  582. package/src/proactive-artifact/job.test.ts +1 -0
  583. package/src/prompts/__tests__/system-prompt.test.ts +4 -4
  584. package/src/prompts/__tests__/task-progress-hint-section.test.ts +3 -9
  585. package/src/prompts/persona-resolver.ts +36 -21
  586. package/src/prompts/sections.ts +39 -7
  587. package/src/prompts/system-prompt.ts +84 -221
  588. package/src/prompts/template-detection.ts +10 -4
  589. package/src/prompts/templates/BOOTSTRAP.md +9 -13
  590. package/src/prompts/templates/IDENTITY.md +0 -2
  591. package/src/prompts/templates/system-sections.ts +230 -8
  592. package/src/providers/__tests__/connection-model-compat.test.ts +233 -0
  593. package/src/providers/__tests__/registry-native-web-search.test.ts +122 -0
  594. package/src/providers/__tests__/retry-callsite.test.ts +85 -5
  595. package/src/providers/anthropic/client.ts +32 -66
  596. package/src/providers/call-site-routing.ts +42 -6
  597. package/src/providers/connection-model-compat.ts +61 -0
  598. package/src/providers/connection-resolution.ts +47 -14
  599. package/src/providers/fireworks/client.ts +1 -0
  600. package/src/providers/gemini/client.ts +70 -6
  601. package/src/providers/inference/__tests__/adapter-factory-openai-compatible.test.ts +0 -2
  602. package/src/providers/inference/__tests__/base-url-security.test.ts +2 -3
  603. package/src/providers/inference/__tests__/{connections-status-label.test.ts → connections-label.test.ts} +12 -111
  604. package/src/providers/inference/adapter-factory.ts +3 -0
  605. package/src/providers/inference/auth.ts +0 -8
  606. package/src/providers/inference/connections.ts +3 -66
  607. package/src/providers/inference/resolve-auth.ts +2 -3
  608. package/src/providers/minimax/client.ts +106 -0
  609. package/src/providers/model-catalog.ts +78 -1
  610. package/src/providers/model-intents.ts +4 -4
  611. package/src/providers/openai/__tests__/api-error-detail.test.ts +120 -0
  612. package/src/providers/openai/__tests__/chat-completions-provider-reasoning.test.ts +157 -5
  613. package/src/providers/openai/chat-completions-provider.ts +116 -15
  614. package/src/providers/openai/codex-models.ts +20 -0
  615. package/src/providers/openai/responses-provider.ts +87 -30
  616. package/src/providers/openrouter/client.ts +13 -8
  617. package/src/providers/provider-send-message.ts +20 -5
  618. package/src/providers/registry.ts +48 -8
  619. package/src/providers/retry.ts +50 -7
  620. package/src/providers/search-provider-catalog.ts +17 -9
  621. package/src/providers/thinking-config.ts +26 -1
  622. package/src/providers/types.ts +9 -0
  623. package/src/providers/usage-tracking.ts +2 -0
  624. package/src/runtime/AGENTS.md +2 -2
  625. package/src/runtime/__tests__/agent-wake.test.ts +1 -0
  626. package/src/runtime/__tests__/background-job-runner.test.ts +1 -0
  627. package/src/runtime/access-request-helper.ts +1 -0
  628. package/src/runtime/agent-wake.ts +1 -0
  629. package/src/runtime/assistant-event-hub.ts +76 -6
  630. package/src/runtime/auth/route-policy.ts +46 -0
  631. package/src/runtime/btw-sidechain.ts +0 -6
  632. package/src/runtime/channel-readiness-service.ts +68 -0
  633. package/src/runtime/channel-reply-delivery.ts +23 -0
  634. package/src/runtime/channel-retry-sweep.ts +47 -14
  635. package/src/runtime/confirmation-request-guardian-bridge.ts +1 -1
  636. package/src/runtime/http-types.ts +0 -2
  637. package/src/runtime/migrations/vbundle-builder.ts +12 -4
  638. package/src/runtime/pending-interactions.ts +0 -1
  639. package/src/runtime/routes/__tests__/bookmark-routes.test.ts +1 -0
  640. package/src/runtime/routes/__tests__/conversation-compaction-routes.test.ts +406 -0
  641. package/src/runtime/routes/__tests__/conversation-query-routes.test.ts +204 -0
  642. package/src/runtime/routes/__tests__/heartbeat-routes.test.ts +1 -1
  643. package/src/runtime/routes/__tests__/home-feed-routes.test.ts +209 -1
  644. package/src/runtime/routes/__tests__/inference-provider-connection-routes.test.ts +13 -50
  645. package/src/runtime/routes/__tests__/memory-v2-simulate-route.test.ts +76 -9
  646. package/src/runtime/routes/__tests__/memory-v3-simulate-params.test.ts +35 -0
  647. package/src/runtime/routes/__tests__/plugins-routes.test.ts +512 -0
  648. package/src/runtime/routes/__tests__/slack-channel-routes.test.ts +3 -2
  649. package/src/runtime/routes/__tests__/surface-content-routes.test.ts +294 -0
  650. package/src/runtime/routes/__tests__/task-routes.test.ts +48 -3
  651. package/src/runtime/routes/acp-routes-list.test.ts +3 -0
  652. package/src/runtime/routes/acp-routes.test.ts +255 -6
  653. package/src/runtime/routes/acp-routes.ts +8 -1
  654. package/src/runtime/routes/app-management-routes.ts +111 -4
  655. package/src/runtime/routes/avatar-routes.ts +10 -10
  656. package/src/runtime/routes/background-wake-routes.ts +356 -0
  657. package/src/runtime/routes/browser-tabs-routes.ts +200 -0
  658. package/src/runtime/routes/btw-routes.ts +4 -10
  659. package/src/runtime/routes/conversation-analysis-routes.ts +6 -0
  660. package/src/runtime/routes/conversation-cli-routes.ts +1 -1
  661. package/src/runtime/routes/conversation-compaction-routes.ts +263 -0
  662. package/src/runtime/routes/conversation-list-routes.ts +159 -4
  663. package/src/runtime/routes/conversation-management-routes.ts +108 -26
  664. package/src/runtime/routes/conversation-query-routes.ts +200 -44
  665. package/src/runtime/routes/conversation-routes.ts +409 -521
  666. package/src/runtime/routes/conversation-starter-routes.ts +6 -3
  667. package/src/runtime/routes/conversations-import-routes.ts +19 -6
  668. package/src/runtime/routes/disk-pressure-routes.ts +1 -1
  669. package/src/runtime/routes/documents-routes.ts +10 -1
  670. package/src/runtime/routes/domain-routes.ts +60 -10
  671. package/src/runtime/routes/email-routes.ts +5 -2
  672. package/src/runtime/routes/events-routes.ts +54 -10
  673. package/src/runtime/routes/group-routes.ts +35 -8
  674. package/src/runtime/routes/home-feed-routes.ts +129 -0
  675. package/src/runtime/routes/host-browser-routes.ts +10 -2
  676. package/src/runtime/routes/host-cu-routes.ts +2 -2
  677. package/src/runtime/routes/identity-intro-cache.ts +61 -16
  678. package/src/runtime/routes/identity-routes.ts +30 -9
  679. package/src/runtime/routes/inbound-stages/acl-enforcement.ts +96 -3
  680. package/src/runtime/routes/inbound-stages/background-dispatch.test.ts +530 -6
  681. package/src/runtime/routes/inbound-stages/background-dispatch.ts +57 -8
  682. package/src/runtime/routes/index.ts +10 -0
  683. package/src/runtime/routes/inference-profile-session-handler.ts +22 -12
  684. package/src/runtime/routes/inference-profile-session-routes.ts +7 -1
  685. package/src/runtime/routes/inference-provider-connection-routes.ts +5 -26
  686. package/src/runtime/routes/integrations/vercel.ts +15 -0
  687. package/src/runtime/routes/llm-call-sites-routes.ts +32 -5
  688. package/src/runtime/routes/llm-context-normalization.ts +7 -2
  689. package/src/runtime/routes/memory-item-routes.ts +8 -3
  690. package/src/runtime/routes/memory-v2-routes.ts +215 -5
  691. package/src/runtime/routes/memory-v3-routes.ts +474 -0
  692. package/src/runtime/routes/migration-routes.ts +32 -28
  693. package/src/runtime/routes/notification-routes.ts +63 -1
  694. package/src/runtime/routes/oauth-commands-routes.ts +6 -1
  695. package/src/runtime/routes/plugins-routes.ts +337 -0
  696. package/src/runtime/routes/rename-conversation-routes.ts +6 -2
  697. package/src/runtime/routes/secret-routes.ts +25 -5
  698. package/src/runtime/routes/settings-routes.ts +12 -11
  699. package/src/runtime/routes/slack-channel-routes.ts +5 -4
  700. package/src/runtime/routes/surface-action-routes.ts +1 -38
  701. package/src/runtime/routes/surface-content-routes.ts +12 -5
  702. package/src/runtime/routes/surface-conversation-resolver.ts +65 -0
  703. package/src/runtime/routes/wipe-conversation-routes.ts +3 -0
  704. package/src/runtime/routes/workspace-routes.ts +25 -10
  705. package/src/runtime/services/__tests__/analyze-conversation.test.ts +2 -0
  706. package/src/runtime/slack-dm-text-delivery.ts +177 -0
  707. package/src/runtime/sync/resource-sync-events.ts +106 -38
  708. package/src/runtime/sync/sync-publisher.test.ts +49 -0
  709. package/src/runtime/sync/sync-publisher.ts +2 -1
  710. package/src/runtime/tool-grant-request-helper.ts +1 -0
  711. package/src/runtime/verification-outbound-actions.ts +73 -1
  712. package/src/schedule/schedule-store.ts +8 -1
  713. package/src/schedule/scheduler.ts +111 -15
  714. package/src/security/__tests__/provider-key-env-fallback.test.ts +3 -3
  715. package/src/security/encrypted-store.ts +7 -16
  716. package/src/security/store-path-override.ts +61 -0
  717. package/src/signals/user-message.ts +5 -8
  718. package/src/skills/validate-input.ts +177 -0
  719. package/src/subagent/manager.ts +13 -13
  720. package/src/subagent/types.ts +6 -0
  721. package/src/tasks/tool-sanitizer.ts +2 -2
  722. package/src/telemetry/types.ts +12 -0
  723. package/src/telemetry/usage-telemetry-reporter.test.ts +48 -0
  724. package/src/telemetry/usage-telemetry-reporter.ts +1 -0
  725. package/src/tools/acp/spawn.test.ts +119 -0
  726. package/src/tools/acp/spawn.ts +15 -2
  727. package/src/tools/apps/definitions.ts +36 -28
  728. package/src/tools/ask-question/ask-question-tool.test.ts +3 -3
  729. package/src/tools/ask-question/ask-question-tool.ts +38 -45
  730. package/src/tools/browser/__tests__/browser-execution-acquire.test.ts +2 -8
  731. package/src/tools/browser/__tests__/pinned-tabs.test.ts +70 -0
  732. package/src/tools/browser/browser-execution.ts +16 -3
  733. package/src/tools/browser/cdp-client/__tests__/browser-tabs-factory.test.ts +402 -0
  734. package/src/tools/browser/cdp-client/__tests__/types.test.ts +3 -0
  735. package/src/tools/browser/cdp-client/cdp-inspect-client.ts +12 -0
  736. package/src/tools/browser/cdp-client/extension-cdp-client.ts +27 -1
  737. package/src/tools/browser/cdp-client/factory.ts +100 -17
  738. package/src/tools/browser/cdp-client/local-cdp-client.ts +12 -0
  739. package/src/tools/browser/cdp-client/types.ts +65 -0
  740. package/src/tools/browser/pinned-tabs.ts +96 -40
  741. package/src/tools/computer-use/definitions.ts +282 -336
  742. package/src/tools/credential-execution/make-authenticated-request.ts +3 -9
  743. package/src/tools/credential-execution/manage-secure-command-tool.ts +3 -9
  744. package/src/tools/credential-execution/run-authenticated-command.ts +3 -9
  745. package/src/tools/credentials/vault.ts +3 -9
  746. package/src/tools/document/document-tool.ts +189 -7
  747. package/src/tools/execution-target.ts +18 -23
  748. package/src/tools/executor.ts +24 -56
  749. package/src/tools/filesystem/edit.ts +3 -9
  750. package/src/tools/filesystem/list.ts +3 -9
  751. package/src/tools/filesystem/read.ts +3 -9
  752. package/src/tools/filesystem/write.ts +3 -9
  753. package/src/tools/host-filesystem/edit.test.ts +1 -0
  754. package/src/tools/host-filesystem/edit.ts +3 -9
  755. package/src/tools/host-filesystem/read.test.ts +1 -0
  756. package/src/tools/host-filesystem/read.ts +3 -9
  757. package/src/tools/host-filesystem/transfer.test.ts +31 -6
  758. package/src/tools/host-filesystem/transfer.ts +3 -9
  759. package/src/tools/host-filesystem/write.test.ts +1 -0
  760. package/src/tools/host-filesystem/write.ts +3 -9
  761. package/src/tools/host-terminal/host-shell.ts +3 -9
  762. package/src/tools/mcp/mcp-tool-factory.ts +1 -10
  763. package/src/tools/memory/register.test.ts +1 -1
  764. package/src/tools/memory/register.ts +4 -9
  765. package/src/tools/network/__tests__/managed-search-proxy.test.ts +282 -0
  766. package/src/tools/network/__tests__/web-search.test.ts +211 -3
  767. package/src/tools/network/managed-search-proxy.ts +183 -0
  768. package/src/tools/network/web-fetch.ts +3 -9
  769. package/src/tools/network/web-search.ts +224 -76
  770. package/src/tools/policy-context.ts +3 -1
  771. package/src/tools/registry.ts +150 -123
  772. package/src/tools/schedule/create.ts +1 -1
  773. package/src/tools/schema-transforms.ts +1 -1
  774. package/src/tools/skills/execute.ts +3 -9
  775. package/src/tools/skills/load.ts +3 -9
  776. package/src/tools/skills/skill-tool-factory.ts +18 -44
  777. package/src/tools/subagent/notify-parent.ts +3 -9
  778. package/src/tools/subagent/spawn.ts +3 -0
  779. package/src/tools/system/request-permission.ts +3 -9
  780. package/src/tools/terminal/shell.ts +3 -9
  781. package/src/tools/tool-approval-handler.ts +10 -4
  782. package/src/tools/tool-defaults.ts +94 -0
  783. package/src/tools/tool-name-aliases.ts +72 -14
  784. package/src/tools/types.ts +32 -101
  785. package/src/tools/ui-surface/definitions.ts +104 -108
  786. package/src/types/onboarding-context.ts +6 -0
  787. package/src/usage/attribution.ts +32 -1
  788. package/src/usage/pricing.ts +23 -0
  789. package/src/usage/types.ts +12 -0
  790. package/src/util/browser.ts +7 -2
  791. package/src/util/logger.ts +16 -7
  792. package/src/util/platform.ts +7 -2
  793. package/src/util/sqlite3-runtime.ts +65 -0
  794. package/src/workspace/migrations/086-revert-stale-gemini-mis-rewrites.ts +1 -0
  795. package/src/workspace/migrations/089-move-memory-tree-out-of-v3.ts +86 -0
  796. package/src/workspace/migrations/090-memory-router-cost-optimized-profile.ts +109 -0
  797. package/src/workspace/migrations/091-retighten-migration-onboarding-thread.ts +41 -0
  798. package/src/workspace/migrations/registry.ts +6 -0
  799. package/src/__tests__/compaction-strip-metadata-clear.test.ts +0 -206
  800. package/src/__tests__/message-complete-display-id.test.ts +0 -175
  801. package/src/daemon/query-complexity-router.ts +0 -75
  802. 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.6
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
@@ -460,8 +460,30 @@ paths:
460
460
  properties:
461
461
  apps:
462
462
  type: array
463
- items: {}
464
- description: Array of app summary objects
463
+ items:
464
+ type: object
465
+ properties:
466
+ id:
467
+ type: string
468
+ name:
469
+ type: string
470
+ description:
471
+ type: string
472
+ icon:
473
+ type: string
474
+ createdAt:
475
+ type: number
476
+ version:
477
+ type: string
478
+ contentId:
479
+ type: string
480
+ required:
481
+ - id
482
+ - name
483
+ - createdAt
484
+ - version
485
+ - contentId
486
+ additionalProperties: false
465
487
  required:
466
488
  - apps
467
489
  additionalProperties: false
@@ -540,6 +562,18 @@ paths:
540
562
  responses:
541
563
  "200":
542
564
  description: Successful response
565
+ content:
566
+ application/json:
567
+ schema:
568
+ type: object
569
+ properties:
570
+ success:
571
+ type: boolean
572
+ result: {}
573
+ required:
574
+ - success
575
+ - result
576
+ additionalProperties: false
543
577
  parameters:
544
578
  - name: id
545
579
  in: path
@@ -560,6 +594,18 @@ paths:
560
594
  responses:
561
595
  "200":
562
596
  description: Successful response
597
+ content:
598
+ application/json:
599
+ schema:
600
+ type: object
601
+ properties:
602
+ success:
603
+ type: boolean
604
+ result: {}
605
+ required:
606
+ - success
607
+ - result
608
+ additionalProperties: false
563
609
  parameters:
564
610
  - name: id
565
611
  in: path
@@ -597,6 +643,16 @@ paths:
597
643
  responses:
598
644
  "200":
599
645
  description: Successful response
646
+ content:
647
+ application/json:
648
+ schema:
649
+ type: object
650
+ properties:
651
+ success:
652
+ type: boolean
653
+ required:
654
+ - success
655
+ additionalProperties: false
600
656
  parameters:
601
657
  - name: id
602
658
  in: path
@@ -613,6 +669,19 @@ paths:
613
669
  responses:
614
670
  "200":
615
671
  description: Successful response
672
+ content:
673
+ application/json:
674
+ schema:
675
+ type: object
676
+ properties:
677
+ appId:
678
+ type: string
679
+ diff:
680
+ type: string
681
+ required:
682
+ - appId
683
+ - diff
684
+ additionalProperties: false
616
685
  parameters:
617
686
  - name: id
618
687
  in: path
@@ -648,7 +717,20 @@ paths:
648
717
  type: string
649
718
  versions:
650
719
  type: array
651
- items: {}
720
+ items:
721
+ type: object
722
+ properties:
723
+ commitHash:
724
+ type: string
725
+ message:
726
+ type: string
727
+ timestamp:
728
+ type: number
729
+ required:
730
+ - commitHash
731
+ - message
732
+ - timestamp
733
+ additionalProperties: false
652
734
  required:
653
735
  - appId
654
736
  - versions
@@ -709,6 +791,21 @@ paths:
709
791
  responses:
710
792
  "200":
711
793
  description: Successful response
794
+ content:
795
+ application/json:
796
+ schema:
797
+ type: object
798
+ properties:
799
+ appId:
800
+ type: string
801
+ preview:
802
+ anyOf:
803
+ - type: string
804
+ - type: "null"
805
+ required:
806
+ - appId
807
+ - preview
808
+ additionalProperties: false
712
809
  parameters:
713
810
  - name: id
714
811
  in: path
@@ -724,6 +821,19 @@ paths:
724
821
  responses:
725
822
  "200":
726
823
  description: Successful response
824
+ content:
825
+ application/json:
826
+ schema:
827
+ type: object
828
+ properties:
829
+ success:
830
+ type: boolean
831
+ appId:
832
+ type: string
833
+ required:
834
+ - success
835
+ - appId
836
+ additionalProperties: false
727
837
  parameters:
728
838
  - name: id
729
839
  in: path
@@ -819,6 +929,16 @@ paths:
819
929
  responses:
820
930
  "200":
821
931
  description: Successful response
932
+ content:
933
+ application/json:
934
+ schema:
935
+ type: object
936
+ properties:
937
+ success:
938
+ type: boolean
939
+ required:
940
+ - success
941
+ additionalProperties: false
822
942
  parameters:
823
943
  - name: id
824
944
  in: path
@@ -907,6 +1027,23 @@ paths:
907
1027
  responses:
908
1028
  "200":
909
1029
  description: Successful response
1030
+ content:
1031
+ application/json:
1032
+ schema:
1033
+ type: object
1034
+ properties:
1035
+ success:
1036
+ type: boolean
1037
+ const: true
1038
+ appId:
1039
+ type: string
1040
+ name:
1041
+ type: string
1042
+ required:
1043
+ - success
1044
+ - appId
1045
+ - name
1046
+ additionalProperties: false
910
1047
  requestBody:
911
1048
  required: true
912
1049
  content:
@@ -936,9 +1073,61 @@ paths:
936
1073
  type: object
937
1074
  properties:
938
1075
  gallery:
939
- type: array
940
- items: {}
941
- description: Gallery app entries
1076
+ type: object
1077
+ properties:
1078
+ version:
1079
+ type: number
1080
+ updatedAt:
1081
+ type: string
1082
+ categories:
1083
+ type: array
1084
+ items:
1085
+ type: object
1086
+ properties:
1087
+ id:
1088
+ type: string
1089
+ name:
1090
+ type: string
1091
+ icon:
1092
+ type: string
1093
+ required:
1094
+ - id
1095
+ - name
1096
+ - icon
1097
+ additionalProperties: false
1098
+ apps:
1099
+ type: array
1100
+ items:
1101
+ type: object
1102
+ properties:
1103
+ id:
1104
+ type: string
1105
+ name:
1106
+ type: string
1107
+ description:
1108
+ type: string
1109
+ icon:
1110
+ type: string
1111
+ category:
1112
+ type: string
1113
+ version:
1114
+ type: string
1115
+ featured:
1116
+ type: boolean
1117
+ required:
1118
+ - id
1119
+ - name
1120
+ - description
1121
+ - icon
1122
+ - category
1123
+ - version
1124
+ additionalProperties: false
1125
+ required:
1126
+ - version
1127
+ - updatedAt
1128
+ - categories
1129
+ - apps
1130
+ additionalProperties: false
942
1131
  required:
943
1132
  - gallery
944
1133
  additionalProperties: false
@@ -952,6 +1141,23 @@ paths:
952
1141
  responses:
953
1142
  "200":
954
1143
  description: Successful response
1144
+ content:
1145
+ application/json:
1146
+ schema:
1147
+ type: object
1148
+ properties:
1149
+ success:
1150
+ type: boolean
1151
+ const: true
1152
+ appId:
1153
+ type: string
1154
+ name:
1155
+ type: string
1156
+ required:
1157
+ - success
1158
+ - appId
1159
+ - name
1160
+ additionalProperties: false
955
1161
  requestBody:
956
1162
  required: true
957
1163
  content:
@@ -1034,6 +1240,55 @@ paths:
1034
1240
  responses:
1035
1241
  "200":
1036
1242
  description: Successful response
1243
+ content:
1244
+ application/json:
1245
+ schema:
1246
+ type: object
1247
+ properties:
1248
+ manifest:
1249
+ type: object
1250
+ properties: {}
1251
+ additionalProperties: {}
1252
+ scanResult:
1253
+ type: object
1254
+ properties:
1255
+ passed:
1256
+ type: boolean
1257
+ blocked:
1258
+ type: array
1259
+ items:
1260
+ type: string
1261
+ warnings:
1262
+ type: array
1263
+ items:
1264
+ type: string
1265
+ required:
1266
+ - passed
1267
+ - blocked
1268
+ - warnings
1269
+ additionalProperties: false
1270
+ signatureResult:
1271
+ type: object
1272
+ properties:
1273
+ trustTier:
1274
+ type: string
1275
+ signerKeyId:
1276
+ type: string
1277
+ signerDisplayName:
1278
+ type: string
1279
+ signerAccount:
1280
+ type: string
1281
+ required:
1282
+ - trustTier
1283
+ additionalProperties: false
1284
+ bundleSizeBytes:
1285
+ type: number
1286
+ required:
1287
+ - manifest
1288
+ - scanResult
1289
+ - signatureResult
1290
+ - bundleSizeBytes
1291
+ additionalProperties: false
1037
1292
  requestBody:
1038
1293
  required: true
1039
1294
  content:
@@ -1090,29 +1345,64 @@ paths:
1090
1345
  properties:
1091
1346
  apps:
1092
1347
  type: array
1093
- items: {}
1094
- description: Array of shared app objects
1095
- required:
1096
- - apps
1097
- additionalProperties: false
1098
- /v1/apps/shared/{token}:
1099
- delete:
1100
- operationId: apps_shared_by_token_delete
1101
- summary: Delete shared app
1102
- description: Remove a shared app link.
1103
- tags:
1104
- - apps
1105
- responses:
1106
- "200":
1107
- description: Successful response
1108
- content:
1109
- application/json:
1110
- schema:
1111
- type: object
1112
- properties:
1113
- success:
1114
- type: boolean
1115
- required:
1348
+ items:
1349
+ type: object
1350
+ properties:
1351
+ uuid:
1352
+ type: string
1353
+ name:
1354
+ type: string
1355
+ description:
1356
+ type: string
1357
+ icon:
1358
+ type: string
1359
+ preview:
1360
+ type: string
1361
+ entry:
1362
+ type: string
1363
+ trustTier:
1364
+ type: string
1365
+ signerDisplayName:
1366
+ type: string
1367
+ bundleSizeBytes:
1368
+ type: number
1369
+ installedAt:
1370
+ type: string
1371
+ version:
1372
+ type: string
1373
+ contentId:
1374
+ type: string
1375
+ updateAvailable:
1376
+ type: boolean
1377
+ required:
1378
+ - uuid
1379
+ - name
1380
+ - entry
1381
+ - trustTier
1382
+ - bundleSizeBytes
1383
+ - installedAt
1384
+ additionalProperties: false
1385
+ required:
1386
+ - apps
1387
+ additionalProperties: false
1388
+ /v1/apps/shared/{token}:
1389
+ delete:
1390
+ operationId: apps_shared_by_token_delete
1391
+ summary: Delete shared app
1392
+ description: Remove a shared app link.
1393
+ tags:
1394
+ - apps
1395
+ responses:
1396
+ "200":
1397
+ description: Successful response
1398
+ content:
1399
+ application/json:
1400
+ schema:
1401
+ type: object
1402
+ properties:
1403
+ success:
1404
+ type: boolean
1405
+ required:
1116
1406
  - success
1117
1407
  additionalProperties: false
1118
1408
  parameters:
@@ -1181,6 +1471,22 @@ paths:
1181
1471
  responses:
1182
1472
  "200":
1183
1473
  description: Successful response
1474
+ content:
1475
+ application/json:
1476
+ schema:
1477
+ type: object
1478
+ properties:
1479
+ signed:
1480
+ type: boolean
1481
+ signatureJson:
1482
+ type: object
1483
+ properties: {}
1484
+ additionalProperties: {}
1485
+ payload:
1486
+ type: string
1487
+ message:
1488
+ type: string
1489
+ additionalProperties: false
1184
1490
  requestBody:
1185
1491
  required: true
1186
1492
  content:
@@ -1210,6 +1516,16 @@ paths:
1210
1516
  responses:
1211
1517
  "200":
1212
1518
  description: Successful response
1519
+ content:
1520
+ application/json:
1521
+ schema:
1522
+ type: object
1523
+ properties:
1524
+ message:
1525
+ type: string
1526
+ required:
1527
+ - message
1528
+ additionalProperties: false
1213
1529
  /v1/attachments:
1214
1530
  delete:
1215
1531
  operationId: attachments_delete
@@ -1823,6 +2139,202 @@ paths:
1823
2139
  required:
1824
2140
  - id
1825
2141
  additionalProperties: false
2142
+ /v1/background-wake/drain-due:
2143
+ post:
2144
+ operationId: backgroundwake_draindue_post
2145
+ summary: Drain due background wake work
2146
+ description: Run due heartbeat and scheduler work for a background wake lease.
2147
+ tags:
2148
+ - background-wake
2149
+ responses:
2150
+ "200":
2151
+ description: Successful response
2152
+ content:
2153
+ application/json:
2154
+ schema:
2155
+ type: object
2156
+ properties:
2157
+ accepted:
2158
+ type: boolean
2159
+ leaseId:
2160
+ type: string
2161
+ reason:
2162
+ type: string
2163
+ sourceGeneration:
2164
+ type: string
2165
+ startedAt:
2166
+ type: number
2167
+ deadlineAt:
2168
+ type: number
2169
+ required:
2170
+ - accepted
2171
+ - leaseId
2172
+ - reason
2173
+ - sourceGeneration
2174
+ - startedAt
2175
+ - deadlineAt
2176
+ additionalProperties: false
2177
+ requestBody:
2178
+ required: true
2179
+ content:
2180
+ application/json:
2181
+ schema:
2182
+ anyOf:
2183
+ - type: object
2184
+ properties:
2185
+ leaseId:
2186
+ type: string
2187
+ minLength: 1
2188
+ reason:
2189
+ type: string
2190
+ minLength: 1
2191
+ sourceGeneration:
2192
+ type: string
2193
+ minLength: 1
2194
+ startedAt:
2195
+ anyOf:
2196
+ - type: number
2197
+ - type: string
2198
+ deadlineAt:
2199
+ anyOf:
2200
+ - type: number
2201
+ - type: string
2202
+ required:
2203
+ - leaseId
2204
+ - reason
2205
+ - sourceGeneration
2206
+ - startedAt
2207
+ - deadlineAt
2208
+ additionalProperties: false
2209
+ - type: object
2210
+ properties:
2211
+ lease_id:
2212
+ type: string
2213
+ minLength: 1
2214
+ reason:
2215
+ type: string
2216
+ minLength: 1
2217
+ source_generation:
2218
+ type: string
2219
+ minLength: 1
2220
+ started_at:
2221
+ anyOf:
2222
+ - type: number
2223
+ - type: string
2224
+ deadline_at:
2225
+ anyOf:
2226
+ - type: number
2227
+ - type: string
2228
+ required:
2229
+ - lease_id
2230
+ - reason
2231
+ - source_generation
2232
+ - started_at
2233
+ - deadline_at
2234
+ additionalProperties: false
2235
+ /v1/background-wake/intent:
2236
+ get:
2237
+ operationId: backgroundwake_intent_get
2238
+ summary: Get background wake intent
2239
+ description: Return the current computed background wake intent.
2240
+ tags:
2241
+ - background-wake
2242
+ responses:
2243
+ "200":
2244
+ description: Successful response
2245
+ content:
2246
+ application/json:
2247
+ schema:
2248
+ type: object
2249
+ properties:
2250
+ intent:
2251
+ anyOf:
2252
+ - type: object
2253
+ properties:
2254
+ nextWakeAt:
2255
+ type: number
2256
+ actualNextDueAt:
2257
+ type: number
2258
+ reason:
2259
+ type: string
2260
+ enum:
2261
+ - heartbeat
2262
+ - schedule
2263
+ - mixed
2264
+ sourceGeneration:
2265
+ type: string
2266
+ computedAt:
2267
+ type: number
2268
+ sourcePayload:
2269
+ type: object
2270
+ propertyNames:
2271
+ type: string
2272
+ additionalProperties: {}
2273
+ required:
2274
+ - nextWakeAt
2275
+ - actualNextDueAt
2276
+ - reason
2277
+ - sourceGeneration
2278
+ - computedAt
2279
+ - sourcePayload
2280
+ additionalProperties: false
2281
+ - type: "null"
2282
+ required:
2283
+ - intent
2284
+ additionalProperties: false
2285
+ /v1/background-wake/prepare-sleep:
2286
+ post:
2287
+ operationId: backgroundwake_preparesleep_post
2288
+ summary: Prepare for assistant sleep
2289
+ description: Return the current background wake intent and whether sleep should be deferred.
2290
+ tags:
2291
+ - background-wake
2292
+ responses:
2293
+ "200":
2294
+ description: Successful response
2295
+ content:
2296
+ application/json:
2297
+ schema:
2298
+ type: object
2299
+ properties:
2300
+ intent:
2301
+ anyOf:
2302
+ - type: object
2303
+ properties:
2304
+ nextWakeAt:
2305
+ type: number
2306
+ actualNextDueAt:
2307
+ type: number
2308
+ reason:
2309
+ type: string
2310
+ enum:
2311
+ - heartbeat
2312
+ - schedule
2313
+ - mixed
2314
+ sourceGeneration:
2315
+ type: string
2316
+ computedAt:
2317
+ type: number
2318
+ sourcePayload:
2319
+ type: object
2320
+ propertyNames:
2321
+ type: string
2322
+ additionalProperties: {}
2323
+ required:
2324
+ - nextWakeAt
2325
+ - actualNextDueAt
2326
+ - reason
2327
+ - sourceGeneration
2328
+ - computedAt
2329
+ - sourcePayload
2330
+ additionalProperties: false
2331
+ - type: "null"
2332
+ deferSleep:
2333
+ type: boolean
2334
+ required:
2335
+ - intent
2336
+ - deferSleep
2337
+ additionalProperties: false
1826
2338
  /v1/backup/destinations:
1827
2339
  get:
1828
2340
  operationId: backup_destinations_get
@@ -2552,6 +3064,85 @@ paths:
2552
3064
  required:
2553
3065
  - operation
2554
3066
  additionalProperties: false
3067
+ /v1/browser/tabs:
3068
+ post:
3069
+ operationId: browser_tabs_post
3070
+ summary: Manage browser tabs
3071
+ description: List, create, select, or close browser tabs via the Chrome extension backend.
3072
+ tags:
3073
+ - browser
3074
+ responses:
3075
+ "200":
3076
+ description: Successful response
3077
+ content:
3078
+ application/json:
3079
+ schema:
3080
+ type: object
3081
+ properties:
3082
+ ok:
3083
+ type: boolean
3084
+ tabs:
3085
+ type: array
3086
+ items:
3087
+ type: object
3088
+ properties:
3089
+ tabId:
3090
+ type: number
3091
+ windowId:
3092
+ type: number
3093
+ url:
3094
+ type: string
3095
+ title:
3096
+ type: string
3097
+ active:
3098
+ type: boolean
3099
+ pinned:
3100
+ type: boolean
3101
+ required:
3102
+ - active
3103
+ - pinned
3104
+ additionalProperties: false
3105
+ tab: {}
3106
+ tabId:
3107
+ type: number
3108
+ clientId:
3109
+ type: string
3110
+ closed:
3111
+ type: boolean
3112
+ required:
3113
+ - ok
3114
+ additionalProperties: false
3115
+ requestBody:
3116
+ required: true
3117
+ content:
3118
+ application/json:
3119
+ schema:
3120
+ type: object
3121
+ properties:
3122
+ command:
3123
+ type: string
3124
+ enum:
3125
+ - list
3126
+ - select
3127
+ - new
3128
+ - close
3129
+ sessionId:
3130
+ default: default
3131
+ type: string
3132
+ minLength: 1
3133
+ conversationId:
3134
+ type: string
3135
+ minLength: 1
3136
+ tabId:
3137
+ type: number
3138
+ url:
3139
+ type: string
3140
+ targetClientId:
3141
+ type: string
3142
+ minLength: 1
3143
+ required:
3144
+ - command
3145
+ additionalProperties: false
2555
3146
  /v1/btw:
2556
3147
  post:
2557
3148
  operationId: btw_post
@@ -3411,6 +4002,19 @@ paths:
3411
4002
  responses:
3412
4003
  "200":
3413
4004
  description: Successful response
4005
+ /v1/config/llm/profiles:
4006
+ get:
4007
+ operationId: config_llm_profiles_get
4008
+ summary: List defined LLM profiles
4009
+ description:
4010
+ Returns the sorted list of profile names defined in `llm.profiles` plus the workspace-wide active profile.
4011
+ Used to populate per-call profile dropdowns (e.g. memory router playground) without requiring the caller to type
4012
+ profile names.
4013
+ tags:
4014
+ - config
4015
+ responses:
4016
+ "200":
4017
+ description: Successful response
3414
4018
  /v1/config/llm/profiles/{name}:
3415
4019
  put:
3416
4020
  operationId: config_llm_profiles_by_name_put
@@ -4341,15 +4945,6 @@ paths:
4341
4945
  operationId: conversations_get
4342
4946
  summary: List conversations
4343
4947
  description: Paginated list of conversations with attention state and display metadata.
4344
- tags:
4345
- - conversations
4346
- responses:
4347
- "200":
4348
- description: Successful response
4349
- post:
4350
- operationId: conversations_post
4351
- summary: Create a conversation
4352
- description: Create or get an existing conversation by key.
4353
4948
  tags:
4354
4949
  - conversations
4355
4950
  responses:
@@ -4360,10 +4955,248 @@ paths:
4360
4955
  schema:
4361
4956
  type: object
4362
4957
  properties:
4363
- id:
4958
+ conversations:
4959
+ type: array
4960
+ items:
4961
+ type: object
4962
+ properties:
4963
+ id:
4964
+ type: string
4965
+ title:
4966
+ type: string
4967
+ createdAt:
4968
+ type: number
4969
+ updatedAt:
4970
+ type: number
4971
+ lastMessageAt:
4972
+ anyOf:
4973
+ - type: number
4974
+ - type: "null"
4975
+ conversationType:
4976
+ type: string
4977
+ enum:
4978
+ - standard
4979
+ - background
4980
+ - scheduled
4981
+ source:
4982
+ type: string
4983
+ scheduleJobId:
4984
+ type: string
4985
+ channelBinding:
4986
+ type: object
4987
+ properties:
4988
+ sourceChannel:
4989
+ type: string
4990
+ externalChatId:
4991
+ type: string
4992
+ externalChatName:
4993
+ type: string
4994
+ externalThreadId:
4995
+ type: string
4996
+ externalUserId:
4997
+ anyOf:
4998
+ - type: string
4999
+ - type: "null"
5000
+ displayName:
5001
+ anyOf:
5002
+ - type: string
5003
+ - type: "null"
5004
+ username:
5005
+ anyOf:
5006
+ - type: string
5007
+ - type: "null"
5008
+ slackThread:
5009
+ type: object
5010
+ properties:
5011
+ channelId:
5012
+ type: string
5013
+ threadTs:
5014
+ type: string
5015
+ link:
5016
+ type: object
5017
+ properties:
5018
+ appUrl:
5019
+ type: string
5020
+ webUrl:
5021
+ type: string
5022
+ additionalProperties: false
5023
+ required:
5024
+ - channelId
5025
+ - threadTs
5026
+ additionalProperties: false
5027
+ slackChannel:
5028
+ type: object
5029
+ properties:
5030
+ channelId:
5031
+ type: string
5032
+ name:
5033
+ type: string
5034
+ link:
5035
+ type: object
5036
+ properties:
5037
+ webUrl:
5038
+ type: string
5039
+ required:
5040
+ - webUrl
5041
+ additionalProperties: false
5042
+ required:
5043
+ - channelId
5044
+ additionalProperties: false
5045
+ required:
5046
+ - sourceChannel
5047
+ - externalChatId
5048
+ - externalUserId
5049
+ - displayName
5050
+ - username
5051
+ additionalProperties: false
5052
+ conversationOriginChannel:
5053
+ anyOf:
5054
+ - type: string
5055
+ enum:
5056
+ - telegram
5057
+ - phone
5058
+ - vellum
5059
+ - whatsapp
5060
+ - slack
5061
+ - email
5062
+ - platform
5063
+ - a2a
5064
+ - type: "null"
5065
+ assistantAttention:
5066
+ type: object
5067
+ properties:
5068
+ hasUnseenLatestAssistantMessage:
5069
+ type: boolean
5070
+ latestAssistantMessageAt:
5071
+ type: number
5072
+ lastSeenAssistantMessageAt:
5073
+ type: number
5074
+ lastSeenConfidence:
5075
+ type: string
5076
+ enum:
5077
+ - explicit
5078
+ - inferred
5079
+ lastSeenSignalType:
5080
+ type: string
5081
+ enum:
5082
+ - macos_notification_view
5083
+ - macos_conversation_opened
5084
+ - ios_conversation_opened
5085
+ - telegram_inbound_message
5086
+ - telegram_callback
5087
+ - slack_inbound_message
5088
+ - slack_callback
5089
+ required:
5090
+ - hasUnseenLatestAssistantMessage
5091
+ additionalProperties: false
5092
+ isPinned:
5093
+ type: boolean
5094
+ const: true
5095
+ displayOrder:
5096
+ anyOf:
5097
+ - type: number
5098
+ - type: "null"
5099
+ groupId:
5100
+ anyOf:
5101
+ - type: string
5102
+ - type: "null"
5103
+ forkParent:
5104
+ type: object
5105
+ properties:
5106
+ conversationId:
5107
+ type: string
5108
+ messageId:
5109
+ type: string
5110
+ title:
5111
+ type: string
5112
+ required:
5113
+ - conversationId
5114
+ - messageId
5115
+ - title
5116
+ additionalProperties: false
5117
+ archivedAt:
5118
+ type: number
5119
+ inferenceProfile:
5120
+ type: string
5121
+ required:
5122
+ - id
5123
+ - title
5124
+ - createdAt
5125
+ - updatedAt
5126
+ - lastMessageAt
5127
+ - conversationType
5128
+ - source
5129
+ - groupId
5130
+ additionalProperties: false
5131
+ nextOffset:
5132
+ type: number
5133
+ hasMore:
5134
+ type: boolean
5135
+ groups:
5136
+ type: array
5137
+ items:
5138
+ type: object
5139
+ properties:
5140
+ id:
5141
+ type: string
5142
+ name:
5143
+ type: string
5144
+ sortPosition:
5145
+ type: number
5146
+ isSystemGroup:
5147
+ type: boolean
5148
+ required:
5149
+ - id
5150
+ - name
5151
+ - sortPosition
5152
+ - isSystemGroup
5153
+ additionalProperties: false
5154
+ required:
5155
+ - conversations
5156
+ - nextOffset
5157
+ - hasMore
5158
+ additionalProperties: false
5159
+ parameters:
5160
+ - name: limit
5161
+ in: query
5162
+ required: false
5163
+ schema:
5164
+ type: integer
5165
+ description: Maximum number of conversations to return (default 50).
5166
+ - name: offset
5167
+ in: query
5168
+ required: false
5169
+ schema:
5170
+ type: integer
5171
+ description: Number of conversations to skip (default 0).
5172
+ - name: conversationType
5173
+ in: query
5174
+ required: false
5175
+ schema:
5176
+ type: string
5177
+ enum:
5178
+ - background
5179
+ description: Filter by conversation type. Pass "background" to list only background/scheduled conversations.
5180
+ post:
5181
+ operationId: conversations_post
5182
+ summary: Create a conversation
5183
+ description: Create or get an existing conversation by key.
5184
+ tags:
5185
+ - conversations
5186
+ responses:
5187
+ "200":
5188
+ description: Successful response
5189
+ content:
5190
+ application/json:
5191
+ schema:
5192
+ type: object
5193
+ properties:
5194
+ id:
4364
5195
  type: string
5196
+ description: Assistant-minted internal conversation id. The authoritative identifier for the conversation.
4365
5197
  conversationKey:
4366
5198
  type: string
5199
+ description: Echo of the optional external key supplied by the client.
4367
5200
  conversationType:
4368
5201
  type: string
4369
5202
  created:
@@ -4382,14 +5215,15 @@ paths:
4382
5215
  type: object
4383
5216
  properties:
4384
5217
  conversationKey:
5218
+ description:
5219
+ Optional external key. Echoed back in the response. Non-vellum channels (Telegram, WhatsApp) use this to
5220
+ scope to a logical channel thread; vellum-web clients can omit it and rely on the assistant-minted
5221
+ `id`.
4385
5222
  type: string
4386
- description: Idempotency key for the conversation
4387
5223
  conversationType:
4388
5224
  description: Only standard conversations are created by this endpoint
4389
5225
  type: string
4390
5226
  const: standard
4391
- required:
4392
- - conversationKey
4393
5227
  additionalProperties: false
4394
5228
  /v1/conversations/{conversationId}/slack-channel/resolve:
4395
5229
  post:
@@ -4426,57 +5260,415 @@ paths:
4426
5260
  - rate_limit
4427
5261
  - slack_error
4428
5262
  required:
4429
- - channelId
4430
- - cached
4431
- - resolved
5263
+ - channelId
5264
+ - cached
5265
+ - resolved
5266
+ additionalProperties: false
5267
+ parameters:
5268
+ - name: conversationId
5269
+ in: path
5270
+ required: true
5271
+ schema:
5272
+ type: string
5273
+ /v1/conversations/{id}:
5274
+ delete:
5275
+ operationId: conversations_by_id_delete
5276
+ summary: Delete a conversation
5277
+ description: Permanently delete a single conversation and its messages.
5278
+ tags:
5279
+ - conversations
5280
+ responses:
5281
+ "204":
5282
+ description: Successful response
5283
+ parameters:
5284
+ - name: id
5285
+ in: path
5286
+ required: true
5287
+ schema:
5288
+ type: string
5289
+ get:
5290
+ operationId: conversations_by_id_get
5291
+ summary: Get conversation detail
5292
+ description: Retrieve a single conversation with full metadata.
5293
+ tags:
5294
+ - conversations
5295
+ responses:
5296
+ "200":
5297
+ description: Successful response
5298
+ content:
5299
+ application/json:
5300
+ schema:
5301
+ type: object
5302
+ properties:
5303
+ conversation:
5304
+ type: object
5305
+ properties:
5306
+ id:
5307
+ type: string
5308
+ title:
5309
+ type: string
5310
+ createdAt:
5311
+ type: number
5312
+ updatedAt:
5313
+ type: number
5314
+ lastMessageAt:
5315
+ anyOf:
5316
+ - type: number
5317
+ - type: "null"
5318
+ conversationType:
5319
+ type: string
5320
+ enum:
5321
+ - standard
5322
+ - background
5323
+ - scheduled
5324
+ source:
5325
+ type: string
5326
+ scheduleJobId:
5327
+ type: string
5328
+ channelBinding:
5329
+ type: object
5330
+ properties:
5331
+ sourceChannel:
5332
+ type: string
5333
+ externalChatId:
5334
+ type: string
5335
+ externalChatName:
5336
+ type: string
5337
+ externalThreadId:
5338
+ type: string
5339
+ externalUserId:
5340
+ anyOf:
5341
+ - type: string
5342
+ - type: "null"
5343
+ displayName:
5344
+ anyOf:
5345
+ - type: string
5346
+ - type: "null"
5347
+ username:
5348
+ anyOf:
5349
+ - type: string
5350
+ - type: "null"
5351
+ slackThread:
5352
+ type: object
5353
+ properties:
5354
+ channelId:
5355
+ type: string
5356
+ threadTs:
5357
+ type: string
5358
+ link:
5359
+ type: object
5360
+ properties:
5361
+ appUrl:
5362
+ type: string
5363
+ webUrl:
5364
+ type: string
5365
+ additionalProperties: false
5366
+ required:
5367
+ - channelId
5368
+ - threadTs
5369
+ additionalProperties: false
5370
+ slackChannel:
5371
+ type: object
5372
+ properties:
5373
+ channelId:
5374
+ type: string
5375
+ name:
5376
+ type: string
5377
+ link:
5378
+ type: object
5379
+ properties:
5380
+ webUrl:
5381
+ type: string
5382
+ required:
5383
+ - webUrl
5384
+ additionalProperties: false
5385
+ required:
5386
+ - channelId
5387
+ additionalProperties: false
5388
+ required:
5389
+ - sourceChannel
5390
+ - externalChatId
5391
+ - externalUserId
5392
+ - displayName
5393
+ - username
5394
+ additionalProperties: false
5395
+ conversationOriginChannel:
5396
+ anyOf:
5397
+ - type: string
5398
+ enum:
5399
+ - telegram
5400
+ - phone
5401
+ - vellum
5402
+ - whatsapp
5403
+ - slack
5404
+ - email
5405
+ - platform
5406
+ - a2a
5407
+ - type: "null"
5408
+ assistantAttention:
5409
+ type: object
5410
+ properties:
5411
+ hasUnseenLatestAssistantMessage:
5412
+ type: boolean
5413
+ latestAssistantMessageAt:
5414
+ type: number
5415
+ lastSeenAssistantMessageAt:
5416
+ type: number
5417
+ lastSeenConfidence:
5418
+ type: string
5419
+ enum:
5420
+ - explicit
5421
+ - inferred
5422
+ lastSeenSignalType:
5423
+ type: string
5424
+ enum:
5425
+ - macos_notification_view
5426
+ - macos_conversation_opened
5427
+ - ios_conversation_opened
5428
+ - telegram_inbound_message
5429
+ - telegram_callback
5430
+ - slack_inbound_message
5431
+ - slack_callback
5432
+ required:
5433
+ - hasUnseenLatestAssistantMessage
5434
+ additionalProperties: false
5435
+ isPinned:
5436
+ type: boolean
5437
+ const: true
5438
+ displayOrder:
5439
+ anyOf:
5440
+ - type: number
5441
+ - type: "null"
5442
+ groupId:
5443
+ anyOf:
5444
+ - type: string
5445
+ - type: "null"
5446
+ forkParent:
5447
+ type: object
5448
+ properties:
5449
+ conversationId:
5450
+ type: string
5451
+ messageId:
5452
+ type: string
5453
+ title:
5454
+ type: string
5455
+ required:
5456
+ - conversationId
5457
+ - messageId
5458
+ - title
5459
+ additionalProperties: false
5460
+ archivedAt:
5461
+ type: number
5462
+ inferenceProfile:
5463
+ type: string
5464
+ required:
5465
+ - id
5466
+ - title
5467
+ - createdAt
5468
+ - updatedAt
5469
+ - lastMessageAt
5470
+ - conversationType
5471
+ - source
5472
+ - groupId
5473
+ additionalProperties: false
5474
+ required:
5475
+ - conversation
5476
+ additionalProperties: false
5477
+ parameters:
5478
+ - name: id
5479
+ in: path
5480
+ required: true
5481
+ schema:
5482
+ type: string
5483
+ /v1/conversations/{id}/analyze:
5484
+ post:
5485
+ operationId: conversations_by_id_analyze_post
5486
+ summary: Analyze a conversation
5487
+ description: Create a new conversation with a structured self-assessment of an existing conversation.
5488
+ tags:
5489
+ - conversations
5490
+ responses:
5491
+ "200":
5492
+ description: Successful response
5493
+ content:
5494
+ application/json:
5495
+ schema:
5496
+ type: object
5497
+ properties:
5498
+ conversation:
5499
+ type: object
5500
+ properties:
5501
+ id:
5502
+ type: string
5503
+ title:
5504
+ type: string
5505
+ createdAt:
5506
+ type: number
5507
+ updatedAt:
5508
+ type: number
5509
+ lastMessageAt:
5510
+ anyOf:
5511
+ - type: number
5512
+ - type: "null"
5513
+ conversationType:
5514
+ type: string
5515
+ enum:
5516
+ - standard
5517
+ - background
5518
+ - scheduled
5519
+ source:
5520
+ type: string
5521
+ scheduleJobId:
5522
+ type: string
5523
+ channelBinding:
5524
+ type: object
5525
+ properties:
5526
+ sourceChannel:
5527
+ type: string
5528
+ externalChatId:
5529
+ type: string
5530
+ externalChatName:
5531
+ type: string
5532
+ externalThreadId:
5533
+ type: string
5534
+ externalUserId:
5535
+ anyOf:
5536
+ - type: string
5537
+ - type: "null"
5538
+ displayName:
5539
+ anyOf:
5540
+ - type: string
5541
+ - type: "null"
5542
+ username:
5543
+ anyOf:
5544
+ - type: string
5545
+ - type: "null"
5546
+ slackThread:
5547
+ type: object
5548
+ properties:
5549
+ channelId:
5550
+ type: string
5551
+ threadTs:
5552
+ type: string
5553
+ link:
5554
+ type: object
5555
+ properties:
5556
+ appUrl:
5557
+ type: string
5558
+ webUrl:
5559
+ type: string
5560
+ additionalProperties: false
5561
+ required:
5562
+ - channelId
5563
+ - threadTs
5564
+ additionalProperties: false
5565
+ slackChannel:
5566
+ type: object
5567
+ properties:
5568
+ channelId:
5569
+ type: string
5570
+ name:
5571
+ type: string
5572
+ link:
5573
+ type: object
5574
+ properties:
5575
+ webUrl:
5576
+ type: string
5577
+ required:
5578
+ - webUrl
5579
+ additionalProperties: false
5580
+ required:
5581
+ - channelId
5582
+ additionalProperties: false
5583
+ required:
5584
+ - sourceChannel
5585
+ - externalChatId
5586
+ - externalUserId
5587
+ - displayName
5588
+ - username
5589
+ additionalProperties: false
5590
+ conversationOriginChannel:
5591
+ anyOf:
5592
+ - type: string
5593
+ enum:
5594
+ - telegram
5595
+ - phone
5596
+ - vellum
5597
+ - whatsapp
5598
+ - slack
5599
+ - email
5600
+ - platform
5601
+ - a2a
5602
+ - type: "null"
5603
+ assistantAttention:
5604
+ type: object
5605
+ properties:
5606
+ hasUnseenLatestAssistantMessage:
5607
+ type: boolean
5608
+ latestAssistantMessageAt:
5609
+ type: number
5610
+ lastSeenAssistantMessageAt:
5611
+ type: number
5612
+ lastSeenConfidence:
5613
+ type: string
5614
+ enum:
5615
+ - explicit
5616
+ - inferred
5617
+ lastSeenSignalType:
5618
+ type: string
5619
+ enum:
5620
+ - macos_notification_view
5621
+ - macos_conversation_opened
5622
+ - ios_conversation_opened
5623
+ - telegram_inbound_message
5624
+ - telegram_callback
5625
+ - slack_inbound_message
5626
+ - slack_callback
5627
+ required:
5628
+ - hasUnseenLatestAssistantMessage
5629
+ additionalProperties: false
5630
+ isPinned:
5631
+ type: boolean
5632
+ const: true
5633
+ displayOrder:
5634
+ anyOf:
5635
+ - type: number
5636
+ - type: "null"
5637
+ groupId:
5638
+ anyOf:
5639
+ - type: string
5640
+ - type: "null"
5641
+ forkParent:
5642
+ type: object
5643
+ properties:
5644
+ conversationId:
5645
+ type: string
5646
+ messageId:
5647
+ type: string
5648
+ title:
5649
+ type: string
5650
+ required:
5651
+ - conversationId
5652
+ - messageId
5653
+ - title
5654
+ additionalProperties: false
5655
+ archivedAt:
5656
+ type: number
5657
+ inferenceProfile:
5658
+ type: string
5659
+ required:
5660
+ - id
5661
+ - title
5662
+ - createdAt
5663
+ - updatedAt
5664
+ - lastMessageAt
5665
+ - conversationType
5666
+ - source
5667
+ - groupId
5668
+ additionalProperties: false
5669
+ required:
5670
+ - conversation
4432
5671
  additionalProperties: false
4433
- parameters:
4434
- - name: conversationId
4435
- in: path
4436
- required: true
4437
- schema:
4438
- type: string
4439
- /v1/conversations/{id}:
4440
- delete:
4441
- operationId: conversations_by_id_delete
4442
- summary: Delete a conversation
4443
- description: Permanently delete a single conversation and its messages.
4444
- tags:
4445
- - conversations
4446
- responses:
4447
- "204":
4448
- description: Successful response
4449
- parameters:
4450
- - name: id
4451
- in: path
4452
- required: true
4453
- schema:
4454
- type: string
4455
- get:
4456
- operationId: conversations_by_id_get
4457
- summary: Get conversation detail
4458
- description: Retrieve a single conversation with full metadata.
4459
- tags:
4460
- - conversations
4461
- responses:
4462
- "200":
4463
- description: Successful response
4464
- parameters:
4465
- - name: id
4466
- in: path
4467
- required: true
4468
- schema:
4469
- type: string
4470
- /v1/conversations/{id}/analyze:
4471
- post:
4472
- operationId: conversations_by_id_analyze_post
4473
- summary: Analyze a conversation
4474
- description: Create a new conversation with a structured self-assessment of an existing conversation.
4475
- tags:
4476
- - conversations
4477
- responses:
4478
- "200":
4479
- description: Successful response
4480
5672
  parameters:
4481
5673
  - name: id
4482
5674
  in: path
@@ -4493,6 +5685,19 @@ paths:
4493
5685
  responses:
4494
5686
  "200":
4495
5687
  description: Successful response
5688
+ content:
5689
+ application/json:
5690
+ schema:
5691
+ type: object
5692
+ properties:
5693
+ ok:
5694
+ type: boolean
5695
+ conversationId:
5696
+ type: string
5697
+ required:
5698
+ - ok
5699
+ - conversationId
5700
+ additionalProperties: false
4496
5701
  parameters:
4497
5702
  - name: id
4498
5703
  in: path
@@ -4531,6 +5736,105 @@ paths:
4531
5736
  required: true
4532
5737
  schema:
4533
5738
  type: string
5739
+ /v1/conversations/{id}/compaction:
5740
+ get:
5741
+ operationId: conversations_by_id_compaction_get
5742
+ summary: Get the compaction trail leading up to an LLM call
5743
+ description:
5744
+ Return the chronological list of compaction events that ran in this conversation in the open window between
5745
+ the previous non-`compactionAgent` LLM call and the call identified by `callId`. Projected from
5746
+ `llm_request_logs` rows where `call_site = "compactionAgent"`. When the selected call is the first real call in
5747
+ the conversation, every preceding compaction is in scope. Drives the Inspector's Compaction tab.
5748
+ tags:
5749
+ - conversations
5750
+ responses:
5751
+ "200":
5752
+ description: Successful response
5753
+ content:
5754
+ application/json:
5755
+ schema:
5756
+ type: object
5757
+ properties:
5758
+ conversationId:
5759
+ type: string
5760
+ events:
5761
+ type: array
5762
+ items:
5763
+ type: object
5764
+ properties:
5765
+ id:
5766
+ type: string
5767
+ createdAt:
5768
+ type: number
5769
+ model:
5770
+ anyOf:
5771
+ - type: string
5772
+ - type: "null"
5773
+ provider:
5774
+ anyOf:
5775
+ - type: string
5776
+ - type: "null"
5777
+ inputTokens:
5778
+ anyOf:
5779
+ - type: number
5780
+ - type: "null"
5781
+ outputTokens:
5782
+ anyOf:
5783
+ - type: number
5784
+ - type: "null"
5785
+ durationMs:
5786
+ anyOf:
5787
+ - type: number
5788
+ - type: "null"
5789
+ responsePreview:
5790
+ anyOf:
5791
+ - type: string
5792
+ - type: "null"
5793
+ requestMessageCount:
5794
+ anyOf:
5795
+ - type: number
5796
+ - type: "null"
5797
+ stopReason:
5798
+ anyOf:
5799
+ - type: string
5800
+ - type: "null"
5801
+ estimatedCostUsd:
5802
+ anyOf:
5803
+ - type: number
5804
+ - type: "null"
5805
+ required:
5806
+ - id
5807
+ - createdAt
5808
+ - model
5809
+ - provider
5810
+ - inputTokens
5811
+ - outputTokens
5812
+ - durationMs
5813
+ - responsePreview
5814
+ - requestMessageCount
5815
+ - stopReason
5816
+ - estimatedCostUsd
5817
+ additionalProperties: false
5818
+ required:
5819
+ - conversationId
5820
+ - events
5821
+ additionalProperties: false
5822
+ "400":
5823
+ description: Returned when the callId is missing or refers to a call in a different conversation.
5824
+ "404":
5825
+ description: Returned when the conversation or the referenced LLM call does not exist.
5826
+ parameters:
5827
+ - name: id
5828
+ in: path
5829
+ required: true
5830
+ schema:
5831
+ type: string
5832
+ - name: callId
5833
+ in: query
5834
+ required: true
5835
+ schema:
5836
+ type: string
5837
+ description: ID of the selected LLM call from the rail. Defines the chronological cutoff for the trail.
4534
5838
  /v1/conversations/{id}/inference-profile:
4535
5839
  put:
4536
5840
  operationId: conversations_by_id_inferenceprofile_put
@@ -4634,6 +5938,16 @@ paths:
4634
5938
  responses:
4635
5939
  "200":
4636
5940
  description: Successful response
5941
+ content:
5942
+ application/json:
5943
+ schema:
5944
+ type: object
5945
+ properties:
5946
+ ok:
5947
+ type: boolean
5948
+ required:
5949
+ - ok
5950
+ additionalProperties: false
4637
5951
  parameters:
4638
5952
  - name: id
4639
5953
  in: path
@@ -4754,6 +6068,19 @@ paths:
4754
6068
  responses:
4755
6069
  "200":
4756
6070
  description: Successful response
6071
+ content:
6072
+ application/json:
6073
+ schema:
6074
+ type: object
6075
+ properties:
6076
+ ok:
6077
+ type: boolean
6078
+ conversationId:
6079
+ type: string
6080
+ required:
6081
+ - ok
6082
+ - conversationId
6083
+ additionalProperties: false
4757
6084
  parameters:
4758
6085
  - name: id
4759
6086
  in: path
@@ -5087,38 +6414,217 @@ paths:
5087
6414
  conversationId:
5088
6415
  type: string
5089
6416
  required:
5090
- - detached
5091
- - channelId
5092
- - threadTs
5093
- - source
6417
+ - detached
6418
+ - channelId
6419
+ - threadTs
6420
+ - source
6421
+ additionalProperties: false
6422
+ requestBody:
6423
+ required: true
6424
+ content:
6425
+ application/json:
6426
+ schema:
6427
+ type: object
6428
+ properties:
6429
+ conversationId:
6430
+ type: string
6431
+ minLength: 1
6432
+ channelId:
6433
+ type: string
6434
+ minLength: 1
6435
+ threadTs:
6436
+ type: string
6437
+ minLength: 1
6438
+ additionalProperties: false
6439
+ /v1/conversations/fork:
6440
+ post:
6441
+ operationId: conversations_fork_post
6442
+ summary: Fork a conversation
6443
+ description: Create a copy of a conversation, optionally truncated at a specific message.
6444
+ tags:
6445
+ - conversations
6446
+ responses:
6447
+ "200":
6448
+ description: Successful response
6449
+ content:
6450
+ application/json:
6451
+ schema:
6452
+ type: object
6453
+ properties:
6454
+ conversation:
6455
+ type: object
6456
+ properties:
6457
+ id:
6458
+ type: string
6459
+ title:
6460
+ type: string
6461
+ createdAt:
6462
+ type: number
6463
+ updatedAt:
6464
+ type: number
6465
+ lastMessageAt:
6466
+ anyOf:
6467
+ - type: number
6468
+ - type: "null"
6469
+ conversationType:
6470
+ type: string
6471
+ enum:
6472
+ - standard
6473
+ - background
6474
+ - scheduled
6475
+ source:
6476
+ type: string
6477
+ scheduleJobId:
6478
+ type: string
6479
+ channelBinding:
6480
+ type: object
6481
+ properties:
6482
+ sourceChannel:
6483
+ type: string
6484
+ externalChatId:
6485
+ type: string
6486
+ externalChatName:
6487
+ type: string
6488
+ externalThreadId:
6489
+ type: string
6490
+ externalUserId:
6491
+ anyOf:
6492
+ - type: string
6493
+ - type: "null"
6494
+ displayName:
6495
+ anyOf:
6496
+ - type: string
6497
+ - type: "null"
6498
+ username:
6499
+ anyOf:
6500
+ - type: string
6501
+ - type: "null"
6502
+ slackThread:
6503
+ type: object
6504
+ properties:
6505
+ channelId:
6506
+ type: string
6507
+ threadTs:
6508
+ type: string
6509
+ link:
6510
+ type: object
6511
+ properties:
6512
+ appUrl:
6513
+ type: string
6514
+ webUrl:
6515
+ type: string
6516
+ additionalProperties: false
6517
+ required:
6518
+ - channelId
6519
+ - threadTs
6520
+ additionalProperties: false
6521
+ slackChannel:
6522
+ type: object
6523
+ properties:
6524
+ channelId:
6525
+ type: string
6526
+ name:
6527
+ type: string
6528
+ link:
6529
+ type: object
6530
+ properties:
6531
+ webUrl:
6532
+ type: string
6533
+ required:
6534
+ - webUrl
6535
+ additionalProperties: false
6536
+ required:
6537
+ - channelId
6538
+ additionalProperties: false
6539
+ required:
6540
+ - sourceChannel
6541
+ - externalChatId
6542
+ - externalUserId
6543
+ - displayName
6544
+ - username
6545
+ additionalProperties: false
6546
+ conversationOriginChannel:
6547
+ anyOf:
6548
+ - type: string
6549
+ enum:
6550
+ - telegram
6551
+ - phone
6552
+ - vellum
6553
+ - whatsapp
6554
+ - slack
6555
+ - email
6556
+ - platform
6557
+ - a2a
6558
+ - type: "null"
6559
+ assistantAttention:
6560
+ type: object
6561
+ properties:
6562
+ hasUnseenLatestAssistantMessage:
6563
+ type: boolean
6564
+ latestAssistantMessageAt:
6565
+ type: number
6566
+ lastSeenAssistantMessageAt:
6567
+ type: number
6568
+ lastSeenConfidence:
6569
+ type: string
6570
+ enum:
6571
+ - explicit
6572
+ - inferred
6573
+ lastSeenSignalType:
6574
+ type: string
6575
+ enum:
6576
+ - macos_notification_view
6577
+ - macos_conversation_opened
6578
+ - ios_conversation_opened
6579
+ - telegram_inbound_message
6580
+ - telegram_callback
6581
+ - slack_inbound_message
6582
+ - slack_callback
6583
+ required:
6584
+ - hasUnseenLatestAssistantMessage
6585
+ additionalProperties: false
6586
+ isPinned:
6587
+ type: boolean
6588
+ const: true
6589
+ displayOrder:
6590
+ anyOf:
6591
+ - type: number
6592
+ - type: "null"
6593
+ groupId:
6594
+ anyOf:
6595
+ - type: string
6596
+ - type: "null"
6597
+ forkParent:
6598
+ type: object
6599
+ properties:
6600
+ conversationId:
6601
+ type: string
6602
+ messageId:
6603
+ type: string
6604
+ title:
6605
+ type: string
6606
+ required:
6607
+ - conversationId
6608
+ - messageId
6609
+ - title
6610
+ additionalProperties: false
6611
+ archivedAt:
6612
+ type: number
6613
+ inferenceProfile:
6614
+ type: string
6615
+ required:
6616
+ - id
6617
+ - title
6618
+ - createdAt
6619
+ - updatedAt
6620
+ - lastMessageAt
6621
+ - conversationType
6622
+ - source
6623
+ - groupId
6624
+ additionalProperties: false
6625
+ required:
6626
+ - conversation
5094
6627
  additionalProperties: false
5095
- requestBody:
5096
- required: true
5097
- content:
5098
- application/json:
5099
- schema:
5100
- type: object
5101
- properties:
5102
- conversationId:
5103
- type: string
5104
- minLength: 1
5105
- channelId:
5106
- type: string
5107
- minLength: 1
5108
- threadTs:
5109
- type: string
5110
- minLength: 1
5111
- additionalProperties: false
5112
- /v1/conversations/fork:
5113
- post:
5114
- operationId: conversations_fork_post
5115
- summary: Fork a conversation
5116
- description: Create a copy of a conversation, optionally truncated at a specific message.
5117
- tags:
5118
- - conversations
5119
- responses:
5120
- "200":
5121
- description: Successful response
5122
6628
  requestBody:
5123
6629
  required: true
5124
6630
  content:
@@ -5432,6 +6938,76 @@ paths:
5432
6938
  schema:
5433
6939
  type: string
5434
6940
  description: Optional conversation ID filter
6941
+ /v1/conversations/llm-context:
6942
+ get:
6943
+ operationId: conversations_llmcontext_get
6944
+ summary: Get LLM context for a conversation
6945
+ description: Returns normalized LLM request/response logs for an entire conversation.
6946
+ tags:
6947
+ - conversations
6948
+ responses:
6949
+ "200":
6950
+ description: Successful response
6951
+ content:
6952
+ application/json:
6953
+ schema:
6954
+ type: object
6955
+ properties:
6956
+ conversationKey:
6957
+ anyOf:
6958
+ - type: string
6959
+ - type: "null"
6960
+ conversationId:
6961
+ anyOf:
6962
+ - type: string
6963
+ - type: "null"
6964
+ conversationKind:
6965
+ type: string
6966
+ enum:
6967
+ - user
6968
+ - background
6969
+ - background_memory_consolidation
6970
+ - scheduled
6971
+ conversationTotalEstimatedCostUsd:
6972
+ anyOf:
6973
+ - type: number
6974
+ - type: "null"
6975
+ logs:
6976
+ type: array
6977
+ items: {}
6978
+ memoryRecall:
6979
+ anyOf:
6980
+ - type: object
6981
+ properties: {}
6982
+ additionalProperties: {}
6983
+ - type: "null"
6984
+ memoryV2Activation:
6985
+ anyOf:
6986
+ - type: object
6987
+ properties: {}
6988
+ additionalProperties: {}
6989
+ - type: "null"
6990
+ required:
6991
+ - conversationId
6992
+ - conversationKind
6993
+ - conversationTotalEstimatedCostUsd
6994
+ - logs
6995
+ - memoryRecall
6996
+ - memoryV2Activation
6997
+ additionalProperties: false
6998
+ parameters:
6999
+ - name: conversationKey
7000
+ in: query
7001
+ required: false
7002
+ schema:
7003
+ type: string
7004
+ description: Stable external conversation key.
7005
+ - name: conversationId
7006
+ in: query
7007
+ required: false
7008
+ schema:
7009
+ type: string
7010
+ description: Internal conversation identifier.
5435
7011
  /v1/conversations/rename:
5436
7012
  post:
5437
7013
  operationId: conversations_rename_post
@@ -5469,6 +7045,16 @@ paths:
5469
7045
  responses:
5470
7046
  "200":
5471
7047
  description: Successful response
7048
+ content:
7049
+ application/json:
7050
+ schema:
7051
+ type: object
7052
+ properties:
7053
+ ok:
7054
+ type: boolean
7055
+ required:
7056
+ - ok
7057
+ additionalProperties: false
5472
7058
  requestBody:
5473
7059
  required: true
5474
7060
  content:
@@ -5478,8 +7064,22 @@ paths:
5478
7064
  properties:
5479
7065
  updates:
5480
7066
  type: array
5481
- items: {}
5482
- description: Array of { conversationId, displayOrder?, isPinned? } objects
7067
+ items:
7068
+ type: object
7069
+ properties:
7070
+ conversationId:
7071
+ type: string
7072
+ displayOrder:
7073
+ type: number
7074
+ isPinned:
7075
+ type: boolean
7076
+ groupId:
7077
+ anyOf:
7078
+ - type: string
7079
+ - type: "null"
7080
+ required:
7081
+ - conversationId
7082
+ additionalProperties: false
5483
7083
  required:
5484
7084
  - updates
5485
7085
  additionalProperties: false
@@ -5536,6 +7136,48 @@ paths:
5536
7136
  responses:
5537
7137
  "200":
5538
7138
  description: Successful response
7139
+ content:
7140
+ application/json:
7141
+ schema:
7142
+ type: object
7143
+ properties:
7144
+ ok:
7145
+ type: boolean
7146
+ required:
7147
+ - ok
7148
+ additionalProperties: false
7149
+ requestBody:
7150
+ required: true
7151
+ content:
7152
+ application/json:
7153
+ schema:
7154
+ type: object
7155
+ properties:
7156
+ conversationId:
7157
+ type: string
7158
+ sourceChannel:
7159
+ type: string
7160
+ signalType:
7161
+ type: string
7162
+ confidence:
7163
+ type: string
7164
+ enum:
7165
+ - explicit
7166
+ - inferred
7167
+ source:
7168
+ type: string
7169
+ evidenceText:
7170
+ type: string
7171
+ metadata:
7172
+ type: object
7173
+ propertyNames:
7174
+ type: string
7175
+ additionalProperties: {}
7176
+ observedAt:
7177
+ type: number
7178
+ required:
7179
+ - conversationId
7180
+ additionalProperties: false
5539
7181
  /v1/conversations/switch:
5540
7182
  post:
5541
7183
  operationId: conversations_switch_post
@@ -5589,6 +7231,28 @@ paths:
5589
7231
  responses:
5590
7232
  "200":
5591
7233
  description: Successful response
7234
+ content:
7235
+ application/json:
7236
+ schema:
7237
+ type: object
7238
+ properties:
7239
+ ok:
7240
+ type: boolean
7241
+ required:
7242
+ - ok
7243
+ additionalProperties: false
7244
+ requestBody:
7245
+ required: true
7246
+ content:
7247
+ application/json:
7248
+ schema:
7249
+ type: object
7250
+ properties:
7251
+ conversationId:
7252
+ type: string
7253
+ required:
7254
+ - conversationId
7255
+ additionalProperties: false
5592
7256
  /v1/conversations/wake:
5593
7257
  post:
5594
7258
  operationId: conversations_wake_post
@@ -6338,6 +8002,7 @@ paths:
6338
8002
  enum:
6339
8003
  - disabled
6340
8004
  - ok
8005
+ - warning
6341
8006
  - critical
6342
8007
  - unknown
6343
8008
  locked:
@@ -6423,6 +8088,7 @@ paths:
6423
8088
  enum:
6424
8089
  - disabled
6425
8090
  - ok
8091
+ - warning
6426
8092
  - critical
6427
8093
  - unknown
6428
8094
  locked:
@@ -6524,6 +8190,7 @@ paths:
6524
8190
  enum:
6525
8191
  - disabled
6526
8192
  - ok
8193
+ - warning
6527
8194
  - critical
6528
8195
  - unknown
6529
8196
  locked:
@@ -6599,8 +8266,29 @@ paths:
6599
8266
  properties:
6600
8267
  documents:
6601
8268
  type: array
6602
- items: {}
6603
- description: Document summary objects
8269
+ items:
8270
+ type: object
8271
+ properties:
8272
+ surfaceId:
8273
+ type: string
8274
+ conversationId:
8275
+ type: string
8276
+ title:
8277
+ type: string
8278
+ wordCount:
8279
+ type: number
8280
+ createdAt:
8281
+ type: number
8282
+ updatedAt:
8283
+ type: number
8284
+ required:
8285
+ - surfaceId
8286
+ - conversationId
8287
+ - title
8288
+ - wordCount
8289
+ - createdAt
8290
+ - updatedAt
8291
+ additionalProperties: false
6604
8292
  required:
6605
8293
  - documents
6606
8294
  additionalProperties: false
@@ -7006,6 +8694,15 @@ paths:
7006
8694
  responses:
7007
8695
  "200":
7008
8696
  description: Successful response
8697
+ /v1/domain/verification-status:
8698
+ post:
8699
+ operationId: domain_verificationstatus_post
8700
+ summary: Get live DNS verification status for a domain
8701
+ tags:
8702
+ - domain
8703
+ responses:
8704
+ "200":
8705
+ description: Successful response
7009
8706
  /v1/email/attachment-get:
7010
8707
  get:
7011
8708
  operationId: email_attachmentget_get
@@ -7327,12 +9024,20 @@ paths:
7327
9024
  "200":
7328
9025
  description: Successful response
7329
9026
  parameters:
9027
+ - name: conversationId
9028
+ in: query
9029
+ required: false
9030
+ schema:
9031
+ type: string
9032
+ description: Scope to a single conversation by its assistant-minted internal id. 404s if no such conversation exists.
7330
9033
  - name: conversationKey
7331
9034
  in: query
7332
9035
  required: false
7333
9036
  schema:
7334
9037
  type: string
7335
- description: Scope to a single conversation
9038
+ description:
9039
+ Scope to a single conversation by an external key (non-vellum channels) or the web idempotency key.
9040
+ Materializes a row on first use. Ignored when conversationId is also provided.
7336
9041
  /v1/events/emit:
7337
9042
  post:
7338
9043
  operationId: events_emit_post
@@ -7508,6 +9213,33 @@ paths:
7508
9213
  responses:
7509
9214
  "200":
7510
9215
  description: Successful response
9216
+ content:
9217
+ application/json:
9218
+ schema:
9219
+ type: object
9220
+ properties:
9221
+ groups:
9222
+ type: array
9223
+ items:
9224
+ type: object
9225
+ properties:
9226
+ id:
9227
+ type: string
9228
+ name:
9229
+ type: string
9230
+ sortPosition:
9231
+ type: number
9232
+ isSystemGroup:
9233
+ type: boolean
9234
+ required:
9235
+ - id
9236
+ - name
9237
+ - sortPosition
9238
+ - isSystemGroup
9239
+ additionalProperties: false
9240
+ required:
9241
+ - groups
9242
+ additionalProperties: false
7511
9243
  post:
7512
9244
  operationId: groups_post
7513
9245
  summary: Create group
@@ -7517,6 +9249,25 @@ paths:
7517
9249
  responses:
7518
9250
  "201":
7519
9251
  description: Successful response
9252
+ content:
9253
+ application/json:
9254
+ schema:
9255
+ type: object
9256
+ properties:
9257
+ id:
9258
+ type: string
9259
+ name:
9260
+ type: string
9261
+ sortPosition:
9262
+ type: number
9263
+ isSystemGroup:
9264
+ type: boolean
9265
+ required:
9266
+ - id
9267
+ - name
9268
+ - sortPosition
9269
+ - isSystemGroup
9270
+ additionalProperties: false
7520
9271
  "400":
7521
9272
  description: Missing or invalid name, or sort_position ceiling reached
7522
9273
  requestBody:
@@ -7561,6 +9312,25 @@ paths:
7561
9312
  responses:
7562
9313
  "200":
7563
9314
  description: Successful response
9315
+ content:
9316
+ application/json:
9317
+ schema:
9318
+ type: object
9319
+ properties:
9320
+ id:
9321
+ type: string
9322
+ name:
9323
+ type: string
9324
+ sortPosition:
9325
+ type: number
9326
+ isSystemGroup:
9327
+ type: boolean
9328
+ required:
9329
+ - id
9330
+ - name
9331
+ - sortPosition
9332
+ - isSystemGroup
9333
+ additionalProperties: false
7564
9334
  "403":
7565
9335
  description: System group sort position cannot be changed
7566
9336
  "404":
@@ -7593,6 +9363,16 @@ paths:
7593
9363
  responses:
7594
9364
  "200":
7595
9365
  description: Successful response
9366
+ content:
9367
+ application/json:
9368
+ schema:
9369
+ type: object
9370
+ properties:
9371
+ ok:
9372
+ type: boolean
9373
+ required:
9374
+ - ok
9375
+ additionalProperties: false
7596
9376
  "403":
7597
9377
  description: Cannot reorder system groups
7598
9378
  requestBody:
@@ -8605,6 +10385,197 @@ paths:
8605
10385
  required: true
8606
10386
  schema:
8607
10387
  type: string
10388
+ /v1/home/feed/query:
10389
+ post:
10390
+ operationId: home_feed_query_post
10391
+ summary: List home feed items with filters
10392
+ description:
10393
+ Return home feed items filtered by status, urgency, category, conversation, and date range. Defaults to
10394
+ excluding dismissed items. Used by the assistant CLI to inspect what notifications have been surfaced to the
10395
+ user.
10396
+ tags:
10397
+ - home
10398
+ responses:
10399
+ "200":
10400
+ description: Successful response
10401
+ content:
10402
+ application/json:
10403
+ schema:
10404
+ type: object
10405
+ properties:
10406
+ items:
10407
+ type: array
10408
+ items:
10409
+ type: object
10410
+ properties:
10411
+ id:
10412
+ type: string
10413
+ type:
10414
+ type: string
10415
+ const: notification
10416
+ priority:
10417
+ type: integer
10418
+ minimum: 0
10419
+ maximum: 100
10420
+ title:
10421
+ type: string
10422
+ summary:
10423
+ type: string
10424
+ timestamp:
10425
+ type: string
10426
+ status:
10427
+ default: new
10428
+ type: string
10429
+ enum:
10430
+ - new
10431
+ - seen
10432
+ - acted_on
10433
+ - dismissed
10434
+ expiresAt:
10435
+ type: string
10436
+ actions:
10437
+ type: array
10438
+ items:
10439
+ type: object
10440
+ properties:
10441
+ id:
10442
+ type: string
10443
+ label:
10444
+ type: string
10445
+ prompt:
10446
+ type: string
10447
+ required:
10448
+ - id
10449
+ - label
10450
+ - prompt
10451
+ additionalProperties: false
10452
+ urgency:
10453
+ type: string
10454
+ enum:
10455
+ - low
10456
+ - medium
10457
+ - high
10458
+ - critical
10459
+ conversationId:
10460
+ type: string
10461
+ detailPanel:
10462
+ type: object
10463
+ properties:
10464
+ kind:
10465
+ type: string
10466
+ enum:
10467
+ - emailDraft
10468
+ - documentPreview
10469
+ - permissionChat
10470
+ - paymentAuth
10471
+ - toolPermission
10472
+ - updatesList
10473
+ required:
10474
+ - kind
10475
+ additionalProperties: false
10476
+ category:
10477
+ type: string
10478
+ enum:
10479
+ - security
10480
+ - scheduling
10481
+ - background
10482
+ - email
10483
+ - system
10484
+ noteworthy:
10485
+ type: boolean
10486
+ fromAssistant:
10487
+ type: boolean
10488
+ metadata:
10489
+ type: object
10490
+ propertyNames:
10491
+ type: string
10492
+ additionalProperties: {}
10493
+ createdAt:
10494
+ type: string
10495
+ required:
10496
+ - id
10497
+ - type
10498
+ - priority
10499
+ - summary
10500
+ - timestamp
10501
+ - status
10502
+ - createdAt
10503
+ additionalProperties: false
10504
+ total:
10505
+ type: integer
10506
+ minimum: 0
10507
+ maximum: 9007199254740991
10508
+ returned:
10509
+ type: integer
10510
+ minimum: 0
10511
+ maximum: 9007199254740991
10512
+ hasMore:
10513
+ type: boolean
10514
+ updatedAt:
10515
+ type: string
10516
+ required:
10517
+ - items
10518
+ - total
10519
+ - returned
10520
+ - hasMore
10521
+ - updatedAt
10522
+ additionalProperties: false
10523
+ requestBody:
10524
+ required: true
10525
+ content:
10526
+ application/json:
10527
+ schema:
10528
+ type: object
10529
+ properties:
10530
+ includeDismissed:
10531
+ type: boolean
10532
+ statuses:
10533
+ type: array
10534
+ items:
10535
+ type: string
10536
+ enum:
10537
+ - new
10538
+ - seen
10539
+ - acted_on
10540
+ - dismissed
10541
+ before:
10542
+ type: string
10543
+ after:
10544
+ type: string
10545
+ urgencies:
10546
+ type: array
10547
+ items:
10548
+ type: string
10549
+ enum:
10550
+ - low
10551
+ - medium
10552
+ - high
10553
+ - critical
10554
+ categories:
10555
+ type: array
10556
+ items:
10557
+ type: string
10558
+ enum:
10559
+ - security
10560
+ - scheduling
10561
+ - background
10562
+ - email
10563
+ - system
10564
+ conversationId:
10565
+ type: string
10566
+ fromAssistant:
10567
+ type: boolean
10568
+ noteworthy:
10569
+ type: boolean
10570
+ limit:
10571
+ type: integer
10572
+ exclusiveMinimum: 0
10573
+ maximum: 200
10574
+ offset:
10575
+ type: integer
10576
+ minimum: 0
10577
+ maximum: 9007199254740991
10578
+ additionalProperties: false
8608
10579
  /v1/home/state:
8609
10580
  get:
8610
10581
  operationId: home_state_get
@@ -8967,6 +10938,9 @@ paths:
8967
10938
  reason:
8968
10939
  description: Detach reason
8969
10940
  type: string
10941
+ clientId:
10942
+ description: Extension client ID that reported the invalidation
10943
+ type: string
8970
10944
  additionalProperties: false
8971
10945
  /v1/host-cu-result:
8972
10946
  post:
@@ -9174,10 +11148,8 @@ paths:
9174
11148
  /v1/identity/intro:
9175
11149
  get:
9176
11150
  operationId: identity_intro_get
9177
- summary: Get identity intro text
9178
- description:
9179
- Returns a deterministic greeting derived from the assistant name in IDENTITY.md, falling back to
9180
- LLM-generated cache.
11151
+ summary: Get identity greetings
11152
+ description: Returns an array of greetings sourced from SOUL.md, LLM cache, or static fallbacks.
9181
11153
  tags:
9182
11154
  - identity
9183
11155
  responses:
@@ -9188,9 +11160,14 @@ paths:
9188
11160
  schema:
9189
11161
  type: object
9190
11162
  properties:
11163
+ greetings:
11164
+ type: array
11165
+ items:
11166
+ type: string
9191
11167
  text:
9192
11168
  type: string
9193
11169
  required:
11170
+ - greetings
9194
11171
  - text
9195
11172
  additionalProperties: false
9196
11173
  /v1/image-generation/generate:
@@ -9298,6 +11275,7 @@ paths:
9298
11275
  - fireworks
9299
11276
  - openrouter
9300
11277
  - openai-compatible
11278
+ - minimax
9301
11279
  auth:
9302
11280
  oneOf:
9303
11281
  - type: object
@@ -9352,11 +11330,6 @@ paths:
9352
11330
  - type
9353
11331
  - credential
9354
11332
  additionalProperties: false
9355
- status:
9356
- type: string
9357
- enum:
9358
- - active
9359
- - disabled
9360
11333
  label:
9361
11334
  anyOf:
9362
11335
  - type: string
@@ -9397,7 +11370,6 @@ paths:
9397
11370
  - name
9398
11371
  - provider
9399
11372
  - auth
9400
- - status
9401
11373
  - label
9402
11374
  - baseUrl
9403
11375
  - models
@@ -9414,7 +11386,9 @@ paths:
9414
11386
  required: false
9415
11387
  schema:
9416
11388
  type: string
9417
- description: "Filter by provider. One of: anthropic, openai, gemini, ollama, fireworks, openrouter, openai-compatible"
11389
+ description:
11390
+ "Filter by provider. One of: anthropic, openai, gemini, ollama, fireworks, openrouter, openai-compatible,
11391
+ minimax"
9418
11392
  post:
9419
11393
  operationId: inference_providerconnections_post
9420
11394
  summary: Create a provider connection
@@ -9442,6 +11416,7 @@ paths:
9442
11416
  - fireworks
9443
11417
  - openrouter
9444
11418
  - openai-compatible
11419
+ - minimax
9445
11420
  auth:
9446
11421
  oneOf:
9447
11422
  - type: object
@@ -9493,14 +11468,9 @@ paths:
9493
11468
  type: string
9494
11469
  minLength: 1
9495
11470
  required:
9496
- - type
9497
- - credential
9498
- additionalProperties: false
9499
- status:
9500
- type: string
9501
- enum:
9502
- - active
9503
- - disabled
11471
+ - type
11472
+ - credential
11473
+ additionalProperties: false
9504
11474
  label:
9505
11475
  anyOf:
9506
11476
  - type: string
@@ -9541,7 +11511,6 @@ paths:
9541
11511
  - name
9542
11512
  - provider
9543
11513
  - auth
9544
- - status
9545
11514
  - label
9546
11515
  - baseUrl
9547
11516
  - models
@@ -9573,6 +11542,7 @@ paths:
9573
11542
  - fireworks
9574
11543
  - openrouter
9575
11544
  - openai-compatible
11545
+ - minimax
9576
11546
  auth:
9577
11547
  oneOf:
9578
11548
  - type: object
@@ -9630,11 +11600,6 @@ paths:
9630
11600
  label:
9631
11601
  type: string
9632
11602
  minLength: 1
9633
- status:
9634
- type: string
9635
- enum:
9636
- - active
9637
- - disabled
9638
11603
  base_url:
9639
11604
  anyOf:
9640
11605
  - type: string
@@ -9724,6 +11689,7 @@ paths:
9724
11689
  - fireworks
9725
11690
  - openrouter
9726
11691
  - openai-compatible
11692
+ - minimax
9727
11693
  auth:
9728
11694
  oneOf:
9729
11695
  - type: object
@@ -9778,11 +11744,6 @@ paths:
9778
11744
  - type
9779
11745
  - credential
9780
11746
  additionalProperties: false
9781
- status:
9782
- type: string
9783
- enum:
9784
- - active
9785
- - disabled
9786
11747
  label:
9787
11748
  anyOf:
9788
11749
  - type: string
@@ -9823,7 +11784,6 @@ paths:
9823
11784
  - name
9824
11785
  - provider
9825
11786
  - auth
9826
- - status
9827
11787
  - label
9828
11788
  - baseUrl
9829
11789
  - models
@@ -9844,8 +11804,7 @@ paths:
9844
11804
  summary: Update a provider connection
9845
11805
  description:
9846
11806
  Update an existing connection. Cannot rename or change the provider. For managed connections
9847
- (anthropic-managed, openai-managed, gemini-managed) the auth is locked to platform; label and status remain
9848
- editable.
11807
+ (anthropic-managed, openai-managed, gemini-managed) the auth is locked to platform; label remains editable.
9849
11808
  tags:
9850
11809
  - inference
9851
11810
  responses:
@@ -9869,6 +11828,7 @@ paths:
9869
11828
  - fireworks
9870
11829
  - openrouter
9871
11830
  - openai-compatible
11831
+ - minimax
9872
11832
  auth:
9873
11833
  oneOf:
9874
11834
  - type: object
@@ -9923,11 +11883,6 @@ paths:
9923
11883
  - type
9924
11884
  - credential
9925
11885
  additionalProperties: false
9926
- status:
9927
- type: string
9928
- enum:
9929
- - active
9930
- - disabled
9931
11886
  label:
9932
11887
  anyOf:
9933
11888
  - type: string
@@ -9968,7 +11923,6 @@ paths:
9968
11923
  - name
9969
11924
  - provider
9970
11925
  - auth
9971
- - status
9972
11926
  - label
9973
11927
  - baseUrl
9974
11928
  - models
@@ -10047,11 +12001,6 @@ paths:
10047
12001
  - type
10048
12002
  - credential
10049
12003
  additionalProperties: false
10050
- status:
10051
- type: string
10052
- enum:
10053
- - active
10054
- - disabled
10055
12004
  label:
10056
12005
  anyOf:
10057
12006
  - type: string
@@ -10447,6 +12396,21 @@ paths:
10447
12396
  responses:
10448
12397
  "200":
10449
12398
  description: Successful response
12399
+ content:
12400
+ application/json:
12401
+ schema:
12402
+ type: object
12403
+ properties:
12404
+ hasToken:
12405
+ type: boolean
12406
+ success:
12407
+ type: boolean
12408
+ error:
12409
+ type: string
12410
+ required:
12411
+ - hasToken
12412
+ - success
12413
+ additionalProperties: false
10450
12414
  get:
10451
12415
  operationId: integrations_vercel_config_get
10452
12416
  summary: Get Vercel config
@@ -10456,6 +12420,21 @@ paths:
10456
12420
  responses:
10457
12421
  "200":
10458
12422
  description: Successful response
12423
+ content:
12424
+ application/json:
12425
+ schema:
12426
+ type: object
12427
+ properties:
12428
+ hasToken:
12429
+ type: boolean
12430
+ success:
12431
+ type: boolean
12432
+ error:
12433
+ type: string
12434
+ required:
12435
+ - hasToken
12436
+ - success
12437
+ additionalProperties: false
10459
12438
  post:
10460
12439
  operationId: integrations_vercel_config_post
10461
12440
  summary: Set or delete Vercel config
@@ -10465,6 +12444,37 @@ paths:
10465
12444
  responses:
10466
12445
  "200":
10467
12446
  description: Successful response
12447
+ content:
12448
+ application/json:
12449
+ schema:
12450
+ type: object
12451
+ properties:
12452
+ hasToken:
12453
+ type: boolean
12454
+ success:
12455
+ type: boolean
12456
+ error:
12457
+ type: string
12458
+ required:
12459
+ - hasToken
12460
+ - success
12461
+ additionalProperties: false
12462
+ requestBody:
12463
+ required: true
12464
+ content:
12465
+ application/json:
12466
+ schema:
12467
+ type: object
12468
+ properties:
12469
+ action:
12470
+ type: string
12471
+ enum:
12472
+ - get
12473
+ - set
12474
+ - delete
12475
+ apiToken:
12476
+ type: string
12477
+ additionalProperties: false
10468
12478
  /v1/internal/mcp/add:
10469
12479
  post:
10470
12480
  operationId: internal_mcp_add_post
@@ -11000,6 +13010,50 @@ paths:
11000
13010
  required:
11001
13011
  - op
11002
13012
  additionalProperties: false
13013
+ /v1/memory/v2/compare-retrievers:
13014
+ post:
13015
+ operationId: memory_v2_compareretrievers_post
13016
+ summary: Compare retrievers against the router's logged selections (read-only)
13017
+ description:
13018
+ Runs one or more retrievers over a sample of historical turns (memory_v2_activation_logs, mode='router')
13019
+ and scores their selected pages against the logged selections as ground truth, reconstructing each turn's inputs
13020
+ from the messages table + current NOW. Read-only — writes nothing. Each scored turn re-runs the router (one LLM
13021
+ call), so keep `limit` modest. Today the only retriever is the router itself, so this is the harness self-test.
13022
+ tags:
13023
+ - memory
13024
+ responses:
13025
+ "200":
13026
+ description: Successful response
13027
+ requestBody:
13028
+ required: true
13029
+ content:
13030
+ application/json:
13031
+ schema:
13032
+ type: object
13033
+ properties:
13034
+ limit:
13035
+ type: integer
13036
+ exclusiveMinimum: 0
13037
+ maximum: 9007199254740991
13038
+ strategy:
13039
+ type: string
13040
+ enum:
13041
+ - recent
13042
+ - random
13043
+ conversationIds:
13044
+ type: array
13045
+ items:
13046
+ type: string
13047
+ minLength: 1
13048
+ ks:
13049
+ type: array
13050
+ items:
13051
+ type: integer
13052
+ exclusiveMinimum: 0
13053
+ maximum: 9007199254740991
13054
+ includeNotInjected:
13055
+ type: boolean
13056
+ additionalProperties: false
11003
13057
  /v1/memory/v2/concept-frequency:
11004
13058
  post:
11005
13059
  operationId: memory_v2_conceptfrequency_post
@@ -11096,6 +13150,18 @@ paths:
11096
13150
  type: object
11097
13151
  properties: {}
11098
13152
  additionalProperties: false
13153
+ /v1/memory/v2/now-text:
13154
+ get:
13155
+ operationId: memory_v2_nowtext_get
13156
+ summary: Return the current rendered `<now>` body
13157
+ description:
13158
+ Returns the current NOW.md (autoloaded essentials/threads/recent). Used by the memory router playground to
13159
+ seed its `<now>` text area with a production-like default so callers can edit from a realistic baseline.
13160
+ tags:
13161
+ - memory
13162
+ responses:
13163
+ "200":
13164
+ description: Successful response
11099
13165
  /v1/memory/v2/reembed-skills:
11100
13166
  post:
11101
13167
  operationId: memory_v2_reembedskills_post
@@ -11112,17 +13178,236 @@ paths:
11112
13178
  application/json:
11113
13179
  schema:
11114
13180
  type: object
11115
- properties: {}
13181
+ properties: {}
13182
+ additionalProperties: false
13183
+ /v1/memory/v2/router-prompt-template:
13184
+ get:
13185
+ operationId: memory_v2_routerprompttemplate_get
13186
+ summary: Return the bundled router system-prompt template
13187
+ description:
13188
+ Returns the bundled `ROUTER_PROMPT` body with placeholders intact (`{{ASSISTANT_NAME}}`, `{{USER_NAME}}`,
13189
+ `{{PAGE_INDEX}}`). Used by the memory router playground's 'Load default' affordance so users have a known-good
13190
+ starting point when authoring an inline prompt override.
13191
+ tags:
13192
+ - memory
13193
+ responses:
13194
+ "200":
13195
+ description: Successful response
13196
+ /v1/memory/v2/simulate-router:
13197
+ post:
13198
+ operationId: memory_v2_simulaterouter_post
13199
+ summary: Dry-run the v4 router with config overrides (read-only)
13200
+ description:
13201
+ Runs the memory router against the live page index + EMA scores with optional tier_size / batch_size
13202
+ overrides, without recording an injection event or writing an activation log. Returns the slugs that would have
13203
+ been selected, per-slug tier provenance, EMA scores, and the effective router config so operators can validate
13204
+ knob changes before flipping them in workspace config.
13205
+ tags:
13206
+ - memory
13207
+ responses:
13208
+ "200":
13209
+ description: Successful response
13210
+ requestBody:
13211
+ required: true
13212
+ content:
13213
+ application/json:
13214
+ schema:
13215
+ type: object
13216
+ properties:
13217
+ recentTurnPairs:
13218
+ minItems: 1
13219
+ type: array
13220
+ items:
13221
+ type: object
13222
+ properties:
13223
+ assistantMessage:
13224
+ type: string
13225
+ userMessage:
13226
+ type: string
13227
+ required:
13228
+ - assistantMessage
13229
+ - userMessage
13230
+ additionalProperties: false
13231
+ nowText:
13232
+ type: string
13233
+ configOverrides:
13234
+ type: object
13235
+ properties:
13236
+ tier1_size:
13237
+ anyOf:
13238
+ - type: integer
13239
+ minimum: 1
13240
+ maximum: 9007199254740991
13241
+ - type: "null"
13242
+ tier2_size:
13243
+ anyOf:
13244
+ - type: integer
13245
+ minimum: 1
13246
+ maximum: 9007199254740991
13247
+ - type: "null"
13248
+ batch_size:
13249
+ anyOf:
13250
+ - type: integer
13251
+ minimum: 1
13252
+ maximum: 9007199254740991
13253
+ - type: "null"
13254
+ additionalProperties: false
13255
+ profileOverride:
13256
+ type: string
13257
+ minLength: 1
13258
+ routerPromptOverride:
13259
+ type: string
13260
+ maxLength: 1000000
13261
+ required:
13262
+ - recentTurnPairs
13263
+ additionalProperties: false
13264
+ /v1/memory/v2/validate:
13265
+ post:
13266
+ operationId: memory_v2_validate_post
13267
+ summary: Validate memory v2 workspace state
13268
+ description:
13269
+ Read-only structural validation of the v2 workspace — reports orphan edges, oversized pages, and parse
13270
+ failures. Runnable regardless of memory.v2.enabled so operators can dry-run validation before flipping the flag.
13271
+ tags:
13272
+ - memory
13273
+ responses:
13274
+ "200":
13275
+ description: Successful response
13276
+ requestBody:
13277
+ required: true
13278
+ content:
13279
+ application/json:
13280
+ schema:
13281
+ type: object
13282
+ properties: {}
13283
+ additionalProperties: false
13284
+ /v1/memory/v3/seed-edges:
13285
+ post:
13286
+ operationId: memory_v3_seededges_post
13287
+ summary: Seed the learned co-retrieval edge graph from v2 router history
13288
+ description:
13289
+ Builds an NPMI-scored co-retrieval graph from the v2 router's per-turn selections
13290
+ (memory_v2_activation_logs, status='injected') and persists it into memory_v3_auto_edges, warm-starting the
13291
+ learned edge graph that the v3 edge-expansion lane merges with curated edges when
13292
+ memory.v3.edges.learnedAdjacencyThreshold > 0. NPMI plus a min co-occurrence floor and an always-on frequency
13293
+ ceiling keep the neighborhoods associative rather than base-rate noise. Idempotent (upserts to a flat seed
13294
+ weight). Runs no LLM; the only write among the v3 routes.
13295
+ tags:
13296
+ - memory
13297
+ responses:
13298
+ "200":
13299
+ description: Successful response
13300
+ requestBody:
13301
+ required: true
13302
+ content:
13303
+ application/json:
13304
+ schema:
13305
+ type: object
13306
+ properties:
13307
+ minCount:
13308
+ type: integer
13309
+ exclusiveMinimum: 0
13310
+ maximum: 9007199254740991
13311
+ topK:
13312
+ type: integer
13313
+ exclusiveMinimum: 0
13314
+ maximum: 9007199254740991
13315
+ maxNeighborFreqRatio:
13316
+ type: number
13317
+ exclusiveMinimum: 0
13318
+ maximum: 1
13319
+ seedWeight:
13320
+ type: number
13321
+ exclusiveMinimum: 0
13322
+ additionalProperties: false
13323
+ /v1/memory/v3/shadow-diff:
13324
+ post:
13325
+ operationId: memory_v3_shadowdiff_post
13326
+ summary: Diff v3 shadow selections against live v2 router selections (read-only)
13327
+ description:
13328
+ Compares the v3 shadow-mode selections against the live v2 router selections turn-for-turn, from the memory
13329
+ activation log. Pairs each v3_shadow row with the nearest v2 router row in the same conversation (by timestamp,
13330
+ within a tolerance — the turn columns use different counters), then reports per-turn and aggregate overlap, what
13331
+ v3 surfaced that v2 did not, and what v2 had that v3 dropped, broken down by v3 provenance lane. The v2
13332
+ comparand is the router's fresh per-turn pick (status='injected'), not its accumulated in-context set. Requires
13333
+ that v3 shadow mode has been running so v3_shadow rows exist; the route runs no LLM and writes nothing.
13334
+ tags:
13335
+ - memory
13336
+ responses:
13337
+ "200":
13338
+ description: Successful response
13339
+ requestBody:
13340
+ required: true
13341
+ content:
13342
+ application/json:
13343
+ schema:
13344
+ type: object
13345
+ properties:
13346
+ sinceDays:
13347
+ type: number
13348
+ exclusiveMinimum: 0
13349
+ toleranceSec:
13350
+ type: number
13351
+ exclusiveMinimum: 0
13352
+ limit:
13353
+ type: integer
13354
+ exclusiveMinimum: 0
13355
+ maximum: 9007199254740991
13356
+ additionalProperties: false
13357
+ /v1/memory/v3/simulate:
13358
+ post:
13359
+ operationId: memory_v3_simulate_post
13360
+ summary: Dry-run the v3 retrieval loop against an ad-hoc query (read-only)
13361
+ description:
13362
+ Runs the v3 multi-lane bounded-descent retrieval loop read-only against a single synthetic turn built from
13363
+ the supplied query plus the live (or supplied) NOW context. Returns the selected page slugs, per-lane
13364
+ provenance, the full multi-pass descent trace, and accumulated cost. Optional passCap / lane-allowlist overrides
13365
+ apply on top of live config. Invoked directly (not gated by memory.v3.enabled/shadow) so operators can probe v3
13366
+ retrieval before flipping the flags; writes nothing (co-activation persistence is forced off), though each pass
13367
+ still spends the loop's filter + gate LLM calls.
13368
+ tags:
13369
+ - memory
13370
+ responses:
13371
+ "200":
13372
+ description: Successful response
13373
+ requestBody:
13374
+ required: true
13375
+ content:
13376
+ application/json:
13377
+ schema:
13378
+ type: object
13379
+ properties:
13380
+ query:
13381
+ type: string
13382
+ minLength: 1
13383
+ nowText:
13384
+ type: string
13385
+ passCap:
13386
+ type: integer
13387
+ exclusiveMinimum: 0
13388
+ maximum: 9007199254740991
13389
+ lanes:
13390
+ minItems: 1
13391
+ type: array
13392
+ items:
13393
+ type: string
13394
+ enum:
13395
+ - hot
13396
+ - sparse
13397
+ - dense
13398
+ - tree
13399
+ - edges
13400
+ required:
13401
+ - query
11116
13402
  additionalProperties: false
11117
- /v1/memory/v2/simulate-router:
13403
+ /v1/memory/v3/tree:
11118
13404
  post:
11119
- operationId: memory_v2_simulaterouter_post
11120
- summary: Dry-run the v4 router with config overrides (read-only)
13405
+ operationId: memory_v3_tree_post
13406
+ summary: Return a serializable view of the memory v3 tree DAG (read-only)
11121
13407
  description:
11122
- Runs the memory router against the live page index + EMA scores with optional tier_size / batch_size
11123
- overrides, without recording an injection event or writing an activation log. Returns the slugs that would have
11124
- been selected, per-slug tier provenance, EMA scores, and the effective router config so operators can validate
11125
- knob changes before flipping them in workspace config.
13408
+ Returns the v3 tree root id plus every node and its ordered child refs (page:/node:) as a JSON-serializable
13409
+ projection of the in-memory TreeIndex. Read-only; the CLI uses it to print an indented tree with shared-DAG
13410
+ re-entries marked.
11126
13411
  tags:
11127
13412
  - memory
11128
13413
  responses:
@@ -11134,42 +13419,16 @@ paths:
11134
13419
  application/json:
11135
13420
  schema:
11136
13421
  type: object
11137
- properties:
11138
- query:
11139
- type: string
11140
- minLength: 1
11141
- configOverrides:
11142
- type: object
11143
- properties:
11144
- tier1_size:
11145
- anyOf:
11146
- - type: integer
11147
- minimum: 1
11148
- maximum: 9007199254740991
11149
- - type: "null"
11150
- tier2_size:
11151
- anyOf:
11152
- - type: integer
11153
- minimum: 1
11154
- maximum: 9007199254740991
11155
- - type: "null"
11156
- batch_size:
11157
- anyOf:
11158
- - type: integer
11159
- minimum: 1
11160
- maximum: 9007199254740991
11161
- - type: "null"
11162
- additionalProperties: false
11163
- required:
11164
- - query
13422
+ properties: {}
11165
13423
  additionalProperties: false
11166
- /v1/memory/v2/validate:
13424
+ /v1/memory/v3/validate:
11167
13425
  post:
11168
- operationId: memory_v2_validate_post
11169
- summary: Validate memory v2 workspace state
13426
+ operationId: memory_v3_validate_post
13427
+ summary: Validate the memory v3 tree structure (read-only)
11170
13428
  description:
11171
- Read-only structural validation of the v2 workspace reports orphan edges, oversized pages, and parse
11172
- failures. Runnable regardless of memory.v2.enabled so operators can dry-run validation before flipping the flag.
13429
+ Read-only structural validation of the hand-authored v3 tree DAG. Reports dangling child refs, orphan
13430
+ pages, cycles, stale compositional indexes, and unknown edge targets. Writes nothing and runs no LLM operators
13431
+ dry-run it while the v2 → v3 migration is in flight.
11173
13432
  tags:
11174
13433
  - memory
11175
13434
  responses:
@@ -11813,6 +14072,92 @@ paths:
11813
14072
  required:
11814
14073
  - deliveryId
11815
14074
  additionalProperties: false
14075
+ /v1/notifications/edit:
14076
+ post:
14077
+ operationId: notifications_edit_post
14078
+ summary: Edit an already-sent notification
14079
+ description:
14080
+ Patch the home-feed entry for a notification and, where supported (Slack today), update the delivered
14081
+ message in place.
14082
+ tags:
14083
+ - notifications
14084
+ responses:
14085
+ "200":
14086
+ description: Successful response
14087
+ content:
14088
+ application/json:
14089
+ schema:
14090
+ type: object
14091
+ properties:
14092
+ ok:
14093
+ type: boolean
14094
+ feedItem:
14095
+ type: object
14096
+ propertyNames:
14097
+ type: string
14098
+ additionalProperties: {}
14099
+ channels:
14100
+ type: array
14101
+ items:
14102
+ type: object
14103
+ properties:
14104
+ channel:
14105
+ type: string
14106
+ deliveryId:
14107
+ type: string
14108
+ outcome:
14109
+ type: string
14110
+ enum:
14111
+ - updated
14112
+ - unsupported
14113
+ - skipped
14114
+ - failed
14115
+ reason:
14116
+ type: string
14117
+ required:
14118
+ - channel
14119
+ - deliveryId
14120
+ - outcome
14121
+ additionalProperties: false
14122
+ required:
14123
+ - ok
14124
+ - feedItem
14125
+ - channels
14126
+ additionalProperties: false
14127
+ "404":
14128
+ description: No notification found for the supplied id
14129
+ requestBody:
14130
+ required: true
14131
+ content:
14132
+ application/json:
14133
+ schema:
14134
+ type: object
14135
+ properties:
14136
+ id:
14137
+ type: string
14138
+ minLength: 1
14139
+ description: Feed item id (notif:<uuid>) or bare uuid
14140
+ title:
14141
+ type: string
14142
+ body:
14143
+ type: string
14144
+ urgency:
14145
+ type: string
14146
+ enum:
14147
+ - low
14148
+ - medium
14149
+ - high
14150
+ - critical
14151
+ status:
14152
+ type: string
14153
+ enum:
14154
+ - new
14155
+ - seen
14156
+ - acted_on
14157
+ - dismissed
14158
+ required:
14159
+ - id
14160
+ additionalProperties: false
11816
14161
  /v1/notifications/emit:
11817
14162
  post:
11818
14163
  operationId: notifications_emit_post
@@ -12522,6 +14867,168 @@ paths:
12522
14867
  required: true
12523
14868
  schema:
12524
14869
  type: string
14870
+ /v1/plugins:
14871
+ get:
14872
+ operationId: plugins_get
14873
+ summary: List installed plugins
14874
+ description:
14875
+ Return one entry per directory under `<workspaceDir>/plugins/`, sorted alphabetically. Matches the CLI's
14876
+ `assistant plugins list`. Supports `?q=<text>` for case-insensitive substring matching across plugin id, name,
14877
+ and description.
14878
+ tags:
14879
+ - plugins
14880
+ responses:
14881
+ "200":
14882
+ description: Successful response
14883
+ content:
14884
+ application/json:
14885
+ schema:
14886
+ type: object
14887
+ properties:
14888
+ plugins:
14889
+ type: array
14890
+ items:
14891
+ type: object
14892
+ properties:
14893
+ id:
14894
+ type: string
14895
+ description: Plugin's directory name (kebab-case). Matches `assistant plugins install <id>`.
14896
+ name:
14897
+ type: string
14898
+ description: Display name. Equal to `id` today.
14899
+ description:
14900
+ anyOf:
14901
+ - type: string
14902
+ - type: "null"
14903
+ description: From `package.json#description`; `null` when unknown.
14904
+ version:
14905
+ anyOf:
14906
+ - type: string
14907
+ - type: "null"
14908
+ description: From `package.json#version`; `null` when unknown.
14909
+ path:
14910
+ description: Absolute path to the plugin directory on the assistant host.
14911
+ type: string
14912
+ issues:
14913
+ description: Non-fatal issues with this entry (missing `package.json`, malformed JSON, ...). Omitted when clean.
14914
+ type: array
14915
+ items:
14916
+ type: string
14917
+ required:
14918
+ - id
14919
+ - name
14920
+ - description
14921
+ - version
14922
+ additionalProperties: false
14923
+ required:
14924
+ - plugins
14925
+ additionalProperties: false
14926
+ parameters:
14927
+ - name: q
14928
+ in: query
14929
+ required: false
14930
+ schema:
14931
+ type: string
14932
+ description: Optional substring filter applied to plugin id, name, and description.
14933
+ /v1/plugins/{name}:
14934
+ delete:
14935
+ operationId: plugins_by_name_delete
14936
+ summary: Uninstall a plugin
14937
+ description:
14938
+ Remove the directory at `<workspaceDir>/plugins/<name>/`. Mirrors the CLI's `assistant plugins uninstall
14939
+ <name>` (without the interactive confirmation — the API caller is responsible for any prompt). The plugin name
14940
+ is sanitized by the same regex the CLI uses; `../escape`-style values, hidden names, and absolute paths return
14941
+ 400. Missing plugins return 404. The assistant must be restarted to drop the plugin from the running runtime.
14942
+ tags:
14943
+ - plugins
14944
+ responses:
14945
+ "200":
14946
+ description: Successful response
14947
+ content:
14948
+ application/json:
14949
+ schema:
14950
+ type: object
14951
+ properties:
14952
+ name:
14953
+ type: string
14954
+ description: Directory name that was removed. Echoes the request's `:name` path parameter after sanitization.
14955
+ target:
14956
+ type: string
14957
+ description: Absolute path that was removed on the assistant host. Useful for audit logs and confirmation toasts.
14958
+ required:
14959
+ - name
14960
+ - target
14961
+ additionalProperties: false
14962
+ "400":
14963
+ description: The plugin name failed sanitization (e.g. contained slashes, dots, or uppercase letters).
14964
+ "404":
14965
+ description: No plugin directory exists with the given name.
14966
+ parameters:
14967
+ - name: name
14968
+ in: path
14969
+ required: true
14970
+ schema:
14971
+ type: string
14972
+ /v1/plugins/search:
14973
+ get:
14974
+ operationId: plugins_search_get
14975
+ summary: Search the plugin catalog
14976
+ description:
14977
+ List installable plugins from the canonical `vellum-ai/vellum-assistant` catalog at
14978
+ `experimental/plugins/`. The query is an ECMAScript regex matched case-insensitively against the directory name
14979
+ (e.g. `memory`, `^simple`). Empty query returns every entry. Mirrors the CLI's `assistant plugins search`.
14980
+ tags:
14981
+ - plugins
14982
+ responses:
14983
+ "200":
14984
+ description: Successful response
14985
+ content:
14986
+ application/json:
14987
+ schema:
14988
+ type: object
14989
+ properties:
14990
+ query:
14991
+ type: string
14992
+ description: Echo of the requested query (ECMAScript regex source).
14993
+ ref:
14994
+ type: string
14995
+ description: Git ref the catalog was listed at.
14996
+ matches:
14997
+ type: array
14998
+ items:
14999
+ type: object
15000
+ properties:
15001
+ name:
15002
+ type: string
15003
+ description: Directory name under `experimental/plugins/`. Matches `assistant plugins install <name>`.
15004
+ path:
15005
+ type: string
15006
+ description: Repo-relative path of the match (e.g. `experimental/plugins/<name>`).
15007
+ required:
15008
+ - name
15009
+ - path
15010
+ additionalProperties: false
15011
+ description: Directory matches, sorted alphabetically by name.
15012
+ required:
15013
+ - query
15014
+ - ref
15015
+ - matches
15016
+ additionalProperties: false
15017
+ parameters:
15018
+ - name: q
15019
+ in: query
15020
+ required: false
15021
+ schema:
15022
+ type: string
15023
+ description:
15024
+ ECMAScript regex pattern matched case-insensitively against catalog directory names. Empty/missing matches
15025
+ everything.
15026
+ - name: ref
15027
+ in: query
15028
+ required: false
15029
+ schema:
15030
+ type: string
15031
+ description: Optional git ref to list the catalog at. Defaults to the CLI's `DEFAULT_PLUGIN_REF` (typically `main`).
12525
15032
  /v1/profiler/runs:
12526
15033
  get:
12527
15034
  operationId: profiler_runs_get
@@ -15437,16 +17944,41 @@ paths:
15437
17944
  type: object
15438
17945
  properties:
15439
17946
  suggestion:
15440
- type: string
17947
+ anyOf:
17948
+ - type: string
17949
+ - type: "null"
15441
17950
  messageId:
15442
- type: string
17951
+ anyOf:
17952
+ - type: string
17953
+ - type: "null"
15443
17954
  source:
15444
17955
  type: string
17956
+ stale:
17957
+ type: boolean
15445
17958
  required:
15446
17959
  - suggestion
15447
17960
  - messageId
15448
17961
  - source
15449
17962
  additionalProperties: false
17963
+ parameters:
17964
+ - name: conversationId
17965
+ in: query
17966
+ required: false
17967
+ schema:
17968
+ type: string
17969
+ description: Conversation ID to fetch a suggestion for. Either this or conversationKey is required.
17970
+ - name: conversationKey
17971
+ in: query
17972
+ required: false
17973
+ schema:
17974
+ type: string
17975
+ description: Legacy conversation key. Either this or conversationId is required.
17976
+ - name: messageId
17977
+ in: query
17978
+ required: false
17979
+ schema:
17980
+ type: string
17981
+ description: Optional. Latest assistant message ID the client has seen — used to detect staleness.
15450
17982
  /v1/surface-actions:
15451
17983
  post:
15452
17984
  operationId: surfaceactions_post