@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
@@ -8,7 +8,6 @@ import { executeSwarm } from "../../swarm/orchestrator.js";
8
8
  import { generatePlan } from "../../swarm/router-planner.js";
9
9
  import { getLogger } from "../../util/logger.js";
10
10
  import { truncate } from "../../util/truncate.js";
11
- import { registerTool } from "../registry.js";
12
11
  import type { Tool, ToolContext, ToolExecutionResult } from "../types.js";
13
12
 
14
13
  const log = getLogger("swarm-delegate");
@@ -205,8 +204,6 @@ export const swarmDelegateTool: Tool = {
205
204
  },
206
205
  };
207
206
 
208
- registerTool(swarmDelegateTool);
209
-
210
207
  /** Clear all active sessions — only for testing. */
211
208
  export function _resetSwarmActive(): void {
212
209
  activeSessions.clear();
@@ -109,39 +109,33 @@ export const setAvatarTool: Tool = {
109
109
  };
110
110
  } catch (error) {
111
111
  if (error instanceof ManagedAvatarError) {
112
+ log.error(
113
+ {
114
+ error: error.message,
115
+ statusCode: error.statusCode,
116
+ code: error.code,
117
+ },
118
+ "Avatar generation failed (managed)",
119
+ );
112
120
  if (error.statusCode === 429) {
113
- log.warn(
114
- { correlationId: error.correlationId },
115
- "Avatar generation rate limited",
116
- );
117
121
  return {
118
122
  content:
119
- "Avatar generation is rate limited. Please wait and try again.",
123
+ "Avatar generation is currently rate limited. Please try again in a moment.",
120
124
  isError: true,
121
125
  };
122
126
  }
123
- if (error.statusCode === 503) {
124
- log.warn(
125
- { correlationId: error.correlationId },
126
- "Avatar generation service unavailable",
127
- );
127
+ if (error.statusCode >= 500) {
128
128
  return {
129
- content: "Avatar generation service is temporarily unavailable.",
129
+ content:
130
+ "Avatar generation is temporarily unavailable. Please try again later.",
130
131
  isError: true,
131
132
  };
132
133
  }
133
- const detail =
134
- error.message || "Avatar generation failed. Please try again.";
135
- log.error(
136
- { error: detail, correlationId: error.correlationId },
137
- "Managed avatar generation failed",
138
- );
139
134
  return {
140
- content: `Avatar generation failed: ${detail}`,
135
+ content: `Avatar generation failed: ${error.message}`,
141
136
  isError: true,
142
137
  };
143
138
  }
144
-
145
139
  const message = mapGeminiError(error);
146
140
  log.error({ error: message }, "Avatar generation failed");
147
141
  return {
@@ -110,4 +110,5 @@ class RequestSystemPermissionTool implements Tool {
110
110
  }
111
111
  }
112
112
 
113
- registerTool(new RequestSystemPermissionTool());
113
+ export const requestSystemPermissionTool = new RequestSystemPermissionTool();
114
+ registerTool(requestSystemPermissionTool);
@@ -27,6 +27,7 @@ const SAFE_ENV_VARS = [
27
27
  "SSH_AGENT_PID",
28
28
  "GPG_TTY",
29
29
  "GNUPGHOME",
30
+ "VELLUM_DEV",
30
31
  ] as const;
31
32
 
32
33
  export function buildSanitizedEnv(): Record<string, string> {
@@ -6,24 +6,28 @@
6
6
  * so adding/removing tools only requires editing this manifest.
7
7
  */
8
8
 
9
- import { accountManageTool } from "./credentials/account-registry.js";
9
+ import { assetMaterializeTool } from "./assets/materialize.js";
10
+ import { assetSearchTool } from "./assets/search.js";
10
11
  import { credentialStoreTool } from "./credentials/vault.js";
11
- import {
12
- memoryDeleteTool,
13
- memoryRecallTool,
14
- memorySaveTool,
15
- memoryUpdateTool,
16
- } from "./memory/register.js";
12
+ import { fileEditTool } from "./filesystem/edit.js";
13
+ import { fileReadTool } from "./filesystem/read.js";
14
+ import { fileWriteTool } from "./filesystem/write.js";
15
+ import { memoryManageTool, memoryRecallTool } from "./memory/register.js";
16
+ import { webFetchTool } from "./network/web-fetch.js";
17
+ import { webSearchTool } from "./network/web-search.js";
17
18
  import type { LazyToolDescriptor } from "./registry.js";
18
- import { setAvatarTool } from "./system/avatar-generator.js";
19
- import { navigateSettingsTabTool } from "./system/navigate-settings.js";
20
- import { openSystemSettingsTool } from "./system/open-system-settings.js";
21
- import { voiceConfigUpdateTool } from "./system/voice-config.js";
19
+ import { skillExecuteTool } from "./skills/execute.js";
20
+ import { skillLoadTool } from "./skills/load.js";
21
+ import { requestSystemPermissionTool } from "./system/request-permission.js";
22
+ import { shellTool } from "./terminal/shell.js";
22
23
  import type { Tool } from "./types.js";
23
- import { screenWatchTool } from "./watch/screen-watch.js";
24
24
 
25
25
  // ── Eager side-effect modules ───────────────────────────────────────
26
- // These static imports trigger top-level `registerTool()` side effects.
26
+ // These static imports trigger top-level `registerTool()` side effects on
27
+ // first evaluation. The named imports above serve double duty: they give us
28
+ // module-level references to each tool instance so that initializeTools()
29
+ // can explicitly re-register them after a test registry reset (ESM caching
30
+ // prevents side effects from re-running on subsequent imports).
27
31
  //
28
32
  // IMPORTANT: These MUST be static imports (not dynamic `await import()`).
29
33
  // When the daemon is compiled with `bun --compile`, dynamic imports with
@@ -31,21 +35,6 @@ import { screenWatchTool } from "./watch/screen-watch.js";
31
35
  // filesystem root rather than the module's own directory, causing
32
36
  // "Cannot find module './filesystem/read.js'" crashes in production builds.
33
37
  // Static imports are resolved at bundle time and are always safe.
34
- import "./assets/materialize.js";
35
- import "./assets/search.js";
36
- import "./filesystem/edit.js";
37
- import "./filesystem/read.js";
38
- import "./filesystem/view-image.js";
39
- import "./filesystem/write.js";
40
- import "./network/web-fetch.js";
41
- import "./network/web-search.js";
42
- import "./skills/delete-managed.js";
43
- import "./skills/load.js";
44
- import "./skills/scaffold-managed.js";
45
- import "./swarm/delegate.js";
46
- import "./system/request-permission.js";
47
- import "./system/version.js";
48
- import "./terminal/shell.js";
49
38
 
50
39
  // loadEagerModules is a no-op now that all eager registrations happen via
51
40
  // static imports above. Kept for API compatibility with registry.ts callers.
@@ -64,39 +53,44 @@ export const eagerModuleToolNames: string[] = [
64
53
  "file_edit",
65
54
  "web_search",
66
55
  "web_fetch",
56
+ "skill_execute",
67
57
  "skill_load",
68
- "scaffold_managed_skill",
69
- "delete_managed_skill",
70
58
  "request_system_permission",
71
59
  "asset_search",
72
60
  "asset_materialize",
73
- "swarm_delegate",
74
- "view_image",
75
- "version",
76
61
  ];
77
62
 
78
63
  // ── Explicit tool instances ─────────────────────────────────────────
79
- // Tools exported as instances — registered by initializeTools() without
80
- // relying on import side effects.
64
+ // Tools registered by initializeTools() via explicit instance references.
65
+ // This includes both previously-eager tools (referenced here so they survive
66
+ // a test registry reset) and tools that have always been explicit.
81
67
 
82
68
  export const explicitTools: Tool[] = [
83
- memorySaveTool,
84
- memoryUpdateTool,
85
- memoryDeleteTool,
69
+ // Previously-eager tools — kept here so initializeTools() can re-register
70
+ // them after __resetRegistryForTesting() clears the registry (ESM caching
71
+ // prevents their side-effect registrations from re-running).
72
+ shellTool,
73
+ fileReadTool,
74
+ fileWriteTool,
75
+ fileEditTool,
76
+ webFetchTool,
77
+ webSearchTool,
78
+ skillExecuteTool,
79
+ skillLoadTool,
80
+ requestSystemPermissionTool,
81
+ assetSearchTool,
82
+ assetMaterializeTool,
83
+ // Always-explicit tools
84
+ memoryManageTool,
86
85
  memoryRecallTool,
87
86
  credentialStoreTool,
88
- accountManageTool,
89
- screenWatchTool,
90
- voiceConfigUpdateTool,
91
- setAvatarTool,
92
- openSystemSettingsTool,
93
- navigateSettingsTabTool,
94
87
  ];
95
88
 
96
89
  // ── Lazy tool descriptors ───────────────────────────────────────────
97
90
  // Tools that defer module loading until first invocation.
98
- // bash and swarm_delegate were previously lazy but are now eagerly registered
99
- // via side-effect imports above, preserving their full definitions (including
100
- // the `reason` field on bash) and fixing bun --compile module-not-found crashes.
91
+ // bash was previously lazy but is now eagerly registered via side-effect
92
+ // imports above, preserving its full definition (including the `reason` field)
93
+ // and fixing bun --compile module-not-found crashes.
94
+ // swarm_delegate has been moved to the orchestration bundled skill.
101
95
 
102
96
  export const lazyTools: LazyToolDescriptor[] = [];
@@ -136,9 +136,9 @@ export interface ToolContext {
136
136
  allowedTools?: string[];
137
137
  allowedDomains?: string[];
138
138
  }) => Promise<SecretPromptResult>;
139
- /** Optional callback to send a message to the connected IPC client (e.g. open_url). */
139
+ /** Optional callback to send a message to the connected client (e.g. open_url). */
140
140
  sendToClient?: (msg: { type: string; [key: string]: unknown }) => void;
141
- /** True when an interactive IPC client is connected (not just a no-op callback). */
141
+ /** True when an interactive client is connected (not just a no-op callback). */
142
142
  isInteractive?: boolean;
143
143
  /** Memory scope ID from the session's memory policy, so memory tools can target the correct scope. */
144
144
  memoryScopeId?: string;
@@ -169,6 +169,10 @@ export interface ToolContext {
169
169
  channelPermissionChannelId?: string;
170
170
  /** The tool_use block ID from the LLM response, used to correlate confirmation prompts with specific tool invocations. */
171
171
  toolUseId?: string;
172
+ /** Optional proxy for delegating host_bash execution to a connected client (managed/cloud-hosted mode). */
173
+ hostBashProxy?: import("../daemon/host-bash-proxy.js").HostBashProxy;
174
+ /** Optional proxy for delegating host_file_read/write/edit execution to a connected client (managed/cloud-hosted mode). */
175
+ hostFileProxy?: import("../daemon/host-file-proxy.js").HostFileProxy;
172
176
  }
173
177
 
174
178
  export interface DiffInfo {
@@ -218,63 +218,8 @@ export const uiDismissTool: Tool = {
218
218
  execute: proxyExecute,
219
219
  };
220
220
 
221
- // ---------------------------------------------------------------------------
222
- // request_file
223
- // ---------------------------------------------------------------------------
224
-
225
- export const requestFileTool: Tool = {
226
- name: "request_file",
227
- description:
228
- "Request a file or image from the user. Shows a file upload dialog where the user can drag-and-drop or browse for files. " +
229
- "Use this when you need the user to share a file (image, document, PDF, etc.) to continue the conversation. " +
230
- "The result contains the uploaded file data including base64 content and MIME type.",
231
- category: "ui-surface",
232
- defaultRiskLevel: RiskLevel.Low,
233
- executionMode: "proxy",
234
-
235
- getDefinition(): ToolDefinition {
236
- return {
237
- name: this.name,
238
- description: this.description,
239
- input_schema: {
240
- type: "object",
241
- properties: {
242
- prompt: {
243
- type: "string",
244
- description:
245
- 'What to ask the user for, e.g. "Please share the design file you\'d like me to review"',
246
- },
247
- accepted_types: {
248
- type: "array",
249
- items: { type: "string" },
250
- description:
251
- 'MIME type filters, e.g. ["image/*", "application/pdf"]. If omitted, all supported file types are accepted.',
252
- },
253
- max_files: {
254
- type: "number",
255
- description: "Maximum number of files to accept. Defaults to 1.",
256
- },
257
- reason: {
258
- type: "string",
259
- description:
260
- "Brief non-technical explanation of what you are requesting and why, shown to the user as a status update. Use simple language a non-technical person would understand.",
261
- },
262
- },
263
- required: ["prompt"],
264
- },
265
- };
266
- },
267
-
268
- execute: proxyExecute,
269
- };
270
-
271
- // ---------------------------------------------------------------------------
272
- // All tools exported as array for convenience
273
- // ---------------------------------------------------------------------------
274
-
275
221
  export const allUiSurfaceTools: Tool[] = [
276
222
  uiShowTool,
277
223
  uiUpdateTool,
278
224
  uiDismissTool,
279
- requestFileTool,
280
225
  ];
@@ -14,9 +14,6 @@ export enum ErrorCode {
14
14
  // Daemon errors
15
15
  DAEMON_ERROR = "DAEMON_ERROR",
16
16
 
17
- // IPC/socket errors
18
- IPC_ERROR = "IPC_ERROR",
19
-
20
17
  // Platform-specific errors (clipboard, unsupported OS features)
21
18
  PLATFORM_ERROR = "PLATFORM_ERROR",
22
19
 
@@ -170,13 +167,6 @@ export class DaemonError extends AssistantError {
170
167
  }
171
168
  }
172
169
 
173
- export class IpcError extends AssistantError {
174
- constructor(message: string, options?: { cause?: unknown }) {
175
- super(message, ErrorCode.IPC_ERROR, options);
176
- this.name = "IpcError";
177
- }
178
- }
179
-
180
170
  export class PlatformError extends AssistantError {
181
171
  constructor(message: string, options?: { cause?: unknown }) {
182
172
  super(message, ErrorCode.PLATFORM_ERROR, options);
@@ -54,7 +54,6 @@ function cleanGitEnv(workspaceDir: string): Record<string, string> {
54
54
  const WORKSPACE_GITIGNORE_RULES = [
55
55
  "data/db/",
56
56
  "data/qdrant/",
57
- "data/ipc-blobs/",
58
57
  "logs/",
59
58
  "*.log",
60
59
  "*.sock",
@@ -67,7 +66,6 @@ const WORKSPACE_GITIGNORE_RULES = [
67
66
  "*.db-journal",
68
67
  "*.db-wal",
69
68
  "*.db-shm",
70
- "vellum.sock",
71
69
  "vellum.pid",
72
70
  "session-token",
73
71
  ];
@@ -1,258 +0,0 @@
1
- import { mkdtempSync, rmSync } from "node:fs";
2
- import { tmpdir } from "node:os";
3
- import { join } from "node:path";
4
- import { afterAll, beforeEach, describe, expect, mock, test } from "bun:test";
5
-
6
- const testDir = mkdtempSync(join(tmpdir(), "account-registry-test-"));
7
-
8
- mock.module("../util/platform.js", () => ({
9
- getDataDir: () => testDir,
10
- isMacOS: () => process.platform === "darwin",
11
- isLinux: () => process.platform === "linux",
12
- isWindows: () => process.platform === "win32",
13
- getSocketPath: () => join(testDir, "test.sock"),
14
- getPidPath: () => join(testDir, "test.pid"),
15
- getDbPath: () => join(testDir, "test.db"),
16
- getLogPath: () => join(testDir, "test.log"),
17
- ensureDataDir: () => {},
18
- getPlatformName: () => process.platform,
19
- }));
20
-
21
- mock.module("../util/logger.js", () => ({
22
- getLogger: () =>
23
- new Proxy({} as Record<string, unknown>, {
24
- get: () => () => {},
25
- }),
26
- }));
27
-
28
- mock.module("../tools/registry.js", () => ({
29
- registerTool: () => {},
30
- }));
31
-
32
- import {
33
- createAccount,
34
- getAccount,
35
- listAccounts,
36
- updateAccount,
37
- } from "../memory/account-store.js";
38
- import { getDb, initializeDb, resetDb } from "../memory/db.js";
39
- import type { ToolContext } from "../tools/types.js";
40
-
41
- // Initialize db once
42
- initializeDb();
43
-
44
- const _ctx: ToolContext = {
45
- workingDir: "/tmp",
46
- sessionId: "test-session",
47
- conversationId: "test-conv",
48
- trustClass: "guardian",
49
- };
50
-
51
- afterAll(() => {
52
- resetDb();
53
- mock.restore();
54
- try {
55
- rmSync(testDir, { recursive: true });
56
- } catch {
57
- /* best effort */
58
- }
59
- });
60
-
61
- describe("account_manage tool", () => {
62
- beforeEach(() => {
63
- const db = getDb();
64
- db.run(`DELETE FROM accounts`);
65
- });
66
-
67
- // -----------------------------------------------------------------------
68
- // Create
69
- // -----------------------------------------------------------------------
70
- describe("create action", () => {
71
- test("creates an account with auto-generated UUID", () => {
72
- const record = createAccount({
73
- service: "gmail",
74
- username: "user@gmail.com",
75
- });
76
- expect(record.id).toBeTruthy();
77
- // UUID v4 format: 8-4-4-4-12
78
- expect(record.id).toMatch(
79
- /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/,
80
- );
81
- });
82
-
83
- test("sets timestamps correctly", () => {
84
- const before = Date.now();
85
- const record = createAccount({ service: "github" });
86
- const after = Date.now();
87
-
88
- expect(record.createdAt).toBeGreaterThanOrEqual(before);
89
- expect(record.createdAt).toBeLessThanOrEqual(after);
90
- expect(record.updatedAt).toBe(record.createdAt);
91
- });
92
-
93
- test("stores all provided fields", () => {
94
- const record = createAccount({
95
- service: "github",
96
- username: "octocat",
97
- email: "octocat@github.com",
98
- displayName: "Octo Cat",
99
- status: "pending_verification",
100
- credentialRef: "github",
101
- metadata: { twoFactor: true },
102
- });
103
-
104
- expect(record.service).toBe("github");
105
- expect(record.username).toBe("octocat");
106
- expect(record.email).toBe("octocat@github.com");
107
- expect(record.displayName).toBe("Octo Cat");
108
- expect(record.status).toBe("pending_verification");
109
- expect(record.credentialRef).toBe("github");
110
- expect(record.metadataJson).toBe(JSON.stringify({ twoFactor: true }));
111
- });
112
-
113
- test("defaults status to active", () => {
114
- const record = createAccount({ service: "gmail" });
115
- expect(record.status).toBe("active");
116
- });
117
-
118
- test("returns the created record as JSON", () => {
119
- const record = createAccount({ service: "slack", email: "me@slack.com" });
120
- expect(record.service).toBe("slack");
121
- expect(record.email).toBe("me@slack.com");
122
- });
123
- });
124
-
125
- // -----------------------------------------------------------------------
126
- // List
127
- // -----------------------------------------------------------------------
128
- describe("list action", () => {
129
- test("lists all accounts", () => {
130
- createAccount({ service: "gmail", username: "user1" });
131
- createAccount({ service: "github", username: "user2" });
132
-
133
- const accounts = listAccounts();
134
- expect(accounts).toHaveLength(2);
135
- });
136
-
137
- test("filters by service", () => {
138
- createAccount({ service: "gmail", username: "user1" });
139
- createAccount({ service: "github", username: "user2" });
140
- createAccount({ service: "gmail", username: "user3" });
141
-
142
- const gmailAccounts = listAccounts({ service: "gmail" });
143
- expect(gmailAccounts).toHaveLength(2);
144
- expect(gmailAccounts.every((a) => a.service === "gmail")).toBe(true);
145
- });
146
-
147
- test("filters by status", () => {
148
- createAccount({ service: "gmail", status: "active" });
149
- createAccount({ service: "github", status: "suspended" });
150
- createAccount({ service: "slack", status: "active" });
151
-
152
- const activeAccounts = listAccounts({ status: "active" });
153
- expect(activeAccounts).toHaveLength(2);
154
- expect(activeAccounts.every((a) => a.status === "active")).toBe(true);
155
- });
156
-
157
- test("filters by both service and status", () => {
158
- createAccount({ service: "gmail", status: "active" });
159
- createAccount({ service: "gmail", status: "suspended" });
160
- createAccount({ service: "github", status: "active" });
161
-
162
- const result = listAccounts({ service: "gmail", status: "active" });
163
- expect(result).toHaveLength(1);
164
- expect(result[0].service).toBe("gmail");
165
- expect(result[0].status).toBe("active");
166
- });
167
-
168
- test("returns empty array when no accounts exist", () => {
169
- const accounts = listAccounts();
170
- expect(accounts).toEqual([]);
171
- });
172
- });
173
-
174
- // -----------------------------------------------------------------------
175
- // Get
176
- // -----------------------------------------------------------------------
177
- describe("get action", () => {
178
- test("retrieves an account by id", () => {
179
- const created = createAccount({ service: "gmail", username: "user1" });
180
- const fetched = getAccount(created.id);
181
- expect(fetched).toBeDefined();
182
- expect(fetched!.id).toBe(created.id);
183
- expect(fetched!.service).toBe("gmail");
184
- expect(fetched!.username).toBe("user1");
185
- });
186
-
187
- test("returns undefined for invalid id", () => {
188
- const result = getAccount("nonexistent-id");
189
- expect(result).toBeUndefined();
190
- });
191
- });
192
-
193
- // -----------------------------------------------------------------------
194
- // Update
195
- // -----------------------------------------------------------------------
196
- describe("update action", () => {
197
- test("updates provided fields", () => {
198
- const created = createAccount({ service: "gmail", username: "old-user" });
199
- const updated = updateAccount(created.id, { username: "new-user" });
200
-
201
- expect(updated).toBeDefined();
202
- expect(updated!.username).toBe("new-user");
203
- expect(updated!.service).toBe("gmail"); // unchanged
204
- });
205
-
206
- test("bumps updatedAt on update", async () => {
207
- const created = createAccount({ service: "gmail" });
208
- // Small delay to ensure timestamp difference
209
- await new Promise((r) => setTimeout(r, 10));
210
- const updated = updateAccount(created.id, { username: "updated" });
211
-
212
- expect(updated!.updatedAt).toBeGreaterThan(created.updatedAt);
213
- });
214
-
215
- test("returns undefined for non-existent id", () => {
216
- const result = updateAccount("nonexistent-id", { username: "test" });
217
- expect(result).toBeUndefined();
218
- });
219
-
220
- test("updates metadata as JSON", () => {
221
- const created = createAccount({ service: "github" });
222
- const updated = updateAccount(created.id, {
223
- metadata: { role: "admin" },
224
- });
225
-
226
- expect(updated!.metadataJson).toBe(JSON.stringify({ role: "admin" }));
227
- });
228
-
229
- test("updates status", () => {
230
- const created = createAccount({ service: "gmail", status: "active" });
231
- const updated = updateAccount(created.id, { status: "suspended" });
232
- expect(updated!.status).toBe("suspended");
233
- });
234
- });
235
-
236
- // -----------------------------------------------------------------------
237
- // Tool execute() via account-registry.ts
238
- // -----------------------------------------------------------------------
239
- describe("account_manage tool execute", () => {
240
- // We test through the account-store functions since the tool is a thin wrapper.
241
- // Also test the tool's error handling for missing required fields.
242
-
243
- test("create without service returns error message", async () => {
244
- // Import the tool module to test its execute method
245
- const _mod = await import("../tools/credentials/account-registry.js");
246
- // The tool was registered via side-effect; we test the store functions directly
247
- // and verify the tool's error-handling logic matches.
248
- // Since we mocked registerTool, let's just verify the store logic.
249
- // The tool delegates to createAccount, which requires service.
250
- });
251
-
252
- test("multiple accounts for same service have unique IDs", () => {
253
- const a1 = createAccount({ service: "gmail", username: "user1" });
254
- const a2 = createAccount({ service: "gmail", username: "user2" });
255
- expect(a1.id).not.toBe(a2.id);
256
- });
257
- });
258
- });
@@ -1,25 +0,0 @@
1
- import { describe, expect, test } from "bun:test";
2
-
3
- import {
4
- classifyEmails,
5
- type EmailMetadata,
6
- } from "../messaging/email-classifier.js";
7
-
8
- describe("classifyEmails", () => {
9
- test("returns empty classifications for empty input", async () => {
10
- const result = await classifyEmails([]);
11
- expect(result.classifications).toEqual([]);
12
- });
13
-
14
- test("accepts well-formed email metadata", () => {
15
- const email: EmailMetadata = {
16
- id: "msg-1",
17
- from: "test@example.com",
18
- subject: "Test Subject",
19
- snippet: "This is a test email snippet",
20
- labels: ["INBOX", "UNREAD"],
21
- };
22
- expect(email.id).toBe("msg-1");
23
- expect(email.labels).toContain("INBOX");
24
- });
25
- });