@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
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
-
import { memo,
|
|
3
|
+
import { memo, useContext, useMemo } from "react";
|
|
4
4
|
import type { SubAgentExecution } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/subagent_pb";
|
|
5
5
|
import type { TodoItem } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/todo_pb";
|
|
6
6
|
import type { AgentMessage, ToolCall } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/message_pb";
|
|
@@ -9,10 +9,13 @@ import {
|
|
|
9
9
|
SubAgentStatus,
|
|
10
10
|
} from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/enum_pb";
|
|
11
11
|
import { useRenderTracer } from "../internal/dev";
|
|
12
|
+
import { useAutoDisclosure } from "../internal/useAutoDisclosure";
|
|
13
|
+
import { useElapsedSince, formatElapsed } from "../internal/useElapsedSince";
|
|
12
14
|
import { cn } from "@stigmer/theme";
|
|
13
15
|
import { formatDuration } from "./ToolCallDetail";
|
|
14
16
|
import { MessageEntry } from "./MessageEntry";
|
|
15
17
|
import { ToolCallGroup } from "./ToolCallGroup";
|
|
18
|
+
import { ApprovalContext } from "./ApprovalContext";
|
|
16
19
|
import { isInternalTool } from "./tool-categories";
|
|
17
20
|
import { useThreadSelection } from "./useThreadSelection";
|
|
18
21
|
import {
|
|
@@ -144,17 +147,33 @@ function CollapsibleCard({
|
|
|
144
147
|
selection,
|
|
145
148
|
className,
|
|
146
149
|
}: CollapsibleCardProps) {
|
|
147
|
-
const [expanded, setExpanded] = useState(false);
|
|
148
|
-
|
|
149
|
-
const handleToggle = () => {
|
|
150
|
-
setExpanded((v) => !v);
|
|
151
|
-
};
|
|
152
|
-
|
|
153
150
|
const hasTodos =
|
|
154
151
|
sub.todos != null && Object.keys(sub.todos).length > 0;
|
|
155
152
|
const isRunning = sub.status === SubAgentStatus.SUB_AGENT_IN_PROGRESS;
|
|
156
153
|
const isCompleted = sub.status === SubAgentStatus.SUB_AGENT_COMPLETED;
|
|
157
154
|
|
|
155
|
+
// A gate raised inside this sub-agent must be reachable: a delegated tool
|
|
156
|
+
// can stop the run just like a top-level one. We detect one of this
|
|
157
|
+
// sub-agent's tool calls awaiting approval and auto-open so its inline
|
|
158
|
+
// approval (rendered by the nested ToolCallItem) is visible without a click.
|
|
159
|
+
const { approvalsByToolCallId } = useContext(ApprovalContext);
|
|
160
|
+
const hasPendingApprovalInside = useMemo(() => {
|
|
161
|
+
if (approvalsByToolCallId.size === 0) return false;
|
|
162
|
+
for (const msg of sub.messages) {
|
|
163
|
+
if (msg.type !== MessageType.MESSAGE_AI) continue;
|
|
164
|
+
for (const tc of msg.toolCalls) {
|
|
165
|
+
if (tc.id && approvalsByToolCallId.has(tc.id)) return true;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
return false;
|
|
169
|
+
}, [sub.messages, approvalsByToolCallId]);
|
|
170
|
+
|
|
171
|
+
// Open while running or while a nested gate waits; settle closed (keeping the
|
|
172
|
+
// todo/summary preview) when done — unless the user takes manual control.
|
|
173
|
+
const [expanded, handleToggle] = useAutoDisclosure(
|
|
174
|
+
isRunning || hasPendingApprovalInside,
|
|
175
|
+
);
|
|
176
|
+
|
|
158
177
|
const activeTodo = useMemo(() => findActiveTodo(sub.todos), [sub.todos]);
|
|
159
178
|
const completionLabel = useMemo(
|
|
160
179
|
() => (isCompleted && hasTodos ? todoCompletionSummary(sub.todos) : null),
|
|
@@ -207,10 +226,14 @@ function CollapsibleCard({
|
|
|
207
226
|
>
|
|
208
227
|
{statusInfo.label}
|
|
209
228
|
</span>
|
|
210
|
-
{
|
|
211
|
-
<
|
|
212
|
-
|
|
213
|
-
|
|
229
|
+
{isRunning ? (
|
|
230
|
+
<RunningDuration startedAt={sub.startedAt} />
|
|
231
|
+
) : (
|
|
232
|
+
duration && (
|
|
233
|
+
<span className="shrink-0 tabular-nums text-muted-foreground">
|
|
234
|
+
{duration}
|
|
235
|
+
</span>
|
|
236
|
+
)
|
|
214
237
|
)}
|
|
215
238
|
{selection && (
|
|
216
239
|
<button
|
|
@@ -271,6 +294,30 @@ function CollapsibleCard({
|
|
|
271
294
|
);
|
|
272
295
|
}
|
|
273
296
|
|
|
297
|
+
/**
|
|
298
|
+
* Ticking elapsed time for an IN_PROGRESS sub-agent's header, where the
|
|
299
|
+
* static duration (which needs `completedAt`) is still null.
|
|
300
|
+
*
|
|
301
|
+
* This is the honest live affordance for a running sub-agent: the Cursor
|
|
302
|
+
* SDK returns sub-agent internals only as a blob when the task tool
|
|
303
|
+
* completes (verified against SDK 1.0.13 and 1.0.22 — zero events reach the
|
|
304
|
+
* parent stream while the sub-agent runs), so there are no nested tool calls
|
|
305
|
+
* to stream here. A counter that visibly advances tells the user work is
|
|
306
|
+
* progressing without fabricating intermediate state. The native harness
|
|
307
|
+
* streams nested messages as they happen; this counter simply accompanies
|
|
308
|
+
* them.
|
|
309
|
+
*/
|
|
310
|
+
function RunningDuration({ startedAt }: { readonly startedAt: string }) {
|
|
311
|
+
const elapsed = useElapsedSince(startedAt);
|
|
312
|
+
if (elapsed === null) return null;
|
|
313
|
+
|
|
314
|
+
return (
|
|
315
|
+
<span className="shrink-0 tabular-nums text-muted-foreground">
|
|
316
|
+
{formatElapsed(elapsed)}
|
|
317
|
+
</span>
|
|
318
|
+
);
|
|
319
|
+
}
|
|
320
|
+
|
|
274
321
|
// ---------------------------------------------------------------------------
|
|
275
322
|
// Flat content — no toggle (used inside ToolCallItem detail panel)
|
|
276
323
|
// ---------------------------------------------------------------------------
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
// One rendered terminal session: the `$ command` prompt line followed by its
|
|
4
|
+
// output, as a single block. Rendered on the same `bg-muted-subtle` surface as
|
|
5
|
+
// every other code/output block (CollapsibleCode, search, list) — not a
|
|
6
|
+
// bespoke dark box — so it tracks the host theme, preset, and color mode.
|
|
7
|
+
|
|
8
|
+
import { cn } from "@stigmer/theme";
|
|
9
|
+
import { CollapsiblePre } from "./tool-rendering-primitives";
|
|
10
|
+
import { useSandboxNormalize } from "./SandboxContext";
|
|
11
|
+
|
|
12
|
+
/** Props for {@link TerminalSession}. */
|
|
13
|
+
export interface TerminalSessionProps {
|
|
14
|
+
/**
|
|
15
|
+
* The command that was run, shown as the `$ <command>` prompt line. Omit for
|
|
16
|
+
* a pure-output render; the pre-execution approval gate passes only this
|
|
17
|
+
* (no output exists yet).
|
|
18
|
+
*/
|
|
19
|
+
readonly command?: string;
|
|
20
|
+
/** Standard output. */
|
|
21
|
+
readonly stdout?: string;
|
|
22
|
+
/** Standard error, rendered in the destructive color. */
|
|
23
|
+
readonly stderr?: string;
|
|
24
|
+
/** Process exit code. A non-zero code renders a trailing `exit N` badge. */
|
|
25
|
+
readonly exitCode?: number;
|
|
26
|
+
/** Additional CSS class names for the root container. */
|
|
27
|
+
readonly className?: string;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Renders a shell tool call as a single, cohesive terminal session — the
|
|
32
|
+
* command prompt line immediately followed by its output — instead of a
|
|
33
|
+
* separate command box and output box.
|
|
34
|
+
*
|
|
35
|
+
* Used by {@link ResultView} (full session) and the approval gate's
|
|
36
|
+
* {@link ToolArgsView} (command-only, pre-execution). Importable on its own by
|
|
37
|
+
* platform builders composing custom tool UIs.
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* ```tsx
|
|
41
|
+
* <TerminalSession command="ls -la" stdout="total 8\n..." exitCode={0} />
|
|
42
|
+
* <TerminalSession command="npm test" /> // gate: command only
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
45
|
+
export function TerminalSession({
|
|
46
|
+
command,
|
|
47
|
+
stdout,
|
|
48
|
+
stderr,
|
|
49
|
+
exitCode,
|
|
50
|
+
className,
|
|
51
|
+
}: TerminalSessionProps) {
|
|
52
|
+
const normalize = useSandboxNormalize();
|
|
53
|
+
const failed = exitCode !== undefined && exitCode !== 0;
|
|
54
|
+
|
|
55
|
+
return (
|
|
56
|
+
<div
|
|
57
|
+
data-cursor-target="terminal-session"
|
|
58
|
+
className={cn(
|
|
59
|
+
"space-y-1 rounded-md border border-border bg-muted-subtle p-2.5 font-mono text-xs",
|
|
60
|
+
className,
|
|
61
|
+
)}
|
|
62
|
+
>
|
|
63
|
+
{command && (
|
|
64
|
+
// A plain <pre> (not CollapsiblePre): the command is the user's intent
|
|
65
|
+
// and renders in full — even a multi-line heredoc — without a second
|
|
66
|
+
// truncation toggle competing with stdout's.
|
|
67
|
+
<pre className="whitespace-pre-wrap break-words text-foreground">
|
|
68
|
+
<span className="select-none text-muted-foreground">$ </span>
|
|
69
|
+
{normalize(command)}
|
|
70
|
+
</pre>
|
|
71
|
+
)}
|
|
72
|
+
{stdout && (
|
|
73
|
+
<CollapsiblePre content={normalize(stdout)} className="text-foreground" />
|
|
74
|
+
)}
|
|
75
|
+
{stderr && (
|
|
76
|
+
<CollapsiblePre content={normalize(stderr)} className="text-destructive" />
|
|
77
|
+
)}
|
|
78
|
+
{failed && (
|
|
79
|
+
<div>
|
|
80
|
+
<span className="sr-only">Command exited with code {exitCode}</span>
|
|
81
|
+
<span
|
|
82
|
+
aria-hidden="true"
|
|
83
|
+
className="inline-block rounded bg-destructive-subtle px-1 py-0.5 text-[10px] font-medium leading-none tabular-nums text-destructive"
|
|
84
|
+
>
|
|
85
|
+
exit {exitCode}
|
|
86
|
+
</span>
|
|
87
|
+
</div>
|
|
88
|
+
)}
|
|
89
|
+
</div>
|
|
90
|
+
);
|
|
91
|
+
}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { memo, useMemo } from "react";
|
|
4
|
+
import type { TodoItem } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/todo_pb";
|
|
5
|
+
import { TodoStatus } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/enum_pb";
|
|
6
|
+
import { cn } from "@stigmer/theme";
|
|
7
|
+
import { useRenderTracer } from "../internal/dev";
|
|
8
|
+
import { useAutoDisclosure } from "../internal/useAutoDisclosure";
|
|
9
|
+
import { TodoList, findActiveTodo, todoCompletionSummary } from "./TodoList";
|
|
10
|
+
|
|
11
|
+
/** Props for {@link TodoCard}. */
|
|
12
|
+
export interface TodoCardProps {
|
|
13
|
+
/**
|
|
14
|
+
* The agent's todo map for one execution — the proto map shape
|
|
15
|
+
* (`execution.status.todos`) passed through by reference so a settled
|
|
16
|
+
* card skips re-renders while siblings stream (DD-009/010).
|
|
17
|
+
*/
|
|
18
|
+
readonly todos: { readonly [key: string]: TodoItem };
|
|
19
|
+
/** Additional CSS class names for the root container. */
|
|
20
|
+
readonly className?: string;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* The agent's plan, rendered inline in the message thread as a collapsible
|
|
25
|
+
* card — the Cursor-style "what I'm going to do, and how far I've got"
|
|
26
|
+
* surface. It is the in-thread home of the todo list that previously lived
|
|
27
|
+
* in the right-side Plan tab.
|
|
28
|
+
*
|
|
29
|
+
* The card chrome matches the rest of the thread's tool cards (a single
|
|
30
|
+
* neutral {@link https://tailwindcss.com `border-border-prominent`} line) and
|
|
31
|
+
* wraps the chrome-less {@link TodoList} primitive — the same list the
|
|
32
|
+
* sub-agent section renders bare, so there is exactly one todo renderer and no
|
|
33
|
+
* card-in-a-card.
|
|
34
|
+
*
|
|
35
|
+
* Disclosure follows the thread's {@link useAutoDisclosure} convention: open
|
|
36
|
+
* while the plan is active (any item in progress), settling closed once the
|
|
37
|
+
* plan is fully resolved, with a user's manual toggle always winning. This
|
|
38
|
+
* keeps an in-flight plan visible and a finished one tidy, mirroring
|
|
39
|
+
* `ToolRunGroup`/{@link SubAgentSection}.
|
|
40
|
+
*
|
|
41
|
+
* `React.memo`'d on the by-reference `todos` map: structural sharing
|
|
42
|
+
* (`shareTodos`) keeps the reference stable across stream frames, so the card
|
|
43
|
+
* re-renders only when the plan actually changes — never per frame.
|
|
44
|
+
*
|
|
45
|
+
* All visual properties flow through `--stgm-*` tokens.
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* ```tsx
|
|
49
|
+
* <TodoCard todos={execution.status?.todos ?? {}} />
|
|
50
|
+
* ```
|
|
51
|
+
*/
|
|
52
|
+
export const TodoCard = memo(function TodoCard({
|
|
53
|
+
todos,
|
|
54
|
+
className,
|
|
55
|
+
}: TodoCardProps) {
|
|
56
|
+
useRenderTracer("TodoCard", { todos });
|
|
57
|
+
|
|
58
|
+
const count = Object.keys(todos).length;
|
|
59
|
+
const isActive = findActiveTodo(todos) != null;
|
|
60
|
+
const summary = todoCompletionSummary(todos);
|
|
61
|
+
const allDone = useMemo(
|
|
62
|
+
() =>
|
|
63
|
+
count > 0 &&
|
|
64
|
+
Object.values(todos).every(
|
|
65
|
+
(t) =>
|
|
66
|
+
t.status === TodoStatus.TODO_COMPLETED ||
|
|
67
|
+
t.status === TodoStatus.TODO_CANCELLED,
|
|
68
|
+
),
|
|
69
|
+
[todos, count],
|
|
70
|
+
);
|
|
71
|
+
|
|
72
|
+
// Open while the plan is being worked, tidy once it is fully resolved; a
|
|
73
|
+
// manual toggle wins for the card's lifetime. A completed plan in session
|
|
74
|
+
// history therefore renders collapsed.
|
|
75
|
+
const [expanded, handleToggle] = useAutoDisclosure(isActive);
|
|
76
|
+
|
|
77
|
+
// buildThreadItems only emits this item when todos exist, but guard anyway
|
|
78
|
+
// so the component is safe to use standalone.
|
|
79
|
+
if (count === 0) return null;
|
|
80
|
+
|
|
81
|
+
return (
|
|
82
|
+
<div
|
|
83
|
+
role="region"
|
|
84
|
+
aria-label="Agent to-dos"
|
|
85
|
+
data-cursor-target="todo-card"
|
|
86
|
+
className={cn(
|
|
87
|
+
"rounded-lg border border-border-prominent overflow-hidden",
|
|
88
|
+
className,
|
|
89
|
+
)}
|
|
90
|
+
>
|
|
91
|
+
<button
|
|
92
|
+
type="button"
|
|
93
|
+
aria-expanded={expanded}
|
|
94
|
+
onClick={handleToggle}
|
|
95
|
+
className={cn(
|
|
96
|
+
"flex w-full cursor-pointer items-center gap-2 px-2.5 py-1.5 text-left text-xs text-muted-foreground transition-colors",
|
|
97
|
+
"hover:bg-muted-subtle",
|
|
98
|
+
// ring-inset so the card's overflow-hidden does not clip the focus ring.
|
|
99
|
+
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring",
|
|
100
|
+
)}
|
|
101
|
+
>
|
|
102
|
+
<span
|
|
103
|
+
className={cn(
|
|
104
|
+
"shrink-0",
|
|
105
|
+
allDone ? "text-success" : "text-muted-foreground",
|
|
106
|
+
)}
|
|
107
|
+
aria-hidden="true"
|
|
108
|
+
>
|
|
109
|
+
<PlanIcon />
|
|
110
|
+
</span>
|
|
111
|
+
<span className="min-w-0 flex-1 truncate font-medium text-foreground">
|
|
112
|
+
To-dos
|
|
113
|
+
</span>
|
|
114
|
+
{summary && (
|
|
115
|
+
<span className="shrink-0 tabular-nums text-muted-foreground">
|
|
116
|
+
{summary}
|
|
117
|
+
</span>
|
|
118
|
+
)}
|
|
119
|
+
<ChevronIcon expanded={expanded} />
|
|
120
|
+
</button>
|
|
121
|
+
|
|
122
|
+
{expanded && (
|
|
123
|
+
<div className="border-t border-border-muted px-2.5 py-2">
|
|
124
|
+
<TodoList todos={todos} />
|
|
125
|
+
</div>
|
|
126
|
+
)}
|
|
127
|
+
</div>
|
|
128
|
+
);
|
|
129
|
+
}, todoCardPropsEqual);
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* Shallow comparator for {@link TodoCardProps}. The `todos` map is kept
|
|
133
|
+
* referentially stable by `shareTodos`, so an identity check is exactly the
|
|
134
|
+
* right (and cheapest) "did the plan change?" test.
|
|
135
|
+
*
|
|
136
|
+
* @internal Exported for testing — not part of the public API.
|
|
137
|
+
*/
|
|
138
|
+
export function todoCardPropsEqual(
|
|
139
|
+
prev: Readonly<TodoCardProps>,
|
|
140
|
+
next: Readonly<TodoCardProps>,
|
|
141
|
+
): boolean {
|
|
142
|
+
return prev.todos === next.todos && prev.className === next.className;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
// ---------------------------------------------------------------------------
|
|
146
|
+
// Inline SVG icons — kept inline for SDK independence (codebase pattern)
|
|
147
|
+
// ---------------------------------------------------------------------------
|
|
148
|
+
|
|
149
|
+
function PlanIcon() {
|
|
150
|
+
return (
|
|
151
|
+
<svg
|
|
152
|
+
width="12"
|
|
153
|
+
height="12"
|
|
154
|
+
viewBox="0 0 12 12"
|
|
155
|
+
fill="none"
|
|
156
|
+
stroke="currentColor"
|
|
157
|
+
strokeWidth="1.5"
|
|
158
|
+
strokeLinecap="round"
|
|
159
|
+
strokeLinejoin="round"
|
|
160
|
+
>
|
|
161
|
+
<path d="M2 3h8M2 6h6M2 9h7" />
|
|
162
|
+
</svg>
|
|
163
|
+
);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
function ChevronIcon({ expanded }: { expanded: boolean }) {
|
|
167
|
+
return (
|
|
168
|
+
<svg
|
|
169
|
+
width="10"
|
|
170
|
+
height="10"
|
|
171
|
+
viewBox="0 0 10 10"
|
|
172
|
+
fill="none"
|
|
173
|
+
stroke="currentColor"
|
|
174
|
+
strokeWidth="1.5"
|
|
175
|
+
strokeLinecap="round"
|
|
176
|
+
strokeLinejoin="round"
|
|
177
|
+
className={cn(
|
|
178
|
+
"shrink-0 text-muted-foreground transition-transform duration-150",
|
|
179
|
+
expanded && "rotate-90",
|
|
180
|
+
)}
|
|
181
|
+
aria-hidden="true"
|
|
182
|
+
>
|
|
183
|
+
<path d="M3.5 2L6.5 5L3.5 8" />
|
|
184
|
+
</svg>
|
|
185
|
+
);
|
|
186
|
+
}
|
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
import type { ToolCategory, ToolCategoryInfo } from "./tool-categories";
|
|
10
10
|
import { FilePathLink } from "./FilePathLink";
|
|
11
11
|
import { McpArgsView, McpMetadataRow } from "./McpToolDetail";
|
|
12
|
-
import {
|
|
12
|
+
import { TerminalSession } from "./TerminalSession";
|
|
13
13
|
import {
|
|
14
14
|
CollapsibleCode,
|
|
15
15
|
FilePathIcon,
|
|
@@ -34,6 +34,12 @@ export interface ToolArgsViewProps {
|
|
|
34
34
|
readonly args: Record<string, unknown> | null;
|
|
35
35
|
/** MCP server slug for MCP tool classification and metadata. */
|
|
36
36
|
readonly mcpServerSlug?: string;
|
|
37
|
+
/**
|
|
38
|
+
* Whether the file-tool view renders the path row. Defaults to `true`. Set to
|
|
39
|
+
* `false` where an ancestor already names the file (the approval gate header),
|
|
40
|
+
* so the write/edit content shows without restating the path.
|
|
41
|
+
*/
|
|
42
|
+
readonly showFileName?: boolean;
|
|
37
43
|
/** Additional CSS class names for the root container. */
|
|
38
44
|
readonly className?: string;
|
|
39
45
|
}
|
|
@@ -66,6 +72,7 @@ export function ToolArgsView({
|
|
|
66
72
|
toolName,
|
|
67
73
|
args,
|
|
68
74
|
mcpServerSlug,
|
|
75
|
+
showFileName = true,
|
|
69
76
|
className,
|
|
70
77
|
}: ToolArgsViewProps) {
|
|
71
78
|
const categoryInfo = useMemo(
|
|
@@ -86,6 +93,7 @@ export function ToolArgsView({
|
|
|
86
93
|
args={args}
|
|
87
94
|
primaryArg={primaryArg}
|
|
88
95
|
mcpServerSlug={mcpServerSlug}
|
|
96
|
+
showFileName={showFileName}
|
|
89
97
|
/>
|
|
90
98
|
</div>
|
|
91
99
|
);
|
|
@@ -101,12 +109,14 @@ function CategoryArgsDispatch({
|
|
|
101
109
|
args,
|
|
102
110
|
primaryArg,
|
|
103
111
|
mcpServerSlug,
|
|
112
|
+
showFileName,
|
|
104
113
|
}: {
|
|
105
114
|
category: ToolCategory;
|
|
106
115
|
toolName: string;
|
|
107
116
|
args: Record<string, unknown> | null;
|
|
108
117
|
primaryArg: string | null;
|
|
109
118
|
mcpServerSlug?: string;
|
|
119
|
+
showFileName: boolean;
|
|
110
120
|
}) {
|
|
111
121
|
switch (category) {
|
|
112
122
|
case "shell":
|
|
@@ -117,7 +127,12 @@ function CategoryArgsDispatch({
|
|
|
117
127
|
case "edit":
|
|
118
128
|
case "delete":
|
|
119
129
|
return primaryArg ? (
|
|
120
|
-
<FileArgsView
|
|
130
|
+
<FileArgsView
|
|
131
|
+
path={primaryArg}
|
|
132
|
+
category={category}
|
|
133
|
+
args={args}
|
|
134
|
+
showFileName={showFileName}
|
|
135
|
+
/>
|
|
121
136
|
) : null;
|
|
122
137
|
|
|
123
138
|
case "search":
|
|
@@ -144,28 +159,22 @@ function CategoryArgsDispatch({
|
|
|
144
159
|
// Category-specific views
|
|
145
160
|
// ---------------------------------------------------------------------------
|
|
146
161
|
|
|
162
|
+
// Pre-execution (approval gate) shell view: the command only, in the same
|
|
163
|
+
// terminal chrome the completed call uses — there is no output yet.
|
|
147
164
|
function ShellArgsView({ command }: { command: string }) {
|
|
148
|
-
|
|
149
|
-
return (
|
|
150
|
-
<div className="rounded-md border border-border bg-[var(--stgm-terminal-bg,#1a1a2e)] p-2.5">
|
|
151
|
-
<pre className="whitespace-pre-wrap break-words font-mono text-xs text-[var(--stgm-terminal-fg,#e0e0e0)]">
|
|
152
|
-
<span className="select-none text-[var(--stgm-terminal-prompt,#6b7280)]">
|
|
153
|
-
${" "}
|
|
154
|
-
</span>
|
|
155
|
-
{normalize(command)}
|
|
156
|
-
</pre>
|
|
157
|
-
</div>
|
|
158
|
-
);
|
|
165
|
+
return <TerminalSession command={command} />;
|
|
159
166
|
}
|
|
160
167
|
|
|
161
168
|
function FileArgsView({
|
|
162
169
|
path,
|
|
163
170
|
category,
|
|
164
171
|
args,
|
|
172
|
+
showFileName = true,
|
|
165
173
|
}: {
|
|
166
174
|
path: string;
|
|
167
175
|
category: string;
|
|
168
176
|
args: Record<string, unknown> | null;
|
|
177
|
+
showFileName?: boolean;
|
|
169
178
|
}) {
|
|
170
179
|
const writeContent = useMemo(() => {
|
|
171
180
|
if (category !== "write" && category !== "edit") return null;
|
|
@@ -175,10 +184,12 @@ function FileArgsView({
|
|
|
175
184
|
|
|
176
185
|
return (
|
|
177
186
|
<div className="space-y-1.5">
|
|
178
|
-
|
|
179
|
-
<
|
|
180
|
-
|
|
181
|
-
|
|
187
|
+
{showFileName && (
|
|
188
|
+
<div className="flex items-center gap-1.5 text-xs">
|
|
189
|
+
<FilePathIcon />
|
|
190
|
+
<FilePathLink path={path} className="text-xs" />
|
|
191
|
+
</div>
|
|
192
|
+
)}
|
|
182
193
|
{writeContent && (
|
|
183
194
|
<CollapsibleCode label="Content" content={writeContent} />
|
|
184
195
|
)}
|