@stigmer/react 3.1.1 → 3.1.2
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/composer/SessionComposer.d.ts +24 -1
- package/composer/SessionComposer.d.ts.map +1 -1
- package/composer/SessionComposer.js +19 -8
- package/composer/SessionComposer.js.map +1 -1
- package/execution/ArtifactContentRenderer.d.ts +11 -1
- package/execution/ArtifactContentRenderer.d.ts.map +1 -1
- package/execution/ArtifactContentRenderer.js +39 -15
- package/execution/ArtifactContentRenderer.js.map +1 -1
- package/execution/FilePathContext.d.ts +8 -1
- package/execution/FilePathContext.d.ts.map +1 -1
- package/execution/FilePathContext.js.map +1 -1
- package/execution/FilePathLink.d.ts.map +1 -1
- package/execution/FilePathLink.js +21 -6
- package/execution/FilePathLink.js.map +1 -1
- package/execution/MessageEntry.d.ts +29 -0
- package/execution/MessageEntry.d.ts.map +1 -1
- package/execution/MessageEntry.js +29 -5
- package/execution/MessageEntry.js.map +1 -1
- package/execution/MessageThread.d.ts +76 -13
- package/execution/MessageThread.d.ts.map +1 -1
- package/execution/MessageThread.js +178 -24
- package/execution/MessageThread.js.map +1 -1
- package/execution/PlanArtifactCard.d.ts +27 -18
- package/execution/PlanArtifactCard.d.ts.map +1 -1
- package/execution/PlanArtifactCard.js +13 -23
- package/execution/PlanArtifactCard.js.map +1 -1
- package/execution/PlanDocumentMessage.d.ts +32 -0
- package/execution/PlanDocumentMessage.d.ts.map +1 -0
- package/execution/PlanDocumentMessage.js +37 -0
- package/execution/PlanDocumentMessage.js.map +1 -0
- package/execution/PlanStreamingCard.d.ts +45 -0
- package/execution/PlanStreamingCard.d.ts.map +1 -0
- package/execution/PlanStreamingCard.js +35 -0
- package/execution/PlanStreamingCard.js.map +1 -0
- package/execution/index.d.ts +5 -1
- package/execution/index.d.ts.map +1 -1
- package/execution/index.js +2 -0
- package/execution/index.js.map +1 -1
- package/execution/useCreateAgentExecution.d.ts +10 -0
- package/execution/useCreateAgentExecution.d.ts.map +1 -1
- package/execution/useCreateAgentExecution.js +5 -1
- package/execution/useCreateAgentExecution.js.map +1 -1
- package/github/decodeGitHubContent.d.ts +29 -0
- package/github/decodeGitHubContent.d.ts.map +1 -0
- package/github/decodeGitHubContent.js +72 -0
- package/github/decodeGitHubContent.js.map +1 -0
- package/github/index.d.ts +1 -0
- package/github/index.d.ts.map +1 -1
- package/github/index.js +1 -0
- package/github/index.js.map +1 -1
- package/github/useGitHubFileReader.d.ts +26 -0
- package/github/useGitHubFileReader.d.ts.map +1 -0
- package/github/useGitHubFileReader.js +106 -0
- package/github/useGitHubFileReader.js.map +1 -0
- package/github/useGitHubTreeLister.d.ts.map +1 -1
- package/github/useGitHubTreeLister.js +6 -2
- package/github/useGitHubTreeLister.js.map +1 -1
- package/index.d.ts +9 -9
- package/index.d.ts.map +1 -1
- package/index.js +5 -5
- package/index.js.map +1 -1
- package/internal/ResizableSplit.d.ts +72 -22
- package/internal/ResizableSplit.d.ts.map +1 -1
- package/internal/ResizableSplit.js +96 -38
- package/internal/ResizableSplit.js.map +1 -1
- package/internal/VirtualizedThread.d.ts +5 -3
- package/internal/VirtualizedThread.d.ts.map +1 -1
- package/internal/VirtualizedThread.js +6 -4
- package/internal/VirtualizedThread.js.map +1 -1
- package/internal/file-icons/index.d.ts +17 -0
- package/internal/file-icons/index.d.ts.map +1 -0
- package/internal/file-icons/index.js +60 -0
- package/internal/file-icons/index.js.map +1 -0
- package/internal/file-tree/FileTreeNode.d.ts +18 -1
- package/internal/file-tree/FileTreeNode.d.ts.map +1 -1
- package/internal/file-tree/FileTreeNode.js +11 -2
- package/internal/file-tree/FileTreeNode.js.map +1 -1
- package/internal/markdown-components.d.ts +38 -1
- package/internal/markdown-components.d.ts.map +1 -1
- package/internal/markdown-components.js +86 -11
- package/internal/markdown-components.js.map +1 -1
- package/{workflow → internal}/motion-preference.d.ts +7 -4
- package/internal/motion-preference.d.ts.map +1 -0
- package/{workflow → internal}/motion-preference.js +7 -4
- package/internal/motion-preference.js.map +1 -0
- package/internal/store/index.d.ts +33 -0
- package/internal/store/index.d.ts.map +1 -1
- package/internal/store/index.js +59 -0
- package/internal/store/index.js.map +1 -1
- package/internal/store/workspace-editors-store.d.ts +145 -0
- package/internal/store/workspace-editors-store.d.ts.map +1 -0
- package/internal/store/workspace-editors-store.js +208 -0
- package/internal/store/workspace-editors-store.js.map +1 -0
- package/internal/store/workspace-file-selection-store.d.ts +38 -0
- package/internal/store/workspace-file-selection-store.d.ts.map +1 -0
- package/internal/store/workspace-file-selection-store.js +62 -0
- package/internal/store/workspace-file-selection-store.js.map +1 -0
- package/internal/useRevealLine.d.ts +49 -0
- package/internal/useRevealLine.d.ts.map +1 -0
- package/internal/useRevealLine.js +43 -0
- package/internal/useRevealLine.js.map +1 -0
- package/library/detect-plan-artifact.d.ts +21 -0
- package/library/detect-plan-artifact.d.ts.map +1 -1
- package/library/detect-plan-artifact.js +20 -0
- package/library/detect-plan-artifact.js.map +1 -1
- package/library/detect-streaming-plan.d.ts +45 -0
- package/library/detect-streaming-plan.d.ts.map +1 -0
- package/library/detect-streaming-plan.js +83 -0
- package/library/detect-streaming-plan.js.map +1 -0
- package/library/index.d.ts +4 -1
- package/library/index.d.ts.map +1 -1
- package/library/index.js +2 -1
- package/library/index.js.map +1 -1
- package/package.json +4 -4
- package/session/NewSessionViewer.d.ts +19 -4
- package/session/NewSessionViewer.d.ts.map +1 -1
- package/session/NewSessionViewer.js +52 -25
- package/session/NewSessionViewer.js.map +1 -1
- package/session/PlanEditor.d.ts +55 -0
- package/session/PlanEditor.d.ts.map +1 -0
- package/session/PlanEditor.js +88 -0
- package/session/PlanEditor.js.map +1 -0
- package/session/PlanStreamingDocument.d.ts +30 -0
- package/session/PlanStreamingDocument.d.ts.map +1 -0
- package/session/PlanStreamingDocument.js +37 -0
- package/session/PlanStreamingDocument.js.map +1 -0
- package/session/SessionPanelChip.d.ts +26 -0
- package/session/SessionPanelChip.d.ts.map +1 -0
- package/session/SessionPanelChip.js +40 -0
- package/session/SessionPanelChip.js.map +1 -0
- package/session/SessionViewer.d.ts +34 -7
- package/session/SessionViewer.d.ts.map +1 -1
- package/session/SessionViewer.js +315 -33
- package/session/SessionViewer.js.map +1 -1
- package/session/{inspector → facets}/ArtifactsTab.d.ts +10 -2
- package/session/facets/ArtifactsTab.d.ts.map +1 -0
- package/session/{inspector → facets}/ArtifactsTab.js +8 -3
- package/session/facets/ArtifactsTab.js.map +1 -0
- package/session/{inspector → facets}/ChangesTab.d.ts +3 -3
- package/session/facets/ChangesTab.d.ts.map +1 -0
- package/session/{inspector → facets}/ChangesTab.js +3 -3
- package/session/facets/ChangesTab.js.map +1 -0
- package/session/facets/InspectTab.d.ts.map +1 -0
- package/session/facets/InspectTab.js.map +1 -0
- package/session/{inspector → facets}/SetupTab.d.ts +11 -2
- package/session/facets/SetupTab.d.ts.map +1 -0
- package/session/{inspector → facets}/SetupTab.js +4 -3
- package/session/facets/SetupTab.js.map +1 -0
- package/session/{inspector → facets}/UsageTab.d.ts +1 -1
- package/session/facets/UsageTab.d.ts.map +1 -0
- package/session/{inspector → facets}/UsageTab.js +1 -1
- package/session/facets/UsageTab.js.map +1 -0
- package/session/{inspector → facets}/index.d.ts +0 -6
- package/session/facets/index.d.ts.map +1 -0
- package/session/{inspector → facets}/index.js +0 -3
- package/session/facets/index.js.map +1 -0
- package/session/index.d.ts +11 -2
- package/session/index.d.ts.map +1 -1
- package/session/index.js +15 -2
- package/session/index.js.map +1 -1
- package/session/plan-document.d.ts +9 -0
- package/session/plan-document.d.ts.map +1 -0
- package/session/plan-document.js +17 -0
- package/session/plan-document.js.map +1 -0
- package/session/useOpenFileChange.d.ts +20 -0
- package/session/useOpenFileChange.d.ts.map +1 -0
- package/session/useOpenFileChange.js +31 -0
- package/session/useOpenFileChange.js.map +1 -0
- package/session/usePlanDraft.d.ts +52 -0
- package/session/usePlanDraft.d.ts.map +1 -0
- package/session/usePlanDraft.js +63 -0
- package/session/usePlanDraft.js.map +1 -0
- package/session/useSessionConversation.d.ts +6 -0
- package/session/useSessionConversation.d.ts.map +1 -1
- package/session/useSessionConversation.js +1 -0
- package/session/useSessionConversation.js.map +1 -1
- package/session/useSessionPageFlow.d.ts.map +1 -1
- package/session/useSessionPageFlow.js +1 -0
- package/session/useSessionPageFlow.js.map +1 -1
- package/session/useSessionPanel.d.ts +120 -0
- package/session/useSessionPanel.d.ts.map +1 -0
- package/session/useSessionPanel.js +130 -0
- package/session/useSessionPanel.js.map +1 -0
- package/session/useSessionRailViews.d.ts +45 -0
- package/session/useSessionRailViews.d.ts.map +1 -0
- package/session/useSessionRailViews.js +105 -0
- package/session/useSessionRailViews.js.map +1 -0
- package/src/composer/SessionComposer.tsx +52 -10
- package/src/composer/__tests__/SessionComposer-contract.test.tsx +58 -4
- package/src/execution/ArtifactContentRenderer.tsx +101 -24
- package/src/execution/FilePathContext.tsx +8 -1
- package/src/execution/FilePathLink.tsx +22 -6
- package/src/execution/MessageEntry.tsx +111 -1
- package/src/execution/MessageThread.tsx +291 -36
- package/src/execution/PlanArtifactCard.tsx +63 -31
- package/src/execution/PlanDocumentMessage.tsx +96 -0
- package/src/execution/PlanStreamingCard.tsx +137 -0
- package/src/execution/__tests__/ArtifactContentRenderer.test.tsx +80 -1
- package/src/execution/__tests__/FilePathLink.test.tsx +87 -0
- package/src/execution/__tests__/MessageThread.test.tsx +101 -0
- package/src/execution/__tests__/PlanArtifactCard.test.tsx +66 -12
- package/src/execution/__tests__/PlanDocumentMessage.test.tsx +55 -0
- package/src/execution/__tests__/PlanStreamingCard.test.tsx +49 -0
- package/src/execution/__tests__/buildThreadItems-plan-completion.test.ts +504 -22
- package/src/execution/__tests__/message-entry.test.tsx +48 -0
- package/src/execution/__tests__/useCreateAgentExecution.test.tsx +85 -0
- package/src/execution/index.ts +7 -1
- package/src/execution/useCreateAgentExecution.ts +16 -1
- package/src/github/__tests__/decodeGitHubContent.test.ts +102 -0
- package/src/github/__tests__/useGitHubFileReader.test.ts +183 -0
- package/src/github/decodeGitHubContent.ts +83 -0
- package/src/github/index.ts +1 -0
- package/src/github/useGitHubFileReader.ts +152 -0
- package/src/github/useGitHubTreeLister.ts +6 -2
- package/src/index.ts +63 -9
- package/src/internal/ResizableSplit.tsx +184 -51
- package/src/internal/VirtualizedThread.tsx +12 -4
- package/src/internal/__tests__/ResizableSplit.test.tsx +125 -3
- package/src/internal/__tests__/markdown-components.test.tsx +68 -0
- package/src/internal/__tests__/useRevealLine.test.tsx +97 -0
- package/src/internal/file-icons/__tests__/file-icons.test.tsx +35 -0
- package/src/internal/file-icons/index.tsx +137 -0
- package/src/internal/file-tree/FileTreeNode.tsx +43 -3
- package/src/internal/file-tree/__tests__/FileTreeNode-explorer.test.tsx +86 -0
- package/src/internal/markdown-components.tsx +116 -11
- package/src/{workflow → internal}/motion-preference.ts +7 -4
- package/src/internal/store/__tests__/workspace-editors-store.test.ts +216 -0
- package/src/internal/store/__tests__/workspace-file-selection-store.test.ts +118 -0
- package/src/internal/store/index.ts +94 -0
- package/src/internal/store/workspace-editors-store.ts +315 -0
- package/src/internal/store/workspace-file-selection-store.ts +88 -0
- package/src/internal/useRevealLine.ts +81 -0
- package/src/library/__tests__/detect-plan-artifact.test.ts +48 -0
- package/src/library/__tests__/detect-streaming-plan.test.ts +234 -0
- package/src/library/detect-plan-artifact.ts +35 -0
- package/src/library/detect-streaming-plan.ts +108 -0
- package/src/library/index.ts +5 -0
- package/src/session/NewSessionViewer.tsx +123 -55
- package/src/session/PlanEditor.tsx +361 -0
- package/src/session/PlanStreamingDocument.tsx +97 -0
- package/src/session/SessionPanelChip.tsx +103 -0
- package/src/session/SessionViewer.tsx +617 -90
- package/src/session/__tests__/NewSessionViewer.test.tsx +148 -0
- package/src/session/__tests__/PlanEditor.test.tsx +217 -0
- package/src/session/__tests__/PlanStreamingDocument.test.tsx +50 -0
- package/src/session/__tests__/SessionPanelChip.test.tsx +42 -0
- package/src/session/__tests__/SessionViewer-fileReviewDock.test.tsx +9 -4
- package/src/session/__tests__/SessionViewer-transcriptFileOpen.test.tsx +205 -0
- package/src/session/__tests__/audienceWiring.test.tsx +55 -19
- package/src/session/__tests__/useOpenFileChange.test.tsx +82 -0
- package/src/session/__tests__/usePlanDraft.test.ts +102 -0
- package/src/session/__tests__/useSessionPanel.test.ts +298 -0
- package/src/session/__tests__/useSessionRailViews.test.tsx +124 -0
- package/src/session/{inspector → facets}/ArtifactsTab.tsx +27 -5
- package/src/session/{inspector → facets}/ChangesTab.tsx +3 -3
- package/src/session/{inspector → facets}/SetupTab.tsx +13 -1
- package/src/session/{inspector → facets}/UsageTab.tsx +1 -1
- package/src/session/{inspector → facets}/__tests__/ArtifactsTab.test.tsx +35 -1
- package/src/session/facets/__tests__/SetupTab.test.tsx +44 -0
- package/src/session/{inspector → facets}/index.ts +0 -16
- package/src/session/index.ts +30 -13
- package/src/session/plan-document.ts +19 -0
- package/src/session/useOpenFileChange.ts +53 -0
- package/src/session/usePlanDraft.ts +109 -0
- package/src/session/useSessionConversation.ts +7 -0
- package/src/session/useSessionPageFlow.ts +1 -0
- package/src/session/useSessionPanel.ts +288 -0
- package/src/session/useSessionRailViews.tsx +200 -0
- package/src/workflow/WorkflowExecutionGraph.tsx +1 -1
- package/src/workflow/index.ts +1 -1
- package/src/workflow/useFollowExecution.ts +1 -1
- package/src/workspace/EditorTabs.tsx +145 -0
- package/src/workspace/ExplorerTree.tsx +247 -0
- package/src/workspace/FileViewer.tsx +516 -0
- package/src/workspace/WorkspaceContentSearch.tsx +478 -0
- package/src/workspace/WorkspaceContentSearcher.ts +70 -0
- package/src/workspace/WorkspaceFileLister.ts +11 -0
- package/src/workspace/WorkspaceFileReader.ts +57 -0
- package/src/workspace/WorkspaceFileSearch.tsx +429 -0
- package/src/workspace/WorkspaceSurface.tsx +781 -0
- package/src/workspace/__tests__/EditorTabs.test.tsx +100 -0
- package/src/workspace/__tests__/ExplorerTree.test.tsx +152 -0
- package/src/workspace/__tests__/FileViewer.test.tsx +421 -0
- package/src/workspace/__tests__/WorkspaceContentSearch.test.tsx +196 -0
- package/src/workspace/__tests__/WorkspaceFileSearch.test.tsx +206 -0
- package/src/workspace/__tests__/WorkspaceSurface.test.tsx +348 -0
- package/src/workspace/__tests__/findChangeForSelection.test.ts +132 -0
- package/src/workspace/__tests__/matchContentPreview.test.ts +55 -0
- package/src/workspace/__tests__/matchWorkspaceFiles.test.ts +104 -0
- package/src/workspace/__tests__/resolveWorkspaceFileSelection.test.ts +135 -0
- package/src/workspace/__tests__/useWorkspaceContentSearch.test.tsx +196 -0
- package/src/workspace/__tests__/useWorkspaceFileContent.test.tsx +190 -0
- package/src/workspace/__tests__/useWorkspaceFileSearch.test.tsx +162 -0
- package/src/workspace/findChangeForSelection.ts +61 -0
- package/src/workspace/index.ts +56 -2
- package/src/workspace/matchContentPreview.ts +51 -0
- package/src/workspace/matchWorkspaceFiles.ts +86 -0
- package/src/workspace/resolveWorkspaceFileSelection.ts +119 -0
- package/src/workspace/useWorkspaceContentSearch.ts +228 -0
- package/src/workspace/useWorkspaceFileContent.ts +129 -0
- package/src/workspace/useWorkspaceFileSearch.ts +184 -0
- package/src/workspace/useWorkspaceFiles.ts +27 -27
- package/src/workspace/workspaceListingCache.ts +93 -0
- package/styles.css +1 -1
- package/workflow/WorkflowExecutionGraph.js +1 -1
- package/workflow/WorkflowExecutionGraph.js.map +1 -1
- package/workflow/index.d.ts +1 -1
- package/workflow/index.d.ts.map +1 -1
- package/workflow/index.js +1 -1
- package/workflow/index.js.map +1 -1
- package/workflow/useFollowExecution.js +1 -1
- package/workflow/useFollowExecution.js.map +1 -1
- package/workspace/EditorTabs.d.ts +29 -0
- package/workspace/EditorTabs.d.ts.map +1 -0
- package/workspace/EditorTabs.js +66 -0
- package/workspace/EditorTabs.js.map +1 -0
- package/workspace/ExplorerTree.d.ts +32 -0
- package/workspace/ExplorerTree.d.ts.map +1 -0
- package/workspace/ExplorerTree.js +45 -0
- package/workspace/ExplorerTree.js.map +1 -0
- package/workspace/FileViewer.d.ts +93 -0
- package/workspace/FileViewer.d.ts.map +1 -0
- package/workspace/FileViewer.js +182 -0
- package/workspace/FileViewer.js.map +1 -0
- package/workspace/WorkspaceContentSearch.d.ts +41 -0
- package/workspace/WorkspaceContentSearch.d.ts.map +1 -0
- package/workspace/WorkspaceContentSearch.js +195 -0
- package/workspace/WorkspaceContentSearch.js.map +1 -0
- package/workspace/WorkspaceContentSearcher.d.ts +59 -0
- package/workspace/WorkspaceContentSearcher.d.ts.map +1 -0
- package/workspace/WorkspaceContentSearcher.js +7 -0
- package/workspace/WorkspaceContentSearcher.js.map +1 -0
- package/workspace/WorkspaceFileLister.d.ts +11 -0
- package/workspace/WorkspaceFileLister.d.ts.map +1 -1
- package/workspace/WorkspaceFileReader.d.ts +48 -0
- package/workspace/WorkspaceFileReader.d.ts.map +1 -0
- package/workspace/WorkspaceFileReader.js +11 -0
- package/workspace/WorkspaceFileReader.js.map +1 -0
- package/workspace/WorkspaceFileSearch.d.ts +32 -0
- package/workspace/WorkspaceFileSearch.d.ts.map +1 -0
- package/workspace/WorkspaceFileSearch.js +155 -0
- package/workspace/WorkspaceFileSearch.js.map +1 -0
- package/workspace/WorkspaceSurface.d.ts +151 -0
- package/workspace/WorkspaceSurface.d.ts.map +1 -0
- package/workspace/WorkspaceSurface.js +184 -0
- package/workspace/WorkspaceSurface.js.map +1 -0
- package/workspace/findChangeForSelection.d.ts +19 -0
- package/workspace/findChangeForSelection.d.ts.map +1 -0
- package/workspace/findChangeForSelection.js +46 -0
- package/workspace/findChangeForSelection.js.map +1 -0
- package/workspace/index.d.ts +24 -2
- package/workspace/index.d.ts.map +1 -1
- package/workspace/index.js +13 -1
- package/workspace/index.js.map +1 -1
- package/workspace/matchContentPreview.d.ts +21 -0
- package/workspace/matchContentPreview.d.ts.map +1 -0
- package/workspace/matchContentPreview.js +36 -0
- package/workspace/matchContentPreview.js.map +1 -0
- package/workspace/matchWorkspaceFiles.d.ts +30 -0
- package/workspace/matchWorkspaceFiles.d.ts.map +1 -0
- package/workspace/matchWorkspaceFiles.js +58 -0
- package/workspace/matchWorkspaceFiles.js.map +1 -0
- package/workspace/resolveWorkspaceFileSelection.d.ts +19 -0
- package/workspace/resolveWorkspaceFileSelection.d.ts.map +1 -0
- package/workspace/resolveWorkspaceFileSelection.js +115 -0
- package/workspace/resolveWorkspaceFileSelection.js.map +1 -0
- package/workspace/useWorkspaceContentSearch.d.ts +69 -0
- package/workspace/useWorkspaceContentSearch.d.ts.map +1 -0
- package/workspace/useWorkspaceContentSearch.js +154 -0
- package/workspace/useWorkspaceContentSearch.js.map +1 -0
- package/workspace/useWorkspaceFileContent.d.ts +73 -0
- package/workspace/useWorkspaceFileContent.d.ts.map +1 -0
- package/workspace/useWorkspaceFileContent.js +57 -0
- package/workspace/useWorkspaceFileContent.js.map +1 -0
- package/workspace/useWorkspaceFileSearch.d.ts +61 -0
- package/workspace/useWorkspaceFileSearch.d.ts.map +1 -0
- package/workspace/useWorkspaceFileSearch.js +119 -0
- package/workspace/useWorkspaceFileSearch.js.map +1 -0
- package/workspace/useWorkspaceFiles.d.ts +13 -5
- package/workspace/useWorkspaceFiles.d.ts.map +1 -1
- package/workspace/useWorkspaceFiles.js +18 -19
- package/workspace/useWorkspaceFiles.js.map +1 -1
- package/workspace/workspaceListingCache.d.ts +47 -0
- package/workspace/workspaceListingCache.d.ts.map +1 -0
- package/workspace/workspaceListingCache.js +55 -0
- package/workspace/workspaceListingCache.js.map +1 -0
- package/session/inspector/ArtifactsTab.d.ts.map +0 -1
- package/session/inspector/ArtifactsTab.js.map +0 -1
- package/session/inspector/ChangesTab.d.ts.map +0 -1
- package/session/inspector/ChangesTab.js.map +0 -1
- package/session/inspector/InspectTab.d.ts.map +0 -1
- package/session/inspector/InspectTab.js.map +0 -1
- package/session/inspector/SessionInspector.d.ts +0 -64
- package/session/inspector/SessionInspector.d.ts.map +0 -1
- package/session/inspector/SessionInspector.js +0 -53
- package/session/inspector/SessionInspector.js.map +0 -1
- package/session/inspector/SetupTab.d.ts.map +0 -1
- package/session/inspector/SetupTab.js.map +0 -1
- package/session/inspector/UsageTab.d.ts.map +0 -1
- package/session/inspector/UsageTab.js.map +0 -1
- package/session/inspector/WorkspaceTab.d.ts +0 -35
- package/session/inspector/WorkspaceTab.d.ts.map +0 -1
- package/session/inspector/WorkspaceTab.js +0 -75
- package/session/inspector/WorkspaceTab.js.map +0 -1
- package/session/inspector/index.d.ts.map +0 -1
- package/session/inspector/index.js.map +0 -1
- package/session/inspector/useSessionInspector.d.ts +0 -49
- package/session/inspector/useSessionInspector.d.ts.map +0 -1
- package/session/inspector/useSessionInspector.js +0 -122
- package/session/inspector/useSessionInspector.js.map +0 -1
- package/src/session/inspector/SessionInspector.tsx +0 -162
- package/src/session/inspector/WorkspaceTab.tsx +0 -245
- package/src/session/inspector/__tests__/useSessionInspector.test.ts +0 -251
- package/src/session/inspector/useSessionInspector.ts +0 -178
- package/src/workspace/WorkspaceEntryFiles.tsx +0 -196
- package/workflow/motion-preference.d.ts.map +0 -1
- package/workflow/motion-preference.js.map +0 -1
- package/workspace/WorkspaceEntryFiles.d.ts +0 -22
- package/workspace/WorkspaceEntryFiles.d.ts.map +0 -1
- package/workspace/WorkspaceEntryFiles.js +0 -58
- package/workspace/WorkspaceEntryFiles.js.map +0 -1
- /package/session/{inspector → facets}/InspectTab.d.ts +0 -0
- /package/session/{inspector → facets}/InspectTab.js +0 -0
- /package/src/{workflow → internal}/__tests__/motion-preference.test.ts +0 -0
- /package/src/session/{inspector → facets}/InspectTab.tsx +0 -0
- /package/src/session/{inspector → facets}/__tests__/ChangesTab.test.tsx +0 -0
package/src/index.ts
CHANGED
|
@@ -66,23 +66,58 @@ export type {
|
|
|
66
66
|
export {
|
|
67
67
|
useWorkspaceEntries,
|
|
68
68
|
useWorkspaceFiles,
|
|
69
|
+
useWorkspaceFileContent,
|
|
70
|
+
useWorkspaceFileSearch,
|
|
71
|
+
useWorkspaceContentSearch,
|
|
69
72
|
useWorkspaceSources,
|
|
73
|
+
MAX_WORKSPACE_FILE_READ_BYTES,
|
|
70
74
|
WorkspaceEditor,
|
|
71
|
-
|
|
75
|
+
WorkspaceFileSearch,
|
|
76
|
+
WorkspaceContentSearch,
|
|
72
77
|
WorkspaceSummary,
|
|
78
|
+
FileViewer,
|
|
79
|
+
WorkspaceSurface,
|
|
80
|
+
ExplorerTree,
|
|
81
|
+
virtualEntryId,
|
|
82
|
+
isVirtualEntryId,
|
|
73
83
|
} from "./workspace/index.js";
|
|
74
84
|
export type {
|
|
75
85
|
WorkspaceEntry,
|
|
76
86
|
WorkspaceFileEntry,
|
|
77
87
|
WorkspaceFileLister,
|
|
88
|
+
WorkspaceFileContent,
|
|
89
|
+
WorkspaceFileReader,
|
|
78
90
|
UseWorkspaceEntriesReturn,
|
|
79
91
|
UseWorkspaceFilesOptions,
|
|
80
92
|
UseWorkspaceFilesReturn,
|
|
81
|
-
|
|
93
|
+
UseWorkspaceFileContentOptions,
|
|
94
|
+
UseWorkspaceFileContentReturn,
|
|
95
|
+
UseWorkspaceFileSearchOptions,
|
|
96
|
+
UseWorkspaceFileSearchReturn,
|
|
97
|
+
WorkspaceFileSearchGroup,
|
|
98
|
+
WorkspaceFileMatch,
|
|
99
|
+
WorkspaceFileSearchProps,
|
|
100
|
+
WorkspaceContentMatch,
|
|
101
|
+
WorkspaceContentSearchResult,
|
|
102
|
+
WorkspaceContentSearcher,
|
|
103
|
+
UseWorkspaceContentSearchOptions,
|
|
104
|
+
UseWorkspaceContentSearchReturn,
|
|
105
|
+
WorkspaceContentSearchGroup,
|
|
106
|
+
WorkspaceContentSearchProps,
|
|
107
|
+
FileViewerProps,
|
|
108
|
+
FileViewerHandle,
|
|
109
|
+
SelectedWorkspaceFile,
|
|
82
110
|
UseWorkspaceSourcesOptions,
|
|
83
111
|
UseWorkspaceSourcesReturn,
|
|
84
112
|
WorkspaceEditorProps,
|
|
85
113
|
WorkspaceSummaryProps,
|
|
114
|
+
WorkspaceSurfaceProps,
|
|
115
|
+
SurfaceRailView,
|
|
116
|
+
SurfaceVirtualDocument,
|
|
117
|
+
ExplorerTreeProps,
|
|
118
|
+
OpenEditor,
|
|
119
|
+
OpenFileOptions,
|
|
120
|
+
RevealTarget,
|
|
86
121
|
} from "./workspace/index.js";
|
|
87
122
|
|
|
88
123
|
// Session — data hooks, behavior hooks, utilities (Session aggregate + conversation lifecycle)
|
|
@@ -112,9 +147,13 @@ export {
|
|
|
112
147
|
resolvedSubject,
|
|
113
148
|
SessionViewer,
|
|
114
149
|
NewSessionViewer,
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
150
|
+
useSessionPanel,
|
|
151
|
+
usePlanDraft,
|
|
152
|
+
planDraftKey,
|
|
153
|
+
PlanEditor,
|
|
154
|
+
PlanStreamingDocument,
|
|
155
|
+
PLAN_DOCUMENT_ENTRY_ID,
|
|
156
|
+
PLAN_DOCUMENT_PATH,
|
|
118
157
|
SetupTab,
|
|
119
158
|
} from "./session/index.js";
|
|
120
159
|
export type {
|
|
@@ -152,13 +191,14 @@ export type {
|
|
|
152
191
|
SearchResultGroup,
|
|
153
192
|
SessionViewerProps,
|
|
154
193
|
NewSessionViewerProps,
|
|
194
|
+
SessionPanelController,
|
|
195
|
+
UseSessionPanelOptions,
|
|
196
|
+
PlanDraftController,
|
|
197
|
+
PlanEditorProps,
|
|
198
|
+
PlanStreamingDocumentProps,
|
|
155
199
|
ExecutionTargetOption,
|
|
156
200
|
RuntimeEnvProvider,
|
|
157
201
|
SessionAudience,
|
|
158
|
-
SessionInspectorProps,
|
|
159
|
-
SessionInspectorTabId,
|
|
160
|
-
UseSessionInspectorOptions,
|
|
161
|
-
UseSessionInspectorReturn,
|
|
162
202
|
SetupTabProps,
|
|
163
203
|
SetupTabMutationCallbacks,
|
|
164
204
|
SelectedThreadItem,
|
|
@@ -208,6 +248,9 @@ export {
|
|
|
208
248
|
SummarizationBadge,
|
|
209
249
|
SummarizationCard,
|
|
210
250
|
PlanCompletionCard,
|
|
251
|
+
PlanArtifactCard,
|
|
252
|
+
PlanStreamingCard,
|
|
253
|
+
PlanDocumentMessage,
|
|
211
254
|
useContextWindow,
|
|
212
255
|
formatCost,
|
|
213
256
|
formatTokenCount,
|
|
@@ -224,6 +267,7 @@ export {
|
|
|
224
267
|
resolveToolCategoryFromKind,
|
|
225
268
|
toolKindToCategoryInfo,
|
|
226
269
|
defaultDisclosureForCategory,
|
|
270
|
+
extractPrimaryArg,
|
|
227
271
|
McpToolDetail,
|
|
228
272
|
parseMcpResult,
|
|
229
273
|
formatDuration,
|
|
@@ -302,6 +346,9 @@ export type {
|
|
|
302
346
|
SummarizationBadgeProps,
|
|
303
347
|
SummarizationCardProps,
|
|
304
348
|
PlanCompletionCardProps,
|
|
349
|
+
PlanArtifactCardProps,
|
|
350
|
+
PlanStreamingCardProps,
|
|
351
|
+
PlanDocumentMessageProps,
|
|
305
352
|
ContextHealth,
|
|
306
353
|
SummarizationEventView,
|
|
307
354
|
UseContextWindowReturn,
|
|
@@ -320,6 +367,7 @@ export type {
|
|
|
320
367
|
SubAgentSectionProps,
|
|
321
368
|
MessageEntryProps,
|
|
322
369
|
MessageThreadProps,
|
|
370
|
+
ThreadContentColumn,
|
|
323
371
|
ThreadSkeletonProps,
|
|
324
372
|
FollowUpInputProps,
|
|
325
373
|
ApprovalCardProps,
|
|
@@ -519,6 +567,7 @@ export {
|
|
|
519
567
|
useGitHubRepos,
|
|
520
568
|
useGitHubSearch,
|
|
521
569
|
useGitHubTreeLister,
|
|
570
|
+
useGitHubFileReader,
|
|
522
571
|
parseGitUrl,
|
|
523
572
|
GitHubRepoPicker,
|
|
524
573
|
GITHUB_CALLBACK_MESSAGE_TYPE,
|
|
@@ -932,6 +981,9 @@ export {
|
|
|
932
981
|
useDetectSkillPackage,
|
|
933
982
|
isPlanArtifact,
|
|
934
983
|
findPlanArtifact,
|
|
984
|
+
findLatestSessionPlan,
|
|
985
|
+
findStreamingPlan,
|
|
986
|
+
PLAN_ARTIFACT_NAME,
|
|
935
987
|
parseResourceYaml,
|
|
936
988
|
serializeAgentYaml,
|
|
937
989
|
serializeMcpServerYaml,
|
|
@@ -954,6 +1006,8 @@ export type {
|
|
|
954
1006
|
StigmerResourceKind,
|
|
955
1007
|
StigmerResourceDetection,
|
|
956
1008
|
SkillPackageDetection,
|
|
1009
|
+
SessionPlan,
|
|
1010
|
+
StreamingPlan,
|
|
957
1011
|
UseDetectSkillPackageReturn,
|
|
958
1012
|
ParsedResource,
|
|
959
1013
|
UseApplyResourceReturn,
|
|
@@ -9,29 +9,67 @@ import {
|
|
|
9
9
|
} from "react";
|
|
10
10
|
import { cn } from "@stigmer/theme";
|
|
11
11
|
|
|
12
|
+
/** Which pane carries the drag-controlled pixel width; its sibling flexes. */
|
|
13
|
+
export type ResizablePane = "primary" | "secondary";
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Which pane (if any) collapses below the `lg` breakpoint, leaving its sibling
|
|
17
|
+
* full-width. Use this to hide the pixel-sized pane on narrow screens — always
|
|
18
|
+
* pair it with {@link ResizableSplitProps.resizablePane} (hide the fixed pane so
|
|
19
|
+
* the visible sibling is the flexing one and fills the row). `"none"` keeps both
|
|
20
|
+
* panes at every width.
|
|
21
|
+
*/
|
|
22
|
+
export type ResizableCollapse = "primary" | "secondary" | "none";
|
|
23
|
+
|
|
12
24
|
/** Props for {@link ResizableSplit}. */
|
|
13
25
|
export interface ResizableSplitProps {
|
|
14
|
-
/** Content rendered in the
|
|
26
|
+
/** Content rendered in the first (left) region. */
|
|
15
27
|
readonly primary: ReactNode;
|
|
16
|
-
/** Content rendered in the
|
|
28
|
+
/** Content rendered in the second (right) region. */
|
|
17
29
|
readonly secondary: ReactNode;
|
|
18
30
|
/**
|
|
19
|
-
*
|
|
31
|
+
* Which pane is pixel-sized and drag-resizable; the other flexes to fill.
|
|
32
|
+
* Child render order is fixed (`primary` then `secondary`) regardless of this
|
|
33
|
+
* value, so flipping it re-flows the layout without remounting either child.
|
|
34
|
+
* @default "secondary"
|
|
35
|
+
*/
|
|
36
|
+
readonly resizablePane?: ResizablePane;
|
|
37
|
+
/**
|
|
38
|
+
* Default width of the resizable pane in pixels.
|
|
20
39
|
* Overridden by a persisted value when `storageKey` is set.
|
|
21
40
|
* @default 384
|
|
22
41
|
*/
|
|
23
42
|
readonly defaultSize?: number;
|
|
24
|
-
/** Minimum width of the
|
|
43
|
+
/** Minimum width of the resizable pane in pixels. @default 280 */
|
|
25
44
|
readonly minSize?: number;
|
|
26
|
-
/** Maximum width of the
|
|
45
|
+
/** Maximum width of the resizable pane in pixels. @default 800 */
|
|
27
46
|
readonly maxSize?: number;
|
|
28
47
|
/**
|
|
29
|
-
* `localStorage` key for persisting the
|
|
30
|
-
* When omitted, the
|
|
48
|
+
* `localStorage` key for persisting the pane width across sessions.
|
|
49
|
+
* When omitted, the pane width resets to `defaultSize` on remount.
|
|
50
|
+
* Changing this key (or `resizablePane`) re-initializes the width from the
|
|
51
|
+
* new key without remounting — the mechanism the session layout uses to keep
|
|
52
|
+
* a distinct persisted width per mode.
|
|
31
53
|
*/
|
|
32
54
|
readonly storageKey?: string;
|
|
55
|
+
/** Which pane collapses below the `lg` breakpoint. @default "none" */
|
|
56
|
+
readonly responsiveCollapse?: ResizableCollapse;
|
|
57
|
+
/**
|
|
58
|
+
* Which pane (if any) is collapsed at every width, hiding the drag handle and
|
|
59
|
+
* letting the sibling fill the row. Unlike conditional rendering at the call
|
|
60
|
+
* site, collapsing through this prop keeps both children mounted at stable
|
|
61
|
+
* tree positions — the session panel uses it so opening/closing the panel
|
|
62
|
+
* never remounts the conversation. The persisted width survives a collapse
|
|
63
|
+
* and applies again on expand.
|
|
64
|
+
* @default "none"
|
|
65
|
+
*/
|
|
66
|
+
readonly collapsedPane?: ResizableCollapse;
|
|
67
|
+
/**
|
|
68
|
+
* Accessible label for the drag separator. @default "Resize panel"
|
|
69
|
+
*/
|
|
70
|
+
readonly ariaLabel?: string;
|
|
33
71
|
/**
|
|
34
|
-
* Called whenever the
|
|
72
|
+
* Called whenever the resizable pane width changes (during drag
|
|
35
73
|
* and on initial mount from persisted state). Consumers use this
|
|
36
74
|
* to thread the width into layout-dependent calculations like
|
|
37
75
|
* `WorkflowExecutionGraph.panelOffsetPx`.
|
|
@@ -44,62 +82,111 @@ export interface ResizableSplitProps {
|
|
|
44
82
|
const KEYBOARD_STEP_PX = 20;
|
|
45
83
|
|
|
46
84
|
/**
|
|
47
|
-
*
|
|
85
|
+
* Read the initial pane width for a given storage key, falling back to
|
|
86
|
+
* `defaultSize` when there is no valid persisted value. Pure of React state so
|
|
87
|
+
* it can seed `useState` and re-seed on a key/pane change.
|
|
88
|
+
*/
|
|
89
|
+
function readInitialWidth(
|
|
90
|
+
storageKey: string | undefined,
|
|
91
|
+
defaultSize: number,
|
|
92
|
+
minSize: number,
|
|
93
|
+
maxSize: number,
|
|
94
|
+
): number {
|
|
95
|
+
if (storageKey) {
|
|
96
|
+
try {
|
|
97
|
+
const stored = localStorage.getItem(storageKey);
|
|
98
|
+
if (stored) {
|
|
99
|
+
const parsed = Number(stored);
|
|
100
|
+
if (Number.isFinite(parsed) && parsed >= minSize && parsed <= maxSize) {
|
|
101
|
+
return parsed;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
} catch {
|
|
105
|
+
/* localStorage may be unavailable */
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
return defaultSize;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Horizontal split layout with one drag-resizable pixel-sized pane and one
|
|
113
|
+
* flexible pane.
|
|
48
114
|
*
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
*
|
|
115
|
+
* By default the right region (`secondary`) is pixel-sized and the left
|
|
116
|
+
* (`primary`) flexes. Set `resizablePane="primary"` to flip which side carries
|
|
117
|
+
* the width — the session layout uses this to invert between a chat-dominant
|
|
118
|
+
* layout (inspector on the right, fixed) and a workspace-dominant layout (chat
|
|
119
|
+
* on the left, fixed). Render order never changes, so flipping re-flows the row
|
|
120
|
+
* without remounting either child (preserving streaming/scroll state).
|
|
52
121
|
*
|
|
53
122
|
* Design:
|
|
54
123
|
* - Pointer-based drag with `setPointerCapture` for reliable tracking
|
|
55
124
|
* - `requestAnimationFrame` coalescing during drag (DD-009 pattern)
|
|
56
|
-
* - Keyboard accessible:
|
|
57
|
-
*
|
|
125
|
+
* - Keyboard accessible: arrow keys nudge by {@link KEYBOARD_STEP_PX}, oriented
|
|
126
|
+
* so the pane always grows toward its own side
|
|
127
|
+
* - Optional `localStorage` persistence via `storageKey`, re-initialized when
|
|
128
|
+
* the key or resizable side changes (no remount required)
|
|
129
|
+
* - Optional responsive collapse of the pixel pane below `lg`
|
|
58
130
|
* - Styled with `--stgm-*` tokens; no hardcoded colors
|
|
59
131
|
*
|
|
60
132
|
* @example
|
|
61
133
|
* ```tsx
|
|
134
|
+
* // Chat-dominant: inspector fixed on the right (default)
|
|
135
|
+
* <ResizableSplit
|
|
136
|
+
* primary={<Conversation />}
|
|
137
|
+
* secondary={<Inspector />}
|
|
138
|
+
* storageKey="stgm-session-inspector-width"
|
|
139
|
+
* responsiveCollapse="secondary"
|
|
140
|
+
* />
|
|
141
|
+
*
|
|
142
|
+
* // Workspace-dominant: chat fixed on the left
|
|
62
143
|
* <ResizableSplit
|
|
63
|
-
* primary
|
|
64
|
-
*
|
|
65
|
-
*
|
|
66
|
-
*
|
|
67
|
-
*
|
|
68
|
-
* storageKey="wf-exec-inspector-width"
|
|
69
|
-
* onResize={setPanelWidth}
|
|
144
|
+
* resizablePane="primary"
|
|
145
|
+
* primary={<Conversation />}
|
|
146
|
+
* secondary={<WorkspaceSurface />}
|
|
147
|
+
* storageKey="stgm-session-chat-width"
|
|
148
|
+
* responsiveCollapse="primary"
|
|
70
149
|
* />
|
|
71
150
|
* ```
|
|
72
151
|
*/
|
|
73
152
|
export function ResizableSplit({
|
|
74
153
|
primary,
|
|
75
154
|
secondary,
|
|
155
|
+
resizablePane = "secondary",
|
|
76
156
|
defaultSize = 384,
|
|
77
157
|
minSize = 280,
|
|
78
158
|
maxSize = 800,
|
|
79
159
|
storageKey,
|
|
160
|
+
responsiveCollapse = "none",
|
|
161
|
+
collapsedPane = "none",
|
|
162
|
+
ariaLabel = "Resize panel",
|
|
80
163
|
onResize,
|
|
81
164
|
className,
|
|
82
165
|
}: ResizableSplitProps) {
|
|
83
|
-
const
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
166
|
+
const isPrimaryResizable = resizablePane === "primary";
|
|
167
|
+
const isCollapsed = collapsedPane !== "none";
|
|
168
|
+
|
|
169
|
+
const [panelWidth, setPanelWidth] = useState(() =>
|
|
170
|
+
readInitialWidth(storageKey, defaultSize, minSize, maxSize),
|
|
171
|
+
);
|
|
172
|
+
|
|
173
|
+
// Re-initialize the width when the storage key or resizable side changes —
|
|
174
|
+
// the session layout swaps both together on a mode flip and expects the width
|
|
175
|
+
// to come from the new key, not carry over. Adjust-state-during-render
|
|
176
|
+
// (matching `useSessionPanel`) so it lands before paint without a remount.
|
|
177
|
+
const [prevStorageKey, setPrevStorageKey] = useState(storageKey);
|
|
178
|
+
const [prevResizablePane, setPrevResizablePane] = useState(resizablePane);
|
|
179
|
+
if (storageKey !== prevStorageKey || resizablePane !== prevResizablePane) {
|
|
180
|
+
setPrevStorageKey(storageKey);
|
|
181
|
+
setPrevResizablePane(resizablePane);
|
|
182
|
+
setPanelWidth(readInitialWidth(storageKey, defaultSize, minSize, maxSize));
|
|
183
|
+
}
|
|
97
184
|
|
|
98
185
|
const containerRef = useRef<HTMLDivElement>(null);
|
|
99
186
|
const rafRef = useRef(0);
|
|
100
187
|
const isDraggingRef = useRef(false);
|
|
101
188
|
|
|
102
|
-
// Notify consumer of
|
|
189
|
+
// Notify consumer of the current width whenever it changes (incl. on re-init).
|
|
103
190
|
const onResizeRef = useRef(onResize);
|
|
104
191
|
onResizeRef.current = onResize;
|
|
105
192
|
useEffect(() => {
|
|
@@ -116,7 +203,9 @@ export function ResizableSplit({
|
|
|
116
203
|
if (!storageKey) return;
|
|
117
204
|
try {
|
|
118
205
|
localStorage.setItem(storageKey, String(width));
|
|
119
|
-
} catch {
|
|
206
|
+
} catch {
|
|
207
|
+
/* quota or security error */
|
|
208
|
+
}
|
|
120
209
|
},
|
|
121
210
|
[storageKey],
|
|
122
211
|
);
|
|
@@ -140,11 +229,15 @@ export function ResizableSplit({
|
|
|
140
229
|
const container = containerRef.current;
|
|
141
230
|
if (!container) return;
|
|
142
231
|
const rect = container.getBoundingClientRect();
|
|
143
|
-
|
|
144
|
-
|
|
232
|
+
// The resizable pane's width is the distance from its own edge to the
|
|
233
|
+
// pointer: left edge for a primary pane, right edge for a secondary one.
|
|
234
|
+
const raw = isPrimaryResizable
|
|
235
|
+
? clientX - rect.left
|
|
236
|
+
: rect.right - clientX;
|
|
237
|
+
setPanelWidth(clampWidth(raw));
|
|
145
238
|
});
|
|
146
239
|
},
|
|
147
|
-
[clampWidth],
|
|
240
|
+
[clampWidth, isPrimaryResizable],
|
|
148
241
|
);
|
|
149
242
|
|
|
150
243
|
const handlePointerUp = useCallback(
|
|
@@ -160,9 +253,11 @@ export function ResizableSplit({
|
|
|
160
253
|
|
|
161
254
|
const handleKeyDown = useCallback(
|
|
162
255
|
(e: React.KeyboardEvent) => {
|
|
256
|
+
// Arrow keys grow the pane toward its own side: a primary (left) pane
|
|
257
|
+
// grows on ArrowRight, a secondary (right) pane grows on ArrowLeft.
|
|
163
258
|
let delta = 0;
|
|
164
|
-
if (e.key === "ArrowLeft") delta = KEYBOARD_STEP_PX;
|
|
165
|
-
else if (e.key === "ArrowRight") delta = -KEYBOARD_STEP_PX;
|
|
259
|
+
if (e.key === "ArrowLeft") delta = isPrimaryResizable ? -KEYBOARD_STEP_PX : KEYBOARD_STEP_PX;
|
|
260
|
+
else if (e.key === "ArrowRight") delta = isPrimaryResizable ? KEYBOARD_STEP_PX : -KEYBOARD_STEP_PX;
|
|
166
261
|
if (delta === 0) return;
|
|
167
262
|
|
|
168
263
|
e.preventDefault();
|
|
@@ -172,26 +267,57 @@ export function ResizableSplit({
|
|
|
172
267
|
return next;
|
|
173
268
|
});
|
|
174
269
|
},
|
|
175
|
-
[clampWidth, persist],
|
|
270
|
+
[clampWidth, persist, isPrimaryResizable],
|
|
176
271
|
);
|
|
177
272
|
|
|
178
273
|
// Cleanup rAF on unmount
|
|
179
274
|
useEffect(() => () => cancelAnimationFrame(rafRef.current), []);
|
|
180
275
|
|
|
276
|
+
const fixedPaneClass = "shrink-0 overflow-hidden";
|
|
277
|
+
const flexPaneClass = "min-w-0 flex-1";
|
|
278
|
+
|
|
279
|
+
// A collapsed pane hides entirely and its sibling flexes to fill the row,
|
|
280
|
+
// overriding the fixed/flex split. Width state is untouched, so expanding
|
|
281
|
+
// restores the previous size.
|
|
282
|
+
const primaryPaneClass =
|
|
283
|
+
collapsedPane === "primary"
|
|
284
|
+
? "hidden"
|
|
285
|
+
: collapsedPane === "secondary" || !isPrimaryResizable
|
|
286
|
+
? flexPaneClass
|
|
287
|
+
: fixedPaneClass;
|
|
288
|
+
const secondaryPaneClass =
|
|
289
|
+
collapsedPane === "secondary"
|
|
290
|
+
? "hidden"
|
|
291
|
+
: collapsedPane === "primary" || isPrimaryResizable
|
|
292
|
+
? flexPaneClass
|
|
293
|
+
: fixedPaneClass;
|
|
294
|
+
|
|
181
295
|
return (
|
|
182
296
|
<div ref={containerRef} className={cn("flex min-h-0 flex-1", className)}>
|
|
183
|
-
{/* Primary region (
|
|
184
|
-
<div
|
|
297
|
+
{/* Primary region (first child, order-stable across flips/collapses) */}
|
|
298
|
+
<div
|
|
299
|
+
className={cn(
|
|
300
|
+
primaryPaneClass,
|
|
301
|
+
responsiveCollapse === "primary" && "max-lg:hidden",
|
|
302
|
+
)}
|
|
303
|
+
style={
|
|
304
|
+
isPrimaryResizable && !isCollapsed ? { width: panelWidth } : undefined
|
|
305
|
+
}
|
|
306
|
+
>
|
|
307
|
+
{primary}
|
|
308
|
+
</div>
|
|
185
309
|
|
|
186
|
-
{/* Drag handle
|
|
310
|
+
{/* Drag handle — CSS-hidden (not unmounted) while collapsed so all three
|
|
311
|
+
children keep stable tree positions across a collapse toggle. */}
|
|
187
312
|
<div
|
|
188
313
|
role="separator"
|
|
189
314
|
aria-orientation="vertical"
|
|
190
315
|
aria-valuenow={panelWidth}
|
|
191
316
|
aria-valuemin={minSize}
|
|
192
317
|
aria-valuemax={maxSize}
|
|
193
|
-
aria-label=
|
|
194
|
-
|
|
318
|
+
aria-label={ariaLabel}
|
|
319
|
+
aria-hidden={isCollapsed || undefined}
|
|
320
|
+
tabIndex={isCollapsed ? -1 : 0}
|
|
195
321
|
onPointerDown={handlePointerDown}
|
|
196
322
|
onPointerMove={handlePointerMove}
|
|
197
323
|
onPointerUp={handlePointerUp}
|
|
@@ -203,16 +329,23 @@ export function ResizableSplit({
|
|
|
203
329
|
"focus-visible:bg-[var(--stgm-primary,#6366f1)] focus-visible:outline-none",
|
|
204
330
|
"active:bg-[var(--stgm-primary,#6366f1)]",
|
|
205
331
|
"transition-colors duration-100",
|
|
332
|
+
responsiveCollapse !== "none" && "max-lg:hidden",
|
|
333
|
+
isCollapsed && "hidden",
|
|
206
334
|
)}
|
|
207
335
|
>
|
|
208
336
|
{/* Wider invisible hit target (12px) for easier grabbing */}
|
|
209
337
|
<div className="absolute inset-y-0 -left-1.5 -right-1.5" />
|
|
210
338
|
</div>
|
|
211
339
|
|
|
212
|
-
{/* Secondary region (
|
|
340
|
+
{/* Secondary region (second child, order-stable across flips/collapses) */}
|
|
213
341
|
<div
|
|
214
|
-
className=
|
|
215
|
-
|
|
342
|
+
className={cn(
|
|
343
|
+
secondaryPaneClass,
|
|
344
|
+
responsiveCollapse === "secondary" && "max-lg:hidden",
|
|
345
|
+
)}
|
|
346
|
+
style={
|
|
347
|
+
!isPrimaryResizable && !isCollapsed ? { width: panelWidth } : undefined
|
|
348
|
+
}
|
|
216
349
|
>
|
|
217
350
|
{secondary}
|
|
218
351
|
</div>
|
|
@@ -14,7 +14,9 @@ import type { ToolCall } from "@stigmer/protos/ai/stigmer/agentic/agentexecution
|
|
|
14
14
|
import { ApprovalAction } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/enum_pb";
|
|
15
15
|
import {
|
|
16
16
|
ThreadItemRenderer,
|
|
17
|
+
threadContentColumnClass,
|
|
17
18
|
type ThreadItem,
|
|
19
|
+
type ThreadContentColumn,
|
|
18
20
|
} from "../execution/MessageThread.js";
|
|
19
21
|
import { FilePathContext, type FilePathContextValue } from "../execution/FilePathContext.js";
|
|
20
22
|
import { SandboxContext, type SandboxContextValue } from "../execution/SandboxContext.js";
|
|
@@ -45,9 +47,11 @@ export interface VirtualizedThreadProps {
|
|
|
45
47
|
readonly fileReviewCtx: FileReviewContextValue;
|
|
46
48
|
readonly unresolvedApprovalCount: number;
|
|
47
49
|
readonly onBuildFromPlan?: () => void;
|
|
50
|
+
readonly onOpenPlan?: (executionId: string) => void;
|
|
48
51
|
readonly org?: string;
|
|
49
52
|
readonly planActionsDisabled?: boolean;
|
|
50
|
-
readonly
|
|
53
|
+
readonly planBuildPending?: boolean;
|
|
54
|
+
readonly contentColumn?: ThreadContentColumn;
|
|
51
55
|
readonly onRetrySend?: () => void;
|
|
52
56
|
readonly onRetryExecution?: (message: string) => void;
|
|
53
57
|
readonly onEditMessage?: (text: string) => void;
|
|
@@ -112,9 +116,11 @@ export function VirtualizedThread({
|
|
|
112
116
|
fileReviewCtx,
|
|
113
117
|
unresolvedApprovalCount,
|
|
114
118
|
onBuildFromPlan,
|
|
119
|
+
onOpenPlan,
|
|
115
120
|
org,
|
|
116
121
|
planActionsDisabled,
|
|
117
|
-
|
|
122
|
+
planBuildPending,
|
|
123
|
+
contentColumn,
|
|
118
124
|
onRetrySend,
|
|
119
125
|
onRetryExecution,
|
|
120
126
|
onEditMessage,
|
|
@@ -148,13 +154,15 @@ export function VirtualizedThread({
|
|
|
148
154
|
submittingApprovalIds,
|
|
149
155
|
approvalErrors,
|
|
150
156
|
onBuildFromPlan,
|
|
157
|
+
onOpenPlan,
|
|
151
158
|
org,
|
|
152
159
|
planActionsDisabled,
|
|
160
|
+
planBuildPending,
|
|
153
161
|
onRetrySend,
|
|
154
162
|
onRetryExecution,
|
|
155
163
|
onEditMessage,
|
|
156
164
|
}),
|
|
157
|
-
[formatToolCallSummary, onApprovalSubmit, submittingApprovalIds, approvalErrors, onBuildFromPlan, org, planActionsDisabled, onRetrySend, onRetryExecution, onEditMessage],
|
|
165
|
+
[formatToolCallSummary, onApprovalSubmit, submittingApprovalIds, approvalErrors, onBuildFromPlan, onOpenPlan, org, planActionsDisabled, planBuildPending, onRetrySend, onRetryExecution, onEditMessage],
|
|
158
166
|
);
|
|
159
167
|
|
|
160
168
|
return (
|
|
@@ -177,7 +185,7 @@ export function VirtualizedThread({
|
|
|
177
185
|
className="h-full"
|
|
178
186
|
components={{ Scroller: ScrollerWithA11y }}
|
|
179
187
|
itemContent={(index, item) => (
|
|
180
|
-
<div className={cn("pb-4 pt-0 first:pt-6",
|
|
188
|
+
<div className={cn("pb-4 pt-0 first:pt-6", threadContentColumnClass(contentColumn))}>
|
|
181
189
|
<ThreadItemWrapper animate={index >= items.length - 2}>
|
|
182
190
|
<ThreadItemRenderer
|
|
183
191
|
item={item}
|