@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
@@ -1,151 +0,0 @@
1
- import { afterEach, beforeEach, describe, expect, mock, test } from "bun:test";
2
-
3
- // --- Mocks (must be declared before importing the module under test) ---
4
-
5
- mock.module("../../../../util/logger.js", () => ({
6
- getLogger: () => ({
7
- info: () => {},
8
- warn: () => {},
9
- error: () => {},
10
- debug: () => {},
11
- trace: () => {},
12
- fatal: () => {},
13
- child: () => ({
14
- info: () => {},
15
- warn: () => {},
16
- error: () => {},
17
- debug: () => {},
18
- }),
19
- }),
20
- }));
21
-
22
- import { oauthIsAvailable, oauthPostTweet } from "../oauth-client.js";
23
-
24
- // --- Global fetch mock ---
25
-
26
- const originalFetch = globalThis.fetch;
27
- let _fetchMock: ReturnType<typeof mock> | null = null;
28
-
29
- beforeEach(() => {
30
- _fetchMock = null;
31
- });
32
-
33
- afterEach(() => {
34
- globalThis.fetch = originalFetch;
35
- });
36
-
37
- function mockFetch(response: {
38
- ok: boolean;
39
- status: number;
40
- json?: unknown;
41
- text?: string;
42
- }) {
43
- const fn = mock(() =>
44
- Promise.resolve({
45
- ok: response.ok,
46
- status: response.status,
47
- json: () => Promise.resolve(response.json),
48
- text: () => Promise.resolve(response.text ?? ""),
49
- }),
50
- );
51
- globalThis.fetch = fn as unknown as typeof fetch;
52
- _fetchMock = fn;
53
- return fn;
54
- }
55
-
56
- describe("Twitter OAuth client", () => {
57
- describe("oauthPostTweet", () => {
58
- test("successfully posts and returns tweet ID", async () => {
59
- const fn = mockFetch({
60
- ok: true,
61
- status: 200,
62
- json: { data: { id: "12345", text: "Hello world" } },
63
- });
64
-
65
- const result = await oauthPostTweet("Hello world", {
66
- oauthToken: "fake-oauth-token",
67
- });
68
-
69
- expect(result.tweetId).toBe("12345");
70
- expect(result.text).toBe("Hello world");
71
-
72
- // Verify the request was made correctly
73
- expect(fn).toHaveBeenCalledTimes(1);
74
- const [url, opts] = fn.mock.calls[0] as unknown as [string, RequestInit];
75
- expect(url).toBe("https://api.x.com/2/tweets");
76
- expect(opts.method).toBe("POST");
77
- expect((opts.headers as Record<string, string>)["Authorization"]).toBe(
78
- "Bearer fake-oauth-token",
79
- );
80
- expect((opts.headers as Record<string, string>)["Content-Type"]).toBe(
81
- "application/json",
82
- );
83
-
84
- const body = JSON.parse(opts.body as string);
85
- expect(body.text).toBe("Hello world");
86
- expect(body.reply).toBeUndefined();
87
- });
88
-
89
- test("with reply returns correct result", async () => {
90
- const fn = mockFetch({
91
- ok: true,
92
- status: 200,
93
- json: { data: { id: "67890", text: "My reply" } },
94
- });
95
-
96
- const result = await oauthPostTweet("My reply", {
97
- inReplyToTweetId: "11111",
98
- oauthToken: "fake-oauth-token",
99
- });
100
-
101
- expect(result.tweetId).toBe("67890");
102
- expect(result.text).toBe("My reply");
103
-
104
- const [, opts] = fn.mock.calls[0] as unknown as [string, RequestInit];
105
- const body = JSON.parse(opts.body as string);
106
- expect(body.text).toBe("My reply");
107
- expect(body.reply).toEqual({ in_reply_to_tweet_id: "11111" });
108
- });
109
-
110
- test("throws on API error", async () => {
111
- mockFetch({
112
- ok: false,
113
- status: 429,
114
- text: "Rate limit exceeded",
115
- });
116
-
117
- await expect(
118
- oauthPostTweet("will fail", { oauthToken: "fake-oauth-token" }),
119
- ).rejects.toThrow(/Twitter API error \(429\)/);
120
- });
121
-
122
- test("throws with status in error message on 401", async () => {
123
- mockFetch({
124
- ok: false,
125
- status: 401,
126
- text: "Unauthorized",
127
- });
128
-
129
- try {
130
- await oauthPostTweet("will fail", { oauthToken: "fake-oauth-token" });
131
- expect(true).toBe(false); // should not reach
132
- } catch (err) {
133
- expect((err as Error).message).toContain("401");
134
- }
135
- });
136
- });
137
-
138
- describe("oauthIsAvailable", () => {
139
- test("returns true when token is provided", () => {
140
- expect(oauthIsAvailable("some-token")).toBe(true);
141
- });
142
-
143
- test("returns false when token is undefined", () => {
144
- expect(oauthIsAvailable(undefined)).toBe(false);
145
- });
146
-
147
- test("returns false when token is empty string", () => {
148
- expect(oauthIsAvailable("")).toBe(false);
149
- });
150
- });
151
- });
@@ -1,420 +0,0 @@
1
- /**
2
- * CLI command group: `assistant twitter`
3
- *
4
- * Post tweets and interact with X via the command line.
5
- * All commands output JSON to stdout. Use --json for machine-readable output.
6
- */
7
-
8
- import { Command } from "commander";
9
-
10
- import { httpSend } from "../../http-client.js";
11
- import type { TwitterMode } from "./router.js";
12
- import {
13
- routedGetTweetDetail,
14
- routedGetUserByScreenName,
15
- routedGetUserTweets,
16
- routedPostTweet,
17
- routedSearchTweets,
18
- } from "./router.js";
19
-
20
- // ---------------------------------------------------------------------------
21
- // Helpers
22
- // ---------------------------------------------------------------------------
23
-
24
- function output(data: unknown, json: boolean): void {
25
- process.stdout.write(
26
- json ? JSON.stringify(data) + "\n" : JSON.stringify(data, null, 2) + "\n",
27
- );
28
- }
29
-
30
- function outputError(message: string, code = 1): void {
31
- output({ ok: false, error: message }, true);
32
- process.exitCode = code;
33
- }
34
-
35
- function getJson(cmd: Command): boolean {
36
- let c: Command | null = cmd;
37
- while (c) {
38
- if ((c.opts() as { json?: boolean }).json) return true;
39
- c = c.parent;
40
- }
41
- return false;
42
- }
43
-
44
- async function run(cmd: Command, fn: () => Promise<unknown>): Promise<void> {
45
- try {
46
- const result = await fn();
47
- output({ ok: true, ...(result as Record<string, unknown>) }, getJson(cmd));
48
- } catch (err) {
49
- const meta = err as Record<string, unknown>;
50
- // For routed errors with proxy error codes, emit structured JSON
51
- if (err instanceof Error && meta.proxyErrorCode !== undefined) {
52
- const payload: Record<string, unknown> = {
53
- ok: false,
54
- error: err.message,
55
- };
56
- payload.proxyErrorCode = meta.proxyErrorCode;
57
- if (meta.retryable !== undefined) payload.retryable = meta.retryable;
58
- if (meta.pathUsed !== undefined) payload.pathUsed = meta.pathUsed;
59
- output(payload, getJson(cmd));
60
- process.exitCode = 1;
61
- return;
62
- }
63
- // For routed errors with pathUsed but no proxy error code (e.g. OAuth
64
- // not configured, user not found, unsupported product type), preserve
65
- // the pathUsed metadata in structured output.
66
- if (err instanceof Error && meta.pathUsed !== undefined) {
67
- output(
68
- { ok: false, error: err.message, pathUsed: meta.pathUsed },
69
- getJson(cmd),
70
- );
71
- process.exitCode = 1;
72
- return;
73
- }
74
- outputError(err instanceof Error ? err.message : String(err));
75
- }
76
- }
77
-
78
- // ---------------------------------------------------------------------------
79
- // Command registration
80
- // ---------------------------------------------------------------------------
81
-
82
- export function registerTwitterCommand(program: Command): void {
83
- const tw = program
84
- .command("x")
85
- .alias("twitter")
86
- .description(
87
- "Post on X and manage connections. Supports managed (platform proxy) and OAuth (official API) paths.",
88
- )
89
- .option("--json", "Machine-readable JSON output");
90
-
91
- tw.addHelpText(
92
- "after",
93
- `
94
- Twitter (X) supports two paths for interacting with the platform:
95
-
96
- 1. Managed (platform proxy) — routes Twitter API calls through the platform,
97
- which holds the OAuth credentials. Used when integrationMode is "managed".
98
- 2. OAuth (official API) — uses an authenticated Twitter OAuth application for
99
- posting and replying. Requires a connected OAuth credential.
100
-
101
- Write operations (post, reply) default to OAuth. Pass --managed to route
102
- through the platform proxy instead. Read operations (timeline, tweet, search)
103
- always use managed mode.
104
-
105
- Examples:
106
- $ assistant x status
107
- $ assistant x post "Hello world" --managed
108
- $ assistant x post "Hello world" --oauth-token "$TOKEN"
109
- $ assistant x timeline elonmusk --count 10
110
- $ assistant x search "from:vaborsh AI agents" --product Latest`,
111
- );
112
-
113
- // =========================================================================
114
- // status — check OAuth and managed mode info
115
- // =========================================================================
116
- tw.command("status")
117
- .description("Check Twitter OAuth and managed mode status")
118
- .addHelpText(
119
- "after",
120
- `
121
- Shows the current state of authentication:
122
-
123
- OAuth — whether an OAuth credential is connected and the linked account.
124
- Managed — whether managed mode is available and prerequisite status.
125
-
126
- If the assistant is not running, fields will be reported as undefined.
127
-
128
- Examples:
129
- $ assistant x status
130
- $ assistant x status --json`,
131
- )
132
- .action(async (_opts: unknown, cmd: Command) => {
133
- // Query daemon for OAuth / managed config
134
- let oauthInfo: Record<string, unknown> = {};
135
- try {
136
- const r = await sendTwitterConfigRequest("get");
137
- oauthInfo = {
138
- oauthConnected: r.connected ?? false,
139
- oauthAccount: r.accountInfo ?? undefined,
140
- managedAvailable: r.managedAvailable ?? false,
141
- managedPrerequisites: r.managedPrerequisites ?? undefined,
142
- localClientConfigured: r.localClientConfigured ?? false,
143
- };
144
- } catch {
145
- // Daemon may not be running; report what we can
146
- oauthInfo = {
147
- oauthConnected: undefined,
148
- oauthAccount: undefined,
149
- managedAvailable: undefined,
150
- managedPrerequisites: undefined,
151
- localClientConfigured: undefined,
152
- };
153
- }
154
-
155
- output(
156
- {
157
- ok: true,
158
- ...oauthInfo,
159
- },
160
- getJson(cmd),
161
- );
162
- });
163
-
164
- // =========================================================================
165
- // post — post a tweet
166
- // =========================================================================
167
- tw.command("post")
168
- .description("Post a tweet")
169
- .argument("<text>", "Tweet text")
170
- .option("--managed", "Route through the platform proxy (managed mode)")
171
- .option(
172
- "--oauth-token <token>",
173
- "OAuth access token (required for OAuth path)",
174
- )
175
- .addHelpText(
176
- "after",
177
- `
178
- Arguments:
179
- text The tweet text to post (max 280 characters)
180
-
181
- Posts a new tweet. By default uses OAuth mode. Pass --managed to route through
182
- the platform proxy instead. The response includes the tweet ID, URL, and which
183
- path was used.
184
-
185
- Examples:
186
- $ assistant x post "Hello world"
187
- $ assistant x post "Hello world" --oauth-token "$TOKEN"
188
- $ assistant x post "Hello world" --managed`,
189
- )
190
- .action(
191
- async (
192
- text: string,
193
- opts: { managed?: boolean; oauthToken?: string },
194
- cmd: Command,
195
- ) => {
196
- await run(cmd, async () => {
197
- const mode: TwitterMode = opts.managed ? "managed" : "oauth";
198
- const { result, pathUsed } = await routedPostTweet(text, {
199
- mode,
200
- oauthToken: opts.oauthToken,
201
- });
202
- return {
203
- tweetId: result.tweetId,
204
- text: result.text,
205
- url: result.url,
206
- pathUsed,
207
- };
208
- });
209
- },
210
- );
211
-
212
- // =========================================================================
213
- // reply — reply to a tweet
214
- // =========================================================================
215
- tw.command("reply")
216
- .description("Reply to a tweet")
217
- .argument("<tweetUrl>", "Tweet URL or tweet ID")
218
- .argument("<text>", "Reply text")
219
- .option("--managed", "Route through the platform proxy (managed mode)")
220
- .option(
221
- "--oauth-token <token>",
222
- "OAuth access token (required for OAuth path)",
223
- )
224
- .addHelpText(
225
- "after",
226
- `
227
- Arguments:
228
- tweetUrl Full tweet URL (e.g. https://x.com/user/status/123456) or a bare tweet ID
229
- text The reply text to post (max 280 characters)
230
-
231
- Posts a reply to the specified tweet. Accepts either a full tweet URL or a bare
232
- numeric tweet ID. The tweet ID is extracted from the last numeric segment of the
233
- URL. By default uses OAuth mode. Pass --managed to route through the platform proxy.
234
-
235
- Examples:
236
- $ assistant x reply https://x.com/elonmusk/status/1234567890 "Great point!"
237
- $ assistant x reply 1234567890 "Interesting thread" --oauth-token "$TOKEN"
238
- $ assistant x reply 1234567890 "Nice!" --managed`,
239
- )
240
- .action(
241
- async (
242
- tweetUrl: string,
243
- text: string,
244
- opts: { managed?: boolean; oauthToken?: string },
245
- cmd: Command,
246
- ) => {
247
- await run(cmd, async () => {
248
- const mode: TwitterMode = opts.managed ? "managed" : "oauth";
249
- // Extract tweet ID: either a bare numeric ID or the last numeric segment of a URL
250
- const idMatch = tweetUrl.match(/(\d+)\s*$/);
251
- if (!idMatch) {
252
- throw new Error(`Could not extract tweet ID from: ${tweetUrl}`);
253
- }
254
- const inReplyToTweetId = idMatch[1];
255
- const { result, pathUsed } = await routedPostTweet(text, {
256
- inReplyToTweetId,
257
- mode,
258
- oauthToken: opts.oauthToken,
259
- });
260
- return {
261
- tweetId: result.tweetId,
262
- text: result.text,
263
- url: result.url,
264
- inReplyToTweetId,
265
- pathUsed,
266
- };
267
- });
268
- },
269
- );
270
- // =========================================================================
271
- // timeline — fetch a user's recent tweets
272
- // =========================================================================
273
- tw.command("timeline")
274
- .description("Fetch a user's recent tweets")
275
- .argument("<screenName>", "Twitter screen name (without @)")
276
- .option("--count <n>", "Number of tweets to fetch", "20")
277
- .addHelpText(
278
- "after",
279
- `
280
- Arguments:
281
- screenName Twitter screen name without the @ prefix (e.g. "elonmusk", not "@elonmusk")
282
-
283
- Fetches a user's recent tweets via managed mode. Resolves the screen name to a
284
- user ID first, then retrieves their tweet timeline. The --count flag controls
285
- how many tweets to return (default: 20).
286
-
287
- Examples:
288
- $ assistant x timeline elonmusk
289
- $ assistant x timeline vaborsh --count 50
290
- $ assistant x timeline openai --count 10 --json`,
291
- )
292
- .action(
293
- async (screenName: string, opts: { count: string }, cmd: Command) => {
294
- await run(cmd, async () => {
295
- const mode: TwitterMode = "managed";
296
- const { result: user, pathUsed } = await routedGetUserByScreenName(
297
- screenName.replace(/^@/, ""),
298
- { mode },
299
- );
300
- const { result: tweets } = await routedGetUserTweets(
301
- user.userId,
302
- parseInt(opts.count, 10),
303
- { mode },
304
- );
305
- return { user, tweets, pathUsed };
306
- });
307
- },
308
- );
309
-
310
- // =========================================================================
311
- // tweet — fetch a single tweet and its replies
312
- // =========================================================================
313
- tw.command("tweet")
314
- .description("Fetch a tweet and its reply thread")
315
- .argument("<tweetIdOrUrl>", "Tweet ID or URL")
316
- .addHelpText(
317
- "after",
318
- `
319
- Arguments:
320
- tweetIdOrUrl A bare tweet ID (e.g. 1234567890) or a full tweet URL
321
- (e.g. https://x.com/user/status/1234567890)
322
-
323
- Fetches a single tweet and its reply thread via managed mode. The tweet ID is
324
- extracted from the last numeric segment of the input. Returns an array of tweets
325
- representing the conversation thread.
326
-
327
- Examples:
328
- $ assistant x tweet 1234567890
329
- $ assistant x tweet https://x.com/elonmusk/status/1234567890
330
- $ assistant x tweet https://x.com/openai/status/9876543210 --json`,
331
- )
332
- .action(async (tweetIdOrUrl: string, _opts: unknown, cmd: Command) => {
333
- await run(cmd, async () => {
334
- const idMatch = tweetIdOrUrl.match(/(\d+)\s*$/);
335
- if (!idMatch)
336
- throw new Error(`Could not extract tweet ID from: ${tweetIdOrUrl}`);
337
- const mode: TwitterMode = "managed";
338
- const { result: tweets, pathUsed } = await routedGetTweetDetail(
339
- idMatch[1],
340
- { mode },
341
- );
342
- return { tweets, pathUsed };
343
- });
344
- });
345
-
346
- // =========================================================================
347
- // search — search tweets
348
- // =========================================================================
349
- tw.command("search")
350
- .description("Search tweets")
351
- .argument("<query>", "Search query")
352
- .option("--product <type>", "Top, Latest, People, or Media", "Top")
353
- .addHelpText(
354
- "after",
355
- `
356
- Arguments:
357
- query Twitter search query string. Supports Twitter search operators
358
- (e.g. "from:user", "to:user", "min_faves:100", quoted phrases)
359
-
360
- The --product flag selects the search result type:
361
- Top — most relevant tweets (default)
362
- Latest — most recent tweets, reverse chronological
363
- People — user accounts matching the query
364
- Media — tweets containing images or video
365
-
366
- Examples:
367
- $ assistant x search "AI agents"
368
- $ assistant x search "from:elonmusk SpaceX" --product Latest
369
- $ assistant x search "machine learning" --product Media --json`,
370
- )
371
- .action(async (query: string, opts: { product: string }, cmd: Command) => {
372
- await run(cmd, async () => {
373
- const mode: TwitterMode = "managed";
374
- const product = opts.product as "Top" | "Latest" | "People" | "Media";
375
- const { result: tweets, pathUsed } = await routedSearchTweets(
376
- query,
377
- product,
378
- { mode },
379
- );
380
- return { query, tweets, pathUsed };
381
- });
382
- });
383
- }
384
-
385
- // ---------------------------------------------------------------------------
386
- // Daemon HTTP helper — send requests to the daemon's HTTP API
387
- // ---------------------------------------------------------------------------
388
-
389
- /**
390
- * Send a Twitter integration config request to the daemon via HTTP.
391
- *
392
- * Maps the "get" action to HTTP:
393
- * - "get" → GET /v1/integrations/twitter/auth/status
394
- */
395
- async function sendTwitterConfigRequest(
396
- action: string,
397
- ): Promise<Record<string, unknown>> {
398
- if (action === "get") {
399
- const response = await httpSend("/v1/integrations/twitter/auth/status", {
400
- method: "GET",
401
- });
402
- if (!response.ok) {
403
- const text = await response.text();
404
- throw new Error(`Assistant returned an error: ${text}`);
405
- }
406
- const data = (await response.json()) as Record<string, unknown>;
407
- return {
408
- type: "twitter_integration_config_response",
409
- success: true,
410
- connected: data.connected ?? false,
411
- accountInfo: data.accountInfo,
412
- mode: data.mode,
413
- managedAvailable: data.managedAvailable ?? false,
414
- managedPrerequisites: data.managedPrerequisites,
415
- localClientConfigured: data.localClientConfigured ?? false,
416
- };
417
- }
418
-
419
- throw new Error(`Unsupported twitter_integration_config action: ${action}`);
420
- }
@@ -1,60 +0,0 @@
1
- /**
2
- * OAuth-backed Twitter API client.
3
- *
4
- * Accepts an OAuth2 Bearer token as a parameter and uses it to execute
5
- * Twitter API v2 operations directly (post and reply).
6
- */
7
-
8
- const TWITTER_API_BASE = "https://api.x.com/2";
9
-
10
- export interface OAuthPostResult {
11
- tweetId: string;
12
- text: string;
13
- url?: string;
14
- }
15
-
16
- /**
17
- * Post a tweet (or reply) using OAuth2 Bearer token authentication.
18
- *
19
- * The caller is responsible for providing a valid token (e.g. via
20
- * `assistant oauth token twitter`).
21
- */
22
- export async function oauthPostTweet(
23
- text: string,
24
- opts: { inReplyToTweetId?: string; oauthToken: string },
25
- ): Promise<OAuthPostResult> {
26
- const body: Record<string, unknown> = { text };
27
- if (opts.inReplyToTweetId) {
28
- body.reply = { in_reply_to_tweet_id: opts.inReplyToTweetId };
29
- }
30
-
31
- const res = await fetch(`${TWITTER_API_BASE}/tweets`, {
32
- method: "POST",
33
- headers: {
34
- Authorization: `Bearer ${opts.oauthToken}`,
35
- "Content-Type": "application/json",
36
- },
37
- body: JSON.stringify(body),
38
- });
39
-
40
- if (!res.ok) {
41
- const errorBody = await res.text().catch(() => "");
42
- throw new Error(
43
- `Twitter API error (${res.status}): ${errorBody.slice(0, 500)}`,
44
- );
45
- }
46
-
47
- const json = (await res.json()) as { data: { id: string; text: string } };
48
- return {
49
- tweetId: json.data.id,
50
- text: json.data.text,
51
- };
52
- }
53
-
54
- /**
55
- * Check whether an OAuth token is available.
56
- * When the caller provides a token string, OAuth is available.
57
- */
58
- export function oauthIsAvailable(oauthToken: string | undefined): boolean {
59
- return oauthToken != null && oauthToken.length > 0;
60
- }