@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,624 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { useCallback, useMemo, useRef, useState } from "react";
|
|
4
|
+
import { cn } from "@stigmer/theme";
|
|
5
|
+
import { getErrorReason, type ResourceRef } from "@stigmer/sdk";
|
|
6
|
+
import type { Agent } from "@stigmer/protos/ai/stigmer/agentic/agent/v1/api_pb";
|
|
7
|
+
import type { AgentChannel } from "@stigmer/protos/ai/stigmer/agentic/agentchannel/v1/api_pb";
|
|
8
|
+
import { AgentChannelInstallState } from "@stigmer/protos/ai/stigmer/agentic/agentchannel/v1/status_pb";
|
|
9
|
+
import { Button } from "../button/Button.js";
|
|
10
|
+
import { useChannelAppList } from "../channel-app/useChannelAppList.js";
|
|
11
|
+
import { useDeploymentMode } from "../deployment-mode.js";
|
|
12
|
+
import { useStigmer } from "../hooks.js";
|
|
13
|
+
import { CloudFeatureNotice } from "../internal/CloudFeatureNotice.js";
|
|
14
|
+
import {
|
|
15
|
+
RegisterChannelAppAffordance,
|
|
16
|
+
ServingAppSection,
|
|
17
|
+
} from "./connect/ServingAppSection.js";
|
|
18
|
+
import { ToolCredentialsSection } from "./connect/ToolCredentialsSection.js";
|
|
19
|
+
import { RefusalBox, VerbatimRefusal } from "./connect/VerbatimRefusal.js";
|
|
20
|
+
import { CheckIcon, CloseIcon, Spinner } from "./connect/icons.js";
|
|
21
|
+
import { useCreateAgentChannel } from "./useCreateAgentChannel.js";
|
|
22
|
+
import { useInstallChannel } from "./useInstallChannel.js";
|
|
23
|
+
import { useOrgAgentChannelList } from "./useOrgAgentChannelList.js";
|
|
24
|
+
import { agentChannelToInput, useSaveAgentChannel } from "./useSaveAgentChannel.js";
|
|
25
|
+
import { WhatsAppMarkIcon } from "./WhatsAppMarkIcon.js";
|
|
26
|
+
|
|
27
|
+
/** Props for {@link ConnectWhatsAppDialog}. */
|
|
28
|
+
export interface ConnectWhatsAppDialogProps {
|
|
29
|
+
/** Whether the dialog is open. */
|
|
30
|
+
readonly open: boolean;
|
|
31
|
+
/** Called when the dialog requests an open-state change. */
|
|
32
|
+
readonly onOpenChange: (open: boolean) => void;
|
|
33
|
+
/** The agent the channel connects. */
|
|
34
|
+
readonly agent: Agent;
|
|
35
|
+
/**
|
|
36
|
+
* An existing channel to (re)connect — a `pending_install` channel
|
|
37
|
+
* whose install never completed. Unlike Slack's frozen reconnect, the
|
|
38
|
+
* number and serving app stay editable here: a failed direct install
|
|
39
|
+
* usually means one of them is wrong, and both are server-mutable
|
|
40
|
+
* while the channel isn't installed. When omitted, the dialog opens in
|
|
41
|
+
* **create mode**.
|
|
42
|
+
*/
|
|
43
|
+
readonly channel?: AgentChannel | null;
|
|
44
|
+
/**
|
|
45
|
+
* Called after the channel set changes (created, or install completed).
|
|
46
|
+
* Hosts typically pass the channel list's `refetch`.
|
|
47
|
+
*/
|
|
48
|
+
readonly onChannelsChanged?: () => void;
|
|
49
|
+
/**
|
|
50
|
+
* When `false`, renders as an in-flow open dialog instead of a
|
|
51
|
+
* top-layer modal — no `showModal()`, no backdrop, no focus trap.
|
|
52
|
+
* For embedding the dialog in a constrained surface (documentation
|
|
53
|
+
* demos, visual tests). Interactive hosts keep the default.
|
|
54
|
+
* @default true
|
|
55
|
+
*/
|
|
56
|
+
readonly modal?: boolean;
|
|
57
|
+
/**
|
|
58
|
+
* Where the host manages Channel Apps (the console passes
|
|
59
|
+
* `/settings/channel-apps`). When provided, the serving-app section
|
|
60
|
+
* and install refusals render a "Register a channel app" link there.
|
|
61
|
+
* SDK components never hardcode host routes — hosts inject the
|
|
62
|
+
* destination. Absent, the affordance degrades to plain guidance text.
|
|
63
|
+
*/
|
|
64
|
+
readonly channelAppsHref?: string;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* The connect flow for a WhatsApp channel: create the
|
|
69
|
+
* {@link AgentChannel} (create mode), then run the direct install — one
|
|
70
|
+
* server call that verifies the declared phone number against Meta's
|
|
71
|
+
* Graph API through the selected channel app's credentials (DD-WA-1).
|
|
72
|
+
* No consent popup, no callback route.
|
|
73
|
+
*
|
|
74
|
+
* WhatsApp is BYO-only (DD-WA-2): there is no platform Meta app, so a
|
|
75
|
+
* serving channel app is required — with none registered, the flow
|
|
76
|
+
* blocks on registering one first. The declared phone number ID is
|
|
77
|
+
* likewise required: the install proves it, and an empty value can only
|
|
78
|
+
* fail there.
|
|
79
|
+
*
|
|
80
|
+
* Requires Stigmer Cloud — on a `local` (OSS) backend the flow is
|
|
81
|
+
* preempted with a cloud-feature notice, matching the server's
|
|
82
|
+
* FAILED_PRECONDITION refusal. Install refusals render the server's
|
|
83
|
+
* copy verbatim except the duplicate-number refusal, which gets a
|
|
84
|
+
* guided treatment.
|
|
85
|
+
*
|
|
86
|
+
* Built on the native `<dialog>` element for focus trapping and escape
|
|
87
|
+
* handling, matching the SDK's modal convention
|
|
88
|
+
* ({@link ConnectSlackDialog}). All visual properties flow through
|
|
89
|
+
* `--stgm-*` design tokens.
|
|
90
|
+
*
|
|
91
|
+
* Most hosts mount it via {@link AgentChannelsPanel} (the Channels tab).
|
|
92
|
+
* Render it directly only when you own the open-state.
|
|
93
|
+
*/
|
|
94
|
+
export function ConnectWhatsAppDialog({
|
|
95
|
+
open,
|
|
96
|
+
onOpenChange,
|
|
97
|
+
agent,
|
|
98
|
+
channel,
|
|
99
|
+
onChannelsChanged,
|
|
100
|
+
modal = true,
|
|
101
|
+
channelAppsHref,
|
|
102
|
+
}: ConnectWhatsAppDialogProps) {
|
|
103
|
+
const dialogRef = useRef<HTMLDialogElement>(null);
|
|
104
|
+
|
|
105
|
+
const handleClose = useCallback(() => {
|
|
106
|
+
dialogRef.current?.close();
|
|
107
|
+
onOpenChange(false);
|
|
108
|
+
}, [onOpenChange]);
|
|
109
|
+
|
|
110
|
+
// Sync native dialog open state (matches the SDK dialog convention).
|
|
111
|
+
// Non-modal hosts pass `open` as a plain attribute instead — the dialog
|
|
112
|
+
// renders in-flow with no top layer to manage.
|
|
113
|
+
const prevOpenRef = useRef(false);
|
|
114
|
+
if (modal && open !== prevOpenRef.current) {
|
|
115
|
+
prevOpenRef.current = open;
|
|
116
|
+
if (open) {
|
|
117
|
+
requestAnimationFrame(() => {
|
|
118
|
+
if (dialogRef.current && !dialogRef.current.open) {
|
|
119
|
+
dialogRef.current.showModal();
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
} else if (dialogRef.current?.open) {
|
|
123
|
+
dialogRef.current.close();
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
return (
|
|
128
|
+
<dialog
|
|
129
|
+
ref={dialogRef}
|
|
130
|
+
open={modal ? undefined : open}
|
|
131
|
+
onClose={handleClose}
|
|
132
|
+
className={cn(
|
|
133
|
+
"w-full max-w-md rounded-xl border border-border bg-popover p-0 shadow-xl",
|
|
134
|
+
modal ? "fixed inset-0 m-auto backdrop:bg-black/50" : "relative",
|
|
135
|
+
)}
|
|
136
|
+
aria-labelledby="connect-whatsapp-title"
|
|
137
|
+
>
|
|
138
|
+
{/* Body mounts only while open so its flow state resets per
|
|
139
|
+
session — reopening the dialog never resumes a stale flow. */}
|
|
140
|
+
{open && (
|
|
141
|
+
<ConnectWhatsAppDialogBody
|
|
142
|
+
agent={agent}
|
|
143
|
+
channel={channel ?? null}
|
|
144
|
+
onChannelsChanged={onChannelsChanged}
|
|
145
|
+
onClose={handleClose}
|
|
146
|
+
channelAppsHref={channelAppsHref}
|
|
147
|
+
/>
|
|
148
|
+
)}
|
|
149
|
+
</dialog>
|
|
150
|
+
);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
// ---------------------------------------------------------------------------
|
|
154
|
+
// Dialog body — create step (optional) + direct install
|
|
155
|
+
// ---------------------------------------------------------------------------
|
|
156
|
+
|
|
157
|
+
interface ConnectWhatsAppDialogBodyProps {
|
|
158
|
+
readonly agent: Agent;
|
|
159
|
+
readonly channel: AgentChannel | null;
|
|
160
|
+
readonly onChannelsChanged?: () => void;
|
|
161
|
+
readonly onClose: () => void;
|
|
162
|
+
readonly channelAppsHref?: string;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
function ConnectWhatsAppDialogBody({
|
|
166
|
+
agent,
|
|
167
|
+
channel,
|
|
168
|
+
onChannelsChanged,
|
|
169
|
+
onClose,
|
|
170
|
+
channelAppsHref,
|
|
171
|
+
}: ConnectWhatsAppDialogBodyProps) {
|
|
172
|
+
const stigmer = useStigmer();
|
|
173
|
+
const deploymentMode = useDeploymentMode();
|
|
174
|
+
const agentName = agent.metadata?.name || agent.metadata?.slug || "this agent";
|
|
175
|
+
const org = agent.metadata?.org ?? "";
|
|
176
|
+
|
|
177
|
+
const { createChannel, isPending: isCreating } = useCreateAgentChannel();
|
|
178
|
+
const { save, isPending: isSaving } = useSaveAgentChannel();
|
|
179
|
+
const installer = useInstallChannel();
|
|
180
|
+
|
|
181
|
+
const [name, setName] = useState(() =>
|
|
182
|
+
channel ? (channel.metadata?.name ?? "") : `${agentName} WhatsApp`,
|
|
183
|
+
);
|
|
184
|
+
// The declared number (spec.whatsapp.phone_number_id). Genuinely
|
|
185
|
+
// user-declared — a WABA holds many numbers; the owner picks which one
|
|
186
|
+
// the agent serves. Required client-side: the write path defers it to
|
|
187
|
+
// the install probe, where an empty value can only fail.
|
|
188
|
+
const [phoneNumberId, setPhoneNumberId] = useState(() =>
|
|
189
|
+
channel?.spec?.providerConfig?.case === "whatsapp"
|
|
190
|
+
? channel.spec.providerConfig.value.phoneNumberId
|
|
191
|
+
: "",
|
|
192
|
+
);
|
|
193
|
+
// Tool credentials bound at connect time (create mode only — a retry
|
|
194
|
+
// keeps the channel's existing bindings untouched; edits go through
|
|
195
|
+
// the channel card's credentials dialog).
|
|
196
|
+
const [environmentRefs, setEnvironmentRefs] = useState<ResourceRef[]>([]);
|
|
197
|
+
// The serving app — required (DD-WA-2: no platform Meta app exists).
|
|
198
|
+
// Editable in retry mode too: app_ref is server-mutable while the
|
|
199
|
+
// channel isn't installed, and a wrong app is a likely failure cause.
|
|
200
|
+
const [appRef, setAppRef] = useState<ResourceRef | null>(() =>
|
|
201
|
+
channel?.spec?.appRef?.slug
|
|
202
|
+
? { org: channel.spec.appRef.org || org, slug: channel.spec.appRef.slug }
|
|
203
|
+
: null,
|
|
204
|
+
);
|
|
205
|
+
const [installed, setInstalled] = useState<AgentChannel | null>(null);
|
|
206
|
+
const [error, setError] = useState<Error | null>(null);
|
|
207
|
+
|
|
208
|
+
// The org's channel apps, fetched once here so the serving-app picker
|
|
209
|
+
// and the advisory read one consistent list.
|
|
210
|
+
const { channelApps } = useChannelAppList(org || null);
|
|
211
|
+
const whatsappApps = useMemo(
|
|
212
|
+
() => channelApps.filter((app) => app.spec?.providerConfig?.case === "whatsapp"),
|
|
213
|
+
[channelApps],
|
|
214
|
+
);
|
|
215
|
+
|
|
216
|
+
// A sole registered app is the only possible choice — preselect it so
|
|
217
|
+
// the required picker never blocks on a decision with one answer
|
|
218
|
+
// (Hick's law). Derived, not effect-synced: apps load async.
|
|
219
|
+
const effectiveAppRef =
|
|
220
|
+
appRef ??
|
|
221
|
+
(whatsappApps.length === 1
|
|
222
|
+
? { org, slug: whatsappApps[0].metadata?.slug ?? "" }
|
|
223
|
+
: null);
|
|
224
|
+
const selectedApp = effectiveAppRef
|
|
225
|
+
? whatsappApps.find((app) => app.metadata?.slug === effectiveAppRef.slug) ?? null
|
|
226
|
+
: null;
|
|
227
|
+
|
|
228
|
+
// Numbers the selected serving app already serves, matched on the same
|
|
229
|
+
// key the database enforces uniqueness on: (phone number, channel app).
|
|
230
|
+
// Advisory only — the list is permission-bounded; the install stays
|
|
231
|
+
// the arbiter.
|
|
232
|
+
const advisoryActive = deploymentMode === "cloud" && !installed;
|
|
233
|
+
const { channels: orgChannels } = useOrgAgentChannelList(
|
|
234
|
+
advisoryActive && org ? org : null,
|
|
235
|
+
);
|
|
236
|
+
const trimmedNumber = phoneNumberId.trim();
|
|
237
|
+
const alreadyServed = useMemo(() => {
|
|
238
|
+
const selectedAppId = selectedApp?.metadata?.id;
|
|
239
|
+
if (!selectedAppId || !trimmedNumber) return [];
|
|
240
|
+
return orgChannels.filter(
|
|
241
|
+
(c) =>
|
|
242
|
+
c.metadata?.id !== channel?.metadata?.id &&
|
|
243
|
+
c.status?.installState === AgentChannelInstallState.installed &&
|
|
244
|
+
c.status?.providerStatus?.case === "whatsapp" &&
|
|
245
|
+
c.status.providerStatus.value.phoneNumberId === trimmedNumber &&
|
|
246
|
+
c.status.providerStatus.value.channelAppId === selectedAppId,
|
|
247
|
+
);
|
|
248
|
+
}, [orgChannels, selectedApp, trimmedNumber, channel]);
|
|
249
|
+
|
|
250
|
+
// One click drives the whole journey: (create/update →) direct
|
|
251
|
+
// install → fetch the installed facts. No popup, so nothing here needs
|
|
252
|
+
// the synchronous-gesture treatment the Slack flow does.
|
|
253
|
+
const handleConnect = useCallback(async () => {
|
|
254
|
+
setError(null);
|
|
255
|
+
try {
|
|
256
|
+
let target = channel;
|
|
257
|
+
if (!target) {
|
|
258
|
+
target = await createChannel({
|
|
259
|
+
name: name.trim() || `${agentName} WhatsApp`,
|
|
260
|
+
org,
|
|
261
|
+
agentRef: {
|
|
262
|
+
org,
|
|
263
|
+
slug: agent.metadata?.slug ?? "",
|
|
264
|
+
},
|
|
265
|
+
enabled: true,
|
|
266
|
+
whatsapp: { phoneNumberId: trimmedNumber },
|
|
267
|
+
...(effectiveAppRef ? { appRef: effectiveAppRef } : {}),
|
|
268
|
+
...(environmentRefs.length > 0 ? { environmentRefs } : {}),
|
|
269
|
+
});
|
|
270
|
+
// The channel now exists even if the install below fails —
|
|
271
|
+
// surface it in the list either way.
|
|
272
|
+
onChannelsChanged?.();
|
|
273
|
+
} else {
|
|
274
|
+
// Retry mode: persist edits to the number or app before
|
|
275
|
+
// re-installing. Skipped when nothing changed so a plain retry
|
|
276
|
+
// is one call, not two.
|
|
277
|
+
const existingNumber =
|
|
278
|
+
target.spec?.providerConfig?.case === "whatsapp"
|
|
279
|
+
? target.spec.providerConfig.value.phoneNumberId
|
|
280
|
+
: "";
|
|
281
|
+
const existingAppSlug = target.spec?.appRef?.slug ?? "";
|
|
282
|
+
if (
|
|
283
|
+
existingNumber !== trimmedNumber ||
|
|
284
|
+
existingAppSlug !== (effectiveAppRef?.slug ?? "")
|
|
285
|
+
) {
|
|
286
|
+
target = await save({
|
|
287
|
+
...agentChannelToInput(target),
|
|
288
|
+
whatsapp: { phoneNumberId: trimmedNumber },
|
|
289
|
+
...(effectiveAppRef ? { appRef: effectiveAppRef } : {}),
|
|
290
|
+
});
|
|
291
|
+
onChannelsChanged?.();
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
await installer.install(target.metadata?.id ?? "");
|
|
296
|
+
// The install answer carries no channel — read the recorded facts
|
|
297
|
+
// (display number, verified name) for the success summary.
|
|
298
|
+
const result = await stigmer.agentChannel.get(target.metadata?.id ?? "");
|
|
299
|
+
setInstalled(result);
|
|
300
|
+
onChannelsChanged?.();
|
|
301
|
+
} catch (err) {
|
|
302
|
+
setError(
|
|
303
|
+
installer.error ?? (err instanceof Error ? err : new Error(String(err))),
|
|
304
|
+
);
|
|
305
|
+
}
|
|
306
|
+
}, [agent, agentName, channel, createChannel, effectiveAppRef, environmentRefs, installer, name, org, onChannelsChanged, save, stigmer, trimmedNumber]);
|
|
307
|
+
|
|
308
|
+
const busy = isCreating || isSaving || installer.isInProgress;
|
|
309
|
+
const canConnect = trimmedNumber !== "" && effectiveAppRef !== null && !busy;
|
|
310
|
+
|
|
311
|
+
return (
|
|
312
|
+
<div className="flex flex-col">
|
|
313
|
+
{/* Header */}
|
|
314
|
+
<div className="flex items-start justify-between gap-3 border-b border-border px-5 py-4">
|
|
315
|
+
<div className="flex items-center gap-2.5">
|
|
316
|
+
<WhatsAppMarkIcon className="size-5 text-foreground" />
|
|
317
|
+
<h2 id="connect-whatsapp-title" className="text-sm font-semibold text-foreground">
|
|
318
|
+
{channel ? "Reconnect to WhatsApp" : "Connect to WhatsApp"}
|
|
319
|
+
</h2>
|
|
320
|
+
</div>
|
|
321
|
+
<button
|
|
322
|
+
type="button"
|
|
323
|
+
onClick={onClose}
|
|
324
|
+
aria-label="Close dialog"
|
|
325
|
+
className={cn(
|
|
326
|
+
"rounded p-1 text-muted-foreground",
|
|
327
|
+
"hover:bg-accent-hover hover:text-foreground",
|
|
328
|
+
"focus:outline-none focus:ring-1 focus:ring-ring",
|
|
329
|
+
)}
|
|
330
|
+
>
|
|
331
|
+
<CloseIcon />
|
|
332
|
+
</button>
|
|
333
|
+
</div>
|
|
334
|
+
|
|
335
|
+
<div className="space-y-4 px-5 py-4">
|
|
336
|
+
{deploymentMode === "local" ? (
|
|
337
|
+
// Preempt the doomed flow: the OSS backend answers every
|
|
338
|
+
// install with FAILED_PRECONDITION.
|
|
339
|
+
<CloudFeatureNotice>
|
|
340
|
+
Channel installs require Stigmer Cloud. The local backend
|
|
341
|
+
manages channel configuration, but connecting to WhatsApp
|
|
342
|
+
verifies your number through Stigmer's hosted webhook
|
|
343
|
+
infrastructure.
|
|
344
|
+
</CloudFeatureNotice>
|
|
345
|
+
) : installed ? (
|
|
346
|
+
<InstalledSummary channel={installed} agentName={agentName} />
|
|
347
|
+
) : busy ? (
|
|
348
|
+
<InstallingIndicator />
|
|
349
|
+
) : (
|
|
350
|
+
<>
|
|
351
|
+
{!channel && (
|
|
352
|
+
<label className="block">
|
|
353
|
+
<span className="mb-1.5 block text-xs font-medium text-foreground">
|
|
354
|
+
Channel name
|
|
355
|
+
</span>
|
|
356
|
+
<input
|
|
357
|
+
type="text"
|
|
358
|
+
value={name}
|
|
359
|
+
onChange={(e) => setName(e.target.value)}
|
|
360
|
+
disabled={busy}
|
|
361
|
+
className={cn(
|
|
362
|
+
"w-full rounded-md border border-input bg-background px-3 py-1.5",
|
|
363
|
+
"text-sm text-foreground placeholder:text-muted-foreground",
|
|
364
|
+
"focus:outline-none focus:ring-1 focus:ring-ring",
|
|
365
|
+
)}
|
|
366
|
+
/>
|
|
367
|
+
<span className="mt-1 block text-xs text-muted-foreground">
|
|
368
|
+
Names the connection in Stigmer — pick something that
|
|
369
|
+
identifies the number if you connect more than one.
|
|
370
|
+
</span>
|
|
371
|
+
</label>
|
|
372
|
+
)}
|
|
373
|
+
|
|
374
|
+
<label className="block">
|
|
375
|
+
<span className="mb-1.5 block text-xs font-medium text-foreground">
|
|
376
|
+
Phone number ID
|
|
377
|
+
</span>
|
|
378
|
+
<input
|
|
379
|
+
type="text"
|
|
380
|
+
value={phoneNumberId}
|
|
381
|
+
onChange={(e) => setPhoneNumberId(e.target.value)}
|
|
382
|
+
disabled={busy}
|
|
383
|
+
required
|
|
384
|
+
placeholder="106540352242922"
|
|
385
|
+
data-cursor-target="dialog-whatsapp-number"
|
|
386
|
+
className={cn(
|
|
387
|
+
"w-full rounded-md border border-input bg-background px-3 py-1.5",
|
|
388
|
+
"font-mono text-sm text-foreground placeholder:text-muted-foreground",
|
|
389
|
+
"focus:outline-none focus:ring-1 focus:ring-ring",
|
|
390
|
+
)}
|
|
391
|
+
/>
|
|
392
|
+
<span className="mt-1 block text-xs text-muted-foreground">
|
|
393
|
+
From Meta's WhatsApp Manager (API Setup) — the numeric
|
|
394
|
+
ID of the number this agent should answer, not the phone
|
|
395
|
+
number itself.
|
|
396
|
+
</span>
|
|
397
|
+
</label>
|
|
398
|
+
|
|
399
|
+
<ServingAppSection
|
|
400
|
+
org={org}
|
|
401
|
+
apps={whatsappApps}
|
|
402
|
+
value={effectiveAppRef}
|
|
403
|
+
onChange={setAppRef}
|
|
404
|
+
disabled={busy}
|
|
405
|
+
channelAppsHref={channelAppsHref}
|
|
406
|
+
idPrefix="stgm-whatsapp-app"
|
|
407
|
+
appHint="Your Meta app — its credentials verify and serve the number"
|
|
408
|
+
emptyBody={
|
|
409
|
+
<p className="text-xs text-muted-foreground">
|
|
410
|
+
WhatsApp channels connect through your own Meta app — there
|
|
411
|
+
is no shared platform app.{" "}
|
|
412
|
+
<RegisterChannelAppAffordance channelAppsHref={channelAppsHref}>
|
|
413
|
+
Register a channel app
|
|
414
|
+
</RegisterChannelAppAffordance>{" "}
|
|
415
|
+
with your Meta app's credentials first, then connect
|
|
416
|
+
here.
|
|
417
|
+
</p>
|
|
418
|
+
}
|
|
419
|
+
/>
|
|
420
|
+
|
|
421
|
+
{alreadyServed.length > 0 && (
|
|
422
|
+
<AlreadyServedNote channels={alreadyServed} />
|
|
423
|
+
)}
|
|
424
|
+
|
|
425
|
+
{!channel && (
|
|
426
|
+
<ToolCredentialsSection
|
|
427
|
+
agent={agent}
|
|
428
|
+
org={org}
|
|
429
|
+
value={environmentRefs}
|
|
430
|
+
onChange={setEnvironmentRefs}
|
|
431
|
+
disabled={busy}
|
|
432
|
+
/>
|
|
433
|
+
)}
|
|
434
|
+
|
|
435
|
+
<p className="text-sm text-muted-foreground">
|
|
436
|
+
When you continue, Stigmer verifies the number with WhatsApp
|
|
437
|
+
through the selected app's credentials — the connection
|
|
438
|
+
completes right here, with no browser hand-off.
|
|
439
|
+
</p>
|
|
440
|
+
<p className="text-sm text-muted-foreground">
|
|
441
|
+
People reach the agent by sending a WhatsApp message to the
|
|
442
|
+
connected number — it answers as{" "}
|
|
443
|
+
<span className="font-medium text-foreground">{agentName}</span>.
|
|
444
|
+
</p>
|
|
445
|
+
<p className="text-xs text-muted-foreground">
|
|
446
|
+
Conversations from WhatsApp are billed to{" "}
|
|
447
|
+
<span className="font-medium">{org}</span>. Each number serves
|
|
448
|
+
one agent per channel app.
|
|
449
|
+
</p>
|
|
450
|
+
|
|
451
|
+
{error && (
|
|
452
|
+
<InstallRefusal error={error} channelAppsHref={channelAppsHref} />
|
|
453
|
+
)}
|
|
454
|
+
</>
|
|
455
|
+
)}
|
|
456
|
+
</div>
|
|
457
|
+
|
|
458
|
+
{/* Footer */}
|
|
459
|
+
<div className="flex justify-end gap-2 border-t border-border px-5 py-3">
|
|
460
|
+
{installed || deploymentMode === "local" ? (
|
|
461
|
+
<Button variant="outline" size="sm" onClick={onClose}>
|
|
462
|
+
{installed ? "Done" : "Close"}
|
|
463
|
+
</Button>
|
|
464
|
+
) : (
|
|
465
|
+
<>
|
|
466
|
+
<Button variant="ghost" size="sm" onClick={onClose} disabled={busy}>
|
|
467
|
+
Cancel
|
|
468
|
+
</Button>
|
|
469
|
+
<Button
|
|
470
|
+
variant="primary"
|
|
471
|
+
size="sm"
|
|
472
|
+
onClick={() => void handleConnect()}
|
|
473
|
+
disabled={!canConnect}
|
|
474
|
+
icon={<WhatsAppMarkIcon className="size-3.5" />}
|
|
475
|
+
data-cursor-target="dialog-connect-whatsapp"
|
|
476
|
+
>
|
|
477
|
+
{error ? "Try again" : channel ? "Reconnect to WhatsApp" : "Connect to WhatsApp"}
|
|
478
|
+
</Button>
|
|
479
|
+
</>
|
|
480
|
+
)}
|
|
481
|
+
</div>
|
|
482
|
+
</div>
|
|
483
|
+
);
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
// ---------------------------------------------------------------------------
|
|
487
|
+
// Install refusal — guided for the duplicate-number reason
|
|
488
|
+
// ---------------------------------------------------------------------------
|
|
489
|
+
|
|
490
|
+
/**
|
|
491
|
+
* The reason code the server attaches (google.rpc.ErrorInfo, domain
|
|
492
|
+
* stigmer.ai) to a duplicate-number initiateInstall refusal — see the
|
|
493
|
+
* initiateInstall rpc comment for the vocabulary.
|
|
494
|
+
*/
|
|
495
|
+
const REASON_NUMBER_ALREADY_CONNECTED = "WHATSAPP_NUMBER_ALREADY_CONNECTED";
|
|
496
|
+
|
|
497
|
+
/**
|
|
498
|
+
* Install-refusal rendering. The duplicate-number refusal is the one a
|
|
499
|
+
* user can act on from here, so it gets a guided treatment — names the
|
|
500
|
+
* occupied number (from the ErrorInfo metadata) and the ways out. Every
|
|
501
|
+
* other refusal (bad token, unknown number, dangling app — and any error
|
|
502
|
+
* from a server not attaching reasons) renders the server's copy
|
|
503
|
+
* verbatim — the server owns that vocabulary.
|
|
504
|
+
*/
|
|
505
|
+
function InstallRefusal({
|
|
506
|
+
error,
|
|
507
|
+
channelAppsHref,
|
|
508
|
+
}: {
|
|
509
|
+
readonly error: Error;
|
|
510
|
+
readonly channelAppsHref?: string;
|
|
511
|
+
}) {
|
|
512
|
+
const reason = getErrorReason(error);
|
|
513
|
+
if (reason?.reason !== REASON_NUMBER_ALREADY_CONNECTED) {
|
|
514
|
+
return <VerbatimRefusal error={error} />;
|
|
515
|
+
}
|
|
516
|
+
|
|
517
|
+
const number = reason.metadata.display_phone_number || "This number";
|
|
518
|
+
return (
|
|
519
|
+
<RefusalBox>
|
|
520
|
+
<p>
|
|
521
|
+
<span className="font-medium">{number}</span> is already connected
|
|
522
|
+
to an agent through this channel app — each number serves one
|
|
523
|
+
agent.
|
|
524
|
+
</p>
|
|
525
|
+
<p>
|
|
526
|
+
To reach it with this agent, disconnect the existing channel, use a
|
|
527
|
+
different number, or{" "}
|
|
528
|
+
<RegisterChannelAppAffordance channelAppsHref={channelAppsHref}>
|
|
529
|
+
register a channel app
|
|
530
|
+
</RegisterChannelAppAffordance>{" "}
|
|
531
|
+
and connect through that instead.
|
|
532
|
+
</p>
|
|
533
|
+
</RefusalBox>
|
|
534
|
+
);
|
|
535
|
+
}
|
|
536
|
+
|
|
537
|
+
/**
|
|
538
|
+
* Pre-install advisory: the selected serving app already serves this
|
|
539
|
+
* number, matched on the exact key the database enforces — (phone
|
|
540
|
+
* number, serving app). Shown before the user spends the install
|
|
541
|
+
* round-trip discovering it. Best-effort by design: the list is bounded
|
|
542
|
+
* by the caller's visibility, so the copy warns rather than forbids.
|
|
543
|
+
*/
|
|
544
|
+
function AlreadyServedNote({
|
|
545
|
+
channels,
|
|
546
|
+
}: {
|
|
547
|
+
readonly channels: readonly AgentChannel[];
|
|
548
|
+
}) {
|
|
549
|
+
return (
|
|
550
|
+
<div role="status" className="space-y-0.5 text-xs text-warning">
|
|
551
|
+
{channels.map((c) => {
|
|
552
|
+
const whatsapp =
|
|
553
|
+
c.status?.providerStatus?.case === "whatsapp"
|
|
554
|
+
? c.status.providerStatus.value
|
|
555
|
+
: null;
|
|
556
|
+
const number =
|
|
557
|
+
whatsapp?.displayPhoneNumber || whatsapp?.phoneNumberId || "this number";
|
|
558
|
+
const agent = c.spec?.agentRef?.slug || "another agent";
|
|
559
|
+
return (
|
|
560
|
+
<p key={c.metadata?.id ?? number}>
|
|
561
|
+
<span className="font-medium">{number}</span> is already served
|
|
562
|
+
via {agent} — each number serves one agent per channel app, so
|
|
563
|
+
disconnect that channel or pick a different number.
|
|
564
|
+
</p>
|
|
565
|
+
);
|
|
566
|
+
})}
|
|
567
|
+
</div>
|
|
568
|
+
);
|
|
569
|
+
}
|
|
570
|
+
|
|
571
|
+
// ---------------------------------------------------------------------------
|
|
572
|
+
// Installing indicator — a single live step, deliberately not a ladder
|
|
573
|
+
// ---------------------------------------------------------------------------
|
|
574
|
+
|
|
575
|
+
/**
|
|
576
|
+
* The busy state of a direct install: one server call, so one live line —
|
|
577
|
+
* not the Slack dialog's three-step OAuth ladder, which would render two
|
|
578
|
+
* permanently-empty rungs here. No cancel affordance either: there is no
|
|
579
|
+
* popup to abandon, and the call settles in seconds.
|
|
580
|
+
*/
|
|
581
|
+
function InstallingIndicator() {
|
|
582
|
+
return (
|
|
583
|
+
<div className="flex items-center gap-2 text-sm text-foreground" aria-live="polite">
|
|
584
|
+
<Spinner className="size-3.5 shrink-0" />
|
|
585
|
+
Verifying the number with WhatsApp…
|
|
586
|
+
</div>
|
|
587
|
+
);
|
|
588
|
+
}
|
|
589
|
+
|
|
590
|
+
// ---------------------------------------------------------------------------
|
|
591
|
+
// Installed summary — the success state with the observed WhatsApp facts
|
|
592
|
+
// ---------------------------------------------------------------------------
|
|
593
|
+
|
|
594
|
+
function InstalledSummary({
|
|
595
|
+
channel,
|
|
596
|
+
agentName,
|
|
597
|
+
}: {
|
|
598
|
+
readonly channel: AgentChannel;
|
|
599
|
+
readonly agentName: string;
|
|
600
|
+
}) {
|
|
601
|
+
const whatsapp =
|
|
602
|
+
channel.status?.providerStatus?.case === "whatsapp"
|
|
603
|
+
? channel.status.providerStatus.value
|
|
604
|
+
: null;
|
|
605
|
+
const number = whatsapp?.displayPhoneNumber || whatsapp?.phoneNumberId || null;
|
|
606
|
+
|
|
607
|
+
return (
|
|
608
|
+
<div className="space-y-2" role="status">
|
|
609
|
+
<div className="flex items-center gap-2 text-sm font-medium text-foreground">
|
|
610
|
+
<CheckIcon className="size-4 text-success" />
|
|
611
|
+
Connected{number ? ` to ${number}` : ""}
|
|
612
|
+
{whatsapp?.verifiedName ? ` (${whatsapp.verifiedName})` : ""}
|
|
613
|
+
</div>
|
|
614
|
+
<p className="text-sm text-muted-foreground">
|
|
615
|
+
Send a WhatsApp message to{" "}
|
|
616
|
+
<span className="font-medium text-foreground">
|
|
617
|
+
{number ?? "the connected number"}
|
|
618
|
+
</span>{" "}
|
|
619
|
+
and ask your question — answers come from{" "}
|
|
620
|
+
<span className="font-medium text-foreground">{agentName}</span>.
|
|
621
|
+
</p>
|
|
622
|
+
</div>
|
|
623
|
+
);
|
|
624
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Monochrome Slack mark (the four-lobe glyph) as an inline SVG.
|
|
5
|
+
*
|
|
6
|
+
* Renders in `currentColor` so it follows the surrounding text token —
|
|
7
|
+
* the SDK never hardcodes brand colors (theme-token compliance). Shared
|
|
8
|
+
* by the channel components; not exported from the public barrel.
|
|
9
|
+
*/
|
|
10
|
+
export function SlackMarkIcon({ className }: { readonly className?: string }) {
|
|
11
|
+
return (
|
|
12
|
+
<svg
|
|
13
|
+
className={className}
|
|
14
|
+
viewBox="0 0 24 24"
|
|
15
|
+
fill="currentColor"
|
|
16
|
+
aria-hidden="true"
|
|
17
|
+
>
|
|
18
|
+
<path d="M5.04 15.17a2.52 2.52 0 1 1-2.52-2.52h2.52v2.52zM6.31 15.17a2.52 2.52 0 0 1 5.04 0v6.31a2.52 2.52 0 1 1-5.04 0v-6.31zM8.83 5.04a2.52 2.52 0 1 1 2.52-2.52v2.52H8.83zM8.83 6.31a2.52 2.52 0 0 1 0 5.04H2.52a2.52 2.52 0 1 1 0-5.04h6.31zM18.96 8.83a2.52 2.52 0 1 1 2.52 2.52h-2.52V8.83zM17.69 8.83a2.52 2.52 0 0 1-5.04 0V2.52a2.52 2.52 0 1 1 5.04 0v6.31zM15.17 18.96a2.52 2.52 0 1 1-2.52 2.52v-2.52h2.52zM15.17 17.69a2.52 2.52 0 0 1 0-5.04h6.31a2.52 2.52 0 1 1 0 5.04h-6.31z" />
|
|
19
|
+
</svg>
|
|
20
|
+
);
|
|
21
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Monochrome WhatsApp mark (the speech-bubble-with-handset glyph) as an
|
|
5
|
+
* inline SVG.
|
|
6
|
+
*
|
|
7
|
+
* Renders in `currentColor` so it follows the surrounding text token —
|
|
8
|
+
* the SDK never hardcodes brand colors (theme-token compliance). Shared
|
|
9
|
+
* by the channel components; not exported from the public barrel.
|
|
10
|
+
*/
|
|
11
|
+
export function WhatsAppMarkIcon({ className }: { readonly className?: string }) {
|
|
12
|
+
return (
|
|
13
|
+
<svg
|
|
14
|
+
className={className}
|
|
15
|
+
viewBox="0 0 24 24"
|
|
16
|
+
fill="currentColor"
|
|
17
|
+
aria-hidden="true"
|
|
18
|
+
>
|
|
19
|
+
<path d="M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.471-.148-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52.149-.174.198-.298.298-.497.099-.198.05-.371-.025-.52-.075-.149-.669-1.612-.916-2.207-.242-.579-.487-.5-.669-.51-.173-.008-.371-.01-.57-.01-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.096 3.2 5.077 4.487.709.306 1.262.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413.248-.694.248-1.289.173-1.413-.074-.124-.272-.198-.57-.347m-5.421 7.403h-.004a9.87 9.87 0 0 1-5.031-1.378l-.361-.214-3.741.982.998-3.648-.235-.374a9.86 9.86 0 0 1-1.51-5.26c.001-5.45 4.436-9.884 9.888-9.884 2.64 0 5.122 1.03 6.988 2.898a9.825 9.825 0 0 1 2.893 6.994c-.003 5.45-4.437 9.884-9.885 9.884m8.413-18.297A11.815 11.815 0 0 0 12.05 0C5.495 0 .16 5.335.157 11.892c0 2.096.547 4.142 1.588 5.945L.057 24l6.305-1.654a11.882 11.882 0 0 0 5.683 1.448h.005c6.554 0 11.89-5.335 11.893-11.893a11.821 11.821 0 0 0-3.48-8.413Z" />
|
|
20
|
+
</svg>
|
|
21
|
+
);
|
|
22
|
+
}
|