@stigmer/react 3.1.16 → 3.2.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/README.md +16 -1
- 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/provider.d.ts +32 -0
- package/provider.d.ts.map +1 -1
- package/provider.js +25 -1
- package/provider.js.map +1 -1
- 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/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/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/__tests__/provider-container.layout.test.tsx +165 -0
- package/src/__tests__/provider-theme-scope.test.tsx +31 -0
- 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/provider.tsx +42 -0
- 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__/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/useSessionFileChanges.ts +12 -153
- 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/styles.css +14 -0
- 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
|
@@ -0,0 +1,845 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { memo, useMemo, useState } from "react";
|
|
4
|
+
import { cn } from "@stigmer/theme";
|
|
5
|
+
import type {
|
|
6
|
+
WorkflowPendingApproval,
|
|
7
|
+
WorkflowPendingFileReview,
|
|
8
|
+
WorkflowTask,
|
|
9
|
+
} from "@stigmer/protos/ai/stigmer/agentic/workflowexecution/v1/api_pb";
|
|
10
|
+
import type { DerivedTaskState } from "../../internal/store/workflow-execution-event-store.js";
|
|
11
|
+
import { useAutoScroll } from "../../internal/useAutoScroll.js";
|
|
12
|
+
import { JumpToLatestButton } from "../../internal/JumpToLatestButton.js";
|
|
13
|
+
import { BoundedContent } from "../../internal/BoundedContent.js";
|
|
14
|
+
import {
|
|
15
|
+
ThreadCardShell,
|
|
16
|
+
ThreadCardHeader,
|
|
17
|
+
ThreadCardBody,
|
|
18
|
+
SpinnerIcon,
|
|
19
|
+
ClockIcon,
|
|
20
|
+
CheckCircleIcon,
|
|
21
|
+
XCircleIcon,
|
|
22
|
+
DotIcon,
|
|
23
|
+
SlashCircleIcon,
|
|
24
|
+
} from "../../internal/thread-card/index.js";
|
|
25
|
+
import { formatMetaChips } from "../format-utils.js";
|
|
26
|
+
import type { UseWorkflowExecutionActionsReturn } from "../useWorkflowExecutionActions.js";
|
|
27
|
+
import { WorkflowApprovalList } from "../WorkflowApprovalList.js";
|
|
28
|
+
import { WorkflowFileReviewList } from "../WorkflowFileReviewList.js";
|
|
29
|
+
import { WorkflowTaskReviewGate } from "../WorkflowTaskReviewGate.js";
|
|
30
|
+
import { WorkflowTaskApprovalSummary } from "../WorkflowTaskApprovalSummary.js";
|
|
31
|
+
import { buildIO, type TaskDetailIO } from "../task-detail/task-detail-io.js";
|
|
32
|
+
import {
|
|
33
|
+
deriveTaskApprovalRequest,
|
|
34
|
+
deriveTaskApprovalDecision,
|
|
35
|
+
type TaskApprovalRequestView,
|
|
36
|
+
type TaskDetailApprovalDecision,
|
|
37
|
+
} from "../task-detail/task-approval.js";
|
|
38
|
+
import { StructuredDataViewer } from "../task-detail/StructuredDataViewer.js";
|
|
39
|
+
import { useWorkflowThreadItems } from "./useWorkflowThreadItems.js";
|
|
40
|
+
import type {
|
|
41
|
+
WorkflowThreadItem,
|
|
42
|
+
WorkflowThreadProgress,
|
|
43
|
+
} from "./project-thread-items.js";
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* The workflow-level HITL wiring a decision-capable thread needs — a `Pick`
|
|
47
|
+
* of the single `useWorkflowExecutionActions` instance's return (cannot
|
|
48
|
+
* drift; same convention as `WorkflowAgentExecutionHitl`). Covers all three
|
|
49
|
+
* gate kinds: child tool approvals, child file reviews, and task-level
|
|
50
|
+
* (human_input) approvals — since T06 the gating card is the ONLY decision
|
|
51
|
+
* surface, so the thread carries the full set. Decisions route through the
|
|
52
|
+
* WORKFLOW-level RPCs only — never the child's own `agentExecution.*` path,
|
|
53
|
+
* whose authorization checks the runner-spawned child rather than the
|
|
54
|
+
* workflow execution the operator owns (S5 rationale).
|
|
55
|
+
*/
|
|
56
|
+
export type WorkflowThreadHitl = Pick<
|
|
57
|
+
UseWorkflowExecutionActionsReturn,
|
|
58
|
+
| "submitApproval"
|
|
59
|
+
| "approvalSubmittingToolCallIds"
|
|
60
|
+
| "approvalErrorsByToolCallId"
|
|
61
|
+
| "submitTaskApproval"
|
|
62
|
+
| "taskApprovalSubmittingTaskNames"
|
|
63
|
+
| "taskApprovalErrorsByTaskName"
|
|
64
|
+
| "submitFileDecision"
|
|
65
|
+
| "fileDecisionSubmittingKeys"
|
|
66
|
+
| "fileDecisionErrorsByKey"
|
|
67
|
+
>;
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* The pending gates surfaced for one task card's child agent execution —
|
|
71
|
+
* grouped once per thread render (memoized against the snapshot lists) so
|
|
72
|
+
* non-gating cards receive `undefined` and their `React.memo` bails hold.
|
|
73
|
+
*/
|
|
74
|
+
interface ThreadTaskGates {
|
|
75
|
+
readonly approvals: readonly WorkflowPendingApproval[];
|
|
76
|
+
readonly fileReviews: readonly WorkflowPendingFileReview[];
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/** Props for {@link WorkflowTaskThread}. */
|
|
80
|
+
export interface WorkflowTaskThreadProps {
|
|
81
|
+
/** Live derived task states from the execution event stream. */
|
|
82
|
+
readonly taskStates: ReadonlyMap<string, DerivedTaskState>;
|
|
83
|
+
/** Total planned tasks (from `execution_started`); `0` when unknown. */
|
|
84
|
+
readonly totalTasks: number;
|
|
85
|
+
/** Whether the execution is still running (drives streaming affordances). */
|
|
86
|
+
readonly isRunning: boolean;
|
|
87
|
+
/**
|
|
88
|
+
* Callback to open an AGENT_CALL task's child transcript in the panel's
|
|
89
|
+
* editor area (the S4 in-place expansion). Omitted → the affordance is
|
|
90
|
+
* not rendered.
|
|
91
|
+
*/
|
|
92
|
+
readonly onOpenAgentExecution?: (
|
|
93
|
+
childExecutionId: string,
|
|
94
|
+
taskName: string,
|
|
95
|
+
) => void;
|
|
96
|
+
/**
|
|
97
|
+
* Workflow-level HITL wiring (see {@link WorkflowThreadHitl}). When
|
|
98
|
+
* provided, a gating task's card renders its decision surface directly in
|
|
99
|
+
* the thread — always visible while the gate is pending, never behind the
|
|
100
|
+
* expand chevron (the run is blocked). Omitted → the thread is read-only
|
|
101
|
+
* and behaves exactly as before (DD-011; the S5 omitted-`hitl` precedent).
|
|
102
|
+
*/
|
|
103
|
+
readonly hitl?: WorkflowThreadHitl;
|
|
104
|
+
/**
|
|
105
|
+
* The parent workflow's surfaced child tool-approval gates
|
|
106
|
+
* (`status.pending_approvals`). Only read when {@link hitl} is provided.
|
|
107
|
+
*/
|
|
108
|
+
readonly pendingApprovals?: readonly WorkflowPendingApproval[];
|
|
109
|
+
/**
|
|
110
|
+
* The parent workflow's surfaced child file-review references
|
|
111
|
+
* (`status.pending_file_reviews`). Only read when {@link hitl} is provided.
|
|
112
|
+
*/
|
|
113
|
+
readonly pendingFileReviews?: readonly WorkflowPendingFileReview[];
|
|
114
|
+
/**
|
|
115
|
+
* Per-task status snapshots (`status.tasks[]`) keyed by task name — the
|
|
116
|
+
* FULL I/O source for card bodies (T04), never an event-log scan
|
|
117
|
+
* (DD-T04-5). The map's identity changes only on a snapshot refetch
|
|
118
|
+
* (rare), never on stream event appends, so memoized cards keep bailing
|
|
119
|
+
* during streaming. Omitted → bodies degrade to the truncated event
|
|
120
|
+
* summaries already on the items.
|
|
121
|
+
*/
|
|
122
|
+
readonly taskSnapshotsByName?: ReadonlyMap<string, WorkflowTask>;
|
|
123
|
+
/** Additional CSS class names for the root container. */
|
|
124
|
+
readonly className?: string;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Session-style task thread for a workflow execution: one card per task in
|
|
129
|
+
* execution order (first-started first — D-T02-1), streaming live as the
|
|
130
|
+
* run progresses, with a collapsed preview and an expandable detail body
|
|
131
|
+
* per card — the workflow analog of the session viewer's tool-call cards.
|
|
132
|
+
*
|
|
133
|
+
* Pending tasks render no cards (D-T02-5); the progress header keeps
|
|
134
|
+
* overall status visible. Retries collapse into one card with an attempt
|
|
135
|
+
* indicator (D-T02-6). AGENT_CALL cards carry an always-visible body with
|
|
136
|
+
* an "Open transcript" affordance (D-T02-2) — the full transcript opens as
|
|
137
|
+
* a panel document, never inline. Since T04 the card is the PRIMARY surface
|
|
138
|
+
* for a task's data (kind-aware preview line + bounded I/O body); since T06
|
|
139
|
+
* it is the ONLY one — the Inspect drill-down is gone, and cards compose
|
|
140
|
+
* the session card language exactly (expand-or-none headers, no selection).
|
|
141
|
+
*
|
|
142
|
+
* Auto-follow uses the session thread's mechanism: an IntersectionObserver
|
|
143
|
+
* sentinel keeps the list pinned to the latest card until the user scrolls
|
|
144
|
+
* up, with a jump-to-latest affordance to re-engage.
|
|
145
|
+
*
|
|
146
|
+
* With `hitl` wired, a gating task's card carries its decision surface
|
|
147
|
+
* in-thread (S10/T06): the canonical `ApprovalCard`s for child tool gates,
|
|
148
|
+
* the child-streaming `FileReviewCard`s for file gates, and the full
|
|
149
|
+
* `WorkflowTaskReviewGate` (custom review renderers included) for
|
|
150
|
+
* task-level human_input gates — with a read-only
|
|
151
|
+
* `WorkflowTaskApprovalSummary` once the gate resolves.
|
|
152
|
+
*
|
|
153
|
+
* This component is designed to work identically whether rendered in the
|
|
154
|
+
* Stigmer Console or embedded in a third-party dashboard. No dependencies
|
|
155
|
+
* on Console routing, auth, or layout context.
|
|
156
|
+
*/
|
|
157
|
+
export const WorkflowTaskThread = memo(function WorkflowTaskThread({
|
|
158
|
+
taskStates,
|
|
159
|
+
totalTasks,
|
|
160
|
+
isRunning,
|
|
161
|
+
onOpenAgentExecution,
|
|
162
|
+
hitl,
|
|
163
|
+
pendingApprovals,
|
|
164
|
+
pendingFileReviews,
|
|
165
|
+
taskSnapshotsByName,
|
|
166
|
+
className,
|
|
167
|
+
}: WorkflowTaskThreadProps) {
|
|
168
|
+
const { items, progress } = useWorkflowThreadItems(taskStates, totalTasks);
|
|
169
|
+
const { scrollRef, sentinelRef, contentRef, isFollowing, jumpToLatest } =
|
|
170
|
+
useAutoScroll();
|
|
171
|
+
|
|
172
|
+
// Group the snapshot's gates by owning child ONCE per snapshot identity —
|
|
173
|
+
// the lists change only on a snapshot refetch, never on stream event
|
|
174
|
+
// appends, so during streaming every card's `gates` prop keeps a stable
|
|
175
|
+
// reference (`undefined` for non-gating cards) and memoized rows bail
|
|
176
|
+
// (DD-009/DD-010). Grouping is unconditional (it is cheap and usually
|
|
177
|
+
// empty); rendering is gated on `hitl` at the card.
|
|
178
|
+
const gatesByChild = useMemo((): ReadonlyMap<string, ThreadTaskGates> => {
|
|
179
|
+
const map = new Map<
|
|
180
|
+
string,
|
|
181
|
+
{ approvals: WorkflowPendingApproval[]; fileReviews: WorkflowPendingFileReview[] }
|
|
182
|
+
>();
|
|
183
|
+
const bucket = (childId: string) => {
|
|
184
|
+
let entry = map.get(childId);
|
|
185
|
+
if (!entry) {
|
|
186
|
+
entry = { approvals: [], fileReviews: [] };
|
|
187
|
+
map.set(childId, entry);
|
|
188
|
+
}
|
|
189
|
+
return entry;
|
|
190
|
+
};
|
|
191
|
+
for (const pa of pendingApprovals ?? []) {
|
|
192
|
+
if (pa.childAgentExecutionId) bucket(pa.childAgentExecutionId).approvals.push(pa);
|
|
193
|
+
}
|
|
194
|
+
for (const ref of pendingFileReviews ?? []) {
|
|
195
|
+
if (ref.childAgentExecutionId) bucket(ref.childAgentExecutionId).fileReviews.push(ref);
|
|
196
|
+
}
|
|
197
|
+
return map;
|
|
198
|
+
}, [pendingApprovals, pendingFileReviews]);
|
|
199
|
+
|
|
200
|
+
return (
|
|
201
|
+
<div className={cn("relative flex h-full min-h-0 flex-col", className)}>
|
|
202
|
+
<ThreadProgressHeader progress={progress} isRunning={isRunning} />
|
|
203
|
+
|
|
204
|
+
<div ref={scrollRef} className="min-h-0 flex-1 overflow-y-auto">
|
|
205
|
+
<div
|
|
206
|
+
ref={contentRef}
|
|
207
|
+
className="mx-auto flex w-full max-w-3xl flex-col gap-2 px-4 py-4"
|
|
208
|
+
>
|
|
209
|
+
{items.length === 0 ? (
|
|
210
|
+
<ThreadEmptyState isRunning={isRunning} />
|
|
211
|
+
) : (
|
|
212
|
+
items.map((item) => (
|
|
213
|
+
<ThreadTaskCard
|
|
214
|
+
key={item.taskName}
|
|
215
|
+
item={item}
|
|
216
|
+
onOpenAgentExecution={onOpenAgentExecution}
|
|
217
|
+
// HITL props reach ONLY gating cards (DD-010): the bundle's
|
|
218
|
+
// identity moves whenever any gate's in-flight/error state
|
|
219
|
+
// flips (fresh Set/Map fields), so handing it to every card
|
|
220
|
+
// would re-render the whole column per spinner tick. Scoped
|
|
221
|
+
// here, non-gating cards keep `undefined === undefined` and
|
|
222
|
+
// their memo bails hold.
|
|
223
|
+
hitl={item.status === "waiting_approval" ? hitl : undefined}
|
|
224
|
+
gates={
|
|
225
|
+
item.status === "waiting_approval" && item.childExecutionId
|
|
226
|
+
? gatesByChild.get(item.childExecutionId)
|
|
227
|
+
: undefined
|
|
228
|
+
}
|
|
229
|
+
snapshot={taskSnapshotsByName?.get(item.taskName)}
|
|
230
|
+
/>
|
|
231
|
+
))
|
|
232
|
+
)}
|
|
233
|
+
<div ref={sentinelRef} aria-hidden="true" />
|
|
234
|
+
</div>
|
|
235
|
+
</div>
|
|
236
|
+
|
|
237
|
+
<JumpToLatestButton visible={!isFollowing} onClick={jumpToLatest} />
|
|
238
|
+
</div>
|
|
239
|
+
);
|
|
240
|
+
});
|
|
241
|
+
|
|
242
|
+
// ---------------------------------------------------------------------------
|
|
243
|
+
// Progress header
|
|
244
|
+
// ---------------------------------------------------------------------------
|
|
245
|
+
|
|
246
|
+
function ThreadProgressHeader({
|
|
247
|
+
progress,
|
|
248
|
+
isRunning,
|
|
249
|
+
}: {
|
|
250
|
+
readonly progress: WorkflowThreadProgress;
|
|
251
|
+
readonly isRunning: boolean;
|
|
252
|
+
}) {
|
|
253
|
+
const { settledTasks, activeTasks, totalTasks } = progress;
|
|
254
|
+
const settled =
|
|
255
|
+
totalTasks > 0
|
|
256
|
+
? `${settledTasks} of ${totalTasks} tasks`
|
|
257
|
+
: `${settledTasks} ${settledTasks === 1 ? "task" : "tasks"}`;
|
|
258
|
+
|
|
259
|
+
return (
|
|
260
|
+
<div className="flex items-center gap-2 border-b border-border px-4 py-1.5 text-xs text-muted-foreground">
|
|
261
|
+
<span>{settled}</span>
|
|
262
|
+
{activeTasks > 0 && (
|
|
263
|
+
<span className="flex items-center gap-1.5">
|
|
264
|
+
<span
|
|
265
|
+
aria-hidden="true"
|
|
266
|
+
className={cn(
|
|
267
|
+
"size-1.5 rounded-full bg-primary",
|
|
268
|
+
isRunning && "animate-pulse",
|
|
269
|
+
)}
|
|
270
|
+
/>
|
|
271
|
+
{activeTasks} active
|
|
272
|
+
</span>
|
|
273
|
+
)}
|
|
274
|
+
</div>
|
|
275
|
+
);
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
// ---------------------------------------------------------------------------
|
|
279
|
+
// Empty state
|
|
280
|
+
// ---------------------------------------------------------------------------
|
|
281
|
+
|
|
282
|
+
function ThreadEmptyState({ isRunning }: { readonly isRunning: boolean }) {
|
|
283
|
+
return (
|
|
284
|
+
<div role="status" className="px-4 py-10 text-center text-sm text-muted-foreground">
|
|
285
|
+
{isRunning
|
|
286
|
+
? "Waiting for the first task to start…"
|
|
287
|
+
: "No task activity was recorded for this execution."}
|
|
288
|
+
</div>
|
|
289
|
+
);
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
// ---------------------------------------------------------------------------
|
|
293
|
+
// Task card
|
|
294
|
+
// ---------------------------------------------------------------------------
|
|
295
|
+
|
|
296
|
+
/**
|
|
297
|
+
* One task card. Memoized against the structurally-shared item (DD-010):
|
|
298
|
+
* during streaming only the actively-changing task's item gets a fresh
|
|
299
|
+
* identity, so settled cards bail here. `hitl`/`gates` arrive ONLY while
|
|
300
|
+
* this card is gating (the thread scopes them — see the render site), so
|
|
301
|
+
* gate-state churn (a decision's in-flight Set flip re-materializes the
|
|
302
|
+
* bundle) re-renders gating cards only, never the column. `snapshot`
|
|
303
|
+
* changes identity only on a snapshot refetch, never on stream appends.
|
|
304
|
+
* Expansion is local row state — expanding one card never re-renders its
|
|
305
|
+
* siblings.
|
|
306
|
+
*
|
|
307
|
+
* Disclosure (T04, the session `ToolCallItem` rule — "does the body carry
|
|
308
|
+
* content the one-line row cannot?"):
|
|
309
|
+
* - `"preview"` kinds render an ALWAYS-VISIBLE bounded output body (no
|
|
310
|
+
* card chevron — `BoundedContent` owns its own in-place reveal, so the
|
|
311
|
+
* old "expand, then Show more" double control never comes back).
|
|
312
|
+
* - `"summary"` kinds expand from the header — the session card's own
|
|
313
|
+
* gesture, the chevron appended by the shell (T06).
|
|
314
|
+
*/
|
|
315
|
+
const ThreadTaskCard = memo(function ThreadTaskCard({
|
|
316
|
+
item,
|
|
317
|
+
onOpenAgentExecution,
|
|
318
|
+
hitl,
|
|
319
|
+
gates,
|
|
320
|
+
snapshot,
|
|
321
|
+
}: {
|
|
322
|
+
readonly item: WorkflowThreadItem;
|
|
323
|
+
readonly onOpenAgentExecution?: (
|
|
324
|
+
childExecutionId: string,
|
|
325
|
+
taskName: string,
|
|
326
|
+
) => void;
|
|
327
|
+
readonly hitl?: WorkflowThreadHitl;
|
|
328
|
+
readonly gates?: ThreadTaskGates;
|
|
329
|
+
readonly snapshot?: WorkflowTask;
|
|
330
|
+
}) {
|
|
331
|
+
const [expanded, setExpanded] = useState(false);
|
|
332
|
+
|
|
333
|
+
// The I/O fallback ladder (full snapshot value → truncated event summary
|
|
334
|
+
// → nothing) — an O(1) lookup, never an event-log scan (T04).
|
|
335
|
+
const outputIO = useMemo(
|
|
336
|
+
() => buildIO(snapshot?.output, item.outputSummary, snapshot?.artifactIds ?? []),
|
|
337
|
+
[snapshot, item.outputSummary],
|
|
338
|
+
);
|
|
339
|
+
const inputIO = useMemo(
|
|
340
|
+
() => buildIO(snapshot?.input, item.inputSummary, []),
|
|
341
|
+
[snapshot, item.inputSummary],
|
|
342
|
+
);
|
|
343
|
+
|
|
344
|
+
// The human_input gate record (T06): the review material for a pending
|
|
345
|
+
// gate, the decision report for a resolved one. Memoized on the captured
|
|
346
|
+
// payloads' identities — the store keeps them reference-stable, so these
|
|
347
|
+
// recompute only when a gate opens/resolves or the snapshot refetches.
|
|
348
|
+
const approvalRequestView = useMemo(
|
|
349
|
+
() =>
|
|
350
|
+
item.approvalRequest
|
|
351
|
+
? deriveTaskApprovalRequest(item.approvalRequest)
|
|
352
|
+
: null,
|
|
353
|
+
[item.approvalRequest],
|
|
354
|
+
);
|
|
355
|
+
const approvalDecision = useMemo(
|
|
356
|
+
() =>
|
|
357
|
+
item.approvalRequest
|
|
358
|
+
? deriveTaskApprovalDecision(item.approvalResolution, snapshot?.output)
|
|
359
|
+
: null,
|
|
360
|
+
[item.approvalRequest, item.approvalResolution, snapshot],
|
|
361
|
+
);
|
|
362
|
+
|
|
363
|
+
const isPreview = item.disclosure === "preview";
|
|
364
|
+
const showHitl = !!hitl && item.status === "waiting_approval";
|
|
365
|
+
// While gating, the in-card HITL section owns the card's affordances
|
|
366
|
+
// (including "Open transcript" when the child's gates aren't surfaced) —
|
|
367
|
+
// the preview body must not render a duplicate.
|
|
368
|
+
const showBodyTranscript =
|
|
369
|
+
item.variant === "agent-call" &&
|
|
370
|
+
!!item.childExecutionId &&
|
|
371
|
+
!!onOpenAgentExecution &&
|
|
372
|
+
!showHitl;
|
|
373
|
+
// A resolved human_input gate presents its decision report in place of
|
|
374
|
+
// the raw output Struct (the output IS the decision record — the report
|
|
375
|
+
// is the readable rendering of it).
|
|
376
|
+
const showApprovalSummary =
|
|
377
|
+
!showHitl && approvalRequestView !== null && approvalDecision !== null;
|
|
378
|
+
// The session's `showBody` gate: a preview body renders only when it has
|
|
379
|
+
// content the header cannot carry (output, an error, the agent-call
|
|
380
|
+
// transcript affordance, or a gate's decision report) — a content-less
|
|
381
|
+
// preview card collapses back to a clean one-line row.
|
|
382
|
+
const showPreviewBody =
|
|
383
|
+
isPreview &&
|
|
384
|
+
(outputIO !== null ||
|
|
385
|
+
!!item.error ||
|
|
386
|
+
showBodyTranscript ||
|
|
387
|
+
showApprovalSummary);
|
|
388
|
+
|
|
389
|
+
const meta = formatMetaChips({
|
|
390
|
+
durationMs: item.durationMs,
|
|
391
|
+
costMicros: item.costMicros,
|
|
392
|
+
tokens: item.tokensUsed,
|
|
393
|
+
});
|
|
394
|
+
// Kind-aware one-liner resolved by `resolveTaskPreview` in the projection
|
|
395
|
+
// (T04) — a primitive on the item so this memoized card bails during
|
|
396
|
+
// streaming. The empty string means "nothing kind-specific to say".
|
|
397
|
+
const preview = item.previewLine || null;
|
|
398
|
+
|
|
399
|
+
return (
|
|
400
|
+
<ThreadCardShell
|
|
401
|
+
accent={item.status === "waiting_approval" ? "warning" : null}
|
|
402
|
+
cursorTarget="workflow-task-row"
|
|
403
|
+
>
|
|
404
|
+
{/* The session card's gestures exactly (T06): summary rows expand
|
|
405
|
+
from the header (chevron appended by the shell); preview rows'
|
|
406
|
+
bodies are always visible, so the header is a plain layout row. */}
|
|
407
|
+
<ThreadCardHeader
|
|
408
|
+
gesture={
|
|
409
|
+
isPreview
|
|
410
|
+
? { kind: "none" }
|
|
411
|
+
: {
|
|
412
|
+
kind: "expand",
|
|
413
|
+
expanded,
|
|
414
|
+
onToggle: () => setExpanded((v) => !v),
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
>
|
|
418
|
+
<StatusGlyph status={item.status} />
|
|
419
|
+
<span className="min-w-0 flex-1 flex items-baseline gap-1.5 overflow-hidden">
|
|
420
|
+
<span className="shrink-0 font-medium text-foreground">
|
|
421
|
+
{item.taskName}
|
|
422
|
+
</span>
|
|
423
|
+
{item.kindLabel && (
|
|
424
|
+
<span className="shrink-0 rounded border border-border px-1 py-px text-[10px] uppercase tracking-wide text-muted-foreground">
|
|
425
|
+
{item.kindLabel}
|
|
426
|
+
</span>
|
|
427
|
+
)}
|
|
428
|
+
{item.attemptNumber > 1 && (
|
|
429
|
+
<span className="shrink-0 text-muted-foreground">
|
|
430
|
+
attempt {item.attemptNumber}
|
|
431
|
+
</span>
|
|
432
|
+
)}
|
|
433
|
+
{preview && (
|
|
434
|
+
<span className="min-w-0 truncate text-muted-foreground">
|
|
435
|
+
{preview}
|
|
436
|
+
</span>
|
|
437
|
+
)}
|
|
438
|
+
</span>
|
|
439
|
+
|
|
440
|
+
{meta && (
|
|
441
|
+
<span className="shrink-0 tabular-nums text-muted-foreground">
|
|
442
|
+
{meta}
|
|
443
|
+
</span>
|
|
444
|
+
)}
|
|
445
|
+
</ThreadCardHeader>
|
|
446
|
+
|
|
447
|
+
{/* In-thread HITL (S10): the decision surface renders whenever the
|
|
448
|
+
task is gating — ALWAYS visible, never behind the expand chevron
|
|
449
|
+
(the run is blocked; Nielsen #1). */}
|
|
450
|
+
{showHitl && hitl && (
|
|
451
|
+
<ThreadCardBody>
|
|
452
|
+
<ThreadTaskCardHitl
|
|
453
|
+
item={item}
|
|
454
|
+
gates={gates}
|
|
455
|
+
hitl={hitl}
|
|
456
|
+
approvalRequestView={approvalRequestView}
|
|
457
|
+
onOpenAgentExecution={onOpenAgentExecution}
|
|
458
|
+
/>
|
|
459
|
+
</ThreadCardBody>
|
|
460
|
+
)}
|
|
461
|
+
|
|
462
|
+
{/* Always-visible bounded output body for I/O-bearing kinds (T04) —
|
|
463
|
+
the session's preview-card model. */}
|
|
464
|
+
{showPreviewBody && (
|
|
465
|
+
<ThreadCardBody cursorTarget="task-preview">
|
|
466
|
+
<ThreadTaskPreviewBody
|
|
467
|
+
item={item}
|
|
468
|
+
outputIO={outputIO}
|
|
469
|
+
approvalSummary={
|
|
470
|
+
showApprovalSummary && approvalRequestView
|
|
471
|
+
? {
|
|
472
|
+
request: approvalRequestView,
|
|
473
|
+
decision: approvalDecision,
|
|
474
|
+
}
|
|
475
|
+
: undefined
|
|
476
|
+
}
|
|
477
|
+
onOpenAgentExecution={
|
|
478
|
+
showBodyTranscript ? onOpenAgentExecution : undefined
|
|
479
|
+
}
|
|
480
|
+
/>
|
|
481
|
+
</ThreadCardBody>
|
|
482
|
+
)}
|
|
483
|
+
|
|
484
|
+
{!isPreview && expanded && (
|
|
485
|
+
<ThreadCardBody>
|
|
486
|
+
<ThreadTaskDetail
|
|
487
|
+
item={item}
|
|
488
|
+
inputIO={inputIO}
|
|
489
|
+
outputIO={outputIO}
|
|
490
|
+
onOpenAgentExecution={onOpenAgentExecution}
|
|
491
|
+
/>
|
|
492
|
+
</ThreadCardBody>
|
|
493
|
+
)}
|
|
494
|
+
</ThreadCardShell>
|
|
495
|
+
);
|
|
496
|
+
});
|
|
497
|
+
|
|
498
|
+
// ---------------------------------------------------------------------------
|
|
499
|
+
// In-thread HITL section (S10)
|
|
500
|
+
// ---------------------------------------------------------------------------
|
|
501
|
+
|
|
502
|
+
/**
|
|
503
|
+
* The decision surface on a gating card, resolved by gate kind:
|
|
504
|
+
*
|
|
505
|
+
* 1. Child gates surfaced on the parent snapshot → the shipped lists
|
|
506
|
+
* (`WorkflowApprovalList` for tool approvals, `WorkflowFileReviewList`
|
|
507
|
+
* for file reviews), filtered to this card's child. Decisions route
|
|
508
|
+
* through the workflow-level RPCs on the supplied {@link
|
|
509
|
+
* WorkflowThreadHitl} bundle.
|
|
510
|
+
* 2. An AGENT_CALL card with NO surfaced gates → the child is gated but the
|
|
511
|
+
* snapshot has no entries: on cloud a brief refetch window; on OSS the
|
|
512
|
+
* steady state until the T04 forwarder lands. The honest surface is the
|
|
513
|
+
* child's own transcript (the S5 in-place expansion renders the child's
|
|
514
|
+
* ApprovalCards) — offer it, never a dead-end spinner.
|
|
515
|
+
* 3. Any other gating card → a task-level (human_input) gate. The full
|
|
516
|
+
* review surface — outcomes, forms, artifact-backed payloads, custom
|
|
517
|
+
* review renderers — renders right here (T06): the card is the only
|
|
518
|
+
* decision surface, so it carries the real `WorkflowTaskReviewGate`,
|
|
519
|
+
* not a link to one. Degrades to an honest waiting notice when the
|
|
520
|
+
* request payload is unavailable (no event stream — the snapshot
|
|
521
|
+
* fallback path).
|
|
522
|
+
*/
|
|
523
|
+
function ThreadTaskCardHitl({
|
|
524
|
+
item,
|
|
525
|
+
gates,
|
|
526
|
+
hitl,
|
|
527
|
+
approvalRequestView,
|
|
528
|
+
onOpenAgentExecution,
|
|
529
|
+
}: {
|
|
530
|
+
readonly item: WorkflowThreadItem;
|
|
531
|
+
readonly gates?: ThreadTaskGates;
|
|
532
|
+
readonly hitl: WorkflowThreadHitl;
|
|
533
|
+
readonly approvalRequestView: TaskApprovalRequestView | null;
|
|
534
|
+
readonly onOpenAgentExecution?: (
|
|
535
|
+
childExecutionId: string,
|
|
536
|
+
taskName: string,
|
|
537
|
+
) => void;
|
|
538
|
+
}) {
|
|
539
|
+
const hasChildGates =
|
|
540
|
+
!!gates && (gates.approvals.length > 0 || gates.fileReviews.length > 0);
|
|
541
|
+
|
|
542
|
+
if (hasChildGates) {
|
|
543
|
+
return (
|
|
544
|
+
<div className="flex flex-col gap-3">
|
|
545
|
+
{gates.approvals.length > 0 && (
|
|
546
|
+
<WorkflowApprovalList
|
|
547
|
+
pendingApprovals={gates.approvals}
|
|
548
|
+
onSubmitApproval={hitl.submitApproval}
|
|
549
|
+
submittingToolCallIds={hitl.approvalSubmittingToolCallIds}
|
|
550
|
+
approvalErrors={hitl.approvalErrorsByToolCallId}
|
|
551
|
+
/>
|
|
552
|
+
)}
|
|
553
|
+
{gates.fileReviews.length > 0 && (
|
|
554
|
+
<WorkflowFileReviewList
|
|
555
|
+
pendingFileReviews={gates.fileReviews}
|
|
556
|
+
onSubmitFileDecision={hitl.submitFileDecision}
|
|
557
|
+
submittingDecisionKeys={hitl.fileDecisionSubmittingKeys}
|
|
558
|
+
decisionErrors={hitl.fileDecisionErrorsByKey}
|
|
559
|
+
/>
|
|
560
|
+
)}
|
|
561
|
+
</div>
|
|
562
|
+
);
|
|
563
|
+
}
|
|
564
|
+
|
|
565
|
+
if (item.variant === "agent-call") {
|
|
566
|
+
return (
|
|
567
|
+
<div className="flex flex-wrap items-center gap-2">
|
|
568
|
+
<p className="text-xs text-muted-foreground">
|
|
569
|
+
The called agent is waiting for an approval. Decide it in the
|
|
570
|
+
agent's transcript.
|
|
571
|
+
</p>
|
|
572
|
+
{item.childExecutionId && onOpenAgentExecution && (
|
|
573
|
+
<ThreadActionButton
|
|
574
|
+
label="Open transcript"
|
|
575
|
+
onClick={() =>
|
|
576
|
+
onOpenAgentExecution(item.childExecutionId, item.taskName)
|
|
577
|
+
}
|
|
578
|
+
/>
|
|
579
|
+
)}
|
|
580
|
+
</div>
|
|
581
|
+
);
|
|
582
|
+
}
|
|
583
|
+
|
|
584
|
+
if (approvalRequestView) {
|
|
585
|
+
return (
|
|
586
|
+
<WorkflowTaskReviewGate
|
|
587
|
+
taskName={item.taskName}
|
|
588
|
+
prompt={approvalRequestView.prompt}
|
|
589
|
+
outcomes={approvalRequestView.outcomes}
|
|
590
|
+
formSchema={approvalRequestView.formSchema ?? undefined}
|
|
591
|
+
payload={approvalRequestView.payload}
|
|
592
|
+
uiHint={approvalRequestView.uiHint}
|
|
593
|
+
payloadArtifactId={approvalRequestView.payloadArtifactId}
|
|
594
|
+
onSubmit={hitl.submitTaskApproval}
|
|
595
|
+
isSubmitting={hitl.taskApprovalSubmittingTaskNames.has(item.taskName)}
|
|
596
|
+
error={hitl.taskApprovalErrorsByTaskName.get(item.taskName) ?? null}
|
|
597
|
+
/>
|
|
598
|
+
);
|
|
599
|
+
}
|
|
600
|
+
|
|
601
|
+
// No captured request payload (event stream unavailable) — state the
|
|
602
|
+
// block honestly rather than rendering a gate with no material.
|
|
603
|
+
return (
|
|
604
|
+
<p className="text-xs text-muted-foreground">
|
|
605
|
+
Review required to continue this run.
|
|
606
|
+
</p>
|
|
607
|
+
);
|
|
608
|
+
}
|
|
609
|
+
|
|
610
|
+
function ThreadActionButton({
|
|
611
|
+
label,
|
|
612
|
+
onClick,
|
|
613
|
+
}: {
|
|
614
|
+
readonly label: string;
|
|
615
|
+
readonly onClick: () => void;
|
|
616
|
+
}) {
|
|
617
|
+
return (
|
|
618
|
+
<button
|
|
619
|
+
type="button"
|
|
620
|
+
onClick={onClick}
|
|
621
|
+
className="shrink-0 rounded border border-border px-2 py-1 text-xs font-medium text-foreground hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
|
|
622
|
+
>
|
|
623
|
+
{label}
|
|
624
|
+
</button>
|
|
625
|
+
);
|
|
626
|
+
}
|
|
627
|
+
|
|
628
|
+
// ---------------------------------------------------------------------------
|
|
629
|
+
// Card bodies (T04)
|
|
630
|
+
// ---------------------------------------------------------------------------
|
|
631
|
+
|
|
632
|
+
/**
|
|
633
|
+
* One side of a task's I/O in the card, honest about provenance: the
|
|
634
|
+
* event-summary rung of the fallback ladder carries the same truncation
|
|
635
|
+
* banner Inspect uses. Bounded — the outer `BoundedContent` caps total
|
|
636
|
+
* height (single-level with `StructuredDataViewer`'s per-value reveals:
|
|
637
|
+
* different granularity, they never govern the same block).
|
|
638
|
+
*/
|
|
639
|
+
function ThreadTaskIOSection({
|
|
640
|
+
label,
|
|
641
|
+
io,
|
|
642
|
+
}: {
|
|
643
|
+
readonly label: "Input" | "Output";
|
|
644
|
+
readonly io: TaskDetailIO;
|
|
645
|
+
}) {
|
|
646
|
+
return (
|
|
647
|
+
<div className="flex flex-col gap-1">
|
|
648
|
+
<span className="text-[10px] font-medium uppercase tracking-wide text-muted-foreground">
|
|
649
|
+
{label}
|
|
650
|
+
</span>
|
|
651
|
+
{io.source === "event-summary" && (
|
|
652
|
+
<p className="text-[10px] text-muted-foreground">
|
|
653
|
+
Showing truncated summary from the event log. Full data appears when
|
|
654
|
+
the run's snapshot is available.
|
|
655
|
+
</p>
|
|
656
|
+
)}
|
|
657
|
+
<BoundedContent>
|
|
658
|
+
<StructuredDataViewer data={io.data} />
|
|
659
|
+
</BoundedContent>
|
|
660
|
+
</div>
|
|
661
|
+
);
|
|
662
|
+
}
|
|
663
|
+
|
|
664
|
+
/**
|
|
665
|
+
* The always-visible body of a `"preview"`-kind card: the task's output
|
|
666
|
+
* (via the I/O fallback ladder), the failure detail when the task failed,
|
|
667
|
+
* and the agent-call transcript affordance. Content only — the header owns
|
|
668
|
+
* all metadata (session `ToolCallDetail` invariant).
|
|
669
|
+
*
|
|
670
|
+
* A resolved human_input gate supplies `approvalSummary` and gets the
|
|
671
|
+
* read-only decision report instead of the raw output Struct — the output
|
|
672
|
+
* IS the decision record, and the report is its readable rendering (T06).
|
|
673
|
+
*/
|
|
674
|
+
function ThreadTaskPreviewBody({
|
|
675
|
+
item,
|
|
676
|
+
outputIO,
|
|
677
|
+
approvalSummary,
|
|
678
|
+
onOpenAgentExecution,
|
|
679
|
+
}: {
|
|
680
|
+
readonly item: WorkflowThreadItem;
|
|
681
|
+
readonly outputIO: TaskDetailIO | null;
|
|
682
|
+
readonly approvalSummary?: {
|
|
683
|
+
readonly request: TaskApprovalRequestView;
|
|
684
|
+
readonly decision: TaskDetailApprovalDecision | null;
|
|
685
|
+
};
|
|
686
|
+
readonly onOpenAgentExecution?: (
|
|
687
|
+
childExecutionId: string,
|
|
688
|
+
taskName: string,
|
|
689
|
+
) => void;
|
|
690
|
+
}) {
|
|
691
|
+
return (
|
|
692
|
+
<div className="flex flex-col gap-2">
|
|
693
|
+
{item.error && (
|
|
694
|
+
<BoundedContent>
|
|
695
|
+
<pre className="whitespace-pre-wrap break-words text-xs text-destructive">
|
|
696
|
+
{item.error}
|
|
697
|
+
</pre>
|
|
698
|
+
</BoundedContent>
|
|
699
|
+
)}
|
|
700
|
+
|
|
701
|
+
{approvalSummary ? (
|
|
702
|
+
<WorkflowTaskApprovalSummary
|
|
703
|
+
taskName={item.taskName}
|
|
704
|
+
prompt={approvalSummary.request.prompt}
|
|
705
|
+
outcomes={approvalSummary.request.outcomes}
|
|
706
|
+
decision={approvalSummary.decision}
|
|
707
|
+
/>
|
|
708
|
+
) : (
|
|
709
|
+
outputIO && <ThreadTaskIOSection label="Output" io={outputIO} />
|
|
710
|
+
)}
|
|
711
|
+
|
|
712
|
+
{item.variant === "agent-call" &&
|
|
713
|
+
item.childExecutionId &&
|
|
714
|
+
onOpenAgentExecution && (
|
|
715
|
+
<div>
|
|
716
|
+
<ThreadActionButton
|
|
717
|
+
label="Open transcript"
|
|
718
|
+
onClick={() =>
|
|
719
|
+
onOpenAgentExecution(item.childExecutionId, item.taskName)
|
|
720
|
+
}
|
|
721
|
+
/>
|
|
722
|
+
</div>
|
|
723
|
+
)}
|
|
724
|
+
</div>
|
|
725
|
+
);
|
|
726
|
+
}
|
|
727
|
+
|
|
728
|
+
function ThreadTaskDetail({
|
|
729
|
+
item,
|
|
730
|
+
inputIO,
|
|
731
|
+
outputIO,
|
|
732
|
+
onOpenAgentExecution,
|
|
733
|
+
}: {
|
|
734
|
+
readonly item: WorkflowThreadItem;
|
|
735
|
+
readonly inputIO: TaskDetailIO | null;
|
|
736
|
+
readonly outputIO: TaskDetailIO | null;
|
|
737
|
+
readonly onOpenAgentExecution?: (
|
|
738
|
+
childExecutionId: string,
|
|
739
|
+
taskName: string,
|
|
740
|
+
) => void;
|
|
741
|
+
}) {
|
|
742
|
+
const rows: Array<[string, string]> = [["Status", statusLabel(item.status)]];
|
|
743
|
+
if (item.durationMs > 0) {
|
|
744
|
+
rows.push(["Duration", formatMetaChips({ durationMs: item.durationMs }) ?? ""]);
|
|
745
|
+
}
|
|
746
|
+
if (item.attemptNumber > 1) rows.push(["Attempt", String(item.attemptNumber)]);
|
|
747
|
+
const costChip = formatMetaChips({
|
|
748
|
+
costMicros: item.costMicros,
|
|
749
|
+
tokens: item.tokensUsed,
|
|
750
|
+
});
|
|
751
|
+
if (costChip) rows.push(["Usage", costChip]);
|
|
752
|
+
if (item.variant === "agent-call" && item.agentSlug) {
|
|
753
|
+
rows.push(["Agent", item.agentSlug]);
|
|
754
|
+
}
|
|
755
|
+
|
|
756
|
+
return (
|
|
757
|
+
<div className="flex flex-col gap-2">
|
|
758
|
+
<dl className="grid grid-cols-[auto_1fr] gap-x-4 gap-y-1 text-xs">
|
|
759
|
+
{rows.map(([label, value]) => (
|
|
760
|
+
<div key={label} className="contents">
|
|
761
|
+
<dt className="text-muted-foreground">{label}</dt>
|
|
762
|
+
<dd className="text-foreground">{value}</dd>
|
|
763
|
+
</div>
|
|
764
|
+
))}
|
|
765
|
+
</dl>
|
|
766
|
+
|
|
767
|
+
{item.error && (
|
|
768
|
+
<BoundedContent>
|
|
769
|
+
<pre className="whitespace-pre-wrap break-words text-xs text-destructive">
|
|
770
|
+
{item.error}
|
|
771
|
+
</pre>
|
|
772
|
+
</BoundedContent>
|
|
773
|
+
)}
|
|
774
|
+
|
|
775
|
+
{/* The task's I/O in the thread (T04) — all task detail belongs to
|
|
776
|
+
the card; Inspect is the opt-in debug drill-down. */}
|
|
777
|
+
{inputIO && <ThreadTaskIOSection label="Input" io={inputIO} />}
|
|
778
|
+
{outputIO && <ThreadTaskIOSection label="Output" io={outputIO} />}
|
|
779
|
+
|
|
780
|
+
{item.variant === "agent-call" &&
|
|
781
|
+
item.childExecutionId &&
|
|
782
|
+
onOpenAgentExecution && (
|
|
783
|
+
<div>
|
|
784
|
+
<ThreadActionButton
|
|
785
|
+
label="Open transcript"
|
|
786
|
+
onClick={() =>
|
|
787
|
+
onOpenAgentExecution(item.childExecutionId, item.taskName)
|
|
788
|
+
}
|
|
789
|
+
/>
|
|
790
|
+
</div>
|
|
791
|
+
)}
|
|
792
|
+
</div>
|
|
793
|
+
);
|
|
794
|
+
}
|
|
795
|
+
|
|
796
|
+
function statusLabel(status: WorkflowThreadItem["status"]): string {
|
|
797
|
+
switch (status) {
|
|
798
|
+
case "waiting_approval":
|
|
799
|
+
return "Waiting for approval";
|
|
800
|
+
case "retrying":
|
|
801
|
+
return "Retrying";
|
|
802
|
+
case "running":
|
|
803
|
+
return "Running";
|
|
804
|
+
case "completed":
|
|
805
|
+
return "Completed";
|
|
806
|
+
case "failed":
|
|
807
|
+
return "Failed";
|
|
808
|
+
case "skipped":
|
|
809
|
+
return "Skipped";
|
|
810
|
+
case "pending":
|
|
811
|
+
return "Pending";
|
|
812
|
+
}
|
|
813
|
+
}
|
|
814
|
+
|
|
815
|
+
// ---------------------------------------------------------------------------
|
|
816
|
+
// Status glyph — the shared thread-card set, colored by status token (T05)
|
|
817
|
+
// ---------------------------------------------------------------------------
|
|
818
|
+
|
|
819
|
+
/**
|
|
820
|
+
* Maps a task's derived status onto the shared glyph vocabulary the session
|
|
821
|
+
* tool card uses (`internal/thread-card/glyphs`), colored strictly through
|
|
822
|
+
* status token classes — the old dot set's hardcoded hex fallbacks were a
|
|
823
|
+
* Dont-Do #3 violation and died with it.
|
|
824
|
+
*/
|
|
825
|
+
const STATUS_GLYPH: Record<
|
|
826
|
+
WorkflowThreadItem["status"],
|
|
827
|
+
{ readonly Icon: () => React.JSX.Element; readonly color: string }
|
|
828
|
+
> = {
|
|
829
|
+
running: { Icon: SpinnerIcon, color: "text-foreground" },
|
|
830
|
+
retrying: { Icon: SpinnerIcon, color: "text-warning" },
|
|
831
|
+
waiting_approval: { Icon: ClockIcon, color: "text-warning" },
|
|
832
|
+
completed: { Icon: CheckCircleIcon, color: "text-success" },
|
|
833
|
+
failed: { Icon: XCircleIcon, color: "text-destructive" },
|
|
834
|
+
skipped: { Icon: SlashCircleIcon, color: "text-muted-foreground" },
|
|
835
|
+
pending: { Icon: DotIcon, color: "text-muted-foreground" },
|
|
836
|
+
};
|
|
837
|
+
|
|
838
|
+
function StatusGlyph({ status }: { readonly status: WorkflowThreadItem["status"] }) {
|
|
839
|
+
const { Icon, color } = STATUS_GLYPH[status];
|
|
840
|
+
return (
|
|
841
|
+
<span className={cn("shrink-0", color)} aria-hidden="true">
|
|
842
|
+
<Icon />
|
|
843
|
+
</span>
|
|
844
|
+
);
|
|
845
|
+
}
|