@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,41 @@
|
|
|
1
|
+
import { STEP_UP_HEADER } from "../../types/remoteAccess.mjs";
|
|
2
|
+
import { sealedHttpSession } from "./sealedSession.mjs";
|
|
3
|
+
import { assertionFor } from "./webauthnClient.mjs";
|
|
4
|
+
//#region src/web/lib/stepUp.ts
|
|
5
|
+
const UNAUTHORIZED = 401;
|
|
6
|
+
/**
|
|
7
|
+
* Fetch that answers a step-up challenge once and retries.
|
|
8
|
+
*
|
|
9
|
+
* The server decides which actions need a gesture, not the client: it answers
|
|
10
|
+
* 401 naming the action, and this replays the identical request with an
|
|
11
|
+
* assertion attached. Keeping the decision server-side means a client that
|
|
12
|
+
* forgets to ask still cannot skip the gate, and it means adding a gated action
|
|
13
|
+
* needs no client change at all.
|
|
14
|
+
*
|
|
15
|
+
* Exactly one retry. A second 401 after a fresh gesture is a real refusal, and
|
|
16
|
+
* looping would turn a denied action into a biometric prompt that will not stop.
|
|
17
|
+
*/
|
|
18
|
+
async function fetchWithStepUp(input, init, requestAssertion = assertionFor) {
|
|
19
|
+
const first = await sealedHttpSession.fetch(input, init);
|
|
20
|
+
if (first.status !== UNAUTHORIZED) return first;
|
|
21
|
+
let action;
|
|
22
|
+
try {
|
|
23
|
+
action = (await first.clone().json()).action;
|
|
24
|
+
} catch {
|
|
25
|
+
return first;
|
|
26
|
+
}
|
|
27
|
+
if (typeof action !== "string") return first;
|
|
28
|
+
const assertion = await requestAssertion(action);
|
|
29
|
+
if (assertion === void 0) return first;
|
|
30
|
+
return await sealedHttpSession.fetch(input, {
|
|
31
|
+
...init,
|
|
32
|
+
headers: {
|
|
33
|
+
...init?.headers,
|
|
34
|
+
[STEP_UP_HEADER]: assertion
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
//#endregion
|
|
39
|
+
export { fetchWithStepUp };
|
|
40
|
+
|
|
41
|
+
//# sourceMappingURL=stepUp.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stepUp.mjs","names":[],"sources":["../../../src/web/lib/stepUp.ts"],"sourcesContent":["import { STEP_UP_HEADER } from '../../types/remoteAccess';\nimport { sealedHttpSession } from './sealedSession';\nimport { assertionFor } from './webauthnClient';\n\nconst UNAUTHORIZED = 401;\n\n/**\n * Fetch that answers a step-up challenge once and retries.\n *\n * The server decides which actions need a gesture, not the client: it answers\n * 401 naming the action, and this replays the identical request with an\n * assertion attached. Keeping the decision server-side means a client that\n * forgets to ask still cannot skip the gate, and it means adding a gated action\n * needs no client change at all.\n *\n * Exactly one retry. A second 401 after a fresh gesture is a real refusal, and\n * looping would turn a denied action into a biometric prompt that will not stop.\n */\nexport async function fetchWithStepUp(\n input: string,\n init?: RequestInit,\n /** Test seam, in the house style: the real one runs a WebAuthn ceremony. */\n requestAssertion: (action: string) => Promise<string | undefined> = assertionFor,\n): Promise<Response> {\n const first = await sealedHttpSession.fetch(input, init);\n if (first.status !== UNAUTHORIZED) return first;\n\n let action: unknown;\n try {\n action = ((await first.clone().json()) as { action?: unknown }).action;\n } catch {\n return first; // A 401 with no action is an ordinary refusal.\n }\n if (typeof action !== 'string') return first;\n\n const assertion = await requestAssertion(action);\n if (assertion === undefined) return first;\n\n return await sealedHttpSession.fetch(input, {\n ...init,\n headers: { ...(init?.headers as Record<string, string> | undefined), [STEP_UP_HEADER]: assertion },\n });\n}\n"],"mappings":";;;;AAIA,MAAM,eAAe;;;;;;;;;;;;;AAcrB,eAAsB,gBACpB,OACA,MAEA,mBAAoE,cACjD;CACnB,MAAM,QAAQ,MAAM,kBAAkB,MAAM,OAAO,IAAI;CACvD,IAAI,MAAM,WAAW,cAAc,OAAO;CAE1C,IAAI;CACJ,IAAI;EACF,UAAW,MAAM,MAAM,MAAM,CAAC,CAAC,KAAK,EAAA,CAA4B;CAClE,QAAQ;EACN,OAAO;CACT;CACA,IAAI,OAAO,WAAW,UAAU,OAAO;CAEvC,MAAM,YAAY,MAAM,iBAAiB,MAAM;CAC/C,IAAI,cAAc,KAAA,GAAW,OAAO;CAEpC,OAAO,MAAM,kBAAkB,MAAM,OAAO;EAC1C,GAAG;EACH,SAAS;GAAE,GAAI,MAAM;IAAiD,iBAAiB;EAAU;CACnG,CAAC;AACH"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
const require_pluginScopes = require("./pluginScopes.cjs");
|
|
2
|
+
let _agimon_ai_po_core_web = require("@agimon-ai/po-core/web");
|
|
3
|
+
//#region src/web/lib/templateCatalog.ts
|
|
4
|
+
let bundledTemplates = [];
|
|
5
|
+
/** The host supplies its bundled recovery application, avoiding a library-to-template dependency. */
|
|
6
|
+
function bindBundledWebTemplates(plugins) {
|
|
7
|
+
bundledTemplates = plugins;
|
|
8
|
+
}
|
|
9
|
+
/** One plugin field of template contributions, parsed entry by entry; the first owner of an id wins. */
|
|
10
|
+
function collectTemplates(plugins, field, parse, extra = () => []) {
|
|
11
|
+
const templates = /* @__PURE__ */ new Map();
|
|
12
|
+
const diagnostics = [];
|
|
13
|
+
const collect = (plugin) => {
|
|
14
|
+
let entries;
|
|
15
|
+
try {
|
|
16
|
+
entries = plugin[field];
|
|
17
|
+
} catch {
|
|
18
|
+
diagnostics.push({
|
|
19
|
+
kind: "invalid-template",
|
|
20
|
+
pluginId: plugin.id,
|
|
21
|
+
message: `Template metadata from '${plugin.id}' could not be read.`
|
|
22
|
+
});
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
if (entries === void 0) return;
|
|
26
|
+
if (!Array.isArray(entries)) {
|
|
27
|
+
diagnostics.push({
|
|
28
|
+
kind: "invalid-template",
|
|
29
|
+
pluginId: plugin.id,
|
|
30
|
+
message: `Plugin '${plugin.id}' must declare ${field} as an array.`
|
|
31
|
+
});
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
for (const entry of entries) {
|
|
35
|
+
let template;
|
|
36
|
+
try {
|
|
37
|
+
template = parse(entry);
|
|
38
|
+
} catch {
|
|
39
|
+
template = void 0;
|
|
40
|
+
}
|
|
41
|
+
if (template === void 0) {
|
|
42
|
+
diagnostics.push({
|
|
43
|
+
kind: "invalid-template",
|
|
44
|
+
pluginId: plugin.id,
|
|
45
|
+
message: `Plugin '${plugin.id}' declares an invalid template or an unsupported template contract.`
|
|
46
|
+
});
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
const owner = templates.get(template.id);
|
|
50
|
+
if (owner !== void 0) {
|
|
51
|
+
diagnostics.push({
|
|
52
|
+
kind: "duplicate-template",
|
|
53
|
+
pluginId: plugin.id,
|
|
54
|
+
message: `Template '${template.id}' is already provided by '${owner.pluginId}'; keeping the first.`
|
|
55
|
+
});
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
templates.set(template.id, {
|
|
59
|
+
...template,
|
|
60
|
+
pluginId: plugin.id
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
for (const plugin of plugins) collect(plugin);
|
|
65
|
+
for (const plugin of extra()) collect(plugin);
|
|
66
|
+
return {
|
|
67
|
+
templates: [...templates.values()],
|
|
68
|
+
diagnostics
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
/** Read scoped templates, then add the host's bundled recovery app when absent. */
|
|
72
|
+
function collectWebTemplates(plugins, scope) {
|
|
73
|
+
const first = collectTemplates(plugins, "templates", _agimon_ai_po_core_web.parseWebTemplate);
|
|
74
|
+
if (scope === void 0 || first.templates.some((template) => template.id === "po-template-advanced")) return first;
|
|
75
|
+
return collectTemplates(plugins, "templates", _agimon_ai_po_core_web.parseWebTemplate, () => require_pluginScopes.pluginsAtScope(bundledTemplates, scope));
|
|
76
|
+
}
|
|
77
|
+
let bundledNativeTemplates = [];
|
|
78
|
+
/** The phone app's bundled default layout, bound by the host exactly as the cockpit binds its own. */
|
|
79
|
+
function bindBundledNativeTemplates(plugins) {
|
|
80
|
+
bundledNativeTemplates = plugins;
|
|
81
|
+
}
|
|
82
|
+
/** Phone layouts from `nativeTemplates`, then the app's bundled Advanced when absent. */
|
|
83
|
+
function collectNativeTemplates(plugins, scope) {
|
|
84
|
+
const first = collectTemplates(plugins, "nativeTemplates", _agimon_ai_po_core_web.parseNativeTemplate);
|
|
85
|
+
if (scope === void 0 || first.templates.some((template) => template.id === "po-template-advanced")) return first;
|
|
86
|
+
return collectTemplates(plugins, "nativeTemplates", _agimon_ai_po_core_web.parseNativeTemplate, () => require_pluginScopes.pluginsAtScope(bundledNativeTemplates, scope));
|
|
87
|
+
}
|
|
88
|
+
/** The cockpit's choice rule for the phone: configured, then Advanced, then the first by id. */
|
|
89
|
+
function resolveNativeTemplate(templates, configured, failed = []) {
|
|
90
|
+
const available = templates.filter((template) => !failed.includes(template.id));
|
|
91
|
+
return available.find((template) => template.id === configured) ?? available.find((template) => template.id === "po-template-advanced") ?? [...available].sort((left, right) => left.id.localeCompare(right.id))[0];
|
|
92
|
+
}
|
|
93
|
+
/** A missing default stays in config, since another workspace may still provide it. */
|
|
94
|
+
function resolveWebTemplate(templates, configured, failed = []) {
|
|
95
|
+
const available = templates.filter((template) => !failed.includes(template.id));
|
|
96
|
+
const preferred = available.find((template) => template.id === configured);
|
|
97
|
+
const template = preferred ?? available.find((candidate) => candidate.id === "po-template-advanced") ?? [...available].sort((left, right) => left.id.localeCompare(right.id))[0];
|
|
98
|
+
if (!template) return {
|
|
99
|
+
template: void 0,
|
|
100
|
+
warning: "No compatible web template is available. Add a template package to modes.yaml and run po sync."
|
|
101
|
+
};
|
|
102
|
+
if (configured && !preferred) return {
|
|
103
|
+
template,
|
|
104
|
+
warning: `Configured template '${configured}' is unavailable; showing '${template.label}'.`
|
|
105
|
+
};
|
|
106
|
+
if (failed.length > 0) return {
|
|
107
|
+
template,
|
|
108
|
+
warning: "A template could not render. A different available template is being shown."
|
|
109
|
+
};
|
|
110
|
+
return {
|
|
111
|
+
template,
|
|
112
|
+
warning: void 0
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
//#endregion
|
|
116
|
+
exports.bindBundledNativeTemplates = bindBundledNativeTemplates;
|
|
117
|
+
exports.bindBundledWebTemplates = bindBundledWebTemplates;
|
|
118
|
+
exports.collectNativeTemplates = collectNativeTemplates;
|
|
119
|
+
exports.collectWebTemplates = collectWebTemplates;
|
|
120
|
+
exports.resolveNativeTemplate = resolveNativeTemplate;
|
|
121
|
+
exports.resolveWebTemplate = resolveWebTemplate;
|
|
122
|
+
|
|
123
|
+
//# sourceMappingURL=templateCatalog.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templateCatalog.cjs","names":["parseWebTemplate","pluginsAtScope","parseNativeTemplate"],"sources":["../../../src/web/lib/templateCatalog.ts"],"sourcesContent":["import {\n parseNativeTemplate,\n parseWebTemplate,\n type NativeTemplateContribution,\n type WebPluginDefinition,\n type WebPluginScope,\n type WebTemplateContribution,\n} from '@agimon-ai/po-core/web';\n\nimport { pluginsAtScope } from './pluginScopes';\nexport interface InstalledWebTemplate extends WebTemplateContribution {\n pluginId: string;\n}\n\nexport interface WebTemplateDiagnostic {\n kind: 'invalid-template' | 'duplicate-template';\n pluginId: string;\n message: string;\n}\n\nexport interface WebTemplateCatalog {\n templates: InstalledWebTemplate[];\n diagnostics: WebTemplateDiagnostic[];\n}\n\nlet bundledTemplates: readonly WebPluginDefinition[] = [];\n\n/** The host supplies its bundled recovery application, avoiding a library-to-template dependency. */\nexport function bindBundledWebTemplates(plugins: readonly WebPluginDefinition[]): void {\n bundledTemplates = plugins;\n}\n\n/** One plugin field of template contributions, parsed entry by entry; the first owner of an id wins. */\nfunction collectTemplates<T extends { id: string }>(\n plugins: readonly WebPluginDefinition[],\n field: 'templates' | 'nativeTemplates',\n parse: (value: unknown) => T | undefined,\n extra: () => readonly WebPluginDefinition[] = () => [],\n): { templates: (T & { pluginId: string })[]; diagnostics: WebTemplateDiagnostic[] } {\n const templates = new Map<string, T & { pluginId: string }>();\n const diagnostics: WebTemplateDiagnostic[] = [];\n const collect = (plugin: WebPluginDefinition): void => {\n let entries: unknown;\n try {\n entries = plugin[field];\n } catch {\n diagnostics.push({\n kind: 'invalid-template',\n pluginId: plugin.id,\n message: `Template metadata from '${plugin.id}' could not be read.`,\n });\n return;\n }\n if (entries === undefined) return;\n if (!Array.isArray(entries)) {\n diagnostics.push({\n kind: 'invalid-template',\n pluginId: plugin.id,\n message: `Plugin '${plugin.id}' must declare ${field} as an array.`,\n });\n return;\n }\n for (const entry of entries) {\n let template: T | undefined;\n try {\n template = parse(entry);\n } catch {\n template = undefined;\n }\n if (template === undefined) {\n diagnostics.push({\n kind: 'invalid-template',\n pluginId: plugin.id,\n message: `Plugin '${plugin.id}' declares an invalid template or an unsupported template contract.`,\n });\n continue;\n }\n const owner = templates.get(template.id);\n if (owner !== undefined) {\n diagnostics.push({\n kind: 'duplicate-template',\n pluginId: plugin.id,\n message: `Template '${template.id}' is already provided by '${owner.pluginId}'; keeping the first.`,\n });\n continue;\n }\n templates.set(template.id, { ...template, pluginId: plugin.id });\n }\n };\n\n for (const plugin of plugins) collect(plugin);\n for (const plugin of extra()) collect(plugin);\n return { templates: [...templates.values()], diagnostics };\n}\n\n/** Read scoped templates, then add the host's bundled recovery app when absent. */\nexport function collectWebTemplates(\n plugins: readonly WebPluginDefinition[],\n scope?: WebPluginScope,\n): WebTemplateCatalog {\n const first = collectTemplates(plugins, 'templates', parseWebTemplate);\n if (scope === undefined || first.templates.some((template) => template.id === 'po-template-advanced')) return first;\n return collectTemplates(plugins, 'templates', parseWebTemplate, () => pluginsAtScope(bundledTemplates, scope));\n}\n\nexport interface InstalledNativeTemplate extends NativeTemplateContribution {\n pluginId: string;\n}\n\nexport interface NativeTemplateCatalog {\n templates: InstalledNativeTemplate[];\n diagnostics: WebTemplateDiagnostic[];\n}\n\nlet bundledNativeTemplates: readonly WebPluginDefinition[] = [];\n\n/** The phone app's bundled default layout, bound by the host exactly as the cockpit binds its own. */\nexport function bindBundledNativeTemplates(plugins: readonly WebPluginDefinition[]): void {\n bundledNativeTemplates = plugins;\n}\n\n/** Phone layouts from `nativeTemplates`, then the app's bundled Advanced when absent. */\nexport function collectNativeTemplates(\n plugins: readonly WebPluginDefinition[],\n scope?: WebPluginScope,\n): NativeTemplateCatalog {\n const first = collectTemplates(plugins, 'nativeTemplates', parseNativeTemplate);\n if (scope === undefined || first.templates.some((template) => template.id === 'po-template-advanced')) return first;\n return collectTemplates(plugins, 'nativeTemplates', parseNativeTemplate, () =>\n pluginsAtScope(bundledNativeTemplates, scope),\n );\n}\n\n/** The cockpit's choice rule for the phone: configured, then Advanced, then the first by id. */\nexport function resolveNativeTemplate(\n templates: readonly InstalledNativeTemplate[],\n configured: string | undefined,\n failed: readonly string[] = [],\n): InstalledNativeTemplate | undefined {\n const available = templates.filter((template) => !failed.includes(template.id));\n return (\n available.find((template) => template.id === configured) ??\n available.find((template) => template.id === 'po-template-advanced') ??\n [...available].sort((left, right) => left.id.localeCompare(right.id))[0]\n );\n}\n\n/** A missing default stays in config, since another workspace may still provide it. */\nexport function resolveWebTemplate(\n templates: readonly InstalledWebTemplate[],\n configured: string | undefined,\n failed: readonly string[] = [],\n): { template: InstalledWebTemplate | undefined; warning: string | undefined } {\n const available = templates.filter((template) => !failed.includes(template.id));\n const preferred = available.find((template) => template.id === configured);\n const template =\n preferred ??\n available.find((candidate) => candidate.id === 'po-template-advanced') ??\n [...available].sort((left, right) => left.id.localeCompare(right.id))[0];\n if (!template)\n return {\n template: undefined,\n warning: 'No compatible web template is available. Add a template package to modes.yaml and run po sync.',\n };\n if (configured && !preferred)\n return { template, warning: `Configured template '${configured}' is unavailable; showing '${template.label}'.` };\n if (failed.length > 0)\n return { template, warning: 'A template could not render. A different available template is being shown.' };\n return { template, warning: undefined };\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { NativeTemplateContribution, WebPluginDefinition, WebPluginScope, WebTemplateContribution } from "@agimon-ai/po-core/web";
|
|
2
|
+
//#region src/web/lib/templateCatalog.d.ts
|
|
3
|
+
export interface InstalledWebTemplate extends WebTemplateContribution {
|
|
4
|
+
pluginId: string;
|
|
5
|
+
}
|
|
6
|
+
export interface WebTemplateDiagnostic {
|
|
7
|
+
kind: 'invalid-template' | 'duplicate-template';
|
|
8
|
+
pluginId: string;
|
|
9
|
+
message: string;
|
|
10
|
+
}
|
|
11
|
+
export interface WebTemplateCatalog {
|
|
12
|
+
templates: InstalledWebTemplate[];
|
|
13
|
+
diagnostics: WebTemplateDiagnostic[];
|
|
14
|
+
}
|
|
15
|
+
/** The host supplies its bundled recovery application, avoiding a library-to-template dependency. */
|
|
16
|
+
export declare function bindBundledWebTemplates(plugins: readonly WebPluginDefinition[]): void;
|
|
17
|
+
/** Read scoped templates, then add the host's bundled recovery app when absent. */
|
|
18
|
+
export declare function collectWebTemplates(plugins: readonly WebPluginDefinition[], scope?: WebPluginScope): WebTemplateCatalog;
|
|
19
|
+
export interface InstalledNativeTemplate extends NativeTemplateContribution {
|
|
20
|
+
pluginId: string;
|
|
21
|
+
}
|
|
22
|
+
export interface NativeTemplateCatalog {
|
|
23
|
+
templates: InstalledNativeTemplate[];
|
|
24
|
+
diagnostics: WebTemplateDiagnostic[];
|
|
25
|
+
}
|
|
26
|
+
/** The phone app's bundled default layout, bound by the host exactly as the cockpit binds its own. */
|
|
27
|
+
export declare function bindBundledNativeTemplates(plugins: readonly WebPluginDefinition[]): void;
|
|
28
|
+
/** Phone layouts from `nativeTemplates`, then the app's bundled Advanced when absent. */
|
|
29
|
+
export declare function collectNativeTemplates(plugins: readonly WebPluginDefinition[], scope?: WebPluginScope): NativeTemplateCatalog;
|
|
30
|
+
/** The cockpit's choice rule for the phone: configured, then Advanced, then the first by id. */
|
|
31
|
+
export declare function resolveNativeTemplate(templates: readonly InstalledNativeTemplate[], configured: string | undefined, failed?: readonly string[]): InstalledNativeTemplate | undefined;
|
|
32
|
+
/** A missing default stays in config, since another workspace may still provide it. */
|
|
33
|
+
export declare function resolveWebTemplate(templates: readonly InstalledWebTemplate[], configured: string | undefined, failed?: readonly string[]): {
|
|
34
|
+
template: InstalledWebTemplate | undefined;
|
|
35
|
+
warning: string | undefined;
|
|
36
|
+
};
|
|
37
|
+
//#endregion
|
|
38
|
+
//# sourceMappingURL=templateCatalog.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templateCatalog.d.mts","names":[],"sources":["../../../src/web/lib/templateCatalog.ts"],"mappings":";;iBAUiB,6BAA6B;EAC5C;;iBAGe;EACf;EACA;EACA;;iBAGe;EACf,WAAW;EACX,aAAa;;;wBAMC,wBAAwB,kBAAkB;;wBAoE1C,oBACd,kBAAkB,uBAClB,QAAQ,iBACP;iBAMc,gCAAgC;EAC/C;;iBAGe;EACf,WAAW;EACX,aAAa;;;wBAMC,2BAA2B,kBAAkB;;wBAK7C,uBACd,kBAAkB,uBAClB,QAAQ,iBACP;;wBASa,sBACd,oBAAoB,2BACpB,gCACA,6BACC;;wBAUa,mBACd,oBAAoB,wBACpB,gCACA;EACG,UAAU;EAAkC"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { pluginsAtScope } from "./pluginScopes.mjs";
|
|
2
|
+
import { parseNativeTemplate, parseWebTemplate } from "@agimon-ai/po-core/web";
|
|
3
|
+
//#region src/web/lib/templateCatalog.ts
|
|
4
|
+
let bundledTemplates = [];
|
|
5
|
+
/** The host supplies its bundled recovery application, avoiding a library-to-template dependency. */
|
|
6
|
+
function bindBundledWebTemplates(plugins) {
|
|
7
|
+
bundledTemplates = plugins;
|
|
8
|
+
}
|
|
9
|
+
/** One plugin field of template contributions, parsed entry by entry; the first owner of an id wins. */
|
|
10
|
+
function collectTemplates(plugins, field, parse, extra = () => []) {
|
|
11
|
+
const templates = /* @__PURE__ */ new Map();
|
|
12
|
+
const diagnostics = [];
|
|
13
|
+
const collect = (plugin) => {
|
|
14
|
+
let entries;
|
|
15
|
+
try {
|
|
16
|
+
entries = plugin[field];
|
|
17
|
+
} catch {
|
|
18
|
+
diagnostics.push({
|
|
19
|
+
kind: "invalid-template",
|
|
20
|
+
pluginId: plugin.id,
|
|
21
|
+
message: `Template metadata from '${plugin.id}' could not be read.`
|
|
22
|
+
});
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
if (entries === void 0) return;
|
|
26
|
+
if (!Array.isArray(entries)) {
|
|
27
|
+
diagnostics.push({
|
|
28
|
+
kind: "invalid-template",
|
|
29
|
+
pluginId: plugin.id,
|
|
30
|
+
message: `Plugin '${plugin.id}' must declare ${field} as an array.`
|
|
31
|
+
});
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
for (const entry of entries) {
|
|
35
|
+
let template;
|
|
36
|
+
try {
|
|
37
|
+
template = parse(entry);
|
|
38
|
+
} catch {
|
|
39
|
+
template = void 0;
|
|
40
|
+
}
|
|
41
|
+
if (template === void 0) {
|
|
42
|
+
diagnostics.push({
|
|
43
|
+
kind: "invalid-template",
|
|
44
|
+
pluginId: plugin.id,
|
|
45
|
+
message: `Plugin '${plugin.id}' declares an invalid template or an unsupported template contract.`
|
|
46
|
+
});
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
const owner = templates.get(template.id);
|
|
50
|
+
if (owner !== void 0) {
|
|
51
|
+
diagnostics.push({
|
|
52
|
+
kind: "duplicate-template",
|
|
53
|
+
pluginId: plugin.id,
|
|
54
|
+
message: `Template '${template.id}' is already provided by '${owner.pluginId}'; keeping the first.`
|
|
55
|
+
});
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
templates.set(template.id, {
|
|
59
|
+
...template,
|
|
60
|
+
pluginId: plugin.id
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
for (const plugin of plugins) collect(plugin);
|
|
65
|
+
for (const plugin of extra()) collect(plugin);
|
|
66
|
+
return {
|
|
67
|
+
templates: [...templates.values()],
|
|
68
|
+
diagnostics
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
/** Read scoped templates, then add the host's bundled recovery app when absent. */
|
|
72
|
+
function collectWebTemplates(plugins, scope) {
|
|
73
|
+
const first = collectTemplates(plugins, "templates", parseWebTemplate);
|
|
74
|
+
if (scope === void 0 || first.templates.some((template) => template.id === "po-template-advanced")) return first;
|
|
75
|
+
return collectTemplates(plugins, "templates", parseWebTemplate, () => pluginsAtScope(bundledTemplates, scope));
|
|
76
|
+
}
|
|
77
|
+
let bundledNativeTemplates = [];
|
|
78
|
+
/** The phone app's bundled default layout, bound by the host exactly as the cockpit binds its own. */
|
|
79
|
+
function bindBundledNativeTemplates(plugins) {
|
|
80
|
+
bundledNativeTemplates = plugins;
|
|
81
|
+
}
|
|
82
|
+
/** Phone layouts from `nativeTemplates`, then the app's bundled Advanced when absent. */
|
|
83
|
+
function collectNativeTemplates(plugins, scope) {
|
|
84
|
+
const first = collectTemplates(plugins, "nativeTemplates", parseNativeTemplate);
|
|
85
|
+
if (scope === void 0 || first.templates.some((template) => template.id === "po-template-advanced")) return first;
|
|
86
|
+
return collectTemplates(plugins, "nativeTemplates", parseNativeTemplate, () => pluginsAtScope(bundledNativeTemplates, scope));
|
|
87
|
+
}
|
|
88
|
+
/** The cockpit's choice rule for the phone: configured, then Advanced, then the first by id. */
|
|
89
|
+
function resolveNativeTemplate(templates, configured, failed = []) {
|
|
90
|
+
const available = templates.filter((template) => !failed.includes(template.id));
|
|
91
|
+
return available.find((template) => template.id === configured) ?? available.find((template) => template.id === "po-template-advanced") ?? [...available].sort((left, right) => left.id.localeCompare(right.id))[0];
|
|
92
|
+
}
|
|
93
|
+
/** A missing default stays in config, since another workspace may still provide it. */
|
|
94
|
+
function resolveWebTemplate(templates, configured, failed = []) {
|
|
95
|
+
const available = templates.filter((template) => !failed.includes(template.id));
|
|
96
|
+
const preferred = available.find((template) => template.id === configured);
|
|
97
|
+
const template = preferred ?? available.find((candidate) => candidate.id === "po-template-advanced") ?? [...available].sort((left, right) => left.id.localeCompare(right.id))[0];
|
|
98
|
+
if (!template) return {
|
|
99
|
+
template: void 0,
|
|
100
|
+
warning: "No compatible web template is available. Add a template package to modes.yaml and run po sync."
|
|
101
|
+
};
|
|
102
|
+
if (configured && !preferred) return {
|
|
103
|
+
template,
|
|
104
|
+
warning: `Configured template '${configured}' is unavailable; showing '${template.label}'.`
|
|
105
|
+
};
|
|
106
|
+
if (failed.length > 0) return {
|
|
107
|
+
template,
|
|
108
|
+
warning: "A template could not render. A different available template is being shown."
|
|
109
|
+
};
|
|
110
|
+
return {
|
|
111
|
+
template,
|
|
112
|
+
warning: void 0
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
//#endregion
|
|
116
|
+
export { bindBundledNativeTemplates, bindBundledWebTemplates, collectNativeTemplates, collectWebTemplates, resolveNativeTemplate, resolveWebTemplate };
|
|
117
|
+
|
|
118
|
+
//# sourceMappingURL=templateCatalog.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templateCatalog.mjs","names":[],"sources":["../../../src/web/lib/templateCatalog.ts"],"sourcesContent":["import {\n parseNativeTemplate,\n parseWebTemplate,\n type NativeTemplateContribution,\n type WebPluginDefinition,\n type WebPluginScope,\n type WebTemplateContribution,\n} from '@agimon-ai/po-core/web';\n\nimport { pluginsAtScope } from './pluginScopes';\nexport interface InstalledWebTemplate extends WebTemplateContribution {\n pluginId: string;\n}\n\nexport interface WebTemplateDiagnostic {\n kind: 'invalid-template' | 'duplicate-template';\n pluginId: string;\n message: string;\n}\n\nexport interface WebTemplateCatalog {\n templates: InstalledWebTemplate[];\n diagnostics: WebTemplateDiagnostic[];\n}\n\nlet bundledTemplates: readonly WebPluginDefinition[] = [];\n\n/** The host supplies its bundled recovery application, avoiding a library-to-template dependency. */\nexport function bindBundledWebTemplates(plugins: readonly WebPluginDefinition[]): void {\n bundledTemplates = plugins;\n}\n\n/** One plugin field of template contributions, parsed entry by entry; the first owner of an id wins. */\nfunction collectTemplates<T extends { id: string }>(\n plugins: readonly WebPluginDefinition[],\n field: 'templates' | 'nativeTemplates',\n parse: (value: unknown) => T | undefined,\n extra: () => readonly WebPluginDefinition[] = () => [],\n): { templates: (T & { pluginId: string })[]; diagnostics: WebTemplateDiagnostic[] } {\n const templates = new Map<string, T & { pluginId: string }>();\n const diagnostics: WebTemplateDiagnostic[] = [];\n const collect = (plugin: WebPluginDefinition): void => {\n let entries: unknown;\n try {\n entries = plugin[field];\n } catch {\n diagnostics.push({\n kind: 'invalid-template',\n pluginId: plugin.id,\n message: `Template metadata from '${plugin.id}' could not be read.`,\n });\n return;\n }\n if (entries === undefined) return;\n if (!Array.isArray(entries)) {\n diagnostics.push({\n kind: 'invalid-template',\n pluginId: plugin.id,\n message: `Plugin '${plugin.id}' must declare ${field} as an array.`,\n });\n return;\n }\n for (const entry of entries) {\n let template: T | undefined;\n try {\n template = parse(entry);\n } catch {\n template = undefined;\n }\n if (template === undefined) {\n diagnostics.push({\n kind: 'invalid-template',\n pluginId: plugin.id,\n message: `Plugin '${plugin.id}' declares an invalid template or an unsupported template contract.`,\n });\n continue;\n }\n const owner = templates.get(template.id);\n if (owner !== undefined) {\n diagnostics.push({\n kind: 'duplicate-template',\n pluginId: plugin.id,\n message: `Template '${template.id}' is already provided by '${owner.pluginId}'; keeping the first.`,\n });\n continue;\n }\n templates.set(template.id, { ...template, pluginId: plugin.id });\n }\n };\n\n for (const plugin of plugins) collect(plugin);\n for (const plugin of extra()) collect(plugin);\n return { templates: [...templates.values()], diagnostics };\n}\n\n/** Read scoped templates, then add the host's bundled recovery app when absent. */\nexport function collectWebTemplates(\n plugins: readonly WebPluginDefinition[],\n scope?: WebPluginScope,\n): WebTemplateCatalog {\n const first = collectTemplates(plugins, 'templates', parseWebTemplate);\n if (scope === undefined || first.templates.some((template) => template.id === 'po-template-advanced')) return first;\n return collectTemplates(plugins, 'templates', parseWebTemplate, () => pluginsAtScope(bundledTemplates, scope));\n}\n\nexport interface InstalledNativeTemplate extends NativeTemplateContribution {\n pluginId: string;\n}\n\nexport interface NativeTemplateCatalog {\n templates: InstalledNativeTemplate[];\n diagnostics: WebTemplateDiagnostic[];\n}\n\nlet bundledNativeTemplates: readonly WebPluginDefinition[] = [];\n\n/** The phone app's bundled default layout, bound by the host exactly as the cockpit binds its own. */\nexport function bindBundledNativeTemplates(plugins: readonly WebPluginDefinition[]): void {\n bundledNativeTemplates = plugins;\n}\n\n/** Phone layouts from `nativeTemplates`, then the app's bundled Advanced when absent. */\nexport function collectNativeTemplates(\n plugins: readonly WebPluginDefinition[],\n scope?: WebPluginScope,\n): NativeTemplateCatalog {\n const first = collectTemplates(plugins, 'nativeTemplates', parseNativeTemplate);\n if (scope === undefined || first.templates.some((template) => template.id === 'po-template-advanced')) return first;\n return collectTemplates(plugins, 'nativeTemplates', parseNativeTemplate, () =>\n pluginsAtScope(bundledNativeTemplates, scope),\n );\n}\n\n/** The cockpit's choice rule for the phone: configured, then Advanced, then the first by id. */\nexport function resolveNativeTemplate(\n templates: readonly InstalledNativeTemplate[],\n configured: string | undefined,\n failed: readonly string[] = [],\n): InstalledNativeTemplate | undefined {\n const available = templates.filter((template) => !failed.includes(template.id));\n return (\n available.find((template) => template.id === configured) ??\n available.find((template) => template.id === 'po-template-advanced') ??\n [...available].sort((left, right) => left.id.localeCompare(right.id))[0]\n );\n}\n\n/** A missing default stays in config, since another workspace may still provide it. */\nexport function resolveWebTemplate(\n templates: readonly InstalledWebTemplate[],\n configured: string | undefined,\n failed: readonly string[] = [],\n): { template: InstalledWebTemplate | undefined; warning: string | undefined } {\n const available = templates.filter((template) => !failed.includes(template.id));\n const preferred = available.find((template) => template.id === configured);\n const template =\n preferred ??\n available.find((candidate) => candidate.id === 'po-template-advanced') ??\n [...available].sort((left, right) => left.id.localeCompare(right.id))[0];\n if (!template)\n return {\n template: undefined,\n warning: 'No compatible web template is available. Add a template package to modes.yaml and run po sync.',\n };\n if (configured && !preferred)\n return { template, warning: `Configured template '${configured}' is unavailable; showing '${template.label}'.` };\n if (failed.length > 0)\n return { template, warning: 'A template could not render. A different available template is being shown.' };\n return { template, warning: undefined };\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
//#region src/web/lib/threadRenderer.ts
|
|
2
|
+
let render;
|
|
3
|
+
/**
|
|
4
|
+
* Holds the host's thread view for the plugin props to render.
|
|
5
|
+
*
|
|
6
|
+
* The view is a feature built on the timeline, while the props are assembled
|
|
7
|
+
* below it; the composition root binds the one to the other, the same
|
|
8
|
+
* indirection the transport uses for the socket.
|
|
9
|
+
*/
|
|
10
|
+
function bindThreadRenderer(renderer) {
|
|
11
|
+
render = renderer;
|
|
12
|
+
}
|
|
13
|
+
function releaseThreadRenderer() {
|
|
14
|
+
render = void 0;
|
|
15
|
+
}
|
|
16
|
+
/** The bound view, or nothing while none is bound (before the app mounts, and in unit tests). */
|
|
17
|
+
function renderThread(sessionId, threadId, options) {
|
|
18
|
+
return render?.(sessionId, threadId, options) ?? null;
|
|
19
|
+
}
|
|
20
|
+
//#endregion
|
|
21
|
+
exports.bindThreadRenderer = bindThreadRenderer;
|
|
22
|
+
exports.releaseThreadRenderer = releaseThreadRenderer;
|
|
23
|
+
exports.renderThread = renderThread;
|
|
24
|
+
|
|
25
|
+
//# sourceMappingURL=threadRenderer.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"threadRenderer.cjs","names":[],"sources":["../../../src/web/lib/threadRenderer.ts"],"sourcesContent":["import type { ThreadViewOptions } from '@agimon-ai/po-core/web';\nimport type { ReactNode } from 'react';\n\ntype ThreadRenderer = (sessionId: string, threadId: string, options?: ThreadViewOptions) => ReactNode;\n\nlet render: ThreadRenderer | undefined;\n\n/**\n * Holds the host's thread view for the plugin props to render.\n *\n * The view is a feature built on the timeline, while the props are assembled\n * below it; the composition root binds the one to the other, the same\n * indirection the transport uses for the socket.\n */\nexport function bindThreadRenderer(renderer: ThreadRenderer): void {\n render = renderer;\n}\n\nexport function releaseThreadRenderer(): void {\n render = undefined;\n}\n\n/** The bound view, or nothing while none is bound (before the app mounts, and in unit tests). */\nexport function renderThread(sessionId: string, threadId: string, options?: ThreadViewOptions): ReactNode {\n return render?.(sessionId, threadId, options) ?? null;\n}\n"],"mappings":";AAKA,IAAI;;;;;;;;AASJ,SAAgB,mBAAmB,UAAgC;CACjE,SAAS;AACX;AAEA,SAAgB,wBAA8B;CAC5C,SAAS,KAAA;AACX;;AAGA,SAAgB,aAAa,WAAmB,UAAkB,SAAwC;CACxG,OAAO,SAAS,WAAW,UAAU,OAAO,KAAK;AACnD"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { ReactNode } from "react";
|
|
2
|
+
import { ThreadViewOptions } from "@agimon-ai/po-core/web";
|
|
3
|
+
//#region src/web/lib/threadRenderer.d.ts
|
|
4
|
+
type ThreadRenderer = (sessionId: string, threadId: string, options?: ThreadViewOptions) => ReactNode;
|
|
5
|
+
/**
|
|
6
|
+
* Holds the host's thread view for the plugin props to render.
|
|
7
|
+
*
|
|
8
|
+
* The view is a feature built on the timeline, while the props are assembled
|
|
9
|
+
* below it; the composition root binds the one to the other, the same
|
|
10
|
+
* indirection the transport uses for the socket.
|
|
11
|
+
*/
|
|
12
|
+
export declare function bindThreadRenderer(renderer: ThreadRenderer): void;
|
|
13
|
+
export declare function releaseThreadRenderer(): void;
|
|
14
|
+
/** The bound view, or nothing while none is bound (before the app mounts, and in unit tests). */
|
|
15
|
+
export declare function renderThread(sessionId: string, threadId: string, options?: ThreadViewOptions): ReactNode;
|
|
16
|
+
//#endregion
|
|
17
|
+
//# sourceMappingURL=threadRenderer.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"threadRenderer.d.mts","names":[],"sources":["../../../src/web/lib/threadRenderer.ts"],"mappings":";;;KAGK,kBAAkB,mBAAmB,kBAAkB,UAAU,sBAAsB;;;;;;;;wBAW5E,mBAAmB,UAAU;wBAI7B;;wBAKA,aAAa,mBAAmB,kBAAkB,UAAU,oBAAoB"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
//#region src/web/lib/threadRenderer.ts
|
|
2
|
+
let render;
|
|
3
|
+
/**
|
|
4
|
+
* Holds the host's thread view for the plugin props to render.
|
|
5
|
+
*
|
|
6
|
+
* The view is a feature built on the timeline, while the props are assembled
|
|
7
|
+
* below it; the composition root binds the one to the other, the same
|
|
8
|
+
* indirection the transport uses for the socket.
|
|
9
|
+
*/
|
|
10
|
+
function bindThreadRenderer(renderer) {
|
|
11
|
+
render = renderer;
|
|
12
|
+
}
|
|
13
|
+
function releaseThreadRenderer() {
|
|
14
|
+
render = void 0;
|
|
15
|
+
}
|
|
16
|
+
/** The bound view, or nothing while none is bound (before the app mounts, and in unit tests). */
|
|
17
|
+
function renderThread(sessionId, threadId, options) {
|
|
18
|
+
return render?.(sessionId, threadId, options) ?? null;
|
|
19
|
+
}
|
|
20
|
+
//#endregion
|
|
21
|
+
export { bindThreadRenderer, releaseThreadRenderer, renderThread };
|
|
22
|
+
|
|
23
|
+
//# sourceMappingURL=threadRenderer.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"threadRenderer.mjs","names":[],"sources":["../../../src/web/lib/threadRenderer.ts"],"sourcesContent":["import type { ThreadViewOptions } from '@agimon-ai/po-core/web';\nimport type { ReactNode } from 'react';\n\ntype ThreadRenderer = (sessionId: string, threadId: string, options?: ThreadViewOptions) => ReactNode;\n\nlet render: ThreadRenderer | undefined;\n\n/**\n * Holds the host's thread view for the plugin props to render.\n *\n * The view is a feature built on the timeline, while the props are assembled\n * below it; the composition root binds the one to the other, the same\n * indirection the transport uses for the socket.\n */\nexport function bindThreadRenderer(renderer: ThreadRenderer): void {\n render = renderer;\n}\n\nexport function releaseThreadRenderer(): void {\n render = undefined;\n}\n\n/** The bound view, or nothing while none is bound (before the app mounts, and in unit tests). */\nexport function renderThread(sessionId: string, threadId: string, options?: ThreadViewOptions): ReactNode {\n return render?.(sessionId, threadId, options) ?? null;\n}\n"],"mappings":";AAKA,IAAI;;;;;;;;AASJ,SAAgB,mBAAmB,UAAgC;CACjE,SAAS;AACX;AAEA,SAAgB,wBAA8B;CAC5C,SAAS,KAAA;AACX;;AAGA,SAAgB,aAAa,WAAmB,UAAkB,SAAwC;CACxG,OAAO,SAAS,WAAW,UAAU,OAAO,KAAK;AACnD"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
//#region src/web/lib/timelineGroups.ts
|
|
2
|
+
/**
|
|
3
|
+
* Runs of the same tool, gathered so the transcript draws one frame instead of
|
|
4
|
+
* five.
|
|
5
|
+
*
|
|
6
|
+
* An agent rarely calls a tool once: it reads four files, or runs five
|
|
7
|
+
* commands, and each call arrives as its own entry. Rendered one card apiece
|
|
8
|
+
* that reads as repetition rather than as progress, so adjacent calls of the
|
|
9
|
+
* same tool are handed to the timeline as a single unit. Grouping is decided
|
|
10
|
+
* here, on the entry list alone, so it can be tested without a browser and the
|
|
11
|
+
* component stays a renderer.
|
|
12
|
+
*/
|
|
13
|
+
/** Two calls are the fewest that can read as a repetition, so a lone call keeps its card. */
|
|
14
|
+
const MIN_GROUP = 2;
|
|
15
|
+
function isTool(entry) {
|
|
16
|
+
return entry?.kind === "tool";
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* The entries as units to render.
|
|
20
|
+
*
|
|
21
|
+
* `groupable` decides which tool names may be gathered: a tool whose renderer
|
|
22
|
+
* presents itself as a message, not a card, has no frame to share and stays on
|
|
23
|
+
* its own. Only adjacent entries group, so anything between two calls, an
|
|
24
|
+
* assistant reply or a notice, ends the run and keeps the transcript in order.
|
|
25
|
+
*/
|
|
26
|
+
function timelineUnits(entries, groupable) {
|
|
27
|
+
const units = [];
|
|
28
|
+
let index = 0;
|
|
29
|
+
while (index < entries.length) {
|
|
30
|
+
const entry = entries[index];
|
|
31
|
+
if (entry === void 0) break;
|
|
32
|
+
if (!isTool(entry) || !groupable(entry.name)) {
|
|
33
|
+
units.push({
|
|
34
|
+
kind: "single",
|
|
35
|
+
entry,
|
|
36
|
+
index
|
|
37
|
+
});
|
|
38
|
+
index += 1;
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
const run = [entry];
|
|
42
|
+
let next = index + 1;
|
|
43
|
+
while (next < entries.length) {
|
|
44
|
+
const candidate = entries[next];
|
|
45
|
+
if (!isTool(candidate) || candidate.name !== entry.name) break;
|
|
46
|
+
run.push(candidate);
|
|
47
|
+
next += 1;
|
|
48
|
+
}
|
|
49
|
+
if (run.length < MIN_GROUP) units.push({
|
|
50
|
+
kind: "single",
|
|
51
|
+
entry,
|
|
52
|
+
index
|
|
53
|
+
});
|
|
54
|
+
else units.push({
|
|
55
|
+
kind: "group",
|
|
56
|
+
name: entry.name,
|
|
57
|
+
entries: run,
|
|
58
|
+
index: next - 1
|
|
59
|
+
});
|
|
60
|
+
index = next;
|
|
61
|
+
}
|
|
62
|
+
return units;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* The group's own outcome: the worst thing in it. A run that is still going
|
|
66
|
+
* reads as running, a run with a failure in it reads as failed, and only a run
|
|
67
|
+
* where everything landed reads as ok.
|
|
68
|
+
*/
|
|
69
|
+
function groupTone(entries) {
|
|
70
|
+
if (entries.some((entry) => entry.running)) return "running";
|
|
71
|
+
if (entries.some((entry) => entry.isError)) return "error";
|
|
72
|
+
return "ok";
|
|
73
|
+
}
|
|
74
|
+
/** `5 calls`, the line beside the tool's name in the group header. */
|
|
75
|
+
function groupSummary(entries) {
|
|
76
|
+
return `${String(entries.length)} call${entries.length === 1 ? "" : "s"}`;
|
|
77
|
+
}
|
|
78
|
+
//#endregion
|
|
79
|
+
exports.groupSummary = groupSummary;
|
|
80
|
+
exports.groupTone = groupTone;
|
|
81
|
+
exports.timelineUnits = timelineUnits;
|
|
82
|
+
|
|
83
|
+
//# sourceMappingURL=timelineGroups.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timelineGroups.cjs","names":[],"sources":["../../../src/web/lib/timelineGroups.ts"],"sourcesContent":["import type { StatusTone } from '@agimon-ai/po-web-components';\n\nimport type { TimelineEntry, ToolEntry } from './sessionModel';\n\n/**\n * Runs of the same tool, gathered so the transcript draws one frame instead of\n * five.\n *\n * An agent rarely calls a tool once: it reads four files, or runs five\n * commands, and each call arrives as its own entry. Rendered one card apiece\n * that reads as repetition rather than as progress, so adjacent calls of the\n * same tool are handed to the timeline as a single unit. Grouping is decided\n * here, on the entry list alone, so it can be tested without a browser and the\n * component stays a renderer.\n */\n\n/** Two calls are the fewest that can read as a repetition, so a lone call keeps its card. */\nconst MIN_GROUP = 2;\n\nexport interface SingleUnit {\n readonly kind: 'single';\n readonly entry: TimelineEntry;\n /** The entry's index in the source list, for the timeline's live-tail window. */\n readonly index: number;\n}\n\nexport interface GroupUnit {\n readonly kind: 'group';\n readonly name: string;\n readonly entries: readonly ToolEntry[];\n /** The index of the last entry in the run, so a group is skipped only once it is fully above the tail. */\n readonly index: number;\n}\n\nexport type TimelineUnit = SingleUnit | GroupUnit;\n\nfunction isTool(entry: TimelineEntry | undefined): entry is ToolEntry {\n return entry?.kind === 'tool';\n}\n\n/**\n * The entries as units to render.\n *\n * `groupable` decides which tool names may be gathered: a tool whose renderer\n * presents itself as a message, not a card, has no frame to share and stays on\n * its own. Only adjacent entries group, so anything between two calls, an\n * assistant reply or a notice, ends the run and keeps the transcript in order.\n */\nexport function timelineUnits(\n entries: readonly TimelineEntry[],\n groupable: (name: string) => boolean,\n): readonly TimelineUnit[] {\n const units: TimelineUnit[] = [];\n let index = 0;\n while (index < entries.length) {\n const entry = entries[index];\n if (entry === undefined) break;\n if (!isTool(entry) || !groupable(entry.name)) {\n units.push({ kind: 'single', entry, index });\n index += 1;\n continue;\n }\n const run: ToolEntry[] = [entry];\n let next = index + 1;\n while (next < entries.length) {\n const candidate = entries[next];\n if (!isTool(candidate) || candidate.name !== entry.name) break;\n run.push(candidate);\n next += 1;\n }\n if (run.length < MIN_GROUP) units.push({ kind: 'single', entry, index });\n else units.push({ kind: 'group', name: entry.name, entries: run, index: next - 1 });\n index = next;\n }\n return units;\n}\n\n/**\n * The group's own outcome: the worst thing in it. A run that is still going\n * reads as running, a run with a failure in it reads as failed, and only a run\n * where everything landed reads as ok.\n */\nexport function groupTone(entries: readonly ToolEntry[]): StatusTone {\n if (entries.some((entry) => entry.running)) return 'running';\n if (entries.some((entry) => entry.isError)) return 'error';\n return 'ok';\n}\n\n/** `5 calls`, the line beside the tool's name in the group header. */\nexport function groupSummary(entries: readonly ToolEntry[]): string {\n return `${String(entries.length)} call${entries.length === 1 ? '' : 's'}`;\n}\n"],"mappings":";;;;;;;;;;;;;AAiBA,MAAM,YAAY;AAmBlB,SAAS,OAAO,OAAsD;CACpE,OAAO,OAAO,SAAS;AACzB;;;;;;;;;AAUA,SAAgB,cACd,SACA,WACyB;CACzB,MAAM,QAAwB,CAAC;CAC/B,IAAI,QAAQ;CACZ,OAAO,QAAQ,QAAQ,QAAQ;EAC7B,MAAM,QAAQ,QAAQ;EACtB,IAAI,UAAU,KAAA,GAAW;EACzB,IAAI,CAAC,OAAO,KAAK,KAAK,CAAC,UAAU,MAAM,IAAI,GAAG;GAC5C,MAAM,KAAK;IAAE,MAAM;IAAU;IAAO;GAAM,CAAC;GAC3C,SAAS;GACT;EACF;EACA,MAAM,MAAmB,CAAC,KAAK;EAC/B,IAAI,OAAO,QAAQ;EACnB,OAAO,OAAO,QAAQ,QAAQ;GAC5B,MAAM,YAAY,QAAQ;GAC1B,IAAI,CAAC,OAAO,SAAS,KAAK,UAAU,SAAS,MAAM,MAAM;GACzD,IAAI,KAAK,SAAS;GAClB,QAAQ;EACV;EACA,IAAI,IAAI,SAAS,WAAW,MAAM,KAAK;GAAE,MAAM;GAAU;GAAO;EAAM,CAAC;OAClE,MAAM,KAAK;GAAE,MAAM;GAAS,MAAM,MAAM;GAAM,SAAS;GAAK,OAAO,OAAO;EAAE,CAAC;EAClF,QAAQ;CACV;CACA,OAAO;AACT;;;;;;AAOA,SAAgB,UAAU,SAA2C;CACnE,IAAI,QAAQ,MAAM,UAAU,MAAM,OAAO,GAAG,OAAO;CACnD,IAAI,QAAQ,MAAM,UAAU,MAAM,OAAO,GAAG,OAAO;CACnD,OAAO;AACT;;AAGA,SAAgB,aAAa,SAAuC;CAClE,OAAO,GAAG,OAAO,QAAQ,MAAM,EAAE,OAAO,QAAQ,WAAW,IAAI,KAAK;AACtE"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { TimelineEntry, ToolEntry } from "./sessionModel.mjs";
|
|
2
|
+
import { StatusTone } from "@agimon-ai/po-web-components";
|
|
3
|
+
//#region src/web/lib/timelineGroups.d.ts
|
|
4
|
+
export interface SingleUnit {
|
|
5
|
+
readonly kind: 'single';
|
|
6
|
+
readonly entry: TimelineEntry;
|
|
7
|
+
/** The entry's index in the source list, for the timeline's live-tail window. */
|
|
8
|
+
readonly index: number;
|
|
9
|
+
}
|
|
10
|
+
export interface GroupUnit {
|
|
11
|
+
readonly kind: 'group';
|
|
12
|
+
readonly name: string;
|
|
13
|
+
readonly entries: readonly ToolEntry[];
|
|
14
|
+
/** The index of the last entry in the run, so a group is skipped only once it is fully above the tail. */
|
|
15
|
+
readonly index: number;
|
|
16
|
+
}
|
|
17
|
+
export type TimelineUnit = SingleUnit | GroupUnit;
|
|
18
|
+
/**
|
|
19
|
+
* The entries as units to render.
|
|
20
|
+
*
|
|
21
|
+
* `groupable` decides which tool names may be gathered: a tool whose renderer
|
|
22
|
+
* presents itself as a message, not a card, has no frame to share and stays on
|
|
23
|
+
* its own. Only adjacent entries group, so anything between two calls, an
|
|
24
|
+
* assistant reply or a notice, ends the run and keeps the transcript in order.
|
|
25
|
+
*/
|
|
26
|
+
export declare function timelineUnits(entries: readonly TimelineEntry[], groupable: (name: string) => boolean): readonly TimelineUnit[];
|
|
27
|
+
/**
|
|
28
|
+
* The group's own outcome: the worst thing in it. A run that is still going
|
|
29
|
+
* reads as running, a run with a failure in it reads as failed, and only a run
|
|
30
|
+
* where everything landed reads as ok.
|
|
31
|
+
*/
|
|
32
|
+
export declare function groupTone(entries: readonly ToolEntry[]): StatusTone;
|
|
33
|
+
/** `5 calls`, the line beside the tool's name in the group header. */
|
|
34
|
+
export declare function groupSummary(entries: readonly ToolEntry[]): string;
|
|
35
|
+
//#endregion
|
|
36
|
+
//# sourceMappingURL=timelineGroups.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timelineGroups.d.mts","names":[],"sources":["../../../src/web/lib/timelineGroups.ts"],"mappings":";;;iBAmBiB;WACN;WACA,OAAO;;WAEP;;iBAGM;WACN;WACA;WACA,kBAAkB;;WAElB;;YAGC,eAAe,aAAa;;;;;;;;;wBAcxB,cACd,kBAAkB,iBAClB,YAAY,oCACF;;;;;;wBA+BI,UAAU,kBAAkB,cAAc;;wBAO1C,aAAa,kBAAkB"}
|