@elizaos/agent 2.0.0-alpha.385 → 2.0.0-alpha.393

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.
Files changed (377) hide show
  1. package/apps/app-companion/src/components/companion/CompanionAppView.d.ts.map +1 -1
  2. package/apps/app-companion/src/components/companion/CompanionAppView.js +6 -4
  3. package/apps/app-companion/src/components/companion/CompanionView.d.ts.map +1 -1
  4. package/apps/app-companion/src/components/companion/CompanionView.js +6 -4
  5. package/apps/app-knowledge/src/routes.d.ts +1 -1
  6. package/apps/app-knowledge/src/routes.d.ts.map +1 -1
  7. package/apps/app-knowledge/src/routes.js +1 -1
  8. package/apps/app-lifeops/src/api/client-lifeops.js +6 -0
  9. package/apps/app-lifeops/src/components/AppBlockerSettingsCard.d.ts +3 -0
  10. package/apps/app-lifeops/src/components/AppBlockerSettingsCard.d.ts.map +1 -0
  11. package/apps/app-lifeops/src/components/AppBlockerSettingsCard.js +189 -0
  12. package/apps/app-lifeops/src/components/BrowserBridgeSetupPanel.d.ts +2 -0
  13. package/apps/app-lifeops/src/components/BrowserBridgeSetupPanel.d.ts.map +1 -0
  14. package/apps/app-lifeops/src/components/BrowserBridgeSetupPanel.js +1065 -0
  15. package/apps/app-lifeops/src/components/BrowserBridgeStatusChip.d.ts +7 -0
  16. package/apps/app-lifeops/src/components/BrowserBridgeStatusChip.d.ts.map +1 -0
  17. package/apps/app-lifeops/src/components/BrowserBridgeStatusChip.js +71 -0
  18. package/apps/app-lifeops/src/components/DataSourcesStrip.d.ts +14 -0
  19. package/apps/app-lifeops/src/components/DataSourcesStrip.d.ts.map +1 -0
  20. package/apps/app-lifeops/src/components/DataSourcesStrip.js +36 -0
  21. package/apps/app-lifeops/src/components/EventEditorDrawer.d.ts +23 -0
  22. package/apps/app-lifeops/src/components/EventEditorDrawer.d.ts.map +1 -0
  23. package/apps/app-lifeops/src/components/EventEditorDrawer.js +514 -0
  24. package/apps/app-lifeops/src/components/LifeOpsActivitySignalsEffect.d.ts +2 -0
  25. package/apps/app-lifeops/src/components/LifeOpsActivitySignalsEffect.d.ts.map +1 -0
  26. package/apps/app-lifeops/src/components/LifeOpsActivitySignalsEffect.js +10 -0
  27. package/apps/app-lifeops/src/components/LifeOpsCalendarSection.d.ts +15 -0
  28. package/apps/app-lifeops/src/components/LifeOpsCalendarSection.d.ts.map +1 -0
  29. package/apps/app-lifeops/src/components/LifeOpsCalendarSection.js +515 -0
  30. package/apps/app-lifeops/src/components/LifeOpsChatAdapter.d.ts +34 -0
  31. package/apps/app-lifeops/src/components/LifeOpsChatAdapter.d.ts.map +1 -0
  32. package/apps/app-lifeops/src/components/LifeOpsChatAdapter.js +175 -0
  33. package/apps/app-lifeops/src/components/LifeOpsFeatureTogglesSection.d.ts +2 -0
  34. package/apps/app-lifeops/src/components/LifeOpsFeatureTogglesSection.d.ts.map +1 -0
  35. package/apps/app-lifeops/src/components/LifeOpsFeatureTogglesSection.js +99 -0
  36. package/apps/app-lifeops/src/components/LifeOpsHabitVisuals.d.ts +37 -0
  37. package/apps/app-lifeops/src/components/LifeOpsHabitVisuals.d.ts.map +1 -0
  38. package/apps/app-lifeops/src/components/LifeOpsHabitVisuals.js +88 -0
  39. package/apps/app-lifeops/src/components/LifeOpsInboxSection.d.ts +13 -0
  40. package/apps/app-lifeops/src/components/LifeOpsInboxSection.d.ts.map +1 -0
  41. package/apps/app-lifeops/src/components/LifeOpsInboxSection.js +490 -0
  42. package/apps/app-lifeops/src/components/LifeOpsLinkBankButton.d.ts +12 -0
  43. package/apps/app-lifeops/src/components/LifeOpsLinkBankButton.d.ts.map +1 -0
  44. package/apps/app-lifeops/src/components/LifeOpsLinkBankButton.js +92 -0
  45. package/apps/app-lifeops/src/components/LifeOpsLinkPaypalButton.d.ts +12 -0
  46. package/apps/app-lifeops/src/components/LifeOpsLinkPaypalButton.d.ts.map +1 -0
  47. package/apps/app-lifeops/src/components/LifeOpsLinkPaypalButton.js +160 -0
  48. package/apps/app-lifeops/src/components/LifeOpsMoneySection.d.ts +3 -0
  49. package/apps/app-lifeops/src/components/LifeOpsMoneySection.d.ts.map +1 -0
  50. package/apps/app-lifeops/src/components/LifeOpsMoneySection.js +373 -0
  51. package/apps/app-lifeops/src/components/LifeOpsNavRail.d.ts +9 -0
  52. package/apps/app-lifeops/src/components/LifeOpsNavRail.d.ts.map +1 -0
  53. package/apps/app-lifeops/src/components/LifeOpsNavRail.js +93 -0
  54. package/apps/app-lifeops/src/components/LifeOpsOperationalPanels.d.ts +4 -0
  55. package/apps/app-lifeops/src/components/LifeOpsOperationalPanels.d.ts.map +1 -0
  56. package/apps/app-lifeops/src/components/LifeOpsOperationalPanels.js +274 -0
  57. package/apps/app-lifeops/src/components/LifeOpsOverviewSection.d.ts +7 -0
  58. package/apps/app-lifeops/src/components/LifeOpsOverviewSection.d.ts.map +1 -0
  59. package/apps/app-lifeops/src/components/LifeOpsOverviewSection.js +657 -0
  60. package/apps/app-lifeops/src/components/LifeOpsPageSections.d.ts +42 -0
  61. package/apps/app-lifeops/src/components/LifeOpsPageSections.d.ts.map +1 -0
  62. package/apps/app-lifeops/src/components/LifeOpsPageSections.js +166 -0
  63. package/apps/app-lifeops/src/components/LifeOpsPageView.d.ts +2 -0
  64. package/apps/app-lifeops/src/components/LifeOpsPageView.d.ts.map +1 -0
  65. package/apps/app-lifeops/src/components/LifeOpsPageView.js +566 -0
  66. package/apps/app-lifeops/src/components/LifeOpsRemindersSection.d.ts +2 -0
  67. package/apps/app-lifeops/src/components/LifeOpsRemindersSection.d.ts.map +1 -0
  68. package/apps/app-lifeops/src/components/LifeOpsRemindersSection.js +749 -0
  69. package/apps/app-lifeops/src/components/LifeOpsResizableSidebar.d.ts +27 -0
  70. package/apps/app-lifeops/src/components/LifeOpsResizableSidebar.d.ts.map +1 -0
  71. package/apps/app-lifeops/src/components/LifeOpsResizableSidebar.js +106 -0
  72. package/apps/app-lifeops/src/components/LifeOpsScreenTimeSection.d.ts +2 -0
  73. package/apps/app-lifeops/src/components/LifeOpsScreenTimeSection.d.ts.map +1 -0
  74. package/apps/app-lifeops/src/components/LifeOpsScreenTimeSection.js +373 -0
  75. package/apps/app-lifeops/src/components/LifeOpsSectionContent.d.ts +10 -0
  76. package/apps/app-lifeops/src/components/LifeOpsSectionContent.d.ts.map +1 -0
  77. package/apps/app-lifeops/src/components/LifeOpsSectionContent.js +30 -0
  78. package/apps/app-lifeops/src/components/LifeOpsSelectionContext.d.ts +21 -0
  79. package/apps/app-lifeops/src/components/LifeOpsSelectionContext.d.ts.map +1 -0
  80. package/apps/app-lifeops/src/components/LifeOpsSelectionContext.js +30 -0
  81. package/apps/app-lifeops/src/components/LifeOpsSettingsSection.d.ts +20 -0
  82. package/apps/app-lifeops/src/components/LifeOpsSettingsSection.d.ts.map +1 -0
  83. package/apps/app-lifeops/src/components/LifeOpsSettingsSection.js +597 -0
  84. package/apps/app-lifeops/src/components/LifeOpsSetupGate.d.ts +13 -0
  85. package/apps/app-lifeops/src/components/LifeOpsSetupGate.d.ts.map +1 -0
  86. package/apps/app-lifeops/src/components/LifeOpsSetupGate.js +134 -0
  87. package/apps/app-lifeops/src/components/LifeOpsSleepSection.d.ts +10 -0
  88. package/apps/app-lifeops/src/components/LifeOpsSleepSection.d.ts.map +1 -0
  89. package/apps/app-lifeops/src/components/LifeOpsSleepSection.js +425 -0
  90. package/apps/app-lifeops/src/components/LifeOpsWorkspaceShell.d.ts +11 -0
  91. package/apps/app-lifeops/src/components/LifeOpsWorkspaceShell.d.ts.map +1 -0
  92. package/apps/app-lifeops/src/components/LifeOpsWorkspaceShell.js +49 -0
  93. package/apps/app-lifeops/src/components/LifeOpsWorkspaceView.d.ts +2 -0
  94. package/apps/app-lifeops/src/components/LifeOpsWorkspaceView.d.ts.map +1 -0
  95. package/apps/app-lifeops/src/components/LifeOpsWorkspaceView.js +1041 -0
  96. package/apps/app-lifeops/src/components/MessagingConnectorCards.d.ts +7 -0
  97. package/apps/app-lifeops/src/components/MessagingConnectorCards.d.ts.map +1 -0
  98. package/apps/app-lifeops/src/components/MessagingConnectorCards.js +643 -0
  99. package/apps/app-lifeops/src/components/MissingSourceCard.d.ts +9 -0
  100. package/apps/app-lifeops/src/components/MissingSourceCard.d.ts.map +1 -0
  101. package/apps/app-lifeops/src/components/MissingSourceCard.js +5 -0
  102. package/apps/app-lifeops/src/components/MobileSignalsSetupCard.d.ts +2 -0
  103. package/apps/app-lifeops/src/components/MobileSignalsSetupCard.d.ts.map +1 -0
  104. package/apps/app-lifeops/src/components/MobileSignalsSetupCard.js +163 -0
  105. package/apps/app-lifeops/src/components/SleepInspectionPanel.d.ts +8 -0
  106. package/apps/app-lifeops/src/components/SleepInspectionPanel.d.ts.map +1 -0
  107. package/apps/app-lifeops/src/components/SleepInspectionPanel.js +59 -0
  108. package/apps/app-lifeops/src/components/WebsiteBlockerSettingsCard.d.ts +3 -0
  109. package/apps/app-lifeops/src/components/WebsiteBlockerSettingsCard.d.ts.map +1 -0
  110. package/apps/app-lifeops/src/components/WebsiteBlockerSettingsCard.js +75 -0
  111. package/apps/app-lifeops/src/components/WhatsAppQrOverlay.d.ts +8 -0
  112. package/apps/app-lifeops/src/components/WhatsAppQrOverlay.d.ts.map +1 -0
  113. package/apps/app-lifeops/src/components/WhatsAppQrOverlay.js +48 -0
  114. package/apps/app-lifeops/src/components/lifeops-labels.d.ts +2 -0
  115. package/apps/app-lifeops/src/components/lifeops-labels.d.ts.map +1 -0
  116. package/apps/app-lifeops/src/components/lifeops-labels.js +5 -0
  117. package/apps/app-lifeops/src/events/index.d.ts +34 -0
  118. package/apps/app-lifeops/src/events/index.d.ts.map +1 -0
  119. package/apps/app-lifeops/src/events/index.js +23 -0
  120. package/apps/app-lifeops/src/hooks/useCalendarWeek.d.ts +28 -0
  121. package/apps/app-lifeops/src/hooks/useCalendarWeek.d.ts.map +1 -0
  122. package/apps/app-lifeops/src/hooks/useCalendarWeek.js +93 -0
  123. package/apps/app-lifeops/src/hooks/useDiscordConnector.d.ts +14 -0
  124. package/apps/app-lifeops/src/hooks/useDiscordConnector.d.ts.map +1 -0
  125. package/apps/app-lifeops/src/hooks/useDiscordConnector.js +126 -0
  126. package/apps/app-lifeops/src/hooks/useGoogleLifeOpsConnector.d.ts +29 -0
  127. package/apps/app-lifeops/src/hooks/useGoogleLifeOpsConnector.d.ts.map +1 -0
  128. package/apps/app-lifeops/src/hooks/useGoogleLifeOpsConnector.js +481 -0
  129. package/apps/app-lifeops/src/hooks/useIMessageConnector.d.ts +10 -0
  130. package/apps/app-lifeops/src/hooks/useIMessageConnector.d.ts.map +1 -0
  131. package/apps/app-lifeops/src/hooks/useIMessageConnector.js +50 -0
  132. package/apps/app-lifeops/src/hooks/useInbox.d.ts +34 -0
  133. package/apps/app-lifeops/src/hooks/useInbox.d.ts.map +1 -0
  134. package/apps/app-lifeops/src/hooks/useInbox.js +98 -0
  135. package/apps/app-lifeops/src/hooks/useLifeOpsActivitySignals.d.ts +2 -0
  136. package/apps/app-lifeops/src/hooks/useLifeOpsActivitySignals.d.ts.map +1 -0
  137. package/apps/app-lifeops/src/hooks/useLifeOpsActivitySignals.js +383 -0
  138. package/apps/app-lifeops/src/hooks/useLifeOpsAppState.d.ts +9 -0
  139. package/apps/app-lifeops/src/hooks/useLifeOpsAppState.d.ts.map +1 -0
  140. package/apps/app-lifeops/src/hooks/useLifeOpsAppState.js +83 -0
  141. package/apps/app-lifeops/src/hooks/useLifeOpsCapabilitiesStatus.d.ts +8 -0
  142. package/apps/app-lifeops/src/hooks/useLifeOpsCapabilitiesStatus.d.ts.map +1 -0
  143. package/apps/app-lifeops/src/hooks/useLifeOpsCapabilitiesStatus.js +60 -0
  144. package/apps/app-lifeops/src/hooks/useLifeOpsScheduleInspection.d.ts +18 -0
  145. package/apps/app-lifeops/src/hooks/useLifeOpsScheduleInspection.d.ts.map +1 -0
  146. package/apps/app-lifeops/src/hooks/useLifeOpsScheduleInspection.js +66 -0
  147. package/apps/app-lifeops/src/hooks/useLifeOpsScheduleState.d.ts +14 -0
  148. package/apps/app-lifeops/src/hooks/useLifeOpsScheduleState.d.ts.map +1 -0
  149. package/apps/app-lifeops/src/hooks/useLifeOpsScheduleState.js +79 -0
  150. package/apps/app-lifeops/src/hooks/useLifeOpsSection.d.ts +18 -0
  151. package/apps/app-lifeops/src/hooks/useLifeOpsSection.d.ts.map +1 -0
  152. package/apps/app-lifeops/src/hooks/useLifeOpsSection.js +78 -0
  153. package/apps/app-lifeops/src/hooks/useLifeOpsXConnector.d.ts +14 -0
  154. package/apps/app-lifeops/src/hooks/useLifeOpsXConnector.d.ts.map +1 -0
  155. package/apps/app-lifeops/src/hooks/useLifeOpsXConnector.js +160 -0
  156. package/apps/app-lifeops/src/hooks/useSignalConnector.d.ts +16 -0
  157. package/apps/app-lifeops/src/hooks/useSignalConnector.d.ts.map +1 -0
  158. package/apps/app-lifeops/src/hooks/useSignalConnector.js +198 -0
  159. package/apps/app-lifeops/src/hooks/useTelegramConnector.d.ts +21 -0
  160. package/apps/app-lifeops/src/hooks/useTelegramConnector.d.ts.map +1 -0
  161. package/apps/app-lifeops/src/hooks/useTelegramConnector.js +177 -0
  162. package/apps/app-lifeops/src/hooks/useWhatsAppConnector.d.ts +8 -0
  163. package/apps/app-lifeops/src/hooks/useWhatsAppConnector.d.ts.map +1 -0
  164. package/apps/app-lifeops/src/hooks/useWhatsAppConnector.js +58 -0
  165. package/apps/app-lifeops/src/hooks/useWhatsAppPairing.d.ts +12 -0
  166. package/apps/app-lifeops/src/hooks/useWhatsAppPairing.d.ts.map +1 -0
  167. package/apps/app-lifeops/src/hooks/useWhatsAppPairing.js +152 -0
  168. package/apps/app-lifeops/src/lifeops/discord-browser-scraper.js +1 -1
  169. package/apps/app-lifeops/src/lifeops/google-gmail.d.ts.map +1 -1
  170. package/apps/app-lifeops/src/lifeops/google-gmail.js +74 -26
  171. package/apps/app-lifeops/src/lifeops/google-managed-client.d.ts.map +1 -1
  172. package/apps/app-lifeops/src/lifeops/google-managed-client.js +4 -5
  173. package/apps/app-lifeops/src/lifeops/google-oauth.d.ts.map +1 -1
  174. package/apps/app-lifeops/src/lifeops/google-oauth.js +2 -2
  175. package/apps/app-lifeops/src/lifeops/owner-profile.d.ts.map +1 -1
  176. package/apps/app-lifeops/src/lifeops/owner-profile.js +1 -1
  177. package/apps/app-lifeops/src/lifeops/paypal-managed-client.d.ts.map +1 -1
  178. package/apps/app-lifeops/src/lifeops/paypal-managed-client.js +4 -5
  179. package/apps/app-lifeops/src/lifeops/plaid-managed-client.d.ts.map +1 -1
  180. package/apps/app-lifeops/src/lifeops/plaid-managed-client.js +4 -5
  181. package/apps/app-lifeops/src/lifeops/schedule-sync-client.js +2 -2
  182. package/apps/app-lifeops/src/lifeops/service-constants.d.ts +1 -0
  183. package/apps/app-lifeops/src/lifeops/service-constants.d.ts.map +1 -1
  184. package/apps/app-lifeops/src/lifeops/service-constants.js +1 -0
  185. package/apps/app-lifeops/src/lifeops/service-mixin-core.d.ts +1 -1
  186. package/apps/app-lifeops/src/lifeops/service-mixin-core.d.ts.map +1 -1
  187. package/apps/app-lifeops/src/lifeops/service-mixin-core.js +2 -1
  188. package/apps/app-lifeops/src/lifeops/service-mixin-imessage.js +1 -1
  189. package/apps/app-lifeops/src/lifeops/service-mixin-inbox.d.ts +3 -1
  190. package/apps/app-lifeops/src/lifeops/service-mixin-inbox.d.ts.map +1 -1
  191. package/apps/app-lifeops/src/lifeops/service-mixin-inbox.js +42 -13
  192. package/apps/app-lifeops/src/lifeops/service-mixin-reminders.d.ts.map +1 -1
  193. package/apps/app-lifeops/src/lifeops/service-mixin-reminders.js +3 -2
  194. package/apps/app-lifeops/src/lifeops/service-mixin-workflows.d.ts.map +1 -1
  195. package/apps/app-lifeops/src/lifeops/service-mixin-workflows.js +1 -1
  196. package/apps/app-lifeops/src/lifeops/service-normalize-calendar.d.ts.map +1 -1
  197. package/apps/app-lifeops/src/lifeops/service-normalize-calendar.js +3 -3
  198. package/apps/app-lifeops/src/lifeops/service-normalize-connector.d.ts +1 -1
  199. package/apps/app-lifeops/src/lifeops/service-normalize-connector.d.ts.map +1 -1
  200. package/apps/app-lifeops/src/lifeops/service-normalize-connector.js +2 -2
  201. package/apps/app-lifeops/src/lifeops/signal-auth.d.ts.map +1 -1
  202. package/apps/app-lifeops/src/lifeops/signal-auth.js +6 -3
  203. package/apps/app-lifeops/src/lifeops/telegram-auth.js +1 -1
  204. package/apps/app-lifeops/src/lifeops/travel-adapters/duffel.d.ts.map +1 -1
  205. package/apps/app-lifeops/src/lifeops/travel-adapters/duffel.js +31 -6
  206. package/apps/app-lifeops/src/lifeops/twilio.js +1 -1
  207. package/apps/app-lifeops/src/lifeops/x-poster.d.ts.map +1 -1
  208. package/apps/app-lifeops/src/lifeops/x-poster.js +13 -3
  209. package/apps/app-lifeops/src/lifeops-route.d.ts +74 -0
  210. package/apps/app-lifeops/src/lifeops-route.d.ts.map +1 -0
  211. package/apps/app-lifeops/src/lifeops-route.js +204 -0
  212. package/apps/app-lifeops/src/platform/lifeops-github.d.ts +15 -0
  213. package/apps/app-lifeops/src/platform/lifeops-github.d.ts.map +1 -0
  214. package/apps/app-lifeops/src/platform/lifeops-github.js +135 -0
  215. package/apps/app-lifeops/src/routes/cloud-features-routes.d.ts +2 -2
  216. package/apps/app-lifeops/src/routes/cloud-features-routes.d.ts.map +1 -1
  217. package/apps/app-lifeops/src/routes/cloud-features-routes.js +5 -3
  218. package/apps/app-lifeops/src/routes/lifeops-routes.d.ts.map +1 -1
  219. package/apps/app-lifeops/src/routes/lifeops-routes.js +15 -3
  220. package/apps/app-lifeops/src/routes/plugin.d.ts.map +1 -1
  221. package/apps/app-lifeops/src/routes/plugin.js +10 -1
  222. package/apps/app-lifeops/src/routes/travel-provider-relay-routes.d.ts +1 -1
  223. package/apps/app-lifeops/src/routes/travel-provider-relay-routes.d.ts.map +1 -1
  224. package/apps/app-lifeops/src/routes/travel-provider-relay-routes.js +4 -2
  225. package/apps/app-lifeops/src/routes/website-blocker-routes.d.ts +1 -1
  226. package/apps/app-lifeops/src/routes/website-blocker-routes.d.ts.map +1 -1
  227. package/apps/app-lifeops/src/ui.d.ts +11 -0
  228. package/apps/app-lifeops/src/ui.d.ts.map +1 -0
  229. package/apps/app-lifeops/src/ui.js +9 -0
  230. package/apps/app-lifeops/src/utils/lifeops-url.d.ts +5 -0
  231. package/apps/app-lifeops/src/utils/lifeops-url.d.ts.map +1 -0
  232. package/apps/app-lifeops/src/utils/lifeops-url.js +35 -0
  233. package/apps/app-lifeops/src/website-blocker/access.d.ts.map +1 -1
  234. package/apps/app-lifeops/src/website-blocker/access.js +1 -1
  235. package/apps/app-steward/src/routes/steward-compat-routes.d.ts +1 -1
  236. package/apps/app-steward/src/routes/steward-compat-routes.d.ts.map +1 -1
  237. package/apps/app-steward/src/routes/steward-compat-routes.js +3 -1
  238. package/apps/app-steward/src/routes/wallet-browser-compat-routes.d.ts +1 -1
  239. package/apps/app-steward/src/routes/wallet-browser-compat-routes.d.ts.map +1 -1
  240. package/apps/app-steward/src/routes/wallet-browser-compat-routes.js +3 -1
  241. package/apps/app-steward/src/routes/wallet-bsc-core-routes.d.ts.map +1 -1
  242. package/apps/app-steward/src/routes/wallet-bsc-core-routes.js +2 -1
  243. package/apps/app-steward/src/routes/wallet-compat-routes.d.ts +1 -1
  244. package/apps/app-steward/src/routes/wallet-compat-routes.d.ts.map +1 -1
  245. package/apps/app-steward/src/routes/wallet-compat-routes.js +3 -1
  246. package/apps/app-steward/src/routes/wallet-core-routes.d.ts.map +1 -1
  247. package/apps/app-steward/src/routes/wallet-core-routes.js +2 -1
  248. package/apps/app-steward/src/routes/wallet-trade-compat-routes.d.ts +1 -1
  249. package/apps/app-steward/src/routes/wallet-trade-compat-routes.d.ts.map +1 -1
  250. package/apps/app-steward/src/routes/wallet-trade-compat-routes.js +3 -1
  251. package/apps/app-training/src/core/dataset-generator.d.ts +1 -1
  252. package/apps/app-training/src/core/dataset-generator.d.ts.map +1 -1
  253. package/apps/app-training/src/core/roleplay-executor.d.ts +1 -1
  254. package/apps/app-training/src/core/roleplay-executor.d.ts.map +1 -1
  255. package/apps/app-training/src/core/trajectory-task-datasets.d.ts +1 -1
  256. package/apps/app-training/src/core/trajectory-task-datasets.d.ts.map +1 -1
  257. package/apps/app-training/src/index.d.ts +1 -2
  258. package/apps/app-training/src/index.d.ts.map +1 -1
  259. package/apps/app-training/src/index.js +1 -2
  260. package/apps/app-training/src/routes/training-routes.d.ts +1 -1
  261. package/apps/app-training/src/routes/training-routes.d.ts.map +1 -1
  262. package/apps/app-training/src/routes/training-routes.js +1 -1
  263. package/apps/app-training/src/routes/trajectory-routes.d.ts +1 -1
  264. package/apps/app-training/src/routes/trajectory-routes.d.ts.map +1 -1
  265. package/apps/app-training/src/routes/trajectory-routes.js +3 -1
  266. package/apps/app-training/src/services/training-service-like.d.ts +1 -1
  267. package/apps/app-training/src/services/training-service-like.d.ts.map +1 -1
  268. package/apps/app-training/src/services/training-service.d.ts +1 -1
  269. package/apps/app-training/src/services/training-service.d.ts.map +1 -1
  270. package/package.json +4 -4
  271. package/packages/agent/src/api/provider-switch-config.js +1 -1
  272. package/packages/agent/src/api/server-helpers-auth.d.ts.map +1 -1
  273. package/packages/agent/src/api/server-helpers-auth.js +5 -4
  274. package/packages/agent/src/providers/media-provider.d.ts +1 -1
  275. package/packages/agent/src/providers/media-provider.d.ts.map +1 -1
  276. package/packages/agent/src/providers/self-status.d.ts +1 -1
  277. package/packages/agent/src/providers/self-status.d.ts.map +1 -1
  278. package/packages/app-core/src/App.d.ts.map +1 -1
  279. package/packages/app-core/src/App.js +20 -12
  280. package/packages/app-core/src/api/auth.d.ts.map +1 -1
  281. package/packages/app-core/src/api/auth.js +5 -5
  282. package/packages/app-core/src/api/client-types-experience.d.ts +7 -0
  283. package/packages/app-core/src/api/client-types-experience.d.ts.map +1 -1
  284. package/packages/app-core/src/components/apps/helpers.d.ts +1 -1
  285. package/packages/app-core/src/components/apps/helpers.d.ts.map +1 -1
  286. package/packages/app-core/src/components/apps/helpers.js +1 -0
  287. package/packages/app-core/src/components/apps/internal-tool-apps.d.ts +11 -0
  288. package/packages/app-core/src/components/apps/internal-tool-apps.d.ts.map +1 -1
  289. package/packages/app-core/src/components/apps/internal-tool-apps.js +31 -0
  290. package/packages/app-core/src/components/apps/launch-history.d.ts +16 -0
  291. package/packages/app-core/src/components/apps/launch-history.d.ts.map +1 -0
  292. package/packages/app-core/src/components/apps/launch-history.js +77 -0
  293. package/packages/app-core/src/components/apps/per-app-config.d.ts +19 -0
  294. package/packages/app-core/src/components/apps/per-app-config.d.ts.map +1 -0
  295. package/packages/app-core/src/components/apps/per-app-config.js +99 -0
  296. package/packages/app-core/src/components/apps/useRegistryCatalog.d.ts +14 -0
  297. package/packages/app-core/src/components/apps/useRegistryCatalog.d.ts.map +1 -0
  298. package/packages/app-core/src/components/apps/useRegistryCatalog.js +52 -0
  299. package/packages/app-core/src/components/auth/LoginView.d.ts +1 -19
  300. package/packages/app-core/src/components/auth/LoginView.d.ts.map +1 -1
  301. package/packages/app-core/src/components/auth/LoginView.js +4 -99
  302. package/packages/app-core/src/components/character/CharacterExperienceWorkspace.d.ts.map +1 -1
  303. package/packages/app-core/src/components/character/CharacterExperienceWorkspace.js +14 -2
  304. package/packages/app-core/src/components/character/character-hub-helpers.d.ts.map +1 -1
  305. package/packages/app-core/src/components/character/character-hub-helpers.js +7 -0
  306. package/packages/app-core/src/components/character/character-hub-types.d.ts +7 -0
  307. package/packages/app-core/src/components/character/character-hub-types.d.ts.map +1 -1
  308. package/packages/app-core/src/components/onboarding/BootstrapStep.d.ts.map +1 -1
  309. package/packages/app-core/src/components/onboarding/BootstrapStep.js +3 -2
  310. package/packages/app-core/src/components/pages/AppDetailsView.d.ts +36 -0
  311. package/packages/app-core/src/components/pages/AppDetailsView.d.ts.map +1 -0
  312. package/packages/app-core/src/components/pages/AppDetailsView.js +289 -0
  313. package/packages/app-core/src/components/pages/AppsView.d.ts.map +1 -1
  314. package/packages/app-core/src/components/pages/AppsView.js +134 -42
  315. package/packages/app-core/src/components/shell/StartupShell.d.ts.map +1 -1
  316. package/packages/app-core/src/components/shell/StartupShell.js +2 -5
  317. package/packages/app-core/src/i18n/locales/en.json +256 -205
  318. package/packages/app-core/src/i18n/locales/es.json +256 -205
  319. package/packages/app-core/src/i18n/locales/ko.json +256 -205
  320. package/packages/app-core/src/i18n/locales/pt.json +256 -205
  321. package/packages/app-core/src/i18n/locales/tl.json +256 -205
  322. package/packages/app-core/src/i18n/locales/vi.json +256 -205
  323. package/packages/app-core/src/i18n/locales/zh-CN.json +256 -205
  324. package/packages/app-core/src/navigation/index.d.ts.map +1 -1
  325. package/packages/app-core/src/navigation/index.js +6 -0
  326. package/packages/app-core/src/services/auth-store.d.ts +1 -1
  327. package/packages/app-core/src/services/auth-store.d.ts.map +1 -1
  328. package/packages/app-core/src/services/auth-store.js +1 -1
  329. package/packages/app-core/src/shell/AppWindowRenderer.d.ts +17 -0
  330. package/packages/app-core/src/shell/AppWindowRenderer.d.ts.map +1 -0
  331. package/packages/app-core/src/shell/AppWindowRenderer.js +337 -0
  332. package/packages/app-core/src/shell/DetachedShellRoot.js +4 -1
  333. package/packages/app-core/src/shell/index.d.ts +1 -0
  334. package/packages/app-core/src/shell/index.d.ts.map +1 -1
  335. package/packages/app-core/src/shell/index.js +1 -0
  336. package/packages/app-core/src/state/startup-coordinator.d.ts.map +1 -1
  337. package/packages/app-core/src/state/startup-coordinator.js +0 -3
  338. package/packages/app-core/src/state/startup-phase-poll.d.ts.map +1 -1
  339. package/packages/app-core/src/state/startup-phase-poll.js +2 -4
  340. package/packages/app-core/src/state/usePluginsSkillsState.d.ts +6 -6
  341. package/packages/native-plugins/mobile-signals/src/definitions.d.ts +162 -0
  342. package/packages/native-plugins/mobile-signals/src/definitions.d.ts.map +1 -0
  343. package/packages/native-plugins/mobile-signals/src/definitions.js +1 -0
  344. package/packages/native-plugins/mobile-signals/src/index.d.ts +4 -0
  345. package/packages/native-plugins/mobile-signals/src/index.d.ts.map +1 -0
  346. package/packages/native-plugins/mobile-signals/src/index.js +6 -0
  347. package/packages/native-plugins/mobile-signals/src/web.d.ts +29 -0
  348. package/packages/native-plugins/mobile-signals/src/web.d.ts.map +1 -0
  349. package/packages/native-plugins/mobile-signals/src/web.js +269 -0
  350. package/packages/shared/src/app-hero-art.d.ts.map +1 -1
  351. package/packages/shared/src/app-hero-art.js +13 -0
  352. package/packages/shared/src/contracts/lifeops.d.ts +10 -0
  353. package/packages/shared/src/contracts/lifeops.d.ts.map +1 -1
  354. package/packages/shared/src/contracts/lifeops.js +5 -0
  355. package/packages/typescript/src/features/advanced-capabilities/experience/actions/record-experience.d.ts.map +1 -1
  356. package/packages/typescript/src/features/advanced-capabilities/experience/actions/record-experience.js +46 -4
  357. package/packages/typescript/src/features/advanced-capabilities/experience/evaluators/experienceEvaluator.d.ts.map +1 -1
  358. package/packages/typescript/src/features/advanced-capabilities/experience/evaluators/experienceEvaluator.js +34 -124
  359. package/packages/typescript/src/features/advanced-capabilities/experience/service.d.ts.map +1 -1
  360. package/packages/typescript/src/features/advanced-capabilities/experience/service.js +56 -0
  361. package/packages/typescript/src/features/advanced-capabilities/experience/types.d.ts +7 -0
  362. package/packages/typescript/src/features/advanced-capabilities/experience/types.d.ts.map +1 -1
  363. package/packages/typescript/src/features/advanced-capabilities/experience/utils/experienceText.d.ts +7 -0
  364. package/packages/typescript/src/features/advanced-capabilities/experience/utils/experienceText.d.ts.map +1 -0
  365. package/packages/typescript/src/features/advanced-capabilities/experience/utils/experienceText.js +123 -0
  366. package/apps/app-training/src/ui/FineTuningView.d.ts +0 -5
  367. package/apps/app-training/src/ui/FineTuningView.d.ts.map +0 -1
  368. package/apps/app-training/src/ui/FineTuningView.js +0 -388
  369. package/apps/app-training/src/ui/fine-tuning-panels.d.ts +0 -111
  370. package/apps/app-training/src/ui/fine-tuning-panels.d.ts.map +0 -1
  371. package/apps/app-training/src/ui/fine-tuning-panels.js +0 -130
  372. package/apps/app-training/src/ui/index.d.ts +0 -3
  373. package/apps/app-training/src/ui/index.d.ts.map +0 -1
  374. package/apps/app-training/src/ui/index.js +0 -2
  375. package/packages/app-core/src/api/trusted-local-request.d.ts +0 -4
  376. package/packages/app-core/src/api/trusted-local-request.d.ts.map +0 -1
  377. package/packages/app-core/src/api/trusted-local-request.js +0 -176
@@ -0,0 +1,514 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { Button, ConfirmDialog, client, Dialog, DialogContent, Input, Select, SelectContent, SelectItem, SelectTrigger, SelectValue, TagInput, Textarea, useApp, } from "@elizaos/app-core";
3
+ import { X } from "lucide-react";
4
+ import { useCallback, useEffect, useMemo, useState } from "react";
5
+ const TIME_ZONE = Intl.DateTimeFormat().resolvedOptions().timeZone || "UTC";
6
+ const REMINDER_PRESETS = [
7
+ { label: "5m", minutes: 5 },
8
+ { label: "10m", minutes: 10 },
9
+ { label: "15m", minutes: 15 },
10
+ { label: "30m", minutes: 30 },
11
+ { label: "1h", minutes: 60 },
12
+ { label: "1d", minutes: 1440 },
13
+ ];
14
+ const WEEKDAY_RRULE_CODES = [
15
+ "SU",
16
+ "MO",
17
+ "TU",
18
+ "WE",
19
+ "TH",
20
+ "FR",
21
+ "SA",
22
+ ];
23
+ function toLocalInputValue(isoString) {
24
+ if (!isoString) {
25
+ return "";
26
+ }
27
+ const parsed = Date.parse(isoString);
28
+ if (!Number.isFinite(parsed)) {
29
+ return "";
30
+ }
31
+ // datetime-local input expects "YYYY-MM-DDTHH:mm"
32
+ const date = new Date(parsed);
33
+ const pad = (value) => String(value).padStart(2, "0");
34
+ return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}T${pad(date.getHours())}:${pad(date.getMinutes())}`;
35
+ }
36
+ function fromLocalInputValue(localValue) {
37
+ if (!localValue) {
38
+ return null;
39
+ }
40
+ const parsed = new Date(localValue);
41
+ return Number.isFinite(parsed.getTime()) ? parsed.toISOString() : null;
42
+ }
43
+ function nextHalfHourIso(now = new Date()) {
44
+ const ms = 30 * 60 * 1000;
45
+ const start = new Date(Math.ceil(now.getTime() / ms) * ms);
46
+ return start.toISOString();
47
+ }
48
+ function isoPlusMinutes(iso, minutes) {
49
+ return new Date(Date.parse(iso) + minutes * 60_000).toISOString();
50
+ }
51
+ function basicEmailValid(value) {
52
+ return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value);
53
+ }
54
+ function rruleForPreset(preset, date) {
55
+ switch (preset) {
56
+ case "daily":
57
+ return "FREQ=DAILY";
58
+ case "weekly":
59
+ return `FREQ=WEEKLY;BYDAY=${WEEKDAY_RRULE_CODES[date.getDay()]}`;
60
+ case "monthly":
61
+ return `FREQ=MONTHLY;BYMONTHDAY=${date.getDate()}`;
62
+ case "yearly":
63
+ return "FREQ=YEARLY";
64
+ default:
65
+ return null;
66
+ }
67
+ }
68
+ function recurrencePresetLabel(preset, date) {
69
+ const weekdayLong = new Intl.DateTimeFormat(undefined, {
70
+ weekday: "long",
71
+ }).format(date);
72
+ switch (preset) {
73
+ case "none":
74
+ return "Does not repeat";
75
+ case "daily":
76
+ return "Daily";
77
+ case "weekly":
78
+ return `Weekly on ${weekdayLong}`;
79
+ case "monthly":
80
+ return `Monthly on day ${date.getDate()}`;
81
+ case "yearly":
82
+ return "Yearly";
83
+ case "custom":
84
+ return "Custom (RRULE)";
85
+ }
86
+ }
87
+ const RECURRENCE_PRESETS = [
88
+ "none",
89
+ "daily",
90
+ "weekly",
91
+ "monthly",
92
+ "yearly",
93
+ "custom",
94
+ ];
95
+ function blankFormState(defaults) {
96
+ const seedDate = defaults?.date ?? new Date();
97
+ const start = nextHalfHourIso(seedDate);
98
+ return {
99
+ title: "",
100
+ startAt: toLocalInputValue(start),
101
+ endAt: toLocalInputValue(isoPlusMinutes(start, 30)),
102
+ notes: "",
103
+ location: "",
104
+ attendees: [],
105
+ reminderMinutes: [],
106
+ recurrencePreset: "none",
107
+ customRrule: "",
108
+ calendarId: defaults?.calendarId ?? "",
109
+ grantId: defaults?.grantId ?? "",
110
+ side: defaults?.side ?? "owner",
111
+ };
112
+ }
113
+ function formStateFromEvent(event) {
114
+ const attendees = event.attendees
115
+ .map((attendee) => attendee.email?.trim() ?? "")
116
+ .filter((email) => email.length > 0);
117
+ return {
118
+ title: event.title,
119
+ startAt: toLocalInputValue(event.startAt),
120
+ endAt: toLocalInputValue(event.endAt),
121
+ notes: event.description ?? "",
122
+ location: event.location ?? "",
123
+ attendees,
124
+ reminderMinutes: [],
125
+ recurrencePreset: "none",
126
+ customRrule: "",
127
+ calendarId: event.calendarId,
128
+ grantId: event.grantId ?? "",
129
+ side: event.side,
130
+ };
131
+ }
132
+ function buildRecurrenceArray(state) {
133
+ if (state.recurrencePreset === "none") {
134
+ return undefined;
135
+ }
136
+ if (state.recurrencePreset === "custom") {
137
+ const rule = state.customRrule.trim();
138
+ if (!rule)
139
+ return undefined;
140
+ const stripped = rule.startsWith("RRULE:") ? rule.slice("RRULE:".length) : rule;
141
+ return [stripped];
142
+ }
143
+ const startDate = fromLocalInputValue(state.startAt);
144
+ if (!startDate)
145
+ return undefined;
146
+ const rule = rruleForPreset(state.recurrencePreset, new Date(startDate));
147
+ return rule ? [rule] : undefined;
148
+ }
149
+ function attendeesToContract(emails) {
150
+ const valid = emails
151
+ .map((value) => value.trim())
152
+ .filter((value) => value.length > 0 && basicEmailValid(value));
153
+ if (valid.length === 0)
154
+ return undefined;
155
+ return valid.map((email) => ({ email }));
156
+ }
157
+ export function EventEditorDrawer({ open, mode = "edit", event, createDefaults, onClose, onSaved, onCreated, onDeleted, onChat, }) {
158
+ const { setActionNotice, t } = useApp();
159
+ const [form, setForm] = useState(() => event ? formStateFromEvent(event) : blankFormState(createDefaults));
160
+ const [calendars, setCalendars] = useState([]);
161
+ const [calendarsLoading, setCalendarsLoading] = useState(false);
162
+ const [calendarsError, setCalendarsError] = useState(null);
163
+ const [customReminderDraft, setCustomReminderDraft] = useState("");
164
+ const [showCustomReminder, setShowCustomReminder] = useState(false);
165
+ const [saving, setSaving] = useState(false);
166
+ const [deleting, setDeleting] = useState(false);
167
+ const [confirmDeleteOpen, setConfirmDeleteOpen] = useState(false);
168
+ const [error, setError] = useState(null);
169
+ const isCreate = mode === "create";
170
+ // Seed form when the event changes (edit) or drawer opens in create mode.
171
+ useEffect(() => {
172
+ if (!open)
173
+ return;
174
+ if (isCreate) {
175
+ setForm(blankFormState(createDefaults));
176
+ }
177
+ else if (event) {
178
+ setForm(formStateFromEvent(event));
179
+ }
180
+ setError(null);
181
+ setCustomReminderDraft("");
182
+ setShowCustomReminder(false);
183
+ }, [open, isCreate, event, createDefaults]);
184
+ // Load calendar list when drawer opens. The selector is sourced from
185
+ // `client.getLifeOpsCalendars()`; if the call fails we fall back to a
186
+ // single "Primary" pseudo-row so the UI still renders.
187
+ useEffect(() => {
188
+ if (!open)
189
+ return;
190
+ let cancelled = false;
191
+ setCalendarsLoading(true);
192
+ setCalendarsError(null);
193
+ void client
194
+ .getLifeOpsCalendars({ side: "owner" })
195
+ .then((response) => {
196
+ if (cancelled)
197
+ return;
198
+ setCalendars(response.calendars);
199
+ setForm((prev) => {
200
+ if (prev.calendarId)
201
+ return prev;
202
+ const primary = response.calendars.find((calendar) => calendar.primary) ??
203
+ response.calendars[0];
204
+ if (!primary)
205
+ return prev;
206
+ return {
207
+ ...prev,
208
+ calendarId: primary.calendarId,
209
+ grantId: primary.grantId,
210
+ side: primary.side,
211
+ };
212
+ });
213
+ })
214
+ .catch((cause) => {
215
+ if (cancelled)
216
+ return;
217
+ setCalendars([]);
218
+ setCalendarsError(cause instanceof Error && cause.message.trim().length > 0
219
+ ? cause.message.trim()
220
+ : "Could not load calendars.");
221
+ })
222
+ .finally(() => {
223
+ if (!cancelled)
224
+ setCalendarsLoading(false);
225
+ });
226
+ return () => {
227
+ cancelled = true;
228
+ };
229
+ }, [open]);
230
+ const calendarOptions = useMemo(() => {
231
+ if (calendars.length > 0)
232
+ return calendars;
233
+ // Fallback row so the Select still renders something while the list is
234
+ // loading or after a failed fetch. The ID matches what the backend uses
235
+ // when no calendar is supplied on create/update.
236
+ return [
237
+ {
238
+ provider: "google",
239
+ side: form.side,
240
+ grantId: form.grantId,
241
+ accountEmail: null,
242
+ calendarId: form.calendarId || "primary",
243
+ summary: form.calendarId && form.calendarId !== "primary"
244
+ ? form.calendarId
245
+ : "Primary",
246
+ description: null,
247
+ primary: true,
248
+ accessRole: "owner",
249
+ backgroundColor: null,
250
+ foregroundColor: null,
251
+ timeZone: null,
252
+ selected: true,
253
+ includeInFeed: true,
254
+ },
255
+ ];
256
+ }, [calendars, form.calendarId, form.grantId, form.side]);
257
+ const updateForm = useCallback((key, value) => {
258
+ setForm((prev) => ({ ...prev, [key]: value }));
259
+ }, []);
260
+ const toggleReminderPreset = useCallback((minutes) => {
261
+ setForm((prev) => {
262
+ const exists = prev.reminderMinutes.includes(minutes);
263
+ const next = exists
264
+ ? prev.reminderMinutes.filter((value) => value !== minutes)
265
+ : [...prev.reminderMinutes, minutes];
266
+ next.sort((a, b) => a - b);
267
+ return { ...prev, reminderMinutes: next };
268
+ });
269
+ }, []);
270
+ const addCustomReminder = useCallback(() => {
271
+ const parsed = Number(customReminderDraft);
272
+ if (!Number.isFinite(parsed) || parsed < 0)
273
+ return;
274
+ const minutes = Math.floor(parsed);
275
+ setForm((prev) => {
276
+ if (prev.reminderMinutes.includes(minutes))
277
+ return prev;
278
+ const next = [...prev.reminderMinutes, minutes];
279
+ next.sort((a, b) => a - b);
280
+ return { ...prev, reminderMinutes: next };
281
+ });
282
+ setCustomReminderDraft("");
283
+ }, [customReminderDraft]);
284
+ const handleSave = useCallback(async (options = {}) => {
285
+ setError(null);
286
+ const titleTrimmed = form.title.trim();
287
+ if (!titleTrimmed)
288
+ return;
289
+ const startIso = fromLocalInputValue(form.startAt);
290
+ const endIso = fromLocalInputValue(form.endAt);
291
+ if (!startIso || !endIso) {
292
+ setError(t("eventEditor.invalidTimes", {
293
+ defaultValue: "Pick valid start and end times.",
294
+ }));
295
+ return;
296
+ }
297
+ setSaving(true);
298
+ try {
299
+ if (isCreate) {
300
+ const request = {
301
+ side: form.side,
302
+ grantId: form.grantId || undefined,
303
+ calendarId: form.calendarId || undefined,
304
+ title: titleTrimmed,
305
+ description: form.notes.trim() || undefined,
306
+ location: form.location.trim() || undefined,
307
+ startAt: startIso,
308
+ endAt: endIso,
309
+ timeZone: TIME_ZONE,
310
+ attendees: attendeesToContract(form.attendees),
311
+ recurrence: buildRecurrenceArray(form),
312
+ reminders: form.reminderMinutes.length > 0
313
+ ? form.reminderMinutes.map((minutesBefore) => ({
314
+ minutesBefore,
315
+ }))
316
+ : undefined,
317
+ };
318
+ const result = await client.createLifeOpsCalendarEvent(request);
319
+ if (!result.event) {
320
+ throw new Error("Calendar create returned no event.");
321
+ }
322
+ setActionNotice(t("eventEditor.created", {
323
+ defaultValue: "Event created.",
324
+ }), "success", 2400);
325
+ onCreated?.(result.event);
326
+ if (options.keepOpen) {
327
+ setForm(blankFormState({ ...createDefaults, side: form.side }));
328
+ }
329
+ else {
330
+ onClose();
331
+ }
332
+ }
333
+ else {
334
+ if (!event)
335
+ return;
336
+ const patch = {
337
+ side: event.side,
338
+ grantId: event.grantId,
339
+ calendarId: form.calendarId || event.calendarId,
340
+ timeZone: event.timezone ?? TIME_ZONE,
341
+ };
342
+ if (titleTrimmed !== event.title)
343
+ patch.title = titleTrimmed;
344
+ if (startIso !== event.startAt)
345
+ patch.startAt = startIso;
346
+ if (endIso !== event.endAt)
347
+ patch.endAt = endIso;
348
+ if (form.notes.trim() !== (event.description ?? "")) {
349
+ patch.notes = form.notes.trim();
350
+ }
351
+ if (form.location.trim() !== (event.location ?? "")) {
352
+ patch.location = form.location.trim();
353
+ }
354
+ const attendeesContract = attendeesToContract(form.attendees);
355
+ if (attendeesContract) {
356
+ patch.attendees = attendeesContract;
357
+ }
358
+ const recurrence = buildRecurrenceArray(form);
359
+ if (recurrence) {
360
+ patch.recurrence = recurrence;
361
+ }
362
+ if (form.reminderMinutes.length > 0) {
363
+ patch.reminders = form.reminderMinutes.map((minutesBefore) => ({
364
+ minutesBefore,
365
+ }));
366
+ }
367
+ const result = await client.updateLifeOpsCalendarEvent(event.externalId, patch);
368
+ setActionNotice(t("eventEditor.saved", { defaultValue: "Event saved." }), "success", 2400);
369
+ onSaved?.(result.event);
370
+ if (options.keepOpen) {
371
+ setForm(formStateFromEvent(result.event));
372
+ }
373
+ else {
374
+ onClose();
375
+ }
376
+ }
377
+ }
378
+ catch (cause) {
379
+ setError(cause instanceof Error && cause.message.trim().length > 0
380
+ ? cause.message.trim()
381
+ : t("eventEditor.saveFailed", {
382
+ defaultValue: "Could not save the event.",
383
+ }));
384
+ }
385
+ finally {
386
+ setSaving(false);
387
+ }
388
+ }, [
389
+ createDefaults,
390
+ event,
391
+ form,
392
+ isCreate,
393
+ onClose,
394
+ onCreated,
395
+ onSaved,
396
+ setActionNotice,
397
+ t,
398
+ ]);
399
+ const handleDelete = useCallback(async () => {
400
+ if (!event)
401
+ return;
402
+ setDeleting(true);
403
+ setError(null);
404
+ try {
405
+ await client.deleteLifeOpsCalendarEvent(event.externalId, {
406
+ side: event.side,
407
+ grantId: event.grantId,
408
+ calendarId: event.calendarId,
409
+ });
410
+ setActionNotice(t("eventEditor.deleted", { defaultValue: "Event deleted." }), "success", 2400);
411
+ onDeleted?.(event.id);
412
+ onClose();
413
+ }
414
+ catch (cause) {
415
+ setError(cause instanceof Error && cause.message.trim().length > 0
416
+ ? cause.message.trim()
417
+ : t("eventEditor.deleteFailed", {
418
+ defaultValue: "Could not delete the event.",
419
+ }));
420
+ }
421
+ finally {
422
+ setDeleting(false);
423
+ setConfirmDeleteOpen(false);
424
+ }
425
+ }, [event, onClose, onDeleted, setActionNotice, t]);
426
+ const startDate = useMemo(() => {
427
+ const iso = fromLocalInputValue(form.startAt);
428
+ return iso ? new Date(iso) : new Date();
429
+ }, [form.startAt]);
430
+ if (!isCreate && !event) {
431
+ return null;
432
+ }
433
+ const titleLabel = isCreate
434
+ ? t("eventEditor.createTitle", { defaultValue: "New event" })
435
+ : t("eventEditor.title", { defaultValue: "Edit event" });
436
+ const primaryActionLabel = isCreate
437
+ ? t("eventEditor.create", { defaultValue: "Create" })
438
+ : t("common.save", { defaultValue: "Save" });
439
+ const primaryActionLoadingLabel = isCreate
440
+ ? t("eventEditor.creating", { defaultValue: "Creating…" })
441
+ : t("common.saving", { defaultValue: "Saving…" });
442
+ const calendarSelectValue = form.calendarId || calendarOptions[0]?.calendarId || "";
443
+ return (_jsxs(_Fragment, { children: [_jsx(Dialog, { open: open, onOpenChange: (isOpen) => !isOpen && onClose(), children: _jsxs(DialogContent, { className: "fixed bottom-0 right-0 top-0 !left-auto !right-0 !top-0 m-0 h-full w-[min(28rem,100vw)] max-w-[100vw] !translate-x-0 !translate-y-0 overflow-y-auto rounded-l-2xl rounded-r-none border-l border-t-0 border-border/16 bg-bg p-0 shadow-xl duration-200 data-[state=closed]:slide-out-to-right-full data-[state=open]:slide-in-from-right-full", "data-testid": "event-editor-drawer", children: [_jsxs("div", { className: "flex items-center justify-between gap-3 border-b border-border/12 px-5 py-4", children: [_jsx("div", { children: _jsx("div", { className: "text-sm font-semibold text-txt", children: titleLabel }) }), _jsx("button", { type: "button", onClick: onClose, "aria-label": t("common.close", { defaultValue: "Close" }), className: "rounded-full p-1.5 text-muted transition-colors hover:bg-bg-hover/40 hover:text-txt", children: _jsx(X, { className: "h-4 w-4" }) })] }), _jsxs("div", { className: "space-y-4 px-5 py-5", children: [error ? (_jsx("div", { className: "rounded-2xl bg-danger/10 px-3 py-2 text-xs text-danger", children: error })) : null, _jsxs("div", { className: "space-y-1.5", children: [_jsx("label", { htmlFor: "event-editor-title", className: "block text-xs font-medium text-muted", children: t("common.title", { defaultValue: "Title" }) }), _jsx(Input, { id: "event-editor-title", value: form.title, onChange: (e) => updateForm("title", e.target.value), placeholder: t("eventEditor.titlePlaceholder", {
444
+ defaultValue: "Event title",
445
+ }), "aria-label": t("eventEditor.titleAria", {
446
+ defaultValue: "Event title",
447
+ }) })] }), _jsxs("div", { className: "grid grid-cols-2 gap-3", children: [_jsxs("div", { className: "space-y-1.5", children: [_jsx("label", { htmlFor: "event-editor-start-at", className: "block text-xs font-medium text-muted", children: t("eventEditor.startAt", { defaultValue: "Start" }) }), _jsx(Input, { id: "event-editor-start-at", type: "datetime-local", value: form.startAt, onChange: (e) => updateForm("startAt", e.target.value), "aria-label": t("eventEditor.startAtAria", {
448
+ defaultValue: "Start time",
449
+ }) })] }), _jsxs("div", { className: "space-y-1.5", children: [_jsx("label", { htmlFor: "event-editor-end-at", className: "block text-xs font-medium text-muted", children: t("eventEditor.endAt", { defaultValue: "End" }) }), _jsx(Input, { id: "event-editor-end-at", type: "datetime-local", value: form.endAt, onChange: (e) => updateForm("endAt", e.target.value), "aria-label": t("eventEditor.endAtAria", {
450
+ defaultValue: "End time",
451
+ }) })] })] }), _jsxs("div", { className: "space-y-1.5", children: [_jsx("label", { htmlFor: "event-editor-location", className: "block text-xs font-medium text-muted", children: t("eventEditor.location", { defaultValue: "Location" }) }), _jsx(Input, { id: "event-editor-location", value: form.location, onChange: (e) => updateForm("location", e.target.value), placeholder: t("eventEditor.locationPlaceholder", {
452
+ defaultValue: "Location (optional)",
453
+ }), "aria-label": t("eventEditor.locationAria", {
454
+ defaultValue: "Event location",
455
+ }) })] }), _jsxs("div", { className: "space-y-1.5", children: [_jsx("label", { htmlFor: "event-editor-recurrence", className: "block text-xs font-medium text-muted", children: t("eventEditor.recurrence", { defaultValue: "Repeat" }) }), _jsxs(Select, { value: form.recurrencePreset, onValueChange: (value) => updateForm("recurrencePreset", value), children: [_jsx(SelectTrigger, { id: "event-editor-recurrence", "aria-label": t("eventEditor.recurrenceAria", {
456
+ defaultValue: "Recurrence",
457
+ }), children: _jsx(SelectValue, {}) }), _jsx(SelectContent, { children: RECURRENCE_PRESETS.map((preset) => (_jsx(SelectItem, { value: preset, children: recurrencePresetLabel(preset, startDate) }, preset))) })] }), form.recurrencePreset === "custom" ? (_jsx(Input, { className: "mt-2", value: form.customRrule, onChange: (e) => updateForm("customRrule", e.target.value), placeholder: "FREQ=WEEKLY;BYDAY=MO,WE,FR", "aria-label": t("eventEditor.customRruleAria", {
458
+ defaultValue: "Custom RRULE",
459
+ }) })) : null] }), _jsxs("div", { className: "space-y-1.5", children: [_jsx("span", { className: "block text-xs font-medium text-muted", children: t("eventEditor.attendees", { defaultValue: "Attendees" }) }), _jsx(TagInput, { items: form.attendees, onChange: (next) => updateForm("attendees", next.filter((value) => basicEmailValid(value))), placeholder: t("eventEditor.attendeePlaceholder", {
460
+ defaultValue: "Add email and press Enter",
461
+ }), addLabel: t("eventEditor.attendeeAdd", {
462
+ defaultValue: "Add attendee",
463
+ }), removeLabel: t("eventEditor.attendeeRemove", {
464
+ defaultValue: "Remove",
465
+ }) })] }), _jsxs("div", { className: "space-y-1.5", children: [_jsx("label", { htmlFor: "event-editor-calendar", className: "block text-xs font-medium text-muted", children: t("eventEditor.calendar", { defaultValue: "Calendar" }) }), _jsxs(Select, { value: calendarSelectValue, onValueChange: (value) => {
466
+ const match = calendarOptions.find((calendar) => calendar.calendarId === value);
467
+ setForm((prev) => ({
468
+ ...prev,
469
+ calendarId: value,
470
+ grantId: match?.grantId ?? prev.grantId,
471
+ side: match?.side ?? prev.side,
472
+ }));
473
+ }, children: [_jsx(SelectTrigger, { id: "event-editor-calendar", "aria-label": t("eventEditor.calendarAria", {
474
+ defaultValue: "Calendar of record",
475
+ }), children: _jsx(SelectValue, { placeholder: calendarsLoading
476
+ ? t("eventEditor.calendarLoading", {
477
+ defaultValue: "Loading…",
478
+ })
479
+ : t("eventEditor.calendarPlaceholder", {
480
+ defaultValue: "Select calendar",
481
+ }) }) }), _jsx(SelectContent, { children: calendarOptions.map((calendar) => (_jsxs(SelectItem, { value: calendar.calendarId, children: [calendar.summary, calendar.accountEmail
482
+ ? ` · ${calendar.accountEmail}`
483
+ : ""] }, `${calendar.grantId}:${calendar.calendarId}`))) })] }), calendarsError ? (_jsx("div", { className: "text-[10px] text-danger", children: calendarsError })) : null] }), _jsxs("div", { className: "space-y-1.5", children: [_jsx("span", { className: "block text-xs font-medium text-muted", children: t("eventEditor.reminders", { defaultValue: "Reminders" }) }), _jsxs("div", { className: "flex flex-wrap gap-1.5", children: [REMINDER_PRESETS.map((preset) => {
484
+ const active = form.reminderMinutes.includes(preset.minutes);
485
+ return (_jsx("button", { type: "button", onClick: () => toggleReminderPreset(preset.minutes), "aria-pressed": active, className: `rounded-full border px-2.5 py-1 text-xs font-medium transition-colors ${active
486
+ ? "border-accent bg-accent/15 text-accent"
487
+ : "border-border/30 text-muted hover:border-border/60 hover:text-txt"}`, children: preset.label }, preset.minutes));
488
+ }), _jsx("button", { type: "button", onClick: () => setShowCustomReminder((prev) => !prev), "aria-pressed": showCustomReminder, className: `rounded-full border px-2.5 py-1 text-xs font-medium transition-colors ${showCustomReminder
489
+ ? "border-accent bg-accent/15 text-accent"
490
+ : "border-border/30 text-muted hover:border-border/60 hover:text-txt"}`, children: t("eventEditor.reminderCustom", { defaultValue: "Custom" }) })] }), form.reminderMinutes.some((minutes) => !REMINDER_PRESETS.some((preset) => preset.minutes === minutes)) ? (_jsx("div", { className: "flex flex-wrap gap-1.5", children: form.reminderMinutes
491
+ .filter((minutes) => !REMINDER_PRESETS.some((preset) => preset.minutes === minutes))
492
+ .map((minutes) => (_jsxs("span", { className: "inline-flex items-center gap-1 rounded-full border border-accent/40 bg-accent/10 px-2 py-0.5 text-[11px] font-medium text-accent", children: [minutes, "m", _jsx("button", { type: "button", "aria-label": t("eventEditor.reminderRemove", {
493
+ defaultValue: "Remove reminder",
494
+ }), onClick: () => toggleReminderPreset(minutes), className: "rounded-full p-0.5 hover:bg-accent/20", children: _jsx(X, { className: "h-3 w-3" }) })] }, minutes))) })) : null, showCustomReminder ? (_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Input, { type: "number", min: 0, value: customReminderDraft, onChange: (e) => setCustomReminderDraft(e.target.value), onKeyDown: (e) => {
495
+ if (e.key === "Enter") {
496
+ e.preventDefault();
497
+ addCustomReminder();
498
+ }
499
+ }, placeholder: t("eventEditor.reminderCustomPlaceholder", {
500
+ defaultValue: "Minutes before",
501
+ }), "aria-label": t("eventEditor.reminderCustomAria", {
502
+ defaultValue: "Custom reminder minutes",
503
+ }), className: "w-32" }), _jsx(Button, { size: "sm", variant: "outline", className: "h-8 rounded-xl px-3 text-xs", onClick: addCustomReminder, children: t("common.add", { defaultValue: "Add" }) })] })) : null] }), _jsxs("div", { className: "space-y-1.5", children: [_jsx("label", { htmlFor: "event-editor-notes", className: "block text-xs font-medium text-muted", children: t("eventEditor.notes", { defaultValue: "Notes" }) }), _jsx(Textarea, { id: "event-editor-notes", value: form.notes, onChange: (e) => updateForm("notes", e.target.value), placeholder: t("eventEditor.notesPlaceholder", {
504
+ defaultValue: "Add notes…",
505
+ }), className: "min-h-20" })] })] }), _jsxs("div", { className: "flex flex-wrap items-center justify-between gap-3 border-t border-border/12 px-5 py-4", children: [_jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [!isCreate && onChat && event ? (_jsx(Button, { variant: "ghost", size: "sm", className: "h-8 rounded-xl px-3 text-xs font-semibold text-muted", onClick: () => onChat(event), children: t("common.chat", { defaultValue: "Chat" }) })) : null, !isCreate ? (_jsx(Button, { variant: "surfaceDestructive", size: "sm", className: "h-8 rounded-xl px-3 text-xs font-semibold", disabled: deleting || saving, onClick: () => setConfirmDeleteOpen(true), children: t("common.delete", { defaultValue: "Delete" }) })) : null] }), _jsxs("div", { className: "flex gap-2", children: [_jsx(Button, { variant: "outline", size: "sm", className: "h-8 rounded-xl px-3 text-xs font-semibold", onClick: onClose, disabled: saving, children: t("common.cancel", { defaultValue: "Cancel" }) }), _jsx(Button, { variant: "outline", size: "sm", className: "h-8 rounded-xl px-3 text-xs font-semibold", disabled: saving || !form.title.trim(), onClick: () => void handleSave({ keepOpen: true }), children: saving
506
+ ? primaryActionLoadingLabel
507
+ : t("eventEditor.saveAndContinue", {
508
+ defaultValue: "Save & continue",
509
+ }) }), _jsx(Button, { size: "sm", className: "h-8 rounded-xl px-3 text-xs font-semibold", disabled: saving || !form.title.trim(), onClick: () => void handleSave(), children: saving ? primaryActionLoadingLabel : primaryActionLabel })] })] })] }) }), _jsx(ConfirmDialog, { open: confirmDeleteOpen, title: t("eventEditor.confirmDeleteTitle", {
510
+ defaultValue: "Delete event?",
511
+ }), message: t("eventEditor.confirmDeleteDescription", {
512
+ defaultValue: "This will delete the event from your calendar. This cannot be undone.",
513
+ }), confirmLabel: t("common.delete", { defaultValue: "Delete" }), cancelLabel: t("common.cancel", { defaultValue: "Cancel" }), variant: "danger", onConfirm: () => void handleDelete(), onCancel: () => setConfirmDeleteOpen(false) })] }));
514
+ }
@@ -0,0 +1,2 @@
1
+ export declare function LifeOpsActivitySignalsEffect(): null;
2
+ //# sourceMappingURL=LifeOpsActivitySignalsEffect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LifeOpsActivitySignalsEffect.d.ts","sourceRoot":"","sources":["../../../../../../../apps/app-lifeops/src/components/LifeOpsActivitySignalsEffect.tsx"],"names":[],"mappings":"AAGA,wBAAgB,4BAA4B,IAAI,IAAI,CAQnD"}
@@ -0,0 +1,10 @@
1
+ import { useApp } from "@elizaos/app-core";
2
+ import { useLifeOpsActivitySignals } from "../hooks/useLifeOpsActivitySignals.js";
3
+ export function LifeOpsActivitySignalsEffect() {
4
+ const { startupCoordinator, agentStatus, backendConnection } = useApp();
5
+ const enabled = startupCoordinator.phase === "ready" &&
6
+ agentStatus?.state === "running" &&
7
+ backendConnection?.state === "connected";
8
+ useLifeOpsActivitySignals(enabled);
9
+ return null;
10
+ }
@@ -0,0 +1,15 @@
1
+ /**
2
+ * LifeOpsCalendarSection — Google Calendar-style week/day/month views.
3
+ *
4
+ * Day/week views render an hour-by-hour grid and position events by their
5
+ * actual start/end time. Month view renders a 5-6 row day grid. Events get
6
+ * deterministic category colours derived from their calendar/account id so
7
+ * the same feed keeps the same colour across renders.
8
+ */
9
+ import { type LifeOpsSelection } from "./LifeOpsSelectionContext.js";
10
+ export interface LifeOpsCalendarSectionProps {
11
+ selection?: LifeOpsSelection;
12
+ onSelect?: (args: Partial<LifeOpsSelection> | null) => void;
13
+ }
14
+ export declare function LifeOpsCalendarSection(props?: LifeOpsCalendarSectionProps): import("react/jsx-runtime").JSX.Element;
15
+ //# sourceMappingURL=LifeOpsCalendarSection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LifeOpsCalendarSection.d.ts","sourceRoot":"","sources":["../../../../../../../apps/app-lifeops/src/components/LifeOpsCalendarSection.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAsBH,OAAO,EACL,KAAK,gBAAgB,EAEtB,MAAM,8BAA8B,CAAC;AAo2BtC,MAAM,WAAW,2BAA2B;IAC1C,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,IAAI,KAAK,IAAI,CAAC;CAC7D;AAED,wBAAgB,sBAAsB,CACpC,KAAK,GAAE,2BAAgC,2CAgOxC"}