@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
|
@@ -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_summary = require("./SessionInspector.summary.cjs");
|
|
8
9
|
const SessionInspector_compact = require("./SessionInspector.compact.cjs");
|
|
9
10
|
const SessionInspector_tabs = require("./SessionInspector.tabs.cjs");
|
|
@@ -22,6 +23,7 @@ function SessionInspector({
|
|
|
22
23
|
src,
|
|
23
24
|
follow,
|
|
24
25
|
className,
|
|
26
|
+
onLoadStateChange,
|
|
25
27
|
...options
|
|
26
28
|
}) {
|
|
27
29
|
if (session !== void 0 && src !== void 0) {
|
|
@@ -34,10 +36,23 @@ function SessionInspector({
|
|
|
34
36
|
}
|
|
35
37
|
const followOptions = follow === void 0 ? {} : { follow };
|
|
36
38
|
const remote = SessionInspector_remote.useRemoteSession(src, followOptions);
|
|
39
|
+
SessionInspector_remote.useReportLoadState({
|
|
40
|
+
state: remote,
|
|
41
|
+
enabled: src !== void 0,
|
|
42
|
+
onChange: onLoadStateChange
|
|
43
|
+
});
|
|
37
44
|
const collection = session !== void 0 && SessionInspector_collection.isSessionCollectionInput(session) ? session : void 0;
|
|
38
45
|
const remoteCollection = SessionInspector_remote.useRemoteCollection(collection, followOptions);
|
|
39
46
|
const status = src !== void 0 ? remote : remoteCollection;
|
|
40
47
|
const resolved = src !== void 0 ? remote.session : collection ? remoteCollection.collection : session;
|
|
48
|
+
const viewOptions = src !== void 0 && (remote.hasOlder || remote.loadingOlder) ? {
|
|
49
|
+
...options,
|
|
50
|
+
transcriptProps: {
|
|
51
|
+
...options.transcriptProps,
|
|
52
|
+
onReachStart: () => void remote.loadOlder(),
|
|
53
|
+
loadingOlder: remote.loadingOlder === true
|
|
54
|
+
}
|
|
55
|
+
} : options;
|
|
41
56
|
const remoteBacked = src !== void 0 || collection !== void 0 && remoteCollection.collection !== collection;
|
|
42
57
|
if (resolved && !remoteBacked) {
|
|
43
58
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -56,12 +71,13 @@ function SessionInspector({
|
|
|
56
71
|
loading: status.loading,
|
|
57
72
|
...status.error ? { error: status.error } : {},
|
|
58
73
|
...className ? { className } : {},
|
|
74
|
+
...options.composer ? { composer: options.composer } : {},
|
|
59
75
|
children: resolved ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
60
76
|
SessionInspectorView,
|
|
61
77
|
{
|
|
62
78
|
session: resolved,
|
|
63
79
|
...followOptions,
|
|
64
|
-
...
|
|
80
|
+
...viewOptions
|
|
65
81
|
}
|
|
66
82
|
) : null
|
|
67
83
|
}
|
|
@@ -235,85 +251,65 @@ function CollectionSessionInspector({
|
|
|
235
251
|
),
|
|
236
252
|
/* @__PURE__ */ jsxRuntime.jsx(SessionInspector_tabs.InspectorTabs, { tab, tabs: compactTabs, onSelect: setTab })
|
|
237
253
|
] }),
|
|
238
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
254
|
+
/* @__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: [
|
|
255
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
256
|
+
"div",
|
|
257
|
+
{
|
|
258
|
+
className: utils.cn(
|
|
259
|
+
"min-h-0 flex-1 overflow-hidden",
|
|
260
|
+
tab !== "transcript" && "hidden"
|
|
261
|
+
),
|
|
262
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
263
|
+
SessionInspector_transcript.SessionTranscript,
|
|
264
|
+
{
|
|
265
|
+
session: hierarchy.filtered,
|
|
266
|
+
viewerProps: {
|
|
267
|
+
...compactTranscriptProps,
|
|
268
|
+
className: transcriptClassName
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
)
|
|
272
|
+
}
|
|
273
|
+
),
|
|
274
|
+
tab !== "transcript" ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-h-0 flex-1 overflow-auto p-density-4", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
275
|
+
SessionInspector_panels.SessionInspectorPanel,
|
|
276
|
+
{
|
|
277
|
+
tab,
|
|
278
|
+
detail: panelDetail,
|
|
279
|
+
session: hierarchy.current,
|
|
280
|
+
...onPlanChange ? { onPlanChange } : {},
|
|
281
|
+
...onResolveApproval ? { onResolveApproval } : {}
|
|
282
|
+
}
|
|
283
|
+
) }) : null
|
|
284
|
+
] }) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
239
285
|
"div",
|
|
240
286
|
{
|
|
241
287
|
className: utils.cn(
|
|
242
|
-
"min-h-0 flex-1
|
|
243
|
-
|
|
288
|
+
"min-h-0 flex-1",
|
|
289
|
+
tab === "transcript" ? "overflow-hidden" : "overflow-auto p-density-4"
|
|
244
290
|
),
|
|
245
|
-
children: /* @__PURE__ */ jsxRuntime.
|
|
246
|
-
|
|
291
|
+
children: tab === "transcript" ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
292
|
+
SessionInspector_transcript.SessionTranscript,
|
|
293
|
+
{
|
|
294
|
+
session: hierarchy.filtered,
|
|
295
|
+
viewerProps: {
|
|
296
|
+
...transcriptProps,
|
|
297
|
+
className: transcriptClassName
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
301
|
+
SessionInspector_panels.SessionInspectorPanel,
|
|
247
302
|
{
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
compact ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
254
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
255
|
-
"div",
|
|
256
|
-
{
|
|
257
|
-
className: utils.cn(
|
|
258
|
-
"min-h-0 flex-1 overflow-hidden",
|
|
259
|
-
tab !== "transcript" && "hidden"
|
|
260
|
-
),
|
|
261
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
262
|
-
SessionInspector_transcript.SessionTranscript,
|
|
263
|
-
{
|
|
264
|
-
session: hierarchy.filtered,
|
|
265
|
-
viewerProps: {
|
|
266
|
-
...compactTranscriptProps,
|
|
267
|
-
className: transcriptClassName
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
)
|
|
271
|
-
}
|
|
272
|
-
),
|
|
273
|
-
tab !== "transcript" ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-h-0 flex-1 overflow-auto p-density-4", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
274
|
-
SessionInspector_panels.SessionInspectorPanel,
|
|
275
|
-
{
|
|
276
|
-
tab,
|
|
277
|
-
detail: panelDetail,
|
|
278
|
-
session: hierarchy.current,
|
|
279
|
-
...onPlanChange ? { onPlanChange } : {},
|
|
280
|
-
...onResolveApproval ? { onResolveApproval } : {}
|
|
281
|
-
}
|
|
282
|
-
) }) : null
|
|
283
|
-
] }) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
284
|
-
"div",
|
|
285
|
-
{
|
|
286
|
-
className: utils.cn(
|
|
287
|
-
"min-h-0 flex-1",
|
|
288
|
-
tab === "transcript" ? "overflow-hidden" : "overflow-auto p-density-4"
|
|
289
|
-
),
|
|
290
|
-
children: tab === "transcript" ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
291
|
-
SessionInspector_transcript.SessionTranscript,
|
|
292
|
-
{
|
|
293
|
-
session: hierarchy.filtered,
|
|
294
|
-
viewerProps: {
|
|
295
|
-
...transcriptProps,
|
|
296
|
-
className: transcriptClassName
|
|
297
|
-
}
|
|
298
|
-
}
|
|
299
|
-
) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
300
|
-
SessionInspector_panels.SessionInspectorPanel,
|
|
301
|
-
{
|
|
302
|
-
tab,
|
|
303
|
-
detail: panelDetail,
|
|
304
|
-
session: hierarchy.current,
|
|
305
|
-
...onPlanChange ? { onPlanChange } : {},
|
|
306
|
-
...onResolveApproval ? { onResolveApproval } : {}
|
|
307
|
-
}
|
|
308
|
-
)
|
|
309
|
-
}
|
|
310
|
-
),
|
|
311
|
-
composer ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "shrink-0 border-t border-border p-density-3", children: composer }) : null
|
|
312
|
-
]
|
|
303
|
+
tab,
|
|
304
|
+
detail: panelDetail,
|
|
305
|
+
session: hierarchy.current,
|
|
306
|
+
...onPlanChange ? { onPlanChange } : {},
|
|
307
|
+
...onResolveApproval ? { onResolveApproval } : {}
|
|
313
308
|
}
|
|
314
309
|
)
|
|
315
310
|
}
|
|
316
|
-
)
|
|
311
|
+
) }),
|
|
312
|
+
composer ? /* @__PURE__ */ jsxRuntime.jsx(SessionInspector_composerSlot.PinnedComposer, { children: composer }) : null
|
|
317
313
|
]
|
|
318
314
|
}
|
|
319
315
|
);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SessionInspector.cjs","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":["useRemoteSession","isSessionCollectionInput","useRemoteCollection","jsx","RemoteSessionStatus","useMemo","LegacySessionInspector","useSessionHierarchy","useState","hasStructuredOutput","useInspectorTab","cn","getSessionMetadata","inspectorTabs","jsxs","SessionHierarchyTree","CompactSessionInspectorToolbar","Fragment","SessionInspectorHeader","SessionHierarchyPicker","InspectorTabs","SessionTranscript","SessionInspectorPanel"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SessionInspector.cjs","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":["useRemoteSession","useReportLoadState","isSessionCollectionInput","useRemoteCollection","jsx","RemoteSessionStatus","useMemo","LegacySessionInspector","useSessionHierarchy","useState","hasStructuredOutput","useInspectorTab","cn","getSessionMetadata","inspectorTabs","jsxs","SessionHierarchyTree","CompactSessionInspectorToolbar","Fragment","SessionInspectorHeader","SessionHierarchyPicker","InspectorTabs","SessionTranscript","SessionInspectorPanel","PinnedComposer"],"mappings":";;;;;;;;;;;;;;;;;;;;AAuFO,SAAS,iBAAiB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAA0B;AACxB,MAAI,YAAY,UAAa,QAAQ,QAAW;AAC9C,UAAM,IAAI;AAAA,MACR;AAAA,IAAA;AAAA,EAEJ;AACA,MAAI,YAAY,UAAa,QAAQ,QAAW;AAC9C,UAAM,IAAI,MAAM,kDAAkD;AAAA,EACpE;AACA,QAAM,gBAAgB,WAAW,SAAY,CAAA,IAAK,EAAE,OAAA;AACpD,QAAM,SAASA,wBAAAA,iBAAiB,KAAK,aAAa;AAClDC,6CAAmB;AAAA,IACjB,OAAO;AAAA,IACP,SAAS,QAAQ;AAAA,IACjB,UAAU;AAAA,EAAA,CACX;AACD,QAAM,aACJ,YAAY,UAAaC,4BAAAA,yBAAyB,OAAO,IACrD,UACA;AACN,QAAM,mBAAmBC,wBAAAA,oBAAoB,YAAY,aAAa;AACtE,QAAM,SAAS,QAAQ,SAAY,SAAS;AAC5C,QAAM,WACJ,QAAQ,SACJ,OAAO,UACP,aACE,iBAAiB,aACjB;AAGR,QAAM,cACJ,QAAQ,WAAc,OAAO,YAAY,OAAO,gBAC5C;AAAA,IACE,GAAG;AAAA,IACH,iBAAiB;AAAA,MACf,GAAG,QAAQ;AAAA,MACX,cAAc,MAAM,KAAK,OAAO,UAAA;AAAA,MAChC,cAAc,OAAO,iBAAiB;AAAA,IAAA;AAAA,EACxC,IAEF;AAIN,QAAM,eACJ,QAAQ,UACP,eAAe,UAAa,iBAAiB,eAAe;AAC/D,MAAI,YAAY,CAAC,cAAc;AAC7B,WACEC,2BAAAA;AAAAA,MAAC;AAAA,MAAA;AAAA,QACC,SAAS;AAAA,QACR,GAAG;AAAA,QACH,GAAG;AAAA,QACH,GAAI,YAAY,EAAE,cAAc,CAAA;AAAA,MAAC;AAAA,IAAA;AAAA,EAGxC;AACA,SACEA,2BAAAA;AAAAA,IAACC,4BAAAA;AAAAA,IAAA;AAAA,MACC,SAAS,OAAO;AAAA,MACf,GAAI,OAAO,QAAQ,EAAE,OAAO,OAAO,MAAA,IAAU,CAAA;AAAA,MAC7C,GAAI,YAAY,EAAE,UAAA,IAAc,CAAA;AAAA,MAChC,GAAI,QAAQ,WAAW,EAAE,UAAU,QAAQ,SAAA,IAAa,CAAA;AAAA,MAExD,UAAA,WACCD,2BAAAA;AAAAA,QAAC;AAAA,QAAA;AAAA,UACC,SAAS;AAAA,UACR,GAAG;AAAA,UACH,GAAG;AAAA,QAAA;AAAA,MAAA,IAEJ;AAAA,IAAA;AAAA,EAAA;AAGV;AAEA,SAAS,qBAAqB;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA,aAAa;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,SAAS;AAAA,EACT;AAAA,EACA;AACF,GAGG;AACD,QAAM,SAASE,MAAAA;AAAAA,IACb,MACEJ,4BAAAA,yBAAyB,OAAO,IAAI,SAAY,iBAAiB,OAAO;AAAA,IAC1E,CAAC,OAAO;AAAA,EAAA;AAEV,QAAM,aAAaI,MAAAA;AAAAA,IACjB,MACEJ,4BAAAA,yBAAyB,OAAO,IAC5B,UACA,SACE,wBAAwB,MAAM,IAC9B;AAAA,IACR,CAAC,QAAQ,OAAO;AAAA,EAAA;AAGlB,QAAM,WAAW;AAAA,IACf,GAAI,MAAM,EAAE,IAAA,IAAQ,CAAA;AAAA,IACpB,GAAI,cAAc,EAAE,gBAAgB,CAAA;AAAA,EAAC;AAGvC,MAAI,YAAY;AACd,UAAM,gBAAgB;AAAA,MACpB,GAAG;AAAA,MACH,GAAI,WAAW,SAAY,CAAA,IAAK,EAAE,OAAA;AAAA,MAClC,GAAI,qBAAqB,EAAE,mBAAA,IAAuB,CAAA;AAAA,MAClD,GAAI,6BAA6B,EAAE,2BAAA,IAA+B,CAAA;AAAA,MAClE,GAAI,YAAY,EAAE,UAAA,IAAc,CAAA;AAAA,MAChC,GAAI,kBAAkB,EAAE,gBAAA,IAAoB,CAAA;AAAA,MAC5C,GAAI,uBAAuB,EAAE,qBAAA,IAAyB,CAAA;AAAA,MACtD,GAAI,eAAe,EAAE,aAAA,IAAiB,CAAA;AAAA,MACtC,GAAI,oBAAoB,EAAE,kBAAA,IAAsB,CAAA;AAAA,MAChD,GAAI,WAAW,EAAE,SAAA,IAAa,CAAA;AAAA,MAC9B,GAAI,WAAW,YAAY,EAAE,OAAA,IAAW,CAAA;AAAA,MACxC,GAAI,WAAW,EAAE,SAAA,IAAa,CAAA;AAAA,MAC9B,GAAI,iBAAiB,EAAE,mBAAmB,CAAA;AAAA,IAAC;AAE7C,WACEE,2BAAAA;AAAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA;AAAA,QACC,GAAG;AAAA,MAAA;AAAA,IAAA;AAAA,EAGV;AAEA,SACEA,2BAAAA;AAAAA,IAACG,wBAAAA;AAAAA,IAAA;AAAA,MACC;AAAA,MACA;AAAA,MACC,GAAG;AAAA,MACH,GAAI,YAAY,EAAE,UAAA,IAAc,CAAA;AAAA,MAChC,GAAI,kBAAkB,EAAE,gBAAA,IAAoB,CAAA;AAAA,MAC5C,GAAI,WAAW,EAAE,SAAA,IAAa,CAAA;AAAA,MAC9B,GAAI,WAAW,YAAY,EAAE,OAAA,IAAW,CAAA;AAAA,MACxC,GAAI,WAAW,EAAE,SAAA,IAAa,CAAA;AAAA,MAC9B,GAAI,iBAAiB,EAAE,mBAAmB,CAAA;AAAA,IAAC;AAAA,EAAA;AAGlD;AAEA,SAAS,2BAA2B;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA,aAAa;AAAA,EACb,KAAK;AAAA,EACL;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,SAAS;AAAA,EACT;AAAA,EACA;AACF,GAGG;AACD,QAAM,YAAYC,gCAAAA,oBAAoB,YAAY;AAAA,IAChD,GAAI,qBAAqB,EAAE,mBAAA,IAAuB,CAAA;AAAA,IAClD,GAAI,6BAA6B,EAAE,2BAAA,IAA+B,CAAA;AAAA,IAClE,GAAI,WAAW,SAAY,CAAA,IAAK,EAAE,OAAA;AAAA,EAAO,CAC1C;AACD,QAAM,UAAU,WAAW;AAC3B,QAAM,CAAC,UAAU,WAAW,IAAIC,MAAAA,SAAiC,IAAI;AACrE,QAAM,gBAAgBC,4BAAAA,oBAAoB,UAAU,OAAO;AAC3D,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,cACJ,QAAQ,WAAW,QAAQ,iBACvB,UAAU,WACV,UAAU;AAChB,QAAM,kBAAkB,YAAYC,uCAAmB,UAAU,OAAO;AACxE,QAAM,cAAcC,4BAAAA;AAAAA,IAClB;AAAA,IACA,UAAU;AAAA,IACV,UAAU;AAAA,EAAA;AAEZ,QAAM,oBACJC,2BAAAA,KAAC,OAAA,EAAI,WAAU,mCACb,UAAA;AAAA,IAAAX,2BAAAA,IAAC,KAAA,EAAE,WAAU,qFAAoF,UAAA,mBAEjG;AAAA,IACAA,2BAAAA;AAAAA,MAACY,2BAAAA;AAAAA,MAAA;AAAA,QACC;AAAA,QACA,OAAO;AAAA,QACN,GAAI,uBAAuB,EAAE,qBAAA,IAAyB,CAAA;AAAA,QACvD,WAAU;AAAA,MAAA;AAAA,IAAA;AAAA,KAEX,mDAAiB,cAChBZ,+BAAC,OAAA,EAAI,WAAU,oCACZ,UAAA,gBAAgB,YACnB,IACE;AAAA,EAAA,GACN;AAEF,QAAM,yBAAyB,UAC3B;AAAA,IACE,GAAG;AAAA,IACH,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,UAAU,aAAa,SAAQ,mDAAiB,cAAa;AAAA,EAAA,IAE/D;AAEJ,SACEW,2BAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWH,MAAAA;AAAAA,QACT;AAAA,QACA,UACI,iDACA;AAAA,QACJ;AAAA,MAAA;AAAA,MAGD,UAAA;AAAA,QAAA,UACCR,2BAAAA;AAAAA,UAACa,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,IAG9CF,2BAAAA,KAAAG,qBAAA,EACE,UAAA;AAAA,UAAAd,2BAAAA,IAACe,yBAAAA,wBAAA,EAAuB,SAAS,UAAU,QAAA,CAAS;AAAA,UACpDf,2BAAAA;AAAAA,YAAC;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,cAAW;AAAA,cACX,WAAU;AAAA,cAEV,UAAAA,2BAAAA;AAAAA,gBAACgB,2BAAAA;AAAAA,gBAAA;AAAA,kBACC;AAAA,kBACA,OAAO;AAAA,kBACN,GAAI,uBAAuB,EAAE,yBAAyB,CAAA;AAAA,gBAAC;AAAA,cAAA;AAAA,YAC1D;AAAA,UAAA;AAAA,yCAEDC,sBAAAA,eAAA,EAAc,KAAU,MAAM,aAAa,UAAU,OAAA,CAAQ;AAAA,QAAA,GAChE;AAAA,QAEFjB,+BAAC,QAAA,EAAK,WAAU,wDACb,oBACCW,2BAAAA,KAAAG,qBAAA,EACE,UAAA;AAAA,UAAAd,2BAAAA;AAAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAWQ,MAAAA;AAAAA,gBACT;AAAA,gBACA,QAAQ,gBAAgB;AAAA,cAAA;AAAA,cAG1B,UAAAR,2BAAAA;AAAAA,gBAACkB,4BAAAA;AAAAA,gBAAA;AAAA,kBACC,SAAS,UAAU;AAAA,kBACnB,aAAa;AAAA,oBACX,GAAG;AAAA,oBACH,WAAW;AAAA,kBAAA;AAAA,gBACb;AAAA,cAAA;AAAA,YACF;AAAA,UAAA;AAAA,UAED,QAAQ,eACPlB,+BAAC,OAAA,EAAI,WAAU,4CACb,UAAAA,2BAAAA;AAAAA,YAACmB,wBAAAA;AAAAA,YAAA;AAAA,cACC;AAAA,cACA,QAAQ;AAAA,cACR,SAAS,UAAU;AAAA,cAClB,GAAI,eAAe,EAAE,aAAA,IAAiB,CAAA;AAAA,cACtC,GAAI,oBAAoB,EAAE,sBAAsB,CAAA;AAAA,YAAC;AAAA,UAAA,GAEtD,IACE;AAAA,QAAA,EAAA,CACN,IAEAnB,2BAAAA;AAAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAWQ,MAAAA;AAAAA,cACT;AAAA,cACA,QAAQ,eACJ,oBACA;AAAA,YAAA;AAAA,YAGL,kBAAQ,eACPR,2BAAAA;AAAAA,cAACkB,4BAAAA;AAAAA,cAAA;AAAA,gBACC,SAAS,UAAU;AAAA,gBACnB,aAAa;AAAA,kBACX,GAAG;AAAA,kBACH,WAAW;AAAA,gBAAA;AAAA,cACb;AAAA,YAAA,IAGFlB,2BAAAA;AAAAA,cAACmB,wBAAAA;AAAAA,cAAA;AAAA,gBACC;AAAA,gBACA,QAAQ;AAAA,gBACR,SAAS,UAAU;AAAA,gBAClB,GAAI,eAAe,EAAE,aAAA,IAAiB,CAAA;AAAA,gBACtC,GAAI,oBAAoB,EAAE,sBAAsB,CAAA;AAAA,cAAC;AAAA,YAAA;AAAA,UACpD;AAAA,QAAA,GAIR;AAAA,QACC,WAAWnB,2BAAAA,IAACoB,8BAAAA,gBAAA,EAAgB,UAAA,SAAA,CAAS,IAAoB;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGhE;AAEA,SAAS,wBACP,SACwB;AACxB,QAAM,KAAK,QAAQ,MAAM;AACzB,SAAO;AAAA,IACL,MAAM;AAAA,IACN;AAAA,IACA,kBAAkB;AAAA,IAClB,UAAU,CAAC,EAAE,IAAI,SAAS;AAAA,EAAA;AAE9B;AAEA,SAAS,iBACP,SACiC;AACjC,MAAI,OAAO,YAAY,YAAY,YAAY,QAAQ,MAAM,QAAQ,OAAO;AAC1E,WAAO;AACT,SAAO;AACT;;"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const jsxRuntime = require("react/jsx-runtime");
|
|
4
|
+
function PinnedComposer({ children }) {
|
|
5
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "shrink-0 border-t border-border bg-background p-density-3 pb-[max(calc(var(--spacing-unit)*3),env(safe-area-inset-bottom))]", children });
|
|
6
|
+
}
|
|
7
|
+
exports.PinnedComposer = PinnedComposer;
|
|
8
|
+
//# sourceMappingURL=SessionInspector.composer-slot.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SessionInspector.composer-slot.cjs","sources":["../../../src/data/ai/SessionInspector.composer-slot.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\n\n/** The inspector's composer slot. It is always the last child of a clipped,\n * full-height flex column, never inside a scroll container, so the input stays\n * at the bottom edge while only the transcript above it scrolls. The bottom\n * padding grows to the device safe area so a home indicator never covers it. */\nexport function PinnedComposer({ children }: { children: ReactNode }) {\n return (\n <div className=\"shrink-0 border-t border-border bg-background p-density-3 pb-[max(calc(var(--spacing-unit)*3),env(safe-area-inset-bottom))]\">\n {children}\n </div>\n );\n}\n"],"names":["jsx"],"mappings":";;;AAMO,SAAS,eAAe,EAAE,YAAqC;AACpE,SACEA,2BAAAA,IAAC,OAAA,EAAI,WAAU,+HACZ,SAAA,CACH;AAEJ;;"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
/** The inspector's composer slot. It is always the last child of a clipped,
|
|
3
|
+
* full-height flex column, never inside a scroll container, so the input stays
|
|
4
|
+
* at the bottom edge while only the transcript above it scrolls. The bottom
|
|
5
|
+
* padding grows to the device safe area so a home indicator never covers it. */
|
|
6
|
+
export declare function PinnedComposer({ children }: {
|
|
7
|
+
children: ReactNode;
|
|
8
|
+
}): import("react").JSX.Element;
|
|
9
|
+
//# sourceMappingURL=SessionInspector.composer-slot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SessionInspector.composer-slot.d.ts","sourceRoot":"","sources":["../../../src/data/ai/SessionInspector.composer-slot.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC;;;iFAGiF;AACjF,wBAAgB,cAAc,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,+BAMnE"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
function PinnedComposer({ children }) {
|
|
3
|
+
return /* @__PURE__ */ jsx("div", { className: "shrink-0 border-t border-border bg-background p-density-3 pb-[max(calc(var(--spacing-unit)*3),env(safe-area-inset-bottom))]", children });
|
|
4
|
+
}
|
|
5
|
+
export {
|
|
6
|
+
PinnedComposer
|
|
7
|
+
};
|
|
8
|
+
//# sourceMappingURL=SessionInspector.composer-slot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SessionInspector.composer-slot.js","sources":["../../../src/data/ai/SessionInspector.composer-slot.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\n\n/** The inspector's composer slot. It is always the last child of a clipped,\n * full-height flex column, never inside a scroll container, so the input stays\n * at the bottom edge while only the transcript above it scrolls. The bottom\n * padding grows to the device safe area so a home indicator never covers it. */\nexport function PinnedComposer({ children }: { children: ReactNode }) {\n return (\n <div className=\"shrink-0 border-t border-border bg-background p-density-3 pb-[max(calc(var(--spacing-unit)*3),env(safe-area-inset-bottom))]\">\n {children}\n </div>\n );\n}\n"],"names":[],"mappings":";AAMO,SAAS,eAAe,EAAE,YAAqC;AACpE,SACE,oBAAC,OAAA,EAAI,WAAU,+HACZ,SAAA,CACH;AAEJ;"}
|
|
@@ -2,6 +2,7 @@ import { ReactNode } from 'react';
|
|
|
2
2
|
import { SessionInspectorTab } from './SessionInspector.tabs.model.js';
|
|
3
3
|
import { SessionCollectionItem, SessionInspectorInput } from './SessionInspector.collection.js';
|
|
4
4
|
import { ApprovalResolveHandler } from './SessionInspector.approvals-model.js';
|
|
5
|
+
import { SessionInspectorLoadState } from './SessionInspector.remote.js';
|
|
5
6
|
import { SessionViewerProps } from './SessionViewer.js';
|
|
6
7
|
import { SessionMetadataSummary } from './SessionViewer.model.js';
|
|
7
8
|
export type { SessionInspectorTab } from './SessionInspector.tabs.model.js';
|
|
@@ -45,6 +46,10 @@ export interface SessionInspectorOptions {
|
|
|
45
46
|
* tab still lists pending requests but renders no Approve/Deny controls. */
|
|
46
47
|
onResolveApproval?: ApprovalResolveHandler;
|
|
47
48
|
composer?: ReactNode;
|
|
49
|
+
/** With `src`: fires on the initial load result (`loading`, then `ready` or
|
|
50
|
+
* `error`) and when the follow stream later sends a terminal error frame.
|
|
51
|
+
* Never fires for an in-memory `session`. */
|
|
52
|
+
onLoadStateChange?: (state: SessionInspectorLoadState) => void;
|
|
48
53
|
}
|
|
49
|
-
export declare function SessionInspector({ session, src, follow, className, ...options }: SessionInspectorProps): import("react").JSX.Element;
|
|
54
|
+
export declare function SessionInspector({ session, src, follow, className, onLoadStateChange, ...options }: SessionInspectorProps): import("react").JSX.Element;
|
|
50
55
|
//# sourceMappingURL=SessionInspector.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SessionInspector.d.ts","sourceRoot":"","sources":["../../../src/data/ai/SessionInspector.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"SessionInspector.d.ts","sourceRoot":"","sources":["../../../src/data/ai/SessionInspector.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAO1D,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EAGL,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAC3B,MAAM,+BAA+B,CAAC;AAMvC,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAGjF,OAAO,EAIL,KAAK,yBAAyB,EAC/B,MAAM,2BAA2B,CAAC;AAEnC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAGL,KAAK,sBAAsB,EAC5B,MAAM,uBAAuB,CAAC;AAG/B,YAAY,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAEzE;;;;;;GAMG;AACH,MAAM,MAAM,qBAAqB,GAAG,uBAAuB,GACzD,CACI;IAAE,OAAO,EAAE,qBAAqB,CAAC;IAAC,GAAG,CAAC,EAAE,KAAK,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GACjE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,KAAK,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,CACrD,CAAC;AAEJ,MAAM,WAAW,uBAAuB;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0FAA0F;IAC1F,MAAM,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAC/B,4FAA4F;IAC5F,QAAQ,CAAC,EAAE,sBAAsB,CAAC;IAClC,4EAA4E;IAC5E,cAAc,CAAC,EAAE,SAAS,CAAC;IAC3B,UAAU,CAAC,EAAE,mBAAmB,CAAC;IACjC,0EAA0E;IAC1E,GAAG,CAAC,EAAE,mBAAmB,CAAC;IAC1B,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,mBAAmB,KAAK,IAAI,CAAC;IACjD;iEAC6D;IAC7D,kBAAkB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,0BAA0B,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACrD,eAAe,CAAC,EAAE,IAAI,CAAC,kBAAkB,EAAE,SAAS,CAAC,CAAC;IACtD,oBAAoB,CAAC,EAAE,CAAC,IAAI,EAAE,qBAAqB,KAAK,SAAS,CAAC;IAClE,+FAA+F;IAC/F,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC;iFAC6E;IAC7E,iBAAiB,CAAC,EAAE,sBAAsB,CAAC;IAC3C,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB;;kDAE8C;IAC9C,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,yBAAyB,KAAK,IAAI,CAAC;CAChE;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,OAAO,EACP,GAAG,EACH,MAAM,EACN,SAAS,EACT,iBAAiB,EACjB,GAAG,OAAO,EACX,EAAE,qBAAqB,+BAyEvB"}
|
|
@@ -2,6 +2,7 @@ import { jsx, jsxs, Fragment } from "react/jsx-runtime";
|
|
|
2
2
|
import { useMemo, 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 { SessionInspectorHeader } from "./SessionInspector.summary.js";
|
|
6
7
|
import { CompactSessionInspectorToolbar } from "./SessionInspector.compact.js";
|
|
7
8
|
import { InspectorTabs } from "./SessionInspector.tabs.js";
|
|
@@ -12,7 +13,7 @@ import { SessionHierarchyTree, SessionHierarchyPicker } from "./SessionInspector
|
|
|
12
13
|
import { useSessionHierarchy } from "./SessionInspector.hierarchy-state.js";
|
|
13
14
|
import { LegacySessionInspector } from "./SessionInspector.legacy.js";
|
|
14
15
|
import { useInspectorTab } from "./SessionInspector.tab-state.js";
|
|
15
|
-
import { useRemoteSession, useRemoteCollection } from "./SessionInspector.remote.js";
|
|
16
|
+
import { useRemoteSession, useReportLoadState, useRemoteCollection } from "./SessionInspector.remote.js";
|
|
16
17
|
import { RemoteSessionStatus } from "./SessionInspector.remote-view.js";
|
|
17
18
|
import { getSessionMetadata } from "./SessionViewer.model.js";
|
|
18
19
|
function SessionInspector({
|
|
@@ -20,6 +21,7 @@ function SessionInspector({
|
|
|
20
21
|
src,
|
|
21
22
|
follow,
|
|
22
23
|
className,
|
|
24
|
+
onLoadStateChange,
|
|
23
25
|
...options
|
|
24
26
|
}) {
|
|
25
27
|
if (session !== void 0 && src !== void 0) {
|
|
@@ -32,10 +34,23 @@ function SessionInspector({
|
|
|
32
34
|
}
|
|
33
35
|
const followOptions = follow === void 0 ? {} : { follow };
|
|
34
36
|
const remote = useRemoteSession(src, followOptions);
|
|
37
|
+
useReportLoadState({
|
|
38
|
+
state: remote,
|
|
39
|
+
enabled: src !== void 0,
|
|
40
|
+
onChange: onLoadStateChange
|
|
41
|
+
});
|
|
35
42
|
const collection = session !== void 0 && isSessionCollectionInput(session) ? session : void 0;
|
|
36
43
|
const remoteCollection = useRemoteCollection(collection, followOptions);
|
|
37
44
|
const status = src !== void 0 ? remote : remoteCollection;
|
|
38
45
|
const resolved = src !== void 0 ? remote.session : collection ? remoteCollection.collection : session;
|
|
46
|
+
const viewOptions = src !== void 0 && (remote.hasOlder || remote.loadingOlder) ? {
|
|
47
|
+
...options,
|
|
48
|
+
transcriptProps: {
|
|
49
|
+
...options.transcriptProps,
|
|
50
|
+
onReachStart: () => void remote.loadOlder(),
|
|
51
|
+
loadingOlder: remote.loadingOlder === true
|
|
52
|
+
}
|
|
53
|
+
} : options;
|
|
39
54
|
const remoteBacked = src !== void 0 || collection !== void 0 && remoteCollection.collection !== collection;
|
|
40
55
|
if (resolved && !remoteBacked) {
|
|
41
56
|
return /* @__PURE__ */ jsx(
|
|
@@ -54,12 +69,13 @@ function SessionInspector({
|
|
|
54
69
|
loading: status.loading,
|
|
55
70
|
...status.error ? { error: status.error } : {},
|
|
56
71
|
...className ? { className } : {},
|
|
72
|
+
...options.composer ? { composer: options.composer } : {},
|
|
57
73
|
children: resolved ? /* @__PURE__ */ jsx(
|
|
58
74
|
SessionInspectorView,
|
|
59
75
|
{
|
|
60
76
|
session: resolved,
|
|
61
77
|
...followOptions,
|
|
62
|
-
...
|
|
78
|
+
...viewOptions
|
|
63
79
|
}
|
|
64
80
|
) : null
|
|
65
81
|
}
|
|
@@ -233,85 +249,65 @@ function CollectionSessionInspector({
|
|
|
233
249
|
),
|
|
234
250
|
/* @__PURE__ */ jsx(InspectorTabs, { tab, tabs: compactTabs, onSelect: setTab })
|
|
235
251
|
] }),
|
|
236
|
-
/* @__PURE__ */ jsx(
|
|
252
|
+
/* @__PURE__ */ jsx("main", { className: "flex min-h-0 min-w-0 flex-1 flex-col overflow-hidden", children: compact ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
253
|
+
/* @__PURE__ */ jsx(
|
|
254
|
+
"div",
|
|
255
|
+
{
|
|
256
|
+
className: cn(
|
|
257
|
+
"min-h-0 flex-1 overflow-hidden",
|
|
258
|
+
tab !== "transcript" && "hidden"
|
|
259
|
+
),
|
|
260
|
+
children: /* @__PURE__ */ jsx(
|
|
261
|
+
SessionTranscript,
|
|
262
|
+
{
|
|
263
|
+
session: hierarchy.filtered,
|
|
264
|
+
viewerProps: {
|
|
265
|
+
...compactTranscriptProps,
|
|
266
|
+
className: transcriptClassName
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
)
|
|
270
|
+
}
|
|
271
|
+
),
|
|
272
|
+
tab !== "transcript" ? /* @__PURE__ */ jsx("div", { className: "min-h-0 flex-1 overflow-auto p-density-4", children: /* @__PURE__ */ jsx(
|
|
273
|
+
SessionInspectorPanel,
|
|
274
|
+
{
|
|
275
|
+
tab,
|
|
276
|
+
detail: panelDetail,
|
|
277
|
+
session: hierarchy.current,
|
|
278
|
+
...onPlanChange ? { onPlanChange } : {},
|
|
279
|
+
...onResolveApproval ? { onResolveApproval } : {}
|
|
280
|
+
}
|
|
281
|
+
) }) : null
|
|
282
|
+
] }) : /* @__PURE__ */ jsx(
|
|
237
283
|
"div",
|
|
238
284
|
{
|
|
239
285
|
className: cn(
|
|
240
|
-
"min-h-0 flex-1
|
|
241
|
-
|
|
286
|
+
"min-h-0 flex-1",
|
|
287
|
+
tab === "transcript" ? "overflow-hidden" : "overflow-auto p-density-4"
|
|
242
288
|
),
|
|
243
|
-
children: /* @__PURE__ */
|
|
244
|
-
|
|
289
|
+
children: tab === "transcript" ? /* @__PURE__ */ jsx(
|
|
290
|
+
SessionTranscript,
|
|
291
|
+
{
|
|
292
|
+
session: hierarchy.filtered,
|
|
293
|
+
viewerProps: {
|
|
294
|
+
...transcriptProps,
|
|
295
|
+
className: transcriptClassName
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
) : /* @__PURE__ */ jsx(
|
|
299
|
+
SessionInspectorPanel,
|
|
245
300
|
{
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
compact ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
252
|
-
/* @__PURE__ */ jsx(
|
|
253
|
-
"div",
|
|
254
|
-
{
|
|
255
|
-
className: cn(
|
|
256
|
-
"min-h-0 flex-1 overflow-hidden",
|
|
257
|
-
tab !== "transcript" && "hidden"
|
|
258
|
-
),
|
|
259
|
-
children: /* @__PURE__ */ jsx(
|
|
260
|
-
SessionTranscript,
|
|
261
|
-
{
|
|
262
|
-
session: hierarchy.filtered,
|
|
263
|
-
viewerProps: {
|
|
264
|
-
...compactTranscriptProps,
|
|
265
|
-
className: transcriptClassName
|
|
266
|
-
}
|
|
267
|
-
}
|
|
268
|
-
)
|
|
269
|
-
}
|
|
270
|
-
),
|
|
271
|
-
tab !== "transcript" ? /* @__PURE__ */ jsx("div", { className: "min-h-0 flex-1 overflow-auto p-density-4", children: /* @__PURE__ */ jsx(
|
|
272
|
-
SessionInspectorPanel,
|
|
273
|
-
{
|
|
274
|
-
tab,
|
|
275
|
-
detail: panelDetail,
|
|
276
|
-
session: hierarchy.current,
|
|
277
|
-
...onPlanChange ? { onPlanChange } : {},
|
|
278
|
-
...onResolveApproval ? { onResolveApproval } : {}
|
|
279
|
-
}
|
|
280
|
-
) }) : null
|
|
281
|
-
] }) : /* @__PURE__ */ jsx(
|
|
282
|
-
"div",
|
|
283
|
-
{
|
|
284
|
-
className: cn(
|
|
285
|
-
"min-h-0 flex-1",
|
|
286
|
-
tab === "transcript" ? "overflow-hidden" : "overflow-auto p-density-4"
|
|
287
|
-
),
|
|
288
|
-
children: tab === "transcript" ? /* @__PURE__ */ jsx(
|
|
289
|
-
SessionTranscript,
|
|
290
|
-
{
|
|
291
|
-
session: hierarchy.filtered,
|
|
292
|
-
viewerProps: {
|
|
293
|
-
...transcriptProps,
|
|
294
|
-
className: transcriptClassName
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
) : /* @__PURE__ */ jsx(
|
|
298
|
-
SessionInspectorPanel,
|
|
299
|
-
{
|
|
300
|
-
tab,
|
|
301
|
-
detail: panelDetail,
|
|
302
|
-
session: hierarchy.current,
|
|
303
|
-
...onPlanChange ? { onPlanChange } : {},
|
|
304
|
-
...onResolveApproval ? { onResolveApproval } : {}
|
|
305
|
-
}
|
|
306
|
-
)
|
|
307
|
-
}
|
|
308
|
-
),
|
|
309
|
-
composer ? /* @__PURE__ */ jsx("div", { className: "shrink-0 border-t border-border p-density-3", children: composer }) : null
|
|
310
|
-
]
|
|
301
|
+
tab,
|
|
302
|
+
detail: panelDetail,
|
|
303
|
+
session: hierarchy.current,
|
|
304
|
+
...onPlanChange ? { onPlanChange } : {},
|
|
305
|
+
...onResolveApproval ? { onResolveApproval } : {}
|
|
311
306
|
}
|
|
312
307
|
)
|
|
313
308
|
}
|
|
314
|
-
)
|
|
309
|
+
) }),
|
|
310
|
+
composer ? /* @__PURE__ */ jsx(PinnedComposer, { children: composer }) : null
|
|
315
311
|
]
|
|
316
312
|
}
|
|
317
313
|
);
|