@elizaos/plugin-personal-assistant 2.0.3-beta.6 → 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/actions/life.ts"],"sourcesContent":["import {\n extractConversationMetadataFromRoom,\n isPageScopedConversationMetadata,\n renderGroundedActionReply,\n} from \"@elizaos/agent\";\nimport type {\n ActionResult,\n AgentContext,\n HandlerCallback,\n HandlerOptions,\n IAgentRuntime,\n Memory,\n State,\n} from \"@elizaos/core\";\nimport { resolveActionArgs, type SubactionsMap } from \"@elizaos/core\";\nimport type {\n CreateLifeOpsDefinitionRequest,\n CreateLifeOpsGoalRequest,\n LifeOpsCadence,\n LifeOpsDailySlot,\n LifeOpsDefinitionRecord,\n LifeOpsDomain,\n LifeOpsGoalRecord,\n LifeOpsWindowPolicy,\n UpdateLifeOpsDefinitionRequest,\n UpdateLifeOpsGoalRequest,\n} from \"../contracts/index.js\";\nimport {\n buildNativeAppleReminderMetadata,\n type NativeAppleReminderLikeKind,\n} from \"../lifeops/apple-reminders.js\";\nimport {\n resolveDefaultTimeZone,\n resolveDefaultWindowPolicy,\n} from \"../lifeops/defaults.js\";\nimport {\n detailBoolean,\n detailNumber,\n detailObject,\n detailString,\n formatOverviewForQuery,\n messageText,\n toActionData,\n} from \"../lifeops/google/format-helpers.js\";\nimport { LifeOpsService, LifeOpsServiceError } from \"../lifeops/service.js\";\nimport { normalizeExplicitTimeZoneToken } from \"../lifeops/time/timezone.js\";\nimport {\n addDaysToLocalDate,\n buildUtcDateFromLocalParts,\n getZonedDateParts,\n} from \"../lifeops/time.js\";\nimport {\n extractGoalCreatePlanWithLlm,\n extractGoalUpdatePlanWithLlm,\n mergeGoalMetadataWithGrounding,\n} from \"./lib/extract-goal-plan.js\";\nimport {\n type ExtractedLifeMissingField,\n type ExtractedLifeOperation,\n extractLifeOperationWithLlm,\n} from \"./lib/extract-life-operation.js\";\nimport {\n type ExtractedTaskParams,\n extractTaskCreatePlanWithLlm,\n} from \"./lib/extract-task-plan.js\";\nimport {\n type ExtractedUpdateFields,\n extractUpdateFieldsWithLlm,\n} from \"./lib/extract-update-fields.js\";\nimport {\n countTurnsSinceLatestDeferredLifeDraft,\n type DeferredLifeDefinitionDraft,\n type DeferredLifeDraft,\n type DeferredLifeDraftFollowupMode,\n type DeferredLifeDraftReuseMode,\n type DeferredLifeGoalDraft,\n deferredLifeDraftExpiryReason,\n extractDeferredLifeDraftFollowupWithLlm,\n latestDeferredLifeDraft,\n} from \"./lib/lifeops-deferred-draft.js\";\nimport {\n applyOwnerPolicyConfigureEscalation,\n applyOwnerPolicySetReminder,\n} from \"./lib/owner-policy-writes.js\";\n\n// ── Types ─────────────────────────────────────────────\n\ntype LifeOperation = ExtractedLifeOperation;\ntype LifeOwnedOperation = Exclude<\n LifeOperation,\n | \"query_calendar_today\"\n | \"query_calendar_next\"\n | \"query_email\"\n | \"query_overview\"\n>;\n/** Internal handler discriminator: definition vs goal flow. */\ntype LifeKind = \"definition\" | \"goal\";\ntype ResolvedLifeOperationPlan = {\n confidence: number | null;\n missing: ExtractedLifeMissingField[];\n operation: LifeOperation | null;\n kind?: LifeKind;\n shouldAct: boolean;\n};\n\ntype LifeParams = {\n action?: string;\n subaction?: LifeOperation;\n kind?: LifeKind;\n intent?: string;\n title?: string;\n target?: string;\n minutes?: number;\n details?: Record<string, unknown>;\n ownerSurface?: string;\n};\n\nconst SUBACTIONS = {\n create: {\n description:\n \"Create a life-item: kind=definition (habit/routine/reminder/alarm/todo) or kind=goal (long-term aspiration).\",\n descriptionCompressed:\n \"create life-item definition(habit|routine|reminder|alarm|todo)|goal; infer cadence/title\",\n required: [\"kind\", \"title\"],\n optional: [\"intent\", \"details\"],\n },\n update: {\n description:\n \"Update an existing life-item by id or title (kind: definition or goal).\",\n descriptionCompressed: \"update life-item by id/title: kind, target, fields\",\n required: [\"kind\", \"target\"],\n optional: [\"title\", \"details\"],\n },\n delete: {\n description:\n \"Delete a life-item by id or title (kind: definition or goal).\",\n descriptionCompressed: \"delete life-item by id/title\",\n required: [\"kind\", \"target\"],\n },\n complete: {\n description: \"Mark an occurrence as done.\",\n descriptionCompressed: \"mark occurrence done\",\n required: [\"target\"],\n },\n skip: {\n description: \"Skip an occurrence.\",\n descriptionCompressed: \"skip occurrence\",\n required: [\"target\"],\n },\n snooze: {\n description: \"Snooze an occurrence by minutes or preset duration.\",\n descriptionCompressed: \"snooze occurrence; duration\",\n required: [\"target\"],\n optional: [\"minutes\"],\n },\n review: {\n description: \"Review progress on a goal.\",\n descriptionCompressed: \"review goal progress\",\n required: [\"target\"],\n },\n policy_set_reminder: {\n description:\n \"Set reminder intensity policy on the OwnerFactStore: minimal | normal | persistent | high_priority_only. Optional per-definition target.\",\n descriptionCompressed:\n \"policy.set_reminder: intensity=minimal|normal|persistent|high_priority_only\",\n required: [],\n optional: [\"intent\", \"details\"],\n },\n policy_configure_escalation: {\n description:\n \"Configure escalation policy on the OwnerFactStore (timeoutMinutes, callAfterMinutes). Optional per-definition target.\",\n descriptionCompressed:\n \"policy.configure_escalation: timeout-minutes call-after-no-response\",\n required: [],\n optional: [\"intent\", \"details\"],\n },\n} as const satisfies SubactionsMap<LifeOwnedOperation>;\n\n/**\n * Internal handler key — the dispatch table inside the action handler still\n * branches on definition-vs-goal for create/update/delete because the\n * underlying LifeOpsService methods are split. The umbrella surface (the\n * SUBACTIONS map above) uses the 7 plain verbs and resolves the kind\n * separately via params.kind.\n */\ntype InternalLifeOp =\n | \"create_definition\"\n | \"create_goal\"\n | \"update_definition\"\n | \"update_goal\"\n | \"delete_definition\"\n | \"delete_goal\"\n | \"complete_occurrence\"\n | \"skip_occurrence\"\n | \"snooze_occurrence\"\n | \"review_goal\"\n | \"policy_set_reminder\"\n | \"policy_configure_escalation\";\n\nfunction toInternalLifeOp(\n operation: LifeOwnedOperation,\n kind: LifeKind | undefined,\n): InternalLifeOp {\n switch (operation) {\n case \"create\":\n return kind === \"goal\" ? \"create_goal\" : \"create_definition\";\n case \"update\":\n return kind === \"goal\" ? \"update_goal\" : \"update_definition\";\n case \"delete\":\n return kind === \"goal\" ? \"delete_goal\" : \"delete_definition\";\n case \"complete\":\n return \"complete_occurrence\";\n case \"skip\":\n return \"skip_occurrence\";\n case \"snooze\":\n return \"snooze_occurrence\";\n case \"review\":\n return \"review_goal\";\n case \"policy_set_reminder\":\n return \"policy_set_reminder\";\n case \"policy_configure_escalation\":\n return \"policy_configure_escalation\";\n }\n}\n\nfunction inferLifeKindFromIntent(intent: string): LifeKind {\n const normalized = intent.toLowerCase();\n if (\n /\\bgoal\\b|\\baspirat|achiev|long[\\s-]?term/.test(normalized) ||\n /\\bi (?:want|hope|wish|aspire) to\\b/.test(normalized)\n ) {\n return \"goal\";\n }\n return \"definition\";\n}\n\nconst GENERIC_DERIVED_TITLE_RE =\n /^(?:new\\s+)?(?:habit|routine|task|goal|life goal|thing|item|something|anything|stuff|plan|reminder|todo|to do|achieve|achieve a|achieve an)$/i;\n\nfunction normalizeLifeTimeZoneToken(\n value: string | null | undefined,\n): string | null {\n return normalizeExplicitTimeZoneToken(value);\n}\n\nfunction isLifeOwnedOperation(\n value: LifeOperation | null | undefined,\n): value is LifeOwnedOperation {\n return (\n value != null &&\n value !== \"query_calendar_today\" &&\n value !== \"query_calendar_next\" &&\n value !== \"query_email\" &&\n value !== \"query_overview\"\n );\n}\n\nfunction normalizeExplicitLifeAction(value: unknown):\n | {\n operation: LifeOperation;\n kind?: LifeKind;\n }\n | \"phone\"\n | null {\n if (typeof value !== \"string\") {\n return null;\n }\n const normalized = value\n .trim()\n .toLowerCase()\n .replace(/[-\\s]+/g, \"_\");\n switch (normalized) {\n case \"create_goal\":\n case \"goal_create\":\n return { operation: \"create\", kind: \"goal\" };\n case \"create_definition\":\n case \"create_habit\":\n case \"create_routine\":\n case \"create_reminder\":\n case \"create_todo\":\n return { operation: \"create\", kind: \"definition\" };\n case \"calendar\":\n case \"query_calendar\":\n case \"query_calendar_today\":\n return { operation: \"query_calendar_today\" };\n case \"query_calendar_next\":\n case \"next_calendar\":\n return { operation: \"query_calendar_next\" };\n case \"email\":\n case \"gmail\":\n case \"query_email\":\n return { operation: \"query_email\" };\n case \"overview\":\n case \"query_overview\":\n return { operation: \"query_overview\" };\n case \"phone\":\n case \"capture_phone\":\n return \"phone\";\n default:\n return isLifeOwnedOperation(normalized as LifeOperation)\n ? { operation: normalized as LifeOwnedOperation }\n : null;\n }\n}\n\nasync function resolveLifeOperationPlan(args: {\n runtime: IAgentRuntime;\n message: Memory;\n state: State | undefined;\n intent: string;\n explicitOperation: LifeOperation | undefined;\n}): Promise<ResolvedLifeOperationPlan> {\n const { runtime, message, state, intent, explicitOperation } = args;\n if (explicitOperation) {\n return {\n operation: explicitOperation,\n confidence: 1,\n missing: [],\n shouldAct: true,\n };\n }\n\n const extracted = await extractLifeOperationWithLlm({\n runtime,\n message,\n state,\n intent,\n });\n if (\n !extracted.shouldAct ||\n !extracted.operation ||\n !isLifeOwnedOperation(extracted.operation)\n ) {\n return {\n operation: isLifeOwnedOperation(extracted.operation)\n ? extracted.operation\n : null,\n confidence: extracted.confidence,\n missing: extracted.missing,\n shouldAct: false,\n };\n }\n return {\n operation: extracted.operation,\n confidence: extracted.confidence,\n missing: extracted.missing,\n shouldAct: true,\n };\n}\n\n/**\n * Pre-routing pick of the owner operation action.\n *\n * Tries the shared `resolveActionArgs` substrate first (planner-trust path\n * + single LLM pass). Falls back to the LifeOps-specific extractor when\n * `resolveActionArgs` cannot pick a subaction confidently — that extractor\n * carries richer \"missing field\" diagnostics (`title`, `schedule`, etc.)\n * that downstream clarification messaging depends on.\n */\nasync function routeLifeSubaction(args: {\n runtime: IAgentRuntime;\n message: Memory;\n state: State | undefined;\n options: HandlerOptions | undefined;\n intent: string;\n explicitSubaction: LifeOperation | undefined;\n}): Promise<ResolvedLifeOperationPlan> {\n const { runtime, message, state, options, intent, explicitSubaction } = args;\n if (explicitSubaction && !isLifeOwnedOperation(explicitSubaction)) {\n return {\n operation: explicitSubaction,\n confidence: 1,\n missing: [],\n shouldAct: true,\n };\n }\n const resolved = await resolveActionArgs<LifeOwnedOperation, LifeParams>({\n runtime,\n message,\n state,\n options,\n actionName: ownerSurfaceActionNameFromOptions(options),\n subactions: SUBACTIONS,\n intentHint: intent,\n });\n\n if (resolved.ok) {\n return {\n operation: resolved.subaction,\n confidence: 1,\n missing: [],\n shouldAct: true,\n };\n }\n\n return resolveLifeOperationPlan({\n runtime,\n message,\n state,\n intent,\n explicitOperation: explicitSubaction,\n });\n}\n\nfunction resolveDeferredLifeDraftReuseMode(args: {\n details: Record<string, unknown> | undefined;\n draft: DeferredLifeDraft | null;\n explicitOperation: LifeOperation | undefined;\n llmMode?: DeferredLifeDraftFollowupMode;\n /** Number of messages since the draft was stored. */\n turnsSinceDraft?: number;\n}): DeferredLifeDraftReuseMode | null {\n if (!args.draft) {\n return null;\n }\n\n if (deferredLifeDraftExpiryReason(args)) {\n return null;\n }\n\n if (detailBoolean(args.details, \"confirmed\") === true) {\n return \"confirm\";\n }\n\n const explicitOperation = args.explicitOperation\n ? String(args.explicitOperation)\n : undefined;\n const draftOperation = String(args.draft.operation);\n if (explicitOperation && explicitOperation !== draftOperation) {\n return null;\n }\n\n if (args.llmMode === \"confirm\" || args.llmMode === \"edit\") {\n return args.llmMode;\n }\n return null;\n}\n\nfunction shouldForceLifeCreateExecution(args: {\n intent: string;\n missing: ExtractedLifeMissingField[];\n operation: LifeOperation | null;\n kind: LifeKind | undefined;\n details: Record<string, unknown> | undefined;\n title: string | undefined;\n}): boolean {\n if (args.operation !== \"create\" || args.kind === \"goal\") {\n return false;\n }\n\n const blockingFields = args.missing.filter(\n (field) => field !== \"title\" && field !== \"schedule\",\n );\n if (blockingFields.length > 0) {\n return false;\n }\n\n if (typeof args.title === \"string\" && args.title.trim().length > 0) {\n return true;\n }\n\n if (normalizeCadenceDetail(detailObject(args.details, \"cadence\"))) {\n return true;\n }\n return false;\n}\n\n// ── Helpers ───────────────────────────────────────────\n\nfunction requestedOwnership(domain?: LifeOpsDomain) {\n if (domain === \"agent_ops\") {\n return { domain: \"agent_ops\" as const, subjectType: \"agent\" as const };\n }\n return { domain: \"user_lifeops\" as const, subjectType: \"owner\" as const };\n}\n\nfunction normalizeIntentText(value: string): string {\n return normalizeLifeInputText(value).toLowerCase();\n}\n\nfunction normalizeLifeInputText(value: string): string {\n return value\n .replace(/[\\u00a0\\u1680\\u2000-\\u200b\\u202f\\u205f\\u3000]/g, \" \")\n .replace(/\\s+/g, \" \")\n .trim();\n}\n\nfunction normalizeTitle(value: string): string {\n return normalizeIntentText(value);\n}\n\nfunction matchByTitle<\n T extends { definition?: { title: string }; goal?: { title: string } },\n>(entries: T[], targetTitle: string): T | null {\n const normalized = normalizeTitle(targetTitle);\n return (\n entries.find(\n (e) =>\n normalizeTitle(e.definition?.title ?? e.goal?.title ?? \"\") ===\n normalized,\n ) ??\n entries.find((e) =>\n normalizeTitle(e.definition?.title ?? e.goal?.title ?? \"\").includes(\n normalized,\n ),\n ) ??\n null\n );\n}\n\nasync function resolveGoal(\n service: LifeOpsService,\n target: string | undefined,\n domain?: LifeOpsDomain,\n): Promise<LifeOpsGoalRecord | null> {\n if (!target) return null;\n const goals = (await service.listGoals()).filter((e) =>\n domain ? e.goal.domain === domain : true,\n );\n return goals.find((e) => e.goal.id === target) ?? matchByTitle(goals, target);\n}\n\nasync function resolveDefinition(\n service: LifeOpsService,\n target: string | undefined,\n domain?: LifeOpsDomain,\n): Promise<LifeOpsDefinitionRecord | null> {\n if (!target) return null;\n const defs = (await service.listDefinitions()).filter((e) =>\n domain ? e.definition.domain === domain : true,\n );\n return (\n defs.find((e) => e.definition.id === target) ?? matchByTitle(defs, target)\n );\n}\n\nfunction tokenizeTitle(value: string): string[] {\n return normalizeTitle(value)\n .split(\" \")\n .filter((token) => token.length >= 3);\n}\n\nexport async function resolveDefinitionFromIntent(\n service: LifeOpsService,\n target: string | undefined,\n intent: string,\n domain?: LifeOpsDomain,\n): Promise<LifeOpsDefinitionRecord | null> {\n const direct = await resolveDefinition(service, target, domain);\n if (direct) {\n return direct;\n }\n const defs = (await service.listDefinitions()).filter((entry) =>\n domain ? entry.definition.domain === domain : true,\n );\n const intentTokens = new Set(tokenizeTitle(intent));\n let best: LifeOpsDefinitionRecord | null = null;\n let bestScore = 0;\n let tied = false;\n for (const entry of defs) {\n const title = normalizeTitle(entry.definition.title);\n if (title.length > 0 && normalizeTitle(intent).includes(title)) {\n return entry;\n }\n const overlap = tokenizeTitle(entry.definition.title).filter((token) =>\n intentTokens.has(token),\n ).length;\n if (overlap === 0) {\n continue;\n }\n if (overlap > bestScore) {\n best = entry;\n bestScore = overlap;\n tied = false;\n continue;\n }\n if (overlap === bestScore) {\n tied = true;\n }\n }\n return bestScore > 0 && !tied ? best : null;\n}\n\ntype OccurrenceResult = {\n match:\n | Awaited<\n ReturnType<LifeOpsService[\"getOverview\"]>\n >[\"owner\"][\"occurrences\"][number]\n | null;\n /** Non-empty only when resolution was ambiguous (2+ substring matches, no exact/prefix winner). */\n ambiguousCandidates: string[];\n};\n\nfunction formatOccurrenceDisambiguationLabel(\n occurrence: Awaited<\n ReturnType<LifeOpsService[\"getOverview\"]>\n >[\"owner\"][\"occurrences\"][number],\n): string {\n const hints: string[] = [];\n if (\n typeof occurrence.windowName === \"string\" &&\n occurrence.windowName.trim()\n ) {\n hints.push(occurrence.windowName.trim());\n }\n if (occurrence.dueAt) {\n const dueAt = new Date(occurrence.dueAt);\n if (!Number.isNaN(dueAt.getTime())) {\n hints.push(\n dueAt.toLocaleString(undefined, {\n month: \"short\",\n day: \"numeric\",\n hour: \"numeric\",\n minute: \"2-digit\",\n }),\n );\n }\n }\n return hints.length > 0\n ? `${occurrence.title} (${hints.join(\", \")})`\n : occurrence.title;\n}\n\nfunction narrowOccurrenceCandidates(\n matches: Awaited<\n ReturnType<LifeOpsService[\"getOverview\"]>\n >[\"owner\"][\"occurrences\"],\n) {\n const actionableMatches = matches.filter(\n (occurrence) =>\n occurrence.state === \"visible\" || occurrence.state === \"snoozed\",\n );\n return actionableMatches.length > 0 ? actionableMatches : matches;\n}\n\nasync function resolveOccurrence(\n service: LifeOpsService,\n target: string | undefined,\n domain?: LifeOpsDomain,\n): Promise<OccurrenceResult> {\n if (!target) return { match: null, ambiguousCandidates: [] };\n const overview = await service.getOverview();\n const all = [\n ...overview.owner.occurrences,\n ...overview.agentOps.occurrences,\n ].filter((o) => (domain ? o.domain === domain : true));\n const normalized = normalizeTitle(target);\n\n // Exact ID match\n const byId = all.find((o) => o.id === target);\n if (byId) return { match: byId, ambiguousCandidates: [] };\n\n // Exact normalized-title match\n const exactMatches = all.filter(\n (o) => normalizeTitle(o.title) === normalized,\n );\n if (exactMatches.length === 1) {\n return { match: exactMatches.at(0) ?? null, ambiguousCandidates: [] };\n }\n if (exactMatches.length > 1) {\n const narrowedMatches = narrowOccurrenceCandidates(exactMatches);\n if (narrowedMatches.length === 1) {\n return { match: narrowedMatches.at(0) ?? null, ambiguousCandidates: [] };\n }\n return {\n match: null,\n ambiguousCandidates: narrowedMatches.map(\n formatOccurrenceDisambiguationLabel,\n ),\n };\n }\n\n // Substring matches — disambiguate when multiple\n const substringMatches = all.filter((o) =>\n normalizeTitle(o.title).includes(normalized),\n );\n if (substringMatches.length === 1) {\n return { match: substringMatches.at(0) ?? null, ambiguousCandidates: [] };\n }\n if (substringMatches.length > 1) {\n const narrowedSubstringMatches =\n narrowOccurrenceCandidates(substringMatches);\n if (narrowedSubstringMatches.length === 1) {\n return {\n match: narrowedSubstringMatches.at(0) ?? null,\n ambiguousCandidates: [],\n };\n }\n // Prefer startsWith over generic includes\n const startsWithMatches = narrowedSubstringMatches.filter((o) =>\n normalizeTitle(o.title).startsWith(normalized),\n );\n if (startsWithMatches.length === 1) {\n return {\n match: startsWithMatches.at(0) ?? null,\n ambiguousCandidates: [],\n };\n }\n if (startsWithMatches.length > 1) {\n return {\n match: null,\n ambiguousCandidates: startsWithMatches.map(\n formatOccurrenceDisambiguationLabel,\n ),\n };\n }\n // Still ambiguous — return candidates for the caller to list\n return {\n match: null,\n ambiguousCandidates: narrowedSubstringMatches.map(\n formatOccurrenceDisambiguationLabel,\n ),\n };\n }\n\n const targetTokens = normalized.split(/\\s+/).filter(Boolean);\n if (targetTokens.length > 1) {\n const tokenSetMatches = all.filter((occurrence) => {\n const occurrenceTokens = new Set(\n normalizeTitle(occurrence.title).split(/\\s+/).filter(Boolean),\n );\n return targetTokens.every((token) => occurrenceTokens.has(token));\n });\n if (tokenSetMatches.length === 1) {\n return { match: tokenSetMatches.at(0) ?? null, ambiguousCandidates: [] };\n }\n if (tokenSetMatches.length > 1) {\n const narrowedTokenSetMatches =\n narrowOccurrenceCandidates(tokenSetMatches);\n if (narrowedTokenSetMatches.length === 1) {\n return {\n match: narrowedTokenSetMatches.at(0) ?? null,\n ambiguousCandidates: [],\n };\n }\n return {\n match: null,\n ambiguousCandidates: narrowedTokenSetMatches.map(\n formatOccurrenceDisambiguationLabel,\n ),\n };\n }\n }\n\n return { match: null, ambiguousCandidates: [] };\n}\n\nfunction deriveOccurrenceTargetFromIntent(\n intent: string,\n operation: LifeOperation,\n): string | null {\n const normalized = normalizeLifeInputText(intent);\n if (!normalized) {\n return null;\n }\n\n let candidate = normalized;\n if (operation === \"snooze\") {\n candidate = candidate\n .replace(\n /^(?:please\\s+)?(?:snooze|postpone|push\\b.*\\bback|remind me later about)\\s+/i,\n \"\",\n )\n .replace(/\\bfor\\s+\\d+\\s*(?:minutes?|hours?)\\b.*$/i, \"\")\n .replace(/\\b(?:until|til)\\b.+$/i, \"\")\n .trim();\n } else if (operation === \"skip\") {\n candidate = candidate\n .replace(/^(?:please\\s+)?(?:skip|pass on)\\s+/i, \"\")\n .replace(/\\b(?:today|tonight|for now)\\b.*$/i, \"\")\n .trim();\n } else if (operation === \"complete\") {\n candidate = candidate\n .replace(\n /^(?:please\\s+)?(?:mark\\s+|i(?:'ve| have)?\\s+|just\\s+)?(?:done|completed|finished|did)\\s+/i,\n \"\",\n )\n .replace(/\\b(?:done|complete|completed|finished)\\b.*$/i, \"\")\n .trim();\n }\n\n return candidate.length > 0 ? candidate : null;\n}\n\nasync function resolveOccurrenceWithIntentFallback(args: {\n service: LifeOpsService;\n target: string | undefined;\n domain?: LifeOpsDomain;\n intent: string;\n operation: LifeOperation;\n}): Promise<OccurrenceResult> {\n const direct = await resolveOccurrence(\n args.service,\n args.target,\n args.domain,\n );\n if (direct.match || direct.ambiguousCandidates.length > 0) {\n return direct;\n }\n\n const fallbackTarget = deriveOccurrenceTargetFromIntent(\n args.intent,\n args.operation,\n );\n if (\n !fallbackTarget ||\n (args.target &&\n normalizeTitle(fallbackTarget) === normalizeTitle(args.target))\n ) {\n return direct;\n }\n\n return resolveOccurrence(args.service, fallbackTarget, args.domain);\n}\n\nfunction summarizeCadence(cadence: LifeOpsCadence): string {\n const cadenceWindows = Array.isArray(\n (cadence as { windows?: unknown }).windows,\n )\n ? ((cadence as { windows: string[] }).windows ?? []).filter(\n (windowName) =>\n typeof windowName === \"string\" && windowName.trim().length > 0,\n )\n : [];\n\n switch (cadence.kind) {\n case \"once\": {\n const dueAt = new Date(cadence.dueAt);\n if (Number.isNaN(dueAt.getTime())) {\n return \"once\";\n }\n return `once on ${dueAt.toLocaleString(undefined, {\n month: \"short\",\n day: \"numeric\",\n hour: \"numeric\",\n minute: \"2-digit\",\n timeZone: resolveDefaultTimeZone(),\n })}`;\n }\n case \"daily\":\n return cadenceWindows.length > 0\n ? `every day in ${cadenceWindows.join(\", \")}`\n : \"every day\";\n case \"times_per_day\":\n return cadence.slots\n .map((slot) => slot.label.trim() || `${slot.minuteOfDay}`)\n .filter(Boolean)\n .join(\" and \");\n case \"interval\":\n return cadenceWindows.length > 0\n ? `every ${cadence.everyMinutes} minutes in ${cadenceWindows.join(\", \")}`\n : `every ${cadence.everyMinutes} minutes`;\n case \"weekly\":\n return `weekly on ${cadence.weekdays\n .map(\n (weekday) =>\n [\n \"Sunday\",\n \"Monday\",\n \"Tuesday\",\n \"Wednesday\",\n \"Thursday\",\n \"Friday\",\n \"Saturday\",\n ][weekday] ?? String(weekday),\n )\n .join(\", \")}`;\n }\n}\n\ntype LifeReplyScenario =\n | \"reply_only\"\n | \"clarify_create_definition\"\n | \"clarify_create_goal\"\n | \"preview_definition\"\n | \"saved_definition\"\n | \"preview_goal\"\n | \"saved_goal\"\n | \"updated_definition\"\n | \"updated_goal\"\n | \"deleted_definition\"\n | \"deleted_goal\"\n | \"completed_occurrence\"\n | \"skipped_occurrence\"\n | \"snoozed_occurrence\"\n | \"overview\"\n | \"weekly_goal_review\"\n | \"service_error\";\n\nfunction buildRuleBasedLifeReply(args: {\n scenario: LifeReplyScenario;\n intent: string;\n fallback: string;\n context?: Record<string, unknown>;\n}): string {\n const context = args.context ?? {};\n const updated =\n context.updated && typeof context.updated === \"object\"\n ? (context.updated as Record<string, unknown>)\n : null;\n const created =\n context.created && typeof context.created === \"object\"\n ? (context.created as Record<string, unknown>)\n : null;\n const title =\n (typeof updated?.title === \"string\" ? updated.title : null) ??\n (typeof created?.title === \"string\" ? created.title : null) ??\n (typeof context.title === \"string\" ? context.title : null) ??\n null;\n // Time-phrase nuance (\"mornings now\", \"7pm now\", etc.) is rendered by the\n // LLM in renderGroundedActionReply via the additionalRules contract. The\n // rule-based fallback intentionally only carries the title — never tries\n // to parse English-only time phrases out of the intent.\n\n switch (args.scenario) {\n case \"updated_definition\":\n if (title) {\n return `${title} is updated.`;\n }\n break;\n case \"deleted_definition\":\n if (title) {\n return `${title} is off your list.`;\n }\n break;\n case \"deleted_goal\":\n if (title) {\n return `${title} is off your goals list.`;\n }\n break;\n case \"completed_occurrence\":\n if (title) {\n return `Marked ${title} done.`;\n }\n break;\n case \"skipped_occurrence\":\n if (title) {\n return `Okay, skipping ${title} for now.`;\n }\n break;\n case \"snoozed_occurrence\":\n if (title) {\n return `Okay, I'll bring ${title} back a bit later.`;\n }\n break;\n default:\n break;\n }\n\n return args.fallback;\n}\n\nasync function renderLifeActionReply(args: {\n runtime: IAgentRuntime;\n message: Memory;\n state: State | undefined;\n intent: string;\n scenario: LifeReplyScenario;\n fallback: string;\n context?: Record<string, unknown>;\n}): Promise<string> {\n const { runtime, message, state, intent, scenario, fallback, context } = args;\n const naturalFallback = buildRuleBasedLifeReply({\n scenario,\n intent,\n fallback,\n context,\n });\n return renderGroundedActionReply({\n runtime,\n message,\n state,\n intent,\n domain: \"lifeops\",\n scenario,\n fallback: naturalFallback,\n context,\n preferCharacterVoice: true,\n additionalRules: [\n \"Mirror the user's phrasing for time and date when possible.\",\n \"Prefer phrases like tomorrow morning, every night, 7 am, or the user's own wording over robotic schedule language.\",\n \"Never surface raw ISO timestamps unless the user used raw ISO timestamps.\",\n \"If this is a preview, make clear it is not saved yet and the user can confirm or change it naturally.\",\n \"If this is reply-only, do not pretend you saved or changed anything.\",\n ],\n });\n}\n\nfunction buildLifeClarificationFallback(args: {\n missing: ExtractedLifeMissingField[];\n operation: LifeOperation | null;\n kind: LifeKind | undefined;\n}): string {\n const missing = new Set(args.missing);\n if (args.operation === \"create\" && args.kind === \"goal\") {\n return \"What do you want the goal to be?\";\n }\n if (missing.has(\"title\") && missing.has(\"schedule\")) {\n return \"What do you want the todo to be, and when should it happen?\";\n }\n if (missing.has(\"title\")) {\n return \"What do you want it to be?\";\n }\n if (missing.has(\"schedule\")) {\n return \"When should it happen?\";\n }\n return \"Tell me a bit more about what you want to set up.\";\n}\n\nfunction buildLifeServiceErrorFallback(\n error: LifeOpsServiceError,\n intent: string,\n): string {\n const normalized = error.message.toLowerCase();\n if (\n normalized.includes(\"utc 'z' suffix\") ||\n normalized.includes(\"local datetime without 'z'\") ||\n normalized.includes(\"time didn't parse\") ||\n normalized.includes(\"invalid dueat\") ||\n normalized.includes(\"cadence.dueat\")\n ) {\n return `I couldn't pin down the reminder time from \"${intent}\". Tell me the time again in plain language, like \"Friday at 8 pm Pacific.\"`;\n }\n if (\n normalized.includes(\"when windowpreset is not provided\") ||\n normalized.includes(\"startat is required\")\n ) {\n return \"I still need the time for that reminder. Tell me when it should happen.\";\n }\n if (error.status === 429 || normalized.includes(\"rate limit\")) {\n return \"LifeOps is rate-limited right now. Try again in a bit.\";\n }\n return \"I couldn't finish that LifeOps change yet. Tell me the task and timing again, and I'll try it a different way.\";\n}\n\n// ── Calendar/email formatters ─────────────────────────\n\nconst DEFAULT_WINDOW_SLOT_TIMES: Record<\n \"morning\" | \"afternoon\" | \"evening\" | \"night\",\n { minuteOfDay: number; durationMinutes: number; label: string }\n> = {\n morning: {\n minuteOfDay: 8 * 60,\n durationMinutes: 45,\n label: \"Morning\",\n },\n afternoon: {\n minuteOfDay: 13 * 60,\n durationMinutes: 45,\n label: \"Afternoon\",\n },\n evening: {\n minuteOfDay: 18 * 60,\n durationMinutes: 45,\n label: \"Evening\",\n },\n night: {\n minuteOfDay: 21 * 60,\n durationMinutes: 45,\n label: \"Night\",\n },\n};\n\nfunction buildSlotsFromWindows(\n windows: Array<\"morning\" | \"afternoon\" | \"evening\" | \"night\">,\n): LifeOpsDailySlot[] {\n return windows.map((window, index) => {\n const preset = DEFAULT_WINDOW_SLOT_TIMES[window];\n return {\n key:\n windows.indexOf(window) === index ? window : `${window}-${index + 1}`,\n label: preset.label,\n minuteOfDay: preset.minuteOfDay,\n durationMinutes: preset.durationMinutes,\n };\n });\n}\n\nfunction buildDistributedDailySlots(count: number): LifeOpsDailySlot[] {\n const normalizedCount = Math.max(1, Math.min(6, count));\n let minutes: number[];\n switch (normalizedCount) {\n case 1:\n minutes = [9 * 60];\n break;\n case 2:\n minutes = [8 * 60, 21 * 60];\n break;\n case 3:\n minutes = [8 * 60, 13 * 60, 20 * 60];\n break;\n case 4:\n minutes = [8 * 60, 12 * 60, 16 * 60, 20 * 60];\n break;\n case 5:\n minutes = [8 * 60, 11 * 60, 14 * 60, 17 * 60, 20 * 60];\n break;\n default:\n minutes = [8 * 60, 10 * 60, 12 * 60, 14 * 60, 17 * 60, 20 * 60];\n break;\n }\n return minutes.map((minuteOfDay, index) => ({\n key: `slot-${index + 1}`,\n label: `Time ${index + 1}`,\n minuteOfDay,\n durationMinutes: 45,\n }));\n}\n\nfunction inferWindowFromMinuteOfDay(\n minuteOfDay: number,\n): \"morning\" | \"afternoon\" | \"evening\" | \"night\" {\n if (minuteOfDay < 12 * 60) {\n return \"morning\";\n }\n if (minuteOfDay < 17 * 60) {\n return \"afternoon\";\n }\n if (minuteOfDay < 21 * 60) {\n return \"evening\";\n }\n return \"night\";\n}\n\nfunction buildSingleDailySlot(\n minuteOfDay: number,\n durationMinutes = 45,\n): LifeOpsDailySlot {\n return {\n key: `time-${minuteOfDay}`,\n label: formatMinuteOfDayLabel(minuteOfDay),\n minuteOfDay,\n durationMinutes,\n };\n}\n\nfunction buildCustomTimeWindowPolicy(\n minuteOfDay: number,\n timeZone: string,\n): LifeOpsWindowPolicy {\n const basePolicy = resolveDefaultWindowPolicy(timeZone);\n return {\n timezone: basePolicy.timezone,\n windows: [\n ...basePolicy.windows,\n {\n name: \"custom\",\n label: formatMinuteOfDayLabel(minuteOfDay),\n startMinute: minuteOfDay,\n endMinute: Math.min(minuteOfDay + 1, 24 * 60),\n },\n ],\n };\n}\n\nfunction formatMinuteOfDayLabel(minuteOfDay: number): string {\n const hour24 = Math.floor(minuteOfDay / 60);\n const minute = minuteOfDay % 60;\n const meridiem = hour24 >= 12 ? \"pm\" : \"am\";\n const hour12 = hour24 % 12 === 0 ? 12 : hour24 % 12;\n return minute === 0\n ? `${hour12}${meridiem}`\n : `${hour12}:${String(minute).padStart(2, \"0\")}${meridiem}`;\n}\n\nfunction parseClockToken(token: string): number | null {\n const normalized = token.trim().toLowerCase();\n if (normalized === \"noon\") {\n return 12 * 60;\n }\n if (normalized === \"midnight\") {\n return 0;\n }\n const match = normalized.match(/^(\\d{1,2})(?::(\\d{2}))?\\s*(am|pm)$/);\n if (!match) {\n return null;\n }\n const hour = Number(match[1]);\n const minute = Number(match[2] ?? \"0\");\n if (!Number.isFinite(hour) || !Number.isFinite(minute) || minute >= 60) {\n return null;\n }\n if (hour < 1 || hour > 12) {\n return null;\n }\n const meridiem = match[3];\n const normalizedHour =\n meridiem === \"am\" ? hour % 12 : hour % 12 === 0 ? 12 : (hour % 12) + 12;\n return normalizedHour * 60 + minute;\n}\n\nfunction parseTimeOfDayToken(token: string): number | null {\n const normalized = normalizeLifeInputText(token).toLowerCase();\n const hhmmMatch = normalized.match(/^(\\d{1,2}):(\\d{2})$/);\n if (hhmmMatch) {\n const hour = Number(hhmmMatch[1]);\n const minute = Number(hhmmMatch[2]);\n if (\n Number.isFinite(hour) &&\n Number.isFinite(minute) &&\n hour >= 0 &&\n hour <= 23 &&\n minute >= 0 &&\n minute < 60\n ) {\n return hour * 60 + minute;\n }\n }\n return parseClockToken(normalized);\n}\n\nfunction buildOneOffDueAtFromMinuteOfDay(args: {\n minuteOfDay: number;\n now?: Date;\n timeZone?: string;\n}): string {\n const now = args.now ?? new Date();\n const timeZone = args.timeZone ?? resolveDefaultTimeZone();\n const nowParts = getZonedDateParts(now, timeZone);\n let localDate = {\n year: nowParts.year,\n month: nowParts.month,\n day: nowParts.day,\n };\n\n const buildCandidate = () =>\n buildUtcDateFromLocalParts(timeZone, {\n ...localDate,\n hour: Math.floor(args.minuteOfDay / 60),\n minute: args.minuteOfDay % 60,\n second: 0,\n });\n\n let candidate = buildCandidate();\n if (candidate.getTime() <= now.getTime()) {\n localDate = addDaysToLocalDate(localDate, 1);\n candidate = buildCandidate();\n }\n\n return candidate.toISOString();\n}\n\nfunction mergeMetadataRecords(\n ...records: Array<Record<string, unknown> | undefined>\n): Record<string, unknown> | undefined {\n const merged = Object.assign(\n {},\n ...records.filter(\n (record): record is Record<string, unknown> =>\n record != null && Object.keys(record).length > 0,\n ),\n );\n return Object.keys(merged).length > 0 ? merged : undefined;\n}\n\nfunction extractExplicitDailySlots(intent: string): LifeOpsDailySlot[] {\n const tokens = [\n ...intent.matchAll(/\\b(\\d{1,2}(?::\\d{2})?\\s*(?:am|pm)|noon|midnight)\\b/gi),\n ]\n .map((match) => match[1])\n .filter(\n (token): token is string => typeof token === \"string\" && token.length > 0,\n );\n const seen = new Set<number>();\n const slots: LifeOpsDailySlot[] = [];\n for (const [index, token] of tokens.entries()) {\n const minuteOfDay = parseClockToken(token);\n if (minuteOfDay === null || seen.has(minuteOfDay)) {\n continue;\n }\n seen.add(minuteOfDay);\n slots.push({\n key: `clock-${index + 1}`,\n label: token.trim(),\n minuteOfDay,\n durationMinutes: 45,\n });\n }\n return slots.sort((left, right) => left.minuteOfDay - right.minuteOfDay);\n}\n\nfunction normalizeLifeWindows(\n value: unknown,\n): Array<\"morning\" | \"afternoon\" | \"evening\" | \"night\"> {\n const values = Array.isArray(value) ? value : value == null ? [] : [value];\n const normalized = values.flatMap((entry) => {\n if (typeof entry !== \"string\") {\n return [];\n }\n const lower = normalizeLifeInputText(entry).toLowerCase();\n if (lower === \"morning\") return [\"morning\" as const];\n if (lower === \"afternoon\") return [\"afternoon\" as const];\n if (lower === \"evening\") return [\"evening\" as const];\n if (lower === \"night\") return [\"night\" as const];\n return [];\n });\n return [...new Set(normalized)];\n}\n\nfunction normalizeCadenceDetail(value: unknown): LifeOpsCadence | undefined {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n return undefined;\n }\n\n const record = value as Record<string, unknown>;\n const cadenceKind =\n typeof record.kind === \"string\"\n ? normalizeLifeInputText(record.kind).toLowerCase()\n : typeof record.type === \"string\"\n ? normalizeLifeInputText(record.type).toLowerCase()\n : \"\";\n\n if (!cadenceKind) {\n return undefined;\n }\n\n if (cadenceKind === \"once\" && typeof record.dueAt === \"string\") {\n return {\n kind: \"once\",\n dueAt: record.dueAt,\n };\n }\n\n if (cadenceKind === \"interval\") {\n const everyMinutes =\n typeof record.everyMinutes === \"number\"\n ? record.everyMinutes\n : typeof record.everyMinutes === \"string\"\n ? Number(record.everyMinutes)\n : typeof record.minutes === \"number\"\n ? record.minutes\n : typeof record.minutes === \"string\"\n ? Number(record.minutes)\n : NaN;\n if (Number.isFinite(everyMinutes) && everyMinutes > 0) {\n return {\n kind: \"interval\",\n everyMinutes,\n windows: normalizeLifeWindows(record.windows),\n };\n }\n return undefined;\n }\n\n if (cadenceKind === \"weekly\") {\n const weekdays = Array.isArray(record.weekdays)\n ? record.weekdays\n .map((entry) =>\n typeof entry === \"number\"\n ? entry\n : typeof entry === \"string\"\n ? Number(entry)\n : NaN,\n )\n .filter((entry) => Number.isFinite(entry))\n : [];\n if (weekdays.length > 0) {\n return {\n kind: \"weekly\",\n weekdays,\n windows: normalizeLifeWindows(record.windows),\n };\n }\n return undefined;\n }\n\n const explicitTimes = Array.isArray(record.times)\n ? record.times\n .map((entry) =>\n typeof entry === \"string\" ? parseTimeOfDayToken(entry) : null,\n )\n .filter((entry): entry is number => entry !== null)\n : [];\n if (explicitTimes.length > 0) {\n return {\n kind: \"times_per_day\",\n slots: explicitTimes.map((minuteOfDay, index) => ({\n key: `time-${index + 1}`,\n label: formatMinuteOfDayLabel(minuteOfDay),\n minuteOfDay,\n durationMinutes: 45,\n })),\n visibilityLeadMinutes: 90,\n visibilityLagMinutes: 180,\n };\n }\n\n if (cadenceKind === \"times_per_day\") {\n if (Array.isArray(record.slots)) {\n const slots = record.slots\n .map((entry, index) => {\n if (!entry || typeof entry !== \"object\" || Array.isArray(entry)) {\n return null;\n }\n const slot = entry as Record<string, unknown>;\n const minuteOfDay =\n typeof slot.minuteOfDay === \"number\"\n ? slot.minuteOfDay\n : typeof slot.minuteOfDay === \"string\"\n ? Number(slot.minuteOfDay)\n : null;\n if (minuteOfDay === null || !Number.isFinite(minuteOfDay)) {\n return null;\n }\n return {\n key:\n typeof slot.key === \"string\" && slot.key.trim().length > 0\n ? slot.key\n : `slot-${index + 1}`,\n label:\n typeof slot.label === \"string\" && slot.label.trim().length > 0\n ? slot.label\n : formatMinuteOfDayLabel(minuteOfDay),\n minuteOfDay,\n durationMinutes:\n typeof slot.durationMinutes === \"number\" &&\n Number.isFinite(slot.durationMinutes) &&\n slot.durationMinutes > 0\n ? slot.durationMinutes\n : 45,\n } satisfies LifeOpsDailySlot;\n })\n .filter((entry): entry is LifeOpsDailySlot => entry !== null);\n if (slots.length > 0) {\n return {\n kind: \"times_per_day\",\n slots,\n visibilityLeadMinutes:\n typeof record.visibilityLeadMinutes === \"number\"\n ? record.visibilityLeadMinutes\n : 90,\n visibilityLagMinutes:\n typeof record.visibilityLagMinutes === \"number\"\n ? record.visibilityLagMinutes\n : 180,\n };\n }\n }\n\n const count =\n typeof record.count === \"number\"\n ? record.count\n : typeof record.count === \"string\"\n ? Number(record.count)\n : NaN;\n if (Number.isFinite(count) && count > 0) {\n return {\n kind: \"times_per_day\",\n slots: buildDistributedDailySlots(count),\n visibilityLeadMinutes: 90,\n visibilityLagMinutes: 180,\n };\n }\n }\n\n if (cadenceKind === \"daily\") {\n const windows = normalizeLifeWindows(record.windows ?? record.window);\n if (windows.length > 0) {\n return {\n kind: \"daily\",\n windows,\n };\n }\n return {\n kind: \"daily\",\n windows: [\"morning\"],\n };\n }\n\n return undefined;\n}\n\n/**\n * Convert LLM-extracted params into a typed LifeOpsCadence.\n * Returns null when the LLM output is insufficient to construct a\n * valid cadence, letting the caller fall back to regex-derived values.\n */\nfunction buildCadenceFromLlmParams(\n params: ExtractedTaskParams,\n context?: {\n intent?: string;\n now?: Date;\n timeZone?: string;\n },\n): {\n cadence: LifeOpsCadence;\n windowPolicy?: CreateLifeOpsDefinitionRequest[\"windowPolicy\"];\n} | null {\n const kind = params.cadenceKind;\n if (!kind) return null;\n const effectiveTimeZone = context?.timeZone;\n const timeOfDayMinute =\n typeof params.timeOfDay === \"string\"\n ? parseTimeOfDayToken(params.timeOfDay)\n : null;\n const explicitSlots =\n typeof context?.intent === \"string\"\n ? extractExplicitDailySlots(context.intent)\n : [];\n const slotDuration =\n typeof params.durationMinutes === \"number\" && params.durationMinutes > 0\n ? params.durationMinutes\n : 45;\n\n const windows = (params.windows ?? []).filter(\n (w): w is \"morning\" | \"afternoon\" | \"evening\" | \"night\" =>\n w === \"morning\" || w === \"afternoon\" || w === \"evening\" || w === \"night\",\n );\n const effectiveWindows =\n windows.length > 0\n ? windows\n : timeOfDayMinute !== null\n ? [inferWindowFromMinuteOfDay(timeOfDayMinute)]\n : [\"morning\" as const];\n\n if (kind === \"once\") {\n if (timeOfDayMinute !== null) {\n return {\n cadence: {\n kind: \"once\",\n dueAt: buildOneOffDueAtFromMinuteOfDay({\n minuteOfDay: timeOfDayMinute,\n now: context?.now,\n timeZone: effectiveTimeZone,\n }),\n },\n };\n }\n return { cadence: { kind: \"once\", dueAt: new Date().toISOString() } };\n }\n if (kind === \"daily\") {\n if (explicitSlots.length >= 2) {\n return {\n cadence: {\n kind: \"times_per_day\",\n slots: explicitSlots.map((slot) => ({\n ...slot,\n durationMinutes: slot.durationMinutes,\n })),\n visibilityLeadMinutes: 90,\n visibilityLagMinutes: 180,\n },\n };\n }\n if (timeOfDayMinute !== null) {\n return {\n cadence: {\n kind: \"times_per_day\",\n slots: [buildSingleDailySlot(timeOfDayMinute, slotDuration)],\n visibilityLeadMinutes: 90,\n visibilityLagMinutes: 180,\n },\n };\n }\n if (effectiveWindows.length >= 2) {\n return {\n cadence: {\n kind: \"times_per_day\",\n slots: buildSlotsFromWindows(effectiveWindows),\n visibilityLeadMinutes: 90,\n visibilityLagMinutes: 180,\n },\n };\n }\n return { cadence: { kind: \"daily\", windows: effectiveWindows } };\n }\n if (kind === \"weekly\") {\n const weekdays = params.weekdays;\n if (!weekdays || weekdays.length === 0) return null;\n if (timeOfDayMinute !== null) {\n return {\n cadence: { kind: \"weekly\", weekdays, windows: [\"custom\"] },\n windowPolicy: buildCustomTimeWindowPolicy(\n timeOfDayMinute,\n effectiveTimeZone ?? resolveDefaultTimeZone(),\n ),\n };\n }\n return { cadence: { kind: \"weekly\", weekdays, windows: effectiveWindows } };\n }\n if (kind === \"interval\") {\n const everyMinutes = params.everyMinutes;\n if (!everyMinutes || everyMinutes <= 0) return null;\n return {\n cadence: {\n kind: \"interval\",\n everyMinutes,\n windows: effectiveWindows,\n startMinuteOfDay: timeOfDayMinute ?? undefined,\n durationMinutes:\n typeof params.durationMinutes === \"number\" &&\n params.durationMinutes > 0\n ? params.durationMinutes\n : undefined,\n },\n };\n }\n if (kind === \"times_per_day\") {\n if (explicitSlots.length >= 2) {\n return {\n cadence: {\n kind: \"times_per_day\",\n slots: explicitSlots.map((slot) => ({\n ...slot,\n durationMinutes: slot.durationMinutes,\n })),\n visibilityLeadMinutes: 90,\n visibilityLagMinutes: 180,\n },\n };\n }\n if (timeOfDayMinute !== null) {\n return {\n cadence: {\n kind: \"times_per_day\",\n slots: [buildSingleDailySlot(timeOfDayMinute, slotDuration)],\n visibilityLeadMinutes: 90,\n visibilityLagMinutes: 180,\n },\n };\n }\n const count = params.timesPerDay;\n if (!count || count <= 0) return null;\n return {\n cadence: {\n kind: \"times_per_day\",\n slots: buildDistributedDailySlots(count).map((slot) => ({\n ...slot,\n durationMinutes: slotDuration,\n })),\n visibilityLeadMinutes: 90,\n visibilityLagMinutes: 180,\n },\n };\n }\n return null;\n}\n\nfunction buildCadenceFromUpdateFields(args: {\n currentCadence: LifeOpsCadence;\n currentWindowPolicy: LifeOpsWindowPolicy;\n update: ExtractedUpdateFields;\n timeZone: string;\n}): {\n cadence: LifeOpsCadence;\n windowPolicy?: UpdateLifeOpsDefinitionRequest[\"windowPolicy\"];\n} | null {\n const { currentCadence, currentWindowPolicy, timeZone, update } = args;\n const kind = (update.cadenceKind ??\n currentCadence.kind) as LifeOpsCadence[\"kind\"];\n const requestedWindows = normalizeLifeWindows(update.windows ?? []);\n const timeOfDayMinute =\n typeof update.timeOfDay === \"string\"\n ? parseTimeOfDayToken(update.timeOfDay)\n : null;\n\n if (kind === \"interval\") {\n const everyMinutes =\n update.everyMinutes ??\n (currentCadence.kind === \"interval\" ? currentCadence.everyMinutes : null);\n if (!everyMinutes || everyMinutes <= 0) {\n return null;\n }\n const windows: Array<\"morning\" | \"afternoon\" | \"evening\" | \"night\"> =\n requestedWindows.length > 0\n ? requestedWindows\n : currentCadence.kind === \"interval\" &&\n currentCadence.windows.length > 0\n ? normalizeLifeWindows(currentCadence.windows)\n : timeOfDayMinute !== null\n ? [inferWindowFromMinuteOfDay(timeOfDayMinute)]\n : [\"morning\"];\n return {\n cadence: {\n kind: \"interval\",\n everyMinutes,\n windows,\n startMinuteOfDay:\n timeOfDayMinute ??\n (currentCadence.kind === \"interval\"\n ? currentCadence.startMinuteOfDay\n : undefined),\n maxOccurrencesPerDay:\n currentCadence.kind === \"interval\"\n ? currentCadence.maxOccurrencesPerDay\n : undefined,\n durationMinutes:\n currentCadence.kind === \"interval\"\n ? currentCadence.durationMinutes\n : undefined,\n visibilityLeadMinutes:\n currentCadence.kind === \"interval\"\n ? currentCadence.visibilityLeadMinutes\n : undefined,\n visibilityLagMinutes:\n currentCadence.kind === \"interval\"\n ? currentCadence.visibilityLagMinutes\n : undefined,\n },\n };\n }\n\n if (kind === \"weekly\") {\n const weekdays =\n update.weekdays ??\n (currentCadence.kind === \"weekly\" ? currentCadence.weekdays : null);\n if (!weekdays || weekdays.length === 0) {\n return null;\n }\n if (timeOfDayMinute !== null) {\n return {\n cadence: {\n kind: \"weekly\",\n weekdays,\n windows: [\"custom\"],\n visibilityLeadMinutes:\n currentCadence.kind === \"weekly\"\n ? currentCadence.visibilityLeadMinutes\n : undefined,\n visibilityLagMinutes:\n currentCadence.kind === \"weekly\"\n ? currentCadence.visibilityLagMinutes\n : undefined,\n },\n windowPolicy: buildCustomTimeWindowPolicy(timeOfDayMinute, timeZone),\n };\n }\n return {\n cadence: {\n kind: \"weekly\",\n weekdays,\n windows:\n requestedWindows.length > 0\n ? requestedWindows\n : currentCadence.kind === \"weekly\" &&\n currentCadence.windows.length > 0\n ? currentCadence.windows\n : [\"morning\"],\n visibilityLeadMinutes:\n currentCadence.kind === \"weekly\"\n ? currentCadence.visibilityLeadMinutes\n : undefined,\n visibilityLagMinutes:\n currentCadence.kind === \"weekly\"\n ? currentCadence.visibilityLagMinutes\n : undefined,\n },\n windowPolicy: currentWindowPolicy.windows.some((window) =>\n (requestedWindows.length > 0\n ? requestedWindows\n : [\"morning\" as const]\n ).includes(\n window.name as \"morning\" | \"afternoon\" | \"evening\" | \"night\",\n ),\n )\n ? undefined\n : resolveDefaultWindowPolicy(timeZone),\n };\n }\n\n if (kind === \"daily\") {\n if (timeOfDayMinute !== null) {\n return {\n cadence: {\n kind: \"times_per_day\",\n slots: [buildSingleDailySlot(timeOfDayMinute)],\n visibilityLeadMinutes: 90,\n visibilityLagMinutes: 180,\n },\n };\n }\n return {\n cadence: {\n kind: \"daily\",\n windows:\n requestedWindows.length > 0\n ? requestedWindows\n : currentCadence.kind === \"daily\" &&\n currentCadence.windows.length > 0\n ? currentCadence.windows\n : [\"morning\"],\n visibilityLeadMinutes:\n currentCadence.kind === \"daily\"\n ? currentCadence.visibilityLeadMinutes\n : undefined,\n visibilityLagMinutes:\n currentCadence.kind === \"daily\"\n ? currentCadence.visibilityLagMinutes\n : undefined,\n },\n };\n }\n\n if (kind === \"times_per_day\") {\n if (timeOfDayMinute !== null) {\n return {\n cadence: {\n kind: \"times_per_day\",\n slots: [buildSingleDailySlot(timeOfDayMinute)],\n visibilityLeadMinutes: 90,\n visibilityLagMinutes: 180,\n },\n };\n }\n if (requestedWindows.length > 0) {\n return {\n cadence: {\n kind: \"times_per_day\",\n slots: buildSlotsFromWindows(requestedWindows),\n visibilityLeadMinutes: 90,\n visibilityLagMinutes: 180,\n },\n };\n }\n return currentCadence.kind === \"times_per_day\"\n ? { cadence: currentCadence }\n : null;\n }\n\n return currentCadence.kind === \"once\" ? { cadence: currentCadence } : null;\n}\n\nfunction hasDefinitionUpdateChanges(\n request: UpdateLifeOpsDefinitionRequest,\n): boolean {\n return (\n request.title != null ||\n request.cadence != null ||\n request.priority != null ||\n request.description != null ||\n request.windowPolicy != null ||\n request.reminderPlan != null\n );\n}\n\nfunction buildDefaultReminderPlan(\n label: string,\n): NonNullable<CreateLifeOpsDefinitionRequest[\"reminderPlan\"]> {\n return {\n steps: [{ channel: \"in_app\", offsetMinutes: 0, label }],\n };\n}\n\nfunction scoreDefinitionTitleQuality(value: string | null | undefined): number {\n const normalized = normalizeTitle(value ?? \"\");\n if (!normalized) {\n return Number.NEGATIVE_INFINITY;\n }\n\n let score = normalized.split(/\\s+/).filter(Boolean).length;\n if (/\\b\\d+\\b/.test(normalized)) {\n score += 6;\n }\n if (/[+&]/.test(value ?? \"\") || /\\band\\b/.test(normalized)) {\n score += 4;\n }\n if (\n /^(?:do|work out|workout|habit|routine|task|todo|reminder|alarm)\\b/.test(\n normalized,\n )\n ) {\n score -= 5;\n }\n if (GENERIC_DERIVED_TITLE_RE.test(normalized)) {\n score -= 6;\n }\n return score;\n}\n\nfunction shouldAdoptPlannerTitle(args: {\n currentTitle: string | null | undefined;\n plannerTitle: string | null | undefined;\n}): boolean {\n const plannerTitle = args.plannerTitle?.trim();\n if (!plannerTitle) {\n return false;\n }\n const currentTitle = args.currentTitle?.trim();\n if (!currentTitle) {\n return true;\n }\n if (normalizeTitle(currentTitle) === normalizeTitle(plannerTitle)) {\n return false;\n }\n return (\n scoreDefinitionTitleQuality(plannerTitle) >\n scoreDefinitionTitleQuality(currentTitle)\n );\n}\n\nfunction shouldAdoptPlannerCadence(args: {\n currentCadence: LifeOpsCadence | undefined;\n plannerCadence: LifeOpsCadence;\n}): boolean {\n const { currentCadence, plannerCadence } = args;\n if (!currentCadence) {\n return true;\n }\n if (currentCadence.kind === \"times_per_day\") {\n return (\n (plannerCadence.kind === \"times_per_day\" &&\n plannerCadence.slots.length >= currentCadence.slots.length) ||\n (plannerCadence.kind === \"once\" && currentCadence.slots.length === 1)\n );\n }\n if (currentCadence.kind === \"weekly\") {\n return (\n plannerCadence.kind === \"weekly\" &&\n plannerCadence.weekdays.length >= currentCadence.weekdays.length &&\n (currentCadence.windows.includes(\"custom\")\n ? plannerCadence.windows.includes(\"custom\")\n : plannerCadence.windows.length >= currentCadence.windows.length)\n );\n }\n if (currentCadence.kind === \"interval\") {\n return plannerCadence.kind === \"interval\";\n }\n if (currentCadence.kind === \"once\") {\n return plannerCadence.kind === \"once\";\n }\n if (currentCadence.kind === \"daily\") {\n return (\n plannerCadence.kind === \"times_per_day\" ||\n (plannerCadence.kind === \"daily\" &&\n plannerCadence.windows.length >= currentCadence.windows.length)\n );\n }\n return true;\n}\n\nfunction shouldRequireLifeCreateConfirmation(args: {\n confirmed: boolean;\n messageSource: string | undefined;\n requestKind?: NativeAppleReminderLikeKind | null;\n cadence?: LifeOpsCadence;\n}): boolean {\n if (args.messageSource === \"autonomy\") {\n return false;\n }\n if (args.requestKind && args.cadence?.kind === \"once\") {\n return false;\n }\n return !args.confirmed;\n}\n\nfunction formatGoalExperienceLoopSummary(\n experienceLoop:\n | {\n summary?: string | null;\n similarGoals?: Array<{ title?: string }>;\n suggestedCarryForward?: Array<{ title?: string }>;\n }\n | null\n | undefined,\n): string | null {\n if (!experienceLoop?.summary) {\n return null;\n }\n const similarGoalTitle = experienceLoop.similarGoals?.[0]?.title?.trim();\n const carryForwardTitle =\n experienceLoop.suggestedCarryForward?.[0]?.title?.trim();\n const parts = [experienceLoop.summary.trim()];\n if (similarGoalTitle) {\n parts.push(`Closest match: \"${similarGoalTitle}\".`);\n }\n if (carryForwardTitle) {\n parts.push(`Carry forward \"${carryForwardTitle}\" if it still fits.`);\n }\n return parts.join(\" \");\n}\n\nfunction formatWeeklyGoalReview(args: {\n summary: {\n totalGoals: number;\n onTrackCount: number;\n atRiskCount: number;\n needsAttentionCount: number;\n };\n onTrack: Array<{ goal: { title: string } }>;\n atRisk: Array<{ goal: { title: string } }>;\n needsAttention: Array<{ goal: { title: string } }>;\n}): string {\n const parts = [\n `Weekly goal review: ${args.summary.totalGoals} active ${args.summary.totalGoals === 1 ? \"goal\" : \"goals\"}, ${args.summary.onTrackCount} on track, ${args.summary.atRiskCount} at risk, ${args.summary.needsAttentionCount} needing attention.`,\n ];\n if (args.atRisk.length > 0) {\n parts.push(\n `Drifting: ${args.atRisk\n .slice(0, 3)\n .map((review) => review.goal.title)\n .join(\", \")}.`,\n );\n }\n if (args.needsAttention.length > 0) {\n parts.push(\n `Needs attention: ${args.needsAttention\n .slice(0, 3)\n .map((review) => review.goal.title)\n .join(\", \")}.`,\n );\n }\n if (args.onTrack.length > 0) {\n parts.push(\n `On track: ${args.onTrack\n .slice(0, 3)\n .map((review) => review.goal.title)\n .join(\", \")}.`,\n );\n }\n return parts.join(\" \");\n}\n\n// ── Main action ───────────────────────────────────────\n\n// Owner-operation actions belong to the home chat (the non-page-scoped\n// assistant surface). On any page-* scope the action set is scoped to that\n// surface (page-automations → WORKFLOW, page-browser → browser actions, etc.).\n// When owner-operation actions stay eligible on those scopes, their long\n// descriptions contaminate the ACTION_PLANNER candidate list, driving the LLM\n// to mimic the life-param-extractor structured schema and producing envelopes\n// the planner cannot read.\nasync function isForeignPageScope(\n runtime: IAgentRuntime,\n message: Memory,\n): Promise<boolean> {\n const room = await runtime.getRoom(message.roomId);\n const metadata = extractConversationMetadataFromRoom(room);\n return isPageScopedConversationMetadata(metadata);\n}\n\n// Metadata reused by the owner-* umbrella actions in owner-surfaces.ts.\n// The old umbrella is no longer planner-visible — owner-surfaces publishes the\n// individual reminder/alarm/goal/todo/routine umbrellas that delegate into\n// `runLifeOperationHandler` below.\nexport const OWNER_OPERATION_TAGS: string[] = [\n \"domain:reminders\",\n \"capability:read\",\n \"capability:write\",\n \"capability:update\",\n \"capability:delete\",\n \"capability:schedule\",\n \"surface:internal\",\n];\n\nexport const OWNER_OPERATION_CONTEXTS: AgentContext[] = [\n \"general\",\n \"tasks\",\n \"todos\",\n \"calendar\",\n \"health\",\n];\n\nexport const OWNER_OPERATION_ROLE_GATE = { minRole: \"OWNER\" } as const;\nexport const OWNER_OPERATION_SUPPRESS_POST_ACTION_CONTINUATION = true;\n\nexport const OWNER_OPERATION_VALIDATE = async (\n runtime: IAgentRuntime,\n message: Memory,\n): Promise<boolean> => {\n if (await isForeignPageScope(runtime, message)) {\n return false;\n }\n return true;\n};\n\nfunction ownerSurfaceActionNameFromOptions(\n options: HandlerOptions | undefined,\n): string {\n const raw = (options as HandlerOptions | undefined)?.parameters as\n | LifeParams\n | undefined;\n return typeof raw?.ownerSurface === \"string\" && raw.ownerSurface.length > 0\n ? raw.ownerSurface\n : \"OWNER_TODOS\";\n}\n\nexport async function runLifeOperationHandler(\n runtime: IAgentRuntime,\n message: Memory,\n state: State | undefined,\n options: HandlerOptions | undefined,\n _callback?: HandlerCallback,\n): Promise<ActionResult> {\n const ownerSurfaceActionName = ownerSurfaceActionNameFromOptions(options);\n // Defense-in-depth: validate() excludes owner-operation candidates on\n // foreign page-* scopes, and this handler keeps direct tool execution a\n // no-op if a stale or malformed plan still reaches it.\n if (await isForeignPageScope(runtime, message)) {\n return {\n success: false,\n text: \"\",\n data: {\n actionName: ownerSurfaceActionName,\n reason: \"foreign_page_scope\",\n },\n };\n }\n\n const rawParams = (options as HandlerOptions | undefined)?.parameters as\n | LifeParams\n | undefined;\n const params = rawParams ?? ({} as LifeParams);\n const currentText = normalizeLifeInputText(messageText(message));\n const details = params.details;\n const deferredDraft = latestDeferredLifeDraft(state);\n const turnsSinceDraft =\n deferredDraft != null\n ? (countTurnsSinceLatestDeferredLifeDraft(state) ?? 0) + 1\n : undefined;\n const deferredDraftFollowupMode = deferredDraft\n ? await extractDeferredLifeDraftFollowupWithLlm({\n runtime,\n message,\n state,\n currentText,\n draft: deferredDraft,\n })\n : null;\n const draftExpiryReason = deferredLifeDraftExpiryReason({\n draft: deferredDraft,\n turnsSinceDraft,\n });\n if (draftExpiryReason && deferredDraftFollowupMode === \"confirm\") {\n const fallback =\n \"That LifeOps draft expired. Please restate it and I'll preview it again.\";\n return {\n success: false,\n text: await renderLifeActionReply({\n runtime,\n message,\n state,\n intent: currentText,\n scenario: \"reply_only\",\n fallback,\n context: {\n reason: \"draft_expired\",\n },\n }),\n };\n }\n if (deferredDraftFollowupMode === \"cancel\") {\n const fallback = \"Okay, I won't save it yet.\";\n return {\n success: true,\n text: await renderLifeActionReply({\n runtime,\n message,\n state,\n intent: currentText,\n scenario: \"reply_only\",\n fallback,\n context: {\n reason: \"draft_cancelled\",\n draft: deferredDraft\n ? {\n operation: deferredDraft.operation,\n title: deferredDraft.request.title,\n }\n : null,\n },\n }),\n data: {\n actionName: ownerSurfaceActionName,\n noop: true,\n },\n };\n }\n const explicitAction = normalizeExplicitLifeAction(params.action);\n if (explicitAction === \"phone\") {\n return {\n success: false,\n text: \"I need the phone number before I can save text reminders.\",\n data: {\n actionName: ownerSurfaceActionName,\n missingField: \"phone_number\",\n },\n };\n }\n const explicitSubaction =\n typeof params.subaction === \"string\" &&\n Object.hasOwn(SUBACTIONS, params.subaction)\n ? (params.subaction as LifeOwnedOperation)\n : explicitAction?.operation;\n const deferredDraftReuseMode = resolveDeferredLifeDraftReuseMode({\n details,\n draft: deferredDraft,\n explicitOperation: explicitSubaction,\n llmMode: deferredDraftFollowupMode,\n turnsSinceDraft,\n });\n const reuseDeferredDraft = deferredDraftReuseMode !== null;\n const intent = reuseDeferredDraft\n ? deferredDraftReuseMode === \"confirm\"\n ? normalizeLifeInputText(deferredDraft?.intent ?? \"\")\n : normalizeLifeInputText(params.intent?.trim() ?? currentText)\n : normalizeLifeInputText(params.intent?.trim() ?? currentText);\n if (!intent) {\n const fallback = \"Tell me what you want me to do.\";\n return {\n success: false,\n text: await renderLifeActionReply({\n runtime,\n message,\n state,\n intent: currentText,\n scenario: \"reply_only\",\n fallback,\n context: {\n reason: \"missing_intent\",\n },\n }),\n };\n }\n\n // Pre-routing: pick the subaction. When reusing a deferred draft we\n // inherit its operation. When the planner supplied an explicit subaction\n // we trust it. Otherwise dispatch through resolveActionArgs (the\n // shared LLM pre-routing substrate). The text extractor\n // stays available as a fallback for richer \"missing field\" diagnostics.\n const operationPlan: ResolvedLifeOperationPlan =\n reuseDeferredDraft && deferredDraft\n ? {\n confidence: 1,\n missing: [] as ExtractedLifeMissingField[],\n operation: \"create\",\n kind:\n deferredDraft.operation === \"create_goal\" ? \"goal\" : \"definition\",\n shouldAct: true,\n }\n : explicitAction\n ? {\n confidence: 1,\n missing: [],\n operation: explicitAction.operation,\n kind: explicitAction.kind,\n shouldAct: true,\n }\n : await routeLifeSubaction({\n runtime,\n message,\n state,\n options,\n intent,\n explicitSubaction,\n });\n const explicitKind: LifeKind | undefined =\n params.kind === \"definition\" || params.kind === \"goal\"\n ? params.kind\n : undefined;\n const resolvedKind: LifeKind | undefined = operationPlan.kind ?? explicitKind;\n const forceCreateExecution = shouldForceLifeCreateExecution({\n intent,\n missing: operationPlan.missing,\n operation: operationPlan.operation,\n kind: resolvedKind,\n details,\n title: params.title,\n });\n if (!operationPlan.shouldAct && !forceCreateExecution) {\n const fallback = buildLifeClarificationFallback({\n missing: operationPlan.missing,\n operation: operationPlan.operation,\n kind: resolvedKind,\n });\n return {\n success: true,\n text: await renderLifeActionReply({\n runtime,\n message,\n state,\n intent,\n scenario:\n operationPlan.operation === \"create\" && resolvedKind === \"goal\"\n ? \"clarify_create_goal\"\n : \"clarify_create_definition\",\n fallback,\n context: {\n missing: operationPlan.missing,\n operation: operationPlan.operation,\n },\n }),\n data: {\n actionName: ownerSurfaceActionName,\n noop: true,\n suggestedOperation: operationPlan.operation,\n },\n };\n }\n const operation: LifeOwnedOperation | null = forceCreateExecution\n ? \"create\"\n : isLifeOwnedOperation(operationPlan.operation)\n ? operationPlan.operation\n : null;\n const queryOperation = forceCreateExecution\n ? null\n : !isLifeOwnedOperation(operationPlan.operation)\n ? operationPlan.operation\n : null;\n const service = new LifeOpsService(runtime);\n if (queryOperation === \"query_calendar_today\") {\n return {\n success: false,\n text: \"Calendar access is not available. Grant Apple Calendar access or connect Google Calendar to use calendar actions.\",\n data: {\n actionName: ownerSurfaceActionName,\n operation: queryOperation,\n },\n };\n }\n if (queryOperation === \"query_calendar_next\") {\n return {\n success: false,\n text: \"Calendar access is not available. Grant Apple Calendar access or connect Google Calendar to use calendar actions.\",\n data: {\n actionName: ownerSurfaceActionName,\n operation: queryOperation,\n },\n };\n }\n if (queryOperation === \"query_email\") {\n return {\n success: false,\n text: \"Gmail is not connected. Connect Google in LifeOps settings to use Gmail actions.\",\n data: {\n actionName: ownerSurfaceActionName,\n operation: queryOperation,\n },\n };\n }\n if (queryOperation === \"query_overview\") {\n const overview = await service.getOverview();\n const userQuery = messageText(message) || intent || \"overview\";\n const fallback = formatOverviewForQuery(overview, userQuery);\n return {\n success: true,\n text: await renderLifeActionReply({\n runtime,\n message,\n state,\n intent: userQuery,\n scenario: \"overview\",\n fallback,\n context: {\n summary: overview.owner.summary,\n occurrenceTitles: overview.owner.occurrences\n .slice(0, 6)\n .map((occurrence) => occurrence.title),\n goalTitles: overview.owner.goals\n .slice(0, 3)\n .map((goal) => goal.title),\n },\n }),\n data: toActionData(overview),\n };\n }\n // Internal handler dispatch key (definition vs goal split lives here).\n // For create/update/delete, infer kind from explicit param, plan, draft, or\n // intent; for occurrence-level verbs the kind is irrelevant.\n const kind: LifeKind =\n resolvedKind ??\n (operation === \"create\" || operation === \"update\" || operation === \"delete\"\n ? inferLifeKindFromIntent(intent)\n : \"definition\");\n const internalOp: InternalLifeOp | null = operation\n ? toInternalLifeOp(operation, kind)\n : null;\n if (!operation) {\n const fallback = \"Tell me what LifeOps action you want me to take.\";\n return {\n success: true,\n text: await renderLifeActionReply({\n runtime,\n message,\n state,\n intent,\n scenario: \"reply_only\",\n fallback,\n context: {\n reason: \"missing_operation_after_extraction\",\n },\n }),\n data: {\n actionName: ownerSurfaceActionName,\n noop: true,\n },\n };\n }\n const domain = detailString(details, \"domain\") as LifeOpsDomain | undefined;\n const ownership = requestedOwnership(domain);\n const targetName = params.target ?? params.title;\n const createConfirmed =\n deferredDraftReuseMode === \"confirm\" ||\n detailBoolean(details, \"confirmed\") === true;\n\n try {\n const createDefinition = async () => {\n const deferredDefinitionDraft =\n reuseDeferredDraft && deferredDraft?.operation === \"create_definition\"\n ? deferredDraft\n : null;\n const editingDeferredDefinitionDraft =\n deferredDraftReuseMode === \"edit\" &&\n deferredDefinitionDraft?.operation === \"create_definition\";\n const explicitCadenceDetail = normalizeCadenceDetail(\n detailObject(details, \"cadence\"),\n );\n const hasCompleteNativeDefinitionCreatePlan = Boolean(\n params.title && explicitCadenceDetail && detailString(details, \"kind\"),\n );\n const fallbackTitle = deferredDefinitionDraft?.request.title ?? null;\n let title: string | null = editingDeferredDefinitionDraft\n ? (params.title ?? fallbackTitle)\n : (fallbackTitle ?? params.title ?? null);\n const fallbackCadence = deferredDefinitionDraft?.request.cadence;\n let cadence: LifeOpsCadence | undefined = editingDeferredDefinitionDraft\n ? (explicitCadenceDetail ?? fallbackCadence ?? undefined)\n : (fallbackCadence ?? explicitCadenceDetail ?? undefined);\n let windowPolicy:\n | CreateLifeOpsDefinitionRequest[\"windowPolicy\"]\n | undefined = editingDeferredDefinitionDraft\n ? // detailObject returns Record<string,unknown>; cast to the policy\n // type at this validated boundary.\n ((detailObject(details, \"windowPolicy\") as\n | CreateLifeOpsDefinitionRequest[\"windowPolicy\"]\n | undefined) ?? deferredDefinitionDraft.request.windowPolicy)\n : (deferredDefinitionDraft?.request.windowPolicy ??\n (detailObject(details, \"windowPolicy\") as\n | CreateLifeOpsDefinitionRequest[\"windowPolicy\"]\n | undefined));\n const explicitPriority = detailNumber(details, \"priority\");\n const explicitDescription = detailString(details, \"description\");\n const explicitMetadata = detailObject(details, \"metadata\") as\n | Record<string, unknown>\n | undefined;\n\n // Track whether cadence/title came from explicit high-confidence\n // sources so the planner only fills genuine gaps.\n const hadExplicitCadence = Boolean(\n (editingDeferredDefinitionDraft\n ? (explicitCadenceDetail ?? deferredDefinitionDraft.request.cadence)\n : deferredDefinitionDraft?.request.cadence) ?? explicitCadenceDetail,\n );\n const hadExplicitTitle = Boolean(\n (editingDeferredDefinitionDraft\n ? params.title\n : deferredDefinitionDraft?.request.title) ?? params.title,\n );\n\n // Parameter enhancement fills gaps when structured planner input is partial.\n // Skip when options.parameters already contain the complete\n // definition-create shape, or when reusing a confirmed deferred draft.\n let llmPlan: Awaited<\n ReturnType<typeof extractTaskCreatePlanWithLlm>\n > | null = null;\n let llmDescription: string | undefined;\n let llmPriority: number | undefined;\n let llmRequestKind: NativeAppleReminderLikeKind | null = null;\n if (\n (!deferredDefinitionDraft || editingDeferredDefinitionDraft) &&\n !hasCompleteNativeDefinitionCreatePlan\n ) {\n llmPlan = await extractTaskCreatePlanWithLlm({\n runtime,\n intent,\n state: state ?? undefined,\n message: message,\n });\n const shouldHonorPlannerResponse =\n llmPlan.mode === \"respond\" &&\n Boolean(llmPlan.response) &&\n !editingDeferredDefinitionDraft &&\n !params.title &&\n !explicitCadenceDetail &&\n !detailString(details, \"description\") &&\n !detailString(details, \"goalId\") &&\n !detailString(details, \"goalTitle\") &&\n !detailString(details, \"kind\");\n if (shouldHonorPlannerResponse && llmPlan.response) {\n return {\n success: true as const,\n text: llmPlan.response,\n };\n }\n if (llmPlan) {\n llmRequestKind = llmPlan.requestKind;\n if (\n !hadExplicitTitle &&\n shouldAdoptPlannerTitle({\n currentTitle: title,\n plannerTitle: llmPlan.title,\n })\n ) {\n title = llmPlan.title;\n }\n if (\n (editingDeferredDefinitionDraft || !hadExplicitCadence) &&\n llmPlan.cadenceKind\n ) {\n const llmCadenceTimeZone = normalizeLifeTimeZoneToken(\n detailString(details, \"timeZone\") ??\n llmPlan.timeZone ??\n deferredDefinitionDraft?.request.timezone ??\n windowPolicy?.timezone,\n );\n const llmCadence = buildCadenceFromLlmParams(llmPlan, {\n intent,\n timeZone: llmCadenceTimeZone ?? undefined,\n });\n if (\n llmCadence &&\n shouldAdoptPlannerCadence({\n currentCadence: cadence,\n plannerCadence: llmCadence.cadence,\n })\n ) {\n cadence = llmCadence.cadence;\n windowPolicy = llmCadence.windowPolicy ?? windowPolicy;\n }\n }\n if (!explicitDescription && llmPlan.description) {\n llmDescription = llmPlan.description;\n }\n if (explicitPriority === undefined && llmPlan.priority) {\n llmPriority = llmPlan.priority;\n }\n }\n }\n const resolvedTimeZone = normalizeLifeTimeZoneToken(\n detailString(details, \"timeZone\") ??\n llmPlan?.timeZone ??\n deferredDefinitionDraft?.request.timezone ??\n windowPolicy?.timezone,\n );\n const timedRequestKind = llmRequestKind;\n const nativeAppleMetadata =\n timedRequestKind && cadence?.kind === \"once\"\n ? buildNativeAppleReminderMetadata({\n kind: timedRequestKind,\n source: \"llm\",\n })\n : undefined;\n const definitionMetadata = editingDeferredDefinitionDraft\n ? mergeMetadataRecords(\n deferredDefinitionDraft.request.metadata,\n mergeMetadataRecords(explicitMetadata, nativeAppleMetadata),\n )\n : (deferredDefinitionDraft?.request.metadata ??\n mergeMetadataRecords(explicitMetadata, nativeAppleMetadata));\n\n if (!title) {\n const fallback = \"What should I call it?\";\n return {\n success: false as const,\n text: await renderLifeActionReply({\n runtime,\n message,\n state,\n intent,\n scenario: \"clarify_create_definition\",\n fallback,\n context: {\n missing: [\"title\"],\n operation: \"create_definition\",\n },\n }),\n // Asking the owner to fill in a missing field — selection +\n // execution were both correct, terminal state is \"needs human\n // input\". Flag so the native planner chain breaks and the spy\n // scores this as completed.\n values: {\n success: false,\n error: \"MISSING_DEFINITION_FIELD\",\n missingField: \"title\",\n requiresConfirmation: true,\n },\n data: {\n actionName: ownerSurfaceActionName,\n missingField: \"title\",\n requiresConfirmation: true,\n },\n };\n }\n if (!cadence) {\n const fallback = \"When should it happen?\";\n return {\n success: false as const,\n text: await renderLifeActionReply({\n runtime,\n message,\n state,\n intent,\n scenario: \"clarify_create_definition\",\n fallback,\n context: {\n missing: [\"schedule\"],\n operation: \"create_definition\",\n },\n }),\n values: {\n success: false,\n error: \"MISSING_DEFINITION_FIELD\",\n missingField: \"schedule\",\n requiresConfirmation: true,\n },\n data: {\n actionName: ownerSurfaceActionName,\n missingField: \"schedule\",\n requiresConfirmation: true,\n },\n };\n }\n const kind =\n (editingDeferredDefinitionDraft\n ? (detailString(details, \"kind\") as\n | CreateLifeOpsDefinitionRequest[\"kind\"]\n | undefined)\n : deferredDefinitionDraft?.request.kind) ??\n (detailString(details, \"kind\") as\n | CreateLifeOpsDefinitionRequest[\"kind\"]\n | undefined) ??\n \"habit\";\n const definitionDraft: DeferredLifeDefinitionDraft = {\n intent,\n operation: \"create_definition\",\n createdAt: editingDeferredDefinitionDraft\n ? Date.now()\n : (deferredDefinitionDraft?.createdAt ?? Date.now()),\n request: {\n cadence,\n description:\n explicitDescription ??\n llmDescription ??\n (editingDeferredDefinitionDraft\n ? deferredDefinitionDraft.request.description\n : undefined),\n goalRef:\n detailString(details, \"goalId\") ??\n detailString(details, \"goalTitle\") ??\n deferredDefinitionDraft?.request.goalRef ??\n undefined,\n kind,\n priority:\n explicitPriority ??\n llmPriority ??\n deferredDefinitionDraft?.request.priority,\n progressionRule:\n (detailObject(\n details,\n \"progressionRule\",\n ) as CreateLifeOpsDefinitionRequest[\"progressionRule\"]) ??\n deferredDefinitionDraft?.request.progressionRule,\n reminderPlan:\n (detailObject(details, \"reminderPlan\") as\n | CreateLifeOpsDefinitionRequest[\"reminderPlan\"]\n | undefined) ??\n deferredDefinitionDraft?.request.reminderPlan ??\n buildDefaultReminderPlan(`${title} reminder`),\n timezone:\n normalizeLifeTimeZoneToken(llmPlan?.timeZone) ??\n normalizeLifeTimeZoneToken(\n resolvedTimeZone ?? deferredDefinitionDraft?.request.timezone,\n ) ??\n resolvedTimeZone ??\n deferredDefinitionDraft?.request.timezone,\n title,\n metadata: definitionMetadata,\n windowPolicy,\n // detailObject returns Record<string,unknown>; cast at validated boundary.\n websiteAccess:\n (detailObject(details, \"websiteAccess\") as\n | CreateLifeOpsDefinitionRequest[\"websiteAccess\"]\n | undefined) ?? deferredDefinitionDraft?.request.websiteAccess,\n },\n };\n if (\n shouldRequireLifeCreateConfirmation({\n confirmed: createConfirmed,\n messageSource:\n typeof message.content.source === \"string\"\n ? message.content.source\n : undefined,\n requestKind: timedRequestKind,\n cadence: definitionDraft.request.cadence,\n })\n ) {\n const fallback = `I can save this as a ${definitionDraft.request.kind} named \"${definitionDraft.request.title}\" that happens ${summarizeCadence(definitionDraft.request.cadence)}. Confirm and I'll save it, or tell me what to change.`;\n return {\n success: true as const,\n text: await renderLifeActionReply({\n runtime,\n message,\n state,\n intent,\n scenario: \"preview_definition\",\n fallback,\n context: {\n draft: definitionDraft.request,\n requestKind: timedRequestKind,\n },\n }),\n data: {\n actionName: ownerSurfaceActionName,\n deferred: true,\n lifeDraft: definitionDraft,\n preview: {\n cadence: definitionDraft.request.cadence,\n kind: definitionDraft.request.kind,\n title: definitionDraft.request.title,\n },\n },\n };\n }\n const resolvedGoal = definitionDraft.request.goalRef\n ? await resolveGoal(service, definitionDraft.request.goalRef, domain)\n : null;\n\n const created = await service.createDefinition({\n ownership,\n kind: definitionDraft.request.kind,\n title: definitionDraft.request.title,\n description: definitionDraft.request.description,\n originalIntent: definitionDraft.intent || definitionDraft.request.title,\n cadence: definitionDraft.request.cadence,\n timezone:\n normalizeLifeTimeZoneToken(definitionDraft.request.timezone) ??\n definitionDraft.request.timezone,\n priority: definitionDraft.request.priority,\n windowPolicy: definitionDraft.request.windowPolicy,\n progressionRule: definitionDraft.request.progressionRule,\n reminderPlan: definitionDraft.request.reminderPlan,\n metadata: definitionDraft.request.metadata,\n websiteAccess: definitionDraft.request.websiteAccess,\n goalId: resolvedGoal?.goal.id ?? null,\n source: \"chat\",\n });\n const fallback = `Saved \"${created.definition.title}\" as ${summarizeCadence(created.definition.cadence)}.`;\n return {\n success: true as const,\n text: await renderLifeActionReply({\n runtime,\n message,\n state,\n intent,\n scenario: \"saved_definition\",\n fallback,\n context: {\n created: {\n title: created.definition.title,\n cadence: created.definition.cadence,\n },\n requestKind: timedRequestKind,\n },\n }),\n data: toActionData(created),\n };\n };\n\n // ── Mutations ───────────────────────────────────\n\n if (internalOp === \"create_definition\") {\n return await createDefinition();\n }\n\n if (internalOp === \"create_goal\") {\n const deferredGoalDraft =\n reuseDeferredDraft && deferredDraft?.operation === \"create_goal\"\n ? deferredDraft\n : null;\n const editingDeferredGoalDraft =\n deferredDraftReuseMode === \"edit\" &&\n deferredGoalDraft?.operation === \"create_goal\";\n const explicitDescription = detailString(details, \"description\");\n const explicitCadence = normalizeCadenceDetail(\n detailObject(details, \"cadence\"),\n ) as CreateLifeOpsGoalRequest[\"cadence\"];\n const explicitSuccessCriteria = detailObject(\n details,\n \"successCriteria\",\n ) as CreateLifeOpsGoalRequest[\"successCriteria\"] | undefined;\n const explicitSupportStrategy = detailObject(\n details,\n \"supportStrategy\",\n ) as CreateLifeOpsGoalRequest[\"supportStrategy\"] | undefined;\n const explicitMetadata = detailObject(details, \"metadata\") as\n | CreateLifeOpsGoalRequest[\"metadata\"]\n | undefined;\n let title: string | null = editingDeferredGoalDraft\n ? (params.title ?? deferredGoalDraft.request.title)\n : (deferredGoalDraft?.request.title ?? params.title ?? null);\n let description: string | undefined = editingDeferredGoalDraft\n ? (explicitDescription ?? deferredGoalDraft.request.description)\n : (deferredGoalDraft?.request.description ?? explicitDescription);\n let cadence = editingDeferredGoalDraft\n ? (explicitCadence ?? deferredGoalDraft.request.cadence)\n : (deferredGoalDraft?.request.cadence ?? explicitCadence);\n let successCriteria = editingDeferredGoalDraft\n ? (explicitSuccessCriteria ?? deferredGoalDraft.request.successCriteria)\n : (deferredGoalDraft?.request.successCriteria ??\n explicitSuccessCriteria);\n let supportStrategy = editingDeferredGoalDraft\n ? (explicitSupportStrategy ?? deferredGoalDraft.request.supportStrategy)\n : (deferredGoalDraft?.request.supportStrategy ??\n explicitSupportStrategy);\n let goalMetadata: CreateLifeOpsGoalRequest[\"metadata\"] | undefined =\n editingDeferredGoalDraft\n ? (explicitMetadata ?? deferredGoalDraft.request.metadata)\n : (deferredGoalDraft?.request.metadata ?? explicitMetadata);\n let evaluationSummary: string | null = null;\n\n const hasExplicitGroundedGoal =\n Boolean(title) &&\n (createConfirmed ||\n (Boolean(successCriteria) && Boolean(supportStrategy)));\n\n if (\n (!deferredGoalDraft || editingDeferredGoalDraft) &&\n !hasExplicitGroundedGoal\n ) {\n const llmPlan = await extractGoalCreatePlanWithLlm({\n runtime,\n intent,\n state: state ?? undefined,\n message: message,\n });\n if (!title && llmPlan.title) {\n title = llmPlan.title;\n }\n if (!description && llmPlan.description) {\n description = llmPlan.description;\n }\n if (!cadence && llmPlan.cadence) {\n cadence = llmPlan.cadence;\n }\n if (!successCriteria && llmPlan.successCriteria) {\n successCriteria = llmPlan.successCriteria;\n }\n if (!supportStrategy && llmPlan.supportStrategy) {\n supportStrategy = llmPlan.supportStrategy;\n }\n evaluationSummary = llmPlan.evaluationSummary;\n if (\n llmPlan.groundingState === \"grounded\" &&\n llmPlan.successCriteria &&\n title\n ) {\n goalMetadata = mergeGoalMetadataWithGrounding({\n metadata: {\n ...goalMetadata,\n source: \"chat\",\n originalIntent: intent,\n },\n nowIso: new Date().toISOString(),\n plan: llmPlan,\n });\n }\n if (\n llmPlan.groundingState !== \"grounded\" ||\n !title ||\n !successCriteria ||\n !supportStrategy\n ) {\n // A clarification request is a successful outcome from the\n // agent's point of view — the agent chose to ask instead of\n // invent an ungrounded goal. Callers rely on `success: true +\n // data.noop: true` to distinguish a deliberate clarify from a\n // handler error.\n return {\n success: true,\n text:\n llmPlan.response ??\n \"What would count as success for that goal, and over what time window?\",\n values: {\n success: true,\n error: \"NOOP_GOAL_UNGROUNDED\",\n noop: true,\n suggestedOperation: \"create_goal\",\n },\n data: {\n actionName: ownerSurfaceActionName,\n noop: true,\n error: \"NOOP_GOAL_UNGROUNDED\",\n suggestedOperation: \"create_goal\",\n },\n };\n }\n }\n\n if (!title)\n return {\n success: false,\n text: await renderLifeActionReply({\n runtime,\n message,\n state,\n intent,\n scenario: \"clarify_create_goal\",\n fallback: \"What are you trying to achieve?\",\n context: {\n missing: [\"title\"],\n operation: \"create_goal\",\n },\n }),\n };\n const goalDraft: DeferredLifeGoalDraft = deferredGoalDraft ?? {\n intent,\n operation: \"create_goal\",\n createdAt: Date.now(),\n request: {\n cadence,\n description,\n metadata: goalMetadata,\n successCriteria,\n supportStrategy,\n title,\n },\n };\n const experienceLoop = await service.buildGoalExperienceLoop({\n title: goalDraft.request.title,\n description: goalDraft.request.description,\n successCriteria:\n (goalDraft.request.successCriteria as\n | Record<string, unknown>\n | undefined) ?? null,\n });\n if (\n shouldRequireLifeCreateConfirmation({\n confirmed: createConfirmed,\n messageSource:\n typeof message.content.source === \"string\"\n ? message.content.source\n : undefined,\n })\n ) {\n const fallbackParts = [\n evaluationSummary\n ? `I can save \"${goalDraft.request.title}\" as a goal. Success looks like this: ${evaluationSummary} Confirm and I'll save it, or tell me what to change.`\n : `I can save this goal as \"${goalDraft.request.title}\". Confirm and I'll save it, or tell me what to change.`,\n ];\n const experienceSummary =\n formatGoalExperienceLoopSummary(experienceLoop);\n if (experienceSummary) {\n fallbackParts.push(experienceSummary);\n }\n return {\n success: true,\n text: await renderLifeActionReply({\n runtime,\n message,\n state,\n intent,\n scenario: \"preview_goal\",\n fallback: fallbackParts.join(\" \"),\n context: {\n draft: goalDraft.request,\n groundingSummary: evaluationSummary,\n experienceLoop,\n },\n }),\n data: {\n actionName: ownerSurfaceActionName,\n deferred: true,\n lifeDraft: goalDraft,\n experienceLoop,\n preview: {\n title: goalDraft.request.title,\n },\n },\n };\n }\n const created = await service.createGoal({\n ownership,\n title: goalDraft.request.title,\n description: goalDraft.request.description,\n cadence: goalDraft.request.cadence,\n supportStrategy: goalDraft.request.supportStrategy,\n successCriteria: goalDraft.request.successCriteria,\n metadata: {\n ...goalDraft.request.metadata,\n source: \"chat\",\n originalIntent: goalDraft.intent || goalDraft.request.title,\n },\n });\n const createdExperienceLoop = await service.buildGoalExperienceLoop({\n goalId: created.goal.id,\n title: created.goal.title,\n description: created.goal.description,\n successCriteria:\n (created.goal.successCriteria as\n | Record<string, unknown>\n | undefined) ?? null,\n });\n const experienceSummary = formatGoalExperienceLoopSummary(\n createdExperienceLoop,\n );\n const fallback = experienceSummary\n ? `Saved goal \"${created.goal.title}\". ${experienceSummary}`\n : `Saved goal \"${created.goal.title}\".`;\n return {\n success: true,\n text: await renderLifeActionReply({\n runtime,\n message,\n state,\n intent,\n scenario: \"saved_goal\",\n fallback,\n context: {\n created: {\n title: created.goal.title,\n cadence: created.goal.cadence,\n },\n experienceLoop: createdExperienceLoop,\n },\n }),\n data: toActionData({\n ...created,\n experienceLoop: createdExperienceLoop,\n }),\n };\n }\n\n if (internalOp === \"update_definition\") {\n const target = await resolveDefinition(service, targetName, domain);\n if (!target)\n return {\n success: false,\n text: \"I could not find that item to update.\",\n };\n const request: UpdateLifeOpsDefinitionRequest = {\n ownership,\n title:\n params.title !== target.definition.title ? params.title : undefined,\n description: detailString(details, \"description\"),\n cadence: normalizeCadenceDetail(detailObject(details, \"cadence\")),\n priority: detailNumber(details, \"priority\"),\n // detailObject returns Record<string,unknown>; cast at validated boundary.\n windowPolicy: detailObject(\n details,\n \"windowPolicy\",\n ) as UpdateLifeOpsDefinitionRequest[\"windowPolicy\"],\n reminderPlan: detailObject(\n details,\n \"reminderPlan\",\n ) as UpdateLifeOpsDefinitionRequest[\"reminderPlan\"],\n };\n\n // If no explicit changes from structured details, try LLM extraction\n const hasExplicitChanges = hasDefinitionUpdateChanges(request);\n if (!hasExplicitChanges && intent) {\n const llmFields = await extractUpdateFieldsWithLlm({\n runtime,\n intent,\n currentTitle: target.definition.title,\n currentCadenceKind: target.definition.cadence.kind,\n currentWindows: target.definition.windowPolicy.windows.map(\n (w) => w.name,\n ),\n });\n if (llmFields) {\n if (llmFields.title) request.title = llmFields.title;\n if (llmFields.priority) request.priority = llmFields.priority;\n if (llmFields.description)\n request.description = llmFields.description;\n if (\n llmFields.cadenceKind ||\n llmFields.windows ||\n llmFields.weekdays ||\n llmFields.everyMinutes ||\n llmFields.timeOfDay\n ) {\n const built = buildCadenceFromUpdateFields({\n currentCadence: target.definition.cadence,\n currentWindowPolicy: target.definition.windowPolicy,\n timeZone: target.definition.timezone,\n update: llmFields,\n });\n if (built) {\n request.cadence = built.cadence;\n request.windowPolicy = built.windowPolicy;\n }\n }\n }\n }\n\n if (!hasDefinitionUpdateChanges(request)) {\n return {\n success: false,\n text: `Tell me what to change about \"${target.definition.title}\" and I'll update it.`,\n };\n }\n\n const updated = await service.updateDefinition(\n target.definition.id,\n request,\n );\n const fallback = `Updated \"${updated.definition.title}\".`;\n return {\n success: true,\n text: await renderLifeActionReply({\n runtime,\n message,\n state,\n intent,\n scenario: \"updated_definition\",\n fallback,\n context: {\n previousTitle: target.definition.title,\n updated: {\n title: updated.definition.title,\n },\n },\n }),\n data: toActionData(updated),\n };\n }\n\n if (internalOp === \"update_goal\") {\n const target = await resolveGoal(service, targetName, domain);\n if (!target)\n return {\n success: false,\n text: \"I could not find that goal to update.\",\n };\n const request: UpdateLifeOpsGoalRequest = {\n ownership,\n title: params.title !== target.goal.title ? params.title : undefined,\n description: detailString(details, \"description\"),\n cadence: normalizeCadenceDetail(\n detailObject(details, \"cadence\"),\n ) as UpdateLifeOpsGoalRequest[\"cadence\"],\n supportStrategy: detailObject(details, \"supportStrategy\"),\n successCriteria: detailObject(details, \"successCriteria\"),\n };\n const hasExplicitGoalChanges =\n request.title !== undefined ||\n request.description !== undefined ||\n request.cadence !== undefined ||\n request.supportStrategy !== undefined ||\n request.successCriteria !== undefined;\n if (!hasExplicitGoalChanges) {\n const llmPlan = await extractGoalUpdatePlanWithLlm({\n runtime,\n currentGoal: target.goal,\n intent,\n state: state ?? undefined,\n message: message,\n });\n if (llmPlan.mode === \"respond\") {\n return {\n success: true,\n text:\n llmPlan.response ??\n `Tell me what to change about \"${target.goal.title}\" and I'll update it.`,\n data: {\n actionName: ownerSurfaceActionName,\n noop: true,\n suggestedOperation: \"update_goal\",\n },\n };\n }\n if (llmPlan.title) request.title = llmPlan.title;\n if (llmPlan.description) request.description = llmPlan.description;\n if (llmPlan.cadence) request.cadence = llmPlan.cadence;\n if (llmPlan.supportStrategy)\n request.supportStrategy = llmPlan.supportStrategy;\n if (llmPlan.successCriteria)\n request.successCriteria = llmPlan.successCriteria;\n if (llmPlan.groundingState) {\n request.metadata = mergeGoalMetadataWithGrounding({\n metadata: target.goal.metadata,\n nowIso: new Date().toISOString(),\n plan: {\n cadence: llmPlan.cadence,\n confidence: llmPlan.confidence,\n evaluationSummary: llmPlan.evaluationSummary,\n groundingState: llmPlan.groundingState,\n missingCriticalFields: llmPlan.missingCriticalFields,\n successCriteria:\n llmPlan.successCriteria ?? target.goal.successCriteria,\n targetDomain: llmPlan.targetDomain,\n },\n });\n }\n }\n if (\n request.title === undefined &&\n request.description === undefined &&\n request.cadence === undefined &&\n request.supportStrategy === undefined &&\n request.successCriteria === undefined &&\n request.metadata === undefined\n ) {\n return {\n success: false,\n text: `Tell me what to change about \"${target.goal.title}\" and I'll update it.`,\n };\n }\n const updated = await service.updateGoal(target.goal.id, request);\n const fallback = `Updated goal \"${updated.goal.title}\".`;\n return {\n success: true,\n text: await renderLifeActionReply({\n runtime,\n message,\n state,\n intent,\n scenario: \"updated_goal\",\n fallback,\n context: {\n previousTitle: target.goal.title,\n updated: {\n title: updated.goal.title,\n },\n },\n }),\n data: toActionData(updated),\n };\n }\n\n if (internalOp === \"delete_definition\") {\n const target = await resolveDefinition(service, targetName, domain);\n if (!target)\n return {\n success: false,\n text: \"I could not find that item to delete.\",\n };\n await service.deleteDefinition(target.definition.id);\n const fallback = `Deleted \"${target.definition.title}\" and its occurrences.`;\n return {\n success: true,\n text: await renderLifeActionReply({\n runtime,\n message,\n state,\n intent,\n scenario: \"deleted_definition\",\n fallback,\n context: {\n deleted: {\n title: target.definition.title,\n },\n },\n }),\n };\n }\n\n if (internalOp === \"delete_goal\") {\n const target = await resolveGoal(service, targetName, domain);\n if (!target)\n return {\n success: false,\n text: \"I could not find that goal to delete.\",\n };\n await service.deleteGoal(target.goal.id);\n const fallback = `Deleted goal \"${target.goal.title}\".`;\n return {\n success: true,\n text: await renderLifeActionReply({\n runtime,\n message,\n state,\n intent,\n scenario: \"deleted_goal\",\n fallback,\n context: {\n deleted: {\n title: target.goal.title,\n },\n },\n }),\n };\n }\n\n if (internalOp === \"complete_occurrence\") {\n // Direct occurrenceId path: when the planner already knows the\n // occurrence id we skip title/intent matching.\n const directOccurrenceId = detailString(details, \"occurrenceId\");\n let resolvedTargetId: string;\n if (directOccurrenceId) {\n resolvedTargetId = directOccurrenceId;\n } else {\n const { match: target, ambiguousCandidates } =\n await resolveOccurrenceWithIntentFallback({\n service,\n target: targetName,\n domain,\n intent,\n operation,\n });\n if (!target) {\n if (ambiguousCandidates.length > 0) {\n return {\n success: false,\n text: `Multiple items match — which one?\\n${ambiguousCandidates.map((t) => ` - ${t}`).join(\"\\n\")}`,\n };\n }\n return {\n success: false,\n text: \"I could not find that active item to complete.\",\n };\n }\n resolvedTargetId = target.id;\n }\n const completed = await service.completeOccurrence(resolvedTargetId, {\n note: detailString(details, \"note\"),\n });\n const fallback = `Marked \"${completed.title}\" done.`;\n return {\n success: true,\n text: await renderLifeActionReply({\n runtime,\n message,\n state,\n intent,\n scenario: \"completed_occurrence\",\n fallback,\n context: {\n completed: {\n title: completed.title,\n },\n note: detailString(details, \"note\"),\n },\n }),\n data: toActionData(completed),\n };\n }\n\n if (internalOp === \"skip_occurrence\") {\n const { match: target, ambiguousCandidates } =\n await resolveOccurrenceWithIntentFallback({\n service,\n target: targetName,\n domain,\n intent,\n operation,\n });\n if (!target) {\n if (ambiguousCandidates.length > 0) {\n return {\n success: false,\n text: `Multiple items match — which one?\\n${ambiguousCandidates.map((t) => ` - ${t}`).join(\"\\n\")}`,\n };\n }\n return {\n success: false,\n text: \"I could not find that active item to skip.\",\n };\n }\n const skipped = await service.skipOccurrence(target.id);\n const fallback = `Skipped \"${skipped.title}\".`;\n return {\n success: true,\n text: await renderLifeActionReply({\n runtime,\n message,\n state,\n intent,\n scenario: \"skipped_occurrence\",\n fallback,\n context: {\n skipped: {\n title: skipped.title,\n },\n },\n }),\n data: toActionData(skipped),\n };\n }\n\n if (internalOp === \"snooze_occurrence\") {\n // Direct occurrenceId path for reminder_snooze.\n const directOccurrenceId = detailString(details, \"occurrenceId\");\n let resolvedTargetId: string;\n if (directOccurrenceId) {\n resolvedTargetId = directOccurrenceId;\n } else {\n const { match: target, ambiguousCandidates } =\n await resolveOccurrenceWithIntentFallback({\n service,\n target: targetName,\n domain,\n intent,\n operation,\n });\n if (!target) {\n if (ambiguousCandidates.length > 0) {\n return {\n success: false,\n text: `Multiple items match — which one?\\n${ambiguousCandidates.map((t) => ` - ${t}`).join(\"\\n\")}`,\n };\n }\n return {\n success: false,\n text: \"I could not find that active item to snooze.\",\n };\n }\n resolvedTargetId = target.id;\n }\n const preset = detailString(details, \"preset\") as\n | \"15m\"\n | \"30m\"\n | \"1h\"\n | \"tonight\"\n | \"tomorrow_morning\"\n | undefined;\n const minutes = detailNumber(details, \"minutes\");\n const snoozed = await service.snoozeOccurrence(resolvedTargetId, {\n preset,\n minutes,\n });\n const fallback = `Snoozed \"${snoozed.title}\".`;\n return {\n success: true,\n text: await renderLifeActionReply({\n runtime,\n message,\n state,\n intent,\n scenario: \"snoozed_occurrence\",\n fallback,\n context: {\n snoozed: {\n title: snoozed.title,\n },\n preset: preset ?? null,\n minutes: minutes ?? null,\n },\n }),\n data: toActionData(snoozed),\n };\n }\n\n if (internalOp === \"review_goal\") {\n const target = await resolveGoal(service, targetName, domain);\n if (!target) {\n const weeklyReview = await service.reviewGoalsForWeek();\n if (weeklyReview.summary.totalGoals === 0) {\n // No goals to review — fall through to overview so todo-list-style\n // queries like \"what's on my todo list today?\" still resolve.\n const overview = await service.getOverview();\n const userQuery = messageText(message) || intent || \"overview\";\n const fallback = formatOverviewForQuery(overview, userQuery);\n return {\n success: true,\n text: await renderLifeActionReply({\n runtime,\n message,\n state,\n intent: userQuery,\n scenario: \"overview\",\n fallback,\n context: {\n summary: overview.owner.summary,\n occurrenceTitles: overview.owner.occurrences\n .slice(0, 6)\n .map((occurrence) => occurrence.title),\n goalTitles: overview.owner.goals\n .slice(0, 3)\n .map((goal) => goal.title),\n },\n }),\n data: toActionData(overview),\n };\n }\n const fallback = formatWeeklyGoalReview(weeklyReview);\n return {\n success: true,\n text: await renderLifeActionReply({\n runtime,\n message,\n state,\n intent,\n scenario: \"weekly_goal_review\",\n fallback,\n context: {\n summary: weeklyReview.summary,\n atRiskTitles: weeklyReview.atRisk\n .slice(0, 3)\n .map((review) => review.goal.title),\n needsAttentionTitles: weeklyReview.needsAttention\n .slice(0, 3)\n .map((review) => review.goal.title),\n onTrackTitles: weeklyReview.onTrack\n .slice(0, 3)\n .map((review) => review.goal.title),\n },\n }),\n data: toActionData(weeklyReview),\n };\n }\n const review = await service.reviewGoal(target.goal.id);\n return {\n success: true,\n text: review.summary.explanation,\n data: toActionData(review),\n };\n }\n\n if (internalOp === \"policy_set_reminder\") {\n const intensityDetail = detailString(details, \"intensity\");\n const intensity =\n intensityDetail === \"minimal\" ||\n intensityDetail === \"normal\" ||\n intensityDetail === \"persistent\" ||\n intensityDetail === \"high_priority_only\"\n ? intensityDetail\n : undefined;\n return applyOwnerPolicySetReminder({\n runtime,\n message,\n intent,\n resolveDefinition: resolveDefinitionFromIntent,\n intensity,\n target: targetName,\n details,\n });\n }\n\n if (internalOp === \"policy_configure_escalation\") {\n return applyOwnerPolicyConfigureEscalation({\n runtime,\n message,\n intent,\n resolveDefinition: resolveDefinitionFromIntent,\n target: targetName,\n timeoutMinutes: detailNumber(details, \"timeoutMinutes\"),\n callAfterMinutes: detailNumber(details, \"callAfterMinutes\"),\n details,\n });\n }\n\n return {\n success: false,\n text: \"I didn't understand that life management request.\",\n };\n } catch (err) {\n if (err instanceof LifeOpsServiceError) {\n const fallback = buildLifeServiceErrorFallback(err, intent);\n return {\n success: false,\n text: await renderLifeActionReply({\n runtime,\n message,\n state,\n intent,\n scenario: \"service_error\",\n fallback,\n context: {\n status: err.status,\n operation,\n },\n }),\n };\n }\n throw err;\n }\n}\n"],"mappings":"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","names":["fallback","kind","experienceSummary","review"]}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OWNER_FINANCES backend handler.
|
|
3
|
+
*
|
|
4
|
+
* Folds payment-source, transaction, spending-summary, recurring-charge, and
|
|
5
|
+
* subscription-audit backends behind a single dispatch function. The
|
|
6
|
+
* OWNER_FINANCES umbrella in `./owner-surfaces.ts` wraps this handler with the
|
|
7
|
+
* canonical `action` discriminator on the registered surface.
|
|
8
|
+
*
|
|
9
|
+
* Subaction enum:
|
|
10
|
+
* dashboard | list_sources | add_source | remove_source | import_csv |
|
|
11
|
+
* list_transactions | spending_summary | recurring_charges |
|
|
12
|
+
* subscription_audit | subscription_cancel | subscription_status
|
|
13
|
+
*
|
|
14
|
+
* Routing: a single discriminator (`subaction`) selects the backend. The
|
|
15
|
+
* `subscription_*` verbs delegate to the subscription backend; everything
|
|
16
|
+
* else delegates to the finance backend.
|
|
17
|
+
*/
|
|
18
|
+
import type { ActionResult, HandlerOptions, IAgentRuntime, Memory, State } from "@elizaos/core";
|
|
19
|
+
export { MONEY_CONTEXTS, MONEY_PARAMETERS, MONEY_TAGS, OWNER_FINANCE_SIMILES, } from "@elizaos/plugin-finances/actions/finances";
|
|
20
|
+
/**
|
|
21
|
+
* Handler function backing the OWNER_FINANCES umbrella.
|
|
22
|
+
*/
|
|
23
|
+
export declare function runMoneyHandler(runtime: IAgentRuntime, message: Memory, state: State | undefined, options: HandlerOptions | undefined): Promise<ActionResult>;
|
|
24
|
+
//# sourceMappingURL=money.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"money.d.ts","sourceRoot":"","sources":["../../src/actions/money.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,KAAK,EAEV,YAAY,EACZ,cAAc,EACd,aAAa,EACb,MAAM,EACN,KAAK,EACN,MAAM,eAAe,CAAC;AAUvB,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,UAAU,EACV,qBAAqB,GACtB,MAAM,2CAA2C,CAAC;AAuBnD;;GAEG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,KAAK,GAAG,SAAS,EACxB,OAAO,EAAE,cAAc,GAAG,SAAS,GAClC,OAAO,CAAC,YAAY,CAAC,CAgBvB"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { runPaymentsHandler } from "./payments.js";
|
|
2
|
+
import { runSubscriptionsHandler } from "./subscriptions.js";
|
|
3
|
+
const SUBSCRIPTION_PREFIX = "subscription_";
|
|
4
|
+
import {
|
|
5
|
+
MONEY_CONTEXTS,
|
|
6
|
+
MONEY_PARAMETERS,
|
|
7
|
+
MONEY_TAGS,
|
|
8
|
+
OWNER_FINANCE_SIMILES
|
|
9
|
+
} from "@elizaos/plugin-finances/actions/finances";
|
|
10
|
+
function readPlannerParams(options) {
|
|
11
|
+
const raw = options?.parameters;
|
|
12
|
+
return raw && typeof raw === "object" ? raw : {};
|
|
13
|
+
}
|
|
14
|
+
function rewriteSubactionForBackend(options, backendSubaction) {
|
|
15
|
+
const incoming = options ?? {};
|
|
16
|
+
const incomingParams = incoming.parameters ?? {};
|
|
17
|
+
const next = {
|
|
18
|
+
...incomingParams,
|
|
19
|
+
subaction: backendSubaction
|
|
20
|
+
};
|
|
21
|
+
return { ...incoming, parameters: next };
|
|
22
|
+
}
|
|
23
|
+
async function runMoneyHandler(runtime, message, state, options) {
|
|
24
|
+
const params = readPlannerParams(options);
|
|
25
|
+
const subactionRaw = params.subaction;
|
|
26
|
+
const subaction = typeof subactionRaw === "string" ? subactionRaw.trim().toLowerCase() : "";
|
|
27
|
+
if (subaction.startsWith(SUBSCRIPTION_PREFIX)) {
|
|
28
|
+
const backendSubaction = subaction.slice(SUBSCRIPTION_PREFIX.length);
|
|
29
|
+
const forwarded = rewriteSubactionForBackend(options, backendSubaction);
|
|
30
|
+
return runSubscriptionsHandler(runtime, message, state, forwarded);
|
|
31
|
+
}
|
|
32
|
+
return runPaymentsHandler(runtime, message, state, options);
|
|
33
|
+
}
|
|
34
|
+
export {
|
|
35
|
+
MONEY_CONTEXTS,
|
|
36
|
+
MONEY_PARAMETERS,
|
|
37
|
+
MONEY_TAGS,
|
|
38
|
+
OWNER_FINANCE_SIMILES,
|
|
39
|
+
runMoneyHandler
|
|
40
|
+
};
|
|
41
|
+
//# sourceMappingURL=money.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/actions/money.ts"],"sourcesContent":["/**\n * OWNER_FINANCES backend handler.\n *\n * Folds payment-source, transaction, spending-summary, recurring-charge, and\n * subscription-audit backends behind a single dispatch function. The\n * OWNER_FINANCES umbrella in `./owner-surfaces.ts` wraps this handler with the\n * canonical `action` discriminator on the registered surface.\n *\n * Subaction enum:\n * dashboard | list_sources | add_source | remove_source | import_csv |\n * list_transactions | spending_summary | recurring_charges |\n * subscription_audit | subscription_cancel | subscription_status\n *\n * Routing: a single discriminator (`subaction`) selects the backend. The\n * `subscription_*` verbs delegate to the subscription backend; everything\n * else delegates to the finance backend.\n */\nimport type {\n ActionParameters,\n ActionResult,\n HandlerOptions,\n IAgentRuntime,\n Memory,\n State,\n} from \"@elizaos/core\";\nimport { runPaymentsHandler } from \"./payments.js\";\nimport { runSubscriptionsHandler } from \"./subscriptions.js\";\n\nconst SUBSCRIPTION_PREFIX = \"subscription_\";\n\n// The OWNER_FINANCES public similes / parameter schema / tags / contexts moved\n// to @elizaos/plugin-finances with the payments back-end. Re-exported here so\n// owner-surfaces.ts (the registered umbrella) keeps importing them from this\n// module.\nexport {\n MONEY_CONTEXTS,\n MONEY_PARAMETERS,\n MONEY_TAGS,\n OWNER_FINANCE_SIMILES,\n} from \"@elizaos/plugin-finances/actions/finances\";\n\nfunction readPlannerParams(\n options: HandlerOptions | undefined,\n): Record<string, unknown> {\n const raw = (options as Record<string, unknown> | undefined)?.parameters;\n return raw && typeof raw === \"object\" ? (raw as Record<string, unknown>) : {};\n}\n\nfunction rewriteSubactionForBackend(\n options: HandlerOptions | undefined,\n backendSubaction: string,\n): HandlerOptions {\n const incoming = (options ?? {}) as HandlerOptions;\n const incomingParams: ActionParameters = (incoming.parameters ??\n {}) as ActionParameters;\n const next: ActionParameters = {\n ...incomingParams,\n subaction: backendSubaction,\n };\n return { ...incoming, parameters: next };\n}\n\n/**\n * Handler function backing the OWNER_FINANCES umbrella.\n */\nexport async function runMoneyHandler(\n runtime: IAgentRuntime,\n message: Memory,\n state: State | undefined,\n options: HandlerOptions | undefined,\n): Promise<ActionResult> {\n const params = readPlannerParams(options);\n const subactionRaw = params.subaction;\n const subaction =\n typeof subactionRaw === \"string\" ? subactionRaw.trim().toLowerCase() : \"\";\n\n if (subaction.startsWith(SUBSCRIPTION_PREFIX)) {\n const backendSubaction = subaction.slice(SUBSCRIPTION_PREFIX.length);\n const forwarded = rewriteSubactionForBackend(options, backendSubaction);\n return runSubscriptionsHandler(runtime, message, state, forwarded);\n }\n\n // Payments-side. If the subaction is missing, the underlying handler\n // defaults to `dashboard`; we still forward the (possibly empty) value to\n // preserve that behavior.\n return runPaymentsHandler(runtime, message, state, options);\n}\n"],"mappings":"AAyBA,SAAS,0BAA0B;AACnC,SAAS,+BAA+B;AAExC,MAAM,sBAAsB;AAM5B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP,SAAS,kBACP,SACyB;AACzB,QAAM,MAAO,SAAiD;AAC9D,SAAO,OAAO,OAAO,QAAQ,WAAY,MAAkC,CAAC;AAC9E;AAEA,SAAS,2BACP,SACA,kBACgB;AAChB,QAAM,WAAY,WAAW,CAAC;AAC9B,QAAM,iBAAoC,SAAS,cACjD,CAAC;AACH,QAAM,OAAyB;AAAA,IAC7B,GAAG;AAAA,IACH,WAAW;AAAA,EACb;AACA,SAAO,EAAE,GAAG,UAAU,YAAY,KAAK;AACzC;AAKA,eAAsB,gBACpB,SACA,SACA,OACA,SACuB;AACvB,QAAM,SAAS,kBAAkB,OAAO;AACxC,QAAM,eAAe,OAAO;AAC5B,QAAM,YACJ,OAAO,iBAAiB,WAAW,aAAa,KAAK,EAAE,YAAY,IAAI;AAEzE,MAAI,UAAU,WAAW,mBAAmB,GAAG;AAC7C,UAAM,mBAAmB,UAAU,MAAM,oBAAoB,MAAM;AACnE,UAAM,YAAY,2BAA2B,SAAS,gBAAgB;AACtE,WAAO,wBAAwB,SAAS,SAAS,OAAO,SAAS;AAAA,EACnE;AAKA,SAAO,mBAAmB,SAAS,SAAS,OAAO,OAAO;AAC5D;","names":[]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Action } from "@elizaos/core";
|
|
2
|
+
export declare const ownerRemindersAction: Action;
|
|
3
|
+
export declare const ownerAlarmsAction: Action;
|
|
4
|
+
export declare const ownerGoalsAction: Action;
|
|
5
|
+
export declare const ownerTodosAction: Action;
|
|
6
|
+
export declare const ownerRoutinesAction: Action;
|
|
7
|
+
export declare const ownerHealthAction: Action;
|
|
8
|
+
export declare const ownerScreenTimeAction: Action;
|
|
9
|
+
export declare const ownerFinancesAction: Action;
|
|
10
|
+
export declare const personalAssistantAction: Action;
|
|
11
|
+
//# sourceMappingURL=owner-surfaces.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"owner-surfaces.d.ts","sourceRoot":"","sources":["../../src/actions/owner-surfaces.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,MAAM,EAOP,MAAM,eAAe,CAAC;AA6MvB,eAAO,MAAM,oBAAoB,EAAE,MA4BlC,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,MAgB/B,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,MAe9B,CAAC;AAOF,eAAO,MAAM,gBAAgB,EAAE,MAgB9B,CAAC;AA4BF,eAAO,MAAM,mBAAmB,EAAE,MAgFjC,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,MAU9B,CAAC;AAEH,eAAO,MAAM,qBAAqB,EAAE,MAUlC,CAAC;AAEH,eAAO,MAAM,mBAAmB,EAAE,MAmBjC,CAAC;AA6FF,eAAO,MAAM,uBAAuB,EAAE,MAuErC,CAAC"}
|