@elizaos/plugin-personal-assistant 2.0.3-beta.5 → 2.0.3-beta.7
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/dist/actions/app-block.d.ts +15 -0
- package/dist/actions/app-block.d.ts.map +1 -0
- package/dist/actions/app-block.js +349 -0
- package/dist/actions/app-block.js.map +1 -0
- package/dist/actions/autofill.d.ts +20 -0
- package/dist/actions/autofill.d.ts.map +1 -0
- package/dist/actions/autofill.js +370 -0
- package/dist/actions/autofill.js.map +1 -0
- package/dist/actions/block.d.ts +30 -0
- package/dist/actions/block.d.ts.map +1 -0
- package/dist/actions/block.js +326 -0
- package/dist/actions/block.js.map +1 -0
- package/dist/actions/book-travel.d.ts +10 -0
- package/dist/actions/book-travel.d.ts.map +1 -0
- package/dist/actions/book-travel.js +467 -0
- package/dist/actions/book-travel.js.map +1 -0
- package/dist/actions/brief.d.ts +60 -0
- package/dist/actions/brief.d.ts.map +1 -0
- package/dist/actions/brief.js +485 -0
- package/dist/actions/brief.js.map +1 -0
- package/dist/actions/calendar.d.ts +22 -0
- package/dist/actions/calendar.d.ts.map +1 -0
- package/dist/actions/calendar.js +832 -0
- package/dist/actions/calendar.js.map +1 -0
- package/dist/actions/conflict-detect.d.ts +67 -0
- package/dist/actions/conflict-detect.d.ts.map +1 -0
- package/dist/actions/conflict-detect.js +310 -0
- package/dist/actions/conflict-detect.js.map +1 -0
- package/dist/actions/connector.d.ts +5 -0
- package/dist/actions/connector.d.ts.map +1 -0
- package/dist/actions/connector.js +1354 -0
- package/dist/actions/connector.js.map +1 -0
- package/dist/actions/credentials.d.ts +14 -0
- package/dist/actions/credentials.d.ts.map +1 -0
- package/dist/actions/credentials.js +191 -0
- package/dist/actions/credentials.js.map +1 -0
- package/dist/actions/document.d.ts +36 -0
- package/dist/actions/document.d.ts.map +1 -0
- package/dist/actions/document.js +613 -0
- package/dist/actions/document.js.map +1 -0
- package/dist/actions/entity.d.ts +20 -0
- package/dist/actions/entity.d.ts.map +1 -0
- package/dist/actions/entity.js +785 -0
- package/dist/actions/entity.js.map +1 -0
- package/dist/actions/health.d.ts +4 -0
- package/dist/actions/health.d.ts.map +1 -0
- package/dist/actions/health.js +37 -0
- package/dist/actions/health.js.map +1 -0
- package/dist/actions/inbox.d.ts +12 -0
- package/dist/actions/inbox.d.ts.map +1 -0
- package/dist/actions/inbox.js +13 -0
- package/dist/actions/inbox.js.map +1 -0
- package/dist/actions/lib/calendly-handler.d.ts +3 -0
- package/dist/actions/lib/calendly-handler.d.ts.map +1 -0
- package/dist/actions/lib/calendly-handler.js +506 -0
- package/dist/actions/lib/calendly-handler.js.map +1 -0
- package/dist/actions/lib/extract-goal-plan.d.ts +69 -0
- package/dist/actions/lib/extract-goal-plan.d.ts.map +1 -0
- package/dist/actions/lib/extract-goal-plan.js +488 -0
- package/dist/actions/lib/extract-goal-plan.js.map +1 -0
- package/dist/actions/lib/extract-life-operation.d.ts +18 -0
- package/dist/actions/lib/extract-life-operation.d.ts.map +1 -0
- package/dist/actions/lib/extract-life-operation.js +318 -0
- package/dist/actions/lib/extract-life-operation.js.map +1 -0
- package/dist/actions/lib/extract-task-plan.d.ts +78 -0
- package/dist/actions/lib/extract-task-plan.d.ts.map +1 -0
- package/dist/actions/lib/extract-task-plan.js +355 -0
- package/dist/actions/lib/extract-task-plan.js.map +1 -0
- package/dist/actions/lib/extract-update-fields.d.ts +27 -0
- package/dist/actions/lib/extract-update-fields.d.ts.map +1 -0
- package/dist/actions/lib/extract-update-fields.js +172 -0
- package/dist/actions/lib/extract-update-fields.js.map +1 -0
- package/dist/actions/lib/lifeops-deferred-draft.d.ts +68 -0
- package/dist/actions/lib/lifeops-deferred-draft.d.ts.map +1 -0
- package/dist/actions/lib/lifeops-deferred-draft.js +315 -0
- package/dist/actions/lib/lifeops-deferred-draft.js.map +1 -0
- package/dist/actions/lib/messaging-helpers.d.ts +20 -0
- package/dist/actions/lib/messaging-helpers.d.ts.map +1 -0
- package/dist/actions/lib/messaging-helpers.js +103 -0
- package/dist/actions/lib/messaging-helpers.js.map +1 -0
- package/dist/actions/lib/owner-policy-writes.d.ts +49 -0
- package/dist/actions/lib/owner-policy-writes.d.ts.map +1 -0
- package/dist/actions/lib/owner-policy-writes.js +157 -0
- package/dist/actions/lib/owner-policy-writes.js.map +1 -0
- package/dist/actions/lib/prompt-format.d.ts +3 -0
- package/dist/actions/lib/prompt-format.d.ts.map +1 -0
- package/dist/actions/lib/prompt-format.js +42 -0
- package/dist/actions/lib/prompt-format.js.map +1 -0
- package/dist/actions/lib/scheduling-handler.d.ts +93 -0
- package/dist/actions/lib/scheduling-handler.d.ts.map +1 -0
- package/dist/actions/lib/scheduling-handler.js +868 -0
- package/dist/actions/lib/scheduling-handler.js.map +1 -0
- package/dist/actions/life.d.ts +13 -0
- package/dist/actions/life.d.ts.map +1 -0
- package/dist/actions/life.js +2524 -0
- package/dist/actions/life.js.map +1 -0
- package/dist/actions/money.d.ts +24 -0
- package/dist/actions/money.d.ts.map +1 -0
- package/dist/actions/money.js +41 -0
- package/dist/actions/money.js.map +1 -0
- package/dist/actions/owner-surfaces.d.ts +11 -0
- package/dist/actions/owner-surfaces.d.ts.map +1 -0
- package/dist/actions/owner-surfaces.js +493 -0
- package/dist/actions/owner-surfaces.js.map +1 -0
- package/dist/actions/password-manager.d.ts +10 -0
- package/dist/actions/password-manager.d.ts.map +1 -0
- package/dist/actions/password-manager.js +195 -0
- package/dist/actions/password-manager.js.map +1 -0
- package/dist/actions/payments.d.ts +10 -0
- package/dist/actions/payments.d.ts.map +1 -0
- package/dist/actions/payments.js +5 -0
- package/dist/actions/payments.js.map +1 -0
- package/dist/actions/prioritize.d.ts +49 -0
- package/dist/actions/prioritize.d.ts.map +1 -0
- package/dist/actions/prioritize.js +313 -0
- package/dist/actions/prioritize.js.map +1 -0
- package/dist/actions/remote-desktop.d.ts +13 -0
- package/dist/actions/remote-desktop.d.ts.map +1 -0
- package/dist/actions/remote-desktop.js +11 -0
- package/dist/actions/remote-desktop.js.map +1 -0
- package/dist/actions/resolve-request.d.ts +12 -0
- package/dist/actions/resolve-request.d.ts.map +1 -0
- package/dist/actions/resolve-request.js +427 -0
- package/dist/actions/resolve-request.js.map +1 -0
- package/dist/actions/schedule.d.ts +10 -0
- package/dist/actions/schedule.d.ts.map +1 -0
- package/dist/actions/schedule.js +113 -0
- package/dist/actions/schedule.js.map +1 -0
- package/dist/actions/scheduled-task.d.ts +32 -0
- package/dist/actions/scheduled-task.d.ts.map +1 -0
- package/dist/actions/scheduled-task.js +661 -0
- package/dist/actions/scheduled-task.js.map +1 -0
- package/dist/actions/screen-time.d.ts +4 -0
- package/dist/actions/screen-time.d.ts.map +1 -0
- package/dist/actions/screen-time.js +47 -0
- package/dist/actions/screen-time.js.map +1 -0
- package/dist/actions/subscriptions.d.ts +8 -0
- package/dist/actions/subscriptions.d.ts.map +1 -0
- package/dist/actions/subscriptions.js +327 -0
- package/dist/actions/subscriptions.js.map +1 -0
- package/dist/actions/voice-call.d.ts +16 -0
- package/dist/actions/voice-call.d.ts.map +1 -0
- package/dist/actions/voice-call.js +756 -0
- package/dist/actions/voice-call.js.map +1 -0
- package/dist/actions/website-block.d.ts +15 -0
- package/dist/actions/website-block.d.ts.map +1 -0
- package/dist/actions/website-block.js +719 -0
- package/dist/actions/website-block.js.map +1 -0
- package/dist/actions/work-thread.d.ts +5 -0
- package/dist/actions/work-thread.d.ts.map +1 -0
- package/dist/actions/work-thread.js +556 -0
- package/dist/actions/work-thread.js.map +1 -0
- package/dist/activity-profile/activity-tracker-repo.d.ts +28 -0
- package/dist/activity-profile/activity-tracker-repo.d.ts.map +1 -0
- package/dist/activity-profile/activity-tracker-repo.js +61 -0
- package/dist/activity-profile/activity-tracker-repo.js.map +1 -0
- package/dist/activity-profile/activity-tracker-reporting.d.ts +52 -0
- package/dist/activity-profile/activity-tracker-reporting.d.ts.map +1 -0
- package/dist/activity-profile/activity-tracker-reporting.js +119 -0
- package/dist/activity-profile/activity-tracker-reporting.js.map +1 -0
- package/dist/activity-profile/activity-tracker-service.d.ts +36 -0
- package/dist/activity-profile/activity-tracker-service.d.ts.map +1 -0
- package/dist/activity-profile/activity-tracker-service.js +187 -0
- package/dist/activity-profile/activity-tracker-service.js.map +1 -0
- package/dist/activity-profile/analyzer.d.ts +23 -0
- package/dist/activity-profile/analyzer.d.ts.map +1 -0
- package/dist/activity-profile/analyzer.js +485 -0
- package/dist/activity-profile/analyzer.js.map +1 -0
- package/dist/activity-profile/presence-signal-bridge-service.d.ts +14 -0
- package/dist/activity-profile/presence-signal-bridge-service.d.ts.map +1 -0
- package/dist/activity-profile/presence-signal-bridge-service.js +159 -0
- package/dist/activity-profile/presence-signal-bridge-service.js.map +1 -0
- package/dist/activity-profile/proactive-inbox-digest.d.ts +3 -0
- package/dist/activity-profile/proactive-inbox-digest.d.ts.map +1 -0
- package/dist/activity-profile/proactive-inbox-digest.js +21 -0
- package/dist/activity-profile/proactive-inbox-digest.js.map +1 -0
- package/dist/activity-profile/proactive-planner.d.ts +150 -0
- package/dist/activity-profile/proactive-planner.d.ts.map +1 -0
- package/dist/activity-profile/proactive-planner.js +529 -0
- package/dist/activity-profile/proactive-planner.js.map +1 -0
- package/dist/activity-profile/proactive-worker.d.ts +33 -0
- package/dist/activity-profile/proactive-worker.d.ts.map +1 -0
- package/dist/activity-profile/proactive-worker.js +779 -0
- package/dist/activity-profile/proactive-worker.js.map +1 -0
- package/dist/activity-profile/profile-metadata.d.ts +10 -0
- package/dist/activity-profile/profile-metadata.d.ts.map +1 -0
- package/dist/activity-profile/profile-metadata.js +16 -0
- package/dist/activity-profile/profile-metadata.js.map +1 -0
- package/dist/activity-profile/redactor.d.ts +15 -0
- package/dist/activity-profile/redactor.d.ts.map +1 -0
- package/dist/activity-profile/redactor.js +22 -0
- package/dist/activity-profile/redactor.js.map +1 -0
- package/dist/activity-profile/service.d.ts +11 -0
- package/dist/activity-profile/service.d.ts.map +1 -0
- package/dist/activity-profile/service.js +272 -0
- package/dist/activity-profile/service.js.map +1 -0
- package/dist/activity-profile/types.d.ts +97 -0
- package/dist/activity-profile/types.d.ts.map +1 -0
- package/dist/activity-profile/types.js +36 -0
- package/dist/activity-profile/types.js.map +1 -0
- package/dist/agent-lifeops.d.ts +2 -0
- package/dist/agent-lifeops.d.ts.map +1 -0
- package/dist/agent-lifeops.js +2 -0
- package/dist/agent-lifeops.js.map +1 -0
- package/dist/api/client-lifeops.d.ts +319 -0
- package/dist/api/client-lifeops.d.ts.map +1 -0
- package/dist/api/client-lifeops.js +794 -0
- package/dist/api/client-lifeops.js.map +1 -0
- package/dist/automation-node-contributor.d.ts +2 -0
- package/dist/automation-node-contributor.d.ts.map +1 -0
- package/dist/automation-node-contributor.js +184 -0
- package/dist/automation-node-contributor.js.map +1 -0
- package/dist/client.d.ts +16 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +18 -0
- package/dist/client.js.map +1 -0
- package/dist/components/AppBlockerSettingsCard.d.ts +3 -0
- package/dist/components/AppBlockerSettingsCard.d.ts.map +1 -0
- package/dist/components/AppBlockerSettingsCard.js +538 -0
- package/dist/components/AppBlockerSettingsCard.js.map +1 -0
- package/dist/components/WebsiteBlockerSettingsCard.d.ts +3 -0
- package/dist/components/WebsiteBlockerSettingsCard.d.ts.map +1 -0
- package/dist/components/WebsiteBlockerSettingsCard.js +148 -0
- package/dist/components/WebsiteBlockerSettingsCard.js.map +1 -0
- package/dist/contracts/index.d.ts +2 -0
- package/dist/contracts/index.d.ts.map +1 -0
- package/dist/contracts/index.js +2 -0
- package/dist/contracts/index.js.map +1 -0
- package/dist/contracts/lifeops.d.ts +2 -0
- package/dist/contracts/lifeops.d.ts.map +1 -0
- package/dist/contracts/lifeops.js +2 -0
- package/dist/contracts/lifeops.js.map +1 -0
- package/dist/default-packs/autofill-whitelist-pack.d.ts +17 -0
- package/dist/default-packs/autofill-whitelist-pack.d.ts.map +1 -0
- package/dist/default-packs/autofill-whitelist-pack.js +56 -0
- package/dist/default-packs/autofill-whitelist-pack.js.map +1 -0
- package/dist/default-packs/consolidation-policies.d.ts +14 -0
- package/dist/default-packs/consolidation-policies.d.ts.map +1 -0
- package/dist/default-packs/consolidation-policies.js +17 -0
- package/dist/default-packs/consolidation-policies.js.map +1 -0
- package/dist/default-packs/contract-types.d.ts +200 -0
- package/dist/default-packs/contract-types.d.ts.map +1 -0
- package/dist/default-packs/contract-types.js +1 -0
- package/dist/default-packs/contract-types.js.map +1 -0
- package/dist/default-packs/daily-rhythm.d.ts +28 -0
- package/dist/default-packs/daily-rhythm.d.ts.map +1 -0
- package/dist/default-packs/daily-rhythm.js +136 -0
- package/dist/default-packs/daily-rhythm.js.map +1 -0
- package/dist/default-packs/escalation-ladders.d.ts +18 -0
- package/dist/default-packs/escalation-ladders.d.ts.map +1 -0
- package/dist/default-packs/escalation-ladders.js +17 -0
- package/dist/default-packs/escalation-ladders.js.map +1 -0
- package/dist/default-packs/executive-assistant.d.ts +50 -0
- package/dist/default-packs/executive-assistant.d.ts.map +1 -0
- package/dist/default-packs/executive-assistant.js +745 -0
- package/dist/default-packs/executive-assistant.js.map +1 -0
- package/dist/default-packs/followup-starter.d.ts +49 -0
- package/dist/default-packs/followup-starter.d.ts.map +1 -0
- package/dist/default-packs/followup-starter.js +104 -0
- package/dist/default-packs/followup-starter.js.map +1 -0
- package/dist/default-packs/habit-starters.d.ts +37 -0
- package/dist/default-packs/habit-starters.d.ts.map +1 -0
- package/dist/default-packs/habit-starters.js +255 -0
- package/dist/default-packs/habit-starters.js.map +1 -0
- package/dist/default-packs/inbox-triage-starter.d.ts +23 -0
- package/dist/default-packs/inbox-triage-starter.d.ts.map +1 -0
- package/dist/default-packs/inbox-triage-starter.js +61 -0
- package/dist/default-packs/inbox-triage-starter.js.map +1 -0
- package/dist/default-packs/index.d.ts +54 -0
- package/dist/default-packs/index.d.ts.map +1 -0
- package/dist/default-packs/index.js +150 -0
- package/dist/default-packs/index.js.map +1 -0
- package/dist/default-packs/lint.d.ts +62 -0
- package/dist/default-packs/lint.d.ts.map +1 -0
- package/dist/default-packs/lint.js +161 -0
- package/dist/default-packs/lint.js.map +1 -0
- package/dist/default-packs/morning-brief.d.ts +44 -0
- package/dist/default-packs/morning-brief.d.ts.map +1 -0
- package/dist/default-packs/morning-brief.js +69 -0
- package/dist/default-packs/morning-brief.js.map +1 -0
- package/dist/default-packs/quiet-user-watcher.d.ts +49 -0
- package/dist/default-packs/quiet-user-watcher.d.ts.map +1 -0
- package/dist/default-packs/quiet-user-watcher.js +92 -0
- package/dist/default-packs/quiet-user-watcher.js.map +1 -0
- package/dist/default-packs/registry-types.d.ts +51 -0
- package/dist/default-packs/registry-types.d.ts.map +1 -0
- package/dist/default-packs/registry-types.js +1 -0
- package/dist/default-packs/registry-types.js.map +1 -0
- package/dist/default-packs/task-definitions.d.ts +88 -0
- package/dist/default-packs/task-definitions.d.ts.map +1 -0
- package/dist/default-packs/task-definitions.js +87 -0
- package/dist/default-packs/task-definitions.js.map +1 -0
- package/dist/events/index.d.ts +34 -0
- package/dist/events/index.d.ts.map +1 -0
- package/dist/events/index.js +30 -0
- package/dist/events/index.js.map +1 -0
- package/dist/followup/actions/listOverdueFollowups.d.ts +3 -0
- package/dist/followup/actions/listOverdueFollowups.d.ts.map +1 -0
- package/dist/followup/actions/listOverdueFollowups.js +90 -0
- package/dist/followup/actions/listOverdueFollowups.js.map +1 -0
- package/dist/followup/actions/markFollowupDone.d.ts +3 -0
- package/dist/followup/actions/markFollowupDone.d.ts.map +1 -0
- package/dist/followup/actions/markFollowupDone.js +171 -0
- package/dist/followup/actions/markFollowupDone.js.map +1 -0
- package/dist/followup/actions/setFollowupThreshold.d.ts +3 -0
- package/dist/followup/actions/setFollowupThreshold.d.ts.map +1 -0
- package/dist/followup/actions/setFollowupThreshold.js +171 -0
- package/dist/followup/actions/setFollowupThreshold.js.map +1 -0
- package/dist/followup/followup-tracker.d.ts +83 -0
- package/dist/followup/followup-tracker.d.ts.map +1 -0
- package/dist/followup/followup-tracker.js +311 -0
- package/dist/followup/followup-tracker.js.map +1 -0
- package/dist/followup/index.d.ts +5 -0
- package/dist/followup/index.d.ts.map +1 -0
- package/dist/followup/index.js +39 -0
- package/dist/followup/index.js.map +1 -0
- package/dist/hooks/connector-error.d.ts +2 -0
- package/dist/hooks/connector-error.d.ts.map +1 -0
- package/dist/hooks/connector-error.js +13 -0
- package/dist/hooks/connector-error.js.map +1 -0
- package/dist/hooks/useDiscordConnector.d.ts +11 -0
- package/dist/hooks/useDiscordConnector.d.ts.map +1 -0
- package/dist/hooks/useDiscordConnector.js +95 -0
- package/dist/hooks/useDiscordConnector.js.map +1 -0
- package/dist/hooks/useGoogleLifeOpsConnector.d.ts +23 -0
- package/dist/hooks/useGoogleLifeOpsConnector.d.ts.map +1 -0
- package/dist/hooks/useGoogleLifeOpsConnector.js +630 -0
- package/dist/hooks/useGoogleLifeOpsConnector.js.map +1 -0
- package/dist/hooks/useIMessageConnector.d.ts +10 -0
- package/dist/hooks/useIMessageConnector.d.ts.map +1 -0
- package/dist/hooks/useIMessageConnector.js +57 -0
- package/dist/hooks/useIMessageConnector.js.map +1 -0
- package/dist/hooks/useInbox.d.ts +36 -0
- package/dist/hooks/useInbox.d.ts.map +1 -0
- package/dist/hooks/useInbox.js +96 -0
- package/dist/hooks/useInbox.js.map +1 -0
- package/dist/hooks/useLifeOpsActivitySignals.d.ts +2 -0
- package/dist/hooks/useLifeOpsActivitySignals.d.ts.map +1 -0
- package/dist/hooks/useLifeOpsActivitySignals.js +358 -0
- package/dist/hooks/useLifeOpsActivitySignals.js.map +1 -0
- package/dist/hooks/useLifeOpsAppState.d.ts +9 -0
- package/dist/hooks/useLifeOpsAppState.d.ts.map +1 -0
- package/dist/hooks/useLifeOpsAppState.js +79 -0
- package/dist/hooks/useLifeOpsAppState.js.map +1 -0
- package/dist/hooks/useLifeOpsCapabilitiesStatus.d.ts +8 -0
- package/dist/hooks/useLifeOpsCapabilitiesStatus.d.ts.map +1 -0
- package/dist/hooks/useLifeOpsCapabilitiesStatus.js +60 -0
- package/dist/hooks/useLifeOpsCapabilitiesStatus.js.map +1 -0
- package/dist/hooks/useLifeOpsXConnector.d.ts +11 -0
- package/dist/hooks/useLifeOpsXConnector.d.ts.map +1 -0
- package/dist/hooks/useLifeOpsXConnector.js +92 -0
- package/dist/hooks/useLifeOpsXConnector.js.map +1 -0
- package/dist/hooks/useSignalConnector.d.ts +14 -0
- package/dist/hooks/useSignalConnector.d.ts.map +1 -0
- package/dist/hooks/useSignalConnector.js +89 -0
- package/dist/hooks/useSignalConnector.js.map +1 -0
- package/dist/hooks/useTelegramConnector.d.ts +14 -0
- package/dist/hooks/useTelegramConnector.d.ts.map +1 -0
- package/dist/hooks/useTelegramConnector.js +97 -0
- package/dist/hooks/useTelegramConnector.js.map +1 -0
- package/dist/hooks/useWhatsAppConnector.d.ts +8 -0
- package/dist/hooks/useWhatsAppConnector.d.ts.map +1 -0
- package/dist/hooks/useWhatsAppConnector.js +62 -0
- package/dist/hooks/useWhatsAppConnector.js.map +1 -0
- package/dist/inbox/message-fetcher.d.ts +11 -0
- package/dist/inbox/message-fetcher.d.ts.map +1 -0
- package/dist/inbox/message-fetcher.js +13 -0
- package/dist/inbox/message-fetcher.js.map +1 -0
- package/dist/inbox/repository.d.ts +11 -0
- package/dist/inbox/repository.d.ts.map +1 -0
- package/dist/inbox/repository.js +5 -0
- package/dist/inbox/repository.js.map +1 -0
- package/dist/inbox/types.d.ts +10 -0
- package/dist/inbox/types.d.ts.map +1 -0
- package/dist/inbox/types.js +2 -0
- package/dist/inbox/types.js.map +1 -0
- package/dist/index.d.ts +36 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +188 -0
- package/dist/index.js.map +1 -0
- package/dist/lifeops/access.d.ts +29 -0
- package/dist/lifeops/access.d.ts.map +1 -0
- package/dist/lifeops/access.js +56 -0
- package/dist/lifeops/access.js.map +1 -0
- package/dist/lifeops/app-state.d.ts +22 -0
- package/dist/lifeops/app-state.d.ts.map +1 -0
- package/dist/lifeops/app-state.js +67 -0
- package/dist/lifeops/app-state.js.map +1 -0
- package/dist/lifeops/apple-reminders.d.ts +67 -0
- package/dist/lifeops/apple-reminders.d.ts.map +1 -0
- package/dist/lifeops/apple-reminders.js +396 -0
- package/dist/lifeops/apple-reminders.js.map +1 -0
- package/dist/lifeops/approval-queue.d.ts +38 -0
- package/dist/lifeops/approval-queue.d.ts.map +1 -0
- package/dist/lifeops/approval-queue.js +575 -0
- package/dist/lifeops/approval-queue.js.map +1 -0
- package/dist/lifeops/approval-queue.types.d.ts +172 -0
- package/dist/lifeops/approval-queue.types.d.ts.map +1 -0
- package/dist/lifeops/approval-queue.types.js +27 -0
- package/dist/lifeops/approval-queue.types.js.map +1 -0
- package/dist/lifeops/autofill-whitelist.d.ts +20 -0
- package/dist/lifeops/autofill-whitelist.d.ts.map +1 -0
- package/dist/lifeops/autofill-whitelist.js +59 -0
- package/dist/lifeops/autofill-whitelist.js.map +1 -0
- package/dist/lifeops/background-planner-dispatch.d.ts +60 -0
- package/dist/lifeops/background-planner-dispatch.d.ts.map +1 -0
- package/dist/lifeops/background-planner-dispatch.js +113 -0
- package/dist/lifeops/background-planner-dispatch.js.map +1 -0
- package/dist/lifeops/background-planner.d.ts +140 -0
- package/dist/lifeops/background-planner.d.ts.map +1 -0
- package/dist/lifeops/background-planner.js +359 -0
- package/dist/lifeops/background-planner.js.map +1 -0
- package/dist/lifeops/bill-extraction.d.ts +46 -0
- package/dist/lifeops/bill-extraction.d.ts.map +1 -0
- package/dist/lifeops/bill-extraction.js +325 -0
- package/dist/lifeops/bill-extraction.js.map +1 -0
- package/dist/lifeops/browser-constants.d.ts +4 -0
- package/dist/lifeops/browser-constants.d.ts.map +1 -0
- package/dist/lifeops/browser-constants.js +27 -0
- package/dist/lifeops/browser-constants.js.map +1 -0
- package/dist/lifeops/browser-extension-store.d.ts +61 -0
- package/dist/lifeops/browser-extension-store.d.ts.map +1 -0
- package/dist/lifeops/browser-extension-store.js +176 -0
- package/dist/lifeops/browser-extension-store.js.map +1 -0
- package/dist/lifeops/browser-session-lifecycle.d.ts +57 -0
- package/dist/lifeops/browser-session-lifecycle.d.ts.map +1 -0
- package/dist/lifeops/browser-session-lifecycle.js +308 -0
- package/dist/lifeops/browser-session-lifecycle.js.map +1 -0
- package/dist/lifeops/bulk-review.d.ts +333 -0
- package/dist/lifeops/bulk-review.d.ts.map +1 -0
- package/dist/lifeops/bulk-review.js +1120 -0
- package/dist/lifeops/bulk-review.js.map +1 -0
- package/dist/lifeops/calendar-gate.d.ts +20 -0
- package/dist/lifeops/calendar-gate.d.ts.map +1 -0
- package/dist/lifeops/calendar-gate.js +30 -0
- package/dist/lifeops/calendar-gate.js.map +1 -0
- package/dist/lifeops/channels/contract.d.ts +47 -0
- package/dist/lifeops/channels/contract.d.ts.map +1 -0
- package/dist/lifeops/channels/contract.js +1 -0
- package/dist/lifeops/channels/contract.js.map +1 -0
- package/dist/lifeops/channels/default-pack.d.ts +26 -0
- package/dist/lifeops/channels/default-pack.d.ts.map +1 -0
- package/dist/lifeops/channels/default-pack.js +243 -0
- package/dist/lifeops/channels/default-pack.js.map +1 -0
- package/dist/lifeops/channels/index.d.ts +5 -0
- package/dist/lifeops/channels/index.d.ts.map +1 -0
- package/dist/lifeops/channels/index.js +23 -0
- package/dist/lifeops/channels/index.js.map +1 -0
- package/dist/lifeops/channels/priority-posture.d.ts +36 -0
- package/dist/lifeops/channels/priority-posture.d.ts.map +1 -0
- package/dist/lifeops/channels/priority-posture.js +27 -0
- package/dist/lifeops/channels/priority-posture.js.map +1 -0
- package/dist/lifeops/channels/registry.d.ts +7 -0
- package/dist/lifeops/channels/registry.d.ts.map +1 -0
- package/dist/lifeops/channels/registry.js +49 -0
- package/dist/lifeops/channels/registry.js.map +1 -0
- package/dist/lifeops/checkin/checkin-service.d.ts +66 -0
- package/dist/lifeops/checkin/checkin-service.d.ts.map +1 -0
- package/dist/lifeops/checkin/checkin-service.js +1084 -0
- package/dist/lifeops/checkin/checkin-service.js.map +1 -0
- package/dist/lifeops/checkin/schedule-resolver.d.ts +17 -0
- package/dist/lifeops/checkin/schedule-resolver.d.ts.map +1 -0
- package/dist/lifeops/checkin/schedule-resolver.js +26 -0
- package/dist/lifeops/checkin/schedule-resolver.js.map +1 -0
- package/dist/lifeops/checkin/types.d.ts +106 -0
- package/dist/lifeops/checkin/types.d.ts.map +1 -0
- package/dist/lifeops/checkin/types.js +1 -0
- package/dist/lifeops/checkin/types.js.map +1 -0
- package/dist/lifeops/connectors/_helpers.d.ts +51 -0
- package/dist/lifeops/connectors/_helpers.d.ts.map +1 -0
- package/dist/lifeops/connectors/_helpers.js +104 -0
- package/dist/lifeops/connectors/_helpers.js.map +1 -0
- package/dist/lifeops/connectors/calendly.d.ts +11 -0
- package/dist/lifeops/connectors/calendly.d.ts.map +1 -0
- package/dist/lifeops/connectors/calendly.js +61 -0
- package/dist/lifeops/connectors/calendly.js.map +1 -0
- package/dist/lifeops/connectors/contract.d.ts +88 -0
- package/dist/lifeops/connectors/contract.d.ts.map +1 -0
- package/dist/lifeops/connectors/contract.js +1 -0
- package/dist/lifeops/connectors/contract.js.map +1 -0
- package/dist/lifeops/connectors/default-pack.d.ts +35 -0
- package/dist/lifeops/connectors/default-pack.d.ts.map +1 -0
- package/dist/lifeops/connectors/default-pack.js +37 -0
- package/dist/lifeops/connectors/default-pack.js.map +1 -0
- package/dist/lifeops/connectors/discord.d.ts +8 -0
- package/dist/lifeops/connectors/discord.d.ts.map +1 -0
- package/dist/lifeops/connectors/discord.js +53 -0
- package/dist/lifeops/connectors/discord.js.map +1 -0
- package/dist/lifeops/connectors/dispatch-policy.d.ts +75 -0
- package/dist/lifeops/connectors/dispatch-policy.d.ts.map +1 -0
- package/dist/lifeops/connectors/dispatch-policy.js +35 -0
- package/dist/lifeops/connectors/dispatch-policy.js.map +1 -0
- package/dist/lifeops/connectors/duffel.d.ts +11 -0
- package/dist/lifeops/connectors/duffel.d.ts.map +1 -0
- package/dist/lifeops/connectors/duffel.js +74 -0
- package/dist/lifeops/connectors/duffel.js.map +1 -0
- package/dist/lifeops/connectors/google.d.ts +27 -0
- package/dist/lifeops/connectors/google.d.ts.map +1 -0
- package/dist/lifeops/connectors/google.js +80 -0
- package/dist/lifeops/connectors/google.js.map +1 -0
- package/dist/lifeops/connectors/imessage.d.ts +11 -0
- package/dist/lifeops/connectors/imessage.d.ts.map +1 -0
- package/dist/lifeops/connectors/imessage.js +55 -0
- package/dist/lifeops/connectors/imessage.js.map +1 -0
- package/dist/lifeops/connectors/index.d.ts +5 -0
- package/dist/lifeops/connectors/index.d.ts.map +1 -0
- package/dist/lifeops/connectors/index.js +23 -0
- package/dist/lifeops/connectors/index.js.map +1 -0
- package/dist/lifeops/connectors/mockoon-redirect.d.ts +54 -0
- package/dist/lifeops/connectors/mockoon-redirect.d.ts.map +1 -0
- package/dist/lifeops/connectors/mockoon-redirect.js +71 -0
- package/dist/lifeops/connectors/mockoon-redirect.js.map +1 -0
- package/dist/lifeops/connectors/registry.d.ts +7 -0
- package/dist/lifeops/connectors/registry.d.ts.map +1 -0
- package/dist/lifeops/connectors/registry.js +55 -0
- package/dist/lifeops/connectors/registry.js.map +1 -0
- package/dist/lifeops/connectors/signal.d.ts +8 -0
- package/dist/lifeops/connectors/signal.d.ts.map +1 -0
- package/dist/lifeops/connectors/signal.js +60 -0
- package/dist/lifeops/connectors/signal.js.map +1 -0
- package/dist/lifeops/connectors/telegram.d.ts +12 -0
- package/dist/lifeops/connectors/telegram.d.ts.map +1 -0
- package/dist/lifeops/connectors/telegram.js +65 -0
- package/dist/lifeops/connectors/telegram.js.map +1 -0
- package/dist/lifeops/connectors/twilio.d.ts +15 -0
- package/dist/lifeops/connectors/twilio.d.ts.map +1 -0
- package/dist/lifeops/connectors/twilio.js +126 -0
- package/dist/lifeops/connectors/twilio.js.map +1 -0
- package/dist/lifeops/connectors/whatsapp.d.ts +10 -0
- package/dist/lifeops/connectors/whatsapp.d.ts.map +1 -0
- package/dist/lifeops/connectors/whatsapp.js +56 -0
- package/dist/lifeops/connectors/whatsapp.js.map +1 -0
- package/dist/lifeops/connectors/x.d.ts +8 -0
- package/dist/lifeops/connectors/x.d.ts.map +1 -0
- package/dist/lifeops/connectors/x.js +62 -0
- package/dist/lifeops/connectors/x.js.map +1 -0
- package/dist/lifeops/contact-route-policy.d.ts +27 -0
- package/dist/lifeops/contact-route-policy.d.ts.map +1 -0
- package/dist/lifeops/contact-route-policy.js +153 -0
- package/dist/lifeops/contact-route-policy.js.map +1 -0
- package/dist/lifeops/continuity-probe.d.ts +49 -0
- package/dist/lifeops/continuity-probe.d.ts.map +1 -0
- package/dist/lifeops/continuity-probe.js +161 -0
- package/dist/lifeops/continuity-probe.js.map +1 -0
- package/dist/lifeops/cross-channel-search.d.ts +108 -0
- package/dist/lifeops/cross-channel-search.d.ts.map +1 -0
- package/dist/lifeops/cross-channel-search.js +888 -0
- package/dist/lifeops/cross-channel-search.js.map +1 -0
- package/dist/lifeops/defaults.d.ts +30 -0
- package/dist/lifeops/defaults.d.ts.map +1 -0
- package/dist/lifeops/defaults.js +206 -0
- package/dist/lifeops/defaults.js.map +1 -0
- package/dist/lifeops/device-bus-service.d.ts +16 -0
- package/dist/lifeops/device-bus-service.d.ts.map +1 -0
- package/dist/lifeops/device-bus-service.js +20 -0
- package/dist/lifeops/device-bus-service.js.map +1 -0
- package/dist/lifeops/device-identity.d.ts +31 -0
- package/dist/lifeops/device-identity.d.ts.map +1 -0
- package/dist/lifeops/device-identity.js +94 -0
- package/dist/lifeops/device-identity.js.map +1 -0
- package/dist/lifeops/document-review.d.ts +264 -0
- package/dist/lifeops/document-review.d.ts.map +1 -0
- package/dist/lifeops/document-review.js +925 -0
- package/dist/lifeops/document-review.js.map +1 -0
- package/dist/lifeops/email-classifier.d.ts +9 -0
- package/dist/lifeops/email-classifier.d.ts.map +1 -0
- package/dist/lifeops/email-classifier.js +15 -0
- package/dist/lifeops/email-classifier.js.map +1 -0
- package/dist/lifeops/email-curation.d.ts +13 -0
- package/dist/lifeops/email-curation.d.ts.map +1 -0
- package/dist/lifeops/email-curation.js +2 -0
- package/dist/lifeops/email-curation.js.map +1 -0
- package/dist/lifeops/email-unsubscribe-types.d.ts +7 -0
- package/dist/lifeops/email-unsubscribe-types.d.ts.map +1 -0
- package/dist/lifeops/email-unsubscribe-types.js +1 -0
- package/dist/lifeops/email-unsubscribe-types.js.map +1 -0
- package/dist/lifeops/enforcement-windows.d.ts +34 -0
- package/dist/lifeops/enforcement-windows.d.ts.map +1 -0
- package/dist/lifeops/enforcement-windows.js +80 -0
- package/dist/lifeops/enforcement-windows.js.map +1 -0
- package/dist/lifeops/engine.d.ts +8 -0
- package/dist/lifeops/engine.d.ts.map +1 -0
- package/dist/lifeops/engine.js +540 -0
- package/dist/lifeops/engine.js.map +1 -0
- package/dist/lifeops/entities/index.d.ts +4 -0
- package/dist/lifeops/entities/index.d.ts.map +1 -0
- package/dist/lifeops/entities/index.js +29 -0
- package/dist/lifeops/entities/index.js.map +1 -0
- package/dist/lifeops/entities/merge.d.ts +9 -0
- package/dist/lifeops/entities/merge.d.ts.map +1 -0
- package/dist/lifeops/entities/merge.js +17 -0
- package/dist/lifeops/entities/merge.js.map +1 -0
- package/dist/lifeops/entities/store.d.ts +13 -0
- package/dist/lifeops/entities/store.d.ts.map +1 -0
- package/dist/lifeops/entities/store.js +7 -0
- package/dist/lifeops/entities/store.js.map +1 -0
- package/dist/lifeops/entities/types.d.ts +9 -0
- package/dist/lifeops/entities/types.d.ts.map +1 -0
- package/dist/lifeops/entities/types.js +13 -0
- package/dist/lifeops/entities/types.js.map +1 -0
- package/dist/lifeops/entities/voice-attribution.d.ts +70 -0
- package/dist/lifeops/entities/voice-attribution.d.ts.map +1 -0
- package/dist/lifeops/entities/voice-attribution.js +121 -0
- package/dist/lifeops/entities/voice-attribution.js.map +1 -0
- package/dist/lifeops/entities/voice-observer-bridge.d.ts +32 -0
- package/dist/lifeops/entities/voice-observer-bridge.d.ts.map +1 -0
- package/dist/lifeops/entities/voice-observer-bridge.js +68 -0
- package/dist/lifeops/entities/voice-observer-bridge.js.map +1 -0
- package/dist/lifeops/entities/voice-observer.d.ts +72 -0
- package/dist/lifeops/entities/voice-observer.d.ts.map +1 -0
- package/dist/lifeops/entities/voice-observer.js +97 -0
- package/dist/lifeops/entities/voice-observer.js.map +1 -0
- package/dist/lifeops/escalation-ladders.d.ts +28 -0
- package/dist/lifeops/escalation-ladders.d.ts.map +1 -0
- package/dist/lifeops/escalation-ladders.js +17 -0
- package/dist/lifeops/escalation-ladders.js.map +1 -0
- package/dist/lifeops/fda-probe.d.ts +23 -0
- package/dist/lifeops/fda-probe.d.ts.map +1 -0
- package/dist/lifeops/fda-probe.js +59 -0
- package/dist/lifeops/fda-probe.js.map +1 -0
- package/dist/lifeops/feature-flags.d.ts +24 -0
- package/dist/lifeops/feature-flags.d.ts.map +1 -0
- package/dist/lifeops/feature-flags.js +261 -0
- package/dist/lifeops/feature-flags.js.map +1 -0
- package/dist/lifeops/feature-flags.types.d.ts +156 -0
- package/dist/lifeops/feature-flags.types.d.ts.map +1 -0
- package/dist/lifeops/feature-flags.types.js +129 -0
- package/dist/lifeops/feature-flags.types.js.map +1 -0
- package/dist/lifeops/first-run/defaults.d.ts +57 -0
- package/dist/lifeops/first-run/defaults.d.ts.map +1 -0
- package/dist/lifeops/first-run/defaults.js +159 -0
- package/dist/lifeops/first-run/defaults.js.map +1 -0
- package/dist/lifeops/first-run/questions.d.ts +74 -0
- package/dist/lifeops/first-run/questions.d.ts.map +1 -0
- package/dist/lifeops/first-run/questions.js +184 -0
- package/dist/lifeops/first-run/questions.js.map +1 -0
- package/dist/lifeops/first-run/replay.d.ts +41 -0
- package/dist/lifeops/first-run/replay.d.ts.map +1 -0
- package/dist/lifeops/first-run/replay.js +34 -0
- package/dist/lifeops/first-run/replay.js.map +1 -0
- package/dist/lifeops/first-run/service.d.ts +147 -0
- package/dist/lifeops/first-run/service.d.ts.map +1 -0
- package/dist/lifeops/first-run/service.js +455 -0
- package/dist/lifeops/first-run/service.js.map +1 -0
- package/dist/lifeops/first-run/state.d.ts +36 -0
- package/dist/lifeops/first-run/state.d.ts.map +1 -0
- package/dist/lifeops/first-run/state.js +128 -0
- package/dist/lifeops/first-run/state.js.map +1 -0
- package/dist/lifeops/global-pause/store.d.ts +22 -0
- package/dist/lifeops/global-pause/store.d.ts.map +1 -0
- package/dist/lifeops/global-pause/store.js +18 -0
- package/dist/lifeops/global-pause/store.js.map +1 -0
- package/dist/lifeops/goal-grounding.d.ts +9 -0
- package/dist/lifeops/goal-grounding.d.ts.map +1 -0
- package/dist/lifeops/goal-grounding.js +19 -0
- package/dist/lifeops/goal-grounding.js.map +1 -0
- package/dist/lifeops/goal-semantic-evaluator.d.ts +8 -0
- package/dist/lifeops/goal-semantic-evaluator.d.ts.map +1 -0
- package/dist/lifeops/goal-semantic-evaluator.js +7 -0
- package/dist/lifeops/goal-semantic-evaluator.js.map +1 -0
- package/dist/lifeops/google/format-helpers.d.ts +63 -0
- package/dist/lifeops/google/format-helpers.d.ts.map +1 -0
- package/dist/lifeops/google/format-helpers.js +597 -0
- package/dist/lifeops/google/format-helpers.js.map +1 -0
- package/dist/lifeops/google-plugin-delegates.d.ts +59 -0
- package/dist/lifeops/google-plugin-delegates.d.ts.map +1 -0
- package/dist/lifeops/google-plugin-delegates.js +408 -0
- package/dist/lifeops/google-plugin-delegates.js.map +1 -0
- package/dist/lifeops/google-scopes.d.ts +15 -0
- package/dist/lifeops/google-scopes.d.ts.map +1 -0
- package/dist/lifeops/google-scopes.js +118 -0
- package/dist/lifeops/google-scopes.js.map +1 -0
- package/dist/lifeops/handoff/store.d.ts +23 -0
- package/dist/lifeops/handoff/store.d.ts.map +1 -0
- package/dist/lifeops/handoff/store.js +20 -0
- package/dist/lifeops/handoff/store.js.map +1 -0
- package/dist/lifeops/i18n/localized-examples-provider.d.ts +16 -0
- package/dist/lifeops/i18n/localized-examples-provider.d.ts.map +1 -0
- package/dist/lifeops/i18n/localized-examples-provider.js +33 -0
- package/dist/lifeops/i18n/localized-examples-provider.js.map +1 -0
- package/dist/lifeops/i18n/localized-examples-resolver.d.ts +32 -0
- package/dist/lifeops/i18n/localized-examples-resolver.d.ts.map +1 -0
- package/dist/lifeops/i18n/localized-examples-resolver.js +28 -0
- package/dist/lifeops/i18n/localized-examples-resolver.js.map +1 -0
- package/dist/lifeops/i18n/prompt-registry.d.ts +64 -0
- package/dist/lifeops/i18n/prompt-registry.d.ts.map +1 -0
- package/dist/lifeops/i18n/prompt-registry.js +283 -0
- package/dist/lifeops/i18n/prompt-registry.js.map +1 -0
- package/dist/lifeops/imessage-outbound-probe.d.ts +7 -0
- package/dist/lifeops/imessage-outbound-probe.d.ts.map +1 -0
- package/dist/lifeops/imessage-outbound-probe.js +81 -0
- package/dist/lifeops/imessage-outbound-probe.js.map +1 -0
- package/dist/lifeops/index.d.ts +24 -0
- package/dist/lifeops/index.d.ts.map +1 -0
- package/dist/lifeops/index.js +24 -0
- package/dist/lifeops/index.js.map +1 -0
- package/dist/lifeops/intent-sync.d.ts +64 -0
- package/dist/lifeops/intent-sync.d.ts.map +1 -0
- package/dist/lifeops/intent-sync.js +321 -0
- package/dist/lifeops/intent-sync.js.map +1 -0
- package/dist/lifeops/messaging/index.d.ts +2 -0
- package/dist/lifeops/messaging/index.d.ts.map +1 -0
- package/dist/lifeops/messaging/index.js +5 -0
- package/dist/lifeops/messaging/index.js.map +1 -0
- package/dist/lifeops/messaging/owner-send-policy.d.ts +3 -0
- package/dist/lifeops/messaging/owner-send-policy.d.ts.map +1 -0
- package/dist/lifeops/messaging/owner-send-policy.js +83 -0
- package/dist/lifeops/messaging/owner-send-policy.js.map +1 -0
- package/dist/lifeops/notifications-push.d.ts +37 -0
- package/dist/lifeops/notifications-push.d.ts.map +1 -0
- package/dist/lifeops/notifications-push.js +95 -0
- package/dist/lifeops/notifications-push.js.map +1 -0
- package/dist/lifeops/optimized-prompt-instructions.d.ts +5 -0
- package/dist/lifeops/optimized-prompt-instructions.d.ts.map +1 -0
- package/dist/lifeops/optimized-prompt-instructions.js +48 -0
- package/dist/lifeops/optimized-prompt-instructions.js.map +1 -0
- package/dist/lifeops/owner/fact-store.d.ts +143 -0
- package/dist/lifeops/owner/fact-store.d.ts.map +1 -0
- package/dist/lifeops/owner/fact-store.js +446 -0
- package/dist/lifeops/owner/fact-store.js.map +1 -0
- package/dist/lifeops/owner/profile-extraction-evaluator.d.ts +3 -0
- package/dist/lifeops/owner/profile-extraction-evaluator.d.ts.map +1 -0
- package/dist/lifeops/owner/profile-extraction-evaluator.js +241 -0
- package/dist/lifeops/owner/profile-extraction-evaluator.js.map +1 -0
- package/dist/lifeops/owner-profile.d.ts +61 -0
- package/dist/lifeops/owner-profile.d.ts.map +1 -0
- package/dist/lifeops/owner-profile.js +407 -0
- package/dist/lifeops/owner-profile.js.map +1 -0
- package/dist/lifeops/pending-prompts/store.d.ts +23 -0
- package/dist/lifeops/pending-prompts/store.d.ts.map +1 -0
- package/dist/lifeops/pending-prompts/store.js +16 -0
- package/dist/lifeops/pending-prompts/store.js.map +1 -0
- package/dist/lifeops/policy-memory.d.ts +190 -0
- package/dist/lifeops/policy-memory.d.ts.map +1 -0
- package/dist/lifeops/policy-memory.js +1026 -0
- package/dist/lifeops/policy-memory.js.map +1 -0
- package/dist/lifeops/priority-scoring.d.ts +51 -0
- package/dist/lifeops/priority-scoring.d.ts.map +1 -0
- package/dist/lifeops/priority-scoring.js +305 -0
- package/dist/lifeops/priority-scoring.js.map +1 -0
- package/dist/lifeops/privacy-egress.d.ts +92 -0
- package/dist/lifeops/privacy-egress.d.ts.map +1 -0
- package/dist/lifeops/privacy-egress.js +230 -0
- package/dist/lifeops/privacy-egress.js.map +1 -0
- package/dist/lifeops/privacy.d.ts +49 -0
- package/dist/lifeops/privacy.d.ts.map +1 -0
- package/dist/lifeops/privacy.js +66 -0
- package/dist/lifeops/privacy.js.map +1 -0
- package/dist/lifeops/redact-sensitive-data.d.ts +32 -0
- package/dist/lifeops/redact-sensitive-data.d.ts.map +1 -0
- package/dist/lifeops/redact-sensitive-data.js +98 -0
- package/dist/lifeops/redact-sensitive-data.js.map +1 -0
- package/dist/lifeops/registries/app-blocker-contribution.d.ts +13 -0
- package/dist/lifeops/registries/app-blocker-contribution.d.ts.map +1 -0
- package/dist/lifeops/registries/app-blocker-contribution.js +73 -0
- package/dist/lifeops/registries/app-blocker-contribution.js.map +1 -0
- package/dist/lifeops/registries/blocker-registry.d.ts +76 -0
- package/dist/lifeops/registries/blocker-registry.d.ts.map +1 -0
- package/dist/lifeops/registries/blocker-registry.js +40 -0
- package/dist/lifeops/registries/blocker-registry.js.map +1 -0
- package/dist/lifeops/registries/event-kind-registry.d.ts +57 -0
- package/dist/lifeops/registries/event-kind-registry.d.ts.map +1 -0
- package/dist/lifeops/registries/event-kind-registry.js +82 -0
- package/dist/lifeops/registries/event-kind-registry.js.map +1 -0
- package/dist/lifeops/registries/family-registry.d.ts +72 -0
- package/dist/lifeops/registries/family-registry.d.ts.map +1 -0
- package/dist/lifeops/registries/family-registry.js +98 -0
- package/dist/lifeops/registries/family-registry.js.map +1 -0
- package/dist/lifeops/registries/feature-flag-default-pack.d.ts +32 -0
- package/dist/lifeops/registries/feature-flag-default-pack.d.ts.map +1 -0
- package/dist/lifeops/registries/feature-flag-default-pack.js +36 -0
- package/dist/lifeops/registries/feature-flag-default-pack.js.map +1 -0
- package/dist/lifeops/registries/feature-flag-registry.d.ts +76 -0
- package/dist/lifeops/registries/feature-flag-registry.d.ts.map +1 -0
- package/dist/lifeops/registries/feature-flag-registry.js +68 -0
- package/dist/lifeops/registries/feature-flag-registry.js.map +1 -0
- package/dist/lifeops/registries/index.d.ts +24 -0
- package/dist/lifeops/registries/index.d.ts.map +1 -0
- package/dist/lifeops/registries/index.js +115 -0
- package/dist/lifeops/registries/index.js.map +1 -0
- package/dist/lifeops/registries/website-blocker-contribution.d.ts +21 -0
- package/dist/lifeops/registries/website-blocker-contribution.d.ts.map +1 -0
- package/dist/lifeops/registries/website-blocker-contribution.js +76 -0
- package/dist/lifeops/registries/website-blocker-contribution.js.map +1 -0
- package/dist/lifeops/registries/workflow-step-default-pack.d.ts +30 -0
- package/dist/lifeops/registries/workflow-step-default-pack.d.ts.map +1 -0
- package/dist/lifeops/registries/workflow-step-default-pack.js +315 -0
- package/dist/lifeops/registries/workflow-step-default-pack.js.map +1 -0
- package/dist/lifeops/registries/workflow-step-registry.d.ts +101 -0
- package/dist/lifeops/registries/workflow-step-registry.d.ts.map +1 -0
- package/dist/lifeops/registries/workflow-step-registry.js +56 -0
- package/dist/lifeops/registries/workflow-step-registry.js.map +1 -0
- package/dist/lifeops/relationships/extraction.d.ts +77 -0
- package/dist/lifeops/relationships/extraction.d.ts.map +1 -0
- package/dist/lifeops/relationships/extraction.js +146 -0
- package/dist/lifeops/relationships/extraction.js.map +1 -0
- package/dist/lifeops/relationships/index.d.ts +4 -0
- package/dist/lifeops/relationships/index.d.ts.map +1 -0
- package/dist/lifeops/relationships/index.js +19 -0
- package/dist/lifeops/relationships/index.js.map +1 -0
- package/dist/lifeops/relationships/mapping.d.ts +34 -0
- package/dist/lifeops/relationships/mapping.d.ts.map +1 -0
- package/dist/lifeops/relationships/mapping.js +87 -0
- package/dist/lifeops/relationships/mapping.js.map +1 -0
- package/dist/lifeops/relationships/store.d.ts +12 -0
- package/dist/lifeops/relationships/store.d.ts.map +1 -0
- package/dist/lifeops/relationships/store.js +5 -0
- package/dist/lifeops/relationships/store.js.map +1 -0
- package/dist/lifeops/relationships/types.d.ts +9 -0
- package/dist/lifeops/relationships/types.d.ts.map +1 -0
- package/dist/lifeops/relationships/types.js +11 -0
- package/dist/lifeops/relationships/types.js.map +1 -0
- package/dist/lifeops/relative-schedule-resolver.d.ts +13 -0
- package/dist/lifeops/relative-schedule-resolver.d.ts.map +1 -0
- package/dist/lifeops/relative-schedule-resolver.js +107 -0
- package/dist/lifeops/relative-schedule-resolver.js.map +1 -0
- package/dist/lifeops/relative-time.d.ts +15 -0
- package/dist/lifeops/relative-time.d.ts.map +1 -0
- package/dist/lifeops/relative-time.js +191 -0
- package/dist/lifeops/relative-time.js.map +1 -0
- package/dist/lifeops/repository.d.ts +638 -0
- package/dist/lifeops/repository.d.ts.map +1 -0
- package/dist/lifeops/repository.js +6289 -0
- package/dist/lifeops/repository.js.map +1 -0
- package/dist/lifeops/runtime-cache.d.ts +4 -0
- package/dist/lifeops/runtime-cache.d.ts.map +1 -0
- package/dist/lifeops/runtime-cache.js +7 -0
- package/dist/lifeops/runtime-cache.js.map +1 -0
- package/dist/lifeops/runtime-service-delegates.d.ts +236 -0
- package/dist/lifeops/runtime-service-delegates.d.ts.map +1 -0
- package/dist/lifeops/runtime-service-delegates.js +839 -0
- package/dist/lifeops/runtime-service-delegates.js.map +1 -0
- package/dist/lifeops/runtime.d.ts +13 -0
- package/dist/lifeops/runtime.d.ts.map +1 -0
- package/dist/lifeops/runtime.js +104 -0
- package/dist/lifeops/runtime.js.map +1 -0
- package/dist/lifeops/schedule-insight.d.ts +133 -0
- package/dist/lifeops/schedule-insight.d.ts.map +1 -0
- package/dist/lifeops/schedule-insight.js +726 -0
- package/dist/lifeops/schedule-insight.js.map +1 -0
- package/dist/lifeops/schedule-state.d.ts +39 -0
- package/dist/lifeops/schedule-state.d.ts.map +1 -0
- package/dist/lifeops/schedule-state.js +671 -0
- package/dist/lifeops/schedule-state.js.map +1 -0
- package/dist/lifeops/schedule-sync-config.d.ts +3 -0
- package/dist/lifeops/schedule-sync-config.d.ts.map +1 -0
- package/dist/lifeops/schedule-sync-config.js +23 -0
- package/dist/lifeops/schedule-sync-config.js.map +1 -0
- package/dist/lifeops/schedule-sync-contracts.d.ts +2 -0
- package/dist/lifeops/schedule-sync-contracts.d.ts.map +1 -0
- package/dist/lifeops/schedule-sync-contracts.js +2 -0
- package/dist/lifeops/schedule-sync-contracts.js.map +1 -0
- package/dist/lifeops/scheduled-task/index.d.ts +13 -0
- package/dist/lifeops/scheduled-task/index.d.ts.map +1 -0
- package/dist/lifeops/scheduled-task/index.js +14 -0
- package/dist/lifeops/scheduled-task/index.js.map +1 -0
- package/dist/lifeops/scheduled-task/runtime-wiring.d.ts +33 -0
- package/dist/lifeops/scheduled-task/runtime-wiring.d.ts.map +1 -0
- package/dist/lifeops/scheduled-task/runtime-wiring.js +334 -0
- package/dist/lifeops/scheduled-task/runtime-wiring.js.map +1 -0
- package/dist/lifeops/scheduled-task/scheduler.d.ts +28 -0
- package/dist/lifeops/scheduled-task/scheduler.d.ts.map +1 -0
- package/dist/lifeops/scheduled-task/scheduler.js +202 -0
- package/dist/lifeops/scheduled-task/scheduler.js.map +1 -0
- package/dist/lifeops/scheduled-task/service.d.ts +61 -0
- package/dist/lifeops/scheduled-task/service.d.ts.map +1 -0
- package/dist/lifeops/scheduled-task/service.js +64 -0
- package/dist/lifeops/scheduled-task/service.js.map +1 -0
- package/dist/lifeops/scheduler-task.d.ts +19 -0
- package/dist/lifeops/scheduler-task.d.ts.map +1 -0
- package/dist/lifeops/scheduler-task.js +201 -0
- package/dist/lifeops/scheduler-task.js.map +1 -0
- package/dist/lifeops/schema.d.ts +28068 -0
- package/dist/lifeops/schema.d.ts.map +1 -0
- package/dist/lifeops/schema.js +1689 -0
- package/dist/lifeops/schema.js.map +1 -0
- package/dist/lifeops/screen-context.d.ts +66 -0
- package/dist/lifeops/screen-context.d.ts.map +1 -0
- package/dist/lifeops/screen-context.js +347 -0
- package/dist/lifeops/screen-context.js.map +1 -0
- package/dist/lifeops/seed-routine-migration/migrator.d.ts +113 -0
- package/dist/lifeops/seed-routine-migration/migrator.d.ts.map +1 -0
- package/dist/lifeops/seed-routine-migration/migrator.js +142 -0
- package/dist/lifeops/seed-routine-migration/migrator.js.map +1 -0
- package/dist/lifeops/seed-routines.d.ts +24 -0
- package/dist/lifeops/seed-routines.d.ts.map +1 -0
- package/dist/lifeops/seed-routines.js +140 -0
- package/dist/lifeops/seed-routines.js.map +1 -0
- package/dist/lifeops/send-policy/contract.d.ts +81 -0
- package/dist/lifeops/send-policy/contract.d.ts.map +1 -0
- package/dist/lifeops/send-policy/contract.js +1 -0
- package/dist/lifeops/send-policy/contract.js.map +1 -0
- package/dist/lifeops/send-policy/index.d.ts +3 -0
- package/dist/lifeops/send-policy/index.d.ts.map +1 -0
- package/dist/lifeops/send-policy/index.js +13 -0
- package/dist/lifeops/send-policy/index.js.map +1 -0
- package/dist/lifeops/send-policy/registry.d.ts +7 -0
- package/dist/lifeops/send-policy/registry.d.ts.map +1 -0
- package/dist/lifeops/send-policy/registry.js +62 -0
- package/dist/lifeops/send-policy/registry.js.map +1 -0
- package/dist/lifeops/sensitive-request-delivery.d.ts +46 -0
- package/dist/lifeops/sensitive-request-delivery.d.ts.map +1 -0
- package/dist/lifeops/sensitive-request-delivery.js +103 -0
- package/dist/lifeops/sensitive-request-delivery.js.map +1 -0
- package/dist/lifeops/service-constants.d.ts +10 -0
- package/dist/lifeops/service-constants.d.ts.map +1 -0
- package/dist/lifeops/service-constants.js +129 -0
- package/dist/lifeops/service-constants.js.map +1 -0
- package/dist/lifeops/service-helpers-browser.d.ts +41 -0
- package/dist/lifeops/service-helpers-browser.d.ts.map +1 -0
- package/dist/lifeops/service-helpers-browser.js +290 -0
- package/dist/lifeops/service-helpers-browser.js.map +1 -0
- package/dist/lifeops/service-helpers-misc.d.ts +68 -0
- package/dist/lifeops/service-helpers-misc.d.ts.map +1 -0
- package/dist/lifeops/service-helpers-misc.js +531 -0
- package/dist/lifeops/service-helpers-misc.js.map +1 -0
- package/dist/lifeops/service-helpers-occurrence.d.ts +23 -0
- package/dist/lifeops/service-helpers-occurrence.d.ts.map +1 -0
- package/dist/lifeops/service-helpers-occurrence.js +257 -0
- package/dist/lifeops/service-helpers-occurrence.js.map +1 -0
- package/dist/lifeops/service-helpers-reminder.d.ts +260 -0
- package/dist/lifeops/service-helpers-reminder.d.ts.map +1 -0
- package/dist/lifeops/service-helpers-reminder.js +1186 -0
- package/dist/lifeops/service-helpers-reminder.js.map +1 -0
- package/dist/lifeops/service-mixin-browser.d.ts +31 -0
- package/dist/lifeops/service-mixin-browser.d.ts.map +1 -0
- package/dist/lifeops/service-mixin-browser.js +975 -0
- package/dist/lifeops/service-mixin-browser.js.map +1 -0
- package/dist/lifeops/service-mixin-calendar.d.ts +53 -0
- package/dist/lifeops/service-mixin-calendar.d.ts.map +1 -0
- package/dist/lifeops/service-mixin-calendar.js +68 -0
- package/dist/lifeops/service-mixin-calendar.js.map +1 -0
- package/dist/lifeops/service-mixin-core.d.ts +51 -0
- package/dist/lifeops/service-mixin-core.d.ts.map +1 -0
- package/dist/lifeops/service-mixin-core.js +500 -0
- package/dist/lifeops/service-mixin-core.js.map +1 -0
- package/dist/lifeops/service-mixin-definitions.d.ts +14 -0
- package/dist/lifeops/service-mixin-definitions.d.ts.map +1 -0
- package/dist/lifeops/service-mixin-definitions.js +470 -0
- package/dist/lifeops/service-mixin-definitions.js.map +1 -0
- package/dist/lifeops/service-mixin-discord.d.ts +49 -0
- package/dist/lifeops/service-mixin-discord.d.ts.map +1 -0
- package/dist/lifeops/service-mixin-discord.js +1253 -0
- package/dist/lifeops/service-mixin-discord.js.map +1 -0
- package/dist/lifeops/service-mixin-drive.d.ts +96 -0
- package/dist/lifeops/service-mixin-drive.d.ts.map +1 -0
- package/dist/lifeops/service-mixin-drive.js +213 -0
- package/dist/lifeops/service-mixin-drive.js.map +1 -0
- package/dist/lifeops/service-mixin-email-unsubscribe.d.ts +23 -0
- package/dist/lifeops/service-mixin-email-unsubscribe.d.ts.map +1 -0
- package/dist/lifeops/service-mixin-email-unsubscribe.js +27 -0
- package/dist/lifeops/service-mixin-email-unsubscribe.js.map +1 -0
- package/dist/lifeops/service-mixin-gmail.d.ts +43 -0
- package/dist/lifeops/service-mixin-gmail.d.ts.map +1 -0
- package/dist/lifeops/service-mixin-gmail.js +727 -0
- package/dist/lifeops/service-mixin-gmail.js.map +1 -0
- package/dist/lifeops/service-mixin-goals.d.ts +22 -0
- package/dist/lifeops/service-mixin-goals.d.ts.map +1 -0
- package/dist/lifeops/service-mixin-goals.js +884 -0
- package/dist/lifeops/service-mixin-goals.js.map +1 -0
- package/dist/lifeops/service-mixin-google.d.ts +13 -0
- package/dist/lifeops/service-mixin-google.d.ts.map +1 -0
- package/dist/lifeops/service-mixin-google.js +398 -0
- package/dist/lifeops/service-mixin-google.js.map +1 -0
- package/dist/lifeops/service-mixin-health.d.ts +27 -0
- package/dist/lifeops/service-mixin-health.d.ts.map +1 -0
- package/dist/lifeops/service-mixin-health.js +670 -0
- package/dist/lifeops/service-mixin-health.js.map +1 -0
- package/dist/lifeops/service-mixin-imessage.d.ts +106 -0
- package/dist/lifeops/service-mixin-imessage.d.ts.map +1 -0
- package/dist/lifeops/service-mixin-imessage.js +303 -0
- package/dist/lifeops/service-mixin-imessage.js.map +1 -0
- package/dist/lifeops/service-mixin-inbox.d.ts +55 -0
- package/dist/lifeops/service-mixin-inbox.d.ts.map +1 -0
- package/dist/lifeops/service-mixin-inbox.js +597 -0
- package/dist/lifeops/service-mixin-inbox.js.map +1 -0
- package/dist/lifeops/service-mixin-relationships.d.ts +65 -0
- package/dist/lifeops/service-mixin-relationships.d.ts.map +1 -0
- package/dist/lifeops/service-mixin-relationships.js +150 -0
- package/dist/lifeops/service-mixin-relationships.js.map +1 -0
- package/dist/lifeops/service-mixin-reminders.d.ts +62 -0
- package/dist/lifeops/service-mixin-reminders.d.ts.map +1 -0
- package/dist/lifeops/service-mixin-reminders.js +4003 -0
- package/dist/lifeops/service-mixin-reminders.js.map +1 -0
- package/dist/lifeops/service-mixin-scheduling.d.ts +53 -0
- package/dist/lifeops/service-mixin-scheduling.d.ts.map +1 -0
- package/dist/lifeops/service-mixin-scheduling.js +405 -0
- package/dist/lifeops/service-mixin-scheduling.js.map +1 -0
- package/dist/lifeops/service-mixin-screentime.d.ts +71 -0
- package/dist/lifeops/service-mixin-screentime.d.ts.map +1 -0
- package/dist/lifeops/service-mixin-screentime.js +530 -0
- package/dist/lifeops/service-mixin-screentime.js.map +1 -0
- package/dist/lifeops/service-mixin-signal.d.ts +74 -0
- package/dist/lifeops/service-mixin-signal.d.ts.map +1 -0
- package/dist/lifeops/service-mixin-signal.js +214 -0
- package/dist/lifeops/service-mixin-signal.js.map +1 -0
- package/dist/lifeops/service-mixin-sleep.d.ts +68 -0
- package/dist/lifeops/service-mixin-sleep.d.ts.map +1 -0
- package/dist/lifeops/service-mixin-sleep.js +43 -0
- package/dist/lifeops/service-mixin-sleep.js.map +1 -0
- package/dist/lifeops/service-mixin-status.d.ts +31 -0
- package/dist/lifeops/service-mixin-status.d.ts.map +1 -0
- package/dist/lifeops/service-mixin-status.js +373 -0
- package/dist/lifeops/service-mixin-status.js.map +1 -0
- package/dist/lifeops/service-mixin-subscriptions.d.ts +101 -0
- package/dist/lifeops/service-mixin-subscriptions.d.ts.map +1 -0
- package/dist/lifeops/service-mixin-subscriptions.js +50 -0
- package/dist/lifeops/service-mixin-subscriptions.js.map +1 -0
- package/dist/lifeops/service-mixin-telegram.d.ts +104 -0
- package/dist/lifeops/service-mixin-telegram.d.ts.map +1 -0
- package/dist/lifeops/service-mixin-telegram.js +280 -0
- package/dist/lifeops/service-mixin-telegram.js.map +1 -0
- package/dist/lifeops/service-mixin-travel.d.ts +66 -0
- package/dist/lifeops/service-mixin-travel.d.ts.map +1 -0
- package/dist/lifeops/service-mixin-travel.js +275 -0
- package/dist/lifeops/service-mixin-travel.js.map +1 -0
- package/dist/lifeops/service-mixin-whatsapp.d.ts +96 -0
- package/dist/lifeops/service-mixin-whatsapp.d.ts.map +1 -0
- package/dist/lifeops/service-mixin-whatsapp.js +186 -0
- package/dist/lifeops/service-mixin-whatsapp.js.map +1 -0
- package/dist/lifeops/service-mixin-workflows.d.ts +15 -0
- package/dist/lifeops/service-mixin-workflows.d.ts.map +1 -0
- package/dist/lifeops/service-mixin-workflows.js +710 -0
- package/dist/lifeops/service-mixin-workflows.js.map +1 -0
- package/dist/lifeops/service-mixin-x-read.d.ts +31 -0
- package/dist/lifeops/service-mixin-x-read.d.ts.map +1 -0
- package/dist/lifeops/service-mixin-x-read.js +267 -0
- package/dist/lifeops/service-mixin-x-read.js.map +1 -0
- package/dist/lifeops/service-mixin-x.d.ts +66 -0
- package/dist/lifeops/service-mixin-x.d.ts.map +1 -0
- package/dist/lifeops/service-mixin-x.js +501 -0
- package/dist/lifeops/service-mixin-x.js.map +1 -0
- package/dist/lifeops/service-normalize-connector.d.ts +19 -0
- package/dist/lifeops/service-normalize-connector.d.ts.map +1 -0
- package/dist/lifeops/service-normalize-connector.js +816 -0
- package/dist/lifeops/service-normalize-connector.js.map +1 -0
- package/dist/lifeops/service-normalize-gmail.d.ts +11 -0
- package/dist/lifeops/service-normalize-gmail.d.ts.map +1 -0
- package/dist/lifeops/service-normalize-gmail.js +85 -0
- package/dist/lifeops/service-normalize-gmail.js.map +1 -0
- package/dist/lifeops/service-normalize-task.d.ts +9 -0
- package/dist/lifeops/service-normalize-task.d.ts.map +1 -0
- package/dist/lifeops/service-normalize-task.js +567 -0
- package/dist/lifeops/service-normalize-task.js.map +1 -0
- package/dist/lifeops/service-normalize.d.ts +9 -0
- package/dist/lifeops/service-normalize.d.ts.map +1 -0
- package/dist/lifeops/service-normalize.js +53 -0
- package/dist/lifeops/service-normalize.js.map +1 -0
- package/dist/lifeops/service-types.d.ts +75 -0
- package/dist/lifeops/service-types.d.ts.map +1 -0
- package/dist/lifeops/service-types.js +5 -0
- package/dist/lifeops/service-types.js.map +1 -0
- package/dist/lifeops/service.d.ts +482 -0
- package/dist/lifeops/service.d.ts.map +1 -0
- package/dist/lifeops/service.js +62 -0
- package/dist/lifeops/service.js.map +1 -0
- package/dist/lifeops/signal-runtime-config.d.ts +13 -0
- package/dist/lifeops/signal-runtime-config.d.ts.map +1 -0
- package/dist/lifeops/signal-runtime-config.js +44 -0
- package/dist/lifeops/signal-runtime-config.js.map +1 -0
- package/dist/lifeops/signals/bus.d.ts +78 -0
- package/dist/lifeops/signals/bus.d.ts.map +1 -0
- package/dist/lifeops/signals/bus.js +117 -0
- package/dist/lifeops/signals/bus.js.map +1 -0
- package/dist/lifeops/sql.d.ts +65 -0
- package/dist/lifeops/sql.d.ts.map +1 -0
- package/dist/lifeops/sql.js +182 -0
- package/dist/lifeops/sql.js.map +1 -0
- package/dist/lifeops/stretch-decider.d.ts +73 -0
- package/dist/lifeops/stretch-decider.d.ts.map +1 -0
- package/dist/lifeops/stretch-decider.js +49 -0
- package/dist/lifeops/stretch-decider.js.map +1 -0
- package/dist/lifeops/telemetry-mapping.d.ts +14 -0
- package/dist/lifeops/telemetry-mapping.d.ts.map +1 -0
- package/dist/lifeops/telemetry-mapping.js +115 -0
- package/dist/lifeops/telemetry-mapping.js.map +1 -0
- package/dist/lifeops/telemetry-retention.d.ts +21 -0
- package/dist/lifeops/telemetry-retention.d.ts.map +1 -0
- package/dist/lifeops/telemetry-retention.js +13 -0
- package/dist/lifeops/telemetry-retention.js.map +1 -0
- package/dist/lifeops/time/timezone.d.ts +4 -0
- package/dist/lifeops/time/timezone.d.ts.map +1 -0
- package/dist/lifeops/time/timezone.js +154 -0
- package/dist/lifeops/time/timezone.js.map +1 -0
- package/dist/lifeops/time-util.d.ts +10 -0
- package/dist/lifeops/time-util.d.ts.map +1 -0
- package/dist/lifeops/time-util.js +14 -0
- package/dist/lifeops/time-util.js.map +1 -0
- package/dist/lifeops/time.d.ts +17 -0
- package/dist/lifeops/time.d.ts.map +1 -0
- package/dist/lifeops/time.js +152 -0
- package/dist/lifeops/time.js.map +1 -0
- package/dist/lifeops/travel-booking.types.d.ts +46 -0
- package/dist/lifeops/travel-booking.types.d.ts.map +1 -0
- package/dist/lifeops/travel-booking.types.js +1 -0
- package/dist/lifeops/travel-booking.types.js.map +1 -0
- package/dist/lifeops/triggers/schedule-once.d.ts +19 -0
- package/dist/lifeops/triggers/schedule-once.d.ts.map +1 -0
- package/dist/lifeops/triggers/schedule-once.js +99 -0
- package/dist/lifeops/triggers/schedule-once.js.map +1 -0
- package/dist/lifeops/validate/coding-task-request.d.ts +18 -0
- package/dist/lifeops/validate/coding-task-request.d.ts.map +1 -0
- package/dist/lifeops/validate/coding-task-request.js +16 -0
- package/dist/lifeops/validate/coding-task-request.js.map +1 -0
- package/dist/lifeops/voice/grounded-reply.d.ts +41 -0
- package/dist/lifeops/voice/grounded-reply.d.ts.map +1 -0
- package/dist/lifeops/voice/grounded-reply.js +24 -0
- package/dist/lifeops/voice/grounded-reply.js.map +1 -0
- package/dist/lifeops/voice-affect.d.ts +79 -0
- package/dist/lifeops/voice-affect.d.ts.map +1 -0
- package/dist/lifeops/voice-affect.js +253 -0
- package/dist/lifeops/voice-affect.js.map +1 -0
- package/dist/lifeops/wave1-types.d.ts +125 -0
- package/dist/lifeops/wave1-types.d.ts.map +1 -0
- package/dist/lifeops/wave1-types.js +1 -0
- package/dist/lifeops/wave1-types.js.map +1 -0
- package/dist/lifeops/work-threads/field-evaluator-thread-ops.d.ts +33 -0
- package/dist/lifeops/work-threads/field-evaluator-thread-ops.d.ts.map +1 -0
- package/dist/lifeops/work-threads/field-evaluator-thread-ops.js +226 -0
- package/dist/lifeops/work-threads/field-evaluator-thread-ops.js.map +1 -0
- package/dist/lifeops/work-threads/index.d.ts +3 -0
- package/dist/lifeops/work-threads/index.d.ts.map +1 -0
- package/dist/lifeops/work-threads/index.js +7 -0
- package/dist/lifeops/work-threads/index.js.map +1 -0
- package/dist/lifeops/work-threads/store.d.ts +91 -0
- package/dist/lifeops/work-threads/store.d.ts.map +1 -0
- package/dist/lifeops/work-threads/store.js +245 -0
- package/dist/lifeops/work-threads/store.js.map +1 -0
- package/dist/lifeops/work-threads/types.d.ts +58 -0
- package/dist/lifeops/work-threads/types.d.ts.map +1 -0
- package/dist/lifeops/work-threads/types.js +1 -0
- package/dist/lifeops/work-threads/types.js.map +1 -0
- package/dist/platform/host.d.ts +16 -0
- package/dist/platform/host.d.ts.map +1 -0
- package/dist/platform/host.js +22 -0
- package/dist/platform/host.js.map +1 -0
- package/dist/platform/index.d.ts +3 -0
- package/dist/platform/index.d.ts.map +1 -0
- package/dist/platform/index.js +3 -0
- package/dist/platform/index.js.map +1 -0
- package/dist/platform/lifeops-github.d.ts +15 -0
- package/dist/platform/lifeops-github.d.ts.map +1 -0
- package/dist/platform/lifeops-github.js +146 -0
- package/dist/platform/lifeops-github.js.map +1 -0
- package/dist/plugin.d.ts +106 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +989 -0
- package/dist/plugin.js.map +1 -0
- package/dist/provider.d.ts +4 -0
- package/dist/provider.d.ts.map +1 -0
- package/dist/provider.js +108 -0
- package/dist/provider.js.map +1 -0
- package/dist/providers/activity-profile.d.ts +3 -0
- package/dist/providers/activity-profile.d.ts.map +1 -0
- package/dist/providers/activity-profile.js +140 -0
- package/dist/providers/activity-profile.js.map +1 -0
- package/dist/providers/cross-channel-context.d.ts +29 -0
- package/dist/providers/cross-channel-context.d.ts.map +1 -0
- package/dist/providers/cross-channel-context.js +206 -0
- package/dist/providers/cross-channel-context.js.map +1 -0
- package/dist/providers/first-run.d.ts +22 -0
- package/dist/providers/first-run.d.ts.map +1 -0
- package/dist/providers/first-run.js +93 -0
- package/dist/providers/first-run.js.map +1 -0
- package/dist/providers/health.d.ts +2 -0
- package/dist/providers/health.d.ts.map +1 -0
- package/dist/providers/health.js +14 -0
- package/dist/providers/health.js.map +1 -0
- package/dist/providers/inbox-triage.d.ts +3 -0
- package/dist/providers/inbox-triage.d.ts.map +1 -0
- package/dist/providers/inbox-triage.js +134 -0
- package/dist/providers/inbox-triage.js.map +1 -0
- package/dist/providers/lifeops.d.ts +3 -0
- package/dist/providers/lifeops.d.ts.map +1 -0
- package/dist/providers/lifeops.js +548 -0
- package/dist/providers/lifeops.js.map +1 -0
- package/dist/providers/pending-prompts.d.ts +38 -0
- package/dist/providers/pending-prompts.d.ts.map +1 -0
- package/dist/providers/pending-prompts.js +81 -0
- package/dist/providers/pending-prompts.js.map +1 -0
- package/dist/providers/recent-task-states.d.ts +52 -0
- package/dist/providers/recent-task-states.d.ts.map +1 -0
- package/dist/providers/recent-task-states.js +166 -0
- package/dist/providers/recent-task-states.js.map +1 -0
- package/dist/providers/room-policy.d.ts +16 -0
- package/dist/providers/room-policy.d.ts.map +1 -0
- package/dist/providers/room-policy.js +71 -0
- package/dist/providers/room-policy.js.map +1 -0
- package/dist/providers/work-threads.d.ts +3 -0
- package/dist/providers/work-threads.d.ts.map +1 -0
- package/dist/providers/work-threads.js +97 -0
- package/dist/providers/work-threads.js.map +1 -0
- package/dist/public.d.ts +3 -0
- package/dist/public.d.ts.map +1 -0
- package/dist/public.js +17 -0
- package/dist/public.js.map +1 -0
- package/dist/routes/cloud-features-routes.d.ts +9 -0
- package/dist/routes/cloud-features-routes.d.ts.map +1 -0
- package/dist/routes/cloud-features-routes.js +164 -0
- package/dist/routes/cloud-features-routes.js.map +1 -0
- package/dist/routes/entities.d.ts +14 -0
- package/dist/routes/entities.d.ts.map +1 -0
- package/dist/routes/entities.js +203 -0
- package/dist/routes/entities.js.map +1 -0
- package/dist/routes/lifeops-routes.d.ts +20 -0
- package/dist/routes/lifeops-routes.d.ts.map +1 -0
- package/dist/routes/lifeops-routes.js +2337 -0
- package/dist/routes/lifeops-routes.js.map +1 -0
- package/dist/routes/plugin.d.ts +9 -0
- package/dist/routes/plugin.d.ts.map +1 -0
- package/dist/routes/plugin.js +568 -0
- package/dist/routes/plugin.js.map +1 -0
- package/dist/routes/relationships.d.ts +13 -0
- package/dist/routes/relationships.d.ts.map +1 -0
- package/dist/routes/relationships.js +195 -0
- package/dist/routes/relationships.js.map +1 -0
- package/dist/routes/scheduled-tasks.d.ts +102 -0
- package/dist/routes/scheduled-tasks.d.ts.map +1 -0
- package/dist/routes/scheduled-tasks.js +322 -0
- package/dist/routes/scheduled-tasks.js.map +1 -0
- package/dist/routes/sleep-routes.d.ts +3 -0
- package/dist/routes/sleep-routes.d.ts.map +1 -0
- package/dist/routes/sleep-routes.js +33 -0
- package/dist/routes/sleep-routes.js.map +1 -0
- package/dist/routes/travel-provider-relay-routes.d.ts +2 -0
- package/dist/routes/travel-provider-relay-routes.d.ts.map +1 -0
- package/dist/routes/travel-provider-relay-routes.js +7 -0
- package/dist/routes/travel-provider-relay-routes.js.map +1 -0
- package/dist/routes/website-blocker-routes.d.ts +6 -0
- package/dist/routes/website-blocker-routes.d.ts.map +1 -0
- package/dist/routes/website-blocker-routes.js +218 -0
- package/dist/routes/website-blocker-routes.js.map +1 -0
- package/dist/security/action-confirmation.d.ts +12 -0
- package/dist/security/action-confirmation.d.ts.map +1 -0
- package/dist/security/action-confirmation.js +36 -0
- package/dist/security/action-confirmation.js.map +1 -0
- package/dist/service.d.ts +34 -0
- package/dist/service.d.ts.map +1 -0
- package/dist/service.js +111 -0
- package/dist/service.js.map +1 -0
- package/dist/travel-time/calendar-create.d.ts +17 -0
- package/dist/travel-time/calendar-create.d.ts.map +1 -0
- package/dist/travel-time/calendar-create.js +28 -0
- package/dist/travel-time/calendar-create.js.map +1 -0
- package/dist/travel-time/service.d.ts +114 -0
- package/dist/travel-time/service.d.ts.map +1 -0
- package/dist/travel-time/service.js +209 -0
- package/dist/travel-time/service.js.map +1 -0
- package/dist/types/app-blocker-settings-card.d.ts +2 -0
- package/dist/types/app-blocker-settings-card.d.ts.map +1 -0
- package/dist/types/app-blocker-settings-card.js +1 -0
- package/dist/types/app-blocker-settings-card.js.map +1 -0
- package/dist/types/briefing.d.ts +59 -0
- package/dist/types/briefing.d.ts.map +1 -0
- package/dist/types/briefing.js +1 -0
- package/dist/types/briefing.js.map +1 -0
- package/dist/types/document-request.d.ts +41 -0
- package/dist/types/document-request.d.ts.map +1 -0
- package/dist/types/document-request.js +1 -0
- package/dist/types/document-request.js.map +1 -0
- package/dist/types/index.d.ts +5 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +1 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/website-blocker-settings-card.d.ts +2 -0
- package/dist/types/website-blocker-settings-card.d.ts.map +1 -0
- package/dist/types/website-blocker-settings-card.js +1 -0
- package/dist/types/website-blocker-settings-card.js.map +1 -0
- package/dist/ui.d.ts +13 -0
- package/dist/ui.d.ts.map +1 -0
- package/dist/ui.js +25 -0
- package/dist/ui.js.map +1 -0
- package/dist/utils/format-duration.d.ts +2 -0
- package/dist/utils/format-duration.d.ts.map +1 -0
- package/dist/utils/format-duration.js +13 -0
- package/dist/utils/format-duration.js.map +1 -0
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +3 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/lifeops-url.d.ts +3 -0
- package/dist/utils/lifeops-url.d.ts.map +1 -0
- package/dist/utils/lifeops-url.js +28 -0
- package/dist/utils/lifeops-url.js.map +1 -0
- package/dist/website-blocker/chat-integration/block-activator.d.ts +32 -0
- package/dist/website-blocker/chat-integration/block-activator.d.ts.map +1 -0
- package/dist/website-blocker/chat-integration/block-activator.js +30 -0
- package/dist/website-blocker/chat-integration/block-activator.js.map +1 -0
- package/dist/website-blocker/chat-integration/block-rule-reconciler.d.ts +7 -0
- package/dist/website-blocker/chat-integration/block-rule-reconciler.d.ts.map +1 -0
- package/dist/website-blocker/chat-integration/block-rule-reconciler.js +115 -0
- package/dist/website-blocker/chat-integration/block-rule-reconciler.js.map +1 -0
- package/dist/website-blocker/chat-integration/block-rule-schema.d.ts +39 -0
- package/dist/website-blocker/chat-integration/block-rule-schema.d.ts.map +1 -0
- package/dist/website-blocker/chat-integration/block-rule-schema.js +133 -0
- package/dist/website-blocker/chat-integration/block-rule-schema.js.map +1 -0
- package/dist/website-blocker/chat-integration/block-rule-service.d.ts +21 -0
- package/dist/website-blocker/chat-integration/block-rule-service.d.ts.map +1 -0
- package/dist/website-blocker/chat-integration/block-rule-service.js +230 -0
- package/dist/website-blocker/chat-integration/block-rule-service.js.map +1 -0
- package/dist/website-blocker/chat-integration/harsh-mode-check.d.ts +13 -0
- package/dist/website-blocker/chat-integration/harsh-mode-check.d.ts.map +1 -0
- package/dist/website-blocker/chat-integration/harsh-mode-check.js +22 -0
- package/dist/website-blocker/chat-integration/harsh-mode-check.js.map +1 -0
- package/dist/website-blocker/chat-integration/index.d.ts +5 -0
- package/dist/website-blocker/chat-integration/index.d.ts.map +1 -0
- package/dist/website-blocker/chat-integration/index.js +26 -0
- package/dist/website-blocker/chat-integration/index.js.map +1 -0
- package/dist/website-blocker/proactive-block-bridge.d.ts +75 -0
- package/dist/website-blocker/proactive-block-bridge.d.ts.map +1 -0
- package/dist/website-blocker/proactive-block-bridge.js +154 -0
- package/dist/website-blocker/proactive-block-bridge.js.map +1 -0
- package/dist/website-blocker/public.d.ts +12 -0
- package/dist/website-blocker/public.d.ts.map +1 -0
- package/dist/website-blocker/public.js +51 -0
- package/dist/website-blocker/public.js.map +1 -0
- package/package.json +28 -28
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/lifeops/service-mixin-discord.ts"],"sourcesContent":["import { logger } from \"@elizaos/core\";\nimport type {\n BrowserBridgeCompanionStatus,\n BrowserBridgeTabSummary,\n} from \"@elizaos/plugin-browser\";\nimport {\n captureDiscordDeliveryStatus,\n closeDiscordTab,\n DISCORD_APP_URL,\n type DiscordDesktopCdpStatus,\n type DiscordMessageSearchResult,\n type DiscordTabProbe,\n discordBrowserWorkspaceAvailable,\n emptyDiscordDmInboxProbe,\n ensureDiscordTab,\n getDiscordDesktopCdpStatus,\n probeDiscordCapturedPage,\n probeDiscordTab,\n relaunchDiscordDesktopForCdp,\n searchDiscordMessages,\n sendDiscordViaDesktopCdp,\n} from \"@elizaos/plugin-discord/user-account-scraper\";\nimport type {\n LifeOpsBrowserSession,\n LifeOpsConnectorDegradation,\n LifeOpsConnectorGrant,\n LifeOpsConnectorSide,\n LifeOpsDiscordCapability,\n LifeOpsDiscordConnectorStatus,\n LifeOpsMessagingConnectorReason,\n LifeOpsOwnerBrowserAccessSource,\n LifeOpsOwnerBrowserAccessStatus,\n LifeOpsOwnerBrowserAuthState,\n LifeOpsOwnerBrowserNextAction,\n LifeOpsOwnerBrowserTabState,\n} from \"@elizaos/shared\";\nimport { asRecord, LIFEOPS_DISCORD_CAPABILITIES } from \"@elizaos/shared\";\nimport { createLifeOpsConnectorGrant } from \"./repository.js\";\nimport {\n searchDiscordMessagesWithRuntimeService,\n sendDiscordMessageWithRuntimeService,\n} from \"./runtime-service-delegates.js\";\nimport type { BrowserBridgeService } from \"./service-mixin-browser.js\";\nimport type {\n Constructor,\n LifeOpsServiceBase,\n MixinClass,\n} from \"./service-mixin-core.js\";\nimport { fail } from \"./service-normalize.js\";\nimport { normalizeOptionalConnectorSide } from \"./service-normalize-connector.js\";\n\nconst DISCORD_CONNECTOR_SESSION_TITLE = \"Open Discord for LifeOps\";\nconst DISCORD_CHANNEL_URL_RE = /\\/channels\\/([^/?#]+)\\/([^/?#]+)/;\nconst DISCORD_SEND_SETTLE_MS = 1_500;\nconst FULL_DISCORD_CAPABILITIES = [...LIFEOPS_DISCORD_CAPABILITIES];\n\ntype DiscordPluginServiceLike = {\n isReady?: () => boolean;\n client?: {\n isReady?: () => boolean;\n user?: {\n id?: string;\n username?: string;\n displayName?: string;\n globalName?: string;\n discriminator?: string | null;\n } | null;\n } | null;\n};\n\ntype DiscordMixinDependencies = LifeOpsServiceBase &\n Pick<\n BrowserBridgeService,\n | \"createBrowserSession\"\n | \"getBrowserSession\"\n | \"getBrowserSettings\"\n | \"getCurrentBrowserPage\"\n | \"listBrowserCompanions\"\n | \"listBrowserTabs\"\n >;\n\ntype DiscordSendMessageResult = {\n provider: \"discord\";\n side: LifeOpsConnectorSide;\n channelId: string;\n ok: true;\n deliveryStatus: \"sent\" | \"sending\" | \"failed\" | \"unknown\";\n};\n\ntype DiscordConnectorVerification = {\n provider: \"discord\";\n side: LifeOpsConnectorSide;\n verifiedAt: string;\n status: LifeOpsDiscordConnectorStatus;\n send: {\n ok: boolean;\n error: string | null;\n channelId: string | null;\n message: string;\n deliveryStatus: \"sent\" | \"sending\" | \"failed\" | \"unknown\" | null;\n };\n};\n\nexport interface LifeOpsDiscordService {\n getDiscordConnectorStatus(\n side?: LifeOpsConnectorSide,\n ): Promise<LifeOpsDiscordConnectorStatus>;\n authorizeDiscordConnector(\n side?: LifeOpsConnectorSide,\n source?: LifeOpsOwnerBrowserAccessSource,\n ): Promise<LifeOpsDiscordConnectorStatus>;\n searchDiscordMessages(request: {\n side?: LifeOpsConnectorSide;\n query: string;\n channelId?: string;\n limit?: number;\n }): Promise<DiscordMessageSearchResult[]>;\n captureDiscordDeliveryStatus(\n side?: LifeOpsConnectorSide,\n ): Promise<DiscordMessageSearchResult[]>;\n sendDiscordMessage(request: {\n side?: LifeOpsConnectorSide;\n channelId?: string;\n text: string;\n }): Promise<DiscordSendMessageResult>;\n verifyDiscordConnector(request: {\n side?: LifeOpsConnectorSide;\n channelId?: string;\n sendMessage?: string;\n }): Promise<DiscordConnectorVerification>;\n disconnectDiscord(\n side?: LifeOpsConnectorSide,\n ): Promise<LifeOpsDiscordConnectorStatus>;\n}\n\nfunction getDiscordPluginService(\n runtime: Constructor<LifeOpsServiceBase>[\"prototype\"][\"runtime\"],\n): DiscordPluginServiceLike | null {\n const service = runtime.getService?.(\"discord\") as\n | DiscordPluginServiceLike\n | null\n | undefined;\n return service && typeof service === \"object\" ? service : null;\n}\n\nfunction discordPluginConnected(\n service: DiscordPluginServiceLike | null,\n): boolean {\n try {\n if (typeof service?.isReady === \"function\") {\n return service.isReady();\n }\n if (typeof service?.client?.isReady === \"function\") {\n return service.client.isReady();\n }\n } catch {\n return false;\n }\n return false;\n}\n\nfunction discordPluginIdentity(\n service: DiscordPluginServiceLike | null,\n): LifeOpsDiscordConnectorStatus[\"identity\"] {\n const user = service?.client?.user;\n if (!user?.id && !user?.username) {\n return null;\n }\n return {\n ...(user.id ? { id: user.id } : {}),\n ...(user.username || user.globalName || user.displayName\n ? { username: user.username ?? user.globalName ?? user.displayName }\n : {}),\n ...(user.discriminator ? { discriminator: user.discriminator } : {}),\n };\n}\n\nfunction discordAgentPluginDegradations(\n connected: boolean,\n): LifeOpsConnectorDegradation[] {\n if (connected) {\n return [];\n }\n return [\n {\n axis: \"transport-offline\",\n code: \"discord_plugin_unavailable\",\n message:\n \"Agent-side Discord is served by @elizaos/plugin-discord. Configure and enable the Discord bot connector; LifeOps will not open a separate agent browser session.\",\n retryable: true,\n },\n ];\n}\n\nfunction normalizeDiscordCapabilities(\n capabilities: readonly string[] | null | undefined,\n): LifeOpsDiscordCapability[] {\n return (capabilities ?? []).filter(\n (candidate): candidate is LifeOpsDiscordCapability =>\n candidate === \"discord.read\" || candidate === \"discord.send\",\n );\n}\n\nfunction sameStringList(left: readonly string[], right: readonly string[]) {\n return (\n left.length === right.length &&\n left.every((value, index) => value === right[index])\n );\n}\n\nfunction isDiscordHost(url: string): boolean {\n try {\n const u = new URL(url);\n return u.hostname === \"discord.com\" || u.hostname.endsWith(\".discord.com\");\n } catch {\n return false;\n }\n}\n\nfunction discordChannelIdFromUrl(\n url: string | null | undefined,\n): string | null {\n if (!url) return null;\n const match = url.match(DISCORD_CHANNEL_URL_RE);\n const channelId = match?.[2]?.trim();\n return channelId && channelId.length > 0 ? channelId : null;\n}\n\nfunction selectedDiscordChannelIdFromStatus(\n status: LifeOpsDiscordConnectorStatus,\n): string | null {\n if (status.dmInbox.selectedChannelId) {\n return status.dmInbox.selectedChannelId;\n }\n for (const access of status.browserAccess ?? []) {\n const channelId = discordChannelIdFromUrl(access.currentUrl);\n if (channelId) return channelId;\n }\n return null;\n}\n\nfunction memoryToDiscordMessageSearchResult(\n memory: unknown,\n): DiscordMessageSearchResult {\n const record =\n memory && typeof memory === \"object\"\n ? (memory as Record<string, unknown>)\n : {};\n const content =\n record.content && typeof record.content === \"object\"\n ? (record.content as Record<string, unknown>)\n : {};\n const metadata =\n record.metadata && typeof record.metadata === \"object\"\n ? (record.metadata as Record<string, unknown>)\n : {};\n const sender =\n metadata.sender && typeof metadata.sender === \"object\"\n ? (metadata.sender as Record<string, unknown>)\n : {};\n const createdAt = Number(record.createdAt);\n return {\n id:\n typeof metadata.messageId === \"string\"\n ? metadata.messageId\n : typeof record.id === \"string\"\n ? record.id\n : null,\n content: typeof content.text === \"string\" ? content.text : \"\",\n authorName:\n typeof content.name === \"string\"\n ? content.name\n : typeof sender.username === \"string\"\n ? sender.username\n : null,\n guildId:\n typeof metadata.discordGuildId === \"string\"\n ? metadata.discordGuildId\n : null,\n channelId:\n typeof metadata.discordChannelId === \"string\"\n ? metadata.discordChannelId\n : typeof metadata.channelId === \"string\"\n ? metadata.channelId\n : null,\n timestamp: Number.isFinite(createdAt)\n ? new Date(createdAt).toISOString()\n : null,\n deliveryStatus: \"unknown\",\n };\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nfunction identityFromProbe(\n probe: DiscordTabProbe | null,\n pluginIdentity: Record<string, unknown> | null,\n): LifeOpsDiscordConnectorStatus[\"identity\"] {\n if (probe?.loggedIn && probe.identity.username) {\n return {\n id: probe.identity.id ?? undefined,\n username: probe.identity.username,\n discriminator: probe.identity.discriminator ?? undefined,\n };\n }\n if (pluginIdentity && Object.keys(pluginIdentity).length > 0) {\n return pluginIdentity as LifeOpsDiscordConnectorStatus[\"identity\"];\n }\n return null;\n}\n\nfunction workspaceReasonFor(args: {\n available: boolean;\n loggedIn: boolean;\n hasGrant: boolean;\n hasTab: boolean;\n}): LifeOpsMessagingConnectorReason {\n if (!args.available) return \"disconnected\";\n if (args.loggedIn) return \"connected\";\n if (args.hasTab || args.hasGrant) return \"pairing\";\n return \"disconnected\";\n}\n\nfunction browserReasonFor(args: {\n available: boolean;\n loggedIn: boolean;\n authPending: boolean;\n inProgress: boolean;\n hasGrant: boolean;\n hasDiscordTab: boolean;\n}): LifeOpsMessagingConnectorReason {\n if (!args.available) return \"disconnected\";\n if (args.loggedIn) return \"connected\";\n if (args.authPending) return \"auth_pending\";\n if (args.inProgress || args.hasDiscordTab || args.hasGrant) return \"pairing\";\n return \"disconnected\";\n}\n\nfunction tabIdFromGrant(grant: LifeOpsConnectorGrant | null): string | null {\n if (!grant) return null;\n const raw = (grant.metadata as Record<string, unknown> | undefined)?.tabId;\n return typeof raw === \"string\" && raw.length > 0 ? raw : null;\n}\n\nfunction sessionIdFromGrant(\n grant: LifeOpsConnectorGrant | null,\n): string | null {\n if (!grant) return null;\n const raw = (grant.metadata as Record<string, unknown> | undefined)\n ?.sessionId;\n return typeof raw === \"string\" && raw.length > 0 ? raw : null;\n}\n\nfunction companionIdFromGrant(\n grant: LifeOpsConnectorGrant | null,\n): string | null {\n if (!grant) return null;\n const raw = (grant.metadata as Record<string, unknown> | undefined)\n ?.companionId;\n return typeof raw === \"string\" && raw.length > 0 ? raw : null;\n}\n\nfunction companionKey(args: { browser: string; profileId: string }): string {\n return `${args.browser}:${args.profileId}`;\n}\n\nfunction companionMap(\n companions: readonly BrowserBridgeCompanionStatus[],\n): Map<string, BrowserBridgeCompanionStatus> {\n return new Map(\n companions.map((companion) => [\n companionKey({\n browser: companion.browser,\n profileId: companion.profileId,\n }),\n companion,\n ]),\n );\n}\n\nfunction sortCompanionsByRecency(\n companions: readonly BrowserBridgeCompanionStatus[],\n): BrowserBridgeCompanionStatus[] {\n return [...companions].sort((left, right) => {\n const leftMs = Date.parse(left.lastSeenAt ?? \"\");\n const rightMs = Date.parse(right.lastSeenAt ?? \"\");\n if (\n Number.isFinite(leftMs) &&\n Number.isFinite(rightMs) &&\n leftMs !== rightMs\n ) {\n return rightMs - leftMs;\n }\n if (\n left.lastSeenAt &&\n right.lastSeenAt &&\n left.lastSeenAt !== right.lastSeenAt\n ) {\n return right.lastSeenAt.localeCompare(left.lastSeenAt);\n }\n return left.id.localeCompare(right.id);\n });\n}\n\nfunction pickNewestDiscordTab(\n tabs: readonly BrowserBridgeTabSummary[],\n): BrowserBridgeTabSummary | null {\n return (\n [...tabs]\n .filter((tab) => isDiscordHost(tab.url))\n .sort((left, right) => {\n if (left.focusedActive !== right.focusedActive) {\n return left.focusedActive ? -1 : 1;\n }\n if (left.activeInWindow !== right.activeInWindow) {\n return left.activeInWindow ? -1 : 1;\n }\n const leftMs = Date.parse(left.lastFocusedAt ?? left.lastSeenAt);\n const rightMs = Date.parse(right.lastFocusedAt ?? right.lastSeenAt);\n if (\n Number.isFinite(leftMs) &&\n Number.isFinite(rightMs) &&\n leftMs !== rightMs\n ) {\n return rightMs - leftMs;\n }\n return right.lastSeenAt.localeCompare(left.lastSeenAt);\n })[0] ?? null\n );\n}\n\nfunction parseSessionProbe(\n session: LifeOpsBrowserSession | null,\n): DiscordTabProbe | null {\n if (!session) return null;\n const result = asRecord(session.result);\n if (!result) return null;\n const actionResults = asRecord(result.actionResults) ?? result;\n let pageUrl: string | null = null;\n let pageTitle: string | null = null;\n let mainText: string | null = null;\n let links: Array<{ text: string; href: string }> = [];\n let forms: Array<{ action: string | null; fields: string[] }> = [];\n\n for (const action of session.actions) {\n const entry = asRecord(actionResults[action.id]);\n if (!entry) continue;\n if (action.kind === \"open\") {\n pageUrl =\n typeof entry.openedUrl === \"string\" && entry.openedUrl.length > 0\n ? entry.openedUrl\n : pageUrl;\n } else if (action.kind === \"navigate\") {\n pageUrl =\n typeof entry.navigatedUrl === \"string\" && entry.navigatedUrl.length > 0\n ? entry.navigatedUrl\n : pageUrl;\n } else if (action.kind === \"read_page\") {\n pageUrl =\n typeof entry.url === \"string\" && entry.url.length > 0\n ? entry.url\n : pageUrl;\n pageTitle =\n typeof entry.title === \"string\" && entry.title.length > 0\n ? entry.title\n : pageTitle;\n mainText =\n typeof entry.mainText === \"string\" && entry.mainText.length > 0\n ? entry.mainText\n : mainText;\n } else if (action.kind === \"extract_links\") {\n const candidateLinks = Array.isArray(entry.links) ? entry.links : [];\n links = candidateLinks.filter(\n (candidate): candidate is { text: string; href: string } =>\n Boolean(candidate) &&\n typeof candidate === \"object\" &&\n typeof (candidate as { href?: unknown }).href === \"string\" &&\n typeof (candidate as { text?: unknown }).text === \"string\",\n );\n } else if (action.kind === \"extract_forms\") {\n const candidateForms = Array.isArray(entry.forms) ? entry.forms : [];\n forms = candidateForms.filter(\n (candidate): candidate is { action: string | null; fields: string[] } =>\n Boolean(candidate) &&\n typeof candidate === \"object\" &&\n Array.isArray((candidate as { fields?: unknown }).fields),\n );\n }\n }\n\n if (!pageUrl) return null;\n return probeDiscordCapturedPage({\n url: pageUrl,\n title: pageTitle,\n mainText,\n links,\n forms,\n });\n}\n\nfunction sessionError(session: LifeOpsBrowserSession | null): string | null {\n if (!session || session.status !== \"failed\") return null;\n const result = asRecord(session.result);\n const error = result?.error;\n return typeof error === \"string\" && error.trim().length > 0\n ? error.trim()\n : null;\n}\n\nfunction siteAccessAllowsDiscord(\n companion: BrowserBridgeCompanionStatus | null,\n hasDiscordPage: boolean,\n): boolean | null {\n if (!companion) {\n return null;\n }\n if (hasDiscordPage) {\n return true;\n }\n if (companion.permissions.allOrigins) {\n return true;\n }\n return companion.permissions.grantedOrigins.some((origin) =>\n isDiscordHost(origin),\n );\n}\n\nfunction browserAuthStateFromProbe(\n probe: DiscordTabProbe | null,\n): LifeOpsOwnerBrowserAuthState {\n if (probe?.loggedIn === true) {\n return \"logged_in\";\n }\n if (probe?.loggedIn === false && probe.url && isDiscordHost(probe.url)) {\n return \"logged_out\";\n }\n return \"unknown\";\n}\n\nfunction browserTabState(args: {\n probe: DiscordTabProbe | null;\n hasDiscordTab: boolean;\n}): LifeOpsOwnerBrowserTabState {\n if (args.probe?.dmInbox.visible) {\n return \"dm_inbox_visible\";\n }\n if (args.probe?.url && isDiscordHost(args.probe.url)) {\n return \"discord_open\";\n }\n if (args.hasDiscordTab) {\n return \"background_discord\";\n }\n return \"missing\";\n}\n\nfunction browserBridgeAccessStatus(args: {\n active: boolean;\n settingsEnabled: boolean;\n trackingEnabled: boolean;\n paused: boolean;\n canControl: boolean;\n companion: BrowserBridgeCompanionStatus | null;\n hasAnyCompanion: boolean;\n hasConnectedCompanion: boolean;\n probe: DiscordTabProbe | null;\n hasDiscordTab: boolean;\n siteAccessOk: boolean | null;\n}): LifeOpsOwnerBrowserAccessStatus {\n const authState = browserAuthStateFromProbe(args.probe);\n const tabState = browserTabState({\n probe: args.probe,\n hasDiscordTab: args.hasDiscordTab,\n });\n\n let nextAction: LifeOpsOwnerBrowserNextAction = \"none\";\n\n if (!args.settingsEnabled || !args.trackingEnabled || args.paused) {\n nextAction = \"enable_browser_access\";\n } else if (!args.hasAnyCompanion) {\n nextAction = \"connect_browser\";\n } else if (!args.hasConnectedCompanion) {\n nextAction = \"open_extension_popup\";\n } else if (authState === \"logged_out\") {\n nextAction = \"log_in\";\n } else if (!args.canControl && tabState === \"missing\") {\n nextAction = \"enable_browser_control\";\n } else if (!args.canControl && tabState !== \"dm_inbox_visible\") {\n nextAction = \"focus_dm_inbox_manually\";\n } else if (tabState === \"missing\") {\n nextAction = \"open_discord\";\n } else if (authState === \"logged_in\" && tabState !== \"dm_inbox_visible\") {\n nextAction = \"open_dm_inbox\";\n }\n\n if (args.siteAccessOk === false && nextAction === \"none\") {\n nextAction = \"open_discord\";\n }\n\n return {\n source: \"lifeops_browser\",\n active: args.active,\n available:\n args.settingsEnabled &&\n args.trackingEnabled &&\n !args.paused &&\n args.hasConnectedCompanion,\n browser: args.companion?.browser ?? null,\n profileId: args.companion?.profileId ?? null,\n profileLabel: args.companion?.profileLabel ?? null,\n companionId: args.companion?.id ?? null,\n companionLabel: args.companion?.label ?? null,\n canControl: args.canControl,\n siteAccessOk: args.siteAccessOk,\n currentUrl: args.probe?.url ?? null,\n tabState,\n authState,\n nextAction,\n };\n}\n\nfunction desktopBrowserAccessStatus(args: {\n active: boolean;\n available: boolean;\n probe: DiscordTabProbe | null;\n hasTab: boolean;\n}): LifeOpsOwnerBrowserAccessStatus {\n const authState = browserAuthStateFromProbe(args.probe);\n const tabState = browserTabState({\n probe: args.probe,\n hasDiscordTab: args.hasTab,\n });\n\n let nextAction: LifeOpsOwnerBrowserNextAction = \"none\";\n\n if (!args.available) {\n nextAction = \"open_desktop_browser\";\n } else if (authState === \"logged_out\") {\n nextAction = \"log_in\";\n } else if (tabState === \"missing\") {\n nextAction = \"open_discord\";\n } else if (authState === \"logged_in\" && tabState !== \"dm_inbox_visible\") {\n nextAction = \"open_dm_inbox\";\n }\n\n return {\n source: \"desktop_browser\",\n active: args.active,\n available: args.available,\n browser: null,\n profileId: null,\n profileLabel: null,\n companionId: null,\n companionLabel: null,\n canControl: args.available,\n siteAccessOk: args.available ? true : null,\n currentUrl: args.probe?.url ?? null,\n tabState,\n authState,\n nextAction,\n };\n}\n\nfunction discordDesktopAccessStatus(\n state: DiscordDesktopCdpStatus,\n): LifeOpsOwnerBrowserAccessStatus {\n const probe = state.probe;\n const authState = browserAuthStateFromProbe(probe);\n const tabState = browserTabState({\n probe,\n hasDiscordTab:\n Boolean(state.targetUrl && isDiscordHost(state.targetUrl)) ||\n state.cdpAvailable,\n });\n\n let nextAction: LifeOpsOwnerBrowserNextAction = \"none\";\n if (state.supported && !state.cdpAvailable) {\n nextAction = \"relaunch_discord\";\n } else if (authState === \"logged_out\") {\n nextAction = \"log_in\";\n } else if (tabState === \"missing\") {\n nextAction = \"open_discord\";\n } else if (authState === \"logged_in\" && tabState !== \"dm_inbox_visible\") {\n nextAction = \"open_dm_inbox\";\n }\n\n return {\n source: \"discord_desktop\",\n active: state.cdpAvailable,\n available: state.cdpAvailable,\n browser: null,\n profileId: null,\n profileLabel: null,\n companionId: null,\n companionLabel: null,\n canControl: state.cdpAvailable,\n siteAccessOk: state.cdpAvailable ? true : null,\n currentUrl: probe?.url ?? state.targetUrl,\n tabState,\n authState,\n nextAction,\n };\n}\n\nfunction discordDesktopReasonFor(args: {\n available: boolean;\n loggedIn: boolean;\n hasGrant: boolean;\n hasDiscordTarget: boolean;\n}): LifeOpsMessagingConnectorReason {\n if (!args.available) return \"disconnected\";\n if (args.loggedIn) return \"connected\";\n if (args.hasDiscordTarget || args.hasGrant) return \"pairing\";\n return \"disconnected\";\n}\n\n/** @internal */\nexport function withDiscord<TBase extends Constructor<LifeOpsServiceBase>>(\n Base: TBase,\n): MixinClass<TBase, LifeOpsDiscordService> {\n const DiscordBase = Base as unknown as Constructor<DiscordMixinDependencies>;\n\n class LifeOpsDiscordServiceMixin extends DiscordBase {\n async lifeOpsDiscordProbeTab(\n tabId: string | null,\n ): Promise<DiscordTabProbe | null> {\n if (!tabId) return null;\n try {\n return await probeDiscordTab(tabId);\n } catch (error) {\n logger.debug(\n `[lifeops-discord] probe failed for tab ${tabId}: ${String(error)}`,\n );\n return null;\n }\n }\n\n async lifeOpsDiscordGetBrowserSessionById(\n sessionId: string | null,\n ): Promise<LifeOpsBrowserSession | null> {\n if (!sessionId) return null;\n try {\n return await this.getBrowserSession(sessionId);\n } catch {\n return null;\n }\n }\n\n async lifeOpsDiscordGetOwnerBrowserDiscordState(\n grant: LifeOpsConnectorGrant | null,\n ): Promise<{\n available: boolean;\n settingsEnabled: boolean;\n trackingEnabled: boolean;\n paused: boolean;\n canControl: boolean;\n selectedCompanion: BrowserBridgeCompanionStatus | null;\n hasAnyCompanion: boolean;\n hasConnectedCompanion: boolean;\n discordTab: BrowserBridgeTabSummary | null;\n currentPageUrl: string | null;\n probe: DiscordTabProbe | null;\n session: LifeOpsBrowserSession | null;\n lastError: string | null;\n reason: LifeOpsMessagingConnectorReason;\n }> {\n const settings = await this.getBrowserSettings();\n const allCompanions = sortCompanionsByRecency(\n await this.listBrowserCompanions(),\n );\n const connectedCompanions = allCompanions.filter(\n (companion) => companion.connectionState === \"connected\",\n );\n const paused = this.isBrowserPaused(settings);\n const trackingEnabled = settings.trackingMode !== \"off\";\n const settingsEnabled = settings.enabled;\n\n const available =\n settingsEnabled &&\n trackingEnabled &&\n !paused &&\n connectedCompanions.length > 0;\n\n const tabs = await this.listBrowserTabs();\n const currentPage = await this.getCurrentBrowserPage();\n const currentPageProbe =\n currentPage?.url && isDiscordHost(currentPage.url)\n ? probeDiscordCapturedPage(currentPage)\n : null;\n const discordTab = pickNewestDiscordTab(tabs);\n const session = await this.lifeOpsDiscordGetBrowserSessionById(\n sessionIdFromGrant(grant),\n );\n const sessionProbe = parseSessionProbe(session);\n const probe =\n currentPageProbe ??\n (discordTab &&\n (session?.status === \"done\" ||\n session?.status === \"queued\" ||\n session?.status === \"running\" ||\n session?.status === \"awaiting_confirmation\")\n ? sessionProbe\n : null);\n const companionByKey = companionMap(connectedCompanions);\n let selectedCompanion: BrowserBridgeCompanionStatus | null = null;\n if (currentPage) {\n selectedCompanion =\n companionByKey.get(\n companionKey({\n browser: currentPage.browser,\n profileId: currentPage.profileId,\n }),\n ) ?? null;\n }\n if (!selectedCompanion && discordTab) {\n selectedCompanion =\n companionByKey.get(\n companionKey({\n browser: discordTab.browser,\n profileId: discordTab.profileId,\n }),\n ) ?? null;\n }\n const grantedCompanionId = companionIdFromGrant(grant);\n if (!selectedCompanion && grantedCompanionId) {\n selectedCompanion =\n connectedCompanions.find(\n (companion) => companion.id === grantedCompanionId,\n ) ?? null;\n }\n if (!selectedCompanion) {\n selectedCompanion = connectedCompanions.at(0) ?? null;\n }\n if (!selectedCompanion && grantedCompanionId) {\n selectedCompanion =\n allCompanions.find(\n (companion) => companion.id === grantedCompanionId,\n ) ?? null;\n }\n selectedCompanion ??= allCompanions.at(0) ?? null;\n\n const reason = browserReasonFor({\n available,\n loggedIn: probe?.loggedIn === true,\n authPending:\n probe?.loggedIn === false &&\n Boolean(probe.url && isDiscordHost(probe.url)),\n inProgress:\n session?.status === \"queued\" ||\n session?.status === \"running\" ||\n session?.status === \"awaiting_confirmation\",\n hasGrant: Boolean(grant),\n hasDiscordTab: Boolean(discordTab),\n });\n\n return {\n available,\n settingsEnabled,\n trackingEnabled,\n paused,\n canControl: settings.allowBrowserControl,\n selectedCompanion,\n hasAnyCompanion: allCompanions.length > 0,\n hasConnectedCompanion: connectedCompanions.length > 0,\n discordTab,\n currentPageUrl: currentPage?.url ?? null,\n probe,\n session,\n lastError: sessionError(session),\n reason,\n };\n }\n\n async lifeOpsDiscordBuildWorkspaceStatus(\n normalizedSide: LifeOpsConnectorSide,\n grant: LifeOpsConnectorGrant | null,\n ): Promise<LifeOpsDiscordConnectorStatus> {\n const available = discordBrowserWorkspaceAvailable();\n const tabId = tabIdFromGrant(grant);\n const probe = available ? await this.lifeOpsDiscordProbeTab(tabId) : null;\n const loggedIn = probe?.loggedIn === true;\n const browserAccess = [\n desktopBrowserAccessStatus({\n active: available,\n available,\n probe,\n hasTab: Boolean(tabId),\n }),\n ];\n const capabilities =\n loggedIn || probe?.dmInbox.visible\n ? FULL_DISCORD_CAPABILITIES\n : normalizeDiscordCapabilities(grant?.capabilities);\n const identity = identityFromProbe(probe, grant?.identity ?? null);\n const statusGrant =\n loggedIn || probe?.dmInbox.visible\n ? await this.lifeOpsDiscordUpsertGrantForActiveSession({\n side: normalizedSide,\n grant,\n identity: identity ?? {},\n capabilities,\n metadata: { tabId },\n })\n : grant;\n\n return {\n provider: \"discord\",\n side: normalizedSide,\n available,\n connected: loggedIn,\n reason: workspaceReasonFor({\n available,\n loggedIn,\n hasGrant: Boolean(grant),\n hasTab: Boolean(tabId),\n }),\n identity,\n dmInbox: probe?.dmInbox ?? emptyDiscordDmInboxProbe(),\n grantedCapabilities: capabilities,\n lastError: null,\n tabId,\n browserAccess,\n grant: statusGrant,\n };\n }\n\n async lifeOpsDiscordUpsertGrantForActiveSession(args: {\n side: LifeOpsConnectorSide;\n grant: LifeOpsConnectorGrant | null;\n identity: Record<string, unknown>;\n capabilities: readonly LifeOpsDiscordCapability[];\n metadata?: Record<string, unknown>;\n }): Promise<LifeOpsConnectorGrant> {\n const capabilities = normalizeDiscordCapabilities(args.capabilities);\n const metadata = {\n ...(args.grant?.metadata ?? {}),\n ...(args.metadata ?? {}),\n };\n const existing = args.grant;\n if (\n existing &&\n sameStringList(\n normalizeDiscordCapabilities(existing.capabilities),\n capabilities,\n ) &&\n JSON.stringify(existing.identity) === JSON.stringify(args.identity) &&\n JSON.stringify(existing.metadata) === JSON.stringify(metadata)\n ) {\n return existing;\n }\n\n const now = new Date().toISOString();\n const grant = existing\n ? {\n ...existing,\n identity: args.identity,\n capabilities,\n metadata,\n lastRefreshAt: now,\n updatedAt: now,\n }\n : createLifeOpsConnectorGrant({\n agentId: this.agentId(),\n provider: \"discord\",\n identity: args.identity,\n grantedScopes: [],\n capabilities,\n tokenRef: null,\n mode: \"local\",\n side: args.side,\n metadata,\n lastRefreshAt: now,\n });\n\n await this.repository.upsertConnectorGrant(grant);\n return grant;\n }\n\n async getDiscordConnectorStatus(\n side?: LifeOpsConnectorSide,\n ): Promise<LifeOpsDiscordConnectorStatus> {\n const normalizedSide =\n normalizeOptionalConnectorSide(side, \"side\") ?? \"owner\";\n if (normalizedSide === \"agent\") {\n const pluginService = getDiscordPluginService(this.runtime);\n const connected = discordPluginConnected(pluginService);\n const degradations = discordAgentPluginDegradations(connected);\n return {\n provider: \"discord\",\n side: normalizedSide,\n available: connected,\n connected,\n reason: connected ? \"connected\" : \"disconnected\",\n identity: discordPluginIdentity(pluginService),\n dmInbox: emptyDiscordDmInboxProbe(),\n grantedCapabilities: connected ? FULL_DISCORD_CAPABILITIES : [],\n lastError: connected\n ? null\n : \"Discord plugin is not connected for the agent side.\",\n tabId: null,\n browserAccess: [],\n grant: null,\n ...(degradations.length > 0 ? { degradations } : {}),\n };\n }\n\n const grant = await this.repository.getConnectorGrant(\n this.agentId(),\n \"discord\",\n \"local\",\n normalizedSide,\n );\n if (normalizedSide === \"owner\") {\n const browserState =\n await this.lifeOpsDiscordGetOwnerBrowserDiscordState(grant);\n const discordDesktopState = await getDiscordDesktopCdpStatus();\n const workspaceAvailable = discordBrowserWorkspaceAvailable();\n const workspaceTabId = tabIdFromGrant(grant);\n const workspaceProbe = workspaceAvailable\n ? await this.lifeOpsDiscordProbeTab(workspaceTabId)\n : null;\n const probe = browserState.probe;\n const connected = probe?.loggedIn === true;\n const onDiscordPage =\n Boolean(\n browserState.currentPageUrl &&\n isDiscordHost(browserState.currentPageUrl),\n ) || Boolean(browserState.discordTab);\n const browserAccess = [\n discordDesktopAccessStatus(discordDesktopState),\n browserBridgeAccessStatus({\n active: browserState.available,\n settingsEnabled: browserState.settingsEnabled,\n trackingEnabled: browserState.trackingEnabled,\n paused: browserState.paused,\n canControl: browserState.canControl,\n companion: browserState.selectedCompanion,\n hasAnyCompanion: browserState.hasAnyCompanion,\n hasConnectedCompanion: browserState.hasConnectedCompanion,\n probe,\n hasDiscordTab: onDiscordPage,\n siteAccessOk: siteAccessAllowsDiscord(\n browserState.selectedCompanion,\n onDiscordPage || Boolean(browserState.discordTab),\n ),\n }),\n desktopBrowserAccessStatus({\n active: !browserState.available && workspaceAvailable,\n available: workspaceAvailable,\n probe: workspaceProbe,\n hasTab: Boolean(workspaceTabId),\n }),\n ];\n const desktopProbe = discordDesktopState.probe;\n const desktopDmInboxVisible = desktopProbe?.dmInbox.visible === true;\n const desktopConnected =\n desktopProbe?.loggedIn === true || desktopDmInboxVisible;\n if (\n discordDesktopState.cdpAvailable &&\n (desktopConnected || !browserState.available)\n ) {\n const capabilities =\n desktopConnected || desktopProbe?.dmInbox.visible\n ? FULL_DISCORD_CAPABILITIES\n : normalizeDiscordCapabilities(grant?.capabilities);\n const identity = identityFromProbe(\n desktopProbe,\n grant?.identity ?? null,\n );\n const statusGrant = desktopConnected\n ? await this.lifeOpsDiscordUpsertGrantForActiveSession({\n side: normalizedSide,\n grant,\n identity: identity ?? {},\n capabilities,\n metadata: {\n source: \"discord_desktop\",\n cdpPort: discordDesktopState.port,\n tabId: workspaceTabId,\n sessionId: null,\n companionId: null,\n },\n })\n : grant;\n return {\n provider: \"discord\",\n side: normalizedSide,\n available: true,\n connected: desktopConnected,\n reason: discordDesktopReasonFor({\n available: true,\n loggedIn: desktopConnected,\n hasGrant: Boolean(grant),\n hasDiscordTarget: Boolean(discordDesktopState.targetUrl),\n }),\n identity,\n dmInbox: desktopProbe?.dmInbox ?? emptyDiscordDmInboxProbe(),\n grantedCapabilities: capabilities,\n lastError: discordDesktopState.lastError,\n tabId: tabIdFromGrant(grant),\n browserAccess,\n grant: statusGrant,\n };\n }\n if (browserState.available) {\n const capabilities =\n connected || probe?.dmInbox.visible\n ? FULL_DISCORD_CAPABILITIES\n : [];\n const identity = identityFromProbe(probe, grant?.identity ?? null);\n const statusGrant =\n connected || probe?.dmInbox.visible\n ? await this.lifeOpsDiscordUpsertGrantForActiveSession({\n side: normalizedSide,\n grant,\n identity: identity ?? {},\n capabilities,\n metadata: {\n source: \"lifeops_browser\",\n tabId: workspaceTabId,\n sessionId: sessionIdFromGrant(grant),\n companionId: browserState.selectedCompanion?.id ?? null,\n browser: browserState.selectedCompanion?.browser ?? null,\n profileId:\n browserState.selectedCompanion?.profileId ?? null,\n },\n })\n : grant;\n return {\n provider: \"discord\",\n side: normalizedSide,\n available: true,\n connected,\n reason: browserState.reason,\n identity,\n dmInbox: probe?.dmInbox ?? emptyDiscordDmInboxProbe(),\n grantedCapabilities: capabilities,\n lastError: browserState.lastError,\n tabId: tabIdFromGrant(grant),\n browserAccess,\n grant: statusGrant,\n };\n }\n const workspaceStatus = await this.lifeOpsDiscordBuildWorkspaceStatus(\n normalizedSide,\n grant,\n );\n return {\n ...workspaceStatus,\n browserAccess,\n };\n }\n\n return this.lifeOpsDiscordBuildWorkspaceStatus(normalizedSide, grant);\n }\n\n /**\n * Open or focus Discord through the owner browser path so LifeOps can\n * verify login state and DM visibility, falling back to the desktop\n * browser workspace when no browser companion is connected.\n */\n async authorizeDiscordConnector(\n side?: LifeOpsConnectorSide,\n source?: LifeOpsOwnerBrowserAccessSource,\n ): Promise<LifeOpsDiscordConnectorStatus> {\n const normalizedSide =\n normalizeOptionalConnectorSide(side, \"side\") ?? \"owner\";\n if (normalizedSide === \"agent\") {\n return this.getDiscordConnectorStatus(normalizedSide);\n }\n\n const existing = await this.repository.getConnectorGrant(\n this.agentId(),\n \"discord\",\n \"local\",\n normalizedSide,\n );\n\n if (source === \"discord_desktop\") {\n if (normalizedSide !== \"owner\") {\n fail(\n 400,\n \"Discord Desktop control is only available for the owner side.\",\n );\n }\n const state = await relaunchDiscordDesktopForCdp();\n const probe = state.probe;\n const loggedIn = probe?.loggedIn === true;\n const capabilities =\n loggedIn || probe?.dmInbox.visible\n ? FULL_DISCORD_CAPABILITIES\n : (existing?.capabilities ?? []);\n const identity =\n identityFromProbe(probe, existing?.identity ?? null) ?? {};\n const metadata = {\n ...(existing?.metadata ?? {}),\n source: \"discord_desktop\",\n cdpPort: state.port,\n tabId: tabIdFromGrant(existing),\n sessionId: null,\n companionId: null,\n };\n\n const grant = existing\n ? {\n ...existing,\n identity,\n capabilities,\n metadata,\n updatedAt: new Date().toISOString(),\n }\n : createLifeOpsConnectorGrant({\n agentId: this.agentId(),\n provider: \"discord\",\n identity,\n grantedScopes: [],\n capabilities,\n tokenRef: null,\n mode: \"local\",\n side: normalizedSide,\n metadata,\n lastRefreshAt: new Date().toISOString(),\n });\n\n await this.repository.upsertConnectorGrant(grant);\n await this.recordConnectorAudit(\n `discord:${normalizedSide}`,\n \"discord desktop connector authorized\",\n { side: normalizedSide },\n {\n cdpPort: state.port,\n loggedIn,\n targetUrl: state.targetUrl,\n },\n );\n\n return this.getDiscordConnectorStatus(normalizedSide);\n }\n\n if (normalizedSide === \"owner\" && source !== \"desktop_browser\") {\n const browserState =\n await this.lifeOpsDiscordGetOwnerBrowserDiscordState(existing);\n const hasConnectedBrowserPath =\n browserState.hasConnectedCompanion ||\n Boolean(\n browserState.currentPageUrl &&\n isDiscordHost(browserState.currentPageUrl),\n ) ||\n Boolean(browserState.discordTab) ||\n Boolean(browserState.probe);\n if (hasConnectedBrowserPath) {\n const probe = browserState.probe;\n const connected = probe?.loggedIn === true;\n const dmInboxVisible = probe?.dmInbox.visible === true;\n const identity =\n identityFromProbe(probe, existing?.identity ?? null) ?? {};\n const onDiscordPage = Boolean(probe?.url && isDiscordHost(probe.url));\n const onDiscordDmPage = Boolean(\n probe?.url?.includes(\"/channels/@me\"),\n );\n const needsDiscordOpen = !connected && !onDiscordPage;\n const needsDmInspection = connected && !dmInboxVisible;\n\n if (\n !browserState.canControl &&\n !browserState.discordTab &&\n !onDiscordPage\n ) {\n fail(\n 409,\n \"Agent Browser Bridge can see your browser, but browser control is disabled. Enable browser control or open Discord manually, then try again.\",\n );\n }\n\n let sessionId = sessionIdFromGrant(existing);\n let companionId = companionIdFromGrant(existing);\n\n if (needsDiscordOpen || needsDmInspection) {\n if (browserState.discordTab) {\n if (!browserState.canControl && !onDiscordDmPage) {\n fail(\n 409,\n \"Discord is open in your browser, but Agent Browser Bridge control is disabled. Focus the Discord DM tab manually or enable browser control.\",\n );\n }\n }\n\n if (!browserState.selectedCompanion) {\n fail(\n 503,\n \"No connected Agent Browser Bridge companion is available for Discord.\",\n );\n }\n if (!browserState.canControl) {\n fail(\n 409,\n \"Agent Browser Bridge control is disabled. Enable browser control or open Discord manually so LifeOps can inspect your DMs.\",\n );\n }\n\n const session = await this.createBrowserSession({\n browser: browserState.selectedCompanion.browser,\n companionId: browserState.selectedCompanion.id,\n profileId: browserState.selectedCompanion.profileId,\n tabId: browserState.discordTab?.tabId ?? null,\n windowId: browserState.discordTab?.windowId ?? null,\n title: DISCORD_CONNECTOR_SESSION_TITLE,\n actions: [\n browserState.discordTab\n ? {\n kind: \"focus_tab\",\n label: \"Focus Discord tab\",\n browser: browserState.selectedCompanion.browser,\n url: browserState.discordTab.url,\n tabId: browserState.discordTab.tabId,\n selector: null,\n text: null,\n accountAffecting: false,\n requiresConfirmation: false,\n metadata: {},\n }\n : {\n kind: \"open\",\n label: \"Open Discord\",\n browser: browserState.selectedCompanion.browser,\n url: DISCORD_APP_URL,\n tabId: null,\n selector: null,\n text: null,\n accountAffecting: false,\n requiresConfirmation: false,\n metadata: {},\n },\n ...(browserState.discordTab\n ? [\n {\n kind: \"navigate\" as const,\n label: \"Open Discord DMs\",\n browser: browserState.selectedCompanion.browser,\n url: DISCORD_APP_URL,\n tabId: browserState.discordTab.tabId,\n selector: null,\n text: null,\n accountAffecting: false,\n requiresConfirmation: false,\n metadata: {},\n },\n ]\n : []),\n {\n kind: \"read_page\",\n label: \"Read Discord page\",\n browser: browserState.selectedCompanion.browser,\n url: DISCORD_APP_URL,\n tabId: null,\n selector: null,\n text: null,\n accountAffecting: false,\n requiresConfirmation: false,\n metadata: {},\n },\n {\n kind: \"extract_links\",\n label: \"Extract Discord links\",\n browser: browserState.selectedCompanion.browser,\n url: DISCORD_APP_URL,\n tabId: null,\n selector: null,\n text: null,\n accountAffecting: false,\n requiresConfirmation: false,\n metadata: {},\n },\n {\n kind: \"extract_forms\",\n label: \"Inspect Discord login state\",\n browser: browserState.selectedCompanion.browser,\n url: DISCORD_APP_URL,\n tabId: null,\n selector: null,\n text: null,\n accountAffecting: false,\n requiresConfirmation: false,\n metadata: {},\n },\n ],\n });\n sessionId = session.id;\n companionId = browserState.selectedCompanion.id;\n }\n\n const capabilities =\n connected && dmInboxVisible\n ? FULL_DISCORD_CAPABILITIES\n : (existing?.capabilities ?? []);\n const metadata = {\n ...(existing?.metadata ?? {}),\n tabId: tabIdFromGrant(existing),\n sessionId,\n companionId,\n browser: browserState.selectedCompanion?.browser ?? null,\n profileId: browserState.selectedCompanion?.profileId ?? null,\n };\n\n const grant = existing\n ? {\n ...existing,\n identity,\n capabilities,\n metadata,\n updatedAt: new Date().toISOString(),\n }\n : createLifeOpsConnectorGrant({\n agentId: this.agentId(),\n provider: \"discord\",\n identity,\n grantedScopes: [],\n capabilities,\n tokenRef: null,\n mode: \"local\",\n side: normalizedSide,\n metadata,\n lastRefreshAt: new Date().toISOString(),\n });\n\n await this.repository.upsertConnectorGrant(grant);\n await this.recordConnectorAudit(\n `discord:${normalizedSide}`,\n \"discord browser companion connector authorized\",\n { side: normalizedSide },\n {\n companionId,\n sessionId,\n loggedIn: connected,\n },\n );\n\n return this.getDiscordConnectorStatus(normalizedSide);\n }\n }\n\n if (!discordBrowserWorkspaceAvailable()) {\n fail(\n 503,\n \"Discord connector requires either Your Browser connected through Agent Browser Bridge or Eliza Desktop Browser.\",\n );\n }\n\n const sideAccountId = `${this.agentId()}-${normalizedSide}`;\n const { tabId } = await ensureDiscordTab({\n accountId: sideAccountId,\n existingTabId: tabIdFromGrant(existing),\n show: true,\n });\n\n const probe = await this.lifeOpsDiscordProbeTab(tabId);\n const loggedIn = probe?.loggedIn === true;\n const capabilities = loggedIn\n ? FULL_DISCORD_CAPABILITIES\n : (existing?.capabilities ?? []);\n const identity =\n identityFromProbe(probe, existing?.identity ?? null) ?? {};\n\n const grant = existing\n ? {\n ...existing,\n identity,\n capabilities,\n metadata: {\n ...existing.metadata,\n tabId,\n },\n updatedAt: new Date().toISOString(),\n }\n : createLifeOpsConnectorGrant({\n agentId: this.agentId(),\n provider: \"discord\",\n identity,\n grantedScopes: [],\n capabilities,\n tokenRef: null,\n mode: \"local\",\n side: normalizedSide,\n metadata: { tabId },\n lastRefreshAt: new Date().toISOString(),\n });\n\n await this.repository.upsertConnectorGrant(grant);\n await this.recordConnectorAudit(\n `discord:${normalizedSide}`,\n \"discord browser connector authorized\",\n { side: normalizedSide },\n { tabId, loggedIn },\n );\n\n return this.getDiscordConnectorStatus(normalizedSide);\n }\n\n /**\n * Search messages in Discord via browser-DOM eval. Requires a connected\n * browser companion or workspace tab. Uses Discord's native search — no\n * client-side filtering.\n *\n * Capability descriptor: `search: true`, `deliveryStatus: 'partial'`.\n */\n async searchDiscordMessages(request: {\n side?: LifeOpsConnectorSide;\n query: string;\n channelId?: string;\n limit?: number;\n }): Promise<DiscordMessageSearchResult[]> {\n const normalizedSide =\n normalizeOptionalConnectorSide(request.side, \"side\") ?? \"owner\";\n const status = await this.getDiscordConnectorStatus(normalizedSide);\n if (!status.connected) {\n fail(409, \"Discord is not connected.\");\n }\n if (!status.grantedCapabilities.includes(\"discord.read\")) {\n fail(403, \"Discord read capability is not granted.\");\n }\n const delegated = await searchDiscordMessagesWithRuntimeService({\n runtime: this.runtime,\n grant: status.grant,\n query: request.query,\n channelId: request.channelId,\n limit: request.limit,\n });\n if (delegated.status === \"handled\") {\n return delegated.value.map(memoryToDiscordMessageSearchResult);\n }\n if (delegated.error) {\n this.logLifeOpsWarn(\n \"runtime_service_delegation_unavailable\",\n delegated.reason,\n {\n provider: \"discord\",\n operation: \"message.search\",\n error:\n delegated.error instanceof Error\n ? delegated.error.message\n : String(delegated.error),\n },\n );\n }\n if (normalizedSide === \"agent\") {\n fail(503, \"Discord plugin search service is not available.\");\n }\n const grant = await this.repository.getConnectorGrant(\n this.agentId(),\n \"discord\",\n \"local\",\n normalizedSide,\n );\n\n const tabId = tabIdFromGrant(grant);\n if (!tabId && !discordBrowserWorkspaceAvailable()) {\n fail(\n 409,\n \"Discord search requires a connected browser tab. Authorize the Discord connector first.\",\n );\n }\n if (!tabId) {\n fail(\n 409,\n \"Discord search requires a connected workspace tab. Authorize the Discord connector first.\",\n );\n }\n\n return searchDiscordMessages({\n tabId,\n query: request.query,\n channelId: request.channelId,\n });\n }\n\n /**\n * Capture delivery status for recently sent Discord messages visible in\n * the current channel. Partial coverage — only messages rendered in the\n * active Discord tab can be inspected.\n *\n * Capability descriptor: `deliveryStatus: 'partial'`.\n */\n async captureDiscordDeliveryStatus(\n side?: LifeOpsConnectorSide,\n ): Promise<DiscordMessageSearchResult[]> {\n const normalizedSide =\n normalizeOptionalConnectorSide(side, \"side\") ?? \"owner\";\n const grant = await this.repository.getConnectorGrant(\n this.agentId(),\n \"discord\",\n \"local\",\n normalizedSide,\n );\n\n const tabId = tabIdFromGrant(grant);\n if (!tabId) {\n fail(\n 409,\n \"Discord delivery status capture requires a connected workspace tab.\",\n );\n }\n\n return captureDiscordDeliveryStatus({ tabId });\n }\n\n async sendDiscordMessage(request: {\n side?: LifeOpsConnectorSide;\n channelId?: string;\n text: string;\n }): Promise<DiscordSendMessageResult> {\n const normalizedSide =\n normalizeOptionalConnectorSide(request.side, \"side\") ?? \"owner\";\n const text = request.text.trim();\n if (!text) {\n fail(400, \"text is required\");\n }\n\n const status = await this.getDiscordConnectorStatus(normalizedSide);\n if (!status.connected) {\n fail(409, \"Discord is not connected.\");\n }\n if (!status.grantedCapabilities.includes(\"discord.send\")) {\n fail(403, \"Discord send capability is not granted.\");\n }\n\n const channelId =\n request.channelId?.trim() || selectedDiscordChannelIdFromStatus(status);\n if (!channelId) {\n fail(\n 400,\n \"channelId is required because no active Discord channel or DM is selected.\",\n );\n }\n // Local-execution grants (Discord Desktop via CDP) drive the user's\n // own Discord client through CDP instead of the bot REST API. This is\n // necessary because Discord bots cannot DM users they don't share a\n // server with, so the bot path returns \"Missing Access\" for the DMs\n // the LifeOps inbox surfaces. CDP send appears to recipients as the\n // user's own message, matching the same trust model as reads.\n const grantMetadata =\n status.grant?.metadata && typeof status.grant.metadata === \"object\"\n ? (status.grant.metadata as Record<string, unknown>)\n : {};\n const useDiscordDesktopCdp =\n status.grant?.executionTarget === \"local\" &&\n (grantMetadata.source === \"discord_desktop\" || !status.tabId);\n if (useDiscordDesktopCdp) {\n const result = await sendDiscordViaDesktopCdp({ channelId, text });\n if (!result.ok) {\n fail(502, result.error ?? \"Discord Desktop send failed.\");\n }\n } else {\n const delegated = await sendDiscordMessageWithRuntimeService({\n runtime: this.runtime,\n grant: status.grant,\n channelId,\n text,\n });\n if (delegated.status !== \"handled\") {\n if (delegated.error) {\n this.logLifeOpsWarn(\n \"runtime_service_delegation_unavailable\",\n delegated.reason,\n {\n provider: \"discord\",\n operation: \"message.send\",\n error:\n delegated.error instanceof Error\n ? delegated.error.message\n : String(delegated.error),\n },\n );\n }\n if (typeof this.runtime.sendMessageToTarget !== \"function\") {\n fail(503, \"Discord send handler is not available.\");\n }\n const accountId = status.grant?.connectorAccountId ?? \"default\";\n await this.runtime.sendMessageToTarget(\n { source: \"discord\", accountId, channelId },\n { text, source: \"lifeops\", metadata: { accountId } },\n );\n }\n }\n\n let deliveryStatus: \"sent\" | \"sending\" | \"failed\" | \"unknown\" = \"unknown\";\n if (status.tabId) {\n await sleep(DISCORD_SEND_SETTLE_MS);\n const delivery = await captureDiscordDeliveryStatus({\n tabId: status.tabId,\n });\n const sent = delivery.find((item) => item.content.includes(text));\n deliveryStatus = sent?.deliveryStatus ?? deliveryStatus;\n }\n\n return {\n provider: \"discord\",\n side: normalizedSide,\n channelId,\n ok: true,\n deliveryStatus,\n };\n }\n\n async verifyDiscordConnector(request: {\n side?: LifeOpsConnectorSide;\n channelId?: string;\n sendMessage?: string;\n }): Promise<DiscordConnectorVerification> {\n const normalizedSide =\n normalizeOptionalConnectorSide(request.side, \"side\") ?? \"owner\";\n const message =\n request.sendMessage?.trim() ||\n `LifeOps Discord verification ${new Date().toISOString()}`;\n const status = await this.getDiscordConnectorStatus(normalizedSide);\n const channelId =\n request.channelId?.trim() || selectedDiscordChannelIdFromStatus(status);\n\n let send: Awaited<\n ReturnType<LifeOpsDiscordServiceMixin[\"sendDiscordMessage\"]>\n > | null = null;\n let error: string | null = null;\n try {\n send = await this.sendDiscordMessage({\n side: normalizedSide,\n ...(channelId ? { channelId } : {}),\n text: message,\n });\n } catch (caught) {\n error = caught instanceof Error ? caught.message : String(caught);\n }\n\n return {\n provider: \"discord\",\n side: normalizedSide,\n verifiedAt: new Date().toISOString(),\n status,\n send: {\n ok: Boolean(send),\n error,\n channelId: send?.channelId ?? channelId ?? null,\n message,\n deliveryStatus: send?.deliveryStatus ?? null,\n },\n };\n }\n\n async disconnectDiscord(\n side?: LifeOpsConnectorSide,\n ): Promise<LifeOpsDiscordConnectorStatus> {\n const normalizedSide =\n normalizeOptionalConnectorSide(side, \"side\") ?? \"owner\";\n if (normalizedSide === \"agent\") {\n fail(\n 409,\n \"Agent-side Discord is owned by @elizaos/plugin-discord. Disable or reconfigure the Discord bot connector instead of deleting a LifeOps grant.\",\n );\n }\n const grant = await this.repository.getConnectorGrant(\n this.agentId(),\n \"discord\",\n \"local\",\n normalizedSide,\n );\n const tabId = tabIdFromGrant(grant);\n\n if (tabId && discordBrowserWorkspaceAvailable()) {\n try {\n await closeDiscordTab(tabId);\n } catch (error) {\n logger.debug(\n `[lifeops-discord] failed to close tab ${tabId}: ${String(error)}`,\n );\n }\n }\n\n await this.repository.deleteConnectorGrant(\n this.agentId(),\n \"discord\",\n \"local\",\n normalizedSide,\n );\n\n await this.recordConnectorAudit(\n `discord:${normalizedSide}`,\n \"discord browser connector disconnected\",\n { side: normalizedSide },\n {},\n );\n\n return this.getDiscordConnectorStatus(normalizedSide);\n }\n }\n\n return LifeOpsDiscordServiceMixin as unknown as MixinClass<\n TBase,\n LifeOpsDiscordService\n >;\n}\n"],"mappings":"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","names":["probe","loggedIn","capabilities","identity","grant"]}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import type { GoogleDriveFile } from "@elizaos/plugin-google";
|
|
2
|
+
import type { LifeOpsConnectorMode, LifeOpsConnectorSide } from "@elizaos/shared";
|
|
3
|
+
import type { LifeOpsConnectorGrant } from "../contracts/index.js";
|
|
4
|
+
import type { Constructor, LifeOpsServiceBase, MixinClass } from "./service-mixin-core.js";
|
|
5
|
+
export type { GoogleDriveFile };
|
|
6
|
+
export declare const GOOGLE_DRIVE_READ_SCOPE = "https://www.googleapis.com/auth/drive.readonly";
|
|
7
|
+
export declare const GOOGLE_DRIVE_WRITE_SCOPE = "https://www.googleapis.com/auth/drive";
|
|
8
|
+
export declare const GOOGLE_DRIVE_FILE_SCOPE = "https://www.googleapis.com/auth/drive.file";
|
|
9
|
+
export declare const DRIVE_CONNECTOR_CAPABILITIES: {
|
|
10
|
+
readonly inbound: false;
|
|
11
|
+
readonly outbound: true;
|
|
12
|
+
readonly search: true;
|
|
13
|
+
readonly identity: true;
|
|
14
|
+
readonly attachments: true;
|
|
15
|
+
readonly deliveryStatus: false;
|
|
16
|
+
};
|
|
17
|
+
export interface LifeOpsDriveService {
|
|
18
|
+
requireGoogleDriveReadGrant(requestUrl: URL, requestedMode?: LifeOpsConnectorMode, requestedSide?: LifeOpsConnectorSide, grantId?: string): Promise<LifeOpsConnectorGrant>;
|
|
19
|
+
requireGoogleDriveWriteGrant(requestUrl: URL, requestedMode?: LifeOpsConnectorMode, requestedSide?: LifeOpsConnectorSide, grantId?: string): Promise<LifeOpsConnectorGrant>;
|
|
20
|
+
listDriveFiles(requestUrl: URL, request?: {
|
|
21
|
+
mode?: LifeOpsConnectorMode;
|
|
22
|
+
side?: LifeOpsConnectorSide;
|
|
23
|
+
grantId?: string;
|
|
24
|
+
folderId?: string;
|
|
25
|
+
maxResults?: number;
|
|
26
|
+
pageToken?: string;
|
|
27
|
+
}): Promise<{
|
|
28
|
+
files: GoogleDriveFile[];
|
|
29
|
+
nextPageToken: string | null;
|
|
30
|
+
}>;
|
|
31
|
+
getDriveFile(requestUrl: URL, request: {
|
|
32
|
+
mode?: LifeOpsConnectorMode;
|
|
33
|
+
side?: LifeOpsConnectorSide;
|
|
34
|
+
grantId?: string;
|
|
35
|
+
fileId: string;
|
|
36
|
+
}): Promise<GoogleDriveFile>;
|
|
37
|
+
searchDriveFiles(requestUrl: URL, request: {
|
|
38
|
+
mode?: LifeOpsConnectorMode;
|
|
39
|
+
side?: LifeOpsConnectorSide;
|
|
40
|
+
grantId?: string;
|
|
41
|
+
query: string;
|
|
42
|
+
maxResults?: number;
|
|
43
|
+
}): Promise<{
|
|
44
|
+
files: GoogleDriveFile[];
|
|
45
|
+
nextPageToken: string | null;
|
|
46
|
+
}>;
|
|
47
|
+
getDocContent(requestUrl: URL, request: {
|
|
48
|
+
mode?: LifeOpsConnectorMode;
|
|
49
|
+
side?: LifeOpsConnectorSide;
|
|
50
|
+
grantId?: string;
|
|
51
|
+
documentId: string;
|
|
52
|
+
}): Promise<{
|
|
53
|
+
title: string;
|
|
54
|
+
plainText: string;
|
|
55
|
+
}>;
|
|
56
|
+
getSheetContent(requestUrl: URL, request: {
|
|
57
|
+
mode?: LifeOpsConnectorMode;
|
|
58
|
+
side?: LifeOpsConnectorSide;
|
|
59
|
+
grantId?: string;
|
|
60
|
+
spreadsheetId: string;
|
|
61
|
+
range?: string;
|
|
62
|
+
}): Promise<{
|
|
63
|
+
title: string;
|
|
64
|
+
rows: string[][];
|
|
65
|
+
}>;
|
|
66
|
+
createDriveFile(requestUrl: URL, request: {
|
|
67
|
+
mode?: LifeOpsConnectorMode;
|
|
68
|
+
side?: LifeOpsConnectorSide;
|
|
69
|
+
grantId?: string;
|
|
70
|
+
name: string;
|
|
71
|
+
mimeType: string;
|
|
72
|
+
content?: string | Uint8Array;
|
|
73
|
+
parentFolderId?: string;
|
|
74
|
+
}): Promise<GoogleDriveFile>;
|
|
75
|
+
appendToDoc(requestUrl: URL, request: {
|
|
76
|
+
mode?: LifeOpsConnectorMode;
|
|
77
|
+
side?: LifeOpsConnectorSide;
|
|
78
|
+
grantId?: string;
|
|
79
|
+
documentId: string;
|
|
80
|
+
text: string;
|
|
81
|
+
}): Promise<void>;
|
|
82
|
+
updateSheetCells(requestUrl: URL, request: {
|
|
83
|
+
mode?: LifeOpsConnectorMode;
|
|
84
|
+
side?: LifeOpsConnectorSide;
|
|
85
|
+
grantId?: string;
|
|
86
|
+
spreadsheetId: string;
|
|
87
|
+
range: string;
|
|
88
|
+
values: ReadonlyArray<ReadonlyArray<string | number>>;
|
|
89
|
+
}): Promise<{
|
|
90
|
+
updatedRange: string;
|
|
91
|
+
updatedCells: number;
|
|
92
|
+
}>;
|
|
93
|
+
}
|
|
94
|
+
/** @internal */
|
|
95
|
+
export declare function withDrive<TBase extends Constructor<LifeOpsServiceBase>>(Base: TBase): MixinClass<TBase, LifeOpsDriveService>;
|
|
96
|
+
//# sourceMappingURL=service-mixin-drive.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service-mixin-drive.d.ts","sourceRoot":"","sources":["../../src/lifeops/service-mixin-drive.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
import {
|
|
2
|
+
accountIdForGrant,
|
|
3
|
+
requireGoogleServiceMethod
|
|
4
|
+
} from "./google-plugin-delegates.js";
|
|
5
|
+
import { fail } from "./service-normalize.js";
|
|
6
|
+
import {
|
|
7
|
+
normalizeOptionalConnectorMode,
|
|
8
|
+
normalizeOptionalConnectorSide
|
|
9
|
+
} from "./service-normalize-connector.js";
|
|
10
|
+
const GOOGLE_DRIVE_READ_SCOPE = "https://www.googleapis.com/auth/drive.readonly";
|
|
11
|
+
const GOOGLE_DRIVE_WRITE_SCOPE = "https://www.googleapis.com/auth/drive";
|
|
12
|
+
const GOOGLE_DRIVE_FILE_SCOPE = "https://www.googleapis.com/auth/drive.file";
|
|
13
|
+
const DRIVE_CONNECTOR_CAPABILITIES = {
|
|
14
|
+
inbound: false,
|
|
15
|
+
outbound: true,
|
|
16
|
+
search: true,
|
|
17
|
+
identity: true,
|
|
18
|
+
attachments: true,
|
|
19
|
+
deliveryStatus: false
|
|
20
|
+
};
|
|
21
|
+
function hasDriveRead(grant) {
|
|
22
|
+
const scopes = new Set(grant.grantedScopes);
|
|
23
|
+
return scopes.has(GOOGLE_DRIVE_WRITE_SCOPE) || scopes.has(GOOGLE_DRIVE_READ_SCOPE) || scopes.has(GOOGLE_DRIVE_FILE_SCOPE) || grant.capabilities.includes("google.drive.read") || grant.capabilities.includes("google.drive.write");
|
|
24
|
+
}
|
|
25
|
+
function hasDriveWrite(grant) {
|
|
26
|
+
const scopes = new Set(grant.grantedScopes);
|
|
27
|
+
return scopes.has(GOOGLE_DRIVE_WRITE_SCOPE) || scopes.has(GOOGLE_DRIVE_FILE_SCOPE) || grant.capabilities.includes("google.drive.write");
|
|
28
|
+
}
|
|
29
|
+
function withDrive(Base) {
|
|
30
|
+
const DriveBase = Base;
|
|
31
|
+
class LifeOpsDriveServiceMixin extends DriveBase {
|
|
32
|
+
async requireGoogleDriveReadGrant(requestUrl, requestedMode, requestedSide, grantId) {
|
|
33
|
+
const status = await this.getGoogleConnectorStatus(
|
|
34
|
+
requestUrl,
|
|
35
|
+
normalizeOptionalConnectorMode(requestedMode, "mode"),
|
|
36
|
+
normalizeOptionalConnectorSide(requestedSide, "side"),
|
|
37
|
+
grantId
|
|
38
|
+
);
|
|
39
|
+
const grant = status.grant;
|
|
40
|
+
if (!status.connected || !grant) {
|
|
41
|
+
fail(409, "Google Drive is not connected.");
|
|
42
|
+
}
|
|
43
|
+
if (!hasDriveRead(grant)) {
|
|
44
|
+
fail(
|
|
45
|
+
403,
|
|
46
|
+
"Google Drive read access has not been granted. Reconnect Google through @elizaos/plugin-google with Drive scope."
|
|
47
|
+
);
|
|
48
|
+
}
|
|
49
|
+
return grant;
|
|
50
|
+
}
|
|
51
|
+
async requireGoogleDriveWriteGrant(requestUrl, requestedMode, requestedSide, grantId) {
|
|
52
|
+
const grant = await this.requireGoogleDriveReadGrant(
|
|
53
|
+
requestUrl,
|
|
54
|
+
requestedMode,
|
|
55
|
+
requestedSide,
|
|
56
|
+
grantId
|
|
57
|
+
);
|
|
58
|
+
if (!hasDriveWrite(grant)) {
|
|
59
|
+
fail(
|
|
60
|
+
403,
|
|
61
|
+
"Google Drive write access has not been granted. Reconnect Google through @elizaos/plugin-google with Drive write scope."
|
|
62
|
+
);
|
|
63
|
+
}
|
|
64
|
+
return grant;
|
|
65
|
+
}
|
|
66
|
+
async listDriveFiles(requestUrl, request = {}) {
|
|
67
|
+
const grant = await this.requireGoogleDriveReadGrant(
|
|
68
|
+
requestUrl,
|
|
69
|
+
request.mode,
|
|
70
|
+
request.side,
|
|
71
|
+
request.grantId
|
|
72
|
+
);
|
|
73
|
+
const searchFiles = requireGoogleServiceMethod(
|
|
74
|
+
this.runtime,
|
|
75
|
+
"searchFiles"
|
|
76
|
+
);
|
|
77
|
+
const query = request.folderId ? `'${request.folderId}' in parents and trashed = false` : "'root' in parents and trashed = false";
|
|
78
|
+
const files = await searchFiles({
|
|
79
|
+
accountId: accountIdForGrant(grant),
|
|
80
|
+
query,
|
|
81
|
+
limit: request.maxResults
|
|
82
|
+
});
|
|
83
|
+
return { files, nextPageToken: null };
|
|
84
|
+
}
|
|
85
|
+
async getDriveFile(requestUrl, request) {
|
|
86
|
+
const grant = await this.requireGoogleDriveReadGrant(
|
|
87
|
+
requestUrl,
|
|
88
|
+
request.mode,
|
|
89
|
+
request.side,
|
|
90
|
+
request.grantId
|
|
91
|
+
);
|
|
92
|
+
const getFile = requireGoogleServiceMethod(this.runtime, "getFile");
|
|
93
|
+
return getFile({
|
|
94
|
+
accountId: accountIdForGrant(grant),
|
|
95
|
+
fileId: request.fileId
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
async searchDriveFiles(requestUrl, request) {
|
|
99
|
+
const grant = await this.requireGoogleDriveReadGrant(
|
|
100
|
+
requestUrl,
|
|
101
|
+
request.mode,
|
|
102
|
+
request.side,
|
|
103
|
+
request.grantId
|
|
104
|
+
);
|
|
105
|
+
const searchFiles = requireGoogleServiceMethod(
|
|
106
|
+
this.runtime,
|
|
107
|
+
"searchFiles"
|
|
108
|
+
);
|
|
109
|
+
const files = await searchFiles({
|
|
110
|
+
accountId: accountIdForGrant(grant),
|
|
111
|
+
query: request.query,
|
|
112
|
+
limit: request.maxResults
|
|
113
|
+
});
|
|
114
|
+
return { files, nextPageToken: null };
|
|
115
|
+
}
|
|
116
|
+
async getDocContent(requestUrl, request) {
|
|
117
|
+
const grant = await this.requireGoogleDriveReadGrant(
|
|
118
|
+
requestUrl,
|
|
119
|
+
request.mode,
|
|
120
|
+
request.side,
|
|
121
|
+
request.grantId
|
|
122
|
+
);
|
|
123
|
+
const getDocContent = requireGoogleServiceMethod(
|
|
124
|
+
this.runtime,
|
|
125
|
+
"getDocContent"
|
|
126
|
+
);
|
|
127
|
+
return getDocContent({
|
|
128
|
+
accountId: accountIdForGrant(grant),
|
|
129
|
+
documentId: request.documentId
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
async getSheetContent(requestUrl, request) {
|
|
133
|
+
const grant = await this.requireGoogleDriveReadGrant(
|
|
134
|
+
requestUrl,
|
|
135
|
+
request.mode,
|
|
136
|
+
request.side,
|
|
137
|
+
request.grantId
|
|
138
|
+
);
|
|
139
|
+
const getSheetContent = requireGoogleServiceMethod(
|
|
140
|
+
this.runtime,
|
|
141
|
+
"getSheetContent"
|
|
142
|
+
);
|
|
143
|
+
return getSheetContent({
|
|
144
|
+
accountId: accountIdForGrant(grant),
|
|
145
|
+
spreadsheetId: request.spreadsheetId,
|
|
146
|
+
range: request.range
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
async createDriveFile(requestUrl, request) {
|
|
150
|
+
const grant = await this.requireGoogleDriveWriteGrant(
|
|
151
|
+
requestUrl,
|
|
152
|
+
request.mode,
|
|
153
|
+
request.side,
|
|
154
|
+
request.grantId
|
|
155
|
+
);
|
|
156
|
+
const createDriveFile = requireGoogleServiceMethod(
|
|
157
|
+
this.runtime,
|
|
158
|
+
"createDriveFile"
|
|
159
|
+
);
|
|
160
|
+
return createDriveFile({
|
|
161
|
+
accountId: accountIdForGrant(grant),
|
|
162
|
+
name: request.name,
|
|
163
|
+
mimeType: request.mimeType,
|
|
164
|
+
content: request.content,
|
|
165
|
+
parentFolderId: request.parentFolderId
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
async appendToDoc(requestUrl, request) {
|
|
169
|
+
const grant = await this.requireGoogleDriveWriteGrant(
|
|
170
|
+
requestUrl,
|
|
171
|
+
request.mode,
|
|
172
|
+
request.side,
|
|
173
|
+
request.grantId
|
|
174
|
+
);
|
|
175
|
+
const appendToDoc = requireGoogleServiceMethod(
|
|
176
|
+
this.runtime,
|
|
177
|
+
"appendToDoc"
|
|
178
|
+
);
|
|
179
|
+
await appendToDoc({
|
|
180
|
+
accountId: accountIdForGrant(grant),
|
|
181
|
+
documentId: request.documentId,
|
|
182
|
+
text: request.text
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
async updateSheetCells(requestUrl, request) {
|
|
186
|
+
const grant = await this.requireGoogleDriveWriteGrant(
|
|
187
|
+
requestUrl,
|
|
188
|
+
request.mode,
|
|
189
|
+
request.side,
|
|
190
|
+
request.grantId
|
|
191
|
+
);
|
|
192
|
+
const updateSheetCells = requireGoogleServiceMethod(
|
|
193
|
+
this.runtime,
|
|
194
|
+
"updateSheetCells"
|
|
195
|
+
);
|
|
196
|
+
return updateSheetCells({
|
|
197
|
+
accountId: accountIdForGrant(grant),
|
|
198
|
+
spreadsheetId: request.spreadsheetId,
|
|
199
|
+
range: request.range,
|
|
200
|
+
values: request.values
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
return LifeOpsDriveServiceMixin;
|
|
205
|
+
}
|
|
206
|
+
export {
|
|
207
|
+
DRIVE_CONNECTOR_CAPABILITIES,
|
|
208
|
+
GOOGLE_DRIVE_FILE_SCOPE,
|
|
209
|
+
GOOGLE_DRIVE_READ_SCOPE,
|
|
210
|
+
GOOGLE_DRIVE_WRITE_SCOPE,
|
|
211
|
+
withDrive
|
|
212
|
+
};
|
|
213
|
+
//# sourceMappingURL=service-mixin-drive.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/lifeops/service-mixin-drive.ts"],"sourcesContent":["import type { GoogleDriveFile } from \"@elizaos/plugin-google\";\nimport type {\n LifeOpsConnectorMode,\n LifeOpsConnectorSide,\n} from \"@elizaos/shared\";\nimport type {\n LifeOpsConnectorGrant,\n LifeOpsGoogleConnectorStatus,\n} from \"../contracts/index.js\";\nimport {\n accountIdForGrant,\n requireGoogleServiceMethod,\n} from \"./google-plugin-delegates.js\";\nimport type {\n Constructor,\n LifeOpsServiceBase,\n MixinClass,\n} from \"./service-mixin-core.js\";\nimport { fail } from \"./service-normalize.js\";\nimport {\n normalizeOptionalConnectorMode,\n normalizeOptionalConnectorSide,\n} from \"./service-normalize-connector.js\";\n\nexport type { GoogleDriveFile };\n\nexport const GOOGLE_DRIVE_READ_SCOPE =\n \"https://www.googleapis.com/auth/drive.readonly\";\nexport const GOOGLE_DRIVE_WRITE_SCOPE = \"https://www.googleapis.com/auth/drive\";\nexport const GOOGLE_DRIVE_FILE_SCOPE =\n \"https://www.googleapis.com/auth/drive.file\";\n\nexport const DRIVE_CONNECTOR_CAPABILITIES = {\n inbound: false,\n outbound: true,\n search: true,\n identity: true,\n attachments: true,\n deliveryStatus: false,\n} as const;\n\nexport interface LifeOpsDriveService {\n requireGoogleDriveReadGrant(\n requestUrl: URL,\n requestedMode?: LifeOpsConnectorMode,\n requestedSide?: LifeOpsConnectorSide,\n grantId?: string,\n ): Promise<LifeOpsConnectorGrant>;\n requireGoogleDriveWriteGrant(\n requestUrl: URL,\n requestedMode?: LifeOpsConnectorMode,\n requestedSide?: LifeOpsConnectorSide,\n grantId?: string,\n ): Promise<LifeOpsConnectorGrant>;\n listDriveFiles(\n requestUrl: URL,\n request?: {\n mode?: LifeOpsConnectorMode;\n side?: LifeOpsConnectorSide;\n grantId?: string;\n folderId?: string;\n maxResults?: number;\n pageToken?: string;\n },\n ): Promise<{ files: GoogleDriveFile[]; nextPageToken: string | null }>;\n getDriveFile(\n requestUrl: URL,\n request: {\n mode?: LifeOpsConnectorMode;\n side?: LifeOpsConnectorSide;\n grantId?: string;\n fileId: string;\n },\n ): Promise<GoogleDriveFile>;\n searchDriveFiles(\n requestUrl: URL,\n request: {\n mode?: LifeOpsConnectorMode;\n side?: LifeOpsConnectorSide;\n grantId?: string;\n query: string;\n maxResults?: number;\n },\n ): Promise<{ files: GoogleDriveFile[]; nextPageToken: string | null }>;\n getDocContent(\n requestUrl: URL,\n request: {\n mode?: LifeOpsConnectorMode;\n side?: LifeOpsConnectorSide;\n grantId?: string;\n documentId: string;\n },\n ): Promise<{ title: string; plainText: string }>;\n getSheetContent(\n requestUrl: URL,\n request: {\n mode?: LifeOpsConnectorMode;\n side?: LifeOpsConnectorSide;\n grantId?: string;\n spreadsheetId: string;\n range?: string;\n },\n ): Promise<{ title: string; rows: string[][] }>;\n createDriveFile(\n requestUrl: URL,\n request: {\n mode?: LifeOpsConnectorMode;\n side?: LifeOpsConnectorSide;\n grantId?: string;\n name: string;\n mimeType: string;\n content?: string | Uint8Array;\n parentFolderId?: string;\n },\n ): Promise<GoogleDriveFile>;\n appendToDoc(\n requestUrl: URL,\n request: {\n mode?: LifeOpsConnectorMode;\n side?: LifeOpsConnectorSide;\n grantId?: string;\n documentId: string;\n text: string;\n },\n ): Promise<void>;\n updateSheetCells(\n requestUrl: URL,\n request: {\n mode?: LifeOpsConnectorMode;\n side?: LifeOpsConnectorSide;\n grantId?: string;\n spreadsheetId: string;\n range: string;\n values: ReadonlyArray<ReadonlyArray<string | number>>;\n },\n ): Promise<{ updatedRange: string; updatedCells: number }>;\n}\n\ntype DriveMixinDependencies = LifeOpsServiceBase & {\n getGoogleConnectorStatus(\n requestUrl: URL,\n requestedMode?: LifeOpsConnectorMode,\n requestedSide?: LifeOpsConnectorSide,\n grantId?: string,\n ): Promise<LifeOpsGoogleConnectorStatus>;\n};\n\nfunction hasDriveRead(grant: LifeOpsConnectorGrant): boolean {\n const scopes = new Set(grant.grantedScopes);\n return (\n scopes.has(GOOGLE_DRIVE_WRITE_SCOPE) ||\n scopes.has(GOOGLE_DRIVE_READ_SCOPE) ||\n scopes.has(GOOGLE_DRIVE_FILE_SCOPE) ||\n grant.capabilities.includes(\"google.drive.read\") ||\n grant.capabilities.includes(\"google.drive.write\")\n );\n}\n\nfunction hasDriveWrite(grant: LifeOpsConnectorGrant): boolean {\n const scopes = new Set(grant.grantedScopes);\n return (\n scopes.has(GOOGLE_DRIVE_WRITE_SCOPE) ||\n scopes.has(GOOGLE_DRIVE_FILE_SCOPE) ||\n grant.capabilities.includes(\"google.drive.write\")\n );\n}\n\n/** @internal */\nexport function withDrive<TBase extends Constructor<LifeOpsServiceBase>>(\n Base: TBase,\n): MixinClass<TBase, LifeOpsDriveService> {\n const DriveBase = Base as unknown as Constructor<DriveMixinDependencies>;\n\n class LifeOpsDriveServiceMixin extends DriveBase {\n public async requireGoogleDriveReadGrant(\n requestUrl: URL,\n requestedMode?: LifeOpsConnectorMode,\n requestedSide?: LifeOpsConnectorSide,\n grantId?: string,\n ) {\n const status = await this.getGoogleConnectorStatus(\n requestUrl,\n normalizeOptionalConnectorMode(requestedMode, \"mode\"),\n normalizeOptionalConnectorSide(requestedSide, \"side\"),\n grantId,\n );\n const grant = status.grant;\n if (!status.connected || !grant) {\n fail(409, \"Google Drive is not connected.\");\n }\n if (!hasDriveRead(grant)) {\n fail(\n 403,\n \"Google Drive read access has not been granted. Reconnect Google through @elizaos/plugin-google with Drive scope.\",\n );\n }\n return grant;\n }\n\n public async requireGoogleDriveWriteGrant(\n requestUrl: URL,\n requestedMode?: LifeOpsConnectorMode,\n requestedSide?: LifeOpsConnectorSide,\n grantId?: string,\n ) {\n const grant = await this.requireGoogleDriveReadGrant(\n requestUrl,\n requestedMode,\n requestedSide,\n grantId,\n );\n if (!hasDriveWrite(grant)) {\n fail(\n 403,\n \"Google Drive write access has not been granted. Reconnect Google through @elizaos/plugin-google with Drive write scope.\",\n );\n }\n return grant;\n }\n\n async listDriveFiles(\n requestUrl: URL,\n request: {\n mode?: LifeOpsConnectorMode;\n side?: LifeOpsConnectorSide;\n grantId?: string;\n folderId?: string;\n maxResults?: number;\n pageToken?: string;\n } = {},\n ): Promise<{ files: GoogleDriveFile[]; nextPageToken: string | null }> {\n const grant = await this.requireGoogleDriveReadGrant(\n requestUrl,\n request.mode,\n request.side,\n request.grantId,\n );\n const searchFiles = requireGoogleServiceMethod(\n this.runtime,\n \"searchFiles\",\n );\n const query = request.folderId\n ? `'${request.folderId}' in parents and trashed = false`\n : \"'root' in parents and trashed = false\";\n const files = await searchFiles({\n accountId: accountIdForGrant(grant),\n query,\n limit: request.maxResults,\n });\n return { files, nextPageToken: null };\n }\n\n async getDriveFile(\n requestUrl: URL,\n request: {\n mode?: LifeOpsConnectorMode;\n side?: LifeOpsConnectorSide;\n grantId?: string;\n fileId: string;\n },\n ): Promise<GoogleDriveFile> {\n const grant = await this.requireGoogleDriveReadGrant(\n requestUrl,\n request.mode,\n request.side,\n request.grantId,\n );\n const getFile = requireGoogleServiceMethod(this.runtime, \"getFile\");\n return getFile({\n accountId: accountIdForGrant(grant),\n fileId: request.fileId,\n });\n }\n\n async searchDriveFiles(\n requestUrl: URL,\n request: {\n mode?: LifeOpsConnectorMode;\n side?: LifeOpsConnectorSide;\n grantId?: string;\n query: string;\n maxResults?: number;\n },\n ): Promise<{ files: GoogleDriveFile[]; nextPageToken: string | null }> {\n const grant = await this.requireGoogleDriveReadGrant(\n requestUrl,\n request.mode,\n request.side,\n request.grantId,\n );\n const searchFiles = requireGoogleServiceMethod(\n this.runtime,\n \"searchFiles\",\n );\n const files = await searchFiles({\n accountId: accountIdForGrant(grant),\n query: request.query,\n limit: request.maxResults,\n });\n return { files, nextPageToken: null };\n }\n\n async getDocContent(\n requestUrl: URL,\n request: {\n mode?: LifeOpsConnectorMode;\n side?: LifeOpsConnectorSide;\n grantId?: string;\n documentId: string;\n },\n ): Promise<{ title: string; plainText: string }> {\n const grant = await this.requireGoogleDriveReadGrant(\n requestUrl,\n request.mode,\n request.side,\n request.grantId,\n );\n const getDocContent = requireGoogleServiceMethod(\n this.runtime,\n \"getDocContent\",\n );\n return getDocContent({\n accountId: accountIdForGrant(grant),\n documentId: request.documentId,\n });\n }\n\n async getSheetContent(\n requestUrl: URL,\n request: {\n mode?: LifeOpsConnectorMode;\n side?: LifeOpsConnectorSide;\n grantId?: string;\n spreadsheetId: string;\n range?: string;\n },\n ): Promise<{ title: string; rows: string[][] }> {\n const grant = await this.requireGoogleDriveReadGrant(\n requestUrl,\n request.mode,\n request.side,\n request.grantId,\n );\n const getSheetContent = requireGoogleServiceMethod(\n this.runtime,\n \"getSheetContent\",\n );\n return getSheetContent({\n accountId: accountIdForGrant(grant),\n spreadsheetId: request.spreadsheetId,\n range: request.range,\n });\n }\n\n async createDriveFile(\n requestUrl: URL,\n request: {\n mode?: LifeOpsConnectorMode;\n side?: LifeOpsConnectorSide;\n grantId?: string;\n name: string;\n mimeType: string;\n content?: string | Uint8Array;\n parentFolderId?: string;\n },\n ): Promise<GoogleDriveFile> {\n const grant = await this.requireGoogleDriveWriteGrant(\n requestUrl,\n request.mode,\n request.side,\n request.grantId,\n );\n const createDriveFile = requireGoogleServiceMethod(\n this.runtime,\n \"createDriveFile\",\n );\n return createDriveFile({\n accountId: accountIdForGrant(grant),\n name: request.name,\n mimeType: request.mimeType,\n content: request.content,\n parentFolderId: request.parentFolderId,\n });\n }\n\n async appendToDoc(\n requestUrl: URL,\n request: {\n mode?: LifeOpsConnectorMode;\n side?: LifeOpsConnectorSide;\n grantId?: string;\n documentId: string;\n text: string;\n },\n ): Promise<void> {\n const grant = await this.requireGoogleDriveWriteGrant(\n requestUrl,\n request.mode,\n request.side,\n request.grantId,\n );\n const appendToDoc = requireGoogleServiceMethod(\n this.runtime,\n \"appendToDoc\",\n );\n await appendToDoc({\n accountId: accountIdForGrant(grant),\n documentId: request.documentId,\n text: request.text,\n });\n }\n\n async updateSheetCells(\n requestUrl: URL,\n request: {\n mode?: LifeOpsConnectorMode;\n side?: LifeOpsConnectorSide;\n grantId?: string;\n spreadsheetId: string;\n range: string;\n values: ReadonlyArray<ReadonlyArray<string | number>>;\n },\n ): Promise<{ updatedRange: string; updatedCells: number }> {\n const grant = await this.requireGoogleDriveWriteGrant(\n requestUrl,\n request.mode,\n request.side,\n request.grantId,\n );\n const updateSheetCells = requireGoogleServiceMethod(\n this.runtime,\n \"updateSheetCells\",\n );\n return updateSheetCells({\n accountId: accountIdForGrant(grant),\n spreadsheetId: request.spreadsheetId,\n range: request.range,\n values: request.values,\n });\n }\n }\n\n return LifeOpsDriveServiceMixin as unknown as MixinClass<\n TBase,\n LifeOpsDriveService\n >;\n}\n"],"mappings":"AASA;AAAA,EACE;AAAA,EACA;AAAA,OACK;AAMP,SAAS,YAAY;AACrB;AAAA,EACE;AAAA,EACA;AAAA,OACK;AAIA,MAAM,0BACX;AACK,MAAM,2BAA2B;AACjC,MAAM,0BACX;AAEK,MAAM,+BAA+B;AAAA,EAC1C,SAAS;AAAA,EACT,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,aAAa;AAAA,EACb,gBAAgB;AAClB;AA4GA,SAAS,aAAa,OAAuC;AAC3D,QAAM,SAAS,IAAI,IAAI,MAAM,aAAa;AAC1C,SACE,OAAO,IAAI,wBAAwB,KACnC,OAAO,IAAI,uBAAuB,KAClC,OAAO,IAAI,uBAAuB,KAClC,MAAM,aAAa,SAAS,mBAAmB,KAC/C,MAAM,aAAa,SAAS,oBAAoB;AAEpD;AAEA,SAAS,cAAc,OAAuC;AAC5D,QAAM,SAAS,IAAI,IAAI,MAAM,aAAa;AAC1C,SACE,OAAO,IAAI,wBAAwB,KACnC,OAAO,IAAI,uBAAuB,KAClC,MAAM,aAAa,SAAS,oBAAoB;AAEpD;AAGO,SAAS,UACd,MACwC;AACxC,QAAM,YAAY;AAAA,EAElB,MAAM,iCAAiC,UAAU;AAAA,IAC/C,MAAa,4BACX,YACA,eACA,eACA,SACA;AACA,YAAM,SAAS,MAAM,KAAK;AAAA,QACxB;AAAA,QACA,+BAA+B,eAAe,MAAM;AAAA,QACpD,+BAA+B,eAAe,MAAM;AAAA,QACpD;AAAA,MACF;AACA,YAAM,QAAQ,OAAO;AACrB,UAAI,CAAC,OAAO,aAAa,CAAC,OAAO;AAC/B,aAAK,KAAK,gCAAgC;AAAA,MAC5C;AACA,UAAI,CAAC,aAAa,KAAK,GAAG;AACxB;AAAA,UACE;AAAA,UACA;AAAA,QACF;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAAA,IAEA,MAAa,6BACX,YACA,eACA,eACA,SACA;AACA,YAAM,QAAQ,MAAM,KAAK;AAAA,QACvB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AACA,UAAI,CAAC,cAAc,KAAK,GAAG;AACzB;AAAA,UACE;AAAA,UACA;AAAA,QACF;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAAA,IAEA,MAAM,eACJ,YACA,UAOI,CAAC,GACgE;AACrE,YAAM,QAAQ,MAAM,KAAK;AAAA,QACvB;AAAA,QACA,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,QAAQ;AAAA,MACV;AACA,YAAM,cAAc;AAAA,QAClB,KAAK;AAAA,QACL;AAAA,MACF;AACA,YAAM,QAAQ,QAAQ,WAClB,IAAI,QAAQ,QAAQ,qCACpB;AACJ,YAAM,QAAQ,MAAM,YAAY;AAAA,QAC9B,WAAW,kBAAkB,KAAK;AAAA,QAClC;AAAA,QACA,OAAO,QAAQ;AAAA,MACjB,CAAC;AACD,aAAO,EAAE,OAAO,eAAe,KAAK;AAAA,IACtC;AAAA,IAEA,MAAM,aACJ,YACA,SAM0B;AAC1B,YAAM,QAAQ,MAAM,KAAK;AAAA,QACvB;AAAA,QACA,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,QAAQ;AAAA,MACV;AACA,YAAM,UAAU,2BAA2B,KAAK,SAAS,SAAS;AAClE,aAAO,QAAQ;AAAA,QACb,WAAW,kBAAkB,KAAK;AAAA,QAClC,QAAQ,QAAQ;AAAA,MAClB,CAAC;AAAA,IACH;AAAA,IAEA,MAAM,iBACJ,YACA,SAOqE;AACrE,YAAM,QAAQ,MAAM,KAAK;AAAA,QACvB;AAAA,QACA,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,QAAQ;AAAA,MACV;AACA,YAAM,cAAc;AAAA,QAClB,KAAK;AAAA,QACL;AAAA,MACF;AACA,YAAM,QAAQ,MAAM,YAAY;AAAA,QAC9B,WAAW,kBAAkB,KAAK;AAAA,QAClC,OAAO,QAAQ;AAAA,QACf,OAAO,QAAQ;AAAA,MACjB,CAAC;AACD,aAAO,EAAE,OAAO,eAAe,KAAK;AAAA,IACtC;AAAA,IAEA,MAAM,cACJ,YACA,SAM+C;AAC/C,YAAM,QAAQ,MAAM,KAAK;AAAA,QACvB;AAAA,QACA,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,QAAQ;AAAA,MACV;AACA,YAAM,gBAAgB;AAAA,QACpB,KAAK;AAAA,QACL;AAAA,MACF;AACA,aAAO,cAAc;AAAA,QACnB,WAAW,kBAAkB,KAAK;AAAA,QAClC,YAAY,QAAQ;AAAA,MACtB,CAAC;AAAA,IACH;AAAA,IAEA,MAAM,gBACJ,YACA,SAO8C;AAC9C,YAAM,QAAQ,MAAM,KAAK;AAAA,QACvB;AAAA,QACA,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,QAAQ;AAAA,MACV;AACA,YAAM,kBAAkB;AAAA,QACtB,KAAK;AAAA,QACL;AAAA,MACF;AACA,aAAO,gBAAgB;AAAA,QACrB,WAAW,kBAAkB,KAAK;AAAA,QAClC,eAAe,QAAQ;AAAA,QACvB,OAAO,QAAQ;AAAA,MACjB,CAAC;AAAA,IACH;AAAA,IAEA,MAAM,gBACJ,YACA,SAS0B;AAC1B,YAAM,QAAQ,MAAM,KAAK;AAAA,QACvB;AAAA,QACA,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,QAAQ;AAAA,MACV;AACA,YAAM,kBAAkB;AAAA,QACtB,KAAK;AAAA,QACL;AAAA,MACF;AACA,aAAO,gBAAgB;AAAA,QACrB,WAAW,kBAAkB,KAAK;AAAA,QAClC,MAAM,QAAQ;AAAA,QACd,UAAU,QAAQ;AAAA,QAClB,SAAS,QAAQ;AAAA,QACjB,gBAAgB,QAAQ;AAAA,MAC1B,CAAC;AAAA,IACH;AAAA,IAEA,MAAM,YACJ,YACA,SAOe;AACf,YAAM,QAAQ,MAAM,KAAK;AAAA,QACvB;AAAA,QACA,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,QAAQ;AAAA,MACV;AACA,YAAM,cAAc;AAAA,QAClB,KAAK;AAAA,QACL;AAAA,MACF;AACA,YAAM,YAAY;AAAA,QAChB,WAAW,kBAAkB,KAAK;AAAA,QAClC,YAAY,QAAQ;AAAA,QACpB,MAAM,QAAQ;AAAA,MAChB,CAAC;AAAA,IACH;AAAA,IAEA,MAAM,iBACJ,YACA,SAQyD;AACzD,YAAM,QAAQ,MAAM,KAAK;AAAA,QACvB;AAAA,QACA,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,QAAQ;AAAA,MACV;AACA,YAAM,mBAAmB;AAAA,QACvB,KAAK;AAAA,QACL;AAAA,MACF;AACA,aAAO,iBAAiB;AAAA,QACtB,WAAW,kBAAkB,KAAK;AAAA,QAClC,eAAe,QAAQ;AAAA,QACvB,OAAO,QAAQ;AAAA,QACf,QAAQ,QAAQ;AAAA,MAClB,CAAC;AAAA,IACH;AAAA,EACF;AAEA,SAAO;AAIT;","names":[]}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { EmailSubscriptionScanResult, EmailUnsubscribeRecord, EmailUnsubscribeRequest, EmailUnsubscribeResult, EmailUnsubscribeScanRequest } from "@elizaos/plugin-inbox/inbox/email-unsubscribe-types";
|
|
2
|
+
import type { Constructor, LifeOpsServiceBase, MixinClass } from "./service-mixin-core.js";
|
|
3
|
+
export interface LifeOpsEmailUnsubscribeService {
|
|
4
|
+
scanEmailSubscriptions(requestUrl: URL, request?: EmailUnsubscribeScanRequest): Promise<EmailSubscriptionScanResult>;
|
|
5
|
+
unsubscribeEmailSender(requestUrl: URL, request: EmailUnsubscribeRequest): Promise<EmailUnsubscribeResult>;
|
|
6
|
+
listEmailUnsubscribes(limit?: number): Promise<EmailUnsubscribeRecord[]>;
|
|
7
|
+
summarizeEmailUnsubscribeScan(result: EmailSubscriptionScanResult): string;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Email-unsubscribe back-end moved to `@elizaos/plugin-inbox`
|
|
11
|
+
* ({@link InboxUnsubscribeService}). This mixin is now a thin delegation layer:
|
|
12
|
+
* it preserves the LifeOpsService method surface (the `requestUrl` argument the
|
|
13
|
+
* route callers pass), but forwards to the standalone inbox service, which
|
|
14
|
+
* resolves Gmail through the `@elizaos/plugin-google` runtime service and
|
|
15
|
+
* persists to the same `app_inbox.life_email_unsubscribes` table.
|
|
16
|
+
*
|
|
17
|
+
* The two-phase confirmation gate (`requireConfirmation`) stays in the PA route
|
|
18
|
+
* layer; the inbox service trusts the pre-confirmed `userAuthorization` flag.
|
|
19
|
+
*
|
|
20
|
+
* @internal
|
|
21
|
+
*/
|
|
22
|
+
export declare function withEmailUnsubscribe<TBase extends Constructor<LifeOpsServiceBase>>(Base: TBase): MixinClass<TBase, LifeOpsEmailUnsubscribeService>;
|
|
23
|
+
//# sourceMappingURL=service-mixin-email-unsubscribe.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service-mixin-email-unsubscribe.d.ts","sourceRoot":"","sources":["../../src/lifeops/service-mixin-email-unsubscribe.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,2BAA2B,EAC3B,sBAAsB,EACtB,uBAAuB,EACvB,sBAAsB,EACtB,2BAA2B,EAC5B,MAAM,qDAAqD,CAAC;AAC7D,OAAO,KAAK,EACV,WAAW,EACX,kBAAkB,EAClB,UAAU,EACX,MAAM,yBAAyB,CAAC;AAEjC,MAAM,WAAW,8BAA8B;IAC7C,sBAAsB,CACpB,UAAU,EAAE,GAAG,EACf,OAAO,CAAC,EAAE,2BAA2B,GACpC,OAAO,CAAC,2BAA2B,CAAC,CAAC;IACxC,sBAAsB,CACpB,UAAU,EAAE,GAAG,EACf,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,sBAAsB,CAAC,CAAC;IACnC,qBAAqB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,EAAE,CAAC,CAAC;IACzE,6BAA6B,CAAC,MAAM,EAAE,2BAA2B,GAAG,MAAM,CAAC;CAC5E;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,SAAS,WAAW,CAAC,kBAAkB,CAAC,EAC7C,IAAI,EAAE,KAAK,GAAG,UAAU,CAAC,KAAK,EAAE,8BAA8B,CAAC,CAqChE"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { InboxUnsubscribeService } from "@elizaos/plugin-inbox/inbox/unsubscribe-service";
|
|
2
|
+
function withEmailUnsubscribe(Base) {
|
|
3
|
+
class LifeOpsEmailUnsubscribeMixin extends Base {
|
|
4
|
+
inboxUnsubscribeService() {
|
|
5
|
+
return new InboxUnsubscribeService(this.runtime);
|
|
6
|
+
}
|
|
7
|
+
async scanEmailSubscriptions(_requestUrl, request = {}) {
|
|
8
|
+
return this.inboxUnsubscribeService().scanEmailSubscriptions(request);
|
|
9
|
+
}
|
|
10
|
+
async unsubscribeEmailSender(_requestUrl, request) {
|
|
11
|
+
return this.inboxUnsubscribeService().unsubscribeEmailSender(request);
|
|
12
|
+
}
|
|
13
|
+
async listEmailUnsubscribes(limit = 100) {
|
|
14
|
+
return this.inboxUnsubscribeService().listEmailUnsubscribes(limit);
|
|
15
|
+
}
|
|
16
|
+
summarizeEmailUnsubscribeScan(result) {
|
|
17
|
+
return this.inboxUnsubscribeService().summarizeEmailUnsubscribeScan(
|
|
18
|
+
result
|
|
19
|
+
);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return LifeOpsEmailUnsubscribeMixin;
|
|
23
|
+
}
|
|
24
|
+
export {
|
|
25
|
+
withEmailUnsubscribe
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=service-mixin-email-unsubscribe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/lifeops/service-mixin-email-unsubscribe.ts"],"sourcesContent":["import { InboxUnsubscribeService } from \"@elizaos/plugin-inbox/inbox/unsubscribe-service\";\nimport type {\n EmailSubscriptionScanResult,\n EmailUnsubscribeRecord,\n EmailUnsubscribeRequest,\n EmailUnsubscribeResult,\n EmailUnsubscribeScanRequest,\n} from \"@elizaos/plugin-inbox/inbox/email-unsubscribe-types\";\nimport type {\n Constructor,\n LifeOpsServiceBase,\n MixinClass,\n} from \"./service-mixin-core.js\";\n\nexport interface LifeOpsEmailUnsubscribeService {\n scanEmailSubscriptions(\n requestUrl: URL,\n request?: EmailUnsubscribeScanRequest,\n ): Promise<EmailSubscriptionScanResult>;\n unsubscribeEmailSender(\n requestUrl: URL,\n request: EmailUnsubscribeRequest,\n ): Promise<EmailUnsubscribeResult>;\n listEmailUnsubscribes(limit?: number): Promise<EmailUnsubscribeRecord[]>;\n summarizeEmailUnsubscribeScan(result: EmailSubscriptionScanResult): string;\n}\n\n/**\n * Email-unsubscribe back-end moved to `@elizaos/plugin-inbox`\n * ({@link InboxUnsubscribeService}). This mixin is now a thin delegation layer:\n * it preserves the LifeOpsService method surface (the `requestUrl` argument the\n * route callers pass), but forwards to the standalone inbox service, which\n * resolves Gmail through the `@elizaos/plugin-google` runtime service and\n * persists to the same `app_inbox.life_email_unsubscribes` table.\n *\n * The two-phase confirmation gate (`requireConfirmation`) stays in the PA route\n * layer; the inbox service trusts the pre-confirmed `userAuthorization` flag.\n *\n * @internal\n */\nexport function withEmailUnsubscribe<\n TBase extends Constructor<LifeOpsServiceBase>,\n>(Base: TBase): MixinClass<TBase, LifeOpsEmailUnsubscribeService> {\n class LifeOpsEmailUnsubscribeMixin extends Base {\n private inboxUnsubscribeService(): InboxUnsubscribeService {\n return new InboxUnsubscribeService(this.runtime);\n }\n\n async scanEmailSubscriptions(\n _requestUrl: URL,\n request: EmailUnsubscribeScanRequest = {},\n ): Promise<EmailSubscriptionScanResult> {\n return this.inboxUnsubscribeService().scanEmailSubscriptions(request);\n }\n\n async unsubscribeEmailSender(\n _requestUrl: URL,\n request: EmailUnsubscribeRequest,\n ): Promise<EmailUnsubscribeResult> {\n return this.inboxUnsubscribeService().unsubscribeEmailSender(request);\n }\n\n async listEmailUnsubscribes(\n limit = 100,\n ): Promise<EmailUnsubscribeRecord[]> {\n return this.inboxUnsubscribeService().listEmailUnsubscribes(limit);\n }\n\n summarizeEmailUnsubscribeScan(result: EmailSubscriptionScanResult): string {\n return this.inboxUnsubscribeService().summarizeEmailUnsubscribeScan(\n result,\n );\n }\n }\n\n return LifeOpsEmailUnsubscribeMixin as unknown as MixinClass<\n TBase,\n LifeOpsEmailUnsubscribeService\n >;\n}\n"],"mappings":"AAAA,SAAS,+BAA+B;AAwCjC,SAAS,qBAEd,MAAgE;AAAA,EAChE,MAAM,qCAAqC,KAAK;AAAA,IACtC,0BAAmD;AACzD,aAAO,IAAI,wBAAwB,KAAK,OAAO;AAAA,IACjD;AAAA,IAEA,MAAM,uBACJ,aACA,UAAuC,CAAC,GACF;AACtC,aAAO,KAAK,wBAAwB,EAAE,uBAAuB,OAAO;AAAA,IACtE;AAAA,IAEA,MAAM,uBACJ,aACA,SACiC;AACjC,aAAO,KAAK,wBAAwB,EAAE,uBAAuB,OAAO;AAAA,IACtE;AAAA,IAEA,MAAM,sBACJ,QAAQ,KAC2B;AACnC,aAAO,KAAK,wBAAwB,EAAE,sBAAsB,KAAK;AAAA,IACnE;AAAA,IAEA,8BAA8B,QAA6C;AACzE,aAAO,KAAK,wBAAwB,EAAE;AAAA,QACpC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAIT;","names":[]}
|