@elizaos/ui 2.0.0-alpha.385 → 2.0.0-alpha.392
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/apps/app-companion/src/components/companion/CompanionAppView.d.ts.map +1 -1
- package/apps/app-companion/src/components/companion/CompanionAppView.js +6 -4
- package/apps/app-companion/src/components/companion/CompanionView.d.ts.map +1 -1
- package/apps/app-companion/src/components/companion/CompanionView.js +6 -4
- package/apps/app-lifeops/src/api/client-lifeops.js +6 -0
- package/apps/app-lifeops/src/components/AppBlockerSettingsCard.d.ts +3 -0
- package/apps/app-lifeops/src/components/AppBlockerSettingsCard.d.ts.map +1 -0
- package/apps/app-lifeops/src/components/AppBlockerSettingsCard.js +189 -0
- package/apps/app-lifeops/src/components/BrowserBridgeSetupPanel.d.ts +2 -0
- package/apps/app-lifeops/src/components/BrowserBridgeSetupPanel.d.ts.map +1 -0
- package/apps/app-lifeops/src/components/BrowserBridgeSetupPanel.js +1065 -0
- package/apps/app-lifeops/src/components/BrowserBridgeStatusChip.d.ts +7 -0
- package/apps/app-lifeops/src/components/BrowserBridgeStatusChip.d.ts.map +1 -0
- package/apps/app-lifeops/src/components/BrowserBridgeStatusChip.js +71 -0
- package/apps/app-lifeops/src/components/DataSourcesStrip.d.ts +14 -0
- package/apps/app-lifeops/src/components/DataSourcesStrip.d.ts.map +1 -0
- package/apps/app-lifeops/src/components/DataSourcesStrip.js +36 -0
- package/apps/app-lifeops/src/components/EventEditorDrawer.d.ts +23 -0
- package/apps/app-lifeops/src/components/EventEditorDrawer.d.ts.map +1 -0
- package/apps/app-lifeops/src/components/EventEditorDrawer.js +514 -0
- package/apps/app-lifeops/src/components/LifeOpsActivitySignalsEffect.d.ts +2 -0
- package/apps/app-lifeops/src/components/LifeOpsActivitySignalsEffect.d.ts.map +1 -0
- package/apps/app-lifeops/src/components/LifeOpsActivitySignalsEffect.js +10 -0
- package/apps/app-lifeops/src/components/LifeOpsCalendarSection.d.ts +15 -0
- package/apps/app-lifeops/src/components/LifeOpsCalendarSection.d.ts.map +1 -0
- package/apps/app-lifeops/src/components/LifeOpsCalendarSection.js +515 -0
- package/apps/app-lifeops/src/components/LifeOpsChatAdapter.d.ts +34 -0
- package/apps/app-lifeops/src/components/LifeOpsChatAdapter.d.ts.map +1 -0
- package/apps/app-lifeops/src/components/LifeOpsChatAdapter.js +175 -0
- package/apps/app-lifeops/src/components/LifeOpsFeatureTogglesSection.d.ts +2 -0
- package/apps/app-lifeops/src/components/LifeOpsFeatureTogglesSection.d.ts.map +1 -0
- package/apps/app-lifeops/src/components/LifeOpsFeatureTogglesSection.js +99 -0
- package/apps/app-lifeops/src/components/LifeOpsHabitVisuals.d.ts +37 -0
- package/apps/app-lifeops/src/components/LifeOpsHabitVisuals.d.ts.map +1 -0
- package/apps/app-lifeops/src/components/LifeOpsHabitVisuals.js +88 -0
- package/apps/app-lifeops/src/components/LifeOpsInboxSection.d.ts +13 -0
- package/apps/app-lifeops/src/components/LifeOpsInboxSection.d.ts.map +1 -0
- package/apps/app-lifeops/src/components/LifeOpsInboxSection.js +490 -0
- package/apps/app-lifeops/src/components/LifeOpsLinkBankButton.d.ts +12 -0
- package/apps/app-lifeops/src/components/LifeOpsLinkBankButton.d.ts.map +1 -0
- package/apps/app-lifeops/src/components/LifeOpsLinkBankButton.js +92 -0
- package/apps/app-lifeops/src/components/LifeOpsLinkPaypalButton.d.ts +12 -0
- package/apps/app-lifeops/src/components/LifeOpsLinkPaypalButton.d.ts.map +1 -0
- package/apps/app-lifeops/src/components/LifeOpsLinkPaypalButton.js +160 -0
- package/apps/app-lifeops/src/components/LifeOpsMoneySection.d.ts +3 -0
- package/apps/app-lifeops/src/components/LifeOpsMoneySection.d.ts.map +1 -0
- package/apps/app-lifeops/src/components/LifeOpsMoneySection.js +373 -0
- package/apps/app-lifeops/src/components/LifeOpsNavRail.d.ts +9 -0
- package/apps/app-lifeops/src/components/LifeOpsNavRail.d.ts.map +1 -0
- package/apps/app-lifeops/src/components/LifeOpsNavRail.js +93 -0
- package/apps/app-lifeops/src/components/LifeOpsOperationalPanels.d.ts +4 -0
- package/apps/app-lifeops/src/components/LifeOpsOperationalPanels.d.ts.map +1 -0
- package/apps/app-lifeops/src/components/LifeOpsOperationalPanels.js +274 -0
- package/apps/app-lifeops/src/components/LifeOpsOverviewSection.d.ts +7 -0
- package/apps/app-lifeops/src/components/LifeOpsOverviewSection.d.ts.map +1 -0
- package/apps/app-lifeops/src/components/LifeOpsOverviewSection.js +657 -0
- package/apps/app-lifeops/src/components/LifeOpsPageSections.d.ts +42 -0
- package/apps/app-lifeops/src/components/LifeOpsPageSections.d.ts.map +1 -0
- package/apps/app-lifeops/src/components/LifeOpsPageSections.js +166 -0
- package/apps/app-lifeops/src/components/LifeOpsPageView.d.ts +2 -0
- package/apps/app-lifeops/src/components/LifeOpsPageView.d.ts.map +1 -0
- package/apps/app-lifeops/src/components/LifeOpsPageView.js +566 -0
- package/apps/app-lifeops/src/components/LifeOpsRemindersSection.d.ts +2 -0
- package/apps/app-lifeops/src/components/LifeOpsRemindersSection.d.ts.map +1 -0
- package/apps/app-lifeops/src/components/LifeOpsRemindersSection.js +749 -0
- package/apps/app-lifeops/src/components/LifeOpsResizableSidebar.d.ts +27 -0
- package/apps/app-lifeops/src/components/LifeOpsResizableSidebar.d.ts.map +1 -0
- package/apps/app-lifeops/src/components/LifeOpsResizableSidebar.js +106 -0
- package/apps/app-lifeops/src/components/LifeOpsScreenTimeSection.d.ts +2 -0
- package/apps/app-lifeops/src/components/LifeOpsScreenTimeSection.d.ts.map +1 -0
- package/apps/app-lifeops/src/components/LifeOpsScreenTimeSection.js +373 -0
- package/apps/app-lifeops/src/components/LifeOpsSectionContent.d.ts +10 -0
- package/apps/app-lifeops/src/components/LifeOpsSectionContent.d.ts.map +1 -0
- package/apps/app-lifeops/src/components/LifeOpsSectionContent.js +30 -0
- package/apps/app-lifeops/src/components/LifeOpsSelectionContext.d.ts +21 -0
- package/apps/app-lifeops/src/components/LifeOpsSelectionContext.d.ts.map +1 -0
- package/apps/app-lifeops/src/components/LifeOpsSelectionContext.js +30 -0
- package/apps/app-lifeops/src/components/LifeOpsSettingsSection.d.ts +20 -0
- package/apps/app-lifeops/src/components/LifeOpsSettingsSection.d.ts.map +1 -0
- package/apps/app-lifeops/src/components/LifeOpsSettingsSection.js +597 -0
- package/apps/app-lifeops/src/components/LifeOpsSetupGate.d.ts +13 -0
- package/apps/app-lifeops/src/components/LifeOpsSetupGate.d.ts.map +1 -0
- package/apps/app-lifeops/src/components/LifeOpsSetupGate.js +134 -0
- package/apps/app-lifeops/src/components/LifeOpsSleepSection.d.ts +10 -0
- package/apps/app-lifeops/src/components/LifeOpsSleepSection.d.ts.map +1 -0
- package/apps/app-lifeops/src/components/LifeOpsSleepSection.js +425 -0
- package/apps/app-lifeops/src/components/LifeOpsWorkspaceShell.d.ts +11 -0
- package/apps/app-lifeops/src/components/LifeOpsWorkspaceShell.d.ts.map +1 -0
- package/apps/app-lifeops/src/components/LifeOpsWorkspaceShell.js +49 -0
- package/apps/app-lifeops/src/components/LifeOpsWorkspaceView.d.ts +2 -0
- package/apps/app-lifeops/src/components/LifeOpsWorkspaceView.d.ts.map +1 -0
- package/apps/app-lifeops/src/components/LifeOpsWorkspaceView.js +1041 -0
- package/apps/app-lifeops/src/components/MessagingConnectorCards.d.ts +7 -0
- package/apps/app-lifeops/src/components/MessagingConnectorCards.d.ts.map +1 -0
- package/apps/app-lifeops/src/components/MessagingConnectorCards.js +643 -0
- package/apps/app-lifeops/src/components/MissingSourceCard.d.ts +9 -0
- package/apps/app-lifeops/src/components/MissingSourceCard.d.ts.map +1 -0
- package/apps/app-lifeops/src/components/MissingSourceCard.js +5 -0
- package/apps/app-lifeops/src/components/MobileSignalsSetupCard.d.ts +2 -0
- package/apps/app-lifeops/src/components/MobileSignalsSetupCard.d.ts.map +1 -0
- package/apps/app-lifeops/src/components/MobileSignalsSetupCard.js +163 -0
- package/apps/app-lifeops/src/components/SleepInspectionPanel.d.ts +8 -0
- package/apps/app-lifeops/src/components/SleepInspectionPanel.d.ts.map +1 -0
- package/apps/app-lifeops/src/components/SleepInspectionPanel.js +59 -0
- package/apps/app-lifeops/src/components/WebsiteBlockerSettingsCard.d.ts +3 -0
- package/apps/app-lifeops/src/components/WebsiteBlockerSettingsCard.d.ts.map +1 -0
- package/apps/app-lifeops/src/components/WebsiteBlockerSettingsCard.js +75 -0
- package/apps/app-lifeops/src/components/WhatsAppQrOverlay.d.ts +8 -0
- package/apps/app-lifeops/src/components/WhatsAppQrOverlay.d.ts.map +1 -0
- package/apps/app-lifeops/src/components/WhatsAppQrOverlay.js +48 -0
- package/apps/app-lifeops/src/components/lifeops-labels.d.ts +2 -0
- package/apps/app-lifeops/src/components/lifeops-labels.d.ts.map +1 -0
- package/apps/app-lifeops/src/components/lifeops-labels.js +5 -0
- package/apps/app-lifeops/src/events/index.d.ts +34 -0
- package/apps/app-lifeops/src/events/index.d.ts.map +1 -0
- package/apps/app-lifeops/src/events/index.js +23 -0
- package/apps/app-lifeops/src/hooks/useCalendarWeek.d.ts +28 -0
- package/apps/app-lifeops/src/hooks/useCalendarWeek.d.ts.map +1 -0
- package/apps/app-lifeops/src/hooks/useCalendarWeek.js +93 -0
- package/apps/app-lifeops/src/hooks/useDiscordConnector.d.ts +14 -0
- package/apps/app-lifeops/src/hooks/useDiscordConnector.d.ts.map +1 -0
- package/apps/app-lifeops/src/hooks/useDiscordConnector.js +126 -0
- package/apps/app-lifeops/src/hooks/useGoogleLifeOpsConnector.d.ts +29 -0
- package/apps/app-lifeops/src/hooks/useGoogleLifeOpsConnector.d.ts.map +1 -0
- package/apps/app-lifeops/src/hooks/useGoogleLifeOpsConnector.js +481 -0
- package/apps/app-lifeops/src/hooks/useIMessageConnector.d.ts +10 -0
- package/apps/app-lifeops/src/hooks/useIMessageConnector.d.ts.map +1 -0
- package/apps/app-lifeops/src/hooks/useIMessageConnector.js +50 -0
- package/apps/app-lifeops/src/hooks/useInbox.d.ts +34 -0
- package/apps/app-lifeops/src/hooks/useInbox.d.ts.map +1 -0
- package/apps/app-lifeops/src/hooks/useInbox.js +98 -0
- package/apps/app-lifeops/src/hooks/useLifeOpsActivitySignals.d.ts +2 -0
- package/apps/app-lifeops/src/hooks/useLifeOpsActivitySignals.d.ts.map +1 -0
- package/apps/app-lifeops/src/hooks/useLifeOpsActivitySignals.js +383 -0
- package/apps/app-lifeops/src/hooks/useLifeOpsAppState.d.ts +9 -0
- package/apps/app-lifeops/src/hooks/useLifeOpsAppState.d.ts.map +1 -0
- package/apps/app-lifeops/src/hooks/useLifeOpsAppState.js +83 -0
- package/apps/app-lifeops/src/hooks/useLifeOpsCapabilitiesStatus.d.ts +8 -0
- package/apps/app-lifeops/src/hooks/useLifeOpsCapabilitiesStatus.d.ts.map +1 -0
- package/apps/app-lifeops/src/hooks/useLifeOpsCapabilitiesStatus.js +60 -0
- package/apps/app-lifeops/src/hooks/useLifeOpsScheduleInspection.d.ts +18 -0
- package/apps/app-lifeops/src/hooks/useLifeOpsScheduleInspection.d.ts.map +1 -0
- package/apps/app-lifeops/src/hooks/useLifeOpsScheduleInspection.js +66 -0
- package/apps/app-lifeops/src/hooks/useLifeOpsScheduleState.d.ts +14 -0
- package/apps/app-lifeops/src/hooks/useLifeOpsScheduleState.d.ts.map +1 -0
- package/apps/app-lifeops/src/hooks/useLifeOpsScheduleState.js +79 -0
- package/apps/app-lifeops/src/hooks/useLifeOpsSection.d.ts +18 -0
- package/apps/app-lifeops/src/hooks/useLifeOpsSection.d.ts.map +1 -0
- package/apps/app-lifeops/src/hooks/useLifeOpsSection.js +78 -0
- package/apps/app-lifeops/src/hooks/useLifeOpsXConnector.d.ts +14 -0
- package/apps/app-lifeops/src/hooks/useLifeOpsXConnector.d.ts.map +1 -0
- package/apps/app-lifeops/src/hooks/useLifeOpsXConnector.js +160 -0
- package/apps/app-lifeops/src/hooks/useSignalConnector.d.ts +16 -0
- package/apps/app-lifeops/src/hooks/useSignalConnector.d.ts.map +1 -0
- package/apps/app-lifeops/src/hooks/useSignalConnector.js +198 -0
- package/apps/app-lifeops/src/hooks/useTelegramConnector.d.ts +21 -0
- package/apps/app-lifeops/src/hooks/useTelegramConnector.d.ts.map +1 -0
- package/apps/app-lifeops/src/hooks/useTelegramConnector.js +177 -0
- package/apps/app-lifeops/src/hooks/useWhatsAppConnector.d.ts +8 -0
- package/apps/app-lifeops/src/hooks/useWhatsAppConnector.d.ts.map +1 -0
- package/apps/app-lifeops/src/hooks/useWhatsAppConnector.js +58 -0
- package/apps/app-lifeops/src/hooks/useWhatsAppPairing.d.ts +12 -0
- package/apps/app-lifeops/src/hooks/useWhatsAppPairing.d.ts.map +1 -0
- package/apps/app-lifeops/src/hooks/useWhatsAppPairing.js +152 -0
- package/apps/app-lifeops/src/lifeops/discord-browser-scraper.js +1 -1
- package/apps/app-lifeops/src/lifeops/google-gmail.d.ts.map +1 -1
- package/apps/app-lifeops/src/lifeops/google-gmail.js +74 -26
- package/apps/app-lifeops/src/lifeops/google-managed-client.d.ts.map +1 -1
- package/apps/app-lifeops/src/lifeops/google-managed-client.js +4 -5
- package/apps/app-lifeops/src/lifeops/google-oauth.d.ts.map +1 -1
- package/apps/app-lifeops/src/lifeops/google-oauth.js +2 -2
- package/apps/app-lifeops/src/lifeops/owner-profile.d.ts.map +1 -1
- package/apps/app-lifeops/src/lifeops/owner-profile.js +1 -1
- package/apps/app-lifeops/src/lifeops/paypal-managed-client.d.ts.map +1 -1
- package/apps/app-lifeops/src/lifeops/paypal-managed-client.js +4 -5
- package/apps/app-lifeops/src/lifeops/plaid-managed-client.d.ts.map +1 -1
- package/apps/app-lifeops/src/lifeops/plaid-managed-client.js +4 -5
- package/apps/app-lifeops/src/lifeops/schedule-sync-client.js +2 -2
- package/apps/app-lifeops/src/lifeops/service-constants.d.ts +1 -0
- package/apps/app-lifeops/src/lifeops/service-constants.d.ts.map +1 -1
- package/apps/app-lifeops/src/lifeops/service-constants.js +1 -0
- package/apps/app-lifeops/src/lifeops/service-mixin-core.d.ts +1 -1
- package/apps/app-lifeops/src/lifeops/service-mixin-core.d.ts.map +1 -1
- package/apps/app-lifeops/src/lifeops/service-mixin-core.js +2 -1
- package/apps/app-lifeops/src/lifeops/service-mixin-imessage.js +1 -1
- package/apps/app-lifeops/src/lifeops/service-mixin-inbox.d.ts +3 -1
- package/apps/app-lifeops/src/lifeops/service-mixin-inbox.d.ts.map +1 -1
- package/apps/app-lifeops/src/lifeops/service-mixin-inbox.js +42 -13
- package/apps/app-lifeops/src/lifeops/service-mixin-reminders.d.ts.map +1 -1
- package/apps/app-lifeops/src/lifeops/service-mixin-reminders.js +3 -2
- package/apps/app-lifeops/src/lifeops/service-mixin-workflows.d.ts.map +1 -1
- package/apps/app-lifeops/src/lifeops/service-mixin-workflows.js +1 -1
- package/apps/app-lifeops/src/lifeops/service-normalize-calendar.d.ts.map +1 -1
- package/apps/app-lifeops/src/lifeops/service-normalize-calendar.js +3 -3
- package/apps/app-lifeops/src/lifeops/service-normalize-connector.d.ts +1 -1
- package/apps/app-lifeops/src/lifeops/service-normalize-connector.d.ts.map +1 -1
- package/apps/app-lifeops/src/lifeops/service-normalize-connector.js +2 -2
- package/apps/app-lifeops/src/lifeops/signal-auth.d.ts.map +1 -1
- package/apps/app-lifeops/src/lifeops/signal-auth.js +6 -3
- package/apps/app-lifeops/src/lifeops/telegram-auth.js +1 -1
- package/apps/app-lifeops/src/lifeops/travel-adapters/duffel.d.ts.map +1 -1
- package/apps/app-lifeops/src/lifeops/travel-adapters/duffel.js +31 -6
- package/apps/app-lifeops/src/lifeops/twilio.js +1 -1
- package/apps/app-lifeops/src/lifeops/x-poster.d.ts.map +1 -1
- package/apps/app-lifeops/src/lifeops/x-poster.js +13 -3
- package/apps/app-lifeops/src/lifeops-route.d.ts +74 -0
- package/apps/app-lifeops/src/lifeops-route.d.ts.map +1 -0
- package/apps/app-lifeops/src/lifeops-route.js +204 -0
- package/apps/app-lifeops/src/platform/lifeops-github.d.ts +15 -0
- package/apps/app-lifeops/src/platform/lifeops-github.d.ts.map +1 -0
- package/apps/app-lifeops/src/platform/lifeops-github.js +135 -0
- package/apps/app-lifeops/src/routes/cloud-features-routes.d.ts +2 -2
- package/apps/app-lifeops/src/routes/cloud-features-routes.d.ts.map +1 -1
- package/apps/app-lifeops/src/routes/cloud-features-routes.js +5 -3
- package/apps/app-lifeops/src/routes/lifeops-routes.d.ts.map +1 -1
- package/apps/app-lifeops/src/routes/lifeops-routes.js +15 -3
- package/apps/app-lifeops/src/routes/plugin.d.ts.map +1 -1
- package/apps/app-lifeops/src/routes/plugin.js +10 -1
- package/apps/app-lifeops/src/routes/travel-provider-relay-routes.d.ts +1 -1
- package/apps/app-lifeops/src/routes/travel-provider-relay-routes.d.ts.map +1 -1
- package/apps/app-lifeops/src/routes/travel-provider-relay-routes.js +4 -2
- package/apps/app-lifeops/src/routes/website-blocker-routes.d.ts +1 -1
- package/apps/app-lifeops/src/routes/website-blocker-routes.d.ts.map +1 -1
- package/apps/app-lifeops/src/ui.d.ts +11 -0
- package/apps/app-lifeops/src/ui.d.ts.map +1 -0
- package/apps/app-lifeops/src/ui.js +9 -0
- package/apps/app-lifeops/src/utils/lifeops-url.d.ts +5 -0
- package/apps/app-lifeops/src/utils/lifeops-url.d.ts.map +1 -0
- package/apps/app-lifeops/src/utils/lifeops-url.js +35 -0
- package/apps/app-lifeops/src/website-blocker/access.d.ts.map +1 -1
- package/apps/app-lifeops/src/website-blocker/access.js +1 -1
- package/apps/app-steward/src/routes/steward-compat-routes.d.ts +1 -1
- package/apps/app-steward/src/routes/steward-compat-routes.d.ts.map +1 -1
- package/apps/app-steward/src/routes/steward-compat-routes.js +3 -1
- package/apps/app-steward/src/routes/wallet-browser-compat-routes.d.ts +1 -1
- package/apps/app-steward/src/routes/wallet-browser-compat-routes.d.ts.map +1 -1
- package/apps/app-steward/src/routes/wallet-browser-compat-routes.js +3 -1
- package/apps/app-steward/src/routes/wallet-bsc-core-routes.d.ts.map +1 -1
- package/apps/app-steward/src/routes/wallet-bsc-core-routes.js +2 -1
- package/apps/app-steward/src/routes/wallet-compat-routes.d.ts +1 -1
- package/apps/app-steward/src/routes/wallet-compat-routes.d.ts.map +1 -1
- package/apps/app-steward/src/routes/wallet-compat-routes.js +3 -1
- package/apps/app-steward/src/routes/wallet-core-routes.d.ts.map +1 -1
- package/apps/app-steward/src/routes/wallet-core-routes.js +2 -1
- package/apps/app-steward/src/routes/wallet-trade-compat-routes.d.ts +1 -1
- package/apps/app-steward/src/routes/wallet-trade-compat-routes.d.ts.map +1 -1
- package/apps/app-steward/src/routes/wallet-trade-compat-routes.js +3 -1
- package/apps/app-training/src/core/dataset-generator.d.ts +1 -1
- package/apps/app-training/src/core/dataset-generator.d.ts.map +1 -1
- package/apps/app-training/src/core/roleplay-executor.d.ts +1 -1
- package/apps/app-training/src/core/roleplay-executor.d.ts.map +1 -1
- package/apps/app-training/src/core/trajectory-task-datasets.d.ts +1 -1
- package/apps/app-training/src/core/trajectory-task-datasets.d.ts.map +1 -1
- package/apps/app-training/src/index.d.ts +1 -2
- package/apps/app-training/src/index.d.ts.map +1 -1
- package/apps/app-training/src/index.js +1 -2
- package/apps/app-training/src/routes/training-routes.d.ts +1 -1
- package/apps/app-training/src/routes/training-routes.d.ts.map +1 -1
- package/apps/app-training/src/routes/training-routes.js +1 -1
- package/apps/app-training/src/routes/trajectory-routes.d.ts +1 -1
- package/apps/app-training/src/routes/trajectory-routes.d.ts.map +1 -1
- package/apps/app-training/src/routes/trajectory-routes.js +3 -1
- package/apps/app-training/src/services/training-service-like.d.ts +1 -1
- package/apps/app-training/src/services/training-service-like.d.ts.map +1 -1
- package/apps/app-training/src/services/training-service.d.ts +1 -1
- package/apps/app-training/src/services/training-service.d.ts.map +1 -1
- package/package.json +1 -1
- package/packages/agent/src/api/provider-switch-config.js +1 -1
- package/packages/agent/src/api/server-helpers-auth.d.ts.map +1 -1
- package/packages/agent/src/api/server-helpers-auth.js +5 -4
- package/packages/agent/src/providers/media-provider.d.ts +1 -1
- package/packages/agent/src/providers/media-provider.d.ts.map +1 -1
- package/packages/app-core/src/App.d.ts.map +1 -1
- package/packages/app-core/src/App.js +20 -12
- package/packages/app-core/src/api/auth.d.ts.map +1 -1
- package/packages/app-core/src/api/auth.js +5 -5
- package/packages/app-core/src/api/client-types-experience.d.ts +7 -0
- package/packages/app-core/src/api/client-types-experience.d.ts.map +1 -1
- package/packages/app-core/src/components/apps/helpers.d.ts +1 -1
- package/packages/app-core/src/components/apps/helpers.d.ts.map +1 -1
- package/packages/app-core/src/components/apps/helpers.js +1 -0
- package/packages/app-core/src/components/apps/internal-tool-apps.d.ts +11 -0
- package/packages/app-core/src/components/apps/internal-tool-apps.d.ts.map +1 -1
- package/packages/app-core/src/components/apps/internal-tool-apps.js +31 -0
- package/packages/app-core/src/components/apps/launch-history.d.ts +16 -0
- package/packages/app-core/src/components/apps/launch-history.d.ts.map +1 -0
- package/packages/app-core/src/components/apps/launch-history.js +77 -0
- package/packages/app-core/src/components/apps/per-app-config.d.ts +19 -0
- package/packages/app-core/src/components/apps/per-app-config.d.ts.map +1 -0
- package/packages/app-core/src/components/apps/per-app-config.js +99 -0
- package/packages/app-core/src/components/apps/useRegistryCatalog.d.ts +14 -0
- package/packages/app-core/src/components/apps/useRegistryCatalog.d.ts.map +1 -0
- package/packages/app-core/src/components/apps/useRegistryCatalog.js +52 -0
- package/packages/app-core/src/components/auth/LoginView.d.ts +1 -19
- package/packages/app-core/src/components/auth/LoginView.d.ts.map +1 -1
- package/packages/app-core/src/components/auth/LoginView.js +4 -99
- package/packages/app-core/src/components/character/CharacterExperienceWorkspace.d.ts.map +1 -1
- package/packages/app-core/src/components/character/CharacterExperienceWorkspace.js +14 -2
- package/packages/app-core/src/components/character/character-hub-helpers.d.ts.map +1 -1
- package/packages/app-core/src/components/character/character-hub-helpers.js +7 -0
- package/packages/app-core/src/components/character/character-hub-types.d.ts +7 -0
- package/packages/app-core/src/components/character/character-hub-types.d.ts.map +1 -1
- package/packages/app-core/src/components/onboarding/BootstrapStep.d.ts.map +1 -1
- package/packages/app-core/src/components/onboarding/BootstrapStep.js +3 -2
- package/packages/app-core/src/components/pages/AppDetailsView.d.ts +36 -0
- package/packages/app-core/src/components/pages/AppDetailsView.d.ts.map +1 -0
- package/packages/app-core/src/components/pages/AppDetailsView.js +289 -0
- package/packages/app-core/src/components/pages/AppsView.d.ts.map +1 -1
- package/packages/app-core/src/components/pages/AppsView.js +134 -42
- package/packages/app-core/src/components/shell/StartupShell.d.ts.map +1 -1
- package/packages/app-core/src/components/shell/StartupShell.js +2 -5
- package/packages/app-core/src/i18n/locales/en.json +256 -205
- package/packages/app-core/src/i18n/locales/es.json +256 -205
- package/packages/app-core/src/i18n/locales/ko.json +256 -205
- package/packages/app-core/src/i18n/locales/pt.json +256 -205
- package/packages/app-core/src/i18n/locales/tl.json +256 -205
- package/packages/app-core/src/i18n/locales/vi.json +256 -205
- package/packages/app-core/src/i18n/locales/zh-CN.json +256 -205
- package/packages/app-core/src/navigation/index.d.ts.map +1 -1
- package/packages/app-core/src/navigation/index.js +6 -0
- package/packages/app-core/src/shell/AppWindowRenderer.d.ts +17 -0
- package/packages/app-core/src/shell/AppWindowRenderer.d.ts.map +1 -0
- package/packages/app-core/src/shell/AppWindowRenderer.js +337 -0
- package/packages/app-core/src/shell/DetachedShellRoot.js +4 -1
- package/packages/app-core/src/shell/index.d.ts +1 -0
- package/packages/app-core/src/shell/index.d.ts.map +1 -1
- package/packages/app-core/src/shell/index.js +1 -0
- package/packages/app-core/src/state/startup-coordinator.d.ts.map +1 -1
- package/packages/app-core/src/state/startup-coordinator.js +0 -3
- package/packages/app-core/src/state/startup-phase-poll.d.ts.map +1 -1
- package/packages/app-core/src/state/startup-phase-poll.js +2 -4
- package/packages/app-core/src/state/usePluginsSkillsState.d.ts +6 -6
- package/packages/native-plugins/mobile-signals/src/definitions.d.ts +162 -0
- package/packages/native-plugins/mobile-signals/src/definitions.d.ts.map +1 -0
- package/packages/native-plugins/mobile-signals/src/definitions.js +1 -0
- package/packages/native-plugins/mobile-signals/src/index.d.ts +4 -0
- package/packages/native-plugins/mobile-signals/src/index.d.ts.map +1 -0
- package/packages/native-plugins/mobile-signals/src/index.js +6 -0
- package/packages/native-plugins/mobile-signals/src/web.d.ts +29 -0
- package/packages/native-plugins/mobile-signals/src/web.d.ts.map +1 -0
- package/packages/native-plugins/mobile-signals/src/web.js +269 -0
- package/packages/shared/src/app-hero-art.d.ts.map +1 -1
- package/packages/shared/src/app-hero-art.js +13 -0
- package/packages/shared/src/contracts/lifeops.d.ts +10 -0
- package/packages/shared/src/contracts/lifeops.d.ts.map +1 -1
- package/packages/shared/src/contracts/lifeops.js +5 -0
- package/packages/typescript/src/features/advanced-capabilities/experience/actions/record-experience.d.ts.map +1 -1
- package/packages/typescript/src/features/advanced-capabilities/experience/actions/record-experience.js +46 -4
- package/packages/typescript/src/features/advanced-capabilities/experience/evaluators/experienceEvaluator.d.ts.map +1 -1
- package/packages/typescript/src/features/advanced-capabilities/experience/evaluators/experienceEvaluator.js +34 -124
- package/packages/typescript/src/features/advanced-capabilities/experience/service.d.ts.map +1 -1
- package/packages/typescript/src/features/advanced-capabilities/experience/service.js +56 -0
- package/packages/typescript/src/features/advanced-capabilities/experience/types.d.ts +7 -0
- package/packages/typescript/src/features/advanced-capabilities/experience/types.d.ts.map +1 -1
- package/packages/typescript/src/features/advanced-capabilities/experience/utils/experienceText.d.ts +7 -0
- package/packages/typescript/src/features/advanced-capabilities/experience/utils/experienceText.d.ts.map +1 -0
- package/packages/typescript/src/features/advanced-capabilities/experience/utils/experienceText.js +123 -0
- package/apps/app-training/src/ui/FineTuningView.d.ts +0 -5
- package/apps/app-training/src/ui/FineTuningView.d.ts.map +0 -1
- package/apps/app-training/src/ui/FineTuningView.js +0 -388
- package/apps/app-training/src/ui/fine-tuning-panels.d.ts +0 -111
- package/apps/app-training/src/ui/fine-tuning-panels.d.ts.map +0 -1
- package/apps/app-training/src/ui/fine-tuning-panels.js +0 -130
- package/apps/app-training/src/ui/index.d.ts +0 -3
- package/apps/app-training/src/ui/index.d.ts.map +0 -1
- package/apps/app-training/src/ui/index.js +0 -2
- package/packages/app-core/src/api/trusted-local-request.d.ts +0 -4
- package/packages/app-core/src/api/trusted-local-request.d.ts.map +0 -1
- package/packages/app-core/src/api/trusted-local-request.js +0 -176
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { client } from "@elizaos/app-core/api";
|
|
2
|
+
import { useCallback, useEffect, useState } from "react";
|
|
3
|
+
function formatError(cause, fallback) {
|
|
4
|
+
if (cause instanceof Error && cause.message.trim().length > 0) {
|
|
5
|
+
return cause.message.trim();
|
|
6
|
+
}
|
|
7
|
+
return fallback;
|
|
8
|
+
}
|
|
9
|
+
function isMacHostPlatform(platform) {
|
|
10
|
+
return platform === "darwin";
|
|
11
|
+
}
|
|
12
|
+
export function useIMessageConnector() {
|
|
13
|
+
const [status, setStatus] = useState(null);
|
|
14
|
+
const [loading, setLoading] = useState(true);
|
|
15
|
+
const [error, setError] = useState(null);
|
|
16
|
+
const [fullDiskAccess, setFullDiskAccess] = useState(null);
|
|
17
|
+
const refreshSupportState = useCallback(async (nextStatus) => {
|
|
18
|
+
if (!isMacHostPlatform(nextStatus?.hostPlatform)) {
|
|
19
|
+
setFullDiskAccess(null);
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
const fullDiskAccessResult = await client.getLifeOpsFullDiskAccessStatus();
|
|
23
|
+
setFullDiskAccess(fullDiskAccessResult);
|
|
24
|
+
}, []);
|
|
25
|
+
const refresh = useCallback(async () => {
|
|
26
|
+
setLoading(true);
|
|
27
|
+
try {
|
|
28
|
+
const nextStatus = await client.getIMessageConnectorStatus();
|
|
29
|
+
setStatus(nextStatus);
|
|
30
|
+
setError(null);
|
|
31
|
+
await refreshSupportState(nextStatus);
|
|
32
|
+
}
|
|
33
|
+
catch (cause) {
|
|
34
|
+
setError(formatError(cause, "iMessage connector status failed to load."));
|
|
35
|
+
}
|
|
36
|
+
finally {
|
|
37
|
+
setLoading(false);
|
|
38
|
+
}
|
|
39
|
+
}, [refreshSupportState]);
|
|
40
|
+
useEffect(() => {
|
|
41
|
+
void refresh();
|
|
42
|
+
}, [refresh]);
|
|
43
|
+
return {
|
|
44
|
+
status,
|
|
45
|
+
loading,
|
|
46
|
+
error,
|
|
47
|
+
fullDiskAccess,
|
|
48
|
+
refresh,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { LifeOpsInboxChannel, LifeOpsInboxMessage, LifeOpsInboxThreadGroup } from "@elizaos/shared";
|
|
2
|
+
export type InboxChannel = "all" | LifeOpsInboxChannel;
|
|
3
|
+
export type InboxChatType = "dm" | "group" | "channel";
|
|
4
|
+
export interface UseInboxOptions {
|
|
5
|
+
maxResults?: number;
|
|
6
|
+
channel?: InboxChannel;
|
|
7
|
+
channels?: readonly LifeOpsInboxChannel[];
|
|
8
|
+
searchQuery?: string;
|
|
9
|
+
/** When true, request `threadGroups` from the backend. */
|
|
10
|
+
groupByThread?: boolean;
|
|
11
|
+
/** Server-side chatType filter (DM / small group / channel). */
|
|
12
|
+
chatTypeFilter?: ReadonlyArray<InboxChatType>;
|
|
13
|
+
/** Server-side cap on group participants. */
|
|
14
|
+
maxParticipants?: number;
|
|
15
|
+
/** Filter Gmail to a specific Google grant. */
|
|
16
|
+
gmailAccountId?: string;
|
|
17
|
+
/** Only return threads that have gone unreplied for >24h with priority >=50. */
|
|
18
|
+
missedOnly?: boolean;
|
|
19
|
+
/** Sort thread groups by priority desc with recency tiebreaker. */
|
|
20
|
+
sortByPriority?: boolean;
|
|
21
|
+
}
|
|
22
|
+
export interface UseInboxResult {
|
|
23
|
+
messages: LifeOpsInboxMessage[];
|
|
24
|
+
threadGroups: LifeOpsInboxThreadGroup[];
|
|
25
|
+
loading: boolean;
|
|
26
|
+
error: string | null;
|
|
27
|
+
refresh: () => Promise<void>;
|
|
28
|
+
channel: InboxChannel;
|
|
29
|
+
setChannel: (ch: InboxChannel) => void;
|
|
30
|
+
searchQuery: string;
|
|
31
|
+
setSearchQuery: (q: string) => void;
|
|
32
|
+
}
|
|
33
|
+
export declare function useInbox(opts?: UseInboxOptions): UseInboxResult;
|
|
34
|
+
//# sourceMappingURL=useInbox.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useInbox.d.ts","sourceRoot":"","sources":["../../../../../../../apps/app-lifeops/src/hooks/useInbox.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,mBAAmB,EACnB,mBAAmB,EACnB,uBAAuB,EACxB,MAAM,iBAAiB,CAAC;AAGzB,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,mBAAmB,CAAC;AACvD,MAAM,MAAM,aAAa,GAAG,IAAI,GAAG,OAAO,GAAG,SAAS,CAAC;AAEvD,MAAM,WAAW,eAAe;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,QAAQ,CAAC,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0DAA0D;IAC1D,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,gEAAgE;IAChE,cAAc,CAAC,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC;IAC9C,6CAA6C;IAC7C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,+CAA+C;IAC/C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gFAAgF;IAChF,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,mEAAmE;IACnE,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,mBAAmB,EAAE,CAAC;IAChC,YAAY,EAAE,uBAAuB,EAAE,CAAC;IACxC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,OAAO,EAAE,YAAY,CAAC;IACtB,UAAU,EAAE,CAAC,EAAE,EAAE,YAAY,KAAK,IAAI,CAAC;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CACrC;AA0BD,wBAAgB,QAAQ,CAAC,IAAI,GAAE,eAAoB,GAAG,cAAc,CA0FnE"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { client, useApp } from "@elizaos/app-core";
|
|
2
|
+
import { useCallback, useEffect, useMemo, useState } from "react";
|
|
3
|
+
const DEFAULT_MAX_RESULTS = 40;
|
|
4
|
+
function matchesQuery(message, q) {
|
|
5
|
+
return ((message.subject ?? "").toLowerCase().includes(q) ||
|
|
6
|
+
message.sender.displayName.toLowerCase().includes(q) ||
|
|
7
|
+
message.snippet.toLowerCase().includes(q) ||
|
|
8
|
+
message.channel.toLowerCase().includes(q));
|
|
9
|
+
}
|
|
10
|
+
function threadGroupMatchesQuery(group, q) {
|
|
11
|
+
if (matchesQuery(group.latestMessage, q)) {
|
|
12
|
+
return true;
|
|
13
|
+
}
|
|
14
|
+
return (group.messages ?? []).some((message) => matchesQuery(message, q));
|
|
15
|
+
}
|
|
16
|
+
export function useInbox(opts = {}) {
|
|
17
|
+
const { t } = useApp();
|
|
18
|
+
const [feed, setFeed] = useState(null);
|
|
19
|
+
const [loading, setLoading] = useState(false);
|
|
20
|
+
const [error, setError] = useState(null);
|
|
21
|
+
const [channel, setChannel] = useState(opts.channel ?? "all");
|
|
22
|
+
const [searchQuery, setSearchQuery] = useState(opts.searchQuery ?? "");
|
|
23
|
+
useEffect(() => {
|
|
24
|
+
setChannel(opts.channel ?? "all");
|
|
25
|
+
}, [opts.channel]);
|
|
26
|
+
const chatTypeFilterKey = opts.chatTypeFilter
|
|
27
|
+
? opts.chatTypeFilter.join(",")
|
|
28
|
+
: "";
|
|
29
|
+
const fetch = useCallback(async () => {
|
|
30
|
+
setLoading(true);
|
|
31
|
+
setError(null);
|
|
32
|
+
try {
|
|
33
|
+
const selectedChannels = channel === "all"
|
|
34
|
+
? opts.channels
|
|
35
|
+
? [...opts.channels]
|
|
36
|
+
: undefined
|
|
37
|
+
: [channel];
|
|
38
|
+
const result = await client.getLifeOpsInbox({
|
|
39
|
+
limit: opts.maxResults ?? DEFAULT_MAX_RESULTS,
|
|
40
|
+
channels: selectedChannels,
|
|
41
|
+
groupByThread: opts.groupByThread,
|
|
42
|
+
chatTypeFilter: opts.chatTypeFilter
|
|
43
|
+
? [...opts.chatTypeFilter]
|
|
44
|
+
: undefined,
|
|
45
|
+
maxParticipants: opts.maxParticipants,
|
|
46
|
+
gmailAccountId: opts.gmailAccountId,
|
|
47
|
+
missedOnly: opts.missedOnly,
|
|
48
|
+
sortByPriority: opts.sortByPriority,
|
|
49
|
+
});
|
|
50
|
+
setFeed(result);
|
|
51
|
+
}
|
|
52
|
+
catch (cause) {
|
|
53
|
+
setError(cause instanceof Error && cause.message.trim().length > 0
|
|
54
|
+
? cause.message.trim()
|
|
55
|
+
: t("lifeopsInbox.loadFailed", {
|
|
56
|
+
defaultValue: "Inbox failed to load.",
|
|
57
|
+
}));
|
|
58
|
+
}
|
|
59
|
+
finally {
|
|
60
|
+
setLoading(false);
|
|
61
|
+
}
|
|
62
|
+
}, [
|
|
63
|
+
channel,
|
|
64
|
+
opts.channels,
|
|
65
|
+
opts.maxResults,
|
|
66
|
+
opts.groupByThread,
|
|
67
|
+
chatTypeFilterKey,
|
|
68
|
+
opts.maxParticipants,
|
|
69
|
+
opts.gmailAccountId,
|
|
70
|
+
opts.missedOnly,
|
|
71
|
+
opts.sortByPriority,
|
|
72
|
+
t,
|
|
73
|
+
]);
|
|
74
|
+
useEffect(() => {
|
|
75
|
+
void fetch();
|
|
76
|
+
}, [fetch]);
|
|
77
|
+
const messages = useMemo(() => {
|
|
78
|
+
const base = feed?.messages ?? [];
|
|
79
|
+
const q = searchQuery.trim().toLowerCase();
|
|
80
|
+
return q ? base.filter((m) => matchesQuery(m, q)) : base;
|
|
81
|
+
}, [feed, searchQuery]);
|
|
82
|
+
const threadGroups = useMemo(() => {
|
|
83
|
+
const base = feed?.threadGroups ?? [];
|
|
84
|
+
const q = searchQuery.trim().toLowerCase();
|
|
85
|
+
return q ? base.filter((g) => threadGroupMatchesQuery(g, q)) : base;
|
|
86
|
+
}, [feed, searchQuery]);
|
|
87
|
+
return {
|
|
88
|
+
messages,
|
|
89
|
+
threadGroups,
|
|
90
|
+
loading,
|
|
91
|
+
error,
|
|
92
|
+
refresh: fetch,
|
|
93
|
+
channel,
|
|
94
|
+
setChannel,
|
|
95
|
+
searchQuery,
|
|
96
|
+
setSearchQuery,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useLifeOpsActivitySignals.d.ts","sourceRoot":"","sources":["../../../../../../../apps/app-lifeops/src/hooks/useLifeOpsActivitySignals.ts"],"names":[],"mappings":"AAiJA,wBAAgB,yBAAyB,CAAC,OAAO,UAAO,GAAG,IAAI,CAuU9D"}
|
|
@@ -0,0 +1,383 @@
|
|
|
1
|
+
import { Capacitor } from "@capacitor/core";
|
|
2
|
+
import { APP_PAUSE_EVENT, APP_RESUME_EVENT, client, isApiError, isElectrobunRuntime, loadDesktopWorkspaceSnapshot, } from "@elizaos/app-core";
|
|
3
|
+
import { MobileSignals, } from "@elizaos/capacitor-mobile-signals";
|
|
4
|
+
import { useEffect, useRef } from "react";
|
|
5
|
+
import { dispatchLifeOpsActivitySignalsStatus } from "../events/index.js";
|
|
6
|
+
const APP_SIGNAL_DEDUP_WINDOW_MS = 5_000;
|
|
7
|
+
const RUNTIME_READY_POLL_MS = 5_000;
|
|
8
|
+
const PAGE_HEARTBEAT_MS = 60_000;
|
|
9
|
+
const DESKTOP_POWER_POLL_MS = 60_000;
|
|
10
|
+
// Health sleep data drives wake detection; five-minute polling keeps morning
|
|
11
|
+
// anchors timely without running while mobile monitoring is stopped.
|
|
12
|
+
const MOBILE_HEALTH_POLL_MS = 5 * 60_000;
|
|
13
|
+
function getWindowCapacitor() {
|
|
14
|
+
if (typeof window === "undefined") {
|
|
15
|
+
return undefined;
|
|
16
|
+
}
|
|
17
|
+
return window.Capacitor;
|
|
18
|
+
}
|
|
19
|
+
function resolveCapacitorPlatform() {
|
|
20
|
+
const importedPlatform = Capacitor.getPlatform();
|
|
21
|
+
if (importedPlatform !== "web") {
|
|
22
|
+
return importedPlatform;
|
|
23
|
+
}
|
|
24
|
+
return getWindowCapacitor()?.getPlatform?.() ?? importedPlatform;
|
|
25
|
+
}
|
|
26
|
+
function isNativeCapacitorRuntime() {
|
|
27
|
+
return (Capacitor.isNativePlatform() ||
|
|
28
|
+
getWindowCapacitor()?.isNativePlatform?.() === true ||
|
|
29
|
+
["ios", "android"].includes(resolveCapacitorPlatform()));
|
|
30
|
+
}
|
|
31
|
+
function resolveActivityPlatform() {
|
|
32
|
+
if (isElectrobunRuntime()) {
|
|
33
|
+
return "desktop_app";
|
|
34
|
+
}
|
|
35
|
+
if (isNativeCapacitorRuntime()) {
|
|
36
|
+
return "mobile_app";
|
|
37
|
+
}
|
|
38
|
+
return "web_app";
|
|
39
|
+
}
|
|
40
|
+
function errorMessage(error) {
|
|
41
|
+
return error instanceof Error && error.message.trim().length > 0
|
|
42
|
+
? error.message.trim()
|
|
43
|
+
: String(error);
|
|
44
|
+
}
|
|
45
|
+
function fingerprintSignal(signal) {
|
|
46
|
+
return JSON.stringify([
|
|
47
|
+
signal.source,
|
|
48
|
+
signal.platform ?? "",
|
|
49
|
+
signal.state,
|
|
50
|
+
signal.idleState ?? "",
|
|
51
|
+
signal.idleTimeSeconds ?? "",
|
|
52
|
+
signal.onBattery ?? "",
|
|
53
|
+
signal.metadata ?? {},
|
|
54
|
+
]);
|
|
55
|
+
}
|
|
56
|
+
function mapMobileSignal(signal) {
|
|
57
|
+
return {
|
|
58
|
+
source: signal.source,
|
|
59
|
+
platform: signal.platform,
|
|
60
|
+
state: signal.state,
|
|
61
|
+
observedAt: new Date(signal.observedAt).toISOString(),
|
|
62
|
+
idleState: signal.idleState,
|
|
63
|
+
idleTimeSeconds: signal.idleTimeSeconds ?? undefined,
|
|
64
|
+
onBattery: signal.onBattery ?? undefined,
|
|
65
|
+
health: signal.source === "mobile_health"
|
|
66
|
+
? {
|
|
67
|
+
source: signal.healthSource,
|
|
68
|
+
permissions: signal.permissions,
|
|
69
|
+
sleep: {
|
|
70
|
+
available: signal.sleep.available,
|
|
71
|
+
isSleeping: signal.sleep.isSleeping,
|
|
72
|
+
asleepAt: signal.sleep.asleepAt !== null
|
|
73
|
+
? new Date(signal.sleep.asleepAt).toISOString()
|
|
74
|
+
: null,
|
|
75
|
+
awakeAt: signal.sleep.awakeAt !== null
|
|
76
|
+
? new Date(signal.sleep.awakeAt).toISOString()
|
|
77
|
+
: null,
|
|
78
|
+
durationMinutes: signal.sleep.durationMinutes,
|
|
79
|
+
stage: signal.sleep.stage,
|
|
80
|
+
},
|
|
81
|
+
biometrics: {
|
|
82
|
+
sampleAt: signal.biometrics.sampleAt !== null
|
|
83
|
+
? new Date(signal.biometrics.sampleAt).toISOString()
|
|
84
|
+
: null,
|
|
85
|
+
heartRateBpm: signal.biometrics.heartRateBpm,
|
|
86
|
+
restingHeartRateBpm: signal.biometrics.restingHeartRateBpm,
|
|
87
|
+
heartRateVariabilityMs: signal.biometrics.heartRateVariabilityMs,
|
|
88
|
+
respiratoryRate: signal.biometrics.respiratoryRate,
|
|
89
|
+
bloodOxygenPercent: signal.biometrics.bloodOxygenPercent,
|
|
90
|
+
},
|
|
91
|
+
warnings: signal.warnings,
|
|
92
|
+
}
|
|
93
|
+
: undefined,
|
|
94
|
+
metadata: signal.metadata,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
export function useLifeOpsActivitySignals(enabled = true) {
|
|
98
|
+
const platformRef = useRef(resolveActivityPlatform());
|
|
99
|
+
const lastSentRef = useRef(new Map());
|
|
100
|
+
const runtimeReadyRef = useRef(false);
|
|
101
|
+
useEffect(() => {
|
|
102
|
+
if (!enabled) {
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
let mounted = true;
|
|
106
|
+
const isRuntimeUnavailableError = (error) => isApiError(error) &&
|
|
107
|
+
error.kind === "http" &&
|
|
108
|
+
error.status === 503 &&
|
|
109
|
+
error.path === "/api/lifeops/activity-signals";
|
|
110
|
+
const reportCaptureError = (error) => {
|
|
111
|
+
if (isRuntimeUnavailableError(error)) {
|
|
112
|
+
runtimeReadyRef.current = false;
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
if (isApiError(error) &&
|
|
116
|
+
(error.kind === "network" ||
|
|
117
|
+
error.kind === "timeout" ||
|
|
118
|
+
(error.status === 503 &&
|
|
119
|
+
error.path === "/api/lifeops/activity-signals"))) {
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
dispatchLifeOpsActivitySignalsStatus({
|
|
123
|
+
status: "capture_error",
|
|
124
|
+
message: errorMessage(error),
|
|
125
|
+
});
|
|
126
|
+
};
|
|
127
|
+
const refreshRuntimeReady = async () => {
|
|
128
|
+
try {
|
|
129
|
+
const status = await client.getStatus();
|
|
130
|
+
const ready = status.state === "running";
|
|
131
|
+
runtimeReadyRef.current = ready;
|
|
132
|
+
return ready;
|
|
133
|
+
}
|
|
134
|
+
catch {
|
|
135
|
+
runtimeReadyRef.current = false;
|
|
136
|
+
return false;
|
|
137
|
+
}
|
|
138
|
+
};
|
|
139
|
+
const sendSignal = async (signal) => {
|
|
140
|
+
if (!mounted || !runtimeReadyRef.current) {
|
|
141
|
+
return null;
|
|
142
|
+
}
|
|
143
|
+
const normalized = {
|
|
144
|
+
...signal,
|
|
145
|
+
platform: signal.platform ?? platformRef.current,
|
|
146
|
+
};
|
|
147
|
+
const fingerprint = fingerprintSignal(normalized);
|
|
148
|
+
const dedupeKey = `${normalized.source}:${normalized.platform ?? ""}`;
|
|
149
|
+
const previous = lastSentRef.current.get(dedupeKey);
|
|
150
|
+
const nowMs = Date.now();
|
|
151
|
+
if (previous &&
|
|
152
|
+
previous.fingerprint === fingerprint &&
|
|
153
|
+
nowMs - previous.sentAtMs < APP_SIGNAL_DEDUP_WINDOW_MS) {
|
|
154
|
+
return null;
|
|
155
|
+
}
|
|
156
|
+
lastSentRef.current.set(dedupeKey, { fingerprint, sentAtMs: nowMs });
|
|
157
|
+
try {
|
|
158
|
+
const { signal: persisted } = await client.captureLifeOpsActivitySignal(normalized);
|
|
159
|
+
return persisted;
|
|
160
|
+
}
|
|
161
|
+
catch (error) {
|
|
162
|
+
lastSentRef.current.delete(dedupeKey);
|
|
163
|
+
if (isRuntimeUnavailableError(error)) {
|
|
164
|
+
runtimeReadyRef.current = false;
|
|
165
|
+
return null;
|
|
166
|
+
}
|
|
167
|
+
throw error;
|
|
168
|
+
}
|
|
169
|
+
};
|
|
170
|
+
const sendSnapshotResult = async (result) => {
|
|
171
|
+
if (result.snapshot) {
|
|
172
|
+
await sendSignal(mapMobileSignal(result.snapshot));
|
|
173
|
+
}
|
|
174
|
+
if (result.healthSnapshot) {
|
|
175
|
+
await sendSignal(mapMobileSignal(result.healthSnapshot));
|
|
176
|
+
}
|
|
177
|
+
};
|
|
178
|
+
const fireAndForget = (signal) => {
|
|
179
|
+
void sendSignal(signal).catch(reportCaptureError);
|
|
180
|
+
};
|
|
181
|
+
const emitPageState = (reason) => {
|
|
182
|
+
const isVisible = document.visibilityState === "visible";
|
|
183
|
+
const hasFocus = typeof document.hasFocus === "function" ? document.hasFocus() : true;
|
|
184
|
+
fireAndForget({
|
|
185
|
+
source: "page_visibility",
|
|
186
|
+
state: isVisible && hasFocus ? "active" : "background",
|
|
187
|
+
metadata: {
|
|
188
|
+
reason,
|
|
189
|
+
visibilityState: document.visibilityState,
|
|
190
|
+
hasFocus,
|
|
191
|
+
},
|
|
192
|
+
});
|
|
193
|
+
};
|
|
194
|
+
const emitLifecycleState = (state) => {
|
|
195
|
+
fireAndForget({
|
|
196
|
+
source: "app_lifecycle",
|
|
197
|
+
state,
|
|
198
|
+
metadata: { reason: state === "active" ? "resume" : "pause" },
|
|
199
|
+
});
|
|
200
|
+
};
|
|
201
|
+
const emitDesktopSnapshot = async (reason) => {
|
|
202
|
+
try {
|
|
203
|
+
if (!isElectrobunRuntime()) {
|
|
204
|
+
return;
|
|
205
|
+
}
|
|
206
|
+
const snapshot = await loadDesktopWorkspaceSnapshot();
|
|
207
|
+
if (!snapshot.supported || !snapshot.power) {
|
|
208
|
+
return;
|
|
209
|
+
}
|
|
210
|
+
const state = snapshot.power.idleState === "locked"
|
|
211
|
+
? "locked"
|
|
212
|
+
: snapshot.power.idleState === "idle"
|
|
213
|
+
? "idle"
|
|
214
|
+
: snapshot.window.focused &&
|
|
215
|
+
document.visibilityState === "visible"
|
|
216
|
+
? "active"
|
|
217
|
+
: "background";
|
|
218
|
+
await sendSignal({
|
|
219
|
+
source: "desktop_power",
|
|
220
|
+
state,
|
|
221
|
+
idleState: snapshot.power.idleState,
|
|
222
|
+
idleTimeSeconds: Math.max(0, Math.trunc(snapshot.power.idleTime)),
|
|
223
|
+
onBattery: snapshot.power.onBattery,
|
|
224
|
+
metadata: {
|
|
225
|
+
reason,
|
|
226
|
+
windowFocused: snapshot.window.focused,
|
|
227
|
+
windowVisible: snapshot.window.visible,
|
|
228
|
+
documentVisibility: document.visibilityState,
|
|
229
|
+
},
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
catch (error) {
|
|
233
|
+
reportCaptureError(error);
|
|
234
|
+
}
|
|
235
|
+
};
|
|
236
|
+
const handleVisibilityChange = () => {
|
|
237
|
+
emitPageState("visibilitychange");
|
|
238
|
+
};
|
|
239
|
+
const handleFocus = () => {
|
|
240
|
+
emitPageState("focus");
|
|
241
|
+
void emitDesktopSnapshot("focus");
|
|
242
|
+
};
|
|
243
|
+
const handleBlur = () => {
|
|
244
|
+
emitPageState("blur");
|
|
245
|
+
void emitDesktopSnapshot("blur");
|
|
246
|
+
};
|
|
247
|
+
const handleResume = () => {
|
|
248
|
+
emitLifecycleState("active");
|
|
249
|
+
emitPageState("resume");
|
|
250
|
+
void refreshMobileHealthSnapshot("resume");
|
|
251
|
+
void emitDesktopSnapshot("resume");
|
|
252
|
+
};
|
|
253
|
+
const handlePause = () => {
|
|
254
|
+
emitLifecycleState("background");
|
|
255
|
+
emitPageState("pause");
|
|
256
|
+
void refreshMobileHealthSnapshot("pause");
|
|
257
|
+
void emitDesktopSnapshot("pause");
|
|
258
|
+
};
|
|
259
|
+
const mobileSignals = isNativeCapacitorRuntime() && !isElectrobunRuntime()
|
|
260
|
+
? MobileSignals
|
|
261
|
+
: null;
|
|
262
|
+
let mobileSignalsHandle = null;
|
|
263
|
+
let mobileSignalsStarted = false;
|
|
264
|
+
let mobileHealthPoller = null;
|
|
265
|
+
const refreshMobileHealthSnapshot = async (reason) => {
|
|
266
|
+
if (!mobileSignals || typeof mobileSignals.getSnapshot !== "function") {
|
|
267
|
+
return;
|
|
268
|
+
}
|
|
269
|
+
const snapshot = await mobileSignals.getSnapshot();
|
|
270
|
+
if (snapshot.supported) {
|
|
271
|
+
await sendSnapshotResult(snapshot);
|
|
272
|
+
}
|
|
273
|
+
else {
|
|
274
|
+
dispatchLifeOpsActivitySignalsStatus({
|
|
275
|
+
status: "snapshot_unavailable",
|
|
276
|
+
reason,
|
|
277
|
+
});
|
|
278
|
+
}
|
|
279
|
+
};
|
|
280
|
+
const startMobileSignals = async () => {
|
|
281
|
+
if (mobileSignalsHandle || mobileSignalsStarted) {
|
|
282
|
+
return;
|
|
283
|
+
}
|
|
284
|
+
if (!mobileSignals ||
|
|
285
|
+
typeof mobileSignals.addListener !== "function" ||
|
|
286
|
+
typeof mobileSignals.checkPermissions !== "function" ||
|
|
287
|
+
typeof mobileSignals.requestPermissions !== "function" ||
|
|
288
|
+
typeof mobileSignals.startMonitoring !== "function" ||
|
|
289
|
+
typeof mobileSignals.stopMonitoring !== "function") {
|
|
290
|
+
return;
|
|
291
|
+
}
|
|
292
|
+
const permissions = await mobileSignals.checkPermissions();
|
|
293
|
+
if (permissions.status !== "granted" && permissions.canRequest) {
|
|
294
|
+
await mobileSignals.requestPermissions();
|
|
295
|
+
}
|
|
296
|
+
mobileSignalsHandle = await mobileSignals.addListener("signal", (signal) => {
|
|
297
|
+
void sendSignal(mapMobileSignal(signal)).catch(reportCaptureError);
|
|
298
|
+
});
|
|
299
|
+
const initial = await mobileSignals.startMonitoring({
|
|
300
|
+
emitInitial: true,
|
|
301
|
+
});
|
|
302
|
+
mobileSignalsStarted = initial.enabled;
|
|
303
|
+
await sendSnapshotResult(initial);
|
|
304
|
+
await refreshMobileHealthSnapshot("start");
|
|
305
|
+
if (typeof mobileSignals.scheduleBackgroundRefresh === "function") {
|
|
306
|
+
try {
|
|
307
|
+
const result = await mobileSignals.scheduleBackgroundRefresh();
|
|
308
|
+
if (!result.scheduled && result.reason) {
|
|
309
|
+
dispatchLifeOpsActivitySignalsStatus({
|
|
310
|
+
status: "background_refresh_unavailable",
|
|
311
|
+
reason: result.reason,
|
|
312
|
+
});
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
catch (error) {
|
|
316
|
+
reportCaptureError(error);
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
mobileHealthPoller = window.setInterval(() => {
|
|
320
|
+
void refreshMobileHealthSnapshot("poll").catch(reportCaptureError);
|
|
321
|
+
}, MOBILE_HEALTH_POLL_MS);
|
|
322
|
+
};
|
|
323
|
+
const emitCurrentState = (reason) => {
|
|
324
|
+
emitLifecycleState("active");
|
|
325
|
+
emitPageState(reason);
|
|
326
|
+
void emitDesktopSnapshot(reason);
|
|
327
|
+
void refreshMobileHealthSnapshot(reason).catch(reportCaptureError);
|
|
328
|
+
};
|
|
329
|
+
void refreshRuntimeReady()
|
|
330
|
+
.then((ready) => {
|
|
331
|
+
if (ready) {
|
|
332
|
+
emitCurrentState("mount");
|
|
333
|
+
void startMobileSignals().catch(reportCaptureError);
|
|
334
|
+
}
|
|
335
|
+
})
|
|
336
|
+
.catch(reportCaptureError);
|
|
337
|
+
document.addEventListener("visibilitychange", handleVisibilityChange);
|
|
338
|
+
document.addEventListener(APP_RESUME_EVENT, handleResume);
|
|
339
|
+
document.addEventListener(APP_PAUSE_EVENT, handlePause);
|
|
340
|
+
window.addEventListener("focus", handleFocus);
|
|
341
|
+
window.addEventListener("blur", handleBlur);
|
|
342
|
+
const runtimePoller = window.setInterval(() => {
|
|
343
|
+
const wasReady = runtimeReadyRef.current;
|
|
344
|
+
void refreshRuntimeReady()
|
|
345
|
+
.then((ready) => {
|
|
346
|
+
if (!mounted || !ready || wasReady) {
|
|
347
|
+
return;
|
|
348
|
+
}
|
|
349
|
+
emitCurrentState("runtime-ready");
|
|
350
|
+
void startMobileSignals().catch(reportCaptureError);
|
|
351
|
+
})
|
|
352
|
+
.catch(reportCaptureError);
|
|
353
|
+
}, RUNTIME_READY_POLL_MS);
|
|
354
|
+
const pageHeartbeat = window.setInterval(() => {
|
|
355
|
+
if (document.visibilityState === "visible") {
|
|
356
|
+
emitPageState("heartbeat");
|
|
357
|
+
}
|
|
358
|
+
}, PAGE_HEARTBEAT_MS);
|
|
359
|
+
const desktopPoller = window.setInterval(() => {
|
|
360
|
+
void emitDesktopSnapshot("poll");
|
|
361
|
+
}, DESKTOP_POWER_POLL_MS);
|
|
362
|
+
return () => {
|
|
363
|
+
mounted = false;
|
|
364
|
+
document.removeEventListener("visibilitychange", handleVisibilityChange);
|
|
365
|
+
document.removeEventListener(APP_RESUME_EVENT, handleResume);
|
|
366
|
+
document.removeEventListener(APP_PAUSE_EVENT, handlePause);
|
|
367
|
+
window.removeEventListener("focus", handleFocus);
|
|
368
|
+
window.removeEventListener("blur", handleBlur);
|
|
369
|
+
if (mobileSignalsHandle) {
|
|
370
|
+
void mobileSignalsHandle.remove();
|
|
371
|
+
}
|
|
372
|
+
if (mobileSignalsStarted) {
|
|
373
|
+
void mobileSignals?.stopMonitoring().catch(reportCaptureError);
|
|
374
|
+
}
|
|
375
|
+
if (mobileHealthPoller !== null) {
|
|
376
|
+
window.clearInterval(mobileHealthPoller);
|
|
377
|
+
}
|
|
378
|
+
window.clearInterval(runtimePoller);
|
|
379
|
+
window.clearInterval(pageHeartbeat);
|
|
380
|
+
window.clearInterval(desktopPoller);
|
|
381
|
+
};
|
|
382
|
+
}, [enabled]);
|
|
383
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare function useLifeOpsAppState(): {
|
|
2
|
+
enabled: boolean;
|
|
3
|
+
loading: boolean;
|
|
4
|
+
saving: boolean;
|
|
5
|
+
error: string | null;
|
|
6
|
+
refresh: () => Promise<import("../api/client-lifeops").LifeOpsAppStateDto>;
|
|
7
|
+
updateEnabled: (nextEnabled: boolean) => Promise<import("../api/client-lifeops").LifeOpsAppStateDto>;
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=useLifeOpsAppState.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useLifeOpsAppState.d.ts","sourceRoot":"","sources":["../../../../../../../apps/app-lifeops/src/hooks/useLifeOpsAppState.ts"],"names":[],"mappings":"AASA,wBAAgB,kBAAkB;;;;;;iCAkDsB,OAAO;EAyB9D"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { useCallback, useEffect, useState } from "react";
|
|
2
|
+
import { client } from "@elizaos/app-core";
|
|
3
|
+
function errorMessage(cause) {
|
|
4
|
+
return cause instanceof Error && cause.message.trim().length > 0
|
|
5
|
+
? cause.message.trim()
|
|
6
|
+
: "LifeOps app state failed to load.";
|
|
7
|
+
}
|
|
8
|
+
export function useLifeOpsAppState() {
|
|
9
|
+
const [enabled, setEnabled] = useState(false);
|
|
10
|
+
const [loading, setLoading] = useState(true);
|
|
11
|
+
const [saving, setSaving] = useState(false);
|
|
12
|
+
const [error, setError] = useState(null);
|
|
13
|
+
const refresh = useCallback(async () => {
|
|
14
|
+
setLoading(true);
|
|
15
|
+
try {
|
|
16
|
+
const state = await client.getLifeOpsAppState();
|
|
17
|
+
setEnabled(state.enabled === true);
|
|
18
|
+
setError(null);
|
|
19
|
+
return state;
|
|
20
|
+
}
|
|
21
|
+
catch (cause) {
|
|
22
|
+
setError(errorMessage(cause));
|
|
23
|
+
throw cause;
|
|
24
|
+
}
|
|
25
|
+
finally {
|
|
26
|
+
setLoading(false);
|
|
27
|
+
}
|
|
28
|
+
}, []);
|
|
29
|
+
useEffect(() => {
|
|
30
|
+
let cancelled = false;
|
|
31
|
+
void (async () => {
|
|
32
|
+
setLoading(true);
|
|
33
|
+
try {
|
|
34
|
+
const state = await client.getLifeOpsAppState();
|
|
35
|
+
if (cancelled) {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
setEnabled(state.enabled === true);
|
|
39
|
+
setError(null);
|
|
40
|
+
}
|
|
41
|
+
catch (cause) {
|
|
42
|
+
if (cancelled) {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
setError(errorMessage(cause));
|
|
46
|
+
}
|
|
47
|
+
finally {
|
|
48
|
+
if (!cancelled) {
|
|
49
|
+
setLoading(false);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
})();
|
|
53
|
+
return () => {
|
|
54
|
+
cancelled = true;
|
|
55
|
+
};
|
|
56
|
+
}, []);
|
|
57
|
+
const updateEnabled = useCallback(async (nextEnabled) => {
|
|
58
|
+
setSaving(true);
|
|
59
|
+
try {
|
|
60
|
+
const state = await client.updateLifeOpsAppState({
|
|
61
|
+
enabled: nextEnabled,
|
|
62
|
+
});
|
|
63
|
+
setEnabled(state.enabled === true);
|
|
64
|
+
setError(null);
|
|
65
|
+
return state;
|
|
66
|
+
}
|
|
67
|
+
catch (cause) {
|
|
68
|
+
setError(errorMessage(cause));
|
|
69
|
+
throw cause;
|
|
70
|
+
}
|
|
71
|
+
finally {
|
|
72
|
+
setSaving(false);
|
|
73
|
+
}
|
|
74
|
+
}, []);
|
|
75
|
+
return {
|
|
76
|
+
enabled,
|
|
77
|
+
loading,
|
|
78
|
+
saving,
|
|
79
|
+
error,
|
|
80
|
+
refresh,
|
|
81
|
+
updateEnabled,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { LifeOpsCapabilitiesStatus } from "@elizaos/shared";
|
|
2
|
+
export declare function useLifeOpsCapabilitiesStatus(): {
|
|
3
|
+
readonly status: LifeOpsCapabilitiesStatus | null;
|
|
4
|
+
readonly loading: boolean;
|
|
5
|
+
readonly error: string | null;
|
|
6
|
+
readonly refresh: () => Promise<void>;
|
|
7
|
+
};
|
|
8
|
+
//# sourceMappingURL=useLifeOpsCapabilitiesStatus.d.ts.map
|