@agimon-ai/po-web-dashboard 0.0.0-alpha.0
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/LICENSE +29 -0
- package/README.md +10 -0
- package/dist/_virtual/_rolldown/runtime.cjs +23 -0
- package/dist/core.cjs +222 -0
- package/dist/core.d.mts +21 -0
- package/dist/core.mjs +21 -0
- package/dist/index.cjs +546 -0
- package/dist/index.d.mts +81 -0
- package/dist/index.mjs +81 -0
- package/dist/testing.cjs +18 -0
- package/dist/testing.d.mts +6 -0
- package/dist/testing.mjs +6 -0
- package/dist/types/auth.cjs +20 -0
- package/dist/types/auth.cjs.map +1 -0
- package/dist/types/auth.d.mts +160 -0
- package/dist/types/auth.d.mts.map +1 -0
- package/dist/types/auth.mjs +19 -0
- package/dist/types/auth.mjs.map +1 -0
- package/dist/types/bridge.d.mts +18 -0
- package/dist/types/bridge.d.mts.map +1 -0
- package/dist/types/devProxy.cjs +41 -0
- package/dist/types/devProxy.cjs.map +1 -0
- package/dist/types/devProxy.d.mts +54 -0
- package/dist/types/devProxy.d.mts.map +1 -0
- package/dist/types/devProxy.mjs +39 -0
- package/dist/types/devProxy.mjs.map +1 -0
- package/dist/types/hub.cjs +220 -0
- package/dist/types/hub.cjs.map +1 -0
- package/dist/types/hub.d.mts +447 -0
- package/dist/types/hub.d.mts.map +1 -0
- package/dist/types/hub.mjs +179 -0
- package/dist/types/hub.mjs.map +1 -0
- package/dist/types/media.cjs +75 -0
- package/dist/types/media.cjs.map +1 -0
- package/dist/types/media.d.mts +22 -0
- package/dist/types/media.d.mts.map +1 -0
- package/dist/types/media.mjs +70 -0
- package/dist/types/media.mjs.map +1 -0
- package/dist/types/notification.cjs +19 -0
- package/dist/types/notification.cjs.map +1 -0
- package/dist/types/notification.d.mts +10 -0
- package/dist/types/notification.d.mts.map +1 -0
- package/dist/types/notification.mjs +19 -0
- package/dist/types/notification.mjs.map +1 -0
- package/dist/types/remoteAccess.cjs +92 -0
- package/dist/types/remoteAccess.cjs.map +1 -0
- package/dist/types/remoteAccess.d.mts +214 -0
- package/dist/types/remoteAccess.d.mts.map +1 -0
- package/dist/types/remoteAccess.mjs +68 -0
- package/dist/types/remoteAccess.mjs.map +1 -0
- package/dist/types/session.cjs +23 -0
- package/dist/types/session.cjs.map +1 -0
- package/dist/types/session.d.mts +29 -0
- package/dist/types/session.d.mts.map +1 -0
- package/dist/types/session.mjs +18 -0
- package/dist/types/session.mjs.map +1 -0
- package/dist/types/sessionMcp.d.mts +56 -0
- package/dist/types/sessionMcp.d.mts.map +1 -0
- package/dist/types/settings.cjs +18 -0
- package/dist/types/settings.cjs.map +1 -0
- package/dist/types/settings.d.mts +126 -0
- package/dist/types/settings.d.mts.map +1 -0
- package/dist/types/settings.mjs +12 -0
- package/dist/types/settings.mjs.map +1 -0
- package/dist/types.cjs +101 -0
- package/dist/types.d.mts +11 -0
- package/dist/types.mjs +9 -0
- package/dist/views.cjs +120 -0
- package/dist/views.d.mts +56 -0
- package/dist/views.mjs +56 -0
- package/dist/web/components/MascotMark.cjs +18 -0
- package/dist/web/components/MascotMark.cjs.map +1 -0
- package/dist/web/components/MascotMark.d.mts +9 -0
- package/dist/web/components/MascotMark.d.mts.map +1 -0
- package/dist/web/components/MascotMark.mjs +18 -0
- package/dist/web/components/MascotMark.mjs.map +1 -0
- package/dist/web/components/PluginSurface.cjs +15 -0
- package/dist/web/components/PluginSurface.cjs.map +1 -0
- package/dist/web/components/PluginSurface.d.mts +13 -0
- package/dist/web/components/PluginSurface.d.mts.map +1 -0
- package/dist/web/components/PluginSurface.mjs +15 -0
- package/dist/web/components/PluginSurface.mjs.map +1 -0
- package/dist/web/components/QrCode.cjs +37 -0
- package/dist/web/components/QrCode.cjs.map +1 -0
- package/dist/web/components/QrCode.d.mts +22 -0
- package/dist/web/components/QrCode.d.mts.map +1 -0
- package/dist/web/components/QrCode.mjs +37 -0
- package/dist/web/components/QrCode.mjs.map +1 -0
- package/dist/web/components/Remote.fixture.cjs +73 -0
- package/dist/web/components/Remote.fixture.cjs.map +1 -0
- package/dist/web/components/Remote.fixture.mjs +72 -0
- package/dist/web/components/Remote.fixture.mjs.map +1 -0
- package/dist/web/components/SessionMcp.cjs +279 -0
- package/dist/web/components/SessionMcp.cjs.map +1 -0
- package/dist/web/components/SessionMcp.d.mts +12 -0
- package/dist/web/components/SessionMcp.d.mts.map +1 -0
- package/dist/web/components/SessionMcp.mjs +278 -0
- package/dist/web/components/SessionMcp.mjs.map +1 -0
- package/dist/web/components/Story.fixture.cjs +124 -0
- package/dist/web/components/Story.fixture.cjs.map +1 -0
- package/dist/web/components/Story.fixture.d.mts +19 -0
- package/dist/web/components/Story.fixture.d.mts.map +1 -0
- package/dist/web/components/Story.fixture.mjs +119 -0
- package/dist/web/components/Story.fixture.mjs.map +1 -0
- package/dist/web/components/Template.fixture.cjs +67 -0
- package/dist/web/components/Template.fixture.cjs.map +1 -0
- package/dist/web/components/Template.fixture.d.mts +7 -0
- package/dist/web/components/Template.fixture.d.mts.map +1 -0
- package/dist/web/components/Template.fixture.mjs +65 -0
- package/dist/web/components/Template.fixture.mjs.map +1 -0
- package/dist/web/components/ToolRendererBoundary.cjs +23 -0
- package/dist/web/components/ToolRendererBoundary.cjs.map +1 -0
- package/dist/web/components/ToolRendererBoundary.d.mts +23 -0
- package/dist/web/components/ToolRendererBoundary.d.mts.map +1 -0
- package/dist/web/components/ToolRendererBoundary.mjs +23 -0
- package/dist/web/components/ToolRendererBoundary.mjs.map +1 -0
- package/dist/web/features/activity/ActivityDock.cjs +271 -0
- package/dist/web/features/activity/ActivityDock.cjs.map +1 -0
- package/dist/web/features/activity/ActivityDock.d.mts +22 -0
- package/dist/web/features/activity/ActivityDock.d.mts.map +1 -0
- package/dist/web/features/activity/ActivityDock.mjs +271 -0
- package/dist/web/features/activity/ActivityDock.mjs.map +1 -0
- package/dist/web/features/activity/ContextItemDialog.cjs +276 -0
- package/dist/web/features/activity/ContextItemDialog.cjs.map +1 -0
- package/dist/web/features/activity/ContextItemDialog.d.mts +16 -0
- package/dist/web/features/activity/ContextItemDialog.d.mts.map +1 -0
- package/dist/web/features/activity/ContextItemDialog.mjs +276 -0
- package/dist/web/features/activity/ContextItemDialog.mjs.map +1 -0
- package/dist/web/features/activity/ContextPanel.cjs +248 -0
- package/dist/web/features/activity/ContextPanel.cjs.map +1 -0
- package/dist/web/features/activity/ContextPanel.d.mts +4 -0
- package/dist/web/features/activity/ContextPanel.d.mts.map +1 -0
- package/dist/web/features/activity/ContextPanel.mjs +248 -0
- package/dist/web/features/activity/ContextPanel.mjs.map +1 -0
- package/dist/web/features/activity/DockTabs.cjs +47 -0
- package/dist/web/features/activity/DockTabs.cjs.map +1 -0
- package/dist/web/features/activity/DockTabs.d.mts +9 -0
- package/dist/web/features/activity/DockTabs.d.mts.map +1 -0
- package/dist/web/features/activity/DockTabs.mjs +47 -0
- package/dist/web/features/activity/DockTabs.mjs.map +1 -0
- package/dist/web/features/connection/RefusedCard.cjs +76 -0
- package/dist/web/features/connection/RefusedCard.cjs.map +1 -0
- package/dist/web/features/connection/RefusedCard.d.mts +5 -0
- package/dist/web/features/connection/RefusedCard.d.mts.map +1 -0
- package/dist/web/features/connection/RefusedCard.mjs +76 -0
- package/dist/web/features/connection/RefusedCard.mjs.map +1 -0
- package/dist/web/features/dialogs/DialogOverlay.cjs +164 -0
- package/dist/web/features/dialogs/DialogOverlay.cjs.map +1 -0
- package/dist/web/features/dialogs/DialogOverlay.d.mts +15 -0
- package/dist/web/features/dialogs/DialogOverlay.d.mts.map +1 -0
- package/dist/web/features/dialogs/DialogOverlay.mjs +164 -0
- package/dist/web/features/dialogs/DialogOverlay.mjs.map +1 -0
- package/dist/web/features/leader/CommandPalette.cjs +390 -0
- package/dist/web/features/leader/CommandPalette.cjs.map +1 -0
- package/dist/web/features/leader/CommandPalette.d.mts +14 -0
- package/dist/web/features/leader/CommandPalette.d.mts.map +1 -0
- package/dist/web/features/leader/CommandPalette.mjs +390 -0
- package/dist/web/features/leader/CommandPalette.mjs.map +1 -0
- package/dist/web/features/remote/DevProxyTargets.cjs +122 -0
- package/dist/web/features/remote/DevProxyTargets.cjs.map +1 -0
- package/dist/web/features/remote/DevProxyTargets.d.mts +15 -0
- package/dist/web/features/remote/DevProxyTargets.d.mts.map +1 -0
- package/dist/web/features/remote/DevProxyTargets.mjs +122 -0
- package/dist/web/features/remote/DevProxyTargets.mjs.map +1 -0
- package/dist/web/features/remote/HandoverProgress.cjs +28 -0
- package/dist/web/features/remote/HandoverProgress.cjs.map +1 -0
- package/dist/web/features/remote/HandoverProgress.d.mts +12 -0
- package/dist/web/features/remote/HandoverProgress.d.mts.map +1 -0
- package/dist/web/features/remote/HandoverProgress.mjs +28 -0
- package/dist/web/features/remote/HandoverProgress.mjs.map +1 -0
- package/dist/web/features/remote/PairedDeviceList.cjs +37 -0
- package/dist/web/features/remote/PairedDeviceList.cjs.map +1 -0
- package/dist/web/features/remote/PairedDeviceList.d.mts +5 -0
- package/dist/web/features/remote/PairedDeviceList.d.mts.map +1 -0
- package/dist/web/features/remote/PairedDeviceList.mjs +37 -0
- package/dist/web/features/remote/PairedDeviceList.mjs.map +1 -0
- package/dist/web/features/remote/PairingApprovalDialog.cjs +65 -0
- package/dist/web/features/remote/PairingApprovalDialog.cjs.map +1 -0
- package/dist/web/features/remote/PairingApprovalDialog.d.mts +11 -0
- package/dist/web/features/remote/PairingApprovalDialog.d.mts.map +1 -0
- package/dist/web/features/remote/PairingApprovalDialog.mjs +65 -0
- package/dist/web/features/remote/PairingApprovalDialog.mjs.map +1 -0
- package/dist/web/features/remote/RemoteAccessDialog.cjs +83 -0
- package/dist/web/features/remote/RemoteAccessDialog.cjs.map +1 -0
- package/dist/web/features/remote/RemoteAccessDialog.d.mts +11 -0
- package/dist/web/features/remote/RemoteAccessDialog.d.mts.map +1 -0
- package/dist/web/features/remote/RemoteAccessDialog.mjs +83 -0
- package/dist/web/features/remote/RemoteAccessDialog.mjs.map +1 -0
- package/dist/web/features/remote/RemoteAccessOptions.cjs +154 -0
- package/dist/web/features/remote/RemoteAccessOptions.cjs.map +1 -0
- package/dist/web/features/remote/RemoteAccessOptions.d.mts +11 -0
- package/dist/web/features/remote/RemoteAccessOptions.d.mts.map +1 -0
- package/dist/web/features/remote/RemoteAccessOptions.mjs +154 -0
- package/dist/web/features/remote/RemoteAccessOptions.mjs.map +1 -0
- package/dist/web/features/remote/RemoteAccessPairing.cjs +93 -0
- package/dist/web/features/remote/RemoteAccessPairing.cjs.map +1 -0
- package/dist/web/features/remote/RemoteAccessPairing.d.mts +5 -0
- package/dist/web/features/remote/RemoteAccessPairing.d.mts.map +1 -0
- package/dist/web/features/remote/RemoteAccessPairing.mjs +93 -0
- package/dist/web/features/remote/RemoteAccessPairing.mjs.map +1 -0
- package/dist/web/features/remote/SandboxWorkspaces.cjs +87 -0
- package/dist/web/features/remote/SandboxWorkspaces.cjs.map +1 -0
- package/dist/web/features/remote/SandboxWorkspaces.d.mts +7 -0
- package/dist/web/features/remote/SandboxWorkspaces.d.mts.map +1 -0
- package/dist/web/features/remote/SandboxWorkspaces.mjs +87 -0
- package/dist/web/features/remote/SandboxWorkspaces.mjs.map +1 -0
- package/dist/web/features/remote/TrustedDeviceList.cjs +65 -0
- package/dist/web/features/remote/TrustedDeviceList.cjs.map +1 -0
- package/dist/web/features/remote/TrustedDeviceList.d.mts +13 -0
- package/dist/web/features/remote/TrustedDeviceList.d.mts.map +1 -0
- package/dist/web/features/remote/TrustedDeviceList.mjs +64 -0
- package/dist/web/features/remote/TrustedDeviceList.mjs.map +1 -0
- package/dist/web/features/selection/SelectionBar.cjs +401 -0
- package/dist/web/features/selection/SelectionBar.cjs.map +1 -0
- package/dist/web/features/selection/SelectionBar.d.mts +14 -0
- package/dist/web/features/selection/SelectionBar.d.mts.map +1 -0
- package/dist/web/features/selection/SelectionBar.mjs +400 -0
- package/dist/web/features/selection/SelectionBar.mjs.map +1 -0
- package/dist/web/features/session/AgentLockPanel.cjs +31 -0
- package/dist/web/features/session/AgentLockPanel.cjs.map +1 -0
- package/dist/web/features/session/AgentLockPanel.mjs +31 -0
- package/dist/web/features/session/AgentLockPanel.mjs.map +1 -0
- package/dist/web/features/session/Composer.cjs +808 -0
- package/dist/web/features/session/Composer.cjs.map +1 -0
- package/dist/web/features/session/Composer.d.mts +21 -0
- package/dist/web/features/session/Composer.d.mts.map +1 -0
- package/dist/web/features/session/Composer.mjs +806 -0
- package/dist/web/features/session/Composer.mjs.map +1 -0
- package/dist/web/features/session/ComposerPrompt.cjs +47 -0
- package/dist/web/features/session/ComposerPrompt.cjs.map +1 -0
- package/dist/web/features/session/ComposerPrompt.d.mts +16 -0
- package/dist/web/features/session/ComposerPrompt.d.mts.map +1 -0
- package/dist/web/features/session/ComposerPrompt.mjs +47 -0
- package/dist/web/features/session/ComposerPrompt.mjs.map +1 -0
- package/dist/web/features/session/DormantPanel.cjs +61 -0
- package/dist/web/features/session/DormantPanel.cjs.map +1 -0
- package/dist/web/features/session/DormantPanel.d.mts +8 -0
- package/dist/web/features/session/DormantPanel.d.mts.map +1 -0
- package/dist/web/features/session/DormantPanel.mjs +61 -0
- package/dist/web/features/session/DormantPanel.mjs.map +1 -0
- package/dist/web/features/session/MentionPreviews.cjs +128 -0
- package/dist/web/features/session/MentionPreviews.cjs.map +1 -0
- package/dist/web/features/session/MentionPreviews.d.mts +17 -0
- package/dist/web/features/session/MentionPreviews.d.mts.map +1 -0
- package/dist/web/features/session/MentionPreviews.mjs +127 -0
- package/dist/web/features/session/MentionPreviews.mjs.map +1 -0
- package/dist/web/features/session/MessageMarkdown.cjs +20 -0
- package/dist/web/features/session/MessageMarkdown.cjs.map +1 -0
- package/dist/web/features/session/MessageMarkdown.d.mts +19 -0
- package/dist/web/features/session/MessageMarkdown.d.mts.map +1 -0
- package/dist/web/features/session/MessageMarkdown.mjs +20 -0
- package/dist/web/features/session/MessageMarkdown.mjs.map +1 -0
- package/dist/web/features/session/QueueSheet.cjs +189 -0
- package/dist/web/features/session/QueueSheet.cjs.map +1 -0
- package/dist/web/features/session/QueueSheet.d.mts +16 -0
- package/dist/web/features/session/QueueSheet.d.mts.map +1 -0
- package/dist/web/features/session/QueueSheet.mjs +189 -0
- package/dist/web/features/session/QueueSheet.mjs.map +1 -0
- package/dist/web/features/session/SessionActivity.cjs +88 -0
- package/dist/web/features/session/SessionActivity.cjs.map +1 -0
- package/dist/web/features/session/SessionActivity.d.mts +16 -0
- package/dist/web/features/session/SessionActivity.d.mts.map +1 -0
- package/dist/web/features/session/SessionActivity.mjs +87 -0
- package/dist/web/features/session/SessionActivity.mjs.map +1 -0
- package/dist/web/features/session/SessionTranscriptView.cjs +34 -0
- package/dist/web/features/session/SessionTranscriptView.cjs.map +1 -0
- package/dist/web/features/session/SessionTranscriptView.d.mts +16 -0
- package/dist/web/features/session/SessionTranscriptView.d.mts.map +1 -0
- package/dist/web/features/session/SessionTranscriptView.mjs +34 -0
- package/dist/web/features/session/SessionTranscriptView.mjs.map +1 -0
- package/dist/web/features/session/ThreadView.cjs +40 -0
- package/dist/web/features/session/ThreadView.cjs.map +1 -0
- package/dist/web/features/session/ThreadView.d.mts +18 -0
- package/dist/web/features/session/ThreadView.d.mts.map +1 -0
- package/dist/web/features/session/ThreadView.mjs +40 -0
- package/dist/web/features/session/ThreadView.mjs.map +1 -0
- package/dist/web/features/session/Timeline.cjs +620 -0
- package/dist/web/features/session/Timeline.cjs.map +1 -0
- package/dist/web/features/session/Timeline.d.mts +28 -0
- package/dist/web/features/session/Timeline.d.mts.map +1 -0
- package/dist/web/features/session/Timeline.mjs +619 -0
- package/dist/web/features/session/Timeline.mjs.map +1 -0
- package/dist/web/features/session/ToolCard.cjs +210 -0
- package/dist/web/features/session/ToolCard.cjs.map +1 -0
- package/dist/web/features/session/ToolCard.d.mts +16 -0
- package/dist/web/features/session/ToolCard.d.mts.map +1 -0
- package/dist/web/features/session/ToolCard.mjs +210 -0
- package/dist/web/features/session/ToolCard.mjs.map +1 -0
- package/dist/web/features/session/session.fixture.cjs +76 -0
- package/dist/web/features/session/session.fixture.cjs.map +1 -0
- package/dist/web/features/session/session.fixture.d.mts +6 -0
- package/dist/web/features/session/session.fixture.d.mts.map +1 -0
- package/dist/web/features/session/session.fixture.mjs +74 -0
- package/dist/web/features/session/session.fixture.mjs.map +1 -0
- package/dist/web/features/sessions/NewSessionDialog.cjs +70 -0
- package/dist/web/features/sessions/NewSessionDialog.cjs.map +1 -0
- package/dist/web/features/sessions/NewSessionDialog.d.mts +9 -0
- package/dist/web/features/sessions/NewSessionDialog.d.mts.map +1 -0
- package/dist/web/features/sessions/NewSessionDialog.mjs +70 -0
- package/dist/web/features/sessions/NewSessionDialog.mjs.map +1 -0
- package/dist/web/features/sessions/ResumeSessionDialog.cjs +131 -0
- package/dist/web/features/sessions/ResumeSessionDialog.cjs.map +1 -0
- package/dist/web/features/sessions/ResumeSessionDialog.d.mts +14 -0
- package/dist/web/features/sessions/ResumeSessionDialog.d.mts.map +1 -0
- package/dist/web/features/sessions/ResumeSessionDialog.mjs +131 -0
- package/dist/web/features/sessions/ResumeSessionDialog.mjs.map +1 -0
- package/dist/web/features/sessions/SessionRailDialogs.cjs +62 -0
- package/dist/web/features/sessions/SessionRailDialogs.cjs.map +1 -0
- package/dist/web/features/sessions/SessionRailDialogs.d.mts +10 -0
- package/dist/web/features/sessions/SessionRailDialogs.d.mts.map +1 -0
- package/dist/web/features/sessions/SessionRailDialogs.mjs +62 -0
- package/dist/web/features/sessions/SessionRailDialogs.mjs.map +1 -0
- package/dist/web/features/sessions/WelcomePanel.cjs +42 -0
- package/dist/web/features/sessions/WelcomePanel.cjs.map +1 -0
- package/dist/web/features/sessions/WelcomePanel.d.mts +16 -0
- package/dist/web/features/sessions/WelcomePanel.d.mts.map +1 -0
- package/dist/web/features/sessions/WelcomePanel.mjs +42 -0
- package/dist/web/features/sessions/WelcomePanel.mjs.map +1 -0
- package/dist/web/features/sessions/useNewSessionActions.cjs +38 -0
- package/dist/web/features/sessions/useNewSessionActions.cjs.map +1 -0
- package/dist/web/features/sessions/useNewSessionActions.d.mts +12 -0
- package/dist/web/features/sessions/useNewSessionActions.d.mts.map +1 -0
- package/dist/web/features/sessions/useNewSessionActions.mjs +38 -0
- package/dist/web/features/sessions/useNewSessionActions.mjs.map +1 -0
- package/dist/web/features/sessions/useSessionRail.cjs +302 -0
- package/dist/web/features/sessions/useSessionRail.cjs.map +1 -0
- package/dist/web/features/sessions/useSessionRail.d.mts +14 -0
- package/dist/web/features/sessions/useSessionRail.d.mts.map +1 -0
- package/dist/web/features/sessions/useSessionRail.mjs +302 -0
- package/dist/web/features/sessions/useSessionRail.mjs.map +1 -0
- package/dist/web/features/settings/AppearanceSettings.cjs +126 -0
- package/dist/web/features/settings/AppearanceSettings.cjs.map +1 -0
- package/dist/web/features/settings/AppearanceSettings.d.mts +12 -0
- package/dist/web/features/settings/AppearanceSettings.d.mts.map +1 -0
- package/dist/web/features/settings/AppearanceSettings.mjs +126 -0
- package/dist/web/features/settings/AppearanceSettings.mjs.map +1 -0
- package/dist/web/features/settings/ContributedSettings.cjs +257 -0
- package/dist/web/features/settings/ContributedSettings.cjs.map +1 -0
- package/dist/web/features/settings/ContributedSettings.d.mts +14 -0
- package/dist/web/features/settings/ContributedSettings.d.mts.map +1 -0
- package/dist/web/features/settings/ContributedSettings.mjs +257 -0
- package/dist/web/features/settings/ContributedSettings.mjs.map +1 -0
- package/dist/web/features/settings/ImageSettings.cjs +146 -0
- package/dist/web/features/settings/ImageSettings.cjs.map +1 -0
- package/dist/web/features/settings/ImageSettings.d.mts +12 -0
- package/dist/web/features/settings/ImageSettings.d.mts.map +1 -0
- package/dist/web/features/settings/ImageSettings.mjs +146 -0
- package/dist/web/features/settings/ImageSettings.mjs.map +1 -0
- package/dist/web/features/settings/LoginFlowDialog.cjs +226 -0
- package/dist/web/features/settings/LoginFlowDialog.cjs.map +1 -0
- package/dist/web/features/settings/LoginFlowDialog.d.mts +15 -0
- package/dist/web/features/settings/LoginFlowDialog.d.mts.map +1 -0
- package/dist/web/features/settings/LoginFlowDialog.mjs +225 -0
- package/dist/web/features/settings/LoginFlowDialog.mjs.map +1 -0
- package/dist/web/features/settings/NotificationSettings.cjs +69 -0
- package/dist/web/features/settings/NotificationSettings.cjs.map +1 -0
- package/dist/web/features/settings/NotificationSettings.d.mts +5 -0
- package/dist/web/features/settings/NotificationSettings.d.mts.map +1 -0
- package/dist/web/features/settings/NotificationSettings.mjs +69 -0
- package/dist/web/features/settings/NotificationSettings.mjs.map +1 -0
- package/dist/web/features/settings/PluginSettings.cjs +106 -0
- package/dist/web/features/settings/PluginSettings.cjs.map +1 -0
- package/dist/web/features/settings/PluginSettings.d.mts +10 -0
- package/dist/web/features/settings/PluginSettings.d.mts.map +1 -0
- package/dist/web/features/settings/PluginSettings.mjs +106 -0
- package/dist/web/features/settings/PluginSettings.mjs.map +1 -0
- package/dist/web/features/settings/ProviderSettings.cjs +323 -0
- package/dist/web/features/settings/ProviderSettings.cjs.map +1 -0
- package/dist/web/features/settings/ProviderSettings.d.mts +9 -0
- package/dist/web/features/settings/ProviderSettings.d.mts.map +1 -0
- package/dist/web/features/settings/ProviderSettings.mjs +323 -0
- package/dist/web/features/settings/ProviderSettings.mjs.map +1 -0
- package/dist/web/features/settings/RemoteControlSettings.cjs +50 -0
- package/dist/web/features/settings/RemoteControlSettings.cjs.map +1 -0
- package/dist/web/features/settings/RemoteControlSettings.d.mts +5 -0
- package/dist/web/features/settings/RemoteControlSettings.d.mts.map +1 -0
- package/dist/web/features/settings/RemoteControlSettings.mjs +50 -0
- package/dist/web/features/settings/RemoteControlSettings.mjs.map +1 -0
- package/dist/web/features/settings/RepositorySettings.cjs +318 -0
- package/dist/web/features/settings/RepositorySettings.cjs.map +1 -0
- package/dist/web/features/settings/RepositorySettings.d.mts +7 -0
- package/dist/web/features/settings/RepositorySettings.d.mts.map +1 -0
- package/dist/web/features/settings/RepositorySettings.mjs +318 -0
- package/dist/web/features/settings/RepositorySettings.mjs.map +1 -0
- package/dist/web/features/settings/RepositoryWorkspace.cjs +160 -0
- package/dist/web/features/settings/RepositoryWorkspace.cjs.map +1 -0
- package/dist/web/features/settings/RepositoryWorkspace.d.mts +10 -0
- package/dist/web/features/settings/RepositoryWorkspace.d.mts.map +1 -0
- package/dist/web/features/settings/RepositoryWorkspace.mjs +160 -0
- package/dist/web/features/settings/RepositoryWorkspace.mjs.map +1 -0
- package/dist/web/features/settings/SessionMcpSettings.cjs +488 -0
- package/dist/web/features/settings/SessionMcpSettings.cjs.map +1 -0
- package/dist/web/features/settings/SessionMcpSettings.d.mts +5 -0
- package/dist/web/features/settings/SessionMcpSettings.d.mts.map +1 -0
- package/dist/web/features/settings/SessionMcpSettings.mjs +488 -0
- package/dist/web/features/settings/SessionMcpSettings.mjs.map +1 -0
- package/dist/web/features/settings/SettingsMenu.cjs +135 -0
- package/dist/web/features/settings/SettingsMenu.cjs.map +1 -0
- package/dist/web/features/settings/SettingsMenu.d.mts +9 -0
- package/dist/web/features/settings/SettingsMenu.d.mts.map +1 -0
- package/dist/web/features/settings/SettingsMenu.mjs +135 -0
- package/dist/web/features/settings/SettingsMenu.mjs.map +1 -0
- package/dist/web/features/settings/SettingsPanelHost.cjs +32 -0
- package/dist/web/features/settings/SettingsPanelHost.cjs.map +1 -0
- package/dist/web/features/settings/SettingsPanelHost.d.mts +8 -0
- package/dist/web/features/settings/SettingsPanelHost.d.mts.map +1 -0
- package/dist/web/features/settings/SettingsPanelHost.mjs +32 -0
- package/dist/web/features/settings/SettingsPanelHost.mjs.map +1 -0
- package/dist/web/features/settings/TemplateSettings.cjs +177 -0
- package/dist/web/features/settings/TemplateSettings.cjs.map +1 -0
- package/dist/web/features/settings/TemplateSettings.d.mts +8 -0
- package/dist/web/features/settings/TemplateSettings.d.mts.map +1 -0
- package/dist/web/features/settings/TemplateSettings.mjs +177 -0
- package/dist/web/features/settings/TemplateSettings.mjs.map +1 -0
- package/dist/web/features/settings/TunnelSettings.cjs +182 -0
- package/dist/web/features/settings/TunnelSettings.cjs.map +1 -0
- package/dist/web/features/settings/TunnelSettings.d.mts +8 -0
- package/dist/web/features/settings/TunnelSettings.d.mts.map +1 -0
- package/dist/web/features/settings/TunnelSettings.mjs +182 -0
- package/dist/web/features/settings/TunnelSettings.mjs.map +1 -0
- package/dist/web/features/settings/settings.fixture.cjs +230 -0
- package/dist/web/features/settings/settings.fixture.cjs.map +1 -0
- package/dist/web/features/settings/settings.fixture.d.mts +6 -0
- package/dist/web/features/settings/settings.fixture.d.mts.map +1 -0
- package/dist/web/features/settings/settings.fixture.mjs +223 -0
- package/dist/web/features/settings/settings.fixture.mjs.map +1 -0
- package/dist/web/features/status/TopBar.cjs +200 -0
- package/dist/web/features/status/TopBar.cjs.map +1 -0
- package/dist/web/features/status/TopBar.d.mts +11 -0
- package/dist/web/features/status/TopBar.d.mts.map +1 -0
- package/dist/web/features/status/TopBar.mjs +200 -0
- package/dist/web/features/status/TopBar.mjs.map +1 -0
- package/dist/web/lib/authApi.cjs +77 -0
- package/dist/web/lib/authApi.cjs.map +1 -0
- package/dist/web/lib/authApi.d.mts +28 -0
- package/dist/web/lib/authApi.d.mts.map +1 -0
- package/dist/web/lib/authApi.mjs +72 -0
- package/dist/web/lib/authApi.mjs.map +1 -0
- package/dist/web/lib/browserNotifications.cjs +37 -0
- package/dist/web/lib/browserNotifications.cjs.map +1 -0
- package/dist/web/lib/browserNotifications.d.mts +12 -0
- package/dist/web/lib/browserNotifications.d.mts.map +1 -0
- package/dist/web/lib/browserNotifications.mjs +35 -0
- package/dist/web/lib/browserNotifications.mjs.map +1 -0
- package/dist/web/lib/browserTelemetry.cjs +158 -0
- package/dist/web/lib/browserTelemetry.cjs.map +1 -0
- package/dist/web/lib/browserTelemetry.d.mts +28 -0
- package/dist/web/lib/browserTelemetry.d.mts.map +1 -0
- package/dist/web/lib/browserTelemetry.mjs +154 -0
- package/dist/web/lib/browserTelemetry.mjs.map +1 -0
- package/dist/web/lib/commands.cjs +176 -0
- package/dist/web/lib/commands.cjs.map +1 -0
- package/dist/web/lib/commands.d.mts +53 -0
- package/dist/web/lib/commands.d.mts.map +1 -0
- package/dist/web/lib/commands.mjs +153 -0
- package/dist/web/lib/commands.mjs.map +1 -0
- package/dist/web/lib/composerSubmissions.cjs +20 -0
- package/dist/web/lib/composerSubmissions.cjs.map +1 -0
- package/dist/web/lib/composerSubmissions.d.mts +7 -0
- package/dist/web/lib/composerSubmissions.d.mts.map +1 -0
- package/dist/web/lib/composerSubmissions.mjs +19 -0
- package/dist/web/lib/composerSubmissions.mjs.map +1 -0
- package/dist/web/lib/composition.cjs +403 -0
- package/dist/web/lib/composition.cjs.map +1 -0
- package/dist/web/lib/composition.d.mts +137 -0
- package/dist/web/lib/composition.d.mts.map +1 -0
- package/dist/web/lib/composition.mjs +392 -0
- package/dist/web/lib/composition.mjs.map +1 -0
- package/dist/web/lib/contextComposition.cjs +132 -0
- package/dist/web/lib/contextComposition.cjs.map +1 -0
- package/dist/web/lib/contextComposition.d.mts +75 -0
- package/dist/web/lib/contextComposition.d.mts.map +1 -0
- package/dist/web/lib/contextComposition.mjs +127 -0
- package/dist/web/lib/contextComposition.mjs.map +1 -0
- package/dist/web/lib/contextDetailApi.cjs +61 -0
- package/dist/web/lib/contextDetailApi.cjs.map +1 -0
- package/dist/web/lib/contextDetailApi.d.mts +12 -0
- package/dist/web/lib/contextDetailApi.d.mts.map +1 -0
- package/dist/web/lib/contextDetailApi.mjs +61 -0
- package/dist/web/lib/contextDetailApi.mjs.map +1 -0
- package/dist/web/lib/dashboardRenderers.cjs +9 -0
- package/dist/web/lib/dashboardRenderers.cjs.map +1 -0
- package/dist/web/lib/dashboardRenderers.d.mts +12 -0
- package/dist/web/lib/dashboardRenderers.d.mts.map +1 -0
- package/dist/web/lib/dashboardRenderers.mjs +9 -0
- package/dist/web/lib/dashboardRenderers.mjs.map +1 -0
- package/dist/web/lib/dashboardRoute.cjs +27 -0
- package/dist/web/lib/dashboardRoute.cjs.map +1 -0
- package/dist/web/lib/dashboardRoute.d.mts +29 -0
- package/dist/web/lib/dashboardRoute.d.mts.map +1 -0
- package/dist/web/lib/dashboardRoute.mjs +26 -0
- package/dist/web/lib/dashboardRoute.mjs.map +1 -0
- package/dist/web/lib/dashboardTranscript.cjs +15 -0
- package/dist/web/lib/dashboardTranscript.cjs.map +1 -0
- package/dist/web/lib/dashboardTranscript.d.mts +6 -0
- package/dist/web/lib/dashboardTranscript.d.mts.map +1 -0
- package/dist/web/lib/dashboardTranscript.mjs +14 -0
- package/dist/web/lib/dashboardTranscript.mjs.map +1 -0
- package/dist/web/lib/devProxyApi.cjs +74 -0
- package/dist/web/lib/devProxyApi.cjs.map +1 -0
- package/dist/web/lib/devProxyApi.d.mts +21 -0
- package/dist/web/lib/devProxyApi.d.mts.map +1 -0
- package/dist/web/lib/devProxyApi.mjs +72 -0
- package/dist/web/lib/devProxyApi.mjs.map +1 -0
- package/dist/web/lib/fileMentions.cjs +30 -0
- package/dist/web/lib/fileMentions.cjs.map +1 -0
- package/dist/web/lib/fileMentions.d.mts +13 -0
- package/dist/web/lib/fileMentions.d.mts.map +1 -0
- package/dist/web/lib/fileMentions.mjs +29 -0
- package/dist/web/lib/fileMentions.mjs.map +1 -0
- package/dist/web/lib/hubApi.cjs +283 -0
- package/dist/web/lib/hubApi.cjs.map +1 -0
- package/dist/web/lib/hubApi.d.mts +109 -0
- package/dist/web/lib/hubApi.d.mts.map +1 -0
- package/dist/web/lib/hubApi.mjs +268 -0
- package/dist/web/lib/hubApi.mjs.map +1 -0
- package/dist/web/lib/leaderTree.cjs +150 -0
- package/dist/web/lib/leaderTree.cjs.map +1 -0
- package/dist/web/lib/leaderTree.d.mts +41 -0
- package/dist/web/lib/leaderTree.d.mts.map +1 -0
- package/dist/web/lib/leaderTree.mjs +149 -0
- package/dist/web/lib/leaderTree.mjs.map +1 -0
- package/dist/web/lib/livePush.cjs +97 -0
- package/dist/web/lib/livePush.cjs.map +1 -0
- package/dist/web/lib/livePush.d.mts +10 -0
- package/dist/web/lib/livePush.d.mts.map +1 -0
- package/dist/web/lib/livePush.mjs +94 -0
- package/dist/web/lib/livePush.mjs.map +1 -0
- package/dist/web/lib/modelContextAdapter.cjs +63 -0
- package/dist/web/lib/modelContextAdapter.cjs.map +1 -0
- package/dist/web/lib/modelContextAdapter.d.mts +11 -0
- package/dist/web/lib/modelContextAdapter.d.mts.map +1 -0
- package/dist/web/lib/modelContextAdapter.mjs +62 -0
- package/dist/web/lib/modelContextAdapter.mjs.map +1 -0
- package/dist/web/lib/piTransport.cjs +103 -0
- package/dist/web/lib/piTransport.cjs.map +1 -0
- package/dist/web/lib/piTransport.d.mts +8 -0
- package/dist/web/lib/piTransport.d.mts.map +1 -0
- package/dist/web/lib/piTransport.mjs +102 -0
- package/dist/web/lib/piTransport.mjs.map +1 -0
- package/dist/web/lib/pluginCompositions.cjs +57 -0
- package/dist/web/lib/pluginCompositions.cjs.map +1 -0
- package/dist/web/lib/pluginCompositions.d.mts +37 -0
- package/dist/web/lib/pluginCompositions.d.mts.map +1 -0
- package/dist/web/lib/pluginCompositions.mjs +52 -0
- package/dist/web/lib/pluginCompositions.mjs.map +1 -0
- package/dist/web/lib/pluginRegistry.cjs +675 -0
- package/dist/web/lib/pluginRegistry.cjs.map +1 -0
- package/dist/web/lib/pluginRegistry.d.mts +155 -0
- package/dist/web/lib/pluginRegistry.d.mts.map +1 -0
- package/dist/web/lib/pluginRegistry.mjs +633 -0
- package/dist/web/lib/pluginRegistry.mjs.map +1 -0
- package/dist/web/lib/pluginScopes.cjs +48 -0
- package/dist/web/lib/pluginScopes.cjs.map +1 -0
- package/dist/web/lib/pluginScopes.d.mts +8 -0
- package/dist/web/lib/pluginScopes.d.mts.map +1 -0
- package/dist/web/lib/pluginScopes.mjs +47 -0
- package/dist/web/lib/pluginScopes.mjs.map +1 -0
- package/dist/web/lib/pluginSlotProps.cjs +83 -0
- package/dist/web/lib/pluginSlotProps.cjs.map +1 -0
- package/dist/web/lib/pluginSlotProps.d.mts +21 -0
- package/dist/web/lib/pluginSlotProps.d.mts.map +1 -0
- package/dist/web/lib/pluginSlotProps.mjs +82 -0
- package/dist/web/lib/pluginSlotProps.mjs.map +1 -0
- package/dist/web/lib/promptFocus.cjs +30 -0
- package/dist/web/lib/promptFocus.cjs.map +1 -0
- package/dist/web/lib/promptFocus.d.mts +7 -0
- package/dist/web/lib/promptFocus.d.mts.map +1 -0
- package/dist/web/lib/promptFocus.mjs +29 -0
- package/dist/web/lib/promptFocus.mjs.map +1 -0
- package/dist/web/lib/protocolHubSocket.cjs +107 -0
- package/dist/web/lib/protocolHubSocket.cjs.map +1 -0
- package/dist/web/lib/protocolHubSocket.d.mts +18 -0
- package/dist/web/lib/protocolHubSocket.d.mts.map +1 -0
- package/dist/web/lib/protocolHubSocket.mjs +107 -0
- package/dist/web/lib/protocolHubSocket.mjs.map +1 -0
- package/dist/web/lib/protocolTimeline.cjs +86 -0
- package/dist/web/lib/protocolTimeline.cjs.map +1 -0
- package/dist/web/lib/protocolTimeline.d.mts +9 -0
- package/dist/web/lib/protocolTimeline.d.mts.map +1 -0
- package/dist/web/lib/protocolTimeline.mjs +85 -0
- package/dist/web/lib/protocolTimeline.mjs.map +1 -0
- package/dist/web/lib/qrMatrix.cjs +37 -0
- package/dist/web/lib/qrMatrix.cjs.map +1 -0
- package/dist/web/lib/qrMatrix.d.mts +5 -0
- package/dist/web/lib/qrMatrix.d.mts.map +1 -0
- package/dist/web/lib/qrMatrix.mjs +35 -0
- package/dist/web/lib/qrMatrix.mjs.map +1 -0
- package/dist/web/lib/remoteApi.cjs +100 -0
- package/dist/web/lib/remoteApi.cjs.map +1 -0
- package/dist/web/lib/remoteApi.d.mts +45 -0
- package/dist/web/lib/remoteApi.d.mts.map +1 -0
- package/dist/web/lib/remoteApi.mjs +92 -0
- package/dist/web/lib/remoteApi.mjs.map +1 -0
- package/dist/web/lib/sealedSession.cjs +81 -0
- package/dist/web/lib/sealedSession.cjs.map +1 -0
- package/dist/web/lib/sealedSession.d.mts +24 -0
- package/dist/web/lib/sealedSession.d.mts.map +1 -0
- package/dist/web/lib/sealedSession.mjs +75 -0
- package/dist/web/lib/sealedSession.mjs.map +1 -0
- package/dist/web/lib/sessionActivityRenderer.cjs +19 -0
- package/dist/web/lib/sessionActivityRenderer.cjs.map +1 -0
- package/dist/web/lib/sessionActivityRenderer.d.mts +10 -0
- package/dist/web/lib/sessionActivityRenderer.d.mts.map +1 -0
- package/dist/web/lib/sessionActivityRenderer.mjs +17 -0
- package/dist/web/lib/sessionActivityRenderer.mjs.map +1 -0
- package/dist/web/lib/sessionAsset.cjs +45 -0
- package/dist/web/lib/sessionAsset.cjs.map +1 -0
- package/dist/web/lib/sessionAsset.d.mts +17 -0
- package/dist/web/lib/sessionAsset.d.mts.map +1 -0
- package/dist/web/lib/sessionAsset.mjs +44 -0
- package/dist/web/lib/sessionAsset.mjs.map +1 -0
- package/dist/web/lib/sessionAvatar.cjs +18 -0
- package/dist/web/lib/sessionAvatar.cjs.map +1 -0
- package/dist/web/lib/sessionAvatar.d.mts +10 -0
- package/dist/web/lib/sessionAvatar.d.mts.map +1 -0
- package/dist/web/lib/sessionAvatar.mjs +18 -0
- package/dist/web/lib/sessionAvatar.mjs.map +1 -0
- package/dist/web/lib/sessionMcpApi.cjs +120 -0
- package/dist/web/lib/sessionMcpApi.cjs.map +1 -0
- package/dist/web/lib/sessionMcpApi.d.mts +27 -0
- package/dist/web/lib/sessionMcpApi.d.mts.map +1 -0
- package/dist/web/lib/sessionMcpApi.mjs +114 -0
- package/dist/web/lib/sessionMcpApi.mjs.map +1 -0
- package/dist/web/lib/sessionMcpPrompt.cjs +24 -0
- package/dist/web/lib/sessionMcpPrompt.cjs.map +1 -0
- package/dist/web/lib/sessionMcpPrompt.mjs +23 -0
- package/dist/web/lib/sessionMcpPrompt.mjs.map +1 -0
- package/dist/web/lib/sessionModel.cjs +970 -0
- package/dist/web/lib/sessionModel.cjs.map +1 -0
- package/dist/web/lib/sessionModel.d.mts +254 -0
- package/dist/web/lib/sessionModel.d.mts.map +1 -0
- package/dist/web/lib/sessionModel.mjs +958 -0
- package/dist/web/lib/sessionModel.mjs.map +1 -0
- package/dist/web/lib/sessionProtocolCommands.cjs +196 -0
- package/dist/web/lib/sessionProtocolCommands.cjs.map +1 -0
- package/dist/web/lib/sessionProtocolCommands.d.mts +15 -0
- package/dist/web/lib/sessionProtocolCommands.d.mts.map +1 -0
- package/dist/web/lib/sessionProtocolCommands.mjs +193 -0
- package/dist/web/lib/sessionProtocolCommands.mjs.map +1 -0
- package/dist/web/lib/sessionRailModel.cjs +107 -0
- package/dist/web/lib/sessionRailModel.cjs.map +1 -0
- package/dist/web/lib/sessionRailModel.d.mts +38 -0
- package/dist/web/lib/sessionRailModel.d.mts.map +1 -0
- package/dist/web/lib/sessionRailModel.mjs +104 -0
- package/dist/web/lib/sessionRailModel.mjs.map +1 -0
- package/dist/web/lib/sessionSummary.cjs +58 -0
- package/dist/web/lib/sessionSummary.cjs.map +1 -0
- package/dist/web/lib/sessionSummary.d.mts +39 -0
- package/dist/web/lib/sessionSummary.d.mts.map +1 -0
- package/dist/web/lib/sessionSummary.mjs +54 -0
- package/dist/web/lib/sessionSummary.mjs.map +1 -0
- package/dist/web/lib/sessionTranscriptRenderer.cjs +19 -0
- package/dist/web/lib/sessionTranscriptRenderer.cjs.map +1 -0
- package/dist/web/lib/sessionTranscriptRenderer.d.mts +11 -0
- package/dist/web/lib/sessionTranscriptRenderer.d.mts.map +1 -0
- package/dist/web/lib/sessionTranscriptRenderer.mjs +17 -0
- package/dist/web/lib/sessionTranscriptRenderer.mjs.map +1 -0
- package/dist/web/lib/settingsApi.cjs +237 -0
- package/dist/web/lib/settingsApi.cjs.map +1 -0
- package/dist/web/lib/settingsApi.d.mts +57 -0
- package/dist/web/lib/settingsApi.d.mts.map +1 -0
- package/dist/web/lib/settingsApi.mjs +230 -0
- package/dist/web/lib/settingsApi.mjs.map +1 -0
- package/dist/web/lib/settingsDraft.cjs +48 -0
- package/dist/web/lib/settingsDraft.cjs.map +1 -0
- package/dist/web/lib/settingsDraft.d.mts +28 -0
- package/dist/web/lib/settingsDraft.d.mts.map +1 -0
- package/dist/web/lib/settingsDraft.mjs +45 -0
- package/dist/web/lib/settingsDraft.mjs.map +1 -0
- package/dist/web/lib/settingsSections.cjs +108 -0
- package/dist/web/lib/settingsSections.cjs.map +1 -0
- package/dist/web/lib/settingsSections.d.mts +36 -0
- package/dist/web/lib/settingsSections.d.mts.map +1 -0
- package/dist/web/lib/settingsSections.mjs +105 -0
- package/dist/web/lib/settingsSections.mjs.map +1 -0
- package/dist/web/lib/statusLine.cjs +82 -0
- package/dist/web/lib/statusLine.cjs.map +1 -0
- package/dist/web/lib/statusLine.d.mts +27 -0
- package/dist/web/lib/statusLine.d.mts.map +1 -0
- package/dist/web/lib/statusLine.mjs +79 -0
- package/dist/web/lib/statusLine.mjs.map +1 -0
- package/dist/web/lib/stepUp.cjs +41 -0
- package/dist/web/lib/stepUp.cjs.map +1 -0
- package/dist/web/lib/stepUp.d.mts +18 -0
- package/dist/web/lib/stepUp.d.mts.map +1 -0
- package/dist/web/lib/stepUp.mjs +41 -0
- package/dist/web/lib/stepUp.mjs.map +1 -0
- package/dist/web/lib/templateCatalog.cjs +123 -0
- package/dist/web/lib/templateCatalog.cjs.map +1 -0
- package/dist/web/lib/templateCatalog.d.mts +38 -0
- package/dist/web/lib/templateCatalog.d.mts.map +1 -0
- package/dist/web/lib/templateCatalog.mjs +118 -0
- package/dist/web/lib/templateCatalog.mjs.map +1 -0
- package/dist/web/lib/threadRenderer.cjs +25 -0
- package/dist/web/lib/threadRenderer.cjs.map +1 -0
- package/dist/web/lib/threadRenderer.d.mts +17 -0
- package/dist/web/lib/threadRenderer.d.mts.map +1 -0
- package/dist/web/lib/threadRenderer.mjs +23 -0
- package/dist/web/lib/threadRenderer.mjs.map +1 -0
- package/dist/web/lib/timelineGroups.cjs +83 -0
- package/dist/web/lib/timelineGroups.cjs.map +1 -0
- package/dist/web/lib/timelineGroups.d.mts +36 -0
- package/dist/web/lib/timelineGroups.d.mts.map +1 -0
- package/dist/web/lib/timelineGroups.mjs +81 -0
- package/dist/web/lib/timelineGroups.mjs.map +1 -0
- package/dist/web/lib/toolCompletionTabs.cjs +98 -0
- package/dist/web/lib/toolCompletionTabs.cjs.map +1 -0
- package/dist/web/lib/toolCompletionTabs.d.mts +14 -0
- package/dist/web/lib/toolCompletionTabs.d.mts.map +1 -0
- package/dist/web/lib/toolCompletionTabs.mjs +98 -0
- package/dist/web/lib/toolCompletionTabs.mjs.map +1 -0
- package/dist/web/lib/toolMessageProps.cjs +19 -0
- package/dist/web/lib/toolMessageProps.cjs.map +1 -0
- package/dist/web/lib/toolMessageProps.d.mts +7 -0
- package/dist/web/lib/toolMessageProps.d.mts.map +1 -0
- package/dist/web/lib/toolMessageProps.mjs +19 -0
- package/dist/web/lib/toolMessageProps.mjs.map +1 -0
- package/dist/web/lib/toolPrompt.cjs +44 -0
- package/dist/web/lib/toolPrompt.cjs.map +1 -0
- package/dist/web/lib/toolPrompt.d.mts +34 -0
- package/dist/web/lib/toolPrompt.d.mts.map +1 -0
- package/dist/web/lib/toolPrompt.mjs +44 -0
- package/dist/web/lib/toolPrompt.mjs.map +1 -0
- package/dist/web/lib/transport.cjs +57 -0
- package/dist/web/lib/transport.cjs.map +1 -0
- package/dist/web/lib/transport.d.mts +40 -0
- package/dist/web/lib/transport.d.mts.map +1 -0
- package/dist/web/lib/transport.mjs +50 -0
- package/dist/web/lib/transport.mjs.map +1 -0
- package/dist/web/lib/useSessionMcp.cjs +65 -0
- package/dist/web/lib/useSessionMcp.cjs.map +1 -0
- package/dist/web/lib/useSessionMcp.d.mts +15 -0
- package/dist/web/lib/useSessionMcp.d.mts.map +1 -0
- package/dist/web/lib/useSessionMcp.mjs +65 -0
- package/dist/web/lib/useSessionMcp.mjs.map +1 -0
- package/dist/web/lib/webauthnClient.cjs +110 -0
- package/dist/web/lib/webauthnClient.cjs.map +1 -0
- package/dist/web/lib/webauthnClient.d.mts +32 -0
- package/dist/web/lib/webauthnClient.d.mts.map +1 -0
- package/dist/web/lib/webauthnClient.mjs +106 -0
- package/dist/web/lib/webauthnClient.mjs.map +1 -0
- package/dist/web/lib/webmcpSimulator.cjs +105 -0
- package/dist/web/lib/webmcpSimulator.cjs.map +1 -0
- package/dist/web/lib/webmcpSimulator.mjs +105 -0
- package/dist/web/lib/webmcpSimulator.mjs.map +1 -0
- package/dist/web/stores/captureStore.cjs +137 -0
- package/dist/web/stores/captureStore.cjs.map +1 -0
- package/dist/web/stores/captureStore.d.mts +13 -0
- package/dist/web/stores/captureStore.d.mts.map +1 -0
- package/dist/web/stores/captureStore.mjs +133 -0
- package/dist/web/stores/captureStore.mjs.map +1 -0
- package/dist/web/stores/composerStore.cjs +390 -0
- package/dist/web/stores/composerStore.cjs.map +1 -0
- package/dist/web/stores/composerStore.d.mts +101 -0
- package/dist/web/stores/composerStore.d.mts.map +1 -0
- package/dist/web/stores/composerStore.mjs +370 -0
- package/dist/web/stores/composerStore.mjs.map +1 -0
- package/dist/web/stores/composerSubmissionStore.cjs +88 -0
- package/dist/web/stores/composerSubmissionStore.cjs.map +1 -0
- package/dist/web/stores/composerSubmissionStore.d.mts +11 -0
- package/dist/web/stores/composerSubmissionStore.d.mts.map +1 -0
- package/dist/web/stores/composerSubmissionStore.mjs +87 -0
- package/dist/web/stores/composerSubmissionStore.mjs.map +1 -0
- package/dist/web/stores/dashboardStateStore.cjs +35 -0
- package/dist/web/stores/dashboardStateStore.cjs.map +1 -0
- package/dist/web/stores/dashboardStateStore.d.mts +11 -0
- package/dist/web/stores/dashboardStateStore.d.mts.map +1 -0
- package/dist/web/stores/dashboardStateStore.mjs +33 -0
- package/dist/web/stores/dashboardStateStore.mjs.map +1 -0
- package/dist/web/stores/devProxyStore.cjs +76 -0
- package/dist/web/stores/devProxyStore.cjs.map +1 -0
- package/dist/web/stores/devProxyStore.d.mts +25 -0
- package/dist/web/stores/devProxyStore.d.mts.map +1 -0
- package/dist/web/stores/devProxyStore.mjs +73 -0
- package/dist/web/stores/devProxyStore.mjs.map +1 -0
- package/dist/web/stores/dialogDraftStore.cjs +38 -0
- package/dist/web/stores/dialogDraftStore.cjs.map +1 -0
- package/dist/web/stores/dialogDraftStore.d.mts +13 -0
- package/dist/web/stores/dialogDraftStore.d.mts.map +1 -0
- package/dist/web/stores/dialogDraftStore.mjs +36 -0
- package/dist/web/stores/dialogDraftStore.mjs.map +1 -0
- package/dist/web/stores/fileLinkModesStore.cjs +20 -0
- package/dist/web/stores/fileLinkModesStore.cjs.map +1 -0
- package/dist/web/stores/fileLinkModesStore.d.mts +5 -0
- package/dist/web/stores/fileLinkModesStore.d.mts.map +1 -0
- package/dist/web/stores/fileLinkModesStore.mjs +20 -0
- package/dist/web/stores/fileLinkModesStore.mjs.map +1 -0
- package/dist/web/stores/menuStore.cjs +85 -0
- package/dist/web/stores/menuStore.cjs.map +1 -0
- package/dist/web/stores/menuStore.d.mts +42 -0
- package/dist/web/stores/menuStore.d.mts.map +1 -0
- package/dist/web/stores/menuStore.mjs +79 -0
- package/dist/web/stores/menuStore.mjs.map +1 -0
- package/dist/web/stores/newSessionStore.cjs +93 -0
- package/dist/web/stores/newSessionStore.cjs.map +1 -0
- package/dist/web/stores/newSessionStore.d.mts +30 -0
- package/dist/web/stores/newSessionStore.d.mts.map +1 -0
- package/dist/web/stores/newSessionStore.mjs +86 -0
- package/dist/web/stores/newSessionStore.mjs.map +1 -0
- package/dist/web/stores/pagedTranscriptStore.cjs +235 -0
- package/dist/web/stores/pagedTranscriptStore.cjs.map +1 -0
- package/dist/web/stores/pagedTranscriptStore.d.mts +12 -0
- package/dist/web/stores/pagedTranscriptStore.d.mts.map +1 -0
- package/dist/web/stores/pagedTranscriptStore.mjs +235 -0
- package/dist/web/stores/pagedTranscriptStore.mjs.map +1 -0
- package/dist/web/stores/paletteStore.cjs +37 -0
- package/dist/web/stores/paletteStore.cjs.map +1 -0
- package/dist/web/stores/paletteStore.d.mts +14 -0
- package/dist/web/stores/paletteStore.d.mts.map +1 -0
- package/dist/web/stores/paletteStore.mjs +34 -0
- package/dist/web/stores/paletteStore.mjs.map +1 -0
- package/dist/web/stores/railDialogStore.cjs +105 -0
- package/dist/web/stores/railDialogStore.cjs.map +1 -0
- package/dist/web/stores/railDialogStore.d.mts +32 -0
- package/dist/web/stores/railDialogStore.d.mts.map +1 -0
- package/dist/web/stores/railDialogStore.mjs +97 -0
- package/dist/web/stores/railDialogStore.mjs.map +1 -0
- package/dist/web/stores/remoteAccessStore.cjs +216 -0
- package/dist/web/stores/remoteAccessStore.cjs.map +1 -0
- package/dist/web/stores/remoteAccessStore.d.mts +48 -0
- package/dist/web/stores/remoteAccessStore.d.mts.map +1 -0
- package/dist/web/stores/remoteAccessStore.mjs +202 -0
- package/dist/web/stores/remoteAccessStore.mjs.map +1 -0
- package/dist/web/stores/sessionChannelHoldsStore.cjs +43 -0
- package/dist/web/stores/sessionChannelHoldsStore.cjs.map +1 -0
- package/dist/web/stores/sessionChannelHoldsStore.d.mts +9 -0
- package/dist/web/stores/sessionChannelHoldsStore.d.mts.map +1 -0
- package/dist/web/stores/sessionChannelHoldsStore.mjs +42 -0
- package/dist/web/stores/sessionChannelHoldsStore.mjs.map +1 -0
- package/dist/web/stores/sessionStore.cjs +610 -0
- package/dist/web/stores/sessionStore.cjs.map +1 -0
- package/dist/web/stores/sessionStore.d.mts +116 -0
- package/dist/web/stores/sessionStore.d.mts.map +1 -0
- package/dist/web/stores/sessionStore.mjs +568 -0
- package/dist/web/stores/sessionStore.mjs.map +1 -0
- package/dist/web/stores/sessionsStore.cjs +272 -0
- package/dist/web/stores/sessionsStore.cjs.map +1 -0
- package/dist/web/stores/sessionsStore.d.mts +74 -0
- package/dist/web/stores/sessionsStore.d.mts.map +1 -0
- package/dist/web/stores/sessionsStore.mjs +257 -0
- package/dist/web/stores/sessionsStore.mjs.map +1 -0
- package/dist/web/stores/settingsDraftStore.cjs +138 -0
- package/dist/web/stores/settingsDraftStore.cjs.map +1 -0
- package/dist/web/stores/settingsDraftStore.d.mts +27 -0
- package/dist/web/stores/settingsDraftStore.d.mts.map +1 -0
- package/dist/web/stores/settingsDraftStore.mjs +132 -0
- package/dist/web/stores/settingsDraftStore.mjs.map +1 -0
- package/dist/web/stores/templateStore.cjs +136 -0
- package/dist/web/stores/templateStore.cjs.map +1 -0
- package/dist/web/stores/templateStore.d.mts +20 -0
- package/dist/web/stores/templateStore.d.mts.map +1 -0
- package/dist/web/stores/templateStore.mjs +131 -0
- package/dist/web/stores/templateStore.mjs.map +1 -0
- package/dist/web/stores/themeStore.cjs +42 -0
- package/dist/web/stores/themeStore.cjs.map +1 -0
- package/dist/web/stores/themeStore.d.mts +20 -0
- package/dist/web/stores/themeStore.d.mts.map +1 -0
- package/dist/web/stores/themeStore.mjs +39 -0
- package/dist/web/stores/themeStore.mjs.map +1 -0
- package/dist/web/stores/threadStore.cjs +122 -0
- package/dist/web/stores/threadStore.cjs.map +1 -0
- package/dist/web/stores/threadStore.d.mts +24 -0
- package/dist/web/stores/threadStore.d.mts.map +1 -0
- package/dist/web/stores/threadStore.mjs +114 -0
- package/dist/web/stores/threadStore.mjs.map +1 -0
- package/dist/web/stores/toolPromptStore.cjs +15 -0
- package/dist/web/stores/toolPromptStore.cjs.map +1 -0
- package/dist/web/stores/toolPromptStore.d.mts +23 -0
- package/dist/web/stores/toolPromptStore.d.mts.map +1 -0
- package/dist/web/stores/toolPromptStore.mjs +14 -0
- package/dist/web/stores/toolPromptStore.mjs.map +1 -0
- package/dist/web/stores/transientTabsStore.cjs +66 -0
- package/dist/web/stores/transientTabsStore.cjs.map +1 -0
- package/dist/web/stores/transientTabsStore.d.mts +21 -0
- package/dist/web/stores/transientTabsStore.d.mts.map +1 -0
- package/dist/web/stores/transientTabsStore.mjs +59 -0
- package/dist/web/stores/transientTabsStore.mjs.map +1 -0
- package/dist/web/stores/uiStore.cjs +47 -0
- package/dist/web/stores/uiStore.cjs.map +1 -0
- package/dist/web/stores/uiStore.d.mts +18 -0
- package/dist/web/stores/uiStore.d.mts.map +1 -0
- package/dist/web/stores/uiStore.mjs +45 -0
- package/dist/web/stores/uiStore.mjs.map +1 -0
- package/dist/web/stores/useOpenTab.cjs +31 -0
- package/dist/web/stores/useOpenTab.cjs.map +1 -0
- package/dist/web/stores/useOpenTab.d.mts +9 -0
- package/dist/web/stores/useOpenTab.d.mts.map +1 -0
- package/dist/web/stores/useOpenTab.mjs +31 -0
- package/dist/web/stores/useOpenTab.mjs.map +1 -0
- package/dist/web/stores/usePluginSlotProps.cjs +115 -0
- package/dist/web/stores/usePluginSlotProps.cjs.map +1 -0
- package/dist/web/stores/usePluginSlotProps.d.mts +6 -0
- package/dist/web/stores/usePluginSlotProps.d.mts.map +1 -0
- package/dist/web/stores/usePluginSlotProps.mjs +115 -0
- package/dist/web/stores/usePluginSlotProps.mjs.map +1 -0
- package/dist/web/stores/useToolPrompt.cjs +42 -0
- package/dist/web/stores/useToolPrompt.cjs.map +1 -0
- package/dist/web/stores/useToolPrompt.d.mts +14 -0
- package/dist/web/stores/useToolPrompt.d.mts.map +1 -0
- package/dist/web/stores/useToolPrompt.mjs +42 -0
- package/dist/web/stores/useToolPrompt.mjs.map +1 -0
- package/dist/web/stores/useWebPluginRegistry.cjs +11 -0
- package/dist/web/stores/useWebPluginRegistry.cjs.map +1 -0
- package/dist/web/stores/useWebPluginRegistry.d.mts +5 -0
- package/dist/web/stores/useWebPluginRegistry.d.mts.map +1 -0
- package/dist/web/stores/useWebPluginRegistry.mjs +11 -0
- package/dist/web/stores/useWebPluginRegistry.mjs.map +1 -0
- package/dist/web/stores/workspaceAdmissionStore.cjs +67 -0
- package/dist/web/stores/workspaceAdmissionStore.cjs.map +1 -0
- package/dist/web/stores/workspaceAdmissionStore.d.mts +24 -0
- package/dist/web/stores/workspaceAdmissionStore.d.mts.map +1 -0
- package/dist/web/stores/workspaceAdmissionStore.mjs +64 -0
- package/dist/web/stores/workspaceAdmissionStore.mjs.map +1 -0
- package/dist/web/stores/workspacesStore.cjs +83 -0
- package/dist/web/stores/workspacesStore.cjs.map +1 -0
- package/dist/web/stores/workspacesStore.d.mts +17 -0
- package/dist/web/stores/workspacesStore.d.mts.map +1 -0
- package/dist/web/stores/workspacesStore.mjs +78 -0
- package/dist/web/stores/workspacesStore.mjs.map +1 -0
- package/llms.txt +3 -0
- package/package.json +107 -0
- package/styles/dashboard.css +2 -0
- package/styles/preview.css +3 -0
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
//#region src/web/features/settings/TemplateSettings.d.ts
|
|
2
|
+
/** Select only admitted template contributions, and make the config write destination explicit. */
|
|
3
|
+
export declare function TemplateSettings({ target, onTargetChange }: {
|
|
4
|
+
target: string;
|
|
5
|
+
onTargetChange: (target: string) => void;
|
|
6
|
+
}): import("react").JSX.Element;
|
|
7
|
+
//#endregion
|
|
8
|
+
//# sourceMappingURL=TemplateSettings.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TemplateSettings.d.mts","names":[],"sources":["../../../../src/web/features/settings/TemplateSettings.tsx"],"mappings":";;wBAkCgB,mBACd,QACA;EAEA;EACA,iBAAiB;oBAClB,IAAA"}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
import { resolveWebTemplate } from "../../lib/templateCatalog.mjs";
|
|
2
|
+
import { webTemplateCatalog } from "../../lib/pluginRegistry.mjs";
|
|
3
|
+
import { reloadWebTemplateDecision } from "../../lib/pluginCompositions.mjs";
|
|
4
|
+
import { configuredTemplate, refreshTemplateConfiguration, saveTemplateDefault, useTemplateConfiguration } from "../../stores/templateStore.mjs";
|
|
5
|
+
import { useWebPluginRegistry } from "../../stores/useWebPluginRegistry.mjs";
|
|
6
|
+
import { workspacesStore } from "../../stores/workspacesStore.mjs";
|
|
7
|
+
import { useDashboardState } from "../../stores/dashboardStateStore.mjs";
|
|
8
|
+
import { useStore } from "@tanstack/react-store";
|
|
9
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
10
|
+
import { Button, CheckIcon, RadioGroup, RadioGroupCard, Select, SelectContent, SelectItem, SelectTrigger, SelectValue, SettingsActions, SettingsNote, SettingsSection, SettingsSectionDescription, SettingsSectionHeader, SettingsSectionTitle } from "@agimon-ai/po-web-components";
|
|
11
|
+
//#region src/web/features/settings/TemplateSettings.tsx
|
|
12
|
+
const WORKSPACE_TARGET = "workspace:";
|
|
13
|
+
/** Select only admitted template contributions, and make the config write destination explicit. */
|
|
14
|
+
function TemplateSettings({ target, onTargetChange }) {
|
|
15
|
+
useWebPluginRegistry();
|
|
16
|
+
const workspaces = useStore(workspacesStore, (state) => state);
|
|
17
|
+
const workspaceId = target.startsWith(WORKSPACE_TARGET) ? target.slice(10) : void 0;
|
|
18
|
+
const configuration = useTemplateConfiguration(workspaceId);
|
|
19
|
+
const catalog = webTemplateCatalog(workspaceId === void 0 ? { scope: "global" } : {
|
|
20
|
+
scope: "workspace",
|
|
21
|
+
workspaceId
|
|
22
|
+
});
|
|
23
|
+
const configured = configuredTemplate(configuration);
|
|
24
|
+
const resolved = resolveWebTemplate(catalog.templates, configured);
|
|
25
|
+
const [draft, setDraft] = useDashboardState("template/draft", null);
|
|
26
|
+
const choice = draft?.target === target ? draft.id : resolved.template?.id;
|
|
27
|
+
const busy = configuration.saving || configuration.loading;
|
|
28
|
+
const origin = configuration.config?.values["web.template"]?.origin ?? "default";
|
|
29
|
+
const missingWorkspace = workspaceId !== void 0 && workspaces.byId[workspaceId] === void 0;
|
|
30
|
+
const changed = choice !== void 0 && choice !== configured;
|
|
31
|
+
return /* @__PURE__ */ jsxs(SettingsSection, {
|
|
32
|
+
"data-testid": "template-settings",
|
|
33
|
+
children: [
|
|
34
|
+
/* @__PURE__ */ jsxs(SettingsSectionHeader, { children: [/* @__PURE__ */ jsx(SettingsSectionTitle, { children: "Layout" }), /* @__PURE__ */ jsx(SettingsSectionDescription, { children: "The arrangement Po opens with. Set it for everyone, or let one workspace choose its own." })] }),
|
|
35
|
+
/* @__PURE__ */ jsxs("div", {
|
|
36
|
+
className: "flex min-w-0 flex-wrap items-center gap-x-3 gap-y-2",
|
|
37
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
38
|
+
id: "template-scope-label",
|
|
39
|
+
className: "text-sm text-doom-dim",
|
|
40
|
+
children: "Applies to"
|
|
41
|
+
}), /* @__PURE__ */ jsxs(Select, {
|
|
42
|
+
value: target,
|
|
43
|
+
onValueChange: (value) => {
|
|
44
|
+
onTargetChange(value);
|
|
45
|
+
setDraft(null);
|
|
46
|
+
},
|
|
47
|
+
disabled: configuration.saving,
|
|
48
|
+
children: [/* @__PURE__ */ jsx(SelectTrigger, {
|
|
49
|
+
"aria-labelledby": "template-scope-label",
|
|
50
|
+
"data-testid": "template-scope",
|
|
51
|
+
className: "w-auto min-w-56 max-w-full",
|
|
52
|
+
children: /* @__PURE__ */ jsx(SelectValue, {})
|
|
53
|
+
}), /* @__PURE__ */ jsxs(SelectContent, { children: [/* @__PURE__ */ jsx(SelectItem, {
|
|
54
|
+
value: "global",
|
|
55
|
+
children: "Global default"
|
|
56
|
+
}), workspaces.order.map((id) => /* @__PURE__ */ jsxs(SelectItem, {
|
|
57
|
+
value: `${WORKSPACE_TARGET}${id}`,
|
|
58
|
+
children: ["Workspace: ", workspaces.byId[id]?.root ?? id]
|
|
59
|
+
}, id))] })]
|
|
60
|
+
})]
|
|
61
|
+
}),
|
|
62
|
+
/* @__PURE__ */ jsx(RadioGroup, {
|
|
63
|
+
"aria-label": "Layout",
|
|
64
|
+
value: choice ?? "",
|
|
65
|
+
onValueChange: (id) => setDraft({
|
|
66
|
+
target,
|
|
67
|
+
id
|
|
68
|
+
}),
|
|
69
|
+
className: "grid grid-cols-1 gap-3 sm:grid-cols-2",
|
|
70
|
+
disabled: busy || missingWorkspace,
|
|
71
|
+
children: catalog.templates.map((template) => /* @__PURE__ */ jsxs(RadioGroupCard, {
|
|
72
|
+
value: template.id,
|
|
73
|
+
"data-testid": `template-${template.id}`,
|
|
74
|
+
"data-selected": choice === template.id,
|
|
75
|
+
className: "flex items-start gap-2 rounded-lg p-4",
|
|
76
|
+
children: [/* @__PURE__ */ jsxs("span", {
|
|
77
|
+
className: "flex min-w-0 flex-1 flex-col gap-1",
|
|
78
|
+
children: [
|
|
79
|
+
/* @__PURE__ */ jsx("span", {
|
|
80
|
+
className: "text-base font-semibold text-doom-hi",
|
|
81
|
+
children: template.label
|
|
82
|
+
}),
|
|
83
|
+
/* @__PURE__ */ jsx("span", {
|
|
84
|
+
className: "text-sm leading-relaxed text-doom-dim",
|
|
85
|
+
children: template.description
|
|
86
|
+
}),
|
|
87
|
+
/* @__PURE__ */ jsx("span", {
|
|
88
|
+
className: "font-mono text-sm text-doom-dim",
|
|
89
|
+
children: template.pluginId
|
|
90
|
+
})
|
|
91
|
+
]
|
|
92
|
+
}), choice === template.id ? /* @__PURE__ */ jsx(CheckIcon, { className: "size-4 shrink-0 text-doom-green" }) : null]
|
|
93
|
+
}, template.id))
|
|
94
|
+
}),
|
|
95
|
+
resolved.warning ? /* @__PURE__ */ jsx("output", {
|
|
96
|
+
className: "block text-sm text-doom-yellow",
|
|
97
|
+
children: resolved.warning
|
|
98
|
+
}) : null,
|
|
99
|
+
catalog.diagnostics.map((diagnostic, index) => /* @__PURE__ */ jsx("output", {
|
|
100
|
+
className: "block text-sm text-doom-yellow",
|
|
101
|
+
children: diagnostic.message
|
|
102
|
+
}, `${diagnostic.pluginId}:${index}`)),
|
|
103
|
+
configuration.error ? /* @__PURE__ */ jsx("p", {
|
|
104
|
+
role: "alert",
|
|
105
|
+
"data-testid": "template-save-error",
|
|
106
|
+
className: "text-sm text-doom-red",
|
|
107
|
+
children: configuration.error
|
|
108
|
+
}) : null,
|
|
109
|
+
/* @__PURE__ */ jsxs(SettingsActions, { children: [
|
|
110
|
+
/* @__PURE__ */ jsx(Button, {
|
|
111
|
+
"data-testid": "template-save",
|
|
112
|
+
size: "sm",
|
|
113
|
+
variant: changed ? "primary" : "outline",
|
|
114
|
+
disabled: busy || missingWorkspace || choice === void 0 || configuration.config === void 0,
|
|
115
|
+
onClick: () => {
|
|
116
|
+
if (choice !== void 0) saveTemplateDefault(choice, workspaceId).then((saved) => {
|
|
117
|
+
if (saved) {
|
|
118
|
+
setDraft(null);
|
|
119
|
+
reloadWebTemplateDecision();
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
},
|
|
123
|
+
children: configuration.saving ? "Saving…" : "Set as default"
|
|
124
|
+
}),
|
|
125
|
+
/* @__PURE__ */ jsx(Button, {
|
|
126
|
+
"data-testid": "template-inherit",
|
|
127
|
+
size: "sm",
|
|
128
|
+
variant: "ghost",
|
|
129
|
+
disabled: busy || missingWorkspace || configuration.config === void 0,
|
|
130
|
+
onClick: () => {
|
|
131
|
+
saveTemplateDefault(null, workspaceId).then((saved) => {
|
|
132
|
+
if (saved) {
|
|
133
|
+
setDraft(null);
|
|
134
|
+
reloadWebTemplateDecision();
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
},
|
|
138
|
+
children: workspaceId === void 0 ? "Use automatic fallback" : "Inherit global default"
|
|
139
|
+
}),
|
|
140
|
+
/* @__PURE__ */ jsx(Button, {
|
|
141
|
+
"data-testid": "template-reload",
|
|
142
|
+
size: "sm",
|
|
143
|
+
variant: "ghost",
|
|
144
|
+
disabled: busy,
|
|
145
|
+
onClick: () => {
|
|
146
|
+
refreshTemplateConfiguration(workspaceId).then(() => reloadWebTemplateDecision());
|
|
147
|
+
},
|
|
148
|
+
children: "Reload configuration"
|
|
149
|
+
})
|
|
150
|
+
] }),
|
|
151
|
+
/* @__PURE__ */ jsxs(SettingsNote, {
|
|
152
|
+
"data-testid": "template-origin",
|
|
153
|
+
children: [
|
|
154
|
+
"Saved to",
|
|
155
|
+
" ",
|
|
156
|
+
/* @__PURE__ */ jsx("code", {
|
|
157
|
+
className: "font-mono",
|
|
158
|
+
children: workspaceId === void 0 ? "~/.po/config.yaml" : `${configuration.config?.repoRoot ?? workspaces.byId[workspaceId]?.root ?? workspaceId}/.po/config.yaml`
|
|
159
|
+
}),
|
|
160
|
+
". Currently using",
|
|
161
|
+
" ",
|
|
162
|
+
configured === void 0 ? "automatic fallback" : /* @__PURE__ */ jsx("code", {
|
|
163
|
+
className: "font-mono",
|
|
164
|
+
children: configured
|
|
165
|
+
}),
|
|
166
|
+
" (",
|
|
167
|
+
origin,
|
|
168
|
+
")."
|
|
169
|
+
]
|
|
170
|
+
})
|
|
171
|
+
]
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
//#endregion
|
|
175
|
+
export { TemplateSettings };
|
|
176
|
+
|
|
177
|
+
//# sourceMappingURL=TemplateSettings.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TemplateSettings.mjs","names":[],"sources":["../../../../src/web/features/settings/TemplateSettings.tsx"],"sourcesContent":["import {\n Button,\n CheckIcon,\n RadioGroup,\n RadioGroupCard,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n SettingsActions,\n SettingsNote,\n SettingsSection,\n SettingsSectionDescription,\n SettingsSectionHeader,\n SettingsSectionTitle,\n} from '@agimon-ai/po-web-components';\nimport { useStore } from '@tanstack/react-store';\n\nimport { reloadWebTemplateDecision } from '../../lib/pluginCompositions';\nimport { webTemplateCatalog } from '../../lib/pluginRegistry';\nimport { resolveWebTemplate } from '../../lib/templateCatalog';\nimport { useDashboardState } from '../../stores/dashboardStateStore';\nimport {\n configuredTemplate,\n refreshTemplateConfiguration,\n saveTemplateDefault,\n useTemplateConfiguration,\n} from '../../stores/templateStore';\nimport { useWebPluginRegistry } from '../../stores/useWebPluginRegistry';\nimport { workspacesStore } from '../../stores/workspacesStore';\n\nconst WORKSPACE_TARGET = 'workspace:';\n/** Select only admitted template contributions, and make the config write destination explicit. */\nexport function TemplateSettings({\n target,\n onTargetChange,\n}: {\n target: string;\n onTargetChange: (target: string) => void;\n}) {\n useWebPluginRegistry();\n const workspaces = useStore(workspacesStore, (state) => state);\n const workspaceId = target.startsWith(WORKSPACE_TARGET) ? target.slice(WORKSPACE_TARGET.length) : undefined;\n const configuration = useTemplateConfiguration(workspaceId);\n const catalog = webTemplateCatalog(\n workspaceId === undefined ? { scope: 'global' } : { scope: 'workspace', workspaceId },\n );\n const configured = configuredTemplate(configuration);\n const resolved = resolveWebTemplate(catalog.templates, configured);\n const [draft, setDraft] = useDashboardState<{ target: string; id: string } | null>('template/draft', null);\n const choice = draft?.target === target ? draft.id : resolved.template?.id;\n const busy = configuration.saving || configuration.loading;\n const origin = configuration.config?.values['web.template']?.origin ?? 'default';\n const missingWorkspace = workspaceId !== undefined && workspaces.byId[workspaceId] === undefined;\n const changed = choice !== undefined && choice !== configured;\n return (\n <SettingsSection data-testid=\"template-settings\">\n <SettingsSectionHeader>\n <SettingsSectionTitle>Layout</SettingsSectionTitle>\n <SettingsSectionDescription>\n The arrangement Po opens with. Set it for everyone, or let one workspace choose its own.\n </SettingsSectionDescription>\n </SettingsSectionHeader>\n <div className=\"flex min-w-0 flex-wrap items-center gap-x-3 gap-y-2\">\n <span id=\"template-scope-label\" className=\"text-sm text-doom-dim\">\n Applies to\n </span>\n <Select\n value={target}\n onValueChange={(value) => {\n onTargetChange(value);\n setDraft(null);\n }}\n disabled={configuration.saving}\n >\n <SelectTrigger\n aria-labelledby=\"template-scope-label\"\n data-testid=\"template-scope\"\n className=\"w-auto min-w-56 max-w-full\"\n >\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"global\">Global default</SelectItem>\n {workspaces.order.map((id) => (\n <SelectItem key={id} value={`${WORKSPACE_TARGET}${id}`}>\n Workspace: {workspaces.byId[id]?.root ?? id}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n <RadioGroup\n aria-label=\"Layout\"\n value={choice ?? ''}\n onValueChange={(id) => setDraft({ target, id })}\n className=\"grid grid-cols-1 gap-3 sm:grid-cols-2\"\n disabled={busy || missingWorkspace}\n >\n {catalog.templates.map((template) => (\n <RadioGroupCard\n key={template.id}\n value={template.id}\n data-testid={`template-${template.id}`}\n data-selected={choice === template.id}\n className=\"flex items-start gap-2 rounded-lg p-4\"\n >\n <span className=\"flex min-w-0 flex-1 flex-col gap-1\">\n <span className=\"text-base font-semibold text-doom-hi\">{template.label}</span>\n <span className=\"text-sm leading-relaxed text-doom-dim\">{template.description}</span>\n <span className=\"font-mono text-sm text-doom-dim\">{template.pluginId}</span>\n </span>\n {choice === template.id ? <CheckIcon className=\"size-4 shrink-0 text-doom-green\" /> : null}\n </RadioGroupCard>\n ))}\n </RadioGroup>\n {resolved.warning ? <output className=\"block text-sm text-doom-yellow\">{resolved.warning}</output> : null}\n {catalog.diagnostics.map((diagnostic, index) => (\n <output key={`${diagnostic.pluginId}:${index}`} className=\"block text-sm text-doom-yellow\">\n {diagnostic.message}\n </output>\n ))}\n {configuration.error ? (\n <p role=\"alert\" data-testid=\"template-save-error\" className=\"text-sm text-doom-red\">\n {configuration.error}\n </p>\n ) : null}\n <SettingsActions>\n <Button\n data-testid=\"template-save\"\n size=\"sm\"\n variant={changed ? 'primary' : 'outline'}\n disabled={busy || missingWorkspace || choice === undefined || configuration.config === undefined}\n onClick={() => {\n if (choice !== undefined)\n void saveTemplateDefault(choice, workspaceId).then((saved) => {\n if (saved) {\n setDraft(null);\n void reloadWebTemplateDecision();\n }\n });\n }}\n >\n {configuration.saving ? 'Saving…' : 'Set as default'}\n </Button>\n <Button\n data-testid=\"template-inherit\"\n size=\"sm\"\n variant=\"ghost\"\n disabled={busy || missingWorkspace || configuration.config === undefined}\n onClick={() => {\n void saveTemplateDefault(null, workspaceId).then((saved) => {\n if (saved) {\n setDraft(null);\n void reloadWebTemplateDecision();\n }\n });\n }}\n >\n {workspaceId === undefined ? 'Use automatic fallback' : 'Inherit global default'}\n </Button>\n <Button\n data-testid=\"template-reload\"\n size=\"sm\"\n variant=\"ghost\"\n disabled={busy}\n onClick={() => {\n void refreshTemplateConfiguration(workspaceId).then(() => reloadWebTemplateDecision());\n }}\n >\n Reload configuration\n </Button>\n </SettingsActions>\n <SettingsNote data-testid=\"template-origin\">\n Saved to{' '}\n <code className=\"font-mono\">\n {workspaceId === undefined\n ? '~/.po/config.yaml'\n : `${configuration.config?.repoRoot ?? workspaces.byId[workspaceId]?.root ?? workspaceId}/.po/config.yaml`}\n </code>\n . Currently using{' '}\n {configured === undefined ? 'automatic fallback' : <code className=\"font-mono\">{configured}</code>} ({origin}).\n </SettingsNote>\n </SettingsSection>\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
const require_remoteAccessStore = require("../../stores/remoteAccessStore.cjs");
|
|
2
|
+
const require_dashboardStateStore = require("../../stores/dashboardStateStore.cjs");
|
|
3
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
4
|
+
let _agimon_ai_po_web_components = require("@agimon-ai/po-web-components");
|
|
5
|
+
//#region src/web/features/settings/TunnelSettings.tsx
|
|
6
|
+
const PUBLIC_HOSTNAME = /^(?=.{1,253}$)(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$/iu;
|
|
7
|
+
function namedTunnel(tunnel) {
|
|
8
|
+
return tunnel.kind === "named" ? tunnel : {
|
|
9
|
+
kind: "named",
|
|
10
|
+
hostname: ""
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
function optional(value) {
|
|
14
|
+
const trimmed = value.trim();
|
|
15
|
+
return trimmed === "" ? void 0 : trimmed;
|
|
16
|
+
}
|
|
17
|
+
const TUNNEL_KINDS = [{
|
|
18
|
+
kind: "quick",
|
|
19
|
+
label: "Quick tunnel",
|
|
20
|
+
detail: "No account needed. The address changes each time."
|
|
21
|
+
}, {
|
|
22
|
+
kind: "named",
|
|
23
|
+
label: "Named tunnel",
|
|
24
|
+
detail: "Your own domain, and the address stays put."
|
|
25
|
+
}];
|
|
26
|
+
/** Selects a rotating quick tunnel or the stable named tunnel needed for a custom domain and passkeys. */
|
|
27
|
+
function TunnelSettings({ tunnel }) {
|
|
28
|
+
const [draft, setDraft] = require_dashboardStateStore.useDashboardState("tunnel/draft", tunnel);
|
|
29
|
+
const [lastTunnel, setLastTunnel] = require_dashboardStateStore.useDashboardState("tunnel/source", tunnel);
|
|
30
|
+
const [busy, setBusy, busyState] = require_dashboardStateStore.useDashboardState("tunnel/saving", false);
|
|
31
|
+
if (lastTunnel !== tunnel && JSON.stringify(draft) === JSON.stringify(lastTunnel)) {
|
|
32
|
+
setLastTunnel(tunnel);
|
|
33
|
+
setDraft(tunnel);
|
|
34
|
+
}
|
|
35
|
+
const hostname = draft.kind === "named" ? draft.hostname.trim() : "";
|
|
36
|
+
const invalidHostname = draft.kind === "named" && !PUBLIC_HOSTNAME.test(hostname);
|
|
37
|
+
const changed = JSON.stringify(draft) !== JSON.stringify(tunnel);
|
|
38
|
+
function updateNamed(patch) {
|
|
39
|
+
setDraft((current) => ({
|
|
40
|
+
...namedTunnel(current),
|
|
41
|
+
...patch
|
|
42
|
+
}));
|
|
43
|
+
}
|
|
44
|
+
async function save() {
|
|
45
|
+
if (busyState.state) return;
|
|
46
|
+
setBusy(true);
|
|
47
|
+
const named = namedTunnel(draft);
|
|
48
|
+
const tokenFile = optional(named.tokenFile ?? "");
|
|
49
|
+
const name = optional(named.name ?? "");
|
|
50
|
+
const configFile = optional(named.configFile ?? "");
|
|
51
|
+
const next = draft.kind === "quick" ? draft : {
|
|
52
|
+
kind: "named",
|
|
53
|
+
hostname,
|
|
54
|
+
...tokenFile === void 0 ? {} : { tokenFile },
|
|
55
|
+
...name === void 0 ? {} : { name },
|
|
56
|
+
...configFile === void 0 ? {} : { configFile }
|
|
57
|
+
};
|
|
58
|
+
try {
|
|
59
|
+
if (await require_remoteAccessStore.updateRemoteSettings({ tunnel: next })) {
|
|
60
|
+
setLastTunnel(next);
|
|
61
|
+
setDraft((current) => current === draft ? next : current);
|
|
62
|
+
}
|
|
63
|
+
} finally {
|
|
64
|
+
setBusy(false);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_agimon_ai_po_web_components.SettingsSection, {
|
|
68
|
+
"data-testid": "remote-tunnel-settings",
|
|
69
|
+
children: [
|
|
70
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_agimon_ai_po_web_components.SettingsSectionHeader, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.SettingsSectionTitle, { children: "Tunnel" }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.SettingsSectionDescription, { children: "How your other devices reach Po. A named tunnel gives you a stable address, which passkeys need." })] }),
|
|
71
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.RadioGroup, {
|
|
72
|
+
value: draft.kind,
|
|
73
|
+
onValueChange: (kind) => setDraft(kind === "named" ? namedTunnel(draft) : { kind: "quick" }),
|
|
74
|
+
className: "grid grid-cols-1 gap-3 min-[480px]:grid-cols-2",
|
|
75
|
+
"aria-label": "Tunnel type",
|
|
76
|
+
children: TUNNEL_KINDS.map((option) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_agimon_ai_po_web_components.RadioGroupCard, {
|
|
77
|
+
value: option.kind,
|
|
78
|
+
"data-testid": `remote-tunnel-${option.kind}`,
|
|
79
|
+
className: "flex items-start gap-2 rounded-lg p-4",
|
|
80
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
81
|
+
className: "flex min-w-0 flex-1 flex-col gap-1",
|
|
82
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
83
|
+
className: "text-base font-semibold text-doom-hi",
|
|
84
|
+
children: option.label
|
|
85
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
86
|
+
className: "text-sm leading-relaxed text-doom-dim",
|
|
87
|
+
children: option.detail
|
|
88
|
+
})]
|
|
89
|
+
}), draft.kind === option.kind ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.CheckIcon, { className: "size-4 shrink-0 text-doom-green" }) : null]
|
|
90
|
+
}, option.kind))
|
|
91
|
+
}),
|
|
92
|
+
draft.kind === "named" ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_agimon_ai_po_web_components.SettingsCard, { children: [
|
|
93
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.SettingsField, {
|
|
94
|
+
id: "remote-tunnel-hostname",
|
|
95
|
+
label: "Hostname",
|
|
96
|
+
description: invalidHostname ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
97
|
+
className: "text-doom-red",
|
|
98
|
+
children: "Enter the hostname only, without https://, a port or a path."
|
|
99
|
+
}) : "The domain your devices will open.",
|
|
100
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.Input, {
|
|
101
|
+
id: "remote-tunnel-hostname",
|
|
102
|
+
"data-testid": "remote-tunnel-hostname",
|
|
103
|
+
value: draft.hostname,
|
|
104
|
+
placeholder: "po.example.com",
|
|
105
|
+
"aria-invalid": invalidHostname,
|
|
106
|
+
spellCheck: false,
|
|
107
|
+
onChange: (event) => updateNamed({ hostname: event.target.value }),
|
|
108
|
+
className: "font-mono text-sm"
|
|
109
|
+
})
|
|
110
|
+
}),
|
|
111
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.SettingsField, {
|
|
112
|
+
id: "remote-tunnel-token-file",
|
|
113
|
+
label: "Token file",
|
|
114
|
+
description: "A local file holding your Cloudflare connector token. Po reads the file and never stores the token itself.",
|
|
115
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.Input, {
|
|
116
|
+
id: "remote-tunnel-token-file",
|
|
117
|
+
"data-testid": "remote-tunnel-token-file",
|
|
118
|
+
value: draft.tokenFile ?? "",
|
|
119
|
+
placeholder: "~/.cloudflared/po.token",
|
|
120
|
+
spellCheck: false,
|
|
121
|
+
onChange: (event) => updateNamed({ tokenFile: event.target.value }),
|
|
122
|
+
className: "font-mono text-sm"
|
|
123
|
+
})
|
|
124
|
+
}),
|
|
125
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("details", {
|
|
126
|
+
className: "group",
|
|
127
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("summary", {
|
|
128
|
+
className: "cursor-pointer px-5 py-3 text-sm text-doom-dim hover:text-doom-hi",
|
|
129
|
+
children: "Tunnel you manage with cloudflared"
|
|
130
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
131
|
+
className: "flex flex-col divide-y divide-doom-border-soft border-t border-doom-border-soft",
|
|
132
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.SettingsField, {
|
|
133
|
+
id: "remote-tunnel-name",
|
|
134
|
+
label: "Tunnel name",
|
|
135
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.Input, {
|
|
136
|
+
id: "remote-tunnel-name",
|
|
137
|
+
"data-testid": "remote-tunnel-name",
|
|
138
|
+
value: draft.name ?? "",
|
|
139
|
+
placeholder: "po",
|
|
140
|
+
spellCheck: false,
|
|
141
|
+
onChange: (event) => updateNamed({ name: event.target.value }),
|
|
142
|
+
className: "font-mono text-sm"
|
|
143
|
+
})
|
|
144
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.SettingsField, {
|
|
145
|
+
id: "remote-tunnel-config-file",
|
|
146
|
+
label: "Config file",
|
|
147
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.Input, {
|
|
148
|
+
id: "remote-tunnel-config-file",
|
|
149
|
+
"data-testid": "remote-tunnel-config-file",
|
|
150
|
+
value: draft.configFile ?? "",
|
|
151
|
+
placeholder: "~/.cloudflared/config.yml",
|
|
152
|
+
spellCheck: false,
|
|
153
|
+
onChange: (event) => updateNamed({ configFile: event.target.value }),
|
|
154
|
+
className: "font-mono text-sm"
|
|
155
|
+
})
|
|
156
|
+
})]
|
|
157
|
+
})]
|
|
158
|
+
})
|
|
159
|
+
] }) : null,
|
|
160
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_agimon_ai_po_web_components.SettingsActions, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.Button, {
|
|
161
|
+
variant: changed && !invalidHostname ? "primary" : "outline",
|
|
162
|
+
size: "sm",
|
|
163
|
+
"data-testid": "remote-tunnel-save",
|
|
164
|
+
loading: busy,
|
|
165
|
+
disabled: busy || !changed || invalidHostname,
|
|
166
|
+
onClick: () => void save(),
|
|
167
|
+
children: "Save tunnel"
|
|
168
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_agimon_ai_po_web_components.SettingsNote, { children: [
|
|
169
|
+
"Takes effect the next time remote access starts. Install ",
|
|
170
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("code", {
|
|
171
|
+
className: "font-mono",
|
|
172
|
+
children: "cloudflared"
|
|
173
|
+
}),
|
|
174
|
+
" on this machine first."
|
|
175
|
+
] })] })
|
|
176
|
+
]
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
//#endregion
|
|
180
|
+
exports.TunnelSettings = TunnelSettings;
|
|
181
|
+
|
|
182
|
+
//# sourceMappingURL=TunnelSettings.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TunnelSettings.cjs","names":["useDashboardState","updateRemoteSettings","SettingsSection","SettingsSectionHeader","SettingsSectionTitle","SettingsSectionDescription","RadioGroup","RadioGroupCard","CheckIcon","SettingsCard","SettingsField","Input","SettingsActions","Button","SettingsNote"],"sources":["../../../../src/web/features/settings/TunnelSettings.tsx"],"sourcesContent":["import {\n Button,\n CheckIcon,\n Input,\n RadioGroup,\n RadioGroupCard,\n SettingsActions,\n SettingsCard,\n SettingsField,\n SettingsNote,\n SettingsSection,\n SettingsSectionDescription,\n SettingsSectionHeader,\n SettingsSectionTitle,\n} from '@agimon-ai/po-web-components';\n\nimport type { TunnelConfig } from '../../../types/remoteAccess';\nimport { useDashboardState } from '../../stores/dashboardStateStore';\nimport { updateRemoteSettings } from '../../stores/remoteAccessStore';\n\nconst PUBLIC_HOSTNAME =\n /^(?=.{1,253}$)(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$/iu;\n\nfunction namedTunnel(tunnel: TunnelConfig): Extract<TunnelConfig, { kind: 'named' }> {\n return tunnel.kind === 'named' ? tunnel : { kind: 'named', hostname: '' };\n}\n\nfunction optional(value: string): string | undefined {\n const trimmed = value.trim();\n return trimmed === '' ? undefined : trimmed;\n}\n\nconst TUNNEL_KINDS = [\n { kind: 'quick', label: 'Quick tunnel', detail: 'No account needed. The address changes each time.' },\n { kind: 'named', label: 'Named tunnel', detail: 'Your own domain, and the address stays put.' },\n] as const;\n\n/** Selects a rotating quick tunnel or the stable named tunnel needed for a custom domain and passkeys. */\nexport function TunnelSettings({ tunnel }: { tunnel: TunnelConfig }) {\n const [draft, setDraft] = useDashboardState<TunnelConfig>('tunnel/draft', tunnel);\n\n // Refreshes must not replace an unsaved draft, including after an app remount.\n const [lastTunnel, setLastTunnel] = useDashboardState('tunnel/source', tunnel);\n const [busy, setBusy, busyState] = useDashboardState('tunnel/saving', false);\n if (lastTunnel !== tunnel && JSON.stringify(draft) === JSON.stringify(lastTunnel)) {\n setLastTunnel(tunnel);\n setDraft(tunnel);\n }\n\n const hostname = draft.kind === 'named' ? draft.hostname.trim() : '';\n const invalidHostname = draft.kind === 'named' && !PUBLIC_HOSTNAME.test(hostname);\n const changed = JSON.stringify(draft) !== JSON.stringify(tunnel);\n\n function updateNamed(patch: Partial<Extract<TunnelConfig, { kind: 'named' }>>): void {\n setDraft((current) => ({ ...namedTunnel(current), ...patch }));\n }\n\n async function save(): Promise<void> {\n if (busyState.state) return;\n setBusy(true);\n const named = namedTunnel(draft);\n const tokenFile = optional(named.tokenFile ?? '');\n const name = optional(named.name ?? '');\n const configFile = optional(named.configFile ?? '');\n const next: TunnelConfig =\n draft.kind === 'quick'\n ? draft\n : {\n kind: 'named',\n hostname,\n ...(tokenFile === undefined ? {} : { tokenFile }),\n ...(name === undefined ? {} : { name }),\n ...(configFile === undefined ? {} : { configFile }),\n };\n try {\n if (await updateRemoteSettings({ tunnel: next })) {\n setLastTunnel(next);\n setDraft((current) => (current === draft ? next : current));\n }\n } finally {\n setBusy(false);\n }\n }\n\n return (\n <SettingsSection data-testid=\"remote-tunnel-settings\">\n <SettingsSectionHeader>\n <SettingsSectionTitle>Tunnel</SettingsSectionTitle>\n <SettingsSectionDescription>\n How your other devices reach Po. A named tunnel gives you a stable address, which passkeys need.\n </SettingsSectionDescription>\n </SettingsSectionHeader>\n\n <RadioGroup\n value={draft.kind}\n onValueChange={(kind) => setDraft(kind === 'named' ? namedTunnel(draft) : { kind: 'quick' })}\n className=\"grid grid-cols-1 gap-3 min-[480px]:grid-cols-2\"\n aria-label=\"Tunnel type\"\n >\n {TUNNEL_KINDS.map((option) => (\n <RadioGroupCard\n key={option.kind}\n value={option.kind}\n data-testid={`remote-tunnel-${option.kind}`}\n className=\"flex items-start gap-2 rounded-lg p-4\"\n >\n <span className=\"flex min-w-0 flex-1 flex-col gap-1\">\n <span className=\"text-base font-semibold text-doom-hi\">{option.label}</span>\n <span className=\"text-sm leading-relaxed text-doom-dim\">{option.detail}</span>\n </span>\n {draft.kind === option.kind ? <CheckIcon className=\"size-4 shrink-0 text-doom-green\" /> : null}\n </RadioGroupCard>\n ))}\n </RadioGroup>\n\n {draft.kind === 'named' ? (\n <SettingsCard>\n <SettingsField\n id=\"remote-tunnel-hostname\"\n label=\"Hostname\"\n description={\n invalidHostname ? (\n <span className=\"text-doom-red\">Enter the hostname only, without https://, a port or a path.</span>\n ) : (\n 'The domain your devices will open.'\n )\n }\n >\n <Input\n id=\"remote-tunnel-hostname\"\n data-testid=\"remote-tunnel-hostname\"\n value={draft.hostname}\n placeholder=\"po.example.com\"\n aria-invalid={invalidHostname}\n spellCheck={false}\n onChange={(event) => updateNamed({ hostname: event.target.value })}\n className=\"font-mono text-sm\"\n />\n </SettingsField>\n <SettingsField\n id=\"remote-tunnel-token-file\"\n label=\"Token file\"\n description=\"A local file holding your Cloudflare connector token. Po reads the file and never stores the token itself.\"\n >\n <Input\n id=\"remote-tunnel-token-file\"\n data-testid=\"remote-tunnel-token-file\"\n value={draft.tokenFile ?? ''}\n placeholder=\"~/.cloudflared/po.token\"\n spellCheck={false}\n onChange={(event) => updateNamed({ tokenFile: event.target.value })}\n className=\"font-mono text-sm\"\n />\n </SettingsField>\n <details className=\"group\">\n <summary className=\"cursor-pointer px-5 py-3 text-sm text-doom-dim hover:text-doom-hi\">\n Tunnel you manage with cloudflared\n </summary>\n <div className=\"flex flex-col divide-y divide-doom-border-soft border-t border-doom-border-soft\">\n <SettingsField id=\"remote-tunnel-name\" label=\"Tunnel name\">\n <Input\n id=\"remote-tunnel-name\"\n data-testid=\"remote-tunnel-name\"\n value={draft.name ?? ''}\n placeholder=\"po\"\n spellCheck={false}\n onChange={(event) => updateNamed({ name: event.target.value })}\n className=\"font-mono text-sm\"\n />\n </SettingsField>\n <SettingsField id=\"remote-tunnel-config-file\" label=\"Config file\">\n <Input\n id=\"remote-tunnel-config-file\"\n data-testid=\"remote-tunnel-config-file\"\n value={draft.configFile ?? ''}\n placeholder=\"~/.cloudflared/config.yml\"\n spellCheck={false}\n onChange={(event) => updateNamed({ configFile: event.target.value })}\n className=\"font-mono text-sm\"\n />\n </SettingsField>\n </div>\n </details>\n </SettingsCard>\n ) : null}\n\n <SettingsActions>\n <Button\n variant={changed && !invalidHostname ? 'primary' : 'outline'}\n size=\"sm\"\n data-testid=\"remote-tunnel-save\"\n loading={busy}\n disabled={busy || !changed || invalidHostname}\n onClick={() => void save()}\n >\n Save tunnel\n </Button>\n <SettingsNote>\n Takes effect the next time remote access starts. Install <code className=\"font-mono\">cloudflared</code> on\n this machine first.\n </SettingsNote>\n </SettingsActions>\n </SettingsSection>\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { TunnelConfig } from "../../../types/remoteAccess.mjs";
|
|
2
|
+
//#region src/web/features/settings/TunnelSettings.d.ts
|
|
3
|
+
/** Selects a rotating quick tunnel or the stable named tunnel needed for a custom domain and passkeys. */
|
|
4
|
+
export declare function TunnelSettings({ tunnel }: {
|
|
5
|
+
tunnel: TunnelConfig;
|
|
6
|
+
}): import("react").JSX.Element;
|
|
7
|
+
//#endregion
|
|
8
|
+
//# sourceMappingURL=TunnelSettings.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TunnelSettings.d.mts","names":[],"sources":["../../../../src/web/features/settings/TunnelSettings.tsx"],"mappings":";;;wBAsCgB,iBAAiB;EAAY,QAAQ;oBAAc,IAAA"}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
import { updateRemoteSettings } from "../../stores/remoteAccessStore.mjs";
|
|
2
|
+
import { useDashboardState } from "../../stores/dashboardStateStore.mjs";
|
|
3
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
4
|
+
import { Button, CheckIcon, Input, RadioGroup, RadioGroupCard, SettingsActions, SettingsCard, SettingsField, SettingsNote, SettingsSection, SettingsSectionDescription, SettingsSectionHeader, SettingsSectionTitle } from "@agimon-ai/po-web-components";
|
|
5
|
+
//#region src/web/features/settings/TunnelSettings.tsx
|
|
6
|
+
const PUBLIC_HOSTNAME = /^(?=.{1,253}$)(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$/iu;
|
|
7
|
+
function namedTunnel(tunnel) {
|
|
8
|
+
return tunnel.kind === "named" ? tunnel : {
|
|
9
|
+
kind: "named",
|
|
10
|
+
hostname: ""
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
function optional(value) {
|
|
14
|
+
const trimmed = value.trim();
|
|
15
|
+
return trimmed === "" ? void 0 : trimmed;
|
|
16
|
+
}
|
|
17
|
+
const TUNNEL_KINDS = [{
|
|
18
|
+
kind: "quick",
|
|
19
|
+
label: "Quick tunnel",
|
|
20
|
+
detail: "No account needed. The address changes each time."
|
|
21
|
+
}, {
|
|
22
|
+
kind: "named",
|
|
23
|
+
label: "Named tunnel",
|
|
24
|
+
detail: "Your own domain, and the address stays put."
|
|
25
|
+
}];
|
|
26
|
+
/** Selects a rotating quick tunnel or the stable named tunnel needed for a custom domain and passkeys. */
|
|
27
|
+
function TunnelSettings({ tunnel }) {
|
|
28
|
+
const [draft, setDraft] = useDashboardState("tunnel/draft", tunnel);
|
|
29
|
+
const [lastTunnel, setLastTunnel] = useDashboardState("tunnel/source", tunnel);
|
|
30
|
+
const [busy, setBusy, busyState] = useDashboardState("tunnel/saving", false);
|
|
31
|
+
if (lastTunnel !== tunnel && JSON.stringify(draft) === JSON.stringify(lastTunnel)) {
|
|
32
|
+
setLastTunnel(tunnel);
|
|
33
|
+
setDraft(tunnel);
|
|
34
|
+
}
|
|
35
|
+
const hostname = draft.kind === "named" ? draft.hostname.trim() : "";
|
|
36
|
+
const invalidHostname = draft.kind === "named" && !PUBLIC_HOSTNAME.test(hostname);
|
|
37
|
+
const changed = JSON.stringify(draft) !== JSON.stringify(tunnel);
|
|
38
|
+
function updateNamed(patch) {
|
|
39
|
+
setDraft((current) => ({
|
|
40
|
+
...namedTunnel(current),
|
|
41
|
+
...patch
|
|
42
|
+
}));
|
|
43
|
+
}
|
|
44
|
+
async function save() {
|
|
45
|
+
if (busyState.state) return;
|
|
46
|
+
setBusy(true);
|
|
47
|
+
const named = namedTunnel(draft);
|
|
48
|
+
const tokenFile = optional(named.tokenFile ?? "");
|
|
49
|
+
const name = optional(named.name ?? "");
|
|
50
|
+
const configFile = optional(named.configFile ?? "");
|
|
51
|
+
const next = draft.kind === "quick" ? draft : {
|
|
52
|
+
kind: "named",
|
|
53
|
+
hostname,
|
|
54
|
+
...tokenFile === void 0 ? {} : { tokenFile },
|
|
55
|
+
...name === void 0 ? {} : { name },
|
|
56
|
+
...configFile === void 0 ? {} : { configFile }
|
|
57
|
+
};
|
|
58
|
+
try {
|
|
59
|
+
if (await updateRemoteSettings({ tunnel: next })) {
|
|
60
|
+
setLastTunnel(next);
|
|
61
|
+
setDraft((current) => current === draft ? next : current);
|
|
62
|
+
}
|
|
63
|
+
} finally {
|
|
64
|
+
setBusy(false);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return /* @__PURE__ */ jsxs(SettingsSection, {
|
|
68
|
+
"data-testid": "remote-tunnel-settings",
|
|
69
|
+
children: [
|
|
70
|
+
/* @__PURE__ */ jsxs(SettingsSectionHeader, { children: [/* @__PURE__ */ jsx(SettingsSectionTitle, { children: "Tunnel" }), /* @__PURE__ */ jsx(SettingsSectionDescription, { children: "How your other devices reach Po. A named tunnel gives you a stable address, which passkeys need." })] }),
|
|
71
|
+
/* @__PURE__ */ jsx(RadioGroup, {
|
|
72
|
+
value: draft.kind,
|
|
73
|
+
onValueChange: (kind) => setDraft(kind === "named" ? namedTunnel(draft) : { kind: "quick" }),
|
|
74
|
+
className: "grid grid-cols-1 gap-3 min-[480px]:grid-cols-2",
|
|
75
|
+
"aria-label": "Tunnel type",
|
|
76
|
+
children: TUNNEL_KINDS.map((option) => /* @__PURE__ */ jsxs(RadioGroupCard, {
|
|
77
|
+
value: option.kind,
|
|
78
|
+
"data-testid": `remote-tunnel-${option.kind}`,
|
|
79
|
+
className: "flex items-start gap-2 rounded-lg p-4",
|
|
80
|
+
children: [/* @__PURE__ */ jsxs("span", {
|
|
81
|
+
className: "flex min-w-0 flex-1 flex-col gap-1",
|
|
82
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
83
|
+
className: "text-base font-semibold text-doom-hi",
|
|
84
|
+
children: option.label
|
|
85
|
+
}), /* @__PURE__ */ jsx("span", {
|
|
86
|
+
className: "text-sm leading-relaxed text-doom-dim",
|
|
87
|
+
children: option.detail
|
|
88
|
+
})]
|
|
89
|
+
}), draft.kind === option.kind ? /* @__PURE__ */ jsx(CheckIcon, { className: "size-4 shrink-0 text-doom-green" }) : null]
|
|
90
|
+
}, option.kind))
|
|
91
|
+
}),
|
|
92
|
+
draft.kind === "named" ? /* @__PURE__ */ jsxs(SettingsCard, { children: [
|
|
93
|
+
/* @__PURE__ */ jsx(SettingsField, {
|
|
94
|
+
id: "remote-tunnel-hostname",
|
|
95
|
+
label: "Hostname",
|
|
96
|
+
description: invalidHostname ? /* @__PURE__ */ jsx("span", {
|
|
97
|
+
className: "text-doom-red",
|
|
98
|
+
children: "Enter the hostname only, without https://, a port or a path."
|
|
99
|
+
}) : "The domain your devices will open.",
|
|
100
|
+
children: /* @__PURE__ */ jsx(Input, {
|
|
101
|
+
id: "remote-tunnel-hostname",
|
|
102
|
+
"data-testid": "remote-tunnel-hostname",
|
|
103
|
+
value: draft.hostname,
|
|
104
|
+
placeholder: "po.example.com",
|
|
105
|
+
"aria-invalid": invalidHostname,
|
|
106
|
+
spellCheck: false,
|
|
107
|
+
onChange: (event) => updateNamed({ hostname: event.target.value }),
|
|
108
|
+
className: "font-mono text-sm"
|
|
109
|
+
})
|
|
110
|
+
}),
|
|
111
|
+
/* @__PURE__ */ jsx(SettingsField, {
|
|
112
|
+
id: "remote-tunnel-token-file",
|
|
113
|
+
label: "Token file",
|
|
114
|
+
description: "A local file holding your Cloudflare connector token. Po reads the file and never stores the token itself.",
|
|
115
|
+
children: /* @__PURE__ */ jsx(Input, {
|
|
116
|
+
id: "remote-tunnel-token-file",
|
|
117
|
+
"data-testid": "remote-tunnel-token-file",
|
|
118
|
+
value: draft.tokenFile ?? "",
|
|
119
|
+
placeholder: "~/.cloudflared/po.token",
|
|
120
|
+
spellCheck: false,
|
|
121
|
+
onChange: (event) => updateNamed({ tokenFile: event.target.value }),
|
|
122
|
+
className: "font-mono text-sm"
|
|
123
|
+
})
|
|
124
|
+
}),
|
|
125
|
+
/* @__PURE__ */ jsxs("details", {
|
|
126
|
+
className: "group",
|
|
127
|
+
children: [/* @__PURE__ */ jsx("summary", {
|
|
128
|
+
className: "cursor-pointer px-5 py-3 text-sm text-doom-dim hover:text-doom-hi",
|
|
129
|
+
children: "Tunnel you manage with cloudflared"
|
|
130
|
+
}), /* @__PURE__ */ jsxs("div", {
|
|
131
|
+
className: "flex flex-col divide-y divide-doom-border-soft border-t border-doom-border-soft",
|
|
132
|
+
children: [/* @__PURE__ */ jsx(SettingsField, {
|
|
133
|
+
id: "remote-tunnel-name",
|
|
134
|
+
label: "Tunnel name",
|
|
135
|
+
children: /* @__PURE__ */ jsx(Input, {
|
|
136
|
+
id: "remote-tunnel-name",
|
|
137
|
+
"data-testid": "remote-tunnel-name",
|
|
138
|
+
value: draft.name ?? "",
|
|
139
|
+
placeholder: "po",
|
|
140
|
+
spellCheck: false,
|
|
141
|
+
onChange: (event) => updateNamed({ name: event.target.value }),
|
|
142
|
+
className: "font-mono text-sm"
|
|
143
|
+
})
|
|
144
|
+
}), /* @__PURE__ */ jsx(SettingsField, {
|
|
145
|
+
id: "remote-tunnel-config-file",
|
|
146
|
+
label: "Config file",
|
|
147
|
+
children: /* @__PURE__ */ jsx(Input, {
|
|
148
|
+
id: "remote-tunnel-config-file",
|
|
149
|
+
"data-testid": "remote-tunnel-config-file",
|
|
150
|
+
value: draft.configFile ?? "",
|
|
151
|
+
placeholder: "~/.cloudflared/config.yml",
|
|
152
|
+
spellCheck: false,
|
|
153
|
+
onChange: (event) => updateNamed({ configFile: event.target.value }),
|
|
154
|
+
className: "font-mono text-sm"
|
|
155
|
+
})
|
|
156
|
+
})]
|
|
157
|
+
})]
|
|
158
|
+
})
|
|
159
|
+
] }) : null,
|
|
160
|
+
/* @__PURE__ */ jsxs(SettingsActions, { children: [/* @__PURE__ */ jsx(Button, {
|
|
161
|
+
variant: changed && !invalidHostname ? "primary" : "outline",
|
|
162
|
+
size: "sm",
|
|
163
|
+
"data-testid": "remote-tunnel-save",
|
|
164
|
+
loading: busy,
|
|
165
|
+
disabled: busy || !changed || invalidHostname,
|
|
166
|
+
onClick: () => void save(),
|
|
167
|
+
children: "Save tunnel"
|
|
168
|
+
}), /* @__PURE__ */ jsxs(SettingsNote, { children: [
|
|
169
|
+
"Takes effect the next time remote access starts. Install ",
|
|
170
|
+
/* @__PURE__ */ jsx("code", {
|
|
171
|
+
className: "font-mono",
|
|
172
|
+
children: "cloudflared"
|
|
173
|
+
}),
|
|
174
|
+
" on this machine first."
|
|
175
|
+
] })] })
|
|
176
|
+
]
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
//#endregion
|
|
180
|
+
export { TunnelSettings };
|
|
181
|
+
|
|
182
|
+
//# sourceMappingURL=TunnelSettings.mjs.map
|