@vellumai/assistant 0.8.10 → 0.8.11-dev.202606112057.e4bc22e

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 (417) hide show
  1. package/bun.lock +63 -118
  2. package/docs/workspace-tools.md +196 -0
  3. package/examples/plugins/echo/README.md +3 -3
  4. package/knip.json +1 -0
  5. package/openapi.yaml +578 -128
  6. package/package.json +2 -3
  7. package/scripts/build-plugin-api.ts +299 -0
  8. package/src/__tests__/agent-loop-callsite-precedence.test.ts +7 -0
  9. package/src/__tests__/agent-loop-compaction-events.test.ts +197 -0
  10. package/src/__tests__/agent-loop-exit-reason.test.ts +93 -96
  11. package/src/__tests__/agent-loop-mutable-latest-user-message.test.ts +2 -0
  12. package/src/__tests__/agent-loop-output-hooks.test.ts +274 -1
  13. package/src/__tests__/agent-loop-override-profile.test.ts +3 -0
  14. package/src/__tests__/agent-loop-provider-error-recording.test.ts +4 -0
  15. package/src/__tests__/agent-loop-thinking.test.ts +4 -0
  16. package/src/__tests__/agent-loop.test.ts +578 -5
  17. package/src/__tests__/agent-wake-disk-pressure-callsite.test.ts +0 -1
  18. package/src/__tests__/approval-cascade.test.ts +1 -0
  19. package/src/__tests__/background-workers-disk-pressure.test.ts +0 -2
  20. package/src/__tests__/btw-routes.test.ts +7 -35
  21. package/src/__tests__/build-persisted-content.test.ts +75 -1
  22. package/src/__tests__/catalog-install-normalize.test.ts +141 -0
  23. package/src/__tests__/ces-startup-timeout.test.ts +60 -0
  24. package/src/__tests__/compaction-events.test.ts +1 -0
  25. package/src/__tests__/config-managed-gemini-defaults.test.ts +2 -46
  26. package/src/__tests__/context-overflow-reducer.test.ts +264 -124
  27. package/src/__tests__/context-window-manager-overflow-rung.test.ts +351 -0
  28. package/src/__tests__/conversation-abort-tool-results.test.ts +1 -1
  29. package/src/__tests__/conversation-agent-loop-inference-profile.test.ts +13 -5
  30. package/src/__tests__/conversation-agent-loop-overflow.test.ts +284 -455
  31. package/src/__tests__/conversation-agent-loop.test.ts +131 -551
  32. package/src/__tests__/conversation-app-control-instantiation.test.ts +13 -0
  33. package/src/__tests__/conversation-confirmation-signals.test.ts +1 -0
  34. package/src/__tests__/conversation-error.test.ts +2 -6
  35. package/src/__tests__/conversation-fork-crud.test.ts +259 -0
  36. package/src/__tests__/conversation-history-web-search.test.ts +1 -1
  37. package/src/__tests__/conversation-lifecycle.test.ts +257 -1
  38. package/src/__tests__/conversation-process-callsite.test.ts +1 -0
  39. package/src/__tests__/conversation-provider-retry-repair.test.ts +38 -377
  40. package/src/__tests__/conversation-queue.test.ts +1 -39
  41. package/src/__tests__/conversation-runtime-assembly.test.ts +119 -8
  42. package/src/__tests__/conversation-skill-tools.test.ts +491 -5
  43. package/src/__tests__/conversation-slash-queue.test.ts +1 -1
  44. package/src/__tests__/conversation-slash-unknown.test.ts +1 -0
  45. package/src/__tests__/conversation-speed-override.test.ts +1 -0
  46. package/src/__tests__/conversation-store.test.ts +74 -0
  47. package/src/__tests__/conversation-surfaces-app-control.test.ts +4 -1
  48. package/src/__tests__/conversation-tool-setup-attribution.test.ts +323 -0
  49. package/src/__tests__/conversation-tool-setup-tools-disabled.test.ts +34 -0
  50. package/src/__tests__/conversation-workspace-cache-state.test.ts +1 -0
  51. package/src/__tests__/conversation-workspace-injection.test.ts +1 -1
  52. package/src/__tests__/conversation-workspace-tool-tracking.test.ts +1 -0
  53. package/src/__tests__/corrected-target.test.ts +93 -0
  54. package/src/__tests__/credential-execution-feature-gates.test.ts +3 -5
  55. package/src/__tests__/credential-execution-tools.test.ts +23 -11
  56. package/src/__tests__/credential-security-invariants.test.ts +6 -1
  57. package/src/__tests__/db-schedule-syntax-migration.test.ts +80 -0
  58. package/src/__tests__/device-id.test.ts +70 -1
  59. package/src/__tests__/embedding-managed-proxy-selection.test.ts +6 -40
  60. package/src/__tests__/empty-response-hook.test.ts +242 -66
  61. package/src/__tests__/external-plugin-loader.test.ts +0 -31
  62. package/src/__tests__/get-skill-detail-audit.test.ts +43 -1
  63. package/src/__tests__/guardian-routing-invariants.test.ts +91 -0
  64. package/src/__tests__/history-repair-hook.test.ts +228 -3
  65. package/src/__tests__/host-app-control-proxy.test.ts +45 -0
  66. package/src/__tests__/host-browser-proxy.test.ts +254 -9
  67. package/src/__tests__/identity-intro-cache.test.ts +12 -5
  68. package/src/__tests__/identity-routes.test.ts +17 -57
  69. package/src/__tests__/image-recovery-hook.test.ts +387 -0
  70. package/src/__tests__/injector-chain.test.ts +5 -4
  71. package/src/__tests__/injector-v3-suppression.test.ts +373 -47
  72. package/src/__tests__/intent-routing.test.ts +7 -0
  73. package/src/__tests__/memory-retrieval-hook.test.ts +117 -15
  74. package/src/__tests__/model-intents.test.ts +1 -1
  75. package/src/__tests__/notification-decision-strategy.test.ts +3 -3
  76. package/src/__tests__/oauth-store.test.ts +0 -85
  77. package/src/__tests__/{context-overflow-policy.test.ts → overflow-policy.test.ts} +1 -1
  78. package/src/__tests__/parallel-tool.benchmark.test.ts +4 -0
  79. package/src/__tests__/persist-unsendable-image-downscale.test.ts +29 -9
  80. package/src/__tests__/persist-unsendable-image.test.ts +4 -4
  81. package/src/__tests__/persistence-secret-redaction.test.ts +78 -0
  82. package/src/__tests__/plugin-bootstrap.test.ts +82 -73
  83. package/src/__tests__/plugin-tool-contribution.test.ts +7 -4
  84. package/src/__tests__/plugin-types.test.ts +0 -8
  85. package/src/__tests__/provider-catalog-visibility.test.ts +1 -9
  86. package/src/__tests__/prune-old-conversations-job.test.ts +99 -0
  87. package/src/__tests__/registry.test.ts +240 -1
  88. package/src/__tests__/require-fresh-approval.test.ts +3 -0
  89. package/src/__tests__/schedule-routes.test.ts +116 -1
  90. package/src/__tests__/schedule-store.test.ts +28 -0
  91. package/src/__tests__/schedule-tools.test.ts +94 -1
  92. package/src/__tests__/server-history-render.test.ts +39 -0
  93. package/src/__tests__/skill-projection-feature-flag.test.ts +13 -0
  94. package/src/__tests__/skill-projection.benchmark.test.ts +25 -7
  95. package/src/__tests__/skills.test.ts +202 -0
  96. package/src/__tests__/slim-skill-category.test.ts +195 -0
  97. package/src/__tests__/strip-memory-injections.test.ts +33 -39
  98. package/src/__tests__/test-support/tool-invocation-seed.ts +79 -0
  99. package/src/__tests__/title-generate-hook.test.ts +9 -7
  100. package/src/__tests__/tool-audit-listener.test.ts +264 -1
  101. package/src/__tests__/tool-error-hook.test.ts +4 -3
  102. package/src/__tests__/tool-execution-pipeline.benchmark.test.ts +1 -0
  103. package/src/__tests__/tool-executor-lifecycle-events.test.ts +273 -0
  104. package/src/__tests__/tool-result-truncate-hook.test.ts +1 -0
  105. package/src/__tests__/tool-start-timestamp.test.ts +218 -0
  106. package/src/__tests__/tools-get-route.test.ts +202 -0
  107. package/src/__tests__/workspace-tool-loader.test.ts +319 -0
  108. package/src/__tests__/workspace-tools-watcher-flag.test.ts +70 -0
  109. package/src/agent/loop.ts +569 -319
  110. package/src/api/events/tool-result.ts +9 -0
  111. package/src/api/events/tool-use-start.ts +7 -0
  112. package/src/api/events/usage-progress.ts +28 -0
  113. package/src/api/index.ts +16 -0
  114. package/src/api/responses/conversation-message.ts +135 -27
  115. package/src/api/responses/memory-v3-selection-log.ts +4 -4
  116. package/src/approvals/guardian-request-resolvers.ts +26 -0
  117. package/src/browser-session/backends/host-bridge.ts +29 -0
  118. package/src/browser-session/index.ts +1 -0
  119. package/src/browser-session/types.ts +5 -1
  120. package/src/bundler/app-bundler.ts +25 -42
  121. package/src/cli/commands/__tests__/schedules.test.ts +62 -4
  122. package/src/cli/commands/__tests__/skills.test.ts +53 -0
  123. package/src/cli/commands/channel-verification-sessions.ts +6 -6
  124. package/src/cli/commands/inference-providers.ts +0 -8
  125. package/src/cli/commands/plugins.ts +2 -2
  126. package/src/cli/commands/schedules.ts +27 -4
  127. package/src/cli/commands/skills.ts +187 -146
  128. package/src/cli/commands/tools.ts +106 -0
  129. package/src/cli/lib/__tests__/install-from-github.test.ts +256 -328
  130. package/src/cli/lib/__tests__/plugin-artifact.test.ts +116 -0
  131. package/src/cli/lib/__tests__/plugin-catalog-cache.test.ts +6 -2
  132. package/src/cli/lib/__tests__/plugin-details.test.ts +166 -16
  133. package/src/cli/lib/__tests__/plugin-marketplace.test.ts +2 -2
  134. package/src/cli/lib/__tests__/search-plugins.test.ts +145 -240
  135. package/src/cli/lib/install-from-github.ts +187 -117
  136. package/src/cli/lib/plugin-artifact.ts +84 -0
  137. package/src/cli/lib/plugin-catalog-cache.ts +9 -9
  138. package/src/cli/lib/plugin-details.ts +56 -69
  139. package/src/cli/lib/plugin-marketplace.ts +42 -14
  140. package/src/cli/lib/search-plugins.ts +29 -129
  141. package/src/cli/program.ts +2 -0
  142. package/src/config/bundled-skills/acp/SKILL.md +1 -0
  143. package/src/config/bundled-skills/app-builder/SKILL.md +1 -0
  144. package/src/config/bundled-skills/app-control/SKILL.md +1 -0
  145. package/src/config/bundled-skills/computer-use/SKILL.md +1 -0
  146. package/src/config/bundled-skills/contacts/SKILL.md +1 -0
  147. package/src/config/bundled-skills/document-editor/SKILL.md +1 -0
  148. package/src/config/bundled-skills/followups/SKILL.md +1 -0
  149. package/src/config/bundled-skills/image-studio/SKILL.md +1 -0
  150. package/src/config/bundled-skills/media-processing/SKILL.md +1 -0
  151. package/src/config/bundled-skills/messaging/SKILL.md +1 -0
  152. package/src/config/bundled-skills/phone-calls/SKILL.md +1 -0
  153. package/src/config/bundled-skills/playbooks/SKILL.md +1 -0
  154. package/src/config/bundled-skills/schedule/SKILL.md +1 -0
  155. package/src/config/bundled-skills/schedule/TOOLS.json +11 -3
  156. package/src/config/bundled-skills/sequences/SKILL.md +1 -0
  157. package/src/config/bundled-skills/settings/SKILL.md +1 -0
  158. package/src/config/bundled-skills/skill-management/SKILL.md +101 -1
  159. package/src/config/bundled-skills/subagent/SKILL.md +1 -0
  160. package/src/config/bundled-skills/transcribe/SKILL.md +1 -0
  161. package/src/config/env-registry.ts +23 -0
  162. package/src/config/feature-flag-registry.json +17 -89
  163. package/src/config/loader.ts +5 -22
  164. package/src/config/schema.ts +2 -0
  165. package/src/config/schemas/__tests__/compaction-logs.test.ts +56 -0
  166. package/src/config/schemas/__tests__/memory-v2.test.ts +0 -1
  167. package/src/config/schemas/__tests__/memory-v3.test.ts +61 -1
  168. package/src/config/schemas/compaction-logs.ts +79 -0
  169. package/src/config/schemas/memory-v2.ts +0 -8
  170. package/src/config/schemas/memory-v3.ts +104 -33
  171. package/src/config/seed-inference-profiles.ts +1 -1
  172. package/src/config/skills.ts +117 -47
  173. package/src/context/compactor.ts +11 -0
  174. package/src/context/strip-injections.ts +38 -4
  175. package/src/credential-execution/feature-gates.ts +0 -21
  176. package/src/credential-execution/startup-timeout.ts +32 -4
  177. package/src/daemon/__tests__/conversation-tool-setup-exclude.test.ts +18 -0
  178. package/src/daemon/conversation-agent-loop-handlers.ts +140 -91
  179. package/src/daemon/conversation-agent-loop.ts +123 -658
  180. package/src/daemon/conversation-error.ts +12 -48
  181. package/src/daemon/conversation-lifecycle.ts +1 -1
  182. package/src/daemon/conversation-runtime-assembly.ts +183 -22
  183. package/src/daemon/conversation-skill-tools.ts +137 -8
  184. package/src/daemon/conversation-slash.ts +0 -14
  185. package/src/daemon/conversation-store.ts +2 -19
  186. package/src/daemon/conversation-tool-setup.ts +87 -1
  187. package/src/daemon/conversation.ts +119 -50
  188. package/src/daemon/external-plugins-bootstrap.ts +36 -95
  189. package/src/daemon/handlers/config-channels.ts +11 -2
  190. package/src/daemon/handlers/shared.ts +9 -1
  191. package/src/daemon/handlers/skills.ts +10 -4
  192. package/src/daemon/host-app-control-proxy.ts +72 -57
  193. package/src/daemon/host-browser-proxy.ts +117 -22
  194. package/src/daemon/lifecycle.ts +34 -5
  195. package/src/daemon/message-protocol.ts +0 -7
  196. package/src/daemon/message-types/conversations.ts +2 -15
  197. package/src/daemon/message-types/schedules.ts +1 -0
  198. package/src/daemon/message-types/skills.ts +17 -0
  199. package/src/daemon/providers-setup.ts +3 -0
  200. package/src/daemon/server.ts +3 -3
  201. package/src/daemon/tool-setup-types.ts +9 -3
  202. package/src/daemon/trust-context.ts +23 -0
  203. package/src/daemon/workspace-tools-watcher.ts +324 -0
  204. package/src/events/tool-audit-listener.ts +78 -16
  205. package/src/events/tool-metrics-listener.ts +2 -5
  206. package/src/media/image-credentials.ts +2 -2
  207. package/src/memory/__tests__/compaction-log-writer-clickhouse.test.ts +227 -0
  208. package/src/memory/__tests__/conversation-queries.test.ts +176 -0
  209. package/src/memory/__tests__/jobs-worker-v2-schedule.test.ts +20 -32
  210. package/src/memory/compaction-log-writer-clickhouse.ts +418 -0
  211. package/src/memory/conversation-attention-store.ts +1 -0
  212. package/src/memory/conversation-crud.ts +134 -3
  213. package/src/memory/conversation-queries.ts +64 -7
  214. package/src/memory/db-init.ts +14 -0
  215. package/src/memory/delivery-channels.ts +0 -69
  216. package/src/memory/embedding-backend.test.ts +130 -1
  217. package/src/memory/embedding-backend.ts +79 -106
  218. package/src/memory/embedding-gemini.ts +5 -0
  219. package/src/memory/graph/__tests__/conversation-graph-memory-v2-routing.test.ts +12 -0
  220. package/src/memory/graph/__tests__/handle-remember-v2.test.ts +19 -0
  221. package/src/memory/graph/conversation-graph-memory.ts +36 -25
  222. package/src/memory/graph/tool-handlers.ts +3 -0
  223. package/src/memory/job-handlers/cleanup.ts +3 -1
  224. package/src/memory/jobs-store.ts +0 -28
  225. package/src/memory/jobs-worker.ts +10 -22
  226. package/src/memory/memory-marker.ts +29 -0
  227. package/src/memory/memory-retrospective-startup-cleanup.ts +1 -1
  228. package/src/memory/migrations/268-add-memory-v3-selections.ts +6 -0
  229. package/src/memory/migrations/270-schedule-description.ts +36 -0
  230. package/src/memory/migrations/275-tool-invocations-add-skill-id.test.ts +81 -0
  231. package/src/memory/migrations/275-tool-invocations-add-skill-id.ts +20 -0
  232. package/src/memory/migrations/276-tool-invocations-created-at-id-index.test.ts +68 -0
  233. package/src/memory/migrations/276-tool-invocations-created-at-id-index.ts +20 -0
  234. package/src/memory/migrations/277-add-memory-v3-ever-injected.ts +29 -0
  235. package/src/memory/migrations/278-tool-invocations-telemetry-columns.test.ts +96 -0
  236. package/src/memory/migrations/278-tool-invocations-telemetry-columns.ts +39 -0
  237. package/src/memory/migrations/279-create-skill-loaded-events.test.ts +84 -0
  238. package/src/memory/migrations/279-create-skill-loaded-events.ts +26 -0
  239. package/src/memory/migrations/280-conversations-surfaced-at.test.ts +88 -0
  240. package/src/memory/migrations/280-conversations-surfaced-at.ts +24 -0
  241. package/src/memory/migrations/index.ts +10 -0
  242. package/src/memory/migrations/registry.ts +8 -0
  243. package/src/memory/schema/conversations.ts +16 -0
  244. package/src/memory/schema/infrastructure.ts +26 -0
  245. package/src/memory/skill-loaded-events-store.test.ts +160 -0
  246. package/src/memory/skill-loaded-events-store.ts +95 -0
  247. package/src/memory/tool-executed-events-store.test.ts +219 -0
  248. package/src/memory/tool-executed-events-store.ts +102 -0
  249. package/src/memory/tool-usage-store.ts +15 -3
  250. package/src/memory/v2/__tests__/consolidation-job.test.ts +117 -12
  251. package/src/memory/v2/__tests__/consolidation-prompt-flag-gating-guard.test.ts +189 -0
  252. package/src/memory/v2/__tests__/injected-block-slugs.test.ts +90 -0
  253. package/src/memory/v2/__tests__/page-store.test.ts +33 -0
  254. package/src/memory/v2/__tests__/prompts-consolidation.test.ts +88 -15
  255. package/src/memory/v2/activation-store.ts +50 -1
  256. package/src/memory/v2/consolidation-job.ts +113 -29
  257. package/src/memory/v2/injected-block-slugs.ts +79 -0
  258. package/src/memory/v2/injection.ts +6 -1
  259. package/src/memory/v2/prompts/consolidation.ts +414 -13
  260. package/src/memory/v2/router.ts +2 -28
  261. package/src/memory/v2/static-context.ts +1 -1
  262. package/src/memory/v2/types.ts +16 -0
  263. package/src/notifications/__tests__/copy-composer.test.ts +244 -0
  264. package/src/notifications/access-request-copy.ts +298 -0
  265. package/src/notifications/adapters/slack.ts +3 -3
  266. package/src/notifications/adapters/telegram.ts +2 -1
  267. package/src/notifications/copy-composer.ts +49 -267
  268. package/src/notifications/decision-engine.ts +16 -35
  269. package/src/notifications/home-feed-side-effect.ts +1 -6
  270. package/src/oauth/oauth-store.ts +0 -9
  271. package/src/permissions/checker.test.ts +83 -1
  272. package/src/permissions/checker.ts +25 -2
  273. package/src/permissions/gateway-threshold-reader.test.ts +182 -0
  274. package/src/permissions/gateway-threshold-reader.ts +80 -0
  275. package/src/platform/client.ts +1 -3
  276. package/src/platform/feature-gate.ts +3 -12
  277. package/src/plugin-api/constants.ts +4 -2
  278. package/src/plugin-api/index.ts +63 -11
  279. package/src/plugin-api/types.ts +236 -71
  280. package/src/plugins/defaults/compaction/compact.ts +66 -2
  281. package/src/plugins/defaults/compaction/context-overflow-reducer.ts +240 -32
  282. package/src/plugins/defaults/compaction/corrected-target.ts +53 -0
  283. package/src/{daemon/context-overflow-policy.ts → plugins/defaults/compaction/overflow-policy.ts} +1 -1
  284. package/src/plugins/defaults/compaction/window-manager.ts +303 -1
  285. package/src/plugins/defaults/empty-response/hooks/post-model-call.ts +173 -0
  286. package/src/plugins/defaults/empty-response/hooks/stop.ts +11 -115
  287. package/src/plugins/defaults/empty-response/nudge-state-store.ts +46 -0
  288. package/src/plugins/defaults/history-repair/hooks/post-model-call.ts +50 -0
  289. package/src/plugins/defaults/history-repair/hooks/stop.ts +22 -0
  290. package/src/plugins/defaults/history-repair/repair-state-store.ts +51 -0
  291. package/src/plugins/defaults/history-repair/terminal.ts +39 -2
  292. package/src/plugins/defaults/image-recovery/detect.ts +25 -0
  293. package/src/plugins/defaults/image-recovery/hooks/post-model-call.ts +73 -0
  294. package/src/plugins/defaults/image-recovery/hooks/stop.ts +22 -0
  295. package/src/plugins/defaults/image-recovery/image-recovery-state-store.ts +48 -0
  296. package/src/plugins/defaults/image-recovery/package.json +14 -0
  297. package/src/{daemon/persist-unsendable-image.ts → plugins/defaults/image-recovery/recover.ts} +67 -14
  298. package/src/plugins/defaults/index.ts +71 -5
  299. package/src/plugins/defaults/memory-retrieval/hooks/post-compact.ts +76 -112
  300. package/src/plugins/defaults/memory-retrieval/hooks/{user-prompt-submit-temp.ts → user-prompt-submit.ts} +83 -74
  301. package/src/plugins/defaults/memory-retrieval/injector-chain.ts +14 -8
  302. package/src/plugins/defaults/memory-retrieval/injectors.ts +2 -18
  303. package/src/plugins/defaults/memory-retrieval/package.json +14 -0
  304. package/src/plugins/defaults/memory-v3-shadow/__tests__/carry-integration.test.ts +1157 -0
  305. package/src/plugins/defaults/memory-v3-shadow/__tests__/injection.test.ts +683 -0
  306. package/src/plugins/defaults/memory-v3-shadow/__tests__/live-integration.test.ts +161 -140
  307. package/src/plugins/defaults/memory-v3-shadow/__tests__/maintain-job.test.ts +160 -0
  308. package/src/plugins/defaults/memory-v3-shadow/__tests__/orchestrate.test.ts +335 -316
  309. package/src/plugins/defaults/memory-v3-shadow/__tests__/pool-select.test.ts +145 -53
  310. package/src/plugins/defaults/memory-v3-shadow/__tests__/render-injection.test.ts +38 -1
  311. package/src/plugins/defaults/memory-v3-shadow/__tests__/selection-log-store.test.ts +18 -8
  312. package/src/plugins/defaults/memory-v3-shadow/__tests__/shadow-integration.test.ts +112 -71
  313. package/src/plugins/defaults/memory-v3-shadow/__tests__/shadow-plugin.test.ts +192 -51
  314. package/src/plugins/defaults/memory-v3-shadow/__tests__/types.test.ts +4 -16
  315. package/src/plugins/defaults/memory-v3-shadow/card.test.ts +173 -0
  316. package/src/plugins/defaults/memory-v3-shadow/card.ts +116 -0
  317. package/src/plugins/defaults/memory-v3-shadow/core-set.test.ts +104 -0
  318. package/src/plugins/defaults/memory-v3-shadow/core-set.ts +59 -0
  319. package/src/plugins/defaults/memory-v3-shadow/ever-injected-store.test.ts +305 -0
  320. package/src/plugins/defaults/memory-v3-shadow/ever-injected-store.ts +278 -0
  321. package/src/plugins/defaults/memory-v3-shadow/hot-set.test.ts +138 -0
  322. package/src/plugins/defaults/memory-v3-shadow/hot-set.ts +85 -0
  323. package/src/plugins/defaults/memory-v3-shadow/injector.ts +331 -24
  324. package/src/plugins/defaults/memory-v3-shadow/maintain-job.ts +119 -13
  325. package/src/plugins/defaults/memory-v3-shadow/orchestrate.ts +169 -114
  326. package/src/plugins/defaults/memory-v3-shadow/page-content.ts +47 -16
  327. package/src/plugins/defaults/memory-v3-shadow/pool-select.ts +144 -66
  328. package/src/plugins/defaults/memory-v3-shadow/prune.test.ts +758 -0
  329. package/src/plugins/defaults/memory-v3-shadow/prune.ts +471 -0
  330. package/src/plugins/defaults/memory-v3-shadow/render-injection.ts +68 -16
  331. package/src/plugins/defaults/memory-v3-shadow/selection-log-store.ts +19 -12
  332. package/src/plugins/defaults/memory-v3-shadow/shadow-plugin.ts +96 -43
  333. package/src/plugins/defaults/memory-v3-shadow/types.ts +34 -17
  334. package/src/plugins/defaults/title-generate/hooks/stop.ts +9 -11
  335. package/src/plugins/pipeline.ts +8 -5
  336. package/src/plugins/types.ts +5 -51
  337. package/src/providers/cache-control.ts +26 -0
  338. package/src/providers/inference/__tests__/base-url-route-validation.test.ts +1 -2
  339. package/src/providers/model-catalog.ts +13 -1
  340. package/src/providers/model-intents.ts +2 -2
  341. package/src/providers/openai/__tests__/tool-choice-mapping.test.ts +147 -0
  342. package/src/providers/openai/chat-completions-provider.ts +46 -0
  343. package/src/providers/openai/responses-provider.ts +45 -0
  344. package/src/providers/registry.ts +0 -8
  345. package/src/runtime/AGENTS.md +2 -0
  346. package/src/runtime/__tests__/agent-wake.test.ts +0 -1
  347. package/src/runtime/agent-wake.ts +13 -0
  348. package/src/runtime/routes/__tests__/acp-routes.test.ts +151 -0
  349. package/src/runtime/routes/__tests__/consolidation-routes.test.ts +12 -50
  350. package/src/runtime/routes/__tests__/conversation-surface-routes.test.ts +322 -0
  351. package/src/runtime/routes/__tests__/inference-provider-connection-routes.test.ts +0 -62
  352. package/src/runtime/routes/__tests__/plugins-routes.test.ts +32 -11
  353. package/src/runtime/routes/acp-routes.test.ts +106 -0
  354. package/src/runtime/routes/acp-routes.ts +248 -2
  355. package/src/runtime/routes/browser-tabs-routes.ts +1 -1
  356. package/src/runtime/routes/btw-routes.ts +0 -14
  357. package/src/runtime/routes/channel-verification-routes.ts +14 -5
  358. package/src/runtime/routes/chatgpt-subscription-auth-routes.ts +0 -14
  359. package/src/runtime/routes/consolidation-routes.ts +6 -82
  360. package/src/runtime/routes/conversation-list-routes.ts +83 -5
  361. package/src/runtime/routes/conversation-management-routes.ts +125 -0
  362. package/src/runtime/routes/identity-intro-cache.ts +1 -1
  363. package/src/runtime/routes/identity-routes.ts +84 -20
  364. package/src/runtime/routes/inbound-message-handler.ts +0 -36
  365. package/src/runtime/routes/inbound-stages/acl-enforcement.ts +33 -34
  366. package/src/runtime/routes/inference-provider-connection-routes.ts +0 -45
  367. package/src/runtime/routes/plugins-routes.ts +49 -45
  368. package/src/runtime/routes/schedule-routes.ts +43 -5
  369. package/src/runtime/routes/settings-routes.ts +140 -15
  370. package/src/runtime/routes/skills-routes.ts +18 -6
  371. package/src/runtime/services/__tests__/conversation-serializer.test.ts +140 -0
  372. package/src/runtime/services/conversation-serializer.ts +38 -1
  373. package/src/runtime/verification-outbound-actions.ts +147 -2
  374. package/src/runtime/verification-templates.ts +29 -3
  375. package/src/schedule/schedule-store.ts +19 -0
  376. package/src/skills/catalog-install.ts +77 -13
  377. package/src/tasks/task-scheduler.ts +1 -0
  378. package/src/telemetry/types.ts +66 -1
  379. package/src/telemetry/usage-telemetry-reporter.test.ts +542 -13
  380. package/src/telemetry/usage-telemetry-reporter.ts +213 -20
  381. package/src/tools/apps/executors.ts +1 -1
  382. package/src/tools/browser/__tests__/browser-execution-acquire.test.ts +49 -2
  383. package/src/tools/browser/__tests__/browser-status.test.ts +29 -5
  384. package/src/tools/browser/browser-execution.ts +27 -9
  385. package/src/tools/browser/cdp-client/__tests__/factory.test.ts +380 -4
  386. package/src/tools/browser/cdp-client/__tests__/host-bridge-cdp-client.test.ts +107 -0
  387. package/src/tools/browser/cdp-client/__tests__/types.test.ts +6 -1
  388. package/src/tools/browser/cdp-client/factory.ts +217 -17
  389. package/src/tools/browser/cdp-client/host-bridge-cdp-client.ts +67 -0
  390. package/src/tools/browser/cdp-client/types.ts +22 -2
  391. package/src/tools/credential-execution/make-authenticated-request.ts +2 -1
  392. package/src/tools/credential-execution/manage-secure-command-tool.ts +169 -164
  393. package/src/tools/credential-execution/run-authenticated-command.ts +2 -1
  394. package/src/tools/executor.ts +39 -7
  395. package/src/tools/registry.ts +387 -5
  396. package/src/tools/schedule/create.ts +16 -0
  397. package/src/tools/schedule/list.ts +12 -4
  398. package/src/tools/schedule/update.ts +12 -0
  399. package/src/tools/skills/load.ts +11 -6
  400. package/src/tools/terminal/safe-env.ts +2 -0
  401. package/src/tools/types.ts +65 -9
  402. package/src/tools/workspace-tools/loader.ts +673 -0
  403. package/src/usage/attribution.ts +28 -0
  404. package/src/util/device-id.ts +17 -3
  405. package/src/util/platform.ts +16 -0
  406. package/tsconfig.plugin-api.json +13 -0
  407. package/src/__tests__/plugin-external-api.test.ts +0 -68
  408. package/src/__tests__/plugin-skill-contribution.test.ts +0 -355
  409. package/src/daemon/message-types/browser.ts +0 -10
  410. package/src/notifications/__tests__/emit-signal-home-feed.test.ts +0 -187
  411. package/src/plugins/defaults/memory-v3-shadow/__tests__/fixtures/eval-turns.json +0 -36
  412. package/src/plugins/defaults/memory-v3-shadow/__tests__/fixtures/live-turns.json +0 -37
  413. package/src/plugins/defaults/memory-v3-shadow/__tests__/working-set-eviction.test.ts +0 -106
  414. package/src/plugins/defaults/memory-v3-shadow/__tests__/working-set-skeleton.test.ts +0 -44
  415. package/src/plugins/defaults/memory-v3-shadow/working-set.ts +0 -91
  416. package/src/plugins/external-api.ts +0 -114
  417. package/src/plugins/plugin-skill-contributions.ts +0 -292
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.8.10
6
+ version: 0.8.11
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
@@ -96,8 +96,11 @@ paths:
96
96
  operationId: acp_by_id_steer_post
97
97
  summary: Steer ACP session
98
98
  description:
99
- Send a steering instruction to an ACP session. Sessions no longer in memory (completed, or lost to a daemon
100
- restart) are transparently resumed from persisted history first, when the agent supports ACP session loading.
99
+ "Send a steering instruction to an ACP session. Sessions no longer in memory (completed, or lost to a
100
+ daemon restart) are transparently resumed from persisted history first, when the agent supports ACP session
101
+ loading. Resuming a terminal session re-spawns the host agent, so it requires guardian approval: the route acks
102
+ immediately with approvalPending=true and performs the resume in the background once approved, streaming results
103
+ over SSE."
101
104
  tags:
102
105
  - acp
103
106
  responses:
@@ -115,6 +118,11 @@ paths:
115
118
  resumed:
116
119
  description: True when the session was resumed from persisted history before steering.
117
120
  type: boolean
121
+ approvalPending:
122
+ description:
123
+ True when the steer triggered a guardian-approval-gated resume that will run asynchronously; watch SSE for
124
+ the outcome.
125
+ type: boolean
118
126
  required:
119
127
  - acpSessionId
120
128
  - steered
@@ -4531,55 +4539,6 @@ paths:
4531
4539
  - lastRunAt
4532
4540
  - success
4533
4541
  additionalProperties: false
4534
- put:
4535
- operationId: consolidation_config_put
4536
- summary: Update consolidation config
4537
- description: Update the memory v2 consolidation schedule configuration.
4538
- tags:
4539
- - consolidation
4540
- responses:
4541
- "200":
4542
- description: Successful response
4543
- content:
4544
- application/json:
4545
- schema:
4546
- type: object
4547
- properties:
4548
- available:
4549
- type: boolean
4550
- enabled:
4551
- type: boolean
4552
- intervalMs:
4553
- type: number
4554
- nextRunAt:
4555
- anyOf:
4556
- - type: number
4557
- - type: "null"
4558
- lastRunAt:
4559
- anyOf:
4560
- - type: number
4561
- - type: "null"
4562
- success:
4563
- type: boolean
4564
- required:
4565
- - available
4566
- - enabled
4567
- - intervalMs
4568
- - nextRunAt
4569
- - lastRunAt
4570
- - success
4571
- additionalProperties: false
4572
- requestBody:
4573
- required: true
4574
- content:
4575
- application/json:
4576
- schema:
4577
- type: object
4578
- properties:
4579
- enabled:
4580
- description: Enable or disable automatic consolidation
4581
- type: boolean
4582
- additionalProperties: false
4583
4542
  /v1/consolidation/run-now:
4584
4543
  post:
4585
4544
  operationId: consolidation_runnow_post
@@ -5978,6 +5937,7 @@ paths:
5978
5937
  - macos_notification_view
5979
5938
  - macos_conversation_opened
5980
5939
  - ios_conversation_opened
5940
+ - web_bulk_mark_read
5981
5941
  - telegram_inbound_message
5982
5942
  - telegram_callback
5983
5943
  - slack_inbound_message
@@ -6012,6 +5972,8 @@ paths:
6012
5972
  additionalProperties: false
6013
5973
  archivedAt:
6014
5974
  type: number
5975
+ surfacedAt:
5976
+ type: number
6015
5977
  inferenceProfile:
6016
5978
  type: string
6017
5979
  isProcessing:
@@ -6339,6 +6301,7 @@ paths:
6339
6301
  - macos_notification_view
6340
6302
  - macos_conversation_opened
6341
6303
  - ios_conversation_opened
6304
+ - web_bulk_mark_read
6342
6305
  - telegram_inbound_message
6343
6306
  - telegram_callback
6344
6307
  - slack_inbound_message
@@ -6373,6 +6336,8 @@ paths:
6373
6336
  additionalProperties: false
6374
6337
  archivedAt:
6375
6338
  type: number
6339
+ surfacedAt:
6340
+ type: number
6376
6341
  inferenceProfile:
6377
6342
  type: string
6378
6343
  isProcessing:
@@ -6537,6 +6502,7 @@ paths:
6537
6502
  - macos_notification_view
6538
6503
  - macos_conversation_opened
6539
6504
  - ios_conversation_opened
6505
+ - web_bulk_mark_read
6540
6506
  - telegram_inbound_message
6541
6507
  - telegram_callback
6542
6508
  - slack_inbound_message
@@ -6571,6 +6537,8 @@ paths:
6571
6537
  additionalProperties: false
6572
6538
  archivedAt:
6573
6539
  type: number
6540
+ surfacedAt:
6541
+ type: number
6574
6542
  inferenceProfile:
6575
6543
  type: string
6576
6544
  isProcessing:
@@ -6979,6 +6947,56 @@ paths:
6979
6947
  required: true
6980
6948
  schema:
6981
6949
  type: string
6950
+ /v1/conversations/{id}/surface:
6951
+ post:
6952
+ operationId: conversations_by_id_surface_post
6953
+ summary: Surface a conversation into Recents
6954
+ description:
6955
+ Explicitly promote a background or scheduled conversation into the default conversation listing (the
6956
+ Recents sidebar grouping), or demote it with surfaced=false. Conversations are never surfaced automatically.
6957
+ tags:
6958
+ - conversations
6959
+ responses:
6960
+ "200":
6961
+ description: Successful response
6962
+ content:
6963
+ application/json:
6964
+ schema:
6965
+ type: object
6966
+ properties:
6967
+ ok:
6968
+ type: boolean
6969
+ conversationId:
6970
+ type: string
6971
+ surfacedAt:
6972
+ anyOf:
6973
+ - type: number
6974
+ - type: "null"
6975
+ description: Epoch-ms timestamp of the promotion, or null when cleared.
6976
+ required:
6977
+ - ok
6978
+ - conversationId
6979
+ - surfacedAt
6980
+ additionalProperties: false
6981
+ parameters:
6982
+ - name: id
6983
+ in: path
6984
+ required: true
6985
+ schema:
6986
+ type: string
6987
+ requestBody:
6988
+ required: true
6989
+ content:
6990
+ application/json:
6991
+ schema:
6992
+ type: object
6993
+ properties:
6994
+ surfaced:
6995
+ type: boolean
6996
+ description: true to surface the conversation into Recents, false to clear the promotion.
6997
+ required:
6998
+ - surfaced
6999
+ additionalProperties: false
6982
7000
  /v1/conversations/{id}/unarchive:
6983
7001
  post:
6984
7002
  operationId: conversations_by_id_unarchive_post
@@ -7080,6 +7098,44 @@ paths:
7080
7098
  required: true
7081
7099
  schema:
7082
7100
  type: string
7101
+ /v1/conversations/archive/bulk:
7102
+ post:
7103
+ operationId: conversations_archive_bulk_post
7104
+ summary: Bulk archive conversations
7105
+ description: Archive multiple conversations in one request. Emits a single sync invalidation for the entire batch.
7106
+ tags:
7107
+ - conversations
7108
+ responses:
7109
+ "200":
7110
+ description: Successful response
7111
+ content:
7112
+ application/json:
7113
+ schema:
7114
+ type: object
7115
+ properties:
7116
+ ok:
7117
+ type: boolean
7118
+ archived:
7119
+ type: number
7120
+ required:
7121
+ - ok
7122
+ - archived
7123
+ additionalProperties: false
7124
+ requestBody:
7125
+ required: true
7126
+ content:
7127
+ application/json:
7128
+ schema:
7129
+ type: object
7130
+ properties:
7131
+ conversationIds:
7132
+ minItems: 1
7133
+ type: array
7134
+ items:
7135
+ type: string
7136
+ required:
7137
+ - conversationIds
7138
+ additionalProperties: false
7083
7139
  /v1/conversations/attention:
7084
7140
  get:
7085
7141
  operationId: conversations_attention_get
@@ -7500,6 +7556,7 @@ paths:
7500
7556
  - macos_notification_view
7501
7557
  - macos_conversation_opened
7502
7558
  - ios_conversation_opened
7559
+ - web_bulk_mark_read
7503
7560
  - telegram_inbound_message
7504
7561
  - telegram_callback
7505
7562
  - slack_inbound_message
@@ -7534,6 +7591,8 @@ paths:
7534
7591
  additionalProperties: false
7535
7592
  archivedAt:
7536
7593
  type: number
7594
+ surfacedAt:
7595
+ type: number
7537
7596
  inferenceProfile:
7538
7597
  type: string
7539
7598
  isProcessing:
@@ -8505,6 +8564,46 @@ paths:
8505
8564
  required:
8506
8565
  - conversationId
8507
8566
  additionalProperties: false
8567
+ /v1/conversations/seen/bulk:
8568
+ post:
8569
+ operationId: conversations_seen_bulk_post
8570
+ summary: Bulk mark conversations as seen
8571
+ description:
8572
+ Mark multiple conversations as seen in one request. Emits a single sync invalidation for the entire batch
8573
+ instead of per-conversation events.
8574
+ tags:
8575
+ - conversations
8576
+ responses:
8577
+ "200":
8578
+ description: Successful response
8579
+ content:
8580
+ application/json:
8581
+ schema:
8582
+ type: object
8583
+ properties:
8584
+ ok:
8585
+ type: boolean
8586
+ updated:
8587
+ type: number
8588
+ required:
8589
+ - ok
8590
+ - updated
8591
+ additionalProperties: false
8592
+ requestBody:
8593
+ required: true
8594
+ content:
8595
+ application/json:
8596
+ schema:
8597
+ type: object
8598
+ properties:
8599
+ conversationIds:
8600
+ minItems: 1
8601
+ type: array
8602
+ items:
8603
+ type: string
8604
+ required:
8605
+ - conversationIds
8606
+ additionalProperties: false
8508
8607
  /v1/conversations/switch:
8509
8608
  post:
8510
8609
  operationId: conversations_switch_post
@@ -11174,6 +11273,14 @@ paths:
11174
11273
  required:
11175
11274
  - connected
11176
11275
  additionalProperties: false
11276
+ capabilities:
11277
+ type: object
11278
+ properties:
11279
+ memoryOptOut:
11280
+ type: boolean
11281
+ required:
11282
+ - memoryOptOut
11283
+ additionalProperties: false
11177
11284
  profiler:
11178
11285
  type: object
11179
11286
  properties:
@@ -11258,6 +11365,7 @@ paths:
11258
11365
  - cpu
11259
11366
  - migrations
11260
11367
  - ces
11368
+ - capabilities
11261
11369
  additionalProperties: false
11262
11370
  /v1/healthz:
11263
11371
  get:
@@ -11342,6 +11450,14 @@ paths:
11342
11450
  required:
11343
11451
  - connected
11344
11452
  additionalProperties: false
11453
+ capabilities:
11454
+ type: object
11455
+ properties:
11456
+ memoryOptOut:
11457
+ type: boolean
11458
+ required:
11459
+ - memoryOptOut
11460
+ additionalProperties: false
11345
11461
  profiler:
11346
11462
  type: object
11347
11463
  properties:
@@ -11426,6 +11542,7 @@ paths:
11426
11542
  - cpu
11427
11543
  - migrations
11428
11544
  - ces
11545
+ - capabilities
11429
11546
  additionalProperties: false
11430
11547
  /v1/heartbeat/checklist:
11431
11548
  get:
@@ -12885,6 +13002,23 @@ paths:
12885
13002
  - source
12886
13003
  - refreshing
12887
13004
  additionalProperties: false
13005
+ parameters:
13006
+ - name: localHour
13007
+ in: query
13008
+ required: false
13009
+ schema:
13010
+ type: integer
13011
+ minimum: 0
13012
+ maximum: 23
13013
+ description: Optional client-local hour of day used only when refreshing generated greetings.
13014
+ - name: localMinute
13015
+ in: query
13016
+ required: false
13017
+ schema:
13018
+ type: integer
13019
+ minimum: 0
13020
+ maximum: 59
13021
+ description: Optional client-local minute used only when refreshing generated greetings.
12888
13022
  /v1/image-generation/generate:
12889
13023
  post:
12890
13024
  operationId: imagegeneration_generate_post
@@ -15937,6 +16071,8 @@ paths:
15937
16071
  - assistant
15938
16072
  content:
15939
16073
  type: string
16074
+ deprecated: true
16075
+ description: "Deprecated: superseded by contentBlocks. Flat plain-text body (joined text segments)."
15940
16076
  timestamp:
15941
16077
  type: string
15942
16078
  attachments:
@@ -16241,6 +16377,8 @@ paths:
16241
16377
  - name
16242
16378
  - input
16243
16379
  additionalProperties: false
16380
+ deprecated: true
16381
+ description: "Deprecated: superseded by contentBlocks (the tool_use variant). Flat list of tool calls."
16244
16382
  surfaces:
16245
16383
  type: array
16246
16384
  items:
@@ -16292,18 +16430,28 @@ paths:
16292
16430
  - surfaceType
16293
16431
  - data
16294
16432
  additionalProperties: false
16433
+ deprecated: true
16434
+ description: "Deprecated: superseded by contentBlocks (the surface variant). Flat list of surfaces."
16295
16435
  textSegments:
16296
16436
  type: array
16297
16437
  items:
16298
16438
  type: string
16439
+ deprecated: true
16440
+ description: "Deprecated: superseded by contentBlocks. Text segments split by tool-call boundaries."
16299
16441
  thinkingSegments:
16300
16442
  type: array
16301
16443
  items:
16302
16444
  type: string
16445
+ deprecated: true
16446
+ description: "Deprecated: superseded by contentBlocks. Reasoning text extracted from thinking blocks."
16303
16447
  contentOrder:
16304
16448
  type: array
16305
16449
  items:
16306
16450
  type: string
16451
+ deprecated: true
16452
+ description:
16453
+ 'Deprecated: superseded by contentBlocks. Positional "<type>:<index>" content ordering (e.g. "text:0",
16454
+ "thinking:1").'
16307
16455
  contentBlocks:
16308
16456
  type: array
16309
16457
  items:
@@ -16326,6 +16474,10 @@ paths:
16326
16474
  const: thinking
16327
16475
  thinking:
16328
16476
  type: string
16477
+ startedAt:
16478
+ type: number
16479
+ completedAt:
16480
+ type: number
16329
16481
  required:
16330
16482
  - type
16331
16483
  - thinking
@@ -19380,15 +19532,7 @@ paths:
19380
19532
  - type: "null"
19381
19533
  description: Resolved version (installed copy first, then repo `package.json`).
19382
19534
  source:
19383
- oneOf:
19384
- - type: object
19385
- properties:
19386
- kind:
19387
- type: string
19388
- const: first-party
19389
- required:
19390
- - kind
19391
- additionalProperties: false
19535
+ anyOf:
19392
19536
  - type: object
19393
19537
  properties:
19394
19538
  kind:
@@ -19408,7 +19552,9 @@ paths:
19408
19552
  - repo
19409
19553
  - ref
19410
19554
  additionalProperties: false
19411
- description: "Origin of the match: a first-party in-repo plugin or a whitelisted external one."
19555
+ description: "Origin of the match: a whitelisted external plugin repository."
19556
+ - type: "null"
19557
+ description: Pinned origin from the marketplace entry, or null when an installed copy has no catalog entry.
19412
19558
  readme:
19413
19559
  anyOf:
19414
19560
  - type: string
@@ -19417,6 +19563,24 @@ paths:
19417
19563
  ref:
19418
19564
  type: string
19419
19565
  description: Git ref the catalog metadata / README were resolved at.
19566
+ artifact:
19567
+ anyOf:
19568
+ - type: object
19569
+ properties:
19570
+ url:
19571
+ type: string
19572
+ description: HTTPS URL the prebuilt client artifact is downloaded from.
19573
+ sha256:
19574
+ type: string
19575
+ description: Lowercase 64-char hex SHA-256 the download is verified against.
19576
+ required:
19577
+ - url
19578
+ - sha256
19579
+ additionalProperties: false
19580
+ - type: "null"
19581
+ description:
19582
+ Prebuilt client artifact from `package.json` `vellum.artifact`, or null when the plugin ships none or its
19583
+ descriptor is incomplete (e.g. a placeholder sha256).
19420
19584
  required:
19421
19585
  - name
19422
19586
  - installed
@@ -19427,6 +19591,7 @@ paths:
19427
19591
  - source
19428
19592
  - readme
19429
19593
  - ref
19594
+ - artifact
19430
19595
  additionalProperties: false
19431
19596
  "400":
19432
19597
  description: The plugin name failed sanitization (e.g. contained slashes, dots, or uppercase letters).
@@ -19449,13 +19614,12 @@ paths:
19449
19614
  operationId: plugins_install_post
19450
19615
  summary: Install a plugin
19451
19616
  description:
19452
- "Install a plugin by name from the canonical source — a whitelisted `experimental/plugins/marketplace.json`
19453
- entry, else the first-party `experimental/plugins/<name>/` convention. Always resolves against the curated
19454
- default git ref (no caller-supplied ref): installing from an unreviewed revision would bypass the
19455
- marketplace/first-party curation boundary and let attacker-controlled code be loaded. Materializes the plugin
19456
- under `<workspaceDir>/plugins/<name>/`; the assistant must be restarted to load it. Mirrors the CLI's `assistant
19457
- plugins install <name>`. An already-installed name without `force` returns 409; a name that resolves to nothing
19458
- returns 404. Sibling to `POST /v1/skills/install`."
19617
+ "Install a plugin by name from the canonical source — a whitelisted `plugins/marketplace.json` entry.
19618
+ Always resolves against the curated default git ref (no caller-supplied ref): installing from an unreviewed
19619
+ revision would bypass the marketplace curation boundary and let attacker-controlled code be loaded. Materializes
19620
+ the plugin under `<workspaceDir>/plugins/<name>/`; the assistant must be restarted to load it. Mirrors the CLI's
19621
+ `assistant plugins install <name>`. An already-installed name without `force` returns 409; a name that resolves
19622
+ to nothing returns 404. Sibling to `POST /v1/skills/install`."
19459
19623
  tags:
19460
19624
  - plugins
19461
19625
  responses:
@@ -19503,7 +19667,7 @@ paths:
19503
19667
  properties:
19504
19668
  name:
19505
19669
  type: string
19506
- description: Install name to resolve against the catalog (first-party directory or marketplace entry).
19670
+ description: Install name to resolve against the marketplace catalog.
19507
19671
  force:
19508
19672
  description: Overwrite an existing install in place. Defaults to false.
19509
19673
  type: boolean
@@ -19515,9 +19679,9 @@ paths:
19515
19679
  operationId: plugins_search_get
19516
19680
  summary: Search the plugin catalog
19517
19681
  description:
19518
- List installable plugins from the canonical `vellum-ai/vellum-assistant` catalog at
19519
- `experimental/plugins/`. The query is an ECMAScript regex matched case-insensitively against the directory name
19520
- (e.g. `memory`, `^simple`). Empty query returns every entry. Mirrors the CLI's `assistant plugins search`.
19682
+ List installable plugins from the curated `plugins/marketplace.json` catalog. The query is an ECMAScript
19683
+ regex matched case-insensitively against the plugin name (e.g. `memory`, `^simple`). Empty query returns every
19684
+ entry. Mirrors the CLI's `assistant plugins search`.
19521
19685
  tags:
19522
19686
  - plugins
19523
19687
  responses:
@@ -19544,42 +19708,31 @@ paths:
19544
19708
  description: Install name. Matches `assistant plugins install <name>`.
19545
19709
  path:
19546
19710
  type: string
19547
- description:
19548
- "Human-readable origin: a repo-relative path (`experimental/plugins/<name>`) for first-party plugins or a
19549
- `github:owner/repo@ref` locator for external ones."
19711
+ description: "Human-readable origin: a `github:owner/repo@ref` locator for the external plugin."
19550
19712
  description:
19551
19713
  description: Short description, when known (external entries only today).
19552
19714
  type: string
19553
19715
  source:
19554
- oneOf:
19555
- - type: object
19556
- properties:
19557
- kind:
19558
- type: string
19559
- const: first-party
19560
- required:
19561
- - kind
19562
- additionalProperties: false
19563
- - type: object
19564
- properties:
19565
- kind:
19566
- type: string
19567
- const: github
19568
- repo:
19569
- type: string
19570
- description: "`owner/repo` of the external plugin repository."
19571
- path:
19572
- description: Directory within the repo, when the plugin is not at the root.
19573
- type: string
19574
- ref:
19575
- type: string
19576
- description: Pinned git ref the plugin is fetched from.
19577
- required:
19578
- - kind
19579
- - repo
19580
- - ref
19581
- additionalProperties: false
19582
- description: "Origin of the match: a first-party in-repo plugin or a whitelisted external one."
19716
+ type: object
19717
+ properties:
19718
+ kind:
19719
+ type: string
19720
+ const: github
19721
+ repo:
19722
+ type: string
19723
+ description: "`owner/repo` of the external plugin repository."
19724
+ path:
19725
+ description: Directory within the repo, when the plugin is not at the root.
19726
+ type: string
19727
+ ref:
19728
+ type: string
19729
+ description: Pinned git ref the plugin is fetched from.
19730
+ required:
19731
+ - kind
19732
+ - repo
19733
+ - ref
19734
+ additionalProperties: false
19735
+ description: "Origin of the match: a whitelisted external plugin repository."
19583
19736
  required:
19584
19737
  - name
19585
19738
  - path
@@ -20290,9 +20443,9 @@ paths:
20290
20443
  - type: number
20291
20444
  - type: "null"
20292
20445
  description:
20293
- anyOf:
20294
- - type: string
20295
- - type: "null"
20446
+ type: string
20447
+ cadenceDescription:
20448
+ type: string
20296
20449
  mode:
20297
20450
  type: string
20298
20451
  enum:
@@ -20342,6 +20495,7 @@ paths:
20342
20495
  - createdFromConversationExists
20343
20496
  - createdFromConversationArchivedAt
20344
20497
  - description
20498
+ - cadenceDescription
20345
20499
  - mode
20346
20500
  - status
20347
20501
  - routingIntent
@@ -20439,9 +20593,9 @@ paths:
20439
20593
  - type: number
20440
20594
  - type: "null"
20441
20595
  description:
20442
- anyOf:
20443
- - type: string
20444
- - type: "null"
20596
+ type: string
20597
+ cadenceDescription:
20598
+ type: string
20445
20599
  mode:
20446
20600
  type: string
20447
20601
  enum:
@@ -20491,6 +20645,7 @@ paths:
20491
20645
  - createdFromConversationExists
20492
20646
  - createdFromConversationArchivedAt
20493
20647
  - description
20648
+ - cadenceDescription
20494
20649
  - mode
20495
20650
  - status
20496
20651
  - routingIntent
@@ -20512,6 +20667,9 @@ paths:
20512
20667
  name:
20513
20668
  type: string
20514
20669
  description: Display name
20670
+ description:
20671
+ type: string
20672
+ description: Authored schedule description. Defaults to the schedule name when omitted for backward compatibility.
20515
20673
  expression:
20516
20674
  type: string
20517
20675
  description: Cron or RRULE expression
@@ -20614,9 +20772,9 @@ paths:
20614
20772
  - type: number
20615
20773
  - type: "null"
20616
20774
  description:
20617
- anyOf:
20618
- - type: string
20619
- - type: "null"
20775
+ type: string
20776
+ cadenceDescription:
20777
+ type: string
20620
20778
  mode:
20621
20779
  type: string
20622
20780
  enum:
@@ -20666,6 +20824,7 @@ paths:
20666
20824
  - createdFromConversationExists
20667
20825
  - createdFromConversationArchivedAt
20668
20826
  - description
20827
+ - cadenceDescription
20669
20828
  - mode
20670
20829
  - status
20671
20830
  - routingIntent
@@ -20762,9 +20921,9 @@ paths:
20762
20921
  - type: number
20763
20922
  - type: "null"
20764
20923
  description:
20765
- anyOf:
20766
- - type: string
20767
- - type: "null"
20924
+ type: string
20925
+ cadenceDescription:
20926
+ type: string
20768
20927
  mode:
20769
20928
  type: string
20770
20929
  enum:
@@ -20814,6 +20973,7 @@ paths:
20814
20973
  - createdFromConversationExists
20815
20974
  - createdFromConversationArchivedAt
20816
20975
  - description
20976
+ - cadenceDescription
20817
20977
  - mode
20818
20978
  - status
20819
20979
  - routingIntent
@@ -20840,6 +21000,8 @@ paths:
20840
21000
  properties:
20841
21001
  name:
20842
21002
  type: string
21003
+ description:
21004
+ type: string
20843
21005
  expression:
20844
21006
  type: string
20845
21007
  timezone:
@@ -20953,9 +21115,9 @@ paths:
20953
21115
  - type: number
20954
21116
  - type: "null"
20955
21117
  description:
20956
- anyOf:
20957
- - type: string
20958
- - type: "null"
21118
+ type: string
21119
+ cadenceDescription:
21120
+ type: string
20959
21121
  mode:
20960
21122
  type: string
20961
21123
  enum:
@@ -21005,6 +21167,7 @@ paths:
21005
21167
  - createdFromConversationExists
21006
21168
  - createdFromConversationArchivedAt
21007
21169
  - description
21170
+ - cadenceDescription
21008
21171
  - mode
21009
21172
  - status
21010
21173
  - routingIntent
@@ -21102,9 +21265,9 @@ paths:
21102
21265
  - type: number
21103
21266
  - type: "null"
21104
21267
  description:
21105
- anyOf:
21106
- - type: string
21107
- - type: "null"
21268
+ type: string
21269
+ cadenceDescription:
21270
+ type: string
21108
21271
  mode:
21109
21272
  type: string
21110
21273
  enum:
@@ -21154,6 +21317,7 @@ paths:
21154
21317
  - createdFromConversationExists
21155
21318
  - createdFromConversationArchivedAt
21156
21319
  - description
21320
+ - cadenceDescription
21157
21321
  - mode
21158
21322
  - status
21159
21323
  - routingIntent
@@ -21340,9 +21504,9 @@ paths:
21340
21504
  - type: number
21341
21505
  - type: "null"
21342
21506
  description:
21343
- anyOf:
21344
- - type: string
21345
- - type: "null"
21507
+ type: string
21508
+ cadenceDescription:
21509
+ type: string
21346
21510
  mode:
21347
21511
  type: string
21348
21512
  enum:
@@ -21392,6 +21556,7 @@ paths:
21392
21556
  - createdFromConversationExists
21393
21557
  - createdFromConversationArchivedAt
21394
21558
  - description
21559
+ - cadenceDescription
21395
21560
  - mode
21396
21561
  - status
21397
21562
  - routingIntent
@@ -22176,6 +22341,22 @@ paths:
22176
22341
  - available
22177
22342
  category:
22178
22343
  type: string
22344
+ owner:
22345
+ type: object
22346
+ properties:
22347
+ kind:
22348
+ type: string
22349
+ enum:
22350
+ - skill
22351
+ - mcp
22352
+ - plugin
22353
+ - workspace
22354
+ id:
22355
+ type: string
22356
+ required:
22357
+ - kind
22358
+ - id
22359
+ additionalProperties: false
22179
22360
  origin:
22180
22361
  type: string
22181
22362
  const: vellum
@@ -22214,6 +22395,22 @@ paths:
22214
22395
  - available
22215
22396
  category:
22216
22397
  type: string
22398
+ owner:
22399
+ type: object
22400
+ properties:
22401
+ kind:
22402
+ type: string
22403
+ enum:
22404
+ - skill
22405
+ - mcp
22406
+ - plugin
22407
+ - workspace
22408
+ id:
22409
+ type: string
22410
+ required:
22411
+ - kind
22412
+ - id
22413
+ additionalProperties: false
22217
22414
  origin:
22218
22415
  type: string
22219
22416
  const: clawhub
@@ -22272,6 +22469,22 @@ paths:
22272
22469
  - available
22273
22470
  category:
22274
22471
  type: string
22472
+ owner:
22473
+ type: object
22474
+ properties:
22475
+ kind:
22476
+ type: string
22477
+ enum:
22478
+ - skill
22479
+ - mcp
22480
+ - plugin
22481
+ - workspace
22482
+ id:
22483
+ type: string
22484
+ required:
22485
+ - kind
22486
+ - id
22487
+ additionalProperties: false
22275
22488
  origin:
22276
22489
  type: string
22277
22490
  const: skillssh
@@ -22345,6 +22558,22 @@ paths:
22345
22558
  - available
22346
22559
  category:
22347
22560
  type: string
22561
+ owner:
22562
+ type: object
22563
+ properties:
22564
+ kind:
22565
+ type: string
22566
+ enum:
22567
+ - skill
22568
+ - mcp
22569
+ - plugin
22570
+ - workspace
22571
+ id:
22572
+ type: string
22573
+ required:
22574
+ - kind
22575
+ - id
22576
+ additionalProperties: false
22348
22577
  origin:
22349
22578
  type: string
22350
22579
  const: custom
@@ -22502,6 +22731,22 @@ paths:
22502
22731
  - available
22503
22732
  category:
22504
22733
  type: string
22734
+ owner:
22735
+ type: object
22736
+ properties:
22737
+ kind:
22738
+ type: string
22739
+ enum:
22740
+ - skill
22741
+ - mcp
22742
+ - plugin
22743
+ - workspace
22744
+ id:
22745
+ type: string
22746
+ required:
22747
+ - kind
22748
+ - id
22749
+ additionalProperties: false
22505
22750
  origin:
22506
22751
  type: string
22507
22752
  const: vellum
@@ -22725,6 +22970,22 @@ paths:
22725
22970
  - available
22726
22971
  category:
22727
22972
  type: string
22973
+ owner:
22974
+ type: object
22975
+ properties:
22976
+ kind:
22977
+ type: string
22978
+ enum:
22979
+ - skill
22980
+ - mcp
22981
+ - plugin
22982
+ - workspace
22983
+ id:
22984
+ type: string
22985
+ required:
22986
+ - kind
22987
+ - id
22988
+ additionalProperties: false
22728
22989
  origin:
22729
22990
  type: string
22730
22991
  const: custom
@@ -22892,6 +23153,22 @@ paths:
22892
23153
  - available
22893
23154
  category:
22894
23155
  type: string
23156
+ owner:
23157
+ type: object
23158
+ properties:
23159
+ kind:
23160
+ type: string
23161
+ enum:
23162
+ - skill
23163
+ - mcp
23164
+ - plugin
23165
+ - workspace
23166
+ id:
23167
+ type: string
23168
+ required:
23169
+ - kind
23170
+ - id
23171
+ additionalProperties: false
22895
23172
  origin:
22896
23173
  type: string
22897
23174
  const: vellum
@@ -22930,6 +23207,22 @@ paths:
22930
23207
  - available
22931
23208
  category:
22932
23209
  type: string
23210
+ owner:
23211
+ type: object
23212
+ properties:
23213
+ kind:
23214
+ type: string
23215
+ enum:
23216
+ - skill
23217
+ - mcp
23218
+ - plugin
23219
+ - workspace
23220
+ id:
23221
+ type: string
23222
+ required:
23223
+ - kind
23224
+ - id
23225
+ additionalProperties: false
22933
23226
  origin:
22934
23227
  type: string
22935
23228
  const: clawhub
@@ -22988,6 +23281,22 @@ paths:
22988
23281
  - available
22989
23282
  category:
22990
23283
  type: string
23284
+ owner:
23285
+ type: object
23286
+ properties:
23287
+ kind:
23288
+ type: string
23289
+ enum:
23290
+ - skill
23291
+ - mcp
23292
+ - plugin
23293
+ - workspace
23294
+ id:
23295
+ type: string
23296
+ required:
23297
+ - kind
23298
+ - id
23299
+ additionalProperties: false
22991
23300
  origin:
22992
23301
  type: string
22993
23302
  const: skillssh
@@ -23061,6 +23370,22 @@ paths:
23061
23370
  - available
23062
23371
  category:
23063
23372
  type: string
23373
+ owner:
23374
+ type: object
23375
+ properties:
23376
+ kind:
23377
+ type: string
23378
+ enum:
23379
+ - skill
23380
+ - mcp
23381
+ - plugin
23382
+ - workspace
23383
+ id:
23384
+ type: string
23385
+ required:
23386
+ - kind
23387
+ - id
23388
+ additionalProperties: false
23064
23389
  origin:
23065
23390
  type: string
23066
23391
  const: custom
@@ -23409,6 +23734,22 @@ paths:
23409
23734
  - available
23410
23735
  category:
23411
23736
  type: string
23737
+ owner:
23738
+ type: object
23739
+ properties:
23740
+ kind:
23741
+ type: string
23742
+ enum:
23743
+ - skill
23744
+ - mcp
23745
+ - plugin
23746
+ - workspace
23747
+ id:
23748
+ type: string
23749
+ required:
23750
+ - kind
23751
+ - id
23752
+ additionalProperties: false
23412
23753
  origin:
23413
23754
  type: string
23414
23755
  const: vellum
@@ -23447,6 +23788,22 @@ paths:
23447
23788
  - available
23448
23789
  category:
23449
23790
  type: string
23791
+ owner:
23792
+ type: object
23793
+ properties:
23794
+ kind:
23795
+ type: string
23796
+ enum:
23797
+ - skill
23798
+ - mcp
23799
+ - plugin
23800
+ - workspace
23801
+ id:
23802
+ type: string
23803
+ required:
23804
+ - kind
23805
+ - id
23806
+ additionalProperties: false
23450
23807
  origin:
23451
23808
  type: string
23452
23809
  const: clawhub
@@ -23505,6 +23862,22 @@ paths:
23505
23862
  - available
23506
23863
  category:
23507
23864
  type: string
23865
+ owner:
23866
+ type: object
23867
+ properties:
23868
+ kind:
23869
+ type: string
23870
+ enum:
23871
+ - skill
23872
+ - mcp
23873
+ - plugin
23874
+ - workspace
23875
+ id:
23876
+ type: string
23877
+ required:
23878
+ - kind
23879
+ - id
23880
+ additionalProperties: false
23508
23881
  origin:
23509
23882
  type: string
23510
23883
  const: skillssh
@@ -23578,6 +23951,22 @@ paths:
23578
23951
  - available
23579
23952
  category:
23580
23953
  type: string
23954
+ owner:
23955
+ type: object
23956
+ properties:
23957
+ kind:
23958
+ type: string
23959
+ enum:
23960
+ - skill
23961
+ - mcp
23962
+ - plugin
23963
+ - workspace
23964
+ id:
23965
+ type: string
23966
+ required:
23967
+ - kind
23968
+ - id
23969
+ additionalProperties: false
23581
23970
  origin:
23582
23971
  type: string
23583
23972
  const: custom
@@ -24663,13 +25052,74 @@ paths:
24663
25052
  /v1/tools:
24664
25053
  get:
24665
25054
  operationId: tools_get
24666
- summary: List tools
24667
- description: Return available tool names with their descriptions, risk levels, and categories.
25055
+ summary: List registered tools with metadata and schemas
25056
+ description:
25057
+ "Return registered tools. Without `conversationId`, returns every tool in the global registry; `tools`
25058
+ carries per-tool metadata (description, author-asserted risk level, category, and contributing source: core,
25059
+ skill, plugin, or MCP server) and `names`/`schemas` additionally cover skill tools whose manifests are present
25060
+ but not yet loaded, for the permission-simulator catalog. With `conversationId`, scopes the result to the tools
25061
+ available to that conversation as of its most recent turn (including skill/MCP tools registered over its
25062
+ lifecycle); 404 if no such conversation is active."
24668
25063
  tags:
24669
25064
  - tools
24670
25065
  responses:
24671
25066
  "200":
24672
25067
  description: Successful response
25068
+ content:
25069
+ application/json:
25070
+ schema:
25071
+ type: object
25072
+ properties:
25073
+ names:
25074
+ type: array
25075
+ items:
25076
+ type: string
25077
+ schemas:
25078
+ type: object
25079
+ propertyNames:
25080
+ type: string
25081
+ additionalProperties:
25082
+ type: object
25083
+ propertyNames:
25084
+ type: string
25085
+ additionalProperties: {}
25086
+ tools:
25087
+ type: array
25088
+ items:
25089
+ type: object
25090
+ properties:
25091
+ name:
25092
+ type: string
25093
+ description:
25094
+ type: string
25095
+ riskLevel:
25096
+ type: string
25097
+ category:
25098
+ type: string
25099
+ source:
25100
+ type: string
25101
+ description:
25102
+ 'Tool origin: "core" for built-ins, otherwise "<kind>:<id>" (e.g. "plugin:echo", "skill:my-skill",
25103
+ "mcp:server").'
25104
+ required:
25105
+ - name
25106
+ - description
25107
+ - riskLevel
25108
+ - category
25109
+ - source
25110
+ additionalProperties: false
25111
+ required:
25112
+ - names
25113
+ - schemas
25114
+ - tools
25115
+ additionalProperties: false
25116
+ parameters:
25117
+ - name: conversationId
25118
+ in: query
25119
+ required: false
25120
+ schema:
25121
+ type: string
25122
+ description: When set, scope the tool inventory to this conversation's most recent turn instead of the global registry.
24673
25123
  /v1/tools/simulate-permission:
24674
25124
  post:
24675
25125
  operationId: tools_simulatepermission_post