@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
@@ -1,3 +1,5 @@
1
+ import { createHash } from "crypto";
2
+
1
3
  import { getPlatformBaseUrl } from "../config/env.js";
2
4
  import { getConfig } from "../config/loader.js";
3
5
  import { getSecureKey } from "../security/secure-keys.js";
@@ -7,8 +9,8 @@ import {
7
9
  AVATAR_MIME_ALLOWLIST,
8
10
  AVATAR_PROMPT_MAX_LENGTH,
9
11
  ManagedAvatarError,
10
- type ManagedAvatarErrorResponse,
11
12
  type ManagedAvatarResponse,
13
+ VERTEX_IMAGE_DEFAULT_MODEL,
12
14
  } from "./avatar-types.js";
13
15
 
14
16
  const log = getLogger("managed-avatar-client");
@@ -30,7 +32,7 @@ export function isManagedAvailable(): boolean {
30
32
 
31
33
  export async function generateManagedAvatar(
32
34
  prompt: string,
33
- options?: { correlationId?: string; idempotencyKey?: string },
35
+ options?: { correlationId?: string; idempotencyKey?: string; model?: string },
34
36
  ): Promise<ManagedAvatarResponse> {
35
37
  if (prompt.length > AVATAR_PROMPT_MAX_LENGTH) {
36
38
  throw new ManagedAvatarError({
@@ -68,7 +70,8 @@ export async function generateManagedAvatar(
68
70
  });
69
71
  }
70
72
 
71
- const url = `${baseUrl}/v1/assistants/avatar/generate/`;
73
+ const model = options?.model ?? VERTEX_IMAGE_DEFAULT_MODEL;
74
+ const url = `${baseUrl}/v1/runtime-proxy/vertex/v1/models/${model}:predict`;
72
75
  const idempotencyKey = options?.idempotencyKey ?? crypto.randomUUID();
73
76
  const correlationId = options?.correlationId ?? crypto.randomUUID();
74
77
 
@@ -79,13 +82,23 @@ export async function generateManagedAvatar(
79
82
  "X-Correlation-Id": correlationId,
80
83
  };
81
84
 
82
- log.debug({ url, correlationId }, "Requesting managed avatar generation");
85
+ log.debug(
86
+ { url, correlationId, model },
87
+ "Requesting managed avatar generation",
88
+ );
83
89
 
84
90
  let response: Response;
85
91
  try {
86
92
  response = await fetch(url, {
87
93
  method: "POST",
88
- body: JSON.stringify({ prompt }),
94
+ body: JSON.stringify({
95
+ instances: [{ prompt }],
96
+ parameters: {
97
+ sampleCount: 1,
98
+ aspectRatio: "1:1",
99
+ outputOptions: { mimeType: "image/png" },
100
+ },
101
+ }),
89
102
  signal: AbortSignal.timeout(60_000),
90
103
  headers,
91
104
  });
@@ -105,64 +118,87 @@ export async function generateManagedAvatar(
105
118
  }
106
119
 
107
120
  if (!response.ok) {
108
- let errorBody: ManagedAvatarErrorResponse;
121
+ let detail = `HTTP ${response.status}`;
109
122
  try {
110
- errorBody = (await response.json()) as ManagedAvatarErrorResponse;
123
+ const text = await response.text();
124
+ if (text) detail = `HTTP ${response.status}: ${text}`;
111
125
  } catch {
112
- throw new ManagedAvatarError({
113
- code: "upstream_error",
114
- subcode: "unparseable_response",
115
- detail: `HTTP ${response.status}: unable to parse error response`,
116
- retryable: response.status >= 500 || response.status === 429,
117
- correlationId,
118
- statusCode: response.status,
119
- });
126
+ // ignore parse failures
120
127
  }
121
128
 
122
129
  throw new ManagedAvatarError({
123
- code: errorBody.code ?? "upstream_error",
124
- subcode: errorBody.subcode ?? "unknown",
125
- detail: errorBody.detail ?? `HTTP ${response.status}`,
126
- retryable:
127
- errorBody.retryable ??
128
- (response.status >= 500 || response.status === 429),
129
- correlationId: errorBody.correlation_id ?? correlationId,
130
+ code: "upstream_error",
131
+ subcode: "http_error",
132
+ detail,
133
+ retryable: response.status >= 500 || response.status === 429,
134
+ correlationId,
130
135
  statusCode: response.status,
131
136
  });
132
137
  }
133
138
 
134
- let body: ManagedAvatarResponse;
135
139
  try {
136
- body = (await response.json()) as ManagedAvatarResponse;
140
+ const vertexBody = (await response.json()) as {
141
+ predictions: Array<{ bytesBase64Encoded: string; mimeType: string }>;
142
+ };
137
143
 
138
- if (!AVATAR_MIME_ALLOWLIST.has(body.image.mime_type)) {
144
+ const prediction = vertexBody.predictions?.[0];
145
+ if (!prediction) {
146
+ throw new ManagedAvatarError({
147
+ code: "upstream_error",
148
+ subcode: "empty_predictions",
149
+ detail: "Vertex response contained no predictions",
150
+ retryable: false,
151
+ correlationId,
152
+ statusCode: 0,
153
+ });
154
+ }
155
+
156
+ const mimeType = prediction.mimeType;
157
+ const dataBase64 = prediction.bytesBase64Encoded;
158
+
159
+ if (!AVATAR_MIME_ALLOWLIST.has(mimeType)) {
139
160
  throw new ManagedAvatarError({
140
161
  code: "validation_error",
141
162
  subcode: "disallowed_mime_type",
142
- detail: `Response MIME type "${body.image.mime_type}" is not in the allowlist`,
163
+ detail: `Response MIME type "${mimeType}" is not in the allowlist`,
143
164
  retryable: false,
144
165
  correlationId,
145
166
  statusCode: 0,
146
167
  });
147
168
  }
148
169
 
149
- const b64 = body.image.data_base64;
150
- const padding = b64.endsWith("==") ? 2 : b64.endsWith("=") ? 1 : 0;
151
- const estimatedDecodedBytes = Math.ceil((b64.length * 3) / 4) - padding;
152
- if (
153
- estimatedDecodedBytes > AVATAR_MAX_DECODED_BYTES ||
154
- body.image.bytes > AVATAR_MAX_DECODED_BYTES
155
- ) {
170
+ const padding = dataBase64.endsWith("==")
171
+ ? 2
172
+ : dataBase64.endsWith("=")
173
+ ? 1
174
+ : 0;
175
+ const estimatedDecodedBytes =
176
+ Math.ceil((dataBase64.length * 3) / 4) - padding;
177
+ if (estimatedDecodedBytes > AVATAR_MAX_DECODED_BYTES) {
156
178
  throw new ManagedAvatarError({
157
179
  code: "validation_error",
158
180
  subcode: "oversized_image",
159
- detail: `Response image size ${Math.max(estimatedDecodedBytes, body.image.bytes)} exceeds maximum of ${AVATAR_MAX_DECODED_BYTES} bytes`,
181
+ detail: `Response image size ${estimatedDecodedBytes} exceeds maximum of ${AVATAR_MAX_DECODED_BYTES} bytes`,
160
182
  retryable: false,
161
183
  correlationId,
162
184
  statusCode: 0,
163
185
  });
164
186
  }
165
187
 
188
+ const sha256 = createHash("sha256")
189
+ .update(Buffer.from(dataBase64, "base64"))
190
+ .digest("hex");
191
+
192
+ const body: ManagedAvatarResponse = {
193
+ image: {
194
+ mime_type: mimeType,
195
+ data_base64: dataBase64,
196
+ bytes: estimatedDecodedBytes,
197
+ sha256,
198
+ },
199
+ correlation_id: correlationId,
200
+ };
201
+
166
202
  log.debug(
167
203
  {
168
204
  correlationId,
@@ -30,13 +30,12 @@ export type TitleOrigin =
30
30
  | "voice_inbound"
31
31
  | "guardian_request"
32
32
  | "schedule"
33
- | "reminder"
34
33
  | "task"
35
34
  | "watcher"
36
35
  | "subagent"
37
36
  | "sequence"
38
37
  | "heartbeat"
39
- | "ipc"
38
+ | "local"
40
39
  | "task_submit"
41
40
  | "misc";
42
41
 
@@ -46,8 +46,10 @@ import {
46
46
  migrateContactsNotesColumn,
47
47
  migrateContactsRolePrincipal,
48
48
  migrateConversationsThreadTypeIndex,
49
+ migrateDropAccountsTable,
49
50
  migrateDropAssistantIdColumns,
50
51
  migrateDropLegacyMemberGuardianTables,
52
+ migrateDropRemindersTable,
51
53
  migrateDropUsageCompositeIndexes,
52
54
  migrateFkCascadeRebuilds,
53
55
  migrateGuardianActionFollowup,
@@ -64,10 +66,12 @@ import {
64
66
  migrateNormalizePhoneIdentities,
65
67
  migrateNotificationDeliveryThreadDecision,
66
68
  migrateReminderRoutingIntent,
69
+ migrateRemindersToSchedules,
67
70
  migrateRenameGuardianVerificationValues,
68
71
  migrateRenameVerificationSessionIdColumn,
69
72
  migrateRenameVerificationTable,
70
73
  migrateRenameVoiceToPhone,
74
+ migrateScheduleOneShotRouting,
71
75
  migrateSchemaIndexesAndColumns,
72
76
  migrateUsageDashboardIndexes,
73
77
  migrateVoiceInviteColumns,
@@ -324,6 +328,18 @@ export function initializeDb(): void {
324
328
  // 48. Rename stored "voice" channel values to "phone" across all channel text columns
325
329
  migrateRenameVoiceToPhone(database);
326
330
 
331
+ // 49. Drop the unused legacy accounts table after removing account_manage
332
+ migrateDropAccountsTable(database);
333
+
334
+ // 50. Extend cron_jobs table with one-shot and routing support
335
+ migrateScheduleOneShotRouting(database);
336
+
337
+ // 51. Migrate existing reminders into cron_jobs as one-shot schedules
338
+ migrateRemindersToSchedules(database);
339
+
340
+ // 52. Drop the legacy reminders table after data migration
341
+ migrateDropRemindersTable(database);
342
+
327
343
  validateMigrationState(database);
328
344
 
329
345
  if (process.env.BUN_TEST === "1") {
@@ -6,6 +6,20 @@ import { getLogger } from "../util/logger.js";
6
6
  import { GeminiEmbeddingBackend } from "./embedding-gemini.js";
7
7
  import { OllamaEmbeddingBackend } from "./embedding-ollama.js";
8
8
  import { OpenAIEmbeddingBackend } from "./embedding-openai.js";
9
+ import {
10
+ type EmbeddingInput,
11
+ embeddingInputContentHash,
12
+ type MultimodalEmbeddingInput,
13
+ normalizeEmbeddingInput,
14
+ type TextEmbeddingInput,
15
+ } from "./embedding-types.js";
16
+
17
+ export type {
18
+ EmbeddingInput,
19
+ MultimodalEmbeddingInput,
20
+ TextEmbeddingInput,
21
+ };
22
+ export { embeddingInputContentHash, normalizeEmbeddingInput };
9
23
 
10
24
  const log = getLogger("memory-embeddings");
11
25
 
@@ -34,12 +48,12 @@ class LazyLocalEmbeddingBackend implements EmbeddingBackend {
34
48
  }
35
49
 
36
50
  async embed(
37
- texts: string[],
51
+ inputs: EmbeddingInput[],
38
52
  options?: EmbeddingRequestOptions,
39
53
  ): Promise<number[][]> {
40
54
  const backend = await this.getDelegate();
41
55
  try {
42
- return await backend.embed(texts, options);
56
+ return await backend.embed(inputs, options);
43
57
  } catch (err) {
44
58
  // The onnxruntime-node failure surfaces here during the first embed() call
45
59
  // (via LocalEmbeddingBackend.initialize()). Mark broken so auto mode stops
@@ -103,18 +117,26 @@ function estimateEntryBytes(key: string, vector: number[]): number {
103
117
  return key.length * 2 + vector.length * 8;
104
118
  }
105
119
 
106
- function vectorCacheKey(provider: string, model: string, text: string): string {
120
+ function vectorCacheKey(
121
+ provider: string,
122
+ model: string,
123
+ input: EmbeddingInput,
124
+ extras?: string[],
125
+ ): string {
126
+ const contentHash = embeddingInputContentHash(input);
127
+ const suffix = extras && extras.length > 0 ? `\0${extras.join("\0")}` : "";
107
128
  return createHash("sha256")
108
- .update(`${provider}\0${model}\0${text}`)
129
+ .update(`${provider}\0${model}\0${contentHash}${suffix}`)
109
130
  .digest("hex");
110
131
  }
111
132
 
112
133
  function getFromVectorCache(
113
134
  provider: string,
114
135
  model: string,
115
- text: string,
136
+ input: EmbeddingInput,
137
+ extras?: string[],
116
138
  ): number[] | undefined {
117
- const key = vectorCacheKey(provider, model, text);
139
+ const key = vectorCacheKey(provider, model, input, extras);
118
140
  const v = vectorCache.get(key);
119
141
  if (v !== undefined) {
120
142
  // LRU refresh: move to end of insertion order
@@ -127,10 +149,11 @@ function getFromVectorCache(
127
149
  function putInVectorCache(
128
150
  provider: string,
129
151
  model: string,
130
- text: string,
152
+ input: EmbeddingInput,
131
153
  vector: number[],
154
+ extras?: string[],
132
155
  ): void {
133
- const key = vectorCacheKey(provider, model, text);
156
+ const key = vectorCacheKey(provider, model, input, extras);
134
157
  // If replacing an existing entry, subtract its old cost first
135
158
  const existing = vectorCache.get(key);
136
159
  if (existing !== undefined) {
@@ -161,7 +184,10 @@ export function clearEmbeddingBackendCache(): void {
161
184
  localBackendBroken = false;
162
185
  }
163
186
 
164
- function cacheKey(provider: string, model: string): string {
187
+ function cacheKey(provider: string, model: string, extras?: string[]): string {
188
+ if (extras && extras.length > 0) {
189
+ return `${provider}:${model}:${extras.join(":")}`;
190
+ }
165
191
  return `${provider}:${model}`;
166
192
  }
167
193
 
@@ -169,8 +195,9 @@ function getCachedOrCreate<T extends EmbeddingBackend>(
169
195
  provider: string,
170
196
  model: string,
171
197
  create: () => T,
198
+ extras?: string[],
172
199
  ): T {
173
- const key = cacheKey(provider, model);
200
+ const key = cacheKey(provider, model, extras);
174
201
  const existing = backendCache.get(key);
175
202
  if (existing) return existing as T;
176
203
  const instance = create();
@@ -178,6 +205,17 @@ function getCachedOrCreate<T extends EmbeddingBackend>(
178
205
  return instance;
179
206
  }
180
207
 
208
+ function geminiCacheExtras(config: AssistantConfig): string[] {
209
+ const extras: string[] = [];
210
+ if (config.memory.embeddings.geminiTaskType) {
211
+ extras.push(`task=${config.memory.embeddings.geminiTaskType}`);
212
+ }
213
+ if (config.memory.embeddings.geminiDimensions != null) {
214
+ extras.push(`dim=${config.memory.embeddings.geminiDimensions}`);
215
+ }
216
+ return extras;
217
+ }
218
+
181
219
  export type EmbeddingProviderName = "local" | "openai" | "gemini" | "ollama";
182
220
 
183
221
  export interface EmbeddingRequestOptions {
@@ -188,7 +226,7 @@ export interface EmbeddingBackend {
188
226
  readonly provider: EmbeddingProviderName;
189
227
  readonly model: string;
190
228
  embed(
191
- texts: string[],
229
+ inputs: EmbeddingInput[],
192
230
  options?: EmbeddingRequestOptions,
193
231
  ): Promise<number[][]>;
194
232
  }
@@ -272,7 +310,12 @@ export function selectEmbeddingBackend(
272
310
  new GeminiEmbeddingBackend(
273
311
  config.apiKeys.gemini,
274
312
  config.memory.embeddings.geminiModel,
313
+ {
314
+ taskType: config.memory.embeddings.geminiTaskType,
315
+ dimensions: config.memory.embeddings.geminiDimensions,
316
+ },
275
317
  ),
318
+ geminiCacheExtras(config),
276
319
  ),
277
320
  reason: null,
278
321
  };
@@ -336,7 +379,7 @@ export function getMemoryBackendStatus(config: AssistantConfig): {
336
379
 
337
380
  export async function embedWithBackend(
338
381
  config: AssistantConfig,
339
- texts: string[],
382
+ inputs: EmbeddingInput[],
340
383
  options?: EmbeddingRequestOptions,
341
384
  ): Promise<{
342
385
  provider: EmbeddingProviderName;
@@ -354,15 +397,22 @@ export async function embedWithBackend(
354
397
  const { provider: primaryProvider, model: primaryModel } = selection.backend;
355
398
 
356
399
  // ── Build fallback backends list (needed for embed fallback) ──
400
+ // In auto mode, build a fallback chain from all configured backends
401
+ // (excluding the primary). This lets multimodal inputs fall through
402
+ // to Gemini even when the primary is local or openai.
357
403
  const fallbacks: EmbeddingBackend[] =
358
404
  config.memory.embeddings.provider === "auto" &&
359
- selection.backend.provider === "local"
360
- ? selectFallbackBackends(config, "local")
405
+ selection.backend.provider !== "gemini"
406
+ ? selectFallbackBackends(config, selection.backend.provider)
361
407
  : [];
362
408
 
409
+ // ── Compute provider-specific vector cache extras ───────────────
410
+ const vectorExtras =
411
+ primaryProvider === "gemini" ? geminiCacheExtras(config) : undefined;
412
+
363
413
  // ── In-memory cache check (primary provider only) ──────────────
364
- const cached: (number[] | null)[] = texts.map((t) => {
365
- const v = getFromVectorCache(primaryProvider, primaryModel, t);
414
+ const cached: (number[] | null)[] = inputs.map((input) => {
415
+ const v = getFromVectorCache(primaryProvider, primaryModel, input, vectorExtras);
366
416
  if (v && v.length === expectedDim) return v;
367
417
  return null;
368
418
  });
@@ -378,23 +428,33 @@ export async function embedWithBackend(
378
428
  };
379
429
  }
380
430
 
381
- // ── Embed uncached texts ────────────────────────────────────────
431
+ // ── Embed uncached inputs ───────────────────────────────────────
382
432
  const backends: EmbeddingBackend[] = [selection.backend, ...fallbacks];
383
433
 
384
434
  let lastErr: unknown;
435
+ let anyBackendAttempted = false;
385
436
  for (const backend of backends) {
386
437
  const isPrimary = backend === selection.backend;
387
- // For the primary backend, only embed uncached texts and merge with cached.
388
- // For fallback backends, embed ALL texts since the cache was keyed to the primary.
389
- const textsToEmbed = isPrimary
390
- ? uncachedIndices.map((i) => texts[i])
391
- : texts;
438
+ // For the primary backend, only embed uncached inputs and merge with cached.
439
+ // For fallback backends, embed ALL inputs since the cache was keyed to the primary.
440
+ const inputsToEmbed = isPrimary
441
+ ? uncachedIndices.map((i) => inputs[i])
442
+ : inputs;
443
+
444
+ // Skip text-only backends for multimodal inputs
445
+ const hasNonText = inputsToEmbed.some(
446
+ (i) => typeof i !== "string" && normalizeEmbeddingInput(i).type !== "text",
447
+ );
448
+ if (backend.provider !== "gemini" && hasNonText) {
449
+ continue;
450
+ }
392
451
 
393
452
  try {
394
- const vectors = await backend.embed(textsToEmbed, options);
395
- if (vectors.length !== textsToEmbed.length) {
453
+ anyBackendAttempted = true;
454
+ const vectors = await backend.embed(inputsToEmbed, options);
455
+ if (vectors.length !== inputsToEmbed.length) {
396
456
  throw new Error(
397
- `Embedding backend returned ${vectors.length} vectors for ${textsToEmbed.length} texts`,
457
+ `Embedding backend returned ${vectors.length} vectors for ${inputsToEmbed.length} inputs`,
398
458
  );
399
459
  }
400
460
  for (const vec of vectors) {
@@ -406,12 +466,15 @@ export async function embedWithBackend(
406
466
  }
407
467
 
408
468
  // Populate cache with freshly embedded vectors
409
- for (let i = 0; i < textsToEmbed.length; i++) {
469
+ const backendExtras =
470
+ backend.provider === "gemini" ? geminiCacheExtras(config) : undefined;
471
+ for (let i = 0; i < inputsToEmbed.length; i++) {
410
472
  putInVectorCache(
411
473
  backend.provider,
412
474
  backend.model,
413
- textsToEmbed[i],
475
+ inputsToEmbed[i],
414
476
  vectors[i],
477
+ backendExtras,
415
478
  );
416
479
  }
417
480
 
@@ -437,6 +500,16 @@ export async function embedWithBackend(
437
500
  }
438
501
  }
439
502
  }
503
+ if (!anyBackendAttempted) {
504
+ const hasMultimodal = inputs.some(
505
+ (i) => typeof i !== "string" && normalizeEmbeddingInput(i).type !== "text",
506
+ );
507
+ if (hasMultimodal) {
508
+ throw new Error(
509
+ "No available embedding backend supports multimodal inputs. Gemini API key is required for image/audio/video embeddings.",
510
+ );
511
+ }
512
+ }
440
513
  throw lastErr;
441
514
  }
442
515
 
@@ -478,7 +551,12 @@ function selectFallbackBackends(
478
551
  new GeminiEmbeddingBackend(
479
552
  config.apiKeys.gemini,
480
553
  config.memory.embeddings.geminiModel,
554
+ {
555
+ taskType: config.memory.embeddings.geminiTaskType,
556
+ dimensions: config.memory.embeddings.geminiDimensions,
557
+ },
481
558
  ),
559
+ geminiCacheExtras(config),
482
560
  ),
483
561
  );
484
562
  }
@@ -505,6 +583,30 @@ function selectFallbackBackends(
505
583
  return backends;
506
584
  }
507
585
 
586
+ /**
587
+ * Returns true when the embedding pipeline can handle multimodal inputs
588
+ * (images, audio, video). Today only Gemini supports multimodal.
589
+ *
590
+ * In auto mode, the primary backend is usually local or OpenAI, but
591
+ * embedWithBackend builds a fallback chain that includes Gemini when
592
+ * available. We check both the primary and fallback backends so that
593
+ * multimodal jobs are still enqueued when Gemini is reachable via fallback.
594
+ */
595
+ export function selectedBackendSupportsMultimodal(
596
+ config: AssistantConfig,
597
+ ): boolean {
598
+ const { backend } = selectEmbeddingBackend(config);
599
+ if (!backend) return false;
600
+ if (backend.provider === "gemini") return true;
601
+
602
+ // In auto mode, check if Gemini is available as a fallback backend.
603
+ if (config.memory.embeddings.provider === "auto") {
604
+ const fallbacks = selectFallbackBackends(config, backend.provider);
605
+ return fallbacks.some((fb) => fb.provider === "gemini");
606
+ }
607
+ return false;
608
+ }
609
+
508
610
  function isOllamaConfigured(config: AssistantConfig): boolean {
509
611
  return (
510
612
  config.provider === "ollama" ||