@stigmer/react 3.0.9-dev.20260615153829 → 3.1.0
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/execution/ApprovalCard.d.ts +47 -3
- package/execution/ApprovalCard.d.ts.map +1 -1
- package/execution/ApprovalCard.js +138 -70
- package/execution/ApprovalCard.js.map +1 -1
- package/execution/ApprovalContext.d.ts +72 -0
- package/execution/ApprovalContext.d.ts.map +1 -0
- package/execution/ApprovalContext.js +41 -0
- package/execution/ApprovalContext.js.map +1 -0
- package/execution/ArtifactCard.d.ts.map +1 -1
- package/execution/ArtifactCard.js +3 -1
- package/execution/ArtifactCard.js.map +1 -1
- package/execution/ArtifactPreviewModal.d.ts.map +1 -1
- package/execution/ArtifactPreviewModal.js +5 -3
- package/execution/ArtifactPreviewModal.js.map +1 -1
- package/execution/EmptyChangeNotice.d.ts +38 -0
- package/execution/EmptyChangeNotice.d.ts.map +1 -0
- package/execution/EmptyChangeNotice.js +27 -0
- package/execution/EmptyChangeNotice.js.map +1 -0
- package/execution/FileChangesView.d.ts +81 -0
- package/execution/FileChangesView.d.ts.map +1 -0
- package/execution/FileChangesView.js +164 -0
- package/execution/FileChangesView.js.map +1 -0
- package/execution/FilePathLink.d.ts +24 -4
- package/execution/FilePathLink.d.ts.map +1 -1
- package/execution/FilePathLink.js +31 -9
- package/execution/FilePathLink.js.map +1 -1
- package/execution/FileReviewCard.d.ts +111 -0
- package/execution/FileReviewCard.d.ts.map +1 -0
- package/execution/FileReviewCard.js +558 -0
- package/execution/FileReviewCard.js.map +1 -0
- package/execution/FileReviewContext.d.ts +35 -0
- package/execution/FileReviewContext.d.ts.map +1 -0
- package/execution/FileReviewContext.js +23 -0
- package/execution/FileReviewContext.js.map +1 -0
- package/execution/FileReviewDock.d.ts +73 -0
- package/execution/FileReviewDock.d.ts.map +1 -0
- package/execution/FileReviewDock.js +65 -0
- package/execution/FileReviewDock.js.map +1 -0
- package/execution/McpToolDetail.d.ts.map +1 -1
- package/execution/McpToolDetail.js +38 -5
- package/execution/McpToolDetail.js.map +1 -1
- package/execution/MessageThread.d.ts +42 -3
- package/execution/MessageThread.d.ts.map +1 -1
- package/execution/MessageThread.js +263 -18
- package/execution/MessageThread.js.map +1 -1
- package/execution/PlanArtifactCard.d.ts.map +1 -1
- package/execution/PlanArtifactCard.js +3 -1
- package/execution/PlanArtifactCard.js.map +1 -1
- package/execution/PlanCompletionCard.d.ts +1 -1
- package/execution/PlanCompletionCard.js +1 -1
- package/execution/ResultView.d.ts +19 -1
- package/execution/ResultView.d.ts.map +1 -1
- package/execution/ResultView.js +141 -40
- package/execution/ResultView.js.map +1 -1
- package/execution/SubAgentSection.d.ts.map +1 -1
- package/execution/SubAgentSection.js +45 -6
- package/execution/SubAgentSection.js.map +1 -1
- package/execution/TerminalSession.d.ts +34 -0
- package/execution/TerminalSession.d.ts.map +1 -0
- package/execution/TerminalSession.js +34 -0
- package/execution/TerminalSession.js.map +1 -0
- package/execution/TodoCard.d.ts +53 -0
- package/execution/TodoCard.d.ts.map +1 -0
- package/execution/TodoCard.js +77 -0
- package/execution/TodoCard.js.map +1 -0
- package/execution/ToolArgsView.d.ts +7 -1
- package/execution/ToolArgsView.d.ts.map +1 -1
- package/execution/ToolArgsView.js +10 -9
- package/execution/ToolArgsView.js.map +1 -1
- package/execution/ToolCallDetail.d.ts +10 -1
- package/execution/ToolCallDetail.d.ts.map +1 -1
- package/execution/ToolCallDetail.js +66 -19
- package/execution/ToolCallDetail.js.map +1 -1
- package/execution/ToolCallGroup.d.ts +28 -18
- package/execution/ToolCallGroup.d.ts.map +1 -1
- package/execution/ToolCallGroup.js +39 -148
- package/execution/ToolCallGroup.js.map +1 -1
- package/execution/ToolCallItem.d.ts +36 -8
- package/execution/ToolCallItem.d.ts.map +1 -1
- package/execution/ToolCallItem.js +140 -21
- package/execution/ToolCallItem.js.map +1 -1
- package/execution/ToolRunGroup.d.ts +48 -0
- package/execution/ToolRunGroup.d.ts.map +1 -0
- package/execution/ToolRunGroup.js +168 -0
- package/execution/ToolRunGroup.js.map +1 -0
- package/execution/approval-provenance.d.ts +2 -0
- package/execution/approval-provenance.d.ts.map +1 -0
- package/execution/approval-provenance.js +6 -0
- package/execution/approval-provenance.js.map +1 -0
- package/execution/artifact-utils.d.ts +0 -10
- package/execution/artifact-utils.d.ts.map +1 -1
- package/execution/artifact-utils.js +0 -17
- package/execution/artifact-utils.js.map +1 -1
- package/execution/execution-phases.d.ts +1 -6
- package/execution/execution-phases.d.ts.map +1 -1
- package/execution/execution-phases.js +4 -14
- package/execution/execution-phases.js.map +1 -1
- package/execution/file-path-resolver.d.ts +28 -0
- package/execution/file-path-resolver.d.ts.map +1 -1
- package/execution/file-path-resolver.js +24 -0
- package/execution/file-path-resolver.js.map +1 -1
- package/execution/file-review-status.d.ts +127 -0
- package/execution/file-review-status.d.ts.map +1 -0
- package/execution/file-review-status.js +135 -0
- package/execution/file-review-status.js.map +1 -0
- package/execution/index.d.ts +39 -5
- package/execution/index.d.ts.map +1 -1
- package/execution/index.js +23 -3
- package/execution/index.js.map +1 -1
- package/execution/segment-tool-calls.d.ts +46 -0
- package/execution/segment-tool-calls.d.ts.map +1 -0
- package/execution/segment-tool-calls.js +71 -0
- package/execution/segment-tool-calls.js.map +1 -0
- package/execution/tool-categories.d.ts +62 -1
- package/execution/tool-categories.d.ts.map +1 -1
- package/execution/tool-categories.js +96 -2
- package/execution/tool-categories.js.map +1 -1
- package/execution/tool-presenter.d.ts +38 -2
- package/execution/tool-presenter.d.ts.map +1 -1
- package/execution/tool-presenter.js +23 -1
- package/execution/tool-presenter.js.map +1 -1
- package/execution/tool-rendering-primitives.d.ts.map +1 -1
- package/execution/tool-rendering-primitives.js +3 -2
- package/execution/tool-rendering-primitives.js.map +1 -1
- package/execution/useArtifactDownload.d.ts +44 -0
- package/execution/useArtifactDownload.d.ts.map +1 -0
- package/execution/useArtifactDownload.js +80 -0
- package/execution/useArtifactDownload.js.map +1 -0
- package/execution/useArtifactDownloadUrl.d.ts +67 -0
- package/execution/useArtifactDownloadUrl.d.ts.map +1 -0
- package/execution/useArtifactDownloadUrl.js +59 -0
- package/execution/useArtifactDownloadUrl.js.map +1 -0
- package/execution/useFileChangeContent.d.ts +61 -0
- package/execution/useFileChangeContent.d.ts.map +1 -0
- package/execution/useFileChangeContent.js +89 -0
- package/execution/useFileChangeContent.js.map +1 -0
- package/execution/useFileReview.d.ts +89 -0
- package/execution/useFileReview.d.ts.map +1 -0
- package/execution/useFileReview.js +106 -0
- package/execution/useFileReview.js.map +1 -0
- package/execution/useSubmitApproval.d.ts +17 -2
- package/execution/useSubmitApproval.d.ts.map +1 -1
- package/execution/useSubmitApproval.js +27 -23
- package/execution/useSubmitApproval.js.map +1 -1
- package/execution/useToolOutputContent.d.ts +44 -0
- package/execution/useToolOutputContent.d.ts.map +1 -0
- package/execution/useToolOutputContent.js +31 -0
- package/execution/useToolOutputContent.js.map +1 -0
- package/index.d.ts +6 -6
- package/index.d.ts.map +1 -1
- package/index.js +3 -3
- package/index.js.map +1 -1
- package/internal/ApprovalPeekBar.d.ts +23 -0
- package/internal/ApprovalPeekBar.d.ts.map +1 -0
- package/internal/ApprovalPeekBar.js +25 -0
- package/internal/ApprovalPeekBar.js.map +1 -0
- package/internal/BoundedContent.d.ts +49 -0
- package/internal/BoundedContent.d.ts.map +1 -0
- package/internal/BoundedContent.js +50 -0
- package/internal/BoundedContent.js.map +1 -0
- package/internal/DecisionButton.d.ts +47 -0
- package/internal/DecisionButton.d.ts.map +1 -0
- package/internal/DecisionButton.js +42 -0
- package/internal/DecisionButton.js.map +1 -0
- package/internal/InCardDecisionError.d.ts +31 -0
- package/internal/InCardDecisionError.d.ts.map +1 -0
- package/internal/InCardDecisionError.js +23 -0
- package/internal/InCardDecisionError.js.map +1 -0
- package/internal/RevealToggle.d.ts +36 -0
- package/internal/RevealToggle.d.ts.map +1 -0
- package/internal/RevealToggle.js +32 -0
- package/internal/RevealToggle.js.map +1 -0
- package/internal/VirtualizedThread.d.ts +7 -1
- package/internal/VirtualizedThread.d.ts.map +1 -1
- package/internal/VirtualizedThread.js +7 -3
- package/internal/VirtualizedThread.js.map +1 -1
- package/internal/code-highlight.d.ts +24 -0
- package/internal/code-highlight.d.ts.map +1 -0
- package/internal/code-highlight.js +115 -0
- package/internal/code-highlight.js.map +1 -0
- package/internal/markdown-components.d.ts.map +1 -1
- package/internal/markdown-components.js +13 -2
- package/internal/markdown-components.js.map +1 -1
- package/internal/useAutoDisclosure.d.ts +34 -0
- package/internal/useAutoDisclosure.d.ts.map +1 -0
- package/internal/useAutoDisclosure.js +53 -0
- package/internal/useAutoDisclosure.js.map +1 -0
- package/internal/useElapsedSince.d.ts +30 -0
- package/internal/useElapsedSince.d.ts.map +1 -0
- package/internal/useElapsedSince.js +70 -0
- package/internal/useElapsedSince.js.map +1 -0
- package/internal/useIsOverflowing.d.ts +30 -0
- package/internal/useIsOverflowing.d.ts.map +1 -0
- package/internal/useIsOverflowing.js +47 -0
- package/internal/useIsOverflowing.js.map +1 -0
- package/internal/useIsTextTruncated.d.ts +24 -0
- package/internal/useIsTextTruncated.d.ts.map +1 -0
- package/internal/useIsTextTruncated.js +41 -0
- package/internal/useIsTextTruncated.js.map +1 -0
- package/internal/useKeyedSubmission.d.ts +49 -0
- package/internal/useKeyedSubmission.d.ts.map +1 -0
- package/internal/useKeyedSubmission.js +67 -0
- package/internal/useKeyedSubmission.js.map +1 -0
- package/package.json +7 -4
- package/session/SessionViewer.d.ts +2 -2
- package/session/SessionViewer.d.ts.map +1 -1
- package/session/SessionViewer.js +10 -4
- package/session/SessionViewer.js.map +1 -1
- package/session/index.d.ts +2 -0
- package/session/index.d.ts.map +1 -1
- package/session/index.js +1 -0
- package/session/index.js.map +1 -1
- package/session/inspector/ChangesTab.d.ts +8 -5
- package/session/inspector/ChangesTab.d.ts.map +1 -1
- package/session/inspector/ChangesTab.js +11 -8
- package/session/inspector/ChangesTab.js.map +1 -1
- package/session/inspector/SessionInspector.d.ts +4 -4
- package/session/inspector/SessionInspector.d.ts.map +1 -1
- package/session/inspector/SessionInspector.js +4 -4
- package/session/inspector/SessionInspector.js.map +1 -1
- package/session/inspector/index.d.ts +0 -2
- package/session/inspector/index.d.ts.map +1 -1
- package/session/inspector/index.js +0 -1
- package/session/inspector/index.js.map +1 -1
- package/session/inspector/useSessionInspector.d.ts +8 -4
- package/session/inspector/useSessionInspector.d.ts.map +1 -1
- package/session/inspector/useSessionInspector.js +27 -20
- package/session/inspector/useSessionInspector.js.map +1 -1
- package/session/useSessionConversation.d.ts +37 -3
- package/session/useSessionConversation.d.ts.map +1 -1
- package/session/useSessionConversation.js +18 -2
- package/session/useSessionConversation.js.map +1 -1
- package/session/useSessionFileChanges.d.ts +74 -0
- package/session/useSessionFileChanges.d.ts.map +1 -0
- package/session/useSessionFileChanges.js +178 -0
- package/session/useSessionFileChanges.js.map +1 -0
- package/src/__tests__/styles-border-layer-invariant.test.ts +105 -0
- package/src/execution/ApprovalCard.tsx +368 -230
- package/src/execution/ApprovalContext.ts +109 -0
- package/src/execution/ArtifactCard.tsx +10 -6
- package/src/execution/ArtifactPreviewModal.tsx +12 -6
- package/src/execution/EmptyChangeNotice.tsx +62 -0
- package/src/execution/FileChangesView.tsx +383 -0
- package/src/execution/FilePathLink.tsx +65 -12
- package/src/execution/FileReviewCard.tsx +1118 -0
- package/src/execution/FileReviewContext.ts +53 -0
- package/src/execution/FileReviewDock.tsx +157 -0
- package/src/execution/McpToolDetail.tsx +98 -32
- package/src/execution/MessageThread.tsx +374 -9
- package/src/execution/PlanArtifactCard.tsx +9 -6
- package/src/execution/PlanCompletionCard.tsx +1 -1
- package/src/execution/ResultView.tsx +333 -162
- package/src/execution/SubAgentSection.tsx +58 -11
- package/src/execution/TerminalSession.tsx +91 -0
- package/src/execution/TodoCard.tsx +186 -0
- package/src/execution/ToolArgsView.tsx +28 -17
- package/src/execution/ToolCallDetail.tsx +137 -26
- package/src/execution/ToolCallGroup.tsx +68 -296
- package/src/execution/ToolCallItem.tsx +265 -67
- package/src/execution/ToolRunGroup.tsx +302 -0
- package/src/execution/__tests__/ApprovalCard.test.tsx +395 -5
- package/src/execution/__tests__/ArtifactContentRenderer.test.tsx +15 -0
- package/src/execution/__tests__/ArtifactPreviewModal.test.tsx +0 -1
- package/src/execution/__tests__/EmptyChangeNotice.test.tsx +24 -0
- package/src/execution/__tests__/FileChangesView.test.tsx +296 -0
- package/src/execution/__tests__/FilePathLink.test.tsx +92 -0
- package/src/execution/__tests__/FileReviewCard.test.tsx +1044 -0
- package/src/execution/__tests__/FileReviewDock.test.tsx +134 -0
- package/src/execution/__tests__/McpToolDetail.test.tsx +79 -0
- package/src/execution/__tests__/MessageThread.test.tsx +324 -0
- package/src/execution/__tests__/PlanArtifactCard.test.tsx +37 -16
- package/src/execution/__tests__/ResultView.test.tsx +280 -2
- package/src/execution/__tests__/SubAgentSection.test.tsx +180 -0
- package/src/execution/__tests__/TerminalSession.test.tsx +72 -0
- package/src/execution/__tests__/TodoCard.test.tsx +102 -0
- package/src/execution/__tests__/ToolArgsView.test.tsx +48 -0
- package/src/execution/__tests__/ToolCallDetail.test.tsx +195 -0
- package/src/execution/__tests__/ToolCallGroup.test.tsx +132 -0
- package/src/execution/__tests__/ToolCallItem.test.tsx +521 -0
- package/src/execution/__tests__/ToolRunGroup.test.tsx +137 -0
- package/src/execution/__tests__/blanked-narration.test.tsx +149 -0
- package/src/execution/__tests__/buildThreadItems-approvals.test.ts +304 -0
- package/src/execution/__tests__/buildThreadItems-file-review.test.ts +331 -0
- package/src/execution/__tests__/file-path-resolver.test.ts +44 -0
- package/src/execution/__tests__/file-review-status.test.ts +343 -0
- package/src/execution/__tests__/message-entry.test.tsx +16 -0
- package/src/execution/__tests__/segment-tool-calls.test.ts +124 -0
- package/src/execution/__tests__/subagent-file-review-badge.test.tsx +273 -0
- package/src/execution/__tests__/thread-keys.test.ts +195 -0
- package/src/execution/__tests__/tool-presenter.test.tsx +95 -0
- package/src/execution/__tests__/useArtifactDownload.test.tsx +67 -0
- package/src/execution/__tests__/useArtifactDownloadUrl.test.tsx +51 -0
- package/src/execution/__tests__/useFileChangeContent.test.tsx +240 -0
- package/src/execution/__tests__/useFileReview.test.tsx +236 -0
- package/src/execution/__tests__/useSubmitApproval.test.tsx +165 -0
- package/src/execution/__tests__/useToolOutputContent.test.tsx +82 -0
- package/src/execution/approval-provenance.ts +8 -0
- package/src/execution/artifact-utils.ts +0 -18
- package/src/execution/execution-phases.ts +4 -16
- package/src/execution/file-path-resolver.ts +38 -0
- package/src/execution/file-review-status.ts +219 -0
- package/src/execution/index.ts +84 -4
- package/src/execution/segment-tool-calls.ts +101 -0
- package/src/execution/tool-categories.ts +128 -1
- package/src/execution/tool-presenter.ts +58 -3
- package/src/execution/tool-rendering-primitives.tsx +11 -14
- package/src/execution/useArtifactDownload.ts +109 -0
- package/src/execution/useArtifactDownloadUrl.ts +116 -0
- package/src/execution/useFileChangeContent.ts +149 -0
- package/src/execution/useFileReview.ts +197 -0
- package/src/execution/useSubmitApproval.ts +49 -27
- package/src/execution/useToolOutputContent.ts +70 -0
- package/src/index.ts +60 -1
- package/src/internal/ApprovalPeekBar.tsx +73 -0
- package/src/internal/BoundedContent.tsx +97 -0
- package/src/internal/DecisionButton.tsx +127 -0
- package/src/internal/InCardDecisionError.tsx +47 -0
- package/src/internal/RevealToggle.tsx +91 -0
- package/src/internal/VirtualizedThread.tsx +28 -2
- package/src/internal/__tests__/ApprovalPeekBar.test.tsx +34 -0
- package/src/internal/__tests__/BoundedContent.test.tsx +92 -0
- package/src/internal/__tests__/DecisionButton.test.tsx +107 -0
- package/src/internal/__tests__/RevealToggle.test.tsx +61 -0
- package/src/internal/__tests__/code-highlight.test.tsx +59 -0
- package/src/internal/__tests__/markdown-components.test.tsx +68 -2
- package/src/internal/__tests__/useAutoDisclosure.test.ts +74 -0
- package/src/internal/__tests__/useElapsedSince.test.tsx +68 -0
- package/src/internal/__tests__/useIsOverflowing.test.ts +36 -0
- package/src/internal/__tests__/useKeyedSubmission.test.tsx +126 -0
- package/src/internal/code-highlight.tsx +120 -0
- package/src/internal/markdown-components.tsx +20 -3
- package/src/internal/useAutoDisclosure.ts +58 -0
- package/src/internal/useElapsedSince.ts +72 -0
- package/src/internal/useIsOverflowing.ts +61 -0
- package/src/internal/useIsTextTruncated.ts +55 -0
- package/src/internal/useKeyedSubmission.ts +101 -0
- package/src/session/SessionViewer.tsx +21 -4
- package/src/session/__tests__/SessionViewer-fileReviewDock.test.tsx +198 -0
- package/src/session/__tests__/audienceWiring.test.tsx +4 -0
- package/src/session/__tests__/useSessionFileChanges.test.ts +303 -0
- package/src/session/index.ts +3 -0
- package/src/session/inspector/ChangesTab.tsx +20 -17
- package/src/session/inspector/SessionInspector.tsx +12 -10
- package/src/session/inspector/__tests__/ArtifactsTab.test.tsx +0 -1
- package/src/session/inspector/__tests__/ChangesTab.test.tsx +38 -0
- package/src/session/inspector/__tests__/useSessionInspector.test.ts +46 -61
- package/src/session/inspector/index.ts +0 -3
- package/src/session/inspector/useSessionInspector.ts +27 -20
- package/src/session/useSessionConversation.ts +80 -3
- package/src/session/useSessionFileChanges.ts +207 -0
- package/src/styles.css +123 -10
- package/src/version-history/DiffViewer.tsx +10 -7
- package/src/version-history/UnifiedDiffView.tsx +66 -0
- package/src/version-history/__tests__/DiffViewer.test.tsx +57 -0
- package/src/version-history/__tests__/UnifiedDiffView.test.tsx +50 -0
- package/src/version-history/__tests__/computeDiff.test.ts +35 -0
- package/src/version-history/__tests__/parseUnifiedDiff.test.ts +82 -0
- package/src/version-history/computeDiff.ts +6 -37
- package/src/version-history/diff-hunks.ts +63 -0
- package/src/version-history/index.ts +1 -0
- package/src/version-history/parseUnifiedDiff.ts +34 -0
- package/src/workflow/WorkflowExecutionApprovalCard.tsx +49 -24
- package/src/workflow/WorkflowExecutionTimeline.tsx +15 -4
- package/src/workflow/WorkflowExecutionTimelineEvent.tsx +8 -3
- package/src/workflow/WorkflowExecutionViewer.tsx +72 -28
- package/src/workflow/WorkflowFileReviewList.tsx +152 -0
- package/src/workflow/WorkflowTaskApprovalCard.tsx +37 -85
- package/src/workflow/__tests__/ExecutionInspector.test.tsx +30 -2
- package/src/workflow/__tests__/WorkflowExecutionApprovalCard.test.tsx +129 -0
- package/src/workflow/__tests__/WorkflowFileReviewList.test.tsx +129 -0
- package/src/workflow/__tests__/WorkflowTaskApprovalCard.test.tsx +43 -11
- package/src/workflow/__tests__/useWorkflowExecutionActions.test.tsx +276 -0
- package/src/workflow/execution-inspector/ExecutionInspector.tsx +42 -18
- package/src/workflow/index.ts +5 -0
- package/src/workflow/useWorkflowExecutionActions.ts +177 -29
- package/styles.css +1 -1
- package/version-history/DiffViewer.d.ts.map +1 -1
- package/version-history/DiffViewer.js +9 -3
- package/version-history/DiffViewer.js.map +1 -1
- package/version-history/UnifiedDiffView.d.ts +29 -0
- package/version-history/UnifiedDiffView.d.ts.map +1 -0
- package/version-history/UnifiedDiffView.js +36 -0
- package/version-history/UnifiedDiffView.js.map +1 -0
- package/version-history/computeDiff.d.ts +3 -1
- package/version-history/computeDiff.d.ts.map +1 -1
- package/version-history/computeDiff.js +5 -35
- package/version-history/computeDiff.js.map +1 -1
- package/version-history/diff-hunks.d.ts +21 -0
- package/version-history/diff-hunks.d.ts.map +1 -0
- package/version-history/diff-hunks.js +58 -0
- package/version-history/diff-hunks.js.map +1 -0
- package/version-history/index.d.ts +1 -0
- package/version-history/index.d.ts.map +1 -1
- package/version-history/index.js +1 -0
- package/version-history/index.js.map +1 -1
- package/version-history/parseUnifiedDiff.d.ts +22 -0
- package/version-history/parseUnifiedDiff.d.ts.map +1 -0
- package/version-history/parseUnifiedDiff.js +34 -0
- package/version-history/parseUnifiedDiff.js.map +1 -0
- package/workflow/WorkflowExecutionApprovalCard.d.ts +8 -1
- package/workflow/WorkflowExecutionApprovalCard.d.ts.map +1 -1
- package/workflow/WorkflowExecutionApprovalCard.js +17 -3
- package/workflow/WorkflowExecutionApprovalCard.js.map +1 -1
- package/workflow/WorkflowExecutionTimeline.d.ts +11 -2
- package/workflow/WorkflowExecutionTimeline.d.ts.map +1 -1
- package/workflow/WorkflowExecutionTimeline.js +2 -2
- package/workflow/WorkflowExecutionTimeline.js.map +1 -1
- package/workflow/WorkflowExecutionTimelineEvent.d.ts +4 -1
- package/workflow/WorkflowExecutionTimelineEvent.d.ts.map +1 -1
- package/workflow/WorkflowExecutionTimelineEvent.js +2 -2
- package/workflow/WorkflowExecutionTimelineEvent.js.map +1 -1
- package/workflow/WorkflowExecutionViewer.d.ts.map +1 -1
- package/workflow/WorkflowExecutionViewer.js +18 -10
- package/workflow/WorkflowExecutionViewer.js.map +1 -1
- package/workflow/WorkflowFileReviewList.d.ts +46 -0
- package/workflow/WorkflowFileReviewList.d.ts.map +1 -0
- package/workflow/WorkflowFileReviewList.js +48 -0
- package/workflow/WorkflowFileReviewList.js.map +1 -0
- package/workflow/WorkflowTaskApprovalCard.d.ts +8 -1
- package/workflow/WorkflowTaskApprovalCard.d.ts.map +1 -1
- package/workflow/WorkflowTaskApprovalCard.js +12 -19
- package/workflow/WorkflowTaskApprovalCard.js.map +1 -1
- package/workflow/execution-inspector/ExecutionInspector.d.ts +21 -4
- package/workflow/execution-inspector/ExecutionInspector.d.ts.map +1 -1
- package/workflow/execution-inspector/ExecutionInspector.js +6 -3
- package/workflow/execution-inspector/ExecutionInspector.js.map +1 -1
- package/workflow/index.d.ts +1 -0
- package/workflow/index.d.ts.map +1 -1
- package/workflow/index.js +1 -0
- package/workflow/index.js.map +1 -1
- package/workflow/useWorkflowExecutionActions.d.ts +62 -4
- package/workflow/useWorkflowExecutionActions.d.ts.map +1 -1
- package/workflow/useWorkflowExecutionActions.js +94 -18
- package/workflow/useWorkflowExecutionActions.js.map +1 -1
- package/session/inspector/PlanTab.d.ts +0 -15
- package/session/inspector/PlanTab.d.ts.map +0 -1
- package/session/inspector/PlanTab.js +0 -19
- package/session/inspector/PlanTab.js.map +0 -1
- package/src/session/inspector/PlanTab.tsx +0 -31
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { createContext, useContext } from "react";
|
|
2
|
+
import { fileReviewRowState, } from "./file-review-status";
|
|
3
|
+
const DEFAULT_VALUE = {
|
|
4
|
+
changeSetsById: new Map(),
|
|
5
|
+
};
|
|
6
|
+
/** Context that supplies the session's change sets to stamped tool rows. */
|
|
7
|
+
export const FileReviewContext = createContext(DEFAULT_VALUE);
|
|
8
|
+
/**
|
|
9
|
+
* The review state a stamped tool row should badge, or `null` for no badge
|
|
10
|
+
* (unstamped row, unknown set, or a file absent from its set — see
|
|
11
|
+
* {@link fileReviewRowState} for the honest-degradation rules).
|
|
12
|
+
*
|
|
13
|
+
* @param fileChangeSetId The row's `ToolCall.file_change_set_id` (may be "").
|
|
14
|
+
* @param rowPath The row's file path (the presenter's primary arg), used to
|
|
15
|
+
* resolve this file's verdict once the set is decided.
|
|
16
|
+
*/
|
|
17
|
+
export function useFileReviewRowState(fileChangeSetId, rowPath) {
|
|
18
|
+
const { changeSetsById } = useContext(FileReviewContext);
|
|
19
|
+
if (!fileChangeSetId)
|
|
20
|
+
return null;
|
|
21
|
+
return fileReviewRowState(changeSetsById.get(fileChangeSetId), rowPath);
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=FileReviewContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FileReviewContext.js","sourceRoot":"","sources":["../../src/execution/FileReviewContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAElD,OAAO,EACL,kBAAkB,GAEnB,MAAM,sBAAsB,CAAC;AAuB9B,MAAM,aAAa,GAA2B;IAC5C,cAAc,EAAE,IAAI,GAAG,EAAE;CAC1B,CAAC;AAEF,4EAA4E;AAC5E,MAAM,CAAC,MAAM,iBAAiB,GAC5B,aAAa,CAAyB,aAAa,CAAC,CAAC;AAEvD;;;;;;;;GAQG;AACH,MAAM,UAAU,qBAAqB,CACnC,eAAuB,EACvB,OAAsB;IAEtB,MAAM,EAAE,cAAc,EAAE,GAAG,UAAU,CAAC,iBAAiB,CAAC,CAAC;IACzD,IAAI,CAAC,eAAe;QAAE,OAAO,IAAI,CAAC;IAClC,OAAO,kBAAkB,CAAC,cAAc,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC,CAAC;AAC1E,CAAC"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import type { FileChangeSet } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/filereview_pb";
|
|
2
|
+
import type { FileDecisionAction } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/enum_pb";
|
|
3
|
+
import type { FileDecisionOptions } from "./useFileReview";
|
|
4
|
+
/** Props for {@link FileReviewDock}. */
|
|
5
|
+
export interface FileReviewDockProps {
|
|
6
|
+
/**
|
|
7
|
+
* The change sets awaiting review. Renders nothing when empty. Feed this from
|
|
8
|
+
* `useSessionConversation().fileChangeSets` — the AWAITING_REVIEW sets of the
|
|
9
|
+
* active execution, the same seam whose `submitFileDecision` routes decisions
|
|
10
|
+
* to that execution, so what the dock shows and what it can decide are
|
|
11
|
+
* consistent by construction.
|
|
12
|
+
*/
|
|
13
|
+
readonly changeSets: readonly FileChangeSet[];
|
|
14
|
+
/**
|
|
15
|
+
* Called when the user makes a decision on one of the docked sets. Wire to
|
|
16
|
+
* `useSessionConversation().submitFileDecision` (or an equivalent
|
|
17
|
+
* {@link useFileReview}-backed handler bound to the owning execution).
|
|
18
|
+
*/
|
|
19
|
+
readonly onSubmit: (changeSetId: string, action: FileDecisionAction, options?: FileDecisionOptions) => void;
|
|
20
|
+
/**
|
|
21
|
+
* Decision keys ({@link fileDecisionKey}) currently being submitted. Drives
|
|
22
|
+
* per-control loading state — see {@link FileReviewCardProps.submittingDecisionKeys}.
|
|
23
|
+
*/
|
|
24
|
+
readonly submittingDecisionKeys?: ReadonlySet<string>;
|
|
25
|
+
/**
|
|
26
|
+
* Per-decision failures, keyed like {@link submittingDecisionKeys} — surfaced
|
|
27
|
+
* in-card beside the control that failed.
|
|
28
|
+
*/
|
|
29
|
+
readonly decisionErrors?: ReadonlyMap<string, Error>;
|
|
30
|
+
/** Additional CSS class names for the root container. */
|
|
31
|
+
readonly className?: string;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* The composer-docked decision surface for pending file reviews: renders each
|
|
35
|
+
* AWAITING_REVIEW {@link FileChangeSet} as an interactive {@link FileReviewCard}
|
|
36
|
+
* decision bar, pinned in the fixed strip above the composer.
|
|
37
|
+
*
|
|
38
|
+
* WHY DOCKED, NOT IN-THREAD. The transcript's stamped edit rows are
|
|
39
|
+
* observational — they show what changed, badged with the live review state —
|
|
40
|
+
* but a *decision* the agent is blocked on must never scroll out of view. An
|
|
41
|
+
* in-thread card does exactly that on a long conversation. Docking the bar to
|
|
42
|
+
* the composer keeps the pending decision visible regardless of scroll
|
|
43
|
+
* position, matching the shape of Cursor's own review bar. Once decided, the
|
|
44
|
+
* dock empties and the thread's read-only record (and the rows' Kept/Discarded
|
|
45
|
+
* badges) carry the history.
|
|
46
|
+
*
|
|
47
|
+
* This placement deliberately diverges from tool approvals, which stay inline
|
|
48
|
+
* on their rows (with `ApprovalPeekBar` as the scroll backstop): an approval is
|
|
49
|
+
* call-anchored — "run *this* command" — while a file review is a turn-scoped
|
|
50
|
+
* aggregate over many calls, with no single row that owns it.
|
|
51
|
+
*
|
|
52
|
+
* The expanded per-file body is height-capped with internal scroll: a set that
|
|
53
|
+
* needs per-file attention starts expanded (see {@link FileReviewCard}), and an
|
|
54
|
+
* unconstrained list in a fixed strip would swallow the viewport.
|
|
55
|
+
*
|
|
56
|
+
* Purely presentational — the data and decision routing live in
|
|
57
|
+
* `useSessionConversation` (headless-first, DD-003). `SessionViewer` wires it
|
|
58
|
+
* in by default; platform builders composing a custom layout mount it over the
|
|
59
|
+
* same seam.
|
|
60
|
+
*
|
|
61
|
+
* @example
|
|
62
|
+
* ```tsx
|
|
63
|
+
* const conv = useSessionConversation(sessionId);
|
|
64
|
+
* <FileReviewDock
|
|
65
|
+
* changeSets={conv.fileChangeSets}
|
|
66
|
+
* onSubmit={conv.submitFileDecision}
|
|
67
|
+
* submittingDecisionKeys={conv.submittingFileDecisionKeys}
|
|
68
|
+
* decisionErrors={conv.fileDecisionErrors}
|
|
69
|
+
* />
|
|
70
|
+
* ```
|
|
71
|
+
*/
|
|
72
|
+
export declare function FileReviewDock({ changeSets, onSubmit, submittingDecisionKeys, decisionErrors, className, }: FileReviewDockProps): import("react/jsx-runtime").JSX.Element | null;
|
|
73
|
+
//# sourceMappingURL=FileReviewDock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FileReviewDock.d.ts","sourceRoot":"","sources":["../../src/execution/FileReviewDock.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oEAAoE,CAAC;AACxG,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,8DAA8D,CAAC;AAGvG,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAE3D,wCAAwC;AACxC,MAAM,WAAW,mBAAmB;IAClC;;;;;;OAMG;IACH,QAAQ,CAAC,UAAU,EAAE,SAAS,aAAa,EAAE,CAAC;IAC9C;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,EAAE,CACjB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,kBAAkB,EAC1B,OAAO,CAAC,EAAE,mBAAmB,KAC1B,IAAI,CAAC;IACV;;;OAGG;IACH,QAAQ,CAAC,sBAAsB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACtD;;;OAGG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACrD,yDAAyD;IACzD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,wBAAgB,cAAc,CAAC,EAC7B,UAAU,EACV,QAAQ,EACR,sBAAsB,EACtB,cAAc,EACd,SAAS,GACV,EAAE,mBAAmB,kDAyBrB"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { memo, useCallback } from "react";
|
|
4
|
+
import { cn } from "@stigmer/theme";
|
|
5
|
+
import { FileReviewCard } from "./FileReviewCard";
|
|
6
|
+
/**
|
|
7
|
+
* The composer-docked decision surface for pending file reviews: renders each
|
|
8
|
+
* AWAITING_REVIEW {@link FileChangeSet} as an interactive {@link FileReviewCard}
|
|
9
|
+
* decision bar, pinned in the fixed strip above the composer.
|
|
10
|
+
*
|
|
11
|
+
* WHY DOCKED, NOT IN-THREAD. The transcript's stamped edit rows are
|
|
12
|
+
* observational — they show what changed, badged with the live review state —
|
|
13
|
+
* but a *decision* the agent is blocked on must never scroll out of view. An
|
|
14
|
+
* in-thread card does exactly that on a long conversation. Docking the bar to
|
|
15
|
+
* the composer keeps the pending decision visible regardless of scroll
|
|
16
|
+
* position, matching the shape of Cursor's own review bar. Once decided, the
|
|
17
|
+
* dock empties and the thread's read-only record (and the rows' Kept/Discarded
|
|
18
|
+
* badges) carry the history.
|
|
19
|
+
*
|
|
20
|
+
* This placement deliberately diverges from tool approvals, which stay inline
|
|
21
|
+
* on their rows (with `ApprovalPeekBar` as the scroll backstop): an approval is
|
|
22
|
+
* call-anchored — "run *this* command" — while a file review is a turn-scoped
|
|
23
|
+
* aggregate over many calls, with no single row that owns it.
|
|
24
|
+
*
|
|
25
|
+
* The expanded per-file body is height-capped with internal scroll: a set that
|
|
26
|
+
* needs per-file attention starts expanded (see {@link FileReviewCard}), and an
|
|
27
|
+
* unconstrained list in a fixed strip would swallow the viewport.
|
|
28
|
+
*
|
|
29
|
+
* Purely presentational — the data and decision routing live in
|
|
30
|
+
* `useSessionConversation` (headless-first, DD-003). `SessionViewer` wires it
|
|
31
|
+
* in by default; platform builders composing a custom layout mount it over the
|
|
32
|
+
* same seam.
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* ```tsx
|
|
36
|
+
* const conv = useSessionConversation(sessionId);
|
|
37
|
+
* <FileReviewDock
|
|
38
|
+
* changeSets={conv.fileChangeSets}
|
|
39
|
+
* onSubmit={conv.submitFileDecision}
|
|
40
|
+
* submittingDecisionKeys={conv.submittingFileDecisionKeys}
|
|
41
|
+
* decisionErrors={conv.fileDecisionErrors}
|
|
42
|
+
* />
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
45
|
+
export function FileReviewDock({ changeSets, onSubmit, submittingDecisionKeys, decisionErrors, className, }) {
|
|
46
|
+
if (changeSets.length === 0)
|
|
47
|
+
return null;
|
|
48
|
+
return (_jsx("div", { role: "region", "aria-label": "File changes awaiting review", "data-cursor-target": "file-review-dock", className: cn("border-t border-border-muted", className), children: _jsx("div", { className: "max-h-[40vh] space-y-2 overflow-y-auto px-4 py-2", children: changeSets.map((changeSet) => (_jsx(DockedChangeSet, { changeSet: changeSet, onSubmit: onSubmit, submittingDecisionKeys: submittingDecisionKeys, decisionErrors: decisionErrors }, changeSet.id))) }) }));
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* One docked set — binds the set id into the card's `(action, options)` submit
|
|
52
|
+
* signature with a stable callback so `FileReviewCard`'s `React.memo` holds
|
|
53
|
+
* across unrelated stream frames.
|
|
54
|
+
*/
|
|
55
|
+
const DockedChangeSet = memo(function DockedChangeSet({ changeSet, onSubmit, submittingDecisionKeys, decisionErrors, }) {
|
|
56
|
+
const handleSubmit = useCallback((action, options) => {
|
|
57
|
+
onSubmit(changeSet.id, action, options);
|
|
58
|
+
}, [onSubmit, changeSet.id]);
|
|
59
|
+
return (_jsx(FileReviewCard, { fileChangeSet: changeSet, onSubmit: handleSubmit, submittingDecisionKeys: submittingDecisionKeys, decisionErrors: decisionErrors,
|
|
60
|
+
// The transcript's stamped edit rows show every diff in place, so the
|
|
61
|
+
// docked card renders the compact file list — the decision surface never
|
|
62
|
+
// duplicates the thread's diffs.
|
|
63
|
+
showDiffs: false }));
|
|
64
|
+
});
|
|
65
|
+
//# sourceMappingURL=FileReviewDock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FileReviewDock.js","sourceRoot":"","sources":["../../src/execution/FileReviewDock.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAG1C,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAqClD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,MAAM,UAAU,cAAc,CAAC,EAC7B,UAAU,EACV,QAAQ,EACR,sBAAsB,EACtB,cAAc,EACd,SAAS,GACW;IACpB,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEzC,OAAO,CACL,cACE,IAAI,EAAC,QAAQ,gBACF,8BAA8B,wBACtB,kBAAkB,EACrC,SAAS,EAAE,EAAE,CAAC,8BAA8B,EAAE,SAAS,CAAC,YAIxD,cAAK,SAAS,EAAC,kDAAkD,YAC9D,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAC7B,KAAC,eAAe,IAEd,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,QAAQ,EAClB,sBAAsB,EAAE,sBAAsB,EAC9C,cAAc,EAAE,cAAc,IAJzB,SAAS,CAAC,EAAE,CAKjB,CACH,CAAC,GACE,GACF,CACP,CAAC;AACJ,CAAC;AAaD;;;;GAIG;AACH,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,eAAe,CAAC,EACpD,SAAS,EACT,QAAQ,EACR,sBAAsB,EACtB,cAAc,GACO;IACrB,MAAM,YAAY,GAAG,WAAW,CAC9B,CAAC,MAA0B,EAAE,OAA6B,EAAE,EAAE;QAC5D,QAAQ,CAAC,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC,EACD,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,CAAC,CACzB,CAAC;IAEF,OAAO,CACL,KAAC,cAAc,IACb,aAAa,EAAE,SAAS,EACxB,QAAQ,EAAE,YAAY,EACtB,sBAAsB,EAAE,sBAAsB,EAC9C,cAAc,EAAE,cAAc;QAC9B,sEAAsE;QACtE,yEAAyE;QACzE,iCAAiC;QACjC,SAAS,EAAE,KAAK,GAChB,CACH,CAAC;AACJ,CAAC,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"McpToolDetail.d.ts","sourceRoot":"","sources":["../../src/execution/McpToolDetail.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"McpToolDetail.d.ts","sourceRoot":"","sources":["../../src/execution/McpToolDetail.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iEAAiE,CAAC;AAiBhG,uCAAuC;AACvC,MAAM,WAAW,kBAAkB;IACjC,8DAA8D;IAC9D,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,yDAAyD;IACzD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,aAAa,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,kBAAkB,2CAsBxE;AAgID,wCAAwC;AACxC,MAAM,WAAW,mBAAmB;IAClC,iDAAiD;IACjD,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,yCAAyC;IACzC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,qEAAqE;IACrE,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,EAC7B,aAAa,EACb,QAAQ,EACR,QAAQ,GACT,EAAE,mBAAmB,kDAiBrB;AAMD,qCAAqC;AACrC,MAAM,WAAW,gBAAgB;IAC/B,uDAAuD;IACvD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACxC;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,EAAE,IAAI,EAAE,EAAE,gBAAgB,kDAoCrD;AA2CD;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAoBrD"}
|
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
import { useMemo, useState } from "react";
|
|
3
4
|
import { cn } from "@stigmer/theme";
|
|
4
5
|
import { formatDuration } from "./ToolCallDetail";
|
|
5
6
|
import { humanizeToolName } from "./tool-categories";
|
|
6
7
|
import { CollapsiblePre, CollapsibleJsonBlock, McpServerIcon, formatJson, isScalar, humanizeArgKey, } from "./tool-rendering-primitives";
|
|
8
|
+
import { execIdFromStorageKey } from "./useFileChangeContent";
|
|
9
|
+
import { useArtifactDownloadUrl } from "./useArtifactDownloadUrl";
|
|
10
|
+
import { useArtifactDownload } from "./useArtifactDownload";
|
|
11
|
+
import { useToolOutputContent } from "./useToolOutputContent";
|
|
7
12
|
/**
|
|
8
13
|
* MCP-aware detail renderer for tool calls originating from an MCP
|
|
9
14
|
* server.
|
|
@@ -25,7 +30,7 @@ import { CollapsiblePre, CollapsibleJsonBlock, McpServerIcon, formatJson, isScal
|
|
|
25
30
|
*/
|
|
26
31
|
export function McpToolDetail({ toolCall, className }) {
|
|
27
32
|
const duration = formatDuration(toolCall.startedAt, toolCall.completedAt);
|
|
28
|
-
return (_jsxs("div", { className: cn("space-y-3 text-xs", className), children: [_jsx(McpMetadataRow, { mcpServerSlug: toolCall.mcpServerSlug, toolName: toolCall.name, duration: duration }), toolCall.args && Object.keys(toolCall.args).length > 0 && (_jsx(McpArgsView, { args: toolCall.args })), toolCall.outputRef?.
|
|
33
|
+
return (_jsxs("div", { className: cn("space-y-3 text-xs", className), children: [_jsx(McpMetadataRow, { mcpServerSlug: toolCall.mcpServerSlug, toolName: toolCall.name, duration: duration }), toolCall.args && Object.keys(toolCall.args).length > 0 && (_jsx(McpArgsView, { args: toolCall.args })), toolCall.outputRef?.storageKey ? (_jsx(McpOffloadedOutputView, { outputRef: toolCall.outputRef })) : (toolCall.result && _jsx(McpResultView, { result: toolCall.result }))] }));
|
|
29
34
|
}
|
|
30
35
|
// ---------------------------------------------------------------------------
|
|
31
36
|
// Offloaded output (ToolCallOutputRef)
|
|
@@ -39,13 +44,41 @@ function formatBytes(n) {
|
|
|
39
44
|
}
|
|
40
45
|
/**
|
|
41
46
|
* Renders an MCP result whose bytes were offloaded to artifact storage (e.g. a
|
|
42
|
-
* computer-use screenshot).
|
|
43
|
-
*
|
|
44
|
-
*
|
|
47
|
+
* computer-use screenshot). The bytes are resolved on demand from the stable
|
|
48
|
+
* `storageKey` — never from a baked URL, which expires. Images render inline via
|
|
49
|
+
* a freshly minted URL; other large output expands in-app. Mirrors ResultView's
|
|
50
|
+
* outputRef treatment so MCP and non-MCP offloads look consistent (DD-016).
|
|
45
51
|
*/
|
|
46
52
|
function McpOffloadedOutputView({ outputRef, }) {
|
|
53
|
+
return (_jsxs("div", { className: "space-y-1", children: [_jsx("span", { className: "font-medium text-muted-foreground", children: "Result" }), outputRef.isImage ? (_jsx(McpOffloadedImage, { storageKey: outputRef.storageKey })) : (_jsx(McpOffloadedText, { outputRef: outputRef }))] }));
|
|
54
|
+
}
|
|
55
|
+
/** Offloaded MCP image output, rendered from an always-fresh presigned URL. */
|
|
56
|
+
function McpOffloadedImage({ storageKey }) {
|
|
57
|
+
const executionId = useMemo(() => execIdFromStorageKey(storageKey), [storageKey]);
|
|
58
|
+
const { url, error } = useArtifactDownloadUrl(executionId, storageKey);
|
|
59
|
+
if (error) {
|
|
60
|
+
return _jsx("p", { className: "text-xs text-destructive", children: "Couldn't load image output." });
|
|
61
|
+
}
|
|
62
|
+
if (!url) {
|
|
63
|
+
return (_jsx("div", { className: "h-40 w-64 animate-pulse rounded-md border border-border bg-muted", "aria-busy": "true", "aria-label": "Loading image output" }));
|
|
64
|
+
}
|
|
65
|
+
return (_jsx("a", { href: url, target: "_blank", rel: "noreferrer", className: "inline-block focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring", children: _jsx("img", { src: url, alt: "Tool output screenshot", loading: "lazy", className: "max-h-96 w-auto rounded-md border border-border" }) }));
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Offloaded MCP text output. Preview head + a "View full output" toggle that
|
|
69
|
+
* lazily fetches the full content in-app, with a download fallback when the
|
|
70
|
+
* server truncates it.
|
|
71
|
+
*/
|
|
72
|
+
function McpOffloadedText({ outputRef, }) {
|
|
73
|
+
const [expanded, setExpanded] = useState(false);
|
|
74
|
+
const executionId = useMemo(() => execIdFromStorageKey(outputRef.storageKey), [outputRef.storageKey]);
|
|
75
|
+
const { content, isLoading, isTruncated, error } = useToolOutputContent(outputRef, expanded);
|
|
76
|
+
const { download, isDownloading } = useArtifactDownload(executionId);
|
|
47
77
|
const size = Number(outputRef.sizeBytes);
|
|
48
|
-
|
|
78
|
+
const sizeSuffix = size ? ` (${formatBytes(size)})` : "";
|
|
79
|
+
const previewClass = "max-h-80 overflow-auto rounded-md border border-border bg-muted-subtle p-2 text-foreground";
|
|
80
|
+
const linkClass = "inline-block text-xs font-medium text-primary underline-offset-2 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring";
|
|
81
|
+
return (_jsx("div", { className: "space-y-1", children: !expanded ? (_jsxs(_Fragment, { children: [outputRef.truncatedPreview && (_jsx(CollapsiblePre, { content: outputRef.truncatedPreview, className: previewClass })), _jsxs("button", { type: "button", onClick: () => setExpanded(true), className: linkClass, children: ["View full output", sizeSuffix] })] })) : isLoading ? (_jsx("p", { className: "text-xs text-muted-foreground", children: "Loading full output\u2026" })) : error ? (_jsx("p", { className: "text-xs text-destructive", children: "Couldn't load full output. Try again." })) : content !== null ? (_jsxs("div", { className: "space-y-1", children: [_jsx(CollapsiblePre, { content: content, className: previewClass }), isTruncated && (_jsx("button", { type: "button", onClick: () => download(outputRef.storageKey), disabled: isDownloading, className: cn(linkClass, "disabled:opacity-50"), children: isDownloading ? "Preparing download…" : `Output truncated — download full file${sizeSuffix}` }))] })) : null }));
|
|
49
82
|
}
|
|
50
83
|
/**
|
|
51
84
|
* Displays MCP server slug, tool name, and optional duration as a
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"McpToolDetail.js","sourceRoot":"","sources":["../../src/execution/McpToolDetail.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;
|
|
1
|
+
{"version":3,"file":"McpToolDetail.js","sourceRoot":"","sources":["../../src/execution/McpToolDetail.tsx"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,9 @@ import type { AgentExecution } from "@stigmer/protos/ai/stigmer/agentic/agentexe
|
|
|
2
2
|
import type { AgentMessage, ToolCall } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/message_pb";
|
|
3
3
|
import type { SubAgentExecution } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/subagent_pb";
|
|
4
4
|
import type { PendingApproval } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/approval_pb";
|
|
5
|
+
import type { FileChangeSet } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/filereview_pb";
|
|
5
6
|
import type { ExecutionArtifact } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/artifact_pb";
|
|
7
|
+
import type { TodoItem } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/todo_pb";
|
|
6
8
|
import { ApprovalAction, ExecutionPhase } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/enum_pb";
|
|
7
9
|
import type { WorkspaceEntry } from "@stigmer/protos/ai/stigmer/agentic/session/v1/workspace_pb";
|
|
8
10
|
import type { SummarizationEventView } from "./useContextWindow";
|
|
@@ -76,6 +78,31 @@ export interface MessageThreadProps {
|
|
|
76
78
|
* `onApprovalSubmit` is provided.
|
|
77
79
|
*/
|
|
78
80
|
readonly submittingApprovalIds?: ReadonlySet<string>;
|
|
81
|
+
/**
|
|
82
|
+
* Per-tool-call approval failures, keyed by `toolCallId` — surfaced in-card
|
|
83
|
+
* beside the gate that failed (an inline tool row or the bottom backstop
|
|
84
|
+
* card). Supply {@link useSubmitApproval}'s `errorsByToolCallId`. Only
|
|
85
|
+
* meaningful when `onApprovalSubmit` is provided.
|
|
86
|
+
*/
|
|
87
|
+
readonly approvalErrors?: ReadonlyMap<string, Error>;
|
|
88
|
+
/**
|
|
89
|
+
* Render each *settled* captured change set as a read-only record card at
|
|
90
|
+
* its anchor in the thread (after the set's last stamped edit row) — the
|
|
91
|
+
* durable history of what changed and how it was decided. This is the only
|
|
92
|
+
* in-thread trace for a set with no stamped rows (e.g. changes made by shell
|
|
93
|
+
* commands), so the surface that owns the session history should enable it.
|
|
94
|
+
*
|
|
95
|
+
* The thread never renders *decision* controls: a pending (AWAITING_REVIEW)
|
|
96
|
+
* set on a live execution is deliberately NOT emitted here — its decision
|
|
97
|
+
* surface is the composer-docked {@link FileReviewDock}, which cannot scroll
|
|
98
|
+
* out of view. The stamped rows' badges carry the pending state in-thread.
|
|
99
|
+
*
|
|
100
|
+
* Opt-in with a backward-compatible default (DD-011); `SessionViewer`
|
|
101
|
+
* enables it.
|
|
102
|
+
*
|
|
103
|
+
* @default false
|
|
104
|
+
*/
|
|
105
|
+
readonly showFileReviewRecords?: boolean;
|
|
79
106
|
/**
|
|
80
107
|
* Workspace entries from the session spec. When provided, file
|
|
81
108
|
* paths in tool call rendering become interactive — git-sourced
|
|
@@ -194,6 +221,10 @@ export type ThreadItem = {
|
|
|
194
221
|
readonly kind: "approval-request";
|
|
195
222
|
readonly pendingApproval: PendingApproval;
|
|
196
223
|
readonly key: string;
|
|
224
|
+
} | {
|
|
225
|
+
readonly kind: "file-review-record";
|
|
226
|
+
readonly fileChangeSet: FileChangeSet;
|
|
227
|
+
readonly key: string;
|
|
197
228
|
} | {
|
|
198
229
|
readonly kind: "setup-progress";
|
|
199
230
|
readonly workspaceEntries: readonly WorkspaceEntry[];
|
|
@@ -204,6 +235,13 @@ export type ThreadItem = {
|
|
|
204
235
|
readonly kind: "context-compacted";
|
|
205
236
|
readonly event: SummarizationEventView;
|
|
206
237
|
readonly key: string;
|
|
238
|
+
} | {
|
|
239
|
+
readonly kind: "todos";
|
|
240
|
+
readonly key: string;
|
|
241
|
+
readonly executionId: string;
|
|
242
|
+
readonly todos: {
|
|
243
|
+
readonly [id: string]: TodoItem;
|
|
244
|
+
};
|
|
207
245
|
} | {
|
|
208
246
|
readonly kind: "plan-completion";
|
|
209
247
|
readonly key: string;
|
|
@@ -218,7 +256,7 @@ export type ThreadItem = {
|
|
|
218
256
|
*
|
|
219
257
|
* @internal Exported for testing — not part of the public API.
|
|
220
258
|
*/
|
|
221
|
-
export declare function buildThreadItems(executions: readonly AgentExecution[], activeStreamExecution: AgentExecution | null | undefined, pendingUserMessage: string | null | undefined, includeApprovals: boolean, workspaceEntries: readonly WorkspaceEntry[] | undefined, summarizationEvents?: readonly SummarizationEventView[], pendingMessageFailed?: boolean, editableActiveTurn?: boolean): ThreadItem[];
|
|
259
|
+
export declare function buildThreadItems(executions: readonly AgentExecution[], activeStreamExecution: AgentExecution | null | undefined, pendingUserMessage: string | null | undefined, includeApprovals: boolean, workspaceEntries: readonly WorkspaceEntry[] | undefined, summarizationEvents?: readonly SummarizationEventView[], pendingMessageFailed?: boolean, editableActiveTurn?: boolean, includeFileReviewRecords?: boolean): ThreadItem[];
|
|
222
260
|
/**
|
|
223
261
|
* Renders a continuous conversation thread from one or more
|
|
224
262
|
* {@link AgentExecution} snapshots.
|
|
@@ -242,7 +280,7 @@ export declare function buildThreadItems(executions: readonly AgentExecution[],
|
|
|
242
280
|
* />
|
|
243
281
|
* ```
|
|
244
282
|
*/
|
|
245
|
-
export declare function MessageThread({ executions, activeStreamExecution, pendingUserMessage, pendingMessageFailed, onRetrySend, onRetryExecution, onEditMessage, className, formatToolCallSummary, onApprovalSubmit, submittingApprovalIds, workspaceEntries, onFilePathClick, sandboxWorkspaceRoot, summarizationEvents, virtualized, onBuildFromPlan, org, planActionsDisabled, centerContent, }: MessageThreadProps): import("react/jsx-runtime").JSX.Element;
|
|
283
|
+
export declare function MessageThread({ executions, activeStreamExecution, pendingUserMessage, pendingMessageFailed, onRetrySend, onRetryExecution, onEditMessage, className, formatToolCallSummary, onApprovalSubmit, submittingApprovalIds, approvalErrors, showFileReviewRecords, workspaceEntries, onFilePathClick, sandboxWorkspaceRoot, summarizationEvents, virtualized, onBuildFromPlan, org, planActionsDisabled, centerContent, }: MessageThreadProps): import("react/jsx-runtime").JSX.Element;
|
|
246
284
|
/**
|
|
247
285
|
* Props for {@link ThreadItemRenderer}.
|
|
248
286
|
*
|
|
@@ -254,6 +292,7 @@ export interface ThreadItemRendererProps {
|
|
|
254
292
|
readonly formatToolCallSummary?: (toolCalls: readonly ToolCall[]) => string;
|
|
255
293
|
readonly onApprovalSubmit?: (toolCallId: string, action: ApprovalAction, comment?: string) => void;
|
|
256
294
|
readonly submittingApprovalIds?: ReadonlySet<string>;
|
|
295
|
+
readonly approvalErrors?: ReadonlyMap<string, Error>;
|
|
257
296
|
readonly onBuildFromPlan?: () => void;
|
|
258
297
|
readonly org?: string;
|
|
259
298
|
readonly planActionsDisabled?: boolean;
|
|
@@ -272,5 +311,5 @@ export interface ThreadItemRendererProps {
|
|
|
272
311
|
* @internal Exported for internal use by `VirtualizedThread` — not
|
|
273
312
|
* part of the public API.
|
|
274
313
|
*/
|
|
275
|
-
export declare function ThreadItemRenderer({ item, formatToolCallSummary, onApprovalSubmit, submittingApprovalIds, onBuildFromPlan, org, planActionsDisabled, onRetrySend, onRetryExecution, onEditMessage, }: ThreadItemRendererProps): import("react/jsx-runtime").JSX.Element;
|
|
314
|
+
export declare function ThreadItemRenderer({ item, formatToolCallSummary, onApprovalSubmit, submittingApprovalIds, approvalErrors, onBuildFromPlan, org, planActionsDisabled, onRetrySend, onRetryExecution, onEditMessage, }: ThreadItemRendererProps): import("react/jsx-runtime").JSX.Element;
|
|
276
315
|
//# sourceMappingURL=MessageThread.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MessageThread.d.ts","sourceRoot":"","sources":["../../src/execution/MessageThread.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6DAA6D,CAAC;AAClG,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,iEAAiE,CAAC;AAE9G,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kEAAkE,CAAC;AAC1G,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kEAAkE,CAAC;AACxG,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kEAAkE,CAAC;AAC1G,OAAO,EACL,cAAc,EACd,cAAc,
|
|
1
|
+
{"version":3,"file":"MessageThread.d.ts","sourceRoot":"","sources":["../../src/execution/MessageThread.tsx"],"names":[],"mappings":"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"}
|