@stigmer/react 3.1.17 → 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/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/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/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__/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/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,688 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { useCallback, useState } from "react";
|
|
4
|
+
import { KeyRound, MessageSquare, MoreHorizontal, Trash2 } from "lucide-react";
|
|
5
|
+
import { cn } from "@stigmer/theme";
|
|
6
|
+
import { getUserMessage } from "@stigmer/sdk";
|
|
7
|
+
import type { Agent } from "@stigmer/protos/ai/stigmer/agentic/agent/v1/api_pb";
|
|
8
|
+
import type { AgentChannel } from "@stigmer/protos/ai/stigmer/agentic/agentchannel/v1/api_pb";
|
|
9
|
+
import type { ChannelApp } from "@stigmer/protos/ai/stigmer/agentic/channelapp/v1/api_pb";
|
|
10
|
+
import { AgentChannelInstallState } from "@stigmer/protos/ai/stigmer/agentic/agentchannel/v1/status_pb";
|
|
11
|
+
import { toast } from "../feedback/toast.js";
|
|
12
|
+
import { ActionMenu } from "../action-menu/index.js";
|
|
13
|
+
import { Button } from "../button/Button.js";
|
|
14
|
+
import { EmptyState } from "../empty-state/EmptyState.js";
|
|
15
|
+
import { Switch } from "../switch/Switch.js";
|
|
16
|
+
import { useChannelAppList } from "../channel-app/useChannelAppList.js";
|
|
17
|
+
import { useCheckPermission } from "../iam-policy/useCheckPermission.js";
|
|
18
|
+
import { ConfirmDialog } from "../resource-detail/ConfirmDialog.js";
|
|
19
|
+
import { useConfirmAction } from "../resource-detail/useConfirmAction.js";
|
|
20
|
+
import { useDeploymentMode } from "../deployment-mode.js";
|
|
21
|
+
import { CloudFeatureNotice } from "../internal/CloudFeatureNotice.js";
|
|
22
|
+
import { ChannelConversationsDialog } from "./ChannelConversationsDialog.js";
|
|
23
|
+
import { ChannelCredentialsDialog } from "./ChannelCredentialsDialog.js";
|
|
24
|
+
import { ConnectSlackDialog } from "./ConnectSlackDialog.js";
|
|
25
|
+
import { ConnectWhatsAppDialog } from "./ConnectWhatsAppDialog.js";
|
|
26
|
+
import {
|
|
27
|
+
CHANNEL_PROVIDERS,
|
|
28
|
+
channelProviderOf,
|
|
29
|
+
type ChannelProviderDescriptor,
|
|
30
|
+
} from "./providers.js";
|
|
31
|
+
import {
|
|
32
|
+
channelPresentationOf,
|
|
33
|
+
DEFAULT_CHANNEL_PRESENTATION,
|
|
34
|
+
} from "./providerPresentation.js";
|
|
35
|
+
import { useAgentChannelList } from "./useAgentChannelList.js";
|
|
36
|
+
import { useChannelToolReadiness } from "./useChannelToolReadiness.js";
|
|
37
|
+
import { useDeleteAgentChannel } from "./useDeleteAgentChannel.js";
|
|
38
|
+
import { agentChannelToInput, useSaveAgentChannel } from "./useSaveAgentChannel.js";
|
|
39
|
+
|
|
40
|
+
/** Props for {@link AgentChannelsPanel}. */
|
|
41
|
+
export interface AgentChannelsPanelProps {
|
|
42
|
+
/** The agent whose channels are managed. */
|
|
43
|
+
readonly agent: Agent;
|
|
44
|
+
/**
|
|
45
|
+
* When provided, connect actions for redirect-style providers (Slack)
|
|
46
|
+
* delegate to the host instead of running the in-app popup flow. For
|
|
47
|
+
* hosts whose webview cannot open popups (the desktop app): the
|
|
48
|
+
* delegate typically opens the web console in the system browser.
|
|
49
|
+
* Called with the channel being (re)connected, or `null` for a
|
|
50
|
+
* brand-new connection. Direct-install providers (WhatsApp) always
|
|
51
|
+
* connect in-app — their flow is a plain API call with nothing for a
|
|
52
|
+
* popup to do — so they never invoke the delegate.
|
|
53
|
+
*/
|
|
54
|
+
readonly onConnectExternal?: (channel: AgentChannel | null) => void;
|
|
55
|
+
/**
|
|
56
|
+
* Where the host manages Channel Apps (the console passes
|
|
57
|
+
* `/settings/channel-apps`). Threaded to the connect dialog's
|
|
58
|
+
* "Register a channel app" affordance; absent, the affordance
|
|
59
|
+
* degrades to plain guidance text.
|
|
60
|
+
*/
|
|
61
|
+
readonly channelAppsHref?: string;
|
|
62
|
+
/**
|
|
63
|
+
* Maps a session id to the host's session route (the console passes
|
|
64
|
+
* `` (id) => `/sessions/${id}` ``). Threaded to each card's
|
|
65
|
+
* Conversations dialog so rows link to the read-only transcript;
|
|
66
|
+
* absent, the rows render without links (DD-004 — the SDK never
|
|
67
|
+
* assumes a routing scheme).
|
|
68
|
+
*/
|
|
69
|
+
readonly sessionHref?: (sessionId: string) => string;
|
|
70
|
+
/** Additional CSS class names. */
|
|
71
|
+
readonly className?: string;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Management surface for an agent's {@link AgentChannel} connections —
|
|
76
|
+
* rendered in the agent detail view's Channels tab.
|
|
77
|
+
*
|
|
78
|
+
* One card per channel showing the two serving axes side by side: the
|
|
79
|
+
* observed provider install state (`pending_install` / `installed` /
|
|
80
|
+
* `revoked`) and the owner's serving switch (`spec.enabled`). Traffic
|
|
81
|
+
* flows only when installed AND enabled. Channels always live in the
|
|
82
|
+
* agent's own org (no cross-org arm, unlike shares), so no org selector
|
|
83
|
+
* is needed.
|
|
84
|
+
*
|
|
85
|
+
* Connecting runs the provider's own dialog — {@link ConnectSlackDialog}
|
|
86
|
+
* (OAuth popup) or {@link ConnectWhatsAppDialog} (direct install). On a
|
|
87
|
+
* `local` (OSS) backend, channel CRUD works but installs are cloud-only —
|
|
88
|
+
* connect affordances are replaced by a cloud-feature notice, matching
|
|
89
|
+
* the server's FAILED_PRECONDITION posture.
|
|
90
|
+
*
|
|
91
|
+
* Self-contained: owns its dialog, its confirmation prompts, and its
|
|
92
|
+
* refetch-after-mutation — hosts render it with just the agent (plus the
|
|
93
|
+
* external-connect delegate where popups are unavailable).
|
|
94
|
+
*
|
|
95
|
+
* This is an SDK component (DD-001) — embeddable by platform builders.
|
|
96
|
+
*/
|
|
97
|
+
export function AgentChannelsPanel({
|
|
98
|
+
agent,
|
|
99
|
+
onConnectExternal,
|
|
100
|
+
channelAppsHref,
|
|
101
|
+
sessionHref,
|
|
102
|
+
className,
|
|
103
|
+
}: AgentChannelsPanelProps) {
|
|
104
|
+
const agentId = agent.metadata?.id ?? "";
|
|
105
|
+
// Channels are same-org by invariant; scope the list to the agent's org.
|
|
106
|
+
const { channels, isLoading, error, refetch } = useAgentChannelList(
|
|
107
|
+
agentId,
|
|
108
|
+
agent.metadata?.org ?? "",
|
|
109
|
+
);
|
|
110
|
+
|
|
111
|
+
// One fetch for all cards: a channel's spec.app_ref carries only the
|
|
112
|
+
// slug, but the app's name is the bot name members @mention — the
|
|
113
|
+
// label worth showing.
|
|
114
|
+
const { channelApps } = useChannelAppList(agent.metadata?.org || null);
|
|
115
|
+
|
|
116
|
+
// Mirrors the server's create bar (agent can_edit — the permission the
|
|
117
|
+
// create/apply handlers enforce on the referenced agent) so the connect
|
|
118
|
+
// affordance never appears to a viewer whose create would be refused.
|
|
119
|
+
const { allowed: canCreate } = useCheckPermission(
|
|
120
|
+
agentId ? { kind: "agent", id: agentId } : null,
|
|
121
|
+
"can_edit",
|
|
122
|
+
);
|
|
123
|
+
|
|
124
|
+
// Installs are cloud-only; CRUD is not. In local mode the cards render
|
|
125
|
+
// and toggles work, but connect affordances give way to the notice.
|
|
126
|
+
const installsAvailable = useDeploymentMode() === "cloud";
|
|
127
|
+
|
|
128
|
+
const { deleteChannel } = useDeleteAgentChannel();
|
|
129
|
+
const { confirmState, confirm, handleConfirm, handleCancel } =
|
|
130
|
+
useConfirmAction();
|
|
131
|
+
|
|
132
|
+
// One dialog mount serves both flows per provider: connecting the
|
|
133
|
+
// chosen channel, or creating a new one and connecting it in the same
|
|
134
|
+
// session. The provider picks which dialog renders.
|
|
135
|
+
const [connecting, setConnecting] = useState<
|
|
136
|
+
| { readonly mode: "create"; readonly provider: ChannelProviderDescriptor }
|
|
137
|
+
| { readonly mode: "reconnect"; readonly channel: AgentChannel }
|
|
138
|
+
| null
|
|
139
|
+
>(null);
|
|
140
|
+
|
|
141
|
+
// The channel whose tool-credential bindings are being edited.
|
|
142
|
+
const [editingCredentials, setEditingCredentials] =
|
|
143
|
+
useState<AgentChannel | null>(null);
|
|
144
|
+
|
|
145
|
+
// The channel whose conversations are being viewed (DD-012: read-only
|
|
146
|
+
// channel-session observability for the channel's viewers).
|
|
147
|
+
const [viewingConversations, setViewingConversations] =
|
|
148
|
+
useState<AgentChannel | null>(null);
|
|
149
|
+
|
|
150
|
+
const handleConnect = useCallback(
|
|
151
|
+
(channel: AgentChannel | null, provider: ChannelProviderDescriptor) => {
|
|
152
|
+
// Only redirect-style installs need the host hand-off (they open a
|
|
153
|
+
// popup the desktop webview cannot); direct installs are a plain
|
|
154
|
+
// API call and run in-app everywhere.
|
|
155
|
+
if (provider.installStyle === "redirect" && onConnectExternal) {
|
|
156
|
+
onConnectExternal(channel);
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
setConnecting(
|
|
160
|
+
channel ? { mode: "reconnect", channel } : { mode: "create", provider },
|
|
161
|
+
);
|
|
162
|
+
},
|
|
163
|
+
[onConnectExternal],
|
|
164
|
+
);
|
|
165
|
+
|
|
166
|
+
const handleDelete = useCallback(
|
|
167
|
+
async (channel: AgentChannel) => {
|
|
168
|
+
const name = channel.metadata?.name || channel.metadata?.slug || "this channel";
|
|
169
|
+
const presentation =
|
|
170
|
+
channelPresentationOf(channel.spec?.providerConfig?.case) ??
|
|
171
|
+
DEFAULT_CHANNEL_PRESENTATION;
|
|
172
|
+
const confirmed = await confirm({
|
|
173
|
+
title: "Disconnect channel?",
|
|
174
|
+
description: presentation.disconnectDescription(name),
|
|
175
|
+
confirmLabel: "Disconnect",
|
|
176
|
+
variant: "destructive",
|
|
177
|
+
});
|
|
178
|
+
if (!confirmed) return;
|
|
179
|
+
try {
|
|
180
|
+
await deleteChannel(channel.metadata?.id ?? "");
|
|
181
|
+
toast.success("Channel disconnected");
|
|
182
|
+
refetch();
|
|
183
|
+
} catch (err) {
|
|
184
|
+
toast.error(getUserMessage(err));
|
|
185
|
+
}
|
|
186
|
+
},
|
|
187
|
+
[confirm, deleteChannel, refetch],
|
|
188
|
+
);
|
|
189
|
+
|
|
190
|
+
if (isLoading) {
|
|
191
|
+
return <LoadingSkeleton />;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
if (error) {
|
|
195
|
+
return (
|
|
196
|
+
<div className="py-8 text-center text-sm text-destructive">
|
|
197
|
+
Failed to load channels
|
|
198
|
+
</div>
|
|
199
|
+
);
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
const showCloudNotice =
|
|
203
|
+
!installsAvailable &&
|
|
204
|
+
(channels.length === 0 ||
|
|
205
|
+
channels.some(
|
|
206
|
+
(c) => installStateOf(c) !== AgentChannelInstallState.installed,
|
|
207
|
+
));
|
|
208
|
+
|
|
209
|
+
// Whether a provider's connect affordance is actionable here: installs
|
|
210
|
+
// are cloud-only, but redirect-style providers can still hand off to
|
|
211
|
+
// the host (the desktop → system-browser path). Direct-style providers
|
|
212
|
+
// have no hand-off — in local mode their affordance yields to the
|
|
213
|
+
// cloud notice.
|
|
214
|
+
const canConnectVia = (p: ChannelProviderDescriptor) =>
|
|
215
|
+
canCreate &&
|
|
216
|
+
(installsAvailable || (p.installStyle === "redirect" && !!onConnectExternal));
|
|
217
|
+
const connectableProviders = CHANNEL_PROVIDERS.filter(canConnectVia);
|
|
218
|
+
|
|
219
|
+
// The provider of the in-flight connect flow: chosen by the user in
|
|
220
|
+
// create mode, the channel's own on a reconnect. Unknown cases (a
|
|
221
|
+
// newer server) fall back to the default provider, matching the card.
|
|
222
|
+
const connectingProvider =
|
|
223
|
+
connecting === null
|
|
224
|
+
? null
|
|
225
|
+
: connecting.mode === "create"
|
|
226
|
+
? connecting.provider
|
|
227
|
+
: channelProviderOf(connecting.channel.spec?.providerConfig?.case) ??
|
|
228
|
+
CHANNEL_PROVIDERS[0];
|
|
229
|
+
|
|
230
|
+
return (
|
|
231
|
+
<div className={cn("space-y-3", className)}>
|
|
232
|
+
{showCloudNotice && (
|
|
233
|
+
<CloudFeatureNotice>
|
|
234
|
+
Channel installs require Stigmer Cloud — connecting an agent to
|
|
235
|
+
Slack or WhatsApp runs through the platform's hosted webhook
|
|
236
|
+
infrastructure. Channel configuration still works here.
|
|
237
|
+
</CloudFeatureNotice>
|
|
238
|
+
)}
|
|
239
|
+
|
|
240
|
+
{channels.length === 0 ? (
|
|
241
|
+
<ChannelEmptyState
|
|
242
|
+
providers={connectableProviders}
|
|
243
|
+
onConnectClick={(p) => handleConnect(null, p)}
|
|
244
|
+
/>
|
|
245
|
+
) : (
|
|
246
|
+
<>
|
|
247
|
+
<div className="flex items-center justify-between gap-2">
|
|
248
|
+
<h3 className="text-sm font-medium text-foreground">
|
|
249
|
+
{channels.length} {channels.length === 1 ? "channel" : "channels"}
|
|
250
|
+
</h3>
|
|
251
|
+
{/* One visible button per provider — deliberately not a
|
|
252
|
+
dropdown: two options are clearer side by side, and each
|
|
253
|
+
keeps its own stable cursor target (see providers.ts). */}
|
|
254
|
+
{connectableProviders.length > 0 && (
|
|
255
|
+
<div className="flex shrink-0 items-center gap-2">
|
|
256
|
+
{connectableProviders.map((p) => (
|
|
257
|
+
<Button
|
|
258
|
+
key={p.id}
|
|
259
|
+
variant="outline"
|
|
260
|
+
size="xs"
|
|
261
|
+
icon={<p.Icon className="size-3" />}
|
|
262
|
+
onClick={() => handleConnect(null, p)}
|
|
263
|
+
data-cursor-target={`connect-${p.id}`}
|
|
264
|
+
>
|
|
265
|
+
Connect to {p.label}
|
|
266
|
+
</Button>
|
|
267
|
+
))}
|
|
268
|
+
</div>
|
|
269
|
+
)}
|
|
270
|
+
</div>
|
|
271
|
+
|
|
272
|
+
<div className="space-y-2">
|
|
273
|
+
{channels.map((channel) => {
|
|
274
|
+
const cardProvider =
|
|
275
|
+
channelProviderOf(channel.spec?.providerConfig?.case) ??
|
|
276
|
+
CHANNEL_PROVIDERS[0];
|
|
277
|
+
return (
|
|
278
|
+
<ChannelCard
|
|
279
|
+
key={channel.metadata?.id}
|
|
280
|
+
agent={agent}
|
|
281
|
+
channel={channel}
|
|
282
|
+
channelApps={channelApps}
|
|
283
|
+
connectAvailable={
|
|
284
|
+
installsAvailable ||
|
|
285
|
+
(cardProvider.installStyle === "redirect" &&
|
|
286
|
+
!!onConnectExternal)
|
|
287
|
+
}
|
|
288
|
+
onConnectClick={() => handleConnect(channel, cardProvider)}
|
|
289
|
+
onDeleteClick={() => void handleDelete(channel)}
|
|
290
|
+
onEditCredentials={() => setEditingCredentials(channel)}
|
|
291
|
+
onViewConversations={() => setViewingConversations(channel)}
|
|
292
|
+
refetch={refetch}
|
|
293
|
+
/>
|
|
294
|
+
);
|
|
295
|
+
})}
|
|
296
|
+
</div>
|
|
297
|
+
</>
|
|
298
|
+
)}
|
|
299
|
+
|
|
300
|
+
{connecting && connectingProvider?.id === "whatsapp" ? (
|
|
301
|
+
<ConnectWhatsAppDialog
|
|
302
|
+
open
|
|
303
|
+
onOpenChange={(open) => {
|
|
304
|
+
if (!open) setConnecting(null);
|
|
305
|
+
}}
|
|
306
|
+
agent={agent}
|
|
307
|
+
channel={connecting.mode === "reconnect" ? connecting.channel : undefined}
|
|
308
|
+
onChannelsChanged={refetch}
|
|
309
|
+
channelAppsHref={channelAppsHref}
|
|
310
|
+
/>
|
|
311
|
+
) : connecting ? (
|
|
312
|
+
<ConnectSlackDialog
|
|
313
|
+
open
|
|
314
|
+
onOpenChange={(open) => {
|
|
315
|
+
if (!open) setConnecting(null);
|
|
316
|
+
}}
|
|
317
|
+
agent={agent}
|
|
318
|
+
channel={connecting.mode === "reconnect" ? connecting.channel : undefined}
|
|
319
|
+
onChannelsChanged={refetch}
|
|
320
|
+
channelAppsHref={channelAppsHref}
|
|
321
|
+
/>
|
|
322
|
+
) : null}
|
|
323
|
+
|
|
324
|
+
{editingCredentials && (
|
|
325
|
+
<ChannelCredentialsDialog
|
|
326
|
+
open
|
|
327
|
+
onOpenChange={(open) => {
|
|
328
|
+
if (!open) setEditingCredentials(null);
|
|
329
|
+
}}
|
|
330
|
+
agent={agent}
|
|
331
|
+
channel={editingCredentials}
|
|
332
|
+
onSaved={refetch}
|
|
333
|
+
/>
|
|
334
|
+
)}
|
|
335
|
+
|
|
336
|
+
{viewingConversations && (
|
|
337
|
+
<ChannelConversationsDialog
|
|
338
|
+
open
|
|
339
|
+
onOpenChange={(open) => {
|
|
340
|
+
if (!open) setViewingConversations(null);
|
|
341
|
+
}}
|
|
342
|
+
channel={viewingConversations}
|
|
343
|
+
sessionHref={sessionHref}
|
|
344
|
+
/>
|
|
345
|
+
)}
|
|
346
|
+
|
|
347
|
+
<ConfirmDialog
|
|
348
|
+
state={confirmState}
|
|
349
|
+
onConfirm={handleConfirm}
|
|
350
|
+
onCancel={handleCancel}
|
|
351
|
+
/>
|
|
352
|
+
</div>
|
|
353
|
+
);
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
// ---------------------------------------------------------------------------
|
|
357
|
+
// Card — one provider connection
|
|
358
|
+
// ---------------------------------------------------------------------------
|
|
359
|
+
|
|
360
|
+
interface ChannelCardProps {
|
|
361
|
+
readonly agent: Agent;
|
|
362
|
+
readonly channel: AgentChannel;
|
|
363
|
+
readonly channelApps: readonly ChannelApp[];
|
|
364
|
+
/** Whether the card's Connect/Reconnect affordance is actionable here. */
|
|
365
|
+
readonly connectAvailable: boolean;
|
|
366
|
+
readonly onConnectClick: () => void;
|
|
367
|
+
readonly onDeleteClick: () => void;
|
|
368
|
+
readonly onEditCredentials: () => void;
|
|
369
|
+
readonly onViewConversations: () => void;
|
|
370
|
+
readonly refetch: () => void;
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
function ChannelCard({
|
|
374
|
+
agent,
|
|
375
|
+
channel,
|
|
376
|
+
channelApps,
|
|
377
|
+
connectAvailable,
|
|
378
|
+
onConnectClick,
|
|
379
|
+
onDeleteClick,
|
|
380
|
+
onEditCredentials,
|
|
381
|
+
onViewConversations,
|
|
382
|
+
refetch,
|
|
383
|
+
}: ChannelCardProps) {
|
|
384
|
+
const meta = channel.metadata;
|
|
385
|
+
const id = meta?.id ?? "";
|
|
386
|
+
const enabled = channel.spec?.enabled ?? false;
|
|
387
|
+
const installState = installStateOf(channel);
|
|
388
|
+
// The serving app (T04 item 2): set means the channel installs through
|
|
389
|
+
// the org's own channel app; absent means the platform Stigmer app
|
|
390
|
+
// (Slack only — WhatsApp always has one, DD-WA-2). The app's NAME is
|
|
391
|
+
// the identity people address, so prefer it over the ref's slug when
|
|
392
|
+
// the app is in the fetched list (it may not be — e.g. the app was
|
|
393
|
+
// deleted after install).
|
|
394
|
+
const servingAppSlug = channel.spec?.appRef?.slug || null;
|
|
395
|
+
const servingAppName = servingAppSlug
|
|
396
|
+
? channelApps.find((app) => app.metadata?.slug === servingAppSlug)
|
|
397
|
+
?.metadata?.name || servingAppSlug
|
|
398
|
+
: null;
|
|
399
|
+
|
|
400
|
+
// The spec's provider marker is set at create; unknown cases (a newer
|
|
401
|
+
// server) fall back to the default provider mark rather than no icon,
|
|
402
|
+
// and to the default presentation rather than no copy.
|
|
403
|
+
const provider =
|
|
404
|
+
channelProviderOf(channel.spec?.providerConfig?.case) ?? CHANNEL_PROVIDERS[0];
|
|
405
|
+
const presentation =
|
|
406
|
+
channelPresentationOf(channel.spec?.providerConfig?.case) ??
|
|
407
|
+
DEFAULT_CHANNEL_PRESENTATION;
|
|
408
|
+
|
|
409
|
+
const { save, isPending } = useSaveAgentChannel();
|
|
410
|
+
|
|
411
|
+
// Decide the card's actions here (not via nested permission wrappers) so
|
|
412
|
+
// affordances are hidden entirely when the viewer can do nothing —
|
|
413
|
+
// permissive in OSS, so local single-user sees all.
|
|
414
|
+
const { allowed: canEdit } = useCheckPermission(
|
|
415
|
+
{ kind: "agent_channel", id },
|
|
416
|
+
"can_edit",
|
|
417
|
+
);
|
|
418
|
+
const { allowed: canDelete } = useCheckPermission(
|
|
419
|
+
{ kind: "agent_channel", id },
|
|
420
|
+
"can_delete",
|
|
421
|
+
);
|
|
422
|
+
|
|
423
|
+
// On/off is a full-input save with only `enabled` flipped —
|
|
424
|
+
// agentChannelToInput guarantees the toggle can never wipe the agent
|
|
425
|
+
// reference or the provider marker (the fails-closed posture shares use).
|
|
426
|
+
const handleToggleEnabled = useCallback(
|
|
427
|
+
async (next: boolean) => {
|
|
428
|
+
try {
|
|
429
|
+
await save({ ...agentChannelToInput(channel), enabled: next });
|
|
430
|
+
toast.success(next ? "Channel turned on" : "Channel turned off");
|
|
431
|
+
refetch();
|
|
432
|
+
} catch (err) {
|
|
433
|
+
toast.error(getUserMessage(err));
|
|
434
|
+
}
|
|
435
|
+
},
|
|
436
|
+
[save, channel, refetch],
|
|
437
|
+
);
|
|
438
|
+
|
|
439
|
+
return (
|
|
440
|
+
<div className="rounded-lg border border-border p-4">
|
|
441
|
+
<div className="flex items-start justify-between gap-3">
|
|
442
|
+
<div className="flex min-w-0 items-center gap-2.5">
|
|
443
|
+
<provider.Icon className="size-5 shrink-0 text-foreground" />
|
|
444
|
+
<div className="min-w-0">
|
|
445
|
+
<div className="flex items-center gap-2">
|
|
446
|
+
<span
|
|
447
|
+
className="truncate text-sm font-medium text-foreground"
|
|
448
|
+
title={meta?.name || meta?.slug || undefined}
|
|
449
|
+
>
|
|
450
|
+
{meta?.name || meta?.slug || "\u2014"}
|
|
451
|
+
</span>
|
|
452
|
+
<InstallStatePill state={installState} />
|
|
453
|
+
</div>
|
|
454
|
+
<p className="mt-0.5 text-xs text-muted-foreground">
|
|
455
|
+
{presentation.describeChannel(channel)}
|
|
456
|
+
</p>
|
|
457
|
+
<p className="mt-0.5 text-xs text-muted-foreground-faint">
|
|
458
|
+
{presentation.servingLine(servingAppName)}
|
|
459
|
+
</p>
|
|
460
|
+
</div>
|
|
461
|
+
</div>
|
|
462
|
+
|
|
463
|
+
<div className="flex shrink-0 items-center gap-2">
|
|
464
|
+
{canEdit && installState === AgentChannelInstallState.installed && (
|
|
465
|
+
<Switch
|
|
466
|
+
checked={enabled}
|
|
467
|
+
onCheckedChange={(next) => void handleToggleEnabled(next)}
|
|
468
|
+
disabled={isPending}
|
|
469
|
+
aria-label={`Turn ${meta?.name || meta?.slug || "channel"} ${enabled ? "off" : "on"}`}
|
|
470
|
+
/>
|
|
471
|
+
)}
|
|
472
|
+
{canEdit &&
|
|
473
|
+
connectAvailable &&
|
|
474
|
+
installState !== AgentChannelInstallState.installed && (
|
|
475
|
+
<Button variant="outline" size="xs" onClick={onConnectClick}>
|
|
476
|
+
{installState === AgentChannelInstallState.revoked
|
|
477
|
+
? "Reconnect"
|
|
478
|
+
: "Connect"}
|
|
479
|
+
</Button>
|
|
480
|
+
)}
|
|
481
|
+
{/* The menu always renders: everyone who can see the card holds
|
|
482
|
+
can_view on the channel (the FGA-filtered list), which is
|
|
483
|
+
exactly the bar for viewing its conversations (DD-012). */}
|
|
484
|
+
<ActionMenu>
|
|
485
|
+
<ActionMenu.Trigger
|
|
486
|
+
aria-label={`Actions for ${meta?.name || meta?.slug}`}
|
|
487
|
+
>
|
|
488
|
+
<MoreHorizontal className="size-4" />
|
|
489
|
+
</ActionMenu.Trigger>
|
|
490
|
+
<ActionMenu.Content>
|
|
491
|
+
<ActionMenu.Item
|
|
492
|
+
icon={<MessageSquare />}
|
|
493
|
+
onSelect={onViewConversations}
|
|
494
|
+
data-cursor-target="channel-conversations"
|
|
495
|
+
>
|
|
496
|
+
Conversations
|
|
497
|
+
</ActionMenu.Item>
|
|
498
|
+
{canEdit && (
|
|
499
|
+
<ActionMenu.Item
|
|
500
|
+
icon={<KeyRound />}
|
|
501
|
+
onSelect={onEditCredentials}
|
|
502
|
+
>
|
|
503
|
+
Tool credentials
|
|
504
|
+
</ActionMenu.Item>
|
|
505
|
+
)}
|
|
506
|
+
{canDelete && (
|
|
507
|
+
<ActionMenu.Item
|
|
508
|
+
icon={<Trash2 />}
|
|
509
|
+
variant="destructive"
|
|
510
|
+
onSelect={onDeleteClick}
|
|
511
|
+
>
|
|
512
|
+
Disconnect
|
|
513
|
+
</ActionMenu.Item>
|
|
514
|
+
)}
|
|
515
|
+
</ActionMenu.Content>
|
|
516
|
+
</ActionMenu>
|
|
517
|
+
</div>
|
|
518
|
+
</div>
|
|
519
|
+
|
|
520
|
+
<CardReadinessWarning
|
|
521
|
+
agent={agent}
|
|
522
|
+
channel={channel}
|
|
523
|
+
canEdit={canEdit}
|
|
524
|
+
onEditCredentials={onEditCredentials}
|
|
525
|
+
/>
|
|
526
|
+
</div>
|
|
527
|
+
);
|
|
528
|
+
}
|
|
529
|
+
|
|
530
|
+
/**
|
|
531
|
+
* Serving-readiness warning for tool-using agents: channel executions
|
|
532
|
+
* receive credentials only from the channel's own bindings, so an
|
|
533
|
+
* installed, enabled channel with none (or with a private binding) will
|
|
534
|
+
* refuse the first workspace message that needs a tool. The card is
|
|
535
|
+
* where an owner — including one who connected before credential
|
|
536
|
+
* binding existed — discovers the gap, instead of hearing about it from
|
|
537
|
+
* a confused workspace member.
|
|
538
|
+
*/
|
|
539
|
+
function CardReadinessWarning({
|
|
540
|
+
agent,
|
|
541
|
+
channel,
|
|
542
|
+
canEdit,
|
|
543
|
+
onEditCredentials,
|
|
544
|
+
}: {
|
|
545
|
+
readonly agent: Agent;
|
|
546
|
+
readonly channel: AgentChannel;
|
|
547
|
+
readonly canEdit: boolean;
|
|
548
|
+
readonly onEditCredentials: () => void;
|
|
549
|
+
}) {
|
|
550
|
+
const serving =
|
|
551
|
+
(channel.spec?.enabled ?? false) &&
|
|
552
|
+
installStateOf(channel) === AgentChannelInstallState.installed;
|
|
553
|
+
const readiness = useChannelToolReadiness(
|
|
554
|
+
agent,
|
|
555
|
+
serving,
|
|
556
|
+
channel.spec?.environmentRefs ?? [],
|
|
557
|
+
);
|
|
558
|
+
|
|
559
|
+
if (readiness.status !== "needs-credentials" && readiness.status !== "blocked") {
|
|
560
|
+
return null;
|
|
561
|
+
}
|
|
562
|
+
|
|
563
|
+
const message =
|
|
564
|
+
readiness.status === "needs-credentials"
|
|
565
|
+
? "This agent uses tools, but no credentials are bound to this channel — workspace messages that need a tool will be refused."
|
|
566
|
+
: `Bound environment${readiness.privateEnvironments.length > 1 ? "s" : ""} ${readiness.privateEnvironments.join(", ")} ${readiness.privateEnvironments.length > 1 ? "are" : "is"} private — share ${readiness.privateEnvironments.length > 1 ? "them" : "it"} with your organization so workspace messages can use the credentials.`;
|
|
567
|
+
|
|
568
|
+
return (
|
|
569
|
+
<p className="mt-2 text-xs text-warning" role="status">
|
|
570
|
+
{message}
|
|
571
|
+
{canEdit && (
|
|
572
|
+
<>
|
|
573
|
+
{" "}
|
|
574
|
+
<button
|
|
575
|
+
type="button"
|
|
576
|
+
onClick={onEditCredentials}
|
|
577
|
+
className={cn(
|
|
578
|
+
"font-medium underline underline-offset-2",
|
|
579
|
+
"hover:text-foreground",
|
|
580
|
+
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring rounded",
|
|
581
|
+
)}
|
|
582
|
+
>
|
|
583
|
+
Bind credentials
|
|
584
|
+
</button>
|
|
585
|
+
</>
|
|
586
|
+
)}
|
|
587
|
+
</p>
|
|
588
|
+
);
|
|
589
|
+
}
|
|
590
|
+
|
|
591
|
+
// ---------------------------------------------------------------------------
|
|
592
|
+
// Install-state rendering
|
|
593
|
+
// ---------------------------------------------------------------------------
|
|
594
|
+
|
|
595
|
+
function installStateOf(channel: AgentChannel): AgentChannelInstallState {
|
|
596
|
+
return (
|
|
597
|
+
channel.status?.installState ??
|
|
598
|
+
AgentChannelInstallState.agent_channel_install_state_unspecified
|
|
599
|
+
);
|
|
600
|
+
}
|
|
601
|
+
|
|
602
|
+
function InstallStatePill({ state }: { readonly state: AgentChannelInstallState }) {
|
|
603
|
+
const { label, tone } = (() => {
|
|
604
|
+
switch (state) {
|
|
605
|
+
case AgentChannelInstallState.installed:
|
|
606
|
+
return { label: "Installed", tone: "text-success" };
|
|
607
|
+
case AgentChannelInstallState.revoked:
|
|
608
|
+
return { label: "Revoked", tone: "text-destructive" };
|
|
609
|
+
default:
|
|
610
|
+
return { label: "Pending install", tone: "text-muted-foreground" };
|
|
611
|
+
}
|
|
612
|
+
})();
|
|
613
|
+
|
|
614
|
+
return (
|
|
615
|
+
<span
|
|
616
|
+
className={cn(
|
|
617
|
+
"inline-flex shrink-0 items-center gap-1.5 text-xs",
|
|
618
|
+
tone,
|
|
619
|
+
)}
|
|
620
|
+
>
|
|
621
|
+
<span aria-hidden="true" className="size-1.5 rounded-full bg-current" />
|
|
622
|
+
{label}
|
|
623
|
+
</span>
|
|
624
|
+
);
|
|
625
|
+
}
|
|
626
|
+
|
|
627
|
+
// ---------------------------------------------------------------------------
|
|
628
|
+
// Empty + loading states
|
|
629
|
+
// ---------------------------------------------------------------------------
|
|
630
|
+
|
|
631
|
+
function ChannelEmptyState({
|
|
632
|
+
providers,
|
|
633
|
+
onConnectClick,
|
|
634
|
+
}: {
|
|
635
|
+
/** The providers the viewer can connect through, in display order. */
|
|
636
|
+
readonly providers: readonly ChannelProviderDescriptor[];
|
|
637
|
+
readonly onConnectClick: (provider: ChannelProviderDescriptor) => void;
|
|
638
|
+
}) {
|
|
639
|
+
const providerLabels = CHANNEL_PROVIDERS.map((p) => p.label).join(" or ");
|
|
640
|
+
return (
|
|
641
|
+
<EmptyState
|
|
642
|
+
variant="first-use"
|
|
643
|
+
icon={
|
|
644
|
+
<span className="flex items-center gap-2">
|
|
645
|
+
{CHANNEL_PROVIDERS.map((p) => (
|
|
646
|
+
<p.Icon key={p.id} className="size-10" />
|
|
647
|
+
))}
|
|
648
|
+
</span>
|
|
649
|
+
}
|
|
650
|
+
title="No channels yet"
|
|
651
|
+
description={
|
|
652
|
+
`Connect this agent to ${providerLabels} and people chat with it ` +
|
|
653
|
+
"right where they work — with policy, rate limits, and billing " +
|
|
654
|
+
"enforced by Stigmer."
|
|
655
|
+
}
|
|
656
|
+
>
|
|
657
|
+
{/* Rendered via the children slot (not `action`) so each button can
|
|
658
|
+
carry its docs-demo cursor target, which EmptyState's action
|
|
659
|
+
config does not thread through. One visible button per provider
|
|
660
|
+
— see providers.ts for why this is not a dropdown. */}
|
|
661
|
+
{providers.length > 0 && (
|
|
662
|
+
<span className="flex items-center gap-2">
|
|
663
|
+
{providers.map((p) => (
|
|
664
|
+
<Button
|
|
665
|
+
key={p.id}
|
|
666
|
+
variant="primary"
|
|
667
|
+
icon={<p.Icon className="size-3" />}
|
|
668
|
+
onClick={() => onConnectClick(p)}
|
|
669
|
+
data-cursor-target={`connect-${p.id}`}
|
|
670
|
+
>
|
|
671
|
+
Connect to {p.label}
|
|
672
|
+
</Button>
|
|
673
|
+
))}
|
|
674
|
+
</span>
|
|
675
|
+
)}
|
|
676
|
+
</EmptyState>
|
|
677
|
+
);
|
|
678
|
+
}
|
|
679
|
+
|
|
680
|
+
function LoadingSkeleton() {
|
|
681
|
+
return (
|
|
682
|
+
<div className="space-y-2 py-4">
|
|
683
|
+
{[1, 2].map((i) => (
|
|
684
|
+
<div key={i} className="h-20 animate-pulse rounded-lg bg-muted-faint" />
|
|
685
|
+
))}
|
|
686
|
+
</div>
|
|
687
|
+
);
|
|
688
|
+
}
|