@flanksource/clicky-ui 0.3.46 → 0.3.47
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/NOTICE.md +11 -0
- package/dist/ai.cjs +13 -8
- package/dist/ai.cjs.map +1 -1
- package/dist/ai.js +7 -2
- package/dist/ai.js.map +1 -1
- package/dist/components/ErrorWrapper.cjs +2 -3
- package/dist/components/ErrorWrapper.cjs.map +1 -1
- package/dist/components/ErrorWrapper.d.ts.map +1 -1
- package/dist/components/ErrorWrapper.js +3 -4
- package/dist/components/ErrorWrapper.js.map +1 -1
- package/dist/data/Clicky.cjs +3 -0
- package/dist/data/Clicky.cjs.map +1 -1
- package/dist/data/Clicky.js +3 -0
- package/dist/data/Clicky.js.map +1 -1
- package/dist/data/FilterPill.cjs +15 -2
- package/dist/data/FilterPill.cjs.map +1 -1
- package/dist/data/FilterPill.d.ts +1 -1
- package/dist/data/FilterPill.d.ts.map +1 -1
- package/dist/data/FilterPill.js +15 -2
- package/dist/data/FilterPill.js.map +1 -1
- package/dist/data/LogViewer.cjs +27 -8
- package/dist/data/LogViewer.cjs.map +1 -1
- package/dist/data/LogViewer.d.ts +11 -3
- package/dist/data/LogViewer.d.ts.map +1 -1
- package/dist/data/LogViewer.js +27 -8
- package/dist/data/LogViewer.js.map +1 -1
- package/dist/data/Properties.cjs +2 -15
- package/dist/data/Properties.cjs.map +1 -1
- package/dist/data/Properties.d.ts +4 -0
- package/dist/data/Properties.d.ts.map +1 -1
- package/dist/data/Properties.js +2 -15
- package/dist/data/Properties.js.map +1 -1
- package/dist/data/PropertyValue.cjs +37 -0
- package/dist/data/PropertyValue.cjs.map +1 -0
- package/dist/data/PropertyValue.d.ts +6 -0
- package/dist/data/PropertyValue.d.ts.map +1 -0
- package/dist/data/PropertyValue.js +37 -0
- package/dist/data/PropertyValue.js.map +1 -0
- package/dist/data/Tree.cjs +4 -3
- package/dist/data/Tree.cjs.map +1 -1
- package/dist/data/Tree.d.ts +3 -1
- package/dist/data/Tree.d.ts.map +1 -1
- package/dist/data/Tree.js +4 -3
- package/dist/data/Tree.js.map +1 -1
- package/dist/data/ai/ChatFab.cjs +1 -1
- package/dist/data/ai/ChatFab.cjs.map +1 -1
- package/dist/data/ai/ChatFab.js +1 -1
- package/dist/data/ai/ChatFab.js.map +1 -1
- package/dist/data/ai/ChatWindow.cjs +106 -171
- package/dist/data/ai/ChatWindow.cjs.map +1 -1
- package/dist/data/ai/ChatWindow.d.ts +6 -2
- package/dist/data/ai/ChatWindow.d.ts.map +1 -1
- package/dist/data/ai/ChatWindow.header.cjs +104 -0
- package/dist/data/ai/ChatWindow.header.cjs.map +1 -0
- package/dist/data/ai/ChatWindow.header.d.ts +29 -0
- package/dist/data/ai/ChatWindow.header.d.ts.map +1 -0
- package/dist/data/ai/ChatWindow.header.js +104 -0
- package/dist/data/ai/ChatWindow.header.js.map +1 -0
- package/dist/data/ai/ChatWindow.js +107 -172
- package/dist/data/ai/ChatWindow.js.map +1 -1
- package/dist/data/ai/ChatWindow.placement.cjs +95 -0
- package/dist/data/ai/ChatWindow.placement.cjs.map +1 -0
- package/dist/data/ai/ChatWindow.placement.d.ts +32 -0
- package/dist/data/ai/ChatWindow.placement.d.ts.map +1 -0
- package/dist/data/ai/ChatWindow.placement.js +95 -0
- package/dist/data/ai/ChatWindow.placement.js.map +1 -0
- package/dist/data/ai/SessionChatComposer.cjs +3 -1
- package/dist/data/ai/SessionChatComposer.cjs.map +1 -1
- package/dist/data/ai/SessionChatComposer.d.ts +4 -1
- package/dist/data/ai/SessionChatComposer.d.ts.map +1 -1
- package/dist/data/ai/SessionChatComposer.js +3 -1
- package/dist/data/ai/SessionChatComposer.js.map +1 -1
- package/dist/data/ai/SessionInspector.cjs +68 -72
- package/dist/data/ai/SessionInspector.cjs.map +1 -1
- package/dist/data/ai/SessionInspector.composer-slot.cjs +8 -0
- package/dist/data/ai/SessionInspector.composer-slot.cjs.map +1 -0
- package/dist/data/ai/SessionInspector.composer-slot.d.ts +9 -0
- package/dist/data/ai/SessionInspector.composer-slot.d.ts.map +1 -0
- package/dist/data/ai/SessionInspector.composer-slot.js +8 -0
- package/dist/data/ai/SessionInspector.composer-slot.js.map +1 -0
- package/dist/data/ai/SessionInspector.d.ts +6 -1
- package/dist/data/ai/SessionInspector.d.ts.map +1 -1
- package/dist/data/ai/SessionInspector.js +69 -73
- package/dist/data/ai/SessionInspector.js.map +1 -1
- package/dist/data/ai/SessionInspector.legacy.cjs +41 -42
- package/dist/data/ai/SessionInspector.legacy.cjs.map +1 -1
- package/dist/data/ai/SessionInspector.legacy.d.ts.map +1 -1
- package/dist/data/ai/SessionInspector.legacy.js +41 -42
- package/dist/data/ai/SessionInspector.legacy.js.map +1 -1
- package/dist/data/ai/SessionInspector.remote-view.cjs +14 -9
- package/dist/data/ai/SessionInspector.remote-view.cjs.map +1 -1
- package/dist/data/ai/SessionInspector.remote-view.d.ts +6 -2
- package/dist/data/ai/SessionInspector.remote-view.d.ts.map +1 -1
- package/dist/data/ai/SessionInspector.remote-view.js +14 -9
- package/dist/data/ai/SessionInspector.remote-view.js.map +1 -1
- package/dist/data/ai/SessionInspector.remote.cjs +84 -16
- package/dist/data/ai/SessionInspector.remote.cjs.map +1 -1
- package/dist/data/ai/SessionInspector.remote.d.ts +42 -7
- package/dist/data/ai/SessionInspector.remote.d.ts.map +1 -1
- package/dist/data/ai/SessionInspector.remote.js +86 -18
- package/dist/data/ai/SessionInspector.remote.js.map +1 -1
- package/dist/data/ai/SessionInspector.transcript.cjs +5 -0
- package/dist/data/ai/SessionInspector.transcript.cjs.map +1 -1
- package/dist/data/ai/SessionInspector.transcript.d.ts.map +1 -1
- package/dist/data/ai/SessionInspector.transcript.js +5 -0
- package/dist/data/ai/SessionInspector.transcript.js.map +1 -1
- package/dist/data/ai/SessionTail.cjs +63 -0
- package/dist/data/ai/SessionTail.cjs.map +1 -0
- package/dist/data/ai/SessionTail.d.ts +14 -0
- package/dist/data/ai/SessionTail.d.ts.map +1 -0
- package/dist/data/ai/SessionTail.js +63 -0
- package/dist/data/ai/SessionTail.js.map +1 -0
- package/dist/data/ai/SessionViewer.cjs +10 -3
- package/dist/data/ai/SessionViewer.cjs.map +1 -1
- package/dist/data/ai/SessionViewer.d.ts +7 -1
- package/dist/data/ai/SessionViewer.d.ts.map +1 -1
- package/dist/data/ai/SessionViewer.js +10 -3
- package/dist/data/ai/SessionViewer.js.map +1 -1
- package/dist/data/ai/SessionViewer.unified.d.ts +14 -0
- package/dist/data/ai/SessionViewer.unified.d.ts.map +1 -1
- package/dist/data/ai/index.d.ts +4 -3
- package/dist/data/ai/index.d.ts.map +1 -1
- package/dist/data/ai/use-session-scroll.cjs +30 -6
- package/dist/data/ai/use-session-scroll.cjs.map +1 -1
- package/dist/data/ai/use-session-scroll.d.ts +7 -0
- package/dist/data/ai/use-session-scroll.d.ts.map +1 -1
- package/dist/data/ai/use-session-scroll.js +30 -6
- package/dist/data/ai/use-session-scroll.js.map +1 -1
- package/dist/data/chat/Chat.cjs +1 -1
- package/dist/data/chat/Chat.cjs.map +1 -1
- package/dist/data/chat/Chat.js +1 -1
- package/dist/data/chat/Chat.js.map +1 -1
- package/dist/data/chat/ChatRuntimeToolbar.cjs +4 -4
- package/dist/data/chat/ChatRuntimeToolbar.cjs.map +1 -1
- package/dist/data/chat/ChatRuntimeToolbar.d.ts.map +1 -1
- package/dist/data/chat/ChatRuntimeToolbar.js +4 -4
- package/dist/data/chat/ChatRuntimeToolbar.js.map +1 -1
- package/dist/data/chat/PromptInput.cjs +4 -2
- package/dist/data/chat/PromptInput.cjs.map +1 -1
- package/dist/data/chat/PromptInput.d.ts +5 -1
- package/dist/data/chat/PromptInput.d.ts.map +1 -1
- package/dist/data/chat/PromptInput.js +4 -2
- package/dist/data/chat/PromptInput.js.map +1 -1
- package/dist/data/diagnostics/ErrorDetails.cjs +13 -2
- package/dist/data/diagnostics/ErrorDetails.cjs.map +1 -1
- package/dist/data/diagnostics/ErrorDetails.d.ts +3 -1
- package/dist/data/diagnostics/ErrorDetails.d.ts.map +1 -1
- package/dist/data/diagnostics/ErrorDetails.js +14 -3
- package/dist/data/diagnostics/ErrorDetails.js.map +1 -1
- package/dist/data/diagnostics/FrameSourceWindow.cjs +3 -2
- package/dist/data/diagnostics/FrameSourceWindow.cjs.map +1 -1
- package/dist/data/diagnostics/FrameSourceWindow.d.ts.map +1 -1
- package/dist/data/diagnostics/FrameSourceWindow.js +3 -2
- package/dist/data/diagnostics/FrameSourceWindow.js.map +1 -1
- package/dist/data/diagnostics/error-diagnostics.cjs +5 -0
- package/dist/data/diagnostics/error-diagnostics.cjs.map +1 -1
- package/dist/data/diagnostics/error-diagnostics.d.ts +1 -0
- package/dist/data/diagnostics/error-diagnostics.d.ts.map +1 -1
- package/dist/data/diagnostics/error-diagnostics.js +6 -1
- package/dist/data/diagnostics/error-diagnostics.js.map +1 -1
- package/dist/data/har/HarPanel.cjs +3 -1
- package/dist/data/har/HarPanel.cjs.map +1 -1
- package/dist/data/har/HarPanel.d.ts +4 -1
- package/dist/data/har/HarPanel.d.ts.map +1 -1
- package/dist/data/har/HarPanel.js +3 -1
- package/dist/data/har/HarPanel.js.map +1 -1
- package/dist/data/test-runner/Expectation.cjs +57 -0
- package/dist/data/test-runner/Expectation.cjs.map +1 -0
- package/dist/data/test-runner/Expectation.d.ts +19 -0
- package/dist/data/test-runner/Expectation.d.ts.map +1 -0
- package/dist/data/test-runner/Expectation.js +57 -0
- package/dist/data/test-runner/Expectation.js.map +1 -0
- package/dist/data/test-runner/MarkIcons.cjs +38 -0
- package/dist/data/test-runner/MarkIcons.cjs.map +1 -0
- package/dist/data/test-runner/MarkIcons.d.ts +15 -0
- package/dist/data/test-runner/MarkIcons.d.ts.map +1 -0
- package/dist/data/test-runner/MarkIcons.js +38 -0
- package/dist/data/test-runner/MarkIcons.js.map +1 -0
- package/dist/data/test-runner/TestDetailPanel.cjs +74 -42
- package/dist/data/test-runner/TestDetailPanel.cjs.map +1 -1
- package/dist/data/test-runner/TestDetailPanel.d.ts.map +1 -1
- package/dist/data/test-runner/TestDetailPanel.js +76 -44
- package/dist/data/test-runner/TestDetailPanel.js.map +1 -1
- package/dist/data/test-runner/TestFailureDetail.cjs +23 -27
- package/dist/data/test-runner/TestFailureDetail.cjs.map +1 -1
- package/dist/data/test-runner/TestFailureDetail.d.ts +2 -2
- package/dist/data/test-runner/TestFailureDetail.d.ts.map +1 -1
- package/dist/data/test-runner/TestFailureDetail.js +23 -27
- package/dist/data/test-runner/TestFailureDetail.js.map +1 -1
- package/dist/data/test-runner/TestFilterBar.cjs +87 -93
- package/dist/data/test-runner/TestFilterBar.cjs.map +1 -1
- package/dist/data/test-runner/TestFilterBar.d.ts +3 -2
- package/dist/data/test-runner/TestFilterBar.d.ts.map +1 -1
- package/dist/data/test-runner/TestFilterBar.js +89 -95
- package/dist/data/test-runner/TestFilterBar.js.map +1 -1
- package/dist/data/test-runner/TestRunSummary.cjs +35 -21
- package/dist/data/test-runner/TestRunSummary.cjs.map +1 -1
- package/dist/data/test-runner/TestRunSummary.d.ts.map +1 -1
- package/dist/data/test-runner/TestRunSummary.js +35 -21
- package/dist/data/test-runner/TestRunSummary.js.map +1 -1
- package/dist/data/test-runner/TestRunner.cjs +52 -30
- package/dist/data/test-runner/TestRunner.cjs.map +1 -1
- package/dist/data/test-runner/TestRunner.d.ts +3 -2
- package/dist/data/test-runner/TestRunner.d.ts.map +1 -1
- package/dist/data/test-runner/TestRunner.js +52 -30
- package/dist/data/test-runner/TestRunner.js.map +1 -1
- package/dist/data/test-runner/TestTree.cjs +5 -2
- package/dist/data/test-runner/TestTree.cjs.map +1 -1
- package/dist/data/test-runner/TestTree.d.ts +5 -2
- package/dist/data/test-runner/TestTree.d.ts.map +1 -1
- package/dist/data/test-runner/TestTree.js +5 -2
- package/dist/data/test-runner/TestTree.js.map +1 -1
- package/dist/data/test-runner/TestTreeNode.cjs +27 -19
- package/dist/data/test-runner/TestTreeNode.cjs.map +1 -1
- package/dist/data/test-runner/TestTreeNode.d.ts.map +1 -1
- package/dist/data/test-runner/TestTreeNode.js +28 -20
- package/dist/data/test-runner/TestTreeNode.js.map +1 -1
- package/dist/data/test-runner/adapter.cjs +11 -0
- package/dist/data/test-runner/adapter.cjs.map +1 -1
- package/dist/data/test-runner/adapter.d.ts +18 -7
- package/dist/data/test-runner/adapter.d.ts.map +1 -1
- package/dist/data/test-runner/adapter.js +11 -0
- package/dist/data/test-runner/adapter.js.map +1 -1
- package/dist/data/test-runner/copy.cjs +114 -0
- package/dist/data/test-runner/copy.cjs.map +1 -0
- package/dist/data/test-runner/copy.d.ts +47 -0
- package/dist/data/test-runner/copy.d.ts.map +1 -0
- package/dist/data/test-runner/copy.js +114 -0
- package/dist/data/test-runner/copy.js.map +1 -0
- package/dist/data/test-runner/index.d.ts +5 -2
- package/dist/data/test-runner/index.d.ts.map +1 -1
- package/dist/data/test-runner/marks.cjs +143 -0
- package/dist/data/test-runner/marks.cjs.map +1 -0
- package/dist/data/test-runner/marks.d.ts +30 -0
- package/dist/data/test-runner/marks.d.ts.map +1 -0
- package/dist/data/test-runner/marks.js +143 -0
- package/dist/data/test-runner/marks.js.map +1 -0
- package/dist/data/test-runner/status.cjs +27 -44
- package/dist/data/test-runner/status.cjs.map +1 -1
- package/dist/data/test-runner/status.d.ts +12 -3
- package/dist/data/test-runner/status.d.ts.map +1 -1
- package/dist/data/test-runner/status.js +27 -44
- package/dist/data/test-runner/status.js.map +1 -1
- package/dist/data/verification/adapterViews.cjs +16 -41
- package/dist/data/verification/adapterViews.cjs.map +1 -1
- package/dist/data/verification/adapterViews.d.ts.map +1 -1
- package/dist/data/verification/adapterViews.js +16 -41
- package/dist/data/verification/adapterViews.js.map +1 -1
- package/dist/data/verification/adapters.cjs +115 -3
- package/dist/data/verification/adapters.cjs.map +1 -1
- package/dist/data/verification/adapters.d.ts.map +1 -1
- package/dist/data/verification/adapters.js +115 -3
- package/dist/data/verification/adapters.js.map +1 -1
- package/dist/data/verification/verifyReportTests.cjs.map +1 -1
- package/dist/data/verification/verifyReportTests.js.map +1 -1
- package/dist/data/version-info.cjs +3 -3
- package/dist/data/version-info.js +3 -3
- package/dist/data.cjs +44 -3
- package/dist/data.cjs.map +1 -1
- package/dist/data.d.ts +2 -0
- package/dist/data.d.ts.map +1 -1
- package/dist/data.js +45 -4
- package/dist/data.js.map +1 -1
- package/dist/icons/components/UiLogoEslint.cjs +10 -0
- package/dist/icons/components/UiLogoEslint.cjs.map +1 -0
- package/dist/icons/components/UiLogoEslint.d.ts +9 -0
- package/dist/icons/components/UiLogoEslint.d.ts.map +1 -0
- package/dist/icons/components/UiLogoEslint.js +10 -0
- package/dist/icons/components/UiLogoEslint.js.map +1 -0
- package/dist/icons/components/UiLogoGo.cjs +10 -0
- package/dist/icons/components/UiLogoGo.cjs.map +1 -0
- package/dist/icons/components/UiLogoGo.d.ts +9 -0
- package/dist/icons/components/UiLogoGo.d.ts.map +1 -0
- package/dist/icons/components/UiLogoGo.js +10 -0
- package/dist/icons/components/UiLogoGo.js.map +1 -0
- package/dist/icons/components/UiLogoJest.cjs +10 -0
- package/dist/icons/components/UiLogoJest.cjs.map +1 -0
- package/dist/icons/components/UiLogoJest.d.ts +9 -0
- package/dist/icons/components/UiLogoJest.d.ts.map +1 -0
- package/dist/icons/components/UiLogoJest.js +10 -0
- package/dist/icons/components/UiLogoJest.js.map +1 -0
- package/dist/icons/components/UiLogoMarkdown.cjs +10 -0
- package/dist/icons/components/UiLogoMarkdown.cjs.map +1 -0
- package/dist/icons/components/UiLogoMarkdown.d.ts +9 -0
- package/dist/icons/components/UiLogoMarkdown.d.ts.map +1 -0
- package/dist/icons/components/UiLogoMarkdown.js +10 -0
- package/dist/icons/components/UiLogoMarkdown.js.map +1 -0
- package/dist/icons/components/UiLogoOxc.cjs +10 -0
- package/dist/icons/components/UiLogoOxc.cjs.map +1 -0
- package/dist/icons/components/UiLogoOxc.d.ts +9 -0
- package/dist/icons/components/UiLogoOxc.d.ts.map +1 -0
- package/dist/icons/components/UiLogoOxc.js +10 -0
- package/dist/icons/components/UiLogoOxc.js.map +1 -0
- package/dist/icons/components/UiLogoPlaywright.cjs +10 -0
- package/dist/icons/components/UiLogoPlaywright.cjs.map +1 -0
- package/dist/icons/components/UiLogoPlaywright.d.ts +9 -0
- package/dist/icons/components/UiLogoPlaywright.d.ts.map +1 -0
- package/dist/icons/components/UiLogoPlaywright.js +10 -0
- package/dist/icons/components/UiLogoPlaywright.js.map +1 -0
- package/dist/icons/components/UiLogoPython.cjs +10 -0
- package/dist/icons/components/UiLogoPython.cjs.map +1 -0
- package/dist/icons/components/UiLogoPython.d.ts +9 -0
- package/dist/icons/components/UiLogoPython.d.ts.map +1 -0
- package/dist/icons/components/UiLogoPython.js +10 -0
- package/dist/icons/components/UiLogoPython.js.map +1 -0
- package/dist/icons/components/UiLogoReact.cjs +10 -0
- package/dist/icons/components/UiLogoReact.cjs.map +1 -0
- package/dist/icons/components/UiLogoReact.d.ts +9 -0
- package/dist/icons/components/UiLogoReact.d.ts.map +1 -0
- package/dist/icons/components/UiLogoReact.js +10 -0
- package/dist/icons/components/UiLogoReact.js.map +1 -0
- package/dist/icons/components/UiLogoRuff.cjs +10 -0
- package/dist/icons/components/UiLogoRuff.cjs.map +1 -0
- package/dist/icons/components/UiLogoRuff.d.ts +9 -0
- package/dist/icons/components/UiLogoRuff.d.ts.map +1 -0
- package/dist/icons/components/UiLogoRuff.js +10 -0
- package/dist/icons/components/UiLogoRuff.js.map +1 -0
- package/dist/icons/components/UiLogoTypescript.cjs +10 -0
- package/dist/icons/components/UiLogoTypescript.cjs.map +1 -0
- package/dist/icons/components/UiLogoTypescript.d.ts +9 -0
- package/dist/icons/components/UiLogoTypescript.d.ts.map +1 -0
- package/dist/icons/components/UiLogoTypescript.js +10 -0
- package/dist/icons/components/UiLogoTypescript.js.map +1 -0
- package/dist/icons/components/UiLogoVitest.cjs +10 -0
- package/dist/icons/components/UiLogoVitest.cjs.map +1 -0
- package/dist/icons/components/UiLogoVitest.d.ts +9 -0
- package/dist/icons/components/UiLogoVitest.d.ts.map +1 -0
- package/dist/icons/components/UiLogoVitest.js +10 -0
- package/dist/icons/components/UiLogoVitest.js.map +1 -0
- package/dist/icons/index.d.ts +11 -0
- package/dist/icons/index.d.ts.map +1 -1
- package/dist/icons/registry.cjs +22 -0
- package/dist/icons/registry.cjs.map +1 -1
- package/dist/icons/registry.d.ts.map +1 -1
- package/dist/icons/registry.js +22 -0
- package/dist/icons/registry.js.map +1 -1
- package/dist/icons.cjs +22 -0
- package/dist/icons.cjs.map +1 -1
- package/dist/icons.js +22 -0
- package/dist/icons.js.map +1 -1
- package/dist/index.cjs +44 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +45 -4
- package/dist/index.js.map +1 -1
- package/dist/overlay/DropdownMenuSubmenu.cjs +4 -4
- package/dist/overlay/DropdownMenuSubmenu.cjs.map +1 -1
- package/dist/overlay/DropdownMenuSubmenu.js +4 -4
- package/dist/overlay/DropdownMenuSubmenu.js.map +1 -1
- package/dist/rpc/InlineError.cjs +12 -43
- package/dist/rpc/InlineError.cjs.map +1 -1
- package/dist/rpc/InlineError.d.ts.map +1 -1
- package/dist/rpc/InlineError.js +13 -44
- package/dist/rpc/InlineError.js.map +1 -1
- package/dist/rpc/OperationScheduleDialog.cjs +63 -10
- package/dist/rpc/OperationScheduleDialog.cjs.map +1 -1
- package/dist/rpc/OperationScheduleDialog.d.ts +4 -0
- package/dist/rpc/OperationScheduleDialog.d.ts.map +1 -1
- package/dist/rpc/OperationScheduleDialog.js +63 -10
- package/dist/rpc/OperationScheduleDialog.js.map +1 -1
- package/dist/rpc/OperationSchedules.cjs +12 -2
- package/dist/rpc/OperationSchedules.cjs.map +1 -1
- package/dist/rpc/OperationSchedules.d.ts.map +1 -1
- package/dist/rpc/OperationSchedules.js +12 -2
- package/dist/rpc/OperationSchedules.js.map +1 -1
- package/dist/rpc/operation-schedule-model.cjs +2 -0
- package/dist/rpc/operation-schedule-model.cjs.map +1 -1
- package/dist/rpc/operation-schedule-model.d.ts.map +1 -1
- package/dist/rpc/operation-schedule-model.js +2 -0
- package/dist/rpc/operation-schedule-model.js.map +1 -1
- package/dist/rpc/operation-schedule-types.d.ts +7 -1
- package/dist/rpc/operation-schedule-types.d.ts.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +1 -1
- package/dist/data/test-runner/frameworkIcon.cjs +0 -27
- package/dist/data/test-runner/frameworkIcon.cjs.map +0 -1
- package/dist/data/test-runner/frameworkIcon.d.ts +0 -3
- package/dist/data/test-runner/frameworkIcon.d.ts.map +0 -1
- package/dist/data/test-runner/frameworkIcon.js +0 -27
- package/dist/data/test-runner/frameworkIcon.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SessionInspector.js","sources":["../../../src/data/ai/SessionInspector.tsx"],"sourcesContent":["import { useMemo, useState, type ReactNode } from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { SessionInspectorPanel } from \"./SessionInspector.panels\";\nimport { SessionInspectorHeader } from \"./SessionInspector.summary\";\nimport { CompactSessionInspectorToolbar } from \"./SessionInspector.compact\";\nimport { InspectorTabs } from \"./SessionInspector.tabs\";\nimport {\n hasStructuredOutput,\n inspectorTabs,\n type SessionInspectorTab,\n} from \"./SessionInspector.tabs.model\";\nimport { SessionTranscript } from \"./SessionInspector.transcript\";\nimport {\n isSessionCollectionInput,\n type SessionCollectionInput,\n type SessionCollectionItem,\n type SessionInspectorInput,\n} from \"./SessionInspector.collection\";\nimport {\n SessionHierarchyPicker,\n SessionHierarchyTree,\n} from \"./SessionInspector.hierarchy\";\nimport { useSessionHierarchy } from \"./SessionInspector.hierarchy-state\";\nimport { type ApprovalResolveHandler } from \"./SessionInspector.approvals-model\";\nimport { LegacySessionInspector } from \"./SessionInspector.legacy\";\nimport { useInspectorTab } from \"./SessionInspector.tab-state\";\nimport {\n useRemoteCollection,\n useRemoteSession,\n} from \"./SessionInspector.remote\";\nimport { RemoteSessionStatus } from \"./SessionInspector.remote-view\";\nimport type { SessionViewerProps } from \"./SessionViewer\";\nimport {\n getSessionMetadata,\n type SessionInput,\n type SessionMetadataSummary,\n} from \"./SessionViewer.model\";\nimport type { UnifiedSessionInput } from \"./SessionViewer.unified\";\n\nexport type { SessionInspectorTab } from \"./SessionInspector.tabs.model\";\n\n/**\n * Either an in-memory `session` or a session URL `src` (never both — the\n * types forbid it and the component throws). With `src` the inspector fetches\n * the session and follows it while it is live; see `SessionInput` for the URL\n * contract. `follow` forces (`true`) or suppresses (`false`) the live stream\n * for `src` and for collection items that carry `src`.\n */\nexport type SessionInspectorProps = SessionInspectorOptions &\n (\n | { session: SessionInspectorInput; src?: never; follow?: boolean }\n | { src: string; session?: never; follow?: boolean }\n );\n\nexport interface SessionInspectorOptions {\n className?: string;\n /** Compact keeps tabs, runtime context, host actions, and session options on one line. */\n layout?: \"default\" | \"compact\";\n /** Runtime metadata to display in the compact context bar. Defaults to session metadata. */\n metadata?: SessionMetadataSummary;\n /** Host controls rendered before Session options in the compact toolbar. */\n toolbarActions?: ReactNode;\n defaultTab?: SessionInspectorTab;\n /** Controlled active tab (e.g. from the URL); pair with `onTabChange`. */\n tab?: SessionInspectorTab;\n onTabChange?: (tab: SessionInspectorTab) => void;\n /** Controlled session-level selection of a session collection; `[]` selects\n * nothing. Omit to start from the collection's defaults. */\n selectedSessionIds?: readonly string[];\n onSelectedSessionIdsChange?: (ids: string[]) => void;\n transcriptProps?: Omit<SessionViewerProps, \"session\">;\n renderSessionActions?: (item: SessionCollectionItem) => ReactNode;\n /** Receives edits made in the Plan tab. The inspector also keeps the draft visible locally. */\n onPlanChange?: (content: string) => void;\n /** Resolves one pending tool approval from the Approvals tab. Omitted, the\n * tab still lists pending requests but renders no Approve/Deny controls. */\n onResolveApproval?: ApprovalResolveHandler;\n composer?: ReactNode;\n}\n\nexport function SessionInspector({\n session,\n src,\n follow,\n className,\n ...options\n}: SessionInspectorProps) {\n if (session !== undefined && src !== undefined) {\n throw new Error(\n \"SessionInspector takes either `session` or `src`, not both\",\n );\n }\n if (session === undefined && src === undefined) {\n throw new Error(\"SessionInspector requires a `session` or a `src`\");\n }\n const followOptions = follow === undefined ? {} : { follow };\n const remote = useRemoteSession(src, followOptions);\n const collection =\n session !== undefined && isSessionCollectionInput(session)\n ? session\n : undefined;\n const remoteCollection = useRemoteCollection(collection, followOptions);\n const status = src !== undefined ? remote : remoteCollection;\n const resolved: SessionInspectorInput | undefined =\n src !== undefined\n ? remote.session\n : collection\n ? remoteCollection.collection\n : session;\n\n // A URL-backed inspector always renders inside the status wrapper, so an\n // error arriving mid-follow adds the alert without remounting the view.\n const remoteBacked =\n src !== undefined ||\n (collection !== undefined && remoteCollection.collection !== collection);\n if (resolved && !remoteBacked) {\n return (\n <SessionInspectorView\n session={resolved}\n {...followOptions}\n {...options}\n {...(className ? { className } : {})}\n />\n );\n }\n return (\n <RemoteSessionStatus\n loading={status.loading}\n {...(status.error ? { error: status.error } : {})}\n {...(className ? { className } : {})}\n >\n {resolved ? (\n <SessionInspectorView\n session={resolved}\n {...followOptions}\n {...options}\n />\n ) : null}\n </RemoteSessionStatus>\n );\n}\n\nfunction SessionInspectorView({\n session,\n follow,\n className,\n defaultTab = \"transcript\",\n tab,\n onTabChange,\n selectedSessionIds,\n onSelectedSessionIdsChange,\n transcriptProps,\n renderSessionActions,\n onPlanChange,\n onResolveApproval,\n composer,\n layout = \"default\",\n metadata,\n toolbarActions,\n}: SessionInspectorOptions & {\n session: SessionInspectorInput;\n follow?: boolean;\n}) {\n const detail = useMemo(\n () =>\n isSessionCollectionInput(session) ? undefined : asUnifiedSession(session),\n [session],\n );\n const collection = useMemo(\n () =>\n isSessionCollectionInput(session)\n ? session\n : detail\n ? singleSessionCollection(detail)\n : undefined,\n [detail, session],\n );\n\n const tabProps = {\n ...(tab ? { tab } : {}),\n ...(onTabChange ? { onTabChange } : {}),\n };\n\n if (collection) {\n const optionalProps = {\n ...tabProps,\n ...(follow === undefined ? {} : { follow }),\n ...(selectedSessionIds ? { selectedSessionIds } : {}),\n ...(onSelectedSessionIdsChange ? { onSelectedSessionIdsChange } : {}),\n ...(className ? { className } : {}),\n ...(transcriptProps ? { transcriptProps } : {}),\n ...(renderSessionActions ? { renderSessionActions } : {}),\n ...(onPlanChange ? { onPlanChange } : {}),\n ...(onResolveApproval ? { onResolveApproval } : {}),\n ...(composer ? { composer } : {}),\n ...(layout === \"compact\" ? { layout } : {}),\n ...(metadata ? { metadata } : {}),\n ...(toolbarActions ? { toolbarActions } : {}),\n };\n return (\n <CollectionSessionInspector\n collection={collection}\n defaultTab={defaultTab}\n {...optionalProps}\n />\n );\n }\n\n return (\n <LegacySessionInspector\n session={session as SessionInput}\n defaultTab={defaultTab}\n {...tabProps}\n {...(className ? { className } : {})}\n {...(transcriptProps ? { transcriptProps } : {})}\n {...(composer ? { composer } : {})}\n {...(layout === \"compact\" ? { layout } : {})}\n {...(metadata ? { metadata } : {})}\n {...(toolbarActions ? { toolbarActions } : {})}\n />\n );\n}\n\nfunction CollectionSessionInspector({\n collection,\n follow,\n className,\n defaultTab = \"transcript\",\n tab: controlledTab,\n onTabChange,\n selectedSessionIds,\n onSelectedSessionIdsChange,\n transcriptProps,\n renderSessionActions,\n onPlanChange,\n onResolveApproval,\n composer,\n layout = \"default\",\n metadata,\n toolbarActions,\n}: SessionInspectorOptions & {\n collection: SessionCollectionInput;\n follow?: boolean;\n}) {\n const hierarchy = useSessionHierarchy(collection, {\n ...(selectedSessionIds ? { selectedSessionIds } : {}),\n ...(onSelectedSessionIdsChange ? { onSelectedSessionIdsChange } : {}),\n ...(follow === undefined ? {} : { follow }),\n });\n const compact = layout === \"compact\";\n const [menuHost, setMenuHost] = useState<HTMLSpanElement | null>(null);\n const outputVisible = hasStructuredOutput(hierarchy.current);\n const [tab, setTab] = useInspectorTab(\n defaultTab,\n outputVisible,\n controlledTab,\n onTabChange,\n );\n const transcriptClassName = cn(\"h-full\", transcriptProps?.className);\n const panelDetail =\n tab === \"costs\" || tab === \"verification\"\n ? hierarchy.filtered\n : hierarchy.current;\n const compactMetadata = metadata ?? getSessionMetadata(hierarchy.current);\n const compactTabs = inspectorTabs(\n outputVisible,\n hierarchy.current,\n hierarchy.filtered,\n );\n const compactMenuHeader = (\n <div className=\"w-[min(38rem,calc(100vw-4rem))]\">\n <p className=\"px-1 pb-1 text-[10px] font-semibold uppercase tracking-wide text-muted-foreground\">\n Session content\n </p>\n <SessionHierarchyTree\n collection={collection}\n state={hierarchy}\n {...(renderSessionActions ? { renderSessionActions } : {})}\n className=\"h-[min(32rem,52vh)]\"\n />\n {transcriptProps?.menuHeader ? (\n <div className=\"mt-1 border-t border-border pt-1\">\n {transcriptProps.menuHeader}\n </div>\n ) : null}\n </div>\n );\n const compactTranscriptProps = compact\n ? {\n ...transcriptProps,\n menuContainer: menuHost,\n menuHeader: compactMenuHeader,\n showMenu: menuHost !== null && transcriptProps?.showMenu !== false,\n }\n : transcriptProps;\n\n return (\n <div\n className={cn(\n \"flex h-full min-h-0 w-full max-w-full flex-col overflow-hidden bg-background text-sm\",\n compact\n ? \"@container rounded-none border-0 shadow-none\"\n : \"rounded-xl border border-border shadow-sm\",\n className,\n )}\n >\n {compact ? (\n <CompactSessionInspectorToolbar\n tabs={compactTabs}\n activeTab={tab}\n onSelect={(next) => setTab(next as SessionInspectorTab)}\n onMenuHost={setMenuHost}\n {...(compactMetadata ? { metadata: compactMetadata } : {})}\n {...(toolbarActions ? { toolbarActions } : {})}\n />\n ) : (\n <>\n <SessionInspectorHeader session={hierarchy.current} />\n <div\n role=\"toolbar\"\n aria-label=\"Session content controls\"\n className=\"flex shrink-0 justify-start border-b border-border px-density-2 py-density-2\"\n >\n <SessionHierarchyPicker\n collection={collection}\n state={hierarchy}\n {...(renderSessionActions ? { renderSessionActions } : {})}\n />\n </div>\n <InspectorTabs tab={tab} tabs={compactTabs} onSelect={setTab} />\n </>\n )}\n <div\n className={cn(\n \"min-h-0 flex-1 overflow-y-auto\",\n !compact && \"flex flex-col lg:overflow-hidden\",\n )}\n >\n <main\n className={cn(\n \"flex min-w-0 flex-col\",\n compact ? \"min-h-0\" : \"min-h-[28rem] flex-1 lg:min-h-0\",\n )}\n >\n {compact ? (\n <>\n <div\n className={cn(\n \"min-h-0 flex-1 overflow-hidden\",\n tab !== \"transcript\" && \"hidden\",\n )}\n >\n <SessionTranscript\n session={hierarchy.filtered}\n viewerProps={{\n ...compactTranscriptProps,\n className: transcriptClassName,\n }}\n />\n </div>\n {tab !== \"transcript\" ? (\n <div className=\"min-h-0 flex-1 overflow-auto p-density-4\">\n <SessionInspectorPanel\n tab={tab}\n detail={panelDetail}\n session={hierarchy.current}\n {...(onPlanChange ? { onPlanChange } : {})}\n {...(onResolveApproval ? { onResolveApproval } : {})}\n />\n </div>\n ) : null}\n </>\n ) : (\n <div\n className={cn(\n \"min-h-0 flex-1\",\n tab === \"transcript\"\n ? \"overflow-hidden\"\n : \"overflow-auto p-density-4\",\n )}\n >\n {tab === \"transcript\" ? (\n <SessionTranscript\n session={hierarchy.filtered}\n viewerProps={{\n ...transcriptProps,\n className: transcriptClassName,\n }}\n />\n ) : (\n <SessionInspectorPanel\n tab={tab}\n detail={panelDetail}\n session={hierarchy.current}\n {...(onPlanChange ? { onPlanChange } : {})}\n {...(onResolveApproval ? { onResolveApproval } : {})}\n />\n )}\n </div>\n )}\n {composer ? (\n <div className=\"shrink-0 border-t border-border p-density-3\">\n {composer}\n </div>\n ) : null}\n </main>\n </div>\n </div>\n );\n}\n\nfunction singleSessionCollection(\n session: UnifiedSessionInput,\n): SessionCollectionInput {\n const id = session.id || \"session\";\n return {\n kind: \"session-collection\",\n id,\n currentSessionId: id,\n sessions: [{ id, session }],\n };\n}\n\nfunction asUnifiedSession(\n session: SessionInput,\n): UnifiedSessionInput | undefined {\n if (typeof session !== \"object\" || session === null || Array.isArray(session))\n return undefined;\n return session as UnifiedSessionInput;\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SessionInspector.js","sources":["../../../src/data/ai/SessionInspector.tsx"],"sourcesContent":["import { useMemo, useState, type ReactNode } from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { SessionInspectorPanel } from \"./SessionInspector.panels\";\nimport { PinnedComposer } from \"./SessionInspector.composer-slot\";\nimport { SessionInspectorHeader } from \"./SessionInspector.summary\";\nimport { CompactSessionInspectorToolbar } from \"./SessionInspector.compact\";\nimport { InspectorTabs } from \"./SessionInspector.tabs\";\nimport {\n hasStructuredOutput,\n inspectorTabs,\n type SessionInspectorTab,\n} from \"./SessionInspector.tabs.model\";\nimport { SessionTranscript } from \"./SessionInspector.transcript\";\nimport {\n isSessionCollectionInput,\n type SessionCollectionInput,\n type SessionCollectionItem,\n type SessionInspectorInput,\n} from \"./SessionInspector.collection\";\nimport {\n SessionHierarchyPicker,\n SessionHierarchyTree,\n} from \"./SessionInspector.hierarchy\";\nimport { useSessionHierarchy } from \"./SessionInspector.hierarchy-state\";\nimport { type ApprovalResolveHandler } from \"./SessionInspector.approvals-model\";\nimport { LegacySessionInspector } from \"./SessionInspector.legacy\";\nimport { useInspectorTab } from \"./SessionInspector.tab-state\";\nimport {\n useRemoteCollection,\n useRemoteSession,\n useReportLoadState,\n type SessionInspectorLoadState,\n} from \"./SessionInspector.remote\";\nimport { RemoteSessionStatus } from \"./SessionInspector.remote-view\";\nimport type { SessionViewerProps } from \"./SessionViewer\";\nimport {\n getSessionMetadata,\n type SessionInput,\n type SessionMetadataSummary,\n} from \"./SessionViewer.model\";\nimport type { UnifiedSessionInput } from \"./SessionViewer.unified\";\n\nexport type { SessionInspectorTab } from \"./SessionInspector.tabs.model\";\n\n/**\n * Either an in-memory `session` or a session URL `src` (never both — the\n * types forbid it and the component throws). With `src` the inspector fetches\n * the session and follows it while it is live; see `SessionInput` for the URL\n * contract. `follow` forces (`true`) or suppresses (`false`) the live stream\n * for `src` and for collection items that carry `src`.\n */\nexport type SessionInspectorProps = SessionInspectorOptions &\n (\n | { session: SessionInspectorInput; src?: never; follow?: boolean }\n | { src: string; session?: never; follow?: boolean }\n );\n\nexport interface SessionInspectorOptions {\n className?: string;\n /** Compact keeps tabs, runtime context, host actions, and session options on one line. */\n layout?: \"default\" | \"compact\";\n /** Runtime metadata to display in the compact context bar. Defaults to session metadata. */\n metadata?: SessionMetadataSummary;\n /** Host controls rendered before Session options in the compact toolbar. */\n toolbarActions?: ReactNode;\n defaultTab?: SessionInspectorTab;\n /** Controlled active tab (e.g. from the URL); pair with `onTabChange`. */\n tab?: SessionInspectorTab;\n onTabChange?: (tab: SessionInspectorTab) => void;\n /** Controlled session-level selection of a session collection; `[]` selects\n * nothing. Omit to start from the collection's defaults. */\n selectedSessionIds?: readonly string[];\n onSelectedSessionIdsChange?: (ids: string[]) => void;\n transcriptProps?: Omit<SessionViewerProps, \"session\">;\n renderSessionActions?: (item: SessionCollectionItem) => ReactNode;\n /** Receives edits made in the Plan tab. The inspector also keeps the draft visible locally. */\n onPlanChange?: (content: string) => void;\n /** Resolves one pending tool approval from the Approvals tab. Omitted, the\n * tab still lists pending requests but renders no Approve/Deny controls. */\n onResolveApproval?: ApprovalResolveHandler;\n composer?: ReactNode;\n /** With `src`: fires on the initial load result (`loading`, then `ready` or\n * `error`) and when the follow stream later sends a terminal error frame.\n * Never fires for an in-memory `session`. */\n onLoadStateChange?: (state: SessionInspectorLoadState) => void;\n}\n\nexport function SessionInspector({\n session,\n src,\n follow,\n className,\n onLoadStateChange,\n ...options\n}: SessionInspectorProps) {\n if (session !== undefined && src !== undefined) {\n throw new Error(\n \"SessionInspector takes either `session` or `src`, not both\",\n );\n }\n if (session === undefined && src === undefined) {\n throw new Error(\"SessionInspector requires a `session` or a `src`\");\n }\n const followOptions = follow === undefined ? {} : { follow };\n const remote = useRemoteSession(src, followOptions);\n useReportLoadState({\n state: remote,\n enabled: src !== undefined,\n onChange: onLoadStateChange,\n });\n const collection =\n session !== undefined && isSessionCollectionInput(session)\n ? session\n : undefined;\n const remoteCollection = useRemoteCollection(collection, followOptions);\n const status = src !== undefined ? remote : remoteCollection;\n const resolved: SessionInspectorInput | undefined =\n src !== undefined\n ? remote.session\n : collection\n ? remoteCollection.collection\n : session;\n\n // A URL-backed transcript pages older history in as the reader scrolls up.\n const viewOptions =\n src !== undefined && (remote.hasOlder || remote.loadingOlder)\n ? {\n ...options,\n transcriptProps: {\n ...options.transcriptProps,\n onReachStart: () => void remote.loadOlder(),\n loadingOlder: remote.loadingOlder === true,\n },\n }\n : options;\n\n // A URL-backed inspector always renders inside the status wrapper, so an\n // error arriving mid-follow adds the alert without remounting the view.\n const remoteBacked =\n src !== undefined ||\n (collection !== undefined && remoteCollection.collection !== collection);\n if (resolved && !remoteBacked) {\n return (\n <SessionInspectorView\n session={resolved}\n {...followOptions}\n {...options}\n {...(className ? { className } : {})}\n />\n );\n }\n return (\n <RemoteSessionStatus\n loading={status.loading}\n {...(status.error ? { error: status.error } : {})}\n {...(className ? { className } : {})}\n {...(options.composer ? { composer: options.composer } : {})}\n >\n {resolved ? (\n <SessionInspectorView\n session={resolved}\n {...followOptions}\n {...viewOptions}\n />\n ) : null}\n </RemoteSessionStatus>\n );\n}\n\nfunction SessionInspectorView({\n session,\n follow,\n className,\n defaultTab = \"transcript\",\n tab,\n onTabChange,\n selectedSessionIds,\n onSelectedSessionIdsChange,\n transcriptProps,\n renderSessionActions,\n onPlanChange,\n onResolveApproval,\n composer,\n layout = \"default\",\n metadata,\n toolbarActions,\n}: SessionInspectorOptions & {\n session: SessionInspectorInput;\n follow?: boolean;\n}) {\n const detail = useMemo(\n () =>\n isSessionCollectionInput(session) ? undefined : asUnifiedSession(session),\n [session],\n );\n const collection = useMemo(\n () =>\n isSessionCollectionInput(session)\n ? session\n : detail\n ? singleSessionCollection(detail)\n : undefined,\n [detail, session],\n );\n\n const tabProps = {\n ...(tab ? { tab } : {}),\n ...(onTabChange ? { onTabChange } : {}),\n };\n\n if (collection) {\n const optionalProps = {\n ...tabProps,\n ...(follow === undefined ? {} : { follow }),\n ...(selectedSessionIds ? { selectedSessionIds } : {}),\n ...(onSelectedSessionIdsChange ? { onSelectedSessionIdsChange } : {}),\n ...(className ? { className } : {}),\n ...(transcriptProps ? { transcriptProps } : {}),\n ...(renderSessionActions ? { renderSessionActions } : {}),\n ...(onPlanChange ? { onPlanChange } : {}),\n ...(onResolveApproval ? { onResolveApproval } : {}),\n ...(composer ? { composer } : {}),\n ...(layout === \"compact\" ? { layout } : {}),\n ...(metadata ? { metadata } : {}),\n ...(toolbarActions ? { toolbarActions } : {}),\n };\n return (\n <CollectionSessionInspector\n collection={collection}\n defaultTab={defaultTab}\n {...optionalProps}\n />\n );\n }\n\n return (\n <LegacySessionInspector\n session={session as SessionInput}\n defaultTab={defaultTab}\n {...tabProps}\n {...(className ? { className } : {})}\n {...(transcriptProps ? { transcriptProps } : {})}\n {...(composer ? { composer } : {})}\n {...(layout === \"compact\" ? { layout } : {})}\n {...(metadata ? { metadata } : {})}\n {...(toolbarActions ? { toolbarActions } : {})}\n />\n );\n}\n\nfunction CollectionSessionInspector({\n collection,\n follow,\n className,\n defaultTab = \"transcript\",\n tab: controlledTab,\n onTabChange,\n selectedSessionIds,\n onSelectedSessionIdsChange,\n transcriptProps,\n renderSessionActions,\n onPlanChange,\n onResolveApproval,\n composer,\n layout = \"default\",\n metadata,\n toolbarActions,\n}: SessionInspectorOptions & {\n collection: SessionCollectionInput;\n follow?: boolean;\n}) {\n const hierarchy = useSessionHierarchy(collection, {\n ...(selectedSessionIds ? { selectedSessionIds } : {}),\n ...(onSelectedSessionIdsChange ? { onSelectedSessionIdsChange } : {}),\n ...(follow === undefined ? {} : { follow }),\n });\n const compact = layout === \"compact\";\n const [menuHost, setMenuHost] = useState<HTMLSpanElement | null>(null);\n const outputVisible = hasStructuredOutput(hierarchy.current);\n const [tab, setTab] = useInspectorTab(\n defaultTab,\n outputVisible,\n controlledTab,\n onTabChange,\n );\n const transcriptClassName = cn(\"h-full\", transcriptProps?.className);\n const panelDetail =\n tab === \"costs\" || tab === \"verification\"\n ? hierarchy.filtered\n : hierarchy.current;\n const compactMetadata = metadata ?? getSessionMetadata(hierarchy.current);\n const compactTabs = inspectorTabs(\n outputVisible,\n hierarchy.current,\n hierarchy.filtered,\n );\n const compactMenuHeader = (\n <div className=\"w-[min(38rem,calc(100vw-4rem))]\">\n <p className=\"px-1 pb-1 text-[10px] font-semibold uppercase tracking-wide text-muted-foreground\">\n Session content\n </p>\n <SessionHierarchyTree\n collection={collection}\n state={hierarchy}\n {...(renderSessionActions ? { renderSessionActions } : {})}\n className=\"h-[min(32rem,52vh)]\"\n />\n {transcriptProps?.menuHeader ? (\n <div className=\"mt-1 border-t border-border pt-1\">\n {transcriptProps.menuHeader}\n </div>\n ) : null}\n </div>\n );\n const compactTranscriptProps = compact\n ? {\n ...transcriptProps,\n menuContainer: menuHost,\n menuHeader: compactMenuHeader,\n showMenu: menuHost !== null && transcriptProps?.showMenu !== false,\n }\n : transcriptProps;\n\n return (\n <div\n className={cn(\n \"flex h-full min-h-0 w-full max-w-full flex-col overflow-hidden bg-background text-sm\",\n compact\n ? \"@container rounded-none border-0 shadow-none\"\n : \"rounded-xl border border-border shadow-sm\",\n className,\n )}\n >\n {compact ? (\n <CompactSessionInspectorToolbar\n tabs={compactTabs}\n activeTab={tab}\n onSelect={(next) => setTab(next as SessionInspectorTab)}\n onMenuHost={setMenuHost}\n {...(compactMetadata ? { metadata: compactMetadata } : {})}\n {...(toolbarActions ? { toolbarActions } : {})}\n />\n ) : (\n <>\n <SessionInspectorHeader session={hierarchy.current} />\n <div\n role=\"toolbar\"\n aria-label=\"Session content controls\"\n className=\"flex shrink-0 justify-start border-b border-border px-density-2 py-density-2\"\n >\n <SessionHierarchyPicker\n collection={collection}\n state={hierarchy}\n {...(renderSessionActions ? { renderSessionActions } : {})}\n />\n </div>\n <InspectorTabs tab={tab} tabs={compactTabs} onSelect={setTab} />\n </>\n )}\n <main className=\"flex min-h-0 min-w-0 flex-1 flex-col overflow-hidden\">\n {compact ? (\n <>\n <div\n className={cn(\n \"min-h-0 flex-1 overflow-hidden\",\n tab !== \"transcript\" && \"hidden\",\n )}\n >\n <SessionTranscript\n session={hierarchy.filtered}\n viewerProps={{\n ...compactTranscriptProps,\n className: transcriptClassName,\n }}\n />\n </div>\n {tab !== \"transcript\" ? (\n <div className=\"min-h-0 flex-1 overflow-auto p-density-4\">\n <SessionInspectorPanel\n tab={tab}\n detail={panelDetail}\n session={hierarchy.current}\n {...(onPlanChange ? { onPlanChange } : {})}\n {...(onResolveApproval ? { onResolveApproval } : {})}\n />\n </div>\n ) : null}\n </>\n ) : (\n <div\n className={cn(\n \"min-h-0 flex-1\",\n tab === \"transcript\"\n ? \"overflow-hidden\"\n : \"overflow-auto p-density-4\",\n )}\n >\n {tab === \"transcript\" ? (\n <SessionTranscript\n session={hierarchy.filtered}\n viewerProps={{\n ...transcriptProps,\n className: transcriptClassName,\n }}\n />\n ) : (\n <SessionInspectorPanel\n tab={tab}\n detail={panelDetail}\n session={hierarchy.current}\n {...(onPlanChange ? { onPlanChange } : {})}\n {...(onResolveApproval ? { onResolveApproval } : {})}\n />\n )}\n </div>\n )}\n </main>\n {composer ? <PinnedComposer>{composer}</PinnedComposer> : null}\n </div>\n );\n}\n\nfunction singleSessionCollection(\n session: UnifiedSessionInput,\n): SessionCollectionInput {\n const id = session.id || \"session\";\n return {\n kind: \"session-collection\",\n id,\n currentSessionId: id,\n sessions: [{ id, session }],\n };\n}\n\nfunction asUnifiedSession(\n session: SessionInput,\n): UnifiedSessionInput | undefined {\n if (typeof session !== \"object\" || session === null || Array.isArray(session))\n return undefined;\n return session as UnifiedSessionInput;\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,7 @@ const jsxRuntime = require("react/jsx-runtime");
|
|
|
4
4
|
const react = require("react");
|
|
5
5
|
const utils = require("../../lib/utils.cjs");
|
|
6
6
|
const SessionInspector_panels = require("./SessionInspector.panels.cjs");
|
|
7
|
+
const SessionInspector_composerSlot = require("./SessionInspector.composer-slot.cjs");
|
|
7
8
|
const SessionInspector_compact = require("./SessionInspector.compact.cjs");
|
|
8
9
|
const SessionInspector_tabs = require("./SessionInspector.tabs.cjs");
|
|
9
10
|
const SessionInspector_tabs_model = require("./SessionInspector.tabs.model.cjs");
|
|
@@ -58,56 +59,54 @@ function LegacySessionInspector({
|
|
|
58
59
|
...toolbarActions ? { toolbarActions } : {}
|
|
59
60
|
}
|
|
60
61
|
) : /* @__PURE__ */ jsxRuntime.jsx(SessionInspector_tabs.InspectorTabs, { tab, tabs: compactTabs, onSelect: setTab }),
|
|
61
|
-
/* @__PURE__ */ jsxRuntime.
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
"div",
|
|
65
|
-
{
|
|
66
|
-
className: utils.cn(
|
|
67
|
-
"min-h-0 flex-1 overflow-hidden",
|
|
68
|
-
tab !== "transcript" && "hidden"
|
|
69
|
-
),
|
|
70
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
71
|
-
SessionViewer.SessionViewer,
|
|
72
|
-
{
|
|
73
|
-
session,
|
|
74
|
-
scrollable: true,
|
|
75
|
-
showRowMetadata: true,
|
|
76
|
-
...viewerProps,
|
|
77
|
-
className: transcriptClassName,
|
|
78
|
-
showHeader: false,
|
|
79
|
-
showContextMeter: false
|
|
80
|
-
}
|
|
81
|
-
)
|
|
82
|
-
}
|
|
83
|
-
),
|
|
84
|
-
tab !== "transcript" ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-h-0 flex-1 overflow-auto p-density-4", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
85
|
-
SessionInspector_panels.SessionInspectorPanel,
|
|
86
|
-
{
|
|
87
|
-
tab,
|
|
88
|
-
detail: void 0,
|
|
89
|
-
session
|
|
90
|
-
}
|
|
91
|
-
) }) : null
|
|
92
|
-
] }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-h-0 flex-1 overflow-hidden", children: tab === "transcript" ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
93
|
-
SessionViewer.SessionViewer,
|
|
62
|
+
/* @__PURE__ */ jsxRuntime.jsx("main", { className: "flex min-h-0 min-w-0 flex-1 flex-col overflow-hidden", children: compact ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
63
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
64
|
+
"div",
|
|
94
65
|
{
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
66
|
+
className: utils.cn(
|
|
67
|
+
"min-h-0 flex-1 overflow-hidden",
|
|
68
|
+
tab !== "transcript" && "hidden"
|
|
69
|
+
),
|
|
70
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
71
|
+
SessionViewer.SessionViewer,
|
|
72
|
+
{
|
|
73
|
+
session,
|
|
74
|
+
scrollable: true,
|
|
75
|
+
showRowMetadata: true,
|
|
76
|
+
...viewerProps,
|
|
77
|
+
className: transcriptClassName,
|
|
78
|
+
showHeader: false,
|
|
79
|
+
showContextMeter: false
|
|
80
|
+
}
|
|
81
|
+
)
|
|
100
82
|
}
|
|
101
|
-
)
|
|
83
|
+
),
|
|
84
|
+
tab !== "transcript" ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-h-0 flex-1 overflow-auto p-density-4", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
102
85
|
SessionInspector_panels.SessionInspectorPanel,
|
|
103
86
|
{
|
|
104
87
|
tab,
|
|
105
88
|
detail: void 0,
|
|
106
89
|
session
|
|
107
90
|
}
|
|
108
|
-
) })
|
|
109
|
-
|
|
110
|
-
|
|
91
|
+
) }) : null
|
|
92
|
+
] }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-h-0 flex-1 overflow-hidden", children: tab === "transcript" ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
93
|
+
SessionViewer.SessionViewer,
|
|
94
|
+
{
|
|
95
|
+
session,
|
|
96
|
+
scrollable: true,
|
|
97
|
+
showRowMetadata: true,
|
|
98
|
+
...transcriptProps,
|
|
99
|
+
className: transcriptClassName
|
|
100
|
+
}
|
|
101
|
+
) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
102
|
+
SessionInspector_panels.SessionInspectorPanel,
|
|
103
|
+
{
|
|
104
|
+
tab,
|
|
105
|
+
detail: void 0,
|
|
106
|
+
session
|
|
107
|
+
}
|
|
108
|
+
) }) }),
|
|
109
|
+
composer ? /* @__PURE__ */ jsxRuntime.jsx(SessionInspector_composerSlot.PinnedComposer, { children: composer }) : null
|
|
111
110
|
]
|
|
112
111
|
}
|
|
113
112
|
);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SessionInspector.legacy.cjs","sources":["../../../src/data/ai/SessionInspector.legacy.tsx"],"sourcesContent":["import { useState, type ReactNode } from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { SessionInspectorPanel } from \"./SessionInspector.panels\";\nimport { CompactSessionInspectorToolbar } from \"./SessionInspector.compact\";\nimport { InspectorTabs } from \"./SessionInspector.tabs\";\nimport {\n inspectorTabs,\n type SessionInspectorTab,\n} from \"./SessionInspector.tabs.model\";\nimport { useInspectorTab } from \"./SessionInspector.tab-state\";\nimport { SessionViewer, type SessionViewerProps } from \"./SessionViewer\";\nimport {\n getSessionMetadata,\n type SessionInput,\n type SessionMetadataSummary,\n} from \"./SessionViewer.model\";\n\n/** The inspector for a non-unified session (legacy entries or raw log text):\n * only the transcript carries content, so it has no hierarchy or facets. */\nexport function LegacySessionInspector({\n session,\n className,\n defaultTab = \"transcript\",\n tab: controlledTab,\n onTabChange,\n transcriptProps,\n composer,\n layout = \"default\",\n metadata,\n toolbarActions,\n}: {\n session: SessionInput;\n className?: string;\n defaultTab?: SessionInspectorTab;\n tab?: SessionInspectorTab;\n onTabChange?: (tab: SessionInspectorTab) => void;\n transcriptProps?: Omit<SessionViewerProps, \"session\">;\n composer?: ReactNode;\n layout?: \"default\" | \"compact\";\n metadata?: SessionMetadataSummary;\n toolbarActions?: ReactNode;\n}) {\n const compact = layout === \"compact\";\n const [menuHost, setMenuHost] = useState<HTMLSpanElement | null>(null);\n const [tab, setTab] = useInspectorTab(\n defaultTab,\n false,\n controlledTab,\n onTabChange,\n );\n const transcriptClassName = cn(\"h-full\", transcriptProps?.className);\n const compactTabs = inspectorTabs(false);\n const compactMetadata = metadata ?? getSessionMetadata(session);\n const viewerProps = compact\n ? {\n ...transcriptProps,\n menuContainer: menuHost,\n showMenu: menuHost !== null && transcriptProps?.showMenu !== false,\n }\n : transcriptProps;\n return (\n <div\n className={cn(\n \"flex h-full min-h-0 w-full max-w-full flex-col overflow-hidden bg-background text-sm\",\n compact\n ? \"@container rounded-none border-0 shadow-none\"\n : \"rounded-xl border border-border shadow-sm\",\n className,\n )}\n >\n {compact ? (\n <CompactSessionInspectorToolbar\n tabs={compactTabs}\n activeTab={tab}\n onSelect={(next) => setTab(next as SessionInspectorTab)}\n onMenuHost={setMenuHost}\n {...(compactMetadata ? { metadata: compactMetadata } : {})}\n {...(toolbarActions ? { toolbarActions } : {})}\n />\n ) : (\n <InspectorTabs tab={tab} tabs={compactTabs} onSelect={setTab} />\n )}\n <
|
|
1
|
+
{"version":3,"file":"SessionInspector.legacy.cjs","sources":["../../../src/data/ai/SessionInspector.legacy.tsx"],"sourcesContent":["import { useState, type ReactNode } from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { SessionInspectorPanel } from \"./SessionInspector.panels\";\nimport { PinnedComposer } from \"./SessionInspector.composer-slot\";\nimport { CompactSessionInspectorToolbar } from \"./SessionInspector.compact\";\nimport { InspectorTabs } from \"./SessionInspector.tabs\";\nimport {\n inspectorTabs,\n type SessionInspectorTab,\n} from \"./SessionInspector.tabs.model\";\nimport { useInspectorTab } from \"./SessionInspector.tab-state\";\nimport { SessionViewer, type SessionViewerProps } from \"./SessionViewer\";\nimport {\n getSessionMetadata,\n type SessionInput,\n type SessionMetadataSummary,\n} from \"./SessionViewer.model\";\n\n/** The inspector for a non-unified session (legacy entries or raw log text):\n * only the transcript carries content, so it has no hierarchy or facets. */\nexport function LegacySessionInspector({\n session,\n className,\n defaultTab = \"transcript\",\n tab: controlledTab,\n onTabChange,\n transcriptProps,\n composer,\n layout = \"default\",\n metadata,\n toolbarActions,\n}: {\n session: SessionInput;\n className?: string;\n defaultTab?: SessionInspectorTab;\n tab?: SessionInspectorTab;\n onTabChange?: (tab: SessionInspectorTab) => void;\n transcriptProps?: Omit<SessionViewerProps, \"session\">;\n composer?: ReactNode;\n layout?: \"default\" | \"compact\";\n metadata?: SessionMetadataSummary;\n toolbarActions?: ReactNode;\n}) {\n const compact = layout === \"compact\";\n const [menuHost, setMenuHost] = useState<HTMLSpanElement | null>(null);\n const [tab, setTab] = useInspectorTab(\n defaultTab,\n false,\n controlledTab,\n onTabChange,\n );\n const transcriptClassName = cn(\"h-full\", transcriptProps?.className);\n const compactTabs = inspectorTabs(false);\n const compactMetadata = metadata ?? getSessionMetadata(session);\n const viewerProps = compact\n ? {\n ...transcriptProps,\n menuContainer: menuHost,\n showMenu: menuHost !== null && transcriptProps?.showMenu !== false,\n }\n : transcriptProps;\n return (\n <div\n className={cn(\n \"flex h-full min-h-0 w-full max-w-full flex-col overflow-hidden bg-background text-sm\",\n compact\n ? \"@container rounded-none border-0 shadow-none\"\n : \"rounded-xl border border-border shadow-sm\",\n className,\n )}\n >\n {compact ? (\n <CompactSessionInspectorToolbar\n tabs={compactTabs}\n activeTab={tab}\n onSelect={(next) => setTab(next as SessionInspectorTab)}\n onMenuHost={setMenuHost}\n {...(compactMetadata ? { metadata: compactMetadata } : {})}\n {...(toolbarActions ? { toolbarActions } : {})}\n />\n ) : (\n <InspectorTabs tab={tab} tabs={compactTabs} onSelect={setTab} />\n )}\n <main className=\"flex min-h-0 min-w-0 flex-1 flex-col overflow-hidden\">\n {compact ? (\n <>\n <div\n className={cn(\n \"min-h-0 flex-1 overflow-hidden\",\n tab !== \"transcript\" && \"hidden\",\n )}\n >\n <SessionViewer\n session={session}\n scrollable\n showRowMetadata\n {...viewerProps}\n className={transcriptClassName}\n showHeader={false}\n showContextMeter={false}\n />\n </div>\n {tab !== \"transcript\" ? (\n <div className=\"min-h-0 flex-1 overflow-auto p-density-4\">\n <SessionInspectorPanel\n tab={tab}\n detail={undefined}\n session={session}\n />\n </div>\n ) : null}\n </>\n ) : (\n <div className=\"min-h-0 flex-1 overflow-hidden\">\n {tab === \"transcript\" ? (\n <SessionViewer\n session={session}\n scrollable\n showRowMetadata\n {...transcriptProps}\n className={transcriptClassName}\n />\n ) : (\n <SessionInspectorPanel\n tab={tab}\n detail={undefined}\n session={session}\n />\n )}\n </div>\n )}\n </main>\n {composer ? <PinnedComposer>{composer}</PinnedComposer> : null}\n </div>\n );\n}\n"],"names":["useState","useInspectorTab","cn","inspectorTabs","getSessionMetadata","jsxs","jsx","CompactSessionInspectorToolbar","InspectorTabs","Fragment","SessionViewer","SessionInspectorPanel","PinnedComposer"],"mappings":";;;;;;;;;;;;;AAoBO,SAAS,uBAAuB;AAAA,EACrC;AAAA,EACA;AAAA,EACA,aAAa;AAAA,EACb,KAAK;AAAA,EACL;AAAA,EACA;AAAA,EACA;AAAA,EACA,SAAS;AAAA,EACT;AAAA,EACA;AACF,GAWG;AACD,QAAM,UAAU,WAAW;AAC3B,QAAM,CAAC,UAAU,WAAW,IAAIA,MAAAA,SAAiC,IAAI;AACrE,QAAM,CAAC,KAAK,MAAM,IAAIC,0BAAAA;AAAAA,IACpB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEF,QAAM,sBAAsBC,MAAAA,GAAG,UAAU,mDAAiB,SAAS;AACnE,QAAM,cAAcC,4BAAAA,cAAc,KAAK;AACvC,QAAM,kBAAkB,YAAYC,oBAAAA,mBAAmB,OAAO;AAC9D,QAAM,cAAc,UAChB;AAAA,IACE,GAAG;AAAA,IACH,eAAe;AAAA,IACf,UAAU,aAAa,SAAQ,mDAAiB,cAAa;AAAA,EAAA,IAE/D;AACJ,SACEC,2BAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWH,MAAAA;AAAAA,QACT;AAAA,QACA,UACI,iDACA;AAAA,QACJ;AAAA,MAAA;AAAA,MAGD,UAAA;AAAA,QAAA,UACCI,2BAAAA;AAAAA,UAACC,yBAAAA;AAAAA,UAAA;AAAA,YACC,MAAM;AAAA,YACN,WAAW;AAAA,YACX,UAAU,CAAC,SAAS,OAAO,IAA2B;AAAA,YACtD,YAAY;AAAA,YACX,GAAI,kBAAkB,EAAE,UAAU,gBAAA,IAAoB,CAAA;AAAA,YACtD,GAAI,iBAAiB,EAAE,mBAAmB,CAAA;AAAA,UAAC;AAAA,QAAA,IAG9CD,2BAAAA,IAACE,sBAAAA,eAAA,EAAc,KAAU,MAAM,aAAa,UAAU,QAAQ;AAAA,QAEhEF,+BAAC,QAAA,EAAK,WAAU,wDACb,oBACCD,2BAAAA,KAAAI,qBAAA,EACE,UAAA;AAAA,UAAAH,2BAAAA;AAAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAWJ,MAAAA;AAAAA,gBACT;AAAA,gBACA,QAAQ,gBAAgB;AAAA,cAAA;AAAA,cAG1B,UAAAI,2BAAAA;AAAAA,gBAACI,cAAAA;AAAAA,gBAAA;AAAA,kBACC;AAAA,kBACA,YAAU;AAAA,kBACV,iBAAe;AAAA,kBACd,GAAG;AAAA,kBACJ,WAAW;AAAA,kBACX,YAAY;AAAA,kBACZ,kBAAkB;AAAA,gBAAA;AAAA,cAAA;AAAA,YACpB;AAAA,UAAA;AAAA,UAED,QAAQ,eACPJ,+BAAC,OAAA,EAAI,WAAU,4CACb,UAAAA,2BAAAA;AAAAA,YAACK,wBAAAA;AAAAA,YAAA;AAAA,cACC;AAAA,cACA,QAAQ;AAAA,cACR;AAAA,YAAA;AAAA,UAAA,GAEJ,IACE;AAAA,QAAA,GACN,IAEAL,+BAAC,OAAA,EAAI,WAAU,kCACZ,kBAAQ,eACPA,2BAAAA;AAAAA,UAACI,cAAAA;AAAAA,UAAA;AAAA,YACC;AAAA,YACA,YAAU;AAAA,YACV,iBAAe;AAAA,YACd,GAAG;AAAA,YACJ,WAAW;AAAA,UAAA;AAAA,QAAA,IAGbJ,2BAAAA;AAAAA,UAACK,wBAAAA;AAAAA,UAAA;AAAA,YACC;AAAA,YACA,QAAQ;AAAA,YACR;AAAA,UAAA;AAAA,QAAA,GAGN,EAAA,CAEJ;AAAA,QACC,WAAWL,2BAAAA,IAACM,8BAAAA,gBAAA,EAAgB,UAAA,SAAA,CAAS,IAAoB;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGhE;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SessionInspector.legacy.d.ts","sourceRoot":"","sources":["../../../src/data/ai/SessionInspector.legacy.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"SessionInspector.legacy.d.ts","sourceRoot":"","sources":["../../../src/data/ai/SessionInspector.legacy.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAMjD,OAAO,EAEL,KAAK,mBAAmB,EACzB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EAAiB,KAAK,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,sBAAsB,EAC5B,MAAM,uBAAuB,CAAC;AAE/B;6EAC6E;AAC7E,wBAAgB,sBAAsB,CAAC,EACrC,OAAO,EACP,SAAS,EACT,UAAyB,EACzB,GAAG,EAAE,aAAa,EAClB,WAAW,EACX,eAAe,EACf,QAAQ,EACR,MAAkB,EAClB,QAAQ,EACR,cAAc,GACf,EAAE;IACD,OAAO,EAAE,YAAY,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,mBAAmB,CAAC;IACjC,GAAG,CAAC,EAAE,mBAAmB,CAAC;IAC1B,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,mBAAmB,KAAK,IAAI,CAAC;IACjD,eAAe,CAAC,EAAE,IAAI,CAAC,kBAAkB,EAAE,SAAS,CAAC,CAAC;IACtD,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,MAAM,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAC/B,QAAQ,CAAC,EAAE,sBAAsB,CAAC;IAClC,cAAc,CAAC,EAAE,SAAS,CAAC;CAC5B,+BA6FA"}
|
|
@@ -2,6 +2,7 @@ import { jsxs, jsx, Fragment } from "react/jsx-runtime";
|
|
|
2
2
|
import { useState } from "react";
|
|
3
3
|
import { cn } from "../../lib/utils.js";
|
|
4
4
|
import { SessionInspectorPanel } from "./SessionInspector.panels.js";
|
|
5
|
+
import { PinnedComposer } from "./SessionInspector.composer-slot.js";
|
|
5
6
|
import { CompactSessionInspectorToolbar } from "./SessionInspector.compact.js";
|
|
6
7
|
import { InspectorTabs } from "./SessionInspector.tabs.js";
|
|
7
8
|
import { inspectorTabs } from "./SessionInspector.tabs.model.js";
|
|
@@ -56,56 +57,54 @@ function LegacySessionInspector({
|
|
|
56
57
|
...toolbarActions ? { toolbarActions } : {}
|
|
57
58
|
}
|
|
58
59
|
) : /* @__PURE__ */ jsx(InspectorTabs, { tab, tabs: compactTabs, onSelect: setTab }),
|
|
59
|
-
/* @__PURE__ */
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
"div",
|
|
63
|
-
{
|
|
64
|
-
className: cn(
|
|
65
|
-
"min-h-0 flex-1 overflow-hidden",
|
|
66
|
-
tab !== "transcript" && "hidden"
|
|
67
|
-
),
|
|
68
|
-
children: /* @__PURE__ */ jsx(
|
|
69
|
-
SessionViewer,
|
|
70
|
-
{
|
|
71
|
-
session,
|
|
72
|
-
scrollable: true,
|
|
73
|
-
showRowMetadata: true,
|
|
74
|
-
...viewerProps,
|
|
75
|
-
className: transcriptClassName,
|
|
76
|
-
showHeader: false,
|
|
77
|
-
showContextMeter: false
|
|
78
|
-
}
|
|
79
|
-
)
|
|
80
|
-
}
|
|
81
|
-
),
|
|
82
|
-
tab !== "transcript" ? /* @__PURE__ */ jsx("div", { className: "min-h-0 flex-1 overflow-auto p-density-4", children: /* @__PURE__ */ jsx(
|
|
83
|
-
SessionInspectorPanel,
|
|
84
|
-
{
|
|
85
|
-
tab,
|
|
86
|
-
detail: void 0,
|
|
87
|
-
session
|
|
88
|
-
}
|
|
89
|
-
) }) : null
|
|
90
|
-
] }) : /* @__PURE__ */ jsx("div", { className: "min-h-0 flex-1 overflow-hidden", children: tab === "transcript" ? /* @__PURE__ */ jsx(
|
|
91
|
-
SessionViewer,
|
|
60
|
+
/* @__PURE__ */ jsx("main", { className: "flex min-h-0 min-w-0 flex-1 flex-col overflow-hidden", children: compact ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
61
|
+
/* @__PURE__ */ jsx(
|
|
62
|
+
"div",
|
|
92
63
|
{
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
64
|
+
className: cn(
|
|
65
|
+
"min-h-0 flex-1 overflow-hidden",
|
|
66
|
+
tab !== "transcript" && "hidden"
|
|
67
|
+
),
|
|
68
|
+
children: /* @__PURE__ */ jsx(
|
|
69
|
+
SessionViewer,
|
|
70
|
+
{
|
|
71
|
+
session,
|
|
72
|
+
scrollable: true,
|
|
73
|
+
showRowMetadata: true,
|
|
74
|
+
...viewerProps,
|
|
75
|
+
className: transcriptClassName,
|
|
76
|
+
showHeader: false,
|
|
77
|
+
showContextMeter: false
|
|
78
|
+
}
|
|
79
|
+
)
|
|
98
80
|
}
|
|
99
|
-
)
|
|
81
|
+
),
|
|
82
|
+
tab !== "transcript" ? /* @__PURE__ */ jsx("div", { className: "min-h-0 flex-1 overflow-auto p-density-4", children: /* @__PURE__ */ jsx(
|
|
100
83
|
SessionInspectorPanel,
|
|
101
84
|
{
|
|
102
85
|
tab,
|
|
103
86
|
detail: void 0,
|
|
104
87
|
session
|
|
105
88
|
}
|
|
106
|
-
) })
|
|
107
|
-
|
|
108
|
-
|
|
89
|
+
) }) : null
|
|
90
|
+
] }) : /* @__PURE__ */ jsx("div", { className: "min-h-0 flex-1 overflow-hidden", children: tab === "transcript" ? /* @__PURE__ */ jsx(
|
|
91
|
+
SessionViewer,
|
|
92
|
+
{
|
|
93
|
+
session,
|
|
94
|
+
scrollable: true,
|
|
95
|
+
showRowMetadata: true,
|
|
96
|
+
...transcriptProps,
|
|
97
|
+
className: transcriptClassName
|
|
98
|
+
}
|
|
99
|
+
) : /* @__PURE__ */ jsx(
|
|
100
|
+
SessionInspectorPanel,
|
|
101
|
+
{
|
|
102
|
+
tab,
|
|
103
|
+
detail: void 0,
|
|
104
|
+
session
|
|
105
|
+
}
|
|
106
|
+
) }) }),
|
|
107
|
+
composer ? /* @__PURE__ */ jsx(PinnedComposer, { children: composer }) : null
|
|
109
108
|
]
|
|
110
109
|
}
|
|
111
110
|
);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SessionInspector.legacy.js","sources":["../../../src/data/ai/SessionInspector.legacy.tsx"],"sourcesContent":["import { useState, type ReactNode } from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { SessionInspectorPanel } from \"./SessionInspector.panels\";\nimport { CompactSessionInspectorToolbar } from \"./SessionInspector.compact\";\nimport { InspectorTabs } from \"./SessionInspector.tabs\";\nimport {\n inspectorTabs,\n type SessionInspectorTab,\n} from \"./SessionInspector.tabs.model\";\nimport { useInspectorTab } from \"./SessionInspector.tab-state\";\nimport { SessionViewer, type SessionViewerProps } from \"./SessionViewer\";\nimport {\n getSessionMetadata,\n type SessionInput,\n type SessionMetadataSummary,\n} from \"./SessionViewer.model\";\n\n/** The inspector for a non-unified session (legacy entries or raw log text):\n * only the transcript carries content, so it has no hierarchy or facets. */\nexport function LegacySessionInspector({\n session,\n className,\n defaultTab = \"transcript\",\n tab: controlledTab,\n onTabChange,\n transcriptProps,\n composer,\n layout = \"default\",\n metadata,\n toolbarActions,\n}: {\n session: SessionInput;\n className?: string;\n defaultTab?: SessionInspectorTab;\n tab?: SessionInspectorTab;\n onTabChange?: (tab: SessionInspectorTab) => void;\n transcriptProps?: Omit<SessionViewerProps, \"session\">;\n composer?: ReactNode;\n layout?: \"default\" | \"compact\";\n metadata?: SessionMetadataSummary;\n toolbarActions?: ReactNode;\n}) {\n const compact = layout === \"compact\";\n const [menuHost, setMenuHost] = useState<HTMLSpanElement | null>(null);\n const [tab, setTab] = useInspectorTab(\n defaultTab,\n false,\n controlledTab,\n onTabChange,\n );\n const transcriptClassName = cn(\"h-full\", transcriptProps?.className);\n const compactTabs = inspectorTabs(false);\n const compactMetadata = metadata ?? getSessionMetadata(session);\n const viewerProps = compact\n ? {\n ...transcriptProps,\n menuContainer: menuHost,\n showMenu: menuHost !== null && transcriptProps?.showMenu !== false,\n }\n : transcriptProps;\n return (\n <div\n className={cn(\n \"flex h-full min-h-0 w-full max-w-full flex-col overflow-hidden bg-background text-sm\",\n compact\n ? \"@container rounded-none border-0 shadow-none\"\n : \"rounded-xl border border-border shadow-sm\",\n className,\n )}\n >\n {compact ? (\n <CompactSessionInspectorToolbar\n tabs={compactTabs}\n activeTab={tab}\n onSelect={(next) => setTab(next as SessionInspectorTab)}\n onMenuHost={setMenuHost}\n {...(compactMetadata ? { metadata: compactMetadata } : {})}\n {...(toolbarActions ? { toolbarActions } : {})}\n />\n ) : (\n <InspectorTabs tab={tab} tabs={compactTabs} onSelect={setTab} />\n )}\n <
|
|
1
|
+
{"version":3,"file":"SessionInspector.legacy.js","sources":["../../../src/data/ai/SessionInspector.legacy.tsx"],"sourcesContent":["import { useState, type ReactNode } from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { SessionInspectorPanel } from \"./SessionInspector.panels\";\nimport { PinnedComposer } from \"./SessionInspector.composer-slot\";\nimport { CompactSessionInspectorToolbar } from \"./SessionInspector.compact\";\nimport { InspectorTabs } from \"./SessionInspector.tabs\";\nimport {\n inspectorTabs,\n type SessionInspectorTab,\n} from \"./SessionInspector.tabs.model\";\nimport { useInspectorTab } from \"./SessionInspector.tab-state\";\nimport { SessionViewer, type SessionViewerProps } from \"./SessionViewer\";\nimport {\n getSessionMetadata,\n type SessionInput,\n type SessionMetadataSummary,\n} from \"./SessionViewer.model\";\n\n/** The inspector for a non-unified session (legacy entries or raw log text):\n * only the transcript carries content, so it has no hierarchy or facets. */\nexport function LegacySessionInspector({\n session,\n className,\n defaultTab = \"transcript\",\n tab: controlledTab,\n onTabChange,\n transcriptProps,\n composer,\n layout = \"default\",\n metadata,\n toolbarActions,\n}: {\n session: SessionInput;\n className?: string;\n defaultTab?: SessionInspectorTab;\n tab?: SessionInspectorTab;\n onTabChange?: (tab: SessionInspectorTab) => void;\n transcriptProps?: Omit<SessionViewerProps, \"session\">;\n composer?: ReactNode;\n layout?: \"default\" | \"compact\";\n metadata?: SessionMetadataSummary;\n toolbarActions?: ReactNode;\n}) {\n const compact = layout === \"compact\";\n const [menuHost, setMenuHost] = useState<HTMLSpanElement | null>(null);\n const [tab, setTab] = useInspectorTab(\n defaultTab,\n false,\n controlledTab,\n onTabChange,\n );\n const transcriptClassName = cn(\"h-full\", transcriptProps?.className);\n const compactTabs = inspectorTabs(false);\n const compactMetadata = metadata ?? getSessionMetadata(session);\n const viewerProps = compact\n ? {\n ...transcriptProps,\n menuContainer: menuHost,\n showMenu: menuHost !== null && transcriptProps?.showMenu !== false,\n }\n : transcriptProps;\n return (\n <div\n className={cn(\n \"flex h-full min-h-0 w-full max-w-full flex-col overflow-hidden bg-background text-sm\",\n compact\n ? \"@container rounded-none border-0 shadow-none\"\n : \"rounded-xl border border-border shadow-sm\",\n className,\n )}\n >\n {compact ? (\n <CompactSessionInspectorToolbar\n tabs={compactTabs}\n activeTab={tab}\n onSelect={(next) => setTab(next as SessionInspectorTab)}\n onMenuHost={setMenuHost}\n {...(compactMetadata ? { metadata: compactMetadata } : {})}\n {...(toolbarActions ? { toolbarActions } : {})}\n />\n ) : (\n <InspectorTabs tab={tab} tabs={compactTabs} onSelect={setTab} />\n )}\n <main className=\"flex min-h-0 min-w-0 flex-1 flex-col overflow-hidden\">\n {compact ? (\n <>\n <div\n className={cn(\n \"min-h-0 flex-1 overflow-hidden\",\n tab !== \"transcript\" && \"hidden\",\n )}\n >\n <SessionViewer\n session={session}\n scrollable\n showRowMetadata\n {...viewerProps}\n className={transcriptClassName}\n showHeader={false}\n showContextMeter={false}\n />\n </div>\n {tab !== \"transcript\" ? (\n <div className=\"min-h-0 flex-1 overflow-auto p-density-4\">\n <SessionInspectorPanel\n tab={tab}\n detail={undefined}\n session={session}\n />\n </div>\n ) : null}\n </>\n ) : (\n <div className=\"min-h-0 flex-1 overflow-hidden\">\n {tab === \"transcript\" ? (\n <SessionViewer\n session={session}\n scrollable\n showRowMetadata\n {...transcriptProps}\n className={transcriptClassName}\n />\n ) : (\n <SessionInspectorPanel\n tab={tab}\n detail={undefined}\n session={session}\n />\n )}\n </div>\n )}\n </main>\n {composer ? <PinnedComposer>{composer}</PinnedComposer> : null}\n </div>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;;;AAoBO,SAAS,uBAAuB;AAAA,EACrC;AAAA,EACA;AAAA,EACA,aAAa;AAAA,EACb,KAAK;AAAA,EACL;AAAA,EACA;AAAA,EACA;AAAA,EACA,SAAS;AAAA,EACT;AAAA,EACA;AACF,GAWG;AACD,QAAM,UAAU,WAAW;AAC3B,QAAM,CAAC,UAAU,WAAW,IAAI,SAAiC,IAAI;AACrE,QAAM,CAAC,KAAK,MAAM,IAAI;AAAA,IACpB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEF,QAAM,sBAAsB,GAAG,UAAU,mDAAiB,SAAS;AACnE,QAAM,cAAc,cAAc,KAAK;AACvC,QAAM,kBAAkB,YAAY,mBAAmB,OAAO;AAC9D,QAAM,cAAc,UAChB;AAAA,IACE,GAAG;AAAA,IACH,eAAe;AAAA,IACf,UAAU,aAAa,SAAQ,mDAAiB,cAAa;AAAA,EAAA,IAE/D;AACJ,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA,UACI,iDACA;AAAA,QACJ;AAAA,MAAA;AAAA,MAGD,UAAA;AAAA,QAAA,UACC;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAM;AAAA,YACN,WAAW;AAAA,YACX,UAAU,CAAC,SAAS,OAAO,IAA2B;AAAA,YACtD,YAAY;AAAA,YACX,GAAI,kBAAkB,EAAE,UAAU,gBAAA,IAAoB,CAAA;AAAA,YACtD,GAAI,iBAAiB,EAAE,mBAAmB,CAAA;AAAA,UAAC;AAAA,QAAA,IAG9C,oBAAC,eAAA,EAAc,KAAU,MAAM,aAAa,UAAU,QAAQ;AAAA,QAEhE,oBAAC,QAAA,EAAK,WAAU,wDACb,oBACC,qBAAA,UAAA,EACE,UAAA;AAAA,UAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAW;AAAA,gBACT;AAAA,gBACA,QAAQ,gBAAgB;AAAA,cAAA;AAAA,cAG1B,UAAA;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC;AAAA,kBACA,YAAU;AAAA,kBACV,iBAAe;AAAA,kBACd,GAAG;AAAA,kBACJ,WAAW;AAAA,kBACX,YAAY;AAAA,kBACZ,kBAAkB;AAAA,gBAAA;AAAA,cAAA;AAAA,YACpB;AAAA,UAAA;AAAA,UAED,QAAQ,eACP,oBAAC,OAAA,EAAI,WAAU,4CACb,UAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC;AAAA,cACA,QAAQ;AAAA,cACR;AAAA,YAAA;AAAA,UAAA,GAEJ,IACE;AAAA,QAAA,GACN,IAEA,oBAAC,OAAA,EAAI,WAAU,kCACZ,kBAAQ,eACP;AAAA,UAAC;AAAA,UAAA;AAAA,YACC;AAAA,YACA,YAAU;AAAA,YACV,iBAAe;AAAA,YACd,GAAG;AAAA,YACJ,WAAW;AAAA,UAAA;AAAA,QAAA,IAGb;AAAA,UAAC;AAAA,UAAA;AAAA,YACC;AAAA,YACA,QAAQ;AAAA,YACR;AAAA,UAAA;AAAA,QAAA,GAGN,EAAA,CAEJ;AAAA,QACC,WAAW,oBAAC,gBAAA,EAAgB,UAAA,SAAA,CAAS,IAAoB;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGhE;"}
|
|
@@ -2,10 +2,12 @@
|
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
const jsxRuntime = require("react/jsx-runtime");
|
|
4
4
|
const utils = require("../../lib/utils.cjs");
|
|
5
|
+
const SessionInspector_composerSlot = require("./SessionInspector.composer-slot.cjs");
|
|
5
6
|
function RemoteSessionStatus({
|
|
6
7
|
loading,
|
|
7
8
|
error,
|
|
8
9
|
className,
|
|
10
|
+
composer,
|
|
9
11
|
children
|
|
10
12
|
}) {
|
|
11
13
|
const alert = error ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -22,21 +24,24 @@ function RemoteSessionStatus({
|
|
|
22
24
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-h-0 flex-1", children })
|
|
23
25
|
] });
|
|
24
26
|
}
|
|
25
|
-
return /* @__PURE__ */ jsxRuntime.
|
|
27
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
26
28
|
"div",
|
|
27
29
|
{
|
|
28
30
|
"aria-busy": loading,
|
|
29
31
|
className: utils.cn(
|
|
30
|
-
"flex h-full min-h-0 w-full flex-col
|
|
32
|
+
"flex h-full min-h-0 w-full flex-col overflow-hidden rounded-xl border border-border bg-background text-sm shadow-sm",
|
|
31
33
|
className
|
|
32
34
|
),
|
|
33
|
-
children:
|
|
34
|
-
/* @__PURE__ */ jsxRuntime.jsx("
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
35
|
+
children: [
|
|
36
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex min-h-0 flex-1 flex-col gap-density-3 overflow-y-auto p-density-4", children: alert ?? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
37
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground", children: "Loading session…" }),
|
|
38
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-control-h w-1/3 animate-pulse rounded-md bg-muted" }),
|
|
39
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-4 w-full animate-pulse rounded bg-muted" }),
|
|
40
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-4 w-5/6 animate-pulse rounded bg-muted" }),
|
|
41
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-4 w-2/3 animate-pulse rounded bg-muted" })
|
|
42
|
+
] }) }),
|
|
43
|
+
composer ? /* @__PURE__ */ jsxRuntime.jsx(SessionInspector_composerSlot.PinnedComposer, { children: composer }) : null
|
|
44
|
+
]
|
|
40
45
|
}
|
|
41
46
|
);
|
|
42
47
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SessionInspector.remote-view.cjs","sources":["../../../src/data/ai/SessionInspector.remote-view.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { cn } from \"../../lib/utils\";\n\n/** Loading and error chrome for a SessionInspector fed from a URL. With\n * `children` (a session already loaded) the error sits above it; without,\n * it replaces the inspector: a skeleton while loading, the alert on failure. */\nexport function RemoteSessionStatus({\n loading,\n error,\n className,\n children,\n}: {\n loading: boolean;\n error?: string;\n className?: string;\n children?: ReactNode;\n}) {\n const alert = error ? (\n <div\n role=\"alert\"\n className=\"shrink-0 whitespace-pre-wrap break-words rounded-md border border-destructive/40 bg-destructive/5 px-density-3 py-density-2 text-xs text-destructive\"\n >\n {error}\n </div>\n ) : null;\n if (children) {\n return (\n <div className={cn(\"flex h-full min-h-0 w-full flex-col gap-density-2\", className)}>\n {alert}\n <div className=\"min-h-0 flex-1\">{children}</div>\n </div>\n );\n }\n return (\n <div\n aria-busy={loading}\n className={cn(\n \"flex h-full min-h-0 w-full flex-col
|
|
1
|
+
{"version":3,"file":"SessionInspector.remote-view.cjs","sources":["../../../src/data/ai/SessionInspector.remote-view.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { PinnedComposer } from \"./SessionInspector.composer-slot\";\n\n/** Loading and error chrome for a SessionInspector fed from a URL. With\n * `children` (a session already loaded) the error sits above it; without,\n * it replaces the inspector: a skeleton while loading, the alert on failure.\n * The `composer` slot is rendered pinned below the status even before there is\n * a session, so the input never disappears while loading or after a failure\n * (with `children` the loaded inspector pins the composer itself). */\nexport function RemoteSessionStatus({\n loading,\n error,\n className,\n composer,\n children,\n}: {\n loading: boolean;\n error?: string;\n className?: string;\n composer?: ReactNode;\n children?: ReactNode;\n}) {\n const alert = error ? (\n <div\n role=\"alert\"\n className=\"shrink-0 whitespace-pre-wrap break-words rounded-md border border-destructive/40 bg-destructive/5 px-density-3 py-density-2 text-xs text-destructive\"\n >\n {error}\n </div>\n ) : null;\n if (children) {\n return (\n <div className={cn(\"flex h-full min-h-0 w-full flex-col gap-density-2\", className)}>\n {alert}\n <div className=\"min-h-0 flex-1\">{children}</div>\n </div>\n );\n }\n return (\n <div\n aria-busy={loading}\n className={cn(\n \"flex h-full min-h-0 w-full flex-col overflow-hidden rounded-xl border border-border bg-background text-sm shadow-sm\",\n className,\n )}\n >\n <div className=\"flex min-h-0 flex-1 flex-col gap-density-3 overflow-y-auto p-density-4\">\n {alert ?? (\n <>\n <p className=\"text-xs text-muted-foreground\">Loading session…</p>\n <div className=\"h-control-h w-1/3 animate-pulse rounded-md bg-muted\" />\n <div className=\"h-4 w-full animate-pulse rounded bg-muted\" />\n <div className=\"h-4 w-5/6 animate-pulse rounded bg-muted\" />\n <div className=\"h-4 w-2/3 animate-pulse rounded bg-muted\" />\n </>\n )}\n </div>\n {composer ? <PinnedComposer>{composer}</PinnedComposer> : null}\n </div>\n );\n}\n"],"names":["jsx","cn","jsxs","Fragment","PinnedComposer"],"mappings":";;;;;AAUO,SAAS,oBAAoB;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAMG;AACD,QAAM,QAAQ,QACZA,2BAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,WAAU;AAAA,MAET,UAAA;AAAA,IAAA;AAAA,EAAA,IAED;AACJ,MAAI,UAAU;AACZ,2CACG,OAAA,EAAI,WAAWC,MAAAA,GAAG,qDAAqD,SAAS,GAC9E,UAAA;AAAA,MAAA;AAAA,MACDD,2BAAAA,IAAC,OAAA,EAAI,WAAU,kBAAkB,SAAA,CAAS;AAAA,IAAA,GAC5C;AAAA,EAEJ;AACA,SACEE,2BAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,aAAW;AAAA,MACX,WAAWD,MAAAA;AAAAA,QACT;AAAA,QACA;AAAA,MAAA;AAAA,MAGF,UAAA;AAAA,QAAAD,+BAAC,OAAA,EAAI,WAAU,0EACZ,UAAA,SACCE,2BAAAA,KAAAC,qBAAA,EACE,UAAA;AAAA,UAAAH,2BAAAA,IAAC,KAAA,EAAE,WAAU,iCAAgC,UAAA,oBAAgB;AAAA,UAC7DA,2BAAAA,IAAC,OAAA,EAAI,WAAU,sDAAA,CAAsD;AAAA,UACrEA,2BAAAA,IAAC,OAAA,EAAI,WAAU,4CAAA,CAA4C;AAAA,UAC3DA,2BAAAA,IAAC,OAAA,EAAI,WAAU,2CAAA,CAA2C;AAAA,UAC1DA,2BAAAA,IAAC,OAAA,EAAI,WAAU,2CAAA,CAA2C;AAAA,QAAA,EAAA,CAC5D,EAAA,CAEJ;AAAA,QACC,WAAWA,2BAAAA,IAACI,8BAAAA,gBAAA,EAAgB,UAAA,SAAA,CAAS,IAAoB;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGhE;;"}
|
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
import { ReactNode } from 'react';
|
|
2
2
|
/** Loading and error chrome for a SessionInspector fed from a URL. With
|
|
3
3
|
* `children` (a session already loaded) the error sits above it; without,
|
|
4
|
-
* it replaces the inspector: a skeleton while loading, the alert on failure.
|
|
5
|
-
|
|
4
|
+
* it replaces the inspector: a skeleton while loading, the alert on failure.
|
|
5
|
+
* The `composer` slot is rendered pinned below the status even before there is
|
|
6
|
+
* a session, so the input never disappears while loading or after a failure
|
|
7
|
+
* (with `children` the loaded inspector pins the composer itself). */
|
|
8
|
+
export declare function RemoteSessionStatus({ loading, error, className, composer, children, }: {
|
|
6
9
|
loading: boolean;
|
|
7
10
|
error?: string;
|
|
8
11
|
className?: string;
|
|
12
|
+
composer?: ReactNode;
|
|
9
13
|
children?: ReactNode;
|
|
10
14
|
}): import("react").JSX.Element;
|
|
11
15
|
//# sourceMappingURL=SessionInspector.remote-view.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SessionInspector.remote-view.d.ts","sourceRoot":"","sources":["../../../src/data/ai/SessionInspector.remote-view.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"SessionInspector.remote-view.d.ts","sourceRoot":"","sources":["../../../src/data/ai/SessionInspector.remote-view.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIvC;;;;;uEAKuE;AACvE,wBAAgB,mBAAmB,CAAC,EAClC,OAAO,EACP,KAAK,EACL,SAAS,EACT,QAAQ,EACR,QAAQ,GACT,EAAE;IACD,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,+BAuCA"}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { jsxs, jsx, Fragment } from "react/jsx-runtime";
|
|
2
2
|
import { cn } from "../../lib/utils.js";
|
|
3
|
+
import { PinnedComposer } from "./SessionInspector.composer-slot.js";
|
|
3
4
|
function RemoteSessionStatus({
|
|
4
5
|
loading,
|
|
5
6
|
error,
|
|
6
7
|
className,
|
|
8
|
+
composer,
|
|
7
9
|
children
|
|
8
10
|
}) {
|
|
9
11
|
const alert = error ? /* @__PURE__ */ jsx(
|
|
@@ -20,21 +22,24 @@ function RemoteSessionStatus({
|
|
|
20
22
|
/* @__PURE__ */ jsx("div", { className: "min-h-0 flex-1", children })
|
|
21
23
|
] });
|
|
22
24
|
}
|
|
23
|
-
return /* @__PURE__ */
|
|
25
|
+
return /* @__PURE__ */ jsxs(
|
|
24
26
|
"div",
|
|
25
27
|
{
|
|
26
28
|
"aria-busy": loading,
|
|
27
29
|
className: cn(
|
|
28
|
-
"flex h-full min-h-0 w-full flex-col
|
|
30
|
+
"flex h-full min-h-0 w-full flex-col overflow-hidden rounded-xl border border-border bg-background text-sm shadow-sm",
|
|
29
31
|
className
|
|
30
32
|
),
|
|
31
|
-
children:
|
|
32
|
-
/* @__PURE__ */ jsx("
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
33
|
+
children: [
|
|
34
|
+
/* @__PURE__ */ jsx("div", { className: "flex min-h-0 flex-1 flex-col gap-density-3 overflow-y-auto p-density-4", children: alert ?? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
35
|
+
/* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground", children: "Loading session…" }),
|
|
36
|
+
/* @__PURE__ */ jsx("div", { className: "h-control-h w-1/3 animate-pulse rounded-md bg-muted" }),
|
|
37
|
+
/* @__PURE__ */ jsx("div", { className: "h-4 w-full animate-pulse rounded bg-muted" }),
|
|
38
|
+
/* @__PURE__ */ jsx("div", { className: "h-4 w-5/6 animate-pulse rounded bg-muted" }),
|
|
39
|
+
/* @__PURE__ */ jsx("div", { className: "h-4 w-2/3 animate-pulse rounded bg-muted" })
|
|
40
|
+
] }) }),
|
|
41
|
+
composer ? /* @__PURE__ */ jsx(PinnedComposer, { children: composer }) : null
|
|
42
|
+
]
|
|
38
43
|
}
|
|
39
44
|
);
|
|
40
45
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SessionInspector.remote-view.js","sources":["../../../src/data/ai/SessionInspector.remote-view.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { cn } from \"../../lib/utils\";\n\n/** Loading and error chrome for a SessionInspector fed from a URL. With\n * `children` (a session already loaded) the error sits above it; without,\n * it replaces the inspector: a skeleton while loading, the alert on failure. */\nexport function RemoteSessionStatus({\n loading,\n error,\n className,\n children,\n}: {\n loading: boolean;\n error?: string;\n className?: string;\n children?: ReactNode;\n}) {\n const alert = error ? (\n <div\n role=\"alert\"\n className=\"shrink-0 whitespace-pre-wrap break-words rounded-md border border-destructive/40 bg-destructive/5 px-density-3 py-density-2 text-xs text-destructive\"\n >\n {error}\n </div>\n ) : null;\n if (children) {\n return (\n <div className={cn(\"flex h-full min-h-0 w-full flex-col gap-density-2\", className)}>\n {alert}\n <div className=\"min-h-0 flex-1\">{children}</div>\n </div>\n );\n }\n return (\n <div\n aria-busy={loading}\n className={cn(\n \"flex h-full min-h-0 w-full flex-col
|
|
1
|
+
{"version":3,"file":"SessionInspector.remote-view.js","sources":["../../../src/data/ai/SessionInspector.remote-view.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { PinnedComposer } from \"./SessionInspector.composer-slot\";\n\n/** Loading and error chrome for a SessionInspector fed from a URL. With\n * `children` (a session already loaded) the error sits above it; without,\n * it replaces the inspector: a skeleton while loading, the alert on failure.\n * The `composer` slot is rendered pinned below the status even before there is\n * a session, so the input never disappears while loading or after a failure\n * (with `children` the loaded inspector pins the composer itself). */\nexport function RemoteSessionStatus({\n loading,\n error,\n className,\n composer,\n children,\n}: {\n loading: boolean;\n error?: string;\n className?: string;\n composer?: ReactNode;\n children?: ReactNode;\n}) {\n const alert = error ? (\n <div\n role=\"alert\"\n className=\"shrink-0 whitespace-pre-wrap break-words rounded-md border border-destructive/40 bg-destructive/5 px-density-3 py-density-2 text-xs text-destructive\"\n >\n {error}\n </div>\n ) : null;\n if (children) {\n return (\n <div className={cn(\"flex h-full min-h-0 w-full flex-col gap-density-2\", className)}>\n {alert}\n <div className=\"min-h-0 flex-1\">{children}</div>\n </div>\n );\n }\n return (\n <div\n aria-busy={loading}\n className={cn(\n \"flex h-full min-h-0 w-full flex-col overflow-hidden rounded-xl border border-border bg-background text-sm shadow-sm\",\n className,\n )}\n >\n <div className=\"flex min-h-0 flex-1 flex-col gap-density-3 overflow-y-auto p-density-4\">\n {alert ?? (\n <>\n <p className=\"text-xs text-muted-foreground\">Loading session…</p>\n <div className=\"h-control-h w-1/3 animate-pulse rounded-md bg-muted\" />\n <div className=\"h-4 w-full animate-pulse rounded bg-muted\" />\n <div className=\"h-4 w-5/6 animate-pulse rounded bg-muted\" />\n <div className=\"h-4 w-2/3 animate-pulse rounded bg-muted\" />\n </>\n )}\n </div>\n {composer ? <PinnedComposer>{composer}</PinnedComposer> : null}\n </div>\n );\n}\n"],"names":[],"mappings":";;;AAUO,SAAS,oBAAoB;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAMG;AACD,QAAM,QAAQ,QACZ;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,WAAU;AAAA,MAET,UAAA;AAAA,IAAA;AAAA,EAAA,IAED;AACJ,MAAI,UAAU;AACZ,gCACG,OAAA,EAAI,WAAW,GAAG,qDAAqD,SAAS,GAC9E,UAAA;AAAA,MAAA;AAAA,MACD,oBAAC,OAAA,EAAI,WAAU,kBAAkB,SAAA,CAAS;AAAA,IAAA,GAC5C;AAAA,EAEJ;AACA,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,aAAW;AAAA,MACX,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MAAA;AAAA,MAGF,UAAA;AAAA,QAAA,oBAAC,OAAA,EAAI,WAAU,0EACZ,UAAA,SACC,qBAAA,UAAA,EACE,UAAA;AAAA,UAAA,oBAAC,KAAA,EAAE,WAAU,iCAAgC,UAAA,oBAAgB;AAAA,UAC7D,oBAAC,OAAA,EAAI,WAAU,sDAAA,CAAsD;AAAA,UACrE,oBAAC,OAAA,EAAI,WAAU,4CAAA,CAA4C;AAAA,UAC3D,oBAAC,OAAA,EAAI,WAAU,2CAAA,CAA2C;AAAA,UAC1D,oBAAC,OAAA,EAAI,WAAU,2CAAA,CAA2C;AAAA,QAAA,EAAA,CAC5D,EAAA,CAEJ;AAAA,QACC,WAAW,oBAAC,gBAAA,EAAgB,UAAA,SAAA,CAAS,IAAoB;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGhE;"}
|