@vellumai/assistant 0.12.1-dev.202609141913.5e16607 → 0.12.1-staging.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (439) hide show
  1. package/AGENTS.md +0 -4
  2. package/ARCHITECTURE.md +12 -11
  3. package/docs/architecture/turn-actor.md +8 -15
  4. package/docs/guardian-request-flow.md +0 -16
  5. package/openapi.yaml +49 -291
  6. package/package.json +1 -1
  7. package/src/__tests__/always-loaded-tools-guard.test.ts +10 -18
  8. package/src/__tests__/app-compiler.test.ts +0 -6
  9. package/src/__tests__/app-control-tool-schemas.test.ts +2 -5
  10. package/src/__tests__/app-dir-path-guard.test.ts +3 -1
  11. package/src/__tests__/app-source-watcher.test.ts +218 -0
  12. package/src/{calls/__tests__ → __tests__}/call-controller.test.ts +82 -503
  13. package/src/__tests__/computer-use-skill-proxy-bridge.test.ts +2 -5
  14. package/src/__tests__/computer-use-tools.test.ts +5 -17
  15. package/src/__tests__/config-schema-cmd.test.ts +2 -2
  16. package/src/__tests__/config-schema.test.ts +29 -28
  17. package/src/__tests__/config-watcher-skill-reseed.test.ts +359 -0
  18. package/src/__tests__/config-watcher.test.ts +8 -23
  19. package/src/__tests__/connection-model-compat.test.ts +2 -2
  20. package/src/__tests__/conversation-key-store-disk-view.test.ts +1 -1
  21. package/src/__tests__/conversation-pairing.test.ts +0 -26
  22. package/src/__tests__/conversation-process-app-control-preactivation.test.ts +10 -4
  23. package/src/__tests__/conversation-queue.test.ts +207 -48
  24. package/src/__tests__/conversation-retry-discard.test.ts +1 -54
  25. package/src/__tests__/conversation-skill-tools.test.ts +0 -27
  26. package/src/__tests__/conversation-surfaces-app-control.test.ts +3 -8
  27. package/src/__tests__/conversation-surfaces-task-progress.test.ts +0 -67
  28. package/src/__tests__/conversation-title-service.test.ts +10 -14
  29. package/src/__tests__/conversation-tool-setup-app-refresh.test.ts +5 -3
  30. package/src/__tests__/conversation-tool-setup-attribution.test.ts +0 -51
  31. package/src/__tests__/credential-record-retire.test.ts +1 -171
  32. package/src/__tests__/credential-routes.test.ts +3 -212
  33. package/src/__tests__/credential-security-invariants.test.ts +2 -4
  34. package/src/__tests__/cu-unified-flow.test.ts +2 -8
  35. package/src/__tests__/document-sync-tags.test.ts +0 -25
  36. package/src/__tests__/drain-kick-guard.test.ts +2 -0
  37. package/src/__tests__/drain-requeue-on-contention.test.ts +6 -0
  38. package/src/__tests__/evict-conversations-for-reload.test.ts +1 -1
  39. package/src/__tests__/host-bash-proxy.test.ts +45 -26
  40. package/src/__tests__/host-browser-proxy.test.ts +17 -6
  41. package/src/__tests__/host-file-proxy-targeted.test.ts +0 -23
  42. package/src/__tests__/host-file-proxy.test.ts +23 -11
  43. package/src/__tests__/host-transfer-proxy-targeted.test.ts +9 -30
  44. package/src/__tests__/llm-catalog-parity.test.ts +0 -25
  45. package/src/__tests__/mcp-auth-routes.test.ts +9 -6
  46. package/src/__tests__/mcp-config-secret-boundary.test.ts +136 -78
  47. package/src/__tests__/mcp-health-check.test.ts +11 -8
  48. package/src/__tests__/mcp-list-plugin-servers.test.ts +10 -8
  49. package/src/{calls/__tests__ → __tests__}/media-stream-audio-transcode.test.ts +1 -1
  50. package/src/{calls/__tests__ → __tests__}/media-stream-output.test.ts +8 -37
  51. package/src/{calls/__tests__ → __tests__}/media-stream-parser.test.ts +1 -1
  52. package/src/{calls/__tests__ → __tests__}/media-stream-server-integration.test.ts +57 -150
  53. package/src/{calls/__tests__ → __tests__}/media-stream-stt-session.test.ts +5 -5
  54. package/src/{calls/__tests__ → __tests__}/media-turn-detector.test.ts +1 -1
  55. package/src/__tests__/messages-after-tiebreaker.test.ts +0 -91
  56. package/src/__tests__/messages-read-boundary-guard.test.ts +1 -1
  57. package/src/__tests__/messaging-send-tool.test.ts +548 -355
  58. package/src/__tests__/model-intents.test.ts +0 -3
  59. package/src/__tests__/notification-vellum-adapter.test.ts +2 -85
  60. package/src/__tests__/outlook-messaging-provider.test.ts +6 -6
  61. package/src/__tests__/platform-callback-registration.test.ts +16 -8
  62. package/src/__tests__/platform-client-verify-credential.test.ts +0 -2
  63. package/src/__tests__/plugin-import-boundary-guard.test.ts +0 -13
  64. package/src/__tests__/script-proxy-certs.test.ts +0 -35
  65. package/src/__tests__/skill-feature-flags-integration.test.ts +1 -1
  66. package/src/__tests__/skill-feature-flags.test.ts +2 -2
  67. package/src/__tests__/speaker-identification.test.ts +56 -0
  68. package/src/__tests__/subagent-tool-gate-mode.test.ts +3 -19
  69. package/src/__tests__/subagent-tools.test.ts +2 -3
  70. package/src/__tests__/telephony-tts-guard.test.ts +3 -38
  71. package/src/__tests__/vellum-self-knowledge-inline-command.test.ts +0 -4
  72. package/src/{calls/__tests__/voice-session-bridge-turn-flow.test.ts → __tests__/voice-session-bridge.test.ts} +12 -20
  73. package/src/__tests__/watch-retro-tool-availability.test.ts +17 -8
  74. package/src/__tests__/workspace-git-service.test.ts +0 -26
  75. package/src/acp/__tests__/agent-process.test.ts +4 -258
  76. package/src/acp/__tests__/auth-required.test.ts +0 -96
  77. package/src/acp/__tests__/client-handler.test.ts +2 -90
  78. package/src/acp/__tests__/session-manager-persistence.test.ts +1 -5
  79. package/src/acp/__tests__/session-manager-resume.test.ts +6 -270
  80. package/src/acp/__tests__/session-manager-usage.test.ts +2 -4
  81. package/src/acp/__tests__/session-manager.test.ts +4 -895
  82. package/src/acp/agent-process.test.ts +1 -4
  83. package/src/acp/agent-process.ts +9 -94
  84. package/src/acp/auth-required.ts +1 -50
  85. package/src/acp/auto-install.test.ts +7 -9
  86. package/src/acp/client-handler.ts +3 -16
  87. package/src/acp/resolve-agent.test.ts +6 -220
  88. package/src/acp/resolve-agent.ts +23 -88
  89. package/src/acp/session-manager.test.ts +3 -196
  90. package/src/acp/session-manager.ts +18 -441
  91. package/src/acp/types.ts +5 -50
  92. package/src/api/events/app-files-changed.ts +3 -4
  93. package/src/api/events/notification-intent.ts +0 -2
  94. package/src/api/index.ts +0 -6
  95. package/src/apps/app-store.ts +1 -1
  96. package/src/bundler/app-compiler.ts +0 -15
  97. package/src/calls/__tests__/voice-control-protocol.test.ts +25 -58
  98. package/src/calls/__tests__/voice-session-bridge.test.ts +1 -37
  99. package/src/calls/__tests__/voice-triage-escalate.test.ts +0 -105
  100. package/src/calls/call-constants.ts +4 -24
  101. package/src/calls/call-controller.ts +199 -499
  102. package/src/calls/call-transport.ts +0 -16
  103. package/src/calls/media-stream-output.ts +0 -32
  104. package/src/calls/media-stream-server.ts +30 -82
  105. package/src/calls/media-stream-stt-session.ts +0 -15
  106. package/src/calls/resolve-call-tts-provider.ts +2 -33
  107. package/src/calls/speaker-identification.ts +233 -0
  108. package/src/calls/tts-call-strategy.ts +5 -9
  109. package/src/calls/types.ts +0 -2
  110. package/src/calls/voice-control-protocol.ts +21 -53
  111. package/src/calls/voice-session-bridge.ts +46 -59
  112. package/src/calls/voice-triage-escalate.ts +56 -175
  113. package/src/cli/commands/apps.help.ts +13 -67
  114. package/src/cli/commands/apps.ts +0 -183
  115. package/src/cli/commands/bash.help.ts +13 -8
  116. package/src/cli/commands/bash.ts +25 -7
  117. package/src/cli/commands/channels/index.help.ts +2 -70
  118. package/src/cli/commands/channels/index.ts +3 -16
  119. package/src/cli/commands/credentials.help.ts +2 -6
  120. package/src/cli/commands/credentials.ts +2 -2
  121. package/src/cli/commands/mcp.help.ts +8 -8
  122. package/src/cli/commands/mcp.ts +1 -1
  123. package/src/cli/commands/roadmap.help.ts +1 -5
  124. package/src/cli/commands/roadmap.ts +1 -1
  125. package/src/cli/lib/bundled-marketplace.json +90 -103
  126. package/src/config/__tests__/default-profile-catalog.test.ts +0 -22
  127. package/src/config/__tests__/memory-retrospective-schema.test.ts +1 -15
  128. package/src/config/__tests__/platform-rehydration.test.ts +9 -99
  129. package/src/config/acp-defaults.test.ts +3 -13
  130. package/src/config/acp-defaults.ts +6 -23
  131. package/src/config/acp-schema.ts +2 -30
  132. package/src/config/bundled-skills/acp/SKILL.md +14 -22
  133. package/src/config/bundled-skills/acp/TOOLS.json +1 -5
  134. package/src/config/bundled-skills/app-builder/SKILL.md +9 -12
  135. package/src/config/bundled-skills/app-builder/references/CUSTOM_ROUTES.md +1 -1
  136. package/src/config/bundled-skills/messaging/SKILL.md +3 -3
  137. package/src/config/bundled-skills/messaging/TOOLS.json +3 -3
  138. package/src/config/bundled-skills/messaging/tools/messaging-send.ts +139 -67
  139. package/src/config/bundled-skills/phone-calls/references/TRANSCRIPTS.md +1 -1
  140. package/src/config/bundled-skills/schedule/SKILL.md +4 -3
  141. package/src/config/bundled-skills/screen-annotation/SKILL.md +1 -8
  142. package/src/config/bundled-skills/screen-annotation/tools/screen-annotation.test.ts +1 -4
  143. package/src/config/bundled-skills/skill-management/TOOLS.json +2 -2
  144. package/src/config/default-profile-catalog.ts +1 -1
  145. package/src/config/env.ts +2 -2
  146. package/src/config/feature-flag-registry.json +12 -24
  147. package/src/config/loader.ts +0 -1
  148. package/src/config/memory-v3-gate.test.ts +0 -31
  149. package/src/config/memory-v3-gate.ts +16 -20
  150. package/src/config/platform-rehydration.ts +27 -11
  151. package/src/config/schema.ts +2 -2
  152. package/src/config/schemas/__tests__/live-voice.test.ts +158 -8
  153. package/src/config/schemas/calls.ts +28 -1
  154. package/src/config/schemas/live-voice.ts +173 -1
  155. package/src/config/schemas/mcp.ts +1 -1
  156. package/src/config/schemas/memory-retrospective.ts +0 -10
  157. package/src/config/schemas/services.ts +0 -8
  158. package/src/config/schemas/skills.ts +14 -0
  159. package/src/credential-execution/process-manager.test.ts +19 -18
  160. package/src/daemon/__tests__/conversation-tool-setup.test.ts +121 -66
  161. package/src/daemon/__tests__/plugin-mcp-reconcile.test.ts +1 -4
  162. package/src/daemon/app-source-watcher.ts +218 -0
  163. package/src/daemon/config-watcher.ts +194 -13
  164. package/src/daemon/conversation-process.ts +64 -35
  165. package/src/daemon/conversation-skill-tools.ts +31 -13
  166. package/src/daemon/conversation-store.ts +1 -1
  167. package/src/daemon/conversation-surfaces.ts +8 -10
  168. package/src/daemon/conversation-tool-setup.ts +43 -37
  169. package/src/daemon/conversation.ts +3 -0
  170. package/src/daemon/host-bash-proxy.ts +12 -8
  171. package/src/daemon/host-browser-proxy.ts +1 -15
  172. package/src/daemon/host-file-proxy.ts +10 -8
  173. package/src/daemon/host-transfer-proxy.ts +18 -14
  174. package/src/daemon/lifecycle.ts +5 -0
  175. package/src/daemon/mcp-reload-service.ts +5 -5
  176. package/src/daemon/message-types/sync.ts +0 -1
  177. package/src/daemon/orphan-reaper.ts +1 -1
  178. package/src/daemon/providers-setup.ts +1 -1
  179. package/src/daemon/shutdown-handlers.ts +9 -1
  180. package/src/daemon/skill-memory-refresh.ts +0 -64
  181. package/src/daemon/tool-side-effects.ts +18 -7
  182. package/src/home/__tests__/feed-writer.test.ts +0 -22
  183. package/src/home/feed-writer.ts +2 -11
  184. package/src/hooks/types.ts +0 -33
  185. package/src/inbound/platform-callback-registration.ts +5 -4
  186. package/src/live-voice/__tests__/live-voice-metrics.test.ts +3 -0
  187. package/src/live-voice/__tests__/live-voice-progress.test.ts +15 -15
  188. package/src/live-voice/__tests__/live-voice-vad.test.ts +2 -2
  189. package/src/{calls → live-voice}/__tests__/progress-narration.test.ts +4 -4
  190. package/src/{calls → live-voice}/__tests__/progress-phrases.test.ts +1 -1
  191. package/src/live-voice/__tests__/runtime-websocket-shell.test.ts +69 -13
  192. package/src/live-voice/live-voice-session.ts +693 -213
  193. package/src/{calls → live-voice}/progress-narration.ts +2 -2
  194. package/src/live-voice/protocol.ts +2 -0
  195. package/src/mcp/__tests__/effective-config.test.ts +2 -2
  196. package/src/mcp/effective-config.ts +3 -3
  197. package/src/mcp/mcp-header-store.ts +45 -29
  198. package/src/mcp/startup.ts +4 -8
  199. package/src/messaging/provider.ts +3 -10
  200. package/src/messaging/providers/callback-routing.ts +0 -18
  201. package/src/messaging/providers/channel-transport.ts +0 -56
  202. package/src/messaging/providers/discord/transport.ts +0 -17
  203. package/src/messaging/providers/slack/__tests__/adapter-token-routing.test.ts +17 -6
  204. package/src/messaging/providers/slack/adapter.ts +44 -7
  205. package/src/messaging/providers/slack/transport.ts +0 -16
  206. package/src/messaging/providers/telegram-bot/adapter.ts +48 -1
  207. package/src/messaging/providers/telegram-bot/client.ts +26 -0
  208. package/src/messaging/providers/telegram-bot/transport.ts +0 -20
  209. package/src/messaging/providers/whatsapp/adapter.ts +48 -1
  210. package/src/messaging/providers/whatsapp/client.ts +29 -0
  211. package/src/messaging/providers/whatsapp/transport.ts +0 -18
  212. package/src/monitoring/__tests__/workspace-git-heartbeat.test.ts +0 -8
  213. package/src/notifications/__tests__/assistant-reply-producer.test.ts +0 -55
  214. package/src/notifications/__tests__/guardian-feed-projection.test.ts +2 -158
  215. package/src/notifications/__tests__/home-feed-side-effect.test.ts +3 -153
  216. package/src/notifications/__tests__/schedule-result-producer.test.ts +3 -99
  217. package/src/notifications/adapters/macos.ts +0 -3
  218. package/src/notifications/assistant-reply-producer.ts +3 -8
  219. package/src/notifications/conversation-pairing.ts +16 -36
  220. package/src/notifications/delivered-post-record.ts +1 -11
  221. package/src/notifications/guardian-feed-projection.ts +5 -125
  222. package/src/notifications/home-feed-side-effect.ts +7 -55
  223. package/src/notifications/schedule-result-producer.ts +22 -66
  224. package/src/oauth/__tests__/seed-providers-managed.test.ts +0 -54
  225. package/src/oauth/byo-connection.test.ts +0 -45
  226. package/src/oauth/byo-connection.ts +6 -36
  227. package/src/oauth/connection-resolver.test.ts +0 -73
  228. package/src/oauth/connection-resolver.ts +2 -95
  229. package/src/oauth/seed-providers.ts +0 -165
  230. package/src/outbound-proxy/certs.ts +5 -3
  231. package/src/permissions/checker.test.ts +6 -11
  232. package/src/persistence/compaction-log-store-clickhouse.ts +3 -3
  233. package/src/persistence/conversation-crud.ts +63 -71
  234. package/src/persistence/conversation-lineage.ts +4 -12
  235. package/src/persistence/conversation-title-service.ts +26 -9
  236. package/src/persistence/llm-request-log-sink-clickhouse.ts +3 -3
  237. package/src/persistence/llm-request-log-source-clickhouse.ts +3 -3
  238. package/src/persistence/message-reads.ts +0 -30
  239. package/src/persistence/migrations/157-invite-contact-id.ts +6 -18
  240. package/src/persistence/schema/memory-core.ts +0 -5
  241. package/src/platform/client.test.ts +2 -4
  242. package/src/platform/client.ts +10 -2
  243. package/src/plugin-api/constants.ts +0 -2
  244. package/src/plugin-api/index.ts +0 -1
  245. package/src/plugin-api/types.ts +0 -2
  246. package/src/plugins/defaults/index.ts +0 -2
  247. package/src/plugins/defaults/memory/__tests__/memory-retrospective-accounting.test.ts +0 -46
  248. package/src/plugins/defaults/memory/__tests__/memory-retrospective-enqueue.test.ts +5 -9
  249. package/src/plugins/defaults/memory/__tests__/memory-retrospective-job.test.ts +10 -20
  250. package/src/plugins/defaults/memory/__tests__/memory-retrospective-state.test.ts +0 -219
  251. package/src/plugins/defaults/memory/__tests__/memory-retrospective-sweep.test.ts +0 -31
  252. package/src/plugins/defaults/memory/__tests__/memory-retrospective-trigger-check.test.ts +0 -63
  253. package/src/plugins/defaults/memory/__tests__/shutdown-hook.test.ts +0 -4
  254. package/src/plugins/defaults/memory/graph/capability-seed.ts +6 -4
  255. package/src/plugins/defaults/memory/hooks/init.ts +0 -10
  256. package/src/plugins/defaults/memory/hooks/shutdown.ts +0 -2
  257. package/src/plugins/defaults/memory/jobs-worker.ts +0 -13
  258. package/src/plugins/defaults/memory/memory-retrospective-accounting.ts +60 -34
  259. package/src/plugins/defaults/memory/memory-retrospective-enqueue.ts +5 -3
  260. package/src/plugins/defaults/memory/memory-retrospective-job.ts +3 -12
  261. package/src/plugins/defaults/memory/memory-retrospective-state.ts +71 -312
  262. package/src/plugins/defaults/memory/memory-retrospective-sweep.ts +1 -2
  263. package/src/plugins/defaults/memory/memory-retrospective-trigger-check.ts +3 -5
  264. package/src/plugins/defaults/memory/startup.ts +1 -6
  265. package/src/plugins/defaults/memory/substrate/__tests__/skill-content.test.ts +9 -7
  266. package/src/plugins/defaults/memory/substrate/skill-content.ts +2 -2
  267. package/src/plugins/defaults/memory/v3/__tests__/pool-select.test.ts +0 -89
  268. package/src/plugins/defaults/memory/worker.ts +0 -6
  269. package/src/plugins/mcp-servers.ts +75 -15
  270. package/src/providers/__tests__/connection-model-compat.test.ts +3 -3
  271. package/src/providers/gemini/client.ts +23 -9
  272. package/src/providers/inference/auth.ts +3 -2
  273. package/src/providers/inference/connection-availability.ts +8 -27
  274. package/src/providers/inference/resolve-auth.ts +4 -22
  275. package/src/providers/model-catalog.ts +0 -34
  276. package/src/providers/model-intents.ts +5 -10
  277. package/src/providers/openai/__tests__/chat-completions-provider-reasoning.test.ts +18 -146
  278. package/src/providers/openai/__tests__/tool-choice-mapping.test.ts +1 -83
  279. package/src/providers/openai/chat-completions-provider.ts +78 -192
  280. package/src/providers/openai/codex-models.ts +4 -0
  281. package/src/runtime/AGENTS.md +0 -2
  282. package/src/runtime/auth/same-actor.ts +3 -38
  283. package/src/runtime/http-server.ts +151 -160
  284. package/src/runtime/routes/__tests__/acp-routes.test.ts +4 -159
  285. package/src/runtime/routes/__tests__/conversation-query-routes.test.ts +1 -108
  286. package/src/runtime/routes/__tests__/default-provider-routes.test.ts +2 -2
  287. package/src/runtime/routes/__tests__/mcp-add-default-risk.test.ts +12 -16
  288. package/src/runtime/routes/acp-routes.test.ts +0 -15
  289. package/src/runtime/routes/acp-routes.ts +9 -72
  290. package/src/runtime/routes/app-management-routes.ts +0 -73
  291. package/src/runtime/routes/app-routes.ts +1 -1
  292. package/src/runtime/routes/conversation-list-routes.ts +3 -14
  293. package/src/runtime/routes/conversation-query-routes.ts +0 -40
  294. package/src/runtime/routes/credential-routes.ts +10 -19
  295. package/src/runtime/routes/debug-bash-routes.ts +173 -0
  296. package/src/runtime/routes/diagnostics-routes.ts +3 -55
  297. package/src/runtime/routes/index.ts +2 -4
  298. package/src/runtime/routes/log-export-routes.ts +0 -2
  299. package/src/runtime/routes/mcp-auth-routes.ts +47 -39
  300. package/src/runtime/routes/migration-routes.ts +20 -6
  301. package/src/runtime/routes/platform-routes.ts +15 -18
  302. package/src/runtime/services/__tests__/conversation-serializer.test.ts +0 -28
  303. package/src/runtime/services/conversation-serializer.ts +3 -16
  304. package/src/runtime/sync/resource-sync-events.ts +1 -2
  305. package/src/schedule/worker.ts +1 -1
  306. package/src/security/ces-rpc-record-backend.ts +0 -7
  307. package/src/subagent/consult-context.ts +25 -12
  308. package/src/tools/acp/list-agents.test.ts +1 -3
  309. package/src/tools/acp/spawn.test.ts +11 -146
  310. package/src/tools/acp/spawn.ts +3 -21
  311. package/src/tools/acp/status.ts +3 -40
  312. package/src/tools/app-control/skill-proxy-bridge.ts +1 -2
  313. package/src/tools/capability-offer.test.ts +2 -22
  314. package/src/tools/capability-offer.ts +1 -16
  315. package/src/tools/computer-use/definitions.ts +2 -4
  316. package/src/tools/computer-use/skill-proxy-bridge.ts +1 -2
  317. package/src/tools/credentials/metadata-store.ts +0 -100
  318. package/src/tools/host-filesystem/edit.test.ts +1 -2
  319. package/src/tools/host-filesystem/edit.ts +2 -2
  320. package/src/tools/host-filesystem/read.test.ts +1 -2
  321. package/src/tools/host-filesystem/read.ts +2 -2
  322. package/src/tools/host-filesystem/transfer.test.ts +1 -2
  323. package/src/tools/host-filesystem/transfer.ts +2 -2
  324. package/src/tools/host-filesystem/write.test.ts +1 -2
  325. package/src/tools/host-filesystem/write.ts +2 -2
  326. package/src/tools/host-terminal/host-shell.test.ts +0 -16
  327. package/src/tools/host-terminal/host-shell.ts +20 -4
  328. package/src/tools/policy-context.ts +7 -6
  329. package/src/tools/subagent/spawn.ts +8 -5
  330. package/src/tools/watch/watch-retro-report.ts +8 -0
  331. package/src/util/__tests__/language-subtag.test.ts +1 -23
  332. package/src/util/fs-watcher-error.ts +36 -0
  333. package/src/util/language-subtag.ts +0 -16
  334. package/src/util/platform.ts +0 -8
  335. package/src/workspace/git-service.ts +54 -5
  336. package/src/workspace/migrations/registry.ts +0 -6
  337. package/scripts/smoke-desktop-window-theme.ts +0 -186
  338. package/src/__tests__/git-porcelain.test.ts +0 -47
  339. package/src/__tests__/helpers/set-workspace-mcp.ts +0 -11
  340. package/src/__tests__/message-deleted-hook-dispatch.test.ts +0 -119
  341. package/src/__tests__/resolve-app.test.ts +0 -135
  342. package/src/__tests__/service-account-token.test.ts +0 -247
  343. package/src/__tests__/source-fingerprint.test.ts +0 -184
  344. package/src/__tests__/workspace-migration-154-repair-retired-codex-gpt-5-4-model-ids.test.ts +0 -336
  345. package/src/acp/__tests__/helpers/acp-model-option.ts +0 -51
  346. package/src/acp/model-config.test.ts +0 -166
  347. package/src/acp/model-config.ts +0 -138
  348. package/src/api/events/acp-session-model-update.test.ts +0 -88
  349. package/src/api/events/acp-session-model-update.ts +0 -46
  350. package/src/apps/resolve-app.ts +0 -81
  351. package/src/apps/source-fingerprint.ts +0 -266
  352. package/src/calls/__tests__/barge-in-guard.test.ts +0 -81
  353. package/src/calls/__tests__/voice-leg-coordinator.test.ts +0 -229
  354. package/src/calls/__tests__/voice-progress-cadence.test.ts +0 -274
  355. package/src/calls/barge-in-guard.ts +0 -118
  356. package/src/calls/voice-leg-coordinator.ts +0 -189
  357. package/src/calls/voice-progress-cadence.ts +0 -423
  358. package/src/cli/commands/__tests__/apps.test.ts +0 -245
  359. package/src/cli/commands/__tests__/bash.test.ts +0 -53
  360. package/src/cli/commands/__tests__/roadmap.help.test.ts +0 -19
  361. package/src/cli/commands/channels/__tests__/send.test.ts +0 -218
  362. package/src/cli/commands/channels/send.ts +0 -128
  363. package/src/config/__tests__/platform-identity.test.ts +0 -255
  364. package/src/config/acp-agent-write.ts +0 -43
  365. package/src/config/acp-schema.test.ts +0 -81
  366. package/src/config/platform-identity.ts +0 -201
  367. package/src/config/schemas/__tests__/voice.test.ts +0 -148
  368. package/src/config/schemas/voice.ts +0 -150
  369. package/src/daemon/__tests__/skill-memory-refresh-mtime.test.ts +0 -133
  370. package/src/daemon/app-change-notify.ts +0 -45
  371. package/src/desktop/__tests__/fake-desktop.ts +0 -119
  372. package/src/desktop/desktop-chrome-policy.test.ts +0 -71
  373. package/src/desktop/desktop-chrome-policy.ts +0 -42
  374. package/src/desktop/desktop-dependencies.test.ts +0 -102
  375. package/src/desktop/desktop-dependencies.ts +0 -306
  376. package/src/desktop/desktop-feature.test.ts +0 -18
  377. package/src/desktop/desktop-feature.ts +0 -19
  378. package/src/desktop/desktop-panel-config.test.ts +0 -135
  379. package/src/desktop/desktop-panel-config.ts +0 -149
  380. package/src/desktop/desktop-session-manager.test.ts +0 -627
  381. package/src/desktop/desktop-session-manager.ts +0 -814
  382. package/src/desktop/desktop-stream-bridge.test.ts +0 -395
  383. package/src/desktop/desktop-stream-bridge.ts +0 -214
  384. package/src/desktop/desktop-wallpaper.test.ts +0 -191
  385. package/src/desktop/desktop-wallpaper.ts +0 -113
  386. package/src/desktop/desktop-window-theme.ts +0 -170
  387. package/src/i18n/AGENTS.md +0 -22
  388. package/src/i18n/__tests__/i18n.test.ts +0 -108
  389. package/src/i18n/index.ts +0 -16
  390. package/src/i18n/locales.ts +0 -93
  391. package/src/i18n/messages.ts +0 -61
  392. package/src/i18n/title.ts +0 -25
  393. package/src/mcp/__tests__/workspace-mcp-config.test.ts +0 -135
  394. package/src/mcp/spec-schema.ts +0 -111
  395. package/src/mcp/workspace-mcp-config.ts +0 -188
  396. package/src/messaging/providers/__tests__/proactive-address.test.ts +0 -95
  397. package/src/persistence/conversation-title-placeholders.ts +0 -23
  398. package/src/persistence/message-cursor.ts +0 -78
  399. package/src/persistence/migrations/__tests__/157-invite-contact-id.test.ts +0 -149
  400. package/src/plugins/defaults/memory/__tests__/memory-retrospective-cursor-backfill.test.ts +0 -118
  401. package/src/plugins/defaults/memory/__tests__/memory-retrospective-cursor-preserve.test.ts +0 -83
  402. package/src/plugins/defaults/memory/hooks/message-deleted.ts +0 -21
  403. package/src/plugins/defaults/memory/memory-retrospective-cursor-backfill.ts +0 -126
  404. package/src/plugins/defaults/memory/memory-retrospective-cursor-preserve.ts +0 -79
  405. package/src/plugins/defaults/memory/memory-retrospective-cursor.ts +0 -28
  406. package/src/plugins/defaults/memory/skill-md-mtime-poll.ts +0 -9
  407. package/src/providers/gemini-thought-signature.test.ts +0 -63
  408. package/src/providers/gemini-thought-signature.ts +0 -44
  409. package/src/providers/inference/service-account-token.ts +0 -248
  410. package/src/providers/openai/__tests__/chat-completions-provider-thought-signature.test.ts +0 -613
  411. package/src/providers/openai/__tests__/google-thought-signature.test.ts +0 -235
  412. package/src/providers/openai/google-thought-signature.ts +0 -320
  413. package/src/runtime/__tests__/channel-send.test.ts +0 -443
  414. package/src/runtime/__tests__/desktop-stream-upgrade.test.ts +0 -89
  415. package/src/runtime/__tests__/live-voice-upgrade.test.ts +0 -58
  416. package/src/runtime/__tests__/runtime-ws-test-utils.ts +0 -72
  417. package/src/runtime/__tests__/watch-stream-upgrade.test.ts +0 -59
  418. package/src/runtime/channel-send.ts +0 -316
  419. package/src/runtime/routes/__tests__/apps-refresh-route.test.ts +0 -205
  420. package/src/runtime/routes/__tests__/channel-send-routes.test.ts +0 -127
  421. package/src/runtime/routes/__tests__/dictation-cleanup-guard.test.ts +0 -107
  422. package/src/runtime/routes/channel-send-routes.ts +0 -85
  423. package/src/runtime/routes/desktop-setup-routes.test.ts +0 -74
  424. package/src/runtime/routes/desktop-setup-routes.ts +0 -35
  425. package/src/security/__tests__/ces-http-record-backend.test.ts +0 -137
  426. package/src/security/ces-http-record-backend.ts +0 -120
  427. package/src/skills/__tests__/workspace-skill-md-signature.test.ts +0 -60
  428. package/src/skills/workspace-skill-md-signature.ts +0 -50
  429. package/src/tools/acp/status.test.ts +0 -94
  430. package/src/tools/terminal/__tests__/sanitized-bash.test.ts +0 -57
  431. package/src/tools/terminal/sanitized-bash.ts +0 -105
  432. package/src/util/ca-bundle.ts +0 -13
  433. package/src/workspace/git-porcelain.ts +0 -66
  434. package/src/workspace/migrations/154-repair-retired-codex-gpt-5-4-model-ids.ts +0 -258
  435. package/src/workspace/migrations/155-move-front-model-config-to-voice.ts +0 -78
  436. package/src/workspace/migrations/156-extract-workspace-mcp-json.ts +0 -214
  437. package/src/workspace/migrations/__tests__/155-move-front-model-config-to-voice.test.ts +0 -102
  438. package/src/workspace/migrations/__tests__/156-extract-workspace-mcp-json.test.ts +0 -199
  439. /package/src/{calls → live-voice}/progress-phrases.ts +0 -0
@@ -4,30 +4,25 @@ import type { CliCommandHelp } from "../lib/cli-command-help.js";
4
4
 
5
5
  export const appsHelp: CliCommandHelp = {
6
6
  name: "apps",
7
- description: "List, inspect, and compile apps",
7
+ description: "Inspect apps and their on-disk source",
8
8
  helpText: `
9
9
  Apps are mini-applications the assistant can surface. Each has a name and a
10
10
  source directory holding its HTML/TSX definition, pages, and records.
11
11
 
12
12
  Apps come from two places, distinguished by their source path:
13
- workspace User-created apps under the workspace apps directory.
13
+ workspace User-created apps under the workspace apps directory
14
+ (~/.vellum/apps/<slug>/).
14
15
  plugin Apps bundled by an installed plugin, each a directory under
15
- the plugin's apps/ folder. Stray directories without a plugin
16
- package.json, and disabled plugins, contribute nothing.
16
+ ~/.vellum/plugins/<name>/apps/<app>/. Stray directories without
17
+ a plugin package.json, and disabled plugins, contribute nothing.
17
18
 
18
- Create and delete workspace apps through the app-builder skill and its tools
19
- (app_create, app_delete). This command lists apps, inspects whether source
20
- has changed since the last compile, and compiles an app once you are done
21
- editing. File edits do not compile on their own.
22
-
23
- list and inspect read the workspace directly (the assistant does not need to
24
- be running). refresh compiles inside the running assistant so open surfaces
25
- pick up the new build, including plugin apps with local source changes.
19
+ This surface is read-only. Workspace apps are created, edited, and deleted
20
+ through the app-builder skill and its tools (app-create, app-update,
21
+ app-delete); plugin apps are owned by their plugin.
26
22
 
27
23
  Examples:
28
24
  $ assistant apps list
29
- $ assistant apps inspect Budget
30
- $ assistant apps refresh Budget`,
25
+ $ assistant apps list --json`,
31
26
  subcommands: [
32
27
  {
33
28
  name: "list",
@@ -36,10 +31,10 @@ Examples:
36
31
  { flags: "--json", description: "Machine-readable JSON output" },
37
32
  ],
38
33
  helpText: `
39
- Lists every app with its name and the absolute path to its source directory.
40
- The path itself shows whether the app is a workspace app or bundled by a
41
- plugin. Workspace apps are listed first, then plugin-bundled apps; both are
42
- sorted by name.
34
+ Lists every app with its name and the absolute path to its source directory —
35
+ the path itself shows whether the app is a workspace app or bundled by a plugin
36
+ (~/.vellum/plugins/<name>/apps/...). Workspace apps are listed first, then
37
+ plugin-bundled apps; both are sorted by name.
43
38
 
44
39
  Pass --json for machine-readable output.
45
40
 
@@ -47,54 +42,5 @@ Examples:
47
42
  $ assistant apps list
48
43
  $ assistant apps list --json`,
49
44
  },
50
- {
51
- name: "inspect",
52
- args: "<app_name>",
53
- description:
54
- "Show whether an app's source has changed since the last compile",
55
- options: [
56
- { flags: "--json", description: "Machine-readable JSON output" },
57
- ],
58
- helpText: `
59
- Arguments:
60
- app_name App display name, directory slug, or id. Run 'assistant apps list'
61
- to see available apps.
62
-
63
- Compares the on-disk source against the fingerprint recorded in dist/ at the
64
- last successful compile. Reports clean (no changes), stale (source drifted),
65
- never compiled, or unknown baseline (compiled before fingerprints existed).
66
-
67
- Does not compile. Use 'assistant apps refresh <app_name>' after inspect when
68
- source has changed.
69
-
70
- Examples:
71
- $ assistant apps inspect Budget
72
- $ assistant apps inspect Budget --json`,
73
- },
74
- {
75
- name: "refresh",
76
- args: "<app_name>",
77
- description:
78
- "Compile an app and refresh open surfaces. Requires a running assistant",
79
- options: [
80
- { flags: "--json", description: "Machine-readable JSON output" },
81
- ],
82
- helpText: `
83
- Arguments:
84
- app_name App display name, directory slug, or id. Run 'assistant apps list'
85
- to see available apps.
86
-
87
- Compiles src/ into dist/ inside the running assistant, then refreshes any
88
- open surfaces and published deployments. Call this once after a batch of
89
- edits, not after every file write. Workspace and plugin apps are both
90
- accepted so local plugin source changes can be compiled without waiting
91
- for the plugin watcher.
92
-
93
- The assistant must be running.
94
-
95
- Examples:
96
- $ assistant apps refresh Budget
97
- $ assistant apps refresh Budget --json`,
98
- },
99
45
  ],
100
46
  };
@@ -1,13 +1,8 @@
1
1
  import type { Command } from "commander";
2
2
 
3
- import {
4
- cliIpcCall,
5
- exitCodeFromIpcResult,
6
- } from "../../ipc/cli-client.js";
7
3
  import { applyCommandHelp, subcommand } from "../lib/cli-command-help.js";
8
4
  import { registerCommand } from "../lib/register-command.js";
9
5
  import { log } from "../logger.js";
10
- import { shouldOutputJson, writeError, writeOutput } from "../output.js";
11
6
  import { appsHelp } from "./apps.help.js";
12
7
 
13
8
  interface AppListEntry {
@@ -15,36 +10,6 @@ interface AppListEntry {
15
10
  source: string;
16
11
  }
17
12
 
18
- interface AppsRefreshResponse {
19
- ok: true;
20
- appId: string;
21
- name: string;
22
- compiled: boolean;
23
- compile_duration_ms: number;
24
- compile_errors?: Array<{
25
- text: string;
26
- location?: { file: string; line: number; column: number };
27
- }>;
28
- compile_warnings?: Array<{
29
- text: string;
30
- location?: { file: string; line: number; column: number };
31
- }>;
32
- }
33
-
34
- function refreshHint(appId: string): string {
35
- return `Run 'assistant apps refresh ${appId}' to compile.`;
36
- }
37
-
38
- function formatDiagnostic(diag: {
39
- text: string;
40
- location?: { file: string; line: number; column: number };
41
- }): string {
42
- if (!diag.location) {
43
- return diag.text;
44
- }
45
- return `${diag.location.file}:${diag.location.line}: ${diag.text}`;
46
- }
47
-
48
13
  export function registerAppsCommand(program: Command): void {
49
14
  registerCommand(program, {
50
15
  name: appsHelp.name,
@@ -81,154 +46,6 @@ export function registerAppsCommand(program: Command): void {
81
46
  log.info(` ${e.name.padEnd(nameWidth)} ${e.source}`);
82
47
  }
83
48
  });
84
-
85
- subcommand(apps, "inspect").action(
86
- async (appName: string, opts: { json?: boolean }, cmd: Command) => {
87
- const { resolveAppQuery, appNotFoundMessage, appAmbiguousMessage } =
88
- await import("../../apps/resolve-app.js");
89
- const { inspectAppSource } = await import(
90
- "../../apps/source-fingerprint.js"
91
- );
92
-
93
- const resolved = resolveAppQuery(appName);
94
- if (!resolved.ok) {
95
- const message =
96
- resolved.reason === "ambiguous"
97
- ? appAmbiguousMessage(resolved.query, resolved.matches)
98
- : appNotFoundMessage(resolved.query);
99
- writeError(cmd, message);
100
- process.exitCode = 1;
101
- return;
102
- }
103
-
104
- const { app } = resolved;
105
- const inspect = inspectAppSource(app.sourcePath);
106
- const origin =
107
- app.origin.kind === "plugin"
108
- ? { kind: "plugin" as const, plugin: app.origin.pluginName }
109
- : { kind: "workspace" as const };
110
-
111
- if (opts.json || shouldOutputJson(cmd)) {
112
- writeOutput(cmd, {
113
- ok: true,
114
- app: {
115
- id: app.id,
116
- name: app.name,
117
- source: app.sourcePath,
118
- origin,
119
- },
120
- compile: inspect,
121
- });
122
- return;
123
- }
124
-
125
- const originLabel =
126
- origin.kind === "plugin"
127
- ? `plugin ${origin.plugin}`
128
- : "workspace";
129
- log.info(`App: ${app.name} (${originLabel})`);
130
- log.info(`Id: ${app.id}`);
131
- log.info(`Source: ${app.sourcePath}`);
132
-
133
- if (inspect.status === "clean") {
134
- const when = inspect.compiledAt
135
- ? ` (compiled ${inspect.compiledAt})`
136
- : "";
137
- log.info(`Compile: up to date${when}`);
138
- return;
139
- }
140
- if (inspect.status === "never_compiled") {
141
- log.info("Compile: never compiled");
142
- log.info(refreshHint(app.id));
143
- return;
144
- }
145
- if (inspect.status === "unknown_baseline") {
146
- log.info(
147
- "Compile: compiled, but no source fingerprint is recorded.",
148
- );
149
- log.info(
150
- `Run 'assistant apps refresh ${app.id}' to record one and rebuild.`,
151
- );
152
- return;
153
- }
154
-
155
- const when = inspect.compiledAt
156
- ? ` (last compiled ${inspect.compiledAt})`
157
- : "";
158
- log.info(`Compile: source changed since last compile${when}`);
159
- if (inspect.modified.length > 0) {
160
- log.info("Modified:");
161
- for (const path of inspect.modified) {
162
- log.info(` ${path}`);
163
- }
164
- }
165
- if (inspect.added.length > 0) {
166
- log.info("Added:");
167
- for (const path of inspect.added) {
168
- log.info(` ${path}`);
169
- }
170
- }
171
- if (inspect.removed.length > 0) {
172
- log.info("Removed:");
173
- for (const path of inspect.removed) {
174
- log.info(` ${path}`);
175
- }
176
- }
177
- log.info(refreshHint(app.id));
178
- },
179
- );
180
-
181
- subcommand(apps, "refresh").action(
182
- async (appName: string, opts: { json?: boolean }, cmd: Command) => {
183
- const { resolveAppQuery, appNotFoundMessage, appAmbiguousMessage } =
184
- await import("../../apps/resolve-app.js");
185
-
186
- const resolved = resolveAppQuery(appName);
187
- if (!resolved.ok) {
188
- const message =
189
- resolved.reason === "ambiguous"
190
- ? appAmbiguousMessage(resolved.query, resolved.matches)
191
- : appNotFoundMessage(resolved.query);
192
- writeError(cmd, message);
193
- process.exitCode = 1;
194
- return;
195
- }
196
-
197
- const result = await cliIpcCall<AppsRefreshResponse>("apps_refresh", {
198
- pathParams: { id: resolved.app.id },
199
- });
200
-
201
- if (!result.ok || !result.result) {
202
- writeError(cmd, result.error ?? "Refresh failed");
203
- process.exitCode = exitCodeFromIpcResult(result);
204
- return;
205
- }
206
-
207
- const payload = result.result;
208
- if (opts.json || shouldOutputJson(cmd)) {
209
- writeOutput(cmd, payload);
210
- if (!payload.compiled) {
211
- process.exitCode = 1;
212
- }
213
- return;
214
- }
215
-
216
- if (!payload.compiled) {
217
- log.error(
218
- `Compile failed for "${payload.name}" (${payload.compile_duration_ms}ms).`,
219
- );
220
- for (const diag of payload.compile_errors ?? []) {
221
- log.error(` ${formatDiagnostic(diag)}`);
222
- }
223
- process.exitCode = 1;
224
- return;
225
- }
226
-
227
- log.info(
228
- `Compiled "${payload.name}" in ${payload.compile_duration_ms}ms.`,
229
- );
230
- },
231
- );
232
49
  },
233
50
  });
234
51
  }
@@ -6,7 +6,7 @@ export const bashHelp: CliCommandHelp = {
6
6
  name: "bash",
7
7
  args: "<command>",
8
8
  description:
9
- "Execute a shell command with the same sanitized environment as the bash tool",
9
+ "Execute a shell command through the assistant process for debugging",
10
10
  options: [
11
11
  {
12
12
  flags: "-t, --timeout <ms>",
@@ -15,19 +15,24 @@ export const bashHelp: CliCommandHelp = {
15
15
  },
16
16
  ],
17
17
  helpText: `
18
- Spawns the command with the same sanitized environment, working directory,
19
- and platform shell the bash tool uses for tool-call subprocesses. Vault
20
- bearers such as CES_SERVICE_TOKEN are stripped; CES_LOCAL_SOCKET and workspace
21
- paths are forwarded. The command does not go through the assistant HTTP or IPC
22
- API, and does not require a running assistant process.
18
+ Sends a shell command to the running assistant for execution via the IPC
19
+ socket. The assistant spawns the command in its own process environment and
20
+ returns stdout, stderr, and the exit code.
21
+
22
+ This is a developer debugging tool for inspecting how the assistant invokes and
23
+ observes shell commands. The command runs with the assistant's environment, working
24
+ directory, and process context — not the caller's shell.
25
+
26
+ Requires the assistant to be running with VELLUM_DEBUG=1. When debug mode is off
27
+ (the default), the assistant returns an error immediately.
23
28
 
24
29
  Arguments:
25
30
  command The shell command string to execute (e.g. "echo hello", "ls -la").
26
- Runs via the same platform shell invocation the bash tool uses.
31
+ Runs in bash via \`bash -c\` in the assistant's process environment.
27
32
 
28
33
  Examples:
29
34
  $ assistant bash "echo hello"
30
35
  $ assistant bash "which node"
31
36
  $ assistant bash "env | grep PATH" --timeout 10000
32
- $ assistant bash "assistant oauth request --provider outlook --json https://graph.microsoft.com/v1.0/me"`,
37
+ $ assistant bash "ls -la"`,
33
38
  };
@@ -1,19 +1,28 @@
1
1
  /**
2
- * `assistant bash` runs a shell command with the same sanitized environment
3
- * the bash tool forwards to tool-call subprocesses.
2
+ * `assistant bash` — run a shell command in the assistant's process
3
+ * environment (debug tool, requires VELLUM_DEBUG=1 on the daemon).
4
4
  */
5
5
 
6
6
  import type { Command } from "commander";
7
7
 
8
+ import { cliIpcCall } from "../../ipc/cli-client.js";
8
9
  import { applyCommandHelp, commandSpec } from "../lib/cli-command-help.js";
9
10
  import { registerCommand } from "../lib/register-command.js";
10
11
  import { log } from "../logger.js";
11
12
  import { bashHelp } from "./bash.help.js";
12
13
 
14
+ interface DebugBashResult {
15
+ stdout: string;
16
+ stderr: string;
17
+ exitCode: number | null;
18
+ timedOut: boolean;
19
+ error?: string;
20
+ }
21
+
13
22
  export function registerBashCommand(program: Command): void {
14
23
  registerCommand(program, {
15
24
  name: commandSpec(bashHelp),
16
- transport: "local",
25
+ transport: "ipc",
17
26
  description: bashHelp.description,
18
27
  build: (cmd) => {
19
28
  applyCommandHelp(cmd, bashHelp);
@@ -25,10 +34,19 @@ export function registerBashCommand(program: Command): void {
25
34
  return;
26
35
  }
27
36
 
28
- const { runSanitizedBash } = await import(
29
- "../../tools/terminal/sanitized-bash.js"
37
+ const result = await cliIpcCall<DebugBashResult>(
38
+ "debug_bash",
39
+ { body: { command, timeoutMs } },
40
+ { timeoutMs: timeoutMs + 10_000 },
30
41
  );
31
- const data = await runSanitizedBash(command, timeoutMs);
42
+
43
+ if (!result.ok) {
44
+ log.error(result.error ?? "Failed to reach the assistant.");
45
+ process.exitCode = 1;
46
+ return;
47
+ }
48
+
49
+ const data = result.result!;
32
50
 
33
51
  if (data.error) {
34
52
  log.error(data.error);
@@ -51,7 +69,7 @@ export function registerBashCommand(program: Command): void {
51
69
  }
52
70
 
53
71
  if (data.timedOut) {
54
- log.info("Command timed out.");
72
+ log.info(`Command timed out in assistant.`);
55
73
  }
56
74
 
57
75
  if (data.exitCode != null && data.exitCode !== 0) {
@@ -36,14 +36,9 @@ assistant's own bot on that channel (${BOT_CHANNELS}), resolving the bot
36
36
  credential from the channel id so no token is handled. Acting as a person
37
37
  through their OAuth integration is 'assistant oauth request'.
38
38
 
39
- To say something in a chat, use 'send' rather than 'request': it goes
40
- through the channel's transport, so the post is threaded and rendered like
41
- every other message the assistant sends there, and it is recorded.
42
-
43
39
  Examples:
44
40
  $ assistant channels list
45
41
  $ assistant channels get slack
46
- $ assistant channels send slack C0123456789 --text 'deploy is green'
47
42
  $ assistant channels request slack /auth.test --json
48
43
  $ assistant channels request slack -X POST \\
49
44
  -d '{"channel":"D0123456789","limit":20}' /conversations.history --json`,
@@ -70,9 +65,8 @@ This command can do anything the bot's API allows, including sending,
70
65
  editing, deleting, uploading, and reacting, so it is classified high risk
71
66
  and asks for approval like any action with irreversible effects. Reads are
72
67
  not distinguished from writes: the effect is the endpoint's. To send a
73
- message, use 'assistant channels send', which posts through the channel's
74
- transport and records what it sent; a message posted through this command
75
- reaches the platform directly and leaves no record of what was said.
68
+ message, use the messaging tool, which records what it sent; do not post
69
+ through this command.
76
70
 
77
71
  Arguments:
78
72
  <channel> One of: ${BOT_CHANNELS}. A channel with no bot credential of
@@ -92,68 +86,6 @@ Examples:
92
86
  $ assistant channels request slack -X POST \\
93
87
  -d '{"channel":"D0123456789","limit":100}' /conversations.history --json
94
88
  $ assistant channels request discord /users/@me --json`,
95
- },
96
- {
97
- name: "send",
98
- description:
99
- "Post text to a chat on the channel, as the assistant's bot, recorded",
100
- arguments: [
101
- {
102
- name: "<channel>",
103
- description: `Channel to post on. One with a transport that can be addressed from a named chat; anything else is refused before the send.`,
104
- },
105
- {
106
- name: "<chat-id>",
107
- description:
108
- "The chat in the channel's own id space (a Slack channel or DM id, a Telegram chat id, a Discord channel id, a WhatsApp number).",
109
- },
110
- ],
111
- options: [
112
- {
113
- flags: "--text <text>",
114
- description: "The message text. Required.",
115
- },
116
- {
117
- flags: "--thread <id>",
118
- description:
119
- "Post inside this thread or topic, in the channel's own id space. Omit to post to the chat itself.",
120
- },
121
- {
122
- flags: "--plain",
123
- description:
124
- "Send the text verbatim instead of the channel's rich rendering.",
125
- },
126
- {
127
- flags: "--json",
128
- description: "Machine-readable compact JSON output",
129
- },
130
- ],
131
- helpText: `
132
- Posts one message through the channel's own transport, the same path a
133
- reply takes. Once the channel acknowledges it, the daemon records it in
134
- the chat's conversation, which is what lets the assistant see later what
135
- it said here and lets a reaction or an edit naming that post resolve back
136
- to it. Recording is best effort and never fails a send that already went
137
- out, so the result names the conversation only when the record was
138
- written.
139
-
140
- This sends a message people will read, so it is classified high risk and
141
- asks for approval like any other action with effects nobody can take back.
142
-
143
- The send fails, and records nothing, when the channel does not acknowledge
144
- it or names no message id for it. A channel the assistant cannot address
145
- from a named chat is refused before anything is sent. If the daemon does
146
- not answer in time, the message may still go out: that is reported as an
147
- unknown outcome rather than a failure, so check the chat before sending
148
- again.
149
-
150
- Attachments are not sent from here.
151
-
152
- Examples:
153
- $ assistant channels send slack C0123456789 --text 'deploy is green'
154
- $ assistant channels send slack C0123456789 --thread 1700000000.000100 \
155
- --text 'and the smoke tests passed'
156
- $ assistant channels send telegram 123456789 --text 'morning' --json`,
157
89
  },
158
90
  {
159
91
  name: "list",
@@ -1,10 +1,9 @@
1
1
  /**
2
2
  * `assistant channels`: inspect messaging channels, and act as their bots.
3
3
  *
4
- * list : overview of every channel + ready state
5
- * get <channel> : detailed live snapshot of a single channel
6
- * request <channel> <url> : call the channel's platform API as its bot
7
- * send <channel> <chat-id> : post text to a chat, recorded
4
+ * list : overview of every channel + ready state
5
+ * get <channel> : detailed live snapshot of a single channel
6
+ * request <channel> <url> : call the channel's platform API as its bot
8
7
  *
9
8
  * `get` always re-runs remote probes (it invalidates the readiness cache
10
9
  * before reading), so the CLI answer matches the live source-of-truth.
@@ -13,11 +12,6 @@
13
12
  * channel's bot credential and makes the same authenticated request
14
13
  * `oauth request` makes, without the caller naming a provider.
15
14
  *
16
- * `send` is the send door (see ./send.ts): it runs the daemon's one send
17
- * implementation for the channel, so the post is threaded, rendered, and
18
- * recorded like every other message the assistant sends there. Posting
19
- * through `request` instead reaches the platform API and leaves no record.
20
- *
21
15
  * A mutating `refresh` verb (for reconnecting channels, e.g. supplying
22
16
  * fresh Slack tokens) is intentionally not part of this group.
23
17
  */
@@ -32,7 +26,6 @@ import { log } from "../../logger.js";
32
26
  import { shouldOutputJson, writeOutput } from "../../output.js";
33
27
  import { CHANNELS_PLUGIN_SEARCH_HINT, channelsHelp } from "./index.help.js";
34
28
  import { registerChannelsRequestCommand } from "./request.js";
35
- import { registerChannelsSendCommand } from "./send.js";
36
29
 
37
30
  // ---------------------------------------------------------------------------
38
31
  // Snapshot shape
@@ -218,12 +211,6 @@ export function registerChannelsCommand(program: Command): void {
218
211
  // -----------------------------------------------------------------------
219
212
 
220
213
  registerChannelsRequestCommand(channels);
221
-
222
- // -----------------------------------------------------------------------
223
- // send: post text to a chat, through the channel's transport
224
- // -----------------------------------------------------------------------
225
-
226
- registerChannelsSendCommand(channels);
227
214
  },
228
215
  });
229
216
  }
@@ -45,12 +45,8 @@ Examples:
45
45
  },
46
46
  ],
47
47
  helpText: `
48
- Lists credentials from the live credential vault. Each entry includes the same
49
- fields as inspect: scrubbed value, timestamps, policy, and metadata.
50
-
51
- Fails immediately with an error if the credential vault is unreachable. An
52
- empty list means the vault answered and has no matching credentials, not that
53
- the store is down.
48
+ Lists all credentials in the vault. Each entry includes the same fields as
49
+ "inspect" — scrubbed value, timestamps, policy, and metadata.
54
50
 
55
51
  The --search flag filters results by case-insensitive substring match against
56
52
  the credential's service name, field name, label, or description. For example, --search
@@ -343,8 +343,8 @@ export function registerCredentialsCommand(program: Command): void {
343
343
  } else {
344
344
  printCredentialHuman(output);
345
345
  if (output.brokerUnreachable) {
346
- log.warn(
347
- " Credential store is unreachable. Retry in a moment, or check that the credential vault is running.",
346
+ log.info(
347
+ " ⚠ Credential store is unreachable — ensure the assistant is running",
348
348
  );
349
349
  }
350
350
  }
@@ -7,8 +7,8 @@ export const mcpHelp: CliCommandHelp = {
7
7
  description: "Manage MCP (Model Context Protocol) servers",
8
8
  helpText: `
9
9
  MCP servers extend the assistant's capabilities with external tools. Servers
10
- are configured in the assistant's mcp.json, or declared by an installed
11
- plugin in its root mcp.json. Each
10
+ are configured in the assistant's config.json under the mcp.servers key, or
11
+ declared by an installed plugin in its root mcp.json. Each
12
12
  server uses one of three transport types:
13
13
 
14
14
  stdio Local process communicating over stdin/stdout
@@ -30,8 +30,8 @@ Examples:
30
30
  options: [{ flags: "--json", description: "Output as JSON" }],
31
31
  helpText: `
32
32
  Shows each MCP server with its current status and configuration. Servers come
33
- from two places: the workspace mcp.json, and the root mcp.json of any
34
- installed plugin that declares one.
33
+ from two places: the mcp.servers key in config.json, and the root mcp.json of
34
+ any installed plugin that declares one.
35
35
 
36
36
  Name The server identifier
37
37
  Status Health check result for workspace servers:
@@ -43,7 +43,7 @@ installed plugin that declares one.
43
43
  health-checked, so no stored credential can reach a URL a
44
44
  plugin chose.
45
45
  Source Shown only for plugin-declared servers, naming the plugin.
46
- Servers from workspace mcp.json print no Source line.
46
+ Servers from config.json print no Source line.
47
47
  Transport stdio, sse, or streamable-http
48
48
  URL/Command The server URL (sse/streamable-http) or command (stdio)
49
49
 
@@ -64,7 +64,7 @@ on their next turn automatically. The assistant must be running.
64
64
 
65
65
  Examples:
66
66
  $ vellum mcp reload
67
- $ vellum mcp reload # after editing mcp.json to add a new server
67
+ $ vellum mcp reload # after editing config.json to add a new server
68
68
  $ vellum mcp reload # after running "vellum mcp auth <server>"`,
69
69
  },
70
70
  {
@@ -95,7 +95,7 @@ Examples:
95
95
  ],
96
96
  helpText: `
97
97
  Arguments:
98
- name Unique identifier for the server (used as the key in mcp.json)
98
+ name Unique identifier for the server (used as the key in config.json)
99
99
 
100
100
  Transport-specific requirements:
101
101
  stdio Requires --command (and optional --args for arguments)
@@ -149,7 +149,7 @@ Examples:
149
149
  Arguments:
150
150
  name Name of the MCP server to remove
151
151
 
152
- Removes the server entry from mcp.json and performs best-effort cleanup of
152
+ Removes the server entry from config.json and performs best-effort cleanup of
153
153
  any stored OAuth credentials (tokens, client info, discovery metadata) for
154
154
  sse/streamable-http servers. If no OAuth credentials exist, the cleanup is
155
155
  silently skipped.
@@ -20,7 +20,7 @@ interface McpServerEntry {
20
20
  command?: string;
21
21
  args?: string[];
22
22
  };
23
- /** Workspace `mcp.json` or a plugin's `mcp.json`. */
23
+ /** Workspace `config.json` or a plugin's `mcp.json`. */
24
24
  source?: "workspace" | "plugin";
25
25
  /** Plugin that declared the server, when `source` is `plugin`. */
26
26
  pluginName?: string;
@@ -4,12 +4,8 @@ import type { CliCommandHelp } from "../lib/cli-command-help.js";
4
4
 
5
5
  export const roadmapHelp: CliCommandHelp = {
6
6
  name: "roadmap",
7
- description:
8
- "Read and file public feature proposals as the assistant. For bugs and support, instruct the user to join the Discord community at https://vellum.ai/community",
7
+ description: "Read and file public Vellum roadmap feedback as the assistant",
9
8
  helpText: `
10
- Items created here must be public feature proposals. For bugs and support
11
- concerns, instruct the user to join the Discord community at https://vellum.ai/community.
12
-
13
9
  Items, upvotes, and comments filed here are attributed to the assistant, not
14
10
  to its owner: the assistant signs these calls with its own platform API key.
15
11
  The owner's own roadmap identity lives on \`vellum roadmap\`.