@stigmer/react 3.1.17 → 3.2.1
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/agent-instance/AgentInstanceList.d.ts.map +1 -1
- package/agent-instance/AgentInstanceList.js +11 -3
- package/agent-instance/AgentInstanceList.js.map +1 -1
- package/channel/AgentChannelsPanel.d.ts +60 -0
- package/channel/AgentChannelsPanel.d.ts.map +1 -0
- package/channel/AgentChannelsPanel.js +255 -0
- package/channel/AgentChannelsPanel.js.map +1 -0
- package/channel/ChannelConversationsDialog.d.ts +41 -0
- package/channel/ChannelConversationsDialog.d.ts.map +1 -0
- package/channel/ChannelConversationsDialog.js +94 -0
- package/channel/ChannelConversationsDialog.js.map +1 -0
- package/channel/ChannelCredentialsDialog.d.ts +37 -0
- package/channel/ChannelCredentialsDialog.d.ts.map +1 -0
- package/channel/ChannelCredentialsDialog.js +75 -0
- package/channel/ChannelCredentialsDialog.js.map +1 -0
- package/channel/ChannelToolCredentials.d.ts +31 -0
- package/channel/ChannelToolCredentials.d.ts.map +1 -0
- package/channel/ChannelToolCredentials.js +41 -0
- package/channel/ChannelToolCredentials.js.map +1 -0
- package/channel/ConnectSlackDialog.d.ts +61 -0
- package/channel/ConnectSlackDialog.d.ts.map +1 -0
- package/channel/ConnectSlackDialog.js +238 -0
- package/channel/ConnectSlackDialog.js.map +1 -0
- package/channel/ConnectWhatsAppDialog.d.ts +70 -0
- package/channel/ConnectWhatsAppDialog.d.ts.map +1 -0
- package/channel/ConnectWhatsAppDialog.js +256 -0
- package/channel/ConnectWhatsAppDialog.js.map +1 -0
- package/channel/SlackMarkIcon.d.ts +11 -0
- package/channel/SlackMarkIcon.d.ts.map +1 -0
- package/channel/SlackMarkIcon.js +13 -0
- package/channel/SlackMarkIcon.js.map +1 -0
- package/channel/WhatsAppMarkIcon.d.ts +12 -0
- package/channel/WhatsAppMarkIcon.d.ts.map +1 -0
- package/channel/WhatsAppMarkIcon.js +14 -0
- package/channel/WhatsAppMarkIcon.js.map +1 -0
- package/channel/connect/ServingAppSection.d.ts +57 -0
- package/channel/connect/ServingAppSection.d.ts.map +1 -0
- package/channel/connect/ServingAppSection.js +49 -0
- package/channel/connect/ServingAppSection.js.map +1 -0
- package/channel/connect/ToolCredentialsSection.d.ts +20 -0
- package/channel/connect/ToolCredentialsSection.d.ts.map +1 -0
- package/channel/connect/ToolCredentialsSection.js +22 -0
- package/channel/connect/ToolCredentialsSection.js.map +1 -0
- package/channel/connect/VerbatimRefusal.d.ts +16 -0
- package/channel/connect/VerbatimRefusal.d.ts.map +1 -0
- package/channel/connect/VerbatimRefusal.js +18 -0
- package/channel/connect/VerbatimRefusal.js.map +1 -0
- package/channel/connect/icons.d.ts +16 -0
- package/channel/connect/icons.d.ts.map +1 -0
- package/channel/connect/icons.js +21 -0
- package/channel/connect/icons.js.map +1 -0
- package/channel/index.d.ts +36 -0
- package/channel/index.d.ts.map +1 -0
- package/channel/index.js +19 -0
- package/channel/index.js.map +1 -0
- package/channel/providerPresentation.d.ts +44 -0
- package/channel/providerPresentation.d.ts.map +1 -0
- package/channel/providerPresentation.js +106 -0
- package/channel/providerPresentation.js.map +1 -0
- package/channel/providers.d.ts +62 -0
- package/channel/providers.d.ts.map +1 -0
- package/channel/providers.js +26 -0
- package/channel/providers.js.map +1 -0
- package/channel/useAgentChannel.d.ts +31 -0
- package/channel/useAgentChannel.d.ts.map +1 -0
- package/channel/useAgentChannel.js +34 -0
- package/channel/useAgentChannel.js.map +1 -0
- package/channel/useAgentChannelList.d.ts +43 -0
- package/channel/useAgentChannelList.d.ts.map +1 -0
- package/channel/useAgentChannelList.js +39 -0
- package/channel/useAgentChannelList.js.map +1 -0
- package/channel/useChannelSessions.d.ts +47 -0
- package/channel/useChannelSessions.d.ts.map +1 -0
- package/channel/useChannelSessions.js +38 -0
- package/channel/useChannelSessions.js.map +1 -0
- package/channel/useChannelToolReadiness.d.ts +23 -0
- package/channel/useChannelToolReadiness.d.ts.map +1 -0
- package/channel/useChannelToolReadiness.js +28 -0
- package/channel/useChannelToolReadiness.js.map +1 -0
- package/channel/useConnectSlackChannel.d.ts +75 -0
- package/channel/useConnectSlackChannel.d.ts.map +1 -0
- package/channel/useConnectSlackChannel.js +115 -0
- package/channel/useConnectSlackChannel.js.map +1 -0
- package/channel/useCreateAgentChannel.d.ts +42 -0
- package/channel/useCreateAgentChannel.d.ts.map +1 -0
- package/channel/useCreateAgentChannel.js +48 -0
- package/channel/useCreateAgentChannel.js.map +1 -0
- package/channel/useDeleteAgentChannel.d.ts +40 -0
- package/channel/useDeleteAgentChannel.d.ts.map +1 -0
- package/channel/useDeleteAgentChannel.js +44 -0
- package/channel/useDeleteAgentChannel.js.map +1 -0
- package/channel/useInstallChannel.d.ts +60 -0
- package/channel/useInstallChannel.d.ts.map +1 -0
- package/channel/useInstallChannel.js +63 -0
- package/channel/useInstallChannel.js.map +1 -0
- package/channel/useOrgAgentChannelList.d.ts +32 -0
- package/channel/useOrgAgentChannelList.d.ts.map +1 -0
- package/channel/useOrgAgentChannelList.js +29 -0
- package/channel/useOrgAgentChannelList.js.map +1 -0
- package/channel/useSaveAgentChannel.d.ts +63 -0
- package/channel/useSaveAgentChannel.d.ts.map +1 -0
- package/channel/useSaveAgentChannel.js +104 -0
- package/channel/useSaveAgentChannel.js.map +1 -0
- package/channel-app/ChannelAppDetailPanel.d.ts +46 -0
- package/channel-app/ChannelAppDetailPanel.d.ts.map +1 -0
- package/channel-app/ChannelAppDetailPanel.js +142 -0
- package/channel-app/ChannelAppDetailPanel.js.map +1 -0
- package/channel-app/ChannelAppListPanel.d.ts +36 -0
- package/channel-app/ChannelAppListPanel.d.ts.map +1 -0
- package/channel-app/ChannelAppListPanel.js +63 -0
- package/channel-app/ChannelAppListPanel.js.map +1 -0
- package/channel-app/CreateChannelAppForm.d.ts +54 -0
- package/channel-app/CreateChannelAppForm.d.ts.map +1 -0
- package/channel-app/CreateChannelAppForm.js +140 -0
- package/channel-app/CreateChannelAppForm.js.map +1 -0
- package/channel-app/index.d.ts +18 -0
- package/channel-app/index.d.ts.map +1 -0
- package/channel-app/index.js +10 -0
- package/channel-app/index.js.map +1 -0
- package/channel-app/internal.d.ts +33 -0
- package/channel-app/internal.d.ts.map +1 -0
- package/channel-app/internal.js +44 -0
- package/channel-app/internal.js.map +1 -0
- package/channel-app/slackAppSetup.d.ts +80 -0
- package/channel-app/slackAppSetup.d.ts.map +1 -0
- package/channel-app/slackAppSetup.js +123 -0
- package/channel-app/slackAppSetup.js.map +1 -0
- package/channel-app/useChannelAppList.d.ts +35 -0
- package/channel-app/useChannelAppList.d.ts.map +1 -0
- package/channel-app/useChannelAppList.js +34 -0
- package/channel-app/useChannelAppList.js.map +1 -0
- package/channel-app/useCreateChannelApp.d.ts +39 -0
- package/channel-app/useCreateChannelApp.d.ts.map +1 -0
- package/channel-app/useCreateChannelApp.js +50 -0
- package/channel-app/useCreateChannelApp.js.map +1 -0
- package/channel-app/useDeleteChannelApp.d.ts +31 -0
- package/channel-app/useDeleteChannelApp.d.ts.map +1 -0
- package/channel-app/useDeleteChannelApp.js +43 -0
- package/channel-app/useDeleteChannelApp.js.map +1 -0
- package/channel-app/useUpdateChannelApp.d.ts +39 -0
- package/channel-app/useUpdateChannelApp.d.ts.map +1 -0
- package/channel-app/useUpdateChannelApp.js +50 -0
- package/channel-app/useUpdateChannelApp.js.map +1 -0
- package/channel-app/whatsappAppSetup.d.ts +51 -0
- package/channel-app/whatsappAppSetup.d.ts.map +1 -0
- package/channel-app/whatsappAppSetup.js +57 -0
- package/channel-app/whatsappAppSetup.js.map +1 -0
- package/environment/index.d.ts +2 -0
- package/environment/index.d.ts.map +1 -1
- package/environment/index.js +1 -0
- package/environment/index.js.map +1 -1
- package/environment/useToolCredentialsReadiness.d.ts +52 -0
- package/environment/useToolCredentialsReadiness.d.ts.map +1 -0
- package/environment/useToolCredentialsReadiness.js +84 -0
- package/environment/useToolCredentialsReadiness.js.map +1 -0
- package/execution/ArtifactContentBody.d.ts.map +1 -1
- package/execution/ArtifactContentBody.js +5 -21
- package/execution/ArtifactContentBody.js.map +1 -1
- package/execution/ArtifactFileContent.d.ts +28 -0
- package/execution/ArtifactFileContent.d.ts.map +1 -0
- package/execution/ArtifactFileContent.js +36 -0
- package/execution/ArtifactFileContent.js.map +1 -0
- package/execution/ArtifactRow.d.ts +8 -20
- package/execution/ArtifactRow.d.ts.map +1 -1
- package/execution/ArtifactRow.js +12 -45
- package/execution/ArtifactRow.js.map +1 -1
- package/execution/ArtifactRowView.d.ts +43 -0
- package/execution/ArtifactRowView.d.ts.map +1 -0
- package/execution/ArtifactRowView.js +35 -0
- package/execution/ArtifactRowView.js.map +1 -0
- package/execution/FileChangesView.d.ts.map +1 -1
- package/execution/FileChangesView.js +1 -61
- package/execution/FileChangesView.js.map +1 -1
- package/execution/SubAgentSection.d.ts.map +1 -1
- package/execution/SubAgentSection.js +4 -15
- package/execution/SubAgentSection.js.map +1 -1
- package/execution/ToolCallItem.d.ts.map +1 -1
- package/execution/ToolCallItem.js +16 -61
- package/execution/ToolCallItem.js.map +1 -1
- package/execution/agent-execution-document.d.ts +31 -0
- package/execution/agent-execution-document.d.ts.map +1 -0
- package/execution/agent-execution-document.js +48 -0
- package/execution/agent-execution-document.js.map +1 -0
- package/{session → execution}/artifact-document.d.ts +2 -3
- package/execution/artifact-document.d.ts.map +1 -0
- package/execution/artifact-document.js +23 -0
- package/execution/artifact-document.js.map +1 -0
- package/execution/artifact-row-item.d.ts +56 -0
- package/execution/artifact-row-item.d.ts.map +1 -0
- package/execution/artifact-row-item.js +57 -0
- package/execution/artifact-row-item.js.map +1 -0
- package/execution/deriveExecutionFileChanges.d.ts +55 -0
- package/execution/deriveExecutionFileChanges.d.ts.map +1 -0
- package/execution/deriveExecutionFileChanges.js +216 -0
- package/execution/deriveExecutionFileChanges.js.map +1 -0
- package/execution/file-change-document.d.ts +22 -0
- package/execution/file-change-document.d.ts.map +1 -0
- package/execution/file-change-document.js +34 -0
- package/execution/file-change-document.js.map +1 -0
- package/execution/index.d.ts +14 -0
- package/execution/index.d.ts.map +1 -1
- package/execution/index.js +9 -0
- package/execution/index.js.map +1 -1
- package/execution/useArtifactContentById.d.ts +61 -0
- package/execution/useArtifactContentById.d.ts.map +1 -0
- package/execution/useArtifactContentById.js +63 -0
- package/execution/useArtifactContentById.js.map +1 -0
- package/execution/useArtifactDownload.d.ts +4 -3
- package/execution/useArtifactDownload.d.ts.map +1 -1
- package/execution/useArtifactDownload.js +4 -3
- package/execution/useArtifactDownload.js.map +1 -1
- package/execution/useCreateAgentExecution.d.ts +1 -1
- package/execution/useLiveAgentExecution.d.ts +59 -0
- package/execution/useLiveAgentExecution.d.ts.map +1 -0
- package/execution/useLiveAgentExecution.js +73 -0
- package/execution/useLiveAgentExecution.js.map +1 -0
- package/index.d.ts +15 -10
- package/index.d.ts.map +1 -1
- package/index.js +21 -6
- package/index.js.map +1 -1
- package/internal/DecisionButton.d.ts +4 -3
- package/internal/DecisionButton.d.ts.map +1 -1
- package/internal/DecisionButton.js +4 -3
- package/internal/DecisionButton.js.map +1 -1
- package/internal/oauthPopup.d.ts +101 -0
- package/internal/oauthPopup.d.ts.map +1 -0
- package/internal/oauthPopup.js +208 -0
- package/internal/oauthPopup.js.map +1 -0
- package/internal/store/index.d.ts +0 -2
- package/internal/store/index.d.ts.map +1 -1
- package/internal/store/index.js +0 -1
- package/internal/store/index.js.map +1 -1
- package/internal/store/workflow-execution-event-store.d.ts +34 -1
- package/internal/store/workflow-execution-event-store.d.ts.map +1 -1
- package/internal/store/workflow-execution-event-store.js +81 -3
- package/internal/store/workflow-execution-event-store.js.map +1 -1
- package/internal/store/workspace-file-selection-store.d.ts +1 -2
- package/internal/store/workspace-file-selection-store.d.ts.map +1 -1
- package/internal/store/workspace-file-selection-store.js +2 -5
- package/internal/store/workspace-file-selection-store.js.map +1 -1
- package/internal/thread-card/ThreadCardShell.d.ts +91 -0
- package/internal/thread-card/ThreadCardShell.d.ts.map +1 -0
- package/internal/thread-card/ThreadCardShell.js +41 -0
- package/internal/thread-card/ThreadCardShell.js.map +1 -0
- package/internal/thread-card/glyphs.d.ts +34 -0
- package/internal/thread-card/glyphs.d.ts.map +1 -0
- package/internal/thread-card/glyphs.js +50 -0
- package/internal/thread-card/glyphs.js.map +1 -0
- package/internal/thread-card/index.d.ts +3 -0
- package/internal/thread-card/index.d.ts.map +1 -0
- package/internal/thread-card/index.js +3 -0
- package/internal/thread-card/index.js.map +1 -0
- package/internal/useRevealLine.d.ts +2 -2
- package/internal/useRevealLine.js +2 -2
- package/mcp-server/OAuthCallbackHandler.js +1 -1
- package/mcp-server/OAuthCallbackHandler.js.map +1 -1
- package/mcp-server/useMcpServerOAuthConnect.d.ts +4 -23
- package/mcp-server/useMcpServerOAuthConnect.d.ts.map +1 -1
- package/mcp-server/useMcpServerOAuthConnect.js +12 -145
- package/mcp-server/useMcpServerOAuthConnect.js.map +1 -1
- package/package.json +4 -4
- package/session/NewSessionViewer.d.ts.map +1 -1
- package/session/NewSessionViewer.js +0 -1
- package/session/NewSessionViewer.js.map +1 -1
- package/session/SessionPanelChip.d.ts +7 -22
- package/session/SessionPanelChip.d.ts.map +1 -1
- package/session/SessionPanelChip.js +8 -36
- package/session/SessionPanelChip.js.map +1 -1
- package/session/SessionViewer.d.ts +7 -4
- package/session/SessionViewer.d.ts.map +1 -1
- package/session/SessionViewer.js +32 -30
- package/session/SessionViewer.js.map +1 -1
- package/session/audience.d.ts +15 -1
- package/session/audience.d.ts.map +1 -1
- package/session/channelOrigin.d.ts +33 -0
- package/session/channelOrigin.d.ts.map +1 -0
- package/session/channelOrigin.js +36 -0
- package/session/channelOrigin.js.map +1 -0
- package/session/facets/index.d.ts +0 -2
- package/session/facets/index.d.ts.map +1 -1
- package/session/facets/index.js +0 -1
- package/session/facets/index.js.map +1 -1
- package/session/index.d.ts +2 -2
- package/session/index.d.ts.map +1 -1
- package/session/index.js +5 -3
- package/session/index.js.map +1 -1
- package/session/useNewSessionFlow.d.ts +4 -0
- package/session/useNewSessionFlow.d.ts.map +1 -1
- package/session/useNewSessionFlow.js +33 -4
- package/session/useNewSessionFlow.js.map +1 -1
- package/session/usePersistedModel.d.ts +11 -0
- package/session/usePersistedModel.d.ts.map +1 -1
- package/session/usePersistedModel.js +14 -3
- package/session/usePersistedModel.js.map +1 -1
- package/session/useSessionFileChanges.d.ts +10 -34
- package/session/useSessionFileChanges.d.ts.map +1 -1
- package/session/useSessionFileChanges.js +9 -141
- package/session/useSessionFileChanges.js.map +1 -1
- package/session/useSessionPageFlow.d.ts.map +1 -1
- package/session/useSessionPageFlow.js +12 -1
- package/session/useSessionPageFlow.js.map +1 -1
- package/session/useSessionPanel.d.ts +5 -15
- package/session/useSessionPanel.d.ts.map +1 -1
- package/session/useSessionPanel.js +3 -35
- package/session/useSessionPanel.js.map +1 -1
- package/session/useSessionRailViews.d.ts +3 -6
- package/session/useSessionRailViews.d.ts.map +1 -1
- package/session/useSessionRailViews.js +3 -17
- package/session/useSessionRailViews.js.map +1 -1
- package/settings/ChannelAppsSection.d.ts +13 -0
- package/settings/ChannelAppsSection.d.ts.map +1 -0
- package/settings/ChannelAppsSection.js +48 -0
- package/settings/ChannelAppsSection.js.map +1 -0
- package/settings/index.d.ts +1 -0
- package/settings/index.d.ts.map +1 -1
- package/settings/index.js +1 -0
- package/settings/index.js.map +1 -1
- package/settings/settings-nav.d.ts.map +1 -1
- package/settings/settings-nav.js +6 -1
- package/settings/settings-nav.js.map +1 -1
- package/sharing/AgentShareList.d.ts.map +1 -1
- package/sharing/AgentShareList.js +11 -3
- package/sharing/AgentShareList.js.map +1 -1
- package/sharing/ShareAgentDialog.js +1 -1
- package/sharing/useShareToolReadiness.d.ts +9 -38
- package/sharing/useShareToolReadiness.d.ts.map +1 -1
- package/sharing/useShareToolReadiness.js +7 -72
- package/sharing/useShareToolReadiness.js.map +1 -1
- package/src/agent-instance/AgentInstanceList.tsx +60 -42
- package/src/agent-instance/__tests__/AgentInstanceList.test.tsx +161 -0
- package/src/channel/AgentChannelsPanel.tsx +688 -0
- package/src/channel/ChannelConversationsDialog.tsx +267 -0
- package/src/channel/ChannelCredentialsDialog.tsx +219 -0
- package/src/channel/ChannelToolCredentials.tsx +124 -0
- package/src/channel/ConnectSlackDialog.tsx +611 -0
- package/src/channel/ConnectWhatsAppDialog.tsx +624 -0
- package/src/channel/SlackMarkIcon.tsx +21 -0
- package/src/channel/WhatsAppMarkIcon.tsx +22 -0
- package/src/channel/__tests__/AgentChannelsPanel.test.tsx +638 -0
- package/src/channel/__tests__/ChannelConversationsDialog.test.tsx +114 -0
- package/src/channel/__tests__/ChannelCredentialsDialog.test.tsx +240 -0
- package/src/channel/__tests__/ConnectSlackDialog.test.tsx +659 -0
- package/src/channel/__tests__/ConnectWhatsAppDialog.test.tsx +564 -0
- package/src/channel/__tests__/providers.test.ts +118 -0
- package/src/channel/__tests__/useAgentChannel.test.tsx +116 -0
- package/src/channel/__tests__/useAgentChannelList.test.tsx +166 -0
- package/src/channel/__tests__/useChannelSessions.test.tsx +95 -0
- package/src/channel/__tests__/useChannelToolReadiness.test.tsx +158 -0
- package/src/channel/__tests__/useConnectSlackChannel.test.tsx +276 -0
- package/src/channel/__tests__/useDeleteAgentChannel.test.tsx +97 -0
- package/src/channel/__tests__/useInstallChannel.test.tsx +177 -0
- package/src/channel/__tests__/useSaveAgentChannel.test.tsx +294 -0
- package/src/channel/connect/ServingAppSection.tsx +185 -0
- package/src/channel/connect/ToolCredentialsSection.tsx +67 -0
- package/src/channel/connect/VerbatimRefusal.tsx +27 -0
- package/src/channel/connect/icons.tsx +42 -0
- package/src/channel/index.ts +65 -0
- package/src/channel/providerPresentation.ts +154 -0
- package/src/channel/providers.ts +73 -0
- package/src/channel/useAgentChannel.ts +58 -0
- package/src/channel/useAgentChannelList.ts +69 -0
- package/src/channel/useChannelSessions.ts +73 -0
- package/src/channel/useChannelToolReadiness.ts +39 -0
- package/src/channel/useConnectSlackChannel.ts +195 -0
- package/src/channel/useCreateAgentChannel.ts +73 -0
- package/src/channel/useDeleteAgentChannel.ts +71 -0
- package/src/channel/useInstallChannel.ts +117 -0
- package/src/channel/useOrgAgentChannelList.ts +60 -0
- package/src/channel/useSaveAgentChannel.ts +133 -0
- package/src/channel-app/ChannelAppDetailPanel.tsx +510 -0
- package/src/channel-app/ChannelAppListPanel.tsx +201 -0
- package/src/channel-app/CreateChannelAppForm.tsx +529 -0
- package/src/channel-app/__tests__/channelAppWhatsApp.test.tsx +270 -0
- package/src/channel-app/__tests__/slackAppSetup.test.ts +75 -0
- package/src/channel-app/__tests__/useChannelAppHooks.test.tsx +157 -0
- package/src/channel-app/__tests__/whatsappAppSetup.test.ts +39 -0
- package/src/channel-app/index.ts +30 -0
- package/src/channel-app/internal.tsx +180 -0
- package/src/channel-app/slackAppSetup.ts +153 -0
- package/src/channel-app/useChannelAppList.ts +59 -0
- package/src/channel-app/useCreateChannelApp.ts +70 -0
- package/src/channel-app/useDeleteChannelApp.ts +62 -0
- package/src/channel-app/useUpdateChannelApp.ts +70 -0
- package/src/channel-app/whatsappAppSetup.ts +62 -0
- package/src/environment/index.ts +2 -0
- package/src/environment/useToolCredentialsReadiness.ts +122 -0
- package/src/execution/ArtifactContentBody.tsx +6 -88
- package/src/execution/ArtifactFileContent.tsx +110 -0
- package/src/execution/ArtifactRow.tsx +28 -118
- package/src/execution/ArtifactRowView.tsx +137 -0
- package/src/execution/FileChangesView.tsx +4 -69
- package/src/execution/SubAgentSection.tsx +2 -36
- package/src/execution/ToolCallItem.tsx +48 -175
- package/src/execution/__tests__/ArtifactFileContent.test.tsx +60 -0
- package/src/execution/__tests__/ArtifactRowView.test.tsx +78 -0
- package/src/execution/__tests__/agent-execution-document.test.ts +45 -0
- package/src/execution/__tests__/artifact-row-item.test.ts +128 -0
- package/src/execution/__tests__/deriveExecutionFileChanges.test.ts +270 -0
- package/src/execution/__tests__/useArtifactContentById.test.tsx +85 -0
- package/src/execution/__tests__/useLiveAgentExecution.test.tsx +202 -0
- package/src/execution/agent-execution-document.ts +54 -0
- package/src/execution/artifact-document.ts +24 -0
- package/src/execution/artifact-row-item.ts +97 -0
- package/src/execution/deriveExecutionFileChanges.ts +237 -0
- package/src/execution/file-change-document.ts +37 -0
- package/src/execution/index.ts +36 -0
- package/src/execution/useArtifactContentById.ts +120 -0
- package/src/execution/useArtifactDownload.ts +4 -3
- package/src/execution/useCreateAgentExecution.ts +1 -1
- package/src/execution/useLiveAgentExecution.ts +127 -0
- package/src/index.ts +155 -11
- package/src/internal/DecisionButton.tsx +4 -3
- package/src/internal/__tests__/ThreadCardShell.test.tsx +105 -0
- package/src/internal/__tests__/oauthPopup.test.ts +245 -0
- package/src/internal/oauthPopup.ts +261 -0
- package/src/internal/store/__tests__/workflow-execution-event-store.test.ts +375 -5
- package/src/internal/store/index.ts +0 -3
- package/src/internal/store/workflow-execution-event-store.ts +123 -4
- package/src/internal/store/workspace-file-selection-store.ts +2 -5
- package/src/internal/thread-card/ThreadCardShell.tsx +189 -0
- package/src/internal/thread-card/glyphs.tsx +108 -0
- package/src/internal/thread-card/index.ts +19 -0
- package/src/internal/useRevealLine.ts +2 -2
- package/src/mcp-server/OAuthCallbackHandler.tsx +2 -2
- package/src/mcp-server/useMcpServerOAuthConnect.ts +22 -184
- package/src/session/NewSessionViewer.tsx +0 -1
- package/src/session/SessionPanelChip.tsx +10 -96
- package/src/session/SessionViewer.tsx +170 -144
- package/src/session/__tests__/SessionViewer-artifactTabs.test.tsx +1 -1
- package/src/session/__tests__/observerAudience.test.tsx +241 -0
- package/src/session/__tests__/useNewSessionFlow.test.tsx +64 -0
- package/src/session/__tests__/usePersistedModel.test.tsx +36 -0
- package/src/session/__tests__/useSessionPageFlow.guest.test.tsx +48 -1
- package/src/session/__tests__/useSessionPanel.test.ts +6 -61
- package/src/session/__tests__/useSessionRailViews.test.tsx +5 -27
- package/src/session/audience.ts +15 -1
- package/src/session/channelOrigin.ts +45 -0
- package/src/session/facets/index.ts +0 -3
- package/src/session/index.ts +9 -6
- package/src/session/useNewSessionFlow.ts +35 -4
- package/src/session/usePersistedModel.ts +25 -3
- package/src/session/useSessionFileChanges.ts +12 -153
- package/src/session/useSessionPageFlow.ts +13 -2
- package/src/session/useSessionPanel.ts +8 -51
- package/src/session/useSessionRailViews.tsx +2 -27
- package/src/settings/ChannelAppsSection.tsx +133 -0
- package/src/settings/index.ts +1 -0
- package/src/settings/settings-nav.ts +6 -0
- package/src/sharing/AgentShareList.tsx +85 -64
- package/src/sharing/ShareAgentDialog.tsx +1 -1
- package/src/sharing/__tests__/AgentShareList.test.tsx +92 -12
- package/src/sharing/useShareToolReadiness.ts +13 -101
- package/src/workflow/WorkflowAgentExecutionDocument.tsx +283 -0
- package/src/workflow/WorkflowApprovalList.tsx +158 -0
- package/src/workflow/WorkflowArtifactDocument.tsx +257 -0
- package/src/workflow/WorkflowExecutionGraph.tsx +40 -78
- package/src/workflow/WorkflowExecutionViewer.tsx +610 -287
- package/src/workflow/WorkflowFileReviewList.tsx +1 -1
- package/src/workflow/WorkflowTaskApprovalCard.tsx +5 -4
- package/src/workflow/WorkflowTaskApprovalSummary.tsx +6 -6
- package/src/workflow/__tests__/WorkflowAgentExecutionDocument.test.tsx +651 -0
- package/src/workflow/__tests__/WorkflowApprovalList.test.tsx +229 -0
- package/src/workflow/__tests__/WorkflowArtifactDocument.test.tsx +90 -0
- package/src/workflow/__tests__/WorkflowArtifactsTab.test.tsx +85 -0
- package/src/workflow/__tests__/WorkflowChangesTab.test.tsx +113 -0
- package/src/workflow/__tests__/WorkflowExecutionViewer.approvals.test.tsx +473 -0
- package/src/workflow/__tests__/WorkflowExecutionViewer.reconciliation.test.tsx +632 -0
- package/src/workflow/__tests__/WorkflowTaskApprovalSummary.test.tsx +1 -1
- package/src/workflow/__tests__/WorkflowTaskThread.test.tsx +947 -0
- package/src/workflow/__tests__/WorkflowUsageTab.test.tsx +163 -0
- package/src/workflow/__tests__/agent-call-live-experience.test.ts +6 -53
- package/src/workflow/__tests__/derive-execution-overlays.test.ts +4 -0
- package/src/workflow/__tests__/deriveWorkflowArtifactItems.test.ts +71 -0
- package/src/workflow/__tests__/deriveWorkflowUsageItems.test.ts +132 -0
- package/src/workflow/__tests__/execution-graph.test.ts +8 -0
- package/src/workflow/__tests__/project-thread-items.test.ts +428 -0
- package/src/workflow/__tests__/structured-data-viewer.test.tsx +1 -1
- package/src/workflow/__tests__/task-approval.test.ts +149 -0
- package/src/workflow/__tests__/task-detail-io.test.ts +40 -0
- package/src/workflow/__tests__/task-presentation.test.ts +479 -0
- package/src/workflow/__tests__/useActiveTaskName.test.ts +4 -0
- package/src/workflow/__tests__/useApprovalBoundary.test.ts +158 -0
- package/src/workflow/__tests__/useExecutionAnnouncements.test.ts +4 -0
- package/src/workflow/__tests__/useFollowExecution.test.ts +2 -89
- package/src/workflow/__tests__/useWorkflowExecutionFileChanges.test.tsx +412 -0
- package/src/workflow/__tests__/useWorkflowExecutionPanel.test.ts +297 -0
- package/src/workflow/__tests__/useWorkflowExecutionRailViews.test.tsx +115 -0
- package/src/workflow/deriveWorkflowArtifactItems.ts +59 -0
- package/src/workflow/deriveWorkflowUsageItems.ts +73 -0
- package/src/workflow/diagnosis-document.ts +31 -0
- package/src/workflow/execution/index.ts +0 -15
- package/src/workflow/facets/WorkflowArtifactsTab.tsx +99 -0
- package/src/workflow/facets/WorkflowChangesTab.tsx +129 -0
- package/src/workflow/facets/WorkflowUsageTab.tsx +258 -0
- package/src/workflow/format-utils.ts +2 -3
- package/src/workflow/index.ts +106 -62
- package/src/workflow/inspector/index.ts +0 -4
- package/src/workflow/instance/WorkflowInstanceList.tsx +59 -41
- package/src/workflow/instance/__tests__/WorkflowInstanceList.test.tsx +156 -0
- package/src/workflow/task-detail/index.ts +11 -0
- package/src/workflow/task-detail/task-approval.ts +158 -0
- package/src/workflow/task-detail/task-detail-io.ts +65 -0
- package/src/workflow/thread/WorkflowTaskThread.tsx +845 -0
- package/src/workflow/thread/project-thread-items.ts +235 -0
- package/src/workflow/thread/task-presentation.ts +427 -0
- package/src/workflow/thread/thread-presentation.ts +59 -0
- package/src/workflow/thread/useWorkflowThreadItems.ts +34 -0
- package/src/workflow/useApprovalBoundary.ts +72 -0
- package/src/workflow/useFollowExecution.ts +0 -26
- package/src/workflow/useWorkflowArtifactDownload.ts +68 -0
- package/src/workflow/useWorkflowExecutionActions.ts +3 -2
- package/src/workflow/useWorkflowExecutionFileChanges.ts +341 -0
- package/src/workflow/useWorkflowExecutionGraph.ts +3 -43
- package/src/workflow/useWorkflowExecutionPanel.ts +292 -0
- package/src/workflow/useWorkflowExecutionRailViews.tsx +173 -0
- package/src/workspace/FileViewer.tsx +3 -3
- package/src/workspace/PanelChip.tsx +103 -0
- package/src/workspace/WorkspaceSurface.tsx +50 -6
- package/src/workspace/__tests__/WorkspaceSurface.test.tsx +110 -0
- package/src/workspace/index.ts +3 -0
- package/styles.css +1 -1
- package/workflow/WorkflowAgentExecutionDocument.d.ts +79 -0
- package/workflow/WorkflowAgentExecutionDocument.d.ts.map +1 -0
- package/workflow/WorkflowAgentExecutionDocument.js +87 -0
- package/workflow/WorkflowAgentExecutionDocument.js.map +1 -0
- package/workflow/WorkflowApprovalList.d.ts +62 -0
- package/workflow/WorkflowApprovalList.d.ts.map +1 -0
- package/workflow/WorkflowApprovalList.js +52 -0
- package/workflow/WorkflowApprovalList.js.map +1 -0
- package/workflow/WorkflowArtifactDocument.d.ts +29 -0
- package/workflow/WorkflowArtifactDocument.d.ts.map +1 -0
- package/workflow/WorkflowArtifactDocument.js +89 -0
- package/workflow/WorkflowArtifactDocument.js.map +1 -0
- package/workflow/WorkflowExecutionGraph.d.ts +15 -13
- package/workflow/WorkflowExecutionGraph.d.ts.map +1 -1
- package/workflow/WorkflowExecutionGraph.js +18 -53
- package/workflow/WorkflowExecutionGraph.js.map +1 -1
- package/workflow/WorkflowExecutionViewer.d.ts +8 -5
- package/workflow/WorkflowExecutionViewer.d.ts.map +1 -1
- package/workflow/WorkflowExecutionViewer.js +329 -54
- package/workflow/WorkflowExecutionViewer.js.map +1 -1
- package/workflow/WorkflowFileReviewList.d.ts +1 -1
- package/workflow/WorkflowFileReviewList.js +1 -1
- package/workflow/WorkflowTaskApprovalCard.d.ts +4 -3
- package/workflow/WorkflowTaskApprovalCard.d.ts.map +1 -1
- package/workflow/WorkflowTaskApprovalCard.js +5 -4
- package/workflow/WorkflowTaskApprovalCard.js.map +1 -1
- package/workflow/WorkflowTaskApprovalSummary.d.ts +6 -6
- package/workflow/WorkflowTaskApprovalSummary.js +5 -5
- package/workflow/deriveWorkflowArtifactItems.d.ts +30 -0
- package/workflow/deriveWorkflowArtifactItems.d.ts.map +1 -0
- package/workflow/deriveWorkflowArtifactItems.js +38 -0
- package/workflow/deriveWorkflowArtifactItems.js.map +1 -0
- package/workflow/deriveWorkflowUsageItems.d.ts +36 -0
- package/workflow/deriveWorkflowUsageItems.d.ts.map +1 -0
- package/workflow/deriveWorkflowUsageItems.js +50 -0
- package/workflow/deriveWorkflowUsageItems.js.map +1 -0
- package/workflow/diagnosis-document.d.ts +17 -0
- package/workflow/diagnosis-document.d.ts.map +1 -0
- package/workflow/diagnosis-document.js +29 -0
- package/workflow/diagnosis-document.js.map +1 -0
- package/workflow/execution/index.d.ts +0 -2
- package/workflow/execution/index.d.ts.map +1 -1
- package/workflow/execution/index.js +0 -2
- package/workflow/execution/index.js.map +1 -1
- package/workflow/facets/WorkflowArtifactsTab.d.ts +26 -0
- package/workflow/facets/WorkflowArtifactsTab.d.ts.map +1 -0
- package/workflow/facets/WorkflowArtifactsTab.js +34 -0
- package/workflow/facets/WorkflowArtifactsTab.js.map +1 -0
- package/workflow/facets/WorkflowChangesTab.d.ts +37 -0
- package/workflow/facets/WorkflowChangesTab.d.ts.map +1 -0
- package/workflow/facets/WorkflowChangesTab.js +50 -0
- package/workflow/facets/WorkflowChangesTab.js.map +1 -0
- package/workflow/facets/WorkflowUsageTab.d.ts +27 -0
- package/workflow/facets/WorkflowUsageTab.d.ts.map +1 -0
- package/workflow/facets/WorkflowUsageTab.js +87 -0
- package/workflow/facets/WorkflowUsageTab.js.map +1 -0
- package/workflow/format-utils.d.ts +2 -3
- package/workflow/format-utils.d.ts.map +1 -1
- package/workflow/format-utils.js +2 -3
- package/workflow/format-utils.js.map +1 -1
- package/workflow/index.d.ts +21 -10
- package/workflow/index.d.ts.map +1 -1
- package/workflow/index.js +29 -14
- package/workflow/index.js.map +1 -1
- package/workflow/inspector/index.d.ts +0 -2
- package/workflow/inspector/index.d.ts.map +1 -1
- package/workflow/inspector/index.js +0 -2
- package/workflow/inspector/index.js.map +1 -1
- package/workflow/instance/WorkflowInstanceList.d.ts.map +1 -1
- package/workflow/instance/WorkflowInstanceList.js +11 -3
- package/workflow/instance/WorkflowInstanceList.js.map +1 -1
- package/workflow/task-detail/StructuredDataViewer.d.ts.map +1 -0
- package/workflow/task-detail/StructuredDataViewer.js.map +1 -0
- package/workflow/task-detail/index.d.ts +4 -0
- package/workflow/task-detail/index.d.ts.map +1 -0
- package/workflow/task-detail/index.js +4 -0
- package/workflow/task-detail/index.js.map +1 -0
- package/workflow/task-detail/task-approval.d.ts +89 -0
- package/workflow/task-detail/task-approval.d.ts.map +1 -0
- package/workflow/task-detail/task-approval.js +84 -0
- package/workflow/task-detail/task-approval.js.map +1 -0
- package/workflow/task-detail/task-detail-io.d.ts +39 -0
- package/workflow/task-detail/task-detail-io.d.ts.map +1 -0
- package/workflow/task-detail/task-detail-io.js +42 -0
- package/workflow/task-detail/task-detail-io.js.map +1 -0
- package/workflow/thread/WorkflowTaskThread.d.ts +91 -0
- package/workflow/thread/WorkflowTaskThread.d.ts.map +1 -0
- package/workflow/thread/WorkflowTaskThread.js +318 -0
- package/workflow/thread/WorkflowTaskThread.js.map +1 -0
- package/workflow/thread/project-thread-items.d.ts +108 -0
- package/workflow/thread/project-thread-items.d.ts.map +1 -0
- package/workflow/thread/project-thread-items.js +126 -0
- package/workflow/thread/project-thread-items.js.map +1 -0
- package/workflow/thread/task-presentation.d.ts +73 -0
- package/workflow/thread/task-presentation.d.ts.map +1 -0
- package/workflow/thread/task-presentation.js +331 -0
- package/workflow/thread/task-presentation.js.map +1 -0
- package/workflow/thread/thread-presentation.d.ts +28 -0
- package/workflow/thread/thread-presentation.d.ts.map +1 -0
- package/workflow/thread/thread-presentation.js +28 -0
- package/workflow/thread/thread-presentation.js.map +1 -0
- package/workflow/thread/useWorkflowThreadItems.d.ts +16 -0
- package/workflow/thread/useWorkflowThreadItems.d.ts.map +1 -0
- package/workflow/thread/useWorkflowThreadItems.js +22 -0
- package/workflow/thread/useWorkflowThreadItems.js.map +1 -0
- package/workflow/useApprovalBoundary.d.ts +38 -0
- package/workflow/useApprovalBoundary.d.ts.map +1 -0
- package/workflow/useApprovalBoundary.js +55 -0
- package/workflow/useApprovalBoundary.js.map +1 -0
- package/workflow/useFollowExecution.d.ts +0 -20
- package/workflow/useFollowExecution.d.ts.map +1 -1
- package/workflow/useFollowExecution.js +0 -17
- package/workflow/useFollowExecution.js.map +1 -1
- package/workflow/useWorkflowArtifactDownload.d.ts +28 -0
- package/workflow/useWorkflowArtifactDownload.d.ts.map +1 -0
- package/workflow/useWorkflowArtifactDownload.js +45 -0
- package/workflow/useWorkflowArtifactDownload.js.map +1 -0
- package/workflow/useWorkflowExecutionActions.d.ts +3 -2
- package/workflow/useWorkflowExecutionActions.d.ts.map +1 -1
- package/workflow/useWorkflowExecutionActions.js.map +1 -1
- package/workflow/useWorkflowExecutionFileChanges.d.ts +107 -0
- package/workflow/useWorkflowExecutionFileChanges.d.ts.map +1 -0
- package/workflow/useWorkflowExecutionFileChanges.js +244 -0
- package/workflow/useWorkflowExecutionFileChanges.js.map +1 -0
- package/workflow/useWorkflowExecutionGraph.d.ts +1 -14
- package/workflow/useWorkflowExecutionGraph.d.ts.map +1 -1
- package/workflow/useWorkflowExecutionGraph.js +2 -25
- package/workflow/useWorkflowExecutionGraph.js.map +1 -1
- package/workflow/useWorkflowExecutionPanel.d.ts +108 -0
- package/workflow/useWorkflowExecutionPanel.d.ts.map +1 -0
- package/workflow/useWorkflowExecutionPanel.js +103 -0
- package/workflow/useWorkflowExecutionPanel.js.map +1 -0
- package/workflow/useWorkflowExecutionRailViews.d.ts +46 -0
- package/workflow/useWorkflowExecutionRailViews.d.ts.map +1 -0
- package/workflow/useWorkflowExecutionRailViews.js +81 -0
- package/workflow/useWorkflowExecutionRailViews.js.map +1 -0
- package/workspace/FileViewer.d.ts +1 -1
- package/workspace/FileViewer.js +3 -3
- package/workspace/FileViewer.js.map +1 -1
- package/workspace/PanelChip.d.ts +27 -0
- package/workspace/PanelChip.d.ts.map +1 -0
- package/workspace/PanelChip.js +42 -0
- package/workspace/PanelChip.js.map +1 -0
- package/workspace/WorkspaceSurface.d.ts +25 -1
- package/workspace/WorkspaceSurface.d.ts.map +1 -1
- package/workspace/WorkspaceSurface.js +21 -9
- package/workspace/WorkspaceSurface.js.map +1 -1
- package/workspace/index.d.ts +3 -1
- package/workspace/index.d.ts.map +1 -1
- package/workspace/index.js +1 -0
- package/workspace/index.js.map +1 -1
- package/execution/ThreadSelectionContext.d.ts +0 -17
- package/execution/ThreadSelectionContext.d.ts.map +0 -1
- package/execution/ThreadSelectionContext.js +0 -18
- package/execution/ThreadSelectionContext.js.map +0 -1
- package/execution/useThreadSelection.d.ts +0 -35
- package/execution/useThreadSelection.d.ts.map +0 -1
- package/execution/useThreadSelection.js +0 -65
- package/execution/useThreadSelection.js.map +0 -1
- package/internal/store/selection-store.d.ts +0 -53
- package/internal/store/selection-store.d.ts.map +0 -1
- package/internal/store/selection-store.js +0 -88
- package/internal/store/selection-store.js.map +0 -1
- package/session/artifact-document.d.ts.map +0 -1
- package/session/artifact-document.js +0 -22
- package/session/artifact-document.js.map +0 -1
- package/session/facets/InspectTab.d.ts +0 -13
- package/session/facets/InspectTab.d.ts.map +0 -1
- package/session/facets/InspectTab.js +0 -19
- package/session/facets/InspectTab.js.map +0 -1
- package/src/execution/ThreadSelectionContext.tsx +0 -20
- package/src/execution/useThreadSelection.ts +0 -95
- package/src/internal/store/__tests__/selection-store.test.ts +0 -115
- package/src/internal/store/selection-store.ts +0 -112
- package/src/session/artifact-document.ts +0 -23
- package/src/session/facets/InspectTab.tsx +0 -57
- package/src/workflow/WorkflowExecutionApprovalCard.tsx +0 -154
- package/src/workflow/WorkflowExecutionArtifactPanel.tsx +0 -107
- package/src/workflow/WorkflowExecutionCostPanel.tsx +0 -120
- package/src/workflow/WorkflowExecutionTaskPanel.tsx +0 -129
- package/src/workflow/WorkflowExecutionTimeline.tsx +0 -151
- package/src/workflow/WorkflowExecutionTimelineEvent.tsx +0 -497
- package/src/workflow/__tests__/ExecutionInspector.test.tsx +0 -155
- package/src/workflow/__tests__/WorkflowExecutionApprovalCard.test.tsx +0 -129
- package/src/workflow/__tests__/derive-task-detail.test.ts +0 -1265
- package/src/workflow/__tests__/derive-waterfall-entries.test.ts +0 -521
- package/src/workflow/__tests__/execution-inspector.test.tsx +0 -332
- package/src/workflow/execution/derive-waterfall-entries.ts +0 -377
- package/src/workflow/execution/useWaterfallEntries.ts +0 -125
- package/src/workflow/execution-inspector/AgentCallTab.tsx +0 -169
- package/src/workflow/execution-inspector/ErrorTab.tsx +0 -110
- package/src/workflow/execution-inspector/EventLogTab.tsx +0 -79
- package/src/workflow/execution-inspector/ExecutionInspector.tsx +0 -341
- package/src/workflow/execution-inspector/InputOutputTab.tsx +0 -325
- package/src/workflow/execution-inspector/RetriesTab.tsx +0 -68
- package/src/workflow/execution-inspector/SummaryTab.tsx +0 -62
- package/src/workflow/execution-inspector/derive-task-detail.ts +0 -584
- package/src/workflow/execution-inspector/index.ts +0 -14
- package/src/workflow/execution-inspector/useExecutionTaskDetail.ts +0 -55
- package/src/workflow/inspector/ExecutionInspectorAdapter.tsx +0 -40
- package/src/workflow/waterfall/WaterfallBar.tsx +0 -167
- package/src/workflow/waterfall/WaterfallRow.tsx +0 -112
- package/src/workflow/waterfall/WaterfallScale.tsx +0 -52
- package/src/workflow/waterfall/WaterfallTimeline.tsx +0 -138
- package/src/workflow/waterfall/WaterfallTooltip.tsx +0 -74
- package/src/workflow/waterfall/index.ts +0 -5
- package/workflow/WorkflowExecutionApprovalCard.d.ts +0 -34
- package/workflow/WorkflowExecutionApprovalCard.d.ts.map +0 -1
- package/workflow/WorkflowExecutionApprovalCard.js +0 -46
- package/workflow/WorkflowExecutionApprovalCard.js.map +0 -1
- package/workflow/WorkflowExecutionArtifactPanel.d.ts +0 -15
- package/workflow/WorkflowExecutionArtifactPanel.d.ts.map +0 -1
- package/workflow/WorkflowExecutionArtifactPanel.js +0 -46
- package/workflow/WorkflowExecutionArtifactPanel.js.map +0 -1
- package/workflow/WorkflowExecutionCostPanel.d.ts +0 -18
- package/workflow/WorkflowExecutionCostPanel.d.ts.map +0 -1
- package/workflow/WorkflowExecutionCostPanel.js +0 -31
- package/workflow/WorkflowExecutionCostPanel.js.map +0 -1
- package/workflow/WorkflowExecutionTaskPanel.d.ts +0 -24
- package/workflow/WorkflowExecutionTaskPanel.d.ts.map +0 -1
- package/workflow/WorkflowExecutionTaskPanel.js +0 -51
- package/workflow/WorkflowExecutionTaskPanel.js.map +0 -1
- package/workflow/WorkflowExecutionTimeline.d.ts +0 -42
- package/workflow/WorkflowExecutionTimeline.d.ts.map +0 -1
- package/workflow/WorkflowExecutionTimeline.js +0 -52
- package/workflow/WorkflowExecutionTimeline.js.map +0 -1
- package/workflow/WorkflowExecutionTimelineEvent.d.ts +0 -25
- package/workflow/WorkflowExecutionTimelineEvent.d.ts.map +0 -1
- package/workflow/WorkflowExecutionTimelineEvent.js +0 -179
- package/workflow/WorkflowExecutionTimelineEvent.js.map +0 -1
- package/workflow/execution/derive-waterfall-entries.d.ts +0 -85
- package/workflow/execution/derive-waterfall-entries.d.ts.map +0 -1
- package/workflow/execution/derive-waterfall-entries.js +0 -268
- package/workflow/execution/derive-waterfall-entries.js.map +0 -1
- package/workflow/execution/useWaterfallEntries.d.ts +0 -25
- package/workflow/execution/useWaterfallEntries.d.ts.map +0 -1
- package/workflow/execution/useWaterfallEntries.js +0 -67
- package/workflow/execution/useWaterfallEntries.js.map +0 -1
- package/workflow/execution-inspector/AgentCallTab.d.ts +0 -21
- package/workflow/execution-inspector/AgentCallTab.d.ts.map +0 -1
- package/workflow/execution-inspector/AgentCallTab.js +0 -36
- package/workflow/execution-inspector/AgentCallTab.js.map +0 -1
- package/workflow/execution-inspector/ErrorTab.d.ts +0 -9
- package/workflow/execution-inspector/ErrorTab.d.ts.map +0 -1
- package/workflow/execution-inspector/ErrorTab.js +0 -29
- package/workflow/execution-inspector/ErrorTab.js.map +0 -1
- package/workflow/execution-inspector/EventLogTab.d.ts +0 -11
- package/workflow/execution-inspector/EventLogTab.d.ts.map +0 -1
- package/workflow/execution-inspector/EventLogTab.js +0 -47
- package/workflow/execution-inspector/EventLogTab.js.map +0 -1
- package/workflow/execution-inspector/ExecutionInspector.d.ts +0 -69
- package/workflow/execution-inspector/ExecutionInspector.d.ts.map +0 -1
- package/workflow/execution-inspector/ExecutionInspector.js +0 -145
- package/workflow/execution-inspector/ExecutionInspector.js.map +0 -1
- package/workflow/execution-inspector/InputOutputTab.d.ts +0 -20
- package/workflow/execution-inspector/InputOutputTab.d.ts.map +0 -1
- package/workflow/execution-inspector/InputOutputTab.js +0 -124
- package/workflow/execution-inspector/InputOutputTab.js.map +0 -1
- package/workflow/execution-inspector/RetriesTab.d.ts +0 -7
- package/workflow/execution-inspector/RetriesTab.d.ts.map +0 -1
- package/workflow/execution-inspector/RetriesTab.js +0 -11
- package/workflow/execution-inspector/RetriesTab.js.map +0 -1
- package/workflow/execution-inspector/StructuredDataViewer.d.ts.map +0 -1
- package/workflow/execution-inspector/StructuredDataViewer.js.map +0 -1
- package/workflow/execution-inspector/SummaryTab.d.ts +0 -7
- package/workflow/execution-inspector/SummaryTab.d.ts.map +0 -1
- package/workflow/execution-inspector/SummaryTab.js +0 -10
- package/workflow/execution-inspector/SummaryTab.js.map +0 -1
- package/workflow/execution-inspector/derive-task-detail.d.ts +0 -140
- package/workflow/execution-inspector/derive-task-detail.d.ts.map +0 -1
- package/workflow/execution-inspector/derive-task-detail.js +0 -366
- package/workflow/execution-inspector/derive-task-detail.js.map +0 -1
- package/workflow/execution-inspector/index.d.ts +0 -4
- package/workflow/execution-inspector/index.d.ts.map +0 -1
- package/workflow/execution-inspector/index.js +0 -4
- package/workflow/execution-inspector/index.js.map +0 -1
- package/workflow/execution-inspector/useExecutionTaskDetail.d.ts +0 -38
- package/workflow/execution-inspector/useExecutionTaskDetail.d.ts.map +0 -1
- package/workflow/execution-inspector/useExecutionTaskDetail.js +0 -37
- package/workflow/execution-inspector/useExecutionTaskDetail.js.map +0 -1
- package/workflow/inspector/ExecutionInspectorAdapter.d.ts +0 -26
- package/workflow/inspector/ExecutionInspectorAdapter.d.ts.map +0 -1
- package/workflow/inspector/ExecutionInspectorAdapter.js +0 -23
- package/workflow/inspector/ExecutionInspectorAdapter.js.map +0 -1
- package/workflow/waterfall/WaterfallBar.d.ts +0 -19
- package/workflow/waterfall/WaterfallBar.d.ts.map +0 -1
- package/workflow/waterfall/WaterfallBar.js +0 -70
- package/workflow/waterfall/WaterfallBar.js.map +0 -1
- package/workflow/waterfall/WaterfallRow.d.ts +0 -18
- package/workflow/waterfall/WaterfallRow.d.ts.map +0 -1
- package/workflow/waterfall/WaterfallRow.js +0 -45
- package/workflow/waterfall/WaterfallRow.js.map +0 -1
- package/workflow/waterfall/WaterfallScale.d.ts +0 -14
- package/workflow/waterfall/WaterfallScale.d.ts.map +0 -1
- package/workflow/waterfall/WaterfallScale.js +0 -22
- package/workflow/waterfall/WaterfallScale.js.map +0 -1
- package/workflow/waterfall/WaterfallTimeline.d.ts +0 -46
- package/workflow/waterfall/WaterfallTimeline.d.ts.map +0 -1
- package/workflow/waterfall/WaterfallTimeline.js +0 -60
- package/workflow/waterfall/WaterfallTimeline.js.map +0 -1
- package/workflow/waterfall/WaterfallTooltip.d.ts +0 -15
- package/workflow/waterfall/WaterfallTooltip.d.ts.map +0 -1
- package/workflow/waterfall/WaterfallTooltip.js +0 -20
- package/workflow/waterfall/WaterfallTooltip.js.map +0 -1
- package/workflow/waterfall/index.d.ts +0 -6
- package/workflow/waterfall/index.d.ts.map +0 -1
- package/workflow/waterfall/index.js +0 -6
- package/workflow/waterfall/index.js.map +0 -1
- /package/src/workflow/{execution-inspector → task-detail}/StructuredDataViewer.tsx +0 -0
- /package/workflow/{execution-inspector → task-detail}/StructuredDataViewer.d.ts +0 -0
- /package/workflow/{execution-inspector → task-detail}/StructuredDataViewer.js +0 -0
|
@@ -3,27 +3,95 @@
|
|
|
3
3
|
import { memo, useCallback, useEffect, useMemo, useRef, useState, type ReactNode } from "react";
|
|
4
4
|
import { cn } from "@stigmer/theme";
|
|
5
5
|
import { WorkflowTaskStatus, ExecutionPhase } from "@stigmer/protos/ai/stigmer/agentic/workflowexecution/v1/enum_pb";
|
|
6
|
+
import type { WorkflowTask } from "@stigmer/protos/ai/stigmer/agentic/workflowexecution/v1/api_pb";
|
|
6
7
|
import { WorkflowTaskKind } from "@stigmer/protos/ai/stigmer/agentic/workflow/v1/enum_pb";
|
|
7
8
|
import { useWorkflowExecution } from "./useWorkflowExecution.js";
|
|
8
9
|
import { useWorkflowExecutionEventStream } from "./useWorkflowExecutionEventStream.js";
|
|
9
10
|
import { useWorkflowExecutionArtifacts } from "./useWorkflowExecutionArtifacts.js";
|
|
11
|
+
import {
|
|
12
|
+
useWorkflowExecutionFileChanges,
|
|
13
|
+
type UseWorkflowExecutionFileChangesReturn,
|
|
14
|
+
} from "./useWorkflowExecutionFileChanges.js";
|
|
10
15
|
import { useWorkflowExecutionActions } from "./useWorkflowExecutionActions.js";
|
|
11
16
|
import { WorkflowExecutionHeader } from "./WorkflowExecutionHeader.js";
|
|
12
|
-
import { WorkflowExecutionTimeline, type WorkflowExecutionTimelineProps } from "./WorkflowExecutionTimeline.js";
|
|
13
|
-
import { WaterfallTimeline } from "./waterfall/index.js";
|
|
14
|
-
import { WorkflowExecutionCostPanel } from "./WorkflowExecutionCostPanel.js";
|
|
15
|
-
import { WorkflowExecutionArtifactPanel } from "./WorkflowExecutionArtifactPanel.js";
|
|
16
17
|
import { WorkflowRepairCard } from "./WorkflowRepairCard.js";
|
|
17
18
|
import { WorkflowExecutionGraph } from "./WorkflowExecutionGraph.js";
|
|
18
|
-
import type { DerivedTaskState } from "../internal/store/workflow-execution-event-store.js";
|
|
19
|
-
import { ExecutionInspector } from "./execution-inspector/index.js";
|
|
19
|
+
import type { DerivedCostSummary, DerivedTaskState } from "../internal/store/workflow-execution-event-store.js";
|
|
20
20
|
import { ExecutionComparisonPicker } from "./execution-comparison/ExecutionComparisonPicker.js";
|
|
21
21
|
import { ExecutionComparisonView } from "./execution-comparison/ExecutionComparisonView.js";
|
|
22
|
-
import {
|
|
23
|
-
import { WorkflowFileReviewList, type WorkflowFileDecisionSubmit } from "./WorkflowFileReviewList.js";
|
|
24
|
-
import type { WorkflowPendingApproval, WorkflowPendingFileReview } from "@stigmer/protos/ai/stigmer/agentic/workflowexecution/v1/api_pb";
|
|
25
|
-
import type { ApprovalAction } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/enum_pb";
|
|
22
|
+
import type { Artifact } from "@stigmer/protos/ai/stigmer/agentic/artifact/v1/api_pb";
|
|
26
23
|
import { ResizableSplit } from "../internal/ResizableSplit.js";
|
|
24
|
+
import { useWorkspaceEditors } from "../internal/store/index.js";
|
|
25
|
+
import { ARTIFACT_DOCUMENT_ENTRY_ID } from "../execution/artifact-document.js";
|
|
26
|
+
import {
|
|
27
|
+
FILE_CHANGE_DOCUMENT_ENTRY_ID,
|
|
28
|
+
fileChangeTabPath,
|
|
29
|
+
} from "../execution/file-change-document.js";
|
|
30
|
+
import {
|
|
31
|
+
AGENT_EXECUTION_DOCUMENT_ENTRY_ID,
|
|
32
|
+
parseAgentExecutionTabPath,
|
|
33
|
+
} from "../execution/agent-execution-document.js";
|
|
34
|
+
import { FileChangeDiff } from "../execution/FileChangesView.js";
|
|
35
|
+
import {
|
|
36
|
+
WorkflowAgentExecutionDocument,
|
|
37
|
+
type WorkflowAgentExecutionHitl,
|
|
38
|
+
} from "./WorkflowAgentExecutionDocument.js";
|
|
39
|
+
import {
|
|
40
|
+
WorkspaceSurface,
|
|
41
|
+
type SurfaceVirtualDocument,
|
|
42
|
+
} from "../workspace/WorkspaceSurface.js";
|
|
43
|
+
import { PanelChip } from "../workspace/PanelChip.js";
|
|
44
|
+
import {
|
|
45
|
+
useWorkflowExecutionPanel,
|
|
46
|
+
workflowArtifactTabPath,
|
|
47
|
+
type WorkflowExecutionPanelController,
|
|
48
|
+
} from "./useWorkflowExecutionPanel.js";
|
|
49
|
+
import { useWorkflowExecutionRailViews } from "./useWorkflowExecutionRailViews.js";
|
|
50
|
+
import {
|
|
51
|
+
DIAGNOSIS_DOCUMENT_ENTRY_ID,
|
|
52
|
+
DIAGNOSIS_DOCUMENT_PATH,
|
|
53
|
+
} from "./diagnosis-document.js";
|
|
54
|
+
import { WorkflowArtifactDocument } from "./WorkflowArtifactDocument.js";
|
|
55
|
+
import {
|
|
56
|
+
WorkflowTaskThread,
|
|
57
|
+
type WorkflowThreadHitl,
|
|
58
|
+
} from "./thread/WorkflowTaskThread.js";
|
|
59
|
+
import { useExecutionAnnouncements } from "./useExecutionAnnouncements.js";
|
|
60
|
+
import {
|
|
61
|
+
useApprovalBoundary,
|
|
62
|
+
type ApprovalBoundaryCrossing,
|
|
63
|
+
} from "./useApprovalBoundary.js";
|
|
64
|
+
|
|
65
|
+
// ---------------------------------------------------------------------------
|
|
66
|
+
// Center-column view (S9: Thread | Graph toggle; Thread is the default)
|
|
67
|
+
// ---------------------------------------------------------------------------
|
|
68
|
+
|
|
69
|
+
/** The center-column view of the execution viewer. */
|
|
70
|
+
type CenterView = "thread" | "graph";
|
|
71
|
+
|
|
72
|
+
// Versioned key (S9). The unversioned S8 key is deliberately ABANDONED, not
|
|
73
|
+
// migrated: S8 shipped the thread as an opt-in preview with Graph as the
|
|
74
|
+
// default, so a stored S8 value records exploration of that preview — not a
|
|
75
|
+
// deliberate preference against the thread-primary product direction. The
|
|
76
|
+
// version bump gives every user one fresh landing on the new default;
|
|
77
|
+
// choices made from there persist.
|
|
78
|
+
const CENTER_VIEW_STORAGE_KEY = "stgm-wf-exec-center-view.v2";
|
|
79
|
+
const LEGACY_CENTER_VIEW_STORAGE_KEY = "stgm-wf-exec-center-view";
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Read the persisted center view, defaulting to the thread (the T02
|
|
83
|
+
* thread-primary pivot). Same lazy-`useState` + `localStorage` pattern as
|
|
84
|
+
* `ResizableSplit`'s persisted width.
|
|
85
|
+
*/
|
|
86
|
+
function readStoredCenterView(): CenterView {
|
|
87
|
+
try {
|
|
88
|
+
const stored = localStorage.getItem(CENTER_VIEW_STORAGE_KEY);
|
|
89
|
+
if (stored === "thread" || stored === "graph") return stored;
|
|
90
|
+
} catch {
|
|
91
|
+
/* localStorage may be unavailable */
|
|
92
|
+
}
|
|
93
|
+
return "thread";
|
|
94
|
+
}
|
|
27
95
|
|
|
28
96
|
/** Props for {@link WorkflowExecutionViewer}. */
|
|
29
97
|
export interface WorkflowExecutionViewerProps {
|
|
@@ -43,8 +111,6 @@ export interface WorkflowExecutionViewerProps {
|
|
|
43
111
|
* application handles navigation to the workflow editor (DD-004).
|
|
44
112
|
*/
|
|
45
113
|
readonly onNavigateToWorkflowEditor?: (yaml: string, workflowSlug: string) => void;
|
|
46
|
-
/** Additional action elements to render in the sidebar inspector footer. */
|
|
47
|
-
readonly additionalActions?: ReactNode;
|
|
48
114
|
/**
|
|
49
115
|
* Host-supplied action elements rendered in the header action group
|
|
50
116
|
* (e.g. a Share control). Routing/auth-agnostic per DD-004.
|
|
@@ -64,9 +130,14 @@ export interface WorkflowExecutionViewerProps {
|
|
|
64
130
|
/**
|
|
65
131
|
* Top-level composed viewer for a single workflow execution.
|
|
66
132
|
*
|
|
67
|
-
* Wires together all execution hooks and sub-components into a
|
|
68
|
-
*
|
|
69
|
-
*
|
|
133
|
+
* Wires together all execution hooks and sub-components into a two-column
|
|
134
|
+
* layout: the center column (the session-style task thread by default, with
|
|
135
|
+
* the DAG graph behind a view toggle — a passive visualization) and a single
|
|
136
|
+
* collapsible `WorkspaceSurface` panel carrying the execution-level facets
|
|
137
|
+
* (Artifacts/Changes/Usage on the rail) and the rich documents (transcripts,
|
|
138
|
+
* diffs, artifacts, AI diagnosis in the editor area). A task's detail —
|
|
139
|
+
* preview, I/O, errors, and every HITL decision surface — lives on its
|
|
140
|
+
* thread card, the single home for task data (T06).
|
|
70
141
|
*
|
|
71
142
|
* This component is designed to work identically whether rendered
|
|
72
143
|
* in the Stigmer Console or embedded in a third-party dashboard.
|
|
@@ -85,7 +156,6 @@ export const WorkflowExecutionViewer = memo(function WorkflowExecutionViewer({
|
|
|
85
156
|
org,
|
|
86
157
|
onNavigateToAgentExecution,
|
|
87
158
|
onNavigateToWorkflowEditor,
|
|
88
|
-
additionalActions,
|
|
89
159
|
headerActions,
|
|
90
160
|
nodesDraggable,
|
|
91
161
|
className,
|
|
@@ -165,6 +235,14 @@ export const WorkflowExecutionViewer = memo(function WorkflowExecutionViewer({
|
|
|
165
235
|
currentToolName: "",
|
|
166
236
|
messagesCount: 0,
|
|
167
237
|
toolCallsCount: 0,
|
|
238
|
+
// No event log → no truncated summaries and no gate record. The
|
|
239
|
+
// card body still renders full I/O from this same snapshot
|
|
240
|
+
// (`status.tasks[]`), so the fallback path is never a blank card
|
|
241
|
+
// (T04); a decided human_input degrades to its raw output there.
|
|
242
|
+
inputSummary: null,
|
|
243
|
+
outputSummary: null,
|
|
244
|
+
approvalRequest: null,
|
|
245
|
+
approvalResolution: null,
|
|
168
246
|
});
|
|
169
247
|
}
|
|
170
248
|
return map;
|
|
@@ -173,37 +251,160 @@ export const WorkflowExecutionViewer = memo(function WorkflowExecutionViewer({
|
|
|
173
251
|
const effectiveTaskStates = fallbackTaskStates ?? taskStates;
|
|
174
252
|
const effectiveTotalTasks = fallbackTaskStates ? fallbackTaskStates.size : totalTasks;
|
|
175
253
|
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
254
|
+
// Per-task snapshot lookup for the thread cards' I/O bodies (T04): an
|
|
255
|
+
// O(1) map, rebuilt only when the snapshot refetches — never on stream
|
|
256
|
+
// event appends — so memoized cards keep bailing during streaming.
|
|
257
|
+
const taskSnapshotsByName = useMemo(():
|
|
258
|
+
| ReadonlyMap<string, WorkflowTask>
|
|
259
|
+
| undefined => {
|
|
260
|
+
const tasks = execution?.status?.tasks;
|
|
261
|
+
if (!tasks || tasks.length === 0) return undefined;
|
|
262
|
+
const map = new Map<string, WorkflowTask>();
|
|
263
|
+
for (const t of tasks) {
|
|
264
|
+
if (t.taskName) map.set(t.taskName, t);
|
|
181
265
|
}
|
|
182
|
-
return
|
|
183
|
-
}, [execution?.status?.
|
|
266
|
+
return map;
|
|
267
|
+
}, [execution?.status?.tasks]);
|
|
184
268
|
|
|
185
|
-
const {
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
269
|
+
const { artifacts } = useWorkflowExecutionArtifacts(executionId);
|
|
270
|
+
|
|
271
|
+
// File-change rollup across AGENT_CALL children (Changes facet). Owner-level
|
|
272
|
+
// like the artifacts hook — the fetched children must survive panel
|
|
273
|
+
// collapse/expand cycles (the panel's content unmounts while collapsed).
|
|
274
|
+
const fileChangesState = useWorkflowExecutionFileChanges({
|
|
275
|
+
executionId,
|
|
276
|
+
taskStates: effectiveTaskStates,
|
|
277
|
+
taskSnapshots: execution?.status?.tasks,
|
|
278
|
+
});
|
|
189
279
|
|
|
190
280
|
const actions = useWorkflowExecutionActions(executionId, {
|
|
191
281
|
onSuccess: refetchExecution,
|
|
192
282
|
});
|
|
193
283
|
|
|
194
|
-
|
|
195
|
-
|
|
284
|
+
// The child-gate HITL wiring — ONE bundle from the single actions
|
|
285
|
+
// instance, narrowed to the six child-gate fields, consumed by the
|
|
286
|
+
// in-place transcript documents (S5, as `WorkflowAgentExecutionHitl`), so
|
|
287
|
+
// a gate's spinner/error is pixel-identical on every surface. Deps are
|
|
288
|
+
// the individual fields (DD-010): the bundle's ref must survive unrelated
|
|
289
|
+
// churn on `actions` (a lifecycle action's isSubmitting flip), so
|
|
290
|
+
// consumers re-render only when a gate's own in-flight/error state moves.
|
|
291
|
+
const childGateHitl = useMemo<WorkflowAgentExecutionHitl>(
|
|
292
|
+
() => ({
|
|
293
|
+
submitApproval: actions.submitApproval,
|
|
294
|
+
approvalSubmittingToolCallIds: actions.approvalSubmittingToolCallIds,
|
|
295
|
+
approvalErrorsByToolCallId: actions.approvalErrorsByToolCallId,
|
|
296
|
+
submitFileDecision: actions.submitFileDecision,
|
|
297
|
+
fileDecisionSubmittingKeys: actions.fileDecisionSubmittingKeys,
|
|
298
|
+
fileDecisionErrorsByKey: actions.fileDecisionErrorsByKey,
|
|
299
|
+
}),
|
|
300
|
+
[
|
|
301
|
+
actions.submitApproval,
|
|
302
|
+
actions.approvalSubmittingToolCallIds,
|
|
303
|
+
actions.approvalErrorsByToolCallId,
|
|
304
|
+
actions.submitFileDecision,
|
|
305
|
+
actions.fileDecisionSubmittingKeys,
|
|
306
|
+
actions.fileDecisionErrorsByKey,
|
|
307
|
+
],
|
|
308
|
+
);
|
|
309
|
+
|
|
310
|
+
// The thread's HITL bundle (T06): the child-gate fields PLUS the
|
|
311
|
+
// task-level (human_input) approval wiring — since the gating card is
|
|
312
|
+
// the only decision surface, the thread carries all three gate kinds.
|
|
313
|
+
// A separate memo from `childGateHitl` so a human_input decision's
|
|
314
|
+
// in-flight flip re-renders the gating card, never the open transcript
|
|
315
|
+
// documents (DD-010).
|
|
316
|
+
const threadHitl = useMemo<WorkflowThreadHitl>(
|
|
317
|
+
() => ({
|
|
318
|
+
...childGateHitl,
|
|
319
|
+
submitTaskApproval: actions.submitTaskApproval,
|
|
320
|
+
taskApprovalSubmittingTaskNames: actions.taskApprovalSubmittingTaskNames,
|
|
321
|
+
taskApprovalErrorsByTaskName: actions.taskApprovalErrorsByTaskName,
|
|
322
|
+
}),
|
|
323
|
+
[
|
|
324
|
+
childGateHitl,
|
|
325
|
+
actions.submitTaskApproval,
|
|
326
|
+
actions.taskApprovalSubmittingTaskNames,
|
|
327
|
+
actions.taskApprovalErrorsByTaskName,
|
|
328
|
+
],
|
|
329
|
+
);
|
|
330
|
+
|
|
331
|
+
// The execution-level workspace panel (facets + virtual document
|
|
332
|
+
// tabs). The controller lives at the owner level — the editors-store
|
|
333
|
+
// SUBSCRIPTION stays inside ExecutionWorkspacePanel so tab churn re-renders
|
|
334
|
+
// only the panel subtree, never the streaming graph (DD-009/DD-010).
|
|
335
|
+
const panel = useWorkflowExecutionPanel();
|
|
336
|
+
|
|
196
337
|
const [showComparePicker, setShowComparePicker] = useState(false);
|
|
197
338
|
const [compareTargetId, setCompareTargetId] = useState<string | null>(null);
|
|
198
339
|
|
|
199
|
-
|
|
200
|
-
|
|
340
|
+
// Center-column view (S8/S9). Both views stay mounted with the inactive
|
|
341
|
+
// one CSS-hidden — the `collapsedPane` discipline — so toggling never
|
|
342
|
+
// remounts React Flow or drops the event stream (DD-009).
|
|
343
|
+
const [centerView, setCenterView] = useState<CenterView>(readStoredCenterView);
|
|
344
|
+
const handleCenterViewChange = useCallback((view: CenterView) => {
|
|
345
|
+
setCenterView(view);
|
|
346
|
+
try {
|
|
347
|
+
localStorage.setItem(CENTER_VIEW_STORAGE_KEY, view);
|
|
348
|
+
} catch {
|
|
349
|
+
/* quota or security error */
|
|
350
|
+
}
|
|
201
351
|
}, []);
|
|
202
352
|
|
|
203
|
-
|
|
204
|
-
|
|
353
|
+
// One-time cleanup of the abandoned S8 key (an effect, not the read path —
|
|
354
|
+
// reads must stay side-effect-free).
|
|
355
|
+
useEffect(() => {
|
|
356
|
+
try {
|
|
357
|
+
localStorage.removeItem(LEGACY_CENTER_VIEW_STORAGE_KEY);
|
|
358
|
+
} catch {
|
|
359
|
+
/* localStorage may be unavailable */
|
|
360
|
+
}
|
|
205
361
|
}, []);
|
|
206
362
|
|
|
363
|
+
// Screen reader announcements for task state changes. Owned by the viewer
|
|
364
|
+
// (not the graph): `display:none` removes content from the accessibility
|
|
365
|
+
// tree, so a live region inside the CSS-hidden graph would go silent in
|
|
366
|
+
// Thread view. One always-visible announcer serves both center views.
|
|
367
|
+
const announcement = useExecutionAnnouncements(effectiveTaskStates);
|
|
368
|
+
|
|
369
|
+
// Terminal-phase snapshot refetch (T04, DD-T04-4). While a run streams,
|
|
370
|
+
// the cards' collapsed lines and bodies work from the TRUNCATED event
|
|
371
|
+
// summaries; the full per-task output lands on `status.tasks[]` only when
|
|
372
|
+
// the runner persists the terminal snapshot. The stream store's stage is
|
|
373
|
+
// the live end-of-run signal (`"complete"` on the terminal event) — the
|
|
374
|
+
// snapshot's own `phase` cannot be the trigger, since it only moves on a
|
|
375
|
+
// refetch (the circularity behind the stale "Pending" header, R1-5).
|
|
376
|
+
// Scoped to the live→complete TRANSITION: a terminal-replay mount starts
|
|
377
|
+
// at "complete" without ever streaming and already fetched a settled
|
|
378
|
+
// snapshot, so it must not refetch again.
|
|
379
|
+
const prevStreamStageRef = useRef(streamState.stage);
|
|
380
|
+
useEffect(() => {
|
|
381
|
+
const prev = prevStreamStageRef.current;
|
|
382
|
+
prevStreamStageRef.current = streamState.stage;
|
|
383
|
+
if (
|
|
384
|
+
streamState.stage === "complete" &&
|
|
385
|
+
(prev === "streaming" || prev === "reconnecting")
|
|
386
|
+
) {
|
|
387
|
+
refetchExecution();
|
|
388
|
+
}
|
|
389
|
+
}, [streamState.stage, refetchExecution]);
|
|
390
|
+
|
|
391
|
+
// Snapshot freshness across HITL boundaries (S9, the drawer's
|
|
392
|
+
// replacement). A `waiting_approval` boundary crossing — in EITHER
|
|
393
|
+
// direction — means the mount snapshot's gate lists are stale → refetch
|
|
394
|
+
// (stale-while-revalidate; no skeleton): the thread's in-card gates read
|
|
395
|
+
// those lists. No auto-select accompanies it (T06 — selection is gone):
|
|
396
|
+
// the gating card is amber, carries its decision surface, and the aria
|
|
397
|
+
// announcer + auto-follow + jump-to-latest cover attention. Gated on
|
|
398
|
+
// `isRunning` so terminal-execution history replay (which crosses the
|
|
399
|
+
// boundary for long-decided gates) never refetches.
|
|
400
|
+
const handleApprovalBoundary = useCallback(
|
|
401
|
+
(_crossing: ApprovalBoundaryCrossing) => {
|
|
402
|
+
refetchExecution();
|
|
403
|
+
},
|
|
404
|
+
[refetchExecution],
|
|
405
|
+
);
|
|
406
|
+
useApprovalBoundary(effectiveTaskStates, isRunning, handleApprovalBoundary);
|
|
407
|
+
|
|
207
408
|
const handleOpenComparePicker = useCallback(() => {
|
|
208
409
|
setShowComparePicker(true);
|
|
209
410
|
}, []);
|
|
@@ -272,10 +473,26 @@ export const WorkflowExecutionViewer = memo(function WorkflowExecutionViewer({
|
|
|
272
473
|
streamState={streamState}
|
|
273
474
|
costSummary={costSummary}
|
|
274
475
|
actions={actions}
|
|
275
|
-
|
|
276
|
-
|
|
476
|
+
// Diagnose opens (or focuses) the singleton diagnosis document tab —
|
|
477
|
+
// the tab itself is the "diagnosis is active" state, so there is no
|
|
478
|
+
// owner-level isDiagnosing boolean to keep in sync (SSOT).
|
|
479
|
+
onDiagnose={org ? panel.openDiagnosis : undefined}
|
|
277
480
|
onCompare={handleOpenComparePicker}
|
|
278
|
-
headerActions={
|
|
481
|
+
headerActions={
|
|
482
|
+
<>
|
|
483
|
+
{headerActions}
|
|
484
|
+
{/* The panel's always-mounted toggle — always-on now that the
|
|
485
|
+
Usage facet gives the panel data-independent content (its
|
|
486
|
+
empty state is honest even before any usage accrues). The
|
|
487
|
+
badge stays the artifact count: artifacts are countable
|
|
488
|
+
collateral, usage is a continuous quantity. */}
|
|
489
|
+
<PanelChip
|
|
490
|
+
isOpen={panel.isOpen}
|
|
491
|
+
onToggle={panel.isOpen ? panel.closePanel : panel.openPanel}
|
|
492
|
+
badgeCount={artifacts.length}
|
|
493
|
+
/>
|
|
494
|
+
</>
|
|
495
|
+
}
|
|
279
496
|
/>
|
|
280
497
|
|
|
281
498
|
{/* Comparison picker dialog */}
|
|
@@ -329,102 +546,340 @@ export const WorkflowExecutionViewer = memo(function WorkflowExecutionViewer({
|
|
|
329
546
|
</div>
|
|
330
547
|
)}
|
|
331
548
|
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
549
|
+
{/* Outer split: the graph-dominant content vs. the execution workspace
|
|
550
|
+
panel. Toggling goes through `collapsedPane` (CSS, not conditional
|
|
551
|
+
structure) so both children keep stable tree positions and an
|
|
552
|
+
open/close never remounts the React Flow graph or reconnects the
|
|
553
|
+
event stream (DD-009) — the same invariant the session viewer's
|
|
554
|
+
panel split holds for its conversation. */}
|
|
555
|
+
<ResizableSplit
|
|
556
|
+
resizablePane="secondary"
|
|
557
|
+
collapsedPane={panel.isOpen ? "none" : "secondary"}
|
|
558
|
+
defaultSize={560}
|
|
559
|
+
minSize={360}
|
|
560
|
+
maxSize={960}
|
|
561
|
+
storageKey="stgm-wf-exec-panel-width"
|
|
562
|
+
ariaLabel="Resize execution panel"
|
|
563
|
+
className="min-h-0 flex-1"
|
|
564
|
+
primary={
|
|
565
|
+
<div className="flex h-full min-h-0 flex-1 flex-col">
|
|
566
|
+
{/* Center-column view switcher (S8). Graph is the default; the
|
|
567
|
+
thread is the session-style card-per-task view (T02 pivot). */}
|
|
568
|
+
<CenterViewSwitcher view={centerView} onChange={handleCenterViewChange} />
|
|
569
|
+
|
|
570
|
+
{/* One always-visible live region for task state changes — see the
|
|
571
|
+
ownership note on `announcement` above. */}
|
|
572
|
+
<div role="log" aria-live="polite" aria-atomic="false" className="sr-only">
|
|
573
|
+
{announcement}
|
|
574
|
+
</div>
|
|
575
|
+
|
|
576
|
+
{/* Primary area: thread and graph, both mounted, inactive one
|
|
577
|
+
CSS-hidden (stable tree positions — no React Flow remount, no
|
|
578
|
+
stream reconnect, expanded cards survive a toggle). The thread
|
|
579
|
+
card is the single home for a task's detail (T06); the graph is
|
|
580
|
+
a passive topology visualization. */}
|
|
581
|
+
<div
|
|
582
|
+
data-center-view="thread"
|
|
583
|
+
className={cn("min-h-0 flex-1", centerView !== "thread" && "hidden")}
|
|
584
|
+
>
|
|
585
|
+
<WorkflowTaskThread
|
|
586
|
+
taskStates={effectiveTaskStates}
|
|
587
|
+
totalTasks={effectiveTotalTasks}
|
|
588
|
+
isRunning={isRunning}
|
|
589
|
+
onOpenAgentExecution={panel.openAgentExecution}
|
|
590
|
+
// In-card HITL (S10/T06): all three gate kinds decide on the
|
|
591
|
+
// gating card, backed by the snapshot gate lists (kept fresh
|
|
592
|
+
// by the approval boundary's refetch above).
|
|
593
|
+
hitl={threadHitl}
|
|
594
|
+
pendingApprovals={execution?.status?.pendingApprovals}
|
|
595
|
+
pendingFileReviews={execution?.status?.pendingFileReviews}
|
|
596
|
+
// Full per-task I/O for the card bodies (T04) — an O(1)
|
|
597
|
+
// per-card snapshot lookup.
|
|
598
|
+
taskSnapshotsByName={taskSnapshotsByName}
|
|
599
|
+
className="h-full"
|
|
600
|
+
/>
|
|
601
|
+
</div>
|
|
602
|
+
<div
|
|
603
|
+
data-center-view="graph"
|
|
604
|
+
className={cn("min-h-0 flex-1", centerView !== "graph" && "hidden")}
|
|
605
|
+
>
|
|
606
|
+
<WorkflowExecutionGraph
|
|
607
|
+
executionId={executionId}
|
|
608
|
+
execution={execution}
|
|
609
|
+
taskStates={effectiveTaskStates}
|
|
610
|
+
// Gated on the graph being visible: camera moves against a
|
|
611
|
+
// display:none (zero-size) viewport are degenerate.
|
|
612
|
+
followExecution={isRunning && centerView === "graph"}
|
|
613
|
+
// The viewer owns the one always-visible announcer above; the
|
|
614
|
+
// graph's own would go silent while CSS-hidden in Thread view.
|
|
615
|
+
announceTaskStates={false}
|
|
616
|
+
nodesDraggable={nodesDraggable}
|
|
617
|
+
className="h-full"
|
|
618
|
+
/>
|
|
619
|
+
</div>
|
|
620
|
+
</div>
|
|
621
|
+
}
|
|
622
|
+
secondary={
|
|
623
|
+
// Content unmounts while collapsed (matching the session panel
|
|
624
|
+
// region); the editors store lives on the controller, so open tabs
|
|
625
|
+
// survive a collapse/expand cycle.
|
|
626
|
+
panel.isOpen ? (
|
|
627
|
+
<ExecutionWorkspacePanel
|
|
628
|
+
panel={panel}
|
|
341
629
|
executionId={executionId}
|
|
342
|
-
|
|
630
|
+
org={org}
|
|
631
|
+
artifacts={artifacts}
|
|
632
|
+
fileChangesState={fileChangesState}
|
|
633
|
+
costSummary={costSummary}
|
|
343
634
|
taskStates={effectiveTaskStates}
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
nodesDraggable={nodesDraggable}
|
|
348
|
-
className="h-full"
|
|
635
|
+
onNavigateToAgentExecution={onNavigateToAgentExecution}
|
|
636
|
+
onApplyFix={onNavigateToWorkflowEditor ? handleApplyFix : undefined}
|
|
637
|
+
transcriptHitl={childGateHitl}
|
|
349
638
|
/>
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
639
|
+
) : null
|
|
640
|
+
}
|
|
641
|
+
/>
|
|
642
|
+
</>
|
|
643
|
+
)}
|
|
644
|
+
</div>
|
|
645
|
+
);
|
|
646
|
+
});
|
|
647
|
+
|
|
648
|
+
// ---------------------------------------------------------------------------
|
|
649
|
+
// Execution workspace panel — WorkspaceSurface + facets (Artifacts/Changes/Usage)
|
|
650
|
+
// ---------------------------------------------------------------------------
|
|
651
|
+
|
|
652
|
+
/**
|
|
653
|
+
* The workflow analog of the session viewer's panel region: subscribes to the
|
|
654
|
+
* open-editor group (keeping that subscription out of the streaming owner),
|
|
655
|
+
* assembles the rail facets, and resolves open virtual-document tabs back to
|
|
656
|
+
* their records (artifact tabs → `Artifact`, file-change tabs → the current
|
|
657
|
+
* net `FileChange`, transcript tabs → their child id, the diagnosis tab →
|
|
658
|
+
* `WorkflowRepairCard`).
|
|
659
|
+
*/
|
|
660
|
+
function ExecutionWorkspacePanel({
|
|
661
|
+
panel,
|
|
662
|
+
executionId,
|
|
663
|
+
org,
|
|
664
|
+
artifacts,
|
|
665
|
+
fileChangesState,
|
|
666
|
+
costSummary,
|
|
667
|
+
taskStates,
|
|
668
|
+
onNavigateToAgentExecution,
|
|
669
|
+
onApplyFix,
|
|
670
|
+
transcriptHitl,
|
|
671
|
+
}: {
|
|
672
|
+
readonly panel: WorkflowExecutionPanelController;
|
|
673
|
+
readonly executionId: string;
|
|
674
|
+
readonly org?: string;
|
|
675
|
+
readonly artifacts: readonly Artifact[];
|
|
676
|
+
readonly fileChangesState: UseWorkflowExecutionFileChangesReturn;
|
|
677
|
+
readonly costSummary: DerivedCostSummary;
|
|
678
|
+
readonly taskStates: ReadonlyMap<string, DerivedTaskState>;
|
|
679
|
+
readonly onNavigateToAgentExecution?: (agentExecutionId: string) => void;
|
|
680
|
+
/** "Apply Fix" from the diagnosis document — host-routed (DD-004). */
|
|
681
|
+
readonly onApplyFix?: (yaml: string) => void;
|
|
682
|
+
/** Workflow-level HITL wiring for open transcript documents (S5). */
|
|
683
|
+
readonly transcriptHitl: WorkflowAgentExecutionHitl;
|
|
684
|
+
}) {
|
|
685
|
+
const { editors, activeFile } = useWorkspaceEditors(panel.editorsStore);
|
|
686
|
+
|
|
687
|
+
// The Changes list highlights the row of the open diff tab — only a
|
|
688
|
+
// file-change document's path counts (an artifact tab must not highlight a
|
|
689
|
+
// coincidentally-named change).
|
|
690
|
+
const activeFileChangePath =
|
|
691
|
+
activeFile?.entryId === FILE_CHANGE_DOCUMENT_ENTRY_ID
|
|
692
|
+
? activeFile.path
|
|
693
|
+
: null;
|
|
694
|
+
|
|
695
|
+
const railViews = useWorkflowExecutionRailViews({
|
|
696
|
+
artifacts,
|
|
697
|
+
onOpenArtifact: panel.openArtifact,
|
|
698
|
+
onActivateArtifact: panel.pinArtifact,
|
|
699
|
+
fileChanges: fileChangesState.fileChanges,
|
|
700
|
+
fileChangesLoading: fileChangesState.isLoading,
|
|
701
|
+
fileChangesRefetching: fileChangesState.isRefetching,
|
|
702
|
+
fileChangesError: fileChangesState.error,
|
|
703
|
+
activeFileChangePath,
|
|
704
|
+
onOpenFileChange: panel.openFileChange,
|
|
705
|
+
costSummary,
|
|
706
|
+
taskStates,
|
|
707
|
+
});
|
|
708
|
+
|
|
709
|
+
// Resolve open artifact tabs to their records by the same tab-path identity
|
|
710
|
+
// used to open them (single source of truth). A tab whose artifact vanished
|
|
711
|
+
// (e.g. expired and dropped from a refetch) degrades to an honest notice
|
|
712
|
+
// rather than vanishing.
|
|
713
|
+
const artifactByTabPath = useMemo(
|
|
714
|
+
() => new Map(artifacts.map((a) => [workflowArtifactTabPath(a), a])),
|
|
715
|
+
[artifacts],
|
|
716
|
+
);
|
|
717
|
+
// File-change tabs resolve the same way: tab path → net FileChange. The
|
|
718
|
+
// rollup is re-derived at task boundaries, so an open tab always renders
|
|
719
|
+
// the CURRENT net diff for its path (never a stale copy captured at open
|
|
720
|
+
// time); a path that dropped out of the rollup degrades to a notice.
|
|
721
|
+
const fileChangeByTabPath = useMemo(
|
|
722
|
+
() =>
|
|
723
|
+
new Map(
|
|
724
|
+
fileChangesState.fileChanges.map((c) => [fileChangeTabPath(c), c]),
|
|
725
|
+
),
|
|
726
|
+
[fileChangesState.fileChanges],
|
|
727
|
+
);
|
|
728
|
+
const virtualDocuments = useMemo<readonly SurfaceVirtualDocument[]>(
|
|
729
|
+
() =>
|
|
730
|
+
editors
|
|
731
|
+
.filter(
|
|
732
|
+
(editor) =>
|
|
733
|
+
editor.entryId === ARTIFACT_DOCUMENT_ENTRY_ID ||
|
|
734
|
+
editor.entryId === FILE_CHANGE_DOCUMENT_ENTRY_ID ||
|
|
735
|
+
editor.entryId === AGENT_EXECUTION_DOCUMENT_ENTRY_ID ||
|
|
736
|
+
editor.entryId === DIAGNOSIS_DOCUMENT_ENTRY_ID,
|
|
737
|
+
)
|
|
738
|
+
.map((editor) => {
|
|
739
|
+
if (editor.entryId === DIAGNOSIS_DOCUMENT_ENTRY_ID) {
|
|
740
|
+
// The singleton AI-diagnosis conversation (opened by the header's
|
|
741
|
+
// Diagnose button via `panel.openDiagnosis`). Keyed by the fixed
|
|
742
|
+
// path so the streaming diagnosis flow survives unrelated editor
|
|
743
|
+
// churn; its close button closes the tab — the tab IS the
|
|
744
|
+
// "diagnosis is active" state.
|
|
745
|
+
return {
|
|
746
|
+
entryId: DIAGNOSIS_DOCUMENT_ENTRY_ID,
|
|
747
|
+
path: editor.path,
|
|
748
|
+
content: (
|
|
354
749
|
<WorkflowRepairCard
|
|
750
|
+
key={editor.path}
|
|
355
751
|
executionId={executionId}
|
|
356
|
-
org={org}
|
|
357
|
-
onApplyFix={
|
|
358
|
-
onClose={
|
|
359
|
-
|
|
752
|
+
org={org ?? ""}
|
|
753
|
+
onApplyFix={onApplyFix}
|
|
754
|
+
onClose={() =>
|
|
755
|
+
panel.closeEditor(
|
|
756
|
+
DIAGNOSIS_DOCUMENT_ENTRY_ID,
|
|
757
|
+
DIAGNOSIS_DOCUMENT_PATH,
|
|
758
|
+
)
|
|
759
|
+
}
|
|
360
760
|
/>
|
|
361
|
-
)
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
{
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
761
|
+
),
|
|
762
|
+
};
|
|
763
|
+
}
|
|
764
|
+
if (editor.entryId === AGENT_EXECUTION_DOCUMENT_ENTRY_ID) {
|
|
765
|
+
// The tab path CARRIES the child id (no lookup map — unlike the
|
|
766
|
+
// artifact/change families, a transcript needs only its id to
|
|
767
|
+
// fetch/stream itself). The suffix is the AGENT_CALL task name;
|
|
768
|
+
// its live state provides the agent slug for the header.
|
|
769
|
+
const childExecutionId = parseAgentExecutionTabPath(editor.path);
|
|
770
|
+
const taskName = editor.path.slice(childExecutionId.length + 1);
|
|
771
|
+
return {
|
|
772
|
+
entryId: AGENT_EXECUTION_DOCUMENT_ENTRY_ID,
|
|
773
|
+
path: editor.path,
|
|
774
|
+
// Keyed by tab path so the mounted fetch/stream survives
|
|
775
|
+
// unrelated editors churn while this tab stays active.
|
|
776
|
+
content: (
|
|
777
|
+
<WorkflowAgentExecutionDocument
|
|
778
|
+
key={editor.path}
|
|
779
|
+
childExecutionId={childExecutionId}
|
|
780
|
+
taskName={taskName}
|
|
781
|
+
agentSlug={taskStates.get(taskName)?.agentSlug || undefined}
|
|
782
|
+
onNavigateToAgentExecution={onNavigateToAgentExecution}
|
|
783
|
+
hitl={transcriptHitl}
|
|
784
|
+
/>
|
|
785
|
+
),
|
|
786
|
+
};
|
|
787
|
+
}
|
|
788
|
+
if (editor.entryId === FILE_CHANGE_DOCUMENT_ENTRY_ID) {
|
|
789
|
+
const change = fileChangeByTabPath.get(editor.path);
|
|
790
|
+
return {
|
|
791
|
+
entryId: FILE_CHANGE_DOCUMENT_ENTRY_ID,
|
|
792
|
+
path: editor.path,
|
|
793
|
+
content: change ? (
|
|
794
|
+
<div className="mx-auto w-full max-w-5xl px-4 py-4">
|
|
795
|
+
<FileChangeDiff key={editor.path} change={change} />
|
|
394
796
|
</div>
|
|
395
|
-
)
|
|
396
|
-
|
|
797
|
+
) : (
|
|
798
|
+
<FileChangeUnavailableNotice />
|
|
799
|
+
),
|
|
800
|
+
};
|
|
397
801
|
}
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
802
|
+
const artifact = artifactByTabPath.get(editor.path);
|
|
803
|
+
return {
|
|
804
|
+
entryId: ARTIFACT_DOCUMENT_ENTRY_ID,
|
|
805
|
+
path: editor.path,
|
|
806
|
+
content: artifact ? (
|
|
807
|
+
<WorkflowArtifactDocument key={editor.path} artifact={artifact} />
|
|
808
|
+
) : (
|
|
809
|
+
<ArtifactUnavailableNotice />
|
|
810
|
+
),
|
|
811
|
+
};
|
|
812
|
+
}),
|
|
813
|
+
[
|
|
814
|
+
editors,
|
|
815
|
+
artifactByTabPath,
|
|
816
|
+
fileChangeByTabPath,
|
|
817
|
+
taskStates,
|
|
818
|
+
onNavigateToAgentExecution,
|
|
819
|
+
transcriptHitl,
|
|
820
|
+
executionId,
|
|
821
|
+
org,
|
|
822
|
+
onApplyFix,
|
|
823
|
+
panel.closeEditor,
|
|
824
|
+
],
|
|
825
|
+
);
|
|
826
|
+
|
|
827
|
+
return (
|
|
828
|
+
<WorkspaceSurface
|
|
829
|
+
entries={[]}
|
|
830
|
+
lister={undefined}
|
|
831
|
+
reader={undefined}
|
|
832
|
+
// Facet-only rail until a workspace-source slice wires a lister —
|
|
833
|
+
// inert Explorer/Search icons would be dishonest chrome here.
|
|
834
|
+
builtInViews={[]}
|
|
835
|
+
view={panel.view}
|
|
836
|
+
onViewChange={panel.setView}
|
|
837
|
+
extraViews={railViews}
|
|
838
|
+
virtualDocuments={virtualDocuments}
|
|
839
|
+
editors={editors}
|
|
840
|
+
selectedFile={activeFile}
|
|
841
|
+
onOpenFile={panel.openFile}
|
|
842
|
+
onActivateEditor={panel.activateEditor}
|
|
843
|
+
onPinEditor={panel.pinEditor}
|
|
844
|
+
onCloseEditor={panel.closeEditor}
|
|
845
|
+
onCollapse={panel.closePanel}
|
|
846
|
+
className="h-full"
|
|
847
|
+
/>
|
|
848
|
+
);
|
|
849
|
+
}
|
|
850
|
+
|
|
851
|
+
function FileChangeUnavailableNotice() {
|
|
852
|
+
return (
|
|
853
|
+
<div
|
|
854
|
+
role="status"
|
|
855
|
+
className="mx-auto flex w-full max-w-3xl flex-col items-center gap-1 px-4 py-8 text-center"
|
|
856
|
+
>
|
|
857
|
+
<p className="text-xs font-medium text-foreground">
|
|
858
|
+
This file change is no longer available.
|
|
859
|
+
</p>
|
|
860
|
+
<p className="text-xs text-muted-foreground">
|
|
861
|
+
The rollup was refreshed and this file no longer appears among the
|
|
862
|
+
execution's changes.
|
|
863
|
+
</p>
|
|
425
864
|
</div>
|
|
426
865
|
);
|
|
427
|
-
}
|
|
866
|
+
}
|
|
867
|
+
|
|
868
|
+
function ArtifactUnavailableNotice() {
|
|
869
|
+
return (
|
|
870
|
+
<div
|
|
871
|
+
role="status"
|
|
872
|
+
className="mx-auto flex w-full max-w-3xl flex-col items-center gap-1 px-4 py-8 text-center"
|
|
873
|
+
>
|
|
874
|
+
<p className="text-xs font-medium text-foreground">
|
|
875
|
+
This artifact is no longer available.
|
|
876
|
+
</p>
|
|
877
|
+
<p className="text-xs text-muted-foreground">
|
|
878
|
+
It may have expired or been removed from storage.
|
|
879
|
+
</p>
|
|
880
|
+
</div>
|
|
881
|
+
);
|
|
882
|
+
}
|
|
428
883
|
|
|
429
884
|
function LoadingSkeleton() {
|
|
430
885
|
return (
|
|
@@ -446,178 +901,43 @@ function LoadingSkeleton() {
|
|
|
446
901
|
|
|
447
902
|
|
|
448
903
|
// ---------------------------------------------------------------------------
|
|
449
|
-
//
|
|
904
|
+
// Center-column view switcher (S9: Thread | Graph — thread-primary order)
|
|
450
905
|
// ---------------------------------------------------------------------------
|
|
451
906
|
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
onNavigateToAgentExecution,
|
|
462
|
-
taskStates,
|
|
463
|
-
onSubmitTaskApproval,
|
|
464
|
-
taskApprovalSubmittingTaskNames,
|
|
465
|
-
taskApprovalErrorsByTaskName,
|
|
466
|
-
pendingApprovals,
|
|
467
|
-
onSubmitApproval,
|
|
468
|
-
approvalSubmittingToolCallIds,
|
|
469
|
-
approvalErrorsByToolCallId,
|
|
470
|
-
pendingFileReviews,
|
|
471
|
-
onSubmitFileDecision,
|
|
472
|
-
fileDecisionSubmittingKeys,
|
|
473
|
-
fileDecisionErrorsByKey,
|
|
907
|
+
/**
|
|
908
|
+
* Slim segmented control above the center column. A radiogroup (the two
|
|
909
|
+
* views are mutually exclusive), matching the facet rail's radio semantics.
|
|
910
|
+
* Thread leads: it is the primary view (T02 pivot); the DAG is the
|
|
911
|
+
* secondary, topology-oriented lens.
|
|
912
|
+
*/
|
|
913
|
+
function CenterViewSwitcher({
|
|
914
|
+
view,
|
|
915
|
+
onChange,
|
|
474
916
|
}: {
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
executionStartIso: string;
|
|
478
|
-
executionDurationMs?: number;
|
|
479
|
-
selectedTaskName: string | null;
|
|
480
|
-
onTaskSelect: (taskName: string) => void;
|
|
481
|
-
onNavigateToAgentExecution?: (id: string) => void;
|
|
482
|
-
taskStates: ReadonlyMap<string, DerivedTaskState>;
|
|
483
|
-
onSubmitTaskApproval: WorkflowExecutionTimelineProps["onSubmitTaskApproval"];
|
|
484
|
-
taskApprovalSubmittingTaskNames: ReadonlySet<string>;
|
|
485
|
-
taskApprovalErrorsByTaskName: ReadonlyMap<string, Error>;
|
|
486
|
-
pendingApprovals?: readonly WorkflowPendingApproval[];
|
|
487
|
-
onSubmitApproval?: (toolCallId: string, action: ApprovalAction, comment?: string) => Promise<unknown>;
|
|
488
|
-
approvalSubmittingToolCallIds: ReadonlySet<string>;
|
|
489
|
-
approvalErrorsByToolCallId: ReadonlyMap<string, Error>;
|
|
490
|
-
pendingFileReviews?: readonly WorkflowPendingFileReview[];
|
|
491
|
-
onSubmitFileDecision: WorkflowFileDecisionSubmit;
|
|
492
|
-
fileDecisionSubmittingKeys: ReadonlySet<string>;
|
|
493
|
-
fileDecisionErrorsByKey: ReadonlyMap<string, Error>;
|
|
917
|
+
readonly view: CenterView;
|
|
918
|
+
readonly onChange: (view: CenterView) => void;
|
|
494
919
|
}) {
|
|
495
|
-
const [collapsed, setCollapsed] = useState(false);
|
|
496
|
-
const [activeTab, setActiveTab] = useState<BottomTab>("waterfall");
|
|
497
|
-
const prevHitlCountRef = useRef(0);
|
|
498
|
-
|
|
499
|
-
const approvalCount = pendingApprovals?.length ?? 0;
|
|
500
|
-
const fileReviewCount = pendingFileReviews?.length ?? 0;
|
|
501
|
-
// Both HITL kinds (tool approvals + file reviews) share the one "Approvals" tab.
|
|
502
|
-
const hitlCount = approvalCount + fileReviewCount;
|
|
503
|
-
const hasHitl = hitlCount > 0;
|
|
504
|
-
|
|
505
|
-
// Auto-switch to the Approvals tab when a new HITL gate (approval or file
|
|
506
|
-
// review) arrives; leave it when everything is resolved.
|
|
507
|
-
useEffect(() => {
|
|
508
|
-
if (hitlCount > prevHitlCountRef.current && hitlCount > 0) {
|
|
509
|
-
setActiveTab("approvals");
|
|
510
|
-
setCollapsed(false);
|
|
511
|
-
}
|
|
512
|
-
if (hitlCount === 0 && activeTab === "approvals") {
|
|
513
|
-
setActiveTab("waterfall");
|
|
514
|
-
}
|
|
515
|
-
prevHitlCountRef.current = hitlCount;
|
|
516
|
-
}, [hitlCount, activeTab]);
|
|
517
|
-
|
|
518
920
|
return (
|
|
519
|
-
<div
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
>
|
|
535
|
-
<path d="M2 4L5 7L8 4" fill="none" stroke="currentColor" strokeWidth="1.5" strokeLinecap="round" strokeLinejoin="round" />
|
|
536
|
-
</svg>
|
|
537
|
-
</button>
|
|
538
|
-
|
|
539
|
-
<TabButton
|
|
540
|
-
label="Waterfall"
|
|
541
|
-
isActive={activeTab === "waterfall"}
|
|
542
|
-
onClick={() => { setActiveTab("waterfall"); setCollapsed(false); }}
|
|
543
|
-
/>
|
|
544
|
-
<TabButton
|
|
545
|
-
label={`Events (${events.length})`}
|
|
546
|
-
isActive={activeTab === "events"}
|
|
547
|
-
onClick={() => { setActiveTab("events"); setCollapsed(false); }}
|
|
548
|
-
/>
|
|
549
|
-
{hasHitl && (
|
|
550
|
-
<TabButton
|
|
551
|
-
label={`Approvals (${hitlCount})`}
|
|
552
|
-
isActive={activeTab === "approvals"}
|
|
553
|
-
onClick={() => { setActiveTab("approvals"); setCollapsed(false); }}
|
|
554
|
-
/>
|
|
555
|
-
)}
|
|
556
|
-
</div>
|
|
557
|
-
|
|
558
|
-
{/* Panel content */}
|
|
559
|
-
{!collapsed && (
|
|
560
|
-
<div className="h-52">
|
|
561
|
-
{activeTab === "waterfall" && (
|
|
562
|
-
<WaterfallTimeline
|
|
563
|
-
events={events}
|
|
564
|
-
streamState={streamState}
|
|
565
|
-
executionStartIso={executionStartIso}
|
|
566
|
-
executionDurationMs={executionDurationMs}
|
|
567
|
-
selectedTaskName={selectedTaskName}
|
|
568
|
-
onTaskSelect={onTaskSelect}
|
|
569
|
-
className="h-full"
|
|
570
|
-
/>
|
|
571
|
-
)}
|
|
572
|
-
{activeTab === "events" && (
|
|
573
|
-
<WorkflowExecutionTimeline
|
|
574
|
-
events={events}
|
|
575
|
-
streamState={streamState}
|
|
576
|
-
onNavigateToAgentExecution={onNavigateToAgentExecution}
|
|
577
|
-
taskStates={taskStates}
|
|
578
|
-
onSubmitTaskApproval={onSubmitTaskApproval}
|
|
579
|
-
taskApprovalSubmittingTaskNames={taskApprovalSubmittingTaskNames}
|
|
580
|
-
taskApprovalErrorsByTaskName={taskApprovalErrorsByTaskName}
|
|
581
|
-
className="h-full"
|
|
582
|
-
/>
|
|
583
|
-
)}
|
|
584
|
-
{activeTab === "approvals" && (
|
|
585
|
-
<div className="h-full overflow-y-auto px-4 py-3">
|
|
586
|
-
<div className="space-y-3">
|
|
587
|
-
{pendingApprovals && onSubmitApproval && pendingApprovals.map((pa) => {
|
|
588
|
-
const toolCallId = pa.approval?.toolCallId ?? "";
|
|
589
|
-
return (
|
|
590
|
-
<WorkflowExecutionApprovalCard
|
|
591
|
-
key={toolCallId || pa.childAgentExecutionId}
|
|
592
|
-
prompt={pa.approval?.message || `Tool "${pa.approval?.toolName}" requires approval`}
|
|
593
|
-
toolCallId={toolCallId}
|
|
594
|
-
approvers={[]}
|
|
595
|
-
timeoutSeconds={0}
|
|
596
|
-
onSubmitApproval={onSubmitApproval}
|
|
597
|
-
isSubmitting={approvalSubmittingToolCallIds.has(toolCallId)}
|
|
598
|
-
error={approvalErrorsByToolCallId.get(toolCallId) ?? null}
|
|
599
|
-
/>
|
|
600
|
-
);
|
|
601
|
-
})}
|
|
602
|
-
{pendingFileReviews && pendingFileReviews.length > 0 && (
|
|
603
|
-
<WorkflowFileReviewList
|
|
604
|
-
pendingFileReviews={pendingFileReviews}
|
|
605
|
-
onSubmitFileDecision={onSubmitFileDecision}
|
|
606
|
-
submittingDecisionKeys={fileDecisionSubmittingKeys}
|
|
607
|
-
decisionErrors={fileDecisionErrorsByKey}
|
|
608
|
-
onNavigateToAgentExecution={onNavigateToAgentExecution}
|
|
609
|
-
/>
|
|
610
|
-
)}
|
|
611
|
-
</div>
|
|
612
|
-
</div>
|
|
613
|
-
)}
|
|
614
|
-
</div>
|
|
615
|
-
)}
|
|
921
|
+
<div
|
|
922
|
+
role="radiogroup"
|
|
923
|
+
aria-label="Center view"
|
|
924
|
+
className="flex items-center gap-0.5 border-b border-[var(--stgm-border,#e5e5e5)] px-2 py-1"
|
|
925
|
+
>
|
|
926
|
+
<CenterViewButton
|
|
927
|
+
label="Thread"
|
|
928
|
+
isActive={view === "thread"}
|
|
929
|
+
onClick={() => onChange("thread")}
|
|
930
|
+
/>
|
|
931
|
+
<CenterViewButton
|
|
932
|
+
label="Graph"
|
|
933
|
+
isActive={view === "graph"}
|
|
934
|
+
onClick={() => onChange("graph")}
|
|
935
|
+
/>
|
|
616
936
|
</div>
|
|
617
937
|
);
|
|
618
938
|
}
|
|
619
939
|
|
|
620
|
-
function
|
|
940
|
+
function CenterViewButton({
|
|
621
941
|
label,
|
|
622
942
|
isActive,
|
|
623
943
|
onClick,
|
|
@@ -629,11 +949,13 @@ function TabButton({
|
|
|
629
949
|
return (
|
|
630
950
|
<button
|
|
631
951
|
type="button"
|
|
952
|
+
role="radio"
|
|
953
|
+
aria-checked={isActive}
|
|
632
954
|
onClick={onClick}
|
|
633
955
|
className={cn(
|
|
634
|
-
"px-
|
|
956
|
+
"rounded px-2 py-0.5 text-xs font-medium transition-colors",
|
|
635
957
|
isActive
|
|
636
|
-
? "
|
|
958
|
+
? "bg-[var(--stgm-muted,#f5f5f5)] text-[var(--stgm-foreground,#171717)]"
|
|
637
959
|
: "text-[var(--stgm-muted-foreground,#737373)] hover:text-[var(--stgm-foreground,#171717)]",
|
|
638
960
|
)}
|
|
639
961
|
>
|
|
@@ -641,3 +963,4 @@ function TabButton({
|
|
|
641
963
|
</button>
|
|
642
964
|
);
|
|
643
965
|
}
|
|
966
|
+
|