@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/lifeops/policy-memory.ts"],"sourcesContent":["export const LIFEOPS_POLICY_OPERATIONS = [\n \"read_aloud\",\n \"delete\",\n \"send\",\n \"spend_money\",\n \"proofread_apply\",\n \"store_affect\",\n \"bulk_cleanup\",\n] as const;\n\nexport type LifeOpsPolicyOperation = (typeof LIFEOPS_POLICY_OPERATIONS)[number];\n\nexport const LIFEOPS_POLICY_EFFECTS = [\n \"allow\",\n \"deny\",\n \"require_approval\",\n \"prompt_user_first\",\n] as const;\n\nexport type LifeOpsPolicyEffect = (typeof LIFEOPS_POLICY_EFFECTS)[number];\n\nexport type LifeOpsPolicyDecisionOutcome =\n | \"allow\"\n | \"deny\"\n | \"require_approval\";\n\nexport const LIFEOPS_POLICY_REVIEW_STATES = [\n \"draft\",\n \"active\",\n \"needs_review\",\n \"rejected\",\n \"retired\",\n] as const;\n\nexport type LifeOpsPolicyReviewState =\n (typeof LIFEOPS_POLICY_REVIEW_STATES)[number];\n\nexport const LIFEOPS_POLICY_SENSITIVITY_LEVELS = [\n \"public\",\n \"routine\",\n \"personal\",\n \"confidential\",\n \"restricted\",\n] as const;\n\nexport type LifeOpsPolicySensitivity =\n (typeof LIFEOPS_POLICY_SENSITIVITY_LEVELS)[number];\n\nexport const LIFEOPS_POLICY_SURFACES = [\n \"chat\",\n \"voice\",\n \"email\",\n \"browser\",\n \"desktop\",\n \"mobile\",\n \"automation\",\n \"api\",\n] as const;\n\nexport type LifeOpsPolicySurface = (typeof LIFEOPS_POLICY_SURFACES)[number];\n\nexport const LIFEOPS_POLICY_CHANNELS = [\n \"telegram\",\n \"discord\",\n \"slack\",\n \"imessage\",\n \"sms\",\n \"signal\",\n \"whatsapp\",\n \"x_dm\",\n \"email\",\n \"google_calendar\",\n \"browser\",\n \"phone\",\n \"internal\",\n] as const;\n\nexport type LifeOpsPolicyChannel = (typeof LIFEOPS_POLICY_CHANNELS)[number];\n\nexport const LIFEOPS_POLICY_SUBJECT_KINDS = [\n \"owner\",\n \"contact\",\n \"household\",\n \"agent\",\n \"organization\",\n \"automation\",\n \"any\",\n] as const;\n\nexport type LifeOpsPolicySubjectKind =\n (typeof LIFEOPS_POLICY_SUBJECT_KINDS)[number];\n\nexport const LIFEOPS_POLICY_RESOURCE_KINDS = [\n \"message\",\n \"email\",\n \"calendar_event\",\n \"file\",\n \"payment\",\n \"contact\",\n \"memory\",\n \"browser_page\",\n \"task\",\n \"unknown\",\n] as const;\n\nexport type LifeOpsPolicyResourceKind =\n (typeof LIFEOPS_POLICY_RESOURCE_KINDS)[number];\n\nexport const LIFEOPS_POLICY_EVIDENCE_SOURCES = [\n \"user_instruction\",\n \"user_approval\",\n \"admin_policy\",\n \"migration\",\n \"system_policy\",\n] as const;\n\nexport type LifeOpsPolicyEvidenceSource =\n (typeof LIFEOPS_POLICY_EVIDENCE_SOURCES)[number];\n\nexport type LifeOpsPolicyComparisonOperator =\n | \"lt\"\n | \"lte\"\n | \"eq\"\n | \"gte\"\n | \"gt\";\n\nexport interface LifeOpsPolicyEvidence {\n readonly source: LifeOpsPolicyEvidenceSource;\n readonly sourceId: string;\n readonly recordedAt: string;\n readonly actorId: string;\n readonly reviewId?: string;\n}\n\nexport interface LifeOpsPolicySubjectSelector {\n readonly kind: LifeOpsPolicySubjectKind;\n readonly ids?: readonly string[];\n readonly labels?: readonly string[];\n readonly sensitivityAtLeast?: LifeOpsPolicySensitivity;\n readonly sensitivityAtMost?: LifeOpsPolicySensitivity;\n}\n\nexport interface LifeOpsPolicyRequestSubject {\n readonly kind: LifeOpsPolicySubjectKind;\n readonly id: string;\n readonly labels?: readonly string[];\n readonly sensitivity: LifeOpsPolicySensitivity;\n}\n\nexport interface LifeOpsPolicyResourceRef {\n readonly kind: LifeOpsPolicyResourceKind;\n readonly id: string;\n}\n\nexport interface LifeOpsPolicyScopeSelector {\n readonly surfaces?: readonly LifeOpsPolicySurface[];\n readonly regions?: readonly string[];\n readonly channels?: readonly LifeOpsPolicyChannel[];\n readonly contactIds?: readonly string[];\n readonly resourceKinds?: readonly LifeOpsPolicyResourceKind[];\n readonly resourceIds?: readonly string[];\n}\n\nexport interface LifeOpsPolicyRequestScope {\n readonly surface: LifeOpsPolicySurface;\n readonly region?: string;\n readonly channel?: LifeOpsPolicyChannel;\n readonly contactId?: string;\n readonly resource?: LifeOpsPolicyResourceRef;\n}\n\nexport type LifeOpsPolicyCondition =\n | {\n readonly kind: \"amount_usd\";\n readonly operator: LifeOpsPolicyComparisonOperator;\n readonly value: number;\n }\n | {\n readonly kind: \"bulk_item_count\";\n readonly operator: LifeOpsPolicyComparisonOperator;\n readonly value: number;\n }\n | {\n readonly kind: \"recipient_count\";\n readonly operator: LifeOpsPolicyComparisonOperator;\n readonly value: number;\n }\n | {\n readonly kind: \"request_sensitivity_at_least\";\n readonly value: LifeOpsPolicySensitivity;\n }\n | {\n readonly kind: \"request_sensitivity_at_most\";\n readonly value: LifeOpsPolicySensitivity;\n }\n | {\n readonly kind: \"contact_sensitivity_at_least\";\n readonly value: LifeOpsPolicySensitivity;\n }\n | {\n readonly kind: \"contact_sensitivity_at_most\";\n readonly value: LifeOpsPolicySensitivity;\n }\n | {\n readonly kind: \"currency_is\";\n readonly value: string;\n };\n\nexport interface LifeOpsPolicyThresholds {\n readonly maxAmountUsd?: number;\n readonly maxBulkItemCount?: number;\n readonly maxRecipientCount?: number;\n readonly maxSensitivity?: LifeOpsPolicySensitivity;\n readonly maxContactSensitivity?: LifeOpsPolicySensitivity;\n}\n\nexport interface LifeOpsPolicyEffectiveWindow {\n readonly startsAt?: string;\n readonly endsAt?: string;\n readonly timezone?: string;\n readonly daysOfWeek?: readonly number[];\n readonly startMinuteOfDay?: number;\n readonly endMinuteOfDay?: number;\n}\n\nexport interface LifeOpsPolicyRule {\n readonly kind: \"lifeops_policy_rule\";\n readonly id: string;\n readonly version: 1;\n readonly operations: readonly LifeOpsPolicyOperation[];\n readonly effect: LifeOpsPolicyEffect;\n readonly subject: LifeOpsPolicySubjectSelector;\n readonly scopes?: LifeOpsPolicyScopeSelector;\n readonly conditions?: readonly LifeOpsPolicyCondition[];\n readonly thresholds?: LifeOpsPolicyThresholds;\n readonly precedence: number;\n readonly effectiveWindow?: LifeOpsPolicyEffectiveWindow;\n readonly expiresAt?: string;\n readonly evidence: readonly LifeOpsPolicyEvidence[];\n readonly reviewState: LifeOpsPolicyReviewState;\n}\n\nexport interface LifeOpsPolicyEvaluationRequest {\n readonly requestId: string;\n readonly operation: LifeOpsPolicyOperation;\n readonly requestedBy: string;\n readonly subject: LifeOpsPolicyRequestSubject;\n readonly scope: LifeOpsPolicyRequestScope;\n readonly sensitivity: LifeOpsPolicySensitivity;\n readonly contactSensitivity?: LifeOpsPolicySensitivity;\n readonly amountUsd?: number;\n readonly currency?: string;\n readonly bulkItemCount?: number;\n readonly recipientCount?: number;\n readonly now?: Date | string | number;\n}\n\nexport type LifeOpsPolicyDecisionReasonCode =\n | \"allowed_by_rule\"\n | \"denied_by_rule\"\n | \"approval_required_by_rule\"\n | \"prompt_user_first\"\n | \"conflicting_top_rank_rules_resolved_conservatively\"\n | \"default_requires_approval\"\n | \"default_denies_high_risk_operation\"\n | \"malformed_request\"\n | \"malformed_rule\"\n | \"duplicate_rule_id\";\n\nexport interface LifeOpsPolicyDecisionReason {\n readonly code: LifeOpsPolicyDecisionReasonCode;\n readonly ruleIds?: readonly string[];\n readonly detail?: Readonly<Record<string, string | number | boolean>>;\n}\n\nexport type LifeOpsPolicyIgnoredReasonCode =\n | \"operation_mismatch\"\n | \"review_state_not_active\"\n | \"expired\"\n | \"outside_effective_window\"\n | \"subject_mismatch\"\n | \"scope_mismatch\"\n | \"threshold_not_satisfied\"\n | \"condition_not_satisfied\";\n\nexport interface LifeOpsPolicyRuleAuditRef {\n readonly ruleId: string;\n readonly effect: LifeOpsPolicyEffect;\n readonly precedence: number;\n readonly specificity: number;\n readonly evidenceIds: readonly string[];\n}\n\nexport interface LifeOpsPolicyIgnoredRuleRecord {\n readonly ruleId: string;\n readonly reason: LifeOpsPolicyIgnoredReasonCode;\n readonly detail?: string;\n}\n\nexport interface LifeOpsPolicyInvalidRuleRecord {\n readonly ruleId: string;\n readonly errors: readonly string[];\n}\n\nexport interface LifeOpsPolicyDecisionRecord {\n readonly decisionId: string;\n readonly evaluatedAt: string;\n readonly requestId: string;\n readonly requestedBy: string;\n readonly operation: LifeOpsPolicyOperation;\n readonly outcome: LifeOpsPolicyDecisionOutcome;\n readonly approvalMode: \"approval_queue\" | \"prompt_user_first\" | null;\n readonly reasonCodes: readonly LifeOpsPolicyDecisionReasonCode[];\n readonly selectedRules: readonly LifeOpsPolicyRuleAuditRef[];\n readonly matchedRules: readonly LifeOpsPolicyRuleAuditRef[];\n readonly ignoredRules: readonly LifeOpsPolicyIgnoredRuleRecord[];\n readonly invalidRules: readonly LifeOpsPolicyInvalidRuleRecord[];\n}\n\nexport interface LifeOpsPolicyDecision {\n readonly requestId: string;\n readonly operation: LifeOpsPolicyOperation;\n readonly outcome: LifeOpsPolicyDecisionOutcome;\n readonly approvalMode: \"approval_queue\" | \"prompt_user_first\" | null;\n readonly reasons: readonly LifeOpsPolicyDecisionReason[];\n readonly record: LifeOpsPolicyDecisionRecord;\n}\n\nexport interface LifeOpsPolicyRuleValidation {\n readonly valid: boolean;\n readonly ruleId: string;\n readonly errors: readonly string[];\n}\n\ntype RuleMatch =\n | {\n readonly matched: true;\n readonly auditRef: LifeOpsPolicyRuleAuditRef;\n readonly rule: LifeOpsPolicyRule;\n }\n | {\n readonly matched: false;\n readonly ignored: LifeOpsPolicyIgnoredRuleRecord;\n };\n\nconst COMPARISON_OPERATORS: readonly LifeOpsPolicyComparisonOperator[] = [\n \"lt\",\n \"lte\",\n \"eq\",\n \"gte\",\n \"gt\",\n];\n\nconst APPROVAL_MODE_BY_EFFECT: Readonly<\n Record<LifeOpsPolicyEffect, \"approval_queue\" | \"prompt_user_first\" | null>\n> = {\n allow: null,\n deny: null,\n require_approval: \"approval_queue\",\n prompt_user_first: \"prompt_user_first\",\n};\n\nconst OUTCOME_BY_EFFECT: Readonly<\n Record<LifeOpsPolicyEffect, LifeOpsPolicyDecisionOutcome>\n> = {\n allow: \"allow\",\n deny: \"deny\",\n require_approval: \"require_approval\",\n prompt_user_first: \"require_approval\",\n};\n\nconst EFFECT_SEVERITY: Readonly<Record<LifeOpsPolicyEffect, number>> = {\n allow: 1,\n require_approval: 2,\n prompt_user_first: 2,\n deny: 3,\n};\n\nconst SENSITIVITY_SCORE: Readonly<Record<LifeOpsPolicySensitivity, number>> = {\n public: 0,\n routine: 1,\n personal: 2,\n confidential: 3,\n restricted: 4,\n};\n\nconst DEFAULT_OUTCOME_BY_OPERATION: Readonly<\n Record<\n LifeOpsPolicyOperation,\n {\n readonly outcome: LifeOpsPolicyDecisionOutcome;\n readonly reasonCode:\n | \"default_requires_approval\"\n | \"default_denies_high_risk_operation\";\n }\n >\n> = {\n read_aloud: {\n outcome: \"require_approval\",\n reasonCode: \"default_requires_approval\",\n },\n delete: {\n outcome: \"deny\",\n reasonCode: \"default_denies_high_risk_operation\",\n },\n send: {\n outcome: \"require_approval\",\n reasonCode: \"default_requires_approval\",\n },\n spend_money: {\n outcome: \"deny\",\n reasonCode: \"default_denies_high_risk_operation\",\n },\n proofread_apply: {\n outcome: \"require_approval\",\n reasonCode: \"default_requires_approval\",\n },\n store_affect: {\n outcome: \"require_approval\",\n reasonCode: \"default_requires_approval\",\n },\n bulk_cleanup: {\n outcome: \"deny\",\n reasonCode: \"default_denies_high_risk_operation\",\n },\n};\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isOneOf<T extends string>(\n value: unknown,\n allowed: readonly T[],\n): value is T {\n return typeof value === \"string\" && allowed.some((item) => item === value);\n}\n\nfunction isNonEmptyString(value: unknown): value is string {\n return typeof value === \"string\" && value.trim().length > 0;\n}\n\nfunction isFiniteNonNegative(value: unknown): value is number {\n return typeof value === \"number\" && Number.isFinite(value) && value >= 0;\n}\n\nfunction readStringArray(\n value: unknown,\n field: string,\n errors: string[],\n): readonly string[] | undefined {\n if (value === undefined) return undefined;\n if (!Array.isArray(value)) {\n errors.push(`${field} must be an array`);\n return undefined;\n }\n const result: string[] = [];\n for (const item of value) {\n if (!isNonEmptyString(item)) {\n errors.push(`${field} entries must be non-empty strings`);\n return undefined;\n }\n result.push(item.trim());\n }\n return result;\n}\n\nfunction readEnumArray<T extends string>(\n value: unknown,\n field: string,\n allowed: readonly T[],\n errors: string[],\n): readonly T[] | undefined {\n if (value === undefined) return undefined;\n if (!Array.isArray(value)) {\n errors.push(`${field} must be an array`);\n return undefined;\n }\n const result: T[] = [];\n for (const item of value) {\n if (!isOneOf(item, allowed)) {\n errors.push(`${field} contains unsupported value`);\n return undefined;\n }\n result.push(item);\n }\n return result;\n}\n\nfunction isValidIsoDate(value: string): boolean {\n return Number.isFinite(Date.parse(value));\n}\n\nfunction isValidTimeZone(value: string): boolean {\n try {\n new Intl.DateTimeFormat(\"en-US\", { timeZone: value }).format(new Date(0));\n return true;\n } catch {\n return false;\n }\n}\n\nfunction parseDateInput(\n value: Date | string | number | undefined,\n): Date | null {\n if (value instanceof Date) {\n return Number.isFinite(value.getTime()) ? value : null;\n }\n if (typeof value === \"number\") {\n const parsed = new Date(value);\n return Number.isFinite(parsed.getTime()) ? parsed : null;\n }\n if (typeof value === \"string\") {\n const parsed = new Date(value);\n return Number.isFinite(parsed.getTime()) ? parsed : null;\n }\n return new Date();\n}\n\nfunction sensitivityCompare(\n left: LifeOpsPolicySensitivity,\n right: LifeOpsPolicySensitivity,\n): number {\n return SENSITIVITY_SCORE[left] - SENSITIVITY_SCORE[right];\n}\n\nfunction compareNumber(\n left: number,\n operator: LifeOpsPolicyComparisonOperator,\n right: number,\n): boolean {\n switch (operator) {\n case \"lt\":\n return left < right;\n case \"lte\":\n return left <= right;\n case \"eq\":\n return left === right;\n case \"gte\":\n return left >= right;\n case \"gt\":\n return left > right;\n }\n}\n\nfunction normalizeRegion(value: string | undefined): string | undefined {\n if (!value) return undefined;\n return value.trim().toUpperCase();\n}\n\nfunction arrayIntersects(\n left: readonly string[] | undefined,\n right: readonly string[] | undefined,\n): boolean {\n if (!left || !right) return false;\n return left.some((item) => right.includes(item));\n}\n\nfunction validateEvidence(\n value: unknown,\n field: string,\n errors: string[],\n): void {\n if (!Array.isArray(value)) {\n errors.push(`${field} must be an array`);\n return;\n }\n if (value.length === 0) {\n errors.push(`${field} is required for durable policy rules`);\n return;\n }\n for (const item of value) {\n if (!isRecord(item)) {\n errors.push(`${field} entries must be objects`);\n return;\n }\n if (!isOneOf(item.source, LIFEOPS_POLICY_EVIDENCE_SOURCES)) {\n errors.push(`${field}.source is unsupported`);\n }\n if (!isNonEmptyString(item.sourceId)) {\n errors.push(`${field}.sourceId is required`);\n }\n if (!isNonEmptyString(item.actorId)) {\n errors.push(`${field}.actorId is required`);\n }\n if (\n !isNonEmptyString(item.recordedAt) ||\n !isValidIsoDate(item.recordedAt)\n ) {\n errors.push(`${field}.recordedAt must be a valid ISO datetime`);\n }\n if (item.reviewId !== undefined && !isNonEmptyString(item.reviewId)) {\n errors.push(`${field}.reviewId must be a non-empty string when present`);\n }\n }\n}\n\nfunction validateSubjectSelector(value: unknown, errors: string[]): void {\n if (!isRecord(value)) {\n errors.push(\"subject must be an object\");\n return;\n }\n if (!isOneOf(value.kind, LIFEOPS_POLICY_SUBJECT_KINDS)) {\n errors.push(\"subject.kind is unsupported\");\n }\n readStringArray(value.ids, \"subject.ids\", errors);\n readStringArray(value.labels, \"subject.labels\", errors);\n if (\n value.sensitivityAtLeast !== undefined &&\n !isOneOf(value.sensitivityAtLeast, LIFEOPS_POLICY_SENSITIVITY_LEVELS)\n ) {\n errors.push(\"subject.sensitivityAtLeast is unsupported\");\n }\n if (\n value.sensitivityAtMost !== undefined &&\n !isOneOf(value.sensitivityAtMost, LIFEOPS_POLICY_SENSITIVITY_LEVELS)\n ) {\n errors.push(\"subject.sensitivityAtMost is unsupported\");\n }\n}\n\nfunction validateScopes(value: unknown, errors: string[]): void {\n if (value === undefined) return;\n if (!isRecord(value)) {\n errors.push(\"scopes must be an object\");\n return;\n }\n readEnumArray(\n value.surfaces,\n \"scopes.surfaces\",\n LIFEOPS_POLICY_SURFACES,\n errors,\n );\n readStringArray(value.regions, \"scopes.regions\", errors);\n readEnumArray(\n value.channels,\n \"scopes.channels\",\n LIFEOPS_POLICY_CHANNELS,\n errors,\n );\n readStringArray(value.contactIds, \"scopes.contactIds\", errors);\n readEnumArray(\n value.resourceKinds,\n \"scopes.resourceKinds\",\n LIFEOPS_POLICY_RESOURCE_KINDS,\n errors,\n );\n readStringArray(value.resourceIds, \"scopes.resourceIds\", errors);\n}\n\nfunction validateThresholds(value: unknown, errors: string[]): void {\n if (value === undefined) return;\n if (!isRecord(value)) {\n errors.push(\"thresholds must be an object\");\n return;\n }\n if (\n value.maxAmountUsd !== undefined &&\n !isFiniteNonNegative(value.maxAmountUsd)\n ) {\n errors.push(\"thresholds.maxAmountUsd must be a non-negative finite number\");\n }\n if (\n value.maxBulkItemCount !== undefined &&\n !isFiniteNonNegative(value.maxBulkItemCount)\n ) {\n errors.push(\n \"thresholds.maxBulkItemCount must be a non-negative finite number\",\n );\n }\n if (\n value.maxRecipientCount !== undefined &&\n !isFiniteNonNegative(value.maxRecipientCount)\n ) {\n errors.push(\n \"thresholds.maxRecipientCount must be a non-negative finite number\",\n );\n }\n if (\n value.maxSensitivity !== undefined &&\n !isOneOf(value.maxSensitivity, LIFEOPS_POLICY_SENSITIVITY_LEVELS)\n ) {\n errors.push(\"thresholds.maxSensitivity is unsupported\");\n }\n if (\n value.maxContactSensitivity !== undefined &&\n !isOneOf(value.maxContactSensitivity, LIFEOPS_POLICY_SENSITIVITY_LEVELS)\n ) {\n errors.push(\"thresholds.maxContactSensitivity is unsupported\");\n }\n}\n\nfunction validateCondition(\n value: unknown,\n index: number,\n errors: string[],\n): void {\n if (!isRecord(value)) {\n errors.push(`conditions[${index}] must be an object`);\n return;\n }\n const field = `conditions[${index}]`;\n switch (value.kind) {\n case \"amount_usd\":\n case \"bulk_item_count\":\n case \"recipient_count\":\n if (!isOneOf(value.operator, COMPARISON_OPERATORS)) {\n errors.push(`${field}.operator is unsupported`);\n }\n if (!isFiniteNonNegative(value.value)) {\n errors.push(`${field}.value must be a non-negative finite number`);\n }\n return;\n case \"request_sensitivity_at_least\":\n case \"request_sensitivity_at_most\":\n case \"contact_sensitivity_at_least\":\n case \"contact_sensitivity_at_most\":\n if (!isOneOf(value.value, LIFEOPS_POLICY_SENSITIVITY_LEVELS)) {\n errors.push(`${field}.value is unsupported`);\n }\n return;\n case \"currency_is\":\n if (!isNonEmptyString(value.value)) {\n errors.push(`${field}.value must be a non-empty string`);\n }\n return;\n default:\n errors.push(`${field}.kind is unsupported`);\n }\n}\n\nfunction validateConditions(value: unknown, errors: string[]): void {\n if (value === undefined) return;\n if (!Array.isArray(value)) {\n errors.push(\"conditions must be an array\");\n return;\n }\n for (let index = 0; index < value.length; index += 1) {\n validateCondition(value[index], index, errors);\n }\n}\n\nfunction validateEffectiveWindow(value: unknown, errors: string[]): void {\n if (value === undefined) return;\n if (!isRecord(value)) {\n errors.push(\"effectiveWindow must be an object\");\n return;\n }\n if (\n value.startsAt !== undefined &&\n (!isNonEmptyString(value.startsAt) || !isValidIsoDate(value.startsAt))\n ) {\n errors.push(\"effectiveWindow.startsAt must be a valid ISO datetime\");\n }\n if (\n value.endsAt !== undefined &&\n (!isNonEmptyString(value.endsAt) || !isValidIsoDate(value.endsAt))\n ) {\n errors.push(\"effectiveWindow.endsAt must be a valid ISO datetime\");\n }\n if (\n value.timezone !== undefined &&\n (!isNonEmptyString(value.timezone) || !isValidTimeZone(value.timezone))\n ) {\n errors.push(\"effectiveWindow.timezone must be a valid IANA timezone\");\n }\n if (value.daysOfWeek !== undefined) {\n if (!Array.isArray(value.daysOfWeek)) {\n errors.push(\"effectiveWindow.daysOfWeek must be an array\");\n } else {\n for (const day of value.daysOfWeek) {\n if (!Number.isInteger(day) || day < 0 || day > 6) {\n errors.push(\n \"effectiveWindow.daysOfWeek entries must be integers 0..6\",\n );\n break;\n }\n }\n }\n }\n const start = value.startMinuteOfDay;\n const end = value.endMinuteOfDay;\n if (\n start !== undefined &&\n (typeof start !== \"number\" ||\n !Number.isInteger(start) ||\n start < 0 ||\n start > 1439)\n ) {\n errors.push(\"effectiveWindow.startMinuteOfDay must be an integer 0..1439\");\n }\n if (\n end !== undefined &&\n (typeof end !== \"number\" || !Number.isInteger(end) || end < 1 || end > 1440)\n ) {\n errors.push(\"effectiveWindow.endMinuteOfDay must be an integer 1..1440\");\n }\n if ((start === undefined) !== (end === undefined)) {\n errors.push(\n \"effectiveWindow.startMinuteOfDay and endMinuteOfDay must be provided together\",\n );\n }\n}\n\nexport function validateLifeOpsPolicyRule(\n rule: unknown,\n): LifeOpsPolicyRuleValidation {\n const errors: string[] = [];\n const ruleId =\n isRecord(rule) && isNonEmptyString(rule.id) ? rule.id.trim() : \"unknown\";\n\n if (!isRecord(rule)) {\n return {\n valid: false,\n ruleId,\n errors: [\"rule must be an object\"],\n };\n }\n\n if (rule.kind !== \"lifeops_policy_rule\") {\n errors.push(\"kind must be lifeops_policy_rule\");\n }\n if (!isNonEmptyString(rule.id)) {\n errors.push(\"id is required\");\n }\n if (rule.version !== 1) {\n errors.push(\"version must be 1\");\n }\n readEnumArray(\n rule.operations,\n \"operations\",\n LIFEOPS_POLICY_OPERATIONS,\n errors,\n );\n if (Array.isArray(rule.operations) && rule.operations.length === 0) {\n errors.push(\"operations must contain at least one operation\");\n }\n if (!isOneOf(rule.effect, LIFEOPS_POLICY_EFFECTS)) {\n errors.push(\"effect is unsupported\");\n }\n validateSubjectSelector(rule.subject, errors);\n validateScopes(rule.scopes, errors);\n validateConditions(rule.conditions, errors);\n validateThresholds(rule.thresholds, errors);\n if (!Number.isInteger(rule.precedence)) {\n errors.push(\"precedence must be an integer\");\n }\n validateEffectiveWindow(rule.effectiveWindow, errors);\n if (\n rule.expiresAt !== undefined &&\n (!isNonEmptyString(rule.expiresAt) || !isValidIsoDate(rule.expiresAt))\n ) {\n errors.push(\"expiresAt must be a valid ISO datetime\");\n }\n validateEvidence(rule.evidence, \"evidence\", errors);\n if (!isOneOf(rule.reviewState, LIFEOPS_POLICY_REVIEW_STATES)) {\n errors.push(\"reviewState is unsupported\");\n }\n\n return {\n valid: errors.length === 0,\n ruleId,\n errors,\n };\n}\n\nfunction validateRequest(\n request: LifeOpsPolicyEvaluationRequest,\n): readonly string[] {\n const errors: string[] = [];\n if (!isNonEmptyString(request.requestId)) {\n errors.push(\"requestId is required\");\n }\n if (!isOneOf(request.operation, LIFEOPS_POLICY_OPERATIONS)) {\n errors.push(\"operation is unsupported\");\n }\n if (!isNonEmptyString(request.requestedBy)) {\n errors.push(\"requestedBy is required\");\n }\n if (!isOneOf(request.sensitivity, LIFEOPS_POLICY_SENSITIVITY_LEVELS)) {\n errors.push(\"sensitivity is unsupported\");\n }\n if (\n request.contactSensitivity !== undefined &&\n !isOneOf(request.contactSensitivity, LIFEOPS_POLICY_SENSITIVITY_LEVELS)\n ) {\n errors.push(\"contactSensitivity is unsupported\");\n }\n if (!isRecord(request.scope)) {\n errors.push(\"scope must be an object\");\n } else {\n if (!isOneOf(request.scope.surface, LIFEOPS_POLICY_SURFACES)) {\n errors.push(\"scope.surface is unsupported\");\n }\n if (\n request.scope.channel !== undefined &&\n !isOneOf(request.scope.channel, LIFEOPS_POLICY_CHANNELS)\n ) {\n errors.push(\"scope.channel is unsupported\");\n }\n if (request.scope.resource) {\n if (!isRecord(request.scope.resource)) {\n errors.push(\"scope.resource must be an object\");\n } else {\n if (\n !isOneOf(request.scope.resource.kind, LIFEOPS_POLICY_RESOURCE_KINDS)\n ) {\n errors.push(\"scope.resource.kind is unsupported\");\n }\n if (!isNonEmptyString(request.scope.resource.id)) {\n errors.push(\"scope.resource.id is required\");\n }\n }\n }\n }\n if (!isRecord(request.subject)) {\n errors.push(\"subject must be an object\");\n } else {\n if (!isOneOf(request.subject.kind, LIFEOPS_POLICY_SUBJECT_KINDS)) {\n errors.push(\"subject.kind is unsupported\");\n }\n if (!isNonEmptyString(request.subject.id)) {\n errors.push(\"subject.id is required\");\n }\n if (\n !isOneOf(request.subject.sensitivity, LIFEOPS_POLICY_SENSITIVITY_LEVELS)\n ) {\n errors.push(\"subject.sensitivity is unsupported\");\n }\n }\n if (\n request.amountUsd !== undefined &&\n !isFiniteNonNegative(request.amountUsd)\n ) {\n errors.push(\"amountUsd must be a non-negative finite number\");\n }\n if (\n request.operation === \"spend_money\" &&\n !isFiniteNonNegative(request.amountUsd)\n ) {\n errors.push(\"amountUsd is required for spend_money\");\n }\n if (\n request.bulkItemCount !== undefined &&\n !isFiniteNonNegative(request.bulkItemCount)\n ) {\n errors.push(\"bulkItemCount must be a non-negative finite number\");\n }\n if (\n request.operation === \"bulk_cleanup\" &&\n !isFiniteNonNegative(request.bulkItemCount)\n ) {\n errors.push(\"bulkItemCount is required for bulk_cleanup\");\n }\n if (\n request.recipientCount !== undefined &&\n !isFiniteNonNegative(request.recipientCount)\n ) {\n errors.push(\"recipientCount must be a non-negative finite number\");\n }\n if (request.now !== undefined && parseDateInput(request.now) === null) {\n errors.push(\"now must be a valid date\");\n }\n return errors;\n}\n\nfunction evidenceIds(rule: LifeOpsPolicyRule): readonly string[] {\n return rule.evidence.map((item) => `${item.source}:${item.sourceId}`);\n}\n\nfunction calculateSpecificity(rule: LifeOpsPolicyRule): number {\n let score = 0;\n if (rule.operations.length < LIFEOPS_POLICY_OPERATIONS.length) score += 2;\n if (rule.subject.kind !== \"any\") score += 2;\n score += (rule.subject.ids?.length ?? 0) * 4;\n score += (rule.subject.labels?.length ?? 0) * 2;\n if (rule.subject.sensitivityAtLeast) score += 1;\n if (rule.subject.sensitivityAtMost) score += 1;\n\n const scopes = rule.scopes;\n if (scopes) {\n score += (scopes.surfaces?.length ?? 0) * 2;\n score += (scopes.regions?.length ?? 0) * 2;\n score += (scopes.channels?.length ?? 0) * 2;\n score += (scopes.contactIds?.length ?? 0) * 4;\n score += (scopes.resourceKinds?.length ?? 0) * 2;\n score += (scopes.resourceIds?.length ?? 0) * 4;\n }\n\n const thresholds = rule.thresholds;\n if (thresholds) {\n if (thresholds.maxAmountUsd !== undefined) score += 2;\n if (thresholds.maxBulkItemCount !== undefined) score += 2;\n if (thresholds.maxRecipientCount !== undefined) score += 2;\n if (thresholds.maxSensitivity !== undefined) score += 1;\n if (thresholds.maxContactSensitivity !== undefined) score += 1;\n }\n\n score += (rule.conditions?.length ?? 0) * 3;\n if (rule.effectiveWindow) score += 1;\n return score;\n}\n\nfunction effectiveWindowContains(\n window: LifeOpsPolicyEffectiveWindow,\n now: Date,\n): boolean {\n if (window.startsAt && now.getTime() < Date.parse(window.startsAt)) {\n return false;\n }\n if (window.endsAt && now.getTime() >= Date.parse(window.endsAt)) {\n return false;\n }\n if (window.daysOfWeek || window.startMinuteOfDay !== undefined) {\n const timezone = window.timezone ?? \"UTC\";\n const parts = new Intl.DateTimeFormat(\"en-US\", {\n timeZone: timezone,\n weekday: \"short\",\n hour12: false,\n hour: \"2-digit\",\n minute: \"2-digit\",\n }).formatToParts(now);\n const weekday = parts.find((part) => part.type === \"weekday\")?.value;\n const day = weekdayToIndex(weekday);\n if (\n window.daysOfWeek &&\n (day === null || !window.daysOfWeek.includes(day))\n ) {\n return false;\n }\n if (\n window.startMinuteOfDay !== undefined &&\n window.endMinuteOfDay !== undefined\n ) {\n const hourText = parts.find((part) => part.type === \"hour\")?.value;\n const minuteText = parts.find((part) => part.type === \"minute\")?.value;\n const hour = hourText ? Number.parseInt(hourText, 10) % 24 : 0;\n const minute = minuteText ? Number.parseInt(minuteText, 10) : 0;\n const minuteOfDay = hour * 60 + minute;\n return minuteWithinWindow(\n minuteOfDay,\n window.startMinuteOfDay,\n window.endMinuteOfDay,\n );\n }\n }\n return true;\n}\n\nfunction weekdayToIndex(value: string | undefined): number | null {\n switch (value) {\n case \"Sun\":\n return 0;\n case \"Mon\":\n return 1;\n case \"Tue\":\n return 2;\n case \"Wed\":\n return 3;\n case \"Thu\":\n return 4;\n case \"Fri\":\n return 5;\n case \"Sat\":\n return 6;\n default:\n return null;\n }\n}\n\nfunction minuteWithinWindow(\n minuteOfDay: number,\n startMinute: number,\n endMinute: number,\n): boolean {\n if (startMinute === endMinute) return false;\n if (startMinute > endMinute) {\n return minuteOfDay >= startMinute || minuteOfDay < endMinute;\n }\n return minuteOfDay >= startMinute && minuteOfDay < endMinute;\n}\n\nfunction matchesSubject(\n selector: LifeOpsPolicySubjectSelector,\n subject: LifeOpsPolicyRequestSubject,\n): boolean {\n if (selector.kind !== \"any\" && selector.kind !== subject.kind) {\n return false;\n }\n if (selector.ids && !selector.ids.includes(subject.id)) {\n return false;\n }\n if (selector.labels && !arrayIntersects(selector.labels, subject.labels)) {\n return false;\n }\n if (\n selector.sensitivityAtLeast &&\n sensitivityCompare(subject.sensitivity, selector.sensitivityAtLeast) < 0\n ) {\n return false;\n }\n if (\n selector.sensitivityAtMost &&\n sensitivityCompare(subject.sensitivity, selector.sensitivityAtMost) > 0\n ) {\n return false;\n }\n return true;\n}\n\nfunction matchesScope(\n scopes: LifeOpsPolicyScopeSelector | undefined,\n request: LifeOpsPolicyEvaluationRequest,\n): boolean {\n if (!scopes) return true;\n if (scopes.surfaces && !scopes.surfaces.includes(request.scope.surface)) {\n return false;\n }\n if (scopes.regions) {\n const requestRegion = normalizeRegion(request.scope.region);\n const allowedRegions = scopes.regions.map((region) =>\n normalizeRegion(region),\n );\n if (!requestRegion || !allowedRegions.includes(requestRegion)) {\n return false;\n }\n }\n if (\n scopes.channels &&\n (!request.scope.channel || !scopes.channels.includes(request.scope.channel))\n ) {\n return false;\n }\n if (\n scopes.contactIds &&\n (!request.scope.contactId ||\n !scopes.contactIds.includes(request.scope.contactId))\n ) {\n return false;\n }\n if (\n scopes.resourceKinds &&\n (!request.scope.resource ||\n !scopes.resourceKinds.includes(request.scope.resource.kind))\n ) {\n return false;\n }\n if (\n scopes.resourceIds &&\n (!request.scope.resource ||\n !scopes.resourceIds.includes(request.scope.resource.id))\n ) {\n return false;\n }\n return true;\n}\n\nfunction thresholdsSatisfied(\n thresholds: LifeOpsPolicyThresholds | undefined,\n request: LifeOpsPolicyEvaluationRequest,\n): boolean {\n if (!thresholds) return true;\n if (\n thresholds.maxAmountUsd !== undefined &&\n (request.amountUsd === undefined ||\n request.amountUsd > thresholds.maxAmountUsd)\n ) {\n return false;\n }\n if (\n thresholds.maxBulkItemCount !== undefined &&\n (request.bulkItemCount === undefined ||\n request.bulkItemCount > thresholds.maxBulkItemCount)\n ) {\n return false;\n }\n if (\n thresholds.maxRecipientCount !== undefined &&\n (request.recipientCount === undefined ||\n request.recipientCount > thresholds.maxRecipientCount)\n ) {\n return false;\n }\n if (\n thresholds.maxSensitivity !== undefined &&\n sensitivityCompare(request.sensitivity, thresholds.maxSensitivity) > 0\n ) {\n return false;\n }\n if (\n thresholds.maxContactSensitivity !== undefined &&\n (request.contactSensitivity === undefined ||\n sensitivityCompare(\n request.contactSensitivity,\n thresholds.maxContactSensitivity,\n ) > 0)\n ) {\n return false;\n }\n return true;\n}\n\nfunction conditionSatisfied(\n condition: LifeOpsPolicyCondition,\n request: LifeOpsPolicyEvaluationRequest,\n): boolean {\n switch (condition.kind) {\n case \"amount_usd\":\n return (\n request.amountUsd !== undefined &&\n compareNumber(request.amountUsd, condition.operator, condition.value)\n );\n case \"bulk_item_count\":\n return (\n request.bulkItemCount !== undefined &&\n compareNumber(\n request.bulkItemCount,\n condition.operator,\n condition.value,\n )\n );\n case \"recipient_count\":\n return (\n request.recipientCount !== undefined &&\n compareNumber(\n request.recipientCount,\n condition.operator,\n condition.value,\n )\n );\n case \"request_sensitivity_at_least\":\n return sensitivityCompare(request.sensitivity, condition.value) >= 0;\n case \"request_sensitivity_at_most\":\n return sensitivityCompare(request.sensitivity, condition.value) <= 0;\n case \"contact_sensitivity_at_least\":\n return (\n request.contactSensitivity !== undefined &&\n sensitivityCompare(request.contactSensitivity, condition.value) >= 0\n );\n case \"contact_sensitivity_at_most\":\n return (\n request.contactSensitivity !== undefined &&\n sensitivityCompare(request.contactSensitivity, condition.value) <= 0\n );\n case \"currency_is\":\n return (\n request.currency !== undefined &&\n request.currency.trim().toUpperCase() ===\n condition.value.trim().toUpperCase()\n );\n }\n}\n\nfunction conditionsSatisfied(\n conditions: readonly LifeOpsPolicyCondition[] | undefined,\n request: LifeOpsPolicyEvaluationRequest,\n): boolean {\n if (!conditions) return true;\n return conditions.every((condition) =>\n conditionSatisfied(condition, request),\n );\n}\n\nfunction matchRule(\n rule: LifeOpsPolicyRule,\n request: LifeOpsPolicyEvaluationRequest,\n now: Date,\n): RuleMatch {\n if (rule.reviewState !== \"active\") {\n return {\n matched: false,\n ignored: { ruleId: rule.id, reason: \"review_state_not_active\" },\n };\n }\n if (!rule.operations.includes(request.operation)) {\n return {\n matched: false,\n ignored: { ruleId: rule.id, reason: \"operation_mismatch\" },\n };\n }\n if (rule.expiresAt && now.getTime() >= Date.parse(rule.expiresAt)) {\n return {\n matched: false,\n ignored: { ruleId: rule.id, reason: \"expired\" },\n };\n }\n if (\n rule.effectiveWindow &&\n !effectiveWindowContains(rule.effectiveWindow, now)\n ) {\n return {\n matched: false,\n ignored: { ruleId: rule.id, reason: \"outside_effective_window\" },\n };\n }\n if (!matchesSubject(rule.subject, request.subject)) {\n return {\n matched: false,\n ignored: { ruleId: rule.id, reason: \"subject_mismatch\" },\n };\n }\n if (!matchesScope(rule.scopes, request)) {\n return {\n matched: false,\n ignored: { ruleId: rule.id, reason: \"scope_mismatch\" },\n };\n }\n if (!thresholdsSatisfied(rule.thresholds, request)) {\n return {\n matched: false,\n ignored: { ruleId: rule.id, reason: \"threshold_not_satisfied\" },\n };\n }\n if (!conditionsSatisfied(rule.conditions, request)) {\n return {\n matched: false,\n ignored: { ruleId: rule.id, reason: \"condition_not_satisfied\" },\n };\n }\n\n const specificity = calculateSpecificity(rule);\n return {\n matched: true,\n rule,\n auditRef: {\n ruleId: rule.id,\n effect: rule.effect,\n precedence: rule.precedence,\n specificity,\n evidenceIds: evidenceIds(rule),\n },\n };\n}\n\nfunction buildDecision(args: {\n request: LifeOpsPolicyEvaluationRequest;\n now: Date;\n outcome: LifeOpsPolicyDecisionOutcome;\n approvalMode: \"approval_queue\" | \"prompt_user_first\" | null;\n reasons: readonly LifeOpsPolicyDecisionReason[];\n selectedRules: readonly LifeOpsPolicyRuleAuditRef[];\n matchedRules: readonly LifeOpsPolicyRuleAuditRef[];\n ignoredRules: readonly LifeOpsPolicyIgnoredRuleRecord[];\n invalidRules: readonly LifeOpsPolicyInvalidRuleRecord[];\n}): LifeOpsPolicyDecision {\n const reasonCodes = args.reasons.map((reason) => reason.code);\n const evaluatedAt = args.now.toISOString();\n return {\n requestId: args.request.requestId,\n operation: args.request.operation,\n outcome: args.outcome,\n approvalMode: args.approvalMode,\n reasons: args.reasons,\n record: {\n decisionId: `lifeops-policy:${args.request.requestId}:${args.now.getTime()}`,\n evaluatedAt,\n requestId: args.request.requestId,\n requestedBy: args.request.requestedBy,\n operation: args.request.operation,\n outcome: args.outcome,\n approvalMode: args.approvalMode,\n reasonCodes,\n selectedRules: args.selectedRules,\n matchedRules: args.matchedRules,\n ignoredRules: args.ignoredRules,\n invalidRules: args.invalidRules,\n },\n };\n}\n\nfunction chooseTopMatches(\n matches: readonly {\n readonly rule: LifeOpsPolicyRule;\n readonly auditRef: LifeOpsPolicyRuleAuditRef;\n }[],\n): readonly {\n readonly rule: LifeOpsPolicyRule;\n readonly auditRef: LifeOpsPolicyRuleAuditRef;\n}[] {\n const maxPrecedence = Math.max(\n ...matches.map((match) => match.auditRef.precedence),\n );\n const samePrecedence = matches.filter(\n (match) => match.auditRef.precedence === maxPrecedence,\n );\n const maxSpecificity = Math.max(\n ...samePrecedence.map((match) => match.auditRef.specificity),\n );\n return samePrecedence.filter(\n (match) => match.auditRef.specificity === maxSpecificity,\n );\n}\n\nfunction chooseEffect(\n matches: readonly LifeOpsPolicyRule[],\n): LifeOpsPolicyEffect {\n let effect: LifeOpsPolicyEffect = \"allow\";\n for (const match of matches) {\n if (EFFECT_SEVERITY[match.effect] > EFFECT_SEVERITY[effect]) {\n effect = match.effect;\n }\n if (\n EFFECT_SEVERITY[match.effect] === EFFECT_SEVERITY[effect] &&\n match.effect === \"prompt_user_first\"\n ) {\n effect = \"prompt_user_first\";\n }\n }\n return effect;\n}\n\nfunction reasonForEffect(\n effect: LifeOpsPolicyEffect,\n): LifeOpsPolicyDecisionReasonCode {\n switch (effect) {\n case \"allow\":\n return \"allowed_by_rule\";\n case \"deny\":\n return \"denied_by_rule\";\n case \"require_approval\":\n return \"approval_required_by_rule\";\n case \"prompt_user_first\":\n return \"prompt_user_first\";\n }\n}\n\nexport class LifeOpsPolicyMemoryEvaluator {\n private readonly rules: readonly LifeOpsPolicyRule[];\n\n constructor(rules: readonly LifeOpsPolicyRule[]) {\n this.rules = rules;\n }\n\n evaluate(request: LifeOpsPolicyEvaluationRequest): LifeOpsPolicyDecision {\n return evaluateLifeOpsPolicyMemory(request, this.rules);\n }\n}\n\nexport function evaluateLifeOpsPolicyMemory(\n request: LifeOpsPolicyEvaluationRequest,\n rules: readonly LifeOpsPolicyRule[],\n): LifeOpsPolicyDecision {\n const now = parseDateInput(request.now);\n const effectiveNow = now ?? new Date(0);\n const requestErrors = validateRequest(request);\n if (requestErrors.length > 0 || now === null) {\n const errors =\n now === null\n ? [...requestErrors, \"now must be a valid date\"]\n : requestErrors;\n return buildDecision({\n request,\n now: effectiveNow,\n outcome: \"deny\",\n approvalMode: null,\n reasons: [\n {\n code: \"malformed_request\",\n detail: { errorCount: errors.length },\n },\n ],\n selectedRules: [],\n matchedRules: [],\n ignoredRules: [],\n invalidRules: [\n {\n ruleId: \"request\",\n errors,\n },\n ],\n });\n }\n\n const invalidRules: LifeOpsPolicyInvalidRuleRecord[] = [];\n const seenRuleIds = new Set<string>();\n\n for (const rule of rules) {\n const validation = validateLifeOpsPolicyRule(rule);\n if (!validation.valid) {\n invalidRules.push({\n ruleId: validation.ruleId,\n errors: validation.errors,\n });\n }\n if (seenRuleIds.has(validation.ruleId)) {\n invalidRules.push({\n ruleId: validation.ruleId,\n errors: [\"duplicate rule id\"],\n });\n }\n seenRuleIds.add(validation.ruleId);\n }\n\n if (invalidRules.length > 0) {\n const duplicateRuleIds = invalidRules.filter((rule) =>\n rule.errors.includes(\"duplicate rule id\"),\n );\n const reasons: LifeOpsPolicyDecisionReason[] = [\n {\n code: \"malformed_rule\",\n detail: { invalidRuleCount: invalidRules.length },\n },\n ];\n if (duplicateRuleIds.length > 0) {\n reasons.push({\n code: \"duplicate_rule_id\",\n ruleIds: duplicateRuleIds.map((rule) => rule.ruleId),\n });\n }\n return buildDecision({\n request,\n now: effectiveNow,\n outcome: \"deny\",\n approvalMode: null,\n reasons,\n selectedRules: [],\n matchedRules: [],\n ignoredRules: [],\n invalidRules,\n });\n }\n\n const matchedRules: {\n readonly rule: LifeOpsPolicyRule;\n readonly auditRef: LifeOpsPolicyRuleAuditRef;\n }[] = [];\n const ignoredRules: LifeOpsPolicyIgnoredRuleRecord[] = [];\n\n for (const rule of rules) {\n const result = matchRule(rule, request, effectiveNow);\n if (result.matched === true) {\n matchedRules.push({\n rule: result.rule,\n auditRef: result.auditRef,\n });\n } else {\n ignoredRules.push(result.ignored);\n }\n }\n\n if (matchedRules.length === 0) {\n const fallback = DEFAULT_OUTCOME_BY_OPERATION[request.operation];\n return buildDecision({\n request,\n now: effectiveNow,\n outcome: fallback.outcome,\n approvalMode:\n fallback.outcome === \"require_approval\" ? \"approval_queue\" : null,\n reasons: [{ code: fallback.reasonCode }],\n selectedRules: [],\n matchedRules: [],\n ignoredRules,\n invalidRules: [],\n });\n }\n\n const topMatches = chooseTopMatches(matchedRules);\n const selectedEffect = chooseEffect(topMatches.map((match) => match.rule));\n const selectedRules = topMatches\n .filter((match) => match.rule.effect === selectedEffect)\n .map((match) => match.auditRef);\n const topEffects = new Set(topMatches.map((match) => match.rule.effect));\n const reasons: LifeOpsPolicyDecisionReason[] = [\n {\n code: reasonForEffect(selectedEffect),\n ruleIds: selectedRules.map((rule) => rule.ruleId),\n },\n ];\n if (topEffects.size > 1) {\n reasons.push({\n code: \"conflicting_top_rank_rules_resolved_conservatively\",\n ruleIds: topMatches.map((match) => match.rule.id),\n });\n }\n\n return buildDecision({\n request,\n now: effectiveNow,\n outcome: OUTCOME_BY_EFFECT[selectedEffect],\n approvalMode: APPROVAL_MODE_BY_EFFECT[selectedEffect],\n reasons,\n selectedRules,\n matchedRules: matchedRules.map((match) => match.auditRef),\n ignoredRules,\n invalidRules: [],\n });\n}\n"],"mappings":"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","names":["reasons"]}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LLM-based priority scoring for the LifeOps inbox.
|
|
3
|
+
*
|
|
4
|
+
* This module replaces the v1 keyword/regex heuristic in
|
|
5
|
+
* `service-mixin-inbox.ts:scoreSmallGroupThread`. The scorer asks a small,
|
|
6
|
+
* fast model to rate each message on a 0–100 importance scale and to bucket
|
|
7
|
+
* it into one of three categories (`important` / `planning` / `casual`).
|
|
8
|
+
*
|
|
9
|
+
* Behavior:
|
|
10
|
+
* - Batches up to ~10 messages per call to keep prompts small.
|
|
11
|
+
* - Caches results in-memory keyed by `(messageId, contentHash, model)` so
|
|
12
|
+
* re-fetches inside a single runtime are free.
|
|
13
|
+
* - Concurrency-capped to 4 parallel batches.
|
|
14
|
+
* - If the LLM call or parser fails, returns `null` per message so the caller
|
|
15
|
+
* can fall back to the v1 heuristic.
|
|
16
|
+
*/
|
|
17
|
+
import type { IAgentRuntime } from "@elizaos/core";
|
|
18
|
+
import type { LifeOpsInboxMessage } from "@elizaos/shared";
|
|
19
|
+
export type PriorityCategory = "important" | "planning" | "casual";
|
|
20
|
+
export interface PriorityScore {
|
|
21
|
+
/** 0–100 score; higher = more important. */
|
|
22
|
+
score: number;
|
|
23
|
+
category: PriorityCategory;
|
|
24
|
+
flags: string[];
|
|
25
|
+
}
|
|
26
|
+
export interface ScoreInboxMessagesOptions {
|
|
27
|
+
/** Used as the user identity in the prompt. */
|
|
28
|
+
ownerName?: string | null;
|
|
29
|
+
/** Optional list of important relationships shown to the model as priors. */
|
|
30
|
+
topRelationships?: string[];
|
|
31
|
+
/**
|
|
32
|
+
* Optional model id forwarded as the `model` parameter to `runtime.useModel`.
|
|
33
|
+
* When omitted the runtime's default `TEXT_SMALL` model handles the call.
|
|
34
|
+
*/
|
|
35
|
+
model?: string | null;
|
|
36
|
+
/** Cap on parallel batches. Defaults to 4. */
|
|
37
|
+
concurrency?: number;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Score a batch of inbox messages with the LLM. Returns a parallel array of
|
|
41
|
+
* scores; entries are `null` when the LLM call or parser fails for that
|
|
42
|
+
* batch — callers should fall back to a heuristic for those messages.
|
|
43
|
+
*
|
|
44
|
+
* The scorer is cache-aware: messages whose `(id, content, model)` was
|
|
45
|
+
* already scored within this process are returned from cache without
|
|
46
|
+
* triggering a model call.
|
|
47
|
+
*/
|
|
48
|
+
export declare function scoreInboxMessages(runtime: IAgentRuntime, messages: LifeOpsInboxMessage[], opts?: ScoreInboxMessagesOptions): Promise<Array<PriorityScore | null>>;
|
|
49
|
+
/** Test seam — reset the in-process cache between unit tests. */
|
|
50
|
+
export declare function __resetPriorityScoringCacheForTests(): void;
|
|
51
|
+
//# sourceMappingURL=priority-scoring.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"priority-scoring.d.ts","sourceRoot":"","sources":["../../src/lifeops/priority-scoring.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAOnD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAE3D,MAAM,MAAM,gBAAgB,GAAG,WAAW,GAAG,UAAU,GAAG,QAAQ,CAAC;AAEnE,MAAM,WAAW,aAAa;IAC5B,4CAA4C;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,yBAAyB;IACxC,+CAA+C;IAC/C,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,6EAA6E;IAC7E,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,8CAA8C;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AA8SD;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,aAAa,EACtB,QAAQ,EAAE,mBAAmB,EAAE,EAC/B,IAAI,GAAE,yBAA8B,GACnC,OAAO,CAAC,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC,CA2EtC;AAED,iEAAiE;AACjE,wBAAgB,mCAAmC,IAAI,IAAI,CAE1D"}
|
|
@@ -0,0 +1,305 @@
|
|
|
1
|
+
import {
|
|
2
|
+
logger,
|
|
3
|
+
ModelType,
|
|
4
|
+
parseJsonModelRecord,
|
|
5
|
+
runWithTrajectoryContext
|
|
6
|
+
} from "@elizaos/core";
|
|
7
|
+
const BATCH_SIZE = 10;
|
|
8
|
+
const DEFAULT_CONCURRENCY = 4;
|
|
9
|
+
const CACHE_MAX_ENTRIES = 5e3;
|
|
10
|
+
const cache = /* @__PURE__ */ new Map();
|
|
11
|
+
function cacheGet(key) {
|
|
12
|
+
const value = cache.get(key);
|
|
13
|
+
if (value !== void 0) {
|
|
14
|
+
cache.delete(key);
|
|
15
|
+
cache.set(key, value);
|
|
16
|
+
}
|
|
17
|
+
return value;
|
|
18
|
+
}
|
|
19
|
+
function cacheSet(key, value) {
|
|
20
|
+
if (cache.size >= CACHE_MAX_ENTRIES) {
|
|
21
|
+
const dropCount = Math.floor(CACHE_MAX_ENTRIES * 0.2);
|
|
22
|
+
let dropped = 0;
|
|
23
|
+
for (const k of cache.keys()) {
|
|
24
|
+
cache.delete(k);
|
|
25
|
+
dropped += 1;
|
|
26
|
+
if (dropped >= dropCount) break;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
cache.set(key, value);
|
|
30
|
+
}
|
|
31
|
+
function contentHash(text) {
|
|
32
|
+
let h = 5381;
|
|
33
|
+
for (let i = 0; i < text.length; i += 1) {
|
|
34
|
+
h = (h << 5) + h + text.charCodeAt(i) | 0;
|
|
35
|
+
}
|
|
36
|
+
return (h >>> 0).toString(36);
|
|
37
|
+
}
|
|
38
|
+
function cacheKey(message, modelId) {
|
|
39
|
+
const text = `${message.subject ?? ""}|${message.snippet}`;
|
|
40
|
+
return `${modelId}::${message.id}::${contentHash(text)}`;
|
|
41
|
+
}
|
|
42
|
+
const VALID_CATEGORIES = /* @__PURE__ */ new Set([
|
|
43
|
+
"important",
|
|
44
|
+
"planning",
|
|
45
|
+
"casual"
|
|
46
|
+
]);
|
|
47
|
+
function isRecord(value) {
|
|
48
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
49
|
+
}
|
|
50
|
+
function promptValue(value, maxLength) {
|
|
51
|
+
const normalized = (value ?? "").slice(0, maxLength).replace(/\s+/g, " ");
|
|
52
|
+
const trimmed = normalized.trim();
|
|
53
|
+
return trimmed.length > 0 ? trimmed : "null";
|
|
54
|
+
}
|
|
55
|
+
function buildPrompt(batch, opts) {
|
|
56
|
+
const lines = [];
|
|
57
|
+
lines.push(
|
|
58
|
+
"Score each inbox message. For each one decide:",
|
|
59
|
+
"- score: integer 0\u2013100 reflecting how much the user should care right now (100 = drop everything; 0 = ignorable).",
|
|
60
|
+
"- category: one of:",
|
|
61
|
+
" - important: high signal, demands attention or action soon",
|
|
62
|
+
" - planning: schedules, dates, times, RSVPs, meeting coordination",
|
|
63
|
+
" - casual: chit-chat, social, low-stakes notifications",
|
|
64
|
+
"- flags: zero or more short tags from { mention, question, deadline, meeting, money, urgent, group_call, ask }",
|
|
65
|
+
"",
|
|
66
|
+
"Calibration:",
|
|
67
|
+
"- Direct DMs from real people > group chatter > newsletters/automation.",
|
|
68
|
+
"- Mentions of the user, direct questions, or scheduling/dates push score above 70.",
|
|
69
|
+
"- Pure social pleasantries with no ask and no time element belong in 'casual' with score < 35."
|
|
70
|
+
);
|
|
71
|
+
if (opts.ownerName && opts.ownerName.trim().length > 0) {
|
|
72
|
+
lines.push(
|
|
73
|
+
"",
|
|
74
|
+
"Owner context:",
|
|
75
|
+
`ownerName: ${promptValue(opts.ownerName, 160)}`
|
|
76
|
+
);
|
|
77
|
+
}
|
|
78
|
+
if (opts.topRelationships && opts.topRelationships.length > 0) {
|
|
79
|
+
lines.push(
|
|
80
|
+
"",
|
|
81
|
+
"Important contacts (treat their messages as higher priority):",
|
|
82
|
+
opts.topRelationships.slice(0, 12).map(
|
|
83
|
+
(name, index) => `importantContacts[${index}]: ${promptValue(name, 160)}`
|
|
84
|
+
).join("\n")
|
|
85
|
+
);
|
|
86
|
+
}
|
|
87
|
+
lines.push("", "Messages:");
|
|
88
|
+
for (const [index, message] of batch.entries()) {
|
|
89
|
+
lines.push(
|
|
90
|
+
`messages[${index}]:`,
|
|
91
|
+
` from: ${promptValue(message.sender.displayName, 160)}`,
|
|
92
|
+
` channel: ${promptValue(message.channel, 80)}`,
|
|
93
|
+
` chatType: ${promptValue(message.chatType ?? "dm", 40)}`,
|
|
94
|
+
` participantCount: ${typeof message.participantCount === "number" ? message.participantCount : "null"}`,
|
|
95
|
+
` subject: ${promptValue(message.subject, 200)}`,
|
|
96
|
+
` snippet: ${promptValue(message.snippet, 600)}`
|
|
97
|
+
);
|
|
98
|
+
}
|
|
99
|
+
lines.push(
|
|
100
|
+
"",
|
|
101
|
+
"Return JSON only as a single object. No prose, markdown, code fences, or hidden reasoning.",
|
|
102
|
+
`Return exactly ${batch.length} zero-based scores records aligned to messages[0] through messages[${batch.length - 1}].`,
|
|
103
|
+
'Use this shape: {"scores":[{"score":82,"category":"important","flags":["question","deadline"]}]}',
|
|
104
|
+
"score is an integer 0-100. category is important, planning, or casual.",
|
|
105
|
+
"flags is an array of tags from mention, question, deadline, meeting, money, urgent, group_call, ask."
|
|
106
|
+
);
|
|
107
|
+
return lines.join("\n");
|
|
108
|
+
}
|
|
109
|
+
const STRUCTURED_CODE_FENCE_PATTERN = /^\s*```(?:json|json|json5)?\s*\r?\n?([\s\S]*?)\r?\n?```\s*$/i;
|
|
110
|
+
function stripModelWrapper(raw) {
|
|
111
|
+
let candidate = raw.trim();
|
|
112
|
+
if (candidate.length === 0) {
|
|
113
|
+
throw new Error("priority scoring returned an empty response");
|
|
114
|
+
}
|
|
115
|
+
const thinkEnd = candidate.indexOf("</think>");
|
|
116
|
+
if (candidate.startsWith("<think>") && thinkEnd !== -1) {
|
|
117
|
+
candidate = candidate.slice(thinkEnd + "</think>".length).trim();
|
|
118
|
+
}
|
|
119
|
+
const fenced = candidate.match(STRUCTURED_CODE_FENCE_PATTERN);
|
|
120
|
+
if (fenced) {
|
|
121
|
+
candidate = (fenced[1] ?? "").trim();
|
|
122
|
+
}
|
|
123
|
+
return candidate;
|
|
124
|
+
}
|
|
125
|
+
function parseScoreNumber(value) {
|
|
126
|
+
const score = typeof value === "number" ? value : typeof value === "string" ? Number(value.trim()) : Number.NaN;
|
|
127
|
+
if (!Number.isFinite(score)) {
|
|
128
|
+
throw new Error("priority scoring score is not a finite number");
|
|
129
|
+
}
|
|
130
|
+
return Math.max(0, Math.min(100, Math.round(score)));
|
|
131
|
+
}
|
|
132
|
+
function parseCategory(value) {
|
|
133
|
+
const category = typeof value === "string" ? value.trim() : "";
|
|
134
|
+
if (!VALID_CATEGORIES.has(category)) {
|
|
135
|
+
throw new Error("priority scoring category is not a valid enum");
|
|
136
|
+
}
|
|
137
|
+
return category;
|
|
138
|
+
}
|
|
139
|
+
function parseFlags(value) {
|
|
140
|
+
if (Array.isArray(value)) {
|
|
141
|
+
return value.flatMap((entry) => parseFlags(entry));
|
|
142
|
+
}
|
|
143
|
+
if (typeof value !== "string") {
|
|
144
|
+
return [];
|
|
145
|
+
}
|
|
146
|
+
const trimmed = value.trim();
|
|
147
|
+
if (trimmed.length === 0 || trimmed === "[]" || trimmed.toLowerCase() === "null" || trimmed.toLowerCase() === "none") {
|
|
148
|
+
return [];
|
|
149
|
+
}
|
|
150
|
+
return trimmed.split(/[|,]/).map((flag) => flag.replace(/^["'`]+|["'`]+$/g, "").trim()).filter(Boolean);
|
|
151
|
+
}
|
|
152
|
+
function scoreFromRecord(item) {
|
|
153
|
+
return {
|
|
154
|
+
score: parseScoreNumber(item.score),
|
|
155
|
+
category: parseCategory(item.category),
|
|
156
|
+
flags: parseFlags(item.flags)
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
function scoreFromDelimitedRow(row) {
|
|
160
|
+
const [score, category, flags = ""] = row.split(/,(.*)/s);
|
|
161
|
+
const categoryAndFlags = category.split(/,(.*)/s);
|
|
162
|
+
return {
|
|
163
|
+
score: parseScoreNumber(score),
|
|
164
|
+
category: parseCategory(categoryAndFlags[0]),
|
|
165
|
+
flags: parseFlags(categoryAndFlags[1] ?? flags)
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
function parseScoresFromJsonObject(parsed, expectedLength) {
|
|
169
|
+
if (parsed.scores === void 0) {
|
|
170
|
+
return null;
|
|
171
|
+
}
|
|
172
|
+
if (!Array.isArray(parsed.scores)) {
|
|
173
|
+
throw new Error(
|
|
174
|
+
"priority scoring JSON response did not include scores records"
|
|
175
|
+
);
|
|
176
|
+
}
|
|
177
|
+
const out = [];
|
|
178
|
+
for (let i = 0; i < expectedLength; i += 1) {
|
|
179
|
+
const item = parsed.scores[i];
|
|
180
|
+
if (isRecord(item)) {
|
|
181
|
+
out.push(scoreFromRecord(item));
|
|
182
|
+
continue;
|
|
183
|
+
}
|
|
184
|
+
if (typeof item === "string") {
|
|
185
|
+
out.push(scoreFromDelimitedRow(item));
|
|
186
|
+
continue;
|
|
187
|
+
}
|
|
188
|
+
throw new Error("priority scoring omitted one or more messages");
|
|
189
|
+
}
|
|
190
|
+
return out;
|
|
191
|
+
}
|
|
192
|
+
function parseLegacyJsonScores(candidate, expectedLength) {
|
|
193
|
+
if (!candidate.startsWith("[")) {
|
|
194
|
+
throw new Error(
|
|
195
|
+
"priority scoring did not return JSON scores or a legacy JSON array"
|
|
196
|
+
);
|
|
197
|
+
}
|
|
198
|
+
const parsed = JSON.parse(candidate);
|
|
199
|
+
if (!Array.isArray(parsed)) {
|
|
200
|
+
throw new Error("priority scoring did not return a JSON array");
|
|
201
|
+
}
|
|
202
|
+
const out = [];
|
|
203
|
+
for (let i = 0; i < expectedLength; i += 1) {
|
|
204
|
+
const item = parsed[i];
|
|
205
|
+
if (!isRecord(item)) {
|
|
206
|
+
throw new Error("priority scoring omitted one or more messages");
|
|
207
|
+
}
|
|
208
|
+
out.push(scoreFromRecord(item));
|
|
209
|
+
}
|
|
210
|
+
return out;
|
|
211
|
+
}
|
|
212
|
+
function parseScores(raw, expectedLength) {
|
|
213
|
+
const candidate = stripModelWrapper(raw);
|
|
214
|
+
const parsedJson = parseJsonModelRecord(candidate);
|
|
215
|
+
if (parsedJson) {
|
|
216
|
+
const scores = parseScoresFromJsonObject(parsedJson, expectedLength);
|
|
217
|
+
if (scores) return scores;
|
|
218
|
+
}
|
|
219
|
+
return parseLegacyJsonScores(candidate, expectedLength);
|
|
220
|
+
}
|
|
221
|
+
async function scoreBatch(runtime, batch, opts) {
|
|
222
|
+
const prompt = buildPrompt(batch, opts);
|
|
223
|
+
const params = opts.model && opts.model.trim().length > 0 ? { prompt, model: opts.model.trim() } : { prompt };
|
|
224
|
+
const raw = await runWithTrajectoryContext(
|
|
225
|
+
{ purpose: "lifeops-priority-scoring" },
|
|
226
|
+
() => runtime.useModel(ModelType.TEXT_SMALL, params)
|
|
227
|
+
);
|
|
228
|
+
const text = typeof raw === "string" ? raw : "";
|
|
229
|
+
return parseScores(text, batch.length);
|
|
230
|
+
}
|
|
231
|
+
async function scoreInboxMessages(runtime, messages, opts = {}) {
|
|
232
|
+
if (messages.length === 0) return [];
|
|
233
|
+
if (typeof runtime.useModel !== "function") {
|
|
234
|
+
return messages.map(() => null);
|
|
235
|
+
}
|
|
236
|
+
const modelId = opts.model && opts.model.trim().length > 0 ? opts.model.trim() : "default-text-small";
|
|
237
|
+
const results = new Array(messages.length).fill(
|
|
238
|
+
null
|
|
239
|
+
);
|
|
240
|
+
const todoIndices = [];
|
|
241
|
+
for (let i = 0; i < messages.length; i += 1) {
|
|
242
|
+
const m = messages[i];
|
|
243
|
+
if (!m) continue;
|
|
244
|
+
const cached = cacheGet(cacheKey(m, modelId));
|
|
245
|
+
if (cached) {
|
|
246
|
+
results[i] = cached;
|
|
247
|
+
} else {
|
|
248
|
+
todoIndices.push(i);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
if (todoIndices.length === 0) return results;
|
|
252
|
+
const batches = [];
|
|
253
|
+
for (let i = 0; i < todoIndices.length; i += BATCH_SIZE) {
|
|
254
|
+
batches.push(todoIndices.slice(i, i + BATCH_SIZE));
|
|
255
|
+
}
|
|
256
|
+
const concurrency = Math.max(
|
|
257
|
+
1,
|
|
258
|
+
Math.min(opts.concurrency ?? DEFAULT_CONCURRENCY, batches.length)
|
|
259
|
+
);
|
|
260
|
+
let cursor = 0;
|
|
261
|
+
const workers = [];
|
|
262
|
+
for (let w = 0; w < concurrency; w += 1) {
|
|
263
|
+
workers.push(
|
|
264
|
+
(async () => {
|
|
265
|
+
while (true) {
|
|
266
|
+
const next = cursor;
|
|
267
|
+
cursor += 1;
|
|
268
|
+
if (next >= batches.length) return;
|
|
269
|
+
const indices = batches[next];
|
|
270
|
+
if (!indices) return;
|
|
271
|
+
const batchMessages = indices.map((idx) => messages[idx]);
|
|
272
|
+
try {
|
|
273
|
+
const scored = await scoreBatch(runtime, batchMessages, opts);
|
|
274
|
+
for (let j = 0; j < indices.length; j += 1) {
|
|
275
|
+
const idx = indices[j];
|
|
276
|
+
const score = scored[j];
|
|
277
|
+
if (!score) continue;
|
|
278
|
+
results[idx] = score;
|
|
279
|
+
cacheSet(cacheKey(batchMessages[j], modelId), score);
|
|
280
|
+
}
|
|
281
|
+
} catch (error) {
|
|
282
|
+
logger.warn(
|
|
283
|
+
{
|
|
284
|
+
src: "lifeops.priority-scoring",
|
|
285
|
+
count: indices.length,
|
|
286
|
+
error: error instanceof Error ? error.message : String(error)
|
|
287
|
+
},
|
|
288
|
+
"[lifeops] priority scoring batch failed; leaving entries null"
|
|
289
|
+
);
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
})()
|
|
293
|
+
);
|
|
294
|
+
}
|
|
295
|
+
await Promise.all(workers);
|
|
296
|
+
return results;
|
|
297
|
+
}
|
|
298
|
+
function __resetPriorityScoringCacheForTests() {
|
|
299
|
+
cache.clear();
|
|
300
|
+
}
|
|
301
|
+
export {
|
|
302
|
+
__resetPriorityScoringCacheForTests,
|
|
303
|
+
scoreInboxMessages
|
|
304
|
+
};
|
|
305
|
+
//# sourceMappingURL=priority-scoring.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/lifeops/priority-scoring.ts"],"sourcesContent":["/**\n * LLM-based priority scoring for the LifeOps inbox.\n *\n * This module replaces the v1 keyword/regex heuristic in\n * `service-mixin-inbox.ts:scoreSmallGroupThread`. The scorer asks a small,\n * fast model to rate each message on a 0–100 importance scale and to bucket\n * it into one of three categories (`important` / `planning` / `casual`).\n *\n * Behavior:\n * - Batches up to ~10 messages per call to keep prompts small.\n * - Caches results in-memory keyed by `(messageId, contentHash, model)` so\n * re-fetches inside a single runtime are free.\n * - Concurrency-capped to 4 parallel batches.\n * - If the LLM call or parser fails, returns `null` per message so the caller\n * can fall back to the v1 heuristic.\n */\nimport type { IAgentRuntime } from \"@elizaos/core\";\nimport {\n logger,\n ModelType,\n parseJsonModelRecord,\n runWithTrajectoryContext,\n} from \"@elizaos/core\";\nimport type { LifeOpsInboxMessage } from \"@elizaos/shared\";\n\nexport type PriorityCategory = \"important\" | \"planning\" | \"casual\";\n\nexport interface PriorityScore {\n /** 0–100 score; higher = more important. */\n score: number;\n category: PriorityCategory;\n flags: string[];\n}\n\nexport interface ScoreInboxMessagesOptions {\n /** Used as the user identity in the prompt. */\n ownerName?: string | null;\n /** Optional list of important relationships shown to the model as priors. */\n topRelationships?: string[];\n /**\n * Optional model id forwarded as the `model` parameter to `runtime.useModel`.\n * When omitted the runtime's default `TEXT_SMALL` model handles the call.\n */\n model?: string | null;\n /** Cap on parallel batches. Defaults to 4. */\n concurrency?: number;\n}\n\nconst BATCH_SIZE = 10;\nconst DEFAULT_CONCURRENCY = 4;\nconst CACHE_MAX_ENTRIES = 5000;\n\n// Bounded LRU-ish cache. Trims the oldest 20% on overflow.\nconst cache = new Map<string, PriorityScore>();\n\nfunction cacheGet(key: string): PriorityScore | undefined {\n const value = cache.get(key);\n if (value !== undefined) {\n // Move-to-end: re-insert so this key is now the freshest.\n cache.delete(key);\n cache.set(key, value);\n }\n return value;\n}\n\nfunction cacheSet(key: string, value: PriorityScore): void {\n if (cache.size >= CACHE_MAX_ENTRIES) {\n const dropCount = Math.floor(CACHE_MAX_ENTRIES * 0.2);\n let dropped = 0;\n for (const k of cache.keys()) {\n cache.delete(k);\n dropped += 1;\n if (dropped >= dropCount) break;\n }\n }\n cache.set(key, value);\n}\n\n/**\n * djb2-style hash on the snippet/subject. Cheap, deterministic, and good\n * enough for cache keys — we are not using this for security or de-dup.\n */\nfunction contentHash(text: string): string {\n let h = 5381;\n for (let i = 0; i < text.length; i += 1) {\n h = ((h << 5) + h + text.charCodeAt(i)) | 0;\n }\n return (h >>> 0).toString(36);\n}\n\nfunction cacheKey(message: LifeOpsInboxMessage, modelId: string): string {\n const text = `${message.subject ?? \"\"}|${message.snippet}`;\n return `${modelId}::${message.id}::${contentHash(text)}`;\n}\n\nconst VALID_CATEGORIES = new Set<PriorityCategory>([\n \"important\",\n \"planning\",\n \"casual\",\n]);\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction promptValue(\n value: string | null | undefined,\n maxLength: number,\n): string {\n const normalized = (value ?? \"\").slice(0, maxLength).replace(/\\s+/g, \" \");\n const trimmed = normalized.trim();\n return trimmed.length > 0 ? trimmed : \"null\";\n}\n\nfunction buildPrompt(\n batch: LifeOpsInboxMessage[],\n opts: ScoreInboxMessagesOptions,\n): string {\n const lines: string[] = [];\n lines.push(\n \"Score each inbox message. For each one decide:\",\n \"- score: integer 0–100 reflecting how much the user should care right now (100 = drop everything; 0 = ignorable).\",\n \"- category: one of:\",\n \" - important: high signal, demands attention or action soon\",\n \" - planning: schedules, dates, times, RSVPs, meeting coordination\",\n \" - casual: chit-chat, social, low-stakes notifications\",\n \"- flags: zero or more short tags from { mention, question, deadline, meeting, money, urgent, group_call, ask }\",\n \"\",\n \"Calibration:\",\n \"- Direct DMs from real people > group chatter > newsletters/automation.\",\n \"- Mentions of the user, direct questions, or scheduling/dates push score above 70.\",\n \"- Pure social pleasantries with no ask and no time element belong in 'casual' with score < 35.\",\n );\n if (opts.ownerName && opts.ownerName.trim().length > 0) {\n lines.push(\n \"\",\n \"Owner context:\",\n `ownerName: ${promptValue(opts.ownerName, 160)}`,\n );\n }\n if (opts.topRelationships && opts.topRelationships.length > 0) {\n lines.push(\n \"\",\n \"Important contacts (treat their messages as higher priority):\",\n opts.topRelationships\n .slice(0, 12)\n .map(\n (name, index) =>\n `importantContacts[${index}]: ${promptValue(name, 160)}`,\n )\n .join(\"\\n\"),\n );\n }\n lines.push(\"\", \"Messages:\");\n for (const [index, message] of batch.entries()) {\n lines.push(\n `messages[${index}]:`,\n ` from: ${promptValue(message.sender.displayName, 160)}`,\n ` channel: ${promptValue(message.channel, 80)}`,\n ` chatType: ${promptValue(message.chatType ?? \"dm\", 40)}`,\n ` participantCount: ${\n typeof message.participantCount === \"number\"\n ? message.participantCount\n : \"null\"\n }`,\n ` subject: ${promptValue(message.subject, 200)}`,\n ` snippet: ${promptValue(message.snippet, 600)}`,\n );\n }\n lines.push(\n \"\",\n \"Return JSON only as a single object. No prose, markdown, code fences, or hidden reasoning.\",\n `Return exactly ${batch.length} zero-based scores records aligned to messages[0] through messages[${\n batch.length - 1\n }].`,\n 'Use this shape: {\"scores\":[{\"score\":82,\"category\":\"important\",\"flags\":[\"question\",\"deadline\"]}]}',\n \"score is an integer 0-100. category is important, planning, or casual.\",\n \"flags is an array of tags from mention, question, deadline, meeting, money, urgent, group_call, ask.\",\n );\n return lines.join(\"\\n\");\n}\n\nconst STRUCTURED_CODE_FENCE_PATTERN =\n /^\\s*```(?:json|json|json5)?\\s*\\r?\\n?([\\s\\S]*?)\\r?\\n?```\\s*$/i;\n\nfunction stripModelWrapper(raw: string): string {\n let candidate = raw.trim();\n if (candidate.length === 0) {\n throw new Error(\"priority scoring returned an empty response\");\n }\n const thinkEnd = candidate.indexOf(\"</think>\");\n if (candidate.startsWith(\"<think>\") && thinkEnd !== -1) {\n candidate = candidate.slice(thinkEnd + \"</think>\".length).trim();\n }\n const fenced = candidate.match(STRUCTURED_CODE_FENCE_PATTERN);\n if (fenced) {\n candidate = (fenced[1] ?? \"\").trim();\n }\n return candidate;\n}\n\nfunction parseScoreNumber(value: unknown): number {\n const score =\n typeof value === \"number\"\n ? value\n : typeof value === \"string\"\n ? Number(value.trim())\n : Number.NaN;\n if (!Number.isFinite(score)) {\n throw new Error(\"priority scoring score is not a finite number\");\n }\n return Math.max(0, Math.min(100, Math.round(score)));\n}\n\nfunction parseCategory(value: unknown): PriorityCategory {\n const category = typeof value === \"string\" ? value.trim() : \"\";\n if (!VALID_CATEGORIES.has(category as PriorityCategory)) {\n throw new Error(\"priority scoring category is not a valid enum\");\n }\n return category as PriorityCategory;\n}\n\nfunction parseFlags(value: unknown): string[] {\n if (Array.isArray(value)) {\n return value.flatMap((entry) => parseFlags(entry));\n }\n if (typeof value !== \"string\") {\n return [];\n }\n const trimmed = value.trim();\n if (\n trimmed.length === 0 ||\n trimmed === \"[]\" ||\n trimmed.toLowerCase() === \"null\" ||\n trimmed.toLowerCase() === \"none\"\n ) {\n return [];\n }\n return trimmed\n .split(/[|,]/)\n .map((flag) => flag.replace(/^[\"'`]+|[\"'`]+$/g, \"\").trim())\n .filter(Boolean);\n}\n\nfunction scoreFromRecord(item: Record<string, unknown>): PriorityScore {\n return {\n score: parseScoreNumber(item.score),\n category: parseCategory(item.category),\n flags: parseFlags(item.flags),\n };\n}\n\nfunction scoreFromDelimitedRow(row: string): PriorityScore {\n const [score, category, flags = \"\"] = row.split(/,(.*)/s);\n const categoryAndFlags = category.split(/,(.*)/s);\n return {\n score: parseScoreNumber(score),\n category: parseCategory(categoryAndFlags[0]),\n flags: parseFlags(categoryAndFlags[1] ?? flags),\n };\n}\n\nfunction parseScoresFromJsonObject(\n parsed: Record<string, unknown>,\n expectedLength: number,\n): PriorityScore[] | null {\n if (parsed.scores === undefined) {\n return null;\n }\n if (!Array.isArray(parsed.scores)) {\n throw new Error(\n \"priority scoring JSON response did not include scores records\",\n );\n }\n const out: PriorityScore[] = [];\n for (let i = 0; i < expectedLength; i += 1) {\n const item = parsed.scores[i];\n if (isRecord(item)) {\n out.push(scoreFromRecord(item));\n continue;\n }\n if (typeof item === \"string\") {\n out.push(scoreFromDelimitedRow(item));\n continue;\n }\n throw new Error(\"priority scoring omitted one or more messages\");\n }\n return out;\n}\n\nfunction parseLegacyJsonScores(\n candidate: string,\n expectedLength: number,\n): PriorityScore[] {\n if (!candidate.startsWith(\"[\")) {\n throw new Error(\n \"priority scoring did not return JSON scores or a legacy JSON array\",\n );\n }\n const parsed = JSON.parse(candidate) as unknown;\n if (!Array.isArray(parsed)) {\n throw new Error(\"priority scoring did not return a JSON array\");\n }\n const out: PriorityScore[] = [];\n for (let i = 0; i < expectedLength; i += 1) {\n const item = parsed[i];\n if (!isRecord(item)) {\n throw new Error(\"priority scoring omitted one or more messages\");\n }\n out.push(scoreFromRecord(item));\n }\n return out;\n}\n\nfunction parseScores(raw: string, expectedLength: number): PriorityScore[] {\n const candidate = stripModelWrapper(raw);\n const parsedJson = parseJsonModelRecord<Record<string, unknown>>(candidate);\n if (parsedJson) {\n const scores = parseScoresFromJsonObject(parsedJson, expectedLength);\n if (scores) return scores;\n }\n return parseLegacyJsonScores(candidate, expectedLength);\n}\n\nasync function scoreBatch(\n runtime: IAgentRuntime,\n batch: LifeOpsInboxMessage[],\n opts: ScoreInboxMessagesOptions,\n): Promise<PriorityScore[]> {\n const prompt = buildPrompt(batch, opts);\n // We ask the runtime for TEXT_SMALL but pass the optional `model` override\n // so a configured model id (e.g. `claude-haiku-4-5`) is honored when the\n // active provider supports model selection. The runtime's GenerateTextParams\n // is typed as `prompt`-only at the public boundary; the optional `model`\n // override is read by providers via index access.\n const params = (\n opts.model && opts.model.trim().length > 0\n ? { prompt, model: opts.model.trim() }\n : { prompt }\n ) as { prompt: string };\n const raw = await runWithTrajectoryContext(\n { purpose: \"lifeops-priority-scoring\" },\n () => runtime.useModel(ModelType.TEXT_SMALL, params),\n );\n const text = typeof raw === \"string\" ? raw : \"\";\n return parseScores(text, batch.length);\n}\n\n/**\n * Score a batch of inbox messages with the LLM. Returns a parallel array of\n * scores; entries are `null` when the LLM call or parser fails for that\n * batch — callers should fall back to a heuristic for those messages.\n *\n * The scorer is cache-aware: messages whose `(id, content, model)` was\n * already scored within this process are returned from cache without\n * triggering a model call.\n */\nexport async function scoreInboxMessages(\n runtime: IAgentRuntime,\n messages: LifeOpsInboxMessage[],\n opts: ScoreInboxMessagesOptions = {},\n): Promise<Array<PriorityScore | null>> {\n if (messages.length === 0) return [];\n if (typeof runtime.useModel !== \"function\") {\n return messages.map(() => null);\n }\n const modelId =\n opts.model && opts.model.trim().length > 0\n ? opts.model.trim()\n : \"default-text-small\";\n\n const results: Array<PriorityScore | null> = new Array(messages.length).fill(\n null,\n );\n const todoIndices: number[] = [];\n\n for (let i = 0; i < messages.length; i += 1) {\n const m = messages[i];\n if (!m) continue;\n const cached = cacheGet(cacheKey(m, modelId));\n if (cached) {\n results[i] = cached;\n } else {\n todoIndices.push(i);\n }\n }\n if (todoIndices.length === 0) return results;\n\n // Build batches of indices.\n const batches: number[][] = [];\n for (let i = 0; i < todoIndices.length; i += BATCH_SIZE) {\n batches.push(todoIndices.slice(i, i + BATCH_SIZE));\n }\n\n const concurrency = Math.max(\n 1,\n Math.min(opts.concurrency ?? DEFAULT_CONCURRENCY, batches.length),\n );\n\n let cursor = 0;\n const workers: Promise<void>[] = [];\n for (let w = 0; w < concurrency; w += 1) {\n workers.push(\n (async () => {\n while (true) {\n const next = cursor;\n cursor += 1;\n if (next >= batches.length) return;\n const indices = batches[next];\n if (!indices) return;\n const batchMessages = indices.map((idx) => messages[idx]!);\n try {\n const scored = await scoreBatch(runtime, batchMessages, opts);\n for (let j = 0; j < indices.length; j += 1) {\n const idx = indices[j]!;\n const score = scored[j];\n if (!score) continue;\n results[idx] = score;\n cacheSet(cacheKey(batchMessages[j]!, modelId), score);\n }\n } catch (error) {\n logger.warn(\n {\n src: \"lifeops.priority-scoring\",\n count: indices.length,\n error: error instanceof Error ? error.message : String(error),\n },\n \"[lifeops] priority scoring batch failed; leaving entries null\",\n );\n }\n }\n })(),\n );\n }\n await Promise.all(workers);\n return results;\n}\n\n/** Test seam — reset the in-process cache between unit tests. */\nexport function __resetPriorityScoringCacheForTests(): void {\n cache.clear();\n}\n"],"mappings":"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","names":[]}
|