@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
@@ -0,0 +1,203 @@
1
+ /**
2
+ * GraphQL queries for DoorDash search and homepage discovery.
3
+ * Each query is fully self-contained with all required fragment definitions.
4
+ */
5
+
6
+ // ---------------------------------------------------------------------------
7
+ // SEARCH_QUERY
8
+ // ---------------------------------------------------------------------------
9
+
10
+ export const SEARCH_QUERY = `
11
+ query autocompleteFacetFeed($query: String!, $serializedBundleGlobalSearchContext: String) {
12
+ autocompleteFacetFeed(
13
+ query: $query
14
+ serializedBundleGlobalSearchContext: $serializedBundleGlobalSearchContext
15
+ ) {
16
+ ...FacetFeedV2ResultFragment
17
+ __typename
18
+ }
19
+ }
20
+
21
+ fragment FacetFeedV2ResultFragment on FacetFeedV2Result {
22
+ body {
23
+ id
24
+ header { ...FacetV2Fragment __typename }
25
+ body { ...FacetV2Fragment __typename }
26
+ layout { omitFooter __typename }
27
+ __typename
28
+ }
29
+ page { ...FacetV2PageFragment __typename }
30
+ header { ...FacetV2Fragment __typename }
31
+ footer { ...FacetV2Fragment __typename }
32
+ custom logging __typename
33
+ }
34
+
35
+ fragment FacetV2Fragment on FacetV2 {
36
+ ...FacetV2BaseFragment
37
+ childrenMap { ...FacetV2BaseFragment __typename }
38
+ __typename
39
+ }
40
+
41
+ fragment FacetV2BaseFragment on FacetV2 {
42
+ id childrenCount
43
+ component { id category __typename }
44
+ name
45
+ text {
46
+ title
47
+ titleTextAttributes { textStyle textColor __typename }
48
+ subtitle
49
+ subtitleTextAttributes { textStyle textColor __typename }
50
+ accessory
51
+ accessoryTextAttributes { textStyle textColor __typename }
52
+ description
53
+ descriptionTextAttributes { textStyle textColor __typename }
54
+ custom { key value __typename }
55
+ __typename
56
+ }
57
+ images {
58
+ main { ...FacetV2ImageFragment __typename }
59
+ icon { ...FacetV2ImageFragment __typename }
60
+ background { ...FacetV2ImageFragment __typename }
61
+ accessory { ...FacetV2ImageFragment __typename }
62
+ custom { key value { ...FacetV2ImageFragment __typename } __typename }
63
+ __typename
64
+ }
65
+ events { click { name data __typename } __typename }
66
+ style {
67
+ spacing background_color
68
+ border { color width style __typename }
69
+ sizeClass dlsType __typename
70
+ }
71
+ layout {
72
+ omitFooter
73
+ gridSpecs {
74
+ Mobile { ...FacetV2LayoutGridFragment __typename }
75
+ Phablet { ...FacetV2LayoutGridFragment __typename }
76
+ Tablet { ...FacetV2LayoutGridFragment __typename }
77
+ Desktop { ...FacetV2LayoutGridFragment __typename }
78
+ WideScreen { ...FacetV2LayoutGridFragment __typename }
79
+ UltraWideScreen { ...FacetV2LayoutGridFragment __typename }
80
+ __typename
81
+ }
82
+ dlsPadding { top right bottom left __typename }
83
+ __typename
84
+ }
85
+ custom logging __typename
86
+ }
87
+
88
+ fragment FacetV2ImageFragment on FacetV2Image {
89
+ uri videoUri placeholder local style logging
90
+ events { click { name data __typename } __typename }
91
+ __typename
92
+ }
93
+
94
+ fragment FacetV2LayoutGridFragment on FacetV2LayoutGrid {
95
+ interRowSpacing interColumnSpacing minDimensionCount __typename
96
+ }
97
+
98
+ fragment FacetV2PageFragment on FacetV2Page {
99
+ next { name data __typename }
100
+ onLoad { name data __typename }
101
+ __typename
102
+ }`;
103
+
104
+ // ---------------------------------------------------------------------------
105
+ // HOME_PAGE_QUERY
106
+ // ---------------------------------------------------------------------------
107
+
108
+ export const HOME_PAGE_QUERY = `
109
+ query homePageFacetFeed($cursor: String, $filterQuery: String, $displayHeader: Boolean, $isDebug: Boolean, $cuisineFilterVerticalIds: String) {
110
+ homePageFacetFeed(
111
+ cursor: $cursor
112
+ filterQuery: $filterQuery
113
+ displayHeader: $displayHeader
114
+ isDebug: $isDebug
115
+ cuisineFilterVerticalIds: $cuisineFilterVerticalIds
116
+ ) {
117
+ ...FacetFeedV2ResultFragment
118
+ __typename
119
+ }
120
+ }
121
+
122
+ fragment FacetFeedV2ResultFragment on FacetFeedV2Result {
123
+ body {
124
+ id
125
+ header { ...FacetV2Fragment __typename }
126
+ body { ...FacetV2Fragment __typename }
127
+ layout { omitFooter __typename }
128
+ __typename
129
+ }
130
+ page { ...FacetV2PageFragment __typename }
131
+ header { ...FacetV2Fragment __typename }
132
+ footer { ...FacetV2Fragment __typename }
133
+ custom logging __typename
134
+ }
135
+
136
+ fragment FacetV2Fragment on FacetV2 {
137
+ ...FacetV2BaseFragment
138
+ childrenMap { ...FacetV2BaseFragment __typename }
139
+ __typename
140
+ }
141
+
142
+ fragment FacetV2BaseFragment on FacetV2 {
143
+ id childrenCount
144
+ component { id category __typename }
145
+ name
146
+ text {
147
+ title
148
+ titleTextAttributes { textStyle textColor __typename }
149
+ subtitle
150
+ subtitleTextAttributes { textStyle textColor __typename }
151
+ accessory
152
+ accessoryTextAttributes { textStyle textColor __typename }
153
+ description
154
+ descriptionTextAttributes { textStyle textColor __typename }
155
+ custom { key value __typename }
156
+ __typename
157
+ }
158
+ images {
159
+ main { ...FacetV2ImageFragment __typename }
160
+ icon { ...FacetV2ImageFragment __typename }
161
+ background { ...FacetV2ImageFragment __typename }
162
+ accessory { ...FacetV2ImageFragment __typename }
163
+ custom { key value { ...FacetV2ImageFragment __typename } __typename }
164
+ __typename
165
+ }
166
+ events { click { name data __typename } __typename }
167
+ style {
168
+ spacing background_color
169
+ border { color width style __typename }
170
+ sizeClass dlsType __typename
171
+ }
172
+ layout {
173
+ omitFooter
174
+ gridSpecs {
175
+ Mobile { ...FacetV2LayoutGridFragment __typename }
176
+ Phablet { ...FacetV2LayoutGridFragment __typename }
177
+ Tablet { ...FacetV2LayoutGridFragment __typename }
178
+ Desktop { ...FacetV2LayoutGridFragment __typename }
179
+ WideScreen { ...FacetV2LayoutGridFragment __typename }
180
+ UltraWideScreen { ...FacetV2LayoutGridFragment __typename }
181
+ __typename
182
+ }
183
+ dlsPadding { top right bottom left __typename }
184
+ __typename
185
+ }
186
+ custom logging __typename
187
+ }
188
+
189
+ fragment FacetV2ImageFragment on FacetV2Image {
190
+ uri videoUri placeholder local style logging
191
+ events { click { name data __typename } __typename }
192
+ __typename
193
+ }
194
+
195
+ fragment FacetV2LayoutGridFragment on FacetV2LayoutGrid {
196
+ interRowSpacing interColumnSpacing minDimensionCount __typename
197
+ }
198
+
199
+ fragment FacetV2PageFragment on FacetV2Page {
200
+ next { name data __typename }
201
+ onLoad { name data __typename }
202
+ __typename
203
+ }`;
@@ -6,6 +6,7 @@
6
6
  import { existsSync, readFileSync, writeFileSync, mkdirSync, unlinkSync } from 'node:fs';
7
7
  import { join } from 'node:path';
8
8
  import { getDataDir } from '../util/platform.js';
9
+ import { ConfigError } from '../util/errors.js';
9
10
  import type { SessionRecording, ExtractedCredential } from '../tools/browser/network-recording-types.js';
10
11
 
11
12
  export interface DoorDashSession {
@@ -50,11 +51,11 @@ export function clearSession(): void {
50
51
  */
51
52
  export function importFromRecording(recordingPath: string): DoorDashSession {
52
53
  if (!existsSync(recordingPath)) {
53
- throw new Error(`Recording not found: ${recordingPath}`);
54
+ throw new ConfigError(`Recording not found: ${recordingPath}`);
54
55
  }
55
56
  const recording = JSON.parse(readFileSync(recordingPath, 'utf-8')) as SessionRecording;
56
57
  if (!recording.cookies?.length) {
57
- throw new Error('Recording contains no cookies');
58
+ throw new ConfigError('Recording contains no cookies');
58
59
  }
59
60
  const session: DoorDashSession = {
60
61
  cookies: recording.cookies,
@@ -0,0 +1,246 @@
1
+ /**
2
+ * GraphQL queries for DoorDash store pages, item details, and retail store feeds.
3
+ * Each query is fully self-contained with all required fragment definitions.
4
+ */
5
+
6
+ // ---------------------------------------------------------------------------
7
+ // STORE_PAGE_QUERY
8
+ // ---------------------------------------------------------------------------
9
+
10
+ export const STORE_PAGE_QUERY = `
11
+ query storepageFeed($storeId: ID!, $menuId: ID, $isMerchantPreview: Boolean, $fulfillmentType: FulfillmentType, $cursor: String, $menuSurfaceArea: MenuSurfaceArea, $scheduledTime: String, $scheduledMinTimeUtc: String, $scheduledMaxTimeUtc: String, $entryPoint: StoreEntryPoint, $DMGroups: [DMGroup]) {
12
+ storepageFeed(storeId: $storeId, menuId: $menuId, isMerchantPreview: $isMerchantPreview, fulfillmentType: $fulfillmentType, cursor: $cursor, menuSurfaceArea: $menuSurfaceArea, scheduledTime: $scheduledTime, scheduledMinTimeUtc: $scheduledMinTimeUtc, scheduledMaxTimeUtc: $scheduledMaxTimeUtc, entryPoint: $entryPoint, DMGroups: $DMGroups) {
13
+ storeHeader {
14
+ id name description offersDelivery offersPickup isDashpassPartner
15
+ coverImgUrl currency
16
+ address { lat lng city state street displayAddress __typename }
17
+ business { id name __typename }
18
+ ratings { numRatings numRatingsDisplayString averageRating isNewlyAdded __typename }
19
+ deliveryFeeLayout { title subtitle isSurging displayDeliveryFee __typename }
20
+ deliveryTimeLayout { title subtitle __typename }
21
+ status {
22
+ delivery { isAvailable minutes displayUnavailableStatus unavailableReason __typename }
23
+ pickup { isAvailable minutes displayUnavailableStatus unavailableReason __typename }
24
+ __typename
25
+ }
26
+ asapMinutes asapPickupMinutes priceRange priceRangeDisplayString
27
+ __typename
28
+ }
29
+ menuBook {
30
+ id name displayOpenHours
31
+ menuCategories { id name numItems next { anchor cursor __typename } __typename }
32
+ menuList { id name displayOpenHours __typename }
33
+ __typename
34
+ }
35
+ itemLists {
36
+ id name description
37
+ items {
38
+ id name description displayPrice displayStrikethroughPrice imageUrl
39
+ dynamicLabelDisplayString calloutDisplayString ratingDisplayString
40
+ storeId
41
+ quickAddContext {
42
+ isEligible
43
+ price { currency decimalPlaces displayString sign symbol unitAmount __typename }
44
+ nestedOptions specialInstructions defaultQuantity __typename
45
+ }
46
+ dietaryTagsList { type abbreviatedTagDisplayString fullTagDisplayString __typename }
47
+ badges { title titleColor backgroundColor badge { ...BadgeFragment __typename } __typename }
48
+ __typename
49
+ }
50
+ __typename
51
+ }
52
+ carousels {
53
+ id type name description
54
+ items {
55
+ id name description displayPrice displayStrikethroughPrice imgUrl
56
+ dynamicLabelDisplayString calloutDisplayString ratingDisplayString
57
+ nextCursor orderItemId
58
+ __typename
59
+ }
60
+ __typename
61
+ }
62
+ __typename
63
+ }
64
+ }
65
+
66
+ fragment BadgeFragment on Badge {
67
+ isDashpass type text backgroundColor styleType dlsTagSize dlsTextStyle
68
+ dlsTagStyle dlsTagType placement leadingIcon leadingIconSize trailingIcon
69
+ trailingIconSize endTime dlsTextColor
70
+ brandedDecorator { prefixText postfixText postfixTextLeadingIcon __typename }
71
+ trailingText { copy dlsTextStyle dlsTextColor __typename }
72
+ onClick __typename
73
+ }`;
74
+
75
+ // ---------------------------------------------------------------------------
76
+ // ITEM_PAGE_QUERY
77
+ // ---------------------------------------------------------------------------
78
+
79
+ export const ITEM_PAGE_QUERY = `
80
+ query itemPage($storeId: ID!, $itemId: ID!, $consumerId: ID, $isMerchantPreview: Boolean, $isNested: Boolean!, $fulfillmentType: FulfillmentType, $cursorContext: ItemPageCursorContextInput, $scheduledMinTimeUtc: String, $scheduledMaxTimeUtc: String) {
81
+ itemPage(storeId: $storeId, itemId: $itemId, consumerId: $consumerId, isMerchantPreview: $isMerchantPreview, fulfillmentType: $fulfillmentType, cursorContext: $cursorContext, scheduledMinTimeUtc: $scheduledMinTimeUtc, scheduledMaxTimeUtc: $scheduledMaxTimeUtc) {
82
+ itemHeader @skip(if: $isNested) {
83
+ id name imgUrl description displayString unitAmount currency decimalPlaces
84
+ specialInstructionsMaxLength calloutDisplayString quantityLimit
85
+ caloricInfoDisplayString menuId
86
+ dietaryTagsList { type abbreviatedTagDisplayString fullTagDisplayString __typename }
87
+ __typename
88
+ }
89
+ optionLists {
90
+ type id name subtitle selectionNode minNumOptions maxNumOptions
91
+ minAggregateOptionsQuantity maxAggregateOptionsQuantity
92
+ minOptionChoiceQuantity maxOptionChoiceQuantity numFreeOptions isOptional
93
+ options {
94
+ id name unitAmount currency displayString decimalPlaces nextCursor
95
+ caloricInfoDisplayString chargeAbove defaultQuantity imgUrl sortOrder
96
+ minOptionChoiceQuantity maxOptionChoiceQuantity
97
+ dietaryTagsList { type abbreviatedTagDisplayString fullTagDisplayString __typename }
98
+ nestedExtrasList {
99
+ type id name subtitle selectionNode minNumOptions maxNumOptions
100
+ minOptionChoiceQuantity maxOptionChoiceQuantity numFreeOptions isOptional
101
+ options {
102
+ id name unitAmount currency displayString decimalPlaces nextCursor
103
+ caloricInfoDisplayString imgUrl __typename
104
+ }
105
+ __typename
106
+ }
107
+ __typename
108
+ }
109
+ __typename
110
+ }
111
+ itemPreferences {
112
+ id title
113
+ specialInstructions { title characterMaxLength isEnabled placeholderText __typename }
114
+ substitutionPreferences {
115
+ title
116
+ substitutionPreferencesList { id displayString isDefault value __typename }
117
+ __typename
118
+ }
119
+ __typename
120
+ }
121
+ itemFooter { id data { title placementsFooter __typename } __typename }
122
+ __typename
123
+ }
124
+ }`;
125
+
126
+ // ---------------------------------------------------------------------------
127
+ // RETAIL_STORE_FEED_QUERY (for convenience/pharmacy stores like CVS, Duane Reade)
128
+ // ---------------------------------------------------------------------------
129
+
130
+ export const RETAIL_STORE_FEED_QUERY = `
131
+ query storeFeed($storeId: ID!, $attrSrc: String, $cursor: String, $enableDebug: Boolean) {
132
+ retailStorePageFeed(
133
+ storeId: $storeId
134
+ attrSrc: $attrSrc
135
+ cursor: $cursor
136
+ enableDebug: $enableDebug
137
+ ) {
138
+ id
139
+ storeDetails {
140
+ id urlSlug name isActive coverSquareImgUrl
141
+ storeHeader {
142
+ ...StoreHeaderFragment
143
+ __typename
144
+ }
145
+ __typename
146
+ }
147
+ l1Categories {
148
+ ...RetailL1CategoryFragment
149
+ __typename
150
+ }
151
+ l1NavCategories {
152
+ ...RetailL1NavCategoryFragment
153
+ __typename
154
+ }
155
+ collections {
156
+ ...RetailCollectionFragment
157
+ __typename
158
+ }
159
+ page {
160
+ next { name data __typename }
161
+ onLoad { name data __typename }
162
+ __typename
163
+ }
164
+ __typename
165
+ }
166
+ }
167
+
168
+ fragment StoreHeaderFragment on StoreHeader {
169
+ id name description offersDelivery isConvenience isDashpassPartner
170
+ coverImgUrl
171
+ ratings { numRatings numRatingsDisplayString averageRating isNewlyAdded __typename }
172
+ deliveryFeeLayout { title subtitle isSurging displayDeliveryFee __typename }
173
+ distanceFromConsumer { value label __typename }
174
+ priceRangeDisplayString priceRange
175
+ address { displayAddress street city __typename }
176
+ status {
177
+ delivery { isAvailable minutes displayUnavailableStatus unavailableReason etaDisplayString __typename }
178
+ __typename
179
+ }
180
+ __typename
181
+ }
182
+
183
+ fragment RetailL1CategoryFragment on RetailL1Category {
184
+ id categoryId urlSlug name storeId imageUrl __typename
185
+ }
186
+
187
+ fragment RetailCollectionFragment on RetailCollection {
188
+ id collectionId urlSlug name storeId
189
+ products {
190
+ ...BaseRetailItemDetailsFragment
191
+ __typename
192
+ }
193
+ pageInfo { cursor hasNextPage __typename }
194
+ __typename
195
+ }
196
+
197
+ fragment BaseRetailItemDetailsFragment on RetailItem {
198
+ id urlSlug name description storeId menuId imageUrl
199
+ price { ...MonetaryFieldsFragment __typename }
200
+ quickAddContext {
201
+ isEligible
202
+ price { currency decimalPlaces displayString unitAmount __typename }
203
+ nestedOptions specialInstructions defaultQuantity __typename
204
+ }
205
+ badges {
206
+ text type placement __typename
207
+ }
208
+ __typename
209
+ }
210
+
211
+ fragment MonetaryFieldsFragment on AmountMonetaryFields {
212
+ currency displayString decimalPlaces unitAmount sign symbol __typename
213
+ }
214
+
215
+ fragment RetailL1NavCategoryFragment on RetailL1NavCategory {
216
+ id name urlSlug imageUrl storeId categoryId navigationType
217
+ navigationData {
218
+ collectionPageRequest {
219
+ storeId collectionId collectionType showExploreItems attrSrc showCategories page supportsPagination __typename
220
+ }
221
+ collectionsRequest {
222
+ surface orderCartId itemId attrSrc page storeId __typename
223
+ }
224
+ __typename
225
+ }
226
+ __typename
227
+ }`;
228
+
229
+ // ---------------------------------------------------------------------------
230
+ // RETAIL_SEARCH_QUERY (search within a convenience/pharmacy store)
231
+ // ---------------------------------------------------------------------------
232
+
233
+ export const RETAIL_SEARCH_QUERY = `
234
+ query convenienceSearchQuery($input: RetailSearchInput!) {
235
+ retailSearch(input: $input) {
236
+ query
237
+ searchSummary {
238
+ searchedForKeyword suggestedSearchKeyword totalCount __typename
239
+ }
240
+ legoRetailItems {
241
+ id custom __typename
242
+ }
243
+ pageInfo { hasNextPage cursor __typename }
244
+ __typename
245
+ }
246
+ }`;