@vellumai/assistant 0.3.4 → 0.3.6

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 (506) hide show
  1. package/Dockerfile +2 -0
  2. package/README.md +88 -2
  3. package/eslint.config.mjs +31 -0
  4. package/package.json +1 -1
  5. package/scripts/ipc/check-swift-decoder-drift.ts +4 -1
  6. package/scripts/ipc/generate-swift.ts +31 -2
  7. package/src/__tests__/__snapshots__/ipc-snapshot.test.ts.snap +438 -1
  8. package/src/__tests__/approval-conversation-turn.test.ts +214 -0
  9. package/src/__tests__/approval-hardcoded-copy-guard.test.ts +41 -0
  10. package/src/__tests__/approval-message-composer.test.ts +253 -0
  11. package/src/__tests__/browser-manager.test.ts +1 -0
  12. package/src/__tests__/call-conversation-messages.test.ts +130 -0
  13. package/src/__tests__/call-domain.test.ts +12 -2
  14. package/src/__tests__/call-orchestrator.test.ts +799 -249
  15. package/src/__tests__/call-pointer-messages.test.ts +148 -0
  16. package/src/__tests__/call-recovery.test.ts +3 -0
  17. package/src/__tests__/call-routes-http.test.ts +32 -2
  18. package/src/__tests__/call-store.test.ts +3 -0
  19. package/src/__tests__/channel-approval-routes.test.ts +1277 -98
  20. package/src/__tests__/channel-approval.test.ts +37 -0
  21. package/src/__tests__/channel-approvals.test.ts +36 -50
  22. package/src/__tests__/channel-guardian.test.ts +630 -22
  23. package/src/__tests__/channel-readiness-service.test.ts +324 -0
  24. package/src/__tests__/checker.test.ts +14 -7
  25. package/src/__tests__/clarification-resolver.test.ts +44 -24
  26. package/src/__tests__/commit-message-enrichment-service.test.ts +9 -4
  27. package/src/__tests__/computer-use-session-working-dir.test.ts +8 -0
  28. package/src/__tests__/config-schema.test.ts +14 -8
  29. package/src/__tests__/context-window-manager.test.ts +30 -2
  30. package/src/__tests__/contradiction-checker.test.ts +20 -5
  31. package/src/__tests__/credential-security-invariants.test.ts +7 -2
  32. package/src/__tests__/daemon-lifecycle.test.ts +13 -12
  33. package/src/__tests__/db-migration-rollback.test.ts +752 -0
  34. package/src/__tests__/dictation-mode-detection.test.ts +63 -0
  35. package/src/__tests__/dynamic-skill-workflow-prompt.test.ts +2 -0
  36. package/src/__tests__/entity-search.test.ts +615 -0
  37. package/src/__tests__/fuzzy-match-property.test.ts +5 -5
  38. package/src/__tests__/guardian-action-store.test.ts +123 -0
  39. package/src/__tests__/guardian-action-sweep.test.ts +277 -0
  40. package/src/__tests__/guardian-dispatch.test.ts +389 -0
  41. package/src/__tests__/guardian-question-copy.test.ts +47 -0
  42. package/src/__tests__/handlers-telegram-config.test.ts +4 -2
  43. package/src/__tests__/handlers-twilio-config.test.ts +533 -0
  44. package/src/__tests__/intent-routing.test.ts +2 -0
  45. package/src/__tests__/ipc-snapshot.test.ts +291 -1
  46. package/src/__tests__/memory-upsert-concurrency.test.ts +828 -0
  47. package/src/__tests__/messaging-send-tool.test.ts +65 -0
  48. package/src/__tests__/model-intents.test.ts +96 -0
  49. package/src/__tests__/no-direct-anthropic-sdk-imports.test.ts +42 -0
  50. package/src/__tests__/oauth2-gateway-transport.test.ts +130 -0
  51. package/src/__tests__/onboarding-starter-tasks.test.ts +2 -0
  52. package/src/__tests__/provider-commit-message-generator.test.ts +89 -13
  53. package/src/__tests__/provider-error-scenarios.test.ts +621 -0
  54. package/src/__tests__/provider-fail-open-selection.test.ts +119 -0
  55. package/src/__tests__/qdrant-manager.test.ts +27 -20
  56. package/src/__tests__/relay-server.test.ts +779 -40
  57. package/src/__tests__/run-orchestrator-assistant-events.test.ts +6 -0
  58. package/src/__tests__/run-orchestrator.test.ts +42 -4
  59. package/src/__tests__/runtime-runs-http.test.ts +17 -1
  60. package/src/__tests__/runtime-runs.test.ts +16 -0
  61. package/src/__tests__/schedule-store.test.ts +18 -4
  62. package/src/__tests__/scheduler-recurrence.test.ts +13 -4
  63. package/src/__tests__/session-abort-tool-results.test.ts +6 -0
  64. package/src/__tests__/session-agent-loop.test.ts +857 -0
  65. package/src/__tests__/session-conflict-gate.test.ts +6 -0
  66. package/src/__tests__/session-pre-run-repair.test.ts +6 -0
  67. package/src/__tests__/session-profile-injection.test.ts +6 -0
  68. package/src/__tests__/session-provider-retry-repair.test.ts +6 -0
  69. package/src/__tests__/session-queue.test.ts +6 -0
  70. package/src/__tests__/session-runtime-assembly.test.ts +321 -13
  71. package/src/__tests__/session-slash-known.test.ts +6 -0
  72. package/src/__tests__/session-slash-queue.test.ts +6 -0
  73. package/src/__tests__/session-slash-unknown.test.ts +6 -0
  74. package/src/__tests__/session-surfaces-task-progress.test.ts +2 -0
  75. package/src/__tests__/session-tool-setup-app-refresh.test.ts +1 -0
  76. package/src/__tests__/session-tool-setup-memory-scope.test.ts +1 -0
  77. package/src/__tests__/session-tool-setup-side-effect-flag.test.ts +1 -0
  78. package/src/__tests__/session-workspace-injection.test.ts +6 -0
  79. package/src/__tests__/session-workspace-tool-tracking.test.ts +6 -0
  80. package/src/__tests__/skills.test.ts +2 -0
  81. package/src/__tests__/sms-messaging-provider.test.ts +126 -0
  82. package/src/__tests__/starter-task-flow.test.ts +2 -0
  83. package/src/__tests__/swarm-dag-pathological.test.ts +535 -0
  84. package/src/__tests__/system-prompt.test.ts +2 -0
  85. package/src/__tests__/task-management-tools.test.ts +2 -2
  86. package/src/__tests__/task-runner.test.ts +14 -4
  87. package/src/__tests__/terminal-tools.test.ts +25 -19
  88. package/src/__tests__/tool-execution-abort-cleanup.test.ts +545 -0
  89. package/src/__tests__/tool-executor-shell-integration.test.ts +11 -11
  90. package/src/__tests__/tool-executor.test.ts +23 -24
  91. package/src/__tests__/trust-store.test.ts +3 -3
  92. package/src/__tests__/twilio-rest.test.ts +29 -0
  93. package/src/__tests__/twilio-routes-elevenlabs.test.ts +3 -0
  94. package/src/__tests__/twilio-routes-twiml.test.ts +11 -0
  95. package/src/__tests__/twilio-routes.test.ts +167 -11
  96. package/src/__tests__/twitter-cli-error-shaping.test.ts +2 -2
  97. package/src/__tests__/user-reference.test.ts +2 -0
  98. package/src/__tests__/voice-quality.test.ts +222 -0
  99. package/src/__tests__/web-search.test.ts +46 -30
  100. package/src/__tests__/work-item-output.test.ts +110 -0
  101. package/src/agent/loop.ts +1 -1
  102. package/src/agent-heartbeat/agent-heartbeat-service.ts +2 -10
  103. package/src/amazon/client.ts +1418 -0
  104. package/src/amazon/request-extractor.ts +135 -0
  105. package/src/amazon/session.ts +109 -0
  106. package/src/autonomy/autonomy-store.ts +5 -5
  107. package/src/browser-extension-relay/client.ts +124 -0
  108. package/src/browser-extension-relay/protocol.ts +63 -0
  109. package/src/browser-extension-relay/server.ts +177 -0
  110. package/src/bundler/app-bundler.ts +3 -3
  111. package/src/bundler/bundle-signer.ts +1 -1
  112. package/src/bundler/signature-verifier.ts +1 -1
  113. package/src/calls/call-conversation-messages.ts +33 -0
  114. package/src/calls/call-domain.ts +114 -10
  115. package/src/calls/call-orchestrator.ts +268 -59
  116. package/src/calls/call-pointer-messages.ts +53 -0
  117. package/src/calls/call-recovery.ts +3 -8
  118. package/src/calls/call-store.ts +69 -87
  119. package/src/calls/elevenlabs-config.ts +3 -2
  120. package/src/calls/guardian-action-sweep.ts +105 -0
  121. package/src/calls/guardian-dispatch.ts +203 -0
  122. package/src/calls/guardian-question-copy.ts +133 -0
  123. package/src/calls/relay-server.ts +466 -8
  124. package/src/calls/speaker-identification.ts +1 -1
  125. package/src/calls/twilio-config.ts +22 -14
  126. package/src/calls/twilio-provider.ts +6 -4
  127. package/src/calls/twilio-rest.ts +308 -7
  128. package/src/calls/twilio-routes.ts +65 -12
  129. package/src/calls/types.ts +3 -1
  130. package/src/channels/types.ts +25 -0
  131. package/src/cli/amazon.ts +815 -0
  132. package/src/cli/config-commands.ts +2 -2
  133. package/src/cli/core-commands.ts +4 -3
  134. package/src/cli/influencer.ts +244 -0
  135. package/src/cli/map.ts +89 -6
  136. package/src/cli.ts +1 -1
  137. package/src/config/agent-schema.ts +171 -0
  138. package/src/config/bundled-skills/amazon/SKILL.md +127 -0
  139. package/src/config/bundled-skills/amazon/icon.svg +13 -0
  140. package/src/config/bundled-skills/api-mapping/SKILL.md +78 -0
  141. package/src/config/bundled-skills/browser/SKILL.md +1 -0
  142. package/src/config/bundled-skills/browser/TOOLS.json +17 -0
  143. package/src/config/bundled-skills/browser/tools/browser-wait-for-download.ts +25 -0
  144. package/src/config/bundled-skills/doordash/SKILL.md +51 -51
  145. package/src/config/bundled-skills/email-setup/SKILL.md +14 -5
  146. package/src/config/bundled-skills/google-oauth-setup/SKILL.md +183 -0
  147. package/src/config/bundled-skills/influencer/SKILL.md +144 -0
  148. package/src/config/bundled-skills/knowledge-graph/SKILL.md +15 -0
  149. package/src/config/bundled-skills/knowledge-graph/TOOLS.json +56 -0
  150. package/src/config/bundled-skills/knowledge-graph/tools/graph-query.ts +185 -0
  151. package/src/config/bundled-skills/macos-automation/icon.svg +12 -0
  152. package/src/config/bundled-skills/media-processing/SKILL.md +176 -0
  153. package/src/config/bundled-skills/media-processing/TOOLS.json +230 -0
  154. package/src/config/bundled-skills/media-processing/__tests__/concurrency-pool.test.ts +77 -0
  155. package/src/config/bundled-skills/media-processing/__tests__/cost-tracker.test.ts +69 -0
  156. package/src/config/bundled-skills/media-processing/__tests__/preprocess.test.ts +303 -0
  157. package/src/config/bundled-skills/media-processing/services/concurrency-pool.ts +55 -0
  158. package/src/config/bundled-skills/media-processing/services/cost-tracker.ts +86 -0
  159. package/src/config/bundled-skills/media-processing/services/gemini-map.ts +339 -0
  160. package/src/config/bundled-skills/media-processing/services/preprocess.ts +551 -0
  161. package/src/config/bundled-skills/media-processing/services/processing-pipeline.ts +259 -0
  162. package/src/config/bundled-skills/media-processing/services/reduce.ts +197 -0
  163. package/src/config/bundled-skills/media-processing/tools/analyze-keyframes.ts +136 -0
  164. package/src/config/bundled-skills/media-processing/tools/extract-keyframes.ts +59 -0
  165. package/src/config/bundled-skills/media-processing/tools/generate-clip.ts +195 -0
  166. package/src/config/bundled-skills/media-processing/tools/ingest-media.ts +197 -0
  167. package/src/config/bundled-skills/media-processing/tools/media-diagnostics.ts +143 -0
  168. package/src/config/bundled-skills/media-processing/tools/media-status.ts +75 -0
  169. package/src/config/bundled-skills/media-processing/tools/query-media-events.ts +65 -0
  170. package/src/config/bundled-skills/messaging/SKILL.md +33 -8
  171. package/src/config/bundled-skills/messaging/tools/messaging-analyze-style.ts +4 -7
  172. package/src/config/bundled-skills/messaging/tools/messaging-reply.ts +2 -1
  173. package/src/config/bundled-skills/messaging/tools/messaging-send.ts +5 -1
  174. package/src/config/bundled-skills/phone-calls/SKILL.md +88 -23
  175. package/src/config/bundled-skills/twitter/SKILL.md +19 -3
  176. package/src/config/bundled-skills/twitter/icon.svg +14 -0
  177. package/src/config/bundled-tool-registry.ts +310 -0
  178. package/src/config/calls-schema.ts +181 -0
  179. package/src/config/core-schema.ts +309 -0
  180. package/src/config/defaults.ts +28 -3
  181. package/src/config/env-registry.ts +162 -0
  182. package/src/config/env.ts +175 -0
  183. package/src/config/loader.ts +6 -6
  184. package/src/config/memory-schema.ts +528 -0
  185. package/src/config/sandbox-schema.ts +55 -0
  186. package/src/config/schema.ts +158 -1133
  187. package/src/config/skill-state.ts +1 -1
  188. package/src/config/skills-schema.ts +32 -0
  189. package/src/config/skills.ts +35 -24
  190. package/src/config/system-prompt.ts +131 -56
  191. package/src/config/templates/IDENTITY.md +2 -2
  192. package/src/config/templates/SOUL.md +1 -1
  193. package/src/config/types.ts +1 -0
  194. package/src/config/user-reference.ts +4 -9
  195. package/src/config/vellum-skills/catalog.json +6 -7
  196. package/src/config/vellum-skills/chatgpt-import/tools/chatgpt-import.ts +5 -1
  197. package/src/config/vellum-skills/slack-oauth-setup/SKILL.md +4 -3
  198. package/src/config/vellum-skills/sms-setup/SKILL.md +216 -0
  199. package/src/config/vellum-skills/twilio-setup/SKILL.md +40 -8
  200. package/src/context/window-manager.ts +27 -7
  201. package/src/daemon/approval-generators.ts +186 -0
  202. package/src/daemon/approved-devices-store.ts +140 -0
  203. package/src/daemon/assistant-attachments.ts +1 -1
  204. package/src/daemon/classifier.ts +35 -32
  205. package/src/daemon/config-watcher.ts +1 -1
  206. package/src/daemon/daemon-control.ts +217 -0
  207. package/src/daemon/handlers/apps.ts +2 -3
  208. package/src/daemon/handlers/config-channels.ts +158 -0
  209. package/src/daemon/handlers/config-inbox.ts +540 -0
  210. package/src/daemon/handlers/config-ingress.ts +231 -0
  211. package/src/daemon/handlers/config-integrations.ts +258 -0
  212. package/src/daemon/handlers/config-model.ts +143 -0
  213. package/src/daemon/handlers/config-parental.ts +163 -0
  214. package/src/daemon/handlers/config-scheduling.ts +172 -0
  215. package/src/daemon/handlers/config-slack.ts +92 -0
  216. package/src/daemon/handlers/config-telegram.ts +301 -0
  217. package/src/daemon/handlers/config-tools.ts +177 -0
  218. package/src/daemon/handlers/config-trust.ts +104 -0
  219. package/src/daemon/handlers/config-twilio.ts +1080 -0
  220. package/src/daemon/handlers/config.ts +53 -1689
  221. package/src/daemon/handlers/diagnostics.ts +1 -1
  222. package/src/daemon/handlers/dictation.ts +180 -0
  223. package/src/daemon/handlers/documents.ts +18 -32
  224. package/src/daemon/handlers/identity.ts +14 -23
  225. package/src/daemon/handlers/index.ts +11 -0
  226. package/src/daemon/handlers/misc.ts +3 -5
  227. package/src/daemon/handlers/pairing.ts +98 -0
  228. package/src/daemon/handlers/sessions.ts +56 -5
  229. package/src/daemon/handlers/shared.ts +6 -1
  230. package/src/daemon/handlers/skills.ts +1 -1
  231. package/src/daemon/handlers/twitter-auth.ts +2 -0
  232. package/src/daemon/handlers/work-items.ts +17 -9
  233. package/src/daemon/handlers/workspace-files.ts +4 -3
  234. package/src/daemon/install-cli-launchers.ts +113 -0
  235. package/src/daemon/ipc-contract/apps.ts +356 -0
  236. package/src/daemon/ipc-contract/browser.ts +74 -0
  237. package/src/daemon/ipc-contract/computer-use.ts +151 -0
  238. package/src/daemon/ipc-contract/diagnostics.ts +56 -0
  239. package/src/daemon/ipc-contract/documents.ts +74 -0
  240. package/src/daemon/ipc-contract/inbox.ts +209 -0
  241. package/src/daemon/ipc-contract/integrations.ts +284 -0
  242. package/src/daemon/ipc-contract/memory.ts +48 -0
  243. package/src/daemon/ipc-contract/messages.ts +211 -0
  244. package/src/daemon/ipc-contract/pairing.ts +45 -0
  245. package/src/daemon/ipc-contract/parental-control.ts +95 -0
  246. package/src/daemon/ipc-contract/schedules.ts +97 -0
  247. package/src/daemon/ipc-contract/sessions.ts +315 -0
  248. package/src/daemon/ipc-contract/shared.ts +42 -0
  249. package/src/daemon/ipc-contract/skills.ts +120 -0
  250. package/src/daemon/ipc-contract/subagents.ts +58 -0
  251. package/src/daemon/ipc-contract/surfaces.ts +250 -0
  252. package/src/daemon/ipc-contract/trust.ts +60 -0
  253. package/src/daemon/ipc-contract/work-items.ts +225 -0
  254. package/src/daemon/ipc-contract/workspace.ts +113 -0
  255. package/src/daemon/ipc-contract-inventory.json +70 -0
  256. package/src/daemon/ipc-contract-inventory.ts +55 -29
  257. package/src/daemon/ipc-contract.ts +229 -2426
  258. package/src/daemon/ipc-protocol.ts +1 -1
  259. package/src/daemon/ipc-validate.ts +7 -0
  260. package/src/daemon/lifecycle.ts +97 -377
  261. package/src/daemon/pairing-store.ts +177 -0
  262. package/src/daemon/providers-setup.ts +43 -0
  263. package/src/daemon/ride-shotgun-handler.ts +68 -3
  264. package/src/daemon/server.ts +66 -46
  265. package/src/daemon/session-agent-loop-handlers.ts +421 -0
  266. package/src/daemon/session-agent-loop.ts +117 -275
  267. package/src/daemon/session-dynamic-profile.ts +1 -1
  268. package/src/daemon/session-history.ts +1 -1
  269. package/src/daemon/session-media-retry.ts +1 -1
  270. package/src/daemon/session-messaging.ts +37 -2
  271. package/src/daemon/session-notifiers.ts +5 -25
  272. package/src/daemon/session-process.ts +99 -59
  273. package/src/daemon/session-queue-manager.ts +96 -4
  274. package/src/daemon/session-runtime-assembly.ts +199 -10
  275. package/src/daemon/session-surfaces.ts +19 -4
  276. package/src/daemon/session-tool-setup.ts +30 -30
  277. package/src/daemon/session-workspace.ts +1 -1
  278. package/src/daemon/session.ts +35 -2
  279. package/src/daemon/shutdown-handlers.ts +122 -0
  280. package/src/daemon/trace-emitter.ts +1 -1
  281. package/src/daemon/watch-handler.ts +36 -33
  282. package/src/doordash/cart-queries.ts +787 -0
  283. package/src/doordash/client.ts +144 -127
  284. package/src/doordash/order-queries.ts +85 -0
  285. package/src/doordash/queries.ts +10 -1308
  286. package/src/doordash/search-queries.ts +203 -0
  287. package/src/doordash/session.ts +3 -2
  288. package/src/doordash/store-queries.ts +246 -0
  289. package/src/doordash/types.ts +367 -0
  290. package/src/email/providers/agentmail.ts +2 -1
  291. package/src/email/providers/index.ts +3 -2
  292. package/src/email/service.ts +3 -2
  293. package/src/errors.ts +43 -0
  294. package/src/home-base/prebuilt/seed.ts +1 -1
  295. package/src/hooks/cli.ts +6 -5
  296. package/src/hooks/config.ts +6 -8
  297. package/src/hooks/discovery.ts +6 -5
  298. package/src/hooks/manager.ts +4 -3
  299. package/src/hooks/runner.ts +2 -2
  300. package/src/hooks/templates.ts +5 -5
  301. package/src/inbound/public-ingress-urls.ts +6 -4
  302. package/src/index.ts +4 -2
  303. package/src/influencer/client.ts +1104 -0
  304. package/src/instrument.ts +4 -3
  305. package/src/logfire.ts +4 -3
  306. package/src/memory/admin.ts +25 -35
  307. package/src/memory/attachments-store.ts +4 -7
  308. package/src/memory/channel-delivery-store.ts +30 -1
  309. package/src/memory/channel-guardian-store.ts +202 -2
  310. package/src/memory/clarification-resolver.ts +37 -33
  311. package/src/memory/conflict-store.ts +67 -61
  312. package/src/memory/contradiction-checker.ts +141 -117
  313. package/src/memory/conversation-store.ts +335 -51
  314. package/src/memory/db-connection.ts +27 -4
  315. package/src/memory/db-init.ts +265 -4
  316. package/src/memory/db.ts +14 -1
  317. package/src/memory/embedding-backend.ts +27 -5
  318. package/src/memory/embedding-ollama.ts +2 -1
  319. package/src/memory/entity-extractor.ts +38 -35
  320. package/src/memory/guardian-action-store.ts +430 -0
  321. package/src/memory/inbox-escalation-projection.ts +59 -0
  322. package/src/memory/inbox-thread-store.ts +218 -0
  323. package/src/memory/ingress-invite-store.ts +338 -0
  324. package/src/memory/ingress-member-store.ts +350 -0
  325. package/src/memory/items-extractor.ts +91 -97
  326. package/src/memory/job-handlers/index-maintenance.ts +3 -3
  327. package/src/memory/job-handlers/media-processing.ts +69 -0
  328. package/src/memory/job-handlers/summarization.ts +32 -26
  329. package/src/memory/job-utils.ts +3 -10
  330. package/src/memory/jobs-store.ts +8 -10
  331. package/src/memory/jobs-worker.ts +55 -36
  332. package/src/memory/media-store.ts +759 -0
  333. package/src/memory/migrations/001-job-deferrals.ts +45 -0
  334. package/src/memory/migrations/002-tool-invocations-fk.ts +43 -0
  335. package/src/memory/migrations/003-memory-fts-backfill.ts +24 -0
  336. package/src/memory/migrations/004-entity-relation-dedup.ts +87 -0
  337. package/src/memory/migrations/005-fingerprint-scope-unique.ts +80 -0
  338. package/src/memory/migrations/006-scope-salted-fingerprints.ts +62 -0
  339. package/src/memory/migrations/007-assistant-id-to-self.ts +254 -0
  340. package/src/memory/migrations/008-remove-assistant-id-columns.ts +208 -0
  341. package/src/memory/migrations/009-llm-usage-events-drop-assistant-id.ts +83 -0
  342. package/src/memory/migrations/010-ext-conv-bindings-channel-chat-unique.ts +56 -0
  343. package/src/memory/migrations/011-call-sessions-provider-sid-dedup.ts +63 -0
  344. package/src/memory/migrations/012-call-sessions-add-initiated-from.ts +19 -0
  345. package/src/memory/migrations/013-guardian-action-tables.ts +68 -0
  346. package/src/memory/migrations/014-backfill-inbox-thread-state.ts +76 -0
  347. package/src/memory/migrations/015-drop-active-search-index.ts +27 -0
  348. package/src/memory/migrations/016-memory-segments-indexes.ts +11 -0
  349. package/src/memory/migrations/017-memory-items-indexes.ts +10 -0
  350. package/src/memory/migrations/018-remaining-table-indexes.ts +13 -0
  351. package/src/memory/migrations/index.ts +24 -0
  352. package/src/memory/migrations/registry.ts +79 -0
  353. package/src/memory/migrations/validate-migration-state.ts +69 -0
  354. package/src/memory/qdrant-manager.ts +49 -8
  355. package/src/memory/query-builder.ts +1 -1
  356. package/src/memory/raw-query.ts +119 -0
  357. package/src/memory/recall-cache.ts +4 -1
  358. package/src/memory/retriever.ts +165 -47
  359. package/src/memory/schema-migration.ts +25 -984
  360. package/src/memory/schema.ts +228 -7
  361. package/src/memory/search/entity.ts +205 -31
  362. package/src/memory/search/lexical.ts +81 -52
  363. package/src/memory/search/ranking.ts +27 -23
  364. package/src/memory/search/semantic.ts +157 -19
  365. package/src/memory/search/types.ts +24 -0
  366. package/src/memory/shared-app-links-store.ts +4 -5
  367. package/src/memory/validation.ts +19 -0
  368. package/src/messaging/draft-store.ts +5 -6
  369. package/src/messaging/provider-types.ts +2 -0
  370. package/src/messaging/providers/sms/adapter.ts +201 -0
  371. package/src/messaging/providers/sms/client.ts +93 -0
  372. package/src/messaging/providers/sms/types.ts +7 -0
  373. package/src/messaging/providers/telegram-bot/adapter.ts +2 -5
  374. package/src/messaging/providers/whatsapp/adapter.ts +136 -0
  375. package/src/messaging/providers/whatsapp/client.ts +67 -0
  376. package/src/messaging/style-analyzer.ts +5 -4
  377. package/src/messaging/thread-summarizer.ts +61 -69
  378. package/src/messaging/triage-engine.ts +62 -71
  379. package/src/migrations/config-merge.ts +53 -0
  380. package/src/migrations/data-layout.ts +68 -0
  381. package/src/migrations/data-merge.ts +33 -0
  382. package/src/migrations/hooks-merge.ts +90 -0
  383. package/src/migrations/index.ts +6 -0
  384. package/src/migrations/log.ts +23 -0
  385. package/src/migrations/skills-merge.ts +33 -0
  386. package/src/migrations/workspace-layout.ts +79 -0
  387. package/src/permissions/checker.ts +133 -11
  388. package/src/permissions/prompter.ts +14 -0
  389. package/src/permissions/shell-identity.ts +31 -1
  390. package/src/permissions/trust-store.ts +21 -1
  391. package/src/providers/anthropic/client.ts +4 -4
  392. package/src/providers/failover.ts +2 -2
  393. package/src/providers/model-intents.ts +70 -0
  394. package/src/providers/ollama/client.ts +2 -1
  395. package/src/providers/provider-send-message.ts +176 -0
  396. package/src/providers/registry.ts +71 -30
  397. package/src/providers/retry.ts +35 -1
  398. package/src/providers/types.ts +12 -1
  399. package/src/runtime/approval-conversation-turn.ts +97 -0
  400. package/src/runtime/approval-message-composer.ts +253 -0
  401. package/src/runtime/channel-approval-parser.ts +36 -2
  402. package/src/runtime/channel-approvals.ts +11 -24
  403. package/src/runtime/channel-guardian-service.ts +88 -21
  404. package/src/runtime/channel-readiness-service.ts +418 -0
  405. package/src/runtime/channel-readiness-types.ts +35 -0
  406. package/src/runtime/channel-retry-sweep.ts +184 -0
  407. package/src/runtime/guardian-context-resolver.ts +108 -0
  408. package/src/runtime/http-server.ts +275 -717
  409. package/src/runtime/http-types.ts +59 -3
  410. package/src/runtime/middleware/auth.ts +116 -0
  411. package/src/runtime/middleware/error-handler.ts +33 -0
  412. package/src/runtime/middleware/twilio-validation.ts +127 -0
  413. package/src/runtime/routes/app-routes.ts +1 -1
  414. package/src/runtime/routes/call-routes.ts +51 -7
  415. package/src/runtime/routes/channel-delivery-routes.ts +170 -0
  416. package/src/runtime/routes/channel-guardian-routes.ts +1191 -0
  417. package/src/runtime/routes/channel-inbound-routes.ts +1152 -0
  418. package/src/runtime/routes/channel-route-shared.ts +144 -0
  419. package/src/runtime/routes/channel-routes.ts +32 -1588
  420. package/src/runtime/routes/conversation-routes.ts +50 -7
  421. package/src/runtime/routes/events-routes.ts +2 -2
  422. package/src/runtime/routes/identity-routes.ts +126 -0
  423. package/src/runtime/routes/pairing-routes.ts +143 -0
  424. package/src/runtime/routes/run-routes.ts +15 -1
  425. package/src/runtime/run-orchestrator.ts +86 -35
  426. package/src/schedule/schedule-store.ts +36 -32
  427. package/src/schedule/scheduler.ts +3 -3
  428. package/src/security/encrypted-store.ts +5 -7
  429. package/src/security/oauth2.ts +45 -15
  430. package/src/security/parental-control-store.ts +183 -0
  431. package/src/security/secret-allowlist.ts +4 -3
  432. package/src/security/secret-scanner.ts +5 -5
  433. package/src/security/secure-keys.ts +1 -1
  434. package/src/security/token-manager.ts +3 -2
  435. package/src/services/vercel-deploy.ts +6 -2
  436. package/src/skills/tool-manifest.ts +3 -3
  437. package/src/skills/vellum-catalog-remote.ts +75 -16
  438. package/src/slack/slack-webhook.ts +2 -1
  439. package/src/swarm/orchestrator.ts +92 -1
  440. package/src/swarm/router-planner.ts +6 -9
  441. package/src/swarm/worker-prompts.ts +9 -12
  442. package/src/tasks/task-compiler.ts +19 -28
  443. package/src/tasks/task-runner.ts +1 -1
  444. package/src/tools/assets/materialize.ts +2 -2
  445. package/src/tools/assets/search.ts +15 -14
  446. package/src/tools/browser/__tests__/auth-detector.test.ts +1 -0
  447. package/src/tools/browser/auto-navigate.ts +1 -0
  448. package/src/tools/browser/browser-execution.ts +10 -1
  449. package/src/tools/browser/browser-manager.ts +119 -4
  450. package/src/tools/browser/network-recorder.ts +5 -0
  451. package/src/tools/calls/call-start.ts +1 -0
  452. package/src/tools/credentials/broker.ts +11 -2
  453. package/src/tools/credentials/metadata-store.ts +18 -14
  454. package/src/tools/credentials/post-connect-hooks.ts +61 -0
  455. package/src/tools/credentials/vault.ts +49 -23
  456. package/src/tools/execution-target.ts +11 -1
  457. package/src/tools/executor.ts +68 -9
  458. package/src/tools/host-terminal/cli-discover.ts +1 -1
  459. package/src/tools/network/script-proxy/http-forwarder.ts +1 -1
  460. package/src/tools/network/script-proxy/mitm-handler.ts +1 -1
  461. package/src/tools/network/script-proxy/server.ts +1 -1
  462. package/src/tools/network/script-proxy/session-manager.ts +6 -5
  463. package/src/tools/network/web-fetch.ts +18 -2
  464. package/src/tools/network/web-search.ts +8 -4
  465. package/src/tools/reminder/reminder-store.ts +14 -15
  466. package/src/tools/schedule/create.ts +1 -0
  467. package/src/tools/schedule/list.ts +2 -1
  468. package/src/tools/shared/filesystem/file-ops-service.ts +5 -7
  469. package/src/tools/skills/skill-script-runner.ts +24 -9
  470. package/src/tools/skills/skill-tool-factory.ts +1 -0
  471. package/src/tools/tasks/work-item-enqueue.ts +2 -2
  472. package/src/tools/terminal/evaluate-typescript.ts +21 -12
  473. package/src/tools/terminal/parser.ts +50 -0
  474. package/src/tools/types.ts +2 -0
  475. package/src/tools/watcher/delete.ts +6 -0
  476. package/src/tools/weather/service.ts +1 -1
  477. package/src/twitter/client.ts +190 -24
  478. package/src/twitter/router.ts +1 -1
  479. package/src/twitter/session.ts +4 -3
  480. package/src/util/clipboard.ts +1 -1
  481. package/src/util/errors.ts +65 -8
  482. package/src/util/fs.ts +40 -0
  483. package/src/util/json.ts +10 -0
  484. package/src/util/log-redact.ts +189 -0
  485. package/src/util/logger.ts +19 -17
  486. package/src/util/object.ts +3 -0
  487. package/src/util/platform.ts +105 -363
  488. package/src/util/pricing.ts +1 -1
  489. package/src/util/promise-guard.ts +1 -1
  490. package/src/util/retry.ts +19 -0
  491. package/src/util/row-mapper.ts +79 -0
  492. package/src/util/silently.ts +21 -0
  493. package/src/watcher/engine.ts +5 -1
  494. package/src/watcher/provider-types.ts +20 -0
  495. package/src/watcher/providers/github.ts +156 -0
  496. package/src/watcher/providers/gmail.ts +1 -0
  497. package/src/watcher/providers/google-calendar.ts +1 -0
  498. package/src/watcher/providers/linear.ts +460 -0
  499. package/src/watcher/providers/slack.ts +1 -0
  500. package/src/work-items/work-item-runner.ts +1 -1
  501. package/src/workspace/git-service.ts +1 -1
  502. package/src/workspace/provider-commit-message-generator.ts +51 -22
  503. package/src/__tests__/call-bridge.test.ts +0 -517
  504. package/src/__tests__/session-process-bridge.test.ts +0 -244
  505. package/src/calls/call-bridge.ts +0 -168
  506. package/src/config/vellum-skills/google-oauth-setup/SKILL.md +0 -199
@@ -72,6 +72,7 @@ export async function handleTwitterAuthStart(
72
72
  clientId,
73
73
  clientSecret,
74
74
  extraParams: {},
75
+ tokenEndpointAuthMethod: clientSecret ? 'client_secret_basic' : undefined,
75
76
  };
76
77
 
77
78
  const result = await startOAuth2Flow(oauthConfig, {
@@ -131,6 +132,7 @@ export async function handleTwitterAuthStart(
131
132
  oauth2TokenUrl: 'https://api.x.com/2/oauth2/token',
132
133
  oauth2ClientId: clientId,
133
134
  oauth2ClientSecret: clientSecret ?? null,
135
+ oauth2TokenEndpointAuthMethod: clientSecret ? 'client_secret_basic' : undefined,
134
136
  grantedScopes: result.grantedScopes,
135
137
  expiresAt: result.tokens.expiresIn ? Date.now() + result.tokens.expiresIn * 1000 : null,
136
138
  });
@@ -148,15 +148,23 @@ function broadcastWorkItemStatus(ctx: HandlerContext, id: string): void {
148
148
  }
149
149
  }
150
150
 
151
- /** Extract plain text from a message content string (handles JSON content block arrays). */
152
- function extractTextFromContent(content: string): string {
151
+ /**
152
+ * Extract only the latest assistant text block from stored content.
153
+ * Consolidation merges multiple assistant messages into one DB row; scanning
154
+ * from the end keeps task output focused on the final assistant response.
155
+ */
156
+ function extractLatestTextFromContent(content: string): string {
153
157
  try {
154
158
  const parsed = JSON.parse(content);
155
159
  if (Array.isArray(parsed)) {
156
- return parsed
157
- .filter((b: { type: string }) => b.type === 'text')
158
- .map((b: { text: string }) => b.text)
159
- .join('\n');
160
+ for (let i = parsed.length - 1; i >= 0; i--) {
161
+ const block = parsed[i] as { type?: unknown; text?: unknown };
162
+ if (block.type !== 'text') continue;
163
+ if (typeof block.text !== 'string') continue;
164
+ if (!block.text.trim()) continue;
165
+ return block.text;
166
+ }
167
+ return '';
160
168
  }
161
169
  } catch {
162
170
  // Plain text content — use as-is
@@ -299,7 +307,7 @@ export function handleWorkItemOutput(
299
307
  const m = msgs[i];
300
308
  if (m.role !== 'assistant') continue;
301
309
 
302
- const text = extractTextFromContent(m.content);
310
+ const text = extractLatestTextFromContent(m.content);
303
311
  if (!text.trim()) continue;
304
312
 
305
313
  summary = truncate(text, 2000, '');
@@ -385,7 +393,7 @@ export async function handleWorkItemRunTask(
385
393
  // Compute required tools using the same resolution logic as preflight:
386
394
  // work-item snapshot first, then task template, then all registered tools.
387
395
  let requiredTools: string[];
388
- if (workItem.requiredTools !== null && workItem.requiredTools !== undefined) {
396
+ if (workItem.requiredTools != null) {
389
397
  requiredTools = sanitizeToolList(JSON.parse(workItem.requiredTools));
390
398
  } else {
391
399
  requiredTools = task.requiredTools
@@ -505,7 +513,7 @@ export async function handleWorkItemPreflight(
505
513
  // back to the task template (or all registered tools) when the
506
514
  // snapshot is null.
507
515
  let requiredTools: string[];
508
- if (workItem.requiredTools !== null && workItem.requiredTools !== undefined) {
516
+ if (workItem.requiredTools != null) {
509
517
  requiredTools = sanitizeToolList(JSON.parse(workItem.requiredTools));
510
518
  } else {
511
519
  const task = getTask(workItem.taskId);
@@ -1,6 +1,7 @@
1
1
  import * as net from 'node:net';
2
- import { existsSync, readFileSync } from 'node:fs';
2
+ import { readFileSync } from 'node:fs';
3
3
  import { join, resolve, sep } from 'node:path';
4
+ import { pathExists } from '../../util/fs.js';
4
5
  import { getWorkspaceDir } from '../../util/platform.js';
5
6
  import { log, defineHandlers, type HandlerContext } from './shared.js';
6
7
  import type { WorkspaceFileReadRequest } from '../ipc-protocol.js';
@@ -13,7 +14,7 @@ function handleWorkspaceFilesList(socket: net.Socket, ctx: HandlerContext): void
13
14
  const files = WORKSPACE_FILES.map((name) => ({
14
15
  path: name,
15
16
  name,
16
- exists: existsSync(join(base, name)),
17
+ exists: pathExists(join(base, name)),
17
18
  }));
18
19
  ctx.send(socket, { type: 'workspace_files_list_response', files });
19
20
  }
@@ -42,7 +43,7 @@ function handleWorkspaceFileRead(
42
43
  }
43
44
 
44
45
  try {
45
- if (!existsSync(resolved)) {
46
+ if (!pathExists(resolved)) {
46
47
  ctx.send(socket, {
47
48
  type: 'workspace_file_read_response',
48
49
  path: requested,
@@ -0,0 +1,113 @@
1
+ /**
2
+ * Installs standalone CLI launcher scripts in ~/.vellum/bin/ so that
3
+ * integration commands (e.g. `doordash`, `map`) can be invoked directly
4
+ * without requiring `vellum` on PATH.
5
+ *
6
+ * Each launcher is a shell script that hardcodes absolute paths to `bun`
7
+ * and the CLI entrypoint, forwarding all arguments to the appropriate
8
+ * subcommand.
9
+ */
10
+
11
+ import { execSync } from 'node:child_process';
12
+ import { existsSync, mkdirSync, writeFileSync, chmodSync } from 'node:fs';
13
+ import { join } from 'node:path';
14
+ import { homedir } from 'node:os';
15
+ import { getLogger } from '../util/logger.js';
16
+
17
+ const log = getLogger('install-cli-launchers');
18
+
19
+ /** Integration subcommands that should get standalone launchers. */
20
+ const INTEGRATION_COMMANDS = ['doordash', 'map'];
21
+
22
+ /**
23
+ * Resolve the absolute path to the bun binary.
24
+ * Prefers process.execPath (works when running under bun), then falls
25
+ * back to `which bun`.
26
+ */
27
+ function resolveBunPath(): string {
28
+ // process.execPath points to the bun binary when running under bun
29
+ if (process.execPath && process.execPath.includes('bun')) {
30
+ return process.execPath;
31
+ }
32
+ try {
33
+ return execSync('which bun', { encoding: 'utf-8' }).trim();
34
+ } catch {
35
+ throw new Error('Could not find bun binary');
36
+ }
37
+ }
38
+
39
+ /**
40
+ * Resolve the absolute path to the CLI entrypoint (index.ts).
41
+ * Uses import.meta.dirname to find the source tree root.
42
+ */
43
+ function resolveCliEntrypoint(): string {
44
+ // This file is at assistant/src/daemon/install-cli-launchers.ts
45
+ // The CLI entrypoint is at assistant/src/index.ts
46
+ const thisDir = import.meta.dirname ?? __dirname;
47
+ return join(thisDir, '..', 'index.ts');
48
+ }
49
+
50
+ /**
51
+ * Check whether a given command name conflicts with an existing system
52
+ * binary (i.e. something other than our own launcher).
53
+ */
54
+ function hasSystemConflict(name: string, binDir: string): boolean {
55
+ try {
56
+ const result = execSync(`which ${name}`, { encoding: 'utf-8' }).trim();
57
+ // If `which` resolves to our own bin dir, that's not a conflict
58
+ if (result.startsWith(binDir)) return false;
59
+ return true;
60
+ } catch {
61
+ // `which` failed — no conflict
62
+ return false;
63
+ }
64
+ }
65
+
66
+ /**
67
+ * Install standalone CLI launcher scripts in ~/.vellum/bin/.
68
+ *
69
+ * For each integration command, generates a shell script that execs
70
+ * bun with the CLI entrypoint and the subcommand name prepended.
71
+ * Uses the short name by default (e.g. `doordash`), falling back to
72
+ * `vellum-<name>` if the short name conflicts with an existing system binary.
73
+ */
74
+ export function installCliLaunchers(): void {
75
+ const binDir = join(homedir(), '.vellum', 'bin');
76
+
77
+ let bunPath: string;
78
+ try {
79
+ bunPath = resolveBunPath();
80
+ } catch (err) {
81
+ log.warn({ err }, 'Cannot install CLI launchers: bun not found');
82
+ return;
83
+ }
84
+
85
+ const entrypoint = resolveCliEntrypoint();
86
+ if (!existsSync(entrypoint)) {
87
+ // In compiled builds (e.g. macOS app via `bun build --compile`), the
88
+ // source tree isn't available. Launcher scripts are a dev-mode
89
+ // convenience; compiled builds use their own command dispatch, so we
90
+ // silently skip installation.
91
+ log.debug({ entrypoint }, 'CLI entrypoint not found (compiled build?) — skipping launcher installation');
92
+ return;
93
+ }
94
+
95
+ if (!existsSync(binDir)) {
96
+ mkdirSync(binDir, { recursive: true });
97
+ }
98
+
99
+ for (const name of INTEGRATION_COMMANDS) {
100
+ const launcherName = hasSystemConflict(name, binDir) ? `vellum-${name}` : name;
101
+ const launcherPath = join(binDir, launcherName);
102
+
103
+ const script = `#!/bin/bash
104
+ exec "${bunPath}" "${entrypoint}" ${name} "$@"
105
+ `;
106
+
107
+ writeFileSync(launcherPath, script);
108
+ chmodSync(launcherPath, 0o755);
109
+ log.debug({ launcherName, launcherPath }, 'Installed CLI launcher');
110
+ }
111
+
112
+ log.info({ binDir, commands: INTEGRATION_COMMANDS }, 'CLI launchers installed');
113
+ }
@@ -0,0 +1,356 @@
1
+ // App management, gallery, publishing, and sharing types.
2
+
3
+ import type { GalleryManifest } from '../../gallery/gallery-manifest.js';
4
+
5
+ // === Client → Server ===
6
+
7
+ export interface AppDataRequest {
8
+ type: 'app_data_request';
9
+ surfaceId: string;
10
+ callId: string;
11
+ method: 'query' | 'create' | 'update' | 'delete';
12
+ appId: string;
13
+ recordId?: string;
14
+ data?: Record<string, unknown>;
15
+ }
16
+
17
+ export interface AppsListRequest {
18
+ type: 'apps_list';
19
+ }
20
+
21
+ export interface HomeBaseGetRequest {
22
+ type: 'home_base_get';
23
+ /** If true, daemon ensures a durable Home Base link exists before responding. */
24
+ ensureLinked?: boolean;
25
+ }
26
+
27
+ export interface AppOpenRequest {
28
+ type: 'app_open_request';
29
+ appId: string;
30
+ }
31
+
32
+ export interface SharedAppsListRequest {
33
+ type: 'shared_apps_list';
34
+ }
35
+
36
+ export interface SharedAppDeleteRequest {
37
+ type: 'shared_app_delete';
38
+ uuid: string;
39
+ }
40
+
41
+ export interface ForkSharedAppRequest {
42
+ type: 'fork_shared_app';
43
+ uuid: string;
44
+ }
45
+
46
+ export interface BundleAppRequest {
47
+ type: 'bundle_app';
48
+ appId: string;
49
+ }
50
+
51
+ export interface AppUpdatePreviewRequest {
52
+ type: 'app_update_preview';
53
+ appId: string;
54
+ /** Base64-encoded PNG screenshot thumbnail. */
55
+ preview: string;
56
+ }
57
+
58
+ export interface AppPreviewRequest {
59
+ type: 'app_preview_request';
60
+ appId: string;
61
+ }
62
+
63
+ export interface OpenBundleRequest {
64
+ type: 'open_bundle';
65
+ filePath: string;
66
+ }
67
+
68
+ export interface SignBundlePayloadResponse {
69
+ type: 'sign_bundle_payload_response';
70
+ requestId: string;
71
+ signature?: string;
72
+ keyId?: string;
73
+ publicKey?: string;
74
+ error?: string;
75
+ }
76
+
77
+ export interface GetSigningIdentityResponse {
78
+ type: 'get_signing_identity_response';
79
+ requestId: string;
80
+ keyId?: string;
81
+ publicKey?: string;
82
+ error?: string;
83
+ }
84
+
85
+ export interface GalleryListRequest {
86
+ type: 'gallery_list';
87
+ }
88
+
89
+ export interface GalleryInstallRequest {
90
+ type: 'gallery_install';
91
+ galleryAppId: string;
92
+ }
93
+
94
+ export interface AppHistoryRequest {
95
+ type: 'app_history_request';
96
+ appId: string;
97
+ limit?: number;
98
+ }
99
+
100
+ export interface AppDiffRequest {
101
+ type: 'app_diff_request';
102
+ appId: string;
103
+ fromCommit: string;
104
+ toCommit?: string;
105
+ }
106
+
107
+ export interface AppFileAtVersionRequest {
108
+ type: 'app_file_at_version_request';
109
+ appId: string;
110
+ path: string;
111
+ commitHash: string;
112
+ }
113
+
114
+ export interface AppRestoreRequest {
115
+ type: 'app_restore_request';
116
+ appId: string;
117
+ commitHash: string;
118
+ }
119
+
120
+ export interface ShareAppCloudRequest {
121
+ type: 'share_app_cloud';
122
+ appId: string;
123
+ }
124
+
125
+ export interface ShareToSlackRequest {
126
+ type: 'share_to_slack';
127
+ appId: string;
128
+ }
129
+
130
+ export interface PublishPageRequest {
131
+ type: 'publish_page';
132
+ html: string;
133
+ title?: string;
134
+ appId?: string;
135
+ }
136
+
137
+ export interface UnpublishPageRequest {
138
+ type: 'unpublish_page';
139
+ deploymentId: string;
140
+ }
141
+
142
+ // === Server → Client ===
143
+
144
+ export interface AppDataResponse {
145
+ type: 'app_data_response';
146
+ surfaceId: string;
147
+ callId: string;
148
+ success: boolean;
149
+ result?: unknown;
150
+ error?: string;
151
+ }
152
+
153
+ export interface AppUpdatePreviewResponse {
154
+ type: 'app_update_preview_response';
155
+ success: boolean;
156
+ appId: string;
157
+ }
158
+
159
+ export interface AppPreviewResponse {
160
+ type: 'app_preview_response';
161
+ appId: string;
162
+ preview?: string;
163
+ }
164
+
165
+ export interface AppsListResponse {
166
+ type: 'apps_list_response';
167
+ apps: Array<{
168
+ id: string;
169
+ name: string;
170
+ description?: string;
171
+ icon?: string;
172
+ preview?: string;
173
+ createdAt: number;
174
+ version?: string;
175
+ contentId?: string;
176
+ appType?: string;
177
+ }>;
178
+ }
179
+
180
+ export interface HomeBaseGetResponse {
181
+ type: 'home_base_get_response';
182
+ homeBase: {
183
+ appId: string;
184
+ source: string;
185
+ starterTasks: string[];
186
+ onboardingTasks: string[];
187
+ preview: {
188
+ title: string;
189
+ subtitle: string;
190
+ description: string;
191
+ icon: string;
192
+ metrics: Array<{ label: string; value: string }>;
193
+ };
194
+ } | null;
195
+ }
196
+
197
+ export interface SharedAppsListResponse {
198
+ type: 'shared_apps_list_response';
199
+ apps: Array<{
200
+ uuid: string;
201
+ name: string;
202
+ description?: string;
203
+ icon?: string;
204
+ preview?: string;
205
+ entry: string;
206
+ trustTier: string;
207
+ signerDisplayName?: string;
208
+ bundleSizeBytes: number;
209
+ installedAt: string;
210
+ version?: string;
211
+ contentId?: string;
212
+ updateAvailable?: boolean;
213
+ }>;
214
+ }
215
+
216
+ export interface SharedAppDeleteResponse {
217
+ type: 'shared_app_delete_response';
218
+ success: boolean;
219
+ }
220
+
221
+ export interface ForkSharedAppResponse {
222
+ type: 'fork_shared_app_response';
223
+ success: boolean;
224
+ appId?: string;
225
+ name?: string;
226
+ error?: string;
227
+ }
228
+
229
+ export interface BundleAppResponse {
230
+ type: 'bundle_app_response';
231
+ bundlePath: string;
232
+ manifest: {
233
+ format_version: number;
234
+ name: string;
235
+ description?: string;
236
+ icon?: string;
237
+ created_at: string;
238
+ created_by: string;
239
+ entry: string;
240
+ capabilities: string[];
241
+ version?: string;
242
+ content_id?: string;
243
+ };
244
+ }
245
+
246
+ export interface OpenBundleResponse {
247
+ type: 'open_bundle_response';
248
+ manifest: {
249
+ format_version: number;
250
+ name: string;
251
+ description?: string;
252
+ icon?: string;
253
+ created_at: string;
254
+ created_by: string;
255
+ entry: string;
256
+ capabilities: string[];
257
+ };
258
+ scanResult: {
259
+ passed: boolean;
260
+ blocked: string[];
261
+ warnings: string[];
262
+ };
263
+ signatureResult: {
264
+ trustTier: 'verified' | 'signed' | 'unsigned' | 'tampered';
265
+ signerKeyId?: string;
266
+ signerDisplayName?: string;
267
+ signerAccount?: string;
268
+ };
269
+ bundleSizeBytes: number;
270
+ }
271
+
272
+ export interface SignBundlePayloadRequest {
273
+ type: 'sign_bundle_payload';
274
+ requestId: string;
275
+ payload: string;
276
+ }
277
+
278
+ export interface GetSigningIdentityRequest {
279
+ type: 'get_signing_identity';
280
+ requestId: string;
281
+ }
282
+
283
+ export interface ShareAppCloudResponse {
284
+ type: 'share_app_cloud_response';
285
+ success: boolean;
286
+ shareToken?: string;
287
+ shareUrl?: string;
288
+ error?: string;
289
+ }
290
+
291
+ export interface GalleryListResponse {
292
+ type: 'gallery_list_response';
293
+ gallery: GalleryManifest;
294
+ }
295
+
296
+ export interface GalleryInstallResponse {
297
+ type: 'gallery_install_response';
298
+ success: boolean;
299
+ appId?: string;
300
+ name?: string;
301
+ error?: string;
302
+ }
303
+
304
+ export interface AppHistoryResponse {
305
+ type: 'app_history_response';
306
+ appId: string;
307
+ versions: Array<{
308
+ commitHash: string;
309
+ message: string;
310
+ timestamp: number;
311
+ }>;
312
+ }
313
+
314
+ export interface AppDiffResponse {
315
+ type: 'app_diff_response';
316
+ appId: string;
317
+ diff: string;
318
+ }
319
+
320
+ export interface AppFileAtVersionResponse {
321
+ type: 'app_file_at_version_response';
322
+ appId: string;
323
+ path: string;
324
+ content: string;
325
+ }
326
+
327
+ export interface AppRestoreResponse {
328
+ type: 'app_restore_response';
329
+ success: boolean;
330
+ error?: string;
331
+ }
332
+
333
+ export interface ShareToSlackResponse {
334
+ type: 'share_to_slack_response';
335
+ success: boolean;
336
+ error?: string;
337
+ }
338
+
339
+ export interface PublishPageResponse {
340
+ type: 'publish_page_response';
341
+ success: boolean;
342
+ publicUrl?: string;
343
+ deploymentId?: string;
344
+ error?: string;
345
+ }
346
+
347
+ export interface UnpublishPageResponse {
348
+ type: 'unpublish_page_response';
349
+ success: boolean;
350
+ error?: string;
351
+ }
352
+
353
+ export interface AppFilesChanged {
354
+ type: 'app_files_changed';
355
+ appId: string;
356
+ }
@@ -0,0 +1,74 @@
1
+ // Browser interaction types.
2
+
3
+ export interface BrowserFrame {
4
+ type: 'browser_frame';
5
+ sessionId: string;
6
+ surfaceId: string;
7
+ frame: string; // base64 JPEG
8
+ metadata?: { offsetTop: number; pageScaleFactor: number; scrollOffsetX: number; scrollOffsetY: number; timestamp: number };
9
+ }
10
+
11
+ export interface BrowserCDPRequest {
12
+ type: 'browser_cdp_request';
13
+ sessionId: string;
14
+ }
15
+
16
+ export interface BrowserCDPResponse {
17
+ type: 'browser_cdp_response';
18
+ sessionId: string;
19
+ success: boolean;
20
+ declined?: boolean;
21
+ }
22
+
23
+ export interface BrowserUserClick {
24
+ type: 'browser_user_click';
25
+ sessionId: string;
26
+ surfaceId: string;
27
+ x: number;
28
+ y: number;
29
+ button?: 'left' | 'right';
30
+ doubleClick?: boolean;
31
+ }
32
+
33
+ export interface BrowserUserScroll {
34
+ type: 'browser_user_scroll';
35
+ sessionId: string;
36
+ surfaceId: string;
37
+ deltaX: number;
38
+ deltaY: number;
39
+ x: number;
40
+ y: number;
41
+ }
42
+
43
+ export interface BrowserUserKeypress {
44
+ type: 'browser_user_keypress';
45
+ sessionId: string;
46
+ surfaceId: string;
47
+ key: string;
48
+ modifiers?: string[];
49
+ }
50
+
51
+ export interface BrowserInteractiveMode {
52
+ type: 'browser_interactive_mode';
53
+ sessionId: string;
54
+ surfaceId: string;
55
+ enabled: boolean;
56
+ }
57
+
58
+ export interface BrowserInteractiveModeChanged {
59
+ type: 'browser_interactive_mode_changed';
60
+ sessionId: string;
61
+ surfaceId: string;
62
+ enabled: boolean;
63
+ reason?: string;
64
+ message?: string;
65
+ }
66
+
67
+ export interface BrowserHandoffRequest {
68
+ type: 'browser_handoff_request';
69
+ sessionId: string;
70
+ surfaceId: string;
71
+ reason: 'auth' | 'checkout' | 'captcha' | 'custom';
72
+ message: string;
73
+ bringToFront?: boolean;
74
+ }