@stigmer/react 3.12.4 → 3.12.6
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/AgentDetailView.js +2 -2
- package/agent/AgentDetailView.js.map +1 -1
- package/agent/index.d.ts +0 -1
- package/agent/index.d.ts.map +1 -1
- package/agent/index.js +0 -1
- package/agent/index.js.map +1 -1
- package/agent/useUpdateAgent.d.ts +3 -3
- package/agent/useUpdateAgent.js +3 -3
- package/agent-instance/AgentInstanceDetailPanel.d.ts.map +1 -1
- package/agent-instance/AgentInstanceDetailPanel.js +5 -7
- package/agent-instance/AgentInstanceDetailPanel.js.map +1 -1
- package/agent-instance/useUpdateAgentInstance.d.ts +1 -1
- package/agent-instance/useUpdateAgentInstance.js +1 -1
- package/attachment/AttachmentChipList.js +16 -6
- package/attachment/AttachmentChipList.js.map +1 -1
- package/attachment/index.d.ts +1 -1
- package/attachment/index.d.ts.map +1 -1
- package/attachment/index.js.map +1 -1
- package/attachment/useAttachments.d.ts +51 -8
- package/attachment/useAttachments.d.ts.map +1 -1
- package/attachment/useAttachments.js +74 -3
- package/attachment/useAttachments.js.map +1 -1
- package/channel/AgentChannelsPanel.d.ts.map +1 -1
- package/channel/AgentChannelsPanel.js +10 -5
- package/channel/AgentChannelsPanel.js.map +1 -1
- package/channel/ChannelRunConfigDialog.d.ts +51 -0
- package/channel/ChannelRunConfigDialog.d.ts.map +1 -0
- package/channel/ChannelRunConfigDialog.js +121 -0
- package/channel/ChannelRunConfigDialog.js.map +1 -0
- package/channel/index.d.ts +2 -0
- package/channel/index.d.ts.map +1 -1
- package/channel/index.js +1 -0
- package/channel/index.js.map +1 -1
- package/channel/useSaveAgentChannel.d.ts.map +1 -1
- package/channel/useSaveAgentChannel.js +6 -3
- package/channel/useSaveAgentChannel.js.map +1 -1
- package/channel-app/ChannelAppDetailPanel.js +9 -9
- package/channel-app/ChannelAppDetailPanel.js.map +1 -1
- package/composer/ComposerToolbar.d.ts +6 -1
- package/composer/ComposerToolbar.d.ts.map +1 -1
- package/composer/ComposerToolbar.js +2 -2
- package/composer/ComposerToolbar.js.map +1 -1
- package/composer/SessionComposer.d.ts +9 -0
- package/composer/SessionComposer.d.ts.map +1 -1
- package/composer/SessionComposer.js +39 -13
- package/composer/SessionComposer.js.map +1 -1
- package/conversation/ConversationComposer.d.ts +19 -3
- package/conversation/ConversationComposer.d.ts.map +1 -1
- package/conversation/ConversationComposer.js +4 -4
- package/conversation/ConversationComposer.js.map +1 -1
- package/conversation/ConversationTemplatePickerDialog.d.ts +63 -0
- package/conversation/ConversationTemplatePickerDialog.d.ts.map +1 -0
- package/conversation/ConversationTemplatePickerDialog.js +151 -0
- package/conversation/ConversationTemplatePickerDialog.js.map +1 -0
- package/conversation/ConversationsWorkbench.d.ts.map +1 -1
- package/conversation/ConversationsWorkbench.js +16 -5
- package/conversation/ConversationsWorkbench.js.map +1 -1
- package/conversation/index.d.ts +3 -1
- package/conversation/index.d.ts.map +1 -1
- package/conversation/index.js +1 -0
- package/conversation/index.js.map +1 -1
- package/conversation/useConversationParticipation.d.ts +41 -4
- package/conversation/useConversationParticipation.d.ts.map +1 -1
- package/conversation/useConversationParticipation.js +13 -2
- package/conversation/useConversationParticipation.js.map +1 -1
- package/cursor-accounts/CursorAccountsConsole.d.ts.map +1 -1
- package/cursor-accounts/CursorAccountsConsole.js +12 -3
- package/cursor-accounts/CursorAccountsConsole.js.map +1 -1
- package/cursor-accounts/cursor-account-coverage.d.ts +30 -1
- package/cursor-accounts/cursor-account-coverage.d.ts.map +1 -1
- package/cursor-accounts/cursor-account-coverage.js +21 -0
- package/cursor-accounts/cursor-account-coverage.js.map +1 -1
- package/execution/useCreateAgentExecution.d.ts +15 -0
- package/execution/useCreateAgentExecution.d.ts.map +1 -1
- package/execution/useCreateAgentExecution.js +5 -0
- package/execution/useCreateAgentExecution.js.map +1 -1
- package/identity-account/AccountPreferencesPanel.d.ts +36 -0
- package/identity-account/AccountPreferencesPanel.d.ts.map +1 -0
- package/identity-account/AccountPreferencesPanel.js +202 -0
- package/identity-account/AccountPreferencesPanel.js.map +1 -0
- package/identity-account/index.d.ts +8 -0
- package/identity-account/index.d.ts.map +1 -1
- package/identity-account/index.js +4 -0
- package/identity-account/index.js.map +1 -1
- package/identity-account/useAccountExecutionDefaults.d.ts +36 -0
- package/identity-account/useAccountExecutionDefaults.d.ts.map +1 -0
- package/identity-account/useAccountExecutionDefaults.js +46 -0
- package/identity-account/useAccountExecutionDefaults.js.map +1 -0
- package/identity-account/useMyIdentityAccount.d.ts +55 -0
- package/identity-account/useMyIdentityAccount.d.ts.map +1 -0
- package/identity-account/useMyIdentityAccount.js +37 -0
- package/identity-account/useMyIdentityAccount.js.map +1 -0
- package/identity-account/useUpdateIdentityAccount.d.ts +42 -0
- package/identity-account/useUpdateIdentityAccount.d.ts.map +1 -0
- package/identity-account/useUpdateIdentityAccount.js +53 -0
- package/identity-account/useUpdateIdentityAccount.js.map +1 -0
- package/identity-provider/IdentityProviderDetailPanel.d.ts.map +1 -1
- package/identity-provider/IdentityProviderDetailPanel.js +16 -15
- package/identity-provider/IdentityProviderDetailPanel.js.map +1 -1
- package/index.d.ts +15 -13
- package/index.d.ts.map +1 -1
- package/index.js +11 -8
- package/index.js.map +1 -1
- package/internal/StandingContextField.d.ts +37 -0
- package/internal/StandingContextField.d.ts.map +1 -0
- package/internal/StandingContextField.js +24 -0
- package/internal/StandingContextField.js.map +1 -0
- package/library/InstanceVisibilitySelector.d.ts.map +1 -1
- package/library/InstanceVisibilitySelector.js +9 -2
- package/library/InstanceVisibilitySelector.js.map +1 -1
- package/library/ResourceVisibilityControl.d.ts +13 -3
- package/library/ResourceVisibilityControl.d.ts.map +1 -1
- package/library/ResourceVisibilityControl.js +33 -5
- package/library/ResourceVisibilityControl.js.map +1 -1
- package/library/VisibilityOptionRow.d.ts +6 -0
- package/library/VisibilityOptionRow.d.ts.map +1 -1
- package/library/VisibilityOptionRow.js +11 -1
- package/library/VisibilityOptionRow.js.map +1 -1
- package/library/VisibilitySelector.d.ts.map +1 -1
- package/library/VisibilitySelector.js +14 -2
- package/library/VisibilitySelector.js.map +1 -1
- package/library/index.d.ts +4 -2
- package/library/index.d.ts.map +1 -1
- package/library/index.js +2 -1
- package/library/index.js.map +1 -1
- package/library/useCanSetPublicVisibility.d.ts +30 -0
- package/library/useCanSetPublicVisibility.d.ts.map +1 -0
- package/library/useCanSetPublicVisibility.js +41 -0
- package/library/useCanSetPublicVisibility.js.map +1 -0
- package/library/visibilityLevels.d.ts +32 -1
- package/library/visibilityLevels.d.ts.map +1 -1
- package/library/visibilityLevels.js +34 -14
- package/library/visibilityLevels.js.map +1 -1
- package/mcp-server/McpServerDetailView.js +2 -2
- package/mcp-server/McpServerDetailView.js.map +1 -1
- package/mcp-server/index.d.ts +0 -1
- package/mcp-server/index.d.ts.map +1 -1
- package/mcp-server/index.js +0 -1
- package/mcp-server/index.js.map +1 -1
- package/mcp-server/internal/definitionDrift.d.ts +14 -12
- package/mcp-server/internal/definitionDrift.d.ts.map +1 -1
- package/mcp-server/internal/definitionDrift.js +22 -19
- package/mcp-server/internal/definitionDrift.js.map +1 -1
- package/mcp-server/useMcpServerConnect.d.ts +8 -5
- package/mcp-server/useMcpServerConnect.d.ts.map +1 -1
- package/mcp-server/useMcpServerConnect.js +2 -1
- package/mcp-server/useMcpServerConnect.js.map +1 -1
- package/mcp-server/useMcpServerOAuthConnect.d.ts.map +1 -1
- package/mcp-server/useMcpServerOAuthConnect.js +7 -2
- package/mcp-server/useMcpServerOAuthConnect.js.map +1 -1
- package/mcp-server/useUpdateMcpServer.d.ts +3 -3
- package/mcp-server/useUpdateMcpServer.js +3 -3
- package/models/ModelSelector.d.ts +33 -1
- package/models/ModelSelector.d.ts.map +1 -1
- package/models/ModelSelector.js +37 -4
- package/models/ModelSelector.js.map +1 -1
- package/models/index.d.ts +2 -0
- package/models/index.d.ts.map +1 -1
- package/models/index.js +1 -0
- package/models/index.js.map +1 -1
- package/models/registry.d.ts +16 -0
- package/models/registry.d.ts.map +1 -1
- package/models/registry.js +13 -0
- package/models/registry.js.map +1 -1
- package/models/thinking-mode.d.ts +27 -0
- package/models/thinking-mode.d.ts.map +1 -0
- package/models/thinking-mode.js +32 -0
- package/models/thinking-mode.js.map +1 -0
- package/oauth-app/CreateOAuthAppForm.d.ts +2 -2
- package/oauth-app/CreateOAuthAppForm.d.ts.map +1 -1
- package/oauth-app/CreateOAuthAppForm.js +13 -4
- package/oauth-app/CreateOAuthAppForm.js.map +1 -1
- package/oauth-app/OAuthAppDetailPanel.d.ts.map +1 -1
- package/oauth-app/OAuthAppDetailPanel.js +50 -22
- package/oauth-app/OAuthAppDetailPanel.js.map +1 -1
- package/organization/OrgPreferencesPanel.d.ts +32 -0
- package/organization/OrgPreferencesPanel.d.ts.map +1 -0
- package/organization/OrgPreferencesPanel.js +90 -0
- package/organization/OrgPreferencesPanel.js.map +1 -0
- package/organization/OrgProfilePanel.d.ts.map +1 -1
- package/organization/OrgProfilePanel.js +5 -4
- package/organization/OrgProfilePanel.js.map +1 -1
- package/organization/index.d.ts +2 -0
- package/organization/index.d.ts.map +1 -1
- package/organization/index.js +1 -0
- package/organization/index.js.map +1 -1
- package/package.json +4 -4
- package/platform-client/PlatformClientDetailPanel.d.ts.map +1 -1
- package/platform-client/PlatformClientDetailPanel.js +12 -13
- package/platform-client/PlatformClientDetailPanel.js.map +1 -1
- package/schedule/ScheduleDetailView.d.ts.map +1 -1
- package/schedule/ScheduleDetailView.js +21 -10
- package/schedule/ScheduleDetailView.js.map +1 -1
- package/schedule/ScheduleForm.d.ts.map +1 -1
- package/schedule/ScheduleForm.js +13 -3
- package/schedule/ScheduleForm.js.map +1 -1
- package/session/NewSessionViewer.d.ts +10 -1
- package/session/NewSessionViewer.d.ts.map +1 -1
- package/session/NewSessionViewer.js +2 -1
- package/session/NewSessionViewer.js.map +1 -1
- package/session/run-config.d.ts +9 -0
- package/session/run-config.d.ts.map +1 -1
- package/session/run-config.js +5 -0
- package/session/run-config.js.map +1 -1
- package/session/useNewSessionFlow.d.ts +27 -1
- package/session/useNewSessionFlow.d.ts.map +1 -1
- package/session/useNewSessionFlow.js +51 -8
- package/session/useNewSessionFlow.js.map +1 -1
- package/session/useSessionConversation.d.ts +12 -1
- package/session/useSessionConversation.d.ts.map +1 -1
- package/session/useSessionConversation.js +15 -24
- package/session/useSessionConversation.js.map +1 -1
- package/session/useSessionPageFlow.d.ts.map +1 -1
- package/session/useSessionPageFlow.js +14 -10
- package/session/useSessionPageFlow.js.map +1 -1
- package/session/useUpdateSession.d.ts +18 -24
- package/session/useUpdateSession.d.ts.map +1 -1
- package/session/useUpdateSession.js +18 -24
- package/session/useUpdateSession.js.map +1 -1
- package/settings/AccountPreferencesSection.d.ts +3 -0
- package/settings/AccountPreferencesSection.d.ts.map +1 -0
- package/settings/AccountPreferencesSection.js +10 -0
- package/settings/AccountPreferencesSection.js.map +1 -0
- package/settings/OrgPreferencesSection.d.ts +3 -0
- package/settings/OrgPreferencesSection.d.ts.map +1 -0
- package/settings/OrgPreferencesSection.js +13 -0
- package/settings/OrgPreferencesSection.js.map +1 -0
- package/settings/index.d.ts +2 -0
- package/settings/index.d.ts.map +1 -1
- package/settings/index.js +2 -0
- package/settings/index.js.map +1 -1
- package/settings/settings-nav.d.ts.map +1 -1
- package/settings/settings-nav.js +17 -1
- package/settings/settings-nav.js.map +1 -1
- package/src/agent/AgentDetailView.tsx +2 -2
- package/src/agent/index.ts +0 -2
- package/src/agent/useUpdateAgent.ts +3 -3
- package/src/agent-instance/AgentInstanceDetailPanel.tsx +5 -7
- package/src/agent-instance/__tests__/AgentInstanceDetailPanel.test.tsx +75 -0
- package/src/agent-instance/useUpdateAgentInstance.ts +1 -1
- package/src/attachment/AttachmentChipList.tsx +19 -8
- package/src/attachment/__tests__/AttachmentChipList.test.tsx +12 -0
- package/src/attachment/__tests__/useAttachments.test.ts +293 -0
- package/src/attachment/index.ts +1 -0
- package/src/attachment/useAttachments.ts +143 -11
- package/src/channel/AgentChannelsPanel.tsx +26 -1
- package/src/channel/ChannelRunConfigDialog.tsx +351 -0
- package/src/channel/__tests__/ChannelRunConfigDialog.test.tsx +210 -0
- package/src/channel/index.ts +2 -0
- package/src/channel/useSaveAgentChannel.ts +6 -3
- package/src/channel-app/ChannelAppDetailPanel.tsx +9 -9
- package/src/channel-app/__tests__/channelAppWhatsApp.test.tsx +2 -0
- package/src/channel-app/__tests__/channelAppWipeSafety.test.tsx +87 -0
- package/src/composer/ComposerToolbar.tsx +9 -0
- package/src/composer/SessionComposer.tsx +59 -16
- package/src/composer/__tests__/SessionComposer-thinkingMode.test.tsx +176 -0
- package/src/conversation/ConversationComposer.tsx +38 -4
- package/src/conversation/ConversationTemplatePickerDialog.tsx +441 -0
- package/src/conversation/ConversationsWorkbench.tsx +40 -4
- package/src/conversation/__tests__/ConversationComposer.test.tsx +56 -1
- package/src/conversation/__tests__/ConversationTemplatePickerDialog.test.tsx +224 -0
- package/src/conversation/__tests__/useConversationParticipation.test.tsx +45 -4
- package/src/conversation/index.ts +4 -0
- package/src/conversation/useConversationParticipation.ts +58 -6
- package/src/cursor-accounts/CursorAccountsConsole.tsx +40 -5
- package/src/cursor-accounts/__tests__/CursorAccountsConsole.test.tsx +32 -0
- package/src/cursor-accounts/__tests__/cursor-account-coverage.test.ts +58 -1
- package/src/cursor-accounts/cursor-account-coverage.ts +55 -0
- package/src/execution/useCreateAgentExecution.ts +19 -0
- package/src/identity-account/AccountPreferencesPanel.tsx +532 -0
- package/src/identity-account/__tests__/AccountPreferencesPanel.test.tsx +267 -0
- package/src/identity-account/__tests__/useAccountExecutionDefaults.test.tsx +116 -0
- package/src/identity-account/__tests__/useMyIdentityAccount.test.tsx +121 -0
- package/src/identity-account/index.ts +11 -0
- package/src/identity-account/useAccountExecutionDefaults.ts +63 -0
- package/src/identity-account/useMyIdentityAccount.ts +75 -0
- package/src/identity-account/useUpdateIdentityAccount.ts +73 -0
- package/src/identity-provider/IdentityProviderDetailPanel.tsx +18 -15
- package/src/identity-provider/__tests__/IdentityProviderDetailPanel.test.tsx +80 -0
- package/src/index.ts +26 -4
- package/src/internal/StandingContextField.tsx +92 -0
- package/src/library/InstanceVisibilitySelector.tsx +9 -2
- package/src/library/ResourceVisibilityControl.tsx +46 -13
- package/src/library/VisibilityOptionRow.tsx +28 -6
- package/src/library/VisibilitySelector.tsx +14 -2
- package/src/library/__tests__/VisibilitySelector.test.tsx +48 -1
- package/src/library/__tests__/visibilityLevels.test.ts +67 -1
- package/src/library/index.ts +6 -1
- package/src/library/useCanSetPublicVisibility.ts +56 -0
- package/src/library/visibilityLevels.ts +65 -14
- package/src/mcp-server/McpServerDetailView.tsx +2 -2
- package/src/mcp-server/__tests__/useMcpServerConnect.asyncLane.test.tsx +117 -0
- package/src/mcp-server/index.ts +0 -2
- package/src/mcp-server/internal/definitionDrift.ts +22 -20
- package/src/mcp-server/useMcpServerConnect.ts +9 -6
- package/src/mcp-server/useMcpServerOAuthConnect.ts +7 -2
- package/src/mcp-server/useUpdateMcpServer.ts +3 -3
- package/src/models/ModelSelector.tsx +94 -1
- package/src/models/index.ts +2 -0
- package/src/models/registry.ts +29 -0
- package/src/models/thinking-mode.ts +48 -0
- package/src/oauth-app/CreateOAuthAppForm.tsx +58 -3
- package/src/oauth-app/OAuthAppDetailPanel.tsx +103 -20
- package/src/oauth-app/__tests__/OAuthAppDetailPanel.test.tsx +94 -0
- package/src/organization/OrgPreferencesPanel.tsx +221 -0
- package/src/organization/OrgProfilePanel.tsx +5 -4
- package/src/organization/__tests__/OrgPreferencesPanel.test.tsx +145 -0
- package/src/organization/__tests__/OrgProfilePanel.test.tsx +108 -0
- package/src/organization/index.ts +2 -0
- package/src/platform-client/PlatformClientDetailPanel.tsx +14 -13
- package/src/platform-client/__tests__/PlatformClientDetailPanel.test.tsx +82 -0
- package/src/schedule/ScheduleDetailView.tsx +29 -4
- package/src/schedule/ScheduleForm.tsx +14 -1
- package/src/session/NewSessionViewer.tsx +12 -0
- package/src/session/__tests__/useNewSessionFlow.test.tsx +151 -0
- package/src/session/run-config.ts +16 -0
- package/src/session/useNewSessionFlow.ts +82 -9
- package/src/session/useSessionConversation.ts +32 -40
- package/src/session/useSessionPageFlow.ts +14 -11
- package/src/session/useUpdateSession.ts +18 -24
- package/src/settings/AccountPreferencesSection.tsx +25 -0
- package/src/settings/OrgPreferencesSection.tsx +35 -0
- package/src/settings/__tests__/settings-nav.test.ts +27 -0
- package/src/settings/index.ts +2 -0
- package/src/settings/settings-nav.ts +18 -0
- package/src/workflow/ApprovalFormBuilder.tsx +20 -27
- package/src/workflow/WorkflowDetailView.tsx +2 -2
- package/src/workflow/__tests__/WorkflowInstanceDetailPanel.test.tsx +83 -0
- package/src/workflow/index.ts +0 -2
- package/src/workflow/instance/WorkflowInstanceDetailPanel.tsx +6 -7
- package/src/workflow/useUpdateWorkflow.ts +3 -3
- package/styles.css +1 -1
- package/workflow/ApprovalFormBuilder.d.ts.map +1 -1
- package/workflow/ApprovalFormBuilder.js +10 -5
- package/workflow/ApprovalFormBuilder.js.map +1 -1
- package/workflow/WorkflowDetailView.js +2 -2
- package/workflow/WorkflowDetailView.js.map +1 -1
- package/workflow/index.d.ts +0 -1
- package/workflow/index.d.ts.map +1 -1
- package/workflow/index.js +0 -1
- package/workflow/index.js.map +1 -1
- package/workflow/instance/WorkflowInstanceDetailPanel.d.ts.map +1 -1
- package/workflow/instance/WorkflowInstanceDetailPanel.js +6 -7
- package/workflow/instance/WorkflowInstanceDetailPanel.js.map +1 -1
- package/workflow/useUpdateWorkflow.d.ts +3 -3
- package/workflow/useUpdateWorkflow.js +3 -3
- package/agent/internal/agentToInput.d.ts +0 -15
- package/agent/internal/agentToInput.d.ts.map +0 -1
- package/agent/internal/agentToInput.js +0 -84
- package/agent/internal/agentToInput.js.map +0 -1
- package/mcp-server/internal/mcpServerToInput.d.ts +0 -12
- package/mcp-server/internal/mcpServerToInput.d.ts.map +0 -1
- package/mcp-server/internal/mcpServerToInput.js +0 -84
- package/mcp-server/internal/mcpServerToInput.js.map +0 -1
- package/session/session-spec-converters.d.ts +0 -24
- package/session/session-spec-converters.d.ts.map +0 -1
- package/session/session-spec-converters.js +0 -72
- package/session/session-spec-converters.js.map +0 -1
- package/src/agent/internal/__tests__/agentToInput.test.ts +0 -145
- package/src/agent/internal/agentToInput.ts +0 -102
- package/src/mcp-server/__tests__/mcpServerToInput.test.ts +0 -201
- package/src/mcp-server/internal/mcpServerToInput.ts +0 -98
- package/src/session/__tests__/session-spec-converters.test.ts +0 -183
- package/src/session/session-spec-converters.ts +0 -86
- package/src/workflow/internal/workflowToInput.ts +0 -96
- package/workflow/internal/workflowToInput.d.ts +0 -12
- package/workflow/internal/workflowToInput.d.ts.map +0 -1
- package/workflow/internal/workflowToInput.js +0 -73
- package/workflow/internal/workflowToInput.js.map +0 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { useId, useState } from "react";
|
|
4
|
-
import { Send, TriangleAlert } from "lucide-react";
|
|
4
|
+
import { LayoutTemplate, Send, TriangleAlert } from "lucide-react";
|
|
5
5
|
import { cn } from "@stigmer/theme";
|
|
6
6
|
import { getUserMessage } from "@stigmer/sdk";
|
|
7
7
|
import { ChannelSendOutcome } from "@stigmer/protos/ai/stigmer/agentic/agentchannel/v1/message_io_pb";
|
|
@@ -20,14 +20,14 @@ import { useComposer } from "../composer/useComposer.js";
|
|
|
20
20
|
* renders the error. The timeline shows the delivered item via its own
|
|
21
21
|
* read — this component never fabricates one.
|
|
22
22
|
*/
|
|
23
|
-
export function ConversationComposer({ onSend, isSending, disabledReason, advisory, className, }) {
|
|
23
|
+
export function ConversationComposer({ onSend, isSending, onOpenTemplatePicker, disabledReason, advisory, className, }) {
|
|
24
24
|
const advisoryId = useId();
|
|
25
25
|
const hasAdvisory = advisory != null && advisory !== "";
|
|
26
26
|
const [notice, setNotice] = useState(null);
|
|
27
27
|
const composer = useComposer({
|
|
28
28
|
onSubmit: (message) => {
|
|
29
29
|
setNotice(null);
|
|
30
|
-
onSend(message).then((output) => {
|
|
30
|
+
onSend({ kind: "text", body: message }).then((output) => {
|
|
31
31
|
if (output.outcome === ChannelSendOutcome.refused) {
|
|
32
32
|
// The words never left; keep them so the user can adjust.
|
|
33
33
|
composer.setMessage(message);
|
|
@@ -52,6 +52,6 @@ export function ConversationComposer({ onSend, isSending, disabledReason, adviso
|
|
|
52
52
|
if (disabledReason !== null) {
|
|
53
53
|
return (_jsx("div", { className: cn("stg:border-t stg:border-border stg:px-4 stg:py-3", className), children: _jsx("p", { className: "stg:text-center stg:text-xs stg:text-muted-foreground", children: disabledReason }) }));
|
|
54
54
|
}
|
|
55
|
-
return (_jsxs("div", { className: cn("stg:border-t stg:border-border stg:px-4 stg:py-3", className), children: [hasAdvisory && (_jsxs("p", { id: advisoryId, className: "stg:mb-2 stg:flex stg:items-start stg:gap-1.5 stg:rounded-md stg:bg-status-degraded-subtle stg:px-2.5 stg:py-1.5 stg:text-xs stg:text-status-degraded", children: [_jsx(TriangleAlert, { "aria-hidden": "true", className: "stg:mt-0.5 stg:size-3.5 stg:shrink-0" }), _jsx("span", { className: "stg:min-w-0", children: advisory })] })), notice && (_jsx("p", { className: cn("stg:mb-2 stg:text-xs", notice.kind === "queued" ? "stg:text-muted-foreground" : "stg:text-destructive"), role: "status", children: notice.text })), _jsxs("div", { className: "stg:flex stg:items-end stg:gap-2", children: [_jsx("textarea", { ...composer.textareaProps, rows: 1, placeholder: "Reply as your business\u2026", "aria-label": "Reply to the customer", "aria-describedby": hasAdvisory ? advisoryId : undefined, className: cn("stg:min-h-9 stg:flex-1 stg:resize-none stg:rounded-md stg:border stg:border-border stg:bg-background", "stg:px-3 stg:py-2 stg:text-sm stg:text-foreground stg:placeholder:text-muted-foreground-faint", "stg:focus-visible:outline-none stg:focus-visible:ring-2 stg:focus-visible:ring-ring") }), _jsxs(Button, { variant: "primary", size: "sm", onClick: composer.submit, disabled: !composer.canSubmit || isSending, "aria-label": "Send reply", children: [isSending ? _jsx(SpinnerIcon, {}) : _jsx(Send, { "aria-hidden": "true", className: "stg:size-4" }), isSending ? "Sending…" : "Send"] })] })] }));
|
|
55
|
+
return (_jsxs("div", { className: cn("stg:border-t stg:border-border stg:px-4 stg:py-3", className), children: [hasAdvisory && (_jsxs("p", { id: advisoryId, className: "stg:mb-2 stg:flex stg:items-start stg:gap-1.5 stg:rounded-md stg:bg-status-degraded-subtle stg:px-2.5 stg:py-1.5 stg:text-xs stg:text-status-degraded", children: [_jsx(TriangleAlert, { "aria-hidden": "true", className: "stg:mt-0.5 stg:size-3.5 stg:shrink-0" }), _jsx("span", { className: "stg:min-w-0", children: advisory })] })), notice && (_jsx("p", { className: cn("stg:mb-2 stg:text-xs", notice.kind === "queued" ? "stg:text-muted-foreground" : "stg:text-destructive"), role: "status", children: notice.text })), _jsxs("div", { className: "stg:flex stg:items-end stg:gap-2", children: [_jsx("textarea", { ...composer.textareaProps, rows: 1, placeholder: "Reply as your business\u2026", "aria-label": "Reply to the customer", "aria-describedby": hasAdvisory ? advisoryId : undefined, className: cn("stg:min-h-9 stg:flex-1 stg:resize-none stg:rounded-md stg:border stg:border-border stg:bg-background", "stg:px-3 stg:py-2 stg:text-sm stg:text-foreground stg:placeholder:text-muted-foreground-faint", "stg:focus-visible:outline-none stg:focus-visible:ring-2 stg:focus-visible:ring-ring") }), onOpenTemplatePicker && (_jsx(Button, { variant: "outline", size: "sm", onClick: onOpenTemplatePicker, disabled: isSending, "aria-label": "Send a template reply", children: _jsx(LayoutTemplate, { "aria-hidden": "true", className: "stg:size-4" }) })), _jsxs(Button, { variant: "primary", size: "sm", onClick: composer.submit, disabled: !composer.canSubmit || isSending, "aria-label": "Send reply", children: [isSending ? _jsx(SpinnerIcon, {}) : _jsx(Send, { "aria-hidden": "true", className: "stg:size-4" }), isSending ? "Sending…" : "Send"] })] })] }));
|
|
56
56
|
}
|
|
57
57
|
//# sourceMappingURL=ConversationComposer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConversationComposer.js","sourceRoot":"","sources":["../../src/conversation/ConversationComposer.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"ConversationComposer.js","sourceRoot":"","sources":["../../src/conversation/ConversationComposer.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import type { SendChannelMessageOutput } from "@stigmer/protos/ai/stigmer/agentic/agentchannel/v1/message_io_pb";
|
|
2
|
+
import type { ConversationReplyPayload } from "./useConversationParticipation.js";
|
|
3
|
+
/** Props for {@link ConversationTemplatePickerDialog}. */
|
|
4
|
+
export interface ConversationTemplatePickerDialogProps {
|
|
5
|
+
/** Whether the dialog is open. */
|
|
6
|
+
readonly open: boolean;
|
|
7
|
+
/** Called when the dialog requests an open-state change. */
|
|
8
|
+
readonly onOpenChange: (open: boolean) => void;
|
|
9
|
+
/**
|
|
10
|
+
* The conversation's channel, addressed as the template registry
|
|
11
|
+
* addresses it: `metadata.slug` + `metadata.org` (the registry is
|
|
12
|
+
* derived from the channel's phone number, not stored on a resource).
|
|
13
|
+
*/
|
|
14
|
+
readonly channelSlug: string;
|
|
15
|
+
readonly org: string;
|
|
16
|
+
/**
|
|
17
|
+
* Send the chosen template as a staff reply — the SAME seam the
|
|
18
|
+
* composer's textarea uses (`useConversationParticipation().reply`
|
|
19
|
+
* or the host's wrapper around it), so a template send takes over,
|
|
20
|
+
* settles, and reports outcomes exactly like a text send.
|
|
21
|
+
*/
|
|
22
|
+
readonly onSend: (payload: ConversationReplyPayload) => Promise<SendChannelMessageOutput>;
|
|
23
|
+
/** `true` while a reply is in flight. */
|
|
24
|
+
readonly isSending: boolean;
|
|
25
|
+
/**
|
|
26
|
+
* When `false`, renders as an in-flow open dialog instead of a
|
|
27
|
+
* top-layer modal — for embedding in constrained surfaces
|
|
28
|
+
* (documentation demos, visual tests). Interactive hosts keep the
|
|
29
|
+
* default.
|
|
30
|
+
* @default true
|
|
31
|
+
*/
|
|
32
|
+
readonly modal?: boolean;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Pick a provider-approved template, fill its variables, and send it as
|
|
36
|
+
* a staff reply — the one lane WhatsApp offers a business once the
|
|
37
|
+
* customer's 24-hour service window has closed (cloud#260).
|
|
38
|
+
*
|
|
39
|
+
* Where {@link ChannelTemplatesDialog} is the channel surface's
|
|
40
|
+
* read-only registry *viewer* (every status, diagnosis copy), this is
|
|
41
|
+
* the conversation surface's *picker*: it lists only approved
|
|
42
|
+
* templates, marks the ones this platform version cannot send (an
|
|
43
|
+
* `unsupported_reason` from the server, or an IMAGE header — the send
|
|
44
|
+
* payload needs a public HTTPS asset no console surface can supply
|
|
45
|
+
* yet), and walks the two steps of a send: choose, then fill the
|
|
46
|
+
* `{{...}}` variables with a live preview of the exact body the
|
|
47
|
+
* customer will receive.
|
|
48
|
+
*
|
|
49
|
+
* Outcome honesty mirrors the composer's contract: a `refused` outcome
|
|
50
|
+
* keeps the dialog open with every filled value intact and renders the
|
|
51
|
+
* server's corrective detail verbatim (the pre-check names missing
|
|
52
|
+
* parameters, wrong languages, paused templates); a thrown failure does
|
|
53
|
+
* the same with the transport error. `accepted` and `queued` close the
|
|
54
|
+
* dialog — the ledger row exists, so the timeline shows the real item
|
|
55
|
+
* with its true delivery status (the SDK never fabricates one).
|
|
56
|
+
*
|
|
57
|
+
* The body mounts only while open, so each opening fetches the registry
|
|
58
|
+
* fresh (approval statuses change on the provider's side at any time)
|
|
59
|
+
* and a closed dialog holds no draft — the same clean-reset rule that
|
|
60
|
+
* keys the workbench's detail column (F-22).
|
|
61
|
+
*/
|
|
62
|
+
export declare function ConversationTemplatePickerDialog({ open, onOpenChange, channelSlug, org, onSend, isSending, modal, }: ConversationTemplatePickerDialogProps): import("react/jsx-runtime").JSX.Element;
|
|
63
|
+
//# sourceMappingURL=ConversationTemplatePickerDialog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConversationTemplatePickerDialog.d.ts","sourceRoot":"","sources":["../../src/conversation/ConversationTemplatePickerDialog.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAEV,wBAAwB,EACzB,MAAM,kEAAkE,CAAC;AAS1E,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAElF,0DAA0D;AAC1D,MAAM,WAAW,qCAAqC;IACpD,kCAAkC;IAClC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,4DAA4D;IAC5D,QAAQ,CAAC,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC/C;;;;OAIG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,wBAAwB,KAAK,OAAO,CAAC,wBAAwB,CAAC,CAAC;IAC1F,yCAAyC;IACzC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B;;;;;;OAMG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,gCAAgC,CAAC,EAC/C,IAAI,EACJ,YAAY,EACZ,WAAW,EACX,GAAG,EACH,MAAM,EACN,SAAS,EACT,KAAY,GACb,EAAE,qCAAqC,2CAwBvC"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useId, useMemo, useState } from "react";
|
|
4
|
+
import { ArrowLeft, LayoutTemplate, Send, X } from "lucide-react";
|
|
5
|
+
import { cn } from "@stigmer/theme";
|
|
6
|
+
import { getUserMessage } from "@stigmer/sdk";
|
|
7
|
+
import { ChannelSendOutcome } from "@stigmer/protos/ai/stigmer/agentic/agentchannel/v1/message_io_pb";
|
|
8
|
+
import { Button } from "../button/Button.js";
|
|
9
|
+
import { EmptyState } from "../empty-state/EmptyState.js";
|
|
10
|
+
import { DialogShell } from "../internal/DialogShell.js";
|
|
11
|
+
import { SpinnerIcon } from "../internal/SpinnerIcon.js";
|
|
12
|
+
import { UNSTYLED_LIST } from "../internal/element-resets.js";
|
|
13
|
+
import { TruncatedText } from "../internal/truncated-text.js";
|
|
14
|
+
import { splitTemplateBody } from "../channel/templatePresentation.js";
|
|
15
|
+
import { useChannelTemplateList } from "../channel/useChannelTemplateList.js";
|
|
16
|
+
/**
|
|
17
|
+
* Pick a provider-approved template, fill its variables, and send it as
|
|
18
|
+
* a staff reply — the one lane WhatsApp offers a business once the
|
|
19
|
+
* customer's 24-hour service window has closed (cloud#260).
|
|
20
|
+
*
|
|
21
|
+
* Where {@link ChannelTemplatesDialog} is the channel surface's
|
|
22
|
+
* read-only registry *viewer* (every status, diagnosis copy), this is
|
|
23
|
+
* the conversation surface's *picker*: it lists only approved
|
|
24
|
+
* templates, marks the ones this platform version cannot send (an
|
|
25
|
+
* `unsupported_reason` from the server, or an IMAGE header — the send
|
|
26
|
+
* payload needs a public HTTPS asset no console surface can supply
|
|
27
|
+
* yet), and walks the two steps of a send: choose, then fill the
|
|
28
|
+
* `{{...}}` variables with a live preview of the exact body the
|
|
29
|
+
* customer will receive.
|
|
30
|
+
*
|
|
31
|
+
* Outcome honesty mirrors the composer's contract: a `refused` outcome
|
|
32
|
+
* keeps the dialog open with every filled value intact and renders the
|
|
33
|
+
* server's corrective detail verbatim (the pre-check names missing
|
|
34
|
+
* parameters, wrong languages, paused templates); a thrown failure does
|
|
35
|
+
* the same with the transport error. `accepted` and `queued` close the
|
|
36
|
+
* dialog — the ledger row exists, so the timeline shows the real item
|
|
37
|
+
* with its true delivery status (the SDK never fabricates one).
|
|
38
|
+
*
|
|
39
|
+
* The body mounts only while open, so each opening fetches the registry
|
|
40
|
+
* fresh (approval statuses change on the provider's side at any time)
|
|
41
|
+
* and a closed dialog holds no draft — the same clean-reset rule that
|
|
42
|
+
* keys the workbench's detail column (F-22).
|
|
43
|
+
*/
|
|
44
|
+
export function ConversationTemplatePickerDialog({ open, onOpenChange, channelSlug, org, onSend, isSending, modal = true, }) {
|
|
45
|
+
const titleId = useId();
|
|
46
|
+
return (_jsx(DialogShell, { open: open, onOpenChange: onOpenChange, modal: modal,
|
|
47
|
+
// Template bodies are the content — the templates-dialog width.
|
|
48
|
+
width: "2xl", "aria-labelledby": titleId, children: open && (_jsx(PickerBody, { titleId: titleId, channelSlug: channelSlug, org: org, onSend: onSend, isSending: isSending, onClose: () => onOpenChange(false) })) }));
|
|
49
|
+
}
|
|
50
|
+
/** Why a listed template cannot be sent from here, or null when it can. */
|
|
51
|
+
function unsendableReasonOf(template) {
|
|
52
|
+
if (template.unsupportedReason) {
|
|
53
|
+
return `Not sendable: ${template.unsupportedReason}`;
|
|
54
|
+
}
|
|
55
|
+
if (template.headerFormat === "IMAGE") {
|
|
56
|
+
// The wire's header_image_link needs a public HTTPS asset at send
|
|
57
|
+
// time; no console surface can supply one yet (v1 scope cut,
|
|
58
|
+
// recorded on cloud#260).
|
|
59
|
+
return "Not sendable from the console yet: this template's image header needs a hosted image at send time.";
|
|
60
|
+
}
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
/** The verbatim `{{ key }}` placeholder's inner key. */
|
|
64
|
+
function placeholderKeyOf(placeholder) {
|
|
65
|
+
return placeholder.replace(/^\{\{\s*|\s*\}\}$/g, "");
|
|
66
|
+
}
|
|
67
|
+
function PickerBody({ titleId, channelSlug, org, onSend, isSending, onClose, }) {
|
|
68
|
+
// Approved-only is the wire filter; unsupported/image-header entries
|
|
69
|
+
// still list (marked unsendable) so "why is my template missing"
|
|
70
|
+
// never needs a second surface.
|
|
71
|
+
const { templates, isLoading, error } = useChannelTemplateList(channelSlug, org, {
|
|
72
|
+
approvedOnly: true,
|
|
73
|
+
});
|
|
74
|
+
const [selected, setSelected] = useState(null);
|
|
75
|
+
return (_jsxs("div", { className: "stg:flex stg:max-h-[75vh] stg:flex-col", children: [_jsxs("div", { className: "stg:flex stg:items-start stg:justify-between stg:gap-3 stg:border-b stg:border-border stg:px-5 stg:py-4", children: [_jsxs("div", { className: "stg:flex stg:min-w-0 stg:items-center stg:gap-2", children: [selected !== null && (_jsx(Button, { variant: "ghost", size: "xs", onClick: () => setSelected(null), disabled: isSending, "aria-label": "Back to the template list", children: _jsx(ArrowLeft, { className: "stg:size-4" }) })), _jsxs("div", { className: "stg:min-w-0", children: [_jsx("h2", { id: titleId, className: "stg:text-sm stg:font-semibold stg:text-popover-foreground", children: selected === null ? "Send a template" : selected.name }), _jsx("p", { className: "stg:mt-0.5 stg:text-xs stg:text-muted-foreground", children: selected === null
|
|
76
|
+
? "Approved templates deliver even after the 24-hour reply window closes."
|
|
77
|
+
: "Fill the template's variables — the preview is the exact message the customer receives." })] })] }), _jsx(Button, { variant: "ghost", size: "xs", onClick: onClose, "aria-label": "Close template picker", children: _jsx(X, { className: "stg:size-4" }) })] }), _jsx("div", { className: "stg:min-h-0 stg:flex-1 stg:overflow-y-auto stg:p-4", children: selected === null ? (_jsx(TemplateChoiceList, { templates: templates, isLoading: isLoading, error: error, onChoose: setSelected })) : (_jsx(TemplateFillForm, { template: selected, onSend: onSend, isSending: isSending, onClose: onClose })) })] }));
|
|
78
|
+
}
|
|
79
|
+
function TemplateChoiceList({ templates, isLoading, error, onChoose, }) {
|
|
80
|
+
if (isLoading) {
|
|
81
|
+
return (_jsx("div", { className: "stg:space-y-2 stg:p-1", children: [1, 2, 3].map((i) => (_jsx("div", { className: "stg:h-16 stg:animate-pulse stg:rounded-lg stg:bg-muted-faint" }, i))) }));
|
|
82
|
+
}
|
|
83
|
+
if (error) {
|
|
84
|
+
// Past the fetch, the server's copy is the teaching state — its
|
|
85
|
+
// refusals name the fix verbatim (the templates-dialog posture).
|
|
86
|
+
return (_jsx("p", { className: "stg:px-2 stg:py-6 stg:text-center stg:text-sm stg:text-destructive", children: getUserMessage(error) }));
|
|
87
|
+
}
|
|
88
|
+
if (templates.length === 0) {
|
|
89
|
+
// "found", never "you have none": an empty success is
|
|
90
|
+
// indistinguishable from a filtered or truncated one on the wire.
|
|
91
|
+
return (_jsx(EmptyState, { variant: "first-use", icon: _jsx(LayoutTemplate, { className: "stg:size-8" }), title: "No approved templates found", description: "Templates are authored and approved in WhatsApp Manager — " +
|
|
92
|
+
"Stigmer keeps no copy. Approved templates appear here " +
|
|
93
|
+
"automatically; the channel card's Templates dialog shows every " +
|
|
94
|
+
"status, including pending and rejected ones." }));
|
|
95
|
+
}
|
|
96
|
+
return (_jsx("ul", { className: cn(UNSTYLED_LIST, "stg:space-y-2"), children: templates.map((template) => {
|
|
97
|
+
const unsendable = unsendableReasonOf(template);
|
|
98
|
+
return (_jsx("li", { children: _jsxs("button", { type: "button", onClick: () => onChoose(template), disabled: unsendable !== null, className: cn("stg:w-full stg:rounded-lg stg:border stg:border-border stg:p-3 stg:text-left", "stg:focus-visible:outline-none stg:focus-visible:ring-2 stg:focus-visible:ring-ring", unsendable === null
|
|
99
|
+
? "stg:hover:border-ring stg:hover:bg-muted-faint"
|
|
100
|
+
: "stg:opacity-60"), children: [_jsxs("div", { className: "stg:flex stg:min-w-0 stg:flex-wrap stg:items-center stg:gap-x-2 stg:gap-y-1", children: [_jsx(TruncatedText, { text: template.name, className: "stg:text-sm stg:font-medium stg:text-foreground" }), _jsx("span", { className: "stg:shrink-0 stg:text-xs stg:text-muted-foreground", children: template.language }), template.headerFormat && (_jsxs("span", { className: "stg:shrink-0 stg:rounded stg:bg-muted-subtle stg:px-1.5 stg:py-0.5 stg:text-xs stg:text-muted-foreground", children: [template.headerFormat, " header"] }))] }), template.bodyText && (_jsx("p", { className: "stg:mt-1.5 stg:line-clamp-2 stg:whitespace-pre-wrap stg:text-xs stg:leading-relaxed stg:text-muted-foreground", children: template.bodyText })), unsendable !== null && (_jsx("p", { className: "stg:mt-1.5 stg:text-xs stg:text-warning", children: unsendable }))] }) }, `${template.name}\u0000${template.language}`));
|
|
101
|
+
}) }));
|
|
102
|
+
}
|
|
103
|
+
function TemplateFillForm({ template, onSend, isSending, onClose, }) {
|
|
104
|
+
const fieldIdPrefix = useId();
|
|
105
|
+
const [values, setValues] = useState({});
|
|
106
|
+
const [notice, setNotice] = useState(null);
|
|
107
|
+
const segments = useMemo(() => splitTemplateBody(template.bodyText), [template.bodyText]);
|
|
108
|
+
// The declared parameters are the contract: names for NAMED
|
|
109
|
+
// templates, positions ("1", "2", …) for POSITIONAL — the pre-check
|
|
110
|
+
// refuses anything missing or extra, so the form asks for exactly
|
|
111
|
+
// this list.
|
|
112
|
+
const parameterKeys = template.parameterNames;
|
|
113
|
+
const allFilled = parameterKeys.every((key) => (values[key] ?? "").trim() !== "");
|
|
114
|
+
const handleSend = () => {
|
|
115
|
+
setNotice(null);
|
|
116
|
+
const parameters = Object.fromEntries(parameterKeys.map((key) => [key, (values[key] ?? "").trim()]));
|
|
117
|
+
onSend({
|
|
118
|
+
kind: "template",
|
|
119
|
+
name: template.name,
|
|
120
|
+
// Always the chosen entry's language: (name, language) is the
|
|
121
|
+
// identity we listed, and sending it structurally avoids the
|
|
122
|
+
// wire's ambiguous-language refusal.
|
|
123
|
+
language: template.language,
|
|
124
|
+
parameters,
|
|
125
|
+
}).then((output) => {
|
|
126
|
+
if (output.outcome === ChannelSendOutcome.refused) {
|
|
127
|
+
// The words never left; every filled value stays for the
|
|
128
|
+
// correction the detail asks for (the composer's contract).
|
|
129
|
+
setNotice({
|
|
130
|
+
kind: "refused",
|
|
131
|
+
text: output.detail || "The provider refused this template.",
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
// accepted or queued: the ledger row exists — the timeline
|
|
136
|
+
// shows the real item with its true delivery status.
|
|
137
|
+
onClose();
|
|
138
|
+
}
|
|
139
|
+
}, (err) => {
|
|
140
|
+
setNotice({ kind: "error", text: getUserMessage(err) });
|
|
141
|
+
});
|
|
142
|
+
};
|
|
143
|
+
return (_jsxs("div", { className: "stg:space-y-4", children: [notice && (_jsx("p", { className: "stg:text-xs stg:text-destructive", role: "status", children: notice.text })), parameterKeys.length > 0 && (_jsx("div", { className: "stg:space-y-3", children: parameterKeys.map((key) => (_jsxs("div", { children: [_jsx("label", { htmlFor: `${fieldIdPrefix}-${key}`, className: "stg:mb-1 stg:block stg:text-xs stg:font-medium stg:text-foreground", children: key }), _jsx("input", { id: `${fieldIdPrefix}-${key}`, type: "text", value: values[key] ?? "", onChange: (e) => setValues((v) => ({ ...v, [key]: e.target.value })), disabled: isSending, className: cn("stg:w-full stg:rounded-md stg:border stg:border-border stg:bg-background", "stg:px-3 stg:py-2 stg:text-sm stg:text-foreground stg:placeholder:text-muted-foreground-faint", "stg:focus-visible:outline-none stg:focus-visible:ring-2 stg:focus-visible:ring-ring") })] }, key))) })), _jsxs("div", { children: [_jsx("p", { className: "stg:mb-1 stg:text-xs stg:font-medium stg:text-foreground", children: "Preview" }), _jsx("p", { className: "stg:whitespace-pre-wrap stg:rounded-md stg:border stg:border-border stg:bg-muted-faint stg:p-3 stg:text-sm stg:leading-relaxed stg:text-foreground", children: segments.map((segment, i) => {
|
|
144
|
+
if (segment.kind === "text") {
|
|
145
|
+
return _jsx("span", { children: segment.value }, i);
|
|
146
|
+
}
|
|
147
|
+
const value = (values[placeholderKeyOf(segment.value)] ?? "").trim();
|
|
148
|
+
return value !== "" ? (_jsx("span", { children: value }, i)) : (_jsx("code", { className: "stg:rounded stg:bg-muted-subtle stg:px-1 stg:font-mono stg:text-muted-foreground", children: segment.value }, i));
|
|
149
|
+
}) })] }), _jsx("div", { className: "stg:flex stg:justify-end", children: _jsxs(Button, { variant: "primary", size: "sm", onClick: handleSend, disabled: !allFilled || isSending, "aria-label": "Send template", children: [isSending ? _jsx(SpinnerIcon, {}) : _jsx(Send, { "aria-hidden": "true", className: "stg:size-4" }), isSending ? "Sending…" : "Send template"] }) })] }));
|
|
150
|
+
}
|
|
151
|
+
//# sourceMappingURL=ConversationTemplatePickerDialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConversationTemplatePickerDialog.js","sourceRoot":"","sources":["../../src/conversation/ConversationTemplatePickerDialog.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConversationsWorkbench.d.ts","sourceRoot":"","sources":["../../src/conversation/ConversationsWorkbench.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2DAA2D,CAAC;AAY9F,OAAO,EAAwB,KAAK,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"ConversationsWorkbench.d.ts","sourceRoot":"","sources":["../../src/conversation/ConversationsWorkbench.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2DAA2D,CAAC;AAY9F,OAAO,EAAwB,KAAK,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAiB5F;;;GAGG;AACH,MAAM,WAAW,yBAAyB;IACxC;;;;;;OAMG;IACH,QAAQ,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,CAAC;CACvC;AAED,gDAAgD;AAChD,MAAM,WAAW,2BAA2B;IAC1C,gDAAgD;IAChD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,oBAAoB,GAAG,IAAI,CAAC;IAC/C,2DAA2D;IAC3D,QAAQ,CAAC,iBAAiB,EAAE,CAAC,SAAS,EAAE,oBAAoB,GAAG,IAAI,KAAK,IAAI,CAAC;IAC7E;;;OAGG;IACH,QAAQ,CAAC,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAC3C;;;;;OAKG;IACH,QAAQ,CAAC,eAAe,CAAC,EACrB,KAAK,CAAC,SAAS,GACf,CAAC,CAAC,OAAO,EAAE,yBAAyB,KAAK,KAAK,CAAC,SAAS,CAAC,CAAC;IAC9D;;;;;;OAMG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,MAAM,GAAG,IAAI,CAAC;IAChE,2EAA2E;IAC3E,QAAQ,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC;IACpB,sDAAsD;IACtD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAC,EACrC,GAAG,EACH,QAAQ,EACR,iBAAiB,EACjB,wBAAwB,EACxB,eAAe,EACf,WAAW,EACX,GAAG,EACH,SAAS,GACV,EAAE,2BAA2B,2CAsT7B"}
|
|
@@ -12,11 +12,12 @@ import { ConversationAttentionBanner } from "./ConversationAttentionBanner.js";
|
|
|
12
12
|
import { ConversationComposer } from "./ConversationComposer.js";
|
|
13
13
|
import { ConversationControlBanner } from "./ConversationControlBanner.js";
|
|
14
14
|
import { ConversationListPane } from "./ConversationListPane.js";
|
|
15
|
+
import { ConversationTemplatePickerDialog } from "./ConversationTemplatePickerDialog.js";
|
|
15
16
|
import { ConversationTimelineView } from "./ConversationTimelineView.js";
|
|
16
17
|
import { conversationContactOf, conversationLabelOf, outboundItemIdOf, serviceWindowOf, } from "./conversationPresentation.js";
|
|
17
18
|
import { useConversation } from "./useConversation.js";
|
|
18
19
|
import { useConversationList } from "./useConversationList.js";
|
|
19
|
-
import { useConversationParticipation } from "./useConversationParticipation.js";
|
|
20
|
+
import { useConversationParticipation, } from "./useConversationParticipation.js";
|
|
20
21
|
import { useConversationTimeline } from "./useConversationTimeline.js";
|
|
21
22
|
/**
|
|
22
23
|
* The Conversations console surface (channel-conversations T04), fully
|
|
@@ -84,8 +85,16 @@ export function ConversationsWorkbench({ org, selected, onSelectionChange, curre
|
|
|
84
85
|
const serviceWindow = detail.conversation
|
|
85
86
|
? serviceWindowOf(detail.conversation, descriptor?.id ?? null, now ?? new Date())
|
|
86
87
|
: null;
|
|
88
|
+
// cloud#260: templates are the lane that SUCCEEDS on a closed window,
|
|
89
|
+
// offered from the persistent affordance beside Send — the advisory
|
|
90
|
+
// points at it in copy only (it is the input's description with zero
|
|
91
|
+
// tab stops, F-18; a control inside it would be unreachable context).
|
|
92
|
+
const [templatePickerOpen, setTemplatePickerOpen] = useState(false);
|
|
93
|
+
const templatesAvailable = (descriptor?.supportsMessageTemplates ?? false) && selectedChannel !== null;
|
|
87
94
|
const composerAdvisory = serviceWindow === "closed" && descriptor
|
|
88
|
-
? `${descriptor.label} closes free-form replies 24 hours after the customer's last message — a reply sent now will probably fail. The window reopens when the customer writes again
|
|
95
|
+
? `${descriptor.label} closes free-form replies 24 hours after the customer's last message — a reply sent now will probably fail. The window reopens when the customer writes again.${templatesAvailable
|
|
96
|
+
? " Approved templates still deliver — use the template button beside Send."
|
|
97
|
+
: ""}`
|
|
89
98
|
: null;
|
|
90
99
|
const handleSelect = useCallback((conversation) => onSelectionChange({
|
|
91
100
|
agentChannelId: conversation.agentChannelId,
|
|
@@ -112,8 +121,8 @@ export function ConversationsWorkbench({ org, selected, onSelectionChange, curre
|
|
|
112
121
|
setReplySettling(null);
|
|
113
122
|
}
|
|
114
123
|
}, [timeline.items, settlingItemId]);
|
|
115
|
-
const handleSend = useCallback(async (
|
|
116
|
-
const output = await participation.reply(
|
|
124
|
+
const handleSend = useCallback(async (payload) => {
|
|
125
|
+
const output = await participation.reply(payload);
|
|
117
126
|
// The ledger row is committed before reply answers, so one head
|
|
118
127
|
// refresh renders the REAL item (with its true status) — the SDK
|
|
119
128
|
// never fabricates an optimistic item that might misstate what
|
|
@@ -160,6 +169,8 @@ export function ConversationsWorkbench({ org, selected, onSelectionChange, curre
|
|
|
160
169
|
// The path from a conversation to its channel (F-11):
|
|
161
170
|
// the channel name links to the host's channel surface
|
|
162
171
|
// when a route exists.
|
|
163
|
-
(selectedChannelHref ? (_jsx("a", { href: selectedChannelHref, className: "stg:hover:text-foreground stg:hover:underline", children: channelName })) : (channelName))] }))] }), headerAccessoryNode] }), detail.conversation && (_jsx(ConversationAttentionBanner, { conversation: detail.conversation, participation: participation, supportsStaffReplies: descriptor?.supportsStaffReplies ?? true })), detail.conversation && (_jsx(ConversationControlBanner, { conversation: detail.conversation, participation: participation, unansweredCustomer: unansweredCustomer, supportsStaffReplies: descriptor?.supportsStaffReplies ?? true, currentIdentityAccountId: currentIdentityAccountId })), _jsx(ConversationTimelineView, { items: timeline.items, agentChannelId: selected.agentChannelId, conversationKey: selected.conversationKey, isLoading: timeline.isLoading, error: timeline.error, hasOlder: timeline.hasOlder, loadOlder: timeline.loadOlder, isLoadingOlder: timeline.isLoadingOlder, provider: descriptor?.id ?? null, now: now }), _jsx(ConversationComposer, { onSend: handleSend, isSending: participation.pendingCommands.has("reply") || settlingItemId !== null,
|
|
172
|
+
(selectedChannelHref ? (_jsx("a", { href: selectedChannelHref, className: "stg:hover:text-foreground stg:hover:underline", children: channelName })) : (channelName))] }))] }), headerAccessoryNode] }), detail.conversation && (_jsx(ConversationAttentionBanner, { conversation: detail.conversation, participation: participation, supportsStaffReplies: descriptor?.supportsStaffReplies ?? true })), detail.conversation && (_jsx(ConversationControlBanner, { conversation: detail.conversation, participation: participation, unansweredCustomer: unansweredCustomer, supportsStaffReplies: descriptor?.supportsStaffReplies ?? true, currentIdentityAccountId: currentIdentityAccountId })), _jsx(ConversationTimelineView, { items: timeline.items, agentChannelId: selected.agentChannelId, conversationKey: selected.conversationKey, isLoading: timeline.isLoading, error: timeline.error, hasOlder: timeline.hasOlder, loadOlder: timeline.loadOlder, isLoadingOlder: timeline.isLoadingOlder, provider: descriptor?.id ?? null, now: now }), _jsx(ConversationComposer, { onSend: handleSend, isSending: participation.pendingCommands.has("reply") || settlingItemId !== null, onOpenTemplatePicker: templatesAvailable && composerDisabledReason === null
|
|
173
|
+
? () => setTemplatePickerOpen(true)
|
|
174
|
+
: undefined, disabledReason: composerDisabledReason, advisory: composerAdvisory }), templatesAvailable && (_jsx(ConversationTemplatePickerDialog, { open: templatePickerOpen, onOpenChange: setTemplatePickerOpen, channelSlug: selectedChannel?.metadata?.slug ?? "", org: selectedChannel?.metadata?.org ?? "", onSend: handleSend, isSending: participation.pendingCommands.has("reply") || settlingItemId !== null }))] }, `${selected.agentChannelId}:${selected.conversationKey}`))] }));
|
|
164
175
|
}
|
|
165
176
|
//# sourceMappingURL=ConversationsWorkbench.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConversationsWorkbench.js","sourceRoot":"","sources":["../../src/conversation/ConversationsWorkbench.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AAEpC,OAAO,EACL,6BAA6B,GAE9B,MAAM,uEAAuE,CAAC;AAC/E,OAAO,EAAE,kBAAkB,EAAE,MAAM,kEAAkE,CAAC;AACtG,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAC/E,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,oBAAoB,EAA6B,MAAM,2BAA2B,CAAC;AAC5F,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,gBAAgB,EAChB,eAAe,GAChB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,
|
|
1
|
+
{"version":3,"file":"ConversationsWorkbench.js","sourceRoot":"","sources":["../../src/conversation/ConversationsWorkbench.tsx"],"names":[],"mappings":"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"}
|
package/conversation/index.d.ts
CHANGED
|
@@ -10,6 +10,8 @@ export { ConversationAttentionBanner } from "./ConversationAttentionBanner.js";
|
|
|
10
10
|
export type { ConversationAttentionBannerProps } from "./ConversationAttentionBanner.js";
|
|
11
11
|
export { ConversationComposer } from "./ConversationComposer.js";
|
|
12
12
|
export type { ConversationComposerProps } from "./ConversationComposer.js";
|
|
13
|
+
export { ConversationTemplatePickerDialog } from "./ConversationTemplatePickerDialog.js";
|
|
14
|
+
export type { ConversationTemplatePickerDialogProps } from "./ConversationTemplatePickerDialog.js";
|
|
13
15
|
export { useConversation } from "./useConversation.js";
|
|
14
16
|
export type { UseConversationOptions, UseConversationReturn, } from "./useConversation.js";
|
|
15
17
|
export { useConversationList } from "./useConversationList.js";
|
|
@@ -19,7 +21,7 @@ export type { UseConversationTimelineOptions, UseConversationTimelineReturn, } f
|
|
|
19
21
|
export { useConversationMediaUrl } from "./useConversationMediaUrl.js";
|
|
20
22
|
export type { UseConversationMediaUrlOptions, UseConversationMediaUrlReturn, } from "./useConversationMediaUrl.js";
|
|
21
23
|
export { useConversationParticipation } from "./useConversationParticipation.js";
|
|
22
|
-
export type { ConversationCommand, UseConversationParticipationOptions, UseConversationParticipationReturn, } from "./useConversationParticipation.js";
|
|
24
|
+
export type { ConversationCommand, ConversationReplyPayload, UseConversationParticipationOptions, UseConversationParticipationReturn, } from "./useConversationParticipation.js";
|
|
23
25
|
export { useConversationsWantsHumanCount } from "./useConversationsWantsHumanCount.js";
|
|
24
26
|
export type { UseConversationsWantsHumanCountOptions, UseConversationsWantsHumanCountReturn, } from "./useConversationsWantsHumanCount.js";
|
|
25
27
|
export { authorKindOf, awaitingIndicatorOf, compareTimelineItemsNewestFirst, conversationContactOf, conversationLabelOf, inboundPlaceholderOf, isInternalItem, receiptOf, sendAttemptOf, serviceWindowOf, } from "./conversationPresentation.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/conversation/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,YAAY,EACV,yBAAyB,EACzB,2BAA2B,GAC5B,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,YAAY,EACV,oBAAoB,EACpB,yBAAyB,GAC1B,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,YAAY,EAAE,6BAA6B,EAAE,MAAM,+BAA+B,CAAC;AAEnF,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,YAAY,EAAE,8BAA8B,EAAE,MAAM,gCAAgC,CAAC;AAErF,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAC/E,YAAY,EAAE,gCAAgC,EAAE,MAAM,kCAAkC,CAAC;AAEzF,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,YAAY,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AAE3E,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,YAAY,EACV,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,YAAY,EACV,0BAA0B,EAC1B,yBAAyB,GAC1B,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,YAAY,EACV,8BAA8B,EAC9B,6BAA6B,GAC9B,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,YAAY,EACV,8BAA8B,EAC9B,6BAA6B,GAC9B,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EAAE,4BAA4B,EAAE,MAAM,mCAAmC,CAAC;AACjF,YAAY,EACV,mBAAmB,EACnB,mCAAmC,EACnC,kCAAkC,GACnC,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EAAE,+BAA+B,EAAE,MAAM,sCAAsC,CAAC;AACvF,YAAY,EACV,sCAAsC,EACtC,qCAAqC,GACtC,MAAM,sCAAsC,CAAC;AAE9C,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,+BAA+B,EAC/B,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,cAAc,EACd,SAAS,EACT,aAAa,EACb,eAAe,GAChB,MAAM,+BAA+B,CAAC;AACvC,YAAY,EACV,iBAAiB,EACjB,sBAAsB,EACtB,WAAW,EACX,eAAe,EACf,kBAAkB,GACnB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EACL,mCAAmC,EACnC,oCAAoC,EACpC,kCAAkC,GACnC,MAAM,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/conversation/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,YAAY,EACV,yBAAyB,EACzB,2BAA2B,GAC5B,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,YAAY,EACV,oBAAoB,EACpB,yBAAyB,GAC1B,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,YAAY,EAAE,6BAA6B,EAAE,MAAM,+BAA+B,CAAC;AAEnF,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,YAAY,EAAE,8BAA8B,EAAE,MAAM,gCAAgC,CAAC;AAErF,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAC/E,YAAY,EAAE,gCAAgC,EAAE,MAAM,kCAAkC,CAAC;AAEzF,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,YAAY,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AAE3E,OAAO,EAAE,gCAAgC,EAAE,MAAM,uCAAuC,CAAC;AACzF,YAAY,EAAE,qCAAqC,EAAE,MAAM,uCAAuC,CAAC;AAEnG,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,YAAY,EACV,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,YAAY,EACV,0BAA0B,EAC1B,yBAAyB,GAC1B,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,YAAY,EACV,8BAA8B,EAC9B,6BAA6B,GAC9B,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,YAAY,EACV,8BAA8B,EAC9B,6BAA6B,GAC9B,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EAAE,4BAA4B,EAAE,MAAM,mCAAmC,CAAC;AACjF,YAAY,EACV,mBAAmB,EACnB,wBAAwB,EACxB,mCAAmC,EACnC,kCAAkC,GACnC,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EAAE,+BAA+B,EAAE,MAAM,sCAAsC,CAAC;AACvF,YAAY,EACV,sCAAsC,EACtC,qCAAqC,GACtC,MAAM,sCAAsC,CAAC;AAE9C,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,+BAA+B,EAC/B,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,cAAc,EACd,SAAS,EACT,aAAa,EACb,eAAe,GAChB,MAAM,+BAA+B,CAAC;AACvC,YAAY,EACV,iBAAiB,EACjB,sBAAsB,EACtB,WAAW,EACX,eAAe,EACf,kBAAkB,GACnB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EACL,mCAAmC,EACnC,oCAAoC,EACpC,kCAAkC,GACnC,MAAM,cAAc,CAAC"}
|
package/conversation/index.js
CHANGED
|
@@ -4,6 +4,7 @@ export { ConversationTimelineView } from "./ConversationTimelineView.js";
|
|
|
4
4
|
export { ConversationControlBanner } from "./ConversationControlBanner.js";
|
|
5
5
|
export { ConversationAttentionBanner } from "./ConversationAttentionBanner.js";
|
|
6
6
|
export { ConversationComposer } from "./ConversationComposer.js";
|
|
7
|
+
export { ConversationTemplatePickerDialog } from "./ConversationTemplatePickerDialog.js";
|
|
7
8
|
export { useConversation } from "./useConversation.js";
|
|
8
9
|
export { useConversationList } from "./useConversationList.js";
|
|
9
10
|
export { useConversationTimeline } from "./useConversationTimeline.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/conversation/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAMrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAMjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAGzE,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAG3E,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAG/E,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAGjE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAMvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAM/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAMvE,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAMvE,OAAO,EAAE,4BAA4B,EAAE,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/conversation/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAMrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAMjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAGzE,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAG3E,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAG/E,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAGjE,OAAO,EAAE,gCAAgC,EAAE,MAAM,uCAAuC,CAAC;AAGzF,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAMvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAM/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAMvE,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAMvE,OAAO,EAAE,4BAA4B,EAAE,MAAM,mCAAmC,CAAC;AAQjF,OAAO,EAAE,+BAA+B,EAAE,MAAM,sCAAsC,CAAC;AAMvF,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,+BAA+B,EAC/B,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,cAAc,EACd,SAAS,EACT,aAAa,EACb,eAAe,GAChB,MAAM,+BAA+B,CAAC;AASvC,OAAO,EACL,mCAAmC,EACnC,oCAAoC,EACpC,kCAAkC,GACnC,MAAM,cAAc,CAAC"}
|
|
@@ -2,6 +2,40 @@ import type { ChannelConversation } from "@stigmer/protos/ai/stigmer/agentic/age
|
|
|
2
2
|
import type { SendChannelMessageOutput } from "@stigmer/protos/ai/stigmer/agentic/agentchannel/v1/message_io_pb";
|
|
3
3
|
/** The four staff-facing participation commands. */
|
|
4
4
|
export type ConversationCommand = "reply" | "takeOver" | "handBack" | "clearAttention";
|
|
5
|
+
/**
|
|
6
|
+
* A staff reply's payload — the client-side face of the wire's
|
|
7
|
+
* `ChannelOutboundPayload` oneof. Reply is ONE command with two lanes,
|
|
8
|
+
* never two commands: both lanes share the implicit takeover, the
|
|
9
|
+
* `"reply"` pending key, and the outcome contract.
|
|
10
|
+
*
|
|
11
|
+
* - `text` — free-form; requires an open 24-hour customer-service
|
|
12
|
+
* window on providers that enforce one (WhatsApp).
|
|
13
|
+
* - `template` — a provider-approved message template, the only lane
|
|
14
|
+
* for a closed window. `language` is always required here (the wire
|
|
15
|
+
* allows omitting it for single-language names, but a caller that
|
|
16
|
+
* picked a template knows its language — sending it structurally
|
|
17
|
+
* avoids the ambiguity refusal). Image-header templates are not yet
|
|
18
|
+
* sendable from the SDK: the wire's `header_image_link` needs a
|
|
19
|
+
* public HTTPS asset no console surface can supply today.
|
|
20
|
+
*/
|
|
21
|
+
export type ConversationReplyPayload = {
|
|
22
|
+
readonly kind: "text";
|
|
23
|
+
/** The message body, as the customer will receive it. */
|
|
24
|
+
readonly body: string;
|
|
25
|
+
} | {
|
|
26
|
+
readonly kind: "template";
|
|
27
|
+
/** Template name on the channel provider's registry. */
|
|
28
|
+
readonly name: string;
|
|
29
|
+
/** Template language code (e.g. `"en"`, `"en_US"`). */
|
|
30
|
+
readonly language: string;
|
|
31
|
+
/**
|
|
32
|
+
* Variable values: keyed by parameter name for NAMED templates,
|
|
33
|
+
* by position (`"1"`, `"2"`, …) for POSITIONAL ones — exactly the
|
|
34
|
+
* template's declared parameters, no more, no fewer (the server's
|
|
35
|
+
* pre-check refuses mismatches with a corrective detail).
|
|
36
|
+
*/
|
|
37
|
+
readonly parameters: Readonly<Record<string, string>>;
|
|
38
|
+
};
|
|
5
39
|
/** Options for {@link useConversationParticipation}. */
|
|
6
40
|
export interface UseConversationParticipationOptions {
|
|
7
41
|
/** AgentChannel the conversation belongs to. */
|
|
@@ -21,13 +55,16 @@ export interface UseConversationParticipationOptions {
|
|
|
21
55
|
/** Return value of {@link useConversationParticipation}. */
|
|
22
56
|
export interface UseConversationParticipationReturn {
|
|
23
57
|
/**
|
|
24
|
-
* Send a staff
|
|
25
|
-
*
|
|
26
|
-
*
|
|
58
|
+
* Send a staff reply — text or template (see
|
|
59
|
+
* {@link ConversationReplyPayload}). Resolves with the truthful
|
|
60
|
+
* outcome of the inline attempt: `accepted` (with
|
|
61
|
+
* `outboundMessageId` — the item will appear on the timeline as
|
|
62
|
+
* `ob:<that id>`), `queued`, or `refused` (template pre-check
|
|
63
|
+
* refusals land here too, with the server's corrective detail).
|
|
27
64
|
* A `refused` outcome WITHOUT an `outboundMessageId` left no ledger
|
|
28
65
|
* row and no timeline item will ever exist for it.
|
|
29
66
|
*/
|
|
30
|
-
readonly reply: (
|
|
67
|
+
readonly reply: (payload: ConversationReplyPayload) => Promise<SendChannelMessageOutput>;
|
|
31
68
|
/**
|
|
32
69
|
* Take the conversation over: the agent goes quiet until handBack.
|
|
33
70
|
* Resolves with the fresh row — for the LOSER of a concurrent
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useConversationParticipation.d.ts","sourceRoot":"","sources":["../../src/conversation/useConversationParticipation.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,mBAAmB,EACpB,MAAM,uEAAuE,CAAC;AAM/E,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,kEAAkE,CAAC;AAKjH,oDAAoD;AACpD,MAAM,MAAM,mBAAmB,GAAG,OAAO,GAAG,UAAU,GAAG,UAAU,GAAG,gBAAgB,CAAC;AAEvF,wDAAwD;AACxD,MAAM,WAAW,mCAAmC;IAClD,gDAAgD;IAChD,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,2CAA2C;IAC3C,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC;;;;;;;OAOG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAC;CAChE;AAED,4DAA4D;AAC5D,MAAM,WAAW,kCAAkC;IACjD
|
|
1
|
+
{"version":3,"file":"useConversationParticipation.d.ts","sourceRoot":"","sources":["../../src/conversation/useConversationParticipation.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,mBAAmB,EACpB,MAAM,uEAAuE,CAAC;AAM/E,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,kEAAkE,CAAC;AAKjH,oDAAoD;AACpD,MAAM,MAAM,mBAAmB,GAAG,OAAO,GAAG,UAAU,GAAG,UAAU,GAAG,gBAAgB,CAAC;AAEvF;;;;;;;;;;;;;;;GAeG;AACH,MAAM,MAAM,wBAAwB,GAChC;IACE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,yDAAyD;IACzD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,wDAAwD;IACxD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,uDAAuD;IACvD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACvD,CAAC;AAEN,wDAAwD;AACxD,MAAM,WAAW,mCAAmC;IAClD,gDAAgD;IAChD,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,2CAA2C;IAC3C,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC;;;;;;;OAOG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAC;CAChE;AAED,4DAA4D;AAC5D,MAAM,WAAW,kCAAkC;IACjD;;;;;;;;;OASG;IACH,QAAQ,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,wBAAwB,KAAK,OAAO,CAAC,wBAAwB,CAAC,CAAC;IACzF;;;;;;OAMG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACtD,+CAA+C;IAC/C,QAAQ,CAAC,QAAQ,EAAE,MAAM,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACtD,uEAAuE;IACvE,QAAQ,CAAC,cAAc,EAAE,MAAM,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC5D,oCAAoC;IACpC,QAAQ,CAAC,eAAe,EAAE,WAAW,CAAC,mBAAmB,CAAC,CAAC;IAC3D,kEAAkE;IAClE,QAAQ,CAAC,aAAa,EAAE,WAAW,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC;IAChE,0CAA0C;IAC1C,QAAQ,CAAC,WAAW,EAAE,MAAM,IAAI,CAAC;CAClC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,mCAAmC,GAC3C,kCAAkC,CA6GpC"}
|
|
@@ -37,11 +37,22 @@ export function useConversationParticipation(options) {
|
|
|
37
37
|
onConversation?.(fresh);
|
|
38
38
|
return fresh;
|
|
39
39
|
}), [run, stigmer, controlInput, onConversation]);
|
|
40
|
-
const reply = useCallback((
|
|
40
|
+
const reply = useCallback((payload) => run("reply", async () => {
|
|
41
41
|
const output = await stigmer.agentChannel.reply(create(ReplyToConversationInputSchema, {
|
|
42
42
|
agentChannelId,
|
|
43
43
|
conversationKey,
|
|
44
|
-
payload: {
|
|
44
|
+
payload: {
|
|
45
|
+
kind: payload.kind === "text"
|
|
46
|
+
? { case: "text", value: { body: payload.body } }
|
|
47
|
+
: {
|
|
48
|
+
case: "template",
|
|
49
|
+
value: {
|
|
50
|
+
name: payload.name,
|
|
51
|
+
language: payload.language,
|
|
52
|
+
parameters: { ...payload.parameters },
|
|
53
|
+
},
|
|
54
|
+
},
|
|
55
|
+
},
|
|
45
56
|
}));
|
|
46
57
|
// The implicit takeover flipped control BEFORE the send ran —
|
|
47
58
|
// even a refused reply moved it — but reply answers the send
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useConversationParticipation.js","sourceRoot":"","sources":["../../src/conversation/useConversationParticipation.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAI5C,OAAO,EACL,8BAA8B,EAC9B,iCAAiC,EACjC,8BAA8B,GAC/B,MAAM,uEAAuE,CAAC;AAE/E,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"useConversationParticipation.js","sourceRoot":"","sources":["../../src/conversation/useConversationParticipation.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CursorAccountsConsole.d.ts","sourceRoot":"","sources":["../../src/cursor-accounts/CursorAccountsConsole.tsx"],"names":[],"mappings":"AAsBA,+CAA+C;AAC/C,MAAM,WAAW,0BAA0B;IACzC,kCAAkC;IAClC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAOD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,qBAAqB,CAAC,EAAE,SAAS,EAAE,EAAE,0BAA0B,
|
|
1
|
+
{"version":3,"file":"CursorAccountsConsole.d.ts","sourceRoot":"","sources":["../../src/cursor-accounts/CursorAccountsConsole.tsx"],"names":[],"mappings":"AAsBA,+CAA+C;AAC/C,MAAM,WAAW,0BAA0B;IACzC,kCAAkC;IAClC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAOD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,qBAAqB,CAAC,EAAE,SAAS,EAAE,EAAE,0BAA0B,2CAwI9E"}
|