@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
@@ -3,10 +3,8 @@ import { RiskLevel } from "../../permissions/types.js";
3
3
  import type { ToolDefinition } from "../../providers/types.js";
4
4
  import type { Tool, ToolContext, ToolExecutionResult } from "../types.js";
5
5
  import {
6
- memoryDeleteDefinition,
6
+ memoryManageDefinition,
7
7
  memoryRecallDefinition,
8
- memorySaveDefinition,
9
- memoryUpdateDefinition,
10
8
  } from "./definitions.js";
11
9
  import {
12
10
  handleMemoryDelete,
@@ -15,16 +13,16 @@ import {
15
13
  handleMemoryUpdate,
16
14
  } from "./handlers.js";
17
15
 
18
- // ── memory_save ──────────────────────────────────────────────────────
16
+ // ── memory_manage ────────────────────────────────────────────────────
19
17
 
20
- class MemorySaveTool implements Tool {
21
- name = "memory_save";
22
- description = memorySaveDefinition.description;
18
+ class MemoryManageTool implements Tool {
19
+ name = "memory_manage";
20
+ description = memoryManageDefinition.description;
23
21
  category = "memory";
24
22
  defaultRiskLevel = RiskLevel.Low;
25
23
 
26
24
  getDefinition(): ToolDefinition {
27
- return memorySaveDefinition;
25
+ return memoryManageDefinition;
28
26
  }
29
27
 
30
28
  async execute(
@@ -32,55 +30,25 @@ class MemorySaveTool implements Tool {
32
30
  context: ToolContext,
33
31
  ): Promise<ToolExecutionResult> {
34
32
  const config = getConfig();
35
- return handleMemorySave(
36
- input,
37
- config,
38
- context.conversationId,
39
- context.requestId,
40
- context.memoryScopeId,
41
- );
42
- }
43
- }
44
-
45
- // ── memory_update ────────────────────────────────────────────────────
46
-
47
- class MemoryUpdateTool implements Tool {
48
- name = "memory_update";
49
- description = memoryUpdateDefinition.description;
50
- category = "memory";
51
- defaultRiskLevel = RiskLevel.Low;
52
-
53
- getDefinition(): ToolDefinition {
54
- return memoryUpdateDefinition;
55
- }
56
-
57
- async execute(
58
- input: Record<string, unknown>,
59
- context: ToolContext,
60
- ): Promise<ToolExecutionResult> {
61
- const config = getConfig();
62
- return handleMemoryUpdate(input, config, context.memoryScopeId);
63
- }
64
- }
65
-
66
- // ── memory_delete ────────────────────────────────────────────────────
67
-
68
- class MemoryDeleteTool implements Tool {
69
- name = "memory_delete";
70
- description = memoryDeleteDefinition.description;
71
- category = "memory";
72
- defaultRiskLevel = RiskLevel.Low;
73
-
74
- getDefinition(): ToolDefinition {
75
- return memoryDeleteDefinition;
76
- }
77
-
78
- async execute(
79
- input: Record<string, unknown>,
80
- context: ToolContext,
81
- ): Promise<ToolExecutionResult> {
82
- const config = getConfig();
83
- return handleMemoryDelete(input, config, context.memoryScopeId);
33
+ switch (input.op) {
34
+ case "save":
35
+ return handleMemorySave(
36
+ input,
37
+ config,
38
+ context.conversationId,
39
+ context.requestId,
40
+ context.memoryScopeId,
41
+ );
42
+ case "update":
43
+ return handleMemoryUpdate(input, config, context.memoryScopeId);
44
+ case "delete":
45
+ return handleMemoryDelete(input, config, context.memoryScopeId);
46
+ default:
47
+ return {
48
+ content: `Error: unknown op "${input.op}". Must be one of: save, update, delete`,
49
+ isError: true,
50
+ };
51
+ }
84
52
  }
85
53
  }
86
54
 
@@ -112,7 +80,5 @@ class MemoryRecallTool implements Tool {
112
80
 
113
81
  // ── Exported tool instances ──────────────────────────────────────────
114
82
 
115
- export const memorySaveTool = new MemorySaveTool();
116
- export const memoryUpdateTool = new MemoryUpdateTool();
117
- export const memoryDeleteTool = new MemoryDeleteTool();
83
+ export const memoryManageTool = new MemoryManageTool();
118
84
  export const memoryRecallTool = new MemoryRecallTool();
@@ -528,15 +528,13 @@ export function getSessionEnv(sessionId: ProxySessionId): ProxyEnvVars {
528
528
  NO_PROXY: "localhost,127.0.0.1,::1",
529
529
  };
530
530
 
531
- if (managed.dataDir) {
531
+ // Only set cert env vars when the CA was actually initialized (MITM mode).
532
+ // Without this guard, NODE_EXTRA_CA_CERTS points to a nonexistent file
533
+ // when the proxy runs in pass-through mode (no credentials/MITM),
534
+ // causing Bun/BoringSSL to fail with SSL load errors.
535
+ if (managed.dataDir && managed.combinedCABundlePath) {
532
536
  env.NODE_EXTRA_CA_CERTS = getCAPath(managed.dataDir);
533
- // Combined bundle lets non-Node clients (curl, Python, Go) trust
534
- // the proxy CA alongside system roots via SSL_CERT_FILE.
535
- // Only set when the bundle was actually created — pointing at a
536
- // missing file would replace the system trust store with nothing.
537
- if (managed.combinedCABundlePath) {
538
- env.SSL_CERT_FILE = managed.combinedCABundlePath;
539
- }
537
+ env.SSL_CERT_FILE = managed.combinedCABundlePath;
540
538
  }
541
539
 
542
540
  return env;
@@ -763,6 +763,11 @@ export async function executeWebFetch(
763
763
  `start_index (${startIndex}) exceeded available content length (${processed.length}).`,
764
764
  );
765
765
  }
766
+ if (html && !rawMode && processed.length < 200) {
767
+ notices.push(
768
+ `Extracted text content is very short (${processed.length} characters). The page may require JavaScript rendering for full content.`,
769
+ );
770
+ }
766
771
 
767
772
  const content = formatWebFetchOutput({
768
773
  requestedUrl: safeRequestedUrl,
@@ -877,4 +882,5 @@ class WebFetchTool implements Tool {
877
882
  }
878
883
  }
879
884
 
880
- registerTool(new WebFetchTool());
885
+ export const webFetchTool = new WebFetchTool();
886
+ registerTool(webFetchTool);
@@ -382,4 +382,5 @@ class WebSearchTool implements Tool {
382
382
  }
383
383
  }
384
384
 
385
- registerTool(new WebSearchTool());
385
+ export const webSearchTool = new WebSearchTool();
386
+ registerTool(webSearchTool);
@@ -239,6 +239,18 @@ export function registerMcpTools(newTools: Tool[]): Tool[] {
239
239
  return accepted;
240
240
  }
241
241
 
242
+ /**
243
+ * Unregister all MCP-origin tools from the registry.
244
+ */
245
+ export function unregisterAllMcpTools(): void {
246
+ for (const [name, tool] of tools) {
247
+ if (tool.origin === "mcp") {
248
+ tools.delete(name);
249
+ log.info({ name }, "MCP tool unregistered (reload)");
250
+ }
251
+ }
252
+ }
253
+
242
254
  /**
243
255
  * Unregister all tools belonging to a specific MCP server.
244
256
  */
@@ -260,6 +272,17 @@ export function getMcpToolNames(): string[] {
260
272
  .map((t) => t.name);
261
273
  }
262
274
 
275
+ /**
276
+ * Return tool definitions for all currently registered MCP-origin tools.
277
+ * Used by the session resolver to dynamically pick up MCP tools that
278
+ * were registered after session creation (e.g. via `vellum mcp reload`).
279
+ */
280
+ export function getMcpToolDefinitions(): ToolDefinition[] {
281
+ return Array.from(tools.values())
282
+ .filter((t) => t.origin === "mcp")
283
+ .map((t) => t.getDefinition());
284
+ }
285
+
263
286
  /**
264
287
  * Return the names of all currently registered skill-origin tools.
265
288
  */
@@ -1,6 +1,10 @@
1
1
  import { formatIntegrationSummary } from "../../schedule/integration-status.js";
2
2
  import { validateRruleSetLines } from "../../schedule/recurrence-engine.js";
3
3
  import { normalizeScheduleSyntax } from "../../schedule/recurrence-types.js";
4
+ import type {
5
+ RoutingIntent,
6
+ ScheduleMode,
7
+ } from "../../schedule/schedule-store.js";
4
8
  import {
5
9
  createSchedule,
6
10
  describeCronExpression,
@@ -9,6 +13,13 @@ import {
9
13
  } from "../../schedule/schedule-store.js";
10
14
  import type { ToolContext, ToolExecutionResult } from "../types.js";
11
15
 
16
+ const VALID_MODES: ScheduleMode[] = ["notify", "execute"];
17
+ const VALID_ROUTING_INTENTS: RoutingIntent[] = [
18
+ "single_channel",
19
+ "multi_channel",
20
+ "all_channels",
21
+ ];
22
+
12
23
  export async function executeScheduleCreate(
13
24
  input: Record<string, unknown>,
14
25
  _context: ToolContext,
@@ -17,6 +28,12 @@ export async function executeScheduleCreate(
17
28
  const timezone = (input.timezone as string) ?? null;
18
29
  const message = input.message as string;
19
30
  const enabled = (input.enabled as boolean) ?? true;
31
+ const fireAt = input.fire_at as string | undefined;
32
+ const mode = (input.mode as ScheduleMode | undefined) ?? "execute";
33
+ const routingIntent = input.routing_intent as string | undefined;
34
+ const routingHints = input.routing_hints as
35
+ | Record<string, unknown>
36
+ | undefined;
20
37
 
21
38
  if (!name || typeof name !== "string") {
22
39
  return {
@@ -31,6 +48,90 @@ export async function executeScheduleCreate(
31
48
  };
32
49
  }
33
50
 
51
+ // Validate mode
52
+ if (!VALID_MODES.includes(mode)) {
53
+ return {
54
+ content: `Error: mode must be one of: ${VALID_MODES.join(", ")}`,
55
+ isError: true,
56
+ };
57
+ }
58
+
59
+ // Validate routing_intent
60
+ if (
61
+ routingIntent !== undefined &&
62
+ !VALID_ROUTING_INTENTS.includes(routingIntent as RoutingIntent)
63
+ ) {
64
+ return {
65
+ content: `Error: routing_intent must be one of: ${VALID_ROUTING_INTENTS.join(", ")}`,
66
+ isError: true,
67
+ };
68
+ }
69
+
70
+ // ── One-shot schedule (fire_at) ──────────────────────────────────
71
+ if (fireAt) {
72
+ const fireAtMs = Date.parse(fireAt);
73
+ if (isNaN(fireAtMs)) {
74
+ return {
75
+ content:
76
+ "Error: fire_at must be a valid ISO 8601 timestamp (e.g. 2025-06-15T09:00:00Z)",
77
+ isError: true,
78
+ };
79
+ }
80
+ // Require explicit timezone (Z, ±HH:MM, or ±HHMM offset) to avoid host-timezone ambiguity
81
+ if (!/(?:Z|[+-]\d{2}:?\d{2})\s*$/.test(fireAt)) {
82
+ return {
83
+ content:
84
+ "Error: fire_at must include a timezone offset (e.g. 2025-06-15T09:00:00Z or 2025-06-15T09:00:00+05:30)",
85
+ isError: true,
86
+ };
87
+ }
88
+ if (fireAtMs <= Date.now()) {
89
+ return {
90
+ content: "Error: fire_at must be in the future",
91
+ isError: true,
92
+ };
93
+ }
94
+
95
+ try {
96
+ const job = createSchedule({
97
+ name,
98
+ cronExpression: null,
99
+ timezone,
100
+ message,
101
+ enabled,
102
+ syntax: "cron",
103
+ expression: null,
104
+ nextRunAt: fireAtMs,
105
+ mode,
106
+ routingIntent: routingIntent as RoutingIntent | undefined,
107
+ routingHints,
108
+ });
109
+
110
+ const fireDate = formatLocalDate(job.nextRunAt);
111
+ const integrations = formatIntegrationSummary();
112
+ return {
113
+ content: [
114
+ `One-shot schedule created successfully.`,
115
+ ` ID: ${job.id}`,
116
+ ` Name: ${job.name}`,
117
+ ` Type: one-shot`,
118
+ ` Mode: ${job.mode}`,
119
+ ` Fire at: ${fireDate}`,
120
+ ` Enabled: ${job.enabled}`,
121
+ ` Status: ${job.status}`,
122
+ ``,
123
+ `Integrations: ${integrations}`,
124
+ `\u26a0 If this schedule requires an integration that isn't connected, it will fail at runtime. Warn the user about any missing capabilities before confirming the schedule is ready.`,
125
+ ].join("\n"),
126
+ isError: false,
127
+ };
128
+ } catch (err) {
129
+ const msg = err instanceof Error ? err.message : String(err);
130
+ return { content: `Error creating schedule: ${msg}`, isError: true };
131
+ }
132
+ }
133
+
134
+ // ── Recurring schedule (expression) ──────────────────────────────
34
135
  const resolved = normalizeScheduleSyntax({
35
136
  syntax: input.syntax as "cron" | "rrule" | undefined,
36
137
  expression: input.expression as string | undefined,
@@ -38,7 +139,8 @@ export async function executeScheduleCreate(
38
139
 
39
140
  if (!resolved) {
40
141
  return {
41
- content: "Error: expression is required",
142
+ content:
143
+ "Error: expression is required for recurring schedules (or provide fire_at for one-shot)",
42
144
  isError: true,
43
145
  };
44
146
  }
@@ -75,21 +177,27 @@ export async function executeScheduleCreate(
75
177
  enabled,
76
178
  syntax: resolved.syntax,
77
179
  expression: resolved.expression,
180
+ mode,
181
+ routingIntent: routingIntent as RoutingIntent | undefined,
182
+ routingHints,
78
183
  });
79
184
 
80
185
  const scheduleDescription =
81
- job.syntax === "rrule"
82
- ? job.expression
83
- : describeCronExpression(job.cronExpression);
186
+ job.expression == null
187
+ ? "One-time"
188
+ : job.syntax === "rrule"
189
+ ? job.expression
190
+ : describeCronExpression(job.cronExpression);
84
191
 
85
192
  const nextRunDate = formatLocalDate(job.nextRunAt);
86
193
  const integrations = formatIntegrationSummary();
87
194
  return {
88
195
  content: [
89
- `Schedule created successfully.`,
196
+ `Recurring schedule created successfully.`,
90
197
  ` ID: ${job.id}`,
91
198
  ` Name: ${job.name}`,
92
199
  ` Syntax: ${job.syntax}`,
200
+ ` Mode: ${job.mode}`,
93
201
  ` Schedule: ${scheduleDescription}${
94
202
  job.timezone ? ` (${job.timezone})` : ""
95
203
  }`,
@@ -10,9 +10,10 @@ import type { ToolContext, ToolExecutionResult } from "../types.js";
10
10
 
11
11
  function describeSchedule(job: {
12
12
  syntax: string;
13
- expression: string;
14
- cronExpression: string;
13
+ expression: string | null;
14
+ cronExpression: string | null;
15
15
  }): string {
16
+ if (job.expression == null) return "One-time";
16
17
  if (job.syntax === "rrule") {
17
18
  const label = hasSetConstructs(job.expression) ? "[RRULE set] " : "";
18
19
  return `${label}${job.expression}`;
@@ -20,6 +21,10 @@ function describeSchedule(job: {
20
21
  return describeCronExpression(job.cronExpression);
21
22
  }
22
23
 
24
+ function isOneShot(job: { expression: string | null }): boolean {
25
+ return job.expression == null;
26
+ }
27
+
23
28
  export async function executeScheduleList(
24
29
  input: Record<string, unknown>,
25
30
  _context: ToolContext,
@@ -34,23 +39,51 @@ export async function executeScheduleList(
34
39
  return { content: `Error: Schedule not found: ${jobId}`, isError: true };
35
40
  }
36
41
 
42
+ const oneShot = isOneShot(job);
43
+
37
44
  const runs = getScheduleRuns(jobId, 5);
38
45
  const lines = [
39
46
  `Schedule: ${job.name}`,
40
47
  ` ID: ${job.id}`,
41
- ` Syntax: ${job.syntax}`,
42
- ` Expression: ${job.expression}`,
43
- ` Schedule: ${describeSchedule(job)}${
44
- job.timezone ? ` (${job.timezone})` : ""
45
- }`,
48
+ ` Type: ${oneShot ? "one-shot" : "recurring"}`,
49
+ ` Mode: ${job.mode}`,
50
+ ` Status: ${job.status}`,
51
+ ];
52
+
53
+ if (oneShot) {
54
+ lines.push(` Fire at: ${formatLocalDate(job.nextRunAt)}`);
55
+ } else {
56
+ lines.push(
57
+ ` Syntax: ${job.syntax}`,
58
+ ` Expression: ${job.expression ?? "(one-time)"}`,
59
+ ` Schedule: ${describeSchedule(job)}${
60
+ job.timezone ? ` (${job.timezone})` : ""
61
+ }`,
62
+ );
63
+ }
64
+
65
+ lines.push(
46
66
  ` Enabled: ${job.enabled}`,
47
67
  ` Message: ${job.message}`,
48
- ` Next run: ${formatLocalDate(job.nextRunAt)}`,
68
+ );
69
+
70
+ if (!oneShot) {
71
+ lines.push(
72
+ ` Next run: ${formatLocalDate(job.nextRunAt)}`,
73
+ );
74
+ }
75
+
76
+ lines.push(
49
77
  ` Last run: ${job.lastRunAt ? formatLocalDate(job.lastRunAt) : "never"}`,
50
78
  ` Last status: ${job.lastStatus ?? "n/a"}`,
51
79
  ` Retry count: ${job.retryCount}`,
52
80
  ` Created: ${formatLocalDate(job.createdAt)}`,
53
- ];
81
+ );
82
+
83
+ // Show routing intent in detail view when not the default
84
+ if (job.routingIntent !== "all_channels") {
85
+ lines.push(` Routing: ${job.routingIntent}`);
86
+ }
54
87
 
55
88
  if (runs.length > 0) {
56
89
  lines.push("", `Recent runs (${runs.length}):`);
@@ -78,12 +111,21 @@ export async function executeScheduleList(
78
111
  const lines = [`Schedules (${jobs.length}):`];
79
112
  for (const job of jobs) {
80
113
  const status = job.enabled ? "enabled" : "disabled";
81
- const next = job.enabled ? formatLocalDate(job.nextRunAt) : "n/a";
82
- lines.push(
83
- ` - [${status}] ${job.name} (id: ${job.id}) ([${
84
- job.syntax
85
- }] ${describeSchedule(job)}) — next: ${next}`,
86
- );
114
+ const oneShot = isOneShot(job);
115
+
116
+ if (oneShot) {
117
+ const fireTime = formatLocalDate(job.nextRunAt);
118
+ lines.push(
119
+ ` - [${status}] ${job.name} (id: ${job.id}) (one-shot, ${job.mode}) — fire at: ${fireTime} [${job.status}]`,
120
+ );
121
+ } else {
122
+ const next = job.enabled ? formatLocalDate(job.nextRunAt) : "n/a";
123
+ lines.push(
124
+ ` - [${status}] ${job.name} (id: ${job.id}) ([${
125
+ job.syntax
126
+ }] ${describeSchedule(job)}, ${job.mode}) — next: ${next}`,
127
+ );
128
+ }
87
129
  }
88
130
 
89
131
  return { content: lines.join("\n"), isError: false };
@@ -4,13 +4,25 @@ import {
4
4
  normalizeScheduleSyntax,
5
5
  type ScheduleSyntax,
6
6
  } from "../../schedule/recurrence-types.js";
7
+ import type {
8
+ RoutingIntent,
9
+ ScheduleMode,
10
+ } from "../../schedule/schedule-store.js";
7
11
  import {
8
12
  describeCronExpression,
9
13
  formatLocalDate,
14
+ getSchedule,
10
15
  updateSchedule,
11
16
  } from "../../schedule/schedule-store.js";
12
17
  import type { ToolContext, ToolExecutionResult } from "../types.js";
13
18
 
19
+ const VALID_MODES: ScheduleMode[] = ["notify", "execute"];
20
+ const VALID_ROUTING_INTENTS: RoutingIntent[] = [
21
+ "single_channel",
22
+ "multi_channel",
23
+ "all_channels",
24
+ ];
25
+
14
26
  export async function executeScheduleUpdate(
15
27
  input: Record<string, unknown>,
16
28
  _context: ToolContext,
@@ -20,12 +32,64 @@ export async function executeScheduleUpdate(
20
32
  return { content: "Error: job_id is required", isError: true };
21
33
  }
22
34
 
35
+ // Prevent changing a one-shot to recurring or vice versa
36
+ if (input.expression !== undefined || input.fire_at !== undefined) {
37
+ const existing = getSchedule(jobId);
38
+ if (!existing) {
39
+ return { content: `Error: Schedule not found: ${jobId}`, isError: true };
40
+ }
41
+ const isExistingOneShot = existing.expression == null;
42
+ if (isExistingOneShot && input.expression !== undefined) {
43
+ return {
44
+ content:
45
+ "Error: Cannot change a one-shot schedule to recurring. Delete and recreate instead.",
46
+ isError: true,
47
+ };
48
+ }
49
+ if (!isExistingOneShot && input.fire_at !== undefined) {
50
+ return {
51
+ content:
52
+ "Error: Cannot change a recurring schedule to one-shot. Delete and recreate instead.",
53
+ isError: true,
54
+ };
55
+ }
56
+ }
57
+
23
58
  const updates: Record<string, unknown> = {};
24
59
  if (input.name !== undefined) updates.name = input.name;
25
60
  if (input.timezone !== undefined) updates.timezone = input.timezone;
26
61
  if (input.message !== undefined) updates.message = input.message;
27
62
  if (input.enabled !== undefined) updates.enabled = input.enabled;
28
63
 
64
+ // Mode validation and pass-through
65
+ if (input.mode !== undefined) {
66
+ const mode = input.mode as ScheduleMode;
67
+ if (!VALID_MODES.includes(mode)) {
68
+ return {
69
+ content: `Error: mode must be one of: ${VALID_MODES.join(", ")}`,
70
+ isError: true,
71
+ };
72
+ }
73
+ updates.mode = mode;
74
+ }
75
+
76
+ // Routing intent validation and pass-through
77
+ if (input.routing_intent !== undefined) {
78
+ const routingIntent = input.routing_intent as RoutingIntent;
79
+ if (!VALID_ROUTING_INTENTS.includes(routingIntent)) {
80
+ return {
81
+ content: `Error: routing_intent must be one of: ${VALID_ROUTING_INTENTS.join(", ")}`,
82
+ isError: true,
83
+ };
84
+ }
85
+ updates.routingIntent = routingIntent;
86
+ }
87
+
88
+ // Routing hints pass-through
89
+ if (input.routing_hints !== undefined) {
90
+ updates.routingHints = input.routing_hints;
91
+ }
92
+
29
93
  // Auto-detect syntax when expression changes without explicit syntax
30
94
  if (input.expression !== undefined || input.syntax !== undefined) {
31
95
  const resolved = normalizeScheduleSyntax({
@@ -85,6 +149,9 @@ export async function executeScheduleUpdate(
85
149
  enabled?: boolean;
86
150
  syntax?: ScheduleSyntax;
87
151
  expression?: string;
152
+ mode?: ScheduleMode;
153
+ routingIntent?: RoutingIntent;
154
+ routingHints?: Record<string, unknown>;
88
155
  },
89
156
  );
90
157
 
@@ -93,15 +160,18 @@ export async function executeScheduleUpdate(
93
160
  }
94
161
 
95
162
  const scheduleDescription =
96
- job.syntax === "rrule"
97
- ? job.expression
98
- : describeCronExpression(job.cronExpression);
163
+ job.expression == null
164
+ ? "One-time"
165
+ : job.syntax === "rrule"
166
+ ? job.expression
167
+ : describeCronExpression(job.cronExpression);
99
168
 
100
169
  return {
101
170
  content: [
102
171
  `Schedule updated successfully.`,
103
172
  ` Name: ${job.name}`,
104
173
  ` Syntax: ${job.syntax}`,
174
+ ` Mode: ${job.mode}`,
105
175
  ` Schedule: ${scheduleDescription}${job.timezone ? ` (${job.timezone})` : ""}`,
106
176
  ` Enabled: ${job.enabled}`,
107
177
  ` Next run: ${job.enabled ? formatLocalDate(job.nextRunAt) : "n/a (disabled)"}`,