@vellumai/assistant 0.8.8 → 0.8.9-dev.202606091926.ebb2d62

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 (490) hide show
  1. package/ARCHITECTURE.md +6 -6
  2. package/bun.lock +2 -2
  3. package/docs/activation-funnel-telemetry.md +310 -0
  4. package/examples/plugins/echo/README.md +61 -60
  5. package/examples/plugins/echo/hooks/post-tool-use.ts +18 -0
  6. package/examples/plugins/echo/hooks/stop.ts +16 -0
  7. package/examples/plugins/echo/hooks/user-prompt-submit.ts +18 -0
  8. package/examples/plugins/echo/package.json +1 -2
  9. package/examples/plugins/echo/src/emit.ts +19 -0
  10. package/node_modules/@vellumai/skill-host-contracts/src/skill-host.ts +7 -6
  11. package/openapi.yaml +273 -121
  12. package/package.json +2 -2
  13. package/scripts/sync-llm-catalog.ts +2 -0
  14. package/src/__tests__/activation-early-marking.test.ts +120 -0
  15. package/src/__tests__/agent-loop-callsite-precedence.test.ts +69 -14
  16. package/src/__tests__/agent-loop-exit-reason.test.ts +204 -144
  17. package/src/__tests__/agent-loop-mutable-latest-user-message.test.ts +50 -35
  18. package/src/__tests__/agent-loop-output-hooks.test.ts +357 -0
  19. package/src/__tests__/agent-loop-override-profile.test.ts +25 -6
  20. package/src/__tests__/agent-loop-provider-error-recording.test.ts +41 -21
  21. package/src/__tests__/agent-loop-thinking.test.ts +36 -20
  22. package/src/__tests__/agent-loop.test.ts +441 -96
  23. package/src/__tests__/agent-wake-disk-pressure-callsite.test.ts +14 -14
  24. package/src/__tests__/agent-wake-override-profile.test.ts +17 -21
  25. package/src/__tests__/anthropic-provider.test.ts +23 -8
  26. package/src/__tests__/app-builder-tool-scripts.test.ts +21 -0
  27. package/src/__tests__/app-control-flow.test.ts +1 -1
  28. package/src/__tests__/app-dir-path-guard.test.ts +1 -0
  29. package/src/__tests__/app-executors.test.ts +132 -0
  30. package/src/__tests__/approval-cascade.test.ts +6 -5
  31. package/src/__tests__/approval-routes-http.test.ts +4 -1
  32. package/src/__tests__/background-workers-disk-pressure.test.ts +1 -1
  33. package/src/__tests__/build-persisted-content.test.ts +75 -1
  34. package/src/__tests__/channel-approval-routes.test.ts +1 -1
  35. package/src/__tests__/channel-approvals.test.ts +1 -1
  36. package/src/__tests__/compaction-circuit.test.ts +258 -0
  37. package/src/__tests__/compaction-direct.test.ts +146 -0
  38. package/src/__tests__/compaction-events.test.ts +7 -7
  39. package/src/__tests__/compaction.benchmark.test.ts +1 -1
  40. package/src/__tests__/compactor-web-search-strip.test.ts +213 -0
  41. package/src/__tests__/config-managed-gemini-defaults.test.ts +2 -46
  42. package/src/__tests__/context-overflow-reducer.test.ts +265 -125
  43. package/src/__tests__/context-window-manager-compact-retry.test.ts +121 -15
  44. package/src/__tests__/conversation-abort-tool-results.test.ts +7 -5
  45. package/src/__tests__/conversation-agent-loop-disk-pressure.test.ts +7 -10
  46. package/src/__tests__/conversation-agent-loop-inference-profile.test.ts +78 -119
  47. package/src/__tests__/conversation-agent-loop-overflow.test.ts +158 -234
  48. package/src/__tests__/conversation-agent-loop.test.ts +342 -623
  49. package/src/__tests__/conversation-clean-command.test.ts +5 -2
  50. package/src/__tests__/conversation-confirmation-signals.test.ts +6 -5
  51. package/src/__tests__/conversation-crud-inference-profile.test.ts +7 -9
  52. package/src/__tests__/conversation-error.test.ts +15 -1
  53. package/src/__tests__/conversation-history-web-search.test.ts +6 -1
  54. package/src/__tests__/conversation-media-retry.test.ts +1 -1
  55. package/src/__tests__/conversation-process-app-control-preactivation.test.ts +44 -4
  56. package/src/__tests__/conversation-process-callsite.test.ts +15 -15
  57. package/src/__tests__/conversation-provider-retry-repair.test.ts +66 -65
  58. package/src/__tests__/conversation-queue.test.ts +10 -10
  59. package/src/__tests__/conversation-runtime-assembly.test.ts +1059 -231
  60. package/src/__tests__/conversation-runtime-workspace.test.ts +115 -20
  61. package/src/__tests__/conversation-slash-queue.test.ts +7 -5
  62. package/src/__tests__/conversation-slash-unknown.test.ts +7 -5
  63. package/src/__tests__/conversation-speed-override.test.ts +11 -10
  64. package/src/__tests__/conversation-starter-routes.test.ts +14 -6
  65. package/src/__tests__/conversation-surfaces-activation-emit.test.ts +395 -0
  66. package/src/__tests__/conversation-surfaces-app-control.test.ts +48 -1
  67. package/src/__tests__/conversation-tool-setup-app-refresh.test.ts +73 -4
  68. package/src/__tests__/conversation-undo.test.ts +2 -2
  69. package/src/__tests__/conversation-workspace-cache-state.test.ts +24 -21
  70. package/src/__tests__/conversation-workspace-injection.test.ts +69 -7
  71. package/src/__tests__/conversation-workspace-tool-tracking.test.ts +15 -12
  72. package/src/__tests__/conversations-import-system-filter.test.ts +101 -0
  73. package/src/__tests__/corrected-target.test.ts +93 -0
  74. package/src/__tests__/credential-execution-feature-gates.test.ts +5 -4
  75. package/src/__tests__/credential-security-invariants.test.ts +1 -0
  76. package/src/__tests__/cu-unified-flow.test.ts +36 -0
  77. package/src/__tests__/db-acp-history.test.ts +101 -0
  78. package/src/__tests__/dynamic-page-surface.test.ts +31 -0
  79. package/src/__tests__/embedding-managed-proxy-selection.test.ts +6 -40
  80. package/src/__tests__/empty-response-hook.test.ts +1 -1
  81. package/src/__tests__/file-write-tool.test.ts +63 -0
  82. package/src/__tests__/gateway-only-guard.test.ts +17 -2
  83. package/src/__tests__/guardian-grant-minting.test.ts +1 -1
  84. package/src/__tests__/guardian-routing-invariants.test.ts +93 -4
  85. package/src/__tests__/handlers-user-message-approval-consumption.test.ts +1 -1
  86. package/src/__tests__/heartbeat-disk-pressure.test.ts +1 -0
  87. package/src/__tests__/heartbeat-service.test.ts +1 -0
  88. package/src/__tests__/history-repair-hook.test.ts +5 -1
  89. package/src/__tests__/host-app-control-proxy.test.ts +45 -0
  90. package/src/__tests__/host-app-control-routes.test.ts +1 -1
  91. package/src/__tests__/host-cu-routes-targeted.test.ts +3 -3
  92. package/src/__tests__/inference-profile-reaper.test.ts +62 -0
  93. package/src/__tests__/inference-profile-session-handler.test.ts +86 -0
  94. package/src/__tests__/injector-background-turn.test.ts +13 -23
  95. package/src/__tests__/injector-chain.test.ts +268 -44
  96. package/src/__tests__/injector-disk-pressure.test.ts +210 -52
  97. package/src/__tests__/injector-document-comments.test.ts +97 -114
  98. package/src/__tests__/injector-pkb-v2-silenced.test.ts +2 -2
  99. package/src/__tests__/injector-v3-suppression.test.ts +4 -4
  100. package/src/__tests__/list-messages-client-message-id.test.ts +91 -0
  101. package/src/__tests__/list-messages-hidden-metadata.test.ts +38 -0
  102. package/src/__tests__/llm-catalog-parity.test.ts +4 -0
  103. package/src/__tests__/llm-resolver.test.ts +73 -0
  104. package/src/__tests__/memory-retrieval-hook.test.ts +156 -38
  105. package/src/__tests__/memory-v2-static-injector.test.ts +86 -8
  106. package/src/__tests__/notification-decision-strategy.test.ts +3 -3
  107. package/src/__tests__/parallel-tool.benchmark.test.ts +35 -8
  108. package/src/__tests__/persist-unsendable-image-downscale.test.ts +145 -0
  109. package/src/__tests__/persist-unsendable-image.test.ts +97 -1
  110. package/src/__tests__/persistence-secret-redaction.test.ts +78 -0
  111. package/src/__tests__/plugin-api-shim.test.ts +6 -9
  112. package/src/__tests__/plugin-bootstrap.test.ts +91 -81
  113. package/src/__tests__/plugin-registry.test.ts +3 -49
  114. package/src/__tests__/plugin-skill-contribution.test.ts +15 -14
  115. package/src/__tests__/plugin-tool-contribution.test.ts +7 -4
  116. package/src/__tests__/plugin-types.test.ts +0 -70
  117. package/src/__tests__/post-turn-tool-result-truncation.test.ts +69 -0
  118. package/src/__tests__/pre-model-call-sanitize.test.ts +109 -0
  119. package/src/__tests__/published-app-updater.test.ts +138 -0
  120. package/src/__tests__/reaction-persistence.test.ts +1 -1
  121. package/src/__tests__/retry-thinking-adaptive-only.test.ts +245 -0
  122. package/src/__tests__/send-endpoint-busy.test.ts +4 -1
  123. package/src/__tests__/server-history-render.test.ts +39 -0
  124. package/src/__tests__/skill-feature-flags-integration.test.ts +31 -0
  125. package/src/__tests__/steer-tool-repair.test.ts +1 -1
  126. package/src/__tests__/subagent-call-site-routing.test.ts +1 -1
  127. package/src/__tests__/subagent-detail.test.ts +25 -7
  128. package/src/__tests__/subagent-fork-notifications.test.ts +1 -3
  129. package/src/__tests__/subagent-fork-spawn.test.ts +1 -1
  130. package/src/__tests__/subagent-manager-notify.test.ts +1 -3
  131. package/src/__tests__/subagent-notify-parent.test.ts +1 -3
  132. package/src/__tests__/subagent-spawn-tool-fork.test.ts +1 -1
  133. package/src/__tests__/title-generate-hook.test.ts +5 -1
  134. package/src/__tests__/tool-error-hook.test.ts +1 -1
  135. package/src/__tests__/tool-result-truncate-hook.test.ts +1 -1
  136. package/src/__tests__/tool-start-timestamp.test.ts +218 -0
  137. package/src/__tests__/user-plugin-loader.test.ts +54 -286
  138. package/src/__tests__/web-fetch.test.ts +45 -0
  139. package/src/acp/__tests__/agent-process.test.ts +161 -0
  140. package/src/acp/__tests__/client-handler.test.ts +40 -0
  141. package/src/acp/__tests__/helpers/acp-config-stub.ts +0 -2
  142. package/src/acp/__tests__/helpers/acp-history-db.ts +82 -0
  143. package/src/acp/__tests__/helpers/exec-file-stub.ts +106 -0
  144. package/src/acp/__tests__/prepare-agent-env.test.ts +97 -0
  145. package/src/acp/__tests__/session-manager-persistence.test.ts +95 -28
  146. package/src/acp/__tests__/session-manager-resume.test.ts +888 -0
  147. package/src/acp/agent-process.ts +61 -1
  148. package/src/acp/auto-install.test.ts +280 -0
  149. package/src/acp/auto-install.ts +232 -0
  150. package/src/acp/client-handler.ts +31 -0
  151. package/src/acp/prepare-agent-env.ts +80 -27
  152. package/src/acp/resolve-agent.test.ts +188 -28
  153. package/src/acp/resolve-agent.ts +119 -42
  154. package/src/acp/resume-hint.ts +23 -0
  155. package/src/acp/session-manager.ts +507 -73
  156. package/src/agent/compaction-circuit.ts +60 -102
  157. package/src/agent/loop.ts +403 -251
  158. package/src/api/events/tool-result.ts +9 -0
  159. package/src/api/events/tool-use-start.ts +7 -0
  160. package/src/api/responses/conversation-message.ts +72 -13
  161. package/src/api/responses/memory-v3-selection-log.ts +19 -10
  162. package/src/approvals/guardian-request-resolvers.ts +27 -1
  163. package/src/background-wake/next-wake.ts +1 -0
  164. package/src/cli/commands/__tests__/memory-v3.test.ts +191 -210
  165. package/src/cli/commands/channel-verification-sessions.ts +6 -6
  166. package/src/cli/commands/db/__tests__/repair.test.ts +3 -1
  167. package/src/cli/commands/memory-v3.ts +57 -199
  168. package/src/cli/commands/plugins.ts +43 -37
  169. package/src/cli/lib/__tests__/install-from-github.test.ts +790 -111
  170. package/src/cli/lib/__tests__/plugin-catalog-cache.test.ts +196 -0
  171. package/src/cli/lib/__tests__/plugin-details.test.ts +381 -0
  172. package/src/cli/lib/__tests__/plugin-marketplace.test.ts +270 -0
  173. package/src/cli/lib/__tests__/search-plugins.test.ts +233 -32
  174. package/src/cli/lib/install-from-github.ts +797 -60
  175. package/src/cli/lib/plugin-catalog-cache.ts +84 -0
  176. package/src/cli/lib/plugin-details.ts +416 -0
  177. package/src/cli/lib/plugin-marketplace.ts +215 -0
  178. package/src/cli/lib/search-plugins.ts +201 -29
  179. package/src/config/__tests__/feature-flag-registry-guard.test.ts +2 -2
  180. package/src/config/acp-defaults.test.ts +10 -0
  181. package/src/config/acp-defaults.ts +9 -3
  182. package/src/config/acp-schema.ts +1 -7
  183. package/src/config/bundled-skills/acp/SKILL.md +80 -41
  184. package/src/config/bundled-skills/acp/TOOLS.json +4 -4
  185. package/src/config/bundled-skills/app-builder/SKILL.md +224 -381
  186. package/src/config/bundled-skills/app-builder/TOOLS.json +72 -2
  187. package/src/config/bundled-skills/app-builder/references/DESIGN_SYSTEM.md +48 -0
  188. package/src/config/bundled-skills/app-builder/references/RESPONSIVE.md +57 -0
  189. package/src/config/bundled-skills/app-builder/references/SLIDES.md +38 -0
  190. package/src/config/bundled-skills/app-builder/tools/app-list.ts +62 -0
  191. package/src/config/bundled-skills/app-builder/tools/app-update.ts +18 -0
  192. package/src/config/bundled-skills/document-editor/SKILL.md +28 -23
  193. package/src/config/bundled-skills/document-editor/TOOLS.json +1 -1
  194. package/src/config/bundled-tool-registry.ts +4 -0
  195. package/src/config/call-site-defaults.ts +0 -3
  196. package/src/config/feature-flag-registry.json +10 -56
  197. package/src/config/llm-resolver.ts +39 -7
  198. package/src/config/loader.ts +5 -22
  199. package/src/config/schemas/__tests__/memory-v3.test.ts +25 -9
  200. package/src/config/schemas/call-site-catalog.ts +0 -21
  201. package/src/config/schemas/heartbeat.ts +9 -0
  202. package/src/config/schemas/llm.ts +17 -3
  203. package/src/config/schemas/memory-v3.ts +58 -8
  204. package/src/config/seed-inference-profiles.ts +18 -0
  205. package/src/context/compactor.ts +22 -4
  206. package/src/context/post-turn-tool-result-truncation.ts +39 -1
  207. package/src/context/strip-injections.ts +8 -2
  208. package/src/daemon/conversation-agent-loop-handlers.ts +120 -42
  209. package/src/daemon/conversation-agent-loop.ts +308 -1297
  210. package/src/daemon/conversation-error.ts +31 -4
  211. package/src/daemon/conversation-history.ts +1 -1
  212. package/src/daemon/conversation-lifecycle.ts +11 -255
  213. package/src/daemon/conversation-media-retry.ts +19 -6
  214. package/src/daemon/conversation-messaging.ts +17 -0
  215. package/src/daemon/conversation-process.ts +22 -141
  216. package/src/daemon/conversation-queue-manager.ts +8 -0
  217. package/src/daemon/conversation-registry.ts +159 -0
  218. package/src/daemon/conversation-runtime-assembly.ts +361 -393
  219. package/src/daemon/conversation-store.ts +9 -90
  220. package/src/daemon/conversation-surfaces.ts +165 -11
  221. package/src/daemon/conversation-workspace.ts +17 -0
  222. package/src/daemon/conversation.ts +444 -62
  223. package/src/daemon/disk-pressure-policy.ts +0 -1
  224. package/src/daemon/external-plugins-bootstrap.ts +36 -46
  225. package/src/daemon/handlers/config-channels.ts +11 -2
  226. package/src/daemon/handlers/conversations.ts +3 -1
  227. package/src/daemon/handlers/shared.ts +9 -1
  228. package/src/daemon/handlers/skills.ts +4 -1
  229. package/src/daemon/host-app-control-proxy.ts +72 -57
  230. package/src/daemon/host-proxy-preactivation.ts +1 -3
  231. package/src/daemon/lifecycle.ts +21 -7
  232. package/src/daemon/persist-unsendable-image.ts +62 -25
  233. package/src/daemon/process-message.ts +1 -1
  234. package/src/daemon/server.ts +2 -0
  235. package/src/daemon/tool-side-effects.ts +15 -0
  236. package/src/daemon/wake-conversation-ops.ts +269 -0
  237. package/src/embedded/plugin-api.ts +2 -2
  238. package/src/export/__tests__/transcript-formatter.test.ts +5 -0
  239. package/src/heartbeat/__tests__/heartbeat-service.test.ts +3 -0
  240. package/src/heartbeat/heartbeat-run-store.ts +23 -1
  241. package/src/heartbeat/heartbeat-service.ts +26 -0
  242. package/src/ipc/__tests__/browser-ipc.test.ts +1 -1
  243. package/src/ipc/__tests__/ui-request-route.test.ts +3 -3
  244. package/src/ipc/skill-routes/__tests__/memory.test.ts +15 -0
  245. package/src/ipc/skill-routes/memory.ts +4 -2
  246. package/src/memory/__tests__/activation-session-store.test.ts +41 -0
  247. package/src/memory/__tests__/jobs-worker-v2-schedule.test.ts +87 -0
  248. package/src/memory/__tests__/onboarding-events-store.test.ts +80 -0
  249. package/src/memory/activation-session-store.ts +43 -0
  250. package/src/memory/conversation-crud.ts +29 -19
  251. package/src/memory/conversation-starter-checkpoints.ts +1 -0
  252. package/src/memory/db-init.ts +6 -0
  253. package/src/memory/embedding-backend.ts +5 -22
  254. package/src/memory/job-handlers/conversation-starters.ts +13 -2
  255. package/src/memory/jobs/__tests__/embed-concept-page.test.ts +5 -4
  256. package/src/memory/jobs-worker.ts +25 -1
  257. package/src/memory/migrations/272-acp-session-history-cwd.ts +36 -0
  258. package/src/memory/migrations/273-onboarding-events-funnel-columns.ts +46 -0
  259. package/src/memory/migrations/274-create-activation-sessions.ts +15 -0
  260. package/src/memory/migrations/index.ts +3 -0
  261. package/src/memory/onboarding-events-store.ts +66 -18
  262. package/src/memory/schema/acp.ts +4 -0
  263. package/src/memory/schema/infrastructure.ts +13 -0
  264. package/src/memory/v2/__tests__/consolidation-job.test.ts +4 -97
  265. package/src/memory/v2/__tests__/page-store.test.ts +22 -0
  266. package/src/memory/v2/consolidation-job.ts +2 -63
  267. package/src/memory/v2/types.ts +5 -0
  268. package/src/messaging/providers/telegram-bot/api.ts +14 -5
  269. package/src/notifications/__tests__/copy-composer.test.ts +244 -0
  270. package/src/notifications/access-request-copy.ts +298 -0
  271. package/src/notifications/adapters/slack.ts +3 -3
  272. package/src/notifications/adapters/telegram.ts +9 -2
  273. package/src/notifications/copy-composer.ts +49 -267
  274. package/src/notifications/decision-engine.ts +16 -35
  275. package/src/notifications/home-feed-side-effect.ts +1 -6
  276. package/src/plugin-api/constants.ts +4 -0
  277. package/src/plugin-api/index.ts +40 -11
  278. package/src/plugin-api/types.ts +108 -0
  279. package/src/plugins/defaults/compaction/compact.ts +106 -0
  280. package/src/{daemon → plugins/defaults/compaction}/context-overflow-reducer.ts +250 -42
  281. package/src/plugins/defaults/compaction/corrected-target.ts +53 -0
  282. package/src/plugins/defaults/compaction/manager-store.ts +57 -0
  283. package/src/plugins/defaults/compaction/package.json +1 -2
  284. package/src/{context → plugins/defaults/compaction}/window-manager.ts +95 -25
  285. package/src/plugins/defaults/empty-response/package.json +0 -1
  286. package/src/plugins/defaults/history-repair/package.json +0 -1
  287. package/src/plugins/defaults/index.ts +156 -26
  288. package/src/plugins/defaults/memory-retrieval/hooks/post-compact.ts +100 -52
  289. package/src/plugins/defaults/memory-retrieval/hooks/user-prompt-submit.ts +285 -0
  290. package/src/plugins/defaults/memory-retrieval/injector-chain.ts +2 -2
  291. package/src/plugins/defaults/{injectors/register.ts → memory-retrieval/injectors.ts} +148 -73
  292. package/src/plugins/defaults/memory-retrieval/package.json +14 -0
  293. package/src/plugins/defaults/memory-retrieval/unified-turn-context.ts +223 -0
  294. package/src/plugins/defaults/memory-v3-shadow/__tests__/capabilities.test.ts +71 -0
  295. package/src/plugins/defaults/memory-v3-shadow/__tests__/dense.test.ts +181 -0
  296. package/src/plugins/defaults/memory-v3-shadow/__tests__/edge.test.ts +247 -0
  297. package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/live-integration.test.ts +147 -134
  298. package/src/plugins/defaults/memory-v3-shadow/__tests__/maintain-job.test.ts +456 -0
  299. package/src/plugins/defaults/memory-v3-shadow/__tests__/orchestrate.test.ts +662 -0
  300. package/src/plugins/defaults/memory-v3-shadow/__tests__/pool-select.test.ts +306 -0
  301. package/src/plugins/defaults/memory-v3-shadow/__tests__/render-injection.test.ts +91 -0
  302. package/src/plugins/defaults/memory-v3-shadow/__tests__/section-dense-store.test.ts +402 -0
  303. package/src/plugins/defaults/memory-v3-shadow/__tests__/section-needle.test.ts +135 -0
  304. package/src/plugins/defaults/memory-v3-shadow/__tests__/sections.test.ts +125 -0
  305. package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/selection-log-store.test.ts +74 -19
  306. package/src/plugins/defaults/memory-v3-shadow/__tests__/shadow-integration.test.ts +446 -0
  307. package/src/plugins/defaults/memory-v3-shadow/__tests__/shadow-plugin.test.ts +592 -0
  308. package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/types.test.ts +2 -24
  309. package/src/plugins/defaults/memory-v3-shadow/capabilities.ts +91 -0
  310. package/src/plugins/defaults/memory-v3-shadow/dense.ts +97 -0
  311. package/src/plugins/defaults/memory-v3-shadow/edge.ts +252 -0
  312. package/src/plugins/defaults/memory-v3-shadow/hooks/post-compact.ts +14 -0
  313. package/src/plugins/defaults/memory-v3-shadow/hooks/user-prompt-submit.ts +19 -0
  314. package/src/plugins/defaults/memory-v3-shadow/injector.ts +76 -0
  315. package/src/plugins/defaults/memory-v3-shadow/maintain-job.ts +555 -0
  316. package/src/plugins/defaults/memory-v3-shadow/orchestrate.ts +266 -0
  317. package/src/plugins/defaults/memory-v3-shadow/package.json +14 -0
  318. package/src/plugins/defaults/memory-v3-shadow/page-content.ts +71 -0
  319. package/src/plugins/defaults/memory-v3-shadow/pool-select.ts +204 -0
  320. package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/render-injection.ts +16 -8
  321. package/src/plugins/defaults/memory-v3-shadow/section-dense-store.ts +236 -0
  322. package/src/plugins/defaults/memory-v3-shadow/section-needle.ts +200 -0
  323. package/src/plugins/defaults/memory-v3-shadow/sections.ts +115 -0
  324. package/src/plugins/defaults/memory-v3-shadow/selection-log-store.ts +156 -0
  325. package/src/plugins/defaults/memory-v3-shadow/shadow-plugin.ts +382 -0
  326. package/src/plugins/defaults/memory-v3-shadow/types.ts +92 -0
  327. package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/working-set.ts +4 -1
  328. package/src/plugins/defaults/title-generate/package.json +0 -1
  329. package/src/plugins/defaults/tool-error/package.json +0 -1
  330. package/src/plugins/defaults/tool-result-truncate/package.json +0 -1
  331. package/src/plugins/external-api.ts +12 -2
  332. package/src/plugins/pipeline.ts +6 -293
  333. package/src/plugins/registry.ts +9 -37
  334. package/src/plugins/types.ts +76 -381
  335. package/src/plugins/user-loader.ts +30 -127
  336. package/src/prompts/__tests__/system-prompt.test.ts +6 -0
  337. package/src/prompts/system-prompt.ts +61 -10
  338. package/src/prompts/templates/BOOTSTRAP-ACTIVATION-RAIL.md +71 -4
  339. package/src/providers/anthropic/client.ts +9 -10
  340. package/src/providers/inference/kimi-cjk-token-ids.ts +493 -0
  341. package/src/providers/inference/logit-bias.ts +55 -0
  342. package/src/providers/model-catalog.ts +57 -0
  343. package/src/providers/openai/__tests__/vision-not-supported.test.ts +75 -0
  344. package/src/providers/openai/chat-completions-provider.ts +44 -1
  345. package/src/providers/retry.ts +57 -7
  346. package/src/providers/types.ts +6 -0
  347. package/src/runtime/__tests__/agent-wake.test.ts +555 -691
  348. package/src/runtime/__tests__/interactive-ui.test.ts +1 -1
  349. package/src/runtime/agent-wake.ts +108 -209
  350. package/src/runtime/assistant-event-hub.ts +1 -1
  351. package/src/runtime/channel-approvals.ts +1 -1
  352. package/src/runtime/interactive-ui.ts +1 -1
  353. package/src/runtime/routes/__tests__/acp-routes.test.ts +466 -55
  354. package/src/runtime/routes/__tests__/conversation-list-routes.test.ts +1 -1
  355. package/src/runtime/routes/__tests__/plugins-routes.test.ts +423 -73
  356. package/src/runtime/routes/__tests__/stt-routes.test.ts +112 -0
  357. package/src/runtime/routes/__tests__/surface-action-routes.test.ts +5 -4
  358. package/src/runtime/routes/__tests__/surface-content-routes.test.ts +4 -1
  359. package/src/runtime/routes/acp-routes.test.ts +185 -32
  360. package/src/runtime/routes/acp-routes.ts +328 -30
  361. package/src/runtime/routes/app-management-routes.ts +3 -0
  362. package/src/runtime/routes/approval-routes.ts +1 -1
  363. package/src/runtime/routes/browser-routes.ts +1 -1
  364. package/src/runtime/routes/browser-tabs-routes.ts +6 -10
  365. package/src/runtime/routes/channel-verification-routes.ts +14 -5
  366. package/src/runtime/routes/conversation-cli-routes.ts +1 -1
  367. package/src/runtime/routes/conversation-list-routes.ts +1 -1
  368. package/src/runtime/routes/conversation-query-routes.ts +1 -1
  369. package/src/runtime/routes/conversation-routes.ts +30 -2
  370. package/src/runtime/routes/conversation-starter-routes.ts +13 -7
  371. package/src/runtime/routes/conversations-import-routes.ts +24 -7
  372. package/src/runtime/routes/host-app-control-routes.ts +1 -1
  373. package/src/runtime/routes/host-cu-routes.ts +1 -1
  374. package/src/runtime/routes/identity-routes.ts +18 -3
  375. package/src/runtime/routes/inbound-message-handler.ts +1 -1
  376. package/src/runtime/routes/inbound-stages/acl-enforcement.ts +33 -34
  377. package/src/runtime/routes/inference-profile-session-handler.ts +11 -0
  378. package/src/runtime/routes/inference-profile-session-reaper.ts +6 -0
  379. package/src/runtime/routes/memory-v3-routes.ts +65 -305
  380. package/src/runtime/routes/playground/__tests__/force-compact.test.ts +1 -1
  381. package/src/runtime/routes/playground/helpers.ts +1 -1
  382. package/src/runtime/routes/plugins-routes.ts +337 -35
  383. package/src/runtime/routes/stt-routes.ts +45 -12
  384. package/src/runtime/routes/surface-conversation-resolver.ts +4 -3
  385. package/src/runtime/routes/work-items-routes.ts +2 -4
  386. package/src/runtime/routes/workspace-routes.ts +50 -15
  387. package/src/runtime/services/conversation-serializer.ts +1 -1
  388. package/src/runtime/verification-outbound-actions.ts +147 -2
  389. package/src/runtime/verification-templates.ts +29 -3
  390. package/src/services/published-app-updater.ts +30 -8
  391. package/src/signals/cancel.ts +2 -4
  392. package/src/subagent/manager.ts +21 -5
  393. package/src/telemetry/__tests__/activation-funnel.test.ts +95 -0
  394. package/src/telemetry/activation-funnel.ts +167 -0
  395. package/src/telemetry/types.ts +13 -0
  396. package/src/telemetry/usage-telemetry-reporter.test.ts +154 -0
  397. package/src/telemetry/usage-telemetry-reporter.ts +26 -1
  398. package/src/tools/acp/context.ts +20 -0
  399. package/src/tools/acp/list-agents.test.ts +9 -19
  400. package/src/tools/acp/list-agents.ts +3 -15
  401. package/src/tools/acp/spawn.test.ts +173 -202
  402. package/src/tools/acp/spawn.ts +37 -172
  403. package/src/tools/acp/steer.test.ts +105 -8
  404. package/src/tools/acp/steer.ts +48 -17
  405. package/src/tools/apps/executors.ts +166 -50
  406. package/src/tools/browser/browser-execution.ts +12 -2
  407. package/src/tools/filesystem/write.ts +34 -0
  408. package/src/tools/network/web-fetch.ts +65 -24
  409. package/src/tools/skills/load.ts +1 -1
  410. package/src/tools/subagent/spawn.ts +2 -4
  411. package/src/tools/ui-surface/definitions.ts +32 -5
  412. package/src/workspace/migrations/051-seed-conversation-summarization-callsite.ts +4 -5
  413. package/src/workspace/migrations/097-enable-adaptive-thinking-managed-profiles.ts +69 -45
  414. package/docs/plugins.md +0 -832
  415. package/examples/plugins/echo/register.ts +0 -143
  416. package/src/__tests__/circuit-breaker-pipeline.test.ts +0 -405
  417. package/src/__tests__/compaction-pipeline.test.ts +0 -210
  418. package/src/__tests__/compaction-timeout-recovery.test.ts +0 -251
  419. package/src/__tests__/overflow-reduce-pipeline.test.ts +0 -667
  420. package/src/__tests__/pipeline-runner.test.ts +0 -554
  421. package/src/daemon/wake-target-adapter.ts +0 -253
  422. package/src/memory/v3/__tests__/assign.test.ts +0 -242
  423. package/src/memory/v3/__tests__/capabilities.test.ts +0 -118
  424. package/src/memory/v3/__tests__/core.test.ts +0 -39
  425. package/src/memory/v3/__tests__/health.test.ts +0 -219
  426. package/src/memory/v3/__tests__/maintain-job.test.ts +0 -288
  427. package/src/memory/v3/__tests__/needle.test.ts +0 -107
  428. package/src/memory/v3/__tests__/orchestrate.test.ts +0 -436
  429. package/src/memory/v3/__tests__/provider-blocks.test.ts +0 -13
  430. package/src/memory/v3/__tests__/reconcile.test.ts +0 -274
  431. package/src/memory/v3/__tests__/render-injection.test.ts +0 -61
  432. package/src/memory/v3/__tests__/router.test.ts +0 -332
  433. package/src/memory/v3/__tests__/selector.test.ts +0 -470
  434. package/src/memory/v3/__tests__/shadow-plugin.test.ts +0 -432
  435. package/src/memory/v3/__tests__/snapshot.test.ts +0 -168
  436. package/src/memory/v3/__tests__/tree.test.ts +0 -192
  437. package/src/memory/v3/assign.ts +0 -268
  438. package/src/memory/v3/capabilities.ts +0 -124
  439. package/src/memory/v3/core.ts +0 -26
  440. package/src/memory/v3/health.ts +0 -0
  441. package/src/memory/v3/maintain-job.ts +0 -314
  442. package/src/memory/v3/needle.ts +0 -115
  443. package/src/memory/v3/orchestrate.ts +0 -126
  444. package/src/memory/v3/page-content.ts +0 -34
  445. package/src/memory/v3/provider-blocks.ts +0 -26
  446. package/src/memory/v3/reconcile.ts +0 -523
  447. package/src/memory/v3/router.ts +0 -190
  448. package/src/memory/v3/selection-log-store.ts +0 -84
  449. package/src/memory/v3/selector.ts +0 -226
  450. package/src/memory/v3/shadow-plugin.ts +0 -411
  451. package/src/memory/v3/snapshot.ts +0 -209
  452. package/src/memory/v3/tree.ts +0 -174
  453. package/src/memory/v3/types.ts +0 -59
  454. package/src/notifications/__tests__/emit-signal-home-feed.test.ts +0 -187
  455. package/src/plugins/defaults/circuit-breaker/middlewares/circuitBreaker.ts +0 -93
  456. package/src/plugins/defaults/circuit-breaker/package.json +0 -15
  457. package/src/plugins/defaults/circuit-breaker/register.ts +0 -39
  458. package/src/plugins/defaults/compaction/middlewares/compaction.ts +0 -25
  459. package/src/plugins/defaults/compaction/register.ts +0 -35
  460. package/src/plugins/defaults/compaction/terminal.ts +0 -73
  461. package/src/plugins/defaults/empty-response/register.ts +0 -23
  462. package/src/plugins/defaults/history-repair/register.ts +0 -24
  463. package/src/plugins/defaults/memory-retrieval/hooks/user-prompt-submit-temp.ts +0 -216
  464. package/src/plugins/defaults/overflow-reduce/middlewares/overflowReduce.ts +0 -126
  465. package/src/plugins/defaults/overflow-reduce/package.json +0 -15
  466. package/src/plugins/defaults/overflow-reduce/register.ts +0 -42
  467. package/src/plugins/defaults/title-generate/register.ts +0 -35
  468. package/src/plugins/defaults/tool-error/register.ts +0 -23
  469. package/src/plugins/defaults/tool-result-truncate/register.ts +0 -24
  470. package/src/proactive-artifact/aux-message-injector.ts +0 -97
  471. package/src/proactive-artifact/decision.test.ts +0 -226
  472. package/src/proactive-artifact/decision.ts +0 -165
  473. package/src/proactive-artifact/index.ts +0 -7
  474. package/src/proactive-artifact/job.test.ts +0 -962
  475. package/src/proactive-artifact/job.ts +0 -372
  476. package/src/proactive-artifact/message-copy.ts +0 -58
  477. package/src/proactive-artifact/trigger-state.test.ts +0 -286
  478. package/src/proactive-artifact/trigger-state.ts +0 -123
  479. package/src/util/map-limit.ts +0 -27
  480. /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/fixtures/eval-turns.json +0 -0
  481. /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/fixtures/live-turns.json +0 -0
  482. /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/working-set-eviction.test.ts +0 -0
  483. /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/__tests__/working-set-skeleton.test.ts +0 -0
  484. /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/data/README.md +0 -0
  485. /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/data/assignments.json +0 -0
  486. /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/data/core.json +0 -0
  487. /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/data/leaves/domain-a/topic-x.md +0 -0
  488. /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/data/leaves/domain-a/topic-y.md +0 -0
  489. /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/data/leaves/domain-b/topic-z.md +0 -0
  490. /package/src/{memory/v3 → plugins/defaults/memory-v3-shadow}/llm-retry.ts +0 -0
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.8
6
+ version: 0.8.9
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
@@ -95,7 +95,12 @@ paths:
95
95
  post:
96
96
  operationId: acp_by_id_steer_post
97
97
  summary: Steer ACP session
98
- description: Send a steering instruction to an active ACP session.
98
+ description:
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."
99
104
  tags:
100
105
  - acp
101
106
  responses:
@@ -110,6 +115,14 @@ paths:
110
115
  type: string
111
116
  steered:
112
117
  type: boolean
118
+ resumed:
119
+ description: True when the session was resumed from persisted history before steering.
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
113
126
  required:
114
127
  - acpSessionId
115
128
  - steered
@@ -136,7 +149,9 @@ paths:
136
149
  delete:
137
150
  operationId: acp_sessions_delete
138
151
  summary: Bulk-clear terminal ACP sessions
139
- description: Remove every terminal-state row (completed/failed/cancelled) from the persisted acp_session_history table.
152
+ description:
153
+ Remove every terminal-state row (completed/failed/cancelled) from the persisted acp_session_history table.
154
+ Rows whose session is currently active in memory (e.g. resumed) or has a resume in flight are excluded.
140
155
  tags:
141
156
  - acp
142
157
  responses:
@@ -238,8 +253,8 @@ paths:
238
253
  operationId: acp_sessions_by_id_delete
239
254
  summary: Delete ACP session from history
240
255
  description:
241
- Remove a persisted ACP session row. Rejects with 409 when the session is still active in memory; idempotent
242
- for unknown ids.
256
+ Remove a persisted ACP session row. Rejects with 409 when the session is still active in memory or has a
257
+ resume in flight; idempotent for unknown ids.
243
258
  tags:
244
259
  - acp
245
260
  responses:
@@ -473,6 +488,8 @@ paths:
473
488
  type: string
474
489
  createdAt:
475
490
  type: number
491
+ updatedAt:
492
+ type: number
476
493
  version:
477
494
  type: string
478
495
  contentId:
@@ -481,6 +498,7 @@ paths:
481
498
  - id
482
499
  - name
483
500
  - createdAt
501
+ - updatedAt
484
502
  - version
485
503
  - contentId
486
504
  additionalProperties: false
@@ -15847,10 +15865,10 @@ paths:
15847
15865
  type: object
15848
15866
  properties: {}
15849
15867
  additionalProperties: false
15850
- /v1/memory/v3/health:
15868
+ /v1/memory/v3/backfill-sections:
15851
15869
  post:
15852
- operationId: memory_v3_health_post
15853
- summary: Print the v3 structural health report (read-only)
15870
+ operationId: memory_v3_backfillsections_post
15871
+ summary: "One-time: embed every page's sections (incl synthetic skill/CLI rows) into the dense store"
15854
15872
  tags:
15855
15873
  - memory
15856
15874
  responses:
@@ -15861,31 +15879,16 @@ paths:
15861
15879
  schema:
15862
15880
  type: object
15863
15881
  properties:
15864
- rendered:
15865
- type: string
15866
- counts:
15867
- type: object
15868
- properties:
15869
- unassigned:
15870
- type: number
15871
- danglingRefs:
15872
- type: number
15873
- novelClusters:
15874
- type: number
15875
- oversizedLeaves:
15876
- type: number
15877
- tinyLeaves:
15878
- type: number
15879
- required:
15880
- - unassigned
15881
- - danglingRefs
15882
- - novelClusters
15883
- - oversizedLeaves
15884
- - tinyLeaves
15885
- additionalProperties: false
15882
+ articles:
15883
+ type: number
15884
+ sections:
15885
+ type: number
15886
+ failures:
15887
+ type: number
15886
15888
  required:
15887
- - rendered
15888
- - counts
15889
+ - articles
15890
+ - sections
15891
+ - failures
15889
15892
  additionalProperties: false
15890
15893
  /v1/memory/v3/rebuild-index:
15891
15894
  post:
@@ -15907,93 +15910,6 @@ paths:
15907
15910
  required:
15908
15911
  - ok
15909
15912
  additionalProperties: false
15910
- /v1/memory/v3/reconcile:
15911
- post:
15912
- operationId: memory_v3_reconcile_post
15913
- summary: v1 convergence/prune pass over page+core refs (no rename detection without a prior snapshot)
15914
- tags:
15915
- - memory
15916
- responses:
15917
- "200":
15918
- description: Successful response
15919
- content:
15920
- application/json:
15921
- schema:
15922
- type: object
15923
- properties:
15924
- renames:
15925
- type: array
15926
- items:
15927
- type: object
15928
- properties:
15929
- id:
15930
- type: string
15931
- oldPath:
15932
- type: string
15933
- newPath:
15934
- type: string
15935
- required:
15936
- - oldPath
15937
- - newPath
15938
- additionalProperties: false
15939
- deleted:
15940
- type: array
15941
- items:
15942
- type: string
15943
- prunedCore:
15944
- type: array
15945
- items:
15946
- type: string
15947
- required:
15948
- - renames
15949
- - deleted
15950
- - prunedCore
15951
- additionalProperties: false
15952
- /v1/memory/v3/set-core:
15953
- post:
15954
- operationId: memory_v3_setcore_post
15955
- summary: Add/remove always-on core leaves (validates + previews cost)
15956
- tags:
15957
- - memory
15958
- responses:
15959
- "200":
15960
- description: Successful response
15961
- content:
15962
- application/json:
15963
- schema:
15964
- type: object
15965
- properties:
15966
- nextCore:
15967
- type: array
15968
- items:
15969
- type: string
15970
- alwaysOnPageCount:
15971
- type: number
15972
- written:
15973
- type: boolean
15974
- required:
15975
- - nextCore
15976
- - alwaysOnPageCount
15977
- - written
15978
- additionalProperties: false
15979
- requestBody:
15980
- required: true
15981
- content:
15982
- application/json:
15983
- schema:
15984
- type: object
15985
- properties:
15986
- add:
15987
- type: array
15988
- items:
15989
- type: string
15990
- remove:
15991
- type: array
15992
- items:
15993
- type: string
15994
- write:
15995
- type: boolean
15996
- additionalProperties: false
15997
15913
  /v1/messages:
15998
15914
  get:
15999
15915
  operationId: messages_get
@@ -16020,10 +15936,17 @@ paths:
16020
15936
  type: array
16021
15937
  items:
16022
15938
  type: string
15939
+ clientMessageId:
15940
+ type: string
16023
15941
  role:
16024
15942
  type: string
15943
+ enum:
15944
+ - user
15945
+ - assistant
16025
15946
  content:
16026
15947
  type: string
15948
+ deprecated: true
15949
+ description: "Deprecated: superseded by contentBlocks. Flat plain-text body (joined text segments)."
16027
15950
  timestamp:
16028
15951
  type: string
16029
15952
  attachments:
@@ -16383,14 +16306,22 @@ paths:
16383
16306
  type: array
16384
16307
  items:
16385
16308
  type: string
16309
+ deprecated: true
16310
+ description: "Deprecated: superseded by contentBlocks. Text segments split by tool-call boundaries."
16386
16311
  thinkingSegments:
16387
16312
  type: array
16388
16313
  items:
16389
16314
  type: string
16315
+ deprecated: true
16316
+ description: "Deprecated: superseded by contentBlocks. Reasoning text extracted from thinking blocks."
16390
16317
  contentOrder:
16391
16318
  type: array
16392
16319
  items:
16393
16320
  type: string
16321
+ deprecated: true
16322
+ description:
16323
+ 'Deprecated: superseded by contentBlocks. Positional "<type>:<index>" content ordering (e.g. "text:0",
16324
+ "thinking:1").'
16394
16325
  contentBlocks:
16395
16326
  type: array
16396
16327
  items:
@@ -16413,6 +16344,10 @@ paths:
16413
16344
  const: thinking
16414
16345
  thinking:
16415
16346
  type: string
16347
+ startedAt:
16348
+ type: number
16349
+ completedAt:
16350
+ type: number
16416
16351
  required:
16417
16352
  - type
16418
16353
  - thinking
@@ -16985,6 +16920,12 @@ paths:
16985
16920
  type: string
16986
16921
  clientTimezone:
16987
16922
  type: string
16923
+ clientMessageId:
16924
+ type: string
16925
+ description:
16926
+ Client-generated idempotency nonce. Persisted on the row and echoed back on the message_echo event and the
16927
+ messages snapshot so the client can correlate its optimistic row by identity. Duplicate sends for
16928
+ the same (conversation, clientMessageId) are deduplicated server-side.
16988
16929
  inferenceProfile:
16989
16930
  anyOf:
16990
16931
  - type: string
@@ -19416,6 +19357,181 @@ paths:
19416
19357
  required: true
19417
19358
  schema:
19418
19359
  type: string
19360
+ get:
19361
+ operationId: plugins_by_name_get
19362
+ summary: Get a plugin's detail view
19363
+ description:
19364
+ Resolve a single plugin's tracked metadata (description, homepage, license, version, source) plus its
19365
+ README markdown. Unions the locally installed copy, the marketplace manifest, and the plugin's repository at the
19366
+ pinned ref — preferring the installed copy. Names that are neither installed nor present in the catalog return
19367
+ 404. Powers the web plugin detail page; mirrors `GET /v1/skills/:id`.
19368
+ tags:
19369
+ - plugins
19370
+ responses:
19371
+ "200":
19372
+ description: Successful response
19373
+ content:
19374
+ application/json:
19375
+ schema:
19376
+ type: object
19377
+ properties:
19378
+ name:
19379
+ type: string
19380
+ description: Install name. Matches `assistant plugins install <name>`.
19381
+ installed:
19382
+ type: boolean
19383
+ description: Whether a copy is materialized under `<workspaceDir>/plugins/<name>/`.
19384
+ description:
19385
+ anyOf:
19386
+ - type: string
19387
+ - type: "null"
19388
+ description: Short description, best-effort across disk, manifest, and repo.
19389
+ homepage:
19390
+ anyOf:
19391
+ - type: string
19392
+ - type: "null"
19393
+ description: Project homepage URL, when known.
19394
+ license:
19395
+ anyOf:
19396
+ - type: string
19397
+ - type: "null"
19398
+ description: SPDX license expression, when known.
19399
+ version:
19400
+ anyOf:
19401
+ - type: string
19402
+ - type: "null"
19403
+ description: Resolved version (installed copy first, then repo `package.json`).
19404
+ source:
19405
+ oneOf:
19406
+ - type: object
19407
+ properties:
19408
+ kind:
19409
+ type: string
19410
+ const: first-party
19411
+ required:
19412
+ - kind
19413
+ additionalProperties: false
19414
+ - type: object
19415
+ properties:
19416
+ kind:
19417
+ type: string
19418
+ const: github
19419
+ repo:
19420
+ type: string
19421
+ description: "`owner/repo` of the external plugin repository."
19422
+ path:
19423
+ description: Directory within the repo, when the plugin is not at the root.
19424
+ type: string
19425
+ ref:
19426
+ type: string
19427
+ description: Pinned git ref the plugin is fetched from.
19428
+ required:
19429
+ - kind
19430
+ - repo
19431
+ - ref
19432
+ additionalProperties: false
19433
+ description: "Origin of the match: a first-party in-repo plugin or a whitelisted external one."
19434
+ readme:
19435
+ anyOf:
19436
+ - type: string
19437
+ - type: "null"
19438
+ description: README markdown, or null when the plugin ships none.
19439
+ ref:
19440
+ type: string
19441
+ description: Git ref the catalog metadata / README were resolved at.
19442
+ required:
19443
+ - name
19444
+ - installed
19445
+ - description
19446
+ - homepage
19447
+ - license
19448
+ - version
19449
+ - source
19450
+ - readme
19451
+ - ref
19452
+ additionalProperties: false
19453
+ "400":
19454
+ description: The plugin name failed sanitization (e.g. contained slashes, dots, or uppercase letters).
19455
+ "404":
19456
+ description: No installed copy and no catalog entry claims the given name.
19457
+ parameters:
19458
+ - name: name
19459
+ in: path
19460
+ required: true
19461
+ schema:
19462
+ type: string
19463
+ - name: ref
19464
+ in: query
19465
+ required: false
19466
+ schema:
19467
+ type: string
19468
+ description: Optional git ref to read catalog metadata / README at. Defaults to the CLI's `DEFAULT_PLUGIN_REF`.
19469
+ /v1/plugins/install:
19470
+ post:
19471
+ operationId: plugins_install_post
19472
+ summary: Install a plugin
19473
+ description:
19474
+ "Install a plugin by name from the canonical source — a whitelisted `experimental/plugins/marketplace.json`
19475
+ entry, else the first-party `experimental/plugins/<name>/` convention. Always resolves against the curated
19476
+ default git ref (no caller-supplied ref): installing from an unreviewed revision would bypass the
19477
+ marketplace/first-party curation boundary and let attacker-controlled code be loaded. Materializes the plugin
19478
+ under `<workspaceDir>/plugins/<name>/`; the assistant must be restarted to load it. Mirrors the CLI's `assistant
19479
+ plugins install <name>`. An already-installed name without `force` returns 409; a name that resolves to nothing
19480
+ returns 404. Sibling to `POST /v1/skills/install`."
19481
+ tags:
19482
+ - plugins
19483
+ responses:
19484
+ "200":
19485
+ description: Successful response
19486
+ content:
19487
+ application/json:
19488
+ schema:
19489
+ type: object
19490
+ properties:
19491
+ ok:
19492
+ type: boolean
19493
+ const: true
19494
+ name:
19495
+ type: string
19496
+ description: Install name that was materialized.
19497
+ target:
19498
+ type: string
19499
+ description: Absolute path the plugin was materialized into on the host.
19500
+ fileCount:
19501
+ type: number
19502
+ description: Number of files written for the installed plugin.
19503
+ ref:
19504
+ type: string
19505
+ description: Git ref the plugin was fetched from.
19506
+ required:
19507
+ - ok
19508
+ - name
19509
+ - target
19510
+ - fileCount
19511
+ - ref
19512
+ additionalProperties: false
19513
+ "400":
19514
+ description: The request body was missing `name` or the name failed sanitization.
19515
+ "404":
19516
+ description: No plugin resolves to the given name at the requested ref.
19517
+ "409":
19518
+ description: A plugin with the same name is already installed and `force` was not set.
19519
+ requestBody:
19520
+ required: true
19521
+ content:
19522
+ application/json:
19523
+ schema:
19524
+ type: object
19525
+ properties:
19526
+ name:
19527
+ type: string
19528
+ description: Install name to resolve against the catalog (first-party directory or marketplace entry).
19529
+ force:
19530
+ description: Overwrite an existing install in place. Defaults to false.
19531
+ type: boolean
19532
+ required:
19533
+ - name
19534
+ additionalProperties: false
19419
19535
  /v1/plugins/search:
19420
19536
  get:
19421
19537
  operationId: plugins_search_get
@@ -19447,13 +19563,49 @@ paths:
19447
19563
  properties:
19448
19564
  name:
19449
19565
  type: string
19450
- description: Directory name under `experimental/plugins/`. Matches `assistant plugins install <name>`.
19566
+ description: Install name. Matches `assistant plugins install <name>`.
19451
19567
  path:
19452
19568
  type: string
19453
- description: Repo-relative path of the match (e.g. `experimental/plugins/<name>`).
19569
+ description:
19570
+ "Human-readable origin: a repo-relative path (`experimental/plugins/<name>`) for first-party plugins or a
19571
+ `github:owner/repo@ref` locator for external ones."
19572
+ description:
19573
+ description: Short description, when known (external entries only today).
19574
+ type: string
19575
+ source:
19576
+ oneOf:
19577
+ - type: object
19578
+ properties:
19579
+ kind:
19580
+ type: string
19581
+ const: first-party
19582
+ required:
19583
+ - kind
19584
+ additionalProperties: false
19585
+ - type: object
19586
+ properties:
19587
+ kind:
19588
+ type: string
19589
+ const: github
19590
+ repo:
19591
+ type: string
19592
+ description: "`owner/repo` of the external plugin repository."
19593
+ path:
19594
+ description: Directory within the repo, when the plugin is not at the root.
19595
+ type: string
19596
+ ref:
19597
+ type: string
19598
+ description: Pinned git ref the plugin is fetched from.
19599
+ required:
19600
+ - kind
19601
+ - repo
19602
+ - ref
19603
+ additionalProperties: false
19604
+ description: "Origin of the match: a first-party in-repo plugin or a whitelisted external one."
19454
19605
  required:
19455
19606
  - name
19456
19607
  - path
19608
+ - source
19457
19609
  additionalProperties: false
19458
19610
  description: Directory matches, sorted alphabetically by name.
19459
19611
  required:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vellumai/assistant",
3
- "version": "0.8.8",
3
+ "version": "0.8.9-dev.202606091926.ebb2d62",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "exports": {
@@ -33,7 +33,7 @@
33
33
  "prepack": "node ../scripts/prepack-bundled-deps.mjs"
34
34
  },
35
35
  "dependencies": {
36
- "@agentclientprotocol/sdk": "0.16.1",
36
+ "@agentclientprotocol/sdk": "0.25.0",
37
37
  "@anthropic-ai/sdk": "0.78.0",
38
38
  "@google/genai": "1.45.0",
39
39
  "@modelcontextprotocol/sdk": "1.27.1",
@@ -74,6 +74,8 @@ function projectModel(model: CatalogModel): Record<string, unknown> {
74
74
  projected.longContextMode = model.longContextMode;
75
75
  if (model.supportsThinking !== undefined)
76
76
  projected.supportsThinking = model.supportsThinking;
77
+ if (model.adaptiveThinkingOnly !== undefined)
78
+ projected.adaptiveThinkingOnly = model.adaptiveThinkingOnly;
77
79
  if (model.supportsCaching !== undefined)
78
80
  projected.supportsCaching = model.supportsCaching;
79
81
  if (model.supportsVision !== undefined)
@@ -0,0 +1,120 @@
1
+ /**
2
+ * Early activation-session marking.
3
+ *
4
+ * The agent loop resolves TOOLS before the SYSTEM PROMPT, so the activation
5
+ * marker must be written before tool resolution on the first activation-rail
6
+ * turn — otherwise the `activation` skill is not preactivated and the emit
7
+ * handler is gated off for the very turn that emits Moment 1. The marking lives
8
+ * in `applyBootstrapTemplate`, which is called from `setOnboardingContext` (the
9
+ * earliest point the conversation knows its bootstrap selection) as well as
10
+ * from `buildSystemPrompt` as an idempotent backstop.
11
+ *
12
+ * These tests exercise `applyBootstrapTemplate` directly against the real
13
+ * DB-backed `isActivationSession` and a real workspace BOOTSTRAP.md, proving the
14
+ * marker is set INDEPENDENT of any `buildSystemPrompt` render.
15
+ */
16
+
17
+ import { copyFileSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
18
+ import { join } from "node:path";
19
+ import { beforeEach, describe, expect, mock, test } from "bun:test";
20
+
21
+ const TEST_DIR = process.env.VELLUM_WORKSPACE_DIR!;
22
+
23
+ mock.module("../util/logger.js", () => ({
24
+ getLogger: () =>
25
+ new Proxy({} as Record<string, unknown>, {
26
+ get: () => () => {},
27
+ }),
28
+ }));
29
+
30
+ const { applyBootstrapTemplate } = await import("../prompts/system-prompt.js");
31
+ const { isActivationSession } =
32
+ await import("../memory/activation-session-store.js");
33
+ const { ACTIVATION_RAIL_BOOTSTRAP_TEMPLATE } =
34
+ await import("../telemetry/activation-funnel.js");
35
+ const { getDb } = await import("../memory/db-connection.js");
36
+ const { initializeDb } = await import("../memory/db-init.js");
37
+ const { activationSessions } = await import("../memory/schema.js");
38
+
39
+ initializeDb();
40
+
41
+ /** Seed the workspace BOOTSTRAP.md with the unmodified generic template so the
42
+ * one-shot reseed inside `applyBootstrapTemplate` fires. */
43
+ function seedGenericBootstrap(): void {
44
+ mkdirSync(TEST_DIR, { recursive: true });
45
+ const generic = readFileSync(
46
+ join(import.meta.dirname, "..", "prompts", "templates", "BOOTSTRAP.md"),
47
+ "utf-8",
48
+ );
49
+ writeFileSync(join(TEST_DIR, "BOOTSTRAP.md"), generic, "utf-8");
50
+ }
51
+
52
+ describe("applyBootstrapTemplate — early activation marking", () => {
53
+ beforeEach(() => {
54
+ getDb().delete(activationSessions).run();
55
+ });
56
+
57
+ test("marks the conversation when the activation-rail template is applied", () => {
58
+ seedGenericBootstrap();
59
+ expect(isActivationSession("rail-conv")).toBe(false);
60
+
61
+ // No buildSystemPrompt call — marking must happen here.
62
+ applyBootstrapTemplate(ACTIVATION_RAIL_BOOTSTRAP_TEMPLATE, "rail-conv");
63
+
64
+ expect(isActivationSession("rail-conv")).toBe(true);
65
+ });
66
+
67
+ test("does not mark when a non-rail bootstrap template is applied", () => {
68
+ seedGenericBootstrap();
69
+
70
+ applyBootstrapTemplate("BOOTSTRAP-REFERENCE.md", "non-rail-conv");
71
+
72
+ expect(isActivationSession("non-rail-conv")).toBe(false);
73
+ });
74
+
75
+ test("does not mark when no conversation id is supplied", () => {
76
+ seedGenericBootstrap();
77
+
78
+ applyBootstrapTemplate(ACTIVATION_RAIL_BOOTSTRAP_TEMPLATE);
79
+
80
+ // Nothing to assert by id; confirm the table stayed empty.
81
+ const rows = getDb().select().from(activationSessions).all();
82
+ expect(rows.length).toBe(0);
83
+ });
84
+
85
+ test("does not mark when BOOTSTRAP.md is customized to something else", () => {
86
+ mkdirSync(TEST_DIR, { recursive: true });
87
+ // A user-customized BOOTSTRAP.md is neither the generic template (so the
88
+ // reseed no-ops) nor the activation-rail template — the rail is not active.
89
+ writeFileSync(
90
+ join(TEST_DIR, "BOOTSTRAP.md"),
91
+ "# My custom bootstrap\n",
92
+ "utf-8",
93
+ );
94
+
95
+ applyBootstrapTemplate(ACTIVATION_RAIL_BOOTSTRAP_TEMPLATE, "custom-conv");
96
+
97
+ expect(isActivationSession("custom-conv")).toBe(false);
98
+ });
99
+
100
+ test("marks idempotently when BOOTSTRAP.md already holds the rail template", () => {
101
+ mkdirSync(TEST_DIR, { recursive: true });
102
+ // Simulate a later turn: BOOTSTRAP.md already holds the rail template, so
103
+ // the reseed no-ops but marking still fires (idempotent backstop).
104
+ copyFileSync(
105
+ join(
106
+ import.meta.dirname,
107
+ "..",
108
+ "prompts",
109
+ "templates",
110
+ ACTIVATION_RAIL_BOOTSTRAP_TEMPLATE,
111
+ ),
112
+ join(TEST_DIR, "BOOTSTRAP.md"),
113
+ );
114
+
115
+ applyBootstrapTemplate(ACTIVATION_RAIL_BOOTSTRAP_TEMPLATE, "rail-conv-2");
116
+ applyBootstrapTemplate(ACTIVATION_RAIL_BOOTSTRAP_TEMPLATE, "rail-conv-2");
117
+
118
+ expect(isActivationSession("rail-conv-2")).toBe(true);
119
+ });
120
+ });