@vellumai/assistant 0.4.43 → 0.4.45

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (713) hide show
  1. package/.prettierignore +4 -0
  2. package/ARCHITECTURE.md +46 -44
  3. package/README.md +15 -16
  4. package/bun.lock +10 -35
  5. package/docs/architecture/integrations.md +102 -215
  6. package/docs/architecture/keychain-broker.md +1 -1
  7. package/docs/architecture/memory.md +2 -2
  8. package/docs/architecture/scheduling.md +1 -1
  9. package/docs/architecture/security.md +11 -11
  10. package/docs/error-handling.md +1 -1
  11. package/docs/trusted-contact-access.md +3 -3
  12. package/drizzle/meta/0000_snapshot.json +34 -100
  13. package/drizzle/meta/_journal.json +1 -1
  14. package/drizzle.config.ts +4 -4
  15. package/package.json +3 -2
  16. package/scripts/capture-x-graphql.ts +237 -141
  17. package/scripts/generate-bundled-tool-registry.ts +223 -0
  18. package/src/__tests__/access-request-decision.test.ts +0 -1
  19. package/src/__tests__/actor-token-service.test.ts +23 -24
  20. package/src/__tests__/agent-loop.test.ts +0 -131
  21. package/src/__tests__/always-loaded-tools-guard.test.ts +71 -0
  22. package/src/__tests__/amazon-cdp-integration.test.ts +11 -9
  23. package/src/__tests__/approval-primitive.test.ts +0 -1
  24. package/src/__tests__/approval-routes-http.test.ts +11 -3
  25. package/src/__tests__/asset-materialize-tool.test.ts +0 -1
  26. package/src/__tests__/asset-search-tool.test.ts +0 -1
  27. package/src/__tests__/assistant-attachment-directive.test.ts +1 -1
  28. package/src/__tests__/assistant-events-sse-hardening.test.ts +0 -1
  29. package/src/__tests__/assistant-feature-flag-guardrails.test.ts +0 -2
  30. package/src/__tests__/assistant-feature-flags-integration.test.ts +70 -18
  31. package/src/__tests__/assistant-id-boundary-guard.test.ts +6 -6
  32. package/src/__tests__/attachments-store.test.ts +0 -1
  33. package/src/__tests__/avatar-e2e.test.ts +74 -115
  34. package/src/__tests__/avatar-router.test.ts +25 -62
  35. package/src/__tests__/browser-manager.test.ts +24 -0
  36. package/src/__tests__/browser-skill-baseline-tool-payload.test.ts +4 -3
  37. package/src/__tests__/browser-skill-endstate.test.ts +8 -11
  38. package/src/__tests__/btw-routes.test.ts +326 -0
  39. package/src/__tests__/bundled-asset.test.ts +1 -1
  40. package/src/__tests__/bundled-skill-retrieval-guard.test.ts +23 -9
  41. package/src/__tests__/call-controller.test.ts +0 -1
  42. package/src/__tests__/call-conversation-messages.test.ts +0 -1
  43. package/src/__tests__/call-domain.test.ts +0 -1
  44. package/src/__tests__/call-pointer-messages.test.ts +0 -1
  45. package/src/__tests__/call-recovery.test.ts +0 -1
  46. package/src/__tests__/call-routes-http.test.ts +0 -1
  47. package/src/__tests__/call-store.test.ts +0 -1
  48. package/src/__tests__/canonical-guardian-store.test.ts +0 -1
  49. package/src/__tests__/channel-approval-routes.test.ts +1 -1
  50. package/src/__tests__/channel-approvals.test.ts +1 -1
  51. package/src/__tests__/channel-delivery-store.test.ts +0 -1
  52. package/src/__tests__/channel-guardian.test.ts +5 -7
  53. package/src/__tests__/channel-retry-sweep.test.ts +0 -1
  54. package/src/__tests__/checker.test.ts +32 -36
  55. package/src/__tests__/compaction.benchmark.test.ts +16 -14
  56. package/src/__tests__/computer-use-session-lifecycle.test.ts +10 -11
  57. package/src/__tests__/computer-use-session-working-dir.test.ts +2 -6
  58. package/src/__tests__/computer-use-skill-lifecycle-cleanup.test.ts +2 -5
  59. package/src/__tests__/computer-use-tools.test.ts +35 -31
  60. package/src/__tests__/config-schema.test.ts +11 -15
  61. package/src/__tests__/config-watcher.test.ts +0 -1
  62. package/src/__tests__/confirmation-request-guardian-bridge.test.ts +0 -1
  63. package/src/__tests__/conflict-store.test.ts +0 -1
  64. package/src/__tests__/connection-policy.test.ts +4 -7
  65. package/src/__tests__/contacts-tools.test.ts +0 -1
  66. package/src/__tests__/context-memory-e2e.test.ts +2 -4
  67. package/src/__tests__/context-overflow-reducer.test.ts +2 -4
  68. package/src/__tests__/context-window-manager.test.ts +147 -60
  69. package/src/__tests__/contradiction-checker.test.ts +0 -1
  70. package/src/__tests__/conversation-attention-store.test.ts +0 -1
  71. package/src/__tests__/conversation-attention-telegram.test.ts +1 -1
  72. package/src/__tests__/conversation-pairing.test.ts +2 -2
  73. package/src/__tests__/conversation-routes-guardian-reply.test.ts +31 -7
  74. package/src/__tests__/conversation-routes-slash-commands.test.ts +381 -0
  75. package/src/__tests__/conversation-store.test.ts +0 -1
  76. package/src/__tests__/conversation-unread-route.test.ts +1 -2
  77. package/src/__tests__/credential-security-invariants.test.ts +8 -8
  78. package/src/__tests__/cross-provider-web-search.test.ts +353 -0
  79. package/src/__tests__/daemon-assistant-events.test.ts +6 -7
  80. package/src/__tests__/db-schedule-syntax-migration.test.ts +15 -3
  81. package/src/__tests__/delete-managed-skill-tool.test.ts +5 -9
  82. package/src/__tests__/deterministic-verification-control-plane.test.ts +0 -1
  83. package/src/__tests__/diagnostics-export.test.ts +189 -0
  84. package/src/__tests__/dynamic-skill-workflow-prompt.test.ts +0 -1
  85. package/src/__tests__/emit-signal-routing-intent.test.ts +3 -3
  86. package/src/__tests__/entity-extractor.test.ts +0 -1
  87. package/src/__tests__/entity-search.test.ts +0 -1
  88. package/src/__tests__/ephemeral-permissions.test.ts +2 -4
  89. package/src/__tests__/error-handler-friendly-messages.test.ts +46 -0
  90. package/src/__tests__/file-read-tool.test.ts +86 -0
  91. package/src/__tests__/followup-tools.test.ts +0 -1
  92. package/src/__tests__/frontmatter.test.ts +77 -34
  93. package/src/__tests__/gateway-only-enforcement.test.ts +0 -1
  94. package/src/__tests__/gateway-only-guard.test.ts +1 -1
  95. package/src/__tests__/guardian-action-conversation-turn.test.ts +0 -1
  96. package/src/__tests__/guardian-action-followup-executor.test.ts +0 -1
  97. package/src/__tests__/guardian-action-followup-store.test.ts +0 -1
  98. package/src/__tests__/guardian-action-grant-mint-consume.test.ts +0 -1
  99. package/src/__tests__/guardian-action-late-reply.test.ts +0 -1
  100. package/src/__tests__/guardian-action-store.test.ts +0 -1
  101. package/src/__tests__/guardian-action-sweep.test.ts +0 -1
  102. package/src/__tests__/guardian-decision-primitive-canonical.test.ts +0 -1
  103. package/src/__tests__/guardian-dispatch.test.ts +1 -2
  104. package/src/__tests__/guardian-grant-minting.test.ts +1 -1
  105. package/src/__tests__/guardian-outbound-http.test.ts +0 -1
  106. package/src/__tests__/guardian-principal-id-roundtrip.test.ts +0 -1
  107. package/src/__tests__/guardian-routing-invariants.test.ts +1 -1
  108. package/src/__tests__/guardian-routing-state.test.ts +0 -1
  109. package/src/__tests__/guardian-verification-voice-binding.test.ts +0 -1
  110. package/src/__tests__/guardian-verify-setup-skill-regression.test.ts +3 -5
  111. package/src/__tests__/handlers-user-message-approval-consumption.test.ts +28 -426
  112. package/src/__tests__/host-bash-proxy.test.ts +335 -0
  113. package/src/__tests__/host-file-proxy.test.ts +374 -0
  114. package/src/__tests__/host-shell-tool.test.ts +147 -1
  115. package/src/__tests__/http-user-message-parity.test.ts +361 -0
  116. package/src/__tests__/inbound-invite-redemption.test.ts +0 -1
  117. package/src/__tests__/integration-status.test.ts +3 -8
  118. package/src/__tests__/intent-routing.test.ts +7 -46
  119. package/src/__tests__/invite-redemption-service.test.ts +0 -1
  120. package/src/__tests__/invite-routes-http.test.ts +0 -1
  121. package/src/__tests__/llm-usage-store.test.ts +0 -1
  122. package/src/__tests__/managed-avatar-client.test.ts +101 -55
  123. package/src/__tests__/managed-skill-lifecycle.test.ts +9 -18
  124. package/src/__tests__/managed-store.test.ts +94 -21
  125. package/src/__tests__/media-reuse-story.e2e.test.ts +0 -1
  126. package/src/__tests__/memory-context-benchmark.benchmark.test.ts +2 -4
  127. package/src/__tests__/memory-lifecycle-e2e.test.ts +0 -1
  128. package/src/__tests__/memory-recall-quality.test.ts +0 -1
  129. package/src/__tests__/memory-regressions.experimental.test.ts +0 -1
  130. package/src/__tests__/memory-regressions.test.ts +0 -1
  131. package/src/__tests__/memory-retrieval.benchmark.test.ts +0 -1
  132. package/src/__tests__/memory-upsert-concurrency.test.ts +0 -1
  133. package/src/__tests__/messaging-send-tool.test.ts +35 -0
  134. package/src/__tests__/messaging-skill-split.test.ts +138 -0
  135. package/src/__tests__/migration-cross-version-compatibility.test.ts +0 -1
  136. package/src/__tests__/migration-export-http.test.ts +2 -3
  137. package/src/__tests__/migration-import-commit-http.test.ts +1 -2
  138. package/src/__tests__/migration-import-preflight-http.test.ts +1 -2
  139. package/src/__tests__/migration-validate-http.test.ts +1 -2
  140. package/src/__tests__/native-web-search.test.ts +475 -0
  141. package/src/__tests__/navigate-settings-tab.test.ts +84 -0
  142. package/src/__tests__/non-member-access-request.test.ts +0 -1
  143. package/src/__tests__/notification-broadcaster.test.ts +15 -15
  144. package/src/__tests__/notification-decision-strategy.test.ts +6 -6
  145. package/src/__tests__/notification-deep-link.test.ts +7 -7
  146. package/src/__tests__/notification-guardian-path.test.ts +2 -3
  147. package/src/__tests__/notification-telegram-adapter.test.ts +1 -1
  148. package/src/__tests__/notification-thread-candidates.test.ts +4 -4
  149. package/src/__tests__/onboarding-starter-tasks.test.ts +0 -1
  150. package/src/__tests__/onboarding-template-contract.test.ts +0 -10
  151. package/src/__tests__/playbook-execution.test.ts +0 -1
  152. package/src/__tests__/playbook-tools.test.ts +0 -1
  153. package/src/__tests__/profile-compiler.test.ts +0 -1
  154. package/src/__tests__/provider-fail-open-selection.test.ts +12 -2
  155. package/src/__tests__/provider-managed-proxy-integration.test.ts +25 -0
  156. package/src/__tests__/qdrant-collection-migration.test.ts +223 -0
  157. package/src/__tests__/recording-handler.test.ts +30 -94
  158. package/src/__tests__/registry.test.ts +28 -35
  159. package/src/__tests__/relay-server.test.ts +0 -1
  160. package/src/__tests__/ride-shotgun-handler.test.ts +4 -20
  161. package/src/__tests__/runtime-attachment-metadata.test.ts +0 -1
  162. package/src/__tests__/runtime-events-sse-parity.test.ts +3 -4
  163. package/src/__tests__/runtime-events-sse.test.ts +0 -1
  164. package/src/__tests__/sandbox-diagnostics.test.ts +0 -1
  165. package/src/__tests__/scaffold-managed-skill-tool.test.ts +30 -28
  166. package/src/__tests__/schedule-store.test.ts +441 -1
  167. package/src/__tests__/schedule-tools.test.ts +468 -7
  168. package/src/__tests__/scheduler-recurrence.test.ts +196 -23
  169. package/src/__tests__/scoped-approval-grants.test.ts +0 -1
  170. package/src/__tests__/scoped-grant-security-matrix.test.ts +0 -1
  171. package/src/__tests__/secret-prompt-log-hygiene.test.ts +6 -3
  172. package/src/__tests__/secret-response-routing.test.ts +4 -1
  173. package/src/__tests__/send-endpoint-busy.test.ts +14 -5
  174. package/src/__tests__/send-notification-tool.test.ts +0 -7
  175. package/src/__tests__/sequence-store.test.ts +0 -1
  176. package/src/__tests__/server-history-render.test.ts +1 -2
  177. package/src/__tests__/session-abort-tool-results.test.ts +0 -1
  178. package/src/__tests__/session-agent-loop.test.ts +46 -6
  179. package/src/__tests__/session-confirmation-signals.test.ts +7 -46
  180. package/src/__tests__/session-conflict-gate.test.ts +2 -6
  181. package/src/__tests__/session-error.test.ts +5 -14
  182. package/src/__tests__/session-init.benchmark.test.ts +3 -5
  183. package/src/__tests__/session-load-history-repair.test.ts +0 -1
  184. package/src/__tests__/session-media-retry.test.ts +12 -74
  185. package/src/__tests__/session-pre-run-repair.test.ts +0 -1
  186. package/src/__tests__/session-profile-injection.test.ts +2 -6
  187. package/src/__tests__/session-provider-retry-repair.test.ts +2 -6
  188. package/src/__tests__/session-queue.test.ts +94 -139
  189. package/src/__tests__/session-skill-tools.test.ts +115 -115
  190. package/src/__tests__/session-slash-known.test.ts +0 -1
  191. package/src/__tests__/session-slash-queue.test.ts +0 -1
  192. package/src/__tests__/session-slash-unknown.test.ts +0 -1
  193. package/src/__tests__/session-surfaces-task-progress.test.ts +34 -0
  194. package/src/__tests__/session-usage.test.ts +0 -1
  195. package/src/__tests__/session-workspace-cache-state.test.ts +2 -6
  196. package/src/__tests__/session-workspace-injection.test.ts +2 -6
  197. package/src/__tests__/session-workspace-tool-tracking.test.ts +2 -6
  198. package/src/__tests__/skill-feature-flags-integration.test.ts +180 -184
  199. package/src/__tests__/skill-feature-flags.test.ts +125 -18
  200. package/src/__tests__/skill-load-feature-flag.test.ts +1 -2
  201. package/src/__tests__/skill-load-tool.test.ts +194 -2
  202. package/src/__tests__/skill-projection-feature-flag.test.ts +27 -16
  203. package/src/__tests__/skill-projection.benchmark.test.ts +15 -14
  204. package/src/__tests__/skills.test.ts +14 -53
  205. package/src/__tests__/slack-channel-config.test.ts +0 -1
  206. package/src/__tests__/slack-inbound-verification.test.ts +0 -1
  207. package/src/__tests__/slack-skill.test.ts +1 -1
  208. package/src/__tests__/starter-task-flow.test.ts +9 -19
  209. package/src/__tests__/subagent-tools.test.ts +2 -2
  210. package/src/__tests__/system-prompt.test.ts +7 -7
  211. package/src/__tests__/task-compiler.test.ts +0 -1
  212. package/src/__tests__/task-management-tools.test.ts +0 -1
  213. package/src/__tests__/task-memory-cleanup.test.ts +0 -1
  214. package/src/__tests__/task-runner.test.ts +0 -1
  215. package/src/__tests__/task-scheduler.test.ts +0 -1
  216. package/src/__tests__/terminal-tools.test.ts +0 -1
  217. package/src/__tests__/test-support/computer-use-skill-harness.ts +2 -4
  218. package/src/__tests__/thread-seed-composer.test.ts +5 -5
  219. package/src/__tests__/tool-approval-handler.test.ts +0 -1
  220. package/src/__tests__/tool-execution-abort-cleanup.test.ts +0 -1
  221. package/src/__tests__/tool-execution-pipeline.benchmark.test.ts +0 -1
  222. package/src/__tests__/tool-executor.test.ts +8 -86
  223. package/src/__tests__/tool-grant-request-escalation.test.ts +0 -1
  224. package/src/__tests__/tool-notification-listener.test.ts +1 -1
  225. package/src/__tests__/tool-preview-lifecycle.test.ts +416 -0
  226. package/src/__tests__/trust-store.test.ts +84 -8
  227. package/src/__tests__/trusted-contact-approval-notifier.test.ts +0 -1
  228. package/src/__tests__/trusted-contact-inline-approval-integration.test.ts +0 -1
  229. package/src/__tests__/trusted-contact-lifecycle-notifications.test.ts +0 -1
  230. package/src/__tests__/trusted-contact-multichannel.test.ts +0 -1
  231. package/src/__tests__/trusted-contact-verification.test.ts +0 -1
  232. package/src/__tests__/twilio-provider.test.ts +0 -1
  233. package/src/__tests__/twilio-routes.test.ts +0 -1
  234. package/src/__tests__/{request-file-tool.test.ts → ui-file-upload-surface.test.ts} +11 -72
  235. package/src/__tests__/update-bulletin.test.ts +0 -1
  236. package/src/__tests__/usage-cache-backfill-migration.test.ts +0 -1
  237. package/src/__tests__/usage-routes.test.ts +0 -1
  238. package/src/__tests__/verification-control-plane-policy.test.ts +4 -4
  239. package/src/__tests__/voice-invite-redemption.test.ts +0 -1
  240. package/src/__tests__/voice-scoped-grant-consumer.test.ts +0 -1
  241. package/src/__tests__/voice-session-bridge.test.ts +9 -1
  242. package/src/__tests__/web-fetch.test.ts +57 -0
  243. package/src/__tests__/workspace-git-service.test.ts +5 -14
  244. package/src/__tests__/workspace-policy.test.ts +0 -1
  245. package/src/agent/loop.ts +22 -34
  246. package/src/bundler/bundle-signer.ts +4 -4
  247. package/src/calls/call-controller.ts +1 -1
  248. package/src/calls/relay-server.ts +1 -1
  249. package/src/calls/twilio-rest.ts +1 -1
  250. package/src/calls/voice-session-bridge.ts +3 -1
  251. package/src/cli/__tests__/notifications.test.ts +3 -4
  252. package/src/cli/commands/map.ts +2 -6
  253. package/src/cli/commands/mcp.ts +73 -15
  254. package/src/cli/commands/notifications.ts +4 -4
  255. package/src/cli/commands/sessions.ts +9 -1
  256. package/src/cli/commands/skills.ts +6 -10
  257. package/src/cli/http-client.ts +2 -3
  258. package/src/cli/main-screen.tsx +10 -10
  259. package/src/cli/program.ts +0 -4
  260. package/src/cli/reference.ts +0 -2
  261. package/src/cli.ts +15 -9
  262. package/src/config/__tests__/bundled-tool-registry-guard.test.ts +120 -0
  263. package/src/config/bundled-skills/_shared/CLI_RETRIEVAL_PATTERN.md +11 -0
  264. package/src/config/bundled-skills/app-builder/SKILL.md +6 -7
  265. package/src/config/bundled-skills/app-builder/TOOLS.json +0 -4
  266. package/src/config/bundled-skills/browser/SKILL.md +6 -1
  267. package/src/config/bundled-skills/chatgpt-import/SKILL.md +5 -1
  268. package/src/config/bundled-skills/claude-code/SKILL.md +5 -1
  269. package/src/config/bundled-skills/computer-use/SKILL.md +6 -1
  270. package/src/config/bundled-skills/computer-use/TOOLS.json +6 -69
  271. package/src/config/bundled-skills/computer-use/tools/computer-use-click.ts +10 -1
  272. package/src/config/bundled-skills/contacts/SKILL.md +10 -1
  273. package/src/config/bundled-skills/contacts/TOOLS.json +35 -0
  274. package/src/config/bundled-skills/{messaging → contacts}/tools/google-contacts.ts +9 -2
  275. package/src/config/bundled-skills/document/SKILL.md +4 -1
  276. package/src/config/bundled-skills/doordash/SKILL.md +8 -2
  277. package/src/config/bundled-skills/doordash/__tests__/doordash-session.test.ts +1 -82
  278. package/src/config/bundled-skills/doordash/doordash-cli.ts +17 -28
  279. package/src/config/bundled-skills/doordash/lib/session.ts +21 -17
  280. package/src/config/bundled-skills/doordash/lib/shared/platform.ts +4 -1
  281. package/src/config/bundled-skills/followups/SKILL.md +4 -1
  282. package/src/config/bundled-skills/gmail/SKILL.md +180 -0
  283. package/src/config/bundled-skills/gmail/TOOLS.json +506 -0
  284. package/src/config/bundled-skills/gmail/tools/gmail-archive.ts +149 -0
  285. package/src/config/bundled-skills/gmail/tools/gmail-attachments.ts +110 -0
  286. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-draft.ts +1 -1
  287. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-filters.ts +1 -1
  288. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-follow-up.ts +1 -1
  289. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-forward.ts +1 -1
  290. package/src/config/bundled-skills/gmail/tools/gmail-label.ts +50 -0
  291. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-outreach-scan.ts +8 -90
  292. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-send-draft.ts +1 -1
  293. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-sender-digest.ts +2 -2
  294. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-trash.ts +1 -1
  295. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-unsubscribe.ts +1 -1
  296. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-vacation.ts +1 -1
  297. package/src/config/bundled-skills/gmail/tools/shared.ts +47 -0
  298. package/src/config/bundled-skills/google-calendar/SKILL.md +5 -1
  299. package/src/config/bundled-skills/image-studio/SKILL.md +5 -1
  300. package/src/config/bundled-skills/knowledge-graph/SKILL.md +4 -1
  301. package/src/config/bundled-skills/media-processing/SKILL.md +7 -13
  302. package/src/config/bundled-skills/media-processing/TOOLS.json +0 -22
  303. package/src/config/bundled-skills/media-processing/tools/generate-clip.ts +12 -1
  304. package/src/config/bundled-skills/messaging/SKILL.md +23 -139
  305. package/src/config/bundled-skills/messaging/TOOLS.json +33 -1215
  306. package/src/config/bundled-skills/messaging/tools/gmail-mime-helpers.ts +42 -0
  307. package/src/config/bundled-skills/messaging/tools/messaging-send.ts +165 -2
  308. package/src/config/bundled-skills/messaging/tools/messaging-sender-digest.ts +1 -13
  309. package/src/config/bundled-skills/messaging/tools/shared.ts +81 -34
  310. package/src/config/bundled-skills/notifications/SKILL.md +5 -1
  311. package/src/config/bundled-skills/orchestration/SKILL.md +30 -0
  312. package/src/config/bundled-skills/orchestration/TOOLS.json +35 -0
  313. package/src/config/bundled-skills/{reminder/tools/reminder-cancel.ts → orchestration/tools/swarm-delegate.ts} +3 -3
  314. package/src/config/bundled-skills/phone-calls/SKILL.md +9 -1
  315. package/src/config/bundled-skills/playbooks/SKILL.md +4 -1
  316. package/src/config/bundled-skills/schedule/SKILL.md +70 -9
  317. package/src/config/bundled-skills/schedule/TOOLS.json +38 -6
  318. package/src/config/bundled-skills/screen-watch/SKILL.md +28 -0
  319. package/src/config/bundled-skills/screen-watch/TOOLS.json +35 -0
  320. package/src/config/bundled-skills/{reminder/tools/reminder-create.ts → screen-watch/tools/start-screen-watch.ts} +3 -3
  321. package/src/config/bundled-skills/sequences/SKILL.md +47 -0
  322. package/src/config/bundled-skills/sequences/TOOLS.json +340 -0
  323. package/src/config/bundled-skills/sequences/tools/sequence-update.ts +128 -0
  324. package/src/config/bundled-skills/sequences/tools/shared.ts +9 -0
  325. package/src/config/bundled-skills/settings/SKILL.md +12 -0
  326. package/src/config/bundled-skills/settings/TOOLS.json +112 -0
  327. package/src/config/bundled-skills/settings/tools/navigate-settings-tab.ts +43 -0
  328. package/src/config/bundled-skills/settings/tools/open-system-settings.ts +52 -0
  329. package/src/config/bundled-skills/{computer-use/tools/computer-use-right-click.ts → settings/tools/set-avatar.ts} +2 -6
  330. package/src/{tools/system/voice-config.ts → config/bundled-skills/settings/tools/voice-config-update.ts} +59 -96
  331. package/src/config/bundled-skills/skill-management/SKILL.md +18 -0
  332. package/src/config/bundled-skills/skill-management/TOOLS.json +90 -0
  333. package/src/config/bundled-skills/{computer-use/tools/computer-use-double-click.ts → skill-management/tools/delete-managed.ts} +2 -6
  334. package/src/config/bundled-skills/skill-management/tools/scaffold-managed.ts +12 -0
  335. package/src/config/bundled-skills/slack/SKILL.md +5 -1
  336. package/src/config/bundled-skills/subagent/SKILL.md +4 -1
  337. package/src/config/bundled-skills/tasks/SKILL.md +5 -2
  338. package/src/config/bundled-skills/transcribe/SKILL.md +4 -1
  339. package/src/config/bundled-skills/watcher/SKILL.md +4 -1
  340. package/src/config/bundled-tool-registry.ts +118 -107
  341. package/src/config/env.ts +5 -2
  342. package/src/config/feature-flag-registry.json +33 -9
  343. package/src/config/loader.ts +10 -2
  344. package/src/config/schema.ts +19 -16
  345. package/src/config/schemas/inference.ts +12 -22
  346. package/src/config/schemas/memory-storage.ts +19 -1
  347. package/src/config/schemas/platform.ts +0 -16
  348. package/src/config/skill-state.ts +11 -8
  349. package/src/config/skills.ts +83 -32
  350. package/src/context/token-estimator.ts +11 -0
  351. package/src/context/window-manager.ts +180 -151
  352. package/src/daemon/computer-use-session.ts +11 -43
  353. package/src/daemon/daemon-control.ts +4 -1
  354. package/src/daemon/handlers/config-channels.ts +5 -9
  355. package/src/daemon/handlers/config-ingress.ts +0 -4
  356. package/src/daemon/handlers/config-model.ts +7 -13
  357. package/src/daemon/handlers/config-telegram.ts +4 -8
  358. package/src/daemon/handlers/config-voice.ts +2 -5
  359. package/src/daemon/handlers/dictation.ts +2 -12
  360. package/src/daemon/handlers/identity.ts +0 -105
  361. package/src/daemon/handlers/recording.ts +3 -23
  362. package/src/daemon/handlers/session-history.ts +42 -10
  363. package/src/daemon/handlers/sessions.ts +53 -72
  364. package/src/daemon/handlers/shared.ts +7 -28
  365. package/src/daemon/handlers/skills.ts +31 -27
  366. package/src/daemon/host-bash-proxy.ts +148 -0
  367. package/src/daemon/host-file-proxy.ts +135 -0
  368. package/src/daemon/lifecycle.ts +53 -41
  369. package/src/daemon/mcp-reload-service.ts +123 -0
  370. package/src/daemon/message-protocol.ts +6 -0
  371. package/src/daemon/message-types/apps.ts +0 -25
  372. package/src/daemon/message-types/browser.ts +1 -1
  373. package/src/daemon/message-types/computer-use.ts +1 -4
  374. package/src/daemon/message-types/guardian-actions.ts +1 -1
  375. package/src/daemon/message-types/host-bash.ts +18 -0
  376. package/src/daemon/message-types/host-file.ts +44 -0
  377. package/src/daemon/message-types/integrations.ts +1 -73
  378. package/src/daemon/message-types/messages.ts +15 -0
  379. package/src/daemon/message-types/schedules.ts +11 -27
  380. package/src/daemon/message-types/sessions.ts +8 -2
  381. package/src/daemon/message-types/settings.ts +1 -1
  382. package/src/daemon/message-types/shared.ts +1 -1
  383. package/src/daemon/message-types/surfaces.ts +2 -0
  384. package/src/daemon/ride-shotgun-handler.ts +35 -43
  385. package/src/daemon/seed-files.ts +3 -27
  386. package/src/daemon/server.ts +45 -28
  387. package/src/daemon/session-agent-loop-handlers.ts +72 -9
  388. package/src/daemon/session-agent-loop.ts +97 -66
  389. package/src/daemon/session-attachments.ts +1 -1
  390. package/src/daemon/session-error.ts +17 -16
  391. package/src/daemon/session-lifecycle.ts +20 -1
  392. package/src/daemon/session-media-retry.ts +1 -15
  393. package/src/daemon/session-messaging.ts +14 -6
  394. package/src/daemon/session-process.ts +36 -7
  395. package/src/daemon/session-queue-manager.ts +62 -103
  396. package/src/daemon/session-runtime-assembly.ts +27 -7
  397. package/src/daemon/session-skill-tools.ts +12 -11
  398. package/src/daemon/session-slash.ts +7 -0
  399. package/src/daemon/session-surfaces.ts +192 -118
  400. package/src/daemon/session-tool-setup.ts +146 -6
  401. package/src/daemon/session.ts +75 -37
  402. package/src/errors.ts +0 -2
  403. package/src/export/formatter.ts +6 -0
  404. package/src/mcp/mcp-oauth-provider.ts +1 -3
  405. package/src/media/avatar-router.ts +20 -28
  406. package/src/media/avatar-types.ts +7 -14
  407. package/src/media/managed-avatar-client.ts +70 -34
  408. package/src/memory/app-store.ts +0 -18
  409. package/src/memory/conversation-title-service.ts +1 -2
  410. package/src/memory/db-init.ts +16 -0
  411. package/src/memory/embedding-backend.ts +129 -27
  412. package/src/memory/embedding-gemini.test.ts +256 -0
  413. package/src/memory/embedding-gemini.ts +47 -13
  414. package/src/memory/embedding-local.ts +14 -2
  415. package/src/memory/embedding-ollama.ts +15 -2
  416. package/src/memory/embedding-openai.ts +15 -2
  417. package/src/memory/embedding-types.test.ts +116 -0
  418. package/src/memory/embedding-types.ts +61 -0
  419. package/src/memory/fingerprint.ts +1 -1
  420. package/src/memory/indexer.ts +25 -1
  421. package/src/memory/job-handlers/embedding.test.ts +258 -0
  422. package/src/memory/job-handlers/embedding.ts +81 -1
  423. package/src/memory/job-handlers/index-maintenance.ts +35 -1
  424. package/src/memory/job-handlers/media-processing.ts +11 -1
  425. package/src/memory/job-utils.ts +21 -6
  426. package/src/memory/jobs-store.ts +5 -1
  427. package/src/memory/jobs-worker.ts +8 -0
  428. package/src/memory/message-content.ts +66 -0
  429. package/src/memory/migrations/100-core-tables.ts +1 -31
  430. package/src/memory/migrations/104-core-indexes.ts +0 -11
  431. package/src/memory/migrations/145-drop-accounts-table.ts +19 -0
  432. package/src/memory/migrations/146-schedule-oneshot-routing.ts +94 -0
  433. package/src/memory/migrations/147-migrate-reminders-to-schedules.ts +129 -0
  434. package/src/memory/migrations/148-drop-reminders-table.ts +18 -0
  435. package/src/memory/migrations/index.ts +4 -0
  436. package/src/memory/migrations/registry.ts +19 -0
  437. package/src/memory/qdrant-client.ts +158 -43
  438. package/src/memory/retriever.test.ts +0 -1
  439. package/src/memory/retriever.ts +12 -2
  440. package/src/memory/schema/infrastructure.ts +5 -37
  441. package/src/memory/search/formatting.ts +34 -9
  442. package/src/memory/search/semantic.ts +57 -2
  443. package/src/memory/search/types.ts +2 -1
  444. package/src/notifications/AGENTS.md +2 -2
  445. package/src/notifications/README.md +59 -58
  446. package/src/notifications/adapters/macos.ts +1 -1
  447. package/src/notifications/broadcaster.ts +5 -5
  448. package/src/notifications/copy-composer.ts +1 -1
  449. package/src/notifications/decision-engine.ts +2 -2
  450. package/src/notifications/destination-resolver.ts +2 -2
  451. package/src/notifications/emit-signal.ts +8 -8
  452. package/src/notifications/signal.ts +1 -1
  453. package/src/notifications/thread-seed-composer.ts +1 -1
  454. package/src/oauth/connect-orchestrator.ts +1 -1
  455. package/src/oauth/token-persistence.ts +1 -1
  456. package/src/permissions/checker.ts +12 -1
  457. package/src/permissions/defaults.ts +13 -17
  458. package/src/permissions/trust-store.ts +37 -0
  459. package/src/permissions/workspace-policy.ts +0 -1
  460. package/src/prompts/__tests__/build-cli-reference-section.test.ts +11 -0
  461. package/src/prompts/computer-use-prompt.ts +1 -1
  462. package/src/prompts/system-prompt.ts +33 -35
  463. package/src/prompts/templates/BOOTSTRAP.md +0 -3
  464. package/src/prompts/templates/SOUL.md +1 -2
  465. package/src/prompts/templates/UPDATES.md +16 -7
  466. package/src/providers/anthropic/client.ts +87 -33
  467. package/src/providers/gemini/client.ts +6 -0
  468. package/src/providers/managed-proxy/constants.ts +5 -0
  469. package/src/providers/openai/client.ts +15 -0
  470. package/src/providers/registry.ts +4 -6
  471. package/src/providers/types.ts +24 -2
  472. package/src/runtime/AGENTS.md +18 -0
  473. package/src/runtime/assistant-event-hub.ts +2 -3
  474. package/src/runtime/assistant-event.ts +4 -4
  475. package/src/runtime/auth/__tests__/context.test.ts +5 -5
  476. package/src/runtime/auth/__tests__/credential-service.test.ts +0 -1
  477. package/src/runtime/auth/__tests__/guard-tests.test.ts +3 -2
  478. package/src/runtime/auth/__tests__/{ipc-auth-context.test.ts → local-auth-context.test.ts} +21 -21
  479. package/src/runtime/auth/__tests__/route-policy.test.ts +2 -2
  480. package/src/runtime/auth/__tests__/scopes.test.ts +9 -8
  481. package/src/runtime/auth/__tests__/subject.test.ts +8 -8
  482. package/src/runtime/auth/__tests__/token-service.test.ts +0 -1
  483. package/src/runtime/auth/route-policy.ts +8 -8
  484. package/src/runtime/auth/scopes.ts +2 -1
  485. package/src/runtime/auth/subject.ts +4 -4
  486. package/src/runtime/auth/token-service.ts +1 -24
  487. package/src/runtime/auth/types.ts +3 -3
  488. package/src/runtime/guardian-action-followup-executor.ts +1 -1
  489. package/src/runtime/guardian-action-grant-minter.ts +1 -1
  490. package/src/runtime/guardian-action-service.ts +3 -3
  491. package/src/runtime/http-server.ts +15 -2
  492. package/src/runtime/http-types.ts +10 -0
  493. package/src/runtime/invite-service.ts +3 -3
  494. package/src/runtime/local-actor-identity.ts +17 -22
  495. package/src/runtime/middleware/error-handler.ts +14 -1
  496. package/src/runtime/pending-interactions.ts +21 -9
  497. package/src/runtime/routes/app-management-routes.ts +63 -67
  498. package/src/runtime/routes/approval-routes.ts +1 -3
  499. package/src/runtime/routes/brain-graph/brain-graph.html +1845 -0
  500. package/src/runtime/routes/brain-graph-routes.ts +4 -42
  501. package/src/runtime/routes/btw-routes.ts +155 -0
  502. package/src/runtime/routes/computer-use-routes.ts +77 -31
  503. package/src/runtime/routes/conversation-routes.ts +234 -47
  504. package/src/runtime/routes/diagnostics-routes.ts +154 -43
  505. package/src/runtime/routes/documents-routes.ts +2 -2
  506. package/src/runtime/routes/global-search-routes.ts +1 -1
  507. package/src/runtime/routes/host-bash-routes.ts +83 -0
  508. package/src/runtime/routes/host-file-routes.ts +79 -0
  509. package/src/runtime/routes/integrations/slack/share.ts +1 -1
  510. package/src/runtime/routes/log-export-routes.ts +120 -0
  511. package/src/runtime/routes/mcp-routes.ts +20 -0
  512. package/src/runtime/routes/migration-routes.ts +3 -3
  513. package/src/runtime/routes/pairing-routes.ts +1 -1
  514. package/src/runtime/routes/recording-routes.ts +6 -4
  515. package/src/runtime/routes/schedule-routes.ts +31 -5
  516. package/src/runtime/routes/session-management-routes.ts +2 -6
  517. package/src/runtime/routes/session-query-routes.ts +18 -15
  518. package/src/runtime/routes/settings-routes.ts +7 -351
  519. package/src/runtime/routes/skills-routes.ts +7 -6
  520. package/src/runtime/routes/subagents-routes.ts +4 -10
  521. package/src/runtime/routes/surface-action-routes.ts +3 -14
  522. package/src/runtime/routes/surface-content-routes.ts +22 -5
  523. package/src/runtime/routes/work-items-routes.ts +21 -25
  524. package/src/runtime/routes/workspace-routes.test.ts +3 -3
  525. package/src/runtime/routes/workspace-utils.ts +1 -1
  526. package/src/runtime/telegram-streaming-delivery.ts +3 -0
  527. package/src/runtime/verification-outbound-actions.ts +2 -2
  528. package/src/schedule/integration-status.ts +0 -6
  529. package/src/schedule/schedule-store.ts +234 -43
  530. package/src/schedule/scheduler.ts +73 -74
  531. package/src/security/oauth2.ts +1 -1
  532. package/src/sequence/store.ts +12 -2
  533. package/src/skills/frontmatter.ts +19 -77
  534. package/src/skills/managed-store.ts +11 -2
  535. package/src/subagent/manager.ts +5 -3
  536. package/src/tasks/ephemeral-permissions.ts +3 -5
  537. package/src/tools/AGENTS.md +37 -0
  538. package/src/tools/apps/executors.ts +0 -6
  539. package/src/tools/browser/browser-manager.ts +17 -11
  540. package/src/tools/browser/jit-auth.ts +4 -1
  541. package/src/tools/claude-code/claude-code.ts +1 -1
  542. package/src/tools/computer-use/definitions.ts +48 -60
  543. package/src/tools/document/document-tool.ts +6 -6
  544. package/src/tools/document/editor-template.ts +10 -8
  545. package/src/tools/filesystem/edit.ts +2 -1
  546. package/src/tools/filesystem/read.ts +20 -2
  547. package/src/tools/filesystem/write.ts +2 -1
  548. package/src/tools/host-filesystem/edit.ts +17 -1
  549. package/src/tools/host-filesystem/read.ts +16 -1
  550. package/src/tools/host-filesystem/write.ts +15 -1
  551. package/src/tools/host-terminal/host-shell.ts +24 -0
  552. package/src/tools/memory/definitions.ts +45 -81
  553. package/src/tools/memory/handlers.test.ts +0 -1
  554. package/src/tools/memory/handlers.ts +1 -1
  555. package/src/tools/memory/register.ts +26 -60
  556. package/src/tools/network/script-proxy/session-manager.ts +6 -8
  557. package/src/tools/network/web-fetch.ts +7 -1
  558. package/src/tools/network/web-search.ts +2 -1
  559. package/src/tools/registry.ts +23 -0
  560. package/src/tools/schedule/create.ts +113 -5
  561. package/src/tools/schedule/list.ts +57 -15
  562. package/src/tools/schedule/update.ts +73 -3
  563. package/src/tools/shared/filesystem/image-read.ts +192 -0
  564. package/src/tools/side-effects.ts +1 -7
  565. package/src/tools/skills/delete-managed.ts +27 -64
  566. package/src/tools/skills/execute.ts +54 -0
  567. package/src/tools/skills/load.ts +127 -5
  568. package/src/tools/skills/scaffold-managed.ts +93 -172
  569. package/src/tools/subagent/message.ts +0 -7
  570. package/src/tools/subagent/spawn.ts +1 -1
  571. package/src/tools/swarm/delegate.ts +0 -3
  572. package/src/tools/system/avatar-generator.ts +13 -19
  573. package/src/tools/system/request-permission.ts +2 -1
  574. package/src/tools/terminal/safe-env.ts +1 -0
  575. package/src/tools/tool-manifest.ts +41 -47
  576. package/src/tools/types.ts +6 -2
  577. package/src/tools/ui-surface/definitions.ts +0 -55
  578. package/src/util/errors.ts +12 -10
  579. package/src/workspace/git-service.ts +0 -2
  580. package/src/__tests__/account-registry.test.ts +0 -258
  581. package/src/__tests__/email-classifier.test.ts +0 -25
  582. package/src/__tests__/gmail-integration.test.ts +0 -97
  583. package/src/__tests__/handle-user-message-secret-resume.test.ts +0 -172
  584. package/src/__tests__/home-base-bootstrap.test.ts +0 -84
  585. package/src/__tests__/managed-twitter-guardrails.test.ts +0 -353
  586. package/src/__tests__/prebuilt-home-base-seed.test.ts +0 -79
  587. package/src/__tests__/recording-intent-fallback.test.ts +0 -199
  588. package/src/__tests__/recording-intent.test.ts +0 -985
  589. package/src/__tests__/recording-state-machine.test.ts +0 -1574
  590. package/src/__tests__/reminder-store.test.ts +0 -350
  591. package/src/__tests__/reminder.test.ts +0 -337
  592. package/src/__tests__/scan-result-store.test.ts +0 -121
  593. package/src/__tests__/twitter-platform-proxy-client.test.ts +0 -450
  594. package/src/__tests__/view-image-tool.test.ts +0 -241
  595. package/src/cli/commands/amazon/cart.ts +0 -513
  596. package/src/cli/commands/amazon/checkout.ts +0 -394
  597. package/src/cli/commands/amazon/client.ts +0 -513
  598. package/src/cli/commands/amazon/index.ts +0 -920
  599. package/src/cli/commands/amazon/product-details.ts +0 -145
  600. package/src/cli/commands/amazon/request-extractor.ts +0 -187
  601. package/src/cli/commands/amazon/search.ts +0 -76
  602. package/src/cli/commands/amazon/session.ts +0 -116
  603. package/src/cli/commands/twitter/__tests__/cli-error-shaping.test.ts +0 -265
  604. package/src/cli/commands/twitter/__tests__/cli-read-routing.test.ts +0 -483
  605. package/src/cli/commands/twitter/__tests__/cli-routing.test.ts +0 -412
  606. package/src/cli/commands/twitter/__tests__/oauth-client.test.ts +0 -197
  607. package/src/cli/commands/twitter/client.ts +0 -989
  608. package/src/cli/commands/twitter/index.ts +0 -1160
  609. package/src/cli/commands/twitter/oauth-client.ts +0 -94
  610. package/src/cli/commands/twitter/router.ts +0 -396
  611. package/src/cli/commands/twitter/session.ts +0 -121
  612. package/src/config/bundled-skills/agentmail/SKILL.md +0 -132
  613. package/src/config/bundled-skills/agentmail/icon.svg +0 -21
  614. package/src/config/bundled-skills/amazon/SKILL.md +0 -137
  615. package/src/config/bundled-skills/amazon/icon.svg +0 -13
  616. package/src/config/bundled-skills/api-mapping/SKILL.md +0 -78
  617. package/src/config/bundled-skills/api-mapping/icon.svg +0 -18
  618. package/src/config/bundled-skills/cli-discover/SKILL.md +0 -68
  619. package/src/config/bundled-skills/deploy-fullstack-vercel/SKILL.md +0 -179
  620. package/src/config/bundled-skills/document-writer/SKILL.md +0 -195
  621. package/src/config/bundled-skills/elevenlabs-voice/SKILL.md +0 -140
  622. package/src/config/bundled-skills/email-setup/SKILL.md +0 -68
  623. package/src/config/bundled-skills/frontend-design/SKILL.md +0 -44
  624. package/src/config/bundled-skills/frontend-design/icon.svg +0 -16
  625. package/src/config/bundled-skills/google-oauth-setup/SKILL.md +0 -452
  626. package/src/config/bundled-skills/guardian-verify-setup/SKILL.md +0 -203
  627. package/src/config/bundled-skills/influencer/SKILL.md +0 -144
  628. package/src/config/bundled-skills/influencer/scripts/client.ts +0 -1269
  629. package/src/config/bundled-skills/influencer/scripts/influencer.ts +0 -267
  630. package/src/config/bundled-skills/macos-automation/SKILL.md +0 -65
  631. package/src/config/bundled-skills/macos-automation/icon.svg +0 -12
  632. package/src/config/bundled-skills/mcp-setup/SKILL.md +0 -75
  633. package/src/config/bundled-skills/media-processing/tools/media-diagnostics.ts +0 -184
  634. package/src/config/bundled-skills/messaging/tools/gmail-archive-by-query.ts +0 -80
  635. package/src/config/bundled-skills/messaging/tools/gmail-archive.ts +0 -29
  636. package/src/config/bundled-skills/messaging/tools/gmail-batch-archive.ts +0 -56
  637. package/src/config/bundled-skills/messaging/tools/gmail-batch-label.ts +0 -34
  638. package/src/config/bundled-skills/messaging/tools/gmail-download-attachment.ts +0 -47
  639. package/src/config/bundled-skills/messaging/tools/gmail-label.ts +0 -31
  640. package/src/config/bundled-skills/messaging/tools/gmail-list-attachments.ts +0 -67
  641. package/src/config/bundled-skills/messaging/tools/gmail-send-with-attachments.ts +0 -97
  642. package/src/config/bundled-skills/messaging/tools/gmail-summarize-thread.ts +0 -87
  643. package/src/config/bundled-skills/messaging/tools/gmail-triage.ts +0 -135
  644. package/src/config/bundled-skills/messaging/tools/messaging-analyze-activity.ts +0 -24
  645. package/src/config/bundled-skills/messaging/tools/messaging-reply.ts +0 -201
  646. package/src/config/bundled-skills/messaging/tools/send-notification.ts +0 -1
  647. package/src/config/bundled-skills/messaging/tools/sequence-cancel.ts +0 -27
  648. package/src/config/bundled-skills/messaging/tools/sequence-pause.ts +0 -48
  649. package/src/config/bundled-skills/messaging/tools/sequence-resume.ts +0 -27
  650. package/src/config/bundled-skills/messaging/tools/sequence-update.ts +0 -56
  651. package/src/config/bundled-skills/notion/SKILL.md +0 -240
  652. package/src/config/bundled-skills/notion-oauth-setup/SKILL.md +0 -126
  653. package/src/config/bundled-skills/oauth-setup/SKILL.md +0 -143
  654. package/src/config/bundled-skills/public-ingress/SKILL.md +0 -258
  655. package/src/config/bundled-skills/reminder/SKILL.md +0 -79
  656. package/src/config/bundled-skills/reminder/TOOLS.json +0 -89
  657. package/src/config/bundled-skills/reminder/tools/reminder-list.ts +0 -12
  658. package/src/config/bundled-skills/restaurant-reservation/SKILL.md +0 -141
  659. package/src/config/bundled-skills/screen-recording/SKILL.md +0 -148
  660. package/src/config/bundled-skills/self-upgrade/SKILL.md +0 -69
  661. package/src/config/bundled-skills/skills-catalog/SKILL.md +0 -78
  662. package/src/config/bundled-skills/slack-app-setup/SKILL.md +0 -178
  663. package/src/config/bundled-skills/slack-digest-setup/SKILL.md +0 -163
  664. package/src/config/bundled-skills/slack-oauth-setup/SKILL.md +0 -157
  665. package/src/config/bundled-skills/start-the-day/SKILL.md +0 -70
  666. package/src/config/bundled-skills/start-the-day/icon.svg +0 -13
  667. package/src/config/bundled-skills/telegram-setup/SKILL.md +0 -105
  668. package/src/config/bundled-skills/time-based-actions/SKILL.md +0 -142
  669. package/src/config/bundled-skills/twilio-setup/SKILL.md +0 -232
  670. package/src/config/bundled-skills/twitter/SKILL.md +0 -319
  671. package/src/config/bundled-skills/twitter/icon.svg +0 -14
  672. package/src/config/bundled-skills/typescript-eval/SKILL.md +0 -60
  673. package/src/config/bundled-skills/vercel-token-setup/SKILL.md +0 -214
  674. package/src/config/bundled-skills/voice-setup/SKILL.md +0 -131
  675. package/src/config/bundled-skills/voice-setup/icon.svg +0 -20
  676. package/src/daemon/handlers/pairing.ts +0 -119
  677. package/src/daemon/handlers/session-user-message.ts +0 -961
  678. package/src/daemon/recording-executor.ts +0 -180
  679. package/src/daemon/recording-intent-fallback.ts +0 -162
  680. package/src/daemon/recording-intent.ts +0 -493
  681. package/src/home-base/app-link-store.ts +0 -78
  682. package/src/home-base/bootstrap.ts +0 -74
  683. package/src/home-base/prebuilt/brain-graph.html +0 -1483
  684. package/src/home-base/prebuilt/index.html +0 -702
  685. package/src/home-base/prebuilt/seed-metadata.json +0 -21
  686. package/src/home-base/prebuilt/seed.ts +0 -122
  687. package/src/home-base/prebuilt-home-base-updater.ts +0 -36
  688. package/src/memory/account-store.ts +0 -117
  689. package/src/messaging/activity-analyzer.ts +0 -76
  690. package/src/messaging/email-classifier.ts +0 -208
  691. package/src/messaging/index.ts +0 -2
  692. package/src/messaging/outreach-classifier.ts +0 -185
  693. package/src/messaging/thread-summarizer.ts +0 -346
  694. package/src/messaging/types.ts +0 -17
  695. package/src/tools/browser/x-auto-navigate.ts +0 -254
  696. package/src/tools/credentials/account-registry.ts +0 -144
  697. package/src/tools/filesystem/view-image.ts +0 -244
  698. package/src/tools/reminder/reminder-store.ts +0 -194
  699. package/src/tools/reminder/reminder.ts +0 -158
  700. package/src/tools/system/navigate-settings.ts +0 -74
  701. package/src/tools/system/open-system-settings.ts +0 -85
  702. package/src/tools/system/version.ts +0 -54
  703. package/src/twitter/platform-proxy-client.ts +0 -405
  704. package/src/util/cookie-session.ts +0 -98
  705. /package/src/config/bundled-skills/{messaging → gmail}/tools/scan-result-store.ts +0 -0
  706. /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-analytics.ts +0 -0
  707. /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-create.ts +0 -0
  708. /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-delete.ts +0 -0
  709. /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-enroll.ts +0 -0
  710. /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-enrollment-list.ts +0 -0
  711. /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-get.ts +0 -0
  712. /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-import.ts +0 -0
  713. /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-list.ts +0 -0
@@ -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
  }