@vellumai/assistant 0.8.2 → 0.8.4

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 (503) hide show
  1. package/ARCHITECTURE.md +11 -12
  2. package/docker-entrypoint.sh +13 -2
  3. package/docker-init-apt-root.sh +79 -6
  4. package/node_modules/@vellumai/gateway-client/src/types.ts +2 -0
  5. package/openapi.yaml +945 -36
  6. package/package.json +1 -1
  7. package/src/__tests__/agent-loop-exit-reason.test.ts +271 -0
  8. package/src/__tests__/agent-loop-override-profile.test.ts +1 -1
  9. package/src/__tests__/agent-loop-provider-error-recording.test.ts +195 -0
  10. package/src/__tests__/agent-loop.test.ts +88 -3
  11. package/src/__tests__/anthropic-provider.test.ts +272 -0
  12. package/src/__tests__/approval-cascade.test.ts +1 -1
  13. package/src/__tests__/background-workers-disk-pressure.test.ts +2 -1
  14. package/src/__tests__/channel-delivery-store.test.ts +193 -0
  15. package/src/__tests__/channel-reply-delivery.test.ts +284 -5
  16. package/src/__tests__/channel-retry-sweep.test.ts +274 -1
  17. package/src/__tests__/compaction-events.test.ts +1 -1
  18. package/src/__tests__/compactor-preserved-tail-count.test.ts +110 -0
  19. package/src/__tests__/compactor-tail-resolution.test.ts +107 -1
  20. package/src/__tests__/config-get-vision-flag.test.ts +136 -0
  21. package/src/__tests__/config-loader-backfill.test.ts +115 -18
  22. package/src/__tests__/config-watcher.test.ts +1 -1
  23. package/src/__tests__/context-token-estimator.test.ts +112 -57
  24. package/src/__tests__/conversation-abort-tool-results.test.ts +1 -1
  25. package/src/__tests__/conversation-agent-loop-inference-profile.test.ts +54 -3
  26. package/src/__tests__/conversation-agent-loop-overflow.test.ts +31 -6
  27. package/src/__tests__/conversation-agent-loop.test.ts +77 -3
  28. package/src/__tests__/conversation-app-control-lifecycle.test.ts +1 -1
  29. package/src/__tests__/conversation-clean-command.test.ts +137 -0
  30. package/src/__tests__/conversation-confirmation-signals.test.ts +1 -1
  31. package/src/__tests__/conversation-fork-crud.test.ts +161 -0
  32. package/src/__tests__/conversation-lifecycle.test.ts +1 -1
  33. package/src/__tests__/conversation-load-cleaned-at.test.ts +279 -0
  34. package/src/__tests__/conversation-load-history-repair.test.ts +1 -1
  35. package/src/__tests__/conversation-media-retry.test.ts +19 -8
  36. package/src/__tests__/conversation-pairing.test.ts +2 -2
  37. package/src/__tests__/conversation-process-callsite.test.ts +1 -1
  38. package/src/__tests__/conversation-provider-retry-repair.test.ts +1 -1
  39. package/src/__tests__/conversation-queue.test.ts +1 -1
  40. package/src/__tests__/conversation-runtime-assembly.test.ts +290 -85
  41. package/src/__tests__/conversation-seed-composer.test.ts +66 -4
  42. package/src/__tests__/conversation-slash-commands.test.ts +36 -8
  43. package/src/__tests__/conversation-slash-queue.test.ts +1 -1
  44. package/src/__tests__/conversation-slash-unknown.test.ts +1 -1
  45. package/src/__tests__/conversation-speed-override.test.ts +1 -1
  46. package/src/__tests__/conversation-surfaces-task-progress.test.ts +220 -0
  47. package/src/__tests__/conversation-workspace-cache-state.test.ts +1 -1
  48. package/src/__tests__/conversation-workspace-injection.test.ts +5 -1
  49. package/src/__tests__/conversation-workspace-tool-tracking.test.ts +5 -1
  50. package/src/__tests__/credential-security-invariants.test.ts +6 -0
  51. package/src/__tests__/cu-unified-flow.test.ts +10 -1
  52. package/src/__tests__/date-context.test.ts +45 -0
  53. package/src/__tests__/dm-backfill.test.ts +64 -0
  54. package/src/__tests__/dm-persistence.test.ts +33 -0
  55. package/src/__tests__/document-find-replace.test.ts +501 -0
  56. package/src/__tests__/external-plugin-loader.test.ts +91 -19
  57. package/src/__tests__/first-greeting.test.ts +23 -2
  58. package/src/__tests__/guardian-action-no-hardcoded-copy.test.ts +0 -1
  59. package/src/__tests__/guardian-dispatch.test.ts +1 -0
  60. package/src/__tests__/headless-browser-navigate.test.ts +172 -0
  61. package/src/__tests__/heartbeat-service.test.ts +24 -164
  62. package/src/__tests__/helpers/channel-test-adapter.ts +0 -2
  63. package/src/__tests__/host-app-control-proxy.test.ts +241 -0
  64. package/src/__tests__/host-bash-proxy.test.ts +6 -0
  65. package/src/__tests__/host-browser-proxy.test.ts +10 -0
  66. package/src/__tests__/host-cu-proxy.test.ts +8 -1
  67. package/src/__tests__/host-file-proxy.test.ts +8 -1
  68. package/src/__tests__/host-proxy-preactivation.test.ts +200 -13
  69. package/src/__tests__/host-transfer-proxy.test.ts +8 -1
  70. package/src/__tests__/identity-routes.test.ts +57 -0
  71. package/src/__tests__/inbound-slack-persistence.test.ts +3 -0
  72. package/src/__tests__/injector-background-turn.test.ts +153 -0
  73. package/src/__tests__/injector-chain.test.ts +7 -0
  74. package/src/__tests__/injector-document-comments.test.ts +378 -0
  75. package/src/__tests__/injector-pkb-v2-silenced.test.ts +4 -25
  76. package/src/__tests__/lifecycle-memory-v2-seed.test.ts +9 -2
  77. package/src/__tests__/list-messages-attachments.test.ts +21 -17
  78. package/src/__tests__/list-messages-hidden-metadata.test.ts +217 -0
  79. package/src/__tests__/list-messages-page-latest.test.ts +130 -14
  80. package/src/__tests__/list-messages-tool-merge.test.ts +17 -16
  81. package/src/__tests__/llm-callsite-catalog.test.ts +25 -0
  82. package/src/__tests__/llm-catalog-parity.test.ts +3 -0
  83. package/src/__tests__/llm-context-normalization.test.ts +0 -2
  84. package/src/__tests__/llm-request-log-agent-loop-exit-reason.test.ts +116 -0
  85. package/src/__tests__/llm-request-log-error-payload.test.ts +138 -0
  86. package/src/__tests__/llm-request-log-source-clickhouse.test.ts +2 -0
  87. package/src/__tests__/llm-resolver.test.ts +340 -3
  88. package/src/__tests__/log-export-routes.test.ts +99 -2
  89. package/src/__tests__/managed-profile-guard.test.ts +10 -0
  90. package/src/__tests__/message-queue-steer.test.ts +114 -0
  91. package/src/__tests__/notification-decision-fallback.test.ts +0 -91
  92. package/src/__tests__/notification-decision-strategy.test.ts +14 -31
  93. package/src/__tests__/notification-deep-link.test.ts +15 -0
  94. package/src/__tests__/notification-guardian-path.test.ts +1 -2
  95. package/src/__tests__/notification-platform-adapter.test.ts +5 -4
  96. package/src/__tests__/notification-telegram-adapter.test.ts +1 -0
  97. package/src/__tests__/notification-vellum-adapter.test.ts +113 -0
  98. package/src/__tests__/openai-provider.test.ts +323 -3
  99. package/src/__tests__/openai-responses-cutover-guard.test.ts +3 -3
  100. package/src/__tests__/openai-responses-provider.test.ts +4 -4
  101. package/src/__tests__/openrouter-provider-only.test.ts +51 -3
  102. package/src/__tests__/openrouter-token-estimation.test.ts +34 -25
  103. package/src/__tests__/outbound-slack-persistence.test.ts +187 -20
  104. package/src/__tests__/pending-interactions-resolved-event.test.ts +190 -0
  105. package/src/__tests__/platform-proxy-context.test.ts +6 -1
  106. package/src/__tests__/platform.test.ts +0 -3
  107. package/src/__tests__/plugin-source-watcher.test.ts +302 -0
  108. package/src/__tests__/plugin-tool-contribution.test.ts +3 -3
  109. package/src/__tests__/plugin-types.test.ts +2 -2
  110. package/src/__tests__/process-message-background-slack.test.ts +1 -51
  111. package/src/__tests__/process-message-display-content.test.ts +21 -16
  112. package/src/__tests__/provider-catalog-visibility.test.ts +16 -0
  113. package/src/__tests__/provider-platform-proxy-integration.test.ts +27 -25
  114. package/src/__tests__/secret-routes-platform-proxy.test.ts +1 -1
  115. package/src/__tests__/server-history-render.test.ts +83 -4
  116. package/src/__tests__/steer-tool-repair.test.ts +249 -0
  117. package/src/__tests__/system-prompt.test.ts +57 -101
  118. package/src/__tests__/terminal-tools.test.ts +11 -1
  119. package/src/__tests__/thinking-block-replay.test.ts +113 -0
  120. package/src/__tests__/thread-backfill.test.ts +370 -22
  121. package/src/__tests__/tool-executor.test.ts +90 -1
  122. package/src/__tests__/tool-result-metadata-plumbing.test.ts +167 -0
  123. package/src/__tests__/twilio-routes.test.ts +1 -1
  124. package/src/__tests__/web-fetch.test.ts +2 -2
  125. package/src/__tests__/workspace-git-service.test.ts +88 -5
  126. package/src/__tests__/workspace-migration-087-memory-router-balanced-profile.test.ts +228 -0
  127. package/src/__tests__/workspace-migration-088-deprecate-background-conversation-override.test.ts +158 -0
  128. package/src/a2a/__tests__/agent-card.test.ts +98 -0
  129. package/src/a2a/__tests__/e2e-a2a-channel.test.ts +597 -0
  130. package/src/a2a/__tests__/protocol-helpers.test.ts +113 -0
  131. package/src/a2a/__tests__/task-store.test.ts +246 -0
  132. package/src/a2a/agent-card.ts +58 -0
  133. package/src/a2a/feature-gate.ts +8 -0
  134. package/src/a2a/protocol-constants.ts +21 -0
  135. package/src/a2a/protocol-errors.ts +50 -0
  136. package/src/a2a/protocol-types.ts +162 -0
  137. package/src/a2a/task-store.ts +168 -0
  138. package/src/agent/attachments.ts +1 -0
  139. package/src/agent/loop.ts +208 -22
  140. package/src/background-wake/next-wake.test.ts +289 -0
  141. package/src/background-wake/next-wake.ts +172 -0
  142. package/src/browser/operations.ts +15 -0
  143. package/src/channels/config.ts +9 -0
  144. package/src/channels/types.ts +14 -0
  145. package/src/cli/commands/__tests__/conversations-slack.test.ts +572 -0
  146. package/src/cli/commands/__tests__/memory-v2.test.ts +9 -12
  147. package/src/cli/{__tests__ → commands/__tests__}/notifications.test.ts +201 -28
  148. package/src/cli/commands/__tests__/schedules.test.ts +469 -0
  149. package/src/cli/commands/conversations.ts +128 -1
  150. package/src/cli/commands/inference-providers.ts +147 -1
  151. package/src/cli/commands/memory-v2.ts +308 -0
  152. package/src/cli/commands/notifications.ts +89 -37
  153. package/src/cli/commands/plugins.ts +67 -0
  154. package/src/cli/commands/schedules.ts +297 -5
  155. package/src/cli/lib/__tests__/search-plugins.test.ts +261 -0
  156. package/src/cli/lib/install-from-github.ts +8 -9
  157. package/src/cli/lib/search-plugins.ts +163 -0
  158. package/src/cli/program.ts +14 -0
  159. package/src/cli/utils/conversation-id.ts +17 -5
  160. package/src/config/assistant-feature-flags.ts +24 -54
  161. package/src/config/bundled-skills/app-builder/SKILL.md +117 -1
  162. package/src/config/bundled-skills/document-editor/SKILL.md +115 -0
  163. package/src/config/bundled-skills/document-editor/TOOLS.json +240 -0
  164. package/src/config/bundled-skills/document-editor/tools/comment-list.ts +12 -0
  165. package/src/config/bundled-skills/document-editor/tools/comment-reply.ts +12 -0
  166. package/src/config/bundled-skills/document-editor/tools/comment-resolve.ts +12 -0
  167. package/src/config/bundled-skills/document-editor/tools/document-find.ts +12 -0
  168. package/src/config/bundled-skills/document-editor/tools/document-replace-text.ts +12 -0
  169. package/src/config/bundled-skills/media-processing/SKILL.md +8 -0
  170. package/src/config/bundled-skills/phone-calls/SKILL.md +1 -1
  171. package/src/config/bundled-skills/schedule/SKILL.md +8 -0
  172. package/src/config/bundled-tool-registry.ts +22 -12
  173. package/src/config/call-site-defaults.ts +124 -0
  174. package/src/config/feature-flag-registry.json +111 -23
  175. package/src/config/llm-resolver.ts +66 -1
  176. package/src/config/schema.ts +2 -0
  177. package/src/config/schemas/__tests__/memory-v2.test.ts +7 -3
  178. package/src/config/schemas/call-site-catalog.ts +21 -0
  179. package/src/config/schemas/channels.ts +9 -0
  180. package/src/config/schemas/conversations.ts +10 -0
  181. package/src/config/schemas/heartbeat.ts +14 -0
  182. package/src/config/schemas/llm.ts +4 -3
  183. package/src/config/schemas/memory-retrospective.ts +1 -1
  184. package/src/config/schemas/memory-v2.ts +51 -4
  185. package/src/config/schemas/memory.ts +3 -1
  186. package/src/config/seed-inference-profiles.ts +99 -29
  187. package/src/context/compactor.ts +80 -13
  188. package/src/context/token-estimator.ts +72 -31
  189. package/src/context/window-manager.ts +25 -0
  190. package/src/credential-health/credential-health-service.ts +34 -19
  191. package/src/daemon/__tests__/conversation-lifecycle-auto-analyze.test.ts +3 -22
  192. package/src/daemon/__tests__/conversation-tool-setup.test.ts +66 -6
  193. package/src/daemon/__tests__/native-web-search-metadata.test.ts +357 -0
  194. package/src/daemon/__tests__/web-search-status-text.test.ts +287 -0
  195. package/src/daemon/conversation-agent-loop-handlers.ts +231 -23
  196. package/src/daemon/conversation-agent-loop.ts +252 -56
  197. package/src/daemon/conversation-lifecycle.ts +142 -116
  198. package/src/daemon/conversation-messaging.ts +3 -0
  199. package/src/daemon/conversation-process.ts +273 -0
  200. package/src/daemon/conversation-queue-manager.ts +14 -0
  201. package/src/daemon/conversation-runtime-assembly.ts +144 -75
  202. package/src/daemon/conversation-slash.ts +37 -5
  203. package/src/daemon/conversation-surfaces.ts +45 -2
  204. package/src/daemon/conversation-tool-setup.ts +7 -0
  205. package/src/daemon/conversation.ts +42 -12
  206. package/src/daemon/date-context.ts +40 -0
  207. package/src/daemon/first-greeting.ts +10 -0
  208. package/src/daemon/guardian-action-generators.ts +1 -125
  209. package/src/daemon/handlers/__tests__/config-a2a-accept.test.ts +498 -0
  210. package/src/daemon/handlers/__tests__/config-a2a-complete.test.ts +248 -0
  211. package/src/daemon/handlers/__tests__/config-a2a-invite.test.ts +154 -0
  212. package/src/daemon/handlers/__tests__/config-a2a-redeem.test.ts +133 -0
  213. package/src/daemon/handlers/__tests__/config-a2a.test.ts +95 -0
  214. package/src/daemon/handlers/config-a2a.ts +449 -0
  215. package/src/daemon/handlers/config-model.test.ts +1 -0
  216. package/src/daemon/handlers/conversations.ts +80 -0
  217. package/src/daemon/handlers/shared.ts +92 -29
  218. package/src/daemon/host-app-control-proxy.ts +69 -18
  219. package/src/daemon/host-bash-proxy.ts +1 -1
  220. package/src/daemon/host-cu-proxy.ts +1 -1
  221. package/src/daemon/host-file-proxy.ts +1 -1
  222. package/src/daemon/host-proxy-preactivation.ts +85 -18
  223. package/src/daemon/host-transfer-proxy.ts +1 -1
  224. package/src/daemon/lifecycle.ts +67 -65
  225. package/src/daemon/memory-v2-startup.ts +49 -13
  226. package/src/daemon/message-protocol.ts +4 -0
  227. package/src/daemon/message-types/conversations.ts +8 -0
  228. package/src/daemon/message-types/document-comments.ts +50 -0
  229. package/src/daemon/message-types/messages.ts +68 -1
  230. package/src/daemon/message-types/notifications.ts +21 -0
  231. package/src/daemon/message-types/surfaces.ts +3 -1
  232. package/src/daemon/message-types/web-activity.ts +57 -0
  233. package/src/daemon/pkb-reminder-builder.test.ts +10 -53
  234. package/src/daemon/pkb-reminder-builder.ts +4 -19
  235. package/src/daemon/plugin-source-watcher.ts +135 -3
  236. package/src/daemon/process-message.ts +72 -12
  237. package/src/daemon/query-complexity-router.ts +75 -0
  238. package/src/daemon/skill-memory-refresh.ts +5 -1
  239. package/src/daemon/trust-context.ts +6 -0
  240. package/src/daemon/wake-target-adapter.ts +2 -0
  241. package/src/documents/document-comments-store.test.ts +338 -0
  242. package/src/documents/document-comments-store.ts +237 -0
  243. package/src/documents/document-store.ts +202 -0
  244. package/src/export/__tests__/transcript-formatter.test.ts +121 -0
  245. package/src/export/transcript-formatter.ts +54 -20
  246. package/src/heartbeat/__tests__/heartbeat-service.test.ts +44 -1
  247. package/src/heartbeat/heartbeat-service.ts +35 -191
  248. package/src/home/__tests__/feed-types.test.ts +40 -0
  249. package/src/home/__tests__/suggested-prompts.test.ts +33 -2
  250. package/src/home/feed-types.ts +20 -3
  251. package/src/home/home-content-refresh.ts +52 -0
  252. package/src/home/home-greeting-cache.ts +69 -0
  253. package/src/home/home-greeting.ts +94 -0
  254. package/src/home/suggested-prompts.ts +177 -9
  255. package/src/ipc/cli-client.ts +147 -45
  256. package/src/memory/__tests__/conversation-queries.test.ts +220 -0
  257. package/src/memory/__tests__/jobs-worker-v2-schedule.test.ts +135 -2
  258. package/src/memory/__tests__/memory-retrospective-enqueue.test.ts +2 -50
  259. package/src/memory/__tests__/memory-retrospective-job.test.ts +407 -10
  260. package/src/memory/conversation-crud.ts +133 -43
  261. package/src/memory/conversation-queries.ts +87 -1
  262. package/src/memory/conversation-title-service.ts +26 -4
  263. package/src/memory/db-init.ts +22 -0
  264. package/src/memory/delivery-crud.ts +41 -0
  265. package/src/memory/delivery-status.ts +141 -15
  266. package/src/memory/external-conversation-store.ts +32 -1
  267. package/src/memory/graph/__tests__/conversation-graph-memory-v2-routing.test.ts +84 -3
  268. package/src/memory/graph/conversation-graph-memory.ts +18 -6
  269. package/src/memory/graph/tools.ts +6 -37
  270. package/src/memory/invite-store.ts +53 -0
  271. package/src/memory/jobs-worker.ts +21 -1
  272. package/src/memory/llm-request-log-source-clickhouse.ts +7 -2
  273. package/src/memory/llm-request-log-store.ts +92 -1
  274. package/src/memory/memory-retrospective-constants.ts +28 -0
  275. package/src/memory/memory-retrospective-enqueue.ts +4 -22
  276. package/src/memory/memory-retrospective-job.ts +438 -21
  277. package/src/memory/memory-retrospective-startup-cleanup.ts +3 -3
  278. package/src/memory/memory-v2-activation-log-store.ts +26 -8
  279. package/src/memory/migrations/100-core-tables.ts +1 -0
  280. package/src/memory/migrations/109-external-conversation-bindings.ts +1 -0
  281. package/src/memory/migrations/250-provider-connection-base-url-and-models.ts +28 -0
  282. package/src/memory/migrations/251-a2a-tasks.ts +49 -0
  283. package/src/memory/migrations/252-llm-request-log-agent-loop-exit-reason.ts +32 -0
  284. package/src/memory/migrations/253-conversation-last-notified-profile.ts +15 -0
  285. package/src/memory/migrations/253-document-comments.ts +47 -0
  286. package/src/memory/migrations/254-external-conversation-binding-chat-name.ts +43 -0
  287. package/src/memory/migrations/255-channel-inbound-delivery-attempts.ts +24 -0
  288. package/src/memory/migrations/256-memory-v2-injection-events.ts +113 -0
  289. package/src/memory/migrations/257-strip-base-url-non-openai-compatible.ts +22 -0
  290. package/src/memory/migrations/258-onboarding-events-prior-assistants.ts +13 -0
  291. package/src/memory/migrations/259-conversation-cleaned-at.ts +33 -0
  292. package/src/memory/migrations/index.ts +20 -0
  293. package/src/memory/migrations/registry.ts +33 -0
  294. package/src/memory/onboarding-events-store.ts +7 -0
  295. package/src/memory/schema/a2a.ts +15 -0
  296. package/src/memory/schema/calls.ts +1 -0
  297. package/src/memory/schema/conversations.ts +3 -0
  298. package/src/memory/schema/index.ts +1 -0
  299. package/src/memory/schema/inference.ts +2 -0
  300. package/src/memory/schema/infrastructure.ts +2 -0
  301. package/src/memory/v2/__tests__/activation-store.test.ts +25 -23
  302. package/src/memory/v2/__tests__/cli-command-store.test.ts +404 -0
  303. package/src/memory/v2/__tests__/frontmatter-sweep.test.ts +25 -4
  304. package/src/memory/v2/__tests__/injection-events.test.ts +318 -0
  305. package/src/memory/v2/__tests__/injection.test.ts +221 -17
  306. package/src/memory/v2/__tests__/page-index.test.ts +365 -1
  307. package/src/memory/v2/__tests__/router.test.ts +489 -1
  308. package/src/memory/v2/__tests__/static-context.test.ts +12 -1
  309. package/src/memory/v2/activation-store.ts +14 -16
  310. package/src/memory/v2/cli-command-content.ts +19 -0
  311. package/src/memory/v2/cli-command-store.ts +304 -0
  312. package/src/memory/v2/consolidation-job.ts +14 -0
  313. package/src/memory/v2/frontmatter-sweep.ts +7 -1
  314. package/src/memory/v2/injection-events.ts +101 -0
  315. package/src/memory/v2/injection.ts +69 -29
  316. package/src/memory/v2/page-index.ts +246 -19
  317. package/src/memory/v2/page-store.ts +18 -0
  318. package/src/memory/v2/router.ts +209 -55
  319. package/src/memory/v2/static-context.ts +4 -4
  320. package/src/memory/v2/types.ts +23 -0
  321. package/src/messaging/providers/a2a/__tests__/deliver.test.ts +274 -0
  322. package/src/messaging/providers/a2a/deliver.ts +156 -0
  323. package/src/messaging/providers/gmail/client.ts +9 -2
  324. package/src/messaging/providers/index.ts +18 -3
  325. package/src/messaging/providers/slack/__tests__/adapter-mention-rendering.test.ts +329 -3
  326. package/src/messaging/providers/slack/__tests__/adapter-token-routing.test.ts +34 -1
  327. package/src/messaging/providers/slack/adapter.ts +178 -25
  328. package/src/messaging/providers/slack/api.test.ts +54 -0
  329. package/src/messaging/providers/slack/api.ts +119 -3
  330. package/src/messaging/providers/slack/client.ts +12 -0
  331. package/src/messaging/providers/slack/deep-link.ts +20 -1
  332. package/src/messaging/providers/slack/message-metadata.test.ts +48 -0
  333. package/src/messaging/providers/slack/message-metadata.ts +156 -0
  334. package/src/messaging/providers/slack/render-transcript.test.ts +107 -75
  335. package/src/messaging/providers/slack/render-transcript.ts +176 -49
  336. package/src/messaging/providers/slack/send.test.ts +77 -0
  337. package/src/messaging/providers/slack/send.ts +8 -2
  338. package/src/messaging/providers/slack/types.ts +14 -0
  339. package/src/notifications/__tests__/broadcaster.test.ts +203 -0
  340. package/src/notifications/__tests__/decision-engine.test.ts +283 -0
  341. package/src/notifications/__tests__/deterministic-checks.test.ts +286 -0
  342. package/src/notifications/__tests__/emit-signal-home-feed.test.ts +5 -1
  343. package/src/notifications/__tests__/home-feed-side-effect.test.ts +521 -36
  344. package/src/notifications/adapters/macos.ts +12 -2
  345. package/src/notifications/broadcaster.ts +29 -4
  346. package/src/notifications/conversation-seed-composer.ts +14 -2
  347. package/src/notifications/copy-composer.ts +17 -64
  348. package/src/notifications/decision-engine.ts +111 -44
  349. package/src/notifications/deferred-emit.ts +135 -0
  350. package/src/notifications/deterministic-checks.ts +96 -0
  351. package/src/notifications/emit-signal.ts +10 -1
  352. package/src/notifications/home-feed-side-effect.ts +136 -27
  353. package/src/notifications/signal.ts +0 -4
  354. package/src/notifications/types.ts +8 -0
  355. package/src/oauth/connect-orchestrator.ts +3 -0
  356. package/src/oauth/credential-token-resolver.ts +2 -0
  357. package/src/oauth/manual-token-connection.ts +19 -0
  358. package/src/oauth/oauth-store.ts +12 -0
  359. package/src/oauth/platform-connection.test.ts +43 -3
  360. package/src/oauth/platform-connection.ts +13 -4
  361. package/src/oauth/seed-providers.ts +22 -0
  362. package/src/permissions/prompter.ts +5 -2
  363. package/src/permissions/secret-prompter.ts +4 -1
  364. package/src/plugins/defaults/injectors.ts +118 -26
  365. package/src/plugins/external-plugin-loader.ts +82 -10
  366. package/src/plugins/types.ts +16 -7
  367. package/src/prompts/__tests__/system-prompt.test.ts +44 -45
  368. package/src/prompts/__tests__/task-progress-hint-section.test.ts +4 -8
  369. package/src/prompts/normalize-onboarding.ts +40 -0
  370. package/src/prompts/sections.ts +32 -14
  371. package/src/prompts/system-prompt.ts +105 -76
  372. package/src/prompts/template-detection.ts +37 -0
  373. package/src/prompts/templates/BOOTSTRAP-CONTENT-AUTOMATION.md +141 -0
  374. package/src/prompts/templates/BOOTSTRAP.md +13 -5
  375. package/src/prompts/templates/VOICE.md +3 -0
  376. package/src/prompts/templates/system-sections.ts +51 -10
  377. package/src/providers/__tests__/inference.test.ts +2 -0
  378. package/src/providers/anthropic/client.ts +132 -5
  379. package/src/providers/call-site-routing.ts +24 -6
  380. package/src/providers/connection-resolution.ts +63 -13
  381. package/src/providers/fireworks/client.ts +20 -2
  382. package/src/providers/inference/__tests__/adapter-factory-openai-compatible.test.ts +74 -0
  383. package/src/providers/inference/__tests__/base-url-route-validation.test.ts +342 -0
  384. package/src/providers/inference/__tests__/base-url-security.test.ts +189 -0
  385. package/src/providers/inference/__tests__/codex-token-refresh.test.ts +254 -0
  386. package/src/providers/inference/__tests__/connections-openai-compatible.test.ts +175 -0
  387. package/src/providers/inference/__tests__/connections-status-label.test.ts +15 -0
  388. package/src/providers/inference/adapter-factory.ts +24 -21
  389. package/src/providers/inference/auth.ts +15 -3
  390. package/src/providers/inference/backfill.ts +14 -1
  391. package/src/providers/inference/codex-token-refresh.ts +128 -0
  392. package/src/providers/inference/connections.ts +85 -5
  393. package/src/providers/inference/resolve-auth.ts +50 -5
  394. package/src/providers/model-catalog.ts +244 -242
  395. package/src/providers/model-intents.ts +3 -3
  396. package/src/providers/openai/__tests__/chat-completions-provider-reasoning.test.ts +235 -0
  397. package/src/providers/openai/chat-completions-provider.ts +215 -25
  398. package/src/providers/openai/responses-provider.ts +9 -3
  399. package/src/providers/openrouter/client.ts +46 -4
  400. package/src/providers/platform-proxy/constants.ts +3 -4
  401. package/src/providers/provider-catalog-visibility.ts +3 -1
  402. package/src/providers/provider-send-message.ts +27 -12
  403. package/src/providers/registry.ts +30 -1
  404. package/src/providers/types.ts +25 -0
  405. package/src/runtime/__tests__/agent-wake.test.ts +214 -0
  406. package/src/runtime/__tests__/background-job-runner.test.ts +128 -0
  407. package/src/runtime/agent-wake.ts +212 -57
  408. package/src/runtime/auth/route-policy.ts +20 -3
  409. package/src/runtime/background-job-runner.ts +26 -0
  410. package/src/runtime/channel-reply-delivery.ts +182 -47
  411. package/src/runtime/channel-retry-sweep.ts +141 -16
  412. package/src/runtime/http-server.ts +7 -16
  413. package/src/runtime/http-types.ts +7 -51
  414. package/src/runtime/pending-interactions.ts +51 -8
  415. package/src/runtime/routes/__tests__/consolidation-routes.test.ts +258 -0
  416. package/src/runtime/routes/__tests__/content-source-routes.test.ts +162 -0
  417. package/src/runtime/routes/__tests__/conversation-query-routes.test.ts +121 -5
  418. package/src/runtime/routes/__tests__/inference-provider-connection-routes.test.ts +275 -44
  419. package/src/runtime/routes/__tests__/llm-call-sites-routes.test.ts +12 -0
  420. package/src/runtime/routes/__tests__/memory-v2-routes.test.ts +14 -0
  421. package/src/runtime/routes/__tests__/memory-v2-simulate-route.test.ts +271 -0
  422. package/src/runtime/routes/__tests__/sanity-routes.test.ts +280 -0
  423. package/src/runtime/routes/__tests__/slack-channel-routes.test.ts +266 -0
  424. package/src/runtime/routes/approval-routes.ts +4 -1
  425. package/src/runtime/routes/channel-availability-routes.ts +5 -0
  426. package/src/runtime/routes/chatgpt-subscription-auth-routes.ts +246 -0
  427. package/src/runtime/routes/consolidation-routes.ts +100 -0
  428. package/src/runtime/routes/content-source-routes.ts +78 -0
  429. package/src/runtime/routes/conversation-cli-routes.ts +146 -1
  430. package/src/runtime/routes/conversation-query-routes.ts +130 -12
  431. package/src/runtime/routes/conversation-routes.ts +288 -76
  432. package/src/runtime/routes/document-comments-routes.ts +287 -0
  433. package/src/runtime/routes/documents-routes.ts +33 -0
  434. package/src/runtime/routes/home-feed-routes.ts +6 -3
  435. package/src/runtime/routes/host-app-control-routes.ts +1 -1
  436. package/src/runtime/routes/host-browser-routes.ts +8 -1
  437. package/src/runtime/routes/identity-routes.ts +21 -0
  438. package/src/runtime/routes/inbound-message-handler.ts +288 -58
  439. package/src/runtime/routes/inbound-stages/background-dispatch.test.ts +365 -6
  440. package/src/runtime/routes/inbound-stages/background-dispatch.ts +283 -82
  441. package/src/runtime/routes/index.ts +14 -4
  442. package/src/runtime/routes/inference-provider-connection-routes.ts +192 -3
  443. package/src/runtime/routes/integrations/a2a.ts +294 -0
  444. package/src/runtime/routes/llm-call-sites-routes.ts +11 -1
  445. package/src/runtime/routes/log-export-routes.ts +39 -0
  446. package/src/runtime/routes/memory-v2-routes.ts +217 -0
  447. package/src/runtime/routes/notification-routes.ts +19 -2
  448. package/src/runtime/routes/question-routes.ts +4 -1
  449. package/src/runtime/routes/sanity-routes.ts +159 -0
  450. package/src/runtime/routes/slack-channel-routes.ts +187 -0
  451. package/src/runtime/routes/subagents-routes.ts +41 -0
  452. package/src/runtime/services/conversation-serializer.ts +30 -4
  453. package/src/schedule/integration-status.ts +3 -1
  454. package/src/security/__tests__/oauth2-device-code.test.ts +479 -0
  455. package/src/security/oauth2-device-code.ts +307 -0
  456. package/src/security/oauth2.ts +26 -9
  457. package/src/security/secure-keys.ts +5 -0
  458. package/src/skills/catalog-install.ts +6 -2
  459. package/src/subagent/manager.ts +2 -0
  460. package/src/tools/browser/__tests__/pinned-tabs.test.ts +80 -0
  461. package/src/tools/browser/browser-execution.ts +93 -0
  462. package/src/tools/browser/cdp-client/__tests__/factory.test.ts +28 -0
  463. package/src/tools/browser/cdp-client/__tests__/types.test.ts +1 -0
  464. package/src/tools/browser/cdp-client/cdp-inspect-client.ts +10 -0
  465. package/src/tools/browser/cdp-client/extension-cdp-client.ts +15 -1
  466. package/src/tools/browser/cdp-client/factory.ts +87 -3
  467. package/src/tools/browser/cdp-client/local-cdp-client.ts +9 -0
  468. package/src/tools/browser/cdp-client/types.ts +36 -0
  469. package/src/tools/browser/pinned-tabs.ts +90 -0
  470. package/src/tools/document/document-comment-tool.test.ts +379 -0
  471. package/src/tools/document/document-comment-tool.ts +156 -0
  472. package/src/tools/document/document-tool.ts +128 -2
  473. package/src/tools/memory/register.ts +1 -9
  474. package/src/tools/network/__tests__/web-fetch-metadata.test.ts +229 -0
  475. package/src/tools/network/__tests__/web-search-metadata.test.ts +346 -0
  476. package/src/tools/network/domain-normalize.ts +17 -0
  477. package/src/tools/network/web-fetch.ts +213 -64
  478. package/src/tools/network/web-search.ts +191 -66
  479. package/src/tools/registry.ts +2 -2
  480. package/src/tools/terminal/safe-env.ts +3 -2
  481. package/src/tools/tool-approval-handler.ts +19 -12
  482. package/src/tools/types.ts +41 -2
  483. package/src/tools/ui-surface/definitions.ts +3 -1
  484. package/src/types/onboarding-context.ts +4 -0
  485. package/src/util/__tests__/favicon.test.ts +84 -0
  486. package/src/util/favicon.ts +40 -0
  487. package/src/util/platform.ts +0 -5
  488. package/src/workspace/git-service.ts +75 -4
  489. package/src/workspace/migrations/087-memory-router-balanced-profile.ts +91 -0
  490. package/src/workspace/migrations/088-deprecate-background-conversation-override.ts +103 -0
  491. package/src/workspace/migrations/registry.ts +4 -0
  492. package/src/__tests__/guardian-action-conversation-turn.test.ts +0 -441
  493. package/src/config/bundled-skills/document/SKILL.md +0 -54
  494. package/src/config/bundled-skills/document/TOOLS.json +0 -106
  495. package/src/daemon/seed-files.ts +0 -18
  496. package/src/memory/graph/__tests__/remember-description.test.ts +0 -55
  497. package/src/runtime/guardian-action-conversation-turn.ts +0 -99
  498. package/src/runtime/routes/interface-routes.ts +0 -43
  499. /package/src/config/bundled-skills/{document → document-editor}/tools/document-create.ts +0 -0
  500. /package/src/config/bundled-skills/{document → document-editor}/tools/document-delete.ts +0 -0
  501. /package/src/config/bundled-skills/{document → document-editor}/tools/document-list.ts +0 -0
  502. /package/src/config/bundled-skills/{document → document-editor}/tools/document-read.ts +0 -0
  503. /package/src/config/bundled-skills/{document → document-editor}/tools/document-update.ts +0 -0
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.2
6
+ version: 0.8.4
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
@@ -3108,6 +3108,7 @@ paths:
3108
3108
  - slack
3109
3109
  - email
3110
3110
  - platform
3111
+ - a2a
3111
3112
  label:
3112
3113
  type: string
3113
3114
  subtitle:
@@ -3614,6 +3615,95 @@ paths:
3614
3615
  - ran
3615
3616
  - jobId
3616
3617
  additionalProperties: false
3618
+ /v1/consolidation/runs:
3619
+ get:
3620
+ operationId: consolidation_runs_get
3621
+ summary: List consolidation runs
3622
+ description:
3623
+ "Return recent memory v2 consolidation conversations as run records. Each consolidation dispatch creates
3624
+ exactly one background conversation tagged with `source = memory_v2_consolidation`; that conversation IS the
3625
+ run. Synthetic fields: `id` mirrors `conversationId` (no separate run row exists), `scheduledFor` and
3626
+ `startedAt` both equal `conversation.createdAt` (no separate schedule timestamp), `finishedAt` is the
3627
+ `createdAt` of the latest assistant message in the conversation (NOT `conversation.lastMessageAt`, which the
3628
+ kickoff user prompt bumps before the agent runs). `status` is `'ok'` when the conversation has at least one
3629
+ assistant message — i.e. positive evidence the agent emitted output — otherwise `'running'`. This is a weaker
3630
+ signal than heartbeat's `'ok'`: without a dedicated runs table we cannot distinguish 'ran cleanly' from 'crashed
3631
+ after emitting at least one assistant message'. `skipReason` and `error` are always null — skipped runs (lock
3632
+ held, disabled, empty buffer) never create a conversation, and run failure detail is not stored on the
3633
+ conversation row. Shape mirrors `heartbeat/runs` so the schedules settings UI can reuse its run-row component."
3634
+ tags:
3635
+ - consolidation
3636
+ responses:
3637
+ "200":
3638
+ description: Successful response
3639
+ content:
3640
+ application/json:
3641
+ schema:
3642
+ type: object
3643
+ properties:
3644
+ runs:
3645
+ type: array
3646
+ items:
3647
+ type: object
3648
+ properties:
3649
+ id:
3650
+ type: string
3651
+ scheduledFor:
3652
+ type: number
3653
+ startedAt:
3654
+ anyOf:
3655
+ - type: number
3656
+ - type: "null"
3657
+ finishedAt:
3658
+ anyOf:
3659
+ - type: number
3660
+ - type: "null"
3661
+ durationMs:
3662
+ anyOf:
3663
+ - type: number
3664
+ - type: "null"
3665
+ status:
3666
+ type: string
3667
+ enum:
3668
+ - ok
3669
+ - running
3670
+ skipReason:
3671
+ anyOf:
3672
+ - type: string
3673
+ - type: "null"
3674
+ error:
3675
+ anyOf:
3676
+ - type: string
3677
+ - type: "null"
3678
+ conversationId:
3679
+ anyOf:
3680
+ - type: string
3681
+ - type: "null"
3682
+ createdAt:
3683
+ type: number
3684
+ required:
3685
+ - id
3686
+ - scheduledFor
3687
+ - startedAt
3688
+ - finishedAt
3689
+ - durationMs
3690
+ - status
3691
+ - skipReason
3692
+ - error
3693
+ - conversationId
3694
+ - createdAt
3695
+ additionalProperties: false
3696
+ description: Consolidation run records
3697
+ required:
3698
+ - runs
3699
+ additionalProperties: false
3700
+ parameters:
3701
+ - name: limit
3702
+ in: query
3703
+ required: false
3704
+ schema:
3705
+ type: integer
3706
+ description: Max runs to return (default 20, max 100)
3617
3707
  /v1/contact-channels/{contactChannelId}:
3618
3708
  patch:
3619
3709
  operationId: contactchannels_by_contactChannelId_patch
@@ -4129,6 +4219,27 @@ paths:
4129
4219
  limit:
4130
4220
  type: number
4131
4221
  additionalProperties: false
4222
+ /v1/content-source:
4223
+ post:
4224
+ operationId: contentsource_post
4225
+ summary: Validate and persist a content source URL
4226
+ tags:
4227
+ - content-source
4228
+ responses:
4229
+ "200":
4230
+ description: Successful response
4231
+ requestBody:
4232
+ required: true
4233
+ content:
4234
+ application/json:
4235
+ schema:
4236
+ type: object
4237
+ properties:
4238
+ url:
4239
+ type: string
4240
+ required:
4241
+ - url
4242
+ additionalProperties: false
4132
4243
  /v1/conversation-starters:
4133
4244
  get:
4134
4245
  operationId: conversationstarters_get
@@ -4280,6 +4391,51 @@ paths:
4280
4391
  required:
4281
4392
  - conversationKey
4282
4393
  additionalProperties: false
4394
+ /v1/conversations/{conversationId}/slack-channel/resolve:
4395
+ post:
4396
+ operationId: conversations_by_conversationId_slackchannel_resolve_post
4397
+ summary: Resolve Slack channel name
4398
+ description: Resolve and persist a friendly Slack channel name for an external conversation binding.
4399
+ tags:
4400
+ - conversations
4401
+ - slack
4402
+ responses:
4403
+ "200":
4404
+ description: Successful response
4405
+ content:
4406
+ application/json:
4407
+ schema:
4408
+ type: object
4409
+ properties:
4410
+ channelId:
4411
+ type: string
4412
+ channelName:
4413
+ type: string
4414
+ cached:
4415
+ type: boolean
4416
+ resolved:
4417
+ type: boolean
4418
+ reason:
4419
+ type: string
4420
+ enum:
4421
+ - auth
4422
+ - dm
4423
+ - no_name
4424
+ - not_found
4425
+ - permission
4426
+ - rate_limit
4427
+ - slack_error
4428
+ required:
4429
+ - channelId
4430
+ - cached
4431
+ - resolved
4432
+ additionalProperties: false
4433
+ parameters:
4434
+ - name: conversationId
4435
+ in: path
4436
+ required: true
4437
+ schema:
4438
+ type: string
4283
4439
  /v1/conversations/{id}:
4284
4440
  delete:
4285
4441
  operationId: conversations_by_id_delete
@@ -4902,6 +5058,57 @@ paths:
4902
5058
  includeArchived:
4903
5059
  type: boolean
4904
5060
  additionalProperties: false
5061
+ /v1/conversations/cli/slack/detach:
5062
+ post:
5063
+ operationId: conversations_cli_slack_detach_post
5064
+ summary: Detach the assistant from a Slack thread (CLI)
5065
+ description: Stops Slack active-thread listening for a Slack thread. The CLI resolves current conversation defaults.
5066
+ tags:
5067
+ - conversations
5068
+ responses:
5069
+ "200":
5070
+ description: Successful response
5071
+ content:
5072
+ application/json:
5073
+ schema:
5074
+ type: object
5075
+ properties:
5076
+ detached:
5077
+ type: boolean
5078
+ channelId:
5079
+ type: string
5080
+ threadTs:
5081
+ type: string
5082
+ source:
5083
+ type: string
5084
+ enum:
5085
+ - explicit
5086
+ - conversation_binding
5087
+ conversationId:
5088
+ type: string
5089
+ required:
5090
+ - detached
5091
+ - channelId
5092
+ - threadTs
5093
+ - source
5094
+ 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
4905
5112
  /v1/conversations/fork:
4906
5113
  post:
4907
5114
  operationId: conversations_fork_post
@@ -6503,6 +6710,268 @@ paths:
6503
6710
  required: true
6504
6711
  schema:
6505
6712
  type: string
6713
+ /v1/documents/{id}/comments:
6714
+ get:
6715
+ operationId: documents_by_id_comments_get
6716
+ summary: List comments for a document
6717
+ description: Return comments for a document, optionally filtered by status.
6718
+ tags:
6719
+ - documents
6720
+ responses:
6721
+ "200":
6722
+ description: Successful response
6723
+ content:
6724
+ application/json:
6725
+ schema:
6726
+ type: object
6727
+ properties:
6728
+ comments:
6729
+ type: array
6730
+ items: {}
6731
+ description: Comment records
6732
+ required:
6733
+ - comments
6734
+ additionalProperties: false
6735
+ parameters:
6736
+ - name: id
6737
+ in: path
6738
+ required: true
6739
+ schema:
6740
+ type: string
6741
+ - name: status
6742
+ in: query
6743
+ required: false
6744
+ schema:
6745
+ type: string
6746
+ enum:
6747
+ - open
6748
+ - resolved
6749
+ - all
6750
+ description: "Filter by comment status (default: all)"
6751
+ post:
6752
+ operationId: documents_by_id_comments_post
6753
+ summary: Create a comment on a document
6754
+ description: Add a new comment to a document.
6755
+ tags:
6756
+ - documents
6757
+ responses:
6758
+ "200":
6759
+ description: Successful response
6760
+ content:
6761
+ application/json:
6762
+ schema:
6763
+ type: object
6764
+ properties:
6765
+ id:
6766
+ type: string
6767
+ surfaceId:
6768
+ type: string
6769
+ conversationId:
6770
+ type: string
6771
+ author:
6772
+ type: string
6773
+ content:
6774
+ type: string
6775
+ status:
6776
+ type: string
6777
+ createdAt:
6778
+ type: number
6779
+ updatedAt:
6780
+ type: number
6781
+ required:
6782
+ - id
6783
+ - surfaceId
6784
+ - conversationId
6785
+ - author
6786
+ - content
6787
+ - status
6788
+ - createdAt
6789
+ - updatedAt
6790
+ additionalProperties: false
6791
+ parameters:
6792
+ - name: id
6793
+ in: path
6794
+ required: true
6795
+ schema:
6796
+ type: string
6797
+ requestBody:
6798
+ required: true
6799
+ content:
6800
+ application/json:
6801
+ schema:
6802
+ type: object
6803
+ properties:
6804
+ content:
6805
+ type: string
6806
+ minLength: 1
6807
+ description: Comment text content
6808
+ author:
6809
+ default: user
6810
+ description: Comment author
6811
+ type: string
6812
+ const: user
6813
+ anchorStart:
6814
+ description: Selection start offset
6815
+ anyOf:
6816
+ - type: number
6817
+ - type: "null"
6818
+ anchorEnd:
6819
+ description: Selection end offset
6820
+ anyOf:
6821
+ - type: number
6822
+ - type: "null"
6823
+ anchorText:
6824
+ description: Anchored text snippet
6825
+ anyOf:
6826
+ - type: string
6827
+ - type: "null"
6828
+ parentCommentId:
6829
+ description: Parent comment ID for replies
6830
+ anyOf:
6831
+ - type: string
6832
+ - type: "null"
6833
+ conversationId:
6834
+ type: string
6835
+ description: Owning conversation ID
6836
+ required:
6837
+ - content
6838
+ - conversationId
6839
+ additionalProperties: false
6840
+ /v1/documents/{id}/comments/{commentId}:
6841
+ delete:
6842
+ operationId: documents_by_id_comments_by_commentId_delete
6843
+ summary: Delete a document comment
6844
+ description: Permanently delete a comment.
6845
+ tags:
6846
+ - documents
6847
+ responses:
6848
+ "200":
6849
+ description: Successful response
6850
+ content:
6851
+ application/json:
6852
+ schema:
6853
+ type: object
6854
+ properties:
6855
+ success:
6856
+ type: boolean
6857
+ const: true
6858
+ required:
6859
+ - success
6860
+ additionalProperties: false
6861
+ parameters:
6862
+ - name: id
6863
+ in: path
6864
+ required: true
6865
+ schema:
6866
+ type: string
6867
+ - name: commentId
6868
+ in: path
6869
+ required: true
6870
+ schema:
6871
+ type: string
6872
+ patch:
6873
+ operationId: documents_by_id_comments_by_commentId_patch
6874
+ summary: Update a document comment
6875
+ description: Update the status or content of a comment.
6876
+ tags:
6877
+ - documents
6878
+ responses:
6879
+ "200":
6880
+ description: Successful response
6881
+ content:
6882
+ application/json:
6883
+ schema:
6884
+ type: object
6885
+ properties:
6886
+ id:
6887
+ type: string
6888
+ surfaceId:
6889
+ type: string
6890
+ content:
6891
+ type: string
6892
+ status:
6893
+ type: string
6894
+ updatedAt:
6895
+ type: number
6896
+ required:
6897
+ - id
6898
+ - surfaceId
6899
+ - content
6900
+ - status
6901
+ - updatedAt
6902
+ additionalProperties: false
6903
+ parameters:
6904
+ - name: id
6905
+ in: path
6906
+ required: true
6907
+ schema:
6908
+ type: string
6909
+ - name: commentId
6910
+ in: path
6911
+ required: true
6912
+ schema:
6913
+ type: string
6914
+ requestBody:
6915
+ required: true
6916
+ content:
6917
+ application/json:
6918
+ schema:
6919
+ type: object
6920
+ properties:
6921
+ status:
6922
+ description: New comment status
6923
+ type: string
6924
+ enum:
6925
+ - open
6926
+ - resolved
6927
+ content:
6928
+ description: Updated comment text
6929
+ type: string
6930
+ minLength: 1
6931
+ resolvedBy:
6932
+ description: Who resolved the comment
6933
+ type: string
6934
+ additionalProperties: false
6935
+ /v1/documents/{id}/conversations:
6936
+ post:
6937
+ operationId: documents_by_id_conversations_post
6938
+ summary: Link a document to a conversation
6939
+ description: Associate a document with a conversation so the assistant sees it as context.
6940
+ tags:
6941
+ - documents
6942
+ responses:
6943
+ "200":
6944
+ description: Successful response
6945
+ content:
6946
+ application/json:
6947
+ schema:
6948
+ type: object
6949
+ properties:
6950
+ success:
6951
+ type: boolean
6952
+ const: true
6953
+ required:
6954
+ - success
6955
+ additionalProperties: false
6956
+ parameters:
6957
+ - name: id
6958
+ in: path
6959
+ required: true
6960
+ schema:
6961
+ type: string
6962
+ requestBody:
6963
+ required: true
6964
+ content:
6965
+ application/json:
6966
+ schema:
6967
+ type: object
6968
+ properties:
6969
+ conversationId:
6970
+ type: string
6971
+ description: Conversation to link
6972
+ required:
6973
+ - conversationId
6974
+ additionalProperties: false
6506
6975
  /v1/documents/{id}/pdf:
6507
6976
  get:
6508
6977
  operationId: documents_by_id_pdf_get
@@ -7268,6 +7737,14 @@ paths:
7268
7737
  type: object
7269
7738
  properties: {}
7270
7739
  additionalProperties: {}
7740
+ ces:
7741
+ type: object
7742
+ properties:
7743
+ connected:
7744
+ type: boolean
7745
+ required:
7746
+ - connected
7747
+ additionalProperties: false
7271
7748
  profiler:
7272
7749
  type: object
7273
7750
  properties:
@@ -7351,6 +7828,7 @@ paths:
7351
7828
  - memory
7352
7829
  - cpu
7353
7830
  - migrations
7831
+ - ces
7354
7832
  additionalProperties: false
7355
7833
  /v1/healthz:
7356
7834
  get:
@@ -7389,6 +7867,14 @@ paths:
7389
7867
  type: object
7390
7868
  properties: {}
7391
7869
  additionalProperties: {}
7870
+ ces:
7871
+ type: object
7872
+ properties:
7873
+ connected:
7874
+ type: boolean
7875
+ required:
7876
+ - connected
7877
+ additionalProperties: false
7392
7878
  profiler:
7393
7879
  type: object
7394
7880
  properties:
@@ -7472,6 +7958,7 @@ paths:
7472
7958
  - memory
7473
7959
  - cpu
7474
7960
  - migrations
7961
+ - ces
7475
7962
  additionalProperties: false
7476
7963
  /v1/heartbeat/checklist:
7477
7964
  get:
@@ -7869,6 +8356,10 @@ paths:
7869
8356
  - background
7870
8357
  - email
7871
8358
  - system
8359
+ noteworthy:
8360
+ type: boolean
8361
+ fromAssistant:
8362
+ type: boolean
7872
8363
  metadata:
7873
8364
  type: object
7874
8365
  propertyNames:
@@ -7880,7 +8371,6 @@ paths:
7880
8371
  - id
7881
8372
  - type
7882
8373
  - priority
7883
- - title
7884
8374
  - summary
7885
8375
  - timestamp
7886
8376
  - status
@@ -8031,6 +8521,10 @@ paths:
8031
8521
  - background
8032
8522
  - email
8033
8523
  - system
8524
+ noteworthy:
8525
+ type: boolean
8526
+ fromAssistant:
8527
+ type: boolean
8034
8528
  metadata:
8035
8529
  type: object
8036
8530
  propertyNames:
@@ -8042,7 +8536,6 @@ paths:
8042
8536
  - id
8043
8537
  - type
8044
8538
  - priority
8045
- - title
8046
8539
  - summary
8047
8540
  - timestamp
8048
8541
  - status
@@ -8710,6 +9203,68 @@ paths:
8710
9203
  responses:
8711
9204
  "200":
8712
9205
  description: Successful response
9206
+ /v1/inference/chatgpt-subscription/auth:
9207
+ post:
9208
+ operationId: inference_chatgptsubscription_auth_post
9209
+ summary: Start ChatGPT subscription OAuth PKCE flow
9210
+ description:
9211
+ Generate a PKCE authorize URL for ChatGPT subscription auth. Returns the URL and state for the client to
9212
+ open in a browser.
9213
+ tags:
9214
+ - inference
9215
+ responses:
9216
+ "200":
9217
+ description: Successful response
9218
+ content:
9219
+ application/json:
9220
+ schema:
9221
+ type: object
9222
+ properties:
9223
+ authorize_url:
9224
+ type: string
9225
+ state:
9226
+ type: string
9227
+ required:
9228
+ - authorize_url
9229
+ - state
9230
+ additionalProperties: false
9231
+ /v1/inference/chatgpt-subscription/auth/exchange:
9232
+ post:
9233
+ operationId: inference_chatgptsubscription_auth_exchange_post
9234
+ summary: Exchange ChatGPT subscription OAuth authorization code
9235
+ description:
9236
+ Accept an authorization code and state from the OAuth redirect, exchange it for tokens, store them in CES,
9237
+ and upsert the provider connection.
9238
+ tags:
9239
+ - inference
9240
+ responses:
9241
+ "200":
9242
+ description: Successful response
9243
+ content:
9244
+ application/json:
9245
+ schema:
9246
+ type: object
9247
+ properties:
9248
+ ok:
9249
+ type: boolean
9250
+ required:
9251
+ - ok
9252
+ additionalProperties: false
9253
+ requestBody:
9254
+ required: true
9255
+ content:
9256
+ application/json:
9257
+ schema:
9258
+ type: object
9259
+ properties:
9260
+ code:
9261
+ type: string
9262
+ state:
9263
+ type: string
9264
+ required:
9265
+ - code
9266
+ - state
9267
+ additionalProperties: false
8713
9268
  /v1/inference/provider-connections:
8714
9269
  get:
8715
9270
  operationId: inference_providerconnections_get
@@ -8742,9 +9297,7 @@ paths:
8742
9297
  - ollama
8743
9298
  - fireworks
8744
9299
  - openrouter
8745
- - zai
8746
- - deepseek
8747
- - minimax
9300
+ - openai-compatible
8748
9301
  auth:
8749
9302
  oneOf:
8750
9303
  - type: object
@@ -8809,6 +9362,27 @@ paths:
8809
9362
  - type: string
8810
9363
  minLength: 1
8811
9364
  - type: "null"
9365
+ baseUrl:
9366
+ anyOf:
9367
+ - type: string
9368
+ format: uri
9369
+ - type: "null"
9370
+ models:
9371
+ anyOf:
9372
+ - type: array
9373
+ items:
9374
+ type: object
9375
+ properties:
9376
+ id:
9377
+ type: string
9378
+ minLength: 1
9379
+ displayName:
9380
+ type: string
9381
+ minLength: 1
9382
+ required:
9383
+ - id
9384
+ additionalProperties: false
9385
+ - type: "null"
8812
9386
  createdAt:
8813
9387
  type: integer
8814
9388
  minimum: -9007199254740991
@@ -8825,6 +9399,8 @@ paths:
8825
9399
  - auth
8826
9400
  - status
8827
9401
  - label
9402
+ - baseUrl
9403
+ - models
8828
9404
  - createdAt
8829
9405
  - updatedAt
8830
9406
  - isManaged
@@ -8838,9 +9414,7 @@ paths:
8838
9414
  required: false
8839
9415
  schema:
8840
9416
  type: string
8841
- description:
8842
- "Filter by provider. One of: anthropic, openai, gemini, ollama, fireworks, openrouter, zai, deepseek,
8843
- minimax"
9417
+ description: "Filter by provider. One of: anthropic, openai, gemini, ollama, fireworks, openrouter, openai-compatible"
8844
9418
  post:
8845
9419
  operationId: inference_providerconnections_post
8846
9420
  summary: Create a provider connection
@@ -8867,9 +9441,7 @@ paths:
8867
9441
  - ollama
8868
9442
  - fireworks
8869
9443
  - openrouter
8870
- - zai
8871
- - deepseek
8872
- - minimax
9444
+ - openai-compatible
8873
9445
  auth:
8874
9446
  oneOf:
8875
9447
  - type: object
@@ -8934,6 +9506,27 @@ paths:
8934
9506
  - type: string
8935
9507
  minLength: 1
8936
9508
  - type: "null"
9509
+ baseUrl:
9510
+ anyOf:
9511
+ - type: string
9512
+ format: uri
9513
+ - type: "null"
9514
+ models:
9515
+ anyOf:
9516
+ - type: array
9517
+ items:
9518
+ type: object
9519
+ properties:
9520
+ id:
9521
+ type: string
9522
+ minLength: 1
9523
+ displayName:
9524
+ type: string
9525
+ minLength: 1
9526
+ required:
9527
+ - id
9528
+ additionalProperties: false
9529
+ - type: "null"
8937
9530
  createdAt:
8938
9531
  type: integer
8939
9532
  minimum: -9007199254740991
@@ -8950,6 +9543,8 @@ paths:
8950
9543
  - auth
8951
9544
  - status
8952
9545
  - label
9546
+ - baseUrl
9547
+ - models
8953
9548
  - createdAt
8954
9549
  - updatedAt
8955
9550
  - isManaged
@@ -8977,9 +9572,7 @@ paths:
8977
9572
  - ollama
8978
9573
  - fireworks
8979
9574
  - openrouter
8980
- - zai
8981
- - deepseek
8982
- - minimax
9575
+ - openai-compatible
8983
9576
  auth:
8984
9577
  oneOf:
8985
9578
  - type: object
@@ -9042,6 +9635,27 @@ paths:
9042
9635
  enum:
9043
9636
  - active
9044
9637
  - disabled
9638
+ base_url:
9639
+ anyOf:
9640
+ - type: string
9641
+ format: uri
9642
+ - type: "null"
9643
+ models:
9644
+ anyOf:
9645
+ - type: array
9646
+ items:
9647
+ type: object
9648
+ properties:
9649
+ id:
9650
+ type: string
9651
+ minLength: 1
9652
+ displayName:
9653
+ type: string
9654
+ minLength: 1
9655
+ required:
9656
+ - id
9657
+ additionalProperties: false
9658
+ - type: "null"
9045
9659
  required:
9046
9660
  - name
9047
9661
  - provider
@@ -9109,9 +9723,7 @@ paths:
9109
9723
  - ollama
9110
9724
  - fireworks
9111
9725
  - openrouter
9112
- - zai
9113
- - deepseek
9114
- - minimax
9726
+ - openai-compatible
9115
9727
  auth:
9116
9728
  oneOf:
9117
9729
  - type: object
@@ -9176,6 +9788,27 @@ paths:
9176
9788
  - type: string
9177
9789
  minLength: 1
9178
9790
  - type: "null"
9791
+ baseUrl:
9792
+ anyOf:
9793
+ - type: string
9794
+ format: uri
9795
+ - type: "null"
9796
+ models:
9797
+ anyOf:
9798
+ - type: array
9799
+ items:
9800
+ type: object
9801
+ properties:
9802
+ id:
9803
+ type: string
9804
+ minLength: 1
9805
+ displayName:
9806
+ type: string
9807
+ minLength: 1
9808
+ required:
9809
+ - id
9810
+ additionalProperties: false
9811
+ - type: "null"
9179
9812
  createdAt:
9180
9813
  type: integer
9181
9814
  minimum: -9007199254740991
@@ -9192,6 +9825,8 @@ paths:
9192
9825
  - auth
9193
9826
  - status
9194
9827
  - label
9828
+ - baseUrl
9829
+ - models
9195
9830
  - createdAt
9196
9831
  - updatedAt
9197
9832
  - isManaged
@@ -9233,9 +9868,7 @@ paths:
9233
9868
  - ollama
9234
9869
  - fireworks
9235
9870
  - openrouter
9236
- - zai
9237
- - deepseek
9238
- - minimax
9871
+ - openai-compatible
9239
9872
  auth:
9240
9873
  oneOf:
9241
9874
  - type: object
@@ -9300,6 +9933,27 @@ paths:
9300
9933
  - type: string
9301
9934
  minLength: 1
9302
9935
  - type: "null"
9936
+ baseUrl:
9937
+ anyOf:
9938
+ - type: string
9939
+ format: uri
9940
+ - type: "null"
9941
+ models:
9942
+ anyOf:
9943
+ - type: array
9944
+ items:
9945
+ type: object
9946
+ properties:
9947
+ id:
9948
+ type: string
9949
+ minLength: 1
9950
+ displayName:
9951
+ type: string
9952
+ minLength: 1
9953
+ required:
9954
+ - id
9955
+ additionalProperties: false
9956
+ - type: "null"
9303
9957
  createdAt:
9304
9958
  type: integer
9305
9959
  minimum: -9007199254740991
@@ -9316,6 +9970,8 @@ paths:
9316
9970
  - auth
9317
9971
  - status
9318
9972
  - label
9973
+ - baseUrl
9974
+ - models
9319
9975
  - createdAt
9320
9976
  - updatedAt
9321
9977
  - isManaged
@@ -9401,6 +10057,27 @@ paths:
9401
10057
  - type: string
9402
10058
  minLength: 1
9403
10059
  - type: "null"
10060
+ base_url:
10061
+ anyOf:
10062
+ - type: string
10063
+ format: uri
10064
+ - type: "null"
10065
+ models:
10066
+ anyOf:
10067
+ - type: array
10068
+ items:
10069
+ type: object
10070
+ properties:
10071
+ id:
10072
+ type: string
10073
+ minLength: 1
10074
+ displayName:
10075
+ type: string
10076
+ minLength: 1
10077
+ required:
10078
+ - id
10079
+ additionalProperties: false
10080
+ - type: "null"
9404
10081
  required:
9405
10082
  - auth
9406
10083
  additionalProperties: false
@@ -9464,6 +10141,76 @@ paths:
9464
10141
  required:
9465
10142
  - message
9466
10143
  additionalProperties: false
10144
+ /v1/integrations/a2a/config:
10145
+ delete:
10146
+ operationId: integrations_a2a_config_delete
10147
+ summary: Disable A2A channel
10148
+ description: Disable the A2A channel.
10149
+ tags:
10150
+ - integrations
10151
+ responses:
10152
+ "200":
10153
+ description: Successful response
10154
+ get:
10155
+ operationId: integrations_a2a_config_get
10156
+ summary: Get A2A config
10157
+ description: Check current A2A channel configuration status.
10158
+ tags:
10159
+ - integrations
10160
+ responses:
10161
+ "200":
10162
+ description: Successful response
10163
+ post:
10164
+ operationId: integrations_a2a_config_post
10165
+ summary: Enable A2A channel
10166
+ description: Enable the A2A channel for inter-assistant communication.
10167
+ tags:
10168
+ - integrations
10169
+ responses:
10170
+ "200":
10171
+ description: Successful response
10172
+ /v1/integrations/a2a/invite:
10173
+ post:
10174
+ operationId: integrations_a2a_invite_post
10175
+ summary: Create A2A invite
10176
+ description: Create a shareable A2A invite token for link-based contact creation.
10177
+ tags:
10178
+ - integrations
10179
+ responses:
10180
+ "200":
10181
+ description: Successful response
10182
+ /v1/integrations/a2a/invite/accept:
10183
+ post:
10184
+ operationId: integrations_a2a_invite_accept_post
10185
+ summary: Accept A2A invite (self-hosted broker)
10186
+ description:
10187
+ Orchestrate cross-daemon invite acceptance for self-hosted deployments. Calls the sender's invite/complete,
10188
+ then creates a local contact via invite/redeem.
10189
+ tags:
10190
+ - integrations
10191
+ responses:
10192
+ "200":
10193
+ description: Successful response
10194
+ /v1/integrations/a2a/invite/complete:
10195
+ post:
10196
+ operationId: integrations_a2a_invite_complete_post
10197
+ summary: Complete A2A invite (sender side)
10198
+ description: Called by the platform to finalize the sender side of a link-based A2A connection.
10199
+ tags:
10200
+ - integrations
10201
+ responses:
10202
+ "200":
10203
+ description: Successful response
10204
+ /v1/integrations/a2a/invite/redeem:
10205
+ post:
10206
+ operationId: integrations_a2a_invite_redeem_post
10207
+ summary: Redeem A2A invite (receiver side)
10208
+ description: Called by the platform to create a trusted contact on the receiver side of a link-based A2A connection.
10209
+ tags:
10210
+ - integrations
10211
+ responses:
10212
+ "200":
10213
+ description: Successful response
9467
10214
  /v1/integrations/ingress/config:
9468
10215
  get:
9469
10216
  operationId: integrations_ingress_config_get
@@ -9718,21 +10465,6 @@ paths:
9718
10465
  responses:
9719
10466
  "200":
9720
10467
  description: Successful response
9721
- /v1/interfaces/{path}:
9722
- get:
9723
- operationId: interfaces_by_path_get
9724
- summary: Serve an interface definition file
9725
- tags:
9726
- - interfaces
9727
- responses:
9728
- "200":
9729
- description: Successful response
9730
- parameters:
9731
- - name: path
9732
- in: path
9733
- required: true
9734
- schema:
9735
- type: string
9736
10468
  /v1/internal/mcp/add:
9737
10469
  post:
9738
10470
  operationId: internal_mcp_add_post
@@ -10322,6 +11054,28 @@ paths:
10322
11054
  required:
10323
11055
  - slug
10324
11056
  additionalProperties: false
11057
+ /v1/memory/v2/ema-scores:
11058
+ post:
11059
+ operationId: memory_v2_emascores_post
11060
+ summary: List every concept page with its injection-frequency EMA score
11061
+ description:
11062
+ Computes the time-decayed injection frequency (3-day half-life) for every entry in the current page index
11063
+ by reading memory_v2_injection_events. Returns entries sorted by score descending then slug ASCII, including
11064
+ zero-score pages so callers can decide whether to filter. Read-only; tier 2 of the v4 router uses the same
11065
+ computation to pick its top-M.
11066
+ tags:
11067
+ - memory
11068
+ responses:
11069
+ "200":
11070
+ description: Successful response
11071
+ requestBody:
11072
+ required: true
11073
+ content:
11074
+ application/json:
11075
+ schema:
11076
+ type: object
11077
+ properties: {}
11078
+ additionalProperties: false
10325
11079
  /v1/memory/v2/list-concept-pages:
10326
11080
  post:
10327
11081
  operationId: memory_v2_listconceptpages_post
@@ -10360,6 +11114,55 @@ paths:
10360
11114
  type: object
10361
11115
  properties: {}
10362
11116
  additionalProperties: false
11117
+ /v1/memory/v2/simulate-router:
11118
+ post:
11119
+ operationId: memory_v2_simulaterouter_post
11120
+ summary: Dry-run the v4 router with config overrides (read-only)
11121
+ 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.
11126
+ tags:
11127
+ - memory
11128
+ responses:
11129
+ "200":
11130
+ description: Successful response
11131
+ requestBody:
11132
+ required: true
11133
+ content:
11134
+ application/json:
11135
+ schema:
11136
+ 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
11165
+ additionalProperties: false
10363
11166
  /v1/memory/v2/validate:
10364
11167
  post:
10365
11168
  operationId: memory_v2_validate_post
@@ -10585,6 +11388,28 @@ paths:
10585
11388
  schema:
10586
11389
  type: string
10587
11390
  description: Conversation ID (required)
11391
+ /v1/messages/queued/{id}/steer:
11392
+ post:
11393
+ operationId: messages_queued_by_id_steer_post
11394
+ summary: Steer to a queued message
11395
+ description: Promote a queued message to the head of the queue and abort the current generation so it is processed next.
11396
+ tags:
11397
+ - messages
11398
+ responses:
11399
+ "200":
11400
+ description: Successful response
11401
+ parameters:
11402
+ - name: id
11403
+ in: path
11404
+ required: true
11405
+ schema:
11406
+ type: string
11407
+ - name: conversationId
11408
+ in: query
11409
+ required: true
11410
+ schema:
11411
+ type: string
11412
+ description: Conversation ID (required)
10588
11413
  /v1/migrations/export:
10589
11414
  post:
10590
11415
  operationId: migrations_export_post
@@ -11085,6 +11910,8 @@ paths:
11085
11910
  type: string
11086
11911
  throwOnError:
11087
11912
  type: boolean
11913
+ originatingConversationId:
11914
+ type: string
11088
11915
  required:
11089
11916
  - sourceEventName
11090
11917
  - sourceChannel
@@ -12256,6 +13083,49 @@ paths:
12256
13083
  responses:
12257
13084
  "200":
12258
13085
  description: Successful response
13086
+ /v1/sanity/connect:
13087
+ post:
13088
+ operationId: sanity_connect_post
13089
+ summary: Finalise Sanity connection and write sidecar file
13090
+ tags:
13091
+ - sanity
13092
+ responses:
13093
+ "200":
13094
+ description: Successful response
13095
+ requestBody:
13096
+ required: true
13097
+ content:
13098
+ application/json:
13099
+ schema:
13100
+ type: object
13101
+ properties:
13102
+ projectId:
13103
+ type: string
13104
+ dataset:
13105
+ type: string
13106
+ required:
13107
+ - projectId
13108
+ - dataset
13109
+ additionalProperties: false
13110
+ /v1/sanity/discover:
13111
+ post:
13112
+ operationId: sanity_discover_post
13113
+ summary: Discover Sanity projects and datasets using the stored API token
13114
+ tags:
13115
+ - sanity
13116
+ responses:
13117
+ "200":
13118
+ description: Successful response
13119
+ requestBody:
13120
+ required: true
13121
+ content:
13122
+ application/json:
13123
+ schema:
13124
+ type: object
13125
+ properties:
13126
+ projectId:
13127
+ type: string
13128
+ additionalProperties: false
12259
13129
  /v1/schedules:
12260
13130
  get:
12261
13131
  operationId: schedules_get
@@ -14512,6 +15382,45 @@ paths:
14512
15382
  - conversationId
14513
15383
  - content
14514
15384
  additionalProperties: false
15385
+ /v1/subagents/reconcile:
15386
+ get:
15387
+ operationId: subagents_reconcile_get
15388
+ summary: Reconcile subagent live status
15389
+ description:
15390
+ Returns the live in-memory status of all subagents known to the daemon for a given parent conversation.
15391
+ Subagents not in the response are orphaned.
15392
+ tags:
15393
+ - subagents
15394
+ responses:
15395
+ "200":
15396
+ description: Successful response
15397
+ content:
15398
+ application/json:
15399
+ schema:
15400
+ type: object
15401
+ properties:
15402
+ subagents:
15403
+ type: object
15404
+ propertyNames:
15405
+ type: string
15406
+ additionalProperties:
15407
+ type: object
15408
+ properties:
15409
+ status:
15410
+ type: string
15411
+ required:
15412
+ - status
15413
+ additionalProperties: false
15414
+ required:
15415
+ - subagents
15416
+ additionalProperties: false
15417
+ parameters:
15418
+ - name: parentConversationId
15419
+ in: query
15420
+ required: false
15421
+ schema:
15422
+ type: string
15423
+ description: Parent conversation ID
14515
15424
  /v1/suggestion:
14516
15425
  get:
14517
15426
  operationId: suggestion_get