@stigmer/react 3.1.1 → 3.1.3
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 +25 -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/ArtifactPreviewModal.d.ts +5 -5
- package/execution/ArtifactPreviewModal.js +4 -4
- package/execution/ArtifactPreviewModal.js.map +1 -1
- package/execution/FileChangeProgressBar.d.ts +47 -0
- package/execution/FileChangeProgressBar.d.ts.map +1 -0
- package/execution/FileChangeProgressBar.js +49 -0
- package/execution/FileChangeProgressBar.js.map +1 -0
- package/execution/FileChangesView.d.ts.map +1 -1
- package/execution/FileChangesView.js +19 -4
- package/execution/FileChangesView.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/FileReviewAtoms.d.ts +27 -0
- package/execution/FileReviewAtoms.d.ts.map +1 -0
- package/execution/FileReviewAtoms.js +64 -0
- package/execution/FileReviewAtoms.js.map +1 -0
- package/execution/FileReviewCard.d.ts +2 -2
- package/execution/FileReviewCard.d.ts.map +1 -1
- package/execution/FileReviewCard.js +32 -62
- package/execution/FileReviewCard.js.map +1 -1
- package/execution/MessageEntry.d.ts +20 -0
- package/execution/MessageEntry.d.ts.map +1 -1
- package/execution/MessageEntry.js +19 -5
- package/execution/MessageEntry.js.map +1 -1
- package/execution/MessageThread.d.ts +75 -13
- package/execution/MessageThread.d.ts.map +1 -1
- package/execution/MessageThread.js +195 -27
- package/execution/MessageThread.js.map +1 -1
- package/execution/PlanArtifactCard.d.ts +36 -21
- package/execution/PlanArtifactCard.d.ts.map +1 -1
- package/execution/PlanArtifactCard.js +39 -25
- package/execution/PlanArtifactCard.js.map +1 -1
- package/execution/PlanCompletionCard.d.ts +4 -4
- package/execution/PlanCompletionCard.d.ts.map +1 -1
- package/execution/PlanCompletionCard.js +4 -4
- package/execution/PlanCompletionCard.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 +50 -0
- package/execution/PlanStreamingCard.d.ts.map +1 -0
- package/execution/PlanStreamingCard.js +40 -0
- package/execution/PlanStreamingCard.js.map +1 -0
- package/execution/index.d.ts +9 -1
- package/execution/index.d.ts.map +1 -1
- package/execution/index.js +4 -0
- package/execution/index.js.map +1 -1
- package/execution/use-build-from-plan-hotkey.d.ts +1 -1
- package/execution/use-build-from-plan-hotkey.js +1 -1
- package/execution/useArtifactCopy.d.ts +51 -0
- package/execution/useArtifactCopy.d.ts.map +1 -0
- package/execution/useArtifactCopy.js +75 -0
- package/execution/useArtifactCopy.js.map +1 -0
- package/execution/useArtifactDownload.d.ts.map +1 -1
- package/execution/useArtifactDownload.js +17 -5
- package/execution/useArtifactDownload.js.map +1 -1
- package/execution/useCreateAgentExecution.d.ts +12 -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 +43 -4
- package/library/detect-plan-artifact.d.ts.map +1 -1
- package/library/detect-plan-artifact.js +45 -5
- 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 +334 -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 +21 -0
- package/session/plan-document.d.ts.map +1 -0
- package/session/plan-document.js +28 -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 +14 -1
- package/session/useSessionConversation.d.ts.map +1 -1
- package/session/useSessionConversation.js +20 -2
- 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 +53 -10
- package/src/composer/__tests__/SessionComposer-contract.test.tsx +58 -4
- package/src/execution/ArtifactContentRenderer.tsx +101 -24
- package/src/execution/ArtifactPreviewModal.tsx +9 -9
- package/src/execution/FileChangeProgressBar.tsx +121 -0
- package/src/execution/FileChangesView.tsx +18 -4
- package/src/execution/FilePathContext.tsx +8 -1
- package/src/execution/FilePathLink.tsx +22 -6
- package/src/execution/FileReviewAtoms.tsx +89 -0
- package/src/execution/FileReviewCard.tsx +57 -90
- package/src/execution/MessageEntry.tsx +49 -1
- package/src/execution/MessageThread.tsx +308 -39
- package/src/execution/PlanArtifactCard.tsx +174 -64
- package/src/execution/PlanCompletionCard.tsx +5 -5
- package/src/execution/PlanDocumentMessage.tsx +96 -0
- package/src/execution/PlanStreamingCard.tsx +141 -0
- package/src/execution/__tests__/ArtifactContentRenderer.test.tsx +80 -1
- package/src/execution/__tests__/ArtifactPreviewModal.test.tsx +6 -6
- package/src/execution/__tests__/FileChangeProgressBar.test.tsx +125 -0
- package/src/execution/__tests__/FilePathLink.test.tsx +87 -0
- package/src/execution/__tests__/FileReviewCard.test.tsx +66 -7
- package/src/execution/__tests__/MessageThread.test.tsx +102 -1
- package/src/execution/__tests__/PlanArtifactCard.test.tsx +114 -26
- package/src/execution/__tests__/PlanCompletionCard.test.tsx +2 -2
- package/src/execution/__tests__/PlanDocumentMessage.test.tsx +55 -0
- package/src/execution/__tests__/PlanStreamingCard.test.tsx +56 -0
- package/src/execution/__tests__/buildThreadItems-plan-completion.test.ts +600 -22
- package/src/execution/__tests__/message-entry.test.tsx +17 -0
- package/src/execution/__tests__/useArtifactCopy.test.tsx +90 -0
- package/src/execution/__tests__/useArtifactDownload.test.tsx +2 -0
- package/src/execution/__tests__/useCreateAgentExecution.test.tsx +85 -0
- package/src/execution/index.ts +13 -1
- package/src/execution/use-build-from-plan-hotkey.ts +1 -1
- package/src/execution/useArtifactCopy.ts +109 -0
- package/src/execution/useArtifactDownload.ts +17 -5
- package/src/execution/useCreateAgentExecution.ts +18 -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 +69 -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 +56 -5
- 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 +69 -0
- package/src/library/__tests__/detect-streaming-plan.test.ts +234 -0
- package/src/library/detect-plan-artifact.ts +62 -5
- package/src/library/detect-streaming-plan.ts +108 -0
- package/src/library/index.ts +7 -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 +655 -96
- 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 +66 -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__/useSessionConversation.test.tsx +44 -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 +42 -8
- 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 +30 -0
- package/src/session/useOpenFileChange.ts +53 -0
- package/src/session/usePlanDraft.ts +109 -0
- package/src/session/useSessionConversation.ts +38 -3
- 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 +174 -0
- package/src/workspace/ExplorerTree.tsx +253 -0
- package/src/workspace/FileViewer.tsx +537 -0
- package/src/workspace/WorkspaceContentSearch.tsx +502 -0
- package/src/workspace/WorkspaceContentSearcher.ts +70 -0
- package/src/workspace/WorkspaceEditor.tsx +19 -16
- package/src/workspace/WorkspaceFileLister.ts +11 -0
- package/src/workspace/WorkspaceFileReader.ts +57 -0
- package/src/workspace/WorkspaceFileSearch.tsx +452 -0
- package/src/workspace/WorkspaceSurface.tsx +839 -0
- package/src/workspace/__tests__/EditorTabs.test.tsx +102 -0
- package/src/workspace/__tests__/ExplorerTree.test.tsx +204 -0
- package/src/workspace/__tests__/FileViewer.test.tsx +439 -0
- package/src/workspace/__tests__/WorkspaceContentSearch.test.tsx +229 -0
- package/src/workspace/__tests__/WorkspaceEditor-initialPanel.test.tsx +19 -0
- package/src/workspace/__tests__/WorkspaceFileSearch.test.tsx +227 -0
- package/src/workspace/__tests__/WorkspaceSurface.test.tsx +418 -0
- package/src/workspace/__tests__/a11y/harness.tsx +140 -0
- package/src/workspace/__tests__/a11y/mock-capabilities.ts +138 -0
- package/src/workspace/__tests__/a11y/workspace-editor.a11y.test.tsx +65 -0
- package/src/workspace/__tests__/a11y/workspace-explorer-search.a11y.test.tsx +112 -0
- package/src/workspace/__tests__/a11y/workspace-viewer-tabs.a11y.test.tsx +69 -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 +47 -0
- package/workspace/EditorTabs.d.ts.map +1 -0
- package/workspace/EditorTabs.js +78 -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 +49 -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 +193 -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 +216 -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/WorkspaceEditor.d.ts.map +1 -1
- package/workspace/WorkspaceEditor.js +8 -10
- package/workspace/WorkspaceEditor.js.map +1 -1
- 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 +175 -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 +220 -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
|
@@ -3,7 +3,7 @@ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-run
|
|
|
3
3
|
import { forwardRef, useCallback, useMemo, useRef, useState, } from "react";
|
|
4
4
|
import { Virtuoso } from "react-virtuoso";
|
|
5
5
|
import { cn } from "@stigmer/theme";
|
|
6
|
-
import { ThreadItemRenderer, } from "../execution/MessageThread.js";
|
|
6
|
+
import { ThreadItemRenderer, threadContentColumnClass, } from "../execution/MessageThread.js";
|
|
7
7
|
import { FilePathContext } from "../execution/FilePathContext.js";
|
|
8
8
|
import { SandboxContext } from "../execution/SandboxContext.js";
|
|
9
9
|
import { ApprovalContext } from "../execution/ApprovalContext.js";
|
|
@@ -36,7 +36,7 @@ const NEAR_BOTTOM_THRESHOLD_PX = 80;
|
|
|
36
36
|
*
|
|
37
37
|
* @internal
|
|
38
38
|
*/
|
|
39
|
-
export function VirtualizedThread({ items, formatToolCallSummary, onApprovalSubmit, submittingApprovalIds, approvalErrors, filePathCtx, sandboxCtx, approvalCtx, fileReviewCtx, unresolvedApprovalCount, onBuildFromPlan, org, planActionsDisabled,
|
|
39
|
+
export function VirtualizedThread({ items, formatToolCallSummary, onApprovalSubmit, submittingApprovalIds, approvalErrors, filePathCtx, sandboxCtx, approvalCtx, fileReviewCtx, unresolvedApprovalCount, onBuildFromPlan, onOpenPlan, org, planActionsDisabled, planBuildPending, contentColumn, onRetrySend, onRetryExecution, onEditMessage, }) {
|
|
40
40
|
const virtuosoRef = useRef(null);
|
|
41
41
|
const scrollerRef = useRef(null);
|
|
42
42
|
const [isAtBottom, setIsAtBottom] = useState(true);
|
|
@@ -57,12 +57,14 @@ export function VirtualizedThread({ items, formatToolCallSummary, onApprovalSubm
|
|
|
57
57
|
submittingApprovalIds,
|
|
58
58
|
approvalErrors,
|
|
59
59
|
onBuildFromPlan,
|
|
60
|
+
onOpenPlan,
|
|
60
61
|
org,
|
|
61
62
|
planActionsDisabled,
|
|
63
|
+
planBuildPending,
|
|
62
64
|
onRetrySend,
|
|
63
65
|
onRetryExecution,
|
|
64
66
|
onEditMessage,
|
|
65
|
-
}), [formatToolCallSummary, onApprovalSubmit, submittingApprovalIds, approvalErrors, onBuildFromPlan, org, planActionsDisabled, onRetrySend, onRetryExecution, onEditMessage]);
|
|
66
|
-
return (_jsxs(_Fragment, { children: [_jsx(SandboxContext.Provider, { value: sandboxCtx, children: _jsx(FilePathContext.Provider, { value: filePathCtx, children: _jsx(ApprovalContext.Provider, { value: approvalCtx, children: _jsx(FileReviewContext.Provider, { value: fileReviewCtx, children: _jsx(DevProfiler, { id: "MessageThread:virtualized", children: _jsx(Virtuoso, { ref: virtuosoRef, data: items, alignToBottom: true, followOutput: handleFollowOutput, atBottomStateChange: setIsAtBottom, atBottomThreshold: NEAR_BOTTOM_THRESHOLD_PX, computeItemKey: (_index, item) => item.key, increaseViewportBy: { top: 200, bottom: 200 }, scrollerRef: handleScrollerRef, className: "h-full", components: { Scroller: ScrollerWithA11y }, itemContent: (index, item) => (_jsx("div", { className: cn("pb-4 pt-0 first:pt-6",
|
|
67
|
+
}), [formatToolCallSummary, onApprovalSubmit, submittingApprovalIds, approvalErrors, onBuildFromPlan, onOpenPlan, org, planActionsDisabled, planBuildPending, onRetrySend, onRetryExecution, onEditMessage]);
|
|
68
|
+
return (_jsxs(_Fragment, { children: [_jsx(SandboxContext.Provider, { value: sandboxCtx, children: _jsx(FilePathContext.Provider, { value: filePathCtx, children: _jsx(ApprovalContext.Provider, { value: approvalCtx, children: _jsx(FileReviewContext.Provider, { value: fileReviewCtx, children: _jsx(DevProfiler, { id: "MessageThread:virtualized", children: _jsx(Virtuoso, { ref: virtuosoRef, data: items, alignToBottom: true, followOutput: handleFollowOutput, atBottomStateChange: setIsAtBottom, atBottomThreshold: NEAR_BOTTOM_THRESHOLD_PX, computeItemKey: (_index, item) => item.key, increaseViewportBy: { top: 200, bottom: 200 }, scrollerRef: handleScrollerRef, className: "h-full", components: { Scroller: ScrollerWithA11y }, itemContent: (index, item) => (_jsx("div", { className: cn("pb-4 pt-0 first:pt-6", threadContentColumnClass(contentColumn)), children: _jsx(ThreadItemWrapper, { animate: index >= items.length - 2, children: _jsx(ThreadItemRenderer, { item: item, ...renderProps }) }) })) }) }) }) }) }) }), _jsx(JumpToLatestButton, { onClick: jumpToLatest, visible: !isAtBottom && unresolvedApprovalCount === 0 }), _jsx(ApprovalPeekBar, { visible: !isAtBottom && unresolvedApprovalCount > 0, count: unresolvedApprovalCount, onClick: jumpToLatest })] }));
|
|
67
69
|
}
|
|
68
70
|
//# sourceMappingURL=VirtualizedThread.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VirtualizedThread.js","sourceRoot":"","sources":["../../src/internal/VirtualizedThread.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EACL,UAAU,EACV,WAAW,EACX,OAAO,EACP,MAAM,EACN,QAAQ,GAET,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,QAAQ,EAAuB,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AAGpC,OAAO,EACL,kBAAkB,
|
|
1
|
+
{"version":3,"file":"VirtualizedThread.js","sourceRoot":"","sources":["../../src/internal/VirtualizedThread.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
/** Broad file categories, chosen so one glyph serves many related extensions. */
|
|
3
|
+
export type FileIconCategory = "code" | "markup" | "style" | "data" | "markdown" | "image" | "generic";
|
|
4
|
+
/** Classify a file name into a {@link FileIconCategory} by its extension. */
|
|
5
|
+
export declare function fileIconCategory(fileName: string): FileIconCategory;
|
|
6
|
+
/**
|
|
7
|
+
* A monochrome icon for a file, chosen by extension category. Tints from
|
|
8
|
+
* `currentColor`; size via the surrounding font/box.
|
|
9
|
+
*/
|
|
10
|
+
export declare function FileTypeIcon({ fileName }: {
|
|
11
|
+
readonly fileName: string;
|
|
12
|
+
}): ReactNode;
|
|
13
|
+
/** A folder icon; `open` swaps to the opened-folder silhouette. */
|
|
14
|
+
export declare function FolderTypeIcon({ open }: {
|
|
15
|
+
readonly open?: boolean;
|
|
16
|
+
}): ReactNode;
|
|
17
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/internal/file-icons/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAQvC,iFAAiF;AACjF,MAAM,MAAM,gBAAgB,GACxB,MAAM,GACN,QAAQ,GACR,OAAO,GACP,MAAM,GACN,UAAU,GACV,OAAO,GACP,SAAS,CAAC;AA8Bd,6EAA6E;AAC7E,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,gBAAgB,CAKnE;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAqBnF;AAiCD,mEAAmE;AACnE,wBAAgB,cAAc,CAAC,EAAE,IAAY,EAAE,EAAE;IAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,SAAS,CAqBvF"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
/**
|
|
4
|
+
* Extension → category. Kept intentionally coarse: adding a language usually
|
|
5
|
+
* means adding one entry here, not a new glyph. Unknown extensions fall back to
|
|
6
|
+
* the generic document icon.
|
|
7
|
+
*/
|
|
8
|
+
const EXTENSION_CATEGORY = {
|
|
9
|
+
// code
|
|
10
|
+
js: "code", jsx: "code", mjs: "code", cjs: "code",
|
|
11
|
+
ts: "code", tsx: "code",
|
|
12
|
+
py: "code", rb: "code", go: "code", rs: "code",
|
|
13
|
+
java: "code", kt: "code", c: "code", h: "code",
|
|
14
|
+
cpp: "code", cc: "code", hpp: "code", cs: "code",
|
|
15
|
+
php: "code", swift: "code", sh: "code", bash: "code", zsh: "code",
|
|
16
|
+
lua: "code", dart: "code", scala: "code", proto: "code",
|
|
17
|
+
// markup
|
|
18
|
+
html: "markup", htm: "markup", xml: "markup", vue: "markup", svelte: "markup",
|
|
19
|
+
// style
|
|
20
|
+
css: "style", scss: "style", sass: "style", less: "style",
|
|
21
|
+
// data / config
|
|
22
|
+
json: "data", jsonc: "data", yaml: "data", yml: "data",
|
|
23
|
+
toml: "data", ini: "data", env: "data", csv: "data", tsv: "data",
|
|
24
|
+
// markdown
|
|
25
|
+
md: "markdown", mdx: "markdown", markdown: "markdown",
|
|
26
|
+
// image
|
|
27
|
+
png: "image", jpg: "image", jpeg: "image", gif: "image",
|
|
28
|
+
webp: "image", svg: "image", ico: "image", bmp: "image",
|
|
29
|
+
};
|
|
30
|
+
/** Classify a file name into a {@link FileIconCategory} by its extension. */
|
|
31
|
+
export function fileIconCategory(fileName) {
|
|
32
|
+
const dot = fileName.lastIndexOf(".");
|
|
33
|
+
if (dot < 0 || dot === fileName.length - 1)
|
|
34
|
+
return "generic";
|
|
35
|
+
const ext = fileName.slice(dot + 1).toLowerCase();
|
|
36
|
+
return EXTENSION_CATEGORY[ext] ?? "generic";
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* A monochrome icon for a file, chosen by extension category. Tints from
|
|
40
|
+
* `currentColor`; size via the surrounding font/box.
|
|
41
|
+
*/
|
|
42
|
+
export function FileTypeIcon({ fileName }) {
|
|
43
|
+
const category = fileIconCategory(fileName);
|
|
44
|
+
return (_jsxs("svg", { width: "14", height: "14", viewBox: "0 0 16 16", fill: "none", stroke: "currentColor", strokeWidth: "1.3", strokeLinecap: "round", strokeLinejoin: "round", className: "shrink-0", "aria-hidden": "true", children: [_jsx("path", { d: "M9.5 1.5H4.5C3.95 1.5 3.5 1.95 3.5 2.5V13.5C3.5 14.05 3.95 14.5 4.5 14.5H11.5C12.05 14.5 12.5 14.05 12.5 13.5V4.5L9.5 1.5Z" }), _jsx("path", { d: "M9.3 1.7V4.5H12.3" }), CATEGORY_GLYPH[category]] }));
|
|
45
|
+
}
|
|
46
|
+
/** The inner glyph that distinguishes each category, drawn in the doc body. */
|
|
47
|
+
const CATEGORY_GLYPH = {
|
|
48
|
+
code: (_jsxs(_Fragment, { children: [_jsx("path", { d: "M7 8.5L5.75 9.75L7 11" }), _jsx("path", { d: "M9 8.5L10.25 9.75L9 11" })] })),
|
|
49
|
+
markup: (_jsxs(_Fragment, { children: [_jsx("path", { d: "M6.5 8.5L5.5 9.9L6.5 11.3" }), _jsx("path", { d: "M9.5 8.5L10.5 9.9L9.5 11.3" })] })),
|
|
50
|
+
style: _jsx("path", { d: "M5.5 9.3H10.5M5.5 11.1H8.5" }),
|
|
51
|
+
data: (_jsxs(_Fragment, { children: [_jsx("path", { d: "M7 8.4C6.2 8.4 6.2 9.3 6.2 9.9C6.2 10.5 6.2 11.4 5.4 11.4" }), _jsx("path", { d: "M9 8.4C9.8 8.4 9.8 9.3 9.8 9.9C9.8 10.5 9.8 11.4 10.6 11.4" })] })),
|
|
52
|
+
markdown: _jsx("path", { d: "M5.4 11.3V8.6L6.9 10.1L8.4 8.6V11.3M10.4 8.7V11.1M9.5 10.2L10.4 11.2L11.3 10.2" }),
|
|
53
|
+
image: (_jsxs(_Fragment, { children: [_jsx("circle", { cx: "6.4", cy: "9", r: "0.7" }), _jsx("path", { d: "M5.2 11.4L7.3 9.9L10.6 11.6" })] })),
|
|
54
|
+
generic: _jsx("path", { d: "M5.5 9.3H10.5M5.5 11.1H10.5" }),
|
|
55
|
+
};
|
|
56
|
+
/** A folder icon; `open` swaps to the opened-folder silhouette. */
|
|
57
|
+
export function FolderTypeIcon({ open = false }) {
|
|
58
|
+
return (_jsx("svg", { width: "14", height: "14", viewBox: "0 0 16 16", fill: "none", stroke: "currentColor", strokeWidth: "1.3", strokeLinecap: "round", strokeLinejoin: "round", className: "shrink-0", "aria-hidden": "true", children: open ? (_jsx("path", { d: "M1.8 5.5V12A1 1 0 002.8 13H12.6L14.5 7.5H4.2L2.8 11" })) : (_jsx("path", { d: "M1.8 4.5A1 1 0 012.8 3.5H6L7.3 5H13.2A1 1 0 0114.2 6V12A1 1 0 0113.2 13H2.8A1 1 0 011.8 12V4.5Z" })) }));
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/internal/file-icons/index.tsx"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,12 @@ export interface FileTreeNodeProps {
|
|
|
9
9
|
readonly node: TreeNode;
|
|
10
10
|
readonly selectedPath: string;
|
|
11
11
|
readonly onSelect: (path: string) => void;
|
|
12
|
+
/**
|
|
13
|
+
* Optional double-click handler for file nodes. When set, a double-click on a
|
|
14
|
+
* file calls `onActivate(path)` (used by the workspace surface to pin a
|
|
15
|
+
* previewed tab); the single click still fires `onSelect`. Folders ignore it.
|
|
16
|
+
*/
|
|
17
|
+
readonly onActivate?: (path: string) => void;
|
|
12
18
|
readonly depth: number;
|
|
13
19
|
/**
|
|
14
20
|
* When `true`, file nodes (not folders) become draggable and emit
|
|
@@ -18,6 +24,17 @@ export interface FileTreeNodeProps {
|
|
|
18
24
|
* where file referencing is not applicable (e.g., SkillFileBrowser).
|
|
19
25
|
*/
|
|
20
26
|
readonly enableDrag?: boolean;
|
|
27
|
+
/**
|
|
28
|
+
* When `true`, render monochrome file-type / folder icons before each name
|
|
29
|
+
* (VS Code explorer feel). Opt-in so drag/skill contexts stay icon-free.
|
|
30
|
+
*/
|
|
31
|
+
readonly showIcons?: boolean;
|
|
32
|
+
/**
|
|
33
|
+
* When `true`, draw vertical indent guides down each nested group and indent
|
|
34
|
+
* via nested margins rather than per-row left padding. Opt-in; the default
|
|
35
|
+
* padding-based indentation is preserved for existing consumers.
|
|
36
|
+
*/
|
|
37
|
+
readonly indentGuides?: boolean;
|
|
21
38
|
/**
|
|
22
39
|
* Maximum depth at which folders start collapsed instead of expanded.
|
|
23
40
|
* Folders at depth >= maxInitialDepth render collapsed by default,
|
|
@@ -38,5 +55,5 @@ export interface FileTreeNodeProps {
|
|
|
38
55
|
* Uses `role="treeitem"` / `role="group"` for a11y and `--stgm-*`
|
|
39
56
|
* theme tokens for all visual properties.
|
|
40
57
|
*/
|
|
41
|
-
export declare function FileTreeNode({ node, selectedPath, onSelect, depth, enableDrag, maxInitialDepth, }: FileTreeNodeProps): import("react/jsx-runtime").JSX.Element;
|
|
58
|
+
export declare function FileTreeNode({ node, selectedPath, onSelect, onActivate, depth, enableDrag, showIcons, indentGuides, maxInitialDepth, }: FileTreeNodeProps): import("react/jsx-runtime").JSX.Element;
|
|
42
59
|
//# sourceMappingURL=FileTreeNode.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileTreeNode.d.ts","sourceRoot":"","sources":["../../../src/internal/file-tree/FileTreeNode.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"FileTreeNode.d.ts","sourceRoot":"","sources":["../../../src/internal/file-tree/FileTreeNode.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE/C;;;;GAIG;AACH,eAAO,MAAM,aAAa,mCAAmC,CAAC;AAE9D,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C;;;;OAIG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB;;;;;;OAMG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAC9B;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B;;;;OAIG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAChC;;;;;;;OAOG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;CACnC;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,EAC3B,IAAI,EACJ,YAAY,EACZ,QAAQ,EACR,UAAU,EACV,KAAK,EACL,UAAkB,EAClB,SAAiB,EACjB,YAAoB,EACpB,eAAe,GAChB,EAAE,iBAAiB,2CAkGnB"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { useCallback, useState } from "react";
|
|
4
4
|
import { cn } from "@stigmer/theme";
|
|
5
|
+
import { FileTypeIcon, FolderTypeIcon } from "../file-icons/index.js";
|
|
5
6
|
/**
|
|
6
7
|
* MIME type used to transfer workspace file-reference data during
|
|
7
8
|
* drag-and-drop. The payload is `JSON.stringify({ path })` where
|
|
@@ -18,7 +19,7 @@ export const FILE_REF_MIME = "application/x-stigmer-file-ref";
|
|
|
18
19
|
* Uses `role="treeitem"` / `role="group"` for a11y and `--stgm-*`
|
|
19
20
|
* theme tokens for all visual properties.
|
|
20
21
|
*/
|
|
21
|
-
export function FileTreeNode({ node, selectedPath, onSelect, depth, enableDrag = false, maxInitialDepth, }) {
|
|
22
|
+
export function FileTreeNode({ node, selectedPath, onSelect, onActivate, depth, enableDrag = false, showIcons = false, indentGuides = false, maxInitialDepth, }) {
|
|
22
23
|
const [expanded, setExpanded] = useState(maxInitialDepth === undefined ? true : depth < maxInitialDepth);
|
|
23
24
|
const isFolder = !!node.children;
|
|
24
25
|
const isSelected = node.path === selectedPath;
|
|
@@ -31,10 +32,18 @@ export function FileTreeNode({ node, selectedPath, onSelect, depth, enableDrag =
|
|
|
31
32
|
onSelect(node.path);
|
|
32
33
|
}
|
|
33
34
|
}, [isFolder, node.path, onSelect]);
|
|
35
|
+
const handleDoubleClick = useCallback(() => {
|
|
36
|
+
if (!isFolder)
|
|
37
|
+
onActivate?.(node.path);
|
|
38
|
+
}, [isFolder, node.path, onActivate]);
|
|
34
39
|
const handleDragStart = useCallback((e) => {
|
|
35
40
|
e.dataTransfer.setData(FILE_REF_MIME, JSON.stringify({ path: node.path }));
|
|
36
41
|
e.dataTransfer.effectAllowed = "link";
|
|
37
42
|
}, [node.path]);
|
|
38
|
-
return (_jsxs("li", { role: "treeitem", "aria-expanded": isFolder ? expanded : undefined, children: [_jsxs("button", { type: "button", onClick: handleClick, draggable: isDraggable, onDragStart: isDraggable ? handleDragStart : undefined, className: cn("flex w-full items-center gap-1.5
|
|
43
|
+
return (_jsxs("li", { role: "treeitem", "aria-level": depth + 1, "aria-expanded": isFolder ? expanded : undefined, children: [_jsxs("button", { type: "button", onClick: handleClick, onDoubleClick: onActivate ? handleDoubleClick : undefined, draggable: isDraggable, onDragStart: isDraggable ? handleDragStart : undefined, className: cn("flex w-full items-center gap-1.5 py-1 text-left text-xs transition-colors", "hover:bg-muted", "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring", isSelected && !isFolder && "bg-muted text-foreground font-medium", !isSelected && "text-muted-foreground", isDraggable && "cursor-grab active:cursor-grabbing"),
|
|
44
|
+
// Indent-guide mode indents via the nested group's margin, so rows need
|
|
45
|
+
// only a small constant inset; padding mode keeps the per-depth inset.
|
|
46
|
+
style: { paddingLeft: indentGuides ? "8px" : `${12 + depth * 12}px`, paddingRight: "8px" }, "aria-current": isSelected ? "true" : undefined, children: [isFolder && (_jsx("span", { "aria-hidden": "true", className: "text-[10px] text-muted-foreground-subtle", children: expanded ? "▼" : "▶" })), showIcons &&
|
|
47
|
+
(isFolder ? (_jsx(FolderTypeIcon, { open: expanded })) : (_jsx(FileTypeIcon, { fileName: node.name }))), _jsx("span", { className: cn("truncate", isFolder && "font-medium text-foreground"), children: node.name })] }), isFolder && expanded && node.children && (_jsx("ul", { role: "group", className: cn(indentGuides && "ml-3 border-l border-border"), children: node.children.map((child) => (_jsx(FileTreeNode, { node: child, selectedPath: selectedPath, onSelect: onSelect, onActivate: onActivate, depth: depth + 1, enableDrag: enableDrag, showIcons: showIcons, indentGuides: indentGuides, maxInitialDepth: maxInitialDepth }, child.path))) }))] }));
|
|
39
48
|
}
|
|
40
49
|
//# sourceMappingURL=FileTreeNode.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileTreeNode.js","sourceRoot":"","sources":["../../../src/internal/file-tree/FileTreeNode.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAC;AAC9D,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"FileTreeNode.js","sourceRoot":"","sources":["../../../src/internal/file-tree/FileTreeNode.tsx"],"names":[],"mappings":"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"}
|
|
@@ -25,6 +25,14 @@ export declare function stripFrontmatter(content: string): string;
|
|
|
25
25
|
* no-op for everything else (already-rich markdown, prose, or a reply that is
|
|
26
26
|
* legitimately a single code block).
|
|
27
27
|
*
|
|
28
|
+
* `allowBareFence` extends the unwrap to a whole-body fence with NO language
|
|
29
|
+
* tag. For an ordinary chat message a bare fence is ambiguous (it may be a
|
|
30
|
+
* legitimate single code block), so the default stays strict. A Plan-mode plan
|
|
31
|
+
* is different by contract: the turn's output IS a markdown document, so a
|
|
32
|
+
* reply that is one giant untagged fence is a wrapped plan, not code. Only
|
|
33
|
+
* plan-document surfaces pass `true`. A fence tagged with any other language
|
|
34
|
+
* (```python …) is never unwrapped in either mode.
|
|
35
|
+
*
|
|
28
36
|
* Render-time only: callers pass it the text right before handing it to the
|
|
29
37
|
* markdown renderer, so the transcript and the raw artifact stay faithful to
|
|
30
38
|
* what the agent produced — a single source of truth for the unwrap, with no
|
|
@@ -32,7 +40,23 @@ export declare function stripFrontmatter(content: string): string;
|
|
|
32
40
|
* arrived yet, so this no-ops and the live text renders as typed; it unwraps
|
|
33
41
|
* once the block closes.
|
|
34
42
|
*/
|
|
35
|
-
export declare function unwrapEnclosingMarkdownFence(content: string): string;
|
|
43
|
+
export declare function unwrapEnclosingMarkdownFence(content: string, allowBareFence?: boolean): string;
|
|
44
|
+
/**
|
|
45
|
+
* Splits a markdown document into its leading `# H1` title and the remaining
|
|
46
|
+
* body, for surfaces that render the title in their own chrome (the plan
|
|
47
|
+
* document header) instead of inside the prose flow.
|
|
48
|
+
*
|
|
49
|
+
* Only a heading at the very start of the document counts as the title — an
|
|
50
|
+
* `# H1` further down is document content and stays in the body. When there is
|
|
51
|
+
* no leading H1, `title` is `null` and `body` is the input unchanged.
|
|
52
|
+
*
|
|
53
|
+
* Render-time only, like {@link unwrapEnclosingMarkdownFence}: the stored
|
|
54
|
+
* message/artifact keeps its heading; only the presentation moves it.
|
|
55
|
+
*/
|
|
56
|
+
export declare function extractLeadingH1(markdown: string): {
|
|
57
|
+
readonly title: string | null;
|
|
58
|
+
readonly body: string;
|
|
59
|
+
};
|
|
36
60
|
/**
|
|
37
61
|
* Styled react-markdown component overrides for SDK markdown surfaces.
|
|
38
62
|
*
|
|
@@ -43,4 +67,17 @@ export declare function unwrapEnclosingMarkdownFence(content: string): string;
|
|
|
43
67
|
* Used by `MessageEntry` (chat messages) and `SkillDetailView` (SKILL.md).
|
|
44
68
|
*/
|
|
45
69
|
export declare const MARKDOWN_COMPONENTS: Components;
|
|
70
|
+
/**
|
|
71
|
+
* Document-grade typography for a Plan-mode plan: one step up the heading
|
|
72
|
+
* scale from the chat-tuned {@link MARKDOWN_COMPONENTS}, wider section
|
|
73
|
+
* spacing, and a hairline under `##` section headings for scannability. The
|
|
74
|
+
* plan is a reviewable document, not a chat bubble — its headings must carry
|
|
75
|
+
* the structure at a glance.
|
|
76
|
+
*
|
|
77
|
+
* Everything except the headings is inherited from `MARKDOWN_COMPONENTS`, so
|
|
78
|
+
* body text, code, tables, and links render identically across chat and plan
|
|
79
|
+
* surfaces. Used by `PlanDocumentMessage` (thread) — the same treatment any
|
|
80
|
+
* plan-document surface should share.
|
|
81
|
+
*/
|
|
82
|
+
export declare const PLAN_DOCUMENT_MARKDOWN_COMPONENTS: Components;
|
|
46
83
|
//# sourceMappingURL=markdown-components.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdown-components.d.ts","sourceRoot":"","sources":["../../src/internal/markdown-components.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,SAAS,MAAM,YAAY,CAAC;AAQnC;;;GAGG;AACH,eAAO,MAAM,cAAc,sBAAc,CAAC;AAI1C;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAExD;
|
|
1
|
+
{"version":3,"file":"markdown-components.d.ts","sourceRoot":"","sources":["../../src/internal/markdown-components.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,SAAS,MAAM,YAAY,CAAC;AAQnC;;;GAGG;AACH,eAAO,MAAM,cAAc,sBAAc,CAAC;AAI1C;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAExD;AAwBD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,MAAM,EACf,cAAc,UAAQ,GACrB,MAAM,CASR;AASD;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG;IAClD,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB,CAKA;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,mBAAmB,EAAE,UA4LjC,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,iCAAiC,EAAE,UAqC/C,CAAC"}
|
|
@@ -33,6 +33,13 @@ export function stripFrontmatter(content) {
|
|
|
33
33
|
* the kind of fuzzy heuristic this codebase avoids.
|
|
34
34
|
*/
|
|
35
35
|
const ENCLOSING_MARKDOWN_FENCE_RE = /^(`{3,})[ \t]*(?:markdown|md)[ \t]*\r?\n([\s\S]*?)\r?\n\1[ \t]*$/i;
|
|
36
|
+
/**
|
|
37
|
+
* Matches content whose ENTIRE body is a single fenced code block with an
|
|
38
|
+
* EMPTY info string (no language tag). Only meaningful for surfaces that know
|
|
39
|
+
* the body is markdown by contract (a Plan-mode plan) — see
|
|
40
|
+
* {@link unwrapEnclosingMarkdownFence}'s `allowBareFence`.
|
|
41
|
+
*/
|
|
42
|
+
const ENCLOSING_BARE_FENCE_RE = /^(`{3,})[ \t]*\r?\n([\s\S]*?)\r?\n\1[ \t]*$/;
|
|
36
43
|
/**
|
|
37
44
|
* Unwraps a message the model wrapped entirely in a ```markdown / ```md fence.
|
|
38
45
|
*
|
|
@@ -43,6 +50,14 @@ const ENCLOSING_MARKDOWN_FENCE_RE = /^(`{3,})[ \t]*(?:markdown|md)[ \t]*\r?\n([\
|
|
|
43
50
|
* no-op for everything else (already-rich markdown, prose, or a reply that is
|
|
44
51
|
* legitimately a single code block).
|
|
45
52
|
*
|
|
53
|
+
* `allowBareFence` extends the unwrap to a whole-body fence with NO language
|
|
54
|
+
* tag. For an ordinary chat message a bare fence is ambiguous (it may be a
|
|
55
|
+
* legitimate single code block), so the default stays strict. A Plan-mode plan
|
|
56
|
+
* is different by contract: the turn's output IS a markdown document, so a
|
|
57
|
+
* reply that is one giant untagged fence is a wrapped plan, not code. Only
|
|
58
|
+
* plan-document surfaces pass `true`. A fence tagged with any other language
|
|
59
|
+
* (```python …) is never unwrapped in either mode.
|
|
60
|
+
*
|
|
46
61
|
* Render-time only: callers pass it the text right before handing it to the
|
|
47
62
|
* markdown renderer, so the transcript and the raw artifact stay faithful to
|
|
48
63
|
* what the agent produced — a single source of truth for the unwrap, with no
|
|
@@ -50,9 +65,42 @@ const ENCLOSING_MARKDOWN_FENCE_RE = /^(`{3,})[ \t]*(?:markdown|md)[ \t]*\r?\n([\
|
|
|
50
65
|
* arrived yet, so this no-ops and the live text renders as typed; it unwraps
|
|
51
66
|
* once the block closes.
|
|
52
67
|
*/
|
|
53
|
-
export function unwrapEnclosingMarkdownFence(content) {
|
|
54
|
-
const
|
|
55
|
-
|
|
68
|
+
export function unwrapEnclosingMarkdownFence(content, allowBareFence = false) {
|
|
69
|
+
const trimmed = content.trim();
|
|
70
|
+
const tagged = ENCLOSING_MARKDOWN_FENCE_RE.exec(trimmed);
|
|
71
|
+
if (tagged)
|
|
72
|
+
return tagged[2];
|
|
73
|
+
if (allowBareFence) {
|
|
74
|
+
const bare = ENCLOSING_BARE_FENCE_RE.exec(trimmed);
|
|
75
|
+
if (bare)
|
|
76
|
+
return bare[2];
|
|
77
|
+
}
|
|
78
|
+
return content;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Matches a document that OPENS with an `# H1` heading (optionally preceded by
|
|
82
|
+
* blank lines only). Group 1 is the heading text; the match spans through the
|
|
83
|
+
* heading's trailing newline(s) so `body` starts at the first content line.
|
|
84
|
+
*/
|
|
85
|
+
const LEADING_H1_RE = /^#[ \t]+(.+?)[ \t]*(?:\r?\n+|$)/;
|
|
86
|
+
/**
|
|
87
|
+
* Splits a markdown document into its leading `# H1` title and the remaining
|
|
88
|
+
* body, for surfaces that render the title in their own chrome (the plan
|
|
89
|
+
* document header) instead of inside the prose flow.
|
|
90
|
+
*
|
|
91
|
+
* Only a heading at the very start of the document counts as the title — an
|
|
92
|
+
* `# H1` further down is document content and stays in the body. When there is
|
|
93
|
+
* no leading H1, `title` is `null` and `body` is the input unchanged.
|
|
94
|
+
*
|
|
95
|
+
* Render-time only, like {@link unwrapEnclosingMarkdownFence}: the stored
|
|
96
|
+
* message/artifact keeps its heading; only the presentation moves it.
|
|
97
|
+
*/
|
|
98
|
+
export function extractLeadingH1(markdown) {
|
|
99
|
+
const trimmed = markdown.trim();
|
|
100
|
+
const match = LEADING_H1_RE.exec(trimmed);
|
|
101
|
+
if (!match)
|
|
102
|
+
return { title: null, body: markdown };
|
|
103
|
+
return { title: match[1], body: trimmed.slice(match[0].length) };
|
|
56
104
|
}
|
|
57
105
|
/**
|
|
58
106
|
* Styled react-markdown component overrides for SDK markdown surfaces.
|
|
@@ -65,22 +113,22 @@ export function unwrapEnclosingMarkdownFence(content) {
|
|
|
65
113
|
*/
|
|
66
114
|
export const MARKDOWN_COMPONENTS = {
|
|
67
115
|
p({ children, ...props }) {
|
|
68
|
-
return (_jsx("p", { className: "text-sm text-foreground mb-3 last:mb-0 leading-relaxed", ...props, children: children }));
|
|
116
|
+
return (_jsx("p", { className: "text-sm text-foreground mb-3 last:mb-0 leading-relaxed break-words", ...props, children: children }));
|
|
69
117
|
},
|
|
70
118
|
a({ children, href, ...props }) {
|
|
71
|
-
return (_jsx("a", { href: href, className: "text-primary underline underline-offset-2 hover:text-primary-muted", target: "_blank", rel: "noopener noreferrer", ...props, children: children }));
|
|
119
|
+
return (_jsx("a", { href: href, className: "text-primary underline underline-offset-2 hover:text-primary-muted break-words", target: "_blank", rel: "noopener noreferrer", ...props, children: children }));
|
|
72
120
|
},
|
|
73
121
|
h1({ children, ...props }) {
|
|
74
|
-
return (_jsx("h1", { className: "text-lg font-semibold text-foreground mt-5 mb-2 first:mt-0", ...props, children: children }));
|
|
122
|
+
return (_jsx("h1", { className: "text-lg font-semibold text-foreground mt-5 mb-2 first:mt-0 break-words", ...props, children: children }));
|
|
75
123
|
},
|
|
76
124
|
h2({ children, ...props }) {
|
|
77
|
-
return (_jsx("h2", { className: "text-base font-semibold text-foreground mt-5 mb-2 first:mt-0", ...props, children: children }));
|
|
125
|
+
return (_jsx("h2", { className: "text-base font-semibold text-foreground mt-5 mb-2 first:mt-0 break-words", ...props, children: children }));
|
|
78
126
|
},
|
|
79
127
|
h3({ children, ...props }) {
|
|
80
|
-
return (_jsx("h3", { className: "text-sm font-semibold text-foreground mt-4 mb-1.5 first:mt-0", ...props, children: children }));
|
|
128
|
+
return (_jsx("h3", { className: "text-sm font-semibold text-foreground mt-4 mb-1.5 first:mt-0 break-words", ...props, children: children }));
|
|
81
129
|
},
|
|
82
130
|
h4({ children, ...props }) {
|
|
83
|
-
return (_jsx("h4", { className: "text-sm font-medium text-foreground mt-3 mb-1 first:mt-0", ...props, children: children }));
|
|
131
|
+
return (_jsx("h4", { className: "text-sm font-medium text-foreground mt-3 mb-1 first:mt-0 break-words", ...props, children: children }));
|
|
84
132
|
},
|
|
85
133
|
ul({ children, ...props }) {
|
|
86
134
|
return (_jsx("ul", { className: "list-disc pl-5 mb-3 last:mb-0 space-y-1 text-sm text-foreground", ...props, children: children }));
|
|
@@ -89,7 +137,7 @@ export const MARKDOWN_COMPONENTS = {
|
|
|
89
137
|
return (_jsx("ol", { className: "list-decimal pl-5 mb-3 last:mb-0 space-y-1 text-sm text-foreground", ...props, children: children }));
|
|
90
138
|
},
|
|
91
139
|
li({ children, ...props }) {
|
|
92
|
-
return (_jsx("li", { className: "leading-relaxed", ...props, children: children }));
|
|
140
|
+
return (_jsx("li", { className: "leading-relaxed break-words", ...props, children: children }));
|
|
93
141
|
},
|
|
94
142
|
pre({ children, ...props }) {
|
|
95
143
|
return (_jsx("pre", { className: "mb-3 last:mb-0 overflow-x-auto rounded-md bg-muted p-3", ...props, children: children }));
|
|
@@ -108,7 +156,7 @@ export const MARKDOWN_COMPONENTS = {
|
|
|
108
156
|
: null;
|
|
109
157
|
return (_jsx("code", { className: cn("hljs font-mono text-xs text-foreground", codeClassName), ...props, children: highlighted ?? children }));
|
|
110
158
|
}
|
|
111
|
-
return (_jsx("code", { className: "font-mono text-xs bg-muted px-1 py-0.5 rounded text-foreground", ...props, children: children }));
|
|
159
|
+
return (_jsx("code", { className: "font-mono text-xs bg-muted px-1 py-0.5 rounded text-foreground break-words", ...props, children: children }));
|
|
112
160
|
},
|
|
113
161
|
blockquote({ children, ...props }) {
|
|
114
162
|
return (_jsx("blockquote", { className: "border-l-2 border-border pl-4 mb-3 last:mb-0 text-muted-foreground italic", ...props, children: children }));
|
|
@@ -132,4 +180,31 @@ export const MARKDOWN_COMPONENTS = {
|
|
|
132
180
|
return (_jsx("em", { className: "italic", ...props, children: children }));
|
|
133
181
|
},
|
|
134
182
|
};
|
|
183
|
+
/**
|
|
184
|
+
* Document-grade typography for a Plan-mode plan: one step up the heading
|
|
185
|
+
* scale from the chat-tuned {@link MARKDOWN_COMPONENTS}, wider section
|
|
186
|
+
* spacing, and a hairline under `##` section headings for scannability. The
|
|
187
|
+
* plan is a reviewable document, not a chat bubble — its headings must carry
|
|
188
|
+
* the structure at a glance.
|
|
189
|
+
*
|
|
190
|
+
* Everything except the headings is inherited from `MARKDOWN_COMPONENTS`, so
|
|
191
|
+
* body text, code, tables, and links render identically across chat and plan
|
|
192
|
+
* surfaces. Used by `PlanDocumentMessage` (thread) — the same treatment any
|
|
193
|
+
* plan-document surface should share.
|
|
194
|
+
*/
|
|
195
|
+
export const PLAN_DOCUMENT_MARKDOWN_COMPONENTS = {
|
|
196
|
+
...MARKDOWN_COMPONENTS,
|
|
197
|
+
h1({ children, ...props }) {
|
|
198
|
+
return (_jsx("h1", { className: "text-lg font-semibold text-foreground mt-6 mb-3 first:mt-0 break-words", ...props, children: children }));
|
|
199
|
+
},
|
|
200
|
+
h2({ children, ...props }) {
|
|
201
|
+
return (_jsx("h2", { className: "text-base font-semibold text-foreground mt-6 mb-2.5 pb-1 border-b border-border-muted first:mt-0 break-words", ...props, children: children }));
|
|
202
|
+
},
|
|
203
|
+
h3({ children, ...props }) {
|
|
204
|
+
return (_jsx("h3", { className: "text-sm font-semibold text-foreground mt-5 mb-2 first:mt-0 break-words", ...props, children: children }));
|
|
205
|
+
},
|
|
206
|
+
h4({ children, ...props }) {
|
|
207
|
+
return (_jsx("h4", { className: "text-sm font-medium text-foreground mt-4 mb-1.5 first:mt-0 break-words", ...props, children: children }));
|
|
208
|
+
},
|
|
209
|
+
};
|
|
135
210
|
//# sourceMappingURL=markdown-components.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdown-components.js","sourceRoot":"","sources":["../../src/internal/markdown-components.tsx"],"names":[],"mappings":";AAEA,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,MAAM,qBAAqB,GAAG,WAAW,CAAC;AAI1C;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,SAAS,CAAC,CAAC;AAE1C,MAAM,cAAc,GAAG,iCAAiC,CAAC;AAEzD;;;;;;;;GAQG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC9C,OAAO,OAAO,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;AAC7C,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,2BAA2B,GAC/B,mEAAmE,CAAC;AAEtE
|
|
1
|
+
{"version":3,"file":"markdown-components.js","sourceRoot":"","sources":["../../src/internal/markdown-components.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Utility for respecting the user's motion preference (prefers-reduced-motion)
|
|
3
|
-
* in programmatic viewport animations (fitView, setCenter, etc.)
|
|
4
|
-
* covered by the CSS-level reduced-motion rule in styles.css.
|
|
3
|
+
* in programmatic viewport animations (fitView, setCenter, scrollIntoView, etc.)
|
|
4
|
+
* that are NOT covered by the CSS-level reduced-motion rule in styles.css.
|
|
5
5
|
*
|
|
6
|
-
*
|
|
7
|
-
* bypass CSS media queries — they must be explicitly
|
|
6
|
+
* JS-driven animations (React Flow's duration parameter on fitView/setCenter,
|
|
7
|
+
* smooth `scrollIntoView`) bypass CSS media queries — they must be explicitly
|
|
8
|
+
* checked. Lives in `internal/` because it is cross-cutting: the workflow graph
|
|
9
|
+
* and the workspace file viewer both depend on it, and `internal/` may not
|
|
10
|
+
* depend on a feature domain.
|
|
8
11
|
*/
|
|
9
12
|
/**
|
|
10
13
|
* Returns true if the user prefers reduced motion.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"motion-preference.d.ts","sourceRoot":"","sources":["../../src/internal/motion-preference.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAaH;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CAY9C;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE9D"}
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Utility for respecting the user's motion preference (prefers-reduced-motion)
|
|
3
|
-
* in programmatic viewport animations (fitView, setCenter, etc.)
|
|
4
|
-
* covered by the CSS-level reduced-motion rule in styles.css.
|
|
3
|
+
* in programmatic viewport animations (fitView, setCenter, scrollIntoView, etc.)
|
|
4
|
+
* that are NOT covered by the CSS-level reduced-motion rule in styles.css.
|
|
5
5
|
*
|
|
6
|
-
*
|
|
7
|
-
* bypass CSS media queries — they must be explicitly
|
|
6
|
+
* JS-driven animations (React Flow's duration parameter on fitView/setCenter,
|
|
7
|
+
* smooth `scrollIntoView`) bypass CSS media queries — they must be explicitly
|
|
8
|
+
* checked. Lives in `internal/` because it is cross-cutting: the workflow graph
|
|
9
|
+
* and the workspace file viewer both depend on it, and `internal/` may not
|
|
10
|
+
* depend on a feature domain.
|
|
8
11
|
*/
|
|
9
12
|
let cachedPreference = null;
|
|
10
13
|
let mediaQuery = null;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"motion-preference.js","sourceRoot":"","sources":["../../src/internal/motion-preference.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,IAAI,gBAAgB,GAAmB,IAAI,CAAC;AAC5C,IAAI,UAAU,GAA0B,IAAI,CAAC;AAE7C,SAAS,aAAa;IACpB,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAO,IAAI,CAAC;IAC/C,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,kCAAkC,CAAC,CAAC;IACrE,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB;IAClC,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAO,KAAK,CAAC;IAChD,MAAM,EAAE,GAAG,aAAa,EAAE,CAAC;IAC3B,IAAI,CAAC,EAAE;QAAE,OAAO,KAAK,CAAC;IAEtB,IAAI,gBAAgB,KAAK,IAAI,EAAE,CAAC;QAC9B,gBAAgB,GAAG,EAAE,CAAC,OAAO,CAAC;QAC9B,EAAE,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;YAClC,gBAAgB,GAAG,CAAC,CAAC,OAAO,CAAC;QAC/B,CAAC,CAAC,CAAC;IACL,CAAC;IACD,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,oBAAoB,CAAC,SAAiB;IACpD,OAAO,oBAAoB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAChD,CAAC"}
|
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
import type { AgentExecution } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/api_pb";
|
|
2
2
|
import { ConversationStore, type StreamState } from "./conversation-store.js";
|
|
3
|
+
import { WorkspaceFileSelectionStore, type SelectedWorkspaceFile } from "./workspace-file-selection-store.js";
|
|
4
|
+
import { WorkspaceEditorsStore, type WorkspaceEditorsSnapshot } from "./workspace-editors-store.js";
|
|
3
5
|
export { ConversationStore, type StreamState } from "./conversation-store.js";
|
|
4
6
|
export { structuralShare } from "./structural-share.js";
|
|
5
7
|
export { WorkflowExecutionEventStore, type WorkflowEventStreamState, type DerivedTaskState, type DerivedCostSummary, } from "./workflow-execution-event-store.js";
|
|
6
8
|
export { SelectionStore } from "./selection-store.js";
|
|
7
9
|
export type { SelectedThreadItem } from "./selection-store.js";
|
|
10
|
+
export { WorkspaceFileSelectionStore } from "./workspace-file-selection-store.js";
|
|
11
|
+
export type { SelectedWorkspaceFile } from "./workspace-file-selection-store.js";
|
|
12
|
+
export { WorkspaceEditorsStore, editorKey, virtualEntryId, isVirtualEntryId, } from "./workspace-editors-store.js";
|
|
13
|
+
export type { OpenEditor, OpenFileOptions, EditorReveal, WorkspaceEditorsSnapshot, } from "./workspace-editors-store.js";
|
|
8
14
|
/**
|
|
9
15
|
* Internal context for the conversation store. Not exported from the
|
|
10
16
|
* public SDK barrel — used only within SDK hooks and components.
|
|
@@ -31,4 +37,31 @@ export declare function useStoreExecution(store: ConversationStore): AgentExecut
|
|
|
31
37
|
* Returns a stable reference when the state is unchanged.
|
|
32
38
|
*/
|
|
33
39
|
export declare function useStoreStreamState(store: ConversationStore): StreamState;
|
|
40
|
+
/**
|
|
41
|
+
* Internal context carrying the {@link WorkspaceFileSelectionStore} instance
|
|
42
|
+
* (stable ref) to both columns of the session viewer. Not exported from the
|
|
43
|
+
* public SDK barrel — consumed only within SDK components and `SessionViewer`.
|
|
44
|
+
*/
|
|
45
|
+
export declare const WorkspaceFileSelectionContext: import("react").Context<WorkspaceFileSelectionStore | null>;
|
|
46
|
+
/**
|
|
47
|
+
* Access the workspace-file selection store from context.
|
|
48
|
+
* Throws if called outside a `WorkspaceFileSelectionContext.Provider`.
|
|
49
|
+
*/
|
|
50
|
+
export declare function useWorkspaceFileSelectionStore(): WorkspaceFileSelectionStore;
|
|
51
|
+
/**
|
|
52
|
+
* Create or reuse a `WorkspaceFileSelectionStore` instance, preserved across
|
|
53
|
+
* re-renders via ref. `SessionViewer` calls this and provides the result
|
|
54
|
+
* through {@link WorkspaceFileSelectionContext} (DD-07).
|
|
55
|
+
*/
|
|
56
|
+
export declare function useWorkspaceFileSelectionStoreRef(): WorkspaceFileSelectionStore;
|
|
57
|
+
/** Subscribe to the currently-selected workspace file. */
|
|
58
|
+
export declare function useWorkspaceFileSelection(store: WorkspaceFileSelectionStore): SelectedWorkspaceFile | null;
|
|
59
|
+
/**
|
|
60
|
+
* Create or reuse a `WorkspaceEditorsStore` instance, preserved across
|
|
61
|
+
* re-renders via ref. Owned by `SessionViewer` alongside the selection store;
|
|
62
|
+
* the surface subscribes to it for its tab group.
|
|
63
|
+
*/
|
|
64
|
+
export declare function useWorkspaceEditorsStoreRef(): WorkspaceEditorsStore;
|
|
65
|
+
/** Subscribe to the open-editor group snapshot. */
|
|
66
|
+
export declare function useWorkspaceEditors(store: WorkspaceEditorsStore): WorkspaceEditorsSnapshot;
|
|
34
67
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/internal/store/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6DAA6D,CAAC;AAClG,OAAO,EAAE,iBAAiB,EAAE,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/internal/store/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6DAA6D,CAAC;AAClG,OAAO,EAAE,iBAAiB,EAAE,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC9E,OAAO,EACL,2BAA2B,EAC3B,KAAK,qBAAqB,EAC3B,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACL,qBAAqB,EACrB,KAAK,wBAAwB,EAC9B,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EAAE,iBAAiB,EAAE,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC9E,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EACL,2BAA2B,EAC3B,KAAK,wBAAwB,EAC7B,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,GACxB,MAAM,qCAAqC,CAAC;AAE7C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,YAAY,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE/D,OAAO,EAAE,2BAA2B,EAAE,MAAM,qCAAqC,CAAC;AAClF,YAAY,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAEjF,OAAO,EACL,qBAAqB,EACrB,SAAS,EACT,cAAc,EACd,gBAAgB,GACjB,MAAM,8BAA8B,CAAC;AACtC,YAAY,EACV,UAAU,EACV,eAAe,EACf,YAAY,EACZ,wBAAwB,GACzB,MAAM,8BAA8B,CAAC;AAMtC;;;GAGG;AACH,eAAO,MAAM,wBAAwB,mDACU,CAAC;AAMhD;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,iBAAiB,CAQxD;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,IAAI,iBAAiB,CAM3D;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,iBAAiB,GACvB,cAAc,GAAG,IAAI,CAEvB;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,iBAAiB,GAAG,WAAW,CAEzE;AAMD;;;;GAIG;AACH,eAAO,MAAM,6BAA6B,6DACe,CAAC;AAE1D;;;GAGG;AACH,wBAAgB,8BAA8B,IAAI,2BAA2B,CAQ5E;AAED;;;;GAIG;AACH,wBAAgB,iCAAiC,IAAI,2BAA2B,CAM/E;AAED,0DAA0D;AAC1D,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,2BAA2B,GACjC,qBAAqB,GAAG,IAAI,CAE9B;AAMD;;;;GAIG;AACH,wBAAgB,2BAA2B,IAAI,qBAAqB,CAMnE;AAED,mDAAmD;AACnD,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,qBAAqB,GAC3B,wBAAwB,CAE1B"}
|