@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
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { FileChange } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/message_pb";
|
|
2
|
+
import type { SelectedWorkspaceFile } from "../internal/store/workspace-file-selection-store.js";
|
|
3
|
+
import type { WorkspaceEntry } from "./useWorkspaceEntries.js";
|
|
4
|
+
/**
|
|
5
|
+
* The session {@link FileChange} that touched the currently-open file, or
|
|
6
|
+
* `null` when the open file was not changed this session (or cannot be
|
|
7
|
+
* correlated with certainty).
|
|
8
|
+
*
|
|
9
|
+
* @param selection - The open file, keyed by `entryId` + repo/root-relative `path`.
|
|
10
|
+
* @param fileChanges - Net-per-file session changes (from `useSessionFileChanges`).
|
|
11
|
+
* @param entries - The client workspace entries — the SAME list the tree and
|
|
12
|
+
* transcript resolve against (`flow.workspace.entries`), so the returned
|
|
13
|
+
* `entryId` is directly comparable. Do not pass the proto `workspaceEntries`.
|
|
14
|
+
* @param sandboxWorkspaceRoot - The sandbox root for git sessions (strips
|
|
15
|
+
* cloud-absolute change paths), identical to the transcript resolver's input.
|
|
16
|
+
* @returns The matching change, or `null`.
|
|
17
|
+
*/
|
|
18
|
+
export declare function findChangeForSelection(selection: SelectedWorkspaceFile, fileChanges: readonly FileChange[], entries: readonly WorkspaceEntry[], sandboxWorkspaceRoot?: string): FileChange | null;
|
|
19
|
+
//# sourceMappingURL=findChangeForSelection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"findChangeForSelection.d.ts","sourceRoot":"","sources":["../../src/workspace/findChangeForSelection.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iEAAiE,CAAC;AAClG,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qDAAqD,CAAC;AAEjG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE/D;;;;;;;;;;;;;GAaG;AACH,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,qBAAqB,EAChC,WAAW,EAAE,SAAS,UAAU,EAAE,EAClC,OAAO,EAAE,SAAS,cAAc,EAAE,EAClC,oBAAoB,CAAC,EAAE,MAAM,GAC5B,UAAU,GAAG,IAAI,CAgBnB"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
// Correlate an open workspace-file selection with the session file change that
|
|
2
|
+
// touched it, so the read-only Viewer can default a changed file to its diff
|
|
3
|
+
// (Slice 4). This is the change-side peer of `resolveWorkspaceFileSelection`.
|
|
4
|
+
//
|
|
5
|
+
// The hard part is again PATH FORM, and — critically — ENTRY IDENTITY. A
|
|
6
|
+
// `FileChange` carries a capture-side path (`path` is workspace-root-relative,
|
|
7
|
+
// falling back to `absolutePath`), while the selection is the reader's
|
|
8
|
+
// `{ entryId, path }`. Matching by a bare `/`-boundary suffix (as the
|
|
9
|
+
// presentation-only `changeForRowPath` does) is deliberately NOT used here: in
|
|
10
|
+
// a multi-repo session it would happily match `repoA/src/a.ts` to a change in
|
|
11
|
+
// `repoB/src/a.ts` and render the wrong file's diff.
|
|
12
|
+
//
|
|
13
|
+
// Instead we route each change's path through the SAME correlation-grade
|
|
14
|
+
// resolver (`resolveWorkspaceFileSelection`) the tree and transcript use to
|
|
15
|
+
// open files, with the SAME `entries` and `sandboxWorkspaceRoot`. A change is
|
|
16
|
+
// the open file's change iff it resolves to the exact `{ entryId, path }`
|
|
17
|
+
// currently selected. Single-entry sessions match exactly; ambiguous
|
|
18
|
+
// multi-entry / absolute paths degrade to "no match" (never a wrong match),
|
|
19
|
+
// inheriting DD-08's honesty. One resolver, one truth.
|
|
20
|
+
import { resolveWorkspaceFileSelection } from "./resolveWorkspaceFileSelection.js";
|
|
21
|
+
/**
|
|
22
|
+
* The session {@link FileChange} that touched the currently-open file, or
|
|
23
|
+
* `null` when the open file was not changed this session (or cannot be
|
|
24
|
+
* correlated with certainty).
|
|
25
|
+
*
|
|
26
|
+
* @param selection - The open file, keyed by `entryId` + repo/root-relative `path`.
|
|
27
|
+
* @param fileChanges - Net-per-file session changes (from `useSessionFileChanges`).
|
|
28
|
+
* @param entries - The client workspace entries — the SAME list the tree and
|
|
29
|
+
* transcript resolve against (`flow.workspace.entries`), so the returned
|
|
30
|
+
* `entryId` is directly comparable. Do not pass the proto `workspaceEntries`.
|
|
31
|
+
* @param sandboxWorkspaceRoot - The sandbox root for git sessions (strips
|
|
32
|
+
* cloud-absolute change paths), identical to the transcript resolver's input.
|
|
33
|
+
* @returns The matching change, or `null`.
|
|
34
|
+
*/
|
|
35
|
+
export function findChangeForSelection(selection, fileChanges, entries, sandboxWorkspaceRoot) {
|
|
36
|
+
for (const change of fileChanges) {
|
|
37
|
+
const resolved = resolveWorkspaceFileSelection(change.path || change.absolutePath, entries, sandboxWorkspaceRoot);
|
|
38
|
+
if (resolved !== null &&
|
|
39
|
+
resolved.entryId === selection.entryId &&
|
|
40
|
+
resolved.path === selection.path) {
|
|
41
|
+
return change;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=findChangeForSelection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"findChangeForSelection.js","sourceRoot":"","sources":["../../src/workspace/findChangeForSelection.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,6EAA6E;AAC7E,8EAA8E;AAC9E,EAAE;AACF,yEAAyE;AACzE,+EAA+E;AAC/E,uEAAuE;AACvE,sEAAsE;AACtE,+EAA+E;AAC/E,8EAA8E;AAC9E,qDAAqD;AACrD,EAAE;AACF,yEAAyE;AACzE,4EAA4E;AAC5E,8EAA8E;AAC9E,0EAA0E;AAC1E,qEAAqE;AACrE,4EAA4E;AAC5E,uDAAuD;AAIvD,OAAO,EAAE,6BAA6B,EAAE,MAAM,oCAAoC,CAAC;AAGnF;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,sBAAsB,CACpC,SAAgC,EAChC,WAAkC,EAClC,OAAkC,EAClC,oBAA6B;IAE7B,KAAK,MAAM,MAAM,IAAI,WAAW,EAAE,CAAC;QACjC,MAAM,QAAQ,GAAG,6BAA6B,CAC5C,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,YAAY,EAClC,OAAO,EACP,oBAAoB,CACrB,CAAC;QACF,IACE,QAAQ,KAAK,IAAI;YACjB,QAAQ,CAAC,OAAO,KAAK,SAAS,CAAC,OAAO;YACtC,QAAQ,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,EAChC,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
package/workspace/index.d.ts
CHANGED
|
@@ -1,10 +1,32 @@
|
|
|
1
1
|
export { useWorkspaceEntries } from "./useWorkspaceEntries.js";
|
|
2
2
|
export type { WorkspaceEntry, UseWorkspaceEntriesReturn, } from "./useWorkspaceEntries.js";
|
|
3
3
|
export type { WorkspaceFileEntry, WorkspaceFileLister, } from "./WorkspaceFileLister.js";
|
|
4
|
+
export { MAX_WORKSPACE_FILE_READ_BYTES } from "./WorkspaceFileReader.js";
|
|
5
|
+
export type { WorkspaceFileContent, WorkspaceFileReader, } from "./WorkspaceFileReader.js";
|
|
4
6
|
export { useWorkspaceFiles } from "./useWorkspaceFiles.js";
|
|
5
7
|
export type { UseWorkspaceFilesOptions, UseWorkspaceFilesReturn, } from "./useWorkspaceFiles.js";
|
|
6
|
-
export {
|
|
7
|
-
export type {
|
|
8
|
+
export { useWorkspaceFileContent } from "./useWorkspaceFileContent.js";
|
|
9
|
+
export type { UseWorkspaceFileContentOptions, UseWorkspaceFileContentReturn, } from "./useWorkspaceFileContent.js";
|
|
10
|
+
export { useWorkspaceFileSearch } from "./useWorkspaceFileSearch.js";
|
|
11
|
+
export type { UseWorkspaceFileSearchOptions, UseWorkspaceFileSearchReturn, WorkspaceFileSearchGroup, } from "./useWorkspaceFileSearch.js";
|
|
12
|
+
export type { WorkspaceFileMatch } from "./matchWorkspaceFiles.js";
|
|
13
|
+
export { WorkspaceFileSearch } from "./WorkspaceFileSearch.js";
|
|
14
|
+
export type { WorkspaceFileSearchProps } from "./WorkspaceFileSearch.js";
|
|
15
|
+
export type { WorkspaceContentMatch, WorkspaceContentSearchResult, WorkspaceContentSearcher, } from "./WorkspaceContentSearcher.js";
|
|
16
|
+
export { useWorkspaceContentSearch } from "./useWorkspaceContentSearch.js";
|
|
17
|
+
export type { UseWorkspaceContentSearchOptions, UseWorkspaceContentSearchReturn, WorkspaceContentSearchGroup, } from "./useWorkspaceContentSearch.js";
|
|
18
|
+
export { WorkspaceContentSearch } from "./WorkspaceContentSearch.js";
|
|
19
|
+
export type { WorkspaceContentSearchProps } from "./WorkspaceContentSearch.js";
|
|
20
|
+
export { FileViewer } from "./FileViewer.js";
|
|
21
|
+
export type { FileViewerProps, FileViewerHandle } from "./FileViewer.js";
|
|
22
|
+
export { WorkspaceSurface } from "./WorkspaceSurface.js";
|
|
23
|
+
export type { WorkspaceSurfaceProps, SurfaceRailView, SurfaceVirtualDocument, } from "./WorkspaceSurface.js";
|
|
24
|
+
export { virtualEntryId, isVirtualEntryId } from "../internal/store/index.js";
|
|
25
|
+
export { ExplorerTree } from "./ExplorerTree.js";
|
|
26
|
+
export type { ExplorerTreeProps } from "./ExplorerTree.js";
|
|
27
|
+
export type { OpenEditor, OpenFileOptions } from "../internal/store/index.js";
|
|
28
|
+
export type { RevealTarget } from "../internal/useRevealLine.js";
|
|
29
|
+
export type { SelectedWorkspaceFile } from "../internal/store/workspace-file-selection-store.js";
|
|
8
30
|
export { WorkspaceEditor } from "./WorkspaceEditor.js";
|
|
9
31
|
export type { WorkspaceEditorProps } from "./WorkspaceEditor.js";
|
|
10
32
|
export { WorkspaceSummary } from "./WorkspaceSummary.js";
|
package/workspace/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/workspace/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,YAAY,EACV,cAAc,EACd,yBAAyB,GAC1B,MAAM,0BAA0B,CAAC;AAClC,YAAY,EACV,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,YAAY,EACV,wBAAwB,EACxB,uBAAuB,GACxB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,YAAY,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,YAAY,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,YAAY,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,YAAY,EACV,eAAe,EACf,yBAAyB,GAC1B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,YAAY,EACV,0BAA0B,EAC1B,yBAAyB,GAC1B,MAAM,0BAA0B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/workspace/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,YAAY,EACV,cAAc,EACd,yBAAyB,GAC1B,MAAM,0BAA0B,CAAC;AAClC,YAAY,EACV,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,6BAA6B,EAAE,MAAM,0BAA0B,CAAC;AACzE,YAAY,EACV,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,YAAY,EACV,wBAAwB,EACxB,uBAAuB,GACxB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,YAAY,EACV,8BAA8B,EAC9B,6BAA6B,GAC9B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,YAAY,EACV,6BAA6B,EAC7B,4BAA4B,EAC5B,wBAAwB,GACzB,MAAM,6BAA6B,CAAC;AAErC,YAAY,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,YAAY,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACzE,YAAY,EACV,qBAAqB,EACrB,4BAA4B,EAC5B,wBAAwB,GACzB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,YAAY,EACV,gCAAgC,EAChC,+BAA+B,EAC/B,2BAA2B,GAC5B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,YAAY,EAAE,2BAA2B,EAAE,MAAM,6BAA6B,CAAC;AAE/E,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,YAAY,EACV,qBAAqB,EACrB,eAAe,EACf,sBAAsB,GACvB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,YAAY,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAG3D,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAG9E,YAAY,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAGjE,YAAY,EAAE,qBAAqB,EAAE,MAAM,qDAAqD,CAAC;AACjG,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,YAAY,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,YAAY,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,YAAY,EACV,eAAe,EACf,yBAAyB,GAC1B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,YAAY,EACV,0BAA0B,EAC1B,yBAAyB,GAC1B,MAAM,0BAA0B,CAAC"}
|
package/workspace/index.js
CHANGED
|
@@ -1,6 +1,18 @@
|
|
|
1
1
|
export { useWorkspaceEntries } from "./useWorkspaceEntries.js";
|
|
2
|
+
export { MAX_WORKSPACE_FILE_READ_BYTES } from "./WorkspaceFileReader.js";
|
|
2
3
|
export { useWorkspaceFiles } from "./useWorkspaceFiles.js";
|
|
3
|
-
export {
|
|
4
|
+
export { useWorkspaceFileContent } from "./useWorkspaceFileContent.js";
|
|
5
|
+
export { useWorkspaceFileSearch } from "./useWorkspaceFileSearch.js";
|
|
6
|
+
export { WorkspaceFileSearch } from "./WorkspaceFileSearch.js";
|
|
7
|
+
export { useWorkspaceContentSearch } from "./useWorkspaceContentSearch.js";
|
|
8
|
+
export { WorkspaceContentSearch } from "./WorkspaceContentSearch.js";
|
|
9
|
+
// The highlight helper (findHighlightRanges) stays @internal, like matchWorkspaceFiles.
|
|
10
|
+
export { FileViewer } from "./FileViewer.js";
|
|
11
|
+
export { WorkspaceSurface } from "./WorkspaceSurface.js";
|
|
12
|
+
// Virtual-document identity helpers: hosts mint collision-proof entry ids for
|
|
13
|
+
// SurfaceVirtualDocument tabs and detect them in file-only code paths.
|
|
14
|
+
export { virtualEntryId, isVirtualEntryId } from "../internal/store/index.js";
|
|
15
|
+
export { ExplorerTree } from "./ExplorerTree.js";
|
|
4
16
|
export { WorkspaceEditor } from "./WorkspaceEditor.js";
|
|
5
17
|
export { WorkspaceSummary } from "./WorkspaceSummary.js";
|
|
6
18
|
export { useRecentWorkspaces } from "./useRecentWorkspaces.js";
|
package/workspace/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/workspace/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAS/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAK3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/workspace/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAS/D,OAAO,EAAE,6BAA6B,EAAE,MAAM,0BAA0B,CAAC;AAKzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAK3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAKvE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAQrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAO/D,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAM3E,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAErE,wFAAwF;AACxF,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAMzD,8EAA8E;AAC9E,uEAAuE;AACvE,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAWjD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAK/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A half-open `[start, end)` range of code-unit offsets into a preview string,
|
|
3
|
+
* marking one occurrence of the query to emphasize.
|
|
4
|
+
*/
|
|
5
|
+
export interface HighlightRange {
|
|
6
|
+
/** Inclusive start offset within the preview. */
|
|
7
|
+
readonly start: number;
|
|
8
|
+
/** Exclusive end offset within the preview. */
|
|
9
|
+
readonly end: number;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Finds every case-insensitive occurrence of `query` within `preview`,
|
|
13
|
+
* best-effort for rendering emphasis.
|
|
14
|
+
*
|
|
15
|
+
* - Empty/whitespace query → `[]` (nothing to highlight).
|
|
16
|
+
* - Overlapping matches cannot occur (search advances past each match end).
|
|
17
|
+
* - Offsets are JS string code units, so a consumer highlights with
|
|
18
|
+
* `preview.slice(start, end)`.
|
|
19
|
+
*/
|
|
20
|
+
export declare function findHighlightRanges(preview: string, query: string): HighlightRange[];
|
|
21
|
+
//# sourceMappingURL=matchContentPreview.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"matchContentPreview.d.ts","sourceRoot":"","sources":["../../src/workspace/matchContentPreview.ts"],"names":[],"mappings":"AAUA;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,iDAAiD;IACjD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,+CAA+C;IAC/C,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,GACZ,cAAc,EAAE,CAiBlB"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
// Pure highlight helper behind content search. Kept separate from the hook and
|
|
2
|
+
// component so the offset math is exhaustively unit-testable in isolation (no
|
|
3
|
+
// React, no async).
|
|
4
|
+
//
|
|
5
|
+
// The backend returns each hit's `preview` line but no column offset (a
|
|
6
|
+
// cross-language byte/UTF-16 offset would be brittle — see WorkspaceContentMatch).
|
|
7
|
+
// Since matching is case-insensitive substring, the client re-derives the
|
|
8
|
+
// highlight span(s) from the preview text itself, identically to how
|
|
9
|
+
// `matchWorkspaceFiles` derives the filename highlight range. `@internal`.
|
|
10
|
+
/**
|
|
11
|
+
* Finds every case-insensitive occurrence of `query` within `preview`,
|
|
12
|
+
* best-effort for rendering emphasis.
|
|
13
|
+
*
|
|
14
|
+
* - Empty/whitespace query → `[]` (nothing to highlight).
|
|
15
|
+
* - Overlapping matches cannot occur (search advances past each match end).
|
|
16
|
+
* - Offsets are JS string code units, so a consumer highlights with
|
|
17
|
+
* `preview.slice(start, end)`.
|
|
18
|
+
*/
|
|
19
|
+
export function findHighlightRanges(preview, query) {
|
|
20
|
+
const needle = query.trim().toLowerCase();
|
|
21
|
+
if (needle.length === 0)
|
|
22
|
+
return [];
|
|
23
|
+
const haystack = preview.toLowerCase();
|
|
24
|
+
const ranges = [];
|
|
25
|
+
let from = 0;
|
|
26
|
+
for (;;) {
|
|
27
|
+
const start = haystack.indexOf(needle, from);
|
|
28
|
+
if (start === -1)
|
|
29
|
+
break;
|
|
30
|
+
const end = start + needle.length;
|
|
31
|
+
ranges.push({ start, end });
|
|
32
|
+
from = end;
|
|
33
|
+
}
|
|
34
|
+
return ranges;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=matchContentPreview.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"matchContentPreview.js","sourceRoot":"","sources":["../../src/workspace/matchContentPreview.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,8EAA8E;AAC9E,oBAAoB;AACpB,EAAE;AACF,wEAAwE;AACxE,mFAAmF;AACnF,0EAA0E;AAC1E,qEAAqE;AACrE,2EAA2E;AAa3E;;;;;;;;GAQG;AACH,MAAM,UAAU,mBAAmB,CACjC,OAAe,EACf,KAAa;IAEb,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC1C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEnC,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IACvC,MAAM,MAAM,GAAqB,EAAE,CAAC;IAEpC,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,SAAS,CAAC;QACR,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC7C,IAAI,KAAK,KAAK,CAAC,CAAC;YAAE,MAAM;QACxB,MAAM,GAAG,GAAG,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QAC5B,IAAI,GAAG,GAAG,CAAC;IACb,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { WorkspaceFileEntry } from "./WorkspaceFileLister.js";
|
|
2
|
+
/**
|
|
3
|
+
* A workspace file that matched a search query.
|
|
4
|
+
*
|
|
5
|
+
* `matchStart`/`matchEnd` are code-unit offsets into `path` (a half-open
|
|
6
|
+
* `[start, end)` range) for the single contiguous substring hit, so a consumer
|
|
7
|
+
* can highlight exactly the matched span with `path.slice(...)`.
|
|
8
|
+
*/
|
|
9
|
+
export interface WorkspaceFileMatch {
|
|
10
|
+
/** Repo-relative (git) or root-relative (local) path of the matched file. */
|
|
11
|
+
readonly path: string;
|
|
12
|
+
/** Inclusive start offset of the matched substring within `path`. */
|
|
13
|
+
readonly matchStart: number;
|
|
14
|
+
/** Exclusive end offset of the matched substring within `path`. */
|
|
15
|
+
readonly matchEnd: number;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Ranks a flat listing against a query, returning matched files best-first.
|
|
19
|
+
*
|
|
20
|
+
* - Case-insensitive substring on the full relative path.
|
|
21
|
+
* - Directories and advisory `notice` entries are never matched (a defensive
|
|
22
|
+
* guard even though the shared cache already strips notices — DD-11).
|
|
23
|
+
* - Empty/whitespace query returns `[]` (search shows a hint, not everything).
|
|
24
|
+
*
|
|
25
|
+
* Ranking, in order: a basename hit outranks a path-only hit; then an earlier
|
|
26
|
+
* match offset; then a shorter path; then lexicographic path for a stable,
|
|
27
|
+
* deterministic order.
|
|
28
|
+
*/
|
|
29
|
+
export declare function matchWorkspaceFiles(files: readonly WorkspaceFileEntry[], query: string): WorkspaceFileMatch[];
|
|
30
|
+
//# sourceMappingURL=matchWorkspaceFiles.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"matchWorkspaceFiles.d.ts","sourceRoot":"","sources":["../../src/workspace/matchWorkspaceFiles.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAEnE;;;;;;GAMG;AACH,MAAM,WAAW,kBAAkB;IACjC,6EAA6E;IAC7E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,qEAAqE;IACrE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,mEAAmE;IACnE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAQD;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,SAAS,kBAAkB,EAAE,EACpC,KAAK,EAAE,MAAM,GACZ,kBAAkB,EAAE,CA6BtB"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
// Pure ranking function behind workspace search. Kept separate from the hook and
|
|
2
|
+
// component so the matching/ranking rules are exhaustively unit-testable in
|
|
3
|
+
// isolation (no React, no async).
|
|
4
|
+
//
|
|
5
|
+
// Match semantics intentionally mirror `internal/file-tree/filterFileTree` —
|
|
6
|
+
// case-insensitive substring — but widened from a node's basename to the full
|
|
7
|
+
// relative path, so `foo/bar` is findable and directory context is searchable
|
|
8
|
+
// (DD-10). The trivial predicate is not extracted into a shared micro-module; a
|
|
9
|
+
// cross-reference comment is the lower-coupling, honest choice.
|
|
10
|
+
/**
|
|
11
|
+
* Ranks a flat listing against a query, returning matched files best-first.
|
|
12
|
+
*
|
|
13
|
+
* - Case-insensitive substring on the full relative path.
|
|
14
|
+
* - Directories and advisory `notice` entries are never matched (a defensive
|
|
15
|
+
* guard even though the shared cache already strips notices — DD-11).
|
|
16
|
+
* - Empty/whitespace query returns `[]` (search shows a hint, not everything).
|
|
17
|
+
*
|
|
18
|
+
* Ranking, in order: a basename hit outranks a path-only hit; then an earlier
|
|
19
|
+
* match offset; then a shorter path; then lexicographic path for a stable,
|
|
20
|
+
* deterministic order.
|
|
21
|
+
*/
|
|
22
|
+
export function matchWorkspaceFiles(files, query) {
|
|
23
|
+
const trimmed = query.trim();
|
|
24
|
+
if (trimmed.length === 0)
|
|
25
|
+
return [];
|
|
26
|
+
const needle = trimmed.toLowerCase();
|
|
27
|
+
const ranked = [];
|
|
28
|
+
for (const file of files) {
|
|
29
|
+
if (file.isDirectory || file.notice)
|
|
30
|
+
continue;
|
|
31
|
+
const matchStart = file.path.toLowerCase().indexOf(needle);
|
|
32
|
+
if (matchStart === -1)
|
|
33
|
+
continue;
|
|
34
|
+
const lastSlash = file.path.lastIndexOf("/");
|
|
35
|
+
ranked.push({
|
|
36
|
+
path: file.path,
|
|
37
|
+
matchStart,
|
|
38
|
+
matchEnd: matchStart + needle.length,
|
|
39
|
+
isBasenameHit: matchStart >= lastSlash + 1,
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
ranked.sort(compareMatches);
|
|
43
|
+
return ranked.map(({ path, matchStart, matchEnd }) => ({
|
|
44
|
+
path,
|
|
45
|
+
matchStart,
|
|
46
|
+
matchEnd,
|
|
47
|
+
}));
|
|
48
|
+
}
|
|
49
|
+
function compareMatches(a, b) {
|
|
50
|
+
if (a.isBasenameHit !== b.isBasenameHit)
|
|
51
|
+
return a.isBasenameHit ? -1 : 1;
|
|
52
|
+
if (a.matchStart !== b.matchStart)
|
|
53
|
+
return a.matchStart - b.matchStart;
|
|
54
|
+
if (a.path.length !== b.path.length)
|
|
55
|
+
return a.path.length - b.path.length;
|
|
56
|
+
return a.path.localeCompare(b.path);
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=matchWorkspaceFiles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"matchWorkspaceFiles.js","sourceRoot":"","sources":["../../src/workspace/matchWorkspaceFiles.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,4EAA4E;AAC5E,kCAAkC;AAClC,EAAE;AACF,6EAA6E;AAC7E,8EAA8E;AAC9E,8EAA8E;AAC9E,gFAAgF;AAChF,gEAAgE;AA0BhE;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,mBAAmB,CACjC,KAAoC,EACpC,KAAa;IAEb,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEpC,MAAM,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IACrC,MAAM,MAAM,GAAkB,EAAE,CAAC;IAEjC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,MAAM;YAAE,SAAS;QAE9C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC3D,IAAI,UAAU,KAAK,CAAC,CAAC;YAAE,SAAS;QAEhC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAC7C,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,UAAU;YACV,QAAQ,EAAE,UAAU,GAAG,MAAM,CAAC,MAAM;YACpC,aAAa,EAAE,UAAU,IAAI,SAAS,GAAG,CAAC;SAC3C,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAE5B,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;QACrD,IAAI;QACJ,UAAU;QACV,QAAQ;KACT,CAAC,CAAC,CAAC;AACN,CAAC;AAED,SAAS,cAAc,CAAC,CAAc,EAAE,CAAc;IACpD,IAAI,CAAC,CAAC,aAAa,KAAK,CAAC,CAAC,aAAa;QAAE,OAAO,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACzE,IAAI,CAAC,CAAC,UAAU,KAAK,CAAC,CAAC,UAAU;QAAE,OAAO,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC;IACtE,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM;QAAE,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;IAC1E,OAAO,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AACtC,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { SelectedWorkspaceFile } from "../internal/store/workspace-file-selection-store.js";
|
|
2
|
+
import type { WorkspaceEntry } from "./useWorkspaceEntries.js";
|
|
3
|
+
/**
|
|
4
|
+
* Resolves a transcript tool-call file path to the {@link SelectedWorkspaceFile}
|
|
5
|
+
* that opens it in the read-only Viewer, or `null` when it cannot be resolved to
|
|
6
|
+
* a definite repo/root-relative file (caller keeps copy/GitHub-link fallback).
|
|
7
|
+
*
|
|
8
|
+
* `entries` are the client-side workspace entries (`useWorkspaceEntries`), the
|
|
9
|
+
* same list the Viewer resolves against, so the returned `entryId` is directly
|
|
10
|
+
* usable. `sandboxWorkspaceRoot` (when the session has git-repo entries, e.g.
|
|
11
|
+
* `/home/daytona/workspace`) is stripped first so cloud-absolute paths reduce to
|
|
12
|
+
* workspace-relative before per-entry anchoring.
|
|
13
|
+
*
|
|
14
|
+
* The result `path` is guaranteed to match what the file tree / lister emits for
|
|
15
|
+
* the same file, so opening from the transcript and from the tree produce an
|
|
16
|
+
* identical selection (and hit the same content fetch/cache).
|
|
17
|
+
*/
|
|
18
|
+
export declare function resolveWorkspaceFileSelection(path: string, entries: readonly WorkspaceEntry[], sandboxWorkspaceRoot?: string): SelectedWorkspaceFile | null;
|
|
19
|
+
//# sourceMappingURL=resolveWorkspaceFileSelection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveWorkspaceFileSelection.d.ts","sourceRoot":"","sources":["../../src/workspace/resolveWorkspaceFileSelection.ts"],"names":[],"mappings":"AA8BA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qDAAqD,CAAC;AACjG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAmB/D;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,SAAS,cAAc,EAAE,EAClC,oBAAoB,CAAC,EAAE,MAAM,GAC5B,qBAAqB,GAAG,IAAI,CAiD9B"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
// Resolve a transcript tool-call file path to an openable workspace-file
|
|
2
|
+
// selection. This is the seam that lets a click on a path in the message thread
|
|
3
|
+
// route to the same read-only Viewer a file-tree click drives (Slice 3).
|
|
4
|
+
//
|
|
5
|
+
// The hard part is NOT identity ("which entry") but PATH FORM. The reader and
|
|
6
|
+
// lister contracts are strict: `WorkspaceFileReader` / the GitHub Trees lister
|
|
7
|
+
// speak repo-root-relative (git) or root-relative (local) paths — the exact
|
|
8
|
+
// strings a file-tree node carries. Transcript tool-call paths are not
|
|
9
|
+
// guaranteed to be in that form: depending on harness and workspace layout they
|
|
10
|
+
// arrive workspace-relative, subdir-prefixed, or absolute (see
|
|
11
|
+
// `execution/file-review-status.ts` `changeForRowPath`, which documents the
|
|
12
|
+
// same variance and treats path matching as presentation-only).
|
|
13
|
+
//
|
|
14
|
+
// Rather than fuzzy-match, this resolver normalizes deterministically using only
|
|
15
|
+
// anchors the client already holds, grounded in how the runner provisions the
|
|
16
|
+
// workspace (`backend/.../workspace/provisioner.ts`):
|
|
17
|
+
// - Single entry -> cloned at the workspace root, so a (humanized) tool-call
|
|
18
|
+
// path is already repo/root-relative. Identity transform.
|
|
19
|
+
// - Multiple git -> each cloned into `<root>/<entry.name>/`, so the path is
|
|
20
|
+
// prefixed by the subdir name; strip it.
|
|
21
|
+
// - Local (desktop) -> the native reader joins `entry.localPath` + a
|
|
22
|
+
// root-relative path; local tool paths may be absolute, so
|
|
23
|
+
// strip the known `entry.localPath` prefix.
|
|
24
|
+
// - Cloud absolute -> strip the known `sandboxWorkspaceRoot` first.
|
|
25
|
+
// Anything that does not resolve to a definite relative path returns `null` so
|
|
26
|
+
// the caller keeps its existing copy/GitHub-link behavior — a wrong file can
|
|
27
|
+
// never open. Extending this to arbitrary/absolute paths belongs to a later
|
|
28
|
+
// slice that resolves against the authoritative file-tree index.
|
|
29
|
+
import { classifyPath } from "../execution/file-path-resolver.js";
|
|
30
|
+
/** Forward-slash-normalize and drop any leading slashes for prefix comparison. */
|
|
31
|
+
function normalize(path) {
|
|
32
|
+
return path.replace(/\\/g, "/").replace(/^\/+/, "");
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Returns the portion of `path` beneath `anchor`, or `null` when `path` does
|
|
36
|
+
* not sit under `anchor`. An exact match (the anchor itself, a directory) yields
|
|
37
|
+
* `""` — the caller rejects it, since a directory is not a viewable file.
|
|
38
|
+
*/
|
|
39
|
+
function relativeTo(path, anchor) {
|
|
40
|
+
if (!anchor)
|
|
41
|
+
return null;
|
|
42
|
+
if (path === anchor)
|
|
43
|
+
return "";
|
|
44
|
+
if (path.startsWith(anchor + "/"))
|
|
45
|
+
return path.slice(anchor.length + 1);
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Resolves a transcript tool-call file path to the {@link SelectedWorkspaceFile}
|
|
50
|
+
* that opens it in the read-only Viewer, or `null` when it cannot be resolved to
|
|
51
|
+
* a definite repo/root-relative file (caller keeps copy/GitHub-link fallback).
|
|
52
|
+
*
|
|
53
|
+
* `entries` are the client-side workspace entries (`useWorkspaceEntries`), the
|
|
54
|
+
* same list the Viewer resolves against, so the returned `entryId` is directly
|
|
55
|
+
* usable. `sandboxWorkspaceRoot` (when the session has git-repo entries, e.g.
|
|
56
|
+
* `/home/daytona/workspace`) is stripped first so cloud-absolute paths reduce to
|
|
57
|
+
* workspace-relative before per-entry anchoring.
|
|
58
|
+
*
|
|
59
|
+
* The result `path` is guaranteed to match what the file tree / lister emits for
|
|
60
|
+
* the same file, so opening from the transcript and from the tree produce an
|
|
61
|
+
* identical selection (and hit the same content fetch/cache).
|
|
62
|
+
*/
|
|
63
|
+
export function resolveWorkspaceFileSelection(path, entries, sandboxWorkspaceRoot) {
|
|
64
|
+
if (!path || entries.length === 0)
|
|
65
|
+
return null;
|
|
66
|
+
// 1. Reduce a cloud-absolute path to workspace-relative using the known root.
|
|
67
|
+
let work = normalize(path);
|
|
68
|
+
if (sandboxWorkspaceRoot) {
|
|
69
|
+
const root = normalize(sandboxWorkspaceRoot);
|
|
70
|
+
const relToRoot = relativeTo(work, root);
|
|
71
|
+
if (relToRoot !== null)
|
|
72
|
+
work = relToRoot;
|
|
73
|
+
}
|
|
74
|
+
// The bare workspace root ("" after stripping, or the humanized ".") is not a
|
|
75
|
+
// file.
|
|
76
|
+
if (!work || work === ".")
|
|
77
|
+
return null;
|
|
78
|
+
// 2. The platform mount (`.stigmer/…`) is a virtual namespace, not a workspace
|
|
79
|
+
// file — checked after the root strip so an absolute `<root>/.stigmer/…`
|
|
80
|
+
// is caught too. Keep copy behavior for it.
|
|
81
|
+
if (classifyPath(work).kind === "platform")
|
|
82
|
+
return null;
|
|
83
|
+
// 3. Anchor on the exact per-entry roots the client holds. Local entries
|
|
84
|
+
// anchor on their absolute `localPath`; multi-entry git repos anchor on the
|
|
85
|
+
// provisioning subdir (`entry.name`). A single git entry is cloned at the
|
|
86
|
+
// root, so it falls through to step 4.
|
|
87
|
+
const isMulti = entries.length > 1;
|
|
88
|
+
for (const entry of entries) {
|
|
89
|
+
let anchor = null;
|
|
90
|
+
if (entry.type === "local" && entry.localPath) {
|
|
91
|
+
anchor = normalize(entry.localPath);
|
|
92
|
+
}
|
|
93
|
+
else if (entry.type === "git" && isMulti) {
|
|
94
|
+
anchor = normalize(entry.name);
|
|
95
|
+
}
|
|
96
|
+
if (anchor === null)
|
|
97
|
+
continue;
|
|
98
|
+
const rel = relativeTo(work, anchor);
|
|
99
|
+
// Exact match is the entry's own root directory, not a viewable file — stop
|
|
100
|
+
// rather than fall through to the single-entry fallback (which would return
|
|
101
|
+
// the raw root path).
|
|
102
|
+
if (rel === "")
|
|
103
|
+
return null;
|
|
104
|
+
if (rel)
|
|
105
|
+
return { entryId: entry.id, path: rel };
|
|
106
|
+
}
|
|
107
|
+
// 4. A single entry whose anchor did not apply (e.g. a git repo at the root, or
|
|
108
|
+
// a local path already root-relative): the path is already repo/root-relative.
|
|
109
|
+
if (entries.length === 1) {
|
|
110
|
+
return { entryId: entries[0].id, path: work };
|
|
111
|
+
}
|
|
112
|
+
// 5. Multi-entry with no anchor match: refuse to guess which entry owns it.
|
|
113
|
+
return null;
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=resolveWorkspaceFileSelection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveWorkspaceFileSelection.js","sourceRoot":"","sources":["../../src/workspace/resolveWorkspaceFileSelection.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,gFAAgF;AAChF,yEAAyE;AACzE,EAAE;AACF,8EAA8E;AAC9E,+EAA+E;AAC/E,4EAA4E;AAC5E,uEAAuE;AACvE,gFAAgF;AAChF,+DAA+D;AAC/D,4EAA4E;AAC5E,gEAAgE;AAChE,EAAE;AACF,iFAAiF;AACjF,8EAA8E;AAC9E,sDAAsD;AACtD,gFAAgF;AAChF,+EAA+E;AAC/E,+EAA+E;AAC/E,8DAA8D;AAC9D,uEAAuE;AACvE,gFAAgF;AAChF,iEAAiE;AACjE,sEAAsE;AACtE,+EAA+E;AAC/E,6EAA6E;AAC7E,4EAA4E;AAC5E,iEAAiE;AAEjE,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAIlE,kFAAkF;AAClF,SAAS,SAAS,CAAC,IAAY;IAC7B,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACtD,CAAC;AAED;;;;GAIG;AACH,SAAS,UAAU,CAAC,IAAY,EAAE,MAAc;IAC9C,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACzB,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,EAAE,CAAC;IAC/B,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACxE,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,6BAA6B,CAC3C,IAAY,EACZ,OAAkC,EAClC,oBAA6B;IAE7B,IAAI,CAAC,IAAI,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAE/C,8EAA8E;IAC9E,IAAI,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC3B,IAAI,oBAAoB,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,SAAS,CAAC,oBAAoB,CAAC,CAAC;QAC7C,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACzC,IAAI,SAAS,KAAK,IAAI;YAAE,IAAI,GAAG,SAAS,CAAC;IAC3C,CAAC;IACD,8EAA8E;IAC9E,QAAQ;IACR,IAAI,CAAC,IAAI,IAAI,IAAI,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC;IAEvC,+EAA+E;IAC/E,4EAA4E;IAC5E,+CAA+C;IAC/C,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU;QAAE,OAAO,IAAI,CAAC;IAExD,yEAAyE;IACzE,+EAA+E;IAC/E,6EAA6E;IAC7E,0CAA0C;IAC1C,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;IACnC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,MAAM,GAAkB,IAAI,CAAC;QACjC,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;YAC9C,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACtC,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,IAAI,OAAO,EAAE,CAAC;YAC3C,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC;QACD,IAAI,MAAM,KAAK,IAAI;YAAE,SAAS;QAE9B,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACrC,4EAA4E;QAC5E,4EAA4E;QAC5E,sBAAsB;QACtB,IAAI,GAAG,KAAK,EAAE;YAAE,OAAO,IAAI,CAAC;QAC5B,IAAI,GAAG;YAAE,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;IACnD,CAAC;IAED,gFAAgF;IAChF,kFAAkF;IAClF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAChD,CAAC;IAED,4EAA4E;IAC5E,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import type { WorkspaceEntry } from "./useWorkspaceEntries.js";
|
|
2
|
+
import type { WorkspaceContentMatch, WorkspaceContentSearcher } from "./WorkspaceContentSearcher.js";
|
|
3
|
+
/** Options for {@link useWorkspaceContentSearch}. */
|
|
4
|
+
export interface UseWorkspaceContentSearchOptions {
|
|
5
|
+
/** All workspace entries to search across. */
|
|
6
|
+
readonly entries: readonly WorkspaceEntry[];
|
|
7
|
+
/** Platform-injected content searcher. `undefined` → content search is unavailable. */
|
|
8
|
+
readonly searcher: WorkspaceContentSearcher | undefined;
|
|
9
|
+
/** Current search query. Trimmed; below {@link minLength} yields no search. */
|
|
10
|
+
readonly query: string;
|
|
11
|
+
/** Debounce delay for query changes in milliseconds. @default 300 */
|
|
12
|
+
readonly debounceMs?: number;
|
|
13
|
+
/** Minimum trimmed query length before a search runs. @default 2 */
|
|
14
|
+
readonly minLength?: number;
|
|
15
|
+
}
|
|
16
|
+
/** Content-search hits (and per-entry status) for one workspace entry. */
|
|
17
|
+
export interface WorkspaceContentSearchGroup {
|
|
18
|
+
/** The workspace entry these matches belong to. */
|
|
19
|
+
readonly entry: WorkspaceEntry;
|
|
20
|
+
/** Line-level matches within this entry, backend-ordered (path, then line). */
|
|
21
|
+
readonly matches: readonly WorkspaceContentMatch[];
|
|
22
|
+
/** `true` when this entry's search was capped (more matches exist than shown). */
|
|
23
|
+
readonly truncated: boolean;
|
|
24
|
+
/** Search error for this entry, if any (isolated — other entries still resolve). */
|
|
25
|
+
readonly error: Error | null;
|
|
26
|
+
}
|
|
27
|
+
/** Return value of {@link useWorkspaceContentSearch}. */
|
|
28
|
+
export interface UseWorkspaceContentSearchReturn {
|
|
29
|
+
/** Entries with something to show (matches, an error, or a truncation notice). */
|
|
30
|
+
readonly groups: readonly WorkspaceContentSearchGroup[];
|
|
31
|
+
/** Total matches across all groups (for a "showing N of M" affordance). */
|
|
32
|
+
readonly totalMatches: number;
|
|
33
|
+
/** `true` during the first search of a query with no prior results to show. */
|
|
34
|
+
readonly isLoading: boolean;
|
|
35
|
+
/** `true` while a new query loads *over* previously-shown results (no blank flash). */
|
|
36
|
+
readonly isRefetching: boolean;
|
|
37
|
+
/** `true` when no substrate can be searched (no searcher, or every entry unsupported). */
|
|
38
|
+
readonly isUnsupported: boolean;
|
|
39
|
+
/** First per-entry error, for a top-level fallback message. `null` when none. */
|
|
40
|
+
readonly error: Error | null;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Behavior hook powering workspace-wide content (text) search.
|
|
44
|
+
*
|
|
45
|
+
* The text-grep sibling of
|
|
46
|
+
* {@link useWorkspaceFileSearch}: it keeps
|
|
47
|
+
* that hook's per-entry aggregation, error isolation, and generation guard, and
|
|
48
|
+
* adds the platform's canonical debounce idiom from `useResourceSearch`
|
|
49
|
+
* (`query`/`debouncedQuery` + `setTimeout`). The key difference is that the
|
|
50
|
+
* debounced query is part of the *fetch* — each keystroke hits disk via the
|
|
51
|
+
* injected {@link WorkspaceContentSearcher}, uncached — so a `minLength` guard
|
|
52
|
+
* and a debounce protect the filesystem.
|
|
53
|
+
*
|
|
54
|
+
* Prior results stay visible while a new debounced query loads (`isRefetching`
|
|
55
|
+
* true, results unchanged); only the very first search with nothing to show
|
|
56
|
+
* flips `isLoading`. This avoids a per-keystroke blank flash the cached filename
|
|
57
|
+
* search never had.
|
|
58
|
+
*
|
|
59
|
+
* @example
|
|
60
|
+
* ```tsx
|
|
61
|
+
* const { groups, totalMatches, isRefetching } = useWorkspaceContentSearch({
|
|
62
|
+
* entries: workspace.entries,
|
|
63
|
+
* searcher: workspaceContentSearcher,
|
|
64
|
+
* query,
|
|
65
|
+
* });
|
|
66
|
+
* ```
|
|
67
|
+
*/
|
|
68
|
+
export declare function useWorkspaceContentSearch({ entries, searcher, query, debounceMs, minLength, }: UseWorkspaceContentSearchOptions): UseWorkspaceContentSearchReturn;
|
|
69
|
+
//# sourceMappingURL=useWorkspaceContentSearch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useWorkspaceContentSearch.d.ts","sourceRoot":"","sources":["../../src/workspace/useWorkspaceContentSearch.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,KAAK,EACV,qBAAqB,EACrB,wBAAwB,EACzB,MAAM,+BAA+B,CAAC;AAavC,qDAAqD;AACrD,MAAM,WAAW,gCAAgC;IAC/C,8CAA8C;IAC9C,QAAQ,CAAC,OAAO,EAAE,SAAS,cAAc,EAAE,CAAC;IAC5C,uFAAuF;IACvF,QAAQ,CAAC,QAAQ,EAAE,wBAAwB,GAAG,SAAS,CAAC;IACxD,+EAA+E;IAC/E,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,qEAAqE;IACrE,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,oEAAoE;IACpE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,0EAA0E;AAC1E,MAAM,WAAW,2BAA2B;IAC1C,mDAAmD;IACnD,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC;IAC/B,+EAA+E;IAC/E,QAAQ,CAAC,OAAO,EAAE,SAAS,qBAAqB,EAAE,CAAC;IACnD,kFAAkF;IAClF,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,oFAAoF;IACpF,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;CAC9B;AAED,yDAAyD;AACzD,MAAM,WAAW,+BAA+B;IAC9C,kFAAkF;IAClF,QAAQ,CAAC,MAAM,EAAE,SAAS,2BAA2B,EAAE,CAAC;IACxD,2EAA2E;IAC3E,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,+EAA+E;IAC/E,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,uFAAuF;IACvF,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,0FAA0F;IAC1F,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,iFAAiF;IACjF,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;CAC9B;AAUD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,yBAAyB,CAAC,EACxC,OAAO,EACP,QAAQ,EACR,KAAK,EACL,UAAgC,EAChC,SAA8B,GAC/B,EAAE,gCAAgC,GAAG,+BAA+B,CA4HpE"}
|