@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/routes/lifeops-routes.ts"],"sourcesContent":["import type http from \"node:http\";\nimport {\n checkRateLimit,\n createIntegrationTelemetrySpan,\n type RateLimitConfig,\n} from \"@elizaos/agent\";\nimport { handleCalendarRoutes } from \"@elizaos/plugin-calendar/routes/calendar-routes\";\nimport type { ReadJsonBodyOptions } from \"@elizaos/core\";\nimport {\n type AgentRuntime,\n logger,\n type Memory,\n requireConfirmation,\n type UUID,\n} from \"@elizaos/core\";\nimport {\n LIFEOPS_SCHEDULE_STATE_SCOPES,\n type SyncLifeOpsScheduleObservationsRequest,\n} from \"@elizaos/plugin-elizacloud/cloud/lifeops-schedule-sync-contracts\";\nimport type {\n AcknowledgeLifeOpsReminderRequest,\n CaptureLifeOpsActivitySignalRequest,\n CaptureLifeOpsManualOverrideRequest,\n CaptureLifeOpsPhoneConsentRequest,\n CompleteLifeOpsOccurrenceRequest,\n CreateLifeOpsDefinitionRequest,\n CreateLifeOpsGmailBatchReplyDraftsRequest,\n CreateLifeOpsGmailReplyDraftRequest,\n CreateLifeOpsGoalRequest,\n CreateLifeOpsWorkflowRequest,\n CreateLifeOpsXPostRequest,\n DisconnectLifeOpsMessagingConnectorRequest,\n GetLifeOpsGmailRecommendationsRequest,\n GetLifeOpsGmailSearchRequest,\n GetLifeOpsGmailSpamReviewRequest,\n GetLifeOpsGmailTriageRequest,\n GetLifeOpsGmailUnrespondedRequest,\n GetLifeOpsHealthSummaryRequest,\n GetLifeOpsIMessageMessagesRequest,\n GetLifeOpsInboxRequest,\n IngestLifeOpsGmailEventRequest,\n LifeOpsConnectorMode,\n LifeOpsConnectorSide,\n LifeOpsHealthConnectorProvider,\n LifeOpsInboxChannel,\n LifeOpsOccurrenceView,\n ManageLifeOpsGmailMessagesRequest,\n ProcessLifeOpsRemindersRequest,\n RelockLifeOpsWebsiteAccessRequest,\n ResolveLifeOpsWebsiteAccessCallbackRequest,\n RunLifeOpsWorkflowRequest,\n SendLifeOpsGmailBatchReplyRequest,\n SendLifeOpsGmailMessageRequest,\n SendLifeOpsGmailReplyRequest,\n SetLifeOpsReminderPreferenceRequest,\n SnoozeLifeOpsOccurrenceRequest,\n UpdateLifeOpsDefinitionRequest,\n UpdateLifeOpsGmailSpamReviewItemRequest,\n UpdateLifeOpsGoalRequest,\n UpdateLifeOpsWorkflowRequest,\n UpsertLifeOpsChannelPolicyRequest,\n} from \"../contracts/index.js\";\nimport {\n LIFEOPS_ACTIVITY_SIGNAL_STATES,\n LIFEOPS_CONNECTOR_MODES,\n LIFEOPS_CONNECTOR_SIDES,\n LIFEOPS_GMAIL_SPAM_REVIEW_STATUSES,\n LIFEOPS_HEALTH_CONNECTOR_PROVIDERS,\n LIFEOPS_INBOX_CACHE_MODES,\n LIFEOPS_INBOX_CHANNELS,\n LIFEOPS_SCREEN_TIME_RANGES,\n type LifeOpsGmailSpamReviewStatus,\n type VerifyLifeOpsTelegramConnectorRequest,\n} from \"../contracts/index.js\";\nimport {\n loadLifeOpsAppState,\n saveLifeOpsAppState,\n} from \"../lifeops/app-state.js\";\nimport {\n FinancesService,\n sanitizePaymentSourceForClient,\n} from \"@elizaos/plugin-finances/finances-service\";\nimport { FinancesServiceError } from \"@elizaos/plugin-finances/finance-normalize\";\nimport type { AddPaymentSourceRequest } from \"@elizaos/plugin-finances/payment-types\";\nimport { probeFullDiskAccess } from \"../lifeops/fda-probe.js\";\nimport { LifeOpsRepository } from \"../lifeops/repository.js\";\nimport { LifeOpsService, LifeOpsServiceError } from \"../lifeops/service.js\";\n\nexport interface LifeOpsRouteContext {\n req: http.IncomingMessage;\n res: http.ServerResponse;\n method: string;\n pathname: string;\n url: URL;\n state: {\n runtime: AgentRuntime | null;\n adminEntityId: UUID | null;\n };\n json: (res: http.ServerResponse, data: unknown, status?: number) => void;\n error: (res: http.ServerResponse, message: string, status?: number) => void;\n readJsonBody: <T extends object>(\n req: http.IncomingMessage,\n res: http.ServerResponse,\n options?: ReadJsonBodyOptions,\n ) => Promise<T | null>;\n decodePathComponent: (\n raw: string,\n res: http.ServerResponse,\n label: string,\n ) => string | null;\n}\n\n/**\n * Ensure the request has the runtime context required to act on behalf of\n * the configured owner entity. Returns `false` (and writes a 503) when the\n * agent runtime is not available — this is the per-request analogue of an\n * auth guard. The framework-level token check rejects unauthenticated\n * callers and `routes/plugin.ts` applies OWNER/ADMIN role gating to private\n * raw routes before they reach this handler; this helper confirms the route\n * can actually resolve a tenant.\n */\nfunction requireAuthorizedRouteContext(ctx: LifeOpsRouteContext): boolean {\n if (!ctx.state.runtime) {\n ctx.error(ctx.res, \"Agent runtime is not available\", 503);\n return false;\n }\n return true;\n}\n\nfunction getService(ctx: LifeOpsRouteContext): LifeOpsService | null {\n if (!requireAuthorizedRouteContext(ctx)) {\n return null;\n }\n // `runtime` is non-null after the guard above. The service derives the\n // owner entity from `ctx.state.adminEntityId` when present,\n // otherwise from `defaultOwnerEntityId(runtime)` (a stable per-agent UUID\n // derived from `agentId`). That keeps tenant scoping intact even when the\n // route dispatcher does not surface an explicit admin entity.\n const runtime = ctx.state.runtime;\n if (!runtime) {\n return null;\n }\n return new LifeOpsService(runtime, {\n ownerEntityId: ctx.state.adminEntityId,\n });\n}\n\nfunction getFinancesService(ctx: LifeOpsRouteContext): FinancesService | null {\n if (!requireAuthorizedRouteContext(ctx)) {\n return null;\n }\n const runtime = ctx.state.runtime;\n if (!runtime) {\n return null;\n }\n return new FinancesService(runtime, {\n ownerEntityId: ctx.state.adminEntityId,\n });\n}\n\n// ---------------------------------------------------------------------------\n// Rate limit configuration per operation.\n//\n// Conventions for new routes:\n// • Read GET endpoints: rely on `default` (60/min) unless they hit a paid\n// upstream — then use `google_api_read` / similar.\n// • State-changing POST/PUT/PATCH/DELETE: ALWAYS rate-limit. Pick the most\n// specific bucket from the list below; fall back to `connector_write` for\n// generic configuration writes or `default` only if nothing fits.\n// • Sensitive flows (sending email, OAuth init, token refresh, paid API\n// writes, irreversible deletes): use a dedicated tight bucket so a buggy\n// client cannot drain quota or fan out side-effects.\n//\n// Keys are logical operation names; the \"default\" entry applies to any\n// operation not explicitly listed.\n// ---------------------------------------------------------------------------\nconst LIFEOPS_RATE_LIMITS = {\n google_api_read: { maxRequests: 120, windowMs: 60_000 },\n google_api_write: { maxRequests: 30, windowMs: 60_000 },\n reminders_process: { maxRequests: 10, windowMs: 60_000 },\n task_create: { maxRequests: 30, windowMs: 60_000 },\n task_update: { maxRequests: 30, windowMs: 60_000 },\n gmail_draft: { maxRequests: 20, windowMs: 60_000 },\n // Tightened from 5/min: composing and sending email is the most sensitive\n // outbound action LifeOps takes; cap the burst at 2/min so a bug or a\n // confused operator cannot machine-gun the user's contacts.\n gmail_send: { maxRequests: 2, windowMs: 60_000 },\n calendar_create: { maxRequests: 20, windowMs: 60_000 },\n calendar_update: { maxRequests: 20, windowMs: 60_000 },\n calendar_delete: { maxRequests: 10, windowMs: 60_000 },\n // OAuth + connector lifecycle: tight cap because these mutate stored\n // credentials or initiate consent flows.\n oauth_init: { maxRequests: 5, windowMs: 60_000 },\n connector_write: { maxRequests: 10, windowMs: 60_000 },\n // Generic outbound messaging (X DMs, iMessage, signal, telegram). Tighter\n // than the default to limit blast radius.\n outbound_message: { maxRequests: 5, windowMs: 60_000 },\n default: { maxRequests: 60, windowMs: 60_000 },\n} satisfies Record<string, RateLimitConfig>;\n\ntype LifeOpsRateLimitOperation = keyof typeof LIFEOPS_RATE_LIMITS;\n\nconst ACTIVITY_SIGNALS_DEFAULT_LIMIT = 200;\nconst ACTIVITY_SIGNALS_MAX_LIMIT = 500;\nconst MS_PER_DAY = 86_400_000;\nconst MAX_SCREEN_TIME_WINDOW_DAYS = 31;\nconst MAX_SCREEN_TIME_WINDOW_MS = MAX_SCREEN_TIME_WINDOW_DAYS * MS_PER_DAY;\nconst routeSchemaBootstraps = new WeakMap<AgentRuntime, Promise<void>>();\n\nasync function ensureRouteSchema(runtime: AgentRuntime | null): Promise<void> {\n if (!runtime) return;\n const adapter = runtime.adapter;\n if (!adapter || typeof adapter.runPluginMigrations !== \"function\") return;\n if (typeof adapter.isReady === \"function\" && !(await adapter.isReady())) {\n return;\n }\n let bootstrap = routeSchemaBootstraps.get(runtime);\n if (!bootstrap) {\n bootstrap = LifeOpsRepository.bootstrapSchema(runtime).catch((error) => {\n routeSchemaBootstraps.delete(runtime);\n throw error;\n });\n routeSchemaBootstraps.set(runtime, bootstrap);\n }\n await bootstrap;\n}\n\n/**\n * Check rate limit for a LifeOps operation. If the limit is exceeded,\n * sends a 429 response with Retry-After header and returns `true`.\n * Returns `false` when the request is allowed to proceed.\n */\nfunction rateLimitRequest(\n ctx: LifeOpsRouteContext,\n operation: LifeOpsRateLimitOperation,\n): boolean {\n const agentId = String(ctx.state.runtime?.agentId ?? \"unknown\");\n const limitKey = `${agentId}:${operation}`;\n const config = LIFEOPS_RATE_LIMITS[operation];\n const { allowed, retryAfterMs } = checkRateLimit(limitKey, config);\n if (!allowed) {\n ctx.res.writeHead(429, {\n \"Retry-After\": String(Math.ceil(retryAfterMs / 1_000)),\n });\n ctx.res.end(JSON.stringify({ error: \"Rate limit exceeded\", retryAfterMs }));\n return true;\n }\n return false;\n}\n\nfunction routeOperation(ctx: LifeOpsRouteContext): string {\n return `${ctx.method.toUpperCase()} ${ctx.pathname}`;\n}\n\nfunction errorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n\n// Map a scheduled-task occurrence state onto the todo-board status the\n// TodosView renders. The overview returns only active occurrences\n// (visible/pending/snoozed), so the board never sees terminal states; the\n// mapping is exhaustive over LifeOpsOccurrenceState for type safety.\nfunction occurrenceStateToTodoStatus(\n state: LifeOpsOccurrenceView[\"state\"],\n): \"pending\" | \"in_progress\" | \"completed\" {\n switch (state) {\n case \"snoozed\":\n return \"in_progress\";\n case \"completed\":\n return \"completed\";\n default:\n return \"pending\";\n }\n}\n\nfunction decodeMatchedPathComponent(\n ctx: LifeOpsRouteContext,\n match: RegExpMatchArray | null,\n index: number,\n res: http.ServerResponse,\n label: string,\n): string | null {\n const raw = match?.[index];\n return raw ? ctx.decodePathComponent(raw, res, label) : null;\n}\n\nfunction parseRouteInput<T>(\n ctx: LifeOpsRouteContext,\n parser: () => T | null,\n): T | null {\n try {\n return parser();\n } catch (error) {\n if (error instanceof LifeOpsServiceError) {\n ctx.error(ctx.res, error.message, error.status);\n return null;\n }\n throw error;\n }\n}\n\nfunction parsePositiveIntegerQuery(\n value: string | null,\n field: string,\n options: { max?: number } = {},\n): number | null {\n const normalized = value?.trim();\n if (!normalized) {\n return null;\n }\n if (!/^\\d+$/.test(normalized)) {\n throw new LifeOpsServiceError(400, `${field} must be a positive integer`);\n }\n const parsed = Number.parseInt(normalized, 10);\n if (parsed <= 0) {\n throw new LifeOpsServiceError(400, `${field} must be a positive integer`);\n }\n if (options.max !== undefined && parsed > options.max) {\n throw new LifeOpsServiceError(\n 400,\n `${field} must be less than or equal to ${options.max}`,\n );\n }\n return parsed;\n}\n\nfunction isOneOf<T extends string>(\n value: string,\n values: readonly T[],\n): value is T {\n return values.some((allowed) => allowed === value);\n}\n\nfunction parseConnectorModeQuery(\n value: string | null,\n): LifeOpsConnectorMode | undefined {\n const normalized = value?.trim().toLowerCase();\n if (!normalized) {\n return undefined;\n }\n if (!isOneOf(normalized, LIFEOPS_CONNECTOR_MODES)) {\n throw new LifeOpsServiceError(\n 400,\n `mode must be one of: ${LIFEOPS_CONNECTOR_MODES.join(\", \")}`,\n );\n }\n return normalized;\n}\n\nfunction parseConnectorModeInput(\n value: unknown,\n): LifeOpsConnectorMode | undefined {\n if (value === undefined || value === null || value === \"\") {\n return undefined;\n }\n if (typeof value !== \"string\") {\n throw new LifeOpsServiceError(\n 400,\n `mode must be one of: ${LIFEOPS_CONNECTOR_MODES.join(\", \")}`,\n );\n }\n return parseConnectorModeQuery(value);\n}\n\nfunction parseConnectorSideQuery(\n value: string | null,\n): LifeOpsConnectorSide | undefined {\n const normalized = value?.trim().toLowerCase();\n if (!normalized) {\n return undefined;\n }\n if (!isOneOf(normalized, LIFEOPS_CONNECTOR_SIDES)) {\n throw new LifeOpsServiceError(\n 400,\n `side must be one of: ${LIFEOPS_CONNECTOR_SIDES.join(\", \")}`,\n );\n }\n return normalized;\n}\n\nfunction parseConnectorSideInput(\n value: unknown,\n): LifeOpsConnectorSide | undefined {\n if (value === undefined || value === null || value === \"\") {\n return undefined;\n }\n if (typeof value !== \"string\") {\n throw new LifeOpsServiceError(\n 400,\n `side must be one of: ${LIFEOPS_CONNECTOR_SIDES.join(\", \")}`,\n );\n }\n return parseConnectorSideQuery(value);\n}\n\nfunction parseConnectorSideFromRequest(\n url: URL,\n body?: { side?: unknown } | null,\n): LifeOpsConnectorSide | undefined {\n const querySide = parseConnectorSideQuery(url.searchParams.get(\"side\"));\n const bodySide = parseConnectorSideInput(body?.side);\n if (querySide && bodySide && querySide !== bodySide) {\n throw new LifeOpsServiceError(\n 400,\n \"side must match between query string and request body\",\n );\n }\n return bodySide ?? querySide;\n}\n\nfunction parseHealthConnectorProvider(\n value: string,\n): LifeOpsHealthConnectorProvider {\n const normalized = value.trim().toLowerCase();\n if (!isOneOf(normalized, LIFEOPS_HEALTH_CONNECTOR_PROVIDERS)) {\n throw new LifeOpsServiceError(\n 400,\n `provider must be one of: ${LIFEOPS_HEALTH_CONNECTOR_PROVIDERS.join(\", \")}`,\n );\n }\n return normalized;\n}\n\nfunction parseOptionalHealthConnectorProvider(\n value: string | null,\n): LifeOpsHealthConnectorProvider | null {\n const normalized = value?.trim();\n return normalized ? parseHealthConnectorProvider(normalized) : null;\n}\n\nfunction parseHealthConnectorProviderPath(\n ctx: LifeOpsRouteContext,\n match: RegExpMatchArray,\n): LifeOpsHealthConnectorProvider | null {\n return parseRouteInput(ctx, () => {\n const provider = decodeMatchedPathComponent(\n ctx,\n match,\n 1,\n ctx.res,\n \"provider\",\n );\n return provider ? parseHealthConnectorProvider(provider) : null;\n });\n}\n\nfunction parseDateOnlyQuery(\n value: string | null,\n field: string,\n): string | null {\n const normalized = value?.trim();\n if (!normalized) {\n return null;\n }\n if (!/^\\d{4}-\\d{2}-\\d{2}$/.test(normalized)) {\n throw new LifeOpsServiceError(400, `${field} must be a YYYY-MM-DD date`);\n }\n return normalized;\n}\n\nfunction parseGmailSpamReviewStatusInput(\n value: unknown,\n field: string,\n): LifeOpsGmailSpamReviewStatus | undefined {\n if (value === undefined || value === null || value === \"\") {\n return undefined;\n }\n if (typeof value !== \"string\") {\n throw new LifeOpsServiceError(\n 400,\n `${field} must be one of: ${LIFEOPS_GMAIL_SPAM_REVIEW_STATUSES.join(\", \")}`,\n );\n }\n const normalized = value.trim().toLowerCase();\n if (!normalized) {\n return undefined;\n }\n if (!isOneOf(normalized, LIFEOPS_GMAIL_SPAM_REVIEW_STATUSES)) {\n throw new LifeOpsServiceError(\n 400,\n `${field} must be one of: ${LIFEOPS_GMAIL_SPAM_REVIEW_STATUSES.join(\", \")}`,\n );\n }\n return normalized;\n}\n\nfunction parseGmailSpamReviewStatusQuery(\n value: string | null,\n): LifeOpsGmailSpamReviewStatus | undefined {\n return parseGmailSpamReviewStatusInput(value, \"status\");\n}\n\nfunction parseBooleanQuery(\n value: string | null,\n field: string,\n): boolean | undefined {\n if (value === null) {\n return undefined;\n }\n const normalized = value.trim().toLowerCase();\n if (normalized === \"true\" || normalized === \"1\") {\n return true;\n }\n if (normalized === \"false\" || normalized === \"0\") {\n return false;\n }\n throw new LifeOpsServiceError(400, `${field} must be a boolean`);\n}\n\nfunction requireBodyString(\n body: Record<string, unknown>,\n field: string,\n): string {\n const value = body[field];\n if (typeof value !== \"string\") {\n throw new LifeOpsServiceError(400, `${field} is required`);\n }\n const trimmed = value.trim();\n if (!trimmed) {\n throw new LifeOpsServiceError(400, `${field} is required`);\n }\n return trimmed;\n}\n\nfunction parseOptionalBodyString(\n body: Record<string, unknown>,\n field: string,\n): string | undefined {\n const value = body[field];\n if (value === undefined || value === null || value === \"\") {\n return undefined;\n }\n if (typeof value !== \"string\") {\n throw new LifeOpsServiceError(400, `${field} must be a string`);\n }\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : undefined;\n}\n\nfunction parseOptionalBodyBoolean(\n body: Record<string, unknown>,\n field: string,\n): boolean | undefined {\n const value = body[field];\n if (value === undefined || value === null) {\n return undefined;\n }\n if (typeof value !== \"boolean\") {\n throw new LifeOpsServiceError(400, `${field} must be a boolean`);\n }\n return value;\n}\n\nfunction parseOptionalBodyStringArray(\n body: Record<string, unknown>,\n field: string,\n): string[] | undefined {\n const value = body[field];\n if (value === undefined || value === null) {\n return undefined;\n }\n if (!Array.isArray(value)) {\n throw new LifeOpsServiceError(400, `${field} must be an array of strings`);\n }\n const parsed = value.map((entry) => {\n if (typeof entry !== \"string\") {\n throw new LifeOpsServiceError(\n 400,\n `${field} must be an array of strings`,\n );\n }\n return entry.trim();\n });\n if (parsed.some((entry) => entry.length === 0)) {\n throw new LifeOpsServiceError(\n 400,\n `${field} must be an array of non-empty strings`,\n );\n }\n return parsed;\n}\n\nfunction parseActivitySignalStates(\n url: URL,\n): Array<(typeof LIFEOPS_ACTIVITY_SIGNAL_STATES)[number]> | null {\n const rawValues = [\n ...url.searchParams.getAll(\"state\"),\n ...url.searchParams.getAll(\"states\").flatMap((value) => value.split(\",\")),\n ]\n .map((value) => value.trim())\n .filter((value) => value.length > 0);\n if (rawValues.length === 0) {\n return null;\n }\n const states: Array<(typeof LIFEOPS_ACTIVITY_SIGNAL_STATES)[number]> = [];\n for (const value of rawValues) {\n if (!isOneOf(value, LIFEOPS_ACTIVITY_SIGNAL_STATES)) {\n throw new LifeOpsServiceError(\n 400,\n `state must be one of: ${LIFEOPS_ACTIVITY_SIGNAL_STATES.join(\", \")}`,\n );\n }\n states.push(value);\n }\n return states;\n}\n\nfunction parseScreenTimeSourceQuery(\n value: string | null,\n): \"app\" | \"website\" | undefined {\n const normalized = value?.trim().toLowerCase();\n if (!normalized) {\n return undefined;\n }\n if (normalized !== \"app\" && normalized !== \"website\") {\n throw new LifeOpsServiceError(400, \"source must be app or website\");\n }\n return normalized;\n}\n\nfunction parseScreenTimeIdentifierQuery(\n value: string | null,\n): string | undefined {\n const normalized = value?.trim();\n return normalized && normalized.length > 0 ? normalized : undefined;\n}\n\nfunction parseScreenTimeRangeQuery(value: string | null) {\n const normalized = value?.trim().toLowerCase() || \"today\";\n if (!isOneOf(normalized, LIFEOPS_SCREEN_TIME_RANGES)) {\n throw new LifeOpsServiceError(\n 400,\n `range must be one of: ${LIFEOPS_SCREEN_TIME_RANGES.join(\", \")}`,\n );\n }\n return normalized;\n}\n\nconst ISO_INSTANT_QUERY_RE =\n /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d{1,3})?Z$/;\n\nfunction parseRequiredIsoQuery(url: URL, field: string): string {\n const value = url.searchParams.get(field)?.trim();\n if (!value) {\n throw new LifeOpsServiceError(400, `${field} is required`);\n }\n if (\n !ISO_INSTANT_QUERY_RE.test(value) ||\n !Number.isFinite(Date.parse(value))\n ) {\n throw new LifeOpsServiceError(400, `${field} must be a valid ISO string`);\n }\n return value;\n}\n\nfunction parseOptionalIsoQuery(\n value: string | null,\n field: string,\n): string | null {\n const normalized = value?.trim();\n if (!normalized) {\n return null;\n }\n if (!Number.isFinite(Date.parse(normalized))) {\n throw new LifeOpsServiceError(400, `${field} must be a valid ISO string`);\n }\n return normalized;\n}\n\nfunction parseBoundedIsoWindowQuery(url: URL): {\n since: string;\n until: string;\n} {\n const since = parseRequiredIsoQuery(url, \"since\");\n const until = parseRequiredIsoQuery(url, \"until\");\n const sinceMs = Date.parse(since);\n const untilMs = Date.parse(until);\n if (untilMs <= sinceMs) {\n throw new LifeOpsServiceError(400, \"until must be after since\");\n }\n if (untilMs - sinceMs > MAX_SCREEN_TIME_WINDOW_MS) {\n throw new LifeOpsServiceError(\n 400,\n `window must be ${MAX_SCREEN_TIME_WINDOW_DAYS} days or less`,\n );\n }\n return { since, until };\n}\n\nasync function runRoute(\n ctx: LifeOpsRouteContext,\n fn: (service: LifeOpsService) => Promise<void>,\n): Promise<boolean> {\n const operation = routeOperation(ctx);\n const span = createIntegrationTelemetrySpan({\n boundary: \"lifeops\",\n operation,\n });\n const service = getService(ctx);\n if (!service) {\n logger.info(\n {\n boundary: \"lifeops\",\n operation,\n statusCode: 503,\n },\n \"[lifeops] Route rejected because agent runtime is unavailable\",\n );\n span.failure({\n statusCode: 503,\n errorKind: \"runtime_unavailable\",\n });\n return true;\n }\n try {\n // Routes can be served before a startup hook migrates the LifeOps DB;\n // bootstrap the schema here (memoized per runtime) before any handler runs.\n await ensureRouteSchema(ctx.state.runtime);\n await fn(service);\n span.success({\n statusCode: ctx.res.statusCode >= 400 ? ctx.res.statusCode : 200,\n });\n return true;\n } catch (error) {\n if (error instanceof LifeOpsServiceError) {\n const logFn =\n error.status === 401\n ? logger.debug.bind(logger)\n : logger.warn.bind(logger);\n logFn(\n {\n boundary: \"lifeops\",\n operation,\n statusCode: error.status,\n },\n `[lifeops] Route failed: ${error.message}`,\n );\n span.failure({\n statusCode: error.status,\n error,\n errorKind:\n error.status === 401\n ? \"lifeops_auth_invalid\"\n : \"lifeops_service_error\",\n });\n ctx.error(ctx.res, error.message, error.status);\n return true;\n }\n logger.error(\n {\n boundary: \"lifeops\",\n operation,\n },\n `[lifeops] Route crashed: ${errorMessage(error)}`,\n );\n span.failure({\n error,\n errorKind: \"unhandled_error\",\n });\n throw error;\n }\n}\n\n/**\n * Variant of {@link runRoute} that injects a {@link FinancesService} (the\n * finance back-end in @elizaos/plugin-finances) instead of LifeOpsService, and\n * maps {@link FinancesServiceError} to the same HTTP shape. Used by the\n * /api/lifeops/money/* routes whose payments logic moved to plugin-finances.\n * URLs and response shapes are unchanged.\n */\nasync function runFinancesRoute(\n ctx: LifeOpsRouteContext,\n fn: (service: FinancesService) => Promise<void>,\n): Promise<boolean> {\n const operation = routeOperation(ctx);\n const span = createIntegrationTelemetrySpan({\n boundary: \"lifeops\",\n operation,\n });\n const service = getFinancesService(ctx);\n if (!service) {\n logger.info(\n {\n boundary: \"lifeops\",\n operation,\n statusCode: 503,\n },\n \"[lifeops] Route rejected because agent runtime is unavailable\",\n );\n span.failure({\n statusCode: 503,\n errorKind: \"runtime_unavailable\",\n });\n return true;\n }\n try {\n await ensureRouteSchema(ctx.state.runtime);\n await fn(service);\n span.success({\n statusCode: ctx.res.statusCode >= 400 ? ctx.res.statusCode : 200,\n });\n return true;\n } catch (error) {\n if (error instanceof FinancesServiceError) {\n const logFn =\n error.status === 401\n ? logger.debug.bind(logger)\n : logger.warn.bind(logger);\n logFn(\n {\n boundary: \"lifeops\",\n operation,\n statusCode: error.status,\n },\n `[lifeops] Route failed: ${error.message}`,\n );\n span.failure({\n statusCode: error.status,\n error,\n errorKind:\n error.status === 401\n ? \"lifeops_auth_invalid\"\n : \"lifeops_service_error\",\n });\n ctx.error(ctx.res, error.message, error.status);\n return true;\n }\n logger.error(\n {\n boundary: \"lifeops\",\n operation,\n },\n `[lifeops] Route crashed: ${errorMessage(error)}`,\n );\n span.failure({\n error,\n errorKind: \"unhandled_error\",\n });\n throw error;\n }\n}\n\nfunction parseConnectorRefreshDetailFromQuery(\n ctx: LifeOpsRouteContext,\n defaults: {\n side: LifeOpsConnectorSide;\n mode: LifeOpsConnectorMode;\n },\n): {\n side: LifeOpsConnectorSide;\n mode: LifeOpsConnectorMode;\n} | null {\n return parseRouteInput(ctx, () => ({\n side:\n parseConnectorSideQuery(ctx.url.searchParams.get(\"side\")) ??\n defaults.side,\n mode:\n parseConnectorModeQuery(ctx.url.searchParams.get(\"mode\")) ??\n defaults.mode,\n }));\n}\n\nfunction escapeHtml(value: string): string {\n return value\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/\"/g, \""\")\n .replace(/'/g, \"'\");\n}\n\nfunction serializeInlineScriptValue(value: unknown): string {\n return JSON.stringify(value).replace(/</g, \"\\\\u003c\");\n}\n\nfunction writeHtml(\n res: http.ServerResponse,\n status: number,\n title: string,\n message: string,\n refreshDetail?: {\n side?: LifeOpsConnectorSide;\n mode?: LifeOpsConnectorMode;\n },\n): void {\n const refreshScript = refreshDetail\n ? `\n <script>\n (() => {\n const payload = ${serializeInlineScriptValue({\n type: \"lifeops-google-connector-refresh\",\n detail: {\n ...refreshDetail,\n source: \"callback\",\n },\n })};\n if (window.opener && typeof window.opener.postMessage === \"function\") {\n window.opener.postMessage(payload, \"*\");\n }\n if (typeof BroadcastChannel === \"function\") {\n for (const channelName of [\n \"elizaos:lifeops:google-connector\",\n \"eliza:lifeops:google-connector\",\n ]) {\n const channel = new BroadcastChannel(channelName);\n channel.postMessage(payload);\n channel.close();\n }\n }\n if (typeof localStorage !== \"undefined\") {\n for (const storageKey of [\n \"elizaos:lifeops:google-connector-refresh\",\n \"eliza:lifeops:google-connector-refresh\",\n ]) {\n localStorage.setItem(\n storageKey,\n JSON.stringify({\n ...payload,\n at: Date.now(),\n }),\n );\n localStorage.removeItem(storageKey);\n }\n }\n })();\n </script>`\n : \"\";\n res.statusCode = status;\n res.setHeader(\"Content-Type\", \"text/html; charset=utf-8\");\n res.end(`<!doctype html>\n<html lang=\"en\">\n <head>\n <meta charset=\"utf-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n <title>${escapeHtml(title)}</title>\n <style>\n body {\n margin: 0;\n min-height: 100vh;\n display: grid;\n place-items: center;\n background: #f5f1e8;\n color: #18120d;\n font-family: \"IBM Plex Sans\", \"Helvetica Neue\", sans-serif;\n }\n main {\n width: min(32rem, calc(100vw - 2rem));\n padding: 2rem;\n border: 1px solid rgba(24, 18, 13, 0.12);\n border-radius: 1.25rem;\n background: rgba(255, 255, 255, 0.92);\n box-shadow: 0 24px 80px rgba(24, 18, 13, 0.08);\n }\n h1 {\n margin: 0 0 0.75rem;\n font-size: 1.25rem;\n }\n p {\n margin: 0;\n line-height: 1.5;\n color: rgba(24, 18, 13, 0.78);\n }\n </style>\n </head>\n <body>\n <main>\n <h1>${escapeHtml(title)}</h1>\n <p>${escapeHtml(message)}</p>\n </main>\n ${refreshScript}\n <script>\n window.setTimeout(() => {\n if (typeof window.close === \"function\") {\n window.close();\n }\n }, 250);\n </script>\n </body>\n</html>`);\n}\n\nexport async function handleLifeOpsRoutes(\n ctx: LifeOpsRouteContext,\n): Promise<boolean> {\n const { req, res, method, pathname, url, json, readJsonBody } = ctx;\n\n // Calendar routes are owned by @elizaos/plugin-calendar; the path -> service\n // mapping lives there. We inject LifeOps' HTTP plumbing so the calendar plugin\n // never depends back on LifeOps.\n if (\n await handleCalendarRoutes({\n method,\n pathname,\n url,\n runRoute: (fn) =>\n runRoute(ctx, fn as unknown as (service: LifeOpsService) => Promise<void>),\n rateLimit: (key) =>\n rateLimitRequest(ctx, key as LifeOpsRateLimitOperation),\n json: (data, status) => json(res, data, status),\n readJsonBody: <T extends object>() => readJsonBody<T>(req, res),\n decodePathComponent: (raw, label) =>\n ctx.decodePathComponent(raw, res, label),\n parseConnectorMode: (value) => parseConnectorModeQuery(value),\n parseConnectorSide: (value) => parseConnectorSideQuery(value),\n parseBoolean: (value, field) => parseBooleanQuery(value, field),\n serviceError: (status, message) =>\n new LifeOpsServiceError(status, message),\n })\n ) {\n return true;\n }\n\n if (method === \"GET\" && pathname === \"/api/lifeops/app-state\") {\n if (!requireAuthorizedRouteContext(ctx)) return true;\n const runtime = ctx.state.runtime;\n if (!runtime) return true;\n json(res, await loadLifeOpsAppState(runtime));\n return true;\n }\n\n if (method === \"POST\" && pathname === \"/api/lifeops/features/toggle\") {\n if (!requireAuthorizedRouteContext(ctx)) return true;\n if (rateLimitRequest(ctx, \"default\")) return true;\n const runtime = ctx.state.runtime;\n if (!runtime) return true;\n const body = await readJsonBody<{\n featureKey?: unknown;\n enabled?: unknown;\n }>(req, res);\n if (!body) {\n return true;\n }\n const { getFeatureFlagRegistry } = await import(\n \"../lifeops/registries/feature-flag-registry.js\"\n );\n const featureFlagRegistry = getFeatureFlagRegistry(runtime);\n if (!featureFlagRegistry) {\n ctx.error(res, \"feature flag registry not initialized\", 503);\n return true;\n }\n if (\n typeof body.featureKey !== \"string\" ||\n !featureFlagRegistry.has(body.featureKey)\n ) {\n ctx.error(\n res,\n `featureKey must be a registered feature flag (one of: ${featureFlagRegistry\n .list()\n .map((c) => c.key)\n .join(\", \")})`,\n 400,\n );\n return true;\n }\n if (typeof body.enabled !== \"boolean\") {\n ctx.error(res, \"enabled must be a boolean\", 400);\n return true;\n }\n const { createFeatureFlagService } = await import(\n \"../lifeops/feature-flags.js\"\n );\n const service = createFeatureFlagService(runtime);\n const next = body.enabled\n ? await service.enable(body.featureKey, \"local\", null)\n : await service.disable(body.featureKey, \"local\", null);\n json(res, {\n feature: {\n featureKey: next.featureKey,\n enabled: next.enabled,\n source: next.source,\n label: next.label,\n description: next.description,\n costsMoney: next.costsMoney,\n enabledAt: next.enabledAt ? next.enabledAt.toISOString() : null,\n enabledBy: next.enabledBy,\n packageId:\n typeof next.metadata.packageId === \"string\"\n ? next.metadata.packageId\n : null,\n },\n });\n return true;\n }\n\n if (method === \"PUT\" && pathname === \"/api/lifeops/app-state\") {\n if (!requireAuthorizedRouteContext(ctx)) return true;\n if (rateLimitRequest(ctx, \"default\")) return true;\n const runtime = ctx.state.runtime;\n if (!runtime) return true;\n const body = await readJsonBody<{\n enabled?: unknown;\n priorityScoring?: unknown;\n }>(req, res);\n if (!body) {\n return true;\n }\n if (typeof body.enabled !== \"boolean\") {\n ctx.error(res, \"enabled must be a boolean\", 400);\n return true;\n }\n // Hydrate the previous priorityScoring config so partial PUTs do not\n // erase fields the caller did not send.\n const previous = await loadLifeOpsAppState(runtime);\n let priorityScoring = previous.priorityScoring;\n if (body.priorityScoring !== undefined) {\n if (\n !body.priorityScoring ||\n typeof body.priorityScoring !== \"object\" ||\n Array.isArray(body.priorityScoring)\n ) {\n ctx.error(res, \"priorityScoring must be an object\", 400);\n return true;\n }\n const ps = body.priorityScoring as {\n enabled?: unknown;\n model?: unknown;\n };\n const enabled =\n typeof ps.enabled === \"boolean\" ? ps.enabled : priorityScoring.enabled;\n let model: string | null = priorityScoring.model;\n if (ps.model === null) {\n model = null;\n } else if (typeof ps.model === \"string\") {\n const trimmed = ps.model.trim();\n model = trimmed.length > 0 ? trimmed : null;\n } else if (ps.model !== undefined) {\n ctx.error(res, \"priorityScoring.model must be a string or null\", 400);\n return true;\n }\n priorityScoring = { enabled, model };\n }\n try {\n const saved = await saveLifeOpsAppState(runtime, {\n enabled: body.enabled,\n priorityScoring,\n });\n json(res, saved);\n } catch (error) {\n ctx.error(\n res,\n `failed to persist LifeOps app state: ${\n error instanceof Error ? error.message : String(error)\n }`,\n 500,\n );\n }\n return true;\n }\n\n if (method === \"GET\" && pathname === \"/api/lifeops/gmail/triage\") {\n if (rateLimitRequest(ctx, \"google_api_read\")) return true;\n return runRoute(ctx, async (service) => {\n const request: GetLifeOpsGmailTriageRequest = {\n mode: parseConnectorModeQuery(url.searchParams.get(\"mode\")),\n side: parseConnectorSideQuery(url.searchParams.get(\"side\")),\n forceSync: parseBooleanQuery(\n url.searchParams.get(\"forceSync\"),\n \"forceSync\",\n ),\n maxResults:\n parsePositiveIntegerQuery(\n url.searchParams.get(\"maxResults\"),\n \"maxResults\",\n ) ?? undefined,\n grantId: url.searchParams.get(\"grantId\") ?? undefined,\n };\n json(res, await service.getGmailTriage(url, request));\n });\n }\n\n if (method === \"GET\" && pathname === \"/api/lifeops/gmail/search\") {\n if (rateLimitRequest(ctx, \"google_api_read\")) return true;\n return runRoute(ctx, async (service) => {\n const query = url.searchParams.get(\"query\");\n const request: GetLifeOpsGmailSearchRequest = {\n mode: parseConnectorModeQuery(url.searchParams.get(\"mode\")),\n side: parseConnectorSideQuery(url.searchParams.get(\"side\")),\n forceSync: parseBooleanQuery(\n url.searchParams.get(\"forceSync\"),\n \"forceSync\",\n ),\n maxResults:\n parsePositiveIntegerQuery(\n url.searchParams.get(\"maxResults\"),\n \"maxResults\",\n ) ?? undefined,\n query: query ?? \"\",\n replyNeededOnly: parseBooleanQuery(\n url.searchParams.get(\"replyNeededOnly\"),\n \"replyNeededOnly\",\n ),\n includeSpamTrash: parseBooleanQuery(\n url.searchParams.get(\"includeSpamTrash\"),\n \"includeSpamTrash\",\n ),\n grantId: url.searchParams.get(\"grantId\") ?? undefined,\n };\n json(res, await service.getGmailSearch(url, request));\n });\n }\n\n if (method === \"GET\" && pathname === \"/api/lifeops/gmail/needs-response\") {\n if (rateLimitRequest(ctx, \"google_api_read\")) return true;\n return runRoute(ctx, async (service) => {\n const request: GetLifeOpsGmailTriageRequest = {\n mode: parseConnectorModeQuery(url.searchParams.get(\"mode\")),\n side: parseConnectorSideQuery(url.searchParams.get(\"side\")),\n forceSync: parseBooleanQuery(\n url.searchParams.get(\"forceSync\"),\n \"forceSync\",\n ),\n maxResults:\n parsePositiveIntegerQuery(\n url.searchParams.get(\"maxResults\"),\n \"maxResults\",\n ) ?? undefined,\n grantId: url.searchParams.get(\"grantId\") ?? undefined,\n };\n json(res, await service.getGmailNeedsResponse(url, request));\n });\n }\n\n if (method === \"GET\" && pathname === \"/api/lifeops/gmail/recommendations\") {\n if (rateLimitRequest(ctx, \"google_api_read\")) return true;\n return runRoute(ctx, async (service) => {\n const query = url.searchParams.get(\"query\");\n const request: GetLifeOpsGmailRecommendationsRequest = {\n mode: parseConnectorModeQuery(url.searchParams.get(\"mode\")),\n side: parseConnectorSideQuery(url.searchParams.get(\"side\")),\n forceSync: parseBooleanQuery(\n url.searchParams.get(\"forceSync\"),\n \"forceSync\",\n ),\n maxResults:\n parsePositiveIntegerQuery(\n url.searchParams.get(\"maxResults\"),\n \"maxResults\",\n ) ?? undefined,\n query: query ?? undefined,\n replyNeededOnly: parseBooleanQuery(\n url.searchParams.get(\"replyNeededOnly\"),\n \"replyNeededOnly\",\n ),\n includeSpamTrash: parseBooleanQuery(\n url.searchParams.get(\"includeSpamTrash\"),\n \"includeSpamTrash\",\n ),\n grantId: url.searchParams.get(\"grantId\") ?? undefined,\n };\n json(res, await service.getGmailRecommendations(url, request));\n });\n }\n\n if (method === \"GET\" && pathname === \"/api/lifeops/gmail/spam-review\") {\n if (rateLimitRequest(ctx, \"google_api_read\")) return true;\n return runRoute(ctx, async (service) => {\n const request: GetLifeOpsGmailSpamReviewRequest = {\n mode: parseConnectorModeQuery(url.searchParams.get(\"mode\")),\n side: parseConnectorSideQuery(url.searchParams.get(\"side\")),\n grantId: url.searchParams.get(\"grantId\") ?? undefined,\n status: parseGmailSpamReviewStatusQuery(url.searchParams.get(\"status\")),\n maxResults:\n parsePositiveIntegerQuery(\n url.searchParams.get(\"maxResults\"),\n \"maxResults\",\n ) ?? undefined,\n };\n json(res, await service.getGmailSpamReviewItems(url, request));\n });\n }\n\n const gmailSpamReviewMatch = pathname.match(\n /^\\/api\\/lifeops\\/gmail\\/spam-review\\/([^/]+)$/,\n );\n if (method === \"PATCH\" && gmailSpamReviewMatch) {\n if (rateLimitRequest(ctx, \"google_api_write\")) return true;\n const itemId = decodeMatchedPathComponent(\n ctx,\n gmailSpamReviewMatch,\n 1,\n res,\n \"itemId\",\n );\n if (!itemId) return true;\n const body = await readJsonBody<UpdateLifeOpsGmailSpamReviewItemRequest>(\n req,\n res,\n );\n if (!body) return true;\n return runRoute(ctx, async (service) => {\n const status = parseGmailSpamReviewStatusInput(body.status, \"status\");\n if (!status) {\n throw new LifeOpsServiceError(400, \"status is required\");\n }\n json(\n res,\n await service.updateGmailSpamReviewItem(url, itemId, { status }),\n );\n });\n }\n\n if (method === \"GET\" && pathname === \"/api/lifeops/gmail/unresponded\") {\n if (rateLimitRequest(ctx, \"google_api_read\")) return true;\n return runRoute(ctx, async (service) => {\n const request: GetLifeOpsGmailUnrespondedRequest = {\n mode: parseConnectorModeQuery(url.searchParams.get(\"mode\")),\n side: parseConnectorSideQuery(url.searchParams.get(\"side\")),\n maxResults:\n parsePositiveIntegerQuery(\n url.searchParams.get(\"maxResults\"),\n \"maxResults\",\n ) ?? undefined,\n olderThanDays:\n parsePositiveIntegerQuery(\n url.searchParams.get(\"olderThanDays\"),\n \"olderThanDays\",\n ) ?? undefined,\n grantId: url.searchParams.get(\"grantId\") ?? undefined,\n };\n json(res, await service.getGmailUnresponded(url, request));\n });\n }\n\n if (method === \"GET\" && pathname === \"/api/lifeops/inbox\") {\n return runRoute(ctx, async (service) => {\n const limit =\n parsePositiveIntegerQuery(url.searchParams.get(\"limit\"), \"limit\") ??\n undefined;\n const rawChannels = url.searchParams.get(\"channels\");\n let channels: LifeOpsInboxChannel[] | undefined;\n if (rawChannels !== null && rawChannels.trim().length > 0) {\n const parsed = rawChannels\n .split(\",\")\n .map((value) => value.trim().toLowerCase())\n .filter((value) => value.length > 0);\n const parsedChannels: LifeOpsInboxChannel[] = [];\n for (const value of parsed) {\n if (!isOneOf(value, LIFEOPS_INBOX_CHANNELS)) {\n throw new LifeOpsServiceError(\n 400,\n `channels must be a comma-separated subset of: ${LIFEOPS_INBOX_CHANNELS.join(\", \")}`,\n );\n }\n parsedChannels.push(value);\n }\n channels = parsedChannels;\n }\n const groupByThread = url.searchParams.get(\"groupByThread\") === \"true\";\n const rawChatTypeFilter = url.searchParams.get(\"chatTypeFilter\");\n let chatTypeFilter: Array<\"dm\" | \"group\" | \"channel\"> | undefined;\n if (rawChatTypeFilter !== null && rawChatTypeFilter.trim().length > 0) {\n const parsed = rawChatTypeFilter\n .split(\",\")\n .map((value) => value.trim().toLowerCase())\n .filter((value) => value.length > 0);\n const allowed: Array<\"dm\" | \"group\" | \"channel\"> = [];\n for (const value of parsed) {\n if (value !== \"dm\" && value !== \"group\" && value !== \"channel\") {\n throw new LifeOpsServiceError(\n 400,\n \"chatTypeFilter must be a comma-separated subset of: dm, group, channel\",\n );\n }\n allowed.push(value);\n }\n if (allowed.length > 0) chatTypeFilter = allowed;\n }\n const maxParticipants =\n parsePositiveIntegerQuery(\n url.searchParams.get(\"maxParticipants\"),\n \"maxParticipants\",\n ) ?? undefined;\n const gmailAccountIdRaw = url.searchParams.get(\"gmailAccountId\");\n const gmailAccountId =\n gmailAccountIdRaw !== null && gmailAccountIdRaw.trim().length > 0\n ? gmailAccountIdRaw.trim()\n : undefined;\n const phoneAccountIds = url.searchParams\n .get(\"phoneAccountIds\")\n ?.split(\",\")\n .map((value) => value.trim())\n .filter(Boolean);\n const missedOnly = url.searchParams.get(\"missedOnly\") === \"true\";\n const sortByPriority = url.searchParams.get(\"sortByPriority\") === \"true\";\n const rawCacheMode = url.searchParams.get(\"cacheMode\");\n let cacheMode: GetLifeOpsInboxRequest[\"cacheMode\"];\n if (rawCacheMode !== null && rawCacheMode.trim().length > 0) {\n const parsedCacheMode = rawCacheMode.trim().toLowerCase();\n if (!isOneOf(parsedCacheMode, LIFEOPS_INBOX_CACHE_MODES)) {\n throw new LifeOpsServiceError(\n 400,\n `cacheMode must be one of: ${LIFEOPS_INBOX_CACHE_MODES.join(\", \")}`,\n );\n }\n cacheMode = parsedCacheMode;\n }\n const cacheLimit =\n parsePositiveIntegerQuery(\n url.searchParams.get(\"cacheLimit\"),\n \"cacheLimit\",\n ) ?? undefined;\n const request: GetLifeOpsInboxRequest = {\n limit,\n channels,\n groupByThread: groupByThread || undefined,\n chatTypeFilter,\n maxParticipants,\n gmailAccountId,\n phoneAccountIds:\n phoneAccountIds && phoneAccountIds.length > 0\n ? phoneAccountIds\n : undefined,\n missedOnly: missedOnly || undefined,\n sortByPriority: sortByPriority || undefined,\n cacheMode,\n cacheLimit,\n };\n json(res, await service.getInbox(request));\n });\n }\n\n if (method === \"POST\" && pathname === \"/api/lifeops/gmail/reply-drafts\") {\n if (rateLimitRequest(ctx, \"gmail_draft\")) return true;\n const body = await readJsonBody<CreateLifeOpsGmailReplyDraftRequest>(\n req,\n res,\n );\n if (!body) return true;\n return runRoute(ctx, async (service) => {\n json(res, { draft: await service.createGmailReplyDraft(url, body) }, 201);\n });\n }\n\n if (\n method === \"POST\" &&\n pathname === \"/api/lifeops/gmail/batch-reply-drafts\"\n ) {\n if (rateLimitRequest(ctx, \"gmail_draft\")) return true;\n const body = await readJsonBody<CreateLifeOpsGmailBatchReplyDraftsRequest>(\n req,\n res,\n );\n if (!body) return true;\n return runRoute(ctx, async (service) => {\n json(\n res,\n { batch: await service.createGmailBatchReplyDrafts(url, body) },\n 201,\n );\n });\n }\n\n if (method === \"POST\" && pathname === \"/api/lifeops/gmail/reply-send\") {\n if (rateLimitRequest(ctx, \"gmail_send\")) return true;\n const body = await readJsonBody<SendLifeOpsGmailReplyRequest>(req, res);\n if (!body) return true;\n return runRoute(ctx, async (service) => {\n json(res, await service.sendGmailReply(url, body));\n });\n }\n\n if (method === \"POST\" && pathname === \"/api/lifeops/gmail/message-send\") {\n if (rateLimitRequest(ctx, \"gmail_send\")) return true;\n const body = await readJsonBody<SendLifeOpsGmailMessageRequest>(req, res);\n if (!body) return true;\n return runRoute(ctx, async (service) => {\n json(res, await service.sendGmailMessage(url, body));\n });\n }\n\n if (method === \"POST\" && pathname === \"/api/lifeops/gmail/batch-reply-send\") {\n if (rateLimitRequest(ctx, \"gmail_send\")) return true;\n const body = await readJsonBody<SendLifeOpsGmailBatchReplyRequest>(\n req,\n res,\n );\n if (!body) return true;\n return runRoute(ctx, async (service) => {\n json(res, await service.sendGmailReplies(url, body));\n });\n }\n\n if (method === \"POST\" && pathname === \"/api/lifeops/gmail/manage\") {\n if (rateLimitRequest(ctx, \"google_api_write\")) return true;\n const body = await readJsonBody<ManageLifeOpsGmailMessagesRequest>(\n req,\n res,\n );\n if (!body) return true;\n return runRoute(ctx, async (service) => {\n json(res, await service.manageGmailMessages(url, body));\n });\n }\n\n if (method === \"POST\" && pathname === \"/api/lifeops/gmail/events/ingest\") {\n if (rateLimitRequest(ctx, \"google_api_write\")) return true;\n const body = await readJsonBody<IngestLifeOpsGmailEventRequest>(req, res);\n if (!body) return true;\n return runRoute(ctx, async (service) => {\n json(res, await service.ingestGmailEvent(url, body), 202);\n });\n }\n\n if (\n method === \"GET\" &&\n pathname === \"/api/lifeops/connectors/health/status\"\n ) {\n if (rateLimitRequest(ctx, \"default\")) return true;\n return runRoute(ctx, async (service) => {\n json(\n res,\n await service.getHealthDataConnectorStatuses(\n url,\n parseConnectorModeQuery(url.searchParams.get(\"mode\")),\n parseConnectorSideQuery(url.searchParams.get(\"side\")),\n ),\n );\n });\n }\n\n const healthStatusMatch = pathname.match(\n /^\\/api\\/lifeops\\/connectors\\/health\\/([^/]+)\\/status$/,\n );\n if (method === \"GET\" && healthStatusMatch) {\n if (rateLimitRequest(ctx, \"default\")) return true;\n const provider = parseHealthConnectorProviderPath(ctx, healthStatusMatch);\n if (!provider) return true;\n return runRoute(ctx, async (service) => {\n json(\n res,\n await service.getHealthDataConnectorStatus(\n provider,\n url,\n parseConnectorModeQuery(url.searchParams.get(\"mode\")),\n parseConnectorSideQuery(url.searchParams.get(\"side\")),\n ),\n );\n });\n }\n\n const healthCallbackMatch = pathname.match(\n /^\\/api\\/lifeops\\/connectors\\/health\\/([^/]+)\\/callback$/,\n );\n if (method === \"GET\" && healthCallbackMatch) {\n const provider = parseHealthConnectorProviderPath(ctx, healthCallbackMatch);\n if (!provider) return true;\n const service = getService(ctx);\n if (!service) return true;\n try {\n await ensureRouteSchema(ctx.state.runtime);\n const status = await service.completeHealthConnectorCallback(url);\n if (status.provider !== provider) {\n throw new LifeOpsServiceError(\n 409,\n \"Health connector callback provider did not match the request path.\",\n );\n }\n writeHtml(\n res,\n 200,\n `${provider} Connected`,\n `${provider} health data is now available in Eliza. You can close this window.`,\n );\n return true;\n } catch (error) {\n if (error instanceof LifeOpsServiceError) {\n writeHtml(res, error.status, \"Health Connection Failed\", error.message);\n return true;\n }\n throw error;\n }\n }\n\n const healthSuccessMatch = pathname.match(\n /^\\/api\\/lifeops\\/connectors\\/health\\/([^/]+)\\/success$/,\n );\n if (method === \"GET\" && healthSuccessMatch) {\n const provider = parseHealthConnectorProviderPath(ctx, healthSuccessMatch);\n if (!provider) return true;\n writeHtml(\n res,\n 200,\n `${provider} Connected`,\n `${provider} health data is now available in Eliza. You can close this window.`,\n );\n return true;\n }\n\n if (method === \"GET\" && pathname === \"/api/lifeops/health/summary\") {\n if (rateLimitRequest(ctx, \"default\")) return true;\n return runRoute(ctx, async (service) => {\n const request: GetLifeOpsHealthSummaryRequest = {\n provider: parseOptionalHealthConnectorProvider(\n url.searchParams.get(\"provider\"),\n ),\n mode: parseConnectorModeQuery(url.searchParams.get(\"mode\")),\n side: parseConnectorSideQuery(url.searchParams.get(\"side\")),\n days:\n parsePositiveIntegerQuery(url.searchParams.get(\"days\"), \"days\", {\n max: 31,\n }) ?? undefined,\n startDate: parseDateOnlyQuery(\n url.searchParams.get(\"startDate\"),\n \"startDate\",\n ),\n endDate: parseDateOnlyQuery(url.searchParams.get(\"endDate\"), \"endDate\"),\n forceSync: url.searchParams.get(\"forceSync\") === \"true\",\n };\n json(res, await service.getHealthSummary(request));\n });\n }\n\n if (method === \"GET\" && pathname === \"/api/lifeops/connectors/x/status\") {\n return runRoute(ctx, async (service) => {\n json(\n res,\n await service.getXConnectorStatus(\n parseConnectorModeQuery(url.searchParams.get(\"mode\")),\n parseConnectorSideQuery(url.searchParams.get(\"side\")),\n ),\n );\n });\n }\n\n if (method === \"POST\" && pathname === \"/api/lifeops/x/posts\") {\n if (rateLimitRequest(ctx, \"outbound_message\")) return true;\n const body = await readJsonBody<CreateLifeOpsXPostRequest>(req, res);\n if (!body) return true;\n return runRoute(ctx, async (service) => {\n json(res, await service.createXPost(body), 201);\n });\n }\n\n if (method === \"GET\" && pathname === \"/api/lifeops/x/dms/digest\") {\n return runRoute(ctx, async (service) => {\n const limit =\n parsePositiveIntegerQuery(url.searchParams.get(\"limit\"), \"limit\", {\n max: 100,\n }) ?? undefined;\n const conversationId = url.searchParams.get(\"conversationId\")?.trim();\n json(\n res,\n await service.getXDmDigest({\n limit,\n conversationId: conversationId?.length ? conversationId : undefined,\n }),\n );\n });\n }\n\n if (method === \"POST\" && pathname === \"/api/lifeops/x/dms/curate\") {\n if (rateLimitRequest(ctx, \"default\")) return true;\n const body = await readJsonBody<Record<string, unknown>>(req, res);\n if (!body) return true;\n return runRoute(ctx, async (service) => {\n json(\n res,\n await service.curateXDms({\n messageIds: parseOptionalBodyStringArray(body, \"messageIds\"),\n conversationId: parseOptionalBodyString(body, \"conversationId\"),\n markRead: parseOptionalBodyBoolean(body, \"markRead\"),\n markReplied: parseOptionalBodyBoolean(body, \"markReplied\"),\n }),\n );\n });\n }\n\n if (method === \"POST\" && pathname === \"/api/lifeops/x/dms/send\") {\n if (rateLimitRequest(ctx, \"outbound_message\")) return true;\n const body = await readJsonBody<Record<string, unknown>>(req, res);\n if (!body) return true;\n return runRoute(ctx, async (service) => {\n json(\n res,\n await service.sendXDirectMessage({\n participantId: requireBodyString(body, \"participantId\"),\n text: requireBodyString(body, \"text\"),\n confirmSend: parseOptionalBodyBoolean(body, \"confirmSend\"),\n mode: parseConnectorModeInput(body.mode),\n side: parseConnectorSideInput(body.side),\n }),\n 201,\n );\n });\n }\n\n // -----------------------------------------------------------------------\n // iMessage connector\n // -----------------------------------------------------------------------\n\n if (\n method === \"GET\" &&\n pathname === \"/api/lifeops/connectors/imessage/status\"\n ) {\n return runRoute(ctx, async (service) => {\n json(res, await service.getIMessageConnectorStatus());\n });\n }\n\n if (\n method === \"GET\" &&\n pathname === \"/api/lifeops/connectors/imessage/chats\"\n ) {\n return runRoute(ctx, async (service) => {\n const chats = await service.listIMessageChats();\n json(res, { chats, count: chats.length });\n });\n }\n\n if (\n method === \"GET\" &&\n pathname === \"/api/lifeops/connectors/imessage/messages\"\n ) {\n return runRoute(ctx, async (service) => {\n const query: GetLifeOpsIMessageMessagesRequest = {\n chatId: url.searchParams.get(\"chatId\")?.trim() || undefined,\n since: url.searchParams.get(\"since\")?.trim() || undefined,\n limit:\n parsePositiveIntegerQuery(url.searchParams.get(\"limit\"), \"limit\", {\n max: 250,\n }) ?? undefined,\n };\n const messages = await service.readIMessages(query);\n json(res, { messages, count: messages.length });\n });\n }\n\n if (\n method === \"POST\" &&\n pathname === \"/api/lifeops/connectors/imessage/send\"\n ) {\n if (rateLimitRequest(ctx, \"outbound_message\")) return true;\n const body = await readJsonBody<Record<string, unknown>>(req, res);\n if (!body) return true;\n return runRoute(ctx, async (service) => {\n json(\n res,\n await service.sendIMessage({\n to: requireBodyString(body, \"to\"),\n text: requireBodyString(body, \"text\"),\n attachmentPaths: parseOptionalBodyStringArray(\n body,\n \"attachmentPaths\",\n ),\n }),\n 201,\n );\n });\n }\n\n // -----------------------------------------------------------------------\n // Telegram connector\n // -----------------------------------------------------------------------\n\n if (\n method === \"GET\" &&\n pathname === \"/api/lifeops/connectors/telegram/status\"\n ) {\n return runRoute(ctx, async (service) => {\n json(\n res,\n await service.getTelegramConnectorStatus(\n parseConnectorSideQuery(url.searchParams.get(\"side\")),\n ),\n );\n });\n }\n\n if (\n method === \"POST\" &&\n pathname === \"/api/lifeops/connectors/telegram/verify\"\n ) {\n if (rateLimitRequest(ctx, \"oauth_init\")) return true;\n const body = await readJsonBody<VerifyLifeOpsTelegramConnectorRequest>(\n req,\n res,\n );\n if (!body) return true;\n return runRoute(ctx, async (service) => {\n json(res, await service.verifyTelegramConnector(body));\n });\n }\n\n // -----------------------------------------------------------------------\n // Signal connector\n // -----------------------------------------------------------------------\n\n if (\n method === \"GET\" &&\n pathname === \"/api/lifeops/connectors/signal/status\"\n ) {\n return runRoute(ctx, async (service) => {\n json(\n res,\n await service.getSignalConnectorStatus(\n parseConnectorSideQuery(url.searchParams.get(\"side\")),\n ),\n );\n });\n }\n\n if (\n method === \"GET\" &&\n pathname === \"/api/lifeops/connectors/signal/messages\"\n ) {\n return runRoute(ctx, async (service) => {\n const limit =\n parsePositiveIntegerQuery(url.searchParams.get(\"limit\"), \"limit\", {\n max: 100,\n }) ?? 25;\n const messages = await service.readSignalInbound(limit);\n json(res, { messages, count: messages.length });\n });\n }\n\n if (method === \"POST\" && pathname === \"/api/lifeops/connectors/signal/send\") {\n if (rateLimitRequest(ctx, \"outbound_message\")) return true;\n const body = await readJsonBody<Record<string, unknown>>(req, res);\n if (!body) return true;\n return runRoute(ctx, async (service) => {\n json(\n res,\n await service.sendSignalMessage({\n side: parseConnectorSideFromRequest(url, body),\n recipient: requireBodyString(body, \"recipient\"),\n text: requireBodyString(body, \"text\"),\n }),\n 201,\n );\n });\n }\n\n // -----------------------------------------------------------------------\n // Discord connector\n // -----------------------------------------------------------------------\n\n if (\n method === \"GET\" &&\n pathname === \"/api/lifeops/connectors/discord/status\"\n ) {\n return runRoute(ctx, async (service) => {\n json(\n res,\n await service.getDiscordConnectorStatus(\n parseConnectorSideQuery(url.searchParams.get(\"side\")),\n ),\n );\n });\n }\n\n if (\n method === \"POST\" &&\n pathname === \"/api/lifeops/connectors/discord/send\"\n ) {\n if (rateLimitRequest(ctx, \"outbound_message\")) return true;\n const body = await readJsonBody<Record<string, unknown>>(req, res);\n if (!body) return true;\n return runRoute(ctx, async (service) => {\n json(\n res,\n await service.sendDiscordMessage({\n side: parseConnectorSideFromRequest(url, body),\n channelId: parseOptionalBodyString(body, \"channelId\"),\n text: requireBodyString(body, \"text\"),\n }),\n 201,\n );\n });\n }\n\n if (\n method === \"POST\" &&\n pathname === \"/api/lifeops/connectors/discord/verify\"\n ) {\n if (rateLimitRequest(ctx, \"outbound_message\")) return true;\n const body = await readJsonBody<Record<string, unknown>>(req, res);\n if (!body) return true;\n return runRoute(ctx, async (service) => {\n json(\n res,\n await service.verifyDiscordConnector({\n side: parseConnectorSideFromRequest(url, body),\n channelId: parseOptionalBodyString(body, \"channelId\"),\n sendMessage: parseOptionalBodyString(body, \"sendMessage\"),\n }),\n );\n });\n }\n\n if (\n method === \"GET\" &&\n pathname === \"/api/lifeops/connectors/whatsapp/status\"\n ) {\n return runRoute(ctx, async (service) => {\n json(res, await service.getWhatsAppConnectorStatus());\n });\n }\n\n if (\n method === \"POST\" &&\n pathname === \"/api/lifeops/connectors/whatsapp/send\"\n ) {\n if (rateLimitRequest(ctx, \"outbound_message\")) return true;\n const body = await readJsonBody<Record<string, unknown>>(req, res);\n if (!body) return true;\n return runRoute(ctx, async (service) => {\n json(\n res,\n await service.sendWhatsAppMessage({\n to: requireBodyString(body, \"to\"),\n text: requireBodyString(body, \"text\"),\n replyToMessageId: parseOptionalBodyString(body, \"replyToMessageId\"),\n }),\n 201,\n );\n });\n }\n\n if (\n method === \"GET\" &&\n pathname === \"/api/lifeops/connectors/whatsapp/messages\"\n ) {\n return runRoute(ctx, async (service) => {\n const limit =\n parsePositiveIntegerQuery(url.searchParams.get(\"limit\"), \"limit\", {\n max: 500,\n }) ?? 25;\n json(res, await service.pullWhatsAppRecent(limit));\n });\n }\n\n if (method === \"GET\" && pathname === \"/api/lifeops/channel-policies\") {\n return runRoute(ctx, async (service) => {\n json(res, { policies: await service.listChannelPolicies() });\n });\n }\n\n if (method === \"POST\" && pathname === \"/api/lifeops/channel-policies\") {\n if (rateLimitRequest(ctx, \"default\")) return true;\n const body = await readJsonBody<UpsertLifeOpsChannelPolicyRequest>(\n req,\n res,\n );\n if (!body) return true;\n return runRoute(ctx, async (service) => {\n json(res, { policy: await service.upsertChannelPolicy(body) }, 201);\n });\n }\n\n if (method === \"POST\" && pathname === \"/api/lifeops/channels/phone-consent\") {\n if (rateLimitRequest(ctx, \"default\")) return true;\n const body = await readJsonBody<CaptureLifeOpsPhoneConsentRequest>(\n req,\n res,\n );\n if (!body) return true;\n return runRoute(ctx, async (service) => {\n json(res, await service.capturePhoneConsent(body), 201);\n });\n }\n\n if (method === \"GET\" && pathname === \"/api/lifeops/activity-signals\") {\n return runRoute(ctx, async (service) => {\n await ensureRouteSchema(ctx.state.runtime);\n json(res, {\n signals: await service.listActivitySignals({\n sinceAt: parseOptionalIsoQuery(\n url.searchParams.get(\"sinceAt\"),\n \"sinceAt\",\n ),\n limit:\n parsePositiveIntegerQuery(url.searchParams.get(\"limit\"), \"limit\", {\n max: ACTIVITY_SIGNALS_MAX_LIMIT,\n }) ?? ACTIVITY_SIGNALS_DEFAULT_LIMIT,\n states: parseActivitySignalStates(url),\n }),\n });\n });\n }\n\n if (method === \"POST\" && pathname === \"/api/lifeops/activity-signals\") {\n if (rateLimitRequest(ctx, \"default\")) return true;\n const body = await readJsonBody<CaptureLifeOpsActivitySignalRequest>(\n req,\n res,\n );\n if (!body) return true;\n return runRoute(ctx, async (service) => {\n await ensureRouteSchema(ctx.state.runtime);\n json(res, { signal: await service.captureActivitySignal(body) }, 201);\n });\n }\n\n if (method === \"POST\" && pathname === \"/api/lifeops/manual-override\") {\n if (rateLimitRequest(ctx, \"default\")) return true;\n const body = await readJsonBody<CaptureLifeOpsManualOverrideRequest>(\n req,\n res,\n );\n if (!body) return true;\n return runRoute(ctx, async (service) => {\n json(res, await service.captureManualOverride(body), 201);\n });\n }\n\n if (method === \"POST\" && pathname === \"/api/lifeops/reminders/process\") {\n if (rateLimitRequest(ctx, \"reminders_process\")) return true;\n const body = await readJsonBody<ProcessLifeOpsRemindersRequest>(req, res);\n if (!body) return true;\n return runRoute(ctx, async (service) => {\n json(res, await service.processReminders(body));\n });\n }\n\n if (method === \"GET\" && pathname === \"/api/lifeops/reminder-preferences\") {\n return runRoute(ctx, async (service) => {\n json(\n res,\n await service.getReminderPreference(\n url.searchParams.get(\"definitionId\") ?? undefined,\n ),\n );\n });\n }\n\n if (method === \"POST\" && pathname === \"/api/lifeops/reminder-preferences\") {\n if (rateLimitRequest(ctx, \"default\")) return true;\n const body = await readJsonBody<SetLifeOpsReminderPreferenceRequest>(\n req,\n res,\n );\n if (!body) return true;\n return runRoute(ctx, async (service) => {\n json(res, await service.setReminderPreference(body), 201);\n });\n }\n\n if (method === \"POST\" && pathname === \"/api/lifeops/reminders/acknowledge\") {\n if (rateLimitRequest(ctx, \"default\")) return true;\n const body = await readJsonBody<AcknowledgeLifeOpsReminderRequest>(\n req,\n res,\n );\n if (!body) return true;\n return runRoute(ctx, async (service) => {\n json(res, await service.acknowledgeReminder(body));\n });\n }\n\n if (method === \"POST\" && pathname === \"/api/lifeops/website-access/relock\") {\n if (rateLimitRequest(ctx, \"default\")) return true;\n const body = await readJsonBody<RelockLifeOpsWebsiteAccessRequest>(\n req,\n res,\n );\n if (!body) return true;\n return runRoute(ctx, async (service) => {\n json(res, await service.relockWebsiteAccessGroup(body.groupKey));\n });\n }\n\n const websiteAccessCallbackMatch = pathname.match(\n /^\\/api\\/lifeops\\/website-access\\/callbacks\\/([^/]+)\\/resolve$/,\n );\n if (method === \"POST\" && websiteAccessCallbackMatch) {\n if (rateLimitRequest(ctx, \"default\")) return true;\n const callbackKey = decodeMatchedPathComponent(\n ctx,\n websiteAccessCallbackMatch,\n 1,\n res,\n \"website access callback key\",\n );\n if (!callbackKey) return true;\n const body = await readJsonBody<ResolveLifeOpsWebsiteAccessCallbackRequest>(\n req,\n res,\n );\n if (body === null) return true;\n return runRoute(ctx, async (service) => {\n json(\n res,\n await service.resolveWebsiteAccessCallback(\n body.callbackKey || callbackKey,\n ),\n );\n });\n }\n\n if (method === \"GET\" && pathname === \"/api/lifeops/reminders/inspection\") {\n return runRoute(ctx, async (service) => {\n const ownerType = url.searchParams.get(\"ownerType\");\n const ownerId = url.searchParams.get(\"ownerId\");\n if (ownerType !== \"occurrence\" && ownerType !== \"calendar_event\") {\n throw new LifeOpsServiceError(\n 400,\n \"ownerType must be occurrence or calendar_event\",\n );\n }\n if (!ownerId) {\n throw new LifeOpsServiceError(400, \"ownerId is required\");\n }\n json(res, await service.inspectReminder(ownerType, ownerId));\n });\n }\n\n if (method === \"GET\" && pathname === \"/api/lifeops/workflows\") {\n return runRoute(ctx, async (service) => {\n json(res, { workflows: await service.listWorkflows() });\n });\n }\n\n if (method === \"POST\" && pathname === \"/api/lifeops/workflows\") {\n if (rateLimitRequest(ctx, \"task_create\")) return true;\n const body = await readJsonBody<CreateLifeOpsWorkflowRequest>(req, res);\n if (!body) return true;\n return runRoute(ctx, async (service) => {\n json(res, await service.createWorkflow(body), 201);\n });\n }\n\n // Browser companion + package routes extracted to\n // `@elizaos/plugin-browser/routes` (mounted under\n // `/api/browser-bridge/*`).\n\n if (method === \"POST\" && pathname === \"/api/lifeops/schedule/observations\") {\n if (rateLimitRequest(ctx, \"default\")) return true;\n const body = await readJsonBody<SyncLifeOpsScheduleObservationsRequest>(\n req,\n res,\n );\n if (!body) return true;\n return runRoute(ctx, async (service) => {\n json(res, await service.ingestScheduleObservations(body));\n });\n }\n\n if (method === \"GET\" && pathname === \"/api/lifeops/schedule/merged-state\") {\n const scopeParam = url.searchParams.get(\"scope\");\n const scope = scopeParam?.trim() ?? \"\";\n if (\n scope.length > 0 &&\n !LIFEOPS_SCHEDULE_STATE_SCOPES.includes(\n scope as (typeof LIFEOPS_SCHEDULE_STATE_SCOPES)[number],\n ) &&\n scope !== \"effective\"\n ) {\n ctx.error(res, \"scope must be local, cloud, or effective\", 400);\n return true;\n }\n const refreshParam = url.searchParams.get(\"refresh\")?.trim().toLowerCase();\n if (\n refreshParam &&\n refreshParam !== \"1\" &&\n refreshParam !== \"0\" &&\n refreshParam !== \"true\" &&\n refreshParam !== \"false\"\n ) {\n ctx.error(res, \"refresh must be true, false, 1, or 0\", 400);\n return true;\n }\n const refresh = refreshParam === \"1\" || refreshParam === \"true\";\n return runRoute(ctx, async (service) => {\n json(res, {\n mergedState: await service.getScheduleMergedState({\n timezone: url.searchParams.get(\"timezone\"),\n scope:\n scope.length > 0\n ? (scope as \"local\" | \"cloud\" | \"effective\")\n : undefined,\n refresh,\n }),\n });\n });\n }\n\n if (method === \"GET\" && pathname === \"/api/lifeops/schedule/inspection\") {\n const timezoneParam = url.searchParams.get(\"timezone\")?.trim() || \"UTC\";\n return runRoute(ctx, async (service) => {\n json(res, await service.inspectSchedule({ timezone: timezoneParam }));\n });\n }\n\n if (method === \"GET\" && pathname === \"/api/lifeops/schedule/summary\") {\n const timezoneParam = url.searchParams.get(\"timezone\")?.trim() || \"UTC\";\n return runRoute(ctx, async (service) => {\n json(res, await service.readScheduleSummary({ timezone: timezoneParam }));\n });\n }\n\n if (\n method === \"GET\" &&\n pathname === \"/api/lifeops/permissions/full-disk-access\"\n ) {\n return runRoute(ctx, async () => {\n json(res, await probeFullDiskAccess());\n });\n }\n\n if (method === \"GET\" && pathname === \"/api/lifeops/screen-time/summary\") {\n return runRoute(ctx, async (service) => {\n const window = parseBoundedIsoWindowQuery(url);\n json(\n res,\n await service.getScreenTimeSummary({\n since: window.since,\n until: window.until,\n source: parseScreenTimeSourceQuery(url.searchParams.get(\"source\")),\n identifier: parseScreenTimeIdentifierQuery(\n url.searchParams.get(\"identifier\"),\n ),\n topN:\n parsePositiveIntegerQuery(url.searchParams.get(\"topN\"), \"topN\", {\n max: 20,\n }) ?? undefined,\n }),\n );\n });\n }\n\n if (method === \"GET\" && pathname === \"/api/lifeops/screen-time/breakdown\") {\n return runRoute(ctx, async (service) => {\n const window = parseBoundedIsoWindowQuery(url);\n json(\n res,\n await service.getScreenTimeBreakdown({\n since: window.since,\n until: window.until,\n source: parseScreenTimeSourceQuery(url.searchParams.get(\"source\")),\n identifier: parseScreenTimeIdentifierQuery(\n url.searchParams.get(\"identifier\"),\n ),\n topN:\n parsePositiveIntegerQuery(url.searchParams.get(\"topN\"), \"topN\", {\n max: 50,\n }) ?? undefined,\n }),\n );\n });\n }\n\n if (method === \"GET\" && pathname === \"/api/lifeops/screen-time/history\") {\n return runRoute(ctx, async (service) => {\n json(\n res,\n await service.getScreenTimeHistory({\n range: parseScreenTimeRangeQuery(url.searchParams.get(\"range\")),\n topN:\n parsePositiveIntegerQuery(url.searchParams.get(\"topN\"), \"topN\", {\n max: 50,\n }) ?? undefined,\n socialTopN:\n parsePositiveIntegerQuery(\n url.searchParams.get(\"socialTopN\"),\n \"socialTopN\",\n { max: 50 },\n ) ?? undefined,\n }),\n );\n });\n }\n\n if (method === \"GET\" && pathname === \"/api/lifeops/social/summary\") {\n return runRoute(ctx, async (service) => {\n const window = parseBoundedIsoWindowQuery(url);\n json(\n res,\n await service.getSocialHabitSummary({\n since: window.since,\n until: window.until,\n topN:\n parsePositiveIntegerQuery(url.searchParams.get(\"topN\"), \"topN\", {\n max: 50,\n }) ?? undefined,\n }),\n );\n });\n }\n\n if (method === \"GET\" && pathname === \"/api/lifeops/capabilities\") {\n return runRoute(ctx, async (service) => {\n json(res, await service.getCapabilityStatus());\n });\n }\n\n if (method === \"GET\" && pathname === \"/api/lifeops/overview\") {\n return runRoute(ctx, async (service) => {\n json(res, await service.getOverview());\n });\n }\n\n // Todos projection over the shared scheduled-task spine. Reuses getOverview()\n // (the canonical read that projects life_task_definitions/occurrences) and\n // flattens the owner's active occurrences into a flat todo DTO the TodosView\n // renders. No new query path — getOverview owns the computation; this route\n // only maps occurrence-view fields to { id, title, status, dueDate }.\n if (method === \"GET\" && pathname === \"/api/lifeops/todos\") {\n return runRoute(ctx, async (service) => {\n const overview = await service.getOverview();\n const todos = overview.owner.occurrences.map((occurrence) => ({\n id: occurrence.id,\n title: occurrence.title,\n status: occurrenceStateToTodoStatus(occurrence.state),\n dueDate: occurrence.dueAt,\n }));\n json(res, { todos });\n });\n }\n\n if (method === \"GET\" && pathname === \"/api/lifeops/money/dashboard\") {\n return runFinancesRoute(ctx, async (service) => {\n const windowDaysRaw = url.searchParams.get(\"windowDays\");\n const windowDays = windowDaysRaw ? Number(windowDaysRaw) : null;\n json(\n res,\n await service.getPaymentsDashboard({\n windowDays: Number.isFinite(windowDays) ? windowDays : null,\n }),\n );\n });\n }\n\n if (method === \"GET\" && pathname === \"/api/lifeops/money/sources\") {\n return runFinancesRoute(ctx, async (service) => {\n json(res, { sources: await service.listPaymentSources() });\n });\n }\n\n if (method === \"POST\" && pathname === \"/api/lifeops/money/sources\") {\n if (rateLimitRequest(ctx, \"connector_write\")) return true;\n const body = await readJsonBody<AddPaymentSourceRequest>(req, res);\n if (!body) return true;\n return runFinancesRoute(ctx, async (service) => {\n const source = await service.addPaymentSource(body);\n json(res, { source: sanitizePaymentSourceForClient(source) }, 201);\n });\n }\n\n if (\n method === \"DELETE\" &&\n pathname.startsWith(\"/api/lifeops/money/sources/\")\n ) {\n if (rateLimitRequest(ctx, \"connector_write\")) return true;\n const sourceId = pathname.slice(\"/api/lifeops/money/sources/\".length);\n if (!sourceId) {\n ctx.error(res, \"sourceId required\", 400);\n return true;\n }\n return runFinancesRoute(ctx, async (service) => {\n await service.deletePaymentSource(decodeURIComponent(sourceId));\n json(res, { ok: true });\n });\n }\n\n if (method === \"POST\" && pathname === \"/api/lifeops/money/import-csv\") {\n if (rateLimitRequest(ctx, \"default\")) return true;\n const body = await readJsonBody<{\n sourceId: string;\n csvText: string;\n dateColumn?: string;\n amountColumn?: string;\n merchantColumn?: string;\n descriptionColumn?: string;\n categoryColumn?: string;\n }>(req, res);\n if (!body) return true;\n return runFinancesRoute(ctx, async (service) => {\n const result = await service.importTransactionsCsv(body);\n json(res, result);\n });\n }\n\n if (method === \"GET\" && pathname === \"/api/lifeops/money/transactions\") {\n return runFinancesRoute(ctx, async (service) => {\n const sourceId = url.searchParams.get(\"sourceId\");\n const limitRaw = url.searchParams.get(\"limit\");\n const limit = limitRaw ? Number(limitRaw) : null;\n const merchantContains = url.searchParams.get(\"merchantContains\");\n const onlyDebitsRaw = url.searchParams.get(\"onlyDebits\");\n const transactions = await service.listTransactions({\n sourceId: sourceId ?? null,\n limit: Number.isFinite(limit) ? limit : null,\n merchantContains: merchantContains ?? null,\n onlyDebits: onlyDebitsRaw === \"true\" ? true : null,\n });\n json(res, { transactions });\n });\n }\n\n if (method === \"GET\" && pathname === \"/api/lifeops/money/recurring\") {\n return runFinancesRoute(ctx, async (service) => {\n const sourceId = url.searchParams.get(\"sourceId\");\n const sinceDaysRaw = url.searchParams.get(\"sinceDays\");\n const sinceDays = sinceDaysRaw ? Number(sinceDaysRaw) : null;\n const charges = await service.getRecurringCharges({\n sourceId: sourceId ?? null,\n sinceDays: Number.isFinite(sinceDays) ? sinceDays : null,\n });\n json(res, { charges });\n });\n }\n\n if (method === \"POST\" && pathname === \"/api/lifeops/money/plaid/link-token\") {\n if (rateLimitRequest(ctx, \"oauth_init\")) return true;\n return runFinancesRoute(ctx, async (service) => {\n const result = await service.createPlaidLinkToken();\n json(res, result);\n });\n }\n\n if (method === \"POST\" && pathname === \"/api/lifeops/money/plaid/complete\") {\n if (rateLimitRequest(ctx, \"oauth_init\")) return true;\n const body = await readJsonBody<{\n publicToken: string;\n label?: string | null;\n }>(req, res);\n if (!body) return true;\n return runFinancesRoute(ctx, async (service) => {\n const source = await service.completePlaidLink({\n publicToken: body.publicToken,\n label: body.label ?? null,\n });\n json(\n res,\n {\n source: sanitizePaymentSourceForClient(source),\n },\n 201,\n );\n });\n }\n\n if (method === \"POST\" && pathname === \"/api/lifeops/money/plaid/sync\") {\n if (rateLimitRequest(ctx, \"default\")) return true;\n const body = await readJsonBody<{ sourceId: string }>(req, res);\n if (!body) return true;\n return runFinancesRoute(ctx, async (service) => {\n const result = await service.syncPlaidTransactions({\n sourceId: body.sourceId,\n });\n json(res, result);\n });\n }\n\n if (\n method === \"POST\" &&\n pathname === \"/api/lifeops/money/paypal/authorize-url\"\n ) {\n if (rateLimitRequest(ctx, \"oauth_init\")) return true;\n const body = await readJsonBody<{ state: string }>(req, res);\n if (!body) return true;\n return runFinancesRoute(ctx, async (service) => {\n const result = await service.createPaypalAuthorizeUrl({\n state: body.state,\n });\n json(res, result);\n });\n }\n\n if (method === \"POST\" && pathname === \"/api/lifeops/money/paypal/complete\") {\n if (rateLimitRequest(ctx, \"oauth_init\")) return true;\n const body = await readJsonBody<{\n code: string;\n label?: string | null;\n }>(req, res);\n if (!body) return true;\n return runFinancesRoute(ctx, async (service) => {\n const { source, capability } = await service.completePaypalLink({\n code: body.code,\n label: body.label ?? null,\n });\n json(\n res,\n {\n source: sanitizePaymentSourceForClient(source),\n capability,\n },\n 201,\n );\n });\n }\n\n if (method === \"POST\" && pathname === \"/api/lifeops/money/paypal/sync\") {\n if (rateLimitRequest(ctx, \"default\")) return true;\n const body = await readJsonBody<{\n sourceId: string;\n windowDays?: number | null;\n }>(req, res);\n if (!body) return true;\n return runFinancesRoute(ctx, async (service) => {\n const result = await service.syncPaypalTransactions({\n sourceId: body.sourceId,\n windowDays: body.windowDays ?? null,\n });\n json(res, result);\n });\n }\n\n if (method === \"GET\" && pathname === \"/api/lifeops/smart-features/settings\") {\n return runRoute(ctx, async (service) => {\n const get = (key: string): string | null => {\n const value = service.runtime.getSetting(key);\n if (value === undefined || value === null) return null;\n return typeof value === \"string\" ? value : String(value);\n };\n json(res, {\n emailClassifierEnabled:\n (get(\"lifeops.emailClassifier.enabled\") ?? \"true\") !== \"false\",\n emailClassifierModel:\n get(\"lifeops.emailClassifier.model\") ?? \"TEXT_SMALL\",\n billsAutoExtract:\n (get(\"lifeops.bills.autoExtract\") ?? \"true\") !== \"false\",\n });\n });\n }\n\n if (\n method === \"POST\" &&\n pathname === \"/api/lifeops/smart-features/settings\"\n ) {\n if (rateLimitRequest(ctx, \"default\")) return true;\n const body = await readJsonBody<{\n emailClassifierEnabled?: boolean;\n emailClassifierModel?: string | null;\n billsAutoExtract?: boolean;\n }>(req, res);\n if (!body) return true;\n return runRoute(ctx, async (service) => {\n const setRuntime = service.runtime.setSetting.bind(service.runtime);\n if (typeof setRuntime !== \"function\") {\n ctx.error(res, \"Runtime does not support setSetting\", 501);\n return;\n }\n if (typeof body.emailClassifierEnabled === \"boolean\") {\n setRuntime(\n \"lifeops.emailClassifier.enabled\",\n body.emailClassifierEnabled ? \"true\" : \"false\",\n false,\n );\n }\n if (typeof body.emailClassifierModel === \"string\") {\n setRuntime(\n \"lifeops.emailClassifier.model\",\n body.emailClassifierModel.trim() || \"TEXT_SMALL\",\n false,\n );\n }\n if (typeof body.billsAutoExtract === \"boolean\") {\n setRuntime(\n \"lifeops.bills.autoExtract\",\n body.billsAutoExtract ? \"true\" : \"false\",\n false,\n );\n }\n json(res, { ok: true });\n });\n }\n\n if (method === \"GET\" && pathname === \"/api/lifeops/money/bills\") {\n return runFinancesRoute(ctx, async (service) => {\n const bills = await service.getUpcomingBills({});\n json(res, { bills });\n });\n }\n\n if (method === \"POST\" && pathname === \"/api/lifeops/money/bills/mark-paid\") {\n if (rateLimitRequest(ctx, \"task_update\")) return true;\n const body = await readJsonBody<{ billId: string; paidAt?: string | null }>(\n req,\n res,\n );\n if (!body) return true;\n return runFinancesRoute(ctx, async (service) => {\n const result = await service.markBillPaid({\n billId: body.billId,\n paidAt: body.paidAt ?? null,\n });\n json(res, result);\n });\n }\n\n if (method === \"POST\" && pathname === \"/api/lifeops/money/bills/snooze\") {\n if (rateLimitRequest(ctx, \"task_update\")) return true;\n const body = await readJsonBody<{ billId: string; days?: number }>(\n req,\n res,\n );\n if (!body) return true;\n return runFinancesRoute(ctx, async (service) => {\n const result = await service.snoozeBill({\n billId: body.billId,\n days: body.days ?? 7,\n });\n json(res, result);\n });\n }\n\n if (\n method === \"GET\" &&\n pathname === \"/api/lifeops/subscriptions/playbook-lookup\"\n ) {\n return runRoute(ctx, async (service) => {\n const merchant = url.searchParams.get(\"merchant\") ?? \"\";\n const playbook = service.findSubscriptionPlaybookForMerchant(merchant);\n json(res, { playbook });\n });\n }\n\n if (method === \"GET\" && pathname === \"/api/lifeops/subscriptions/playbooks\") {\n return runRoute(ctx, async (service) => {\n const playbooks = await service.listSubscriptionPlaybooks();\n // Trim to a UI-friendly summary; the full step machinery isn't useful\n // to the client and leaks fixture-only entries we don't want exposed.\n const summary = playbooks\n .filter((playbook) => !playbook.key.startsWith(\"fixture_\"))\n .map((playbook) => ({\n key: playbook.key,\n serviceName: playbook.serviceName,\n aliases: playbook.aliases,\n managementUrl: playbook.managementUrl,\n executorPreference: playbook.executorPreference,\n }));\n json(res, { playbooks: summary });\n });\n }\n\n if (method === \"POST\" && pathname === \"/api/lifeops/subscriptions/cancel\") {\n if (rateLimitRequest(ctx, \"default\")) return true;\n const body = await readJsonBody<{\n serviceName?: string | null;\n serviceSlug?: string | null;\n candidateId?: string | null;\n executor?: \"user_browser\" | \"agent_browser\" | \"desktop_native\" | null;\n confirmed?: boolean;\n }>(req, res);\n if (!body) return true;\n return runRoute(ctx, async (service) => {\n const summary = await service.cancelSubscription({\n candidateId: body.candidateId ?? null,\n serviceName: body.serviceName ?? null,\n serviceSlug: body.serviceSlug ?? null,\n executor: body.executor ?? null,\n confirmed: body.confirmed ?? false,\n });\n json(res, summary);\n });\n }\n\n if (method === \"POST\" && pathname === \"/api/lifeops/email-unsubscribe/scan\") {\n if (rateLimitRequest(ctx, \"google_api_read\")) return true;\n return runRoute(ctx, async (service) => {\n const requestUrl = ctx.url;\n const result = await service.scanEmailSubscriptions(requestUrl, {});\n json(res, result);\n });\n }\n\n if (\n method === \"POST\" &&\n pathname === \"/api/lifeops/email-unsubscribe/unsubscribe\"\n ) {\n if (rateLimitRequest(ctx, \"google_api_write\")) return true;\n const body = await readJsonBody<{\n senderEmail: string;\n blockAfter?: boolean;\n trashExisting?: boolean;\n /** User reply for two-phase confirmation (e.g. \"yes\"). */\n userConfirmationText?: string;\n }>(req, res);\n if (!body) return true;\n return runRoute(ctx, async (service) => {\n const runtime = ctx.state.runtime;\n if (!runtime) {\n ctx.error(res, \"Agent runtime is not available\", 503);\n return;\n }\n const senderEmail = body.senderEmail?.trim();\n if (!senderEmail) {\n ctx.error(res, \"senderEmail is required\", 400);\n return;\n }\n const entityId = String(ctx.state.adminEntityId ?? \"lifeops-owner\");\n const confirmMessage = {\n entityId,\n roomId: entityId,\n content: {\n text:\n typeof body.userConfirmationText === \"string\"\n ? body.userConfirmationText\n : \"\",\n source: \"lifeops-api\",\n },\n createdAt: Date.now(),\n } as Memory;\n const preview = `Unsubscribe from ${senderEmail}?`;\n const decision = await requireConfirmation({\n runtime,\n message: confirmMessage,\n actionName: \"EMAIL_UNSUBSCRIBE\",\n pendingKey: senderEmail.toLowerCase(),\n prompt: preview,\n });\n if (decision.status !== \"confirmed\") {\n json(\n res,\n {\n requiresConfirmation: decision.status === \"pending\",\n awaitingUserInput: decision.status === \"pending\",\n cancelled: decision.status === \"cancelled\",\n preview: `${preview} Reply yes to confirm or no to cancel.`,\n },\n decision.status === \"pending\" ? 409 : 200,\n );\n return;\n }\n const requestUrl = ctx.url;\n const result = await service.unsubscribeEmailSender(requestUrl, {\n senderEmail,\n blockAfter: body.blockAfter ?? false,\n trashExisting: body.trashExisting ?? false,\n userAuthorization: true,\n });\n json(res, result);\n });\n }\n\n // Routine seeding is handled via the FIRST_RUN customize path\n // (see `src/lifeops/first-run/service.ts`) and the migrator at\n // `src/lifeops/seed-routine-migration/migrator.ts`.\n\n if (method === \"GET\" && pathname === \"/api/lifeops/definitions\") {\n return runRoute(ctx, async (service) => {\n json(res, { definitions: await service.listDefinitions() });\n });\n }\n\n if (method === \"POST\" && pathname === \"/api/lifeops/definitions\") {\n if (rateLimitRequest(ctx, \"task_create\")) return true;\n const body = await readJsonBody<CreateLifeOpsDefinitionRequest>(req, res);\n if (!body) return true;\n return runRoute(ctx, async (service) => {\n json(res, await service.createDefinition(body), 201);\n });\n }\n\n const definitionMatch = pathname.match(\n /^\\/api\\/lifeops\\/definitions\\/([^/]+)$/,\n );\n if (definitionMatch) {\n const definitionId = decodeMatchedPathComponent(\n ctx,\n definitionMatch,\n 1,\n res,\n \"definition id\",\n );\n if (!definitionId) return true;\n if (method === \"GET\") {\n return runRoute(ctx, async (service) => {\n json(res, await service.getDefinition(definitionId));\n });\n }\n if (method === \"PUT\") {\n if (rateLimitRequest(ctx, \"task_update\")) return true;\n const body = await readJsonBody<UpdateLifeOpsDefinitionRequest>(req, res);\n if (!body) return true;\n return runRoute(ctx, async (service) => {\n json(res, await service.updateDefinition(definitionId, body));\n });\n }\n if (method === \"DELETE\") {\n if (rateLimitRequest(ctx, \"task_update\")) return true;\n return runRoute(ctx, async (service) => {\n await service.deleteDefinition(definitionId);\n json(res, { deleted: true });\n });\n }\n }\n\n if (method === \"GET\" && pathname === \"/api/lifeops/goals\") {\n return runRoute(ctx, async (service) => {\n json(res, { goals: await service.listGoals() });\n });\n }\n\n if (method === \"POST\" && pathname === \"/api/lifeops/goals\") {\n if (rateLimitRequest(ctx, \"task_create\")) return true;\n const body = await readJsonBody<CreateLifeOpsGoalRequest>(req, res);\n if (!body) return true;\n return runRoute(ctx, async (service) => {\n json(res, await service.createGoal(body), 201);\n });\n }\n\n const goalMatch = pathname.match(/^\\/api\\/lifeops\\/goals\\/([^/]+)$/);\n if (goalMatch) {\n const goalId = decodeMatchedPathComponent(\n ctx,\n goalMatch,\n 1,\n res,\n \"goal id\",\n );\n if (!goalId) return true;\n if (method === \"GET\") {\n return runRoute(ctx, async (service) => {\n json(res, await service.getGoal(goalId));\n });\n }\n if (method === \"PUT\") {\n if (rateLimitRequest(ctx, \"task_update\")) return true;\n const body = await readJsonBody<UpdateLifeOpsGoalRequest>(req, res);\n if (!body) return true;\n return runRoute(ctx, async (service) => {\n json(res, await service.updateGoal(goalId, body));\n });\n }\n if (method === \"DELETE\") {\n if (rateLimitRequest(ctx, \"task_update\")) return true;\n return runRoute(ctx, async (service) => {\n await service.deleteGoal(goalId);\n json(res, { deleted: true });\n });\n }\n }\n\n const goalReviewMatch = pathname.match(\n /^\\/api\\/lifeops\\/goals\\/([^/]+)\\/review$/,\n );\n if (goalReviewMatch && method === \"GET\") {\n const goalId = decodeMatchedPathComponent(\n ctx,\n goalReviewMatch,\n 1,\n res,\n \"goal id\",\n );\n if (!goalId) return true;\n return runRoute(ctx, async (service) => {\n json(res, await service.reviewGoal(goalId));\n });\n }\n\n const workflowMatch = pathname.match(/^\\/api\\/lifeops\\/workflows\\/([^/]+)$/);\n if (workflowMatch) {\n const workflowId = decodeMatchedPathComponent(\n ctx,\n workflowMatch,\n 1,\n res,\n \"workflow id\",\n );\n if (!workflowId) return true;\n if (method === \"GET\") {\n return runRoute(ctx, async (service) => {\n json(res, await service.getWorkflow(workflowId));\n });\n }\n if (method === \"PUT\") {\n if (rateLimitRequest(ctx, \"task_update\")) return true;\n const body = await readJsonBody<UpdateLifeOpsWorkflowRequest>(req, res);\n if (!body) return true;\n return runRoute(ctx, async (service) => {\n json(res, await service.updateWorkflow(workflowId, body));\n });\n }\n }\n\n const workflowRunMatch = pathname.match(\n /^\\/api\\/lifeops\\/workflows\\/([^/]+)\\/run$/,\n );\n if (method === \"POST\" && workflowRunMatch) {\n if (rateLimitRequest(ctx, \"task_create\")) return true;\n const workflowId = decodeMatchedPathComponent(\n ctx,\n workflowRunMatch,\n 1,\n res,\n \"workflow id\",\n );\n if (!workflowId) return true;\n const body = await readJsonBody<RunLifeOpsWorkflowRequest>(req, res);\n if (!body) return true;\n return runRoute(ctx, async (service) => {\n json(res, { run: await service.runWorkflow(workflowId, body) }, 201);\n });\n }\n\n // Browser session + companion progress/complete routes extracted to\n // `@elizaos/plugin-browser/routes` (mounted under\n // `/api/browser-bridge/*`).\n\n const occurrenceExplanationMatch = pathname.match(\n /^\\/api\\/lifeops\\/occurrences\\/([^/]+)\\/explanation$/,\n );\n if (occurrenceExplanationMatch && method === \"GET\") {\n const occurrenceId = decodeMatchedPathComponent(\n ctx,\n occurrenceExplanationMatch,\n 1,\n res,\n \"occurrence id\",\n );\n if (!occurrenceId) return true;\n return runRoute(ctx, async (service) => {\n json(res, await service.explainOccurrence(occurrenceId));\n });\n }\n\n const completeMatch = pathname.match(\n /^\\/api\\/lifeops\\/occurrences\\/([^/]+)\\/complete$/,\n );\n if (method === \"POST\" && completeMatch) {\n if (rateLimitRequest(ctx, \"task_update\")) return true;\n const occurrenceId = decodeMatchedPathComponent(\n ctx,\n completeMatch,\n 1,\n res,\n \"occurrence id\",\n );\n if (!occurrenceId) return true;\n const body = await readJsonBody<CompleteLifeOpsOccurrenceRequest>(req, res);\n if (!body) return true;\n return runRoute(ctx, async (service) => {\n json(res, {\n occurrence: await service.completeOccurrence(occurrenceId, body),\n });\n });\n }\n\n const skipMatch = pathname.match(\n /^\\/api\\/lifeops\\/occurrences\\/([^/]+)\\/skip$/,\n );\n if (method === \"POST\" && skipMatch) {\n if (rateLimitRequest(ctx, \"task_update\")) return true;\n const occurrenceId = decodeMatchedPathComponent(\n ctx,\n skipMatch,\n 1,\n res,\n \"occurrence id\",\n );\n if (!occurrenceId) return true;\n const body = await readJsonBody<Record<string, never>>(req, res);\n if (!body) return true;\n return runRoute(ctx, async (service) => {\n json(res, {\n occurrence: await service.skipOccurrence(occurrenceId),\n });\n });\n }\n\n const snoozeMatch = pathname.match(\n /^\\/api\\/lifeops\\/occurrences\\/([^/]+)\\/snooze$/,\n );\n if (method === \"POST\" && snoozeMatch) {\n if (rateLimitRequest(ctx, \"task_update\")) return true;\n const occurrenceId = decodeMatchedPathComponent(\n ctx,\n snoozeMatch,\n 1,\n res,\n \"occurrence id\",\n );\n if (!occurrenceId) return true;\n const body = await readJsonBody<SnoozeLifeOpsOccurrenceRequest>(req, res);\n if (!body) return true;\n return runRoute(ctx, async (service) => {\n json(res, {\n occurrence: await service.snoozeOccurrence(occurrenceId, body),\n });\n });\n }\n\n return false;\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type http from "node:http";
|
|
2
|
+
import type { AgentRuntime, Plugin } from "@elizaos/core";
|
|
3
|
+
export declare function requireLifeOpsRouteOwnerAdminAccess(args: {
|
|
4
|
+
req: http.IncomingMessage;
|
|
5
|
+
res: http.ServerResponse;
|
|
6
|
+
runtime: AgentRuntime | null;
|
|
7
|
+
}): Promise<boolean>;
|
|
8
|
+
export declare const personalAssistantRoutesPlugin: Plugin;
|
|
9
|
+
//# sourceMappingURL=plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/routes/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAGlC,OAAO,KAAK,EACV,YAAY,EAEZ,MAAM,EAKP,MAAM,eAAe,CAAC;AAiIvB,wBAAsB,mCAAmC,CAAC,IAAI,EAAE;IAC9D,GAAG,EAAE,IAAI,CAAC,eAAe,CAAC;IAC1B,GAAG,EAAE,IAAI,CAAC,cAAc,CAAC;IACzB,OAAO,EAAE,YAAY,GAAG,IAAI,CAAC;CAC9B,GAAG,OAAO,CAAC,OAAO,CAAC,CAyBnB;AAwjBD,eAAO,MAAM,6BAA6B,EAAE,MAM3C,CAAC"}
|