@vellumai/assistant 0.6.4 → 0.6.5

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 (717) hide show
  1. package/.prettierignore +5 -0
  2. package/ARCHITECTURE.md +32 -36
  3. package/Dockerfile +12 -0
  4. package/README.md +3 -4
  5. package/bun.lock +8 -3
  6. package/docs/architecture/integrations.md +1 -20
  7. package/docs/architecture/security.md +16 -16
  8. package/docs/error-handling.md +111 -0
  9. package/docs/skills.md +10 -10
  10. package/docs/stt-provider-onboarding.md +2 -1
  11. package/knip.json +9 -2
  12. package/node_modules/@vellumai/ces-contracts/package.json +2 -1
  13. package/node_modules/@vellumai/ces-contracts/src/__tests__/trust-rules.test.ts +471 -0
  14. package/node_modules/@vellumai/ces-contracts/src/trust-rules.ts +398 -4
  15. package/node_modules/@vellumai/credential-storage/bun.lock +2 -2
  16. package/node_modules/@vellumai/credential-storage/package.json +2 -2
  17. package/node_modules/@vellumai/credential-storage/src/oauth-runtime.ts +20 -2
  18. package/node_modules/@vellumai/egress-proxy/bun.lock +2 -2
  19. package/node_modules/@vellumai/egress-proxy/package.json +2 -2
  20. package/openapi.yaml +123 -11
  21. package/package.json +6 -3
  22. package/scripts/generate-openapi.ts +50 -11
  23. package/src/__tests__/agent-loop-callsite-precedence.test.ts +318 -0
  24. package/src/__tests__/agent-loop-sentry-hygiene.test.ts +137 -0
  25. package/src/__tests__/agent-loop.test.ts +112 -1
  26. package/src/__tests__/anthropic-error-formatting.test.ts +98 -0
  27. package/src/__tests__/anthropic-provider.test.ts +171 -2
  28. package/src/__tests__/approval-cascade.test.ts +31 -10
  29. package/src/__tests__/approval-routes-http.test.ts +134 -10
  30. package/src/__tests__/assistant-attachments.test.ts +44 -0
  31. package/src/__tests__/assistant-feature-flags-integration.test.ts +29 -0
  32. package/src/__tests__/browser-fill-credential.test.ts +1 -1
  33. package/src/__tests__/browser-identifier-parity-guard.test.ts +53 -0
  34. package/src/__tests__/browser-skill-baseline-tool-payload.test.ts +23 -33
  35. package/src/__tests__/browser-skill-endstate.test.ts +51 -182
  36. package/src/__tests__/btw-routes.test.ts +47 -1
  37. package/src/__tests__/call-controller.test.ts +1 -2
  38. package/src/__tests__/call-site-routing-provider.test.ts +214 -0
  39. package/src/__tests__/catalog-cache.test.ts +27 -4
  40. package/src/__tests__/channel-approval-routes.test.ts +4 -4
  41. package/src/__tests__/channel-reply-delivery.test.ts +300 -2
  42. package/src/__tests__/checker.test.ts +428 -501
  43. package/src/__tests__/cli-command-risk-guard.test.ts +30 -33
  44. package/src/__tests__/compaction-circuit-breaker.test.ts +336 -0
  45. package/src/__tests__/compaction.benchmark.test.ts +1 -1
  46. package/src/__tests__/config-analysis.test.ts +11 -28
  47. package/src/__tests__/config-loader-backfill.test.ts +174 -0
  48. package/src/__tests__/config-loader-corrupt.test.ts +183 -0
  49. package/src/__tests__/config-loader-quarantine-bulletin.test.ts +202 -0
  50. package/src/__tests__/config-schema-cmd.test.ts +11 -5
  51. package/src/__tests__/config-schema.test.ts +427 -114
  52. package/src/__tests__/config-watcher.test.ts +2 -2
  53. package/src/__tests__/contact-store-user-file.test.ts +72 -73
  54. package/src/__tests__/contacts-write.test.ts +4 -4
  55. package/src/__tests__/context-token-estimator.test.ts +191 -1
  56. package/src/__tests__/context-window-manager.test.ts +530 -2
  57. package/src/__tests__/conversation-abort-tool-results.test.ts +30 -16
  58. package/src/__tests__/conversation-agent-loop-overflow.test.ts +61 -17
  59. package/src/__tests__/conversation-agent-loop.test.ts +412 -82
  60. package/src/__tests__/conversation-attachments.test.ts +1 -1
  61. package/src/__tests__/conversation-confirmation-signals.test.ts +30 -9
  62. package/src/__tests__/conversation-error.test.ts +37 -6
  63. package/src/__tests__/conversation-history-web-search.test.ts +6 -0
  64. package/src/__tests__/conversation-init.benchmark.test.ts +36 -0
  65. package/src/__tests__/conversation-lifecycle.test.ts +336 -0
  66. package/src/__tests__/conversation-load-history-repair.test.ts +27 -10
  67. package/src/__tests__/conversation-pre-run-repair.test.ts +30 -16
  68. package/src/__tests__/conversation-process-callsite.test.ts +306 -0
  69. package/src/__tests__/conversation-provider-retry-repair.test.ts +30 -16
  70. package/src/__tests__/conversation-queue.test.ts +41 -26
  71. package/src/__tests__/conversation-routes-disk-view.test.ts +29 -1
  72. package/src/__tests__/conversation-routes-slash-commands.test.ts +31 -3
  73. package/src/__tests__/conversation-runtime-assembly.test.ts +2735 -55
  74. package/src/__tests__/conversation-runtime-workspace.test.ts +12 -12
  75. package/src/__tests__/conversation-skill-tools.test.ts +12 -146
  76. package/src/__tests__/conversation-slash-queue.test.ts +34 -19
  77. package/src/__tests__/conversation-slash-unknown.test.ts +30 -16
  78. package/src/__tests__/conversation-speed-override.test.ts +30 -11
  79. package/src/__tests__/conversation-surfaces-standalone-payloads.test.ts +1035 -0
  80. package/src/__tests__/conversation-surfaces-standalone.test.ts +630 -0
  81. package/src/__tests__/conversation-title-service.test.ts +2 -2
  82. package/src/__tests__/conversation-tool-setup-batch-authorized.test.ts +1 -1
  83. package/src/__tests__/conversation-unread-route.test.ts +2 -2
  84. package/src/__tests__/conversation-usage.test.ts +3 -1
  85. package/src/__tests__/conversation-workspace-cache-state.test.ts +31 -10
  86. package/src/__tests__/conversation-workspace-injection.test.ts +43 -15
  87. package/src/__tests__/conversation-workspace-tool-tracking.test.ts +44 -16
  88. package/src/__tests__/credential-broker-browser-fill.test.ts +110 -0
  89. package/src/__tests__/credential-security-invariants.test.ts +3 -0
  90. package/src/__tests__/credential-storage-oauth-compat.test.ts +18 -0
  91. package/src/__tests__/credential-storage-static-compat.test.ts +28 -0
  92. package/src/__tests__/credential-vault-unit.test.ts +135 -19
  93. package/src/__tests__/credentials-cli.test.ts +1 -9
  94. package/src/__tests__/cross-provider-web-search.test.ts +84 -0
  95. package/src/__tests__/daemon-server-persist-and-process-callsite.test.ts +92 -0
  96. package/src/__tests__/delete-propagation.test.ts +437 -0
  97. package/src/__tests__/dm-backfill.test.ts +417 -0
  98. package/src/__tests__/dm-persistence.test.ts +227 -0
  99. package/src/__tests__/edit-propagation.test.ts +280 -0
  100. package/src/__tests__/ephemeral-permissions.test.ts +93 -3
  101. package/src/__tests__/estimator-calibration-integration.test.ts +208 -0
  102. package/src/__tests__/estimator-calibration.test.ts +213 -0
  103. package/src/__tests__/extension-id-sync-guard.test.ts +26 -7
  104. package/src/__tests__/file-write-tool.test.ts +151 -1
  105. package/src/__tests__/filing-service.test.ts +255 -0
  106. package/src/__tests__/gemini-provider.test.ts +0 -3
  107. package/src/__tests__/guardian-grant-minting.test.ts +8 -0
  108. package/src/__tests__/headless-browser-interactions.test.ts +1 -1
  109. package/src/__tests__/heartbeat-service.test.ts +96 -15
  110. package/src/__tests__/host-shell-tool.test.ts +124 -18
  111. package/src/__tests__/http-user-message-parity.test.ts +29 -1
  112. package/src/__tests__/inbound-slack-persistence.test.ts +340 -0
  113. package/src/__tests__/intent-routing.test.ts +1 -40
  114. package/src/__tests__/llm-catalog-parity.test.ts +174 -0
  115. package/src/__tests__/llm-context-normalization.test.ts +121 -0
  116. package/src/__tests__/llm-resolver.test.ts +214 -0
  117. package/src/__tests__/llm-schema.test.ts +223 -0
  118. package/src/__tests__/managed-proxy-context.test.ts +6 -2
  119. package/src/__tests__/messaging-skill-split.test.ts +3 -34
  120. package/src/__tests__/migration-import-from-url.test.ts +684 -0
  121. package/src/__tests__/model-intents.test.ts +9 -83
  122. package/src/__tests__/notification-decision-fallback.test.ts +0 -10
  123. package/src/__tests__/notification-decision-identity.test.ts +0 -9
  124. package/src/__tests__/notification-decision-recipient-context.test.ts +0 -9
  125. package/src/__tests__/oauth-store.test.ts +10 -7
  126. package/src/__tests__/oauth2-gateway-transport.test.ts +8 -3
  127. package/src/__tests__/oauth2-refresh-retry.test.ts +279 -0
  128. package/src/__tests__/openai-provider.test.ts +7 -0
  129. package/src/__tests__/openai-responses-provider.test.ts +396 -0
  130. package/src/__tests__/openrouter-provider-only.test.ts +135 -0
  131. package/src/__tests__/outbound-slack-persistence.test.ts +293 -0
  132. package/src/__tests__/permission-checker-host-gate.test.ts +1 -1
  133. package/src/__tests__/permission-mode.test.ts +16 -0
  134. package/src/__tests__/permission-types.test.ts +0 -1
  135. package/src/__tests__/persona-resolver.test.ts +13 -13
  136. package/src/__tests__/pkb-autoinject.test.ts +37 -1
  137. package/src/__tests__/platform-bash-auto-approve.test.ts +1 -1
  138. package/src/__tests__/pricing.test.ts +50 -3
  139. package/src/__tests__/profiler-routes.test.ts +1 -1
  140. package/src/__tests__/provider-commit-message-generator.test.ts +14 -84
  141. package/src/__tests__/provider-env-vars-scope.test.ts +52 -0
  142. package/src/__tests__/provider-error-scenarios.test.ts +135 -6
  143. package/src/__tests__/provider-managed-proxy-integration.test.ts +42 -11
  144. package/src/__tests__/provider-registry-ollama.test.ts +1 -2
  145. package/src/__tests__/proxy-approval-callback.test.ts +0 -1
  146. package/src/__tests__/reaction-persistence.test.ts +560 -0
  147. package/src/__tests__/relay-server.test.ts +1 -1
  148. package/src/__tests__/require-fresh-approval.test.ts +1 -1
  149. package/src/__tests__/retry-openrouter-only-normalization.test.ts +136 -0
  150. package/src/__tests__/retry-thinking-tool-choice.test.ts +226 -0
  151. package/src/__tests__/risk-classifier-parity.test.ts +230 -0
  152. package/src/__tests__/sanitize-config-for-transfer.test.ts +78 -1
  153. package/src/__tests__/secret-ingress-http.test.ts +28 -0
  154. package/src/__tests__/secret-prompter-channel-fallback.test.ts +125 -0
  155. package/src/__tests__/secret-routes-managed-proxy.test.ts +2 -3
  156. package/src/__tests__/secret-scanner-executor.test.ts +1 -1
  157. package/src/__tests__/send-endpoint-busy.test.ts +29 -1
  158. package/src/__tests__/server-history-render.test.ts +31 -0
  159. package/src/__tests__/shell-parser-property.test.ts +13 -13
  160. package/src/__tests__/skill-cache-store.test.ts +182 -0
  161. package/src/__tests__/skills.test.ts +19 -33
  162. package/src/__tests__/slack-app-setup-skill-regression.test.ts +3 -1
  163. package/src/__tests__/slack-skill.test.ts +3 -8
  164. package/src/__tests__/starter-bundle.test.ts +35 -0
  165. package/src/__tests__/subagent-call-site-routing.test.ts +280 -0
  166. package/src/__tests__/suggestion-routes.test.ts +160 -3
  167. package/src/__tests__/system-prompt.test.ts +22 -35
  168. package/src/__tests__/task-runner.test.ts +3 -1
  169. package/src/__tests__/tcc-sandbox-deny.test.ts +198 -0
  170. package/src/__tests__/terminal-tools.test.ts +8 -0
  171. package/src/__tests__/test-support/browser-skill-harness.ts +2 -52
  172. package/src/__tests__/thread-backfill.test.ts +941 -0
  173. package/src/__tests__/tool-execution-pipeline.benchmark.test.ts +2 -2
  174. package/src/__tests__/tool-executor-lifecycle-events.test.ts +2 -2
  175. package/src/__tests__/tool-executor.test.ts +60 -94
  176. package/src/__tests__/trust-store.test.ts +442 -109
  177. package/src/__tests__/update-bulletin-job.test.ts +389 -0
  178. package/src/__tests__/usage-cache-backfill-migration.test.ts +3 -1
  179. package/src/__tests__/verification-control-plane-policy.test.ts +1 -22
  180. package/src/__tests__/voice-session-bridge.test.ts +39 -0
  181. package/src/__tests__/volume-security-guard.test.ts +3 -2
  182. package/src/__tests__/web-search-history.test.ts +337 -0
  183. package/src/__tests__/workspace-migration-039-drop-legacy-llm-keys.test.ts +343 -0
  184. package/src/__tests__/workspace-migration-043-release-notes-latex-rendering.test.ts +202 -0
  185. package/src/__tests__/workspace-migration-045-release-notes-meet-avatar.test.ts +210 -0
  186. package/src/__tests__/workspace-migration-drop-user-md.test.ts +11 -11
  187. package/src/__tests__/workspace-migration-unify-llm-callsite-configs.test.ts +841 -0
  188. package/src/__tests__/workspace-policy.test.ts +1 -13
  189. package/src/acp/client-handler.ts +1 -2
  190. package/src/agent/loop.ts +209 -17
  191. package/src/avatar/resvg-lazy.test.ts +136 -0
  192. package/src/avatar/resvg-lazy.ts +82 -9
  193. package/src/avatar/traits-png-sync.ts +21 -1
  194. package/src/browser/__tests__/operations.test.ts +163 -0
  195. package/src/browser/identifiers.ts +51 -0
  196. package/src/browser/operations.ts +660 -0
  197. package/src/browser/types.ts +81 -0
  198. package/src/calls/guardian-question-copy.ts +2 -2
  199. package/src/calls/telephony-stt-routing.ts +1 -1
  200. package/src/calls/voice-session-bridge.ts +1 -0
  201. package/src/cli/AGENTS.md +1 -1
  202. package/src/cli/commands/__tests__/attachment.test.ts +438 -0
  203. package/src/cli/commands/__tests__/browser.test.ts +554 -0
  204. package/src/cli/commands/__tests__/cache.test.ts +623 -0
  205. package/src/cli/commands/__tests__/email-list.test.ts +6 -0
  206. package/src/cli/commands/__tests__/email-send.test.ts +93 -1
  207. package/src/cli/commands/__tests__/image-generation.test.ts +666 -0
  208. package/src/cli/commands/__tests__/inference-send.test.ts +451 -0
  209. package/src/cli/commands/__tests__/stt-transcribe.test.ts +454 -0
  210. package/src/cli/commands/__tests__/task.test.ts +913 -0
  211. package/src/cli/commands/__tests__/tts-synthesize.test.ts +594 -0
  212. package/src/cli/commands/__tests__/ui-confirm.test.ts +650 -0
  213. package/src/cli/commands/__tests__/ui.test.ts +1215 -0
  214. package/src/cli/commands/__tests__/watchers.test.ts +716 -0
  215. package/src/cli/commands/attachment.ts +182 -0
  216. package/src/cli/commands/browser.ts +350 -0
  217. package/src/cli/commands/cache.ts +341 -0
  218. package/src/cli/commands/completions.ts +0 -3
  219. package/src/cli/commands/config.ts +6 -6
  220. package/src/cli/commands/conversations-import.ts +347 -0
  221. package/src/cli/commands/conversations.ts +14 -1
  222. package/src/cli/commands/email.ts +234 -194
  223. package/src/cli/commands/image-generation.ts +300 -0
  224. package/src/cli/commands/inference.ts +200 -0
  225. package/src/cli/commands/memory.ts +127 -17
  226. package/src/cli/commands/platform/__tests__/callback-routes-list.test.ts +0 -1
  227. package/src/cli/commands/platform/__tests__/connect.test.ts +0 -1
  228. package/src/cli/commands/platform/__tests__/disconnect.test.ts +0 -1
  229. package/src/cli/commands/platform/__tests__/status.test.ts +0 -1
  230. package/src/cli/commands/stt.ts +339 -0
  231. package/src/cli/commands/task.ts +795 -0
  232. package/src/cli/commands/trust.ts +50 -19
  233. package/src/cli/commands/tts.ts +273 -0
  234. package/src/cli/commands/ui.ts +670 -0
  235. package/src/cli/commands/watchers.ts +509 -0
  236. package/src/cli/lib/daemon-credential-client.ts +0 -19
  237. package/src/cli/program.ts +23 -4
  238. package/src/cli.ts +0 -37
  239. package/src/config/bundled-skills/conversations/tools/rename-conversation.ts +23 -1
  240. package/src/config/bundled-skills/media-processing/services/reduce.ts +1 -1
  241. package/src/config/bundled-skills/messaging/SKILL.md +2 -2
  242. package/src/config/bundled-skills/messaging/TOOLS.json +4 -0
  243. package/src/config/bundled-skills/messaging/tools/messaging-archive-by-sender.ts +8 -1
  244. package/src/config/bundled-skills/messaging/tools/messaging-read.ts +15 -1
  245. package/src/config/bundled-skills/messaging/tools/messaging-search.ts +21 -1
  246. package/src/config/bundled-skills/messaging/tools/messaging-send.ts +11 -12
  247. package/src/config/bundled-skills/phone-calls/references/CONFIG.md +9 -8
  248. package/src/config/bundled-skills/settings/TOOLS.json +3 -3
  249. package/src/config/bundled-tool-registry.ts +0 -175
  250. package/src/config/env.ts +7 -2
  251. package/src/config/feature-flag-registry.json +25 -9
  252. package/src/config/llm-resolver.ts +128 -0
  253. package/src/config/loader.ts +194 -10
  254. package/src/config/raw-config-utils.ts +30 -2
  255. package/src/config/sanitize-for-transfer.ts +35 -0
  256. package/src/config/schema.ts +30 -41
  257. package/src/config/schemas/analysis.ts +3 -22
  258. package/src/config/schemas/calls.ts +0 -4
  259. package/src/config/schemas/filing.ts +2 -7
  260. package/src/config/schemas/heartbeat.ts +0 -5
  261. package/src/config/schemas/inference.ts +3 -23
  262. package/src/config/schemas/llm.ts +318 -0
  263. package/src/config/schemas/memory-processing.ts +1 -9
  264. package/src/config/schemas/notifications.ts +4 -11
  265. package/src/config/schemas/platform.ts +3 -9
  266. package/src/config/schemas/security.ts +33 -0
  267. package/src/config/schemas/services.ts +9 -4
  268. package/src/config/schemas/stt.ts +1 -0
  269. package/src/config/schemas/tts.ts +53 -0
  270. package/src/config/schemas/updates.ts +1 -1
  271. package/src/config/schemas/workspace-git.ts +3 -40
  272. package/src/config/skills.ts +2 -2
  273. package/src/context/__tests__/compact-prompt.test.ts +45 -0
  274. package/src/context/__tests__/microcompact.test.ts +805 -0
  275. package/src/context/estimator-calibration.ts +136 -0
  276. package/src/context/microcompact.ts +443 -0
  277. package/src/context/prompts/compact.md +12 -0
  278. package/src/context/token-estimator.ts +61 -3
  279. package/src/context/window-manager.ts +229 -25
  280. package/src/credential-execution/approval-bridge.ts +0 -1
  281. package/src/credential-execution/executable-discovery.ts +19 -8
  282. package/src/credential-execution/process-manager.test.ts +109 -0
  283. package/src/credential-execution/process-manager.ts +65 -2
  284. package/src/daemon/approval-generators.ts +29 -4
  285. package/src/daemon/assistant-attachments.ts +24 -13
  286. package/src/daemon/classifier.ts +2 -2
  287. package/src/daemon/config-watcher.ts +0 -1
  288. package/src/daemon/context-overflow-reducer.ts +4 -1
  289. package/src/daemon/conversation-agent-loop-handlers.ts +79 -12
  290. package/src/daemon/conversation-agent-loop.ts +462 -80
  291. package/src/daemon/conversation-attachments.ts +2 -6
  292. package/src/daemon/conversation-error.ts +36 -1
  293. package/src/daemon/conversation-lifecycle.ts +30 -6
  294. package/src/daemon/conversation-messaging.ts +73 -4
  295. package/src/daemon/conversation-process.ts +10 -4
  296. package/src/daemon/conversation-queue-manager.ts +3 -0
  297. package/src/daemon/conversation-runtime-assembly.ts +760 -29
  298. package/src/daemon/conversation-slash.ts +2 -2
  299. package/src/daemon/conversation-surfaces.ts +389 -1
  300. package/src/daemon/conversation-tool-setup.ts +10 -5
  301. package/src/daemon/conversation-usage.ts +1 -1
  302. package/src/daemon/conversation.ts +118 -30
  303. package/src/daemon/external-skills-bootstrap.ts +41 -0
  304. package/src/daemon/guardian-action-generators.ts +34 -14
  305. package/src/daemon/handlers/config-model.test.ts +86 -0
  306. package/src/daemon/handlers/config-model.ts +54 -12
  307. package/src/daemon/handlers/conversations.ts +9 -2
  308. package/src/daemon/handlers/shared.ts +39 -11
  309. package/src/daemon/handlers/skills.ts +2 -2
  310. package/src/daemon/handlers/slack-channel-oauth-install.ts +197 -0
  311. package/src/daemon/lifecycle.ts +76 -14
  312. package/src/daemon/message-types/conversations.ts +14 -0
  313. package/src/daemon/message-types/messages.ts +9 -1
  314. package/src/daemon/message-types/trust.ts +0 -2
  315. package/src/daemon/parse-actual-tokens-from-error.test.ts +57 -1
  316. package/src/daemon/parse-actual-tokens-from-error.ts +66 -0
  317. package/src/daemon/pkb-context-tracker.test.ts +169 -0
  318. package/src/daemon/pkb-context-tracker.ts +125 -0
  319. package/src/daemon/pkb-reminder-builder.test.ts +70 -0
  320. package/src/daemon/pkb-reminder-builder.ts +31 -0
  321. package/src/daemon/providers-setup.ts +6 -0
  322. package/src/daemon/server.ts +117 -9
  323. package/src/daemon/tool-side-effects.ts +0 -9
  324. package/src/daemon/watch-handler.ts +4 -4
  325. package/src/daemon/web-search-history.ts +126 -0
  326. package/src/events/domain-events.ts +0 -1
  327. package/src/filing/filing-service.ts +9 -10
  328. package/src/heartbeat/heartbeat-service.ts +76 -28
  329. package/src/home/__tests__/feed-scheduler.test.ts +39 -11
  330. package/src/home/__tests__/rollup-producer.test.ts +44 -0
  331. package/src/home/assistant-feed-authoring.ts +4 -0
  332. package/src/home/emit-feed-event.ts +4 -0
  333. package/src/home/feed-scheduler.ts +20 -4
  334. package/src/home/feed-types.ts +56 -2
  335. package/src/home/relationship-state-writer.ts +2 -2
  336. package/src/home/rollup-producer.ts +34 -5
  337. package/src/home/suggested-prompts.ts +101 -0
  338. package/src/ipc/__tests__/attachment-ipc.test.ts +213 -0
  339. package/src/ipc/__tests__/browser-ipc.test.ts +339 -0
  340. package/src/ipc/__tests__/cache-ipc.test.ts +266 -0
  341. package/src/ipc/__tests__/socket-path.test.ts +73 -0
  342. package/src/ipc/__tests__/task-ipc.test.ts +577 -0
  343. package/src/ipc/__tests__/ui-request-route.test.ts +495 -0
  344. package/src/ipc/__tests__/watcher-ipc.test.ts +295 -0
  345. package/src/ipc/cli-client.ts +2 -1
  346. package/src/ipc/cli-server.ts +26 -8
  347. package/src/ipc/gateway-client.ts +4 -4
  348. package/src/ipc/routes/attachment.ts +114 -0
  349. package/src/ipc/routes/browser-context.ts +61 -0
  350. package/src/ipc/routes/browser.ts +96 -0
  351. package/src/ipc/routes/cache.ts +96 -0
  352. package/src/ipc/routes/index.ts +17 -1
  353. package/src/ipc/routes/task-queue.ts +226 -0
  354. package/src/ipc/routes/task.ts +173 -0
  355. package/src/ipc/routes/ui-request.ts +50 -0
  356. package/src/ipc/routes/watcher.ts +203 -0
  357. package/src/ipc/socket-path.ts +100 -0
  358. package/src/memory/__tests__/conversation-analyze-job.test.ts +9 -8
  359. package/src/memory/__tests__/conversation-group-migration.test.ts +99 -0
  360. package/src/memory/admin.ts +18 -0
  361. package/src/memory/conversation-analyze-job.ts +14 -13
  362. package/src/memory/conversation-attention-store.ts +13 -6
  363. package/src/memory/conversation-crud.ts +103 -3
  364. package/src/memory/conversation-group-migration.ts +38 -6
  365. package/src/memory/conversation-title-service.ts +7 -4
  366. package/src/memory/db-init.ts +2 -0
  367. package/src/memory/embedding-backend.ts +1 -1
  368. package/src/memory/graph/compaction.ts +299 -0
  369. package/src/memory/graph/consolidation.ts +4 -4
  370. package/src/memory/graph/conversation-graph-memory.ts +89 -29
  371. package/src/memory/graph/extraction.test.ts +272 -2
  372. package/src/memory/graph/extraction.ts +173 -51
  373. package/src/memory/graph/graph-search.test.ts +92 -0
  374. package/src/memory/graph/graph-search.ts +4 -1
  375. package/src/memory/graph/narrative.ts +2 -2
  376. package/src/memory/graph/pattern-scan.ts +2 -2
  377. package/src/memory/graph/retriever.test.ts +459 -0
  378. package/src/memory/graph/retriever.ts +230 -48
  379. package/src/memory/graph/store.ts +41 -0
  380. package/src/memory/graph/tool-handlers.ts +27 -0
  381. package/src/memory/graph/tools.ts +6 -1
  382. package/src/memory/indexer.ts +5 -5
  383. package/src/memory/job-handlers/conversation-starters.ts +23 -20
  384. package/src/memory/job-handlers/summarization.ts +2 -2
  385. package/src/memory/job-utils.ts +7 -1
  386. package/src/memory/jobs/embed-pkb-file.test.ts +168 -0
  387. package/src/memory/jobs/embed-pkb-file.ts +54 -0
  388. package/src/memory/jobs-store.ts +44 -3
  389. package/src/memory/jobs-worker.ts +4 -0
  390. package/src/memory/migrations/140-backfill-usage-cache-accounting.ts +1 -1
  391. package/src/memory/migrations/220-normalize-user-file-by-principal.ts +2 -2
  392. package/src/memory/migrations/222-strip-placeholder-sentinels-from-messages.ts +82 -0
  393. package/src/memory/migrations/index.ts +1 -0
  394. package/src/memory/pkb/pkb-index.test.ts +368 -0
  395. package/src/memory/pkb/pkb-index.ts +255 -0
  396. package/src/memory/pkb/pkb-reconcile.test.ts +251 -0
  397. package/src/memory/pkb/pkb-reconcile.ts +148 -0
  398. package/src/memory/pkb/pkb-search.test.ts +438 -0
  399. package/src/memory/pkb/pkb-search.ts +137 -0
  400. package/src/memory/pkb/types.ts +53 -0
  401. package/src/memory/qdrant-client.ts +122 -1
  402. package/src/memory/slack-thread-store.ts +37 -0
  403. package/src/messaging/providers/gmail/adapter.ts +6 -16
  404. package/src/messaging/providers/gmail/client.ts +22 -0
  405. package/src/messaging/providers/gmail/types.ts +7 -0
  406. package/src/messaging/providers/slack/adapter.ts +14 -2
  407. package/src/messaging/providers/slack/backfill.test.ts +257 -0
  408. package/src/messaging/providers/slack/backfill.ts +101 -0
  409. package/src/messaging/providers/slack/message-metadata.test.ts +316 -0
  410. package/src/messaging/providers/slack/message-metadata.ts +123 -0
  411. package/src/messaging/providers/slack/render-transcript.test.ts +1373 -0
  412. package/src/messaging/providers/slack/render-transcript.ts +443 -0
  413. package/src/messaging/style-analyzer.ts +5 -2
  414. package/src/notifications/README.md +9 -5
  415. package/src/notifications/decision-engine.ts +3 -9
  416. package/src/notifications/preference-extractor.ts +2 -6
  417. package/src/oauth/oauth-store.ts +1 -0
  418. package/src/oauth/platform-connection.test.ts +47 -0
  419. package/src/oauth/platform-connection.ts +15 -5
  420. package/src/oauth/seed-providers.ts +4 -2
  421. package/src/permissions/approval-policy.test.ts +948 -0
  422. package/src/permissions/approval-policy.ts +257 -0
  423. package/src/permissions/bash-risk-classifier.test.ts +1208 -0
  424. package/src/permissions/bash-risk-classifier.ts +707 -0
  425. package/src/permissions/checker.ts +217 -708
  426. package/src/permissions/command-registry.test.ts +535 -0
  427. package/src/permissions/command-registry.ts +825 -0
  428. package/src/permissions/defaults.ts +26 -78
  429. package/src/permissions/file-risk-classifier.test.ts +535 -0
  430. package/src/permissions/file-risk-classifier.ts +274 -0
  431. package/src/permissions/risk-types.ts +205 -0
  432. package/src/permissions/secret-prompter.ts +53 -2
  433. package/src/permissions/skill-risk-classifier.test.ts +311 -0
  434. package/src/permissions/skill-risk-classifier.ts +214 -0
  435. package/src/permissions/trust-client.ts +52 -25
  436. package/src/permissions/trust-store-interface.ts +1 -6
  437. package/src/permissions/trust-store.ts +161 -62
  438. package/src/permissions/types.ts +23 -14
  439. package/src/permissions/web-risk-classifier.test.ts +170 -0
  440. package/src/permissions/web-risk-classifier.ts +89 -0
  441. package/src/permissions/workspace-policy.ts +1 -16
  442. package/src/platform/client.ts +19 -1
  443. package/src/prompts/persona-resolver.ts +3 -3
  444. package/src/prompts/system-prompt.ts +19 -20
  445. package/src/prompts/templates/SOUL.md +2 -2
  446. package/src/prompts/update-bulletin-job.ts +190 -0
  447. package/src/providers/__tests__/context-overflow-error.test.ts +328 -0
  448. package/src/providers/__tests__/provider-env-vars.test.ts +102 -0
  449. package/src/providers/__tests__/retry-callsite.test.ts +424 -0
  450. package/src/providers/anthropic/client.ts +183 -14
  451. package/src/providers/call-site-routing.ts +71 -0
  452. package/src/providers/gemini/client.ts +65 -2
  453. package/src/providers/managed-proxy/constants.ts +2 -1
  454. package/src/providers/model-catalog.ts +501 -33
  455. package/src/providers/model-intents.ts +4 -4
  456. package/src/providers/openai/chat-completions-provider.ts +57 -1
  457. package/src/providers/openai/responses-provider.ts +86 -9
  458. package/src/providers/openrouter/client.ts +76 -9
  459. package/src/providers/provider-env-vars.ts +56 -0
  460. package/src/providers/provider-send-message.ts +22 -5
  461. package/src/providers/ratelimit.ts +4 -0
  462. package/src/providers/registry.ts +19 -8
  463. package/src/providers/retry.ts +174 -39
  464. package/src/providers/speech-to-text/__tests__/resolve.test.ts +55 -0
  465. package/src/providers/speech-to-text/google-gemini-live-stream.ts +4 -4
  466. package/src/providers/speech-to-text/provider-catalog.ts +17 -0
  467. package/src/providers/speech-to-text/resolve.ts +7 -0
  468. package/src/providers/speech-to-text/xai-realtime.test.ts +578 -0
  469. package/src/providers/speech-to-text/xai-realtime.ts +796 -0
  470. package/src/providers/speech-to-text/xai.test.ts +155 -0
  471. package/src/providers/speech-to-text/xai.ts +97 -0
  472. package/src/providers/types.ts +93 -3
  473. package/src/runtime/AGENTS.md +2 -2
  474. package/src/runtime/__tests__/agent-wake.test.ts +43 -2
  475. package/src/runtime/__tests__/interactive-ui.test.ts +673 -0
  476. package/src/runtime/agent-wake.ts +63 -22
  477. package/src/runtime/auth/route-policy.ts +4 -0
  478. package/src/runtime/btw-sidechain.ts +13 -3
  479. package/src/runtime/channel-reply-delivery.ts +106 -2
  480. package/src/runtime/decision-token.ts +116 -0
  481. package/src/runtime/gateway-client.ts +2 -2
  482. package/src/runtime/http-router.ts +32 -0
  483. package/src/runtime/http-server.ts +52 -1
  484. package/src/runtime/http-types.ts +23 -1
  485. package/src/runtime/interactive-ui.ts +362 -0
  486. package/src/runtime/invite-instruction-generator.ts +2 -2
  487. package/src/runtime/migrations/__tests__/gcs-signed-url.test.ts +176 -0
  488. package/src/runtime/migrations/__tests__/vbundle-metadata-merge-integration.test.ts +390 -0
  489. package/src/runtime/migrations/__tests__/vbundle-metadata-merge.test.ts +221 -0
  490. package/src/runtime/migrations/__tests__/vbundle-streaming-importer.test.ts +1540 -0
  491. package/src/runtime/migrations/__tests__/vbundle-streaming-validator.test.ts +453 -0
  492. package/src/runtime/migrations/__tests__/vbundle-tar-stream.test.ts +222 -0
  493. package/src/runtime/migrations/gcs-signed-url.ts +162 -0
  494. package/src/runtime/migrations/vbundle-importer.ts +154 -9
  495. package/src/runtime/migrations/vbundle-metadata-merge.ts +124 -0
  496. package/src/runtime/migrations/vbundle-streaming-importer.ts +2522 -0
  497. package/src/runtime/migrations/vbundle-streaming-validator.ts +244 -0
  498. package/src/runtime/migrations/vbundle-tar-stream.ts +217 -0
  499. package/src/runtime/migrations/vbundle-validator.ts +15 -6
  500. package/src/runtime/routes/__tests__/home-feed-routes.test.ts +111 -0
  501. package/src/runtime/routes/__tests__/migration-import-credential-filter.test.ts +114 -75
  502. package/src/runtime/routes/__tests__/migration-vellum-metadata-reconcile.test.ts +246 -0
  503. package/src/runtime/routes/approval-prompt-ts-tracker.ts +58 -0
  504. package/src/runtime/routes/approval-routes.ts +12 -17
  505. package/src/runtime/routes/approval-strategies/guardian-callback-strategy.ts +9 -0
  506. package/src/runtime/routes/avatar-routes.ts +20 -4
  507. package/src/runtime/routes/btw-routes.ts +1 -4
  508. package/src/runtime/routes/conversation-management-routes.ts +20 -2
  509. package/src/runtime/routes/conversation-routes.ts +133 -27
  510. package/src/runtime/routes/debug-routes.ts +1 -1
  511. package/src/runtime/routes/diagnostics-routes.ts +6 -4
  512. package/src/runtime/routes/events-routes.ts +16 -0
  513. package/src/runtime/routes/guardian-approval-interception.ts +33 -3
  514. package/src/runtime/routes/guardian-approval-prompt.ts +13 -3
  515. package/src/runtime/routes/home-feed-routes.ts +120 -2
  516. package/src/runtime/routes/inbound-message-handler.ts +912 -2
  517. package/src/runtime/routes/inbound-stages/background-dispatch.test.ts +113 -2
  518. package/src/runtime/routes/inbound-stages/background-dispatch.ts +61 -3
  519. package/src/runtime/routes/inbound-stages/edit-intercept.ts +129 -6
  520. package/src/runtime/routes/integrations/slack/channel.ts +25 -3
  521. package/src/runtime/routes/llm-context-normalization.ts +23 -1
  522. package/src/runtime/routes/migration-routes.ts +720 -124
  523. package/src/runtime/routes/settings-routes.ts +4 -2
  524. package/src/runtime/routes/trust-rules-routes.ts +30 -14
  525. package/src/runtime/routes/work-items-routes.test.ts +1 -1
  526. package/src/runtime/routes/work-items-routes.ts +3 -2
  527. package/src/runtime/services/__tests__/analyze-conversation.test.ts +25 -43
  528. package/src/runtime/services/analyze-conversation.ts +12 -16
  529. package/src/runtime/skill-route-registry.ts +28 -6
  530. package/src/schedule/scheduler.ts +8 -0
  531. package/src/security/__tests__/provider-key-env-fallback.test.ts +119 -0
  532. package/src/security/__tests__/untrusted-content.test.ts +109 -0
  533. package/src/security/oauth2.ts +98 -35
  534. package/src/security/secure-keys.ts +7 -8
  535. package/src/security/token-manager.ts +27 -13
  536. package/src/security/untrusted-content.ts +102 -0
  537. package/src/skills/catalog-cache.ts +26 -7
  538. package/src/skills/catalog-install.ts +31 -3
  539. package/src/skills/skill-cache-store.ts +97 -0
  540. package/src/stt/__tests__/daemon-batch-transcriber.test.ts +76 -0
  541. package/src/stt/daemon-batch-transcriber.ts +33 -0
  542. package/src/stt/stt-stream-session.ts +8 -1
  543. package/src/stt/types.ts +5 -1
  544. package/src/subagent/manager.ts +41 -13
  545. package/src/tasks/ephemeral-permissions.ts +9 -4
  546. package/src/telemetry/usage-telemetry-reporter.ts +27 -5
  547. package/src/tools/browser/__tests__/browser-status.test.ts +45 -2
  548. package/src/tools/browser/browser-execution.ts +65 -38
  549. package/src/tools/browser/cdp-client/cdp-inspect/discovery.ts +22 -0
  550. package/src/tools/credentials/tool-policy.ts +39 -5
  551. package/src/tools/credentials/vault.ts +9 -4
  552. package/src/tools/executor.ts +4 -0
  553. package/src/tools/filesystem/write.ts +52 -0
  554. package/src/tools/host-terminal/host-shell.ts +45 -5
  555. package/src/tools/memory/register.test.ts +185 -0
  556. package/src/tools/memory/register.ts +3 -1
  557. package/src/tools/network/web-fetch.ts +20 -10
  558. package/src/tools/network/web-search.ts +19 -4
  559. package/src/tools/permission-checker.ts +36 -15
  560. package/src/tools/policy-context.ts +25 -8
  561. package/src/tools/registry.ts +55 -3
  562. package/src/tools/side-effects.ts +0 -11
  563. package/src/tools/skills/execute.ts +2 -2
  564. package/src/tools/skills/sandbox-runner.ts +5 -2
  565. package/src/tools/terminal/backends/native.ts +51 -2
  566. package/src/tools/terminal/safe-env.ts +3 -2
  567. package/src/tools/terminal/shell.ts +1 -0
  568. package/src/tools/tool-manifest.ts +6 -21
  569. package/src/tools/types.ts +12 -3
  570. package/src/tools/verification-control-plane-policy.ts +1 -1
  571. package/src/tts/__tests__/provider-adapters.test.ts +240 -13
  572. package/src/tts/provider-catalog.ts +18 -0
  573. package/src/tts/providers/index.ts +2 -0
  574. package/src/tts/providers/xai-provider.ts +224 -0
  575. package/src/tts/types.ts +46 -0
  576. package/src/types/tar-stream.d.ts +66 -0
  577. package/src/util/json.ts +17 -0
  578. package/src/util/platform.ts +2 -2
  579. package/src/util/pricing.ts +15 -5
  580. package/src/watcher/engine.ts +1 -1
  581. package/src/watcher/providers/google-calendar.ts +134 -8
  582. package/src/watcher/providers/outlook-calendar.ts +42 -2
  583. package/src/workspace/git-service.ts +23 -4
  584. package/src/workspace/migrations/038-unify-llm-callsite-configs.ts +516 -0
  585. package/src/workspace/migrations/039-drop-legacy-llm-keys.ts +171 -0
  586. package/src/workspace/migrations/040-seed-latency-callsite-defaults.ts +154 -0
  587. package/src/workspace/migrations/041-backfill-google-gmail-settings-scope.ts +57 -0
  588. package/src/workspace/migrations/042-fix-backfill-google-gmail-settings-scope.ts +70 -0
  589. package/src/workspace/migrations/043-release-notes-latex-rendering.ts +75 -0
  590. package/src/workspace/migrations/044-bump-stale-provider-stream-timeout.ts +51 -0
  591. package/src/workspace/migrations/045-release-notes-meet-avatar.ts +130 -0
  592. package/src/workspace/migrations/AGENTS.md +1 -1
  593. package/src/workspace/migrations/registry.ts +16 -0
  594. package/src/workspace/provider-commit-message-generator.ts +19 -38
  595. package/src/__tests__/gmail-archive-fallback.test.ts +0 -193
  596. package/src/__tests__/gmail-archive-gate.test.ts +0 -246
  597. package/src/__tests__/gmail-preferences.test.ts +0 -117
  598. package/src/__tests__/outlook-attachments.test.ts +0 -301
  599. package/src/__tests__/outlook-automation-tools.test.ts +0 -425
  600. package/src/__tests__/outlook-categories.test.ts +0 -212
  601. package/src/__tests__/outlook-compose-tools.test.ts +0 -325
  602. package/src/__tests__/outlook-declutter-tools.test.ts +0 -585
  603. package/src/__tests__/outlook-follow-up.test.ts +0 -196
  604. package/src/__tests__/outlook-trash.test.ts +0 -77
  605. package/src/__tests__/outlook-unsubscribe.test.ts +0 -279
  606. package/src/__tests__/update-bulletin-format.test.ts +0 -181
  607. package/src/__tests__/update-bulletin-state.test.ts +0 -135
  608. package/src/__tests__/update-bulletin.test.ts +0 -478
  609. package/src/__tests__/update-template-contract.test.ts +0 -29
  610. package/src/cli/commands/doctor.ts +0 -341
  611. package/src/config/bundled-skills/browser/SKILL.md +0 -88
  612. package/src/config/bundled-skills/browser/TOOLS.json +0 -516
  613. package/src/config/bundled-skills/browser/tools/browser-attach.ts +0 -12
  614. package/src/config/bundled-skills/browser/tools/browser-click.ts +0 -12
  615. package/src/config/bundled-skills/browser/tools/browser-close.ts +0 -12
  616. package/src/config/bundled-skills/browser/tools/browser-detach.ts +0 -12
  617. package/src/config/bundled-skills/browser/tools/browser-extract.ts +0 -12
  618. package/src/config/bundled-skills/browser/tools/browser-fill-credential.ts +0 -12
  619. package/src/config/bundled-skills/browser/tools/browser-hover.ts +0 -12
  620. package/src/config/bundled-skills/browser/tools/browser-navigate.ts +0 -12
  621. package/src/config/bundled-skills/browser/tools/browser-press-key.ts +0 -12
  622. package/src/config/bundled-skills/browser/tools/browser-screenshot.ts +0 -12
  623. package/src/config/bundled-skills/browser/tools/browser-scroll.ts +0 -12
  624. package/src/config/bundled-skills/browser/tools/browser-select-option.ts +0 -12
  625. package/src/config/bundled-skills/browser/tools/browser-snapshot.ts +0 -12
  626. package/src/config/bundled-skills/browser/tools/browser-status.ts +0 -12
  627. package/src/config/bundled-skills/browser/tools/browser-type.ts +0 -12
  628. package/src/config/bundled-skills/browser/tools/browser-wait-for-download.ts +0 -49
  629. package/src/config/bundled-skills/browser/tools/browser-wait-for.ts +0 -12
  630. package/src/config/bundled-skills/chatgpt-import/SKILL.md +0 -27
  631. package/src/config/bundled-skills/chatgpt-import/TOOLS.json +0 -27
  632. package/src/config/bundled-skills/chatgpt-import/tools/chatgpt-import.ts +0 -378
  633. package/src/config/bundled-skills/gmail/SKILL.md +0 -221
  634. package/src/config/bundled-skills/gmail/TOOLS.json +0 -588
  635. package/src/config/bundled-skills/gmail/tools/gmail-archive.ts +0 -256
  636. package/src/config/bundled-skills/gmail/tools/gmail-attachments.ts +0 -112
  637. package/src/config/bundled-skills/gmail/tools/gmail-draft.ts +0 -44
  638. package/src/config/bundled-skills/gmail/tools/gmail-filters.ts +0 -81
  639. package/src/config/bundled-skills/gmail/tools/gmail-follow-up.ts +0 -108
  640. package/src/config/bundled-skills/gmail/tools/gmail-forward.ts +0 -146
  641. package/src/config/bundled-skills/gmail/tools/gmail-label.ts +0 -53
  642. package/src/config/bundled-skills/gmail/tools/gmail-outreach-scan.ts +0 -347
  643. package/src/config/bundled-skills/gmail/tools/gmail-preferences-tool.ts +0 -59
  644. package/src/config/bundled-skills/gmail/tools/gmail-preferences.ts +0 -82
  645. package/src/config/bundled-skills/gmail/tools/gmail-send-draft.ts +0 -26
  646. package/src/config/bundled-skills/gmail/tools/gmail-sender-digest.ts +0 -347
  647. package/src/config/bundled-skills/gmail/tools/gmail-trash.ts +0 -29
  648. package/src/config/bundled-skills/gmail/tools/gmail-unsubscribe.ts +0 -122
  649. package/src/config/bundled-skills/gmail/tools/gmail-vacation.ts +0 -67
  650. package/src/config/bundled-skills/gmail/tools/scan-result-store.ts +0 -100
  651. package/src/config/bundled-skills/gmail/tools/shared.ts +0 -47
  652. package/src/config/bundled-skills/google-calendar/SKILL.md +0 -51
  653. package/src/config/bundled-skills/google-calendar/TOOLS.json +0 -226
  654. package/src/config/bundled-skills/google-calendar/calendar-client.ts +0 -223
  655. package/src/config/bundled-skills/google-calendar/tools/calendar-check-availability.ts +0 -27
  656. package/src/config/bundled-skills/google-calendar/tools/calendar-create-event.ts +0 -48
  657. package/src/config/bundled-skills/google-calendar/tools/calendar-get-event.ts +0 -19
  658. package/src/config/bundled-skills/google-calendar/tools/calendar-list-events.ts +0 -36
  659. package/src/config/bundled-skills/google-calendar/tools/calendar-rsvp.ts +0 -58
  660. package/src/config/bundled-skills/google-calendar/tools/shared.ts +0 -17
  661. package/src/config/bundled-skills/google-calendar/types.ts +0 -97
  662. package/src/config/bundled-skills/outlook/SKILL.md +0 -196
  663. package/src/config/bundled-skills/outlook/TOOLS.json +0 -530
  664. package/src/config/bundled-skills/outlook/tools/outlook-attachments.ts +0 -85
  665. package/src/config/bundled-skills/outlook/tools/outlook-categories.ts +0 -77
  666. package/src/config/bundled-skills/outlook/tools/outlook-draft.ts +0 -84
  667. package/src/config/bundled-skills/outlook/tools/outlook-follow-up.ts +0 -94
  668. package/src/config/bundled-skills/outlook/tools/outlook-forward.ts +0 -49
  669. package/src/config/bundled-skills/outlook/tools/outlook-outreach-scan.ts +0 -237
  670. package/src/config/bundled-skills/outlook/tools/outlook-rules.ts +0 -161
  671. package/src/config/bundled-skills/outlook/tools/outlook-send-draft.ts +0 -32
  672. package/src/config/bundled-skills/outlook/tools/outlook-sender-digest.ts +0 -272
  673. package/src/config/bundled-skills/outlook/tools/outlook-trash.ts +0 -29
  674. package/src/config/bundled-skills/outlook/tools/outlook-unsubscribe.ts +0 -129
  675. package/src/config/bundled-skills/outlook/tools/outlook-vacation.ts +0 -87
  676. package/src/config/bundled-skills/outlook/tools/shared.ts +0 -20
  677. package/src/config/bundled-skills/outlook-calendar/SKILL.md +0 -51
  678. package/src/config/bundled-skills/outlook-calendar/TOOLS.json +0 -221
  679. package/src/config/bundled-skills/outlook-calendar/calendar-client.ts +0 -252
  680. package/src/config/bundled-skills/outlook-calendar/tools/outlook-calendar-check-availability.ts +0 -53
  681. package/src/config/bundled-skills/outlook-calendar/tools/outlook-calendar-create-event.ts +0 -74
  682. package/src/config/bundled-skills/outlook-calendar/tools/outlook-calendar-get-event.ts +0 -18
  683. package/src/config/bundled-skills/outlook-calendar/tools/outlook-calendar-list-events.ts +0 -46
  684. package/src/config/bundled-skills/outlook-calendar/tools/outlook-calendar-rsvp.ts +0 -36
  685. package/src/config/bundled-skills/outlook-calendar/tools/shared.ts +0 -17
  686. package/src/config/bundled-skills/outlook-calendar/types.ts +0 -120
  687. package/src/config/bundled-skills/slack/SKILL.md +0 -108
  688. package/src/config/bundled-skills/tasks/SKILL.md +0 -37
  689. package/src/config/bundled-skills/tasks/TOOLS.json +0 -353
  690. package/src/config/bundled-skills/tasks/icon.svg +0 -34
  691. package/src/config/bundled-skills/tasks/tools/task-delete.ts +0 -12
  692. package/src/config/bundled-skills/tasks/tools/task-list-add.ts +0 -12
  693. package/src/config/bundled-skills/tasks/tools/task-list-remove.ts +0 -12
  694. package/src/config/bundled-skills/tasks/tools/task-list-show.ts +0 -12
  695. package/src/config/bundled-skills/tasks/tools/task-list-update.ts +0 -12
  696. package/src/config/bundled-skills/tasks/tools/task-list.ts +0 -12
  697. package/src/config/bundled-skills/tasks/tools/task-queue-run.ts +0 -12
  698. package/src/config/bundled-skills/tasks/tools/task-run.ts +0 -12
  699. package/src/config/bundled-skills/tasks/tools/task-save.ts +0 -12
  700. package/src/config/bundled-skills/watcher/SKILL.md +0 -31
  701. package/src/config/bundled-skills/watcher/TOOLS.json +0 -167
  702. package/src/config/bundled-skills/watcher/tools/watcher-create.ts +0 -12
  703. package/src/config/bundled-skills/watcher/tools/watcher-delete.ts +0 -12
  704. package/src/config/bundled-skills/watcher/tools/watcher-digest.ts +0 -12
  705. package/src/config/bundled-skills/watcher/tools/watcher-list.ts +0 -12
  706. package/src/config/bundled-skills/watcher/tools/watcher-update.ts +0 -12
  707. package/src/prompts/templates/UPDATES.md +0 -50
  708. package/src/prompts/update-bulletin-format.ts +0 -85
  709. package/src/prompts/update-bulletin-state.ts +0 -58
  710. package/src/prompts/update-bulletin-template-path.ts +0 -13
  711. package/src/prompts/update-bulletin.ts +0 -139
  712. package/src/shared/provider-env-vars.ts +0 -19
  713. package/src/tools/watcher/create.ts +0 -86
  714. package/src/tools/watcher/delete.ts +0 -36
  715. package/src/tools/watcher/digest.ts +0 -54
  716. package/src/tools/watcher/list.ts +0 -83
  717. package/src/tools/watcher/update.ts +0 -71
@@ -39,7 +39,12 @@ export async function run(
39
39
  // Persist with isAutoTitle = 0 so auto-generation won't overwrite it
40
40
  updateConversationTitle(conversationId, trimmedTitle, 0);
41
41
 
42
- // Notify connected clients so the UI updates immediately
42
+ // Notify the client currently viewing this conversation so the header
43
+ // updates in-place. Scoped to this conversation so foreign
44
+ // `conversationId` values don't leak to other subscribers' speculative
45
+ // ID-resolution paths. Other clients learn about the rename via the
46
+ // unscoped `conversation_list_invalidated` published below, which
47
+ // triggers their sidebars to refetch and pick up the new title.
43
48
  const assistantId = context.assistantId ?? DAEMON_INTERNAL_ASSISTANT_ID;
44
49
  assistantEventHub
45
50
  .publish(
@@ -57,6 +62,23 @@ export async function run(
57
62
  log.warn({ err }, "Failed to publish conversation_title_updated event");
58
63
  });
59
64
 
65
+ // Broadcast `conversation_list_invalidated` unscoped so every connected
66
+ // client's sidebar refetches and picks up the renamed title. Mirrors
67
+ // the HTTP rename route in `conversation-management-routes.ts`.
68
+ assistantEventHub
69
+ .publish(
70
+ buildAssistantEvent(assistantId, {
71
+ type: "conversation_list_invalidated",
72
+ reason: "renamed",
73
+ }),
74
+ )
75
+ .catch((err) => {
76
+ log.warn(
77
+ { err },
78
+ "Failed to publish conversation_list_invalidated for rename",
79
+ );
80
+ });
81
+
60
82
  log.info({ conversationId, title: trimmedTitle }, "Conversation renamed");
61
83
 
62
84
  return {
@@ -179,7 +179,7 @@ async function sendToClaude(
179
179
  model?: string,
180
180
  onProgress?: (msg: string) => void,
181
181
  ): Promise<ReduceResult> {
182
- const provider = await getConfiguredProvider();
182
+ const provider = await getConfiguredProvider("mainAgent");
183
183
  if (!provider) {
184
184
  throw new Error("No LLM provider available. Please configure an API key.");
185
185
  }
@@ -177,7 +177,7 @@ Medium and high risk tools require a confidence score between 0 and 1:
177
177
 
178
178
  When a user asks to declutter, clean up, or organize their email:
179
179
 
180
- - **Gmail connected**: Load the **gmail** skill, which has the full decluttering workflow with `gmail_sender_digest`, `gmail_archive`, `gmail_unsubscribe`, and `gmail_filters`.
180
+ - **Gmail connected**: Load the **gmail** skill, which has the full decluttering workflow with sender-digest scanning, batch archiving, unsubscribe support, and filter management.
181
181
  - **Non-Gmail email connected**: Use the generic tools (`messaging_sender_digest`, `messaging_archive_by_sender`) - they work with any provider that supports these operations. Skip unsubscribe and filter offers since they are Gmail-specific.
182
182
  - **Nothing connected**: Ask which email provider they use. If it's Gmail, go straight into the Gmail connection flow. For other providers, let the user know only Gmail is supported right now and offer to set up Gmail instead. Don't present a menu of options or explain what OAuth is.
183
183
 
@@ -195,4 +195,4 @@ When a user asks to declutter, clean up, or organize their email:
195
195
 
196
196
  ### Query-Based Archiving
197
197
 
198
- Unlike Gmail's `gmail_archive` (which supports `scan_id` + `sender_ids`), `messaging_archive_by_sender` is query-based. Build `from:<email>` queries from the sender digest results to target specific senders. Include the same date/category filters used in the original scan to keep the scope consistent.
198
+ Unlike the Gmail skill's archive script (which supports `cache_key` + sender emails), `messaging_archive_by_sender` is query-based. Build `from:<email>` queries from the sender digest results to target specific senders. Include the same date/category filters used in the original scan to keep the scope consistent.
@@ -374,6 +374,10 @@
374
374
  "activity": {
375
375
  "type": "string",
376
376
  "description": "Brief non-technical explanation of why this tool is being called"
377
+ },
378
+ "user_approved": {
379
+ "type": "boolean",
380
+ "description": "Set to true ONLY when the user's most recent message contains explicit approval language for this specific action (e.g. 'archive these', 'yes do it', 'go ahead'). Do NOT set this when the user merely described what they want without confirming, or when acting on prior instructions without fresh confirmation in this turn."
377
381
  }
378
382
  },
379
383
  "required": ["query", "confidence"]
@@ -8,7 +8,14 @@ export async function run(
8
8
  input: Record<string, unknown>,
9
9
  context: ToolContext,
10
10
  ): Promise<ToolExecutionResult> {
11
- if (!context.triggeredBySurfaceAction && !context.batchAuthorizedByTask) {
11
+ const userApproved =
12
+ input.user_approved === true && context.trustClass === "guardian";
13
+ if (
14
+ !context.triggeredBySurfaceAction &&
15
+ !context.batchAuthorizedByTask &&
16
+ !context.approvedViaPrompt &&
17
+ !userApproved
18
+ ) {
12
19
  return err(
13
20
  "This tool requires either a surface action or a scheduled task run with this tool in required_tools. Present results in a selection table with action buttons and wait for the user to click before proceeding.",
14
21
  );
@@ -1,9 +1,23 @@
1
+ import type { Message } from "../../../../messaging/provider-types.js";
2
+ import { wrapUntrustedContent } from "../../../../security/untrusted-content.js";
1
3
  import type {
2
4
  ToolContext,
3
5
  ToolExecutionResult,
4
6
  } from "../../../../tools/types.js";
5
7
  import { err, getProviderConnection, ok, resolveProvider } from "./shared.js";
6
8
 
9
+ function wrapMessageContent(msg: Message): Message {
10
+ const source =
11
+ msg.platform === "gmail" || msg.platform === "outlook" ? "email" : "slack";
12
+ return {
13
+ ...msg,
14
+ text: wrapUntrustedContent(msg.text, {
15
+ source,
16
+ sourceDetail: msg.sender.email ?? msg.sender.name,
17
+ }),
18
+ };
19
+ }
20
+
7
21
  export async function run(
8
22
  input: Record<string, unknown>,
9
23
  _context: ToolContext,
@@ -32,7 +46,7 @@ export async function run(
32
46
  } else {
33
47
  messages = await provider.getHistory(conn, conversationId, { limit });
34
48
  }
35
- return ok(JSON.stringify(messages, null, 2));
49
+ return ok(JSON.stringify(messages.map(wrapMessageContent), null, 2));
36
50
  } catch (e) {
37
51
  return err(e instanceof Error ? e.message : String(e));
38
52
  }
@@ -1,9 +1,23 @@
1
+ import type { Message } from "../../../../messaging/provider-types.js";
2
+ import { wrapUntrustedContent } from "../../../../security/untrusted-content.js";
1
3
  import type {
2
4
  ToolContext,
3
5
  ToolExecutionResult,
4
6
  } from "../../../../tools/types.js";
5
7
  import { err, getProviderConnection, ok, resolveProvider } from "./shared.js";
6
8
 
9
+ function wrapMessageContent(msg: Message): Message {
10
+ const source =
11
+ msg.platform === "gmail" || msg.platform === "outlook" ? "email" : "slack";
12
+ return {
13
+ ...msg,
14
+ text: wrapUntrustedContent(msg.text, {
15
+ source,
16
+ sourceDetail: msg.sender.email ?? msg.sender.name,
17
+ }),
18
+ };
19
+ }
20
+
7
21
  export async function run(
8
22
  input: Record<string, unknown>,
9
23
  _context: ToolContext,
@@ -21,7 +35,13 @@ export async function run(
21
35
  const account = input.account as string | undefined;
22
36
  const conn = await getProviderConnection(provider, account);
23
37
  const result = await provider.search(conn, query, { count: maxResults });
24
- return ok(JSON.stringify(result, null, 2));
38
+ return ok(
39
+ JSON.stringify(
40
+ { ...result, messages: result.messages.map(wrapMessageContent) },
41
+ null,
42
+ 2,
43
+ ),
44
+ );
25
45
  } catch (e) {
26
46
  return err(e instanceof Error ? e.message : String(e));
27
47
  }
@@ -8,11 +8,10 @@ import {
8
8
  import { syncMessageToDisk } from "../../../../memory/conversation-disk-view.js";
9
9
  import { getBindingByChannelChat } from "../../../../memory/external-conversation-store.js";
10
10
  import {
11
- batchGetMessages,
12
11
  createDraft,
13
12
  createDraftRaw,
14
13
  getProfile,
15
- listMessages,
14
+ getThread,
16
15
  } from "../../../../messaging/providers/gmail/client.js";
17
16
  import { buildMultipartMime } from "../../../../messaging/providers/gmail/mime-builder.js";
18
17
  import type {
@@ -72,19 +71,19 @@ export async function run(
72
71
  const gmailConn = conn;
73
72
  // Reply mode: thread_id provided - create a threaded draft with reply-all recipients
74
73
  if (threadId) {
75
- // Fetch thread messages to extract recipients and threading headers
76
- const list = await listMessages(gmailConn, `thread:${threadId}`, 10);
77
- if (!list.messages?.length) {
74
+ // Fetch thread messages directly via Threads API
75
+ const thread = await getThread(gmailConn, threadId, "metadata", [
76
+ "From",
77
+ "To",
78
+ "Cc",
79
+ "Message-ID",
80
+ "Subject",
81
+ ]);
82
+ const messages = thread.messages ?? [];
83
+ if (!messages.length) {
78
84
  return err("No messages found in this thread.");
79
85
  }
80
86
 
81
- const messages = await batchGetMessages(
82
- gmailConn,
83
- list.messages.map((m) => m.id),
84
- "metadata",
85
- ["From", "To", "Cc", "Message-ID", "Subject"],
86
- );
87
-
88
87
  // Use the latest message for threading and recipient extraction
89
88
  const latest = messages[messages.length - 1];
90
89
  const latestHeaders = latest.payload?.headers ?? [];
@@ -10,23 +10,24 @@ All call-related settings can be managed via `assistant config`:
10
10
  | `calls.userConsultTimeoutSeconds` | How long to wait for user answers | `120` (2 min) |
11
11
  | `calls.disclosure.enabled` | Whether the AI announces itself at call start | `true` |
12
12
  | `calls.disclosure.text` | The disclosure message spoken at call start | `"At the very beginning of the call, introduce yourself as an assistant calling on behalf of my human."` |
13
- | `calls.model` | Override LLM model for call orchestration | _(uses default model)_ |
13
+ | `llm.callSites.callAgent.model` | Override LLM model for call orchestration | _(unset — falls back to `llm.default.model`)_ |
14
14
  | `calls.callerIdentity.allowPerCallOverride` | Allow per-call caller identity selection | `true` |
15
15
  | `calls.callerIdentity.userNumber` | E.164 phone number for user-number mode | _(empty)_ |
16
16
  | `calls.voice.language` | Language code for TTS and transcription | `en-US` |
17
- | `services.stt.provider` | STT provider for transcription and telephony. Determines the Twilio integration path at call setup time (Deepgram/Google use native ConversationRelay; OpenAI Whisper uses media-stream). | `deepgram` |
18
- | `services.tts.provider` | Active TTS provider for speech synthesis. Must be a provider ID from the catalog (`elevenlabs`, `fish-audio`, `deepgram`). New providers can be added via the catalog without code changes to call routing. | `elevenlabs` |
17
+ | `services.stt.provider` | STT provider for transcription and telephony. Determines the Twilio integration path at call setup time (Deepgram/Google use native ConversationRelay; OpenAI Whisper and xAI use media-stream). | `deepgram` |
18
+ | `services.tts.provider` | Active TTS provider for speech synthesis. Must be a provider ID from the catalog (`elevenlabs`, `fish-audio`, `deepgram`, `xai`). New providers can be added via the catalog without code changes to call routing. | `elevenlabs` |
19
19
  | `services.tts.providers.<id>.*` | Provider-specific settings block. Each catalog provider has its own settings namespace under `services.tts.providers.<id>`. See voice settings in the desktop/iOS app or run `assistant config list` for available settings per provider. | _(per-provider defaults)_ |
20
20
 
21
21
  ## TTS provider call-path behavior
22
22
 
23
23
  Each TTS provider uses one of two call-path modes during phone calls:
24
24
 
25
- | Provider | Call mode | Description |
26
- | ------------ | ------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
27
- | `elevenlabs` | `native-twilio` | Text tokens are forwarded to Twilio's ConversationRelay, which synthesizes audio via its built-in ElevenLabs integration. |
28
- | `fish-audio` | `synthesized-play` | The assistant synthesizes audio server-side via Fish Audio's HTTP API and streams chunks to Twilio via play messages. |
29
- | `deepgram` | `synthesized-play` | The assistant synthesizes audio server-side via Deepgram's HTTP API and streams chunks to Twilio via play messages. Uses the same API key as Deepgram speech-to-text. |
25
+ | Provider | Call mode | Description |
26
+ | ------------ | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
27
+ | `elevenlabs` | `native-twilio` | Text tokens are forwarded to Twilio's ConversationRelay, which synthesizes audio via its built-in ElevenLabs integration. |
28
+ | `fish-audio` | `synthesized-play` | The assistant synthesizes audio server-side via Fish Audio's HTTP API and streams chunks to Twilio via play messages. |
29
+ | `deepgram` | `synthesized-play` | The assistant synthesizes audio server-side via Deepgram's HTTP API and streams chunks to Twilio via play messages. Uses the same API key as Deepgram speech-to-text. |
30
+ | `xai` | `synthesized-play` | The assistant synthesizes audio server-side via xAI's HTTP API and streams chunks to Twilio via play messages. No native Twilio fallback (`allowNativeFallback: false`). |
30
31
 
31
32
  Providers using `synthesized-play` add a small amount of latency compared to `native-twilio` because audio must be synthesized server-side before playback. The assistant handles chunk buffering and streaming automatically.
32
33
 
@@ -3,7 +3,7 @@
3
3
  "tools": [
4
4
  {
5
5
  "name": "voice_config_update",
6
- "description": "Update a voice configuration setting. Use tts_provider to switch the global TTS provider (valid providers: elevenlabs, fish-audio, deepgram — defined by the provider catalog). Use tts_voice_id to set the ElevenLabs voice ID, fish_audio_reference_id for Fish Audio voice reference. Deepgram uses the same API key as speech-to-text and requires no additional voice config. Changes persist to services.tts config and take effect immediately.",
6
+ "description": "Update a voice configuration setting. Use tts_provider to switch the global TTS provider (valid providers: elevenlabs, fish-audio, deepgram, xai — defined by the provider catalog). Use tts_voice_id to set the ElevenLabs voice ID, fish_audio_reference_id for Fish Audio voice reference. Deepgram uses the same API key as speech-to-text and requires no additional voice config. Changes persist to services.tts config and take effect immediately.",
7
7
  "category": "system",
8
8
  "risk": "low",
9
9
  "input_schema": {
@@ -18,10 +18,10 @@
18
18
  "tts_provider",
19
19
  "tts_voice_id"
20
20
  ],
21
- "description": "The voice setting to change. tts_provider selects the global TTS provider from the provider catalog (elevenlabs, fish-audio, deepgram). tts_voice_id sets the ElevenLabs voice. fish_audio_reference_id sets the Fish Audio voice reference. Deepgram uses its default model and shares the STT API key."
21
+ "description": "The voice setting to change. tts_provider selects the global TTS provider from the provider catalog (valid providers: elevenlabs, fish-audio, deepgram, xai). tts_voice_id sets the ElevenLabs voice. fish_audio_reference_id sets the Fish Audio voice reference. Deepgram uses its default model and shares the STT API key."
22
22
  },
23
23
  "value": {
24
- "description": "The new value for the setting. For tts_provider: a valid provider ID from the provider catalog (elevenlabs, fish-audio, deepgram). For tts_voice_id: an alphanumeric ElevenLabs voice ID. For fish_audio_reference_id: a Fish Audio voice reference ID. For conversation_timeout: seconds (5, 10, 15, 30, or 60). For activation_key: key identifier string."
24
+ "description": "The new value for the setting. For tts_provider: one of elevenlabs, fish-audio, deepgram, xai. For tts_voice_id: an alphanumeric ElevenLabs voice ID. For fish_audio_reference_id: a Fish Audio voice reference ID. For conversation_timeout: seconds (5, 10, 15, 30, or 60). For activation_key: key identifier string."
25
25
  },
26
26
  "activity": {
27
27
  "type": "string",
@@ -22,26 +22,6 @@ import * as appCreate from "./bundled-skills/app-builder/tools/app-create.js";
22
22
  import * as appDelete from "./bundled-skills/app-builder/tools/app-delete.js";
23
23
  import * as appGenerateIcon from "./bundled-skills/app-builder/tools/app-generate-icon.js";
24
24
  import * as appRefresh from "./bundled-skills/app-builder/tools/app-refresh.js";
25
- // ── browser ────────────────────────────────────────────────────────────────────
26
- import * as browserAttach from "./bundled-skills/browser/tools/browser-attach.js";
27
- import * as browserClick from "./bundled-skills/browser/tools/browser-click.js";
28
- import * as browserClose from "./bundled-skills/browser/tools/browser-close.js";
29
- import * as browserDetach from "./bundled-skills/browser/tools/browser-detach.js";
30
- import * as browserExtract from "./bundled-skills/browser/tools/browser-extract.js";
31
- import * as browserFillCredential from "./bundled-skills/browser/tools/browser-fill-credential.js";
32
- import * as browserHover from "./bundled-skills/browser/tools/browser-hover.js";
33
- import * as browserNavigate from "./bundled-skills/browser/tools/browser-navigate.js";
34
- import * as browserPressKey from "./bundled-skills/browser/tools/browser-press-key.js";
35
- import * as browserScreenshot from "./bundled-skills/browser/tools/browser-screenshot.js";
36
- import * as browserScroll from "./bundled-skills/browser/tools/browser-scroll.js";
37
- import * as browserSelectOption from "./bundled-skills/browser/tools/browser-select-option.js";
38
- import * as browserSnapshot from "./bundled-skills/browser/tools/browser-snapshot.js";
39
- import * as browserStatus from "./bundled-skills/browser/tools/browser-status.js";
40
- import * as browserType from "./bundled-skills/browser/tools/browser-type.js";
41
- import * as browserWaitFor from "./bundled-skills/browser/tools/browser-wait-for.js";
42
- import * as browserWaitForDownload from "./bundled-skills/browser/tools/browser-wait-for-download.js";
43
- // ── chatgpt-import ─────────────────────────────────────────────────────────────
44
- import * as chatgptImport from "./bundled-skills/chatgpt-import/tools/chatgpt-import.js";
45
25
  // ── computer-use ───────────────────────────────────────────────────────────────
46
26
  import * as computerUseClick from "./bundled-skills/computer-use/tools/computer-use-click.js";
47
27
  import * as computerUseDone from "./bundled-skills/computer-use/tools/computer-use-done.js";
@@ -68,27 +48,6 @@ import * as documentUpdate from "./bundled-skills/document/tools/document-update
68
48
  import * as followupCreate from "./bundled-skills/followups/tools/followup-create.js";
69
49
  import * as followupList from "./bundled-skills/followups/tools/followup-list.js";
70
50
  import * as followupResolve from "./bundled-skills/followups/tools/followup-resolve.js";
71
- // ── gmail ──────────────────────────────────────────────────────────────────────
72
- import * as gmailArchive from "./bundled-skills/gmail/tools/gmail-archive.js";
73
- import * as gmailAttachments from "./bundled-skills/gmail/tools/gmail-attachments.js";
74
- import * as gmailDraft from "./bundled-skills/gmail/tools/gmail-draft.js";
75
- import * as gmailFilters from "./bundled-skills/gmail/tools/gmail-filters.js";
76
- import * as gmailFollowUp from "./bundled-skills/gmail/tools/gmail-follow-up.js";
77
- import * as gmailForward from "./bundled-skills/gmail/tools/gmail-forward.js";
78
- import * as gmailLabel from "./bundled-skills/gmail/tools/gmail-label.js";
79
- import * as gmailOutreachScan from "./bundled-skills/gmail/tools/gmail-outreach-scan.js";
80
- import * as gmailPreferencesTool from "./bundled-skills/gmail/tools/gmail-preferences-tool.js";
81
- import * as gmailSendDraft from "./bundled-skills/gmail/tools/gmail-send-draft.js";
82
- import * as gmailSenderDigest from "./bundled-skills/gmail/tools/gmail-sender-digest.js";
83
- import * as gmailTrash from "./bundled-skills/gmail/tools/gmail-trash.js";
84
- import * as gmailUnsubscribe from "./bundled-skills/gmail/tools/gmail-unsubscribe.js";
85
- import * as gmailVacation from "./bundled-skills/gmail/tools/gmail-vacation.js";
86
- // ── google-calendar ────────────────────────────────────────────────────────────
87
- import * as calendarCheckAvailability from "./bundled-skills/google-calendar/tools/calendar-check-availability.js";
88
- import * as calendarCreateEvent from "./bundled-skills/google-calendar/tools/calendar-create-event.js";
89
- import * as calendarGetEvent from "./bundled-skills/google-calendar/tools/calendar-get-event.js";
90
- import * as calendarListEvents from "./bundled-skills/google-calendar/tools/calendar-list-events.js";
91
- import * as calendarRsvp from "./bundled-skills/google-calendar/tools/calendar-rsvp.js";
92
51
  // ── image-studio ───────────────────────────────────────────────────────────────
93
52
  import * as mediaGenerateImage from "./bundled-skills/image-studio/tools/media-generate-image.js";
94
53
  // ── media-processing ───────────────────────────────────────────────────────────
@@ -111,25 +70,6 @@ import * as messagingSend from "./bundled-skills/messaging/tools/messaging-send.
111
70
  import * as messagingSenderDigest from "./bundled-skills/messaging/tools/messaging-sender-digest.js";
112
71
  // ── notifications ──────────────────────────────────────────────────────────────
113
72
  import * as sendNotification from "./bundled-skills/notifications/tools/send-notification.js";
114
- // ── outlook ────────────────────────────────────────────────────────────────────
115
- import * as outlookAttachments from "./bundled-skills/outlook/tools/outlook-attachments.js";
116
- import * as outlookCategories from "./bundled-skills/outlook/tools/outlook-categories.js";
117
- import * as outlookDraft from "./bundled-skills/outlook/tools/outlook-draft.js";
118
- import * as outlookFollowUp from "./bundled-skills/outlook/tools/outlook-follow-up.js";
119
- import * as outlookForward from "./bundled-skills/outlook/tools/outlook-forward.js";
120
- import * as outlookOutreachScan from "./bundled-skills/outlook/tools/outlook-outreach-scan.js";
121
- import * as outlookRules from "./bundled-skills/outlook/tools/outlook-rules.js";
122
- import * as outlookSendDraft from "./bundled-skills/outlook/tools/outlook-send-draft.js";
123
- import * as outlookSenderDigest from "./bundled-skills/outlook/tools/outlook-sender-digest.js";
124
- import * as outlookTrash from "./bundled-skills/outlook/tools/outlook-trash.js";
125
- import * as outlookUnsubscribe from "./bundled-skills/outlook/tools/outlook-unsubscribe.js";
126
- import * as outlookVacation from "./bundled-skills/outlook/tools/outlook-vacation.js";
127
- // ── outlook-calendar ───────────────────────────────────────────────────────────
128
- import * as outlookCalendarCheckAvailability from "./bundled-skills/outlook-calendar/tools/outlook-calendar-check-availability.js";
129
- import * as outlookCalendarCreateEvent from "./bundled-skills/outlook-calendar/tools/outlook-calendar-create-event.js";
130
- import * as outlookCalendarGetEvent from "./bundled-skills/outlook-calendar/tools/outlook-calendar-get-event.js";
131
- import * as outlookCalendarListEvents from "./bundled-skills/outlook-calendar/tools/outlook-calendar-list-events.js";
132
- import * as outlookCalendarRsvp from "./bundled-skills/outlook-calendar/tools/outlook-calendar-rsvp.js";
133
73
  // ── phone-calls ────────────────────────────────────────────────────────────────
134
74
  import * as callEnd from "./bundled-skills/phone-calls/tools/call-end.js";
135
75
  import * as callStart from "./bundled-skills/phone-calls/tools/call-start.js";
@@ -172,24 +112,8 @@ import * as subagentMessage from "./bundled-skills/subagent/tools/subagent-messa
172
112
  import * as subagentRead from "./bundled-skills/subagent/tools/subagent-read.js";
173
113
  import * as subagentSpawn from "./bundled-skills/subagent/tools/subagent-spawn.js";
174
114
  import * as subagentStatus from "./bundled-skills/subagent/tools/subagent-status.js";
175
- // ── tasks ──────────────────────────────────────────────────────────────────────
176
- import * as taskDelete from "./bundled-skills/tasks/tools/task-delete.js";
177
- import * as taskList from "./bundled-skills/tasks/tools/task-list.js";
178
- import * as taskListAdd from "./bundled-skills/tasks/tools/task-list-add.js";
179
- import * as taskListRemove from "./bundled-skills/tasks/tools/task-list-remove.js";
180
- import * as taskListShow from "./bundled-skills/tasks/tools/task-list-show.js";
181
- import * as taskListUpdate from "./bundled-skills/tasks/tools/task-list-update.js";
182
- import * as taskQueueRun from "./bundled-skills/tasks/tools/task-queue-run.js";
183
- import * as taskRun from "./bundled-skills/tasks/tools/task-run.js";
184
- import * as taskSave from "./bundled-skills/tasks/tools/task-save.js";
185
115
  // ── transcribe ─────────────────────────────────────────────────────────────────
186
116
  import * as transcribeMedia from "./bundled-skills/transcribe/tools/transcribe-media.js";
187
- // ── watcher ────────────────────────────────────────────────────────────────────
188
- import * as watcherCreate from "./bundled-skills/watcher/tools/watcher-create.js";
189
- import * as watcherDelete from "./bundled-skills/watcher/tools/watcher-delete.js";
190
- import * as watcherDigest from "./bundled-skills/watcher/tools/watcher-digest.js";
191
- import * as watcherList from "./bundled-skills/watcher/tools/watcher-list.js";
192
- import * as watcherUpdate from "./bundled-skills/watcher/tools/watcher-update.js";
193
117
 
194
118
  // ─── Registry ────────────────────────────────────────────────────────────────
195
119
 
@@ -206,28 +130,6 @@ export const bundledToolRegistry = new Map<string, SkillToolScript>([
206
130
  ["app-builder:tools/app-refresh.ts", appRefresh],
207
131
  ["app-builder:tools/app-generate-icon.ts", appGenerateIcon],
208
132
 
209
- // browser
210
- ["browser:tools/browser-navigate.ts", browserNavigate],
211
- ["browser:tools/browser-snapshot.ts", browserSnapshot],
212
- ["browser:tools/browser-screenshot.ts", browserScreenshot],
213
- ["browser:tools/browser-close.ts", browserClose],
214
- ["browser:tools/browser-attach.ts", browserAttach],
215
- ["browser:tools/browser-detach.ts", browserDetach],
216
- ["browser:tools/browser-click.ts", browserClick],
217
- ["browser:tools/browser-type.ts", browserType],
218
- ["browser:tools/browser-press-key.ts", browserPressKey],
219
- ["browser:tools/browser-scroll.ts", browserScroll],
220
- ["browser:tools/browser-select-option.ts", browserSelectOption],
221
- ["browser:tools/browser-hover.ts", browserHover],
222
- ["browser:tools/browser-wait-for.ts", browserWaitFor],
223
- ["browser:tools/browser-extract.ts", browserExtract],
224
- ["browser:tools/browser-wait-for-download.ts", browserWaitForDownload],
225
- ["browser:tools/browser-fill-credential.ts", browserFillCredential],
226
- ["browser:tools/browser-status.ts", browserStatus],
227
-
228
- // chatgpt-import
229
- ["chatgpt-import:tools/chatgpt-import.ts", chatgptImport],
230
-
231
133
  // computer-use
232
134
  ["computer-use:tools/computer-use-observe.ts", computerUseObserve],
233
135
  ["computer-use:tools/computer-use-click.ts", computerUseClick],
@@ -262,32 +164,6 @@ export const bundledToolRegistry = new Map<string, SkillToolScript>([
262
164
  ["followups:tools/followup-list.ts", followupList],
263
165
  ["followups:tools/followup-resolve.ts", followupResolve],
264
166
 
265
- // gmail
266
- ["gmail:tools/gmail-archive.ts", gmailArchive],
267
- ["gmail:tools/gmail-label.ts", gmailLabel],
268
- ["gmail:tools/gmail-trash.ts", gmailTrash],
269
- ["gmail:tools/gmail-unsubscribe.ts", gmailUnsubscribe],
270
- ["gmail:tools/gmail-draft.ts", gmailDraft],
271
- ["gmail:tools/gmail-send-draft.ts", gmailSendDraft],
272
- ["gmail:tools/gmail-attachments.ts", gmailAttachments],
273
- ["gmail:tools/gmail-forward.ts", gmailForward],
274
- ["gmail:tools/gmail-follow-up.ts", gmailFollowUp],
275
- ["gmail:tools/gmail-filters.ts", gmailFilters],
276
- ["gmail:tools/gmail-vacation.ts", gmailVacation],
277
- ["gmail:tools/gmail-sender-digest.ts", gmailSenderDigest],
278
- ["gmail:tools/gmail-outreach-scan.ts", gmailOutreachScan],
279
- ["gmail:tools/gmail-preferences-tool.ts", gmailPreferencesTool],
280
-
281
- // google-calendar
282
- ["google-calendar:tools/calendar-list-events.ts", calendarListEvents],
283
- ["google-calendar:tools/calendar-get-event.ts", calendarGetEvent],
284
- ["google-calendar:tools/calendar-create-event.ts", calendarCreateEvent],
285
- [
286
- "google-calendar:tools/calendar-check-availability.ts",
287
- calendarCheckAvailability,
288
- ],
289
- ["google-calendar:tools/calendar-rsvp.ts", calendarRsvp],
290
-
291
167
  // image-studio
292
168
  ["image-studio:tools/media-generate-image.ts", mediaGenerateImage],
293
169
 
@@ -317,39 +193,6 @@ export const bundledToolRegistry = new Map<string, SkillToolScript>([
317
193
  // notifications
318
194
  ["notifications:tools/send-notification.ts", sendNotification],
319
195
 
320
- // outlook
321
- ["outlook:tools/outlook-rules.ts", outlookRules],
322
- ["outlook:tools/outlook-vacation.ts", outlookVacation],
323
- ["outlook:tools/outlook-sender-digest.ts", outlookSenderDigest],
324
- ["outlook:tools/outlook-outreach-scan.ts", outlookOutreachScan],
325
- ["outlook:tools/outlook-draft.ts", outlookDraft],
326
- ["outlook:tools/outlook-send-draft.ts", outlookSendDraft],
327
- ["outlook:tools/outlook-forward.ts", outlookForward],
328
- ["outlook:tools/outlook-trash.ts", outlookTrash],
329
- ["outlook:tools/outlook-categories.ts", outlookCategories],
330
- ["outlook:tools/outlook-follow-up.ts", outlookFollowUp],
331
- ["outlook:tools/outlook-unsubscribe.ts", outlookUnsubscribe],
332
- ["outlook:tools/outlook-attachments.ts", outlookAttachments],
333
-
334
- // outlook-calendar
335
- [
336
- "outlook-calendar:tools/outlook-calendar-list-events.ts",
337
- outlookCalendarListEvents,
338
- ],
339
- [
340
- "outlook-calendar:tools/outlook-calendar-get-event.ts",
341
- outlookCalendarGetEvent,
342
- ],
343
- [
344
- "outlook-calendar:tools/outlook-calendar-create-event.ts",
345
- outlookCalendarCreateEvent,
346
- ],
347
- [
348
- "outlook-calendar:tools/outlook-calendar-check-availability.ts",
349
- outlookCalendarCheckAvailability,
350
- ],
351
- ["outlook-calendar:tools/outlook-calendar-rsvp.ts", outlookCalendarRsvp],
352
-
353
196
  // phone-calls
354
197
  ["phone-calls:tools/call-start.ts", callStart],
355
198
  ["phone-calls:tools/call-status.ts", callStatus],
@@ -400,24 +243,6 @@ export const bundledToolRegistry = new Map<string, SkillToolScript>([
400
243
  ["subagent:tools/subagent-message.ts", subagentMessage],
401
244
  ["subagent:tools/subagent-read.ts", subagentRead],
402
245
 
403
- // tasks
404
- ["tasks:tools/task-save.ts", taskSave],
405
- ["tasks:tools/task-run.ts", taskRun],
406
- ["tasks:tools/task-list.ts", taskList],
407
- ["tasks:tools/task-delete.ts", taskDelete],
408
- ["tasks:tools/task-list-show.ts", taskListShow],
409
- ["tasks:tools/task-list-add.ts", taskListAdd],
410
- ["tasks:tools/task-list-update.ts", taskListUpdate],
411
- ["tasks:tools/task-list-remove.ts", taskListRemove],
412
- ["tasks:tools/task-queue-run.ts", taskQueueRun],
413
-
414
246
  // transcribe
415
247
  ["transcribe:tools/transcribe-media.ts", transcribeMedia],
416
-
417
- // watcher
418
- ["watcher:tools/watcher-create.ts", watcherCreate],
419
- ["watcher:tools/watcher-list.ts", watcherList],
420
- ["watcher:tools/watcher-update.ts", watcherUpdate],
421
- ["watcher:tools/watcher-delete.ts", watcherDelete],
422
- ["watcher:tools/watcher-digest.ts", watcherDigest],
423
248
  ]);
package/src/config/env.ts CHANGED
@@ -153,14 +153,19 @@ export function getPlatformBaseUrl(): string {
153
153
  // Config not yet available (early bootstrap) — fall through
154
154
  }
155
155
  // Resolve the default platform URL from VELLUM_ENVIRONMENT.
156
- // Default to dev-platform for safety; only production and staging
157
- // opt into their respective platforms explicitly.
156
+ // `production`, `staging`, and `test` map to their respective hosted
157
+ // platforms, `local` points at a developer's locally running platform,
158
+ // and everything else (including unset) falls back to dev-platform.
158
159
  const env = str("VELLUM_ENVIRONMENT")?.trim();
159
160
  let defaultUrl: string;
160
161
  if (env === "production") {
161
162
  defaultUrl = "https://platform.vellum.ai";
162
163
  } else if (env === "staging") {
163
164
  defaultUrl = "https://staging-platform.vellum.ai";
165
+ } else if (env === "test") {
166
+ defaultUrl = "https://test-platform.vellum.ai";
167
+ } else if (env === "local") {
168
+ defaultUrl = "http://localhost:8000";
164
169
  } else {
165
170
  defaultUrl = "https://dev-platform.vellum.ai";
166
171
  }
@@ -38,7 +38,7 @@
38
38
  "scope": "assistant",
39
39
  "key": "email-channel",
40
40
  "label": "Email Channel",
41
- "description": "Enable the entire email integration: email CLI commands, email channel, sequences, email readiness probes, invite adapters, and the email-setup skill",
41
+ "description": "Enable the entire email integration: email CLI commands, email channel, domain registration, sequences, email readiness probes, invite adapters, and the email-setup skill",
42
42
  "defaultEnabled": false
43
43
  },
44
44
  {
@@ -321,14 +321,6 @@
321
321
  "description": "Show the 'Fork from here' option in message overflow menus",
322
322
  "defaultEnabled": false
323
323
  },
324
- {
325
- "id": "managed-x-oauth-integration",
326
- "scope": "assistant",
327
- "key": "managed-x-oauth-integration",
328
- "label": "Managed X/Twitter OAuth",
329
- "description": "Enable platform-managed X/Twitter OAuth integration in Models & Services settings",
330
- "defaultEnabled": false
331
- },
332
324
  {
333
325
  "id": "onboarding-pre-chat",
334
326
  "scope": "macos",
@@ -360,6 +352,30 @@
360
352
  "label": "Google Meet",
361
353
  "description": "Enables the Google Meet joining bot and the meet-join skill.",
362
354
  "defaultEnabled": false
355
+ },
356
+ {
357
+ "id": "compaction-v2",
358
+ "scope": "assistant",
359
+ "key": "compaction-v2",
360
+ "label": "Compaction v2",
361
+ "description": "Boundary-message-based compaction pipeline with forked prompt-cache-shared summarization and microcompact pre-pass. Replaces the four-tier overflow reducer and cursor-based storage.",
362
+ "defaultEnabled": false
363
+ },
364
+ {
365
+ "id": "scroll-debug-overlay",
366
+ "scope": "macos",
367
+ "key": "scroll-debug-overlay",
368
+ "label": "Scroll Debug Overlay",
369
+ "description": "Show a live HUD in the top-right of the conversation with scroll geometry, velocity, update rate, and anchor-preserver activity. Developer diagnostic for investigating scroll jank.",
370
+ "defaultEnabled": false
371
+ },
372
+ {
373
+ "id": "message-height-cache",
374
+ "scope": "macos",
375
+ "key": "message-height-cache",
376
+ "label": "Message Height Cache",
377
+ "description": "Swap the transcript's LazyVStack for a plain VStack so scrollContentHeight is the true sum of row heights (no LazyVStack estimator drift). Row frames are not pinned — the earlier frame-pinning approach was removed because it caused overlap when rows grew past their first measurement (streaming, expanding thinking blocks). Tradeoff: eager layout — every row measures up-front, which can stall for many seconds to minutes on very long conversations.",
378
+ "defaultEnabled": true
363
379
  }
364
380
  ]
365
381
  }