@vellumai/assistant 0.4.44 → 0.4.45

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (681) hide show
  1. package/.prettierignore +4 -0
  2. package/ARCHITECTURE.md +34 -31
  3. package/README.md +4 -4
  4. package/bun.lock +10 -35
  5. package/docs/architecture/integrations.md +102 -197
  6. package/docs/architecture/keychain-broker.md +1 -1
  7. package/docs/architecture/memory.md +2 -2
  8. package/docs/architecture/scheduling.md +1 -1
  9. package/docs/architecture/security.md +11 -11
  10. package/docs/error-handling.md +1 -1
  11. package/docs/trusted-contact-access.md +3 -3
  12. package/drizzle/meta/0000_snapshot.json +34 -100
  13. package/drizzle/meta/_journal.json +1 -1
  14. package/drizzle.config.ts +4 -4
  15. package/package.json +3 -2
  16. package/scripts/capture-x-graphql.ts +237 -141
  17. package/scripts/generate-bundled-tool-registry.ts +223 -0
  18. package/src/__tests__/access-request-decision.test.ts +0 -1
  19. package/src/__tests__/actor-token-service.test.ts +23 -24
  20. package/src/__tests__/agent-loop.test.ts +0 -131
  21. package/src/__tests__/always-loaded-tools-guard.test.ts +71 -0
  22. package/src/__tests__/amazon-cdp-integration.test.ts +11 -9
  23. package/src/__tests__/approval-primitive.test.ts +0 -1
  24. package/src/__tests__/approval-routes-http.test.ts +11 -1
  25. package/src/__tests__/asset-materialize-tool.test.ts +0 -1
  26. package/src/__tests__/asset-search-tool.test.ts +0 -1
  27. package/src/__tests__/assistant-attachment-directive.test.ts +1 -1
  28. package/src/__tests__/assistant-events-sse-hardening.test.ts +0 -1
  29. package/src/__tests__/assistant-feature-flag-guardrails.test.ts +0 -2
  30. package/src/__tests__/assistant-feature-flags-integration.test.ts +70 -18
  31. package/src/__tests__/assistant-id-boundary-guard.test.ts +6 -6
  32. package/src/__tests__/attachments-store.test.ts +0 -1
  33. package/src/__tests__/avatar-e2e.test.ts +74 -115
  34. package/src/__tests__/avatar-router.test.ts +25 -62
  35. package/src/__tests__/browser-manager.test.ts +24 -0
  36. package/src/__tests__/browser-skill-baseline-tool-payload.test.ts +4 -3
  37. package/src/__tests__/browser-skill-endstate.test.ts +8 -11
  38. package/src/__tests__/btw-routes.test.ts +326 -0
  39. package/src/__tests__/bundled-skill-retrieval-guard.test.ts +23 -9
  40. package/src/__tests__/call-controller.test.ts +0 -1
  41. package/src/__tests__/call-conversation-messages.test.ts +0 -1
  42. package/src/__tests__/call-domain.test.ts +0 -1
  43. package/src/__tests__/call-pointer-messages.test.ts +0 -1
  44. package/src/__tests__/call-recovery.test.ts +0 -1
  45. package/src/__tests__/call-routes-http.test.ts +0 -1
  46. package/src/__tests__/call-store.test.ts +0 -1
  47. package/src/__tests__/canonical-guardian-store.test.ts +0 -1
  48. package/src/__tests__/channel-approval-routes.test.ts +1 -1
  49. package/src/__tests__/channel-approvals.test.ts +1 -1
  50. package/src/__tests__/channel-delivery-store.test.ts +0 -1
  51. package/src/__tests__/channel-guardian.test.ts +5 -7
  52. package/src/__tests__/channel-retry-sweep.test.ts +0 -1
  53. package/src/__tests__/checker.test.ts +4 -11
  54. package/src/__tests__/compaction.benchmark.test.ts +16 -14
  55. package/src/__tests__/computer-use-session-lifecycle.test.ts +10 -11
  56. package/src/__tests__/computer-use-session-working-dir.test.ts +2 -6
  57. package/src/__tests__/computer-use-skill-lifecycle-cleanup.test.ts +2 -5
  58. package/src/__tests__/computer-use-tools.test.ts +35 -31
  59. package/src/__tests__/config-schema.test.ts +11 -15
  60. package/src/__tests__/config-watcher.test.ts +0 -1
  61. package/src/__tests__/confirmation-request-guardian-bridge.test.ts +0 -1
  62. package/src/__tests__/conflict-store.test.ts +0 -1
  63. package/src/__tests__/connection-policy.test.ts +4 -7
  64. package/src/__tests__/contacts-tools.test.ts +0 -1
  65. package/src/__tests__/context-memory-e2e.test.ts +2 -4
  66. package/src/__tests__/context-overflow-reducer.test.ts +2 -4
  67. package/src/__tests__/context-window-manager.test.ts +147 -60
  68. package/src/__tests__/contradiction-checker.test.ts +0 -1
  69. package/src/__tests__/conversation-attention-store.test.ts +0 -1
  70. package/src/__tests__/conversation-attention-telegram.test.ts +1 -1
  71. package/src/__tests__/conversation-pairing.test.ts +2 -2
  72. package/src/__tests__/conversation-routes-guardian-reply.test.ts +25 -1
  73. package/src/__tests__/conversation-routes-slash-commands.test.ts +381 -0
  74. package/src/__tests__/conversation-store.test.ts +0 -1
  75. package/src/__tests__/conversation-unread-route.test.ts +1 -2
  76. package/src/__tests__/credential-security-invariants.test.ts +7 -8
  77. package/src/__tests__/cross-provider-web-search.test.ts +353 -0
  78. package/src/__tests__/daemon-assistant-events.test.ts +6 -7
  79. package/src/__tests__/db-schedule-syntax-migration.test.ts +15 -3
  80. package/src/__tests__/delete-managed-skill-tool.test.ts +5 -9
  81. package/src/__tests__/deterministic-verification-control-plane.test.ts +0 -1
  82. package/src/__tests__/diagnostics-export.test.ts +189 -0
  83. package/src/__tests__/dynamic-skill-workflow-prompt.test.ts +0 -1
  84. package/src/__tests__/emit-signal-routing-intent.test.ts +3 -3
  85. package/src/__tests__/entity-extractor.test.ts +0 -1
  86. package/src/__tests__/entity-search.test.ts +0 -1
  87. package/src/__tests__/ephemeral-permissions.test.ts +2 -4
  88. package/src/__tests__/file-read-tool.test.ts +86 -0
  89. package/src/__tests__/followup-tools.test.ts +0 -1
  90. package/src/__tests__/frontmatter.test.ts +77 -34
  91. package/src/__tests__/gateway-only-enforcement.test.ts +0 -1
  92. package/src/__tests__/gateway-only-guard.test.ts +1 -1
  93. package/src/__tests__/guardian-action-conversation-turn.test.ts +0 -1
  94. package/src/__tests__/guardian-action-followup-executor.test.ts +0 -1
  95. package/src/__tests__/guardian-action-followup-store.test.ts +0 -1
  96. package/src/__tests__/guardian-action-grant-mint-consume.test.ts +0 -1
  97. package/src/__tests__/guardian-action-late-reply.test.ts +0 -1
  98. package/src/__tests__/guardian-action-store.test.ts +0 -1
  99. package/src/__tests__/guardian-action-sweep.test.ts +0 -1
  100. package/src/__tests__/guardian-decision-primitive-canonical.test.ts +0 -1
  101. package/src/__tests__/guardian-dispatch.test.ts +1 -2
  102. package/src/__tests__/guardian-grant-minting.test.ts +1 -1
  103. package/src/__tests__/guardian-outbound-http.test.ts +0 -1
  104. package/src/__tests__/guardian-principal-id-roundtrip.test.ts +0 -1
  105. package/src/__tests__/guardian-routing-invariants.test.ts +1 -1
  106. package/src/__tests__/guardian-routing-state.test.ts +0 -1
  107. package/src/__tests__/guardian-verification-voice-binding.test.ts +0 -1
  108. package/src/__tests__/guardian-verify-setup-skill-regression.test.ts +3 -5
  109. package/src/__tests__/handlers-user-message-approval-consumption.test.ts +28 -426
  110. package/src/__tests__/host-bash-proxy.test.ts +335 -0
  111. package/src/__tests__/host-file-proxy.test.ts +374 -0
  112. package/src/__tests__/host-shell-tool.test.ts +147 -1
  113. package/src/__tests__/http-user-message-parity.test.ts +361 -0
  114. package/src/__tests__/inbound-invite-redemption.test.ts +0 -1
  115. package/src/__tests__/integration-status.test.ts +3 -8
  116. package/src/__tests__/intent-routing.test.ts +7 -46
  117. package/src/__tests__/invite-redemption-service.test.ts +0 -1
  118. package/src/__tests__/invite-routes-http.test.ts +0 -1
  119. package/src/__tests__/llm-usage-store.test.ts +0 -1
  120. package/src/__tests__/managed-avatar-client.test.ts +101 -55
  121. package/src/__tests__/managed-skill-lifecycle.test.ts +9 -18
  122. package/src/__tests__/managed-store.test.ts +94 -21
  123. package/src/__tests__/media-reuse-story.e2e.test.ts +0 -1
  124. package/src/__tests__/memory-context-benchmark.benchmark.test.ts +2 -4
  125. package/src/__tests__/memory-lifecycle-e2e.test.ts +0 -1
  126. package/src/__tests__/memory-recall-quality.test.ts +0 -1
  127. package/src/__tests__/memory-regressions.experimental.test.ts +0 -1
  128. package/src/__tests__/memory-regressions.test.ts +0 -1
  129. package/src/__tests__/memory-retrieval.benchmark.test.ts +0 -1
  130. package/src/__tests__/memory-upsert-concurrency.test.ts +0 -1
  131. package/src/__tests__/messaging-send-tool.test.ts +35 -0
  132. package/src/__tests__/messaging-skill-split.test.ts +138 -0
  133. package/src/__tests__/migration-cross-version-compatibility.test.ts +0 -1
  134. package/src/__tests__/migration-export-http.test.ts +2 -3
  135. package/src/__tests__/migration-import-commit-http.test.ts +1 -2
  136. package/src/__tests__/migration-import-preflight-http.test.ts +1 -2
  137. package/src/__tests__/migration-validate-http.test.ts +1 -2
  138. package/src/__tests__/native-web-search.test.ts +475 -0
  139. package/src/__tests__/navigate-settings-tab.test.ts +84 -0
  140. package/src/__tests__/non-member-access-request.test.ts +0 -1
  141. package/src/__tests__/notification-broadcaster.test.ts +15 -15
  142. package/src/__tests__/notification-decision-strategy.test.ts +6 -6
  143. package/src/__tests__/notification-deep-link.test.ts +7 -7
  144. package/src/__tests__/notification-guardian-path.test.ts +2 -3
  145. package/src/__tests__/notification-telegram-adapter.test.ts +1 -1
  146. package/src/__tests__/notification-thread-candidates.test.ts +4 -4
  147. package/src/__tests__/onboarding-starter-tasks.test.ts +0 -1
  148. package/src/__tests__/playbook-execution.test.ts +0 -1
  149. package/src/__tests__/playbook-tools.test.ts +0 -1
  150. package/src/__tests__/profile-compiler.test.ts +0 -1
  151. package/src/__tests__/provider-managed-proxy-integration.test.ts +25 -0
  152. package/src/__tests__/qdrant-collection-migration.test.ts +223 -0
  153. package/src/__tests__/recording-handler.test.ts +30 -94
  154. package/src/__tests__/registry.test.ts +28 -35
  155. package/src/__tests__/relay-server.test.ts +0 -1
  156. package/src/__tests__/ride-shotgun-handler.test.ts +4 -20
  157. package/src/__tests__/runtime-attachment-metadata.test.ts +0 -1
  158. package/src/__tests__/runtime-events-sse-parity.test.ts +3 -4
  159. package/src/__tests__/runtime-events-sse.test.ts +0 -1
  160. package/src/__tests__/sandbox-diagnostics.test.ts +0 -1
  161. package/src/__tests__/scaffold-managed-skill-tool.test.ts +30 -28
  162. package/src/__tests__/schedule-store.test.ts +441 -1
  163. package/src/__tests__/schedule-tools.test.ts +468 -7
  164. package/src/__tests__/scheduler-recurrence.test.ts +196 -23
  165. package/src/__tests__/scoped-approval-grants.test.ts +0 -1
  166. package/src/__tests__/scoped-grant-security-matrix.test.ts +0 -1
  167. package/src/__tests__/secret-prompt-log-hygiene.test.ts +6 -3
  168. package/src/__tests__/secret-response-routing.test.ts +4 -1
  169. package/src/__tests__/send-endpoint-busy.test.ts +14 -2
  170. package/src/__tests__/send-notification-tool.test.ts +0 -7
  171. package/src/__tests__/sequence-store.test.ts +0 -1
  172. package/src/__tests__/server-history-render.test.ts +1 -2
  173. package/src/__tests__/session-abort-tool-results.test.ts +0 -1
  174. package/src/__tests__/session-agent-loop.test.ts +46 -6
  175. package/src/__tests__/session-confirmation-signals.test.ts +0 -1
  176. package/src/__tests__/session-conflict-gate.test.ts +2 -6
  177. package/src/__tests__/session-error.test.ts +5 -14
  178. package/src/__tests__/session-init.benchmark.test.ts +3 -5
  179. package/src/__tests__/session-load-history-repair.test.ts +0 -1
  180. package/src/__tests__/session-media-retry.test.ts +12 -74
  181. package/src/__tests__/session-pre-run-repair.test.ts +0 -1
  182. package/src/__tests__/session-profile-injection.test.ts +2 -6
  183. package/src/__tests__/session-provider-retry-repair.test.ts +2 -6
  184. package/src/__tests__/session-queue.test.ts +94 -139
  185. package/src/__tests__/session-skill-tools.test.ts +115 -115
  186. package/src/__tests__/session-slash-known.test.ts +0 -1
  187. package/src/__tests__/session-slash-queue.test.ts +0 -1
  188. package/src/__tests__/session-slash-unknown.test.ts +0 -1
  189. package/src/__tests__/session-surfaces-task-progress.test.ts +34 -0
  190. package/src/__tests__/session-usage.test.ts +0 -1
  191. package/src/__tests__/session-workspace-cache-state.test.ts +2 -6
  192. package/src/__tests__/session-workspace-injection.test.ts +2 -6
  193. package/src/__tests__/session-workspace-tool-tracking.test.ts +2 -6
  194. package/src/__tests__/skill-feature-flags-integration.test.ts +180 -184
  195. package/src/__tests__/skill-feature-flags.test.ts +125 -18
  196. package/src/__tests__/skill-load-feature-flag.test.ts +1 -2
  197. package/src/__tests__/skill-load-tool.test.ts +194 -2
  198. package/src/__tests__/skill-projection-feature-flag.test.ts +27 -16
  199. package/src/__tests__/skill-projection.benchmark.test.ts +15 -14
  200. package/src/__tests__/skills.test.ts +14 -53
  201. package/src/__tests__/slack-channel-config.test.ts +0 -1
  202. package/src/__tests__/slack-inbound-verification.test.ts +0 -1
  203. package/src/__tests__/slack-skill.test.ts +1 -1
  204. package/src/__tests__/subagent-tools.test.ts +2 -2
  205. package/src/__tests__/system-prompt.test.ts +4 -3
  206. package/src/__tests__/task-compiler.test.ts +0 -1
  207. package/src/__tests__/task-management-tools.test.ts +0 -1
  208. package/src/__tests__/task-memory-cleanup.test.ts +0 -1
  209. package/src/__tests__/task-runner.test.ts +0 -1
  210. package/src/__tests__/task-scheduler.test.ts +0 -1
  211. package/src/__tests__/terminal-tools.test.ts +0 -1
  212. package/src/__tests__/test-support/computer-use-skill-harness.ts +2 -4
  213. package/src/__tests__/thread-seed-composer.test.ts +5 -5
  214. package/src/__tests__/tool-approval-handler.test.ts +0 -1
  215. package/src/__tests__/tool-execution-abort-cleanup.test.ts +0 -1
  216. package/src/__tests__/tool-execution-pipeline.benchmark.test.ts +0 -1
  217. package/src/__tests__/tool-executor.test.ts +8 -86
  218. package/src/__tests__/tool-grant-request-escalation.test.ts +0 -1
  219. package/src/__tests__/tool-notification-listener.test.ts +1 -1
  220. package/src/__tests__/tool-preview-lifecycle.test.ts +416 -0
  221. package/src/__tests__/trust-store.test.ts +80 -4
  222. package/src/__tests__/trusted-contact-approval-notifier.test.ts +0 -1
  223. package/src/__tests__/trusted-contact-inline-approval-integration.test.ts +0 -1
  224. package/src/__tests__/trusted-contact-lifecycle-notifications.test.ts +0 -1
  225. package/src/__tests__/trusted-contact-multichannel.test.ts +0 -1
  226. package/src/__tests__/trusted-contact-verification.test.ts +0 -1
  227. package/src/__tests__/twilio-provider.test.ts +0 -1
  228. package/src/__tests__/twilio-routes.test.ts +0 -1
  229. package/src/__tests__/{request-file-tool.test.ts → ui-file-upload-surface.test.ts} +11 -72
  230. package/src/__tests__/update-bulletin.test.ts +0 -1
  231. package/src/__tests__/usage-cache-backfill-migration.test.ts +0 -1
  232. package/src/__tests__/usage-routes.test.ts +0 -1
  233. package/src/__tests__/verification-control-plane-policy.test.ts +4 -4
  234. package/src/__tests__/voice-invite-redemption.test.ts +0 -1
  235. package/src/__tests__/voice-scoped-grant-consumer.test.ts +0 -1
  236. package/src/__tests__/voice-session-bridge.test.ts +9 -1
  237. package/src/__tests__/web-fetch.test.ts +57 -0
  238. package/src/__tests__/workspace-git-service.test.ts +5 -14
  239. package/src/__tests__/workspace-policy.test.ts +0 -1
  240. package/src/agent/loop.ts +22 -34
  241. package/src/bundler/bundle-signer.ts +4 -4
  242. package/src/calls/call-controller.ts +1 -1
  243. package/src/calls/relay-server.ts +1 -1
  244. package/src/calls/twilio-rest.ts +1 -1
  245. package/src/calls/voice-session-bridge.ts +3 -1
  246. package/src/cli/__tests__/notifications.test.ts +3 -4
  247. package/src/cli/commands/map.ts +2 -6
  248. package/src/cli/commands/mcp.ts +73 -15
  249. package/src/cli/commands/notifications.ts +4 -4
  250. package/src/cli/commands/sessions.ts +9 -1
  251. package/src/cli/commands/skills.ts +6 -10
  252. package/src/cli/http-client.ts +2 -3
  253. package/src/cli/main-screen.tsx +10 -10
  254. package/src/cli/program.ts +0 -4
  255. package/src/cli/reference.ts +0 -2
  256. package/src/cli.ts +15 -9
  257. package/src/config/__tests__/bundled-tool-registry-guard.test.ts +120 -0
  258. package/src/config/bundled-skills/_shared/CLI_RETRIEVAL_PATTERN.md +11 -0
  259. package/src/config/bundled-skills/app-builder/SKILL.md +6 -1
  260. package/src/config/bundled-skills/browser/SKILL.md +6 -1
  261. package/src/config/bundled-skills/chatgpt-import/SKILL.md +5 -1
  262. package/src/config/bundled-skills/claude-code/SKILL.md +5 -1
  263. package/src/config/bundled-skills/computer-use/SKILL.md +6 -1
  264. package/src/config/bundled-skills/computer-use/TOOLS.json +6 -69
  265. package/src/config/bundled-skills/computer-use/tools/computer-use-click.ts +10 -1
  266. package/src/config/bundled-skills/contacts/SKILL.md +10 -1
  267. package/src/config/bundled-skills/contacts/TOOLS.json +35 -0
  268. package/src/config/bundled-skills/{messaging → contacts}/tools/google-contacts.ts +9 -2
  269. package/src/config/bundled-skills/document/SKILL.md +4 -1
  270. package/src/config/bundled-skills/doordash/SKILL.md +8 -1
  271. package/src/config/bundled-skills/doordash/lib/shared/platform.ts +4 -1
  272. package/src/config/bundled-skills/followups/SKILL.md +4 -1
  273. package/src/config/bundled-skills/gmail/SKILL.md +180 -0
  274. package/src/config/bundled-skills/gmail/TOOLS.json +506 -0
  275. package/src/config/bundled-skills/gmail/tools/gmail-archive.ts +149 -0
  276. package/src/config/bundled-skills/gmail/tools/gmail-attachments.ts +110 -0
  277. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-draft.ts +1 -1
  278. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-filters.ts +1 -1
  279. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-follow-up.ts +1 -1
  280. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-forward.ts +1 -1
  281. package/src/config/bundled-skills/gmail/tools/gmail-label.ts +50 -0
  282. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-outreach-scan.ts +8 -90
  283. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-send-draft.ts +1 -1
  284. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-sender-digest.ts +2 -2
  285. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-trash.ts +1 -1
  286. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-unsubscribe.ts +1 -1
  287. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-vacation.ts +1 -1
  288. package/src/config/bundled-skills/gmail/tools/shared.ts +47 -0
  289. package/src/config/bundled-skills/google-calendar/SKILL.md +5 -1
  290. package/src/config/bundled-skills/image-studio/SKILL.md +5 -1
  291. package/src/config/bundled-skills/knowledge-graph/SKILL.md +4 -1
  292. package/src/config/bundled-skills/media-processing/SKILL.md +7 -13
  293. package/src/config/bundled-skills/media-processing/TOOLS.json +0 -22
  294. package/src/config/bundled-skills/media-processing/tools/generate-clip.ts +12 -1
  295. package/src/config/bundled-skills/messaging/SKILL.md +23 -139
  296. package/src/config/bundled-skills/messaging/TOOLS.json +33 -1215
  297. package/src/config/bundled-skills/messaging/tools/gmail-mime-helpers.ts +42 -0
  298. package/src/config/bundled-skills/messaging/tools/messaging-send.ts +165 -2
  299. package/src/config/bundled-skills/messaging/tools/messaging-sender-digest.ts +1 -13
  300. package/src/config/bundled-skills/messaging/tools/shared.ts +81 -34
  301. package/src/config/bundled-skills/notifications/SKILL.md +5 -1
  302. package/src/config/bundled-skills/orchestration/SKILL.md +30 -0
  303. package/src/config/bundled-skills/orchestration/TOOLS.json +35 -0
  304. package/src/config/bundled-skills/{reminder/tools/reminder-create.ts → orchestration/tools/swarm-delegate.ts} +3 -3
  305. package/src/config/bundled-skills/phone-calls/SKILL.md +9 -1
  306. package/src/config/bundled-skills/playbooks/SKILL.md +4 -1
  307. package/src/config/bundled-skills/schedule/SKILL.md +70 -9
  308. package/src/config/bundled-skills/schedule/TOOLS.json +38 -6
  309. package/src/config/bundled-skills/screen-watch/SKILL.md +28 -0
  310. package/src/config/bundled-skills/screen-watch/TOOLS.json +35 -0
  311. package/src/config/bundled-skills/{reminder/tools/reminder-cancel.ts → screen-watch/tools/start-screen-watch.ts} +3 -3
  312. package/src/config/bundled-skills/sequences/SKILL.md +47 -0
  313. package/src/config/bundled-skills/sequences/TOOLS.json +340 -0
  314. package/src/config/bundled-skills/sequences/tools/sequence-update.ts +128 -0
  315. package/src/config/bundled-skills/sequences/tools/shared.ts +9 -0
  316. package/src/config/bundled-skills/settings/SKILL.md +12 -0
  317. package/src/config/bundled-skills/settings/TOOLS.json +112 -0
  318. package/src/config/bundled-skills/settings/tools/navigate-settings-tab.ts +43 -0
  319. package/src/config/bundled-skills/settings/tools/open-system-settings.ts +52 -0
  320. package/src/config/bundled-skills/{computer-use/tools/computer-use-right-click.ts → settings/tools/set-avatar.ts} +2 -6
  321. package/src/{tools/system/voice-config.ts → config/bundled-skills/settings/tools/voice-config-update.ts} +59 -96
  322. package/src/config/bundled-skills/skill-management/SKILL.md +18 -0
  323. package/src/config/bundled-skills/skill-management/TOOLS.json +90 -0
  324. package/src/config/bundled-skills/{computer-use/tools/computer-use-double-click.ts → skill-management/tools/delete-managed.ts} +2 -6
  325. package/src/config/bundled-skills/skill-management/tools/scaffold-managed.ts +12 -0
  326. package/src/config/bundled-skills/slack/SKILL.md +5 -1
  327. package/src/config/bundled-skills/subagent/SKILL.md +4 -1
  328. package/src/config/bundled-skills/tasks/SKILL.md +5 -2
  329. package/src/config/bundled-skills/transcribe/SKILL.md +4 -1
  330. package/src/config/bundled-skills/watcher/SKILL.md +4 -1
  331. package/src/config/bundled-tool-registry.ts +118 -107
  332. package/src/config/env.ts +5 -2
  333. package/src/config/feature-flag-registry.json +25 -9
  334. package/src/config/loader.ts +10 -2
  335. package/src/config/schema.ts +19 -16
  336. package/src/config/schemas/inference.ts +12 -22
  337. package/src/config/schemas/memory-storage.ts +19 -1
  338. package/src/config/schemas/platform.ts +0 -16
  339. package/src/config/skill-state.ts +11 -8
  340. package/src/config/skills.ts +83 -32
  341. package/src/context/token-estimator.ts +11 -0
  342. package/src/context/window-manager.ts +180 -151
  343. package/src/daemon/computer-use-session.ts +11 -43
  344. package/src/daemon/daemon-control.ts +4 -1
  345. package/src/daemon/handlers/config-channels.ts +5 -9
  346. package/src/daemon/handlers/config-ingress.ts +0 -4
  347. package/src/daemon/handlers/config-model.ts +7 -13
  348. package/src/daemon/handlers/config-telegram.ts +4 -8
  349. package/src/daemon/handlers/config-voice.ts +2 -5
  350. package/src/daemon/handlers/dictation.ts +2 -12
  351. package/src/daemon/handlers/identity.ts +0 -105
  352. package/src/daemon/handlers/recording.ts +3 -23
  353. package/src/daemon/handlers/session-history.ts +1 -1
  354. package/src/daemon/handlers/sessions.ts +53 -72
  355. package/src/daemon/handlers/shared.ts +7 -28
  356. package/src/daemon/handlers/skills.ts +31 -27
  357. package/src/daemon/host-bash-proxy.ts +148 -0
  358. package/src/daemon/host-file-proxy.ts +135 -0
  359. package/src/daemon/lifecycle.ts +49 -24
  360. package/src/daemon/mcp-reload-service.ts +123 -0
  361. package/src/daemon/message-protocol.ts +6 -0
  362. package/src/daemon/message-types/browser.ts +1 -1
  363. package/src/daemon/message-types/computer-use.ts +1 -4
  364. package/src/daemon/message-types/guardian-actions.ts +1 -1
  365. package/src/daemon/message-types/host-bash.ts +18 -0
  366. package/src/daemon/message-types/host-file.ts +44 -0
  367. package/src/daemon/message-types/integrations.ts +1 -67
  368. package/src/daemon/message-types/messages.ts +15 -0
  369. package/src/daemon/message-types/schedules.ts +11 -27
  370. package/src/daemon/message-types/sessions.ts +2 -1
  371. package/src/daemon/message-types/settings.ts +1 -1
  372. package/src/daemon/message-types/shared.ts +1 -1
  373. package/src/daemon/ride-shotgun-handler.ts +2 -42
  374. package/src/daemon/server.ts +43 -10
  375. package/src/daemon/session-agent-loop-handlers.ts +48 -7
  376. package/src/daemon/session-agent-loop.ts +97 -66
  377. package/src/daemon/session-attachments.ts +1 -1
  378. package/src/daemon/session-error.ts +17 -16
  379. package/src/daemon/session-lifecycle.ts +20 -1
  380. package/src/daemon/session-media-retry.ts +1 -15
  381. package/src/daemon/session-messaging.ts +14 -6
  382. package/src/daemon/session-process.ts +36 -7
  383. package/src/daemon/session-queue-manager.ts +62 -103
  384. package/src/daemon/session-runtime-assembly.ts +27 -0
  385. package/src/daemon/session-skill-tools.ts +12 -11
  386. package/src/daemon/session-slash.ts +7 -0
  387. package/src/daemon/session-surfaces.ts +19 -97
  388. package/src/daemon/session-tool-setup.ts +146 -6
  389. package/src/daemon/session.ts +77 -13
  390. package/src/errors.ts +0 -2
  391. package/src/export/formatter.ts +6 -0
  392. package/src/mcp/mcp-oauth-provider.ts +1 -3
  393. package/src/media/avatar-router.ts +20 -28
  394. package/src/media/avatar-types.ts +7 -14
  395. package/src/media/managed-avatar-client.ts +70 -34
  396. package/src/memory/conversation-title-service.ts +1 -2
  397. package/src/memory/db-init.ts +16 -0
  398. package/src/memory/embedding-backend.ts +129 -27
  399. package/src/memory/embedding-gemini.test.ts +256 -0
  400. package/src/memory/embedding-gemini.ts +47 -13
  401. package/src/memory/embedding-local.ts +14 -2
  402. package/src/memory/embedding-ollama.ts +15 -2
  403. package/src/memory/embedding-openai.ts +15 -2
  404. package/src/memory/embedding-types.test.ts +116 -0
  405. package/src/memory/embedding-types.ts +61 -0
  406. package/src/memory/fingerprint.ts +1 -1
  407. package/src/memory/indexer.ts +25 -1
  408. package/src/memory/job-handlers/embedding.test.ts +258 -0
  409. package/src/memory/job-handlers/embedding.ts +81 -1
  410. package/src/memory/job-handlers/index-maintenance.ts +35 -1
  411. package/src/memory/job-handlers/media-processing.ts +11 -1
  412. package/src/memory/job-utils.ts +21 -6
  413. package/src/memory/jobs-store.ts +5 -1
  414. package/src/memory/jobs-worker.ts +8 -0
  415. package/src/memory/message-content.ts +66 -0
  416. package/src/memory/migrations/100-core-tables.ts +1 -31
  417. package/src/memory/migrations/104-core-indexes.ts +0 -11
  418. package/src/memory/migrations/145-drop-accounts-table.ts +19 -0
  419. package/src/memory/migrations/146-schedule-oneshot-routing.ts +94 -0
  420. package/src/memory/migrations/147-migrate-reminders-to-schedules.ts +129 -0
  421. package/src/memory/migrations/148-drop-reminders-table.ts +18 -0
  422. package/src/memory/migrations/index.ts +4 -0
  423. package/src/memory/migrations/registry.ts +19 -0
  424. package/src/memory/qdrant-client.ts +158 -43
  425. package/src/memory/retriever.test.ts +0 -1
  426. package/src/memory/retriever.ts +12 -2
  427. package/src/memory/schema/infrastructure.ts +5 -29
  428. package/src/memory/search/formatting.ts +34 -9
  429. package/src/memory/search/semantic.ts +57 -2
  430. package/src/memory/search/types.ts +2 -1
  431. package/src/notifications/AGENTS.md +2 -2
  432. package/src/notifications/README.md +59 -58
  433. package/src/notifications/adapters/macos.ts +1 -1
  434. package/src/notifications/broadcaster.ts +5 -5
  435. package/src/notifications/copy-composer.ts +1 -1
  436. package/src/notifications/decision-engine.ts +2 -2
  437. package/src/notifications/destination-resolver.ts +2 -2
  438. package/src/notifications/emit-signal.ts +8 -8
  439. package/src/notifications/signal.ts +1 -1
  440. package/src/notifications/thread-seed-composer.ts +1 -1
  441. package/src/oauth/connect-orchestrator.ts +1 -1
  442. package/src/oauth/token-persistence.ts +1 -1
  443. package/src/permissions/checker.ts +12 -1
  444. package/src/permissions/defaults.ts +10 -14
  445. package/src/permissions/trust-store.ts +37 -0
  446. package/src/permissions/workspace-policy.ts +0 -1
  447. package/src/prompts/__tests__/build-cli-reference-section.test.ts +11 -0
  448. package/src/prompts/computer-use-prompt.ts +1 -1
  449. package/src/prompts/system-prompt.ts +29 -30
  450. package/src/prompts/templates/SOUL.md +1 -2
  451. package/src/prompts/templates/UPDATES.md +16 -7
  452. package/src/providers/anthropic/client.ts +87 -33
  453. package/src/providers/gemini/client.ts +6 -0
  454. package/src/providers/managed-proxy/constants.ts +5 -0
  455. package/src/providers/openai/client.ts +15 -0
  456. package/src/providers/registry.ts +2 -2
  457. package/src/providers/types.ts +24 -2
  458. package/src/runtime/AGENTS.md +18 -0
  459. package/src/runtime/assistant-event-hub.ts +2 -3
  460. package/src/runtime/assistant-event.ts +4 -4
  461. package/src/runtime/auth/__tests__/context.test.ts +5 -5
  462. package/src/runtime/auth/__tests__/credential-service.test.ts +0 -1
  463. package/src/runtime/auth/__tests__/guard-tests.test.ts +2 -2
  464. package/src/runtime/auth/__tests__/{ipc-auth-context.test.ts → local-auth-context.test.ts} +21 -21
  465. package/src/runtime/auth/__tests__/route-policy.test.ts +2 -2
  466. package/src/runtime/auth/__tests__/scopes.test.ts +7 -7
  467. package/src/runtime/auth/__tests__/subject.test.ts +8 -8
  468. package/src/runtime/auth/__tests__/token-service.test.ts +0 -1
  469. package/src/runtime/auth/route-policy.ts +8 -4
  470. package/src/runtime/auth/scopes.ts +1 -1
  471. package/src/runtime/auth/subject.ts +4 -4
  472. package/src/runtime/auth/token-service.ts +0 -23
  473. package/src/runtime/auth/types.ts +3 -3
  474. package/src/runtime/guardian-action-followup-executor.ts +1 -1
  475. package/src/runtime/guardian-action-grant-minter.ts +1 -1
  476. package/src/runtime/guardian-action-service.ts +3 -3
  477. package/src/runtime/http-server.ts +15 -2
  478. package/src/runtime/invite-service.ts +3 -3
  479. package/src/runtime/local-actor-identity.ts +17 -22
  480. package/src/runtime/pending-interactions.ts +21 -9
  481. package/src/runtime/routes/app-management-routes.ts +2 -3
  482. package/src/runtime/routes/approval-routes.ts +1 -3
  483. package/src/runtime/routes/btw-routes.ts +155 -0
  484. package/src/runtime/routes/computer-use-routes.ts +77 -31
  485. package/src/runtime/routes/conversation-routes.ts +230 -46
  486. package/src/runtime/routes/diagnostics-routes.ts +63 -29
  487. package/src/runtime/routes/documents-routes.ts +2 -2
  488. package/src/runtime/routes/global-search-routes.ts +1 -1
  489. package/src/runtime/routes/host-bash-routes.ts +83 -0
  490. package/src/runtime/routes/host-file-routes.ts +79 -0
  491. package/src/runtime/routes/integrations/slack/share.ts +1 -1
  492. package/src/runtime/routes/log-export-routes.ts +120 -0
  493. package/src/runtime/routes/mcp-routes.ts +20 -0
  494. package/src/runtime/routes/migration-routes.ts +3 -3
  495. package/src/runtime/routes/pairing-routes.ts +1 -1
  496. package/src/runtime/routes/recording-routes.ts +6 -4
  497. package/src/runtime/routes/schedule-routes.ts +31 -5
  498. package/src/runtime/routes/session-management-routes.ts +2 -6
  499. package/src/runtime/routes/session-query-routes.ts +18 -15
  500. package/src/runtime/routes/settings-routes.ts +7 -261
  501. package/src/runtime/routes/skills-routes.ts +7 -6
  502. package/src/runtime/routes/subagents-routes.ts +4 -10
  503. package/src/runtime/routes/surface-action-routes.ts +3 -14
  504. package/src/runtime/routes/surface-content-routes.ts +22 -5
  505. package/src/runtime/routes/work-items-routes.ts +21 -25
  506. package/src/runtime/routes/workspace-routes.test.ts +3 -3
  507. package/src/runtime/routes/workspace-utils.ts +1 -1
  508. package/src/runtime/telegram-streaming-delivery.ts +3 -0
  509. package/src/runtime/verification-outbound-actions.ts +2 -2
  510. package/src/schedule/integration-status.ts +0 -6
  511. package/src/schedule/schedule-store.ts +234 -43
  512. package/src/schedule/scheduler.ts +73 -74
  513. package/src/security/oauth2.ts +1 -1
  514. package/src/sequence/store.ts +12 -2
  515. package/src/skills/frontmatter.ts +19 -77
  516. package/src/skills/managed-store.ts +11 -2
  517. package/src/subagent/manager.ts +5 -3
  518. package/src/tasks/ephemeral-permissions.ts +3 -5
  519. package/src/tools/AGENTS.md +0 -1
  520. package/src/tools/browser/browser-manager.ts +17 -11
  521. package/src/tools/browser/jit-auth.ts +4 -1
  522. package/src/tools/claude-code/claude-code.ts +1 -1
  523. package/src/tools/computer-use/definitions.ts +48 -60
  524. package/src/tools/document/document-tool.ts +6 -6
  525. package/src/tools/filesystem/edit.ts +2 -1
  526. package/src/tools/filesystem/read.ts +20 -2
  527. package/src/tools/filesystem/write.ts +2 -1
  528. package/src/tools/host-filesystem/edit.ts +17 -1
  529. package/src/tools/host-filesystem/read.ts +16 -1
  530. package/src/tools/host-filesystem/write.ts +15 -1
  531. package/src/tools/host-terminal/host-shell.ts +24 -0
  532. package/src/tools/memory/definitions.ts +45 -81
  533. package/src/tools/memory/handlers.test.ts +0 -1
  534. package/src/tools/memory/handlers.ts +1 -1
  535. package/src/tools/memory/register.ts +26 -60
  536. package/src/tools/network/script-proxy/session-manager.ts +6 -8
  537. package/src/tools/network/web-fetch.ts +7 -1
  538. package/src/tools/network/web-search.ts +2 -1
  539. package/src/tools/registry.ts +23 -0
  540. package/src/tools/schedule/create.ts +113 -5
  541. package/src/tools/schedule/list.ts +57 -15
  542. package/src/tools/schedule/update.ts +73 -3
  543. package/src/tools/shared/filesystem/image-read.ts +192 -0
  544. package/src/tools/side-effects.ts +1 -7
  545. package/src/tools/skills/delete-managed.ts +27 -64
  546. package/src/tools/skills/execute.ts +54 -0
  547. package/src/tools/skills/load.ts +127 -5
  548. package/src/tools/skills/scaffold-managed.ts +93 -172
  549. package/src/tools/subagent/message.ts +0 -7
  550. package/src/tools/subagent/spawn.ts +1 -1
  551. package/src/tools/swarm/delegate.ts +0 -3
  552. package/src/tools/system/avatar-generator.ts +13 -19
  553. package/src/tools/system/request-permission.ts +2 -1
  554. package/src/tools/terminal/safe-env.ts +1 -0
  555. package/src/tools/tool-manifest.ts +41 -47
  556. package/src/tools/types.ts +6 -2
  557. package/src/tools/ui-surface/definitions.ts +0 -55
  558. package/src/util/errors.ts +0 -10
  559. package/src/workspace/git-service.ts +0 -2
  560. package/src/__tests__/account-registry.test.ts +0 -258
  561. package/src/__tests__/email-classifier.test.ts +0 -25
  562. package/src/__tests__/gmail-integration.test.ts +0 -97
  563. package/src/__tests__/handle-user-message-secret-resume.test.ts +0 -172
  564. package/src/__tests__/managed-twitter-guardrails.test.ts +0 -357
  565. package/src/__tests__/recording-intent-fallback.test.ts +0 -199
  566. package/src/__tests__/recording-intent.test.ts +0 -985
  567. package/src/__tests__/recording-state-machine.test.ts +0 -1574
  568. package/src/__tests__/reminder-store.test.ts +0 -350
  569. package/src/__tests__/reminder.test.ts +0 -337
  570. package/src/__tests__/scan-result-store.test.ts +0 -121
  571. package/src/__tests__/twitter-platform-proxy-client.test.ts +0 -475
  572. package/src/__tests__/view-image-tool.test.ts +0 -241
  573. package/src/cli/commands/amazon/cart.ts +0 -513
  574. package/src/cli/commands/amazon/checkout.ts +0 -394
  575. package/src/cli/commands/amazon/client.ts +0 -513
  576. package/src/cli/commands/amazon/index.ts +0 -885
  577. package/src/cli/commands/amazon/product-details.ts +0 -145
  578. package/src/cli/commands/amazon/request-extractor.ts +0 -187
  579. package/src/cli/commands/amazon/search.ts +0 -76
  580. package/src/cli/commands/amazon/session.ts +0 -108
  581. package/src/cli/commands/twitter/__tests__/cli-read-routing.test.ts +0 -345
  582. package/src/cli/commands/twitter/__tests__/cli-routing.test.ts +0 -252
  583. package/src/cli/commands/twitter/__tests__/oauth-client.test.ts +0 -151
  584. package/src/cli/commands/twitter/index.ts +0 -420
  585. package/src/cli/commands/twitter/oauth-client.ts +0 -60
  586. package/src/cli/commands/twitter/router.ts +0 -351
  587. package/src/cli/commands/twitter/types.ts +0 -30
  588. package/src/config/bundled-skills/agentmail/SKILL.md +0 -132
  589. package/src/config/bundled-skills/agentmail/icon.svg +0 -21
  590. package/src/config/bundled-skills/amazon/SKILL.md +0 -136
  591. package/src/config/bundled-skills/amazon/icon.svg +0 -13
  592. package/src/config/bundled-skills/api-mapping/SKILL.md +0 -78
  593. package/src/config/bundled-skills/api-mapping/icon.svg +0 -18
  594. package/src/config/bundled-skills/cli-discover/SKILL.md +0 -68
  595. package/src/config/bundled-skills/deploy-fullstack-vercel/SKILL.md +0 -179
  596. package/src/config/bundled-skills/document-writer/SKILL.md +0 -195
  597. package/src/config/bundled-skills/elevenlabs-voice/SKILL.md +0 -140
  598. package/src/config/bundled-skills/email-setup/SKILL.md +0 -68
  599. package/src/config/bundled-skills/frontend-design/SKILL.md +0 -44
  600. package/src/config/bundled-skills/frontend-design/icon.svg +0 -16
  601. package/src/config/bundled-skills/google-oauth-setup/SKILL.md +0 -452
  602. package/src/config/bundled-skills/guardian-verify-setup/SKILL.md +0 -203
  603. package/src/config/bundled-skills/influencer/SKILL.md +0 -144
  604. package/src/config/bundled-skills/influencer/scripts/client.ts +0 -1269
  605. package/src/config/bundled-skills/influencer/scripts/influencer.ts +0 -267
  606. package/src/config/bundled-skills/macos-automation/SKILL.md +0 -65
  607. package/src/config/bundled-skills/macos-automation/icon.svg +0 -12
  608. package/src/config/bundled-skills/mcp-setup/SKILL.md +0 -75
  609. package/src/config/bundled-skills/media-processing/tools/media-diagnostics.ts +0 -184
  610. package/src/config/bundled-skills/messaging/tools/gmail-archive-by-query.ts +0 -80
  611. package/src/config/bundled-skills/messaging/tools/gmail-archive.ts +0 -29
  612. package/src/config/bundled-skills/messaging/tools/gmail-batch-archive.ts +0 -56
  613. package/src/config/bundled-skills/messaging/tools/gmail-batch-label.ts +0 -34
  614. package/src/config/bundled-skills/messaging/tools/gmail-download-attachment.ts +0 -47
  615. package/src/config/bundled-skills/messaging/tools/gmail-label.ts +0 -31
  616. package/src/config/bundled-skills/messaging/tools/gmail-list-attachments.ts +0 -67
  617. package/src/config/bundled-skills/messaging/tools/gmail-send-with-attachments.ts +0 -97
  618. package/src/config/bundled-skills/messaging/tools/gmail-summarize-thread.ts +0 -87
  619. package/src/config/bundled-skills/messaging/tools/gmail-triage.ts +0 -135
  620. package/src/config/bundled-skills/messaging/tools/messaging-analyze-activity.ts +0 -24
  621. package/src/config/bundled-skills/messaging/tools/messaging-reply.ts +0 -201
  622. package/src/config/bundled-skills/messaging/tools/send-notification.ts +0 -1
  623. package/src/config/bundled-skills/messaging/tools/sequence-cancel.ts +0 -27
  624. package/src/config/bundled-skills/messaging/tools/sequence-pause.ts +0 -48
  625. package/src/config/bundled-skills/messaging/tools/sequence-resume.ts +0 -27
  626. package/src/config/bundled-skills/messaging/tools/sequence-update.ts +0 -56
  627. package/src/config/bundled-skills/notion/SKILL.md +0 -240
  628. package/src/config/bundled-skills/notion-oauth-setup/SKILL.md +0 -126
  629. package/src/config/bundled-skills/oauth-setup/SKILL.md +0 -143
  630. package/src/config/bundled-skills/public-ingress/SKILL.md +0 -258
  631. package/src/config/bundled-skills/reminder/SKILL.md +0 -79
  632. package/src/config/bundled-skills/reminder/TOOLS.json +0 -89
  633. package/src/config/bundled-skills/reminder/tools/reminder-list.ts +0 -12
  634. package/src/config/bundled-skills/restaurant-reservation/SKILL.md +0 -141
  635. package/src/config/bundled-skills/screen-recording/SKILL.md +0 -148
  636. package/src/config/bundled-skills/self-upgrade/SKILL.md +0 -69
  637. package/src/config/bundled-skills/skills-catalog/SKILL.md +0 -78
  638. package/src/config/bundled-skills/slack-app-setup/SKILL.md +0 -178
  639. package/src/config/bundled-skills/slack-digest-setup/SKILL.md +0 -163
  640. package/src/config/bundled-skills/slack-oauth-setup/SKILL.md +0 -157
  641. package/src/config/bundled-skills/start-the-day/SKILL.md +0 -70
  642. package/src/config/bundled-skills/start-the-day/icon.svg +0 -13
  643. package/src/config/bundled-skills/telegram-setup/SKILL.md +0 -105
  644. package/src/config/bundled-skills/time-based-actions/SKILL.md +0 -142
  645. package/src/config/bundled-skills/twilio-setup/SKILL.md +0 -232
  646. package/src/config/bundled-skills/twitter/SKILL.md +0 -206
  647. package/src/config/bundled-skills/twitter/icon.svg +0 -14
  648. package/src/config/bundled-skills/typescript-eval/SKILL.md +0 -60
  649. package/src/config/bundled-skills/vercel-token-setup/SKILL.md +0 -214
  650. package/src/config/bundled-skills/voice-setup/SKILL.md +0 -131
  651. package/src/config/bundled-skills/voice-setup/icon.svg +0 -20
  652. package/src/daemon/handlers/pairing.ts +0 -119
  653. package/src/daemon/handlers/session-user-message.ts +0 -961
  654. package/src/daemon/recording-executor.ts +0 -180
  655. package/src/daemon/recording-intent-fallback.ts +0 -162
  656. package/src/daemon/recording-intent.ts +0 -493
  657. package/src/memory/account-store.ts +0 -117
  658. package/src/messaging/activity-analyzer.ts +0 -76
  659. package/src/messaging/email-classifier.ts +0 -208
  660. package/src/messaging/index.ts +0 -2
  661. package/src/messaging/outreach-classifier.ts +0 -185
  662. package/src/messaging/thread-summarizer.ts +0 -346
  663. package/src/messaging/types.ts +0 -17
  664. package/src/tools/browser/x-auto-navigate.ts +0 -254
  665. package/src/tools/credentials/account-registry.ts +0 -144
  666. package/src/tools/filesystem/view-image.ts +0 -244
  667. package/src/tools/reminder/reminder-store.ts +0 -194
  668. package/src/tools/reminder/reminder.ts +0 -158
  669. package/src/tools/system/navigate-settings.ts +0 -74
  670. package/src/tools/system/open-system-settings.ts +0 -85
  671. package/src/tools/system/version.ts +0 -54
  672. package/src/twitter/platform-proxy-client.ts +0 -408
  673. /package/src/config/bundled-skills/{messaging → gmail}/tools/scan-result-store.ts +0 -0
  674. /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-analytics.ts +0 -0
  675. /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-create.ts +0 -0
  676. /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-delete.ts +0 -0
  677. /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-enroll.ts +0 -0
  678. /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-enrollment-list.ts +0 -0
  679. /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-get.ts +0 -0
  680. /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-import.ts +0 -0
  681. /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-list.ts +0 -0
@@ -127,17 +127,14 @@ export {
127
127
  export type { NotificationsConfig } from "./schemas/notifications.js";
128
128
  export { NotificationsConfigSchema } from "./schemas/notifications.js";
129
129
  export type {
130
- AvatarConfig,
131
130
  DaemonConfig,
132
131
  PlatformConfig,
133
132
  UiConfig,
134
133
  } from "./schemas/platform.js";
135
134
  export {
136
- AvatarConfigSchema,
137
135
  DaemonConfigSchema,
138
136
  PlatformConfigSchema,
139
137
  UiConfigSchema,
140
- VALID_AVATAR_STRATEGIES,
141
138
  } from "./schemas/platform.js";
142
139
  export type { SandboxConfig } from "./schemas/sandbox.js";
143
140
  export { SandboxConfigSchema } from "./schemas/sandbox.js";
@@ -202,7 +199,6 @@ import { McpConfigSchema } from "./schemas/mcp.js";
202
199
  import { MemoryConfigSchema } from "./schemas/memory.js";
203
200
  import { NotificationsConfigSchema } from "./schemas/notifications.js";
204
201
  import {
205
- AvatarConfigSchema,
206
202
  DaemonConfigSchema,
207
203
  PlatformConfigSchema,
208
204
  UiConfigSchema,
@@ -274,11 +270,6 @@ export const AssistantConfigSchema = z
274
270
  .int("maxTokens must be an integer")
275
271
  .positive("maxTokens must be a positive integer")
276
272
  .default(16000),
277
- maxToolUseTurns: z
278
- .number({ error: "maxToolUseTurns must be a number" })
279
- .int("maxToolUseTurns must be an integer")
280
- .nonnegative("maxToolUseTurns must be a non-negative integer")
281
- .default(40),
282
273
  effort: EffortSchema,
283
274
  thinking: ThinkingConfigSchema.default(ThinkingConfigSchema.parse({})),
284
275
  contextWindow: ContextWindowConfigSchema.default(
@@ -321,7 +312,6 @@ export const AssistantConfigSchema = z
321
312
  notifications: NotificationsConfigSchema.default(
322
313
  NotificationsConfigSchema.parse({}),
323
314
  ),
324
- avatar: AvatarConfigSchema.default(AvatarConfigSchema.parse({})),
325
315
  ui: UiConfigSchema.default(UiConfigSchema.parse({})),
326
316
  assistantFeatureFlagValues: z
327
317
  .record(
@@ -334,16 +324,29 @@ export const AssistantConfigSchema = z
334
324
  })
335
325
  .superRefine((config, ctx) => {
336
326
  if (
337
- config.contextWindow?.targetInputTokens != null &&
338
- config.contextWindow?.maxInputTokens != null &&
339
- config.contextWindow.targetInputTokens >=
340
- config.contextWindow.maxInputTokens
327
+ config.contextWindow?.targetBudgetRatio != null &&
328
+ config.contextWindow?.compactThreshold != null &&
329
+ config.contextWindow.targetBudgetRatio >=
330
+ config.contextWindow.compactThreshold
341
331
  ) {
342
332
  ctx.addIssue({
343
333
  code: z.ZodIssueCode.custom,
344
- path: ["contextWindow", "targetInputTokens"],
334
+ path: ["contextWindow", "targetBudgetRatio"],
345
335
  message:
346
- "contextWindow.targetInputTokens must be less than contextWindow.maxInputTokens",
336
+ "contextWindow.targetBudgetRatio must be less than contextWindow.compactThreshold",
337
+ });
338
+ }
339
+ if (
340
+ config.contextWindow?.targetBudgetRatio != null &&
341
+ config.contextWindow?.summaryBudgetRatio != null &&
342
+ config.contextWindow.targetBudgetRatio <=
343
+ config.contextWindow.summaryBudgetRatio
344
+ ) {
345
+ ctx.addIssue({
346
+ code: z.ZodIssueCode.custom,
347
+ path: ["contextWindow", "targetBudgetRatio"],
348
+ message:
349
+ "contextWindow.targetBudgetRatio must be greater than contextWindow.summaryBudgetRatio",
347
350
  });
348
351
  }
349
352
  const segmentation = config.memory?.segmentation;
@@ -80,34 +80,24 @@ export const ContextWindowConfigSchema = z.object({
80
80
  .int("contextWindow.maxInputTokens must be an integer")
81
81
  .positive("contextWindow.maxInputTokens must be a positive integer")
82
82
  .default(200000),
83
- targetInputTokens: z
84
- .number({ error: "contextWindow.targetInputTokens must be a number" })
85
- .int("contextWindow.targetInputTokens must be an integer")
86
- .positive("contextWindow.targetInputTokens must be a positive integer")
87
- .default(110000),
83
+ targetBudgetRatio: z
84
+ .number({ error: "contextWindow.targetBudgetRatio must be a number" })
85
+ .finite("contextWindow.targetBudgetRatio must be finite")
86
+ .gt(0, "contextWindow.targetBudgetRatio must be greater than 0")
87
+ .lte(1, "contextWindow.targetBudgetRatio must be less than or equal to 1")
88
+ .default(0.3),
88
89
  compactThreshold: z
89
90
  .number({ error: "contextWindow.compactThreshold must be a number" })
90
91
  .finite("contextWindow.compactThreshold must be finite")
91
92
  .gt(0, "contextWindow.compactThreshold must be greater than 0")
92
93
  .lte(1, "contextWindow.compactThreshold must be less than or equal to 1")
93
94
  .default(0.8),
94
- preserveRecentUserTurns: z
95
- .number({ error: "contextWindow.preserveRecentUserTurns must be a number" })
96
- .int("contextWindow.preserveRecentUserTurns must be an integer")
97
- .positive(
98
- "contextWindow.preserveRecentUserTurns must be a positive integer",
99
- )
100
- .default(8),
101
- summaryMaxTokens: z
102
- .number({ error: "contextWindow.summaryMaxTokens must be a number" })
103
- .int("contextWindow.summaryMaxTokens must be an integer")
104
- .positive("contextWindow.summaryMaxTokens must be a positive integer")
105
- .default(1200),
106
- chunkTokens: z
107
- .number({ error: "contextWindow.chunkTokens must be a number" })
108
- .int("contextWindow.chunkTokens must be an integer")
109
- .positive("contextWindow.chunkTokens must be a positive integer")
110
- .default(12000),
95
+ summaryBudgetRatio: z
96
+ .number({ error: "contextWindow.summaryBudgetRatio must be a number" })
97
+ .finite("contextWindow.summaryBudgetRatio must be finite")
98
+ .gt(0, "contextWindow.summaryBudgetRatio must be greater than 0")
99
+ .lte(1, "contextWindow.summaryBudgetRatio must be less than or equal to 1")
100
+ .default(0.05),
111
101
  overflowRecovery: ContextOverflowRecoveryConfigSchema.default(
112
102
  ContextOverflowRecoveryConfigSchema.parse({}),
113
103
  ),
@@ -29,7 +29,25 @@ export const MemoryEmbeddingsConfigSchema = z.object({
29
29
  .default("text-embedding-3-small"),
30
30
  geminiModel: z
31
31
  .string({ error: "memory.embeddings.geminiModel must be a string" })
32
- .default("gemini-embedding-001"),
32
+ .default("gemini-embedding-2-preview"),
33
+ geminiTaskType: z
34
+ .enum([
35
+ "SEMANTIC_SIMILARITY",
36
+ "CLASSIFICATION",
37
+ "CLUSTERING",
38
+ "RETRIEVAL_DOCUMENT",
39
+ "RETRIEVAL_QUERY",
40
+ "CODE_RETRIEVAL_QUERY",
41
+ "QUESTION_ANSWERING",
42
+ "FACT_VERIFICATION",
43
+ ], { error: "memory.embeddings.geminiTaskType must be a valid task type" })
44
+ .optional(),
45
+ geminiDimensions: z
46
+ .number({ error: "memory.embeddings.geminiDimensions must be a number" })
47
+ .int("memory.embeddings.geminiDimensions must be an integer")
48
+ .min(128, "memory.embeddings.geminiDimensions must be >= 128")
49
+ .max(3072, "memory.embeddings.geminiDimensions must be <= 3072")
50
+ .optional(),
33
51
  ollamaModel: z
34
52
  .string({ error: "memory.embeddings.ollamaModel must be a string" })
35
53
  .default("nomic-embed-text"),
@@ -1,21 +1,5 @@
1
1
  import { z } from "zod";
2
2
 
3
- export const VALID_AVATAR_STRATEGIES = [
4
- "managed_required",
5
- "managed_prefer",
6
- "local_only",
7
- ] as const;
8
-
9
- export const AvatarConfigSchema = z.object({
10
- generationStrategy: z
11
- .enum(VALID_AVATAR_STRATEGIES, {
12
- error: `avatar.generationStrategy must be one of: ${VALID_AVATAR_STRATEGIES.join(", ")}`,
13
- })
14
- .default("local_only"),
15
- });
16
-
17
- export type AvatarConfig = z.infer<typeof AvatarConfigSchema>;
18
-
19
3
  export const PlatformConfigSchema = z.object({
20
4
  baseUrl: z
21
5
  .string({ error: "platform.baseUrl must be a string" })
@@ -14,13 +14,15 @@ export interface ResolvedSkill {
14
14
  }
15
15
 
16
16
  /**
17
- * Derive the feature flag key for a given skill ID.
18
- *
19
- * Exported so other modules (system-prompt, session-skill-tools, skill loader)
20
- * can perform the same mapping.
17
+ * Derive the feature flag key for a skill from its frontmatter `featureFlag` field.
18
+ * Returns undefined if the skill has no feature flag declared.
21
19
  */
22
- export function skillFlagKey(skillId: string): string {
23
- return `feature_flags.${skillId}.enabled`;
20
+ export function skillFlagKey(
21
+ skill: Pick<SkillSummary, "featureFlag">,
22
+ ): string | undefined {
23
+ return skill.featureFlag
24
+ ? `feature_flags.${skill.featureFlag}.enabled`
25
+ : undefined;
24
26
  }
25
27
 
26
28
  export function resolveSkillStates(
@@ -34,8 +36,9 @@ export function resolveSkillStates(
34
36
  };
35
37
 
36
38
  for (const skill of catalog) {
37
- // Assistant feature flag gate: if the flag is explicitly OFF, skip this skill entirely
38
- if (!isAssistantFeatureFlagEnabled(skillFlagKey(skill.id), config)) {
39
+ // Assistant feature flag gate: if the skill declares a flag and it's disabled, skip it
40
+ const flagKey = skillFlagKey(skill);
41
+ if (flagKey && !isAssistantFeatureFlagEnabled(flagKey, config)) {
39
42
  continue;
40
43
  }
41
44
 
@@ -1,5 +1,6 @@
1
1
  import {
2
2
  existsSync,
3
+ lstatSync,
3
4
  readdirSync,
4
5
  readFileSync,
5
6
  realpathSync,
@@ -69,6 +70,7 @@ const VellumMetadataSchema = z
69
70
  "disable-model-invocation": z.union([z.boolean(), z.string()]).optional(),
70
71
  includes: z.array(z.string()).optional(),
71
72
  "credential-setup-for": z.string().optional(),
73
+ "feature-flag": z.string().optional(),
72
74
  })
73
75
  .passthrough();
74
76
 
@@ -136,6 +138,8 @@ export interface SkillSummary {
136
138
  includes?: string[];
137
139
  /** Declares which credential this skill sets up (e.g. "vercel:api_token"). */
138
140
  credentialSetupFor?: string;
141
+ /** Feature flag ID declared in frontmatter. Only skills with this field are subject to feature flag gating. */
142
+ featureFlag?: string;
139
143
  }
140
144
 
141
145
  export interface SkillDefinition extends SkillSummary {
@@ -329,6 +333,7 @@ interface ParsedFrontmatter {
329
333
  metadata?: VellumMetadata;
330
334
  includes?: string[];
331
335
  credentialSetupFor?: string;
336
+ featureFlag?: string;
332
337
  }
333
338
 
334
339
  function parseFrontmatter(
@@ -343,8 +348,11 @@ function parseFrontmatter(
343
348
 
344
349
  const { fields, body } = result;
345
350
 
346
- const name = fields.name?.trim();
347
- const description = fields.description?.trim();
351
+ const name = typeof fields.name === "string" ? fields.name.trim() : undefined;
352
+ const description =
353
+ typeof fields.description === "string"
354
+ ? fields.description.trim()
355
+ : undefined;
348
356
  if (!name || !description) {
349
357
  log.warn(
350
358
  { skillFilePath },
@@ -353,25 +361,31 @@ function parseFrontmatter(
353
361
  return null;
354
362
  }
355
363
 
356
- // Parse metadata as single-line JSON string, validate with Zod schema
364
+ // metadata is already a parsed object from YAML — validate with Zod schema
357
365
  let metadata: VellumMetadata | undefined;
358
366
  let parsedMeta: z.infer<typeof SkillMetadataSchema> | undefined;
359
367
  let vellum: z.infer<typeof VellumMetadataSchema> | undefined;
360
368
 
361
- const metadataRaw = fields.metadata?.trim();
362
- if (metadataRaw) {
363
- try {
364
- const json = JSON.parse(metadataRaw);
365
- const result = SkillMetadataSchema.safeParse(json);
366
- if (result.success) {
367
- parsedMeta = result.data;
369
+ const metadataRaw = fields.metadata;
370
+ if (metadataRaw != null) {
371
+ if (typeof metadataRaw === "string") {
372
+ // metadata is a string — this means someone wrote inline JSON or a
373
+ // bare string value. YAML metadata must be a nested object.
374
+ log.warn(
375
+ { skillFilePath },
376
+ "Metadata must be a YAML object, not a string; ignoring metadata field",
377
+ );
378
+ } else if (typeof metadataRaw === "object") {
379
+ const zodResult = SkillMetadataSchema.safeParse(metadataRaw);
380
+ if (zodResult.success) {
381
+ parsedMeta = zodResult.data;
368
382
  vellum = parsedMeta.vellum;
369
383
  if (parsedMeta.vellum) {
370
384
  metadata = parsedMeta.vellum as VellumMetadata;
371
385
  }
372
386
  // Inject top-level emoji into metadata when metadata.vellum doesn't
373
387
  // carry its own emoji. The Agent Skills spec places emoji at the
374
- // top level of the metadata JSON, so bundled skills that follow
388
+ // top level of the metadata object, so bundled skills that follow
375
389
  // this convention would otherwise lose their emoji value.
376
390
  if (parsedMeta.emoji) {
377
391
  if (metadata && !metadata.emoji) {
@@ -381,27 +395,30 @@ function parseFrontmatter(
381
395
  }
382
396
  }
383
397
  } else {
384
- // Zod validation failed — fall back to raw JSON so we don't lose
385
- // all metadata because of a single bad field value. We coerce
398
+ // Zod validation failed — fall back to raw parsed object so we don't
399
+ // lose all metadata because of a single bad field value. We coerce
386
400
  // critical array fields so downstream code that iterates them
387
401
  // (e.g. `.join()`, `for...of`, `.some()`) won't crash.
388
402
  log.warn(
389
- { err: result.error, skillFilePath },
390
- "Metadata failed schema validation; falling back to raw JSON",
403
+ { err: zodResult.error, skillFilePath },
404
+ "Metadata failed schema validation; falling back to raw object",
391
405
  );
392
- parsedMeta = json;
393
- vellum = json?.vellum;
394
- if (json?.vellum && typeof json.vellum === "object") {
395
- const raw = json.vellum as Record<string, unknown>;
406
+ const raw = metadataRaw as Record<string, unknown>;
407
+ parsedMeta = raw as z.infer<typeof SkillMetadataSchema>;
408
+ vellum = raw?.vellum as z.infer<typeof VellumMetadataSchema>;
409
+ if (raw?.vellum && typeof raw.vellum === "object") {
410
+ const vellumRaw = raw.vellum as Record<string, unknown>;
396
411
 
397
412
  // Coerce `os` to string[] — a bare string is wrapped in an array.
398
- if (raw.os !== undefined) {
399
- raw.os = Array.isArray(raw.os) ? raw.os : [raw.os];
413
+ if (vellumRaw.os !== undefined) {
414
+ vellumRaw.os = Array.isArray(vellumRaw.os)
415
+ ? vellumRaw.os
416
+ : [vellumRaw.os];
400
417
  }
401
418
 
402
419
  // Coerce `requires` sub-fields to arrays.
403
- if (raw.requires && typeof raw.requires === "object") {
404
- const req = raw.requires as Record<string, unknown>;
420
+ if (vellumRaw.requires && typeof vellumRaw.requires === "object") {
421
+ const req = vellumRaw.requires as Record<string, unknown>;
405
422
  for (const key of ["bins", "anyBins", "env", "config"] as const) {
406
423
  if (req[key] !== undefined && !Array.isArray(req[key])) {
407
424
  req[key] = typeof req[key] === "string" ? [req[key]] : [];
@@ -409,14 +426,9 @@ function parseFrontmatter(
409
426
  }
410
427
  }
411
428
 
412
- metadata = raw as unknown as VellumMetadata;
429
+ metadata = vellumRaw as unknown as VellumMetadata;
413
430
  }
414
431
  }
415
- } catch (err) {
416
- log.warn(
417
- { err, skillFilePath },
418
- "Failed to parse metadata JSON in frontmatter",
419
- );
420
432
  }
421
433
  }
422
434
 
@@ -459,6 +471,11 @@ function parseFrontmatter(
459
471
  ? vellum["credential-setup-for"]
460
472
  : undefined;
461
473
 
474
+ const featureFlag =
475
+ typeof vellum?.["feature-flag"] === "string"
476
+ ? vellum["feature-flag"]
477
+ : undefined;
478
+
462
479
  const displayName =
463
480
  (typeof vellum?.["display-name"] === "string"
464
481
  ? vellum["display-name"]
@@ -474,6 +491,7 @@ function parseFrontmatter(
474
491
  metadata,
475
492
  includes,
476
493
  credentialSetupFor,
494
+ featureFlag,
477
495
  };
478
496
  }
479
497
 
@@ -628,6 +646,7 @@ function readSkillFromDirectory(
628
646
  toolManifest: detectToolManifest(directoryPath),
629
647
  includes: parsed.includes,
630
648
  credentialSetupFor: parsed.credentialSetupFor,
649
+ featureFlag: parsed.featureFlag,
631
650
  };
632
651
  } catch (err) {
633
652
  log.warn({ err, skillFilePath }, "Failed to read skill file");
@@ -678,6 +697,7 @@ function readBundledSkillFromDirectory(
678
697
  toolManifest: detectToolManifest(directoryPath),
679
698
  includes: parsed.includes,
680
699
  credentialSetupFor: parsed.credentialSetupFor,
700
+ featureFlag: parsed.featureFlag,
681
701
  };
682
702
  } catch (err) {
683
703
  log.warn({ err, skillFilePath }, "Failed to read bundled skill file");
@@ -736,6 +756,7 @@ function loadBundledSkills(): SkillSummary[] {
736
756
  toolManifest: skill.toolManifest,
737
757
  includes: skill.includes,
738
758
  credentialSetupFor: skill.credentialSetupFor,
759
+ featureFlag: skill.featureFlag,
739
760
  });
740
761
  }
741
762
 
@@ -873,6 +894,7 @@ function skillSummaryFromDefinition(
873
894
  toolManifest: skill.toolManifest,
874
895
  includes: skill.includes,
875
896
  credentialSetupFor: skill.credentialSetupFor,
897
+ featureFlag: skill.featureFlag,
876
898
  };
877
899
  }
878
900
 
@@ -925,6 +947,7 @@ export function loadSkillCatalog(
925
947
  toolManifest: detectToolManifest(directory),
926
948
  includes: parsed.includes,
927
949
  credentialSetupFor: parsed.credentialSetupFor,
950
+ featureFlag: parsed.featureFlag,
928
951
  });
929
952
  } catch (err) {
930
953
  log.warn({ err, directory }, "Failed to read skill from extraDirs");
@@ -1021,6 +1044,7 @@ export function loadSkillCatalog(
1021
1044
  toolManifest: detectToolManifest(directory),
1022
1045
  includes: parsed.includes,
1023
1046
  credentialSetupFor: parsed.credentialSetupFor,
1047
+ featureFlag: parsed.featureFlag,
1024
1048
  };
1025
1049
 
1026
1050
  if (seenIds.has(id)) {
@@ -1080,24 +1104,51 @@ function applyFeatureGatedSections(body: string): string {
1080
1104
  return result;
1081
1105
  }
1082
1106
 
1107
+ /**
1108
+ * Returns true if `filePath` is a symlink whose resolved real path escapes
1109
+ * `rootDir`. Symlinks that stay within `rootDir` are allowed; only those that
1110
+ * point outside are considered unsafe.
1111
+ */
1112
+ function isEscapingSymlink(filePath: string, rootDir: string): boolean {
1113
+ try {
1114
+ if (!lstatSync(filePath).isSymbolicLink()) return false;
1115
+ const real = realpathSync(filePath);
1116
+ const normalizedRoot = getCanonicalPath(rootDir);
1117
+ return (
1118
+ real !== normalizedRoot &&
1119
+ !real.startsWith(normalizedRoot + "/") &&
1120
+ !real.startsWith(normalizedRoot + "\\")
1121
+ );
1122
+ } catch {
1123
+ // If we can't resolve (e.g. dangling symlink), treat as escaping.
1124
+ return true;
1125
+ }
1126
+ }
1127
+
1083
1128
  /**
1084
1129
  * Scan for a `references/` subdirectory within a skill directory and append
1085
1130
  * the contents of any `.md` files found there to the skill body. Each
1086
1131
  * reference file is labeled with a `--- Reference: <Name> ---` header.
1087
1132
  * Files are appended in alphabetical order for deterministic output.
1088
- * Non-`.md` files are ignored. Errors are logged as warnings and the
1089
- * original body is returned unchanged.
1133
+ * Non-`.md` files are ignored. Symlinks that resolve outside the skill
1134
+ * directory are skipped. Errors are logged as warnings and the original body
1135
+ * is returned unchanged.
1090
1136
  */
1091
1137
  function appendReferenceFiles(body: string, directoryPath: string): string {
1092
1138
  try {
1093
1139
  const refsDir = join(directoryPath, "references");
1094
- if (!existsSync(refsDir) || !statSync(refsDir).isDirectory()) {
1140
+ if (
1141
+ !existsSync(refsDir) ||
1142
+ isEscapingSymlink(refsDir, directoryPath) ||
1143
+ !statSync(refsDir).isDirectory()
1144
+ ) {
1095
1145
  return body;
1096
1146
  }
1097
1147
 
1098
1148
  const entries = readdirSync(refsDir);
1099
1149
  const mdFiles = entries
1100
1150
  .filter((f) => f.toLowerCase().endsWith(".md"))
1151
+ .filter((f) => !isEscapingSymlink(join(refsDir, f), directoryPath))
1101
1152
  .sort((a, b) => a.localeCompare(b));
1102
1153
 
1103
1154
  if (mdFiles.length === 0) return body;
@@ -7,6 +7,7 @@ const TOOL_BLOCK_OVERHEAD_TOKENS = 16;
7
7
  const IMAGE_BLOCK_TOKENS = 1024;
8
8
  const IMAGE_BLOCK_OVERHEAD_TOKENS = 16;
9
9
  const FILE_BLOCK_OVERHEAD_TOKENS = 48;
10
+ const WEB_SEARCH_RESULT_TOKENS = 800;
10
11
  const OTHER_BLOCK_TOKENS = 16;
11
12
  const SYSTEM_PROMPT_OVERHEAD_TOKENS = 8;
12
13
  const GEMINI_INLINE_FILE_MIME_TYPES = new Set(["application/pdf"]);
@@ -84,6 +85,16 @@ export function estimateContentBlockTokens(
84
85
  return TEXT_BLOCK_OVERHEAD_TOKENS + estimateTextTokens(block.thinking);
85
86
  case "redacted_thinking":
86
87
  return TEXT_BLOCK_OVERHEAD_TOKENS + estimateTextTokens(block.data);
88
+ case "server_tool_use":
89
+ return (
90
+ TOOL_BLOCK_OVERHEAD_TOKENS +
91
+ estimateTextTokens(block.name) +
92
+ estimateTextTokens(stableJson(block.input))
93
+ );
94
+ case "web_search_tool_result":
95
+ return (
96
+ WEB_SEARCH_RESULT_TOKENS + estimateTextTokens(stableJson(block.content))
97
+ );
87
98
  default:
88
99
  return OTHER_BLOCK_TOKENS;
89
100
  }