@elizaos/ui 2.0.3-beta.6 → 2.0.3-beta.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (231) hide show
  1. package/App.d.ts.map +1 -1
  2. package/App.js +30 -4
  3. package/api/app-shell-capabilities.d.ts +9 -0
  4. package/api/app-shell-capabilities.d.ts.map +1 -0
  5. package/api/app-shell-capabilities.js +39 -0
  6. package/api/auth-client.d.ts.map +1 -1
  7. package/api/auth-client.js +4 -1
  8. package/api/client-agent.d.ts.map +1 -1
  9. package/api/client-agent.js +35 -24
  10. package/api/client-base.d.ts +36 -0
  11. package/api/client-base.d.ts.map +1 -1
  12. package/api/client-base.js +79 -0
  13. package/api/client-chat.d.ts.map +1 -1
  14. package/api/client-chat.js +14 -5
  15. package/api/client-cloud.d.ts +49 -0
  16. package/api/client-cloud.d.ts.map +1 -1
  17. package/api/client-cloud.js +73 -6
  18. package/api/client-local-inference.d.ts.map +1 -1
  19. package/api/client-local-inference.js +5 -1
  20. package/api/desktop-external-api-base.d.ts +4 -0
  21. package/api/desktop-external-api-base.d.ts.map +1 -0
  22. package/api/desktop-external-api-base.js +43 -0
  23. package/api/desktop-http-transport.d.ts.map +1 -1
  24. package/api/desktop-http-transport.js +2 -28
  25. package/api/i18n-locale-client.d.ts.map +1 -1
  26. package/api/i18n-locale-client.js +12 -0
  27. package/cloud/billing/components/billing-tab.d.ts.map +1 -1
  28. package/cloud/billing/components/billing-tab.js +11 -14
  29. package/cloud/connectors/discord-gateway-connection.d.ts.map +1 -1
  30. package/cloud/connectors/discord-gateway-connection.js +39 -5
  31. package/cloud/connectors/index.d.ts +9 -0
  32. package/cloud/connectors/index.d.ts.map +1 -1
  33. package/cloud/connectors/index.js +14 -1
  34. package/cloud/handoff/run-cloud-agent-handoff.d.ts +10 -1
  35. package/cloud/handoff/run-cloud-agent-handoff.d.ts.map +1 -1
  36. package/cloud/handoff/run-cloud-agent-handoff.js +43 -7
  37. package/cloud/handoff/silent-repoint.d.ts +33 -0
  38. package/cloud/handoff/silent-repoint.d.ts.map +1 -0
  39. package/cloud/handoff/silent-repoint.js +55 -0
  40. package/cloud/instances/AgentDetailPage.d.ts.map +1 -1
  41. package/cloud/instances/AgentDetailPage.js +2 -2
  42. package/cloud/instances/components/agent-actions.d.ts.map +1 -1
  43. package/cloud/instances/components/agent-actions.js +1 -4
  44. package/cloud/instances/components/eliza-agents-table.d.ts.map +1 -1
  45. package/cloud/instances/components/eliza-agents-table.js +1 -10
  46. package/cloud/instances/index.d.ts +2 -5
  47. package/cloud/instances/index.d.ts.map +1 -1
  48. package/cloud/instances/index.js +2 -12
  49. package/cloud/organization/invite-member-dialog.d.ts.map +1 -1
  50. package/cloud/organization/invite-member-dialog.js +2 -5
  51. package/cloud/organization/members-tab.d.ts.map +1 -1
  52. package/cloud/organization/members-tab.js +4 -7
  53. package/cloud/public-pages/pages/app-auth/app-authorize-page.d.ts +9 -0
  54. package/cloud/public-pages/pages/app-auth/app-authorize-page.d.ts.map +1 -1
  55. package/cloud/public-pages/pages/app-auth/app-authorize-page.js +11 -1
  56. package/cloud/register-all.d.ts +0 -1
  57. package/cloud/register-all.d.ts.map +1 -1
  58. package/cloud/register-all.js +3 -7
  59. package/cloud/settings/index.d.ts +5 -6
  60. package/cloud/settings/index.d.ts.map +1 -1
  61. package/cloud/settings/index.js +5 -6
  62. package/cloud/settings/register-cloud-settings.d.ts +2 -2
  63. package/cloud/settings/register-cloud-settings.d.ts.map +1 -1
  64. package/cloud/settings/register-cloud-settings.js +127 -121
  65. package/cloud/shell/CloudRouterShell.d.ts.map +1 -1
  66. package/cloud/shell/CloudRouterShell.js +5 -0
  67. package/cloud-ui/components/drawer.d.ts.map +1 -1
  68. package/cloud-ui/components/drawer.js +1 -1
  69. package/cloud-ui/index.d.ts +0 -1
  70. package/cloud-ui/index.d.ts.map +1 -1
  71. package/cloud-ui/index.js +0 -1
  72. package/components/apps/app-identity.helpers.d.ts.map +1 -1
  73. package/components/apps/app-identity.helpers.js +8 -0
  74. package/components/chat/widgets/inbox-unread.d.ts.map +1 -1
  75. package/components/chat/widgets/inbox-unread.js +8 -1
  76. package/components/chat/widgets/needs-attention.d.ts.map +1 -1
  77. package/components/chat/widgets/needs-attention.js +18 -2
  78. package/components/chat/widgets/relationships-attention.d.ts.map +1 -1
  79. package/components/chat/widgets/relationships-attention.js +5 -0
  80. package/components/composites/chat/chat-composer.js +15 -15
  81. package/components/config-ui/ui-renderer.d.ts.map +1 -1
  82. package/components/config-ui/ui-renderer.js +1 -1
  83. package/components/local-inference/useHomeModelStatus.d.ts.map +1 -1
  84. package/components/local-inference/useHomeModelStatus.js +31 -1
  85. package/components/pages/SettingsView.d.ts.map +1 -1
  86. package/components/pages/SettingsView.js +1 -4
  87. package/components/pages/Springboard.d.ts.map +1 -1
  88. package/components/pages/Springboard.js +17 -1
  89. package/components/pages/SpringboardSurface.d.ts.map +1 -1
  90. package/components/pages/SpringboardSurface.js +14 -3
  91. package/components/settings/CloudAgentsSection.d.ts.map +1 -1
  92. package/components/settings/CloudAgentsSection.js +6 -8
  93. package/components/settings/CloudOverviewSection.d.ts +2 -0
  94. package/components/settings/CloudOverviewSection.d.ts.map +1 -0
  95. package/components/settings/CloudOverviewSection.js +81 -0
  96. package/components/settings/ConnectorsSection.d.ts +19 -0
  97. package/components/settings/ConnectorsSection.d.ts.map +1 -1
  98. package/components/settings/ConnectorsSection.js +72 -27
  99. package/components/settings/settings-sections.d.ts.map +1 -1
  100. package/components/settings/settings-sections.js +26 -4
  101. package/components/shell/ComputerUseApprovalOverlay.d.ts.map +1 -1
  102. package/components/shell/ComputerUseApprovalOverlay.js +12 -2
  103. package/components/shell/ContinuousChatOverlay.d.ts.map +1 -1
  104. package/components/shell/ContinuousChatOverlay.js +41 -8
  105. package/components/shell/ShellHeaderControls.d.ts.map +1 -1
  106. package/components/shell/ShellHeaderControls.js +1 -1
  107. package/components/shell/StartupFailureView.d.ts.map +1 -1
  108. package/components/shell/StartupFailureView.js +4 -2
  109. package/components/shell/__e2e__/home-screen-fixture.catalog-stub.d.ts +2 -0
  110. package/components/shell/__e2e__/home-screen-fixture.catalog-stub.d.ts.map +1 -1
  111. package/components/shell/__e2e__/home-screen-fixture.catalog-stub.js +8 -0
  112. package/components/views/ViewTileImage.d.ts +4 -4
  113. package/components/views/ViewTileImage.d.ts.map +1 -1
  114. package/components/views/ViewTileImage.js +26 -9
  115. package/config/boot-config-store.d.ts +10 -0
  116. package/config/boot-config-store.d.ts.map +1 -1
  117. package/first-run/CompactOnboarding.d.ts.map +1 -1
  118. package/first-run/CompactOnboarding.js +4 -2
  119. package/first-run/use-first-run-controller.d.ts +1 -0
  120. package/first-run/use-first-run-controller.d.ts.map +1 -1
  121. package/first-run/use-first-run-controller.js +133 -56
  122. package/hooks/useAvailableViews.d.ts +11 -2
  123. package/hooks/useAvailableViews.d.ts.map +1 -1
  124. package/hooks/useAvailableViews.js +49 -7
  125. package/hooks/useHorizontalPager.d.ts.map +1 -1
  126. package/hooks/useHorizontalPager.js +11 -4
  127. package/hooks/useViewCatalog.d.ts.map +1 -1
  128. package/hooks/useViewCatalog.js +5 -2
  129. package/hooks/view-catalog.d.ts +2 -0
  130. package/hooks/view-catalog.d.ts.map +1 -1
  131. package/hooks/view-catalog.js +1 -0
  132. package/index.d.ts +0 -1
  133. package/index.d.ts.map +1 -1
  134. package/index.js +0 -1
  135. package/layouts/content-layout/content-layout.d.ts.map +1 -1
  136. package/layouts/content-layout/content-layout.js +2 -1
  137. package/package.json +10 -10
  138. package/platform/browser-launch.d.ts.map +1 -1
  139. package/platform/browser-launch.js +2 -0
  140. package/state/AppContext.js +6 -4
  141. package/state/startup-coordinator.d.ts +2 -0
  142. package/state/startup-coordinator.d.ts.map +1 -1
  143. package/state/startup-coordinator.js +8 -0
  144. package/state/startup-first-run-options.d.ts +4 -0
  145. package/state/startup-first-run-options.d.ts.map +1 -0
  146. package/state/startup-first-run-options.js +18 -0
  147. package/state/startup-phase-hydrate.d.ts.map +1 -1
  148. package/state/startup-phase-hydrate.js +25 -14
  149. package/state/startup-phase-poll.d.ts.map +1 -1
  150. package/state/startup-phase-poll.js +60 -0
  151. package/state/startup-phase-restore.d.ts.map +1 -1
  152. package/state/startup-phase-restore.js +6 -19
  153. package/state/types.d.ts +0 -17
  154. package/state/types.d.ts.map +1 -1
  155. package/state/types.js +0 -13
  156. package/state/use-startup-shell-controller.d.ts.map +1 -1
  157. package/state/use-startup-shell-controller.js +3 -2
  158. package/state/useAppShellState.d.ts +5 -1
  159. package/state/useAppShellState.d.ts.map +1 -1
  160. package/state/useAppShellState.js +11 -3
  161. package/state/useChatCallbacks.d.ts +1 -0
  162. package/state/useChatCallbacks.d.ts.map +1 -1
  163. package/state/useChatCallbacks.js +53 -8
  164. package/state/useChatLifecycle.d.ts +1 -0
  165. package/state/useChatLifecycle.d.ts.map +1 -1
  166. package/state/useChatLifecycle.js +2 -2
  167. package/state/useChatSend.d.ts.map +1 -1
  168. package/state/useChatSend.js +72 -8
  169. package/state/useCloudState.d.ts.map +1 -1
  170. package/state/useCloudState.js +29 -1
  171. package/state/useDataLoaders.d.ts.map +1 -1
  172. package/state/useDataLoaders.js +9 -0
  173. package/state/useFirstRunCallbacks.d.ts.map +1 -1
  174. package/state/useFirstRunCallbacks.js +5 -0
  175. package/state/useLifecycleState.d.ts +0 -7
  176. package/state/useLifecycleState.d.ts.map +1 -1
  177. package/state/useLifecycleState.js +0 -24
  178. package/state/usePluginsSkillsState.d.ts +2 -2
  179. package/state/useWalletState.d.ts +3 -1
  180. package/state/useWalletState.d.ts.map +1 -1
  181. package/state/useWalletState.js +4 -2
  182. package/storybook/mock-providers.d.ts.map +1 -1
  183. package/storybook/mock-providers.js +2 -0
  184. package/styles/electrobun-mac-window-drag.css +7 -0
  185. package/widgets/WidgetHost.d.ts.map +1 -1
  186. package/widgets/WidgetHost.js +21 -3
  187. package/cloud/documents/DocumentsRoute.d.ts +0 -21
  188. package/cloud/documents/DocumentsRoute.d.ts.map +0 -1
  189. package/cloud/documents/DocumentsRoute.js +0 -45
  190. package/cloud/documents/DocumentsSection.d.ts +0 -15
  191. package/cloud/documents/DocumentsSection.d.ts.map +0 -1
  192. package/cloud/documents/DocumentsSection.js +0 -18
  193. package/cloud/documents/components/document-list.d.ts +0 -19
  194. package/cloud/documents/components/document-list.d.ts.map +0 -1
  195. package/cloud/documents/components/document-list.js +0 -75
  196. package/cloud/documents/components/document-query.d.ts +0 -15
  197. package/cloud/documents/components/document-query.d.ts.map +0 -1
  198. package/cloud/documents/components/document-query.js +0 -92
  199. package/cloud/documents/components/document-upload.d.ts +0 -16
  200. package/cloud/documents/components/document-upload.d.ts.map +0 -1
  201. package/cloud/documents/components/document-upload.js +0 -180
  202. package/cloud/documents/components/documents-page-client.d.ts +0 -20
  203. package/cloud/documents/components/documents-page-client.d.ts.map +0 -1
  204. package/cloud/documents/components/documents-page-client.js +0 -80
  205. package/cloud/documents/index.d.ts +0 -37
  206. package/cloud/documents/index.d.ts.map +0 -1
  207. package/cloud/documents/index.js +0 -45
  208. package/cloud/documents/lib/agents.d.ts +0 -23
  209. package/cloud/documents/lib/agents.d.ts.map +0 -1
  210. package/cloud/documents/lib/agents.js +0 -26
  211. package/cloud/documents/lib/documents.d.ts +0 -54
  212. package/cloud/documents/lib/documents.d.ts.map +0 -1
  213. package/cloud/documents/lib/documents.js +0 -118
  214. package/cloud/instances/AgentChatPage.d.ts +0 -13
  215. package/cloud/instances/AgentChatPage.d.ts.map +0 -1
  216. package/cloud/instances/AgentChatPage.js +0 -217
  217. package/cloud-ui/components/image-gen/empty-state.d.ts +0 -3
  218. package/cloud-ui/components/image-gen/empty-state.d.ts.map +0 -1
  219. package/cloud-ui/components/image-gen/empty-state.js +0 -12
  220. package/cloud-ui/components/image-gen/enhanced-loading.d.ts +0 -14
  221. package/cloud-ui/components/image-gen/enhanced-loading.d.ts.map +0 -1
  222. package/cloud-ui/components/image-gen/enhanced-loading.js +0 -23
  223. package/cloud-ui/components/image-gen/index.d.ts +0 -5
  224. package/cloud-ui/components/image-gen/index.d.ts.map +0 -1
  225. package/cloud-ui/components/image-gen/index.js +0 -4
  226. package/cloud-ui/components/image-gen/loading-state.d.ts +0 -2
  227. package/cloud-ui/components/image-gen/loading-state.d.ts.map +0 -1
  228. package/cloud-ui/components/image-gen/loading-state.js +0 -11
  229. package/cloud-ui/components/image-gen/prompt-input.d.ts +0 -32
  230. package/cloud-ui/components/image-gen/prompt-input.d.ts.map +0 -1
  231. package/cloud-ui/components/image-gen/prompt-input.js +0 -24
@@ -7,10 +7,10 @@
7
7
  import { asRecord } from "@elizaos/shared";
8
8
  import { useCallback, useEffect, useRef } from "react";
9
9
  import { client, } from "../api/index.js";
10
- import { isDirectCloudSharedAgentBase } from "../api/client-cloud.js";
10
+ import { isLimitedCloudAgentApiBase } from "../api/app-shell-capabilities.js";
11
11
  import { expandSavedCustomCommand, loadSavedCustomCommands, normalizeSlashCommandName, } from "../chat/index.js";
12
+ import { CLOUD_HANDOFF_PHASE_EVENT, } from "../events/index.js";
12
13
  import { getWindowNavigationPath } from "../navigation/index.js";
13
- import { isDedicatedCloudAgentBase } from "../utils/cloud-agent-base.js";
14
14
  import { clearChatDraft } from "./ChatComposerContext.hooks.js";
15
15
  import { isConversationRecord } from "./chat-conversation-guards.js";
16
16
  import { applyStreamingTextModification, filterRenderableConversationMessages, formatSearchBullet, mergeStreamingText, normalizeCustomActionName, parseCustomActionParams, parseSlashCommandInput, shouldApplyFinalStreamText, } from "./internal.js";
@@ -37,11 +37,7 @@ function optimisticAttachmentKind(mimeType) {
37
37
  * user's message must NOT be silently dropped.
38
38
  */
39
39
  function isCloudAgentBase(value) {
40
- if (!value?.trim())
41
- return false;
42
- // Either the shared-runtime REST adapter or a dedicated <id>.elizacloud.ai
43
- // subdomain; control-plane hosts are excluded by isDedicatedCloudAgentBase.
44
- return (isDirectCloudSharedAgentBase(value) || isDedicatedCloudAgentBase(value));
40
+ return isLimitedCloudAgentApiBase(value);
45
41
  }
46
42
  function uniq(values) {
47
43
  const seen = new Set();
@@ -211,6 +207,18 @@ export function useChatSend(deps) {
211
207
  const { t, uiLanguage, tab, activeConversationId, ptySessionsRef, setChatInput, setChatSending, setChatFirstTokenReceived, setServerTurnStatus, setChatLastUsage, setChatPendingImages, setConversations, setActiveConversationId, setCompanionMessageCutoffTs, setConversationMessages, setUnreadConversations, setActionNotice, activeConversationIdRef, chatInputRef, chatPendingImagesRef, conversationsRef, conversationMessagesRef, chatAbortRef, chatSendBusyRef, chatSendNonceRef, loadConversations, loadConversationMessages, elizaCloudEnabled, elizaCloudConnected, pollCloudCredits, } = deps;
212
208
  const chatSendQueueRef = useRef([]);
213
209
  const activeChatTurnRef = useRef(null);
210
+ // Freeze-on-shared (cloud-agent handoff, PR2). While a shared→dedicated
211
+ // handoff is migrating, the user is still pointed at the SHARED agent but the
212
+ // shared transcript has already been (or is about to be) snapshotted. The
213
+ // import endpoint is populated-room skip-all idempotent, so any message that
214
+ // reaches the shared history AFTER the snapshot is silently lost — a re-import
215
+ // inserts zero. To guarantee no loss we DON'T send outgoing messages to the
216
+ // shared agent during the window: they sit in `chatSendQueueRef` (un-drained)
217
+ // and are flushed once `onSwitch` has re-pointed the client at the dedicated
218
+ // container (which already holds the copied history). When no handoff is in
219
+ // flight this stays false → the drain runs exactly as before (byte-identical
220
+ // when `preferSharedCloudTier` is off, since no `migrating` phase ever fires).
221
+ const handoffFrozenRef = useRef(false);
214
222
  // Streaming-commit throttle.
215
223
  // The SSE `onToken` callback fires once per token (often >60/sec on a fast
216
224
  // model). Instead of committing each one, the latest cumulative text is parked
@@ -686,7 +694,8 @@ export function useChatSend(deps) {
686
694
  if (userMessageCount === 1 &&
687
695
  data.completed !== false &&
688
696
  data.text.trim() &&
689
- !data.failureKind) {
697
+ !data.failureKind &&
698
+ !isCloudAgentBase(client.getBaseUrl())) {
690
699
  void client
691
700
  .renameConversation(convId, "", { generate: true })
692
701
  .then(() => {
@@ -853,10 +862,31 @@ export function useChatSend(deps) {
853
862
  const flushQueuedChatSends = useCallback(async () => {
854
863
  if (chatSendBusyRef.current)
855
864
  return;
865
+ // Handoff in progress: hold the queue. We must NOT dispatch to the network
866
+ // here — the live client still points at the shared agent, and anything that
867
+ // lands on the shared history after its snapshot is lost to the skip-all
868
+ // import. The queued turns stay put and are drained when the switch settles
869
+ // (the freeze is cleared and this is re-invoked, now pointed at the
870
+ // dedicated container). The composer is already cleared + `setChatSending`
871
+ // is on, so the user sees their message accepted, not dropped.
872
+ if (handoffFrozenRef.current) {
873
+ setChatSending(true);
874
+ return;
875
+ }
856
876
  chatSendBusyRef.current = true;
857
877
  setChatSending(true);
858
878
  try {
859
879
  while (chatSendQueueRef.current.length > 0) {
880
+ // Re-check the freeze EACH iteration: a handoff can begin (`migrating`)
881
+ // while an earlier turn is mid-`await` here, and `sendChatText` can
882
+ // enqueue a new turn during that await. Without this guard the loop
883
+ // would drain that newly-queued turn to the SHARED agent after its
884
+ // snapshot — re-opening the skip-all-import loss window the freeze
885
+ // exists to close. `break` leaves the not-yet-shifted turns queued; the
886
+ // terminal-phase handler re-invokes this flush after the client base is
887
+ // repointed at the dedicated, so they land there exactly once.
888
+ if (handoffFrozenRef.current)
889
+ break;
860
890
  const nextTurn = chatSendQueueRef.current.shift();
861
891
  if (!nextTurn)
862
892
  break;
@@ -880,6 +910,40 @@ export function useChatSend(deps) {
880
910
  setChatFirstTokenReceived,
881
911
  setChatSending,
882
912
  ]);
913
+ // Drive the freeze off the existing shared→dedicated handoff lifecycle
914
+ // (CLOUD_HANDOFF_PHASE_EVENT). `migrating` opens the window (stop draining to
915
+ // the shared agent); every terminal phase closes it and drains:
916
+ // - `switched` / `switched-empty`: `onSwitch` has already re-pointed the
917
+ // client at the dedicated container (it runs INSIDE the handoff before the
918
+ // phase is dispatched), so the drain now delivers the queued messages to
919
+ // the dedicated — exactly where the copied history lives.
920
+ // - `timed-out` / `failed`: no switch happened, the user safely stays on the
921
+ // working shared agent, so unfreeze and let the queue flow to the shared
922
+ // agent as normal (the snapshot never landed, nothing to lose).
923
+ // Without a handoff this listener never fires, so the queue drains inline as
924
+ // before — no behavior change when the shared-tier flag is off.
925
+ useEffect(() => {
926
+ if (typeof window === "undefined")
927
+ return;
928
+ const onPhase = (event) => {
929
+ const detail = event.detail;
930
+ if (!detail)
931
+ return;
932
+ if (detail.phase === "migrating") {
933
+ handoffFrozenRef.current = true;
934
+ return;
935
+ }
936
+ // Any terminal phase ends the window. Drain whatever queued up — by now
937
+ // the client base is the dedicated container (on a switch) or unchanged
938
+ // (on timeout/failure), so the flush targets the right agent either way.
939
+ if (handoffFrozenRef.current) {
940
+ handoffFrozenRef.current = false;
941
+ void flushQueuedChatSends();
942
+ }
943
+ };
944
+ window.addEventListener(CLOUD_HANDOFF_PHASE_EVENT, onPhase);
945
+ return () => window.removeEventListener(CLOUD_HANDOFF_PHASE_EVENT, onPhase);
946
+ }, [flushQueuedChatSends]);
883
947
  const sendChatText = useCallback(async (rawInput, options) => {
884
948
  const hasAttachedImages = Boolean(options?.images?.length);
885
949
  if (!rawInput.trim() && !hasAttachedImages) {
@@ -1 +1 @@
1
- {"version":3,"file":"useCloudState.d.ts","sourceRoot":"","sources":["../../../../../src/state/useCloudState.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAgLH,UAAU,gBAAgB;IACxB,eAAe,EAAE,CACf,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,EACnC,KAAK,CAAC,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,OAAO,EACd,IAAI,CAAC,EAAE,OAAO,KACX,IAAI,CAAC;IACV,kFAAkF;IAClF,gBAAgB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,gEAAgE;IAChE,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;IAC3B,oFAAoF;IACpF,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAID,wBAAgB,aAAa,CAAC,EAC5B,eAAe,EACf,gBAAgB,EAChB,CAAC,EACD,gBAAwB,GACzB,EAAE,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yDA+EwB,OAAO,CAAC,IAAI,CAAC;4BAIP,OAAO,CAAC,OAAO,CAAC;yCAmHrC,MAAM,GAAG,IAAI;mCAkUvB;QAAE,gBAAgB,CAAC,EAAE,OAAO,CAAA;KAAE,KAAG,OAAO,CAAC,IAAI,CAAC;EAiR/D"}
1
+ {"version":3,"file":"useCloudState.d.ts","sourceRoot":"","sources":["../../../../../src/state/useCloudState.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AA+LH,UAAU,gBAAgB;IACxB,eAAe,EAAE,CACf,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,EACnC,KAAK,CAAC,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,OAAO,EACd,IAAI,CAAC,EAAE,OAAO,KACX,IAAI,CAAC;IACV,kFAAkF;IAClF,gBAAgB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,gEAAgE;IAChE,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;IAC3B,oFAAoF;IACpF,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAID,wBAAgB,aAAa,CAAC,EAC5B,eAAe,EACf,gBAAgB,EAChB,CAAC,EACD,gBAAwB,GACzB,EAAE,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yDA+EwB,OAAO,CAAC,IAAI,CAAC;4BAIP,OAAO,CAAC,OAAO,CAAC;yCA0HrC,MAAM,GAAG,IAAI;mCAuUvB;QAAE,gBAAgB,CAAC,EAAE,OAAO,CAAA;KAAE,KAAG,OAAO,CAAC,IAAI,CAAC;EAiR/D"}
@@ -19,6 +19,7 @@
19
19
  import { readStoredStewardToken, writeStoredStewardToken, } from "@elizaos/shared/steward-session-client";
20
20
  import { useCallback, useEffect, useRef, useState } from "react";
21
21
  import { client } from "../api/index.js";
22
+ import { supportsFullAppShellRoutes } from "../api/app-shell-capabilities.js";
22
23
  import { cloudTokenSecsRemaining, refreshCloudStewardSession, } from "../api/client-cloud.js";
23
24
  import { invokeDesktopBridgeRequestWithTimeout, isElectrobunRuntime, } from "../bridge/index.js";
24
25
  import { getBootConfig, setBootConfig } from "../config/boot-config.js";
@@ -59,6 +60,11 @@ function isSameOriginLocalHttpBackend() {
59
60
  }
60
61
  return isPrivateNetworkHost(hostname);
61
62
  }
63
+ function isDevUiPortWithoutEmbeddedBackend() {
64
+ if (typeof window === "undefined")
65
+ return false;
66
+ return window.location.port === "2138";
67
+ }
62
68
  function isCapacitorNativeRuntime() {
63
69
  if (typeof globalThis === "undefined")
64
70
  return false;
@@ -111,8 +117,18 @@ function hasCloudLoginBackend() {
111
117
  return (!isConfiguredCloudSiteBase(explicitBase) &&
112
118
  !isCapacitorAssetBase(explicitBase));
113
119
  }
120
+ if (isDevUiPortWithoutEmbeddedBackend())
121
+ return false;
114
122
  return isSameOriginLocalHttpBackend();
115
123
  }
124
+ function canPollCloudStatus() {
125
+ const explicitBase = typeof client.getBaseUrl === "function" ? client.getBaseUrl().trim() : "";
126
+ if (isCapacitorNativeRuntime())
127
+ return true;
128
+ if (explicitBase && isConfiguredCloudSiteBase(explicitBase))
129
+ return true;
130
+ return hasCloudLoginBackend() && supportsFullAppShellRoutes(explicitBase);
131
+ }
116
132
  /**
117
133
  * Resolve the Steward refresh endpoint for the current target. On hosted web
118
134
  * the same-origin cookie path works (the HttpOnly `steward-refresh-token`
@@ -202,6 +218,13 @@ export function useCloudState({ setActionNotice, loadWalletConfig, t, disconnect
202
218
  const handleCloudLoginRef = useRef(async () => { });
203
219
  // ── Callbacks ──────────────────────────────────────────────────────
204
220
  const pollCloudCredits = useCallback(async () => {
221
+ if (!canPollCloudStatus()) {
222
+ if (elizaCloudPollInterval.current) {
223
+ clearInterval(elizaCloudPollInterval.current);
224
+ elizaCloudPollInterval.current = null;
225
+ }
226
+ return lastElizaCloudPollConnectedRef.current;
227
+ }
205
228
  if (elizaCloudDisconnectInFlightRef.current) {
206
229
  return lastElizaCloudPollConnectedRef.current;
207
230
  }
@@ -392,9 +415,14 @@ export function useCloudState({ setActionNotice, loadWalletConfig, t, disconnect
392
415
  // direct cloud auth (no local backend) or go through the agent proxy.
393
416
  const hasBackend = hasCloudLoginBackend();
394
417
  const cloudApiBase = getBootConfig().cloudApiBase ?? "https://www.elizacloud.ai";
395
- const useDirectAuth = !hasBackend;
418
+ let useDirectAuth = !hasBackend;
396
419
  if (hasBackend) {
397
420
  const cloudStatus = await client.getCloudStatus().catch(() => null);
421
+ if (cloudStatus === null) {
422
+ // Browser/dev shells can run on localhost without a local agent proxy.
423
+ // In that case, keep first-run Cloud usable via the direct Cloud flow.
424
+ useDirectAuth = true;
425
+ }
398
426
  const alreadyAuthenticated = isCloudStatusAuthenticated(Boolean(cloudStatus?.connected), cloudStatus?.reason);
399
427
  if (alreadyAuthenticated) {
400
428
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"useDataLoaders.d.ts","sourceRoot":"","sources":["../../../../../src/state/useDataLoaders.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useDataLoaders.d.ts","sourceRoot":"","sources":["../../../../../src/state/useDataLoaders.ts"],"names":[],"mappings":"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"}
@@ -10,6 +10,7 @@ import { logger } from "@elizaos/logger";
10
10
  import { resolveStylePresetByAvatarIndex } from "@elizaos/shared";
11
11
  import { useCallback, useEffect, useRef, useState, } from "react";
12
12
  import { client, } from "../api/index.js";
13
+ import { supportsFullAppShellRoutes } from "../api/app-shell-capabilities.js";
13
14
  import { normalizeOwnerName } from "../utils/owner-name.js";
14
15
  import { buildAutonomyGapReplayRequests, hasPendingAutonomyGaps, markPendingAutonomyGapsPartial, mergeAutonomyEvents, } from "./autonomy.js";
15
16
  import { normalizeConversationList } from "./chat-conversation-guards.js";
@@ -378,6 +379,14 @@ export function useDataLoaders(deps) {
378
379
  const [workbenchTriggersAvailable, setWorkbenchTriggersAvailable] = useState(false);
379
380
  const [workbenchTodosAvailable, setWorkbenchTodosAvailable] = useState(false);
380
381
  const loadWorkbench = useCallback(async () => {
382
+ if (!supportsFullAppShellRoutes(client.getBaseUrl())) {
383
+ setWorkbench(null);
384
+ setWorkbenchTasksAvailable(false);
385
+ setWorkbenchTriggersAvailable(false);
386
+ setWorkbenchTodosAvailable(false);
387
+ setWorkbenchLoading(false);
388
+ return;
389
+ }
381
390
  setWorkbenchLoading(true);
382
391
  try {
383
392
  const result = await client.getWorkbenchOverview();
@@ -1 +1 @@
1
- {"version":3,"file":"useFirstRunCallbacks.d.ts","sourceRoot":"","sources":["../../../../../src/state/useFirstRunCallbacks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAOH,OAAO,EAAE,KAAK,SAAS,EAAe,MAAM,OAAO,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,KAAK,cAAc,GAAG,IAAI,CACxB,WAAW,EACT,eAAe,GACf,YAAY,GACZ,WAAW,GACX,6BAA6B,GAC7B,YAAY,GACZ,UAAU,GACV,YAAY,GACZ,gBAAgB,GAChB,cAAc,CACjB,CAAC;AA2CF,OAAO,EAGL,KAAK,uBAAuB,EAC7B,MAAM,WAAW,CAAC;AAkBnB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAmC,KAAK,GAAG,EAAE,MAAM,eAAe,CAAC;AAE1E,OAAO,EAIL,KAAK,mBAAmB,EAGzB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,QAAQ,EAAE,uBAAuB,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC5E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAqF5D,wBAAgB,6BAA6B,CAAC,IAAI,EAAE;IAClD,KAAK,EAAE,WAAW,GAAG,SAAS,CAAC;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,OAAO,CAAC;CAC3B,GAAG,WAAW,GAAG,IAAI,CA6BrB;AAqBD,wBAAgB,oCAAoC,CAAC,IAAI,EAAE;IACzD,uBAAuB,EAAE,OAAO,CAAC;IACjC,sBAAsB,EAAE,OAAO,CAAC;IAChC,sBAAsB,EAAE,OAAO,CAAC;IAChC,0BAA0B,EAAE,OAAO,CAAC;CACrC,GAAG;IACF,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,IAAI,CAAC;QAAC,OAAO,EAAE,IAAI,CAAA;KAAE,CAAC,CAAC;IAC9D,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,IAAI,CAAA;KAAE,CAAC,CAAC;CAC9C,CAwBA;AAID,MAAM,WAAW,qBAAqB;IACpC,sEAAsE;IACtE,QAAQ,EAAE,iBAAiB,CAAC;IAE5B,mBAAmB,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAEtD;;;OAGG;IACH,YAAY,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC;IACxC,eAAe,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC;IACvD,sBAAsB,EAAE,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACnD,uBAAuB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD,4BAA4B,EAAE,CAC5B,CAAC,EAAE,QAAQ,CAAC,2BAA2B,CAAC,KACrC,IAAI,CAAC;IACV,wBAAwB,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC,uBAAuB,CAAC,KAAK,IAAI,CAAC;IACzE,sBAAsB,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,mBAAmB,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,iBAAiB,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,uBAAuB,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,wBAAwB,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,sBAAsB,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,2BAA2B,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IAClD,sBAAsB,EAAE,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACnD,0BAA0B,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACjD,iCAAiC,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACxD,iBAAiB,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACzC,qBAAqB,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IAC7C,gBAAgB,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IAExC,yBAAyB;IACzB,mBAAmB,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IAC1C,8BAA8B,EAAE,SAAS,CAAC,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;IAC/D,gBAAgB,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;IACrC,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC;IAC3B,iBAAiB,EAAE,GAAG,CAAC;IACvB,aAAa,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,UAAU,EAAE,UAAU,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC;IACvC,mBAAmB,EAAE,OAAO,CAAC;IAC7B,eAAe,EAAE,CACf,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,EACnC,KAAK,CAAC,EAAE,MAAM,KACX,IAAI,CAAC;IACV,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,sBAAsB,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;IAC3C,MAAM,EAAE,cAAc,CAAC;CACxB;AAID,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,qBAAqB;oCAgF9C,GAAG,YACL,uBAAuB;uCAiDlB,mBAAmB;qCAsYnB,mBAAmB;6BAS7B,SAAS;;gCAwEC,mBAAmB;mCA+CnB,mBAAmB;;;uCAgC3B,SAAS;;;;uCA0IP,OAAO,CAAC,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAC;EAwBjE"}
1
+ {"version":3,"file":"useFirstRunCallbacks.d.ts","sourceRoot":"","sources":["../../../../../src/state/useFirstRunCallbacks.ts"],"names":[],"mappings":"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"}
@@ -412,6 +412,11 @@ export function useFirstRunCallbacks(deps) {
412
412
  name: firstRunName,
413
413
  bio: style?.bio ?? ["An autonomous AI agent."],
414
414
  ...(preferAgentId ? { preferAgentId } : {}),
415
+ // Phase-0 MVP: boot-config flag → request a SHARED (instant,
416
+ // container-free) agent on create. Default off → dedicated, unchanged.
417
+ ...(getBootConfig().preferSharedCloudTier
418
+ ? { preferSharedTier: true }
419
+ : {}),
415
420
  onProgress: () => { },
416
421
  });
417
422
  const iosCloudLocalAgent = shouldUseIosCloudLocalAgent();
@@ -5,13 +5,10 @@
5
5
  * reducer + dispatch, cutting hook count and making state transitions explicit.
6
6
  */
7
7
  import type { AgentStatus } from "../api/index.js";
8
- import { type CloudHandoffPhaseDetail } from "../events/index.js";
9
8
  import type { ActionBanner, ActionNotice, AppState, LifecycleAction, StartupErrorState, StartupPhase } from "./types.js";
10
9
  export interface LifecycleState {
11
10
  connected: boolean;
12
11
  agentStatus: AgentStatus | null;
13
- /** Latest shared→dedicated cloud-agent handoff phase (see CLOUD_HANDOFF_PHASE_EVENT). */
14
- cloudHandoffPhase: CloudHandoffPhaseDetail | null;
15
12
  firstRunComplete: boolean;
16
13
  firstRunUiRevealNonce: number;
17
14
  firstRunLoading: boolean;
@@ -36,9 +33,6 @@ type LifecycleAction_ = {
36
33
  } | {
37
34
  type: "SET_AGENT_STATUS";
38
35
  value: AgentStatus | null;
39
- } | {
40
- type: "SET_CLOUD_HANDOFF_PHASE";
41
- value: CloudHandoffPhaseDetail | null;
42
36
  } | {
43
37
  type: "SET_FIRST_RUN_COMPLETE";
44
38
  value: boolean;
@@ -105,7 +99,6 @@ export interface LifecycleStateHook {
105
99
  setAgentStatus: (v: AgentStatus | null) => void;
106
100
  /** Only calls setAgentStatus when the payload has materially changed. */
107
101
  setAgentStatusIfChanged: (next: AgentStatus | null) => void;
108
- setCloudHandoffPhase: (v: CloudHandoffPhaseDetail | null) => void;
109
102
  setFirstRunComplete: (v: boolean) => void;
110
103
  incrementFirstRunRevealNonce: () => void;
111
104
  setFirstRunLoading: (v: boolean) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"useLifecycleState.d.ts","sourceRoot":"","sources":["../../../../../src/state/useLifecycleState.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useLifecycleState.d.ts","sourceRoot":"","sources":["../../../../../src/state/useLifecycleState.ts"],"names":[],"mappings":"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"}
@@ -5,13 +5,11 @@
5
5
  * reducer + dispatch, cutting hook count and making state transitions explicit.
6
6
  */
7
7
  import { useCallback, useEffect, useMemo, useReducer, useRef } from "react";
8
- import { CLOUD_HANDOFF_PHASE_EVENT, } from "../events/index.js";
9
8
  import { TOAST_TTL_MS } from "./action-notice.js";
10
9
  import { loadPersistedFirstRunComplete, savePersistedFirstRunComplete, } from "./persistence.js";
11
10
  const INITIAL_LIFECYCLE_STATE = {
12
11
  connected: false,
13
12
  agentStatus: null,
14
- cloudHandoffPhase: null,
15
13
  firstRunComplete: loadPersistedFirstRunComplete(),
16
14
  firstRunUiRevealNonce: 0,
17
15
  firstRunLoading: true,
@@ -41,10 +39,6 @@ function lifecycleReducer(state, action) {
41
39
  return { ...state, connected: action.value };
42
40
  case "SET_AGENT_STATUS":
43
41
  return { ...state, agentStatus: action.value };
44
- case "SET_CLOUD_HANDOFF_PHASE":
45
- if (state.cloudHandoffPhase === action.value)
46
- return state;
47
- return { ...state, cloudHandoffPhase: action.value };
48
42
  case "SET_FIRST_RUN_COMPLETE":
49
43
  return { ...state, firstRunComplete: action.value };
50
44
  case "INCREMENT_FIRST_RUN_REVEAL_NONCE":
@@ -174,23 +168,6 @@ export function useLifecycleState() {
174
168
  agentStatusRef.current = next;
175
169
  dispatch({ type: "SET_AGENT_STATUS", value: next });
176
170
  }, []);
177
- const setCloudHandoffPhase = useCallback((v) => dispatch({ type: "SET_CLOUD_HANDOFF_PHASE", value: v }), []);
178
- // Single subscriber for the shared→dedicated handoff phase. Mirroring it into
179
- // lifecycle state (rather than each surface subscribing to the window event on
180
- // its own) is what lets the chat shell + Settings cloud-agents row read one
181
- // unified "shared-now / dedicated-pending" signal. The CloudHandoffBanner keeps
182
- // its own display-lingering hook; this is the canonical app-state copy.
183
- useEffect(() => {
184
- if (typeof window === "undefined")
185
- return;
186
- const onPhase = (event) => {
187
- const detail = event.detail;
188
- if (detail)
189
- dispatch({ type: "SET_CLOUD_HANDOFF_PHASE", value: detail });
190
- };
191
- window.addEventListener(CLOUD_HANDOFF_PHASE_EVENT, onPhase);
192
- return () => window.removeEventListener(CLOUD_HANDOFF_PHASE_EVENT, onPhase);
193
- }, []);
194
171
  const setFirstRunComplete = useCallback((v) => {
195
172
  savePersistedFirstRunComplete(v);
196
173
  dispatch({ type: "SET_FIRST_RUN_COMPLETE", value: v });
@@ -280,7 +257,6 @@ export function useLifecycleState() {
280
257
  setConnected,
281
258
  setAgentStatus,
282
259
  setAgentStatusIfChanged,
283
- setCloudHandoffPhase,
284
260
  setFirstRunComplete,
285
261
  incrementFirstRunRevealNonce,
286
262
  setFirstRunLoading,
@@ -33,8 +33,8 @@ export declare function usePluginsSkillsState({ setActionNotice, setPendingResta
33
33
  pluginsLoaded: boolean;
34
34
  pluginFilter: "streaming" | "all" | "ai-provider" | "connector" | "feature";
35
35
  setPluginFilter: import("react").Dispatch<import("react").SetStateAction<"streaming" | "all" | "ai-provider" | "connector" | "feature">>;
36
- pluginStatusFilter: "enabled" | "disabled" | "all";
37
- setPluginStatusFilter: import("react").Dispatch<import("react").SetStateAction<"enabled" | "disabled" | "all">>;
36
+ pluginStatusFilter: "disabled" | "all" | "enabled";
37
+ setPluginStatusFilter: import("react").Dispatch<import("react").SetStateAction<"disabled" | "all" | "enabled">>;
38
38
  pluginSearch: string;
39
39
  setPluginSearch: import("react").Dispatch<import("react").SetStateAction<string>>;
40
40
  pluginSettingsOpen: Set<string>;
@@ -27,8 +27,10 @@ interface WalletStateParams {
27
27
  agentName: string | undefined;
28
28
  /** Current character draft name (from characterDraft?.name) */
29
29
  characterName: string | undefined;
30
+ /** Hydrate capability flags from the running backend config. */
31
+ hydrateServerConfig?: boolean;
30
32
  }
31
- export declare function useWalletState({ setActionNotice, promptModal, agentName, characterName, }: WalletStateParams): {
33
+ export declare function useWalletState({ setActionNotice, promptModal, agentName, characterName, hydrateServerConfig, }: WalletStateParams): {
32
34
  state: {
33
35
  browserEnabled: boolean;
34
36
  computerUseEnabled: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"useWalletState.d.ts","sourceRoot":"","sources":["../../../../../src/state/useWalletState.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,sBAAsB,EACtB,eAAe,EACf,kBAAkB,EAClB,yBAAyB,EACzB,WAAW,EACX,kBAAkB,EAClB,gBAAgB,EAChB,YAAY,EACb,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAEL,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACrB,MAAM,QAAQ,CAAC;AAEhB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAUrE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAIrD,UAAU,iBAAiB;IACzB,eAAe,EAAE,CACf,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,EACnC,KAAK,CAAC,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,OAAO,EACd,IAAI,CAAC,EAAE,OAAO,KACX,IAAI,CAAC;IACV,mEAAmE;IACnE,WAAW,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC7D,uDAAuD;IACvD,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,+DAA+D;IAC/D,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;CACnC;AAID,wBAAgB,cAAc,CAAC,EAC7B,eAAe,EACf,WAAW,EACX,SAAS,EACT,aAAa,GACd,EAAE,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BAYwB,OAAO;+BAWH,OAAO;0BApBZ,OAAO;;;;;;;;;;;;;qCA+P/B,yBAAyB;8BAyF1B,eAAe,UAAU,YAAY;wBAArC,eAAe,UAAU,YAAY;;;;;;;;0BA4JrC,OAAO;;EA0GxB"}
1
+ {"version":3,"file":"useWalletState.d.ts","sourceRoot":"","sources":["../../../../../src/state/useWalletState.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,sBAAsB,EACtB,eAAe,EACf,kBAAkB,EAClB,yBAAyB,EACzB,WAAW,EACX,kBAAkB,EAClB,gBAAgB,EAChB,YAAY,EACb,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAEL,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACrB,MAAM,QAAQ,CAAC;AAEhB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAUrE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAIrD,UAAU,iBAAiB;IACzB,eAAe,EAAE,CACf,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,EACnC,KAAK,CAAC,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,OAAO,EACd,IAAI,CAAC,EAAE,OAAO,KACX,IAAI,CAAC;IACV,mEAAmE;IACnE,WAAW,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC7D,uDAAuD;IACvD,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,+DAA+D;IAC/D,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,gEAAgE;IAChE,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAID,wBAAgB,cAAc,CAAC,EAC7B,eAAe,EACf,WAAW,EACX,SAAS,EACT,aAAa,EACb,mBAA0B,GAC3B,EAAE,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BAYwB,OAAO;+BAWH,OAAO;0BApBZ,OAAO;;;;;;;;;;;;;qCAgQ/B,yBAAyB;8BAyF1B,eAAe,UAAU,YAAY;wBAArC,eAAe,UAAU,YAAY;;;;;;;;0BA4JrC,OAAO;;EA0GxB"}
@@ -21,7 +21,7 @@ import { isApiError } from "../api/client-types-core.js";
21
21
  import { confirmDesktopAction } from "../utils/desktop-dialogs.js";
22
22
  import { loadBrowserEnabled, loadComputerUseEnabled, loadWalletEnabled, saveBrowserEnabled, saveComputerUseEnabled, saveWalletEnabled, } from "./persistence.js";
23
23
  // ── Hook ──────────────────────────────────────────────────────────────
24
- export function useWalletState({ setActionNotice, promptModal, agentName, characterName, }) {
24
+ export function useWalletState({ setActionNotice, promptModal, agentName, characterName, hydrateServerConfig = true, }) {
25
25
  // ── Feature toggles ────────────────────────────────────────────────
26
26
  const [walletEnabled, setWalletEnabledRaw] = useState(loadWalletEnabled);
27
27
  const setWalletEnabled = useCallback((v) => {
@@ -51,6 +51,8 @@ export function useWalletState({ setActionNotice, promptModal, agentName, charac
51
51
  // Server config (written by TOGGLE_CAPABILITY agent action) wins on
52
52
  // first load; localStorage remains a fallback for offline / stale.
53
53
  useEffect(() => {
54
+ if (!hydrateServerConfig)
55
+ return;
54
56
  let cancelled = false;
55
57
  void client
56
58
  .getConfig()
@@ -77,7 +79,7 @@ export function useWalletState({ setActionNotice, promptModal, agentName, charac
77
79
  return () => {
78
80
  cancelled = true;
79
81
  };
80
- }, []);
82
+ }, [hydrateServerConfig]);
81
83
  // ── Wallet / Inventory ─────────────────────────────────────────────
82
84
  const [walletAddresses, setWalletAddresses] = useState(null);
83
85
  const [walletConfig, setWalletConfig] = useState(null);
@@ -1 +1 @@
1
- {"version":3,"file":"mock-providers.d.ts","sourceRoot":"","sources":["../../../../../src/storybook/mock-providers.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAAoB,KAAK,UAAU,EAAE,MAAM,SAAS,CAAC;AAM5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGtD,KAAK,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;AACjD,KAAK,eAAe,GAAG,OAAO,CAAC,WAAW,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;AAC5E,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC,gBAAgB,EAAE,aAAa,CAAC,GAAG;IACnE,WAAW,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;CACtC,CAAC;AAwEF;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,EACtC,QAAQ,EACR,UAAiB,GAClB,EAAE;IACD,QAAQ,EAAE,SAAS,CAAC;IACpB,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB,2CASA;AAED,wBAAgB,eAAe,CAAC,EAC9B,QAAQ,EACR,KAAK,GACN,EAAE;IACD,QAAQ,EAAE,SAAS,CAAC;IACpB,KAAK,CAAC,EAAE,cAAc,CAAC;CACxB,2CAaA"}
1
+ {"version":3,"file":"mock-providers.d.ts","sourceRoot":"","sources":["../../../../../src/storybook/mock-providers.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAAoB,KAAK,UAAU,EAAE,MAAM,SAAS,CAAC;AAM5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGtD,KAAK,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;AACjD,KAAK,eAAe,GAAG,OAAO,CAAC,WAAW,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;AAC5E,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC,gBAAgB,EAAE,aAAa,CAAC,GAAG;IACnE,WAAW,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;CACtC,CAAC;AA0EF;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,EACtC,QAAQ,EACR,UAAiB,GAClB,EAAE;IACD,QAAQ,EAAE,SAAS,CAAC;IACpB,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB,2CASA;AAED,wBAAgB,eAAe,CAAC,EAC9B,QAAQ,EACR,KAAK,GACN,EAAE;IACD,QAAQ,EAAE,SAAS,CAAC;IACpB,KAAK,CAAC,EAAE,cAAc,CAAC;CACxB,2CAaA"}
@@ -40,6 +40,8 @@ const baseMockApp = {
40
40
  // `appRuns.filter`) and a function would throw "x is not a function".
41
41
  appRuns: [],
42
42
  plugins: [],
43
+ pluginSaving: new Set(),
44
+ pluginSaveSuccess: new Set(),
43
45
  favoriteApps: [],
44
46
  recentApps: [],
45
47
  pendingRestart: false,
@@ -64,6 +64,13 @@ html.eliza-electrobun-macos-titlebar [data-window-titlebar-banner="true"] {
64
64
  );
65
65
  }
66
66
 
67
+ html.eliza-electrobun-macos-titlebar .eliza-content-layout {
68
+ padding-inline-start: max(
69
+ env(safe-area-inset-left, 0px),
70
+ var(--eliza-macos-frame-left-inset)
71
+ );
72
+ }
73
+
67
74
  html.eliza-electrobun-macos-titlebar a,
68
75
  html.eliza-electrobun-macos-titlebar button,
69
76
  html.eliza-electrobun-macos-titlebar input,
@@ -1 +1 @@
1
- {"version":3,"file":"WidgetHost.d.ts","sourceRoot":"","sources":["../../../../../src/widgets/WidgetHost.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAYH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAchE,OAAO,KAAK,EAAE,uBAAuB,EAAe,UAAU,EAAE,MAAM,SAAS,CAAC;AAGhF,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,UAAU,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AA8ED,MAAM,WAAW,eAAe;IAC9B,wCAAwC;IACxC,IAAI,EAAE,UAAU,CAAC;IACjB,qEAAqE;IACrE,MAAM,CAAC,EAAE,aAAa,EAAE,CAAC;IACzB,6BAA6B;IAC7B,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,kDAAkD;IAClD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC1B,uEAAuE;IACvE,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;OAGG;IACH,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,uBAAuB,KAAK,OAAO,CAAC;CAC5D;AAED,wBAAgB,UAAU,CAAC,EACzB,IAAI,EACJ,MAAM,EACN,WAAW,EACX,SAAS,EACT,MAAgB,EAChB,aAAoB,EACpB,MAAM,GACP,EAAE,eAAe,kDA2LjB"}
1
+ {"version":3,"file":"WidgetHost.d.ts","sourceRoot":"","sources":["../../../../../src/widgets/WidgetHost.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAcH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAchE,OAAO,KAAK,EAAE,uBAAuB,EAAe,UAAU,EAAE,MAAM,SAAS,CAAC;AAGhF,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,UAAU,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAyFD,MAAM,WAAW,eAAe;IAC9B,wCAAwC;IACxC,IAAI,EAAE,UAAU,CAAC;IACjB,qEAAqE;IACrE,MAAM,CAAC,EAAE,aAAa,EAAE,CAAC;IACzB,6BAA6B;IAC7B,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,kDAAkD;IAClD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC1B,uEAAuE;IACvE,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;OAGG;IACH,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,uBAAuB,KAAK,OAAO,CAAC;CAC5D;AAED,wBAAgB,UAAU,CAAC,EACzB,IAAI,EACJ,MAAM,EACN,WAAW,EACX,SAAS,EACT,MAAgB,EAChB,aAAoB,EACpB,MAAM,GACP,EAAE,eAAe,kDAoMjB"}
@@ -12,6 +12,8 @@ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
12
12
  */
13
13
  import { isViewVisible } from "@elizaos/core";
14
14
  import { Component, useMemo, useRef, } from "react";
15
+ import { client } from "../api/index.js";
16
+ import { supportsFullAppShellRoutes } from "../api/app-shell-capabilities.js";
15
17
  import { UiRenderer } from "../components/config-ui/ui-renderer.js";
16
18
  import { useNow } from "../hooks/useNow.js";
17
19
  import { useAppSelectorShallow } from "../state/index.js";
@@ -62,11 +64,23 @@ const WIDGET_SLOTS = new Set([
62
64
  "nav-page",
63
65
  "home",
64
66
  ]);
67
+ const FULL_APP_SHELL_WIDGET_PLUGIN_IDS = new Set([
68
+ "agent-orchestrator",
69
+ "calendar",
70
+ "finances",
71
+ "goals",
72
+ "health",
73
+ "inbox",
74
+ "needs-attention",
75
+ "relationships",
76
+ "todo",
77
+ ]);
65
78
  function isWidgetSlot(value) {
66
79
  return WIDGET_SLOTS.has(value);
67
80
  }
68
81
  export function WidgetHost({ slot, events, clearEvents, className, layout = "stack", hideWhenEmpty = true, filter, }) {
69
- const plugins = useAppSelectorShallow((s) => s.plugins);
82
+ const plugins = useAppSelectorShallow((s) => Array.isArray(s.plugins) ? s.plugins : []);
83
+ const currentBaseUrl = useAppSelectorShallow(() => client.getBaseUrl());
70
84
  const enabledKinds = useEnabledViewKinds();
71
85
  // Live importance inputs for the home ranker. Subscribed unconditionally
72
86
  // (hooks can't be conditional) but only consumed for the `home` slot below.
@@ -88,9 +102,13 @@ export function WidgetHost({ slot, events, clearEvents, className, layout = "sta
88
102
  }, [plugins]);
89
103
  const resolved = useMemo(() => {
90
104
  const all = resolveWidgetsForSlot(slot, plugins ?? [], serverDeclarations);
91
- const gated = all.filter((entry) => isViewVisible(entry.declaration, enabledKinds));
105
+ const fullAppShellRoutesEnabled = supportsFullAppShellRoutes(currentBaseUrl);
106
+ const gated = all.filter((entry) => isViewVisible(entry.declaration, enabledKinds) &&
107
+ (fullAppShellRoutesEnabled ||
108
+ (!FULL_APP_SHELL_WIDGET_PLUGIN_IDS.has(entry.declaration.pluginId) &&
109
+ entry.defaultWidgetSink !== "activity")));
92
110
  return filter ? gated.filter((entry) => filter(entry.declaration)) : gated;
93
- }, [slot, plugins, serverDeclarations, filter, enabledKinds]);
111
+ }, [slot, plugins, serverDeclarations, filter, enabledKinds, currentBaseUrl]);
94
112
  // Notification → signal inputs, memoized so the `now` tick (which re-runs the
95
113
  // component) doesn't rebuild this array each minute — it changes only when the
96
114
  // inbox itself changes.
@@ -1,21 +0,0 @@
1
- /**
2
- * Documents (Knowledge) cloud route entry.
3
- *
4
- * Lifted from `@elizaos/cloud-frontend/src/dashboard/documents/Page.tsx`. Gates
5
- * on the Steward session, loads the caller's characters with {@link useMyAgents}
6
- * (the per-character scope selector), and renders {@link DocumentsPageClient}.
7
- * Loading uses the cloud-ui dashboard placeholder; the page title is set via
8
- * {@link useDocumentTitle} (no Helmet).
9
- *
10
- * The same {@link DocumentsSurface} is exported for both the registered
11
- * standalone route and the Wave-3 settings-section wrapper (see `index.ts`).
12
- */
13
- /**
14
- * The Documents/Knowledge surface. Embeddable: used directly by the Wave-3
15
- * settings section and wrapped by {@link DocumentsRoute} for the standalone
16
- * route.
17
- */
18
- export declare function DocumentsSurface(): import("react/jsx-runtime").JSX.Element;
19
- /** Default export consumed by the cloud-route registry. */
20
- export default function DocumentsRoute(): import("react/jsx-runtime").JSX.Element;
21
- //# sourceMappingURL=DocumentsRoute.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DocumentsRoute.d.ts","sourceRoot":"","sources":["../../../../../../src/cloud/documents/DocumentsRoute.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAYH;;;;GAIG;AACH,wBAAgB,gBAAgB,4CAyB/B;AAED,2DAA2D;AAC3D,MAAM,CAAC,OAAO,UAAU,cAAc,4CAErC"}
@@ -1,45 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- /**
3
- * Documents (Knowledge) cloud route entry.
4
- *
5
- * Lifted from `@elizaos/cloud-frontend/src/dashboard/documents/Page.tsx`. Gates
6
- * on the Steward session, loads the caller's characters with {@link useMyAgents}
7
- * (the per-character scope selector), and renders {@link DocumentsPageClient}.
8
- * Loading uses the cloud-ui dashboard placeholder; the page title is set via
9
- * {@link useDocumentTitle} (no Helmet).
10
- *
11
- * The same {@link DocumentsSurface} is exported for both the registered
12
- * standalone route and the Wave-3 settings-section wrapper (see `index.ts`).
13
- */
14
- import { DashboardLoadingState } from "../../cloud-ui/components/dashboard/route-placeholders.js";
15
- import { useDocumentTitle } from "../lib/use-document-title.js";
16
- import { useRequireAuth } from "../lib/use-session-auth.js";
17
- import { useCloudT } from "../shell/CloudI18nProvider.js";
18
- import { DocumentsPageClient, } from "./components/documents-page-client.js";
19
- import { useMyAgents } from "./lib/agents.js";
20
- /**
21
- * The Documents/Knowledge surface. Embeddable: used directly by the Wave-3
22
- * settings section and wrapped by {@link DocumentsRoute} for the standalone
23
- * route.
24
- */
25
- export function DocumentsSurface() {
26
- const t = useCloudT();
27
- const { ready, authenticated } = useRequireAuth();
28
- const agentsQuery = useMyAgents();
29
- useDocumentTitle(t("cloud.documents.metaTitle", { defaultValue: "Knowledge" }));
30
- const loadingLabel = t("cloud.documents.loading", {
31
- defaultValue: "Loading Knowledge",
32
- });
33
- if (!ready || !authenticated) {
34
- return _jsx(DashboardLoadingState, { label: loadingLabel });
35
- }
36
- if (agentsQuery.isLoading) {
37
- return _jsx(DashboardLoadingState, { label: loadingLabel });
38
- }
39
- const characters = agentsQuery.data?.map((a) => ({ id: a.id, name: a.name })) ?? [];
40
- return _jsx(DocumentsPageClient, { initialCharacters: characters });
41
- }
42
- /** Default export consumed by the cloud-route registry. */
43
- export default function DocumentsRoute() {
44
- return _jsx(DocumentsSurface, {});
45
- }
@@ -1,15 +0,0 @@
1
- /**
2
- * Settings-section / view wrapper for the Documents (Knowledge) surface
3
- * (Wave-3 mount point).
4
- *
5
- * Documents is an agent-scoped view (PLAN §"`dashboard/documents` → AGENT-VIEW
6
- * (Knowledge)"); the per-character selector is the scope. The settings-section
7
- * registry renders a no-prop `Component`, so this is the zero-prop adapter
8
- * Wave 3 hands to `registerSettingsSection({ id: "documents", Component:
9
- * DocumentsSection, ... })` (or mounts as a standalone view).
10
- *
11
- * It reuses the exact same {@link DocumentsSurface} as the standalone route, so
12
- * the section and any direct mount stay identical.
13
- */
14
- export declare function DocumentsSection(): import("react/jsx-runtime").JSX.Element;
15
- //# sourceMappingURL=DocumentsSection.d.ts.map