@vellumai/assistant 0.7.2 → 0.7.3

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 (347) hide show
  1. package/ARCHITECTURE.md +16 -1
  2. package/docs/architecture/memory.md +5 -2
  3. package/node_modules/@vellumai/gateway-client/src/ipc-client.ts +13 -4
  4. package/node_modules/@vellumai/skill-host-contracts/src/assistant-event.ts +0 -9
  5. package/node_modules/@vellumai/slack-text/src/index.test.ts +18 -35
  6. package/node_modules/@vellumai/slack-text/src/index.ts +2 -48
  7. package/openapi.yaml +449 -22
  8. package/package.json +1 -1
  9. package/src/__tests__/app-control-flow.test.ts +21 -11
  10. package/src/__tests__/assistant-event-hub.test.ts +48 -0
  11. package/src/__tests__/assistant-event.test.ts +0 -10
  12. package/src/__tests__/assistant-events-sse-hardening.test.ts +2 -7
  13. package/src/__tests__/assistant-feature-flags-integration.test.ts +18 -0
  14. package/src/__tests__/auto-analysis-end-to-end.test.ts +62 -1
  15. package/src/__tests__/background-workers-disk-pressure.test.ts +268 -0
  16. package/src/__tests__/call-conversation-messages.test.ts +8 -2
  17. package/src/__tests__/channel-inbound-disk-pressure.test.ts +537 -0
  18. package/src/__tests__/channel-readiness-service.test.ts +4 -2
  19. package/src/__tests__/config-loader-backfill.test.ts +379 -0
  20. package/src/__tests__/config-schema.test.ts +1 -0
  21. package/src/__tests__/config-watcher-cleanup-throttle.test.ts +18 -9
  22. package/src/__tests__/config-watcher.test.ts +140 -69
  23. package/src/__tests__/context-search-agent-runner.test.ts +61 -3
  24. package/src/__tests__/context-search-conversations-source.test.ts +0 -24
  25. package/src/__tests__/context-search-fanout.test.ts +0 -1
  26. package/src/__tests__/context-search-memory-source.test.ts +3 -7
  27. package/src/__tests__/context-search-memory-v2-source.test.ts +0 -2
  28. package/src/__tests__/context-search-pkb-source.test.ts +0 -1
  29. package/src/__tests__/context-search-workspace-source.test.ts +0 -1
  30. package/src/__tests__/conversation-abort-tool-results.test.ts +6 -0
  31. package/src/__tests__/conversation-agent-loop-disk-pressure.test.ts +223 -0
  32. package/src/__tests__/conversation-agent-loop.test.ts +454 -5
  33. package/src/__tests__/conversation-error.test.ts +150 -3
  34. package/src/__tests__/conversation-process-callsite.test.ts +43 -0
  35. package/src/__tests__/conversation-provider-retry-repair.test.ts +6 -0
  36. package/src/__tests__/conversation-runtime-assembly.test.ts +65 -0
  37. package/src/__tests__/conversation-slash-unknown.test.ts +6 -0
  38. package/src/__tests__/conversation-speed-override.test.ts +0 -3
  39. package/src/__tests__/conversation-store.test.ts +0 -18
  40. package/src/__tests__/conversation-surfaces-app-control.test.ts +15 -4
  41. package/src/__tests__/conversation-surfaces-data-persist.test.ts +404 -0
  42. package/src/__tests__/conversation-tool-setup-app-refresh.test.ts +2 -5
  43. package/src/__tests__/conversation-workspace-injection.test.ts +6 -0
  44. package/src/__tests__/conversation-workspace-tool-tracking.test.ts +6 -0
  45. package/src/__tests__/credentials-cli.test.ts +7 -0
  46. package/src/__tests__/cu-unified-flow.test.ts +176 -10
  47. package/src/__tests__/date-context.test.ts +164 -2
  48. package/src/__tests__/disk-pressure-guard.test.ts +262 -0
  49. package/src/__tests__/disk-pressure-lifecycle.test.ts +168 -0
  50. package/src/__tests__/disk-pressure-policy.test.ts +241 -0
  51. package/src/__tests__/disk-pressure-routes.test.ts +379 -0
  52. package/src/__tests__/disk-pressure-tools.test.ts +277 -0
  53. package/src/__tests__/disk-usage.test.ts +150 -0
  54. package/src/__tests__/events-client-registration.test.ts +52 -0
  55. package/src/__tests__/events-dev-bypass-actor.test.ts +162 -0
  56. package/src/__tests__/file-write-tool.test.ts +4 -10
  57. package/src/__tests__/filing-service.test.ts +3 -4
  58. package/src/__tests__/heartbeat-disk-pressure.test.ts +183 -0
  59. package/src/__tests__/heartbeat-service.test.ts +260 -11
  60. package/src/__tests__/host-app-control-proxy.test.ts +195 -25
  61. package/src/__tests__/host-bash-proxy.test.ts +227 -34
  62. package/src/__tests__/host-bash-routes.test.ts +178 -13
  63. package/src/__tests__/host-cu-proxy.test.ts +210 -3
  64. package/src/__tests__/host-cu-routes-targeted.test.ts +141 -12
  65. package/src/__tests__/host-file-proxy-targeted.test.ts +48 -9
  66. package/src/__tests__/host-file-proxy.test.ts +268 -6
  67. package/src/__tests__/host-file-routes-targeted.test.ts +175 -17
  68. package/src/__tests__/host-transfer-proxy-targeted.test.ts +408 -59
  69. package/src/__tests__/host-transfer-routes-targeted.test.ts +232 -17
  70. package/src/__tests__/http-user-message-parity.test.ts +107 -1
  71. package/src/__tests__/injector-chain.test.ts +18 -6
  72. package/src/__tests__/injector-disk-pressure.test.ts +224 -0
  73. package/src/__tests__/managed-profile-guard.test.ts +18 -0
  74. package/src/__tests__/mcp-abort-signal.test.ts +130 -0
  75. package/src/__tests__/memory-admin-recall.test.ts +3 -11
  76. package/src/__tests__/memory-retrieval-pipeline.test.ts +22 -1
  77. package/src/__tests__/normalize-onboarding.test.ts +180 -0
  78. package/src/__tests__/oauth-connect-routes.test.ts +316 -0
  79. package/src/__tests__/oauth-provider-seed-logos.test.ts +24 -2
  80. package/src/__tests__/onboarding-persona-write.test.ts +308 -0
  81. package/src/__tests__/openai-provider.test.ts +45 -8
  82. package/src/__tests__/persist-onboarding-artifacts.test.ts +44 -64
  83. package/src/__tests__/platform-callback-registration.test.ts +21 -4
  84. package/src/__tests__/platform.test.ts +2 -1
  85. package/src/__tests__/playbook-execution.test.ts +0 -43
  86. package/src/__tests__/plugin-tool-contribution.test.ts +47 -0
  87. package/src/__tests__/prechat-onboarding-contract.test.ts +214 -27
  88. package/src/__tests__/provider-tool-name.test.ts +23 -0
  89. package/src/__tests__/relay-server.test.ts +15 -4
  90. package/src/__tests__/runtime-events-sse.test.ts +4 -8
  91. package/src/__tests__/scheduler-disk-pressure.test.ts +148 -0
  92. package/src/__tests__/secret-ingress-http.test.ts +0 -1
  93. package/src/__tests__/suggestion-routes.test.ts +46 -0
  94. package/src/__tests__/twilio-validation.test.ts +2 -2
  95. package/src/__tests__/workspace-migration-065-bump-stale-heartbeat-interval.test.ts +122 -0
  96. package/src/__tests__/workspace-migration-066-seed-heartbeat-callsite-cost-default.test.ts +285 -0
  97. package/src/__tests__/workspace-migration-068-release-notes-local-timezone.test.ts +90 -0
  98. package/src/__tests__/workspace-migration-safe-storage-limits-release.test.ts +90 -0
  99. package/src/approvals/guardian-decision-primitive.ts +13 -0
  100. package/src/approvals/guardian-request-resolvers.ts +16 -17
  101. package/src/backup/snapshot-lock.ts +2 -27
  102. package/src/bundler/compiler-tools.ts +3 -2
  103. package/src/calls/call-conversation-messages.ts +46 -10
  104. package/src/cli/commands/__tests__/webhooks.test.ts +0 -4
  105. package/src/cli/commands/bash.ts +35 -108
  106. package/src/cli/commands/contacts.ts +64 -25
  107. package/src/cli/commands/credentials.ts +56 -0
  108. package/src/cli/commands/memory-v2.ts +7 -6
  109. package/src/cli/commands/oauth/__tests__/connect.test.ts +437 -1
  110. package/src/cli/commands/oauth/connect.ts +127 -1
  111. package/src/cli/commands/platform/__tests__/callback-routes-list.test.ts +0 -3
  112. package/src/cli/commands/platform/__tests__/connect.test.ts +7 -1
  113. package/src/cli/commands/platform/__tests__/disconnect.test.ts +7 -1
  114. package/src/cli/commands/platform/__tests__/status.test.ts +103 -6
  115. package/src/cli/commands/platform/index.ts +16 -7
  116. package/src/cli/commands/status.ts +57 -0
  117. package/src/cli/program.ts +4 -2
  118. package/src/config/assistant-feature-flags.ts +13 -3
  119. package/src/config/bundled-skills/messaging/tools/messaging-analyze-style.ts +4 -3
  120. package/src/config/bundled-skills/phone-calls/references/TROUBLESHOOTING.md +13 -7
  121. package/src/config/bundled-skills/playbooks/tools/playbook-create.ts +2 -2
  122. package/src/config/bundled-skills/playbooks/tools/playbook-delete.ts +2 -2
  123. package/src/config/bundled-skills/playbooks/tools/playbook-list.ts +2 -2
  124. package/src/config/bundled-skills/playbooks/tools/playbook-update.ts +2 -2
  125. package/src/config/env.ts +0 -8
  126. package/src/config/feature-flag-registry.json +27 -3
  127. package/src/config/loader.ts +127 -8
  128. package/src/config/schemas/__tests__/memory-v2.test.ts +10 -5
  129. package/src/config/schemas/call-site-catalog.ts +14 -0
  130. package/src/config/schemas/channels.ts +0 -5
  131. package/src/config/schemas/heartbeat.ts +1 -1
  132. package/src/config/schemas/llm.ts +2 -0
  133. package/src/config/schemas/memory-lifecycle.ts +13 -0
  134. package/src/config/schemas/memory-v2.ts +75 -11
  135. package/src/config/schemas/platform.ts +43 -3
  136. package/src/config/schemas/services.ts +28 -0
  137. package/src/config/seed-inference-profiles.ts +230 -33
  138. package/src/contacts/contact-store.ts +0 -25
  139. package/src/daemon/__tests__/conversation-tool-setup.test.ts +86 -25
  140. package/src/daemon/assistant-attachments.ts +4 -4
  141. package/src/daemon/config-watcher.ts +85 -57
  142. package/src/daemon/conversation-agent-loop-handlers.ts +6 -0
  143. package/src/daemon/conversation-agent-loop.ts +170 -33
  144. package/src/daemon/conversation-error.ts +87 -15
  145. package/src/daemon/conversation-lifecycle.ts +1 -3
  146. package/src/daemon/conversation-process.ts +8 -0
  147. package/src/daemon/conversation-runtime-assembly.ts +26 -0
  148. package/src/daemon/conversation-store.ts +2 -2
  149. package/src/daemon/conversation-surfaces.ts +195 -15
  150. package/src/daemon/conversation-tool-setup.ts +57 -14
  151. package/src/daemon/conversation.ts +17 -22
  152. package/src/daemon/date-context.ts +71 -22
  153. package/src/daemon/disk-pressure-background-gate.ts +73 -0
  154. package/src/daemon/disk-pressure-guard.ts +343 -0
  155. package/src/daemon/disk-pressure-policy.ts +163 -0
  156. package/src/daemon/handlers/shared.ts +0 -1
  157. package/src/daemon/handlers/skills.ts +3 -4
  158. package/src/daemon/host-app-control-proxy.ts +137 -41
  159. package/src/daemon/host-bash-proxy.ts +46 -21
  160. package/src/daemon/host-cu-proxy.ts +49 -3
  161. package/src/daemon/host-file-proxy.ts +43 -7
  162. package/src/daemon/host-transfer-proxy.ts +95 -4
  163. package/src/daemon/lifecycle.ts +79 -28
  164. package/src/daemon/meet-host-supervisor.ts +4 -4
  165. package/src/daemon/meet-manifest-loader.ts +0 -1
  166. package/src/daemon/memory-v2-startup.ts +14 -4
  167. package/src/daemon/message-protocol.ts +3 -0
  168. package/src/daemon/message-types/conversations.ts +4 -0
  169. package/src/daemon/message-types/disk-pressure.ts +9 -0
  170. package/src/daemon/message-types/messages.ts +3 -0
  171. package/src/daemon/profiler-run-store.ts +5 -5
  172. package/src/daemon/tool-setup-types.ts +2 -2
  173. package/src/documents/document-store.ts +85 -0
  174. package/src/filing/filing-service.ts +30 -5
  175. package/src/heartbeat/__tests__/heartbeat-feed-event.test.ts +9 -16
  176. package/src/heartbeat/__tests__/heartbeat-run-store.test.ts +36 -0
  177. package/src/heartbeat/heartbeat-run-store.ts +13 -0
  178. package/src/heartbeat/heartbeat-service.ts +205 -31
  179. package/src/home/feed-scheduler.ts +18 -0
  180. package/src/inbound/platform-callback-registration.ts +8 -15
  181. package/src/ipc/__tests__/clients-list-ipc.test.ts +169 -0
  182. package/src/ipc/assistant-server.ts +56 -2
  183. package/src/ipc/gateway-client.ts +37 -3
  184. package/src/live-voice/live-voice-archive.ts +4 -4
  185. package/src/live-voice/protocol.ts +5 -7
  186. package/src/media/image-service.ts +1 -7
  187. package/src/memory/__tests__/fixtures/memory-v2-activation-fixtures.ts +21 -13
  188. package/src/memory/__tests__/jobs-worker-v2-schedule.test.ts +52 -22
  189. package/src/memory/__tests__/memory-v2-activation-log-store.test.ts +0 -6
  190. package/src/memory/__tests__/memory-v2-concept-frequency.test.ts +272 -0
  191. package/src/memory/admin.ts +5 -9
  192. package/src/memory/context-search/agent-runner.ts +19 -2
  193. package/src/memory/context-search/sources/conversations.ts +2 -11
  194. package/src/memory/context-search/sources/memory-v2.ts +5 -4
  195. package/src/memory/context-search/sources/memory.ts +0 -1
  196. package/src/memory/context-search/types.ts +0 -1
  197. package/src/memory/conversation-crud.ts +4 -12
  198. package/src/memory/db-init.ts +2 -0
  199. package/src/memory/embedding-runtime-manager.ts +119 -5
  200. package/src/memory/graph/__tests__/conversation-graph-memory-v2-routing.test.ts +32 -21
  201. package/src/memory/graph/conversation-graph-memory.ts +42 -54
  202. package/src/memory/graph/extraction.ts +1 -3
  203. package/src/memory/graph/graph-search.test.ts +10 -67
  204. package/src/memory/graph/graph-search.ts +1 -20
  205. package/src/memory/graph/retriever.test.ts +6 -0
  206. package/src/memory/graph/retriever.ts +6 -10
  207. package/src/memory/indexer.ts +54 -45
  208. package/src/memory/job-handlers/backfill.ts +2 -11
  209. package/src/memory/job-handlers/cleanup.ts +43 -0
  210. package/src/memory/job-handlers/embedding.ts +6 -8
  211. package/src/memory/job-handlers/summarization.ts +2 -7
  212. package/src/memory/jobs-store.ts +48 -0
  213. package/src/memory/jobs-worker.ts +81 -43
  214. package/src/memory/memory-v2-activation-log-store.ts +32 -14
  215. package/src/memory/memory-v2-concept-frequency.ts +169 -0
  216. package/src/memory/migrations/239-trace-events-created-at-index.ts +18 -0
  217. package/src/memory/migrations/index.ts +1 -0
  218. package/src/memory/pkb/pkb-search.test.ts +6 -0
  219. package/src/memory/qdrant-client.ts +0 -13
  220. package/src/memory/rerank-local.ts +374 -0
  221. package/src/memory/search/semantic.ts +6 -67
  222. package/src/memory/trace-event-store.ts +1 -17
  223. package/src/memory/v2/__tests__/activation.test.ts +311 -250
  224. package/src/memory/v2/__tests__/consolidation-job.test.ts +40 -8
  225. package/src/memory/v2/__tests__/injection.test.ts +157 -167
  226. package/src/memory/v2/__tests__/prompts-consolidation.test.ts +61 -2
  227. package/src/memory/v2/__tests__/qdrant.test.ts +16 -0
  228. package/src/memory/v2/__tests__/reranker.test.ts +338 -0
  229. package/src/memory/v2/__tests__/sim.test.ts +5 -199
  230. package/src/memory/v2/__tests__/skill-store.test.ts +71 -65
  231. package/src/memory/v2/__tests__/static-context.test.ts +76 -1
  232. package/src/memory/v2/activation.ts +149 -156
  233. package/src/memory/v2/consolidation-job.ts +62 -12
  234. package/src/memory/v2/injection.ts +47 -60
  235. package/src/memory/v2/prompts/consolidation.ts +36 -1
  236. package/src/memory/v2/qdrant.ts +99 -0
  237. package/src/memory/v2/reranker.ts +177 -0
  238. package/src/memory/v2/sim.ts +10 -84
  239. package/src/memory/v2/skill-content.ts +4 -3
  240. package/src/memory/v2/skill-store.ts +82 -59
  241. package/src/memory/v2/static-context.ts +22 -0
  242. package/src/memory/v2/types.ts +10 -10
  243. package/src/notifications/copy-composer.ts +13 -0
  244. package/src/notifications/signal.ts +4 -0
  245. package/src/oauth/AGENTS.md +3 -1
  246. package/src/oauth/__tests__/oauth-connect-state.test.ts +137 -0
  247. package/src/oauth/connect-orchestrator.ts +2 -0
  248. package/src/oauth/connection-resolver.test.ts +66 -1
  249. package/src/oauth/connection-resolver.ts +55 -1
  250. package/src/oauth/oauth-connect-state.ts +77 -0
  251. package/src/oauth/seed-providers.ts +58 -1
  252. package/src/plugins/defaults/injectors.ts +35 -2
  253. package/src/plugins/defaults/memory-retrieval.ts +5 -6
  254. package/src/plugins/types.ts +7 -0
  255. package/src/proactive-artifact/aux-message-injector.ts +74 -0
  256. package/src/proactive-artifact/decision.test.ts +226 -0
  257. package/src/proactive-artifact/decision.ts +165 -0
  258. package/src/proactive-artifact/index.ts +7 -0
  259. package/src/proactive-artifact/job.test.ts +867 -0
  260. package/src/proactive-artifact/job.ts +352 -0
  261. package/src/proactive-artifact/message-copy.ts +41 -0
  262. package/src/proactive-artifact/trigger-state.test.ts +277 -0
  263. package/src/proactive-artifact/trigger-state.ts +119 -0
  264. package/src/prompts/normalize-onboarding.ts +80 -0
  265. package/src/prompts/persona-resolver.ts +101 -9
  266. package/src/prompts/system-prompt.ts +21 -7
  267. package/src/prompts/templates/BOOTSTRAP.md +13 -5
  268. package/src/providers/__tests__/retry-callsite.test.ts +222 -1
  269. package/src/providers/model-intents.ts +7 -0
  270. package/src/providers/openrouter/client.ts +8 -0
  271. package/src/providers/retry.ts +50 -0
  272. package/src/providers/types.ts +1 -0
  273. package/src/runtime/__tests__/agent-wake.test.ts +456 -3
  274. package/src/runtime/agent-wake.ts +238 -100
  275. package/src/runtime/assistant-event-hub.ts +36 -6
  276. package/src/runtime/assistant-event.ts +0 -1
  277. package/src/runtime/auth/__tests__/route-policy.test.ts +64 -0
  278. package/src/runtime/auth/route-policy.ts +14 -1
  279. package/src/runtime/auth/same-actor.ts +216 -0
  280. package/src/runtime/channel-retry-sweep.ts +65 -1
  281. package/src/runtime/guardian-reply-router.ts +10 -0
  282. package/src/runtime/local-actor-identity.ts +52 -11
  283. package/src/runtime/pending-interactions.ts +8 -0
  284. package/src/runtime/routes/__tests__/client-routes.test.ts +155 -0
  285. package/src/runtime/routes/__tests__/conversation-query-routes.test.ts +0 -5
  286. package/src/runtime/routes/__tests__/heartbeat-routes.test.ts +1 -1
  287. package/src/runtime/routes/client-routes.ts +20 -2
  288. package/src/runtime/routes/contact-routes.ts +0 -25
  289. package/src/runtime/routes/conversation-routes.ts +35 -26
  290. package/src/runtime/routes/debug-bash-routes.ts +163 -0
  291. package/src/runtime/routes/disk-pressure-routes.ts +121 -0
  292. package/src/runtime/routes/document-pdf-renderer.ts +6 -2
  293. package/src/runtime/routes/documents-routes.ts +2 -75
  294. package/src/runtime/routes/events-routes.ts +41 -9
  295. package/src/runtime/routes/host-bash-routes.ts +23 -3
  296. package/src/runtime/routes/host-cu-routes.ts +33 -6
  297. package/src/runtime/routes/host-file-routes.ts +32 -6
  298. package/src/runtime/routes/host-transfer-routes.ts +79 -16
  299. package/src/runtime/routes/identity-routes.ts +7 -138
  300. package/src/runtime/routes/inbound-message-handler.ts +77 -12
  301. package/src/runtime/routes/inbound-stages/guardian-reply-intercept.ts +3 -0
  302. package/src/runtime/routes/index.ts +6 -0
  303. package/src/runtime/routes/memory-item-routes.test.ts +41 -15
  304. package/src/runtime/routes/memory-v2-routes.ts +33 -0
  305. package/src/runtime/routes/oauth-connect-routes.ts +153 -0
  306. package/src/runtime/verification-outbound-actions.ts +4 -4
  307. package/src/schedule/run-script.ts +37 -5
  308. package/src/schedule/scheduler.ts +20 -1
  309. package/src/security/encrypted-store.ts +2 -0
  310. package/src/security/secure-keys.ts +55 -0
  311. package/src/skills/remote-skill-policy.ts +4 -10
  312. package/src/subagent/index.ts +1 -7
  313. package/src/subagent/manager.ts +1 -15
  314. package/src/tasks/task-runner.ts +0 -1
  315. package/src/tasks/task-store.ts +0 -3
  316. package/src/tools/background-tool-registry.ts +17 -3
  317. package/src/tools/host-filesystem/edit.test.ts +151 -0
  318. package/src/tools/host-filesystem/edit.ts +43 -1
  319. package/src/tools/host-filesystem/read.test.ts +129 -0
  320. package/src/tools/host-filesystem/read.ts +43 -1
  321. package/src/tools/host-filesystem/transfer.test.ts +127 -2
  322. package/src/tools/host-filesystem/transfer.ts +56 -11
  323. package/src/tools/host-filesystem/write.test.ts +134 -0
  324. package/src/tools/host-filesystem/write.ts +43 -1
  325. package/src/tools/host-terminal/host-shell.ts +13 -6
  326. package/src/tools/mcp/mcp-tool-factory.ts +2 -1
  327. package/src/tools/memory/register.test.ts +12 -9
  328. package/src/tools/memory/register.ts +1 -2
  329. package/src/tools/provider-tool-name.ts +28 -0
  330. package/src/tools/registry.ts +30 -9
  331. package/src/tools/terminal/shell.ts +9 -1
  332. package/src/tools/tool-approval-handler.ts +31 -6
  333. package/src/tools/types.ts +24 -2
  334. package/src/tts/provider-catalog.ts +3 -5
  335. package/src/util/disk-usage.ts +138 -0
  336. package/src/util/platform.ts +21 -11
  337. package/src/util/process-liveness.ts +26 -0
  338. package/src/workspace/heartbeat-service.ts +19 -0
  339. package/src/workspace/migrations/065-bump-stale-heartbeat-interval.ts +60 -0
  340. package/src/workspace/migrations/066-seed-heartbeat-callsite-cost-default.ts +146 -0
  341. package/src/workspace/migrations/067-release-notes-safe-storage-limits.ts +72 -0
  342. package/src/workspace/migrations/068-release-notes-local-timezone.ts +65 -0
  343. package/src/workspace/migrations/registry.ts +8 -0
  344. package/src/__tests__/conversation-tool-setup-memory-scope.test.ts +0 -167
  345. package/src/memory/v2/__tests__/skill-qdrant.test.ts +0 -657
  346. package/src/memory/v2/skill-qdrant.ts +0 -404
  347. package/src/signals/bash.ts +0 -198
package/openapi.yaml CHANGED
@@ -3,7 +3,7 @@
3
3
  openapi: 3.0.0
4
4
  info:
5
5
  title: Vellum Assistant API
6
- version: 0.7.2
6
+ version: 0.7.3
7
7
  description: Auto-generated OpenAPI specification for the Vellum Assistant runtime HTTP server.
8
8
  servers:
9
9
  - url: http://127.0.0.1:7821
@@ -2886,21 +2886,6 @@ paths:
2886
2886
  - assistantMetadata
2887
2887
  additionalProperties: false
2888
2888
  /v1/contacts/{id}:
2889
- delete:
2890
- operationId: contacts_by_id_delete
2891
- summary: Delete a contact
2892
- description: Delete a contact by ID.
2893
- tags:
2894
- - contacts
2895
- responses:
2896
- "204":
2897
- description: Successful response
2898
- parameters:
2899
- - name: id
2900
- in: path
2901
- required: true
2902
- schema:
2903
- type: string
2904
2889
  get:
2905
2890
  operationId: contacts_by_id_get
2906
2891
  summary: Get a contact
@@ -4244,6 +4229,55 @@ paths:
4244
4229
  - schedules
4245
4230
  - timestamp
4246
4231
  additionalProperties: false
4232
+ /v1/debug/bash:
4233
+ post:
4234
+ operationId: debug_bash_post
4235
+ summary: Execute a shell command in the assistant process
4236
+ description: Developer debugging tool. Requires the assistant to be running with VELLUM_DEBUG=1.
4237
+ tags:
4238
+ - debug
4239
+ responses:
4240
+ "200":
4241
+ description: Successful response
4242
+ content:
4243
+ application/json:
4244
+ schema:
4245
+ type: object
4246
+ properties:
4247
+ stdout:
4248
+ type: string
4249
+ stderr:
4250
+ type: string
4251
+ exitCode:
4252
+ anyOf:
4253
+ - type: number
4254
+ - type: "null"
4255
+ timedOut:
4256
+ type: boolean
4257
+ error:
4258
+ type: string
4259
+ required:
4260
+ - stdout
4261
+ - stderr
4262
+ - exitCode
4263
+ - timedOut
4264
+ additionalProperties: false
4265
+ requestBody:
4266
+ required: true
4267
+ content:
4268
+ application/json:
4269
+ schema:
4270
+ type: object
4271
+ properties:
4272
+ command:
4273
+ type: string
4274
+ description: Shell command to execute via bash -c
4275
+ timeoutMs:
4276
+ description: "Execution timeout in milliseconds (default: 30000)"
4277
+ type: number
4278
+ required:
4279
+ - command
4280
+ additionalProperties: false
4247
4281
  /v1/defer/cancel:
4248
4282
  post:
4249
4283
  operationId: defer_cancel_post
@@ -4454,6 +4488,275 @@ paths:
4454
4488
  - transcription
4455
4489
  - context
4456
4490
  additionalProperties: false
4491
+ /v1/disk-pressure/acknowledge:
4492
+ post:
4493
+ operationId: diskpressure_acknowledge_post
4494
+ summary: Acknowledge disk pressure
4495
+ description: Acknowledge the current disk pressure lock and enter cleanup mode without overriding assistant protections.
4496
+ tags:
4497
+ - disk-pressure
4498
+ responses:
4499
+ "200":
4500
+ description: Successful response
4501
+ content:
4502
+ application/json:
4503
+ schema:
4504
+ type: object
4505
+ properties:
4506
+ status:
4507
+ type: object
4508
+ properties:
4509
+ enabled:
4510
+ type: boolean
4511
+ state:
4512
+ type: string
4513
+ enum:
4514
+ - disabled
4515
+ - ok
4516
+ - critical
4517
+ - unknown
4518
+ locked:
4519
+ type: boolean
4520
+ acknowledged:
4521
+ type: boolean
4522
+ overrideActive:
4523
+ type: boolean
4524
+ effectivelyLocked:
4525
+ type: boolean
4526
+ lockId:
4527
+ anyOf:
4528
+ - type: string
4529
+ - type: "null"
4530
+ usagePercent:
4531
+ anyOf:
4532
+ - type: number
4533
+ - type: "null"
4534
+ thresholdPercent:
4535
+ type: number
4536
+ path:
4537
+ anyOf:
4538
+ - type: string
4539
+ - type: "null"
4540
+ lastCheckedAt:
4541
+ anyOf:
4542
+ - type: string
4543
+ - type: "null"
4544
+ blockedCapabilities:
4545
+ type: array
4546
+ items:
4547
+ type: string
4548
+ enum:
4549
+ - agent-turns
4550
+ - background-work
4551
+ - remote-ingress
4552
+ error:
4553
+ anyOf:
4554
+ - type: string
4555
+ - type: "null"
4556
+ required:
4557
+ - enabled
4558
+ - state
4559
+ - locked
4560
+ - acknowledged
4561
+ - overrideActive
4562
+ - effectivelyLocked
4563
+ - lockId
4564
+ - usagePercent
4565
+ - thresholdPercent
4566
+ - path
4567
+ - lastCheckedAt
4568
+ - blockedCapabilities
4569
+ - error
4570
+ additionalProperties: false
4571
+ required:
4572
+ - status
4573
+ additionalProperties: false
4574
+ "409":
4575
+ description: No active lock or lock already acknowledged.
4576
+ /v1/disk-pressure/override:
4577
+ post:
4578
+ operationId: diskpressure_override_post
4579
+ summary: Override disk pressure
4580
+ description: Override the current disk pressure lock only after confirming "I understand the risks".
4581
+ tags:
4582
+ - disk-pressure
4583
+ responses:
4584
+ "200":
4585
+ description: Successful response
4586
+ content:
4587
+ application/json:
4588
+ schema:
4589
+ type: object
4590
+ properties:
4591
+ status:
4592
+ type: object
4593
+ properties:
4594
+ enabled:
4595
+ type: boolean
4596
+ state:
4597
+ type: string
4598
+ enum:
4599
+ - disabled
4600
+ - ok
4601
+ - critical
4602
+ - unknown
4603
+ locked:
4604
+ type: boolean
4605
+ acknowledged:
4606
+ type: boolean
4607
+ overrideActive:
4608
+ type: boolean
4609
+ effectivelyLocked:
4610
+ type: boolean
4611
+ lockId:
4612
+ anyOf:
4613
+ - type: string
4614
+ - type: "null"
4615
+ usagePercent:
4616
+ anyOf:
4617
+ - type: number
4618
+ - type: "null"
4619
+ thresholdPercent:
4620
+ type: number
4621
+ path:
4622
+ anyOf:
4623
+ - type: string
4624
+ - type: "null"
4625
+ lastCheckedAt:
4626
+ anyOf:
4627
+ - type: string
4628
+ - type: "null"
4629
+ blockedCapabilities:
4630
+ type: array
4631
+ items:
4632
+ type: string
4633
+ enum:
4634
+ - agent-turns
4635
+ - background-work
4636
+ - remote-ingress
4637
+ error:
4638
+ anyOf:
4639
+ - type: string
4640
+ - type: "null"
4641
+ required:
4642
+ - enabled
4643
+ - state
4644
+ - locked
4645
+ - acknowledged
4646
+ - overrideActive
4647
+ - effectivelyLocked
4648
+ - lockId
4649
+ - usagePercent
4650
+ - thresholdPercent
4651
+ - path
4652
+ - lastCheckedAt
4653
+ - blockedCapabilities
4654
+ - error
4655
+ additionalProperties: false
4656
+ required:
4657
+ - status
4658
+ additionalProperties: false
4659
+ "400":
4660
+ description: Confirmation phrase is invalid.
4661
+ "409":
4662
+ description: No active lock or lock already overridden.
4663
+ requestBody:
4664
+ required: true
4665
+ content:
4666
+ application/json:
4667
+ schema:
4668
+ type: object
4669
+ properties:
4670
+ confirmation:
4671
+ type: string
4672
+ required:
4673
+ - confirmation
4674
+ additionalProperties: false
4675
+ /v1/disk-pressure/status:
4676
+ get:
4677
+ operationId: diskpressure_status_get
4678
+ summary: Get disk pressure status
4679
+ description:
4680
+ Return the current disk pressure status snapshot. When safe storage limits are disabled, returns a disabled
4681
+ status.
4682
+ tags:
4683
+ - disk-pressure
4684
+ responses:
4685
+ "200":
4686
+ description: Successful response
4687
+ content:
4688
+ application/json:
4689
+ schema:
4690
+ type: object
4691
+ properties:
4692
+ status:
4693
+ type: object
4694
+ properties:
4695
+ enabled:
4696
+ type: boolean
4697
+ state:
4698
+ type: string
4699
+ enum:
4700
+ - disabled
4701
+ - ok
4702
+ - critical
4703
+ - unknown
4704
+ locked:
4705
+ type: boolean
4706
+ acknowledged:
4707
+ type: boolean
4708
+ overrideActive:
4709
+ type: boolean
4710
+ effectivelyLocked:
4711
+ type: boolean
4712
+ lockId:
4713
+ anyOf:
4714
+ - type: string
4715
+ - type: "null"
4716
+ usagePercent:
4717
+ anyOf:
4718
+ - type: number
4719
+ - type: "null"
4720
+ thresholdPercent:
4721
+ type: number
4722
+ path:
4723
+ anyOf:
4724
+ - type: string
4725
+ - type: "null"
4726
+ lastCheckedAt:
4727
+ anyOf:
4728
+ - type: string
4729
+ - type: "null"
4730
+ blockedCapabilities:
4731
+ type: array
4732
+ items:
4733
+ type: string
4734
+ enum:
4735
+ - agent-turns
4736
+ - background-work
4737
+ - remote-ingress
4738
+ error:
4739
+ anyOf:
4740
+ - type: string
4741
+ - type: "null"
4742
+ required:
4743
+ - enabled
4744
+ - state
4745
+ - locked
4746
+ - acknowledged
4747
+ - overrideActive
4748
+ - effectivelyLocked
4749
+ - lockId
4750
+ - usagePercent
4751
+ - thresholdPercent
4752
+ - path
4753
+ - lastCheckedAt
4754
+ - blockedCapabilities
4755
+ - error
4756
+ additionalProperties: false
4757
+ required:
4758
+ - status
4759
+ additionalProperties: false
4457
4760
  /v1/documents:
4458
4761
  get:
4459
4762
  operationId: documents_get
@@ -4615,6 +4918,32 @@ paths:
4615
4918
  schema:
4616
4919
  type: string
4617
4920
  description: Scope to a single conversation
4921
+ /v1/events/emit:
4922
+ post:
4923
+ operationId: events_emit_post
4924
+ summary: Emit an assistant event
4925
+ description:
4926
+ Trigger an in-process assistant event by kind. Used by the gateway after owning a write that the assistant
4927
+ runtime would normally emit.
4928
+ tags:
4929
+ - events
4930
+ responses:
4931
+ "204":
4932
+ description: Successful response
4933
+ requestBody:
4934
+ required: true
4935
+ content:
4936
+ application/json:
4937
+ schema:
4938
+ type: object
4939
+ properties:
4940
+ kind:
4941
+ type: string
4942
+ enum:
4943
+ - contacts_changed
4944
+ required:
4945
+ - kind
4946
+ additionalProperties: false
4618
4947
  /v1/export:
4619
4948
  post:
4620
4949
  operationId: export_post
@@ -6083,7 +6412,9 @@ paths:
6083
6412
  "400":
6084
6413
  description: x-vellum-client-id header is missing for a targeted host bash request.
6085
6414
  "403":
6086
- description: Submitting client does not match the targeted client for this request.
6415
+ description:
6416
+ Submitting client does not match the targeted client, or the submitting actor's principal does not match
6417
+ the target client's actor.
6087
6418
  "404":
6088
6419
  description: No pending interaction found for the given requestId.
6089
6420
  "409":
@@ -6241,7 +6572,9 @@ paths:
6241
6572
  "400":
6242
6573
  description: x-vellum-client-id header is missing for a targeted host CU request.
6243
6574
  "403":
6244
- description: Submitting client does not match the targeted client for this request.
6575
+ description:
6576
+ Submitting client does not match the targeted client, or the submitting actor's principal does not match
6577
+ the target client's actor.
6245
6578
  "404":
6246
6579
  description: No pending interaction found for the given requestId, or the conversation/proxy no longer exists.
6247
6580
  "409":
@@ -6307,7 +6640,9 @@ paths:
6307
6640
  "400":
6308
6641
  description: x-vellum-client-id header is missing for a targeted host file request.
6309
6642
  "403":
6310
- description: Submitting client does not match the targeted client for this request.
6643
+ description:
6644
+ Submitting client does not match the targeted client, or the submitting actor's principal does not match
6645
+ the target client's actor.
6311
6646
  "404":
6312
6647
  description: No pending interaction found for the given requestId.
6313
6648
  "409":
@@ -6357,7 +6692,9 @@ paths:
6357
6692
  "400":
6358
6693
  description: x-vellum-client-id header is missing for a targeted host transfer request.
6359
6694
  "403":
6360
- description: Submitting client does not match the targeted client for this transfer.
6695
+ description:
6696
+ Submitting client does not match the targeted client, or the submitting actor's principal does not match
6697
+ the target client's actor.
6361
6698
  requestBody:
6362
6699
  required: true
6363
6700
  content:
@@ -6784,6 +7121,61 @@ paths:
6784
7121
  required:
6785
7122
  - state
6786
7123
  additionalProperties: false
7124
+ /v1/internal/oauth/connect/start:
7125
+ post:
7126
+ operationId: internal_oauth_connect_start_post
7127
+ summary: Start daemon-owned OAuth connect flow
7128
+ description: Starts an OAuth connect flow in the daemon and returns the authorization URL for the CLI to open in the browser.
7129
+ tags:
7130
+ - internal
7131
+ responses:
7132
+ "200":
7133
+ description: Successful response
7134
+ requestBody:
7135
+ required: true
7136
+ content:
7137
+ application/json:
7138
+ schema:
7139
+ type: object
7140
+ properties:
7141
+ service:
7142
+ type: string
7143
+ clientId:
7144
+ type: string
7145
+ clientSecret:
7146
+ type: string
7147
+ callbackTransport:
7148
+ type: string
7149
+ enum:
7150
+ - loopback
7151
+ - gateway
7152
+ requestedScopes:
7153
+ type: array
7154
+ items:
7155
+ type: string
7156
+ required:
7157
+ - service
7158
+ - clientId
7159
+ - callbackTransport
7160
+ additionalProperties: false
7161
+ /v1/internal/oauth/connect/status/{state}:
7162
+ get:
7163
+ operationId: internal_oauth_connect_status_by_state_get
7164
+ summary: Poll daemon OAuth connect flow status
7165
+ description: Returns the current status of an in-flight daemon-owned OAuth connect flow (pending/complete/error).
7166
+ tags:
7167
+ - internal
7168
+ responses:
7169
+ "200":
7170
+ description: Successful response
7171
+ "404":
7172
+ description: No active OAuth connect flow for the given state token
7173
+ parameters:
7174
+ - name: state
7175
+ in: path
7176
+ required: true
7177
+ schema:
7178
+ type: string
6787
7179
  /v1/internal/twilio/connect-action:
6788
7180
  post:
6789
7181
  operationId: internal_twilio_connectaction_post
@@ -7118,6 +7510,35 @@ paths:
7118
7510
  required:
7119
7511
  - op
7120
7512
  additionalProperties: false
7513
+ /v1/memory/v2/concept-frequency:
7514
+ post:
7515
+ operationId: memory_v2_conceptfrequency_post
7516
+ summary: Aggregate per-concept injection frequency from activation logs
7517
+ description:
7518
+ "Debug-only. Aggregates the existing memory_v2_activation_logs table by (slug, status) and cross-references
7519
+ on-disk concept pages so an operator can see which concepts get injected often, which get scored but rejected,
7520
+ and which on-disk pages never even surface as candidates. Optional filters: conversationId narrows to a single
7521
+ conversation; sinceMs restricts to logs created at-or-after the given epoch ms timestamp."
7522
+ tags:
7523
+ - memory
7524
+ responses:
7525
+ "200":
7526
+ description: Successful response
7527
+ requestBody:
7528
+ required: true
7529
+ content:
7530
+ application/json:
7531
+ schema:
7532
+ type: object
7533
+ properties:
7534
+ conversationId:
7535
+ type: string
7536
+ minLength: 1
7537
+ sinceMs:
7538
+ type: integer
7539
+ minimum: 0
7540
+ maximum: 9007199254740991
7541
+ additionalProperties: false
7121
7542
  /v1/memory/v2/concept-page:
7122
7543
  post:
7123
7544
  operationId: memory_v2_conceptpage_post
@@ -7340,6 +7761,8 @@ paths:
7340
7761
  type: string
7341
7762
  slashCommand:
7342
7763
  type: string
7764
+ clientTimezone:
7765
+ type: string
7343
7766
  inferenceProfile:
7344
7767
  anyOf:
7345
7768
  - type: string
@@ -11403,7 +11826,9 @@ paths:
11403
11826
  "400":
11404
11827
  description: x-vellum-client-id header is missing for a targeted transfer.
11405
11828
  "403":
11406
- description: Submitting client does not match the targeted client for this transfer.
11829
+ description:
11830
+ Submitting client does not match the targeted client, or the submitting actor's principal does not match
11831
+ the target client's actor.
11407
11832
  parameters:
11408
11833
  - name: transferId
11409
11834
  in: path
@@ -11422,7 +11847,9 @@ paths:
11422
11847
  "400":
11423
11848
  description: x-vellum-client-id header is missing for a targeted transfer.
11424
11849
  "403":
11425
- description: Submitting client does not match the targeted client for this transfer.
11850
+ description:
11851
+ Submitting client does not match the targeted client, or the submitting actor's principal does not match
11852
+ the target client's actor.
11426
11853
  parameters:
11427
11854
  - name: transferId
11428
11855
  in: path
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vellumai/assistant",
3
- "version": "0.7.2",
3
+ "version": "0.7.3",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "exports": {
@@ -13,8 +13,9 @@
13
13
  * differs in two notable ways:
14
14
  * 1. Result payloads carry `pngBase64` (not screenshots-as-strings) and
15
15
  * surface as image content blocks with `media_type: "image/png"`.
16
- * 2. A module-level singleton lock guards `app_control_start` — only one
17
- * conversation may hold an active session at a time.
16
+ * 2. A module-level session lock binds `(conversationId, app)` — only
17
+ * one conversation may hold an active session at a time, and non-start
18
+ * tools must target the same `app` the user approved at start time.
18
19
  */
19
20
  import { afterEach, beforeEach, describe, expect, mock, test } from "bun:test";
20
21
 
@@ -87,8 +88,9 @@ mock.module("../runtime/pending-interactions.js", () => ({
87
88
 
88
89
  const {
89
90
  HostAppControlProxy,
90
- _getActiveAppControlConversationId,
91
- _resetActiveAppControlConversationId,
91
+ _getActiveAppControlSession,
92
+ _resetActiveAppControlSession,
93
+ _setActiveAppControlSession,
92
94
  } = await import("../daemon/host-app-control-proxy.js");
93
95
  const { ROUTES } = await import("../runtime/routes/host-app-control-routes.js");
94
96
  const { surfaceProxyResolver } =
@@ -176,11 +178,11 @@ describe("app-control end-to-end flow", () => {
176
178
  pending.clear();
177
179
  clearConversations();
178
180
  mockHasClient = true;
179
- _resetActiveAppControlConversationId();
181
+ _resetActiveAppControlSession();
180
182
  });
181
183
 
182
184
  afterEach(() => {
183
- _resetActiveAppControlConversationId();
185
+ _resetActiveAppControlSession();
184
186
  clearConversations();
185
187
  });
186
188
 
@@ -238,8 +240,10 @@ describe("app-control end-to-end flow", () => {
238
240
  },
239
241
  });
240
242
 
241
- // Singleton lock is held by this conversation now.
242
- expect(_getActiveAppControlConversationId()).toBe(conversationId);
243
+ // Session lock is held by this conversation now, bound to the started app.
244
+ const session = _getActiveAppControlSession();
245
+ expect(session?.conversationId).toBe(conversationId);
246
+ expect(session?.app).toBe("com.example.app");
243
247
 
244
248
  proxy.dispose();
245
249
  });
@@ -253,6 +257,12 @@ describe("app-control end-to-end flow", () => {
253
257
  const proxy = new HostAppControlProxy(conversationId);
254
258
  const ctx = buildContext(proxy, conversationId);
255
259
  registerConversation(conversationId, proxy);
260
+ // Prime a session so observe passes the auth gate. This test exercises
261
+ // the result-formatting path, not the start flow.
262
+ _setActiveAppControlSession({
263
+ conversationId,
264
+ app: "com.example.app",
265
+ });
256
266
 
257
267
  const resultPromise = surfaceProxyResolver(ctx, "app_control_observe", {
258
268
  tool: "observe",
@@ -306,7 +316,7 @@ describe("app-control end-to-end flow", () => {
306
316
  });
307
317
  await postResult({ state: "running", pngBase64: TINY_PNG_B64 });
308
318
  await startPromise;
309
- expect(_getActiveAppControlConversationId()).toBe(conversationId);
319
+ expect(_getActiveAppControlSession()?.conversationId).toBe(conversationId);
310
320
 
311
321
  // Wrap dispose to verify it was called by the resolver.
312
322
  let disposeCalls = 0;
@@ -328,7 +338,7 @@ describe("app-control end-to-end flow", () => {
328
338
  expect(sentMessages).toHaveLength(0);
329
339
  expect(disposeCalls).toBe(1);
330
340
  // Lock released.
331
- expect(_getActiveAppControlConversationId()).toBeUndefined();
341
+ expect(_getActiveAppControlSession()).toBeUndefined();
332
342
  });
333
343
 
334
344
  // -------------------------------------------------------------------------
@@ -347,7 +357,7 @@ describe("app-control end-to-end flow", () => {
347
357
  await postResult({ state: "running", pngBase64: TINY_PNG_B64 });
348
358
  const resultA = await startA;
349
359
  expect(resultA.isError).toBe(false);
350
- expect(_getActiveAppControlConversationId()).toBe("conv-a");
360
+ expect(_getActiveAppControlSession()?.conversationId).toBe("conv-a");
351
361
 
352
362
  // Second conversation tries to start while conv-a holds the lock.
353
363
  sentMessages.length = 0;