@vellumai/assistant 0.11.2 → 0.11.3-staging.2

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 (720) hide show
  1. package/ARCHITECTURE.md +58 -3
  2. package/docs/trusted-contact-access.md +9 -5
  3. package/docs/vellum-doctor.md +195 -0
  4. package/node_modules/@vellumai/ces-client/node_modules/@vellumai/service-contracts/src/channels.ts +39 -0
  5. package/node_modules/@vellumai/ces-client/node_modules/@vellumai/service-contracts/src/ingress.ts +10 -0
  6. package/node_modules/@vellumai/ces-client/node_modules/@vellumai/service-contracts/src/remote-web-pairing.ts +6 -0
  7. package/node_modules/@vellumai/ces-client/src/index.ts +1 -0
  8. package/node_modules/@vellumai/ces-client/src/rpc-client.ts +19 -2
  9. package/node_modules/@vellumai/environments/package.json +2 -1
  10. package/node_modules/@vellumai/environments/src/__tests__/cloud-assistant-hub-url.test.ts +38 -0
  11. package/node_modules/@vellumai/environments/src/__tests__/install-layout.test.ts +98 -0
  12. package/node_modules/@vellumai/environments/src/__tests__/package-boundary.test.ts +5 -5
  13. package/node_modules/@vellumai/environments/src/index.ts +17 -6
  14. package/node_modules/@vellumai/environments/src/install-layout.ts +49 -0
  15. package/node_modules/@vellumai/environments/src/seeds.ts +29 -0
  16. package/node_modules/@vellumai/gateway-client/node_modules/@vellumai/service-contracts/src/channels.ts +39 -0
  17. package/node_modules/@vellumai/gateway-client/node_modules/@vellumai/service-contracts/src/ingress.ts +10 -0
  18. package/node_modules/@vellumai/gateway-client/node_modules/@vellumai/service-contracts/src/remote-web-pairing.ts +6 -0
  19. package/node_modules/@vellumai/gateway-client/src/index.ts +4 -0
  20. package/node_modules/@vellumai/gateway-client/src/verification-session-contract.ts +91 -6
  21. package/node_modules/@vellumai/ipc-server-utils/src/endpoint.test.ts +36 -0
  22. package/node_modules/@vellumai/ipc-server-utils/src/endpoint.ts +142 -0
  23. package/node_modules/@vellumai/ipc-server-utils/src/index.ts +2 -0
  24. package/node_modules/@vellumai/ipc-server-utils/src/listen-options.ts +3 -0
  25. package/node_modules/@vellumai/ipc-server-utils/src/socket-watchdog.test.ts +15 -1
  26. package/node_modules/@vellumai/ipc-server-utils/src/socket-watchdog.ts +17 -2
  27. package/node_modules/@vellumai/service-contracts/src/channels.ts +39 -0
  28. package/node_modules/@vellumai/service-contracts/src/ingress.ts +10 -0
  29. package/node_modules/@vellumai/service-contracts/src/remote-web-pairing.ts +6 -0
  30. package/node_modules/@vellumai/slack-text/src/index.ts +16 -2
  31. package/openapi.yaml +589 -30
  32. package/package.json +1 -1
  33. package/src/__tests__/agent-image-optimize.test.ts +4 -4
  34. package/src/__tests__/agent-loop-mutable-latest-user-message.test.ts +113 -66
  35. package/src/__tests__/agent-loop-override-profile.test.ts +38 -48
  36. package/src/__tests__/agent-loop-subagent-billing-headers.test.ts +166 -0
  37. package/src/__tests__/agent-wake-disk-pressure-callsite.test.ts +1 -0
  38. package/src/__tests__/agent-wake-override-profile.test.ts +1 -0
  39. package/src/__tests__/answered-question-persistence.test.ts +240 -0
  40. package/src/__tests__/anthropic-provider.test.ts +165 -30
  41. package/src/__tests__/app-control-flow.test.ts +9 -8
  42. package/src/__tests__/assistant-event-hub.test.ts +48 -0
  43. package/src/__tests__/attachments-store-heic-normalize.test.ts +16 -12
  44. package/src/__tests__/attachments-store.test.ts +130 -68
  45. package/src/__tests__/attachments.test.ts +36 -36
  46. package/src/__tests__/background-workers-disk-pressure.test.ts +1 -1
  47. package/src/__tests__/call-start-guardian-guard.test.ts +18 -4
  48. package/src/__tests__/canned-reply-release.test.ts +86 -0
  49. package/src/__tests__/channel-guardian.test.ts +59 -29
  50. package/src/__tests__/channel-readiness-telegram-remote.test.ts +154 -0
  51. package/src/__tests__/channel-setup-panel-ack.test.ts +6 -5
  52. package/src/__tests__/client-os-metadata-persistence.test.ts +103 -4
  53. package/src/__tests__/compactor-image-manifest-trust.test.ts +1 -1
  54. package/src/__tests__/consult-deadline.test.ts +65 -0
  55. package/src/__tests__/conversation-agent-loop.test.ts +438 -2
  56. package/src/__tests__/conversation-disk-view-integration.test.ts +5 -1
  57. package/src/__tests__/conversation-disk-view.test.ts +4 -4
  58. package/src/__tests__/conversation-error.test.ts +22 -3
  59. package/src/__tests__/conversation-fork-crud.test.ts +5 -1
  60. package/src/__tests__/conversation-fork-referential.test.ts +352 -0
  61. package/src/__tests__/conversation-fork-retrospective.test.ts +5 -1
  62. package/src/__tests__/conversation-group-tools.test.ts +32 -2
  63. package/src/__tests__/conversation-inference-profile-route.test.ts +27 -1
  64. package/src/__tests__/conversation-initial-prompt.test.ts +51 -22
  65. package/src/__tests__/conversation-key-store-bootstrap-cleanup.test.ts +119 -0
  66. package/src/__tests__/conversation-key-store-origin.test.ts +105 -0
  67. package/src/__tests__/conversation-list-recency-ordering.test.ts +104 -0
  68. package/src/__tests__/conversation-origin-at-creation.test.ts +153 -0
  69. package/src/__tests__/conversation-origin-channel-filter.test.ts +95 -0
  70. package/src/__tests__/conversation-placement-promotion.test.ts +172 -0
  71. package/src/__tests__/conversation-process-app-control-preactivation.test.ts +123 -0
  72. package/src/__tests__/conversation-queue.test.ts +433 -1
  73. package/src/__tests__/conversation-retry-route.test.ts +3 -1
  74. package/src/__tests__/conversation-routes-hidden-queue.test.ts +64 -1
  75. package/src/__tests__/conversation-store-ephemeral.test.ts +4 -0
  76. package/src/__tests__/conversation-store.test.ts +26 -10
  77. package/src/__tests__/conversation-summarize-route.test.ts +1 -1
  78. package/src/__tests__/conversation-surfaces-action-delivery.test.ts +15 -6
  79. package/src/__tests__/conversation-surfaces-activation-emit.test.ts +6 -5
  80. package/src/__tests__/conversation-surfaces-app-control.test.ts +12 -11
  81. package/src/__tests__/conversation-surfaces-app-open.test.ts +11 -5
  82. package/src/__tests__/conversation-surfaces-data-persist.test.ts +5 -4
  83. package/src/__tests__/conversation-surfaces-history-restored-completion.test.ts +967 -0
  84. package/src/__tests__/conversation-surfaces-persisted-info.test.ts +312 -0
  85. package/src/__tests__/conversation-surfaces-queued-emit.test.ts +6 -5
  86. package/src/__tests__/conversation-surfaces-standalone-payloads.test.ts +12 -8
  87. package/src/__tests__/conversation-surfaces-standalone.test.ts +21 -11
  88. package/src/__tests__/conversation-surfaces-state-update.test.ts +7 -11
  89. package/src/__tests__/conversation-surfaces-table-action.test.ts +7 -6
  90. package/src/__tests__/conversation-surfaces-task-progress.test.ts +11 -6
  91. package/src/__tests__/conversation-tool-setup-app-refresh.test.ts +9 -6
  92. package/src/__tests__/conversation-tool-setup-attribution.test.ts +70 -7
  93. package/src/__tests__/conversation-wait-for-idle.test.ts +6 -11
  94. package/src/__tests__/credential-prompt-route.test.ts +57 -7
  95. package/src/__tests__/credential-security-invariants.test.ts +1 -0
  96. package/src/__tests__/cu-unified-flow.test.ts +89 -28
  97. package/src/__tests__/custom-group-listing-visibility.test.ts +1 -1
  98. package/src/__tests__/db-schedule-syntax-migration.test.ts +4 -1
  99. package/src/__tests__/discord-access-request-privacy.test.ts +366 -0
  100. package/src/__tests__/discord-requester-notice-privacy.test.ts +87 -0
  101. package/src/__tests__/disk-pressure-guard.test.ts +55 -55
  102. package/src/__tests__/disk-pressure-routes.test.ts +10 -10
  103. package/src/__tests__/disk-pressure-tools.test.ts +2 -2
  104. package/src/__tests__/disk-usage.test.ts +35 -20
  105. package/src/__tests__/document-sync-tags.test.ts +379 -0
  106. package/src/__tests__/document-update-default-surface.test.ts +28 -0
  107. package/src/__tests__/dynamic-skill-background-guard.test.ts +2 -2
  108. package/src/__tests__/emit-signal-routing-intent.test.ts +3 -4
  109. package/src/__tests__/ensure-conversation-exists.test.ts +8 -5
  110. package/src/__tests__/events-dev-bypass-actor.test.ts +183 -1
  111. package/src/__tests__/evict-conversations-for-reload.test.ts +90 -0
  112. package/src/__tests__/file-list-tool.test.ts +12 -10
  113. package/src/__tests__/file-ops-service.test.ts +151 -44
  114. package/src/__tests__/file-read-container-boundary.test.ts +137 -0
  115. package/src/__tests__/file-read-tool.test.ts +21 -9
  116. package/src/__tests__/file-url-path-guard.test.ts +83 -0
  117. package/src/__tests__/filesystem-tools.test.ts +82 -66
  118. package/src/__tests__/guardian-outbound-http.test.ts +8 -8
  119. package/src/__tests__/helpers/gateway-verification-sessions-stub.ts +14 -1
  120. package/src/__tests__/helpers/hub-clients.ts +42 -0
  121. package/src/__tests__/helpers/mock-conversation.ts +46 -0
  122. package/src/__tests__/helpers/verification-sessions-ipc-sim.ts +61 -57
  123. package/src/__tests__/history-repair.test.ts +112 -12
  124. package/src/__tests__/host-bash-proxy.test.ts +10 -5
  125. package/src/__tests__/host-bash-routes.test.ts +67 -0
  126. package/src/__tests__/host-browser-proxy.test.ts +2 -2
  127. package/src/__tests__/host-cu-proxy.test.ts +3 -7
  128. package/src/__tests__/host-file-proxy.test.ts +3 -7
  129. package/src/__tests__/host-file-read-tool.test.ts +5 -1
  130. package/src/__tests__/host-transfer-proxy-targeted.test.ts +6 -4
  131. package/src/__tests__/http-conversation-lineage.test.ts +2 -5
  132. package/src/__tests__/http-user-message-parity.test.ts +44 -0
  133. package/src/__tests__/identity-routes.test.ts +13 -13
  134. package/src/__tests__/image-conversion.test.ts +29 -26
  135. package/src/__tests__/image-source-path-reinject.test.ts +2 -2
  136. package/src/__tests__/inference-profile-session-handler.test.ts +95 -0
  137. package/src/__tests__/inference-profile-session-ipc.test.ts +25 -0
  138. package/src/__tests__/introduction-card-resolver.test.ts +6 -1
  139. package/src/__tests__/list-messages-attachments.test.ts +56 -32
  140. package/src/__tests__/list-messages-background-tool-completion.test.ts +4 -4
  141. package/src/__tests__/list-messages-client-message-id.test.ts +2 -2
  142. package/src/__tests__/list-messages-hidden-metadata.test.ts +16 -16
  143. package/src/__tests__/list-messages-page-latest.test.ts +61 -61
  144. package/src/__tests__/list-messages-provider-error.test.ts +6 -6
  145. package/src/__tests__/list-messages-queued.test.ts +49 -6
  146. package/src/__tests__/list-messages-system-card.test.ts +4 -4
  147. package/src/__tests__/list-messages-tool-merge.test.ts +9 -9
  148. package/src/__tests__/llm-resolver-override-or-default.test.ts +141 -0
  149. package/src/__tests__/llm-usage-store.test.ts +55 -0
  150. package/src/__tests__/manual-token-reconciliation.test.ts +45 -0
  151. package/src/__tests__/mcp-tool-annotations-risk.test.ts +133 -0
  152. package/src/__tests__/media-stream-server-integration.test.ts +36 -0
  153. package/src/__tests__/migration-export-http.test.ts +1 -1
  154. package/src/__tests__/migration-import-commit-http.test.ts +1 -1
  155. package/src/__tests__/migration-import-preflight-http.test.ts +1 -1
  156. package/src/__tests__/migration-validate-http.test.ts +1 -1
  157. package/src/__tests__/mtime-cache.test.ts +65 -3
  158. package/src/__tests__/notification-platform-adapter.test.ts +104 -0
  159. package/src/__tests__/notification-schedule-notify-dedup.test.ts +1 -1
  160. package/src/__tests__/oauth-provider-profiles.test.ts +4 -2
  161. package/src/__tests__/oauth-provider-seed-logos.test.ts +65 -0
  162. package/src/__tests__/oauth-provider-serializer.test.ts +17 -0
  163. package/src/__tests__/oauth-providers-routes.test.ts +1 -0
  164. package/src/__tests__/openai-responses-prompt-cache.test.ts +5 -2
  165. package/src/__tests__/path-policy.test.ts +164 -1
  166. package/src/__tests__/persist-media-references.test.ts +2 -2
  167. package/src/__tests__/persist-unsendable-image-downscale.test.ts +5 -5
  168. package/src/__tests__/persist-unsendable-image.test.ts +23 -23
  169. package/src/__tests__/persona-resolver.test.ts +154 -0
  170. package/src/__tests__/plugin-api-webhook-url.test.ts +170 -0
  171. package/src/__tests__/plugin-import-boundary-guard.test.ts +6 -0
  172. package/src/__tests__/processing-flag-persist-failure.test.ts +15 -10
  173. package/src/__tests__/profile-availability-incomplete.test.ts +113 -0
  174. package/src/__tests__/profiler-routes.test.ts +13 -13
  175. package/src/__tests__/prompt-cache-cross-turn-stability.test.ts +593 -0
  176. package/src/__tests__/proxy-approval-callback.test.ts +3 -3
  177. package/src/__tests__/queued-message-cancel-and-steer.test.ts +189 -0
  178. package/src/__tests__/queued-message-steer-actor-scoping.test.ts +164 -0
  179. package/src/__tests__/resolve-trust-class.test.ts +20 -0
  180. package/src/__tests__/run-conversation-turn-persistence.test.ts +1 -1
  181. package/src/__tests__/run-due-schedules.test.ts +174 -0
  182. package/src/__tests__/runtime-attachment-metadata.test.ts +15 -7
  183. package/src/__tests__/scaffold-managed-skill-tool.test.ts +166 -0
  184. package/src/__tests__/schedule-routes.test.ts +730 -8
  185. package/src/__tests__/schedule-store.test.ts +540 -0
  186. package/src/__tests__/schedule-tools.test.ts +103 -0
  187. package/src/__tests__/scheduler-wake.test.ts +5 -0
  188. package/src/__tests__/secret-routes-platform-proxy.test.ts +29 -1
  189. package/src/__tests__/secure-keys.test.ts +91 -0
  190. package/src/__tests__/server-history-render.test.ts +97 -7
  191. package/src/__tests__/size-guard.test.ts +8 -8
  192. package/src/__tests__/skill-docs-sync-guard.test.ts +3 -2
  193. package/src/__tests__/skill-tool-factory.test.ts +247 -0
  194. package/src/__tests__/skills-install-staging.test.ts +15 -6
  195. package/src/__tests__/slack-edit-ordering-characterization.test.ts +103 -0
  196. package/src/__tests__/slack-inbound-verification.test.ts +4 -1
  197. package/src/__tests__/slack-mention-binding-invariance.test.ts +103 -0
  198. package/src/__tests__/slack-mention-provider-leak-audit.test.ts +135 -0
  199. package/src/__tests__/starter-task-flow.test.ts +5 -4
  200. package/src/__tests__/steer-on-enqueue-question.test.ts +3 -2
  201. package/src/__tests__/stt-language-catalog-parity.test.ts +38 -0
  202. package/src/__tests__/subagent-allowlist-validation.test.ts +26 -4
  203. package/src/__tests__/subagent-cron-run-attribution.test.ts +301 -0
  204. package/src/__tests__/subagent-disposal.test.ts +10 -0
  205. package/src/__tests__/subagent-fork-notifications.test.ts +10 -0
  206. package/src/__tests__/subagent-fork-prompt-role.test.ts +85 -11
  207. package/src/__tests__/subagent-fork-spawn.test.ts +15 -7
  208. package/src/__tests__/subagent-manager-notify.test.ts +148 -0
  209. package/src/__tests__/subagent-notify-parent.test.ts +1 -1
  210. package/src/__tests__/subagent-persistence.test.ts +141 -0
  211. package/src/__tests__/subagent-role-registry.test.ts +172 -63
  212. package/src/__tests__/subagent-role-resolution.test.ts +88 -0
  213. package/src/__tests__/subagent-spawn-and-await.test.ts +48 -0
  214. package/src/__tests__/subagent-spawn-tool-fork.test.ts +111 -10
  215. package/src/__tests__/subagent-terminal-message.test.ts +88 -1
  216. package/src/__tests__/subagent-tool-gate-mode.test.ts +225 -10
  217. package/src/__tests__/subagent-tools.test.ts +1901 -108
  218. package/src/__tests__/surface-completion-compaction-boundary.test.ts +124 -0
  219. package/src/__tests__/surface-completion-in-flight-snapshot.test.ts +298 -0
  220. package/src/__tests__/system-prompt.test.ts +82 -7
  221. package/src/__tests__/tool-grant-request-escalation.test.ts +40 -1
  222. package/src/__tests__/tool-result-spool.test.ts +74 -18
  223. package/src/__tests__/tool-side-effects-documents.test.ts +174 -0
  224. package/src/__tests__/tool-side-effects-hook-failures.test.ts +129 -0
  225. package/src/__tests__/tools-audio-read.test.ts +10 -10
  226. package/src/__tests__/tools-get-route.test.ts +85 -12
  227. package/src/__tests__/tools-list-cli.test.ts +171 -0
  228. package/src/__tests__/top-level-renderer.test.ts +54 -1
  229. package/src/__tests__/trusted-contact-inline-approval-integration.test.ts +68 -1
  230. package/src/__tests__/trusted-contact-multichannel.test.ts +4 -1
  231. package/src/__tests__/turn-tail-chain.test.ts +135 -0
  232. package/src/__tests__/ui-choice-copy-surfaces.test.ts +6 -4
  233. package/src/__tests__/ui-visual-surface.test.ts +5 -4
  234. package/src/__tests__/ui-work-result-surface.test.ts +5 -4
  235. package/src/__tests__/unified-turn-context-visible-app.test.ts +7 -8
  236. package/src/__tests__/usage-routes.test.ts +62 -0
  237. package/src/__tests__/verification-outbound-delivery.test.ts +176 -0
  238. package/src/__tests__/visible-app-context.test.ts +20 -4
  239. package/src/__tests__/web-search-history.test.ts +96 -0
  240. package/src/__tests__/workspace-migration-139-clear-renamed-cost-profile-label.test.ts +6 -6
  241. package/src/__tests__/workspace-migration-140-repair-seed-pinned-memory-v3-live.test.ts +330 -0
  242. package/src/acp/failure-error.ts +3 -5
  243. package/src/agent/attachments.ts +26 -24
  244. package/src/agent/history-repair/history-repair.ts +27 -26
  245. package/src/agent/image-optimize.ts +6 -6
  246. package/src/agent/loop.ts +40 -22
  247. package/src/agent/message-types.ts +3 -3
  248. package/src/api/constants/document-tools.ts +55 -0
  249. package/src/api/events/question-answered.ts +53 -0
  250. package/src/api/events/tool-result.ts +7 -0
  251. package/src/api/index.ts +13 -0
  252. package/src/api/responses/conversation-message.ts +11 -0
  253. package/src/api/surfaces-oauth-connect.test.ts +96 -0
  254. package/src/api/surfaces.ts +36 -8
  255. package/src/approvals/guardian-channel-delivery.ts +83 -0
  256. package/src/approvals/guardian-expiry-notifier.ts +13 -11
  257. package/src/approvals/guardian-request-resolvers.ts +222 -135
  258. package/src/calls/__tests__/voice-session-bridge.test.ts +50 -0
  259. package/src/calls/media-stream-server.ts +9 -1
  260. package/src/calls/voice-session-bridge.ts +38 -0
  261. package/src/channels/__tests__/gateway-verification-sessions.test.ts +3 -3
  262. package/src/channels/config.ts +7 -2
  263. package/src/channels/gateway-verification-sessions.ts +7 -2
  264. package/src/channels/types.ts +7 -1
  265. package/src/cli/commands/__tests__/cache.test.ts +7 -4
  266. package/src/cli/commands/__tests__/cli-test-harness.ts +82 -0
  267. package/src/cli/commands/__tests__/conversations-wake.test.ts +51 -6
  268. package/src/cli/commands/__tests__/inference-models.test.ts +14 -0
  269. package/src/cli/commands/__tests__/inference-profiles.test.ts +44 -1
  270. package/src/cli/commands/__tests__/inference-providers.test.ts +7 -0
  271. package/src/cli/commands/__tests__/plugins.test.ts +692 -0
  272. package/src/cli/commands/__tests__/schedules.test.ts +136 -37
  273. package/src/cli/commands/conversations.ts +7 -3
  274. package/src/cli/commands/credentials.help.ts +7 -0
  275. package/src/cli/commands/inference-profiles.ts +9 -3
  276. package/src/cli/commands/inference.help.ts +16 -2
  277. package/src/cli/commands/mcp.help.ts +4 -2
  278. package/src/cli/commands/memory/memory-retrospective.ts +18 -0
  279. package/src/cli/commands/notifications.ts +3 -6
  280. package/src/cli/commands/oauth/connect-surface-guidance.test.ts +16 -0
  281. package/src/cli/commands/oauth/connect-surface-guidance.ts +25 -7
  282. package/src/cli/commands/oauth/connect.test.ts +26 -1
  283. package/src/cli/commands/oauth/connect.ts +4 -1
  284. package/src/cli/commands/oauth/index.help.ts +3 -1
  285. package/src/cli/commands/oauth/providers.ts +3 -0
  286. package/src/cli/commands/plugins.help.ts +25 -2
  287. package/src/cli/commands/plugins.ts +289 -10
  288. package/src/cli/commands/schedules.help.ts +14 -12
  289. package/src/cli/commands/schedules.ts +19 -5
  290. package/src/cli/commands/tools.help.ts +4 -2
  291. package/src/cli/commands/tools.ts +38 -0
  292. package/src/cli/lib/__tests__/inspect-plugin.test.ts +1 -0
  293. package/src/cli/lib/__tests__/install-from-github.test.ts +79 -0
  294. package/src/cli/lib/__tests__/install-from-platform.test.ts +47 -1
  295. package/src/cli/lib/__tests__/plugin-surfaces.test.ts +86 -7
  296. package/src/cli/lib/__tests__/upgrade-plugin.test.ts +122 -0
  297. package/src/cli/lib/install-from-github.ts +61 -0
  298. package/src/cli/lib/install-from-platform.ts +13 -2
  299. package/src/cli/lib/plugin-surfaces.ts +124 -4
  300. package/src/cli/lib/upgrade-plugin.ts +18 -0
  301. package/src/cli.ts +1 -1
  302. package/src/config/__tests__/deployment-context-defaults.test.ts +73 -0
  303. package/src/config/__tests__/memory-retrospective-schema.test.ts +40 -0
  304. package/src/config/__tests__/plugin-updates-schema.test.ts +43 -0
  305. package/src/config/__tests__/profile-tool-support.test.ts +131 -0
  306. package/src/config/bundled-skills/AGENTS.md +1 -1
  307. package/src/config/bundled-skills/app-builder/SKILL.md +1 -1
  308. package/src/config/bundled-skills/app-builder/references/RESPONSIVE.md +3 -3
  309. package/src/config/bundled-skills/schedule/SKILL.md +5 -1
  310. package/src/config/bundled-skills/schedule/TOOLS.json +2 -2
  311. package/src/config/bundled-skills/settings/TOOLS.json +2 -2
  312. package/src/config/bundled-skills/settings/tools/voice-config-update.ts +1 -0
  313. package/src/config/bundled-skills/subagent/SKILL.md +53 -22
  314. package/src/config/bundled-skills/subagent/TOOLS.json +14 -13
  315. package/src/config/bundled-skills/visualize/SKILL.md +1 -1
  316. package/src/config/default-profile-catalog.ts +6 -2
  317. package/src/config/feature-flag-registry.json +25 -17
  318. package/src/config/llm-resolver.ts +45 -15
  319. package/src/config/loader.ts +70 -1
  320. package/src/config/profile-tool-support.ts +110 -0
  321. package/src/config/sanitize-for-transfer.ts +11 -0
  322. package/src/config/schema.ts +4 -0
  323. package/src/config/schemas/__tests__/stt.test.ts +20 -5
  324. package/src/config/schemas/channels.ts +13 -0
  325. package/src/config/schemas/memory-retrospective.ts +25 -0
  326. package/src/config/schemas/plugin-updates.ts +55 -0
  327. package/src/config/schemas/services.ts +8 -4
  328. package/src/config/schemas/stt.ts +17 -5
  329. package/src/config/schemas/timeouts.ts +1 -1
  330. package/src/contacts/__tests__/guardian-delivery-reader.test.ts +16 -0
  331. package/src/contacts/guardian-delivery-reader.ts +29 -2
  332. package/src/context/compactor.ts +4 -4
  333. package/src/context/post-turn-tool-result-truncation.ts +32 -16
  334. package/src/context/strip-injections.ts +42 -0
  335. package/src/context/tool-result-spool.ts +32 -18
  336. package/src/credential-execution/ces-runtime.ts +3 -0
  337. package/src/credential-execution/client.ts +22 -1
  338. package/src/credential-execution/process-manager.test.ts +99 -0
  339. package/src/credential-execution/process-manager.ts +62 -16
  340. package/src/daemon/__tests__/abort-null-controller.test.ts +141 -5
  341. package/src/daemon/__tests__/conversation-surfaces-launch.test.ts +8 -12
  342. package/src/daemon/__tests__/install-assistant-command.test.ts +234 -0
  343. package/src/daemon/__tests__/turn-tail-assistant-reply-notify.test.ts +2 -4
  344. package/src/daemon/__tests__/turn-tail-deleted-conversation.test.ts +20 -29
  345. package/src/daemon/channel-ui-capability.ts +4 -4
  346. package/src/daemon/conversation-agent-loop-handlers.ts +117 -61
  347. package/src/daemon/conversation-agent-loop.ts +318 -148
  348. package/src/daemon/conversation-attachments.ts +1 -1
  349. package/src/daemon/conversation-error.ts +8 -1
  350. package/src/daemon/conversation-initial-prompt.ts +16 -38
  351. package/src/daemon/conversation-lifecycle.ts +154 -32
  352. package/src/daemon/conversation-messaging.ts +106 -43
  353. package/src/daemon/conversation-process.ts +131 -33
  354. package/src/daemon/conversation-queue-manager.ts +10 -0
  355. package/src/daemon/conversation-runtime-assembly.ts +9 -4
  356. package/src/daemon/conversation-store.ts +52 -3
  357. package/src/daemon/conversation-surface-state.ts +9 -0
  358. package/src/daemon/conversation-surfaces.ts +403 -210
  359. package/src/daemon/conversation-tool-setup.ts +56 -7
  360. package/src/daemon/conversation-turn-finalize.ts +134 -89
  361. package/src/daemon/conversation.ts +111 -27
  362. package/src/daemon/disk-pressure-guard-lifecycle.ts +2 -2
  363. package/src/daemon/disk-pressure-guard.ts +3 -3
  364. package/src/daemon/doordash-steps.ts +5 -5
  365. package/src/daemon/external-plugins-bootstrap.ts +7 -1
  366. package/src/daemon/handlers/config-channels.ts +48 -5
  367. package/src/daemon/handlers/conversation-history.ts +1 -1
  368. package/src/daemon/handlers/conversations.ts +62 -17
  369. package/src/daemon/handlers/shared.ts +12 -0
  370. package/src/daemon/handlers/skills.ts +11 -1
  371. package/src/daemon/identity-helpers.ts +38 -10
  372. package/src/daemon/install-assistant-command.ts +322 -0
  373. package/src/daemon/lifecycle.ts +14 -3
  374. package/src/daemon/message-types/conversations.ts +6 -7
  375. package/src/daemon/message-types/sync.ts +1 -0
  376. package/src/daemon/persist-media-references.ts +23 -14
  377. package/src/daemon/process-message.ts +6 -6
  378. package/src/daemon/tool-setup-types.ts +19 -122
  379. package/src/daemon/tool-side-effects.ts +17 -94
  380. package/src/daemon/trust-context-types.ts +39 -0
  381. package/src/daemon/trust-context.ts +14 -6
  382. package/src/daemon/turn-tail-chain.ts +73 -0
  383. package/src/daemon/web-search-history.ts +47 -33
  384. package/src/heartbeat/heartbeat-service.ts +6 -6
  385. package/src/ipc/__tests__/socket-path.test.ts +21 -0
  386. package/src/ipc/assistant-server.ts +17 -10
  387. package/src/ipc/cli-client.ts +10 -1
  388. package/src/ipc/routes/__tests__/documents-sync-ipc-routes.test.ts +56 -0
  389. package/src/ipc/routes/documents-sync-ipc-routes.ts +42 -0
  390. package/src/ipc/socket-cleanup.ts +9 -7
  391. package/src/ipc/socket-path.ts +4 -96
  392. package/src/live-voice/__tests__/live-voice-archive.test.ts +16 -16
  393. package/src/live-voice/__tests__/live-voice-attach-image.test.ts +209 -0
  394. package/src/live-voice/__tests__/live-voice-connection.test.ts +20 -0
  395. package/src/live-voice/__tests__/live-voice-integration.test.ts +7 -5
  396. package/src/live-voice/__tests__/live-voice-session-telemetry.test.ts +265 -0
  397. package/src/live-voice/__tests__/live-voice-stt.test.ts +6 -1
  398. package/src/live-voice/__tests__/live-voice-vad.test.ts +35 -15
  399. package/src/live-voice/__tests__/protocol.test.ts +52 -0
  400. package/src/live-voice/__tests__/runtime-websocket-shell.test.ts +3 -0
  401. package/src/live-voice/live-voice-archive.ts +13 -13
  402. package/src/live-voice/live-voice-connection.ts +7 -1
  403. package/src/live-voice/live-voice-photo.ts +169 -0
  404. package/src/live-voice/live-voice-session.ts +108 -4
  405. package/src/live-voice/protocol.ts +89 -1
  406. package/src/mcp/client.ts +10 -0
  407. package/src/messaging/providers/__tests__/callback-routing.test.ts +5 -1
  408. package/src/messaging/providers/__tests__/transport-dispatch.test.ts +66 -4
  409. package/src/messaging/providers/callback-routing.ts +1 -0
  410. package/src/messaging/providers/discord/api.ts +312 -0
  411. package/src/messaging/providers/discord/dm-delivery.test.ts +204 -0
  412. package/src/messaging/providers/discord/render.test.ts +204 -0
  413. package/src/messaging/providers/discord/render.ts +195 -0
  414. package/src/messaging/providers/discord/send.test.ts +179 -0
  415. package/src/messaging/providers/discord/send.ts +212 -0
  416. package/src/messaging/providers/discord/transport.ts +81 -0
  417. package/src/messaging/providers/index.ts +3 -1
  418. package/src/messaging/providers/retry-policy.test.ts +247 -0
  419. package/src/messaging/providers/retry-policy.ts +206 -0
  420. package/src/messaging/providers/slack/mention-source.test.ts +285 -0
  421. package/src/messaging/providers/slack/mention-source.ts +287 -0
  422. package/src/messaging/providers/telegram-bot/api.ts +47 -130
  423. package/src/messaging/providers/whatsapp/api.ts +47 -136
  424. package/src/monitoring/__tests__/db-integrity-sample.test.ts +4 -1
  425. package/src/monitoring/__tests__/plugin-auto-update.test.ts +332 -0
  426. package/src/monitoring/db-integrity-sample.ts +6 -1
  427. package/src/monitoring/plugin-auto-update.ts +359 -0
  428. package/src/monitoring/resource-sampler.ts +21 -5
  429. package/src/monitoring/worker.ts +13 -0
  430. package/src/notifications/__tests__/assistant-reply-producer.test.ts +375 -2
  431. package/src/notifications/__tests__/broadcaster.test.ts +37 -1
  432. package/src/notifications/__tests__/copy-composer.test.ts +165 -0
  433. package/src/notifications/__tests__/emit-signal-pipeline-failure.test.ts +205 -0
  434. package/src/notifications/__tests__/notification-utils.test.ts +249 -0
  435. package/src/notifications/adapters/platform.ts +31 -2
  436. package/src/notifications/assistant-reply-producer.ts +79 -32
  437. package/src/notifications/broadcaster.ts +30 -10
  438. package/src/notifications/copy-composer.ts +69 -0
  439. package/src/notifications/emit-signal.ts +82 -15
  440. package/src/notifications/events-store.ts +10 -2
  441. package/src/notifications/home-feed-side-effect.ts +6 -3
  442. package/src/notifications/notification-utils.ts +173 -5
  443. package/src/notifications/signal.ts +12 -0
  444. package/src/oauth/AGENTS.md +4 -2
  445. package/src/oauth/byo-connection.ts +6 -1
  446. package/src/oauth/credential-token-resolver.ts +3 -10
  447. package/src/oauth/manual-token-connection.ts +29 -64
  448. package/src/oauth/manual-token-providers.ts +62 -0
  449. package/src/oauth/provider-serializer.ts +13 -0
  450. package/src/oauth/seed-providers.ts +62 -11
  451. package/src/onboarding/onboarding-events-store.ts +91 -1
  452. package/src/permissions/question-prompter.test.ts +4 -0
  453. package/src/permissions/question-prompter.ts +21 -4
  454. package/src/persistence/__tests__/conversation-lineage.test.ts +248 -0
  455. package/src/persistence/attachments-store.ts +15 -15
  456. package/src/persistence/conversation-attention-store.ts +30 -10
  457. package/src/persistence/conversation-bootstrap.ts +17 -0
  458. package/src/persistence/conversation-crud.ts +363 -97
  459. package/src/persistence/conversation-group-migration.ts +1 -1
  460. package/src/persistence/conversation-key-store.ts +38 -10
  461. package/src/persistence/conversation-lineage.ts +226 -0
  462. package/src/persistence/conversation-plugin-facade.ts +28 -3
  463. package/src/persistence/conversation-queries.ts +207 -33
  464. package/src/persistence/conversation-types.ts +107 -1
  465. package/src/persistence/jobs-store.ts +32 -8
  466. package/src/persistence/llm-usage-store.ts +22 -0
  467. package/src/persistence/migrations/361-normalize-managed-connection-rows.test.ts +168 -0
  468. package/src/persistence/migrations/361-normalize-managed-connection-rows.ts +76 -0
  469. package/src/persistence/migrations/362-add-conversation-subagent-kind.test.ts +187 -0
  470. package/src/persistence/migrations/362-add-conversation-subagent-kind.ts +93 -0
  471. package/src/persistence/migrations/363-backfill-schedule-inference-profile.test.ts +229 -0
  472. package/src/persistence/migrations/363-backfill-schedule-inference-profile.ts +127 -0
  473. package/src/persistence/migrations/364-add-schedule-source-key.test.ts +120 -0
  474. package/src/persistence/migrations/364-add-schedule-source-key.ts +43 -0
  475. package/src/persistence/migrations/365-add-conversation-fork-strategy.ts +27 -0
  476. package/src/persistence/schema/conversations.ts +32 -0
  477. package/src/persistence/schema/infrastructure.ts +3 -0
  478. package/src/persistence/steps.ts +30 -0
  479. package/src/persistence/subagent-store.ts +148 -6
  480. package/src/platform/managed-speech.test.ts +20 -0
  481. package/src/platform/managed-speech.ts +9 -0
  482. package/src/plugin-api/index.ts +8 -0
  483. package/src/plugin-api/webhook-url.ts +151 -0
  484. package/src/plugins/__tests__/installed-plugin-dirs.test.ts +82 -0
  485. package/src/plugins/__tests__/source-fingerprint.test.ts +5 -1
  486. package/src/plugins/collect-source-versions.ts +4 -27
  487. package/src/plugins/defaults/exploration-drift/hooks/post-tool-use.ts +5 -5
  488. package/src/plugins/defaults/exploration-drift/package.json +1 -1
  489. package/src/plugins/defaults/image-recovery/hooks/post-model-call.ts +4 -2
  490. package/src/plugins/defaults/image-recovery/recover.ts +67 -57
  491. package/src/plugins/defaults/index.ts +1 -1
  492. package/src/plugins/defaults/memory/__tests__/conversation-queries.test.ts +64 -18
  493. package/src/plugins/defaults/memory/__tests__/jobs-worker-outcome-contract.test.ts +242 -0
  494. package/src/plugins/defaults/memory/__tests__/jobs-worker-retrospective-sweep.test.ts +24 -1
  495. package/src/plugins/defaults/memory/__tests__/memory-retrospective-enqueue.test.ts +48 -3
  496. package/src/plugins/defaults/memory/__tests__/memory-retrospective-job.test.ts +511 -19
  497. package/src/plugins/defaults/memory/__tests__/memory-retrospective-prompt.test.ts +39 -3
  498. package/src/plugins/defaults/memory/__tests__/memory-retrospective-provider-path.test.ts +493 -0
  499. package/src/plugins/defaults/memory/__tests__/memory-retrospective-wake-chain.test.ts +5 -4
  500. package/src/plugins/defaults/memory/__tests__/memory-tier-boundary-guard.test.ts +5 -1
  501. package/src/plugins/defaults/memory/job-handlers.ts +87 -5
  502. package/src/plugins/defaults/memory/jobs-worker.ts +60 -6
  503. package/src/plugins/defaults/memory/memory-retrospective-constants.ts +11 -0
  504. package/src/plugins/defaults/memory/memory-retrospective-enqueue.ts +29 -0
  505. package/src/plugins/defaults/memory/memory-retrospective-job.ts +342 -60
  506. package/src/plugins/defaults/memory/memory-retrospective-prompt.ts +23 -3
  507. package/src/plugins/defaults/memory/substrate/consolidation-lock.ts +9 -4
  508. package/src/plugins/defaults/memory/substrate/sweep-job.ts +7 -0
  509. package/src/plugins/defaults/memory/v1/graph/injection.ts +1 -1
  510. package/src/plugins/defaults/memory/v2/router.ts +8 -0
  511. package/src/plugins/defaults/turn-context/unified-turn-context.ts +1 -2
  512. package/src/plugins/external-plugin-loader.ts +17 -8
  513. package/src/plugins/installed-plugin-dirs.ts +101 -0
  514. package/src/plugins/mtime-cache.ts +34 -22
  515. package/src/plugins/types.ts +69 -8
  516. package/src/prompts/persona-resolver.ts +6 -2
  517. package/src/prompts/system-prompt.ts +72 -17
  518. package/src/providers/__tests__/inference.test.ts +40 -0
  519. package/src/providers/__tests__/preflight-resolved-config.test.ts +58 -1
  520. package/src/providers/__tests__/retry-callsite.test.ts +67 -0
  521. package/src/providers/__tests__/vellum-connection-routing.test.ts +42 -11
  522. package/src/providers/anthropic/client.ts +112 -95
  523. package/src/providers/connection-resolution.ts +35 -1
  524. package/src/providers/gemini/client.ts +5 -5
  525. package/src/providers/inference/adapter-factory.ts +16 -10
  526. package/src/providers/inference/auth.ts +16 -0
  527. package/src/providers/inference/connection-availability.ts +164 -12
  528. package/src/providers/inference/connections.ts +25 -1
  529. package/src/providers/media-resolve.ts +21 -11
  530. package/src/providers/model-catalog.ts +15 -0
  531. package/src/providers/openai/chat-completions-provider.ts +4 -4
  532. package/src/providers/openai/responses-provider.ts +12 -25
  533. package/src/providers/registry.ts +9 -4
  534. package/src/providers/retry.ts +25 -0
  535. package/src/providers/server-tool-pairing.ts +134 -0
  536. package/src/providers/speech-to-text/__tests__/resolve.test.ts +187 -6
  537. package/src/providers/speech-to-text/deepgram.ts +1 -0
  538. package/src/providers/speech-to-text/resolve.ts +80 -10
  539. package/src/providers/speech-to-text/vellum-managed.ts +7 -1
  540. package/src/providers/speech-to-text/vellum-speech-relay-connection.ts +3 -1
  541. package/src/providers/types.ts +26 -6
  542. package/src/providers/vellum-model-routing.ts +6 -7
  543. package/src/runtime/AGENTS.md +2 -0
  544. package/src/runtime/__tests__/agent-wake.test.ts +16 -16
  545. package/src/runtime/__tests__/background-job-runner.test.ts +0 -144
  546. package/src/runtime/__tests__/desktop-presence.test.ts +162 -0
  547. package/src/runtime/agent-wake.ts +63 -24
  548. package/src/runtime/assistant-event-hub.ts +87 -12
  549. package/src/runtime/auth/__tests__/guard-tests.test.ts +2 -0
  550. package/src/runtime/auth/__tests__/scopes.test.ts +20 -0
  551. package/src/runtime/auth/same-actor.ts +56 -8
  552. package/src/runtime/auth/scopes.ts +12 -0
  553. package/src/runtime/auth/types.ts +2 -0
  554. package/src/runtime/background-job-runner.ts +5 -27
  555. package/src/runtime/channel-readiness-service.ts +59 -3
  556. package/src/runtime/channel-readiness-types.ts +18 -0
  557. package/src/runtime/desktop-presence.ts +69 -0
  558. package/src/runtime/http-server.ts +12 -0
  559. package/src/runtime/local-actor-identity.ts +11 -9
  560. package/src/runtime/migrations/__tests__/vbundle-symlink-streaming-importer.test.ts +0 -0
  561. package/src/runtime/routes/__tests__/channel-verification-routes.test.ts +1 -1
  562. package/src/runtime/routes/__tests__/client-routes.test.ts +186 -14
  563. package/src/runtime/routes/__tests__/conversation-list-routes.test.ts +547 -1
  564. package/src/runtime/routes/__tests__/conversation-management-routes.test.ts +162 -7
  565. package/src/runtime/routes/__tests__/conversation-query-routes.test.ts +14 -10
  566. package/src/runtime/routes/__tests__/inference-profiles-routes.test.ts +340 -3
  567. package/src/runtime/routes/__tests__/llm-call-sites-routes.test.ts +28 -1
  568. package/src/runtime/routes/__tests__/plugins-routes.test.ts +173 -1
  569. package/src/runtime/routes/__tests__/question-routes.test.ts +64 -0
  570. package/src/runtime/routes/__tests__/retrospective-routes.test.ts +20 -0
  571. package/src/runtime/routes/__tests__/skill-history-route.test.ts +116 -0
  572. package/src/runtime/routes/__tests__/wake-conversation-routes.test.ts +60 -2
  573. package/src/runtime/routes/archive-utils.ts +16 -12
  574. package/src/runtime/routes/attachment-routes.ts +13 -6
  575. package/src/runtime/routes/canned-reply-release.ts +54 -0
  576. package/src/runtime/routes/channel-verification-routes.ts +2 -27
  577. package/src/runtime/routes/chatgpt-subscription-auth-routes.ts +5 -0
  578. package/src/runtime/routes/client-routes.ts +114 -2
  579. package/src/runtime/routes/conversation-cli-routes.ts +10 -12
  580. package/src/runtime/routes/conversation-list-routes.ts +59 -10
  581. package/src/runtime/routes/conversation-management-routes.ts +47 -18
  582. package/src/runtime/routes/conversation-query-routes.ts +32 -53
  583. package/src/runtime/routes/conversation-routes.ts +360 -293
  584. package/src/runtime/routes/credential-prompt-routes.ts +23 -2
  585. package/src/runtime/routes/debug-routes.ts +4 -1
  586. package/src/runtime/routes/default-provider-routes.ts +7 -11
  587. package/src/runtime/routes/documents-routes.ts +44 -1
  588. package/src/runtime/routes/events-routes.ts +28 -1
  589. package/src/runtime/routes/host-app-control-routes.ts +2 -0
  590. package/src/runtime/routes/host-bash-routes.ts +2 -0
  591. package/src/runtime/routes/host-browser-routes.ts +2 -0
  592. package/src/runtime/routes/host-cu-routes.ts +2 -0
  593. package/src/runtime/routes/host-file-routes.ts +2 -0
  594. package/src/runtime/routes/host-transfer-routes.ts +4 -0
  595. package/src/runtime/routes/identity-routes.ts +6 -6
  596. package/src/runtime/routes/inbound-message-handler.ts +5 -5
  597. package/src/runtime/routes/inbound-stages/acl-enforcement.ts +7 -3
  598. package/src/runtime/routes/inbound-stages/background-dispatch.ts +14 -0
  599. package/src/runtime/routes/inbound-stages/bootstrap-intercept.ts +2 -2
  600. package/src/runtime/routes/inbound-stages/guardian-activation-intercept.test.ts +14 -11
  601. package/src/runtime/routes/inbound-stages/guardian-activation-intercept.ts +14 -17
  602. package/src/runtime/routes/inference-profile-availability-guard.ts +171 -0
  603. package/src/runtime/routes/inference-profile-session-handler.ts +26 -2
  604. package/src/runtime/routes/inference-profile-session-routes.ts +2 -1
  605. package/src/runtime/routes/inference-profiles-routes.ts +152 -73
  606. package/src/runtime/routes/inference-provider-connection-routes.ts +0 -16
  607. package/src/runtime/routes/llm-call-sites-routes.ts +13 -0
  608. package/src/runtime/routes/log-export-routes.ts +1 -1
  609. package/src/runtime/routes/notification-routes.ts +0 -14
  610. package/src/runtime/routes/oauth-providers.ts +1 -0
  611. package/src/runtime/routes/plugins-routes.ts +106 -1
  612. package/src/runtime/routes/profiler-routes.ts +4 -2
  613. package/src/runtime/routes/question-routes.ts +28 -10
  614. package/src/runtime/routes/retrospective-routes.ts +9 -3
  615. package/src/runtime/routes/schedule-routes.ts +210 -12
  616. package/src/runtime/routes/secret-routes.ts +40 -23
  617. package/src/runtime/routes/settings-routes.ts +41 -13
  618. package/src/runtime/routes/skills-routes.ts +79 -0
  619. package/src/runtime/routes/ui-snapshot-routes.ts +1 -0
  620. package/src/runtime/routes/wake-conversation-routes.ts +23 -0
  621. package/src/runtime/services/__tests__/conversation-serializer.test.ts +1 -0
  622. package/src/runtime/services/conversation-serializer.ts +24 -9
  623. package/src/runtime/sync/documents-sidecar-publish.test.ts +101 -0
  624. package/src/runtime/sync/resource-sync-events.ts +79 -1
  625. package/src/runtime/sync/worker-daemon-notify.test.ts +34 -0
  626. package/src/runtime/sync/worker-daemon-notify.ts +44 -6
  627. package/src/runtime/verification-outbound-actions.ts +250 -222
  628. package/src/runtime/verification-templates.ts +41 -30
  629. package/src/schedule/__tests__/plugin-schedule-declarations.test.ts +614 -0
  630. package/src/schedule/__tests__/plugin-schedule-reconciler.test.ts +1066 -0
  631. package/src/schedule/inference-profile.ts +64 -3
  632. package/src/schedule/plugin-schedule-declarations.ts +518 -0
  633. package/src/schedule/plugin-schedule-reconciler.ts +605 -0
  634. package/src/schedule/plugin-schedules-gate.ts +23 -0
  635. package/src/schedule/schedule-store.ts +520 -26
  636. package/src/schedule/scheduler.ts +38 -0
  637. package/src/security/credential-backend.ts +51 -4
  638. package/src/security/encrypted-store.ts +64 -42
  639. package/src/security/secure-keys.ts +55 -7
  640. package/src/skills/catalog-install.ts +20 -7
  641. package/src/skills/inline-command-runner.ts +2 -7
  642. package/src/skills/skill-history.test.ts +269 -0
  643. package/src/skills/skill-history.ts +250 -0
  644. package/src/skills/skillssh-registry.ts +1 -1
  645. package/src/stt/daemon-batch-transcriber.ts +8 -6
  646. package/src/subagent/__tests__/consult-prompt.test.ts +25 -0
  647. package/src/subagent/consult-prompt.ts +3 -1
  648. package/src/subagent/consult-transcript.ts +1 -1
  649. package/src/subagent/manager.ts +304 -44
  650. package/src/subagent/progress-events.ts +35 -0
  651. package/src/subagent/role-resolution.ts +88 -0
  652. package/src/subagent/types.ts +302 -67
  653. package/src/subagent/validate-allowlists.ts +3 -4
  654. package/src/telegram/__tests__/webhook-health.test.ts +73 -1
  655. package/src/telegram/webhook-health.ts +101 -3
  656. package/src/telemetry/__tests__/telemetry-event-fixtures.ts +2 -0
  657. package/src/telemetry/activation-funnel.ts +6 -1
  658. package/src/telemetry/live-voice-funnel.ts +75 -0
  659. package/src/telemetry/telemetry-event-sources.ts +6 -0
  660. package/src/telemetry/telemetry-wire-source.json +1 -1
  661. package/src/telemetry/telemetry-wire.generated.ts +2 -0
  662. package/src/telemetry/types.ts +23 -4
  663. package/src/telemetry/usage-telemetry-reporter.test.ts +4 -0
  664. package/src/tools/__tests__/subagent-workflow-tool-input-schemas.test.ts +1 -1
  665. package/src/tools/ask-question/ask-question-tool.test.ts +118 -3
  666. package/src/tools/ask-question/ask-question-tool.ts +56 -2
  667. package/src/tools/browser/browser-execution.ts +1 -1
  668. package/src/tools/calls/call-start.ts +8 -5
  669. package/src/tools/conversation-groups/move_to_group.ts +10 -12
  670. package/src/tools/document/document-tool.ts +11 -4
  671. package/src/tools/execution-timeout.ts +9 -2
  672. package/src/tools/executor.ts +7 -6
  673. package/src/tools/filesystem/edit.ts +1 -1
  674. package/src/tools/filesystem/list.ts +1 -1
  675. package/src/tools/filesystem/read.ts +7 -13
  676. package/src/tools/filesystem/search.ts +23 -21
  677. package/src/tools/filesystem/write.ts +4 -1
  678. package/src/tools/host-filesystem/edit.ts +7 -2
  679. package/src/tools/host-filesystem/read.ts +21 -8
  680. package/src/tools/host-filesystem/write.ts +10 -2
  681. package/src/tools/host-terminal/host-shell.ts +2 -2
  682. package/src/tools/mcp/mcp-tool-factory.ts +25 -1
  683. package/src/tools/permission-checker.ts +8 -3
  684. package/src/tools/schedule/delete.ts +13 -1
  685. package/src/tools/schedule/list.ts +14 -3
  686. package/src/tools/schedule/update.ts +56 -33
  687. package/src/tools/shared/filesystem/audio-read.ts +6 -4
  688. package/src/tools/shared/filesystem/file-ops-service.ts +176 -116
  689. package/src/tools/shared/filesystem/image-read.ts +12 -12
  690. package/src/tools/shared/filesystem/path-policy.ts +70 -5
  691. package/src/tools/shared/filesystem/size-guard.ts +6 -6
  692. package/src/tools/shared/input-misuse.ts +72 -0
  693. package/src/tools/skills/scaffold-managed.ts +82 -0
  694. package/src/tools/skills/skill-tool-factory.ts +14 -1
  695. package/src/tools/subagent/consult-deadline.ts +12 -7
  696. package/src/tools/subagent/message.ts +3 -1
  697. package/src/tools/subagent/read.ts +66 -4
  698. package/src/tools/subagent/spawn.ts +500 -78
  699. package/src/tools/tool-approval-handler.ts +45 -4
  700. package/src/tools/types.ts +22 -3
  701. package/src/tools/ui-surface/surface-shape-docs.ts +1 -1
  702. package/src/tools/ui-surface/visual-validation.ts +2 -0
  703. package/src/usage/__tests__/subagent-attribution.test.ts +109 -0
  704. package/src/usage/subagent-attribution.ts +108 -0
  705. package/src/util/__tests__/sqlite-retry.test.ts +112 -0
  706. package/src/util/abort-reasons.ts +16 -0
  707. package/src/util/ansi.ts +44 -0
  708. package/src/util/disk-usage.ts +17 -13
  709. package/src/util/image-conversion.ts +20 -13
  710. package/src/util/schedule-source-key.ts +23 -0
  711. package/src/util/worker-process.ts +7 -1
  712. package/src/workspace/git-service.ts +33 -9
  713. package/src/workspace/migrations/140-repair-seed-pinned-memory-v3-live.ts +260 -0
  714. package/src/workspace/migrations/141-stt-english-default-to-multilingual.ts +111 -0
  715. package/src/workspace/migrations/__tests__/141-stt-english-default-to-multilingual.test.ts +126 -0
  716. package/src/workspace/migrations/registry.ts +4 -0
  717. package/src/workspace/top-level-renderer.ts +15 -2
  718. package/src/__tests__/tool-side-effects-slack-dm.test.ts +0 -357
  719. package/src/daemon/install-symlink.ts +0 -207
  720. 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
@@ -4615,6 +4615,43 @@ paths:
4615
4615
  required:
4616
4616
  - disconnected
4617
4617
  additionalProperties: false
4618
+ /v1/clients/presence:
4619
+ post:
4620
+ operationId: clients_presence_post
4621
+ summary: Report desktop presence
4622
+ description: Record the desktop presence state reported by the client identified by the X-Vellum-Client-Id header.
4623
+ tags:
4624
+ - clients
4625
+ requestBody:
4626
+ required: true
4627
+ content:
4628
+ application/json:
4629
+ schema:
4630
+ type: object
4631
+ properties:
4632
+ state:
4633
+ type: string
4634
+ enum:
4635
+ - active
4636
+ - idle
4637
+ - away
4638
+ description: Reported desktop presence state.
4639
+ required:
4640
+ - state
4641
+ responses:
4642
+ "200":
4643
+ description: Successful response
4644
+ content:
4645
+ application/json:
4646
+ schema:
4647
+ type: object
4648
+ properties:
4649
+ recorded:
4650
+ type: boolean
4651
+ description: Whether a connected client matched the reporting clientId.
4652
+ required:
4653
+ - recorded
4654
+ additionalProperties: false
4618
4655
  /v1/config:
4619
4656
  get:
4620
4657
  operationId: config_get
@@ -4737,6 +4774,8 @@ paths:
4737
4774
  type: string
4738
4775
  defaultProfile:
4739
4776
  type: string
4777
+ shippedDefaultProfile:
4778
+ type: string
4740
4779
  required:
4741
4780
  - id
4742
4781
  - displayName
@@ -6546,6 +6585,16 @@ paths:
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
@@ -6723,6 +6772,9 @@ paths:
6723
6772
  - messageId
6724
6773
  - title
6725
6774
  additionalProperties: false
6775
+ historyOrphaned:
6776
+ type: boolean
6777
+ const: true
6726
6778
  archivedAt:
6727
6779
  type: number
6728
6780
  surfacedAt:
@@ -6796,9 +6848,15 @@ paths:
6796
6848
  `id`.
6797
6849
  type: string
6798
6850
  conversationType:
6799
- description: Only standard conversations are created by this endpoint
6851
+ description:
6852
+ Conversation type for the new row. "background" keeps it out of the foreground list and the sidebar's
6853
+ Recents grouping, used by internal side-channel flows (onboarding research, persona/identity
6854
+ rewrites) that mint a throwaway thread the user should never see. "scheduled" is not accepted here;
6855
+ scheduled rows are owned by the schedule pipeline.
6800
6856
  type: string
6801
- const: standard
6857
+ enum:
6858
+ - standard
6859
+ - background
6802
6860
  title:
6803
6861
  description:
6804
6862
  Explicit title for the conversation. When provided on creation, it is persisted as a user-set title (never
@@ -7077,6 +7135,9 @@ paths:
7077
7135
  - messageId
7078
7136
  - title
7079
7137
  additionalProperties: false
7138
+ historyOrphaned:
7139
+ type: boolean
7140
+ const: true
7080
7141
  archivedAt:
7081
7142
  type: number
7082
7143
  surfacedAt:
@@ -8287,6 +8348,9 @@ paths:
8287
8348
  - messageId
8288
8349
  - title
8289
8350
  additionalProperties: false
8351
+ historyOrphaned:
8352
+ type: boolean
8353
+ const: true
8290
8354
  archivedAt:
8291
8355
  type: number
8292
8356
  surfacedAt:
@@ -8420,7 +8484,8 @@ paths:
8420
8484
  summary: Open an inference-profile session
8421
8485
  description:
8422
8486
  Open (or replace) a session-backed inference-profile override for a conversation. Supports an optional TTL
8423
- — omit for a sticky (non-expiring) override.
8487
+ — omit for a sticky (non-expiring) override. A profile that provably cannot dispatch is rejected rather than
8488
+ pinned.
8424
8489
  tags:
8425
8490
  - conversations
8426
8491
  requestBody:
@@ -9228,8 +9293,10 @@ paths:
9228
9293
  /v1/conversations/reorder:
9229
9294
  post:
9230
9295
  operationId: conversations_reorder_post
9231
- summary: Reorder conversations
9232
- description: Batch-update display order and pin state for conversations.
9296
+ summary: Move conversations between sections
9297
+ description:
9298
+ Batch-update which group holds each conversation, and its pin state. Lists are ordered by recency, so this
9299
+ sets placement, not order.
9233
9300
  tags:
9234
9301
  - conversations
9235
9302
  requestBody:
@@ -9246,8 +9313,6 @@ paths:
9246
9313
  properties:
9247
9314
  conversationId:
9248
9315
  type: string
9249
- displayOrder:
9250
- type: number
9251
9316
  isPinned:
9252
9317
  type: boolean
9253
9318
  groupId:
@@ -9519,6 +9584,28 @@ paths:
9519
9584
  required:
9520
9585
  - ok
9521
9586
  additionalProperties: false
9587
+ /v1/conversations/unread-count:
9588
+ get:
9589
+ operationId: conversations_unreadcount_get
9590
+ summary: Unread conversation count
9591
+ description:
9592
+ "Count of foreground conversations whose latest assistant message is unseen. Matches the sidebar's unread
9593
+ indicators: archived rows and non-surfaced background/scheduled rows are excluded."
9594
+ tags:
9595
+ - conversations
9596
+ responses:
9597
+ "200":
9598
+ description: Successful response
9599
+ content:
9600
+ application/json:
9601
+ schema:
9602
+ type: object
9603
+ properties:
9604
+ count:
9605
+ type: number
9606
+ required:
9607
+ - count
9608
+ additionalProperties: false
9522
9609
  /v1/conversations/wake:
9523
9610
  post:
9524
9611
  operationId: conversations_wake_post
@@ -9545,6 +9632,9 @@ paths:
9545
9632
  cronRunId:
9546
9633
  type: string
9547
9634
  minLength: 1
9635
+ scheduleId:
9636
+ type: string
9637
+ minLength: 1
9548
9638
  persist:
9549
9639
  type: boolean
9550
9640
  externalContent:
@@ -14340,7 +14430,8 @@ paths:
14340
14430
  description:
14341
14431
  Set llm.activeProfile after validating the name against the effective profile catalog (provider-aware
14342
14432
  default expansion included). Unknown or disabled profiles are rejected so the chat-model selection cannot be
14343
- silently stripped on the next config load.
14433
+ silently stripped on the next config load. A profile that provably cannot dispatch is also rejected — there is
14434
+ no escape hatch, because an unusable active profile locks the user out of chat.
14344
14435
  tags:
14345
14436
  - inference
14346
14437
  requestBody:
@@ -14373,7 +14464,7 @@ paths:
14373
14464
  - activeProfile
14374
14465
  additionalProperties: false
14375
14466
  "400":
14376
- description: Unknown or disabled profile name
14467
+ description: Unknown or disabled profile name, or a profile that cannot serve requests
14377
14468
  /v1/inference/callsites:
14378
14469
  get:
14379
14470
  operationId: inference_callsites_get
@@ -14548,7 +14639,9 @@ paths:
14548
14639
  summary: Create an inference profile
14549
14640
  description:
14550
14641
  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.
14642
+ catalog (unless allowUnlisted), a referenced connection must exist, and the profile must be able to dispatch — a
14643
+ valid provider id with no credentialed connection behind it is rejected unless allowUnavailable is set, in which
14644
+ case it is created with a warning.
14552
14645
  tags:
14553
14646
  - inference
14554
14647
  requestBody:
@@ -14587,6 +14680,8 @@ paths:
14587
14680
  type: string
14588
14681
  allowUnlisted:
14589
14682
  type: boolean
14683
+ allowUnavailable:
14684
+ type: boolean
14590
14685
  required:
14591
14686
  - name
14592
14687
  - provider
@@ -14599,7 +14694,7 @@ paths:
14599
14694
  schema:
14600
14695
  $ref: "#/components/schemas/InferenceProfileWriteResult"
14601
14696
  "400":
14602
- description: Invalid provider, uncataloged model, or missing connection
14697
+ description: Invalid provider, uncataloged model, missing connection, or a profile that cannot serve requests
14603
14698
  "409":
14604
14699
  description: A profile with this name already exists
14605
14700
  /v1/inference/profiles/{name}:
@@ -14637,7 +14732,9 @@ paths:
14637
14732
  "404":
14638
14733
  description: Profile not found
14639
14734
  "409":
14640
- description: Profile is still referenced by activeProfile, advisorProfile, a call site, or a mix arm
14735
+ description:
14736
+ Profile is still referenced by activeProfile, advisorProfile, a call site, a default-tier override, or a
14737
+ mix arm
14641
14738
  get:
14642
14739
  operationId: inference_profiles_by_name_get
14643
14740
  summary: Get an effective inference profile
@@ -14663,8 +14760,9 @@ paths:
14663
14760
  operationId: inference_profiles_by_name_patch
14664
14761
  summary: Update an inference profile
14665
14762
  description:
14666
- Partial update of a custom profile with the same write-time validation as create. Managed default profiles
14667
- are read-only.
14763
+ Partial update of a custom profile with the same write-time validation as create. The dispatch-availability
14764
+ guard (and its allowUnavailable escape hatch) applies when the update changes provider, model, or connection;
14765
+ metadata-only edits skip it. Managed default profiles are read-only.
14668
14766
  tags:
14669
14767
  - inference
14670
14768
  parameters:
@@ -14706,6 +14804,8 @@ paths:
14706
14804
  type: string
14707
14805
  allowUnlisted:
14708
14806
  type: boolean
14807
+ allowUnavailable:
14808
+ type: boolean
14709
14809
  responses:
14710
14810
  "200":
14711
14811
  description: Successful response
@@ -14714,7 +14814,7 @@ paths:
14714
14814
  schema:
14715
14815
  $ref: "#/components/schemas/InferenceProfileWriteResult"
14716
14816
  "400":
14717
- description: Invalid fields, or attempt to edit a managed profile
14817
+ description: Invalid fields, a profile that cannot serve requests, or attempt to edit a managed profile
14718
14818
  "404":
14719
14819
  description: Profile not found
14720
14820
  /v1/inference/provider-connections:
@@ -19052,6 +19152,76 @@ paths:
19052
19152
  - requestId
19053
19153
  - entries
19054
19154
  additionalProperties: false
19155
+ answeredQuestion:
19156
+ type: object
19157
+ properties:
19158
+ requestId:
19159
+ type: string
19160
+ questions:
19161
+ type: array
19162
+ items:
19163
+ type: object
19164
+ properties:
19165
+ id:
19166
+ type: string
19167
+ question:
19168
+ type: string
19169
+ description:
19170
+ type: string
19171
+ options:
19172
+ type: array
19173
+ items:
19174
+ type: object
19175
+ properties:
19176
+ id:
19177
+ type: string
19178
+ label:
19179
+ type: string
19180
+ description:
19181
+ type: string
19182
+ required:
19183
+ - id
19184
+ - label
19185
+ additionalProperties: false
19186
+ freeTextPlaceholder:
19187
+ type: string
19188
+ required:
19189
+ - id
19190
+ - question
19191
+ - options
19192
+ additionalProperties: false
19193
+ responses:
19194
+ type: array
19195
+ items:
19196
+ type: object
19197
+ properties:
19198
+ questionId:
19199
+ type: string
19200
+ decision:
19201
+ type: string
19202
+ enum:
19203
+ - option
19204
+ - free_text
19205
+ - skipped
19206
+ optionId:
19207
+ type: string
19208
+ text:
19209
+ type: string
19210
+ required:
19211
+ - questionId
19212
+ - decision
19213
+ additionalProperties: false
19214
+ overall:
19215
+ type: string
19216
+ enum:
19217
+ - completed
19218
+ - closed
19219
+ required:
19220
+ - requestId
19221
+ - questions
19222
+ - responses
19223
+ - overall
19224
+ additionalProperties: false
19055
19225
  required:
19056
19226
  - name
19057
19227
  - input
@@ -19491,6 +19661,76 @@ paths:
19491
19661
  - requestId
19492
19662
  - entries
19493
19663
  additionalProperties: false
19664
+ answeredQuestion:
19665
+ type: object
19666
+ properties:
19667
+ requestId:
19668
+ type: string
19669
+ questions:
19670
+ type: array
19671
+ items:
19672
+ type: object
19673
+ properties:
19674
+ id:
19675
+ type: string
19676
+ question:
19677
+ type: string
19678
+ description:
19679
+ type: string
19680
+ options:
19681
+ type: array
19682
+ items:
19683
+ type: object
19684
+ properties:
19685
+ id:
19686
+ type: string
19687
+ label:
19688
+ type: string
19689
+ description:
19690
+ type: string
19691
+ required:
19692
+ - id
19693
+ - label
19694
+ additionalProperties: false
19695
+ freeTextPlaceholder:
19696
+ type: string
19697
+ required:
19698
+ - id
19699
+ - question
19700
+ - options
19701
+ additionalProperties: false
19702
+ responses:
19703
+ type: array
19704
+ items:
19705
+ type: object
19706
+ properties:
19707
+ questionId:
19708
+ type: string
19709
+ decision:
19710
+ type: string
19711
+ enum:
19712
+ - option
19713
+ - free_text
19714
+ - skipped
19715
+ optionId:
19716
+ type: string
19717
+ text:
19718
+ type: string
19719
+ required:
19720
+ - questionId
19721
+ - decision
19722
+ additionalProperties: false
19723
+ overall:
19724
+ type: string
19725
+ enum:
19726
+ - completed
19727
+ - closed
19728
+ required:
19729
+ - requestId
19730
+ - questions
19731
+ - responses
19732
+ - overall
19733
+ additionalProperties: false
19494
19734
  required:
19495
19735
  - name
19496
19736
  - input
@@ -19836,8 +20076,8 @@ paths:
19836
20076
  type: string
19837
20077
  clientOs:
19838
20078
  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.
20079
+ Client OS surface ("web" | "ios" | "macos" | "windows" | "android"), reported separately from `interface`.
20080
+ Drives the per-turn `client_os` context only; does not affect transport/host-proxy capabilities.
19841
20081
  type: string
19842
20082
  visibleAppId:
19843
20083
  description:
@@ -20652,6 +20892,10 @@ paths:
20652
20892
  responses:
20653
20893
  "200":
20654
20894
  description: Successful response
20895
+ "403":
20896
+ description: The queued message was enqueued by a different actor principal.
20897
+ "404":
20898
+ description: Conversation or queued message not found.
20655
20899
  /v1/migrations/export:
20656
20900
  post:
20657
20901
  operationId: migrations_export_post
@@ -21767,8 +22011,6 @@ paths:
21767
22011
  type: string
21768
22012
  throwOnError:
21769
22013
  type: boolean
21770
- originatingConversationId:
21771
- type: string
21772
22014
  required:
21773
22015
  - sourceEventName
21774
22016
  - sourceChannel
@@ -21909,6 +22151,11 @@ paths:
21909
22151
  anyOf:
21910
22152
  - type: string
21911
22153
  - type: "null"
22154
+ acts_as:
22155
+ type: string
22156
+ enum:
22157
+ - user
22158
+ - assistant
21912
22159
  required:
21913
22160
  - provider_key
21914
22161
  - display_name
@@ -21920,6 +22167,7 @@ paths:
21920
22167
  - supports_managed_mode
21921
22168
  - managed_service_is_paid
21922
22169
  - feature_flag
22170
+ - acts_as
21923
22171
  additionalProperties: false
21924
22172
  - type: "null"
21925
22173
  apps:
@@ -22437,6 +22685,11 @@ paths:
22437
22685
  anyOf:
22438
22686
  - type: string
22439
22687
  - type: "null"
22688
+ acts_as:
22689
+ type: string
22690
+ enum:
22691
+ - user
22692
+ - assistant
22440
22693
  required:
22441
22694
  - provider_key
22442
22695
  - display_name
@@ -22448,6 +22701,7 @@ paths:
22448
22701
  - supports_managed_mode
22449
22702
  - managed_service_is_paid
22450
22703
  - feature_flag
22704
+ - acts_as
22451
22705
  additionalProperties: false
22452
22706
  required:
22453
22707
  - providers
@@ -24012,14 +24266,43 @@ paths:
24012
24266
  description:
24013
24267
  Registered tool names from `tools/<name>.{ts,js}` (filenames derived to tool names, e.g. `create-issue` →
24014
24268
  `create_issue`).
24269
+ schedules:
24270
+ type: array
24271
+ items:
24272
+ type: object
24273
+ properties:
24274
+ name:
24275
+ type: string
24276
+ description: "Schedule name: the declaration directory's name."
24277
+ cadence:
24278
+ type: string
24279
+ description: Raw schedule `expression` string from the declaration's config.
24280
+ mode:
24281
+ type: string
24282
+ enum:
24283
+ - execute
24284
+ - script
24285
+ description: "`execute` for a markdown prompt entrypoint, `script` for `index.sh`."
24286
+ required:
24287
+ - name
24288
+ - cadence
24289
+ - mode
24290
+ additionalProperties: false
24291
+ description:
24292
+ Schedules declared under `schedules/`, each a `<name>/` directory with `config.json` plus one entrypoint.
24293
+ Display surface only; files directly under `schedules/` and unsupported declarations are
24294
+ omitted.
24015
24295
  required:
24016
24296
  - skills
24017
24297
  - hooks
24018
24298
  - tools
24299
+ - schedules
24019
24300
  additionalProperties: false
24020
24301
  description: Surfaces the installed copy contributes, read from its on-disk tree.
24021
24302
  - type: "null"
24022
- description: Surfaces the installed copy contributes (skills, hooks, tools); null when the plugin is not installed.
24303
+ description:
24304
+ Surfaces the installed copy contributes (skills, hooks, tools, schedules); null when the plugin is not
24305
+ installed.
24023
24306
  required:
24024
24307
  - name
24025
24308
  - installed
@@ -24957,8 +25240,9 @@ paths:
24957
25240
  per conversation after activity (time/message thresholds, pre-compaction) — there is no global schedule, so
24958
25241
  `nextRunAt` is always null and no run-now endpoint exists. `intervalMs` is the per-conversation time threshold
24959
25242
  (`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`).
25243
+ conversation across both legacy and fork sources, `available` gates on `memory.enabled` (not
25244
+ `memory.v2.enabled`), and `enabled` narrows that by `memory.retrospective.enabled`, the per-pass kill switch
25245
+ that stops retrospectives without disabling the rest of memory.
24962
25246
  tags:
24963
25247
  - retrospective
24964
25248
  responses:
@@ -25244,6 +25528,12 @@ paths:
25244
25528
  schema:
25245
25529
  type: string
25246
25530
  description: When 'true', include deferred schedules that are normally hidden.
25531
+ - name: inference_profile
25532
+ in: query
25533
+ required: false
25534
+ schema:
25535
+ type: string
25536
+ description: Return only schedules pinned to this inference profile (llm.profiles key).
25247
25537
  responses:
25248
25538
  "200":
25249
25539
  description: Successful response
@@ -25359,8 +25649,24 @@ paths:
25359
25649
  anyOf:
25360
25650
  - type: string
25361
25651
  - type: "null"
25652
+ sourceKey:
25653
+ anyOf:
25654
+ - type: string
25655
+ - type: "null"
25656
+ description:
25657
+ Plugin declaration this schedule mirrors (plugin:<pluginName>/<scheduleName>); null for user-created
25658
+ schedules
25659
+ userEnabled:
25660
+ anyOf:
25661
+ - type: boolean
25662
+ - type: "null"
25663
+ description:
25664
+ User enable/disable override on a plugin-sourced schedule; null when the declaration's own enabled value
25665
+ applies. Always null for user-created schedules.
25362
25666
  isOneShot:
25363
25667
  type: boolean
25668
+ isDeferred:
25669
+ type: boolean
25364
25670
  required:
25365
25671
  - id
25366
25672
  - name
@@ -25391,7 +25697,10 @@ paths:
25391
25697
  - reuseConversation
25392
25698
  - wakeConversationId
25393
25699
  - workflowName
25700
+ - sourceKey
25701
+ - userEnabled
25394
25702
  - isOneShot
25703
+ - isDeferred
25395
25704
  additionalProperties: false
25396
25705
  description: Schedule objects
25397
25706
  required:
@@ -25453,8 +25762,10 @@ paths:
25453
25762
  - type: string
25454
25763
  - type: "null"
25455
25764
  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.
25765
+ Inference profile (llm.profiles key) the schedule's runs use. Omitted or null pins the schedule to the
25766
+ currently resolved default profile, so its model does not move when that default changes.
25767
+ Workflow-mode schedules resolve a model per workflow step, so the pin is recorded but does not
25768
+ govern their runs.
25458
25769
  required:
25459
25770
  - name
25460
25771
  - expression
@@ -25571,8 +25882,24 @@ paths:
25571
25882
  anyOf:
25572
25883
  - type: string
25573
25884
  - type: "null"
25885
+ sourceKey:
25886
+ anyOf:
25887
+ - type: string
25888
+ - type: "null"
25889
+ description:
25890
+ Plugin declaration this schedule mirrors (plugin:<pluginName>/<scheduleName>); null for user-created
25891
+ schedules
25892
+ userEnabled:
25893
+ anyOf:
25894
+ - type: boolean
25895
+ - type: "null"
25896
+ description:
25897
+ User enable/disable override on a plugin-sourced schedule; null when the declaration's own enabled value
25898
+ applies. Always null for user-created schedules.
25574
25899
  isOneShot:
25575
25900
  type: boolean
25901
+ isDeferred:
25902
+ type: boolean
25576
25903
  required:
25577
25904
  - id
25578
25905
  - name
@@ -25603,7 +25930,10 @@ paths:
25603
25930
  - reuseConversation
25604
25931
  - wakeConversationId
25605
25932
  - workflowName
25933
+ - sourceKey
25934
+ - userEnabled
25606
25935
  - isOneShot
25936
+ - isDeferred
25607
25937
  additionalProperties: false
25608
25938
  description: The created schedule
25609
25939
  required:
@@ -25737,8 +26067,24 @@ paths:
25737
26067
  anyOf:
25738
26068
  - type: string
25739
26069
  - type: "null"
26070
+ sourceKey:
26071
+ anyOf:
26072
+ - type: string
26073
+ - type: "null"
26074
+ description:
26075
+ Plugin declaration this schedule mirrors (plugin:<pluginName>/<scheduleName>); null for user-created
26076
+ schedules
26077
+ userEnabled:
26078
+ anyOf:
26079
+ - type: boolean
26080
+ - type: "null"
26081
+ description:
26082
+ User enable/disable override on a plugin-sourced schedule; null when the declaration's own enabled value
26083
+ applies. Always null for user-created schedules.
25740
26084
  isOneShot:
25741
26085
  type: boolean
26086
+ isDeferred:
26087
+ type: boolean
25742
26088
  required:
25743
26089
  - id
25744
26090
  - name
@@ -25769,7 +26115,10 @@ paths:
25769
26115
  - reuseConversation
25770
26116
  - wakeConversationId
25771
26117
  - workflowName
26118
+ - sourceKey
26119
+ - userEnabled
25772
26120
  - isOneShot
26121
+ - isDeferred
25773
26122
  additionalProperties: false
25774
26123
  description: Updated schedule list
25775
26124
  required:
@@ -25900,8 +26249,24 @@ paths:
25900
26249
  anyOf:
25901
26250
  - type: string
25902
26251
  - type: "null"
26252
+ sourceKey:
26253
+ anyOf:
26254
+ - type: string
26255
+ - type: "null"
26256
+ description:
26257
+ Plugin declaration this schedule mirrors (plugin:<pluginName>/<scheduleName>); null for user-created
26258
+ schedules
26259
+ userEnabled:
26260
+ anyOf:
26261
+ - type: boolean
26262
+ - type: "null"
26263
+ description:
26264
+ User enable/disable override on a plugin-sourced schedule; null when the declaration's own enabled value
26265
+ applies. Always null for user-created schedules.
25903
26266
  isOneShot:
25904
26267
  type: boolean
26268
+ isDeferred:
26269
+ type: boolean
25905
26270
  required:
25906
26271
  - id
25907
26272
  - name
@@ -25932,7 +26297,10 @@ paths:
25932
26297
  - reuseConversation
25933
26298
  - wakeConversationId
25934
26299
  - workflowName
26300
+ - sourceKey
26301
+ - userEnabled
25935
26302
  - isOneShot
26303
+ - isDeferred
25936
26304
  additionalProperties: false
25937
26305
  description: Schedule object
25938
26306
  required:
@@ -26005,8 +26373,9 @@ paths:
26005
26373
  - type: string
26006
26374
  - type: "null"
26007
26375
  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
26376
+ Inference profile (llm.profiles key) the schedule's runs use; null re-pins the schedule to the currently
26377
+ resolved default profile. Workflow-mode schedules resolve a model per workflow step, so the pin is
26378
+ recorded but does not govern their runs.
26010
26379
  responses:
26011
26380
  "200":
26012
26381
  description: Successful response
@@ -26122,8 +26491,24 @@ paths:
26122
26491
  anyOf:
26123
26492
  - type: string
26124
26493
  - type: "null"
26494
+ sourceKey:
26495
+ anyOf:
26496
+ - type: string
26497
+ - type: "null"
26498
+ description:
26499
+ Plugin declaration this schedule mirrors (plugin:<pluginName>/<scheduleName>); null for user-created
26500
+ schedules
26501
+ userEnabled:
26502
+ anyOf:
26503
+ - type: boolean
26504
+ - type: "null"
26505
+ description:
26506
+ User enable/disable override on a plugin-sourced schedule; null when the declaration's own enabled value
26507
+ applies. Always null for user-created schedules.
26125
26508
  isOneShot:
26126
26509
  type: boolean
26510
+ isDeferred:
26511
+ type: boolean
26127
26512
  required:
26128
26513
  - id
26129
26514
  - name
@@ -26154,7 +26539,10 @@ paths:
26154
26539
  - reuseConversation
26155
26540
  - wakeConversationId
26156
26541
  - workflowName
26542
+ - sourceKey
26543
+ - userEnabled
26157
26544
  - isOneShot
26545
+ - isDeferred
26158
26546
  additionalProperties: false
26159
26547
  description: Updated schedule list
26160
26548
  required:
@@ -26288,8 +26676,24 @@ paths:
26288
26676
  anyOf:
26289
26677
  - type: string
26290
26678
  - type: "null"
26679
+ sourceKey:
26680
+ anyOf:
26681
+ - type: string
26682
+ - type: "null"
26683
+ description:
26684
+ Plugin declaration this schedule mirrors (plugin:<pluginName>/<scheduleName>); null for user-created
26685
+ schedules
26686
+ userEnabled:
26687
+ anyOf:
26688
+ - type: boolean
26689
+ - type: "null"
26690
+ description:
26691
+ User enable/disable override on a plugin-sourced schedule; null when the declaration's own enabled value
26692
+ applies. Always null for user-created schedules.
26291
26693
  isOneShot:
26292
26694
  type: boolean
26695
+ isDeferred:
26696
+ type: boolean
26293
26697
  required:
26294
26698
  - id
26295
26699
  - name
@@ -26320,7 +26724,10 @@ paths:
26320
26724
  - reuseConversation
26321
26725
  - wakeConversationId
26322
26726
  - workflowName
26727
+ - sourceKey
26728
+ - userEnabled
26323
26729
  - isOneShot
26730
+ - isDeferred
26324
26731
  additionalProperties: false
26325
26732
  description: Updated schedule list
26326
26733
  required:
@@ -26330,7 +26737,9 @@ paths:
26330
26737
  post:
26331
26738
  operationId: schedules_by_id_run_post
26332
26739
  summary: Run schedule now
26333
- description: Trigger an immediate execution of a schedule.
26740
+ description:
26741
+ Trigger an immediate execution of a schedule. A plugin-sourced schedule is rejected with a 400 when its
26742
+ plugin is disabled or no longer declares it.
26334
26743
  tags:
26335
26744
  - schedules
26336
26745
  parameters:
@@ -26454,8 +26863,24 @@ paths:
26454
26863
  anyOf:
26455
26864
  - type: string
26456
26865
  - type: "null"
26866
+ sourceKey:
26867
+ anyOf:
26868
+ - type: string
26869
+ - type: "null"
26870
+ description:
26871
+ Plugin declaration this schedule mirrors (plugin:<pluginName>/<scheduleName>); null for user-created
26872
+ schedules
26873
+ userEnabled:
26874
+ anyOf:
26875
+ - type: boolean
26876
+ - type: "null"
26877
+ description:
26878
+ User enable/disable override on a plugin-sourced schedule; null when the declaration's own enabled value
26879
+ applies. Always null for user-created schedules.
26457
26880
  isOneShot:
26458
26881
  type: boolean
26882
+ isDeferred:
26883
+ type: boolean
26459
26884
  required:
26460
26885
  - id
26461
26886
  - name
@@ -26486,7 +26911,10 @@ paths:
26486
26911
  - reuseConversation
26487
26912
  - wakeConversationId
26488
26913
  - workflowName
26914
+ - sourceKey
26915
+ - userEnabled
26489
26916
  - isOneShot
26917
+ - isDeferred
26490
26918
  additionalProperties: false
26491
26919
  description: Updated schedule list
26492
26920
  required:
@@ -26621,7 +27049,7 @@ paths:
26621
27049
  post:
26622
27050
  operationId: schedules_by_id_toggle_post
26623
27051
  summary: Toggle schedule
26624
- description: Enable or disable a schedule.
27052
+ description: Enable or disable a schedule. On a plugin-managed schedule this records the user's override (userEnabled).
26625
27053
  tags:
26626
27054
  - schedules
26627
27055
  parameters:
@@ -26757,8 +27185,24 @@ paths:
26757
27185
  anyOf:
26758
27186
  - type: string
26759
27187
  - type: "null"
27188
+ sourceKey:
27189
+ anyOf:
27190
+ - type: string
27191
+ - type: "null"
27192
+ description:
27193
+ Plugin declaration this schedule mirrors (plugin:<pluginName>/<scheduleName>); null for user-created
27194
+ schedules
27195
+ userEnabled:
27196
+ anyOf:
27197
+ - type: boolean
27198
+ - type: "null"
27199
+ description:
27200
+ User enable/disable override on a plugin-sourced schedule; null when the declaration's own enabled value
27201
+ applies. Always null for user-created schedules.
26760
27202
  isOneShot:
26761
27203
  type: boolean
27204
+ isDeferred:
27205
+ type: boolean
26762
27206
  required:
26763
27207
  - id
26764
27208
  - name
@@ -26789,12 +27233,55 @@ paths:
26789
27233
  - reuseConversation
26790
27234
  - wakeConversationId
26791
27235
  - workflowName
27236
+ - sourceKey
27237
+ - userEnabled
26792
27238
  - isOneShot
27239
+ - isDeferred
26793
27240
  additionalProperties: false
26794
27241
  description: Updated schedule list
26795
27242
  required:
26796
27243
  - schedules
26797
27244
  additionalProperties: false
27245
+ /v1/schedules/reassign-profile:
27246
+ post:
27247
+ operationId: schedules_reassignprofile_post
27248
+ summary: Reassign schedules to another inference profile
27249
+ description:
27250
+ Move schedules onto one inference profile. Pass 'from' to move only the schedules pinned to that profile,
27251
+ so deleting a profile does not leave its schedules pointing at a name that no longer exists. Omit 'from' to move
27252
+ every schedule, which re-pins the whole set onto one profile. Schedules already pinned to the target are
27253
+ skipped.
27254
+ tags:
27255
+ - schedules
27256
+ requestBody:
27257
+ required: true
27258
+ content:
27259
+ application/json:
27260
+ schema:
27261
+ type: object
27262
+ properties:
27263
+ from:
27264
+ description: Inference profile key the schedules are pinned to now; omit to select every schedule
27265
+ type: string
27266
+ to:
27267
+ type: string
27268
+ description: Inference profile key to move them to; must be configured
27269
+ required:
27270
+ - to
27271
+ responses:
27272
+ "200":
27273
+ description: Successful response
27274
+ content:
27275
+ application/json:
27276
+ schema:
27277
+ type: object
27278
+ properties:
27279
+ reassigned:
27280
+ type: number
27281
+ description: Number of schedules moved
27282
+ required:
27283
+ - reassigned
27284
+ additionalProperties: false
26798
27285
  /v1/schedules/usage-summary:
26799
27286
  get:
26800
27287
  operationId: schedules_usagesummary_get
@@ -28940,6 +29427,73 @@ paths:
28940
29427
  - isBinary
28941
29428
  - content
28942
29429
  additionalProperties: false
29430
+ /v1/skills/{id}/history:
29431
+ get:
29432
+ operationId: skills_by_id_history_get
29433
+ summary: Get skill revision history
29434
+ description:
29435
+ "Return a skill's recent updates, newest first, each with a combined diff across the skill directory.
29436
+ Read-only: revisions come from the workspace git repository, which already retains prior content. Commits whose
29437
+ only in-skill change is the `lastUsedAt` usage stamp are omitted, so entries are edits rather than loads."
29438
+ tags:
29439
+ - skills
29440
+ parameters:
29441
+ - name: id
29442
+ in: path
29443
+ required: true
29444
+ schema:
29445
+ type: string
29446
+ - name: limit
29447
+ in: query
29448
+ required: false
29449
+ schema:
29450
+ type: integer
29451
+ description: Maximum revisions to return, newest first. Defaults to 20 and is clamped to 100.
29452
+ responses:
29453
+ "200":
29454
+ description: Successful response
29455
+ content:
29456
+ application/json:
29457
+ schema:
29458
+ type: object
29459
+ properties:
29460
+ skillId:
29461
+ type: string
29462
+ description: The skill these revisions belong to
29463
+ revisions:
29464
+ type: array
29465
+ items:
29466
+ type: object
29467
+ properties:
29468
+ id:
29469
+ type: string
29470
+ description: Opaque revision identifier
29471
+ changedAt:
29472
+ type: string
29473
+ description: ISO-8601 time of the update
29474
+ files:
29475
+ type: array
29476
+ items:
29477
+ type: string
29478
+ description: Paths changed, relative to the skill directory
29479
+ diff:
29480
+ type: string
29481
+ description: Unified diff of this update, scoped to the skill
29482
+ required:
29483
+ - id
29484
+ - changedAt
29485
+ - files
29486
+ - diff
29487
+ additionalProperties: false
29488
+ description: Recent updates, newest first
29489
+ truncatedByCompaction:
29490
+ type: boolean
29491
+ description: Older history was squashed away, so the oldest entry is a floor rather than the skill's creation
29492
+ required:
29493
+ - skillId
29494
+ - revisions
29495
+ - truncatedByCompaction
29496
+ additionalProperties: false
28943
29497
  /v1/skills/{id}/inspect:
28944
29498
  get:
28945
29499
  operationId: skills_by_id_inspect_get
@@ -34370,13 +34924,14 @@ components:
34370
34924
  type: string
34371
34925
  enum:
34372
34926
  - ok
34373
- - missing_default
34927
+ - incomplete
34374
34928
  - missing_connection
34375
34929
  - missing_credential
34376
34930
  - provider_mismatch
34377
34931
  - unsupported_auth
34378
34932
  - vellum_unauthenticated
34379
34933
  - unknown
34934
+ - missing_default
34380
34935
  message:
34381
34936
  type: string
34382
34937
  required:
@@ -34602,6 +35157,7 @@ components:
34602
35157
  type: string
34603
35158
  enum:
34604
35159
  - ok
35160
+ - incomplete
34605
35161
  - missing_connection
34606
35162
  - missing_credential
34607
35163
  - provider_mismatch
@@ -34630,11 +35186,14 @@ components:
34630
35186
  type: array
34631
35187
  items:
34632
35188
  type: string
35189
+ verify:
35190
+ type: string
34633
35191
  required:
34634
35192
  - ok
34635
35193
  - name
34636
35194
  - entry
34637
35195
  - warnings
35196
+ - verify
34638
35197
  additionalProperties: false
34639
35198
  InferenceProfileDetail:
34640
35199
  type: object