@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 @@
|
|
|
1
|
+
{"version":3,"file":"ContributedSettings.cjs","names":["Badge","lockedReason","useMemo","Switch","Select","SelectTrigger","SelectValue","SelectContent","SelectItem","SelectGroup","SelectLabel","Input","SettingsRow","SettingsRowText","SettingsRowTitle","LockIcon","Button","SettingsRowDescription","keyOf","useState","settingsDraftKey","useStore","settingsDraftStore","EMPTY_SETTINGS_DRAFT","listSettingsModels","loadSettingsDraft","setSettingsDraft","saveSettingsDraft","discardSettingsDraft","SettingsPage","SettingsHeader","SettingsTitle","SettingsDescription","SettingsNote","SettingsCard","SettingsActions","canSaveSettings"],"sources":["../../../../src/web/features/settings/ContributedSettings.tsx"],"sourcesContent":["import type { SettingsFieldContribution, SettingsSectionContribution } from '@agimon-ai/po-core/web';\nimport {\n Badge,\n Button,\n Input,\n LockIcon,\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectTrigger,\n SelectValue,\n SettingsActions,\n SettingsCard,\n SettingsDescription,\n SettingsHeader,\n SettingsNote,\n SettingsPage,\n SettingsRow,\n SettingsRowDescription,\n SettingsRowText,\n SettingsRowTitle,\n SettingsTitle,\n Switch,\n} from '@agimon-ai/po-web-components';\nimport { useStore } from '@tanstack/react-store';\nimport { useEffect, useMemo, useState } from 'react';\n\nimport type { SettingsModel, SettingsOrigin, SettingsScope, SettingsValueView } from '../../../types/settings';\nimport { listSettingsModels } from '../../lib/settingsApi';\nimport { canSaveSettings, settingsKeyOf as keyOf, settingsLockedReason as lockedReason } from '../../lib/settingsDraft';\nimport {\n settingsDraftStore,\n settingsDraftKey,\n EMPTY_SETTINGS_DRAFT,\n loadSettingsDraft,\n setSettingsDraft,\n saveSettingsDraft,\n discardSettingsDraft,\n} from '../../stores/settingsDraftStore';\n\n/** Optional contributed-settings view. Drafts, admission and hash-checked writes live outside this component. */\n\n/** The select entry that clears a key, since unset is how the file spells \"inherit\". */\nconst INHERIT_VALUE = '__inherit__';\n\n/**\n * Where a value came from, read from the seat the reader is in, and said as\n * quietly as it can be. A default says nothing. A value set at this scope is\n * marked by the row's jade edge, named here only for assistive tech. A value\n * from the global config is faint text. An override the reader is not\n * currently editing is the one thing worth colouring: it is why an edit at\n * this scope would appear to do nothing.\n */\nfunction Origin({ origin, scope }: { origin: SettingsOrigin; scope: SettingsScope }) {\n if (origin === 'default') return null;\n if (origin === scope) return <span className=\"sr-only\">, set here</span>;\n if (origin === 'global') return <span className=\"text-sm font-normal text-doom-dim\">From global</span>;\n return (\n <Badge tone=\"yellow\" className=\"shrink-0\">\n Overridden by repository\n </Badge>\n );\n}\n\ninterface FieldRowProps {\n field: SettingsFieldContribution;\n view: SettingsValueView | undefined;\n scope: SettingsScope;\n models: readonly SettingsModel[];\n /** The pending edit, or undefined when the field is untouched. */\n draft: string | null | undefined;\n busy: boolean;\n onDraft: (field: SettingsFieldContribution, value: string | null | undefined) => void;\n}\n\nfunction FieldRow({ field, view, scope, models, draft, busy, onDraft }: FieldRowProps) {\n const locked = lockedReason(view, scope);\n const dirty = draft !== undefined;\n // A cleared draft is null; an untouched field falls back to what is on disk.\n const value = draft === undefined ? (view?.value ?? '') : (draft ?? '');\n const options = useMemo(() => {\n if (field.optionsFrom !== 'models') return field.options ?? [];\n return models.map((model) => ({\n value: model.value,\n label: model.label,\n group: model.group,\n }));\n }, [field.options, field.optionsFrom, models]);\n const groups = useMemo(() => [...new Set(options.map((option) => option.group ?? ''))], [options]);\n // A select with nothing to offer is a dead control, so it degrades to text\n // rather than showing an empty menu the reader cannot get past.\n const kind = field.kind === 'select' && options.length === 0 ? 'text' : field.kind;\n // A value the catalog no longer lists is still what the config file says.\n // With no entry to match it the trigger renders empty, which reads as \"unset\"\n // and hides a setting the reader is actively relying on.\n const orphan =\n kind === 'select' && value !== '' && !options.some((option) => option.value === value) ? value : undefined;\n\n const control =\n kind === 'info' ? (\n <span className=\"text-sm text-doom-text\">{value || '-'}</span>\n ) : kind === 'toggle' ? (\n <Switch\n data-testid={`settings-toggle-${field.id}`}\n aria-label={field.label}\n checked={value === 'true'}\n disabled={busy || locked !== undefined}\n onCheckedChange={(checked) => onDraft(field, String(checked))}\n />\n ) : kind === 'select' ? (\n <Select\n value={value === '' ? INHERIT_VALUE : value}\n disabled={busy || locked !== undefined}\n onValueChange={(next) => onDraft(field, next === INHERIT_VALUE ? null : next)}\n >\n <SelectTrigger\n data-testid={`settings-select-${field.id}`}\n aria-label={field.label}\n className=\"w-full text-sm sm:w-64\"\n >\n <SelectValue placeholder={field.placeholder ?? 'Inherit'} />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value={INHERIT_VALUE}>{field.placeholder ?? 'Inherit'}</SelectItem>\n {orphan === undefined ? null : <SelectItem value={orphan}>{orphan} · not in catalog</SelectItem>}\n {groups.map((group) => (\n <SelectGroup key={group}>\n {group === '' ? null : <SelectLabel>{group}</SelectLabel>}\n {options\n .filter((option) => (option.group ?? '') === group)\n .map((option) => (\n <SelectItem key={option.value} value={option.value}>\n {option.label}\n </SelectItem>\n ))}\n </SelectGroup>\n ))}\n </SelectContent>\n </Select>\n ) : (\n <Input\n data-testid={`settings-input-${field.id}`}\n aria-label={field.label}\n value={value}\n type={kind === 'number' ? 'number' : 'text'}\n spellCheck={false}\n disabled={busy || locked !== undefined}\n placeholder={field.placeholder ?? 'Inherit'}\n // A blank field means \"inherit\": the parser rejects an empty value, so\n // clearing the key is how the file spells it.\n onChange={(event) => onDraft(field, event.target.value === '' ? null : event.target.value)}\n className=\"w-full text-sm sm:w-64\"\n />\n );\n\n return (\n <SettingsRow\n data-testid={`settings-field-${field.id}`}\n data-dirty={dirty}\n changed={kind !== 'info' && view?.origin === scope}\n className=\"items-start\"\n >\n <SettingsRowText className=\"gap-1\">\n <SettingsRowTitle className=\"flex min-h-6 flex-wrap items-center gap-x-2 gap-y-1\">\n {/* `first-letter` needs a block box, and the title is a flex row here. */}\n <span className=\"inline-block min-w-0 first-letter:uppercase\">{field.label}</span>\n {view === undefined || kind === 'info' ? null : <Origin origin={view.origin} scope={scope} />}\n {locked === undefined ? null : (\n <span\n data-testid={`settings-locked-${field.id}`}\n className=\"inline-flex items-center gap-1 text-sm font-normal text-doom-dim\"\n >\n <LockIcon aria-hidden className=\"size-3\" />\n <span className=\"inline-block first-letter:uppercase\">{locked}</span>\n </span>\n )}\n {dirty ? (\n <Badge tone=\"cyan\" data-testid={`settings-dirty-${field.id}`} className=\"shrink-0\">\n Unsaved\n </Badge>\n ) : null}\n {dirty ? (\n <Button\n variant=\"ghost\"\n size=\"xs\"\n data-testid={`settings-revert-${field.id}`}\n disabled={busy}\n onClick={() => onDraft(field, undefined)}\n className=\"text-doom-dim\"\n >\n Revert\n </Button>\n ) : kind !== 'info' && view?.origin === scope && locked === undefined ? (\n <Button\n variant=\"ghost\"\n size=\"xs\"\n data-testid={`settings-clear-${field.id}`}\n disabled={busy}\n onClick={() => onDraft(field, null)}\n className=\"text-doom-dim\"\n >\n Reset\n </Button>\n ) : null}\n </SettingsRowTitle>\n {field.detail === undefined ? null : <SettingsRowDescription>{field.detail}</SettingsRowDescription>}\n {/* The config key earns its place on a page that writes a config file,\n but it is reference, not prose: it wraps instead of running off the edge. */}\n <code className=\"min-w-0 max-w-full break-all font-mono text-sm text-doom-dim\">{keyOf(field)}</code>\n </SettingsRowText>\n {control}\n </SettingsRow>\n );\n}\n\ninterface ContributedSettingsProps {\n section: SettingsSectionContribution;\n /** Which config file edits land in; the workspace the page sits in decides it. */\n scope: SettingsScope;\n /** The repository whose config is being edited; empty at global scope. */\n repoRoot?: string;\n workspaceId?: string;\n}\n\nexport function ContributedSettings({ section, scope, repoRoot = '', workspaceId }: ContributedSettingsProps) {\n const [models, setModels] = useState<readonly SettingsModel[]>([]);\n const target = useMemo(() => ({ section, scope, repoRoot, workspaceId }), [section, scope, repoRoot, workspaceId]);\n const key = settingsDraftKey(target);\n const { config, drafts, error, note, busy } = useStore(\n settingsDraftStore,\n (state) => state[key] ?? EMPTY_SETTINGS_DRAFT,\n );\n const wantsModels = section.fields.some((field) => field.optionsFrom === 'models');\n const dirtyFields = section.fields.filter((field) => keyOf(field) in drafts);\n useEffect(() => {\n if (wantsModels) void listSettingsModels().then(setModels);\n }, [wantsModels]);\n useEffect(() => {\n void loadSettingsDraft(target);\n }, [target]);\n const setDraft = (field: SettingsFieldContribution, value: string | null | undefined): void =>\n setSettingsDraft(target, field, value);\n const save = (): Promise<boolean> => saveSettingsDraft(target);\n const discard = (): void => discardSettingsDraft(target);\n\n return (\n <SettingsPage data-testid={`settings-contributed-${section.id}`}>\n <SettingsHeader>\n <SettingsTitle>{section.label}</SettingsTitle>\n {section.detail ? <SettingsDescription>{section.detail}</SettingsDescription> : null}\n {scope === 'repository' && repoRoot === '' ? (\n <SettingsNote data-testid=\"settings-no-repositories\">\n Pick a repository above to edit its config.\n </SettingsNote>\n ) : null}\n </SettingsHeader>\n\n {error === '' ? null : (\n <SettingsCard>\n <SettingsRow>\n <SettingsRowText role=\"alert\">\n <SettingsRowTitle>Po couldn't load or save these settings</SettingsRowTitle>\n <SettingsRowDescription data-testid=\"settings-error\" className=\"text-doom-red\">\n {error}\n </SettingsRowDescription>\n </SettingsRowText>\n <Button size=\"sm\" variant=\"outline\" disabled={busy} onClick={() => void loadSettingsDraft(target)}>\n Reload configuration\n </Button>\n </SettingsRow>\n </SettingsCard>\n )}\n\n <div className=\"flex min-w-0 flex-col gap-4\">\n <SettingsCard>\n {section.fields.map((field) => (\n <FieldRow\n key={field.id}\n field={field}\n view={config?.values[keyOf(field)]}\n scope={scope}\n models={models}\n draft={keyOf(field) in drafts ? drafts[keyOf(field)] : undefined}\n busy={busy}\n onDraft={setDraft}\n />\n ))}\n </SettingsCard>\n\n <SettingsActions>\n {/* Primary only when there is something to save, so the button reads as\n the next step instead of sitting lit with nothing to commit. */}\n <Button\n variant={dirtyFields.length > 0 ? 'primary' : 'outline'}\n size=\"sm\"\n data-testid=\"settings-save\"\n loading={busy}\n disabled={busy || !canSaveSettings({ dirty: dirtyFields.length, scope, repoRoot })}\n onClick={() => void save()}\n >\n Save\n </Button>\n {dirtyFields.length === 0 ? null : (\n <Button variant=\"ghost\" size=\"sm\" data-testid=\"settings-discard\" disabled={busy} onClick={discard}>\n Discard\n </Button>\n )}\n <SettingsNote data-testid=\"settings-save-note\">\n {dirtyFields.length > 0\n ? `${String(dirtyFields.length)} unsaved. Saves to ${scope === 'global' ? 'the global config' : 'this repository'}.`\n : note}\n </SettingsNote>\n </SettingsActions>\n </div>\n </SettingsPage>\n );\n}\n"],"mappings":";;;;;;;;;;AA6CA,MAAM,gBAAgB;;;;;;;;;AAUtB,SAAS,OAAO,EAAE,QAAQ,SAA2D;CACnF,IAAI,WAAW,WAAW,OAAO;CACjC,IAAI,WAAW,OAAO,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;EAAM,WAAU;EAAU,UAAA;CAAgB,CAAA;CACvE,IAAI,WAAW,UAAU,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;EAAM,WAAU;EAAoC,UAAA;CAAiB,CAAA;CACrG,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACA,6BAAAA,OAAD;EAAO,MAAK;EAAS,WAAU;EAAW,UAAA;CAEnC,CAAA;AAEX;AAaA,SAAS,SAAS,EAAE,OAAO,MAAM,OAAO,QAAQ,OAAO,MAAM,WAA0B;CACrF,MAAM,SAASC,sBAAAA,qBAAa,MAAM,KAAK;CACvC,MAAM,QAAQ,UAAU,KAAA;CAExB,MAAM,QAAQ,UAAU,KAAA,IAAa,MAAM,SAAS,KAAO,SAAS;CACpE,MAAM,WAAA,GAAUC,MAAAA,QAAAA,OAAc;EAC5B,IAAI,MAAM,gBAAgB,UAAU,OAAO,MAAM,WAAW,CAAC;EAC7D,OAAO,OAAO,KAAK,WAAW;GAC5B,OAAO,MAAM;GACb,OAAO,MAAM;GACb,OAAO,MAAM;EACf,EAAE;CACJ,GAAG;EAAC,MAAM;EAAS,MAAM;EAAa;CAAM,CAAC;CAC7C,MAAM,UAAA,GAASA,MAAAA,QAAAA,OAAc,CAAC,GAAG,IAAI,IAAI,QAAQ,KAAK,WAAW,OAAO,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC;CAGjG,MAAM,OAAO,MAAM,SAAS,YAAY,QAAQ,WAAW,IAAI,SAAS,MAAM;CAI9E,MAAM,SACJ,SAAS,YAAY,UAAU,MAAM,CAAC,QAAQ,MAAM,WAAW,OAAO,UAAU,KAAK,IAAI,QAAQ,KAAA;CAEnG,MAAM,UACJ,SAAS,SACP,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;EAAM,WAAU;EAA0B,UAAA,SAAS;CAAU,CAAA,IAC3D,SAAS,WACX,iBAAA,GAAA,kBAAA,IAAA,CAACC,6BAAAA,QAAD;EACE,eAAa,mBAAmB,MAAM;EACtC,cAAY,MAAM;EAClB,SAAS,UAAU;EACnB,UAAU,QAAQ,WAAW,KAAA;EAC7B,kBAAkB,YAAY,QAAQ,OAAO,OAAO,OAAO,CAAC;CAC7D,CAAA,IACC,SAAS,WACX,iBAAA,GAAA,kBAAA,KAAA,CAACC,6BAAAA,QAAD;EACE,OAAO,UAAU,KAAK,gBAAgB;EACtC,UAAU,QAAQ,WAAW,KAAA;EAC7B,gBAAgB,SAAS,QAAQ,OAAO,SAAS,gBAAgB,OAAO,IAAI;EAH9E,UAAA,CAKE,iBAAA,GAAA,kBAAA,IAAA,CAACC,6BAAAA,eAAD;GACE,eAAa,mBAAmB,MAAM;GACtC,cAAY,MAAM;GAClB,WAAU;GAEV,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACC,6BAAAA,aAAD,EAAa,aAAa,MAAM,eAAe,UAAY,CAAA;EAC9C,CAAA,GACf,iBAAA,GAAA,kBAAA,KAAA,CAACC,6BAAAA,eAAD,EAAA,UAAA;GACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,6BAAAA,YAAD;IAAY,OAAO;IAAgB,UAAA,MAAM,eAAe;GAAsB,CAAA;GAC7E,WAAW,KAAA,IAAY,OAAO,iBAAA,GAAA,kBAAA,KAAA,CAACA,6BAAAA,YAAD;IAAY,OAAO;IAAnB,UAAA,CAA4B,QAAO,mBAA6B;;GAC9F,OAAO,KAAK,UACX,iBAAA,GAAA,kBAAA,KAAA,CAACC,6BAAAA,aAAD,EAAA,UAAA,CACG,UAAU,KAAK,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAACC,6BAAAA,aAAD,EAAA,UAAc,MAAmB,CAAA,GACvD,QACE,QAAQ,YAAY,OAAO,SAAS,QAAQ,KAAK,CAAC,CAClD,KAAK,WACJ,iBAAA,GAAA,kBAAA,IAAA,CAACF,6BAAAA,YAAD;IAA+B,OAAO,OAAO;IAC1C,UAAA,OAAO;GACE,GAFK,OAAO,KAEZ,CACb,CACQ,EAAA,GATK,KASL,CACd;EACY,EAAA,CAAA,CACT;CAER,CAAA,IAAA,iBAAA,GAAA,kBAAA,IAAA,CAACG,6BAAAA,OAAD;EACE,eAAa,kBAAkB,MAAM;EACrC,cAAY,MAAM;EACX;EACP,MAAM,SAAS,WAAW,WAAW;EACrC,YAAY;EACZ,UAAU,QAAQ,WAAW,KAAA;EAC7B,aAAa,MAAM,eAAe;EAGlC,WAAW,UAAU,QAAQ,OAAO,MAAM,OAAO,UAAU,KAAK,OAAO,MAAM,OAAO,KAAK;EACzF,WAAU;CACX,CAAA;CAGL,OACE,iBAAA,GAAA,kBAAA,KAAA,CAACC,6BAAAA,aAAD;EACE,eAAa,kBAAkB,MAAM;EACrC,cAAY;EACZ,SAAS,SAAS,UAAU,MAAM,WAAW;EAC7C,WAAU;EAJZ,UAAA,CAME,iBAAA,GAAA,kBAAA,KAAA,CAACC,6BAAAA,iBAAD;GAAiB,WAAU;GAA3B,UAAA;IACE,iBAAA,GAAA,kBAAA,KAAA,CAACC,6BAAAA,kBAAD;KAAkB,WAAU;KAA5B,UAAA;MAEE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;OAAM,WAAU;OAA+C,UAAA,MAAM;MAAY,CAAA;MAChF,SAAS,KAAA,KAAa,SAAS,SAAS,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;OAAQ,QAAQ,KAAK;OAAe;MAAQ,CAAA;MAC3F,WAAW,KAAA,IAAY,OACtB,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;OACE,eAAa,mBAAmB,MAAM;OACtC,WAAU;OAFZ,UAAA,CAIE,iBAAA,GAAA,kBAAA,IAAA,CAACC,6BAAAA,UAAD;QAAU,eAAA;QAAY,WAAU;OAAU,CAAA,GAC1C,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;QAAM,WAAU;QAAuC,UAAA;OAAa,CAAA,CAChE;;MAEP,QACC,iBAAA,GAAA,kBAAA,IAAA,CAACf,6BAAAA,OAAD;OAAO,MAAK;OAAO,eAAa,kBAAkB,MAAM;OAAM,WAAU;OAAW,UAAA;MAE5E,CAAA,IACL;MACH,QACC,iBAAA,GAAA,kBAAA,IAAA,CAACgB,6BAAAA,QAAD;OACE,SAAQ;OACR,MAAK;OACL,eAAa,mBAAmB,MAAM;OACtC,UAAU;OACV,eAAe,QAAQ,OAAO,KAAA,CAAS;OACvC,WAAU;OACX,UAAA;MAEO,CAAA,IACN,SAAS,UAAU,MAAM,WAAW,SAAS,WAAW,KAAA,IAC1D,iBAAA,GAAA,kBAAA,IAAA,CAACA,6BAAAA,QAAD;OACE,SAAQ;OACR,MAAK;OACL,eAAa,kBAAkB,MAAM;OACrC,UAAU;OACV,eAAe,QAAQ,OAAO,IAAI;OAClC,WAAU;OACX,UAAA;MAEO,CAAA,IACN;KACY;;IACjB,MAAM,WAAW,KAAA,IAAY,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAACC,6BAAAA,wBAAD,EAAA,UAAyB,MAAM,OAA+B,CAAA;IAGnG,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;KAAM,WAAU;KAAgEC,UAAAA,sBAAAA,cAAM,KAAK;IAAQ,CAAA;GACpF;EAChB,CAAA,GAAA,OACU;;AAEjB;AAWA,SAAgB,oBAAoB,EAAE,SAAS,OAAO,WAAW,IAAI,eAAyC;CAC5G,MAAM,CAAC,QAAQ,cAAA,GAAaC,MAAAA,SAAAA,CAAmC,CAAC,CAAC;CACjE,MAAM,UAAA,GAASjB,MAAAA,QAAAA,QAAe;EAAE;EAAS;EAAO;EAAU;CAAY,IAAI;EAAC;EAAS;EAAO;EAAU;CAAW,CAAC;CACjH,MAAM,MAAMkB,2BAAAA,iBAAiB,MAAM;CACnC,MAAM,EAAE,QAAQ,QAAQ,OAAO,MAAM,UAAA,GAASC,sBAAAA,SAAAA,CAC5CC,2BAAAA,qBACC,UAAU,MAAM,QAAQC,2BAAAA,oBAC3B;CACA,MAAM,cAAc,QAAQ,OAAO,MAAM,UAAU,MAAM,gBAAgB,QAAQ;CACjF,MAAM,cAAc,QAAQ,OAAO,QAAQ,UAAUL,sBAAAA,cAAM,KAAK,KAAK,MAAM;CAC3E,CAAA,GAAA,MAAA,UAAA,OAAgB;EACd,IAAI,aAAa,oBAAKM,mBAAmB,CAAC,CAAC,KAAK,SAAS;CAC3D,GAAG,CAAC,WAAW,CAAC;CAChB,CAAA,GAAA,MAAA,UAAA,OAAgB;EACd,2BAAKC,kBAAkB,MAAM;CAC/B,GAAG,CAAC,MAAM,CAAC;CACX,MAAM,YAAY,OAAkC,UAClDC,2BAAAA,iBAAiB,QAAQ,OAAO,KAAK;CACvC,MAAM,aAA+BC,2BAAAA,kBAAkB,MAAM;CAC7D,MAAM,gBAAsBC,2BAAAA,qBAAqB,MAAM;CAEvD,OACE,iBAAA,GAAA,kBAAA,KAAA,CAACC,6BAAAA,cAAD;EAAc,eAAa,wBAAwB,QAAQ;EAA3D,UAAA;GACE,iBAAA,GAAA,kBAAA,KAAA,CAACC,6BAAAA,gBAAD,EAAA,UAAA;IACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,6BAAAA,eAAD,EAAA,UAAgB,QAAQ,MAAqB,CAAA;IAC5C,QAAQ,SAAS,iBAAA,GAAA,kBAAA,IAAA,CAACC,6BAAAA,qBAAD,EAAA,UAAsB,QAAQ,OAA4B,CAAA,IAAI;IAC/E,UAAU,gBAAgB,aAAa,KACtC,iBAAA,GAAA,kBAAA,IAAA,CAACC,6BAAAA,cAAD;KAAc,eAAY;KAA2B,UAAA;IAEvC,CAAA,IACZ;GACU,EAAA,CAAA;GAEf,UAAU,KAAK,OACd,iBAAA,GAAA,kBAAA,IAAA,CAACC,6BAAAA,cAAD,EAAA,UACE,iBAAA,GAAA,kBAAA,KAAA,CAACtB,6BAAAA,aAAD,EAAA,UAAA,CACE,iBAAA,GAAA,kBAAA,KAAA,CAACC,6BAAAA,iBAAD;IAAiB,MAAK;IAAtB,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,6BAAAA,kBAAD,EAAA,UAAkB,0CAA8D,CAAA,GAChF,iBAAA,GAAA,kBAAA,IAAA,CAACG,6BAAAA,wBAAD;KAAwB,eAAY;KAAiB,WAAU;KAC5D,UAAA;IACqB,CAAA,CACT;GACjB,CAAA,GAAA,iBAAA,GAAA,kBAAA,IAAA,CAACD,6BAAAA,QAAD;IAAQ,MAAK;IAAK,SAAQ;IAAU,UAAU;IAAM,eAAe,KAAKS,2BAAAA,kBAAkB,MAAM;IAAG,UAAA;GAE3F,CAAA,CACG,EAAA,CAAA,EACD,CAAA;GAGhB,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;IAAK,WAAU;IAAf,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAACS,6BAAAA,cAAD,EAAA,UACG,QAAQ,OAAO,KAAK,UACnB,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;KAES;KACP,MAAM,QAAQ,OAAOhB,sBAAAA,cAAM,KAAK;KACzB;KACC;KACR,OAAOA,sBAAAA,cAAM,KAAK,KAAK,SAAS,OAAOA,sBAAAA,cAAM,KAAK,KAAK,KAAA;KACjD;KACN,SAAS;IACV,GARM,MAAM,EAQZ,CACF,EACW,CAAA,GAEd,iBAAA,GAAA,kBAAA,KAAA,CAACiB,6BAAAA,iBAAD,EAAA,UAAA;KAGE,iBAAA,GAAA,kBAAA,IAAA,CAACnB,6BAAAA,QAAD;MACE,SAAS,YAAY,SAAS,IAAI,YAAY;MAC9C,MAAK;MACL,eAAY;MACZ,SAAS;MACT,UAAU,QAAQ,CAACoB,sBAAAA,gBAAgB;OAAE,OAAO,YAAY;OAAQ;OAAO;MAAS,CAAC;MACjF,eAAe,KAAK,KAAK;MAC1B,UAAA;KAEO,CAAA;KACP,YAAY,WAAW,IAAI,OAC1B,iBAAA,GAAA,kBAAA,IAAA,CAACpB,6BAAAA,QAAD;MAAQ,SAAQ;MAAQ,MAAK;MAAK,eAAY;MAAmB,UAAU;MAAM,SAAS;MAAS,UAAA;KAE3F,CAAA;KAEV,iBAAA,GAAA,kBAAA,IAAA,CAACiB,6BAAAA,cAAD;MAAc,eAAY;MACvB,UAAA,YAAY,SAAS,IAClB,GAAG,OAAO,YAAY,MAAM,EAAE,qBAAqB,UAAU,WAAW,sBAAsB,kBAAkB,KAChH;KACQ,CAAA;IACC,EAAA,CAAA,CACd;;EACO;;AAElB"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { SettingsScope } from "../../../types/settings.mjs";
|
|
2
|
+
import { SettingsSectionContribution } from "@agimon-ai/po-core/web";
|
|
3
|
+
//#region src/web/features/settings/ContributedSettings.d.ts
|
|
4
|
+
interface ContributedSettingsProps {
|
|
5
|
+
section: SettingsSectionContribution;
|
|
6
|
+
/** Which config file edits land in; the workspace the page sits in decides it. */
|
|
7
|
+
scope: SettingsScope;
|
|
8
|
+
/** The repository whose config is being edited; empty at global scope. */
|
|
9
|
+
repoRoot?: string;
|
|
10
|
+
workspaceId?: string;
|
|
11
|
+
}
|
|
12
|
+
export declare function ContributedSettings({ section, scope, repoRoot, workspaceId }: ContributedSettingsProps): import("react").JSX.Element;
|
|
13
|
+
//#endregion
|
|
14
|
+
//# sourceMappingURL=ContributedSettings.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ContributedSettings.d.mts","names":[],"sources":["../../../../src/web/features/settings/ContributedSettings.tsx"],"mappings":";;;UAyNU;EACR,SAAS;;EAET,OAAO;;EAEP;EACA;;wBAGc,sBAAsB,SAAS,OAAO,UAAe,eAAe,2CAAwB,IAAA"}
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
import { listSettingsModels } from "../../lib/settingsApi.mjs";
|
|
2
|
+
import { canSaveSettings, settingsKeyOf, settingsLockedReason } from "../../lib/settingsDraft.mjs";
|
|
3
|
+
import { EMPTY_SETTINGS_DRAFT, discardSettingsDraft, loadSettingsDraft, saveSettingsDraft, setSettingsDraft, settingsDraftKey, settingsDraftStore } from "../../stores/settingsDraftStore.mjs";
|
|
4
|
+
import { useEffect, useMemo, useState } from "react";
|
|
5
|
+
import { useStore } from "@tanstack/react-store";
|
|
6
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
7
|
+
import { Badge, Button, Input, LockIcon, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectTrigger, SelectValue, SettingsActions, SettingsCard, SettingsDescription, SettingsHeader, SettingsNote, SettingsPage, SettingsRow, SettingsRowDescription, SettingsRowText, SettingsRowTitle, SettingsTitle, Switch } from "@agimon-ai/po-web-components";
|
|
8
|
+
//#region src/web/features/settings/ContributedSettings.tsx
|
|
9
|
+
/** Optional contributed-settings view. Drafts, admission and hash-checked writes live outside this component. */
|
|
10
|
+
/** The select entry that clears a key, since unset is how the file spells "inherit". */
|
|
11
|
+
const INHERIT_VALUE = "__inherit__";
|
|
12
|
+
/**
|
|
13
|
+
* Where a value came from, read from the seat the reader is in, and said as
|
|
14
|
+
* quietly as it can be. A default says nothing. A value set at this scope is
|
|
15
|
+
* marked by the row's jade edge, named here only for assistive tech. A value
|
|
16
|
+
* from the global config is faint text. An override the reader is not
|
|
17
|
+
* currently editing is the one thing worth colouring: it is why an edit at
|
|
18
|
+
* this scope would appear to do nothing.
|
|
19
|
+
*/
|
|
20
|
+
function Origin({ origin, scope }) {
|
|
21
|
+
if (origin === "default") return null;
|
|
22
|
+
if (origin === scope) return /* @__PURE__ */ jsx("span", {
|
|
23
|
+
className: "sr-only",
|
|
24
|
+
children: ", set here"
|
|
25
|
+
});
|
|
26
|
+
if (origin === "global") return /* @__PURE__ */ jsx("span", {
|
|
27
|
+
className: "text-sm font-normal text-doom-dim",
|
|
28
|
+
children: "From global"
|
|
29
|
+
});
|
|
30
|
+
return /* @__PURE__ */ jsx(Badge, {
|
|
31
|
+
tone: "yellow",
|
|
32
|
+
className: "shrink-0",
|
|
33
|
+
children: "Overridden by repository"
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
function FieldRow({ field, view, scope, models, draft, busy, onDraft }) {
|
|
37
|
+
const locked = settingsLockedReason(view, scope);
|
|
38
|
+
const dirty = draft !== void 0;
|
|
39
|
+
const value = draft === void 0 ? view?.value ?? "" : draft ?? "";
|
|
40
|
+
const options = useMemo(() => {
|
|
41
|
+
if (field.optionsFrom !== "models") return field.options ?? [];
|
|
42
|
+
return models.map((model) => ({
|
|
43
|
+
value: model.value,
|
|
44
|
+
label: model.label,
|
|
45
|
+
group: model.group
|
|
46
|
+
}));
|
|
47
|
+
}, [
|
|
48
|
+
field.options,
|
|
49
|
+
field.optionsFrom,
|
|
50
|
+
models
|
|
51
|
+
]);
|
|
52
|
+
const groups = useMemo(() => [...new Set(options.map((option) => option.group ?? ""))], [options]);
|
|
53
|
+
const kind = field.kind === "select" && options.length === 0 ? "text" : field.kind;
|
|
54
|
+
const orphan = kind === "select" && value !== "" && !options.some((option) => option.value === value) ? value : void 0;
|
|
55
|
+
const control = kind === "info" ? /* @__PURE__ */ jsx("span", {
|
|
56
|
+
className: "text-sm text-doom-text",
|
|
57
|
+
children: value || "-"
|
|
58
|
+
}) : kind === "toggle" ? /* @__PURE__ */ jsx(Switch, {
|
|
59
|
+
"data-testid": `settings-toggle-${field.id}`,
|
|
60
|
+
"aria-label": field.label,
|
|
61
|
+
checked: value === "true",
|
|
62
|
+
disabled: busy || locked !== void 0,
|
|
63
|
+
onCheckedChange: (checked) => onDraft(field, String(checked))
|
|
64
|
+
}) : kind === "select" ? /* @__PURE__ */ jsxs(Select, {
|
|
65
|
+
value: value === "" ? INHERIT_VALUE : value,
|
|
66
|
+
disabled: busy || locked !== void 0,
|
|
67
|
+
onValueChange: (next) => onDraft(field, next === INHERIT_VALUE ? null : next),
|
|
68
|
+
children: [/* @__PURE__ */ jsx(SelectTrigger, {
|
|
69
|
+
"data-testid": `settings-select-${field.id}`,
|
|
70
|
+
"aria-label": field.label,
|
|
71
|
+
className: "w-full text-sm sm:w-64",
|
|
72
|
+
children: /* @__PURE__ */ jsx(SelectValue, { placeholder: field.placeholder ?? "Inherit" })
|
|
73
|
+
}), /* @__PURE__ */ jsxs(SelectContent, { children: [
|
|
74
|
+
/* @__PURE__ */ jsx(SelectItem, {
|
|
75
|
+
value: INHERIT_VALUE,
|
|
76
|
+
children: field.placeholder ?? "Inherit"
|
|
77
|
+
}),
|
|
78
|
+
orphan === void 0 ? null : /* @__PURE__ */ jsxs(SelectItem, {
|
|
79
|
+
value: orphan,
|
|
80
|
+
children: [orphan, " · not in catalog"]
|
|
81
|
+
}),
|
|
82
|
+
groups.map((group) => /* @__PURE__ */ jsxs(SelectGroup, { children: [group === "" ? null : /* @__PURE__ */ jsx(SelectLabel, { children: group }), options.filter((option) => (option.group ?? "") === group).map((option) => /* @__PURE__ */ jsx(SelectItem, {
|
|
83
|
+
value: option.value,
|
|
84
|
+
children: option.label
|
|
85
|
+
}, option.value))] }, group))
|
|
86
|
+
] })]
|
|
87
|
+
}) : /* @__PURE__ */ jsx(Input, {
|
|
88
|
+
"data-testid": `settings-input-${field.id}`,
|
|
89
|
+
"aria-label": field.label,
|
|
90
|
+
value,
|
|
91
|
+
type: kind === "number" ? "number" : "text",
|
|
92
|
+
spellCheck: false,
|
|
93
|
+
disabled: busy || locked !== void 0,
|
|
94
|
+
placeholder: field.placeholder ?? "Inherit",
|
|
95
|
+
onChange: (event) => onDraft(field, event.target.value === "" ? null : event.target.value),
|
|
96
|
+
className: "w-full text-sm sm:w-64"
|
|
97
|
+
});
|
|
98
|
+
return /* @__PURE__ */ jsxs(SettingsRow, {
|
|
99
|
+
"data-testid": `settings-field-${field.id}`,
|
|
100
|
+
"data-dirty": dirty,
|
|
101
|
+
changed: kind !== "info" && view?.origin === scope,
|
|
102
|
+
className: "items-start",
|
|
103
|
+
children: [/* @__PURE__ */ jsxs(SettingsRowText, {
|
|
104
|
+
className: "gap-1",
|
|
105
|
+
children: [
|
|
106
|
+
/* @__PURE__ */ jsxs(SettingsRowTitle, {
|
|
107
|
+
className: "flex min-h-6 flex-wrap items-center gap-x-2 gap-y-1",
|
|
108
|
+
children: [
|
|
109
|
+
/* @__PURE__ */ jsx("span", {
|
|
110
|
+
className: "inline-block min-w-0 first-letter:uppercase",
|
|
111
|
+
children: field.label
|
|
112
|
+
}),
|
|
113
|
+
view === void 0 || kind === "info" ? null : /* @__PURE__ */ jsx(Origin, {
|
|
114
|
+
origin: view.origin,
|
|
115
|
+
scope
|
|
116
|
+
}),
|
|
117
|
+
locked === void 0 ? null : /* @__PURE__ */ jsxs("span", {
|
|
118
|
+
"data-testid": `settings-locked-${field.id}`,
|
|
119
|
+
className: "inline-flex items-center gap-1 text-sm font-normal text-doom-dim",
|
|
120
|
+
children: [/* @__PURE__ */ jsx(LockIcon, {
|
|
121
|
+
"aria-hidden": true,
|
|
122
|
+
className: "size-3"
|
|
123
|
+
}), /* @__PURE__ */ jsx("span", {
|
|
124
|
+
className: "inline-block first-letter:uppercase",
|
|
125
|
+
children: locked
|
|
126
|
+
})]
|
|
127
|
+
}),
|
|
128
|
+
dirty ? /* @__PURE__ */ jsx(Badge, {
|
|
129
|
+
tone: "cyan",
|
|
130
|
+
"data-testid": `settings-dirty-${field.id}`,
|
|
131
|
+
className: "shrink-0",
|
|
132
|
+
children: "Unsaved"
|
|
133
|
+
}) : null,
|
|
134
|
+
dirty ? /* @__PURE__ */ jsx(Button, {
|
|
135
|
+
variant: "ghost",
|
|
136
|
+
size: "xs",
|
|
137
|
+
"data-testid": `settings-revert-${field.id}`,
|
|
138
|
+
disabled: busy,
|
|
139
|
+
onClick: () => onDraft(field, void 0),
|
|
140
|
+
className: "text-doom-dim",
|
|
141
|
+
children: "Revert"
|
|
142
|
+
}) : kind !== "info" && view?.origin === scope && locked === void 0 ? /* @__PURE__ */ jsx(Button, {
|
|
143
|
+
variant: "ghost",
|
|
144
|
+
size: "xs",
|
|
145
|
+
"data-testid": `settings-clear-${field.id}`,
|
|
146
|
+
disabled: busy,
|
|
147
|
+
onClick: () => onDraft(field, null),
|
|
148
|
+
className: "text-doom-dim",
|
|
149
|
+
children: "Reset"
|
|
150
|
+
}) : null
|
|
151
|
+
]
|
|
152
|
+
}),
|
|
153
|
+
field.detail === void 0 ? null : /* @__PURE__ */ jsx(SettingsRowDescription, { children: field.detail }),
|
|
154
|
+
/* @__PURE__ */ jsx("code", {
|
|
155
|
+
className: "min-w-0 max-w-full break-all font-mono text-sm text-doom-dim",
|
|
156
|
+
children: settingsKeyOf(field)
|
|
157
|
+
})
|
|
158
|
+
]
|
|
159
|
+
}), control]
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
function ContributedSettings({ section, scope, repoRoot = "", workspaceId }) {
|
|
163
|
+
const [models, setModels] = useState([]);
|
|
164
|
+
const target = useMemo(() => ({
|
|
165
|
+
section,
|
|
166
|
+
scope,
|
|
167
|
+
repoRoot,
|
|
168
|
+
workspaceId
|
|
169
|
+
}), [
|
|
170
|
+
section,
|
|
171
|
+
scope,
|
|
172
|
+
repoRoot,
|
|
173
|
+
workspaceId
|
|
174
|
+
]);
|
|
175
|
+
const key = settingsDraftKey(target);
|
|
176
|
+
const { config, drafts, error, note, busy } = useStore(settingsDraftStore, (state) => state[key] ?? EMPTY_SETTINGS_DRAFT);
|
|
177
|
+
const wantsModels = section.fields.some((field) => field.optionsFrom === "models");
|
|
178
|
+
const dirtyFields = section.fields.filter((field) => settingsKeyOf(field) in drafts);
|
|
179
|
+
useEffect(() => {
|
|
180
|
+
if (wantsModels) listSettingsModels().then(setModels);
|
|
181
|
+
}, [wantsModels]);
|
|
182
|
+
useEffect(() => {
|
|
183
|
+
loadSettingsDraft(target);
|
|
184
|
+
}, [target]);
|
|
185
|
+
const setDraft = (field, value) => setSettingsDraft(target, field, value);
|
|
186
|
+
const save = () => saveSettingsDraft(target);
|
|
187
|
+
const discard = () => discardSettingsDraft(target);
|
|
188
|
+
return /* @__PURE__ */ jsxs(SettingsPage, {
|
|
189
|
+
"data-testid": `settings-contributed-${section.id}`,
|
|
190
|
+
children: [
|
|
191
|
+
/* @__PURE__ */ jsxs(SettingsHeader, { children: [
|
|
192
|
+
/* @__PURE__ */ jsx(SettingsTitle, { children: section.label }),
|
|
193
|
+
section.detail ? /* @__PURE__ */ jsx(SettingsDescription, { children: section.detail }) : null,
|
|
194
|
+
scope === "repository" && repoRoot === "" ? /* @__PURE__ */ jsx(SettingsNote, {
|
|
195
|
+
"data-testid": "settings-no-repositories",
|
|
196
|
+
children: "Pick a repository above to edit its config."
|
|
197
|
+
}) : null
|
|
198
|
+
] }),
|
|
199
|
+
error === "" ? null : /* @__PURE__ */ jsx(SettingsCard, { children: /* @__PURE__ */ jsxs(SettingsRow, { children: [/* @__PURE__ */ jsxs(SettingsRowText, {
|
|
200
|
+
role: "alert",
|
|
201
|
+
children: [/* @__PURE__ */ jsx(SettingsRowTitle, { children: "Po couldn't load or save these settings" }), /* @__PURE__ */ jsx(SettingsRowDescription, {
|
|
202
|
+
"data-testid": "settings-error",
|
|
203
|
+
className: "text-doom-red",
|
|
204
|
+
children: error
|
|
205
|
+
})]
|
|
206
|
+
}), /* @__PURE__ */ jsx(Button, {
|
|
207
|
+
size: "sm",
|
|
208
|
+
variant: "outline",
|
|
209
|
+
disabled: busy,
|
|
210
|
+
onClick: () => void loadSettingsDraft(target),
|
|
211
|
+
children: "Reload configuration"
|
|
212
|
+
})] }) }),
|
|
213
|
+
/* @__PURE__ */ jsxs("div", {
|
|
214
|
+
className: "flex min-w-0 flex-col gap-4",
|
|
215
|
+
children: [/* @__PURE__ */ jsx(SettingsCard, { children: section.fields.map((field) => /* @__PURE__ */ jsx(FieldRow, {
|
|
216
|
+
field,
|
|
217
|
+
view: config?.values[settingsKeyOf(field)],
|
|
218
|
+
scope,
|
|
219
|
+
models,
|
|
220
|
+
draft: settingsKeyOf(field) in drafts ? drafts[settingsKeyOf(field)] : void 0,
|
|
221
|
+
busy,
|
|
222
|
+
onDraft: setDraft
|
|
223
|
+
}, field.id)) }), /* @__PURE__ */ jsxs(SettingsActions, { children: [
|
|
224
|
+
/* @__PURE__ */ jsx(Button, {
|
|
225
|
+
variant: dirtyFields.length > 0 ? "primary" : "outline",
|
|
226
|
+
size: "sm",
|
|
227
|
+
"data-testid": "settings-save",
|
|
228
|
+
loading: busy,
|
|
229
|
+
disabled: busy || !canSaveSettings({
|
|
230
|
+
dirty: dirtyFields.length,
|
|
231
|
+
scope,
|
|
232
|
+
repoRoot
|
|
233
|
+
}),
|
|
234
|
+
onClick: () => void save(),
|
|
235
|
+
children: "Save"
|
|
236
|
+
}),
|
|
237
|
+
dirtyFields.length === 0 ? null : /* @__PURE__ */ jsx(Button, {
|
|
238
|
+
variant: "ghost",
|
|
239
|
+
size: "sm",
|
|
240
|
+
"data-testid": "settings-discard",
|
|
241
|
+
disabled: busy,
|
|
242
|
+
onClick: discard,
|
|
243
|
+
children: "Discard"
|
|
244
|
+
}),
|
|
245
|
+
/* @__PURE__ */ jsx(SettingsNote, {
|
|
246
|
+
"data-testid": "settings-save-note",
|
|
247
|
+
children: dirtyFields.length > 0 ? `${String(dirtyFields.length)} unsaved. Saves to ${scope === "global" ? "the global config" : "this repository"}.` : note
|
|
248
|
+
})
|
|
249
|
+
] })]
|
|
250
|
+
})
|
|
251
|
+
]
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
//#endregion
|
|
255
|
+
export { ContributedSettings };
|
|
256
|
+
|
|
257
|
+
//# sourceMappingURL=ContributedSettings.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ContributedSettings.mjs","names":["lockedReason","keyOf"],"sources":["../../../../src/web/features/settings/ContributedSettings.tsx"],"sourcesContent":["import type { SettingsFieldContribution, SettingsSectionContribution } from '@agimon-ai/po-core/web';\nimport {\n Badge,\n Button,\n Input,\n LockIcon,\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectTrigger,\n SelectValue,\n SettingsActions,\n SettingsCard,\n SettingsDescription,\n SettingsHeader,\n SettingsNote,\n SettingsPage,\n SettingsRow,\n SettingsRowDescription,\n SettingsRowText,\n SettingsRowTitle,\n SettingsTitle,\n Switch,\n} from '@agimon-ai/po-web-components';\nimport { useStore } from '@tanstack/react-store';\nimport { useEffect, useMemo, useState } from 'react';\n\nimport type { SettingsModel, SettingsOrigin, SettingsScope, SettingsValueView } from '../../../types/settings';\nimport { listSettingsModels } from '../../lib/settingsApi';\nimport { canSaveSettings, settingsKeyOf as keyOf, settingsLockedReason as lockedReason } from '../../lib/settingsDraft';\nimport {\n settingsDraftStore,\n settingsDraftKey,\n EMPTY_SETTINGS_DRAFT,\n loadSettingsDraft,\n setSettingsDraft,\n saveSettingsDraft,\n discardSettingsDraft,\n} from '../../stores/settingsDraftStore';\n\n/** Optional contributed-settings view. Drafts, admission and hash-checked writes live outside this component. */\n\n/** The select entry that clears a key, since unset is how the file spells \"inherit\". */\nconst INHERIT_VALUE = '__inherit__';\n\n/**\n * Where a value came from, read from the seat the reader is in, and said as\n * quietly as it can be. A default says nothing. A value set at this scope is\n * marked by the row's jade edge, named here only for assistive tech. A value\n * from the global config is faint text. An override the reader is not\n * currently editing is the one thing worth colouring: it is why an edit at\n * this scope would appear to do nothing.\n */\nfunction Origin({ origin, scope }: { origin: SettingsOrigin; scope: SettingsScope }) {\n if (origin === 'default') return null;\n if (origin === scope) return <span className=\"sr-only\">, set here</span>;\n if (origin === 'global') return <span className=\"text-sm font-normal text-doom-dim\">From global</span>;\n return (\n <Badge tone=\"yellow\" className=\"shrink-0\">\n Overridden by repository\n </Badge>\n );\n}\n\ninterface FieldRowProps {\n field: SettingsFieldContribution;\n view: SettingsValueView | undefined;\n scope: SettingsScope;\n models: readonly SettingsModel[];\n /** The pending edit, or undefined when the field is untouched. */\n draft: string | null | undefined;\n busy: boolean;\n onDraft: (field: SettingsFieldContribution, value: string | null | undefined) => void;\n}\n\nfunction FieldRow({ field, view, scope, models, draft, busy, onDraft }: FieldRowProps) {\n const locked = lockedReason(view, scope);\n const dirty = draft !== undefined;\n // A cleared draft is null; an untouched field falls back to what is on disk.\n const value = draft === undefined ? (view?.value ?? '') : (draft ?? '');\n const options = useMemo(() => {\n if (field.optionsFrom !== 'models') return field.options ?? [];\n return models.map((model) => ({\n value: model.value,\n label: model.label,\n group: model.group,\n }));\n }, [field.options, field.optionsFrom, models]);\n const groups = useMemo(() => [...new Set(options.map((option) => option.group ?? ''))], [options]);\n // A select with nothing to offer is a dead control, so it degrades to text\n // rather than showing an empty menu the reader cannot get past.\n const kind = field.kind === 'select' && options.length === 0 ? 'text' : field.kind;\n // A value the catalog no longer lists is still what the config file says.\n // With no entry to match it the trigger renders empty, which reads as \"unset\"\n // and hides a setting the reader is actively relying on.\n const orphan =\n kind === 'select' && value !== '' && !options.some((option) => option.value === value) ? value : undefined;\n\n const control =\n kind === 'info' ? (\n <span className=\"text-sm text-doom-text\">{value || '-'}</span>\n ) : kind === 'toggle' ? (\n <Switch\n data-testid={`settings-toggle-${field.id}`}\n aria-label={field.label}\n checked={value === 'true'}\n disabled={busy || locked !== undefined}\n onCheckedChange={(checked) => onDraft(field, String(checked))}\n />\n ) : kind === 'select' ? (\n <Select\n value={value === '' ? INHERIT_VALUE : value}\n disabled={busy || locked !== undefined}\n onValueChange={(next) => onDraft(field, next === INHERIT_VALUE ? null : next)}\n >\n <SelectTrigger\n data-testid={`settings-select-${field.id}`}\n aria-label={field.label}\n className=\"w-full text-sm sm:w-64\"\n >\n <SelectValue placeholder={field.placeholder ?? 'Inherit'} />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value={INHERIT_VALUE}>{field.placeholder ?? 'Inherit'}</SelectItem>\n {orphan === undefined ? null : <SelectItem value={orphan}>{orphan} · not in catalog</SelectItem>}\n {groups.map((group) => (\n <SelectGroup key={group}>\n {group === '' ? null : <SelectLabel>{group}</SelectLabel>}\n {options\n .filter((option) => (option.group ?? '') === group)\n .map((option) => (\n <SelectItem key={option.value} value={option.value}>\n {option.label}\n </SelectItem>\n ))}\n </SelectGroup>\n ))}\n </SelectContent>\n </Select>\n ) : (\n <Input\n data-testid={`settings-input-${field.id}`}\n aria-label={field.label}\n value={value}\n type={kind === 'number' ? 'number' : 'text'}\n spellCheck={false}\n disabled={busy || locked !== undefined}\n placeholder={field.placeholder ?? 'Inherit'}\n // A blank field means \"inherit\": the parser rejects an empty value, so\n // clearing the key is how the file spells it.\n onChange={(event) => onDraft(field, event.target.value === '' ? null : event.target.value)}\n className=\"w-full text-sm sm:w-64\"\n />\n );\n\n return (\n <SettingsRow\n data-testid={`settings-field-${field.id}`}\n data-dirty={dirty}\n changed={kind !== 'info' && view?.origin === scope}\n className=\"items-start\"\n >\n <SettingsRowText className=\"gap-1\">\n <SettingsRowTitle className=\"flex min-h-6 flex-wrap items-center gap-x-2 gap-y-1\">\n {/* `first-letter` needs a block box, and the title is a flex row here. */}\n <span className=\"inline-block min-w-0 first-letter:uppercase\">{field.label}</span>\n {view === undefined || kind === 'info' ? null : <Origin origin={view.origin} scope={scope} />}\n {locked === undefined ? null : (\n <span\n data-testid={`settings-locked-${field.id}`}\n className=\"inline-flex items-center gap-1 text-sm font-normal text-doom-dim\"\n >\n <LockIcon aria-hidden className=\"size-3\" />\n <span className=\"inline-block first-letter:uppercase\">{locked}</span>\n </span>\n )}\n {dirty ? (\n <Badge tone=\"cyan\" data-testid={`settings-dirty-${field.id}`} className=\"shrink-0\">\n Unsaved\n </Badge>\n ) : null}\n {dirty ? (\n <Button\n variant=\"ghost\"\n size=\"xs\"\n data-testid={`settings-revert-${field.id}`}\n disabled={busy}\n onClick={() => onDraft(field, undefined)}\n className=\"text-doom-dim\"\n >\n Revert\n </Button>\n ) : kind !== 'info' && view?.origin === scope && locked === undefined ? (\n <Button\n variant=\"ghost\"\n size=\"xs\"\n data-testid={`settings-clear-${field.id}`}\n disabled={busy}\n onClick={() => onDraft(field, null)}\n className=\"text-doom-dim\"\n >\n Reset\n </Button>\n ) : null}\n </SettingsRowTitle>\n {field.detail === undefined ? null : <SettingsRowDescription>{field.detail}</SettingsRowDescription>}\n {/* The config key earns its place on a page that writes a config file,\n but it is reference, not prose: it wraps instead of running off the edge. */}\n <code className=\"min-w-0 max-w-full break-all font-mono text-sm text-doom-dim\">{keyOf(field)}</code>\n </SettingsRowText>\n {control}\n </SettingsRow>\n );\n}\n\ninterface ContributedSettingsProps {\n section: SettingsSectionContribution;\n /** Which config file edits land in; the workspace the page sits in decides it. */\n scope: SettingsScope;\n /** The repository whose config is being edited; empty at global scope. */\n repoRoot?: string;\n workspaceId?: string;\n}\n\nexport function ContributedSettings({ section, scope, repoRoot = '', workspaceId }: ContributedSettingsProps) {\n const [models, setModels] = useState<readonly SettingsModel[]>([]);\n const target = useMemo(() => ({ section, scope, repoRoot, workspaceId }), [section, scope, repoRoot, workspaceId]);\n const key = settingsDraftKey(target);\n const { config, drafts, error, note, busy } = useStore(\n settingsDraftStore,\n (state) => state[key] ?? EMPTY_SETTINGS_DRAFT,\n );\n const wantsModels = section.fields.some((field) => field.optionsFrom === 'models');\n const dirtyFields = section.fields.filter((field) => keyOf(field) in drafts);\n useEffect(() => {\n if (wantsModels) void listSettingsModels().then(setModels);\n }, [wantsModels]);\n useEffect(() => {\n void loadSettingsDraft(target);\n }, [target]);\n const setDraft = (field: SettingsFieldContribution, value: string | null | undefined): void =>\n setSettingsDraft(target, field, value);\n const save = (): Promise<boolean> => saveSettingsDraft(target);\n const discard = (): void => discardSettingsDraft(target);\n\n return (\n <SettingsPage data-testid={`settings-contributed-${section.id}`}>\n <SettingsHeader>\n <SettingsTitle>{section.label}</SettingsTitle>\n {section.detail ? <SettingsDescription>{section.detail}</SettingsDescription> : null}\n {scope === 'repository' && repoRoot === '' ? (\n <SettingsNote data-testid=\"settings-no-repositories\">\n Pick a repository above to edit its config.\n </SettingsNote>\n ) : null}\n </SettingsHeader>\n\n {error === '' ? null : (\n <SettingsCard>\n <SettingsRow>\n <SettingsRowText role=\"alert\">\n <SettingsRowTitle>Po couldn't load or save these settings</SettingsRowTitle>\n <SettingsRowDescription data-testid=\"settings-error\" className=\"text-doom-red\">\n {error}\n </SettingsRowDescription>\n </SettingsRowText>\n <Button size=\"sm\" variant=\"outline\" disabled={busy} onClick={() => void loadSettingsDraft(target)}>\n Reload configuration\n </Button>\n </SettingsRow>\n </SettingsCard>\n )}\n\n <div className=\"flex min-w-0 flex-col gap-4\">\n <SettingsCard>\n {section.fields.map((field) => (\n <FieldRow\n key={field.id}\n field={field}\n view={config?.values[keyOf(field)]}\n scope={scope}\n models={models}\n draft={keyOf(field) in drafts ? drafts[keyOf(field)] : undefined}\n busy={busy}\n onDraft={setDraft}\n />\n ))}\n </SettingsCard>\n\n <SettingsActions>\n {/* Primary only when there is something to save, so the button reads as\n the next step instead of sitting lit with nothing to commit. */}\n <Button\n variant={dirtyFields.length > 0 ? 'primary' : 'outline'}\n size=\"sm\"\n data-testid=\"settings-save\"\n loading={busy}\n disabled={busy || !canSaveSettings({ dirty: dirtyFields.length, scope, repoRoot })}\n onClick={() => void save()}\n >\n Save\n </Button>\n {dirtyFields.length === 0 ? null : (\n <Button variant=\"ghost\" size=\"sm\" data-testid=\"settings-discard\" disabled={busy} onClick={discard}>\n Discard\n </Button>\n )}\n <SettingsNote data-testid=\"settings-save-note\">\n {dirtyFields.length > 0\n ? `${String(dirtyFields.length)} unsaved. Saves to ${scope === 'global' ? 'the global config' : 'this repository'}.`\n : note}\n </SettingsNote>\n </SettingsActions>\n </div>\n </SettingsPage>\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
const require_settingsApi = require("../../lib/settingsApi.cjs");
|
|
2
|
+
const require_dashboardStateStore = require("../../stores/dashboardStateStore.cjs");
|
|
3
|
+
let react = require("react");
|
|
4
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
5
|
+
let _agimon_ai_po_web_components = require("@agimon-ai/po-web-components");
|
|
6
|
+
//#region src/web/features/settings/ImageSettings.tsx
|
|
7
|
+
/**
|
|
8
|
+
* The image page: how large an image may be when it reaches a model.
|
|
9
|
+
*
|
|
10
|
+
* These two write Pi's own settings.json rather than the Doom config, because
|
|
11
|
+
* Pi's terminal settings screen writes the same toggle and a machine should not
|
|
12
|
+
* hold two answers. The toggle applies at once; the cap is typed, so it saves
|
|
13
|
+
* on its own button rather than on every keystroke.
|
|
14
|
+
*/
|
|
15
|
+
function ImageSettings() {
|
|
16
|
+
const [images, setImages, imagesState] = require_dashboardStateStore.useDashboardState("images/view", void 0);
|
|
17
|
+
const [draft, setDraft] = require_dashboardStateStore.useDashboardState("images/draft", "");
|
|
18
|
+
const [error, setError] = require_dashboardStateStore.useDashboardState("images/error", void 0);
|
|
19
|
+
const [busy, setBusy, busyState] = require_dashboardStateStore.useDashboardState("images/busy", false);
|
|
20
|
+
/** `readImageSettings` never rejects: a failed read resolves to `{ ok: false, error }`. */
|
|
21
|
+
const load = (isCancelled = () => false) => {
|
|
22
|
+
require_settingsApi.readImageSettings().then((result) => {
|
|
23
|
+
if (isCancelled() || busyState.state || imagesState.state !== void 0) return;
|
|
24
|
+
if (result.ok) {
|
|
25
|
+
setImages(result.images);
|
|
26
|
+
setDraft(String(result.images.maxDimension));
|
|
27
|
+
setError(void 0);
|
|
28
|
+
} else setError(result.error);
|
|
29
|
+
});
|
|
30
|
+
};
|
|
31
|
+
(0, react.useEffect)(() => {
|
|
32
|
+
if (imagesState.state !== void 0) return;
|
|
33
|
+
let cancelled = false;
|
|
34
|
+
load(() => cancelled);
|
|
35
|
+
return () => {
|
|
36
|
+
cancelled = true;
|
|
37
|
+
};
|
|
38
|
+
}, [
|
|
39
|
+
imagesState,
|
|
40
|
+
busyState,
|
|
41
|
+
setImages,
|
|
42
|
+
setDraft,
|
|
43
|
+
setError
|
|
44
|
+
]);
|
|
45
|
+
const save = async (change) => {
|
|
46
|
+
if (busyState.state) return;
|
|
47
|
+
setBusy(true);
|
|
48
|
+
let result;
|
|
49
|
+
try {
|
|
50
|
+
result = await require_settingsApi.writeImageSettings(change);
|
|
51
|
+
} finally {
|
|
52
|
+
setBusy(false);
|
|
53
|
+
}
|
|
54
|
+
if (result.ok) {
|
|
55
|
+
setImages(result.images);
|
|
56
|
+
if (change.maxDimension !== void 0) setDraft((current) => current === draft ? String(result.images.maxDimension) : current);
|
|
57
|
+
setError(void 0);
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
setError(result.error);
|
|
61
|
+
};
|
|
62
|
+
const parsed = Number.parseInt(draft, 10);
|
|
63
|
+
const dirty = images !== void 0 && Number.isFinite(parsed) && parsed !== images.maxDimension;
|
|
64
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_agimon_ai_po_web_components.SettingsPage, {
|
|
65
|
+
"data-testid": "image-settings",
|
|
66
|
+
children: [
|
|
67
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_agimon_ai_po_web_components.SettingsHeader, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.SettingsTitle, { children: "Images" }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.SettingsDescription, { children: "How large an image can be when it reaches a model. This covers images the agent reads and the ones you attach. Pi's own settings screen changes the same values." })] }),
|
|
68
|
+
images === void 0 && error !== void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.SettingsCard, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_agimon_ai_po_web_components.SettingsRow, {
|
|
69
|
+
"data-testid": "image-settings-error",
|
|
70
|
+
title: error,
|
|
71
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_agimon_ai_po_web_components.SettingsRowText, {
|
|
72
|
+
role: "alert",
|
|
73
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.SettingsRowTitle, { children: "Po couldn't read your image settings just now" }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.SettingsRowDescription, { children: "Nothing has changed. Images are handled as they were before." })]
|
|
74
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.Button, {
|
|
75
|
+
variant: "outline",
|
|
76
|
+
size: "sm",
|
|
77
|
+
onClick: () => load(),
|
|
78
|
+
children: "Try again"
|
|
79
|
+
})]
|
|
80
|
+
}) }) : null,
|
|
81
|
+
images !== void 0 && error !== void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
82
|
+
role: "alert",
|
|
83
|
+
"data-testid": "image-settings-error",
|
|
84
|
+
className: "text-sm leading-relaxed text-doom-red",
|
|
85
|
+
children: error
|
|
86
|
+
}) : null,
|
|
87
|
+
images === void 0 && error === void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_agimon_ai_po_web_components.SettingsCard, {
|
|
88
|
+
role: "status",
|
|
89
|
+
"aria-busy": true,
|
|
90
|
+
className: "gap-4 p-5",
|
|
91
|
+
children: [
|
|
92
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
93
|
+
className: "sr-only",
|
|
94
|
+
children: "Reading image settings"
|
|
95
|
+
}),
|
|
96
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.Skeleton, { className: "h-4 w-48" }),
|
|
97
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.Skeleton, { className: "h-4 w-72" })
|
|
98
|
+
]
|
|
99
|
+
}) : null,
|
|
100
|
+
images === void 0 ? null : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_agimon_ai_po_web_components.SettingsCard, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_agimon_ai_po_web_components.SettingsRow, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_agimon_ai_po_web_components.SettingsRowText, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.SettingsRowTitle, {
|
|
101
|
+
id: "image-auto-resize-label",
|
|
102
|
+
children: "Resize large images"
|
|
103
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.SettingsRowDescription, { children: "When off, images go out at the size they arrived, and some providers then reject the whole conversation." })] }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.Switch, {
|
|
104
|
+
"data-testid": "image-auto-resize",
|
|
105
|
+
"aria-labelledby": "image-auto-resize-label",
|
|
106
|
+
checked: images.autoResize,
|
|
107
|
+
disabled: busy,
|
|
108
|
+
onCheckedChange: (checked) => void save({ autoResize: checked })
|
|
109
|
+
})] }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_agimon_ai_po_web_components.SettingsRow, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_agimon_ai_po_web_components.SettingsRowText, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.SettingsRowTitle, {
|
|
110
|
+
id: "image-max-dimension-label",
|
|
111
|
+
children: "Longest edge"
|
|
112
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_agimon_ai_po_web_components.SettingsRowDescription, { children: [
|
|
113
|
+
"In pixels, from ",
|
|
114
|
+
images.minDimension,
|
|
115
|
+
" to ",
|
|
116
|
+
images.maxAllowedDimension,
|
|
117
|
+
"; anything outside is clamped. Tool results are always capped at ",
|
|
118
|
+
images.maxAllowedDimension,
|
|
119
|
+
"."
|
|
120
|
+
] })] }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
121
|
+
className: "flex items-center gap-2",
|
|
122
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.Input, {
|
|
123
|
+
"data-testid": "image-max-dimension",
|
|
124
|
+
"aria-labelledby": "image-max-dimension-label",
|
|
125
|
+
value: draft,
|
|
126
|
+
inputMode: "numeric",
|
|
127
|
+
spellCheck: false,
|
|
128
|
+
disabled: busy || !images.autoResize,
|
|
129
|
+
onChange: (event) => setDraft(event.target.value),
|
|
130
|
+
className: "w-24 text-right font-mono text-sm tabular-nums"
|
|
131
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.Button, {
|
|
132
|
+
size: "sm",
|
|
133
|
+
variant: dirty ? "primary" : "outline",
|
|
134
|
+
"data-testid": "image-max-dimension-save",
|
|
135
|
+
disabled: busy || !dirty,
|
|
136
|
+
onClick: () => void save({ maxDimension: parsed }),
|
|
137
|
+
children: "Save"
|
|
138
|
+
})]
|
|
139
|
+
})] })] })
|
|
140
|
+
]
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
//#endregion
|
|
144
|
+
exports.ImageSettings = ImageSettings;
|
|
145
|
+
|
|
146
|
+
//# sourceMappingURL=ImageSettings.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ImageSettings.cjs","names":["useDashboardState","readImageSettings","writeImageSettings","SettingsPage","SettingsHeader","SettingsTitle","SettingsDescription","SettingsCard","SettingsRow","SettingsRowText","SettingsRowTitle","SettingsRowDescription","Button","Skeleton","Switch","Input"],"sources":["../../../../src/web/features/settings/ImageSettings.tsx"],"sourcesContent":["import {\n Button,\n Input,\n SettingsCard,\n SettingsDescription,\n SettingsHeader,\n SettingsPage,\n SettingsRow,\n SettingsRowDescription,\n SettingsRowText,\n SettingsRowTitle,\n SettingsTitle,\n Skeleton,\n Switch,\n} from '@agimon-ai/po-web-components';\nimport { useEffect } from 'react';\n\nimport type { SettingsImagesView } from '../../../types/settings';\nimport { readImageSettings, writeImageSettings } from '../../lib/settingsApi';\nimport { useDashboardState } from '../../stores/dashboardStateStore';\n\n/**\n * The image page: how large an image may be when it reaches a model.\n *\n * These two write Pi's own settings.json rather than the Doom config, because\n * Pi's terminal settings screen writes the same toggle and a machine should not\n * hold two answers. The toggle applies at once; the cap is typed, so it saves\n * on its own button rather than on every keystroke.\n */\nexport function ImageSettings() {\n const [images, setImages, imagesState] = useDashboardState<SettingsImagesView | undefined>('images/view', undefined);\n const [draft, setDraft] = useDashboardState('images/draft', '');\n const [error, setError] = useDashboardState<string | undefined>('images/error', undefined);\n const [busy, setBusy, busyState] = useDashboardState('images/busy', false);\n\n /** `readImageSettings` never rejects: a failed read resolves to `{ ok: false, error }`. */\n const load = (isCancelled: () => boolean = () => false): void => {\n void readImageSettings().then((result) => {\n if (isCancelled() || busyState.state || imagesState.state !== undefined) return;\n if (result.ok) {\n setImages(result.images);\n setDraft(String(result.images.maxDimension));\n setError(undefined);\n } else setError(result.error);\n });\n };\n\n useEffect(() => {\n if (imagesState.state !== undefined) return;\n let cancelled = false;\n load(() => cancelled);\n return () => {\n cancelled = true;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps -- `load` reads only the store handles listed here.\n }, [imagesState, busyState, setImages, setDraft, setError]);\n\n const save = async (change: { autoResize?: boolean; maxDimension?: number }): Promise<void> => {\n if (busyState.state) return;\n setBusy(true);\n let result: Awaited<ReturnType<typeof writeImageSettings>>;\n try {\n result = await writeImageSettings(change);\n } finally {\n setBusy(false);\n }\n if (result.ok) {\n setImages(result.images);\n if (change.maxDimension !== undefined)\n setDraft((current) => (current === draft ? String(result.images.maxDimension) : current));\n setError(undefined);\n return;\n }\n setError(result.error);\n };\n\n const parsed = Number.parseInt(draft, 10);\n const dirty = images !== undefined && Number.isFinite(parsed) && parsed !== images.maxDimension;\n\n return (\n <SettingsPage data-testid=\"image-settings\">\n <SettingsHeader>\n <SettingsTitle>Images</SettingsTitle>\n <SettingsDescription>\n How large an image can be when it reaches a model. This covers images the agent reads and the ones you attach.\n Pi's own settings screen changes the same values.\n </SettingsDescription>\n </SettingsHeader>\n {images === undefined && error !== undefined ? (\n <SettingsCard>\n <SettingsRow data-testid=\"image-settings-error\" title={error}>\n <SettingsRowText role=\"alert\">\n <SettingsRowTitle>Po couldn't read your image settings just now</SettingsRowTitle>\n <SettingsRowDescription>\n Nothing has changed. Images are handled as they were before.\n </SettingsRowDescription>\n </SettingsRowText>\n <Button variant=\"outline\" size=\"sm\" onClick={() => load()}>\n Try again\n </Button>\n </SettingsRow>\n </SettingsCard>\n ) : null}\n {images !== undefined && error !== undefined ? (\n <p role=\"alert\" data-testid=\"image-settings-error\" className=\"text-sm leading-relaxed text-doom-red\">\n {error}\n </p>\n ) : null}\n {images === undefined && error === undefined ? (\n <SettingsCard role=\"status\" aria-busy className=\"gap-4 p-5\">\n <span className=\"sr-only\">Reading image settings</span>\n <Skeleton className=\"h-4 w-48\" />\n <Skeleton className=\"h-4 w-72\" />\n </SettingsCard>\n ) : null}\n {images === undefined ? null : (\n <SettingsCard>\n <SettingsRow>\n <SettingsRowText>\n <SettingsRowTitle id=\"image-auto-resize-label\">Resize large images</SettingsRowTitle>\n <SettingsRowDescription>\n When off, images go out at the size they arrived, and some providers then reject the whole conversation.\n </SettingsRowDescription>\n </SettingsRowText>\n <Switch\n data-testid=\"image-auto-resize\"\n aria-labelledby=\"image-auto-resize-label\"\n checked={images.autoResize}\n disabled={busy}\n onCheckedChange={(checked) => void save({ autoResize: checked })}\n />\n </SettingsRow>\n <SettingsRow>\n <SettingsRowText>\n <SettingsRowTitle id=\"image-max-dimension-label\">Longest edge</SettingsRowTitle>\n <SettingsRowDescription>\n In pixels, from {images.minDimension} to {images.maxAllowedDimension}; anything outside is clamped. Tool\n results are always capped at {images.maxAllowedDimension}.\n </SettingsRowDescription>\n </SettingsRowText>\n <div className=\"flex items-center gap-2\">\n <Input\n data-testid=\"image-max-dimension\"\n aria-labelledby=\"image-max-dimension-label\"\n value={draft}\n inputMode=\"numeric\"\n spellCheck={false}\n disabled={busy || !images.autoResize}\n onChange={(event) => setDraft(event.target.value)}\n className=\"w-24 text-right font-mono text-sm tabular-nums\"\n />\n <Button\n size=\"sm\"\n variant={dirty ? 'primary' : 'outline'}\n data-testid=\"image-max-dimension-save\"\n disabled={busy || !dirty}\n onClick={() => void save({ maxDimension: parsed })}\n >\n Save\n </Button>\n </div>\n </SettingsRow>\n </SettingsCard>\n )}\n </SettingsPage>\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
//#region src/web/features/settings/ImageSettings.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* The image page: how large an image may be when it reaches a model.
|
|
4
|
+
*
|
|
5
|
+
* These two write Pi's own settings.json rather than the Doom config, because
|
|
6
|
+
* Pi's terminal settings screen writes the same toggle and a machine should not
|
|
7
|
+
* hold two answers. The toggle applies at once; the cap is typed, so it saves
|
|
8
|
+
* on its own button rather than on every keystroke.
|
|
9
|
+
*/
|
|
10
|
+
export declare function ImageSettings(): import("react").JSX.Element;
|
|
11
|
+
//#endregion
|
|
12
|
+
//# sourceMappingURL=ImageSettings.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ImageSettings.d.mts","names":[],"sources":["../../../../src/web/features/settings/ImageSettings.tsx"],"mappings":";;;;;;;;;wBA6BgB,iCAAa,IAAA"}
|