@vellumai/assistant 0.4.43 → 0.4.45

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (713) hide show
  1. package/.prettierignore +4 -0
  2. package/ARCHITECTURE.md +46 -44
  3. package/README.md +15 -16
  4. package/bun.lock +10 -35
  5. package/docs/architecture/integrations.md +102 -215
  6. package/docs/architecture/keychain-broker.md +1 -1
  7. package/docs/architecture/memory.md +2 -2
  8. package/docs/architecture/scheduling.md +1 -1
  9. package/docs/architecture/security.md +11 -11
  10. package/docs/error-handling.md +1 -1
  11. package/docs/trusted-contact-access.md +3 -3
  12. package/drizzle/meta/0000_snapshot.json +34 -100
  13. package/drizzle/meta/_journal.json +1 -1
  14. package/drizzle.config.ts +4 -4
  15. package/package.json +3 -2
  16. package/scripts/capture-x-graphql.ts +237 -141
  17. package/scripts/generate-bundled-tool-registry.ts +223 -0
  18. package/src/__tests__/access-request-decision.test.ts +0 -1
  19. package/src/__tests__/actor-token-service.test.ts +23 -24
  20. package/src/__tests__/agent-loop.test.ts +0 -131
  21. package/src/__tests__/always-loaded-tools-guard.test.ts +71 -0
  22. package/src/__tests__/amazon-cdp-integration.test.ts +11 -9
  23. package/src/__tests__/approval-primitive.test.ts +0 -1
  24. package/src/__tests__/approval-routes-http.test.ts +11 -3
  25. package/src/__tests__/asset-materialize-tool.test.ts +0 -1
  26. package/src/__tests__/asset-search-tool.test.ts +0 -1
  27. package/src/__tests__/assistant-attachment-directive.test.ts +1 -1
  28. package/src/__tests__/assistant-events-sse-hardening.test.ts +0 -1
  29. package/src/__tests__/assistant-feature-flag-guardrails.test.ts +0 -2
  30. package/src/__tests__/assistant-feature-flags-integration.test.ts +70 -18
  31. package/src/__tests__/assistant-id-boundary-guard.test.ts +6 -6
  32. package/src/__tests__/attachments-store.test.ts +0 -1
  33. package/src/__tests__/avatar-e2e.test.ts +74 -115
  34. package/src/__tests__/avatar-router.test.ts +25 -62
  35. package/src/__tests__/browser-manager.test.ts +24 -0
  36. package/src/__tests__/browser-skill-baseline-tool-payload.test.ts +4 -3
  37. package/src/__tests__/browser-skill-endstate.test.ts +8 -11
  38. package/src/__tests__/btw-routes.test.ts +326 -0
  39. package/src/__tests__/bundled-asset.test.ts +1 -1
  40. package/src/__tests__/bundled-skill-retrieval-guard.test.ts +23 -9
  41. package/src/__tests__/call-controller.test.ts +0 -1
  42. package/src/__tests__/call-conversation-messages.test.ts +0 -1
  43. package/src/__tests__/call-domain.test.ts +0 -1
  44. package/src/__tests__/call-pointer-messages.test.ts +0 -1
  45. package/src/__tests__/call-recovery.test.ts +0 -1
  46. package/src/__tests__/call-routes-http.test.ts +0 -1
  47. package/src/__tests__/call-store.test.ts +0 -1
  48. package/src/__tests__/canonical-guardian-store.test.ts +0 -1
  49. package/src/__tests__/channel-approval-routes.test.ts +1 -1
  50. package/src/__tests__/channel-approvals.test.ts +1 -1
  51. package/src/__tests__/channel-delivery-store.test.ts +0 -1
  52. package/src/__tests__/channel-guardian.test.ts +5 -7
  53. package/src/__tests__/channel-retry-sweep.test.ts +0 -1
  54. package/src/__tests__/checker.test.ts +32 -36
  55. package/src/__tests__/compaction.benchmark.test.ts +16 -14
  56. package/src/__tests__/computer-use-session-lifecycle.test.ts +10 -11
  57. package/src/__tests__/computer-use-session-working-dir.test.ts +2 -6
  58. package/src/__tests__/computer-use-skill-lifecycle-cleanup.test.ts +2 -5
  59. package/src/__tests__/computer-use-tools.test.ts +35 -31
  60. package/src/__tests__/config-schema.test.ts +11 -15
  61. package/src/__tests__/config-watcher.test.ts +0 -1
  62. package/src/__tests__/confirmation-request-guardian-bridge.test.ts +0 -1
  63. package/src/__tests__/conflict-store.test.ts +0 -1
  64. package/src/__tests__/connection-policy.test.ts +4 -7
  65. package/src/__tests__/contacts-tools.test.ts +0 -1
  66. package/src/__tests__/context-memory-e2e.test.ts +2 -4
  67. package/src/__tests__/context-overflow-reducer.test.ts +2 -4
  68. package/src/__tests__/context-window-manager.test.ts +147 -60
  69. package/src/__tests__/contradiction-checker.test.ts +0 -1
  70. package/src/__tests__/conversation-attention-store.test.ts +0 -1
  71. package/src/__tests__/conversation-attention-telegram.test.ts +1 -1
  72. package/src/__tests__/conversation-pairing.test.ts +2 -2
  73. package/src/__tests__/conversation-routes-guardian-reply.test.ts +31 -7
  74. package/src/__tests__/conversation-routes-slash-commands.test.ts +381 -0
  75. package/src/__tests__/conversation-store.test.ts +0 -1
  76. package/src/__tests__/conversation-unread-route.test.ts +1 -2
  77. package/src/__tests__/credential-security-invariants.test.ts +8 -8
  78. package/src/__tests__/cross-provider-web-search.test.ts +353 -0
  79. package/src/__tests__/daemon-assistant-events.test.ts +6 -7
  80. package/src/__tests__/db-schedule-syntax-migration.test.ts +15 -3
  81. package/src/__tests__/delete-managed-skill-tool.test.ts +5 -9
  82. package/src/__tests__/deterministic-verification-control-plane.test.ts +0 -1
  83. package/src/__tests__/diagnostics-export.test.ts +189 -0
  84. package/src/__tests__/dynamic-skill-workflow-prompt.test.ts +0 -1
  85. package/src/__tests__/emit-signal-routing-intent.test.ts +3 -3
  86. package/src/__tests__/entity-extractor.test.ts +0 -1
  87. package/src/__tests__/entity-search.test.ts +0 -1
  88. package/src/__tests__/ephemeral-permissions.test.ts +2 -4
  89. package/src/__tests__/error-handler-friendly-messages.test.ts +46 -0
  90. package/src/__tests__/file-read-tool.test.ts +86 -0
  91. package/src/__tests__/followup-tools.test.ts +0 -1
  92. package/src/__tests__/frontmatter.test.ts +77 -34
  93. package/src/__tests__/gateway-only-enforcement.test.ts +0 -1
  94. package/src/__tests__/gateway-only-guard.test.ts +1 -1
  95. package/src/__tests__/guardian-action-conversation-turn.test.ts +0 -1
  96. package/src/__tests__/guardian-action-followup-executor.test.ts +0 -1
  97. package/src/__tests__/guardian-action-followup-store.test.ts +0 -1
  98. package/src/__tests__/guardian-action-grant-mint-consume.test.ts +0 -1
  99. package/src/__tests__/guardian-action-late-reply.test.ts +0 -1
  100. package/src/__tests__/guardian-action-store.test.ts +0 -1
  101. package/src/__tests__/guardian-action-sweep.test.ts +0 -1
  102. package/src/__tests__/guardian-decision-primitive-canonical.test.ts +0 -1
  103. package/src/__tests__/guardian-dispatch.test.ts +1 -2
  104. package/src/__tests__/guardian-grant-minting.test.ts +1 -1
  105. package/src/__tests__/guardian-outbound-http.test.ts +0 -1
  106. package/src/__tests__/guardian-principal-id-roundtrip.test.ts +0 -1
  107. package/src/__tests__/guardian-routing-invariants.test.ts +1 -1
  108. package/src/__tests__/guardian-routing-state.test.ts +0 -1
  109. package/src/__tests__/guardian-verification-voice-binding.test.ts +0 -1
  110. package/src/__tests__/guardian-verify-setup-skill-regression.test.ts +3 -5
  111. package/src/__tests__/handlers-user-message-approval-consumption.test.ts +28 -426
  112. package/src/__tests__/host-bash-proxy.test.ts +335 -0
  113. package/src/__tests__/host-file-proxy.test.ts +374 -0
  114. package/src/__tests__/host-shell-tool.test.ts +147 -1
  115. package/src/__tests__/http-user-message-parity.test.ts +361 -0
  116. package/src/__tests__/inbound-invite-redemption.test.ts +0 -1
  117. package/src/__tests__/integration-status.test.ts +3 -8
  118. package/src/__tests__/intent-routing.test.ts +7 -46
  119. package/src/__tests__/invite-redemption-service.test.ts +0 -1
  120. package/src/__tests__/invite-routes-http.test.ts +0 -1
  121. package/src/__tests__/llm-usage-store.test.ts +0 -1
  122. package/src/__tests__/managed-avatar-client.test.ts +101 -55
  123. package/src/__tests__/managed-skill-lifecycle.test.ts +9 -18
  124. package/src/__tests__/managed-store.test.ts +94 -21
  125. package/src/__tests__/media-reuse-story.e2e.test.ts +0 -1
  126. package/src/__tests__/memory-context-benchmark.benchmark.test.ts +2 -4
  127. package/src/__tests__/memory-lifecycle-e2e.test.ts +0 -1
  128. package/src/__tests__/memory-recall-quality.test.ts +0 -1
  129. package/src/__tests__/memory-regressions.experimental.test.ts +0 -1
  130. package/src/__tests__/memory-regressions.test.ts +0 -1
  131. package/src/__tests__/memory-retrieval.benchmark.test.ts +0 -1
  132. package/src/__tests__/memory-upsert-concurrency.test.ts +0 -1
  133. package/src/__tests__/messaging-send-tool.test.ts +35 -0
  134. package/src/__tests__/messaging-skill-split.test.ts +138 -0
  135. package/src/__tests__/migration-cross-version-compatibility.test.ts +0 -1
  136. package/src/__tests__/migration-export-http.test.ts +2 -3
  137. package/src/__tests__/migration-import-commit-http.test.ts +1 -2
  138. package/src/__tests__/migration-import-preflight-http.test.ts +1 -2
  139. package/src/__tests__/migration-validate-http.test.ts +1 -2
  140. package/src/__tests__/native-web-search.test.ts +475 -0
  141. package/src/__tests__/navigate-settings-tab.test.ts +84 -0
  142. package/src/__tests__/non-member-access-request.test.ts +0 -1
  143. package/src/__tests__/notification-broadcaster.test.ts +15 -15
  144. package/src/__tests__/notification-decision-strategy.test.ts +6 -6
  145. package/src/__tests__/notification-deep-link.test.ts +7 -7
  146. package/src/__tests__/notification-guardian-path.test.ts +2 -3
  147. package/src/__tests__/notification-telegram-adapter.test.ts +1 -1
  148. package/src/__tests__/notification-thread-candidates.test.ts +4 -4
  149. package/src/__tests__/onboarding-starter-tasks.test.ts +0 -1
  150. package/src/__tests__/onboarding-template-contract.test.ts +0 -10
  151. package/src/__tests__/playbook-execution.test.ts +0 -1
  152. package/src/__tests__/playbook-tools.test.ts +0 -1
  153. package/src/__tests__/profile-compiler.test.ts +0 -1
  154. package/src/__tests__/provider-fail-open-selection.test.ts +12 -2
  155. package/src/__tests__/provider-managed-proxy-integration.test.ts +25 -0
  156. package/src/__tests__/qdrant-collection-migration.test.ts +223 -0
  157. package/src/__tests__/recording-handler.test.ts +30 -94
  158. package/src/__tests__/registry.test.ts +28 -35
  159. package/src/__tests__/relay-server.test.ts +0 -1
  160. package/src/__tests__/ride-shotgun-handler.test.ts +4 -20
  161. package/src/__tests__/runtime-attachment-metadata.test.ts +0 -1
  162. package/src/__tests__/runtime-events-sse-parity.test.ts +3 -4
  163. package/src/__tests__/runtime-events-sse.test.ts +0 -1
  164. package/src/__tests__/sandbox-diagnostics.test.ts +0 -1
  165. package/src/__tests__/scaffold-managed-skill-tool.test.ts +30 -28
  166. package/src/__tests__/schedule-store.test.ts +441 -1
  167. package/src/__tests__/schedule-tools.test.ts +468 -7
  168. package/src/__tests__/scheduler-recurrence.test.ts +196 -23
  169. package/src/__tests__/scoped-approval-grants.test.ts +0 -1
  170. package/src/__tests__/scoped-grant-security-matrix.test.ts +0 -1
  171. package/src/__tests__/secret-prompt-log-hygiene.test.ts +6 -3
  172. package/src/__tests__/secret-response-routing.test.ts +4 -1
  173. package/src/__tests__/send-endpoint-busy.test.ts +14 -5
  174. package/src/__tests__/send-notification-tool.test.ts +0 -7
  175. package/src/__tests__/sequence-store.test.ts +0 -1
  176. package/src/__tests__/server-history-render.test.ts +1 -2
  177. package/src/__tests__/session-abort-tool-results.test.ts +0 -1
  178. package/src/__tests__/session-agent-loop.test.ts +46 -6
  179. package/src/__tests__/session-confirmation-signals.test.ts +7 -46
  180. package/src/__tests__/session-conflict-gate.test.ts +2 -6
  181. package/src/__tests__/session-error.test.ts +5 -14
  182. package/src/__tests__/session-init.benchmark.test.ts +3 -5
  183. package/src/__tests__/session-load-history-repair.test.ts +0 -1
  184. package/src/__tests__/session-media-retry.test.ts +12 -74
  185. package/src/__tests__/session-pre-run-repair.test.ts +0 -1
  186. package/src/__tests__/session-profile-injection.test.ts +2 -6
  187. package/src/__tests__/session-provider-retry-repair.test.ts +2 -6
  188. package/src/__tests__/session-queue.test.ts +94 -139
  189. package/src/__tests__/session-skill-tools.test.ts +115 -115
  190. package/src/__tests__/session-slash-known.test.ts +0 -1
  191. package/src/__tests__/session-slash-queue.test.ts +0 -1
  192. package/src/__tests__/session-slash-unknown.test.ts +0 -1
  193. package/src/__tests__/session-surfaces-task-progress.test.ts +34 -0
  194. package/src/__tests__/session-usage.test.ts +0 -1
  195. package/src/__tests__/session-workspace-cache-state.test.ts +2 -6
  196. package/src/__tests__/session-workspace-injection.test.ts +2 -6
  197. package/src/__tests__/session-workspace-tool-tracking.test.ts +2 -6
  198. package/src/__tests__/skill-feature-flags-integration.test.ts +180 -184
  199. package/src/__tests__/skill-feature-flags.test.ts +125 -18
  200. package/src/__tests__/skill-load-feature-flag.test.ts +1 -2
  201. package/src/__tests__/skill-load-tool.test.ts +194 -2
  202. package/src/__tests__/skill-projection-feature-flag.test.ts +27 -16
  203. package/src/__tests__/skill-projection.benchmark.test.ts +15 -14
  204. package/src/__tests__/skills.test.ts +14 -53
  205. package/src/__tests__/slack-channel-config.test.ts +0 -1
  206. package/src/__tests__/slack-inbound-verification.test.ts +0 -1
  207. package/src/__tests__/slack-skill.test.ts +1 -1
  208. package/src/__tests__/starter-task-flow.test.ts +9 -19
  209. package/src/__tests__/subagent-tools.test.ts +2 -2
  210. package/src/__tests__/system-prompt.test.ts +7 -7
  211. package/src/__tests__/task-compiler.test.ts +0 -1
  212. package/src/__tests__/task-management-tools.test.ts +0 -1
  213. package/src/__tests__/task-memory-cleanup.test.ts +0 -1
  214. package/src/__tests__/task-runner.test.ts +0 -1
  215. package/src/__tests__/task-scheduler.test.ts +0 -1
  216. package/src/__tests__/terminal-tools.test.ts +0 -1
  217. package/src/__tests__/test-support/computer-use-skill-harness.ts +2 -4
  218. package/src/__tests__/thread-seed-composer.test.ts +5 -5
  219. package/src/__tests__/tool-approval-handler.test.ts +0 -1
  220. package/src/__tests__/tool-execution-abort-cleanup.test.ts +0 -1
  221. package/src/__tests__/tool-execution-pipeline.benchmark.test.ts +0 -1
  222. package/src/__tests__/tool-executor.test.ts +8 -86
  223. package/src/__tests__/tool-grant-request-escalation.test.ts +0 -1
  224. package/src/__tests__/tool-notification-listener.test.ts +1 -1
  225. package/src/__tests__/tool-preview-lifecycle.test.ts +416 -0
  226. package/src/__tests__/trust-store.test.ts +84 -8
  227. package/src/__tests__/trusted-contact-approval-notifier.test.ts +0 -1
  228. package/src/__tests__/trusted-contact-inline-approval-integration.test.ts +0 -1
  229. package/src/__tests__/trusted-contact-lifecycle-notifications.test.ts +0 -1
  230. package/src/__tests__/trusted-contact-multichannel.test.ts +0 -1
  231. package/src/__tests__/trusted-contact-verification.test.ts +0 -1
  232. package/src/__tests__/twilio-provider.test.ts +0 -1
  233. package/src/__tests__/twilio-routes.test.ts +0 -1
  234. package/src/__tests__/{request-file-tool.test.ts → ui-file-upload-surface.test.ts} +11 -72
  235. package/src/__tests__/update-bulletin.test.ts +0 -1
  236. package/src/__tests__/usage-cache-backfill-migration.test.ts +0 -1
  237. package/src/__tests__/usage-routes.test.ts +0 -1
  238. package/src/__tests__/verification-control-plane-policy.test.ts +4 -4
  239. package/src/__tests__/voice-invite-redemption.test.ts +0 -1
  240. package/src/__tests__/voice-scoped-grant-consumer.test.ts +0 -1
  241. package/src/__tests__/voice-session-bridge.test.ts +9 -1
  242. package/src/__tests__/web-fetch.test.ts +57 -0
  243. package/src/__tests__/workspace-git-service.test.ts +5 -14
  244. package/src/__tests__/workspace-policy.test.ts +0 -1
  245. package/src/agent/loop.ts +22 -34
  246. package/src/bundler/bundle-signer.ts +4 -4
  247. package/src/calls/call-controller.ts +1 -1
  248. package/src/calls/relay-server.ts +1 -1
  249. package/src/calls/twilio-rest.ts +1 -1
  250. package/src/calls/voice-session-bridge.ts +3 -1
  251. package/src/cli/__tests__/notifications.test.ts +3 -4
  252. package/src/cli/commands/map.ts +2 -6
  253. package/src/cli/commands/mcp.ts +73 -15
  254. package/src/cli/commands/notifications.ts +4 -4
  255. package/src/cli/commands/sessions.ts +9 -1
  256. package/src/cli/commands/skills.ts +6 -10
  257. package/src/cli/http-client.ts +2 -3
  258. package/src/cli/main-screen.tsx +10 -10
  259. package/src/cli/program.ts +0 -4
  260. package/src/cli/reference.ts +0 -2
  261. package/src/cli.ts +15 -9
  262. package/src/config/__tests__/bundled-tool-registry-guard.test.ts +120 -0
  263. package/src/config/bundled-skills/_shared/CLI_RETRIEVAL_PATTERN.md +11 -0
  264. package/src/config/bundled-skills/app-builder/SKILL.md +6 -7
  265. package/src/config/bundled-skills/app-builder/TOOLS.json +0 -4
  266. package/src/config/bundled-skills/browser/SKILL.md +6 -1
  267. package/src/config/bundled-skills/chatgpt-import/SKILL.md +5 -1
  268. package/src/config/bundled-skills/claude-code/SKILL.md +5 -1
  269. package/src/config/bundled-skills/computer-use/SKILL.md +6 -1
  270. package/src/config/bundled-skills/computer-use/TOOLS.json +6 -69
  271. package/src/config/bundled-skills/computer-use/tools/computer-use-click.ts +10 -1
  272. package/src/config/bundled-skills/contacts/SKILL.md +10 -1
  273. package/src/config/bundled-skills/contacts/TOOLS.json +35 -0
  274. package/src/config/bundled-skills/{messaging → contacts}/tools/google-contacts.ts +9 -2
  275. package/src/config/bundled-skills/document/SKILL.md +4 -1
  276. package/src/config/bundled-skills/doordash/SKILL.md +8 -2
  277. package/src/config/bundled-skills/doordash/__tests__/doordash-session.test.ts +1 -82
  278. package/src/config/bundled-skills/doordash/doordash-cli.ts +17 -28
  279. package/src/config/bundled-skills/doordash/lib/session.ts +21 -17
  280. package/src/config/bundled-skills/doordash/lib/shared/platform.ts +4 -1
  281. package/src/config/bundled-skills/followups/SKILL.md +4 -1
  282. package/src/config/bundled-skills/gmail/SKILL.md +180 -0
  283. package/src/config/bundled-skills/gmail/TOOLS.json +506 -0
  284. package/src/config/bundled-skills/gmail/tools/gmail-archive.ts +149 -0
  285. package/src/config/bundled-skills/gmail/tools/gmail-attachments.ts +110 -0
  286. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-draft.ts +1 -1
  287. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-filters.ts +1 -1
  288. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-follow-up.ts +1 -1
  289. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-forward.ts +1 -1
  290. package/src/config/bundled-skills/gmail/tools/gmail-label.ts +50 -0
  291. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-outreach-scan.ts +8 -90
  292. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-send-draft.ts +1 -1
  293. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-sender-digest.ts +2 -2
  294. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-trash.ts +1 -1
  295. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-unsubscribe.ts +1 -1
  296. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-vacation.ts +1 -1
  297. package/src/config/bundled-skills/gmail/tools/shared.ts +47 -0
  298. package/src/config/bundled-skills/google-calendar/SKILL.md +5 -1
  299. package/src/config/bundled-skills/image-studio/SKILL.md +5 -1
  300. package/src/config/bundled-skills/knowledge-graph/SKILL.md +4 -1
  301. package/src/config/bundled-skills/media-processing/SKILL.md +7 -13
  302. package/src/config/bundled-skills/media-processing/TOOLS.json +0 -22
  303. package/src/config/bundled-skills/media-processing/tools/generate-clip.ts +12 -1
  304. package/src/config/bundled-skills/messaging/SKILL.md +23 -139
  305. package/src/config/bundled-skills/messaging/TOOLS.json +33 -1215
  306. package/src/config/bundled-skills/messaging/tools/gmail-mime-helpers.ts +42 -0
  307. package/src/config/bundled-skills/messaging/tools/messaging-send.ts +165 -2
  308. package/src/config/bundled-skills/messaging/tools/messaging-sender-digest.ts +1 -13
  309. package/src/config/bundled-skills/messaging/tools/shared.ts +81 -34
  310. package/src/config/bundled-skills/notifications/SKILL.md +5 -1
  311. package/src/config/bundled-skills/orchestration/SKILL.md +30 -0
  312. package/src/config/bundled-skills/orchestration/TOOLS.json +35 -0
  313. package/src/config/bundled-skills/{reminder/tools/reminder-cancel.ts → orchestration/tools/swarm-delegate.ts} +3 -3
  314. package/src/config/bundled-skills/phone-calls/SKILL.md +9 -1
  315. package/src/config/bundled-skills/playbooks/SKILL.md +4 -1
  316. package/src/config/bundled-skills/schedule/SKILL.md +70 -9
  317. package/src/config/bundled-skills/schedule/TOOLS.json +38 -6
  318. package/src/config/bundled-skills/screen-watch/SKILL.md +28 -0
  319. package/src/config/bundled-skills/screen-watch/TOOLS.json +35 -0
  320. package/src/config/bundled-skills/{reminder/tools/reminder-create.ts → screen-watch/tools/start-screen-watch.ts} +3 -3
  321. package/src/config/bundled-skills/sequences/SKILL.md +47 -0
  322. package/src/config/bundled-skills/sequences/TOOLS.json +340 -0
  323. package/src/config/bundled-skills/sequences/tools/sequence-update.ts +128 -0
  324. package/src/config/bundled-skills/sequences/tools/shared.ts +9 -0
  325. package/src/config/bundled-skills/settings/SKILL.md +12 -0
  326. package/src/config/bundled-skills/settings/TOOLS.json +112 -0
  327. package/src/config/bundled-skills/settings/tools/navigate-settings-tab.ts +43 -0
  328. package/src/config/bundled-skills/settings/tools/open-system-settings.ts +52 -0
  329. package/src/config/bundled-skills/{computer-use/tools/computer-use-right-click.ts → settings/tools/set-avatar.ts} +2 -6
  330. package/src/{tools/system/voice-config.ts → config/bundled-skills/settings/tools/voice-config-update.ts} +59 -96
  331. package/src/config/bundled-skills/skill-management/SKILL.md +18 -0
  332. package/src/config/bundled-skills/skill-management/TOOLS.json +90 -0
  333. package/src/config/bundled-skills/{computer-use/tools/computer-use-double-click.ts → skill-management/tools/delete-managed.ts} +2 -6
  334. package/src/config/bundled-skills/skill-management/tools/scaffold-managed.ts +12 -0
  335. package/src/config/bundled-skills/slack/SKILL.md +5 -1
  336. package/src/config/bundled-skills/subagent/SKILL.md +4 -1
  337. package/src/config/bundled-skills/tasks/SKILL.md +5 -2
  338. package/src/config/bundled-skills/transcribe/SKILL.md +4 -1
  339. package/src/config/bundled-skills/watcher/SKILL.md +4 -1
  340. package/src/config/bundled-tool-registry.ts +118 -107
  341. package/src/config/env.ts +5 -2
  342. package/src/config/feature-flag-registry.json +33 -9
  343. package/src/config/loader.ts +10 -2
  344. package/src/config/schema.ts +19 -16
  345. package/src/config/schemas/inference.ts +12 -22
  346. package/src/config/schemas/memory-storage.ts +19 -1
  347. package/src/config/schemas/platform.ts +0 -16
  348. package/src/config/skill-state.ts +11 -8
  349. package/src/config/skills.ts +83 -32
  350. package/src/context/token-estimator.ts +11 -0
  351. package/src/context/window-manager.ts +180 -151
  352. package/src/daemon/computer-use-session.ts +11 -43
  353. package/src/daemon/daemon-control.ts +4 -1
  354. package/src/daemon/handlers/config-channels.ts +5 -9
  355. package/src/daemon/handlers/config-ingress.ts +0 -4
  356. package/src/daemon/handlers/config-model.ts +7 -13
  357. package/src/daemon/handlers/config-telegram.ts +4 -8
  358. package/src/daemon/handlers/config-voice.ts +2 -5
  359. package/src/daemon/handlers/dictation.ts +2 -12
  360. package/src/daemon/handlers/identity.ts +0 -105
  361. package/src/daemon/handlers/recording.ts +3 -23
  362. package/src/daemon/handlers/session-history.ts +42 -10
  363. package/src/daemon/handlers/sessions.ts +53 -72
  364. package/src/daemon/handlers/shared.ts +7 -28
  365. package/src/daemon/handlers/skills.ts +31 -27
  366. package/src/daemon/host-bash-proxy.ts +148 -0
  367. package/src/daemon/host-file-proxy.ts +135 -0
  368. package/src/daemon/lifecycle.ts +53 -41
  369. package/src/daemon/mcp-reload-service.ts +123 -0
  370. package/src/daemon/message-protocol.ts +6 -0
  371. package/src/daemon/message-types/apps.ts +0 -25
  372. package/src/daemon/message-types/browser.ts +1 -1
  373. package/src/daemon/message-types/computer-use.ts +1 -4
  374. package/src/daemon/message-types/guardian-actions.ts +1 -1
  375. package/src/daemon/message-types/host-bash.ts +18 -0
  376. package/src/daemon/message-types/host-file.ts +44 -0
  377. package/src/daemon/message-types/integrations.ts +1 -73
  378. package/src/daemon/message-types/messages.ts +15 -0
  379. package/src/daemon/message-types/schedules.ts +11 -27
  380. package/src/daemon/message-types/sessions.ts +8 -2
  381. package/src/daemon/message-types/settings.ts +1 -1
  382. package/src/daemon/message-types/shared.ts +1 -1
  383. package/src/daemon/message-types/surfaces.ts +2 -0
  384. package/src/daemon/ride-shotgun-handler.ts +35 -43
  385. package/src/daemon/seed-files.ts +3 -27
  386. package/src/daemon/server.ts +45 -28
  387. package/src/daemon/session-agent-loop-handlers.ts +72 -9
  388. package/src/daemon/session-agent-loop.ts +97 -66
  389. package/src/daemon/session-attachments.ts +1 -1
  390. package/src/daemon/session-error.ts +17 -16
  391. package/src/daemon/session-lifecycle.ts +20 -1
  392. package/src/daemon/session-media-retry.ts +1 -15
  393. package/src/daemon/session-messaging.ts +14 -6
  394. package/src/daemon/session-process.ts +36 -7
  395. package/src/daemon/session-queue-manager.ts +62 -103
  396. package/src/daemon/session-runtime-assembly.ts +27 -7
  397. package/src/daemon/session-skill-tools.ts +12 -11
  398. package/src/daemon/session-slash.ts +7 -0
  399. package/src/daemon/session-surfaces.ts +192 -118
  400. package/src/daemon/session-tool-setup.ts +146 -6
  401. package/src/daemon/session.ts +75 -37
  402. package/src/errors.ts +0 -2
  403. package/src/export/formatter.ts +6 -0
  404. package/src/mcp/mcp-oauth-provider.ts +1 -3
  405. package/src/media/avatar-router.ts +20 -28
  406. package/src/media/avatar-types.ts +7 -14
  407. package/src/media/managed-avatar-client.ts +70 -34
  408. package/src/memory/app-store.ts +0 -18
  409. package/src/memory/conversation-title-service.ts +1 -2
  410. package/src/memory/db-init.ts +16 -0
  411. package/src/memory/embedding-backend.ts +129 -27
  412. package/src/memory/embedding-gemini.test.ts +256 -0
  413. package/src/memory/embedding-gemini.ts +47 -13
  414. package/src/memory/embedding-local.ts +14 -2
  415. package/src/memory/embedding-ollama.ts +15 -2
  416. package/src/memory/embedding-openai.ts +15 -2
  417. package/src/memory/embedding-types.test.ts +116 -0
  418. package/src/memory/embedding-types.ts +61 -0
  419. package/src/memory/fingerprint.ts +1 -1
  420. package/src/memory/indexer.ts +25 -1
  421. package/src/memory/job-handlers/embedding.test.ts +258 -0
  422. package/src/memory/job-handlers/embedding.ts +81 -1
  423. package/src/memory/job-handlers/index-maintenance.ts +35 -1
  424. package/src/memory/job-handlers/media-processing.ts +11 -1
  425. package/src/memory/job-utils.ts +21 -6
  426. package/src/memory/jobs-store.ts +5 -1
  427. package/src/memory/jobs-worker.ts +8 -0
  428. package/src/memory/message-content.ts +66 -0
  429. package/src/memory/migrations/100-core-tables.ts +1 -31
  430. package/src/memory/migrations/104-core-indexes.ts +0 -11
  431. package/src/memory/migrations/145-drop-accounts-table.ts +19 -0
  432. package/src/memory/migrations/146-schedule-oneshot-routing.ts +94 -0
  433. package/src/memory/migrations/147-migrate-reminders-to-schedules.ts +129 -0
  434. package/src/memory/migrations/148-drop-reminders-table.ts +18 -0
  435. package/src/memory/migrations/index.ts +4 -0
  436. package/src/memory/migrations/registry.ts +19 -0
  437. package/src/memory/qdrant-client.ts +158 -43
  438. package/src/memory/retriever.test.ts +0 -1
  439. package/src/memory/retriever.ts +12 -2
  440. package/src/memory/schema/infrastructure.ts +5 -37
  441. package/src/memory/search/formatting.ts +34 -9
  442. package/src/memory/search/semantic.ts +57 -2
  443. package/src/memory/search/types.ts +2 -1
  444. package/src/notifications/AGENTS.md +2 -2
  445. package/src/notifications/README.md +59 -58
  446. package/src/notifications/adapters/macos.ts +1 -1
  447. package/src/notifications/broadcaster.ts +5 -5
  448. package/src/notifications/copy-composer.ts +1 -1
  449. package/src/notifications/decision-engine.ts +2 -2
  450. package/src/notifications/destination-resolver.ts +2 -2
  451. package/src/notifications/emit-signal.ts +8 -8
  452. package/src/notifications/signal.ts +1 -1
  453. package/src/notifications/thread-seed-composer.ts +1 -1
  454. package/src/oauth/connect-orchestrator.ts +1 -1
  455. package/src/oauth/token-persistence.ts +1 -1
  456. package/src/permissions/checker.ts +12 -1
  457. package/src/permissions/defaults.ts +13 -17
  458. package/src/permissions/trust-store.ts +37 -0
  459. package/src/permissions/workspace-policy.ts +0 -1
  460. package/src/prompts/__tests__/build-cli-reference-section.test.ts +11 -0
  461. package/src/prompts/computer-use-prompt.ts +1 -1
  462. package/src/prompts/system-prompt.ts +33 -35
  463. package/src/prompts/templates/BOOTSTRAP.md +0 -3
  464. package/src/prompts/templates/SOUL.md +1 -2
  465. package/src/prompts/templates/UPDATES.md +16 -7
  466. package/src/providers/anthropic/client.ts +87 -33
  467. package/src/providers/gemini/client.ts +6 -0
  468. package/src/providers/managed-proxy/constants.ts +5 -0
  469. package/src/providers/openai/client.ts +15 -0
  470. package/src/providers/registry.ts +4 -6
  471. package/src/providers/types.ts +24 -2
  472. package/src/runtime/AGENTS.md +18 -0
  473. package/src/runtime/assistant-event-hub.ts +2 -3
  474. package/src/runtime/assistant-event.ts +4 -4
  475. package/src/runtime/auth/__tests__/context.test.ts +5 -5
  476. package/src/runtime/auth/__tests__/credential-service.test.ts +0 -1
  477. package/src/runtime/auth/__tests__/guard-tests.test.ts +3 -2
  478. package/src/runtime/auth/__tests__/{ipc-auth-context.test.ts → local-auth-context.test.ts} +21 -21
  479. package/src/runtime/auth/__tests__/route-policy.test.ts +2 -2
  480. package/src/runtime/auth/__tests__/scopes.test.ts +9 -8
  481. package/src/runtime/auth/__tests__/subject.test.ts +8 -8
  482. package/src/runtime/auth/__tests__/token-service.test.ts +0 -1
  483. package/src/runtime/auth/route-policy.ts +8 -8
  484. package/src/runtime/auth/scopes.ts +2 -1
  485. package/src/runtime/auth/subject.ts +4 -4
  486. package/src/runtime/auth/token-service.ts +1 -24
  487. package/src/runtime/auth/types.ts +3 -3
  488. package/src/runtime/guardian-action-followup-executor.ts +1 -1
  489. package/src/runtime/guardian-action-grant-minter.ts +1 -1
  490. package/src/runtime/guardian-action-service.ts +3 -3
  491. package/src/runtime/http-server.ts +15 -2
  492. package/src/runtime/http-types.ts +10 -0
  493. package/src/runtime/invite-service.ts +3 -3
  494. package/src/runtime/local-actor-identity.ts +17 -22
  495. package/src/runtime/middleware/error-handler.ts +14 -1
  496. package/src/runtime/pending-interactions.ts +21 -9
  497. package/src/runtime/routes/app-management-routes.ts +63 -67
  498. package/src/runtime/routes/approval-routes.ts +1 -3
  499. package/src/runtime/routes/brain-graph/brain-graph.html +1845 -0
  500. package/src/runtime/routes/brain-graph-routes.ts +4 -42
  501. package/src/runtime/routes/btw-routes.ts +155 -0
  502. package/src/runtime/routes/computer-use-routes.ts +77 -31
  503. package/src/runtime/routes/conversation-routes.ts +234 -47
  504. package/src/runtime/routes/diagnostics-routes.ts +154 -43
  505. package/src/runtime/routes/documents-routes.ts +2 -2
  506. package/src/runtime/routes/global-search-routes.ts +1 -1
  507. package/src/runtime/routes/host-bash-routes.ts +83 -0
  508. package/src/runtime/routes/host-file-routes.ts +79 -0
  509. package/src/runtime/routes/integrations/slack/share.ts +1 -1
  510. package/src/runtime/routes/log-export-routes.ts +120 -0
  511. package/src/runtime/routes/mcp-routes.ts +20 -0
  512. package/src/runtime/routes/migration-routes.ts +3 -3
  513. package/src/runtime/routes/pairing-routes.ts +1 -1
  514. package/src/runtime/routes/recording-routes.ts +6 -4
  515. package/src/runtime/routes/schedule-routes.ts +31 -5
  516. package/src/runtime/routes/session-management-routes.ts +2 -6
  517. package/src/runtime/routes/session-query-routes.ts +18 -15
  518. package/src/runtime/routes/settings-routes.ts +7 -351
  519. package/src/runtime/routes/skills-routes.ts +7 -6
  520. package/src/runtime/routes/subagents-routes.ts +4 -10
  521. package/src/runtime/routes/surface-action-routes.ts +3 -14
  522. package/src/runtime/routes/surface-content-routes.ts +22 -5
  523. package/src/runtime/routes/work-items-routes.ts +21 -25
  524. package/src/runtime/routes/workspace-routes.test.ts +3 -3
  525. package/src/runtime/routes/workspace-utils.ts +1 -1
  526. package/src/runtime/telegram-streaming-delivery.ts +3 -0
  527. package/src/runtime/verification-outbound-actions.ts +2 -2
  528. package/src/schedule/integration-status.ts +0 -6
  529. package/src/schedule/schedule-store.ts +234 -43
  530. package/src/schedule/scheduler.ts +73 -74
  531. package/src/security/oauth2.ts +1 -1
  532. package/src/sequence/store.ts +12 -2
  533. package/src/skills/frontmatter.ts +19 -77
  534. package/src/skills/managed-store.ts +11 -2
  535. package/src/subagent/manager.ts +5 -3
  536. package/src/tasks/ephemeral-permissions.ts +3 -5
  537. package/src/tools/AGENTS.md +37 -0
  538. package/src/tools/apps/executors.ts +0 -6
  539. package/src/tools/browser/browser-manager.ts +17 -11
  540. package/src/tools/browser/jit-auth.ts +4 -1
  541. package/src/tools/claude-code/claude-code.ts +1 -1
  542. package/src/tools/computer-use/definitions.ts +48 -60
  543. package/src/tools/document/document-tool.ts +6 -6
  544. package/src/tools/document/editor-template.ts +10 -8
  545. package/src/tools/filesystem/edit.ts +2 -1
  546. package/src/tools/filesystem/read.ts +20 -2
  547. package/src/tools/filesystem/write.ts +2 -1
  548. package/src/tools/host-filesystem/edit.ts +17 -1
  549. package/src/tools/host-filesystem/read.ts +16 -1
  550. package/src/tools/host-filesystem/write.ts +15 -1
  551. package/src/tools/host-terminal/host-shell.ts +24 -0
  552. package/src/tools/memory/definitions.ts +45 -81
  553. package/src/tools/memory/handlers.test.ts +0 -1
  554. package/src/tools/memory/handlers.ts +1 -1
  555. package/src/tools/memory/register.ts +26 -60
  556. package/src/tools/network/script-proxy/session-manager.ts +6 -8
  557. package/src/tools/network/web-fetch.ts +7 -1
  558. package/src/tools/network/web-search.ts +2 -1
  559. package/src/tools/registry.ts +23 -0
  560. package/src/tools/schedule/create.ts +113 -5
  561. package/src/tools/schedule/list.ts +57 -15
  562. package/src/tools/schedule/update.ts +73 -3
  563. package/src/tools/shared/filesystem/image-read.ts +192 -0
  564. package/src/tools/side-effects.ts +1 -7
  565. package/src/tools/skills/delete-managed.ts +27 -64
  566. package/src/tools/skills/execute.ts +54 -0
  567. package/src/tools/skills/load.ts +127 -5
  568. package/src/tools/skills/scaffold-managed.ts +93 -172
  569. package/src/tools/subagent/message.ts +0 -7
  570. package/src/tools/subagent/spawn.ts +1 -1
  571. package/src/tools/swarm/delegate.ts +0 -3
  572. package/src/tools/system/avatar-generator.ts +13 -19
  573. package/src/tools/system/request-permission.ts +2 -1
  574. package/src/tools/terminal/safe-env.ts +1 -0
  575. package/src/tools/tool-manifest.ts +41 -47
  576. package/src/tools/types.ts +6 -2
  577. package/src/tools/ui-surface/definitions.ts +0 -55
  578. package/src/util/errors.ts +12 -10
  579. package/src/workspace/git-service.ts +0 -2
  580. package/src/__tests__/account-registry.test.ts +0 -258
  581. package/src/__tests__/email-classifier.test.ts +0 -25
  582. package/src/__tests__/gmail-integration.test.ts +0 -97
  583. package/src/__tests__/handle-user-message-secret-resume.test.ts +0 -172
  584. package/src/__tests__/home-base-bootstrap.test.ts +0 -84
  585. package/src/__tests__/managed-twitter-guardrails.test.ts +0 -353
  586. package/src/__tests__/prebuilt-home-base-seed.test.ts +0 -79
  587. package/src/__tests__/recording-intent-fallback.test.ts +0 -199
  588. package/src/__tests__/recording-intent.test.ts +0 -985
  589. package/src/__tests__/recording-state-machine.test.ts +0 -1574
  590. package/src/__tests__/reminder-store.test.ts +0 -350
  591. package/src/__tests__/reminder.test.ts +0 -337
  592. package/src/__tests__/scan-result-store.test.ts +0 -121
  593. package/src/__tests__/twitter-platform-proxy-client.test.ts +0 -450
  594. package/src/__tests__/view-image-tool.test.ts +0 -241
  595. package/src/cli/commands/amazon/cart.ts +0 -513
  596. package/src/cli/commands/amazon/checkout.ts +0 -394
  597. package/src/cli/commands/amazon/client.ts +0 -513
  598. package/src/cli/commands/amazon/index.ts +0 -920
  599. package/src/cli/commands/amazon/product-details.ts +0 -145
  600. package/src/cli/commands/amazon/request-extractor.ts +0 -187
  601. package/src/cli/commands/amazon/search.ts +0 -76
  602. package/src/cli/commands/amazon/session.ts +0 -116
  603. package/src/cli/commands/twitter/__tests__/cli-error-shaping.test.ts +0 -265
  604. package/src/cli/commands/twitter/__tests__/cli-read-routing.test.ts +0 -483
  605. package/src/cli/commands/twitter/__tests__/cli-routing.test.ts +0 -412
  606. package/src/cli/commands/twitter/__tests__/oauth-client.test.ts +0 -197
  607. package/src/cli/commands/twitter/client.ts +0 -989
  608. package/src/cli/commands/twitter/index.ts +0 -1160
  609. package/src/cli/commands/twitter/oauth-client.ts +0 -94
  610. package/src/cli/commands/twitter/router.ts +0 -396
  611. package/src/cli/commands/twitter/session.ts +0 -121
  612. package/src/config/bundled-skills/agentmail/SKILL.md +0 -132
  613. package/src/config/bundled-skills/agentmail/icon.svg +0 -21
  614. package/src/config/bundled-skills/amazon/SKILL.md +0 -137
  615. package/src/config/bundled-skills/amazon/icon.svg +0 -13
  616. package/src/config/bundled-skills/api-mapping/SKILL.md +0 -78
  617. package/src/config/bundled-skills/api-mapping/icon.svg +0 -18
  618. package/src/config/bundled-skills/cli-discover/SKILL.md +0 -68
  619. package/src/config/bundled-skills/deploy-fullstack-vercel/SKILL.md +0 -179
  620. package/src/config/bundled-skills/document-writer/SKILL.md +0 -195
  621. package/src/config/bundled-skills/elevenlabs-voice/SKILL.md +0 -140
  622. package/src/config/bundled-skills/email-setup/SKILL.md +0 -68
  623. package/src/config/bundled-skills/frontend-design/SKILL.md +0 -44
  624. package/src/config/bundled-skills/frontend-design/icon.svg +0 -16
  625. package/src/config/bundled-skills/google-oauth-setup/SKILL.md +0 -452
  626. package/src/config/bundled-skills/guardian-verify-setup/SKILL.md +0 -203
  627. package/src/config/bundled-skills/influencer/SKILL.md +0 -144
  628. package/src/config/bundled-skills/influencer/scripts/client.ts +0 -1269
  629. package/src/config/bundled-skills/influencer/scripts/influencer.ts +0 -267
  630. package/src/config/bundled-skills/macos-automation/SKILL.md +0 -65
  631. package/src/config/bundled-skills/macos-automation/icon.svg +0 -12
  632. package/src/config/bundled-skills/mcp-setup/SKILL.md +0 -75
  633. package/src/config/bundled-skills/media-processing/tools/media-diagnostics.ts +0 -184
  634. package/src/config/bundled-skills/messaging/tools/gmail-archive-by-query.ts +0 -80
  635. package/src/config/bundled-skills/messaging/tools/gmail-archive.ts +0 -29
  636. package/src/config/bundled-skills/messaging/tools/gmail-batch-archive.ts +0 -56
  637. package/src/config/bundled-skills/messaging/tools/gmail-batch-label.ts +0 -34
  638. package/src/config/bundled-skills/messaging/tools/gmail-download-attachment.ts +0 -47
  639. package/src/config/bundled-skills/messaging/tools/gmail-label.ts +0 -31
  640. package/src/config/bundled-skills/messaging/tools/gmail-list-attachments.ts +0 -67
  641. package/src/config/bundled-skills/messaging/tools/gmail-send-with-attachments.ts +0 -97
  642. package/src/config/bundled-skills/messaging/tools/gmail-summarize-thread.ts +0 -87
  643. package/src/config/bundled-skills/messaging/tools/gmail-triage.ts +0 -135
  644. package/src/config/bundled-skills/messaging/tools/messaging-analyze-activity.ts +0 -24
  645. package/src/config/bundled-skills/messaging/tools/messaging-reply.ts +0 -201
  646. package/src/config/bundled-skills/messaging/tools/send-notification.ts +0 -1
  647. package/src/config/bundled-skills/messaging/tools/sequence-cancel.ts +0 -27
  648. package/src/config/bundled-skills/messaging/tools/sequence-pause.ts +0 -48
  649. package/src/config/bundled-skills/messaging/tools/sequence-resume.ts +0 -27
  650. package/src/config/bundled-skills/messaging/tools/sequence-update.ts +0 -56
  651. package/src/config/bundled-skills/notion/SKILL.md +0 -240
  652. package/src/config/bundled-skills/notion-oauth-setup/SKILL.md +0 -126
  653. package/src/config/bundled-skills/oauth-setup/SKILL.md +0 -143
  654. package/src/config/bundled-skills/public-ingress/SKILL.md +0 -258
  655. package/src/config/bundled-skills/reminder/SKILL.md +0 -79
  656. package/src/config/bundled-skills/reminder/TOOLS.json +0 -89
  657. package/src/config/bundled-skills/reminder/tools/reminder-list.ts +0 -12
  658. package/src/config/bundled-skills/restaurant-reservation/SKILL.md +0 -141
  659. package/src/config/bundled-skills/screen-recording/SKILL.md +0 -148
  660. package/src/config/bundled-skills/self-upgrade/SKILL.md +0 -69
  661. package/src/config/bundled-skills/skills-catalog/SKILL.md +0 -78
  662. package/src/config/bundled-skills/slack-app-setup/SKILL.md +0 -178
  663. package/src/config/bundled-skills/slack-digest-setup/SKILL.md +0 -163
  664. package/src/config/bundled-skills/slack-oauth-setup/SKILL.md +0 -157
  665. package/src/config/bundled-skills/start-the-day/SKILL.md +0 -70
  666. package/src/config/bundled-skills/start-the-day/icon.svg +0 -13
  667. package/src/config/bundled-skills/telegram-setup/SKILL.md +0 -105
  668. package/src/config/bundled-skills/time-based-actions/SKILL.md +0 -142
  669. package/src/config/bundled-skills/twilio-setup/SKILL.md +0 -232
  670. package/src/config/bundled-skills/twitter/SKILL.md +0 -319
  671. package/src/config/bundled-skills/twitter/icon.svg +0 -14
  672. package/src/config/bundled-skills/typescript-eval/SKILL.md +0 -60
  673. package/src/config/bundled-skills/vercel-token-setup/SKILL.md +0 -214
  674. package/src/config/bundled-skills/voice-setup/SKILL.md +0 -131
  675. package/src/config/bundled-skills/voice-setup/icon.svg +0 -20
  676. package/src/daemon/handlers/pairing.ts +0 -119
  677. package/src/daemon/handlers/session-user-message.ts +0 -961
  678. package/src/daemon/recording-executor.ts +0 -180
  679. package/src/daemon/recording-intent-fallback.ts +0 -162
  680. package/src/daemon/recording-intent.ts +0 -493
  681. package/src/home-base/app-link-store.ts +0 -78
  682. package/src/home-base/bootstrap.ts +0 -74
  683. package/src/home-base/prebuilt/brain-graph.html +0 -1483
  684. package/src/home-base/prebuilt/index.html +0 -702
  685. package/src/home-base/prebuilt/seed-metadata.json +0 -21
  686. package/src/home-base/prebuilt/seed.ts +0 -122
  687. package/src/home-base/prebuilt-home-base-updater.ts +0 -36
  688. package/src/memory/account-store.ts +0 -117
  689. package/src/messaging/activity-analyzer.ts +0 -76
  690. package/src/messaging/email-classifier.ts +0 -208
  691. package/src/messaging/index.ts +0 -2
  692. package/src/messaging/outreach-classifier.ts +0 -185
  693. package/src/messaging/thread-summarizer.ts +0 -346
  694. package/src/messaging/types.ts +0 -17
  695. package/src/tools/browser/x-auto-navigate.ts +0 -254
  696. package/src/tools/credentials/account-registry.ts +0 -144
  697. package/src/tools/filesystem/view-image.ts +0 -244
  698. package/src/tools/reminder/reminder-store.ts +0 -194
  699. package/src/tools/reminder/reminder.ts +0 -158
  700. package/src/tools/system/navigate-settings.ts +0 -74
  701. package/src/tools/system/open-system-settings.ts +0 -85
  702. package/src/tools/system/version.ts +0 -54
  703. package/src/twitter/platform-proxy-client.ts +0 -405
  704. package/src/util/cookie-session.ts +0 -98
  705. /package/src/config/bundled-skills/{messaging → gmail}/tools/scan-result-store.ts +0 -0
  706. /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-analytics.ts +0 -0
  707. /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-create.ts +0 -0
  708. /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-delete.ts +0 -0
  709. /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-enroll.ts +0 -0
  710. /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-enrollment-list.ts +0 -0
  711. /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-get.ts +0 -0
  712. /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-import.ts +0 -0
  713. /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-list.ts +0 -0
@@ -11,7 +11,6 @@ import type {
11
11
  import { MODEL_TO_PROVIDER } from "../session-slash.js";
12
12
  import {
13
13
  CONFIG_RELOAD_DEBOUNCE_MS,
14
- defineHandlers,
15
14
  type HandlerContext,
16
15
  log,
17
16
  } from "./shared.js";
@@ -42,10 +41,13 @@ export function getModelInfo(): ModelInfo {
42
41
 
43
42
  /**
44
43
  * Minimal interface for the side-effects needed by setModel / setImageGenModel.
45
- * Keeps the business logic decoupled from IPC-specific HandlerContext.
44
+ * Keeps the business logic decoupled from transport-specific HandlerContext.
46
45
  */
47
46
  export interface ModelSetContext {
48
- sessions: Map<string, { isProcessing(): boolean; dispose(): void; markStale(): void }>;
47
+ sessions: Map<
48
+ string,
49
+ { isProcessing(): boolean; dispose(): void; markStale(): void }
50
+ >;
49
51
  suppressConfigReload: boolean;
50
52
  setSuppressConfigReload(value: boolean): void;
51
53
  updateConfigFingerprint(): void;
@@ -128,10 +130,7 @@ export function setModel(modelId: string, ctx: ModelSetContext): ModelInfo {
128
130
  /**
129
131
  * Set the image generation model. Throws on failure.
130
132
  */
131
- export function setImageGenModel(
132
- modelId: string,
133
- ctx: ModelSetContext,
134
- ): void {
133
+ export function setImageGenModel(modelId: string, ctx: ModelSetContext): void {
135
134
  const raw = loadRawConfig();
136
135
  raw.imageGenModel = modelId;
137
136
 
@@ -156,7 +155,7 @@ export function setImageGenModel(
156
155
  }
157
156
 
158
157
  // ---------------------------------------------------------------------------
159
- // IPC handlers (delegate to shared logic)
158
+ // HTTP handlers (delegate to shared logic)
160
159
  // ---------------------------------------------------------------------------
161
160
 
162
161
  export function handleModelGet(ctx: HandlerContext): void {
@@ -195,8 +194,3 @@ export function handleImageGenModelSet(
195
194
  }
196
195
  }
197
196
 
198
- export const modelHandlers = defineHandlers({
199
- model_get: (_msg, ctx) => handleModelGet(ctx),
200
- model_set: handleModelSet,
201
- image_gen_model_set: handleImageGenModelSet,
202
- });
@@ -22,7 +22,7 @@ import type {
22
22
  TelegramConfigRequest,
23
23
  TelegramConfigResponse,
24
24
  } from "../message-protocol.js";
25
- import { defineHandlers, type HandlerContext, log } from "./shared.js";
25
+ import { type HandlerContext, log } from "./shared.js";
26
26
 
27
27
  const TELEGRAM_BOT_TOKEN_IN_URL_PATTERN =
28
28
  /\/bot\d{8,10}:[A-Za-z0-9_-]{30,120}\//g;
@@ -53,7 +53,7 @@ export function summarizeTelegramError(err: unknown): string {
53
53
  return redactTelegramBotTokens(parts.join(" "));
54
54
  }
55
55
 
56
- // -- Transport-agnostic result type (omits the IPC `type` discriminant) --
56
+ // -- Transport-agnostic result type (omits the `type` discriminant) --
57
57
 
58
58
  export type TelegramConfigResult = Omit<TelegramConfigResponse, "type">;
59
59
 
@@ -359,7 +359,7 @@ export async function setupTelegram(
359
359
  };
360
360
  }
361
361
 
362
- // -- IPC handler (thin wrapper over extracted functions) --
362
+ // -- Message handler (thin wrapper over extracted functions) --
363
363
 
364
364
  export async function handleTelegramConfig(
365
365
  msg: TelegramConfigRequest,
@@ -401,8 +401,4 @@ export async function handleTelegramConfig(
401
401
  error: message,
402
402
  });
403
403
  }
404
- }
405
-
406
- export const telegramHandlers = defineHandlers({
407
- telegram_config: handleTelegramConfig,
408
- });
404
+ }
@@ -1,5 +1,5 @@
1
1
  import type { VoiceConfigUpdateRequest } from "../message-types/settings.js";
2
- import { defineHandlers, type HandlerContext, log } from "./shared.js";
2
+ import { type HandlerContext, log } from "./shared.js";
3
3
 
4
4
  /**
5
5
  * Send a client_settings_update message to all connected clients.
@@ -194,7 +194,7 @@ export function normalizeActivationKey(
194
194
  }
195
195
 
196
196
  /**
197
- * Process a voice configuration update request from a session or IPC client.
197
+ * Process a voice configuration update request from a session or client.
198
198
  * Validates the activation key and broadcasts the change to all connected clients.
199
199
  */
200
200
  export function handleVoiceConfigUpdate(
@@ -214,6 +214,3 @@ export function handleVoiceConfigUpdate(
214
214
  );
215
215
  }
216
216
 
217
- export const voiceHandlers = defineHandlers({
218
- voice_config_update: handleVoiceConfigUpdate,
219
- });
@@ -13,7 +13,7 @@ import {
13
13
  expandSnippets,
14
14
  } from "../dictation-text-processing.js";
15
15
  import type { DictationRequest } from "../message-protocol.js";
16
- import { defineHandlers, type HandlerContext, log } from "./shared.js";
16
+ import { type HandlerContext, log } from "./shared.js";
17
17
 
18
18
  // Action verbs for fast heuristic fallback (used when LLM classifier is unavailable)
19
19
  const ACTION_VERBS = [
@@ -245,13 +245,7 @@ export async function handleDictationRequest(
245
245
  // Command mode: selected text present — deterministic, no classification needed
246
246
  if (msg.context.selectedText && msg.context.selectedText.trim().length > 0) {
247
247
  log.info({ mode: "command" }, "Command mode (selected text present)");
248
- await handleCommandMode(
249
- msg,
250
- ctx,
251
- profile,
252
- profileMeta,
253
- stylePrompt,
254
- );
248
+ await handleCommandMode(msg, ctx, profile, profileMeta, stylePrompt);
255
249
  return;
256
250
  }
257
251
 
@@ -477,7 +471,3 @@ async function handleCommandMode(
477
471
  });
478
472
  }
479
473
  }
480
-
481
- export const dictationHandlers = defineHandlers({
482
- dictation_request: handleDictationRequest,
483
- });
@@ -1,10 +1,3 @@
1
- import { existsSync, readFileSync, statSync } from "node:fs";
2
- import { dirname, join } from "node:path";
3
- import { fileURLToPath } from "node:url";
4
-
5
- import { getWorkspacePromptPath, readLockfile } from "../../util/platform.js";
6
- import { defineHandlers, type HandlerContext, log } from "./shared.js";
7
-
8
1
  export interface IdentityFields {
9
2
  name: string;
10
3
  role: string;
@@ -58,101 +51,3 @@ export function parseIdentityFields(content: string): IdentityFields {
58
51
  home: fields.home ?? "",
59
52
  };
60
53
  }
61
-
62
- function handleIdentityGet(ctx: HandlerContext): void {
63
- const identityPath = getWorkspacePromptPath("IDENTITY.md");
64
-
65
- if (!existsSync(identityPath)) {
66
- ctx.send({
67
- type: "identity_get_response",
68
- found: false,
69
- name: "",
70
- role: "",
71
- personality: "",
72
- emoji: "",
73
- home: "",
74
- });
75
- return;
76
- }
77
-
78
- try {
79
- const content = readFileSync(identityPath, "utf-8");
80
- const fields = parseIdentityFields(content);
81
-
82
- // Read version from package.json
83
- let version: string | undefined;
84
- try {
85
- const pkgPath = join(
86
- dirname(fileURLToPath(import.meta.url)),
87
- "../../../package.json",
88
- );
89
- const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
90
- version = pkg.version;
91
- } catch {
92
- // ignore
93
- }
94
-
95
- // Read createdAt from IDENTITY.md file birthtime
96
- let createdAt: string | undefined;
97
- try {
98
- const stats = statSync(identityPath);
99
- createdAt = stats.birthtime.toISOString();
100
- } catch {
101
- // ignore
102
- }
103
-
104
- // Read lockfile for assistantId, cloud, and originSystem
105
- let assistantId: string | undefined;
106
- let cloud: string | undefined;
107
- let originSystem: string | undefined;
108
- try {
109
- const lockData = readLockfile();
110
- const assistants = lockData?.assistants as
111
- | Array<Record<string, unknown>>
112
- | undefined;
113
- if (assistants && assistants.length > 0) {
114
- // Use the most recently hatched assistant
115
- const sorted = [...assistants].sort((a, b) => {
116
- const dateA = new Date((a.hatchedAt as string) || 0).getTime();
117
- const dateB = new Date((b.hatchedAt as string) || 0).getTime();
118
- return dateB - dateA;
119
- });
120
- const latest = sorted[0];
121
- assistantId = latest.assistantId as string | undefined;
122
- cloud = latest.cloud as string | undefined;
123
- originSystem = cloud === "local" ? "local" : cloud;
124
- }
125
- } catch {
126
- // ignore — lockfile may not exist
127
- }
128
-
129
- ctx.send({
130
- type: "identity_get_response",
131
- found: true,
132
- name: fields.name,
133
- role: fields.role,
134
- personality: fields.personality,
135
- emoji: fields.emoji,
136
- home: fields.home,
137
- version,
138
- assistantId,
139
- createdAt,
140
- originSystem,
141
- });
142
- } catch (err) {
143
- log.error({ err }, "Failed to read identity");
144
- ctx.send({
145
- type: "identity_get_response",
146
- found: false,
147
- name: "",
148
- role: "",
149
- personality: "",
150
- emoji: "",
151
- home: "",
152
- });
153
- }
154
- }
155
-
156
- export const identityHandlers = defineHandlers({
157
- identity_get: (_msg, ctx) => handleIdentityGet(ctx),
158
- });
@@ -9,11 +9,7 @@ import {
9
9
  } from "../../memory/attachments-store.js";
10
10
  import { addMessage } from "../../memory/conversation-crud.js";
11
11
  import type { RecordingOptions, RecordingStatus } from "../message-protocol.js";
12
- import {
13
- defineHandlers,
14
- type HandlerContext,
15
- log,
16
- } from "./shared.js";
12
+ import { type HandlerContext, log } from "./shared.js";
17
13
 
18
14
  // ─── Constants ───────────────────────────────────────────────────────────────
19
15
 
@@ -501,7 +497,7 @@ export async function finalizeAndPublishRecording(params: {
501
497
  }
502
498
 
503
499
  // Restrict accepted file paths to the app's recordings directory to
504
- // prevent attachment of arbitrary files via crafted IPC messages.
500
+ // prevent attachment of arbitrary files via crafted messages.
505
501
  let resolvedPath: string;
506
502
  try {
507
503
  resolvedPath = realpathSync(filePath);
@@ -725,7 +721,7 @@ export async function finalizeAndPublishRecording(params: {
725
721
  * after recording stops, broadcasting recording lifecycle events, and
726
722
  * triggering deferred recording restarts.
727
723
  *
728
- * Shared by both the IPC handler and the HTTP POST route.
724
+ * This is the supported entry point for both HTTP routes and tests.
729
725
  */
730
726
  export async function handleRecordingStatusCore(
731
727
  msg: RecordingStatus,
@@ -1049,19 +1045,3 @@ export function __resetRecordingState(): void {
1049
1045
  finalizedRecordingIds.clear();
1050
1046
  activeRestartToken = null;
1051
1047
  }
1052
-
1053
- // ─── IPC handler wrapper ─────────────────────────────────────────────────────
1054
-
1055
- /** IPC-compatible wrapper: ignores the socket (unused) and delegates to core. */
1056
- async function handleRecordingStatusIpc(
1057
- msg: RecordingStatus,
1058
- ctx: HandlerContext,
1059
- ): Promise<void> {
1060
- return handleRecordingStatusCore(msg, ctx);
1061
- }
1062
-
1063
- // ─── Export handler group ────────────────────────────────────────────────────
1064
-
1065
- export const recordingHandlers = defineHandlers({
1066
- recording_status: handleRecordingStatusIpc,
1067
- });
@@ -27,6 +27,43 @@ import {
27
27
  renderHistoryContent,
28
28
  } from "./shared.js";
29
29
 
30
+ /**
31
+ * In light mode, strip heavy payloads (e.g. full HTML) from surface data
32
+ * but preserve the fields the client needs to parse and render the surface.
33
+ */
34
+ function lightModeSurfaceData(s: HistorySurface): Record<string, unknown> {
35
+ switch (s.surfaceType) {
36
+ case "dynamic_page":
37
+ return {
38
+ ...(s.data.preview ? { preview: s.data.preview } : {}),
39
+ ...(s.data.appId ? { appId: s.data.appId } : {}),
40
+ };
41
+ case "card":
42
+ return {
43
+ ...(typeof s.data.title === "string" ? { title: s.data.title } : {}),
44
+ ...(typeof s.data.body === "string" ? { body: s.data.body } : {}),
45
+ ...(typeof s.data.template === "string"
46
+ ? { template: s.data.template }
47
+ : {}),
48
+ ...(s.data.templateData ? { templateData: s.data.templateData } : {}),
49
+ };
50
+ case "document_preview":
51
+ return {
52
+ ...(typeof s.data.surfaceId === "string"
53
+ ? { surfaceId: s.data.surfaceId }
54
+ : {}),
55
+ ...(typeof s.data.title === "string" ? { title: s.data.title } : {}),
56
+ ...(typeof s.data.content === "string"
57
+ ? { content: s.data.content }
58
+ : {}),
59
+ };
60
+ default:
61
+ // For other types (list, table, form, confirmation, etc.),
62
+ // preserve the full data — these are generally small.
63
+ return s.data;
64
+ }
65
+ }
66
+
30
67
  export function handleHistoryRequest(
31
68
  msg: HistoryRequest,
32
69
  ctx: HandlerContext,
@@ -190,7 +227,9 @@ export function handleHistoryRequest(
190
227
  })
191
228
  : m.toolCalls;
192
229
 
193
- // In light mode, strip full data from surfaces (keep metadata)
230
+ // In light mode, strip heavy payloads but keep essential fields so
231
+ // the client can still parse and render surfaces (e.g. card title/body,
232
+ // dynamic_page preview, document_preview metadata).
194
233
  const filteredSurfaces =
195
234
  m.surfaces.length > 0
196
235
  ? includeSurfaceData
@@ -199,14 +238,7 @@ export function handleHistoryRequest(
199
238
  surfaceId: s.surfaceId,
200
239
  surfaceType: s.surfaceType,
201
240
  title: s.title,
202
- data: {
203
- ...(s.surfaceType === "dynamic_page"
204
- ? {
205
- ...(s.data.preview ? { preview: s.data.preview } : {}),
206
- ...(s.data.appId ? { appId: s.data.appId } : {}),
207
- }
208
- : {}),
209
- } as Record<string, unknown>,
241
+ data: lightModeSurfaceData(s),
210
242
  ...(s.actions ? { actions: s.actions } : {}),
211
243
  ...(s.display ? { display: s.display } : {}),
212
244
  }))
@@ -370,7 +402,7 @@ export function getMessageContent(
370
402
  }
371
403
 
372
404
  // ---------------------------------------------------------------------------
373
- // IPC handlers (delegate to shared logic)
405
+ // HTTP handlers (delegate to shared logic)
374
406
  // ---------------------------------------------------------------------------
375
407
 
376
408
  export function handleConversationSearch(
@@ -34,6 +34,8 @@ import * as externalConversationStore from "../../memory/external-conversation-s
34
34
  import * as pendingInteractions from "../../runtime/pending-interactions.js";
35
35
  import { getSubagentManager } from "../../subagent/index.js";
36
36
  import { truncate } from "../../util/truncate.js";
37
+ import { HostBashProxy } from "../host-bash-proxy.js";
38
+ import { HostFileProxy } from "../host-file-proxy.js";
37
39
  import type {
38
40
  CancelRequest,
39
41
  ConfirmationResponse,
@@ -55,13 +57,6 @@ import {
55
57
  classifySessionError,
56
58
  } from "../session-error.js";
57
59
  import {
58
- handleConversationSearch,
59
- handleHistoryRequest,
60
- handleMessageContentRequest,
61
- } from "./session-history.js";
62
- import { handleUserMessage } from "./session-user-message.js";
63
- import {
64
- defineHandlers,
65
60
  type HandlerContext,
66
61
  log,
67
62
  pendingStandaloneSecrets,
@@ -85,7 +80,7 @@ function parseBindingSourceChannel(
85
80
  return null;
86
81
  }
87
82
 
88
- export function syncCanonicalStatusFromIpcConfirmationDecision(
83
+ export function syncCanonicalStatusFromConfirmationDecision(
89
84
  requestId: string,
90
85
  decision: ConfirmationResponse["decision"],
91
86
  ): void {
@@ -101,12 +96,12 @@ export function syncCanonicalStatusFromIpcConfirmationDecision(
101
96
  } catch (err) {
102
97
  log.debug(
103
98
  { err, requestId, targetStatus },
104
- "Failed to resolve canonical request from IPC confirmation response",
99
+ "Failed to resolve canonical request from local confirmation response",
105
100
  );
106
101
  }
107
102
  }
108
103
 
109
- export function makeIpcEventSender(params: {
104
+ export function makeEventSender(params: {
110
105
  ctx: HandlerContext;
111
106
  session: Session;
112
107
  conversationId: string;
@@ -149,7 +144,7 @@ export function makeIpcEventSender(params: {
149
144
  } catch (err) {
150
145
  log.debug(
151
146
  { err, requestId: event.requestId, conversationId },
152
- "Failed to create canonical request from IPC confirmation event",
147
+ "Failed to create canonical request from local confirmation event",
153
148
  );
154
149
  }
155
150
  } else if (event.type === "secret_request") {
@@ -158,6 +153,18 @@ export function makeIpcEventSender(params: {
158
153
  conversationId,
159
154
  kind: "secret",
160
155
  });
156
+ } else if (event.type === "host_bash_request") {
157
+ pendingInteractions.register(event.requestId, {
158
+ session,
159
+ conversationId,
160
+ kind: "host_bash",
161
+ });
162
+ } else if (event.type === "host_file_request") {
163
+ pendingInteractions.register(event.requestId, {
164
+ session,
165
+ conversationId,
166
+ kind: "host_file",
167
+ });
161
168
  }
162
169
 
163
170
  ctx.send(event);
@@ -182,10 +189,7 @@ export function handleConfirmationResponse(
182
189
  undefined,
183
190
  { source: "button" },
184
191
  );
185
- syncCanonicalStatusFromIpcConfirmationDecision(
186
- msg.requestId,
187
- msg.decision,
188
- );
192
+ syncCanonicalStatusFromConfirmationDecision(msg.requestId, msg.decision);
189
193
  pendingInteractions.resolve(msg.requestId);
190
194
  return;
191
195
  }
@@ -200,10 +204,7 @@ export function handleConfirmationResponse(
200
204
  msg.selectedPattern,
201
205
  msg.selectedScope,
202
206
  );
203
- syncCanonicalStatusFromIpcConfirmationDecision(
204
- msg.requestId,
205
- msg.decision,
206
- );
207
+ syncCanonicalStatusFromConfirmationDecision(msg.requestId, msg.decision);
207
208
  pendingInteractions.resolve(msg.requestId);
208
209
  return;
209
210
  }
@@ -332,7 +333,7 @@ export function handleSessionList(
332
333
  */
333
334
  export function clearAllSessions(ctx: HandlerContext): number {
334
335
  const cleared = ctx.clearAllSessions();
335
- // Also clear DB conversations. When a new IPC connection triggers
336
+ // Also clear DB conversations. When a new local connection triggers
336
337
  // sendInitialSession, it auto-creates a conversation if none exist.
337
338
  // Without this DB clear, that auto-created row survives, contradicting
338
339
  // the "clear all conversations" intent.
@@ -340,9 +341,7 @@ export function clearAllSessions(ctx: HandlerContext): number {
340
341
  return cleared;
341
342
  }
342
343
 
343
- export function handleSessionsClear(
344
- ctx: HandlerContext,
345
- ): void {
344
+ export function handleSessionsClear(ctx: HandlerContext): void {
346
345
  const cleared = clearAllSessions(ctx);
347
346
  ctx.send({ type: "sessions_clear_response", cleared });
348
347
  }
@@ -389,7 +388,7 @@ export async function handleSessionCreate(
389
388
  if (title === GENERATING_TITLE) {
390
389
  queueGenerateConversationTitle({
391
390
  conversationId: conversation.id,
392
- context: { origin: "ipc" },
391
+ context: { origin: "local" },
393
392
  userMessage: msg.initialMessage,
394
393
  onTitleUpdated: (newTitle) => {
395
394
  ctx.send({
@@ -404,13 +403,12 @@ export async function handleSessionCreate(
404
403
  const requestId = uuid();
405
404
  const transportChannel =
406
405
  parseChannelId(msg.transport?.channelId) ?? "vellum";
407
- const sendEvent = makeIpcEventSender({
406
+ const sendEvent = makeEventSender({
408
407
  ctx,
409
408
  session,
410
409
  conversationId: conversation.id,
411
410
  sourceChannel: transportChannel,
412
411
  });
413
- session.updateClient(sendEvent, false);
414
412
  session.setTurnChannelContext({
415
413
  userMessageChannel: transportChannel,
416
414
  assistantMessageChannel: transportChannel,
@@ -421,6 +419,20 @@ export async function handleSessionCreate(
421
419
  userMessageInterface: transportInterface,
422
420
  assistantMessageInterface: transportInterface,
423
421
  });
422
+ // Only create the host bash proxy for desktop client interfaces that can
423
+ // execute commands on the user's machine. Set before updateClient so
424
+ // updateClient's call to hostBashProxy.updateSender targets the new proxy.
425
+ if (transportInterface === "macos" || transportInterface === "ios") {
426
+ const proxy = new HostBashProxy(sendEvent, (requestId) => {
427
+ pendingInteractions.resolve(requestId);
428
+ });
429
+ session.setHostBashProxy(proxy);
430
+ const fileProxy = new HostFileProxy(sendEvent, (requestId) => {
431
+ pendingInteractions.resolve(requestId);
432
+ });
433
+ session.setHostFileProxy(fileProxy);
434
+ }
435
+ session.updateClient(sendEvent, false);
424
436
  session
425
437
  .processMessage(msg.initialMessage, [], sendEvent, requestId)
426
438
  .catch((err) => {
@@ -520,10 +532,7 @@ export async function handleSessionSwitch(
520
532
  /**
521
533
  * Rename a session/conversation. Returns true on success, false if not found.
522
534
  */
523
- export function renameSession(
524
- sessionId: string,
525
- name: string,
526
- ): boolean {
535
+ export function renameSession(sessionId: string, name: string): boolean {
527
536
  const conversation = getConversation(sessionId);
528
537
  if (!conversation) {
529
538
  return false;
@@ -572,10 +581,7 @@ export function cancelGeneration(
572
581
  return true;
573
582
  }
574
583
 
575
- export function handleCancel(
576
- msg: CancelRequest,
577
- ctx: HandlerContext,
578
- ): void {
584
+ export function handleCancel(msg: CancelRequest, ctx: HandlerContext): void {
579
585
  const sessionId = msg.sessionId;
580
586
  if (sessionId) {
581
587
  cancelGeneration(sessionId, ctx);
@@ -598,10 +604,7 @@ export function undoLastMessage(
598
604
  return { removedCount };
599
605
  }
600
606
 
601
- export function handleUndo(
602
- msg: UndoRequest,
603
- ctx: HandlerContext,
604
- ): void {
607
+ export function handleUndo(msg: UndoRequest, ctx: HandlerContext): void {
605
608
  const result = undoLastMessage(msg.sessionId, ctx);
606
609
  if (!result) {
607
610
  ctx.send({ type: "error", message: "No active session" });
@@ -616,7 +619,7 @@ export function handleUndo(
616
619
 
617
620
  /**
618
621
  * Regenerate the last assistant response for a session. The caller provides
619
- * a `sendEvent` callback for delivering streaming events (IPC or HTTP/SSE).
622
+ * a `sendEvent` callback for delivering streaming events via HTTP/SSE.
620
623
  * Returns null if the session is not found. Throws on regeneration errors.
621
624
  */
622
625
  export async function regenerateResponse(
@@ -667,7 +670,7 @@ export async function handleRegenerate(
667
670
  const regenerateChannel =
668
671
  parseChannelId(session.getTurnChannelContext()?.assistantMessageChannel) ??
669
672
  "vellum";
670
- const sendEvent = makeIpcEventSender({
673
+ const sendEvent = makeEventSender({
671
674
  ctx,
672
675
  session,
673
676
  conversationId: msg.sessionId,
@@ -717,8 +720,12 @@ export function handleUsageRequest(
717
720
  export function deleteQueuedMessage(
718
721
  sessionId: string,
719
722
  requestId: string,
720
- findSession: (id: string) => { removeQueuedMessage(requestId: string): boolean } | undefined,
721
- ): { removed: true } | { removed: false; reason: "session_not_found" | "message_not_found" } {
723
+ findSession: (
724
+ id: string,
725
+ ) => { removeQueuedMessage(requestId: string): boolean } | undefined,
726
+ ):
727
+ | { removed: true }
728
+ | { removed: false; reason: "session_not_found" | "message_not_found" } {
722
729
  const session = findSession(sessionId);
723
730
  if (!session) {
724
731
  log.warn(
@@ -731,25 +738,20 @@ export function deleteQueuedMessage(
731
738
  if (removed) {
732
739
  return { removed: true };
733
740
  }
734
- log.warn(
735
- { sessionId, requestId },
736
- "Queued message not found for deletion",
737
- );
741
+ log.warn({ sessionId, requestId }, "Queued message not found for deletion");
738
742
  return { removed: false, reason: "message_not_found" };
739
743
  }
740
744
 
741
745
  // ---------------------------------------------------------------------------
742
- // IPC handler (delegates to shared logic)
746
+ // HTTP handler (delegates to shared logic)
743
747
  // ---------------------------------------------------------------------------
744
748
 
745
749
  export function handleDeleteQueuedMessage(
746
750
  msg: DeleteQueuedMessage,
747
751
  ctx: HandlerContext,
748
752
  ): void {
749
- const result = deleteQueuedMessage(
750
- msg.sessionId,
751
- msg.requestId,
752
- (id) => ctx.sessions.get(id),
753
+ const result = deleteQueuedMessage(msg.sessionId, msg.requestId, (id) =>
754
+ ctx.sessions.get(id),
753
755
  );
754
756
  if (result.removed) {
755
757
  ctx.send({
@@ -775,24 +777,3 @@ export function handleReorderThreads(
775
777
  })),
776
778
  );
777
779
  }
778
-
779
- export const sessionHandlers = defineHandlers({
780
- user_message: handleUserMessage,
781
- confirmation_response: handleConfirmationResponse,
782
- secret_response: handleSecretResponse,
783
- session_list: (msg, ctx) =>
784
- handleSessionList(ctx, msg.offset ?? 0, msg.limit ?? 50),
785
- session_create: handleSessionCreate,
786
- sessions_clear: (_msg, ctx) => handleSessionsClear(ctx),
787
- session_switch: handleSessionSwitch,
788
- session_rename: handleSessionRename,
789
- cancel: handleCancel,
790
- delete_queued_message: handleDeleteQueuedMessage,
791
- history_request: handleHistoryRequest,
792
- message_content_request: handleMessageContentRequest,
793
- undo: handleUndo,
794
- regenerate: handleRegenerate,
795
- usage_request: handleUsageRequest,
796
- conversation_search: handleConversationSearch,
797
- reorder_threads: handleReorderThreads,
798
- });