@vellumai/assistant 0.8.5 → 0.8.6

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 (544) hide show
  1. package/AGENTS.md +33 -1
  2. package/ARCHITECTURE.md +1 -1
  3. package/bunfig.toml +6 -1
  4. package/docs/credential-execution-service.md +6 -6
  5. package/docs/plugins.md +4 -3
  6. package/node_modules/@vellumai/skill-host-contracts/src/client.ts +12 -13
  7. package/node_modules/@vellumai/skill-host-contracts/src/skill-host.ts +4 -1
  8. package/node_modules/@vellumai/skill-host-contracts/src/tool-types.ts +16 -14
  9. package/openapi.yaml +1900 -166
  10. package/package.json +1 -1
  11. package/src/__tests__/actor-token-service.test.ts +3 -2
  12. package/src/__tests__/agent-loop-exit-reason.test.ts +102 -9
  13. package/src/__tests__/agent-loop-override-profile.test.ts +2 -1
  14. package/src/__tests__/agent-wake-disk-pressure-callsite.test.ts +1 -0
  15. package/src/__tests__/agent-wake-override-profile.test.ts +1 -0
  16. package/src/__tests__/always-loaded-tools-guard.test.ts +2 -2
  17. package/src/__tests__/annotate-risk-options.test.ts +1 -0
  18. package/src/__tests__/approval-cascade.test.ts +1 -0
  19. package/src/__tests__/approval-routes-http.test.ts +9 -13
  20. package/src/__tests__/assert-not-live-db.ts +79 -0
  21. package/src/__tests__/assistant-feature-flags-integration.test.ts +9 -25
  22. package/src/__tests__/audit-log-rotation.test.ts +2 -2
  23. package/src/__tests__/auto-analysis-end-to-end.test.ts +6 -6
  24. package/src/__tests__/background-workers-disk-pressure.test.ts +5 -8
  25. package/src/__tests__/browser-skill-endstate.test.ts +3 -3
  26. package/src/__tests__/btw-routes.test.ts +3 -2
  27. package/src/__tests__/call-controller.test.ts +3 -2
  28. package/src/__tests__/channel-approval-routes.test.ts +3 -2
  29. package/src/__tests__/channel-guardian.test.ts +3 -2
  30. package/src/__tests__/channel-readiness-slack-remote.test.ts +175 -0
  31. package/src/__tests__/channel-reply-delivery.test.ts +35 -0
  32. package/src/__tests__/channel-retry-sweep.test.ts +320 -3
  33. package/src/__tests__/checker.test.ts +12 -12
  34. package/src/__tests__/compaction-events.test.ts +1 -0
  35. package/src/__tests__/compaction-trail-store.test.ts +264 -0
  36. package/src/__tests__/compactor-call-site-logging.test.ts +1 -0
  37. package/src/__tests__/compactor-preserved-tail-count.test.ts +1 -0
  38. package/src/__tests__/computer-use-skill-manifest-regression.test.ts +7 -5
  39. package/src/__tests__/computer-use-tools.test.ts +12 -14
  40. package/src/__tests__/config-loader-backfill.test.ts +13 -28
  41. package/src/__tests__/config-loader-corrupt.test.ts +5 -5
  42. package/src/__tests__/config-loader-platform-defaults.test.ts +93 -26
  43. package/src/__tests__/config-loader-quarantine-bulletin.test.ts +3 -3
  44. package/src/__tests__/config-managed-gemini-defaults.test.ts +3 -4
  45. package/src/__tests__/config-schema.test.ts +10 -10
  46. package/src/__tests__/connection-model-compat.test.ts +83 -0
  47. package/src/__tests__/contacts-tools.test.ts +3 -2
  48. package/src/__tests__/context-token-estimator.test.ts +22 -0
  49. package/src/__tests__/conversation-abort-tool-results.test.ts +5 -0
  50. package/src/__tests__/conversation-agent-loop-disk-pressure.test.ts +1 -0
  51. package/src/__tests__/conversation-agent-loop-handlers-max-tokens.test.ts +55 -0
  52. package/src/__tests__/conversation-agent-loop-inference-profile.test.ts +1 -0
  53. package/src/__tests__/conversation-agent-loop-overflow.test.ts +34 -0
  54. package/src/__tests__/conversation-agent-loop.test.ts +488 -2
  55. package/src/__tests__/conversation-analysis-routes.test.ts +1 -0
  56. package/src/__tests__/conversation-app-control-instantiation.test.ts +29 -19
  57. package/src/__tests__/conversation-app-control-lifecycle.test.ts +1 -0
  58. package/src/__tests__/conversation-attention-store.test.ts +101 -0
  59. package/src/__tests__/conversation-attention-telegram.test.ts +3 -2
  60. package/src/__tests__/conversation-confirmation-signals.test.ts +1 -0
  61. package/src/__tests__/conversation-error.test.ts +30 -0
  62. package/src/__tests__/conversation-fork-crud.test.ts +69 -8
  63. package/src/__tests__/conversation-fork-route.test.ts +3 -2
  64. package/src/__tests__/conversation-history-web-search.test.ts +1 -0
  65. package/src/__tests__/conversation-inference-profile-list.test.ts +3 -2
  66. package/src/__tests__/conversation-inference-profile-route.test.ts +3 -2
  67. package/src/__tests__/conversation-lifecycle.test.ts +1 -0
  68. package/src/__tests__/conversation-list-source.test.ts +3 -2
  69. package/src/__tests__/conversation-load-history-repair.test.ts +2 -1
  70. package/src/__tests__/conversation-load-history-stripped.test.ts +1 -0
  71. package/src/__tests__/conversation-pairing.test.ts +53 -0
  72. package/src/__tests__/conversation-process-app-control-preactivation.test.ts +26 -7
  73. package/src/__tests__/conversation-process-callsite.test.ts +1 -0
  74. package/src/__tests__/conversation-provider-retry-repair.test.ts +5 -0
  75. package/src/__tests__/conversation-queue.test.ts +333 -291
  76. package/src/__tests__/conversation-routes-disk-view.test.ts +3 -18
  77. package/src/__tests__/conversation-routes-guardian-reply.test.ts +33 -8
  78. package/src/__tests__/conversation-routes-slash-commands.test.ts +33 -2
  79. package/src/__tests__/conversation-runtime-assembly.test.ts +78 -0
  80. package/src/__tests__/conversation-skill-tools.test.ts +38 -142
  81. package/src/__tests__/conversation-slash-queue.test.ts +84 -32
  82. package/src/__tests__/conversation-slash-unknown.test.ts +5 -0
  83. package/src/__tests__/conversation-speed-override.test.ts +1 -0
  84. package/src/__tests__/conversation-surfaces-action-delivery.test.ts +46 -0
  85. package/src/__tests__/conversation-surfaces-data-persist.test.ts +1 -0
  86. package/src/__tests__/conversation-surfaces-standalone-payloads.test.ts +6 -3
  87. package/src/__tests__/conversation-surfaces-standalone.test.ts +6 -3
  88. package/src/__tests__/conversation-surfaces-state-update.test.ts +3 -3
  89. package/src/__tests__/conversation-surfaces-table-action.test.ts +7 -17
  90. package/src/__tests__/conversation-sync-tags.test.ts +128 -12
  91. package/src/__tests__/conversation-title-service.test.ts +1 -0
  92. package/src/__tests__/conversation-tool-setup-app-refresh.test.ts +30 -0
  93. package/src/__tests__/conversation-usage.test.ts +1 -0
  94. package/src/__tests__/conversation-workspace-cache-state.test.ts +1 -0
  95. package/src/__tests__/conversation-workspace-injection.test.ts +5 -0
  96. package/src/__tests__/conversation-workspace-tool-tracking.test.ts +5 -0
  97. package/src/__tests__/credential-broker-browser-fill.test.ts +3 -3
  98. package/src/__tests__/credential-broker-server-use.test.ts +5 -5
  99. package/src/__tests__/credential-execution-client.test.ts +72 -1
  100. package/src/__tests__/credential-execution-feature-gates.test.ts +10 -12
  101. package/src/__tests__/credential-health-service.test.ts +252 -3
  102. package/src/__tests__/credential-security-invariants.test.ts +5 -5
  103. package/src/__tests__/credential-vault-unit.test.ts +19 -19
  104. package/src/__tests__/credential-vault.test.ts +5 -5
  105. package/src/__tests__/cross-provider-web-search.test.ts +56 -2
  106. package/src/__tests__/db-connection-isolation.test.ts +7 -6
  107. package/src/__tests__/db-conversation-fork-lineage-migration.test.ts +8 -10
  108. package/src/__tests__/db-conversation-inference-profile-migration.test.ts +7 -10
  109. package/src/__tests__/db-llm-request-log-provider-migration.test.ts +9 -15
  110. package/src/__tests__/db-test-helpers.ts +58 -0
  111. package/src/__tests__/disk-pressure-guard.test.ts +58 -41
  112. package/src/__tests__/disk-pressure-lifecycle.test.ts +13 -10
  113. package/src/__tests__/disk-pressure-routes.test.ts +0 -33
  114. package/src/__tests__/disk-pressure-tools.test.ts +0 -4
  115. package/src/__tests__/dm-persistence.test.ts +26 -40
  116. package/src/__tests__/document-create-dedupe.test.ts +189 -0
  117. package/src/__tests__/document-find-replace.test.ts +3 -2
  118. package/src/__tests__/document-tool-security.test.ts +81 -2
  119. package/src/__tests__/dynamic-skill-workflow-prompt.test.ts +5 -4
  120. package/src/__tests__/encrypted-store-test-helpers.ts +56 -0
  121. package/src/__tests__/encrypted-store.test.ts +11 -9
  122. package/src/__tests__/feature-flag-test-helpers.ts +53 -0
  123. package/src/__tests__/filing-service.test.ts +1 -0
  124. package/src/__tests__/first-greeting.test.ts +62 -12
  125. package/src/__tests__/gateway-flag-listener.test.ts +0 -1
  126. package/src/__tests__/gemini-provider.test.ts +26 -0
  127. package/src/__tests__/guardian-action-sweep.test.ts +3 -2
  128. package/src/__tests__/guardian-outbound-http.test.ts +3 -2
  129. package/src/__tests__/handlers-skills-memory-v2-reseed.test.ts +48 -3
  130. package/src/__tests__/handlers-user-message-approval-consumption.test.ts +1 -0
  131. package/src/__tests__/heartbeat-disk-pressure.test.ts +1 -0
  132. package/src/__tests__/heartbeat-service.test.ts +1 -0
  133. package/src/__tests__/helpers/mock-logger.ts +26 -0
  134. package/src/__tests__/host-bash-routes.test.ts +1 -0
  135. package/src/__tests__/host-cu-routes-targeted.test.ts +1 -0
  136. package/src/__tests__/host-file-routes-targeted.test.ts +1 -0
  137. package/src/__tests__/host-shell-tool.test.ts +5 -4
  138. package/src/__tests__/host-transfer-routes-targeted.test.ts +1 -0
  139. package/src/__tests__/http-conversation-lineage.test.ts +3 -2
  140. package/src/__tests__/http-user-message-parity.test.ts +29 -7
  141. package/src/__tests__/identity-intro-cache.test.ts +133 -22
  142. package/src/__tests__/inbound-slack-persistence.test.ts +44 -72
  143. package/src/__tests__/inference-profile-reaper.test.ts +3 -2
  144. package/src/__tests__/inference-profile-session-ipc.test.ts +3 -2
  145. package/src/__tests__/injector-disk-pressure.test.ts +3 -17
  146. package/src/__tests__/inline-skill-load-permissions.test.ts +4 -4
  147. package/src/__tests__/list-messages-hidden-metadata.test.ts +80 -0
  148. package/src/__tests__/llm-context-normalization.test.ts +42 -0
  149. package/src/__tests__/llm-resolver.test.ts +331 -0
  150. package/src/__tests__/llm-schema.test.ts +1 -1
  151. package/src/__tests__/manual-token-reconciliation.test.ts +76 -1
  152. package/src/__tests__/mcp-abort-signal.test.ts +14 -0
  153. package/src/__tests__/mcp-client-auth.test.ts +14 -0
  154. package/src/__tests__/messaging-send-tool.test.ts +1 -0
  155. package/src/__tests__/migration-import-from-url.test.ts +3 -3
  156. package/src/__tests__/mock-gateway-ipc.ts +18 -2
  157. package/src/__tests__/model-intents.test.ts +3 -3
  158. package/src/__tests__/native-web-search.test.ts +30 -2
  159. package/src/__tests__/notification-deep-link.test.ts +62 -0
  160. package/src/__tests__/oauth-commands-routes.test.ts +37 -0
  161. package/src/__tests__/oauth-provider-visibility.test.ts +8 -8
  162. package/src/__tests__/oauth-store.test.ts +3 -2
  163. package/src/__tests__/onboarding-template-contract.test.ts +3 -2
  164. package/src/__tests__/openai-provider.test.ts +8 -9
  165. package/src/__tests__/openai-responses-provider.test.ts +70 -10
  166. package/src/__tests__/openrouter-provider-only.test.ts +27 -5
  167. package/src/__tests__/outbound-slack-persistence.test.ts +46 -1
  168. package/src/__tests__/persistence-pipeline.test.ts +139 -1
  169. package/src/__tests__/persistence-secret-redaction.test.ts +83 -12
  170. package/src/__tests__/plugin-bootstrap.test.ts +9 -11
  171. package/src/__tests__/plugin-tool-contribution.test.ts +41 -38
  172. package/src/__tests__/process-message-background-slack.test.ts +21 -16
  173. package/src/__tests__/process-message-display-content.test.ts +19 -22
  174. package/src/__tests__/provider-catalog-visibility.test.ts +9 -9
  175. package/src/__tests__/provider-platform-proxy-integration.test.ts +216 -4
  176. package/src/__tests__/provider-registry-ollama.test.ts +45 -22
  177. package/src/__tests__/recording-handler.test.ts +1 -0
  178. package/src/__tests__/regenerate-fire-and-forget-trace.test.ts +1 -0
  179. package/src/__tests__/registry.test.ts +82 -76
  180. package/src/__tests__/relay-server.test.ts +10 -10
  181. package/src/__tests__/runtime-attachment-metadata.test.ts +3 -2
  182. package/src/__tests__/schedule-store.test.ts +16 -1
  183. package/src/__tests__/scheduler-reuse-conversation.test.ts +48 -3
  184. package/src/__tests__/secret-ingress-http.test.ts +5 -1
  185. package/src/__tests__/secure-keys.test.ts +3 -3
  186. package/src/__tests__/send-endpoint-busy.test.ts +81 -42
  187. package/src/__tests__/server-history-render.test.ts +4 -1
  188. package/src/__tests__/skill-feature-flags-integration.test.ts +8 -10
  189. package/src/__tests__/skill-feature-flags.test.ts +14 -16
  190. package/src/__tests__/skill-load-feature-flag.test.ts +5 -5
  191. package/src/__tests__/skill-projection-feature-flag.test.ts +44 -30
  192. package/src/__tests__/skill-projection.benchmark.test.ts +5 -7
  193. package/src/__tests__/skill-tool-factory.test.ts +96 -95
  194. package/src/__tests__/slack-channel-config.test.ts +3 -3
  195. package/src/__tests__/subagent-call-site-routing.test.ts +11 -3
  196. package/src/__tests__/subagent-disposal.test.ts +27 -8
  197. package/src/__tests__/subagent-fork-notifications.test.ts +24 -9
  198. package/src/__tests__/subagent-fork-spawn.test.ts +13 -4
  199. package/src/__tests__/subagent-manager-notify.test.ts +20 -8
  200. package/src/__tests__/subagent-notify-parent.test.ts +5 -4
  201. package/src/__tests__/subagent-spawn-tool-fork.test.ts +58 -0
  202. package/src/__tests__/subagent-tools.test.ts +2 -1
  203. package/src/__tests__/suggestion-routes.test.ts +1 -0
  204. package/src/__tests__/system-prompt.test.ts +38 -0
  205. package/src/__tests__/test-preload-verifier.ts +68 -0
  206. package/src/__tests__/test-preload.ts +32 -39
  207. package/src/__tests__/tool-executor-lifecycle-events.test.ts +20 -7
  208. package/src/__tests__/tool-executor.test.ts +55 -10
  209. package/src/__tests__/tool-preview-lifecycle.test.ts +1 -0
  210. package/src/__tests__/tool-result-metadata-plumbing.test.ts +1 -0
  211. package/src/__tests__/twilio-routes.test.ts +3 -2
  212. package/src/__tests__/validate-input.test.ts +381 -0
  213. package/src/__tests__/verification-control-plane-policy.test.ts +1 -0
  214. package/src/__tests__/voice-scoped-grant-consumer.test.ts +2 -1
  215. package/src/__tests__/voice-session-bridge.test.ts +37 -28
  216. package/src/__tests__/workspace-migration-090-memory-router-cost-optimized-profile.test.ts +326 -0
  217. package/src/__tests__/workspace-migration-091-retighten-migration-onboarding-thread.test.ts +166 -0
  218. package/src/acp/session-manager.ts +5 -6
  219. package/src/agent/loop.ts +80 -0
  220. package/src/api/README.md +124 -2
  221. package/src/api/constants/call-sites.ts +27 -0
  222. package/src/api/events/assistant-outbound-attachment.ts +51 -0
  223. package/src/api/events/assistant-text-delta.ts +32 -0
  224. package/src/api/events/assistant-turn-start.ts +33 -0
  225. package/src/api/events/document-comment-created.ts +48 -0
  226. package/src/api/events/document-comment-deleted.ts +24 -0
  227. package/src/api/events/document-comment-reopened.ts +25 -0
  228. package/src/api/events/document-comment-resolved.ts +27 -0
  229. package/src/api/events/generation-cancelled.ts +24 -0
  230. package/src/api/events/generation-handoff.ts +41 -0
  231. package/src/api/events/message-complete.ts +42 -0
  232. package/src/api/events/open-url.ts +30 -0
  233. package/src/{events → api/events}/relationship-state-updated.ts +3 -3
  234. package/src/api/events/tool-use-start.ts +32 -0
  235. package/src/api/index.ts +128 -3
  236. package/src/api/responses/llm-context-response.ts +39 -0
  237. package/src/api/responses/llm-request-log-entry.ts +93 -0
  238. package/src/api/responses/memory-recall-log.ts +65 -0
  239. package/src/api/responses/memory-v2-activation-log.ts +78 -0
  240. package/src/background-wake/background-wake-routes.test.ts +687 -52
  241. package/src/background-wake/platform-client.test.ts +308 -0
  242. package/src/background-wake/platform-client.ts +167 -0
  243. package/src/background-wake/publisher.ts +91 -0
  244. package/src/background-wake/runtime-registry.ts +2 -2
  245. package/src/background-wake/wake-intent-hooks.test.ts +282 -0
  246. package/src/calls/guardian-dispatch.ts +1 -0
  247. package/src/calls/voice-session-bridge.ts +4 -4
  248. package/src/cli/commands/__tests__/conversations-slack.test.ts +16 -0
  249. package/src/cli/commands/__tests__/notifications.test.ts +184 -40
  250. package/src/cli/commands/channels/__tests__/channels.test.ts +143 -0
  251. package/src/cli/commands/channels/index.ts +229 -0
  252. package/src/cli/commands/memory-v3-render.ts +147 -0
  253. package/src/cli/commands/memory-v3.ts +255 -4
  254. package/src/cli/commands/notifications.ts +365 -55
  255. package/src/cli/lib/open-browser.ts +7 -2
  256. package/src/cli/program.ts +2 -0
  257. package/src/config/assistant-feature-flags.ts +23 -42
  258. package/src/config/bundled-skills/document-editor/SKILL.md +5 -1
  259. package/src/config/bundled-skills/schedule/SKILL.md +1 -1
  260. package/src/config/bundled-skills/schedule/TOOLS.json +2 -2
  261. package/src/config/bundled-skills/settings/tools/open-system-settings.ts +1 -0
  262. package/src/config/call-site-defaults.ts +1 -1
  263. package/src/config/feature-flag-cache.ts +86 -0
  264. package/src/config/feature-flag-registry.json +17 -17
  265. package/src/config/llm-context-resolution.ts +10 -1
  266. package/src/config/llm-resolver.ts +121 -15
  267. package/src/config/loader.ts +4 -5
  268. package/src/config/schemas/__tests__/memory-v2.test.ts +15 -0
  269. package/src/config/schemas/heartbeat.ts +1 -1
  270. package/src/config/schemas/llm.ts +90 -1
  271. package/src/config/schemas/memory-v2.ts +26 -0
  272. package/src/config/schemas/services.ts +6 -2
  273. package/src/config/seed-inference-profiles.ts +36 -16
  274. package/src/context/token-estimator.ts +10 -5
  275. package/src/credential-execution/executable-discovery.ts +40 -0
  276. package/src/credential-execution/process-manager.ts +6 -2
  277. package/src/credential-health/credential-health-service.ts +125 -40
  278. package/src/daemon/__tests__/conversation-lifecycle-auto-analyze.test.ts +3 -6
  279. package/src/daemon/__tests__/conversation-surfaces-launch.test.ts +13 -15
  280. package/src/daemon/__tests__/conversation-tool-setup-exclude.test.ts +1 -2
  281. package/src/daemon/__tests__/daemon-skill-host.test.ts +2 -0
  282. package/src/daemon/__tests__/meet-manifest-loader.test.ts +25 -12
  283. package/src/daemon/__tests__/native-web-search-metadata.test.ts +1 -0
  284. package/src/daemon/__tests__/switch-inference-profile-tool.test.ts +107 -0
  285. package/src/daemon/__tests__/web-search-status-text.test.ts +1 -0
  286. package/src/daemon/conversation-agent-loop-handlers.ts +389 -68
  287. package/src/daemon/conversation-agent-loop.ts +132 -28
  288. package/src/daemon/conversation-error.ts +33 -5
  289. package/src/daemon/conversation-messaging.ts +84 -43
  290. package/src/daemon/conversation-process.ts +74 -37
  291. package/src/daemon/conversation-runtime-assembly.ts +29 -9
  292. package/src/daemon/conversation-skill-tools.ts +14 -30
  293. package/src/daemon/conversation-surfaces.ts +69 -34
  294. package/src/daemon/conversation-tool-setup.ts +33 -48
  295. package/src/daemon/conversation.ts +26 -46
  296. package/src/daemon/daemon-control.ts +1 -1
  297. package/src/daemon/daemon-skill-host.ts +9 -2
  298. package/src/daemon/disk-pressure-guard.ts +27 -29
  299. package/src/daemon/first-greeting.ts +31 -13
  300. package/src/daemon/handlers/shared.ts +6 -1
  301. package/src/daemon/lifecycle.ts +12 -12
  302. package/src/daemon/mcp-reload-service.ts +1 -1
  303. package/src/daemon/meet-manifest-loader.ts +10 -17
  304. package/src/daemon/message-types/conversations.ts +20 -22
  305. package/src/daemon/message-types/document-comments.ts +8 -44
  306. package/src/daemon/message-types/home.ts +2 -2
  307. package/src/daemon/message-types/integrations.ts +2 -7
  308. package/src/daemon/message-types/messages.ts +23 -38
  309. package/src/daemon/message-types/subagents.ts +6 -0
  310. package/src/daemon/process-message.ts +9 -9
  311. package/src/daemon/providers-setup.ts +1 -1
  312. package/src/daemon/server.ts +16 -0
  313. package/src/daemon/switch-inference-profile-tool.ts +13 -3
  314. package/src/daemon/tool-setup-types.ts +0 -6
  315. package/src/daemon/wake-target-adapter.ts +10 -0
  316. package/src/documents/document-store.ts +38 -0
  317. package/src/export/__tests__/transcript-formatter.test.ts +1 -0
  318. package/src/heartbeat/__tests__/heartbeat-service.test.ts +29 -0
  319. package/src/heartbeat/heartbeat-service.ts +63 -0
  320. package/src/home/__tests__/feed-writer.test.ts +161 -0
  321. package/src/home/__tests__/post-connect-feed.test.ts +1 -0
  322. package/src/home/__tests__/suggested-prompts.test.ts +55 -59
  323. package/src/home/feed-writer.ts +146 -7
  324. package/src/home/suggested-prompts.ts +27 -145
  325. package/src/ipc/__tests__/cli-ipc.test.ts +1 -0
  326. package/src/ipc/gateway-client.test.ts +4 -1
  327. package/src/ipc/skill-routes/__tests__/memory.test.ts +1 -0
  328. package/src/ipc/skill-routes/__tests__/registries.test.ts +36 -7
  329. package/src/ipc/skill-routes/memory.ts +4 -3
  330. package/src/ipc/skill-routes/registries.ts +28 -29
  331. package/src/memory/__tests__/jobs-store-enqueue-gate.test.ts +1 -0
  332. package/src/memory/__tests__/jobs-worker-v2-schedule.test.ts +26 -5
  333. package/src/memory/__tests__/memory-retrospective-enqueue.test.ts +1 -0
  334. package/src/memory/__tests__/memory-retrospective-job.test.ts +1 -0
  335. package/src/memory/__tests__/memory-retrospective-startup-cleanup.test.ts +1 -0
  336. package/src/memory/__tests__/memory-v2-activation-log-store.test.ts +31 -0
  337. package/src/memory/conversation-attention-store.ts +17 -3
  338. package/src/memory/conversation-crud.ts +352 -112
  339. package/src/memory/db-connection.ts +29 -19
  340. package/src/memory/db-init.ts +4 -0
  341. package/src/memory/db-singleton.ts +77 -0
  342. package/src/memory/delivery-channels.ts +82 -0
  343. package/src/memory/graph/__tests__/conversation-graph-memory-v2-routing.test.ts +2 -4
  344. package/src/memory/graph/retriever.test.ts +3 -3
  345. package/src/memory/job-handlers/embedding.test.ts +3 -2
  346. package/src/memory/jobs/__tests__/embed-concept-page.test.ts +5 -2
  347. package/src/memory/jobs-worker.ts +12 -1
  348. package/src/memory/llm-request-log-source-clickhouse.ts +80 -0
  349. package/src/memory/llm-request-log-source-local.ts +24 -0
  350. package/src/memory/llm-request-log-source.ts +31 -0
  351. package/src/memory/llm-request-log-store.ts +188 -3
  352. package/src/memory/memory-v2-activation-log-store.ts +95 -1
  353. package/src/memory/migrations/265-drop-provider-connection-status.ts +26 -0
  354. package/src/memory/migrations/266-messages-client-message-id.ts +43 -0
  355. package/src/memory/migrations/index.ts +2 -0
  356. package/src/memory/schema/conversations.ts +9 -1
  357. package/src/memory/schema/inference.ts +0 -1
  358. package/src/memory/v2/__tests__/backfill-jobs.test.ts +5 -2
  359. package/src/memory/v2/__tests__/harness-metrics.test.ts +9 -0
  360. package/src/memory/v2/__tests__/harness-replay-input.test.ts +9 -4
  361. package/src/memory/v2/__tests__/harness-runner.test.ts +26 -0
  362. package/src/memory/v2/__tests__/sweep-job.test.ts +6 -3
  363. package/src/memory/v2/harness/metrics.ts +5 -1
  364. package/src/memory/v2/harness/replay-input.ts +19 -3
  365. package/src/memory/v2/harness/runner.ts +6 -0
  366. package/src/memory/v2/harness/trace.ts +6 -0
  367. package/src/memory/v3/__tests__/consolidation-job.test.ts +2 -4
  368. package/src/memory/v3/__tests__/coretrieval-seed.test.ts +270 -0
  369. package/src/memory/v3/__tests__/edges.test.ts +144 -1
  370. package/src/memory/v3/__tests__/filter.test.ts +48 -0
  371. package/src/memory/v3/__tests__/gate.test.ts +96 -33
  372. package/src/memory/v3/__tests__/index-composition.test.ts +58 -0
  373. package/src/memory/v3/__tests__/loop.test.ts +250 -5
  374. package/src/memory/v3/__tests__/scouts.test.ts +49 -0
  375. package/src/memory/v3/__tests__/shadow-diff.test.ts +225 -0
  376. package/src/memory/v3/__tests__/shadow-middleware.test.ts +88 -2
  377. package/src/memory/v3/__tests__/traversal.test.ts +39 -0
  378. package/src/memory/v3/__tests__/tree-walk.test.ts +77 -0
  379. package/src/memory/v3/__tests__/validate.test.ts +32 -0
  380. package/src/memory/v3/coretrieval-seed.ts +240 -0
  381. package/src/memory/v3/edges.ts +58 -21
  382. package/src/memory/v3/filter.ts +27 -22
  383. package/src/memory/v3/gate.ts +51 -36
  384. package/src/memory/v3/index-composition.ts +18 -5
  385. package/src/memory/v3/loop.ts +65 -17
  386. package/src/memory/v3/scouts.ts +15 -4
  387. package/src/memory/v3/shadow-diff.ts +287 -0
  388. package/src/memory/v3/shadow-middleware.ts +44 -2
  389. package/src/memory/v3/traversal.ts +6 -1
  390. package/src/memory/v3/tree-walk.ts +6 -1
  391. package/src/memory/v3/validate.ts +56 -33
  392. package/src/notifications/__tests__/emit-signal-home-feed.test.ts +1 -0
  393. package/src/notifications/__tests__/home-feed-side-effect.test.ts +1 -0
  394. package/src/notifications/adapters/slack.ts +45 -11
  395. package/src/notifications/broadcaster.ts +114 -63
  396. package/src/notifications/conversation-pairing.ts +23 -3
  397. package/src/notifications/decisions-store.ts +32 -1
  398. package/src/notifications/deliveries-store.ts +45 -0
  399. package/src/notifications/edit-notification.ts +201 -0
  400. package/src/notifications/emit-signal.ts +11 -1
  401. package/src/notifications/signal.ts +10 -0
  402. package/src/notifications/types.ts +37 -0
  403. package/src/oauth/byo-connection.test.ts +67 -3
  404. package/src/oauth/byo-connection.ts +32 -5
  405. package/src/oauth/connect-orchestrator.ts +9 -0
  406. package/src/oauth/connection-resolver.test.ts +76 -0
  407. package/src/oauth/connection-resolver.ts +49 -10
  408. package/src/oauth/manual-token-connection.ts +51 -3
  409. package/src/oauth/seed-providers.ts +3 -0
  410. package/src/permissions/approval-policy.test.ts +19 -5
  411. package/src/permissions/approval-policy.ts +14 -3
  412. package/src/permissions/checker.ts +21 -8
  413. package/src/platform/client.test.ts +24 -1
  414. package/src/platform/client.ts +8 -0
  415. package/src/platform/feature-gate.ts +15 -0
  416. package/src/plugins/defaults/injectors.ts +2 -8
  417. package/src/plugins/defaults/persistence.ts +25 -6
  418. package/src/plugins/types.ts +57 -13
  419. package/src/proactive-artifact/job.test.ts +1 -0
  420. package/src/prompts/__tests__/system-prompt.test.ts +4 -4
  421. package/src/prompts/system-prompt.ts +38 -40
  422. package/src/prompts/template-detection.ts +10 -4
  423. package/src/prompts/templates/BOOTSTRAP.md +7 -11
  424. package/src/prompts/templates/IDENTITY.md +0 -2
  425. package/src/providers/__tests__/connection-model-compat.test.ts +3 -4
  426. package/src/providers/__tests__/registry-native-web-search.test.ts +122 -0
  427. package/src/providers/call-site-routing.ts +33 -9
  428. package/src/providers/connection-model-compat.ts +23 -0
  429. package/src/providers/connection-resolution.ts +39 -20
  430. package/src/providers/fireworks/client.ts +1 -0
  431. package/src/providers/gemini/client.ts +24 -3
  432. package/src/providers/inference/__tests__/adapter-factory-openai-compatible.test.ts +0 -2
  433. package/src/providers/inference/__tests__/base-url-security.test.ts +2 -3
  434. package/src/providers/inference/__tests__/{connections-status-label.test.ts → connections-label.test.ts} +12 -111
  435. package/src/providers/inference/auth.ts +0 -8
  436. package/src/providers/inference/connections.ts +3 -66
  437. package/src/providers/inference/resolve-auth.ts +2 -3
  438. package/src/providers/model-catalog.ts +35 -1
  439. package/src/providers/model-intents.ts +3 -3
  440. package/src/providers/openai/__tests__/api-error-detail.test.ts +120 -0
  441. package/src/providers/openai/__tests__/chat-completions-provider-reasoning.test.ts +157 -5
  442. package/src/providers/openai/chat-completions-provider.ts +110 -12
  443. package/src/providers/openai/codex-models.ts +2 -0
  444. package/src/providers/openai/responses-provider.ts +53 -53
  445. package/src/providers/openrouter/client.ts +13 -8
  446. package/src/providers/provider-send-message.ts +18 -9
  447. package/src/providers/registry.ts +48 -8
  448. package/src/providers/retry.ts +16 -4
  449. package/src/providers/search-provider-catalog.ts +17 -9
  450. package/src/providers/types.ts +9 -0
  451. package/src/runtime/__tests__/agent-wake.test.ts +1 -0
  452. package/src/runtime/__tests__/background-job-runner.test.ts +1 -0
  453. package/src/runtime/access-request-helper.ts +1 -0
  454. package/src/runtime/auth/route-policy.ts +10 -0
  455. package/src/runtime/channel-readiness-service.ts +68 -0
  456. package/src/runtime/channel-reply-delivery.ts +23 -0
  457. package/src/runtime/channel-retry-sweep.ts +47 -14
  458. package/src/runtime/confirmation-request-guardian-bridge.ts +1 -1
  459. package/src/runtime/migrations/vbundle-builder.ts +3 -2
  460. package/src/runtime/routes/__tests__/bookmark-routes.test.ts +1 -0
  461. package/src/runtime/routes/__tests__/conversation-compaction-routes.test.ts +406 -0
  462. package/src/runtime/routes/__tests__/conversation-query-routes.test.ts +98 -0
  463. package/src/runtime/routes/__tests__/heartbeat-routes.test.ts +1 -1
  464. package/src/runtime/routes/__tests__/home-feed-routes.test.ts +209 -1
  465. package/src/runtime/routes/__tests__/inference-provider-connection-routes.test.ts +13 -50
  466. package/src/runtime/routes/__tests__/memory-v2-simulate-route.test.ts +51 -3
  467. package/src/runtime/routes/__tests__/memory-v3-simulate-params.test.ts +35 -0
  468. package/src/runtime/routes/__tests__/slack-channel-routes.test.ts +3 -2
  469. package/src/runtime/routes/__tests__/surface-content-routes.test.ts +294 -0
  470. package/src/runtime/routes/__tests__/task-routes.test.ts +48 -3
  471. package/src/runtime/routes/acp-routes-list.test.ts +3 -0
  472. package/src/runtime/routes/app-management-routes.ts +111 -4
  473. package/src/runtime/routes/background-wake-routes.ts +188 -20
  474. package/src/runtime/routes/btw-routes.ts +4 -4
  475. package/src/runtime/routes/conversation-analysis-routes.ts +6 -0
  476. package/src/runtime/routes/conversation-compaction-routes.ts +263 -0
  477. package/src/runtime/routes/conversation-list-routes.ts +147 -0
  478. package/src/runtime/routes/conversation-management-routes.ts +39 -14
  479. package/src/runtime/routes/conversation-query-routes.ts +60 -10
  480. package/src/runtime/routes/conversation-routes.ts +186 -140
  481. package/src/runtime/routes/conversations-import-routes.ts +19 -6
  482. package/src/runtime/routes/documents-routes.ts +10 -1
  483. package/src/runtime/routes/group-routes.ts +11 -0
  484. package/src/runtime/routes/home-feed-routes.ts +129 -0
  485. package/src/runtime/routes/identity-intro-cache.ts +61 -16
  486. package/src/runtime/routes/identity-routes.ts +30 -9
  487. package/src/runtime/routes/inbound-stages/background-dispatch.test.ts +530 -6
  488. package/src/runtime/routes/inbound-stages/background-dispatch.ts +57 -8
  489. package/src/runtime/routes/index.ts +2 -0
  490. package/src/runtime/routes/inference-provider-connection-routes.ts +5 -26
  491. package/src/runtime/routes/integrations/vercel.ts +15 -0
  492. package/src/runtime/routes/llm-context-normalization.ts +7 -2
  493. package/src/runtime/routes/memory-v3-routes.ts +160 -2
  494. package/src/runtime/routes/migration-routes.ts +20 -13
  495. package/src/runtime/routes/notification-routes.ts +63 -1
  496. package/src/runtime/routes/oauth-commands-routes.ts +6 -1
  497. package/src/runtime/routes/surface-action-routes.ts +1 -38
  498. package/src/runtime/routes/surface-content-routes.ts +12 -5
  499. package/src/runtime/routes/surface-conversation-resolver.ts +65 -0
  500. package/src/runtime/routes/wipe-conversation-routes.ts +3 -0
  501. package/src/runtime/services/__tests__/analyze-conversation.test.ts +2 -0
  502. package/src/runtime/slack-dm-text-delivery.ts +177 -0
  503. package/src/runtime/sync/resource-sync-events.ts +1 -1
  504. package/src/runtime/tool-grant-request-helper.ts +1 -0
  505. package/src/schedule/schedule-store.ts +8 -1
  506. package/src/schedule/scheduler.ts +111 -15
  507. package/src/security/__tests__/provider-key-env-fallback.test.ts +3 -3
  508. package/src/security/encrypted-store.ts +7 -16
  509. package/src/security/store-path-override.ts +61 -0
  510. package/src/signals/user-message.ts +5 -8
  511. package/src/skills/validate-input.ts +177 -0
  512. package/src/subagent/manager.ts +13 -13
  513. package/src/subagent/types.ts +6 -0
  514. package/src/tasks/tool-sanitizer.ts +2 -2
  515. package/src/tools/apps/definitions.ts +35 -21
  516. package/src/tools/browser/__tests__/browser-execution-acquire.test.ts +2 -8
  517. package/src/tools/computer-use/definitions.ts +268 -266
  518. package/src/tools/document/document-tool.ts +131 -8
  519. package/src/tools/execution-target.ts +2 -5
  520. package/src/tools/executor.ts +18 -55
  521. package/src/tools/host-filesystem/edit.test.ts +1 -0
  522. package/src/tools/host-filesystem/read.test.ts +1 -0
  523. package/src/tools/host-filesystem/transfer.test.ts +31 -6
  524. package/src/tools/host-filesystem/write.test.ts +1 -0
  525. package/src/tools/mcp/mcp-tool-factory.ts +0 -2
  526. package/src/tools/network/__tests__/managed-search-proxy.test.ts +282 -0
  527. package/src/tools/network/__tests__/web-search.test.ts +211 -3
  528. package/src/tools/network/managed-search-proxy.ts +183 -0
  529. package/src/tools/network/web-search.ts +199 -44
  530. package/src/tools/policy-context.ts +3 -1
  531. package/src/tools/registry.ts +146 -103
  532. package/src/tools/schedule/create.ts +1 -1
  533. package/src/tools/skills/skill-tool-factory.ts +17 -36
  534. package/src/tools/subagent/spawn.ts +3 -0
  535. package/src/tools/tool-approval-handler.ts +10 -4
  536. package/src/tools/tool-name-aliases.ts +72 -14
  537. package/src/tools/types.ts +17 -15
  538. package/src/tools/ui-surface/definitions.ts +98 -86
  539. package/src/types/onboarding-context.ts +6 -0
  540. package/src/usage/attribution.ts +32 -1
  541. package/src/util/browser.ts +7 -2
  542. package/src/workspace/migrations/090-memory-router-cost-optimized-profile.ts +109 -0
  543. package/src/workspace/migrations/091-retighten-migration-onboarding-thread.ts +41 -0
  544. package/src/workspace/migrations/registry.ts +4 -0
@@ -8,16 +8,31 @@
8
8
  */
9
9
 
10
10
  import { RiskLevel } from "../../permissions/types.js";
11
- import type { Tool, ToolExecutionResult } from "../types.js";
11
+ import type { Tool, ToolContext, ToolExecutionResult } from "../types.js";
12
12
 
13
13
  // ---------------------------------------------------------------------------
14
14
  // Helpers
15
15
  // ---------------------------------------------------------------------------
16
16
 
17
- function proxyExecute(): Promise<ToolExecutionResult> {
18
- throw new Error(
19
- "Proxy tool: execution must be forwarded to the connected client",
20
- );
17
+ /**
18
+ * Forward execution to the connected macOS client via the request-bound
19
+ * `proxyToolResolver`. Returns a structured error when no resolver is
20
+ * configured (e.g. no client connected) so callers see a normal tool
21
+ * failure rather than an unhandled throw.
22
+ */
23
+ function proxyExecute(toolName: string) {
24
+ return async (
25
+ input: Record<string, unknown>,
26
+ context: ToolContext,
27
+ ): Promise<ToolExecutionResult> => {
28
+ if (!context.proxyToolResolver) {
29
+ return {
30
+ content: `No proxy resolver configured for proxy tool "${toolName}". This tool requires an external resolver (e.g. a connected macOS client for computer-use tools).`,
31
+ isError: true,
32
+ };
33
+ }
34
+ return context.proxyToolResolver(toolName, input);
35
+ };
21
36
  }
22
37
 
23
38
  // ---------------------------------------------------------------------------
@@ -30,45 +45,44 @@ export const computerUseClickTool: Tool = {
30
45
  "Click an element on screen. Prefer element_id (from the accessibility tree) over x/y coordinates.",
31
46
  category: "computer-use",
32
47
  defaultRiskLevel: RiskLevel.Low,
33
- executionMode: "proxy",
34
48
  executionTarget: "host",
35
49
 
36
50
  input_schema: {
37
- type: "object",
38
- properties: {
39
- click_type: {
40
- type: "string",
41
- enum: ["single", "double", "right"],
42
- description: 'Type of click to perform (default: "single")',
43
- },
44
- element_id: {
45
- type: "integer",
46
- description:
47
- "The [ID] number of the element from the accessibility tree (preferred)",
48
- },
49
- x: {
50
- type: "integer",
51
- description: "X coordinate on screen (fallback when no element_id)",
52
- },
53
- y: {
54
- type: "integer",
55
- description: "Y coordinate on screen (fallback when no element_id)",
56
- },
57
- reasoning: {
58
- type: "string",
59
- description:
60
- "Explanation of what you see and why you are clicking here",
61
- },
62
- target_client_id: {
63
- type: "string",
64
- description:
65
- "ID of the specific client to target. Required when multiple clients support host_cu; omit when only one is connected. Obtain IDs from `assistant clients list --capability host_cu`.",
66
- },
67
- },
68
- required: ["reasoning"],
69
- },
70
-
71
- execute: proxyExecute,
51
+ type: "object",
52
+ properties: {
53
+ click_type: {
54
+ type: "string",
55
+ enum: ["single", "double", "right"],
56
+ description: 'Type of click to perform (default: "single")',
57
+ },
58
+ element_id: {
59
+ type: "integer",
60
+ description:
61
+ "The [ID] number of the element from the accessibility tree (preferred)",
62
+ },
63
+ x: {
64
+ type: "integer",
65
+ description: "X coordinate on screen (fallback when no element_id)",
66
+ },
67
+ y: {
68
+ type: "integer",
69
+ description: "Y coordinate on screen (fallback when no element_id)",
70
+ },
71
+ reasoning: {
72
+ type: "string",
73
+ description:
74
+ "Explanation of what you see and why you are clicking here",
75
+ },
76
+ target_client_id: {
77
+ type: "string",
78
+ description:
79
+ "ID of the specific client to target. Required when multiple clients support host_cu; omit when only one is connected. Obtain IDs from `assistant clients list --capability host_cu`.",
80
+ },
81
+ },
82
+ required: ["reasoning"],
83
+ },
84
+
85
+ execute: proxyExecute("computer_use_click"),
72
86
  };
73
87
 
74
88
  // ---------------------------------------------------------------------------
@@ -81,30 +95,29 @@ export const computerUseTypeTextTool: Tool = {
81
95
  "Type text at the current cursor position. First click a text field (by element_id) to focus it, then call this tool. If a field shows 'FOCUSED', skip the click.",
82
96
  category: "computer-use",
83
97
  defaultRiskLevel: RiskLevel.Low,
84
- executionMode: "proxy",
85
98
  executionTarget: "host",
86
99
 
87
100
  input_schema: {
88
- type: "object",
89
- properties: {
90
- text: {
91
- type: "string",
92
- description: "The text to type",
93
- },
94
- reasoning: {
95
- type: "string",
96
- description: "Explanation of what you are typing and why",
97
- },
98
- target_client_id: {
99
- type: "string",
100
- description:
101
- "ID of the specific client to target. Required when multiple clients support host_cu; omit when only one is connected. Obtain IDs from `assistant clients list --capability host_cu`.",
102
- },
103
- },
104
- required: ["text", "reasoning"],
105
- },
106
-
107
- execute: proxyExecute,
101
+ type: "object",
102
+ properties: {
103
+ text: {
104
+ type: "string",
105
+ description: "The text to type",
106
+ },
107
+ reasoning: {
108
+ type: "string",
109
+ description: "Explanation of what you are typing and why",
110
+ },
111
+ target_client_id: {
112
+ type: "string",
113
+ description:
114
+ "ID of the specific client to target. Required when multiple clients support host_cu; omit when only one is connected. Obtain IDs from `assistant clients list --capability host_cu`.",
115
+ },
116
+ },
117
+ required: ["text", "reasoning"],
118
+ },
119
+
120
+ execute: proxyExecute("computer_use_type_text"),
108
121
  };
109
122
 
110
123
  // ---------------------------------------------------------------------------
@@ -117,31 +130,29 @@ export const computerUseKeyTool: Tool = {
117
130
  "Press a key or keyboard shortcut. Supported: enter, tab, escape, backspace, delete, up, down, left, right, space, cmd+a, cmd+c, cmd+v, cmd+z, cmd+tab, cmd+w, shift+tab, option+tab",
118
131
  category: "computer-use",
119
132
  defaultRiskLevel: RiskLevel.Low,
120
- executionMode: "proxy",
121
133
  executionTarget: "host",
122
134
 
123
135
  input_schema: {
124
- type: "object",
125
- properties: {
126
- key: {
127
- type: "string",
128
- description:
129
- "Key or shortcut to press (e.g. enter, tab, cmd+c, cmd+v)",
130
- },
131
- reasoning: {
132
- type: "string",
133
- description: "Explanation of why you are pressing this key",
134
- },
135
- target_client_id: {
136
- type: "string",
137
- description:
138
- "ID of the specific client to target. Required when multiple clients support host_cu; omit when only one is connected. Obtain IDs from `assistant clients list --capability host_cu`.",
139
- },
140
- },
141
- required: ["key", "reasoning"],
142
- },
143
-
144
- execute: proxyExecute,
136
+ type: "object",
137
+ properties: {
138
+ key: {
139
+ type: "string",
140
+ description: "Key or shortcut to press (e.g. enter, tab, cmd+c, cmd+v)",
141
+ },
142
+ reasoning: {
143
+ type: "string",
144
+ description: "Explanation of why you are pressing this key",
145
+ },
146
+ target_client_id: {
147
+ type: "string",
148
+ description:
149
+ "ID of the specific client to target. Required when multiple clients support host_cu; omit when only one is connected. Obtain IDs from `assistant clients list --capability host_cu`.",
150
+ },
151
+ },
152
+ required: ["key", "reasoning"],
153
+ },
154
+
155
+ execute: proxyExecute("computer_use_key"),
145
156
  };
146
157
 
147
158
  // ---------------------------------------------------------------------------
@@ -154,48 +165,47 @@ export const computerUseScrollTool: Tool = {
154
165
  "Scroll within an element by its [ID], or at raw screen coordinates as fallback.",
155
166
  category: "computer-use",
156
167
  defaultRiskLevel: RiskLevel.Low,
157
- executionMode: "proxy",
158
168
  executionTarget: "host",
159
169
 
160
170
  input_schema: {
161
- type: "object",
162
- properties: {
163
- element_id: {
164
- type: "integer",
165
- description:
166
- "The [ID] number of the element to scroll within (preferred)",
167
- },
168
- x: {
169
- type: "integer",
170
- description: "X coordinate on screen (fallback when no element_id)",
171
- },
172
- y: {
173
- type: "integer",
174
- description: "Y coordinate on screen (fallback when no element_id)",
175
- },
176
- direction: {
177
- type: "string",
178
- enum: ["up", "down", "left", "right"],
179
- description: "Scroll direction",
180
- },
181
- amount: {
182
- type: "integer",
183
- description: "Scroll amount (1-10)",
184
- },
185
- reasoning: {
186
- type: "string",
187
- description: "Explanation of why you are scrolling",
188
- },
189
- target_client_id: {
190
- type: "string",
191
- description:
192
- "ID of the specific client to target. Required when multiple clients support host_cu; omit when only one is connected. Obtain IDs from `assistant clients list --capability host_cu`.",
193
- },
194
- },
195
- required: ["direction", "amount", "reasoning"],
196
- },
197
-
198
- execute: proxyExecute,
171
+ type: "object",
172
+ properties: {
173
+ element_id: {
174
+ type: "integer",
175
+ description:
176
+ "The [ID] number of the element to scroll within (preferred)",
177
+ },
178
+ x: {
179
+ type: "integer",
180
+ description: "X coordinate on screen (fallback when no element_id)",
181
+ },
182
+ y: {
183
+ type: "integer",
184
+ description: "Y coordinate on screen (fallback when no element_id)",
185
+ },
186
+ direction: {
187
+ type: "string",
188
+ enum: ["up", "down", "left", "right"],
189
+ description: "Scroll direction",
190
+ },
191
+ amount: {
192
+ type: "integer",
193
+ description: "Scroll amount (1-10)",
194
+ },
195
+ reasoning: {
196
+ type: "string",
197
+ description: "Explanation of why you are scrolling",
198
+ },
199
+ target_client_id: {
200
+ type: "string",
201
+ description:
202
+ "ID of the specific client to target. Required when multiple clients support host_cu; omit when only one is connected. Obtain IDs from `assistant clients list --capability host_cu`.",
203
+ },
204
+ },
205
+ required: ["direction", "amount", "reasoning"],
206
+ },
207
+
208
+ execute: proxyExecute("computer_use_scroll"),
199
209
  };
200
210
 
201
211
  // ---------------------------------------------------------------------------
@@ -208,54 +218,52 @@ export const computerUseDragTool: Tool = {
208
218
  "Drag from one element or position to another. Use for moving files, resizing windows, rearranging items, or adjusting sliders.",
209
219
  category: "computer-use",
210
220
  defaultRiskLevel: RiskLevel.Low,
211
- executionMode: "proxy",
212
221
  executionTarget: "host",
213
222
 
214
223
  input_schema: {
215
- type: "object",
216
- properties: {
217
- element_id: {
218
- type: "integer",
219
- description:
220
- "The [ID] of the source element to drag from (preferred)",
221
- },
222
- x: {
223
- type: "integer",
224
- description: "Source X coordinate (fallback when no element_id)",
225
- },
226
- y: {
227
- type: "integer",
228
- description: "Source Y coordinate (fallback when no element_id)",
229
- },
230
- to_element_id: {
231
- type: "integer",
232
- description:
233
- "The [ID] of the destination element to drag to (preferred)",
234
- },
235
- to_x: {
236
- type: "integer",
237
- description:
238
- "Destination X coordinate (fallback when no to_element_id)",
239
- },
240
- to_y: {
241
- type: "integer",
242
- description:
243
- "Destination Y coordinate (fallback when no to_element_id)",
244
- },
245
- reasoning: {
246
- type: "string",
247
- description: "Explanation of what you are dragging and why",
248
- },
249
- target_client_id: {
250
- type: "string",
251
- description:
252
- "ID of the specific client to target. Required when multiple clients support host_cu; omit when only one is connected. Obtain IDs from `assistant clients list --capability host_cu`.",
253
- },
254
- },
255
- required: ["reasoning"],
256
- },
257
-
258
- execute: proxyExecute,
224
+ type: "object",
225
+ properties: {
226
+ element_id: {
227
+ type: "integer",
228
+ description: "The [ID] of the source element to drag from (preferred)",
229
+ },
230
+ x: {
231
+ type: "integer",
232
+ description: "Source X coordinate (fallback when no element_id)",
233
+ },
234
+ y: {
235
+ type: "integer",
236
+ description: "Source Y coordinate (fallback when no element_id)",
237
+ },
238
+ to_element_id: {
239
+ type: "integer",
240
+ description:
241
+ "The [ID] of the destination element to drag to (preferred)",
242
+ },
243
+ to_x: {
244
+ type: "integer",
245
+ description:
246
+ "Destination X coordinate (fallback when no to_element_id)",
247
+ },
248
+ to_y: {
249
+ type: "integer",
250
+ description:
251
+ "Destination Y coordinate (fallback when no to_element_id)",
252
+ },
253
+ reasoning: {
254
+ type: "string",
255
+ description: "Explanation of what you are dragging and why",
256
+ },
257
+ target_client_id: {
258
+ type: "string",
259
+ description:
260
+ "ID of the specific client to target. Required when multiple clients support host_cu; omit when only one is connected. Obtain IDs from `assistant clients list --capability host_cu`.",
261
+ },
262
+ },
263
+ required: ["reasoning"],
264
+ },
265
+
266
+ execute: proxyExecute("computer_use_drag"),
259
267
  };
260
268
 
261
269
  // ---------------------------------------------------------------------------
@@ -267,30 +275,29 @@ export const computerUseWaitTool: Tool = {
267
275
  description: "Wait for the UI to update",
268
276
  category: "computer-use",
269
277
  defaultRiskLevel: RiskLevel.Low,
270
- executionMode: "proxy",
271
278
  executionTarget: "host",
272
279
 
273
280
  input_schema: {
274
- type: "object",
275
- properties: {
276
- duration_ms: {
277
- type: "integer",
278
- description: "Milliseconds to wait",
279
- },
280
- reasoning: {
281
- type: "string",
282
- description: "Explanation of what you are waiting for",
283
- },
284
- target_client_id: {
285
- type: "string",
286
- description:
287
- "ID of the specific client to target. Required when multiple clients support host_cu; omit when only one is connected. Obtain IDs from `assistant clients list --capability host_cu`.",
288
- },
289
- },
290
- required: ["duration_ms", "reasoning"],
291
- },
292
-
293
- execute: proxyExecute,
281
+ type: "object",
282
+ properties: {
283
+ duration_ms: {
284
+ type: "integer",
285
+ description: "Milliseconds to wait",
286
+ },
287
+ reasoning: {
288
+ type: "string",
289
+ description: "Explanation of what you are waiting for",
290
+ },
291
+ target_client_id: {
292
+ type: "string",
293
+ description:
294
+ "ID of the specific client to target. Required when multiple clients support host_cu; omit when only one is connected. Obtain IDs from `assistant clients list --capability host_cu`.",
295
+ },
296
+ },
297
+ required: ["duration_ms", "reasoning"],
298
+ },
299
+
300
+ execute: proxyExecute("computer_use_wait"),
294
301
  };
295
302
 
296
303
  // ---------------------------------------------------------------------------
@@ -303,32 +310,31 @@ export const computerUseOpenAppTool: Tool = {
303
310
  "Open or switch to a macOS application by name. Preferred over cmd+tab for switching apps - more reliable and explicit.",
304
311
  category: "computer-use",
305
312
  defaultRiskLevel: RiskLevel.Low,
306
- executionMode: "proxy",
307
313
  executionTarget: "host",
308
314
 
309
315
  input_schema: {
310
- type: "object",
311
- properties: {
312
- app_name: {
313
- type: "string",
314
- description:
315
- 'The name of the application to open (e.g. "Slack", "Safari", "Google Chrome", "VS Code")',
316
- },
317
- reasoning: {
318
- type: "string",
319
- description:
320
- "Explanation of why you need to open or switch to this app",
321
- },
322
- target_client_id: {
323
- type: "string",
324
- description:
325
- "ID of the specific client to target. Required when multiple clients support host_cu; omit when only one is connected. Obtain IDs from `assistant clients list --capability host_cu`.",
326
- },
327
- },
328
- required: ["app_name", "reasoning"],
329
- },
330
-
331
- execute: proxyExecute,
316
+ type: "object",
317
+ properties: {
318
+ app_name: {
319
+ type: "string",
320
+ description:
321
+ 'The name of the application to open (e.g. "Slack", "Safari", "Google Chrome", "VS Code")',
322
+ },
323
+ reasoning: {
324
+ type: "string",
325
+ description:
326
+ "Explanation of why you need to open or switch to this app",
327
+ },
328
+ target_client_id: {
329
+ type: "string",
330
+ description:
331
+ "ID of the specific client to target. Required when multiple clients support host_cu; omit when only one is connected. Obtain IDs from `assistant clients list --capability host_cu`.",
332
+ },
333
+ },
334
+ required: ["app_name", "reasoning"],
335
+ },
336
+
337
+ execute: proxyExecute("computer_use_open_app"),
332
338
  };
333
339
 
334
340
  // ---------------------------------------------------------------------------
@@ -341,31 +347,30 @@ export const computerUseRunAppleScriptTool: Tool = {
341
347
  "Run an AppleScript command. Prefer this over click/type when possible - it doesn't move the cursor or interrupt foreground activity. Never use 'do shell script' inside AppleScript (blocked for security).",
342
348
  category: "computer-use",
343
349
  defaultRiskLevel: RiskLevel.Low,
344
- executionMode: "proxy",
345
350
  executionTarget: "host",
346
351
 
347
352
  input_schema: {
348
- type: "object",
349
- properties: {
350
- script: {
351
- type: "string",
352
- description: "The AppleScript source code to execute",
353
- },
354
- reasoning: {
355
- type: "string",
356
- description:
357
- "Explanation of what this script does and why AppleScript is better than UI interaction for this step",
358
- },
359
- target_client_id: {
360
- type: "string",
361
- description:
362
- "ID of the specific client to target. Required when multiple clients support host_cu; omit when only one is connected. Obtain IDs from `assistant clients list --capability host_cu`.",
363
- },
364
- },
365
- required: ["script", "reasoning"],
366
- },
367
-
368
- execute: proxyExecute,
353
+ type: "object",
354
+ properties: {
355
+ script: {
356
+ type: "string",
357
+ description: "The AppleScript source code to execute",
358
+ },
359
+ reasoning: {
360
+ type: "string",
361
+ description:
362
+ "Explanation of what this script does and why AppleScript is better than UI interaction for this step",
363
+ },
364
+ target_client_id: {
365
+ type: "string",
366
+ description:
367
+ "ID of the specific client to target. Required when multiple clients support host_cu; omit when only one is connected. Obtain IDs from `assistant clients list --capability host_cu`.",
368
+ },
369
+ },
370
+ required: ["script", "reasoning"],
371
+ },
372
+
373
+ execute: proxyExecute("computer_use_run_applescript"),
369
374
  };
370
375
 
371
376
  // ---------------------------------------------------------------------------
@@ -378,21 +383,20 @@ export const computerUseDoneTool: Tool = {
378
383
  "Signal that the computer use task is complete. Provide a summary of what was accomplished. This ends the computer use session.",
379
384
  category: "computer-use",
380
385
  defaultRiskLevel: RiskLevel.Low,
381
- executionMode: "proxy",
382
386
  executionTarget: "host",
383
387
 
384
388
  input_schema: {
385
- type: "object",
386
- properties: {
387
- summary: {
388
- type: "string",
389
- description: "Human-readable summary of what was accomplished",
390
- },
391
- },
392
- required: ["summary"],
389
+ type: "object",
390
+ properties: {
391
+ summary: {
392
+ type: "string",
393
+ description: "Human-readable summary of what was accomplished",
393
394
  },
395
+ },
396
+ required: ["summary"],
397
+ },
394
398
 
395
- execute: proxyExecute,
399
+ execute: proxyExecute("computer_use_done"),
396
400
  };
397
401
 
398
402
  // ---------------------------------------------------------------------------
@@ -405,25 +409,24 @@ export const computerUseRespondTool: Tool = {
405
409
  "Reply with a text answer instead of performing computer actions. Use this when you can answer directly without interacting with the screen.",
406
410
  category: "computer-use",
407
411
  defaultRiskLevel: RiskLevel.Low,
408
- executionMode: "proxy",
409
412
  executionTarget: "host",
410
413
 
411
414
  input_schema: {
412
- type: "object",
413
- properties: {
414
- answer: {
415
- type: "string",
416
- description: "The text answer to display",
417
- },
418
- reasoning: {
419
- type: "string",
420
- description: "Explanation of how you determined the answer",
421
- },
422
- },
423
- required: ["answer", "reasoning"],
424
- },
425
-
426
- execute: proxyExecute,
415
+ type: "object",
416
+ properties: {
417
+ answer: {
418
+ type: "string",
419
+ description: "The text answer to display",
420
+ },
421
+ reasoning: {
422
+ type: "string",
423
+ description: "Explanation of how you determined the answer",
424
+ },
425
+ },
426
+ required: ["answer", "reasoning"],
427
+ },
428
+
429
+ execute: proxyExecute("computer_use_respond"),
427
430
  };
428
431
 
429
432
  // ---------------------------------------------------------------------------
@@ -436,16 +439,15 @@ const computerUseObserveTool: Tool = {
436
439
  "Capture the current screen state. Returns the accessibility tree with [ID] element references and optionally a screenshot.\n\nThe accessibility tree shows interactive elements like [3] AXButton 'Save' or [17] AXTextField 'Search'. Use element_id to target these elements in subsequent actions - this is much more reliable than pixel coordinates.\n\nCall this before your first computer use action, or to check screen state without acting.",
437
440
  category: "computer-use",
438
441
  defaultRiskLevel: RiskLevel.Low,
439
- executionMode: "proxy",
440
442
  executionTarget: "host",
441
443
 
442
444
  input_schema: {
443
- type: "object",
444
- properties: {},
445
- required: [],
446
- },
445
+ type: "object",
446
+ properties: {},
447
+ required: [],
448
+ },
447
449
 
448
- execute: proxyExecute,
450
+ execute: proxyExecute("computer_use_observe"),
449
451
  };
450
452
 
451
453
  // ---------------------------------------------------------------------------