@vellumai/assistant 0.4.44 → 0.4.45

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 (681) hide show
  1. package/.prettierignore +4 -0
  2. package/ARCHITECTURE.md +34 -31
  3. package/README.md +4 -4
  4. package/bun.lock +10 -35
  5. package/docs/architecture/integrations.md +102 -197
  6. package/docs/architecture/keychain-broker.md +1 -1
  7. package/docs/architecture/memory.md +2 -2
  8. package/docs/architecture/scheduling.md +1 -1
  9. package/docs/architecture/security.md +11 -11
  10. package/docs/error-handling.md +1 -1
  11. package/docs/trusted-contact-access.md +3 -3
  12. package/drizzle/meta/0000_snapshot.json +34 -100
  13. package/drizzle/meta/_journal.json +1 -1
  14. package/drizzle.config.ts +4 -4
  15. package/package.json +3 -2
  16. package/scripts/capture-x-graphql.ts +237 -141
  17. package/scripts/generate-bundled-tool-registry.ts +223 -0
  18. package/src/__tests__/access-request-decision.test.ts +0 -1
  19. package/src/__tests__/actor-token-service.test.ts +23 -24
  20. package/src/__tests__/agent-loop.test.ts +0 -131
  21. package/src/__tests__/always-loaded-tools-guard.test.ts +71 -0
  22. package/src/__tests__/amazon-cdp-integration.test.ts +11 -9
  23. package/src/__tests__/approval-primitive.test.ts +0 -1
  24. package/src/__tests__/approval-routes-http.test.ts +11 -1
  25. package/src/__tests__/asset-materialize-tool.test.ts +0 -1
  26. package/src/__tests__/asset-search-tool.test.ts +0 -1
  27. package/src/__tests__/assistant-attachment-directive.test.ts +1 -1
  28. package/src/__tests__/assistant-events-sse-hardening.test.ts +0 -1
  29. package/src/__tests__/assistant-feature-flag-guardrails.test.ts +0 -2
  30. package/src/__tests__/assistant-feature-flags-integration.test.ts +70 -18
  31. package/src/__tests__/assistant-id-boundary-guard.test.ts +6 -6
  32. package/src/__tests__/attachments-store.test.ts +0 -1
  33. package/src/__tests__/avatar-e2e.test.ts +74 -115
  34. package/src/__tests__/avatar-router.test.ts +25 -62
  35. package/src/__tests__/browser-manager.test.ts +24 -0
  36. package/src/__tests__/browser-skill-baseline-tool-payload.test.ts +4 -3
  37. package/src/__tests__/browser-skill-endstate.test.ts +8 -11
  38. package/src/__tests__/btw-routes.test.ts +326 -0
  39. package/src/__tests__/bundled-skill-retrieval-guard.test.ts +23 -9
  40. package/src/__tests__/call-controller.test.ts +0 -1
  41. package/src/__tests__/call-conversation-messages.test.ts +0 -1
  42. package/src/__tests__/call-domain.test.ts +0 -1
  43. package/src/__tests__/call-pointer-messages.test.ts +0 -1
  44. package/src/__tests__/call-recovery.test.ts +0 -1
  45. package/src/__tests__/call-routes-http.test.ts +0 -1
  46. package/src/__tests__/call-store.test.ts +0 -1
  47. package/src/__tests__/canonical-guardian-store.test.ts +0 -1
  48. package/src/__tests__/channel-approval-routes.test.ts +1 -1
  49. package/src/__tests__/channel-approvals.test.ts +1 -1
  50. package/src/__tests__/channel-delivery-store.test.ts +0 -1
  51. package/src/__tests__/channel-guardian.test.ts +5 -7
  52. package/src/__tests__/channel-retry-sweep.test.ts +0 -1
  53. package/src/__tests__/checker.test.ts +4 -11
  54. package/src/__tests__/compaction.benchmark.test.ts +16 -14
  55. package/src/__tests__/computer-use-session-lifecycle.test.ts +10 -11
  56. package/src/__tests__/computer-use-session-working-dir.test.ts +2 -6
  57. package/src/__tests__/computer-use-skill-lifecycle-cleanup.test.ts +2 -5
  58. package/src/__tests__/computer-use-tools.test.ts +35 -31
  59. package/src/__tests__/config-schema.test.ts +11 -15
  60. package/src/__tests__/config-watcher.test.ts +0 -1
  61. package/src/__tests__/confirmation-request-guardian-bridge.test.ts +0 -1
  62. package/src/__tests__/conflict-store.test.ts +0 -1
  63. package/src/__tests__/connection-policy.test.ts +4 -7
  64. package/src/__tests__/contacts-tools.test.ts +0 -1
  65. package/src/__tests__/context-memory-e2e.test.ts +2 -4
  66. package/src/__tests__/context-overflow-reducer.test.ts +2 -4
  67. package/src/__tests__/context-window-manager.test.ts +147 -60
  68. package/src/__tests__/contradiction-checker.test.ts +0 -1
  69. package/src/__tests__/conversation-attention-store.test.ts +0 -1
  70. package/src/__tests__/conversation-attention-telegram.test.ts +1 -1
  71. package/src/__tests__/conversation-pairing.test.ts +2 -2
  72. package/src/__tests__/conversation-routes-guardian-reply.test.ts +25 -1
  73. package/src/__tests__/conversation-routes-slash-commands.test.ts +381 -0
  74. package/src/__tests__/conversation-store.test.ts +0 -1
  75. package/src/__tests__/conversation-unread-route.test.ts +1 -2
  76. package/src/__tests__/credential-security-invariants.test.ts +7 -8
  77. package/src/__tests__/cross-provider-web-search.test.ts +353 -0
  78. package/src/__tests__/daemon-assistant-events.test.ts +6 -7
  79. package/src/__tests__/db-schedule-syntax-migration.test.ts +15 -3
  80. package/src/__tests__/delete-managed-skill-tool.test.ts +5 -9
  81. package/src/__tests__/deterministic-verification-control-plane.test.ts +0 -1
  82. package/src/__tests__/diagnostics-export.test.ts +189 -0
  83. package/src/__tests__/dynamic-skill-workflow-prompt.test.ts +0 -1
  84. package/src/__tests__/emit-signal-routing-intent.test.ts +3 -3
  85. package/src/__tests__/entity-extractor.test.ts +0 -1
  86. package/src/__tests__/entity-search.test.ts +0 -1
  87. package/src/__tests__/ephemeral-permissions.test.ts +2 -4
  88. package/src/__tests__/file-read-tool.test.ts +86 -0
  89. package/src/__tests__/followup-tools.test.ts +0 -1
  90. package/src/__tests__/frontmatter.test.ts +77 -34
  91. package/src/__tests__/gateway-only-enforcement.test.ts +0 -1
  92. package/src/__tests__/gateway-only-guard.test.ts +1 -1
  93. package/src/__tests__/guardian-action-conversation-turn.test.ts +0 -1
  94. package/src/__tests__/guardian-action-followup-executor.test.ts +0 -1
  95. package/src/__tests__/guardian-action-followup-store.test.ts +0 -1
  96. package/src/__tests__/guardian-action-grant-mint-consume.test.ts +0 -1
  97. package/src/__tests__/guardian-action-late-reply.test.ts +0 -1
  98. package/src/__tests__/guardian-action-store.test.ts +0 -1
  99. package/src/__tests__/guardian-action-sweep.test.ts +0 -1
  100. package/src/__tests__/guardian-decision-primitive-canonical.test.ts +0 -1
  101. package/src/__tests__/guardian-dispatch.test.ts +1 -2
  102. package/src/__tests__/guardian-grant-minting.test.ts +1 -1
  103. package/src/__tests__/guardian-outbound-http.test.ts +0 -1
  104. package/src/__tests__/guardian-principal-id-roundtrip.test.ts +0 -1
  105. package/src/__tests__/guardian-routing-invariants.test.ts +1 -1
  106. package/src/__tests__/guardian-routing-state.test.ts +0 -1
  107. package/src/__tests__/guardian-verification-voice-binding.test.ts +0 -1
  108. package/src/__tests__/guardian-verify-setup-skill-regression.test.ts +3 -5
  109. package/src/__tests__/handlers-user-message-approval-consumption.test.ts +28 -426
  110. package/src/__tests__/host-bash-proxy.test.ts +335 -0
  111. package/src/__tests__/host-file-proxy.test.ts +374 -0
  112. package/src/__tests__/host-shell-tool.test.ts +147 -1
  113. package/src/__tests__/http-user-message-parity.test.ts +361 -0
  114. package/src/__tests__/inbound-invite-redemption.test.ts +0 -1
  115. package/src/__tests__/integration-status.test.ts +3 -8
  116. package/src/__tests__/intent-routing.test.ts +7 -46
  117. package/src/__tests__/invite-redemption-service.test.ts +0 -1
  118. package/src/__tests__/invite-routes-http.test.ts +0 -1
  119. package/src/__tests__/llm-usage-store.test.ts +0 -1
  120. package/src/__tests__/managed-avatar-client.test.ts +101 -55
  121. package/src/__tests__/managed-skill-lifecycle.test.ts +9 -18
  122. package/src/__tests__/managed-store.test.ts +94 -21
  123. package/src/__tests__/media-reuse-story.e2e.test.ts +0 -1
  124. package/src/__tests__/memory-context-benchmark.benchmark.test.ts +2 -4
  125. package/src/__tests__/memory-lifecycle-e2e.test.ts +0 -1
  126. package/src/__tests__/memory-recall-quality.test.ts +0 -1
  127. package/src/__tests__/memory-regressions.experimental.test.ts +0 -1
  128. package/src/__tests__/memory-regressions.test.ts +0 -1
  129. package/src/__tests__/memory-retrieval.benchmark.test.ts +0 -1
  130. package/src/__tests__/memory-upsert-concurrency.test.ts +0 -1
  131. package/src/__tests__/messaging-send-tool.test.ts +35 -0
  132. package/src/__tests__/messaging-skill-split.test.ts +138 -0
  133. package/src/__tests__/migration-cross-version-compatibility.test.ts +0 -1
  134. package/src/__tests__/migration-export-http.test.ts +2 -3
  135. package/src/__tests__/migration-import-commit-http.test.ts +1 -2
  136. package/src/__tests__/migration-import-preflight-http.test.ts +1 -2
  137. package/src/__tests__/migration-validate-http.test.ts +1 -2
  138. package/src/__tests__/native-web-search.test.ts +475 -0
  139. package/src/__tests__/navigate-settings-tab.test.ts +84 -0
  140. package/src/__tests__/non-member-access-request.test.ts +0 -1
  141. package/src/__tests__/notification-broadcaster.test.ts +15 -15
  142. package/src/__tests__/notification-decision-strategy.test.ts +6 -6
  143. package/src/__tests__/notification-deep-link.test.ts +7 -7
  144. package/src/__tests__/notification-guardian-path.test.ts +2 -3
  145. package/src/__tests__/notification-telegram-adapter.test.ts +1 -1
  146. package/src/__tests__/notification-thread-candidates.test.ts +4 -4
  147. package/src/__tests__/onboarding-starter-tasks.test.ts +0 -1
  148. package/src/__tests__/playbook-execution.test.ts +0 -1
  149. package/src/__tests__/playbook-tools.test.ts +0 -1
  150. package/src/__tests__/profile-compiler.test.ts +0 -1
  151. package/src/__tests__/provider-managed-proxy-integration.test.ts +25 -0
  152. package/src/__tests__/qdrant-collection-migration.test.ts +223 -0
  153. package/src/__tests__/recording-handler.test.ts +30 -94
  154. package/src/__tests__/registry.test.ts +28 -35
  155. package/src/__tests__/relay-server.test.ts +0 -1
  156. package/src/__tests__/ride-shotgun-handler.test.ts +4 -20
  157. package/src/__tests__/runtime-attachment-metadata.test.ts +0 -1
  158. package/src/__tests__/runtime-events-sse-parity.test.ts +3 -4
  159. package/src/__tests__/runtime-events-sse.test.ts +0 -1
  160. package/src/__tests__/sandbox-diagnostics.test.ts +0 -1
  161. package/src/__tests__/scaffold-managed-skill-tool.test.ts +30 -28
  162. package/src/__tests__/schedule-store.test.ts +441 -1
  163. package/src/__tests__/schedule-tools.test.ts +468 -7
  164. package/src/__tests__/scheduler-recurrence.test.ts +196 -23
  165. package/src/__tests__/scoped-approval-grants.test.ts +0 -1
  166. package/src/__tests__/scoped-grant-security-matrix.test.ts +0 -1
  167. package/src/__tests__/secret-prompt-log-hygiene.test.ts +6 -3
  168. package/src/__tests__/secret-response-routing.test.ts +4 -1
  169. package/src/__tests__/send-endpoint-busy.test.ts +14 -2
  170. package/src/__tests__/send-notification-tool.test.ts +0 -7
  171. package/src/__tests__/sequence-store.test.ts +0 -1
  172. package/src/__tests__/server-history-render.test.ts +1 -2
  173. package/src/__tests__/session-abort-tool-results.test.ts +0 -1
  174. package/src/__tests__/session-agent-loop.test.ts +46 -6
  175. package/src/__tests__/session-confirmation-signals.test.ts +0 -1
  176. package/src/__tests__/session-conflict-gate.test.ts +2 -6
  177. package/src/__tests__/session-error.test.ts +5 -14
  178. package/src/__tests__/session-init.benchmark.test.ts +3 -5
  179. package/src/__tests__/session-load-history-repair.test.ts +0 -1
  180. package/src/__tests__/session-media-retry.test.ts +12 -74
  181. package/src/__tests__/session-pre-run-repair.test.ts +0 -1
  182. package/src/__tests__/session-profile-injection.test.ts +2 -6
  183. package/src/__tests__/session-provider-retry-repair.test.ts +2 -6
  184. package/src/__tests__/session-queue.test.ts +94 -139
  185. package/src/__tests__/session-skill-tools.test.ts +115 -115
  186. package/src/__tests__/session-slash-known.test.ts +0 -1
  187. package/src/__tests__/session-slash-queue.test.ts +0 -1
  188. package/src/__tests__/session-slash-unknown.test.ts +0 -1
  189. package/src/__tests__/session-surfaces-task-progress.test.ts +34 -0
  190. package/src/__tests__/session-usage.test.ts +0 -1
  191. package/src/__tests__/session-workspace-cache-state.test.ts +2 -6
  192. package/src/__tests__/session-workspace-injection.test.ts +2 -6
  193. package/src/__tests__/session-workspace-tool-tracking.test.ts +2 -6
  194. package/src/__tests__/skill-feature-flags-integration.test.ts +180 -184
  195. package/src/__tests__/skill-feature-flags.test.ts +125 -18
  196. package/src/__tests__/skill-load-feature-flag.test.ts +1 -2
  197. package/src/__tests__/skill-load-tool.test.ts +194 -2
  198. package/src/__tests__/skill-projection-feature-flag.test.ts +27 -16
  199. package/src/__tests__/skill-projection.benchmark.test.ts +15 -14
  200. package/src/__tests__/skills.test.ts +14 -53
  201. package/src/__tests__/slack-channel-config.test.ts +0 -1
  202. package/src/__tests__/slack-inbound-verification.test.ts +0 -1
  203. package/src/__tests__/slack-skill.test.ts +1 -1
  204. package/src/__tests__/subagent-tools.test.ts +2 -2
  205. package/src/__tests__/system-prompt.test.ts +4 -3
  206. package/src/__tests__/task-compiler.test.ts +0 -1
  207. package/src/__tests__/task-management-tools.test.ts +0 -1
  208. package/src/__tests__/task-memory-cleanup.test.ts +0 -1
  209. package/src/__tests__/task-runner.test.ts +0 -1
  210. package/src/__tests__/task-scheduler.test.ts +0 -1
  211. package/src/__tests__/terminal-tools.test.ts +0 -1
  212. package/src/__tests__/test-support/computer-use-skill-harness.ts +2 -4
  213. package/src/__tests__/thread-seed-composer.test.ts +5 -5
  214. package/src/__tests__/tool-approval-handler.test.ts +0 -1
  215. package/src/__tests__/tool-execution-abort-cleanup.test.ts +0 -1
  216. package/src/__tests__/tool-execution-pipeline.benchmark.test.ts +0 -1
  217. package/src/__tests__/tool-executor.test.ts +8 -86
  218. package/src/__tests__/tool-grant-request-escalation.test.ts +0 -1
  219. package/src/__tests__/tool-notification-listener.test.ts +1 -1
  220. package/src/__tests__/tool-preview-lifecycle.test.ts +416 -0
  221. package/src/__tests__/trust-store.test.ts +80 -4
  222. package/src/__tests__/trusted-contact-approval-notifier.test.ts +0 -1
  223. package/src/__tests__/trusted-contact-inline-approval-integration.test.ts +0 -1
  224. package/src/__tests__/trusted-contact-lifecycle-notifications.test.ts +0 -1
  225. package/src/__tests__/trusted-contact-multichannel.test.ts +0 -1
  226. package/src/__tests__/trusted-contact-verification.test.ts +0 -1
  227. package/src/__tests__/twilio-provider.test.ts +0 -1
  228. package/src/__tests__/twilio-routes.test.ts +0 -1
  229. package/src/__tests__/{request-file-tool.test.ts → ui-file-upload-surface.test.ts} +11 -72
  230. package/src/__tests__/update-bulletin.test.ts +0 -1
  231. package/src/__tests__/usage-cache-backfill-migration.test.ts +0 -1
  232. package/src/__tests__/usage-routes.test.ts +0 -1
  233. package/src/__tests__/verification-control-plane-policy.test.ts +4 -4
  234. package/src/__tests__/voice-invite-redemption.test.ts +0 -1
  235. package/src/__tests__/voice-scoped-grant-consumer.test.ts +0 -1
  236. package/src/__tests__/voice-session-bridge.test.ts +9 -1
  237. package/src/__tests__/web-fetch.test.ts +57 -0
  238. package/src/__tests__/workspace-git-service.test.ts +5 -14
  239. package/src/__tests__/workspace-policy.test.ts +0 -1
  240. package/src/agent/loop.ts +22 -34
  241. package/src/bundler/bundle-signer.ts +4 -4
  242. package/src/calls/call-controller.ts +1 -1
  243. package/src/calls/relay-server.ts +1 -1
  244. package/src/calls/twilio-rest.ts +1 -1
  245. package/src/calls/voice-session-bridge.ts +3 -1
  246. package/src/cli/__tests__/notifications.test.ts +3 -4
  247. package/src/cli/commands/map.ts +2 -6
  248. package/src/cli/commands/mcp.ts +73 -15
  249. package/src/cli/commands/notifications.ts +4 -4
  250. package/src/cli/commands/sessions.ts +9 -1
  251. package/src/cli/commands/skills.ts +6 -10
  252. package/src/cli/http-client.ts +2 -3
  253. package/src/cli/main-screen.tsx +10 -10
  254. package/src/cli/program.ts +0 -4
  255. package/src/cli/reference.ts +0 -2
  256. package/src/cli.ts +15 -9
  257. package/src/config/__tests__/bundled-tool-registry-guard.test.ts +120 -0
  258. package/src/config/bundled-skills/_shared/CLI_RETRIEVAL_PATTERN.md +11 -0
  259. package/src/config/bundled-skills/app-builder/SKILL.md +6 -1
  260. package/src/config/bundled-skills/browser/SKILL.md +6 -1
  261. package/src/config/bundled-skills/chatgpt-import/SKILL.md +5 -1
  262. package/src/config/bundled-skills/claude-code/SKILL.md +5 -1
  263. package/src/config/bundled-skills/computer-use/SKILL.md +6 -1
  264. package/src/config/bundled-skills/computer-use/TOOLS.json +6 -69
  265. package/src/config/bundled-skills/computer-use/tools/computer-use-click.ts +10 -1
  266. package/src/config/bundled-skills/contacts/SKILL.md +10 -1
  267. package/src/config/bundled-skills/contacts/TOOLS.json +35 -0
  268. package/src/config/bundled-skills/{messaging → contacts}/tools/google-contacts.ts +9 -2
  269. package/src/config/bundled-skills/document/SKILL.md +4 -1
  270. package/src/config/bundled-skills/doordash/SKILL.md +8 -1
  271. package/src/config/bundled-skills/doordash/lib/shared/platform.ts +4 -1
  272. package/src/config/bundled-skills/followups/SKILL.md +4 -1
  273. package/src/config/bundled-skills/gmail/SKILL.md +180 -0
  274. package/src/config/bundled-skills/gmail/TOOLS.json +506 -0
  275. package/src/config/bundled-skills/gmail/tools/gmail-archive.ts +149 -0
  276. package/src/config/bundled-skills/gmail/tools/gmail-attachments.ts +110 -0
  277. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-draft.ts +1 -1
  278. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-filters.ts +1 -1
  279. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-follow-up.ts +1 -1
  280. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-forward.ts +1 -1
  281. package/src/config/bundled-skills/gmail/tools/gmail-label.ts +50 -0
  282. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-outreach-scan.ts +8 -90
  283. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-send-draft.ts +1 -1
  284. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-sender-digest.ts +2 -2
  285. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-trash.ts +1 -1
  286. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-unsubscribe.ts +1 -1
  287. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-vacation.ts +1 -1
  288. package/src/config/bundled-skills/gmail/tools/shared.ts +47 -0
  289. package/src/config/bundled-skills/google-calendar/SKILL.md +5 -1
  290. package/src/config/bundled-skills/image-studio/SKILL.md +5 -1
  291. package/src/config/bundled-skills/knowledge-graph/SKILL.md +4 -1
  292. package/src/config/bundled-skills/media-processing/SKILL.md +7 -13
  293. package/src/config/bundled-skills/media-processing/TOOLS.json +0 -22
  294. package/src/config/bundled-skills/media-processing/tools/generate-clip.ts +12 -1
  295. package/src/config/bundled-skills/messaging/SKILL.md +23 -139
  296. package/src/config/bundled-skills/messaging/TOOLS.json +33 -1215
  297. package/src/config/bundled-skills/messaging/tools/gmail-mime-helpers.ts +42 -0
  298. package/src/config/bundled-skills/messaging/tools/messaging-send.ts +165 -2
  299. package/src/config/bundled-skills/messaging/tools/messaging-sender-digest.ts +1 -13
  300. package/src/config/bundled-skills/messaging/tools/shared.ts +81 -34
  301. package/src/config/bundled-skills/notifications/SKILL.md +5 -1
  302. package/src/config/bundled-skills/orchestration/SKILL.md +30 -0
  303. package/src/config/bundled-skills/orchestration/TOOLS.json +35 -0
  304. package/src/config/bundled-skills/{reminder/tools/reminder-create.ts → orchestration/tools/swarm-delegate.ts} +3 -3
  305. package/src/config/bundled-skills/phone-calls/SKILL.md +9 -1
  306. package/src/config/bundled-skills/playbooks/SKILL.md +4 -1
  307. package/src/config/bundled-skills/schedule/SKILL.md +70 -9
  308. package/src/config/bundled-skills/schedule/TOOLS.json +38 -6
  309. package/src/config/bundled-skills/screen-watch/SKILL.md +28 -0
  310. package/src/config/bundled-skills/screen-watch/TOOLS.json +35 -0
  311. package/src/config/bundled-skills/{reminder/tools/reminder-cancel.ts → screen-watch/tools/start-screen-watch.ts} +3 -3
  312. package/src/config/bundled-skills/sequences/SKILL.md +47 -0
  313. package/src/config/bundled-skills/sequences/TOOLS.json +340 -0
  314. package/src/config/bundled-skills/sequences/tools/sequence-update.ts +128 -0
  315. package/src/config/bundled-skills/sequences/tools/shared.ts +9 -0
  316. package/src/config/bundled-skills/settings/SKILL.md +12 -0
  317. package/src/config/bundled-skills/settings/TOOLS.json +112 -0
  318. package/src/config/bundled-skills/settings/tools/navigate-settings-tab.ts +43 -0
  319. package/src/config/bundled-skills/settings/tools/open-system-settings.ts +52 -0
  320. package/src/config/bundled-skills/{computer-use/tools/computer-use-right-click.ts → settings/tools/set-avatar.ts} +2 -6
  321. package/src/{tools/system/voice-config.ts → config/bundled-skills/settings/tools/voice-config-update.ts} +59 -96
  322. package/src/config/bundled-skills/skill-management/SKILL.md +18 -0
  323. package/src/config/bundled-skills/skill-management/TOOLS.json +90 -0
  324. package/src/config/bundled-skills/{computer-use/tools/computer-use-double-click.ts → skill-management/tools/delete-managed.ts} +2 -6
  325. package/src/config/bundled-skills/skill-management/tools/scaffold-managed.ts +12 -0
  326. package/src/config/bundled-skills/slack/SKILL.md +5 -1
  327. package/src/config/bundled-skills/subagent/SKILL.md +4 -1
  328. package/src/config/bundled-skills/tasks/SKILL.md +5 -2
  329. package/src/config/bundled-skills/transcribe/SKILL.md +4 -1
  330. package/src/config/bundled-skills/watcher/SKILL.md +4 -1
  331. package/src/config/bundled-tool-registry.ts +118 -107
  332. package/src/config/env.ts +5 -2
  333. package/src/config/feature-flag-registry.json +25 -9
  334. package/src/config/loader.ts +10 -2
  335. package/src/config/schema.ts +19 -16
  336. package/src/config/schemas/inference.ts +12 -22
  337. package/src/config/schemas/memory-storage.ts +19 -1
  338. package/src/config/schemas/platform.ts +0 -16
  339. package/src/config/skill-state.ts +11 -8
  340. package/src/config/skills.ts +83 -32
  341. package/src/context/token-estimator.ts +11 -0
  342. package/src/context/window-manager.ts +180 -151
  343. package/src/daemon/computer-use-session.ts +11 -43
  344. package/src/daemon/daemon-control.ts +4 -1
  345. package/src/daemon/handlers/config-channels.ts +5 -9
  346. package/src/daemon/handlers/config-ingress.ts +0 -4
  347. package/src/daemon/handlers/config-model.ts +7 -13
  348. package/src/daemon/handlers/config-telegram.ts +4 -8
  349. package/src/daemon/handlers/config-voice.ts +2 -5
  350. package/src/daemon/handlers/dictation.ts +2 -12
  351. package/src/daemon/handlers/identity.ts +0 -105
  352. package/src/daemon/handlers/recording.ts +3 -23
  353. package/src/daemon/handlers/session-history.ts +1 -1
  354. package/src/daemon/handlers/sessions.ts +53 -72
  355. package/src/daemon/handlers/shared.ts +7 -28
  356. package/src/daemon/handlers/skills.ts +31 -27
  357. package/src/daemon/host-bash-proxy.ts +148 -0
  358. package/src/daemon/host-file-proxy.ts +135 -0
  359. package/src/daemon/lifecycle.ts +49 -24
  360. package/src/daemon/mcp-reload-service.ts +123 -0
  361. package/src/daemon/message-protocol.ts +6 -0
  362. package/src/daemon/message-types/browser.ts +1 -1
  363. package/src/daemon/message-types/computer-use.ts +1 -4
  364. package/src/daemon/message-types/guardian-actions.ts +1 -1
  365. package/src/daemon/message-types/host-bash.ts +18 -0
  366. package/src/daemon/message-types/host-file.ts +44 -0
  367. package/src/daemon/message-types/integrations.ts +1 -67
  368. package/src/daemon/message-types/messages.ts +15 -0
  369. package/src/daemon/message-types/schedules.ts +11 -27
  370. package/src/daemon/message-types/sessions.ts +2 -1
  371. package/src/daemon/message-types/settings.ts +1 -1
  372. package/src/daemon/message-types/shared.ts +1 -1
  373. package/src/daemon/ride-shotgun-handler.ts +2 -42
  374. package/src/daemon/server.ts +43 -10
  375. package/src/daemon/session-agent-loop-handlers.ts +48 -7
  376. package/src/daemon/session-agent-loop.ts +97 -66
  377. package/src/daemon/session-attachments.ts +1 -1
  378. package/src/daemon/session-error.ts +17 -16
  379. package/src/daemon/session-lifecycle.ts +20 -1
  380. package/src/daemon/session-media-retry.ts +1 -15
  381. package/src/daemon/session-messaging.ts +14 -6
  382. package/src/daemon/session-process.ts +36 -7
  383. package/src/daemon/session-queue-manager.ts +62 -103
  384. package/src/daemon/session-runtime-assembly.ts +27 -0
  385. package/src/daemon/session-skill-tools.ts +12 -11
  386. package/src/daemon/session-slash.ts +7 -0
  387. package/src/daemon/session-surfaces.ts +19 -97
  388. package/src/daemon/session-tool-setup.ts +146 -6
  389. package/src/daemon/session.ts +77 -13
  390. package/src/errors.ts +0 -2
  391. package/src/export/formatter.ts +6 -0
  392. package/src/mcp/mcp-oauth-provider.ts +1 -3
  393. package/src/media/avatar-router.ts +20 -28
  394. package/src/media/avatar-types.ts +7 -14
  395. package/src/media/managed-avatar-client.ts +70 -34
  396. package/src/memory/conversation-title-service.ts +1 -2
  397. package/src/memory/db-init.ts +16 -0
  398. package/src/memory/embedding-backend.ts +129 -27
  399. package/src/memory/embedding-gemini.test.ts +256 -0
  400. package/src/memory/embedding-gemini.ts +47 -13
  401. package/src/memory/embedding-local.ts +14 -2
  402. package/src/memory/embedding-ollama.ts +15 -2
  403. package/src/memory/embedding-openai.ts +15 -2
  404. package/src/memory/embedding-types.test.ts +116 -0
  405. package/src/memory/embedding-types.ts +61 -0
  406. package/src/memory/fingerprint.ts +1 -1
  407. package/src/memory/indexer.ts +25 -1
  408. package/src/memory/job-handlers/embedding.test.ts +258 -0
  409. package/src/memory/job-handlers/embedding.ts +81 -1
  410. package/src/memory/job-handlers/index-maintenance.ts +35 -1
  411. package/src/memory/job-handlers/media-processing.ts +11 -1
  412. package/src/memory/job-utils.ts +21 -6
  413. package/src/memory/jobs-store.ts +5 -1
  414. package/src/memory/jobs-worker.ts +8 -0
  415. package/src/memory/message-content.ts +66 -0
  416. package/src/memory/migrations/100-core-tables.ts +1 -31
  417. package/src/memory/migrations/104-core-indexes.ts +0 -11
  418. package/src/memory/migrations/145-drop-accounts-table.ts +19 -0
  419. package/src/memory/migrations/146-schedule-oneshot-routing.ts +94 -0
  420. package/src/memory/migrations/147-migrate-reminders-to-schedules.ts +129 -0
  421. package/src/memory/migrations/148-drop-reminders-table.ts +18 -0
  422. package/src/memory/migrations/index.ts +4 -0
  423. package/src/memory/migrations/registry.ts +19 -0
  424. package/src/memory/qdrant-client.ts +158 -43
  425. package/src/memory/retriever.test.ts +0 -1
  426. package/src/memory/retriever.ts +12 -2
  427. package/src/memory/schema/infrastructure.ts +5 -29
  428. package/src/memory/search/formatting.ts +34 -9
  429. package/src/memory/search/semantic.ts +57 -2
  430. package/src/memory/search/types.ts +2 -1
  431. package/src/notifications/AGENTS.md +2 -2
  432. package/src/notifications/README.md +59 -58
  433. package/src/notifications/adapters/macos.ts +1 -1
  434. package/src/notifications/broadcaster.ts +5 -5
  435. package/src/notifications/copy-composer.ts +1 -1
  436. package/src/notifications/decision-engine.ts +2 -2
  437. package/src/notifications/destination-resolver.ts +2 -2
  438. package/src/notifications/emit-signal.ts +8 -8
  439. package/src/notifications/signal.ts +1 -1
  440. package/src/notifications/thread-seed-composer.ts +1 -1
  441. package/src/oauth/connect-orchestrator.ts +1 -1
  442. package/src/oauth/token-persistence.ts +1 -1
  443. package/src/permissions/checker.ts +12 -1
  444. package/src/permissions/defaults.ts +10 -14
  445. package/src/permissions/trust-store.ts +37 -0
  446. package/src/permissions/workspace-policy.ts +0 -1
  447. package/src/prompts/__tests__/build-cli-reference-section.test.ts +11 -0
  448. package/src/prompts/computer-use-prompt.ts +1 -1
  449. package/src/prompts/system-prompt.ts +29 -30
  450. package/src/prompts/templates/SOUL.md +1 -2
  451. package/src/prompts/templates/UPDATES.md +16 -7
  452. package/src/providers/anthropic/client.ts +87 -33
  453. package/src/providers/gemini/client.ts +6 -0
  454. package/src/providers/managed-proxy/constants.ts +5 -0
  455. package/src/providers/openai/client.ts +15 -0
  456. package/src/providers/registry.ts +2 -2
  457. package/src/providers/types.ts +24 -2
  458. package/src/runtime/AGENTS.md +18 -0
  459. package/src/runtime/assistant-event-hub.ts +2 -3
  460. package/src/runtime/assistant-event.ts +4 -4
  461. package/src/runtime/auth/__tests__/context.test.ts +5 -5
  462. package/src/runtime/auth/__tests__/credential-service.test.ts +0 -1
  463. package/src/runtime/auth/__tests__/guard-tests.test.ts +2 -2
  464. package/src/runtime/auth/__tests__/{ipc-auth-context.test.ts → local-auth-context.test.ts} +21 -21
  465. package/src/runtime/auth/__tests__/route-policy.test.ts +2 -2
  466. package/src/runtime/auth/__tests__/scopes.test.ts +7 -7
  467. package/src/runtime/auth/__tests__/subject.test.ts +8 -8
  468. package/src/runtime/auth/__tests__/token-service.test.ts +0 -1
  469. package/src/runtime/auth/route-policy.ts +8 -4
  470. package/src/runtime/auth/scopes.ts +1 -1
  471. package/src/runtime/auth/subject.ts +4 -4
  472. package/src/runtime/auth/token-service.ts +0 -23
  473. package/src/runtime/auth/types.ts +3 -3
  474. package/src/runtime/guardian-action-followup-executor.ts +1 -1
  475. package/src/runtime/guardian-action-grant-minter.ts +1 -1
  476. package/src/runtime/guardian-action-service.ts +3 -3
  477. package/src/runtime/http-server.ts +15 -2
  478. package/src/runtime/invite-service.ts +3 -3
  479. package/src/runtime/local-actor-identity.ts +17 -22
  480. package/src/runtime/pending-interactions.ts +21 -9
  481. package/src/runtime/routes/app-management-routes.ts +2 -3
  482. package/src/runtime/routes/approval-routes.ts +1 -3
  483. package/src/runtime/routes/btw-routes.ts +155 -0
  484. package/src/runtime/routes/computer-use-routes.ts +77 -31
  485. package/src/runtime/routes/conversation-routes.ts +230 -46
  486. package/src/runtime/routes/diagnostics-routes.ts +63 -29
  487. package/src/runtime/routes/documents-routes.ts +2 -2
  488. package/src/runtime/routes/global-search-routes.ts +1 -1
  489. package/src/runtime/routes/host-bash-routes.ts +83 -0
  490. package/src/runtime/routes/host-file-routes.ts +79 -0
  491. package/src/runtime/routes/integrations/slack/share.ts +1 -1
  492. package/src/runtime/routes/log-export-routes.ts +120 -0
  493. package/src/runtime/routes/mcp-routes.ts +20 -0
  494. package/src/runtime/routes/migration-routes.ts +3 -3
  495. package/src/runtime/routes/pairing-routes.ts +1 -1
  496. package/src/runtime/routes/recording-routes.ts +6 -4
  497. package/src/runtime/routes/schedule-routes.ts +31 -5
  498. package/src/runtime/routes/session-management-routes.ts +2 -6
  499. package/src/runtime/routes/session-query-routes.ts +18 -15
  500. package/src/runtime/routes/settings-routes.ts +7 -261
  501. package/src/runtime/routes/skills-routes.ts +7 -6
  502. package/src/runtime/routes/subagents-routes.ts +4 -10
  503. package/src/runtime/routes/surface-action-routes.ts +3 -14
  504. package/src/runtime/routes/surface-content-routes.ts +22 -5
  505. package/src/runtime/routes/work-items-routes.ts +21 -25
  506. package/src/runtime/routes/workspace-routes.test.ts +3 -3
  507. package/src/runtime/routes/workspace-utils.ts +1 -1
  508. package/src/runtime/telegram-streaming-delivery.ts +3 -0
  509. package/src/runtime/verification-outbound-actions.ts +2 -2
  510. package/src/schedule/integration-status.ts +0 -6
  511. package/src/schedule/schedule-store.ts +234 -43
  512. package/src/schedule/scheduler.ts +73 -74
  513. package/src/security/oauth2.ts +1 -1
  514. package/src/sequence/store.ts +12 -2
  515. package/src/skills/frontmatter.ts +19 -77
  516. package/src/skills/managed-store.ts +11 -2
  517. package/src/subagent/manager.ts +5 -3
  518. package/src/tasks/ephemeral-permissions.ts +3 -5
  519. package/src/tools/AGENTS.md +0 -1
  520. package/src/tools/browser/browser-manager.ts +17 -11
  521. package/src/tools/browser/jit-auth.ts +4 -1
  522. package/src/tools/claude-code/claude-code.ts +1 -1
  523. package/src/tools/computer-use/definitions.ts +48 -60
  524. package/src/tools/document/document-tool.ts +6 -6
  525. package/src/tools/filesystem/edit.ts +2 -1
  526. package/src/tools/filesystem/read.ts +20 -2
  527. package/src/tools/filesystem/write.ts +2 -1
  528. package/src/tools/host-filesystem/edit.ts +17 -1
  529. package/src/tools/host-filesystem/read.ts +16 -1
  530. package/src/tools/host-filesystem/write.ts +15 -1
  531. package/src/tools/host-terminal/host-shell.ts +24 -0
  532. package/src/tools/memory/definitions.ts +45 -81
  533. package/src/tools/memory/handlers.test.ts +0 -1
  534. package/src/tools/memory/handlers.ts +1 -1
  535. package/src/tools/memory/register.ts +26 -60
  536. package/src/tools/network/script-proxy/session-manager.ts +6 -8
  537. package/src/tools/network/web-fetch.ts +7 -1
  538. package/src/tools/network/web-search.ts +2 -1
  539. package/src/tools/registry.ts +23 -0
  540. package/src/tools/schedule/create.ts +113 -5
  541. package/src/tools/schedule/list.ts +57 -15
  542. package/src/tools/schedule/update.ts +73 -3
  543. package/src/tools/shared/filesystem/image-read.ts +192 -0
  544. package/src/tools/side-effects.ts +1 -7
  545. package/src/tools/skills/delete-managed.ts +27 -64
  546. package/src/tools/skills/execute.ts +54 -0
  547. package/src/tools/skills/load.ts +127 -5
  548. package/src/tools/skills/scaffold-managed.ts +93 -172
  549. package/src/tools/subagent/message.ts +0 -7
  550. package/src/tools/subagent/spawn.ts +1 -1
  551. package/src/tools/swarm/delegate.ts +0 -3
  552. package/src/tools/system/avatar-generator.ts +13 -19
  553. package/src/tools/system/request-permission.ts +2 -1
  554. package/src/tools/terminal/safe-env.ts +1 -0
  555. package/src/tools/tool-manifest.ts +41 -47
  556. package/src/tools/types.ts +6 -2
  557. package/src/tools/ui-surface/definitions.ts +0 -55
  558. package/src/util/errors.ts +0 -10
  559. package/src/workspace/git-service.ts +0 -2
  560. package/src/__tests__/account-registry.test.ts +0 -258
  561. package/src/__tests__/email-classifier.test.ts +0 -25
  562. package/src/__tests__/gmail-integration.test.ts +0 -97
  563. package/src/__tests__/handle-user-message-secret-resume.test.ts +0 -172
  564. package/src/__tests__/managed-twitter-guardrails.test.ts +0 -357
  565. package/src/__tests__/recording-intent-fallback.test.ts +0 -199
  566. package/src/__tests__/recording-intent.test.ts +0 -985
  567. package/src/__tests__/recording-state-machine.test.ts +0 -1574
  568. package/src/__tests__/reminder-store.test.ts +0 -350
  569. package/src/__tests__/reminder.test.ts +0 -337
  570. package/src/__tests__/scan-result-store.test.ts +0 -121
  571. package/src/__tests__/twitter-platform-proxy-client.test.ts +0 -475
  572. package/src/__tests__/view-image-tool.test.ts +0 -241
  573. package/src/cli/commands/amazon/cart.ts +0 -513
  574. package/src/cli/commands/amazon/checkout.ts +0 -394
  575. package/src/cli/commands/amazon/client.ts +0 -513
  576. package/src/cli/commands/amazon/index.ts +0 -885
  577. package/src/cli/commands/amazon/product-details.ts +0 -145
  578. package/src/cli/commands/amazon/request-extractor.ts +0 -187
  579. package/src/cli/commands/amazon/search.ts +0 -76
  580. package/src/cli/commands/amazon/session.ts +0 -108
  581. package/src/cli/commands/twitter/__tests__/cli-read-routing.test.ts +0 -345
  582. package/src/cli/commands/twitter/__tests__/cli-routing.test.ts +0 -252
  583. package/src/cli/commands/twitter/__tests__/oauth-client.test.ts +0 -151
  584. package/src/cli/commands/twitter/index.ts +0 -420
  585. package/src/cli/commands/twitter/oauth-client.ts +0 -60
  586. package/src/cli/commands/twitter/router.ts +0 -351
  587. package/src/cli/commands/twitter/types.ts +0 -30
  588. package/src/config/bundled-skills/agentmail/SKILL.md +0 -132
  589. package/src/config/bundled-skills/agentmail/icon.svg +0 -21
  590. package/src/config/bundled-skills/amazon/SKILL.md +0 -136
  591. package/src/config/bundled-skills/amazon/icon.svg +0 -13
  592. package/src/config/bundled-skills/api-mapping/SKILL.md +0 -78
  593. package/src/config/bundled-skills/api-mapping/icon.svg +0 -18
  594. package/src/config/bundled-skills/cli-discover/SKILL.md +0 -68
  595. package/src/config/bundled-skills/deploy-fullstack-vercel/SKILL.md +0 -179
  596. package/src/config/bundled-skills/document-writer/SKILL.md +0 -195
  597. package/src/config/bundled-skills/elevenlabs-voice/SKILL.md +0 -140
  598. package/src/config/bundled-skills/email-setup/SKILL.md +0 -68
  599. package/src/config/bundled-skills/frontend-design/SKILL.md +0 -44
  600. package/src/config/bundled-skills/frontend-design/icon.svg +0 -16
  601. package/src/config/bundled-skills/google-oauth-setup/SKILL.md +0 -452
  602. package/src/config/bundled-skills/guardian-verify-setup/SKILL.md +0 -203
  603. package/src/config/bundled-skills/influencer/SKILL.md +0 -144
  604. package/src/config/bundled-skills/influencer/scripts/client.ts +0 -1269
  605. package/src/config/bundled-skills/influencer/scripts/influencer.ts +0 -267
  606. package/src/config/bundled-skills/macos-automation/SKILL.md +0 -65
  607. package/src/config/bundled-skills/macos-automation/icon.svg +0 -12
  608. package/src/config/bundled-skills/mcp-setup/SKILL.md +0 -75
  609. package/src/config/bundled-skills/media-processing/tools/media-diagnostics.ts +0 -184
  610. package/src/config/bundled-skills/messaging/tools/gmail-archive-by-query.ts +0 -80
  611. package/src/config/bundled-skills/messaging/tools/gmail-archive.ts +0 -29
  612. package/src/config/bundled-skills/messaging/tools/gmail-batch-archive.ts +0 -56
  613. package/src/config/bundled-skills/messaging/tools/gmail-batch-label.ts +0 -34
  614. package/src/config/bundled-skills/messaging/tools/gmail-download-attachment.ts +0 -47
  615. package/src/config/bundled-skills/messaging/tools/gmail-label.ts +0 -31
  616. package/src/config/bundled-skills/messaging/tools/gmail-list-attachments.ts +0 -67
  617. package/src/config/bundled-skills/messaging/tools/gmail-send-with-attachments.ts +0 -97
  618. package/src/config/bundled-skills/messaging/tools/gmail-summarize-thread.ts +0 -87
  619. package/src/config/bundled-skills/messaging/tools/gmail-triage.ts +0 -135
  620. package/src/config/bundled-skills/messaging/tools/messaging-analyze-activity.ts +0 -24
  621. package/src/config/bundled-skills/messaging/tools/messaging-reply.ts +0 -201
  622. package/src/config/bundled-skills/messaging/tools/send-notification.ts +0 -1
  623. package/src/config/bundled-skills/messaging/tools/sequence-cancel.ts +0 -27
  624. package/src/config/bundled-skills/messaging/tools/sequence-pause.ts +0 -48
  625. package/src/config/bundled-skills/messaging/tools/sequence-resume.ts +0 -27
  626. package/src/config/bundled-skills/messaging/tools/sequence-update.ts +0 -56
  627. package/src/config/bundled-skills/notion/SKILL.md +0 -240
  628. package/src/config/bundled-skills/notion-oauth-setup/SKILL.md +0 -126
  629. package/src/config/bundled-skills/oauth-setup/SKILL.md +0 -143
  630. package/src/config/bundled-skills/public-ingress/SKILL.md +0 -258
  631. package/src/config/bundled-skills/reminder/SKILL.md +0 -79
  632. package/src/config/bundled-skills/reminder/TOOLS.json +0 -89
  633. package/src/config/bundled-skills/reminder/tools/reminder-list.ts +0 -12
  634. package/src/config/bundled-skills/restaurant-reservation/SKILL.md +0 -141
  635. package/src/config/bundled-skills/screen-recording/SKILL.md +0 -148
  636. package/src/config/bundled-skills/self-upgrade/SKILL.md +0 -69
  637. package/src/config/bundled-skills/skills-catalog/SKILL.md +0 -78
  638. package/src/config/bundled-skills/slack-app-setup/SKILL.md +0 -178
  639. package/src/config/bundled-skills/slack-digest-setup/SKILL.md +0 -163
  640. package/src/config/bundled-skills/slack-oauth-setup/SKILL.md +0 -157
  641. package/src/config/bundled-skills/start-the-day/SKILL.md +0 -70
  642. package/src/config/bundled-skills/start-the-day/icon.svg +0 -13
  643. package/src/config/bundled-skills/telegram-setup/SKILL.md +0 -105
  644. package/src/config/bundled-skills/time-based-actions/SKILL.md +0 -142
  645. package/src/config/bundled-skills/twilio-setup/SKILL.md +0 -232
  646. package/src/config/bundled-skills/twitter/SKILL.md +0 -206
  647. package/src/config/bundled-skills/twitter/icon.svg +0 -14
  648. package/src/config/bundled-skills/typescript-eval/SKILL.md +0 -60
  649. package/src/config/bundled-skills/vercel-token-setup/SKILL.md +0 -214
  650. package/src/config/bundled-skills/voice-setup/SKILL.md +0 -131
  651. package/src/config/bundled-skills/voice-setup/icon.svg +0 -20
  652. package/src/daemon/handlers/pairing.ts +0 -119
  653. package/src/daemon/handlers/session-user-message.ts +0 -961
  654. package/src/daemon/recording-executor.ts +0 -180
  655. package/src/daemon/recording-intent-fallback.ts +0 -162
  656. package/src/daemon/recording-intent.ts +0 -493
  657. package/src/memory/account-store.ts +0 -117
  658. package/src/messaging/activity-analyzer.ts +0 -76
  659. package/src/messaging/email-classifier.ts +0 -208
  660. package/src/messaging/index.ts +0 -2
  661. package/src/messaging/outreach-classifier.ts +0 -185
  662. package/src/messaging/thread-summarizer.ts +0 -346
  663. package/src/messaging/types.ts +0 -17
  664. package/src/tools/browser/x-auto-navigate.ts +0 -254
  665. package/src/tools/credentials/account-registry.ts +0 -144
  666. package/src/tools/filesystem/view-image.ts +0 -244
  667. package/src/tools/reminder/reminder-store.ts +0 -194
  668. package/src/tools/reminder/reminder.ts +0 -158
  669. package/src/tools/system/navigate-settings.ts +0 -74
  670. package/src/tools/system/open-system-settings.ts +0 -85
  671. package/src/tools/system/version.ts +0 -54
  672. package/src/twitter/platform-proxy-client.ts +0 -408
  673. /package/src/config/bundled-skills/{messaging → gmail}/tools/scan-result-store.ts +0 -0
  674. /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-analytics.ts +0 -0
  675. /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-create.ts +0 -0
  676. /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-delete.ts +0 -0
  677. /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-enroll.ts +0 -0
  678. /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-enrollment-list.ts +0 -0
  679. /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-get.ts +0 -0
  680. /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-import.ts +0 -0
  681. /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-list.ts +0 -0
@@ -195,22 +195,21 @@ export function buildSystemPrompt(): string {
195
195
 
196
196
  function buildTaskScheduleReminderRoutingSection(): string {
197
197
  return [
198
- "## Tool Routing: Tasks vs Schedules vs Reminders vs Notifications",
198
+ "## Tool Routing: Tasks vs Schedules vs Notifications",
199
199
  "",
200
- 'Four tools, each for a different purpose. Load the "Time-Based Actions" skill for the full decision framework.',
200
+ 'Three tools, each for a different purpose. Load the "Time-Based Actions" skill for the full decision framework.',
201
201
  "",
202
202
  "| Tool | Purpose |",
203
203
  "|------|---------|",
204
204
  '| `task_list_add` | Track work — no time trigger ("add to my tasks", "remind me to X" without a time) |',
205
- '| `schedule_create` | Recurring automation on cron/RRULE ("every day at 9am", "weekly on Mondays") |',
206
- '| `reminder_create` | One-shot future alert ("remind me at 3pm", "remind me in 5 minutes") |',
205
+ '| `schedule_create` | Any time-based automation recurring cron/RRULE ("every day at 9am") OR one-shot future alert with `fire_at` ("remind me at 3pm") |',
207
206
  "| `send_notification` | **Immediate-only** — fires instantly, NO delay capability |",
208
207
  "",
209
208
  "### Critical: `send_notification` is immediate-only",
210
- "NEVER use `send_notification` for future-time requests — it fires NOW. Use `reminder_create` for any delayed alert.",
209
+ "NEVER use `send_notification` for future-time requests — it fires NOW. Use `schedule_create` with `fire_at` for any delayed alert.",
211
210
  "",
212
211
  "### Quick routing rules",
213
- "- Future time, one-shot → `reminder_create`",
212
+ "- Future time, one-shot → `schedule_create` with `fire_at`",
214
213
  "- Recurring pattern → `schedule_create`",
215
214
  "- No time, track as work → `task_list_add`",
216
215
  "- Instant alert → `send_notification`",
@@ -342,7 +341,7 @@ function buildInChatConfigurationSection(): string {
342
341
  "**How to collect credentials and secrets:**",
343
342
  '- Use `credential_store` with `action: "prompt"` to present a secure input field. The value never appears in the conversation.',
344
343
  '- For OAuth flows, use `credential_store` with `action: "oauth2_connect"` to handle the authorization in-browser. Some services (e.g. Twitter/X) define their own auth flow via dedicated skill instructions — check the service\'s skill documentation for provider-specific setup steps.',
345
- "- For non-secret config values (e.g. a public URL, a webhook URL), ask the user directly in the conversation and use the appropriate IPC or config tool to persist the value.",
344
+ "- For non-secret config values (e.g. a public URL, a webhook URL), ask the user directly in the conversation and use the appropriate config tool to persist the value.",
346
345
  "",
347
346
  '**After saving a value**, confirm success with a message like: "Great, saved! You can always update this from the Settings page."',
348
347
  "",
@@ -569,7 +568,7 @@ export function buildSwarmGuidanceSection(): string {
569
568
  return [
570
569
  "## Parallel Task Orchestration",
571
570
  "",
572
- 'Use `swarm_delegate` only when a task has **multiple independent parts** that benefit from parallel execution (e.g. "research X, implement Y, and review Z"). For single-focus tasks, work directly — do not decompose them into a swarm.',
571
+ 'When a task has **multiple independent parts** that benefit from parallel execution (e.g. "research X, implement Y, and review Z"), load the `orchestration` skill using `skill_load` first, then use `swarm_delegate` to decompose and run them in parallel. For single-focus tasks, work directly — do not decompose them into a swarm.',
573
572
  ].join("\n");
574
573
  }
575
574
 
@@ -653,7 +652,7 @@ function buildMemoryPersistenceSection(): string {
653
652
  "",
654
653
  "Your memory does not survive session restarts. If you want to remember something, **save it**.",
655
654
  "",
656
- "- Use `memory_save` for facts, preferences, learnings, and anything worth recalling later.",
655
+ '- Use `memory_manage` with `op: "save"` for facts, preferences, learnings, and anything worth recalling later.',
657
656
  "- Update workspace files (USER.md, SOUL.md) for profile and personality changes.",
658
657
  '- When someone says "remember this," save it immediately — don\'t rely on keeping it in context.',
659
658
  "- When you make a mistake, save the lesson so future-you doesn't repeat it.",
@@ -698,7 +697,7 @@ function buildLearningMemorySection(): string {
698
697
  "",
699
698
  "When you make a mistake, hit a dead end, or discover something non-obvious, save it to memory so you don't repeat it.",
700
699
  "",
701
- 'Use `memory_save` with `kind: "learning"` for:',
700
+ 'Use `memory_manage` with `op: "save", kind: "learning"` for:',
702
701
  "- **Mistakes and corrections** — wrong assumptions, failed approaches, gotchas you ran into",
703
702
  "- **Discoveries** — undocumented behaviors, surprising API quirks, things that weren't obvious",
704
703
  "- **Working solutions** — the approach that actually worked after trial and error",
@@ -707,8 +706,8 @@ function buildLearningMemorySection(): string {
707
706
  "The statement should capture both what happened and the takeaway. Write it as advice to your future self.",
708
707
  "",
709
708
  "Examples:",
710
- '- `memory_save({ kind: "learning", subject: "macOS Shortcuts CLI", statement: "shortcuts CLI requires full disk access to export shortcuts — if permission is denied, guide the user to grant it in System Settings rather than retrying." })`',
711
- '- `memory_save({ kind: "learning", subject: "Gmail API pagination", statement: "Gmail search returns max 100 results per page. Always check nextPageToken and loop if the user asks for \'all\' messages." })`',
709
+ '- `memory_manage({ op: "save", kind: "learning", subject: "macOS Shortcuts CLI", statement: "shortcuts CLI requires full disk access to export shortcuts — if permission is denied, guide the user to grant it in System Settings rather than retrying." })`',
710
+ '- `memory_manage({ op: "save", kind: "learning", subject: "Gmail API pagination", statement: "Gmail search returns max 100 results per page. Always check nextPageToken and loop if the user asks for \'all\' messages." })`',
712
711
  "",
713
712
  "Don't overthink it. If you catch yourself thinking \"I'll remember that for next time,\" save it.",
714
713
  ].join("\n");
@@ -817,6 +816,12 @@ export function buildCliReferenceSection(): string {
817
816
  "## Assistant CLI",
818
817
  "",
819
818
  "The `assistant` CLI is installed on the user's machine and available via `bash`.",
819
+ "For account and authentication work, prefer real `assistant` CLI workflows over any legacy account-record abstraction.",
820
+ "- Use `assistant credentials ...` for stored secrets and credential metadata.",
821
+ "- Use `assistant oauth token <service>` for connected integration tokens.",
822
+ "- Use `assistant mcp auth <name>` when an MCP server needs OAuth login.",
823
+ "- Use `assistant platform status` for platform-linked deployment and auth context.",
824
+ "- If a bundled skill documents a service-specific `assistant <service>` auth or session flow, follow that CLI exactly.",
820
825
  "",
821
826
  "```",
822
827
  cachedCliHelp,
@@ -874,22 +879,24 @@ function appendSkillsCatalog(basePrompt: string): string {
874
879
  const config = getConfig();
875
880
 
876
881
  // Filter out skills whose assistant feature flag is explicitly OFF
877
- const flagFiltered = skills.filter((s) =>
878
- isAssistantFeatureFlagEnabled(skillFlagKey(s.id), config),
879
- );
882
+ const flagFiltered = skills.filter((s) => {
883
+ const flagKey = skillFlagKey(s);
884
+ return !flagKey || isAssistantFeatureFlagEnabled(flagKey, config);
885
+ });
880
886
 
881
887
  const sections: string[] = [basePrompt];
882
888
 
883
889
  const catalog = formatSkillsCatalog(flagFiltered);
884
890
  if (catalog) sections.push(catalog);
885
891
 
886
- sections.push(buildDynamicSkillWorkflowSection(config));
892
+ sections.push(buildDynamicSkillWorkflowSection(config, flagFiltered));
887
893
 
888
894
  return sections.join("\n\n");
889
895
  }
890
896
 
891
897
  function buildDynamicSkillWorkflowSection(
892
- config: import("../config/schema.js").AssistantConfig,
898
+ _config: import("../config/schema.js").AssistantConfig,
899
+ activeSkills: SkillSummary[],
893
900
  ): string {
894
901
  const lines = [
895
902
  "## Dynamic Skill Authoring Workflow",
@@ -905,7 +912,9 @@ function buildDynamicSkillWorkflowSection(
905
912
  "After a skill is written or deleted, the next turn may run in a recreated session due to file-watcher eviction. Continue normally.",
906
913
  ];
907
914
 
908
- if (isAssistantFeatureFlagEnabled("feature_flags.browser.enabled", config)) {
915
+ const activeSkillIds = new Set(activeSkills.map((s) => s.id));
916
+
917
+ if (activeSkillIds.has("browser")) {
909
918
  lines.push(
910
919
  "",
911
920
  "### Browser Skill Prerequisite",
@@ -913,17 +922,7 @@ function buildDynamicSkillWorkflowSection(
913
922
  );
914
923
  }
915
924
 
916
- if (isAssistantFeatureFlagEnabled("feature_flags.twitter.enabled", config)) {
917
- lines.push(
918
- "",
919
- "### X (Twitter) Skill",
920
- 'When the user asks to post, reply, or interact with X/Twitter, load the "twitter" skill using `skill_load`. Do NOT use computer-use or the browser skill for X — the X skill provides CLI commands (`vellum x post`, `vellum x reply`) that are faster and more reliable.',
921
- );
922
- }
923
-
924
- if (
925
- isAssistantFeatureFlagEnabled("feature_flags.messaging.enabled", config)
926
- ) {
925
+ if (activeSkillIds.has("messaging")) {
927
926
  lines.push(
928
927
  "",
929
928
  "### Messaging Skill",
@@ -988,7 +987,7 @@ function formatSkillsCatalog(skills: SkillSummary[]): string {
988
987
 
989
988
  return [
990
989
  "## Available Skills",
991
- "The following skills are available. Before executing one, call the `skill_load` tool with its `id` to load the full instructions.",
990
+ "The following skills are available. Before executing one, call `skill_load` to load the full instructions, then use `skill_execute` to invoke the skill's tools.",
992
991
  "When a credential is missing, check if any skill declares `credential-setup-for` matching that service — if so, load that skill.",
993
992
  "",
994
993
  lines.join("\n"),
@@ -52,12 +52,11 @@ Be the assistant you'd actually want to talk to. Concise when needed, thorough w
52
52
  - Avoid using "—" em dashes. No one wants their friend to use that symbol when texting
53
53
  - Use emojis sparingly. Only after you've established your own emoji identity. Never use them as filler or decoration
54
54
 
55
-
56
55
  ## Quirks
57
56
 
58
57
  ## Preferences
59
58
 
60
- ## Safety
59
+ ## Safety
61
60
 
62
61
  - Never remove or weaken safety boundaries
63
62
  - Never change tool use permissions or the Boundaries section on your own. Those only change with explicit guardian direction
@@ -2,14 +2,23 @@ _ Lines starting with _ are comments — they won't appear in the system prompt
2
2
  _
3
3
  _ This file contains release update notes for the assistant.
4
4
  _ Each release block is wrapped with HTML comment markers:
5
- _ <!-- vellum-update-release:<version> -->
6
- _ ...release notes...
7
- _ <!-- /vellum-update-release:<version> -->
5
+ _ <!-- vellum-update-release:<version> -->
6
+ _ ...release notes...
7
+ _ <!-- /vellum-update-release:<version> -->
8
8
  _
9
9
  _ Format is freeform markdown. Write notes that help the assistant
10
10
  _ understand what changed and how it affects behavior, capabilities,
11
11
  _ or available tools. Focus on what matters to the user experience.
12
- _
13
- _ To add release notes, replace this content with real markdown
14
- _ describing what changed. The sync will only materialize a bulletin
15
- _ when non-comment content is present.
12
+
13
+ <!-- vellum-update-release:schedule-reminder-unification -->
14
+
15
+ ### Reminders are now one-shot schedules
16
+
17
+ The separate reminder system has been unified into the schedule system. What this means:
18
+
19
+ - **`reminder_create`, `reminder_list`, and `reminder_cancel` tools no longer exist.** Do not attempt to use them.
20
+ - **To set a one-shot reminder**, use `schedule_create` with a `fire_at` parameter (an ISO 8601 timestamp) instead of a recurrence pattern. This replaces `reminder_create`.
21
+ - **To list or cancel reminders**, use `schedule_list` and `schedule_delete` — they now cover both recurring schedules and one-shot reminders.
22
+ - Existing reminders have been automatically migrated into the schedules table as one-shot schedules.
23
+
24
+ <!-- /vellum-update-release:schedule-reminder-unification -->
@@ -15,16 +15,6 @@ import type {
15
15
 
16
16
  const log = getLogger("anthropic-client");
17
17
 
18
- /**
19
- * The Anthropic API returns block types (server_tool_use, web_search_tool_result)
20
- * that are not yet in the installed SDK's ContentBlock union (SDK 0.39.x).
21
- * This extended type allows the switch statement to handle them without casting.
22
- */
23
- type AnthropicContentBlock =
24
- | Anthropic.ContentBlock
25
- | { type: "server_tool_use" }
26
- | { type: "web_search_tool_result" };
27
-
28
18
  const TOOL_ID_RE = /[^a-wyzA-Z0-9_-]/g;
29
19
 
30
20
  const ANTHROPIC_SUPPORTED_IMAGE_TYPES = new Set([
@@ -529,12 +519,15 @@ export class AnthropicProvider implements Provider {
529
519
  const { effort, output_config, ...restConfig } = (config ?? {}) as Record<
530
520
  string,
531
521
  unknown
532
- > & { effort?: string; output_config?: Record<string, unknown> };
522
+ > & {
523
+ effort?: Anthropic.OutputConfig["effort"];
524
+ output_config?: Record<string, unknown>;
525
+ };
533
526
  const mergedOutputConfig = {
534
527
  ...(output_config ?? {}),
535
528
  ...(effort ? { effort } : {}),
536
529
  };
537
- const params: Anthropic.MessageCreateParams = {
530
+ const params: Anthropic.MessageStreamParams = {
538
531
  model: this.model,
539
532
  max_tokens: 64000,
540
533
  messages: sentMessages,
@@ -568,14 +561,12 @@ export class AnthropicProvider implements Provider {
568
561
  ? { cache_control: { type: "ephemeral" as const } }
569
562
  : {}),
570
563
  }));
571
- params.tools = [
572
- ...mappedOther,
573
- {
574
- type: "web_search_20250305" as const,
575
- name: "web_search" as const,
576
- max_uses: 5,
577
- },
578
- ] as unknown as Anthropic.MessageCreateParams["tools"];
564
+ const webSearchTool: Anthropic.WebSearchTool20250305 = {
565
+ type: "web_search_20250305",
566
+ name: "web_search",
567
+ max_uses: 5,
568
+ };
569
+ params.tools = [...mappedOther, webSearchTool];
579
570
  } else {
580
571
  params.tools = tools.map((t, i) => ({
581
572
  name: t.name,
@@ -608,18 +599,32 @@ export class AnthropicProvider implements Provider {
608
599
  const { signal: timeoutSignal, cleanup: cleanupTimeout } =
609
600
  createStreamTimeout(this.streamTimeoutMs, signal);
610
601
 
602
+ /** Minimal stream interface shared by MessageStream and BetaMessageStream. */
603
+ interface UnifiedStream {
604
+ on(event: "text", listener: (text: string) => void): this;
605
+ on(event: "thinking", listener: (thinking: string) => void): this;
606
+ on(
607
+ event: "streamEvent",
608
+ listener: (event: Anthropic.MessageStreamEvent) => void,
609
+ ): this;
610
+ on(event: "inputJson", listener: (partialJson: string) => void): this;
611
+ finalMessage(): Promise<Anthropic.Message>;
612
+ }
613
+
611
614
  let response: Anthropic.Message;
612
615
  try {
613
- const stream = this.fastMode
614
- ? this.client.beta.messages.stream(
616
+ const stream: UnifiedStream = this.fastMode
617
+ ? (this.client.beta.messages.stream(
615
618
  {
616
619
  ...params,
617
620
  betas: ["fast-mode-2026-02-01"],
618
621
  speed: "fast",
619
622
  } as Parameters<typeof this.client.beta.messages.stream>[0],
620
623
  { signal: timeoutSignal },
621
- )
622
- : this.client.messages.stream(params, { signal: timeoutSignal });
624
+ ) as unknown as UnifiedStream)
625
+ : (this.client.messages.stream(params, {
626
+ signal: timeoutSignal,
627
+ }) as unknown as UnifiedStream);
623
628
 
624
629
  // Track whether we've seen a text content block so we can insert a
625
630
  // separator between consecutive text blocks in the same response.
@@ -635,6 +640,7 @@ export class AnthropicProvider implements Provider {
635
640
 
636
641
  // Track which tool is currently streaming so we can attribute inputJson deltas.
637
642
  let currentStreamingToolName: string | undefined;
643
+ let currentStreamingToolUseId: string | undefined;
638
644
  let accumulatedInputJson = "";
639
645
  let lastInputJsonEmitMs = 0;
640
646
  let pendingInputJsonFlush: ReturnType<typeof setTimeout> | undefined;
@@ -664,8 +670,24 @@ export class AnthropicProvider implements Provider {
664
670
  event.content_block.type === "tool_use"
665
671
  ) {
666
672
  currentStreamingToolName = event.content_block.name;
673
+ currentStreamingToolUseId = event.content_block.id;
667
674
  accumulatedInputJson = "";
668
675
  lastInputJsonEmitMs = 0;
676
+ onEvent?.({
677
+ type: "tool_use_preview_start",
678
+ toolUseId: event.content_block.id,
679
+ toolName: event.content_block.name,
680
+ });
681
+ }
682
+ if (
683
+ event.type === "content_block_start" &&
684
+ event.content_block.type === "server_tool_use"
685
+ ) {
686
+ onEvent?.({
687
+ type: "server_tool_start",
688
+ name: event.content_block.name,
689
+ toolUseId: event.content_block.id,
690
+ });
669
691
  }
670
692
  if (event.type === "content_block_stop") {
671
693
  if (pendingInputJsonFlush) {
@@ -676,10 +698,12 @@ export class AnthropicProvider implements Provider {
676
698
  onEvent?.({
677
699
  type: "input_json_delta",
678
700
  toolName: currentStreamingToolName,
701
+ toolUseId: currentStreamingToolUseId!,
679
702
  accumulatedJson: accumulatedInputJson,
680
703
  });
681
704
  }
682
705
  currentStreamingToolName = undefined;
706
+ currentStreamingToolUseId = undefined;
683
707
  accumulatedInputJson = "";
684
708
  }
685
709
  });
@@ -697,10 +721,12 @@ export class AnthropicProvider implements Provider {
697
721
  onEvent?.({
698
722
  type: "input_json_delta",
699
723
  toolName: currentStreamingToolName,
724
+ toolUseId: currentStreamingToolUseId!,
700
725
  accumulatedJson: accumulatedInputJson,
701
726
  });
702
727
  } else if (!pendingInputJsonFlush) {
703
728
  const toolName = currentStreamingToolName;
729
+ const toolUseId = currentStreamingToolUseId!;
704
730
  pendingInputJsonFlush = setTimeout(() => {
705
731
  pendingInputJsonFlush = undefined;
706
732
  lastInputJsonEmitMs = Date.now();
@@ -708,6 +734,7 @@ export class AnthropicProvider implements Provider {
708
734
  onEvent?.({
709
735
  type: "input_json_delta",
710
736
  toolName,
737
+ toolUseId,
711
738
  accumulatedJson: accumulatedInputJson,
712
739
  });
713
740
  }
@@ -889,6 +916,19 @@ export class AnthropicProvider implements Provider {
889
916
  is_error: block.is_error,
890
917
  };
891
918
  }
919
+ case "server_tool_use":
920
+ return {
921
+ type: "server_tool_use",
922
+ id: block.id,
923
+ name: block.name,
924
+ input: block.input,
925
+ } as unknown as Anthropic.ContentBlockParam;
926
+ case "web_search_tool_result":
927
+ return {
928
+ type: "web_search_tool_result",
929
+ tool_use_id: block.tool_use_id,
930
+ content: block.content,
931
+ } as unknown as Anthropic.ContentBlockParam;
892
932
  default: {
893
933
  log.warn(
894
934
  { blockType: (block as { type: string }).type },
@@ -899,9 +939,8 @@ export class AnthropicProvider implements Provider {
899
939
  }
900
940
  }
901
941
 
902
- private fromAnthropicBlock(block: AnthropicContentBlock): ContentBlock {
903
- const blockType = block.type as string;
904
- switch (blockType) {
942
+ private fromAnthropicBlock(block: Anthropic.ContentBlock): ContentBlock {
943
+ switch (block.type) {
905
944
  case "text":
906
945
  return { type: "text", text: (block as Anthropic.TextBlock).text };
907
946
  case "thinking":
@@ -924,13 +963,28 @@ export class AnthropicProvider implements Provider {
924
963
  input: tu.input as Record<string, unknown>,
925
964
  };
926
965
  }
927
- case "server_tool_use":
928
- case "web_search_tool_result":
929
- // Native Anthropic web search blocks — informational only, silently dropped
930
- // by the empty-text filter in sendMessage.
931
- return { type: "text", text: "" };
966
+ case "server_tool_use": {
967
+ const stu = block as Anthropic.ServerToolUseBlock;
968
+ return {
969
+ type: "server_tool_use",
970
+ id: stu.id,
971
+ name: stu.name,
972
+ input: stu.input as Record<string, unknown>,
973
+ };
974
+ }
975
+ case "web_search_tool_result": {
976
+ const wsr = block as Anthropic.WebSearchToolResultBlock;
977
+ return {
978
+ type: "web_search_tool_result",
979
+ tool_use_id: wsr.tool_use_id,
980
+ content: wsr.content,
981
+ };
982
+ }
932
983
  default:
933
- return { type: "text", text: `[unsupported block type: ${blockType}]` };
984
+ return {
985
+ type: "text",
986
+ text: `[unsupported block type: ${(block as { type: string }).type}]`,
987
+ };
934
988
  }
935
989
  }
936
990
  }
@@ -306,6 +306,12 @@ export class GeminiProvider implements Provider {
306
306
  });
307
307
  break;
308
308
  }
309
+ case "server_tool_use":
310
+ parts.push({ text: `[Web search: ${block.name}]` });
311
+ break;
312
+ case "web_search_tool_result":
313
+ parts.push({ text: "[Web search results]" });
314
+ break;
309
315
  // thinking, redacted_thinking — not applicable for Gemini
310
316
  }
311
317
  }
@@ -46,6 +46,11 @@ export const MANAGED_PROVIDER_META: Record<string, ManagedProviderMeta> = {
46
46
  managed: true,
47
47
  proxyPath: "/v1/runtime-proxy/openrouter",
48
48
  },
49
+ vertex: {
50
+ name: "vertex",
51
+ managed: true,
52
+ proxyPath: "/v1/runtime-proxy/vertex",
53
+ },
49
54
  ollama: { name: "ollama", managed: false },
50
55
  };
51
56
 
@@ -306,6 +306,12 @@ export class OpenAIProvider implements Provider {
306
306
  },
307
307
  });
308
308
  break;
309
+ case "server_tool_use":
310
+ textParts.push(`[Web search: ${block.name}]`);
311
+ break;
312
+ case "web_search_tool_result":
313
+ textParts.push("[Web search results]");
314
+ break;
309
315
  // thinking, redacted_thinking, image — not applicable for OpenAI assistant messages
310
316
  }
311
317
  }
@@ -359,6 +365,15 @@ export class OpenAIProvider implements Provider {
359
365
  text: this.fileBlockToText(block),
360
366
  });
361
367
  break;
368
+ case "server_tool_use":
369
+ parts.push({
370
+ type: "text",
371
+ text: `[Web search: ${block.name}]`,
372
+ });
373
+ break;
374
+ case "web_search_tool_result":
375
+ parts.push({ type: "text", text: "[Web search results]" });
376
+ break;
362
377
  }
363
378
  }
364
379
 
@@ -226,8 +226,8 @@ export function initializeProviders(config: ProvidersConfig): void {
226
226
  );
227
227
  routingSources.set("anthropic", "user-key");
228
228
  } else {
229
- // No user Anthropic key — try managed proxy fallback
230
- const managedBaseUrl = buildManagedBaseUrl("anthropic");
229
+ // No user Anthropic key — route through Vertex managed proxy
230
+ const managedBaseUrl = buildManagedBaseUrl("vertex");
231
231
  if (managedBaseUrl) {
232
232
  const ctx = resolveManagedProxyContext();
233
233
  const model = resolveModel(config, "anthropic");
@@ -50,6 +50,19 @@ export interface ToolResultContent {
50
50
  contentBlocks?: ContentBlock[];
51
51
  }
52
52
 
53
+ export interface ServerToolUseContent {
54
+ type: "server_tool_use";
55
+ id: string;
56
+ name: string;
57
+ input: Record<string, unknown>;
58
+ }
59
+
60
+ export interface WebSearchToolResultContent {
61
+ type: "web_search_tool_result";
62
+ tool_use_id: string;
63
+ content: unknown; // Opaque — encrypted_content in search results is provider-specific
64
+ }
65
+
53
66
  export type ContentBlock =
54
67
  | TextContent
55
68
  | ThinkingContent
@@ -57,7 +70,9 @@ export type ContentBlock =
57
70
  | ImageContent
58
71
  | FileContent
59
72
  | ToolUseContent
60
- | ToolResultContent;
73
+ | ToolResultContent
74
+ | ServerToolUseContent
75
+ | WebSearchToolResultContent;
61
76
 
62
77
  export interface Message {
63
78
  role: "user" | "assistant";
@@ -95,7 +110,14 @@ export interface ProviderResponse {
95
110
  export type ProviderEvent =
96
111
  | { type: "text_delta"; text: string }
97
112
  | { type: "thinking_delta"; thinking: string }
98
- | { type: "input_json_delta"; toolName: string; accumulatedJson: string };
113
+ | { type: "tool_use_preview_start"; toolUseId: string; toolName: string }
114
+ | {
115
+ type: "input_json_delta";
116
+ toolName: string;
117
+ toolUseId: string;
118
+ accumulatedJson: string;
119
+ }
120
+ | { type: "server_tool_start"; name: string; toolUseId: string };
99
121
 
100
122
  export interface SendMessageConfig {
101
123
  model?: string;
@@ -25,6 +25,24 @@ Approvals are **orthogonal to message sending**. The assistant asks for approval
25
25
 
26
26
  Do NOT couple approval handling to message sending. Do NOT add run/status tracking to the send path.
27
27
 
28
+ ### Host bash (desktop proxy execution)
29
+
30
+ Host bash allows the assistant to execute shell commands on the desktop host machine via the client, rather than in the daemon's own sandbox.
31
+
32
+ - **Discovery**: Clients discover pending host bash requests via SSE events (`host_bash_request`) which include a `requestId`.
33
+ - **Resolution**: Clients execute the command on the host and respond via:
34
+ - `POST /v1/host-bash-result` — `{ requestId, stdout, stderr, exitCode, timedOut }`
35
+ - **Tracking**: Uses the same `pending-interactions` tracker as approvals, with `kind: "host_bash"`. The endpoint validates the interaction kind before resolving.
36
+
37
+ ### Host file (desktop proxy file operations)
38
+
39
+ Host file allows the assistant to perform file operations (read, write, edit) on the desktop host machine via the client, rather than in the daemon's own sandbox.
40
+
41
+ - **Discovery**: Clients discover pending host file requests via SSE events (`host_file_request`) which include a `requestId`.
42
+ - **Resolution**: Clients execute the file operation on the host and respond via:
43
+ - `POST /v1/host-file-result` — `{ requestId, content, isError }`
44
+ - **Tracking**: Uses the same `pending-interactions` tracker as approvals and host bash, with `kind: "host_file"`. The endpoint validates the interaction kind before resolving.
45
+
28
46
  ### Channel approvals (Telegram, SMS)
29
47
 
30
48
  Channel approval flows use `requestId` (not `runId`) as the primary identifier:
@@ -1,9 +1,8 @@
1
1
  /**
2
2
  * In-process pub/sub hub for assistant events.
3
3
  *
4
- * Provides subscribe / publish primitives used by both the IPC daemon send
5
- * paths (PR 3) and the SSE route (PR 5). No runtime route or daemon
6
- * integration is wired here.
4
+ * Provides subscribe / publish primitives used by the daemon send paths
5
+ * and the SSE route. No runtime route or daemon integration is wired here.
7
6
  */
8
7
 
9
8
  import type { AssistantEvent } from "./assistant-event.js";
@@ -13,8 +13,8 @@ import type { ServerMessage } from "../daemon/message-protocol.js";
13
13
  // ── Types ─────────────────────────────────────────────────────────────────────
14
14
 
15
15
  /**
16
- * A single assistant event wrapping an IPC ServerMessage payload.
17
- * The `message` field is intentionally unchanged from the IPC form so that
16
+ * A single assistant event wrapping a ServerMessage payload.
17
+ * The `message` field preserves the original form so that
18
18
  * delta semantics (text deltas, tool input deltas, etc.) are preserved.
19
19
  */
20
20
  export interface AssistantEvent {
@@ -26,7 +26,7 @@ export interface AssistantEvent {
26
26
  sessionId?: string;
27
27
  /** ISO-8601 timestamp of when the event was emitted. */
28
28
  emittedAt: string;
29
- /** Unchanged IPC outbound message payload. */
29
+ /** Outbound server message payload. */
30
30
  message: ServerMessage;
31
31
  }
32
32
 
@@ -36,7 +36,7 @@ export interface AssistantEvent {
36
36
  * Construct an `AssistantEvent` envelope around a `ServerMessage`.
37
37
  *
38
38
  * @param assistantId The logical assistant identifier (e.g. from the daemon or HTTP route).
39
- * @param message The unchanged IPC outbound message payload.
39
+ * @param message The outbound server message payload.
40
40
  * @param sessionId Optional conversation/session id — pass when known.
41
41
  */
42
42
  export function buildAssistantEvent(
@@ -50,19 +50,19 @@ describe("buildAuthContext", () => {
50
50
  }
51
51
  });
52
52
 
53
- test("builds context from valid ipc claims", () => {
53
+ test("builds context from valid local claims", () => {
54
54
  const result = buildAuthContext(
55
55
  validClaims({
56
- sub: "ipc:self:session-123",
57
- scope_profile: "ipc_v1",
56
+ sub: "local:self:session-123",
57
+ scope_profile: "local_v1",
58
58
  }),
59
59
  );
60
60
  expect(result.ok).toBe(true);
61
61
  if (result.ok) {
62
- expect(result.context.principalType).toBe("ipc");
62
+ expect(result.context.principalType).toBe("local");
63
63
  expect(result.context.assistantId).toBe("self");
64
64
  expect(result.context.sessionId).toBe("session-123");
65
- expect(result.context.scopes.has("ipc.all")).toBe(true);
65
+ expect(result.context.scopes.has("local.all")).toBe(true);
66
66
  }
67
67
  });
68
68
 
@@ -21,7 +21,6 @@ mock.module("../../../util/platform.js", () => ({
21
21
  isMacOS: () => process.platform === "darwin",
22
22
  isLinux: () => process.platform === "linux",
23
23
  isWindows: () => process.platform === "win32",
24
- getSocketPath: () => join(testDir, "test.sock"),
25
24
  getPidPath: () => join(testDir, "test.pid"),
26
25
  getLogPath: () => join(testDir, "test.log"),
27
26
  ensureDataDir: () => {},