@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,390 @@
|
|
|
1
|
+
import { leaderGroup } from "../../lib/leaderTree.mjs";
|
|
2
|
+
import { paletteCommands, pluginLeaderBindings } from "../../lib/pluginRegistry.mjs";
|
|
3
|
+
import { sendFrame } from "../../lib/transport.mjs";
|
|
4
|
+
import { focusPrompt } from "../../lib/promptFocus.mjs";
|
|
5
|
+
import { sessionsStore } from "../../stores/sessionsStore.mjs";
|
|
6
|
+
import { runCommand, useActiveSession } from "../../stores/sessionStore.mjs";
|
|
7
|
+
import { closePalette, paletteStore, setPalettePath, togglePalette } from "../../stores/paletteStore.mjs";
|
|
8
|
+
import { openTransientTab } from "../../stores/transientTabsStore.mjs";
|
|
9
|
+
import { useOpenTab } from "../../stores/useOpenTab.mjs";
|
|
10
|
+
import { useWebPluginRegistry } from "../../stores/useWebPluginRegistry.mjs";
|
|
11
|
+
import { useEffect, useMemo, useRef, useState } from "react";
|
|
12
|
+
import { useStore } from "@tanstack/react-store";
|
|
13
|
+
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
14
|
+
import { CommandEmpty, CommandFooter, CommandGroupLabel, CommandHeader, CommandInput, CommandItem, CommandItemLabel, CommandList, Dialog, DialogContent, DialogTitle, Kbd, OptionLabel, OptionRow, StatusBadge, cn } from "@agimon-ai/po-web-components";
|
|
15
|
+
//#region src/web/features/leader/CommandPalette.tsx
|
|
16
|
+
const LEADER_PREFIX = "SPC";
|
|
17
|
+
const SEARCH_KEY = "/";
|
|
18
|
+
const LEADER_KEY = /^[a-z0-9]$/;
|
|
19
|
+
function pathLabel(keys) {
|
|
20
|
+
return [LEADER_PREFIX, ...keys].join(" ");
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Leader Space, as much of it as a browser can honestly show.
|
|
24
|
+
*
|
|
25
|
+
* The session's own leader tree never reaches an RPC client, so the tree here
|
|
26
|
+
* is what the installed web plugins declared: each package's cockpit half of
|
|
27
|
+
* the key paths its TUI documents. Keys walk the tree the way the TUI does,
|
|
28
|
+
* backspace climbs, and the slash search is the road to the commands no
|
|
29
|
+
* package has put on a key. The surface is a modal dialog, so focus comes
|
|
30
|
+
* back to wherever it was (usually the composer) when it closes.
|
|
31
|
+
*/
|
|
32
|
+
function CommandPalette() {
|
|
33
|
+
useWebPluginRegistry();
|
|
34
|
+
const commands = useActiveSession((state) => state.commands);
|
|
35
|
+
const { open, path } = useStore(paletteStore);
|
|
36
|
+
const activeId = useStore(sessionsStore, (state) => state.activeId);
|
|
37
|
+
const openTab = useOpenTab();
|
|
38
|
+
const openTransient = (tab) => {
|
|
39
|
+
if (activeId === null) return;
|
|
40
|
+
openTransientTab(activeId, tab);
|
|
41
|
+
openTab(tab.id);
|
|
42
|
+
};
|
|
43
|
+
const [search, setSearch] = useState("");
|
|
44
|
+
const [selected, setSelected] = useState(0);
|
|
45
|
+
const surface = useRef(null);
|
|
46
|
+
const searchInput = useRef(null);
|
|
47
|
+
useEffect(() => {
|
|
48
|
+
const onKey = (event) => {
|
|
49
|
+
if ((event.key === "k" || event.key === " ") && (event.ctrlKey || event.metaKey)) {
|
|
50
|
+
event.preventDefault();
|
|
51
|
+
togglePalette();
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
window.addEventListener("keydown", onKey);
|
|
55
|
+
return () => window.removeEventListener("keydown", onKey);
|
|
56
|
+
}, []);
|
|
57
|
+
const [wasOpen, setWasOpen] = useState(open);
|
|
58
|
+
if (wasOpen !== open) {
|
|
59
|
+
setWasOpen(open);
|
|
60
|
+
if (open) {
|
|
61
|
+
setSearch("");
|
|
62
|
+
setSelected(0);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
const keys = useMemo(() => path.split(""), [path]);
|
|
66
|
+
const bindings = pluginLeaderBindings();
|
|
67
|
+
const group = useMemo(() => leaderGroup(bindings, keys) ?? leaderGroup(bindings, []), [bindings, keys]);
|
|
68
|
+
const options = group?.options ?? [];
|
|
69
|
+
const needle = search.trim().toLowerCase();
|
|
70
|
+
const searching = needle.length > 0;
|
|
71
|
+
const matches = useMemo(() => searching ? commands.filter((entry) => entry.name.toLowerCase().includes(needle)) : [], [
|
|
72
|
+
commands,
|
|
73
|
+
needle,
|
|
74
|
+
searching
|
|
75
|
+
]);
|
|
76
|
+
const pluginEntries = keys.length === 0 && !searching ? paletteCommands() : [];
|
|
77
|
+
const rowCount = searching ? matches.length : options.length;
|
|
78
|
+
const cursor = Math.min(selected, Math.max(rowCount - 1, 0));
|
|
79
|
+
const current = searching ? void 0 : options[cursor];
|
|
80
|
+
const currentMatch = searching ? matches[cursor] : void 0;
|
|
81
|
+
const fire = (binding) => {
|
|
82
|
+
closePalette();
|
|
83
|
+
if ("command" in binding) {
|
|
84
|
+
runCommand(binding.command);
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
binding.run({
|
|
88
|
+
sessionId: activeId,
|
|
89
|
+
openTab,
|
|
90
|
+
openTransientTab: openTransient,
|
|
91
|
+
sendSessionFrame: sendFrame
|
|
92
|
+
});
|
|
93
|
+
};
|
|
94
|
+
const descend = (option, from = keys) => {
|
|
95
|
+
if (option.binding) {
|
|
96
|
+
fire(option.binding);
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
setPalettePath([...from, option.key].join(""));
|
|
100
|
+
setSelected(0);
|
|
101
|
+
};
|
|
102
|
+
const climb = () => {
|
|
103
|
+
if (keys.length === 0) {
|
|
104
|
+
closePalette();
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
setPalettePath(keys.slice(0, -1).join(""));
|
|
108
|
+
setSelected(0);
|
|
109
|
+
};
|
|
110
|
+
const invoke = (name) => {
|
|
111
|
+
closePalette();
|
|
112
|
+
runCommand(name);
|
|
113
|
+
};
|
|
114
|
+
const runPluginCommand = (id) => {
|
|
115
|
+
const command = paletteCommands().find((candidate) => candidate.id === id);
|
|
116
|
+
if (!command) return;
|
|
117
|
+
closePalette();
|
|
118
|
+
command.run({
|
|
119
|
+
sessionId: activeId,
|
|
120
|
+
openTab,
|
|
121
|
+
openTransientTab: openTransient,
|
|
122
|
+
sendSessionFrame: sendFrame
|
|
123
|
+
});
|
|
124
|
+
};
|
|
125
|
+
const onSurfaceKey = (event) => {
|
|
126
|
+
if (event.target === searchInput.current) return;
|
|
127
|
+
if (event.key === "Backspace") {
|
|
128
|
+
event.preventDefault();
|
|
129
|
+
climb();
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
if (event.key === "ArrowDown") {
|
|
133
|
+
event.preventDefault();
|
|
134
|
+
setSelected(Math.min(cursor + 1, Math.max(rowCount - 1, 0)));
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
if (event.key === "ArrowUp") {
|
|
138
|
+
event.preventDefault();
|
|
139
|
+
setSelected(Math.max(cursor - 1, 0));
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
if (event.key === "Enter") {
|
|
143
|
+
event.preventDefault();
|
|
144
|
+
if (current) descend(current);
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
if (event.key === SEARCH_KEY) {
|
|
148
|
+
event.preventDefault();
|
|
149
|
+
searchInput.current?.focus();
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
if (event.ctrlKey || event.metaKey || event.altKey) return;
|
|
153
|
+
const key = event.key.toLowerCase();
|
|
154
|
+
if (!LEADER_KEY.test(key)) return;
|
|
155
|
+
const option = options.find((candidate) => candidate.key === key);
|
|
156
|
+
if (!option) return;
|
|
157
|
+
event.preventDefault();
|
|
158
|
+
descend(option);
|
|
159
|
+
};
|
|
160
|
+
const onSearchKey = (event) => {
|
|
161
|
+
if (event.key === "ArrowDown") {
|
|
162
|
+
event.preventDefault();
|
|
163
|
+
setSelected(Math.min(cursor + 1, Math.max(rowCount - 1, 0)));
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
if (event.key === "ArrowUp") {
|
|
167
|
+
event.preventDefault();
|
|
168
|
+
setSelected(Math.max(cursor - 1, 0));
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
if (event.key === "Enter" && currentMatch) {
|
|
172
|
+
event.preventDefault();
|
|
173
|
+
invoke(currentMatch.name);
|
|
174
|
+
}
|
|
175
|
+
};
|
|
176
|
+
return /* @__PURE__ */ jsx(Dialog, {
|
|
177
|
+
open,
|
|
178
|
+
onOpenChange: (next) => {
|
|
179
|
+
if (!next) closePalette();
|
|
180
|
+
},
|
|
181
|
+
children: /* @__PURE__ */ jsxs(DialogContent, {
|
|
182
|
+
ref: surface,
|
|
183
|
+
width: "lg",
|
|
184
|
+
"data-testid": "palette",
|
|
185
|
+
"data-path": path,
|
|
186
|
+
"aria-describedby": void 0,
|
|
187
|
+
onKeyDown: onSurfaceKey,
|
|
188
|
+
onOpenAutoFocus: (event) => {
|
|
189
|
+
event.preventDefault();
|
|
190
|
+
surface.current?.focus();
|
|
191
|
+
},
|
|
192
|
+
onCloseAutoFocus: (event) => {
|
|
193
|
+
event.preventDefault();
|
|
194
|
+
focusPrompt();
|
|
195
|
+
},
|
|
196
|
+
onEscapeKeyDown: (event) => {
|
|
197
|
+
if (searching && document.activeElement === searchInput.current) {
|
|
198
|
+
event.preventDefault();
|
|
199
|
+
setSearch("");
|
|
200
|
+
setSelected(0);
|
|
201
|
+
surface.current?.focus();
|
|
202
|
+
}
|
|
203
|
+
},
|
|
204
|
+
className: "top-[12vh] w-[720px] max-w-[92vw] translate-y-0",
|
|
205
|
+
children: [
|
|
206
|
+
/* @__PURE__ */ jsx(DialogTitle, {
|
|
207
|
+
className: "sr-only",
|
|
208
|
+
children: "Leader Space"
|
|
209
|
+
}),
|
|
210
|
+
/* @__PURE__ */ jsxs(CommandHeader, {
|
|
211
|
+
className: "gap-3 px-4 py-3",
|
|
212
|
+
children: [
|
|
213
|
+
/* @__PURE__ */ jsx(StatusBadge, {
|
|
214
|
+
tone: "accent",
|
|
215
|
+
size: "xs",
|
|
216
|
+
children: LEADER_PREFIX
|
|
217
|
+
}),
|
|
218
|
+
/* @__PURE__ */ jsx("span", {
|
|
219
|
+
"data-testid": "palette-path",
|
|
220
|
+
className: "text-base font-semibold text-doom-hi",
|
|
221
|
+
children: keys.length === 0 ? "Leader Space" : `${keys.join(" ")} · ${group?.label ?? ""}`
|
|
222
|
+
}),
|
|
223
|
+
/* @__PURE__ */ jsx(CommandInput, {
|
|
224
|
+
ref: searchInput,
|
|
225
|
+
"data-testid": "palette-filter",
|
|
226
|
+
value: search,
|
|
227
|
+
autoFocus: false,
|
|
228
|
+
placeholder: "/ search commands…",
|
|
229
|
+
onChange: (event) => {
|
|
230
|
+
setSearch(event.target.value);
|
|
231
|
+
setSelected(0);
|
|
232
|
+
},
|
|
233
|
+
onKeyDown: onSearchKey,
|
|
234
|
+
className: "text-right"
|
|
235
|
+
}),
|
|
236
|
+
/* @__PURE__ */ jsx("span", {
|
|
237
|
+
"data-testid": "palette-count",
|
|
238
|
+
className: "text-sm text-doom-dim",
|
|
239
|
+
children: rowCount
|
|
240
|
+
})
|
|
241
|
+
]
|
|
242
|
+
}),
|
|
243
|
+
/* @__PURE__ */ jsxs("div", {
|
|
244
|
+
className: "flex min-h-[260px] flex-col sm:flex-row",
|
|
245
|
+
children: [/* @__PURE__ */ jsxs(CommandList, {
|
|
246
|
+
"data-testid": "palette-keys",
|
|
247
|
+
className: "w-full shrink-0 gap-0 border-b border-doom-border p-1 sm:w-[280px] sm:border-r sm:border-b-0",
|
|
248
|
+
children: [searching ? matches.length === 0 ? /* @__PURE__ */ jsx(CommandEmpty, {
|
|
249
|
+
"data-testid": "palette-no-match",
|
|
250
|
+
children: "no command matches"
|
|
251
|
+
}) : matches.map((command, index) => /* @__PURE__ */ jsxs(CommandItem, {
|
|
252
|
+
"data-testid": `palette-sub-${command.name}`,
|
|
253
|
+
active: index === cursor,
|
|
254
|
+
onMouseEnter: () => setSelected(index),
|
|
255
|
+
onClick: () => invoke(command.name),
|
|
256
|
+
className: cn("w-full gap-2.5 px-3 py-1.5", index === cursor && "bg-doom-magenta/10"),
|
|
257
|
+
children: [/* @__PURE__ */ jsxs("span", {
|
|
258
|
+
className: "text-base font-semibold text-doom-hi",
|
|
259
|
+
children: ["/", command.name]
|
|
260
|
+
}), /* @__PURE__ */ jsx(CommandItemLabel, {
|
|
261
|
+
className: "text-sm text-doom-dim",
|
|
262
|
+
children: command.description
|
|
263
|
+
})]
|
|
264
|
+
}, command.name)) : options.length === 0 ? /* @__PURE__ */ jsx(CommandEmpty, {
|
|
265
|
+
"data-testid": "palette-empty",
|
|
266
|
+
children: keys.length === 0 ? "no package in this bundle registered leader keys · / searches the session’s commands" : "nothing bound under this key"
|
|
267
|
+
}) : options.map((option, index) => /* @__PURE__ */ jsxs(CommandItem, {
|
|
268
|
+
"data-testid": `palette-item-${index}`,
|
|
269
|
+
"data-key": option.key,
|
|
270
|
+
active: index === cursor,
|
|
271
|
+
onMouseEnter: () => setSelected(index),
|
|
272
|
+
onClick: () => descend(option),
|
|
273
|
+
className: cn("w-full gap-2.5 px-3 py-1.5", index === cursor && "bg-doom-magenta/10"),
|
|
274
|
+
children: [
|
|
275
|
+
/* @__PURE__ */ jsx(Kbd, {
|
|
276
|
+
className: cn("w-5 text-center", index === cursor ? "bg-doom-deep text-doom-magenta" : "bg-doom-deep text-doom-dim"),
|
|
277
|
+
children: option.key
|
|
278
|
+
}),
|
|
279
|
+
/* @__PURE__ */ jsx(CommandItemLabel, { children: option.label }),
|
|
280
|
+
option.binding ? null : /* @__PURE__ */ jsxs("span", {
|
|
281
|
+
className: "text-sm text-doom-dim",
|
|
282
|
+
children: [
|
|
283
|
+
option.children.length,
|
|
284
|
+
" ",
|
|
285
|
+
option.children.length === 1 ? "key" : "keys"
|
|
286
|
+
]
|
|
287
|
+
})
|
|
288
|
+
]
|
|
289
|
+
}, option.key)), pluginEntries.length > 0 ? /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(CommandGroupLabel, { children: "plugins" }), pluginEntries.map((command) => /* @__PURE__ */ jsxs(CommandItem, {
|
|
290
|
+
"data-testid": `palette-plugin-${command.id}`,
|
|
291
|
+
onClick: () => runPluginCommand(command.id),
|
|
292
|
+
className: "w-full gap-2.5 px-3 py-1.5 hover:bg-doom-magenta/10",
|
|
293
|
+
children: [/* @__PURE__ */ jsx(CommandItemLabel, { children: command.title }), command.description ? /* @__PURE__ */ jsx("span", {
|
|
294
|
+
className: "truncate text-sm text-doom-dim",
|
|
295
|
+
children: command.description
|
|
296
|
+
}) : null]
|
|
297
|
+
}, command.id))] }) : null]
|
|
298
|
+
}), /* @__PURE__ */ jsxs("div", {
|
|
299
|
+
"data-testid": "palette-detail",
|
|
300
|
+
className: "hidden min-w-0 flex-1 flex-col gap-2 px-4 py-3 sm:flex",
|
|
301
|
+
children: [currentMatch ? /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsxs("span", {
|
|
302
|
+
className: "text-base font-semibold text-doom-hi",
|
|
303
|
+
children: ["/", currentMatch.name]
|
|
304
|
+
}), /* @__PURE__ */ jsx("span", {
|
|
305
|
+
className: "text-sm text-doom-dim",
|
|
306
|
+
children: currentMatch.description
|
|
307
|
+
})] }) : null, current ? /* @__PURE__ */ jsxs(Fragment$1, { children: [
|
|
308
|
+
/* @__PURE__ */ jsxs("div", {
|
|
309
|
+
className: "flex items-center gap-2",
|
|
310
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
311
|
+
className: "text-sm font-semibold text-doom-magenta",
|
|
312
|
+
children: pathLabel([...keys, current.key])
|
|
313
|
+
}), /* @__PURE__ */ jsx("span", {
|
|
314
|
+
className: "text-sm text-doom-hi",
|
|
315
|
+
children: current.label
|
|
316
|
+
})]
|
|
317
|
+
}),
|
|
318
|
+
current.detail ? /* @__PURE__ */ jsx("span", {
|
|
319
|
+
className: "text-sm text-doom-dim",
|
|
320
|
+
children: current.detail
|
|
321
|
+
}) : null,
|
|
322
|
+
current.binding ? /* @__PURE__ */ jsx("span", {
|
|
323
|
+
"data-testid": "palette-target",
|
|
324
|
+
className: "text-base font-semibold text-doom-hi",
|
|
325
|
+
children: "command" in current.binding ? `/${current.binding.command}` : "in the cockpit"
|
|
326
|
+
}) : /* @__PURE__ */ jsx("div", {
|
|
327
|
+
className: "flex flex-col gap-1",
|
|
328
|
+
children: current.children.map((child) => /* @__PURE__ */ jsxs(OptionRow, {
|
|
329
|
+
"data-testid": `palette-child-${child.key}`,
|
|
330
|
+
onClick: () => descend(child, [...keys, current.key]),
|
|
331
|
+
className: "min-h-0 gap-3 border-doom-border-soft bg-doom-deep px-3 py-1.5 hover:border-doom-blue/50",
|
|
332
|
+
children: [
|
|
333
|
+
/* @__PURE__ */ jsx("span", {
|
|
334
|
+
className: "w-5 text-center text-xs font-semibold text-doom-magenta",
|
|
335
|
+
children: child.key
|
|
336
|
+
}),
|
|
337
|
+
/* @__PURE__ */ jsx("span", {
|
|
338
|
+
className: "text-base font-semibold text-doom-hi",
|
|
339
|
+
children: child.label
|
|
340
|
+
}),
|
|
341
|
+
/* @__PURE__ */ jsx(OptionLabel, {
|
|
342
|
+
className: "truncate text-sm text-doom-dim",
|
|
343
|
+
children: child.detail
|
|
344
|
+
})
|
|
345
|
+
]
|
|
346
|
+
}, child.key))
|
|
347
|
+
})
|
|
348
|
+
] }) : null]
|
|
349
|
+
})]
|
|
350
|
+
}),
|
|
351
|
+
/* @__PURE__ */ jsxs(CommandFooter, {
|
|
352
|
+
className: "px-4 py-2.5",
|
|
353
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
354
|
+
className: "flex items-center gap-1.5 text-sm text-doom-dim",
|
|
355
|
+
children: searching ? /* @__PURE__ */ jsxs(Fragment$1, { children: [
|
|
356
|
+
/* @__PURE__ */ jsx(Kbd, { children: "↑↓" }),
|
|
357
|
+
" move · ",
|
|
358
|
+
/* @__PURE__ */ jsx(Kbd, { children: "enter" }),
|
|
359
|
+
" run · ",
|
|
360
|
+
/* @__PURE__ */ jsx(Kbd, { children: "esc" }),
|
|
361
|
+
" back to keys"
|
|
362
|
+
] }) : /* @__PURE__ */ jsxs(Fragment$1, { children: [
|
|
363
|
+
"keys walk · ",
|
|
364
|
+
/* @__PURE__ */ jsx(Kbd, { children: "⌫" }),
|
|
365
|
+
" up · ",
|
|
366
|
+
/* @__PURE__ */ jsx(Kbd, { children: "enter" }),
|
|
367
|
+
" select · ",
|
|
368
|
+
/* @__PURE__ */ jsx(Kbd, { children: "/" }),
|
|
369
|
+
" search · ",
|
|
370
|
+
/* @__PURE__ */ jsx(Kbd, { children: "esc" }),
|
|
371
|
+
" close"
|
|
372
|
+
] })
|
|
373
|
+
}), /* @__PURE__ */ jsxs("span", {
|
|
374
|
+
className: "text-sm text-doom-dim",
|
|
375
|
+
children: [
|
|
376
|
+
bindings.length,
|
|
377
|
+
" keys · ",
|
|
378
|
+
commands.length,
|
|
379
|
+
" commands"
|
|
380
|
+
]
|
|
381
|
+
})]
|
|
382
|
+
})
|
|
383
|
+
]
|
|
384
|
+
})
|
|
385
|
+
});
|
|
386
|
+
}
|
|
387
|
+
//#endregion
|
|
388
|
+
export { CommandPalette };
|
|
389
|
+
|
|
390
|
+
//# sourceMappingURL=CommandPalette.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CommandPalette.mjs","names":[],"sources":["../../../../src/web/features/leader/CommandPalette.tsx"],"sourcesContent":["import type { LeaderBindingContribution, TransientTab } from '@agimon-ai/po-core/web';\nimport {\n cn,\n CommandEmpty,\n CommandFooter,\n CommandGroupLabel,\n CommandHeader,\n CommandInput,\n CommandItem,\n CommandItemLabel,\n CommandList,\n Dialog,\n DialogContent,\n DialogTitle,\n Kbd,\n OptionLabel,\n OptionRow,\n StatusBadge,\n} from '@agimon-ai/po-web-components';\nimport { useStore } from '@tanstack/react-store';\nimport { type KeyboardEvent as ReactKeyboardEvent, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { type LeaderOption, leaderGroup } from '../../lib/leaderTree';\nimport { paletteCommands, pluginLeaderBindings } from '../../lib/pluginRegistry';\nimport { focusPrompt } from '../../lib/promptFocus';\nimport { sendFrame } from '../../lib/transport';\nimport { closePalette, paletteStore, setPalettePath, togglePalette } from '../../stores/paletteStore';\nimport { sessionsStore } from '../../stores/sessionsStore';\nimport { runCommand, useActiveSession } from '../../stores/sessionStore';\nimport { openTransientTab } from '../../stores/transientTabsStore';\nimport { useOpenTab } from '../../stores/useOpenTab';\nimport { useWebPluginRegistry } from '../../stores/useWebPluginRegistry';\n\nconst LEADER_PREFIX = 'SPC';\nconst SEARCH_KEY = '/';\nconst LEADER_KEY = /^[a-z0-9]$/;\n\nfunction pathLabel(keys: readonly string[]): string {\n return [LEADER_PREFIX, ...keys].join(' ');\n}\n\n/**\n * Leader Space, as much of it as a browser can honestly show.\n *\n * The session's own leader tree never reaches an RPC client, so the tree here\n * is what the installed web plugins declared: each package's cockpit half of\n * the key paths its TUI documents. Keys walk the tree the way the TUI does,\n * backspace climbs, and the slash search is the road to the commands no\n * package has put on a key. The surface is a modal dialog, so focus comes\n * back to wherever it was (usually the composer) when it closes.\n */\nexport function CommandPalette() {\n useWebPluginRegistry();\n const commands = useActiveSession((state) => state.commands);\n const { open, path } = useStore(paletteStore);\n const activeId = useStore(sessionsStore, (state) => state.activeId);\n const openTab = useOpenTab();\n // Leader keys reach the same temporary tabs the activity dock opens, so a\n // group without a declared tab is still one key path away.\n const openTransient = (tab: TransientTab): void => {\n if (activeId === null) return;\n openTransientTab(activeId, tab);\n openTab(tab.id);\n };\n const [search, setSearch] = useState('');\n const [selected, setSelected] = useState(0);\n const surface = useRef<HTMLDivElement>(null);\n const searchInput = useRef<HTMLInputElement>(null);\n\n useEffect(() => {\n const onKey = (event: KeyboardEvent): void => {\n // ctrl+k is the browser-friendly binding; ctrl+space mirrors the TUI's\n // global leader key. Space in an empty composer opens it too.\n const leaderKey = event.key === 'k' || event.key === ' ';\n if (leaderKey && (event.ctrlKey || event.metaKey)) {\n event.preventDefault();\n togglePalette();\n }\n };\n window.addEventListener('keydown', onKey);\n return () => window.removeEventListener('keydown', onKey);\n }, []);\n\n // Every opening starts at the root with an empty search. Adjusted during\n // render rather than in an effect so the palette never paints the previous\n // search for a frame.\n const [wasOpen, setWasOpen] = useState(open);\n if (wasOpen !== open) {\n setWasOpen(open);\n if (open) {\n setSearch('');\n setSelected(0);\n }\n }\n\n const keys = useMemo(() => path.split(''), [path]);\n const bindings = pluginLeaderBindings();\n const group = useMemo(() => leaderGroup(bindings, keys) ?? leaderGroup(bindings, []), [bindings, keys]);\n const options = group?.options ?? [];\n\n const needle = search.trim().toLowerCase();\n const searching = needle.length > 0;\n const matches = useMemo(\n () => (searching ? commands.filter((entry) => entry.name.toLowerCase().includes(needle)) : []),\n [commands, needle, searching],\n );\n const pluginEntries = keys.length === 0 && !searching ? paletteCommands() : [];\n\n const rowCount = searching ? matches.length : options.length;\n const cursor = Math.min(selected, Math.max(rowCount - 1, 0));\n const current = searching ? undefined : options[cursor];\n const currentMatch = searching ? matches[cursor] : undefined;\n\n const fire = (binding: LeaderBindingContribution): void => {\n closePalette();\n if ('command' in binding) {\n runCommand(binding.command);\n return;\n }\n binding.run({ sessionId: activeId, openTab, openTransientTab: openTransient, sendSessionFrame: sendFrame });\n };\n\n const descend = (option: LeaderOption, from: readonly string[] = keys): void => {\n if (option.binding) {\n fire(option.binding);\n return;\n }\n setPalettePath([...from, option.key].join(''));\n setSelected(0);\n };\n\n const climb = (): void => {\n if (keys.length === 0) {\n closePalette();\n return;\n }\n setPalettePath(keys.slice(0, -1).join(''));\n setSelected(0);\n };\n\n const invoke = (name: string): void => {\n closePalette();\n runCommand(name);\n };\n\n const runPluginCommand = (id: string): void => {\n const command = paletteCommands().find((candidate) => candidate.id === id);\n if (!command) return;\n closePalette();\n command.run({ sessionId: activeId, openTab, openTransientTab: openTransient, sendSessionFrame: sendFrame });\n };\n\n const onSurfaceKey = (event: ReactKeyboardEvent<HTMLDivElement>): void => {\n // The search box handles its own keys; letters typed there are text.\n if (event.target === searchInput.current) return;\n if (event.key === 'Backspace') {\n event.preventDefault();\n climb();\n return;\n }\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n setSelected(Math.min(cursor + 1, Math.max(rowCount - 1, 0)));\n return;\n }\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n setSelected(Math.max(cursor - 1, 0));\n return;\n }\n if (event.key === 'Enter') {\n event.preventDefault();\n if (current) descend(current);\n return;\n }\n if (event.key === SEARCH_KEY) {\n event.preventDefault();\n searchInput.current?.focus();\n return;\n }\n if (event.ctrlKey || event.metaKey || event.altKey) return;\n const key = event.key.toLowerCase();\n if (!LEADER_KEY.test(key)) return;\n const option = options.find((candidate) => candidate.key === key);\n if (!option) return;\n event.preventDefault();\n descend(option);\n };\n\n const onSearchKey = (event: ReactKeyboardEvent<HTMLInputElement>): void => {\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n setSelected(Math.min(cursor + 1, Math.max(rowCount - 1, 0)));\n return;\n }\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n setSelected(Math.max(cursor - 1, 0));\n return;\n }\n if (event.key === 'Enter' && currentMatch) {\n event.preventDefault();\n invoke(currentMatch.name);\n }\n };\n\n return (\n <Dialog\n open={open}\n onOpenChange={(next) => {\n if (!next) closePalette();\n }}\n >\n <DialogContent\n ref={surface}\n width=\"lg\"\n data-testid=\"palette\"\n data-path={path}\n aria-describedby={undefined}\n onKeyDown={onSurfaceKey}\n // The palette owns the keyboard: focus lands on the surface, not the\n // search box, so a typed letter is a leader key rather than filter text.\n onOpenAutoFocus={(event) => {\n event.preventDefault();\n surface.current?.focus();\n }}\n // Opened by a shortcut, so there is no trigger to restore focus to.\n onCloseAutoFocus={(event) => {\n event.preventDefault();\n focusPrompt();\n }}\n // Escape in a live search clears the search; only an empty one closes.\n onEscapeKeyDown={(event) => {\n if (searching && document.activeElement === searchInput.current) {\n event.preventDefault();\n setSearch('');\n setSelected(0);\n surface.current?.focus();\n }\n }}\n className=\"top-[12vh] w-[720px] max-w-[92vw] translate-y-0\"\n >\n <DialogTitle className=\"sr-only\">Leader Space</DialogTitle>\n <CommandHeader className=\"gap-3 px-4 py-3\">\n <StatusBadge tone=\"accent\" size=\"xs\">\n {LEADER_PREFIX}\n </StatusBadge>\n <span data-testid=\"palette-path\" className=\"text-base font-semibold text-doom-hi\">\n {keys.length === 0 ? 'Leader Space' : `${keys.join(' ')} · ${group?.label ?? ''}`}\n </span>\n <CommandInput\n ref={searchInput}\n data-testid=\"palette-filter\"\n value={search}\n autoFocus={false}\n placeholder=\"/ search commands…\"\n onChange={(event) => {\n setSearch(event.target.value);\n setSelected(0);\n }}\n onKeyDown={onSearchKey}\n className=\"text-right\"\n />\n <span data-testid=\"palette-count\" className=\"text-sm text-doom-dim\">\n {rowCount}\n </span>\n </CommandHeader>\n\n <div className=\"flex min-h-[260px] flex-col sm:flex-row\">\n <CommandList\n data-testid=\"palette-keys\"\n className=\"w-full shrink-0 gap-0 border-b border-doom-border p-1 sm:w-[280px] sm:border-r sm:border-b-0\"\n >\n {searching ? (\n matches.length === 0 ? (\n <CommandEmpty data-testid=\"palette-no-match\">no command matches</CommandEmpty>\n ) : (\n matches.map((command, index) => (\n <CommandItem\n key={command.name}\n data-testid={`palette-sub-${command.name}`}\n active={index === cursor}\n onMouseEnter={() => setSelected(index)}\n onClick={() => invoke(command.name)}\n className={cn('w-full gap-2.5 px-3 py-1.5', index === cursor && 'bg-doom-magenta/10')}\n >\n <span className=\"text-base font-semibold text-doom-hi\">/{command.name}</span>\n <CommandItemLabel className=\"text-sm text-doom-dim\">{command.description}</CommandItemLabel>\n </CommandItem>\n ))\n )\n ) : options.length === 0 ? (\n <CommandEmpty data-testid=\"palette-empty\">\n {keys.length === 0\n ? 'no package in this bundle registered leader keys · / searches the session’s commands'\n : 'nothing bound under this key'}\n </CommandEmpty>\n ) : (\n options.map((option, index) => (\n <CommandItem\n key={option.key}\n data-testid={`palette-item-${index}`}\n data-key={option.key}\n active={index === cursor}\n onMouseEnter={() => setSelected(index)}\n onClick={() => descend(option)}\n className={cn('w-full gap-2.5 px-3 py-1.5', index === cursor && 'bg-doom-magenta/10')}\n >\n <Kbd\n className={cn(\n 'w-5 text-center',\n index === cursor ? 'bg-doom-deep text-doom-magenta' : 'bg-doom-deep text-doom-dim',\n )}\n >\n {option.key}\n </Kbd>\n <CommandItemLabel>{option.label}</CommandItemLabel>\n {option.binding ? null : (\n <span className=\"text-sm text-doom-dim\">\n {option.children.length} {option.children.length === 1 ? 'key' : 'keys'}\n </span>\n )}\n </CommandItem>\n ))\n )}\n {pluginEntries.length > 0 ? (\n <>\n <CommandGroupLabel>plugins</CommandGroupLabel>\n {pluginEntries.map((command) => (\n <CommandItem\n key={command.id}\n data-testid={`palette-plugin-${command.id}`}\n onClick={() => runPluginCommand(command.id)}\n className=\"w-full gap-2.5 px-3 py-1.5 hover:bg-doom-magenta/10\"\n >\n <CommandItemLabel>{command.title}</CommandItemLabel>\n {command.description ? (\n <span className=\"truncate text-sm text-doom-dim\">{command.description}</span>\n ) : null}\n </CommandItem>\n ))}\n </>\n ) : null}\n </CommandList>\n\n <div data-testid=\"palette-detail\" className=\"hidden min-w-0 flex-1 flex-col gap-2 px-4 py-3 sm:flex\">\n {currentMatch ? (\n <>\n <span className=\"text-base font-semibold text-doom-hi\">/{currentMatch.name}</span>\n <span className=\"text-sm text-doom-dim\">{currentMatch.description}</span>\n </>\n ) : null}\n {current ? (\n <>\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm font-semibold text-doom-magenta\">{pathLabel([...keys, current.key])}</span>\n <span className=\"text-sm text-doom-hi\">{current.label}</span>\n </div>\n {current.detail ? <span className=\"text-sm text-doom-dim\">{current.detail}</span> : null}\n {current.binding ? (\n <span data-testid=\"palette-target\" className=\"text-base font-semibold text-doom-hi\">\n {'command' in current.binding ? `/${current.binding.command}` : 'in the cockpit'}\n </span>\n ) : (\n <div className=\"flex flex-col gap-1\">\n {current.children.map((child) => (\n <OptionRow\n key={child.key}\n data-testid={`palette-child-${child.key}`}\n onClick={() => descend(child, [...keys, current.key])}\n className=\"min-h-0 gap-3 border-doom-border-soft bg-doom-deep px-3 py-1.5 hover:border-doom-blue/50\"\n >\n <span className=\"w-5 text-center text-xs font-semibold text-doom-magenta\">{child.key}</span>\n <span className=\"text-base font-semibold text-doom-hi\">{child.label}</span>\n <OptionLabel className=\"truncate text-sm text-doom-dim\">{child.detail}</OptionLabel>\n </OptionRow>\n ))}\n </div>\n )}\n </>\n ) : null}\n </div>\n </div>\n\n <CommandFooter className=\"px-4 py-2.5\">\n <span className=\"flex items-center gap-1.5 text-sm text-doom-dim\">\n {searching ? (\n <>\n <Kbd>↑↓</Kbd> move · <Kbd>enter</Kbd> run · <Kbd>esc</Kbd> back to keys\n </>\n ) : (\n <>\n keys walk · <Kbd>⌫</Kbd> up · <Kbd>enter</Kbd> select · <Kbd>/</Kbd> search · <Kbd>esc</Kbd> close\n </>\n )}\n </span>\n <span className=\"text-sm text-doom-dim\">\n {bindings.length} keys · {commands.length} commands\n </span>\n </CommandFooter>\n </DialogContent>\n </Dialog>\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
const require_devProxy = require("../../../types/devProxy.cjs");
|
|
2
|
+
const require_devProxyStore = require("../../stores/devProxyStore.cjs");
|
|
3
|
+
const require_dashboardStateStore = require("../../stores/dashboardStateStore.cjs");
|
|
4
|
+
let react = require("react");
|
|
5
|
+
let _tanstack_react_store = require("@tanstack/react-store");
|
|
6
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
7
|
+
let _agimon_ai_po_web_components = require("@agimon-ai/po-web-components");
|
|
8
|
+
//#region src/web/features/remote/DevProxyTargets.tsx
|
|
9
|
+
/**
|
|
10
|
+
* Local dev servers reachable through the cockpit's own address.
|
|
11
|
+
*
|
|
12
|
+
* The `base` line is shown rather than described. A sub-path proxy needs the
|
|
13
|
+
* application to know its base path, exactly as it would behind nginx, and a
|
|
14
|
+
* developer who has to work that out from prose will conclude the feature is
|
|
15
|
+
* broken when their assets 404.
|
|
16
|
+
*
|
|
17
|
+
* Adding a target is host-only, so on a phone the form is replaced by the
|
|
18
|
+
* reason rather than rendered as a button that would be refused.
|
|
19
|
+
*/
|
|
20
|
+
function DevProxyTargets() {
|
|
21
|
+
const state = (0, _tanstack_react_store.useStore)(require_devProxyStore.devProxyStore);
|
|
22
|
+
const [name, setName] = require_dashboardStateStore.useDashboardState("dev-proxy/name", "");
|
|
23
|
+
const [port, setPort] = require_dashboardStateStore.useDashboardState("dev-proxy/port", "");
|
|
24
|
+
(0, react.useEffect)(() => {
|
|
25
|
+
require_devProxyStore.refreshDevProxyTargets();
|
|
26
|
+
}, []);
|
|
27
|
+
const submit = async () => {
|
|
28
|
+
if (await require_devProxyStore.createDevProxyTarget(name.trim(), Number(port))) {
|
|
29
|
+
setName((current) => current === name ? "" : current);
|
|
30
|
+
setPort((current) => current === port ? "" : current);
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
34
|
+
className: "flex w-full flex-col gap-1.5",
|
|
35
|
+
children: [
|
|
36
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.SectionLabel, { children: "dev sites" }),
|
|
37
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
38
|
+
className: "text-sm text-doom-dim",
|
|
39
|
+
children: "Reach a local dev server from a paired device, on this same address."
|
|
40
|
+
}),
|
|
41
|
+
state.targets.map((target) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
42
|
+
"data-testid": `dev-proxy-target-${target.name}`,
|
|
43
|
+
className: "flex items-center justify-between gap-3 rounded border border-doom-border px-2.5 py-1.5",
|
|
44
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
45
|
+
className: "flex min-w-0 flex-col",
|
|
46
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("a", {
|
|
47
|
+
href: state.canRegister ? `http://localhost:${String(target.port)}${require_devProxy.DEV_PROXY_PREFIX}${target.name}/` : `${require_devProxy.DEV_PROXY_PREFIX}${target.name}/`,
|
|
48
|
+
target: "_blank",
|
|
49
|
+
rel: "noreferrer",
|
|
50
|
+
className: "truncate text-sm text-doom-hi underline",
|
|
51
|
+
"data-testid": `dev-proxy-open-${target.name}`,
|
|
52
|
+
children: [
|
|
53
|
+
require_devProxy.DEV_PROXY_PREFIX,
|
|
54
|
+
target.name,
|
|
55
|
+
"/"
|
|
56
|
+
]
|
|
57
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
58
|
+
className: "truncate text-sm text-doom-dim",
|
|
59
|
+
children: [
|
|
60
|
+
"port ",
|
|
61
|
+
target.port,
|
|
62
|
+
" · set base: '",
|
|
63
|
+
require_devProxy.DEV_PROXY_PREFIX,
|
|
64
|
+
target.name,
|
|
65
|
+
"/' in the dev server"
|
|
66
|
+
]
|
|
67
|
+
})]
|
|
68
|
+
}), state.canRegister ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.Button, {
|
|
69
|
+
variant: "ghost",
|
|
70
|
+
size: "sm",
|
|
71
|
+
"data-testid": `dev-proxy-remove-${target.name}`,
|
|
72
|
+
onClick: () => void require_devProxyStore.deleteDevProxyTarget(target.name),
|
|
73
|
+
children: "remove"
|
|
74
|
+
}) : null]
|
|
75
|
+
}, target.name)),
|
|
76
|
+
state.canRegister ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
77
|
+
className: "flex items-center gap-2",
|
|
78
|
+
children: [
|
|
79
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.Input, {
|
|
80
|
+
"aria-label": "dev site name",
|
|
81
|
+
"data-testid": "dev-proxy-name",
|
|
82
|
+
placeholder: "storefront",
|
|
83
|
+
className: "min-w-0 flex-1",
|
|
84
|
+
value: name,
|
|
85
|
+
onChange: (event) => setName(event.target.value)
|
|
86
|
+
}),
|
|
87
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.Input, {
|
|
88
|
+
"aria-label": "dev site port",
|
|
89
|
+
"data-testid": "dev-proxy-port",
|
|
90
|
+
type: "number",
|
|
91
|
+
min: 1,
|
|
92
|
+
max: 65535,
|
|
93
|
+
placeholder: "3000",
|
|
94
|
+
className: "w-24",
|
|
95
|
+
value: port,
|
|
96
|
+
onChange: (event) => setPort(event.target.value)
|
|
97
|
+
}),
|
|
98
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.Button, {
|
|
99
|
+
variant: "outline",
|
|
100
|
+
size: "sm",
|
|
101
|
+
"data-testid": "dev-proxy-add",
|
|
102
|
+
disabled: state.busy || name.trim() === "" || port === "",
|
|
103
|
+
onClick: () => void submit(),
|
|
104
|
+
children: "add"
|
|
105
|
+
})
|
|
106
|
+
]
|
|
107
|
+
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
108
|
+
className: "text-sm text-doom-dim",
|
|
109
|
+
children: "Add a dev site on the host. A paired device can open the ones already listed, but not name new ones."
|
|
110
|
+
}),
|
|
111
|
+
state.error === void 0 ? null : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
112
|
+
"data-testid": "dev-proxy-error",
|
|
113
|
+
className: "text-sm text-doom-yellow",
|
|
114
|
+
children: state.error
|
|
115
|
+
})
|
|
116
|
+
]
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
//#endregion
|
|
120
|
+
exports.DevProxyTargets = DevProxyTargets;
|
|
121
|
+
|
|
122
|
+
//# sourceMappingURL=DevProxyTargets.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DevProxyTargets.cjs","names":["useStore","devProxyStore","useDashboardState","refreshDevProxyTargets","createDevProxyTarget","SectionLabel","DEV_PROXY_PREFIX","Button","deleteDevProxyTarget","Input"],"sources":["../../../../src/web/features/remote/DevProxyTargets.tsx"],"sourcesContent":["import { Button, Input, SectionLabel } from '@agimon-ai/po-web-components';\nimport { useStore } from '@tanstack/react-store';\nimport { useEffect } from 'react';\n\nimport { DEV_PROXY_PREFIX } from '../../../types/devProxy';\nimport { useDashboardState } from '../../stores/dashboardStateStore';\nimport {\n createDevProxyTarget,\n deleteDevProxyTarget,\n devProxyStore,\n refreshDevProxyTargets,\n} from '../../stores/devProxyStore';\n\n/**\n * Local dev servers reachable through the cockpit's own address.\n *\n * The `base` line is shown rather than described. A sub-path proxy needs the\n * application to know its base path, exactly as it would behind nginx, and a\n * developer who has to work that out from prose will conclude the feature is\n * broken when their assets 404.\n *\n * Adding a target is host-only, so on a phone the form is replaced by the\n * reason rather than rendered as a button that would be refused.\n */\nexport function DevProxyTargets() {\n const state = useStore(devProxyStore);\n const [name, setName] = useDashboardState('dev-proxy/name', '');\n const [port, setPort] = useDashboardState('dev-proxy/port', '');\n\n useEffect(() => {\n void refreshDevProxyTargets();\n }, []);\n\n const submit = async (): Promise<void> => {\n if (await createDevProxyTarget(name.trim(), Number(port))) {\n setName((current) => (current === name ? '' : current));\n setPort((current) => (current === port ? '' : current));\n }\n };\n\n return (\n <div className=\"flex w-full flex-col gap-1.5\">\n <SectionLabel>dev sites</SectionLabel>\n <span className=\"text-sm text-doom-dim\">\n Reach a local dev server from a paired device, on this same address.\n </span>\n\n {state.targets.map((target) => (\n <div\n key={target.name}\n data-testid={`dev-proxy-target-${target.name}`}\n className=\"flex items-center justify-between gap-3 rounded border border-doom-border px-2.5 py-1.5\"\n >\n <span className=\"flex min-w-0 flex-col\">\n <a\n // The proxy serves paired devices through the tunnel. At the host, the dev server\n // already answers on its own port under the same base path.\n href={\n state.canRegister\n ? `http://localhost:${String(target.port)}${DEV_PROXY_PREFIX}${target.name}/`\n : `${DEV_PROXY_PREFIX}${target.name}/`\n }\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"truncate text-sm text-doom-hi underline\"\n data-testid={`dev-proxy-open-${target.name}`}\n >\n {DEV_PROXY_PREFIX}\n {target.name}/\n </a>\n <span className=\"truncate text-sm text-doom-dim\">\n port {target.port} · set base: '{DEV_PROXY_PREFIX}\n {target.name}/' in the dev server\n </span>\n </span>\n {state.canRegister ? (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n data-testid={`dev-proxy-remove-${target.name}`}\n onClick={() => void deleteDevProxyTarget(target.name)}\n >\n remove\n </Button>\n ) : null}\n </div>\n ))}\n\n {state.canRegister ? (\n <div className=\"flex items-center gap-2\">\n <Input\n aria-label=\"dev site name\"\n data-testid=\"dev-proxy-name\"\n placeholder=\"storefront\"\n className=\"min-w-0 flex-1\"\n value={name}\n onChange={(event) => setName(event.target.value)}\n />\n <Input\n aria-label=\"dev site port\"\n data-testid=\"dev-proxy-port\"\n type=\"number\"\n min={1}\n max={65_535}\n placeholder=\"3000\"\n className=\"w-24\"\n value={port}\n onChange={(event) => setPort(event.target.value)}\n />\n <Button\n variant=\"outline\"\n size=\"sm\"\n data-testid=\"dev-proxy-add\"\n disabled={state.busy || name.trim() === '' || port === ''}\n onClick={() => void submit()}\n >\n add\n </Button>\n </div>\n ) : (\n <span className=\"text-sm text-doom-dim\">\n Add a dev site on the host. A paired device can open the ones already listed, but not name new ones.\n </span>\n )}\n\n {state.error === undefined ? null : (\n <span data-testid=\"dev-proxy-error\" className=\"text-sm text-doom-yellow\">\n {state.error}\n </span>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
//#region src/web/features/remote/DevProxyTargets.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Local dev servers reachable through the cockpit's own address.
|
|
4
|
+
*
|
|
5
|
+
* The `base` line is shown rather than described. A sub-path proxy needs the
|
|
6
|
+
* application to know its base path, exactly as it would behind nginx, and a
|
|
7
|
+
* developer who has to work that out from prose will conclude the feature is
|
|
8
|
+
* broken when their assets 404.
|
|
9
|
+
*
|
|
10
|
+
* Adding a target is host-only, so on a phone the form is replaced by the
|
|
11
|
+
* reason rather than rendered as a button that would be refused.
|
|
12
|
+
*/
|
|
13
|
+
export declare function DevProxyTargets(): import("react").JSX.Element;
|
|
14
|
+
//#endregion
|
|
15
|
+
//# sourceMappingURL=DevProxyTargets.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DevProxyTargets.d.mts","names":[],"sources":["../../../../src/web/features/remote/DevProxyTargets.tsx"],"mappings":";;;;;;;;;;;;wBAwBgB,mCAAe,IAAA"}
|