@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
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { LIFEOPS_CALENDAR_WINDOW_PRESETS, } from "../contracts/index.js";
|
|
2
2
|
import { fail, normalizeFiniteNumber, normalizeIsoString, normalizeOptionalBoolean, normalizeOptionalIsoString, normalizeOptionalMinutes, normalizeOptionalString, normalizeValidTimeZone, requireNonEmptyString, } from "./service-normalize.js";
|
|
3
|
-
import { DEFAULT_NEXT_EVENT_LOOKAHEAD_DAYS, DEFAULT_GMAIL_TRIAGE_MAX_RESULTS, GOOGLE_PRIMARY_CALENDAR_ID, } from "./service-constants.js";
|
|
3
|
+
import { DEFAULT_NEXT_EVENT_LOOKAHEAD_DAYS, DEFAULT_GMAIL_TRIAGE_MAX_RESULTS, MAX_GMAIL_TRIAGE_MAX_RESULTS, GOOGLE_PRIMARY_CALENDAR_ID, } from "./service-constants.js";
|
|
4
4
|
import { resolveDefaultTimeZone } from "./defaults.js";
|
|
5
5
|
import { GOOGLE_GMAIL_READ_SCOPE, normalizeGoogleCapabilities } from "./google-scopes.js";
|
|
6
6
|
import { addDaysToLocalDate, addMinutes, buildUtcDateFromLocalParts, getZonedDateParts, } from "./time.js";
|
|
@@ -298,8 +298,8 @@ export function normalizeGmailTriageMaxResults(value) {
|
|
|
298
298
|
return DEFAULT_GMAIL_TRIAGE_MAX_RESULTS;
|
|
299
299
|
}
|
|
300
300
|
const maxResults = Math.trunc(normalizeFiniteNumber(value, "maxResults"));
|
|
301
|
-
if (maxResults < 1 || maxResults >
|
|
302
|
-
fail(400,
|
|
301
|
+
if (maxResults < 1 || maxResults > MAX_GMAIL_TRIAGE_MAX_RESULTS) {
|
|
302
|
+
fail(400, `maxResults must be between 1 and ${MAX_GMAIL_TRIAGE_MAX_RESULTS}`);
|
|
303
303
|
}
|
|
304
304
|
return maxResults;
|
|
305
305
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { LifeOpsConnectorMode, LifeOpsConnectorSide, LifeOpsGoogleCapability, LifeOpsWindowPolicy, LifeOpsWorkflowPermissionPolicy, LifeOpsWorkflowSchedule, LifeOpsWorkflowTriggerType } from "../contracts/index.js";
|
|
2
1
|
import { type BrowserBridgeKind, type BrowserBridgePermissionState, type BrowserBridgeSettings, type UpdateBrowserBridgeSettingsRequest } from "@elizaos/plugin-browser-bridge";
|
|
2
|
+
import type { LifeOpsConnectorMode, LifeOpsConnectorSide, LifeOpsGoogleCapability, LifeOpsWindowPolicy, LifeOpsWorkflowPermissionPolicy, LifeOpsWorkflowSchedule, LifeOpsWorkflowTriggerType } from "../contracts/index.js";
|
|
3
3
|
export declare function normalizeOptionalConnectorMode(value: unknown, field: string): LifeOpsConnectorMode | undefined;
|
|
4
4
|
export declare function normalizeOptionalConnectorSide(value: unknown, field: string): LifeOpsConnectorSide | undefined;
|
|
5
5
|
export declare function normalizeGoogleCapabilityRequest(value: unknown): LifeOpsGoogleCapability[] | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service-normalize-connector.d.ts","sourceRoot":"","sources":["../../../../../../../apps/app-lifeops/src/lifeops/service-normalize-connector.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"service-normalize-connector.d.ts","sourceRoot":"","sources":["../../../../../../../apps/app-lifeops/src/lifeops/service-normalize-connector.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,iBAAiB,EACtB,KAAK,4BAA4B,EACjC,KAAK,qBAAqB,EAC1B,KAAK,kCAAkC,EACxC,MAAM,gCAAgC,CAAC;AACxC,OAAO,KAAK,EACV,oBAAoB,EACpB,oBAAoB,EACpB,uBAAuB,EAIvB,mBAAmB,EACnB,+BAA+B,EAC/B,uBAAuB,EACvB,0BAA0B,EAC3B,MAAM,uBAAuB,CAAC;AA+E/B,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,MAAM,GACZ,oBAAoB,GAAG,SAAS,CAKlC;AAED,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,MAAM,GACZ,oBAAoB,GAAG,SAAS,CAKlC;AAED,wBAAgB,gCAAgC,CAC9C,KAAK,EAAE,OAAO,GACb,uBAAuB,EAAE,GAAG,SAAS,CAsBvC;AAED,wBAAgB,0BAA0B,CACxC,YAAY,EAAE,SAAS,MAAM,EAAE,GAC9B,uBAAuB,EAAE,CAE3B;AAED,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,OAAO,GACb,0BAA0B,CAM5B;AAED,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,OAAO,EACd,WAAW,EAAE,0BAA0B,GACtC,uBAAuB,CAyHzB;AAyVD,wBAAgB,iCAAiC,CAC/C,KAAK,EAAE,OAAO,EACd,OAAO,GAAE,+BAAoE,GAC5E,+BAA+B,CAqCjC;AAED,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,MAAM,GACZ,iBAAiB,GAAG,IAAI,CAM1B;AAED,wBAAgB,oCAAoC,CAClD,KAAK,EAAE,OAAO,EACd,OAAO,GAAE,4BAA+D,GACvE,4BAA4B,CA+B9B;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAYrE;AAED,wBAAgB,+BAA+B,CAC7C,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,MAAM,GACZ,MAAM,CAgCR;AAED,wBAAgB,mCAAmC,CACjD,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,MAAM,GACZ,MAAM,EAAE,CASV;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAS3E;AAED,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,kCAAkC,EAC3C,OAAO,EAAE,qBAAqB,GAC7B,qBAAqB,CAsEvB;AAED,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,GACf,mBAAmB,CAgErB;AAED,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,MAAM,GACZ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAmDzB"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { parseCronExpression
|
|
2
|
-
import { LIFEOPS_CONNECTOR_MODES, LIFEOPS_CONNECTOR_SIDES, LIFEOPS_EVENT_KINDS, LIFEOPS_GOOGLE_CAPABILITIES, LIFEOPS_REMINDER_CHANNELS, LIFEOPS_TIME_WINDOW_NAMES, LIFEOPS_WORKFLOW_TRIGGER_TYPES, } from "../contracts/index.js";
|
|
1
|
+
import { parseCronExpression } from "@elizaos/agent/triggers/scheduling";
|
|
3
2
|
import { BROWSER_BRIDGE_KINDS, BROWSER_BRIDGE_SITE_ACCESS_MODES, BROWSER_BRIDGE_TRACKING_MODES, } from "@elizaos/plugin-browser-bridge";
|
|
3
|
+
import { LIFEOPS_CONNECTOR_MODES, LIFEOPS_CONNECTOR_SIDES, LIFEOPS_EVENT_KINDS, LIFEOPS_GOOGLE_CAPABILITIES, LIFEOPS_REMINDER_CHANNELS, LIFEOPS_TIME_WINDOW_NAMES, LIFEOPS_WORKFLOW_TRIGGER_TYPES, } from "../contracts/index.js";
|
|
4
4
|
import { resolveDefaultTimeZone, resolveDefaultWindowPolicy, } from "./defaults.js";
|
|
5
5
|
import { normalizeGoogleCapabilities } from "./google-scopes.js";
|
|
6
6
|
import { DAY_MINUTES, DEFAULT_BROWSER_PERMISSION_STATE, DEFAULT_WORKFLOW_PERMISSION_POLICY, } from "./service-constants.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signal-auth.d.ts","sourceRoot":"","sources":["../../../../../../../apps/app-lifeops/src/lifeops/signal-auth.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"signal-auth.d.ts","sourceRoot":"","sources":["../../../../../../../apps/app-lifeops/src/lifeops/signal-auth.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EACV,oBAAoB,EACpB,0BAA0B,EAC3B,MAAM,iBAAiB,CAAC;AAEzB,MAAM,WAAW,2BAA2B;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,oBAAoB,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,0BAA0B,CAAC,OAAO,CAAC,CAAC;IAC3C,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACpB;AAmUD,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,oBAAoB,GACzB,2BAA2B,CA4B7B;AAED,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,MAAM,GAChB,0BAA0B,CAoB5B;AAED,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,oBAAoB,GACzB,0BAA0B,GAAG,IAAI,CAOnC;AAED,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,oBAAoB,GACzB;IAAE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAUlE;AAED,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,MAAM,GACf,sBAAsB,GAAG,IAAI,CAgB/B;AAED,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAI/D"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import crypto from "node:crypto";
|
|
2
2
|
import fs from "node:fs";
|
|
3
3
|
import path from "node:path";
|
|
4
|
-
import { resolveOAuthDir
|
|
4
|
+
import { resolveOAuthDir } from "@elizaos/agent/config/paths";
|
|
5
|
+
import { SignalPairingSession, } from "@elizaos/agent/services/signal-pairing";
|
|
5
6
|
const pendingSignalPairingSessions = new Map();
|
|
6
7
|
const SIGNAL_PAIRING_SESSION_TTL_MS = 10 * 60 * 1000;
|
|
7
8
|
function signalStorageRoot(env = process.env) {
|
|
@@ -85,7 +86,8 @@ function cleanupExpiredSessions() {
|
|
|
85
86
|
}
|
|
86
87
|
}
|
|
87
88
|
for (const session of listPendingSignalSessions()) {
|
|
88
|
-
if (now - new Date(session.createdAt).getTime() >
|
|
89
|
+
if (now - new Date(session.createdAt).getTime() >
|
|
90
|
+
SIGNAL_PAIRING_SESSION_TTL_MS) {
|
|
89
91
|
deletePendingSignalSession(session.sessionId);
|
|
90
92
|
}
|
|
91
93
|
}
|
|
@@ -198,7 +200,8 @@ function applySnapshot(session, snapshot) {
|
|
|
198
200
|
function applyEvent(session, event) {
|
|
199
201
|
const snapshot = session.pairingSession.getSnapshot();
|
|
200
202
|
applySnapshot(session, snapshot);
|
|
201
|
-
if (typeof event.phoneNumber === "string" &&
|
|
203
|
+
if (typeof event.phoneNumber === "string" &&
|
|
204
|
+
event.phoneNumber.trim().length > 0) {
|
|
202
205
|
session.phoneNumber = event.phoneNumber.trim();
|
|
203
206
|
}
|
|
204
207
|
if (typeof event.uuid === "string" && event.uuid.trim().length > 0) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import crypto from "node:crypto";
|
|
2
2
|
import fs from "node:fs";
|
|
3
3
|
import path from "node:path";
|
|
4
|
-
import { resolveOAuthDir } from "@elizaos/agent";
|
|
4
|
+
import { resolveOAuthDir } from "@elizaos/agent/config/paths";
|
|
5
5
|
import { logger } from "@elizaos/core";
|
|
6
6
|
// Re-export the real GramJS auth session from plugin-telegram.
|
|
7
7
|
// The plugin's TelegramAccountAuthSession handles the full MTProto flow:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"duffel.d.ts","sourceRoot":"","sources":["../../../../../../../../apps/app-lifeops/src/lifeops/travel-adapters/duffel.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"duffel.d.ts","sourceRoot":"","sources":["../../../../../../../../apps/app-lifeops/src/lifeops/travel-adapters/duffel.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
import { createIntegrationTelemetrySpan } from "@elizaos/agent/diagnostics/integration-observability";
|
|
1
2
|
import { logger } from "@elizaos/core";
|
|
2
|
-
import { createIntegrationTelemetrySpan } from "@elizaos/agent";
|
|
3
3
|
import { PaymentRequiredError, parseX402Response, } from "../x402-payment-handler.js";
|
|
4
4
|
// ---------------------------------------------------------------------------
|
|
5
5
|
// Config
|
|
@@ -198,7 +198,13 @@ async function duffelFetch(args) {
|
|
|
198
198
|
}
|
|
199
199
|
catch (error) {
|
|
200
200
|
const msg = error instanceof Error ? error.message : String(error);
|
|
201
|
-
logger.error({
|
|
201
|
+
logger.error({
|
|
202
|
+
boundary: "lifeops",
|
|
203
|
+
integration: "duffel",
|
|
204
|
+
operation,
|
|
205
|
+
mode: config.mode,
|
|
206
|
+
err: error instanceof Error ? error : undefined,
|
|
207
|
+
}, `[lifeops-travel] Duffel ${operation} network error: ${msg}`);
|
|
202
208
|
span.failure({ error, errorKind: "network_error" });
|
|
203
209
|
throw new Error(`Duffel ${operation} failed: ${msg}`);
|
|
204
210
|
}
|
|
@@ -226,7 +232,13 @@ async function duffelFetch(args) {
|
|
|
226
232
|
if (!response.ok) {
|
|
227
233
|
const errorBody = await response.text().catch(() => "");
|
|
228
234
|
const errorMsg = errorBody || `HTTP ${response.status}`;
|
|
229
|
-
logger.warn({
|
|
235
|
+
logger.warn({
|
|
236
|
+
boundary: "lifeops",
|
|
237
|
+
integration: "duffel",
|
|
238
|
+
operation,
|
|
239
|
+
mode: config.mode,
|
|
240
|
+
statusCode: response.status,
|
|
241
|
+
}, `[lifeops-travel] Duffel ${operation} HTTP error: ${errorMsg}`);
|
|
230
242
|
span.failure({ statusCode: response.status, errorKind: "http_error" });
|
|
231
243
|
throw new Error(`Duffel ${operation} failed (${response.status}): ${errorMsg}`);
|
|
232
244
|
}
|
|
@@ -265,11 +277,18 @@ export async function searchFlights(request, config) {
|
|
|
265
277
|
const requestBody = {
|
|
266
278
|
data: {
|
|
267
279
|
slices,
|
|
268
|
-
passengers: Array.from({ length: passengerCount }, () => ({
|
|
280
|
+
passengers: Array.from({ length: passengerCount }, () => ({
|
|
281
|
+
type: "adult",
|
|
282
|
+
})),
|
|
269
283
|
cabin_class: "economy",
|
|
270
284
|
},
|
|
271
285
|
};
|
|
272
|
-
logger.info({
|
|
286
|
+
logger.info({
|
|
287
|
+
boundary: "lifeops",
|
|
288
|
+
integration: "duffel",
|
|
289
|
+
origin: request.origin,
|
|
290
|
+
destination: request.destination,
|
|
291
|
+
}, `[lifeops-travel] Searching flights ${request.origin} → ${request.destination} on ${request.departureDate}`);
|
|
273
292
|
const { data: responseData, cost } = await duffelFetch({
|
|
274
293
|
config: resolvedConfig,
|
|
275
294
|
method: "POST",
|
|
@@ -279,7 +298,13 @@ export async function searchFlights(request, config) {
|
|
|
279
298
|
operation: "offer_request",
|
|
280
299
|
});
|
|
281
300
|
const offers = (responseData.data.offers ?? []).map(mapOffer);
|
|
282
|
-
logger.info({
|
|
301
|
+
logger.info({
|
|
302
|
+
boundary: "lifeops",
|
|
303
|
+
integration: "duffel",
|
|
304
|
+
offerRequestId: responseData.data.id,
|
|
305
|
+
offerCount: offers.length,
|
|
306
|
+
costUsd: cost.totalUsd,
|
|
307
|
+
}, `[lifeops-travel] Duffel returned ${offers.length} offers for request ${responseData.data.id}`);
|
|
283
308
|
return {
|
|
284
309
|
offerRequestId: responseData.data.id,
|
|
285
310
|
offers,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
import { createIntegrationTelemetrySpan } from "@elizaos/agent/diagnostics/integration-observability";
|
|
1
2
|
import { logger } from "@elizaos/core";
|
|
2
|
-
import { createIntegrationTelemetrySpan } from "@elizaos/agent";
|
|
3
3
|
const TWILIO_SMS_MARKUP_RATE = 0.2;
|
|
4
4
|
function roundCurrency(value) {
|
|
5
5
|
return Math.round(value * 100) / 100;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"x-poster.d.ts","sourceRoot":"","sources":["../../../../../../../apps/app-lifeops/src/lifeops/x-poster.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,
|
|
1
|
+
{"version":3,"file":"x-poster.d.ts","sourceRoot":"","sources":["../../../../../../../apps/app-lifeops/src/lifeops/x-poster.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EACJ,SAAS,GACT,MAAM,GACN,YAAY,GACZ,SAAS,GACT,SAAS,GACT,SAAS,CAAC;CACf;AAgLD,wBAAgB,6BAA6B,CAC3C,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,kBAAkB,GAAG,IAAI,CAgB3B;AAED,wBAAsB,OAAO,CAAC,IAAI,EAAE;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,kBAAkB,CAAC;CACjC,GAAG,OAAO,CAAC,WAAW,CAAC,CAoHvB;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EACJ,SAAS,GACT,MAAM,GACN,YAAY,GACZ,SAAS,GACT,SAAS,GACT,SAAS,CAAC;CACf;AAMD;;;;;;;;GAQG;AACH,wBAAsB,OAAO,CAAC,IAAI,EAAE;IAClC,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,kBAAkB,CAAC;CACjC,GAAG,OAAO,CAAC,SAAS,CAAC,CA8FrB"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import crypto from "node:crypto";
|
|
2
|
+
import { createIntegrationTelemetrySpan } from "@elizaos/agent/diagnostics/integration-observability";
|
|
2
3
|
import { logger } from "@elizaos/core";
|
|
3
|
-
import { createIntegrationTelemetrySpan } from "@elizaos/agent";
|
|
4
4
|
function getXBaseUrl() {
|
|
5
5
|
return process.env.MILADY_MOCK_X_BASE ?? "https://api.twitter.com";
|
|
6
6
|
}
|
|
@@ -293,7 +293,12 @@ export async function sendXDm(args) {
|
|
|
293
293
|
payload?.title ??
|
|
294
294
|
`HTTP ${response.status}`;
|
|
295
295
|
span.failure({ statusCode: response.status, errorKind: category });
|
|
296
|
-
return {
|
|
296
|
+
return {
|
|
297
|
+
ok: false,
|
|
298
|
+
status: response.status,
|
|
299
|
+
error: errorMessage,
|
|
300
|
+
category,
|
|
301
|
+
};
|
|
297
302
|
}
|
|
298
303
|
const dmEventId = payload?.data?.dm_event_id;
|
|
299
304
|
if (!dmEventId) {
|
|
@@ -317,6 +322,11 @@ export async function sendXDm(args) {
|
|
|
317
322
|
catch (error) {
|
|
318
323
|
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
319
324
|
span.failure({ error, errorKind: "network" });
|
|
320
|
-
return {
|
|
325
|
+
return {
|
|
326
|
+
ok: false,
|
|
327
|
+
status: null,
|
|
328
|
+
error: errorMessage,
|
|
329
|
+
category: "network",
|
|
330
|
+
};
|
|
321
331
|
}
|
|
322
332
|
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* URL-hash routing for LifeOps detail views and the cross-tab automation
|
|
3
|
+
* selection.
|
|
4
|
+
*
|
|
5
|
+
* Design: we piggyback on `window.location.hash` because the app's top-level
|
|
6
|
+
* tab router already owns the pathname (`/lifeops`, `/automations`, …). The
|
|
7
|
+
* hash is free for deep-linking to sub-entities without touching the main
|
|
8
|
+
* navigation state.
|
|
9
|
+
*
|
|
10
|
+
* Hash format: `#key=value&key=value` (query-string-in-fragment). Two
|
|
11
|
+
* namespaces live here in practice:
|
|
12
|
+
*
|
|
13
|
+
* - `lifeops.section` → current LifeOps section id
|
|
14
|
+
* - `lifeops.event` → calendar event id (implies section=calendar)
|
|
15
|
+
* - `lifeops.message` → inbox message id (implies section=messages)
|
|
16
|
+
* - `automations.trigger`→ trigger id selected on the /automations page
|
|
17
|
+
*
|
|
18
|
+
* The helpers here are pure: no DOM access. The hooks in
|
|
19
|
+
* `hooks/useLifeOpsSection.ts` and the widget row handlers call into them.
|
|
20
|
+
*/
|
|
21
|
+
export type LifeOpsRouteSection = "overview" | "sleep" | "screen-time" | "setup" | "reminders" | "calendar" | "messages" | "mail" | "money";
|
|
22
|
+
export declare const LIFEOPS_ROUTE_SECTIONS: readonly LifeOpsRouteSection[];
|
|
23
|
+
export interface LifeOpsRouteState {
|
|
24
|
+
section: LifeOpsRouteSection | null;
|
|
25
|
+
eventId: string | null;
|
|
26
|
+
messageId: string | null;
|
|
27
|
+
}
|
|
28
|
+
export interface AutomationsRouteState {
|
|
29
|
+
triggerId: string | null;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Parse `#key=value&…` into a plain map. Leading `#` is optional.
|
|
33
|
+
* Tolerates empty / malformed input by returning an empty map.
|
|
34
|
+
*/
|
|
35
|
+
export declare function parseHashParams(hash: string): Record<string, string>;
|
|
36
|
+
/**
|
|
37
|
+
* Serialize a map back into a `#key=value&…` hash. Empty / null values are
|
|
38
|
+
* stripped so toggling a key off removes it from the URL cleanly.
|
|
39
|
+
*/
|
|
40
|
+
export declare function serializeHashParams(params: Record<string, string | null | undefined>): string;
|
|
41
|
+
export declare function parseLifeOpsRoute(hash: string): LifeOpsRouteState;
|
|
42
|
+
export declare function parseAutomationsRoute(hash: string): AutomationsRouteState;
|
|
43
|
+
/**
|
|
44
|
+
* Merge an existing hash string with a LifeOps state update. Keeps unrelated
|
|
45
|
+
* keys (so we don't wipe an `automations.trigger` when navigating inside
|
|
46
|
+
* LifeOps, and vice versa).
|
|
47
|
+
*/
|
|
48
|
+
export declare function buildLifeOpsHash(existingHash: string, next: {
|
|
49
|
+
section?: LifeOpsRouteSection | null;
|
|
50
|
+
eventId?: string | null;
|
|
51
|
+
messageId?: string | null;
|
|
52
|
+
}): string;
|
|
53
|
+
export declare function buildAutomationsHash(existingHash: string, next: {
|
|
54
|
+
triggerId?: string | null;
|
|
55
|
+
}): string;
|
|
56
|
+
export declare function primeLifeOpsEvent<T extends {
|
|
57
|
+
id: string;
|
|
58
|
+
}>(event: T): void;
|
|
59
|
+
export declare function getPrimedLifeOpsEvent<T extends {
|
|
60
|
+
id: string;
|
|
61
|
+
}>(id: string): T | null;
|
|
62
|
+
export declare function primeLifeOpsMessage<T extends {
|
|
63
|
+
id: string;
|
|
64
|
+
}>(message: T): void;
|
|
65
|
+
export declare function getPrimedLifeOpsMessage<T extends {
|
|
66
|
+
id: string;
|
|
67
|
+
}>(id: string): T | null;
|
|
68
|
+
export declare function primeAutomationsTrigger<T extends {
|
|
69
|
+
id: string;
|
|
70
|
+
}>(trigger: T): void;
|
|
71
|
+
export declare function getPrimedAutomationsTrigger<T extends {
|
|
72
|
+
id: string;
|
|
73
|
+
}>(id: string): T | null;
|
|
74
|
+
//# sourceMappingURL=lifeops-route.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifeops-route.d.ts","sourceRoot":"","sources":["../../../../../../apps/app-lifeops/src/lifeops-route.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,MAAM,MAAM,mBAAmB,GAC3B,UAAU,GACV,OAAO,GACP,aAAa,GACb,OAAO,GACP,WAAW,GACX,UAAU,GACV,UAAU,GACV,MAAM,GACN,OAAO,CAAC;AAEZ,eAAO,MAAM,sBAAsB,EAAE,SAAS,mBAAmB,EAUvD,CAAC;AAEX,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACpC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAcD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAiBpE;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,GAChD,MAAM,CAOR;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,CAWjE;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,qBAAqB,CAIzE;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE;IACJ,OAAO,CAAC,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACrC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B,GACA,MAAM,CAeR;AAED,wBAAgB,oBAAoB,CAClC,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAClC,MAAM,CAOR;AA+DD,wBAAgB,iBAAiB,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAE1E;AACD,wBAAgB,qBAAqB,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,EAC5D,EAAE,EAAE,MAAM,GACT,CAAC,GAAG,IAAI,CAEV;AAED,wBAAgB,mBAAmB,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,EAC1D,OAAO,EAAE,CAAC,GACT,IAAI,CAEN;AACD,wBAAgB,uBAAuB,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,EAC9D,EAAE,EAAE,MAAM,GACT,CAAC,GAAG,IAAI,CAEV;AAED,wBAAgB,uBAAuB,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,EAC9D,OAAO,EAAE,CAAC,GACT,IAAI,CAEN;AACD,wBAAgB,2BAA2B,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,EAClE,EAAE,EAAE,MAAM,GACT,CAAC,GAAG,IAAI,CAEV"}
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* URL-hash routing for LifeOps detail views and the cross-tab automation
|
|
3
|
+
* selection.
|
|
4
|
+
*
|
|
5
|
+
* Design: we piggyback on `window.location.hash` because the app's top-level
|
|
6
|
+
* tab router already owns the pathname (`/lifeops`, `/automations`, …). The
|
|
7
|
+
* hash is free for deep-linking to sub-entities without touching the main
|
|
8
|
+
* navigation state.
|
|
9
|
+
*
|
|
10
|
+
* Hash format: `#key=value&key=value` (query-string-in-fragment). Two
|
|
11
|
+
* namespaces live here in practice:
|
|
12
|
+
*
|
|
13
|
+
* - `lifeops.section` → current LifeOps section id
|
|
14
|
+
* - `lifeops.event` → calendar event id (implies section=calendar)
|
|
15
|
+
* - `lifeops.message` → inbox message id (implies section=messages)
|
|
16
|
+
* - `automations.trigger`→ trigger id selected on the /automations page
|
|
17
|
+
*
|
|
18
|
+
* The helpers here are pure: no DOM access. The hooks in
|
|
19
|
+
* `hooks/useLifeOpsSection.ts` and the widget row handlers call into them.
|
|
20
|
+
*/
|
|
21
|
+
export const LIFEOPS_ROUTE_SECTIONS = [
|
|
22
|
+
"overview",
|
|
23
|
+
"sleep",
|
|
24
|
+
"screen-time",
|
|
25
|
+
"setup",
|
|
26
|
+
"reminders",
|
|
27
|
+
"calendar",
|
|
28
|
+
"messages",
|
|
29
|
+
"mail",
|
|
30
|
+
"money",
|
|
31
|
+
];
|
|
32
|
+
const LIFEOPS_SECTION_KEY = "lifeops.section";
|
|
33
|
+
const LIFEOPS_EVENT_KEY = "lifeops.event";
|
|
34
|
+
const LIFEOPS_MESSAGE_KEY = "lifeops.message";
|
|
35
|
+
const AUTOMATIONS_TRIGGER_KEY = "automations.trigger";
|
|
36
|
+
function isSection(value) {
|
|
37
|
+
return (value !== null &&
|
|
38
|
+
LIFEOPS_ROUTE_SECTIONS.includes(value));
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Parse `#key=value&…` into a plain map. Leading `#` is optional.
|
|
42
|
+
* Tolerates empty / malformed input by returning an empty map.
|
|
43
|
+
*/
|
|
44
|
+
export function parseHashParams(hash) {
|
|
45
|
+
const raw = hash.startsWith("#") ? hash.slice(1) : hash;
|
|
46
|
+
if (!raw)
|
|
47
|
+
return {};
|
|
48
|
+
const result = {};
|
|
49
|
+
for (const chunk of raw.split("&")) {
|
|
50
|
+
if (!chunk)
|
|
51
|
+
continue;
|
|
52
|
+
const eq = chunk.indexOf("=");
|
|
53
|
+
const key = eq >= 0 ? chunk.slice(0, eq) : chunk;
|
|
54
|
+
const value = eq >= 0 ? chunk.slice(eq + 1) : "";
|
|
55
|
+
if (!key)
|
|
56
|
+
continue;
|
|
57
|
+
try {
|
|
58
|
+
result[decodeURIComponent(key)] = decodeURIComponent(value);
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
// Skip malformed encodings silently.
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return result;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Serialize a map back into a `#key=value&…` hash. Empty / null values are
|
|
68
|
+
* stripped so toggling a key off removes it from the URL cleanly.
|
|
69
|
+
*/
|
|
70
|
+
export function serializeHashParams(params) {
|
|
71
|
+
const pairs = [];
|
|
72
|
+
for (const [key, value] of Object.entries(params)) {
|
|
73
|
+
if (value === null || value === undefined || value === "")
|
|
74
|
+
continue;
|
|
75
|
+
pairs.push(`${encodeURIComponent(key)}=${encodeURIComponent(value)}`);
|
|
76
|
+
}
|
|
77
|
+
return pairs.length > 0 ? `#${pairs.join("&")}` : "";
|
|
78
|
+
}
|
|
79
|
+
export function parseLifeOpsRoute(hash) {
|
|
80
|
+
const params = parseHashParams(hash);
|
|
81
|
+
const rawSection = params[LIFEOPS_SECTION_KEY] ?? null;
|
|
82
|
+
const section = isSection(rawSection) ? rawSection : null;
|
|
83
|
+
const eventId = params[LIFEOPS_EVENT_KEY] || null;
|
|
84
|
+
const messageId = params[LIFEOPS_MESSAGE_KEY] || null;
|
|
85
|
+
// Intentionally permissive: an `lifeops.event=<id>` without a matching
|
|
86
|
+
// section implies `calendar`, and `lifeops.message=<id>` implies `messages`.
|
|
87
|
+
// The hook derives that after parsing; the route itself just reports what
|
|
88
|
+
// the hash literally said.
|
|
89
|
+
return { section, eventId, messageId };
|
|
90
|
+
}
|
|
91
|
+
export function parseAutomationsRoute(hash) {
|
|
92
|
+
const params = parseHashParams(hash);
|
|
93
|
+
const triggerId = params[AUTOMATIONS_TRIGGER_KEY] || null;
|
|
94
|
+
return { triggerId };
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Merge an existing hash string with a LifeOps state update. Keeps unrelated
|
|
98
|
+
* keys (so we don't wipe an `automations.trigger` when navigating inside
|
|
99
|
+
* LifeOps, and vice versa).
|
|
100
|
+
*/
|
|
101
|
+
export function buildLifeOpsHash(existingHash, next) {
|
|
102
|
+
const params = parseHashParams(existingHash);
|
|
103
|
+
if (next.section !== undefined) {
|
|
104
|
+
if (next.section === null)
|
|
105
|
+
delete params[LIFEOPS_SECTION_KEY];
|
|
106
|
+
else
|
|
107
|
+
params[LIFEOPS_SECTION_KEY] = next.section;
|
|
108
|
+
}
|
|
109
|
+
if (next.eventId !== undefined) {
|
|
110
|
+
if (next.eventId === null)
|
|
111
|
+
delete params[LIFEOPS_EVENT_KEY];
|
|
112
|
+
else
|
|
113
|
+
params[LIFEOPS_EVENT_KEY] = next.eventId;
|
|
114
|
+
}
|
|
115
|
+
if (next.messageId !== undefined) {
|
|
116
|
+
if (next.messageId === null)
|
|
117
|
+
delete params[LIFEOPS_MESSAGE_KEY];
|
|
118
|
+
else
|
|
119
|
+
params[LIFEOPS_MESSAGE_KEY] = next.messageId;
|
|
120
|
+
}
|
|
121
|
+
return serializeHashParams(params);
|
|
122
|
+
}
|
|
123
|
+
export function buildAutomationsHash(existingHash, next) {
|
|
124
|
+
const params = parseHashParams(existingHash);
|
|
125
|
+
if (next.triggerId !== undefined) {
|
|
126
|
+
if (next.triggerId === null)
|
|
127
|
+
delete params[AUTOMATIONS_TRIGGER_KEY];
|
|
128
|
+
else
|
|
129
|
+
params[AUTOMATIONS_TRIGGER_KEY] = next.triggerId;
|
|
130
|
+
}
|
|
131
|
+
return serializeHashParams(params);
|
|
132
|
+
}
|
|
133
|
+
// ── Prime cache ──────────────────────────────────────────────────────────
|
|
134
|
+
//
|
|
135
|
+
// When a user clicks a row in the chat-sidebar widget, we already have the
|
|
136
|
+
// row payload in hand. The detail view that opens via URL hash does not
|
|
137
|
+
// share a React context with the widget (it lives inside LifeOpsPageView,
|
|
138
|
+
// the widget lives in the app's right rail), so we drop the row into a
|
|
139
|
+
// small module-level cache. The detail view pulls it for instant first
|
|
140
|
+
// paint and then still refetches the batch endpoint to stay live.
|
|
141
|
+
//
|
|
142
|
+
// Stored values are light (≤ a few KB), and the cache is pruned both by
|
|
143
|
+
// TTL (unused rows expire after 60 s) and by LRU cap. The cache is a
|
|
144
|
+
// best-effort hint — detail views MUST render correctly even if the cache
|
|
145
|
+
// miss (e.g. the user deep-linked).
|
|
146
|
+
const PRIME_TTL_MS = 60_000;
|
|
147
|
+
const PRIME_MAX_ENTRIES = 32;
|
|
148
|
+
function primeCache() {
|
|
149
|
+
const store = new Map();
|
|
150
|
+
function prune() {
|
|
151
|
+
const now = Date.now();
|
|
152
|
+
for (const [id, row] of store) {
|
|
153
|
+
if (now - row.storedAt > PRIME_TTL_MS)
|
|
154
|
+
store.delete(id);
|
|
155
|
+
}
|
|
156
|
+
while (store.size > PRIME_MAX_ENTRIES) {
|
|
157
|
+
const oldest = store.keys().next().value;
|
|
158
|
+
if (oldest === undefined)
|
|
159
|
+
break;
|
|
160
|
+
store.delete(oldest);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
return {
|
|
164
|
+
set(id, value) {
|
|
165
|
+
if (!id)
|
|
166
|
+
return;
|
|
167
|
+
store.set(id, { value, storedAt: Date.now() });
|
|
168
|
+
prune();
|
|
169
|
+
},
|
|
170
|
+
get(id) {
|
|
171
|
+
if (!id)
|
|
172
|
+
return null;
|
|
173
|
+
const entry = store.get(id);
|
|
174
|
+
if (!entry)
|
|
175
|
+
return null;
|
|
176
|
+
if (Date.now() - entry.storedAt > PRIME_TTL_MS) {
|
|
177
|
+
store.delete(id);
|
|
178
|
+
return null;
|
|
179
|
+
}
|
|
180
|
+
return entry.value;
|
|
181
|
+
},
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
const EVENT_CACHE = primeCache();
|
|
185
|
+
const MESSAGE_CACHE = primeCache();
|
|
186
|
+
const TRIGGER_CACHE = primeCache();
|
|
187
|
+
export function primeLifeOpsEvent(event) {
|
|
188
|
+
EVENT_CACHE.set(event.id, event);
|
|
189
|
+
}
|
|
190
|
+
export function getPrimedLifeOpsEvent(id) {
|
|
191
|
+
return EVENT_CACHE.get(id) ?? null;
|
|
192
|
+
}
|
|
193
|
+
export function primeLifeOpsMessage(message) {
|
|
194
|
+
MESSAGE_CACHE.set(message.id, message);
|
|
195
|
+
}
|
|
196
|
+
export function getPrimedLifeOpsMessage(id) {
|
|
197
|
+
return MESSAGE_CACHE.get(id) ?? null;
|
|
198
|
+
}
|
|
199
|
+
export function primeAutomationsTrigger(trigger) {
|
|
200
|
+
TRIGGER_CACHE.set(trigger.id, trigger);
|
|
201
|
+
}
|
|
202
|
+
export function getPrimedAutomationsTrigger(id) {
|
|
203
|
+
return TRIGGER_CACHE.get(id) ?? null;
|
|
204
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type LifeOpsGithubCallbackDetail } from "../events/index.js";
|
|
2
|
+
export declare const LIFEOPS_GITHUB_POST_MESSAGE_TYPE = "elizaos-lifeops-github-complete";
|
|
3
|
+
declare global {
|
|
4
|
+
interface Window {
|
|
5
|
+
__ELIZAOS_LIFEOPS_GITHUB_CALLBACK_QUEUE__?: LifeOpsGithubCallbackDetail[];
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
export declare function readLifeOpsGithubCallbackFromWindowMessage(value: unknown): LifeOpsGithubCallbackDetail | null;
|
|
9
|
+
export declare function readLifeOpsGithubCallbackFromUrl(url: string): LifeOpsGithubCallbackDetail | null;
|
|
10
|
+
export declare function queueLifeOpsGithubCallback(detail: LifeOpsGithubCallbackDetail): void;
|
|
11
|
+
export declare function consumeQueuedLifeOpsGithubCallback(detail: LifeOpsGithubCallbackDetail): void;
|
|
12
|
+
export declare function drainLifeOpsGithubCallbacks(): LifeOpsGithubCallbackDetail[];
|
|
13
|
+
export declare function dispatchLifeOpsGithubCallbackFromWindowMessage(value: unknown): boolean;
|
|
14
|
+
export declare function dispatchQueuedLifeOpsGithubCallbackFromUrl(url: string): boolean;
|
|
15
|
+
//# sourceMappingURL=lifeops-github.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifeops-github.d.ts","sourceRoot":"","sources":["../../../../../../../apps/app-lifeops/src/platform/lifeops-github.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,2BAA2B,EACjC,MAAM,oBAAoB,CAAC;AAE5B,eAAO,MAAM,gCAAgC,oCACV,CAAC;AAEpC,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,yCAAyC,CAAC,EAAE,2BAA2B,EAAE,CAAC;KAC3E;CACF;AAwED,wBAAgB,0CAA0C,CACxD,KAAK,EAAE,OAAO,GACb,2BAA2B,GAAG,IAAI,CASpC;AAED,wBAAgB,gCAAgC,CAC9C,GAAG,EAAE,MAAM,GACV,2BAA2B,GAAG,IAAI,CA2BpC;AAED,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,2BAA2B,GAClC,IAAI,CAKN;AAED,wBAAgB,kCAAkC,CAChD,MAAM,EAAE,2BAA2B,GAClC,IAAI,CAQN;AAED,wBAAgB,2BAA2B,IAAI,2BAA2B,EAAE,CAO3E;AAED,wBAAgB,8CAA8C,CAC5D,KAAK,EAAE,OAAO,GACb,OAAO,CAOT;AAED,wBAAgB,0CAA0C,CACxD,GAAG,EAAE,MAAM,GACV,OAAO,CAQT"}
|