@vellumai/assistant 0.12.1-staging.1 → 0.12.1

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 (404) 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/openapi.yaml +1 -291
  5. package/package.json +1 -1
  6. package/src/__tests__/always-loaded-tools-guard.test.ts +10 -18
  7. package/src/__tests__/app-compiler.test.ts +0 -6
  8. package/src/__tests__/app-control-tool-schemas.test.ts +2 -5
  9. package/src/__tests__/app-dir-path-guard.test.ts +3 -1
  10. package/src/__tests__/app-source-watcher.test.ts +218 -0
  11. package/src/{calls/__tests__ → __tests__}/call-controller.test.ts +82 -503
  12. package/src/__tests__/computer-use-skill-proxy-bridge.test.ts +2 -5
  13. package/src/__tests__/computer-use-tools.test.ts +5 -17
  14. package/src/__tests__/config-schema-cmd.test.ts +2 -2
  15. package/src/__tests__/config-schema.test.ts +29 -28
  16. package/src/__tests__/config-watcher-skill-reseed.test.ts +359 -0
  17. package/src/__tests__/config-watcher.test.ts +8 -23
  18. package/src/__tests__/connection-model-compat.test.ts +2 -2
  19. package/src/__tests__/conversation-key-store-disk-view.test.ts +1 -1
  20. package/src/__tests__/conversation-pairing.test.ts +0 -26
  21. package/src/__tests__/conversation-process-app-control-preactivation.test.ts +10 -4
  22. package/src/__tests__/conversation-queue.test.ts +207 -48
  23. package/src/__tests__/conversation-retry-discard.test.ts +1 -54
  24. package/src/__tests__/conversation-skill-tools.test.ts +0 -27
  25. package/src/__tests__/conversation-surfaces-app-control.test.ts +3 -8
  26. package/src/__tests__/conversation-surfaces-task-progress.test.ts +0 -67
  27. package/src/__tests__/conversation-title-service.test.ts +10 -14
  28. package/src/__tests__/conversation-tool-setup-app-refresh.test.ts +5 -3
  29. package/src/__tests__/conversation-tool-setup-attribution.test.ts +0 -51
  30. package/src/__tests__/credential-record-retire.test.ts +1 -171
  31. package/src/__tests__/credential-routes.test.ts +3 -212
  32. package/src/__tests__/credential-security-invariants.test.ts +1 -2
  33. package/src/__tests__/cu-unified-flow.test.ts +2 -8
  34. package/src/__tests__/drain-kick-guard.test.ts +2 -0
  35. package/src/__tests__/drain-requeue-on-contention.test.ts +6 -0
  36. package/src/__tests__/evict-conversations-for-reload.test.ts +1 -1
  37. package/src/__tests__/host-bash-proxy.test.ts +45 -26
  38. package/src/__tests__/host-browser-proxy.test.ts +17 -6
  39. package/src/__tests__/host-file-proxy-targeted.test.ts +0 -23
  40. package/src/__tests__/host-file-proxy.test.ts +23 -11
  41. package/src/__tests__/host-transfer-proxy-targeted.test.ts +9 -30
  42. package/src/__tests__/llm-catalog-parity.test.ts +0 -25
  43. package/src/__tests__/mcp-auth-routes.test.ts +9 -6
  44. package/src/__tests__/mcp-config-secret-boundary.test.ts +136 -78
  45. package/src/__tests__/mcp-health-check.test.ts +11 -8
  46. package/src/__tests__/mcp-list-plugin-servers.test.ts +10 -8
  47. package/src/{calls/__tests__ → __tests__}/media-stream-audio-transcode.test.ts +1 -1
  48. package/src/{calls/__tests__ → __tests__}/media-stream-output.test.ts +8 -37
  49. package/src/{calls/__tests__ → __tests__}/media-stream-parser.test.ts +1 -1
  50. package/src/{calls/__tests__ → __tests__}/media-stream-server-integration.test.ts +57 -150
  51. package/src/{calls/__tests__ → __tests__}/media-stream-stt-session.test.ts +5 -5
  52. package/src/{calls/__tests__ → __tests__}/media-turn-detector.test.ts +1 -1
  53. package/src/__tests__/messages-after-tiebreaker.test.ts +0 -91
  54. package/src/__tests__/messages-read-boundary-guard.test.ts +1 -1
  55. package/src/__tests__/messaging-send-tool.test.ts +548 -355
  56. package/src/__tests__/model-intents.test.ts +0 -3
  57. package/src/__tests__/outlook-messaging-provider.test.ts +6 -6
  58. package/src/__tests__/platform-client-verify-credential.test.ts +0 -2
  59. package/src/__tests__/plugin-import-boundary-guard.test.ts +0 -13
  60. package/src/__tests__/script-proxy-certs.test.ts +0 -35
  61. package/src/__tests__/skill-feature-flags-integration.test.ts +1 -1
  62. package/src/__tests__/skill-feature-flags.test.ts +2 -2
  63. package/src/__tests__/speaker-identification.test.ts +56 -0
  64. package/src/__tests__/subagent-tool-gate-mode.test.ts +3 -19
  65. package/src/__tests__/subagent-tools.test.ts +2 -3
  66. package/src/__tests__/telephony-tts-guard.test.ts +3 -38
  67. package/src/__tests__/vellum-self-knowledge-inline-command.test.ts +0 -4
  68. package/src/{calls/__tests__/voice-session-bridge-turn-flow.test.ts → __tests__/voice-session-bridge.test.ts} +12 -20
  69. package/src/__tests__/watch-retro-tool-availability.test.ts +17 -8
  70. package/src/__tests__/workspace-git-service.test.ts +0 -26
  71. package/src/acp/__tests__/agent-process.test.ts +4 -258
  72. package/src/acp/__tests__/auth-required.test.ts +0 -96
  73. package/src/acp/__tests__/client-handler.test.ts +2 -90
  74. package/src/acp/__tests__/session-manager-persistence.test.ts +1 -5
  75. package/src/acp/__tests__/session-manager-resume.test.ts +6 -270
  76. package/src/acp/__tests__/session-manager-usage.test.ts +2 -4
  77. package/src/acp/__tests__/session-manager.test.ts +4 -895
  78. package/src/acp/agent-process.test.ts +1 -4
  79. package/src/acp/agent-process.ts +9 -94
  80. package/src/acp/auth-required.ts +1 -50
  81. package/src/acp/auto-install.test.ts +7 -9
  82. package/src/acp/client-handler.ts +3 -16
  83. package/src/acp/resolve-agent.test.ts +6 -220
  84. package/src/acp/resolve-agent.ts +23 -88
  85. package/src/acp/session-manager.test.ts +3 -196
  86. package/src/acp/session-manager.ts +18 -441
  87. package/src/acp/types.ts +5 -50
  88. package/src/api/events/app-files-changed.ts +3 -4
  89. package/src/api/index.ts +0 -6
  90. package/src/apps/app-store.ts +1 -1
  91. package/src/bundler/app-compiler.ts +0 -15
  92. package/src/calls/__tests__/voice-control-protocol.test.ts +25 -58
  93. package/src/calls/__tests__/voice-session-bridge.test.ts +1 -37
  94. package/src/calls/__tests__/voice-triage-escalate.test.ts +0 -105
  95. package/src/calls/call-constants.ts +4 -24
  96. package/src/calls/call-controller.ts +199 -499
  97. package/src/calls/call-transport.ts +0 -16
  98. package/src/calls/media-stream-output.ts +0 -32
  99. package/src/calls/media-stream-server.ts +30 -82
  100. package/src/calls/media-stream-stt-session.ts +0 -15
  101. package/src/calls/resolve-call-tts-provider.ts +2 -33
  102. package/src/calls/speaker-identification.ts +233 -0
  103. package/src/calls/tts-call-strategy.ts +5 -9
  104. package/src/calls/types.ts +0 -2
  105. package/src/calls/voice-control-protocol.ts +21 -53
  106. package/src/calls/voice-session-bridge.ts +46 -59
  107. package/src/calls/voice-triage-escalate.ts +56 -175
  108. package/src/cli/commands/apps.help.ts +13 -67
  109. package/src/cli/commands/apps.ts +0 -183
  110. package/src/cli/commands/channels/index.help.ts +2 -70
  111. package/src/cli/commands/channels/index.ts +3 -16
  112. package/src/cli/commands/credentials.help.ts +2 -6
  113. package/src/cli/commands/credentials.ts +2 -2
  114. package/src/cli/commands/mcp.help.ts +8 -8
  115. package/src/cli/commands/mcp.ts +1 -1
  116. package/src/cli/commands/roadmap.help.ts +1 -5
  117. package/src/cli/commands/roadmap.ts +1 -1
  118. package/src/cli/lib/bundled-marketplace.json +90 -103
  119. package/src/config/__tests__/default-profile-catalog.test.ts +0 -22
  120. package/src/config/__tests__/memory-retrospective-schema.test.ts +1 -15
  121. package/src/config/__tests__/platform-rehydration.test.ts +0 -93
  122. package/src/config/acp-defaults.test.ts +3 -13
  123. package/src/config/acp-defaults.ts +6 -23
  124. package/src/config/acp-schema.ts +2 -30
  125. package/src/config/bundled-skills/acp/SKILL.md +14 -22
  126. package/src/config/bundled-skills/acp/TOOLS.json +1 -5
  127. package/src/config/bundled-skills/app-builder/SKILL.md +9 -12
  128. package/src/config/bundled-skills/app-builder/references/CUSTOM_ROUTES.md +1 -1
  129. package/src/config/bundled-skills/messaging/TOOLS.json +3 -3
  130. package/src/config/bundled-skills/messaging/tools/messaging-send.ts +139 -67
  131. package/src/config/bundled-skills/phone-calls/references/TRANSCRIPTS.md +1 -1
  132. package/src/config/bundled-skills/screen-annotation/SKILL.md +1 -8
  133. package/src/config/bundled-skills/screen-annotation/tools/screen-annotation.test.ts +1 -4
  134. package/src/config/bundled-skills/skill-management/TOOLS.json +2 -2
  135. package/src/config/default-profile-catalog.ts +1 -1
  136. package/src/config/env.ts +2 -2
  137. package/src/config/feature-flag-registry.json +12 -8
  138. package/src/config/memory-v3-gate.test.ts +0 -31
  139. package/src/config/memory-v3-gate.ts +16 -20
  140. package/src/config/platform-rehydration.ts +21 -75
  141. package/src/config/schema.ts +2 -2
  142. package/src/config/schemas/__tests__/live-voice.test.ts +158 -8
  143. package/src/config/schemas/calls.ts +28 -1
  144. package/src/config/schemas/live-voice.ts +173 -1
  145. package/src/config/schemas/mcp.ts +1 -1
  146. package/src/config/schemas/memory-retrospective.ts +0 -10
  147. package/src/config/schemas/skills.ts +14 -0
  148. package/src/credential-execution/process-manager.test.ts +19 -18
  149. package/src/daemon/__tests__/conversation-tool-setup.test.ts +121 -66
  150. package/src/daemon/__tests__/plugin-mcp-reconcile.test.ts +1 -4
  151. package/src/daemon/app-source-watcher.ts +218 -0
  152. package/src/daemon/config-watcher.ts +194 -13
  153. package/src/daemon/conversation-process.ts +64 -35
  154. package/src/daemon/conversation-skill-tools.ts +31 -13
  155. package/src/daemon/conversation-store.ts +1 -1
  156. package/src/daemon/conversation-surfaces.ts +8 -10
  157. package/src/daemon/conversation-tool-setup.ts +43 -37
  158. package/src/daemon/conversation.ts +3 -0
  159. package/src/daemon/host-bash-proxy.ts +12 -8
  160. package/src/daemon/host-browser-proxy.ts +1 -15
  161. package/src/daemon/host-file-proxy.ts +10 -8
  162. package/src/daemon/host-transfer-proxy.ts +18 -14
  163. package/src/daemon/lifecycle.ts +5 -0
  164. package/src/daemon/mcp-reload-service.ts +5 -5
  165. package/src/daemon/message-types/sync.ts +0 -1
  166. package/src/daemon/providers-setup.ts +1 -1
  167. package/src/daemon/shutdown-handlers.ts +9 -1
  168. package/src/daemon/skill-memory-refresh.ts +0 -64
  169. package/src/daemon/tool-side-effects.ts +18 -7
  170. package/src/hooks/types.ts +0 -33
  171. package/src/inbound/platform-callback-registration.ts +5 -4
  172. package/src/live-voice/__tests__/live-voice-metrics.test.ts +3 -0
  173. package/src/live-voice/__tests__/live-voice-progress.test.ts +15 -15
  174. package/src/live-voice/__tests__/live-voice-vad.test.ts +2 -2
  175. package/src/{calls → live-voice}/__tests__/progress-narration.test.ts +4 -4
  176. package/src/{calls → live-voice}/__tests__/progress-phrases.test.ts +1 -1
  177. package/src/live-voice/__tests__/runtime-websocket-shell.test.ts +69 -13
  178. package/src/live-voice/live-voice-session.ts +693 -213
  179. package/src/{calls → live-voice}/progress-narration.ts +2 -2
  180. package/src/live-voice/protocol.ts +2 -0
  181. package/src/mcp/__tests__/effective-config.test.ts +2 -2
  182. package/src/mcp/effective-config.ts +3 -3
  183. package/src/mcp/mcp-header-store.ts +45 -29
  184. package/src/mcp/startup.ts +4 -8
  185. package/src/messaging/provider.ts +3 -10
  186. package/src/messaging/providers/callback-routing.ts +0 -18
  187. package/src/messaging/providers/channel-transport.ts +0 -56
  188. package/src/messaging/providers/discord/transport.ts +0 -17
  189. package/src/messaging/providers/slack/__tests__/adapter-token-routing.test.ts +17 -6
  190. package/src/messaging/providers/slack/adapter.ts +44 -7
  191. package/src/messaging/providers/slack/transport.ts +0 -16
  192. package/src/messaging/providers/telegram-bot/adapter.ts +48 -1
  193. package/src/messaging/providers/telegram-bot/client.ts +26 -0
  194. package/src/messaging/providers/telegram-bot/transport.ts +0 -20
  195. package/src/messaging/providers/whatsapp/adapter.ts +48 -1
  196. package/src/messaging/providers/whatsapp/client.ts +29 -0
  197. package/src/messaging/providers/whatsapp/transport.ts +0 -18
  198. package/src/monitoring/__tests__/workspace-git-heartbeat.test.ts +0 -8
  199. package/src/notifications/__tests__/assistant-reply-producer.test.ts +0 -55
  200. package/src/notifications/__tests__/home-feed-side-effect.test.ts +3 -153
  201. package/src/notifications/assistant-reply-producer.ts +3 -8
  202. package/src/notifications/conversation-pairing.ts +16 -36
  203. package/src/notifications/delivered-post-record.ts +1 -11
  204. package/src/notifications/home-feed-side-effect.ts +7 -55
  205. package/src/outbound-proxy/certs.ts +5 -3
  206. package/src/permissions/checker.test.ts +6 -11
  207. package/src/persistence/compaction-log-store-clickhouse.ts +3 -3
  208. package/src/persistence/conversation-crud.ts +63 -71
  209. package/src/persistence/conversation-lineage.ts +4 -12
  210. package/src/persistence/conversation-title-service.ts +26 -9
  211. package/src/persistence/llm-request-log-sink-clickhouse.ts +3 -3
  212. package/src/persistence/llm-request-log-source-clickhouse.ts +3 -3
  213. package/src/persistence/message-reads.ts +0 -30
  214. package/src/persistence/migrations/157-invite-contact-id.ts +6 -18
  215. package/src/persistence/schema/memory-core.ts +0 -5
  216. package/src/platform/client.test.ts +0 -2
  217. package/src/platform/client.ts +10 -2
  218. package/src/plugin-api/constants.ts +0 -2
  219. package/src/plugin-api/index.ts +0 -1
  220. package/src/plugin-api/types.ts +0 -2
  221. package/src/plugins/defaults/index.ts +0 -2
  222. package/src/plugins/defaults/memory/__tests__/memory-retrospective-accounting.test.ts +0 -46
  223. package/src/plugins/defaults/memory/__tests__/memory-retrospective-enqueue.test.ts +5 -9
  224. package/src/plugins/defaults/memory/__tests__/memory-retrospective-job.test.ts +10 -20
  225. package/src/plugins/defaults/memory/__tests__/memory-retrospective-state.test.ts +0 -219
  226. package/src/plugins/defaults/memory/__tests__/memory-retrospective-sweep.test.ts +0 -31
  227. package/src/plugins/defaults/memory/__tests__/memory-retrospective-trigger-check.test.ts +0 -63
  228. package/src/plugins/defaults/memory/__tests__/shutdown-hook.test.ts +0 -4
  229. package/src/plugins/defaults/memory/graph/capability-seed.ts +6 -4
  230. package/src/plugins/defaults/memory/hooks/init.ts +0 -10
  231. package/src/plugins/defaults/memory/hooks/shutdown.ts +0 -2
  232. package/src/plugins/defaults/memory/jobs-worker.ts +0 -13
  233. package/src/plugins/defaults/memory/memory-retrospective-accounting.ts +60 -34
  234. package/src/plugins/defaults/memory/memory-retrospective-enqueue.ts +5 -3
  235. package/src/plugins/defaults/memory/memory-retrospective-job.ts +3 -12
  236. package/src/plugins/defaults/memory/memory-retrospective-state.ts +71 -312
  237. package/src/plugins/defaults/memory/memory-retrospective-sweep.ts +1 -2
  238. package/src/plugins/defaults/memory/memory-retrospective-trigger-check.ts +3 -5
  239. package/src/plugins/defaults/memory/startup.ts +1 -6
  240. package/src/plugins/defaults/memory/substrate/__tests__/skill-content.test.ts +9 -7
  241. package/src/plugins/defaults/memory/substrate/skill-content.ts +2 -2
  242. package/src/plugins/defaults/memory/v3/__tests__/pool-select.test.ts +0 -89
  243. package/src/plugins/defaults/memory/worker.ts +0 -6
  244. package/src/plugins/mcp-servers.ts +75 -15
  245. package/src/providers/__tests__/connection-model-compat.test.ts +3 -3
  246. package/src/providers/gemini/client.ts +23 -9
  247. package/src/providers/model-catalog.ts +0 -34
  248. package/src/providers/model-intents.ts +5 -10
  249. package/src/providers/openai/__tests__/chat-completions-provider-reasoning.test.ts +18 -146
  250. package/src/providers/openai/__tests__/tool-choice-mapping.test.ts +1 -83
  251. package/src/providers/openai/chat-completions-provider.ts +78 -192
  252. package/src/providers/openai/codex-models.ts +4 -0
  253. package/src/runtime/AGENTS.md +0 -2
  254. package/src/runtime/auth/same-actor.ts +3 -38
  255. package/src/runtime/http-server.ts +151 -160
  256. package/src/runtime/routes/__tests__/acp-routes.test.ts +4 -159
  257. package/src/runtime/routes/__tests__/conversation-query-routes.test.ts +1 -108
  258. package/src/runtime/routes/__tests__/mcp-add-default-risk.test.ts +12 -16
  259. package/src/runtime/routes/acp-routes.test.ts +0 -15
  260. package/src/runtime/routes/acp-routes.ts +9 -72
  261. package/src/runtime/routes/app-management-routes.ts +0 -73
  262. package/src/runtime/routes/app-routes.ts +1 -1
  263. package/src/runtime/routes/conversation-list-routes.ts +3 -14
  264. package/src/runtime/routes/conversation-query-routes.ts +0 -40
  265. package/src/runtime/routes/credential-routes.ts +10 -19
  266. package/src/runtime/routes/diagnostics-routes.ts +3 -55
  267. package/src/runtime/routes/index.ts +0 -4
  268. package/src/runtime/routes/log-export-routes.ts +0 -2
  269. package/src/runtime/routes/mcp-auth-routes.ts +47 -39
  270. package/src/runtime/routes/migration-routes.ts +21 -8
  271. package/src/runtime/routes/platform-routes.ts +15 -18
  272. package/src/runtime/services/__tests__/conversation-serializer.test.ts +0 -28
  273. package/src/runtime/services/conversation-serializer.ts +3 -16
  274. package/src/runtime/sync/resource-sync-events.ts +1 -2
  275. package/src/schedule/worker.ts +1 -1
  276. package/src/security/ces-rpc-record-backend.ts +0 -7
  277. package/src/subagent/consult-context.ts +25 -12
  278. package/src/tools/acp/list-agents.test.ts +1 -3
  279. package/src/tools/acp/spawn.test.ts +11 -146
  280. package/src/tools/acp/spawn.ts +3 -21
  281. package/src/tools/acp/status.ts +3 -40
  282. package/src/tools/app-control/skill-proxy-bridge.ts +1 -2
  283. package/src/tools/capability-offer.test.ts +2 -22
  284. package/src/tools/capability-offer.ts +1 -16
  285. package/src/tools/computer-use/definitions.ts +2 -4
  286. package/src/tools/computer-use/skill-proxy-bridge.ts +1 -2
  287. package/src/tools/credentials/metadata-store.ts +0 -100
  288. package/src/tools/host-filesystem/edit.test.ts +1 -2
  289. package/src/tools/host-filesystem/edit.ts +2 -2
  290. package/src/tools/host-filesystem/read.test.ts +1 -2
  291. package/src/tools/host-filesystem/read.ts +2 -2
  292. package/src/tools/host-filesystem/transfer.test.ts +1 -2
  293. package/src/tools/host-filesystem/transfer.ts +2 -2
  294. package/src/tools/host-filesystem/write.test.ts +1 -2
  295. package/src/tools/host-filesystem/write.ts +2 -2
  296. package/src/tools/host-terminal/host-shell.test.ts +0 -16
  297. package/src/tools/host-terminal/host-shell.ts +20 -4
  298. package/src/tools/policy-context.ts +7 -6
  299. package/src/tools/subagent/spawn.ts +8 -5
  300. package/src/tools/watch/watch-retro-report.ts +8 -0
  301. package/src/util/__tests__/language-subtag.test.ts +1 -23
  302. package/src/util/fs-watcher-error.ts +36 -0
  303. package/src/util/language-subtag.ts +0 -16
  304. package/src/util/platform.ts +0 -8
  305. package/src/workspace/git-service.ts +54 -5
  306. package/src/workspace/migrations/registry.ts +0 -6
  307. package/scripts/smoke-desktop-window-theme.ts +0 -186
  308. package/src/__tests__/git-porcelain.test.ts +0 -47
  309. package/src/__tests__/helpers/set-workspace-mcp.ts +0 -11
  310. package/src/__tests__/message-deleted-hook-dispatch.test.ts +0 -119
  311. package/src/__tests__/resolve-app.test.ts +0 -135
  312. package/src/__tests__/source-fingerprint.test.ts +0 -184
  313. package/src/__tests__/workspace-migration-154-repair-retired-codex-gpt-5-4-model-ids.test.ts +0 -336
  314. package/src/acp/__tests__/helpers/acp-model-option.ts +0 -51
  315. package/src/acp/model-config.test.ts +0 -166
  316. package/src/acp/model-config.ts +0 -138
  317. package/src/api/events/acp-session-model-update.test.ts +0 -88
  318. package/src/api/events/acp-session-model-update.ts +0 -46
  319. package/src/apps/resolve-app.ts +0 -81
  320. package/src/apps/source-fingerprint.ts +0 -266
  321. package/src/calls/__tests__/barge-in-guard.test.ts +0 -81
  322. package/src/calls/__tests__/voice-leg-coordinator.test.ts +0 -229
  323. package/src/calls/__tests__/voice-progress-cadence.test.ts +0 -274
  324. package/src/calls/barge-in-guard.ts +0 -118
  325. package/src/calls/voice-leg-coordinator.ts +0 -189
  326. package/src/calls/voice-progress-cadence.ts +0 -423
  327. package/src/cli/commands/__tests__/apps.test.ts +0 -245
  328. package/src/cli/commands/__tests__/roadmap.help.test.ts +0 -19
  329. package/src/cli/commands/channels/__tests__/send.test.ts +0 -218
  330. package/src/cli/commands/channels/send.ts +0 -128
  331. package/src/config/__tests__/platform-identity.test.ts +0 -117
  332. package/src/config/acp-agent-write.ts +0 -43
  333. package/src/config/acp-schema.test.ts +0 -81
  334. package/src/config/platform-identity.ts +0 -144
  335. package/src/config/schemas/__tests__/voice.test.ts +0 -148
  336. package/src/config/schemas/voice.ts +0 -150
  337. package/src/daemon/__tests__/skill-memory-refresh-mtime.test.ts +0 -133
  338. package/src/daemon/app-change-notify.ts +0 -45
  339. package/src/desktop/__tests__/fake-desktop.ts +0 -119
  340. package/src/desktop/desktop-chrome-policy.test.ts +0 -71
  341. package/src/desktop/desktop-chrome-policy.ts +0 -42
  342. package/src/desktop/desktop-dependencies.test.ts +0 -102
  343. package/src/desktop/desktop-dependencies.ts +0 -306
  344. package/src/desktop/desktop-feature.test.ts +0 -18
  345. package/src/desktop/desktop-feature.ts +0 -19
  346. package/src/desktop/desktop-panel-config.test.ts +0 -135
  347. package/src/desktop/desktop-panel-config.ts +0 -149
  348. package/src/desktop/desktop-session-manager.test.ts +0 -627
  349. package/src/desktop/desktop-session-manager.ts +0 -814
  350. package/src/desktop/desktop-stream-bridge.test.ts +0 -395
  351. package/src/desktop/desktop-stream-bridge.ts +0 -214
  352. package/src/desktop/desktop-wallpaper.test.ts +0 -191
  353. package/src/desktop/desktop-wallpaper.ts +0 -113
  354. package/src/desktop/desktop-window-theme.ts +0 -170
  355. package/src/i18n/AGENTS.md +0 -22
  356. package/src/i18n/__tests__/i18n.test.ts +0 -108
  357. package/src/i18n/index.ts +0 -16
  358. package/src/i18n/locales.ts +0 -93
  359. package/src/i18n/messages.ts +0 -61
  360. package/src/i18n/title.ts +0 -25
  361. package/src/mcp/__tests__/workspace-mcp-config.test.ts +0 -135
  362. package/src/mcp/spec-schema.ts +0 -111
  363. package/src/mcp/workspace-mcp-config.ts +0 -188
  364. package/src/messaging/providers/__tests__/proactive-address.test.ts +0 -95
  365. package/src/persistence/conversation-title-placeholders.ts +0 -23
  366. package/src/persistence/message-cursor.ts +0 -78
  367. package/src/persistence/migrations/__tests__/157-invite-contact-id.test.ts +0 -149
  368. package/src/plugins/defaults/memory/__tests__/memory-retrospective-cursor-backfill.test.ts +0 -118
  369. package/src/plugins/defaults/memory/__tests__/memory-retrospective-cursor-preserve.test.ts +0 -83
  370. package/src/plugins/defaults/memory/hooks/message-deleted.ts +0 -21
  371. package/src/plugins/defaults/memory/memory-retrospective-cursor-backfill.ts +0 -126
  372. package/src/plugins/defaults/memory/memory-retrospective-cursor-preserve.ts +0 -79
  373. package/src/plugins/defaults/memory/memory-retrospective-cursor.ts +0 -28
  374. package/src/plugins/defaults/memory/skill-md-mtime-poll.ts +0 -9
  375. package/src/providers/gemini-thought-signature.test.ts +0 -63
  376. package/src/providers/gemini-thought-signature.ts +0 -44
  377. package/src/providers/openai/__tests__/chat-completions-provider-thought-signature.test.ts +0 -613
  378. package/src/providers/openai/__tests__/google-thought-signature.test.ts +0 -235
  379. package/src/providers/openai/google-thought-signature.ts +0 -320
  380. package/src/runtime/__tests__/channel-send.test.ts +0 -443
  381. package/src/runtime/__tests__/desktop-stream-upgrade.test.ts +0 -89
  382. package/src/runtime/__tests__/live-voice-upgrade.test.ts +0 -58
  383. package/src/runtime/__tests__/runtime-ws-test-utils.ts +0 -72
  384. package/src/runtime/__tests__/watch-stream-upgrade.test.ts +0 -59
  385. package/src/runtime/channel-send.ts +0 -316
  386. package/src/runtime/routes/__tests__/apps-refresh-route.test.ts +0 -205
  387. package/src/runtime/routes/__tests__/channel-send-routes.test.ts +0 -127
  388. package/src/runtime/routes/__tests__/dictation-cleanup-guard.test.ts +0 -107
  389. package/src/runtime/routes/channel-send-routes.ts +0 -85
  390. package/src/runtime/routes/desktop-setup-routes.test.ts +0 -74
  391. package/src/runtime/routes/desktop-setup-routes.ts +0 -35
  392. package/src/security/__tests__/ces-http-record-backend.test.ts +0 -137
  393. package/src/security/ces-http-record-backend.ts +0 -120
  394. package/src/skills/__tests__/workspace-skill-md-signature.test.ts +0 -60
  395. package/src/skills/workspace-skill-md-signature.ts +0 -50
  396. package/src/tools/acp/status.test.ts +0 -94
  397. package/src/util/ca-bundle.ts +0 -13
  398. package/src/workspace/git-porcelain.ts +0 -66
  399. package/src/workspace/migrations/154-repair-retired-codex-gpt-5-4-model-ids.ts +0 -258
  400. package/src/workspace/migrations/155-move-front-model-config-to-voice.ts +0 -78
  401. package/src/workspace/migrations/156-extract-workspace-mcp-json.ts +0 -214
  402. package/src/workspace/migrations/__tests__/155-move-front-model-config-to-voice.test.ts +0 -102
  403. package/src/workspace/migrations/__tests__/156-extract-workspace-mcp-json.test.ts +0 -199
  404. /package/src/{calls → live-voice}/progress-phrases.ts +0 -0
@@ -8,16 +8,9 @@
8
8
 
9
9
  import { describe, expect, mock, test } from "bun:test";
10
10
 
11
- import type {
12
- AuthMethod,
13
- InitializeResponse,
14
- SessionConfigOption,
15
- } from "@agentclientprotocol/sdk";
16
- import * as acp from "@agentclientprotocol/sdk";
11
+ import type { AuthMethod, InitializeResponse } from "@agentclientprotocol/sdk";
17
12
 
18
13
  import { AcpAgentProcess } from "../agent-process.js";
19
- import { AcpConfigOptionRefusedError } from "../types.js";
20
- import { modelOption } from "./helpers/acp-model-option.js";
21
14
 
22
15
  function makeProcess(): AcpAgentProcess {
23
16
  return new AcpAgentProcess(
@@ -167,139 +160,6 @@ describe("AcpAgentProcess loadSession/resumeSession", () => {
167
160
  });
168
161
  });
169
162
 
170
- describe("AcpAgentProcess config options", () => {
171
- /** Injects a connection whose session calls report `configOptions`. */
172
- function stubSessionResponses(
173
- proc: AcpAgentProcess,
174
- configOptions: SessionConfigOption[] | null | undefined,
175
- ): void {
176
- (proc as unknown as { connection: unknown }).connection = {
177
- newSession: () =>
178
- Promise.resolve({ sessionId: "session-1", configOptions }),
179
- loadSession: () => Promise.resolve({ configOptions }),
180
- resumeSession: () => Promise.resolve({ configOptions }),
181
- };
182
- }
183
-
184
- test("createSession returns the reported options", async () => {
185
- const proc = makeProcess();
186
- const options = [modelOption("sonnet")];
187
- stubSessionResponses(proc, options);
188
-
189
- await expect(proc.createSession("/tmp/project")).resolves.toEqual({
190
- sessionId: "session-1",
191
- configOptions: options,
192
- });
193
- });
194
-
195
- test("loadSession returns the reported options", async () => {
196
- const proc = makeProcess();
197
- const options = [modelOption("sonnet")];
198
- stubSessionResponses(proc, options);
199
-
200
- await expect(
201
- proc.loadSession("session-1", "/tmp/project"),
202
- ).resolves.toEqual({ configOptions: options });
203
- });
204
-
205
- test("resumeSession returns the reported options", async () => {
206
- const proc = makeProcess();
207
- const options = [modelOption("opus")];
208
- stubSessionResponses(proc, options);
209
-
210
- await expect(
211
- proc.resumeSession("session-1", "/tmp/project"),
212
- ).resolves.toEqual({ configOptions: options });
213
- });
214
-
215
- test("a null or absent configOptions normalizes to an empty array", async () => {
216
- const created = makeProcess();
217
- stubSessionResponses(created, null);
218
- await expect(created.createSession("/tmp/project")).resolves.toEqual({
219
- sessionId: "session-1",
220
- configOptions: [],
221
- });
222
-
223
- const loaded = makeProcess();
224
- stubSessionResponses(loaded, null);
225
- await expect(
226
- loaded.loadSession("session-1", "/tmp/project"),
227
- ).resolves.toEqual({ configOptions: [] });
228
-
229
- const resumed = makeProcess();
230
- stubSessionResponses(resumed, undefined);
231
- await expect(
232
- resumed.resumeSession("session-1", "/tmp/project"),
233
- ).resolves.toEqual({ configOptions: [] });
234
- });
235
-
236
- test("setConfigOption forwards the value and returns the refreshed set", async () => {
237
- const proc = makeProcess();
238
- const calls: unknown[] = [];
239
- const refreshed = [modelOption("opus")];
240
- (proc as unknown as { connection: unknown }).connection = {
241
- setSessionConfigOption: (params: unknown) => {
242
- calls.push(params);
243
- return Promise.resolve({ configOptions: refreshed });
244
- },
245
- };
246
-
247
- await expect(
248
- proc.setConfigOption("session-1", "model", "opus"),
249
- ).resolves.toEqual(refreshed);
250
-
251
- expect(calls).toEqual([
252
- { sessionId: "session-1", configId: "model", value: "opus" },
253
- ]);
254
- });
255
-
256
- test("setConfigOption sends the boolean request variant", async () => {
257
- const proc = makeProcess();
258
- const calls: unknown[] = [];
259
- const refreshed = [modelOption("opus")];
260
- (proc as unknown as { connection: unknown }).connection = {
261
- setSessionConfigOption: (params: unknown) => {
262
- calls.push(params);
263
- return Promise.resolve({ configOptions: refreshed });
264
- },
265
- };
266
-
267
- await proc.setConfigOption("session-1", "thinking", true);
268
-
269
- expect(calls).toEqual([
270
- {
271
- sessionId: "session-1",
272
- configId: "thinking",
273
- type: "boolean",
274
- value: true,
275
- },
276
- ]);
277
- });
278
-
279
- test("setConfigOption omits the discriminator for string values", async () => {
280
- const proc = makeProcess();
281
- const calls: unknown[] = [];
282
- (proc as unknown as { connection: unknown }).connection = {
283
- setSessionConfigOption: (params: unknown) => {
284
- calls.push(params);
285
- return Promise.resolve({ configOptions: [modelOption("opus")] });
286
- },
287
- };
288
-
289
- await proc.setConfigOption("session-1", "model", "opus");
290
-
291
- expect(calls[0]).not.toHaveProperty("type");
292
- });
293
-
294
- test("setConfigOption throws when the process is not spawned", async () => {
295
- const proc = makeProcess();
296
-
297
- await expect(
298
- proc.setConfigOption("session-1", "model", "opus"),
299
- ).rejects.toThrow('ACP agent "test-agent" is not spawned');
300
- });
301
- });
302
-
303
163
  describe("AcpAgentProcess auth_required retry", () => {
304
164
  // spawnedEnv is injected the way spawn() builds it ({ ...process.env,
305
165
  // ...config.env }), so the advertised var names use a VELLUM_TEST_ prefix
@@ -336,19 +196,17 @@ describe("AcpAgentProcess auth_required retry", () => {
336
196
  * initialize() so the advertised authMethods are captured.
337
197
  */
338
198
  async function setupAuthProcess(options: {
339
- command?: string;
340
199
  env?: Record<string, string>;
341
200
  authMethods?: AuthMethod[];
342
201
  /** Rejections to throw from successive newSession calls before succeeding. */
343
202
  newSessionRejections?: unknown[];
344
203
  loadSessionRejections?: unknown[];
345
204
  resumeSessionRejections?: unknown[];
346
- setConfigOptionRejections?: unknown[];
347
205
  promptRejections?: unknown[];
348
206
  }) {
349
207
  const proc = new AcpAgentProcess(
350
208
  "codex",
351
- { command: options.command ?? "echo", args: [], env: options.env },
209
+ { command: "echo", args: [], env: options.env },
352
210
  () => {
353
211
  throw new Error("client factory should not be called in this test");
354
212
  },
@@ -376,10 +234,6 @@ describe("AcpAgentProcess auth_required retry", () => {
376
234
  options.resumeSessionRejections ?? [],
377
235
  {},
378
236
  );
379
- const setSessionConfigOption = failThenSucceed(
380
- options.setConfigOptionRejections ?? [],
381
- { configOptions: [] },
382
- );
383
237
  const prompt = failThenSucceed(options.promptRejections ?? [], {
384
238
  stopReason: "end_turn",
385
239
  });
@@ -398,7 +252,6 @@ describe("AcpAgentProcess auth_required retry", () => {
398
252
  newSession,
399
253
  loadSession,
400
254
  resumeSession,
401
- setSessionConfigOption,
402
255
  prompt,
403
256
  authenticate,
404
257
  };
@@ -411,112 +264,18 @@ describe("AcpAgentProcess auth_required retry", () => {
411
264
  newSession,
412
265
  loadSession,
413
266
  resumeSession,
414
- setSessionConfigOption,
415
267
  prompt,
416
268
  authenticate,
417
269
  internals,
418
270
  };
419
271
  }
420
272
 
421
- // An adapter that throws a plain Error reaches the client as a generic
422
- // "Internal error" carrying the real sentence in `data.details`, which is
423
- // the shape these fixtures reproduce.
424
- test("setConfigOption surfaces the adapter's error answer as a refusal", async () => {
425
- const { proc } = await setupAuthProcess({
426
- setConfigOptionRejections: [
427
- new acp.RequestError(-32603, "Internal error", {
428
- details: "Invalid value for config option model: nope",
429
- }),
430
- ],
431
- });
432
-
433
- const refusal = await proc
434
- .setConfigOption("session-1", "model", "nope")
435
- .catch((err: unknown) => err);
436
-
437
- expect(refusal).toBeInstanceOf(AcpConfigOptionRefusedError);
438
- // The adapter's sentence, not the message the SDK framed it in.
439
- expect((refusal as Error).message).toBe(
440
- "Invalid value for config option model: nope",
441
- );
442
- });
443
-
444
- test("setConfigOption serializes a payload that names no reason", async () => {
445
- const { proc } = await setupAuthProcess({
446
- setConfigOptionRejections: [
447
- new acp.RequestError(-32603, "Internal error", { code: 7 }),
448
- ],
449
- });
450
-
451
- await expect(
452
- proc.setConfigOption("session-1", "model", "nope"),
453
- ).rejects.toThrow('{"code":7}');
454
- });
455
-
456
- test("setConfigOption falls back to the message when there is no payload", async () => {
457
- const { proc } = await setupAuthProcess({
458
- setConfigOptionRejections: [
459
- new acp.RequestError(-32603, "Session not found"),
460
- ],
461
- });
462
-
463
- await expect(
464
- proc.setConfigOption("session-1", "model", "nope"),
465
- ).rejects.toThrow("Session not found");
466
- });
467
-
468
- test.each(["claude-agent-acp", "/usr/local/bin/claude-agent-acp"])(
469
- "setConfigOption leaves Claude's message-shaped auth failure untyped (%s)",
470
- async (command) => {
471
- const expired = new acp.RequestError(-32603, "Internal error", {
472
- details: "Not logged in",
473
- });
474
- const { proc } = await setupAuthProcess({
475
- command,
476
- setConfigOptionRejections: [expired],
477
- });
478
-
479
- await expect(
480
- proc.setConfigOption("session-1", "model", "opus"),
481
- ).rejects.toBe(expired);
482
- },
483
- );
484
-
485
- test("setConfigOption reads Claude's login wording from another adapter as a refusal", async () => {
486
- const { proc } = await setupAuthProcess({
487
- command: "codex-acp",
488
- setConfigOptionRejections: [
489
- new acp.RequestError(-32603, "Internal error", {
490
- details: "Not logged in",
491
- }),
492
- ],
493
- });
494
-
495
- const refusal = await proc
496
- .setConfigOption("session-1", "model", "gpt-5")
497
- .catch((err: unknown) => err);
498
-
499
- expect(refusal).toBeInstanceOf(AcpConfigOptionRefusedError);
500
- expect((refusal as Error).message).toBe("Not logged in");
501
- });
502
-
503
- test("setConfigOption leaves a transport failure untyped", async () => {
504
- const closed = new Error("ACP connection closed");
505
- const { proc } = await setupAuthProcess({
506
- setConfigOptionRejections: [closed],
507
- });
508
-
509
- await expect(
510
- proc.setConfigOption("session-1", "model", "opus"),
511
- ).rejects.toBe(closed);
512
- });
513
-
514
273
  test("createSession does not authenticate when newSession succeeds", async () => {
515
274
  const { proc, newSession, authenticate } = await setupAuthProcess({
516
275
  env: { [OPENAI_VAR]: "sk-test" },
517
276
  });
518
277
 
519
- const { sessionId } = await proc.createSession("/tmp/project");
278
+ const sessionId = await proc.createSession("/tmp/project");
520
279
 
521
280
  expect(sessionId).toBe("session-1");
522
281
  expect(newSession).toHaveBeenCalledTimes(1);
@@ -529,7 +288,7 @@ describe("AcpAgentProcess auth_required retry", () => {
529
288
  newSessionRejections: [authRequiredError],
530
289
  });
531
290
 
532
- const { sessionId } = await proc.createSession("/tmp/project");
291
+ const sessionId = await proc.createSession("/tmp/project");
533
292
 
534
293
  expect(sessionId).toBe("session-1");
535
294
  expect(authenticate).toHaveBeenCalledTimes(1);
@@ -628,19 +387,6 @@ describe("AcpAgentProcess auth_required retry", () => {
628
387
  expect(resumeSession).toHaveBeenCalledTimes(2);
629
388
  });
630
389
 
631
- test("setConfigOption authenticates and retries on auth_required", async () => {
632
- const { proc, setSessionConfigOption, authenticate } =
633
- await setupAuthProcess({
634
- env: { [OPENAI_VAR]: "sk-test" },
635
- setConfigOptionRejections: [authRequiredError],
636
- });
637
-
638
- await proc.setConfigOption("session-1", "model", "opus");
639
-
640
- expect(authenticate).toHaveBeenCalledWith({ methodId: "openai-api-key" });
641
- expect(setSessionConfigOption).toHaveBeenCalledTimes(2);
642
- });
643
-
644
390
  test("prompt authenticates and retries on auth_required, returning the response", async () => {
645
391
  const { proc, prompt, authenticate } = await setupAuthProcess({
646
392
  env: { [OPENAI_VAR]: "sk-test" },
@@ -6,8 +6,6 @@
6
6
 
7
7
  import { describe, expect, test } from "bun:test";
8
8
 
9
- import { RequestError } from "@agentclientprotocol/sdk";
10
-
11
9
  import { AcpAuthRequiredEventSchema } from "../../api/events/acp-auth-required.js";
12
10
  import { AcpSessionErrorEventSchema } from "../../api/events/acp-session-error.js";
13
11
  import {
@@ -17,7 +15,6 @@ import {
17
15
  CLAUDE_ACP_COMMAND,
18
16
  isAcpAuthRequired,
19
17
  isClaudeAuthFailureMessage,
20
- requestErrorReason,
21
18
  } from "../auth-required.js";
22
19
 
23
20
  describe("isAcpAuthRequired", () => {
@@ -92,99 +89,6 @@ describe("isClaudeAuthFailureMessage", () => {
92
89
  });
93
90
  });
94
91
 
95
- describe("requestErrorReason", () => {
96
- test("decodes the sentence the SDK moved into the payload", () => {
97
- const rejection = new RequestError(-32603, "Internal error", {
98
- details: "Failed to authenticate. Please run /login",
99
- });
100
-
101
- expect(requestErrorReason(rejection)).toBe(
102
- "Failed to authenticate. Please run /login",
103
- );
104
- // The point of decoding: the generic message never matches.
105
- expect(isClaudeAuthFailureMessage(rejection.message)).toBe(false);
106
- expect(isClaudeAuthFailureMessage(requestErrorReason(rejection))).toBe(
107
- true,
108
- );
109
- });
110
-
111
- test("reads the message off a rejection that carries no payload", () => {
112
- // Straight off the wire: a plain object, not an instance of any class we
113
- // control, and with the auth text where the SDK leaves a framed one.
114
- const rejection = {
115
- code: -32603,
116
- message: "Failed to authenticate. Please run /login",
117
- };
118
-
119
- expect(requestErrorReason(rejection)).toBe(
120
- "Failed to authenticate. Please run /login",
121
- );
122
- expect(isClaudeAuthFailureMessage(requestErrorReason(rejection))).toBe(
123
- true,
124
- );
125
- });
126
-
127
- test("keeps the rejection's own message when the payload names no reason", () => {
128
- expect(requestErrorReason(new RequestError(-32603, "boom", { c: 7 }))).toBe(
129
- "boom",
130
- );
131
- expect(
132
- requestErrorReason(
133
- RequestError.methodNotFound("session/set_config_option"),
134
- ),
135
- ).toBe('"Method not found": session/set_config_option');
136
- expect(requestErrorReason(new Error("Not logged in"))).toBe(
137
- "Not logged in",
138
- );
139
- });
140
-
141
- test("keeps a specific rejection message ahead of supplemental details", () => {
142
- expect(
143
- requestErrorReason(
144
- new RequestError(-32603, "Model unavailable", {
145
- details: "The selected deployment is temporarily unavailable",
146
- }),
147
- ),
148
- ).toBe("Model unavailable");
149
- });
150
-
151
- test("serializes the payload behind a bare Internal error that names no reason", () => {
152
- expect(
153
- requestErrorReason(new RequestError(-32603, "Internal error", { c: 7 })),
154
- ).toBe('{"c":7}');
155
- });
156
-
157
- test("serializes the payload behind a generic Invalid params", () => {
158
- // How the agent-side SDK answers a request its schema rejects.
159
- expect(
160
- requestErrorReason(
161
- RequestError.invalidParams({ _errors: ["model: Invalid option"] }),
162
- ),
163
- ).toBe('{"_errors":["model: Invalid option"]}');
164
- });
165
-
166
- test("decodes claude-agent-acp's prompt-time 401 from its message", () => {
167
- // RequestError.internalError({ errorKind }, cliText) as the adapter raises
168
- // it: the CLI's text rides the message and the payload only names a kind.
169
- const rejection = new RequestError(
170
- -32603,
171
- "Internal error: Failed to authenticate. API Error: 401 OAuth access token has expired.",
172
- { errorKind: "authentication_failed" },
173
- );
174
-
175
- expect(requestErrorReason(rejection)).toBe(rejection.message);
176
- expect(isClaudeAuthFailureMessage(requestErrorReason(rejection))).toBe(
177
- true,
178
- );
179
- });
180
-
181
- test("stringifies a rejection that is not an object at all", () => {
182
- expect(requestErrorReason("plain string")).toBe("plain string");
183
- expect(requestErrorReason(-32603)).toBe("-32603");
184
- expect(requestErrorReason(null)).toBe("null");
185
- });
186
- });
187
-
188
92
  describe("AcpAuthRequiredError", () => {
189
93
  test("is an Error that carries the agent id and its message", () => {
190
94
  const err = new AcpAuthRequiredError("claude", "needs a reconnect");
@@ -1,13 +1,9 @@
1
1
  import { describe, expect, test } from "bun:test";
2
2
 
3
- import type {
4
- SessionConfigOption,
5
- SessionNotification,
6
- } from "@agentclientprotocol/sdk";
3
+ import type { SessionNotification } from "@agentclientprotocol/sdk";
7
4
 
8
5
  import type { AssistantEvent } from "../../api/index.js";
9
6
  import { VellumAcpClientHandler } from "../client-handler.js";
10
- import { modelOption } from "./helpers/acp-model-option.js";
11
7
 
12
8
  const ACP_SESSION_ID = "acp-session-abc";
13
9
  const PARENT_CONVERSATION_ID = "conv-xyz";
@@ -15,21 +11,16 @@ const PARENT_CONVERSATION_ID = "conv-xyz";
15
11
  function makeHandler(): {
16
12
  handler: VellumAcpClientHandler;
17
13
  sent: AssistantEvent[];
18
- configOptionUpdates: SessionConfigOption[][];
19
14
  } {
20
15
  const sent: AssistantEvent[] = [];
21
- const configOptionUpdates: SessionConfigOption[][] = [];
22
16
  const handler = new VellumAcpClientHandler(
23
17
  ACP_SESSION_ID,
24
18
  (msg) => {
25
19
  sent.push(msg);
26
20
  },
27
21
  PARENT_CONVERSATION_ID,
28
- (configOptions) => {
29
- configOptionUpdates.push(configOptions);
30
- },
31
22
  );
32
- return { handler, sent, configOptionUpdates };
23
+ return { handler, sent };
33
24
  }
34
25
 
35
26
  describe("VellumAcpClientHandler.sessionUpdate", () => {
@@ -791,82 +782,3 @@ describe("VellumAcpClientHandler seq + enriched fields", () => {
791
782
  expect(msg.toolTitle).toContain("<redacted");
792
783
  });
793
784
  });
794
-
795
- describe("VellumAcpClientHandler config_option_update", () => {
796
- const MODEL_OPTION = modelOption("sonnet");
797
-
798
- const THOUGHT_OPTION: SessionConfigOption = {
799
- type: "boolean",
800
- id: "thinking",
801
- name: "Extended thinking",
802
- currentValue: true,
803
- };
804
-
805
- function configOptionUpdate(
806
- configOptions: SessionConfigOption[],
807
- ): SessionNotification {
808
- return {
809
- sessionId: ACP_SESSION_ID,
810
- update: { sessionUpdate: "config_option_update", configOptions },
811
- };
812
- }
813
-
814
- test("invokes the callback with the full option array", async () => {
815
- const { handler, sent, configOptionUpdates } = makeHandler();
816
-
817
- await handler.sessionUpdate(
818
- configOptionUpdate([MODEL_OPTION, THOUGHT_OPTION]),
819
- );
820
-
821
- expect(configOptionUpdates).toEqual([[MODEL_OPTION, THOUGHT_OPTION]]);
822
- expect(sent).toHaveLength(0);
823
- });
824
-
825
- test("callback fires during replay suppression", async () => {
826
- const { handler, sent, configOptionUpdates } = makeHandler();
827
-
828
- handler.beginReplaySuppression();
829
- await handler.sessionUpdate(configOptionUpdate([MODEL_OPTION]));
830
-
831
- expect(configOptionUpdates).toEqual([[MODEL_OPTION]]);
832
- expect(sent).toHaveLength(0);
833
- });
834
-
835
- test("a handler without the callback tolerates the update", async () => {
836
- const sent: AssistantEvent[] = [];
837
- const handler = new VellumAcpClientHandler(
838
- ACP_SESSION_ID,
839
- (msg) => {
840
- sent.push(msg);
841
- },
842
- PARENT_CONVERSATION_ID,
843
- );
844
-
845
- await handler.sessionUpdate(configOptionUpdate([MODEL_OPTION]));
846
-
847
- expect(sent).toHaveLength(0);
848
- });
849
-
850
- test("the remaining unhandled update types stay unforwarded", async () => {
851
- const { handler, sent, configOptionUpdates } = makeHandler();
852
-
853
- await handler.sessionUpdate({
854
- sessionId: ACP_SESSION_ID,
855
- update: {
856
- sessionUpdate: "available_commands_update",
857
- availableCommands: [{ name: "create_plan", description: "Plan work" }],
858
- },
859
- });
860
- await handler.sessionUpdate({
861
- sessionId: ACP_SESSION_ID,
862
- update: { sessionUpdate: "current_mode_update", currentModeId: "ask" },
863
- });
864
- await handler.sessionUpdate({
865
- sessionId: ACP_SESSION_ID,
866
- update: { sessionUpdate: "session_info_update", title: "Refactor" },
867
- });
868
-
869
- expect(sent).toHaveLength(0);
870
- expect(configOptionUpdates).toHaveLength(0);
871
- });
872
- });
@@ -66,11 +66,7 @@ function buildSessionWithFakeProcess(opts: {
66
66
  kill: () => {},
67
67
  spawn: () => {},
68
68
  initialize: () => Promise.resolve(),
69
- createSession: () =>
70
- Promise.resolve({
71
- sessionId: opts.protocolSessionId,
72
- configOptions: [],
73
- }),
69
+ createSession: () => Promise.resolve(opts.protocolSessionId),
74
70
  cancel: () => Promise.resolve(),
75
71
  markStderr: () => 0,
76
72
  stderrSince: () => "",