@vellumai/assistant 0.4.43 → 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 (713) hide show
  1. package/.prettierignore +4 -0
  2. package/ARCHITECTURE.md +46 -44
  3. package/README.md +15 -16
  4. package/bun.lock +10 -35
  5. package/docs/architecture/integrations.md +102 -215
  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 -3
  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-asset.test.ts +1 -1
  40. package/src/__tests__/bundled-skill-retrieval-guard.test.ts +23 -9
  41. package/src/__tests__/call-controller.test.ts +0 -1
  42. package/src/__tests__/call-conversation-messages.test.ts +0 -1
  43. package/src/__tests__/call-domain.test.ts +0 -1
  44. package/src/__tests__/call-pointer-messages.test.ts +0 -1
  45. package/src/__tests__/call-recovery.test.ts +0 -1
  46. package/src/__tests__/call-routes-http.test.ts +0 -1
  47. package/src/__tests__/call-store.test.ts +0 -1
  48. package/src/__tests__/canonical-guardian-store.test.ts +0 -1
  49. package/src/__tests__/channel-approval-routes.test.ts +1 -1
  50. package/src/__tests__/channel-approvals.test.ts +1 -1
  51. package/src/__tests__/channel-delivery-store.test.ts +0 -1
  52. package/src/__tests__/channel-guardian.test.ts +5 -7
  53. package/src/__tests__/channel-retry-sweep.test.ts +0 -1
  54. package/src/__tests__/checker.test.ts +32 -36
  55. package/src/__tests__/compaction.benchmark.test.ts +16 -14
  56. package/src/__tests__/computer-use-session-lifecycle.test.ts +10 -11
  57. package/src/__tests__/computer-use-session-working-dir.test.ts +2 -6
  58. package/src/__tests__/computer-use-skill-lifecycle-cleanup.test.ts +2 -5
  59. package/src/__tests__/computer-use-tools.test.ts +35 -31
  60. package/src/__tests__/config-schema.test.ts +11 -15
  61. package/src/__tests__/config-watcher.test.ts +0 -1
  62. package/src/__tests__/confirmation-request-guardian-bridge.test.ts +0 -1
  63. package/src/__tests__/conflict-store.test.ts +0 -1
  64. package/src/__tests__/connection-policy.test.ts +4 -7
  65. package/src/__tests__/contacts-tools.test.ts +0 -1
  66. package/src/__tests__/context-memory-e2e.test.ts +2 -4
  67. package/src/__tests__/context-overflow-reducer.test.ts +2 -4
  68. package/src/__tests__/context-window-manager.test.ts +147 -60
  69. package/src/__tests__/contradiction-checker.test.ts +0 -1
  70. package/src/__tests__/conversation-attention-store.test.ts +0 -1
  71. package/src/__tests__/conversation-attention-telegram.test.ts +1 -1
  72. package/src/__tests__/conversation-pairing.test.ts +2 -2
  73. package/src/__tests__/conversation-routes-guardian-reply.test.ts +31 -7
  74. package/src/__tests__/conversation-routes-slash-commands.test.ts +381 -0
  75. package/src/__tests__/conversation-store.test.ts +0 -1
  76. package/src/__tests__/conversation-unread-route.test.ts +1 -2
  77. package/src/__tests__/credential-security-invariants.test.ts +8 -8
  78. package/src/__tests__/cross-provider-web-search.test.ts +353 -0
  79. package/src/__tests__/daemon-assistant-events.test.ts +6 -7
  80. package/src/__tests__/db-schedule-syntax-migration.test.ts +15 -3
  81. package/src/__tests__/delete-managed-skill-tool.test.ts +5 -9
  82. package/src/__tests__/deterministic-verification-control-plane.test.ts +0 -1
  83. package/src/__tests__/diagnostics-export.test.ts +189 -0
  84. package/src/__tests__/dynamic-skill-workflow-prompt.test.ts +0 -1
  85. package/src/__tests__/emit-signal-routing-intent.test.ts +3 -3
  86. package/src/__tests__/entity-extractor.test.ts +0 -1
  87. package/src/__tests__/entity-search.test.ts +0 -1
  88. package/src/__tests__/ephemeral-permissions.test.ts +2 -4
  89. package/src/__tests__/error-handler-friendly-messages.test.ts +46 -0
  90. package/src/__tests__/file-read-tool.test.ts +86 -0
  91. package/src/__tests__/followup-tools.test.ts +0 -1
  92. package/src/__tests__/frontmatter.test.ts +77 -34
  93. package/src/__tests__/gateway-only-enforcement.test.ts +0 -1
  94. package/src/__tests__/gateway-only-guard.test.ts +1 -1
  95. package/src/__tests__/guardian-action-conversation-turn.test.ts +0 -1
  96. package/src/__tests__/guardian-action-followup-executor.test.ts +0 -1
  97. package/src/__tests__/guardian-action-followup-store.test.ts +0 -1
  98. package/src/__tests__/guardian-action-grant-mint-consume.test.ts +0 -1
  99. package/src/__tests__/guardian-action-late-reply.test.ts +0 -1
  100. package/src/__tests__/guardian-action-store.test.ts +0 -1
  101. package/src/__tests__/guardian-action-sweep.test.ts +0 -1
  102. package/src/__tests__/guardian-decision-primitive-canonical.test.ts +0 -1
  103. package/src/__tests__/guardian-dispatch.test.ts +1 -2
  104. package/src/__tests__/guardian-grant-minting.test.ts +1 -1
  105. package/src/__tests__/guardian-outbound-http.test.ts +0 -1
  106. package/src/__tests__/guardian-principal-id-roundtrip.test.ts +0 -1
  107. package/src/__tests__/guardian-routing-invariants.test.ts +1 -1
  108. package/src/__tests__/guardian-routing-state.test.ts +0 -1
  109. package/src/__tests__/guardian-verification-voice-binding.test.ts +0 -1
  110. package/src/__tests__/guardian-verify-setup-skill-regression.test.ts +3 -5
  111. package/src/__tests__/handlers-user-message-approval-consumption.test.ts +28 -426
  112. package/src/__tests__/host-bash-proxy.test.ts +335 -0
  113. package/src/__tests__/host-file-proxy.test.ts +374 -0
  114. package/src/__tests__/host-shell-tool.test.ts +147 -1
  115. package/src/__tests__/http-user-message-parity.test.ts +361 -0
  116. package/src/__tests__/inbound-invite-redemption.test.ts +0 -1
  117. package/src/__tests__/integration-status.test.ts +3 -8
  118. package/src/__tests__/intent-routing.test.ts +7 -46
  119. package/src/__tests__/invite-redemption-service.test.ts +0 -1
  120. package/src/__tests__/invite-routes-http.test.ts +0 -1
  121. package/src/__tests__/llm-usage-store.test.ts +0 -1
  122. package/src/__tests__/managed-avatar-client.test.ts +101 -55
  123. package/src/__tests__/managed-skill-lifecycle.test.ts +9 -18
  124. package/src/__tests__/managed-store.test.ts +94 -21
  125. package/src/__tests__/media-reuse-story.e2e.test.ts +0 -1
  126. package/src/__tests__/memory-context-benchmark.benchmark.test.ts +2 -4
  127. package/src/__tests__/memory-lifecycle-e2e.test.ts +0 -1
  128. package/src/__tests__/memory-recall-quality.test.ts +0 -1
  129. package/src/__tests__/memory-regressions.experimental.test.ts +0 -1
  130. package/src/__tests__/memory-regressions.test.ts +0 -1
  131. package/src/__tests__/memory-retrieval.benchmark.test.ts +0 -1
  132. package/src/__tests__/memory-upsert-concurrency.test.ts +0 -1
  133. package/src/__tests__/messaging-send-tool.test.ts +35 -0
  134. package/src/__tests__/messaging-skill-split.test.ts +138 -0
  135. package/src/__tests__/migration-cross-version-compatibility.test.ts +0 -1
  136. package/src/__tests__/migration-export-http.test.ts +2 -3
  137. package/src/__tests__/migration-import-commit-http.test.ts +1 -2
  138. package/src/__tests__/migration-import-preflight-http.test.ts +1 -2
  139. package/src/__tests__/migration-validate-http.test.ts +1 -2
  140. package/src/__tests__/native-web-search.test.ts +475 -0
  141. package/src/__tests__/navigate-settings-tab.test.ts +84 -0
  142. package/src/__tests__/non-member-access-request.test.ts +0 -1
  143. package/src/__tests__/notification-broadcaster.test.ts +15 -15
  144. package/src/__tests__/notification-decision-strategy.test.ts +6 -6
  145. package/src/__tests__/notification-deep-link.test.ts +7 -7
  146. package/src/__tests__/notification-guardian-path.test.ts +2 -3
  147. package/src/__tests__/notification-telegram-adapter.test.ts +1 -1
  148. package/src/__tests__/notification-thread-candidates.test.ts +4 -4
  149. package/src/__tests__/onboarding-starter-tasks.test.ts +0 -1
  150. package/src/__tests__/onboarding-template-contract.test.ts +0 -10
  151. package/src/__tests__/playbook-execution.test.ts +0 -1
  152. package/src/__tests__/playbook-tools.test.ts +0 -1
  153. package/src/__tests__/profile-compiler.test.ts +0 -1
  154. package/src/__tests__/provider-fail-open-selection.test.ts +12 -2
  155. package/src/__tests__/provider-managed-proxy-integration.test.ts +25 -0
  156. package/src/__tests__/qdrant-collection-migration.test.ts +223 -0
  157. package/src/__tests__/recording-handler.test.ts +30 -94
  158. package/src/__tests__/registry.test.ts +28 -35
  159. package/src/__tests__/relay-server.test.ts +0 -1
  160. package/src/__tests__/ride-shotgun-handler.test.ts +4 -20
  161. package/src/__tests__/runtime-attachment-metadata.test.ts +0 -1
  162. package/src/__tests__/runtime-events-sse-parity.test.ts +3 -4
  163. package/src/__tests__/runtime-events-sse.test.ts +0 -1
  164. package/src/__tests__/sandbox-diagnostics.test.ts +0 -1
  165. package/src/__tests__/scaffold-managed-skill-tool.test.ts +30 -28
  166. package/src/__tests__/schedule-store.test.ts +441 -1
  167. package/src/__tests__/schedule-tools.test.ts +468 -7
  168. package/src/__tests__/scheduler-recurrence.test.ts +196 -23
  169. package/src/__tests__/scoped-approval-grants.test.ts +0 -1
  170. package/src/__tests__/scoped-grant-security-matrix.test.ts +0 -1
  171. package/src/__tests__/secret-prompt-log-hygiene.test.ts +6 -3
  172. package/src/__tests__/secret-response-routing.test.ts +4 -1
  173. package/src/__tests__/send-endpoint-busy.test.ts +14 -5
  174. package/src/__tests__/send-notification-tool.test.ts +0 -7
  175. package/src/__tests__/sequence-store.test.ts +0 -1
  176. package/src/__tests__/server-history-render.test.ts +1 -2
  177. package/src/__tests__/session-abort-tool-results.test.ts +0 -1
  178. package/src/__tests__/session-agent-loop.test.ts +46 -6
  179. package/src/__tests__/session-confirmation-signals.test.ts +7 -46
  180. package/src/__tests__/session-conflict-gate.test.ts +2 -6
  181. package/src/__tests__/session-error.test.ts +5 -14
  182. package/src/__tests__/session-init.benchmark.test.ts +3 -5
  183. package/src/__tests__/session-load-history-repair.test.ts +0 -1
  184. package/src/__tests__/session-media-retry.test.ts +12 -74
  185. package/src/__tests__/session-pre-run-repair.test.ts +0 -1
  186. package/src/__tests__/session-profile-injection.test.ts +2 -6
  187. package/src/__tests__/session-provider-retry-repair.test.ts +2 -6
  188. package/src/__tests__/session-queue.test.ts +94 -139
  189. package/src/__tests__/session-skill-tools.test.ts +115 -115
  190. package/src/__tests__/session-slash-known.test.ts +0 -1
  191. package/src/__tests__/session-slash-queue.test.ts +0 -1
  192. package/src/__tests__/session-slash-unknown.test.ts +0 -1
  193. package/src/__tests__/session-surfaces-task-progress.test.ts +34 -0
  194. package/src/__tests__/session-usage.test.ts +0 -1
  195. package/src/__tests__/session-workspace-cache-state.test.ts +2 -6
  196. package/src/__tests__/session-workspace-injection.test.ts +2 -6
  197. package/src/__tests__/session-workspace-tool-tracking.test.ts +2 -6
  198. package/src/__tests__/skill-feature-flags-integration.test.ts +180 -184
  199. package/src/__tests__/skill-feature-flags.test.ts +125 -18
  200. package/src/__tests__/skill-load-feature-flag.test.ts +1 -2
  201. package/src/__tests__/skill-load-tool.test.ts +194 -2
  202. package/src/__tests__/skill-projection-feature-flag.test.ts +27 -16
  203. package/src/__tests__/skill-projection.benchmark.test.ts +15 -14
  204. package/src/__tests__/skills.test.ts +14 -53
  205. package/src/__tests__/slack-channel-config.test.ts +0 -1
  206. package/src/__tests__/slack-inbound-verification.test.ts +0 -1
  207. package/src/__tests__/slack-skill.test.ts +1 -1
  208. package/src/__tests__/starter-task-flow.test.ts +9 -19
  209. package/src/__tests__/subagent-tools.test.ts +2 -2
  210. package/src/__tests__/system-prompt.test.ts +7 -7
  211. package/src/__tests__/task-compiler.test.ts +0 -1
  212. package/src/__tests__/task-management-tools.test.ts +0 -1
  213. package/src/__tests__/task-memory-cleanup.test.ts +0 -1
  214. package/src/__tests__/task-runner.test.ts +0 -1
  215. package/src/__tests__/task-scheduler.test.ts +0 -1
  216. package/src/__tests__/terminal-tools.test.ts +0 -1
  217. package/src/__tests__/test-support/computer-use-skill-harness.ts +2 -4
  218. package/src/__tests__/thread-seed-composer.test.ts +5 -5
  219. package/src/__tests__/tool-approval-handler.test.ts +0 -1
  220. package/src/__tests__/tool-execution-abort-cleanup.test.ts +0 -1
  221. package/src/__tests__/tool-execution-pipeline.benchmark.test.ts +0 -1
  222. package/src/__tests__/tool-executor.test.ts +8 -86
  223. package/src/__tests__/tool-grant-request-escalation.test.ts +0 -1
  224. package/src/__tests__/tool-notification-listener.test.ts +1 -1
  225. package/src/__tests__/tool-preview-lifecycle.test.ts +416 -0
  226. package/src/__tests__/trust-store.test.ts +84 -8
  227. package/src/__tests__/trusted-contact-approval-notifier.test.ts +0 -1
  228. package/src/__tests__/trusted-contact-inline-approval-integration.test.ts +0 -1
  229. package/src/__tests__/trusted-contact-lifecycle-notifications.test.ts +0 -1
  230. package/src/__tests__/trusted-contact-multichannel.test.ts +0 -1
  231. package/src/__tests__/trusted-contact-verification.test.ts +0 -1
  232. package/src/__tests__/twilio-provider.test.ts +0 -1
  233. package/src/__tests__/twilio-routes.test.ts +0 -1
  234. package/src/__tests__/{request-file-tool.test.ts → ui-file-upload-surface.test.ts} +11 -72
  235. package/src/__tests__/update-bulletin.test.ts +0 -1
  236. package/src/__tests__/usage-cache-backfill-migration.test.ts +0 -1
  237. package/src/__tests__/usage-routes.test.ts +0 -1
  238. package/src/__tests__/verification-control-plane-policy.test.ts +4 -4
  239. package/src/__tests__/voice-invite-redemption.test.ts +0 -1
  240. package/src/__tests__/voice-scoped-grant-consumer.test.ts +0 -1
  241. package/src/__tests__/voice-session-bridge.test.ts +9 -1
  242. package/src/__tests__/web-fetch.test.ts +57 -0
  243. package/src/__tests__/workspace-git-service.test.ts +5 -14
  244. package/src/__tests__/workspace-policy.test.ts +0 -1
  245. package/src/agent/loop.ts +22 -34
  246. package/src/bundler/bundle-signer.ts +4 -4
  247. package/src/calls/call-controller.ts +1 -1
  248. package/src/calls/relay-server.ts +1 -1
  249. package/src/calls/twilio-rest.ts +1 -1
  250. package/src/calls/voice-session-bridge.ts +3 -1
  251. package/src/cli/__tests__/notifications.test.ts +3 -4
  252. package/src/cli/commands/map.ts +2 -6
  253. package/src/cli/commands/mcp.ts +73 -15
  254. package/src/cli/commands/notifications.ts +4 -4
  255. package/src/cli/commands/sessions.ts +9 -1
  256. package/src/cli/commands/skills.ts +6 -10
  257. package/src/cli/http-client.ts +2 -3
  258. package/src/cli/main-screen.tsx +10 -10
  259. package/src/cli/program.ts +0 -4
  260. package/src/cli/reference.ts +0 -2
  261. package/src/cli.ts +15 -9
  262. package/src/config/__tests__/bundled-tool-registry-guard.test.ts +120 -0
  263. package/src/config/bundled-skills/_shared/CLI_RETRIEVAL_PATTERN.md +11 -0
  264. package/src/config/bundled-skills/app-builder/SKILL.md +6 -7
  265. package/src/config/bundled-skills/app-builder/TOOLS.json +0 -4
  266. package/src/config/bundled-skills/browser/SKILL.md +6 -1
  267. package/src/config/bundled-skills/chatgpt-import/SKILL.md +5 -1
  268. package/src/config/bundled-skills/claude-code/SKILL.md +5 -1
  269. package/src/config/bundled-skills/computer-use/SKILL.md +6 -1
  270. package/src/config/bundled-skills/computer-use/TOOLS.json +6 -69
  271. package/src/config/bundled-skills/computer-use/tools/computer-use-click.ts +10 -1
  272. package/src/config/bundled-skills/contacts/SKILL.md +10 -1
  273. package/src/config/bundled-skills/contacts/TOOLS.json +35 -0
  274. package/src/config/bundled-skills/{messaging → contacts}/tools/google-contacts.ts +9 -2
  275. package/src/config/bundled-skills/document/SKILL.md +4 -1
  276. package/src/config/bundled-skills/doordash/SKILL.md +8 -2
  277. package/src/config/bundled-skills/doordash/__tests__/doordash-session.test.ts +1 -82
  278. package/src/config/bundled-skills/doordash/doordash-cli.ts +17 -28
  279. package/src/config/bundled-skills/doordash/lib/session.ts +21 -17
  280. package/src/config/bundled-skills/doordash/lib/shared/platform.ts +4 -1
  281. package/src/config/bundled-skills/followups/SKILL.md +4 -1
  282. package/src/config/bundled-skills/gmail/SKILL.md +180 -0
  283. package/src/config/bundled-skills/gmail/TOOLS.json +506 -0
  284. package/src/config/bundled-skills/gmail/tools/gmail-archive.ts +149 -0
  285. package/src/config/bundled-skills/gmail/tools/gmail-attachments.ts +110 -0
  286. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-draft.ts +1 -1
  287. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-filters.ts +1 -1
  288. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-follow-up.ts +1 -1
  289. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-forward.ts +1 -1
  290. package/src/config/bundled-skills/gmail/tools/gmail-label.ts +50 -0
  291. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-outreach-scan.ts +8 -90
  292. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-send-draft.ts +1 -1
  293. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-sender-digest.ts +2 -2
  294. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-trash.ts +1 -1
  295. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-unsubscribe.ts +1 -1
  296. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-vacation.ts +1 -1
  297. package/src/config/bundled-skills/gmail/tools/shared.ts +47 -0
  298. package/src/config/bundled-skills/google-calendar/SKILL.md +5 -1
  299. package/src/config/bundled-skills/image-studio/SKILL.md +5 -1
  300. package/src/config/bundled-skills/knowledge-graph/SKILL.md +4 -1
  301. package/src/config/bundled-skills/media-processing/SKILL.md +7 -13
  302. package/src/config/bundled-skills/media-processing/TOOLS.json +0 -22
  303. package/src/config/bundled-skills/media-processing/tools/generate-clip.ts +12 -1
  304. package/src/config/bundled-skills/messaging/SKILL.md +23 -139
  305. package/src/config/bundled-skills/messaging/TOOLS.json +33 -1215
  306. package/src/config/bundled-skills/messaging/tools/gmail-mime-helpers.ts +42 -0
  307. package/src/config/bundled-skills/messaging/tools/messaging-send.ts +165 -2
  308. package/src/config/bundled-skills/messaging/tools/messaging-sender-digest.ts +1 -13
  309. package/src/config/bundled-skills/messaging/tools/shared.ts +81 -34
  310. package/src/config/bundled-skills/notifications/SKILL.md +5 -1
  311. package/src/config/bundled-skills/orchestration/SKILL.md +30 -0
  312. package/src/config/bundled-skills/orchestration/TOOLS.json +35 -0
  313. package/src/config/bundled-skills/{reminder/tools/reminder-cancel.ts → orchestration/tools/swarm-delegate.ts} +3 -3
  314. package/src/config/bundled-skills/phone-calls/SKILL.md +9 -1
  315. package/src/config/bundled-skills/playbooks/SKILL.md +4 -1
  316. package/src/config/bundled-skills/schedule/SKILL.md +70 -9
  317. package/src/config/bundled-skills/schedule/TOOLS.json +38 -6
  318. package/src/config/bundled-skills/screen-watch/SKILL.md +28 -0
  319. package/src/config/bundled-skills/screen-watch/TOOLS.json +35 -0
  320. package/src/config/bundled-skills/{reminder/tools/reminder-create.ts → screen-watch/tools/start-screen-watch.ts} +3 -3
  321. package/src/config/bundled-skills/sequences/SKILL.md +47 -0
  322. package/src/config/bundled-skills/sequences/TOOLS.json +340 -0
  323. package/src/config/bundled-skills/sequences/tools/sequence-update.ts +128 -0
  324. package/src/config/bundled-skills/sequences/tools/shared.ts +9 -0
  325. package/src/config/bundled-skills/settings/SKILL.md +12 -0
  326. package/src/config/bundled-skills/settings/TOOLS.json +112 -0
  327. package/src/config/bundled-skills/settings/tools/navigate-settings-tab.ts +43 -0
  328. package/src/config/bundled-skills/settings/tools/open-system-settings.ts +52 -0
  329. package/src/config/bundled-skills/{computer-use/tools/computer-use-right-click.ts → settings/tools/set-avatar.ts} +2 -6
  330. package/src/{tools/system/voice-config.ts → config/bundled-skills/settings/tools/voice-config-update.ts} +59 -96
  331. package/src/config/bundled-skills/skill-management/SKILL.md +18 -0
  332. package/src/config/bundled-skills/skill-management/TOOLS.json +90 -0
  333. package/src/config/bundled-skills/{computer-use/tools/computer-use-double-click.ts → skill-management/tools/delete-managed.ts} +2 -6
  334. package/src/config/bundled-skills/skill-management/tools/scaffold-managed.ts +12 -0
  335. package/src/config/bundled-skills/slack/SKILL.md +5 -1
  336. package/src/config/bundled-skills/subagent/SKILL.md +4 -1
  337. package/src/config/bundled-skills/tasks/SKILL.md +5 -2
  338. package/src/config/bundled-skills/transcribe/SKILL.md +4 -1
  339. package/src/config/bundled-skills/watcher/SKILL.md +4 -1
  340. package/src/config/bundled-tool-registry.ts +118 -107
  341. package/src/config/env.ts +5 -2
  342. package/src/config/feature-flag-registry.json +33 -9
  343. package/src/config/loader.ts +10 -2
  344. package/src/config/schema.ts +19 -16
  345. package/src/config/schemas/inference.ts +12 -22
  346. package/src/config/schemas/memory-storage.ts +19 -1
  347. package/src/config/schemas/platform.ts +0 -16
  348. package/src/config/skill-state.ts +11 -8
  349. package/src/config/skills.ts +83 -32
  350. package/src/context/token-estimator.ts +11 -0
  351. package/src/context/window-manager.ts +180 -151
  352. package/src/daemon/computer-use-session.ts +11 -43
  353. package/src/daemon/daemon-control.ts +4 -1
  354. package/src/daemon/handlers/config-channels.ts +5 -9
  355. package/src/daemon/handlers/config-ingress.ts +0 -4
  356. package/src/daemon/handlers/config-model.ts +7 -13
  357. package/src/daemon/handlers/config-telegram.ts +4 -8
  358. package/src/daemon/handlers/config-voice.ts +2 -5
  359. package/src/daemon/handlers/dictation.ts +2 -12
  360. package/src/daemon/handlers/identity.ts +0 -105
  361. package/src/daemon/handlers/recording.ts +3 -23
  362. package/src/daemon/handlers/session-history.ts +42 -10
  363. package/src/daemon/handlers/sessions.ts +53 -72
  364. package/src/daemon/handlers/shared.ts +7 -28
  365. package/src/daemon/handlers/skills.ts +31 -27
  366. package/src/daemon/host-bash-proxy.ts +148 -0
  367. package/src/daemon/host-file-proxy.ts +135 -0
  368. package/src/daemon/lifecycle.ts +53 -41
  369. package/src/daemon/mcp-reload-service.ts +123 -0
  370. package/src/daemon/message-protocol.ts +6 -0
  371. package/src/daemon/message-types/apps.ts +0 -25
  372. package/src/daemon/message-types/browser.ts +1 -1
  373. package/src/daemon/message-types/computer-use.ts +1 -4
  374. package/src/daemon/message-types/guardian-actions.ts +1 -1
  375. package/src/daemon/message-types/host-bash.ts +18 -0
  376. package/src/daemon/message-types/host-file.ts +44 -0
  377. package/src/daemon/message-types/integrations.ts +1 -73
  378. package/src/daemon/message-types/messages.ts +15 -0
  379. package/src/daemon/message-types/schedules.ts +11 -27
  380. package/src/daemon/message-types/sessions.ts +8 -2
  381. package/src/daemon/message-types/settings.ts +1 -1
  382. package/src/daemon/message-types/shared.ts +1 -1
  383. package/src/daemon/message-types/surfaces.ts +2 -0
  384. package/src/daemon/ride-shotgun-handler.ts +35 -43
  385. package/src/daemon/seed-files.ts +3 -27
  386. package/src/daemon/server.ts +45 -28
  387. package/src/daemon/session-agent-loop-handlers.ts +72 -9
  388. package/src/daemon/session-agent-loop.ts +97 -66
  389. package/src/daemon/session-attachments.ts +1 -1
  390. package/src/daemon/session-error.ts +17 -16
  391. package/src/daemon/session-lifecycle.ts +20 -1
  392. package/src/daemon/session-media-retry.ts +1 -15
  393. package/src/daemon/session-messaging.ts +14 -6
  394. package/src/daemon/session-process.ts +36 -7
  395. package/src/daemon/session-queue-manager.ts +62 -103
  396. package/src/daemon/session-runtime-assembly.ts +27 -7
  397. package/src/daemon/session-skill-tools.ts +12 -11
  398. package/src/daemon/session-slash.ts +7 -0
  399. package/src/daemon/session-surfaces.ts +192 -118
  400. package/src/daemon/session-tool-setup.ts +146 -6
  401. package/src/daemon/session.ts +75 -37
  402. package/src/errors.ts +0 -2
  403. package/src/export/formatter.ts +6 -0
  404. package/src/mcp/mcp-oauth-provider.ts +1 -3
  405. package/src/media/avatar-router.ts +20 -28
  406. package/src/media/avatar-types.ts +7 -14
  407. package/src/media/managed-avatar-client.ts +70 -34
  408. package/src/memory/app-store.ts +0 -18
  409. package/src/memory/conversation-title-service.ts +1 -2
  410. package/src/memory/db-init.ts +16 -0
  411. package/src/memory/embedding-backend.ts +129 -27
  412. package/src/memory/embedding-gemini.test.ts +256 -0
  413. package/src/memory/embedding-gemini.ts +47 -13
  414. package/src/memory/embedding-local.ts +14 -2
  415. package/src/memory/embedding-ollama.ts +15 -2
  416. package/src/memory/embedding-openai.ts +15 -2
  417. package/src/memory/embedding-types.test.ts +116 -0
  418. package/src/memory/embedding-types.ts +61 -0
  419. package/src/memory/fingerprint.ts +1 -1
  420. package/src/memory/indexer.ts +25 -1
  421. package/src/memory/job-handlers/embedding.test.ts +258 -0
  422. package/src/memory/job-handlers/embedding.ts +81 -1
  423. package/src/memory/job-handlers/index-maintenance.ts +35 -1
  424. package/src/memory/job-handlers/media-processing.ts +11 -1
  425. package/src/memory/job-utils.ts +21 -6
  426. package/src/memory/jobs-store.ts +5 -1
  427. package/src/memory/jobs-worker.ts +8 -0
  428. package/src/memory/message-content.ts +66 -0
  429. package/src/memory/migrations/100-core-tables.ts +1 -31
  430. package/src/memory/migrations/104-core-indexes.ts +0 -11
  431. package/src/memory/migrations/145-drop-accounts-table.ts +19 -0
  432. package/src/memory/migrations/146-schedule-oneshot-routing.ts +94 -0
  433. package/src/memory/migrations/147-migrate-reminders-to-schedules.ts +129 -0
  434. package/src/memory/migrations/148-drop-reminders-table.ts +18 -0
  435. package/src/memory/migrations/index.ts +4 -0
  436. package/src/memory/migrations/registry.ts +19 -0
  437. package/src/memory/qdrant-client.ts +158 -43
  438. package/src/memory/retriever.test.ts +0 -1
  439. package/src/memory/retriever.ts +12 -2
  440. package/src/memory/schema/infrastructure.ts +5 -37
  441. package/src/memory/search/formatting.ts +34 -9
  442. package/src/memory/search/semantic.ts +57 -2
  443. package/src/memory/search/types.ts +2 -1
  444. package/src/notifications/AGENTS.md +2 -2
  445. package/src/notifications/README.md +59 -58
  446. package/src/notifications/adapters/macos.ts +1 -1
  447. package/src/notifications/broadcaster.ts +5 -5
  448. package/src/notifications/copy-composer.ts +1 -1
  449. package/src/notifications/decision-engine.ts +2 -2
  450. package/src/notifications/destination-resolver.ts +2 -2
  451. package/src/notifications/emit-signal.ts +8 -8
  452. package/src/notifications/signal.ts +1 -1
  453. package/src/notifications/thread-seed-composer.ts +1 -1
  454. package/src/oauth/connect-orchestrator.ts +1 -1
  455. package/src/oauth/token-persistence.ts +1 -1
  456. package/src/permissions/checker.ts +12 -1
  457. package/src/permissions/defaults.ts +13 -17
  458. package/src/permissions/trust-store.ts +37 -0
  459. package/src/permissions/workspace-policy.ts +0 -1
  460. package/src/prompts/__tests__/build-cli-reference-section.test.ts +11 -0
  461. package/src/prompts/computer-use-prompt.ts +1 -1
  462. package/src/prompts/system-prompt.ts +33 -35
  463. package/src/prompts/templates/BOOTSTRAP.md +0 -3
  464. package/src/prompts/templates/SOUL.md +1 -2
  465. package/src/prompts/templates/UPDATES.md +16 -7
  466. package/src/providers/anthropic/client.ts +87 -33
  467. package/src/providers/gemini/client.ts +6 -0
  468. package/src/providers/managed-proxy/constants.ts +5 -0
  469. package/src/providers/openai/client.ts +15 -0
  470. package/src/providers/registry.ts +4 -6
  471. package/src/providers/types.ts +24 -2
  472. package/src/runtime/AGENTS.md +18 -0
  473. package/src/runtime/assistant-event-hub.ts +2 -3
  474. package/src/runtime/assistant-event.ts +4 -4
  475. package/src/runtime/auth/__tests__/context.test.ts +5 -5
  476. package/src/runtime/auth/__tests__/credential-service.test.ts +0 -1
  477. package/src/runtime/auth/__tests__/guard-tests.test.ts +3 -2
  478. package/src/runtime/auth/__tests__/{ipc-auth-context.test.ts → local-auth-context.test.ts} +21 -21
  479. package/src/runtime/auth/__tests__/route-policy.test.ts +2 -2
  480. package/src/runtime/auth/__tests__/scopes.test.ts +9 -8
  481. package/src/runtime/auth/__tests__/subject.test.ts +8 -8
  482. package/src/runtime/auth/__tests__/token-service.test.ts +0 -1
  483. package/src/runtime/auth/route-policy.ts +8 -8
  484. package/src/runtime/auth/scopes.ts +2 -1
  485. package/src/runtime/auth/subject.ts +4 -4
  486. package/src/runtime/auth/token-service.ts +1 -24
  487. package/src/runtime/auth/types.ts +3 -3
  488. package/src/runtime/guardian-action-followup-executor.ts +1 -1
  489. package/src/runtime/guardian-action-grant-minter.ts +1 -1
  490. package/src/runtime/guardian-action-service.ts +3 -3
  491. package/src/runtime/http-server.ts +15 -2
  492. package/src/runtime/http-types.ts +10 -0
  493. package/src/runtime/invite-service.ts +3 -3
  494. package/src/runtime/local-actor-identity.ts +17 -22
  495. package/src/runtime/middleware/error-handler.ts +14 -1
  496. package/src/runtime/pending-interactions.ts +21 -9
  497. package/src/runtime/routes/app-management-routes.ts +63 -67
  498. package/src/runtime/routes/approval-routes.ts +1 -3
  499. package/src/runtime/routes/brain-graph/brain-graph.html +1845 -0
  500. package/src/runtime/routes/brain-graph-routes.ts +4 -42
  501. package/src/runtime/routes/btw-routes.ts +155 -0
  502. package/src/runtime/routes/computer-use-routes.ts +77 -31
  503. package/src/runtime/routes/conversation-routes.ts +234 -47
  504. package/src/runtime/routes/diagnostics-routes.ts +154 -43
  505. package/src/runtime/routes/documents-routes.ts +2 -2
  506. package/src/runtime/routes/global-search-routes.ts +1 -1
  507. package/src/runtime/routes/host-bash-routes.ts +83 -0
  508. package/src/runtime/routes/host-file-routes.ts +79 -0
  509. package/src/runtime/routes/integrations/slack/share.ts +1 -1
  510. package/src/runtime/routes/log-export-routes.ts +120 -0
  511. package/src/runtime/routes/mcp-routes.ts +20 -0
  512. package/src/runtime/routes/migration-routes.ts +3 -3
  513. package/src/runtime/routes/pairing-routes.ts +1 -1
  514. package/src/runtime/routes/recording-routes.ts +6 -4
  515. package/src/runtime/routes/schedule-routes.ts +31 -5
  516. package/src/runtime/routes/session-management-routes.ts +2 -6
  517. package/src/runtime/routes/session-query-routes.ts +18 -15
  518. package/src/runtime/routes/settings-routes.ts +7 -351
  519. package/src/runtime/routes/skills-routes.ts +7 -6
  520. package/src/runtime/routes/subagents-routes.ts +4 -10
  521. package/src/runtime/routes/surface-action-routes.ts +3 -14
  522. package/src/runtime/routes/surface-content-routes.ts +22 -5
  523. package/src/runtime/routes/work-items-routes.ts +21 -25
  524. package/src/runtime/routes/workspace-routes.test.ts +3 -3
  525. package/src/runtime/routes/workspace-utils.ts +1 -1
  526. package/src/runtime/telegram-streaming-delivery.ts +3 -0
  527. package/src/runtime/verification-outbound-actions.ts +2 -2
  528. package/src/schedule/integration-status.ts +0 -6
  529. package/src/schedule/schedule-store.ts +234 -43
  530. package/src/schedule/scheduler.ts +73 -74
  531. package/src/security/oauth2.ts +1 -1
  532. package/src/sequence/store.ts +12 -2
  533. package/src/skills/frontmatter.ts +19 -77
  534. package/src/skills/managed-store.ts +11 -2
  535. package/src/subagent/manager.ts +5 -3
  536. package/src/tasks/ephemeral-permissions.ts +3 -5
  537. package/src/tools/AGENTS.md +37 -0
  538. package/src/tools/apps/executors.ts +0 -6
  539. package/src/tools/browser/browser-manager.ts +17 -11
  540. package/src/tools/browser/jit-auth.ts +4 -1
  541. package/src/tools/claude-code/claude-code.ts +1 -1
  542. package/src/tools/computer-use/definitions.ts +48 -60
  543. package/src/tools/document/document-tool.ts +6 -6
  544. package/src/tools/document/editor-template.ts +10 -8
  545. package/src/tools/filesystem/edit.ts +2 -1
  546. package/src/tools/filesystem/read.ts +20 -2
  547. package/src/tools/filesystem/write.ts +2 -1
  548. package/src/tools/host-filesystem/edit.ts +17 -1
  549. package/src/tools/host-filesystem/read.ts +16 -1
  550. package/src/tools/host-filesystem/write.ts +15 -1
  551. package/src/tools/host-terminal/host-shell.ts +24 -0
  552. package/src/tools/memory/definitions.ts +45 -81
  553. package/src/tools/memory/handlers.test.ts +0 -1
  554. package/src/tools/memory/handlers.ts +1 -1
  555. package/src/tools/memory/register.ts +26 -60
  556. package/src/tools/network/script-proxy/session-manager.ts +6 -8
  557. package/src/tools/network/web-fetch.ts +7 -1
  558. package/src/tools/network/web-search.ts +2 -1
  559. package/src/tools/registry.ts +23 -0
  560. package/src/tools/schedule/create.ts +113 -5
  561. package/src/tools/schedule/list.ts +57 -15
  562. package/src/tools/schedule/update.ts +73 -3
  563. package/src/tools/shared/filesystem/image-read.ts +192 -0
  564. package/src/tools/side-effects.ts +1 -7
  565. package/src/tools/skills/delete-managed.ts +27 -64
  566. package/src/tools/skills/execute.ts +54 -0
  567. package/src/tools/skills/load.ts +127 -5
  568. package/src/tools/skills/scaffold-managed.ts +93 -172
  569. package/src/tools/subagent/message.ts +0 -7
  570. package/src/tools/subagent/spawn.ts +1 -1
  571. package/src/tools/swarm/delegate.ts +0 -3
  572. package/src/tools/system/avatar-generator.ts +13 -19
  573. package/src/tools/system/request-permission.ts +2 -1
  574. package/src/tools/terminal/safe-env.ts +1 -0
  575. package/src/tools/tool-manifest.ts +41 -47
  576. package/src/tools/types.ts +6 -2
  577. package/src/tools/ui-surface/definitions.ts +0 -55
  578. package/src/util/errors.ts +12 -10
  579. package/src/workspace/git-service.ts +0 -2
  580. package/src/__tests__/account-registry.test.ts +0 -258
  581. package/src/__tests__/email-classifier.test.ts +0 -25
  582. package/src/__tests__/gmail-integration.test.ts +0 -97
  583. package/src/__tests__/handle-user-message-secret-resume.test.ts +0 -172
  584. package/src/__tests__/home-base-bootstrap.test.ts +0 -84
  585. package/src/__tests__/managed-twitter-guardrails.test.ts +0 -353
  586. package/src/__tests__/prebuilt-home-base-seed.test.ts +0 -79
  587. package/src/__tests__/recording-intent-fallback.test.ts +0 -199
  588. package/src/__tests__/recording-intent.test.ts +0 -985
  589. package/src/__tests__/recording-state-machine.test.ts +0 -1574
  590. package/src/__tests__/reminder-store.test.ts +0 -350
  591. package/src/__tests__/reminder.test.ts +0 -337
  592. package/src/__tests__/scan-result-store.test.ts +0 -121
  593. package/src/__tests__/twitter-platform-proxy-client.test.ts +0 -450
  594. package/src/__tests__/view-image-tool.test.ts +0 -241
  595. package/src/cli/commands/amazon/cart.ts +0 -513
  596. package/src/cli/commands/amazon/checkout.ts +0 -394
  597. package/src/cli/commands/amazon/client.ts +0 -513
  598. package/src/cli/commands/amazon/index.ts +0 -920
  599. package/src/cli/commands/amazon/product-details.ts +0 -145
  600. package/src/cli/commands/amazon/request-extractor.ts +0 -187
  601. package/src/cli/commands/amazon/search.ts +0 -76
  602. package/src/cli/commands/amazon/session.ts +0 -116
  603. package/src/cli/commands/twitter/__tests__/cli-error-shaping.test.ts +0 -265
  604. package/src/cli/commands/twitter/__tests__/cli-read-routing.test.ts +0 -483
  605. package/src/cli/commands/twitter/__tests__/cli-routing.test.ts +0 -412
  606. package/src/cli/commands/twitter/__tests__/oauth-client.test.ts +0 -197
  607. package/src/cli/commands/twitter/client.ts +0 -989
  608. package/src/cli/commands/twitter/index.ts +0 -1160
  609. package/src/cli/commands/twitter/oauth-client.ts +0 -94
  610. package/src/cli/commands/twitter/router.ts +0 -396
  611. package/src/cli/commands/twitter/session.ts +0 -121
  612. package/src/config/bundled-skills/agentmail/SKILL.md +0 -132
  613. package/src/config/bundled-skills/agentmail/icon.svg +0 -21
  614. package/src/config/bundled-skills/amazon/SKILL.md +0 -137
  615. package/src/config/bundled-skills/amazon/icon.svg +0 -13
  616. package/src/config/bundled-skills/api-mapping/SKILL.md +0 -78
  617. package/src/config/bundled-skills/api-mapping/icon.svg +0 -18
  618. package/src/config/bundled-skills/cli-discover/SKILL.md +0 -68
  619. package/src/config/bundled-skills/deploy-fullstack-vercel/SKILL.md +0 -179
  620. package/src/config/bundled-skills/document-writer/SKILL.md +0 -195
  621. package/src/config/bundled-skills/elevenlabs-voice/SKILL.md +0 -140
  622. package/src/config/bundled-skills/email-setup/SKILL.md +0 -68
  623. package/src/config/bundled-skills/frontend-design/SKILL.md +0 -44
  624. package/src/config/bundled-skills/frontend-design/icon.svg +0 -16
  625. package/src/config/bundled-skills/google-oauth-setup/SKILL.md +0 -452
  626. package/src/config/bundled-skills/guardian-verify-setup/SKILL.md +0 -203
  627. package/src/config/bundled-skills/influencer/SKILL.md +0 -144
  628. package/src/config/bundled-skills/influencer/scripts/client.ts +0 -1269
  629. package/src/config/bundled-skills/influencer/scripts/influencer.ts +0 -267
  630. package/src/config/bundled-skills/macos-automation/SKILL.md +0 -65
  631. package/src/config/bundled-skills/macos-automation/icon.svg +0 -12
  632. package/src/config/bundled-skills/mcp-setup/SKILL.md +0 -75
  633. package/src/config/bundled-skills/media-processing/tools/media-diagnostics.ts +0 -184
  634. package/src/config/bundled-skills/messaging/tools/gmail-archive-by-query.ts +0 -80
  635. package/src/config/bundled-skills/messaging/tools/gmail-archive.ts +0 -29
  636. package/src/config/bundled-skills/messaging/tools/gmail-batch-archive.ts +0 -56
  637. package/src/config/bundled-skills/messaging/tools/gmail-batch-label.ts +0 -34
  638. package/src/config/bundled-skills/messaging/tools/gmail-download-attachment.ts +0 -47
  639. package/src/config/bundled-skills/messaging/tools/gmail-label.ts +0 -31
  640. package/src/config/bundled-skills/messaging/tools/gmail-list-attachments.ts +0 -67
  641. package/src/config/bundled-skills/messaging/tools/gmail-send-with-attachments.ts +0 -97
  642. package/src/config/bundled-skills/messaging/tools/gmail-summarize-thread.ts +0 -87
  643. package/src/config/bundled-skills/messaging/tools/gmail-triage.ts +0 -135
  644. package/src/config/bundled-skills/messaging/tools/messaging-analyze-activity.ts +0 -24
  645. package/src/config/bundled-skills/messaging/tools/messaging-reply.ts +0 -201
  646. package/src/config/bundled-skills/messaging/tools/send-notification.ts +0 -1
  647. package/src/config/bundled-skills/messaging/tools/sequence-cancel.ts +0 -27
  648. package/src/config/bundled-skills/messaging/tools/sequence-pause.ts +0 -48
  649. package/src/config/bundled-skills/messaging/tools/sequence-resume.ts +0 -27
  650. package/src/config/bundled-skills/messaging/tools/sequence-update.ts +0 -56
  651. package/src/config/bundled-skills/notion/SKILL.md +0 -240
  652. package/src/config/bundled-skills/notion-oauth-setup/SKILL.md +0 -126
  653. package/src/config/bundled-skills/oauth-setup/SKILL.md +0 -143
  654. package/src/config/bundled-skills/public-ingress/SKILL.md +0 -258
  655. package/src/config/bundled-skills/reminder/SKILL.md +0 -79
  656. package/src/config/bundled-skills/reminder/TOOLS.json +0 -89
  657. package/src/config/bundled-skills/reminder/tools/reminder-list.ts +0 -12
  658. package/src/config/bundled-skills/restaurant-reservation/SKILL.md +0 -141
  659. package/src/config/bundled-skills/screen-recording/SKILL.md +0 -148
  660. package/src/config/bundled-skills/self-upgrade/SKILL.md +0 -69
  661. package/src/config/bundled-skills/skills-catalog/SKILL.md +0 -78
  662. package/src/config/bundled-skills/slack-app-setup/SKILL.md +0 -178
  663. package/src/config/bundled-skills/slack-digest-setup/SKILL.md +0 -163
  664. package/src/config/bundled-skills/slack-oauth-setup/SKILL.md +0 -157
  665. package/src/config/bundled-skills/start-the-day/SKILL.md +0 -70
  666. package/src/config/bundled-skills/start-the-day/icon.svg +0 -13
  667. package/src/config/bundled-skills/telegram-setup/SKILL.md +0 -105
  668. package/src/config/bundled-skills/time-based-actions/SKILL.md +0 -142
  669. package/src/config/bundled-skills/twilio-setup/SKILL.md +0 -232
  670. package/src/config/bundled-skills/twitter/SKILL.md +0 -319
  671. package/src/config/bundled-skills/twitter/icon.svg +0 -14
  672. package/src/config/bundled-skills/typescript-eval/SKILL.md +0 -60
  673. package/src/config/bundled-skills/vercel-token-setup/SKILL.md +0 -214
  674. package/src/config/bundled-skills/voice-setup/SKILL.md +0 -131
  675. package/src/config/bundled-skills/voice-setup/icon.svg +0 -20
  676. package/src/daemon/handlers/pairing.ts +0 -119
  677. package/src/daemon/handlers/session-user-message.ts +0 -961
  678. package/src/daemon/recording-executor.ts +0 -180
  679. package/src/daemon/recording-intent-fallback.ts +0 -162
  680. package/src/daemon/recording-intent.ts +0 -493
  681. package/src/home-base/app-link-store.ts +0 -78
  682. package/src/home-base/bootstrap.ts +0 -74
  683. package/src/home-base/prebuilt/brain-graph.html +0 -1483
  684. package/src/home-base/prebuilt/index.html +0 -702
  685. package/src/home-base/prebuilt/seed-metadata.json +0 -21
  686. package/src/home-base/prebuilt/seed.ts +0 -122
  687. package/src/home-base/prebuilt-home-base-updater.ts +0 -36
  688. package/src/memory/account-store.ts +0 -117
  689. package/src/messaging/activity-analyzer.ts +0 -76
  690. package/src/messaging/email-classifier.ts +0 -208
  691. package/src/messaging/index.ts +0 -2
  692. package/src/messaging/outreach-classifier.ts +0 -185
  693. package/src/messaging/thread-summarizer.ts +0 -346
  694. package/src/messaging/types.ts +0 -17
  695. package/src/tools/browser/x-auto-navigate.ts +0 -254
  696. package/src/tools/credentials/account-registry.ts +0 -144
  697. package/src/tools/filesystem/view-image.ts +0 -244
  698. package/src/tools/reminder/reminder-store.ts +0 -194
  699. package/src/tools/reminder/reminder.ts +0 -158
  700. package/src/tools/system/navigate-settings.ts +0 -74
  701. package/src/tools/system/open-system-settings.ts +0 -85
  702. package/src/tools/system/version.ts +0 -54
  703. package/src/twitter/platform-proxy-client.ts +0 -405
  704. package/src/util/cookie-session.ts +0 -98
  705. /package/src/config/bundled-skills/{messaging → gmail}/tools/scan-result-store.ts +0 -0
  706. /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-analytics.ts +0 -0
  707. /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-create.ts +0 -0
  708. /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-delete.ts +0 -0
  709. /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-enroll.ts +0 -0
  710. /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-enrollment-list.ts +0 -0
  711. /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-get.ts +0 -0
  712. /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-import.ts +0 -0
  713. /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`",
@@ -298,17 +297,16 @@ export function buildStarterTaskPlaybookSection(): string {
298
297
  '- `[STARTER_TASK:research_to_ui]` — "Turn it into a webpage or interactive UI" flow',
299
298
  "",
300
299
  "### Playbook: make_it_yours",
301
- "Goal: Help the user choose an accent color for their dashboard.",
300
+ "Goal: Help the user choose an accent color preference for apps and interfaces.",
302
301
  "",
303
302
  "1. If the user's locale is missing or has `confidence: low` in USER.md, briefly confirm their location/language before proceeding.",
304
303
  "2. Present a concise set of accent color options (e.g. 5-7 curated colors with names and hex codes). Keep it short and scannable.",
305
304
  '3. Let the user pick one. Accept color names, hex values, or descriptions (e.g. "something warm").',
306
305
  '4. Confirm the selection: "I\'ll set your accent color to **{label}** ({hex}). Sound good?"',
307
306
  "5. On confirmation:",
308
- ' - Update the `## Dashboard Color Preference` section in USER.md with `label`, `hex`, `source: "user_selected"`, and `applied: true`.',
309
- " - Update the `## Onboarding Tasks` section: set `make_it_yours` to `done`.",
310
- " - Apply the color to the Home Base dashboard using `app_file_edit` to update the theme styles in the Home Base HTML with the chosen accent color.",
311
- "6. If the user declines or wants to skip, set `make_it_yours` to `deferred_to_dashboard` in USER.md and move on.",
307
+ ' - Use `app_file_edit` to update the `## Dashboard Color Preference` section in USER.md with `label`, `hex`, `source: "user_selected"`, and `applied: true`.',
308
+ " - Use `app_file_edit` to update the `## Onboarding Tasks` section: set `make_it_yours` to `done`.",
309
+ "6. If the user declines or wants to skip, set `make_it_yours` to `skipped` in USER.md and move on.",
312
310
  "",
313
311
  "### Playbook: research_topic",
314
312
  "Goal: Research a topic the user is interested in and summarise findings.",
@@ -343,7 +341,7 @@ function buildInChatConfigurationSection(): string {
343
341
  "**How to collect credentials and secrets:**",
344
342
  '- Use `credential_store` with `action: "prompt"` to present a secure input field. The value never appears in the conversation.',
345
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.',
346
- "- 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.",
347
345
  "",
348
346
  '**After saving a value**, confirm success with a message like: "Great, saved! You can always update this from the Settings page."',
349
347
  "",
@@ -570,7 +568,7 @@ export function buildSwarmGuidanceSection(): string {
570
568
  return [
571
569
  "## Parallel Task Orchestration",
572
570
  "",
573
- '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.',
574
572
  ].join("\n");
575
573
  }
576
574
 
@@ -654,7 +652,7 @@ function buildMemoryPersistenceSection(): string {
654
652
  "",
655
653
  "Your memory does not survive session restarts. If you want to remember something, **save it**.",
656
654
  "",
657
- "- 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.',
658
656
  "- Update workspace files (USER.md, SOUL.md) for profile and personality changes.",
659
657
  '- When someone says "remember this," save it immediately — don\'t rely on keeping it in context.',
660
658
  "- When you make a mistake, save the lesson so future-you doesn't repeat it.",
@@ -699,7 +697,7 @@ function buildLearningMemorySection(): string {
699
697
  "",
700
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.",
701
699
  "",
702
- 'Use `memory_save` with `kind: "learning"` for:',
700
+ 'Use `memory_manage` with `op: "save", kind: "learning"` for:',
703
701
  "- **Mistakes and corrections** — wrong assumptions, failed approaches, gotchas you ran into",
704
702
  "- **Discoveries** — undocumented behaviors, surprising API quirks, things that weren't obvious",
705
703
  "- **Working solutions** — the approach that actually worked after trial and error",
@@ -708,8 +706,8 @@ function buildLearningMemorySection(): string {
708
706
  "The statement should capture both what happened and the takeaway. Write it as advice to your future self.",
709
707
  "",
710
708
  "Examples:",
711
- '- `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." })`',
712
- '- `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." })`',
713
711
  "",
714
712
  "Don't overthink it. If you catch yourself thinking \"I'll remember that for next time,\" save it.",
715
713
  ].join("\n");
@@ -818,6 +816,12 @@ export function buildCliReferenceSection(): string {
818
816
  "## Assistant CLI",
819
817
  "",
820
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.",
821
825
  "",
822
826
  "```",
823
827
  cachedCliHelp,
@@ -875,22 +879,24 @@ function appendSkillsCatalog(basePrompt: string): string {
875
879
  const config = getConfig();
876
880
 
877
881
  // Filter out skills whose assistant feature flag is explicitly OFF
878
- const flagFiltered = skills.filter((s) =>
879
- isAssistantFeatureFlagEnabled(skillFlagKey(s.id), config),
880
- );
882
+ const flagFiltered = skills.filter((s) => {
883
+ const flagKey = skillFlagKey(s);
884
+ return !flagKey || isAssistantFeatureFlagEnabled(flagKey, config);
885
+ });
881
886
 
882
887
  const sections: string[] = [basePrompt];
883
888
 
884
889
  const catalog = formatSkillsCatalog(flagFiltered);
885
890
  if (catalog) sections.push(catalog);
886
891
 
887
- sections.push(buildDynamicSkillWorkflowSection(config));
892
+ sections.push(buildDynamicSkillWorkflowSection(config, flagFiltered));
888
893
 
889
894
  return sections.join("\n\n");
890
895
  }
891
896
 
892
897
  function buildDynamicSkillWorkflowSection(
893
- config: import("../config/schema.js").AssistantConfig,
898
+ _config: import("../config/schema.js").AssistantConfig,
899
+ activeSkills: SkillSummary[],
894
900
  ): string {
895
901
  const lines = [
896
902
  "## Dynamic Skill Authoring Workflow",
@@ -906,7 +912,9 @@ function buildDynamicSkillWorkflowSection(
906
912
  "After a skill is written or deleted, the next turn may run in a recreated session due to file-watcher eviction. Continue normally.",
907
913
  ];
908
914
 
909
- if (isAssistantFeatureFlagEnabled("feature_flags.browser.enabled", config)) {
915
+ const activeSkillIds = new Set(activeSkills.map((s) => s.id));
916
+
917
+ if (activeSkillIds.has("browser")) {
910
918
  lines.push(
911
919
  "",
912
920
  "### Browser Skill Prerequisite",
@@ -914,17 +922,7 @@ function buildDynamicSkillWorkflowSection(
914
922
  );
915
923
  }
916
924
 
917
- if (isAssistantFeatureFlagEnabled("feature_flags.twitter.enabled", config)) {
918
- lines.push(
919
- "",
920
- "### X (Twitter) Skill",
921
- '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.',
922
- );
923
- }
924
-
925
- if (
926
- isAssistantFeatureFlagEnabled("feature_flags.messaging.enabled", config)
927
- ) {
925
+ if (activeSkillIds.has("messaging")) {
928
926
  lines.push(
929
927
  "",
930
928
  "### Messaging Skill",
@@ -989,7 +987,7 @@ function formatSkillsCatalog(skills: SkillSummary[]): string {
989
987
 
990
988
  return [
991
989
  "## Available Skills",
992
- "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.",
993
991
  "When a credential is missing, check if any skill declares `credential-setup-for` matching that service — if so, load that skill.",
994
992
  "",
995
993
  lines.join("\n"),
@@ -42,8 +42,6 @@ Then figure out together:
42
42
  The two actions MUST have different labels and prompts. Double-check before calling ui_show that you are not repeating the same suggestion.
43
43
  If `ui_show` is not available (voice, SMS, or other non-dashboard channels), present the two suggestions as plain text messages instead, numbered so the user can reply with which one they'd like. If the user types a response instead of clicking, continue via the text path. If they want to defer both suggestions and do something else entirely, that's fine too.
44
44
 
45
- 7. Create Home Base silently. After the suggestion interaction (user picked one, deferred, or typed something else), create their Home Base using `app_create` with `set_as_home_base: true` and `auto_open: false`. Include personalized starter tasks based on what you learned. Do NOT open it with `app_open`. Do NOT announce it, mention it, or hint that something was created. No "check this out," no "I put something together," no "here's what I came up with." Just create it quietly and move on.
46
-
47
45
  ## Requirements
48
46
 
49
47
  Only your vibe is hard-required. Your name matters but don't push for it -- if the user doesn't offer one, pick one yourself. Everything else about the user is best-effort. Ask naturally, not as a form. If something is unclear, you can ask one short follow-up, but if the user declines or dodges, do not push. Just move on.
@@ -70,7 +68,6 @@ Do NOT delete this file until ALL of the following are true:
70
68
  - You've figured out your vibe and adopted it
71
69
  - 2 suggestions shown (via `ui_show` or as text if UI unavailable)
72
70
  - The user selected one, deferred both, or typed an alternate direction
73
- - Home Base has been created silently
74
71
 
75
72
  Once every condition is met, delete this file. You're done here.
76
73
 
@@ -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
 
@@ -1,5 +1,5 @@
1
1
  import { wrapWithLogfire } from "../logfire.js";
2
- import { ConfigError } from "../util/errors.js";
2
+ import { ConfigError, ProviderNotConfiguredError } from "../util/errors.js";
3
3
  import { AnthropicProvider } from "./anthropic/client.js";
4
4
  import { FailoverProvider, type ProviderHealthStatus } from "./failover.js";
5
5
  import { FireworksProvider } from "./fireworks/client.js";
@@ -94,9 +94,7 @@ export function getFailoverProvider(
94
94
  const selection = resolveProviderSelection(primaryName, providerOrder);
95
95
 
96
96
  if (!selection.selectedPrimary) {
97
- throw new ConfigError(
98
- `No providers available. Requested: "${primaryName}". Registered: ${listProviders().join(", ") || "none"}`,
99
- );
97
+ throw new ProviderNotConfiguredError(primaryName, listProviders());
100
98
  }
101
99
 
102
100
  const orderedProviders: Provider[] = selection.availableProviders.map(
@@ -228,8 +226,8 @@ export function initializeProviders(config: ProvidersConfig): void {
228
226
  );
229
227
  routingSources.set("anthropic", "user-key");
230
228
  } else {
231
- // No user Anthropic key — try managed proxy fallback
232
- const managedBaseUrl = buildManagedBaseUrl("anthropic");
229
+ // No user Anthropic key — route through Vertex managed proxy
230
+ const managedBaseUrl = buildManagedBaseUrl("vertex");
233
231
  if (managedBaseUrl) {
234
232
  const ctx = resolveManagedProxyContext();
235
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";