@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
@@ -1,126 +0,0 @@
1
- // ---------------------------------------------------------------------------
2
- // Memory retrospective: cursor timestamp backfill.
3
- // ---------------------------------------------------------------------------
4
- //
5
- // State rows written before `last_processed_created_at` existed carry an
6
- // id-only cursor, which stops bounding reads the moment its row is deleted
7
- // (see `memory-retrospective-state.ts`). This pass copies `createdAt` from
8
- // each such row's message while the message still exists. Rows whose message
9
- // is already gone stay NULL: nothing remains to recover, and they are counted
10
- // so the stall is visible in the log. Runs detached at daemon init (ahead of
11
- // any client regenerating a reply) and again at memory-worker startup;
12
- // idempotent, keyset-paginated by conversation id, and yielding between pages.
13
-
14
- import { and, asc, eq, gt, isNull, ne } from "drizzle-orm";
15
-
16
- import { messageCreatedAtByIds } from "../../../persistence/message-reads.js";
17
- import { memoryRetrospectiveState } from "../../../persistence/schema/index.js";
18
- import { withSqliteRetry } from "./host-utils.js";
19
- import { getLogger } from "./logging.js";
20
- import { memoryDbOrNull } from "./memory-db.js";
21
- import { ensureRetrospectiveCursorColumn } from "./memory-retrospective-state.js";
22
-
23
- const log = getLogger("memory-retrospective-cursor-backfill");
24
-
25
- const DEFAULT_PAGE_SIZE = 500;
26
-
27
- export interface CursorBackfillResult {
28
- /** Rows with a cursor id but no timestamp. */
29
- scanned: number;
30
- /** Rows whose message still exists and received its `createdAt`. */
31
- backfilled: number;
32
- /** Rows whose cursor message no longer exists; left NULL. */
33
- unrecoverable: number;
34
- }
35
-
36
- /**
37
- * Fill `last_processed_created_at` on every state row that has a cursor id
38
- * but no timestamp. Best-effort: a missing memory connection or column is a
39
- * no-op, and a row the job rewrites mid-pass is skipped by the update's
40
- * `IS NULL` guard rather than stomped. Pages by conversation id so a large
41
- * backlog never materializes at once or holds the event loop.
42
- */
43
- export async function backfillRetrospectiveCursorTimestamps(opts?: {
44
- pageSize?: number;
45
- }): Promise<CursorBackfillResult> {
46
- const pageSize = opts?.pageSize ?? DEFAULT_PAGE_SIZE;
47
- const result: CursorBackfillResult = {
48
- scanned: 0,
49
- backfilled: 0,
50
- unrecoverable: 0,
51
- };
52
- const context = "backfillRetrospectiveCursorTimestamps";
53
- const mdb = memoryDbOrNull(context);
54
- if (!mdb || !ensureRetrospectiveCursorColumn(context)) {
55
- return result;
56
- }
57
-
58
- let afterConversationId = "";
59
- for (;;) {
60
- const page = mdb
61
- .select({
62
- conversationId: memoryRetrospectiveState.conversationId,
63
- messageId: memoryRetrospectiveState.lastProcessedMessageId,
64
- })
65
- .from(memoryRetrospectiveState)
66
- .where(
67
- and(
68
- isNull(memoryRetrospectiveState.lastProcessedCreatedAt),
69
- ne(memoryRetrospectiveState.lastProcessedMessageId, ""),
70
- gt(memoryRetrospectiveState.conversationId, afterConversationId),
71
- ),
72
- )
73
- .orderBy(asc(memoryRetrospectiveState.conversationId))
74
- .limit(pageSize)
75
- .all();
76
- if (page.length === 0) {
77
- break;
78
- }
79
- afterConversationId = page[page.length - 1]!.conversationId;
80
- result.scanned += page.length;
81
-
82
- const createdAtById = messageCreatedAtByIds(
83
- page.map((row) => row.messageId),
84
- );
85
- const recoverable = page.flatMap((row) => {
86
- const createdAt = createdAtById.get(row.messageId);
87
- return createdAt === undefined ? [] : [{ ...row, createdAt }];
88
- });
89
- result.unrecoverable += page.length - recoverable.length;
90
-
91
- if (recoverable.length > 0) {
92
- await withSqliteRetry(
93
- () => {
94
- mdb.transaction((tx) => {
95
- for (const row of recoverable) {
96
- tx.update(memoryRetrospectiveState)
97
- .set({ lastProcessedCreatedAt: row.createdAt })
98
- .where(
99
- and(
100
- eq(
101
- memoryRetrospectiveState.conversationId,
102
- row.conversationId,
103
- ),
104
- eq(
105
- memoryRetrospectiveState.lastProcessedMessageId,
106
- row.messageId,
107
- ),
108
- isNull(memoryRetrospectiveState.lastProcessedCreatedAt),
109
- ),
110
- )
111
- .run();
112
- }
113
- });
114
- },
115
- { op: context, context: { afterConversationId } },
116
- );
117
- result.backfilled += recoverable.length;
118
- }
119
- await Bun.sleep(0);
120
- }
121
-
122
- if (result.backfilled > 0 || result.unrecoverable > 0) {
123
- log.info(result, "Retrospective cursor timestamps backfilled");
124
- }
125
- return result;
126
- }
@@ -1,79 +0,0 @@
1
- // ---------------------------------------------------------------------------
2
- // Memory retrospective: keep the cursor's timestamp when its row is deleted.
3
- // ---------------------------------------------------------------------------
4
- //
5
- // The cursor normally sits on the latest assistant reply, and the retry route
6
- // deletes exactly that row when the user regenerates it. A cursor written
7
- // before the timestamp column existed carries only the id, so once the row is
8
- // gone nothing can place it. The `message-deleted` hook delivers each deleted
9
- // row's `(createdAt, id)` here: when the conversation's cursor is among the
10
- // rows and has no timestamp yet, the row's `createdAt` is recorded. The
11
- // timestamps travel in the call, so the write does not need the rows to
12
- // still exist.
13
-
14
- import { and, eq, isNull } from "drizzle-orm";
15
-
16
- import { memoryRetrospectiveState } from "../../../persistence/schema/index.js";
17
- import { withSqliteRetry } from "./host-utils.js";
18
- import { getLogger } from "./logging.js";
19
- import { memoryDbOrNull } from "./memory-db.js";
20
- import { ensureRetrospectiveCursorColumn } from "./memory-retrospective-state.js";
21
-
22
- const log = getLogger("memory-retrospective-cursor-preserve");
23
-
24
- /**
25
- * Record `createdAt` on the conversation's retrospective cursor when it points
26
- * at one of `rows` and has no timestamp yet. Best-effort: an unavailable
27
- * memory connection or column is a no-op, and a cursor the job has moved
28
- * since the caller read it is skipped by the `IS NULL` guard.
29
- */
30
- export async function preserveRetrospectiveCursorTimestamps(
31
- conversationId: string,
32
- rows: ReadonlyArray<{ id: string; createdAt: number }>,
33
- ): Promise<void> {
34
- if (rows.length === 0) {
35
- return;
36
- }
37
- const context = "preserveRetrospectiveCursorTimestamps";
38
- try {
39
- const mdb = memoryDbOrNull(context);
40
- if (!mdb || !ensureRetrospectiveCursorColumn(context)) {
41
- return;
42
- }
43
- const state = mdb
44
- .select({
45
- messageId: memoryRetrospectiveState.lastProcessedMessageId,
46
- createdAt: memoryRetrospectiveState.lastProcessedCreatedAt,
47
- })
48
- .from(memoryRetrospectiveState)
49
- .where(eq(memoryRetrospectiveState.conversationId, conversationId))
50
- .get();
51
- if (!state || state.createdAt !== null) {
52
- return;
53
- }
54
- const row = rows.find((candidate) => candidate.id === state.messageId);
55
- if (!row) {
56
- return;
57
- }
58
- await withSqliteRetry(
59
- () =>
60
- mdb
61
- .update(memoryRetrospectiveState)
62
- .set({ lastProcessedCreatedAt: row.createdAt })
63
- .where(
64
- and(
65
- eq(memoryRetrospectiveState.conversationId, conversationId),
66
- eq(memoryRetrospectiveState.lastProcessedMessageId, row.id),
67
- isNull(memoryRetrospectiveState.lastProcessedCreatedAt),
68
- ),
69
- )
70
- .run(),
71
- { op: context, context: { conversationId } },
72
- );
73
- } catch (err) {
74
- log.warn(
75
- { err, conversationId },
76
- "could not preserve the retrospective cursor timestamp before its row was deleted",
77
- );
78
- }
79
- }
@@ -1,28 +0,0 @@
1
- // ---------------------------------------------------------------------------
2
- // Memory retrospective: the cursor a state row hands to the messages-after
3
- // reads.
4
- // ---------------------------------------------------------------------------
5
-
6
- import type { MessageCursor } from "../../../persistence/message-cursor.js";
7
-
8
- /**
9
- * The `(createdAt, id)` cursor a retrospective state row carries, or null
10
- * when nothing has been processed yet (no row, or the `""` sentinel left by
11
- * failure-only attempts). The timestamp lets the reads keep their bound after
12
- * the cursor's row is deleted, which is what a regenerated reply does to the
13
- * latest assistant message the cursor usually sits on.
14
- */
15
- export function retrospectiveCursor(
16
- state: {
17
- lastProcessedMessageId: string;
18
- lastProcessedCreatedAt?: number | null;
19
- } | null,
20
- ): MessageCursor | null {
21
- if (!state || state.lastProcessedMessageId === "") {
22
- return null;
23
- }
24
- return {
25
- id: state.lastProcessedMessageId,
26
- createdAt: state.lastProcessedCreatedAt ?? null,
27
- };
28
- }
@@ -1,9 +0,0 @@
1
- /**
2
- * Plugin-local re-export of the workspace SKILL.md mtime poll so hook files
3
- * under `hooks/` do not grow a new escaping specifier. The daemon module is
4
- * already a memory-plugin baseline import from `startup.ts` / `worker.ts`.
5
- */
6
- export {
7
- startWorkspaceSkillMdMtimePoll,
8
- stopWorkspaceSkillMdMtimePoll,
9
- } from "../../../daemon/skill-memory-refresh.js";
@@ -1,63 +0,0 @@
1
- import { describe, expect, test } from "bun:test";
2
-
3
- import {
4
- GEMINI_3_UNSIGNED_TOOL_CALL_THOUGHT_SIGNATURE,
5
- isGemini3Model,
6
- unsignedThoughtSignatureFallback,
7
- } from "./gemini-thought-signature.js";
8
-
9
- describe("isGemini3Model", () => {
10
- test("matches native Gemini 3 ids", () => {
11
- expect(isGemini3Model("gemini-3.7-flash")).toBe(true);
12
- expect(isGemini3Model("models/gemini-3.1-pro-preview")).toBe(true);
13
- });
14
-
15
- test("matches OpenAI-compatible catalog prefixes", () => {
16
- expect(isGemini3Model("google/gemini-3.7-flash")).toBe(true);
17
- });
18
-
19
- test("does not match Gemini 2.5 or unrelated ids", () => {
20
- expect(isGemini3Model("gemini-2.5-flash")).toBe(false);
21
- expect(isGemini3Model("gpt-5.2")).toBe(false);
22
- });
23
- });
24
-
25
- describe("unsignedThoughtSignatureFallback", () => {
26
- test("stamps the dummy on the first unsigned Gemini 3 call", () => {
27
- expect(
28
- unsignedThoughtSignatureFallback([undefined, undefined], {
29
- model: "gemini-3.7-flash",
30
- }),
31
- ).toEqual({
32
- index: 0,
33
- signature: GEMINI_3_UNSIGNED_TOOL_CALL_THOUGHT_SIGNATURE,
34
- });
35
- });
36
-
37
- test("does not stamp when any call already has a signature", () => {
38
- expect(
39
- unsignedThoughtSignatureFallback(["signed-thought-1", undefined], {
40
- model: "gemini-3.7-flash",
41
- }),
42
- ).toBeUndefined();
43
- });
44
-
45
- test("does not stamp for non-Gemini-3 models when a model id is provided", () => {
46
- expect(
47
- unsignedThoughtSignatureFallback([undefined], { model: "gpt-5.2" }),
48
- ).toBeUndefined();
49
- });
50
-
51
- test("stamps unsigned calls when no model gate is supplied", () => {
52
- expect(unsignedThoughtSignatureFallback([undefined])).toEqual({
53
- index: 0,
54
- signature: GEMINI_3_UNSIGNED_TOOL_CALL_THOUGHT_SIGNATURE,
55
- });
56
- });
57
-
58
- test("does not stamp an empty function-call list", () => {
59
- expect(
60
- unsignedThoughtSignatureFallback([], { model: "gemini-3.7-flash" }),
61
- ).toBeUndefined();
62
- });
63
- });
@@ -1,44 +0,0 @@
1
- /**
2
- * Gemini 3.x requires a thought signature on the first function-call part of
3
- * each step. When history has no captured signature (unsigned tool_use from an
4
- * earlier provider, or a client-injected call), Google documents these dummy
5
- * values to skip validation.
6
- */
7
- export const GEMINI_3_UNSIGNED_TOOL_CALL_THOUGHT_SIGNATURE =
8
- "context_engineering_is_the_way_to_go";
9
-
10
- /**
11
- * True for Gemini 3.x model ids, including the native `models/` prefix and
12
- * OpenAI-compatible catalog prefixes such as `google/gemini-3.7-flash`.
13
- */
14
- export function isGemini3Model(model: string): boolean {
15
- if (model.startsWith("gemini-3") || model.startsWith("models/gemini-3")) {
16
- return true;
17
- }
18
- return /\/gemini-3/.test(model);
19
- }
20
-
21
- /**
22
- * Decide whether unsigned function-call history should receive Google's
23
- * documented dummy thought signature. Returns the first call's index when
24
- * every call is unsigned. Pass `model` to restrict this to Gemini 3.x;
25
- * omit it for retry backfills that already observed a thought-signature 4xx.
26
- */
27
- export function unsignedThoughtSignatureFallback(
28
- signatures: ReadonlyArray<string | undefined | null>,
29
- options?: { model?: string },
30
- ): { index: 0; signature: string } | undefined {
31
- if (options?.model !== undefined && !isGemini3Model(options.model)) {
32
- return undefined;
33
- }
34
- if (signatures.length === 0) {
35
- return undefined;
36
- }
37
- if (signatures.some((signature) => Boolean(signature))) {
38
- return undefined;
39
- }
40
- return {
41
- index: 0,
42
- signature: GEMINI_3_UNSIGNED_TOOL_CALL_THOUGHT_SIGNATURE,
43
- };
44
- }