@vellumai/assistant 0.4.43 → 0.4.45
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.prettierignore +4 -0
- package/ARCHITECTURE.md +46 -44
- package/README.md +15 -16
- package/bun.lock +10 -35
- package/docs/architecture/integrations.md +102 -215
- package/docs/architecture/keychain-broker.md +1 -1
- package/docs/architecture/memory.md +2 -2
- package/docs/architecture/scheduling.md +1 -1
- package/docs/architecture/security.md +11 -11
- package/docs/error-handling.md +1 -1
- package/docs/trusted-contact-access.md +3 -3
- package/drizzle/meta/0000_snapshot.json +34 -100
- package/drizzle/meta/_journal.json +1 -1
- package/drizzle.config.ts +4 -4
- package/package.json +3 -2
- package/scripts/capture-x-graphql.ts +237 -141
- package/scripts/generate-bundled-tool-registry.ts +223 -0
- package/src/__tests__/access-request-decision.test.ts +0 -1
- package/src/__tests__/actor-token-service.test.ts +23 -24
- package/src/__tests__/agent-loop.test.ts +0 -131
- package/src/__tests__/always-loaded-tools-guard.test.ts +71 -0
- package/src/__tests__/amazon-cdp-integration.test.ts +11 -9
- package/src/__tests__/approval-primitive.test.ts +0 -1
- package/src/__tests__/approval-routes-http.test.ts +11 -3
- package/src/__tests__/asset-materialize-tool.test.ts +0 -1
- package/src/__tests__/asset-search-tool.test.ts +0 -1
- package/src/__tests__/assistant-attachment-directive.test.ts +1 -1
- package/src/__tests__/assistant-events-sse-hardening.test.ts +0 -1
- package/src/__tests__/assistant-feature-flag-guardrails.test.ts +0 -2
- package/src/__tests__/assistant-feature-flags-integration.test.ts +70 -18
- package/src/__tests__/assistant-id-boundary-guard.test.ts +6 -6
- package/src/__tests__/attachments-store.test.ts +0 -1
- package/src/__tests__/avatar-e2e.test.ts +74 -115
- package/src/__tests__/avatar-router.test.ts +25 -62
- package/src/__tests__/browser-manager.test.ts +24 -0
- package/src/__tests__/browser-skill-baseline-tool-payload.test.ts +4 -3
- package/src/__tests__/browser-skill-endstate.test.ts +8 -11
- package/src/__tests__/btw-routes.test.ts +326 -0
- package/src/__tests__/bundled-asset.test.ts +1 -1
- package/src/__tests__/bundled-skill-retrieval-guard.test.ts +23 -9
- package/src/__tests__/call-controller.test.ts +0 -1
- package/src/__tests__/call-conversation-messages.test.ts +0 -1
- package/src/__tests__/call-domain.test.ts +0 -1
- package/src/__tests__/call-pointer-messages.test.ts +0 -1
- package/src/__tests__/call-recovery.test.ts +0 -1
- package/src/__tests__/call-routes-http.test.ts +0 -1
- package/src/__tests__/call-store.test.ts +0 -1
- package/src/__tests__/canonical-guardian-store.test.ts +0 -1
- package/src/__tests__/channel-approval-routes.test.ts +1 -1
- package/src/__tests__/channel-approvals.test.ts +1 -1
- package/src/__tests__/channel-delivery-store.test.ts +0 -1
- package/src/__tests__/channel-guardian.test.ts +5 -7
- package/src/__tests__/channel-retry-sweep.test.ts +0 -1
- package/src/__tests__/checker.test.ts +32 -36
- package/src/__tests__/compaction.benchmark.test.ts +16 -14
- package/src/__tests__/computer-use-session-lifecycle.test.ts +10 -11
- package/src/__tests__/computer-use-session-working-dir.test.ts +2 -6
- package/src/__tests__/computer-use-skill-lifecycle-cleanup.test.ts +2 -5
- package/src/__tests__/computer-use-tools.test.ts +35 -31
- package/src/__tests__/config-schema.test.ts +11 -15
- package/src/__tests__/config-watcher.test.ts +0 -1
- package/src/__tests__/confirmation-request-guardian-bridge.test.ts +0 -1
- package/src/__tests__/conflict-store.test.ts +0 -1
- package/src/__tests__/connection-policy.test.ts +4 -7
- package/src/__tests__/contacts-tools.test.ts +0 -1
- package/src/__tests__/context-memory-e2e.test.ts +2 -4
- package/src/__tests__/context-overflow-reducer.test.ts +2 -4
- package/src/__tests__/context-window-manager.test.ts +147 -60
- package/src/__tests__/contradiction-checker.test.ts +0 -1
- package/src/__tests__/conversation-attention-store.test.ts +0 -1
- package/src/__tests__/conversation-attention-telegram.test.ts +1 -1
- package/src/__tests__/conversation-pairing.test.ts +2 -2
- package/src/__tests__/conversation-routes-guardian-reply.test.ts +31 -7
- package/src/__tests__/conversation-routes-slash-commands.test.ts +381 -0
- package/src/__tests__/conversation-store.test.ts +0 -1
- package/src/__tests__/conversation-unread-route.test.ts +1 -2
- package/src/__tests__/credential-security-invariants.test.ts +8 -8
- package/src/__tests__/cross-provider-web-search.test.ts +353 -0
- package/src/__tests__/daemon-assistant-events.test.ts +6 -7
- package/src/__tests__/db-schedule-syntax-migration.test.ts +15 -3
- package/src/__tests__/delete-managed-skill-tool.test.ts +5 -9
- package/src/__tests__/deterministic-verification-control-plane.test.ts +0 -1
- package/src/__tests__/diagnostics-export.test.ts +189 -0
- package/src/__tests__/dynamic-skill-workflow-prompt.test.ts +0 -1
- package/src/__tests__/emit-signal-routing-intent.test.ts +3 -3
- package/src/__tests__/entity-extractor.test.ts +0 -1
- package/src/__tests__/entity-search.test.ts +0 -1
- package/src/__tests__/ephemeral-permissions.test.ts +2 -4
- package/src/__tests__/error-handler-friendly-messages.test.ts +46 -0
- package/src/__tests__/file-read-tool.test.ts +86 -0
- package/src/__tests__/followup-tools.test.ts +0 -1
- package/src/__tests__/frontmatter.test.ts +77 -34
- package/src/__tests__/gateway-only-enforcement.test.ts +0 -1
- package/src/__tests__/gateway-only-guard.test.ts +1 -1
- package/src/__tests__/guardian-action-conversation-turn.test.ts +0 -1
- package/src/__tests__/guardian-action-followup-executor.test.ts +0 -1
- package/src/__tests__/guardian-action-followup-store.test.ts +0 -1
- package/src/__tests__/guardian-action-grant-mint-consume.test.ts +0 -1
- package/src/__tests__/guardian-action-late-reply.test.ts +0 -1
- package/src/__tests__/guardian-action-store.test.ts +0 -1
- package/src/__tests__/guardian-action-sweep.test.ts +0 -1
- package/src/__tests__/guardian-decision-primitive-canonical.test.ts +0 -1
- package/src/__tests__/guardian-dispatch.test.ts +1 -2
- package/src/__tests__/guardian-grant-minting.test.ts +1 -1
- package/src/__tests__/guardian-outbound-http.test.ts +0 -1
- package/src/__tests__/guardian-principal-id-roundtrip.test.ts +0 -1
- package/src/__tests__/guardian-routing-invariants.test.ts +1 -1
- package/src/__tests__/guardian-routing-state.test.ts +0 -1
- package/src/__tests__/guardian-verification-voice-binding.test.ts +0 -1
- package/src/__tests__/guardian-verify-setup-skill-regression.test.ts +3 -5
- package/src/__tests__/handlers-user-message-approval-consumption.test.ts +28 -426
- package/src/__tests__/host-bash-proxy.test.ts +335 -0
- package/src/__tests__/host-file-proxy.test.ts +374 -0
- package/src/__tests__/host-shell-tool.test.ts +147 -1
- package/src/__tests__/http-user-message-parity.test.ts +361 -0
- package/src/__tests__/inbound-invite-redemption.test.ts +0 -1
- package/src/__tests__/integration-status.test.ts +3 -8
- package/src/__tests__/intent-routing.test.ts +7 -46
- package/src/__tests__/invite-redemption-service.test.ts +0 -1
- package/src/__tests__/invite-routes-http.test.ts +0 -1
- package/src/__tests__/llm-usage-store.test.ts +0 -1
- package/src/__tests__/managed-avatar-client.test.ts +101 -55
- package/src/__tests__/managed-skill-lifecycle.test.ts +9 -18
- package/src/__tests__/managed-store.test.ts +94 -21
- package/src/__tests__/media-reuse-story.e2e.test.ts +0 -1
- package/src/__tests__/memory-context-benchmark.benchmark.test.ts +2 -4
- package/src/__tests__/memory-lifecycle-e2e.test.ts +0 -1
- package/src/__tests__/memory-recall-quality.test.ts +0 -1
- package/src/__tests__/memory-regressions.experimental.test.ts +0 -1
- package/src/__tests__/memory-regressions.test.ts +0 -1
- package/src/__tests__/memory-retrieval.benchmark.test.ts +0 -1
- package/src/__tests__/memory-upsert-concurrency.test.ts +0 -1
- package/src/__tests__/messaging-send-tool.test.ts +35 -0
- package/src/__tests__/messaging-skill-split.test.ts +138 -0
- package/src/__tests__/migration-cross-version-compatibility.test.ts +0 -1
- package/src/__tests__/migration-export-http.test.ts +2 -3
- package/src/__tests__/migration-import-commit-http.test.ts +1 -2
- package/src/__tests__/migration-import-preflight-http.test.ts +1 -2
- package/src/__tests__/migration-validate-http.test.ts +1 -2
- package/src/__tests__/native-web-search.test.ts +475 -0
- package/src/__tests__/navigate-settings-tab.test.ts +84 -0
- package/src/__tests__/non-member-access-request.test.ts +0 -1
- package/src/__tests__/notification-broadcaster.test.ts +15 -15
- package/src/__tests__/notification-decision-strategy.test.ts +6 -6
- package/src/__tests__/notification-deep-link.test.ts +7 -7
- package/src/__tests__/notification-guardian-path.test.ts +2 -3
- package/src/__tests__/notification-telegram-adapter.test.ts +1 -1
- package/src/__tests__/notification-thread-candidates.test.ts +4 -4
- package/src/__tests__/onboarding-starter-tasks.test.ts +0 -1
- package/src/__tests__/onboarding-template-contract.test.ts +0 -10
- package/src/__tests__/playbook-execution.test.ts +0 -1
- package/src/__tests__/playbook-tools.test.ts +0 -1
- package/src/__tests__/profile-compiler.test.ts +0 -1
- package/src/__tests__/provider-fail-open-selection.test.ts +12 -2
- package/src/__tests__/provider-managed-proxy-integration.test.ts +25 -0
- package/src/__tests__/qdrant-collection-migration.test.ts +223 -0
- package/src/__tests__/recording-handler.test.ts +30 -94
- package/src/__tests__/registry.test.ts +28 -35
- package/src/__tests__/relay-server.test.ts +0 -1
- package/src/__tests__/ride-shotgun-handler.test.ts +4 -20
- package/src/__tests__/runtime-attachment-metadata.test.ts +0 -1
- package/src/__tests__/runtime-events-sse-parity.test.ts +3 -4
- package/src/__tests__/runtime-events-sse.test.ts +0 -1
- package/src/__tests__/sandbox-diagnostics.test.ts +0 -1
- package/src/__tests__/scaffold-managed-skill-tool.test.ts +30 -28
- package/src/__tests__/schedule-store.test.ts +441 -1
- package/src/__tests__/schedule-tools.test.ts +468 -7
- package/src/__tests__/scheduler-recurrence.test.ts +196 -23
- package/src/__tests__/scoped-approval-grants.test.ts +0 -1
- package/src/__tests__/scoped-grant-security-matrix.test.ts +0 -1
- package/src/__tests__/secret-prompt-log-hygiene.test.ts +6 -3
- package/src/__tests__/secret-response-routing.test.ts +4 -1
- package/src/__tests__/send-endpoint-busy.test.ts +14 -5
- package/src/__tests__/send-notification-tool.test.ts +0 -7
- package/src/__tests__/sequence-store.test.ts +0 -1
- package/src/__tests__/server-history-render.test.ts +1 -2
- package/src/__tests__/session-abort-tool-results.test.ts +0 -1
- package/src/__tests__/session-agent-loop.test.ts +46 -6
- package/src/__tests__/session-confirmation-signals.test.ts +7 -46
- package/src/__tests__/session-conflict-gate.test.ts +2 -6
- package/src/__tests__/session-error.test.ts +5 -14
- package/src/__tests__/session-init.benchmark.test.ts +3 -5
- package/src/__tests__/session-load-history-repair.test.ts +0 -1
- package/src/__tests__/session-media-retry.test.ts +12 -74
- package/src/__tests__/session-pre-run-repair.test.ts +0 -1
- package/src/__tests__/session-profile-injection.test.ts +2 -6
- package/src/__tests__/session-provider-retry-repair.test.ts +2 -6
- package/src/__tests__/session-queue.test.ts +94 -139
- package/src/__tests__/session-skill-tools.test.ts +115 -115
- package/src/__tests__/session-slash-known.test.ts +0 -1
- package/src/__tests__/session-slash-queue.test.ts +0 -1
- package/src/__tests__/session-slash-unknown.test.ts +0 -1
- package/src/__tests__/session-surfaces-task-progress.test.ts +34 -0
- package/src/__tests__/session-usage.test.ts +0 -1
- package/src/__tests__/session-workspace-cache-state.test.ts +2 -6
- package/src/__tests__/session-workspace-injection.test.ts +2 -6
- package/src/__tests__/session-workspace-tool-tracking.test.ts +2 -6
- package/src/__tests__/skill-feature-flags-integration.test.ts +180 -184
- package/src/__tests__/skill-feature-flags.test.ts +125 -18
- package/src/__tests__/skill-load-feature-flag.test.ts +1 -2
- package/src/__tests__/skill-load-tool.test.ts +194 -2
- package/src/__tests__/skill-projection-feature-flag.test.ts +27 -16
- package/src/__tests__/skill-projection.benchmark.test.ts +15 -14
- package/src/__tests__/skills.test.ts +14 -53
- package/src/__tests__/slack-channel-config.test.ts +0 -1
- package/src/__tests__/slack-inbound-verification.test.ts +0 -1
- package/src/__tests__/slack-skill.test.ts +1 -1
- package/src/__tests__/starter-task-flow.test.ts +9 -19
- package/src/__tests__/subagent-tools.test.ts +2 -2
- package/src/__tests__/system-prompt.test.ts +7 -7
- package/src/__tests__/task-compiler.test.ts +0 -1
- package/src/__tests__/task-management-tools.test.ts +0 -1
- package/src/__tests__/task-memory-cleanup.test.ts +0 -1
- package/src/__tests__/task-runner.test.ts +0 -1
- package/src/__tests__/task-scheduler.test.ts +0 -1
- package/src/__tests__/terminal-tools.test.ts +0 -1
- package/src/__tests__/test-support/computer-use-skill-harness.ts +2 -4
- package/src/__tests__/thread-seed-composer.test.ts +5 -5
- package/src/__tests__/tool-approval-handler.test.ts +0 -1
- package/src/__tests__/tool-execution-abort-cleanup.test.ts +0 -1
- package/src/__tests__/tool-execution-pipeline.benchmark.test.ts +0 -1
- package/src/__tests__/tool-executor.test.ts +8 -86
- package/src/__tests__/tool-grant-request-escalation.test.ts +0 -1
- package/src/__tests__/tool-notification-listener.test.ts +1 -1
- package/src/__tests__/tool-preview-lifecycle.test.ts +416 -0
- package/src/__tests__/trust-store.test.ts +84 -8
- package/src/__tests__/trusted-contact-approval-notifier.test.ts +0 -1
- package/src/__tests__/trusted-contact-inline-approval-integration.test.ts +0 -1
- package/src/__tests__/trusted-contact-lifecycle-notifications.test.ts +0 -1
- package/src/__tests__/trusted-contact-multichannel.test.ts +0 -1
- package/src/__tests__/trusted-contact-verification.test.ts +0 -1
- package/src/__tests__/twilio-provider.test.ts +0 -1
- package/src/__tests__/twilio-routes.test.ts +0 -1
- package/src/__tests__/{request-file-tool.test.ts → ui-file-upload-surface.test.ts} +11 -72
- package/src/__tests__/update-bulletin.test.ts +0 -1
- package/src/__tests__/usage-cache-backfill-migration.test.ts +0 -1
- package/src/__tests__/usage-routes.test.ts +0 -1
- package/src/__tests__/verification-control-plane-policy.test.ts +4 -4
- package/src/__tests__/voice-invite-redemption.test.ts +0 -1
- package/src/__tests__/voice-scoped-grant-consumer.test.ts +0 -1
- package/src/__tests__/voice-session-bridge.test.ts +9 -1
- package/src/__tests__/web-fetch.test.ts +57 -0
- package/src/__tests__/workspace-git-service.test.ts +5 -14
- package/src/__tests__/workspace-policy.test.ts +0 -1
- package/src/agent/loop.ts +22 -34
- package/src/bundler/bundle-signer.ts +4 -4
- package/src/calls/call-controller.ts +1 -1
- package/src/calls/relay-server.ts +1 -1
- package/src/calls/twilio-rest.ts +1 -1
- package/src/calls/voice-session-bridge.ts +3 -1
- package/src/cli/__tests__/notifications.test.ts +3 -4
- package/src/cli/commands/map.ts +2 -6
- package/src/cli/commands/mcp.ts +73 -15
- package/src/cli/commands/notifications.ts +4 -4
- package/src/cli/commands/sessions.ts +9 -1
- package/src/cli/commands/skills.ts +6 -10
- package/src/cli/http-client.ts +2 -3
- package/src/cli/main-screen.tsx +10 -10
- package/src/cli/program.ts +0 -4
- package/src/cli/reference.ts +0 -2
- package/src/cli.ts +15 -9
- package/src/config/__tests__/bundled-tool-registry-guard.test.ts +120 -0
- package/src/config/bundled-skills/_shared/CLI_RETRIEVAL_PATTERN.md +11 -0
- package/src/config/bundled-skills/app-builder/SKILL.md +6 -7
- package/src/config/bundled-skills/app-builder/TOOLS.json +0 -4
- package/src/config/bundled-skills/browser/SKILL.md +6 -1
- package/src/config/bundled-skills/chatgpt-import/SKILL.md +5 -1
- package/src/config/bundled-skills/claude-code/SKILL.md +5 -1
- package/src/config/bundled-skills/computer-use/SKILL.md +6 -1
- package/src/config/bundled-skills/computer-use/TOOLS.json +6 -69
- package/src/config/bundled-skills/computer-use/tools/computer-use-click.ts +10 -1
- package/src/config/bundled-skills/contacts/SKILL.md +10 -1
- package/src/config/bundled-skills/contacts/TOOLS.json +35 -0
- package/src/config/bundled-skills/{messaging → contacts}/tools/google-contacts.ts +9 -2
- package/src/config/bundled-skills/document/SKILL.md +4 -1
- package/src/config/bundled-skills/doordash/SKILL.md +8 -2
- package/src/config/bundled-skills/doordash/__tests__/doordash-session.test.ts +1 -82
- package/src/config/bundled-skills/doordash/doordash-cli.ts +17 -28
- package/src/config/bundled-skills/doordash/lib/session.ts +21 -17
- package/src/config/bundled-skills/doordash/lib/shared/platform.ts +4 -1
- package/src/config/bundled-skills/followups/SKILL.md +4 -1
- package/src/config/bundled-skills/gmail/SKILL.md +180 -0
- package/src/config/bundled-skills/gmail/TOOLS.json +506 -0
- package/src/config/bundled-skills/gmail/tools/gmail-archive.ts +149 -0
- package/src/config/bundled-skills/gmail/tools/gmail-attachments.ts +110 -0
- package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-draft.ts +1 -1
- package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-filters.ts +1 -1
- package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-follow-up.ts +1 -1
- package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-forward.ts +1 -1
- package/src/config/bundled-skills/gmail/tools/gmail-label.ts +50 -0
- package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-outreach-scan.ts +8 -90
- package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-send-draft.ts +1 -1
- package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-sender-digest.ts +2 -2
- package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-trash.ts +1 -1
- package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-unsubscribe.ts +1 -1
- package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-vacation.ts +1 -1
- package/src/config/bundled-skills/gmail/tools/shared.ts +47 -0
- package/src/config/bundled-skills/google-calendar/SKILL.md +5 -1
- package/src/config/bundled-skills/image-studio/SKILL.md +5 -1
- package/src/config/bundled-skills/knowledge-graph/SKILL.md +4 -1
- package/src/config/bundled-skills/media-processing/SKILL.md +7 -13
- package/src/config/bundled-skills/media-processing/TOOLS.json +0 -22
- package/src/config/bundled-skills/media-processing/tools/generate-clip.ts +12 -1
- package/src/config/bundled-skills/messaging/SKILL.md +23 -139
- package/src/config/bundled-skills/messaging/TOOLS.json +33 -1215
- package/src/config/bundled-skills/messaging/tools/gmail-mime-helpers.ts +42 -0
- package/src/config/bundled-skills/messaging/tools/messaging-send.ts +165 -2
- package/src/config/bundled-skills/messaging/tools/messaging-sender-digest.ts +1 -13
- package/src/config/bundled-skills/messaging/tools/shared.ts +81 -34
- package/src/config/bundled-skills/notifications/SKILL.md +5 -1
- package/src/config/bundled-skills/orchestration/SKILL.md +30 -0
- package/src/config/bundled-skills/orchestration/TOOLS.json +35 -0
- package/src/config/bundled-skills/{reminder/tools/reminder-cancel.ts → orchestration/tools/swarm-delegate.ts} +3 -3
- package/src/config/bundled-skills/phone-calls/SKILL.md +9 -1
- package/src/config/bundled-skills/playbooks/SKILL.md +4 -1
- package/src/config/bundled-skills/schedule/SKILL.md +70 -9
- package/src/config/bundled-skills/schedule/TOOLS.json +38 -6
- package/src/config/bundled-skills/screen-watch/SKILL.md +28 -0
- package/src/config/bundled-skills/screen-watch/TOOLS.json +35 -0
- package/src/config/bundled-skills/{reminder/tools/reminder-create.ts → screen-watch/tools/start-screen-watch.ts} +3 -3
- package/src/config/bundled-skills/sequences/SKILL.md +47 -0
- package/src/config/bundled-skills/sequences/TOOLS.json +340 -0
- package/src/config/bundled-skills/sequences/tools/sequence-update.ts +128 -0
- package/src/config/bundled-skills/sequences/tools/shared.ts +9 -0
- package/src/config/bundled-skills/settings/SKILL.md +12 -0
- package/src/config/bundled-skills/settings/TOOLS.json +112 -0
- package/src/config/bundled-skills/settings/tools/navigate-settings-tab.ts +43 -0
- package/src/config/bundled-skills/settings/tools/open-system-settings.ts +52 -0
- package/src/config/bundled-skills/{computer-use/tools/computer-use-right-click.ts → settings/tools/set-avatar.ts} +2 -6
- package/src/{tools/system/voice-config.ts → config/bundled-skills/settings/tools/voice-config-update.ts} +59 -96
- package/src/config/bundled-skills/skill-management/SKILL.md +18 -0
- package/src/config/bundled-skills/skill-management/TOOLS.json +90 -0
- package/src/config/bundled-skills/{computer-use/tools/computer-use-double-click.ts → skill-management/tools/delete-managed.ts} +2 -6
- package/src/config/bundled-skills/skill-management/tools/scaffold-managed.ts +12 -0
- package/src/config/bundled-skills/slack/SKILL.md +5 -1
- package/src/config/bundled-skills/subagent/SKILL.md +4 -1
- package/src/config/bundled-skills/tasks/SKILL.md +5 -2
- package/src/config/bundled-skills/transcribe/SKILL.md +4 -1
- package/src/config/bundled-skills/watcher/SKILL.md +4 -1
- package/src/config/bundled-tool-registry.ts +118 -107
- package/src/config/env.ts +5 -2
- package/src/config/feature-flag-registry.json +33 -9
- package/src/config/loader.ts +10 -2
- package/src/config/schema.ts +19 -16
- package/src/config/schemas/inference.ts +12 -22
- package/src/config/schemas/memory-storage.ts +19 -1
- package/src/config/schemas/platform.ts +0 -16
- package/src/config/skill-state.ts +11 -8
- package/src/config/skills.ts +83 -32
- package/src/context/token-estimator.ts +11 -0
- package/src/context/window-manager.ts +180 -151
- package/src/daemon/computer-use-session.ts +11 -43
- package/src/daemon/daemon-control.ts +4 -1
- package/src/daemon/handlers/config-channels.ts +5 -9
- package/src/daemon/handlers/config-ingress.ts +0 -4
- package/src/daemon/handlers/config-model.ts +7 -13
- package/src/daemon/handlers/config-telegram.ts +4 -8
- package/src/daemon/handlers/config-voice.ts +2 -5
- package/src/daemon/handlers/dictation.ts +2 -12
- package/src/daemon/handlers/identity.ts +0 -105
- package/src/daemon/handlers/recording.ts +3 -23
- package/src/daemon/handlers/session-history.ts +42 -10
- package/src/daemon/handlers/sessions.ts +53 -72
- package/src/daemon/handlers/shared.ts +7 -28
- package/src/daemon/handlers/skills.ts +31 -27
- package/src/daemon/host-bash-proxy.ts +148 -0
- package/src/daemon/host-file-proxy.ts +135 -0
- package/src/daemon/lifecycle.ts +53 -41
- package/src/daemon/mcp-reload-service.ts +123 -0
- package/src/daemon/message-protocol.ts +6 -0
- package/src/daemon/message-types/apps.ts +0 -25
- package/src/daemon/message-types/browser.ts +1 -1
- package/src/daemon/message-types/computer-use.ts +1 -4
- package/src/daemon/message-types/guardian-actions.ts +1 -1
- package/src/daemon/message-types/host-bash.ts +18 -0
- package/src/daemon/message-types/host-file.ts +44 -0
- package/src/daemon/message-types/integrations.ts +1 -73
- package/src/daemon/message-types/messages.ts +15 -0
- package/src/daemon/message-types/schedules.ts +11 -27
- package/src/daemon/message-types/sessions.ts +8 -2
- package/src/daemon/message-types/settings.ts +1 -1
- package/src/daemon/message-types/shared.ts +1 -1
- package/src/daemon/message-types/surfaces.ts +2 -0
- package/src/daemon/ride-shotgun-handler.ts +35 -43
- package/src/daemon/seed-files.ts +3 -27
- package/src/daemon/server.ts +45 -28
- package/src/daemon/session-agent-loop-handlers.ts +72 -9
- package/src/daemon/session-agent-loop.ts +97 -66
- package/src/daemon/session-attachments.ts +1 -1
- package/src/daemon/session-error.ts +17 -16
- package/src/daemon/session-lifecycle.ts +20 -1
- package/src/daemon/session-media-retry.ts +1 -15
- package/src/daemon/session-messaging.ts +14 -6
- package/src/daemon/session-process.ts +36 -7
- package/src/daemon/session-queue-manager.ts +62 -103
- package/src/daemon/session-runtime-assembly.ts +27 -7
- package/src/daemon/session-skill-tools.ts +12 -11
- package/src/daemon/session-slash.ts +7 -0
- package/src/daemon/session-surfaces.ts +192 -118
- package/src/daemon/session-tool-setup.ts +146 -6
- package/src/daemon/session.ts +75 -37
- package/src/errors.ts +0 -2
- package/src/export/formatter.ts +6 -0
- package/src/mcp/mcp-oauth-provider.ts +1 -3
- package/src/media/avatar-router.ts +20 -28
- package/src/media/avatar-types.ts +7 -14
- package/src/media/managed-avatar-client.ts +70 -34
- package/src/memory/app-store.ts +0 -18
- package/src/memory/conversation-title-service.ts +1 -2
- package/src/memory/db-init.ts +16 -0
- package/src/memory/embedding-backend.ts +129 -27
- package/src/memory/embedding-gemini.test.ts +256 -0
- package/src/memory/embedding-gemini.ts +47 -13
- package/src/memory/embedding-local.ts +14 -2
- package/src/memory/embedding-ollama.ts +15 -2
- package/src/memory/embedding-openai.ts +15 -2
- package/src/memory/embedding-types.test.ts +116 -0
- package/src/memory/embedding-types.ts +61 -0
- package/src/memory/fingerprint.ts +1 -1
- package/src/memory/indexer.ts +25 -1
- package/src/memory/job-handlers/embedding.test.ts +258 -0
- package/src/memory/job-handlers/embedding.ts +81 -1
- package/src/memory/job-handlers/index-maintenance.ts +35 -1
- package/src/memory/job-handlers/media-processing.ts +11 -1
- package/src/memory/job-utils.ts +21 -6
- package/src/memory/jobs-store.ts +5 -1
- package/src/memory/jobs-worker.ts +8 -0
- package/src/memory/message-content.ts +66 -0
- package/src/memory/migrations/100-core-tables.ts +1 -31
- package/src/memory/migrations/104-core-indexes.ts +0 -11
- package/src/memory/migrations/145-drop-accounts-table.ts +19 -0
- package/src/memory/migrations/146-schedule-oneshot-routing.ts +94 -0
- package/src/memory/migrations/147-migrate-reminders-to-schedules.ts +129 -0
- package/src/memory/migrations/148-drop-reminders-table.ts +18 -0
- package/src/memory/migrations/index.ts +4 -0
- package/src/memory/migrations/registry.ts +19 -0
- package/src/memory/qdrant-client.ts +158 -43
- package/src/memory/retriever.test.ts +0 -1
- package/src/memory/retriever.ts +12 -2
- package/src/memory/schema/infrastructure.ts +5 -37
- package/src/memory/search/formatting.ts +34 -9
- package/src/memory/search/semantic.ts +57 -2
- package/src/memory/search/types.ts +2 -1
- package/src/notifications/AGENTS.md +2 -2
- package/src/notifications/README.md +59 -58
- package/src/notifications/adapters/macos.ts +1 -1
- package/src/notifications/broadcaster.ts +5 -5
- package/src/notifications/copy-composer.ts +1 -1
- package/src/notifications/decision-engine.ts +2 -2
- package/src/notifications/destination-resolver.ts +2 -2
- package/src/notifications/emit-signal.ts +8 -8
- package/src/notifications/signal.ts +1 -1
- package/src/notifications/thread-seed-composer.ts +1 -1
- package/src/oauth/connect-orchestrator.ts +1 -1
- package/src/oauth/token-persistence.ts +1 -1
- package/src/permissions/checker.ts +12 -1
- package/src/permissions/defaults.ts +13 -17
- package/src/permissions/trust-store.ts +37 -0
- package/src/permissions/workspace-policy.ts +0 -1
- package/src/prompts/__tests__/build-cli-reference-section.test.ts +11 -0
- package/src/prompts/computer-use-prompt.ts +1 -1
- package/src/prompts/system-prompt.ts +33 -35
- package/src/prompts/templates/BOOTSTRAP.md +0 -3
- package/src/prompts/templates/SOUL.md +1 -2
- package/src/prompts/templates/UPDATES.md +16 -7
- package/src/providers/anthropic/client.ts +87 -33
- package/src/providers/gemini/client.ts +6 -0
- package/src/providers/managed-proxy/constants.ts +5 -0
- package/src/providers/openai/client.ts +15 -0
- package/src/providers/registry.ts +4 -6
- package/src/providers/types.ts +24 -2
- package/src/runtime/AGENTS.md +18 -0
- package/src/runtime/assistant-event-hub.ts +2 -3
- package/src/runtime/assistant-event.ts +4 -4
- package/src/runtime/auth/__tests__/context.test.ts +5 -5
- package/src/runtime/auth/__tests__/credential-service.test.ts +0 -1
- package/src/runtime/auth/__tests__/guard-tests.test.ts +3 -2
- package/src/runtime/auth/__tests__/{ipc-auth-context.test.ts → local-auth-context.test.ts} +21 -21
- package/src/runtime/auth/__tests__/route-policy.test.ts +2 -2
- package/src/runtime/auth/__tests__/scopes.test.ts +9 -8
- package/src/runtime/auth/__tests__/subject.test.ts +8 -8
- package/src/runtime/auth/__tests__/token-service.test.ts +0 -1
- package/src/runtime/auth/route-policy.ts +8 -8
- package/src/runtime/auth/scopes.ts +2 -1
- package/src/runtime/auth/subject.ts +4 -4
- package/src/runtime/auth/token-service.ts +1 -24
- package/src/runtime/auth/types.ts +3 -3
- package/src/runtime/guardian-action-followup-executor.ts +1 -1
- package/src/runtime/guardian-action-grant-minter.ts +1 -1
- package/src/runtime/guardian-action-service.ts +3 -3
- package/src/runtime/http-server.ts +15 -2
- package/src/runtime/http-types.ts +10 -0
- package/src/runtime/invite-service.ts +3 -3
- package/src/runtime/local-actor-identity.ts +17 -22
- package/src/runtime/middleware/error-handler.ts +14 -1
- package/src/runtime/pending-interactions.ts +21 -9
- package/src/runtime/routes/app-management-routes.ts +63 -67
- package/src/runtime/routes/approval-routes.ts +1 -3
- package/src/runtime/routes/brain-graph/brain-graph.html +1845 -0
- package/src/runtime/routes/brain-graph-routes.ts +4 -42
- package/src/runtime/routes/btw-routes.ts +155 -0
- package/src/runtime/routes/computer-use-routes.ts +77 -31
- package/src/runtime/routes/conversation-routes.ts +234 -47
- package/src/runtime/routes/diagnostics-routes.ts +154 -43
- package/src/runtime/routes/documents-routes.ts +2 -2
- package/src/runtime/routes/global-search-routes.ts +1 -1
- package/src/runtime/routes/host-bash-routes.ts +83 -0
- package/src/runtime/routes/host-file-routes.ts +79 -0
- package/src/runtime/routes/integrations/slack/share.ts +1 -1
- package/src/runtime/routes/log-export-routes.ts +120 -0
- package/src/runtime/routes/mcp-routes.ts +20 -0
- package/src/runtime/routes/migration-routes.ts +3 -3
- package/src/runtime/routes/pairing-routes.ts +1 -1
- package/src/runtime/routes/recording-routes.ts +6 -4
- package/src/runtime/routes/schedule-routes.ts +31 -5
- package/src/runtime/routes/session-management-routes.ts +2 -6
- package/src/runtime/routes/session-query-routes.ts +18 -15
- package/src/runtime/routes/settings-routes.ts +7 -351
- package/src/runtime/routes/skills-routes.ts +7 -6
- package/src/runtime/routes/subagents-routes.ts +4 -10
- package/src/runtime/routes/surface-action-routes.ts +3 -14
- package/src/runtime/routes/surface-content-routes.ts +22 -5
- package/src/runtime/routes/work-items-routes.ts +21 -25
- package/src/runtime/routes/workspace-routes.test.ts +3 -3
- package/src/runtime/routes/workspace-utils.ts +1 -1
- package/src/runtime/telegram-streaming-delivery.ts +3 -0
- package/src/runtime/verification-outbound-actions.ts +2 -2
- package/src/schedule/integration-status.ts +0 -6
- package/src/schedule/schedule-store.ts +234 -43
- package/src/schedule/scheduler.ts +73 -74
- package/src/security/oauth2.ts +1 -1
- package/src/sequence/store.ts +12 -2
- package/src/skills/frontmatter.ts +19 -77
- package/src/skills/managed-store.ts +11 -2
- package/src/subagent/manager.ts +5 -3
- package/src/tasks/ephemeral-permissions.ts +3 -5
- package/src/tools/AGENTS.md +37 -0
- package/src/tools/apps/executors.ts +0 -6
- package/src/tools/browser/browser-manager.ts +17 -11
- package/src/tools/browser/jit-auth.ts +4 -1
- package/src/tools/claude-code/claude-code.ts +1 -1
- package/src/tools/computer-use/definitions.ts +48 -60
- package/src/tools/document/document-tool.ts +6 -6
- package/src/tools/document/editor-template.ts +10 -8
- package/src/tools/filesystem/edit.ts +2 -1
- package/src/tools/filesystem/read.ts +20 -2
- package/src/tools/filesystem/write.ts +2 -1
- package/src/tools/host-filesystem/edit.ts +17 -1
- package/src/tools/host-filesystem/read.ts +16 -1
- package/src/tools/host-filesystem/write.ts +15 -1
- package/src/tools/host-terminal/host-shell.ts +24 -0
- package/src/tools/memory/definitions.ts +45 -81
- package/src/tools/memory/handlers.test.ts +0 -1
- package/src/tools/memory/handlers.ts +1 -1
- package/src/tools/memory/register.ts +26 -60
- package/src/tools/network/script-proxy/session-manager.ts +6 -8
- package/src/tools/network/web-fetch.ts +7 -1
- package/src/tools/network/web-search.ts +2 -1
- package/src/tools/registry.ts +23 -0
- package/src/tools/schedule/create.ts +113 -5
- package/src/tools/schedule/list.ts +57 -15
- package/src/tools/schedule/update.ts +73 -3
- package/src/tools/shared/filesystem/image-read.ts +192 -0
- package/src/tools/side-effects.ts +1 -7
- package/src/tools/skills/delete-managed.ts +27 -64
- package/src/tools/skills/execute.ts +54 -0
- package/src/tools/skills/load.ts +127 -5
- package/src/tools/skills/scaffold-managed.ts +93 -172
- package/src/tools/subagent/message.ts +0 -7
- package/src/tools/subagent/spawn.ts +1 -1
- package/src/tools/swarm/delegate.ts +0 -3
- package/src/tools/system/avatar-generator.ts +13 -19
- package/src/tools/system/request-permission.ts +2 -1
- package/src/tools/terminal/safe-env.ts +1 -0
- package/src/tools/tool-manifest.ts +41 -47
- package/src/tools/types.ts +6 -2
- package/src/tools/ui-surface/definitions.ts +0 -55
- package/src/util/errors.ts +12 -10
- package/src/workspace/git-service.ts +0 -2
- package/src/__tests__/account-registry.test.ts +0 -258
- package/src/__tests__/email-classifier.test.ts +0 -25
- package/src/__tests__/gmail-integration.test.ts +0 -97
- package/src/__tests__/handle-user-message-secret-resume.test.ts +0 -172
- package/src/__tests__/home-base-bootstrap.test.ts +0 -84
- package/src/__tests__/managed-twitter-guardrails.test.ts +0 -353
- package/src/__tests__/prebuilt-home-base-seed.test.ts +0 -79
- package/src/__tests__/recording-intent-fallback.test.ts +0 -199
- package/src/__tests__/recording-intent.test.ts +0 -985
- package/src/__tests__/recording-state-machine.test.ts +0 -1574
- package/src/__tests__/reminder-store.test.ts +0 -350
- package/src/__tests__/reminder.test.ts +0 -337
- package/src/__tests__/scan-result-store.test.ts +0 -121
- package/src/__tests__/twitter-platform-proxy-client.test.ts +0 -450
- package/src/__tests__/view-image-tool.test.ts +0 -241
- package/src/cli/commands/amazon/cart.ts +0 -513
- package/src/cli/commands/amazon/checkout.ts +0 -394
- package/src/cli/commands/amazon/client.ts +0 -513
- package/src/cli/commands/amazon/index.ts +0 -920
- package/src/cli/commands/amazon/product-details.ts +0 -145
- package/src/cli/commands/amazon/request-extractor.ts +0 -187
- package/src/cli/commands/amazon/search.ts +0 -76
- package/src/cli/commands/amazon/session.ts +0 -116
- package/src/cli/commands/twitter/__tests__/cli-error-shaping.test.ts +0 -265
- package/src/cli/commands/twitter/__tests__/cli-read-routing.test.ts +0 -483
- package/src/cli/commands/twitter/__tests__/cli-routing.test.ts +0 -412
- package/src/cli/commands/twitter/__tests__/oauth-client.test.ts +0 -197
- package/src/cli/commands/twitter/client.ts +0 -989
- package/src/cli/commands/twitter/index.ts +0 -1160
- package/src/cli/commands/twitter/oauth-client.ts +0 -94
- package/src/cli/commands/twitter/router.ts +0 -396
- package/src/cli/commands/twitter/session.ts +0 -121
- package/src/config/bundled-skills/agentmail/SKILL.md +0 -132
- package/src/config/bundled-skills/agentmail/icon.svg +0 -21
- package/src/config/bundled-skills/amazon/SKILL.md +0 -137
- package/src/config/bundled-skills/amazon/icon.svg +0 -13
- package/src/config/bundled-skills/api-mapping/SKILL.md +0 -78
- package/src/config/bundled-skills/api-mapping/icon.svg +0 -18
- package/src/config/bundled-skills/cli-discover/SKILL.md +0 -68
- package/src/config/bundled-skills/deploy-fullstack-vercel/SKILL.md +0 -179
- package/src/config/bundled-skills/document-writer/SKILL.md +0 -195
- package/src/config/bundled-skills/elevenlabs-voice/SKILL.md +0 -140
- package/src/config/bundled-skills/email-setup/SKILL.md +0 -68
- package/src/config/bundled-skills/frontend-design/SKILL.md +0 -44
- package/src/config/bundled-skills/frontend-design/icon.svg +0 -16
- package/src/config/bundled-skills/google-oauth-setup/SKILL.md +0 -452
- package/src/config/bundled-skills/guardian-verify-setup/SKILL.md +0 -203
- package/src/config/bundled-skills/influencer/SKILL.md +0 -144
- package/src/config/bundled-skills/influencer/scripts/client.ts +0 -1269
- package/src/config/bundled-skills/influencer/scripts/influencer.ts +0 -267
- package/src/config/bundled-skills/macos-automation/SKILL.md +0 -65
- package/src/config/bundled-skills/macos-automation/icon.svg +0 -12
- package/src/config/bundled-skills/mcp-setup/SKILL.md +0 -75
- package/src/config/bundled-skills/media-processing/tools/media-diagnostics.ts +0 -184
- package/src/config/bundled-skills/messaging/tools/gmail-archive-by-query.ts +0 -80
- package/src/config/bundled-skills/messaging/tools/gmail-archive.ts +0 -29
- package/src/config/bundled-skills/messaging/tools/gmail-batch-archive.ts +0 -56
- package/src/config/bundled-skills/messaging/tools/gmail-batch-label.ts +0 -34
- package/src/config/bundled-skills/messaging/tools/gmail-download-attachment.ts +0 -47
- package/src/config/bundled-skills/messaging/tools/gmail-label.ts +0 -31
- package/src/config/bundled-skills/messaging/tools/gmail-list-attachments.ts +0 -67
- package/src/config/bundled-skills/messaging/tools/gmail-send-with-attachments.ts +0 -97
- package/src/config/bundled-skills/messaging/tools/gmail-summarize-thread.ts +0 -87
- package/src/config/bundled-skills/messaging/tools/gmail-triage.ts +0 -135
- package/src/config/bundled-skills/messaging/tools/messaging-analyze-activity.ts +0 -24
- package/src/config/bundled-skills/messaging/tools/messaging-reply.ts +0 -201
- package/src/config/bundled-skills/messaging/tools/send-notification.ts +0 -1
- package/src/config/bundled-skills/messaging/tools/sequence-cancel.ts +0 -27
- package/src/config/bundled-skills/messaging/tools/sequence-pause.ts +0 -48
- package/src/config/bundled-skills/messaging/tools/sequence-resume.ts +0 -27
- package/src/config/bundled-skills/messaging/tools/sequence-update.ts +0 -56
- package/src/config/bundled-skills/notion/SKILL.md +0 -240
- package/src/config/bundled-skills/notion-oauth-setup/SKILL.md +0 -126
- package/src/config/bundled-skills/oauth-setup/SKILL.md +0 -143
- package/src/config/bundled-skills/public-ingress/SKILL.md +0 -258
- package/src/config/bundled-skills/reminder/SKILL.md +0 -79
- package/src/config/bundled-skills/reminder/TOOLS.json +0 -89
- package/src/config/bundled-skills/reminder/tools/reminder-list.ts +0 -12
- package/src/config/bundled-skills/restaurant-reservation/SKILL.md +0 -141
- package/src/config/bundled-skills/screen-recording/SKILL.md +0 -148
- package/src/config/bundled-skills/self-upgrade/SKILL.md +0 -69
- package/src/config/bundled-skills/skills-catalog/SKILL.md +0 -78
- package/src/config/bundled-skills/slack-app-setup/SKILL.md +0 -178
- package/src/config/bundled-skills/slack-digest-setup/SKILL.md +0 -163
- package/src/config/bundled-skills/slack-oauth-setup/SKILL.md +0 -157
- package/src/config/bundled-skills/start-the-day/SKILL.md +0 -70
- package/src/config/bundled-skills/start-the-day/icon.svg +0 -13
- package/src/config/bundled-skills/telegram-setup/SKILL.md +0 -105
- package/src/config/bundled-skills/time-based-actions/SKILL.md +0 -142
- package/src/config/bundled-skills/twilio-setup/SKILL.md +0 -232
- package/src/config/bundled-skills/twitter/SKILL.md +0 -319
- package/src/config/bundled-skills/twitter/icon.svg +0 -14
- package/src/config/bundled-skills/typescript-eval/SKILL.md +0 -60
- package/src/config/bundled-skills/vercel-token-setup/SKILL.md +0 -214
- package/src/config/bundled-skills/voice-setup/SKILL.md +0 -131
- package/src/config/bundled-skills/voice-setup/icon.svg +0 -20
- package/src/daemon/handlers/pairing.ts +0 -119
- package/src/daemon/handlers/session-user-message.ts +0 -961
- package/src/daemon/recording-executor.ts +0 -180
- package/src/daemon/recording-intent-fallback.ts +0 -162
- package/src/daemon/recording-intent.ts +0 -493
- package/src/home-base/app-link-store.ts +0 -78
- package/src/home-base/bootstrap.ts +0 -74
- package/src/home-base/prebuilt/brain-graph.html +0 -1483
- package/src/home-base/prebuilt/index.html +0 -702
- package/src/home-base/prebuilt/seed-metadata.json +0 -21
- package/src/home-base/prebuilt/seed.ts +0 -122
- package/src/home-base/prebuilt-home-base-updater.ts +0 -36
- package/src/memory/account-store.ts +0 -117
- package/src/messaging/activity-analyzer.ts +0 -76
- package/src/messaging/email-classifier.ts +0 -208
- package/src/messaging/index.ts +0 -2
- package/src/messaging/outreach-classifier.ts +0 -185
- package/src/messaging/thread-summarizer.ts +0 -346
- package/src/messaging/types.ts +0 -17
- package/src/tools/browser/x-auto-navigate.ts +0 -254
- package/src/tools/credentials/account-registry.ts +0 -144
- package/src/tools/filesystem/view-image.ts +0 -244
- package/src/tools/reminder/reminder-store.ts +0 -194
- package/src/tools/reminder/reminder.ts +0 -158
- package/src/tools/system/navigate-settings.ts +0 -74
- package/src/tools/system/open-system-settings.ts +0 -85
- package/src/tools/system/version.ts +0 -54
- package/src/twitter/platform-proxy-client.ts +0 -405
- package/src/util/cookie-session.ts +0 -98
- /package/src/config/bundled-skills/{messaging → gmail}/tools/scan-result-store.ts +0 -0
- /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-analytics.ts +0 -0
- /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-create.ts +0 -0
- /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-delete.ts +0 -0
- /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-enroll.ts +0 -0
- /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-enrollment-list.ts +0 -0
- /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-get.ts +0 -0
- /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-import.ts +0 -0
- /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-list.ts +0 -0
|
@@ -1,513 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Amazon REST API client.
|
|
3
|
-
*
|
|
4
|
-
* ARCHITECTURE
|
|
5
|
-
* ============
|
|
6
|
-
* All requests run inside a Chrome browser tab via CDP Runtime.evaluate(), NOT
|
|
7
|
-
* from Node.js directly. This means:
|
|
8
|
-
*
|
|
9
|
-
* 1. There are TWO DOMs in every function:
|
|
10
|
-
* - `document` = the browser's currently-rendered page (e.g. amazon.com homepage)
|
|
11
|
-
* - `doc` = a DOMParser-parsed document from a fetch() response (e.g. product page)
|
|
12
|
-
* CSRF tokens, offer IDs, and form fields must be extracted from `doc` (the fetched
|
|
13
|
-
* page), NOT from `document`. The browser's live page rarely has the data we need.
|
|
14
|
-
*
|
|
15
|
-
* 2. Session cookies live in the Chrome-CDP browser profile
|
|
16
|
-
* (~Library/Application Support/Google/Chrome-CDP). Session metadata is stored in the
|
|
17
|
-
* encrypted credential store and used to validate that a session exists. Actual auth
|
|
18
|
-
* goes through the browser's cookies.
|
|
19
|
-
*
|
|
20
|
-
* AMAZON FRESH vs REGULAR CART
|
|
21
|
-
* ============================
|
|
22
|
-
* Fresh and regular Amazon use completely different cart APIs:
|
|
23
|
-
* - Fresh: POST /alm/addtofreshcart (JSON body)
|
|
24
|
-
* - Regular: POST /gp/add-to-cart/json (form-encoded body)
|
|
25
|
-
*
|
|
26
|
-
* Fresh cart POST requires ALL of these fields or it silently fails:
|
|
27
|
-
* - `offerListingDiscriminator` (short code like "A0P3", from escaped JSON in product HTML)
|
|
28
|
-
* - `offerListingID` (long URL-encoded hash, from escaped JSON in product HTML)
|
|
29
|
-
* - `anti-csrftoken-a2z` header (from <input> or <meta> in the FETCHED product page doc)
|
|
30
|
-
* - `csrfToken` in payload (from escaped JSON in product HTML)
|
|
31
|
-
*
|
|
32
|
-
* DEBUGGING
|
|
33
|
-
* =========
|
|
34
|
-
* Use `--verbose` on `cart add` to dump all extracted fields and raw responses.
|
|
35
|
-
* If a field shows "EMPTY", the product page format likely changed and the
|
|
36
|
-
* extraction regex needs updating. Check the escaped JSON patterns in the HTML:
|
|
37
|
-
* - Fields are typically in: \\"fieldName\\":\\"value\\" (backslash-escaped quotes)
|
|
38
|
-
* - Or HTML entities: "fieldName":"value"
|
|
39
|
-
*
|
|
40
|
-
* ERROR HANDLING
|
|
41
|
-
* ==============
|
|
42
|
-
* NEVER silently fall through to stale data. If a POST fails, throw an error with
|
|
43
|
-
* the extracted field values so the caller knows exactly what went wrong. The
|
|
44
|
-
* get-cart-items fallback endpoint returns whatever is already in the cart, NOT
|
|
45
|
-
* what was just added. Always validate the target ASIN is present before returning.
|
|
46
|
-
*
|
|
47
|
-
* runWithBackoff() retries on HTTP 403, but not all 403s are rate limits. A 403
|
|
48
|
-
* from /alm/addtofreshcart with "fakeOfferId" means the request payload was wrong,
|
|
49
|
-
* not that we're rate-limited. Check the response body before classifying the error.
|
|
50
|
-
*/
|
|
51
|
-
|
|
52
|
-
import { execFile, spawn } from "node:child_process";
|
|
53
|
-
import { promisify } from "node:util";
|
|
54
|
-
|
|
55
|
-
const execFileAsync = promisify(execFile);
|
|
56
|
-
|
|
57
|
-
export interface ExtractedCredential {
|
|
58
|
-
name: string;
|
|
59
|
-
value: string;
|
|
60
|
-
domain: string;
|
|
61
|
-
path: string;
|
|
62
|
-
httpOnly: boolean;
|
|
63
|
-
secure: boolean;
|
|
64
|
-
expires?: number;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
interface RelayResponse {
|
|
68
|
-
ok: boolean;
|
|
69
|
-
tabId?: number;
|
|
70
|
-
result?: unknown;
|
|
71
|
-
error?: string;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
import { type AmazonSession, loadSession, saveSession } from "./session.js";
|
|
75
|
-
|
|
76
|
-
export const AMAZON_BASE = "https://www.amazon.com";
|
|
77
|
-
|
|
78
|
-
// ---------------------------------------------------------------------------
|
|
79
|
-
// Relay command routing
|
|
80
|
-
// ---------------------------------------------------------------------------
|
|
81
|
-
// All relay commands are dispatched via the `assistant browser chrome relay`
|
|
82
|
-
// CLI subprocess. Action names are converted from snake_case to kebab-case.
|
|
83
|
-
// The `evaluate` action pipes JavaScript via stdin to avoid shell escaping.
|
|
84
|
-
// ---------------------------------------------------------------------------
|
|
85
|
-
|
|
86
|
-
export async function sendRelayCommand(
|
|
87
|
-
command: Record<string, unknown>,
|
|
88
|
-
): Promise<{
|
|
89
|
-
success: boolean;
|
|
90
|
-
tabId?: number;
|
|
91
|
-
result?: unknown;
|
|
92
|
-
error?: string;
|
|
93
|
-
}> {
|
|
94
|
-
const action = command.action as string;
|
|
95
|
-
const cmdArgs = ["browser", "chrome", "relay", action.replace(/_/g, "-")];
|
|
96
|
-
|
|
97
|
-
// Map command fields to CLI flags
|
|
98
|
-
for (const [key, value] of Object.entries(command)) {
|
|
99
|
-
if (key === "action") continue;
|
|
100
|
-
if (key === "code") continue; // handled via stdin for evaluate
|
|
101
|
-
if (key === "cookie") {
|
|
102
|
-
cmdArgs.push("--cookie", JSON.stringify(value));
|
|
103
|
-
continue;
|
|
104
|
-
}
|
|
105
|
-
const flag = key.replace(/([A-Z])/g, "-$1").toLowerCase();
|
|
106
|
-
cmdArgs.push(`--${flag === "tabid" ? "tab-id" : flag}`, String(value));
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
// For evaluate commands, pipe code via stdin to avoid shell escaping issues
|
|
110
|
-
if (action === "evaluate" && command.code) {
|
|
111
|
-
return new Promise((resolve, reject) => {
|
|
112
|
-
const proc = spawn("assistant", cmdArgs);
|
|
113
|
-
let stdout = "";
|
|
114
|
-
let stderr = "";
|
|
115
|
-
proc.stdout.on("data", (d: Buffer) => {
|
|
116
|
-
stdout += d;
|
|
117
|
-
});
|
|
118
|
-
proc.stderr.on("data", (d: Buffer) => {
|
|
119
|
-
stderr += d;
|
|
120
|
-
});
|
|
121
|
-
proc.on("close", (code) => {
|
|
122
|
-
try {
|
|
123
|
-
const result: RelayResponse = JSON.parse(stdout);
|
|
124
|
-
resolve({
|
|
125
|
-
success: result.ok,
|
|
126
|
-
tabId: result.tabId,
|
|
127
|
-
result: result.result,
|
|
128
|
-
error: result.error,
|
|
129
|
-
});
|
|
130
|
-
} catch {
|
|
131
|
-
if (code !== 0) {
|
|
132
|
-
reject(new Error(stderr || stdout || `Exit code ${code}`));
|
|
133
|
-
} else {
|
|
134
|
-
reject(new Error(`Invalid JSON from relay: ${stdout}`));
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
});
|
|
138
|
-
proc.on("error", reject);
|
|
139
|
-
proc.stdin.write(command.code as string);
|
|
140
|
-
proc.stdin.end();
|
|
141
|
-
});
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
const { stdout } = await execFileAsync("assistant", cmdArgs);
|
|
145
|
-
const result: RelayResponse = JSON.parse(stdout);
|
|
146
|
-
return {
|
|
147
|
-
success: result.ok,
|
|
148
|
-
tabId: result.tabId,
|
|
149
|
-
result: result.result,
|
|
150
|
-
error: result.error,
|
|
151
|
-
};
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
/** Thrown when the session is missing or expired. The CLI handles this specially. */
|
|
155
|
-
export class SessionExpiredError extends Error {
|
|
156
|
-
constructor(reason: string) {
|
|
157
|
-
super(reason);
|
|
158
|
-
this.name = "SessionExpiredError";
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
/** Thrown when Amazon returns HTTP 403 (rate limited or bot detected). */
|
|
163
|
-
export class RateLimitError extends Error {
|
|
164
|
-
constructor(reason: string) {
|
|
165
|
-
super(reason);
|
|
166
|
-
this.name = "RateLimitError";
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
async function requireSession(): Promise<AmazonSession> {
|
|
171
|
-
const session = await loadSession();
|
|
172
|
-
if (!session) {
|
|
173
|
-
throw new SessionExpiredError("No Amazon session found.");
|
|
174
|
-
}
|
|
175
|
-
return session;
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
/**
|
|
179
|
-
* Prepare for an Amazon request: validate session, find a Chrome tab,
|
|
180
|
-
* and sync session cookies into the browser. Returns the tab ID.
|
|
181
|
-
*/
|
|
182
|
-
export async function prepareRequest(): Promise<{
|
|
183
|
-
tabId: number;
|
|
184
|
-
session: AmazonSession;
|
|
185
|
-
}> {
|
|
186
|
-
const session = await requireSession();
|
|
187
|
-
const tabId = await findAmazonTab();
|
|
188
|
-
// Skip cookie sync — use Chrome's own live cookies instead of overwriting with stale CLI ones
|
|
189
|
-
// await syncCookiesToBrowser(session.cookies);
|
|
190
|
-
return { tabId, session };
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
/**
|
|
194
|
-
* Find a Chrome tab on amazon.com via the browser-relay extension.
|
|
195
|
-
* Opens a new Amazon tab if none is currently open.
|
|
196
|
-
*/
|
|
197
|
-
async function findAmazonTab(): Promise<number> {
|
|
198
|
-
const resp = await sendRelayCommand({
|
|
199
|
-
action: "find_tab",
|
|
200
|
-
url: "*://*.amazon.com/*",
|
|
201
|
-
});
|
|
202
|
-
if (resp.success && resp.tabId !== undefined) {
|
|
203
|
-
return resp.tabId;
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
// No Amazon tab open — create one
|
|
207
|
-
const newTab = await sendRelayCommand({
|
|
208
|
-
action: "new_tab",
|
|
209
|
-
url: "https://www.amazon.com",
|
|
210
|
-
});
|
|
211
|
-
if (!newTab.success || newTab.tabId === undefined) {
|
|
212
|
-
throw new SessionExpiredError("Could not open an Amazon tab in Chrome.");
|
|
213
|
-
}
|
|
214
|
-
return newTab.tabId;
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
/**
|
|
218
|
-
* Inject saved session cookies into Chrome via the browser-relay extension.
|
|
219
|
-
* Uses chrome.cookies.set so fetch() calls in the tab context carry the session.
|
|
220
|
-
*/
|
|
221
|
-
let lastCookieSyncTime = 0;
|
|
222
|
-
const COOKIE_SYNC_INTERVAL = 60_000; // re-sync at most once per minute
|
|
223
|
-
|
|
224
|
-
async function _syncCookiesToBrowser(
|
|
225
|
-
cookies: ExtractedCredential[],
|
|
226
|
-
): Promise<void> {
|
|
227
|
-
const now = Date.now();
|
|
228
|
-
if (now - lastCookieSyncTime < COOKIE_SYNC_INTERVAL) return;
|
|
229
|
-
|
|
230
|
-
for (const cookie of cookies) {
|
|
231
|
-
const domain = cookie.domain || ".amazon.com";
|
|
232
|
-
const cleanDomain = domain.startsWith(".") ? domain.slice(1) : domain;
|
|
233
|
-
await sendRelayCommand({
|
|
234
|
-
action: "set_cookie",
|
|
235
|
-
cookie: {
|
|
236
|
-
url: `https://${cleanDomain}`,
|
|
237
|
-
name: cookie.name,
|
|
238
|
-
value: cookie.value,
|
|
239
|
-
domain,
|
|
240
|
-
path: cookie.path || "/",
|
|
241
|
-
secure: cookie.secure ?? true,
|
|
242
|
-
httpOnly: cookie.httpOnly ?? false,
|
|
243
|
-
...(cookie.expires ? { expirationDate: cookie.expires } : {}),
|
|
244
|
-
},
|
|
245
|
-
});
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
lastCookieSyncTime = Date.now();
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
/**
|
|
252
|
-
* Execute a JavaScript expression inside a Chrome tab via the browser-relay extension.
|
|
253
|
-
* Drop-in replacement for the former CDP Runtime.evaluate path.
|
|
254
|
-
* Returns the JSON-parsed result value.
|
|
255
|
-
*/
|
|
256
|
-
export async function cdpEval(tabId: number, script: string): Promise<unknown> {
|
|
257
|
-
let resp: {
|
|
258
|
-
success: boolean;
|
|
259
|
-
tabId?: number;
|
|
260
|
-
result?: unknown;
|
|
261
|
-
error?: string;
|
|
262
|
-
};
|
|
263
|
-
try {
|
|
264
|
-
resp = await sendRelayCommand({ action: "evaluate", tabId, code: script });
|
|
265
|
-
} catch (err) {
|
|
266
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
267
|
-
if (msg.includes("not connected")) {
|
|
268
|
-
throw new SessionExpiredError(
|
|
269
|
-
"Browser extension relay is not connected. Load the Vellum extension in Chrome.",
|
|
270
|
-
);
|
|
271
|
-
}
|
|
272
|
-
throw err;
|
|
273
|
-
}
|
|
274
|
-
|
|
275
|
-
if (!resp.success) {
|
|
276
|
-
throw new Error(`Browser eval failed: ${resp.error ?? "unknown error"}`);
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
const value = resp.result;
|
|
280
|
-
if (value == null) {
|
|
281
|
-
throw new Error("Empty browser eval response");
|
|
282
|
-
}
|
|
283
|
-
|
|
284
|
-
try {
|
|
285
|
-
return typeof value === "string" ? JSON.parse(value) : value;
|
|
286
|
-
} catch {
|
|
287
|
-
return value;
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
|
|
291
|
-
/**
|
|
292
|
-
* Handle the raw result object returned from cdpEval scripts.
|
|
293
|
-
* Throws appropriate errors for auth failures, rate limits, and other errors.
|
|
294
|
-
*/
|
|
295
|
-
export function handleResult(result: Record<string, unknown>): void {
|
|
296
|
-
if (result.__error) {
|
|
297
|
-
if (result.__status === 401) {
|
|
298
|
-
throw new SessionExpiredError("Amazon session has expired.");
|
|
299
|
-
}
|
|
300
|
-
if (result.__status === 403) {
|
|
301
|
-
throw new RateLimitError("Amazon rate limit hit (HTTP 403).");
|
|
302
|
-
}
|
|
303
|
-
throw new Error(
|
|
304
|
-
(result.__message as string | undefined) ??
|
|
305
|
-
`Amazon request failed with status ${result.__status ?? "unknown"}`,
|
|
306
|
-
);
|
|
307
|
-
}
|
|
308
|
-
}
|
|
309
|
-
|
|
310
|
-
let lastRequestTime = 0;
|
|
311
|
-
|
|
312
|
-
export async function runWithBackoff<T>(fn: () => Promise<T>): Promise<T> {
|
|
313
|
-
const backoffSchedule = [5000, 10000, 20000];
|
|
314
|
-
|
|
315
|
-
for (let attempt = 0; ; attempt++) {
|
|
316
|
-
// Inter-request delay
|
|
317
|
-
const now = Date.now();
|
|
318
|
-
const elapsed = now - lastRequestTime;
|
|
319
|
-
if (lastRequestTime > 0 && elapsed < 2000) {
|
|
320
|
-
await new Promise((r) => setTimeout(r, 2000 - elapsed));
|
|
321
|
-
}
|
|
322
|
-
|
|
323
|
-
try {
|
|
324
|
-
lastRequestTime = Date.now();
|
|
325
|
-
return await fn();
|
|
326
|
-
} catch (err) {
|
|
327
|
-
if (err instanceof RateLimitError && attempt < backoffSchedule.length) {
|
|
328
|
-
const delay = backoffSchedule[attempt];
|
|
329
|
-
process.stderr.write(
|
|
330
|
-
`[amazon] Rate limited, retrying in ${delay / 1000}s... (attempt ${attempt + 1}/${backoffSchedule.length})\n`,
|
|
331
|
-
);
|
|
332
|
-
await new Promise((r) => setTimeout(r, delay));
|
|
333
|
-
continue;
|
|
334
|
-
}
|
|
335
|
-
throw err;
|
|
336
|
-
}
|
|
337
|
-
}
|
|
338
|
-
}
|
|
339
|
-
|
|
340
|
-
// ---------------------------------------------------------------------------
|
|
341
|
-
// Public types
|
|
342
|
-
// ---------------------------------------------------------------------------
|
|
343
|
-
|
|
344
|
-
export interface ProductSearchResult {
|
|
345
|
-
asin: string;
|
|
346
|
-
title: string;
|
|
347
|
-
price: string;
|
|
348
|
-
priceValue: number | null;
|
|
349
|
-
isPrime: boolean;
|
|
350
|
-
isFresh: boolean;
|
|
351
|
-
imageUrl?: string;
|
|
352
|
-
rating?: string;
|
|
353
|
-
reviewCount?: string;
|
|
354
|
-
}
|
|
355
|
-
|
|
356
|
-
export interface ProductVariation {
|
|
357
|
-
dimensionName: string;
|
|
358
|
-
value: string;
|
|
359
|
-
asin: string;
|
|
360
|
-
isAvailable: boolean;
|
|
361
|
-
priceValue: number | null;
|
|
362
|
-
}
|
|
363
|
-
|
|
364
|
-
export interface ProductDetails {
|
|
365
|
-
asin: string;
|
|
366
|
-
parentAsin?: string;
|
|
367
|
-
title: string;
|
|
368
|
-
price: string;
|
|
369
|
-
priceValue: number | null;
|
|
370
|
-
variations: ProductVariation[];
|
|
371
|
-
isFresh: boolean;
|
|
372
|
-
imageUrl?: string;
|
|
373
|
-
rating?: string;
|
|
374
|
-
reviewCount?: string;
|
|
375
|
-
}
|
|
376
|
-
|
|
377
|
-
export interface CartItem {
|
|
378
|
-
cartItemId: string;
|
|
379
|
-
asin: string;
|
|
380
|
-
title: string;
|
|
381
|
-
quantity: number;
|
|
382
|
-
price: string;
|
|
383
|
-
isFresh: boolean;
|
|
384
|
-
}
|
|
385
|
-
|
|
386
|
-
export interface CartSummary {
|
|
387
|
-
items: CartItem[];
|
|
388
|
-
subtotal: string;
|
|
389
|
-
itemCount: number;
|
|
390
|
-
}
|
|
391
|
-
|
|
392
|
-
export interface DeliverySlot {
|
|
393
|
-
slotId: string;
|
|
394
|
-
date: string;
|
|
395
|
-
timeWindow: string;
|
|
396
|
-
price: string;
|
|
397
|
-
isAvailable: boolean;
|
|
398
|
-
}
|
|
399
|
-
|
|
400
|
-
export interface PaymentMethod {
|
|
401
|
-
paymentMethodId: string;
|
|
402
|
-
type: string;
|
|
403
|
-
last4: string;
|
|
404
|
-
isDefault: boolean;
|
|
405
|
-
}
|
|
406
|
-
|
|
407
|
-
export interface CheckoutSummary {
|
|
408
|
-
subtotal: string;
|
|
409
|
-
shipping: string;
|
|
410
|
-
tax: string;
|
|
411
|
-
total: string;
|
|
412
|
-
paymentMethods: PaymentMethod[];
|
|
413
|
-
deliveryDate?: string;
|
|
414
|
-
}
|
|
415
|
-
|
|
416
|
-
export interface PlaceOrderResult {
|
|
417
|
-
orderId: string;
|
|
418
|
-
estimatedDelivery?: string;
|
|
419
|
-
}
|
|
420
|
-
|
|
421
|
-
// ---------------------------------------------------------------------------
|
|
422
|
-
// Session refresh via browser extension relay
|
|
423
|
-
// ---------------------------------------------------------------------------
|
|
424
|
-
|
|
425
|
-
/**
|
|
426
|
-
* Refresh the Amazon session by grabbing cookies directly from Chrome
|
|
427
|
-
* via the browser extension relay's `get_cookies` action.
|
|
428
|
-
*
|
|
429
|
-
* Much faster than the CDP-based Ride Shotgun flow — no separate Chrome
|
|
430
|
-
* instance, no recording. Requires the extension to be loaded and connected.
|
|
431
|
-
*/
|
|
432
|
-
export async function refreshSessionFromExtension(): Promise<AmazonSession> {
|
|
433
|
-
const resp = await sendRelayCommand({
|
|
434
|
-
action: "get_cookies",
|
|
435
|
-
domain: "amazon.com",
|
|
436
|
-
});
|
|
437
|
-
|
|
438
|
-
if (!resp.success) {
|
|
439
|
-
throw new Error(
|
|
440
|
-
`Failed to get cookies from browser extension: ${resp.error ?? "unknown error"}`,
|
|
441
|
-
);
|
|
442
|
-
}
|
|
443
|
-
|
|
444
|
-
const chromeCookies = resp.result as Array<{
|
|
445
|
-
name: string;
|
|
446
|
-
value: string;
|
|
447
|
-
domain: string;
|
|
448
|
-
path: string;
|
|
449
|
-
httpOnly: boolean;
|
|
450
|
-
secure: boolean;
|
|
451
|
-
expirationDate?: number;
|
|
452
|
-
}>;
|
|
453
|
-
|
|
454
|
-
if (!chromeCookies?.length) {
|
|
455
|
-
throw new Error(
|
|
456
|
-
"No Amazon cookies found in Chrome. " +
|
|
457
|
-
"Make sure you are signed into Amazon in Chrome.",
|
|
458
|
-
);
|
|
459
|
-
}
|
|
460
|
-
|
|
461
|
-
const cookies: ExtractedCredential[] = chromeCookies.map((c) => ({
|
|
462
|
-
name: c.name,
|
|
463
|
-
value: c.value,
|
|
464
|
-
domain: c.domain,
|
|
465
|
-
path: c.path || "/",
|
|
466
|
-
httpOnly: c.httpOnly,
|
|
467
|
-
secure: c.secure,
|
|
468
|
-
expires: c.expirationDate ? Math.floor(c.expirationDate) : undefined,
|
|
469
|
-
}));
|
|
470
|
-
|
|
471
|
-
// Validate required cookies
|
|
472
|
-
const cookieNames = new Set(cookies.map((c) => c.name));
|
|
473
|
-
if (!cookieNames.has("session-id")) {
|
|
474
|
-
throw new Error(
|
|
475
|
-
"Chrome cookies are missing required Amazon cookie: session-id. " +
|
|
476
|
-
"Make sure you are signed into Amazon in Chrome.",
|
|
477
|
-
);
|
|
478
|
-
}
|
|
479
|
-
if (!cookieNames.has("ubid-main")) {
|
|
480
|
-
throw new Error(
|
|
481
|
-
"Chrome cookies are missing required Amazon cookie: ubid-main. " +
|
|
482
|
-
"Make sure you are signed into Amazon in Chrome.",
|
|
483
|
-
);
|
|
484
|
-
}
|
|
485
|
-
if (!cookieNames.has("at-main") && !cookieNames.has("x-main")) {
|
|
486
|
-
throw new Error(
|
|
487
|
-
"Chrome cookies are missing required Amazon auth cookie (at-main or x-main). " +
|
|
488
|
-
"Make sure you are fully signed into Amazon in Chrome.",
|
|
489
|
-
);
|
|
490
|
-
}
|
|
491
|
-
|
|
492
|
-
const session: AmazonSession = {
|
|
493
|
-
cookies,
|
|
494
|
-
};
|
|
495
|
-
|
|
496
|
-
await saveSession(session);
|
|
497
|
-
return session;
|
|
498
|
-
}
|
|
499
|
-
|
|
500
|
-
// ---------------------------------------------------------------------------
|
|
501
|
-
// Re-export public API from submodules
|
|
502
|
-
// ---------------------------------------------------------------------------
|
|
503
|
-
|
|
504
|
-
export { addToCart, removeFromCart, viewCart } from "./cart.js";
|
|
505
|
-
export {
|
|
506
|
-
getCheckoutSummary,
|
|
507
|
-
getFreshDeliverySlots,
|
|
508
|
-
getPaymentMethods,
|
|
509
|
-
placeOrder,
|
|
510
|
-
selectFreshDeliverySlot,
|
|
511
|
-
} from "./checkout.js";
|
|
512
|
-
export { getProductDetails } from "./product-details.js";
|
|
513
|
-
export { search } from "./search.js";
|