@vellumai/assistant 0.10.2-dev.202606250318.5e7cfb0 → 0.10.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (430) hide show
  1. package/bun.lock +0 -20
  2. package/docs/workspace-tools.md +33 -42
  3. package/eslint-rules/cli-no-daemon-internals.js +0 -6
  4. package/node_modules/@vellumai/gateway-client/src/__tests__/trust-verdict-contract.test.ts +0 -31
  5. package/node_modules/@vellumai/gateway-client/src/gateway-ipc-contracts.ts +0 -44
  6. package/node_modules/@vellumai/gateway-client/src/index.ts +0 -14
  7. package/node_modules/@vellumai/gateway-client/src/trust-verdict-contract.ts +0 -17
  8. package/node_modules/@vellumai/service-contracts/package.json +0 -1
  9. package/node_modules/@vellumai/service-contracts/src/index.ts +0 -1
  10. package/openapi.yaml +0 -155
  11. package/package.json +1 -4
  12. package/scripts/test.sh +15 -36
  13. package/src/__tests__/actor-token-service.test.ts +14 -36
  14. package/src/__tests__/agent-loop-override-profile.test.ts +0 -1
  15. package/src/__tests__/agent-wake-disk-pressure-callsite.test.ts +0 -2
  16. package/src/__tests__/agent-wake-override-profile.test.ts +0 -2
  17. package/src/__tests__/annotate-activity-metadata.test.ts +0 -2
  18. package/src/__tests__/annotate-risk-options.test.ts +0 -2
  19. package/src/__tests__/approval-cascade.test.ts +0 -2
  20. package/src/__tests__/assistant-attachments.test.ts +0 -42
  21. package/src/__tests__/background-workers-disk-pressure.test.ts +0 -2
  22. package/src/__tests__/btw-routes.test.ts +0 -2
  23. package/src/__tests__/build-persisted-content.test.ts +0 -2
  24. package/src/__tests__/call-controller.test.ts +0 -19
  25. package/src/__tests__/channel-guardian.test.ts +58 -94
  26. package/src/__tests__/channel-reply-delivery.test.ts +0 -2
  27. package/src/__tests__/compaction-events.test.ts +0 -2
  28. package/src/__tests__/compaction.benchmark.test.ts +0 -2
  29. package/src/__tests__/compactor-call-site-logging.test.ts +0 -2
  30. package/src/__tests__/compactor-low-watermark-cut.test.ts +0 -2
  31. package/src/__tests__/compactor-preserved-tail-count.test.ts +0 -2
  32. package/src/__tests__/compactor-summary-call-truncation.test.ts +0 -2
  33. package/src/__tests__/compactor-web-search-strip.test.ts +0 -2
  34. package/src/__tests__/config-loader-backfill.test.ts +10 -123
  35. package/src/__tests__/config-schema.test.ts +0 -1
  36. package/src/__tests__/confirmation-request-guardian-bridge.test.ts +29 -31
  37. package/src/__tests__/contacts-relay-reads.test.ts +15 -13
  38. package/src/__tests__/conversation-abort-tool-results.test.ts +0 -2
  39. package/src/__tests__/conversation-agent-loop-disk-pressure.test.ts +0 -2
  40. package/src/__tests__/conversation-agent-loop-inference-profile.test.ts +0 -2
  41. package/src/__tests__/conversation-agent-loop-overflow.test.ts +0 -2
  42. package/src/__tests__/conversation-agent-loop.test.ts +0 -134
  43. package/src/__tests__/conversation-analysis-routes.test.ts +0 -2
  44. package/src/__tests__/conversation-app-control-lifecycle.test.ts +0 -2
  45. package/src/__tests__/conversation-confirmation-signals.test.ts +0 -2
  46. package/src/__tests__/conversation-history-web-search.test.ts +0 -2
  47. package/src/__tests__/conversation-load-history-repair.test.ts +0 -2
  48. package/src/__tests__/conversation-load-history-stripped.test.ts +0 -2
  49. package/src/__tests__/conversation-pairing.test.ts +0 -2
  50. package/src/__tests__/conversation-process-app-control-preactivation.test.ts +0 -2
  51. package/src/__tests__/conversation-process-callsite.test.ts +0 -2
  52. package/src/__tests__/conversation-provider-retry-repair.test.ts +0 -2
  53. package/src/__tests__/conversation-queue.test.ts +0 -91
  54. package/src/__tests__/conversation-routes-guardian-reply.test.ts +0 -14
  55. package/src/__tests__/conversation-routes-slash-commands.test.ts +0 -14
  56. package/src/__tests__/conversation-slash-queue.test.ts +0 -2
  57. package/src/__tests__/conversation-slash-unknown.test.ts +0 -2
  58. package/src/__tests__/conversation-speed-override.test.ts +0 -2
  59. package/src/__tests__/conversation-surfaces-task-progress.test.ts +0 -29
  60. package/src/__tests__/conversation-title-service.test.ts +0 -2
  61. package/src/__tests__/conversation-tool-setup-attribution.test.ts +0 -47
  62. package/src/__tests__/conversation-usage.test.ts +0 -2
  63. package/src/__tests__/conversation-workspace-cache-state.test.ts +0 -2
  64. package/src/__tests__/conversation-workspace-injection.test.ts +0 -2
  65. package/src/__tests__/conversation-workspace-tool-tracking.test.ts +0 -2
  66. package/src/__tests__/credential-security-invariants.test.ts +1 -1
  67. package/src/__tests__/db-migration-rollback.test.ts +171 -205
  68. package/src/__tests__/db-test-helpers.ts +4 -5
  69. package/src/__tests__/deterministic-verification-control-plane.test.ts +2 -4
  70. package/src/__tests__/disk-pressure-guard.test.ts +0 -41
  71. package/src/__tests__/dm-persistence.test.ts +0 -2
  72. package/src/__tests__/emit-signal-routing-intent.test.ts +5 -10
  73. package/src/__tests__/events-dev-bypass-actor.test.ts +1 -7
  74. package/src/__tests__/exploration-drift-hook.test.ts +2 -3
  75. package/src/__tests__/filing-service.test.ts +0 -2
  76. package/src/__tests__/guardian-binding-drift-heal.test.ts +10 -75
  77. package/src/__tests__/guardian-dispatch.test.ts +1 -95
  78. package/src/__tests__/guardian-outbound-http.test.ts +0 -13
  79. package/src/__tests__/heartbeat-disk-pressure.test.ts +0 -2
  80. package/src/__tests__/heartbeat-service.test.ts +0 -2
  81. package/src/__tests__/helpers/channel-test-adapter.ts +7 -1
  82. package/src/__tests__/host-app-control-routes.test.ts +30 -24
  83. package/src/__tests__/host-bash-routes.test.ts +41 -31
  84. package/src/__tests__/host-browser-routes.test.ts +32 -26
  85. package/src/__tests__/host-cu-routes-targeted.test.ts +33 -25
  86. package/src/__tests__/host-file-routes-targeted.test.ts +52 -40
  87. package/src/__tests__/host-transfer-routes-targeted.test.ts +43 -31
  88. package/src/__tests__/http-user-message-parity.test.ts +8 -290
  89. package/src/__tests__/inbound-invite-redemption.test.ts +0 -28
  90. package/src/__tests__/inbound-slack-persistence.test.ts +0 -2
  91. package/src/__tests__/invite-redemption-service.test.ts +0 -198
  92. package/src/__tests__/llm-context-normalization.test.ts +0 -105
  93. package/src/__tests__/llm-request-log-error-payload.test.ts +9 -71
  94. package/src/__tests__/llm-usage-store.test.ts +0 -25
  95. package/src/__tests__/mcp-health-check.test.ts +1 -2
  96. package/src/__tests__/media-stream-server-integration.test.ts +0 -127
  97. package/src/__tests__/memory-retrieval-hook.test.ts +0 -2
  98. package/src/__tests__/messaging-send-tool.test.ts +0 -2
  99. package/src/__tests__/migration-import-from-url.test.ts +2 -2
  100. package/src/__tests__/mtime-cache.test.ts +5 -146
  101. package/src/__tests__/native-web-search.test.ts +0 -2
  102. package/src/__tests__/non-member-access-request.test.ts +17 -189
  103. package/src/__tests__/notification-broadcaster.test.ts +0 -4
  104. package/src/__tests__/notification-decision-recipient-context.test.ts +32 -33
  105. package/src/__tests__/notification-deep-link.test.ts +0 -6
  106. package/src/__tests__/notification-guardian-path.test.ts +0 -19
  107. package/src/__tests__/openai-provider.test.ts +12 -22
  108. package/src/__tests__/openai-responses-provider.test.ts +2 -12
  109. package/src/__tests__/outbound-slack-persistence.test.ts +0 -2
  110. package/src/__tests__/pending-interactions-resolved-event.test.ts +4 -7
  111. package/src/__tests__/persistence-secret-redaction.test.ts +0 -2
  112. package/src/__tests__/plugin-bootstrap.test.ts +73 -3
  113. package/src/__tests__/plugin-route-contribution.test.ts +17 -4
  114. package/src/__tests__/plugin-tool-contribution.test.ts +18 -3
  115. package/src/__tests__/plugin-types.test.ts +2 -0
  116. package/src/__tests__/process-message-background-slack.test.ts +0 -2
  117. package/src/__tests__/process-message-display-content.test.ts +0 -2
  118. package/src/__tests__/provider-error-scenarios.test.ts +4 -5
  119. package/src/__tests__/provider-usage-tracking.test.ts +0 -39
  120. package/src/__tests__/regenerate-fire-and-forget-trace.test.ts +0 -2
  121. package/src/__tests__/registry.test.ts +1 -4
  122. package/src/__tests__/relay-server.test.ts +25 -694
  123. package/src/__tests__/runtime-attachment-metadata.test.ts +1 -0
  124. package/src/__tests__/secret-ingress-http.test.ts +0 -14
  125. package/src/__tests__/send-endpoint-busy.test.ts +8 -30
  126. package/src/__tests__/skills.test.ts +0 -44
  127. package/src/__tests__/slack-inbound-verification.test.ts +2 -47
  128. package/src/__tests__/stt-hints.test.ts +13 -44
  129. package/src/__tests__/subagent-detail.test.ts +0 -27
  130. package/src/__tests__/subagent-disposal.test.ts +0 -65
  131. package/src/__tests__/subagent-notify-parent.test.ts +0 -2
  132. package/src/__tests__/subagent-role-registry.test.ts +2 -7
  133. package/src/__tests__/subagent-spawn-tool-fork.test.ts +0 -2
  134. package/src/__tests__/subagent-tools.test.ts +0 -2
  135. package/src/__tests__/suggestion-routes.test.ts +0 -2
  136. package/src/__tests__/title-generate-hook.test.ts +0 -2
  137. package/src/__tests__/tool-executor-lifecycle-events.test.ts +0 -2
  138. package/src/__tests__/tool-executor.test.ts +11 -16
  139. package/src/__tests__/tool-preview-lifecycle.test.ts +0 -2
  140. package/src/__tests__/tool-result-metadata-plumbing.test.ts +0 -2
  141. package/src/__tests__/tool-start-timestamp.test.ts +0 -2
  142. package/src/__tests__/trusted-contact-inline-approval-integration.test.ts +10 -10
  143. package/src/__tests__/twilio-routes.test.ts +0 -96
  144. package/src/__tests__/ui-file-upload-surface.test.ts +0 -86
  145. package/src/__tests__/verification-control-plane-policy.test.ts +0 -2
  146. package/src/__tests__/voice-invite-redemption.test.ts +0 -33
  147. package/src/__tests__/web-search-backend-failure.test.ts +0 -2
  148. package/src/__tests__/workspace-migration-remove-hooks.test.ts +35 -14
  149. package/src/__tests__/workspace-tool-loader.test.ts +2 -195
  150. package/src/__tests__/workspace-tools-watcher-flag.test.ts +70 -0
  151. package/src/agent/loop.ts +0 -56
  152. package/src/api/index.ts +1 -19
  153. package/src/api/responses/llm-request-log-entry.ts +0 -29
  154. package/src/api/responses/subagent-detail.ts +0 -17
  155. package/src/api/surfaces.ts +3 -39
  156. package/src/approvals/guardian-request-resolvers.ts +11 -1
  157. package/src/calls/__tests__/relay-setup-router.test.ts +4 -262
  158. package/src/calls/call-domain.ts +3 -3
  159. package/src/calls/guardian-dispatch.ts +8 -10
  160. package/src/calls/inbound-trust-reader.ts +1 -17
  161. package/src/calls/media-stream-server.ts +0 -21
  162. package/src/calls/relay-server.ts +50 -167
  163. package/src/calls/relay-setup-router.ts +7 -37
  164. package/src/calls/relay-verification.ts +4 -4
  165. package/src/calls/stt-hints.ts +12 -9
  166. package/src/calls/twilio-routes.ts +4 -14
  167. package/src/channels/types.ts +20 -10
  168. package/src/cli/commands/__tests__/cache.test.ts +1 -8
  169. package/src/cli/commands/cache.ts +181 -194
  170. package/src/cli/commands/db/__tests__/repair.test.ts +5 -6
  171. package/src/cli/commands/db/status.ts +1 -37
  172. package/src/cli/commands/mcp.ts +218 -252
  173. package/src/cli/commands/memory/index.ts +0 -2
  174. package/src/cli/commands/plugins.ts +3 -75
  175. package/src/cli/lib/__tests__/install-from-github.test.ts +0 -102
  176. package/src/cli/lib/__tests__/list-installed-plugins.test.ts +1 -160
  177. package/src/cli/lib/list-installed-plugins.ts +1 -179
  178. package/src/config/__tests__/sync-gated-profiles.test.ts +3 -11
  179. package/src/config/bundled-skills/contacts/tools/contact-merge.ts +17 -27
  180. package/src/config/bundled-skills/contacts/tools/contact-search.ts +3 -13
  181. package/src/config/bundled-skills/subagent/SKILL.md +1 -1
  182. package/src/config/bundled-skills/subagent/TOOLS.json +1 -1
  183. package/src/config/feature-flag-registry.json +13 -5
  184. package/src/config/loader.ts +5 -38
  185. package/src/config/schemas/__tests__/memory-v3.test.ts +0 -1
  186. package/src/config/schemas/memory-lifecycle.ts +0 -12
  187. package/src/config/schemas/memory-v3.ts +0 -7
  188. package/src/config/schemas/memory.ts +0 -4
  189. package/src/config/schemas/timeouts.ts +0 -8
  190. package/src/config/seed-inference-profiles.ts +11 -21
  191. package/src/config/skills.ts +5 -27
  192. package/src/config/sync-gated-profiles.ts +13 -12
  193. package/src/contacts/contacts-write.ts +0 -3
  194. package/src/daemon/assistant-attachments.ts +4 -27
  195. package/src/daemon/conversation-agent-loop.ts +0 -28
  196. package/src/daemon/conversation-process.ts +16 -35
  197. package/src/daemon/conversation-surfaces.ts +38 -111
  198. package/src/daemon/conversation-tool-setup.ts +16 -50
  199. package/src/daemon/conversation.ts +1 -13
  200. package/src/daemon/disk-pressure-guard.ts +2 -12
  201. package/src/daemon/event-loop-watchdog.ts +1 -28
  202. package/src/daemon/external-plugins-bootstrap.ts +34 -4
  203. package/src/daemon/handlers/__tests__/config-a2a-redeem.test.ts +0 -25
  204. package/src/daemon/handlers/config-a2a.ts +14 -6
  205. package/src/daemon/handlers/config-channels.ts +22 -78
  206. package/src/daemon/handlers/conversations.ts +0 -77
  207. package/src/daemon/lifecycle.ts +0 -4
  208. package/src/daemon/mcp-reload-service.ts +0 -10
  209. package/src/daemon/memory-v2-startup.test.ts +0 -72
  210. package/src/daemon/memory-v2-startup.ts +19 -87
  211. package/src/daemon/message-types/conversations.ts +0 -2
  212. package/src/daemon/message-types/surfaces.ts +12 -12
  213. package/src/daemon/server.ts +4 -0
  214. package/src/daemon/shutdown-handlers.ts +0 -20
  215. package/src/daemon/tool-setup-types.ts +0 -9
  216. package/src/daemon/workspace-tools-watcher.ts +328 -0
  217. package/src/ipc/__tests__/clients-list-ipc.test.ts +1 -1
  218. package/src/ipc/assistant-server.ts +2 -2
  219. package/src/mcp/__tests__/mcp-auth-orchestrator.test.ts +0 -1
  220. package/src/mcp/client.ts +1 -15
  221. package/src/mcp/mcp-auth-orchestrator.ts +1 -6
  222. package/src/mcp/mcp-oauth-provider.ts +8 -19
  223. package/src/memory/__tests__/memory-retrospective-job.test.ts +0 -8
  224. package/src/memory/conversation-crud.ts +0 -38
  225. package/src/memory/db-connection.ts +3 -22
  226. package/src/memory/db-init.ts +502 -36
  227. package/src/memory/db-singleton.ts +4 -6
  228. package/src/memory/jobs-worker.ts +0 -58
  229. package/src/memory/llm-request-log-store.ts +1 -26
  230. package/src/memory/llm-usage-store.ts +20 -48
  231. package/src/memory/memory-retrospective-job.ts +8 -9
  232. package/src/memory/migrations/209-strip-thinking-from-consolidated.ts +56 -130
  233. package/src/memory/migrations/__tests__/run-migrations.test.ts +2 -2
  234. package/src/memory/migrations/registry.ts +573 -0
  235. package/src/memory/migrations/run-migrations.ts +6 -90
  236. package/src/memory/migrations/validate-migration-state.ts +66 -101
  237. package/src/memory/schema/conversations.ts +0 -9
  238. package/src/memory/schema/infrastructure.ts +0 -20
  239. package/src/memory/v2/__tests__/cli-command-store.test.ts +0 -25
  240. package/src/memory/v2/__tests__/skill-store.test.ts +0 -80
  241. package/src/memory/v2/cli-command-store.ts +38 -75
  242. package/src/memory/v2/prompts/consolidation.ts +82 -13
  243. package/src/memory/v2/prompts/router.ts +93 -21
  244. package/src/memory/v2/skill-store.ts +31 -68
  245. package/src/notifications/__tests__/broadcaster.test.ts +8 -16
  246. package/src/notifications/__tests__/decision-engine.test.ts +9 -78
  247. package/src/notifications/broadcaster.ts +1 -8
  248. package/src/notifications/decision-engine.ts +7 -15
  249. package/src/notifications/destination-resolver.ts +24 -68
  250. package/src/notifications/emit-signal.ts +14 -39
  251. package/src/permissions/question-prompter.test.ts +1 -1
  252. package/src/permissions/question-prompter.ts +4 -7
  253. package/src/plugin-api/index.ts +6 -6
  254. package/src/plugin-api/types.ts +5 -3
  255. package/src/plugin-api/vision-support.test.ts +4 -28
  256. package/src/plugin-api/vision-support.ts +31 -66
  257. package/src/plugins/defaults/advisor/__tests__/consult.test.ts +0 -161
  258. package/src/plugins/defaults/advisor/consult.ts +6 -110
  259. package/src/plugins/defaults/advisor/steering.ts +2 -14
  260. package/src/plugins/defaults/advisor/tools/advisor.ts +5 -32
  261. package/src/plugins/defaults/exploration-drift/hooks/post-tool-use.ts +1 -2
  262. package/src/plugins/defaults/image-fallback/__tests__/image-fallback.test.ts +7 -47
  263. package/src/plugins/defaults/image-fallback/hooks/post-tool-use.ts +11 -10
  264. package/src/plugins/defaults/image-fallback/hooks/user-prompt-submit.ts +20 -12
  265. package/src/plugins/defaults/image-fallback/src/caption-blocks.ts +11 -42
  266. package/src/plugins/defaults/memory-v3-shadow/__tests__/injection.test.ts +3 -33
  267. package/src/plugins/defaults/memory-v3-shadow/__tests__/pool-select.test.ts +4 -48
  268. package/src/plugins/defaults/memory-v3-shadow/__tests__/shadow-plugin.test.ts +8 -4
  269. package/src/plugins/defaults/memory-v3-shadow/injector.ts +15 -43
  270. package/src/plugins/defaults/memory-v3-shadow/orchestrate.ts +2 -11
  271. package/src/plugins/defaults/memory-v3-shadow/pool-select.ts +13 -77
  272. package/src/plugins/defaults/memory-v3-shadow/shadow-plugin.ts +11 -12
  273. package/src/plugins/mtime-cache.ts +291 -76
  274. package/src/plugins/pipeline.ts +13 -111
  275. package/src/plugins/types.ts +2 -0
  276. package/src/providers/anthropic/client.ts +0 -5
  277. package/src/providers/call-site-routing.ts +0 -4
  278. package/src/providers/model-catalog.ts +0 -16
  279. package/src/providers/openai/__tests__/api-error-detail.test.ts +120 -0
  280. package/src/providers/openai/chat-completions-provider.ts +83 -37
  281. package/src/providers/openai/responses-provider.ts +46 -50
  282. package/src/providers/openrouter/client.ts +0 -5
  283. package/src/providers/provider-send-message.ts +0 -4
  284. package/src/providers/ratelimit.ts +0 -4
  285. package/src/providers/retry.ts +0 -4
  286. package/src/providers/types.ts +0 -9
  287. package/src/providers/usage-tracking.ts +0 -4
  288. package/src/runtime/__tests__/trust-verdict-consumer.test.ts +3 -335
  289. package/src/runtime/access-request-helper.ts +39 -19
  290. package/src/runtime/actor-trust-resolver.ts +2 -2
  291. package/src/runtime/assistant-event-hub.ts +1 -1
  292. package/src/runtime/assistant-stream-state.ts +2 -9
  293. package/src/runtime/auth/require-bound-guardian.ts +11 -21
  294. package/src/runtime/channel-verification-service.ts +31 -56
  295. package/src/runtime/confirmation-request-guardian-bridge.ts +3 -3
  296. package/src/runtime/guardian-vellum-migration.ts +7 -66
  297. package/src/runtime/invite-redemption-service.ts +187 -198
  298. package/src/runtime/local-actor-identity.ts +11 -76
  299. package/src/runtime/pending-interactions.ts +1 -11
  300. package/src/runtime/routes/__tests__/channel-verification-revoke.test.ts +5 -56
  301. package/src/runtime/routes/__tests__/channel-verification-routes.test.ts +1 -1
  302. package/src/runtime/routes/__tests__/surface-action-routes.test.ts +0 -187
  303. package/src/runtime/routes/browser-routes.ts +1 -1
  304. package/src/runtime/routes/canonical-guardian-expiry-sweep.ts +5 -13
  305. package/src/runtime/routes/channel-verification-routes.ts +3 -3
  306. package/src/runtime/routes/contact-routes.ts +32 -8
  307. package/src/runtime/routes/conversation-cli-routes.ts +5 -4
  308. package/src/runtime/routes/conversation-list-routes.ts +7 -4
  309. package/src/runtime/routes/conversation-query-routes.ts +0 -72
  310. package/src/runtime/routes/conversation-routes.ts +85 -84
  311. package/src/runtime/routes/events-routes.ts +2 -2
  312. package/src/runtime/routes/global-search-routes.ts +1 -3
  313. package/src/runtime/routes/guardian-action-routes.ts +5 -4
  314. package/src/runtime/routes/host-app-control-routes.ts +4 -5
  315. package/src/runtime/routes/host-bash-routes.ts +4 -5
  316. package/src/runtime/routes/host-browser-routes.ts +11 -9
  317. package/src/runtime/routes/host-cu-routes.ts +4 -5
  318. package/src/runtime/routes/host-file-routes.ts +4 -5
  319. package/src/runtime/routes/host-transfer-routes.ts +6 -6
  320. package/src/runtime/routes/http-adapter.ts +1 -1
  321. package/src/runtime/routes/identity-routes.ts +2 -3
  322. package/src/runtime/routes/inbound-message-handler.ts +5 -5
  323. package/src/runtime/routes/inbound-stages/acl-enforcement.test.ts +5 -97
  324. package/src/runtime/routes/inbound-stages/acl-enforcement.ts +49 -61
  325. package/src/runtime/routes/inbound-stages/background-dispatch.ts +4 -16
  326. package/src/runtime/routes/inbound-stages/escalation-intercept.ts +7 -7
  327. package/src/runtime/routes/inbound-stages/guardian-activation-intercept.test.ts +8 -21
  328. package/src/runtime/routes/inbound-stages/guardian-activation-intercept.ts +3 -14
  329. package/src/runtime/routes/index.ts +0 -2
  330. package/src/runtime/routes/llm-context-normalization.ts +0 -83
  331. package/src/runtime/routes/mcp-auth-routes.ts +19 -171
  332. package/src/runtime/routes/migration-rollback-routes.ts +3 -4
  333. package/src/runtime/routes/migration-routes.ts +1 -4
  334. package/src/runtime/routes/subagents-routes.ts +0 -5
  335. package/src/runtime/routes/surface-action-routes.ts +56 -42
  336. package/src/runtime/services/__tests__/conversation-serializer.test.ts +0 -1
  337. package/src/runtime/services/conversation-serializer.ts +9 -7
  338. package/src/runtime/tool-grant-request-helper.ts +3 -3
  339. package/src/runtime/trust-verdict-consumer.ts +9 -85
  340. package/src/runtime/verification-outbound-actions.ts +18 -18
  341. package/src/signals/user-message.ts +0 -16
  342. package/src/subagent/manager.ts +0 -9
  343. package/src/subagent/types.ts +3 -3
  344. package/src/telemetry/types.ts +1 -34
  345. package/src/telemetry/usage-telemetry-reporter.test.ts +2 -3
  346. package/src/telemetry/usage-telemetry-reporter.ts +3 -87
  347. package/src/tools/ask-question/ask-question-tool.test.ts +0 -29
  348. package/src/tools/ask-question/ask-question-tool.ts +0 -13
  349. package/src/tools/executor.ts +4 -4
  350. package/src/tools/registry.ts +0 -18
  351. package/src/tools/shared/filesystem/path-policy.ts +5 -12
  352. package/src/tools/tool-approval-handler.ts +1 -1
  353. package/src/tools/tool-defaults.ts +2 -9
  354. package/src/tools/tool-manifest.ts +0 -3
  355. package/src/tools/types.ts +2 -17
  356. package/src/tools/workspace-tools/loader.ts +244 -348
  357. package/src/util/errors.ts +1 -26
  358. package/src/util/platform.ts +0 -5
  359. package/src/workflows/library.test.ts +0 -140
  360. package/src/workflows/library.ts +28 -82
  361. package/src/workspace/migrations/017-seed-persona-dirs.ts +34 -3
  362. package/src/workspace/migrations/019-scope-journal-to-guardian.ts +24 -3
  363. package/src/workspace/migrations/048-remove-workspace-hooks.ts +66 -14
  364. package/src/workspace/migrations/registry.ts +0 -2
  365. package/node_modules/@vellumai/gateway-client/src/__tests__/guardian-delivery-contract.test.ts +0 -91
  366. package/node_modules/@vellumai/gateway-client/src/guardian-delivery-contract.ts +0 -48
  367. package/node_modules/@vellumai/service-contracts/src/__tests__/channels.test.ts +0 -28
  368. package/node_modules/@vellumai/service-contracts/src/channels.ts +0 -41
  369. package/src/__tests__/code-search-tool.test.ts +0 -585
  370. package/src/__tests__/guardian-expiry-notifier.test.ts +0 -282
  371. package/src/__tests__/mcp-config-secret-boundary.test.ts +0 -390
  372. package/src/__tests__/plugin-pipeline.test.ts +0 -96
  373. package/src/__tests__/sse-actor-principal-guardian-source.test.ts +0 -102
  374. package/src/__tests__/steer-on-enqueue-question.test.ts +0 -181
  375. package/src/__tests__/workspace-migration-111-prune-seeded-callsite-defaults.test.ts +0 -208
  376. package/src/agent/loop-exclusive-tool.test.ts +0 -150
  377. package/src/api/constants/sse-replay.ts +0 -41
  378. package/src/api/events/conversation-notice.ts +0 -26
  379. package/src/approvals/guardian-channel-delivery.ts +0 -30
  380. package/src/approvals/guardian-expiry-notifier.ts +0 -148
  381. package/src/cli/commands/memory/__tests__/worker.test.ts +0 -302
  382. package/src/cli/commands/memory/worker.ts +0 -175
  383. package/src/config/__tests__/loader-callsite-strip-fallback.test.ts +0 -143
  384. package/src/config/prune-seeded-callsite-defaults.ts +0 -110
  385. package/src/contacts/__tests__/contacts-write-revoke-relay.test.ts +0 -129
  386. package/src/contacts/__tests__/guardian-delivery-reader.test.ts +0 -312
  387. package/src/contacts/__tests__/member-write-relay.test.ts +0 -202
  388. package/src/contacts/guardian-delivery-reader.ts +0 -223
  389. package/src/contacts/member-write-relay.ts +0 -189
  390. package/src/daemon/conversation-notices.ts +0 -60
  391. package/src/daemon/handlers/__tests__/config-channels.test.ts +0 -225
  392. package/src/hooks/hook-loader.ts +0 -341
  393. package/src/mcp/mcp-header-store.ts +0 -134
  394. package/src/memory/__tests__/301-create-watchdog-events.test.ts +0 -110
  395. package/src/memory/__tests__/prompt-override.test.ts +0 -192
  396. package/src/memory/__tests__/watchdog-events-store.test.ts +0 -161
  397. package/src/memory/migrations/300-add-processing-started-at.ts +0 -30
  398. package/src/memory/migrations/301-create-watchdog-events.ts +0 -45
  399. package/src/memory/migrations/__tests__/209-strip-thinking-from-consolidated.test.ts +0 -224
  400. package/src/memory/prompt-override.ts +0 -129
  401. package/src/memory/steps.ts +0 -573
  402. package/src/memory/watchdog-events-store.ts +0 -87
  403. package/src/memory/worker-control.ts +0 -118
  404. package/src/memory/worker-process.ts +0 -72
  405. package/src/notifications/__tests__/connected-channels.test.ts +0 -114
  406. package/src/notifications/__tests__/destination-resolver.test.ts +0 -256
  407. package/src/onboarding/checkin-event.test.ts +0 -222
  408. package/src/onboarding/checkin-event.ts +0 -321
  409. package/src/onboarding/schedule-checkin.ts +0 -190
  410. package/src/plugins/defaults/advisor/__tests__/context-pack-gating.test.ts +0 -106
  411. package/src/plugins/defaults/advisor/__tests__/context-pack.test.ts +0 -60
  412. package/src/plugins/defaults/advisor/context-pack.ts +0 -288
  413. package/src/plugins/defaults/memory-v3-shadow/pool-select.test.ts +0 -146
  414. package/src/plugins/surface-import.ts +0 -121
  415. package/src/providers/openai/__tests__/api-error-normalization.test.ts +0 -321
  416. package/src/providers/openai/api-error-normalization.ts +0 -270
  417. package/src/runtime/__tests__/channel-verification-service.test.ts +0 -133
  418. package/src/runtime/__tests__/guardian-vellum-migration.test.ts +0 -181
  419. package/src/runtime/__tests__/is-guardian-bound-for-channel.test.ts +0 -66
  420. package/src/runtime/__tests__/local-principal-trust.test.ts +0 -164
  421. package/src/runtime/anchored-guardian.test.ts +0 -156
  422. package/src/runtime/anchored-guardian.ts +0 -135
  423. package/src/runtime/auth/__tests__/require-bound-guardian.test.ts +0 -99
  424. package/src/runtime/local-principal-trust.ts +0 -52
  425. package/src/runtime/routes/__tests__/contact-routes.test.ts +0 -212
  426. package/src/runtime/routes/__tests__/global-search-routes.test.ts +0 -93
  427. package/src/runtime/routes/onboarding-checkin-routes.ts +0 -86
  428. package/src/tools/filesystem/search.ts +0 -543
  429. package/src/util/telemetry-db-path.ts +0 -24
  430. package/src/workspace/migrations/111-prune-seeded-callsite-defaults.ts +0 -134
@@ -109,9 +109,10 @@ export function registerMcpCommand(program: Command): void {
109
109
  transport: "ipc",
110
110
  description: "Manage MCP (Model Context Protocol) servers",
111
111
  build: (mcp) => {
112
- mcp.addHelpText(
113
- "after",
114
- `
112
+
113
+ mcp.addHelpText(
114
+ "after",
115
+ `
115
116
  MCP servers extend the assistant's capabilities with external tools. Servers
116
117
  are configured in the assistant's config.json under the mcp.servers key. Each
117
118
  server uses one of three transport types:
@@ -128,15 +129,15 @@ Examples:
128
129
  $ assistant mcp add my-server -t stdio -c npx -a my-mcp-server
129
130
  $ assistant mcp auth my-server
130
131
  $ assistant mcp remove my-server`,
131
- );
132
-
133
- mcp
134
- .command("list")
135
- .description("List configured MCP servers and their status")
136
- .option("--json", "Output as JSON")
137
- .addHelpText(
138
- "after",
139
- `
132
+ );
133
+
134
+ mcp
135
+ .command("list")
136
+ .description("List configured MCP servers and their status")
137
+ .option("--json", "Output as JSON")
138
+ .addHelpText(
139
+ "after",
140
+ `
140
141
  Shows each configured MCP server with its current status and configuration:
141
142
 
142
143
  Name The server identifier used in config.json
@@ -156,49 +157,49 @@ list including health status.
156
157
  Examples:
157
158
  $ assistant mcp list
158
159
  $ assistant mcp list --json`,
159
- )
160
- .action(async (opts: { json?: boolean }) => {
161
- const result = await cliIpcCall<{ servers: McpServerEntry[] }>(
162
- "internal_mcp_list",
163
- );
160
+ )
161
+ .action(async (opts: { json?: boolean }) => {
162
+ const result = await cliIpcCall<{ servers: McpServerEntry[] }>(
163
+ "internal_mcp_list",
164
+ );
164
165
 
165
- if (!result.ok) {
166
- return exitFromIpcResult({
167
- ok: false,
168
- error: result.error,
169
- statusCode: result.statusCode,
170
- });
171
- }
172
-
173
- const servers = result.result?.servers ?? [];
174
-
175
- if (servers.length === 0) {
176
- if (opts.json) {
177
- process.stdout.write(JSON.stringify([], null, 2) + "\n");
178
- } else {
179
- log.info("No MCP servers configured.");
180
- }
181
- return;
182
- }
183
-
184
- if (opts.json) {
185
- process.stdout.write(JSON.stringify(servers, null, 2) + "\n");
186
- return;
187
- }
188
-
189
- log.info(`${servers.length} MCP server(s) configured:\n`);
190
-
191
- for (const entry of servers) {
192
- printServerEntry(entry);
193
- }
166
+ if (!result.ok) {
167
+ return exitFromIpcResult({
168
+ ok: false,
169
+ error: result.error,
170
+ statusCode: result.statusCode,
194
171
  });
195
-
196
- mcp
197
- .command("reload")
198
- .description("Reload MCP server connections in the running assistant")
199
- .addHelpText(
200
- "after",
201
- `
172
+ }
173
+
174
+ const servers = result.result?.servers ?? [];
175
+
176
+ if (servers.length === 0) {
177
+ if (opts.json) {
178
+ process.stdout.write(JSON.stringify([], null, 2) + "\n");
179
+ } else {
180
+ log.info("No MCP servers configured.");
181
+ }
182
+ return;
183
+ }
184
+
185
+ if (opts.json) {
186
+ process.stdout.write(JSON.stringify(servers, null, 2) + "\n");
187
+ return;
188
+ }
189
+
190
+ log.info(`${servers.length} MCP server(s) configured:\n`);
191
+
192
+ for (const entry of servers) {
193
+ printServerEntry(entry);
194
+ }
195
+ });
196
+
197
+ mcp
198
+ .command("reload")
199
+ .description("Reload MCP server connections in the running assistant")
200
+ .addHelpText(
201
+ "after",
202
+ `
202
203
  Signals the running assistant to disconnect and reconnect all MCP servers
203
204
  using the current configuration from disk. Active sessions pick up new tools
204
205
  on their next turn automatically. The assistant must be running.
@@ -207,49 +208,40 @@ Examples:
207
208
  $ vellum mcp reload
208
209
  $ vellum mcp reload # after editing config.json to add a new server
209
210
  $ vellum mcp reload # after running "vellum mcp auth <server>"`,
210
- )
211
- .action(async () => {
212
- const result = await cliIpcCall("internal_mcp_reload", { body: {} });
213
- if (!result.ok) {
214
- log.warn(
215
- `Could not signal reload: ${result.error}. ` +
216
- `Run 'assistant mcp reload' once the assistant is up.`,
217
- );
218
- } else {
219
- log.info(
220
- "MCP reload signal sent. The running assistant will reconnect servers shortly.",
221
- );
222
- }
223
- });
224
-
225
- mcp
226
- .command("add <name>")
227
- .description("Add an MCP server configuration")
228
- .requiredOption(
229
- "-t, --transport-type <type>",
230
- "Transport type: stdio, sse, or streamable-http",
231
- )
232
- .option("-u, --url <url>", "Server URL (for sse/streamable-http)")
233
- .option("-c, --command <cmd>", "Command to run (for stdio)")
234
- .option("-a, --args <args...>", "Command arguments (for stdio)")
235
- .option(
236
- "-r, --risk <level>",
237
- "Default risk level: low, medium, or high",
238
- "high",
239
- )
240
- .option(
241
- "-H, --header <key:value>",
242
- "Custom HTTP header (repeatable, for sse/streamable-http). E.g. -H 'Authorization: Bearer tok123'",
243
- (val: string, acc: string[]) => {
244
- acc.push(val);
245
- return acc;
246
- },
247
- [] as string[],
248
- )
249
- .option("--disabled", "Add as disabled")
250
- .addHelpText(
251
- "after",
252
- `
211
+ )
212
+ .action(async () => {
213
+ const result = await cliIpcCall("internal_mcp_reload", { body: {} });
214
+ if (!result.ok) {
215
+ log.warn(
216
+ `Could not signal reload: ${result.error}. ` +
217
+ `Run 'assistant mcp reload' once the assistant is up.`,
218
+ );
219
+ } else {
220
+ log.info(
221
+ "MCP reload signal sent. The running assistant will reconnect servers shortly.",
222
+ );
223
+ }
224
+ });
225
+
226
+ mcp
227
+ .command("add <name>")
228
+ .description("Add an MCP server configuration")
229
+ .requiredOption(
230
+ "-t, --transport-type <type>",
231
+ "Transport type: stdio, sse, or streamable-http",
232
+ )
233
+ .option("-u, --url <url>", "Server URL (for sse/streamable-http)")
234
+ .option("-c, --command <cmd>", "Command to run (for stdio)")
235
+ .option("-a, --args <args...>", "Command arguments (for stdio)")
236
+ .option(
237
+ "-r, --risk <level>",
238
+ "Default risk level: low, medium, or high",
239
+ "high",
240
+ )
241
+ .option("--disabled", "Add as disabled")
242
+ .addHelpText(
243
+ "after",
244
+ `
253
245
  Arguments:
254
246
  name Unique identifier for the server (used as the key in config.json)
255
247
 
@@ -262,84 +254,58 @@ The --risk flag sets the default risk level for all tools from this server
262
254
  (defaults to "high" if not specified). The server starts enabled unless
263
255
  --disabled is passed.
264
256
 
265
- The --header (-H) flag adds custom HTTP headers to sse/streamable-http
266
- transports. Use it for Bearer Token or API Key authentication. The flag
267
- is repeatable — pass multiple -H flags for multiple headers.
268
-
269
257
  If a server with the same name already exists, the command fails. Remove the
270
258
  existing server first with "assistant mcp remove <name>".
271
259
 
272
260
  Examples:
273
261
  $ assistant mcp add my-server -t stdio -c npx -a my-mcp-server
274
262
  $ assistant mcp add remote-api -t streamable-http -u https://api.example.com/mcp -r medium
275
- $ assistant mcp add legacy-sse -t sse -u https://old.example.com/events --disabled
276
- $ assistant mcp add authed-api -t sse -u https://api.example.com/mcp -H 'Authorization: Bearer tok123'
277
- $ assistant mcp add apikey-srv -t streamable-http -u https://srv.example.com/mcp -H 'X-API-Key: sk_live_abc'`,
278
- )
279
- .action(
280
- async (
281
- name: string,
282
- opts: {
283
- transportType: string;
284
- url?: string;
285
- command?: string;
286
- args?: string[];
287
- risk: string;
288
- header: string[];
289
- disabled?: boolean;
263
+ $ assistant mcp add legacy-sse -t sse -u https://old.example.com/events --disabled`,
264
+ )
265
+ .action(
266
+ async (
267
+ name: string,
268
+ opts: {
269
+ transportType: string;
270
+ url?: string;
271
+ command?: string;
272
+ args?: string[];
273
+ risk: string;
274
+ disabled?: boolean;
275
+ },
276
+ ) => {
277
+ const result = await cliIpcCall<{ added: true }>(
278
+ "internal_mcp_add",
279
+ {
280
+ body: {
281
+ name,
282
+ transportType: opts.transportType,
283
+ url: opts.url,
284
+ command: opts.command,
285
+ args: opts.args,
286
+ risk: opts.risk,
287
+ disabled: opts.disabled,
290
288
  },
291
- ) => {
292
- let headers: Record<string, string> | undefined;
293
- if (opts.header.length > 0) {
294
- headers = {};
295
- for (const h of opts.header) {
296
- const colonIdx = h.indexOf(":");
297
- if (colonIdx === -1) {
298
- log.error(
299
- `Invalid header format: "${h}". Expected "Key: Value".`,
300
- );
301
- process.exitCode = 1;
302
- return;
303
- }
304
- headers[h.slice(0, colonIdx).trim()] = h
305
- .slice(colonIdx + 1)
306
- .trim();
307
- }
308
- }
309
-
310
- const result = await cliIpcCall<{ added: true }>(
311
- "internal_mcp_add",
312
- {
313
- body: {
314
- name,
315
- transportType: opts.transportType,
316
- url: opts.url,
317
- command: opts.command,
318
- args: opts.args,
319
- risk: opts.risk,
320
- disabled: opts.disabled,
321
- headers,
322
- },
323
- },
324
- );
325
-
326
- if (!result.ok) {
327
- log.error(result.error ?? "Failed to add MCP server");
328
- process.exitCode = 1;
329
- return;
330
- }
331
-
332
- log.info(`Added MCP server "${name}" (${opts.transportType})`);
333
- log.info("The running assistant is reloading MCP servers now.");
334
289
  },
335
290
  );
336
291
 
337
- mcp
338
- .command("auth <name>")
339
- .description("Authenticate with an MCP server via OAuth")
340
- .addHelpText(
341
- "after",
342
- `
292
+ if (!result.ok) {
293
+ log.error(result.error ?? "Failed to add MCP server");
294
+ process.exitCode = 1;
295
+ return;
296
+ }
297
+
298
+ log.info(`Added MCP server "${name}" (${opts.transportType})`);
299
+ log.info("The running assistant is reloading MCP servers now.");
300
+ },
301
+ );
302
+
303
+ mcp
304
+ .command("auth <name>")
305
+ .description("Authenticate with an MCP server via OAuth")
306
+ .addHelpText(
307
+ "after",
308
+ `
343
309
  Arguments:
344
310
  name Name of a configured MCP server to authenticate with
345
311
 
@@ -358,79 +324,79 @@ automatically. You can also run 'vellum mcp reload' to apply immediately.
358
324
  Examples:
359
325
  $ assistant mcp auth my-server
360
326
  $ assistant mcp auth remote-api`,
361
- )
362
- .action(async (name: string) => {
363
- // IPC-first path — attempt daemon-orchestrated flow (works on hosted assistants)
364
- const startResult = await cliIpcCall<{
365
- auth_url: string;
366
- state: string;
367
- already_authenticated?: boolean;
368
- }>("internal_mcp_auth_start", { body: { serverId: name } });
369
-
370
- if (startResult.ok && startResult.result?.already_authenticated) {
371
- log.info(`Server "${name}" is already authenticated.`);
372
- process.exit(0);
373
- return;
374
- }
375
-
376
- if (startResult.ok && startResult.result?.auth_url) {
377
- const authUrl = startResult.result.auth_url;
378
- log.info(`Opening browser for "${name}" OAuth authorization...`);
379
- openInHostBrowser(authUrl);
380
- log.info(`If the browser did not open, visit:\n${authUrl}`);
381
- log.info(
382
- "Waiting for authorization in browser... (press Ctrl+C to cancel)",
383
- );
384
-
385
- const finalStatus = await pollMcpAuthStatus(name, {
386
- intervalMs: 2_000,
387
- timeoutMs: 150_000, // matches existing OAUTH_TIMEOUT_MS
388
- });
389
-
390
- if (finalStatus.status === "complete") {
391
- log.info(`Authentication successful for "${name}".`);
392
- log.info(
393
- "The running assistant has picked up this change automatically.",
394
- );
395
- process.exit(0);
396
- return;
397
- }
398
-
399
- const errMsg = finalStatus.error ?? "Unknown error";
400
- if (errMsg.includes("denied") || errMsg.includes("cancelled")) {
401
- log.error(`Authorization cancelled for "${name}".`);
402
- } else if (errMsg.includes("timed out")) {
403
- log.error(
404
- `Authorization timed out for "${name}". Try again with: assistant mcp auth ${name}`,
405
- );
406
- } else {
407
- log.error(`OAuth failed for "${name}": ${errMsg}`);
408
- }
409
- process.exitCode = 1;
410
- return;
411
- }
412
-
413
- // Any !startResult.ok case: surface error and exit 1
414
- const ipcErrMsg = startResult.error ?? "Unknown error";
415
- if (
416
- ipcErrMsg.startsWith("Could not connect to assistant daemon") ||
417
- ipcErrMsg.startsWith("Unknown method:")
418
- ) {
419
- log.error(
420
- `MCP OAuth requires the assistant to be running. Is it running?`,
421
- );
422
- } else {
423
- log.error(`MCP OAuth failed via assistant: ${ipcErrMsg}`);
424
- }
425
- process.exitCode = 1;
327
+ )
328
+ .action(async (name: string) => {
329
+ // IPC-first path — attempt daemon-orchestrated flow (works on hosted assistants)
330
+ const startResult = await cliIpcCall<{
331
+ auth_url: string;
332
+ state: string;
333
+ already_authenticated?: boolean;
334
+ }>("internal_mcp_auth_start", { body: { serverId: name } });
335
+
336
+ if (startResult.ok && startResult.result?.already_authenticated) {
337
+ log.info(`Server "${name}" is already authenticated.`);
338
+ process.exit(0);
339
+ return;
340
+ }
341
+
342
+ if (startResult.ok && startResult.result?.auth_url) {
343
+ const authUrl = startResult.result.auth_url;
344
+ log.info(`Opening browser for "${name}" OAuth authorization...`);
345
+ openInHostBrowser(authUrl);
346
+ log.info(`If the browser did not open, visit:\n${authUrl}`);
347
+ log.info(
348
+ "Waiting for authorization in browser... (press Ctrl+C to cancel)",
349
+ );
350
+
351
+ const finalStatus = await pollMcpAuthStatus(name, {
352
+ intervalMs: 2_000,
353
+ timeoutMs: 150_000, // matches existing OAUTH_TIMEOUT_MS
426
354
  });
427
355
 
428
- mcp
429
- .command("remove <name>")
430
- .description("Remove an MCP server configuration")
431
- .addHelpText(
432
- "after",
433
- `
356
+ if (finalStatus.status === "complete") {
357
+ log.info(`Authentication successful for "${name}".`);
358
+ log.info(
359
+ "The running assistant has picked up this change automatically.",
360
+ );
361
+ process.exit(0);
362
+ return;
363
+ }
364
+
365
+ const errMsg = finalStatus.error ?? "Unknown error";
366
+ if (errMsg.includes("denied") || errMsg.includes("cancelled")) {
367
+ log.error(`Authorization cancelled for "${name}".`);
368
+ } else if (errMsg.includes("timed out")) {
369
+ log.error(
370
+ `Authorization timed out for "${name}". Try again with: assistant mcp auth ${name}`,
371
+ );
372
+ } else {
373
+ log.error(`OAuth failed for "${name}": ${errMsg}`);
374
+ }
375
+ process.exitCode = 1;
376
+ return;
377
+ }
378
+
379
+ // Any !startResult.ok case: surface error and exit 1
380
+ const ipcErrMsg = startResult.error ?? "Unknown error";
381
+ if (
382
+ ipcErrMsg.startsWith("Could not connect to assistant daemon") ||
383
+ ipcErrMsg.startsWith("Unknown method:")
384
+ ) {
385
+ log.error(
386
+ `MCP OAuth requires the assistant to be running. Is it running?`,
387
+ );
388
+ } else {
389
+ log.error(`MCP OAuth failed via assistant: ${ipcErrMsg}`);
390
+ }
391
+ process.exitCode = 1;
392
+ });
393
+
394
+ mcp
395
+ .command("remove <name>")
396
+ .description("Remove an MCP server configuration")
397
+ .addHelpText(
398
+ "after",
399
+ `
434
400
  Arguments:
435
401
  name Name of the MCP server to remove
436
402
 
@@ -445,25 +411,25 @@ can also run 'vellum mcp reload' to apply immediately.
445
411
  Examples:
446
412
  $ assistant mcp remove my-server
447
413
  $ assistant mcp remove legacy-sse`,
448
- )
449
- .action(async (name: string) => {
450
- const result = await cliIpcCall<{ removed: true }>(
451
- "internal_mcp_remove",
452
- { body: { name } },
453
- );
414
+ )
415
+ .action(async (name: string) => {
416
+ const result = await cliIpcCall<{ removed: true }>(
417
+ "internal_mcp_remove",
418
+ { body: { name } },
419
+ );
454
420
 
455
- if (!result.ok) {
456
- log.error(result.error ?? `Failed to remove MCP server "${name}".`);
457
- process.exitCode = 1;
458
- return;
459
- }
421
+ if (!result.ok) {
422
+ log.error(result.error ?? `Failed to remove MCP server "${name}".`);
423
+ process.exitCode = 1;
424
+ return;
425
+ }
460
426
 
461
- log.info(`Removed MCP server "${name}".`);
462
- log.info(
463
- "The running assistant will pick up this change automatically. " +
464
- "Or run 'vellum mcp reload' to apply now.",
465
- );
466
- });
427
+ log.info(`Removed MCP server "${name}".`);
428
+ log.info(
429
+ "The running assistant will pick up this change automatically. " +
430
+ "Or run 'vellum mcp reload' to apply now.",
431
+ );
432
+ });
467
433
  },
468
434
  });
469
435
  }
@@ -4,7 +4,6 @@ import { registerCommand } from "../../lib/register-command.js";
4
4
  import { registerMemoryRetrospectiveCommand } from "./memory-retrospective.js";
5
5
  import { registerMemoryV2Command } from "./memory-v2.js";
6
6
  import { registerMemoryV3Command } from "./memory-v3.js";
7
- import { registerMemoryWorkerCommand } from "./worker.js";
8
7
 
9
8
  export function registerMemoryCommand(program: Command): void {
10
9
  registerCommand(program, {
@@ -28,7 +27,6 @@ Examples:
28
27
  registerMemoryV2Command(memory);
29
28
  registerMemoryV3Command(memory);
30
29
  registerMemoryRetrospectiveCommand(memory);
31
- registerMemoryWorkerCommand(memory);
32
30
  },
33
31
  });
34
32
  }
@@ -29,11 +29,7 @@ import {
29
29
  PluginAlreadyInstalledError,
30
30
  PluginNotFoundError,
31
31
  } from "../lib/install-from-github.js";
32
- import {
33
- type AllPluginInfo,
34
- listAllPlugins,
35
- listInstalledPlugins,
36
- } from "../lib/list-installed-plugins.js";
32
+ import { listInstalledPlugins } from "../lib/list-installed-plugins.js";
37
33
  import type { FingerprintComparison } from "../lib/plugin-fingerprint.js";
38
34
  import {
39
35
  DEFAULT_PIN_HISTORY_LIMIT,
@@ -89,8 +85,6 @@ Examples:
89
85
  $ assistant plugins install example --pin <sha> --force
90
86
  $ assistant plugins list
91
87
  $ assistant plugins list --json
92
- $ assistant plugins list --all
93
- $ assistant plugins list --all --json
94
88
  $ assistant plugins inspect example
95
89
  $ assistant plugins inspect example --json
96
90
  $ assistant plugins diff example
@@ -245,63 +239,9 @@ Examples:
245
239
 
246
240
  plugins
247
241
  .command("list")
248
- .description(
249
- "List plugins installed in your workspace.",
250
- )
242
+ .description("List plugins installed under <workspaceDir>/plugins/")
251
243
  .option("--json", "Emit machine-readable JSON instead of a table")
252
- .option(
253
- "--all",
254
- "Include first-party default plugins and disabled plugins in the listing",
255
- )
256
- .action((opts: { json?: boolean; all?: boolean }) => {
257
- if (opts.all) {
258
- const all = listAllPlugins();
259
-
260
- if (opts.json) {
261
- process.stdout.write(JSON.stringify(all, null, 2) + "\n");
262
- return;
263
- }
264
-
265
- if (all.length === 0) {
266
- console.log("No plugins found.");
267
- return;
268
- }
269
-
270
- const rows = all.map((p) => ({
271
- name: p.name,
272
- version: p.packageJson?.version ?? "—",
273
- source: p.source,
274
- status: formatAllPluginStatus(p),
275
- }));
276
- const nameW = Math.max(4, ...rows.map((r) => r.name.length));
277
- const versionW = Math.max(7, ...rows.map((r) => r.version.length));
278
- const sourceW = Math.max(6, ...rows.map((r) => r.source.length));
279
- const pad = (s: string, w: number) =>
280
- s + " ".repeat(w - s.length);
281
- console.log(
282
- `${pad("NAME", nameW)} ${pad("VERSION", versionW)} ${pad("SOURCE", sourceW)} STATUS`,
283
- );
284
- for (const r of rows) {
285
- console.log(
286
- `${pad(r.name, nameW)} ${pad(r.version, versionW)} ${pad(r.source, sourceW)} ${r.status}`,
287
- );
288
- }
289
-
290
- const userCount = all.filter((p) => p.source === "user").length;
291
- const defaultCount = all.length - userCount;
292
- const disabledCount = all.filter((p) => p.disabled).length;
293
- console.log("");
294
- console.log(
295
- `${all.length} plugin${all.length === 1 ? "" : "s"} ` +
296
- `(${userCount} user, ${defaultCount} default` +
297
- (disabledCount > 0
298
- ? `, ${disabledCount} disabled`
299
- : "") +
300
- `).`,
301
- );
302
- return;
303
- }
304
-
244
+ .action((opts: { json?: boolean }) => {
305
245
  const installed = listInstalledPlugins();
306
246
 
307
247
  if (opts.json) {
@@ -817,18 +757,6 @@ function formatTimestamp(iso: string | null): string {
817
757
  return new Date(ms).toISOString().slice(0, 19);
818
758
  }
819
759
 
820
- /**
821
- * Build a human-readable status string for a plugin in the `--all` listing.
822
- * Combines disabled state with any structural issues.
823
- */
824
- function formatAllPluginStatus(p: AllPluginInfo): string {
825
- const parts: string[] = [];
826
- if (p.disabled) parts.push("disabled");
827
- if (p.issues.length > 0) parts.push(p.issues.join("; "));
828
- if (parts.length === 0) parts.push("enabled");
829
- return parts.join(", ");
830
- }
831
-
832
760
  /** Human-readable status line for an inspection result. The from/to revisions
833
761
  * now live in the installed/remote blocks, so the status itself is just words. */
834
762
  function statusLine(status: PluginInspection["status"]): string {