@vellumai/assistant 0.12.3-staging.1 → 0.12.3-staging.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (560) hide show
  1. package/ARCHITECTURE.md +43 -29
  2. package/Dockerfile +63 -0
  3. package/docs/architecture/security.md +10 -5
  4. package/docs/architecture/turn-actor.md +2 -0
  5. package/docs/desktop-browser-cli.md +45 -4
  6. package/docs/live-voice-task-outcomes.md +100 -0
  7. package/docs/mode-sessions.md +183 -0
  8. package/docs/voice-input-diagnostics.md +58 -0
  9. package/node_modules/@vellumai/ces-client/node_modules/@vellumai/service-contracts/package.json +2 -1
  10. package/node_modules/@vellumai/ces-client/node_modules/@vellumai/service-contracts/src/index.ts +1 -0
  11. package/node_modules/@vellumai/ces-client/node_modules/@vellumai/service-contracts/src/integration-categories.ts +36 -0
  12. package/node_modules/@vellumai/gateway-client/node_modules/@vellumai/service-contracts/package.json +2 -1
  13. package/node_modules/@vellumai/gateway-client/node_modules/@vellumai/service-contracts/src/index.ts +1 -0
  14. package/node_modules/@vellumai/gateway-client/node_modules/@vellumai/service-contracts/src/integration-categories.ts +36 -0
  15. package/node_modules/@vellumai/gateway-client/src/gateway-ipc-contracts.ts +20 -0
  16. package/node_modules/@vellumai/gateway-client/src/index.ts +4 -1
  17. package/node_modules/@vellumai/gateway-client/src/outbound-contract.ts +38 -7
  18. package/node_modules/@vellumai/gateway-client/src/trust-verdict-contract.ts +5 -6
  19. package/node_modules/@vellumai/service-contracts/package.json +2 -1
  20. package/node_modules/@vellumai/service-contracts/src/index.ts +1 -0
  21. package/node_modules/@vellumai/service-contracts/src/integration-categories.ts +36 -0
  22. package/node_modules/@vellumai/slack-text/src/index.ts +4 -8
  23. package/openapi.yaml +665 -14
  24. package/package.json +1 -1
  25. package/scripts/smoke-desktop-browser-cli.ts +10 -26
  26. package/scripts/smoke-desktop-window-theme.ts +2 -3
  27. package/src/__tests__/agent-loop-output-hooks.test.ts +150 -1
  28. package/src/__tests__/agent-loop-provider-error-recording.test.ts +87 -19
  29. package/src/__tests__/annotate-activity-metadata.test.ts +3 -1
  30. package/src/__tests__/annotate-risk-options.test.ts +2 -0
  31. package/src/__tests__/answered-question-persistence.test.ts +2 -0
  32. package/src/__tests__/anthropic-gateway-shared.test.ts +22 -0
  33. package/src/__tests__/approval-message-composer.test.ts +1 -118
  34. package/src/__tests__/approval-routes-http.test.ts +3 -0
  35. package/src/__tests__/assistant-event-hub-connection-history.test.ts +111 -0
  36. package/src/__tests__/assistant-event-hub-targeted.test.ts +50 -0
  37. package/src/__tests__/assistant-event-targeting.test.ts +186 -0
  38. package/src/__tests__/assistant-stream-state.test.ts +29 -9
  39. package/src/__tests__/browser-fill-credential.test.ts +11 -22
  40. package/src/__tests__/btw-routes.test.ts +4 -1
  41. package/src/__tests__/build-persisted-content.test.ts +1 -1
  42. package/src/__tests__/call-conversation-messages.test.ts +5 -0
  43. package/src/__tests__/call-recovery.test.ts +7 -2
  44. package/src/__tests__/call-routes-http.test.ts +12 -0
  45. package/src/__tests__/call-store.test.ts +7 -2
  46. package/src/__tests__/channel-retry-sweep.test.ts +9 -0
  47. package/src/__tests__/chat-reveal-guard-priming.test.ts +2 -0
  48. package/src/__tests__/checker.test.ts +11 -3
  49. package/src/__tests__/client-os-metadata-persistence.test.ts +35 -1
  50. package/src/__tests__/computer-use-skill-manifest-regression.test.ts +0 -25
  51. package/src/__tests__/computer-use-tools.test.ts +1 -233
  52. package/src/__tests__/config-model-image-provider.test.ts +39 -0
  53. package/src/__tests__/config-schema.test.ts +16 -0
  54. package/src/__tests__/config-watcher.test.ts +24 -0
  55. package/src/__tests__/context-search-agent-runner.test.ts +260 -1
  56. package/src/__tests__/context-search-fanout.test.ts +1 -1
  57. package/src/__tests__/context-search-types.test.ts +7 -7
  58. package/src/__tests__/conversation-agent-loop-disk-pressure.test.ts +8 -2
  59. package/src/__tests__/conversation-agent-loop-fatal-cleanup.test.ts +2 -0
  60. package/src/__tests__/conversation-agent-loop.test.ts +546 -16
  61. package/src/__tests__/conversation-app-control-lifecycle.test.ts +53 -1
  62. package/src/__tests__/conversation-evictor.test.ts +62 -37
  63. package/src/__tests__/conversation-history-boundary-repair-failure.test.ts +174 -0
  64. package/src/__tests__/conversation-loop-db-lock-resilience.test.ts +2 -0
  65. package/src/__tests__/conversation-process-app-control-preactivation.test.ts +2 -0
  66. package/src/__tests__/conversation-retry-route.test.ts +22 -0
  67. package/src/__tests__/conversation-routes-disk-view.test.ts +2 -0
  68. package/src/__tests__/conversation-routes-enabled-plugins.test.ts +2 -0
  69. package/src/__tests__/conversation-routes-guardian-reply.test.ts +10 -0
  70. package/src/__tests__/conversation-routes-hidden-queue.test.ts +2 -0
  71. package/src/__tests__/conversation-routes-slash-commands.test.ts +2 -0
  72. package/src/__tests__/conversation-runtime-assembly.test.ts +29 -0
  73. package/src/__tests__/conversation-surface-snapshots.test.ts +543 -0
  74. package/src/__tests__/conversation-surfaces-action-delivery.test.ts +151 -0
  75. package/src/__tests__/conversation-surfaces-point-at-budget.test.ts +63 -1
  76. package/src/__tests__/conversation-tool-setup-attribution.test.ts +23 -0
  77. package/src/__tests__/conversation-undo.test.ts +61 -0
  78. package/src/__tests__/credential-execution-client.test.ts +6 -6
  79. package/src/__tests__/credential-prompt-route.test.ts +35 -3
  80. package/src/__tests__/cu-unified-flow.test.ts +82 -1
  81. package/src/__tests__/db-mode-sessions-migration.test.ts +175 -0
  82. package/src/__tests__/deterministic-verification-control-plane.test.ts +2 -0
  83. package/src/__tests__/dm-backfill.test.ts +91 -1
  84. package/src/__tests__/document-create-route.test.ts +88 -0
  85. package/src/__tests__/document-sync-tags.test.ts +27 -0
  86. package/src/__tests__/emit-signal-routing-intent.test.ts +142 -2
  87. package/src/__tests__/events-tail-route.test.ts +25 -0
  88. package/src/__tests__/evict-conversations-for-reload.test.ts +57 -8
  89. package/src/__tests__/guardian-action-sweep.test.ts +16 -0
  90. package/src/__tests__/guardian-dispatch.test.ts +13 -0
  91. package/src/__tests__/headless-browser-interactions.test.ts +64 -20
  92. package/src/__tests__/heartbeat-service.test.ts +2 -59
  93. package/src/__tests__/helpers/mock-conversation.ts +21 -0
  94. package/src/__tests__/helpers/native-web-search-harness.ts +2 -0
  95. package/src/__tests__/helpers/verification-sessions-ipc-sim.ts +5 -0
  96. package/src/__tests__/host-cu-proxy.test.ts +46 -2
  97. package/src/__tests__/http-user-message-parity.test.ts +2 -0
  98. package/src/__tests__/image-credentials.test.ts +49 -0
  99. package/src/__tests__/image-service-dispatcher.test.ts +45 -0
  100. package/src/__tests__/inference-profile-session-handler.test.ts +1 -1
  101. package/src/__tests__/interrupt-on-send.test.ts +57 -43
  102. package/src/__tests__/interrupt-turn-note.test.ts +5 -6
  103. package/src/__tests__/llm-catalog-parity.test.ts +2 -2
  104. package/src/__tests__/media-generate-image.test.ts +49 -1
  105. package/src/__tests__/message-provenance-contact-id.test.ts +69 -0
  106. package/src/__tests__/migration-export-to-gcs.test.ts +142 -0
  107. package/src/__tests__/mode-session-history.test.ts +245 -0
  108. package/src/__tests__/mode-session-recovery.test.ts +222 -0
  109. package/src/__tests__/mode-session-wire.test.ts +141 -0
  110. package/src/__tests__/notification-guardian-path.test.ts +7 -0
  111. package/src/__tests__/notification-telegram-adapter.test.ts +2 -2
  112. package/src/__tests__/notification-vellum-adapter.test.ts +34 -0
  113. package/src/__tests__/oauth-provider-serializer.test.ts +12 -0
  114. package/src/__tests__/oauth-providers-routes.test.ts +1 -0
  115. package/src/__tests__/outbound-slack-persistence.test.ts +2 -0
  116. package/src/__tests__/persistence-secret-redaction.test.ts +2 -0
  117. package/src/__tests__/plugin-api-provider.test.ts +5 -0
  118. package/src/__tests__/plugin-api-resolve-credential.test.ts +97 -0
  119. package/src/__tests__/plugin-import-boundary-guard.test.ts +9 -0
  120. package/src/__tests__/process-message-display-content.test.ts +56 -0
  121. package/src/__tests__/reaction-persistence.test.ts +5 -0
  122. package/src/__tests__/request-secret-standalone-channel-gate.test.ts +25 -9
  123. package/src/__tests__/runtime-events-sse-reconnect.test.ts +1 -1
  124. package/src/__tests__/scripted-turn-metadata-persistence.test.ts +73 -0
  125. package/src/__tests__/secret-ingress-http.test.ts +2 -0
  126. package/src/__tests__/secure-keys.test.ts +43 -1
  127. package/src/__tests__/send-endpoint-busy.test.ts +163 -1
  128. package/src/__tests__/server-history-render.test.ts +91 -1
  129. package/src/__tests__/settings-routes.test.ts +50 -1
  130. package/src/__tests__/skill-script-runner-sandbox.test.ts +32 -0
  131. package/src/__tests__/subagent-fork-notifications.test.ts +1 -2
  132. package/src/__tests__/subagent-manager-notify.test.ts +1 -2
  133. package/src/__tests__/subagent-notify-parent.test.ts +146 -39
  134. package/src/__tests__/subagent-notify-stale-rebuild.test.ts +2 -4
  135. package/src/__tests__/surface-completion-in-flight-snapshot.test.ts +2 -0
  136. package/src/__tests__/thread-backfill.test.ts +53 -0
  137. package/src/__tests__/tool-preview-lifecycle.test.ts +2 -0
  138. package/src/__tests__/tool-result-metadata-plumbing.test.ts +3 -1
  139. package/src/__tests__/tool-start-timestamp.test.ts +2 -0
  140. package/src/__tests__/twilio-routes.test.ts +1 -0
  141. package/src/__tests__/web-search-backend-failure.test.ts +1 -1
  142. package/src/activation/progress-store.test.ts +12 -7
  143. package/src/agent/loop.ts +99 -41
  144. package/src/api/events/assistant-turn-start.ts +3 -0
  145. package/src/api/events/generation-handoff.ts +2 -0
  146. package/src/api/events/message-complete.ts +2 -0
  147. package/src/api/events/notification-conversation-created.ts +14 -16
  148. package/src/api/events/notification-intent.ts +4 -2
  149. package/src/api/events/tool-result.ts +85 -0
  150. package/src/api/events/tool-use-start.ts +3 -0
  151. package/src/api/events/user-message-echo.ts +3 -0
  152. package/src/api/index.ts +31 -6
  153. package/src/api/mode-session.test.ts +131 -0
  154. package/src/api/mode-session.ts +148 -0
  155. package/src/api/remember-tool.ts +15 -0
  156. package/src/api/responses/conversation-message.ts +6 -0
  157. package/src/approvals/AGENTS.md +4 -2
  158. package/src/browser/__tests__/operations.test.ts +29 -0
  159. package/src/browser/operation-meta.ts +2 -1
  160. package/src/browser/operations.ts +29 -0
  161. package/src/browser/virtual-desktop-target.ts +2 -8
  162. package/src/bundler/bundle-signer.ts +1 -3
  163. package/src/calls/__tests__/barge-in-guard.test.ts +3 -0
  164. package/src/calls/__tests__/call-controller.test.ts +94 -0
  165. package/src/calls/__tests__/call-funnel-telemetry.test.ts +204 -0
  166. package/src/calls/__tests__/voice-control-protocol.test.ts +15 -0
  167. package/src/calls/__tests__/voice-escalation-judge.test.ts +209 -0
  168. package/src/calls/__tests__/voice-leg-coordinator.test.ts +168 -0
  169. package/src/{live-voice/__tests__/live-voice-metrics.test.ts → calls/__tests__/voice-metrics.test.ts} +32 -38
  170. package/src/calls/__tests__/voice-session-bridge.test.ts +576 -122
  171. package/src/calls/barge-in-guard.ts +5 -0
  172. package/src/calls/call-controller.ts +196 -1
  173. package/src/calls/call-domain.ts +4 -0
  174. package/src/calls/call-store.ts +87 -2
  175. package/src/calls/guardian-action-sweep.ts +22 -8
  176. package/src/calls/media-stream-audio-transcode.ts +1 -3
  177. package/src/calls/typesafe-noul.ts +156 -0
  178. package/src/calls/voice-control-protocol.ts +6 -0
  179. package/src/calls/voice-escalation-judge.ts +145 -0
  180. package/src/calls/voice-escalation-target.ts +10 -0
  181. package/src/calls/voice-leg-coordinator.ts +121 -3
  182. package/src/{live-voice/live-voice-metrics.ts → calls/voice-metrics.ts} +94 -87
  183. package/src/calls/voice-session-bridge.ts +256 -112
  184. package/src/calls/voice-triage-escalate.ts +7 -0
  185. package/src/cli/__tests__/roadmap-cli.test.ts +4 -41
  186. package/src/cli/commands/__tests__/notifications.test.ts +35 -10
  187. package/src/cli/commands/browser.help.ts +4 -5
  188. package/src/cli/commands/browser.ts +0 -1
  189. package/src/cli/commands/clients.help.ts +46 -0
  190. package/src/cli/commands/clients.ts +116 -0
  191. package/src/cli/commands/credentials.help.ts +6 -1
  192. package/src/cli/commands/notifications.help.ts +16 -2
  193. package/src/cli/commands/notifications.ts +30 -8
  194. package/src/cli/commands/roadmap.help.ts +18 -21
  195. package/src/cli/commands/roadmap.ts +4 -21
  196. package/src/cli/lib/__tests__/list-installed-plugins.test.ts +5 -2
  197. package/src/cli/lib/bundled-marketplace.json +84 -34
  198. package/src/cli/lib/plugin-marketplace.ts +8 -0
  199. package/src/cli/lib/publish-plugin.ts +1 -2
  200. package/src/config/__tests__/default-provider.test.ts +3 -1
  201. package/src/config/__tests__/memory-retrospective-schema.test.ts +14 -1
  202. package/src/config/bundled-skills/computer-use/SKILL.md +1 -1
  203. package/src/config/bundled-skills/computer-use/TOOLS.json +89 -1
  204. package/src/config/bundled-skills/image-studio/SKILL.md +17 -2
  205. package/src/config/bundled-skills/image-studio/tools/media-generate-image.ts +7 -11
  206. package/src/config/bundled-skills/sequences/TOOLS.json +1 -5
  207. package/src/config/call-site-defaults.ts +9 -0
  208. package/src/config/feature-flag-registry.json +16 -0
  209. package/src/config/profile-text-generation.test.ts +2 -2
  210. package/src/config/schemas/__tests__/tools.test.ts +31 -0
  211. package/src/config/schemas/call-site-catalog.ts +14 -0
  212. package/src/config/schemas/channels.ts +0 -18
  213. package/src/config/schemas/llm.ts +3 -1
  214. package/src/config/schemas/mcp.ts +2 -1
  215. package/src/config/schemas/memory-retrospective.ts +11 -2
  216. package/src/config/schemas/services.ts +15 -6
  217. package/src/config/schemas/tools.ts +10 -0
  218. package/src/config/session-groups-gate.ts +21 -0
  219. package/src/config/skills.ts +2 -6
  220. package/src/conversations/__tests__/message-consolidation.test.ts +149 -0
  221. package/src/conversations/message-consolidation.ts +102 -5
  222. package/src/credential-execution/ces-connect.test.ts +69 -0
  223. package/src/credential-execution/ces-connect.ts +115 -0
  224. package/src/credential-execution/ces-runtime.ts +55 -93
  225. package/src/credential-execution/executable-discovery.ts +1 -11
  226. package/src/daemon/__tests__/conversation-surfaces-launch.test.ts +10 -1
  227. package/src/daemon/__tests__/inference-profile-notification.test.ts +2 -0
  228. package/src/daemon/browser-mode-session.test.ts +402 -0
  229. package/src/daemon/browser-mode-session.ts +186 -0
  230. package/src/daemon/computer-use-mode-session.test.ts +210 -0
  231. package/src/daemon/computer-use-mode-session.ts +105 -0
  232. package/src/daemon/config-watcher.ts +10 -0
  233. package/src/daemon/conversation-agent-loop-handlers.ts +58 -10
  234. package/src/daemon/conversation-agent-loop.ts +219 -25
  235. package/src/daemon/conversation-evictor.ts +5 -24
  236. package/src/daemon/conversation-history.ts +10 -0
  237. package/src/daemon/conversation-interrupt-repair.ts +4 -43
  238. package/src/daemon/conversation-interrupt.ts +7 -11
  239. package/src/daemon/conversation-messaging.ts +58 -5
  240. package/src/daemon/conversation-mode-session.test.ts +1667 -0
  241. package/src/daemon/conversation-mode-session.ts +1008 -0
  242. package/src/daemon/conversation-process.ts +5 -0
  243. package/src/daemon/conversation-runtime-assembly.ts +10 -20
  244. package/src/daemon/conversation-skill-tools.ts +1 -0
  245. package/src/daemon/conversation-store.ts +4 -4
  246. package/src/daemon/conversation-surface-snapshots.ts +135 -0
  247. package/src/daemon/conversation-surfaces.ts +113 -5
  248. package/src/daemon/conversation-tool-setup.ts +8 -3
  249. package/src/daemon/conversation.ts +143 -41
  250. package/src/daemon/handlers/config-model.ts +7 -5
  251. package/src/daemon/handlers/shared.ts +55 -16
  252. package/src/daemon/host-cu-proxy.ts +51 -22
  253. package/src/daemon/lifecycle.ts +30 -13
  254. package/src/daemon/message-protocol.ts +0 -1
  255. package/src/daemon/message-provenance.ts +28 -4
  256. package/src/daemon/mode-session-startup-recovery.ts +23 -0
  257. package/src/daemon/mode-session-tracking.ts +54 -0
  258. package/src/daemon/process-message.ts +13 -4
  259. package/src/daemon/virtual-desktop-context.ts +21 -0
  260. package/src/desktop/__tests__/fake-desktop.ts +1 -0
  261. package/src/desktop/desktop-accessibility-script.ts +88 -0
  262. package/src/desktop/desktop-accessibility.test.ts +160 -0
  263. package/src/desktop/desktop-accessibility.ts +169 -0
  264. package/src/desktop/desktop-automation-lease.test.ts +76 -68
  265. package/src/desktop/desktop-automation-lease.ts +41 -50
  266. package/src/desktop/desktop-browser-endpoint.ts +4 -0
  267. package/src/desktop/desktop-computer-use-routing.test.ts +330 -0
  268. package/src/desktop/desktop-computer-use.test.ts +449 -0
  269. package/src/desktop/desktop-computer-use.ts +502 -0
  270. package/src/desktop/desktop-dependencies.ts +47 -293
  271. package/src/desktop/desktop-display.ts +2 -2
  272. package/src/desktop/desktop-panel-config.test.ts +13 -3
  273. package/src/desktop/desktop-panel-config.ts +109 -15
  274. package/src/desktop/desktop-session-manager.test.ts +69 -21
  275. package/src/desktop/desktop-session-manager.ts +76 -22
  276. package/src/desktop/desktop-stream-bridge.test.ts +11 -122
  277. package/src/desktop/desktop-stream-bridge.ts +6 -8
  278. package/src/desktop/desktop-window-theme.ts +5 -25
  279. package/src/desktop/virtual-desktop-feature.ts +52 -2
  280. package/src/desktop/virtual-desktop-platform.test.ts +5 -9
  281. package/src/documents/document-store.ts +23 -0
  282. package/src/heartbeat/__tests__/heartbeat-service.test.ts +22 -26
  283. package/src/heartbeat/heartbeat-service.ts +5 -33
  284. package/src/ipc/__tests__/browser-ipc.test.ts +215 -6
  285. package/src/ipc/assistant-server.ts +2 -0
  286. package/src/ipc/routes/__tests__/channel-reply-ipc-routes.test.ts +111 -0
  287. package/src/ipc/routes/channel-reply-ipc-routes.ts +73 -0
  288. package/src/live-voice/__tests__/continuation-judge.test.ts +151 -0
  289. package/src/live-voice/__tests__/live-activity-reporter.test.ts +154 -15
  290. package/src/live-voice/__tests__/live-voice-flux-turn-end.test.ts +743 -31
  291. package/src/live-voice/__tests__/live-voice-look-follow-up.test.ts +191 -10
  292. package/src/live-voice/__tests__/live-voice-session-groups-gate.test.ts +87 -0
  293. package/src/live-voice/__tests__/live-voice-session-manager.test.ts +5 -1
  294. package/src/live-voice/__tests__/live-voice-sight-frame-echo.test.ts +41 -0
  295. package/src/live-voice/__tests__/live-voice-sight-frame.test.ts +1017 -9
  296. package/src/live-voice/__tests__/live-voice-triage-escalate.test.ts +224 -1
  297. package/src/live-voice/__tests__/live-voice-tts-session.test.ts +101 -0
  298. package/src/live-voice/__tests__/live-voice-tts.test.ts +44 -0
  299. package/src/live-voice/__tests__/live-voice-vad.test.ts +939 -75
  300. package/src/live-voice/__tests__/microphone-idle-gate.test.ts +87 -0
  301. package/src/live-voice/__tests__/session-controls.test.ts +23 -0
  302. package/src/live-voice/__tests__/task-outcomes.test.ts +117 -0
  303. package/src/live-voice/__tests__/voice-input-diagnostics.test.ts +117 -0
  304. package/src/live-voice/camera-mode-session.test.ts +265 -0
  305. package/src/live-voice/camera-mode-session.ts +277 -0
  306. package/src/live-voice/continuation-judge.ts +123 -0
  307. package/src/live-voice/live-activity-reporter.ts +115 -6
  308. package/src/live-voice/live-voice-manager.ts +36 -1
  309. package/src/live-voice/live-voice-photo.ts +88 -7
  310. package/src/live-voice/live-voice-session-manager.ts +15 -0
  311. package/src/live-voice/live-voice-session.ts +1443 -747
  312. package/src/live-voice/live-voice-tts.ts +22 -4
  313. package/src/live-voice/microphone-idle-gate.ts +56 -0
  314. package/src/live-voice/protocol.ts +171 -4
  315. package/src/live-voice/session-controls.ts +11 -3
  316. package/src/live-voice/task-outcomes.ts +131 -0
  317. package/src/live-voice/voice-input-diagnostics.ts +117 -0
  318. package/src/mcp/__tests__/manager-tool-caps.test.ts +63 -18
  319. package/src/mcp/__tests__/tool-caps.test.ts +28 -1
  320. package/src/mcp/manager.ts +3 -0
  321. package/src/mcp/tool-caps.ts +12 -4
  322. package/src/media/__tests__/image-models.test.ts +58 -0
  323. package/src/media/image-credentials.ts +5 -0
  324. package/src/media/image-models.ts +52 -0
  325. package/src/media/image-service.ts +8 -0
  326. package/src/media/openrouter-image-service.test.ts +133 -0
  327. package/src/media/openrouter-image-service.ts +153 -0
  328. package/src/media/types.ts +1 -1
  329. package/src/messaging/providers/__tests__/transport-dispatch.test.ts +65 -11
  330. package/src/messaging/providers/discord/send.ts +4 -17
  331. package/src/messaging/providers/discord/transport.ts +2 -2
  332. package/src/messaging/providers/outlook/client.ts +16 -22
  333. package/src/messaging/providers/telegram-bot/send.test.ts +236 -1
  334. package/src/messaging/providers/telegram-bot/send.ts +10 -7
  335. package/src/messaging/providers/telegram-bot/transport.ts +3 -10
  336. package/src/messaging/providers/whatsapp/send.test.ts +169 -4
  337. package/src/monitoring/__tests__/control.test.ts +17 -5
  338. package/src/monitoring/control.ts +15 -5
  339. package/src/notifications/AGENTS.md +1 -1
  340. package/src/notifications/README.md +83 -99
  341. package/src/notifications/__tests__/broadcaster.test.ts +1 -1
  342. package/src/notifications/__tests__/channel-allowlist.test.ts +39 -0
  343. package/src/notifications/__tests__/copy-composer.test.ts +1 -1
  344. package/src/notifications/__tests__/decision-engine.test.ts +79 -2
  345. package/src/notifications/__tests__/deterministic-checks.test.ts +10 -10
  346. package/src/notifications/__tests__/home-feed-side-effect.test.ts +93 -4
  347. package/src/notifications/__tests__/notification-utils.test.ts +18 -0
  348. package/src/notifications/adapters/macos.ts +37 -46
  349. package/src/notifications/broadcaster.ts +5 -6
  350. package/src/notifications/channel-allowlist.ts +44 -0
  351. package/src/notifications/copy-composer.ts +0 -23
  352. package/src/notifications/decision-engine.ts +24 -14
  353. package/src/notifications/deterministic-checks.ts +1 -1
  354. package/src/notifications/emit-signal.ts +123 -37
  355. package/src/notifications/home-feed-side-effect.ts +9 -7
  356. package/src/notifications/notification-utils.ts +19 -0
  357. package/src/notifications/signal.ts +4 -19
  358. package/src/notifications/types.ts +15 -0
  359. package/src/oauth/connection-resolver.ts +1 -2
  360. package/src/oauth/oauth-store.ts +1 -3
  361. package/src/oauth/provider-serializer.ts +7 -0
  362. package/src/oauth/seed-providers.ts +30 -0
  363. package/src/onboarding/onboarding-events-store.ts +99 -12
  364. package/src/persistence/__tests__/client-connection-events-store.test.ts +322 -0
  365. package/src/persistence/client-connection-events-store.ts +377 -0
  366. package/src/persistence/conversation-crud.ts +55 -6
  367. package/src/persistence/conversation-mode-sessions.test.ts +424 -0
  368. package/src/persistence/conversation-mode-sessions.ts +460 -0
  369. package/src/persistence/conversation-queries.ts +6 -19
  370. package/src/persistence/llm-usage-store.ts +3 -9
  371. package/src/persistence/message-metadata.ts +25 -0
  372. package/src/persistence/migrations/381-create-conversation-mode-sessions.ts +41 -0
  373. package/src/persistence/migrations/382-create-client-connection-events.ts +40 -0
  374. package/src/persistence/migrations/__tests__/382-create-client-connection-events.test.ts +56 -0
  375. package/src/persistence/schema/conversations.ts +67 -0
  376. package/src/persistence/schema/infrastructure.ts +29 -0
  377. package/src/persistence/steps.ts +17 -0
  378. package/src/plugin-api/__tests__/plugin-name-env.test.ts +249 -0
  379. package/src/plugin-api/effective-context-window.ts +33 -0
  380. package/src/plugin-api/index.ts +24 -5
  381. package/src/plugin-api/plugin-name-env.ts +125 -0
  382. package/src/plugin-api/resolve-credential.ts +79 -20
  383. package/src/plugin-api/vision-support.test.ts +22 -0
  384. package/src/plugin-api/vision-support.ts +17 -5
  385. package/src/plugins/__tests__/active-plugin-env.test.ts +136 -0
  386. package/src/plugins/active-plugin-env.ts +51 -0
  387. package/src/plugins/defaults/index.ts +24 -0
  388. package/src/plugins/defaults/memory/__tests__/archive-removal-framing.test.ts +64 -0
  389. package/src/plugins/defaults/memory/__tests__/worker-control.test.ts +19 -6
  390. package/src/plugins/defaults/memory/context-search/agent-protocol.ts +9 -12
  391. package/src/plugins/defaults/memory/context-search/agent-runner.ts +78 -22
  392. package/src/plugins/defaults/memory/context-search/format.ts +51 -7
  393. package/src/plugins/defaults/memory/context-search/limits.ts +10 -12
  394. package/src/plugins/defaults/memory/context-search/recall-input.ts +38 -0
  395. package/src/plugins/defaults/memory/context-search/search.ts +8 -14
  396. package/src/plugins/defaults/memory/context-search/sources/conversations.ts +1 -0
  397. package/src/plugins/defaults/memory/context-search/types.ts +1 -11
  398. package/src/plugins/defaults/memory/graph/__tests__/handle-remember-v2.test.ts +11 -4
  399. package/src/plugins/defaults/memory/graph/tool-handlers.ts +12 -21
  400. package/src/plugins/defaults/memory/graph/tools.ts +35 -64
  401. package/src/plugins/defaults/memory/src/memory-eval-routes.ts +2 -3
  402. package/src/plugins/defaults/memory/src/memory-item-routes.test.ts +5 -0
  403. package/src/plugins/defaults/memory/src/memory-item-routes.ts +2 -1
  404. package/src/plugins/defaults/memory/substrate/prompts/consolidation.ts +2 -2
  405. package/src/plugins/defaults/memory/tools.test.ts +124 -9
  406. package/src/plugins/defaults/memory/tools.ts +38 -11
  407. package/src/plugins/defaults/memory/v3/__tests__/pool-log-store.test.ts +165 -27
  408. package/src/plugins/defaults/memory/v3/__tests__/pool-select.test.ts +626 -27
  409. package/src/plugins/defaults/memory/v3/__tests__/shadow-plugin.test.ts +46 -27
  410. package/src/plugins/defaults/memory/v3/orchestrate.ts +78 -38
  411. package/src/plugins/defaults/memory/v3/pool-log-store.ts +65 -79
  412. package/src/plugins/defaults/memory/v3/pool-select.test.ts +14 -5
  413. package/src/plugins/defaults/memory/v3/pool-select.ts +683 -44
  414. package/src/plugins/defaults/memory/worker-control.ts +15 -5
  415. package/src/plugins/defaults/task-progress/__tests__/registration.test.ts +70 -0
  416. package/src/plugins/defaults/task-progress/__tests__/task-progress-context.test.ts +380 -0
  417. package/src/plugins/defaults/task-progress/hooks/post-compact.ts +19 -0
  418. package/src/plugins/defaults/task-progress/hooks/user-prompt-submit.ts +24 -0
  419. package/src/plugins/defaults/task-progress/package.json +14 -0
  420. package/src/plugins/defaults/task-progress/src/apply-task-progress-context.ts +93 -0
  421. package/src/plugins/defaults/task-progress/src/format-task-progress-context.ts +67 -0
  422. package/src/providers/__tests__/context-overflow-error.test.ts +10 -0
  423. package/src/providers/__tests__/search-provider-catalog.test.ts +18 -0
  424. package/src/providers/anthropic/client.ts +10 -1
  425. package/src/providers/anthropic-gateway-shared.ts +6 -0
  426. package/src/providers/fetch-provider-catalog.ts +11 -0
  427. package/src/providers/gemini/client.ts +25 -8
  428. package/src/providers/inference/adapter-factory.ts +1 -1
  429. package/src/providers/jev/client.test.ts +10 -0
  430. package/src/providers/jev/client.ts +20 -4
  431. package/src/providers/model-catalog.ts +4 -3
  432. package/src/providers/openai/__tests__/chat-completions-extra-body.test.ts +94 -1
  433. package/src/providers/openai/__tests__/chat-completions-provider-reasoning.test.ts +106 -1
  434. package/src/providers/openai/__tests__/chat-template-flatten.test.ts +24 -0
  435. package/src/providers/openai/__tests__/google-thought-signature.test.ts +1 -2
  436. package/src/providers/openai/chat-completions-provider.ts +100 -29
  437. package/src/providers/openai/google-thought-signature.ts +0 -6
  438. package/src/providers/openai/responses-provider.ts +23 -1
  439. package/src/providers/ratelimit.ts +1 -3
  440. package/src/providers/search-provider-catalog.ts +24 -0
  441. package/src/providers/speech-to-text/__tests__/deepgram-flux-frames.test.ts +24 -0
  442. package/src/providers/speech-to-text/__tests__/deepgram-flux-realtime.test.ts +7 -1
  443. package/src/providers/speech-to-text/__tests__/vellum-managed-realtime.test.ts +50 -1
  444. package/src/providers/speech-to-text/deepgram-flux-frames.ts +11 -0
  445. package/src/providers/speech-to-text/vellum-managed-flux-realtime.ts +13 -0
  446. package/src/providers/types.ts +5 -0
  447. package/src/routes/control.ts +7 -5
  448. package/src/runtime/AGENTS.md +4 -2
  449. package/src/runtime/actor-trust-resolver.ts +3 -3
  450. package/src/runtime/agent-wake.ts +1 -1
  451. package/src/runtime/approval-message-composer.ts +3 -69
  452. package/src/runtime/assistant-event-hub.ts +73 -75
  453. package/src/runtime/assistant-event-publish-options.ts +7 -0
  454. package/src/runtime/assistant-event-targeting.ts +79 -0
  455. package/src/runtime/assistant-stream-state.ts +13 -100
  456. package/src/runtime/background-job-runner.ts +5 -5
  457. package/src/runtime/channel-retry-sweep.ts +1 -0
  458. package/src/runtime/guardian-action-message-composer.ts +8 -161
  459. package/src/runtime/guardian-reply-router.ts +28 -32
  460. package/src/runtime/http-types.ts +6 -0
  461. package/src/runtime/message-composer-types.ts +3 -61
  462. package/src/runtime/migrations/__tests__/vbundle-import-parity.test.ts +67 -1
  463. package/src/runtime/migrations/vbundle-builder.ts +24 -1
  464. package/src/runtime/migrations/vbundle-import-analyzer.ts +13 -4
  465. package/src/runtime/migrations/vbundle-import-policy.ts +10 -0
  466. package/src/runtime/migrations/vbundle-importer.ts +4 -1
  467. package/src/runtime/migrations/vbundle-streaming-importer.ts +4 -1
  468. package/src/runtime/migrations/vbundle-validator.ts +1 -0
  469. package/src/runtime/pending-interactions-mode-session.test.ts +62 -0
  470. package/src/runtime/pending-interactions.ts +29 -0
  471. package/src/runtime/routes/__tests__/client-history-routes.test.ts +104 -0
  472. package/src/runtime/routes/__tests__/image-generation-routes.test.ts +97 -0
  473. package/src/runtime/routes/__tests__/inference-profiles-routes.test.ts +1 -1
  474. package/src/runtime/routes/__tests__/roadmap-routes.test.ts +29 -6
  475. package/src/runtime/routes/browser-context.ts +31 -11
  476. package/src/runtime/routes/browser-routes.ts +43 -4
  477. package/src/runtime/routes/btw-routes.ts +9 -4
  478. package/src/runtime/routes/client-routes.ts +108 -0
  479. package/src/runtime/routes/conversation-management-routes.ts +4 -1
  480. package/src/runtime/routes/conversation-routes.ts +113 -27
  481. package/src/runtime/routes/credential-prompt-routes.ts +4 -3
  482. package/src/runtime/routes/credential-routes.ts +1 -2
  483. package/src/runtime/routes/desktop-setup-routes.test.ts +9 -18
  484. package/src/runtime/routes/desktop-setup-routes.ts +4 -6
  485. package/src/runtime/routes/documents-routes.ts +51 -0
  486. package/src/runtime/routes/email-routes.ts +3 -7
  487. package/src/runtime/routes/events-routes.ts +75 -54
  488. package/src/runtime/routes/identity-routes.ts +1 -5
  489. package/src/runtime/routes/image-generation-routes.ts +8 -14
  490. package/src/runtime/routes/inbound-message-handler.ts +35 -38
  491. package/src/runtime/routes/inbound-stages/backfill-sender-provenance.test.ts +168 -0
  492. package/src/runtime/routes/inbound-stages/backfill-sender-provenance.ts +96 -0
  493. package/src/runtime/routes/inbound-stages/background-dispatch.test.ts +38 -9
  494. package/src/runtime/routes/inbound-stages/background-dispatch.ts +2 -5
  495. package/src/runtime/routes/inbound-stages/reaction-intercept.ts +2 -0
  496. package/src/runtime/routes/llm-context-normalization.ts +1 -7
  497. package/src/runtime/routes/migration-routes.ts +73 -2
  498. package/src/runtime/routes/notification-routes.ts +10 -0
  499. package/src/runtime/routes/oauth-providers.ts +7 -0
  500. package/src/runtime/routes/plugins-routes.ts +6 -0
  501. package/src/runtime/routes/roadmap-routes.ts +47 -8
  502. package/src/runtime/routes/secret-routes.ts +1 -1
  503. package/src/runtime/routes/settings-routes.ts +10 -4
  504. package/src/runtime/routes/watcher-routes.ts +1 -3
  505. package/src/runtime/trust-class.test.ts +7 -6
  506. package/src/runtime/trust-class.ts +9 -17
  507. package/src/schedule/__tests__/worker-control.test.ts +36 -5
  508. package/src/schedule/worker-control.ts +15 -5
  509. package/src/security/secure-keys.ts +53 -103
  510. package/src/skills/clawhub.ts +3 -8
  511. package/src/skills/managed-store.ts +1 -5
  512. package/src/stt/types.ts +4 -0
  513. package/src/subagent/notify.ts +54 -34
  514. package/src/subagent/parent-notification.ts +6 -0
  515. package/src/telemetry/__tests__/phone-call-funnel.test.ts +72 -0
  516. package/src/telemetry/phone-call-funnel.ts +144 -0
  517. package/src/tools/__tests__/tool-schema-root-combinator-guard.test.ts +81 -0
  518. package/src/tools/ask-question/ask-question-tool.ts +6 -4
  519. package/src/tools/browser/browser-execution.ts +22 -59
  520. package/src/tools/browser/cdp-client/__tests__/cdp-dom-helpers.test.ts +561 -39
  521. package/src/tools/browser/cdp-client/cdp-dom-helpers.ts +435 -39
  522. package/src/tools/browser/cdp-client/cdp-inspect-client.ts +1 -8
  523. package/src/tools/client-os.ts +15 -0
  524. package/src/tools/computer-use/skill-proxy-bridge.ts +1 -1
  525. package/src/tools/computer-use/target.ts +42 -0
  526. package/src/tools/document/document-tool.ts +13 -18
  527. package/src/tools/execution-target.ts +14 -16
  528. package/src/tools/host-terminal/host-shell.ts +4 -1
  529. package/src/tools/network/__tests__/web-fetch-tinyfish.test.ts +250 -0
  530. package/src/tools/network/__tests__/web-search.test.ts +203 -0
  531. package/src/tools/network/web-fetch.ts +274 -7
  532. package/src/tools/network/web-search.ts +468 -6
  533. package/src/tools/permission-checker.ts +3 -3
  534. package/src/tools/policy-context.ts +3 -1
  535. package/src/tools/skills/load.ts +2 -1
  536. package/src/tools/skills/sandbox-runner.ts +11 -2
  537. package/src/tools/skills/skill-script-runner.ts +7 -0
  538. package/src/tools/skills/skill-tool-factory.ts +15 -1
  539. package/src/tools/terminal/__tests__/safe-env.test.ts +11 -0
  540. package/src/tools/terminal/safe-env.ts +4 -0
  541. package/src/tools/terminal/shell.ts +2 -0
  542. package/src/tools/tool-approval-handler.ts +5 -1
  543. package/src/tools/tool-types.ts +3 -3
  544. package/src/tools/types.ts +8 -2
  545. package/src/util/__tests__/worker-process-command.test.ts +5 -4
  546. package/src/util/abort-reasons.ts +18 -26
  547. package/src/util/canonicalize-identity.test.ts +21 -0
  548. package/src/util/canonicalize-identity.ts +16 -0
  549. package/src/util/errors.ts +13 -3
  550. package/src/util/provider-error-patterns.ts +3 -0
  551. package/src/util/worker-process.ts +77 -35
  552. package/src/workspace/migrations/157-add-desktop-files-launcher.ts +94 -0
  553. package/src/workspace/migrations/__tests__/156-extract-workspace-mcp-json.test.ts +4 -10
  554. package/src/workspace/migrations/__tests__/157-add-desktop-files-launcher.test.ts +113 -0
  555. package/src/workspace/migrations/registry.ts +2 -0
  556. package/src/__tests__/computer-use-window-schema.test.ts +0 -24
  557. package/src/api/events/heartbeat-alert.ts +0 -20
  558. package/src/daemon/message-types/web-activity.ts +0 -65
  559. package/src/desktop/desktop-dependencies.test.ts +0 -131
  560. package/src/tools/computer-use/definitions.ts +0 -607
@@ -14,7 +14,7 @@ import { stripAnsiAndControlChars as sanitize } from "../../util/ansi.js";
14
14
  import { applyCommandHelp, subcommand } from "../lib/cli-command-help.js";
15
15
  import { registerCommand } from "../lib/register-command.js";
16
16
  import { log } from "../logger.js";
17
- import { shouldOutputJson, writeError, writeOutput } from "../output.js";
17
+ import { shouldOutputJson, writeOutput } from "../output.js";
18
18
  import { roadmapHelp } from "./roadmap.help.js";
19
19
 
20
20
  // ---------------------------------------------------------------------------
@@ -227,9 +227,6 @@ async function runCreate(cmd: Command, opts: CreateOpts): Promise<void> {
227
227
  interface UpdateOpts {
228
228
  title?: string;
229
229
  description?: string;
230
- status?: string;
231
- tag?: string[];
232
- clearTags?: boolean;
233
230
  }
234
231
 
235
232
  async function runUpdate(
@@ -237,24 +234,11 @@ async function runUpdate(
237
234
  slug: string,
238
235
  opts: UpdateOpts,
239
236
  ): Promise<void> {
240
- if (opts.clearTags && opts.tag) {
241
- writeError(
242
- cmd,
243
- "--clear-tags and --tag conflict. Drop --clear-tags to set tags, or drop --tag to remove them all.",
244
- );
245
- process.exitCode = 1;
246
- return;
247
- }
248
-
249
237
  const item = await call<MutatedRoadmapItem>("roadmap_update", {
250
238
  pathParams: { slug },
251
239
  body: {
252
240
  title: opts.title,
253
241
  description: opts.description,
254
- status: opts.status,
255
- // `--tag` always carries a value, so an empty set is only reachable
256
- // through `--clear-tags`.
257
- tags: opts.clearTags ? [] : opts.tag,
258
242
  },
259
243
  });
260
244
 
@@ -334,10 +318,9 @@ export function registerRoadmapCommand(program: Command): void {
334
318
  makeTagRepeatable(create);
335
319
  create.action((opts: CreateOpts, cmd: Command) => runCreate(cmd, opts));
336
320
 
337
- const update = subcommand(roadmap, "update");
338
- makeTagRepeatable(update);
339
- update.action((slug: string, opts: UpdateOpts, cmd: Command) =>
340
- runUpdate(cmd, slug, opts),
321
+ subcommand(roadmap, "update").action(
322
+ (slug: string, opts: UpdateOpts, cmd: Command) =>
323
+ runUpdate(cmd, slug, opts),
341
324
  );
342
325
 
343
326
  subcommand(roadmap, "delete").action(
@@ -17,6 +17,7 @@ import { tmpdir } from "node:os";
17
17
  import { join } from "node:path";
18
18
  import { afterEach, beforeEach, describe, expect, test } from "bun:test";
19
19
 
20
+ import { getAllDefaultPluginNames } from "../../../plugins/defaults/main.js";
20
21
  import {
21
22
  listAllPlugins,
22
23
  listInstalledPlugins,
@@ -238,10 +239,12 @@ describe("listAllPlugins", () => {
238
239
  test("includes default plugins with source=default", () => {
239
240
  const result = listAllPlugins({ workspacePluginsDir: pluginsDir });
240
241
  const defaults = result.filter((p) => p.source === "default");
241
- // Every default plugin should be present. History repair is not one — it is
242
+ // Every default plugin should be present. History repair is not one: it is
242
243
  // daemon logic invoked directly at its agent-loop call sites (see
243
244
  // `src/agent/history-repair/`), not a registered plugin.
244
- expect(defaults.length).toBe(18);
245
+ expect(defaults.map((p) => p.name).sort()).toEqual(
246
+ [...getAllDefaultPluginNames()].sort(),
247
+ );
245
248
  // Names should all start with "default-".
246
249
  expect(defaults.every((p) => p.name.startsWith("default-"))).toBe(true);
247
250
  // None should be disabled by default in a fresh temp dir.
@@ -175,6 +175,19 @@
175
175
  "license": "MIT",
176
176
  "icon": "\ud83d\udcbb"
177
177
  },
178
+ {
179
+ "name": "ecommerce-wismo-supporter",
180
+ "description": "Resolves ecommerce Where-Is-My-Order (WISMO) support inquiries, cross-checks real-time carrier tracking milestones, flags delivery exceptions, and stages customer update drafts without helpdesk seat taxes.",
181
+ "category": "commerce",
182
+ "icon": "📦",
183
+ "license": "MIT",
184
+ "homepage": "https://github.com/ZeebBoyBlue/ecommerce-wismo-supporter",
185
+ "source": {
186
+ "source": "github",
187
+ "repo": "ZeebBoyBlue/ecommerce-wismo-supporter",
188
+ "ref": "9218c23d325c749500d59b6ae651f38264a43cd1"
189
+ }
190
+ },
178
191
  {
179
192
  "name": "family-briefing",
180
193
  "source": {
@@ -232,7 +245,7 @@
232
245
  "source": {
233
246
  "source": "github",
234
247
  "repo": "vellum-ai/imessage",
235
- "ref": "41b8e9ad87b4975bf3fbdc9a8e46deda489d3d51"
248
+ "ref": "af3d9f79903817358084de74e056422e6ca91fe4"
236
249
  },
237
250
  "description": "iMessage and SMS channel for the Vellum assistant, backed by a Photon line.",
238
251
  "category": "productivity",
@@ -599,7 +612,8 @@
599
612
  "mode": "oauth",
600
613
  "instructions": "Sign in with the Fathom account whose meetings you want to use."
601
614
  },
602
- "logo": "fathom-mcp.png"
615
+ "logo": "fathom-mcp.png",
616
+ "category": "meetings"
603
617
  }
604
618
  },
605
619
  {
@@ -622,7 +636,8 @@
622
636
  "mode": "oauth",
623
637
  "instructions": "A Brex admin must enable AI assistant access and accept the Developer API agreement."
624
638
  },
625
- "logo": "brex-mcp.png"
639
+ "logo": "brex-mcp.png",
640
+ "category": "finance"
626
641
  }
627
642
  },
628
643
  {
@@ -645,7 +660,8 @@
645
660
  "mode": "manual",
646
661
  "instructions": "Ask Ramp to allowlist this client or gateway's exact OAuth redirect URI before connecting."
647
662
  },
648
- "logo": "ramp-mcp.png"
663
+ "logo": "ramp-mcp.png",
664
+ "category": "finance"
649
665
  }
650
666
  },
651
667
  {
@@ -669,6 +685,7 @@
669
685
  "instructions": "Choose the Linear workspace to authorize; access follows your account permissions."
670
686
  },
671
687
  "logo": "linear-mcp.png",
688
+ "category": "engineering",
672
689
  "oauthProvider": "linear"
673
690
  }
674
691
  },
@@ -693,6 +710,7 @@
693
710
  "instructions": "Authorize the Notion workspace and content you want to use."
694
711
  },
695
712
  "logo": "notion-mcp.png",
713
+ "category": "productivity",
696
714
  "oauthProvider": "notion"
697
715
  }
698
716
  },
@@ -716,7 +734,8 @@
716
734
  "mode": "oauth",
717
735
  "instructions": "Sign in to Sentry and authorize the organizations you want to use."
718
736
  },
719
- "logo": "sentry-mcp.png"
737
+ "logo": "sentry-mcp.png",
738
+ "category": "engineering"
720
739
  }
721
740
  },
722
741
  {
@@ -739,7 +758,8 @@
739
758
  "mode": "oauth",
740
759
  "instructions": "Authorize the intended Stripe account and environment; your administrator may need to enable MCP access."
741
760
  },
742
- "logo": "stripe-mcp.png"
761
+ "logo": "stripe-mcp.png",
762
+ "category": "finance"
743
763
  }
744
764
  },
745
765
  {
@@ -762,7 +782,8 @@
762
782
  "mode": "oauth",
763
783
  "instructions": "Requires an Atlassian Cloud site and access allowed by your organization."
764
784
  },
765
- "logo": "atlassian-mcp.png"
785
+ "logo": "atlassian-mcp.png",
786
+ "category": "engineering"
766
787
  }
767
788
  },
768
789
  {
@@ -785,7 +806,8 @@
785
806
  "mode": "oauth",
786
807
  "instructions": "Sign in to the Amplemarket workspace you want to use."
787
808
  },
788
- "logo": "amplemarket-mcp.png"
809
+ "logo": "amplemarket-mcp.png",
810
+ "category": "sales"
789
811
  }
790
812
  },
791
813
  {
@@ -808,7 +830,8 @@
808
830
  "mode": "oauth",
809
831
  "instructions": "An organization admin must enable MCP. Analytics-only organizations are not supported."
810
832
  },
811
- "logo": "ashby-mcp.png"
833
+ "logo": "ashby-mcp.png",
834
+ "category": "recruiting"
812
835
  }
813
836
  },
814
837
  {
@@ -831,7 +854,8 @@
831
854
  "mode": "oauth",
832
855
  "instructions": "Authorize the Attio workspace you want to use."
833
856
  },
834
- "logo": "attio-mcp.png"
857
+ "logo": "attio-mcp.png",
858
+ "category": "sales"
835
859
  }
836
860
  },
837
861
  {
@@ -855,6 +879,7 @@
855
879
  "instructions": "Sign in to Calendly. Available actions depend on your plan and account permissions."
856
880
  },
857
881
  "logo": "calendly-mcp.png",
882
+ "category": "meetings",
858
883
  "oauthProvider": "calendly"
859
884
  }
860
885
  },
@@ -878,7 +903,8 @@
878
903
  "mode": "oauth",
879
904
  "instructions": "Sign in with the Circleback account whose meetings you want to use."
880
905
  },
881
- "logo": "circleback-mcp.png"
906
+ "logo": "circleback-mcp.png",
907
+ "category": "meetings"
882
908
  }
883
909
  },
884
910
  {
@@ -901,7 +927,8 @@
901
927
  "mode": "oauth",
902
928
  "instructions": "Requires workspace access. A workspace admin may need to allow MCP connections."
903
929
  },
904
- "logo": "clay-mcp.png"
930
+ "logo": "clay-mcp.png",
931
+ "category": "sales"
905
932
  }
906
933
  },
907
934
  {
@@ -924,7 +951,8 @@
924
951
  "mode": "oauth",
925
952
  "instructions": "Authorize the Craft workspace and documents you want to use."
926
953
  },
927
- "logo": "craft-mcp.png"
954
+ "logo": "craft-mcp.png",
955
+ "category": "productivity"
928
956
  }
929
957
  },
930
958
  {
@@ -947,7 +975,8 @@
947
975
  "mode": "oauth",
948
976
  "instructions": "An account admin must enable MCP and choose permissions. This endpoint serves US-region accounts."
949
977
  },
950
- "logo": "customer-io-mcp.png"
978
+ "logo": "customer-io-mcp.png",
979
+ "category": "marketing"
951
980
  }
952
981
  },
953
982
  {
@@ -970,7 +999,8 @@
970
999
  "mode": "oauth",
971
1000
  "instructions": "Some tools are experimental or require an Enterprise plan."
972
1001
  },
973
- "logo": "fireflies-mcp.png"
1002
+ "logo": "fireflies-mcp.png",
1003
+ "category": "meetings"
974
1004
  }
975
1005
  },
976
1006
  {
@@ -993,7 +1023,8 @@
993
1023
  "mode": "oauth",
994
1024
  "instructions": "Requires a Gamma account. Generations consume account credits."
995
1025
  },
996
- "logo": "gamma-mcp.png"
1026
+ "logo": "gamma-mcp.png",
1027
+ "category": "productivity"
997
1028
  }
998
1029
  },
999
1030
  {
@@ -1016,7 +1047,8 @@
1016
1047
  "mode": "oauth",
1017
1048
  "instructions": "Sign in to the Guru workspace you want to search."
1018
1049
  },
1019
- "logo": "guru-mcp.png"
1050
+ "logo": "guru-mcp.png",
1051
+ "category": "knowledge"
1020
1052
  }
1021
1053
  },
1022
1054
  {
@@ -1039,7 +1071,8 @@
1039
1071
  "mode": "oauth",
1040
1072
  "instructions": "Authorize one Interactive Brokers account. This integration is unavailable to customers in India or Japan."
1041
1073
  },
1042
- "logo": "interactive-brokers-mcp.png"
1074
+ "logo": "interactive-brokers-mcp.png",
1075
+ "category": "finance"
1043
1076
  }
1044
1077
  },
1045
1078
  {
@@ -1062,7 +1095,8 @@
1062
1095
  "mode": "oauth",
1063
1096
  "instructions": "This endpoint serves US-hosted Intercom workspaces. Australian workspaces are not supported."
1064
1097
  },
1065
- "logo": "intercom-mcp.png"
1098
+ "logo": "intercom-mcp.png",
1099
+ "category": "sales"
1066
1100
  }
1067
1101
  },
1068
1102
  {
@@ -1085,7 +1119,8 @@
1085
1119
  "mode": "oauth",
1086
1120
  "instructions": "A workspace admin must install the Jotform MCP app before individual authorization."
1087
1121
  },
1088
- "logo": "jotform-mcp.png"
1122
+ "logo": "jotform-mcp.png",
1123
+ "category": "productivity"
1089
1124
  }
1090
1125
  },
1091
1126
  {
@@ -1108,7 +1143,8 @@
1108
1143
  "mode": "oauth",
1109
1144
  "instructions": "Requires a paid Juicebox plan. Some exports count against plan limits."
1110
1145
  },
1111
- "logo": "juicebox-mcp.png"
1146
+ "logo": "juicebox-mcp.png",
1147
+ "category": "recruiting"
1112
1148
  }
1113
1149
  },
1114
1150
  {
@@ -1131,7 +1167,8 @@
1131
1167
  "mode": "oauth",
1132
1168
  "instructions": "Requires an Owner, Admin, or Manager role in Klaviyo."
1133
1169
  },
1134
- "logo": "klaviyo-mcp.png"
1170
+ "logo": "klaviyo-mcp.png",
1171
+ "category": "marketing"
1135
1172
  }
1136
1173
  },
1137
1174
  {
@@ -1154,7 +1191,8 @@
1154
1191
  "mode": "oauth",
1155
1192
  "instructions": "Authorize the MailerLite account you want to use."
1156
1193
  },
1157
- "logo": "mailerlite-mcp.png"
1194
+ "logo": "mailerlite-mcp.png",
1195
+ "category": "marketing"
1158
1196
  }
1159
1197
  },
1160
1198
  {
@@ -1177,7 +1215,8 @@
1177
1215
  "mode": "oauth",
1178
1216
  "instructions": "Your Meltwater subscription must include the MCP package."
1179
1217
  },
1180
- "logo": "meltwater-mcp.png"
1218
+ "logo": "meltwater-mcp.png",
1219
+ "category": "marketing"
1181
1220
  }
1182
1221
  },
1183
1222
  {
@@ -1200,7 +1239,8 @@
1200
1239
  "mode": "oauth",
1201
1240
  "instructions": "Authorize the Mem account and content you want to use."
1202
1241
  },
1203
- "logo": "mem-mcp.png"
1242
+ "logo": "mem-mcp.png",
1243
+ "category": "knowledge"
1204
1244
  }
1205
1245
  },
1206
1246
  {
@@ -1223,7 +1263,8 @@
1223
1263
  "mode": "oauth",
1224
1264
  "instructions": "Sign in to the Mercury organization whose financial data you want to use."
1225
1265
  },
1226
- "logo": "mercury-mcp.png"
1266
+ "logo": "mercury-mcp.png",
1267
+ "category": "finance"
1227
1268
  }
1228
1269
  },
1229
1270
  {
@@ -1246,7 +1287,8 @@
1246
1287
  "mode": "oauth",
1247
1288
  "instructions": "A Navan admin must enable MCP for your organization."
1248
1289
  },
1249
- "logo": "navan-mcp.png"
1290
+ "logo": "navan-mcp.png",
1291
+ "category": "finance"
1250
1292
  }
1251
1293
  },
1252
1294
  {
@@ -1269,7 +1311,8 @@
1269
1311
  "mode": "oauth",
1270
1312
  "instructions": "Sign in with the Otter account whose conversations you want to use."
1271
1313
  },
1272
- "logo": "otter-mcp.png"
1314
+ "logo": "otter-mcp.png",
1315
+ "category": "meetings"
1273
1316
  }
1274
1317
  },
1275
1318
  {
@@ -1292,7 +1335,8 @@
1292
1335
  "mode": "oauth",
1293
1336
  "instructions": "Authorize the Profound workspace you want to analyze."
1294
1337
  },
1295
- "logo": "profound-mcp.png"
1338
+ "logo": "profound-mcp.png",
1339
+ "category": "marketing"
1296
1340
  }
1297
1341
  },
1298
1342
  {
@@ -1315,7 +1359,8 @@
1315
1359
  "mode": "oauth",
1316
1360
  "instructions": "Authorize the Readwise library you want to use."
1317
1361
  },
1318
- "logo": "readwise-mcp.png"
1362
+ "logo": "readwise-mcp.png",
1363
+ "category": "knowledge"
1319
1364
  }
1320
1365
  },
1321
1366
  {
@@ -1338,7 +1383,8 @@
1338
1383
  "mode": "oauth",
1339
1384
  "instructions": "Your Semrush plan must include API units. Requests consume those units."
1340
1385
  },
1341
- "logo": "semrush-mcp.png"
1386
+ "logo": "semrush-mcp.png",
1387
+ "category": "marketing"
1342
1388
  }
1343
1389
  },
1344
1390
  {
@@ -1362,6 +1408,7 @@
1362
1408
  "instructions": "Authorize the Todoist account whose tasks and projects you want to use."
1363
1409
  },
1364
1410
  "logo": "todoist-mcp.png",
1411
+ "category": "productivity",
1365
1412
  "oauthProvider": "todoist"
1366
1413
  }
1367
1414
  },
@@ -1385,7 +1432,8 @@
1385
1432
  "mode": "oauth",
1386
1433
  "instructions": "This endpoint serves standard Typeform accounts. EU-hosted accounts use a separate regional endpoint."
1387
1434
  },
1388
- "logo": "typeform-mcp.png"
1435
+ "logo": "typeform-mcp.png",
1436
+ "category": "productivity"
1389
1437
  }
1390
1438
  },
1391
1439
  {
@@ -1408,7 +1456,8 @@
1408
1456
  "mode": "oauth",
1409
1457
  "instructions": "Sign in to the Upwork account you want to use."
1410
1458
  },
1411
- "logo": "upwork-mcp.png"
1459
+ "logo": "upwork-mcp.png",
1460
+ "category": "recruiting"
1412
1461
  }
1413
1462
  },
1414
1463
  {
@@ -1431,7 +1480,8 @@
1431
1480
  "mode": "oauth",
1432
1481
  "instructions": "Authorize specific accounts and capabilities. Hong Kong accounts use a separate regional endpoint."
1433
1482
  },
1434
- "logo": "webull-mcp.png"
1483
+ "logo": "webull-mcp.png",
1484
+ "category": "finance"
1435
1485
  }
1436
1486
  }
1437
1487
  ]
@@ -127,6 +127,14 @@ export const mcpIntegrationSchema = z.object({
127
127
  }),
128
128
  /** Filename under the web client's bundled integration-image directory. */
129
129
  logo: z.string().regex(/^[A-Za-z0-9][A-Za-z0-9_.-]*$/),
130
+ /**
131
+ * Where the integrations catalog files the entry. Any string at this
132
+ * boundary: a catalog newer than this build can name a category it does not
133
+ * know, and one unfamiliar slug must not reject the whole catalog. Clients
134
+ * normalize against the shared vocabulary; the bundled inventory test holds
135
+ * every entry in this repo to it.
136
+ */
137
+ category: z.string().optional(),
130
138
  /** Existing main OAuth provider used to group a related MCP connection. */
131
139
  oauthProvider: z.string().regex(PLUGIN_NAME_RE).optional(),
132
140
  });
@@ -337,8 +337,7 @@ export async function postPublishRequest(
337
337
  },
338
338
  );
339
339
 
340
- const data = (await resp.json()) as PublishResult;
341
- return data;
340
+ return (await resp.json()) as PublishResult;
342
341
  }
343
342
 
344
343
  /**
@@ -73,7 +73,9 @@ describe("LLMSchema.defaultProvider", () => {
73
73
  });
74
74
 
75
75
  test("rejects a structured-decision catalog provider", () => {
76
- expect(() => DefaultProviderSchema.parse({ provider: "jev" })).toThrow();
76
+ expect(() =>
77
+ DefaultProviderSchema.parse({ provider: "typesafe" }),
78
+ ).toThrow();
77
79
  });
78
80
 
79
81
  test("rejects an empty connectionName", () => {
@@ -12,10 +12,11 @@ import { describe, expect, test } from "bun:test";
12
12
  import { MemoryRetrospectiveConfigSchema } from "../schemas/memory-retrospective.js";
13
13
 
14
14
  describe("memory.retrospective config schema", () => {
15
- test("an empty block leaves retrospectives and skill improvement on", () => {
15
+ test("an empty block leaves skill improvement on and monitoring off", () => {
16
16
  const parsed = MemoryRetrospectiveConfigSchema.parse({});
17
17
  expect(parsed.enabled).toBe(true);
18
18
  expect(parsed.skillImprovement).toBe(true);
19
+ expect(parsed.skillImprovementMonitoring).toBe(false);
19
20
  expect(parsed).not.toHaveProperty("forkStrategy");
20
21
  });
21
22
 
@@ -41,6 +42,18 @@ describe("memory.retrospective config schema", () => {
41
42
  ).toBe(false);
42
43
  });
43
44
 
45
+ test("skillImprovementMonitoring is a boolean-only opt-in", () => {
46
+ const parsed = MemoryRetrospectiveConfigSchema.parse({
47
+ skillImprovementMonitoring: true,
48
+ });
49
+ expect(parsed.skillImprovementMonitoring).toBe(true);
50
+ expect(
51
+ MemoryRetrospectiveConfigSchema.safeParse({
52
+ skillImprovementMonitoring: "true",
53
+ }).success,
54
+ ).toBe(false);
55
+ });
56
+
44
57
  test("a leftover forkStrategy key is ignored", () => {
45
58
  const parsed = MemoryRetrospectiveConfigSchema.parse({
46
59
  forkStrategy: "cloning",
@@ -21,7 +21,7 @@ connected desktop. CU tools run through the main agent loop via HostCuProxy.
21
21
  The skill is internally preactivated for conversations with a connected desktop client.
22
22
 
23
23
  Tools in this skill are proxy tools. Execution is forwarded to a connected
24
- desktop client and is never handled locally by the assistant.
24
+ desktop client or handled by the assistant's virtual desktop.
25
25
 
26
26
  ## Observations
27
27