@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,107 @@
|
|
|
1
|
+
const require_sessionSummary = require("./sessionSummary.cjs");
|
|
2
|
+
//#region src/web/lib/sessionRailModel.ts
|
|
3
|
+
/** Sessions recorded without a workspace are grouped under this id. */
|
|
4
|
+
const LEGACY_WORKSPACE_ID = "legacy-workspace";
|
|
5
|
+
function workspaceName(workspace) {
|
|
6
|
+
if (workspace.name) return workspace.name;
|
|
7
|
+
const trimmed = workspace.root.replace(/\/+$/u, "");
|
|
8
|
+
return trimmed.slice(trimmed.lastIndexOf("/") + 1) || workspace.root;
|
|
9
|
+
}
|
|
10
|
+
/** The status and recovery copy for a setup-only child reservation. */
|
|
11
|
+
function pendingSetupView(setup) {
|
|
12
|
+
const setupType = setup.setupKind === "existing-directory" ? "conversation directory" : setup.setupKind === "managed-worktree" ? "automatic worktree" : "conversation";
|
|
13
|
+
const status = setup.status === "failed" ? `${setupType} setup failed` : setup.status === "interrupted" ? `${setupType} setup interrupted` : `${setupType} provisioning`;
|
|
14
|
+
const recovery = setup.setupKind === void 0 && setup.cwd !== void 0 ? "This existing setup has no verified provider. Inspect its ownership in Po before retrying." : setup.errorCode === "SESSION_UNAVAILABLE" ? "The existing session is unavailable. Inspect or resume it in Po before retrying the conversation." : setup.status === "interrupted" ? "Retry the authenticated conversation to resume this setup. The same setup will be reused." : setup.setupKind === "existing-directory" ? "Inspect the selected directory, then retry the authenticated conversation. The same setup will be reused." : "Resolve the Git setup, then retry the authenticated conversation. The same setup will be reused.";
|
|
15
|
+
const needsRecovery = setup.status === "failed" || setup.status === "interrupted";
|
|
16
|
+
return {
|
|
17
|
+
id: setup.id,
|
|
18
|
+
name: setup.name,
|
|
19
|
+
status,
|
|
20
|
+
failed: setup.status === "failed",
|
|
21
|
+
...needsRecovery ? { recovery } : {}
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
function sessionView(id, ordinal, input) {
|
|
25
|
+
const { summary, attach } = input.byId[id];
|
|
26
|
+
const restart = input.restarts[id];
|
|
27
|
+
const restarting = restart?.restarting === true;
|
|
28
|
+
const status = restarting ? "restarting…" : require_sessionSummary.sessionStatusLine({
|
|
29
|
+
attach,
|
|
30
|
+
backgroundWorkActive: input.backgroundWorkSessions?.has(id) === true,
|
|
31
|
+
phase: summary.phase,
|
|
32
|
+
phaseSince: summary.phaseSince,
|
|
33
|
+
awaitingInput: summary.awaitingInput,
|
|
34
|
+
everPrompted: summary.everPrompted,
|
|
35
|
+
lastSettledAt: summary.lastSettledAt,
|
|
36
|
+
dormant: summary.dormant,
|
|
37
|
+
...summary.activity === void 0 ? {} : { activity: summary.activity }
|
|
38
|
+
}, input.now);
|
|
39
|
+
const nested = input.nested.has(id);
|
|
40
|
+
const profile = summary.profile;
|
|
41
|
+
const label = profile === void 0 ? void 0 : profile.displayName ?? profile.name;
|
|
42
|
+
const avatarUrl = input.avatarUrls[id];
|
|
43
|
+
return {
|
|
44
|
+
id,
|
|
45
|
+
name: summary.name,
|
|
46
|
+
ordinal,
|
|
47
|
+
active: id === input.activeId,
|
|
48
|
+
nested,
|
|
49
|
+
...nested && summary.sessionProvenance !== void 0 ? { provenance: summary.sessionProvenance } : {},
|
|
50
|
+
status,
|
|
51
|
+
awaitingInput: (summary.awaitingInput || summary.activity?.attention === true && summary.phase === "idle" && summary.dormant !== true) && attach !== "refused" && !restarting,
|
|
52
|
+
restarting,
|
|
53
|
+
restartBlocked: summary.dormant !== true && summary.phase !== void 0 && summary.phase !== "idle",
|
|
54
|
+
...restart?.error === void 0 ? {} : { error: restart.error },
|
|
55
|
+
...summary.git === void 0 ? {} : { git: {
|
|
56
|
+
branch: summary.git.branch,
|
|
57
|
+
dirty: summary.git.dirty
|
|
58
|
+
} },
|
|
59
|
+
...profile === void 0 || label === void 0 ? {} : { profile: {
|
|
60
|
+
name: profile.name,
|
|
61
|
+
label,
|
|
62
|
+
initials: require_sessionSummary.personaInitials(label),
|
|
63
|
+
...avatarUrl === void 0 ? {} : { avatarUrl }
|
|
64
|
+
} },
|
|
65
|
+
pendingSetups: (summary.pendingSetups ?? []).map(pendingSetupView)
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
/** The rail's workspaces in host order, each with its sessions; ungrouped sessions last. */
|
|
69
|
+
function buildRailWorkspaces(input) {
|
|
70
|
+
const ordinals = new Map(input.order.map((id, index) => [id, index + 1]));
|
|
71
|
+
const grouped = /* @__PURE__ */ new Set();
|
|
72
|
+
const workspaces = [];
|
|
73
|
+
for (const workspaceId of input.workspaceOrder) {
|
|
74
|
+
const workspace = input.workspacesById[workspaceId];
|
|
75
|
+
if (workspace === void 0) continue;
|
|
76
|
+
const ids = input.order.filter((id) => input.byId[id]?.summary.workspaceId === workspaceId);
|
|
77
|
+
for (const id of ids) grouped.add(id);
|
|
78
|
+
workspaces.push({
|
|
79
|
+
id: workspaceId,
|
|
80
|
+
name: workspaceName(workspace),
|
|
81
|
+
root: workspace.root,
|
|
82
|
+
available: workspace.available !== false,
|
|
83
|
+
legacy: false,
|
|
84
|
+
sessions: ids.map((id) => sessionView(id, ordinals.get(id) ?? 0, input))
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
const legacy = input.order.filter((id) => !grouped.has(id) && input.byId[id] !== void 0);
|
|
88
|
+
if (legacy.length > 0) {
|
|
89
|
+
const root = input.byId[legacy[0]].summary.cwd;
|
|
90
|
+
workspaces.push({
|
|
91
|
+
id: LEGACY_WORKSPACE_ID,
|
|
92
|
+
name: workspaceName({ root }),
|
|
93
|
+
root,
|
|
94
|
+
available: false,
|
|
95
|
+
legacy: true,
|
|
96
|
+
sessions: legacy.map((id) => sessionView(id, ordinals.get(id) ?? 0, input))
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
return workspaces;
|
|
100
|
+
}
|
|
101
|
+
//#endregion
|
|
102
|
+
exports.LEGACY_WORKSPACE_ID = LEGACY_WORKSPACE_ID;
|
|
103
|
+
exports.buildRailWorkspaces = buildRailWorkspaces;
|
|
104
|
+
exports.pendingSetupView = pendingSetupView;
|
|
105
|
+
exports.workspaceName = workspaceName;
|
|
106
|
+
|
|
107
|
+
//# sourceMappingURL=sessionRailModel.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessionRailModel.cjs","names":["sessionStatusLine","personaInitials"],"sources":["../../../src/web/lib/sessionRailModel.ts"],"sourcesContent":["import type {\n WebTemplateRailPendingSetup,\n WebTemplateRailSession,\n WebTemplateRailWorkspace,\n} from '@agimon-ai/po-core/web';\n\nimport type { SessionSummary, WorkspaceSummary } from '../../types/hub';\nimport { personaInitials, sessionStatusLine, type AttachPhase } from './sessionSummary';\n\n/** Sessions recorded without a workspace are grouped under this id. */\nexport const LEGACY_WORKSPACE_ID = 'legacy-workspace';\n\nexport interface RailSessionInput {\n summary: SessionSummary;\n attach: AttachPhase;\n}\n\n/** A restart the rail asked for: in flight, or failed with a reason. */\nexport interface RailRestartState {\n restarting: boolean;\n error?: string;\n}\n\nexport interface SessionRailModelInput {\n /** Rail order across every workspace; positions become the 1-9 ordinals. */\n order: readonly string[];\n byId: Readonly<Record<string, RailSessionInput>>;\n activeId: string | null;\n workspaceOrder: readonly string[];\n workspacesById: Readonly<Record<string, WorkspaceSummary>>;\n /** Sessions rendered under their parent. */\n nested: ReadonlySet<string>;\n now: number;\n restarts: Readonly<Record<string, RailRestartState>>;\n /** Loaded profile avatars by session id. */\n avatarUrls: Readonly<Record<string, string>>;\n backgroundWorkSessions?: ReadonlySet<string>;\n}\n\nexport function workspaceName(workspace: Pick<WorkspaceSummary, 'root' | 'name'>): string {\n if (workspace.name) return workspace.name;\n const trimmed = workspace.root.replace(/\\/+$/u, '');\n return trimmed.slice(trimmed.lastIndexOf('/') + 1) || workspace.root;\n}\n\ntype PendingSetup = NonNullable<SessionSummary['pendingSetups']>[number];\n\n/** The status and recovery copy for a setup-only child reservation. */\nexport function pendingSetupView(setup: PendingSetup): WebTemplateRailPendingSetup {\n const setupType =\n setup.setupKind === 'existing-directory'\n ? 'conversation directory'\n : setup.setupKind === 'managed-worktree'\n ? 'automatic worktree'\n : 'conversation';\n const status =\n setup.status === 'failed'\n ? `${setupType} setup failed`\n : setup.status === 'interrupted'\n ? `${setupType} setup interrupted`\n : `${setupType} provisioning`;\n const recovery =\n setup.setupKind === undefined && setup.cwd !== undefined\n ? 'This existing setup has no verified provider. Inspect its ownership in Po before retrying.'\n : setup.errorCode === 'SESSION_UNAVAILABLE'\n ? 'The existing session is unavailable. Inspect or resume it in Po before retrying the conversation.'\n : setup.status === 'interrupted'\n ? 'Retry the authenticated conversation to resume this setup. The same setup will be reused.'\n : setup.setupKind === 'existing-directory'\n ? 'Inspect the selected directory, then retry the authenticated conversation. The same setup will be reused.'\n : 'Resolve the Git setup, then retry the authenticated conversation. The same setup will be reused.';\n const needsRecovery = setup.status === 'failed' || setup.status === 'interrupted';\n return {\n id: setup.id,\n name: setup.name,\n status,\n failed: setup.status === 'failed',\n ...(needsRecovery ? { recovery } : {}),\n };\n}\n\nfunction sessionView(id: string, ordinal: number, input: SessionRailModelInput): WebTemplateRailSession {\n const { summary, attach } = input.byId[id]!;\n const restart = input.restarts[id];\n const restarting = restart?.restarting === true;\n const status = restarting\n ? 'restarting…'\n : sessionStatusLine(\n {\n attach,\n backgroundWorkActive: input.backgroundWorkSessions?.has(id) === true,\n phase: summary.phase,\n phaseSince: summary.phaseSince,\n awaitingInput: summary.awaitingInput,\n everPrompted: summary.everPrompted,\n lastSettledAt: summary.lastSettledAt,\n dormant: summary.dormant,\n ...(summary.activity === undefined ? {} : { activity: summary.activity }),\n },\n input.now,\n );\n const nested = input.nested.has(id);\n const profile = summary.profile;\n const label = profile === undefined ? undefined : (profile.displayName ?? profile.name);\n const avatarUrl = input.avatarUrls[id];\n return {\n id,\n name: summary.name,\n ordinal,\n active: id === input.activeId,\n nested,\n ...(nested && summary.sessionProvenance !== undefined ? { provenance: summary.sessionProvenance } : {}),\n status,\n // The same priority the status copy uses: a refusal outranks the question,\n // and a restarting card is describing the restart, not the run it ended.\n // Background work that needs the reader, such as a failed workflow, is\n // marked the same way while the agent itself is idle.\n awaitingInput:\n (summary.awaitingInput ||\n (summary.activity?.attention === true && summary.phase === 'idle' && summary.dormant !== true)) &&\n attach !== 'refused' &&\n !restarting,\n restarting,\n restartBlocked: summary.dormant !== true && summary.phase !== undefined && summary.phase !== 'idle',\n ...(restart?.error === undefined ? {} : { error: restart.error }),\n ...(summary.git === undefined ? {} : { git: { branch: summary.git.branch, dirty: summary.git.dirty } }),\n ...(profile === undefined || label === undefined\n ? {}\n : {\n profile: {\n name: profile.name,\n label,\n initials: personaInitials(label),\n ...(avatarUrl === undefined ? {} : { avatarUrl }),\n },\n }),\n pendingSetups: (summary.pendingSetups ?? []).map(pendingSetupView),\n };\n}\n\n/** The rail's workspaces in host order, each with its sessions; ungrouped sessions last. */\nexport function buildRailWorkspaces(input: SessionRailModelInput): WebTemplateRailWorkspace[] {\n const ordinals = new Map(input.order.map((id, index) => [id, index + 1]));\n const grouped = new Set<string>();\n const workspaces: WebTemplateRailWorkspace[] = [];\n for (const workspaceId of input.workspaceOrder) {\n const workspace = input.workspacesById[workspaceId];\n if (workspace === undefined) continue;\n const ids = input.order.filter((id) => input.byId[id]?.summary.workspaceId === workspaceId);\n for (const id of ids) grouped.add(id);\n workspaces.push({\n id: workspaceId,\n name: workspaceName(workspace),\n root: workspace.root,\n available: workspace.available !== false,\n legacy: false,\n sessions: ids.map((id) => sessionView(id, ordinals.get(id) ?? 0, input)),\n });\n }\n const legacy = input.order.filter((id) => !grouped.has(id) && input.byId[id] !== undefined);\n if (legacy.length > 0) {\n const root = input.byId[legacy[0]!]!.summary.cwd;\n workspaces.push({\n id: LEGACY_WORKSPACE_ID,\n name: workspaceName({ root }),\n root,\n available: false,\n legacy: true,\n sessions: legacy.map((id) => sessionView(id, ordinals.get(id) ?? 0, input)),\n });\n }\n return workspaces;\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { SessionSummary, WorkspaceSummary } from "../../types/hub.mjs";
|
|
2
|
+
import { AttachPhase } from "./sessionSummary.mjs";
|
|
3
|
+
import { WebTemplateRailPendingSetup, WebTemplateRailWorkspace } from "@agimon-ai/po-core/web";
|
|
4
|
+
//#region src/web/lib/sessionRailModel.d.ts
|
|
5
|
+
/** Sessions recorded without a workspace are grouped under this id. */
|
|
6
|
+
export declare const LEGACY_WORKSPACE_ID = "legacy-workspace";
|
|
7
|
+
export interface RailSessionInput {
|
|
8
|
+
summary: SessionSummary;
|
|
9
|
+
attach: AttachPhase;
|
|
10
|
+
}
|
|
11
|
+
/** A restart the rail asked for: in flight, or failed with a reason. */
|
|
12
|
+
export interface RailRestartState {
|
|
13
|
+
restarting: boolean;
|
|
14
|
+
error?: string;
|
|
15
|
+
}
|
|
16
|
+
export interface SessionRailModelInput {
|
|
17
|
+
/** Rail order across every workspace; positions become the 1-9 ordinals. */
|
|
18
|
+
order: readonly string[];
|
|
19
|
+
byId: Readonly<Record<string, RailSessionInput>>;
|
|
20
|
+
activeId: string | null;
|
|
21
|
+
workspaceOrder: readonly string[];
|
|
22
|
+
workspacesById: Readonly<Record<string, WorkspaceSummary>>;
|
|
23
|
+
/** Sessions rendered under their parent. */
|
|
24
|
+
nested: ReadonlySet<string>;
|
|
25
|
+
now: number;
|
|
26
|
+
restarts: Readonly<Record<string, RailRestartState>>;
|
|
27
|
+
/** Loaded profile avatars by session id. */
|
|
28
|
+
avatarUrls: Readonly<Record<string, string>>;
|
|
29
|
+
backgroundWorkSessions?: ReadonlySet<string>;
|
|
30
|
+
}
|
|
31
|
+
export declare function workspaceName(workspace: Pick<WorkspaceSummary, 'root' | 'name'>): string;
|
|
32
|
+
type PendingSetup = NonNullable<SessionSummary['pendingSetups']>[number];
|
|
33
|
+
/** The status and recovery copy for a setup-only child reservation. */
|
|
34
|
+
export declare function pendingSetupView(setup: PendingSetup): WebTemplateRailPendingSetup;
|
|
35
|
+
/** The rail's workspaces in host order, each with its sessions; ungrouped sessions last. */
|
|
36
|
+
export declare function buildRailWorkspaces(input: SessionRailModelInput): WebTemplateRailWorkspace[];
|
|
37
|
+
//#endregion
|
|
38
|
+
//# sourceMappingURL=sessionRailModel.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessionRailModel.d.mts","names":[],"sources":["../../../src/web/lib/sessionRailModel.ts"],"mappings":";;;;;qBAUa;iBAEI;EACf,SAAS;EACT,QAAQ;;;iBAIO;EACf;EACA;;iBAGe;;EAEf;EACA,MAAM,SAAS,eAAe;EAC9B;EACA;EACA,gBAAgB,SAAS,eAAe;;EAExC,QAAQ;EACR;EACA,UAAU,SAAS,eAAe;;EAElC,YAAY,SAAS;EACrB,yBAAyB;;wBAGX,cAAc,WAAW,KAAK;KAMzC,eAAe,YAAY;;wBAGhB,iBAAiB,OAAO,eAAe;;wBA6FvC,oBAAoB,OAAO,wBAAwB"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { personaInitials, sessionStatusLine } from "./sessionSummary.mjs";
|
|
2
|
+
//#region src/web/lib/sessionRailModel.ts
|
|
3
|
+
/** Sessions recorded without a workspace are grouped under this id. */
|
|
4
|
+
const LEGACY_WORKSPACE_ID = "legacy-workspace";
|
|
5
|
+
function workspaceName(workspace) {
|
|
6
|
+
if (workspace.name) return workspace.name;
|
|
7
|
+
const trimmed = workspace.root.replace(/\/+$/u, "");
|
|
8
|
+
return trimmed.slice(trimmed.lastIndexOf("/") + 1) || workspace.root;
|
|
9
|
+
}
|
|
10
|
+
/** The status and recovery copy for a setup-only child reservation. */
|
|
11
|
+
function pendingSetupView(setup) {
|
|
12
|
+
const setupType = setup.setupKind === "existing-directory" ? "conversation directory" : setup.setupKind === "managed-worktree" ? "automatic worktree" : "conversation";
|
|
13
|
+
const status = setup.status === "failed" ? `${setupType} setup failed` : setup.status === "interrupted" ? `${setupType} setup interrupted` : `${setupType} provisioning`;
|
|
14
|
+
const recovery = setup.setupKind === void 0 && setup.cwd !== void 0 ? "This existing setup has no verified provider. Inspect its ownership in Po before retrying." : setup.errorCode === "SESSION_UNAVAILABLE" ? "The existing session is unavailable. Inspect or resume it in Po before retrying the conversation." : setup.status === "interrupted" ? "Retry the authenticated conversation to resume this setup. The same setup will be reused." : setup.setupKind === "existing-directory" ? "Inspect the selected directory, then retry the authenticated conversation. The same setup will be reused." : "Resolve the Git setup, then retry the authenticated conversation. The same setup will be reused.";
|
|
15
|
+
const needsRecovery = setup.status === "failed" || setup.status === "interrupted";
|
|
16
|
+
return {
|
|
17
|
+
id: setup.id,
|
|
18
|
+
name: setup.name,
|
|
19
|
+
status,
|
|
20
|
+
failed: setup.status === "failed",
|
|
21
|
+
...needsRecovery ? { recovery } : {}
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
function sessionView(id, ordinal, input) {
|
|
25
|
+
const { summary, attach } = input.byId[id];
|
|
26
|
+
const restart = input.restarts[id];
|
|
27
|
+
const restarting = restart?.restarting === true;
|
|
28
|
+
const status = restarting ? "restarting…" : sessionStatusLine({
|
|
29
|
+
attach,
|
|
30
|
+
backgroundWorkActive: input.backgroundWorkSessions?.has(id) === true,
|
|
31
|
+
phase: summary.phase,
|
|
32
|
+
phaseSince: summary.phaseSince,
|
|
33
|
+
awaitingInput: summary.awaitingInput,
|
|
34
|
+
everPrompted: summary.everPrompted,
|
|
35
|
+
lastSettledAt: summary.lastSettledAt,
|
|
36
|
+
dormant: summary.dormant,
|
|
37
|
+
...summary.activity === void 0 ? {} : { activity: summary.activity }
|
|
38
|
+
}, input.now);
|
|
39
|
+
const nested = input.nested.has(id);
|
|
40
|
+
const profile = summary.profile;
|
|
41
|
+
const label = profile === void 0 ? void 0 : profile.displayName ?? profile.name;
|
|
42
|
+
const avatarUrl = input.avatarUrls[id];
|
|
43
|
+
return {
|
|
44
|
+
id,
|
|
45
|
+
name: summary.name,
|
|
46
|
+
ordinal,
|
|
47
|
+
active: id === input.activeId,
|
|
48
|
+
nested,
|
|
49
|
+
...nested && summary.sessionProvenance !== void 0 ? { provenance: summary.sessionProvenance } : {},
|
|
50
|
+
status,
|
|
51
|
+
awaitingInput: (summary.awaitingInput || summary.activity?.attention === true && summary.phase === "idle" && summary.dormant !== true) && attach !== "refused" && !restarting,
|
|
52
|
+
restarting,
|
|
53
|
+
restartBlocked: summary.dormant !== true && summary.phase !== void 0 && summary.phase !== "idle",
|
|
54
|
+
...restart?.error === void 0 ? {} : { error: restart.error },
|
|
55
|
+
...summary.git === void 0 ? {} : { git: {
|
|
56
|
+
branch: summary.git.branch,
|
|
57
|
+
dirty: summary.git.dirty
|
|
58
|
+
} },
|
|
59
|
+
...profile === void 0 || label === void 0 ? {} : { profile: {
|
|
60
|
+
name: profile.name,
|
|
61
|
+
label,
|
|
62
|
+
initials: personaInitials(label),
|
|
63
|
+
...avatarUrl === void 0 ? {} : { avatarUrl }
|
|
64
|
+
} },
|
|
65
|
+
pendingSetups: (summary.pendingSetups ?? []).map(pendingSetupView)
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
/** The rail's workspaces in host order, each with its sessions; ungrouped sessions last. */
|
|
69
|
+
function buildRailWorkspaces(input) {
|
|
70
|
+
const ordinals = new Map(input.order.map((id, index) => [id, index + 1]));
|
|
71
|
+
const grouped = /* @__PURE__ */ new Set();
|
|
72
|
+
const workspaces = [];
|
|
73
|
+
for (const workspaceId of input.workspaceOrder) {
|
|
74
|
+
const workspace = input.workspacesById[workspaceId];
|
|
75
|
+
if (workspace === void 0) continue;
|
|
76
|
+
const ids = input.order.filter((id) => input.byId[id]?.summary.workspaceId === workspaceId);
|
|
77
|
+
for (const id of ids) grouped.add(id);
|
|
78
|
+
workspaces.push({
|
|
79
|
+
id: workspaceId,
|
|
80
|
+
name: workspaceName(workspace),
|
|
81
|
+
root: workspace.root,
|
|
82
|
+
available: workspace.available !== false,
|
|
83
|
+
legacy: false,
|
|
84
|
+
sessions: ids.map((id) => sessionView(id, ordinals.get(id) ?? 0, input))
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
const legacy = input.order.filter((id) => !grouped.has(id) && input.byId[id] !== void 0);
|
|
88
|
+
if (legacy.length > 0) {
|
|
89
|
+
const root = input.byId[legacy[0]].summary.cwd;
|
|
90
|
+
workspaces.push({
|
|
91
|
+
id: LEGACY_WORKSPACE_ID,
|
|
92
|
+
name: workspaceName({ root }),
|
|
93
|
+
root,
|
|
94
|
+
available: false,
|
|
95
|
+
legacy: true,
|
|
96
|
+
sessions: legacy.map((id) => sessionView(id, ordinals.get(id) ?? 0, input))
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
return workspaces;
|
|
100
|
+
}
|
|
101
|
+
//#endregion
|
|
102
|
+
export { LEGACY_WORKSPACE_ID, buildRailWorkspaces, pendingSetupView, workspaceName };
|
|
103
|
+
|
|
104
|
+
//# sourceMappingURL=sessionRailModel.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessionRailModel.mjs","names":[],"sources":["../../../src/web/lib/sessionRailModel.ts"],"sourcesContent":["import type {\n WebTemplateRailPendingSetup,\n WebTemplateRailSession,\n WebTemplateRailWorkspace,\n} from '@agimon-ai/po-core/web';\n\nimport type { SessionSummary, WorkspaceSummary } from '../../types/hub';\nimport { personaInitials, sessionStatusLine, type AttachPhase } from './sessionSummary';\n\n/** Sessions recorded without a workspace are grouped under this id. */\nexport const LEGACY_WORKSPACE_ID = 'legacy-workspace';\n\nexport interface RailSessionInput {\n summary: SessionSummary;\n attach: AttachPhase;\n}\n\n/** A restart the rail asked for: in flight, or failed with a reason. */\nexport interface RailRestartState {\n restarting: boolean;\n error?: string;\n}\n\nexport interface SessionRailModelInput {\n /** Rail order across every workspace; positions become the 1-9 ordinals. */\n order: readonly string[];\n byId: Readonly<Record<string, RailSessionInput>>;\n activeId: string | null;\n workspaceOrder: readonly string[];\n workspacesById: Readonly<Record<string, WorkspaceSummary>>;\n /** Sessions rendered under their parent. */\n nested: ReadonlySet<string>;\n now: number;\n restarts: Readonly<Record<string, RailRestartState>>;\n /** Loaded profile avatars by session id. */\n avatarUrls: Readonly<Record<string, string>>;\n backgroundWorkSessions?: ReadonlySet<string>;\n}\n\nexport function workspaceName(workspace: Pick<WorkspaceSummary, 'root' | 'name'>): string {\n if (workspace.name) return workspace.name;\n const trimmed = workspace.root.replace(/\\/+$/u, '');\n return trimmed.slice(trimmed.lastIndexOf('/') + 1) || workspace.root;\n}\n\ntype PendingSetup = NonNullable<SessionSummary['pendingSetups']>[number];\n\n/** The status and recovery copy for a setup-only child reservation. */\nexport function pendingSetupView(setup: PendingSetup): WebTemplateRailPendingSetup {\n const setupType =\n setup.setupKind === 'existing-directory'\n ? 'conversation directory'\n : setup.setupKind === 'managed-worktree'\n ? 'automatic worktree'\n : 'conversation';\n const status =\n setup.status === 'failed'\n ? `${setupType} setup failed`\n : setup.status === 'interrupted'\n ? `${setupType} setup interrupted`\n : `${setupType} provisioning`;\n const recovery =\n setup.setupKind === undefined && setup.cwd !== undefined\n ? 'This existing setup has no verified provider. Inspect its ownership in Po before retrying.'\n : setup.errorCode === 'SESSION_UNAVAILABLE'\n ? 'The existing session is unavailable. Inspect or resume it in Po before retrying the conversation.'\n : setup.status === 'interrupted'\n ? 'Retry the authenticated conversation to resume this setup. The same setup will be reused.'\n : setup.setupKind === 'existing-directory'\n ? 'Inspect the selected directory, then retry the authenticated conversation. The same setup will be reused.'\n : 'Resolve the Git setup, then retry the authenticated conversation. The same setup will be reused.';\n const needsRecovery = setup.status === 'failed' || setup.status === 'interrupted';\n return {\n id: setup.id,\n name: setup.name,\n status,\n failed: setup.status === 'failed',\n ...(needsRecovery ? { recovery } : {}),\n };\n}\n\nfunction sessionView(id: string, ordinal: number, input: SessionRailModelInput): WebTemplateRailSession {\n const { summary, attach } = input.byId[id]!;\n const restart = input.restarts[id];\n const restarting = restart?.restarting === true;\n const status = restarting\n ? 'restarting…'\n : sessionStatusLine(\n {\n attach,\n backgroundWorkActive: input.backgroundWorkSessions?.has(id) === true,\n phase: summary.phase,\n phaseSince: summary.phaseSince,\n awaitingInput: summary.awaitingInput,\n everPrompted: summary.everPrompted,\n lastSettledAt: summary.lastSettledAt,\n dormant: summary.dormant,\n ...(summary.activity === undefined ? {} : { activity: summary.activity }),\n },\n input.now,\n );\n const nested = input.nested.has(id);\n const profile = summary.profile;\n const label = profile === undefined ? undefined : (profile.displayName ?? profile.name);\n const avatarUrl = input.avatarUrls[id];\n return {\n id,\n name: summary.name,\n ordinal,\n active: id === input.activeId,\n nested,\n ...(nested && summary.sessionProvenance !== undefined ? { provenance: summary.sessionProvenance } : {}),\n status,\n // The same priority the status copy uses: a refusal outranks the question,\n // and a restarting card is describing the restart, not the run it ended.\n // Background work that needs the reader, such as a failed workflow, is\n // marked the same way while the agent itself is idle.\n awaitingInput:\n (summary.awaitingInput ||\n (summary.activity?.attention === true && summary.phase === 'idle' && summary.dormant !== true)) &&\n attach !== 'refused' &&\n !restarting,\n restarting,\n restartBlocked: summary.dormant !== true && summary.phase !== undefined && summary.phase !== 'idle',\n ...(restart?.error === undefined ? {} : { error: restart.error }),\n ...(summary.git === undefined ? {} : { git: { branch: summary.git.branch, dirty: summary.git.dirty } }),\n ...(profile === undefined || label === undefined\n ? {}\n : {\n profile: {\n name: profile.name,\n label,\n initials: personaInitials(label),\n ...(avatarUrl === undefined ? {} : { avatarUrl }),\n },\n }),\n pendingSetups: (summary.pendingSetups ?? []).map(pendingSetupView),\n };\n}\n\n/** The rail's workspaces in host order, each with its sessions; ungrouped sessions last. */\nexport function buildRailWorkspaces(input: SessionRailModelInput): WebTemplateRailWorkspace[] {\n const ordinals = new Map(input.order.map((id, index) => [id, index + 1]));\n const grouped = new Set<string>();\n const workspaces: WebTemplateRailWorkspace[] = [];\n for (const workspaceId of input.workspaceOrder) {\n const workspace = input.workspacesById[workspaceId];\n if (workspace === undefined) continue;\n const ids = input.order.filter((id) => input.byId[id]?.summary.workspaceId === workspaceId);\n for (const id of ids) grouped.add(id);\n workspaces.push({\n id: workspaceId,\n name: workspaceName(workspace),\n root: workspace.root,\n available: workspace.available !== false,\n legacy: false,\n sessions: ids.map((id) => sessionView(id, ordinals.get(id) ?? 0, input)),\n });\n }\n const legacy = input.order.filter((id) => !grouped.has(id) && input.byId[id] !== undefined);\n if (legacy.length > 0) {\n const root = input.byId[legacy[0]!]!.summary.cwd;\n workspaces.push({\n id: LEGACY_WORKSPACE_ID,\n name: workspaceName({ root }),\n root,\n available: false,\n legacy: true,\n sessions: legacy.map((id) => sessionView(id, ordinals.get(id) ?? 0, input)),\n });\n }\n return workspaces;\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
//#region src/web/lib/sessionSummary.ts
|
|
2
|
+
const MINUTE_MS = 6e4;
|
|
3
|
+
const HOUR_MS = 36e5;
|
|
4
|
+
function formatRunDuration(elapsedMs) {
|
|
5
|
+
if (elapsedMs < MINUTE_MS) return "<1m";
|
|
6
|
+
if (elapsedMs < HOUR_MS) return `${Math.floor(elapsedMs / MINUTE_MS)}m`;
|
|
7
|
+
const hours = Math.floor(elapsedMs / HOUR_MS);
|
|
8
|
+
const minutes = Math.floor(elapsedMs % HOUR_MS / MINUTE_MS);
|
|
9
|
+
return `${hours}h ${String(minutes).padStart(2, "0")}m`;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* The one mapping from session facts to the rail's status copy.
|
|
13
|
+
*
|
|
14
|
+
* Priority order: a refusal outranks everything because nothing else the card
|
|
15
|
+
* says can be trusted while another client holds the session; a question to
|
|
16
|
+
* the user outranks "running" because the run is blocked on them.
|
|
17
|
+
*/
|
|
18
|
+
function sessionStatusLine(input, now) {
|
|
19
|
+
if (input.attach === "refused") return "another cockpit holds this session";
|
|
20
|
+
if (input.dormant === true) return "stopped · open to wake";
|
|
21
|
+
if (input.awaitingInput) return "waiting for your input";
|
|
22
|
+
if (input.phase !== "idle") {
|
|
23
|
+
const since = Date.parse(input.phaseSince);
|
|
24
|
+
return `running · ${formatRunDuration(Number.isFinite(since) ? Math.max(0, now - since) : 0)}`;
|
|
25
|
+
}
|
|
26
|
+
if (input.backgroundWorkActive === true) return "running";
|
|
27
|
+
if (input.activity !== void 0) {
|
|
28
|
+
const since = input.activity.since === void 0 ? NaN : Date.parse(input.activity.since);
|
|
29
|
+
return Number.isFinite(since) ? `${input.activity.label} · ${formatRunDuration(Math.max(0, now - since))}` : input.activity.label;
|
|
30
|
+
}
|
|
31
|
+
if (!input.everPrompted && input.lastSettledAt === void 0) return "fresh session · nothing sent yet";
|
|
32
|
+
return "done · waiting for you";
|
|
33
|
+
}
|
|
34
|
+
/** Sessions counted as running by the rail header and the top bar chip. */
|
|
35
|
+
function runningCount(phases) {
|
|
36
|
+
let count = 0;
|
|
37
|
+
for (const phase of phases) if (phase !== "idle") count += 1;
|
|
38
|
+
return count;
|
|
39
|
+
}
|
|
40
|
+
/** Two letters standing in for a persona avatar: the first letters of two words, or one word's first two. */
|
|
41
|
+
function personaInitials(name) {
|
|
42
|
+
const words = name.trim().split(/\s+/u).filter(Boolean);
|
|
43
|
+
return (words.length > 1 ? `${words[0]?.[0] ?? ""}${words[1]?.[0] ?? ""}` : words[0]?.slice(0, 2) ?? "").toUpperCase() || "DP";
|
|
44
|
+
}
|
|
45
|
+
/** Shortens a home-rooted cwd the way a shell prompt would. */
|
|
46
|
+
function abbreviateCwd(cwd) {
|
|
47
|
+
const match = /^\/(?:Users|home)\/[^/]+/u.exec(cwd);
|
|
48
|
+
if (!match) return cwd;
|
|
49
|
+
return `~${cwd.slice(match[0].length)}`;
|
|
50
|
+
}
|
|
51
|
+
//#endregion
|
|
52
|
+
exports.abbreviateCwd = abbreviateCwd;
|
|
53
|
+
exports.formatRunDuration = formatRunDuration;
|
|
54
|
+
exports.personaInitials = personaInitials;
|
|
55
|
+
exports.runningCount = runningCount;
|
|
56
|
+
exports.sessionStatusLine = sessionStatusLine;
|
|
57
|
+
|
|
58
|
+
//# sourceMappingURL=sessionSummary.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessionSummary.cjs","names":[],"sources":["../../../src/web/lib/sessionSummary.ts"],"sourcesContent":["import type { SessionPhase } from '../../types/hub';\n\n/** The rail's view of one session's attach state; offline means the page lost the hub. */\nexport type AttachPhase = 'offline' | 'connecting' | 'attached' | 'refused' | 'detached' | 'closed';\n\nexport interface StatusLineInput {\n attach: AttachPhase;\n phase: SessionPhase;\n /** ISO 8601 timestamp of the last phase change. */\n phaseSince: string;\n awaitingInput: boolean;\n everPrompted: boolean;\n backgroundWorkActive?: boolean;\n /** Set once any run finished; a settled session is not \"fresh\" even unprompted. */\n lastSettledAt?: string;\n /** Recorded by the hub but not running; opening it is what starts it. */\n dormant?: boolean;\n /** A line an extension published about background work it runs for the session. */\n activity?: { label: string; since?: string };\n}\n\nconst MINUTE_MS = 60_000;\nconst HOUR_MS = 3_600_000;\n\nexport function formatRunDuration(elapsedMs: number): string {\n if (elapsedMs < MINUTE_MS) return '<1m';\n if (elapsedMs < HOUR_MS) return `${Math.floor(elapsedMs / MINUTE_MS)}m`;\n const hours = Math.floor(elapsedMs / HOUR_MS);\n const minutes = Math.floor((elapsedMs % HOUR_MS) / MINUTE_MS);\n return `${hours}h ${String(minutes).padStart(2, '0')}m`;\n}\n\n/**\n * The one mapping from session facts to the rail's status copy.\n *\n * Priority order: a refusal outranks everything because nothing else the card\n * says can be trusted while another client holds the session; a question to\n * the user outranks \"running\" because the run is blocked on them.\n */\nexport function sessionStatusLine(input: StatusLineInput, now: number): string {\n if (input.attach === 'refused') return 'another cockpit holds this session';\n // Ranked above the phase fields because a dormant card's phase is a default,\n // not an observation: there is no runtime to have reported one.\n if (input.dormant === true) return 'stopped · open to wake';\n if (input.awaitingInput) return 'waiting for your input';\n if (input.phase !== 'idle') {\n const since = Date.parse(input.phaseSince);\n return `running · ${formatRunDuration(Number.isFinite(since) ? Math.max(0, now - since) : 0)}`;\n }\n if (input.backgroundWorkActive === true) return 'running';\n // Background work outranks the idle copy: an agent waiting on a workflow is not \"done\".\n if (input.activity !== undefined) {\n const since = input.activity.since === undefined ? Number.NaN : Date.parse(input.activity.since);\n return Number.isFinite(since)\n ? `${input.activity.label} · ${formatRunDuration(Math.max(0, now - since))}`\n : input.activity.label;\n }\n if (!input.everPrompted && input.lastSettledAt === undefined) return 'fresh session · nothing sent yet';\n return 'done · waiting for you';\n}\n\n/** Sessions counted as running by the rail header and the top bar chip. */\nexport function runningCount(phases: Iterable<SessionPhase>): number {\n let count = 0;\n for (const phase of phases) if (phase !== 'idle') count += 1;\n return count;\n}\n\n/** Two letters standing in for a persona avatar: the first letters of two words, or one word's first two. */\nexport function personaInitials(name: string): string {\n const words = name.trim().split(/\\s+/u).filter(Boolean);\n const letters = words.length > 1 ? `${words[0]?.[0] ?? ''}${words[1]?.[0] ?? ''}` : (words[0]?.slice(0, 2) ?? '');\n return letters.toUpperCase() || 'DP';\n}\n\n/** Shortens a home-rooted cwd the way a shell prompt would. */\nexport function abbreviateCwd(cwd: string): string {\n const match = /^\\/(?:Users|home)\\/[^/]+/u.exec(cwd);\n if (!match) return cwd;\n return `~${cwd.slice(match[0].length)}`;\n}\n"],"mappings":";AAqBA,MAAM,YAAY;AAClB,MAAM,UAAU;AAEhB,SAAgB,kBAAkB,WAA2B;CAC3D,IAAI,YAAY,WAAW,OAAO;CAClC,IAAI,YAAY,SAAS,OAAO,GAAG,KAAK,MAAM,YAAY,SAAS,EAAE;CACrE,MAAM,QAAQ,KAAK,MAAM,YAAY,OAAO;CAC5C,MAAM,UAAU,KAAK,MAAO,YAAY,UAAW,SAAS;CAC5D,OAAO,GAAG,MAAM,IAAI,OAAO,OAAO,CAAC,CAAC,SAAS,GAAG,GAAG,EAAE;AACvD;;;;;;;;AASA,SAAgB,kBAAkB,OAAwB,KAAqB;CAC7E,IAAI,MAAM,WAAW,WAAW,OAAO;CAGvC,IAAI,MAAM,YAAY,MAAM,OAAO;CACnC,IAAI,MAAM,eAAe,OAAO;CAChC,IAAI,MAAM,UAAU,QAAQ;EAC1B,MAAM,QAAQ,KAAK,MAAM,MAAM,UAAU;EACzC,OAAO,aAAa,kBAAkB,OAAO,SAAS,KAAK,IAAI,KAAK,IAAI,GAAG,MAAM,KAAK,IAAI,CAAC;CAC7F;CACA,IAAI,MAAM,yBAAyB,MAAM,OAAO;CAEhD,IAAI,MAAM,aAAa,KAAA,GAAW;EAChC,MAAM,QAAQ,MAAM,SAAS,UAAU,KAAA,IAAY,MAAa,KAAK,MAAM,MAAM,SAAS,KAAK;EAC/F,OAAO,OAAO,SAAS,KAAK,IACxB,GAAG,MAAM,SAAS,MAAM,KAAK,kBAAkB,KAAK,IAAI,GAAG,MAAM,KAAK,CAAC,MACvE,MAAM,SAAS;CACrB;CACA,IAAI,CAAC,MAAM,gBAAgB,MAAM,kBAAkB,KAAA,GAAW,OAAO;CACrE,OAAO;AACT;;AAGA,SAAgB,aAAa,QAAwC;CACnE,IAAI,QAAQ;CACZ,KAAK,MAAM,SAAS,QAAQ,IAAI,UAAU,QAAQ,SAAS;CAC3D,OAAO;AACT;;AAGA,SAAgB,gBAAgB,MAAsB;CACpD,MAAM,QAAQ,KAAK,KAAK,CAAC,CAAC,MAAM,MAAM,CAAC,CAAC,OAAO,OAAO;CAEtD,QADgB,MAAM,SAAS,IAAI,GAAG,MAAM,EAAE,GAAG,MAAM,KAAK,MAAM,EAAE,GAAG,MAAM,OAAQ,MAAM,EAAE,EAAE,MAAM,GAAG,CAAC,KAAK,GAAA,CAC/F,YAAY,KAAK;AAClC;;AAGA,SAAgB,cAAc,KAAqB;CACjD,MAAM,QAAQ,4BAA4B,KAAK,GAAG;CAClD,IAAI,CAAC,OAAO,OAAO;CACnB,OAAO,IAAI,IAAI,MAAM,MAAM,EAAE,CAAC,MAAM;AACtC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { SessionPhase } from "../../types/hub.mjs";
|
|
2
|
+
//#region src/web/lib/sessionSummary.d.ts
|
|
3
|
+
/** The rail's view of one session's attach state; offline means the page lost the hub. */
|
|
4
|
+
export type AttachPhase = 'offline' | 'connecting' | 'attached' | 'refused' | 'detached' | 'closed';
|
|
5
|
+
export interface StatusLineInput {
|
|
6
|
+
attach: AttachPhase;
|
|
7
|
+
phase: SessionPhase;
|
|
8
|
+
/** ISO 8601 timestamp of the last phase change. */
|
|
9
|
+
phaseSince: string;
|
|
10
|
+
awaitingInput: boolean;
|
|
11
|
+
everPrompted: boolean;
|
|
12
|
+
backgroundWorkActive?: boolean;
|
|
13
|
+
/** Set once any run finished; a settled session is not "fresh" even unprompted. */
|
|
14
|
+
lastSettledAt?: string;
|
|
15
|
+
/** Recorded by the hub but not running; opening it is what starts it. */
|
|
16
|
+
dormant?: boolean;
|
|
17
|
+
/** A line an extension published about background work it runs for the session. */
|
|
18
|
+
activity?: {
|
|
19
|
+
label: string;
|
|
20
|
+
since?: string;
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
export declare function formatRunDuration(elapsedMs: number): string;
|
|
24
|
+
/**
|
|
25
|
+
* The one mapping from session facts to the rail's status copy.
|
|
26
|
+
*
|
|
27
|
+
* Priority order: a refusal outranks everything because nothing else the card
|
|
28
|
+
* says can be trusted while another client holds the session; a question to
|
|
29
|
+
* the user outranks "running" because the run is blocked on them.
|
|
30
|
+
*/
|
|
31
|
+
export declare function sessionStatusLine(input: StatusLineInput, now: number): string;
|
|
32
|
+
/** Sessions counted as running by the rail header and the top bar chip. */
|
|
33
|
+
export declare function runningCount(phases: Iterable<SessionPhase>): number;
|
|
34
|
+
/** Two letters standing in for a persona avatar: the first letters of two words, or one word's first two. */
|
|
35
|
+
export declare function personaInitials(name: string): string;
|
|
36
|
+
/** Shortens a home-rooted cwd the way a shell prompt would. */
|
|
37
|
+
export declare function abbreviateCwd(cwd: string): string;
|
|
38
|
+
//#endregion
|
|
39
|
+
//# sourceMappingURL=sessionSummary.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessionSummary.d.mts","names":[],"sources":["../../../src/web/lib/sessionSummary.ts"],"mappings":";;;YAGY;iBAEK;EACf,QAAQ;EACR,OAAO;;EAEP;EACA;EACA;EACA;;EAEA;;EAEA;;EAEA;IAAa;IAAe;;;wBAMd,kBAAkB;;;;;;;;wBAelB,kBAAkB,OAAO,iBAAiB;;wBAuB1C,aAAa,QAAQ,SAAS;;wBAO9B,gBAAgB;;wBAOhB,cAAc"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
//#region src/web/lib/sessionSummary.ts
|
|
2
|
+
const MINUTE_MS = 6e4;
|
|
3
|
+
const HOUR_MS = 36e5;
|
|
4
|
+
function formatRunDuration(elapsedMs) {
|
|
5
|
+
if (elapsedMs < MINUTE_MS) return "<1m";
|
|
6
|
+
if (elapsedMs < HOUR_MS) return `${Math.floor(elapsedMs / MINUTE_MS)}m`;
|
|
7
|
+
const hours = Math.floor(elapsedMs / HOUR_MS);
|
|
8
|
+
const minutes = Math.floor(elapsedMs % HOUR_MS / MINUTE_MS);
|
|
9
|
+
return `${hours}h ${String(minutes).padStart(2, "0")}m`;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* The one mapping from session facts to the rail's status copy.
|
|
13
|
+
*
|
|
14
|
+
* Priority order: a refusal outranks everything because nothing else the card
|
|
15
|
+
* says can be trusted while another client holds the session; a question to
|
|
16
|
+
* the user outranks "running" because the run is blocked on them.
|
|
17
|
+
*/
|
|
18
|
+
function sessionStatusLine(input, now) {
|
|
19
|
+
if (input.attach === "refused") return "another cockpit holds this session";
|
|
20
|
+
if (input.dormant === true) return "stopped · open to wake";
|
|
21
|
+
if (input.awaitingInput) return "waiting for your input";
|
|
22
|
+
if (input.phase !== "idle") {
|
|
23
|
+
const since = Date.parse(input.phaseSince);
|
|
24
|
+
return `running · ${formatRunDuration(Number.isFinite(since) ? Math.max(0, now - since) : 0)}`;
|
|
25
|
+
}
|
|
26
|
+
if (input.backgroundWorkActive === true) return "running";
|
|
27
|
+
if (input.activity !== void 0) {
|
|
28
|
+
const since = input.activity.since === void 0 ? NaN : Date.parse(input.activity.since);
|
|
29
|
+
return Number.isFinite(since) ? `${input.activity.label} · ${formatRunDuration(Math.max(0, now - since))}` : input.activity.label;
|
|
30
|
+
}
|
|
31
|
+
if (!input.everPrompted && input.lastSettledAt === void 0) return "fresh session · nothing sent yet";
|
|
32
|
+
return "done · waiting for you";
|
|
33
|
+
}
|
|
34
|
+
/** Sessions counted as running by the rail header and the top bar chip. */
|
|
35
|
+
function runningCount(phases) {
|
|
36
|
+
let count = 0;
|
|
37
|
+
for (const phase of phases) if (phase !== "idle") count += 1;
|
|
38
|
+
return count;
|
|
39
|
+
}
|
|
40
|
+
/** Two letters standing in for a persona avatar: the first letters of two words, or one word's first two. */
|
|
41
|
+
function personaInitials(name) {
|
|
42
|
+
const words = name.trim().split(/\s+/u).filter(Boolean);
|
|
43
|
+
return (words.length > 1 ? `${words[0]?.[0] ?? ""}${words[1]?.[0] ?? ""}` : words[0]?.slice(0, 2) ?? "").toUpperCase() || "DP";
|
|
44
|
+
}
|
|
45
|
+
/** Shortens a home-rooted cwd the way a shell prompt would. */
|
|
46
|
+
function abbreviateCwd(cwd) {
|
|
47
|
+
const match = /^\/(?:Users|home)\/[^/]+/u.exec(cwd);
|
|
48
|
+
if (!match) return cwd;
|
|
49
|
+
return `~${cwd.slice(match[0].length)}`;
|
|
50
|
+
}
|
|
51
|
+
//#endregion
|
|
52
|
+
export { abbreviateCwd, formatRunDuration, personaInitials, runningCount, sessionStatusLine };
|
|
53
|
+
|
|
54
|
+
//# sourceMappingURL=sessionSummary.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessionSummary.mjs","names":[],"sources":["../../../src/web/lib/sessionSummary.ts"],"sourcesContent":["import type { SessionPhase } from '../../types/hub';\n\n/** The rail's view of one session's attach state; offline means the page lost the hub. */\nexport type AttachPhase = 'offline' | 'connecting' | 'attached' | 'refused' | 'detached' | 'closed';\n\nexport interface StatusLineInput {\n attach: AttachPhase;\n phase: SessionPhase;\n /** ISO 8601 timestamp of the last phase change. */\n phaseSince: string;\n awaitingInput: boolean;\n everPrompted: boolean;\n backgroundWorkActive?: boolean;\n /** Set once any run finished; a settled session is not \"fresh\" even unprompted. */\n lastSettledAt?: string;\n /** Recorded by the hub but not running; opening it is what starts it. */\n dormant?: boolean;\n /** A line an extension published about background work it runs for the session. */\n activity?: { label: string; since?: string };\n}\n\nconst MINUTE_MS = 60_000;\nconst HOUR_MS = 3_600_000;\n\nexport function formatRunDuration(elapsedMs: number): string {\n if (elapsedMs < MINUTE_MS) return '<1m';\n if (elapsedMs < HOUR_MS) return `${Math.floor(elapsedMs / MINUTE_MS)}m`;\n const hours = Math.floor(elapsedMs / HOUR_MS);\n const minutes = Math.floor((elapsedMs % HOUR_MS) / MINUTE_MS);\n return `${hours}h ${String(minutes).padStart(2, '0')}m`;\n}\n\n/**\n * The one mapping from session facts to the rail's status copy.\n *\n * Priority order: a refusal outranks everything because nothing else the card\n * says can be trusted while another client holds the session; a question to\n * the user outranks \"running\" because the run is blocked on them.\n */\nexport function sessionStatusLine(input: StatusLineInput, now: number): string {\n if (input.attach === 'refused') return 'another cockpit holds this session';\n // Ranked above the phase fields because a dormant card's phase is a default,\n // not an observation: there is no runtime to have reported one.\n if (input.dormant === true) return 'stopped · open to wake';\n if (input.awaitingInput) return 'waiting for your input';\n if (input.phase !== 'idle') {\n const since = Date.parse(input.phaseSince);\n return `running · ${formatRunDuration(Number.isFinite(since) ? Math.max(0, now - since) : 0)}`;\n }\n if (input.backgroundWorkActive === true) return 'running';\n // Background work outranks the idle copy: an agent waiting on a workflow is not \"done\".\n if (input.activity !== undefined) {\n const since = input.activity.since === undefined ? Number.NaN : Date.parse(input.activity.since);\n return Number.isFinite(since)\n ? `${input.activity.label} · ${formatRunDuration(Math.max(0, now - since))}`\n : input.activity.label;\n }\n if (!input.everPrompted && input.lastSettledAt === undefined) return 'fresh session · nothing sent yet';\n return 'done · waiting for you';\n}\n\n/** Sessions counted as running by the rail header and the top bar chip. */\nexport function runningCount(phases: Iterable<SessionPhase>): number {\n let count = 0;\n for (const phase of phases) if (phase !== 'idle') count += 1;\n return count;\n}\n\n/** Two letters standing in for a persona avatar: the first letters of two words, or one word's first two. */\nexport function personaInitials(name: string): string {\n const words = name.trim().split(/\\s+/u).filter(Boolean);\n const letters = words.length > 1 ? `${words[0]?.[0] ?? ''}${words[1]?.[0] ?? ''}` : (words[0]?.slice(0, 2) ?? '');\n return letters.toUpperCase() || 'DP';\n}\n\n/** Shortens a home-rooted cwd the way a shell prompt would. */\nexport function abbreviateCwd(cwd: string): string {\n const match = /^\\/(?:Users|home)\\/[^/]+/u.exec(cwd);\n if (!match) return cwd;\n return `~${cwd.slice(match[0].length)}`;\n}\n"],"mappings":";AAqBA,MAAM,YAAY;AAClB,MAAM,UAAU;AAEhB,SAAgB,kBAAkB,WAA2B;CAC3D,IAAI,YAAY,WAAW,OAAO;CAClC,IAAI,YAAY,SAAS,OAAO,GAAG,KAAK,MAAM,YAAY,SAAS,EAAE;CACrE,MAAM,QAAQ,KAAK,MAAM,YAAY,OAAO;CAC5C,MAAM,UAAU,KAAK,MAAO,YAAY,UAAW,SAAS;CAC5D,OAAO,GAAG,MAAM,IAAI,OAAO,OAAO,CAAC,CAAC,SAAS,GAAG,GAAG,EAAE;AACvD;;;;;;;;AASA,SAAgB,kBAAkB,OAAwB,KAAqB;CAC7E,IAAI,MAAM,WAAW,WAAW,OAAO;CAGvC,IAAI,MAAM,YAAY,MAAM,OAAO;CACnC,IAAI,MAAM,eAAe,OAAO;CAChC,IAAI,MAAM,UAAU,QAAQ;EAC1B,MAAM,QAAQ,KAAK,MAAM,MAAM,UAAU;EACzC,OAAO,aAAa,kBAAkB,OAAO,SAAS,KAAK,IAAI,KAAK,IAAI,GAAG,MAAM,KAAK,IAAI,CAAC;CAC7F;CACA,IAAI,MAAM,yBAAyB,MAAM,OAAO;CAEhD,IAAI,MAAM,aAAa,KAAA,GAAW;EAChC,MAAM,QAAQ,MAAM,SAAS,UAAU,KAAA,IAAY,MAAa,KAAK,MAAM,MAAM,SAAS,KAAK;EAC/F,OAAO,OAAO,SAAS,KAAK,IACxB,GAAG,MAAM,SAAS,MAAM,KAAK,kBAAkB,KAAK,IAAI,GAAG,MAAM,KAAK,CAAC,MACvE,MAAM,SAAS;CACrB;CACA,IAAI,CAAC,MAAM,gBAAgB,MAAM,kBAAkB,KAAA,GAAW,OAAO;CACrE,OAAO;AACT;;AAGA,SAAgB,aAAa,QAAwC;CACnE,IAAI,QAAQ;CACZ,KAAK,MAAM,SAAS,QAAQ,IAAI,UAAU,QAAQ,SAAS;CAC3D,OAAO;AACT;;AAGA,SAAgB,gBAAgB,MAAsB;CACpD,MAAM,QAAQ,KAAK,KAAK,CAAC,CAAC,MAAM,MAAM,CAAC,CAAC,OAAO,OAAO;CAEtD,QADgB,MAAM,SAAS,IAAI,GAAG,MAAM,EAAE,GAAG,MAAM,KAAK,MAAM,EAAE,GAAG,MAAM,OAAQ,MAAM,EAAE,EAAE,MAAM,GAAG,CAAC,KAAK,GAAA,CAC/F,YAAY,KAAK;AAClC;;AAGA,SAAgB,cAAc,KAAqB;CACjD,MAAM,QAAQ,4BAA4B,KAAK,GAAG;CAClD,IAAI,CAAC,OAAO,OAAO;CACnB,OAAO,IAAI,IAAI,MAAM,MAAM,EAAE,CAAC,MAAM;AACtC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
//#region src/web/lib/sessionTranscriptRenderer.ts
|
|
2
|
+
let render;
|
|
3
|
+
/** Binds the host's conversation view of another session without exposing host stores to plugins. */
|
|
4
|
+
function bindSessionTranscriptRenderer(renderer) {
|
|
5
|
+
render = renderer;
|
|
6
|
+
}
|
|
7
|
+
function releaseSessionTranscriptRenderer() {
|
|
8
|
+
render = void 0;
|
|
9
|
+
}
|
|
10
|
+
/** The bound conversation view, or nothing before the app mounts and in unit tests. */
|
|
11
|
+
function renderSessionTranscript(sessionId, options) {
|
|
12
|
+
return render?.(sessionId, options) ?? null;
|
|
13
|
+
}
|
|
14
|
+
//#endregion
|
|
15
|
+
exports.bindSessionTranscriptRenderer = bindSessionTranscriptRenderer;
|
|
16
|
+
exports.releaseSessionTranscriptRenderer = releaseSessionTranscriptRenderer;
|
|
17
|
+
exports.renderSessionTranscript = renderSessionTranscript;
|
|
18
|
+
|
|
19
|
+
//# sourceMappingURL=sessionTranscriptRenderer.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessionTranscriptRenderer.cjs","names":[],"sources":["../../../src/web/lib/sessionTranscriptRenderer.ts"],"sourcesContent":["import type { ThreadViewOptions } from '@agimon-ai/po-core/web';\nimport type { ReactNode } from 'react';\n\ntype SessionTranscriptRenderer = (sessionId: string, options?: ThreadViewOptions) => ReactNode;\n\nlet render: SessionTranscriptRenderer | undefined;\n\n/** Binds the host's conversation view of another session without exposing host stores to plugins. */\nexport function bindSessionTranscriptRenderer(renderer: SessionTranscriptRenderer): void {\n render = renderer;\n}\n\nexport function releaseSessionTranscriptRenderer(): void {\n render = undefined;\n}\n\n/** The bound conversation view, or nothing before the app mounts and in unit tests. */\nexport function renderSessionTranscript(sessionId: string, options?: ThreadViewOptions): ReactNode {\n return render?.(sessionId, options) ?? null;\n}\n"],"mappings":";AAKA,IAAI;;AAGJ,SAAgB,8BAA8B,UAA2C;CACvF,SAAS;AACX;AAEA,SAAgB,mCAAyC;CACvD,SAAS,KAAA;AACX;;AAGA,SAAgB,wBAAwB,WAAmB,SAAwC;CACjG,OAAO,SAAS,WAAW,OAAO,KAAK;AACzC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ReactNode } from "react";
|
|
2
|
+
import { ThreadViewOptions } from "@agimon-ai/po-core/web";
|
|
3
|
+
//#region src/web/lib/sessionTranscriptRenderer.d.ts
|
|
4
|
+
type SessionTranscriptRenderer = (sessionId: string, options?: ThreadViewOptions) => ReactNode;
|
|
5
|
+
/** Binds the host's conversation view of another session without exposing host stores to plugins. */
|
|
6
|
+
export declare function bindSessionTranscriptRenderer(renderer: SessionTranscriptRenderer): void;
|
|
7
|
+
export declare function releaseSessionTranscriptRenderer(): void;
|
|
8
|
+
/** The bound conversation view, or nothing before the app mounts and in unit tests. */
|
|
9
|
+
export declare function renderSessionTranscript(sessionId: string, options?: ThreadViewOptions): ReactNode;
|
|
10
|
+
//#endregion
|
|
11
|
+
//# sourceMappingURL=sessionTranscriptRenderer.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessionTranscriptRenderer.d.mts","names":[],"sources":["../../../src/web/lib/sessionTranscriptRenderer.ts"],"mappings":";;;KAGK,6BAA6B,mBAAmB,UAAU,sBAAsB;;wBAKrE,8BAA8B,UAAU;wBAIxC;;wBAKA,wBAAwB,mBAAmB,UAAU,oBAAoB"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
//#region src/web/lib/sessionTranscriptRenderer.ts
|
|
2
|
+
let render;
|
|
3
|
+
/** Binds the host's conversation view of another session without exposing host stores to plugins. */
|
|
4
|
+
function bindSessionTranscriptRenderer(renderer) {
|
|
5
|
+
render = renderer;
|
|
6
|
+
}
|
|
7
|
+
function releaseSessionTranscriptRenderer() {
|
|
8
|
+
render = void 0;
|
|
9
|
+
}
|
|
10
|
+
/** The bound conversation view, or nothing before the app mounts and in unit tests. */
|
|
11
|
+
function renderSessionTranscript(sessionId, options) {
|
|
12
|
+
return render?.(sessionId, options) ?? null;
|
|
13
|
+
}
|
|
14
|
+
//#endregion
|
|
15
|
+
export { bindSessionTranscriptRenderer, releaseSessionTranscriptRenderer, renderSessionTranscript };
|
|
16
|
+
|
|
17
|
+
//# sourceMappingURL=sessionTranscriptRenderer.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessionTranscriptRenderer.mjs","names":[],"sources":["../../../src/web/lib/sessionTranscriptRenderer.ts"],"sourcesContent":["import type { ThreadViewOptions } from '@agimon-ai/po-core/web';\nimport type { ReactNode } from 'react';\n\ntype SessionTranscriptRenderer = (sessionId: string, options?: ThreadViewOptions) => ReactNode;\n\nlet render: SessionTranscriptRenderer | undefined;\n\n/** Binds the host's conversation view of another session without exposing host stores to plugins. */\nexport function bindSessionTranscriptRenderer(renderer: SessionTranscriptRenderer): void {\n render = renderer;\n}\n\nexport function releaseSessionTranscriptRenderer(): void {\n render = undefined;\n}\n\n/** The bound conversation view, or nothing before the app mounts and in unit tests. */\nexport function renderSessionTranscript(sessionId: string, options?: ThreadViewOptions): ReactNode {\n return render?.(sessionId, options) ?? null;\n}\n"],"mappings":";AAKA,IAAI;;AAGJ,SAAgB,8BAA8B,UAA2C;CACvF,SAAS;AACX;AAEA,SAAgB,mCAAyC;CACvD,SAAS,KAAA;AACX;;AAGA,SAAgB,wBAAwB,WAAmB,SAAwC;CACjG,OAAO,SAAS,WAAW,OAAO,KAAK;AACzC"}
|