@elizaos/ui 2.0.3-beta.5 → 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 (232) 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/config/boot-config-store.js +1 -1
  118. package/first-run/CompactOnboarding.d.ts.map +1 -1
  119. package/first-run/CompactOnboarding.js +4 -2
  120. package/first-run/use-first-run-controller.d.ts +1 -0
  121. package/first-run/use-first-run-controller.d.ts.map +1 -1
  122. package/first-run/use-first-run-controller.js +133 -56
  123. package/hooks/useAvailableViews.d.ts +11 -2
  124. package/hooks/useAvailableViews.d.ts.map +1 -1
  125. package/hooks/useAvailableViews.js +49 -7
  126. package/hooks/useHorizontalPager.d.ts.map +1 -1
  127. package/hooks/useHorizontalPager.js +11 -4
  128. package/hooks/useViewCatalog.d.ts.map +1 -1
  129. package/hooks/useViewCatalog.js +5 -2
  130. package/hooks/view-catalog.d.ts +2 -0
  131. package/hooks/view-catalog.d.ts.map +1 -1
  132. package/hooks/view-catalog.js +1 -0
  133. package/index.d.ts +0 -1
  134. package/index.d.ts.map +1 -1
  135. package/index.js +0 -1
  136. package/layouts/content-layout/content-layout.d.ts.map +1 -1
  137. package/layouts/content-layout/content-layout.js +2 -1
  138. package/package.json +10 -10
  139. package/platform/browser-launch.d.ts.map +1 -1
  140. package/platform/browser-launch.js +2 -0
  141. package/state/AppContext.js +6 -4
  142. package/state/startup-coordinator.d.ts +2 -0
  143. package/state/startup-coordinator.d.ts.map +1 -1
  144. package/state/startup-coordinator.js +8 -0
  145. package/state/startup-first-run-options.d.ts +4 -0
  146. package/state/startup-first-run-options.d.ts.map +1 -0
  147. package/state/startup-first-run-options.js +18 -0
  148. package/state/startup-phase-hydrate.d.ts.map +1 -1
  149. package/state/startup-phase-hydrate.js +25 -14
  150. package/state/startup-phase-poll.d.ts.map +1 -1
  151. package/state/startup-phase-poll.js +60 -0
  152. package/state/startup-phase-restore.d.ts.map +1 -1
  153. package/state/startup-phase-restore.js +6 -19
  154. package/state/types.d.ts +0 -17
  155. package/state/types.d.ts.map +1 -1
  156. package/state/types.js +0 -13
  157. package/state/use-startup-shell-controller.d.ts.map +1 -1
  158. package/state/use-startup-shell-controller.js +3 -2
  159. package/state/useAppShellState.d.ts +5 -1
  160. package/state/useAppShellState.d.ts.map +1 -1
  161. package/state/useAppShellState.js +11 -3
  162. package/state/useChatCallbacks.d.ts +1 -0
  163. package/state/useChatCallbacks.d.ts.map +1 -1
  164. package/state/useChatCallbacks.js +53 -8
  165. package/state/useChatLifecycle.d.ts +1 -0
  166. package/state/useChatLifecycle.d.ts.map +1 -1
  167. package/state/useChatLifecycle.js +2 -2
  168. package/state/useChatSend.d.ts.map +1 -1
  169. package/state/useChatSend.js +72 -8
  170. package/state/useCloudState.d.ts.map +1 -1
  171. package/state/useCloudState.js +29 -1
  172. package/state/useDataLoaders.d.ts.map +1 -1
  173. package/state/useDataLoaders.js +9 -0
  174. package/state/useFirstRunCallbacks.d.ts.map +1 -1
  175. package/state/useFirstRunCallbacks.js +5 -0
  176. package/state/useLifecycleState.d.ts +0 -7
  177. package/state/useLifecycleState.d.ts.map +1 -1
  178. package/state/useLifecycleState.js +0 -24
  179. package/state/usePluginsSkillsState.d.ts +2 -2
  180. package/state/useWalletState.d.ts +3 -1
  181. package/state/useWalletState.d.ts.map +1 -1
  182. package/state/useWalletState.js +4 -2
  183. package/storybook/mock-providers.d.ts.map +1 -1
  184. package/storybook/mock-providers.js +2 -0
  185. package/styles/electrobun-mac-window-drag.css +7 -0
  186. package/widgets/WidgetHost.d.ts.map +1 -1
  187. package/widgets/WidgetHost.js +21 -3
  188. package/cloud/documents/DocumentsRoute.d.ts +0 -21
  189. package/cloud/documents/DocumentsRoute.d.ts.map +0 -1
  190. package/cloud/documents/DocumentsRoute.js +0 -45
  191. package/cloud/documents/DocumentsSection.d.ts +0 -15
  192. package/cloud/documents/DocumentsSection.d.ts.map +0 -1
  193. package/cloud/documents/DocumentsSection.js +0 -18
  194. package/cloud/documents/components/document-list.d.ts +0 -19
  195. package/cloud/documents/components/document-list.d.ts.map +0 -1
  196. package/cloud/documents/components/document-list.js +0 -75
  197. package/cloud/documents/components/document-query.d.ts +0 -15
  198. package/cloud/documents/components/document-query.d.ts.map +0 -1
  199. package/cloud/documents/components/document-query.js +0 -92
  200. package/cloud/documents/components/document-upload.d.ts +0 -16
  201. package/cloud/documents/components/document-upload.d.ts.map +0 -1
  202. package/cloud/documents/components/document-upload.js +0 -180
  203. package/cloud/documents/components/documents-page-client.d.ts +0 -20
  204. package/cloud/documents/components/documents-page-client.d.ts.map +0 -1
  205. package/cloud/documents/components/documents-page-client.js +0 -80
  206. package/cloud/documents/index.d.ts +0 -37
  207. package/cloud/documents/index.d.ts.map +0 -1
  208. package/cloud/documents/index.js +0 -45
  209. package/cloud/documents/lib/agents.d.ts +0 -23
  210. package/cloud/documents/lib/agents.d.ts.map +0 -1
  211. package/cloud/documents/lib/agents.js +0 -26
  212. package/cloud/documents/lib/documents.d.ts +0 -54
  213. package/cloud/documents/lib/documents.d.ts.map +0 -1
  214. package/cloud/documents/lib/documents.js +0 -118
  215. package/cloud/instances/AgentChatPage.d.ts +0 -13
  216. package/cloud/instances/AgentChatPage.d.ts.map +0 -1
  217. package/cloud/instances/AgentChatPage.js +0 -217
  218. package/cloud-ui/components/image-gen/empty-state.d.ts +0 -3
  219. package/cloud-ui/components/image-gen/empty-state.d.ts.map +0 -1
  220. package/cloud-ui/components/image-gen/empty-state.js +0 -12
  221. package/cloud-ui/components/image-gen/enhanced-loading.d.ts +0 -14
  222. package/cloud-ui/components/image-gen/enhanced-loading.d.ts.map +0 -1
  223. package/cloud-ui/components/image-gen/enhanced-loading.js +0 -23
  224. package/cloud-ui/components/image-gen/index.d.ts +0 -5
  225. package/cloud-ui/components/image-gen/index.d.ts.map +0 -1
  226. package/cloud-ui/components/image-gen/index.js +0 -4
  227. package/cloud-ui/components/image-gen/loading-state.d.ts +0 -2
  228. package/cloud-ui/components/image-gen/loading-state.d.ts.map +0 -1
  229. package/cloud-ui/components/image-gen/loading-state.js +0 -11
  230. package/cloud-ui/components/image-gen/prompt-input.d.ts +0 -32
  231. package/cloud-ui/components/image-gen/prompt-input.d.ts.map +0 -1
  232. package/cloud-ui/components/image-gen/prompt-input.js +0 -24
@@ -1 +1 @@
1
- {"version":3,"file":"drawer.d.ts","sourceRoot":"","sources":["../../../../../../src/cloud-ui/components/drawer.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AACpC,OAAO,EAAE,MAAM,IAAI,eAAe,EAAE,MAAM,MAAM,CAAC;AAIjD,iBAAS,MAAM,CAAC,EACd,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,IAAI,CAAC,2CAEnD;AAED,iBAAS,aAAa,CAAC,EACrB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,OAAO,CAAC,2CAEtD;AAED,iBAAS,YAAY,CAAC,EACpB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,MAAM,CAAC,2CAErD;AAED,iBAAS,WAAW,CAAC,EACnB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,KAAK,CAAC,2CAEpD;AAED,iBAAS,aAAa,CAAC,EACrB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,OAAO,CAAC,2CAWtD;AAED,iBAAS,aAAa,CAAC,EACrB,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,OAAO,CAAC,2CAqBtD;AAED,iBAAS,YAAY,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,2CAWzE;AAED,iBAAS,YAAY,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,2CAQzE;AAED,iBAAS,WAAW,CAAC,EACnB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,KAAK,CAAC,2CAQpD;AAED,iBAAS,iBAAiB,CAAC,EACzB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,WAAW,CAAC,2CAQ1D;AAED,OAAO,EACL,MAAM,EACN,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,WAAW,EACX,aAAa,GACd,CAAC"}
1
+ {"version":3,"file":"drawer.d.ts","sourceRoot":"","sources":["../../../../../../src/cloud-ui/components/drawer.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AACpC,OAAO,EAAE,MAAM,IAAI,eAAe,EAAE,MAAM,MAAM,CAAC;AAIjD,iBAAS,MAAM,CAAC,EACd,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,IAAI,CAAC,2CAEnD;AAED,iBAAS,aAAa,CAAC,EACrB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,OAAO,CAAC,2CAEtD;AAED,iBAAS,YAAY,CAAC,EACpB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,MAAM,CAAC,2CAErD;AAED,iBAAS,WAAW,CAAC,EACnB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,KAAK,CAAC,2CAEpD;AAED,iBAAS,aAAa,CAAC,EACrB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,OAAO,CAAC,2CAWtD;AAED,iBAAS,aAAa,CAAC,EACrB,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,OAAO,CAAC,2CAgCtD;AAED,iBAAS,YAAY,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,2CAWzE;AAED,iBAAS,YAAY,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,2CAQzE;AAED,iBAAS,WAAW,CAAC,EACnB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,KAAK,CAAC,2CAQpD;AAED,iBAAS,iBAAiB,CAAC,EACzB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,WAAW,CAAC,2CAQ1D;AAED,OAAO,EACL,MAAM,EACN,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,WAAW,EACX,aAAa,GACd,CAAC"}
@@ -22,7 +22,7 @@ function DrawerOverlay({ className, ...props }) {
22
22
  return (_jsx(DrawerPrimitive.Overlay, { "data-slot": "drawer-overlay", className: cn("data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50", className), ...props }));
23
23
  }
24
24
  function DrawerContent({ className, children, ...props }) {
25
- return (_jsxs(DrawerPortal, { "data-slot": "drawer-portal", children: [_jsx(DrawerOverlay, {}), _jsxs(DrawerPrimitive.Content, { "data-slot": "drawer-content", className: cn("group/drawer-content fixed z-50 flex h-auto flex-col bg-neutral-950/95 text-white", "data-[vaul-drawer-direction=top]:inset-x-0 data-[vaul-drawer-direction=top]:top-0 data-[vaul-drawer-direction=top]:mb-24 data-[vaul-drawer-direction=top]:max-h-[80vh] data-[vaul-drawer-direction=top]:border-b data-[vaul-drawer-direction=top]:border-white/10", "data-[vaul-drawer-direction=bottom]:inset-x-0 data-[vaul-drawer-direction=bottom]:bottom-0 data-[vaul-drawer-direction=bottom]:mt-24 data-[vaul-drawer-direction=bottom]:max-h-[80vh] data-[vaul-drawer-direction=bottom]:border-t data-[vaul-drawer-direction=bottom]:border-white/10", "data-[vaul-drawer-direction=right]:inset-y-0 data-[vaul-drawer-direction=right]:right-0 data-[vaul-drawer-direction=right]:w-3/4 data-[vaul-drawer-direction=right]:border-l data-[vaul-drawer-direction=right]:border-white/10 data-[vaul-drawer-direction=right]:sm:max-w-sm", "data-[vaul-drawer-direction=left]:inset-y-0 data-[vaul-drawer-direction=left]:left-0 data-[vaul-drawer-direction=left]:w-3/4 data-[vaul-drawer-direction=left]:border-r data-[vaul-drawer-direction=left]:border-white/10 data-[vaul-drawer-direction=left]:sm:max-w-sm", className), ...props, children: [_jsx("div", { className: "mx-auto mt-4 hidden h-1.5 w-[100px] shrink-0 bg-white/15 group-data-[vaul-drawer-direction=bottom]/drawer-content:block" }), children] })] }));
25
+ return (_jsxs(DrawerPortal, { "data-slot": "drawer-portal", children: [_jsx(DrawerOverlay, {}), _jsxs(DrawerPrimitive.Content, { "data-slot": "drawer-content", className: cn("group/drawer-content fixed z-50 flex h-auto flex-col bg-neutral-950/95 text-white", "data-[vaul-drawer-direction=top]:inset-x-0 data-[vaul-drawer-direction=top]:top-0 data-[vaul-drawer-direction=top]:mb-24 data-[vaul-drawer-direction=top]:max-h-[80vh] data-[vaul-drawer-direction=top]:border-b data-[vaul-drawer-direction=top]:border-white/10", "data-[vaul-drawer-direction=bottom]:inset-x-0 data-[vaul-drawer-direction=bottom]:bottom-0 data-[vaul-drawer-direction=bottom]:mt-24 data-[vaul-drawer-direction=bottom]:max-h-[80vh] data-[vaul-drawer-direction=bottom]:border-t data-[vaul-drawer-direction=bottom]:border-white/10", "data-[vaul-drawer-direction=right]:inset-y-0 data-[vaul-drawer-direction=right]:right-0 data-[vaul-drawer-direction=right]:w-3/4 data-[vaul-drawer-direction=right]:border-l data-[vaul-drawer-direction=right]:border-white/10 data-[vaul-drawer-direction=right]:sm:max-w-sm", "data-[vaul-drawer-direction=left]:inset-y-0 data-[vaul-drawer-direction=left]:left-0 data-[vaul-drawer-direction=left]:w-3/4 data-[vaul-drawer-direction=left]:border-r data-[vaul-drawer-direction=left]:border-white/10 data-[vaul-drawer-direction=left]:sm:max-w-sm", className), ...props, children: [_jsx(DrawerClose, { asChild: true, children: _jsx("button", { type: "button", "aria-label": "Close drawer", className: "group mx-auto mb-2 mt-2 hidden h-8 w-32 shrink-0 cursor-pointer items-center justify-center rounded-full transition-colors hover:bg-white/10 group-data-[vaul-drawer-direction=bottom]/drawer-content:flex", children: _jsx("span", { className: "h-1.5 w-[100px] rounded-full bg-white/15 transition-all group-hover:w-[112px] group-hover:bg-white/35", "aria-hidden": true }) }) }), children] })] }));
26
26
  }
27
27
  function DrawerHeader({ className, ...props }) {
28
28
  return (_jsx("div", { "data-slot": "drawer-header", className: cn("flex flex-col gap-0.5 p-4 group-data-[vaul-drawer-direction=bottom]/drawer-content:text-center group-data-[vaul-drawer-direction=top]/drawer-content:text-center md:gap-1.5 md:text-left", className), ...props }));
@@ -14,7 +14,6 @@ export { type ApiKeyDisplay, type ApiKeyStatus, ApiKeysSummary, type ApiKeysSumm
14
14
  export type { ApiEndpointCardEndpoint, ApiEndpointCardPricing, ApiParameterSelectOption, ApiParameterSelectProps, DocsFrontmatter, DocsLayoutProps, EndpointCardProps, MdxModule, NavItem, OpenApiViewerProps, } from "./components/docs/index.js";
15
15
  export { ApiParameterSelect, DocsLayout, EndpointCard, LlmsTxtBadge, OpenApiViewer, } from "./components/docs/index.js";
16
16
  export * from "./components/icons.js";
17
- export * from "./components/image-gen/index.js";
18
17
  export * from "./components/layout/index.js";
19
18
  export * from "./components/log-viewer.js";
20
19
  export * from "./components/monetization/index.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/cloud-ui/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,IAAI,EACJ,WAAW,EACX,QAAQ,EACR,WAAW,GACZ,MAAM,uBAAuB,CAAC;AAC/B,cAAc,yBAAyB,CAAC;AACxC,YAAY,EACV,gBAAgB,EAChB,0BAA0B,EAC1B,wBAAwB,GACzB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,WAAW,EACX,mBAAmB,EACnB,sBAAsB,EACtB,iBAAiB,GAClB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EACxB,UAAU,EACV,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,gBAAgB,EAChB,KAAK,qBAAqB,EAC1B,YAAY,EACZ,KAAK,iBAAiB,GACvB,MAAM,wBAAwB,CAAC;AAChC,cAAc,qCAAqC,CAAC;AACpD,cAAc,oCAAoC,CAAC;AACnD,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,8BAA8B,CAAC;AAC7C,OAAO,EACL,cAAc,EACd,KAAK,mBAAmB,EACxB,eAAe,EACf,YAAY,EACZ,oBAAoB,EACpB,qBAAqB,EACrB,kBAAkB,EAClB,oBAAoB,EACpB,KAAK,yBAAyB,EAC9B,4BAA4B,EAC5B,oBAAoB,EACpB,KAAK,8BAA8B,EACnC,sBAAsB,GACvB,MAAM,mDAAmD,CAAC;AAC3D,cAAc,wBAAwB,CAAC;AACvC,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,cAAc,EACd,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,YAAY,EACZ,KAAK,iBAAiB,EACtB,KAAK,YAAY,EACjB,KAAK,uBAAuB,EAC5B,YAAY,EACZ,KAAK,iBAAiB,GACvB,MAAM,wBAAwB,CAAC;AAChC,YAAY,EACV,uBAAuB,EACvB,sBAAsB,EACtB,wBAAwB,EACxB,uBAAuB,EACvB,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,SAAS,EACT,OAAO,EACP,kBAAkB,GACnB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,kBAAkB,EAClB,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,aAAa,GACd,MAAM,mBAAmB,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,2CAA2C,CAAC;AAC1D,cAAc,+CAA+C,CAAC;AAC9D,cAAc,oBAAoB,CAAC;AACnC,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACnD,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/cloud-ui/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,IAAI,EACJ,WAAW,EACX,QAAQ,EACR,WAAW,GACZ,MAAM,uBAAuB,CAAC;AAC/B,cAAc,yBAAyB,CAAC;AACxC,YAAY,EACV,gBAAgB,EAChB,0BAA0B,EAC1B,wBAAwB,GACzB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,WAAW,EACX,mBAAmB,EACnB,sBAAsB,EACtB,iBAAiB,GAClB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EACxB,UAAU,EACV,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,gBAAgB,EAChB,KAAK,qBAAqB,EAC1B,YAAY,EACZ,KAAK,iBAAiB,GACvB,MAAM,wBAAwB,CAAC;AAChC,cAAc,qCAAqC,CAAC;AACpD,cAAc,oCAAoC,CAAC;AACnD,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,8BAA8B,CAAC;AAC7C,OAAO,EACL,cAAc,EACd,KAAK,mBAAmB,EACxB,eAAe,EACf,YAAY,EACZ,oBAAoB,EACpB,qBAAqB,EACrB,kBAAkB,EAClB,oBAAoB,EACpB,KAAK,yBAAyB,EAC9B,4BAA4B,EAC5B,oBAAoB,EACpB,KAAK,8BAA8B,EACnC,sBAAsB,GACvB,MAAM,mDAAmD,CAAC;AAC3D,cAAc,wBAAwB,CAAC;AACvC,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,cAAc,EACd,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,YAAY,EACZ,KAAK,iBAAiB,EACtB,KAAK,YAAY,EACjB,KAAK,uBAAuB,EAC5B,YAAY,EACZ,KAAK,iBAAiB,GACvB,MAAM,wBAAwB,CAAC;AAChC,YAAY,EACV,uBAAuB,EACvB,sBAAsB,EACtB,wBAAwB,EACxB,uBAAuB,EACvB,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,SAAS,EACT,OAAO,EACP,kBAAkB,GACnB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,kBAAkB,EAClB,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,aAAa,GACd,MAAM,mBAAmB,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,2CAA2C,CAAC;AAC1D,cAAc,+CAA+C,CAAC;AAC9D,cAAc,oBAAoB,CAAC;AACnC,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACnD,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oBAAoB,CAAC"}
package/cloud-ui/index.js CHANGED
@@ -12,7 +12,6 @@ export * from "./components/data-list/index.js";
12
12
  export { ApiKeysSummary, ApiKeysTable, AppsListView, } from "./components/data-list/index.js";
13
13
  export { ApiParameterSelect, DocsLayout, EndpointCard, LlmsTxtBadge, OpenApiViewer, } from "./components/docs/index.js";
14
14
  export * from "./components/icons.js";
15
- export * from "./components/image-gen/index.js";
16
15
  export * from "./components/layout/index.js";
17
16
  export * from "./components/log-viewer.js";
18
17
  export * from "./components/monetization/index.js";
@@ -1 +1 @@
1
- {"version":3,"file":"app-identity.helpers.d.ts","sourceRoot":"","sources":["../../../../../../src/components/apps/app-identity.helpers.ts"],"names":[],"mappings":"AACA,OAAO,EAKL,KAAK,UAAU,EAIhB,MAAM,cAAc,CAAC;AAEtB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAExD,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAC9B,MAAM,GAAG,IAAI,CAWf;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAW5D;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,iBAAiB,GAAG,UAAU,CAiBrE"}
1
+ {"version":3,"file":"app-identity.helpers.d.ts","sourceRoot":"","sources":["../../../../../../src/components/apps/app-identity.helpers.ts"],"names":[],"mappings":"AACA,OAAO,EAKL,KAAK,UAAU,EAIhB,MAAM,cAAc,CAAC;AAOtB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAExD,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAC9B,MAAM,GAAG,IAAI,CAWf;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAiB5D;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,iBAAiB,GAAG,UAAU,CAiBrE"}
@@ -1,5 +1,7 @@
1
1
  import { getAppHeroThemeKey } from "@elizaos/shared";
2
2
  import { Bot, Briefcase, Gamepad2, Globe2, Sparkles, Wallet, Wrench, } from "lucide-react";
3
+ import { client } from "../../api/index.js";
4
+ import { isLimitedCloudAgentApiResourceUrl, supportsFullAppShellRoutes, } from "../../api/app-shell-capabilities.js";
3
5
  import { resolveApiUrl, resolveAppAssetUrl } from "../../utils/asset-url.js";
4
6
  export function iconImageSource(icon) {
5
7
  const value = icon?.trim();
@@ -20,10 +22,16 @@ export function iconImageSource(icon) {
20
22
  export function resolveRuntimeImageUrl(value) {
21
23
  // Absolute URLs, data/blob URIs, and custom schemes are already runtime-safe.
22
24
  if (/^(https?:|data:|blob:|file:|capacitor:|electrobun:|app:)/i.test(value)) {
25
+ if (isLimitedCloudAgentApiResourceUrl(value)) {
26
+ return "";
27
+ }
23
28
  return value;
24
29
  }
25
30
  // API-served hero endpoints must hit the API base, not the asset CDN.
26
31
  if (value.startsWith("/api/") || value.startsWith("api/")) {
32
+ if (!supportsFullAppShellRoutes(client.getBaseUrl())) {
33
+ return "";
34
+ }
27
35
  return resolveApiUrl(value.startsWith("/") ? value : `/${value}`);
28
36
  }
29
37
  // Static asset under apps/app/public/ — resolves to CDN base in releases.
@@ -1 +1 @@
1
- {"version":3,"file":"inbox-unread.d.ts","sourceRoot":"","sources":["../../../../../../../src/components/chat/widgets/inbox-unread.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AA2E1D,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,kDAqE7D;AAED,eAAO,MAAM,iBAAiB;;;;;;CAMpB,CAAC"}
1
+ {"version":3,"file":"inbox-unread.d.ts","sourceRoot":"","sources":["../../../../../../../src/components/chat/widgets/inbox-unread.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AA2E1D,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,kDA2E7D;AAED,eAAO,MAAM,iBAAiB;;;;;;CAMpB,CAAC"}
@@ -2,6 +2,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { Inbox } from "lucide-react";
3
3
  import { useCallback, useEffect, useMemo, useState } from "react";
4
4
  import { client } from "../../../api/index.js";
5
+ import { supportsFullAppShellRoutes } from "../../../api/app-shell-capabilities.js";
5
6
  import { useIntervalWhenDocumentVisible } from "../../../hooks/index.js";
6
7
  import { usePublishHomeAttention } from "../../../widgets/home-attention-store.js";
7
8
  import { HOME_SIGNAL_WEIGHTS } from "../../../widgets/home-priority.js";
@@ -69,8 +70,14 @@ export function InboxUnreadWidget(_props) {
69
70
  const [loaded, setLoaded] = useState(false);
70
71
  const nav = useWidgetNavigation();
71
72
  const loadInbox = useCallback(async () => {
73
+ const baseUrl = client.getBaseUrl();
74
+ if (!supportsFullAppShellRoutes(baseUrl)) {
75
+ setLoaded(true);
76
+ setUnread([]);
77
+ return;
78
+ }
72
79
  try {
73
- const response = await fetch(`${client.getBaseUrl()}/api/lifeops/inbox`);
80
+ const response = await fetch(`${baseUrl}/api/lifeops/inbox`);
74
81
  if (!response.ok)
75
82
  return;
76
83
  const next = parseUnread(await response.json());
@@ -1 +1 @@
1
- {"version":3,"file":"needs-attention.d.ts","sourceRoot":"","sources":["../../../../../../../src/components/chat/widgets/needs-attention.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAQvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAgB1D,qFAAqF;AACrF,eAAO,MAAM,oBAAoB,QAAc,CAAC;AAkBhD;;;;GAIG;AACH,wBAAgB,YAAY,IAAI;IAC9B,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,MAAM,EAAE,OAAO,CAAC;CACjB,CAqBA;AAgBD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,kDA4ChE;AAED,eAAO,MAAM,2BAA2B;;;;;;CAM9B,CAAC"}
1
+ {"version":3,"file":"needs-attention.d.ts","sourceRoot":"","sources":["../../../../../../../src/components/chat/widgets/needs-attention.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AASvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAgB1D,qFAAqF;AACrF,eAAO,MAAM,oBAAoB,QAAc,CAAC;AAkBhD;;;;GAIG;AACH,wBAAgB,YAAY,IAAI;IAC9B,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,MAAM,EAAE,OAAO,CAAC;CACjB,CAuCA;AAgBD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,kDA4ChE;AAED,eAAO,MAAM,2BAA2B;;;;;;CAM9B,CAAC"}
@@ -1,7 +1,8 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { CircleHelp } from "lucide-react";
3
- import { useCallback, useEffect, useMemo, useState } from "react";
3
+ import { useCallback, useEffect, useMemo, useRef, useState } from "react";
4
4
  import { client } from "../../../api/index.js";
5
+ import { supportsFullAppShellRoutes } from "../../../api/app-shell-capabilities.js";
5
6
  import { dispatchChatPrefill } from "../../../events/index.js";
6
7
  import { useIntervalWhenDocumentVisible } from "../../../hooks/index.js";
7
8
  import { usePublishHomeAttention } from "../../../widgets/home-attention-store.js";
@@ -40,18 +41,33 @@ function pendingEqual(a, b) {
40
41
  export function useApprovals() {
41
42
  const [pending, setPending] = useState([]);
42
43
  const [loaded, setLoaded] = useState(false);
44
+ const mountedRef = useRef(true);
43
45
  const load = useCallback(async () => {
46
+ if (!supportsFullAppShellRoutes(client.getBaseUrl())) {
47
+ if (mountedRef.current) {
48
+ setPending([]);
49
+ setLoaded(true);
50
+ }
51
+ return;
52
+ }
44
53
  try {
45
54
  const { pending: next } = await client.listPendingActions();
55
+ if (!mountedRef.current)
56
+ return;
46
57
  setPending((prev) => (pendingEqual(prev, next) ? prev : next));
47
58
  }
48
59
  catch {
49
60
  // Best-effort: keep the last good data on a transient fetch failure.
50
61
  }
51
62
  finally {
52
- setLoaded(true);
63
+ if (mountedRef.current) {
64
+ setLoaded(true);
65
+ }
53
66
  }
54
67
  }, []);
68
+ useEffect(() => () => {
69
+ mountedRef.current = false;
70
+ }, []);
55
71
  useEffect(() => {
56
72
  void load();
57
73
  }, [load]);
@@ -1 +1 @@
1
- {"version":3,"file":"relationships-attention.d.ts","sourceRoot":"","sources":["../../../../../../../src/components/chat/widgets/relationships-attention.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAmG1D;;;;;;;GAOG;AACH,wBAAgB,4BAA4B,CAAC,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC,WAAW,CAAC,kDA6E1E;AAED,eAAO,MAAM,yBAAyB;;;;;;CAM5B,CAAC"}
1
+ {"version":3,"file":"relationships-attention.d.ts","sourceRoot":"","sources":["../../../../../../../src/components/chat/widgets/relationships-attention.tsx"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAmG1D;;;;;;;GAOG;AACH,wBAAgB,4BAA4B,CAAC,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC,WAAW,CAAC,kDAiF1E;AAED,eAAO,MAAM,yBAAyB;;;;;;CAM5B,CAAC"}
@@ -2,6 +2,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { Users } from "lucide-react";
3
3
  import { useCallback, useEffect, useMemo, useState } from "react";
4
4
  import { client } from "../../../api/index.js";
5
+ import { supportsFullAppShellRoutes } from "../../../api/app-shell-capabilities.js";
5
6
  import { useIntervalWhenDocumentVisible } from "../../../hooks/index.js";
6
7
  import { usePublishHomeAttention } from "../../../widgets/home-attention-store.js";
7
8
  import { HOME_SIGNAL_WEIGHTS } from "../../../widgets/home-priority.js";
@@ -83,6 +84,10 @@ export function RelationshipsAttentionWidget({ slot }) {
83
84
  const [data, setData] = useState(EMPTY_DATA);
84
85
  const nav = useWidgetNavigation();
85
86
  const load = useCallback(async () => {
87
+ if (!supportsFullAppShellRoutes(client.getBaseUrl())) {
88
+ setData(EMPTY_DATA);
89
+ return;
90
+ }
86
91
  try {
87
92
  const [peopleResult, candidates] = await Promise.all([
88
93
  client.getRelationshipsPeople(),
@@ -6,7 +6,7 @@ import { Textarea } from "../../ui/textarea.js";
6
6
  const INLINE_TEXTAREA_MIN_HEIGHT_PX = 32;
7
7
  const INLINE_TEXTAREA_MAX_HEIGHT_PX = 128;
8
8
  const INLINE_STACKED_INLINE_PADDING_PX = 12;
9
- const inlineTextareaClass = "block h-8 max-h-[128px] min-h-0 w-full min-w-0 resize-none overflow-y-hidden appearance-none rounded-none border-0 bg-transparent px-2 py-[6px] text-sm leading-5 text-txt outline-none placeholder:text-muted-strong ";
9
+ const inlineTextareaClass = "block h-8 max-h-[128px] min-h-0 w-full min-w-0 resize-none overflow-y-hidden appearance-none rounded-none border-0 bg-transparent px-2 py-[6px] text-sm leading-5 text-txt outline-none placeholder:text-muted-strong pointer-coarse:text-[16px] ";
10
10
  const inlineMeasureTextareaClass = `${inlineTextareaClass} pointer-events-none fixed left-0 top-0 z-[-1] opacity-0`;
11
11
  const inlineComposerSurfaceClass = "border-[color-mix(in_srgb,var(--border)_62%,var(--txt)_38%)] bg-[color-mix(in_srgb,var(--bg)_78%,var(--txt)_16%)] ";
12
12
  function getTextareaVerticalPadding(textarea) {
@@ -215,22 +215,22 @@ export function ChatComposer({ variant, layout = "default", textareaRef, chatInp
215
215
  void voice.startListening("compose");
216
216
  };
217
217
  if (isInline) {
218
- const inlineAttachButton = !isGameModal && !hideAttachButton ? (_jsx(Button, { variant: "ghost", size: "icon", className: `h-8 w-8 shrink-0 rounded-sm bg-bg p-0 text-muted shadow-none transition-colors hover:bg-bg hover:text-txt ${chatPendingImagesCount > 0 ? "text-accent hover:text-accent" : ""}`, onClick: onAttachImage, "aria-label": t("aria.attachImage"), title: t("aria.attachImage"), disabled: isComposerLocked, children: _jsx(Plus, { className: "h-5 w-5" }) })) : null;
218
+ const inlineAttachButton = !isGameModal && !hideAttachButton ? (_jsx(Button, { variant: "ghost", size: "icon", className: `h-8 w-8 shrink-0 rounded-sm bg-bg p-0 text-muted shadow-none transition-colors hover:bg-bg hover:text-txt pointer-coarse:min-h-touch pointer-coarse:min-w-touch ${chatPendingImagesCount > 0 ? "text-accent hover:text-accent" : ""}`, onClick: onAttachImage, "aria-label": t("aria.attachImage"), title: t("aria.attachImage"), disabled: isComposerLocked, children: _jsx(Plus, { className: "h-5 w-5" }) })) : null;
219
219
  const inlineTextarea = (_jsxs("div", { className: isInlineMultiline
220
220
  ? "relative min-w-0 w-full"
221
221
  : "relative min-w-0 flex-1", children: [_jsx(Textarea, { ref: textareaRef, value: chatInput, onChange: (event) => onChatInputChange(event.target.value), onKeyDown: onKeyDown, onPaste: onPaste, "data-testid": "chat-composer-textarea", "aria-label": textareaAriaLabel, variant: null, density: null, className: inlineTextareaClass, placeholder: placeholder ?? defaultTextareaPlaceholder, rows: 1, disabled: isComposerLocked }), voice.isListening && voice.interimTranscript ? (_jsx("div", { className: isInlineMultiline
222
222
  ? "pointer-events-none absolute inset-x-3 bottom-2 truncate text-xs text-muted"
223
223
  : "pointer-events-none absolute inset-x-2 bottom-2 truncate text-xs text-muted", children: voice.interimTranscript })) : null] }));
224
- const inlineMicButton = (_jsx(Button, { variant: "ghost", size: "icon", className: `h-8 w-8 shrink-0 rounded-sm p-0 shadow-none transition-colors active:scale-95 ${voice.isListening
224
+ const inlineMicButton = (_jsx(Button, { variant: "ghost", size: "icon", className: `h-8 w-8 shrink-0 rounded-sm p-0 shadow-none transition-colors active:scale-95 pointer-coarse:min-h-touch pointer-coarse:min-w-touch ${voice.isListening
225
225
  ? "bg-accent text-bg hover:bg-accent/90 hover:text-bg"
226
226
  : "bg-bg text-muted hover:bg-bg hover:text-txt"}`, "data-testid": "chat-composer-mic", onClick: handleMicClick, onPointerDown: handleMicPointerDown, onPointerUp: handleMicPointerUp, onPointerCancel: handleMicPointerCancel, onPointerLeave: handleMicPointerCancel, disabled: isComposerLocked || !voice.supported, title: voiceButtonTitle, "aria-label": voiceButtonTitle, "aria-pressed": voice.isListening, children: _jsx(Mic, { className: "h-4.5 w-4.5" }) }));
227
- const inlineSendButton = (_jsx(Button, { variant: "ghost", "data-testid": "chat-composer-action", size: "icon", className: "h-8 w-8 shrink-0 rounded-sm bg-txt p-0 text-bg shadow-none transition-transform active:scale-95 disabled:opacity-40", onClick: onSend,
227
+ const inlineSendButton = (_jsx(Button, { variant: "ghost", "data-testid": "chat-composer-action", size: "icon", className: "h-8 w-8 shrink-0 rounded-sm bg-txt p-0 text-bg shadow-none transition-transform active:scale-95 disabled:opacity-40 pointer-coarse:min-h-touch pointer-coarse:min-w-touch", onClick: onSend,
228
228
  // Keep the textarea focused through the tap: without this, tapping the
229
229
  // send button blurs the composer (the keyboard starts to dismiss) and the
230
230
  // send handler then re-focuses it — the keyboard "flips" closed/open.
231
231
  onMouseDown: (e) => e.preventDefault(), disabled: isComposerLocked || !hasDraft, title: actionButtonLabel, "aria-label": actionButtonLabel, children: _jsx(ArrowUp, { className: "h-4.5 w-4.5" }) }));
232
- const inlineStopButton = (_jsx(Button, { variant: "surfaceDestructive", "data-testid": "chat-composer-action", className: "h-8 w-8 shrink-0 rounded-sm bg-danger/15 p-0 text-danger shadow-none transition-colors hover:bg-danger/25", onClick: onStop, size: "icon", title: actionButtonLabel, "aria-label": actionButtonLabel, children: _jsx(Square, { className: "h-3.5 w-3.5 fill-current" }) }));
233
- const inlineStopSpeakingButton = (_jsx(Button, { variant: "surfaceDestructive", "data-testid": "chat-composer-action", className: "h-8 w-8 shrink-0 rounded-sm bg-danger/15 p-0 text-danger shadow-none transition-colors hover:bg-danger/25", onClick: onStopSpeaking, size: "icon", title: actionButtonLabel, "aria-label": actionButtonLabel, children: _jsx(Square, { className: "h-3.5 w-3.5 fill-current" }) }));
232
+ const inlineStopButton = (_jsx(Button, { variant: "surfaceDestructive", "data-testid": "chat-composer-action", className: "h-8 w-8 shrink-0 rounded-sm bg-danger/15 p-0 text-danger shadow-none transition-colors hover:bg-danger/25 pointer-coarse:min-h-touch pointer-coarse:min-w-touch", onClick: onStop, size: "icon", title: actionButtonLabel, "aria-label": actionButtonLabel, children: _jsx(Square, { className: "h-3.5 w-3.5 fill-current" }) }));
233
+ const inlineStopSpeakingButton = (_jsx(Button, { variant: "surfaceDestructive", "data-testid": "chat-composer-action", className: "h-8 w-8 shrink-0 rounded-sm bg-danger/15 p-0 text-danger shadow-none transition-colors hover:bg-danger/25 pointer-coarse:min-h-touch pointer-coarse:min-w-touch", onClick: onStopSpeaking, size: "icon", title: actionButtonLabel, "aria-label": actionButtonLabel, children: _jsx(Square, { className: "h-3.5 w-3.5 fill-current" }) }));
234
234
  const inlineTrailingActions = shouldShowStopButton ? (inlineStopButton) : !isGameModal && voice.isSpeaking && !hasDraft ? (inlineStopSpeakingButton) : isInlineMultiline ? (_jsxs(_Fragment, { children: [inlineMicButton, inlineSendButton] })) : voice.isListening ? (
235
235
  // Keep the mic (release) button mounted while a push-to-talk turn is held,
236
236
  // even after live STT text fills the draft — otherwise the composer swaps
@@ -246,23 +246,23 @@ export function ChatComposer({ variant, layout = "default", textareaRef, chatInp
246
246
  ? `h-8 w-8 shrink-0 rounded-sm bg-bg p-0 text-muted shadow-none transition-colors hover:bg-bg hover:text-txt ${chatPendingImagesCount > 0
247
247
  ? "text-accent hover:text-accent"
248
248
  : ""}`
249
- : `h-[38px] w-9 shrink-0 bg-transparent p-0 shadow-none border-0 text-muted hover:bg-transparent hover:text-txt ${chatPendingImagesCount > 0
249
+ : `h-[38px] w-9 shrink-0 bg-transparent p-0 shadow-none border-0 text-muted hover:bg-transparent hover:text-txt pointer-coarse:min-h-touch pointer-coarse:min-w-touch ${chatPendingImagesCount > 0
250
250
  ? "text-accent hover:text-accent"
251
251
  : ""}`, onClick: onAttachImage, "aria-label": t("aria.attachImage"), title: t("aria.attachImage"), disabled: isComposerLocked, children: isInline ? (_jsx(Plus, { className: "h-5 w-5" })) : (_jsx(Paperclip, { className: "h-6 w-6" })) })) : null, !isInline && showVoiceButton ? (_jsx(Button, { variant: "ghost", size: "icon", className: isGameModal
252
252
  ? `flex items-center justify-center h-[46px] w-[46px] shrink-0 ${voice.isListening
253
253
  ? "animate-pulse select-none rounded-sm border border-border/28 bg-card text-txt transition-all duration-300 active:scale-95 "
254
254
  : "select-none rounded-sm border border-transparent bg-transparent text-muted-strong shadow-none transition-[border-color,background-color,color,transform,box-shadow] duration-300 hover:border-border/28 hover:bg-card hover:text-txt active:scale-95"} ${isComposerLocked ? "opacity-50" : ""}`
255
- : `h-[38px] w-9 shrink-0 bg-transparent p-0 shadow-none border-0 text-muted hover:bg-transparent hover:text-txt ${voice.isListening ? "text-accent hover:text-accent" : ""}`, "data-testid": "chat-composer-mic", onClick: handleMicClick, onPointerDown: handleMicPointerDown, onPointerUp: handleMicPointerUp, onPointerCancel: handleMicPointerCancel, onPointerLeave: handleMicPointerCancel, "aria-label": isAgentStarting
255
+ : `h-[38px] w-9 shrink-0 bg-transparent p-0 shadow-none border-0 text-muted hover:bg-transparent hover:text-txt pointer-coarse:min-h-touch pointer-coarse:min-w-touch ${voice.isListening ? "text-accent hover:text-accent" : ""}`, "data-testid": "chat-composer-mic", onClick: handleMicClick, onPointerDown: handleMicPointerDown, onPointerUp: handleMicPointerUp, onPointerCancel: handleMicPointerCancel, onPointerLeave: handleMicPointerCancel, "aria-label": isAgentStarting
256
256
  ? t("chat.agentStarting")
257
257
  : voice.isListening
258
258
  ? voice.captureMode === "push-to-talk"
259
259
  ? t("chat.releaseToSend")
260
260
  : t("chat.stopListening")
261
261
  : t("chat.voiceInput"), "aria-pressed": isGameModal ? undefined : voice.isListening, title: voiceButtonTitle, disabled: isComposerLocked, children: _jsx(Mic, { className: "h-6 w-6" }) })) : null, _jsxs("div", { className: "relative min-w-0 flex-1", children: [_jsx(Textarea, { ref: textareaRef, value: chatInput, onChange: (event) => onChatInputChange(event.target.value), onKeyDown: onKeyDown, onPaste: onPaste, "data-testid": "chat-composer-textarea", "aria-label": textareaAriaLabel, variant: isInline ? null : undefined, density: isInline ? null : undefined, className: isGameModal
262
- ? "w-full min-w-0 min-h-0 h-[46px] resize-none overflow-y-hidden max-h-[200px] outline-none font-[var(--font-chat)] disabled:opacity-50 rounded-sm border border-transparent bg-transparent px-4 pb-[13px] pt-[13px] text-[15px] leading-[1.55] text-txt-strong placeholder:text-muted"
262
+ ? "w-full min-w-0 min-h-0 h-[46px] resize-none overflow-y-hidden max-h-[200px] outline-none font-[var(--font-chat)] disabled:opacity-50 rounded-sm border border-transparent bg-transparent px-4 pb-[13px] pt-[13px] text-[15px] leading-[1.55] text-txt-strong placeholder:text-muted pointer-coarse:text-[16px]"
263
263
  : isInline
264
264
  ? inlineTextareaClass
265
- : "w-full min-w-0 min-h-0 h-[38px] resize-none overflow-y-hidden max-h-[200px] outline-none font-[var(--font-chat)] disabled:opacity-50 rounded-sm border-0 bg-card/40 px-4 py-[8px] text-[15px] leading-[1.55] text-txt placeholder:text-muted", placeholder: placeholder ?? defaultTextareaPlaceholder, rows: 1, disabled: isComposerLocked }), voice.isListening && voice.interimTranscript ? (_jsx("div", { className: isInline
265
+ : "w-full min-w-0 min-h-0 h-[38px] resize-none overflow-y-hidden max-h-[200px] outline-none font-[var(--font-chat)] disabled:opacity-50 rounded-sm border-0 bg-card/40 px-4 py-[8px] text-[15px] leading-[1.55] text-txt placeholder:text-muted pointer-coarse:text-[16px]", placeholder: placeholder ?? defaultTextareaPlaceholder, rows: 1, disabled: isComposerLocked }), voice.isListening && voice.interimTranscript ? (_jsx("div", { className: isInline
266
266
  ? "pointer-events-none absolute inset-x-2 bottom-2 truncate text-xs text-muted"
267
267
  : "pointer-events-none absolute inset-x-4 bottom-2.5 truncate text-xs-tight text-muted", children: voice.interimTranscript })) : null] }), !isInline && showAgentVoiceToggle ? (_jsx(Button, { variant: isGameModal
268
268
  ? "ghost"
@@ -273,22 +273,22 @@ export function ChatComposer({ variant, layout = "default", textareaRef, chatInp
273
273
  ? "select-none rounded-sm border border-border/28 bg-card text-txt transition-all duration-300 active:scale-95 "
274
274
  : "select-none rounded-sm border border-transparent bg-transparent text-muted-strong shadow-none transition-[border-color,background-color,color,transform,box-shadow] duration-300 hover:border-border/28 hover:bg-card hover:text-txt active:scale-95"}`
275
275
  : "h-[46px] w-[46px] shrink-0", onClick: onToggleAgentVoice, "aria-label": agentVoiceEnabled ? t("aria.agentVoiceOn") : t("aria.agentVoiceOff"), title: agentVoiceEnabled ? t("chat.agentVoiceOn") : t("chat.agentVoiceOff"), disabled: isComposerLocked, children: agentVoiceEnabled ? (_jsx(Volume2, { className: isGameModal ? "h-5 w-5" : "h-4 w-4" })) : (_jsx(VolumeX, { className: isGameModal ? "h-5 w-5" : "h-4 w-4" })) })) : null, shouldShowStopButton ? (_jsx(Button, { variant: "surfaceDestructive", "data-testid": "chat-composer-action", className: isInline
276
- ? "h-8 w-8 shrink-0 rounded-sm bg-danger/15 p-0 text-danger shadow-none transition-colors hover:bg-danger/25"
276
+ ? "h-8 w-8 shrink-0 rounded-sm bg-danger/15 p-0 text-danger shadow-none transition-colors hover:bg-danger/25 pointer-coarse:min-h-touch pointer-coarse:min-w-touch"
277
277
  : "ml-1 flex items-center justify-center rounded-sm transition-all duration-300 select-none active:scale-95 h-[46px] w-[46px] shrink-0", onClick: onStop, size: "icon", title: actionButtonLabel, "aria-label": actionButtonLabel, children: _jsx(Square, { className: isInline
278
278
  ? "h-3.5 w-3.5 fill-current"
279
279
  : isGameModal
280
280
  ? "h-4.5 w-4.5"
281
281
  : "h-4 w-4" }) })) : !isGameModal && voice.isSpeaking && !hasDraft ? (_jsx(Button, { variant: "surfaceDestructive", "data-testid": "chat-composer-action", className: isInline
282
- ? "h-8 w-8 shrink-0 rounded-sm bg-danger/15 p-0 text-danger shadow-none transition-colors hover:bg-danger/25"
283
- : "ml-1 flex items-center justify-center rounded-sm transition-all duration-300 select-none active:scale-95 h-[46px] w-[46px] shrink-0", onClick: onStopSpeaking, size: "icon", title: actionButtonLabel, "aria-label": actionButtonLabel, children: _jsx(Square, { className: isInline ? "h-3.5 w-3.5 fill-current" : "h-4 w-4" }) })) : isInline && !hasDraft ? (_jsx(Button, { variant: "ghost", size: "icon", className: `h-8 w-8 shrink-0 rounded-sm p-0 shadow-none transition-colors active:scale-95 ${voice.isListening
282
+ ? "h-8 w-8 shrink-0 rounded-sm bg-danger/15 p-0 text-danger shadow-none transition-colors hover:bg-danger/25 pointer-coarse:min-h-touch pointer-coarse:min-w-touch"
283
+ : "ml-1 flex items-center justify-center rounded-sm transition-all duration-300 select-none active:scale-95 h-[46px] w-[46px] shrink-0", onClick: onStopSpeaking, size: "icon", title: actionButtonLabel, "aria-label": actionButtonLabel, children: _jsx(Square, { className: isInline ? "h-3.5 w-3.5 fill-current" : "h-4 w-4" }) })) : isInline && !hasDraft ? (_jsx(Button, { variant: "ghost", size: "icon", className: `h-8 w-8 shrink-0 rounded-sm p-0 shadow-none transition-colors active:scale-95 pointer-coarse:min-h-touch pointer-coarse:min-w-touch ${voice.isListening
284
284
  ? "bg-accent text-bg hover:bg-accent/90 hover:text-bg"
285
285
  : "bg-bg text-muted hover:bg-bg hover:text-txt"}`, "data-testid": "chat-composer-mic", onClick: handleMicClick, onPointerDown: handleMicPointerDown, onPointerUp: handleMicPointerUp, onPointerCancel: handleMicPointerCancel, onPointerLeave: handleMicPointerCancel, disabled: isComposerLocked || !voice.supported, title: voiceButtonTitle, "aria-label": voiceButtonTitle, "aria-pressed": voice.isListening, children: _jsx(Mic, { className: "h-4.5 w-4.5" }) })) : (_jsx(Button, { variant: isGameModal ? "default" : "ghost", "data-testid": "chat-composer-action", size: "icon", className: isGameModal
286
286
  ? `ml-1 flex items-center justify-center rounded-sm transition-all duration-300 select-none active:scale-95 h-[46px] w-[46px] shrink-0 ${hasDraft
287
287
  ? "select-none rounded-sm border border-border/28 bg-card text-txt transition-all duration-300 active:scale-95 "
288
288
  : "select-none rounded-sm border border-transparent bg-transparent text-muted-strong shadow-none transition-[border-color,background-color,color,transform,box-shadow] duration-300 hover:border-border/28 hover:bg-card hover:text-txt active:scale-95 opacity-80"}`
289
289
  : isInline
290
- ? "h-8 w-8 shrink-0 rounded-sm bg-txt p-0 text-bg shadow-none transition-transform active:scale-95 disabled:opacity-40"
291
- : "ml-1 h-[38px] w-9 shrink-0 bg-transparent p-0 shadow-none border-0 text-muted hover:bg-transparent hover:text-txt transition-colors select-none active:scale-95 disabled:opacity-40", onClick: onSend,
290
+ ? "h-8 w-8 shrink-0 rounded-sm bg-txt p-0 text-bg shadow-none transition-transform active:scale-95 disabled:opacity-40 pointer-coarse:min-h-touch pointer-coarse:min-w-touch"
291
+ : "ml-1 h-[38px] w-9 shrink-0 bg-transparent p-0 shadow-none border-0 text-muted hover:bg-transparent hover:text-txt transition-colors select-none active:scale-95 disabled:opacity-40 pointer-coarse:min-h-touch pointer-coarse:min-w-touch", onClick: onSend,
292
292
  // Keep the textarea focused through the tap so the keyboard doesn't
293
293
  // flicker closed/open on send (see the inline send button).
294
294
  onMouseDown: (e) => e.preventDefault(), disabled: isComposerLocked || !hasDraft, title: actionButtonLabel, "aria-label": actionButtonLabel, children: isInline ? (_jsx(ArrowUp, { className: "h-4.5 w-4.5" })) : (_jsx(Send, { className: isGameModal ? "h-4.5 w-4.5" : "h-6 w-6" })) }))] }));
@@ -1 +1 @@
1
- {"version":3,"file":"ui-renderer.d.ts","sourceRoot":"","sources":["../../../../../../src/components/config-ui/ui-renderer.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EACV,SAAS,EAKT,MAAM,EACP,MAAM,sBAAsB,CAAC;AA8gD9B,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IACtE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CACjB,MAAM,EACN,CACE,KAAK,EAAE,OAAO,EACd,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC3B,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAChC,CAAC;CACH;AAED,wBAAgB,UAAU,CAAC,EACzB,IAAI,EACJ,QAAQ,EACR,OAAO,EACP,IAAI,EACJ,UAAU,GACX,EAAE,eAAe,2CAsEjB"}
1
+ {"version":3,"file":"ui-renderer.d.ts","sourceRoot":"","sources":["../../../../../../src/components/config-ui/ui-renderer.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EACV,SAAS,EAKT,MAAM,EACP,MAAM,sBAAsB,CAAC;AAwhD9B,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IACtE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CACjB,MAAM,EACN,CACE,KAAK,EAAE,OAAO,EACd,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC3B,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAChC,CAAC;CACH;AAED,wBAAgB,UAAU,CAAC,EACzB,IAAI,EACJ,QAAQ,EACR,OAAO,EACP,IAAI,EACJ,UAAU,GACX,EAAE,eAAe,2CAsEjB"}
@@ -571,7 +571,7 @@ const DrawerComponent = (props, children, ctx) => {
571
571
  e.preventDefault();
572
572
  close();
573
573
  }
574
- }, role: "dialog", "aria-modal": "true", children: _jsxs("div", { className: "w-full max-h-[80vh] bg-card p-5 overflow-y-auto animate-[slide-up_200ms_ease]", children: [_jsx("div", { className: "w-10 h-1 bg-border mx-auto mb-3 rounded-full" }), props.title ? (_jsx("div", { className: "font-bold text-sm", children: String(props.title) })) : null, props.description ? (_jsx("div", { className: "text-xs text-muted mt-0.5 mb-3", children: String(props.description) })) : null, children] }) }));
574
+ }, role: "dialog", "aria-modal": "true", children: _jsxs("div", { className: "w-full max-h-[80vh] bg-card p-5 overflow-y-auto animate-[slide-up_200ms_ease]", children: [_jsx("button", { type: "button", "aria-label": "Close drawer", onClick: close, className: "group mx-auto mb-3 flex h-8 w-32 cursor-pointer items-center justify-center rounded-full transition-colors hover:bg-surface/70", children: _jsx("span", { className: "h-1 w-10 rounded-full bg-border transition-all group-hover:w-14 group-hover:bg-accent/70", "aria-hidden": true }) }), props.title ? (_jsx("div", { className: "font-bold text-sm", children: String(props.title) })) : null, props.description ? (_jsx("div", { className: "text-xs text-muted mt-0.5 mb-3", children: String(props.description) })) : null, children] }) }));
575
575
  };
576
576
  // ── Component map ───────────────────────────────────────────────────
577
577
  const COMPONENTS = {
@@ -1 +1 @@
1
- {"version":3,"file":"useHomeModelStatus.d.ts","sourceRoot":"","sources":["../../../../../../src/components/local-inference/useHomeModelStatus.ts"],"names":[],"mappings":"AAGA,OAAO,EAEL,KAAK,eAAe,EACrB,MAAM,kDAAkD,CAAC;AAoB1D;;;;;GAKG;AACH,wBAAgB,kBAAkB,IAAI,eAAe,CA0CpD"}
1
+ {"version":3,"file":"useHomeModelStatus.d.ts","sourceRoot":"","sources":["../../../../../../src/components/local-inference/useHomeModelStatus.ts"],"names":[],"mappings":"AAMA,OAAO,EAEL,KAAK,eAAe,EACrB,MAAM,kDAAkD,CAAC;AA2B1D;;;;;GAKG;AACH,wBAAgB,kBAAkB,IAAI,eAAe,CAoEpD"}
@@ -1,5 +1,8 @@
1
1
  import { useEffect, useRef, useState } from "react";
2
2
  import { client } from "../../api/index.js";
3
+ import { supportsFullAppShellRoutes } from "../../api/app-shell-capabilities.js";
4
+ import { isDesktopExternalApiBaseUrl } from "../../api/desktop-external-api-base.js";
5
+ import { useRuntimeMode } from "../../hooks/useRuntimeMode.js";
3
6
  import { deriveHomeModelStatus, } from "../../services/local-inference/home-model-status.js";
4
7
  import { resolveApiUrl } from "../../utils/asset-url.js";
5
8
  import { getElizaApiToken } from "../../utils/eliza-globals.js";
@@ -18,6 +21,10 @@ function appendTokenParam(url) {
18
21
  return url;
19
22
  return `${url}${url.includes("?") ? "&" : "?"}token=${encodeURIComponent(token)}`;
20
23
  }
24
+ function supportsLocalInferenceStatus() {
25
+ const baseUrl = client.getBaseUrl();
26
+ return (supportsFullAppShellRoutes(baseUrl) && !isDesktopExternalApiBaseUrl(baseUrl));
27
+ }
21
28
  /**
22
29
  * Collapses the local-inference hub's per-slot text readiness into a single
23
30
  * home-surface status, refreshed live from the download stream. Defaults to
@@ -27,9 +34,22 @@ function appendTokenParam(url) {
27
34
  export function useHomeModelStatus() {
28
35
  const [status, setStatus] = useState(NOT_REQUIRED);
29
36
  const refreshTimerRef = useRef(null);
37
+ const runtimeMode = useRuntimeMode();
30
38
  useEffect(() => {
39
+ if (runtimeMode.state.phase === "loading" ||
40
+ runtimeMode.isCloudMode ||
41
+ runtimeMode.isRemoteMode ||
42
+ !supportsLocalInferenceStatus()) {
43
+ setStatus(NOT_REQUIRED);
44
+ return;
45
+ }
31
46
  let cancelled = false;
32
47
  const refresh = async () => {
48
+ if (!supportsLocalInferenceStatus()) {
49
+ if (!cancelled)
50
+ setStatus(NOT_REQUIRED);
51
+ return;
52
+ }
33
53
  try {
34
54
  const hub = await client.getLocalInferenceHub();
35
55
  if (!cancelled)
@@ -40,6 +60,12 @@ export function useHomeModelStatus() {
40
60
  }
41
61
  };
42
62
  void refresh();
63
+ if (!supportsLocalInferenceStatus()) {
64
+ setStatus(NOT_REQUIRED);
65
+ return () => {
66
+ cancelled = true;
67
+ };
68
+ }
43
69
  const url = appendTokenParam(resolveApiUrl("/api/local-inference/downloads/stream"));
44
70
  // On-device runtimes are addressed via the native IPC base, which
45
71
  // EventSource cannot open — fall back to the one-shot `refresh()` above.
@@ -60,6 +86,10 @@ export function useHomeModelStatus() {
60
86
  clearTimeout(refreshTimerRef.current);
61
87
  es?.close();
62
88
  };
63
- }, []);
89
+ }, [
90
+ runtimeMode.isCloudMode,
91
+ runtimeMode.isRemoteMode,
92
+ runtimeMode.state.phase,
93
+ ]);
64
94
  return status;
65
95
  }
@@ -1 +1 @@
1
- {"version":3,"file":"SettingsView.d.ts","sourceRoot":"","sources":["../../../../../../src/components/pages/SettingsView.tsx"],"names":[],"mappings":"AAoXA,wBAAgB,YAAY,CAAC,EAC3B,OAAO,EACP,cAAc,GACf,GAAE;IACD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;CACpB,2CA2GL"}
1
+ {"version":3,"file":"SettingsView.d.ts","sourceRoot":"","sources":["../../../../../../src/components/pages/SettingsView.tsx"],"names":[],"mappings":"AAiXA,wBAAgB,YAAY,CAAC,EAC3B,OAAO,EACP,cAAc,GACf,GAAE;IACD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;CACpB,2CA2GL"}
@@ -3,10 +3,7 @@ import { isViewVisible } from "@elizaos/core";
3
3
  import { ArrowLeft } from "lucide-react";
4
4
  import { useCallback, useEffect, useMemo, useState } from "react";
5
5
  import { useAgentElement } from "../../agent-surface/index.js";
6
- // Importing the cloud settings barrel registers the Cloud group + the cloud
7
- // settings sections (side effect), then exposes the extra-group list the
8
- // grouping below reads — so the cloud sections render whenever Settings mounts.
9
- import { listExtraSettingsGroups } from "../../cloud/settings/index.js";
6
+ import { listExtraSettingsGroups } from "../../cloud/settings/cloud-settings-group.js";
10
7
  import { useMediaQuery } from "../../hooks/useMediaQuery.js";
11
8
  import { ContentLayout } from "../../layouts/content-layout/index.js";
12
9
  import { cn } from "../../lib/utils.js";
@@ -1 +1 @@
1
- {"version":3,"file":"Springboard.d.ts","sourceRoot":"","sources":["../../../../../../src/components/pages/Springboard.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAMH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAc1D,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;IACrC,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B,4EAA4E;IAC5E,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,gBAAgB,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,8EAA8E;IAC9E,aAAa,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC;IACxC,UAAU,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,YAAY,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC;+CAC2C;IAC3C,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,oEAAoE;IACpE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAC7C;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA8JD,wBAAgB,WAAW,CAAC,EAC1B,OAAO,EACP,OAAe,EACf,QAAQ,EACR,gBAAgB,EAChB,WAAW,EACX,gBAAgB,EAChB,aAAa,EACb,UAAU,EACV,YAAY,EACZ,IAAI,EAAE,QAAQ,EACd,YAAY,EACZ,iBAAiB,EACjB,OAAO,EAAE,WAAW,EACpB,eAAe,EACf,YAAmB,EACnB,SAAS,GACV,EAAE,gBAAgB,2CA0UlB"}
1
+ {"version":3,"file":"Springboard.d.ts","sourceRoot":"","sources":["../../../../../../src/components/pages/Springboard.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAMH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAc1D,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;IACrC,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B,4EAA4E;IAC5E,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,gBAAgB,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,8EAA8E;IAC9E,aAAa,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC;IACxC,UAAU,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,YAAY,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC;+CAC2C;IAC3C,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,oEAAoE;IACpE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAC7C;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA2LD,wBAAgB,WAAW,CAAC,EAC1B,OAAO,EACP,OAAe,EACf,QAAQ,EACR,gBAAgB,EAChB,WAAW,EACX,gBAAgB,EAChB,aAAa,EACb,UAAU,EACV,YAAY,EACZ,IAAI,EAAE,QAAQ,EACd,YAAY,EACZ,iBAAiB,EACjB,OAAO,EAAE,WAAW,EACpB,eAAe,EACf,YAAmB,EACnB,SAAS,GACV,EAAE,gBAAgB,2CA0UlB"}
@@ -24,11 +24,27 @@ const LONG_PRESS_MS = 450;
24
24
  /** Finger travel (px) that aborts a long-press — a pan/swipe is not a press, so
25
25
  * a horizontal swipe-back can never ghost-fire edit mode mid-gesture. */
26
26
  const LONG_PRESS_MOVE_SLOP = 10;
27
+ function viewKindBadge(entry) {
28
+ if (entry.viewKind === "preview") {
29
+ return {
30
+ label: "Preview",
31
+ title: `${entry.label} is marked preview`,
32
+ };
33
+ }
34
+ if (entry.viewKind === "developer" || entry.developerOnly === true) {
35
+ return {
36
+ label: "Dev",
37
+ title: `${entry.label} is marked developer`,
38
+ };
39
+ }
40
+ return null;
41
+ }
27
42
  // Memoized so a layout reconcile (install/uninstall/sort) re-renders only the
28
43
  // tiles whose props actually changed, not all ~20 on a page.
29
44
  const IconTile = memo(function IconTile({ entry, editing, favorited, manageable, onLaunch, onToggleFavorite, onEdit, onDelete, onLongPress, }) {
30
45
  const timer = useRef(null);
31
46
  const pressStart = useRef(null);
47
+ const badge = viewKindBadge(entry);
32
48
  const clear = () => {
33
49
  if (timer.current !== null) {
34
50
  clearTimeout(timer.current);
@@ -64,7 +80,7 @@ const IconTile = memo(function IconTile({ entry, editing, favorited, manageable,
64
80
  // ViewTileImage renders this surface as an app icon, not as a
65
81
  // cropped catalog preview. The button stays one constant hit target
66
82
  // and owns hover/focus chrome; the inner visual owns color/glyph.
67
- "h-16 w-16 overflow-hidden rounded-2xl border border-white/10 bg-black/35 text-white transition-colors hover:bg-black/45", editing && "animate-pulse"), children: _jsx(ViewTileImage, { entry: entry, source: "springboard", containerClassName: "grid h-full w-full place-items-center", glyphClassName: "h-7 w-7", imageTestId: `springboard-image-${entry.id}` }) }), editing ? (_jsx("button", { type: "button", "aria-label": favorited ? `Unpin ${entry.label}` : `Pin ${entry.label}`, "data-testid": `springboard-fav-${entry.id}`, onClick: (e) => {
83
+ "h-16 w-16 overflow-hidden rounded-2xl border border-white/10 bg-black/35 text-white transition-colors hover:bg-black/45", editing && "animate-pulse"), children: _jsx(ViewTileImage, { entry: entry, source: "springboard", containerClassName: "grid h-full w-full place-items-center", glyphClassName: "h-7 w-7", imageTestId: `springboard-image-${entry.id}` }) }), badge ? (_jsx("span", { "data-testid": `springboard-kind-${entry.id}`, title: badge.title, className: "pointer-events-none absolute -left-1.5 -bottom-1 max-w-[3.75rem] truncate rounded-full border border-black/20 bg-white/90 px-1.5 py-0.5 text-[9px] font-semibold uppercase leading-none text-neutral-900 shadow-sm", children: badge.label })) : null, editing ? (_jsx("button", { type: "button", "aria-label": favorited ? `Unpin ${entry.label}` : `Pin ${entry.label}`, "data-testid": `springboard-fav-${entry.id}`, onClick: (e) => {
68
84
  e.stopPropagation();
69
85
  onToggleFavorite(entry.id);
70
86
  }, className: cn(
@@ -1 +1 @@
1
- {"version":3,"file":"SpringboardSurface.d.ts","sourceRoot":"","sources":["../../../../../../src/components/pages/SpringboardSurface.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAsI/B,MAAM,WAAW,uBAAuB;IACtC,sBAAsB,CAAC,EAAE,MAAM,IAAI,CAAC;CACrC;AAED,eAAO,MAAM,kBAAkB,0DAE5B,uBAAuB,KAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAmR5C,CAAC"}
1
+ {"version":3,"file":"SpringboardSurface.d.ts","sourceRoot":"","sources":["../../../../../../src/components/pages/SpringboardSurface.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAgJ/B,MAAM,WAAW,uBAAuB;IACtC,sBAAsB,CAAC,EAAE,MAAM,IAAI,CAAC;CACrC;AAED,eAAO,MAAM,kBAAkB,0DAE5B,uBAAuB,KAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAuR5C,CAAC"}
@@ -28,6 +28,9 @@ const HIDDEN_SPRINGBOARD_PATHS = new Set([
28
28
  "/background",
29
29
  ]);
30
30
  const SPRINGBOARD_SYSTEM_ENTRY_IDS = new Set([
31
+ "phone",
32
+ "messages",
33
+ "contacts",
31
34
  "settings",
32
35
  "tasks",
33
36
  "automations",
@@ -69,6 +72,13 @@ function compareEntryLabels(left, right) {
69
72
  sensitivity: "base",
70
73
  });
71
74
  }
75
+ function compareSpringboardEntries(left, right) {
76
+ const leftOrder = left.order ?? (left.kind === "view" ? 500 : 1000);
77
+ const rightOrder = right.order ?? (right.kind === "view" ? 500 : 1000);
78
+ if (leftOrder !== rightOrder)
79
+ return leftOrder - rightOrder;
80
+ return compareEntryLabels(left, right);
81
+ }
72
82
  function dedupeEntries(entries) {
73
83
  const seen = new Set();
74
84
  const out = [];
@@ -113,12 +123,13 @@ export const SpringboardSurface = React.memo(function SpringboardSurface({ onNav
113
123
  const showDynamicViewControls = developerMode && dynamicViewBridgeAvailable();
114
124
  const loadedEntries = React.useMemo(() => views
115
125
  .filter((view) => isVisibleSpringboardView(view, enabledKinds, activeModality))
116
- .map(viewToEntry), [activeModality, enabledKinds, views]);
126
+ .map(viewToEntry)
127
+ .sort(compareSpringboardEntries), [activeModality, enabledKinds, views]);
117
128
  const availableEntries = React.useMemo(() => catalogEntries
118
129
  .filter((entry) => entry.state !== "loaded")
119
130
  .filter((entry) => entry.modality === activeModality)
120
- .sort(compareEntryLabels), [activeModality, catalogEntries]);
121
- const entries = React.useMemo(() => dedupeEntries([...loadedEntries, ...availableEntries]), [availableEntries, loadedEntries]);
131
+ .sort(compareSpringboardEntries), [activeModality, catalogEntries]);
132
+ const entries = React.useMemo(() => dedupeEntries([...loadedEntries, ...availableEntries]).sort(compareSpringboardEntries), [availableEntries, loadedEntries]);
122
133
  const entryById = React.useMemo(() => new Map(entries.map((entry) => [entry.id, entry])), [entries]);
123
134
  const refreshDynamicViews = React.useCallback(() => {
124
135
  refreshViews();
@@ -1 +1 @@
1
- {"version":3,"file":"CloudAgentsSection.d.ts","sourceRoot":"","sources":["../../../../../../src/components/settings/CloudAgentsSection.tsx"],"names":[],"mappings":"AAoFA;;;;GAIG;AACH,wBAAgB,kBAAkB,4CAqoBjC"}
1
+ {"version":3,"file":"CloudAgentsSection.d.ts","sourceRoot":"","sources":["../../../../../../src/components/settings/CloudAgentsSection.tsx"],"names":[],"mappings":"AAmFA;;;;GAIG;AACH,wBAAgB,kBAAkB,4CAmoBjC"}
@@ -7,7 +7,6 @@ import { getBootConfig } from "../../config/boot-config.js";
7
7
  import { useBranding } from "../../config/branding.js";
8
8
  import { useAppSelector } from "../../state/index.js";
9
9
  import { createPersistedActiveServer, loadPersistedActiveServer, savePersistedActiveServer, } from "../../state/persistence.js";
10
- import { isCloudAgentWaking } from "../../state/types.js";
11
10
  import { Button } from "../ui/button.js";
12
11
  import { Input } from "../ui/input.js";
13
12
  import { StatusBadge } from "../ui/status-badge.js";
@@ -67,7 +66,6 @@ function currentCloudToken() {
67
66
  export function CloudAgentsSection() {
68
67
  const elizaCloudConnected = useAppSelector((s) => s.elizaCloudConnected);
69
68
  const setActionNotice = useAppSelector((s) => s.setActionNotice);
70
- const cloudHandoffPhase = useAppSelector((s) => s.cloudHandoffPhase);
71
69
  const { appName } = useBranding();
72
70
  const [agents, setAgents] = useState([]);
73
71
  const [loading, setLoading] = useState(true);
@@ -390,12 +388,12 @@ export function CloudAgentsSection() {
390
388
  }, children: [_jsx(RefreshCw, { className: "mr-1 h-4 w-4", "aria-hidden": true }), "Try again"] })] })) : agents.length === 0 ? (_jsx("p", { className: "px-4 py-3 text-sm text-txt-muted", "data-testid": "cloud-agents-empty", children: "No cloud agents yet \u2014 create your first one below." })) : (agents.map((agent) => {
391
389
  const isActive = agent.agent_id === activeId;
392
390
  const busy = busyId === agent.agent_id;
393
- // Show "Waking…" for a locally-driven resume (wakingId) OR a
394
- // first-run shared→dedicated handoff in flight for this agent, so the
395
- // row reflects the same shared-now/dedicated-pending state the chat
396
- // shell sees rather than running a wholly independent signal.
397
- const waking = wakingId === agent.agent_id ||
398
- isCloudAgentWaking(cloudHandoffPhase, agent.agent_id);
391
+ // Show "Waking…" for a locally-driven resume (wakingId). The
392
+ // first-run shared→dedicated handoff no longer surfaces here: it
393
+ // re-points the live client SILENTLY (no row-level "waking" state),
394
+ // and its in-flight progress is shown by the chat-shell handoff
395
+ // toast (CloudHandoffBanner), not this Settings row.
396
+ const waking = wakingId === agent.agent_id;
399
397
  const status = (agent.status || "").toLowerCase();
400
398
  const canSuspend = status === "running";
401
399
  const canResume = NON_RUNNING_STATES.has(status);
@@ -0,0 +1,2 @@
1
+ export declare function CloudOverviewSection(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=CloudOverviewSection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CloudOverviewSection.d.ts","sourceRoot":"","sources":["../../../../../../src/components/settings/CloudOverviewSection.tsx"],"names":[],"mappings":"AAgDA,wBAAgB,oBAAoB,4CAkGnC"}