@elizaos/ui 2.0.0-beta.2 → 2.0.3-beta.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/App.d.ts +6 -1
- package/App.d.ts.map +1 -1
- package/App.js +991 -339
- package/agent-surface/AgentElementOverlay.d.ts +9 -0
- package/agent-surface/AgentElementOverlay.d.ts.map +1 -0
- package/agent-surface/AgentElementOverlay.js +85 -0
- package/agent-surface/AgentSurfaceContext.d.ts +18 -0
- package/agent-surface/AgentSurfaceContext.d.ts.map +1 -0
- package/agent-surface/AgentSurfaceContext.hooks.d.ts +16 -0
- package/agent-surface/AgentSurfaceContext.hooks.d.ts.map +1 -0
- package/agent-surface/AgentSurfaceContext.hooks.js +11 -0
- package/agent-surface/AgentSurfaceContext.js +33 -0
- package/agent-surface/__e2e__/fixture.d.ts +14 -0
- package/agent-surface/__e2e__/fixture.d.ts.map +1 -0
- package/agent-surface/__e2e__/fixture.js +52 -0
- package/agent-surface/__e2e__/real-view-fixture.d.ts +21 -0
- package/agent-surface/__e2e__/real-view-fixture.d.ts.map +1 -0
- package/agent-surface/__e2e__/real-view-fixture.js +54 -0
- package/agent-surface/capabilities.d.ts +20 -0
- package/agent-surface/capabilities.d.ts.map +1 -0
- package/agent-surface/capabilities.js +85 -0
- package/agent-surface/components.d.ts +52 -0
- package/agent-surface/components.d.ts.map +1 -0
- package/agent-surface/components.js +41 -0
- package/agent-surface/element-reporter.d.ts +19 -0
- package/agent-surface/element-reporter.d.ts.map +1 -0
- package/agent-surface/element-reporter.hooks.d.ts +27 -0
- package/agent-surface/element-reporter.hooks.d.ts.map +1 -0
- package/agent-surface/element-reporter.hooks.js +79 -0
- package/agent-surface/element-reporter.js +24 -0
- package/agent-surface/index.d.ts +16 -0
- package/agent-surface/index.d.ts.map +1 -0
- package/agent-surface/index.js +15 -0
- package/agent-surface/registry.d.ts +48 -0
- package/agent-surface/registry.d.ts.map +1 -0
- package/agent-surface/registry.js +274 -0
- package/agent-surface/types.d.ts +93 -0
- package/agent-surface/types.d.ts.map +1 -0
- package/agent-surface/types.js +40 -0
- package/agent-surface/useAgentElement.d.ts +31 -0
- package/agent-surface/useAgentElement.d.ts.map +1 -0
- package/agent-surface/useAgentElement.js +96 -0
- package/api/android-native-agent-transport.d.ts +26 -1
- package/api/android-native-agent-transport.d.ts.map +1 -1
- package/api/android-native-agent-transport.js +255 -50
- package/api/auth-client.d.ts.map +1 -1
- package/api/auth-client.js +61 -0
- package/api/browser-contracts.d.ts +222 -0
- package/api/browser-contracts.d.ts.map +1 -0
- package/api/client-agent.d.ts +83 -11
- package/api/client-agent.d.ts.map +1 -1
- package/api/client-agent.js +990 -289
- package/api/client-approvals.d.ts +16 -0
- package/api/client-approvals.d.ts.map +1 -0
- package/api/client-approvals.js +4 -0
- package/api/client-automations.d.ts +1 -1
- package/api/client-background.d.ts +15 -0
- package/api/client-background.d.ts.map +1 -0
- package/api/client-background.js +10 -0
- package/api/client-base.d.ts +69 -9
- package/api/client-base.d.ts.map +1 -1
- package/api/client-base.js +686 -215
- package/api/client-browser-workspace.d.ts +1 -1
- package/api/client-browser-workspace.d.ts.map +1 -1
- package/api/client-chat.d.ts +93 -6
- package/api/client-chat.d.ts.map +1 -1
- package/api/client-chat.js +315 -95
- package/api/client-cloud.d.ts +140 -11
- package/api/client-cloud.d.ts.map +1 -1
- package/api/client-cloud.js +488 -55
- package/api/client-computeruse.d.ts +1 -1
- package/api/client-computeruse.d.ts.map +1 -1
- package/api/client-files.d.ts +36 -0
- package/api/client-files.d.ts.map +1 -0
- package/api/client-files.js +19 -0
- package/api/client-local-inference.d.ts +54 -8
- package/api/client-local-inference.d.ts.map +1 -1
- package/api/client-local-inference.js +80 -6
- package/api/client-notifications.d.ts +31 -0
- package/api/client-notifications.d.ts.map +1 -0
- package/api/client-notifications.js +34 -0
- package/api/client-skills.d.ts +110 -127
- package/api/client-skills.d.ts.map +1 -1
- package/api/client-skills.js +116 -90
- package/api/client-transcripts.d.ts +50 -0
- package/api/client-transcripts.d.ts.map +1 -0
- package/api/client-transcripts.js +31 -0
- package/api/client-types-chat.d.ts +240 -5
- package/api/client-types-chat.d.ts.map +1 -1
- package/api/client-types-cloud.d.ts +321 -188
- package/api/client-types-cloud.d.ts.map +1 -1
- package/api/client-types-cloud.js +4 -4
- package/api/client-types-commands.d.ts +55 -0
- package/api/client-types-commands.d.ts.map +1 -0
- package/api/client-types-commands.js +7 -0
- package/api/client-types-config.d.ts +1034 -20
- package/api/client-types-config.d.ts.map +1 -1
- package/api/client-types-core.d.ts +109 -156
- package/api/client-types-core.d.ts.map +1 -1
- package/api/client-types-feed.d.ts +248 -0
- package/api/client-types-feed.d.ts.map +1 -0
- package/api/client-types-feed.js +2 -0
- package/api/client-types.d.ts +8 -8
- package/api/client-types.d.ts.map +1 -1
- package/api/client-types.js +1 -1
- package/api/client-voice-models.d.ts +67 -0
- package/api/client-voice-models.d.ts.map +1 -0
- package/api/client-voice-models.js +34 -0
- package/api/client-voice-profiles.d.ts +153 -0
- package/api/client-voice-profiles.d.ts.map +1 -0
- package/api/client-voice-profiles.js +261 -0
- package/api/client-wallet.d.ts +3 -3
- package/api/client-workflow.d.ts +9 -1
- package/api/client-workflow.d.ts.map +1 -1
- package/api/client-workflow.js +29 -0
- package/api/client-xr.d.ts +18 -0
- package/api/client-xr.d.ts.map +1 -0
- package/api/client-xr.js +4 -0
- package/api/client.d.ts +34 -25
- package/api/client.d.ts.map +1 -1
- package/api/client.js +11 -3
- package/api/csrf-client.d.ts.map +1 -1
- package/api/csrf-client.js +11 -1
- package/api/desktop-http-transport.d.ts +1 -1
- package/api/desktop-http-transport.d.ts.map +1 -1
- package/api/desktop-http-transport.js +28 -24
- package/api/i18n-locale-client.d.ts +15 -0
- package/api/i18n-locale-client.d.ts.map +1 -0
- package/api/i18n-locale-client.js +36 -0
- package/api/index.d.ts +2 -1
- package/api/index.d.ts.map +1 -1
- package/api/index.js +1 -0
- package/api/ios-local-agent-kernel.d.ts +1 -1
- package/api/ios-local-agent-kernel.d.ts.map +1 -1
- package/api/ios-local-agent-kernel.js +914 -134
- package/api/ios-local-agent-transport.d.ts +33 -1
- package/api/ios-local-agent-transport.d.ts.map +1 -1
- package/api/ios-local-agent-transport.js +558 -4
- package/api/ittp-agent-transport.d.ts +9 -2
- package/api/ittp-agent-transport.d.ts.map +1 -1
- package/api/ittp-agent-transport.js +11 -1
- package/api/native-agent-stream.d.ts +57 -0
- package/api/native-agent-stream.d.ts.map +1 -0
- package/api/native-agent-stream.js +126 -0
- package/api/native-cloud-http-transport.d.ts +1 -1
- package/api/native-cloud-http-transport.d.ts.map +1 -1
- package/api/native-cloud-http-transport.js +84 -28
- package/api/request-timeout.d.ts.map +1 -1
- package/api/request-timeout.js +47 -1
- package/api/runtime-mode-client.d.ts.map +1 -1
- package/api/transport.d.ts +14 -0
- package/api/transport.d.ts.map +1 -1
- package/api/transport.js +49 -0
- package/app-navigate-view.d.ts +57 -0
- package/app-navigate-view.d.ts.map +1 -0
- package/app-navigate-view.js +188 -0
- package/app-shell-components.d.ts +26 -37
- package/app-shell-components.d.ts.map +1 -1
- package/app-shell-components.js +14 -13
- package/app-shell-registry.d.ts +33 -5
- package/app-shell-registry.d.ts.map +1 -1
- package/app-shell-registry.js +17 -1
- package/backgrounds/AppBackground.d.ts +16 -0
- package/backgrounds/AppBackground.d.ts.map +1 -0
- package/backgrounds/AppBackground.js +30 -0
- package/backgrounds/BackgroundHost.d.ts +14 -0
- package/backgrounds/BackgroundHost.d.ts.map +1 -0
- package/backgrounds/BackgroundHost.js +20 -0
- package/backgrounds/ImageBackground.d.ts +12 -0
- package/backgrounds/ImageBackground.d.ts.map +1 -0
- package/backgrounds/ImageBackground.js +15 -0
- package/backgrounds/ShaderBackground.d.ts +12 -0
- package/backgrounds/ShaderBackground.d.ts.map +1 -0
- package/backgrounds/ShaderBackground.js +39 -0
- package/backgrounds/index.d.ts +8 -0
- package/backgrounds/index.d.ts.map +1 -0
- package/backgrounds/index.js +6 -0
- package/backgrounds/types.d.ts +13 -0
- package/backgrounds/types.d.ts.map +1 -0
- package/backgrounds/types.js +12 -0
- package/backgrounds/useBackgroundApplyChannel.d.ts +21 -0
- package/backgrounds/useBackgroundApplyChannel.d.ts.map +1 -0
- package/backgrounds/useBackgroundApplyChannel.js +53 -0
- package/bridge/capacitor-bridge.d.ts +1 -1
- package/bridge/capacitor-bridge.d.ts.map +1 -1
- package/bridge/capacitor-bridge.js +18 -2
- package/bridge/electrobun-rpc.d.ts +115 -0
- package/bridge/electrobun-rpc.d.ts.map +1 -1
- package/bridge/electrobun-rpc.js +128 -1
- package/bridge/electrobun-runtime.d.ts.map +1 -1
- package/bridge/electrobun-runtime.js +33 -5
- package/bridge/gateway-discovery.d.ts.map +1 -1
- package/bridge/gateway-discovery.js +3 -1
- package/bridge/index.d.ts +6 -6
- package/bridge/native-notifications.d.ts +40 -0
- package/bridge/native-notifications.d.ts.map +1 -0
- package/bridge/native-notifications.js +171 -0
- package/bridge/native-plugins.d.ts +250 -5
- package/bridge/native-plugins.d.ts.map +1 -1
- package/bridge/native-plugins.js +9 -0
- package/bridge/plugin-bridge.d.ts +2 -2
- package/bridge/plugin-bridge.d.ts.map +1 -1
- package/bridge/plugin-bridge.js +2 -10
- package/bridge/storage-bridge.d.ts.map +1 -1
- package/bridge/storage-bridge.js +163 -32
- package/browser.d.ts +132 -64
- package/browser.d.ts.map +1 -1
- package/browser.js +95 -18
- package/build-variant.d.ts +1 -1
- package/build-variant.js +3 -3
- package/cache-telemetry.d.ts +18 -0
- package/cache-telemetry.d.ts.map +1 -0
- package/cache-telemetry.js +26 -0
- package/character/character-draft-helpers.d.ts +1 -1
- package/character-catalog.d.ts +1 -1
- package/chat/coding-agent-session-state.d.ts +1 -1
- package/chat/index.d.ts +24 -4
- package/chat/index.d.ts.map +1 -1
- package/chat/index.js +59 -7
- package/chat/slash-menu.d.ts +140 -0
- package/chat/slash-menu.d.ts.map +1 -0
- package/chat/slash-menu.js +479 -0
- package/chat/useSlashCommandController.d.ts +64 -0
- package/chat/useSlashCommandController.d.ts.map +1 -0
- package/chat/useSlashCommandController.js +248 -0
- package/cloud/account-security/AccountRoute.d.ts +22 -0
- package/cloud/account-security/AccountRoute.d.ts.map +1 -0
- package/cloud/account-security/AccountRoute.js +50 -0
- package/cloud/account-security/AccountSection.d.ts +12 -0
- package/cloud/account-security/AccountSection.d.ts.map +1 -0
- package/cloud/account-security/AccountSection.js +16 -0
- package/cloud/account-security/PermissionsRoute.d.ts +21 -0
- package/cloud/account-security/PermissionsRoute.d.ts.map +1 -0
- package/cloud/account-security/PermissionsRoute.js +33 -0
- package/cloud/account-security/PermissionsSection.d.ts +11 -0
- package/cloud/account-security/PermissionsSection.d.ts.map +1 -0
- package/cloud/account-security/PermissionsSection.js +15 -0
- package/cloud/account-security/SecurityRoute.d.ts +20 -0
- package/cloud/account-security/SecurityRoute.d.ts.map +1 -0
- package/cloud/account-security/SecurityRoute.js +42 -0
- package/cloud/account-security/SecuritySection.d.ts +10 -0
- package/cloud/account-security/SecuritySection.d.ts.map +1 -0
- package/cloud/account-security/SecuritySection.js +14 -0
- package/cloud/account-security/components/AuditEventList.d.ts +20 -0
- package/cloud/account-security/components/AuditEventList.d.ts.map +1 -0
- package/cloud/account-security/components/AuditEventList.js +30 -0
- package/cloud/account-security/components/account-details.d.ts +12 -0
- package/cloud/account-security/components/account-details.d.ts.map +1 -0
- package/cloud/account-security/components/account-details.js +54 -0
- package/cloud/account-security/components/account-page-client.d.ts +16 -0
- package/cloud/account-security/components/account-page-client.d.ts.map +1 -0
- package/cloud/account-security/components/account-page-client.js +26 -0
- package/cloud/account-security/components/active-sessions-panel.d.ts +10 -0
- package/cloud/account-security/components/active-sessions-panel.d.ts.map +1 -0
- package/cloud/account-security/components/active-sessions-panel.js +93 -0
- package/cloud/account-security/components/api-keys-link.d.ts +8 -0
- package/cloud/account-security/components/api-keys-link.d.ts.map +1 -0
- package/cloud/account-security/components/api-keys-link.js +17 -0
- package/cloud/account-security/components/incident-report-panel.d.ts +7 -0
- package/cloud/account-security/components/incident-report-panel.d.ts.map +1 -0
- package/cloud/account-security/components/incident-report-panel.js +65 -0
- package/cloud/account-security/components/mfa-panel.d.ts +11 -0
- package/cloud/account-security/components/mfa-panel.d.ts.map +1 -0
- package/cloud/account-security/components/mfa-panel.js +66 -0
- package/cloud/account-security/components/organization-info.d.ts +13 -0
- package/cloud/account-security/components/organization-info.d.ts.map +1 -0
- package/cloud/account-security/components/organization-info.js +46 -0
- package/cloud/account-security/components/plugin-permissions-page-client.d.ts +10 -0
- package/cloud/account-security/components/plugin-permissions-page-client.d.ts.map +1 -0
- package/cloud/account-security/components/plugin-permissions-page-client.js +72 -0
- package/cloud/account-security/components/privacy-panel.d.ts +12 -0
- package/cloud/account-security/components/privacy-panel.d.ts.map +1 -0
- package/cloud/account-security/components/privacy-panel.js +161 -0
- package/cloud/account-security/components/profile-form.d.ts +21 -0
- package/cloud/account-security/components/profile-form.d.ts.map +1 -0
- package/cloud/account-security/components/profile-form.js +255 -0
- package/cloud/account-security/components/recent-audit-events.d.ts +7 -0
- package/cloud/account-security/components/recent-audit-events.d.ts.map +1 -0
- package/cloud/account-security/components/recent-audit-events.js +48 -0
- package/cloud/account-security/data/audit-client.d.ts +33 -0
- package/cloud/account-security/data/audit-client.d.ts.map +1 -0
- package/cloud/account-security/data/audit-client.js +37 -0
- package/cloud/account-security/data/consent-store.d.ts +11 -0
- package/cloud/account-security/data/consent-store.d.ts.map +1 -0
- package/cloud/account-security/data/consent-store.js +45 -0
- package/cloud/account-security/data/use-session-auth.d.ts +39 -0
- package/cloud/account-security/data/use-session-auth.d.ts.map +1 -0
- package/cloud/account-security/data/use-session-auth.js +95 -0
- package/cloud/account-security/data/user.d.ts +238 -0
- package/cloud/account-security/data/user.d.ts.map +1 -0
- package/cloud/account-security/data/user.js +77 -0
- package/cloud/account-security/index.d.ts +44 -0
- package/cloud/account-security/index.d.ts.map +1 -0
- package/cloud/account-security/index.js +66 -0
- package/cloud/admin/AdminGate.d.ts +24 -0
- package/cloud/admin/AdminGate.d.ts.map +1 -0
- package/cloud/admin/AdminGate.js +84 -0
- package/cloud/admin/ModerationPage.d.ts +16 -0
- package/cloud/admin/ModerationPage.d.ts.map +1 -0
- package/cloud/admin/ModerationPage.js +234 -0
- package/cloud/admin/ModerationRoute.d.ts +3 -0
- package/cloud/admin/ModerationRoute.d.ts.map +1 -0
- package/cloud/admin/ModerationRoute.js +7 -0
- package/cloud/admin/RedemptionsPage.d.ts +21 -0
- package/cloud/admin/RedemptionsPage.d.ts.map +1 -0
- package/cloud/admin/RedemptionsPage.js +322 -0
- package/cloud/admin/RedemptionsRoute.d.ts +3 -0
- package/cloud/admin/RedemptionsRoute.d.ts.map +1 -0
- package/cloud/admin/RedemptionsRoute.js +7 -0
- package/cloud/admin/RpcStatusPage.d.ts +12 -0
- package/cloud/admin/RpcStatusPage.d.ts.map +1 -0
- package/cloud/admin/RpcStatusPage.js +54 -0
- package/cloud/admin/RpcStatusRoute.d.ts +3 -0
- package/cloud/admin/RpcStatusRoute.d.ts.map +1 -0
- package/cloud/admin/RpcStatusRoute.js +7 -0
- package/cloud/admin/data/use-admin-gate.d.ts +48 -0
- package/cloud/admin/data/use-admin-gate.d.ts.map +1 -0
- package/cloud/admin/data/use-admin-gate.js +93 -0
- package/cloud/admin/index.d.ts +48 -0
- package/cloud/admin/index.d.ts.map +1 -0
- package/cloud/admin/index.js +69 -0
- package/cloud/analytics/Page.d.ts +17 -0
- package/cloud/analytics/Page.d.ts.map +1 -0
- package/cloud/analytics/Page.js +46 -0
- package/cloud/analytics/_components/analytics-page-client.d.ts +18 -0
- package/cloud/analytics/_components/analytics-page-client.d.ts.map +1 -0
- package/cloud/analytics/_components/analytics-page-client.js +166 -0
- package/cloud/analytics/_components/filters.d.ts +2 -0
- package/cloud/analytics/_components/filters.d.ts.map +1 -0
- package/cloud/analytics/_components/filters.js +101 -0
- package/cloud/analytics/_components/model-breakdown.d.ts +12 -0
- package/cloud/analytics/_components/model-breakdown.d.ts.map +1 -0
- package/cloud/analytics/_components/model-breakdown.js +69 -0
- package/cloud/analytics/_components/projections-chart.d.ts +13 -0
- package/cloud/analytics/_components/projections-chart.d.ts.map +1 -0
- package/cloud/analytics/_components/projections-chart.js +123 -0
- package/cloud/analytics/_components/provider-breakdown.d.ts +12 -0
- package/cloud/analytics/_components/provider-breakdown.d.ts.map +1 -0
- package/cloud/analytics/_components/provider-breakdown.js +48 -0
- package/cloud/analytics/_components/usage-chart.d.ts +18 -0
- package/cloud/analytics/_components/usage-chart.d.ts.map +1 -0
- package/cloud/analytics/_components/usage-chart.js +117 -0
- package/cloud/analytics/index.d.ts +17 -0
- package/cloud/analytics/index.d.ts.map +1 -0
- package/cloud/analytics/index.js +23 -0
- package/cloud/analytics/lib/analytics-data.d.ts +41 -0
- package/cloud/analytics/lib/analytics-data.d.ts.map +1 -0
- package/cloud/analytics/lib/analytics-data.js +55 -0
- package/cloud/analytics/lib/auth-query.d.ts +23 -0
- package/cloud/analytics/lib/auth-query.d.ts.map +1 -0
- package/cloud/analytics/lib/auth-query.js +30 -0
- package/cloud/analytics/lib/format.d.ts +14 -0
- package/cloud/analytics/lib/format.d.ts.map +1 -0
- package/cloud/analytics/lib/format.js +15 -0
- package/cloud/analytics/lib/time-range.d.ts +14 -0
- package/cloud/analytics/lib/time-range.d.ts.map +1 -0
- package/cloud/analytics/lib/time-range.js +28 -0
- package/cloud/api-explorer/ApiExplorerPage.d.ts +23 -0
- package/cloud/api-explorer/ApiExplorerPage.d.ts.map +1 -0
- package/cloud/api-explorer/ApiExplorerPage.js +216 -0
- package/cloud/api-explorer/api-tester.d.ts +22 -0
- package/cloud/api-explorer/api-tester.d.ts.map +1 -0
- package/cloud/api-explorer/api-tester.js +440 -0
- package/cloud/api-explorer/auth-manager.d.ts +19 -0
- package/cloud/api-explorer/auth-manager.d.ts.map +1 -0
- package/cloud/api-explorer/auth-manager.js +49 -0
- package/cloud/api-explorer/index.d.ts +44 -0
- package/cloud/api-explorer/index.d.ts.map +1 -0
- package/cloud/api-explorer/index.js +53 -0
- package/cloud/api-explorer/toast.d.ts +10 -0
- package/cloud/api-explorer/toast.d.ts.map +1 -0
- package/cloud/api-explorer/toast.js +16 -0
- package/cloud/api-explorer/use-explorer-api-key.d.ts +30 -0
- package/cloud/api-explorer/use-explorer-api-key.d.ts.map +1 -0
- package/cloud/api-explorer/use-explorer-api-key.js +57 -0
- package/cloud/api-explorer/use-session-auth.d.ts +44 -0
- package/cloud/api-explorer/use-session-auth.d.ts.map +1 -0
- package/cloud/api-explorer/use-session-auth.js +152 -0
- package/cloud/api-keys/ApiKeysRoute.d.ts +20 -0
- package/cloud/api-keys/ApiKeysRoute.d.ts.map +1 -0
- package/cloud/api-keys/ApiKeysRoute.js +84 -0
- package/cloud/api-keys/ApiKeysSection.d.ts +15 -0
- package/cloud/api-keys/ApiKeysSection.d.ts.map +1 -0
- package/cloud/api-keys/ApiKeysSection.js +18 -0
- package/cloud/api-keys/ApiKeysView.d.ts +27 -0
- package/cloud/api-keys/ApiKeysView.d.ts.map +1 -0
- package/cloud/api-keys/ApiKeysView.js +312 -0
- package/cloud/api-keys/auth-gate.d.ts +28 -0
- package/cloud/api-keys/auth-gate.d.ts.map +1 -0
- package/cloud/api-keys/auth-gate.js +33 -0
- package/cloud/api-keys/copy-api-key.d.ts +31 -0
- package/cloud/api-keys/copy-api-key.d.ts.map +1 -0
- package/cloud/api-keys/copy-api-key.js +35 -0
- package/cloud/api-keys/index.d.ts +42 -0
- package/cloud/api-keys/index.d.ts.map +1 -0
- package/cloud/api-keys/index.js +50 -0
- package/cloud/api-keys/use-api-keys.d.ts +25 -0
- package/cloud/api-keys/use-api-keys.d.ts.map +1 -0
- package/cloud/api-keys/use-api-keys.js +29 -0
- package/cloud/applications/ApplicationDetailPage.d.ts +10 -0
- package/cloud/applications/ApplicationDetailPage.d.ts.map +1 -0
- package/cloud/applications/ApplicationDetailPage.js +71 -0
- package/cloud/applications/ApplicationsPage.d.ts +12 -0
- package/cloud/applications/ApplicationsPage.d.ts.map +1 -0
- package/cloud/applications/ApplicationsPage.js +43 -0
- package/cloud/applications/components/app-analytics.d.ts +12 -0
- package/cloud/applications/components/app-analytics.d.ts.map +1 -0
- package/cloud/applications/components/app-analytics.js +199 -0
- package/cloud/applications/components/app-details-tabs.d.ts +14 -0
- package/cloud/applications/components/app-details-tabs.d.ts.map +1 -0
- package/cloud/applications/components/app-details-tabs.js +81 -0
- package/cloud/applications/components/app-domains.d.ts +13 -0
- package/cloud/applications/components/app-domains.d.ts.map +1 -0
- package/cloud/applications/components/app-domains.js +351 -0
- package/cloud/applications/components/app-earnings-dashboard.d.ts +11 -0
- package/cloud/applications/components/app-earnings-dashboard.d.ts.map +1 -0
- package/cloud/applications/components/app-earnings-dashboard.js +130 -0
- package/cloud/applications/components/app-monetization-settings.d.ts +12 -0
- package/cloud/applications/components/app-monetization-settings.d.ts.map +1 -0
- package/cloud/applications/components/app-monetization-settings.js +201 -0
- package/cloud/applications/components/app-overview.d.ts +14 -0
- package/cloud/applications/components/app-overview.d.ts.map +1 -0
- package/cloud/applications/components/app-overview.js +270 -0
- package/cloud/applications/components/app-promote.d.ts +22 -0
- package/cloud/applications/components/app-promote.d.ts.map +1 -0
- package/cloud/applications/components/app-promote.js +106 -0
- package/cloud/applications/components/app-settings.d.ts +15 -0
- package/cloud/applications/components/app-settings.d.ts.map +1 -0
- package/cloud/applications/components/app-settings.js +193 -0
- package/cloud/applications/components/app-users.d.ts +12 -0
- package/cloud/applications/components/app-users.d.ts.map +1 -0
- package/cloud/applications/components/app-users.js +82 -0
- package/cloud/applications/components/apps-table.d.ts +15 -0
- package/cloud/applications/components/apps-table.d.ts.map +1 -0
- package/cloud/applications/components/apps-table.js +74 -0
- package/cloud/applications/components/create-app-button.d.ts +6 -0
- package/cloud/applications/components/create-app-button.d.ts.map +1 -0
- package/cloud/applications/components/create-app-button.js +15 -0
- package/cloud/applications/components/create-app-dialog.d.ts +20 -0
- package/cloud/applications/components/create-app-dialog.d.ts.map +1 -0
- package/cloud/applications/components/create-app-dialog.js +157 -0
- package/cloud/applications/components/single-app-page-wrapper.d.ts +12 -0
- package/cloud/applications/components/single-app-page-wrapper.d.ts.map +1 -0
- package/cloud/applications/components/single-app-page-wrapper.js +5 -0
- package/cloud/applications/components/withdraw-dialog.d.ts +20 -0
- package/cloud/applications/components/withdraw-dialog.d.ts.map +1 -0
- package/cloud/applications/components/withdraw-dialog.js +60 -0
- package/cloud/applications/index.d.ts +39 -0
- package/cloud/applications/index.d.ts.map +1 -0
- package/cloud/applications/index.js +54 -0
- package/cloud/applications/lib/apps.d.ts +78 -0
- package/cloud/applications/lib/apps.d.ts.map +1 -0
- package/cloud/applications/lib/apps.js +96 -0
- package/cloud/applications/lib/one-time-app-api-key.d.ts +12 -0
- package/cloud/applications/lib/one-time-app-api-key.d.ts.map +1 -0
- package/cloud/applications/lib/one-time-app-api-key.js +22 -0
- package/cloud/applications/lib/utils.d.ts +7 -0
- package/cloud/applications/lib/utils.d.ts.map +1 -0
- package/cloud/applications/lib/utils.js +9 -0
- package/cloud/approvals/ApprovalsRoute.d.ts +27 -0
- package/cloud/approvals/ApprovalsRoute.d.ts.map +1 -0
- package/cloud/approvals/ApprovalsRoute.js +45 -0
- package/cloud/approvals/components/approvals-tab.d.ts +14 -0
- package/cloud/approvals/components/approvals-tab.d.ts.map +1 -0
- package/cloud/approvals/components/approvals-tab.js +98 -0
- package/cloud/approvals/components/ballots-tab.d.ts +8 -0
- package/cloud/approvals/components/ballots-tab.d.ts.map +1 -0
- package/cloud/approvals/components/ballots-tab.js +86 -0
- package/cloud/approvals/components/sensitive-tab.d.ts +13 -0
- package/cloud/approvals/components/sensitive-tab.d.ts.map +1 -0
- package/cloud/approvals/components/sensitive-tab.js +50 -0
- package/cloud/approvals/components/status-badge.d.ts +13 -0
- package/cloud/approvals/components/status-badge.d.ts.map +1 -0
- package/cloud/approvals/components/status-badge.js +49 -0
- package/cloud/approvals/index.d.ts +32 -0
- package/cloud/approvals/index.d.ts.map +1 -0
- package/cloud/approvals/index.js +41 -0
- package/cloud/approvals/lib/approvals.d.ts +164 -0
- package/cloud/approvals/lib/approvals.d.ts.map +1 -0
- package/cloud/approvals/lib/approvals.js +186 -0
- package/cloud/approvals/lib/wallet-sign.d.ts +33 -0
- package/cloud/approvals/lib/wallet-sign.d.ts.map +1 -0
- package/cloud/approvals/lib/wallet-sign.js +79 -0
- package/cloud/billing/BillingSection.d.ts +18 -0
- package/cloud/billing/BillingSection.d.ts.map +1 -0
- package/cloud/billing/BillingSection.js +52 -0
- package/cloud/billing/BillingSuccessPage.d.ts +13 -0
- package/cloud/billing/BillingSuccessPage.d.ts.map +1 -0
- package/cloud/billing/BillingSuccessPage.js +78 -0
- package/cloud/billing/InvoiceDetailPage.d.ts +7 -0
- package/cloud/billing/InvoiceDetailPage.d.ts.map +1 -0
- package/cloud/billing/InvoiceDetailPage.js +38 -0
- package/cloud/billing/components/auto-top-up-card.d.ts +12 -0
- package/cloud/billing/components/auto-top-up-card.d.ts.map +1 -0
- package/cloud/billing/components/auto-top-up-card.js +137 -0
- package/cloud/billing/components/billing-tab.d.ts +18 -0
- package/cloud/billing/components/billing-tab.d.ts.map +1 -0
- package/cloud/billing/components/billing-tab.js +222 -0
- package/cloud/billing/components/direct-crypto-credit-card.d.ts +14 -0
- package/cloud/billing/components/direct-crypto-credit-card.d.ts.map +1 -0
- package/cloud/billing/components/direct-crypto-credit-card.js +329 -0
- package/cloud/billing/components/invoice-detail-client.d.ts +12 -0
- package/cloud/billing/components/invoice-detail-client.d.ts.map +1 -0
- package/cloud/billing/components/invoice-detail-client.js +81 -0
- package/cloud/billing/components/numeric-field.d.ts +13 -0
- package/cloud/billing/components/numeric-field.d.ts.map +1 -0
- package/cloud/billing/components/numeric-field.js +7 -0
- package/cloud/billing/components/pay-as-you-go-card.d.ts +11 -0
- package/cloud/billing/components/pay-as-you-go-card.d.ts.map +1 -0
- package/cloud/billing/components/pay-as-you-go-card.js +50 -0
- package/cloud/billing/components/payment-waiting-overlay.d.ts +36 -0
- package/cloud/billing/components/payment-waiting-overlay.d.ts.map +1 -0
- package/cloud/billing/components/payment-waiting-overlay.js +138 -0
- package/cloud/billing/components/success-client.d.ts +11 -0
- package/cloud/billing/components/success-client.d.ts.map +1 -0
- package/cloud/billing/components/success-client.js +64 -0
- package/cloud/billing/data/billing-data.d.ts +211 -0
- package/cloud/billing/data/billing-data.d.ts.map +1 -0
- package/cloud/billing/data/billing-data.js +120 -0
- package/cloud/billing/index.d.ts +26 -0
- package/cloud/billing/index.d.ts.map +1 -0
- package/cloud/billing/index.js +28 -0
- package/cloud/billing/routes.d.ts +16 -0
- package/cloud/billing/routes.d.ts.map +1 -0
- package/cloud/billing/routes.js +34 -0
- package/cloud/billing/types.d.ts +142 -0
- package/cloud/billing/types.d.ts.map +1 -0
- package/cloud/billing/types.js +12 -0
- package/cloud/billing/use-session-auth.d.ts +43 -0
- package/cloud/billing/use-session-auth.d.ts.map +1 -0
- package/cloud/billing/use-session-auth.js +138 -0
- package/cloud/billing/wallet/ConditionalWalletProviders.d.ts +18 -0
- package/cloud/billing/wallet/ConditionalWalletProviders.d.ts.map +1 -0
- package/cloud/billing/wallet/ConditionalWalletProviders.js +79 -0
- package/cloud/billing/wallet/steward-wallet-providers.d.ts +17 -0
- package/cloud/billing/wallet/steward-wallet-providers.d.ts.map +1 -0
- package/cloud/billing/wallet/steward-wallet-providers.js +59 -0
- package/cloud/connectors/CloudConnectorsSection.d.ts +12 -0
- package/cloud/connectors/CloudConnectorsSection.d.ts.map +1 -0
- package/cloud/connectors/CloudConnectorsSection.js +33 -0
- package/cloud/connectors/blooio-connection.d.ts +10 -0
- package/cloud/connectors/blooio-connection.d.ts.map +1 -0
- package/cloud/connectors/blooio-connection.js +230 -0
- package/cloud/connectors/discord-gateway-connection.d.ts +11 -0
- package/cloud/connectors/discord-gateway-connection.d.ts.map +1 -0
- package/cloud/connectors/discord-gateway-connection.js +480 -0
- package/cloud/connectors/google-connection.d.ts +10 -0
- package/cloud/connectors/google-connection.d.ts.map +1 -0
- package/cloud/connectors/google-connection.js +109 -0
- package/cloud/connectors/index.d.ts +50 -0
- package/cloud/connectors/index.d.ts.map +1 -0
- package/cloud/connectors/index.js +74 -0
- package/cloud/connectors/microsoft-connection.d.ts +10 -0
- package/cloud/connectors/microsoft-connection.d.ts.map +1 -0
- package/cloud/connectors/microsoft-connection.js +133 -0
- package/cloud/connectors/oauth-connection.d.ts +52 -0
- package/cloud/connectors/oauth-connection.d.ts.map +1 -0
- package/cloud/connectors/oauth-connection.js +114 -0
- package/cloud/connectors/telegram-connection.d.ts +11 -0
- package/cloud/connectors/telegram-connection.d.ts.map +1 -0
- package/cloud/connectors/telegram-connection.js +158 -0
- package/cloud/connectors/twilio-connection.d.ts +10 -0
- package/cloud/connectors/twilio-connection.d.ts.map +1 -0
- package/cloud/connectors/twilio-connection.js +189 -0
- package/cloud/connectors/use-connection-status.d.ts +13 -0
- package/cloud/connectors/use-connection-status.d.ts.map +1 -0
- package/cloud/connectors/use-connection-status.js +45 -0
- package/cloud/connectors/whatsapp-connection.d.ts +11 -0
- package/cloud/connectors/whatsapp-connection.d.ts.map +1 -0
- package/cloud/connectors/whatsapp-connection.js +223 -0
- package/cloud/documents/DocumentsRoute.d.ts +21 -0
- package/cloud/documents/DocumentsRoute.d.ts.map +1 -0
- package/cloud/documents/DocumentsRoute.js +45 -0
- package/cloud/documents/DocumentsSection.d.ts +15 -0
- package/cloud/documents/DocumentsSection.d.ts.map +1 -0
- package/cloud/documents/DocumentsSection.js +18 -0
- package/cloud/documents/components/document-list.d.ts +19 -0
- package/cloud/documents/components/document-list.d.ts.map +1 -0
- package/cloud/documents/components/document-list.js +75 -0
- package/cloud/documents/components/document-query.d.ts +15 -0
- package/cloud/documents/components/document-query.d.ts.map +1 -0
- package/cloud/documents/components/document-query.js +92 -0
- package/cloud/documents/components/document-upload.d.ts +16 -0
- package/cloud/documents/components/document-upload.d.ts.map +1 -0
- package/cloud/documents/components/document-upload.js +180 -0
- package/cloud/documents/components/documents-page-client.d.ts +20 -0
- package/cloud/documents/components/documents-page-client.d.ts.map +1 -0
- package/cloud/documents/components/documents-page-client.js +80 -0
- package/cloud/documents/index.d.ts +37 -0
- package/cloud/documents/index.d.ts.map +1 -0
- package/cloud/documents/index.js +45 -0
- package/cloud/documents/lib/agents.d.ts +23 -0
- package/cloud/documents/lib/agents.d.ts.map +1 -0
- package/cloud/documents/lib/agents.js +26 -0
- package/cloud/documents/lib/documents.d.ts +54 -0
- package/cloud/documents/lib/documents.d.ts.map +1 -0
- package/cloud/documents/lib/documents.js +118 -0
- package/cloud/handoff/__integration__/two-agent-handoff.d.mts +2 -0
- package/cloud/handoff/__integration__/two-agent-handoff.d.mts.map +1 -0
- package/cloud/handoff/__integration__/two-agent-handoff.mjs +114 -0
- package/cloud/handoff/cloud-handoff-supervisor.d.ts +47 -0
- package/cloud/handoff/cloud-handoff-supervisor.d.ts.map +1 -0
- package/cloud/handoff/cloud-handoff-supervisor.js +67 -0
- package/cloud/handoff/conversation-handoff.d.ts +73 -0
- package/cloud/handoff/conversation-handoff.d.ts.map +1 -0
- package/cloud/handoff/conversation-handoff.js +98 -0
- package/cloud/handoff/run-cloud-agent-handoff.d.ts +18 -0
- package/cloud/handoff/run-cloud-agent-handoff.d.ts.map +1 -0
- package/cloud/handoff/run-cloud-agent-handoff.js +51 -0
- package/cloud/index.d.ts +14 -0
- package/cloud/index.d.ts.map +1 -0
- package/cloud/index.js +13 -0
- package/cloud/instances/AgentChatPage.d.ts +13 -0
- package/cloud/instances/AgentChatPage.d.ts.map +1 -0
- package/cloud/instances/AgentChatPage.js +217 -0
- package/cloud/instances/AgentDetailPage.d.ts +6 -0
- package/cloud/instances/AgentDetailPage.d.ts.map +1 -0
- package/cloud/instances/AgentDetailPage.js +169 -0
- package/cloud/instances/AgentsPage.d.ts +6 -0
- package/cloud/instances/AgentsPage.d.ts.map +1 -0
- package/cloud/instances/AgentsPage.js +50 -0
- package/cloud/instances/MyAgentsPage.d.ts +7 -0
- package/cloud/instances/MyAgentsPage.d.ts.map +1 -0
- package/cloud/instances/MyAgentsPage.js +22 -0
- package/cloud/instances/components/agent-actions.d.ts +10 -0
- package/cloud/instances/components/agent-actions.d.ts.map +1 -0
- package/cloud/instances/components/agent-actions.js +231 -0
- package/cloud/instances/components/agent-card.d.ts +37 -0
- package/cloud/instances/components/agent-card.d.ts.map +1 -0
- package/cloud/instances/components/agent-card.js +291 -0
- package/cloud/instances/components/agent-cost-badge.d.ts +10 -0
- package/cloud/instances/components/agent-cost-badge.d.ts.map +1 -0
- package/cloud/instances/components/agent-cost-badge.js +25 -0
- package/cloud/instances/components/character-filters.d.ts +23 -0
- package/cloud/instances/components/character-filters.d.ts.map +1 -0
- package/cloud/instances/components/character-filters.js +36 -0
- package/cloud/instances/components/character-library-grid.d.ts +18 -0
- package/cloud/instances/components/character-library-grid.d.ts.map +1 -0
- package/cloud/instances/components/character-library-grid.js +17 -0
- package/cloud/instances/components/create-eliza-agent-dialog.d.ts +10 -0
- package/cloud/instances/components/create-eliza-agent-dialog.d.ts.map +1 -0
- package/cloud/instances/components/create-eliza-agent-dialog.js +376 -0
- package/cloud/instances/components/docker-logs-viewer.d.ts +8 -0
- package/cloud/instances/components/docker-logs-viewer.d.ts.map +1 -0
- package/cloud/instances/components/docker-logs-viewer.js +108 -0
- package/cloud/instances/components/eliza-agent-backups-panel.d.ts +8 -0
- package/cloud/instances/components/eliza-agent-backups-panel.d.ts.map +1 -0
- package/cloud/instances/components/eliza-agent-backups-panel.js +112 -0
- package/cloud/instances/components/eliza-agent-logs-viewer.d.ts +9 -0
- package/cloud/instances/components/eliza-agent-logs-viewer.d.ts.map +1 -0
- package/cloud/instances/components/eliza-agent-logs-viewer.js +180 -0
- package/cloud/instances/components/eliza-agent-pricing-banner.d.ts +13 -0
- package/cloud/instances/components/eliza-agent-pricing-banner.d.ts.map +1 -0
- package/cloud/instances/components/eliza-agent-pricing-banner.js +47 -0
- package/cloud/instances/components/eliza-agent-tabs.d.ts +8 -0
- package/cloud/instances/components/eliza-agent-tabs.d.ts.map +1 -0
- package/cloud/instances/components/eliza-agent-tabs.js +27 -0
- package/cloud/instances/components/eliza-agents-table.d.ts +25 -0
- package/cloud/instances/components/eliza-agents-table.d.ts.map +1 -0
- package/cloud/instances/components/eliza-agents-table.js +536 -0
- package/cloud/instances/components/eliza-connect-button.d.ts +6 -0
- package/cloud/instances/components/eliza-connect-button.d.ts.map +1 -0
- package/cloud/instances/components/eliza-connect-button.js +10 -0
- package/cloud/instances/components/eliza-policies-section.d.ts +6 -0
- package/cloud/instances/components/eliza-policies-section.d.ts.map +1 -0
- package/cloud/instances/components/eliza-policies-section.js +71 -0
- package/cloud/instances/components/eliza-transactions-section.d.ts +6 -0
- package/cloud/instances/components/eliza-transactions-section.d.ts.map +1 -0
- package/cloud/instances/components/eliza-transactions-section.js +147 -0
- package/cloud/instances/components/eliza-wallet-section.d.ts +6 -0
- package/cloud/instances/components/eliza-wallet-section.d.ts.map +1 -0
- package/cloud/instances/components/eliza-wallet-section.js +125 -0
- package/cloud/instances/components/empty-state.d.ts +6 -0
- package/cloud/instances/components/empty-state.d.ts.map +1 -0
- package/cloud/instances/components/empty-state.js +23 -0
- package/cloud/instances/components/my-agents.d.ts +8 -0
- package/cloud/instances/components/my-agents.d.ts.map +1 -0
- package/cloud/instances/components/my-agents.js +268 -0
- package/cloud/instances/components/types.d.ts +3 -0
- package/cloud/instances/components/types.d.ts.map +1 -0
- package/cloud/instances/components/types.js +1 -0
- package/cloud/instances/index.d.ts +36 -0
- package/cloud/instances/index.d.ts.map +1 -0
- package/cloud/instances/index.js +58 -0
- package/cloud/instances/lib/auth-query.d.ts +16 -0
- package/cloud/instances/lib/auth-query.d.ts.map +1 -0
- package/cloud/instances/lib/auth-query.js +20 -0
- package/cloud/instances/lib/data/credits.d.ts +14 -0
- package/cloud/instances/lib/data/credits.d.ts.map +1 -0
- package/cloud/instances/lib/data/credits.js +21 -0
- package/cloud/instances/lib/data/eliza-agents.d.ts +12 -0
- package/cloud/instances/lib/data/eliza-agents.d.ts.map +1 -0
- package/cloud/instances/lib/data/eliza-agents.js +33 -0
- package/cloud/instances/lib/i18n.d.ts +11 -0
- package/cloud/instances/lib/i18n.d.ts.map +1 -0
- package/cloud/instances/lib/i18n.js +10 -0
- package/cloud/instances/lib/open-web-ui.d.ts +14 -0
- package/cloud/instances/lib/open-web-ui.d.ts.map +1 -0
- package/cloud/instances/lib/open-web-ui.js +88 -0
- package/cloud/instances/lib/sandbox-status.d.ts +18 -0
- package/cloud/instances/lib/sandbox-status.d.ts.map +1 -0
- package/cloud/instances/lib/sandbox-status.js +54 -0
- package/cloud/instances/lib/use-job-poller.d.ts +34 -0
- package/cloud/instances/lib/use-job-poller.d.ts.map +1 -0
- package/cloud/instances/lib/use-job-poller.js +146 -0
- package/cloud/instances/lib/use-sandbox-status-poll.d.ts +50 -0
- package/cloud/instances/lib/use-sandbox-status-poll.d.ts.map +1 -0
- package/cloud/instances/lib/use-sandbox-status-poll.js +179 -0
- package/cloud/instances/lib/use-session-auth.d.ts +44 -0
- package/cloud/instances/lib/use-session-auth.d.ts.map +1 -0
- package/cloud/instances/lib/use-session-auth.js +141 -0
- package/cloud/join/JoinPage.d.ts +19 -0
- package/cloud/join/JoinPage.d.ts.map +1 -0
- package/cloud/join/JoinPage.js +128 -0
- package/cloud/join/index.d.ts +19 -0
- package/cloud/join/index.d.ts.map +1 -0
- package/cloud/join/index.js +18 -0
- package/cloud/join/lib/resolve-cloud-connection.d.ts +21 -0
- package/cloud/join/lib/resolve-cloud-connection.d.ts.map +1 -0
- package/cloud/join/lib/resolve-cloud-connection.js +29 -0
- package/cloud/join/lib/run-join-flow.d.ts +95 -0
- package/cloud/join/lib/run-join-flow.d.ts.map +1 -0
- package/cloud/join/lib/run-join-flow.js +98 -0
- package/cloud/join/lib/use-join-session.d.ts +18 -0
- package/cloud/join/lib/use-join-session.d.ts.map +1 -0
- package/cloud/join/lib/use-join-session.js +62 -0
- package/cloud/join/register.d.ts +17 -0
- package/cloud/join/register.d.ts.map +1 -0
- package/cloud/join/register.js +29 -0
- package/cloud/lib/api-client.d.ts +33 -0
- package/cloud/lib/api-client.d.ts.map +1 -0
- package/cloud/lib/api-client.js +160 -0
- package/cloud/lib/auth-query.d.ts +19 -0
- package/cloud/lib/auth-query.d.ts.map +1 -0
- package/cloud/lib/auth-query.js +23 -0
- package/cloud/lib/format-usd.d.ts +9 -0
- package/cloud/lib/format-usd.d.ts.map +1 -0
- package/cloud/lib/format-usd.js +16 -0
- package/cloud/lib/jwt.d.ts +26 -0
- package/cloud/lib/jwt.d.ts.map +1 -0
- package/cloud/lib/jwt.js +34 -0
- package/cloud/lib/query-client.d.ts +9 -0
- package/cloud/lib/query-client.d.ts.map +1 -0
- package/cloud/lib/query-client.js +27 -0
- package/cloud/lib/steward-session.d.ts +28 -0
- package/cloud/lib/steward-session.d.ts.map +1 -0
- package/cloud/lib/steward-session.js +29 -0
- package/cloud/lib/use-copy-feedback.d.ts +5 -0
- package/cloud/lib/use-copy-feedback.d.ts.map +1 -0
- package/cloud/lib/use-copy-feedback.js +15 -0
- package/cloud/lib/use-document-title.d.ts +2 -0
- package/cloud/lib/use-document-title.d.ts.map +1 -0
- package/cloud/lib/use-document-title.js +19 -0
- package/cloud/lib/use-session-auth.d.ts +31 -0
- package/cloud/lib/use-session-auth.d.ts.map +1 -0
- package/cloud/lib/use-session-auth.js +100 -0
- package/cloud/mcps/McpDetailDrawer.d.ts +20 -0
- package/cloud/mcps/McpDetailDrawer.d.ts.map +1 -0
- package/cloud/mcps/McpDetailDrawer.js +155 -0
- package/cloud/mcps/McpEditorDialog.d.ts +22 -0
- package/cloud/mcps/McpEditorDialog.d.ts.map +1 -0
- package/cloud/mcps/McpEditorDialog.js +224 -0
- package/cloud/mcps/McpsRoute.d.ts +12 -0
- package/cloud/mcps/McpsRoute.d.ts.map +1 -0
- package/cloud/mcps/McpsRoute.js +28 -0
- package/cloud/mcps/McpsSection.d.ts +10 -0
- package/cloud/mcps/McpsSection.d.ts.map +1 -0
- package/cloud/mcps/McpsSection.js +13 -0
- package/cloud/mcps/McpsView.d.ts +13 -0
- package/cloud/mcps/McpsView.d.ts.map +1 -0
- package/cloud/mcps/McpsView.js +149 -0
- package/cloud/mcps/index.d.ts +53 -0
- package/cloud/mcps/index.d.ts.map +1 -0
- package/cloud/mcps/index.js +77 -0
- package/cloud/mcps/lib/api-types.d.ts +213 -0
- package/cloud/mcps/lib/api-types.d.ts.map +1 -0
- package/cloud/mcps/lib/api-types.js +17 -0
- package/cloud/mcps/lib/mcp-mutations.d.ts +17 -0
- package/cloud/mcps/lib/mcp-mutations.d.ts.map +1 -0
- package/cloud/mcps/lib/mcp-mutations.js +82 -0
- package/cloud/mcps/lib/test-connection.d.ts +30 -0
- package/cloud/mcps/lib/test-connection.d.ts.map +1 -0
- package/cloud/mcps/lib/test-connection.js +140 -0
- package/cloud/mcps/lib/use-mcps.d.ts +30 -0
- package/cloud/mcps/lib/use-mcps.d.ts.map +1 -0
- package/cloud/mcps/lib/use-mcps.js +67 -0
- package/cloud/monetization/MonetizationRoute.d.ts +9 -0
- package/cloud/monetization/MonetizationRoute.d.ts.map +1 -0
- package/cloud/monetization/MonetizationRoute.js +19 -0
- package/cloud/monetization/MonetizationSection.d.ts +19 -0
- package/cloud/monetization/MonetizationSection.d.ts.map +1 -0
- package/cloud/monetization/MonetizationSection.js +34 -0
- package/cloud/monetization/affiliates/AffiliatesPageClient.d.ts +18 -0
- package/cloud/monetization/affiliates/AffiliatesPageClient.d.ts.map +1 -0
- package/cloud/monetization/affiliates/AffiliatesPageClient.js +249 -0
- package/cloud/monetization/affiliates/AffiliatesRoute.d.ts +19 -0
- package/cloud/monetization/affiliates/AffiliatesRoute.d.ts.map +1 -0
- package/cloud/monetization/affiliates/AffiliatesRoute.js +42 -0
- package/cloud/monetization/affiliates/referral-me.d.ts +27 -0
- package/cloud/monetization/affiliates/referral-me.d.ts.map +1 -0
- package/cloud/monetization/affiliates/referral-me.js +69 -0
- package/cloud/monetization/affiliates/use-dashboard-referral-me.d.ts +19 -0
- package/cloud/monetization/affiliates/use-dashboard-referral-me.d.ts.map +1 -0
- package/cloud/monetization/affiliates/use-dashboard-referral-me.js +49 -0
- package/cloud/monetization/auth-gate.d.ts +27 -0
- package/cloud/monetization/auth-gate.d.ts.map +1 -0
- package/cloud/monetization/auth-gate.js +60 -0
- package/cloud/monetization/earnings/EarningsPageClient.d.ts +24 -0
- package/cloud/monetization/earnings/EarningsPageClient.d.ts.map +1 -0
- package/cloud/monetization/earnings/EarningsPageClient.js +311 -0
- package/cloud/monetization/earnings/EarningsRoute.d.ts +19 -0
- package/cloud/monetization/earnings/EarningsRoute.d.ts.map +1 -0
- package/cloud/monetization/earnings/EarningsRoute.js +44 -0
- package/cloud/monetization/index.d.ts +43 -0
- package/cloud/monetization/index.d.ts.map +1 -0
- package/cloud/monetization/index.js +64 -0
- package/cloud/monetization/lib/clipboard.d.ts +21 -0
- package/cloud/monetization/lib/clipboard.d.ts.map +1 -0
- package/cloud/monetization/lib/clipboard.js +55 -0
- package/cloud/organization/OrganizationPage.d.ts +12 -0
- package/cloud/organization/OrganizationPage.d.ts.map +1 -0
- package/cloud/organization/OrganizationPage.js +15 -0
- package/cloud/organization/OrganizationSection.d.ts +15 -0
- package/cloud/organization/OrganizationSection.d.ts.map +1 -0
- package/cloud/organization/OrganizationSection.js +31 -0
- package/cloud/organization/data/cloud-org-types.d.ts +66 -0
- package/cloud/organization/data/cloud-org-types.d.ts.map +1 -0
- package/cloud/organization/data/cloud-org-types.js +19 -0
- package/cloud/organization/data/use-organization.d.ts +44 -0
- package/cloud/organization/data/use-organization.d.ts.map +1 -0
- package/cloud/organization/data/use-organization.js +124 -0
- package/cloud/organization/index.d.ts +30 -0
- package/cloud/organization/index.d.ts.map +1 -0
- package/cloud/organization/index.js +29 -0
- package/cloud/organization/invite-member-dialog.d.ts +26 -0
- package/cloud/organization/invite-member-dialog.d.ts.map +1 -0
- package/cloud/organization/invite-member-dialog.js +58 -0
- package/cloud/organization/members-list.d.ts +27 -0
- package/cloud/organization/members-list.d.ts.map +1 -0
- package/cloud/organization/members-list.js +96 -0
- package/cloud/organization/members-tab.d.ts +19 -0
- package/cloud/organization/members-tab.d.ts.map +1 -0
- package/cloud/organization/members-tab.js +99 -0
- package/cloud/organization/organization-general-tab.d.ts +17 -0
- package/cloud/organization/organization-general-tab.d.ts.map +1 -0
- package/cloud/organization/organization-general-tab.js +17 -0
- package/cloud/organization/organization-tab.d.ts +17 -0
- package/cloud/organization/organization-tab.d.ts.map +1 -0
- package/cloud/organization/organization-tab.js +23 -0
- package/cloud/organization/pending-invites-list.d.ts +19 -0
- package/cloud/organization/pending-invites-list.d.ts.map +1 -0
- package/cloud/organization/pending-invites-list.js +64 -0
- package/cloud/organization/routes.d.ts +18 -0
- package/cloud/organization/routes.d.ts.map +1 -0
- package/cloud/organization/routes.js +23 -0
- package/cloud/public-pages/index.d.ts +36 -0
- package/cloud/public-pages/index.d.ts.map +1 -0
- package/cloud/public-pages/index.js +35 -0
- package/cloud/public-pages/lib/error-message.d.ts +3 -0
- package/cloud/public-pages/lib/error-message.d.ts.map +1 -0
- package/cloud/public-pages/lib/error-message.js +4 -0
- package/cloud/public-pages/lib/login-return-to.d.ts +15 -0
- package/cloud/public-pages/lib/login-return-to.d.ts.map +1 -0
- package/cloud/public-pages/lib/login-return-to.js +76 -0
- package/cloud/public-pages/lib/steward-oauth-url.d.ts +25 -0
- package/cloud/public-pages/lib/steward-oauth-url.d.ts.map +1 -0
- package/cloud/public-pages/lib/steward-oauth-url.js +32 -0
- package/cloud/public-pages/lib/steward-session.d.ts +54 -0
- package/cloud/public-pages/lib/steward-session.d.ts.map +1 -0
- package/cloud/public-pages/lib/steward-session.js +143 -0
- package/cloud/public-pages/lib/use-page-title.d.ts +18 -0
- package/cloud/public-pages/lib/use-page-title.d.ts.map +1 -0
- package/cloud/public-pages/lib/use-page-title.js +40 -0
- package/cloud/public-pages/lib/use-session-auth.d.ts +40 -0
- package/cloud/public-pages/lib/use-session-auth.d.ts.map +1 -0
- package/cloud/public-pages/lib/use-session-auth.js +135 -0
- package/cloud/public-pages/pages/app-auth/app-authorize-page.d.ts +7 -0
- package/cloud/public-pages/pages/app-auth/app-authorize-page.d.ts.map +1 -0
- package/cloud/public-pages/pages/app-auth/app-authorize-page.js +17 -0
- package/cloud/public-pages/pages/approve/approval-page.d.ts +9 -0
- package/cloud/public-pages/pages/approve/approval-page.d.ts.map +1 -0
- package/cloud/public-pages/pages/approve/approval-page.js +171 -0
- package/cloud/public-pages/pages/auth/auth-error-page.d.ts +7 -0
- package/cloud/public-pages/pages/auth/auth-error-page.d.ts.map +1 -0
- package/cloud/public-pages/pages/auth/auth-error-page.js +50 -0
- package/cloud/public-pages/pages/auth/auth-success-page.d.ts +7 -0
- package/cloud/public-pages/pages/auth/auth-success-page.d.ts.map +1 -0
- package/cloud/public-pages/pages/auth/auth-success-page.js +72 -0
- package/cloud/public-pages/pages/auth/cli-login-page.d.ts +8 -0
- package/cloud/public-pages/pages/auth/cli-login-page.d.ts.map +1 -0
- package/cloud/public-pages/pages/auth/cli-login-page.js +213 -0
- package/cloud/public-pages/pages/auth/email-callback-page.d.ts +8 -0
- package/cloud/public-pages/pages/auth/email-callback-page.d.ts.map +1 -0
- package/cloud/public-pages/pages/auth/email-callback-page.js +104 -0
- package/cloud/public-pages/pages/ballot/ballot-page.d.ts +8 -0
- package/cloud/public-pages/pages/ballot/ballot-page.d.ts.map +1 -0
- package/cloud/public-pages/pages/ballot/ballot-page.js +126 -0
- package/cloud/public-pages/pages/bsc-page.d.ts +16 -0
- package/cloud/public-pages/pages/bsc-page.d.ts.map +1 -0
- package/cloud/public-pages/pages/bsc-page.js +58 -0
- package/cloud/public-pages/pages/chat/public-chat-page.d.ts +17 -0
- package/cloud/public-pages/pages/chat/public-chat-page.d.ts.map +1 -0
- package/cloud/public-pages/pages/chat/public-chat-page.js +100 -0
- package/cloud/public-pages/pages/invite/invite-accept-page.d.ts +12 -0
- package/cloud/public-pages/pages/invite/invite-accept-page.d.ts.map +1 -0
- package/cloud/public-pages/pages/invite/invite-accept-page.js +162 -0
- package/cloud/public-pages/pages/legal/privacy-policy-page.d.ts +7 -0
- package/cloud/public-pages/pages/legal/privacy-policy-page.d.ts.map +1 -0
- package/cloud/public-pages/pages/legal/privacy-policy-page.js +116 -0
- package/cloud/public-pages/pages/legal/terms-of-service-page.d.ts +10 -0
- package/cloud/public-pages/pages/legal/terms-of-service-page.d.ts.map +1 -0
- package/cloud/public-pages/pages/legal/terms-of-service-page.js +109 -0
- package/cloud/public-pages/pages/login/login-page.d.ts +7 -0
- package/cloud/public-pages/pages/login/login-page.d.ts.map +1 -0
- package/cloud/public-pages/pages/login/login-page.js +27 -0
- package/cloud/public-pages/pages/login/steward-login-section.d.ts +16 -0
- package/cloud/public-pages/pages/login/steward-login-section.d.ts.map +1 -0
- package/cloud/public-pages/pages/login/steward-login-section.js +448 -0
- package/cloud/public-pages/pages/payment/app-charge-page.d.ts +9 -0
- package/cloud/public-pages/pages/payment/app-charge-page.d.ts.map +1 -0
- package/cloud/public-pages/pages/payment/app-charge-page.js +200 -0
- package/cloud/public-pages/pages/payment/payment-navigation.d.ts +3 -0
- package/cloud/public-pages/pages/payment/payment-navigation.d.ts.map +1 -0
- package/cloud/public-pages/pages/payment/payment-navigation.js +4 -0
- package/cloud/public-pages/pages/payment/payment-request-page.d.ts +10 -0
- package/cloud/public-pages/pages/payment/payment-request-page.d.ts.map +1 -0
- package/cloud/public-pages/pages/payment/payment-request-page.js +142 -0
- package/cloud/public-pages/pages/payment/payment-success-page.d.ts +9 -0
- package/cloud/public-pages/pages/payment/payment-success-page.d.ts.map +1 -0
- package/cloud/public-pages/pages/payment/payment-success-page.js +57 -0
- package/cloud/public-pages/pages/sensitive-requests/sensitive-request-page.d.ts +9 -0
- package/cloud/public-pages/pages/sensitive-requests/sensitive-request-page.d.ts.map +1 -0
- package/cloud/public-pages/pages/sensitive-requests/sensitive-request-page.js +199 -0
- package/cloud/public-pages/register.d.ts +20 -0
- package/cloud/public-pages/register.d.ts.map +1 -0
- package/cloud/public-pages/register.js +158 -0
- package/cloud/register-all.d.ts +26 -0
- package/cloud/register-all.d.ts.map +1 -0
- package/cloud/register-all.js +55 -0
- package/cloud/settings/CloudSettingsSectionShell.d.ts +39 -0
- package/cloud/settings/CloudSettingsSectionShell.d.ts.map +1 -0
- package/cloud/settings/CloudSettingsSectionShell.js +50 -0
- package/cloud/settings/cloud-settings-group.d.ts +35 -0
- package/cloud/settings/cloud-settings-group.d.ts.map +1 -0
- package/cloud/settings/cloud-settings-group.js +43 -0
- package/cloud/settings/index.d.ts +14 -0
- package/cloud/settings/index.d.ts.map +1 -0
- package/cloud/settings/index.js +13 -0
- package/cloud/settings/register-cloud-settings.d.ts +33 -0
- package/cloud/settings/register-cloud-settings.d.ts.map +1 -0
- package/cloud/settings/register-cloud-settings.js +161 -0
- package/cloud/settings/sections.d.ts +29 -0
- package/cloud/settings/sections.d.ts.map +1 -0
- package/cloud/settings/sections.js +74 -0
- package/cloud/shell/CloudI18nProvider.d.ts +32 -0
- package/cloud/shell/CloudI18nProvider.d.ts.map +1 -0
- package/cloud/shell/CloudI18nProvider.js +88 -0
- package/cloud/shell/CloudRouterShell.d.ts +39 -0
- package/cloud/shell/CloudRouterShell.d.ts.map +1 -0
- package/cloud/shell/CloudRouterShell.js +109 -0
- package/cloud/shell/StewardProvider.d.ts +25 -0
- package/cloud/shell/StewardProvider.d.ts.map +1 -0
- package/cloud/shell/StewardProvider.js +86 -0
- package/cloud/shell/StewardProviderRuntime.d.ts +19 -0
- package/cloud/shell/StewardProviderRuntime.d.ts.map +1 -0
- package/cloud/shell/StewardProviderRuntime.js +209 -0
- package/cloud/shell/StewardProviderShared.d.ts +27 -0
- package/cloud/shell/StewardProviderShared.d.ts.map +1 -0
- package/cloud/shell/StewardProviderShared.js +112 -0
- package/cloud/shell/cloud-route-registry.d.ts +41 -0
- package/cloud/shell/cloud-route-registry.d.ts.map +1 -0
- package/cloud/shell/cloud-route-registry.js +41 -0
- package/cloud/shell/steward-url.d.ts +12 -0
- package/cloud/shell/steward-url.d.ts.map +1 -0
- package/cloud/shell/steward-url.js +63 -0
- package/cloud-ui/components/ai-elements/eliza-avatar.d.ts +11 -0
- package/cloud-ui/components/ai-elements/eliza-avatar.d.ts.map +1 -0
- package/cloud-ui/components/ai-elements/eliza-avatar.js +102 -0
- package/cloud-ui/components/ai-elements/hooks/use-typewriter-text.d.ts +9 -0
- package/cloud-ui/components/ai-elements/hooks/use-typewriter-text.d.ts.map +1 -0
- package/cloud-ui/components/ai-elements/hooks/use-typewriter-text.js +88 -0
- package/cloud-ui/components/ai-elements/index.d.ts +4 -0
- package/cloud-ui/components/ai-elements/index.d.ts.map +1 -0
- package/cloud-ui/components/ai-elements/index.js +3 -0
- package/cloud-ui/components/ai-elements/memoized-chat-message.d.ts +39 -0
- package/cloud-ui/components/ai-elements/memoized-chat-message.d.ts.map +1 -0
- package/cloud-ui/components/ai-elements/memoized-chat-message.js +250 -0
- package/cloud-ui/components/analytics/cost-alerts.d.ts +9 -0
- package/cloud-ui/components/analytics/cost-alerts.d.ts.map +1 -0
- package/cloud-ui/components/analytics/cost-alerts.js +42 -0
- package/cloud-ui/components/analytics/cost-insights-card.d.ts +8 -0
- package/cloud-ui/components/analytics/cost-insights-card.d.ts.map +1 -0
- package/cloud-ui/components/analytics/cost-insights-card.js +20 -0
- package/cloud-ui/components/analytics/export-button.d.ts +20 -0
- package/cloud-ui/components/analytics/export-button.d.ts.map +1 -0
- package/cloud-ui/components/analytics/export-button.js +32 -0
- package/cloud-ui/components/analytics/index.d.ts +4 -0
- package/cloud-ui/components/analytics/index.d.ts.map +1 -0
- package/cloud-ui/components/analytics/index.js +3 -0
- package/cloud-ui/components/api-key-empty-state.d.ts +6 -0
- package/cloud-ui/components/api-key-empty-state.d.ts.map +1 -0
- package/cloud-ui/components/api-key-empty-state.js +10 -0
- package/cloud-ui/components/auth/authorize-content.d.ts +2 -0
- package/cloud-ui/components/auth/authorize-content.d.ts.map +1 -0
- package/cloud-ui/components/auth/authorize-content.js +181 -0
- package/cloud-ui/components/auth/authorize-return.d.ts +17 -0
- package/cloud-ui/components/auth/authorize-return.d.ts.map +1 -0
- package/cloud-ui/components/auth/authorize-return.js +76 -0
- package/cloud-ui/components/brand/brand-button.d.ts +17 -0
- package/cloud-ui/components/brand/brand-button.d.ts.map +1 -0
- package/cloud-ui/components/brand/brand-button.js +37 -0
- package/cloud-ui/components/brand/brand-card.d.ts +31 -0
- package/cloud-ui/components/brand/brand-card.d.ts.map +1 -0
- package/cloud-ui/components/brand/brand-card.js +24 -0
- package/cloud-ui/components/brand/brand-tabs-responsive.d.ts +40 -0
- package/cloud-ui/components/brand/brand-tabs-responsive.d.ts.map +1 -0
- package/cloud-ui/components/brand/brand-tabs-responsive.js +38 -0
- package/cloud-ui/components/brand/brand-tabs.d.ts +19 -0
- package/cloud-ui/components/brand/brand-tabs.d.ts.map +1 -0
- package/cloud-ui/components/brand/brand-tabs.js +20 -0
- package/cloud-ui/components/brand/corner-brackets.d.ts +11 -0
- package/cloud-ui/components/brand/corner-brackets.d.ts.map +1 -0
- package/cloud-ui/components/brand/corner-brackets.js +28 -0
- package/cloud-ui/components/brand/dashboard-section.d.ts +11 -0
- package/cloud-ui/components/brand/dashboard-section.d.ts.map +1 -0
- package/cloud-ui/components/brand/dashboard-section.js +5 -0
- package/cloud-ui/components/brand/dashboard-stat-card.d.ts +14 -0
- package/cloud-ui/components/brand/dashboard-stat-card.d.ts.map +1 -0
- package/cloud-ui/components/brand/dashboard-stat-card.js +15 -0
- package/cloud-ui/components/brand/eliza-cloud-lockup.d.ts +8 -0
- package/cloud-ui/components/brand/eliza-cloud-lockup.d.ts.map +1 -0
- package/cloud-ui/components/brand/eliza-cloud-lockup.js +5 -0
- package/cloud-ui/components/brand/eliza-logo.d.ts +8 -0
- package/cloud-ui/components/brand/eliza-logo.d.ts.map +1 -0
- package/cloud-ui/components/brand/eliza-logo.js +6 -0
- package/cloud-ui/components/brand/hud-container.d.ts +8 -0
- package/cloud-ui/components/brand/hud-container.d.ts.map +1 -0
- package/cloud-ui/components/brand/hud-container.js +6 -0
- package/cloud-ui/components/brand/index.d.ts +26 -0
- package/cloud-ui/components/brand/index.d.ts.map +1 -0
- package/cloud-ui/components/brand/index.js +20 -0
- package/cloud-ui/components/brand/key-metrics-grid.d.ts +21 -0
- package/cloud-ui/components/brand/key-metrics-grid.d.ts.map +1 -0
- package/cloud-ui/components/brand/key-metrics-grid.js +25 -0
- package/cloud-ui/components/brand/lock-on-button.d.ts +5 -0
- package/cloud-ui/components/brand/lock-on-button.d.ts.map +1 -0
- package/cloud-ui/components/brand/lock-on-button.js +10 -0
- package/cloud-ui/components/brand/lock-on-button.variants.d.ts +11 -0
- package/cloud-ui/components/brand/lock-on-button.variants.d.ts.map +1 -0
- package/cloud-ui/components/brand/lock-on-button.variants.js +20 -0
- package/cloud-ui/components/brand/mini-stat-card.d.ts +9 -0
- package/cloud-ui/components/brand/mini-stat-card.d.ts.map +1 -0
- package/cloud-ui/components/brand/mini-stat-card.js +5 -0
- package/cloud-ui/components/brand/prompt-card.d.ts +17 -0
- package/cloud-ui/components/brand/prompt-card.d.ts.map +1 -0
- package/cloud-ui/components/brand/prompt-card.js +12 -0
- package/cloud-ui/components/brand/section-header.d.ts +17 -0
- package/cloud-ui/components/brand/section-header.d.ts.map +1 -0
- package/cloud-ui/components/brand/section-header.js +16 -0
- package/cloud-ui/components/code/code-display.d.ts +7 -0
- package/cloud-ui/components/code/code-display.d.ts.map +1 -0
- package/cloud-ui/components/code/code-display.js +48 -0
- package/cloud-ui/components/code/index.d.ts +4 -0
- package/cloud-ui/components/code/index.d.ts.map +1 -0
- package/cloud-ui/components/code/index.js +2 -0
- package/cloud-ui/components/code/monaco-editor-skeleton.d.ts +10 -0
- package/cloud-ui/components/code/monaco-editor-skeleton.d.ts.map +1 -0
- package/cloud-ui/components/code/monaco-editor-skeleton.js +10 -0
- package/cloud-ui/components/code/prism-light.d.ts +6 -0
- package/cloud-ui/components/code/prism-light.d.ts.map +1 -0
- package/cloud-ui/components/code/prism-light.js +45 -0
- package/cloud-ui/components/connection-card.d.ts +85 -0
- package/cloud-ui/components/connection-card.d.ts.map +1 -0
- package/cloud-ui/components/connection-card.js +58 -0
- package/cloud-ui/components/dashboard/cloud-dashboard-components.d.ts +33 -0
- package/cloud-ui/components/dashboard/cloud-dashboard-components.d.ts.map +1 -0
- package/cloud-ui/components/dashboard/cloud-dashboard-components.js +78 -0
- package/cloud-ui/components/dashboard/dashboard-route-error.d.ts +8 -0
- package/cloud-ui/components/dashboard/dashboard-route-error.d.ts.map +1 -0
- package/cloud-ui/components/dashboard/dashboard-route-error.helpers.d.ts +7 -0
- package/cloud-ui/components/dashboard/dashboard-route-error.helpers.d.ts.map +1 -0
- package/cloud-ui/components/dashboard/dashboard-route-error.helpers.js +12 -0
- package/cloud-ui/components/dashboard/dashboard-route-error.js +9 -0
- package/cloud-ui/components/dashboard/route-placeholders.d.ts +15 -0
- package/cloud-ui/components/dashboard/route-placeholders.d.ts.map +1 -0
- package/cloud-ui/components/dashboard/route-placeholders.js +19 -0
- package/cloud-ui/components/data-list/api-keys-summary.d.ts +12 -0
- package/cloud-ui/components/data-list/api-keys-summary.d.ts.map +1 -0
- package/cloud-ui/components/data-list/api-keys-summary.js +35 -0
- package/cloud-ui/components/data-list/api-keys-table.d.ts +22 -0
- package/cloud-ui/components/data-list/api-keys-table.d.ts.map +1 -0
- package/cloud-ui/components/data-list/api-keys-table.js +79 -0
- package/cloud-ui/components/data-list/apps-list-view.d.ts +26 -0
- package/cloud-ui/components/data-list/apps-list-view.d.ts.map +1 -0
- package/cloud-ui/components/data-list/apps-list-view.js +72 -0
- package/cloud-ui/components/data-list/dashboard-data-list.d.ts +30 -0
- package/cloud-ui/components/data-list/dashboard-data-list.d.ts.map +1 -0
- package/cloud-ui/components/data-list/dashboard-data-list.js +17 -0
- package/cloud-ui/components/data-list/dashboard-table-skeleton.d.ts +15 -0
- package/cloud-ui/components/data-list/dashboard-table-skeleton.d.ts.map +1 -0
- package/cloud-ui/components/data-list/dashboard-table-skeleton.js +8 -0
- package/cloud-ui/components/data-list/data-list-empty-state.d.ts +18 -0
- package/cloud-ui/components/data-list/data-list-empty-state.d.ts.map +1 -0
- package/cloud-ui/components/data-list/data-list-empty-state.js +11 -0
- package/cloud-ui/components/data-list/index.d.ts +9 -0
- package/cloud-ui/components/data-list/index.d.ts.map +1 -0
- package/cloud-ui/components/data-list/index.js +7 -0
- package/cloud-ui/components/data-list/list-action-menu.d.ts +40 -0
- package/cloud-ui/components/data-list/list-action-menu.d.ts.map +1 -0
- package/cloud-ui/components/data-list/list-action-menu.js +18 -0
- package/cloud-ui/components/docs/api-parameter-select.d.ts +13 -0
- package/cloud-ui/components/docs/api-parameter-select.d.ts.map +1 -0
- package/cloud-ui/components/docs/api-parameter-select.js +7 -0
- package/cloud-ui/components/docs/api-route-explorer-client.d.ts +5 -0
- package/cloud-ui/components/docs/api-route-explorer-client.d.ts.map +1 -0
- package/cloud-ui/components/docs/api-route-explorer-client.js +162 -0
- package/cloud-ui/components/docs/docs-layout.d.ts +10 -0
- package/cloud-ui/components/docs/docs-layout.d.ts.map +1 -0
- package/cloud-ui/components/docs/docs-layout.js +21 -0
- package/cloud-ui/components/docs/docs-types.d.ts +26 -0
- package/cloud-ui/components/docs/docs-types.d.ts.map +1 -0
- package/cloud-ui/components/docs/docs-types.js +1 -0
- package/cloud-ui/components/docs/endpoint-card.d.ts +30 -0
- package/cloud-ui/components/docs/endpoint-card.d.ts.map +1 -0
- package/cloud-ui/components/docs/endpoint-card.js +29 -0
- package/cloud-ui/components/docs/index.d.ts +12 -0
- package/cloud-ui/components/docs/index.d.ts.map +1 -0
- package/cloud-ui/components/docs/index.js +6 -0
- package/cloud-ui/components/docs/llms-txt-badge.d.ts +2 -0
- package/cloud-ui/components/docs/llms-txt-badge.d.ts.map +1 -0
- package/cloud-ui/components/docs/llms-txt-badge.js +17 -0
- package/cloud-ui/components/docs/mdx-components.d.ts +34 -0
- package/cloud-ui/components/docs/mdx-components.d.ts.map +1 -0
- package/cloud-ui/components/docs/mdx-components.js +25 -0
- package/cloud-ui/components/docs/openapi-viewer.d.ts +6 -0
- package/cloud-ui/components/docs/openapi-viewer.d.ts.map +1 -0
- package/cloud-ui/components/docs/openapi-viewer.js +7 -0
- package/cloud-ui/components/drawer.d.ts +14 -0
- package/cloud-ui/components/drawer.d.ts.map +1 -0
- package/cloud-ui/components/drawer.js +39 -0
- package/cloud-ui/components/icons.d.ts +7 -0
- package/cloud-ui/components/icons.d.ts.map +1 -0
- package/cloud-ui/components/icons.js +16 -0
- package/cloud-ui/components/image-gen/empty-state.d.ts +3 -0
- package/cloud-ui/components/image-gen/empty-state.d.ts.map +1 -0
- package/cloud-ui/components/image-gen/empty-state.js +12 -0
- package/cloud-ui/components/image-gen/enhanced-loading.d.ts +14 -0
- package/cloud-ui/components/image-gen/enhanced-loading.d.ts.map +1 -0
- package/cloud-ui/components/image-gen/enhanced-loading.js +23 -0
- package/cloud-ui/components/image-gen/index.d.ts +5 -0
- package/cloud-ui/components/image-gen/index.d.ts.map +1 -0
- package/cloud-ui/components/image-gen/index.js +4 -0
- package/cloud-ui/components/image-gen/loading-state.d.ts +2 -0
- package/cloud-ui/components/image-gen/loading-state.d.ts.map +1 -0
- package/cloud-ui/components/image-gen/loading-state.js +11 -0
- package/cloud-ui/components/image-gen/prompt-input.d.ts +32 -0
- package/cloud-ui/components/image-gen/prompt-input.d.ts.map +1 -0
- package/cloud-ui/components/image-gen/prompt-input.js +24 -0
- package/cloud-ui/components/layout/dashboard-header.d.ts +18 -0
- package/cloud-ui/components/layout/dashboard-header.d.ts.map +1 -0
- package/cloud-ui/components/layout/dashboard-header.js +10 -0
- package/cloud-ui/components/layout/dashboard-page.d.ts +25 -0
- package/cloud-ui/components/layout/dashboard-page.d.ts.map +1 -0
- package/cloud-ui/components/layout/dashboard-page.js +24 -0
- package/cloud-ui/components/layout/dashboard-route-page.d.ts +20 -0
- package/cloud-ui/components/layout/dashboard-route-page.d.ts.map +1 -0
- package/cloud-ui/components/layout/dashboard-route-page.js +31 -0
- package/cloud-ui/components/layout/dashboard-shell.d.ts +8 -0
- package/cloud-ui/components/layout/dashboard-shell.d.ts.map +1 -0
- package/cloud-ui/components/layout/dashboard-shell.js +5 -0
- package/cloud-ui/components/layout/dashboard-sidebar-item.d.ts +12 -0
- package/cloud-ui/components/layout/dashboard-sidebar-item.d.ts.map +1 -0
- package/cloud-ui/components/layout/dashboard-sidebar-item.js +65 -0
- package/cloud-ui/components/layout/dashboard-sidebar-section.d.ts +15 -0
- package/cloud-ui/components/layout/dashboard-sidebar-section.d.ts.map +1 -0
- package/cloud-ui/components/layout/dashboard-sidebar-section.js +51 -0
- package/cloud-ui/components/layout/dashboard-sidebar-types.d.ts +29 -0
- package/cloud-ui/components/layout/dashboard-sidebar-types.d.ts.map +1 -0
- package/cloud-ui/components/layout/dashboard-sidebar-types.js +1 -0
- package/cloud-ui/components/layout/dashboard-sidebar.d.ts +22 -0
- package/cloud-ui/components/layout/dashboard-sidebar.d.ts.map +1 -0
- package/cloud-ui/components/layout/dashboard-sidebar.js +17 -0
- package/cloud-ui/components/layout/index.d.ts +12 -0
- package/cloud-ui/components/layout/index.d.ts.map +1 -0
- package/cloud-ui/components/layout/index.js +10 -0
- package/cloud-ui/components/layout/page-header-context.d.ts +11 -0
- package/cloud-ui/components/layout/page-header-context.d.ts.map +1 -0
- package/cloud-ui/components/layout/page-header-context.hooks.d.ts +30 -0
- package/cloud-ui/components/layout/page-header-context.hooks.d.ts.map +1 -0
- package/cloud-ui/components/layout/page-header-context.hooks.js +49 -0
- package/cloud-ui/components/layout/page-header-context.js +31 -0
- package/cloud-ui/components/layout/page-transition.d.ts +10 -0
- package/cloud-ui/components/layout/page-transition.d.ts.map +1 -0
- package/cloud-ui/components/layout/page-transition.js +27 -0
- package/cloud-ui/components/log-viewer.d.ts +87 -0
- package/cloud-ui/components/log-viewer.d.ts.map +1 -0
- package/cloud-ui/components/log-viewer.js +98 -0
- package/cloud-ui/components/monetization/animated-counter.d.ts +26 -0
- package/cloud-ui/components/monetization/animated-counter.d.ts.map +1 -0
- package/cloud-ui/components/monetization/animated-counter.js +46 -0
- package/cloud-ui/components/monetization/earnings-simulator.d.ts +12 -0
- package/cloud-ui/components/monetization/earnings-simulator.d.ts.map +1 -0
- package/cloud-ui/components/monetization/earnings-simulator.js +40 -0
- package/cloud-ui/components/monetization/index.d.ts +5 -0
- package/cloud-ui/components/monetization/index.d.ts.map +1 -0
- package/cloud-ui/components/monetization/index.js +4 -0
- package/cloud-ui/components/monetization/milestone-progress.d.ts +18 -0
- package/cloud-ui/components/monetization/milestone-progress.d.ts.map +1 -0
- package/cloud-ui/components/monetization/milestone-progress.js +28 -0
- package/cloud-ui/components/monetization/revenue-flow-diagram.d.ts +12 -0
- package/cloud-ui/components/monetization/revenue-flow-diagram.d.ts.map +1 -0
- package/cloud-ui/components/monetization/revenue-flow-diagram.js +26 -0
- package/cloud-ui/components/navigation-progress.d.ts +11 -0
- package/cloud-ui/components/navigation-progress.d.ts.map +1 -0
- package/cloud-ui/components/navigation-progress.js +42 -0
- package/cloud-ui/components/primitives.d.ts +58 -0
- package/cloud-ui/components/primitives.d.ts.map +1 -0
- package/cloud-ui/components/primitives.js +56 -0
- package/cloud-ui/components/product-switcher.d.ts +16 -0
- package/cloud-ui/components/product-switcher.d.ts.map +1 -0
- package/cloud-ui/components/product-switcher.js +7 -0
- package/cloud-ui/components/promotion/promote-app-dialog.d.ts +18 -0
- package/cloud-ui/components/promotion/promote-app-dialog.d.ts.map +1 -0
- package/cloud-ui/components/promotion/promote-app-dialog.js +243 -0
- package/cloud-ui/components/promotion/social-connection-hint.d.ts +29 -0
- package/cloud-ui/components/promotion/social-connection-hint.d.ts.map +1 -0
- package/cloud-ui/components/promotion/social-connection-hint.js +63 -0
- package/cloud-ui/components/resizable.d.ts +21 -0
- package/cloud-ui/components/resizable.d.ts.map +1 -0
- package/cloud-ui/components/resizable.js +153 -0
- package/cloud-ui/components/share/index.d.ts +2 -0
- package/cloud-ui/components/share/index.d.ts.map +1 -0
- package/cloud-ui/components/share/index.js +1 -0
- package/cloud-ui/components/share/share-buttons.d.ts +16 -0
- package/cloud-ui/components/share/share-buttons.d.ts.map +1 -0
- package/cloud-ui/components/share/share-buttons.js +62 -0
- package/cloud-ui/components/sonner.d.ts +4 -0
- package/cloud-ui/components/sonner.d.ts.map +1 -0
- package/cloud-ui/components/sonner.js +13 -0
- package/cloud-ui/components/spotlight.d.ts +7 -0
- package/cloud-ui/components/spotlight.d.ts.map +1 -0
- package/cloud-ui/components/spotlight.js +5 -0
- package/cloud-ui/components/theme/index.d.ts +8 -0
- package/cloud-ui/components/theme/index.d.ts.map +1 -0
- package/cloud-ui/components/theme/index.js +7 -0
- package/cloud-ui/components/theme/theme-provider.d.ts +13 -0
- package/cloud-ui/components/theme/theme-provider.d.ts.map +1 -0
- package/cloud-ui/components/theme/theme-provider.hooks.d.ts +16 -0
- package/cloud-ui/components/theme/theme-provider.hooks.d.ts.map +1 -0
- package/cloud-ui/components/theme/theme-provider.hooks.js +15 -0
- package/cloud-ui/components/theme/theme-provider.js +88 -0
- package/cloud-ui/components/theme/theme-toggle.d.ts +2 -0
- package/cloud-ui/components/theme/theme-toggle.d.ts.map +1 -0
- package/cloud-ui/components/theme/theme-toggle.js +9 -0
- package/cloud-ui/components/timeline.d.ts +12 -0
- package/cloud-ui/components/timeline.d.ts.map +1 -0
- package/cloud-ui/components/timeline.js +28 -0
- package/cloud-ui/components/voice/audio-utils.d.ts +4 -0
- package/cloud-ui/components/voice/audio-utils.d.ts.map +1 -0
- package/cloud-ui/components/voice/audio-utils.js +24 -0
- package/cloud-ui/components/voice/index.d.ts +9 -0
- package/cloud-ui/components/voice/index.d.ts.map +1 -0
- package/cloud-ui/components/voice/index.js +7 -0
- package/cloud-ui/components/voice/types.d.ts +30 -0
- package/cloud-ui/components/voice/types.d.ts.map +1 -0
- package/cloud-ui/components/voice/types.js +4 -0
- package/cloud-ui/components/voice/use-audio-player.d.ts +13 -0
- package/cloud-ui/components/voice/use-audio-player.d.ts.map +1 -0
- package/cloud-ui/components/voice/use-audio-player.js +119 -0
- package/cloud-ui/components/voice/use-audio-recorder.d.ts +14 -0
- package/cloud-ui/components/voice/use-audio-recorder.d.ts.map +1 -0
- package/cloud-ui/components/voice/use-audio-recorder.js +166 -0
- package/cloud-ui/components/voice/voice-audio-player.d.ts +14 -0
- package/cloud-ui/components/voice/voice-audio-player.d.ts.map +1 -0
- package/cloud-ui/components/voice/voice-audio-player.js +89 -0
- package/cloud-ui/components/voice/voice-empty-state.d.ts +6 -0
- package/cloud-ui/components/voice/voice-empty-state.d.ts.map +1 -0
- package/cloud-ui/components/voice/voice-empty-state.js +11 -0
- package/cloud-ui/components/voice/voice-status-badge.d.ts +10 -0
- package/cloud-ui/components/voice/voice-status-badge.d.ts.map +1 -0
- package/cloud-ui/components/voice/voice-status-badge.helpers.d.ts +11 -0
- package/cloud-ui/components/voice/voice-status-badge.helpers.d.ts.map +1 -0
- package/cloud-ui/components/voice/voice-status-badge.helpers.js +23 -0
- package/cloud-ui/components/voice/voice-status-badge.js +36 -0
- package/cloud-ui/index.css +3 -0
- package/cloud-ui/index.d.ts +31 -0
- package/cloud-ui/index.d.ts.map +1 -0
- package/cloud-ui/index.js +28 -0
- package/cloud-ui/lib/utils.d.ts +2 -0
- package/cloud-ui/lib/utils.d.ts.map +1 -0
- package/cloud-ui/lib/utils.js +1 -0
- package/cloud-ui/runtime/dynamic.d.ts +11 -0
- package/cloud-ui/runtime/dynamic.d.ts.map +1 -0
- package/cloud-ui/runtime/dynamic.js +16 -0
- package/cloud-ui/runtime/image.d.ts +18 -0
- package/cloud-ui/runtime/image.d.ts.map +1 -0
- package/cloud-ui/runtime/image.js +13 -0
- package/cloud-ui/runtime/navigation.d.ts +24 -0
- package/cloud-ui/runtime/navigation.d.ts.map +1 -0
- package/cloud-ui/runtime/navigation.js +90 -0
- package/cloud-ui/runtime/render-telemetry.d.ts +6 -0
- package/cloud-ui/runtime/render-telemetry.d.ts.map +1 -0
- package/cloud-ui/runtime/render-telemetry.js +51 -0
- package/cloud-ui/types/chat-media.d.ts +24 -0
- package/cloud-ui/types/chat-media.d.ts.map +1 -0
- package/cloud-ui/types/chat-media.js +12 -0
- package/cloud-ui/types/cloud-api.d.ts +518 -0
- package/cloud-ui/types/cloud-api.d.ts.map +1 -0
- package/cloud-ui/types/cloud-api.js +1 -0
- package/companion/desktop-bar/CompanionBar.d.ts +14 -0
- package/companion/desktop-bar/CompanionBar.d.ts.map +1 -0
- package/companion/desktop-bar/CompanionBar.js +82 -0
- package/companion/desktop-bar/index.d.ts +7 -0
- package/companion/desktop-bar/index.d.ts.map +1 -0
- package/companion/desktop-bar/index.js +4 -0
- package/companion/desktop-bar/platform/electrobun-tray.d.ts +30 -0
- package/companion/desktop-bar/platform/electrobun-tray.d.ts.map +1 -0
- package/companion/desktop-bar/platform/electrobun-tray.js +36 -0
- package/companion/desktop-bar/platform/index.d.ts +4 -0
- package/companion/desktop-bar/platform/index.d.ts.map +1 -0
- package/companion/desktop-bar/platform/index.js +14 -0
- package/companion/desktop-bar/platform/web-fallback.d.ts +3 -0
- package/companion/desktop-bar/platform/web-fallback.d.ts.map +1 -0
- package/companion/desktop-bar/platform/web-fallback.js +6 -0
- package/companion/desktop-bar/types.d.ts +16 -0
- package/companion/desktop-bar/types.d.ts.map +1 -0
- package/companion/desktop-bar/types.js +1 -0
- package/companion/desktop-bar/useKeyboardShortcuts.d.ts +19 -0
- package/companion/desktop-bar/useKeyboardShortcuts.d.ts.map +1 -0
- package/companion/desktop-bar/useKeyboardShortcuts.js +100 -0
- package/companion/desktop-bar/usePushToTalk.d.ts +17 -0
- package/companion/desktop-bar/usePushToTalk.d.ts.map +1 -0
- package/companion/desktop-bar/usePushToTalk.js +68 -0
- package/components/accounts/AccountCard.d.ts +1 -1
- package/components/accounts/AccountCard.d.ts.map +1 -1
- package/components/accounts/AccountCard.js +21 -21
- package/components/accounts/AccountList.d.ts.map +1 -1
- package/components/accounts/AccountList.js +6 -5
- package/components/accounts/AddAccountDialog.d.ts.map +1 -1
- package/components/accounts/AddAccountDialog.js +22 -5
- package/components/accounts/EditableAccountLabel.d.ts.map +1 -1
- package/components/accounts/EditableAccountLabel.js +3 -2
- package/components/accounts/RotationStrategyPicker.d.ts +1 -1
- package/components/accounts/RotationStrategyPicker.d.ts.map +1 -1
- package/components/accounts/RotationStrategyPicker.js +4 -4
- package/components/apps/AppWindowRenderer.d.ts +5 -0
- package/components/apps/AppWindowRenderer.d.ts.map +1 -0
- package/components/apps/AppWindowRenderer.helpers.d.ts +4 -0
- package/components/apps/AppWindowRenderer.helpers.d.ts.map +1 -0
- package/components/apps/AppWindowRenderer.helpers.js +20 -0
- package/components/apps/AppWindowRenderer.js +85 -0
- package/components/apps/AppsCatalogGrid.d.ts +3 -2
- package/components/apps/AppsCatalogGrid.d.ts.map +1 -1
- package/components/apps/AppsCatalogGrid.js +37 -22
- package/components/apps/AppsSidebar.d.ts +1 -1
- package/components/apps/AppsSidebar.d.ts.map +1 -1
- package/components/apps/AppsSidebar.js +27 -14
- package/components/apps/GameView.d.ts +0 -4
- package/components/apps/GameView.d.ts.map +1 -1
- package/components/apps/GameView.helpers.d.ts +3 -0
- package/components/apps/GameView.helpers.d.ts.map +1 -0
- package/components/apps/GameView.helpers.js +50 -0
- package/components/apps/GameView.js +219 -175
- package/components/apps/GameViewOverlay.d.ts.map +1 -1
- package/components/apps/GameViewOverlay.js +65 -10
- package/components/apps/RunningAppsRow.d.ts +1 -1
- package/components/apps/RunningAppsRow.d.ts.map +1 -1
- package/components/apps/RunningAppsRow.js +15 -13
- package/components/apps/app-identity.d.ts +7 -12
- package/components/apps/app-identity.d.ts.map +1 -1
- package/components/apps/app-identity.helpers.d.ts +13 -0
- package/components/apps/app-identity.helpers.d.ts.map +1 -0
- package/components/apps/app-identity.helpers.js +49 -0
- package/components/apps/app-identity.js +8 -54
- package/components/apps/apps-cache.d.ts +1 -1
- package/components/apps/apps-cache.d.ts.map +1 -1
- package/components/apps/catalog-loader.d.ts +1 -1
- package/components/apps/extensions/registry.d.ts +3 -3
- package/components/apps/extensions/registry.js +1 -1
- package/components/apps/extensions/surface.d.ts +2 -7
- package/components/apps/extensions/surface.d.ts.map +1 -1
- package/components/apps/extensions/surface.helpers.d.ts +8 -0
- package/components/apps/extensions/surface.helpers.d.ts.map +1 -0
- package/components/apps/extensions/surface.helpers.js +66 -0
- package/components/apps/extensions/surface.js +9 -75
- package/components/apps/extensions/types.d.ts +1 -1
- package/components/apps/helpers.d.ts +10 -6
- package/components/apps/helpers.d.ts.map +1 -1
- package/components/apps/helpers.js +38 -48
- package/components/apps/home-grid-apps.d.ts +19 -0
- package/components/apps/home-grid-apps.d.ts.map +1 -0
- package/components/apps/home-grid-apps.js +75 -0
- package/components/apps/internal-tool-apps.d.ts +2 -2
- package/components/apps/internal-tool-apps.d.ts.map +1 -1
- package/components/apps/internal-tool-apps.js +43 -23
- package/components/apps/launch-history.d.ts +1 -1
- package/components/apps/load-apps-catalog.d.ts +1 -1
- package/components/apps/load-apps-catalog.d.ts.map +1 -1
- package/components/apps/load-apps-catalog.js +6 -22
- package/components/apps/overlay-app-api.d.ts +17 -4
- package/components/apps/overlay-app-api.d.ts.map +1 -1
- package/components/apps/overlay-app-registry.d.ts +10 -7
- package/components/apps/overlay-app-registry.d.ts.map +1 -1
- package/components/apps/overlay-app-registry.js +24 -16
- package/components/apps/provenance.d.ts +36 -0
- package/components/apps/provenance.d.ts.map +1 -0
- package/components/apps/provenance.js +40 -0
- package/components/apps/run-attention.d.ts +1 -1
- package/components/apps/surfaces/GameOperatorShell.d.ts +1 -9
- package/components/apps/surfaces/GameOperatorShell.d.ts.map +1 -1
- package/components/apps/surfaces/GameOperatorShell.js +5 -11
- package/components/apps/surfaces/registry.d.ts +2 -2
- package/components/apps/surfaces/registry.js +1 -1
- package/components/apps/useRegistryCatalog.d.ts +2 -1
- package/components/apps/useRegistryCatalog.d.ts.map +1 -1
- package/components/apps/useRegistryCatalog.js +12 -4
- package/components/apps/viewer-auth.d.ts +11 -2
- package/components/apps/viewer-auth.d.ts.map +1 -1
- package/components/apps/viewer-auth.js +12 -3
- package/components/auth/LoginView.d.ts +1 -1
- package/components/auth/LoginView.d.ts.map +1 -1
- package/components/auth/LoginView.js +51 -11
- package/components/brand/eliza-mark.d.ts +16 -0
- package/components/brand/eliza-mark.d.ts.map +1 -0
- package/components/brand/eliza-mark.js +15 -0
- package/components/character/CharacterEditor.d.ts +4 -1
- package/components/character/CharacterEditor.d.ts.map +1 -1
- package/components/character/CharacterEditor.js +242 -140
- package/components/character/CharacterEditorPanels.d.ts +1 -1
- package/components/character/CharacterEditorPanels.d.ts.map +1 -1
- package/components/character/CharacterEditorPanels.js +227 -118
- package/components/character/CharacterExperienceWorkspace.d.ts +1 -1
- package/components/character/CharacterExperienceWorkspace.d.ts.map +1 -1
- package/components/character/CharacterExperienceWorkspace.js +216 -214
- package/components/character/CharacterHubView.d.ts +4 -2
- package/components/character/CharacterHubView.d.ts.map +1 -1
- package/components/character/CharacterHubView.js +101 -350
- package/components/character/CharacterLearnedSkillsSection.d.ts.map +1 -1
- package/components/character/CharacterLearnedSkillsSection.js +67 -34
- package/components/character/CharacterOverviewSection.d.ts +7 -10
- package/components/character/CharacterOverviewSection.d.ts.map +1 -1
- package/components/character/CharacterOverviewSection.js +19 -20
- package/components/character/CharacterPersonalityTimeline.d.ts +1 -1
- package/components/character/CharacterPersonalityTimeline.js +1 -1
- package/components/character/CharacterRoster.d.ts +2 -12
- package/components/character/CharacterRoster.d.ts.map +1 -1
- package/components/character/CharacterRoster.helpers.d.ts +13 -0
- package/components/character/CharacterRoster.helpers.d.ts.map +1 -0
- package/components/character/CharacterRoster.helpers.js +43 -0
- package/components/character/CharacterRoster.js +8 -60
- package/components/character/MusicLibraryCharacterWidget.d.ts +1 -1
- package/components/character/MusicLibraryCharacterWidget.js +2 -2
- package/components/character/character-editor-helpers.d.ts +4 -4
- package/components/character/character-editor-helpers.d.ts.map +1 -1
- package/components/character/character-editor-helpers.js +1 -1
- package/components/character/character-hub-helpers.d.ts +2 -2
- package/components/character/character-voice-config.d.ts +2 -2
- package/components/character/useCharacterHubData.d.ts +41 -0
- package/components/character/useCharacterHubData.d.ts.map +1 -0
- package/components/character/useCharacterHubData.js +112 -0
- package/components/chat/AccountRequiredCard.d.ts +12 -2
- package/components/chat/AccountRequiredCard.d.ts.map +1 -1
- package/components/chat/AccountRequiredCard.js +55 -5
- package/components/chat/AgentActivityBox.d.ts +1 -1
- package/components/chat/AgentActivityBox.d.ts.map +1 -1
- package/components/chat/AgentActivityBox.js +29 -18
- package/components/chat/AppsSection.d.ts.map +1 -1
- package/components/chat/AppsSection.js +14 -15
- package/components/chat/ConnectorAccountPicker.d.ts +1 -1
- package/components/chat/ConnectorAccountPicker.d.ts.map +1 -1
- package/components/chat/ConnectorAccountPicker.js +5 -1
- package/components/chat/InlineWidgetText.d.ts +6 -0
- package/components/chat/InlineWidgetText.d.ts.map +1 -0
- package/components/chat/InlineWidgetText.js +99 -0
- package/components/chat/MessageAttachments.d.ts +40 -0
- package/components/chat/MessageAttachments.d.ts.map +1 -0
- package/components/chat/MessageAttachments.js +524 -0
- package/components/chat/MessageContent.d.ts +15 -33
- package/components/chat/MessageContent.d.ts.map +1 -1
- package/components/chat/MessageContent.js +241 -428
- package/components/chat/SaveCommandModal.js +8 -6
- package/components/chat/TasksEventsPanel.d.ts +2 -3
- package/components/chat/TasksEventsPanel.d.ts.map +1 -1
- package/components/chat/TasksEventsPanel.js +7 -9
- package/components/chat/ThinkingBlock.d.ts +14 -0
- package/components/chat/ThinkingBlock.d.ts.map +1 -0
- package/components/chat/ThinkingBlock.js +19 -0
- package/components/chat/TranscriptViewerOverlay.d.ts +32 -0
- package/components/chat/TranscriptViewerOverlay.d.ts.map +1 -0
- package/components/chat/TranscriptViewerOverlay.js +329 -0
- package/components/chat/WidgetVisibilityPanel.d.ts +3 -4
- package/components/chat/WidgetVisibilityPanel.d.ts.map +1 -1
- package/components/chat/WidgetVisibilityPanel.helpers.d.ts +3 -0
- package/components/chat/WidgetVisibilityPanel.helpers.d.ts.map +1 -0
- package/components/chat/WidgetVisibilityPanel.helpers.js +13 -0
- package/components/chat/WidgetVisibilityPanel.js +3 -22
- package/components/chat/connector-send-as.d.ts +1 -1
- package/components/chat/message-choice-parser.d.ts +3 -1
- package/components/chat/message-choice-parser.d.ts.map +1 -1
- package/components/chat/message-choice-parser.js +8 -2
- package/components/chat/message-followups-parser.d.ts +38 -0
- package/components/chat/message-followups-parser.d.ts.map +1 -0
- package/components/chat/message-followups-parser.js +81 -0
- package/components/chat/message-form-parser.d.ts +65 -0
- package/components/chat/message-form-parser.d.ts.map +1 -0
- package/components/chat/message-form-parser.js +144 -0
- package/components/chat/message-parser-helpers.d.ts +139 -0
- package/components/chat/message-parser-helpers.d.ts.map +1 -0
- package/components/chat/message-parser-helpers.js +490 -0
- package/components/chat/message-task-parser.d.ts +39 -0
- package/components/chat/message-task-parser.d.ts.map +1 -0
- package/components/chat/message-task-parser.js +56 -0
- package/components/chat/widgets/ChoiceWidget.d.ts +3 -1
- package/components/chat/widgets/ChoiceWidget.d.ts.map +1 -1
- package/components/chat/widgets/ChoiceWidget.js +19 -4
- package/components/chat/widgets/__e2e__/orchestrator-accounts-fixture.d.ts +2 -0
- package/components/chat/widgets/__e2e__/orchestrator-accounts-fixture.d.ts.map +1 -0
- package/components/chat/widgets/__e2e__/orchestrator-accounts-fixture.js +131 -0
- package/components/chat/widgets/agent-orchestrator-accounts-view.d.ts +13 -0
- package/components/chat/widgets/agent-orchestrator-accounts-view.d.ts.map +1 -0
- package/components/chat/widgets/agent-orchestrator-accounts-view.js +87 -0
- package/components/chat/widgets/agent-orchestrator.d.ts +1 -1
- package/components/chat/widgets/agent-orchestrator.d.ts.map +1 -1
- package/components/chat/widgets/agent-orchestrator.js +191 -49
- package/components/chat/widgets/browser-launch-widget.d.ts +19 -0
- package/components/chat/widgets/browser-launch-widget.d.ts.map +1 -0
- package/components/chat/widgets/browser-launch-widget.js +38 -0
- package/components/chat/widgets/browser-status.d.ts +1 -2
- package/components/chat/widgets/browser-status.d.ts.map +1 -1
- package/components/chat/widgets/browser-status.helpers.d.ts +3 -0
- package/components/chat/widgets/browser-status.helpers.d.ts.map +1 -0
- package/components/chat/widgets/browser-status.helpers.js +8 -0
- package/components/chat/widgets/browser-status.js +18 -35
- package/components/chat/widgets/calendar-upcoming.d.ts +17 -0
- package/components/chat/widgets/calendar-upcoming.d.ts.map +1 -0
- package/components/chat/widgets/calendar-upcoming.js +149 -0
- package/components/chat/widgets/credential-request-widget.d.ts +40 -0
- package/components/chat/widgets/credential-request-widget.d.ts.map +1 -0
- package/components/chat/widgets/credential-request-widget.js +52 -0
- package/components/chat/widgets/finances-alerts.d.ts +17 -0
- package/components/chat/widgets/finances-alerts.d.ts.map +1 -0
- package/components/chat/widgets/finances-alerts.js +214 -0
- package/components/chat/widgets/followups.d.ts +35 -0
- package/components/chat/widgets/followups.d.ts.map +1 -0
- package/components/chat/widgets/followups.js +56 -0
- package/components/chat/widgets/form-request.d.ts +23 -0
- package/components/chat/widgets/form-request.d.ts.map +1 -0
- package/components/chat/widgets/form-request.js +97 -0
- package/components/chat/widgets/goals-attention.d.ts +17 -0
- package/components/chat/widgets/goals-attention.d.ts.map +1 -0
- package/components/chat/widgets/goals-attention.js +155 -0
- package/components/chat/widgets/health-sleep.d.ts +18 -0
- package/components/chat/widgets/health-sleep.d.ts.map +1 -0
- package/components/chat/widgets/health-sleep.js +159 -0
- package/components/chat/widgets/home-widget-card.d.ts +47 -0
- package/components/chat/widgets/home-widget-card.d.ts.map +1 -0
- package/components/chat/widgets/home-widget-card.js +64 -0
- package/components/chat/widgets/inbox-unread.d.ts +10 -0
- package/components/chat/widgets/inbox-unread.d.ts.map +1 -0
- package/components/chat/widgets/inbox-unread.js +119 -0
- package/components/chat/widgets/inline-builtins.d.ts +12 -0
- package/components/chat/widgets/inline-builtins.d.ts.map +1 -0
- package/components/chat/widgets/inline-builtins.js +36 -0
- package/components/chat/widgets/inline-registry.d.ts +59 -0
- package/components/chat/widgets/inline-registry.d.ts.map +1 -0
- package/components/chat/widgets/inline-registry.js +33 -0
- package/components/chat/widgets/messages.d.ts +8 -0
- package/components/chat/widgets/messages.d.ts.map +1 -0
- package/components/chat/widgets/messages.js +38 -0
- package/components/chat/widgets/music-player.d.ts +1 -2
- package/components/chat/widgets/music-player.d.ts.map +1 -1
- package/components/chat/widgets/music-player.helpers.d.ts +3 -0
- package/components/chat/widgets/music-player.helpers.d.ts.map +1 -0
- package/components/chat/widgets/music-player.helpers.js +8 -0
- package/components/chat/widgets/music-player.js +5 -10
- package/components/chat/widgets/needs-attention.d.ts +22 -0
- package/components/chat/widgets/needs-attention.d.ts.map +1 -0
- package/components/chat/widgets/needs-attention.js +109 -0
- package/components/chat/widgets/notifications.d.ts +9 -0
- package/components/chat/widgets/notifications.d.ts.map +1 -0
- package/components/chat/widgets/notifications.js +42 -0
- package/components/chat/widgets/orchestrator-grilling-card.d.ts +24 -0
- package/components/chat/widgets/orchestrator-grilling-card.d.ts.map +1 -0
- package/components/chat/widgets/orchestrator-grilling-card.js +57 -0
- package/components/chat/widgets/relationships-attention.d.ts +18 -0
- package/components/chat/widgets/relationships-attention.d.ts.map +1 -0
- package/components/chat/widgets/relationships-attention.js +135 -0
- package/components/chat/widgets/shared.js +2 -2
- package/components/chat/widgets/task-widget.d.ts +34 -0
- package/components/chat/widgets/task-widget.d.ts.map +1 -0
- package/components/chat/widgets/task-widget.js +187 -0
- package/components/chat/widgets/todo.d.ts +1 -1
- package/components/chat/widgets/todo.d.ts.map +1 -1
- package/components/chat/widgets/todo.js +46 -27
- package/components/chat/widgets/topic-chips-bar.d.ts +23 -0
- package/components/chat/widgets/topic-chips-bar.d.ts.map +1 -0
- package/components/chat/widgets/topic-chips-bar.js +22 -0
- package/components/chat/widgets/topic-grouped-transcript.d.ts +20 -0
- package/components/chat/widgets/topic-grouped-transcript.d.ts.map +1 -0
- package/components/chat/widgets/topic-grouped-transcript.js +45 -0
- package/components/chat/widgets/types.d.ts +5 -2
- package/components/chat/widgets/types.d.ts.map +1 -1
- package/components/chat/widgets/use-inline-widget-context.d.ts +18 -0
- package/components/chat/widgets/use-inline-widget-context.d.ts.map +1 -0
- package/components/chat/widgets/use-inline-widget-context.js +46 -0
- package/components/cloud/CloudSourceControls.d.ts.map +1 -1
- package/components/cloud/CloudSourceControls.js +7 -6
- package/components/cloud/CloudStatusBadge.d.ts +0 -18
- package/components/cloud/CloudStatusBadge.d.ts.map +1 -1
- package/components/cloud/CloudStatusBadge.js +8 -9
- package/components/cloud/FlaminaGuide.d.ts +1 -1
- package/components/cloud/FlaminaGuide.d.ts.map +1 -1
- package/components/cloud/FlaminaGuide.js +17 -12
- package/components/cloud/StripeEmbeddedCheckout.js +2 -2
- package/components/companion/injected.d.ts +1 -3
- package/components/companion/injected.d.ts.map +1 -1
- package/components/companion/injected.hooks.d.ts +4 -0
- package/components/companion/injected.hooks.d.ts.map +1 -0
- package/components/companion/injected.hooks.js +12 -0
- package/components/companion/injected.js +1 -13
- package/components/composites/OwnerBadge.d.ts +35 -0
- package/components/composites/OwnerBadge.d.ts.map +1 -0
- package/components/composites/OwnerBadge.js +35 -0
- package/components/composites/chat/ChatVoiceStatusBar.d.ts +38 -0
- package/components/composites/chat/ChatVoiceStatusBar.d.ts.map +1 -0
- package/components/composites/chat/ChatVoiceStatusBar.js +71 -0
- package/components/composites/chat/ContinuousChatToggle.d.ts +26 -0
- package/components/composites/chat/ContinuousChatToggle.d.ts.map +1 -0
- package/components/composites/chat/ContinuousChatToggle.js +66 -0
- package/components/composites/chat/chat-attachment-strip.d.ts +1 -1
- package/components/composites/chat/chat-attachment-strip.d.ts.map +1 -1
- package/components/composites/chat/chat-attachment-strip.js +7 -2
- package/components/composites/chat/chat-bubble.d.ts.map +1 -1
- package/components/composites/chat/chat-bubble.js +7 -2
- package/components/composites/chat/chat-composer-shell.d.ts +1 -1
- package/components/composites/chat/chat-composer-shell.js +4 -4
- package/components/composites/chat/chat-composer.d.ts +12 -7
- package/components/composites/chat/chat-composer.d.ts.map +1 -1
- package/components/composites/chat/chat-composer.js +53 -55
- package/components/composites/chat/chat-conversation-item.d.ts +2 -2
- package/components/composites/chat/chat-conversation-item.d.ts.map +1 -1
- package/components/composites/chat/chat-conversation-item.js +21 -19
- package/components/composites/chat/chat-empty-state.d.ts +1 -1
- package/components/composites/chat/chat-empty-state.js +1 -1
- package/components/composites/chat/chat-message-actions.d.ts +1 -1
- package/components/composites/chat/chat-message-actions.js +1 -1
- package/components/composites/chat/chat-message.d.ts +18 -3
- package/components/composites/chat/chat-message.d.ts.map +1 -1
- package/components/composites/chat/chat-message.js +134 -36
- package/components/composites/chat/chat-source.d.ts +15 -17
- package/components/composites/chat/chat-source.d.ts.map +1 -1
- package/components/composites/chat/chat-source.helpers.d.ts +25 -0
- package/components/composites/chat/chat-source.helpers.d.ts.map +1 -0
- package/components/composites/chat/chat-source.helpers.js +66 -0
- package/components/composites/chat/chat-source.js +18 -51
- package/components/composites/chat/chat-thread-layout.d.ts +1 -1
- package/components/composites/chat/chat-thread-layout.d.ts.map +1 -1
- package/components/composites/chat/chat-thread-layout.js +2 -2
- package/components/composites/chat/chat-transcript.d.ts +6 -2
- package/components/composites/chat/chat-transcript.d.ts.map +1 -1
- package/components/composites/chat/chat-transcript.js +42 -7
- package/components/composites/chat/chat-types.d.ts +25 -0
- package/components/composites/chat/chat-types.d.ts.map +1 -1
- package/components/composites/chat/chat-typing-indicator.d.ts +1 -1
- package/components/composites/chat/chat-typing-indicator.js +1 -1
- package/components/composites/chat/index.d.ts +16 -17
- package/components/composites/chat/index.d.ts.map +1 -1
- package/components/composites/chat/index.js +2 -3
- package/components/composites/chat/permission-card.d.ts +1 -62
- package/components/composites/chat/permission-card.d.ts.map +1 -1
- package/components/composites/chat/permission-card.helpers.d.ts +67 -0
- package/components/composites/chat/permission-card.helpers.d.ts.map +1 -0
- package/components/composites/chat/permission-card.helpers.js +182 -0
- package/components/composites/chat/permission-card.js +82 -171
- package/components/composites/chat/permission-card.render.d.ts +7 -0
- package/components/composites/chat/permission-card.render.d.ts.map +1 -0
- package/components/composites/chat/permission-card.render.js +9 -0
- package/components/composites/chat-search-hint.d.ts +21 -0
- package/components/composites/chat-search-hint.d.ts.map +1 -0
- package/components/composites/chat-search-hint.js +24 -0
- package/components/composites/code/DiffReviewPanel.d.ts +17 -0
- package/components/composites/code/DiffReviewPanel.d.ts.map +1 -0
- package/components/composites/code/DiffReviewPanel.js +97 -0
- package/components/composites/code/index.d.ts +2 -0
- package/components/composites/code/index.d.ts.map +1 -0
- package/components/composites/code/index.js +1 -0
- package/components/composites/form-field/index.d.ts +1 -1
- package/components/composites/index.d.ts +29 -25
- package/components/composites/index.d.ts.map +1 -1
- package/components/composites/index.js +5 -1
- package/components/composites/page-panel/index.d.ts +21 -18
- package/components/composites/page-panel/index.d.ts.map +1 -1
- package/components/composites/page-panel/index.js +3 -0
- package/components/composites/page-panel/page-panel-collapsible-section.d.ts +1 -1
- package/components/composites/page-panel/page-panel-collapsible-section.d.ts.map +1 -1
- package/components/composites/page-panel/page-panel-collapsible-section.js +2 -2
- package/components/composites/page-panel/page-panel-empty.d.ts +1 -1
- package/components/composites/page-panel/page-panel-empty.d.ts.map +1 -1
- package/components/composites/page-panel/page-panel-empty.js +4 -4
- package/components/composites/page-panel/page-panel-feature-empty.d.ts +22 -0
- package/components/composites/page-panel/page-panel-feature-empty.d.ts.map +1 -0
- package/components/composites/page-panel/page-panel-feature-empty.js +9 -0
- package/components/composites/page-panel/page-panel-frame.d.ts +1 -1
- package/components/composites/page-panel/page-panel-frame.d.ts.map +1 -1
- package/components/composites/page-panel/page-panel-frame.js +1 -1
- package/components/composites/page-panel/page-panel-header.d.ts +1 -1
- package/components/composites/page-panel/page-panel-header.d.ts.map +1 -1
- package/components/composites/page-panel/page-panel-header.js +13 -13
- package/components/composites/page-panel/page-panel-loading.d.ts +1 -1
- package/components/composites/page-panel/page-panel-loading.d.ts.map +1 -1
- package/components/composites/page-panel/page-panel-loading.js +3 -3
- package/components/composites/page-panel/page-panel-root.d.ts +3 -3
- package/components/composites/page-panel/page-panel-root.d.ts.map +1 -1
- package/components/composites/page-panel/page-panel-root.js +7 -6
- package/components/composites/page-panel/page-panel-toolbar.d.ts +1 -1
- package/components/composites/page-panel/page-panel-types.d.ts +2 -2
- package/components/composites/page-panel/page-panel-types.d.ts.map +1 -1
- package/components/composites/search/index.d.ts +1 -2
- package/components/composites/search/index.d.ts.map +1 -1
- package/components/composites/search/index.js +0 -1
- package/components/composites/search/searchbar.d.ts +0 -10
- package/components/composites/search/searchbar.d.ts.map +1 -1
- package/components/composites/search/searchbar.js +1 -12
- package/components/composites/sidebar/index.d.ts +10 -10
- package/components/composites/sidebar/index.d.ts.map +1 -1
- package/components/composites/sidebar/index.js +1 -1
- package/components/composites/sidebar/nav-active.d.ts +16 -0
- package/components/composites/sidebar/nav-active.d.ts.map +1 -0
- package/components/composites/sidebar/nav-active.js +15 -0
- package/components/composites/sidebar/sidebar-auto-rail.d.ts +1 -1
- package/components/composites/sidebar/sidebar-body.d.ts +1 -1
- package/components/composites/sidebar/sidebar-collapsed-rail.d.ts +1 -1
- package/components/composites/sidebar/sidebar-content.d.ts.map +1 -1
- package/components/composites/sidebar/sidebar-content.js +9 -8
- package/components/composites/sidebar/sidebar-header-stack.d.ts +1 -1
- package/components/composites/sidebar/sidebar-header.d.ts +2 -2
- package/components/composites/sidebar/sidebar-header.d.ts.map +1 -1
- package/components/composites/sidebar/sidebar-panel.d.ts +1 -1
- package/components/composites/sidebar/sidebar-root.d.ts +1 -1
- package/components/composites/sidebar/sidebar-root.d.ts.map +1 -1
- package/components/composites/sidebar/sidebar-root.js +42 -16
- package/components/composites/sidebar/sidebar-scroll-region.d.ts +1 -1
- package/components/composites/sidebar/sidebar-types.d.ts +0 -19
- package/components/composites/sidebar/sidebar-types.d.ts.map +1 -1
- package/components/composites/skills/index.d.ts +1 -1
- package/components/composites/skills/skill-sidebar-item.js +2 -2
- package/components/composites/trajectories/index.d.ts +7 -7
- package/components/composites/trajectories/trajectory-cache-stats.js +1 -1
- package/components/composites/trajectories/trajectory-code-block.d.ts.map +1 -1
- package/components/composites/trajectories/trajectory-code-block.js +4 -3
- package/components/composites/trajectories/trajectory-context-diff-list.js +2 -2
- package/components/composites/trajectories/trajectory-event-timeline.js +1 -1
- package/components/composites/trajectories/trajectory-llm-call-card.d.ts +2 -3
- package/components/composites/trajectories/trajectory-llm-call-card.d.ts.map +1 -1
- package/components/composites/trajectories/trajectory-llm-call-card.js +2 -2
- package/components/composites/trajectories/trajectory-pipeline-graph.js +6 -6
- package/components/config-ui/config-control-primitives.d.ts +0 -10
- package/components/config-ui/config-control-primitives.d.ts.map +1 -1
- package/components/config-ui/config-control-primitives.helpers.d.ts +11 -0
- package/components/config-ui/config-control-primitives.helpers.d.ts.map +1 -0
- package/components/config-ui/config-control-primitives.helpers.js +15 -0
- package/components/config-ui/config-control-primitives.js +0 -15
- package/components/config-ui/config-field.d.ts +1 -48
- package/components/config-ui/config-field.d.ts.map +1 -1
- package/components/config-ui/config-field.helpers.d.ts +49 -0
- package/components/config-ui/config-field.helpers.d.ts.map +1 -0
- package/components/config-ui/config-field.helpers.js +870 -0
- package/components/config-ui/config-field.js +4 -849
- package/components/config-ui/config-renderer.d.ts +3 -133
- package/components/config-ui/config-renderer.d.ts.map +1 -1
- package/components/config-ui/config-renderer.helpers.d.ts +25 -0
- package/components/config-ui/config-renderer.helpers.d.ts.map +1 -0
- package/components/config-ui/config-renderer.helpers.js +30 -0
- package/components/config-ui/config-renderer.js +9 -41
- package/components/config-ui/index.d.ts +7 -4
- package/components/config-ui/index.d.ts.map +1 -1
- package/components/config-ui/index.js +4 -1
- package/components/config-ui/ui-renderer.d.ts +1 -6
- package/components/config-ui/ui-renderer.d.ts.map +1 -1
- package/components/config-ui/ui-renderer.helpers.d.ts +9 -0
- package/components/config-ui/ui-renderer.helpers.d.ts.map +1 -0
- package/components/config-ui/ui-renderer.helpers.js +175 -0
- package/components/config-ui/ui-renderer.js +30 -137
- package/components/connectors/BlueBubblesStatusPanel.d.ts.map +1 -1
- package/components/connectors/BlueBubblesStatusPanel.js +14 -26
- package/components/connectors/ConnectorAccountAuditList.d.ts.map +1 -1
- package/components/connectors/ConnectorAccountAuditList.js +40 -33
- package/components/connectors/ConnectorAccountCard.d.ts +1 -1
- package/components/connectors/ConnectorAccountCard.d.ts.map +1 -1
- package/components/connectors/ConnectorAccountCard.js +100 -32
- package/components/connectors/ConnectorAccountList.d.ts +23 -2
- package/components/connectors/ConnectorAccountList.d.ts.map +1 -1
- package/components/connectors/ConnectorAccountList.js +38 -8
- package/components/connectors/ConnectorAccountPrivacySelector.d.ts +1 -1
- package/components/connectors/ConnectorAccountPrivacySelector.d.ts.map +1 -1
- package/components/connectors/ConnectorAccountPrivacySelector.js +33 -6
- package/components/connectors/ConnectorAccountPurposeSelector.d.ts +1 -1
- package/components/connectors/ConnectorAccountPurposeSelector.d.ts.map +1 -1
- package/components/connectors/ConnectorAccountPurposeSelector.js +20 -3
- package/components/connectors/ConnectorAccountSetupScope.d.ts.map +1 -1
- package/components/connectors/ConnectorAccountSetupScope.js +18 -5
- package/components/connectors/ConnectorModeSelector.d.ts +1 -30
- package/components/connectors/ConnectorModeSelector.d.ts.map +1 -1
- package/components/connectors/ConnectorModeSelector.helpers.d.ts +21 -0
- package/components/connectors/ConnectorModeSelector.helpers.d.ts.map +1 -0
- package/components/connectors/ConnectorModeSelector.helpers.js +257 -0
- package/components/connectors/ConnectorModeSelector.hooks.d.ts +13 -0
- package/components/connectors/ConnectorModeSelector.hooks.d.ts.map +1 -0
- package/components/connectors/ConnectorModeSelector.hooks.js +22 -0
- package/components/connectors/ConnectorModeSelector.js +9 -248
- package/components/connectors/ConnectorQrPairingOverlay.d.ts +33 -0
- package/components/connectors/ConnectorQrPairingOverlay.d.ts.map +1 -0
- package/components/connectors/ConnectorQrPairingOverlay.js +50 -0
- package/components/connectors/ConnectorSetupPanel.d.ts +0 -8
- package/components/connectors/ConnectorSetupPanel.d.ts.map +1 -1
- package/components/connectors/ConnectorSetupPanel.helpers.d.ts +11 -0
- package/components/connectors/ConnectorSetupPanel.helpers.d.ts.map +1 -0
- package/components/connectors/ConnectorSetupPanel.helpers.js +52 -0
- package/components/connectors/ConnectorSetupPanel.js +1 -50
- package/components/connectors/DiscordLocalConnectorPanel.d.ts.map +1 -1
- package/components/connectors/DiscordLocalConnectorPanel.js +13 -12
- package/components/connectors/IMessageStatusPanel.d.ts.map +1 -1
- package/components/connectors/IMessageStatusPanel.js +6 -5
- package/components/connectors/OwnerAgentConnectorSetupPanel.d.ts +34 -0
- package/components/connectors/OwnerAgentConnectorSetupPanel.d.ts.map +1 -0
- package/components/connectors/OwnerAgentConnectorSetupPanel.js +32 -0
- package/components/connectors/SignalQrOverlay.d.ts.map +1 -1
- package/components/connectors/SignalQrOverlay.js +37 -60
- package/components/connectors/TelegramAccountConnectorPanel.d.ts.map +1 -1
- package/components/connectors/TelegramAccountConnectorPanel.js +25 -23
- package/components/connectors/TelegramBotSetupPanel.d.ts.map +1 -1
- package/components/connectors/TelegramBotSetupPanel.js +17 -11
- package/components/connectors/WhatsAppQrOverlay.d.ts.map +1 -1
- package/components/connectors/WhatsAppQrOverlay.js +26 -50
- package/components/connectors/XRPairingPanel.d.ts +2 -0
- package/components/connectors/XRPairingPanel.d.ts.map +1 -0
- package/components/connectors/XRPairingPanel.js +57 -0
- package/components/connectors/connector-account-options.d.ts +1 -1
- package/components/conversations/ConversationRenameDialog.d.ts.map +1 -1
- package/components/conversations/ConversationRenameDialog.js +5 -3
- package/components/conversations/ConversationsSidebar.d.ts.map +1 -1
- package/components/conversations/ConversationsSidebar.js +36 -79
- package/components/conversations/conversation-sidebar-model.d.ts +2 -2
- package/components/conversations/conversation-sidebar-model.d.ts.map +1 -1
- package/components/conversations/conversation-sidebar-model.js +1 -1
- package/components/conversations/conversation-utils.d.ts +2 -2
- package/components/conversations/conversation-utils.d.ts.map +1 -1
- package/components/conversations/conversation-utils.js +2 -58
- package/components/custom-actions/CustomActionEditor.d.ts.map +1 -1
- package/components/custom-actions/CustomActionEditor.js +10 -4
- package/components/custom-actions/CustomActionsPanel.d.ts.map +1 -1
- package/components/custom-actions/CustomActionsPanel.js +24 -14
- package/components/custom-actions/CustomActionsView.d.ts.map +1 -1
- package/components/custom-actions/CustomActionsView.js +20 -19
- package/components/custom-actions/custom-action-form.d.ts +5 -5
- package/components/custom-actions/custom-action-form.d.ts.map +1 -1
- package/components/custom-actions/custom-action-form.js +3 -3
- package/components/desktop/DesktopTabBar.d.ts +24 -0
- package/components/desktop/DesktopTabBar.d.ts.map +1 -0
- package/components/desktop/DesktopTabBar.js +34 -0
- package/components/index.d.ts +161 -108
- package/components/index.d.ts.map +1 -1
- package/components/index.js +79 -17
- package/components/local-inference/ActiveModelBar.d.ts +1 -1
- package/components/local-inference/ActiveModelBar.d.ts.map +1 -1
- package/components/local-inference/ActiveModelBar.js +15 -6
- package/components/local-inference/DeviceBridgeStatus.d.ts +4 -1
- package/components/local-inference/DeviceBridgeStatus.d.ts.map +1 -1
- package/components/local-inference/DeviceBridgeStatus.js +18 -28
- package/components/local-inference/DevicesPanel.d.ts +4 -1
- package/components/local-inference/DevicesPanel.d.ts.map +1 -1
- package/components/local-inference/DevicesPanel.js +21 -29
- package/components/local-inference/DownloadProgress.d.ts +1 -1
- package/components/local-inference/DownloadProgress.d.ts.map +1 -1
- package/components/local-inference/DownloadProgress.js +13 -1
- package/components/local-inference/DownloadQueue.d.ts +8 -2
- package/components/local-inference/DownloadQueue.d.ts.map +1 -1
- package/components/local-inference/DownloadQueue.js +17 -6
- package/components/local-inference/FirstRunOffer.d.ts +3 -2
- package/components/local-inference/FirstRunOffer.d.ts.map +1 -1
- package/components/local-inference/FirstRunOffer.js +43 -23
- package/components/local-inference/HardwareBadge.d.ts +1 -1
- package/components/local-inference/HardwareBadge.d.ts.map +1 -1
- package/components/local-inference/HardwareBadge.js +12 -2
- package/components/local-inference/LocalInferencePanel.d.ts +1 -1
- package/components/local-inference/LocalInferencePanel.d.ts.map +1 -1
- package/components/local-inference/LocalInferencePanel.js +218 -61
- package/components/local-inference/ModelCard.d.ts +3 -2
- package/components/local-inference/ModelCard.d.ts.map +1 -1
- package/components/local-inference/ModelCard.js +26 -5
- package/components/local-inference/ModelHubView.d.ts +1 -1
- package/components/local-inference/ModelHubView.d.ts.map +1 -1
- package/components/local-inference/ModelHubView.js +33 -6
- package/components/local-inference/ModelUpdatesPanel.d.ts +52 -0
- package/components/local-inference/ModelUpdatesPanel.d.ts.map +1 -0
- package/components/local-inference/ModelUpdatesPanel.js +113 -0
- package/components/local-inference/ProvidersList.d.ts.map +1 -1
- package/components/local-inference/ProvidersList.js +51 -17
- package/components/local-inference/RoutingMatrix.d.ts.map +1 -1
- package/components/local-inference/RoutingMatrix.js +194 -37
- package/components/local-inference/SlotAssignments.d.ts +1 -1
- package/components/local-inference/SlotAssignments.d.ts.map +1 -1
- package/components/local-inference/SlotAssignments.js +65 -29
- package/components/local-inference/hub-utils.d.ts +6 -2
- package/components/local-inference/hub-utils.d.ts.map +1 -1
- package/components/local-inference/hub-utils.js +16 -8
- package/components/local-inference/runtime-class-ui.d.ts +44 -0
- package/components/local-inference/runtime-class-ui.d.ts.map +1 -0
- package/components/local-inference/runtime-class-ui.js +61 -0
- package/components/local-inference/slot-metadata.d.ts +9 -0
- package/components/local-inference/slot-metadata.d.ts.map +1 -0
- package/components/local-inference/slot-metadata.js +32 -0
- package/components/local-inference/useDeviceBridgeStatus.d.ts +4 -0
- package/components/local-inference/useDeviceBridgeStatus.d.ts.map +1 -0
- package/components/local-inference/useDeviceBridgeStatus.js +35 -0
- package/components/local-inference/useHomeModelStatus.d.ts +9 -0
- package/components/local-inference/useHomeModelStatus.d.ts.map +1 -0
- package/components/local-inference/useHomeModelStatus.js +65 -0
- package/components/pages/AppDetailsView.d.ts +2 -13
- package/components/pages/AppDetailsView.d.ts.map +1 -1
- package/components/pages/AppDetailsView.helpers.d.ts +11 -0
- package/components/pages/AppDetailsView.helpers.d.ts.map +1 -0
- package/components/pages/AppDetailsView.helpers.js +35 -0
- package/components/pages/AppDetailsView.js +216 -64
- package/components/pages/AppsPageView.d.ts.map +1 -1
- package/components/pages/AppsPageView.js +19 -13
- package/components/pages/AppsView.d.ts +0 -1
- package/components/pages/AppsView.d.ts.map +1 -1
- package/components/pages/AppsView.js +103 -65
- package/components/pages/AutomationsFeed.d.ts +8 -19
- package/components/pages/AutomationsFeed.d.ts.map +1 -1
- package/components/pages/AutomationsFeed.js +275 -121
- package/components/pages/BackgroundView.d.ts +10 -0
- package/components/pages/BackgroundView.d.ts.map +1 -0
- package/components/pages/BackgroundView.js +14 -0
- package/components/pages/BrowserWorkspaceView.d.ts +65 -11
- package/components/pages/BrowserWorkspaceView.d.ts.map +1 -1
- package/components/pages/BrowserWorkspaceView.js +264 -130
- package/components/pages/CameraPageView.d.ts +2 -0
- package/components/pages/CameraPageView.d.ts.map +1 -0
- package/components/pages/CameraPageView.js +149 -0
- package/components/pages/ChatView.d.ts +9 -3
- package/components/pages/ChatView.d.ts.map +1 -1
- package/components/pages/ChatView.js +295 -90
- package/components/pages/ConfigPageView.d.ts.map +1 -1
- package/components/pages/ConfigPageView.js +139 -76
- package/components/pages/DatabasePageView.d.ts.map +1 -1
- package/components/pages/DatabasePageView.js +36 -9
- package/components/pages/DatabaseView.d.ts.map +1 -1
- package/components/pages/DatabaseView.js +145 -70
- package/components/pages/DocumentsView.d.ts +2 -2
- package/components/pages/DocumentsView.d.ts.map +1 -1
- package/components/pages/DocumentsView.js +153 -76
- package/components/pages/ElizaCloudDashboard.d.ts.map +1 -1
- package/components/pages/ElizaCloudDashboard.js +46 -21
- package/components/pages/ElizaOsAppsView.d.ts.map +1 -1
- package/components/pages/ElizaOsAppsView.js +417 -47
- package/components/pages/FilesView.d.ts +15 -0
- package/components/pages/FilesView.d.ts.map +1 -0
- package/components/pages/FilesView.js +201 -0
- package/components/pages/GeneratedViewHero.d.ts +31 -0
- package/components/pages/GeneratedViewHero.d.ts.map +1 -0
- package/components/pages/GeneratedViewHero.js +118 -0
- package/components/pages/HeartbeatForm.d.ts +3 -3
- package/components/pages/HeartbeatForm.d.ts.map +1 -1
- package/components/pages/HeartbeatForm.js +322 -28
- package/components/pages/HeartbeatsView.d.ts.map +1 -1
- package/components/pages/HeartbeatsView.js +182 -50
- package/components/pages/LogsView.d.ts +0 -6
- package/components/pages/LogsView.d.ts.map +1 -1
- package/components/pages/LogsView.js +123 -43
- package/components/pages/MediaGalleryView.d.ts.map +1 -1
- package/components/pages/MediaGalleryView.js +118 -32
- package/components/pages/MemoryDetailPanel.d.ts +1 -1
- package/components/pages/MemoryDetailPanel.d.ts.map +1 -1
- package/components/pages/MemoryDetailPanel.js +11 -5
- package/components/pages/MemoryViewerView.d.ts.map +1 -1
- package/components/pages/MemoryViewerView.js +265 -88
- package/components/pages/PluginCard.d.ts +2 -2
- package/components/pages/PluginCard.d.ts.map +1 -1
- package/components/pages/PluginCard.js +68 -104
- package/components/pages/PluginConfigForm.d.ts +1 -12
- package/components/pages/PluginConfigForm.d.ts.map +1 -1
- package/components/pages/PluginConfigForm.js +7 -6
- package/components/pages/PluginVisual.d.ts +12 -0
- package/components/pages/PluginVisual.d.ts.map +1 -0
- package/components/pages/PluginVisual.js +66 -0
- package/components/pages/PluginsPageView.d.ts.map +1 -1
- package/components/pages/PluginsPageView.js +2 -1
- package/components/pages/PluginsView.d.ts +1 -2
- package/components/pages/PluginsView.d.ts.map +1 -1
- package/components/pages/PluginsView.js +164 -73
- package/components/pages/RelationshipsGraphPanel.d.ts +1 -1
- package/components/pages/RelationshipsGraphPanel.d.ts.map +1 -1
- package/components/pages/RelationshipsGraphPanel.js +58 -15
- package/components/pages/RelationshipsIdentityCluster.d.ts +1 -1
- package/components/pages/RelationshipsIdentityCluster.js +1 -1
- package/components/pages/RelationshipsView.d.ts.map +1 -1
- package/components/pages/RelationshipsView.js +2 -1
- package/components/pages/ReleaseCenterView.d.ts.map +1 -1
- package/components/pages/ReleaseCenterView.js +197 -50
- package/components/pages/RuntimeView.d.ts.map +1 -1
- package/components/pages/RuntimeView.js +127 -65
- package/components/pages/SecretsView.d.ts.map +1 -1
- package/components/pages/SecretsView.js +64 -49
- package/components/pages/SettingsView.d.ts +1 -1
- package/components/pages/SettingsView.d.ts.map +1 -1
- package/components/pages/SettingsView.js +154 -492
- package/components/pages/SkillsView.d.ts.map +1 -1
- package/components/pages/SkillsView.js +229 -87
- package/components/pages/Springboard.d.ts +49 -0
- package/components/pages/Springboard.d.ts.map +1 -0
- package/components/pages/Springboard.js +238 -0
- package/components/pages/SpringboardSurface.d.ts +6 -0
- package/components/pages/SpringboardSurface.d.ts.map +1 -0
- package/components/pages/SpringboardSurface.js +120 -0
- package/components/pages/SqlEditorPanel.d.ts +1 -1
- package/components/pages/SqlEditorPanel.d.ts.map +1 -1
- package/components/pages/SqlEditorPanel.js +9 -7
- package/components/pages/StreamView.d.ts.map +1 -1
- package/components/pages/StreamView.js +68 -64
- package/components/pages/TaskEditor.d.ts +3 -4
- package/components/pages/TaskEditor.d.ts.map +1 -1
- package/components/pages/TaskEditor.js +107 -11
- package/components/pages/TasksPageView.d.ts +4 -0
- package/components/pages/TasksPageView.d.ts.map +1 -1
- package/components/pages/TasksPageView.js +7 -7
- package/components/pages/TrajectoriesView.d.ts.map +1 -1
- package/components/pages/TrajectoriesView.js +70 -41
- package/components/pages/TrajectoryDetailView.d.ts.map +1 -1
- package/components/pages/TrajectoryDetailView.js +82 -72
- package/components/pages/WorkflowEditor.d.ts +4 -4
- package/components/pages/WorkflowEditor.d.ts.map +1 -1
- package/components/pages/WorkflowEditor.js +393 -54
- package/components/pages/WorkflowGraphViewer.d.ts +1 -1
- package/components/pages/WorkflowGraphViewer.d.ts.map +1 -1
- package/components/pages/WorkflowGraphViewer.js +86 -72
- package/components/pages/__e2e__/background-fixture.d.ts +2 -0
- package/components/pages/__e2e__/background-fixture.d.ts.map +1 -0
- package/components/pages/__e2e__/background-fixture.js +84 -0
- package/components/pages/__e2e__/springboard-fixture.d.ts +2 -0
- package/components/pages/__e2e__/springboard-fixture.d.ts.map +1 -0
- package/components/pages/__e2e__/springboard-fixture.js +103 -0
- package/components/pages/automation-conversations.d.ts +1 -1
- package/components/pages/automations-missing-creds.d.ts +1 -1
- package/components/pages/background-image.d.ts +10 -0
- package/components/pages/background-image.d.ts.map +1 -0
- package/components/pages/background-image.js +61 -0
- package/components/pages/browser-workspace-wallet.d.ts +9 -2
- package/components/pages/browser-workspace-wallet.d.ts.map +1 -1
- package/components/pages/browser-workspace-wallet.js +54 -5
- package/components/pages/chat-view-hooks.d.ts +19 -9
- package/components/pages/chat-view-hooks.d.ts.map +1 -1
- package/components/pages/chat-view-hooks.js +189 -86
- package/components/pages/cloud-dashboard-utils.d.ts +1 -1
- package/components/pages/config-page-sections.d.ts +1 -45
- package/components/pages/config-page-sections.d.ts.map +1 -1
- package/components/pages/config-page-sections.helpers.d.ts +37 -0
- package/components/pages/config-page-sections.helpers.d.ts.map +1 -0
- package/components/pages/config-page-sections.helpers.js +4 -0
- package/components/pages/config-page-sections.js +27 -19
- package/components/pages/database-utils.d.ts +2 -7
- package/components/pages/database-utils.d.ts.map +1 -1
- package/components/pages/database-utils.js +49 -40
- package/components/pages/documents-detail.d.ts +0 -4
- package/components/pages/documents-detail.d.ts.map +1 -1
- package/components/pages/documents-detail.helpers.d.ts +5 -0
- package/components/pages/documents-detail.helpers.d.ts.map +1 -0
- package/components/pages/documents-detail.helpers.js +24 -0
- package/components/pages/documents-detail.js +61 -34
- package/components/pages/documents-upload.d.ts +1 -18
- package/components/pages/documents-upload.d.ts.map +1 -1
- package/components/pages/documents-upload.helpers.d.ts +19 -0
- package/components/pages/documents-upload.helpers.d.ts.map +1 -0
- package/components/pages/documents-upload.helpers.js +46 -0
- package/components/pages/documents-upload.js +119 -62
- package/components/pages/heartbeat-utils.d.ts +5 -7
- package/components/pages/heartbeat-utils.d.ts.map +1 -1
- package/components/pages/heartbeat-utils.js +11 -26
- package/components/pages/help/HelpView.d.ts +3 -0
- package/components/pages/help/HelpView.d.ts.map +1 -0
- package/components/pages/help/HelpView.js +80 -0
- package/components/pages/help/help-content.d.ts +28 -0
- package/components/pages/help/help-content.d.ts.map +1 -0
- package/components/pages/help/help-content.js +481 -0
- package/components/pages/page-scoped-conversations.d.ts +3 -3
- package/components/pages/page-scoped-conversations.d.ts.map +1 -1
- package/components/pages/page-scoped-conversations.js +2 -19
- package/components/pages/plugin-list-utils.d.ts +13 -4
- package/components/pages/plugin-list-utils.d.ts.map +1 -1
- package/components/pages/plugin-list-utils.js +51 -6
- package/components/pages/plugin-view-connectors.d.ts +2 -2
- package/components/pages/plugin-view-connectors.d.ts.map +1 -1
- package/components/pages/plugin-view-connectors.js +227 -53
- package/components/pages/plugin-view-dialogs.d.ts +3 -9
- package/components/pages/plugin-view-dialogs.d.ts.map +1 -1
- package/components/pages/plugin-view-dialogs.js +59 -13
- package/components/pages/plugin-view-modal.d.ts +2 -2
- package/components/pages/plugin-view-modal.d.ts.map +1 -1
- package/components/pages/plugin-view-modal.js +91 -10
- package/components/pages/plugin-view-sidebar.d.ts +3 -5
- package/components/pages/plugin-view-sidebar.d.ts.map +1 -1
- package/components/pages/plugin-view-sidebar.js +87 -21
- package/components/pages/relationships/RelationshipsActivityFeed.d.ts.map +1 -1
- package/components/pages/relationships/RelationshipsActivityFeed.js +17 -7
- package/components/pages/relationships/RelationshipsCandidateMergesPanel.d.ts +1 -1
- package/components/pages/relationships/RelationshipsCandidateMergesPanel.d.ts.map +1 -1
- package/components/pages/relationships/RelationshipsCandidateMergesPanel.js +34 -6
- package/components/pages/relationships/RelationshipsPersonPanels.d.ts +1 -1
- package/components/pages/relationships/RelationshipsPersonPanels.d.ts.map +1 -1
- package/components/pages/relationships/RelationshipsPersonPanels.js +171 -50
- package/components/pages/relationships/RelationshipsSidebar.d.ts +2 -5
- package/components/pages/relationships/RelationshipsSidebar.d.ts.map +1 -1
- package/components/pages/relationships/RelationshipsSidebar.js +8 -12
- package/components/pages/relationships/RelationshipsWorkspaceView.d.ts.map +1 -1
- package/components/pages/relationships/RelationshipsWorkspaceView.js +80 -19
- package/components/pages/relationships/relationships-utils.d.ts +1 -1
- package/components/pages/skill-detail-panel.d.ts.map +1 -1
- package/components/pages/skill-detail-panel.js +77 -15
- package/components/pages/skill-marketplace.d.ts +2 -2
- package/components/pages/skill-marketplace.d.ts.map +1 -1
- package/components/pages/skill-marketplace.js +85 -24
- package/components/pages/tutorial/TutorialNarrator.d.ts +13 -0
- package/components/pages/tutorial/TutorialNarrator.d.ts.map +1 -0
- package/components/pages/tutorial/TutorialNarrator.js +43 -0
- package/components/pages/tutorial/TutorialOverlay.d.ts +3 -0
- package/components/pages/tutorial/TutorialOverlay.d.ts.map +1 -0
- package/components/pages/tutorial/TutorialOverlay.js +182 -0
- package/components/pages/tutorial/TutorialSpotlight.d.ts +25 -0
- package/components/pages/tutorial/TutorialSpotlight.d.ts.map +1 -0
- package/components/pages/tutorial/TutorialSpotlight.js +139 -0
- package/components/pages/tutorial/TutorialView.d.ts +9 -0
- package/components/pages/tutorial/TutorialView.d.ts.map +1 -0
- package/components/pages/tutorial/TutorialView.js +28 -0
- package/components/pages/tutorial/tutorial-controller.d.ts +10 -0
- package/components/pages/tutorial/tutorial-controller.d.ts.map +1 -0
- package/components/pages/tutorial/tutorial-controller.js +54 -0
- package/components/pages/tutorial/tutorial-steps.d.ts +83 -0
- package/components/pages/tutorial/tutorial-steps.d.ts.map +1 -0
- package/components/pages/tutorial/tutorial-steps.js +95 -0
- package/components/pages/useBrowserWorkspaceWalletBridge.d.ts +21 -2
- package/components/pages/useBrowserWorkspaceWalletBridge.d.ts.map +1 -1
- package/components/pages/useBrowserWorkspaceWalletBridge.js +58 -182
- package/components/pages/workflow-action-handoff.d.ts +4 -0
- package/components/pages/workflow-action-handoff.d.ts.map +1 -0
- package/components/pages/workflow-action-handoff.js +24 -0
- package/components/permissions/PermissionRecoveryCallout.d.ts +13 -0
- package/components/permissions/PermissionRecoveryCallout.d.ts.map +1 -0
- package/components/permissions/PermissionRecoveryCallout.js +46 -0
- package/components/permissions/StreamingPermissions.d.ts +1 -2
- package/components/permissions/StreamingPermissions.d.ts.map +1 -1
- package/components/permissions/StreamingPermissions.js +11 -13
- package/components/plugins/showcase-data.d.ts +1 -1
- package/components/plugins/showcase-data.d.ts.map +1 -1
- package/components/plugins/showcase-data.js +3 -3
- package/components/policy-controls/ApprovedAddressesSection.d.ts +1 -2
- package/components/policy-controls/ApprovedAddressesSection.d.ts.map +1 -1
- package/components/policy-controls/ApprovedAddressesSection.helpers.d.ts +3 -0
- package/components/policy-controls/ApprovedAddressesSection.helpers.d.ts.map +1 -0
- package/components/policy-controls/ApprovedAddressesSection.helpers.js +5 -0
- package/components/policy-controls/ApprovedAddressesSection.js +36 -15
- package/components/policy-controls/AutoApproveSection.d.ts +1 -2
- package/components/policy-controls/AutoApproveSection.d.ts.map +1 -1
- package/components/policy-controls/AutoApproveSection.helpers.d.ts +3 -0
- package/components/policy-controls/AutoApproveSection.helpers.d.ts.map +1 -0
- package/components/policy-controls/AutoApproveSection.helpers.js +3 -0
- package/components/policy-controls/AutoApproveSection.js +10 -6
- package/components/policy-controls/PolicyToggle.d.ts.map +1 -1
- package/components/policy-controls/PolicyToggle.js +5 -3
- package/components/policy-controls/RateLimitSection.d.ts +1 -2
- package/components/policy-controls/RateLimitSection.d.ts.map +1 -1
- package/components/policy-controls/RateLimitSection.helpers.d.ts +3 -0
- package/components/policy-controls/RateLimitSection.helpers.d.ts.map +1 -0
- package/components/policy-controls/RateLimitSection.helpers.js +3 -0
- package/components/policy-controls/RateLimitSection.js +5 -5
- package/components/policy-controls/SpendingLimitSection.d.ts +1 -2
- package/components/policy-controls/SpendingLimitSection.d.ts.map +1 -1
- package/components/policy-controls/SpendingLimitSection.helpers.d.ts +3 -0
- package/components/policy-controls/SpendingLimitSection.helpers.d.ts.map +1 -0
- package/components/policy-controls/SpendingLimitSection.helpers.js +3 -0
- package/components/policy-controls/SpendingLimitSection.js +7 -5
- package/components/policy-controls/TimeWindowSection.d.ts +1 -2
- package/components/policy-controls/TimeWindowSection.d.ts.map +1 -1
- package/components/policy-controls/TimeWindowSection.helpers.d.ts +3 -0
- package/components/policy-controls/TimeWindowSection.helpers.d.ts.map +1 -0
- package/components/policy-controls/TimeWindowSection.helpers.js +10 -0
- package/components/policy-controls/TimeWindowSection.js +8 -14
- package/components/policy-controls/constants.d.ts +1 -1
- package/components/policy-controls/helpers.d.ts +1 -1
- package/components/policy-controls/index.d.ts +14 -9
- package/components/policy-controls/index.d.ts.map +1 -1
- package/components/policy-controls/index.js +10 -5
- package/components/policy-controls/types.js +1 -1
- package/components/primitives/index.d.ts +27 -23
- package/components/primitives/index.d.ts.map +1 -1
- package/components/primitives/index.js +5 -1
- package/components/release-center/sections.d.ts +1 -1
- package/components/release-center/sections.d.ts.map +1 -1
- package/components/release-center/sections.js +23 -21
- package/components/release-center/shared.d.ts +0 -3
- package/components/release-center/shared.d.ts.map +1 -1
- package/components/release-center/shared.helpers.d.ts +4 -0
- package/components/release-center/shared.helpers.d.ts.map +1 -0
- package/components/release-center/shared.helpers.js +21 -0
- package/components/release-center/shared.js +3 -24
- package/components/settings/AdvancedSection.d.ts +2 -0
- package/components/settings/AdvancedSection.d.ts.map +1 -0
- package/components/settings/AdvancedSection.js +159 -0
- package/components/settings/AdvancedToggle.d.ts +15 -0
- package/components/settings/AdvancedToggle.d.ts.map +1 -0
- package/components/settings/AdvancedToggle.hooks.d.ts +22 -0
- package/components/settings/AdvancedToggle.hooks.d.ts.map +1 -0
- package/components/settings/AdvancedToggle.hooks.js +63 -0
- package/components/settings/AdvancedToggle.js +39 -0
- package/components/settings/ApiKeyConfig.d.ts +3 -9
- package/components/settings/ApiKeyConfig.d.ts.map +1 -1
- package/components/settings/ApiKeyConfig.js +128 -84
- package/components/settings/AppPermissionsSection.d.ts +10 -0
- package/components/settings/AppPermissionsSection.d.ts.map +1 -0
- package/components/settings/AppPermissionsSection.js +152 -0
- package/components/settings/AppearanceSettingsSection.d.ts.map +1 -1
- package/components/settings/AppearanceSettingsSection.js +50 -249
- package/components/settings/AppsManagementSection.d.ts +1 -7
- package/components/settings/AppsManagementSection.d.ts.map +1 -1
- package/components/settings/AppsManagementSection.js +204 -76
- package/components/settings/BackgroundSettingsControls.d.ts +5 -0
- package/components/settings/BackgroundSettingsControls.d.ts.map +1 -0
- package/components/settings/BackgroundSettingsControls.js +118 -0
- package/components/settings/CapabilitiesSection.d.ts.map +1 -1
- package/components/settings/CapabilitiesSection.js +372 -30
- package/components/settings/CloudAgentsSection.d.ts +7 -0
- package/components/settings/CloudAgentsSection.d.ts.map +1 -0
- package/components/settings/CloudAgentsSection.js +422 -0
- package/components/settings/ConnectorsSection.d.ts +9 -0
- package/components/settings/ConnectorsSection.d.ts.map +1 -0
- package/components/settings/ConnectorsSection.js +183 -0
- package/components/settings/DesktopWorkspaceDisplay.d.ts +6 -0
- package/components/settings/DesktopWorkspaceDisplay.d.ts.map +1 -0
- package/components/settings/DesktopWorkspaceDisplay.hooks.d.ts +4 -0
- package/components/settings/DesktopWorkspaceDisplay.hooks.d.ts.map +1 -0
- package/components/settings/DesktopWorkspaceDisplay.hooks.js +27 -0
- package/components/settings/DesktopWorkspaceDisplay.js +5 -0
- package/components/settings/DesktopWorkspaceSection.d.ts +0 -2
- package/components/settings/DesktopWorkspaceSection.d.ts.map +1 -1
- package/components/settings/DesktopWorkspaceSection.js +198 -323
- package/components/settings/IdentitySettingsSection.d.ts.map +1 -1
- package/components/settings/IdentitySettingsSection.js +70 -60
- package/components/settings/LoadContentPackForm.d.ts +2 -0
- package/components/settings/LoadContentPackForm.d.ts.map +1 -0
- package/components/settings/LoadContentPackForm.js +78 -0
- package/components/settings/LoadedPacksList.d.ts +9 -0
- package/components/settings/LoadedPacksList.d.ts.map +1 -0
- package/components/settings/LoadedPacksList.js +28 -0
- package/components/settings/PermissionsSection.d.ts.map +1 -1
- package/components/settings/PermissionsSection.js +262 -65
- package/components/settings/PolicyControlsView.d.ts.map +1 -1
- package/components/settings/PolicyControlsView.js +299 -80
- package/components/settings/ProviderCard.d.ts +27 -0
- package/components/settings/ProviderCard.d.ts.map +1 -0
- package/components/settings/ProviderCard.js +30 -0
- package/components/settings/ProviderPanels.d.ts +60 -0
- package/components/settings/ProviderPanels.d.ts.map +1 -0
- package/components/settings/ProviderPanels.js +51 -0
- package/components/settings/ProviderRoutingPanel.d.ts +22 -0
- package/components/settings/ProviderRoutingPanel.d.ts.map +1 -0
- package/components/settings/ProviderRoutingPanel.js +22 -0
- package/components/settings/ProviderSwitcher.d.ts +1 -11
- package/components/settings/ProviderSwitcher.d.ts.map +1 -1
- package/components/settings/ProviderSwitcher.js +75 -618
- package/components/settings/RemotePluginHostSection.d.ts +6 -0
- package/components/settings/RemotePluginHostSection.d.ts.map +1 -0
- package/components/settings/RemotePluginHostSection.js +302 -0
- package/components/settings/RuntimeSettingsSection.d.ts +0 -8
- package/components/settings/RuntimeSettingsSection.d.ts.map +1 -1
- package/components/settings/RuntimeSettingsSection.js +49 -56
- package/components/settings/SecretsManagerSection.d.ts +1 -4
- package/components/settings/SecretsManagerSection.d.ts.map +1 -1
- package/components/settings/SecretsManagerSection.js +18 -36
- package/components/settings/SecuritySettingsSection.d.ts.map +1 -1
- package/components/settings/SecuritySettingsSection.js +307 -91
- package/components/settings/SubscriptionStatus.d.ts +2 -7
- package/components/settings/SubscriptionStatus.d.ts.map +1 -1
- package/components/settings/SubscriptionStatus.js +81 -38
- package/components/settings/VaultInventoryPanel.d.ts +1 -1
- package/components/settings/VaultInventoryPanel.d.ts.map +1 -1
- package/components/settings/VaultInventoryPanel.js +270 -23
- package/components/settings/VoiceConfigView.d.ts +0 -2
- package/components/settings/VoiceConfigView.d.ts.map +1 -1
- package/components/settings/VoiceConfigView.helpers.d.ts +3 -0
- package/components/settings/VoiceConfigView.helpers.d.ts.map +1 -0
- package/components/settings/VoiceConfigView.helpers.js +34 -0
- package/components/settings/VoiceConfigView.js +364 -172
- package/components/settings/VoiceProfileSection.d.ts +17 -0
- package/components/settings/VoiceProfileSection.d.ts.map +1 -0
- package/components/settings/VoiceProfileSection.js +318 -0
- package/components/settings/VoiceSection.d.ts +58 -0
- package/components/settings/VoiceSection.d.ts.map +1 -0
- package/components/settings/VoiceSection.helpers.d.ts +4 -0
- package/components/settings/VoiceSection.helpers.d.ts.map +1 -0
- package/components/settings/VoiceSection.helpers.js +12 -0
- package/components/settings/VoiceSection.js +122 -0
- package/components/settings/VoiceSectionMount.d.ts +17 -0
- package/components/settings/VoiceSectionMount.d.ts.map +1 -0
- package/components/settings/VoiceSectionMount.js +112 -0
- package/components/settings/VoiceTierBanner.d.ts +19 -0
- package/components/settings/VoiceTierBanner.d.ts.map +1 -0
- package/components/settings/VoiceTierBanner.helpers.d.ts +4 -0
- package/components/settings/VoiceTierBanner.helpers.d.ts.map +1 -0
- package/components/settings/VoiceTierBanner.helpers.js +7 -0
- package/components/settings/VoiceTierBanner.js +46 -0
- package/components/settings/WalletKeysSection.d.ts +3 -13
- package/components/settings/WalletKeysSection.d.ts.map +1 -1
- package/components/settings/WalletKeysSection.js +113 -26
- package/components/settings/WalletRpcSection.d.ts +2 -0
- package/components/settings/WalletRpcSection.d.ts.map +1 -0
- package/components/settings/WalletRpcSection.js +7 -0
- package/components/settings/XRSettingsSection.d.ts +2 -0
- package/components/settings/XRSettingsSection.d.ts.map +1 -0
- package/components/settings/XRSettingsSection.js +114 -0
- package/components/settings/appearance-primitives.helpers.d.ts +2 -0
- package/components/settings/appearance-primitives.helpers.d.ts.map +1 -0
- package/components/settings/appearance-primitives.helpers.js +5 -0
- package/components/settings/cloud-model-schema.d.ts +4 -4
- package/components/settings/cloud-model-schema.d.ts.map +1 -1
- package/components/settings/cloud-model-schema.js +1 -8
- package/components/settings/desktop-workspace-audit-config.d.ts +3 -0
- package/components/settings/desktop-workspace-audit-config.d.ts.map +1 -0
- package/components/settings/desktop-workspace-audit-config.js +171 -0
- package/components/settings/permission-controls.d.ts +2 -18
- package/components/settings/permission-controls.d.ts.map +1 -1
- package/components/settings/permission-controls.hooks.d.ts +18 -0
- package/components/settings/permission-controls.hooks.d.ts.map +1 -0
- package/components/settings/permission-controls.hooks.js +434 -0
- package/components/settings/permission-controls.js +86 -463
- package/components/settings/permission-types.d.ts +2 -2
- package/components/settings/permission-types.d.ts.map +1 -1
- package/components/settings/permission-types.js +150 -22
- package/components/settings/settings-agent-rows.d.ts +120 -0
- package/components/settings/settings-agent-rows.d.ts.map +1 -0
- package/components/settings/settings-agent-rows.js +138 -0
- package/components/settings/settings-control-primitives.d.ts +4 -5
- package/components/settings/settings-control-primitives.d.ts.map +1 -1
- package/components/settings/settings-control-primitives.hooks.d.ts +14 -0
- package/components/settings/settings-control-primitives.hooks.d.ts.map +1 -0
- package/components/settings/settings-control-primitives.hooks.js +43 -0
- package/components/settings/settings-control-primitives.js +10 -12
- package/components/settings/settings-layout.d.ts +84 -0
- package/components/settings/settings-layout.d.ts.map +1 -0
- package/components/settings/settings-layout.js +38 -0
- package/components/settings/settings-section-meta.d.ts +26 -0
- package/components/settings/settings-section-meta.d.ts.map +1 -0
- package/components/settings/settings-section-meta.js +42 -0
- package/components/settings/settings-section-registry.d.ts +73 -0
- package/components/settings/settings-section-registry.d.ts.map +1 -0
- package/components/settings/settings-section-registry.js +33 -0
- package/components/settings/settings-section-tokens.d.ts +18 -0
- package/components/settings/settings-section-tokens.d.ts.map +1 -0
- package/components/settings/settings-section-tokens.js +66 -0
- package/components/settings/settings-sections.d.ts +21 -0
- package/components/settings/settings-sections.d.ts.map +1 -0
- package/components/settings/settings-sections.js +234 -0
- package/components/settings/useCloudModelConfig.d.ts +28 -0
- package/components/settings/useCloudModelConfig.d.ts.map +1 -0
- package/components/settings/useCloudModelConfig.js +198 -0
- package/components/settings/useDesktopWindowControls.d.ts +12 -0
- package/components/settings/useDesktopWindowControls.d.ts.map +1 -0
- package/components/settings/useDesktopWindowControls.js +59 -0
- package/components/settings/useProviderBootstrap.d.ts +15 -0
- package/components/settings/useProviderBootstrap.d.ts.map +1 -0
- package/components/settings/useProviderBootstrap.js +74 -0
- package/components/settings/useProviderEntries.d.ts +51 -0
- package/components/settings/useProviderEntries.d.ts.map +1 -0
- package/components/settings/useProviderEntries.js +180 -0
- package/components/settings/useProviderSelection.d.ts +31 -0
- package/components/settings/useProviderSelection.d.ts.map +1 -0
- package/components/settings/useProviderSelection.js +235 -0
- package/components/settings/vault-tabs/LoginsTab.d.ts +0 -2
- package/components/settings/vault-tabs/LoginsTab.d.ts.map +1 -1
- package/components/settings/vault-tabs/LoginsTab.js +144 -28
- package/components/settings/vault-tabs/OverviewTab.d.ts +4 -6
- package/components/settings/vault-tabs/OverviewTab.d.ts.map +1 -1
- package/components/settings/vault-tabs/OverviewTab.js +247 -20
- package/components/settings/vault-tabs/RoutingTab.d.ts +3 -6
- package/components/settings/vault-tabs/RoutingTab.d.ts.map +1 -1
- package/components/settings/vault-tabs/RoutingTab.js +187 -22
- package/components/settings/vault-tabs/SecretsTab.d.ts +1 -1
- package/components/settings/vault-tabs/SecretsTab.d.ts.map +1 -1
- package/components/settings/vault-tabs/SecretsTab.js +3 -1
- package/components/settings/vault-tabs/types.d.ts +7 -1
- package/components/settings/vault-tabs/types.d.ts.map +1 -1
- package/components/settings/vault-tabs/types.js +30 -1
- package/components/setup/BootstrapStep.d.ts +35 -0
- package/components/setup/BootstrapStep.d.ts.map +1 -0
- package/components/setup/BootstrapStep.js +180 -0
- package/components/setup/setup-classes.d.ts +28 -0
- package/components/setup/setup-classes.d.ts.map +1 -0
- package/components/setup/setup-classes.js +32 -0
- package/components/setup/setup-form-primitives.d.ts +20 -0
- package/components/setup/setup-form-primitives.d.ts.map +1 -0
- package/components/setup/setup-form-primitives.js +11 -0
- package/components/setup/setup-step-chrome.d.ts +2 -0
- package/components/setup/setup-step-chrome.d.ts.map +1 -0
- package/components/setup/setup-step-chrome.js +4 -0
- package/components/shared/AppPageSidebar.d.ts +1 -1
- package/components/shared/AppPageSidebar.d.ts.map +1 -1
- package/components/shared/AppPageSidebar.js +3 -3
- package/components/shared/CollapsibleSidebarSection.js +2 -2
- package/components/shared/LanguageDropdown.d.ts +1 -8
- package/components/shared/LanguageDropdown.d.ts.map +1 -1
- package/components/shared/LanguageDropdown.helpers.d.ts +9 -0
- package/components/shared/LanguageDropdown.helpers.d.ts.map +1 -0
- package/components/shared/LanguageDropdown.helpers.js +12 -0
- package/components/shared/LanguageDropdown.js +8 -20
- package/components/shared/ThemeToggle.d.ts +1 -1
- package/components/shared/ThemeToggle.d.ts.map +1 -1
- package/components/shared/ThemeToggle.js +7 -3
- package/components/shared/confirm-delete-control.d.ts.map +1 -1
- package/components/shared/confirm-delete-control.js +3 -3
- package/components/shell/ActionBanner.d.ts +10 -0
- package/components/shell/ActionBanner.d.ts.map +1 -0
- package/components/shell/ActionBanner.js +28 -0
- package/components/shell/AssistantOverlay.d.ts +25 -0
- package/components/shell/AssistantOverlay.d.ts.map +1 -0
- package/components/shell/AssistantOverlay.js +113 -0
- package/components/shell/BugReportModal.d.ts.map +1 -1
- package/components/shell/BugReportModal.js +23 -22
- package/components/shell/ChatSurface.d.ts +12 -0
- package/components/shell/ChatSurface.d.ts.map +1 -0
- package/components/shell/ChatSurface.js +60 -0
- package/components/shell/CloudHandoffBanner.d.ts +16 -0
- package/components/shell/CloudHandoffBanner.d.ts.map +1 -0
- package/components/shell/CloudHandoffBanner.js +44 -0
- package/components/shell/CommandPalette.d.ts.map +1 -1
- package/components/shell/CommandPalette.js +61 -7
- package/components/shell/ComputerUseApprovalOverlay.d.ts.map +1 -1
- package/components/shell/ComputerUseApprovalOverlay.js +85 -20
- package/components/shell/ConnectionFailedBanner.d.ts.map +1 -1
- package/components/shell/ConnectionFailedBanner.js +14 -6
- package/components/shell/ConnectionLostOverlay.d.ts.map +1 -1
- package/components/shell/ConnectionLostOverlay.js +12 -6
- package/components/shell/ContinuousChatOverlay.d.ts +25 -0
- package/components/shell/ContinuousChatOverlay.d.ts.map +1 -0
- package/components/shell/ContinuousChatOverlay.js +2370 -0
- package/components/shell/HomePill.d.ts +15 -0
- package/components/shell/HomePill.d.ts.map +1 -0
- package/components/shell/HomePill.js +27 -0
- package/components/shell/HomeScreen.d.ts +35 -0
- package/components/shell/HomeScreen.d.ts.map +1 -0
- package/components/shell/HomeScreen.js +148 -0
- package/components/shell/HomeSpringboardSurface.d.ts +21 -0
- package/components/shell/HomeSpringboardSurface.d.ts.map +1 -0
- package/components/shell/HomeSpringboardSurface.js +134 -0
- package/components/shell/KioskViewCanvas.d.ts +23 -0
- package/components/shell/KioskViewCanvas.d.ts.map +1 -0
- package/components/shell/KioskViewCanvas.js +82 -0
- package/components/shell/LoadingScreen.d.ts +2 -3
- package/components/shell/LoadingScreen.d.ts.map +1 -1
- package/components/shell/LoadingScreen.js +30 -17
- package/components/shell/NotificationCenter.d.ts +16 -0
- package/components/shell/NotificationCenter.d.ts.map +1 -0
- package/components/shell/NotificationCenter.js +128 -0
- package/components/shell/PairingCommandHint.d.ts.map +1 -1
- package/components/shell/PairingCommandHint.js +14 -16
- package/components/shell/PairingView.d.ts.map +1 -1
- package/components/shell/PairingView.js +23 -8
- package/components/shell/RestartBanner.d.ts.map +1 -1
- package/components/shell/RestartBanner.js +14 -6
- package/components/shell/ShellControllerContext.d.ts +10 -0
- package/components/shell/ShellControllerContext.d.ts.map +1 -0
- package/components/shell/ShellControllerContext.hooks.d.ts +6 -0
- package/components/shell/ShellControllerContext.hooks.d.ts.map +1 -0
- package/components/shell/ShellControllerContext.hooks.js +6 -0
- package/components/shell/ShellControllerContext.js +12 -0
- package/components/shell/ShellHeaderControls.d.ts +3 -3
- package/components/shell/ShellHeaderControls.d.ts.map +1 -1
- package/components/shell/ShellHeaderControls.js +8 -7
- package/components/shell/ShellOverlays.d.ts +1 -1
- package/components/shell/ShellOverlays.d.ts.map +1 -1
- package/components/shell/ShellOverlays.js +74 -2
- package/components/shell/ShortcutsOverlay.d.ts.map +1 -1
- package/components/shell/ShortcutsOverlay.js +12 -5
- package/components/shell/SlashCommandMenu.d.ts +47 -0
- package/components/shell/SlashCommandMenu.d.ts.map +1 -0
- package/components/shell/SlashCommandMenu.js +150 -0
- package/components/shell/StartupFailureView.d.ts +1 -1
- package/components/shell/StartupFailureView.d.ts.map +1 -1
- package/components/shell/StartupFailureView.js +11 -93
- package/components/shell/StartupScreen.d.ts +2 -0
- package/components/shell/StartupScreen.d.ts.map +1 -0
- package/components/shell/StartupScreen.js +8 -0
- package/components/shell/StartupShell.d.ts +2 -11
- package/components/shell/StartupShell.d.ts.map +1 -1
- package/components/shell/StartupShell.js +43 -219
- package/components/shell/SystemWarningBanner.d.ts.map +1 -1
- package/components/shell/SystemWarningBanner.js +9 -5
- package/components/shell/TopicChipsBar.d.ts +14 -0
- package/components/shell/TopicChipsBar.d.ts.map +1 -0
- package/components/shell/TopicChipsBar.js +18 -0
- package/components/shell/TopicGroup.d.ts +21 -0
- package/components/shell/TopicGroup.d.ts.map +1 -0
- package/components/shell/TopicGroup.js +30 -0
- package/components/shell/__e2e__/chat-ambient-fixture.d.ts +2 -0
- package/components/shell/__e2e__/chat-ambient-fixture.d.ts.map +1 -0
- package/components/shell/__e2e__/chat-ambient-fixture.js +9 -0
- package/components/shell/__e2e__/chat-sheet-fixture.d.ts +2 -0
- package/components/shell/__e2e__/chat-sheet-fixture.d.ts.map +1 -0
- package/components/shell/__e2e__/chat-sheet-fixture.js +276 -0
- package/components/shell/__e2e__/chatux-gesture-fixture.d.ts +13 -0
- package/components/shell/__e2e__/chatux-gesture-fixture.d.ts.map +1 -0
- package/components/shell/__e2e__/chatux-gesture-fixture.js +65 -0
- package/components/shell/__e2e__/home-screen-fixture.activity-stub.d.ts +10 -0
- package/components/shell/__e2e__/home-screen-fixture.activity-stub.d.ts.map +1 -0
- package/components/shell/__e2e__/home-screen-fixture.activity-stub.js +12 -0
- package/components/shell/__e2e__/home-screen-fixture.api-stub.d.ts +103 -0
- package/components/shell/__e2e__/home-screen-fixture.api-stub.d.ts.map +1 -0
- package/components/shell/__e2e__/home-screen-fixture.api-stub.js +32 -0
- package/components/shell/__e2e__/home-screen-fixture.catalog-stub.d.ts +20 -0
- package/components/shell/__e2e__/home-screen-fixture.catalog-stub.d.ts.map +1 -0
- package/components/shell/__e2e__/home-screen-fixture.catalog-stub.js +23 -0
- package/components/shell/__e2e__/home-screen-fixture.core-stub.d.ts +3 -0
- package/components/shell/__e2e__/home-screen-fixture.core-stub.d.ts.map +1 -0
- package/components/shell/__e2e__/home-screen-fixture.core-stub.js +6 -0
- package/components/shell/__e2e__/home-screen-fixture.d.ts +2 -0
- package/components/shell/__e2e__/home-screen-fixture.d.ts.map +1 -0
- package/components/shell/__e2e__/home-screen-fixture.docvis-stub.d.ts +3 -0
- package/components/shell/__e2e__/home-screen-fixture.docvis-stub.d.ts.map +1 -0
- package/components/shell/__e2e__/home-screen-fixture.docvis-stub.js +3 -0
- package/components/shell/__e2e__/home-screen-fixture.js +22 -0
- package/components/shell/__e2e__/home-screen-fixture.platform-stub.d.ts +3 -0
- package/components/shell/__e2e__/home-screen-fixture.platform-stub.d.ts.map +1 -0
- package/components/shell/__e2e__/home-screen-fixture.platform-stub.js +6 -0
- package/components/shell/__e2e__/home-screen-fixture.view-kinds-stub.d.ts +5 -0
- package/components/shell/__e2e__/home-screen-fixture.view-kinds-stub.d.ts.map +1 -0
- package/components/shell/__e2e__/home-screen-fixture.view-kinds-stub.js +3 -0
- package/components/shell/__e2e__/home-screen-fixture.views-stub.d.ts +15 -0
- package/components/shell/__e2e__/home-screen-fixture.views-stub.d.ts.map +1 -0
- package/components/shell/__e2e__/home-screen-fixture.views-stub.js +78 -0
- package/components/shell/__e2e__/usePromptSuggestions.stub.d.ts +2 -0
- package/components/shell/__e2e__/usePromptSuggestions.stub.d.ts.map +1 -0
- package/components/shell/__e2e__/usePromptSuggestions.stub.js +11 -0
- package/components/shell/first-run-theme.d.ts +6 -0
- package/components/shell/first-run-theme.d.ts.map +1 -0
- package/components/shell/first-run-theme.js +31 -0
- package/components/shell/glass-composer.d.ts +13 -0
- package/components/shell/glass-composer.d.ts.map +1 -0
- package/components/shell/glass-composer.helpers.d.ts +3 -0
- package/components/shell/glass-composer.helpers.d.ts.map +1 -0
- package/components/shell/glass-composer.helpers.js +2 -0
- package/components/shell/glass-composer.js +43 -0
- package/components/shell/home-springboard-events.d.ts +7 -0
- package/components/shell/home-springboard-events.d.ts.map +1 -0
- package/components/shell/home-springboard-events.js +6 -0
- package/components/shell/shell-state.d.ts +48 -0
- package/components/shell/shell-state.d.ts.map +1 -0
- package/components/shell/shell-state.js +19 -0
- package/components/shell/startup-shell-types.d.ts +25 -0
- package/components/shell/startup-shell-types.d.ts.map +1 -0
- package/components/shell/startup-shell-types.js +1 -0
- package/components/shell/topic-grouping.d.ts +39 -0
- package/components/shell/topic-grouping.d.ts.map +1 -0
- package/components/shell/topic-grouping.js +81 -0
- package/components/shell/use-conversation-reset.d.ts +14 -0
- package/components/shell/use-conversation-reset.d.ts.map +1 -0
- package/components/shell/use-conversation-reset.js +25 -0
- package/components/shell/use-pull-gesture.d.ts +69 -0
- package/components/shell/use-pull-gesture.d.ts.map +1 -0
- package/components/shell/use-pull-gesture.js +210 -0
- package/components/shell/useKioskViewSurfaces.d.ts +28 -0
- package/components/shell/useKioskViewSurfaces.d.ts.map +1 -0
- package/components/shell/useKioskViewSurfaces.js +56 -0
- package/components/shell/usePromptSuggestions.d.ts +39 -0
- package/components/shell/usePromptSuggestions.d.ts.map +1 -0
- package/components/shell/usePromptSuggestions.js +277 -0
- package/components/shell/useShellController.d.ts +133 -0
- package/components/shell/useShellController.d.ts.map +1 -0
- package/components/shell/useShellController.js +869 -0
- package/components/shell/useShellVoiceOutput.d.ts +38 -0
- package/components/shell/useShellVoiceOutput.d.ts.map +1 -0
- package/components/shell/useShellVoiceOutput.js +116 -0
- package/components/steward/injected.d.ts +1 -1
- package/components/steward/injected.js +1 -1
- package/components/stream/StatusBar.d.ts.map +1 -1
- package/components/stream/StatusBar.js +8 -18
- package/components/stream/popout-url.d.ts +3 -0
- package/components/stream/popout-url.d.ts.map +1 -0
- package/components/stream/popout-url.js +17 -0
- package/components/tool-events/ToolCallEventLog.d.ts +1 -3
- package/components/tool-events/ToolCallEventLog.d.ts.map +1 -1
- package/components/tool-events/ToolCallEventLog.helpers.d.ts +5 -0
- package/components/tool-events/ToolCallEventLog.helpers.d.ts.map +1 -0
- package/components/tool-events/ToolCallEventLog.helpers.js +19 -0
- package/components/tool-events/ToolCallEventLog.js +3 -21
- package/components/training/BudgetPanel.d.ts +14 -0
- package/components/training/BudgetPanel.d.ts.map +1 -0
- package/components/training/BudgetPanel.js +91 -0
- package/components/training/InferenceEndpointPanel.d.ts.map +1 -1
- package/components/training/InferenceEndpointPanel.js +52 -11
- package/components/training/JobDetailPanel.d.ts.map +1 -1
- package/components/training/JobDetailPanel.js +38 -14
- package/components/training/TrainingDashboard.d.ts.map +1 -1
- package/components/training/TrainingDashboard.js +78 -16
- package/components/training/hooks/useTrainingApi.d.ts +13 -1
- package/components/training/hooks/useTrainingApi.d.ts.map +1 -1
- package/components/training/hooks/useTrainingApi.js +49 -24
- package/components/training/injected.d.ts +1 -1
- package/components/training/injected.js +1 -1
- package/components/training/types.d.ts +26 -0
- package/components/training/types.d.ts.map +1 -1
- package/components/transcripts/TranscriptBody.d.ts +22 -0
- package/components/transcripts/TranscriptBody.d.ts.map +1 -0
- package/components/transcripts/TranscriptBody.js +49 -0
- package/components/transcripts/TranscriptPlayer.d.ts +17 -0
- package/components/transcripts/TranscriptPlayer.d.ts.map +1 -0
- package/components/transcripts/TranscriptPlayer.js +17 -0
- package/components/transcripts/TranscriptsPage.d.ts +9 -0
- package/components/transcripts/TranscriptsPage.d.ts.map +1 -0
- package/components/transcripts/TranscriptsPage.js +41 -0
- package/components/transcripts/TranscriptsView.d.ts +19 -0
- package/components/transcripts/TranscriptsView.d.ts.map +1 -0
- package/components/transcripts/TranscriptsView.js +30 -0
- package/components/transcripts/index.d.ts +5 -0
- package/components/transcripts/index.d.ts.map +1 -0
- package/components/transcripts/index.js +4 -0
- package/components/transcripts/useAudioElement.d.ts +22 -0
- package/components/transcripts/useAudioElement.d.ts.map +1 -0
- package/components/transcripts/useAudioElement.js +77 -0
- package/components/ui/accordion.d.ts +12 -0
- package/components/ui/accordion.d.ts.map +1 -0
- package/components/ui/accordion.js +17 -0
- package/components/ui/admin-dialog.d.ts +4 -4
- package/components/ui/admin-dialog.d.ts.map +1 -1
- package/components/ui/admin-dialog.js +7 -6
- package/components/ui/alert-dialog.d.ts +15 -0
- package/components/ui/alert-dialog.d.ts.map +1 -0
- package/components/ui/alert-dialog.js +39 -0
- package/components/ui/alert.d.ts +14 -0
- package/components/ui/alert.d.ts.map +1 -0
- package/components/ui/alert.js +28 -0
- package/components/ui/avatar.d.ts +7 -0
- package/components/ui/avatar.d.ts.map +1 -0
- package/components/ui/avatar.js +18 -0
- package/components/ui/badge.js +1 -1
- package/components/ui/banner.d.ts.map +1 -1
- package/components/ui/button.d.ts +2 -2
- package/components/ui/button.d.ts.map +1 -1
- package/components/ui/button.js +20 -16
- package/components/ui/calendar.d.ts +9 -0
- package/components/ui/calendar.d.ts.map +1 -0
- package/components/ui/calendar.js +78 -0
- package/components/ui/card.d.ts +3 -2
- package/components/ui/card.d.ts.map +1 -1
- package/components/ui/card.js +8 -6
- package/components/ui/carousel.d.ts +24 -0
- package/components/ui/carousel.d.ts.map +1 -0
- package/components/ui/carousel.js +106 -0
- package/components/ui/chart.d.ts +74 -0
- package/components/ui/chart.d.ts.map +1 -0
- package/components/ui/chart.js +139 -0
- package/components/ui/checkbox.js +1 -1
- package/components/ui/code-block.d.ts +14 -0
- package/components/ui/code-block.d.ts.map +1 -0
- package/components/ui/code-block.js +21 -0
- package/components/ui/collapsible.d.ts +6 -0
- package/components/ui/collapsible.d.ts.map +1 -0
- package/components/ui/collapsible.js +17 -0
- package/components/ui/confirm-delete.js +3 -3
- package/components/ui/confirm-dialog.d.ts +0 -8
- package/components/ui/confirm-dialog.d.ts.map +1 -1
- package/components/ui/confirm-dialog.hooks.d.ts +10 -0
- package/components/ui/confirm-dialog.hooks.d.ts.map +1 -0
- package/components/ui/confirm-dialog.hooks.js +53 -0
- package/components/ui/confirm-dialog.js +2 -54
- package/components/ui/connection-status.d.ts.map +1 -1
- package/components/ui/connection-status.js +7 -7
- package/components/ui/copy-button.d.ts.map +1 -1
- package/components/ui/copy-button.js +24 -4
- package/components/ui/dialog.d.ts.map +1 -1
- package/components/ui/dialog.js +10 -3
- package/components/ui/dropdown-menu.js +6 -6
- package/components/ui/empty-state.d.ts +2 -0
- package/components/ui/empty-state.d.ts.map +1 -1
- package/components/ui/empty-state.js +2 -1
- package/components/ui/error-boundary.d.ts +1 -1
- package/components/ui/error-boundary.d.ts.map +1 -1
- package/components/ui/error-boundary.js +3 -3
- package/components/ui/field-switch.js +1 -1
- package/components/ui/form-select.d.ts +1 -1
- package/components/ui/form-select.js +2 -2
- package/components/ui/form.d.ts +62 -0
- package/components/ui/form.d.ts.map +1 -0
- package/components/ui/form.js +98 -0
- package/components/ui/grid.d.ts +1 -1
- package/components/ui/hover-card.d.ts +7 -0
- package/components/ui/hover-card.d.ts.map +1 -0
- package/components/ui/hover-card.js +18 -0
- package/components/ui/input-group.d.ts +25 -0
- package/components/ui/input-group.d.ts.map +1 -0
- package/components/ui/input-group.js +44 -0
- package/components/ui/input.js +3 -3
- package/components/ui/new-action-button.d.ts +1 -1
- package/components/ui/new-action-button.js +1 -1
- package/components/ui/pagination.d.ts +18 -0
- package/components/ui/pagination.d.ts.map +1 -0
- package/components/ui/pagination.js +33 -0
- package/components/ui/popover.js +1 -1
- package/components/ui/progress.d.ts +5 -0
- package/components/ui/progress.d.ts.map +1 -0
- package/components/ui/progress.js +8 -0
- package/components/ui/scroll-area.d.ts +8 -0
- package/components/ui/scroll-area.d.ts.map +1 -0
- package/components/ui/scroll-area.js +17 -0
- package/components/ui/segmented-control.js +4 -4
- package/components/ui/select.js +3 -3
- package/components/ui/settings-controls.d.ts +18 -19
- package/components/ui/settings-controls.d.ts.map +1 -1
- package/components/ui/settings-controls.js +30 -21
- package/components/ui/skeleton-layouts.d.ts +17 -0
- package/components/ui/skeleton-layouts.d.ts.map +1 -0
- package/components/ui/skeleton-layouts.js +26 -0
- package/components/ui/skeleton.js +1 -1
- package/components/ui/slider.d.ts +3 -1
- package/components/ui/slider.d.ts.map +1 -1
- package/components/ui/slider.js +1 -1
- package/components/ui/stack.d.ts +3 -3
- package/components/ui/status-badge.d.ts +4 -4
- package/components/ui/status-badge.d.ts.map +1 -1
- package/components/ui/status-badge.helpers.d.ts +6 -0
- package/components/ui/status-badge.helpers.d.ts.map +1 -0
- package/components/ui/status-badge.helpers.js +72 -0
- package/components/ui/status-badge.js +41 -51
- package/components/ui/switch.d.ts +5 -2
- package/components/ui/switch.d.ts.map +1 -1
- package/components/ui/switch.js +18 -3
- package/components/ui/table.d.ts +15 -0
- package/components/ui/table.d.ts.map +1 -0
- package/components/ui/table.js +24 -0
- package/components/ui/tabs.d.ts.map +1 -1
- package/components/ui/tabs.js +3 -3
- package/components/ui/tag-editor.js +1 -1
- package/components/ui/textarea.js +3 -3
- package/components/ui/toggle.d.ts +10 -0
- package/components/ui/toggle.d.ts.map +1 -0
- package/components/ui/toggle.js +30 -0
- package/components/ui/tooltip-extended.d.ts +1 -1
- package/components/ui/tooltip-extended.d.ts.map +1 -1
- package/components/ui/tooltip-extended.js +5 -3
- package/components/ui/tooltip.d.ts +6 -4
- package/components/ui/tooltip.d.ts.map +1 -1
- package/components/ui/tooltip.js +1 -1
- package/components/ui/typography.d.ts +1 -1
- package/components/views/DynamicViewLoader.d.ts +64 -0
- package/components/views/DynamicViewLoader.d.ts.map +1 -0
- package/components/views/DynamicViewLoader.js +960 -0
- package/components/views/ShellViewAgentSurface.d.ts +22 -0
- package/components/views/ShellViewAgentSurface.d.ts.map +1 -0
- package/components/views/ShellViewAgentSurface.js +71 -0
- package/components/views/TerminalPluginView.d.ts +10 -0
- package/components/views/TerminalPluginView.d.ts.map +1 -0
- package/components/views/TerminalPluginView.js +145 -0
- package/components/views/ViewIcon.d.ts +7 -0
- package/components/views/ViewIcon.d.ts.map +1 -0
- package/components/views/ViewIcon.js +115 -0
- package/components/views/ViewTileImage.d.ts +25 -0
- package/components/views/ViewTileImage.d.ts.map +1 -0
- package/components/views/ViewTileImage.js +52 -0
- package/components/views/view-interact-registry.d.ts +32 -0
- package/components/views/view-interact-registry.d.ts.map +1 -0
- package/components/views/view-interact-registry.js +81 -0
- package/components/workspace/AppWorkspaceChrome.d.ts +20 -53
- package/components/workspace/AppWorkspaceChrome.d.ts.map +1 -1
- package/components/workspace/AppWorkspaceChrome.js +26 -212
- package/config/allowed-hosts.d.ts +1 -7
- package/config/allowed-hosts.d.ts.map +1 -1
- package/config/allowed-hosts.js +1 -43
- package/config/api-key-prefix-hints.d.ts +1 -24
- package/config/api-key-prefix-hints.d.ts.map +1 -1
- package/config/api-key-prefix-hints.js +1 -26
- package/config/boot-config-react.hooks.d.ts +5 -0
- package/config/boot-config-react.hooks.d.ts.map +1 -0
- package/config/boot-config-react.hooks.js +12 -0
- package/config/boot-config-store.d.ts +46 -31
- package/config/boot-config-store.d.ts.map +1 -1
- package/config/boot-config-store.js +3 -52
- package/config/boot-config.d.ts +1 -1
- package/config/boot-config.js +1 -1
- package/config/branding-base.d.ts +71 -0
- package/config/branding-base.d.ts.map +1 -0
- package/config/branding-base.js +18 -0
- package/config/branding-react.hooks.d.ts +4 -0
- package/config/branding-react.hooks.d.ts.map +1 -0
- package/config/branding-react.hooks.js +11 -0
- package/config/branding.d.ts +2 -68
- package/config/branding.d.ts.map +1 -1
- package/config/branding.js +2 -23
- package/config/cloud-only.d.ts +1 -5
- package/config/cloud-only.d.ts.map +1 -1
- package/config/cloud-only.js +1 -15
- package/config/config-catalog.d.ts +10 -366
- package/config/config-catalog.d.ts.map +1 -1
- package/config/config-catalog.js +10 -705
- package/config/index.d.ts +9 -8
- package/config/index.d.ts.map +1 -1
- package/config/index.js +2 -2
- package/config/plugin-ui-spec.d.ts +1 -41
- package/config/plugin-ui-spec.d.ts.map +1 -1
- package/config/plugin-ui-spec.js +1 -256
- package/config/ui-spec.d.ts +1 -163
- package/config/ui-spec.d.ts.map +1 -1
- package/config/ui-spec.js +0 -12
- package/content-packs/apply-pack.d.ts +4 -4
- package/content-packs/apply-pack.d.ts.map +1 -1
- package/content-packs/apply-pack.js +4 -4
- package/content-packs/index.d.ts +3 -3
- package/desktop-shell-compat.d.ts +7 -0
- package/desktop-shell-compat.d.ts.map +1 -0
- package/desktop-shell-compat.js +9 -0
- package/events/index.d.ts +103 -46
- package/events/index.d.ts.map +1 -1
- package/events/index.js +128 -34
- package/first-run/AgentPicker.d.ts +32 -0
- package/first-run/AgentPicker.d.ts.map +1 -0
- package/first-run/AgentPicker.js +45 -0
- package/first-run/CompactOnboarding.d.ts +3 -0
- package/first-run/CompactOnboarding.d.ts.map +1 -0
- package/first-run/CompactOnboarding.js +114 -0
- package/first-run/__e2e__/onboarding-fixture.d.ts +2 -0
- package/first-run/__e2e__/onboarding-fixture.d.ts.map +1 -0
- package/first-run/__e2e__/onboarding-fixture.js +16 -0
- package/first-run/__e2e__/use-first-run-controller.stub.d.ts +41 -0
- package/first-run/__e2e__/use-first-run-controller.stub.d.ts.map +1 -0
- package/first-run/__e2e__/use-first-run-controller.stub.js +70 -0
- package/first-run/auto-download-recommended.d.ts +24 -0
- package/first-run/auto-download-recommended.d.ts.map +1 -0
- package/first-run/auto-download-recommended.js +118 -0
- package/first-run/deep-link-handler.d.ts +62 -0
- package/first-run/deep-link-handler.d.ts.map +1 -0
- package/first-run/deep-link-handler.js +147 -0
- package/first-run/ensure-store-build-workspace-folder.d.ts +22 -0
- package/first-run/ensure-store-build-workspace-folder.d.ts.map +1 -0
- package/first-run/ensure-store-build-workspace-folder.js +45 -0
- package/first-run/first-run-config.d.ts +55 -0
- package/first-run/first-run-config.d.ts.map +1 -0
- package/first-run/first-run-config.js +227 -0
- package/first-run/first-run.d.ts +89 -0
- package/first-run/first-run.d.ts.map +1 -0
- package/first-run/first-run.js +339 -0
- package/first-run/local-agent-token.d.ts +5 -0
- package/first-run/local-agent-token.d.ts.map +1 -0
- package/first-run/local-agent-token.js +53 -0
- package/first-run/mobile-runtime-mode.d.ts +32 -0
- package/first-run/mobile-runtime-mode.d.ts.map +1 -0
- package/first-run/mobile-runtime-mode.js +201 -0
- package/first-run/onboarding-intent.d.ts +34 -0
- package/first-run/onboarding-intent.d.ts.map +1 -0
- package/first-run/onboarding-intent.js +38 -0
- package/first-run/pre-seed-local-runtime.d.ts +6 -0
- package/first-run/pre-seed-local-runtime.d.ts.map +1 -0
- package/first-run/pre-seed-local-runtime.js +91 -0
- package/first-run/probe-local-agent.d.ts +50 -0
- package/first-run/probe-local-agent.d.ts.map +1 -0
- package/first-run/probe-local-agent.js +219 -0
- package/first-run/reload-into-first-run-runtime.d.ts +14 -0
- package/first-run/reload-into-first-run-runtime.d.ts.map +1 -0
- package/first-run/reload-into-first-run-runtime.js +46 -0
- package/first-run/runtime-target.d.ts +4 -0
- package/first-run/runtime-target.d.ts.map +1 -0
- package/first-run/runtime-target.js +13 -0
- package/first-run/setup-steps.d.ts +22 -0
- package/first-run/setup-steps.d.ts.map +1 -0
- package/first-run/setup-steps.js +55 -0
- package/first-run/use-first-run-controller.d.ts +46 -0
- package/first-run/use-first-run-controller.d.ts.map +1 -0
- package/first-run/use-first-run-controller.js +1146 -0
- package/first-run/use-microphone-permission.d.ts +17 -0
- package/first-run/use-microphone-permission.d.ts.map +1 -0
- package/first-run/use-microphone-permission.js +106 -0
- package/first-run/voice-readiness.d.ts +14 -0
- package/first-run/voice-readiness.d.ts.map +1 -0
- package/first-run/voice-readiness.js +78 -0
- package/genui/actions.d.ts +8 -0
- package/genui/actions.d.ts.map +1 -0
- package/genui/actions.js +28 -0
- package/genui/catalog.d.ts +11 -0
- package/genui/catalog.d.ts.map +1 -0
- package/genui/catalog.js +58 -0
- package/genui/index.d.ts +9 -0
- package/genui/index.d.ts.map +1 -0
- package/genui/index.js +8 -0
- package/genui/modes.d.ts +7 -0
- package/genui/modes.d.ts.map +1 -0
- package/genui/modes.js +41 -0
- package/genui/pipe.d.ts +10 -0
- package/genui/pipe.d.ts.map +1 -0
- package/genui/pipe.js +122 -0
- package/genui/renderer.d.ts +4 -0
- package/genui/renderer.d.ts.map +1 -0
- package/genui/renderer.js +213 -0
- package/genui/starter-pack-demo.d.ts +3 -0
- package/genui/starter-pack-demo.d.ts.map +1 -0
- package/genui/starter-pack-demo.js +114 -0
- package/genui/streaming.d.ts +5 -0
- package/genui/streaming.d.ts.map +1 -0
- package/genui/streaming.js +145 -0
- package/genui/types.d.ts +132 -0
- package/genui/types.d.ts.map +1 -0
- package/genui/types.js +1 -0
- package/genui/use-json-render-message.d.ts +20 -0
- package/genui/use-json-render-message.d.ts.map +1 -0
- package/genui/use-json-render-message.js +38 -0
- package/genui/use-ui-stream.d.ts +8 -0
- package/genui/use-ui-stream.d.ts.map +1 -0
- package/genui/use-ui-stream.js +56 -0
- package/genui/validator.d.ts +4 -0
- package/genui/validator.d.ts.map +1 -0
- package/genui/validator.js +301 -0
- package/hooks/BugReportProvider.d.ts +7 -0
- package/hooks/BugReportProvider.d.ts.map +1 -0
- package/hooks/BugReportProvider.js +5 -0
- package/hooks/frame-budget.d.ts +124 -0
- package/hooks/frame-budget.d.ts.map +1 -0
- package/hooks/frame-budget.js +183 -0
- package/hooks/index.d.ts +27 -19
- package/hooks/index.d.ts.map +1 -1
- package/hooks/index.js +12 -4
- package/hooks/resource-cache.d.ts +58 -0
- package/hooks/resource-cache.d.ts.map +1 -0
- package/hooks/resource-cache.js +277 -0
- package/hooks/useAccounts.d.ts +2 -4
- package/hooks/useAccounts.d.ts.map +1 -1
- package/hooks/useAccounts.js +8 -12
- package/hooks/useActivityEvents.d.ts +12 -0
- package/hooks/useActivityEvents.d.ts.map +1 -1
- package/hooks/useActivityEvents.js +57 -67
- package/hooks/useAuthStatus.d.ts +2 -2
- package/hooks/useAuthStatus.d.ts.map +1 -1
- package/hooks/useAuthStatus.js +53 -23
- package/hooks/useAvailableViews.d.ts +86 -0
- package/hooks/useAvailableViews.d.ts.map +1 -0
- package/hooks/useAvailableViews.js +238 -0
- package/hooks/useBugReport.hooks.d.ts +21 -0
- package/hooks/useBugReport.hooks.d.ts.map +1 -0
- package/hooks/useBugReport.hooks.js +24 -0
- package/hooks/useCachedResource.d.ts +38 -0
- package/hooks/useCachedResource.d.ts.map +1 -0
- package/hooks/useCachedResource.js +108 -0
- package/hooks/useChatAvatarVoiceBridge.d.ts +0 -1
- package/hooks/useChatAvatarVoiceBridge.d.ts.map +1 -1
- package/hooks/useCloudHandoffPhase.d.ts +11 -0
- package/hooks/useCloudHandoffPhase.d.ts.map +1 -0
- package/hooks/useCloudHandoffPhase.js +45 -0
- package/hooks/useConnectorAccounts.d.ts +2 -4
- package/hooks/useConnectorAccounts.d.ts.map +1 -1
- package/hooks/useConnectorAccounts.js +3 -9
- package/hooks/useConnectorReconnect.d.ts +81 -0
- package/hooks/useConnectorReconnect.d.ts.map +1 -0
- package/hooks/useConnectorReconnect.js +180 -0
- package/hooks/useConnectorSendAsAccount.d.ts +3 -5
- package/hooks/useConnectorSendAsAccount.d.ts.map +1 -1
- package/hooks/useConnectorSendAsAccount.js +14 -14
- package/hooks/useContextMenu.d.ts +1 -1
- package/hooks/useContextMenu.d.ts.map +1 -1
- package/hooks/useContextMenu.js +7 -3
- package/hooks/useContinuousChat.d.ts +109 -0
- package/hooks/useContinuousChat.d.ts.map +1 -0
- package/hooks/useContinuousChat.js +241 -0
- package/hooks/useDefaultProviderPresets.d.ts +46 -0
- package/hooks/useDefaultProviderPresets.d.ts.map +1 -0
- package/hooks/useDefaultProviderPresets.js +54 -0
- package/hooks/useDesktopBridgeEvent.d.ts +29 -0
- package/hooks/useDesktopBridgeEvent.d.ts.map +1 -0
- package/hooks/useDesktopBridgeEvent.js +39 -0
- package/hooks/useDesktopTabs.d.ts +26 -0
- package/hooks/useDesktopTabs.d.ts.map +1 -0
- package/hooks/useDesktopTabs.js +113 -0
- package/hooks/useFetchData.d.ts +37 -0
- package/hooks/useFetchData.d.ts.map +1 -0
- package/hooks/useFetchData.js +93 -0
- package/hooks/useFrameBudgetMonitor.d.ts +30 -0
- package/hooks/useFrameBudgetMonitor.d.ts.map +1 -0
- package/hooks/useFrameBudgetMonitor.js +105 -0
- package/hooks/useKeyboardShortcuts.d.ts +6 -13
- package/hooks/useKeyboardShortcuts.d.ts.map +1 -1
- package/hooks/useKeyboardShortcuts.js +21 -46
- package/hooks/useLayoutShiftMonitor.d.ts +43 -0
- package/hooks/useLayoutShiftMonitor.d.ts.map +1 -0
- package/hooks/useLayoutShiftMonitor.js +128 -0
- package/hooks/useModalState.d.ts +31 -0
- package/hooks/useModalState.d.ts.map +1 -0
- package/hooks/useModalState.js +45 -0
- package/hooks/useNow.d.ts +10 -0
- package/hooks/useNow.d.ts.map +1 -0
- package/hooks/useNow.js +18 -0
- package/hooks/useRenderGuard.d.ts +51 -12
- package/hooks/useRenderGuard.d.ts.map +1 -1
- package/hooks/useRenderGuard.js +157 -30
- package/hooks/useRuntimeMode.d.ts +1 -1
- package/hooks/useRuntimeMode.d.ts.map +1 -1
- package/hooks/useSignalPairing.d.ts +2 -2
- package/hooks/useViewCatalog.d.ts +25 -0
- package/hooks/useViewCatalog.d.ts.map +1 -0
- package/hooks/useViewCatalog.js +85 -0
- package/hooks/useViewEvent.d.ts +28 -0
- package/hooks/useViewEvent.d.ts.map +1 -0
- package/hooks/useViewEvent.js +40 -0
- package/hooks/useVoiceChat.d.ts +23 -6
- package/hooks/useVoiceChat.d.ts.map +1 -1
- package/hooks/useVoiceChat.js +665 -98
- package/hooks/useWhatsAppPairing.d.ts +2 -2
- package/hooks/useWhatsAppPairing.d.ts.map +1 -1
- package/hooks/useWhatsAppPairing.js +28 -5
- package/hooks/view-catalog.d.ts +106 -0
- package/hooks/view-catalog.d.ts.map +1 -0
- package/hooks/view-catalog.js +176 -0
- package/i18n/index.d.ts +2 -2
- package/i18n/index.d.ts.map +1 -1
- package/i18n/index.js +4 -2
- package/i18n/locales/en.json +4849 -668
- package/i18n/locales/es.json +5334 -1210
- package/i18n/locales/ja.json +7417 -0
- package/i18n/locales/ko.json +5223 -1099
- package/i18n/locales/pt.json +5215 -1091
- package/i18n/locales/tl.json +5449 -1325
- package/i18n/locales/vi.json +5151 -1027
- package/i18n/locales/zh-CN.json +5096 -972
- package/i18n/messages.d.ts +15 -1
- package/i18n/messages.d.ts.map +1 -1
- package/i18n/messages.js +54 -13
- package/i18n/region.d.ts +43 -0
- package/i18n/region.d.ts.map +1 -0
- package/i18n/region.js +169 -0
- package/index.d.ts +148 -40
- package/index.d.ts.map +1 -1
- package/index.js +112 -9
- package/layouts/chat-panel-layout/chat-panel-layout.js +2 -2
- package/layouts/chat-panel-layout/index.d.ts +1 -1
- package/layouts/content-layout/index.d.ts +1 -1
- package/layouts/index.d.ts +4 -4
- package/layouts/page-layout/index.d.ts +4 -4
- package/layouts/page-layout/page-layout-mobile-drawer.d.ts +1 -1
- package/layouts/page-layout/page-layout-mobile-drawer.d.ts.map +1 -1
- package/layouts/page-layout/page-layout-mobile-drawer.js +2 -2
- package/layouts/page-layout/page-layout-types.d.ts +2 -2
- package/layouts/page-layout/page-layout.d.ts +1 -1
- package/layouts/workspace-layout/index.d.ts +3 -3
- package/layouts/workspace-layout/index.d.ts.map +1 -1
- package/layouts/workspace-layout/index.js +1 -1
- package/layouts/workspace-layout/workspace-layout-types.d.ts +1 -1
- package/layouts/workspace-layout/workspace-layout.d.ts +1 -1
- package/layouts/workspace-layout/workspace-layout.d.ts.map +1 -1
- package/layouts/workspace-layout/workspace-layout.js +2 -3
- package/layouts/workspace-layout/workspace-mobile-sidebar-controls.hooks.d.ts +13 -0
- package/layouts/workspace-layout/workspace-mobile-sidebar-controls.hooks.d.ts.map +1 -0
- package/lib/floating-layers.d.ts +1 -2
- package/lib/floating-layers.d.ts.map +1 -1
- package/lib/floating-layers.js +2 -3
- package/navigation/index.d.ts +18 -21
- package/navigation/index.d.ts.map +1 -1
- package/navigation/index.js +113 -75
- package/navigation/main-tab.d.ts +6 -11
- package/navigation/main-tab.d.ts.map +1 -1
- package/navigation/main-tab.js +8 -17
- package/navigation/nav-lock.d.ts +18 -0
- package/navigation/nav-lock.d.ts.map +1 -0
- package/navigation/nav-lock.js +34 -0
- package/package.json +304 -19
- package/perf/PerfOverlay.d.ts +21 -0
- package/perf/PerfOverlay.d.ts.map +1 -0
- package/perf/PerfOverlay.js +90 -0
- package/perf/perf-hud-control.d.ts +21 -0
- package/perf/perf-hud-control.d.ts.map +1 -0
- package/perf/perf-hud-control.js +98 -0
- package/platform/android-runtime.d.ts +3 -3
- package/platform/android-runtime.d.ts.map +1 -1
- package/platform/android-runtime.js +4 -7
- package/platform/aosp-user-agent.d.ts +10 -0
- package/platform/aosp-user-agent.d.ts.map +1 -0
- package/platform/aosp-user-agent.js +13 -0
- package/platform/assistant-launch-payload.d.ts +27 -0
- package/platform/assistant-launch-payload.d.ts.map +1 -0
- package/platform/assistant-launch-payload.js +110 -0
- package/platform/browser-launch.d.ts +1 -0
- package/platform/browser-launch.d.ts.map +1 -1
- package/platform/browser-launch.js +56 -12
- package/platform/cloud-preference-patch.d.ts +1 -5
- package/platform/cloud-preference-patch.d.ts.map +1 -1
- package/platform/cloud-preference-patch.js +2 -24
- package/platform/desktop-permissions-client.d.ts +1 -1
- package/platform/empty-node-module.d.ts +2 -2
- package/platform/empty-node-module.d.ts.map +1 -1
- package/platform/empty-node-module.js +2 -2
- package/platform/first-run-reset.d.ts +21 -0
- package/platform/first-run-reset.d.ts.map +1 -0
- package/platform/first-run-reset.js +140 -0
- package/platform/index.d.ts +14 -10
- package/platform/index.d.ts.map +1 -1
- package/platform/index.js +7 -10
- package/platform/init.d.ts +16 -18
- package/platform/init.d.ts.map +1 -1
- package/platform/init.js +41 -29
- package/platform/ios-runtime.d.ts +18 -1
- package/platform/ios-runtime.d.ts.map +1 -1
- package/platform/ios-runtime.js +45 -24
- package/platform/mobile-permissions-client.d.ts +25 -0
- package/platform/mobile-permissions-client.d.ts.map +1 -0
- package/platform/mobile-permissions-client.js +628 -0
- package/platform/platform-guards.d.ts +47 -0
- package/platform/platform-guards.d.ts.map +1 -0
- package/platform/platform-guards.js +55 -0
- package/platform/types.d.ts +7 -11
- package/platform/types.d.ts.map +1 -1
- package/platform/window-shell.d.ts +21 -4
- package/platform/window-shell.d.ts.map +1 -1
- package/platform/window-shell.js +25 -5
- package/providers/index.d.ts +1 -1
- package/providers/index.d.ts.map +1 -1
- package/providers/index.js +1 -1
- package/retained-lazy.d.ts +27 -0
- package/retained-lazy.d.ts.map +1 -0
- package/retained-lazy.js +285 -0
- package/services/app-updates/update-policy.d.ts +64 -0
- package/services/app-updates/update-policy.d.ts.map +1 -0
- package/services/app-updates/update-policy.js +228 -0
- package/services/local-inference/active-model.d.ts +8 -86
- package/services/local-inference/active-model.d.ts.map +1 -1
- package/services/local-inference/active-model.js +88 -23
- package/services/local-inference/assignments.d.ts +15 -17
- package/services/local-inference/assignments.d.ts.map +1 -1
- package/services/local-inference/assignments.js +53 -26
- package/services/local-inference/bundled-models.d.ts +1 -1
- package/services/local-inference/bundled-models.js +1 -1
- package/services/local-inference/catalog-policy.d.ts +7 -0
- package/services/local-inference/catalog-policy.d.ts.map +1 -0
- package/services/local-inference/catalog-policy.js +19 -0
- package/services/local-inference/catalog.d.ts +6 -51
- package/services/local-inference/catalog.d.ts.map +1 -1
- package/services/local-inference/catalog.js +6 -268
- package/services/local-inference/custom-search.d.ts +34 -0
- package/services/local-inference/custom-search.d.ts.map +1 -0
- package/services/local-inference/custom-search.js +61 -0
- package/services/local-inference/device-bridge.d.ts +36 -5
- package/services/local-inference/device-bridge.d.ts.map +1 -1
- package/services/local-inference/device-bridge.js +56 -3
- package/services/local-inference/disk-space.d.ts +15 -0
- package/services/local-inference/disk-space.d.ts.map +1 -0
- package/services/local-inference/disk-space.js +29 -0
- package/services/local-inference/downloader.d.ts +40 -5
- package/services/local-inference/downloader.d.ts.map +1 -1
- package/services/local-inference/downloader.js +102 -144
- package/services/local-inference/engine.d.ts +18 -32
- package/services/local-inference/engine.d.ts.map +1 -1
- package/services/local-inference/engine.js +42 -207
- package/services/local-inference/external-scanner.d.ts +1 -1
- package/services/local-inference/handler-registry.d.ts +1 -1
- package/services/local-inference/handler-registry.d.ts.map +1 -1
- package/services/local-inference/handler-registry.js +14 -7
- package/services/local-inference/hardware.d.ts +44 -10
- package/services/local-inference/hardware.d.ts.map +1 -1
- package/services/local-inference/hardware.js +187 -76
- package/services/local-inference/hf-search.d.ts +7 -15
- package/services/local-inference/hf-search.d.ts.map +1 -1
- package/services/local-inference/hf-search.js +17 -164
- package/services/local-inference/home-model-status.d.ts +25 -0
- package/services/local-inference/home-model-status.d.ts.map +1 -0
- package/services/local-inference/home-model-status.js +90 -0
- package/services/local-inference/index.d.ts +11 -8
- package/services/local-inference/index.d.ts.map +1 -1
- package/services/local-inference/index.js +5 -2
- package/services/local-inference/load-args.d.ts +60 -0
- package/services/local-inference/load-args.d.ts.map +1 -0
- package/services/local-inference/load-args.js +10 -0
- package/services/local-inference/manifest.d.ts +45 -0
- package/services/local-inference/manifest.d.ts.map +1 -0
- package/services/local-inference/manifest.js +26 -0
- package/services/local-inference/paths.d.ts +1 -7
- package/services/local-inference/paths.d.ts.map +1 -1
- package/services/local-inference/paths.js +1 -7
- package/services/local-inference/readiness.d.ts +1 -1
- package/services/local-inference/readiness.js +1 -1
- package/services/local-inference/recommendation.d.ts +10 -7
- package/services/local-inference/recommendation.d.ts.map +1 -1
- package/services/local-inference/recommendation.js +64 -53
- package/services/local-inference/registry.d.ts +11 -13
- package/services/local-inference/registry.d.ts.map +1 -1
- package/services/local-inference/registry.js +19 -17
- package/services/local-inference/resource-snapshot-bridge.d.ts +51 -0
- package/services/local-inference/resource-snapshot-bridge.d.ts.map +1 -0
- package/services/local-inference/resource-snapshot-bridge.js +90 -0
- package/services/local-inference/routing-policy.d.ts +6 -2
- package/services/local-inference/routing-policy.d.ts.map +1 -1
- package/services/local-inference/routing-policy.js +39 -5
- package/services/local-inference/routing-preferences.d.ts +1 -7
- package/services/local-inference/routing-preferences.d.ts.map +1 -1
- package/services/local-inference/routing-preferences.js +1 -7
- package/services/local-inference/service.d.ts +15 -5
- package/services/local-inference/service.d.ts.map +1 -1
- package/services/local-inference/service.js +38 -8
- package/services/local-inference/token-tree.d.ts +188 -0
- package/services/local-inference/token-tree.d.ts.map +1 -0
- package/services/local-inference/token-tree.js +185 -0
- package/services/local-inference/tokenizer-client.d.ts +88 -0
- package/services/local-inference/tokenizer-client.d.ts.map +1 -0
- package/services/local-inference/tokenizer-client.js +166 -0
- package/services/local-inference/types.d.ts +5 -235
- package/services/local-inference/types.d.ts.map +1 -1
- package/services/local-inference/types.js +5 -18
- package/services/local-inference/verify.d.ts +1 -7
- package/services/local-inference/verify.d.ts.map +1 -1
- package/services/local-inference/verify.js +1 -7
- package/shell-params.d.ts +1 -1
- package/shell-params.d.ts.map +1 -1
- package/shell-params.js +0 -1
- package/slots/task-coordinator-slots.d.ts +8 -26
- package/slots/task-coordinator-slots.d.ts.map +1 -1
- package/slots/task-coordinator-slots.helpers.d.ts +32 -0
- package/slots/task-coordinator-slots.helpers.d.ts.map +1 -0
- package/slots/task-coordinator-slots.helpers.js +14 -0
- package/slots/task-coordinator-slots.js +19 -8
- package/spatial/context.d.ts +24 -0
- package/spatial/context.d.ts.map +1 -0
- package/spatial/context.js +15 -0
- package/spatial/dom.d.ts +48 -0
- package/spatial/dom.d.ts.map +1 -0
- package/spatial/dom.js +51 -0
- package/spatial/evaluate.d.ts +67 -0
- package/spatial/evaluate.d.ts.map +1 -0
- package/spatial/evaluate.js +233 -0
- package/spatial/example.d.ts +19 -0
- package/spatial/example.d.ts.map +1 -0
- package/spatial/example.js +28 -0
- package/spatial/gallery.d.ts +20 -0
- package/spatial/gallery.d.ts.map +1 -0
- package/spatial/gallery.js +179 -0
- package/spatial/index.d.ts +24 -0
- package/spatial/index.d.ts.map +1 -0
- package/spatial/index.js +25 -0
- package/spatial/ir.d.ts +157 -0
- package/spatial/ir.d.ts.map +1 -0
- package/spatial/ir.js +41 -0
- package/spatial/primitives.d.ts +107 -0
- package/spatial/primitives.d.ts.map +1 -0
- package/spatial/primitives.js +450 -0
- package/spatial/tui/engine.d.ts +28 -0
- package/spatial/tui/engine.d.ts.map +1 -0
- package/spatial/tui/engine.js +488 -0
- package/spatial/tui/framing.d.ts +33 -0
- package/spatial/tui/framing.d.ts.map +1 -0
- package/spatial/tui/framing.js +189 -0
- package/spatial/tui/index.d.ts +10 -0
- package/spatial/tui/index.d.ts.map +1 -0
- package/spatial/tui/index.js +10 -0
- package/spatial/tui/renderer.d.ts +62 -0
- package/spatial/tui/renderer.d.ts.map +1 -0
- package/spatial/tui/renderer.js +161 -0
- package/state/AppContext.d.ts +1 -3
- package/state/AppContext.d.ts.map +1 -1
- package/state/AppContext.hooks.d.ts +15 -0
- package/state/AppContext.hooks.d.ts.map +1 -0
- package/state/AppContext.hooks.js +11 -0
- package/state/AppContext.js +698 -586
- package/state/ChatComposerContext.hooks.d.ts +59 -0
- package/state/ChatComposerContext.hooks.d.ts.map +1 -0
- package/state/ChatComposerContext.hooks.js +148 -0
- package/state/ChatTurnStatusContext.hooks.d.ts +27 -0
- package/state/ChatTurnStatusContext.hooks.d.ts.map +1 -0
- package/state/ChatTurnStatusContext.hooks.js +24 -0
- package/state/CompanionSceneConfigContext.hooks.d.ts +28 -0
- package/state/CompanionSceneConfigContext.hooks.d.ts.map +1 -0
- package/state/CompanionSceneConfigContext.hooks.js +33 -0
- package/state/ConversationMessagesContext.hooks.d.ts +26 -0
- package/state/ConversationMessagesContext.hooks.d.ts.map +1 -0
- package/state/ConversationMessagesContext.hooks.js +22 -0
- package/state/PtySessionsContext.hooks.d.ts +18 -0
- package/state/PtySessionsContext.hooks.d.ts.map +1 -0
- package/state/PtySessionsContext.hooks.js +18 -0
- package/state/TranslationContext.hooks.d.ts +28 -0
- package/state/TranslationContext.hooks.d.ts.map +1 -0
- package/state/TranslationContext.hooks.js +38 -0
- package/state/TranslationProvider.d.ts +23 -0
- package/state/TranslationProvider.d.ts.map +1 -0
- package/state/TranslationProvider.js +86 -0
- package/state/action-banner.d.ts +18 -0
- package/state/action-banner.d.ts.map +1 -0
- package/state/action-banner.js +1 -0
- package/state/action-notice.d.ts +31 -1
- package/state/action-notice.d.ts.map +1 -1
- package/state/action-notice.js +27 -1
- package/state/agent-profiles.d.ts +10 -2
- package/state/agent-profiles.d.ts.map +1 -1
- package/state/agent-profiles.js +21 -2
- package/state/agent-runtime-target.d.ts +2 -2
- package/state/agent-runtime-target.d.ts.map +1 -1
- package/state/agent-runtime-target.js +5 -1
- package/state/app-store.d.ts +52 -0
- package/state/app-store.d.ts.map +1 -0
- package/state/app-store.js +169 -0
- package/state/autonomy.d.ts +1 -1
- package/state/chat-conversation-guards.d.ts +1 -1
- package/state/chat-conversation-guards.d.ts.map +1 -1
- package/state/chat-conversation-guards.js +0 -1
- package/state/cloud-steward-login.d.ts +44 -0
- package/state/cloud-steward-login.d.ts.map +1 -0
- package/state/cloud-steward-login.js +52 -0
- package/state/complete-reset-local-state-after-wipe.d.ts +8 -8
- package/state/complete-reset-local-state-after-wipe.d.ts.map +1 -1
- package/state/complete-reset-local-state-after-wipe.js +6 -6
- package/state/conversation-message-filter.d.ts +10 -0
- package/state/conversation-message-filter.d.ts.map +1 -0
- package/state/conversation-message-filter.js +18 -0
- package/state/first-run-bootstrap.d.ts +17 -0
- package/state/first-run-bootstrap.d.ts.map +1 -0
- package/state/first-run-bootstrap.js +62 -0
- package/state/first-run-restart.d.ts +8 -0
- package/state/first-run-restart.d.ts.map +1 -0
- package/state/first-run-restart.js +8 -0
- package/state/handle-reset-applied-from-main.d.ts +3 -3
- package/state/index.d.ts +24 -15
- package/state/index.d.ts.map +1 -1
- package/state/index.js +15 -6
- package/state/internal.d.ts +11 -8
- package/state/internal.d.ts.map +1 -1
- package/state/internal.js +8 -6
- package/state/notifications/navigate-deep-link.d.ts +27 -0
- package/state/notifications/navigate-deep-link.d.ts.map +1 -0
- package/state/notifications/navigate-deep-link.js +48 -0
- package/state/notifications/notification-store.d.ts +35 -0
- package/state/notifications/notification-store.d.ts.map +1 -0
- package/state/notifications/notification-store.js +179 -0
- package/state/parsers.d.ts +3 -3
- package/state/parsers.d.ts.map +1 -1
- package/state/parsers.js +16 -3
- package/state/persistence.d.ts +59 -15
- package/state/persistence.d.ts.map +1 -1
- package/state/persistence.js +218 -86
- package/state/private-network-host.d.ts +11 -0
- package/state/private-network-host.d.ts.map +1 -0
- package/state/private-network-host.js +35 -0
- package/state/screen-capture-bridge.d.ts +8 -0
- package/state/screen-capture-bridge.d.ts.map +1 -0
- package/state/screen-capture-bridge.js +124 -0
- package/state/setup-resume.d.ts +9 -0
- package/state/setup-resume.d.ts.map +1 -0
- package/state/setup-resume.js +98 -0
- package/state/shell-routing.d.ts +5 -5
- package/state/shell-routing.d.ts.map +1 -1
- package/state/shell-surface-store.d.ts +50 -0
- package/state/shell-surface-store.d.ts.map +1 -0
- package/state/shell-surface-store.js +130 -0
- package/state/springboard-layout.d.ts +85 -0
- package/state/springboard-layout.d.ts.map +1 -0
- package/state/springboard-layout.js +180 -0
- package/state/startup-coordinator.d.ts +47 -23
- package/state/startup-coordinator.d.ts.map +1 -1
- package/state/startup-coordinator.js +94 -44
- package/state/startup-phase-hydrate.d.ts +11 -10
- package/state/startup-phase-hydrate.d.ts.map +1 -1
- package/state/startup-phase-hydrate.js +212 -103
- package/state/startup-phase-poll.d.ts +81 -28
- package/state/startup-phase-poll.d.ts.map +1 -1
- package/state/startup-phase-poll.js +359 -83
- package/state/startup-phase-restore.d.ts +36 -12
- package/state/startup-phase-restore.d.ts.map +1 -1
- package/state/startup-phase-restore.js +259 -101
- package/state/startup-phase-runtime.d.ts +9 -5
- package/state/startup-phase-runtime.d.ts.map +1 -1
- package/state/startup-phase-runtime.js +227 -17
- package/state/startup-telemetry.d.ts +73 -0
- package/state/startup-telemetry.d.ts.map +1 -0
- package/state/startup-telemetry.js +139 -0
- package/state/types.d.ts +162 -111
- package/state/types.d.ts.map +1 -1
- package/state/types.js +60 -13
- package/state/ui-preferences.d.ts +45 -0
- package/state/ui-preferences.d.ts.map +1 -1
- package/state/ui-preferences.js +30 -1
- package/state/use-startup-shell-controller.d.ts +14 -0
- package/state/use-startup-shell-controller.d.ts.map +1 -0
- package/state/use-startup-shell-controller.js +230 -0
- package/state/useApp.d.ts +1 -1
- package/state/useApp.d.ts.map +1 -1
- package/state/useApp.js +6 -2
- package/state/useAppLifecycleEvents.d.ts +32 -0
- package/state/useAppLifecycleEvents.d.ts.map +1 -0
- package/state/useAppLifecycleEvents.js +102 -0
- package/state/useAppProviderEffects.d.ts +3 -3
- package/state/useAppProviderEffects.d.ts.map +1 -1
- package/state/useAppProviderEffects.js +20 -13
- package/state/useAppShellState.d.ts +6 -6
- package/state/useBackgroundConfig.d.ts +16 -0
- package/state/useBackgroundConfig.d.ts.map +1 -0
- package/state/useBackgroundConfig.js +21 -0
- package/state/useCharacterState.d.ts +2 -2
- package/state/useCharacterState.js +1 -1
- package/state/useChatCallbacks.d.ts +65 -33
- package/state/useChatCallbacks.d.ts.map +1 -1
- package/state/useChatCallbacks.js +245 -168
- package/state/useChatLifecycle.d.ts +36 -29
- package/state/useChatLifecycle.d.ts.map +1 -1
- package/state/useChatLifecycle.js +151 -125
- package/state/useChatSend.d.ts +8 -6
- package/state/useChatSend.d.ts.map +1 -1
- package/state/useChatSend.js +416 -107
- package/state/useChatState.d.ts +4 -9
- package/state/useChatState.d.ts.map +1 -1
- package/state/useChatState.js +1 -9
- package/state/useCloudState.d.ts +7 -3
- package/state/useCloudState.d.ts.map +1 -1
- package/state/useCloudState.js +187 -27
- package/state/useContentPack.d.ts +27 -0
- package/state/useContentPack.d.ts.map +1 -0
- package/state/useContentPack.js +220 -0
- package/state/useDataLoaders.d.ts +11 -10
- package/state/useDataLoaders.d.ts.map +1 -1
- package/state/useDataLoaders.js +133 -27
- package/state/useDeveloperMode.d.ts.map +1 -1
- package/state/useDeveloperMode.js +48 -8
- package/state/useDisplayPreferences.d.ts +8 -4
- package/state/useDisplayPreferences.d.ts.map +1 -1
- package/state/useDisplayPreferences.js +68 -16
- package/state/useFirstRunCallbacks.d.ts +102 -0
- package/state/useFirstRunCallbacks.d.ts.map +1 -0
- package/state/useFirstRunCallbacks.js +838 -0
- package/state/useFirstRunState.d.ts +126 -0
- package/state/useFirstRunState.d.ts.map +1 -0
- package/state/useFirstRunState.js +259 -0
- package/state/useLifecycleState.d.ts +26 -11
- package/state/useLifecycleState.d.ts.map +1 -1
- package/state/useLifecycleState.js +79 -27
- package/state/useLogsState.d.ts +1 -1
- package/state/useMiscUiState.d.ts +1 -1
- package/state/useMiscUiState.js +1 -1
- package/state/useNavigationState.d.ts +4 -5
- package/state/useNavigationState.d.ts.map +1 -1
- package/state/useNavigationState.js +34 -27
- package/state/usePluginsSkillsState.d.ts +9 -6
- package/state/usePluginsSkillsState.d.ts.map +1 -1
- package/state/usePluginsSkillsState.js +58 -13
- package/state/usePreviewMode.d.ts +4 -0
- package/state/usePreviewMode.d.ts.map +1 -0
- package/state/usePreviewMode.js +93 -0
- package/state/useStartupCoordinator.d.ts +9 -6
- package/state/useStartupCoordinator.d.ts.map +1 -1
- package/state/useStartupCoordinator.js +133 -28
- package/state/useStreamingText.d.ts +74 -0
- package/state/useStreamingText.d.ts.map +1 -0
- package/state/useStreamingText.js +104 -0
- package/state/useTabSync.d.ts +32 -0
- package/state/useTabSync.d.ts.map +1 -0
- package/state/useTabSync.js +81 -0
- package/state/useTriggersState.d.ts +3 -3
- package/state/useTriggersState.d.ts.map +1 -1
- package/state/useViewKinds.d.ts +19 -0
- package/state/useViewKinds.d.ts.map +1 -0
- package/state/useViewKinds.js +28 -0
- package/state/useWalletState.d.ts +5 -5
- package/state/useWalletState.d.ts.map +1 -1
- package/state/useWalletState.js +13 -4
- package/state/view-chat-binding.d.ts +29 -0
- package/state/view-chat-binding.d.ts.map +1 -0
- package/state/view-chat-binding.js +41 -0
- package/state/vrm.d.ts +1 -1
- package/storage/workspace-folder.d.ts +30 -0
- package/storage/workspace-folder.d.ts.map +1 -0
- package/storage/workspace-folder.js +74 -0
- package/stories/layout-story-fixtures.d.ts +0 -5
- package/stories/layout-story-fixtures.d.ts.map +1 -1
- package/stories/layout-story-fixtures.data.d.ts +6 -0
- package/stories/layout-story-fixtures.data.d.ts.map +1 -0
- package/stories/layout-story-fixtures.data.js +7 -0
- package/stories/layout-story-fixtures.js +9 -8
- package/storybook/home-widget-decorator.d.ts +21 -0
- package/storybook/home-widget-decorator.d.ts.map +1 -0
- package/storybook/home-widget-decorator.js +53 -0
- package/storybook/mock-providers.d.ts +24 -0
- package/storybook/mock-providers.d.ts.map +1 -0
- package/storybook/mock-providers.helpers.d.ts +10 -0
- package/storybook/mock-providers.helpers.d.ts.map +1 -0
- package/storybook/mock-providers.helpers.js +11 -0
- package/storybook/mock-providers.js +95 -0
- package/styles/base.css +407 -162
- package/styles/brand-gold.css +238 -197
- package/styles/electrobun-mac-window-drag.css +3 -3
- package/styles/styles.css +77 -146
- package/styles/tailwind-theme.css +140 -0
- package/styles/theme.css +78 -61
- package/styles.d.ts +4 -0
- package/styles.d.ts.map +1 -0
- package/styles.js +9 -0
- package/testing/layout-stability.d.ts +67 -0
- package/testing/layout-stability.d.ts.map +1 -0
- package/testing/layout-stability.js +106 -0
- package/testing/render-counter.d.ts +56 -0
- package/testing/render-counter.d.ts.map +1 -0
- package/testing/render-counter.js +62 -0
- package/themes/apply-theme.d.ts +0 -5
- package/themes/apply-theme.d.ts.map +1 -1
- package/themes/apply-theme.js +1 -9
- package/themes/index.d.ts +14 -0
- package/themes/index.d.ts.map +1 -0
- package/themes/index.js +12 -0
- package/themes/presets.d.ts +7 -0
- package/themes/presets.d.ts.map +1 -0
- package/themes/presets.js +159 -0
- package/types/host-external-modules.d.ts +5 -0
- package/types/host-external-modules.d.ts.map +1 -0
- package/types/host-external-modules.js +1 -0
- package/types/index.d.ts +1 -654
- package/types/index.d.ts.map +1 -1
- package/types/index.js +1 -4
- package/types/plugin-views.d.ts +17 -0
- package/types/plugin-views.d.ts.map +1 -0
- package/types/plugin-views.js +1 -0
- package/utils/attachment-url.d.ts +42 -0
- package/utils/attachment-url.d.ts.map +1 -0
- package/utils/attachment-url.js +130 -0
- package/utils/browser-tab-kit-types.d.ts +1 -80
- package/utils/browser-tab-kit-types.d.ts.map +1 -1
- package/utils/browser-tab-kit-types.js +0 -21
- package/utils/browser-tabs-renderer-registry.d.ts +1 -55
- package/utils/browser-tabs-renderer-registry.d.ts.map +1 -1
- package/utils/browser-tabs-renderer-registry.js +1 -1223
- package/utils/character-message-examples.d.ts +1 -6
- package/utils/character-message-examples.d.ts.map +1 -1
- package/utils/character-message-examples.js +1 -122
- package/utils/cloud-agent-base.d.ts +49 -0
- package/utils/cloud-agent-base.d.ts.map +1 -0
- package/utils/cloud-agent-base.js +132 -0
- package/utils/cloud-status.d.ts +1 -2
- package/utils/cloud-status.d.ts.map +1 -1
- package/utils/cloud-status.js +1 -10
- package/utils/desktop-workspace.d.ts +1 -1
- package/utils/desktop-workspace.d.ts.map +1 -1
- package/utils/desktop-workspace.js +0 -5
- package/utils/documents-upload-image.d.ts +1 -26
- package/utils/documents-upload-image.d.ts.map +1 -1
- package/utils/documents-upload-image.js +1 -146
- package/utils/download-share.d.ts +65 -0
- package/utils/download-share.d.ts.map +1 -0
- package/utils/download-share.js +292 -0
- package/utils/eliza-cloud-model-route.d.ts +1 -2
- package/utils/eliza-cloud-model-route.d.ts.map +1 -1
- package/utils/eliza-cloud-model-route.js +1 -9
- package/utils/eliza-globals.d.ts +1 -12
- package/utils/eliza-globals.d.ts.map +1 -1
- package/utils/eliza-globals.js +1 -48
- package/utils/errors.d.ts +1 -12
- package/utils/errors.d.ts.map +1 -1
- package/utils/errors.js +1 -25
- package/utils/event-source.d.ts +17 -0
- package/utils/event-source.d.ts.map +1 -0
- package/utils/event-source.js +36 -0
- package/utils/format.d.ts +8 -62
- package/utils/format.d.ts.map +1 -1
- package/utils/format.js +34 -117
- package/utils/globals.js +1 -1
- package/utils/host-capabilities.d.ts +39 -0
- package/utils/host-capabilities.d.ts.map +1 -0
- package/utils/host-capabilities.js +85 -0
- package/utils/image-attachment.d.ts +187 -0
- package/utils/image-attachment.d.ts.map +1 -0
- package/utils/image-attachment.js +313 -0
- package/utils/index.d.ts +34 -33
- package/utils/index.d.ts.map +1 -1
- package/utils/index.js +5 -4
- package/utils/labels.d.ts +1 -5
- package/utils/labels.d.ts.map +1 -1
- package/utils/labels.js +1 -41
- package/utils/log-prefix.d.ts +1 -1
- package/utils/log-prefix.d.ts.map +1 -1
- package/utils/log-prefix.js +1 -53
- package/utils/name-tokens.d.ts +1 -23
- package/utils/name-tokens.d.ts.map +1 -1
- package/utils/name-tokens.js +1 -36
- package/utils/namespace-defaults.d.ts +1 -5
- package/utils/namespace-defaults.d.ts.map +1 -1
- package/utils/namespace-defaults.js +1 -15
- package/utils/openExternalUrl.d.ts.map +1 -1
- package/utils/openExternalUrl.js +3 -6
- package/utils/owner-name.d.ts +1 -2
- package/utils/owner-name.d.ts.map +1 -1
- package/utils/owner-name.js +1 -7
- package/utils/rate-limiter.d.ts +1 -31
- package/utils/rate-limiter.d.ts.map +1 -1
- package/utils/rate-limiter.js +1 -52
- package/utils/serialise.d.ts +1 -11
- package/utils/serialise.d.ts.map +1 -1
- package/utils/serialise.js +1 -21
- package/utils/sql-compat.d.ts +1 -9
- package/utils/sql-compat.d.ts.map +1 -1
- package/utils/sql-compat.js +1 -111
- package/utils/streaming-text.d.ts +1 -8
- package/utils/streaming-text.d.ts.map +1 -1
- package/utils/streaming-text.js +1 -112
- package/utils/subscription-auth.d.ts +1 -8
- package/utils/subscription-auth.d.ts.map +1 -1
- package/utils/subscription-auth.js +1 -48
- package/utils/trajectory-format.d.ts +1 -5
- package/utils/trajectory-format.d.ts.map +1 -1
- package/utils/trajectory-format.js +1 -43
- package/utils/transient-fetch.d.ts +20 -0
- package/utils/transient-fetch.d.ts.map +1 -0
- package/utils/transient-fetch.js +36 -0
- package/utils/tts-debug.d.ts.map +1 -1
- package/utils/tts-debug.js +3 -24
- package/utils/workflow-executions.d.ts +26 -0
- package/utils/workflow-executions.d.ts.map +1 -0
- package/utils/workflow-executions.js +166 -0
- package/utils/workflow-json.d.ts +1 -1
- package/utils/workflow-json.d.ts.map +1 -1
- package/utils/workflow-json.js +10 -0
- package/view-recents.d.ts +6 -0
- package/view-recents.d.ts.map +1 -0
- package/view-recents.js +35 -0
- package/view-telemetry.d.ts +30 -0
- package/view-telemetry.d.ts.map +1 -0
- package/view-telemetry.js +47 -0
- package/views/view-event-bus.d.ts +40 -0
- package/views/view-event-bus.d.ts.map +1 -0
- package/views/view-event-bus.js +94 -0
- package/views/view-event-types.d.ts +24 -0
- package/views/view-event-types.d.ts.map +1 -0
- package/views/view-event-types.js +22 -0
- package/views/view-interact-protocol.d.ts +45 -0
- package/views/view-interact-protocol.d.ts.map +1 -0
- package/views/view-interact-protocol.js +28 -0
- package/voice/audio-frame-diarization-harness.d.ts +43 -0
- package/voice/audio-frame-diarization-harness.d.ts.map +1 -0
- package/voice/audio-frame-diarization-harness.js +63 -0
- package/voice/audio-frame-pump.d.ts +68 -0
- package/voice/audio-frame-pump.d.ts.map +1 -0
- package/voice/audio-frame-pump.js +137 -0
- package/voice/character-voice-config.d.ts +3 -1
- package/voice/character-voice-config.d.ts.map +1 -1
- package/voice/character-voice-config.js +8 -0
- package/voice/emotion.d.ts +43 -0
- package/voice/emotion.d.ts.map +1 -0
- package/voice/emotion.js +131 -0
- package/voice/end-of-turn.d.ts +84 -0
- package/voice/end-of-turn.d.ts.map +1 -0
- package/voice/end-of-turn.js +119 -0
- package/voice/index.d.ts +11 -2
- package/voice/index.d.ts.map +1 -1
- package/voice/index.js +9 -0
- package/voice/jni-voice-harness.d.ts +67 -0
- package/voice/jni-voice-harness.d.ts.map +1 -0
- package/voice/jni-voice-harness.js +125 -0
- package/voice/jni-voice-pipeline.d.ts +127 -0
- package/voice/jni-voice-pipeline.d.ts.map +1 -0
- package/voice/jni-voice-pipeline.js +276 -0
- package/voice/local-asr-capture.d.ts +46 -0
- package/voice/local-asr-capture.d.ts.map +1 -0
- package/voice/local-asr-capture.js +238 -0
- package/voice/local-asr-transcribe.d.ts +42 -0
- package/voice/local-asr-transcribe.d.ts.map +1 -0
- package/voice/local-asr-transcribe.js +93 -0
- package/voice/playback-frame-pump.d.ts +49 -0
- package/voice/playback-frame-pump.d.ts.map +1 -0
- package/voice/playback-frame-pump.js +387 -0
- package/voice/should-respond.d.ts +11 -0
- package/voice/should-respond.d.ts.map +1 -0
- package/voice/should-respond.js +10 -0
- package/voice/transcript-session.d.ts +49 -0
- package/voice/transcript-session.d.ts.map +1 -0
- package/voice/transcript-session.js +136 -0
- package/voice/transcription-exit.d.ts +40 -0
- package/voice/transcription-exit.d.ts.map +1 -0
- package/voice/transcription-exit.js +114 -0
- package/voice/useVoiceConfig.d.ts +18 -0
- package/voice/useVoiceConfig.d.ts.map +1 -0
- package/voice/useVoiceConfig.js +79 -0
- package/voice/voice-capture-factory.d.ts +116 -0
- package/voice/voice-capture-factory.d.ts.map +1 -0
- package/voice/voice-capture-factory.js +328 -0
- package/voice/voice-chat-playback.d.ts +3 -0
- package/voice/voice-chat-playback.d.ts.map +1 -1
- package/voice/voice-chat-playback.js +10 -2
- package/voice/voice-chat-types.d.ts +147 -19
- package/voice/voice-chat-types.d.ts.map +1 -1
- package/voice/voice-chat-types.js +11 -9
- package/voice/voice-provider-defaults.d.ts +43 -0
- package/voice/voice-provider-defaults.d.ts.map +1 -0
- package/voice/voice-provider-defaults.js +53 -0
- package/voice/voice-selftest/VoiceSelfTestShell.d.ts +28 -0
- package/voice/voice-selftest/VoiceSelfTestShell.d.ts.map +1 -0
- package/voice/voice-selftest/VoiceSelfTestShell.js +127 -0
- package/voice/voice-selftest/VoiceWorkbenchShell.d.ts +29 -0
- package/voice/voice-selftest/VoiceWorkbenchShell.d.ts.map +1 -0
- package/voice/voice-selftest/VoiceWorkbenchShell.js +133 -0
- package/voice/voice-selftest/fixtures/known-phrase.d.ts +3 -0
- package/voice/voice-selftest/fixtures/known-phrase.d.ts.map +1 -0
- package/voice/voice-selftest/fixtures/known-phrase.js +5 -0
- package/voice/voice-selftest/timing.d.ts +8 -0
- package/voice/voice-selftest/timing.d.ts.map +1 -0
- package/voice/voice-selftest/timing.js +7 -0
- package/voice/voice-selftest/voice-selftest-harness.d.ts +66 -0
- package/voice/voice-selftest/voice-selftest-harness.d.ts.map +1 -0
- package/voice/voice-selftest/voice-selftest-harness.js +319 -0
- package/voice/voice-selftest/voice-workbench-player.d.ts +139 -0
- package/voice/voice-selftest/voice-workbench-player.d.ts.map +1 -0
- package/voice/voice-selftest/voice-workbench-player.js +401 -0
- package/voice/voice-turn-signal.d.ts +16 -0
- package/voice/voice-turn-signal.d.ts.map +1 -0
- package/voice/voice-turn-signal.js +15 -0
- package/widgets/WidgetHost.constants.d.ts +2 -0
- package/widgets/WidgetHost.constants.d.ts.map +1 -0
- package/widgets/WidgetHost.constants.js +1 -0
- package/widgets/WidgetHost.d.ts +17 -4
- package/widgets/WidgetHost.d.ts.map +1 -1
- package/widgets/WidgetHost.js +166 -34
- package/widgets/__fixtures__/home-widget-mock-data.d.ts +89 -0
- package/widgets/__fixtures__/home-widget-mock-data.d.ts.map +1 -0
- package/widgets/__fixtures__/home-widget-mock-data.js +388 -0
- package/widgets/home-attention-store.d.ts +40 -0
- package/widgets/home-attention-store.d.ts.map +1 -0
- package/widgets/home-attention-store.js +84 -0
- package/widgets/home-priority.d.ts +136 -0
- package/widgets/home-priority.d.ts.map +1 -0
- package/widgets/home-priority.js +276 -0
- package/widgets/index.d.ts +10 -6
- package/widgets/index.d.ts.map +1 -1
- package/widgets/index.js +5 -2
- package/widgets/registry-store.d.ts +9 -11
- package/widgets/registry-store.d.ts.map +1 -1
- package/widgets/registry-store.js +9 -13
- package/widgets/registry.d.ts +16 -12
- package/widgets/registry.d.ts.map +1 -1
- package/widgets/registry.js +434 -22
- package/widgets/types.d.ts +12 -4
- package/widgets/types.d.ts.map +1 -1
- package/widgets/types.js +7 -1
- package/widgets/useChatSidebarVisibility.d.ts +6 -3
- package/widgets/useChatSidebarVisibility.d.ts.map +1 -1
- package/widgets/useChatSidebarVisibility.js +16 -12
- package/widgets/visibility.d.ts +16 -10
- package/widgets/visibility.d.ts.map +1 -1
- package/widgets/visibility.js +26 -15
- package/api/agent-client-type-shim.d.ts +0 -106
- package/api/agent-client-type-shim.d.ts.map +0 -1
- package/api/client-types-babylon.d.ts +0 -254
- package/api/client-types-babylon.d.ts.map +0 -1
- package/api/client-types-babylon.js +0 -2
- package/components/character/CharacterRelationshipsSection.d.ts +0 -7
- package/components/character/CharacterRelationshipsSection.d.ts.map +0 -1
- package/components/character/CharacterRelationshipsSection.js +0 -4
- package/components/chat/widgets/registry.d.ts +0 -8
- package/components/chat/widgets/registry.d.ts.map +0 -1
- package/components/chat/widgets/registry.js +0 -7
- package/components/composites/chat/chat-sidebar.d.ts +0 -54
- package/components/composites/chat/chat-sidebar.d.ts.map +0 -1
- package/components/composites/chat/chat-sidebar.js +0 -64
- package/components/composites/chat/create-task-popover.d.ts +0 -13
- package/components/composites/chat/create-task-popover.d.ts.map +0 -1
- package/components/composites/chat/create-task-popover.js +0 -44
- package/components/composites/search/search-input.d.ts +0 -11
- package/components/composites/search/search-input.d.ts.map +0 -1
- package/components/composites/search/search-input.js +0 -10
- package/components/composites/sidebar/sidebar-filter-bar.d.ts +0 -3
- package/components/composites/sidebar/sidebar-filter-bar.d.ts.map +0 -1
- package/components/composites/sidebar/sidebar-filter-bar.js +0 -14
- package/components/local-inference/HuggingFaceSearch.d.ts +0 -22
- package/components/local-inference/HuggingFaceSearch.d.ts.map +0 -1
- package/components/local-inference/HuggingFaceSearch.js +0 -68
- package/components/onboarding/BootstrapStep.d.ts +0 -35
- package/components/onboarding/BootstrapStep.d.ts.map +0 -1
- package/components/onboarding/BootstrapStep.js +0 -151
- package/components/onboarding/PasswordSetupStep.d.ts +0 -28
- package/components/onboarding/PasswordSetupStep.d.ts.map +0 -1
- package/components/onboarding/PasswordSetupStep.js +0 -82
- package/components/onboarding/onboarding-form-primitives.d.ts +0 -54
- package/components/onboarding/onboarding-form-primitives.d.ts.map +0 -1
- package/components/onboarding/onboarding-form-primitives.js +0 -55
- package/components/onboarding/onboarding-step-chrome.d.ts +0 -40
- package/components/onboarding/onboarding-step-chrome.d.ts.map +0 -1
- package/components/onboarding/onboarding-step-chrome.js +0 -74
- package/components/pages/AutomationsChatPane.d.ts +0 -19
- package/components/pages/AutomationsChatPane.d.ts.map +0 -1
- package/components/pages/AutomationsChatPane.js +0 -15
- package/components/pages/ChatModalView.d.ts +0 -13
- package/components/pages/ChatModalView.d.ts.map +0 -1
- package/components/pages/ChatModalView.js +0 -17
- package/components/pages/ChatPanelLayout.d.ts +0 -11
- package/components/pages/ChatPanelLayout.d.ts.map +0 -1
- package/components/pages/ChatPanelLayout.js +0 -37
- package/components/pages/ConnectorsPageView.d.ts +0 -8
- package/components/pages/ConnectorsPageView.d.ts.map +0 -1
- package/components/pages/ConnectorsPageView.js +0 -8
- package/components/pages/HomePlaceholderView.d.ts +0 -16
- package/components/pages/HomePlaceholderView.d.ts.map +0 -1
- package/components/pages/HomePlaceholderView.js +0 -17
- package/components/pages/PageScopedChatPane.d.ts +0 -51
- package/components/pages/PageScopedChatPane.d.ts.map +0 -1
- package/components/pages/PageScopedChatPane.js +0 -586
- package/components/pages/VectorBrowserView.d.ts +0 -13
- package/components/pages/VectorBrowserView.d.ts.map +0 -1
- package/components/pages/VectorBrowserView.js +0 -863
- package/components/settings/CloudInstancePanel.d.ts +0 -2
- package/components/settings/CloudInstancePanel.d.ts.map +0 -1
- package/components/settings/CloudInstancePanel.js +0 -48
- package/components/shell/DnaLoader.d.ts +0 -8
- package/components/shell/DnaLoader.d.ts.map +0 -1
- package/components/shell/DnaLoader.js +0 -50
- package/components/shell/Header.d.ts +0 -12
- package/components/shell/Header.d.ts.map +0 -1
- package/components/shell/Header.js +0 -316
- package/components/shell/RuntimeGate.d.ts +0 -51
- package/components/shell/RuntimeGate.d.ts.map +0 -1
- package/components/shell/RuntimeGate.js +0 -1293
- package/components/shell/SplashServerChooser.d.ts +0 -14
- package/components/shell/SplashServerChooser.d.ts.map +0 -1
- package/components/shell/SplashServerChooser.js +0 -23
- package/components/shell/onboarding-theme.d.ts +0 -6
- package/components/shell/onboarding-theme.d.ts.map +0 -1
- package/components/shell/onboarding-theme.js +0 -29
- package/components/ui/drawer-sheet.d.ts +0 -19
- package/components/ui/drawer-sheet.d.ts.map +0 -1
- package/components/ui/drawer-sheet.js +0 -21
- package/components/ui/section-card.d.ts +0 -15
- package/components/ui/section-card.d.ts.map +0 -1
- package/components/ui/section-card.js +0 -10
- package/config/app-config.d.ts +0 -273
- package/config/app-config.d.ts.map +0 -1
- package/config/app-config.js +0 -31
- package/config/boot-config-react.d.ts +0 -5
- package/config/boot-config-react.d.ts.map +0 -1
- package/config/boot-config-react.js +0 -7
- package/config/branding-react.d.ts +0 -4
- package/config/branding-react.d.ts.map +0 -1
- package/config/branding-react.js +0 -11
- package/desktop-runtime/AppWindowRenderer.d.ts +0 -17
- package/desktop-runtime/AppWindowRenderer.d.ts.map +0 -1
- package/desktop-runtime/AppWindowRenderer.js +0 -327
- package/desktop-runtime/DesktopOnboardingRuntime.d.ts +0 -9
- package/desktop-runtime/DesktopOnboardingRuntime.d.ts.map +0 -1
- package/desktop-runtime/DesktopOnboardingRuntime.js +0 -10
- package/desktop-runtime/DesktopSurfaceNavigationRuntime.d.ts +0 -2
- package/desktop-runtime/DesktopSurfaceNavigationRuntime.d.ts.map +0 -1
- package/desktop-runtime/DesktopSurfaceNavigationRuntime.js +0 -48
- package/desktop-runtime/DesktopTrayRuntime.d.ts +0 -11
- package/desktop-runtime/DesktopTrayRuntime.d.ts.map +0 -1
- package/desktop-runtime/DesktopTrayRuntime.js +0 -265
- package/desktop-runtime/DetachedShellRoot.d.ts +0 -10
- package/desktop-runtime/DetachedShellRoot.d.ts.map +0 -1
- package/desktop-runtime/DetachedShellRoot.js +0 -114
- package/desktop-runtime/index.d.ts +0 -6
- package/desktop-runtime/index.d.ts.map +0 -1
- package/desktop-runtime/index.js +0 -5
- package/hooks/useBugReport.d.ts +0 -26
- package/hooks/useBugReport.d.ts.map +0 -1
- package/hooks/useBugReport.js +0 -28
- package/hooks/useStreamPopoutNavigation.d.ts +0 -3
- package/hooks/useStreamPopoutNavigation.d.ts.map +0 -1
- package/hooks/useStreamPopoutNavigation.js +0 -4
- package/hooks/useWorkflowGenerationState.d.ts +0 -20
- package/hooks/useWorkflowGenerationState.d.ts.map +0 -1
- package/hooks/useWorkflowGenerationState.js +0 -43
- package/layouts/workspace-layout/workspace-mobile-sidebar-controls.d.ts +0 -13
- package/layouts/workspace-layout/workspace-mobile-sidebar-controls.d.ts.map +0 -1
- package/onboarding/auto-download-recommended.d.ts +0 -30
- package/onboarding/auto-download-recommended.d.ts.map +0 -1
- package/onboarding/auto-download-recommended.js +0 -105
- package/onboarding/flow.d.ts +0 -66
- package/onboarding/flow.d.ts.map +0 -1
- package/onboarding/flow.js +0 -100
- package/onboarding/local-agent-token.d.ts +0 -6
- package/onboarding/local-agent-token.d.ts.map +0 -1
- package/onboarding/local-agent-token.js +0 -79
- package/onboarding/mobile-runtime-mode.d.ts +0 -19
- package/onboarding/mobile-runtime-mode.d.ts.map +0 -1
- package/onboarding/mobile-runtime-mode.js +0 -91
- package/onboarding/pre-seed-local-runtime.d.ts +0 -53
- package/onboarding/pre-seed-local-runtime.d.ts.map +0 -1
- package/onboarding/pre-seed-local-runtime.js +0 -111
- package/onboarding/probe-local-agent.d.ts +0 -51
- package/onboarding/probe-local-agent.d.ts.map +0 -1
- package/onboarding/probe-local-agent.js +0 -235
- package/onboarding/reload-into-runtime-picker.d.ts +0 -25
- package/onboarding/reload-into-runtime-picker.d.ts.map +0 -1
- package/onboarding/reload-into-runtime-picker.js +0 -45
- package/onboarding/server-target.d.ts +0 -4
- package/onboarding/server-target.d.ts.map +0 -1
- package/onboarding/server-target.js +0 -13
- package/onboarding-config.d.ts +0 -61
- package/onboarding-config.d.ts.map +0 -1
- package/onboarding-config.js +0 -172
- package/platform/onboarding-reset.d.ts +0 -11
- package/platform/onboarding-reset.d.ts.map +0 -1
- package/platform/onboarding-reset.js +0 -127
- package/services/local-inference/dflash-doctor.d.ts +0 -22
- package/services/local-inference/dflash-doctor.d.ts.map +0 -1
- package/services/local-inference/dflash-doctor.js +0 -139
- package/services/local-inference/dflash-server.d.ts +0 -76
- package/services/local-inference/dflash-server.d.ts.map +0 -1
- package/services/local-inference/dflash-server.js +0 -451
- package/services/local-inference/providers.d.ts +0 -61
- package/services/local-inference/providers.d.ts.map +0 -1
- package/services/local-inference/providers.js +0 -306
- package/state/ChatComposerContext.d.ts +0 -28
- package/state/ChatComposerContext.d.ts.map +0 -1
- package/state/ChatComposerContext.js +0 -30
- package/state/CompanionSceneConfigContext.d.ts +0 -27
- package/state/CompanionSceneConfigContext.d.ts.map +0 -1
- package/state/CompanionSceneConfigContext.js +0 -32
- package/state/PtySessionsContext.d.ts +0 -15
- package/state/PtySessionsContext.d.ts.map +0 -1
- package/state/PtySessionsContext.js +0 -15
- package/state/TranslationContext.d.ts +0 -37
- package/state/TranslationContext.d.ts.map +0 -1
- package/state/TranslationContext.js +0 -63
- package/state/connector-deeplink.d.ts +0 -30
- package/state/connector-deeplink.d.ts.map +0 -1
- package/state/connector-deeplink.js +0 -46
- package/state/navigation-events.d.ts +0 -12
- package/state/navigation-events.d.ts.map +0 -1
- package/state/navigation-events.js +0 -25
- package/state/onboarding-bootstrap.d.ts +0 -28
- package/state/onboarding-bootstrap.d.ts.map +0 -1
- package/state/onboarding-bootstrap.js +0 -76
- package/state/onboarding-restart.d.ts +0 -8
- package/state/onboarding-restart.d.ts.map +0 -1
- package/state/onboarding-restart.js +0 -8
- package/state/onboarding-resume.d.ts +0 -9
- package/state/onboarding-resume.d.ts.map +0 -1
- package/state/onboarding-resume.js +0 -93
- package/state/useOnboardingCallbacks.d.ts +0 -100
- package/state/useOnboardingCallbacks.d.ts.map +0 -1
- package/state/useOnboardingCallbacks.js +0 -804
- package/state/useOnboardingCompat.d.ts +0 -61
- package/state/useOnboardingCompat.d.ts.map +0 -1
- package/state/useOnboardingCompat.js +0 -110
- package/state/useOnboardingState.d.ts +0 -126
- package/state/useOnboardingState.d.ts.map +0 -1
- package/state/useOnboardingState.js +0 -263
- package/state/useVincentState.d.ts +0 -3
- package/state/useVincentState.d.ts.map +0 -1
- package/state/useVincentState.js +0 -13
- package/styles/onboarding-game.css +0 -568
- package/terminal/links.d.ts +0 -9
- package/terminal/links.d.ts.map +0 -1
- package/terminal/links.js +0 -20
- package/utils/assistant-text.d.ts +0 -2
- package/utils/assistant-text.d.ts.map +0 -1
- package/utils/assistant-text.js +0 -167
- package/utils/eliza-root.d.ts +0 -9
- package/utils/eliza-root.d.ts.map +0 -1
- package/utils/eliza-root.js +0 -101
- package/utils/exec-safety.d.ts +0 -2
- package/utils/exec-safety.d.ts.map +0 -1
- package/utils/exec-safety.js +0 -21
- package/utils/number-parsing.d.ts +0 -26
- package/utils/number-parsing.d.ts.map +0 -1
- package/utils/number-parsing.js +0 -51
- /package/api/{agent-client-type-shim.js → browser-contracts.js} +0 -0
- /package/layouts/workspace-layout/{workspace-mobile-sidebar-controls.js → workspace-mobile-sidebar-controls.hooks.js} +0 -0
|
@@ -0,0 +1,2370 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { transcriptPlainText } from "@elizaos/shared/transcripts";
|
|
3
|
+
import { Check, Copy, FileText, Film, LayoutGrid, Loader2, Maximize2, Mic, Minimize2, Music, RotateCcw, SendHorizontal, } from "lucide-react";
|
|
4
|
+
import { AnimatePresence, animate, motion, useMotionValue, useMotionValueEvent, useReducedMotion, useTransform, } from "motion/react";
|
|
5
|
+
import * as React from "react";
|
|
6
|
+
import { client } from "../../api/client.js";
|
|
7
|
+
import { parseSlashDraft, resolveClientShortcutExecution, runSlashExecution, splitLeadingSlashCommand, } from "../../chat/slash-menu.js";
|
|
8
|
+
import { CHAT_PREFILL_EVENT, TUTORIAL_CHAT_CONTROL_EVENT, } from "../../events/index.js";
|
|
9
|
+
import { Z_SHELL_OVERLAY } from "../../lib/floating-layers.js";
|
|
10
|
+
import { cn } from "../../lib/utils.js";
|
|
11
|
+
import { useViewChatBinding } from "../../state/view-chat-binding.js";
|
|
12
|
+
import { copyTextToClipboard } from "../../utils/clipboard.js";
|
|
13
|
+
import { CHAT_UPLOAD_ACCEPT, chatUploadKind, classifyComposerPaste, intakeAttachmentFiles, MAX_CHAT_IMAGES, summarizeDroppedAttachments, } from "../../utils/image-attachment.js";
|
|
14
|
+
import { InlineWidgetText } from "../chat/InlineWidgetText.js";
|
|
15
|
+
import { MessageAttachments } from "../chat/MessageAttachments.js";
|
|
16
|
+
import { SensitiveRequestBlock } from "../chat/MessageContent.js";
|
|
17
|
+
import { conversationTranscriptText } from "../chat/message-parser-helpers.js";
|
|
18
|
+
import { ThinkingBlock } from "../chat/ThinkingBlock.js";
|
|
19
|
+
import { withTranscriptMarker } from "../chat/TranscriptViewerOverlay.js";
|
|
20
|
+
import { SlashCommandMenu, useSlashMenu } from "./SlashCommandMenu.js";
|
|
21
|
+
import { selectVisibleShellMessages } from "./shell-state.js";
|
|
22
|
+
import { TopicChipsBar } from "./TopicChipsBar.js";
|
|
23
|
+
import { TopicGroup } from "./TopicGroup.js";
|
|
24
|
+
import { deriveChannelTopics, groupMessagesByTopic } from "./topic-grouping.js";
|
|
25
|
+
import { usePullGesture } from "./use-pull-gesture.js";
|
|
26
|
+
import { usePromptSuggestions } from "./usePromptSuggestions.js";
|
|
27
|
+
/** No-op slash controller so the overlay renders without a provider (stories). */
|
|
28
|
+
const EMPTY_SLASH_CONTROLLER = {
|
|
29
|
+
commands: [],
|
|
30
|
+
loading: false,
|
|
31
|
+
naturalShortcutsEnabled: false,
|
|
32
|
+
resolveChoices: () => [],
|
|
33
|
+
resolveSection: () => undefined,
|
|
34
|
+
navigateTab: () => { },
|
|
35
|
+
navigateSettings: () => { },
|
|
36
|
+
navigateView: () => { },
|
|
37
|
+
clearChat: () => { },
|
|
38
|
+
openCommandPalette: () => { },
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* The continuous-chat overlay: one always-present, ambient glass conversation
|
|
42
|
+
* that floats over EVERY view. There are no separate chats and no switcher — it
|
|
43
|
+
* is a single endless thread (the app's one active conversation, via
|
|
44
|
+
* useShellController).
|
|
45
|
+
*
|
|
46
|
+
* Layout is a fixed composer at the bottom with a pull-up history SHEET above
|
|
47
|
+
* it. At rest the sheet is a slim peek (the grabber + the latest line); pull it
|
|
48
|
+
* UP — anywhere on the sheet — or just start typing to spring it open into the
|
|
49
|
+
* full transcript; pull the grabber back DOWN, or press Escape, to close.
|
|
50
|
+
* Nothing else dismisses it — clicking or scrolling the view behind does
|
|
51
|
+
* nothing. The composer never moves; the history slides up over it.
|
|
52
|
+
*
|
|
53
|
+
* The container is pointer-events-none (the view behind stays live); only the
|
|
54
|
+
* composer + sheet capture input, so it is non-blocking — unlike the
|
|
55
|
+
* focus-trapping AssistantOverlay it supersedes in the main shell.
|
|
56
|
+
*
|
|
57
|
+
* Two design rules keep it intimate rather than app-like:
|
|
58
|
+
* 1. SELF-CONTAINED CONTRAST — every surface carries its own dark-glass scrim
|
|
59
|
+
* (or, for floating text, a soft shadow) plus fixed light text, never the
|
|
60
|
+
* theme's `--txt`, so it stays legible over any substrate: a bright view, a
|
|
61
|
+
* dark view, or the warm "good evening" backdrop.
|
|
62
|
+
* 2. NO CHROME/SIGNAGE — the thread speaks for itself: no message counter, no
|
|
63
|
+
* "new chat", no tab strip; controls dissolve into the glass, and status is
|
|
64
|
+
* a soft breath of light, not a brand-colored alert ring.
|
|
65
|
+
*
|
|
66
|
+
* Pure/presentational: it takes the controller as a prop so it can be rendered
|
|
67
|
+
* in isolation (stories / harness) with a mock. The app wraps it in a small
|
|
68
|
+
* context-reading mount (see App.tsx) that supplies the shared controller.
|
|
69
|
+
*/
|
|
70
|
+
// Floating (un-scrimmed) text gets a soft shadow so it reads over bright views.
|
|
71
|
+
const FLOAT_SHADOW = "[text-shadow:0_1px_4px_rgba(0,0,0,0.7)]";
|
|
72
|
+
// Shared easing for the overlay's cheap motion path. Open/close must stay
|
|
73
|
+
// opacity/translate only: animating blur/filter or scaling a scrollable
|
|
74
|
+
// transcript repaints too much of the viewport and visibly janks on laptops.
|
|
75
|
+
const OVERLAY_EASE = [0.22, 1, 0.36, 1];
|
|
76
|
+
const SHEET_HALF_VH = 0.46; // fraction of viewport height at the HALF detent
|
|
77
|
+
// px kept clear above the panel. Sized to clear an edge-to-edge status bar
|
|
78
|
+
// (~58px) plus a buffer so the grabber sits BELOW the notification-shade pull
|
|
79
|
+
// zone — the full sheet reaches the top without fighting the system gesture.
|
|
80
|
+
const SHEET_TOP_MARGIN = 72;
|
|
81
|
+
// Detent magnetism: on a deliberate (non-flick) drag release, a height within
|
|
82
|
+
// this many px of a detent (collapsed/half/full) snaps to that detent instead
|
|
83
|
+
// of resting free — so near-detent releases are deterministic + clean, and only
|
|
84
|
+
// the clear gaps between detents keep the free-drag rest height.
|
|
85
|
+
const SHEET_DETENT_MAGNET = 64;
|
|
86
|
+
// Feature flag: the resting one-tap prompt-suggestion strip. Off for now so the
|
|
87
|
+
// composer can be tested without it; flip to true to bring the strip back.
|
|
88
|
+
const SHOW_PROMPT_SUGGESTIONS = false;
|
|
89
|
+
// A light iOS-style impact on each detent cross. Self-contained + guarded so it
|
|
90
|
+
// is a no-op off-native (and in jsdom tests) without coupling the overlay to the
|
|
91
|
+
// Capacitor bridge module. Mirrors `bridge/capacitor-bridge.ts` `haptics.light()`.
|
|
92
|
+
function detentHaptic() {
|
|
93
|
+
try {
|
|
94
|
+
const cap = globalThis.Capacitor;
|
|
95
|
+
if (cap?.isNativePlatform?.()) {
|
|
96
|
+
void cap.Plugins?.Haptics?.impact?.({ style: "LIGHT" });
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
// Haptics are a nicety — never let them throw into the gesture path.
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
const SHEET_SPRING = {
|
|
104
|
+
type: "spring",
|
|
105
|
+
stiffness: 320,
|
|
106
|
+
damping: 34,
|
|
107
|
+
mass: 0.9,
|
|
108
|
+
};
|
|
109
|
+
// Slightly springier preset for the pill→input "liquid glass" open: a touch
|
|
110
|
+
// less damping than the height spring so the input reads as springing IN on a
|
|
111
|
+
// flick, while the live drag-tracking gives a slow pull its "lerp" character.
|
|
112
|
+
const OPEN_SPRING = {
|
|
113
|
+
type: "spring",
|
|
114
|
+
stiffness: 300,
|
|
115
|
+
damping: 26,
|
|
116
|
+
mass: 0.85,
|
|
117
|
+
};
|
|
118
|
+
// Finger travel (px) that fully opens the input from the pill. A live pill drag
|
|
119
|
+
// maps offset → openProgress ∈ [0,1] over this distance; past it, the excess
|
|
120
|
+
// flows into the thread height so pill → input → chat is one continuous motion.
|
|
121
|
+
const PILL_OPEN_DISTANCE = 120;
|
|
122
|
+
// Rubber-band resistance applied to drag past a detent (iOS-style overscroll).
|
|
123
|
+
function rubberBand(overshoot) {
|
|
124
|
+
return Math.sign(overshoot) * Math.sqrt(Math.abs(overshoot)) * 6;
|
|
125
|
+
}
|
|
126
|
+
// Glyphs (viewBox 0 0 36 36), rendered in currentColor inside a soft chip. Send
|
|
127
|
+
// + mic now use lucide icons (SendHorizontal / Mic); the rest stay hand-drawn.
|
|
128
|
+
const PLUS_GLYPH = "M16 8H20V16H28V20H20V28H16V20H8V16H16Z";
|
|
129
|
+
// Stop generating: a centered rounded square (the universal "stop" affordance).
|
|
130
|
+
const STOP_GLYPH = "M12 12H24V24H12Z";
|
|
131
|
+
/** Base64-encode WAV bytes in chunks (avoids the apply() arg-count limit). */
|
|
132
|
+
function wavBytesToBase64(bytes) {
|
|
133
|
+
let binary = "";
|
|
134
|
+
const chunk = 0x8000;
|
|
135
|
+
for (let i = 0; i < bytes.length; i += chunk) {
|
|
136
|
+
binary += String.fromCharCode(...Array.from(bytes.subarray(i, i + chunk)));
|
|
137
|
+
}
|
|
138
|
+
return btoa(binary);
|
|
139
|
+
}
|
|
140
|
+
/** UTF-8-safe base64 for a transcript turned into a composer text attachment. */
|
|
141
|
+
function textToBase64(text) {
|
|
142
|
+
return wavBytesToBase64(new TextEncoder().encode(text));
|
|
143
|
+
}
|
|
144
|
+
// Muted-speaker glyph for the autoplay-blocked "tap to enable sound" prompt.
|
|
145
|
+
const SPEAKER_MUTED_GLYPH = "M7 15H12L18 10V26L12 21H7Z M21 12.4L22.4 11L31 19.6L29.6 21Z";
|
|
146
|
+
function Glyph({ d }) {
|
|
147
|
+
return (_jsx("svg", { viewBox: "0 0 36 36", className: "h-[26px] w-[26px]", "aria-hidden": "true", children: _jsx("path", { fill: "currentColor", fillRule: "evenodd", d: d }) }));
|
|
148
|
+
}
|
|
149
|
+
/** A soft round glass control that dissolves into the bar; brightens only when active. */
|
|
150
|
+
function SoftButton({ glyph, icon: Icon, label, onClick, onPointerDown, onPointerUp, onPointerCancel, disabled, active, testId, }) {
|
|
151
|
+
return (_jsx("button", { type: "button", "data-testid": testId, "aria-label": label, "aria-pressed": active, "aria-disabled": disabled, onClick: disabled ? undefined : onClick, onPointerDown: disabled ? undefined : onPointerDown, onPointerUp: disabled ? undefined : onPointerUp, onPointerCancel: disabled ? undefined : onPointerCancel, className: cn(
|
|
152
|
+
// 44×44 hit target (WCAG 2.5.5) — comfortably thumb-tappable without
|
|
153
|
+
// crowding the bar (split the difference back down from 48).
|
|
154
|
+
"grid h-11 w-11 shrink-0 place-items-center rounded-full border transition-colors", " ", active
|
|
155
|
+
? "border-white/40 bg-white/85 text-black"
|
|
156
|
+
: "border-white/15 bg-white/10 text-white/75 hover:bg-white/20 hover:text-white", disabled && "opacity-40"), children: Icon ? (_jsx(Icon, { className: "h-[22px] w-[22px]", "aria-hidden": true })) : glyph ? (_jsx(Glyph, { d: glyph })) : null }));
|
|
157
|
+
}
|
|
158
|
+
/** A compact glass control for the full-state header (maximize / clear /
|
|
159
|
+
* settings). Smaller than SoftButton; same neutral resting → neutral-hover
|
|
160
|
+
* language (no blue), `active` gets the white fill. Renders a lucide icon. */
|
|
161
|
+
function HeaderButton({ icon: Icon, label, onClick, active, disabled, testId, }) {
|
|
162
|
+
return (_jsx("button", { type: "button", "data-testid": testId, "aria-label": label, "aria-pressed": active, disabled: disabled, "aria-disabled": disabled || undefined, onClick: onClick, className: cn("grid h-9 w-9 shrink-0 place-items-center rounded-full border transition-colors", " ", disabled
|
|
163
|
+
? // On the view it targets: shown but inert + dimmed (we disable, not hide).
|
|
164
|
+
"cursor-default border-white/10 bg-white/[0.05] text-white/35"
|
|
165
|
+
: active
|
|
166
|
+
? "border-white/40 bg-white/85 text-black"
|
|
167
|
+
: "border-white/15 bg-white/10 text-white/75 hover:bg-white/20 hover:text-white"), children: _jsx(Icon, { className: "h-[18px] w-[18px]", "aria-hidden": true }) }));
|
|
168
|
+
}
|
|
169
|
+
/** Horizontal travel (px) at which a conversation-swipe edge hint is fully lit. */
|
|
170
|
+
const SWIPE_HINT_FULL = 96;
|
|
171
|
+
/** Inert conversation-nav fallback for minimal mock controllers. */
|
|
172
|
+
const EMPTY_CONVERSATION_NAV = {
|
|
173
|
+
hasPrev: false,
|
|
174
|
+
hasNext: false,
|
|
175
|
+
goPrev: () => { },
|
|
176
|
+
goNext: () => { },
|
|
177
|
+
};
|
|
178
|
+
/**
|
|
179
|
+
* A soft glass glow on the sheet edge the next/previous conversation will slide
|
|
180
|
+
* in from during a horizontal swipe (#8929). Brightens with the drag distance;
|
|
181
|
+
* inert and non-interactive.
|
|
182
|
+
*/
|
|
183
|
+
function SwipeEdgeHint({ side, active, amount, }) {
|
|
184
|
+
if (!active)
|
|
185
|
+
return null;
|
|
186
|
+
const opacity = Math.min(1, Math.max(0, amount) / SWIPE_HINT_FULL);
|
|
187
|
+
if (opacity <= 0)
|
|
188
|
+
return null;
|
|
189
|
+
return (_jsx("div", { "aria-hidden": true, "data-testid": `conversation-swipe-hint-${side}`, className: cn("pointer-events-none absolute inset-y-0 z-20 w-16", side === "left"
|
|
190
|
+
? "left-0 bg-gradient-to-r from-white/25 to-transparent"
|
|
191
|
+
: "right-0 bg-gradient-to-l from-white/25 to-transparent"), style: { opacity } }));
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* The drag handle at the top of the chat sheet — pull UP to open the history,
|
|
195
|
+
* pull DOWN to close it. It is also keyboard-operable (Enter/Space toggles,
|
|
196
|
+
* ArrowUp opens, ArrowDown/Escape closes) so the drag-only affordance stays
|
|
197
|
+
* WCAG 2.1.1 operable. `touch-none` keeps the browser from scroll/refreshing
|
|
198
|
+
* mid-drag. A faint warm sheen rides the handle while the agent is live.
|
|
199
|
+
*/
|
|
200
|
+
function SheetGrabber({ open, onOpen, onClose, binding, glow, opacity, pilled, }) {
|
|
201
|
+
return (_jsx(motion.button, { style: { opacity, pointerEvents: pilled ? "none" : "auto" },
|
|
202
|
+
// Invisible + inert while pilled: the pill capsule below owns the drag, so
|
|
203
|
+
// keep this out of the tab order and the a11y tree until it's the handle.
|
|
204
|
+
tabIndex: pilled ? -1 : undefined, "aria-hidden": pilled || undefined,
|
|
205
|
+
// A disclosure toggle for the chat history, not a value-bearing separator:
|
|
206
|
+
// button + aria-expanded is the accurate semantic and stays keyboard-
|
|
207
|
+
// operable (Enter/Space toggle, Arrow keys nudge) per WCAG 2.1.1.
|
|
208
|
+
type: "button", "aria-expanded": open, "aria-label": open ? "drag down to close chat" : "drag up to open chat", "data-testid": "chat-sheet-grabber", "data-open": open ? "true" : "false", onKeyDown: (e) => {
|
|
209
|
+
if (e.key === "Enter" || e.key === " ") {
|
|
210
|
+
e.preventDefault();
|
|
211
|
+
if (open)
|
|
212
|
+
onClose();
|
|
213
|
+
else
|
|
214
|
+
onOpen();
|
|
215
|
+
}
|
|
216
|
+
else if (e.key === "ArrowUp") {
|
|
217
|
+
e.preventDefault();
|
|
218
|
+
onOpen();
|
|
219
|
+
}
|
|
220
|
+
else if (e.key === "ArrowDown" || e.key === "Escape") {
|
|
221
|
+
e.preventDefault();
|
|
222
|
+
onClose();
|
|
223
|
+
}
|
|
224
|
+
}, ...binding, className: cn("appearance-none border-0 bg-transparent text-left",
|
|
225
|
+
// ABSOLUTELY positioned over the panel top (zero layout height — it
|
|
226
|
+
// floats slightly on top of the input row, so collapsed height == the
|
|
227
|
+
// input bar). The bar sits a touch lower; the BIG invisible `before` hit
|
|
228
|
+
// zone reaches UP into the empty space above the panel (3× taller/wider
|
|
229
|
+
// than the bar) so it's easy to grab without covering the edge buttons.
|
|
230
|
+
// z-20 keeps it above the input row (z-10) so it always wins the drag.
|
|
231
|
+
"absolute left-1/2 top-0.5 z-20 -translate-x-1/2 flex cursor-grab touch-none select-none items-center justify-center px-16 py-1 active:cursor-grabbing",
|
|
232
|
+
// The hit zone reaches UP into the empty space above the panel (easy to
|
|
233
|
+
// grab) and stops at the handle's own bottom — it never reaches the
|
|
234
|
+
// vertically-centered textarea, so a tap on the composer lands natively
|
|
235
|
+
// on the textarea and raises the keyboard (a programmatic focus from the
|
|
236
|
+
// handle wouldn't). Pull gestures start from the bar / the upward zone.
|
|
237
|
+
"before:absolute before:-inset-x-6 before:-top-16 before:bottom-0 before:content-['']", " "), children: _jsx("span", { "aria-hidden": "true", className: cn(
|
|
238
|
+
// The visible grabber line. Its show/hide is driven by the WRAPPER's
|
|
239
|
+
// `grabberOpacity` crossfade (fades in over [0.55, 0.95] of the open),
|
|
240
|
+
// strictly anti-phase with the pill bar so the two are never on screen
|
|
241
|
+
// together. The bar paints at full opacity — a prior regression pinned
|
|
242
|
+
// it to `opacity-0`, leaving the handle grabbable but invisible (#9142).
|
|
243
|
+
"h-2.5 w-16 rounded-full opacity-100 transition-colors duration-300", glow ? "bg-[rgba(255,180,120,0.8)]" : "bg-white/45") }) }));
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* The fully-collapsed PILL — the chat reduced to a small glass capsule at the
|
|
247
|
+
* very bottom. Tap or flick/pull it up to bring the input back. Big invisible
|
|
248
|
+
* hit area so it's easy to grab; the visible capsule stays small.
|
|
249
|
+
*/
|
|
250
|
+
function PillHandle({ binding, onOpen, glow, pilled, }) {
|
|
251
|
+
return (_jsx("button", { type: "button", "data-testid": "chat-pill", "aria-label": "open chat",
|
|
252
|
+
// No onClick: the pull-gesture binding is the single tap authority (a tap
|
|
253
|
+
// routes through onPointerUp → onTap → openFromPill), matching the
|
|
254
|
+
// SheetGrabber. A native onClick would ALSO fire on every tap, opening the
|
|
255
|
+
// pill twice in one gesture (double haptic + a stale focus-suppress flag
|
|
256
|
+
// that swallowed the next focus→expand). Keyboard activation still routes
|
|
257
|
+
// through onKeyDown below.
|
|
258
|
+
onKeyDown: (e) => {
|
|
259
|
+
if (e.key === "Enter" || e.key === " " || e.key === "ArrowUp") {
|
|
260
|
+
e.preventDefault();
|
|
261
|
+
onOpen();
|
|
262
|
+
}
|
|
263
|
+
}, ...binding, tabIndex: pilled ? undefined : -1, "aria-hidden": pilled ? undefined : true, className: cn(
|
|
264
|
+
// The bar hugs the BOTTOM (small pb) where the collapsed input sat — not
|
|
265
|
+
// floating mid-air; the tall pt keeps a generous upward grab/flick zone.
|
|
266
|
+
"flex cursor-grab touch-none select-none items-end justify-center px-16 pb-1.5 pt-10 active:cursor-grabbing",
|
|
267
|
+
// Interactive only while pilled. When NOT pilled the (faded) handle must
|
|
268
|
+
// let taps fall through to the composer textarea below it — otherwise its
|
|
269
|
+
// tall hit zone steals the tap and the keyboard never opens.
|
|
270
|
+
pilled ? "pointer-events-auto" : "pointer-events-none", " "), children: _jsx("span", { "aria-hidden": "true", className: cn(
|
|
271
|
+
// Identical to the SheetGrabber bar — same white shape + color whether
|
|
272
|
+
// the chat is open or collapsed to the pill. Its show/hide is driven by
|
|
273
|
+
// the WRAPPER's `pillOpacity` crossfade (anti-phase with the grabber).
|
|
274
|
+
// The bar paints at full opacity — a prior regression pinned it to
|
|
275
|
+
// `opacity-0`, leaving the pill handle grabbable but invisible (#9142).
|
|
276
|
+
"h-2.5 w-16 rounded-full opacity-100 transition-colors duration-300", glow ? "bg-[rgba(255,180,120,0.8)]" : "bg-white/45") }) }));
|
|
277
|
+
}
|
|
278
|
+
/** Humanize an action/tool symbol ("SEND_MESSAGE" → "Send message") for the
|
|
279
|
+
* status label so it reads as prose, not a constant. */
|
|
280
|
+
function humanizeStatusName(name) {
|
|
281
|
+
const cleaned = name.trim().replace(/[_-]+/g, " ").toLowerCase();
|
|
282
|
+
if (!cleaned)
|
|
283
|
+
return "";
|
|
284
|
+
return cleaned.charAt(0).toUpperCase() + cleaned.slice(1);
|
|
285
|
+
}
|
|
286
|
+
/** The phase label shown beside the breathing dots. Server-provided `label`
|
|
287
|
+
* always wins; otherwise derive a concise phrase from the kind (+ action/tool
|
|
288
|
+
* name when present). */
|
|
289
|
+
function turnStatusLabel(status) {
|
|
290
|
+
if (status.label?.trim())
|
|
291
|
+
return status.label.trim();
|
|
292
|
+
switch (status.kind) {
|
|
293
|
+
case "thinking":
|
|
294
|
+
return "Thinking";
|
|
295
|
+
case "streaming":
|
|
296
|
+
return "Replying";
|
|
297
|
+
case "running_action":
|
|
298
|
+
return status.actionName
|
|
299
|
+
? `Running ${humanizeStatusName(status.actionName)}`
|
|
300
|
+
: "Working";
|
|
301
|
+
case "running_tool":
|
|
302
|
+
return status.toolName
|
|
303
|
+
? `Using ${humanizeStatusName(status.toolName)}`
|
|
304
|
+
: "Using a tool";
|
|
305
|
+
case "evaluating":
|
|
306
|
+
return "Reflecting";
|
|
307
|
+
case "waking":
|
|
308
|
+
return "Waking the agent";
|
|
309
|
+
case "speaking":
|
|
310
|
+
return "Speaking";
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
// Min time (ms) a phase label must stay on screen before the next one replaces
|
|
314
|
+
// it. Without this, a fast thinking→action→streaming sequence flickers through
|
|
315
|
+
// labels faster than the eye can read. The text content the user sees is
|
|
316
|
+
// debounced; the dots animate continuously throughout.
|
|
317
|
+
const STATUS_MIN_DWELL_MS = 320;
|
|
318
|
+
/** Debounce a fast-changing status to a min on-screen dwell so a rapid
|
|
319
|
+
* thinking→action→streaming sequence doesn't strobe the label. The dots animate
|
|
320
|
+
* continuously; only the words wait their turn. Returns null when status is
|
|
321
|
+
* null (between turns). */
|
|
322
|
+
function useDebouncedTurnStatus(status) {
|
|
323
|
+
const [shown, setShown] = React.useState(status);
|
|
324
|
+
const lastChangeRef = React.useRef(0);
|
|
325
|
+
const timerRef = React.useRef(null);
|
|
326
|
+
React.useEffect(() => {
|
|
327
|
+
if (!status) {
|
|
328
|
+
setShown(null);
|
|
329
|
+
return;
|
|
330
|
+
}
|
|
331
|
+
const now = Date.now();
|
|
332
|
+
const elapsed = now - lastChangeRef.current;
|
|
333
|
+
if (elapsed >= STATUS_MIN_DWELL_MS) {
|
|
334
|
+
lastChangeRef.current = now;
|
|
335
|
+
setShown(status);
|
|
336
|
+
return;
|
|
337
|
+
}
|
|
338
|
+
if (timerRef.current !== null)
|
|
339
|
+
window.clearTimeout(timerRef.current);
|
|
340
|
+
timerRef.current = window.setTimeout(() => {
|
|
341
|
+
lastChangeRef.current = Date.now();
|
|
342
|
+
setShown(status);
|
|
343
|
+
timerRef.current = null;
|
|
344
|
+
}, STATUS_MIN_DWELL_MS - elapsed);
|
|
345
|
+
return () => {
|
|
346
|
+
if (timerRef.current !== null) {
|
|
347
|
+
window.clearTimeout(timerRef.current);
|
|
348
|
+
timerRef.current = null;
|
|
349
|
+
}
|
|
350
|
+
};
|
|
351
|
+
}, [status]);
|
|
352
|
+
return shown;
|
|
353
|
+
}
|
|
354
|
+
/**
|
|
355
|
+
* The breathing dots + phase label content of the status indicator, WITHOUT a
|
|
356
|
+
* bubble/motion wrapper — used both standalone (wrapped by TurnStatusIndicator)
|
|
357
|
+
* and inline inside the in-flight assistant bubble.
|
|
358
|
+
*
|
|
359
|
+
* Mirrors ChatVoiceStatusBar's a11y (`role="status"` + `aria-live="polite"`).
|
|
360
|
+
* Honors reduced motion (no pulse). Brand-safe: orange (the accent) ONLY for
|
|
361
|
+
* `speaking`; every other phase is neutral white. No blue anywhere. Degrades to
|
|
362
|
+
* plain dots when no status has arrived.
|
|
363
|
+
*/
|
|
364
|
+
function TurnStatusInner({ status, }) {
|
|
365
|
+
const shown = useDebouncedTurnStatus(status);
|
|
366
|
+
const speaking = shown?.kind === "speaking";
|
|
367
|
+
const label = shown ? turnStatusLabel(shown) : null;
|
|
368
|
+
return (_jsxs("span", { className: "inline-flex items-center gap-2", "data-testid": "turn-status-indicator", "data-status-kind": shown?.kind ?? "none", role: "status", "aria-live": "polite", children: [_jsx("span", { className: "flex gap-1.5", "data-testid": "typing-dots", "aria-hidden": "true", children: [0, 1, 2].map((i) => (_jsx("span", { className: cn("h-1.5 w-1.5 animate-pulse rounded-full motion-reduce:animate-none", speaking ? "bg-[rgba(255,190,140,0.9)]" : "bg-white/70"), style: { animationDelay: `${i * 180}ms` } }, i))) }), label ? (_jsx("span", { className: cn("text-[13px] font-medium", speaking ? "text-[rgba(255,200,150,0.95)]" : "text-white/90"), "data-testid": "turn-status-label", children: label })) : null] }));
|
|
369
|
+
}
|
|
370
|
+
/**
|
|
371
|
+
* The rich, phase-aware status row shown while the assistant works (#8813),
|
|
372
|
+
* replacing the bare typing dots in the pre-placeholder gap. Wraps
|
|
373
|
+
* TurnStatusInner in its own glass bubble + fade so it reads as a turn.
|
|
374
|
+
*/
|
|
375
|
+
function TurnStatusIndicator({ status, reduce, }) {
|
|
376
|
+
const speaking = status?.kind === "speaking";
|
|
377
|
+
return (_jsx(motion.div, { className: "mb-2.5 flex w-full justify-start",
|
|
378
|
+
// Fade in/out so the row dissolves with the reply rather than popping.
|
|
379
|
+
initial: { opacity: 0 }, animate: { opacity: 1 }, exit: { opacity: 0 }, transition: { duration: reduce ? 0 : 0.45, ease: OVERLAY_EASE }, children: _jsx("div", { className: cn("rounded-2xl rounded-bl-md border px-3.5 py-2", FLOAT_SHADOW,
|
|
380
|
+
// Orange (the accent) ONLY for spoken replies; every other phase is
|
|
381
|
+
// neutral white glass. No blue anywhere.
|
|
382
|
+
speaking
|
|
383
|
+
? "border-[rgba(255,180,120,0.45)] bg-black/55"
|
|
384
|
+
: "border-white/10 bg-black/45"), children: _jsx(TurnStatusInner, { status: status }) }) }));
|
|
385
|
+
}
|
|
386
|
+
/**
|
|
387
|
+
* One turn of the transcript as a chat bubble — assistant on the left, user on
|
|
388
|
+
* the right. Memoized so a live drag (which re-renders the overlay on every
|
|
389
|
+
* pointer-move frame) doesn't re-render every message in a long thread.
|
|
390
|
+
*/
|
|
391
|
+
// Press-and-hold copy: a still hold this long fires; any finger travel past the
|
|
392
|
+
// move threshold first cancels it (so it yields to the thread's scroll).
|
|
393
|
+
const COPY_HOLD_MS = 420;
|
|
394
|
+
const COPY_MOVE_CANCEL_PX = 10;
|
|
395
|
+
/**
|
|
396
|
+
* Render a user turn's text, bolding a leading slash command so a sent
|
|
397
|
+
* `/command` reads as a command in the transcript (mirroring the composer's
|
|
398
|
+
* inline autocomplete). Plain prose renders unchanged.
|
|
399
|
+
*/
|
|
400
|
+
function ThreadLineText({ content }) {
|
|
401
|
+
const slash = splitLeadingSlashCommand(content);
|
|
402
|
+
if (!slash)
|
|
403
|
+
return content;
|
|
404
|
+
return (_jsxs(_Fragment, { children: [_jsx("span", { className: "font-bold", "data-testid": "slash-command-token", children: slash.command }), slash.rest] }));
|
|
405
|
+
}
|
|
406
|
+
const ThreadLine = React.memo(function ThreadLine({ message, floating, reduce, onCopy, onOpenSettings, turnStatus, }) {
|
|
407
|
+
const isUser = message.role === "user";
|
|
408
|
+
const isAssistant = message.role === "assistant";
|
|
409
|
+
// Press-and-hold to copy an assistant answer — the only extraction affordance
|
|
410
|
+
// on touch (no hover row). A still hold past COPY_HOLD_MS copies + flashes
|
|
411
|
+
// "Copied" + a light haptic; real finger travel cancels so it never fights the
|
|
412
|
+
// thread's touch-pan-y scroll.
|
|
413
|
+
const [copied, setCopied] = React.useState(false);
|
|
414
|
+
const holdTimer = React.useRef(null);
|
|
415
|
+
const holdStart = React.useRef(null);
|
|
416
|
+
const copiedTimer = React.useRef(null);
|
|
417
|
+
const clearHold = React.useCallback(() => {
|
|
418
|
+
if (holdTimer.current !== null) {
|
|
419
|
+
window.clearTimeout(holdTimer.current);
|
|
420
|
+
holdTimer.current = null;
|
|
421
|
+
}
|
|
422
|
+
holdStart.current = null;
|
|
423
|
+
}, []);
|
|
424
|
+
React.useEffect(() => () => {
|
|
425
|
+
if (holdTimer.current !== null)
|
|
426
|
+
window.clearTimeout(holdTimer.current);
|
|
427
|
+
if (copiedTimer.current !== null)
|
|
428
|
+
window.clearTimeout(copiedTimer.current);
|
|
429
|
+
}, []);
|
|
430
|
+
const canCopy = isAssistant && !!onCopy && message.content.trim().length > 0;
|
|
431
|
+
const copyHandlers = canCopy
|
|
432
|
+
? {
|
|
433
|
+
onPointerDown: (e) => {
|
|
434
|
+
holdStart.current = { x: e.clientX, y: e.clientY };
|
|
435
|
+
holdTimer.current = window.setTimeout(() => {
|
|
436
|
+
onCopy?.(message.content);
|
|
437
|
+
detentHaptic();
|
|
438
|
+
setCopied(true);
|
|
439
|
+
if (copiedTimer.current !== null)
|
|
440
|
+
window.clearTimeout(copiedTimer.current);
|
|
441
|
+
copiedTimer.current = window.setTimeout(() => setCopied(false), 1100);
|
|
442
|
+
holdTimer.current = null;
|
|
443
|
+
}, COPY_HOLD_MS);
|
|
444
|
+
},
|
|
445
|
+
onPointerMove: (e) => {
|
|
446
|
+
const s = holdStart.current;
|
|
447
|
+
if (!s)
|
|
448
|
+
return;
|
|
449
|
+
if (Math.abs(e.clientX - s.x) > COPY_MOVE_CANCEL_PX ||
|
|
450
|
+
Math.abs(e.clientY - s.y) > COPY_MOVE_CANCEL_PX)
|
|
451
|
+
clearHold();
|
|
452
|
+
},
|
|
453
|
+
onPointerUp: clearHold,
|
|
454
|
+
onPointerCancel: clearHold,
|
|
455
|
+
}
|
|
456
|
+
: null;
|
|
457
|
+
// A failed turn the user can't recover from without wiring a provider: render
|
|
458
|
+
// a structured gate (not the raw error text) with a one-tap jump to Settings.
|
|
459
|
+
if (isAssistant && message.failureKind === "no_provider") {
|
|
460
|
+
return (_jsx(motion.div, { "data-testid": "thread-line", "data-role": message.role, "data-failure": "no_provider", initial: reduce ? { opacity: 0 } : { opacity: 0, y: 14 }, animate: reduce ? { opacity: 1 } : { opacity: 1, y: 0 }, exit: reduce ? { opacity: 0 } : { opacity: 0, y: -8 }, transition: { duration: reduce ? 0.15 : 0.52, ease: OVERLAY_EASE }, className: cn("flex w-full justify-start", floating ? "mb-1.5" : "mb-2.5"), children: _jsxs("div", { className: cn("max-w-[85%] rounded-2xl rounded-bl-md border border-amber-300/30 bg-black/60 px-3.5 py-3 text-white", FLOAT_SHADOW), children: [_jsx("div", { className: "mb-1 text-[14px] font-medium", children: "Connect a provider to chat" }), _jsx("div", { className: "mb-2.5 whitespace-pre-wrap text-[13px] leading-relaxed text-white/80 [overflow-wrap:anywhere]", children: message.content }), _jsx("button", { type: "button", "data-testid": "chat-no-provider-settings", onClick: () => onOpenSettings?.(), className: "rounded-full border border-white/20 bg-white/15 px-3 py-1.5 text-[13px] font-medium text-white transition-colors hover:bg-white/25 ", children: "Open Settings" })] }) }));
|
|
461
|
+
}
|
|
462
|
+
return (_jsx(motion.div, { "data-testid": "thread-line", "data-role": message.role,
|
|
463
|
+
// New turns rise+fade in. Transform/opacity only; reduced motion collapses
|
|
464
|
+
// it to a quick fade with no positional movement.
|
|
465
|
+
initial: reduce ? { opacity: 0 } : { opacity: 0, y: 14 }, animate: reduce ? { opacity: 1 } : { opacity: 1, y: 0 }, exit: reduce ? { opacity: 0 } : { opacity: 0, y: -8 }, transition: { duration: reduce ? 0.15 : 0.52, ease: OVERLAY_EASE }, className: cn("flex w-full", floating ? "mb-1.5" : "mb-2.5", isUser ? "justify-end" : "justify-start"), children: _jsxs("div", { ...(copyHandlers ?? {}), className: cn(
|
|
466
|
+
// whitespace-pre-wrap keeps newlines; overflow-wrap breaks long URLs /
|
|
467
|
+
// hashes / paths so they can't blow out the bubble width on a phone.
|
|
468
|
+
"relative max-w-[80%] whitespace-pre-wrap rounded-2xl px-3.5 py-2 text-[14px] leading-relaxed [overflow-wrap:anywhere]",
|
|
469
|
+
// The chrome-free transcript renders floating: each bubble carries its
|
|
470
|
+
// own dark glass so it stays legible directly over whatever view is
|
|
471
|
+
// behind. The light tone is for any embedding that supplies its own
|
|
472
|
+
// surrounding scrim.
|
|
473
|
+
isUser ? "rounded-br-md" : "rounded-bl-md",
|
|
474
|
+
// Message text must remain selectable for normal highlight/copy.
|
|
475
|
+
// Assistant bubbles still keep the press-and-hold copy shortcut.
|
|
476
|
+
"select-text [-webkit-touch-callout:default]", floating
|
|
477
|
+
? cn("border", isUser
|
|
478
|
+
? "border-white/15 bg-black/55 text-white"
|
|
479
|
+
: "border-white/10 bg-black/45 text-white/90", FLOAT_SHADOW)
|
|
480
|
+
: isUser
|
|
481
|
+
? "bg-white/20 text-white"
|
|
482
|
+
: "bg-white/10 text-white/90"), children: [_jsx("div", { "data-chat-selectable": "true", children: isAssistant &&
|
|
483
|
+
!message.content.trim() &&
|
|
484
|
+
!message.attachments?.length ? (_jsxs(_Fragment, { children: [_jsx(TurnStatusInner, { status: turnStatus ?? null }), message.attachments?.length ? (_jsx(MessageAttachments, { attachments: message.attachments })) : null] })) : isUser ? (_jsxs(_Fragment, { children: [_jsx(ThreadLineText, { content: message.content }), message.attachments?.length ? (_jsx(MessageAttachments, { attachments: message.attachments })) : null] })) : (_jsxs(_Fragment, { children: [_jsx(InlineWidgetText, { content: message.content }), message.attachments?.length ? (_jsx(MessageAttachments, { attachments: message.attachments })) : null, message.secretRequest ? (_jsx("div", { className: "pointer-events-auto", children: _jsx(SensitiveRequestBlock, { request: message.secretRequest }) })) : null, message.reasoning?.trim() ? (_jsx(ThinkingBlock, { reasoning: message.reasoning })) : null] })) }), _jsx(AnimatePresence, { children: copied ? (_jsx(motion.span, { "data-testid": "thread-line-copied", initial: reduce ? { opacity: 0 } : { opacity: 0, y: 4 }, animate: { opacity: 1, y: 0 }, exit: { opacity: 0 }, transition: { duration: reduce ? 0 : 0.18 }, className: "pointer-events-none absolute -top-2 right-2 rounded-full bg-white/90 px-2 py-0.5 text-[11px] font-medium text-black", children: "Copied" }, "copied")) : null })] }) }));
|
|
485
|
+
});
|
|
486
|
+
export function ContinuousChatOverlay({ controller, agentName = "Eliza", slash: slashProp, }) {
|
|
487
|
+
const { messages, phase, responding, turnStatus, send, canSend, recording, startRecording, stopRecording, handsFree, toggleHandsFree, transcriptionMode, toggleTranscriptionMode, stopTranscriptionAndMic, setDictationSink, setTranscriptSessionSink, setComposerHasDraft, transcript, needsAudioUnlock, unlockAudio, openSettings, navigateHome, currentTab, clearConversation, stop, modelStatus, } = controller;
|
|
488
|
+
// Defensive default so a minimal mock controller (stories/tests) that predates
|
|
489
|
+
// the swipe-nav surface still renders without crashing.
|
|
490
|
+
const conversationNav = controller.conversationNav ?? EMPTY_CONVERSATION_NAV;
|
|
491
|
+
// True while a clear/swipe is fetching an uncached thread — gates the empty
|
|
492
|
+
// thread's loading spinner. Defaulted for minimal mock controllers.
|
|
493
|
+
const conversationLoading = controller.conversationLoading ?? false;
|
|
494
|
+
// Horizontal swipe between conversations (#8929). `swipeDx` is the live
|
|
495
|
+
// horizontal drag (+left toward the next/older chat, -right toward the
|
|
496
|
+
// newer/previous chat) and drives the edge hint. The gesture defers pointer
|
|
497
|
+
// capture until a horizontal commit, so vertical thread scrolling is
|
|
498
|
+
// unaffected; it is only bound while the sheet is open (below).
|
|
499
|
+
const [swipeDx, setSwipeDx] = React.useState(0);
|
|
500
|
+
const conversationSwipe = usePullGesture({
|
|
501
|
+
onDragX: setSwipeDx,
|
|
502
|
+
onSwipeLeft: () => {
|
|
503
|
+
setSwipeDx(0);
|
|
504
|
+
conversationNav.goNext();
|
|
505
|
+
},
|
|
506
|
+
onSwipeRight: () => {
|
|
507
|
+
setSwipeDx(0);
|
|
508
|
+
conversationNav.goPrev();
|
|
509
|
+
},
|
|
510
|
+
});
|
|
511
|
+
// Copy an assistant answer (press-and-hold on its bubble). Stable identity so
|
|
512
|
+
// the memoized ThreadLine isn't re-rendered every parent tick.
|
|
513
|
+
const handleCopyMessage = React.useCallback((text) => {
|
|
514
|
+
void copyTextToClipboard(text);
|
|
515
|
+
}, []);
|
|
516
|
+
const slash = slashProp ?? EMPTY_SLASH_CONTROLLER;
|
|
517
|
+
// Honor the OS "reduce motion" setting: every overlay animation collapses to
|
|
518
|
+
// a near-instant cross-fade with no positional movement when this is true.
|
|
519
|
+
const reduce = useReducedMotion() ?? false;
|
|
520
|
+
const [draft, setDraft] = React.useState("");
|
|
521
|
+
// The active view can take over the composer: override the placeholder and
|
|
522
|
+
// receive the live draft (e.g. Help uses the chat as its search box).
|
|
523
|
+
const viewChatBinding = useViewChatBinding();
|
|
524
|
+
// Escape dismisses the slash menu without clearing the draft; typing reopens.
|
|
525
|
+
const [slashDismissed, setSlashDismissed] = React.useState(false);
|
|
526
|
+
// The chat-history sheet: closed (a slim peek + grabber) ↔ open (full
|
|
527
|
+
// scrollable history). The ONLY open/close driver — opened by a pull-up drag,
|
|
528
|
+
// by focusing the composer, or by sending; closed by a pull-down drag or
|
|
529
|
+
// Escape. Never by click-out, scroll, or blur.
|
|
530
|
+
// The sheet's vertical position is ONE ordinal — the single source of truth for
|
|
531
|
+
// how far the chat is open: `input` (composer-only peek) → `half` (reading
|
|
532
|
+
// height) → `full` (near-fullscreen). `sheetOpen`/`expanded` are derived
|
|
533
|
+
// read-only views so the two can never disagree (no impossible "open but not
|
|
534
|
+
// open" combos). `pilled` sits BELOW input; `maximized` drops the inset at full.
|
|
535
|
+
// Grabber pulls step through the detents (each cross haptics); programmatic
|
|
536
|
+
// opens (send/focus) go full.
|
|
537
|
+
// ONE openness state machine (see ChatMode). pilled / sheetOpen / expanded /
|
|
538
|
+
// detent are all DERIVED from it — so the impossible "open but not open" or
|
|
539
|
+
// pilled-and-full combos can't exist and no transition has to hand-sync two
|
|
540
|
+
// separate states (which is what bred the old stuck states).
|
|
541
|
+
const [mode, setMode] = React.useState("input");
|
|
542
|
+
const pilled = mode === "pill";
|
|
543
|
+
const sheetOpen = mode === "half" || mode === "full";
|
|
544
|
+
const expanded = mode === "full";
|
|
545
|
+
// Free-drag rest height (px): when set, the sheet rests exactly where the user
|
|
546
|
+
// released a deliberate drag instead of snapping to a detent. Cleared whenever
|
|
547
|
+
// a detent is taken (tap/flick/focus/collapse) so the detents stay the
|
|
548
|
+
// snap-to targets and free-positioning is purely the drag affordance.
|
|
549
|
+
const [freeH, setFreeH] = React.useState(null);
|
|
550
|
+
// FULL-SCREEN (maximized): at the FULL detent the user can drop the inset
|
|
551
|
+
// (max-width, side padding, top margin, rounding) so the chat is edge-to-edge.
|
|
552
|
+
// Invariant: only true while at FULL (sheetOpen && expanded && !pilled); every
|
|
553
|
+
// leave-full transition resets it.
|
|
554
|
+
const [maximized, setMaximized] = React.useState(false);
|
|
555
|
+
// Whether the sheet was collapsed when the composer last gained focus — so
|
|
556
|
+
// dismissing the keyboard (tap the handle, tap the scrim, tap outside) returns
|
|
557
|
+
// to the prior resting state (collapsed → input) instead of leaving the sheet
|
|
558
|
+
// hanging open, while a sheet that was ALREADY open before focus stays open.
|
|
559
|
+
const preFocusCollapsedRef = React.useRef(true);
|
|
560
|
+
// Snapshot of "was the composer focused (keyboard up) at the last pointerdown".
|
|
561
|
+
// The browser can auto-blur the input between a scrim pointerdown and its
|
|
562
|
+
// click, so the scrim's click handler can't read live focus — it reads this to
|
|
563
|
+
// tell a FIRST tap (keyboard up → just dismiss + restore) from a SECOND tap
|
|
564
|
+
// (keyboard already down → close the chat).
|
|
565
|
+
const composerFocusedAtPressRef = React.useRef(false);
|
|
566
|
+
// Composer focus ⟺ the soft keyboard is up on mobile. This is the reliable
|
|
567
|
+
// keyboard signal: Capacitor's resize:"body" shrinks innerHeight too, so a
|
|
568
|
+
// visualViewport-derived keyboardInset reads 0 and can't gate the layout.
|
|
569
|
+
const [composerFocused, setComposerFocused] = React.useState(false);
|
|
570
|
+
// The live thread (history) height in px, as a MOTION VALUE — driven directly
|
|
571
|
+
// by the pointer during a drag and spring-animated to a detent on release.
|
|
572
|
+
// Keeping it off React state means a drag updates the DOM height every frame
|
|
573
|
+
// with NO component re-render, so the gesture stays buttery. `draggingRef`
|
|
574
|
+
// gates the settle effect so it doesn't fight an in-flight finger drag.
|
|
575
|
+
const threadHeight = useMotionValue(0);
|
|
576
|
+
// Pill → input morph progress (0 = pill capsule, 1 = full input bar), OFF React
|
|
577
|
+
// state like threadHeight so a pill drag morphs the glass at 60fps with no
|
|
578
|
+
// re-render. Drives the glass/content crossfade + scale; `threadHeight` stays
|
|
579
|
+
// 0 until the input is fully formed, then takes over for input → chat.
|
|
580
|
+
const openProgress = useMotionValue(pilled ? 0 : 1);
|
|
581
|
+
// Imperative animations triggered from gesture callbacks are outside React's
|
|
582
|
+
// effect cleanup, so keep one owner per motion value and stop stale springs
|
|
583
|
+
// before starting another.
|
|
584
|
+
const threadAnimationRef = React.useRef(null);
|
|
585
|
+
const openProgressAnimationRef = React.useRef(null);
|
|
586
|
+
const delayedNavigationTimerRef = React.useRef(null);
|
|
587
|
+
const prefillFocusFrameRef = React.useRef(null);
|
|
588
|
+
const prefillFocusTimerRef = React.useRef(null);
|
|
589
|
+
const stopThreadAnimation = React.useCallback(() => {
|
|
590
|
+
threadAnimationRef.current?.stop();
|
|
591
|
+
threadAnimationRef.current = null;
|
|
592
|
+
}, []);
|
|
593
|
+
const stopOpenProgressAnimation = React.useCallback(() => {
|
|
594
|
+
openProgressAnimationRef.current?.stop();
|
|
595
|
+
openProgressAnimationRef.current = null;
|
|
596
|
+
}, []);
|
|
597
|
+
const animateThreadHeight = React.useCallback((target) => {
|
|
598
|
+
stopThreadAnimation();
|
|
599
|
+
threadAnimationRef.current = animate(threadHeight, target, SHEET_SPRING);
|
|
600
|
+
}, [stopThreadAnimation, threadHeight]);
|
|
601
|
+
const animateOpenProgress = React.useCallback((target) => {
|
|
602
|
+
stopOpenProgressAnimation();
|
|
603
|
+
openProgressAnimationRef.current = animate(openProgress, target, OPEN_SPRING);
|
|
604
|
+
}, [openProgress, stopOpenProgressAnimation]);
|
|
605
|
+
const clearPrefillFocusSchedule = React.useCallback(() => {
|
|
606
|
+
if (prefillFocusFrameRef.current !== null &&
|
|
607
|
+
typeof window !== "undefined" &&
|
|
608
|
+
typeof window.cancelAnimationFrame === "function") {
|
|
609
|
+
window.cancelAnimationFrame(prefillFocusFrameRef.current);
|
|
610
|
+
}
|
|
611
|
+
if (prefillFocusTimerRef.current !== null &&
|
|
612
|
+
typeof window !== "undefined") {
|
|
613
|
+
window.clearTimeout(prefillFocusTimerRef.current);
|
|
614
|
+
}
|
|
615
|
+
prefillFocusFrameRef.current = null;
|
|
616
|
+
prefillFocusTimerRef.current = null;
|
|
617
|
+
}, []);
|
|
618
|
+
React.useEffect(() => () => {
|
|
619
|
+
stopThreadAnimation();
|
|
620
|
+
stopOpenProgressAnimation();
|
|
621
|
+
if (delayedNavigationTimerRef.current !== null) {
|
|
622
|
+
window.clearTimeout(delayedNavigationTimerRef.current);
|
|
623
|
+
delayedNavigationTimerRef.current = null;
|
|
624
|
+
}
|
|
625
|
+
clearPrefillFocusSchedule();
|
|
626
|
+
}, [stopThreadAnimation, stopOpenProgressAnimation, clearPrefillFocusSchedule]);
|
|
627
|
+
// Latest `settleDrag` (defined below) exposed to the viewport-resize effect
|
|
628
|
+
// (which runs earlier). A rotation can orphan an in-flight drag — re-settling
|
|
629
|
+
// the morph keeps the pill↔input crossfade from stranding both bars visible.
|
|
630
|
+
const settleDragRef = React.useRef(null);
|
|
631
|
+
const draggingRef = React.useRef(false);
|
|
632
|
+
// Push-to-talk phase (single source of truth) + a label-only mirror.
|
|
633
|
+
const pttRef = React.useRef({ kind: "idle" });
|
|
634
|
+
const [pttHolding, setPttHolding] = React.useState(false);
|
|
635
|
+
// Swallow exactly the one click that follows a held PTT release.
|
|
636
|
+
const suppressNextClickRef = React.useRef(false);
|
|
637
|
+
const [pendingImages, setPendingImages] = React.useState([]);
|
|
638
|
+
const [imageError, setImageError] = React.useState(null);
|
|
639
|
+
const endRef = React.useRef(null);
|
|
640
|
+
const inputRef = React.useRef(null);
|
|
641
|
+
const fileInputRef = React.useRef(null);
|
|
642
|
+
const overlayRef = React.useRef(null);
|
|
643
|
+
const panelRef = React.useRef(null);
|
|
644
|
+
const threadRef = React.useRef(null);
|
|
645
|
+
// The composer content (textarea + thread). Held so we can imperatively clear
|
|
646
|
+
// its `inert` (set while pilled) the instant the pill is tapped open, before
|
|
647
|
+
// React re-renders — iOS only raises the keyboard for a focus() that lands on
|
|
648
|
+
// a non-inert element synchronously inside the originating tap gesture.
|
|
649
|
+
const contentRef = React.useRef(null);
|
|
650
|
+
// Set for one focus() when we open the pill to the bare input bar: that focus
|
|
651
|
+
// is only there to raise the iOS keyboard and must NOT trip the focus→expand
|
|
652
|
+
// that the normal "tap the visible composer" path relies on (which would
|
|
653
|
+
// fling a history thread open to half instead of resting on the input bar).
|
|
654
|
+
const suppressExpandOnFocusRef = React.useRef(false);
|
|
655
|
+
const focusThreadRef = React.useRef(false);
|
|
656
|
+
// Recomputed only when the thread or phase changes — NOT on every drag/draft
|
|
657
|
+
// re-render. Pure windowing (empty-turn filter + most-recent cap, with the
|
|
658
|
+
// streaming-assistant exception) lives in shell-state so it's unit-tested.
|
|
659
|
+
const visibleMessages = React.useMemo(() => selectVisibleShellMessages(messages, phase), [messages, phase]);
|
|
660
|
+
const lastId = visibleMessages.at(-1)?.id ?? null;
|
|
661
|
+
const lastContent = visibleMessages.at(-1)?.content ?? "";
|
|
662
|
+
// Copy the whole thread as a plain-text transcript from the full-state header
|
|
663
|
+
// — parity with the desktop ChatView header. Flashes a check on success.
|
|
664
|
+
const [conversationCopied, setConversationCopied] = React.useState(false);
|
|
665
|
+
const conversationCopiedTimerRef = React.useRef(null);
|
|
666
|
+
React.useEffect(() => () => {
|
|
667
|
+
if (conversationCopiedTimerRef.current) {
|
|
668
|
+
clearTimeout(conversationCopiedTimerRef.current);
|
|
669
|
+
}
|
|
670
|
+
}, []);
|
|
671
|
+
const handleCopyConversation = React.useCallback(() => {
|
|
672
|
+
const transcript = conversationTranscriptText(visibleMessages.map((m) => ({ role: m.role, text: m.content })), { agentName });
|
|
673
|
+
if (!transcript)
|
|
674
|
+
return;
|
|
675
|
+
void copyTextToClipboard(transcript);
|
|
676
|
+
setConversationCopied(true);
|
|
677
|
+
if (conversationCopiedTimerRef.current) {
|
|
678
|
+
clearTimeout(conversationCopiedTimerRef.current);
|
|
679
|
+
}
|
|
680
|
+
conversationCopiedTimerRef.current = setTimeout(() => setConversationCopied(false), 2000);
|
|
681
|
+
}, [agentName, visibleMessages]);
|
|
682
|
+
// The last line id the scroll effect pinned to — lets it tell a NEW line
|
|
683
|
+
// (always pin to bottom) from streaming growth of the current line (follow
|
|
684
|
+
// only when the reader is already at the bottom).
|
|
685
|
+
const scrollPinnedIdRef = React.useRef(lastId);
|
|
686
|
+
// Topic grouping + chips bar (#8928). Derived from the per-message Stage-1
|
|
687
|
+
// topic tags; when no message is tagged the transcript renders flat (the
|
|
688
|
+
// chips bar and groups simply don't appear), preserving the prior behavior.
|
|
689
|
+
const channelTopics = React.useMemo(() => deriveChannelTopics(visibleMessages), [visibleMessages]);
|
|
690
|
+
const topicSegments = React.useMemo(() => groupMessagesByTopic(visibleMessages), [visibleMessages]);
|
|
691
|
+
const hasTopics = channelTopics.length > 0;
|
|
692
|
+
const [collapsedTopics, setCollapsedTopics] = React.useState(() => new Set());
|
|
693
|
+
const setTopicCollapsed = React.useCallback((key, collapsed) => {
|
|
694
|
+
setCollapsedTopics((prev) => {
|
|
695
|
+
if (collapsed === prev.has(key))
|
|
696
|
+
return prev;
|
|
697
|
+
const next = new Set(prev);
|
|
698
|
+
if (collapsed)
|
|
699
|
+
next.add(key);
|
|
700
|
+
else
|
|
701
|
+
next.delete(key);
|
|
702
|
+
return next;
|
|
703
|
+
});
|
|
704
|
+
}, []);
|
|
705
|
+
// Tapping a chip expands its group and scrolls its header into view.
|
|
706
|
+
const scrollToTopic = React.useCallback((topic) => {
|
|
707
|
+
setCollapsedTopics((prev) => {
|
|
708
|
+
if (!prev.has(topic))
|
|
709
|
+
return prev;
|
|
710
|
+
const next = new Set(prev);
|
|
711
|
+
next.delete(topic);
|
|
712
|
+
return next;
|
|
713
|
+
});
|
|
714
|
+
if (typeof requestAnimationFrame === "undefined")
|
|
715
|
+
return;
|
|
716
|
+
requestAnimationFrame(() => {
|
|
717
|
+
const escaped = typeof CSS !== "undefined" && typeof CSS.escape === "function"
|
|
718
|
+
? CSS.escape(topic)
|
|
719
|
+
: topic.replace(/"/g, '\\"');
|
|
720
|
+
const el = threadRef.current?.querySelector(`[data-topic="${escaped}"]`);
|
|
721
|
+
el?.scrollIntoView({ behavior: "smooth", block: "start" });
|
|
722
|
+
});
|
|
723
|
+
}, []);
|
|
724
|
+
// Render one transcript line; shared by the flat and topic-grouped paths so
|
|
725
|
+
// the in-flight-turn detection stays identical.
|
|
726
|
+
const renderThreadLine = React.useCallback((m, index) => {
|
|
727
|
+
const isInFlight = index === visibleMessages.length - 1 &&
|
|
728
|
+
m.role === "assistant" &&
|
|
729
|
+
!m.content.trim();
|
|
730
|
+
return (_jsx(ThreadLine, { message: m, floating: true, reduce: reduce, onCopy: handleCopyMessage, onOpenSettings: openSettings, turnStatus: isInFlight ? turnStatus : undefined }, m.id));
|
|
731
|
+
}, [
|
|
732
|
+
visibleMessages.length,
|
|
733
|
+
reduce,
|
|
734
|
+
handleCopyMessage,
|
|
735
|
+
openSettings,
|
|
736
|
+
turnStatus,
|
|
737
|
+
]);
|
|
738
|
+
const booting = phase === "booting";
|
|
739
|
+
const listening = phase === "listening";
|
|
740
|
+
const hasDraft = draft.trim().length > 0;
|
|
741
|
+
const hasImages = pendingImages.length > 0;
|
|
742
|
+
// The suggestion strip is a keyboard-style row of one-tap prompts shown in the
|
|
743
|
+
// RESTING (closed) state — ready, nothing typed or attached, not recording. It
|
|
744
|
+
// unmounts once the sheet opens or a draft starts; this condition also gates
|
|
745
|
+
// the small-model fetch so it isn't called for a hidden strip.
|
|
746
|
+
const suggestionsVisible = SHOW_PROMPT_SUGGESTIONS &&
|
|
747
|
+
!pilled &&
|
|
748
|
+
!sheetOpen &&
|
|
749
|
+
!recording &&
|
|
750
|
+
!booting &&
|
|
751
|
+
canSend &&
|
|
752
|
+
!hasDraft &&
|
|
753
|
+
!hasImages;
|
|
754
|
+
// Three tailored prompt suggestions for the resting overlay (model-backed via
|
|
755
|
+
// TEXT_SMALL, with a static offline fallback).
|
|
756
|
+
const suggestions = usePromptSuggestions(messages, {
|
|
757
|
+
enabled: suggestionsVisible,
|
|
758
|
+
});
|
|
759
|
+
// Defensive unmount: clear a pending timer and stop a stuck dictation capture
|
|
760
|
+
// if the overlay unmounts mid-press (the controller outlives the overlay).
|
|
761
|
+
// biome-ignore lint/correctness/useExhaustiveDependencies: stopRecording is stable; this runs once on unmount
|
|
762
|
+
React.useEffect(() => () => {
|
|
763
|
+
const phase = pttRef.current;
|
|
764
|
+
if (phase.kind === "pending")
|
|
765
|
+
window.clearTimeout(phase.timer);
|
|
766
|
+
if (phase.kind === "holding")
|
|
767
|
+
stopRecording();
|
|
768
|
+
pttRef.current = { kind: "idle" };
|
|
769
|
+
suppressNextClickRef.current = false;
|
|
770
|
+
}, []);
|
|
771
|
+
// Keep the transcript pinned to the latest line. On first open jump INSTANTLY
|
|
772
|
+
// to the bottom — a layout effect runs before paint, so the thread never
|
|
773
|
+
// flashes at the top. A NEW line (the user's own send, or a fresh reply)
|
|
774
|
+
// always re-pins to the bottom; streaming growth of the current line follows
|
|
775
|
+
// only when the reader is already resting at the bottom, so scrolling up to
|
|
776
|
+
// read history is never yanked down.
|
|
777
|
+
const wasOpenRef = React.useRef(false);
|
|
778
|
+
// Coalesces the per-token streaming-follow scroll into one rAF so a burst of
|
|
779
|
+
// tokens landing within a frame triggers at most one measure+write instead of
|
|
780
|
+
// a forced reflow per token. New-line / first-open pins stay synchronous below.
|
|
781
|
+
const followRafRef = React.useRef(null);
|
|
782
|
+
React.useEffect(() => () => {
|
|
783
|
+
if (followRafRef.current != null)
|
|
784
|
+
cancelAnimationFrame(followRafRef.current);
|
|
785
|
+
}, []);
|
|
786
|
+
// biome-ignore lint/correctness/useExhaustiveDependencies: lastId/lastContent/sheetOpen are the triggers; the body reads refs
|
|
787
|
+
React.useLayoutEffect(() => {
|
|
788
|
+
const el = threadRef.current;
|
|
789
|
+
if (!el)
|
|
790
|
+
return;
|
|
791
|
+
const isNewLine = lastId !== scrollPinnedIdRef.current;
|
|
792
|
+
scrollPinnedIdRef.current = lastId;
|
|
793
|
+
// CLOSED peek: always pin to the bottom so it whispers the LATEST line (the
|
|
794
|
+
// one nearest the composer) — even though it can't be user-scrolled, the
|
|
795
|
+
// clipped content must show the end of the thread, not the top.
|
|
796
|
+
if (!sheetOpen) {
|
|
797
|
+
wasOpenRef.current = false;
|
|
798
|
+
el.scrollTop = el.scrollHeight;
|
|
799
|
+
return;
|
|
800
|
+
}
|
|
801
|
+
// OPEN: jump to the bottom on first open; a NEW line re-pins (smooth); while
|
|
802
|
+
// already resting at the bottom, follow streaming growth — but never yank a
|
|
803
|
+
// reader who has scrolled up to read history. Direct scrollTop assignment is
|
|
804
|
+
// more reliable than scrollIntoView inside this clipped flex column.
|
|
805
|
+
const justOpened = !wasOpenRef.current;
|
|
806
|
+
wasOpenRef.current = true;
|
|
807
|
+
// New line or first open: pin synchronously (pre-paint) so the thread never
|
|
808
|
+
// flashes at the top. Infrequent — once per turn, not per token.
|
|
809
|
+
if (isNewLine || justOpened) {
|
|
810
|
+
const atBottom = el.scrollHeight - el.scrollTop - el.clientHeight < 80;
|
|
811
|
+
// Pin to the latest line ONLY on first open, or when the reader is already
|
|
812
|
+
// resting at the bottom. If they have scrolled UP to read history, a new
|
|
813
|
+
// line must NOT yank them down — the previous code force-pinned on every
|
|
814
|
+
// new line (the `else` ran whenever !atBottom), which is exactly the
|
|
815
|
+
// "scroll up to the first message and get snapped back to the bottom" bug.
|
|
816
|
+
if (justOpened || atBottom) {
|
|
817
|
+
if (isNewLine && !justOpened && !reduce) {
|
|
818
|
+
endRef.current?.scrollIntoView({ behavior: "smooth", block: "end" });
|
|
819
|
+
}
|
|
820
|
+
else {
|
|
821
|
+
el.scrollTop = el.scrollHeight;
|
|
822
|
+
}
|
|
823
|
+
}
|
|
824
|
+
if (justOpened && focusThreadRef.current) {
|
|
825
|
+
el.focus();
|
|
826
|
+
focusThreadRef.current = false;
|
|
827
|
+
}
|
|
828
|
+
return;
|
|
829
|
+
}
|
|
830
|
+
// Streaming growth of the current line: coalesce the bottom-follow into a
|
|
831
|
+
// single rAF (measure atBottom + write scrollTop at most once per frame).
|
|
832
|
+
// Same semantics as before — only follows when the reader is at the bottom.
|
|
833
|
+
if (followRafRef.current != null)
|
|
834
|
+
return;
|
|
835
|
+
followRafRef.current = requestAnimationFrame(() => {
|
|
836
|
+
followRafRef.current = null;
|
|
837
|
+
const node = threadRef.current;
|
|
838
|
+
if (!node)
|
|
839
|
+
return;
|
|
840
|
+
const atBottom = node.scrollHeight - node.scrollTop - node.clientHeight < 80;
|
|
841
|
+
if (atBottom)
|
|
842
|
+
node.scrollTop = node.scrollHeight;
|
|
843
|
+
});
|
|
844
|
+
}, [lastId, lastContent, sheetOpen]);
|
|
845
|
+
// The closed peek must always whisper the NEWEST line, but closing is an
|
|
846
|
+
// animated height collapse: a one-shot scroll set runs before the height
|
|
847
|
+
// finishes shrinking, leaving the peek parked mid-thread as clientHeight
|
|
848
|
+
// drops. Observe the peek while closed and re-pin to the bottom on every size
|
|
849
|
+
// change (animation frames, web-font reflow, viewport resize) until it
|
|
850
|
+
// settles. Disconnects the moment the sheet opens.
|
|
851
|
+
React.useEffect(() => {
|
|
852
|
+
const el = threadRef.current;
|
|
853
|
+
if (!el || sheetOpen || typeof ResizeObserver === "undefined")
|
|
854
|
+
return;
|
|
855
|
+
const pin = () => {
|
|
856
|
+
el.scrollTop = el.scrollHeight;
|
|
857
|
+
};
|
|
858
|
+
pin();
|
|
859
|
+
const ro = new ResizeObserver(pin);
|
|
860
|
+
ro.observe(el);
|
|
861
|
+
return () => ro.disconnect();
|
|
862
|
+
}, [sheetOpen]);
|
|
863
|
+
// Send `text` (and optional images) through the normal chat pipeline, clearing
|
|
864
|
+
// the composer. Shared by the send button, the slash menu (agent commands),
|
|
865
|
+
// and suggestion taps.
|
|
866
|
+
const submitText = React.useCallback((text, images = []) => {
|
|
867
|
+
const trimmed = text.trim();
|
|
868
|
+
// An image-only turn is valid; only bail when there's nothing to send.
|
|
869
|
+
if ((!trimmed && images.length === 0) || !canSend)
|
|
870
|
+
return;
|
|
871
|
+
setDraft("");
|
|
872
|
+
setSlashDismissed(false);
|
|
873
|
+
setPendingImages([]);
|
|
874
|
+
setImageError(null);
|
|
875
|
+
if (images.length) {
|
|
876
|
+
send(trimmed, { images });
|
|
877
|
+
}
|
|
878
|
+
else {
|
|
879
|
+
send(trimmed);
|
|
880
|
+
}
|
|
881
|
+
// Open the thread to show the conversation + the streaming reply, the same
|
|
882
|
+
// HALF detent focusing/typing uses — NOT a full-screen takeover on every
|
|
883
|
+
// send (that shoved the messages up too high). Keep a taller detent if the
|
|
884
|
+
// user already opened one; clear any free-rest so the height matches.
|
|
885
|
+
setFreeH(null);
|
|
886
|
+
setMode((m) => (m === "half" || m === "full" ? m : "half"));
|
|
887
|
+
// Sending COMMITS to the open chat: a deliberate message means this is now
|
|
888
|
+
// an active conversation, so dismissing the keyboard afterwards keeps the
|
|
889
|
+
// thread open (preFocusCollapsedRef gates that) instead of collapsing the
|
|
890
|
+
// whole conversation back to the bare input peek — even when the chat was
|
|
891
|
+
// opened by tapping the collapsed input.
|
|
892
|
+
preFocusCollapsedRef.current = false;
|
|
893
|
+
detentHaptic();
|
|
894
|
+
inputRef.current?.focus();
|
|
895
|
+
}, [canSend, send]);
|
|
896
|
+
// Tapping a suggestion sends it immediately (same path as submit), so the
|
|
897
|
+
// strip is a one-tap shortcut, not just a draft pre-fill.
|
|
898
|
+
const pickSuggestion = React.useCallback((text) => {
|
|
899
|
+
if (!canSend)
|
|
900
|
+
return;
|
|
901
|
+
setDraft("");
|
|
902
|
+
send(text);
|
|
903
|
+
// Open to HALF (conversation above the keyboard), not a full-screen jump.
|
|
904
|
+
setFreeH(null);
|
|
905
|
+
setMode((m) => (m === "half" || m === "full" ? m : "half"));
|
|
906
|
+
detentHaptic();
|
|
907
|
+
inputRef.current?.focus();
|
|
908
|
+
}, [canSend, send]);
|
|
909
|
+
const addImageFiles = React.useCallback((files) => {
|
|
910
|
+
void intakeAttachmentFiles(files)
|
|
911
|
+
.then(({ attachments, droppedTooLarge }) => {
|
|
912
|
+
// The overlay is a pure component without an i18n translator, so it
|
|
913
|
+
// surfaces the "kept N, dropped M" notice inline in English (matching
|
|
914
|
+
// its other hardcoded strings) via the existing imageError channel.
|
|
915
|
+
const summary = summarizeDroppedAttachments({
|
|
916
|
+
acceptedCount: attachments.length,
|
|
917
|
+
droppedTooLarge,
|
|
918
|
+
droppedOverCount: [],
|
|
919
|
+
});
|
|
920
|
+
setImageError(summary
|
|
921
|
+
? `Kept ${summary.kept}, dropped ${summary.dropped} (too large — max ${summary.maxMb}MB)`
|
|
922
|
+
: null);
|
|
923
|
+
if (attachments.length) {
|
|
924
|
+
setPendingImages((prev) => [...prev, ...attachments].slice(0, MAX_CHAT_IMAGES));
|
|
925
|
+
}
|
|
926
|
+
})
|
|
927
|
+
.catch((err) => {
|
|
928
|
+
// Surface the failure inline rather than silently dropping the image —
|
|
929
|
+
// the overlay is pure, so it can't reach the global notice channel.
|
|
930
|
+
setImageError(err instanceof Error ? err.message : "Couldn't read image");
|
|
931
|
+
});
|
|
932
|
+
}, []);
|
|
933
|
+
const removeImage = React.useCallback((index) => {
|
|
934
|
+
setPendingImages((prev) => prev.filter((_, i) => i !== index));
|
|
935
|
+
}, []);
|
|
936
|
+
// ── Push-to-talk state machine ──────────────────────────────────────────────
|
|
937
|
+
// ONE phase ref is the source of truth: idle → (press) pending → (200ms hold)
|
|
938
|
+
// holding → (release) idle. `pttHolding` mirrors only what the label needs.
|
|
939
|
+
// A quick tap releases while still "pending" (never started a capture) and
|
|
940
|
+
// falls through to handleMicClick → toggleHandsFree. A held release stops the
|
|
941
|
+
// dictation and suppresses the trailing click so it doesn't ALSO toggle.
|
|
942
|
+
const beginPushToTalkPress = React.useCallback((event) => {
|
|
943
|
+
// Only arm from idle, primary button, no draft, and no capture already
|
|
944
|
+
// live (a tap while hands-free toggles it off — handleMicClick). No
|
|
945
|
+
// `booting` guard: voice capture is independent of agent-respond readiness.
|
|
946
|
+
if (pttRef.current.kind !== "idle" ||
|
|
947
|
+
event.button !== 0 ||
|
|
948
|
+
hasDraft ||
|
|
949
|
+
recording ||
|
|
950
|
+
transcriptionMode ||
|
|
951
|
+
// Voice input is gated while a reply is in flight; type + send to queue
|
|
952
|
+
// another turn instead. Re-enabled the instant the reply finishes.
|
|
953
|
+
responding)
|
|
954
|
+
return;
|
|
955
|
+
const { pointerId } = event;
|
|
956
|
+
try {
|
|
957
|
+
event.currentTarget.setPointerCapture(pointerId);
|
|
958
|
+
}
|
|
959
|
+
catch {
|
|
960
|
+
// Synthetic/detached pointer — capture is best-effort.
|
|
961
|
+
}
|
|
962
|
+
const timer = window.setTimeout(() => {
|
|
963
|
+
// Promote to holding only if still pending for THIS pointer.
|
|
964
|
+
const phase = pttRef.current;
|
|
965
|
+
if (phase.kind !== "pending" || phase.pointerId !== pointerId)
|
|
966
|
+
return;
|
|
967
|
+
pttRef.current = { kind: "holding", pointerId };
|
|
968
|
+
setPttHolding(true);
|
|
969
|
+
// Press-and-hold = dictation: fills the composer draft (no send).
|
|
970
|
+
startRecording("dictate");
|
|
971
|
+
}, 200);
|
|
972
|
+
pttRef.current = { kind: "pending", pointerId, timer };
|
|
973
|
+
}, [hasDraft, recording, responding, startRecording, transcriptionMode]);
|
|
974
|
+
// One funnel for BOTH pointerup (cancelled=false) and pointercancel
|
|
975
|
+
// (cancelled=true). Always clears the pending timer + releases pointer capture
|
|
976
|
+
// FIRST — before any early return — so a quick tap can never leak a stuck timer
|
|
977
|
+
// or a captured pointer (the bug that mis-routed later events).
|
|
978
|
+
const finishPushToTalkPress = React.useCallback((event, cancelled) => {
|
|
979
|
+
const phase = pttRef.current;
|
|
980
|
+
if (phase.kind === "pending")
|
|
981
|
+
window.clearTimeout(phase.timer);
|
|
982
|
+
if (typeof event.currentTarget.hasPointerCapture === "function" &&
|
|
983
|
+
event.currentTarget.hasPointerCapture(event.pointerId)) {
|
|
984
|
+
event.currentTarget.releasePointerCapture(event.pointerId);
|
|
985
|
+
}
|
|
986
|
+
pttRef.current = { kind: "idle" };
|
|
987
|
+
if (phase.kind === "holding") {
|
|
988
|
+
stopRecording();
|
|
989
|
+
setPttHolding(false);
|
|
990
|
+
// A real click follows a pointer-UP (never a cancel); suppress it so the
|
|
991
|
+
// dictation release doesn't also toggle hands-free. Setting it ONLY here
|
|
992
|
+
// means it can never leak true into the next legitimate tap.
|
|
993
|
+
if (!cancelled)
|
|
994
|
+
suppressNextClickRef.current = true;
|
|
995
|
+
}
|
|
996
|
+
}, [stopRecording]);
|
|
997
|
+
const handleMicClick = React.useCallback(() => {
|
|
998
|
+
if (suppressNextClickRef.current) {
|
|
999
|
+
suppressNextClickRef.current = false;
|
|
1000
|
+
return;
|
|
1001
|
+
}
|
|
1002
|
+
// Voice can't be turned ON while a reply is in flight (it's gated until the
|
|
1003
|
+
// turn finishes), but an active hands-free session can always be turned OFF.
|
|
1004
|
+
if (responding && !handsFree)
|
|
1005
|
+
return;
|
|
1006
|
+
// While transcribing, the mic is the master voice control: a tap turns the
|
|
1007
|
+
// mic OFF, which also ends transcription (mic = parent — turning off the mic
|
|
1008
|
+
// turns off transcript). This is distinct from the transcript button, which
|
|
1009
|
+
// turns transcript off but LEAVES THE MIC ON. The finished transcript still
|
|
1010
|
+
// drops into the composer as an attachment.
|
|
1011
|
+
if (transcriptionMode) {
|
|
1012
|
+
stopTranscriptionAndMic();
|
|
1013
|
+
return;
|
|
1014
|
+
}
|
|
1015
|
+
// Quick tap = hands-free conversation: the agent speaks its replies back and
|
|
1016
|
+
// the mic re-opens after each one. Tap again to end.
|
|
1017
|
+
toggleHandsFree();
|
|
1018
|
+
}, [
|
|
1019
|
+
responding,
|
|
1020
|
+
handsFree,
|
|
1021
|
+
toggleHandsFree,
|
|
1022
|
+
transcriptionMode,
|
|
1023
|
+
stopTranscriptionAndMic,
|
|
1024
|
+
]);
|
|
1025
|
+
const hasThread = visibleMessages.length > 0;
|
|
1026
|
+
// Track the VISUAL viewport so the chat sizes to — and sits above — whatever
|
|
1027
|
+
// the mobile keyboard leaves visible. `height` shrinks when the keyboard opens
|
|
1028
|
+
// (on iOS innerHeight does not, so read visualViewport); `keyboardInset` is how
|
|
1029
|
+
// far the keyboard intrudes from the layout bottom, used to lift the whole
|
|
1030
|
+
// overlay above it. `bottomPad` is the overlay's own safe-area/nav padding,
|
|
1031
|
+
// reserved when bounding the panel height.
|
|
1032
|
+
const readViewport = React.useCallback(() => {
|
|
1033
|
+
if (typeof window === "undefined")
|
|
1034
|
+
return { height: 800, keyboardInset: 0, innerHeight: 800 };
|
|
1035
|
+
const vv = window.visualViewport;
|
|
1036
|
+
const innerHeight = window.innerHeight;
|
|
1037
|
+
const height = vv?.height ?? innerHeight;
|
|
1038
|
+
const keyboardInset = vv
|
|
1039
|
+
? Math.max(0, innerHeight - vv.height - vv.offsetTop)
|
|
1040
|
+
: 0;
|
|
1041
|
+
// innerHeight is the LAYOUT viewport: on Android it shrinks (adjustResize)
|
|
1042
|
+
// when the keyboard opens, on iOS (`resize: "body"`) it does not. The lift
|
|
1043
|
+
// math below uses that to avoid double-counting the keyboard.
|
|
1044
|
+
return { height, keyboardInset, innerHeight };
|
|
1045
|
+
}, []);
|
|
1046
|
+
const [viewport, setViewport] = React.useState(readViewport);
|
|
1047
|
+
const [bottomPad, setBottomPad] = React.useState(0);
|
|
1048
|
+
React.useEffect(() => {
|
|
1049
|
+
if (typeof window === "undefined")
|
|
1050
|
+
return undefined;
|
|
1051
|
+
const commit = () => {
|
|
1052
|
+
// Bail out of the re-render when the viewport values are unchanged — vv
|
|
1053
|
+
// `scroll` fires constantly while the keyboard animates but the height/
|
|
1054
|
+
// inset frequently don't actually move between events.
|
|
1055
|
+
setViewport((prev) => {
|
|
1056
|
+
const next = readViewport();
|
|
1057
|
+
return prev.height === next.height &&
|
|
1058
|
+
prev.keyboardInset === next.keyboardInset &&
|
|
1059
|
+
prev.innerHeight === next.innerHeight
|
|
1060
|
+
? prev
|
|
1061
|
+
: next;
|
|
1062
|
+
});
|
|
1063
|
+
const el = overlayRef.current;
|
|
1064
|
+
if (el) {
|
|
1065
|
+
const pad = Number.parseFloat(getComputedStyle(el).paddingBottom) || 0;
|
|
1066
|
+
setBottomPad((prev) => (prev === pad ? prev : pad));
|
|
1067
|
+
}
|
|
1068
|
+
};
|
|
1069
|
+
// Coalesce the high-rate vv `scroll` to at most one commit per frame so the
|
|
1070
|
+
// keyboard-animation storm can't drive >60 forced style reads + setStates/s.
|
|
1071
|
+
let rafId = 0;
|
|
1072
|
+
const sync = () => {
|
|
1073
|
+
if (rafId !== 0)
|
|
1074
|
+
return;
|
|
1075
|
+
rafId = requestAnimationFrame(() => {
|
|
1076
|
+
rafId = 0;
|
|
1077
|
+
commit();
|
|
1078
|
+
});
|
|
1079
|
+
};
|
|
1080
|
+
// A viewport SIZE change (rotation) must never strand the pill↔input morph
|
|
1081
|
+
// mid-crossfade — rotation often cancels the in-flight pointer with no
|
|
1082
|
+
// pointerup, leaving the drag orphaned (openProgress frozen mid-range = BOTH
|
|
1083
|
+
// the grabber bar and the pill bar visible). Re-settle to a clean 0/1 end so
|
|
1084
|
+
// the crossfade always resolves to exactly one bar. (No-op at rest; a live
|
|
1085
|
+
// legit drag rotating is rare and settling is the right call there too.)
|
|
1086
|
+
// Plain `sync` (no settle) stays on vv `scroll` — that fires constantly while
|
|
1087
|
+
// the keyboard animates and must not interrupt an open sheet.
|
|
1088
|
+
const syncAndSettle = () => {
|
|
1089
|
+
sync();
|
|
1090
|
+
settleDragRef.current?.();
|
|
1091
|
+
};
|
|
1092
|
+
syncAndSettle();
|
|
1093
|
+
const vv = window.visualViewport;
|
|
1094
|
+
window.addEventListener("resize", syncAndSettle);
|
|
1095
|
+
vv?.addEventListener("resize", syncAndSettle);
|
|
1096
|
+
vv?.addEventListener("scroll", sync, { passive: true });
|
|
1097
|
+
return () => {
|
|
1098
|
+
if (rafId !== 0)
|
|
1099
|
+
cancelAnimationFrame(rafId);
|
|
1100
|
+
window.removeEventListener("resize", syncAndSettle);
|
|
1101
|
+
vv?.removeEventListener("resize", syncAndSettle);
|
|
1102
|
+
vv?.removeEventListener("scroll", sync);
|
|
1103
|
+
};
|
|
1104
|
+
}, [readViewport]);
|
|
1105
|
+
const viewportH = viewport.height;
|
|
1106
|
+
const keyboardInset = viewport.keyboardInset;
|
|
1107
|
+
// iOS keyboard avoidance. With Capacitor `resize:"body"`, the software
|
|
1108
|
+
// keyboard shrinks the BODY but NOT the visual viewport's relationship to a
|
|
1109
|
+
// `position: fixed` element, and the visualViewport delta above frequently
|
|
1110
|
+
// reads 0 — so `keyboardInset` alone can't lift the fixed composer and it
|
|
1111
|
+
// ends up hidden BEHIND the keyboard (reported on device + simulator).
|
|
1112
|
+
// Subscribe to the Capacitor Keyboard plugin for the authoritative keyboard
|
|
1113
|
+
// height and lift by whichever inset is larger.
|
|
1114
|
+
const [nativeKeyboardHeight, setNativeKeyboardHeight] = React.useState(0);
|
|
1115
|
+
React.useEffect(() => {
|
|
1116
|
+
if (typeof window === "undefined")
|
|
1117
|
+
return undefined;
|
|
1118
|
+
let cancelled = false;
|
|
1119
|
+
const handles = [];
|
|
1120
|
+
void import("@capacitor/keyboard")
|
|
1121
|
+
.then(({ Keyboard }) => {
|
|
1122
|
+
if (cancelled)
|
|
1123
|
+
return;
|
|
1124
|
+
void Keyboard.addListener("keyboardWillShow", (info) => {
|
|
1125
|
+
setNativeKeyboardHeight(info?.keyboardHeight ?? 0);
|
|
1126
|
+
})
|
|
1127
|
+
.then((handle) => {
|
|
1128
|
+
if (cancelled)
|
|
1129
|
+
handle.remove();
|
|
1130
|
+
else
|
|
1131
|
+
handles.push(handle);
|
|
1132
|
+
})
|
|
1133
|
+
.catch(() => { });
|
|
1134
|
+
void Keyboard.addListener("keyboardWillHide", () => {
|
|
1135
|
+
setNativeKeyboardHeight(0);
|
|
1136
|
+
})
|
|
1137
|
+
.then((handle) => {
|
|
1138
|
+
if (cancelled)
|
|
1139
|
+
handle.remove();
|
|
1140
|
+
else
|
|
1141
|
+
handles.push(handle);
|
|
1142
|
+
})
|
|
1143
|
+
.catch(() => { });
|
|
1144
|
+
})
|
|
1145
|
+
.catch(() => {
|
|
1146
|
+
// Web / non-native: no Keyboard plugin; visualViewport handles it.
|
|
1147
|
+
});
|
|
1148
|
+
return () => {
|
|
1149
|
+
cancelled = true;
|
|
1150
|
+
for (const handle of handles)
|
|
1151
|
+
handle.remove();
|
|
1152
|
+
};
|
|
1153
|
+
}, []);
|
|
1154
|
+
// Track the layout-viewport height with the keyboard DOWN. On Android the
|
|
1155
|
+
// WebView window shrinks (adjustResize) when the keyboard opens, so the fixed
|
|
1156
|
+
// overlay's `bottom: 0` already rises with it; on iOS (`resize: "body"`) the
|
|
1157
|
+
// layout height is unchanged and the fixed composer stays behind the keyboard.
|
|
1158
|
+
const baseInnerHeightRef = React.useRef(viewport.innerHeight);
|
|
1159
|
+
React.useEffect(() => {
|
|
1160
|
+
if (nativeKeyboardHeight === 0) {
|
|
1161
|
+
baseInnerHeightRef.current = viewport.innerHeight;
|
|
1162
|
+
}
|
|
1163
|
+
}, [nativeKeyboardHeight, viewport.innerHeight]);
|
|
1164
|
+
// Lift the composer above the keyboard by ONLY the part the layout didn't
|
|
1165
|
+
// already absorb. On Android the window shrank by ~the keyboard height
|
|
1166
|
+
// (layoutShrink ≈ keyboardHeight), so the extra native lift is ~0 — without
|
|
1167
|
+
// this the chat double-counts and jumps a whole keyboard height too high. On
|
|
1168
|
+
// iOS the layout doesn't shrink (layoutShrink = 0), so the full native height
|
|
1169
|
+
// lifts the fixed composer above the keyboard. Web (no native plugin) keeps
|
|
1170
|
+
// the visualViewport-derived inset.
|
|
1171
|
+
const layoutShrink = Math.max(0, baseInnerHeightRef.current - viewport.innerHeight);
|
|
1172
|
+
const nativeLift = Math.max(0, nativeKeyboardHeight - layoutShrink);
|
|
1173
|
+
const effectiveKeyboardInset = Math.max(keyboardInset, nativeLift);
|
|
1174
|
+
// FULL-SCREEN derived gate: maximized only takes effect AT the full detent, so
|
|
1175
|
+
// a stale flag can never leak into half/collapsed/pill. Drives the edge-to-edge
|
|
1176
|
+
// panel styles + a zero top margin.
|
|
1177
|
+
const fullBleed = maximized && expanded && sheetOpen && !pilled;
|
|
1178
|
+
// The chat panel may never exceed the visible height minus its own
|
|
1179
|
+
// safe-area/nav padding and a top margin — so it can't spill above the screen.
|
|
1180
|
+
// The thread (flex-shrink) gives way to this cap, scrolling instead of pushing
|
|
1181
|
+
// the panel off-screen. Maximized drops the top margin so it reaches the top.
|
|
1182
|
+
const topMargin = fullBleed ? 0 : SHEET_TOP_MARGIN;
|
|
1183
|
+
// Full-bleed drops the overlay's own bottom padding (its `paddingBottom` is 0
|
|
1184
|
+
// edge-to-edge — the composer carries the home-gesture clearance itself), so
|
|
1185
|
+
// the panel must fill the ENTIRE viewport height. Subtracting the (bottom-anchored)
|
|
1186
|
+
// `bottomPad` here would shrink the panel by the gesture inset and float it a
|
|
1187
|
+
// gesture-inset BELOW the top — the gap that left a hard-cut glass seam under
|
|
1188
|
+
// the status bar and pushed the safe-area-padded header buttons down.
|
|
1189
|
+
const panelMaxH = Math.max(200, viewportH - (fullBleed ? 0 : bottomPad) - topMargin);
|
|
1190
|
+
// History-height detents: COLLAPSED (0) → HALF → FULL — the thread's ideal
|
|
1191
|
+
// flex-basis; flex-shrink clamps the real height to fit. FULL == panelMaxH so
|
|
1192
|
+
// the detent target matches the visible height (no dead slack at the top of a
|
|
1193
|
+
// pull-down) while the sheet rises all the way to the top.
|
|
1194
|
+
const openH = panelMaxH;
|
|
1195
|
+
const halfH = Math.round(viewportH * SHEET_HALF_VH);
|
|
1196
|
+
const detentH = !sheetOpen ? 0 : expanded ? openH : halfH;
|
|
1197
|
+
// A free-drag rest height wins over the detent until a detent is re-taken.
|
|
1198
|
+
const baseH = freeH != null ? Math.min(freeH, panelMaxH) : detentH;
|
|
1199
|
+
// The single explicit state of the chat surface — the named machine the rest
|
|
1200
|
+
// of the component (header gate, data attribute, transitions) reads from. It
|
|
1201
|
+
// is DERIVED from the resting height so it always agrees with what's on
|
|
1202
|
+
// screen; the live drag stays on the `threadHeight` motion value (no
|
|
1203
|
+
// re-render per frame). The five states:
|
|
1204
|
+
// CLOSED — pill only (sheet pilled away)
|
|
1205
|
+
// INPUT — composer bar, no thread (the resting closed state)
|
|
1206
|
+
// OPEN_UNDER_HALF — opened but below the half detent (a deliberate slow
|
|
1207
|
+
// pull rested here); header buttons stay hidden
|
|
1208
|
+
// OPEN_HALF_OR_OVER — at the half detent or taller (header buttons show)
|
|
1209
|
+
// MAXIMIZED — full-bleed edge-to-edge
|
|
1210
|
+
// Transitions: pill tap / flick-up → INPUT; focus·type·flick·send → an OPEN_*
|
|
1211
|
+
// state; pull-down → INPUT → CLOSED; maximize toggle ↔ MAXIMIZED; Home/Settings
|
|
1212
|
+
// animate out of MAXIMIZED then collapse (see navigateAndClose).
|
|
1213
|
+
// MAXIMIZED is keyed off the SAME `fullBleed` predicate the styles use, so the
|
|
1214
|
+
// enum and the full-bleed layout can never disagree (no "maximized at half"
|
|
1215
|
+
// ghost state).
|
|
1216
|
+
const chatState = pilled
|
|
1217
|
+
? "CLOSED"
|
|
1218
|
+
: !sheetOpen
|
|
1219
|
+
? "INPUT"
|
|
1220
|
+
: fullBleed
|
|
1221
|
+
? "MAXIMIZED"
|
|
1222
|
+
: baseH >= halfH - 1
|
|
1223
|
+
? "OPEN_HALF_OR_OVER"
|
|
1224
|
+
: "OPEN_UNDER_HALF";
|
|
1225
|
+
// Header buttons (maximize/clear/home/settings) are gated on the LIVE rendered
|
|
1226
|
+
// height, NOT the settled enum — otherwise dragging the panel below half keeps
|
|
1227
|
+
// the header mounted on a too-short panel (the "buttons between input and half"
|
|
1228
|
+
// bug). They show only when the panel actually renders at/over half (or is
|
|
1229
|
+
// full-bleed), tracking the finger frame-by-frame; the prev===next guard keeps
|
|
1230
|
+
// re-renders to the two threshold crossings.
|
|
1231
|
+
const evalHeaderVisible = React.useCallback((h) => !pilled && (fullBleed || h >= halfH - 1), [pilled, fullBleed, halfH]);
|
|
1232
|
+
const [headerVisible, setHeaderVisible] = React.useState(false);
|
|
1233
|
+
useMotionValueEvent(threadHeight, "change", (h) => {
|
|
1234
|
+
const next = evalHeaderVisible(h);
|
|
1235
|
+
setHeaderVisible((prev) => (prev === next ? prev : next));
|
|
1236
|
+
});
|
|
1237
|
+
// Re-evaluate on settled-state changes that don't tick the height (programmatic
|
|
1238
|
+
// pill/maximize/open with the spring already at rest).
|
|
1239
|
+
// biome-ignore lint/correctness/useExhaustiveDependencies: threadHeight is a stable motion ref
|
|
1240
|
+
React.useEffect(() => {
|
|
1241
|
+
setHeaderVisible(evalHeaderVisible(threadHeight.get()));
|
|
1242
|
+
}, [evalHeaderVisible]);
|
|
1243
|
+
// Map a raw drag height: rubber-band past FULL, hard-clamp the bottom to 0.
|
|
1244
|
+
const clampHeight = React.useCallback((raw) => raw > openH ? openH + rubberBand(raw - openH) : Math.max(0, raw), [openH]);
|
|
1245
|
+
// Backdrop dimming + the suggestion-strip fade follow the live height; the
|
|
1246
|
+
// thread's flex-basis is the live height as a px string.
|
|
1247
|
+
const revealed = useTransform(threadHeight, (h) => Math.min(1, Math.max(0, h / Math.max(1, openH))));
|
|
1248
|
+
// At rest (threadHeight 0 = INPUT/CLOSED) the full-viewport dimming scrim sits
|
|
1249
|
+
// at opacity 0. Drive `visibility` off the SAME motion value so it drops out
|
|
1250
|
+
// of compositing/paint at rest (no reflow, compositor-only, zero re-render) and
|
|
1251
|
+
// flips back the instant the thread opens.
|
|
1252
|
+
const scrimVisibility = useTransform(threadHeight, (h) => h > 0 ? "visible" : "hidden");
|
|
1253
|
+
const suggestionsOpacity = useTransform(threadHeight, (h) => Math.max(0, 1 - h / Math.max(1, openH * 0.5)));
|
|
1254
|
+
const threadFlexBasis = useTransform(threadHeight, (h) => `${h}px`);
|
|
1255
|
+
// Corner radius tracks the live height so it can't flash as a tall full-pill
|
|
1256
|
+
// mid-pull: a perfect pill at rest (collapsed input, matching the round
|
|
1257
|
+
// buttons) relaxing to a calm 24px the instant the thread starts opening.
|
|
1258
|
+
const panelRadius = useTransform(threadHeight, [0, 12], [9999, 24], {
|
|
1259
|
+
clamp: true,
|
|
1260
|
+
});
|
|
1261
|
+
// --- Liquid-glass pill → input morph (driven by openProgress) ---------------
|
|
1262
|
+
// The panel is ONE persistent element; the pill capsule and the full
|
|
1263
|
+
// input crossfade by opacity (compositor-cheap) while the whole panel scales
|
|
1264
|
+
// up from a capsule. transform + opacity only.
|
|
1265
|
+
const panelScale = useTransform(openProgress, [0, 1], [0.9, 1]);
|
|
1266
|
+
// Glass surface + its content crossfade IN as the input forms (one wrapper, so
|
|
1267
|
+
// sheen/glow/thread/composer resolve together with the glass).
|
|
1268
|
+
const glassOpacity = useTransform(openProgress, [0, 1], [0, 1]);
|
|
1269
|
+
// The pill capsule fades OUT over the first half of the open so it has cleared
|
|
1270
|
+
// before the input controls resolve (no double-image mid-morph).
|
|
1271
|
+
const pillOpacity = useTransform(openProgress, [0, 0.55], [1, 0], {
|
|
1272
|
+
clamp: true,
|
|
1273
|
+
});
|
|
1274
|
+
// The drag-handle (SheetGrabber) bar is IDENTICAL to the pill bar, so they must
|
|
1275
|
+
// never both be on screen. The pill fades OUT over [0, 0.55]; the grabber fades
|
|
1276
|
+
// IN only over [0.55, 0.95] — a strict crossfade with no overlap. (Before, the
|
|
1277
|
+
// grabber mounted at full opacity the instant `pilled` flipped false, while the
|
|
1278
|
+
// pill was still fading out → two bars = the "two pills" bug.)
|
|
1279
|
+
const grabberOpacity = useTransform(openProgress, [0.55, 0.95], [0, 1], {
|
|
1280
|
+
clamp: true,
|
|
1281
|
+
});
|
|
1282
|
+
// Header reveal tracks the LIVE height: as the panel approaches the half
|
|
1283
|
+
// detent the top buttons FADE in and their space LERPS open; pulling back
|
|
1284
|
+
// below half fades them out and collapses the space — no pop. (Maximized sits
|
|
1285
|
+
// at openH ≫ half, so it's fully revealed.) overflow-hidden on the header clips
|
|
1286
|
+
// the buttons while the space is still opening.
|
|
1287
|
+
const headerOpacity = useTransform(threadHeight, [halfH - 64, halfH], [0, 1], {
|
|
1288
|
+
clamp: true,
|
|
1289
|
+
});
|
|
1290
|
+
const headerMaxH = useTransform(threadHeight, [halfH - 64, halfH], [0, 100], {
|
|
1291
|
+
clamp: true,
|
|
1292
|
+
});
|
|
1293
|
+
// The header's top padding LERPS with the same live height. A flex item's
|
|
1294
|
+
// `min-height:auto` lets its padding survive `max-height:0`, so a static
|
|
1295
|
+
// `pt-2.5` would leak ~10px above the composer in the collapsed/input state
|
|
1296
|
+
// (extra, irregular top margin). Driving padding-top 0 → 10px alongside the
|
|
1297
|
+
// reveal keeps the collapsed panel exactly the input-bar height, then opens
|
|
1298
|
+
// the breathing room as the header fades in.
|
|
1299
|
+
const headerPadTop = useTransform(threadHeight, [halfH - 64, halfH], [0, 10], {
|
|
1300
|
+
clamp: true,
|
|
1301
|
+
});
|
|
1302
|
+
// Grabber clearance: when the chat is OPEN but BELOW the half detent the header
|
|
1303
|
+
// is hidden, so the thread viewport would start at the panel's very top —
|
|
1304
|
+
// tucking the topmost line under the floating drag handle (a partial bubble
|
|
1305
|
+
// pinned beneath the grabber at a small free-rest height). Inset the thread
|
|
1306
|
+
// down by the grabber's height in that window only: 0 at the collapsed peek
|
|
1307
|
+
// (threadHeight ~0, so the closed input bar stays exactly its own height),
|
|
1308
|
+
// ramping to the inset once a thread is actually open, then back to 0 as the
|
|
1309
|
+
// header reveals at half+ (it provides the clearance itself).
|
|
1310
|
+
const threadGrabberClearance = useTransform(threadHeight, [0, 40, halfH - 64, halfH], [0, 20, 20, 0], { clamp: true });
|
|
1311
|
+
// Sub-threshold release: spring back to the current detent (no state change).
|
|
1312
|
+
// Also settles the pill→input morph to its resting end (0 while pilled, 1 once
|
|
1313
|
+
// open) so a half-finished pill drag springs cleanly back to the capsule.
|
|
1314
|
+
const settleDrag = React.useCallback(() => {
|
|
1315
|
+
draggingRef.current = false;
|
|
1316
|
+
const open = pilled ? 0 : 1;
|
|
1317
|
+
if (reduce) {
|
|
1318
|
+
stopThreadAnimation();
|
|
1319
|
+
stopOpenProgressAnimation();
|
|
1320
|
+
threadHeight.set(baseH);
|
|
1321
|
+
openProgress.set(open);
|
|
1322
|
+
}
|
|
1323
|
+
else {
|
|
1324
|
+
animateThreadHeight(baseH);
|
|
1325
|
+
animateOpenProgress(open);
|
|
1326
|
+
}
|
|
1327
|
+
}, [
|
|
1328
|
+
threadHeight,
|
|
1329
|
+
openProgress,
|
|
1330
|
+
baseH,
|
|
1331
|
+
pilled,
|
|
1332
|
+
reduce,
|
|
1333
|
+
stopThreadAnimation,
|
|
1334
|
+
stopOpenProgressAnimation,
|
|
1335
|
+
animateThreadHeight,
|
|
1336
|
+
animateOpenProgress,
|
|
1337
|
+
]);
|
|
1338
|
+
// Keep the ref the (earlier-declared) viewport-resize effect calls pointing at
|
|
1339
|
+
// the latest settleDrag, so a rotation re-settles with current pilled/baseH.
|
|
1340
|
+
settleDragRef.current = settleDrag;
|
|
1341
|
+
// Drive openProgress from the pilled flag for NON-drag transitions (tap the
|
|
1342
|
+
// pill, programmatic open/close): a live finger drag owns openProgress itself
|
|
1343
|
+
// (draggingRef gates this so it never fights the gesture).
|
|
1344
|
+
React.useEffect(() => {
|
|
1345
|
+
if (draggingRef.current)
|
|
1346
|
+
return;
|
|
1347
|
+
const open = pilled ? 0 : 1;
|
|
1348
|
+
if (reduce) {
|
|
1349
|
+
stopOpenProgressAnimation();
|
|
1350
|
+
openProgress.set(open);
|
|
1351
|
+
return;
|
|
1352
|
+
}
|
|
1353
|
+
animateOpenProgress(open);
|
|
1354
|
+
return stopOpenProgressAnimation;
|
|
1355
|
+
}, [
|
|
1356
|
+
pilled,
|
|
1357
|
+
reduce,
|
|
1358
|
+
openProgress,
|
|
1359
|
+
animateOpenProgress,
|
|
1360
|
+
stopOpenProgressAnimation,
|
|
1361
|
+
]);
|
|
1362
|
+
const closeSheet = React.useCallback(() => {
|
|
1363
|
+
draggingRef.current = false;
|
|
1364
|
+
stopThreadAnimation();
|
|
1365
|
+
stopOpenProgressAnimation();
|
|
1366
|
+
setFreeH(null);
|
|
1367
|
+
setMaximized(false);
|
|
1368
|
+
setMode("input");
|
|
1369
|
+
}, [stopThreadAnimation, stopOpenProgressAnimation]);
|
|
1370
|
+
// Leaving the chat for Settings/Home: animate OUT of maximize and collapse the
|
|
1371
|
+
// sheet (closeSheet un-maximizes + springs the thread height down) BEFORE
|
|
1372
|
+
// swapping the page underneath, so it reads as the chat closing into the new
|
|
1373
|
+
// view rather than a jump-cut from full-screen. The page swap waits a beat for
|
|
1374
|
+
// the collapse spring to start (a touch longer when leaving MAXIMIZED, since
|
|
1375
|
+
// there's more to unwind); reduced motion navigates immediately.
|
|
1376
|
+
const navigateAndClose = React.useCallback((go) => {
|
|
1377
|
+
const wasMaximized = maximized;
|
|
1378
|
+
closeSheet();
|
|
1379
|
+
if (delayedNavigationTimerRef.current !== null) {
|
|
1380
|
+
window.clearTimeout(delayedNavigationTimerRef.current);
|
|
1381
|
+
}
|
|
1382
|
+
delayedNavigationTimerRef.current = window.setTimeout(() => {
|
|
1383
|
+
delayedNavigationTimerRef.current = null;
|
|
1384
|
+
go();
|
|
1385
|
+
}, reduce ? 0 : wasMaximized ? 260 : 190);
|
|
1386
|
+
}, [closeSheet, maximized, reduce]);
|
|
1387
|
+
// Maximize toggle. Maximizing from ANY open detent (half or a free rest) first
|
|
1388
|
+
// rises to the FULL detent, then drops the inset — so the height spring
|
|
1389
|
+
// animates up and the panel goes edge-to-edge in one gesture (previously
|
|
1390
|
+
// full-bleed required `expanded`, so tapping maximize at the half detent did
|
|
1391
|
+
// nothing). Un-maximizing drops back to the inset FULL detent.
|
|
1392
|
+
const toggleMaximize = React.useCallback(() => {
|
|
1393
|
+
if (maximized) {
|
|
1394
|
+
stopThreadAnimation();
|
|
1395
|
+
setMaximized(false);
|
|
1396
|
+
return;
|
|
1397
|
+
}
|
|
1398
|
+
// Snap the morph fully open BEFORE flipping to full-bleed so no in-flight
|
|
1399
|
+
// pill-open spring can leak a sub-1 scale into the maximized frame (top gap).
|
|
1400
|
+
draggingRef.current = false;
|
|
1401
|
+
stopThreadAnimation();
|
|
1402
|
+
stopOpenProgressAnimation();
|
|
1403
|
+
openProgress.set(1);
|
|
1404
|
+
setFreeH(null);
|
|
1405
|
+
setMode("full");
|
|
1406
|
+
setMaximized(true);
|
|
1407
|
+
}, [maximized, openProgress, stopThreadAnimation, stopOpenProgressAnimation]);
|
|
1408
|
+
// The single detent→detent animator: whenever the settled detent (or viewport)
|
|
1409
|
+
// changes and we're not mid finger-drag, spring the history height to it. The
|
|
1410
|
+
// gesture / open paths just flip sheetOpen/expanded and this reacts — no
|
|
1411
|
+
// per-frame React state, so the live drag stays buttery.
|
|
1412
|
+
React.useEffect(() => {
|
|
1413
|
+
if (draggingRef.current)
|
|
1414
|
+
return;
|
|
1415
|
+
if (reduce) {
|
|
1416
|
+
stopThreadAnimation();
|
|
1417
|
+
threadHeight.set(baseH);
|
|
1418
|
+
return;
|
|
1419
|
+
}
|
|
1420
|
+
animateThreadHeight(baseH);
|
|
1421
|
+
return stopThreadAnimation;
|
|
1422
|
+
}, [baseH, reduce, threadHeight, animateThreadHeight, stopThreadAnimation]);
|
|
1423
|
+
// Snap to one of the three iOS-style detents and settle the live drag. A
|
|
1424
|
+
// detent change fires a light haptic so the snap feels physical on device.
|
|
1425
|
+
// "collapsed" hides the history entirely (just the input); "half" is the
|
|
1426
|
+
// comfortable reading height; "full" the near-fullscreen reading mode.
|
|
1427
|
+
const goToDetent = React.useCallback((to) => {
|
|
1428
|
+
// Flip the settled detent; the [baseH] effect springs the height to it.
|
|
1429
|
+
// A detent always clears any free-drag rest height and (since only FULL
|
|
1430
|
+
// can be maximized) drops full-bleed when stepping anywhere else.
|
|
1431
|
+
draggingRef.current = false;
|
|
1432
|
+
stopThreadAnimation();
|
|
1433
|
+
setFreeH(null);
|
|
1434
|
+
if (to !== "full")
|
|
1435
|
+
setMaximized(false);
|
|
1436
|
+
// "collapsed" is the input peek (sheet closed); half/full open the thread.
|
|
1437
|
+
setMode(to === "collapsed" ? "input" : to);
|
|
1438
|
+
// Stepping all the way down closes the keyboard (the chat is dismissed).
|
|
1439
|
+
if (to === "collapsed")
|
|
1440
|
+
inputRef.current?.blur();
|
|
1441
|
+
detentHaptic();
|
|
1442
|
+
}, [stopThreadAnimation]);
|
|
1443
|
+
// Collapsing always drops input focus, so the mobile keyboard goes away the
|
|
1444
|
+
// moment the chat is dismissed (pull-down, Escape, or click-out) — the chat is
|
|
1445
|
+
// no longer "focused". Blurring (rather than the old refocus dance) also means
|
|
1446
|
+
// there's no focus→expand bounce to guard against, so the model stays simple.
|
|
1447
|
+
const collapse = React.useCallback(() => {
|
|
1448
|
+
// If focus is sitting inside the thread log, pull it out before the log
|
|
1449
|
+
// becomes aria-hidden / tabIndex=-1 — never park focus on a hidden element.
|
|
1450
|
+
if (typeof document !== "undefined" &&
|
|
1451
|
+
threadRef.current &&
|
|
1452
|
+
document.activeElement instanceof HTMLElement &&
|
|
1453
|
+
threadRef.current.contains(document.activeElement)) {
|
|
1454
|
+
document.activeElement.blur();
|
|
1455
|
+
}
|
|
1456
|
+
closeSheet();
|
|
1457
|
+
inputRef.current?.blur();
|
|
1458
|
+
}, [closeSheet]);
|
|
1459
|
+
// Dismiss the keyboard and return to the resting state from BEFORE the composer
|
|
1460
|
+
// was focused — the single restore path shared by every "drop the keyboard"
|
|
1461
|
+
// gesture (tap the grabber, tap the scrim, tap outside the panel). A sheet that
|
|
1462
|
+
// was COLLAPSED before focus re-collapses (back to the input bar); one that was
|
|
1463
|
+
// ALREADY OPEN stays open and springs back to its detent size as the keyboard
|
|
1464
|
+
// retracts (the viewport grows → the [baseH] effect re-animates the height).
|
|
1465
|
+
// Never a surprise full close.
|
|
1466
|
+
const dismissKeyboardToPriorState = React.useCallback(() => {
|
|
1467
|
+
inputRef.current?.blur();
|
|
1468
|
+
if (preFocusCollapsedRef.current)
|
|
1469
|
+
collapse();
|
|
1470
|
+
}, [collapse]);
|
|
1471
|
+
// The composer overlay floats over every view and survives tab changes, so
|
|
1472
|
+
// navigating away from a focused composer (chat → Settings / Home / …) would
|
|
1473
|
+
// otherwise leave the textarea holding DOM focus on the new view (its
|
|
1474
|
+
// collapsed/resting look is gated on sheet state, not on document focus). On
|
|
1475
|
+
// iOS that strands the keyboard input-accessory bar (the ‹ › chevrons +
|
|
1476
|
+
// "Done") at the bottom of the screen with no keyboard while the composer
|
|
1477
|
+
// reads as inactive. Drop composer focus whenever the active view changes to a
|
|
1478
|
+
// non-chat tab; an intentional tap to focus the composer on that view (no tab
|
|
1479
|
+
// change) is left untouched. Keyboard.hide() guarantees iOS dismisses the
|
|
1480
|
+
// accessory bar, not just the soft keyboard.
|
|
1481
|
+
React.useEffect(() => {
|
|
1482
|
+
if (currentTab === "chat")
|
|
1483
|
+
return;
|
|
1484
|
+
const input = inputRef.current;
|
|
1485
|
+
if (typeof document === "undefined" ||
|
|
1486
|
+
!input ||
|
|
1487
|
+
document.activeElement !== input) {
|
|
1488
|
+
return;
|
|
1489
|
+
}
|
|
1490
|
+
input.blur();
|
|
1491
|
+
void import("@capacitor/keyboard")
|
|
1492
|
+
.then(({ Keyboard }) => Keyboard.hide())
|
|
1493
|
+
.catch(() => {
|
|
1494
|
+
// Web/desktop or no native bridge — blur() above already dropped focus.
|
|
1495
|
+
});
|
|
1496
|
+
}, [currentTab]);
|
|
1497
|
+
// Focusing or typing in the composer opens the chat (keyboard + history) when
|
|
1498
|
+
// there's a thread to show. Opens to HALF — the conversation is visible above
|
|
1499
|
+
// the keyboard without a full-screen takeover; the maximize button is for that.
|
|
1500
|
+
// Remember whether we opened from collapsed so dismissing the keyboard (tap the
|
|
1501
|
+
// handle) can return to that prior resting state. Clears any free-rest so the
|
|
1502
|
+
// height matches the detent (no stale freeH pinning it below half).
|
|
1503
|
+
const expand = React.useCallback(() => {
|
|
1504
|
+
if (!hasThread)
|
|
1505
|
+
return;
|
|
1506
|
+
preFocusCollapsedRef.current = !sheetOpen;
|
|
1507
|
+
setFreeH(null);
|
|
1508
|
+
// Open to at least HALF; if already at half/full, keep the taller mode.
|
|
1509
|
+
setMode((m) => (m === "half" || m === "full" ? m : "half"));
|
|
1510
|
+
}, [hasThread, sheetOpen]);
|
|
1511
|
+
// Interactive tour control: the tutorial drives the chat into a clean, known
|
|
1512
|
+
// state at the start of each frame (so the spotlight always lands on the right
|
|
1513
|
+
// control) and pre-fills the composer for the guided "ask to navigate" demo.
|
|
1514
|
+
// Decoupled via a window event so the tour never reaches into these internals.
|
|
1515
|
+
React.useEffect(() => {
|
|
1516
|
+
if (typeof window === "undefined")
|
|
1517
|
+
return undefined;
|
|
1518
|
+
const onControl = (event) => {
|
|
1519
|
+
const detail = event.detail;
|
|
1520
|
+
if (!detail)
|
|
1521
|
+
return;
|
|
1522
|
+
switch (detail.action) {
|
|
1523
|
+
case "pill":
|
|
1524
|
+
setMode("pill");
|
|
1525
|
+
inputRef.current?.blur();
|
|
1526
|
+
break;
|
|
1527
|
+
case "rest":
|
|
1528
|
+
// goToDetent("collapsed") → input mode, which un-pills.
|
|
1529
|
+
goToDetent("collapsed");
|
|
1530
|
+
break;
|
|
1531
|
+
case "expand":
|
|
1532
|
+
goToDetent("full");
|
|
1533
|
+
break;
|
|
1534
|
+
case "prefill":
|
|
1535
|
+
setMode((m) => (m === "pill" ? "input" : m));
|
|
1536
|
+
setDraft(detail.text ?? "");
|
|
1537
|
+
requestAnimationFrame(() => inputRef.current?.focus());
|
|
1538
|
+
break;
|
|
1539
|
+
case "reset":
|
|
1540
|
+
// Tour ended (cancel / complete): restore a normal interactive chat.
|
|
1541
|
+
// A frame may have collapsed it to the pill, where the composer is
|
|
1542
|
+
// `inert` — clear inert imperatively (React clears it only on the next
|
|
1543
|
+
// render, too late for the stranded input), drop the tour's prefilled
|
|
1544
|
+
// draft, and goToDetent("collapsed") un-pills back to the input bar.
|
|
1545
|
+
contentRef.current?.removeAttribute("inert");
|
|
1546
|
+
setDraft("");
|
|
1547
|
+
goToDetent("collapsed");
|
|
1548
|
+
break;
|
|
1549
|
+
}
|
|
1550
|
+
};
|
|
1551
|
+
window.addEventListener(TUTORIAL_CHAT_CONTROL_EVENT, onControl);
|
|
1552
|
+
return () => window.removeEventListener(TUTORIAL_CHAT_CONTROL_EVENT, onControl);
|
|
1553
|
+
}, [goToDetent]);
|
|
1554
|
+
React.useEffect(() => {
|
|
1555
|
+
if (typeof window === "undefined")
|
|
1556
|
+
return undefined;
|
|
1557
|
+
const onPrefill = (event) => {
|
|
1558
|
+
const detail = event.detail;
|
|
1559
|
+
const text = typeof detail?.text === "string" ? detail.text : "";
|
|
1560
|
+
if (!text.trim())
|
|
1561
|
+
return;
|
|
1562
|
+
setMode((m) => (m === "pill" ? "input" : m));
|
|
1563
|
+
setDraft(text);
|
|
1564
|
+
const focusComposer = () => {
|
|
1565
|
+
prefillFocusFrameRef.current = null;
|
|
1566
|
+
prefillFocusTimerRef.current = null;
|
|
1567
|
+
const input = inputRef.current;
|
|
1568
|
+
input?.focus();
|
|
1569
|
+
if (detail?.select) {
|
|
1570
|
+
input?.setSelectionRange(0, text.length);
|
|
1571
|
+
}
|
|
1572
|
+
};
|
|
1573
|
+
clearPrefillFocusSchedule();
|
|
1574
|
+
if (typeof window.requestAnimationFrame === "function") {
|
|
1575
|
+
prefillFocusFrameRef.current =
|
|
1576
|
+
window.requestAnimationFrame(focusComposer);
|
|
1577
|
+
}
|
|
1578
|
+
else {
|
|
1579
|
+
prefillFocusTimerRef.current = window.setTimeout(focusComposer, 0);
|
|
1580
|
+
}
|
|
1581
|
+
};
|
|
1582
|
+
window.addEventListener(CHAT_PREFILL_EVENT, onPrefill);
|
|
1583
|
+
return () => window.removeEventListener(CHAT_PREFILL_EVENT, onPrefill);
|
|
1584
|
+
}, [clearPrefillFocusSchedule]);
|
|
1585
|
+
// Push-to-talk dictation drops its final transcript into the composer draft
|
|
1586
|
+
// (no send): register the sink with the controller while this overlay is
|
|
1587
|
+
// mounted, appending to whatever the user has already typed.
|
|
1588
|
+
React.useEffect(() => {
|
|
1589
|
+
setDictationSink((text) => {
|
|
1590
|
+
setDraft((current) => (current ? `${current} ${text}` : text));
|
|
1591
|
+
inputRef.current?.focus();
|
|
1592
|
+
expand();
|
|
1593
|
+
});
|
|
1594
|
+
return () => setDictationSink(null);
|
|
1595
|
+
}, [setDictationSink, expand]);
|
|
1596
|
+
// A completed transcription SESSION drops its transcript into the composer as
|
|
1597
|
+
// an ATTACHMENT — it does NOT auto-send as a message. The user sends it (with
|
|
1598
|
+
// any typed text) when ready; the mic stays on the whole time, so transcribing
|
|
1599
|
+
// is an additive layer, not a mode that takes over the conversation. The
|
|
1600
|
+
// recording is also archived (Transcript record + audio + knowledge mirror)
|
|
1601
|
+
// for the Transcripts view, best-effort and silent.
|
|
1602
|
+
React.useEffect(() => {
|
|
1603
|
+
setTranscriptSessionSink((segments, startedAtMs, audioWav) => {
|
|
1604
|
+
if (segments.length === 0)
|
|
1605
|
+
return;
|
|
1606
|
+
const text = transcriptPlainText(segments);
|
|
1607
|
+
const stamp = new Date(startedAtMs)
|
|
1608
|
+
.toISOString()
|
|
1609
|
+
.slice(0, 16)
|
|
1610
|
+
.replace("T", " ");
|
|
1611
|
+
const attachmentName = `Transcript ${stamp}.md`;
|
|
1612
|
+
if (text) {
|
|
1613
|
+
const attachment = {
|
|
1614
|
+
data: textToBase64(text),
|
|
1615
|
+
mimeType: "text/markdown",
|
|
1616
|
+
name: attachmentName,
|
|
1617
|
+
};
|
|
1618
|
+
setPendingImages((prev) => [...prev, attachment].slice(0, MAX_CHAT_IMAGES));
|
|
1619
|
+
expand();
|
|
1620
|
+
inputRef.current?.focus();
|
|
1621
|
+
}
|
|
1622
|
+
void client
|
|
1623
|
+
.createTranscript({
|
|
1624
|
+
segments,
|
|
1625
|
+
createdAt: startedAtMs,
|
|
1626
|
+
...(audioWav
|
|
1627
|
+
? {
|
|
1628
|
+
audioBase64: wavBytesToBase64(audioWav),
|
|
1629
|
+
audioContentType: "audio/wav",
|
|
1630
|
+
}
|
|
1631
|
+
: {}),
|
|
1632
|
+
})
|
|
1633
|
+
.then(({ transcript }) => {
|
|
1634
|
+
// Link the pending attachment to the saved record so tapping it opens
|
|
1635
|
+
// the editable viewer and edits persist — both via the client-only
|
|
1636
|
+
// `transcriptId` field and a durable marker embedded in the markdown
|
|
1637
|
+
// (which survives the server round-trip in the attachment's text).
|
|
1638
|
+
if (!text)
|
|
1639
|
+
return;
|
|
1640
|
+
setPendingImages((prev) => prev.map((a) => a.name === attachmentName &&
|
|
1641
|
+
a.mimeType === "text/markdown" &&
|
|
1642
|
+
!a.transcriptId
|
|
1643
|
+
? {
|
|
1644
|
+
...a,
|
|
1645
|
+
transcriptId: transcript.id,
|
|
1646
|
+
data: textToBase64(withTranscriptMarker(transcript.id, text)),
|
|
1647
|
+
}
|
|
1648
|
+
: a));
|
|
1649
|
+
})
|
|
1650
|
+
.catch(() => {
|
|
1651
|
+
/* archival is best-effort; a failed save just skips the record */
|
|
1652
|
+
});
|
|
1653
|
+
});
|
|
1654
|
+
return () => setTranscriptSessionSink(null);
|
|
1655
|
+
}, [setTranscriptSessionSink, expand]);
|
|
1656
|
+
// Tell the controller whether a draft is pending so the hands-free always-on
|
|
1657
|
+
// loop pauses while the user is typing (or editing a PTT dictation) and
|
|
1658
|
+
// resumes the prior voice state once the draft clears on send.
|
|
1659
|
+
React.useEffect(() => {
|
|
1660
|
+
setComposerHasDraft(hasDraft);
|
|
1661
|
+
}, [hasDraft, setComposerHasDraft]);
|
|
1662
|
+
// ── Slash commands ─────────────────────────────────────────────────────────
|
|
1663
|
+
// Inline command autocomplete: the menu derives from the draft + the loaded
|
|
1664
|
+
// catalog; Escape dismisses it (without clearing the draft); typing reopens.
|
|
1665
|
+
const slashMenu = useSlashMenu(draft, slash);
|
|
1666
|
+
// Short-circuit the slash parse on the common (non-slash) keystroke path — a
|
|
1667
|
+
// draft that doesn't start with "/" is never a slash command, so skip the work.
|
|
1668
|
+
const isSlashDraft = draft.startsWith("/") && parseSlashDraft(draft).isSlash;
|
|
1669
|
+
const slashOpen = slashMenu.open && !slashDismissed;
|
|
1670
|
+
// Combobox a11y for the composer input — only when a slash catalog is wired
|
|
1671
|
+
// in. Spread so the input is a plain message box (no role) otherwise.
|
|
1672
|
+
const comboboxAria = slashProp
|
|
1673
|
+
? {
|
|
1674
|
+
role: "combobox",
|
|
1675
|
+
"aria-autocomplete": "list",
|
|
1676
|
+
"aria-expanded": slashOpen,
|
|
1677
|
+
"aria-controls": slashOpen ? "slash-command-listbox" : undefined,
|
|
1678
|
+
"aria-activedescendant": slashOpen && slashMenu.items[slashMenu.activeIndex]
|
|
1679
|
+
? `slash-option-${slashMenu.items[slashMenu.activeIndex].id}`
|
|
1680
|
+
: undefined,
|
|
1681
|
+
}
|
|
1682
|
+
: {};
|
|
1683
|
+
// biome-ignore lint/correctness/useExhaustiveDependencies: draft IS the trigger — any edit re-arms the menu after an Escape dismissal.
|
|
1684
|
+
React.useEffect(() => {
|
|
1685
|
+
setSlashDismissed(false);
|
|
1686
|
+
}, [draft]);
|
|
1687
|
+
// Run a resolved slash execution: agent commands flow through the normal send
|
|
1688
|
+
// pipeline; navigation/client commands run their app- or overlay-level effect
|
|
1689
|
+
// and clear the composer.
|
|
1690
|
+
const runExecution = React.useCallback((exec) => {
|
|
1691
|
+
if (exec.kind === "send") {
|
|
1692
|
+
submitText(exec.text);
|
|
1693
|
+
return;
|
|
1694
|
+
}
|
|
1695
|
+
runSlashExecution(exec, {
|
|
1696
|
+
navigateTab: slash.navigateTab,
|
|
1697
|
+
navigateSettings: slash.navigateSettings,
|
|
1698
|
+
navigateView: slash.navigateView,
|
|
1699
|
+
clearChat: slash.clearChat,
|
|
1700
|
+
newConversation: () => controller.clearConversation(),
|
|
1701
|
+
// The overlay owns full-screen via the `maximized` detent flag, not a
|
|
1702
|
+
// controller method, so toggle it directly here.
|
|
1703
|
+
toggleFullscreen: toggleMaximize,
|
|
1704
|
+
openCommandPalette: slash.openCommandPalette,
|
|
1705
|
+
showCommands: slash.openCommandPalette,
|
|
1706
|
+
toggleTranscription: toggleTranscriptionMode,
|
|
1707
|
+
send: (text) => submitText(text),
|
|
1708
|
+
});
|
|
1709
|
+
setDraft("");
|
|
1710
|
+
setSlashDismissed(true);
|
|
1711
|
+
inputRef.current?.focus();
|
|
1712
|
+
}, [slash, controller, submitText, toggleMaximize, toggleTranscriptionMode]);
|
|
1713
|
+
const submit = React.useCallback(() => {
|
|
1714
|
+
const shortcut = pendingImages.length === 0
|
|
1715
|
+
? resolveClientShortcutExecution(slash.commands, draft, slash.resolveSection, {
|
|
1716
|
+
allowNatural: slash.naturalShortcutsEnabled,
|
|
1717
|
+
resolveChoices: slash.resolveChoices,
|
|
1718
|
+
})
|
|
1719
|
+
: null;
|
|
1720
|
+
if (shortcut) {
|
|
1721
|
+
runExecution(shortcut);
|
|
1722
|
+
return;
|
|
1723
|
+
}
|
|
1724
|
+
submitText(draft, pendingImages);
|
|
1725
|
+
}, [draft, pendingImages, runExecution, slash, submitText]);
|
|
1726
|
+
const pickSlashItem = React.useCallback((index) => {
|
|
1727
|
+
const exec = slashMenu.resolve(index);
|
|
1728
|
+
if (exec)
|
|
1729
|
+
runExecution(exec);
|
|
1730
|
+
}, [slashMenu, runExecution]);
|
|
1731
|
+
// Tapping ANYWHERE outside the chat panel drops the keyboard: if the composer
|
|
1732
|
+
// holds focus and the pointer lands outside the panel, blur it. This is the
|
|
1733
|
+
// iOS-standard "tap the background to dismiss the keyboard" behaviour and works
|
|
1734
|
+
// whether the chat is open (over the scrim) or collapsed (over the live view).
|
|
1735
|
+
React.useEffect(() => {
|
|
1736
|
+
if (typeof document === "undefined")
|
|
1737
|
+
return undefined;
|
|
1738
|
+
const onPointerDown = (event) => {
|
|
1739
|
+
const input = inputRef.current;
|
|
1740
|
+
const focused = !!input && document.activeElement === input;
|
|
1741
|
+
// Record the keyboard state at PRESS time: the scrim's click handler reads
|
|
1742
|
+
// this (focus may be gone by the time the click fires) to tell a first
|
|
1743
|
+
// "dismiss the keyboard" tap from a second "close the chat" tap.
|
|
1744
|
+
composerFocusedAtPressRef.current = focused;
|
|
1745
|
+
// Keyboard already down → outside taps do nothing here (the chat only
|
|
1746
|
+
// closes via a pull-down, the scrim, or Escape).
|
|
1747
|
+
if (!focused)
|
|
1748
|
+
return;
|
|
1749
|
+
const target = event.target;
|
|
1750
|
+
if (target && panelRef.current?.contains(target))
|
|
1751
|
+
return;
|
|
1752
|
+
// Leave a tap on the GRABBER to onTap, which both drops the keyboard AND
|
|
1753
|
+
// returns to the pre-focus resting state — blurring here would preempt it.
|
|
1754
|
+
if (target instanceof Element &&
|
|
1755
|
+
target.closest('[data-testid="chat-sheet-grabber"]')) {
|
|
1756
|
+
return;
|
|
1757
|
+
}
|
|
1758
|
+
// Any other outside tap (incl. the dimming scrim) drops the keyboard and
|
|
1759
|
+
// returns to the pre-focus resting state — never a surprise full close.
|
|
1760
|
+
dismissKeyboardToPriorState();
|
|
1761
|
+
};
|
|
1762
|
+
document.addEventListener("pointerdown", onPointerDown, true);
|
|
1763
|
+
return () => document.removeEventListener("pointerdown", onPointerDown, true);
|
|
1764
|
+
}, [dismissKeyboardToPriorState]);
|
|
1765
|
+
// Escape collapses the chat from ANY open state, even a free-drag open with no
|
|
1766
|
+
// focused element (the element-level handlers on the textarea/thread only fire
|
|
1767
|
+
// when one of them holds focus). Registered only while open.
|
|
1768
|
+
React.useEffect(() => {
|
|
1769
|
+
if (typeof document === "undefined" || !sheetOpen)
|
|
1770
|
+
return undefined;
|
|
1771
|
+
const onKey = (e) => {
|
|
1772
|
+
if (e.key === "Escape") {
|
|
1773
|
+
e.preventDefault();
|
|
1774
|
+
collapse();
|
|
1775
|
+
}
|
|
1776
|
+
};
|
|
1777
|
+
document.addEventListener("keydown", onKey);
|
|
1778
|
+
return () => document.removeEventListener("keydown", onKey);
|
|
1779
|
+
}, [sheetOpen, collapse]);
|
|
1780
|
+
// Auto-grow the composer with multi-line input: snap to the content height
|
|
1781
|
+
// (capped by `max-h` in CSS, which then scrolls). Runs on every draft change
|
|
1782
|
+
// so it also springs back to one line after a send clears the draft.
|
|
1783
|
+
// biome-ignore lint/correctness/useExhaustiveDependencies: draft is the trigger; the body reads the textarea ref
|
|
1784
|
+
React.useLayoutEffect(() => {
|
|
1785
|
+
const el = inputRef.current;
|
|
1786
|
+
if (!el)
|
|
1787
|
+
return;
|
|
1788
|
+
el.style.height = "auto";
|
|
1789
|
+
el.style.height = `${el.scrollHeight}px`;
|
|
1790
|
+
}, [draft]);
|
|
1791
|
+
// Open the input back out of the collapsed pill (tap or keyboard-activate).
|
|
1792
|
+
// A tap routes through the gesture's `onDrag(0)` first, which sets
|
|
1793
|
+
// draggingRef=true AND openProgress=0 — so we MUST clear draggingRef here, or
|
|
1794
|
+
// the pilled→openProgress effect early-returns and the morph stays stuck at 0
|
|
1795
|
+
// (a visible-but-inert pill, no input: the "bad state"). We also spring
|
|
1796
|
+
// openProgress → 1 directly so the open never depends on that effect's timing.
|
|
1797
|
+
const openFromPill = React.useCallback(() => {
|
|
1798
|
+
draggingRef.current = false;
|
|
1799
|
+
// A pill tap OPENS the chat. With a conversation to show, go straight to the
|
|
1800
|
+
// HALF detent — a tap reveals the thread exactly like a flick-up, so a SINGLE
|
|
1801
|
+
// tap always opens the chat (never the old "tap lands on a bare input bar,
|
|
1802
|
+
// tap again to actually open" two-step). Mark it deliberately open so
|
|
1803
|
+
// dismissing the keyboard then KEEPS it at half (preFocusCollapsedRef gates
|
|
1804
|
+
// that). With no thread yet, there's nothing to open into — just form the
|
|
1805
|
+
// bare input bar, and treat a later keyboard dismiss as a re-collapse.
|
|
1806
|
+
if (hasThread) {
|
|
1807
|
+
goToDetent("half");
|
|
1808
|
+
preFocusCollapsedRef.current = false;
|
|
1809
|
+
}
|
|
1810
|
+
else {
|
|
1811
|
+
setMode("input");
|
|
1812
|
+
preFocusCollapsedRef.current = true;
|
|
1813
|
+
detentHaptic();
|
|
1814
|
+
}
|
|
1815
|
+
if (reduce) {
|
|
1816
|
+
stopOpenProgressAnimation();
|
|
1817
|
+
openProgress.set(1);
|
|
1818
|
+
}
|
|
1819
|
+
else
|
|
1820
|
+
animateOpenProgress(1);
|
|
1821
|
+
// Raise the keyboard on the SAME tap that opens the pill. While pilled, the
|
|
1822
|
+
// composer content is `inert`, and React only clears that on the next
|
|
1823
|
+
// render — too late for iOS WebKit, which honors focus() only synchronously
|
|
1824
|
+
// inside the originating user gesture AND only on a non-inert element. So
|
|
1825
|
+
// clear inert imperatively now and focus immediately; otherwise the first
|
|
1826
|
+
// tap opens a composer that silently refuses keyboard input until a second
|
|
1827
|
+
// tap (the reported "chat input doesn't accept text on iOS" bug). Suppress
|
|
1828
|
+
// the focus→expand: the target detent is already set above, and letting
|
|
1829
|
+
// expand run would clobber preFocusCollapsedRef with the (pre-render, still
|
|
1830
|
+
// pilled) sheet state and treat this deliberate open as a re-collapse.
|
|
1831
|
+
contentRef.current?.removeAttribute("inert");
|
|
1832
|
+
suppressExpandOnFocusRef.current = true;
|
|
1833
|
+
inputRef.current?.focus();
|
|
1834
|
+
}, [
|
|
1835
|
+
openProgress,
|
|
1836
|
+
reduce,
|
|
1837
|
+
hasThread,
|
|
1838
|
+
goToDetent,
|
|
1839
|
+
stopOpenProgressAnimation,
|
|
1840
|
+
animateOpenProgress,
|
|
1841
|
+
]);
|
|
1842
|
+
// --- Pull gesture --------------------------------------------------------
|
|
1843
|
+
// The grabber is the draggable handle. A live drag sets the threadHeight motion
|
|
1844
|
+
// value DIRECTLY (no React state → no re-render per frame, so it tracks the
|
|
1845
|
+
// finger 1:1); release fires onPullUp/onPullDown (distance OR velocity, via
|
|
1846
|
+
// usePullGesture) to snap to a detent.
|
|
1847
|
+
const onDragOffset = React.useCallback((offset) => {
|
|
1848
|
+
if (!draggingRef.current) {
|
|
1849
|
+
stopThreadAnimation();
|
|
1850
|
+
stopOpenProgressAnimation();
|
|
1851
|
+
}
|
|
1852
|
+
draggingRef.current = true;
|
|
1853
|
+
// PILL drag: map the upward travel to the pill→input morph (openProgress).
|
|
1854
|
+
// The thread stays at 0 until the input is fully formed; only the EXCESS
|
|
1855
|
+
// past PILL_OPEN_DISTANCE flows into the thread height, so a single
|
|
1856
|
+
// continuous pull reads pill → input → chat (and a flick-up no longer
|
|
1857
|
+
// flashes a chat sliver, since the thread only grows after the morph).
|
|
1858
|
+
if (pilled) {
|
|
1859
|
+
const up = Math.max(0, offset);
|
|
1860
|
+
openProgress.set(Math.min(1, up / PILL_OPEN_DISTANCE));
|
|
1861
|
+
const excess = up - PILL_OPEN_DISTANCE;
|
|
1862
|
+
threadHeight.set(excess > 0 ? clampHeight(excess) : 0);
|
|
1863
|
+
return;
|
|
1864
|
+
}
|
|
1865
|
+
// INPUT → PILL drag (collapsed, dragging DOWN): the mirror of the pill
|
|
1866
|
+
// drag — map the downward travel to the input→pill morph (openProgress
|
|
1867
|
+
// 1 → 0) so the input bar visibly scales down into the pill capsule under
|
|
1868
|
+
// the finger, instead of staying fully formed and snapping to the pill only
|
|
1869
|
+
// on release (the dead, unresponsive collapse gesture). The thread stays at
|
|
1870
|
+
// 0 (nothing to size below the input).
|
|
1871
|
+
if (!sheetOpen && offset < 0) {
|
|
1872
|
+
const down = -offset;
|
|
1873
|
+
openProgress.set(Math.max(0, 1 - down / PILL_OPEN_DISTANCE));
|
|
1874
|
+
threadHeight.set(0);
|
|
1875
|
+
return;
|
|
1876
|
+
}
|
|
1877
|
+
// Pin the dead direction at each end so the panel feels held: collapsed →
|
|
1878
|
+
// only upward (positive); full → only downward (negative); half → both.
|
|
1879
|
+
const off = !sheetOpen
|
|
1880
|
+
? Math.max(0, offset)
|
|
1881
|
+
: expanded
|
|
1882
|
+
? Math.min(0, offset)
|
|
1883
|
+
: offset;
|
|
1884
|
+
threadHeight.set(clampHeight(baseH + off));
|
|
1885
|
+
}, [
|
|
1886
|
+
pilled,
|
|
1887
|
+
sheetOpen,
|
|
1888
|
+
expanded,
|
|
1889
|
+
baseH,
|
|
1890
|
+
clampHeight,
|
|
1891
|
+
threadHeight,
|
|
1892
|
+
openProgress,
|
|
1893
|
+
stopThreadAnimation,
|
|
1894
|
+
stopOpenProgressAnimation,
|
|
1895
|
+
]);
|
|
1896
|
+
const pullBinding = usePullGesture({
|
|
1897
|
+
onDrag: onDragOffset,
|
|
1898
|
+
// Pulls STEP one detent at a time (peek→half→full and back) rather than
|
|
1899
|
+
// jumping straight to the ends — the iOS sheet feel. The inline closures are
|
|
1900
|
+
// rebuilt every render, so they always read the current detent.
|
|
1901
|
+
onPullUp: () => {
|
|
1902
|
+
if (pilled) {
|
|
1903
|
+
// PILL → INPUT, or straight into the chat when there's history: a flick
|
|
1904
|
+
// up opens. Mirror the slow-drag path so a flick and a slow drag BOTH
|
|
1905
|
+
// reach the chat (no hard stop at the bare input). Releasing draggingRef
|
|
1906
|
+
// first lets the pilled→openProgress effect spring the morph 0→1.
|
|
1907
|
+
draggingRef.current = false;
|
|
1908
|
+
if (hasThread) {
|
|
1909
|
+
focusThreadRef.current = true;
|
|
1910
|
+
goToDetent("half");
|
|
1911
|
+
}
|
|
1912
|
+
else {
|
|
1913
|
+
// Pill → bare input bar (no thread to open into).
|
|
1914
|
+
setMode("input");
|
|
1915
|
+
if (reduce) {
|
|
1916
|
+
stopThreadAnimation();
|
|
1917
|
+
threadHeight.set(0);
|
|
1918
|
+
}
|
|
1919
|
+
else
|
|
1920
|
+
animateThreadHeight(0);
|
|
1921
|
+
detentHaptic();
|
|
1922
|
+
}
|
|
1923
|
+
return;
|
|
1924
|
+
}
|
|
1925
|
+
if (!sheetOpen) {
|
|
1926
|
+
if (!hasThread)
|
|
1927
|
+
return settleDrag();
|
|
1928
|
+
goToDetent("half");
|
|
1929
|
+
focusThreadRef.current = true;
|
|
1930
|
+
}
|
|
1931
|
+
else if (!expanded) {
|
|
1932
|
+
goToDetent("full");
|
|
1933
|
+
focusThreadRef.current = true;
|
|
1934
|
+
}
|
|
1935
|
+
else {
|
|
1936
|
+
settleDrag();
|
|
1937
|
+
}
|
|
1938
|
+
},
|
|
1939
|
+
onPullDown: () => {
|
|
1940
|
+
if (pilled)
|
|
1941
|
+
return settleDrag(); // already the lowest detent
|
|
1942
|
+
// Step down ONE detent based on the EFFECTIVE height (so a free-rest above
|
|
1943
|
+
// half steps to half first, never skipping it). A downward flick also
|
|
1944
|
+
// closes the keyboard — goToDetent("collapsed") blurs; half-step blurs too.
|
|
1945
|
+
const effectiveH = freeH != null ? Math.min(freeH, panelMaxH) : detentH;
|
|
1946
|
+
if (sheetOpen && effectiveH > halfH + 1) {
|
|
1947
|
+
inputRef.current?.blur();
|
|
1948
|
+
goToDetent("half");
|
|
1949
|
+
}
|
|
1950
|
+
else if (sheetOpen) {
|
|
1951
|
+
goToDetent("collapsed");
|
|
1952
|
+
}
|
|
1953
|
+
else {
|
|
1954
|
+
// INPUT → PILL: collapse the input away into a pill at the bottom.
|
|
1955
|
+
setMode("pill");
|
|
1956
|
+
setMaximized(false);
|
|
1957
|
+
draggingRef.current = false;
|
|
1958
|
+
inputRef.current?.blur();
|
|
1959
|
+
detentHaptic();
|
|
1960
|
+
}
|
|
1961
|
+
},
|
|
1962
|
+
// A tap (no drag) on the handle. A tap on the PILL brings the input back.
|
|
1963
|
+
// When OPEN, the handle is the bar ABOVE the thread, so tapping it with the
|
|
1964
|
+
// keyboard up dismisses it and returns to the pre-focus resting state.
|
|
1965
|
+
// When COLLAPSED the handle's hit zone OVERLAPS the composer, so a tap there
|
|
1966
|
+
// is just "focus to type" — it must only focus the input, never dismiss or
|
|
1967
|
+
// collapse (the native focus already raised the keyboard, and the tap pierces
|
|
1968
|
+
// through to the input). Tapping OUTSIDE the panel is what drops the keyboard.
|
|
1969
|
+
onTap: () => {
|
|
1970
|
+
if (pilled) {
|
|
1971
|
+
openFromPill();
|
|
1972
|
+
return;
|
|
1973
|
+
}
|
|
1974
|
+
if (sheetOpen) {
|
|
1975
|
+
const composerFocused = typeof document !== "undefined" &&
|
|
1976
|
+
document.activeElement === inputRef.current;
|
|
1977
|
+
// Keyboard up → drop it and return to the pre-focus resting state (an
|
|
1978
|
+
// already-open sheet stays open; an auto-opened one re-collapses).
|
|
1979
|
+
// Keyboard down → the grabber is just the open chat's top bar; a tap
|
|
1980
|
+
// there does nothing (collapse is a pull-down / Escape / scrim tap).
|
|
1981
|
+
if (composerFocused)
|
|
1982
|
+
dismissKeyboardToPriorState();
|
|
1983
|
+
return;
|
|
1984
|
+
}
|
|
1985
|
+
inputRef.current?.focus();
|
|
1986
|
+
},
|
|
1987
|
+
// A deliberate (slow) drag: REST exactly where released instead of snapping
|
|
1988
|
+
// to a detent — drag the sheet to any size and it stays.
|
|
1989
|
+
onSettleFree: (direction) => {
|
|
1990
|
+
draggingRef.current = false;
|
|
1991
|
+
if (pilled) {
|
|
1992
|
+
// From the pill: a slow drag under the halfway-open mark (openProgress
|
|
1993
|
+
// < 0.5) springs back to the capsule; past it we commit to LEAVING the
|
|
1994
|
+
// pill — but we must NOT force the half detent. A short pull only forms
|
|
1995
|
+
// the input bar (threadHeight stays ~0 until the drag exceeds
|
|
1996
|
+
// PILL_OPEN_DISTANCE), so clear `pilled` and FALL THROUGH to the shared
|
|
1997
|
+
// detent magnetism below: a release near the input (threadHeight within
|
|
1998
|
+
// SHEET_DETENT_MAGNET of 0) settles at the INPUT state, and only a pull
|
|
1999
|
+
// that actually reached up into the thread opens to half/full. This is
|
|
2000
|
+
// what makes pill → input → chat one continuum instead of skipping the
|
|
2001
|
+
// input state straight to half on a short slow pull.
|
|
2002
|
+
const opened = direction === "up" && openProgress.get() >= 0.5;
|
|
2003
|
+
if (!opened) {
|
|
2004
|
+
settleDrag(); // springs openProgress → 0 (mode stays "pill") + thread → 0
|
|
2005
|
+
return;
|
|
2006
|
+
}
|
|
2007
|
+
// Leaving the pill: fall through to the magnetism below, which sets the
|
|
2008
|
+
// mode (input / half / full) from where the drag was released — so pill →
|
|
2009
|
+
// input → chat reads as one continuum.
|
|
2010
|
+
if (hasThread)
|
|
2011
|
+
focusThreadRef.current = true;
|
|
2012
|
+
}
|
|
2013
|
+
// From the collapsed input, a downward drag has nothing to "size" below
|
|
2014
|
+
// it — collapse straight to the pill (matches the flick-down path).
|
|
2015
|
+
if (!sheetOpen && direction === "down") {
|
|
2016
|
+
setMode("pill");
|
|
2017
|
+
inputRef.current?.blur();
|
|
2018
|
+
detentHaptic();
|
|
2019
|
+
return;
|
|
2020
|
+
}
|
|
2021
|
+
const h = Math.max(0, Math.min(threadHeight.get(), panelMaxH));
|
|
2022
|
+
// DETENT MAGNETISM — the resting positions are the detents {collapsed:0,
|
|
2023
|
+
// half, full}; a release within SHEET_DETENT_MAGNET of one snaps to it
|
|
2024
|
+
// (deterministic, no janky near-detent slivers), and only the clear gaps
|
|
2025
|
+
// between them keep the free-drag rest height. goToDetent commits the
|
|
2026
|
+
// honest flags so data-detent + the maximize header match the height.
|
|
2027
|
+
if (h <= SHEET_DETENT_MAGNET) {
|
|
2028
|
+
// Near the bottom → collapse to the input peek.
|
|
2029
|
+
closeSheet();
|
|
2030
|
+
return;
|
|
2031
|
+
}
|
|
2032
|
+
focusThreadRef.current = true;
|
|
2033
|
+
if (h >= openH - SHEET_DETENT_MAGNET) {
|
|
2034
|
+
goToDetent("full");
|
|
2035
|
+
}
|
|
2036
|
+
else if (Math.abs(h - halfH) <= SHEET_DETENT_MAGNET) {
|
|
2037
|
+
goToDetent("half");
|
|
2038
|
+
}
|
|
2039
|
+
else {
|
|
2040
|
+
// In a gap between detents → rest exactly where released. `half` is the
|
|
2041
|
+
// open base; `freeH` overrides the actual height to where the finger left.
|
|
2042
|
+
setFreeH(h);
|
|
2043
|
+
setMode("half");
|
|
2044
|
+
}
|
|
2045
|
+
},
|
|
2046
|
+
});
|
|
2047
|
+
// NOTE: the chat has NO close-on-outside-pointerdown beyond the keyboard blur;
|
|
2048
|
+
// it COLLAPSES on a pull-down, Escape, or a click on the dimming scrim.
|
|
2049
|
+
return (_jsxs("div", { ref: overlayRef, className: cn("pointer-events-none fixed inset-x-0 bottom-0 flex w-full min-w-0 flex-col items-center",
|
|
2050
|
+
// Full-bleed (maximized) removes the side inset so the chat is edge-to-edge.
|
|
2051
|
+
fullBleed ? "px-0" : "px-3 sm:px-4"),
|
|
2052
|
+
// Lift the whole overlay above the on-screen keyboard (`bottom`); padding
|
|
2053
|
+
// below the composer is conditional: when the composer is FOCUSED (keyboard
|
|
2054
|
+
// up), only a small gap (0.75rem, matching the side margin) sits between the
|
|
2055
|
+
// composer and the keyboard — the home-gesture clearance isn't needed
|
|
2056
|
+
// because the keyboard covers it. At rest, clear the home-gesture zone (max
|
|
2057
|
+
// safe-area / android inset) plus a hair, keeping the chat low without
|
|
2058
|
+
// touching that zone.
|
|
2059
|
+
style: {
|
|
2060
|
+
zIndex: Z_SHELL_OVERLAY,
|
|
2061
|
+
bottom: effectiveKeyboardInset,
|
|
2062
|
+
// Full-bleed fills the screen edge-to-edge: NO overlay bottom padding,
|
|
2063
|
+
// so the glass panel reaches the true bottom (no orange gap). The
|
|
2064
|
+
// gesture-zone clearance moves INSIDE the composer row (below) so the
|
|
2065
|
+
// input still sits above the home-gesture bar. Non-full-bleed keeps the
|
|
2066
|
+
// chat lifted off the gesture zone as before.
|
|
2067
|
+
paddingBottom: fullBleed
|
|
2068
|
+
? 0
|
|
2069
|
+
: composerFocused
|
|
2070
|
+
? "0.75rem"
|
|
2071
|
+
: "calc(var(--eliza-mobile-nav-offset, 0px) + max(var(--safe-area-bottom, 0px), var(--android-gesture-inset-bottom, 0px)) + 0.25rem)",
|
|
2072
|
+
}, "data-testid": "continuous-chat-overlay", "data-open": sheetOpen ? "true" : undefined, children: [_jsx(motion.div, { "aria-hidden": "true", "data-testid": "chat-sheet-backdrop", "data-active": sheetOpen ? "true" : "false", onClick: sheetOpen
|
|
2073
|
+
? () => {
|
|
2074
|
+
// First tap with the keyboard up only dismisses it (the
|
|
2075
|
+
// pointerdown handler already dropped the keyboard and restored
|
|
2076
|
+
// the pre-focus detent) — don't ALSO collapse. A tap with the
|
|
2077
|
+
// keyboard already down closes the chat back to the input.
|
|
2078
|
+
if (composerFocusedAtPressRef.current) {
|
|
2079
|
+
composerFocusedAtPressRef.current = false;
|
|
2080
|
+
return;
|
|
2081
|
+
}
|
|
2082
|
+
collapse();
|
|
2083
|
+
}
|
|
2084
|
+
: undefined, className: "fixed inset-0 bg-[linear-gradient(160deg,rgba(255,255,255,0.06)_0%,rgba(8,10,18,0.55)_46%,rgba(0,0,0,0.66)_100%)]",
|
|
2085
|
+
// Opacity follows the live history height (motion value) — no re-render
|
|
2086
|
+
// during a drag. Capture clicks only once open.
|
|
2087
|
+
style: {
|
|
2088
|
+
opacity: revealed,
|
|
2089
|
+
visibility: scrimVisibility,
|
|
2090
|
+
pointerEvents: sheetOpen ? "auto" : "none",
|
|
2091
|
+
} }), recording && transcript ? (_jsxs("div", { role: "status", "aria-live": "polite", "aria-atomic": "true", className: cn("pointer-events-none relative mb-2 w-full max-w-3xl text-center text-sm italic text-white/85", FLOAT_SHADOW), children: [transcript, _jsx("span", { "aria-hidden": "true", children: "\u2026" })] })) : null, needsAudioUnlock ? (_jsx("div", { role: "status", "aria-live": "polite", className: "pointer-events-none relative mb-2 flex w-full justify-center", children: _jsxs("button", { type: "button", onClick: unlockAudio, "data-testid": "overlay-voice-audio-unlock", className: cn("pointer-events-auto inline-flex items-center gap-1.5 rounded-full border px-3 py-1.5 text-sm font-medium transition-colors", "border-warn/40 bg-warn/15 text-warn hover:bg-warn/25", " ", FLOAT_SHADOW), children: [_jsx(Glyph, { d: SPEAKER_MUTED_GLYPH }), _jsx("span", { children: "Tap to enable sound" })] }) })) : null, modelStatus.kind === "downloading" || modelStatus.kind === "loading" ? (_jsx("div", { role: "status", "aria-live": "polite", "aria-atomic": "true", "data-testid": "overlay-model-download-status", className: "pointer-events-none relative mb-2 flex w-full justify-center", children: _jsxs("span", { className: cn("inline-flex items-center gap-2 rounded-full border border-white/15 bg-white/10 px-3 py-1.5 text-sm font-medium text-white/85", FLOAT_SHADOW), children: [_jsx(Loader2, { className: "h-3.5 w-3.5 animate-spin text-[#FF5800]" }), modelStatus.kind === "downloading" ? (_jsxs("span", { children: ["Downloading ", modelStatus.modelName ?? "local model", typeof modelStatus.percent === "number"
|
|
2092
|
+
? ` — ${Math.round(modelStatus.percent)}%`
|
|
2093
|
+
: "…"] })) : (_jsxs("span", { children: ["Loading ", modelStatus.modelName ?? "local model", "\u2026"] }))] }) })) : null, suggestionsVisible ? (_jsx(motion.fieldset, { "aria-label": "Suggested prompts", className: cn("pointer-events-auto relative m-0 mb-2 flex w-full max-w-3xl flex-wrap items-center justify-center gap-2 border-0 p-0"), style: { order: -1, opacity: suggestionsOpacity }, "data-testid": "chat-suggestions", children: suggestions.map((s, i) => (_jsx("button", { type: "button", "data-testid": `chat-suggestion-${i}`, "aria-label": s, onClick: () => pickSuggestion(s), className: cn("max-w-full truncate rounded-full border border-white/15 bg-black/40 px-3 py-1.5", "text-[12px] text-white/80 transition-colors", "hover:border-white/30 hover:bg-white/15 hover:text-white", " "), children: s }, s))) })) : null, _jsxs("div", { className: cn("pointer-events-none relative flex w-full flex-col items-center", fullBleed ? "max-w-none" : "max-w-3xl"), children: [!fullBleed ? (_jsx(SheetGrabber, { open: sheetOpen, onOpen: () => {
|
|
2094
|
+
if (!hasThread)
|
|
2095
|
+
return;
|
|
2096
|
+
goToDetent("half");
|
|
2097
|
+
focusThreadRef.current = true;
|
|
2098
|
+
}, onClose: collapse, binding: pullBinding, glow: listening || responding, opacity: grabberOpacity, pilled: pilled })) : null, _jsxs(motion.fieldset, { ref: panelRef, "aria-label": "Chat composer", "data-testid": "chat-sheet", "data-variant": sheetOpen ? "open" : "closed", "data-detent": pilled
|
|
2099
|
+
? "pill"
|
|
2100
|
+
: !sheetOpen
|
|
2101
|
+
? "collapsed"
|
|
2102
|
+
: freeH != null
|
|
2103
|
+
? Math.min(freeH, panelMaxH) >= openH - 1
|
|
2104
|
+
? "full"
|
|
2105
|
+
: "half"
|
|
2106
|
+
: expanded
|
|
2107
|
+
? "full"
|
|
2108
|
+
: "half", "data-maximized": fullBleed ? "true" : undefined, "data-revealed": sheetOpen ? "true" : "false", "data-chat-state": chatState, "data-header-shown": headerVisible ? "true" : "false",
|
|
2109
|
+
// ONE persistent element across pill ↔ input ↔ chat (never remounts —
|
|
2110
|
+
// that pop was the core jank). It's a transparent scale/position
|
|
2111
|
+
// container; the liquid glass lives in an inner layer faded by
|
|
2112
|
+
// openProgress, so pill → input is a continuous scale + crossfade.
|
|
2113
|
+
// maxHeight keeps it from spilling off the top (thread scrolls instead).
|
|
2114
|
+
style: {
|
|
2115
|
+
maxHeight: panelMaxH,
|
|
2116
|
+
// Full-bleed must be exactly scale 1 — a sub-1 morph scale with a
|
|
2117
|
+
// bottom transform-origin would drop the top edge below the status
|
|
2118
|
+
// bar (the "gap at the top when maximized" bug).
|
|
2119
|
+
scale: fullBleed ? 1 : panelScale,
|
|
2120
|
+
// Grow UP out of the pill at the bottom.
|
|
2121
|
+
transformOrigin: "bottom center",
|
|
2122
|
+
// Pilled: span the (invisible) input area but pass taps through to the
|
|
2123
|
+
// home screen — only the pill-capsule child re-enables pointer events.
|
|
2124
|
+
pointerEvents: pilled ? "none" : "auto",
|
|
2125
|
+
}, className: cn(
|
|
2126
|
+
// overflow-VISIBLE on the outer fieldset: the pill's tall grab zone
|
|
2127
|
+
// must bleed past the box. The rounded thread-clip lives on the inner
|
|
2128
|
+
// content wrapper instead, so clipping the scroll never clips a hard
|
|
2129
|
+
// square edge over the content.
|
|
2130
|
+
"relative m-0 flex w-full min-w-0 flex-col overflow-visible border-0 p-0"), children: [_jsx(motion.div, { "aria-hidden": "true", className: cn("pointer-events-none absolute inset-0 z-0", fullBleed ? "border-0" : "border border-white/[0.16]",
|
|
2131
|
+
// A solid dark fill so white text stays legible over any view
|
|
2132
|
+
// behind (a bright view, a dark view, or the warm ambient field).
|
|
2133
|
+
"bg-black/45"), style: {
|
|
2134
|
+
opacity: glassOpacity,
|
|
2135
|
+
borderRadius: fullBleed ? 0 : panelRadius,
|
|
2136
|
+
// Full-bleed: extend the glass UP through the safe-area-top so the
|
|
2137
|
+
// dark background reaches the true top of the screen. The panel
|
|
2138
|
+
// height comes from visualViewport (which excludes the Android
|
|
2139
|
+
// status bar) while the panel sits in a screen-top fixed container,
|
|
2140
|
+
// so without this the glass starts a status-bar-height below the top
|
|
2141
|
+
// (the "safe-area gap" above maximized chat). overflow-visible on the
|
|
2142
|
+
// panel lets it bleed up; content (header, with its own safe-area
|
|
2143
|
+
// padding) is untouched. Harmless when the inset is 0.
|
|
2144
|
+
...(fullBleed
|
|
2145
|
+
? { top: "calc(-1 * env(safe-area-inset-top, 0px))" }
|
|
2146
|
+
: null),
|
|
2147
|
+
} }), _jsxs(motion.div, { ref: contentRef, "data-testid": "chat-content", inert: pilled || undefined,
|
|
2148
|
+
// overflow-hidden + the live radius clips the sheen/thread to the
|
|
2149
|
+
// panel's rounded shape (the clip the fieldset used to do) WITHOUT
|
|
2150
|
+
// touching the sibling glass layer's shadow.
|
|
2151
|
+
className: "relative z-10 flex min-h-0 w-full flex-col overflow-hidden", style: {
|
|
2152
|
+
opacity: glassOpacity,
|
|
2153
|
+
pointerEvents: pilled ? "none" : "auto",
|
|
2154
|
+
borderRadius: fullBleed ? 0 : panelRadius,
|
|
2155
|
+
}, children: [sheetOpen ? (_jsxs(_Fragment, { children: [_jsx(SwipeEdgeHint, { side: "left", active: swipeDx < 0 && conversationNav.hasPrev, amount: -swipeDx }), _jsx(SwipeEdgeHint, { side: "right", active: swipeDx > 0 && conversationNav.hasNext, amount: swipeDx })] })) : null, _jsx("div", { "aria-hidden": "true", className: "pointer-events-none absolute inset-x-0 top-0 z-0 h-20 bg-gradient-to-b from-white/[0.07] to-transparent" }), !pilled ? (_jsxs(motion.div
|
|
2156
|
+
// Always mounted (when not pilled) so it can FADE + LERP its
|
|
2157
|
+
// space open/closed with the live height instead of popping in
|
|
2158
|
+
// on a mount. `headerVisible` (live-height boolean) gates
|
|
2159
|
+
// interactivity + the a11y tree so the faded/collapsed header
|
|
2160
|
+
// can't be clicked or read.
|
|
2161
|
+
, {
|
|
2162
|
+
// Always mounted (when not pilled) so it can FADE + LERP its
|
|
2163
|
+
// space open/closed with the live height instead of popping in
|
|
2164
|
+
// on a mount. `headerVisible` (live-height boolean) gates
|
|
2165
|
+
// interactivity + the a11y tree so the faded/collapsed header
|
|
2166
|
+
// can't be clicked or read.
|
|
2167
|
+
inert: !headerVisible || undefined, style: {
|
|
2168
|
+
// Full-bleed is always fully open: show the header at full
|
|
2169
|
+
// opacity and UNCAP its height. The reveal lerp tops out at
|
|
2170
|
+
// 100px, but the safe-area top padding (status-bar height +
|
|
2171
|
+
// 0.5rem) plus the button row exceeds that, so a 100px cap
|
|
2172
|
+
// clipped the buttons — uncap it edge-to-edge.
|
|
2173
|
+
opacity: fullBleed ? 1 : headerOpacity,
|
|
2174
|
+
maxHeight: fullBleed ? "none" : headerMaxH,
|
|
2175
|
+
// Collapsed → 0 top padding (no leaked margin above the
|
|
2176
|
+
// composer); opens to ~10px as the header reveals. Maximized
|
|
2177
|
+
// goes edge-to-edge under the status bar, so the header insets
|
|
2178
|
+
// its buttons below the safe area (the clock/battery) while the
|
|
2179
|
+
// sheet bg stays full-bleed — set inline (not a Tailwind
|
|
2180
|
+
// arbitrary class, whose env(...,0px) comma breaks the parser
|
|
2181
|
+
// so no padding was generated and the buttons sat under the
|
|
2182
|
+
// status bar).
|
|
2183
|
+
paddingTop: fullBleed
|
|
2184
|
+
? "calc(var(--safe-area-top, 0px) + 0.5rem)"
|
|
2185
|
+
: headerPadTop,
|
|
2186
|
+
}, className: cn("relative z-10 flex shrink-0 items-center justify-between gap-1.5 overflow-hidden px-3"), children: [_jsxs("div", { className: "flex items-center gap-1.5", children: [_jsx(HeaderButton, { icon: maximized ? Minimize2 : Maximize2, label: maximized ? "exit full screen" : "full screen", active: maximized, onClick: toggleMaximize, testId: "chat-full-maximize" }), hasThread ? (_jsx(HeaderButton, { icon: conversationCopied ? Check : Copy, label: conversationCopied
|
|
2187
|
+
? "conversation copied"
|
|
2188
|
+
: "copy conversation", onClick: handleCopyConversation, testId: "chat-full-copy-conversation" })) : null, _jsx(HeaderButton, { icon: RotateCcw, label: "clear conversation", onClick: () => clearConversation(), testId: "chat-full-clear" })] }), transcriptionMode ? (_jsx("div", { "data-testid": "chat-transcribing-badge", className: "pointer-events-none absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 whitespace-nowrap rounded-full bg-[var(--brand-orange,#ff6a00)]/15 px-2.5 py-0.5 text-[11px] font-medium text-[var(--brand-orange,#ff6a00)]", children: "Transcribing \u2014 say \u201Cexit transcription mode\u201D to stop" })) : null, _jsx("div", { className: "flex items-center gap-1.5", children: _jsx(HeaderButton, { icon: LayoutGrid, label: "springboard", onClick: () => navigateAndClose(() => navigateHome?.()), testId: "chat-full-springboard" }) })] })) : null, hasThread || sheetOpen ? (_jsx(motion.div, { "data-testid": "chat-thread", className: cn("relative z-10 min-h-0 w-full shrink grow-0 overflow-hidden",
|
|
2189
|
+
// When open, fade the top edge into the glass so the topmost
|
|
2190
|
+
// message dissolves under the drag handle instead of butting
|
|
2191
|
+
// against it.
|
|
2192
|
+
sheetOpen &&
|
|
2193
|
+
"[mask-image:linear-gradient(to_bottom,transparent_0,#000_34px)] [-webkit-mask-image:linear-gradient(to_bottom,transparent_0,#000_34px)]"),
|
|
2194
|
+
// Flex-basis IS the motion value (px string) — set 1:1 during a drag,
|
|
2195
|
+
// spring-animated to a detent on release; no `animate`/`transition`,
|
|
2196
|
+
// so no re-render. `shrink min-h-0` lets the panel's `maxHeight` cap
|
|
2197
|
+
// win: a tall detent (or the keyboard) shrinks the thread (it
|
|
2198
|
+
// scrolls) instead of pushing the panel off-screen. paddingTop
|
|
2199
|
+
// insets the scroll viewport below the floating grabber while the
|
|
2200
|
+
// header is hidden (0 once the header reveals at half+).
|
|
2201
|
+
style: {
|
|
2202
|
+
flexBasis: threadFlexBasis,
|
|
2203
|
+
paddingTop: threadGrabberClearance,
|
|
2204
|
+
}, children: _jsxs("div", { id: "continuous-thread", ref: threadRef, role: "log", "aria-label": "conversation history", "aria-live": "polite", "aria-hidden": !sheetOpen ? true : undefined, tabIndex: sheetOpen ? 0 : -1, onKeyDown: (e) => {
|
|
2205
|
+
if (e.key === "Escape") {
|
|
2206
|
+
e.preventDefault();
|
|
2207
|
+
collapse();
|
|
2208
|
+
}
|
|
2209
|
+
}, ...(sheetOpen ? conversationSwipe : {}), className: "relative flex h-full w-full touch-pan-y flex-col overflow-y-auto px-5 [scrollbar-width:none] [&::-webkit-scrollbar]:hidden", children: [visibleMessages.length === 0 && conversationLoading ? (_jsx("div", { "data-testid": "chat-thread-loading", className: "pointer-events-none absolute inset-0 grid place-items-center", children: _jsx(Loader2, { className: "h-6 w-6 animate-spin text-[#FF5800]" }) })) : null, hasTopics ? (_jsx(TopicChipsBar, { topics: channelTopics, onSelectTopic: scrollToTopic, className: "sticky top-0 z-[2] -mx-5 mb-1 bg-gradient-to-b from-black/40 to-transparent px-5" })) : null, _jsxs("div", { className: "mt-auto flex flex-col pb-3 pt-1", children: [hasTopics
|
|
2210
|
+
? // Topic-grouped transcript: each cluster collapses via a
|
|
2211
|
+
// gesture on its header (no visible buttons).
|
|
2212
|
+
(() => {
|
|
2213
|
+
let lineIndex = 0;
|
|
2214
|
+
return topicSegments.map((segment) => {
|
|
2215
|
+
const lines = segment.messages.map((m) => renderThreadLine(m, lineIndex++));
|
|
2216
|
+
return (_jsx(TopicGroup, { topic: segment.topic, count: segment.messages.length, collapsed: collapsedTopics.has(segment.key), onCollapsedChange: (collapsed) => setTopicCollapsed(segment.key, collapsed), children: _jsx(AnimatePresence, { initial: false, children: lines }) }, segment.messages[0]?.id ?? segment.key));
|
|
2217
|
+
});
|
|
2218
|
+
})()
|
|
2219
|
+
: // Flat transcript (no topic tags) — unchanged behavior.
|
|
2220
|
+
// Only the LAST, content-less assistant turn (the
|
|
2221
|
+
// in-flight one) reads turnStatus — every settled bubble
|
|
2222
|
+
// gets undefined so its memo identity is unchanged.
|
|
2223
|
+
null, hasTopics ? null : (_jsx(AnimatePresence, { initial: false, children: visibleMessages.map((m, i) => renderThreadLine(m, i)) })), _jsx(AnimatePresence, { children: responding &&
|
|
2224
|
+
!(visibleMessages.at(-1)?.role === "assistant" &&
|
|
2225
|
+
!visibleMessages.at(-1)?.content.trim()) ? (_jsx(TurnStatusIndicator, { status: turnStatus, reduce: reduce })) : null }), _jsx("div", { ref: endRef })] })] }) })) : null, hasImages || imageError ? (_jsxs("div", { className: "relative z-10 flex shrink-0 flex-col gap-1.5 px-3 pt-2", children: [hasImages ? (_jsx("div", { className: "flex flex-wrap gap-2", children: pendingImages.map((img, i) => {
|
|
2226
|
+
const kind = chatUploadKind(img.mimeType);
|
|
2227
|
+
const removeButton = (_jsx("button", { type: "button", "aria-label": `remove ${img.name}`, onClick: () => removeImage(i),
|
|
2228
|
+
// Small visual disc, but a 44px-class hit zone via the
|
|
2229
|
+
// invisible `before` overlay so it's thumb-tappable
|
|
2230
|
+
// without crowding the tile.
|
|
2231
|
+
className: "absolute -right-1.5 -top-1.5 grid h-5 w-5 place-items-center rounded-full border border-white/20 bg-black/70 text-xs text-white/90 transition-colors before:absolute before:-inset-3 before:content-[''] hover:bg-black/90", children: "\u00D7" }));
|
|
2232
|
+
const tileKey = `${img.name}-${img.mimeType}-${img.data.length}`;
|
|
2233
|
+
if (kind === "image") {
|
|
2234
|
+
return (_jsxs("div", { className: "group relative h-14 w-14 shrink-0", children: [_jsx("img", { src: `data:${img.mimeType};base64,${img.data}`, alt: img.name, className: "h-14 w-14 rounded-lg border border-white/20 object-cover" }), removeButton] }, tileKey));
|
|
2235
|
+
}
|
|
2236
|
+
const KindIcon = kind === "audio"
|
|
2237
|
+
? Music
|
|
2238
|
+
: kind === "video"
|
|
2239
|
+
? Film
|
|
2240
|
+
: FileText;
|
|
2241
|
+
return (_jsxs("div", { className: "group relative flex h-14 min-w-[3.5rem] max-w-[10rem] shrink-0 items-center gap-2 rounded-lg border border-white/20 bg-white/10 px-2.5 text-white/90", title: img.name, children: [_jsx(KindIcon, { className: "h-5 w-5 shrink-0 text-white/70" }), _jsx("span", { className: "min-w-0 truncate text-[11px] leading-tight", children: img.name }), removeButton] }, tileKey));
|
|
2242
|
+
}) })) : null, imageError ? (_jsx("p", { role: "alert", className: cn("text-xs text-red-200/90", FLOAT_SHADOW), children: imageError })) : null] })) : null, _jsx("input", { ref: fileInputRef, type: "file", accept: CHAT_UPLOAD_ACCEPT, multiple: true, className: "hidden", onChange: (e) => {
|
|
2243
|
+
if (e.target.files)
|
|
2244
|
+
addImageFiles(e.target.files);
|
|
2245
|
+
e.target.value = "";
|
|
2246
|
+
} }), _jsxs("div", { className: cn(
|
|
2247
|
+
// items-center vertically centers a single-line composer with
|
|
2248
|
+
// the round +/mic buttons (the common case); a multi-line draft
|
|
2249
|
+
// grows the textarea and the buttons stay centered. shrink-0
|
|
2250
|
+
// keeps the input fully visible when the panel hits its
|
|
2251
|
+
// maxHeight cap (only the thread above gives way).
|
|
2252
|
+
// Equal inset on all sides (px == py): a round button nested in
|
|
2253
|
+
// the pill's round end-cap reads as concentric, with the same
|
|
2254
|
+
// gap on the sides as top/bottom.
|
|
2255
|
+
"relative z-10 flex min-w-0 shrink-0 items-center gap-1.5 px-2 py-2 sm:gap-2", sheetOpen ? "border-t border-white/10" : ""),
|
|
2256
|
+
// Full-bleed has no overlay bottom padding (the panel is
|
|
2257
|
+
// edge-to-edge), so the composer carries the home-gesture
|
|
2258
|
+
// clearance itself — except while the keyboard is up, which
|
|
2259
|
+
// already covers that zone.
|
|
2260
|
+
style: fullBleed && !composerFocused
|
|
2261
|
+
? {
|
|
2262
|
+
paddingBottom: "calc(0.5rem + max(var(--safe-area-bottom, 0px), var(--android-gesture-inset-bottom, 0px)))",
|
|
2263
|
+
}
|
|
2264
|
+
: undefined, children: [slashProp && !slashDismissed ? (_jsx(SlashCommandMenu, { state: slashMenu, loading: isSlashDraft && slash.loading, onPick: pickSlashItem })) : null, _jsx(SoftButton, { glyph: PLUS_GLYPH, label: "attach image", disabled: pendingImages.length >= MAX_CHAT_IMAGES, onClick: () => fileInputRef.current?.click(), testId: "chat-composer-attach" }), _jsx("textarea", { ref: inputRef, rows: 1, value: draft, onChange: (e) => {
|
|
2265
|
+
setDraft(e.target.value);
|
|
2266
|
+
// Mirror the live draft to the active view (Help search etc.).
|
|
2267
|
+
viewChatBinding?.onQuery?.(e.target.value);
|
|
2268
|
+
if (e.target.value.trim().length > 0)
|
|
2269
|
+
expand();
|
|
2270
|
+
}, onFocus: () => {
|
|
2271
|
+
setComposerFocused(true);
|
|
2272
|
+
// A pill-open focus only raises the keyboard; it must not
|
|
2273
|
+
// expand a history thread (see suppressExpandOnFocusRef).
|
|
2274
|
+
if (suppressExpandOnFocusRef.current) {
|
|
2275
|
+
suppressExpandOnFocusRef.current = false;
|
|
2276
|
+
}
|
|
2277
|
+
else {
|
|
2278
|
+
expand();
|
|
2279
|
+
}
|
|
2280
|
+
}, onBlur: () => setComposerFocused(false), onPaste: (e) => {
|
|
2281
|
+
// Shared with the desktop composer: a pasted image/file
|
|
2282
|
+
// attaches, a large plain-text paste becomes a collapsed
|
|
2283
|
+
// text-attachment chip, and small text falls through to the
|
|
2284
|
+
// textarea as normal.
|
|
2285
|
+
const intent = classifyComposerPaste({
|
|
2286
|
+
files: Array.from(e.clipboardData?.files ?? []),
|
|
2287
|
+
text: e.clipboardData?.getData("text") ?? "",
|
|
2288
|
+
});
|
|
2289
|
+
if (intent.kind === "files") {
|
|
2290
|
+
e.preventDefault();
|
|
2291
|
+
addImageFiles(intent.files);
|
|
2292
|
+
return;
|
|
2293
|
+
}
|
|
2294
|
+
if (intent.kind === "text-attachment") {
|
|
2295
|
+
e.preventDefault();
|
|
2296
|
+
setPendingImages((prev) => [...prev, intent.attachment].slice(0, MAX_CHAT_IMAGES));
|
|
2297
|
+
}
|
|
2298
|
+
}, onKeyDown: (e) => {
|
|
2299
|
+
// The slash menu intercepts navigation/commit keys when open.
|
|
2300
|
+
if (slashOpen) {
|
|
2301
|
+
if (e.key === "ArrowDown") {
|
|
2302
|
+
e.preventDefault();
|
|
2303
|
+
slashMenu.move(1);
|
|
2304
|
+
return;
|
|
2305
|
+
}
|
|
2306
|
+
if (e.key === "ArrowUp") {
|
|
2307
|
+
e.preventDefault();
|
|
2308
|
+
slashMenu.move(-1);
|
|
2309
|
+
return;
|
|
2310
|
+
}
|
|
2311
|
+
if (e.key === "Tab") {
|
|
2312
|
+
const completed = slashMenu.complete();
|
|
2313
|
+
if (completed != null) {
|
|
2314
|
+
e.preventDefault();
|
|
2315
|
+
setDraft(completed);
|
|
2316
|
+
return;
|
|
2317
|
+
}
|
|
2318
|
+
}
|
|
2319
|
+
if (e.key === "Enter" && !e.shiftKey) {
|
|
2320
|
+
const exec = slashMenu.resolve();
|
|
2321
|
+
if (exec) {
|
|
2322
|
+
e.preventDefault();
|
|
2323
|
+
runExecution(exec);
|
|
2324
|
+
return;
|
|
2325
|
+
}
|
|
2326
|
+
}
|
|
2327
|
+
if (e.key === "Escape") {
|
|
2328
|
+
e.preventDefault();
|
|
2329
|
+
e.stopPropagation();
|
|
2330
|
+
setSlashDismissed(true);
|
|
2331
|
+
return;
|
|
2332
|
+
}
|
|
2333
|
+
}
|
|
2334
|
+
// Enter sends; Shift+Enter inserts a newline (multi-line compose).
|
|
2335
|
+
if (e.key === "Enter" && !e.shiftKey) {
|
|
2336
|
+
e.preventDefault();
|
|
2337
|
+
submit();
|
|
2338
|
+
}
|
|
2339
|
+
else if (e.key === "Escape" && sheetOpen) {
|
|
2340
|
+
e.preventDefault();
|
|
2341
|
+
collapse();
|
|
2342
|
+
}
|
|
2343
|
+
}, placeholder: booting
|
|
2344
|
+
? `Ask ${agentName} — waking up…`
|
|
2345
|
+
: (viewChatBinding?.placeholder ?? `Ask ${agentName}`), "aria-label": "message", "data-testid": "chat-composer-textarea", "aria-describedby": booting ? "cc-booting-hint" : undefined, ...comboboxAria, className: "max-h-[8.5rem] min-h-8 min-w-0 flex-1 resize-none self-center border-none bg-transparent px-1.5 py-1 text-left text-sm leading-relaxed text-white/[0.92] outline-none [scrollbar-width:none] placeholder:text-white/45 [&::-webkit-scrollbar]:hidden" }), _jsxs("span", { id: "cc-booting-hint", className: "sr-only", children: [agentName, " is waking up \u2014 you can type now; your message sends and the reply arrives in a moment."] }), _jsx("div", { className: "flex shrink-0 items-center gap-1.5 sm:gap-2", children: _jsx("div", { className: "shrink-0", children: (hasDraft || hasImages) && !recording ? (_jsx(SoftButton, { icon: SendHorizontal, label: !canSend
|
|
2346
|
+
? "send (agent stopped)"
|
|
2347
|
+
: responding
|
|
2348
|
+
? "send another"
|
|
2349
|
+
: "send", disabled: !canSend,
|
|
2350
|
+
// Keep focus in the textarea on tap: without this the
|
|
2351
|
+
// button steals focus, the textarea blurs, the keyboard
|
|
2352
|
+
// retracts and the composer relayouts between pointerdown
|
|
2353
|
+
// and click — so the first tap only dismissed the keyboard
|
|
2354
|
+
// and a second tap was needed to actually send. Chromium
|
|
2355
|
+
// still dispatches click after a preventDefaulted
|
|
2356
|
+
// pointerdown, so onClick fires on the first tap and the
|
|
2357
|
+
// keyboard stays up for the next message.
|
|
2358
|
+
onPointerDown: (e) => e.preventDefault(), onClick: submit, testId: "chat-composer-action" })) : !recording && responding ? (_jsx(SoftButton, { glyph: STOP_GLYPH, label: "stop generating", onClick: () => stop(), testId: "chat-composer-stop" })) : (_jsx(SoftButton, { icon: Mic, label: pttHolding
|
|
2359
|
+
? "release to send"
|
|
2360
|
+
: transcriptionMode
|
|
2361
|
+
? "stop transcription"
|
|
2362
|
+
: handsFree
|
|
2363
|
+
? "end conversation"
|
|
2364
|
+
: recording
|
|
2365
|
+
? "stop listening"
|
|
2366
|
+
: "talk", active: recording || handsFree || transcriptionMode, onClick: handleMicClick, onPointerDown: beginPushToTalkPress, onPointerUp: (e) => finishPushToTalkPress(e, false), onPointerCancel: (e) => finishPushToTalkPress(e, true), testId: "chat-composer-mic" })) }) })] })] }), _jsx(motion.div, { className: "absolute inset-x-0 bottom-0 z-30 flex justify-center", style: {
|
|
2367
|
+
opacity: pillOpacity,
|
|
2368
|
+
pointerEvents: pilled ? "auto" : "none",
|
|
2369
|
+
}, children: _jsx(PillHandle, { binding: pullBinding, onOpen: openFromPill, glow: listening || responding, pilled: pilled }) })] })] })] }));
|
|
2370
|
+
}
|