@vellumai/assistant 0.11.2 → 0.11.3-dev.202608080427.92f668a

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 (826) hide show
  1. package/ARCHITECTURE.md +69 -9
  2. package/docs/flux-turn-detection-spike.md +243 -0
  3. package/docs/stt-provider-onboarding.md +3 -1
  4. package/docs/trusted-contact-access.md +9 -5
  5. package/docs/vellum-doctor.md +195 -0
  6. package/node_modules/@vellumai/ces-client/node_modules/@vellumai/service-contracts/src/channels.ts +50 -0
  7. package/node_modules/@vellumai/ces-client/node_modules/@vellumai/service-contracts/src/ingress.ts +10 -0
  8. package/node_modules/@vellumai/ces-client/node_modules/@vellumai/service-contracts/src/remote-web-pairing.ts +6 -0
  9. package/node_modules/@vellumai/ces-client/src/index.ts +1 -0
  10. package/node_modules/@vellumai/ces-client/src/rpc-client.ts +19 -2
  11. package/node_modules/@vellumai/environments/package.json +2 -1
  12. package/node_modules/@vellumai/environments/src/__tests__/cloud-assistant-hub-url.test.ts +38 -0
  13. package/node_modules/@vellumai/environments/src/__tests__/install-layout.test.ts +98 -0
  14. package/node_modules/@vellumai/environments/src/__tests__/package-boundary.test.ts +5 -5
  15. package/node_modules/@vellumai/environments/src/index.ts +17 -6
  16. package/node_modules/@vellumai/environments/src/install-layout.ts +49 -0
  17. package/node_modules/@vellumai/environments/src/seeds.ts +29 -0
  18. package/node_modules/@vellumai/gateway-client/node_modules/@vellumai/service-contracts/src/channels.ts +50 -0
  19. package/node_modules/@vellumai/gateway-client/node_modules/@vellumai/service-contracts/src/ingress.ts +10 -0
  20. package/node_modules/@vellumai/gateway-client/node_modules/@vellumai/service-contracts/src/remote-web-pairing.ts +6 -0
  21. package/node_modules/@vellumai/gateway-client/src/index.ts +4 -0
  22. package/node_modules/@vellumai/gateway-client/src/verification-session-contract.ts +91 -6
  23. package/node_modules/@vellumai/ipc-server-utils/src/endpoint.test.ts +36 -0
  24. package/node_modules/@vellumai/ipc-server-utils/src/endpoint.ts +142 -0
  25. package/node_modules/@vellumai/ipc-server-utils/src/index.ts +2 -0
  26. package/node_modules/@vellumai/ipc-server-utils/src/listen-options.ts +3 -0
  27. package/node_modules/@vellumai/ipc-server-utils/src/socket-watchdog.test.ts +15 -1
  28. package/node_modules/@vellumai/ipc-server-utils/src/socket-watchdog.ts +17 -2
  29. package/node_modules/@vellumai/service-contracts/src/channels.ts +50 -0
  30. package/node_modules/@vellumai/service-contracts/src/ingress.ts +10 -0
  31. package/node_modules/@vellumai/service-contracts/src/remote-web-pairing.ts +6 -0
  32. package/node_modules/@vellumai/slack-text/src/index.ts +16 -2
  33. package/openapi.yaml +619 -47
  34. package/package.json +1 -1
  35. package/scripts/voice-ttft-spike.ts +3 -3
  36. package/src/__tests__/agent-image-optimize.test.ts +4 -4
  37. package/src/__tests__/agent-loop-mutable-latest-user-message.test.ts +113 -66
  38. package/src/__tests__/agent-loop-override-profile.test.ts +38 -48
  39. package/src/__tests__/agent-loop-subagent-billing-headers.test.ts +166 -0
  40. package/src/__tests__/agent-wake-disk-pressure-callsite.test.ts +1 -0
  41. package/src/__tests__/agent-wake-override-profile.test.ts +1 -0
  42. package/src/__tests__/answered-question-persistence.test.ts +240 -0
  43. package/src/__tests__/anthropic-provider.test.ts +165 -30
  44. package/src/__tests__/app-control-flow.test.ts +9 -8
  45. package/src/__tests__/assistant-event-hub.test.ts +48 -0
  46. package/src/__tests__/attachments-store-heic-normalize.test.ts +16 -12
  47. package/src/__tests__/attachments-store.test.ts +130 -68
  48. package/src/__tests__/attachments.test.ts +36 -36
  49. package/src/__tests__/background-workers-disk-pressure.test.ts +1 -1
  50. package/src/__tests__/call-controller.test.ts +120 -0
  51. package/src/__tests__/call-start-guardian-guard.test.ts +18 -4
  52. package/src/__tests__/canned-reply-release.test.ts +86 -0
  53. package/src/__tests__/channel-availability-routes.test.ts +14 -1
  54. package/src/__tests__/channel-guardian.test.ts +59 -29
  55. package/src/__tests__/channel-readiness-telegram-remote.test.ts +154 -0
  56. package/src/__tests__/channel-setup-panel-ack.test.ts +6 -5
  57. package/src/__tests__/client-os-metadata-persistence.test.ts +103 -4
  58. package/src/__tests__/compactor-image-manifest-trust.test.ts +1 -1
  59. package/src/__tests__/config-loader-backfill.test.ts +19 -0
  60. package/src/__tests__/config-schema.test.ts +150 -7
  61. package/src/__tests__/consult-deadline.test.ts +65 -0
  62. package/src/__tests__/conversation-agent-loop.test.ts +438 -2
  63. package/src/__tests__/conversation-disk-view-integration.test.ts +5 -1
  64. package/src/__tests__/conversation-disk-view.test.ts +4 -4
  65. package/src/__tests__/conversation-error.test.ts +22 -3
  66. package/src/__tests__/conversation-fork-crud.test.ts +5 -1
  67. package/src/__tests__/conversation-fork-referential.test.ts +352 -0
  68. package/src/__tests__/conversation-fork-retrospective.test.ts +5 -1
  69. package/src/__tests__/conversation-group-tools.test.ts +32 -2
  70. package/src/__tests__/conversation-inference-profile-route.test.ts +27 -1
  71. package/src/__tests__/conversation-initial-prompt.test.ts +51 -22
  72. package/src/__tests__/conversation-key-store-bootstrap-cleanup.test.ts +119 -0
  73. package/src/__tests__/conversation-key-store-origin.test.ts +105 -0
  74. package/src/__tests__/conversation-list-recency-ordering.test.ts +104 -0
  75. package/src/__tests__/conversation-origin-at-creation.test.ts +153 -0
  76. package/src/__tests__/conversation-origin-channel-filter.test.ts +95 -0
  77. package/src/__tests__/conversation-placement-promotion.test.ts +172 -0
  78. package/src/__tests__/conversation-process-app-control-preactivation.test.ts +123 -0
  79. package/src/__tests__/conversation-queue.test.ts +433 -1
  80. package/src/__tests__/conversation-retry-route.test.ts +3 -1
  81. package/src/__tests__/conversation-routes-hidden-queue.test.ts +64 -1
  82. package/src/__tests__/conversation-store-ephemeral.test.ts +4 -0
  83. package/src/__tests__/conversation-store.test.ts +26 -10
  84. package/src/__tests__/conversation-summarize-route.test.ts +1 -1
  85. package/src/__tests__/conversation-surfaces-action-delivery.test.ts +15 -6
  86. package/src/__tests__/conversation-surfaces-activation-emit.test.ts +6 -5
  87. package/src/__tests__/conversation-surfaces-app-control.test.ts +12 -11
  88. package/src/__tests__/conversation-surfaces-app-open.test.ts +11 -5
  89. package/src/__tests__/conversation-surfaces-data-persist.test.ts +5 -4
  90. package/src/__tests__/conversation-surfaces-history-restored-completion.test.ts +967 -0
  91. package/src/__tests__/conversation-surfaces-persisted-info.test.ts +312 -0
  92. package/src/__tests__/conversation-surfaces-queued-emit.test.ts +6 -5
  93. package/src/__tests__/conversation-surfaces-standalone-payloads.test.ts +12 -8
  94. package/src/__tests__/conversation-surfaces-standalone.test.ts +21 -11
  95. package/src/__tests__/conversation-surfaces-state-update.test.ts +7 -11
  96. package/src/__tests__/conversation-surfaces-table-action.test.ts +7 -6
  97. package/src/__tests__/conversation-surfaces-task-progress.test.ts +11 -6
  98. package/src/__tests__/conversation-tool-setup-app-refresh.test.ts +9 -6
  99. package/src/__tests__/conversation-tool-setup-attribution.test.ts +70 -7
  100. package/src/__tests__/conversation-wait-for-idle.test.ts +6 -11
  101. package/src/__tests__/credential-prompt-route.test.ts +54 -7
  102. package/src/__tests__/credential-security-invariants.test.ts +1 -0
  103. package/src/__tests__/cu-unified-flow.test.ts +89 -28
  104. package/src/__tests__/custom-group-listing-visibility.test.ts +1 -1
  105. package/src/__tests__/db-schedule-syntax-migration.test.ts +4 -1
  106. package/src/__tests__/discord-access-request-privacy.test.ts +366 -0
  107. package/src/__tests__/discord-requester-notice-privacy.test.ts +87 -0
  108. package/src/__tests__/disk-pressure-guard.test.ts +55 -55
  109. package/src/__tests__/disk-pressure-routes.test.ts +10 -10
  110. package/src/__tests__/disk-pressure-tools.test.ts +2 -2
  111. package/src/__tests__/disk-usage.test.ts +35 -20
  112. package/src/__tests__/document-sync-tags.test.ts +379 -0
  113. package/src/__tests__/document-update-default-surface.test.ts +28 -0
  114. package/src/__tests__/dynamic-skill-background-guard.test.ts +2 -2
  115. package/src/__tests__/emit-signal-routing-intent.test.ts +3 -4
  116. package/src/__tests__/ensure-conversation-exists.test.ts +8 -5
  117. package/src/__tests__/events-dev-bypass-actor.test.ts +294 -1
  118. package/src/__tests__/evict-conversations-for-reload.test.ts +90 -0
  119. package/src/__tests__/file-list-tool.test.ts +12 -10
  120. package/src/__tests__/file-ops-service.test.ts +151 -44
  121. package/src/__tests__/file-read-container-boundary.test.ts +137 -0
  122. package/src/__tests__/file-read-tool.test.ts +21 -9
  123. package/src/__tests__/file-url-path-guard.test.ts +83 -0
  124. package/src/__tests__/filesystem-tools.test.ts +82 -66
  125. package/src/__tests__/guardian-outbound-http.test.ts +8 -8
  126. package/src/__tests__/helpers/gateway-verification-sessions-stub.ts +14 -1
  127. package/src/__tests__/helpers/hub-clients.ts +42 -0
  128. package/src/__tests__/helpers/mock-conversation.ts +46 -0
  129. package/src/__tests__/helpers/verification-sessions-ipc-sim.ts +61 -57
  130. package/src/__tests__/history-repair.test.ts +112 -12
  131. package/src/__tests__/host-bash-proxy.test.ts +10 -5
  132. package/src/__tests__/host-bash-routes.test.ts +67 -0
  133. package/src/__tests__/host-browser-proxy.test.ts +2 -2
  134. package/src/__tests__/host-cu-proxy.test.ts +3 -7
  135. package/src/__tests__/host-file-proxy.test.ts +3 -7
  136. package/src/__tests__/host-file-read-tool.test.ts +5 -1
  137. package/src/__tests__/host-transfer-proxy-targeted.test.ts +6 -4
  138. package/src/__tests__/http-conversation-lineage.test.ts +2 -5
  139. package/src/__tests__/http-user-message-parity.test.ts +44 -0
  140. package/src/__tests__/identity-routes.test.ts +13 -13
  141. package/src/__tests__/image-conversion.test.ts +29 -26
  142. package/src/__tests__/image-source-path-reinject.test.ts +2 -2
  143. package/src/__tests__/inference-profile-session-handler.test.ts +95 -0
  144. package/src/__tests__/inference-profile-session-ipc.test.ts +25 -0
  145. package/src/__tests__/introduction-card-resolver.test.ts +6 -1
  146. package/src/__tests__/list-messages-attachments.test.ts +56 -32
  147. package/src/__tests__/list-messages-background-tool-completion.test.ts +4 -4
  148. package/src/__tests__/list-messages-client-message-id.test.ts +2 -2
  149. package/src/__tests__/list-messages-hidden-metadata.test.ts +16 -16
  150. package/src/__tests__/list-messages-page-latest.test.ts +61 -61
  151. package/src/__tests__/list-messages-provider-error.test.ts +6 -6
  152. package/src/__tests__/list-messages-queued.test.ts +49 -6
  153. package/src/__tests__/list-messages-system-card.test.ts +4 -4
  154. package/src/__tests__/list-messages-tool-merge.test.ts +9 -9
  155. package/src/__tests__/llm-resolver-override-or-default.test.ts +141 -0
  156. package/src/__tests__/llm-usage-store.test.ts +55 -0
  157. package/src/__tests__/manual-token-reconciliation.test.ts +45 -0
  158. package/src/__tests__/mcp-list-plugin-servers.test.ts +250 -0
  159. package/src/__tests__/mcp-tool-annotations-risk.test.ts +133 -0
  160. package/src/__tests__/media-stream-output.test.ts +175 -0
  161. package/src/__tests__/media-stream-server-integration.test.ts +36 -0
  162. package/src/__tests__/media-stream-stt-session.test.ts +67 -0
  163. package/src/__tests__/migration-export-http.test.ts +1 -1
  164. package/src/__tests__/migration-import-commit-http.test.ts +1 -1
  165. package/src/__tests__/migration-import-preflight-http.test.ts +1 -1
  166. package/src/__tests__/migration-validate-http.test.ts +1 -1
  167. package/src/__tests__/mtime-cache.test.ts +65 -3
  168. package/src/__tests__/notification-platform-adapter.test.ts +104 -0
  169. package/src/__tests__/notification-schedule-notify-dedup.test.ts +1 -1
  170. package/src/__tests__/oauth-provider-profiles.test.ts +4 -2
  171. package/src/__tests__/oauth-provider-seed-logos.test.ts +65 -0
  172. package/src/__tests__/oauth-provider-serializer.test.ts +17 -0
  173. package/src/__tests__/oauth-providers-routes.test.ts +1 -0
  174. package/src/__tests__/openai-responses-prompt-cache.test.ts +5 -2
  175. package/src/__tests__/path-policy.test.ts +164 -1
  176. package/src/__tests__/persist-media-references.test.ts +2 -2
  177. package/src/__tests__/persist-unsendable-image-downscale.test.ts +5 -5
  178. package/src/__tests__/persist-unsendable-image.test.ts +23 -23
  179. package/src/__tests__/persona-resolver.test.ts +154 -0
  180. package/src/__tests__/plugin-api-webhook-url.test.ts +170 -0
  181. package/src/__tests__/plugin-import-boundary-guard.test.ts +6 -0
  182. package/src/__tests__/processing-flag-persist-failure.test.ts +15 -10
  183. package/src/__tests__/profile-availability-incomplete.test.ts +113 -0
  184. package/src/__tests__/profiler-routes.test.ts +13 -13
  185. package/src/__tests__/prompt-cache-cross-turn-stability.test.ts +593 -0
  186. package/src/__tests__/proxy-approval-callback.test.ts +3 -3
  187. package/src/__tests__/queued-message-cancel-and-steer.test.ts +189 -0
  188. package/src/__tests__/queued-message-steer-actor-scoping.test.ts +164 -0
  189. package/src/__tests__/resolve-trust-class.test.ts +20 -0
  190. package/src/__tests__/run-conversation-turn-persistence.test.ts +1 -1
  191. package/src/__tests__/run-due-schedules.test.ts +174 -0
  192. package/src/__tests__/runtime-attachment-metadata.test.ts +15 -7
  193. package/src/__tests__/scaffold-managed-skill-tool.test.ts +166 -0
  194. package/src/__tests__/schedule-routes.test.ts +730 -8
  195. package/src/__tests__/schedule-store.test.ts +540 -0
  196. package/src/__tests__/schedule-tools.test.ts +103 -0
  197. package/src/__tests__/scheduler-wake.test.ts +5 -0
  198. package/src/__tests__/secret-routes-platform-proxy.test.ts +29 -1
  199. package/src/__tests__/secure-keys.test.ts +91 -0
  200. package/src/__tests__/server-history-render.test.ts +97 -7
  201. package/src/__tests__/size-guard.test.ts +8 -8
  202. package/src/__tests__/skill-docs-sync-guard.test.ts +3 -2
  203. package/src/__tests__/skill-tool-factory.test.ts +247 -0
  204. package/src/__tests__/skills-install-staging.test.ts +15 -6
  205. package/src/__tests__/skills.test.ts +32 -0
  206. package/src/__tests__/slack-edit-ordering-characterization.test.ts +103 -0
  207. package/src/__tests__/slack-inbound-verification.test.ts +4 -1
  208. package/src/__tests__/slack-mention-binding-invariance.test.ts +103 -0
  209. package/src/__tests__/slack-mention-provider-leak-audit.test.ts +135 -0
  210. package/src/__tests__/starter-task-flow.test.ts +5 -4
  211. package/src/__tests__/steer-on-enqueue-question.test.ts +3 -2
  212. package/src/__tests__/stt-language-catalog-parity.test.ts +38 -0
  213. package/src/__tests__/subagent-allowlist-validation.test.ts +26 -4
  214. package/src/__tests__/subagent-cron-run-attribution.test.ts +301 -0
  215. package/src/__tests__/subagent-disposal.test.ts +10 -0
  216. package/src/__tests__/subagent-fork-notifications.test.ts +10 -0
  217. package/src/__tests__/subagent-fork-prompt-role.test.ts +85 -11
  218. package/src/__tests__/subagent-fork-spawn.test.ts +15 -7
  219. package/src/__tests__/subagent-manager-notify.test.ts +148 -0
  220. package/src/__tests__/subagent-notify-parent.test.ts +1 -1
  221. package/src/__tests__/subagent-persistence.test.ts +141 -0
  222. package/src/__tests__/subagent-role-registry.test.ts +172 -63
  223. package/src/__tests__/subagent-role-resolution.test.ts +88 -0
  224. package/src/__tests__/subagent-spawn-and-await.test.ts +48 -0
  225. package/src/__tests__/subagent-spawn-tool-fork.test.ts +111 -10
  226. package/src/__tests__/subagent-terminal-message.test.ts +88 -1
  227. package/src/__tests__/subagent-tool-gate-mode.test.ts +225 -10
  228. package/src/__tests__/subagent-tools.test.ts +1901 -108
  229. package/src/__tests__/surface-completion-compaction-boundary.test.ts +124 -0
  230. package/src/__tests__/surface-completion-in-flight-snapshot.test.ts +298 -0
  231. package/src/__tests__/system-prompt.test.ts +82 -7
  232. package/src/__tests__/tool-grant-request-escalation.test.ts +40 -1
  233. package/src/__tests__/tool-result-spool.test.ts +74 -18
  234. package/src/__tests__/tool-side-effects-documents.test.ts +174 -0
  235. package/src/__tests__/tool-side-effects-hook-failures.test.ts +129 -0
  236. package/src/__tests__/tools-audio-read.test.ts +10 -10
  237. package/src/__tests__/tools-get-route.test.ts +85 -12
  238. package/src/__tests__/tools-list-cli.test.ts +171 -0
  239. package/src/__tests__/top-level-renderer.test.ts +54 -1
  240. package/src/__tests__/trusted-contact-inline-approval-integration.test.ts +68 -1
  241. package/src/__tests__/trusted-contact-multichannel.test.ts +4 -1
  242. package/src/__tests__/turn-tail-chain.test.ts +135 -0
  243. package/src/__tests__/ui-choice-copy-surfaces.test.ts +6 -4
  244. package/src/__tests__/ui-visual-surface.test.ts +5 -4
  245. package/src/__tests__/ui-work-result-surface.test.ts +5 -4
  246. package/src/__tests__/unified-turn-context-visible-app.test.ts +7 -8
  247. package/src/__tests__/usage-routes.test.ts +62 -0
  248. package/src/__tests__/verification-outbound-delivery.test.ts +176 -0
  249. package/src/__tests__/visible-app-context.test.ts +20 -4
  250. package/src/__tests__/web-search-history.test.ts +96 -0
  251. package/src/__tests__/workspace-migration-139-clear-renamed-cost-profile-label.test.ts +6 -6
  252. package/src/__tests__/workspace-migration-140-repair-seed-pinned-memory-v3-live.test.ts +330 -0
  253. package/src/__tests__/workspace-migration-142-consolidate-voice-front-door.test.ts +150 -0
  254. package/src/acp/failure-error.ts +3 -5
  255. package/src/agent/attachments.ts +26 -24
  256. package/src/agent/history-repair/history-repair.ts +27 -26
  257. package/src/agent/image-optimize.ts +6 -6
  258. package/src/agent/loop.ts +40 -22
  259. package/src/agent/message-types.ts +3 -3
  260. package/src/api/constants/document-tools.ts +55 -0
  261. package/src/api/events/question-answered.ts +53 -0
  262. package/src/api/events/tool-result.ts +7 -0
  263. package/src/api/index.ts +13 -0
  264. package/src/api/responses/conversation-message.ts +11 -0
  265. package/src/api/surfaces-oauth-connect.test.ts +96 -0
  266. package/src/api/surfaces.ts +36 -8
  267. package/src/approvals/guardian-channel-delivery.ts +83 -0
  268. package/src/approvals/guardian-expiry-notifier.ts +13 -11
  269. package/src/approvals/guardian-request-resolvers.ts +222 -135
  270. package/src/calls/__tests__/tts-text-sanitizer.test.ts +13 -0
  271. package/src/calls/__tests__/voice-session-bridge.test.ts +131 -12
  272. package/src/calls/__tests__/voice-triage-escalate.test.ts +106 -0
  273. package/src/calls/call-controller.ts +30 -2
  274. package/src/calls/call-speech-output.ts +12 -4
  275. package/src/calls/call-transport.ts +18 -1
  276. package/src/calls/media-stream-output.ts +53 -5
  277. package/src/calls/media-stream-server.ts +21 -1
  278. package/src/calls/media-stream-stt-session.ts +49 -0
  279. package/src/calls/telephony-synthesis-language.ts +84 -0
  280. package/src/calls/tts-text-sanitizer.ts +12 -5
  281. package/src/calls/voice-session-bridge.ts +86 -17
  282. package/src/calls/voice-triage-escalate.ts +54 -7
  283. package/src/channels/__tests__/gateway-verification-sessions.test.ts +3 -3
  284. package/src/channels/__tests__/plugin-channel-declarations.test.ts +161 -0
  285. package/src/channels/config.ts +20 -2
  286. package/src/channels/gateway-verification-sessions.ts +7 -2
  287. package/src/channels/plugin-channel-declarations.ts +108 -0
  288. package/src/channels/types.ts +37 -1
  289. package/src/cli/AGENTS.md +5 -2
  290. package/src/cli/commands/__tests__/cache.test.ts +7 -4
  291. package/src/cli/commands/__tests__/cli-test-harness.ts +82 -0
  292. package/src/cli/commands/__tests__/conversations-wake.test.ts +51 -6
  293. package/src/cli/commands/__tests__/inference-models.test.ts +14 -0
  294. package/src/cli/commands/__tests__/inference-profiles.test.ts +44 -1
  295. package/src/cli/commands/__tests__/inference-providers.test.ts +7 -0
  296. package/src/cli/commands/__tests__/plugins.test.ts +692 -0
  297. package/src/cli/commands/__tests__/schedules.test.ts +136 -37
  298. package/src/cli/commands/conversations.ts +7 -3
  299. package/src/cli/commands/credentials.help.ts +7 -0
  300. package/src/cli/commands/inference-profiles.ts +9 -3
  301. package/src/cli/commands/inference.help.ts +16 -2
  302. package/src/cli/commands/mcp.help.ts +17 -6
  303. package/src/cli/commands/mcp.ts +9 -0
  304. package/src/cli/commands/memory/memory-retrospective.ts +18 -0
  305. package/src/cli/commands/notifications.ts +3 -6
  306. package/src/cli/commands/oauth/connect-surface-guidance.test.ts +16 -0
  307. package/src/cli/commands/oauth/connect-surface-guidance.ts +25 -7
  308. package/src/cli/commands/oauth/connect.test.ts +26 -1
  309. package/src/cli/commands/oauth/connect.ts +4 -1
  310. package/src/cli/commands/oauth/index.help.ts +3 -1
  311. package/src/cli/commands/oauth/providers.ts +3 -0
  312. package/src/cli/commands/plugins.help.ts +25 -2
  313. package/src/cli/commands/plugins.ts +289 -10
  314. package/src/cli/commands/schedules.help.ts +14 -12
  315. package/src/cli/commands/schedules.ts +19 -5
  316. package/src/cli/commands/stt.help.ts +27 -2
  317. package/src/cli/commands/tools.help.ts +4 -2
  318. package/src/cli/commands/tools.ts +38 -0
  319. package/src/cli/lib/__tests__/inspect-plugin.test.ts +1 -0
  320. package/src/cli/lib/__tests__/install-from-github.test.ts +79 -0
  321. package/src/cli/lib/__tests__/install-from-platform.test.ts +47 -1
  322. package/src/cli/lib/__tests__/plugin-surfaces.test.ts +86 -7
  323. package/src/cli/lib/__tests__/upgrade-plugin.test.ts +161 -0
  324. package/src/cli/lib/install-from-github.ts +61 -0
  325. package/src/cli/lib/install-from-platform.ts +13 -2
  326. package/src/cli/lib/plugin-surfaces.ts +124 -4
  327. package/src/cli/lib/upgrade-plugin.ts +60 -0
  328. package/src/cli.ts +1 -1
  329. package/src/config/__tests__/default-profile-catalog.test.ts +11 -1
  330. package/src/config/__tests__/deployment-context-defaults.test.ts +73 -0
  331. package/src/config/__tests__/memory-retrospective-schema.test.ts +40 -0
  332. package/src/config/__tests__/plugin-updates-schema.test.ts +43 -0
  333. package/src/config/__tests__/profile-tool-support.test.ts +131 -0
  334. package/src/config/bundled-skills/AGENTS.md +1 -1
  335. package/src/config/bundled-skills/acp/SKILL.md +6 -7
  336. package/src/config/bundled-skills/app-builder/SKILL.md +1 -1
  337. package/src/config/bundled-skills/app-builder/references/RESPONSIVE.md +3 -3
  338. package/src/config/bundled-skills/media-processing/services/preprocess.ts +14 -4
  339. package/src/config/bundled-skills/phone-calls/references/CONFIG.md +15 -15
  340. package/src/config/bundled-skills/schedule/SKILL.md +5 -1
  341. package/src/config/bundled-skills/schedule/TOOLS.json +2 -2
  342. package/src/config/bundled-skills/settings/TOOLS.json +3 -3
  343. package/src/config/bundled-skills/settings/tools/voice-config-update.ts +1 -0
  344. package/src/config/bundled-skills/subagent/SKILL.md +53 -22
  345. package/src/config/bundled-skills/subagent/TOOLS.json +14 -13
  346. package/src/config/bundled-skills/transcribe/tools/transcribe-media.test.ts +22 -1
  347. package/src/config/bundled-skills/transcribe/tools/transcribe-media.ts +9 -2
  348. package/src/config/bundled-skills/visualize/SKILL.md +1 -1
  349. package/src/config/call-site-defaults.ts +4 -5
  350. package/src/config/default-profile-catalog.ts +9 -5
  351. package/src/config/feature-flag-registry.json +25 -17
  352. package/src/config/llm-resolver.ts +45 -15
  353. package/src/config/loader.ts +75 -1
  354. package/src/config/profile-tool-support.ts +110 -0
  355. package/src/config/sanitize-for-transfer.ts +11 -0
  356. package/src/config/schema.ts +4 -0
  357. package/src/config/schemas/__tests__/live-voice.test.ts +142 -4
  358. package/src/config/schemas/__tests__/stt.test.ts +20 -5
  359. package/src/config/schemas/call-site-catalog.ts +4 -4
  360. package/src/config/schemas/calls.ts +0 -4
  361. package/src/config/schemas/channels.ts +13 -0
  362. package/src/config/schemas/live-voice.ts +82 -23
  363. package/src/config/schemas/llm.ts +1 -1
  364. package/src/config/schemas/memory-retrospective.ts +25 -0
  365. package/src/config/schemas/plugin-updates.ts +59 -0
  366. package/src/config/schemas/services.ts +8 -4
  367. package/src/config/schemas/stt.ts +18 -5
  368. package/src/config/schemas/timeouts.ts +1 -1
  369. package/src/config/schemas/tts.ts +63 -0
  370. package/src/contacts/__tests__/guardian-delivery-reader.test.ts +16 -0
  371. package/src/contacts/guardian-delivery-reader.ts +29 -2
  372. package/src/context/compactor.ts +4 -4
  373. package/src/context/post-turn-tool-result-truncation.ts +32 -16
  374. package/src/context/strip-injections.ts +42 -0
  375. package/src/context/tool-result-spool.ts +32 -18
  376. package/src/credential-execution/ces-runtime.ts +3 -0
  377. package/src/credential-execution/client.ts +22 -1
  378. package/src/credential-execution/process-manager.test.ts +99 -0
  379. package/src/credential-execution/process-manager.ts +62 -16
  380. package/src/daemon/__tests__/abort-null-controller.test.ts +141 -5
  381. package/src/daemon/__tests__/conversation-surfaces-launch.test.ts +8 -12
  382. package/src/daemon/__tests__/install-assistant-command.test.ts +234 -0
  383. package/src/daemon/__tests__/turn-tail-assistant-reply-notify.test.ts +2 -4
  384. package/src/daemon/__tests__/turn-tail-deleted-conversation.test.ts +20 -29
  385. package/src/daemon/channel-ui-capability.ts +4 -4
  386. package/src/daemon/conversation-agent-loop-handlers.ts +117 -61
  387. package/src/daemon/conversation-agent-loop.ts +318 -148
  388. package/src/daemon/conversation-attachments.ts +1 -1
  389. package/src/daemon/conversation-error.ts +8 -1
  390. package/src/daemon/conversation-initial-prompt.ts +16 -38
  391. package/src/daemon/conversation-lifecycle.ts +154 -32
  392. package/src/daemon/conversation-messaging.ts +106 -43
  393. package/src/daemon/conversation-process.ts +131 -33
  394. package/src/daemon/conversation-queue-manager.ts +10 -0
  395. package/src/daemon/conversation-runtime-assembly.ts +9 -4
  396. package/src/daemon/conversation-store.ts +52 -3
  397. package/src/daemon/conversation-surface-state.ts +9 -0
  398. package/src/daemon/conversation-surfaces.ts +403 -210
  399. package/src/daemon/conversation-tool-setup.ts +56 -7
  400. package/src/daemon/conversation-turn-finalize.ts +134 -89
  401. package/src/daemon/conversation.ts +111 -27
  402. package/src/daemon/disk-pressure-guard-lifecycle.ts +2 -2
  403. package/src/daemon/disk-pressure-guard.ts +3 -3
  404. package/src/daemon/doordash-steps.ts +5 -5
  405. package/src/daemon/external-plugins-bootstrap.ts +7 -1
  406. package/src/daemon/handlers/config-channels.ts +48 -5
  407. package/src/daemon/handlers/conversation-history.ts +1 -1
  408. package/src/daemon/handlers/conversations.ts +62 -17
  409. package/src/daemon/handlers/shared.ts +12 -0
  410. package/src/daemon/handlers/skills.ts +11 -1
  411. package/src/daemon/identity-helpers.ts +38 -10
  412. package/src/daemon/install-assistant-command.ts +322 -0
  413. package/src/daemon/lifecycle.ts +14 -3
  414. package/src/daemon/message-types/conversations.ts +6 -7
  415. package/src/daemon/message-types/sync.ts +1 -0
  416. package/src/daemon/persist-media-references.ts +23 -14
  417. package/src/daemon/process-message.ts +6 -6
  418. package/src/daemon/tool-setup-types.ts +19 -122
  419. package/src/daemon/tool-side-effects.ts +17 -94
  420. package/src/daemon/trust-context-types.ts +39 -0
  421. package/src/daemon/trust-context.ts +14 -6
  422. package/src/daemon/turn-tail-chain.ts +73 -0
  423. package/src/daemon/web-search-history.ts +47 -33
  424. package/src/heartbeat/heartbeat-service.ts +6 -6
  425. package/src/inbound/__tests__/oauth-callback-url.test.ts +83 -0
  426. package/src/inbound/oauth-callback-url.ts +61 -0
  427. package/src/ipc/__tests__/socket-path.test.ts +21 -0
  428. package/src/ipc/assistant-server.ts +17 -10
  429. package/src/ipc/cli-client.ts +10 -1
  430. package/src/ipc/routes/__tests__/documents-sync-ipc-routes.test.ts +56 -0
  431. package/src/ipc/routes/documents-sync-ipc-routes.ts +42 -0
  432. package/src/ipc/socket-cleanup.ts +9 -7
  433. package/src/ipc/socket-path.ts +4 -96
  434. package/src/live-voice/__tests__/live-voice-agent-turn.test.ts +1 -104
  435. package/src/live-voice/__tests__/live-voice-archive.test.ts +16 -16
  436. package/src/live-voice/__tests__/live-voice-attach-image.test.ts +209 -0
  437. package/src/live-voice/__tests__/live-voice-connection.test.ts +20 -0
  438. package/src/live-voice/__tests__/live-voice-events.test.ts +7 -8
  439. package/src/live-voice/__tests__/live-voice-flux-turn-end.test.ts +932 -0
  440. package/src/live-voice/__tests__/live-voice-integration.test.ts +12 -5
  441. package/src/live-voice/__tests__/live-voice-metrics.test.ts +115 -8
  442. package/src/live-voice/__tests__/live-voice-photo.test.ts +100 -0
  443. package/src/live-voice/__tests__/live-voice-progress.test.ts +179 -146
  444. package/src/live-voice/__tests__/live-voice-session-telemetry.test.ts +265 -0
  445. package/src/live-voice/__tests__/live-voice-stt.test.ts +324 -2
  446. package/src/live-voice/__tests__/live-voice-triage-escalate.test.ts +131 -2
  447. package/src/live-voice/__tests__/live-voice-tts-session.test.ts +0 -483
  448. package/src/live-voice/__tests__/live-voice-tts.test.ts +148 -2
  449. package/src/live-voice/__tests__/live-voice-vad.test.ts +313 -32
  450. package/src/live-voice/__tests__/progress-narration.test.ts +214 -0
  451. package/src/live-voice/__tests__/progress-phrases.test.ts +167 -0
  452. package/src/live-voice/__tests__/protocol.test.ts +52 -0
  453. package/src/live-voice/__tests__/runtime-websocket-shell.test.ts +3 -0
  454. package/src/live-voice/live-voice-archive.ts +13 -13
  455. package/src/live-voice/live-voice-connection.ts +7 -1
  456. package/src/live-voice/live-voice-metrics.ts +57 -32
  457. package/src/live-voice/live-voice-photo.ts +168 -0
  458. package/src/live-voice/live-voice-session.ts +1137 -351
  459. package/src/live-voice/live-voice-tts.ts +18 -2
  460. package/src/live-voice/progress-narration.ts +277 -0
  461. package/src/live-voice/progress-phrases.ts +105 -2
  462. package/src/live-voice/protocol.ts +110 -2
  463. package/src/mcp/__tests__/mcp-auth-orchestrator.test.ts +0 -1
  464. package/src/mcp/__tests__/mcp-oauth-client-registration.test.ts +196 -0
  465. package/src/mcp/__tests__/mcp-oauth-provider.test.ts +9 -9
  466. package/src/mcp/client.ts +14 -7
  467. package/src/mcp/mcp-auth-orchestrator.ts +13 -22
  468. package/src/mcp/mcp-oauth-provider.ts +195 -240
  469. package/src/messaging/providers/__tests__/callback-routing.test.ts +5 -1
  470. package/src/messaging/providers/__tests__/transport-dispatch.test.ts +66 -4
  471. package/src/messaging/providers/callback-routing.ts +1 -0
  472. package/src/messaging/providers/discord/api.ts +312 -0
  473. package/src/messaging/providers/discord/dm-delivery.test.ts +204 -0
  474. package/src/messaging/providers/discord/render.test.ts +204 -0
  475. package/src/messaging/providers/discord/render.ts +195 -0
  476. package/src/messaging/providers/discord/send.test.ts +179 -0
  477. package/src/messaging/providers/discord/send.ts +212 -0
  478. package/src/messaging/providers/discord/transport.ts +81 -0
  479. package/src/messaging/providers/index.ts +3 -1
  480. package/src/messaging/providers/retry-policy.test.ts +247 -0
  481. package/src/messaging/providers/retry-policy.ts +206 -0
  482. package/src/messaging/providers/slack/mention-source.test.ts +285 -0
  483. package/src/messaging/providers/slack/mention-source.ts +287 -0
  484. package/src/messaging/providers/telegram-bot/api.ts +47 -130
  485. package/src/messaging/providers/whatsapp/api.ts +47 -136
  486. package/src/monitoring/__tests__/db-integrity-sample.test.ts +4 -1
  487. package/src/monitoring/__tests__/plugin-auto-update.test.ts +495 -0
  488. package/src/monitoring/db-integrity-sample.ts +6 -1
  489. package/src/monitoring/plugin-auto-update.ts +463 -0
  490. package/src/monitoring/resource-sampler.ts +21 -5
  491. package/src/monitoring/worker.ts +13 -0
  492. package/src/notifications/__tests__/assistant-reply-producer.test.ts +375 -2
  493. package/src/notifications/__tests__/broadcaster.test.ts +37 -1
  494. package/src/notifications/__tests__/copy-composer.test.ts +165 -0
  495. package/src/notifications/__tests__/emit-signal-pipeline-failure.test.ts +205 -0
  496. package/src/notifications/__tests__/notification-utils.test.ts +249 -0
  497. package/src/notifications/adapters/platform.ts +31 -2
  498. package/src/notifications/assistant-reply-producer.ts +79 -32
  499. package/src/notifications/broadcaster.ts +30 -10
  500. package/src/notifications/copy-composer.ts +69 -0
  501. package/src/notifications/emit-signal.ts +82 -15
  502. package/src/notifications/events-store.ts +10 -2
  503. package/src/notifications/home-feed-side-effect.ts +6 -3
  504. package/src/notifications/notification-utils.ts +173 -5
  505. package/src/notifications/signal.ts +13 -0
  506. package/src/oauth/AGENTS.md +4 -2
  507. package/src/oauth/byo-connection.ts +6 -1
  508. package/src/oauth/credential-token-resolver.ts +3 -10
  509. package/src/oauth/manual-token-connection.ts +29 -64
  510. package/src/oauth/manual-token-providers.ts +62 -0
  511. package/src/oauth/provider-serializer.ts +13 -0
  512. package/src/oauth/seed-providers.ts +62 -11
  513. package/src/onboarding/onboarding-events-store.ts +91 -1
  514. package/src/permissions/question-prompter.test.ts +4 -0
  515. package/src/permissions/question-prompter.ts +21 -4
  516. package/src/persistence/__tests__/conversation-lineage.test.ts +248 -0
  517. package/src/persistence/attachments-store.ts +15 -15
  518. package/src/persistence/conversation-attention-store.ts +30 -10
  519. package/src/persistence/conversation-bootstrap.ts +17 -0
  520. package/src/persistence/conversation-crud.ts +363 -97
  521. package/src/persistence/conversation-group-migration.ts +1 -1
  522. package/src/persistence/conversation-key-store.ts +38 -10
  523. package/src/persistence/conversation-lineage.ts +226 -0
  524. package/src/persistence/conversation-plugin-facade.ts +28 -3
  525. package/src/persistence/conversation-queries.ts +207 -33
  526. package/src/persistence/conversation-types.ts +107 -1
  527. package/src/persistence/jobs-store.ts +32 -8
  528. package/src/persistence/llm-usage-store.ts +22 -0
  529. package/src/persistence/migrations/361-normalize-managed-connection-rows.test.ts +168 -0
  530. package/src/persistence/migrations/361-normalize-managed-connection-rows.ts +76 -0
  531. package/src/persistence/migrations/362-add-conversation-subagent-kind.test.ts +187 -0
  532. package/src/persistence/migrations/362-add-conversation-subagent-kind.ts +93 -0
  533. package/src/persistence/migrations/363-backfill-schedule-inference-profile.test.ts +229 -0
  534. package/src/persistence/migrations/363-backfill-schedule-inference-profile.ts +127 -0
  535. package/src/persistence/migrations/364-add-schedule-source-key.test.ts +120 -0
  536. package/src/persistence/migrations/364-add-schedule-source-key.ts +43 -0
  537. package/src/persistence/migrations/365-add-conversation-fork-strategy.ts +27 -0
  538. package/src/persistence/schema/conversations.ts +32 -0
  539. package/src/persistence/schema/infrastructure.ts +3 -0
  540. package/src/persistence/steps.ts +30 -0
  541. package/src/persistence/subagent-store.ts +148 -6
  542. package/src/platform/managed-speech.test.ts +20 -0
  543. package/src/platform/managed-speech.ts +9 -0
  544. package/src/plugin-api/__tests__/oauth-callback-url-export.test.ts +29 -0
  545. package/src/plugin-api/index.ts +28 -5
  546. package/src/plugin-api/webhook-url.ts +151 -0
  547. package/src/plugins/__tests__/installed-plugin-dirs.test.ts +82 -0
  548. package/src/plugins/__tests__/mcp-servers.test.ts +370 -0
  549. package/src/plugins/__tests__/source-fingerprint.test.ts +5 -1
  550. package/src/plugins/collect-source-versions.ts +4 -27
  551. package/src/plugins/defaults/exploration-drift/hooks/post-tool-use.ts +5 -5
  552. package/src/plugins/defaults/exploration-drift/package.json +1 -1
  553. package/src/plugins/defaults/image-recovery/hooks/post-model-call.ts +4 -2
  554. package/src/plugins/defaults/image-recovery/recover.ts +67 -57
  555. package/src/plugins/defaults/index.ts +1 -1
  556. package/src/plugins/defaults/memory/__tests__/conversation-queries.test.ts +64 -18
  557. package/src/plugins/defaults/memory/__tests__/jobs-worker-outcome-contract.test.ts +242 -0
  558. package/src/plugins/defaults/memory/__tests__/jobs-worker-retrospective-sweep.test.ts +24 -1
  559. package/src/plugins/defaults/memory/__tests__/memory-retrospective-enqueue.test.ts +48 -3
  560. package/src/plugins/defaults/memory/__tests__/memory-retrospective-job.test.ts +511 -19
  561. package/src/plugins/defaults/memory/__tests__/memory-retrospective-prompt.test.ts +39 -3
  562. package/src/plugins/defaults/memory/__tests__/memory-retrospective-provider-path.test.ts +493 -0
  563. package/src/plugins/defaults/memory/__tests__/memory-retrospective-wake-chain.test.ts +5 -4
  564. package/src/plugins/defaults/memory/__tests__/memory-tier-boundary-guard.test.ts +5 -1
  565. package/src/plugins/defaults/memory/job-handlers.ts +87 -5
  566. package/src/plugins/defaults/memory/jobs-worker.ts +60 -6
  567. package/src/plugins/defaults/memory/memory-retrospective-constants.ts +11 -0
  568. package/src/plugins/defaults/memory/memory-retrospective-enqueue.ts +29 -0
  569. package/src/plugins/defaults/memory/memory-retrospective-job.ts +342 -60
  570. package/src/plugins/defaults/memory/memory-retrospective-prompt.ts +23 -3
  571. package/src/plugins/defaults/memory/substrate/consolidation-lock.ts +9 -4
  572. package/src/plugins/defaults/memory/substrate/skill-content.ts +8 -1
  573. package/src/plugins/defaults/memory/substrate/sweep-job.ts +7 -0
  574. package/src/plugins/defaults/memory/v1/graph/injection.ts +1 -1
  575. package/src/plugins/defaults/memory/v2/router.ts +8 -0
  576. package/src/plugins/defaults/turn-context/unified-turn-context.ts +1 -2
  577. package/src/plugins/external-plugin-loader.ts +64 -8
  578. package/src/plugins/installed-plugin-dirs.ts +101 -0
  579. package/src/plugins/mcp-servers.ts +343 -0
  580. package/src/plugins/mtime-cache.ts +34 -22
  581. package/src/plugins/types.ts +69 -8
  582. package/src/prompts/persona-resolver.ts +6 -2
  583. package/src/prompts/system-prompt.ts +72 -17
  584. package/src/providers/__tests__/inference.test.ts +40 -0
  585. package/src/providers/__tests__/preflight-resolved-config.test.ts +58 -1
  586. package/src/providers/__tests__/retry-callsite.test.ts +72 -2
  587. package/src/providers/__tests__/vellum-connection-routing.test.ts +42 -11
  588. package/src/providers/anthropic/client.ts +112 -95
  589. package/src/providers/connection-resolution.ts +35 -1
  590. package/src/providers/gemini/client.ts +5 -5
  591. package/src/providers/inference/adapter-factory.ts +16 -10
  592. package/src/providers/inference/auth.ts +16 -0
  593. package/src/providers/inference/connection-availability.ts +164 -12
  594. package/src/providers/inference/connections.ts +25 -1
  595. package/src/providers/media-resolve.ts +21 -11
  596. package/src/providers/model-catalog.ts +15 -0
  597. package/src/providers/openai/chat-completions-provider.ts +4 -4
  598. package/src/providers/openai/responses-provider.ts +12 -25
  599. package/src/providers/registry.ts +9 -4
  600. package/src/providers/retry.ts +25 -0
  601. package/src/providers/server-tool-pairing.ts +134 -0
  602. package/src/providers/speech-to-text/__tests__/deepgram-flux-frames.test.ts +433 -0
  603. package/src/providers/speech-to-text/__tests__/deepgram-flux-realtime.test.ts +620 -0
  604. package/src/providers/speech-to-text/__tests__/provider-catalog.test.ts +34 -0
  605. package/src/providers/speech-to-text/__tests__/resolve.test.ts +472 -12
  606. package/src/providers/speech-to-text/deepgram-flux-frames.ts +395 -0
  607. package/src/providers/speech-to-text/deepgram-flux-realtime.ts +719 -0
  608. package/src/providers/speech-to-text/deepgram-realtime.test.ts +283 -1
  609. package/src/providers/speech-to-text/deepgram-realtime.ts +117 -3
  610. package/src/providers/speech-to-text/deepgram.ts +1 -0
  611. package/src/providers/speech-to-text/provider-catalog.ts +137 -8
  612. package/src/providers/speech-to-text/resolve.ts +105 -12
  613. package/src/providers/speech-to-text/vellum-managed.ts +7 -1
  614. package/src/providers/speech-to-text/vellum-speech-relay-connection.ts +3 -1
  615. package/src/providers/types.ts +26 -6
  616. package/src/providers/vellum-model-routing.ts +6 -7
  617. package/src/runtime/AGENTS.md +2 -0
  618. package/src/runtime/__tests__/agent-wake.test.ts +16 -16
  619. package/src/runtime/__tests__/background-job-runner.test.ts +0 -144
  620. package/src/runtime/__tests__/desktop-presence.test.ts +162 -0
  621. package/src/runtime/__tests__/local-actor-identity-force-refresh.test.ts +104 -0
  622. package/src/runtime/agent-wake.ts +63 -24
  623. package/src/runtime/assistant-event-hub.ts +110 -12
  624. package/src/runtime/auth/__tests__/guard-tests.test.ts +2 -0
  625. package/src/runtime/auth/__tests__/scopes.test.ts +20 -0
  626. package/src/runtime/auth/same-actor.ts +56 -8
  627. package/src/runtime/auth/scopes.ts +12 -0
  628. package/src/runtime/auth/types.ts +2 -0
  629. package/src/runtime/background-job-runner.ts +5 -27
  630. package/src/runtime/channel-readiness-service.ts +59 -3
  631. package/src/runtime/channel-readiness-types.ts +18 -0
  632. package/src/runtime/desktop-presence.ts +69 -0
  633. package/src/runtime/http-server.ts +12 -0
  634. package/src/runtime/local-actor-identity.ts +29 -14
  635. package/src/runtime/migrations/__tests__/vbundle-symlink-streaming-importer.test.ts +0 -0
  636. package/src/runtime/routes/__tests__/channel-verification-routes.test.ts +1 -1
  637. package/src/runtime/routes/__tests__/client-routes.test.ts +186 -14
  638. package/src/runtime/routes/__tests__/conversation-list-routes.test.ts +547 -1
  639. package/src/runtime/routes/__tests__/conversation-management-routes.test.ts +162 -7
  640. package/src/runtime/routes/__tests__/conversation-query-routes.test.ts +14 -10
  641. package/src/runtime/routes/__tests__/inference-profiles-routes.test.ts +340 -3
  642. package/src/runtime/routes/__tests__/llm-call-sites-routes.test.ts +28 -1
  643. package/src/runtime/routes/__tests__/plugins-routes.test.ts +217 -1
  644. package/src/runtime/routes/__tests__/question-routes.test.ts +64 -0
  645. package/src/runtime/routes/__tests__/retrospective-routes.test.ts +20 -0
  646. package/src/runtime/routes/__tests__/skill-history-route.test.ts +116 -0
  647. package/src/runtime/routes/__tests__/sse-actor-principal-heal.test.ts +165 -0
  648. package/src/runtime/routes/__tests__/stt-routes.test.ts +25 -0
  649. package/src/runtime/routes/__tests__/surface-action-routes.test.ts +2 -0
  650. package/src/runtime/routes/__tests__/wake-conversation-routes.test.ts +60 -2
  651. package/src/runtime/routes/archive-utils.ts +16 -12
  652. package/src/runtime/routes/attachment-routes.ts +13 -6
  653. package/src/runtime/routes/canned-reply-release.ts +54 -0
  654. package/src/runtime/routes/channel-availability-routes.ts +32 -14
  655. package/src/runtime/routes/channel-verification-routes.ts +2 -27
  656. package/src/runtime/routes/chatgpt-subscription-auth-routes.ts +5 -0
  657. package/src/runtime/routes/client-routes.ts +114 -2
  658. package/src/runtime/routes/conversation-cli-routes.ts +10 -12
  659. package/src/runtime/routes/conversation-list-routes.ts +59 -10
  660. package/src/runtime/routes/conversation-management-routes.ts +47 -18
  661. package/src/runtime/routes/conversation-query-routes.ts +32 -53
  662. package/src/runtime/routes/conversation-routes.ts +360 -293
  663. package/src/runtime/routes/credential-prompt-routes.ts +20 -2
  664. package/src/runtime/routes/debug-routes.ts +4 -1
  665. package/src/runtime/routes/default-provider-routes.ts +7 -11
  666. package/src/runtime/routes/documents-routes.ts +44 -1
  667. package/src/runtime/routes/events-routes.ts +29 -1
  668. package/src/runtime/routes/host-app-control-routes.ts +2 -0
  669. package/src/runtime/routes/host-bash-routes.ts +2 -0
  670. package/src/runtime/routes/host-browser-routes.ts +2 -0
  671. package/src/runtime/routes/host-cu-routes.ts +2 -0
  672. package/src/runtime/routes/host-file-routes.ts +2 -0
  673. package/src/runtime/routes/host-transfer-routes.ts +4 -0
  674. package/src/runtime/routes/identity-routes.ts +6 -6
  675. package/src/runtime/routes/inbound-message-handler.ts +5 -5
  676. package/src/runtime/routes/inbound-stages/acl-enforcement.ts +7 -3
  677. package/src/runtime/routes/inbound-stages/background-dispatch.ts +14 -0
  678. package/src/runtime/routes/inbound-stages/bootstrap-intercept.ts +2 -2
  679. package/src/runtime/routes/inbound-stages/guardian-activation-intercept.test.ts +14 -11
  680. package/src/runtime/routes/inbound-stages/guardian-activation-intercept.ts +14 -17
  681. package/src/runtime/routes/inference-profile-availability-guard.ts +171 -0
  682. package/src/runtime/routes/inference-profile-session-handler.ts +26 -2
  683. package/src/runtime/routes/inference-profile-session-routes.ts +2 -1
  684. package/src/runtime/routes/inference-profiles-routes.ts +152 -73
  685. package/src/runtime/routes/inference-provider-connection-routes.ts +0 -16
  686. package/src/runtime/routes/llm-call-sites-routes.ts +13 -0
  687. package/src/runtime/routes/log-export-routes.ts +1 -1
  688. package/src/runtime/routes/mcp-auth-routes.ts +141 -57
  689. package/src/runtime/routes/notification-routes.ts +0 -14
  690. package/src/runtime/routes/oauth-providers.ts +1 -0
  691. package/src/runtime/routes/plugins-routes.ts +127 -4
  692. package/src/runtime/routes/profiler-routes.ts +4 -2
  693. package/src/runtime/routes/question-routes.ts +28 -10
  694. package/src/runtime/routes/retrospective-routes.ts +9 -3
  695. package/src/runtime/routes/schedule-routes.ts +210 -12
  696. package/src/runtime/routes/secret-routes.ts +40 -23
  697. package/src/runtime/routes/settings-routes.ts +41 -13
  698. package/src/runtime/routes/skills-routes.ts +79 -0
  699. package/src/runtime/routes/sse-actor-principal-heal.ts +113 -0
  700. package/src/runtime/routes/stt-routes.ts +31 -25
  701. package/src/runtime/routes/ui-snapshot-routes.ts +1 -0
  702. package/src/runtime/routes/wake-conversation-routes.ts +23 -0
  703. package/src/runtime/services/__tests__/conversation-serializer.test.ts +1 -0
  704. package/src/runtime/services/conversation-serializer.ts +24 -9
  705. package/src/runtime/sync/documents-sidecar-publish.test.ts +101 -0
  706. package/src/runtime/sync/resource-sync-events.ts +79 -1
  707. package/src/runtime/sync/worker-daemon-notify.test.ts +34 -0
  708. package/src/runtime/sync/worker-daemon-notify.ts +44 -6
  709. package/src/runtime/verification-outbound-actions.ts +250 -222
  710. package/src/runtime/verification-templates.ts +41 -30
  711. package/src/schedule/__tests__/plugin-schedule-declarations.test.ts +614 -0
  712. package/src/schedule/__tests__/plugin-schedule-reconciler.test.ts +1066 -0
  713. package/src/schedule/inference-profile.ts +64 -3
  714. package/src/schedule/plugin-schedule-declarations.ts +518 -0
  715. package/src/schedule/plugin-schedule-reconciler.ts +605 -0
  716. package/src/schedule/plugin-schedules-gate.ts +23 -0
  717. package/src/schedule/schedule-store.ts +520 -26
  718. package/src/schedule/scheduler.ts +38 -0
  719. package/src/security/credential-backend.ts +51 -4
  720. package/src/security/encrypted-store.ts +64 -42
  721. package/src/security/oauth2.ts +6 -22
  722. package/src/security/secure-keys.ts +55 -7
  723. package/src/skills/catalog-install.ts +20 -7
  724. package/src/skills/inline-command-runner.ts +2 -7
  725. package/src/skills/skill-history.test.ts +269 -0
  726. package/src/skills/skill-history.ts +250 -0
  727. package/src/skills/skillssh-registry.ts +1 -1
  728. package/src/stt/__tests__/daemon-batch-transcriber.test.ts +22 -0
  729. package/src/stt/__tests__/language-metadata.test.ts +85 -0
  730. package/src/stt/__tests__/speech-energy.test.ts +79 -0
  731. package/src/stt/__tests__/types.test.ts +94 -0
  732. package/src/stt/daemon-batch-transcriber.ts +18 -6
  733. package/src/stt/language-metadata.ts +65 -0
  734. package/src/stt/speech-energy.ts +115 -12
  735. package/src/stt/stt-stream-session.ts +8 -4
  736. package/src/stt/types.ts +119 -0
  737. package/src/subagent/__tests__/consult-prompt.test.ts +25 -0
  738. package/src/subagent/consult-prompt.ts +3 -1
  739. package/src/subagent/consult-transcript.ts +1 -1
  740. package/src/subagent/manager.ts +304 -44
  741. package/src/subagent/progress-events.ts +35 -0
  742. package/src/subagent/role-resolution.ts +88 -0
  743. package/src/subagent/types.ts +303 -67
  744. package/src/subagent/validate-allowlists.ts +3 -4
  745. package/src/telegram/__tests__/webhook-health.test.ts +73 -1
  746. package/src/telegram/webhook-health.ts +101 -3
  747. package/src/telemetry/__tests__/telemetry-event-fixtures.ts +2 -0
  748. package/src/telemetry/activation-funnel.ts +6 -1
  749. package/src/telemetry/live-voice-funnel.ts +75 -0
  750. package/src/telemetry/telemetry-event-sources.ts +6 -0
  751. package/src/telemetry/telemetry-wire-source.json +1 -1
  752. package/src/telemetry/telemetry-wire.generated.ts +2 -0
  753. package/src/telemetry/types.ts +23 -4
  754. package/src/telemetry/usage-telemetry-reporter.test.ts +4 -0
  755. package/src/tools/__tests__/subagent-workflow-tool-input-schemas.test.ts +1 -1
  756. package/src/tools/ask-question/ask-question-tool.test.ts +118 -3
  757. package/src/tools/ask-question/ask-question-tool.ts +56 -2
  758. package/src/tools/browser/browser-execution.ts +1 -1
  759. package/src/tools/calls/call-start.ts +8 -5
  760. package/src/tools/conversation-groups/move_to_group.ts +10 -12
  761. package/src/tools/document/document-tool.ts +11 -4
  762. package/src/tools/execution-timeout.ts +9 -2
  763. package/src/tools/executor.ts +7 -6
  764. package/src/tools/filesystem/edit.ts +1 -1
  765. package/src/tools/filesystem/list.ts +1 -1
  766. package/src/tools/filesystem/read.ts +7 -13
  767. package/src/tools/filesystem/search.ts +23 -21
  768. package/src/tools/filesystem/write.ts +4 -1
  769. package/src/tools/host-filesystem/edit.ts +7 -2
  770. package/src/tools/host-filesystem/read.ts +21 -8
  771. package/src/tools/host-filesystem/write.ts +10 -2
  772. package/src/tools/host-terminal/host-shell.ts +2 -2
  773. package/src/tools/mcp/mcp-tool-factory.ts +25 -1
  774. package/src/tools/permission-checker.ts +8 -3
  775. package/src/tools/schedule/delete.ts +13 -1
  776. package/src/tools/schedule/list.ts +14 -3
  777. package/src/tools/schedule/update.ts +56 -33
  778. package/src/tools/shared/filesystem/audio-read.ts +6 -4
  779. package/src/tools/shared/filesystem/file-ops-service.ts +176 -116
  780. package/src/tools/shared/filesystem/image-read.ts +12 -12
  781. package/src/tools/shared/filesystem/path-policy.ts +70 -5
  782. package/src/tools/shared/filesystem/size-guard.ts +6 -6
  783. package/src/tools/shared/input-misuse.ts +72 -0
  784. package/src/tools/skills/scaffold-managed.ts +82 -0
  785. package/src/tools/skills/skill-tool-factory.ts +14 -1
  786. package/src/tools/subagent/consult-deadline.ts +12 -7
  787. package/src/tools/subagent/message.ts +3 -1
  788. package/src/tools/subagent/read.ts +66 -4
  789. package/src/tools/subagent/spawn.ts +500 -78
  790. package/src/tools/tool-approval-handler.ts +45 -4
  791. package/src/tools/types.ts +22 -3
  792. package/src/tools/ui-surface/surface-shape-docs.ts +1 -1
  793. package/src/tools/ui-surface/visual-validation.ts +2 -0
  794. package/src/tts/__tests__/provider-adapters.test.ts +147 -0
  795. package/src/tts/__tests__/speakable-segments.test.ts +470 -0
  796. package/src/tts/language-voices.ts +23 -0
  797. package/src/tts/providers/deepgram-provider.ts +3 -1
  798. package/src/tts/providers/elevenlabs-provider.ts +73 -1
  799. package/src/tts/providers/xai-provider.ts +28 -2
  800. package/src/tts/speakable-segments.ts +293 -23
  801. package/src/tts/synthesis-stream.ts +7 -0
  802. package/src/tts/types.ts +7 -0
  803. package/src/usage/__tests__/subagent-attribution.test.ts +109 -0
  804. package/src/usage/subagent-attribution.ts +108 -0
  805. package/src/util/__tests__/language-subtag.test.ts +54 -0
  806. package/src/util/__tests__/sqlite-retry.test.ts +112 -0
  807. package/src/util/abort-reasons.ts +16 -0
  808. package/src/util/ansi.ts +44 -0
  809. package/src/util/disk-usage.ts +17 -13
  810. package/src/util/image-conversion.ts +20 -13
  811. package/src/util/language-subtag.ts +43 -0
  812. package/src/util/schedule-source-key.ts +23 -0
  813. package/src/util/unicode.ts +1 -1
  814. package/src/util/worker-process.ts +7 -1
  815. package/src/workspace/git-service.ts +33 -9
  816. package/src/workspace/migrations/140-repair-seed-pinned-memory-v3-live.ts +260 -0
  817. package/src/workspace/migrations/141-stt-english-default-to-multilingual.ts +111 -0
  818. package/src/workspace/migrations/142-consolidate-voice-front-door.ts +70 -0
  819. package/src/workspace/migrations/__tests__/141-stt-english-default-to-multilingual.test.ts +116 -0
  820. package/src/workspace/migrations/registry.ts +6 -0
  821. package/src/workspace/top-level-renderer.ts +15 -2
  822. package/src/__tests__/tool-side-effects-slack-dm.test.ts +0 -357
  823. package/src/daemon/install-symlink.ts +0 -207
  824. package/src/live-voice/__tests__/front-decision.test.ts +0 -525
  825. package/src/live-voice/front-decision.ts +0 -429
  826. package/src/notifications/deferred-emit.ts +0 -147
package/openapi.yaml CHANGED
@@ -3,7 +3,7 @@
3
3
  openapi: 3.1.0
4
4
  info:
5
5
  title: Vellum Assistant API
6
- version: 0.11.2
6
+ version: 0.11.3
7
7
  description: Auto-generated OpenAPI specification for the Vellum Assistant runtime HTTP server.
8
8
  servers:
9
9
  - url: http://127.0.0.1:7821
@@ -4017,8 +4017,8 @@ paths:
4017
4017
  summary: Get available channels
4018
4018
  description:
4019
4019
  Return the channels this assistant can surface to clients, with display metadata (label, icon, verification
4020
- capability, setup copy). Today this is a fixed base list plus `email` when an inbox is registered; will become
4021
- plugin/skill-driven in future.
4020
+ capability, setup copy). A fixed base list plus `email` when an inbox is registered, plus the channels installed
4021
+ plugins bring by declaring ingress routes. Each carries a `source` saying which of those it is.
4022
4022
  tags:
4023
4023
  - channels
4024
4024
  responses:
@@ -4036,16 +4036,9 @@ paths:
4036
4036
  properties:
4037
4037
  id:
4038
4038
  type: string
4039
- enum:
4040
- - telegram
4041
- - phone
4042
- - vellum
4043
- - whatsapp
4044
- - slack
4045
- - email
4046
- - platform
4047
- - a2a
4048
- - discord
4039
+ source:
4040
+ type: string
4041
+ description: "`default` for a channel the assistant ships, `plugin:<name>` for one an installed plugin brings"
4049
4042
  label:
4050
4043
  type: string
4051
4044
  subtitle:
@@ -4067,13 +4060,16 @@ paths:
4067
4060
  additionalProperties: false
4068
4061
  required:
4069
4062
  - id
4063
+ - source
4070
4064
  - label
4071
4065
  - subtitle
4072
4066
  - icon
4073
4067
  - supportsVerification
4074
4068
  - setupMessages
4075
4069
  additionalProperties: false
4076
- description: Available channels in display order
4070
+ description:
4071
+ "Available channels in display order: the ones the assistant ships, then the ones installed plugins bring
4072
+ by declaring ingress routes. `source` distinguishes them."
4077
4073
  required:
4078
4074
  - channels
4079
4075
  additionalProperties: false
@@ -4358,6 +4354,7 @@ paths:
4358
4354
  - platform
4359
4355
  - a2a
4360
4356
  - discord
4357
+ - plugin
4361
4358
  ready:
4362
4359
  type: boolean
4363
4360
  setupStatus:
@@ -4448,6 +4445,7 @@ paths:
4448
4445
  - platform
4449
4446
  - a2a
4450
4447
  - discord
4448
+ - plugin
4451
4449
  includeRemote:
4452
4450
  description: Include remote checks (default true)
4453
4451
  type: boolean
@@ -4478,6 +4476,7 @@ paths:
4478
4476
  - platform
4479
4477
  - a2a
4480
4478
  - discord
4479
+ - plugin
4481
4480
  ready:
4482
4481
  type: boolean
4483
4482
  setupStatus:
@@ -4615,6 +4614,43 @@ paths:
4615
4614
  required:
4616
4615
  - disconnected
4617
4616
  additionalProperties: false
4617
+ /v1/clients/presence:
4618
+ post:
4619
+ operationId: clients_presence_post
4620
+ summary: Report desktop presence
4621
+ description: Record the desktop presence state reported by the client identified by the X-Vellum-Client-Id header.
4622
+ tags:
4623
+ - clients
4624
+ requestBody:
4625
+ required: true
4626
+ content:
4627
+ application/json:
4628
+ schema:
4629
+ type: object
4630
+ properties:
4631
+ state:
4632
+ type: string
4633
+ enum:
4634
+ - active
4635
+ - idle
4636
+ - away
4637
+ description: Reported desktop presence state.
4638
+ required:
4639
+ - state
4640
+ responses:
4641
+ "200":
4642
+ description: Successful response
4643
+ content:
4644
+ application/json:
4645
+ schema:
4646
+ type: object
4647
+ properties:
4648
+ recorded:
4649
+ type: boolean
4650
+ description: Whether a connected client matched the reporting clientId.
4651
+ required:
4652
+ - recorded
4653
+ additionalProperties: false
4618
4654
  /v1/config:
4619
4655
  get:
4620
4656
  operationId: config_get
@@ -4737,6 +4773,8 @@ paths:
4737
4773
  type: string
4738
4774
  defaultProfile:
4739
4775
  type: string
4776
+ shippedDefaultProfile:
4777
+ type: string
4740
4778
  required:
4741
4779
  - id
4742
4780
  - displayName
@@ -6543,9 +6581,20 @@ paths:
6543
6581
  - platform
6544
6582
  - a2a
6545
6583
  - discord
6584
+ - plugin
6546
6585
  description:
6547
6586
  Filter by origin channel. When provided, only conversations with this exact origin_channel value are
6548
6587
  returned. Omit to include all channels.
6588
+ - name: groupId
6589
+ in: query
6590
+ required: false
6591
+ schema:
6592
+ type: string
6593
+ description:
6594
+ Filter to a single group, so each sidebar section can load independently of the paginated list. Pass
6595
+ "system:all" for conversations in no group, "system:pinned" for the Pinned section, or a custom group id. A
6596
+ group-scoped request is ordered by the user's arrangement (display order, then recency) and never has pinned
6597
+ rows appended to it. Omit to span every group.
6549
6598
  responses:
6550
6599
  "200":
6551
6600
  description: Successful response
@@ -6669,6 +6718,7 @@ paths:
6669
6718
  - platform
6670
6719
  - a2a
6671
6720
  - discord
6721
+ - plugin
6672
6722
  - type: "null"
6673
6723
  assistantAttention:
6674
6724
  type: object
@@ -6723,6 +6773,9 @@ paths:
6723
6773
  - messageId
6724
6774
  - title
6725
6775
  additionalProperties: false
6776
+ historyOrphaned:
6777
+ type: boolean
6778
+ const: true
6726
6779
  archivedAt:
6727
6780
  type: number
6728
6781
  surfacedAt:
@@ -6796,9 +6849,15 @@ paths:
6796
6849
  `id`.
6797
6850
  type: string
6798
6851
  conversationType:
6799
- description: Only standard conversations are created by this endpoint
6852
+ description:
6853
+ Conversation type for the new row. "background" keeps it out of the foreground list and the sidebar's
6854
+ Recents grouping, used by internal side-channel flows (onboarding research, persona/identity
6855
+ rewrites) that mint a throwaway thread the user should never see. "scheduled" is not accepted here;
6856
+ scheduled rows are owned by the schedule pipeline.
6800
6857
  type: string
6801
- const: standard
6858
+ enum:
6859
+ - standard
6860
+ - background
6802
6861
  title:
6803
6862
  description:
6804
6863
  Explicit title for the conversation. When provided on creation, it is persisted as a user-set title (never
@@ -7023,6 +7082,7 @@ paths:
7023
7082
  - platform
7024
7083
  - a2a
7025
7084
  - discord
7085
+ - plugin
7026
7086
  - type: "null"
7027
7087
  assistantAttention:
7028
7088
  type: object
@@ -7077,6 +7137,9 @@ paths:
7077
7137
  - messageId
7078
7138
  - title
7079
7139
  additionalProperties: false
7140
+ historyOrphaned:
7141
+ type: boolean
7142
+ const: true
7080
7143
  archivedAt:
7081
7144
  type: number
7082
7145
  surfacedAt:
@@ -8233,6 +8296,7 @@ paths:
8233
8296
  - platform
8234
8297
  - a2a
8235
8298
  - discord
8299
+ - plugin
8236
8300
  - type: "null"
8237
8301
  assistantAttention:
8238
8302
  type: object
@@ -8287,6 +8351,9 @@ paths:
8287
8351
  - messageId
8288
8352
  - title
8289
8353
  additionalProperties: false
8354
+ historyOrphaned:
8355
+ type: boolean
8356
+ const: true
8290
8357
  archivedAt:
8291
8358
  type: number
8292
8359
  surfacedAt:
@@ -8420,7 +8487,8 @@ paths:
8420
8487
  summary: Open an inference-profile session
8421
8488
  description:
8422
8489
  Open (or replace) a session-backed inference-profile override for a conversation. Supports an optional TTL
8423
- — omit for a sticky (non-expiring) override.
8490
+ — omit for a sticky (non-expiring) override. A profile that provably cannot dispatch is rejected rather than
8491
+ pinned.
8424
8492
  tags:
8425
8493
  - conversations
8426
8494
  requestBody:
@@ -9228,8 +9296,10 @@ paths:
9228
9296
  /v1/conversations/reorder:
9229
9297
  post:
9230
9298
  operationId: conversations_reorder_post
9231
- summary: Reorder conversations
9232
- description: Batch-update display order and pin state for conversations.
9299
+ summary: Move conversations between sections
9300
+ description:
9301
+ Batch-update which group holds each conversation, and its pin state. Lists are ordered by recency, so this
9302
+ sets placement, not order.
9233
9303
  tags:
9234
9304
  - conversations
9235
9305
  requestBody:
@@ -9246,8 +9316,6 @@ paths:
9246
9316
  properties:
9247
9317
  conversationId:
9248
9318
  type: string
9249
- displayOrder:
9250
- type: number
9251
9319
  isPinned:
9252
9320
  type: boolean
9253
9321
  groupId:
@@ -9519,6 +9587,28 @@ paths:
9519
9587
  required:
9520
9588
  - ok
9521
9589
  additionalProperties: false
9590
+ /v1/conversations/unread-count:
9591
+ get:
9592
+ operationId: conversations_unreadcount_get
9593
+ summary: Unread conversation count
9594
+ description:
9595
+ "Count of foreground conversations whose latest assistant message is unseen. Matches the sidebar's unread
9596
+ indicators: archived rows and non-surfaced background/scheduled rows are excluded."
9597
+ tags:
9598
+ - conversations
9599
+ responses:
9600
+ "200":
9601
+ description: Successful response
9602
+ content:
9603
+ application/json:
9604
+ schema:
9605
+ type: object
9606
+ properties:
9607
+ count:
9608
+ type: number
9609
+ required:
9610
+ - count
9611
+ additionalProperties: false
9522
9612
  /v1/conversations/wake:
9523
9613
  post:
9524
9614
  operationId: conversations_wake_post
@@ -9545,6 +9635,9 @@ paths:
9545
9635
  cronRunId:
9546
9636
  type: string
9547
9637
  minLength: 1
9638
+ scheduleId:
9639
+ type: string
9640
+ minLength: 1
9548
9641
  persist:
9549
9642
  type: boolean
9550
9643
  externalContent:
@@ -14340,7 +14433,8 @@ paths:
14340
14433
  description:
14341
14434
  Set llm.activeProfile after validating the name against the effective profile catalog (provider-aware
14342
14435
  default expansion included). Unknown or disabled profiles are rejected so the chat-model selection cannot be
14343
- silently stripped on the next config load.
14436
+ silently stripped on the next config load. A profile that provably cannot dispatch is also rejected — there is
14437
+ no escape hatch, because an unusable active profile locks the user out of chat.
14344
14438
  tags:
14345
14439
  - inference
14346
14440
  requestBody:
@@ -14373,7 +14467,7 @@ paths:
14373
14467
  - activeProfile
14374
14468
  additionalProperties: false
14375
14469
  "400":
14376
- description: Unknown or disabled profile name
14470
+ description: Unknown or disabled profile name, or a profile that cannot serve requests
14377
14471
  /v1/inference/callsites:
14378
14472
  get:
14379
14473
  operationId: inference_callsites_get
@@ -14548,7 +14642,9 @@ paths:
14548
14642
  summary: Create an inference profile
14549
14643
  description:
14550
14644
  Create a validated custom profile. The provider must be a known LLM provider, the model must be in the
14551
- catalog (unless allowUnlisted), and a referenced connection must exist. Managed default names cannot be created.
14645
+ catalog (unless allowUnlisted), a referenced connection must exist, and the profile must be able to dispatch — a
14646
+ valid provider id with no credentialed connection behind it is rejected unless allowUnavailable is set, in which
14647
+ case it is created with a warning.
14552
14648
  tags:
14553
14649
  - inference
14554
14650
  requestBody:
@@ -14587,6 +14683,8 @@ paths:
14587
14683
  type: string
14588
14684
  allowUnlisted:
14589
14685
  type: boolean
14686
+ allowUnavailable:
14687
+ type: boolean
14590
14688
  required:
14591
14689
  - name
14592
14690
  - provider
@@ -14599,7 +14697,7 @@ paths:
14599
14697
  schema:
14600
14698
  $ref: "#/components/schemas/InferenceProfileWriteResult"
14601
14699
  "400":
14602
- description: Invalid provider, uncataloged model, or missing connection
14700
+ description: Invalid provider, uncataloged model, missing connection, or a profile that cannot serve requests
14603
14701
  "409":
14604
14702
  description: A profile with this name already exists
14605
14703
  /v1/inference/profiles/{name}:
@@ -14637,7 +14735,9 @@ paths:
14637
14735
  "404":
14638
14736
  description: Profile not found
14639
14737
  "409":
14640
- description: Profile is still referenced by activeProfile, advisorProfile, a call site, or a mix arm
14738
+ description:
14739
+ Profile is still referenced by activeProfile, advisorProfile, a call site, a default-tier override, or a
14740
+ mix arm
14641
14741
  get:
14642
14742
  operationId: inference_profiles_by_name_get
14643
14743
  summary: Get an effective inference profile
@@ -14663,8 +14763,9 @@ paths:
14663
14763
  operationId: inference_profiles_by_name_patch
14664
14764
  summary: Update an inference profile
14665
14765
  description:
14666
- Partial update of a custom profile with the same write-time validation as create. Managed default profiles
14667
- are read-only.
14766
+ Partial update of a custom profile with the same write-time validation as create. The dispatch-availability
14767
+ guard (and its allowUnavailable escape hatch) applies when the update changes provider, model, or connection;
14768
+ metadata-only edits skip it. Managed default profiles are read-only.
14668
14769
  tags:
14669
14770
  - inference
14670
14771
  parameters:
@@ -14706,6 +14807,8 @@ paths:
14706
14807
  type: string
14707
14808
  allowUnlisted:
14708
14809
  type: boolean
14810
+ allowUnavailable:
14811
+ type: boolean
14709
14812
  responses:
14710
14813
  "200":
14711
14814
  description: Successful response
@@ -14714,7 +14817,7 @@ paths:
14714
14817
  schema:
14715
14818
  $ref: "#/components/schemas/InferenceProfileWriteResult"
14716
14819
  "400":
14717
- description: Invalid fields, or attempt to edit a managed profile
14820
+ description: Invalid fields, a profile that cannot serve requests, or attempt to edit a managed profile
14718
14821
  "404":
14719
14822
  description: Profile not found
14720
14823
  /v1/inference/provider-connections:
@@ -19052,6 +19155,76 @@ paths:
19052
19155
  - requestId
19053
19156
  - entries
19054
19157
  additionalProperties: false
19158
+ answeredQuestion:
19159
+ type: object
19160
+ properties:
19161
+ requestId:
19162
+ type: string
19163
+ questions:
19164
+ type: array
19165
+ items:
19166
+ type: object
19167
+ properties:
19168
+ id:
19169
+ type: string
19170
+ question:
19171
+ type: string
19172
+ description:
19173
+ type: string
19174
+ options:
19175
+ type: array
19176
+ items:
19177
+ type: object
19178
+ properties:
19179
+ id:
19180
+ type: string
19181
+ label:
19182
+ type: string
19183
+ description:
19184
+ type: string
19185
+ required:
19186
+ - id
19187
+ - label
19188
+ additionalProperties: false
19189
+ freeTextPlaceholder:
19190
+ type: string
19191
+ required:
19192
+ - id
19193
+ - question
19194
+ - options
19195
+ additionalProperties: false
19196
+ responses:
19197
+ type: array
19198
+ items:
19199
+ type: object
19200
+ properties:
19201
+ questionId:
19202
+ type: string
19203
+ decision:
19204
+ type: string
19205
+ enum:
19206
+ - option
19207
+ - free_text
19208
+ - skipped
19209
+ optionId:
19210
+ type: string
19211
+ text:
19212
+ type: string
19213
+ required:
19214
+ - questionId
19215
+ - decision
19216
+ additionalProperties: false
19217
+ overall:
19218
+ type: string
19219
+ enum:
19220
+ - completed
19221
+ - closed
19222
+ required:
19223
+ - requestId
19224
+ - questions
19225
+ - responses
19226
+ - overall
19227
+ additionalProperties: false
19055
19228
  required:
19056
19229
  - name
19057
19230
  - input
@@ -19491,6 +19664,76 @@ paths:
19491
19664
  - requestId
19492
19665
  - entries
19493
19666
  additionalProperties: false
19667
+ answeredQuestion:
19668
+ type: object
19669
+ properties:
19670
+ requestId:
19671
+ type: string
19672
+ questions:
19673
+ type: array
19674
+ items:
19675
+ type: object
19676
+ properties:
19677
+ id:
19678
+ type: string
19679
+ question:
19680
+ type: string
19681
+ description:
19682
+ type: string
19683
+ options:
19684
+ type: array
19685
+ items:
19686
+ type: object
19687
+ properties:
19688
+ id:
19689
+ type: string
19690
+ label:
19691
+ type: string
19692
+ description:
19693
+ type: string
19694
+ required:
19695
+ - id
19696
+ - label
19697
+ additionalProperties: false
19698
+ freeTextPlaceholder:
19699
+ type: string
19700
+ required:
19701
+ - id
19702
+ - question
19703
+ - options
19704
+ additionalProperties: false
19705
+ responses:
19706
+ type: array
19707
+ items:
19708
+ type: object
19709
+ properties:
19710
+ questionId:
19711
+ type: string
19712
+ decision:
19713
+ type: string
19714
+ enum:
19715
+ - option
19716
+ - free_text
19717
+ - skipped
19718
+ optionId:
19719
+ type: string
19720
+ text:
19721
+ type: string
19722
+ required:
19723
+ - questionId
19724
+ - decision
19725
+ additionalProperties: false
19726
+ overall:
19727
+ type: string
19728
+ enum:
19729
+ - completed
19730
+ - closed
19731
+ required:
19732
+ - requestId
19733
+ - questions
19734
+ - responses
19735
+ - overall
19736
+ additionalProperties: false
19494
19737
  required:
19495
19738
  - name
19496
19739
  - input
@@ -19836,8 +20079,8 @@ paths:
19836
20079
  type: string
19837
20080
  clientOs:
19838
20081
  description:
19839
- Client OS surface ("web" | "ios" | "macos" | "android"), reported separately from `interface`. Drives the
19840
- per-turn `client_os` context only; does not affect transport/host-proxy capabilities.
20082
+ Client OS surface ("web" | "ios" | "macos" | "windows" | "android"), reported separately from `interface`.
20083
+ Drives the per-turn `client_os` context only; does not affect transport/host-proxy capabilities.
19841
20084
  type: string
19842
20085
  visibleAppId:
19843
20086
  description:
@@ -20652,6 +20895,10 @@ paths:
20652
20895
  responses:
20653
20896
  "200":
20654
20897
  description: Successful response
20898
+ "403":
20899
+ description: The queued message was enqueued by a different actor principal.
20900
+ "404":
20901
+ description: Conversation or queued message not found.
20655
20902
  /v1/migrations/export:
20656
20903
  post:
20657
20904
  operationId: migrations_export_post
@@ -21718,6 +21965,7 @@ paths:
21718
21965
  - platform
21719
21966
  - a2a
21720
21967
  - discord
21968
+ - plugin
21721
21969
  - scheduler
21722
21970
  - watcher
21723
21971
  sourceContextId:
@@ -21767,8 +22015,6 @@ paths:
21767
22015
  type: string
21768
22016
  throwOnError:
21769
22017
  type: boolean
21770
- originatingConversationId:
21771
- type: string
21772
22018
  required:
21773
22019
  - sourceEventName
21774
22020
  - sourceChannel
@@ -21909,6 +22155,11 @@ paths:
21909
22155
  anyOf:
21910
22156
  - type: string
21911
22157
  - type: "null"
22158
+ acts_as:
22159
+ type: string
22160
+ enum:
22161
+ - user
22162
+ - assistant
21912
22163
  required:
21913
22164
  - provider_key
21914
22165
  - display_name
@@ -21920,6 +22171,7 @@ paths:
21920
22171
  - supports_managed_mode
21921
22172
  - managed_service_is_paid
21922
22173
  - feature_flag
22174
+ - acts_as
21923
22175
  additionalProperties: false
21924
22176
  - type: "null"
21925
22177
  apps:
@@ -22437,6 +22689,11 @@ paths:
22437
22689
  anyOf:
22438
22690
  - type: string
22439
22691
  - type: "null"
22692
+ acts_as:
22693
+ type: string
22694
+ enum:
22695
+ - user
22696
+ - assistant
22440
22697
  required:
22441
22698
  - provider_key
22442
22699
  - display_name
@@ -22448,6 +22705,7 @@ paths:
22448
22705
  - supports_managed_mode
22449
22706
  - managed_service_is_paid
22450
22707
  - feature_flag
22708
+ - acts_as
22451
22709
  additionalProperties: false
22452
22710
  required:
22453
22711
  - providers
@@ -24012,14 +24270,43 @@ paths:
24012
24270
  description:
24013
24271
  Registered tool names from `tools/<name>.{ts,js}` (filenames derived to tool names, e.g. `create-issue` →
24014
24272
  `create_issue`).
24273
+ schedules:
24274
+ type: array
24275
+ items:
24276
+ type: object
24277
+ properties:
24278
+ name:
24279
+ type: string
24280
+ description: "Schedule name: the declaration directory's name."
24281
+ cadence:
24282
+ type: string
24283
+ description: Raw schedule `expression` string from the declaration's config.
24284
+ mode:
24285
+ type: string
24286
+ enum:
24287
+ - execute
24288
+ - script
24289
+ description: "`execute` for a markdown prompt entrypoint, `script` for `index.sh`."
24290
+ required:
24291
+ - name
24292
+ - cadence
24293
+ - mode
24294
+ additionalProperties: false
24295
+ description:
24296
+ Schedules declared under `schedules/`, each a `<name>/` directory with `config.json` plus one entrypoint.
24297
+ Display surface only; files directly under `schedules/` and unsupported declarations are
24298
+ omitted.
24015
24299
  required:
24016
24300
  - skills
24017
24301
  - hooks
24018
24302
  - tools
24303
+ - schedules
24019
24304
  additionalProperties: false
24020
24305
  description: Surfaces the installed copy contributes, read from its on-disk tree.
24021
24306
  - type: "null"
24022
- description: Surfaces the installed copy contributes (skills, hooks, tools); null when the plugin is not installed.
24307
+ description:
24308
+ Surfaces the installed copy contributes (skills, hooks, tools, schedules); null when the plugin is not
24309
+ installed.
24023
24310
  required:
24024
24311
  - name
24025
24312
  - installed
@@ -24052,8 +24339,9 @@ paths:
24052
24339
  non-conflicting edits from both sides forward and resolving conflicting hunks toward the local edit (`ours`) or
24053
24340
  the target (`theirs`), or writing git conflict markers into the file and reporting them in
24054
24341
  `conflicts`/`binaryConflicts` for the assistant to resolve (`assistant`). A merge strategy whose install-time
24055
- baseline cannot be reconstructed returns 409. Mirrors the CLI''s `assistant plugins upgrade <name> [--strategy
24056
- <s>]`.'
24342
+ baseline cannot be reconstructed returns 409. Pass `marketplaceOnly` to refuse the untrusted direct path
24343
+ outright (409), which is what the unattended auto-update sweep does. Mirrors the CLI''s `assistant plugins
24344
+ upgrade <name> [--strategy <s>]`.'
24057
24345
  tags:
24058
24346
  - plugins
24059
24347
  parameters:
@@ -24083,6 +24371,13 @@ paths:
24083
24371
  - theirs
24084
24372
  - overwrite
24085
24373
  - assistant
24374
+ marketplaceOnly:
24375
+ description:
24376
+ Refuse the upgrade (409) when the marketplace does not claim this plugin, instead of advancing it to
24377
+ whatever its recorded GitHub ref now resolves to. Set by unattended callers such as the automatic
24378
+ update sweep, for which running code no curator reviewed is never an acceptable outcome. Defaults to
24379
+ false.
24380
+ type: boolean
24086
24381
  responses:
24087
24382
  "200":
24088
24383
  description: Successful response
@@ -24182,8 +24477,9 @@ paths:
24182
24477
  description: No copy of the plugin is installed, or its source resolves to nothing.
24183
24478
  "409":
24184
24479
  description:
24185
- The install has neither a marketplace entry nor a recorded GitHub source to advance to, or a merge strategy
24186
- was requested whose install-time baseline cannot be reconstructed.
24480
+ The install has neither a marketplace entry nor a recorded GitHub source to advance to, a `marketplaceOnly`
24481
+ upgrade was requested for an install the marketplace does not claim, or a merge strategy was requested whose
24482
+ install-time baseline cannot be reconstructed.
24187
24483
  "503":
24188
24484
  description: The plugin source (GitHub) was temporarily unavailable; the upgrade is retryable.
24189
24485
  /v1/plugins/{name}/versions:
@@ -24957,8 +25253,9 @@ paths:
24957
25253
  per conversation after activity (time/message thresholds, pre-compaction) — there is no global schedule, so
24958
25254
  `nextRunAt` is always null and no run-now endpoint exists. `intervalMs` is the per-conversation time threshold
24959
25255
  (`memory.retrospective.timeThresholdMs`), `lastRunAt` is the `createdAt` of the most recent retrospective
24960
- conversation across both legacy and fork sources, and `available` gates on `memory.enabled` (not
24961
- `memory.v2.enabled`).
25256
+ conversation across both legacy and fork sources, `available` gates on `memory.enabled` (not
25257
+ `memory.v2.enabled`), and `enabled` narrows that by `memory.retrospective.enabled`, the per-pass kill switch
25258
+ that stops retrospectives without disabling the rest of memory.
24962
25259
  tags:
24963
25260
  - retrospective
24964
25261
  responses:
@@ -25244,6 +25541,12 @@ paths:
25244
25541
  schema:
25245
25542
  type: string
25246
25543
  description: When 'true', include deferred schedules that are normally hidden.
25544
+ - name: inference_profile
25545
+ in: query
25546
+ required: false
25547
+ schema:
25548
+ type: string
25549
+ description: Return only schedules pinned to this inference profile (llm.profiles key).
25247
25550
  responses:
25248
25551
  "200":
25249
25552
  description: Successful response
@@ -25359,8 +25662,24 @@ paths:
25359
25662
  anyOf:
25360
25663
  - type: string
25361
25664
  - type: "null"
25665
+ sourceKey:
25666
+ anyOf:
25667
+ - type: string
25668
+ - type: "null"
25669
+ description:
25670
+ Plugin declaration this schedule mirrors (plugin:<pluginName>/<scheduleName>); null for user-created
25671
+ schedules
25672
+ userEnabled:
25673
+ anyOf:
25674
+ - type: boolean
25675
+ - type: "null"
25676
+ description:
25677
+ User enable/disable override on a plugin-sourced schedule; null when the declaration's own enabled value
25678
+ applies. Always null for user-created schedules.
25362
25679
  isOneShot:
25363
25680
  type: boolean
25681
+ isDeferred:
25682
+ type: boolean
25364
25683
  required:
25365
25684
  - id
25366
25685
  - name
@@ -25391,7 +25710,10 @@ paths:
25391
25710
  - reuseConversation
25392
25711
  - wakeConversationId
25393
25712
  - workflowName
25713
+ - sourceKey
25714
+ - userEnabled
25394
25715
  - isOneShot
25716
+ - isDeferred
25395
25717
  additionalProperties: false
25396
25718
  description: Schedule objects
25397
25719
  required:
@@ -25453,8 +25775,10 @@ paths:
25453
25775
  - type: string
25454
25776
  - type: "null"
25455
25777
  description:
25456
- Inference profile (llm.profiles key) the schedule's runs use. Omitted or null = default, i.e. the mainAgent
25457
- call-site model selection.
25778
+ Inference profile (llm.profiles key) the schedule's runs use. Omitted or null pins the schedule to the
25779
+ currently resolved default profile, so its model does not move when that default changes.
25780
+ Workflow-mode schedules resolve a model per workflow step, so the pin is recorded but does not
25781
+ govern their runs.
25458
25782
  required:
25459
25783
  - name
25460
25784
  - expression
@@ -25571,8 +25895,24 @@ paths:
25571
25895
  anyOf:
25572
25896
  - type: string
25573
25897
  - type: "null"
25898
+ sourceKey:
25899
+ anyOf:
25900
+ - type: string
25901
+ - type: "null"
25902
+ description:
25903
+ Plugin declaration this schedule mirrors (plugin:<pluginName>/<scheduleName>); null for user-created
25904
+ schedules
25905
+ userEnabled:
25906
+ anyOf:
25907
+ - type: boolean
25908
+ - type: "null"
25909
+ description:
25910
+ User enable/disable override on a plugin-sourced schedule; null when the declaration's own enabled value
25911
+ applies. Always null for user-created schedules.
25574
25912
  isOneShot:
25575
25913
  type: boolean
25914
+ isDeferred:
25915
+ type: boolean
25576
25916
  required:
25577
25917
  - id
25578
25918
  - name
@@ -25603,7 +25943,10 @@ paths:
25603
25943
  - reuseConversation
25604
25944
  - wakeConversationId
25605
25945
  - workflowName
25946
+ - sourceKey
25947
+ - userEnabled
25606
25948
  - isOneShot
25949
+ - isDeferred
25607
25950
  additionalProperties: false
25608
25951
  description: The created schedule
25609
25952
  required:
@@ -25737,8 +26080,24 @@ paths:
25737
26080
  anyOf:
25738
26081
  - type: string
25739
26082
  - type: "null"
26083
+ sourceKey:
26084
+ anyOf:
26085
+ - type: string
26086
+ - type: "null"
26087
+ description:
26088
+ Plugin declaration this schedule mirrors (plugin:<pluginName>/<scheduleName>); null for user-created
26089
+ schedules
26090
+ userEnabled:
26091
+ anyOf:
26092
+ - type: boolean
26093
+ - type: "null"
26094
+ description:
26095
+ User enable/disable override on a plugin-sourced schedule; null when the declaration's own enabled value
26096
+ applies. Always null for user-created schedules.
25740
26097
  isOneShot:
25741
26098
  type: boolean
26099
+ isDeferred:
26100
+ type: boolean
25742
26101
  required:
25743
26102
  - id
25744
26103
  - name
@@ -25769,7 +26128,10 @@ paths:
25769
26128
  - reuseConversation
25770
26129
  - wakeConversationId
25771
26130
  - workflowName
26131
+ - sourceKey
26132
+ - userEnabled
25772
26133
  - isOneShot
26134
+ - isDeferred
25773
26135
  additionalProperties: false
25774
26136
  description: Updated schedule list
25775
26137
  required:
@@ -25900,8 +26262,24 @@ paths:
25900
26262
  anyOf:
25901
26263
  - type: string
25902
26264
  - type: "null"
26265
+ sourceKey:
26266
+ anyOf:
26267
+ - type: string
26268
+ - type: "null"
26269
+ description:
26270
+ Plugin declaration this schedule mirrors (plugin:<pluginName>/<scheduleName>); null for user-created
26271
+ schedules
26272
+ userEnabled:
26273
+ anyOf:
26274
+ - type: boolean
26275
+ - type: "null"
26276
+ description:
26277
+ User enable/disable override on a plugin-sourced schedule; null when the declaration's own enabled value
26278
+ applies. Always null for user-created schedules.
25903
26279
  isOneShot:
25904
26280
  type: boolean
26281
+ isDeferred:
26282
+ type: boolean
25905
26283
  required:
25906
26284
  - id
25907
26285
  - name
@@ -25932,7 +26310,10 @@ paths:
25932
26310
  - reuseConversation
25933
26311
  - wakeConversationId
25934
26312
  - workflowName
26313
+ - sourceKey
26314
+ - userEnabled
25935
26315
  - isOneShot
26316
+ - isDeferred
25936
26317
  additionalProperties: false
25937
26318
  description: Schedule object
25938
26319
  required:
@@ -26005,8 +26386,9 @@ paths:
26005
26386
  - type: string
26006
26387
  - type: "null"
26007
26388
  description:
26008
- Inference profile (llm.profiles key) the schedule's runs use; null clears it back to the default mainAgent
26009
- call-site model selection
26389
+ Inference profile (llm.profiles key) the schedule's runs use; null re-pins the schedule to the currently
26390
+ resolved default profile. Workflow-mode schedules resolve a model per workflow step, so the pin is
26391
+ recorded but does not govern their runs.
26010
26392
  responses:
26011
26393
  "200":
26012
26394
  description: Successful response
@@ -26122,8 +26504,24 @@ paths:
26122
26504
  anyOf:
26123
26505
  - type: string
26124
26506
  - type: "null"
26507
+ sourceKey:
26508
+ anyOf:
26509
+ - type: string
26510
+ - type: "null"
26511
+ description:
26512
+ Plugin declaration this schedule mirrors (plugin:<pluginName>/<scheduleName>); null for user-created
26513
+ schedules
26514
+ userEnabled:
26515
+ anyOf:
26516
+ - type: boolean
26517
+ - type: "null"
26518
+ description:
26519
+ User enable/disable override on a plugin-sourced schedule; null when the declaration's own enabled value
26520
+ applies. Always null for user-created schedules.
26125
26521
  isOneShot:
26126
26522
  type: boolean
26523
+ isDeferred:
26524
+ type: boolean
26127
26525
  required:
26128
26526
  - id
26129
26527
  - name
@@ -26154,7 +26552,10 @@ paths:
26154
26552
  - reuseConversation
26155
26553
  - wakeConversationId
26156
26554
  - workflowName
26555
+ - sourceKey
26556
+ - userEnabled
26157
26557
  - isOneShot
26558
+ - isDeferred
26158
26559
  additionalProperties: false
26159
26560
  description: Updated schedule list
26160
26561
  required:
@@ -26288,8 +26689,24 @@ paths:
26288
26689
  anyOf:
26289
26690
  - type: string
26290
26691
  - type: "null"
26692
+ sourceKey:
26693
+ anyOf:
26694
+ - type: string
26695
+ - type: "null"
26696
+ description:
26697
+ Plugin declaration this schedule mirrors (plugin:<pluginName>/<scheduleName>); null for user-created
26698
+ schedules
26699
+ userEnabled:
26700
+ anyOf:
26701
+ - type: boolean
26702
+ - type: "null"
26703
+ description:
26704
+ User enable/disable override on a plugin-sourced schedule; null when the declaration's own enabled value
26705
+ applies. Always null for user-created schedules.
26291
26706
  isOneShot:
26292
26707
  type: boolean
26708
+ isDeferred:
26709
+ type: boolean
26293
26710
  required:
26294
26711
  - id
26295
26712
  - name
@@ -26320,7 +26737,10 @@ paths:
26320
26737
  - reuseConversation
26321
26738
  - wakeConversationId
26322
26739
  - workflowName
26740
+ - sourceKey
26741
+ - userEnabled
26323
26742
  - isOneShot
26743
+ - isDeferred
26324
26744
  additionalProperties: false
26325
26745
  description: Updated schedule list
26326
26746
  required:
@@ -26330,7 +26750,9 @@ paths:
26330
26750
  post:
26331
26751
  operationId: schedules_by_id_run_post
26332
26752
  summary: Run schedule now
26333
- description: Trigger an immediate execution of a schedule.
26753
+ description:
26754
+ Trigger an immediate execution of a schedule. A plugin-sourced schedule is rejected with a 400 when its
26755
+ plugin is disabled or no longer declares it.
26334
26756
  tags:
26335
26757
  - schedules
26336
26758
  parameters:
@@ -26454,8 +26876,24 @@ paths:
26454
26876
  anyOf:
26455
26877
  - type: string
26456
26878
  - type: "null"
26879
+ sourceKey:
26880
+ anyOf:
26881
+ - type: string
26882
+ - type: "null"
26883
+ description:
26884
+ Plugin declaration this schedule mirrors (plugin:<pluginName>/<scheduleName>); null for user-created
26885
+ schedules
26886
+ userEnabled:
26887
+ anyOf:
26888
+ - type: boolean
26889
+ - type: "null"
26890
+ description:
26891
+ User enable/disable override on a plugin-sourced schedule; null when the declaration's own enabled value
26892
+ applies. Always null for user-created schedules.
26457
26893
  isOneShot:
26458
26894
  type: boolean
26895
+ isDeferred:
26896
+ type: boolean
26459
26897
  required:
26460
26898
  - id
26461
26899
  - name
@@ -26486,7 +26924,10 @@ paths:
26486
26924
  - reuseConversation
26487
26925
  - wakeConversationId
26488
26926
  - workflowName
26927
+ - sourceKey
26928
+ - userEnabled
26489
26929
  - isOneShot
26930
+ - isDeferred
26490
26931
  additionalProperties: false
26491
26932
  description: Updated schedule list
26492
26933
  required:
@@ -26621,7 +27062,7 @@ paths:
26621
27062
  post:
26622
27063
  operationId: schedules_by_id_toggle_post
26623
27064
  summary: Toggle schedule
26624
- description: Enable or disable a schedule.
27065
+ description: Enable or disable a schedule. On a plugin-managed schedule this records the user's override (userEnabled).
26625
27066
  tags:
26626
27067
  - schedules
26627
27068
  parameters:
@@ -26757,8 +27198,24 @@ paths:
26757
27198
  anyOf:
26758
27199
  - type: string
26759
27200
  - type: "null"
27201
+ sourceKey:
27202
+ anyOf:
27203
+ - type: string
27204
+ - type: "null"
27205
+ description:
27206
+ Plugin declaration this schedule mirrors (plugin:<pluginName>/<scheduleName>); null for user-created
27207
+ schedules
27208
+ userEnabled:
27209
+ anyOf:
27210
+ - type: boolean
27211
+ - type: "null"
27212
+ description:
27213
+ User enable/disable override on a plugin-sourced schedule; null when the declaration's own enabled value
27214
+ applies. Always null for user-created schedules.
26760
27215
  isOneShot:
26761
27216
  type: boolean
27217
+ isDeferred:
27218
+ type: boolean
26762
27219
  required:
26763
27220
  - id
26764
27221
  - name
@@ -26789,12 +27246,55 @@ paths:
26789
27246
  - reuseConversation
26790
27247
  - wakeConversationId
26791
27248
  - workflowName
27249
+ - sourceKey
27250
+ - userEnabled
26792
27251
  - isOneShot
27252
+ - isDeferred
26793
27253
  additionalProperties: false
26794
27254
  description: Updated schedule list
26795
27255
  required:
26796
27256
  - schedules
26797
27257
  additionalProperties: false
27258
+ /v1/schedules/reassign-profile:
27259
+ post:
27260
+ operationId: schedules_reassignprofile_post
27261
+ summary: Reassign schedules to another inference profile
27262
+ description:
27263
+ Move schedules onto one inference profile. Pass 'from' to move only the schedules pinned to that profile,
27264
+ so deleting a profile does not leave its schedules pointing at a name that no longer exists. Omit 'from' to move
27265
+ every schedule, which re-pins the whole set onto one profile. Schedules already pinned to the target are
27266
+ skipped.
27267
+ tags:
27268
+ - schedules
27269
+ requestBody:
27270
+ required: true
27271
+ content:
27272
+ application/json:
27273
+ schema:
27274
+ type: object
27275
+ properties:
27276
+ from:
27277
+ description: Inference profile key the schedules are pinned to now; omit to select every schedule
27278
+ type: string
27279
+ to:
27280
+ type: string
27281
+ description: Inference profile key to move them to; must be configured
27282
+ required:
27283
+ - to
27284
+ responses:
27285
+ "200":
27286
+ description: Successful response
27287
+ content:
27288
+ application/json:
27289
+ schema:
27290
+ type: object
27291
+ properties:
27292
+ reassigned:
27293
+ type: number
27294
+ description: Number of schedules moved
27295
+ required:
27296
+ - reassigned
27297
+ additionalProperties: false
26798
27298
  /v1/schedules/usage-summary:
26799
27299
  get:
26800
27300
  operationId: schedules_usagesummary_get
@@ -28940,6 +29440,73 @@ paths:
28940
29440
  - isBinary
28941
29441
  - content
28942
29442
  additionalProperties: false
29443
+ /v1/skills/{id}/history:
29444
+ get:
29445
+ operationId: skills_by_id_history_get
29446
+ summary: Get skill revision history
29447
+ description:
29448
+ "Return a skill's recent updates, newest first, each with a combined diff across the skill directory.
29449
+ Read-only: revisions come from the workspace git repository, which already retains prior content. Commits whose
29450
+ only in-skill change is the `lastUsedAt` usage stamp are omitted, so entries are edits rather than loads."
29451
+ tags:
29452
+ - skills
29453
+ parameters:
29454
+ - name: id
29455
+ in: path
29456
+ required: true
29457
+ schema:
29458
+ type: string
29459
+ - name: limit
29460
+ in: query
29461
+ required: false
29462
+ schema:
29463
+ type: integer
29464
+ description: Maximum revisions to return, newest first. Defaults to 20 and is clamped to 100.
29465
+ responses:
29466
+ "200":
29467
+ description: Successful response
29468
+ content:
29469
+ application/json:
29470
+ schema:
29471
+ type: object
29472
+ properties:
29473
+ skillId:
29474
+ type: string
29475
+ description: The skill these revisions belong to
29476
+ revisions:
29477
+ type: array
29478
+ items:
29479
+ type: object
29480
+ properties:
29481
+ id:
29482
+ type: string
29483
+ description: Opaque revision identifier
29484
+ changedAt:
29485
+ type: string
29486
+ description: ISO-8601 time of the update
29487
+ files:
29488
+ type: array
29489
+ items:
29490
+ type: string
29491
+ description: Paths changed, relative to the skill directory
29492
+ diff:
29493
+ type: string
29494
+ description: Unified diff of this update, scoped to the skill
29495
+ required:
29496
+ - id
29497
+ - changedAt
29498
+ - files
29499
+ - diff
29500
+ additionalProperties: false
29501
+ description: Recent updates, newest first
29502
+ truncatedByCompaction:
29503
+ type: boolean
29504
+ description: Older history was squashed away, so the oldest entry is a floor rather than the skill's creation
29505
+ required:
29506
+ - skillId
29507
+ - revisions
29508
+ - truncatedByCompaction
29509
+ additionalProperties: false
28943
29510
  /v1/skills/{id}/inspect:
28944
29511
  get:
28945
29512
  operationId: skills_by_id_inspect_get
@@ -34370,13 +34937,14 @@ components:
34370
34937
  type: string
34371
34938
  enum:
34372
34939
  - ok
34373
- - missing_default
34940
+ - incomplete
34374
34941
  - missing_connection
34375
34942
  - missing_credential
34376
34943
  - provider_mismatch
34377
34944
  - unsupported_auth
34378
34945
  - vellum_unauthenticated
34379
34946
  - unknown
34947
+ - missing_default
34380
34948
  message:
34381
34949
  type: string
34382
34950
  required:
@@ -34602,6 +35170,7 @@ components:
34602
35170
  type: string
34603
35171
  enum:
34604
35172
  - ok
35173
+ - incomplete
34605
35174
  - missing_connection
34606
35175
  - missing_credential
34607
35176
  - provider_mismatch
@@ -34630,11 +35199,14 @@ components:
34630
35199
  type: array
34631
35200
  items:
34632
35201
  type: string
35202
+ verify:
35203
+ type: string
34633
35204
  required:
34634
35205
  - ok
34635
35206
  - name
34636
35207
  - entry
34637
35208
  - warnings
35209
+ - verify
34638
35210
  additionalProperties: false
34639
35211
  InferenceProfileDetail:
34640
35212
  type: object