@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
@@ -3,19 +3,18 @@ import type { ContextWindowConfig } from "../config/types.js";
3
3
  import type { ContentBlock, Message, Provider } from "../providers/types.js";
4
4
  import { getLogger } from "../util/logger.js";
5
5
  import { estimatePromptTokens, estimateTextTokens } from "./token-estimator.js";
6
+ import { truncateToolResultsAcrossHistory } from "./tool-result-truncation.js";
6
7
 
7
8
  const log = getLogger("context-window");
8
9
 
9
10
  export const CONTEXT_SUMMARY_MARKER = "<context_summary>";
10
- const CHUNK_MIN_TOKENS = 1000;
11
11
  const MAX_BLOCK_PREVIEW_CHARS = 3000;
12
12
  const MAX_FALLBACK_SUMMARY_CHARS = 12000;
13
- const MAX_CONTEXT_SUMMARY_CHARS = 16000;
14
13
  const COMPACTION_COOLDOWN_MS = 2 * 60 * 1000;
15
14
  const MIN_GAIN_TOKENS_DURING_COOLDOWN = 1200;
16
15
  const SEVERE_PRESSURE_RATIO = 0.95;
16
+ const COMPACTION_TOOL_RESULT_MAX_CHARS = 6_000;
17
17
  const MIN_COMPACTABLE_PERSISTED_MESSAGES = 2;
18
- const MAX_PRESERVED_IMAGE_BLOCKS = 5;
19
18
  const INTERNAL_CONTEXT_SUMMARY_MESSAGES = new WeakSet<Message>();
20
19
 
21
20
  const SUMMARY_SYSTEM_PROMPT = [
@@ -195,11 +194,25 @@ export class ContextWindowManager {
195
194
  targetInputTokensOverride: options?.targetInputTokensOverride,
196
195
  });
197
196
  if (keepPlan.keepFromIndex <= summaryOffset) {
197
+ // All turns fit after truncation projection, but the real in-memory
198
+ // messages may still contain un-truncated tool results. Apply truncation
199
+ // so the caller gets the token savings even without summarization.
200
+ const { messages: truncatedMessages, truncatedCount } =
201
+ truncateToolResultsAcrossHistory(
202
+ messages,
203
+ COMPACTION_TOOL_RESULT_MAX_CHARS,
204
+ );
205
+ const didTruncate = truncatedCount > 0;
206
+ const estimatedAfterTruncation = didTruncate
207
+ ? estimatePromptTokens(truncatedMessages, this.systemPrompt, {
208
+ providerName: this.provider.name,
209
+ })
210
+ : previousEstimatedInputTokens;
198
211
  return {
199
- messages,
200
- compacted: false,
212
+ messages: truncatedMessages,
213
+ compacted: didTruncate,
201
214
  previousEstimatedInputTokens,
202
- estimatedInputTokens: previousEstimatedInputTokens,
215
+ estimatedInputTokens: estimatedAfterTruncation,
203
216
  maxInputTokens: this.config.maxInputTokens,
204
217
  thresholdTokens,
205
218
  compactedMessages: 0,
@@ -209,7 +222,9 @@ export class ContextWindowManager {
209
222
  summaryOutputTokens: 0,
210
223
  summaryModel: "",
211
224
  summaryText: existingSummary ?? "",
212
- reason: "unable to compact while keeping recent turns",
225
+ reason: didTruncate
226
+ ? "truncated tool results without summarization"
227
+ : "unable to compact while keeping recent turns",
213
228
  };
214
229
  }
215
230
 
@@ -238,10 +253,14 @@ export class ContextWindowManager {
238
253
 
239
254
  const compactedPersistedMessages =
240
255
  countPersistedMessages(compactableMessages);
241
- const projectedMessages = [
256
+ const rawProjectedMessages = [
242
257
  createContextSummaryMessage(existingSummary ?? "Projected summary"),
243
258
  ...messages.slice(keepPlan.keepFromIndex),
244
259
  ];
260
+ const { messages: projectedMessages } = truncateToolResultsAcrossHistory(
261
+ rawProjectedMessages,
262
+ COMPACTION_TOOL_RESULT_MAX_CHARS,
263
+ );
245
264
  const projectedInputTokens = estimatePromptTokens(
246
265
  projectedMessages,
247
266
  this.systemPrompt,
@@ -331,83 +350,42 @@ export class ContextWindowManager {
331
350
  };
332
351
  }
333
352
 
334
- const chunks = chunkMessages(
335
- compactableMessages,
336
- Math.max(this.config.chunkTokens, CHUNK_MIN_TOKENS),
353
+ const transcript = this.capTranscriptToTokenBudget(
354
+ serializeMessages(compactableMessages),
355
+ existingSummary ?? "No previous summary.",
356
+ );
357
+ const summaryUpdate = await this.updateSummary(
358
+ existingSummary ?? "No previous summary.",
359
+ transcript,
360
+ signal,
337
361
  );
338
- let summary = existingSummary ?? "No previous summary.";
339
- let summaryInputTokens = 0;
340
- let summaryOutputTokens = 0;
341
- let summaryModel = "";
342
- let summaryCacheCreationInputTokens = 0;
343
- let summaryCacheReadInputTokens = 0;
362
+ const summary = summaryUpdate.summary;
363
+ const summaryInputTokens = summaryUpdate.inputTokens;
364
+ const summaryOutputTokens = summaryUpdate.outputTokens;
365
+ const summaryModel = summaryUpdate.model;
366
+ const summaryCacheCreationInputTokens =
367
+ summaryUpdate.cacheCreationInputTokens;
368
+ const summaryCacheReadInputTokens = summaryUpdate.cacheReadInputTokens;
344
369
  const summaryRawResponses: unknown[] = [];
345
- let summaryCalls = 0;
346
-
347
- for (const chunk of chunks) {
348
- const summaryUpdate = await this.updateSummary(summary, chunk, signal);
349
- summary = summaryUpdate.summary;
350
- summaryInputTokens += summaryUpdate.inputTokens;
351
- summaryOutputTokens += summaryUpdate.outputTokens;
352
- summaryModel = summaryUpdate.model || summaryModel;
353
- summaryCacheCreationInputTokens += summaryUpdate.cacheCreationInputTokens;
354
- summaryCacheReadInputTokens += summaryUpdate.cacheReadInputTokens;
355
- if (Array.isArray(summaryUpdate.rawResponse)) {
356
- summaryRawResponses.push(...summaryUpdate.rawResponse);
357
- } else if (summaryUpdate.rawResponse !== undefined) {
358
- summaryRawResponses.push(summaryUpdate.rawResponse);
359
- }
360
- summaryCalls += 1;
361
- }
362
-
363
- // Extract user-uploaded image blocks from compacted messages so they
364
- // remain accessible to the assistant in subsequent turns. Tool-result
365
- // screenshots are NOT preserved — only top-level image blocks in user
366
- // messages, which represent intentional user uploads.
367
- // Also carry forward any images already preserved in the existing summary
368
- // message so they survive multiple compaction cycles.
369
- const preservedImageBlocks: ContentBlock[] = [];
370
- if (existingSummary != null) {
371
- const summaryMsg = messages[0];
372
- for (const block of summaryMsg.content) {
373
- if (block.type === "image") {
374
- preservedImageBlocks.push(block);
375
- }
376
- }
377
- }
378
- for (const msg of compactableMessages) {
379
- if (msg.role !== "user") continue;
380
- for (const block of msg.content) {
381
- if (block.type === "image") {
382
- preservedImageBlocks.push(block);
383
- }
384
- }
385
- }
386
-
387
- // Cap preserved images to avoid unbounded accumulation across cycles.
388
- // Older images (carried forward) are at the front; keep the most recent.
389
- if (preservedImageBlocks.length > MAX_PRESERVED_IMAGE_BLOCKS) {
390
- preservedImageBlocks.splice(
391
- 0,
392
- preservedImageBlocks.length - MAX_PRESERVED_IMAGE_BLOCKS,
393
- );
370
+ if (Array.isArray(summaryUpdate.rawResponse)) {
371
+ summaryRawResponses.push(...summaryUpdate.rawResponse);
372
+ } else if (summaryUpdate.rawResponse !== undefined) {
373
+ summaryRawResponses.push(summaryUpdate.rawResponse);
394
374
  }
375
+ const summaryCalls = 1;
395
376
 
377
+ // Media (images, files) in kept turns is preserved naturally — those
378
+ // turns are carried forward as-is and their token cost is already
379
+ // accounted for by pickKeepBoundary's estimatePromptTokens call.
380
+ // Media in compacted turns is described textually in the summary transcript.
396
381
  const summaryMessage = createContextSummaryMessage(summary);
397
- if (preservedImageBlocks.length > 0) {
398
- summaryMessage.content.push(
399
- {
400
- type: "text",
401
- text: "[The following images were uploaded by the user in earlier messages and are preserved for reference.]",
402
- },
403
- ...preservedImageBlocks,
404
- );
405
- }
406
382
 
407
- const compactedMessages = [
408
- summaryMessage,
409
- ...messages.slice(keepPlan.keepFromIndex),
410
- ];
383
+ const { messages: truncatedKeptMessages } =
384
+ truncateToolResultsAcrossHistory(
385
+ messages.slice(keepPlan.keepFromIndex),
386
+ COMPACTION_TOOL_RESULT_MAX_CHARS,
387
+ );
388
+ const compactedMessages = [summaryMessage, ...truncatedKeptMessages];
411
389
  const estimatedInputTokens = estimatePromptTokens(
412
390
  compactedMessages,
413
391
  this.systemPrompt,
@@ -445,6 +423,13 @@ export class ContextWindowManager {
445
423
  };
446
424
  }
447
425
 
426
+ private get targetInputTokens(): number {
427
+ return Math.floor(
428
+ this.config.maxInputTokens *
429
+ (this.config.targetBudgetRatio - this.config.summaryBudgetRatio),
430
+ );
431
+ }
432
+
448
433
  private pickKeepBoundary(
449
434
  messages: Message[],
450
435
  userTurnStarts: number[],
@@ -458,47 +443,110 @@ export class ContextWindowManager {
458
443
  userTurnStarts.length,
459
444
  );
460
445
  const targetTokens =
461
- opts?.targetInputTokensOverride ?? this.config.targetInputTokens;
446
+ opts?.targetInputTokensOverride ?? this.targetInputTokens;
447
+
448
+ // Binary search for the maximum keepTurns whose projected tokens fit
449
+ // within the budget. Token count is monotonically non-decreasing with
450
+ // keepTurns (more turns = more tokens), so binary search is valid.
451
+ const projectedTokensForKeep = (turns: number): number => {
452
+ const fromIndex =
453
+ turns === 0
454
+ ? messages.length
455
+ : (userTurnStarts[userTurnStarts.length - turns] ?? messages.length);
456
+ const rawProjected = [
457
+ createContextSummaryMessage("Projected summary"),
458
+ ...messages.slice(fromIndex),
459
+ ];
460
+ const { messages: projectedMessages } = truncateToolResultsAcrossHistory(
461
+ rawProjected,
462
+ COMPACTION_TOOL_RESULT_MAX_CHARS,
463
+ );
464
+ return estimatePromptTokens(projectedMessages, this.systemPrompt, {
465
+ providerName: this.provider.name,
466
+ });
467
+ };
462
468
 
463
- let keepTurns = Math.min(
464
- this.config.preserveRecentUserTurns,
465
- userTurnStarts.length,
466
- );
467
- keepTurns = Math.max(minFloor, keepTurns);
469
+ let lo = minFloor;
470
+ let hi = userTurnStarts.length;
471
+
472
+ // Fast path: if keeping all turns already fits, skip the search.
473
+ if (hi > lo && projectedTokensForKeep(hi) > targetTokens) {
474
+ // Binary search: find the largest keepTurns where projected tokens fit.
475
+ while (lo < hi) {
476
+ const mid = lo + Math.ceil((hi - lo) / 2);
477
+ if (projectedTokensForKeep(mid) <= targetTokens) {
478
+ lo = mid;
479
+ } else {
480
+ hi = mid - 1;
481
+ }
482
+ }
483
+ } else {
484
+ lo = hi;
485
+ }
468
486
 
469
- // When minFloor is 0 and there are no user turns to keep, keepFromIndex
470
- // points past the end of the array so all messages become compactable.
471
- let keepFromIndex =
487
+ const keepTurns = lo;
488
+ const keepFromIndex =
472
489
  keepTurns === 0
473
490
  ? messages.length
474
491
  : (userTurnStarts[userTurnStarts.length - keepTurns] ??
475
492
  messages.length);
476
493
 
477
- while (keepTurns > minFloor) {
478
- const projectedMessages = [
479
- createContextSummaryMessage("Projected summary"),
480
- ...messages.slice(keepFromIndex),
481
- ];
482
- const projectedTokens = estimatePromptTokens(
483
- projectedMessages,
484
- this.systemPrompt,
485
- { providerName: this.provider.name },
486
- );
487
- if (projectedTokens <= targetTokens) break;
488
- keepTurns -= 1;
489
- keepFromIndex =
490
- keepTurns === 0
491
- ? messages.length
492
- : (userTurnStarts[userTurnStarts.length - keepTurns] ??
493
- keepFromIndex);
494
- }
495
-
496
494
  return { keepFromIndex, keepTurns };
497
495
  }
498
496
 
497
+ private get summaryMaxTokens(): number {
498
+ return Math.max(
499
+ 1,
500
+ Math.floor(this.config.maxInputTokens * this.config.summaryBudgetRatio),
501
+ );
502
+ }
503
+
504
+ /**
505
+ * Trim the serialized transcript so that the summary prompt (system prompt +
506
+ * existing summary + transcript + scaffolding) fits within the provider's
507
+ * input token limit, minus the output budget reserved for the summary itself.
508
+ * This prevents the summarizer LLM call from exceeding its context window
509
+ * during forced compaction of very large histories.
510
+ */
511
+ private capTranscriptToTokenBudget(
512
+ transcript: string,
513
+ currentSummary: string,
514
+ ): string {
515
+ // Reserve tokens for: system prompt, summary prompt scaffolding, existing
516
+ // summary, message overhead, and the output (summaryMaxTokens).
517
+ const overheadTokens =
518
+ estimateTextTokens(SUMMARY_SYSTEM_PROMPT) +
519
+ estimateTextTokens(currentSummary) +
520
+ // Scaffolding text in buildSummaryPrompt ("Update the summary...",
521
+ // section headers, etc.) — generous fixed estimate.
522
+ 200 +
523
+ this.summaryMaxTokens;
524
+
525
+ const maxTranscriptTokens = Math.max(
526
+ 0,
527
+ this.config.maxInputTokens - overheadTokens,
528
+ );
529
+
530
+ const transcriptTokens = estimateTextTokens(transcript);
531
+ if (transcriptTokens <= maxTranscriptTokens) return transcript;
532
+
533
+ // Truncate from the beginning (older messages) to preserve recent context.
534
+ const maxChars = maxTranscriptTokens * 4; // inverse of estimateTextTokens
535
+ const truncated = transcript.slice(transcript.length - maxChars);
536
+ log.info(
537
+ {
538
+ originalTokens: transcriptTokens,
539
+ cappedTokens: maxTranscriptTokens,
540
+ droppedTokens: transcriptTokens - maxTranscriptTokens,
541
+ },
542
+ "Capped summary transcript to fit provider input limit",
543
+ );
544
+ return `[earlier messages truncated]\n${truncated}`;
545
+ }
546
+
499
547
  private async updateSummary(
500
548
  currentSummary: string,
501
- chunk: string,
549
+ transcript: string,
502
550
  signal?: AbortSignal,
503
551
  ): Promise<{
504
552
  summary: string;
@@ -509,14 +557,14 @@ export class ContextWindowManager {
509
557
  cacheReadInputTokens: number;
510
558
  rawResponse?: unknown;
511
559
  }> {
512
- const prompt = buildSummaryPrompt(currentSummary, chunk);
560
+ const prompt = buildSummaryPrompt(currentSummary, transcript);
513
561
  try {
514
562
  const response = await this.provider.sendMessage(
515
563
  [createUserMessage(prompt)],
516
564
  undefined,
517
565
  SUMMARY_SYSTEM_PROMPT,
518
566
  {
519
- config: { max_tokens: this.config.summaryMaxTokens },
567
+ config: { max_tokens: this.summaryMaxTokens },
520
568
  signal,
521
569
  },
522
570
  );
@@ -524,7 +572,7 @@ export class ContextWindowManager {
524
572
  const nextSummary = extractText(response.content).trim();
525
573
  if (nextSummary.length > 0) {
526
574
  return {
527
- summary: clampSummary(nextSummary),
575
+ summary: this.clampSummary(nextSummary),
528
576
  inputTokens: response.usage.inputTokens,
529
577
  outputTokens: response.usage.outputTokens,
530
578
  model: response.model,
@@ -539,7 +587,7 @@ export class ContextWindowManager {
539
587
  }
540
588
 
541
589
  return {
542
- summary: fallbackSummary(currentSummary, chunk),
590
+ summary: fallbackSummary(currentSummary, transcript),
543
591
  inputTokens: 0,
544
592
  outputTokens: 0,
545
593
  model: "",
@@ -547,6 +595,13 @@ export class ContextWindowManager {
547
595
  cacheReadInputTokens: 0,
548
596
  };
549
597
  }
598
+
599
+ private clampSummary(summary: string): string {
600
+ // Budget in tokens → approximate char limit (4 chars ≈ 1 token).
601
+ const maxChars = this.summaryMaxTokens * 4;
602
+ if (summary.length <= maxChars) return summary;
603
+ return `${summary.slice(0, maxChars)}...`;
604
+ }
550
605
  }
551
606
 
552
607
  function collectUserTurnStartIndexes(messages: Message[]): number[] {
@@ -608,9 +663,7 @@ export function createContextSummaryMessage(summary: string): Message {
608
663
  content: [
609
664
  {
610
665
  type: "text",
611
- text: `${CONTEXT_SUMMARY_MARKER}\n${clampSummary(
612
- summary,
613
- )}\n</context_summary>`,
666
+ text: `${CONTEXT_SUMMARY_MARKER}\n${summary}\n</context_summary>`,
614
667
  },
615
668
  ],
616
669
  };
@@ -618,7 +671,10 @@ export function createContextSummaryMessage(summary: string): Message {
618
671
  return message;
619
672
  }
620
673
 
621
- function buildSummaryPrompt(currentSummary: string, chunk: string): string {
674
+ function buildSummaryPrompt(
675
+ currentSummary: string,
676
+ transcript: string,
677
+ ): string {
622
678
  return [
623
679
  "Update the summary with new transcript data.",
624
680
  "If new information conflicts with older notes, keep the most recent and explicit detail.",
@@ -627,39 +683,13 @@ function buildSummaryPrompt(currentSummary: string, chunk: string): string {
627
683
  "### Existing Summary",
628
684
  currentSummary.trim().length > 0 ? currentSummary.trim() : "None.",
629
685
  "",
630
- "### New Transcript Chunk",
631
- chunk,
686
+ "### Transcript",
687
+ transcript,
632
688
  ].join("\n");
633
689
  }
634
690
 
635
- function chunkMessages(
636
- messages: Message[],
637
- maxTokensPerChunk: number,
638
- ): string[] {
639
- const chunks: string[] = [];
640
- let currentChunk: string[] = [];
641
- let currentTokens = 0;
642
-
643
- for (let i = 0; i < messages.length; i++) {
644
- const line = serializeForSummary(messages[i], i);
645
- const lineTokens = estimateTextTokens(line) + 1;
646
- if (
647
- currentChunk.length > 0 &&
648
- currentTokens + lineTokens > maxTokensPerChunk
649
- ) {
650
- chunks.push(currentChunk.join("\n\n"));
651
- currentChunk = [];
652
- currentTokens = 0;
653
- }
654
- currentChunk.push(line);
655
- currentTokens += lineTokens;
656
- }
657
-
658
- if (currentChunk.length > 0) {
659
- chunks.push(currentChunk.join("\n\n"));
660
- }
661
-
662
- return chunks;
691
+ function serializeMessages(messages: Message[]): string {
692
+ return messages.map((m, i) => serializeForSummary(m, i)).join("\n\n");
663
693
  }
664
694
 
665
695
  function serializeForSummary(message: Message, index: number): string {
@@ -702,6 +732,10 @@ function serializeBlock(block: ContentBlock): string {
702
732
  return `thinking: ${clampText(block.thinking)}`;
703
733
  case "redacted_thinking":
704
734
  return "redacted_thinking";
735
+ case "server_tool_use":
736
+ return `server_tool_use ${block.name}: ${clampText(stableJson(block.input))}`;
737
+ case "web_search_tool_result":
738
+ return `web_search_tool_result ${block.tool_use_id}`;
705
739
  default:
706
740
  return "unknown_block";
707
741
  }
@@ -741,11 +775,6 @@ function extractText(content: ContentBlock[]): string {
741
775
  .join("\n");
742
776
  }
743
777
 
744
- function clampSummary(summary: string): string {
745
- if (summary.length <= MAX_CONTEXT_SUMMARY_CHARS) return summary;
746
- return `${summary.slice(0, MAX_CONTEXT_SUMMARY_CHARS)}...`;
747
- }
748
-
749
778
  function stableJson(value: unknown): string {
750
779
  try {
751
780
  return JSON.stringify(value);
@@ -22,14 +22,13 @@ import type {
22
22
  } from "../providers/types.js";
23
23
  import { allComputerUseTools } from "../tools/computer-use/definitions.js";
24
24
  import { ToolExecutor } from "../tools/executor.js";
25
- import { registerSkillTools } from "../tools/registry.js";
25
+ import { getTool, registerSkillTools } from "../tools/registry.js";
26
26
  import type { Tool, ToolExecutionResult } from "../tools/types.js";
27
27
  import { allUiSurfaceTools } from "../tools/ui-surface/definitions.js";
28
28
  import { getLogger } from "../util/logger.js";
29
29
  import { getSandboxWorkingDir } from "../util/platform.js";
30
30
  import type {
31
31
  CuObservation,
32
- FileUploadSurfaceData,
33
32
  ServerMessage,
34
33
  SurfaceData,
35
34
  SurfaceType,
@@ -288,7 +287,7 @@ export class ComputerUseSession {
288
287
  cache: this.skillProjectionCache,
289
288
  });
290
289
 
291
- if (projection.toolDefinitions.length === 0) {
290
+ if (projection.allowedToolNames.size === 0) {
292
291
  log.warn(
293
292
  { preactivatedSkillIds: this.preactivatedSkillIds },
294
293
  "Skill projection produced no tool definitions, falling back to legacy CU tools",
@@ -296,7 +295,14 @@ export class ComputerUseSession {
296
295
  return null;
297
296
  }
298
297
 
299
- return projection.toolDefinitions;
298
+ // Tool definitions are no longer returned from projectSkillTools
299
+ // (dispatched via skill_execute). Build definitions from the registry.
300
+ const defs: ToolDefinition[] = [];
301
+ for (const name of projection.allowedToolNames) {
302
+ const tool = getTool(name);
303
+ if (tool) defs.push(tool.getDefinition());
304
+ }
305
+ return defs;
300
306
  } catch (err) {
301
307
  log.warn(
302
308
  { err },
@@ -360,9 +366,7 @@ export class ComputerUseSession {
360
366
 
361
367
  const toolDefs: ToolDefinition[] = [
362
368
  ...cuToolDefs,
363
- ...allUiSurfaceTools
364
- .filter((t) => t.name !== "request_file")
365
- .map((t) => t.getDefinition()),
369
+ ...allUiSurfaceTools.map((t) => t.getDefinition()),
366
370
  ];
367
371
 
368
372
  this.prompter = new PermissionPrompter(this.sendToClient);
@@ -461,42 +465,6 @@ export class ComputerUseSession {
461
465
  return { content: "Surface dismissed", isError: false };
462
466
  }
463
467
 
464
- // ── File request proxying ──────────────────────────────────────
465
- if (toolName === "request_file") {
466
- const surfaceId = uuid();
467
- const prompt =
468
- typeof input.prompt === "string"
469
- ? input.prompt
470
- : "Please share a file";
471
- const acceptedTypes = Array.isArray(input.accepted_types)
472
- ? (input.accepted_types as string[])
473
- : undefined;
474
- const maxFiles =
475
- typeof input.max_files === "number" ? input.max_files : 1;
476
-
477
- const data: FileUploadSurfaceData = {
478
- prompt,
479
- acceptedTypes,
480
- maxFiles,
481
- };
482
-
483
- this.surfaceState.set(surfaceId, { surfaceType: "file_upload", data });
484
-
485
- this.sendToClient({
486
- type: "ui_surface_show",
487
- sessionId: this.sessionId,
488
- surfaceId,
489
- surfaceType: "file_upload",
490
- title: "File Request",
491
- data,
492
- } as UiSurfaceShow);
493
-
494
- // Always await — file upload is interactive
495
- return new Promise<ToolExecutionResult>((resolve) => {
496
- this.pendingSurfaceActions.set(surfaceId, { resolve });
497
- });
498
- }
499
-
500
468
  // ── Computer-use tool proxying ─────────────────────────────────
501
469
  const reasoning =
502
470
  typeof input.reasoning === "string" ? input.reasoning : undefined;
@@ -223,7 +223,10 @@ export async function getDaemonStatus(): Promise<{
223
223
  // killStaleDaemon() can clean it up.
224
224
  const responsive = await isHttpHealthy();
225
225
  if (!responsive) {
226
- log.warn({ pid }, "Daemon process alive but HTTP health check unresponsive");
226
+ log.warn(
227
+ { pid },
228
+ "Daemon process alive but HTTP health check unresponsive",
229
+ );
227
230
  return { running: false, pid };
228
231
  }
229
232
  return { running: true, pid };
@@ -49,9 +49,9 @@ import type {
49
49
  ChannelVerificationSessionRequest,
50
50
  ChannelVerificationSessionResponse,
51
51
  } from "../message-protocol.js";
52
- import { defineHandlers, type HandlerContext, log } from "./shared.js";
52
+ import { type HandlerContext, log } from "./shared.js";
53
53
 
54
- // -- Transport-agnostic result type (omits the IPC `type` discriminant) --
54
+ // -- Transport-agnostic result type (omits the `type` discriminant) --
55
55
 
56
56
  export type ChannelVerificationSessionResult = Omit<
57
57
  ChannelVerificationSessionResponse,
@@ -224,7 +224,7 @@ export function revokeVerificationForChannel(
224
224
  }
225
225
 
226
226
  // ---------------------------------------------------------------------------
227
- // Trusted-contact verification (shared by IPC + HTTP transports)
227
+ // Trusted-contact verification (shared across transports)
228
228
  // ---------------------------------------------------------------------------
229
229
 
230
230
  /** Session TTL in seconds (matches challenge TTL of 10 minutes). */
@@ -252,7 +252,7 @@ function toVerificationChannel(channelType: string): ChannelId | null {
252
252
  * channel, derives the verification channel and destination, checks rate
253
253
  * limits, and creates the appropriate outbound session.
254
254
  *
255
- * Returns a `ChannelVerificationSessionResult` so both the IPC handler
255
+ * Returns a `ChannelVerificationSessionResult` so both the message handler
256
256
  * and the HTTP handler can wrap it in their respective response envelopes.
257
257
  */
258
258
  export async function verifyTrustedContact(
@@ -610,8 +610,4 @@ export async function handleChannelVerificationSession(
610
610
  channel,
611
611
  });
612
612
  }
613
- }
614
-
615
- export const channelHandlers = defineHandlers({
616
- channel_verification_session: handleChannelVerificationSession,
617
- });
613
+ }
@@ -22,7 +22,6 @@ import {
22
22
  import type { IngressConfigRequest } from "../message-protocol.js";
23
23
  import {
24
24
  CONFIG_RELOAD_DEBOUNCE_MS,
25
- defineHandlers,
26
25
  type HandlerContext,
27
26
  log,
28
27
  } from "./shared.js";
@@ -252,6 +251,3 @@ export async function handleIngressConfig(
252
251
  }
253
252
  }
254
253
 
255
- export const ingressHandlers = defineHandlers({
256
- ingress_config: handleIngressConfig,
257
- });