@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
@@ -12,15 +12,6 @@
12
12
  import { tmpdir } from "node:os";
13
13
  import { afterAll, beforeEach, describe, expect, mock, test } from "bun:test";
14
14
 
15
- import type { SessionConfigOption } from "@agentclientprotocol/sdk";
16
-
17
- import {
18
- MODEL_OPTION_MODELS,
19
- modelOption,
20
- modelOptionWithoutCurrent,
21
- nonModelOption,
22
- } from "./helpers/acp-model-option.js";
23
-
24
15
  // ---------------------------------------------------------------------------
25
16
  // Fake AcpAgentProcess with scriptable capabilities and history replay.
26
17
  // ---------------------------------------------------------------------------
@@ -40,24 +31,6 @@ let promptThrowsSync = false;
40
31
  * the resume has not yet settled.
41
32
  */
42
33
  let resumeSessionGate: Promise<void> | null = null;
43
- /** Config options session/resume and session/load report back. */
44
- let resumeConfigOptions: SessionConfigOption[] = [];
45
- /**
46
- * One `config_option_update` per entry, announced during session/load's
47
- * replay, the way an adapter reports what the reattached session moved
48
- * through before the load resolves.
49
- */
50
- let replayConfigOptionUpdates: SessionConfigOption[][] = [];
51
- /** When set, setConfigOption rejects with it (the adapter refusing a pin). */
52
- let setConfigOptionError: Error | null = null;
53
- /** When set, setConfigOption answers with this instead of the moved selector. */
54
- let setConfigOptionResult: SessionConfigOption[] | null = null;
55
- /** Every `setConfigOption` the manager dispatched during a resume. */
56
- const setConfigOptionCalls: Array<{
57
- sessionId: string;
58
- configId: string;
59
- value: string | boolean;
60
- }> = [];
61
34
  const fakeInstances: FakeAcpAgentProcess[] = [];
62
35
 
63
36
  class FakeAcpAgentProcess {
@@ -94,63 +67,24 @@ class FakeAcpAgentProcess {
94
67
  return fakeCaps.resume;
95
68
  }
96
69
 
97
- async createSession(
98
- _cwd: string,
99
- ): Promise<{ sessionId: string; configOptions: SessionConfigOption[] }> {
100
- return { sessionId: "proto-new", configOptions: [] };
70
+ async createSession(_cwd: string): Promise<string> {
71
+ return "proto-new";
101
72
  }
102
73
 
103
- async loadSession(
104
- sessionId: string,
105
- cwd: string,
106
- ): Promise<{ configOptions: SessionConfigOption[] }> {
74
+ async loadSession(sessionId: string, cwd: string): Promise<void> {
107
75
  this.loadSessionCalls.push({ sessionId, cwd });
108
76
  // Replay history through the client handler before resolving, exactly
109
77
  // as a real agent does per the ACP spec for session/load.
110
78
  for (const text of replayChunks) {
111
79
  await this.emitChunk(text);
112
80
  }
113
- for (const configOptions of replayConfigOptionUpdates) {
114
- await this.emitConfigOptions(configOptions);
115
- }
116
- return { configOptions: resumeConfigOptions };
117
81
  }
118
82
 
119
- async resumeSession(
120
- sessionId: string,
121
- cwd: string,
122
- ): Promise<{ configOptions: SessionConfigOption[] }> {
83
+ async resumeSession(sessionId: string, cwd: string): Promise<void> {
123
84
  if (resumeSessionGate) {
124
85
  await resumeSessionGate;
125
86
  }
126
87
  this.resumeSessionCalls.push({ sessionId, cwd });
127
- return { configOptions: resumeConfigOptions };
128
- }
129
-
130
- /** Answers the way an adapter does: the selector now sits on `value`. */
131
- async setConfigOption(
132
- sessionId: string,
133
- configId: string,
134
- value: string | boolean,
135
- ): Promise<SessionConfigOption[]> {
136
- setConfigOptionCalls.push({ sessionId, configId, value });
137
- if (setConfigOptionError) {
138
- throw setConfigOptionError;
139
- }
140
- if (setConfigOptionResult) {
141
- return setConfigOptionResult;
142
- }
143
- return typeof value === "string"
144
- ? [modelOption(value)]
145
- : resumeConfigOptions;
146
- }
147
-
148
- /** Drives a config_option_update through the real client handler. */
149
- async emitConfigOptions(configOptions: SessionConfigOption[]): Promise<void> {
150
- await this.clientFactory(this).sessionUpdate({
151
- sessionId: "proto-old",
152
- update: { sessionUpdate: "config_option_update", configOptions },
153
- });
154
88
  }
155
89
 
156
90
  /** Drives an agent_message_chunk through the real client handler. */
@@ -240,7 +174,7 @@ mock.module("../prepare-agent-env.js", () => ({
240
174
  type ResolveResult =
241
175
  | {
242
176
  ok: true;
243
- agent: { command: string; args: string[]; model?: string };
177
+ agent: { command: string; args: string[] };
244
178
  }
245
179
  | { ok: false; reason: "binary_not_found"; hint: string; command: string };
246
180
  let resolveImpl: (id: string) => ResolveResult = () => ({
@@ -278,7 +212,6 @@ import type { AssistantEvent } from "../../api/index.js";
278
212
  import { getSqlite } from "../../persistence/db-connection.js";
279
213
  import { initializeDb } from "../../persistence/db-init.js";
280
214
  import type { AcpSessionState } from "../types.js";
281
- import { AcpConfigOptionRefusedError } from "../types.js";
282
215
  import {
283
216
  clearHistory,
284
217
  insertHistoryRow,
@@ -331,11 +264,6 @@ beforeEach(() => {
331
264
  prepareAgentEnvGate = null;
332
265
  prepareAgentEnvCommands = [];
333
266
  resumeSessionGate = null;
334
- resumeConfigOptions = [];
335
- replayConfigOptionUpdates = [];
336
- setConfigOptionError = null;
337
- setConfigOptionResult = null;
338
- setConfigOptionCalls.length = 0;
339
267
  resolveImpl = () => ({
340
268
  ok: true,
341
269
  agent: { command: "claude-agent-acp", args: [] },
@@ -582,7 +510,7 @@ describe("AcpSessionManager.resumeFromHistory", () => {
582
510
  expect(args).toEqual([
583
511
  "add",
584
512
  "--global",
585
- "@agentclientprotocol/claude-agent-acp@0.75.1",
513
+ "@agentclientprotocol/claude-agent-acp",
586
514
  ]);
587
515
  const { cwd, env } = options as { cwd?: string; env?: NodeJS.ProcessEnv };
588
516
  expect(cwd).toBeDefined();
@@ -783,198 +711,6 @@ describe("AcpSessionManager.resumeFromHistory", () => {
783
711
  expect(row.cost_currency).toBe("USD");
784
712
  });
785
713
 
786
- test("a resume with no configured model leaves the adapter on its own", async () => {
787
- fakeCaps.resume = true;
788
- resumeConfigOptions = [modelOption("default")];
789
- insertHistoryRow({ id: "resume-model-1" });
790
-
791
- const manager = new AcpSessionManager(4);
792
- await manager.resumeFromHistory("resume-model-1", () => {});
793
-
794
- expect(setConfigOptionCalls).toEqual([]);
795
- expect((manager.getStatus("resume-model-1") as AcpSessionState).model).toBe(
796
- "default",
797
- );
798
- });
799
-
800
- test("a resume keeps the model the adapter restored from the session", async () => {
801
- fakeCaps.resume = true;
802
- // The bundled Claude profile names opus, but the reattached session was
803
- // running on sonnet and the adapter reports it back.
804
- resolveImpl = () => ({
805
- ok: true,
806
- agent: { command: "claude-agent-acp", args: [], model: "opus" },
807
- });
808
- resumeConfigOptions = [modelOption("sonnet")];
809
- insertHistoryRow({ id: "resume-model-2" });
810
-
811
- const manager = new AcpSessionManager(4);
812
- const sent: AssistantEvent[] = [];
813
- await manager.resumeFromHistory("resume-model-2", (msg) => sent.push(msg));
814
-
815
- expect(setConfigOptionCalls).toEqual([]);
816
- const state = manager.getStatus("resume-model-2") as AcpSessionState;
817
- expect(state.model).toBe("sonnet");
818
- expect(sent.map((m) => m.type)).toEqual([
819
- "acp_session_spawned",
820
- "acp_session_model_update",
821
- ]);
822
- expect(sent.filter((m) => m.type === "acp_session_model_update")).toEqual([
823
- {
824
- type: "acp_session_model_update",
825
- acpSessionId: "resume-model-2",
826
- modelRevisionEpoch: state.modelRevisionEpoch!,
827
- modelRevision: 1,
828
- model: "sonnet",
829
- availableModels: MODEL_OPTION_MODELS,
830
- },
831
- ]);
832
- });
833
-
834
- test("a model named only by the load replay keeps the session off the re-pin", async () => {
835
- fakeCaps.loadSession = true;
836
- // The selector reaches the manager only through the replayed
837
- // notification: the load itself answers with no config options at all.
838
- replayConfigOptionUpdates = [[modelOption("sonnet")]];
839
- resumeConfigOptions = [];
840
- resolveImpl = () => ({
841
- ok: true,
842
- agent: { command: "claude-agent-acp", args: [], model: "opus" },
843
- });
844
- insertHistoryRow({ id: "resume-replay-only" });
845
-
846
- const manager = new AcpSessionManager(4);
847
- const sent: AssistantEvent[] = [];
848
- await manager.resumeFromHistory("resume-replay-only", (msg) =>
849
- sent.push(msg),
850
- );
851
-
852
- // The replay is the adapter reporting what the session came back on, so
853
- // the per-agent default has nothing to put right.
854
- expect(setConfigOptionCalls).toEqual([]);
855
- expect(
856
- (manager.getStatus("resume-replay-only") as AcpSessionState).model,
857
- ).toBe("sonnet");
858
- const modelEvents = sent.filter(
859
- (m) => m.type === "acp_session_model_update",
860
- );
861
- expect(modelEvents.map((m) => m.model)).toEqual(["sonnet", "sonnet"]);
862
- expect(modelEvents[1]).toMatchObject({
863
- acpSessionId: "resume-replay-only",
864
- availableModels: MODEL_OPTION_MODELS,
865
- });
866
- });
867
-
868
- test("a re-pin answered without the selector withdraws the picker the replay announced", async () => {
869
- fakeCaps.loadSession = true;
870
- // The replay puts the selector in front of clients before the re-pin
871
- // runs, so the answer that drops it has something to correct. It names no
872
- // model, which is what leaves the ladder something to apply.
873
- replayConfigOptionUpdates = [[modelOptionWithoutCurrent()]];
874
- resumeConfigOptions = [];
875
- setConfigOptionResult = [nonModelOption()];
876
- resolveImpl = () => ({
877
- ok: true,
878
- agent: { command: "claude-agent-acp", args: [], model: "opus" },
879
- });
880
- insertHistoryRow({
881
- id: "resume-selector-gone",
882
- eventLogJson: JSON.stringify([PERSISTED_EVENT]),
883
- });
884
-
885
- const manager = new AcpSessionManager(4);
886
- const sent: AssistantEvent[] = [];
887
- await manager.resumeFromHistory("resume-selector-gone", (msg) =>
888
- sent.push(msg),
889
- );
890
-
891
- const state = manager.getStatus("resume-selector-gone") as AcpSessionState;
892
- expect(state.model).toBeUndefined();
893
- expect(state.availableModels).toEqual([]);
894
- expect(sent.filter((m) => m.type === "acp_session_model_update")).toEqual([
895
- {
896
- type: "acp_session_model_update",
897
- acpSessionId: "resume-selector-gone",
898
- modelRevisionEpoch: state.modelRevisionEpoch!,
899
- modelRevision: 1,
900
- availableModels: MODEL_OPTION_MODELS,
901
- },
902
- {
903
- type: "acp_session_model_update",
904
- acpSessionId: "resume-selector-gone",
905
- modelRevisionEpoch: state.modelRevisionEpoch!,
906
- modelRevision: 2,
907
- availableModels: [],
908
- },
909
- ]);
910
- });
911
-
912
- test("a re-pin the connection cannot carry tears the resume down", async () => {
913
- fakeCaps.resume = true;
914
- resumeConfigOptions = [modelOptionWithoutCurrent()];
915
- setConfigOptionError = new Error("ACP connection closed");
916
- resolveImpl = () => ({
917
- ok: true,
918
- agent: { command: "claude-agent-acp", args: [], model: "opus" },
919
- });
920
- insertHistoryRow({
921
- id: "resume-pin-transport",
922
- eventLogJson: JSON.stringify([PERSISTED_EVENT]),
923
- });
924
-
925
- const manager = new AcpSessionManager(4);
926
- const sent: AssistantEvent[] = [];
927
- await expect(
928
- manager.resumeFromHistory("resume-pin-transport", (msg) =>
929
- sent.push(msg),
930
- ),
931
- ).rejects.toThrow("ACP connection closed");
932
-
933
- expect(sent.filter((m) => m.type === "acp_session_model_update")).toEqual(
934
- [],
935
- );
936
- expect(manager.getStatus()).toEqual([]);
937
- });
938
-
939
- test("a resume the adapter refuses to re-pin runs on the adapter's model", async () => {
940
- fakeCaps.resume = true;
941
- resumeConfigOptions = [modelOptionWithoutCurrent()];
942
- setConfigOptionError = new AcpConfigOptionRefusedError(
943
- "Invalid value for config option model: opus",
944
- );
945
- resolveImpl = () => ({
946
- ok: true,
947
- agent: { command: "claude-agent-acp", args: [], model: "opus" },
948
- });
949
- insertHistoryRow({
950
- id: "resume-refused-model",
951
- eventLogJson: JSON.stringify([PERSISTED_EVENT]),
952
- });
953
-
954
- const manager = new AcpSessionManager(4);
955
- const sent: AssistantEvent[] = [];
956
- await manager.resumeFromHistory("resume-refused-model", (msg) =>
957
- sent.push(msg),
958
- );
959
-
960
- // State and the published event name the model the run is really on, which
961
- // is whatever the adapter reported, never the one it refused.
962
- expect(
963
- (manager.getStatus("resume-refused-model") as AcpSessionState).model,
964
- ).toBeUndefined();
965
- expect(sent.filter((m) => m.type === "acp_session_model_update")).toEqual([
966
- {
967
- type: "acp_session_model_update",
968
- acpSessionId: "resume-refused-model",
969
- modelRevisionEpoch: (
970
- manager.getStatus("resume-refused-model") as AcpSessionState
971
- ).modelRevisionEpoch!,
972
- modelRevision: 1,
973
- availableModels: MODEL_OPTION_MODELS,
974
- },
975
- ]);
976
- });
977
-
978
714
  test("concurrent resumes of the same id: one wins, the loser fails cleanly without leaking a process", async () => {
979
715
  fakeCaps.resume = true;
980
716
  insertHistoryRow({ id: "race-1" });
@@ -28,10 +28,8 @@ mock.module("../agent-process.js", () => ({
28
28
  }
29
29
  spawn(_cwd: string): void {}
30
30
  async initialize(): Promise<void> {}
31
- async createSession(
32
- _cwd: string,
33
- ): Promise<{ sessionId: string; configOptions: [] }> {
34
- return { sessionId: `proto-${this.agentId}`, configOptions: [] };
31
+ async createSession(_cwd: string): Promise<string> {
32
+ return `proto-${this.agentId}`;
35
33
  }
36
34
  async prompt(): Promise<{ stopReason: string }> {
37
35
  return new Promise(() => {});