@stigmer/react 3.12.0 → 3.12.2
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/access/ManageAccessDialog.d.ts.map +1 -1
- package/access/ManageAccessDialog.js +7 -2
- package/access/ManageAccessDialog.js.map +1 -1
- package/activity/format-relative-time.d.ts +11 -9
- package/activity/format-relative-time.d.ts.map +1 -1
- package/activity/format-relative-time.js +11 -9
- package/activity/format-relative-time.js.map +1 -1
- package/agent/steps/CapabilitiesStep.js +5 -2
- package/agent/steps/CapabilitiesStep.js.map +1 -1
- package/agent/steps/IdentityStep.d.ts.map +1 -1
- package/agent/steps/IdentityStep.js +6 -5
- package/agent/steps/IdentityStep.js.map +1 -1
- package/agent-instance/CreateAgentInstanceDialog.d.ts.map +1 -1
- package/agent-instance/CreateAgentInstanceDialog.js +10 -2
- package/agent-instance/CreateAgentInstanceDialog.js.map +1 -1
- package/api-key/ApiKeyCreatedAlert.d.ts.map +1 -1
- package/api-key/ApiKeyCreatedAlert.js +12 -20
- package/api-key/ApiKeyCreatedAlert.js.map +1 -1
- package/api-key/ApiKeyListPanel.d.ts.map +1 -1
- package/api-key/ApiKeyListPanel.js +3 -23
- package/api-key/ApiKeyListPanel.js.map +1 -1
- package/api-key/CreateApiKeyForm.d.ts.map +1 -1
- package/api-key/CreateApiKeyForm.js +6 -10
- package/api-key/CreateApiKeyForm.js.map +1 -1
- package/approval-defaults-context.d.ts +47 -0
- package/approval-defaults-context.d.ts.map +1 -0
- package/approval-defaults-context.js +27 -0
- package/approval-defaults-context.js.map +1 -0
- package/attachment/index.d.ts +2 -0
- package/attachment/index.d.ts.map +1 -1
- package/attachment/index.js +1 -0
- package/attachment/index.js.map +1 -1
- package/attachment/vision-preflight.d.ts +113 -0
- package/attachment/vision-preflight.d.ts.map +1 -0
- package/attachment/vision-preflight.js +143 -0
- package/attachment/vision-preflight.js.map +1 -0
- package/billing/AutoRechargeCard.d.ts.map +1 -1
- package/billing/AutoRechargeCard.js +3 -2
- package/billing/AutoRechargeCard.js.map +1 -1
- package/billing/BillingSection.d.ts.map +1 -1
- package/billing/BillingSection.js +3 -2
- package/billing/BillingSection.js.map +1 -1
- package/channel/ChannelConversationsDialog.d.ts.map +1 -1
- package/channel/ChannelConversationsDialog.js +5 -4
- package/channel/ChannelConversationsDialog.js.map +1 -1
- package/channel/ChannelCredentialsDialog.d.ts.map +1 -1
- package/channel/ChannelCredentialsDialog.js +9 -4
- package/channel/ChannelCredentialsDialog.js.map +1 -1
- package/channel/ChannelTemplatesDialog.d.ts.map +1 -1
- package/channel/ChannelTemplatesDialog.js +5 -4
- package/channel/ChannelTemplatesDialog.js.map +1 -1
- package/channel/ConnectSlackDialog.d.ts.map +1 -1
- package/channel/ConnectSlackDialog.js +9 -4
- package/channel/ConnectSlackDialog.js.map +1 -1
- package/channel/ConnectWhatsAppDialog.d.ts.map +1 -1
- package/channel/ConnectWhatsAppDialog.js +9 -4
- package/channel/ConnectWhatsAppDialog.js.map +1 -1
- package/channel/useChannelSessions.d.ts.map +1 -1
- package/channel/useChannelSessions.js.map +1 -1
- package/channel-app/ChannelAppDetailPanel.d.ts.map +1 -1
- package/channel-app/ChannelAppDetailPanel.js +8 -5
- package/channel-app/ChannelAppDetailPanel.js.map +1 -1
- package/channel-app/CreateChannelAppForm.d.ts.map +1 -1
- package/channel-app/CreateChannelAppForm.js +12 -7
- package/channel-app/CreateChannelAppForm.js.map +1 -1
- package/channel-app/internal.d.ts +0 -1
- package/channel-app/internal.d.ts.map +1 -1
- package/channel-app/internal.js +5 -10
- package/channel-app/internal.js.map +1 -1
- package/composer/ComposerToolbar.js +2 -1
- package/composer/ComposerToolbar.js.map +1 -1
- package/composer/SessionComposer.d.ts +1 -1
- package/composer/SessionComposer.d.ts.map +1 -1
- package/composer/SessionComposer.js +120 -13
- package/composer/SessionComposer.js.map +1 -1
- package/composer/icons.d.ts +0 -1
- package/composer/icons.d.ts.map +1 -1
- package/composer/icons.js +0 -3
- package/composer/icons.js.map +1 -1
- package/conversation/ConversationComposer.js +1 -1
- package/conversation/ConversationComposer.js.map +1 -1
- package/conversation/ConversationListPane.d.ts.map +1 -1
- package/conversation/ConversationListPane.js +3 -2
- package/conversation/ConversationListPane.js.map +1 -1
- package/cursor-accounts/MemberCoverageTable.js +3 -14
- package/cursor-accounts/MemberCoverageTable.js.map +1 -1
- package/dashboard/DashboardFailedRuns.d.ts.map +1 -1
- package/dashboard/DashboardFailedRuns.js +2 -14
- package/dashboard/DashboardFailedRuns.js.map +1 -1
- package/environment/CreateEnvironmentForm.d.ts.map +1 -1
- package/environment/CreateEnvironmentForm.js +4 -8
- package/environment/CreateEnvironmentForm.js.map +1 -1
- package/environment/EnvVarForm.d.ts.map +1 -1
- package/environment/EnvVarForm.js +2 -4
- package/environment/EnvVarForm.js.map +1 -1
- package/environment/EnvironmentVariableEditor.d.ts.map +1 -1
- package/environment/EnvironmentVariableEditor.js +5 -7
- package/environment/EnvironmentVariableEditor.js.map +1 -1
- package/execution/ArtifactApplyButton.d.ts.map +1 -1
- package/execution/ArtifactApplyButton.js +2 -4
- package/execution/ArtifactApplyButton.js.map +1 -1
- package/execution/ExecutionErrorNotice.d.ts +36 -0
- package/execution/ExecutionErrorNotice.d.ts.map +1 -0
- package/execution/ExecutionErrorNotice.js +39 -0
- package/execution/ExecutionErrorNotice.js.map +1 -0
- package/execution/FilePathLink.d.ts.map +1 -1
- package/execution/FilePathLink.js +5 -8
- package/execution/FilePathLink.js.map +1 -1
- package/execution/FileReviewCard.d.ts.map +1 -1
- package/execution/FileReviewCard.js +1 -6
- package/execution/FileReviewCard.js.map +1 -1
- package/execution/FollowUpInput.d.ts.map +1 -1
- package/execution/FollowUpInput.js +1 -3
- package/execution/FollowUpInput.js.map +1 -1
- package/execution/LivenessStatusLine.d.ts +40 -0
- package/execution/LivenessStatusLine.d.ts.map +1 -0
- package/execution/LivenessStatusLine.js +34 -0
- package/execution/LivenessStatusLine.js.map +1 -0
- package/execution/MessageEntry.d.ts.map +1 -1
- package/execution/MessageEntry.js +31 -3
- package/execution/MessageEntry.js.map +1 -1
- package/execution/MessageThread.d.ts +25 -0
- package/execution/MessageThread.d.ts.map +1 -1
- package/execution/MessageThread.js +51 -36
- package/execution/MessageThread.js.map +1 -1
- package/execution/SetupProgress.d.ts.map +1 -1
- package/execution/SetupProgress.js +1 -1
- package/execution/SetupProgress.js.map +1 -1
- package/execution/SubAgentSection.d.ts.map +1 -1
- package/execution/SubAgentSection.js +9 -7
- package/execution/SubAgentSection.js.map +1 -1
- package/execution/TerminalSession.d.ts +30 -0
- package/execution/TerminalSession.d.ts.map +1 -1
- package/execution/TerminalSession.js +37 -1
- package/execution/TerminalSession.js.map +1 -1
- package/execution/ToolCallDetail.d.ts +9 -0
- package/execution/ToolCallDetail.d.ts.map +1 -1
- package/execution/ToolCallDetail.js +16 -0
- package/execution/ToolCallDetail.js.map +1 -1
- package/execution/ToolCallItem.d.ts +20 -6
- package/execution/ToolCallItem.d.ts.map +1 -1
- package/execution/ToolCallItem.js +102 -29
- package/execution/ToolCallItem.js.map +1 -1
- package/execution/ToolRunGroup.d.ts.map +1 -1
- package/execution/ToolRunGroup.js +11 -11
- package/execution/ToolRunGroup.js.map +1 -1
- package/execution/WriteBackCard.d.ts.map +1 -1
- package/execution/WriteBackCard.js +5 -20
- package/execution/WriteBackCard.js.map +1 -1
- package/execution/index.d.ts +6 -2
- package/execution/index.d.ts.map +1 -1
- package/execution/index.js +3 -1
- package/execution/index.js.map +1 -1
- package/execution/tool-categories.d.ts +42 -7
- package/execution/tool-categories.d.ts.map +1 -1
- package/execution/tool-categories.js +38 -4
- package/execution/tool-categories.js.map +1 -1
- package/execution/tool-presenter.d.ts +17 -1
- package/execution/tool-presenter.d.ts.map +1 -1
- package/execution/tool-presenter.js +4 -1
- package/execution/tool-presenter.js.map +1 -1
- package/execution/useArtifactInspection.d.ts.map +1 -1
- package/execution/useArtifactInspection.js +4 -7
- package/execution/useArtifactInspection.js.map +1 -1
- package/execution/useCreateAgentExecution.d.ts +3 -2
- package/execution/useCreateAgentExecution.d.ts.map +1 -1
- package/execution/useCreateAgentExecution.js.map +1 -1
- package/iam-policy/GrantAccessForm.d.ts.map +1 -1
- package/iam-policy/GrantAccessForm.js +2 -4
- package/iam-policy/GrantAccessForm.js.map +1 -1
- package/iam-policy/OrgMembersPanel.d.ts.map +1 -1
- package/iam-policy/OrgMembersPanel.js +3 -5
- package/iam-policy/OrgMembersPanel.js.map +1 -1
- package/iam-policy/RoleSelector.d.ts.map +1 -1
- package/iam-policy/RoleSelector.js +7 -1
- package/iam-policy/RoleSelector.js.map +1 -1
- package/identity-provider/CreateIdentityProviderForm.d.ts.map +1 -1
- package/identity-provider/CreateIdentityProviderForm.js +6 -9
- package/identity-provider/CreateIdentityProviderForm.js.map +1 -1
- package/identity-provider/IdentityProviderDetailPanel.d.ts.map +1 -1
- package/identity-provider/IdentityProviderDetailPanel.js +17 -26
- package/identity-provider/IdentityProviderDetailPanel.js.map +1 -1
- package/identity-provider/IdentityProviderListPanel.d.ts.map +1 -1
- package/identity-provider/IdentityProviderListPanel.js +2 -4
- package/identity-provider/IdentityProviderListPanel.js.map +1 -1
- package/identity-provider/IdentityProviderWizard.d.ts.map +1 -1
- package/identity-provider/IdentityProviderWizard.js +8 -7
- package/identity-provider/IdentityProviderWizard.js.map +1 -1
- package/identity-provider/SsoLoginPrompt.js +5 -6
- package/identity-provider/SsoLoginPrompt.js.map +1 -1
- package/index.d.ts +9 -8
- package/index.d.ts.map +1 -1
- package/index.js +4 -4
- package/index.js.map +1 -1
- package/internal/DecisionButton.d.ts.map +1 -1
- package/internal/DecisionButton.js +1 -6
- package/internal/DecisionButton.js.map +1 -1
- package/internal/SpinnerIcon.d.ts +22 -0
- package/internal/SpinnerIcon.d.ts.map +1 -0
- package/internal/SpinnerIcon.js +23 -0
- package/internal/SpinnerIcon.js.map +1 -0
- package/internal/isUnimplemented.d.ts +17 -0
- package/internal/isUnimplemented.d.ts.map +1 -0
- package/internal/isUnimplemented.js +26 -0
- package/internal/isUnimplemented.js.map +1 -0
- package/internal/select-element-text.d.ts +11 -0
- package/internal/select-element-text.d.ts.map +1 -0
- package/internal/select-element-text.js +19 -0
- package/internal/select-element-text.js.map +1 -0
- package/internal/thread-card/ThreadCardShell.d.ts +27 -10
- package/internal/thread-card/ThreadCardShell.d.ts.map +1 -1
- package/internal/thread-card/ThreadCardShell.js +11 -5
- package/internal/thread-card/ThreadCardShell.js.map +1 -1
- package/internal/thread-card/glyphs.d.ts +11 -2
- package/internal/thread-card/glyphs.d.ts.map +1 -1
- package/internal/thread-card/glyphs.js +9 -3
- package/internal/thread-card/glyphs.js.map +1 -1
- package/internal/thread-card/index.d.ts +1 -1
- package/internal/thread-card/index.d.ts.map +1 -1
- package/internal/thread-card/index.js.map +1 -1
- package/internal/useCopyFeedback.d.ts +28 -0
- package/internal/useCopyFeedback.d.ts.map +1 -0
- package/internal/useCopyFeedback.js +40 -0
- package/internal/useCopyFeedback.js.map +1 -0
- package/invitation/InvitationCreatedAlert.d.ts.map +1 -1
- package/invitation/InvitationCreatedAlert.js +12 -19
- package/invitation/InvitationCreatedAlert.js.map +1 -1
- package/invitation/InvitationManager.d.ts.map +1 -1
- package/invitation/InvitationManager.js +14 -21
- package/invitation/InvitationManager.js.map +1 -1
- package/invitation/InvitationRedemption.d.ts.map +1 -1
- package/invitation/InvitationRedemption.js +2 -4
- package/invitation/InvitationRedemption.js.map +1 -1
- package/library/useExportResource.d.ts.map +1 -1
- package/library/useExportResource.js +16 -27
- package/library/useExportResource.js.map +1 -1
- package/manifest/ApplyManifestDialog.js +1 -1
- package/manifest/EditResourceYamlDialog.js +1 -1
- package/mcp-server/DefinitionDriftNotice.d.ts +42 -0
- package/mcp-server/DefinitionDriftNotice.d.ts.map +1 -0
- package/mcp-server/DefinitionDriftNotice.js +52 -0
- package/mcp-server/DefinitionDriftNotice.js.map +1 -0
- package/mcp-server/McpServerConnectDialog.js +8 -4
- package/mcp-server/McpServerConnectDialog.js.map +1 -1
- package/mcp-server/McpServerDetailView.d.ts.map +1 -1
- package/mcp-server/McpServerDetailView.js +47 -14
- package/mcp-server/McpServerDetailView.js.map +1 -1
- package/mcp-server/OAuthAppForm.d.ts.map +1 -1
- package/mcp-server/OAuthAppForm.js +2 -4
- package/mcp-server/OAuthAppForm.js.map +1 -1
- package/mcp-server/internal/definitionDrift.d.ts +39 -0
- package/mcp-server/internal/definitionDrift.d.ts.map +1 -0
- package/mcp-server/internal/definitionDrift.js +122 -0
- package/mcp-server/internal/definitionDrift.js.map +1 -0
- package/mcp-server/internal/mcpServerToInput.d.ts.map +1 -1
- package/mcp-server/internal/mcpServerToInput.js +3 -0
- package/mcp-server/internal/mcpServerToInput.js.map +1 -1
- package/mcp-server/steps/EnvironmentAuthStep.d.ts.map +1 -1
- package/mcp-server/steps/EnvironmentAuthStep.js +8 -4
- package/mcp-server/steps/EnvironmentAuthStep.js.map +1 -1
- package/mcp-server/steps/IdentityTransportStep.d.ts.map +1 -1
- package/mcp-server/steps/IdentityTransportStep.js +5 -4
- package/mcp-server/steps/IdentityTransportStep.js.map +1 -1
- package/mcp-server/useMcpServerConnect.d.ts +1 -1
- package/mcp-server/useMcpServerCredentials.d.ts +38 -10
- package/mcp-server/useMcpServerCredentials.d.ts.map +1 -1
- package/mcp-server/useMcpServerCredentials.js +50 -7
- package/mcp-server/useMcpServerCredentials.js.map +1 -1
- package/mcp-server/useMcpServerDefinitionDrift.d.ts +44 -0
- package/mcp-server/useMcpServerDefinitionDrift.d.ts.map +1 -0
- package/mcp-server/useMcpServerDefinitionDrift.js +61 -0
- package/mcp-server/useMcpServerDefinitionDrift.js.map +1 -0
- package/mcp-server/useOrgOAuthApp.d.ts +22 -0
- package/mcp-server/useOrgOAuthApp.d.ts.map +1 -1
- package/mcp-server/useOrgOAuthApp.js +39 -7
- package/mcp-server/useOrgOAuthApp.js.map +1 -1
- package/models/ModelRegistryContext.d.ts +7 -1
- package/models/ModelRegistryContext.d.ts.map +1 -1
- package/models/ModelRegistryContext.js.map +1 -1
- package/models/ModelSelector.js +9 -1
- package/models/ModelSelector.js.map +1 -1
- package/models/index.d.ts +2 -2
- package/models/index.d.ts.map +1 -1
- package/models/index.js +1 -1
- package/models/index.js.map +1 -1
- package/models/registry.d.ts +88 -6
- package/models/registry.d.ts.map +1 -1
- package/models/registry.js +133 -27
- package/models/registry.js.map +1 -1
- package/models/useModelRegistry.d.ts +7 -1
- package/models/useModelRegistry.d.ts.map +1 -1
- package/models/useModelRegistry.js +3 -2
- package/models/useModelRegistry.js.map +1 -1
- package/oauth-app/CreateOAuthAppForm.d.ts.map +1 -1
- package/oauth-app/CreateOAuthAppForm.js +4 -5
- package/oauth-app/CreateOAuthAppForm.js.map +1 -1
- package/oauth-app/OAuthAppDetailPanel.d.ts.map +1 -1
- package/oauth-app/OAuthAppDetailPanel.js +5 -6
- package/oauth-app/OAuthAppDetailPanel.js.map +1 -1
- package/organization/CreateOrganizationForm.d.ts.map +1 -1
- package/organization/CreateOrganizationForm.js +5 -9
- package/organization/CreateOrganizationForm.js.map +1 -1
- package/organization/OrgProfilePanel.d.ts.map +1 -1
- package/organization/OrgProfilePanel.js +7 -16
- package/organization/OrgProfilePanel.js.map +1 -1
- package/package.json +4 -4
- package/platform-client/CreatePlatformClientForm.d.ts.map +1 -1
- package/platform-client/CreatePlatformClientForm.js +5 -6
- package/platform-client/CreatePlatformClientForm.js.map +1 -1
- package/platform-client/PlatformClientDetailPanel.d.ts.map +1 -1
- package/platform-client/PlatformClientDetailPanel.js +6 -7
- package/platform-client/PlatformClientDetailPanel.js.map +1 -1
- package/platform-client/PlatformClientListPanel.d.ts.map +1 -1
- package/platform-client/PlatformClientListPanel.js +2 -4
- package/platform-client/PlatformClientListPanel.js.map +1 -1
- package/platform-client/PlatformClientSecretAlert.d.ts.map +1 -1
- package/platform-client/PlatformClientSecretAlert.js +18 -25
- package/platform-client/PlatformClientSecretAlert.js.map +1 -1
- package/provider.d.ts +34 -1
- package/provider.d.ts.map +1 -1
- package/provider.js +14 -7
- package/provider.js.map +1 -1
- package/resource-creation/WizardNav.d.ts.map +1 -1
- package/resource-creation/WizardNav.js +2 -4
- package/resource-creation/WizardNav.js.map +1 -1
- package/resource-detail/ConfirmDialog.js +1 -1
- package/resource-detail/useCopyResource.d.ts +4 -3
- package/resource-detail/useCopyResource.d.ts.map +1 -1
- package/resource-detail/useCopyResource.js +10 -19
- package/resource-detail/useCopyResource.js.map +1 -1
- package/schedule/ScheduleDetailView.d.ts.map +1 -1
- package/schedule/ScheduleDetailView.js +2 -4
- package/schedule/ScheduleDetailView.js.map +1 -1
- package/schedule/ScheduleForm.d.ts.map +1 -1
- package/schedule/ScheduleForm.js +6 -7
- package/schedule/ScheduleForm.js.map +1 -1
- package/session/NewSessionViewer.d.ts +52 -2
- package/session/NewSessionViewer.d.ts.map +1 -1
- package/session/NewSessionViewer.js +21 -6
- package/session/NewSessionViewer.js.map +1 -1
- package/session/SessionViewer.d.ts +63 -2
- package/session/SessionViewer.d.ts.map +1 -1
- package/session/SessionViewer.js +43 -17
- package/session/SessionViewer.js.map +1 -1
- package/session/audience.d.ts +17 -0
- package/session/audience.d.ts.map +1 -1
- package/session/index.d.ts +2 -1
- package/session/index.d.ts.map +1 -1
- package/session/index.js.map +1 -1
- package/session/run-config.d.ts +50 -0
- package/session/run-config.d.ts.map +1 -0
- package/session/run-config.js +15 -0
- package/session/run-config.js.map +1 -0
- package/session/useNewSessionFlow.d.ts +11 -0
- package/session/useNewSessionFlow.d.ts.map +1 -1
- package/session/useNewSessionFlow.js +29 -2
- package/session/useNewSessionFlow.js.map +1 -1
- package/session/useSessionConversation.d.ts +11 -9
- package/session/useSessionConversation.d.ts.map +1 -1
- package/session/useSessionConversation.js +2 -0
- package/session/useSessionConversation.js.map +1 -1
- package/session/useSessionPageFlow.d.ts +18 -4
- package/session/useSessionPageFlow.d.ts.map +1 -1
- package/session/useSessionPageFlow.js +33 -6
- package/session/useSessionPageFlow.js.map +1 -1
- package/session/useSessionPanel.d.ts +37 -2
- package/session/useSessionPanel.d.ts.map +1 -1
- package/session/useSessionPanel.js +44 -10
- package/session/useSessionPanel.js.map +1 -1
- package/settings/ApiKeysSection.d.ts.map +1 -1
- package/settings/ApiKeysSection.js +3 -2
- package/settings/ApiKeysSection.js.map +1 -1
- package/settings/ChannelAppsSection.d.ts.map +1 -1
- package/settings/ChannelAppsSection.js +3 -2
- package/settings/ChannelAppsSection.js.map +1 -1
- package/settings/EnvironmentsSection.js +5 -3
- package/settings/EnvironmentsSection.js.map +1 -1
- package/settings/IdentityProvidersSection.d.ts.map +1 -1
- package/settings/IdentityProvidersSection.js +3 -2
- package/settings/IdentityProvidersSection.js.map +1 -1
- package/settings/InvitationsSection.d.ts.map +1 -1
- package/settings/InvitationsSection.js +3 -1
- package/settings/InvitationsSection.js.map +1 -1
- package/settings/MembersSection.d.ts.map +1 -1
- package/settings/MembersSection.js +3 -1
- package/settings/MembersSection.js.map +1 -1
- package/settings/OAuthAppsSection.d.ts.map +1 -1
- package/settings/OAuthAppsSection.js +3 -2
- package/settings/OAuthAppsSection.js.map +1 -1
- package/settings/OrgProfileSection.d.ts.map +1 -1
- package/settings/OrgProfileSection.js +3 -2
- package/settings/OrgProfileSection.js.map +1 -1
- package/settings/PlatformClientsSection.d.ts.map +1 -1
- package/settings/PlatformClientsSection.js +3 -2
- package/settings/PlatformClientsSection.js.map +1 -1
- package/settings/UsageSection.d.ts.map +1 -1
- package/settings/UsageSection.js +3 -1
- package/settings/UsageSection.js.map +1 -1
- package/sharing/ShareAgentDialog.d.ts.map +1 -1
- package/sharing/ShareAgentDialog.js +18 -7
- package/sharing/ShareAgentDialog.js.map +1 -1
- package/sidebar/chrome.d.ts +3 -4
- package/sidebar/chrome.d.ts.map +1 -1
- package/sidebar/chrome.js +5 -4
- package/sidebar/chrome.js.map +1 -1
- package/skill/SkillDiffDialog.js +1 -1
- package/skill/useSkillVersions.d.ts.map +1 -1
- package/skill/useSkillVersions.js +1 -9
- package/skill/useSkillVersions.js.map +1 -1
- package/src/access/ManageAccessDialog.tsx +10 -4
- package/src/activity/format-relative-time.ts +11 -9
- package/src/agent/steps/CapabilitiesStep.tsx +6 -3
- package/src/agent/steps/IdentityStep.tsx +19 -12
- package/src/agent-instance/CreateAgentInstanceDialog.tsx +17 -8
- package/src/api-key/ApiKeyCreatedAlert.tsx +10 -19
- package/src/api-key/ApiKeyListPanel.tsx +3 -39
- package/src/api-key/CreateApiKeyForm.tsx +12 -26
- package/src/approval-defaults-context.ts +56 -0
- package/src/attachment/__tests__/vision-preflight.test.ts +311 -0
- package/src/attachment/index.ts +12 -0
- package/src/attachment/vision-preflight.ts +236 -0
- package/src/billing/AutoRechargeCard.tsx +5 -4
- package/src/billing/BillingSection.tsx +4 -3
- package/src/channel/ChannelConversationsDialog.tsx +8 -4
- package/src/channel/ChannelCredentialsDialog.tsx +14 -4
- package/src/channel/ChannelTemplatesDialog.tsx +8 -4
- package/src/channel/ConnectSlackDialog.tsx +14 -4
- package/src/channel/ConnectWhatsAppDialog.tsx +14 -4
- package/src/channel/useChannelSessions.ts +3 -0
- package/src/channel-app/ChannelAppDetailPanel.tsx +15 -12
- package/src/channel-app/CreateChannelAppForm.tsx +17 -12
- package/src/channel-app/internal.tsx +5 -25
- package/src/composer/ComposerToolbar.tsx +1 -1
- package/src/composer/SessionComposer.tsx +160 -13
- package/src/composer/__tests__/SessionComposer-modelCoherence.test.tsx +220 -0
- package/src/composer/__tests__/SessionComposer-visionPreflight.test.tsx +222 -0
- package/src/composer/icons.tsx +0 -18
- package/src/conversation/ConversationComposer.tsx +1 -1
- package/src/conversation/ConversationListPane.tsx +4 -3
- package/src/cursor-accounts/MemberCoverageTable.tsx +3 -14
- package/src/cursor-accounts/__tests__/CursorAccountsConsole.test.tsx +2 -10
- package/src/dashboard/DashboardFailedRuns.tsx +2 -12
- package/src/environment/CreateEnvironmentForm.tsx +8 -27
- package/src/environment/EnvVarForm.tsx +2 -18
- package/src/environment/EnvironmentVariableEditor.tsx +5 -21
- package/src/execution/ArtifactApplyButton.tsx +2 -17
- package/src/execution/ExecutionErrorNotice.tsx +99 -0
- package/src/execution/FilePathLink.tsx +5 -9
- package/src/execution/FileReviewCard.tsx +1 -20
- package/src/execution/FollowUpInput.tsx +1 -16
- package/src/execution/LivenessStatusLine.tsx +59 -0
- package/src/execution/MessageEntry.tsx +136 -25
- package/src/execution/MessageThread.tsx +84 -83
- package/src/execution/SetupProgress.tsx +5 -1
- package/src/execution/SubAgentSection.tsx +9 -20
- package/src/execution/TerminalSession.tsx +97 -10
- package/src/execution/ToolCallDetail.tsx +19 -0
- package/src/execution/ToolCallItem.tsx +157 -37
- package/src/execution/ToolRunGroup.tsx +30 -32
- package/src/execution/WriteBackCard.tsx +5 -24
- package/src/execution/__tests__/MessageEntry-copy.test.tsx +125 -0
- package/src/execution/__tests__/MessageThread.test.tsx +97 -0
- package/src/execution/__tests__/TerminalSession.test.tsx +71 -1
- package/src/execution/__tests__/ToolCallDetail.test.tsx +33 -1
- package/src/execution/__tests__/ToolCallItem.test.tsx +299 -11
- package/src/execution/__tests__/ToolRunGroup.test.tsx +41 -9
- package/src/execution/__tests__/message-thread-slots.test.tsx +92 -0
- package/src/execution/__tests__/tool-presenter.test.tsx +41 -4
- package/src/execution/index.ts +8 -2
- package/src/execution/tool-categories.ts +72 -8
- package/src/execution/tool-presenter.ts +22 -1
- package/src/execution/useArtifactInspection.ts +4 -8
- package/src/execution/useCreateAgentExecution.ts +3 -2
- package/src/iam-policy/GrantAccessForm.tsx +2 -18
- package/src/iam-policy/OrgMembersPanel.tsx +3 -19
- package/src/iam-policy/RoleSelector.tsx +8 -1
- package/src/identity-provider/CreateIdentityProviderForm.tsx +13 -31
- package/src/identity-provider/IdentityProviderDetailPanel.tsx +24 -49
- package/src/identity-provider/IdentityProviderListPanel.tsx +2 -18
- package/src/identity-provider/IdentityProviderWizard.tsx +15 -32
- package/src/identity-provider/SsoLoginPrompt.tsx +6 -21
- package/src/index.ts +23 -1
- package/src/internal/DecisionButton.tsx +1 -20
- package/src/internal/SpinnerIcon.tsx +42 -0
- package/src/internal/__tests__/ThreadCardShell.test.tsx +43 -7
- package/src/internal/__tests__/useCopyFeedback.test.ts +92 -0
- package/src/internal/isUnimplemented.ts +26 -0
- package/src/internal/select-element-text.ts +17 -0
- package/src/internal/thread-card/ThreadCardShell.tsx +53 -21
- package/src/internal/thread-card/glyphs.tsx +24 -3
- package/src/internal/thread-card/index.ts +1 -0
- package/src/internal/useCopyFeedback.ts +61 -0
- package/src/invitation/InvitationCreatedAlert.tsx +10 -18
- package/src/invitation/InvitationManager.tsx +23 -34
- package/src/invitation/InvitationRedemption.tsx +2 -18
- package/src/library/useExportResource.ts +15 -29
- package/src/manifest/ApplyManifestDialog.tsx +1 -1
- package/src/manifest/EditResourceYamlDialog.tsx +1 -1
- package/src/mcp-server/DefinitionDriftNotice.tsx +120 -0
- package/src/mcp-server/McpServerConnectDialog.tsx +30 -12
- package/src/mcp-server/McpServerDetailView.tsx +58 -26
- package/src/mcp-server/OAuthAppForm.tsx +2 -18
- package/src/mcp-server/__tests__/DefinitionDriftNotice.test.tsx +57 -0
- package/src/mcp-server/__tests__/VendorApprovalBlocked.surfaces.test.tsx +103 -5
- package/src/mcp-server/__tests__/byoaEditionDegradation.test.tsx +323 -0
- package/src/mcp-server/__tests__/definitionDrift.test.ts +245 -0
- package/src/mcp-server/__tests__/mcpServerToInput.test.ts +201 -0
- package/src/mcp-server/__tests__/useMcpServerCredentials.test.tsx +306 -0
- package/src/mcp-server/__tests__/useMcpServerDefinitionDrift.test.tsx +173 -0
- package/src/mcp-server/internal/definitionDrift.ts +158 -0
- package/src/mcp-server/internal/mcpServerToInput.ts +3 -0
- package/src/mcp-server/steps/EnvironmentAuthStep.tsx +19 -19
- package/src/mcp-server/steps/IdentityTransportStep.tsx +24 -23
- package/src/mcp-server/useMcpServerConnect.ts +1 -1
- package/src/mcp-server/useMcpServerCredentials.ts +87 -19
- package/src/mcp-server/useMcpServerDefinitionDrift.ts +95 -0
- package/src/mcp-server/useOrgOAuthApp.ts +54 -8
- package/src/models/ModelRegistryContext.ts +7 -1
- package/src/models/ModelSelector.tsx +37 -0
- package/src/models/__tests__/ModelSelector-visionIndicator.test.tsx +129 -0
- package/src/models/__tests__/resolveDefaultModel.test.ts +115 -0
- package/src/models/__tests__/useModelRegistry.test.tsx +99 -4
- package/src/models/index.ts +2 -2
- package/src/models/registry.ts +196 -29
- package/src/models/useModelRegistry.ts +10 -2
- package/src/oauth-app/CreateOAuthAppForm.tsx +16 -31
- package/src/oauth-app/OAuthAppDetailPanel.tsx +16 -31
- package/src/organization/CreateOrganizationForm.tsx +10 -29
- package/src/organization/OrgProfilePanel.tsx +13 -44
- package/src/platform-client/CreatePlatformClientForm.tsx +9 -29
- package/src/platform-client/PlatformClientDetailPanel.tsx +10 -30
- package/src/platform-client/PlatformClientListPanel.tsx +2 -18
- package/src/platform-client/PlatformClientSecretAlert.tsx +26 -55
- package/src/provider.tsx +76 -33
- package/src/resource-creation/WizardNav.tsx +2 -18
- package/src/resource-detail/ConfirmDialog.tsx +1 -1
- package/src/resource-detail/useCopyResource.ts +17 -23
- package/src/schedule/ScheduleDetailView.tsx +2 -18
- package/src/schedule/ScheduleForm.tsx +19 -34
- package/src/session/NewSessionViewer.tsx +85 -7
- package/src/session/SessionViewer.tsx +120 -17
- package/src/session/__tests__/audienceWiring.test.tsx +76 -0
- package/src/session/__tests__/panelNegotiation.test.tsx +302 -0
- package/src/session/__tests__/useNewSessionFlow.test.tsx +134 -5
- package/src/session/__tests__/useSessionPageFlow.autoApprove.test.tsx +74 -0
- package/src/session/__tests__/useSessionPageFlow.runConfig.test.tsx +157 -0
- package/src/session/__tests__/useSessionPanel.test.ts +114 -0
- package/src/session/audience.ts +18 -0
- package/src/session/index.ts +2 -1
- package/src/session/run-config.ts +59 -0
- package/src/session/useNewSessionFlow.ts +39 -2
- package/src/session/useSessionConversation.ts +14 -10
- package/src/session/useSessionPageFlow.ts +51 -10
- package/src/session/useSessionPanel.ts +91 -10
- package/src/settings/ApiKeysSection.tsx +4 -3
- package/src/settings/ChannelAppsSection.tsx +4 -3
- package/src/settings/EnvironmentsSection.tsx +8 -5
- package/src/settings/IdentityProvidersSection.tsx +4 -3
- package/src/settings/InvitationsSection.tsx +4 -2
- package/src/settings/MembersSection.tsx +4 -2
- package/src/settings/OAuthAppsSection.tsx +4 -3
- package/src/settings/OrgProfileSection.tsx +4 -3
- package/src/settings/PlatformClientsSection.tsx +4 -3
- package/src/settings/UsageSection.tsx +4 -2
- package/src/sharing/ShareAgentDialog.tsx +28 -10
- package/src/sidebar/__tests__/WorkspaceSidebar.test.tsx +4 -1
- package/src/sidebar/chrome.tsx +6 -6
- package/src/skill/SkillDiffDialog.tsx +1 -1
- package/src/skill/useSkillVersions.ts +1 -11
- package/src/styles.css +43 -0
- package/src/version-history/VersionTimelineEntry.tsx +1 -21
- package/src/workflow/FailedRunsWidget.tsx +2 -9
- package/src/workflow/PendingApprovalsWidget.tsx +2 -9
- package/src/workflow/ViewYamlDialog.tsx +7 -22
- package/src/workflow/WorkflowArchitectDialog.tsx +8 -27
- package/src/workflow/WorkflowArtifactDocument.tsx +5 -9
- package/src/workflow/WorkflowCanvasEditor.tsx +39 -7
- package/src/workflow/WorkflowCanvasInner.tsx +14 -1
- package/src/workflow/WorkflowDiffGraph.tsx +7 -1
- package/src/workflow/WorkflowExecutionGraph.tsx +26 -1
- package/src/workflow/WorkflowExecutionViewer.tsx +115 -24
- package/src/workflow/WorkflowExplainDialog.tsx +8 -24
- package/src/workflow/WorkflowNode.tsx +5 -2
- package/src/workflow/WorkflowOverviewGraph.tsx +9 -1
- package/src/workflow/WorkflowRefinePanel.tsx +2 -18
- package/src/workflow/WorkflowRepairCard.tsx +2 -18
- package/src/workflow/WorkflowRunDialog.tsx +31 -24
- package/src/workflow/WorkflowTaskApprovalSummary.tsx +2 -17
- package/src/workflow/WorkflowVersionBadge.tsx +4 -13
- package/src/workflow/WorkflowVersionTimeline.tsx +1 -25
- package/src/workflow/__tests__/WorkflowExecutionViewer.reconciliation.test.tsx +48 -1
- package/src/workflow/__tests__/WorkflowNode.test.tsx +93 -0
- package/src/workflow/__tests__/WorkflowRunDialog.test.tsx +127 -0
- package/src/workflow/__tests__/graph-history.test.ts +103 -0
- package/src/workflow/__tests__/overview-graph.test.ts +17 -0
- package/src/workflow/__tests__/panelNegotiation.test.tsx +230 -0
- package/src/workflow/__tests__/useCanvasKeyboardShortcuts.undo.test.ts +115 -0
- package/src/workflow/__tests__/useWorkflowCanvas.dirty.test.tsx +178 -0
- package/src/workflow/__tests__/useWorkflowCanvas.drag.test.tsx +224 -0
- package/src/workflow/__tests__/useWorkflowCanvas.undo.test.tsx +133 -0
- package/src/workflow/__tests__/useWorkflowExecutionPanel.test.ts +100 -0
- package/src/workflow/execution-comparison/ExecutionComparisonPicker.tsx +7 -11
- package/src/workflow/execution-history/ExecutionHistoryTable.tsx +1 -25
- package/src/workflow/index.ts +1 -0
- package/src/workflow/instance/CreateWorkflowInstanceDialog.tsx +17 -8
- package/src/workflow/instance/WorkflowInstanceDetailPanel.tsx +2 -1
- package/src/workflow/instance/useDeleteWorkflowInstance.ts +9 -4
- package/src/workflow/layout/registry-dimensions.ts +2 -5
- package/src/workflow/node-shell/NodeShell.tsx +4 -0
- package/src/workflow/picker/BranchAddPopover.tsx +4 -3
- package/src/workflow/task-type-visual-registry.ts +5 -3
- package/src/workflow/templates/WorkflowTemplatePreview.tsx +1 -1
- package/src/workflow/useApprovalBoundary.ts +1 -1
- package/src/workflow/useCanvasKeyboardShortcuts.ts +33 -3
- package/src/workflow/useGraphHistory.ts +22 -41
- package/src/workflow/useWorkflowCanvas.ts +126 -21
- package/src/workflow/useWorkflowExecutionPanel.ts +95 -13
- package/src/workflow/useWorkflowSave.ts +2 -15
- package/src/workflow/workflow-graph-conversions.ts +25 -3
- package/styles.css +1 -1
- package/version-history/VersionTimelineEntry.d.ts.map +1 -1
- package/version-history/VersionTimelineEntry.js +1 -23
- package/version-history/VersionTimelineEntry.js.map +1 -1
- package/workflow/CanvasTransitionEdge.d.ts +1 -1
- package/workflow/FailedRunsWidget.d.ts.map +1 -1
- package/workflow/FailedRunsWidget.js +2 -11
- package/workflow/FailedRunsWidget.js.map +1 -1
- package/workflow/PendingApprovalsWidget.d.ts.map +1 -1
- package/workflow/PendingApprovalsWidget.js +2 -11
- package/workflow/PendingApprovalsWidget.js.map +1 -1
- package/workflow/ViewYamlDialog.d.ts.map +1 -1
- package/workflow/ViewYamlDialog.js +7 -23
- package/workflow/ViewYamlDialog.js.map +1 -1
- package/workflow/WorkflowArchitectDialog.d.ts.map +1 -1
- package/workflow/WorkflowArchitectDialog.js +7 -11
- package/workflow/WorkflowArchitectDialog.js.map +1 -1
- package/workflow/WorkflowArtifactDocument.d.ts.map +1 -1
- package/workflow/WorkflowArtifactDocument.js +5 -8
- package/workflow/WorkflowArtifactDocument.js.map +1 -1
- package/workflow/WorkflowCanvasEditor.d.ts.map +1 -1
- package/workflow/WorkflowCanvasEditor.js +31 -6
- package/workflow/WorkflowCanvasEditor.js.map +1 -1
- package/workflow/WorkflowCanvasInner.d.ts +4 -2
- package/workflow/WorkflowCanvasInner.d.ts.map +1 -1
- package/workflow/WorkflowCanvasInner.js +7 -3
- package/workflow/WorkflowCanvasInner.js.map +1 -1
- package/workflow/WorkflowDiffGraph.js +6 -2
- package/workflow/WorkflowDiffGraph.js.map +1 -1
- package/workflow/WorkflowExecutionGraph.d.ts.map +1 -1
- package/workflow/WorkflowExecutionGraph.js +27 -1
- package/workflow/WorkflowExecutionGraph.js.map +1 -1
- package/workflow/WorkflowExecutionViewer.d.ts +51 -0
- package/workflow/WorkflowExecutionViewer.d.ts.map +1 -1
- package/workflow/WorkflowExecutionViewer.js +49 -18
- package/workflow/WorkflowExecutionViewer.js.map +1 -1
- package/workflow/WorkflowExplainDialog.d.ts.map +1 -1
- package/workflow/WorkflowExplainDialog.js +6 -8
- package/workflow/WorkflowExplainDialog.js.map +1 -1
- package/workflow/WorkflowNode.d.ts.map +1 -1
- package/workflow/WorkflowNode.js +2 -2
- package/workflow/WorkflowNode.js.map +1 -1
- package/workflow/WorkflowOverviewGraph.js +8 -2
- package/workflow/WorkflowOverviewGraph.js.map +1 -1
- package/workflow/WorkflowRefinePanel.d.ts.map +1 -1
- package/workflow/WorkflowRefinePanel.js +2 -4
- package/workflow/WorkflowRefinePanel.js.map +1 -1
- package/workflow/WorkflowRepairCard.d.ts.map +1 -1
- package/workflow/WorkflowRepairCard.js +2 -4
- package/workflow/WorkflowRepairCard.js.map +1 -1
- package/workflow/WorkflowRunDialog.d.ts +11 -1
- package/workflow/WorkflowRunDialog.d.ts.map +1 -1
- package/workflow/WorkflowRunDialog.js +18 -9
- package/workflow/WorkflowRunDialog.js.map +1 -1
- package/workflow/WorkflowTaskApprovalSummary.d.ts.map +1 -1
- package/workflow/WorkflowTaskApprovalSummary.js +2 -4
- package/workflow/WorkflowTaskApprovalSummary.js.map +1 -1
- package/workflow/WorkflowVersionBadge.d.ts.map +1 -1
- package/workflow/WorkflowVersionBadge.js +4 -13
- package/workflow/WorkflowVersionBadge.js.map +1 -1
- package/workflow/WorkflowVersionTimeline.d.ts.map +1 -1
- package/workflow/WorkflowVersionTimeline.js +1 -26
- package/workflow/WorkflowVersionTimeline.js.map +1 -1
- package/workflow/execution-comparison/ExecutionComparisonPicker.d.ts.map +1 -1
- package/workflow/execution-comparison/ExecutionComparisonPicker.js +7 -15
- package/workflow/execution-comparison/ExecutionComparisonPicker.js.map +1 -1
- package/workflow/execution-history/ExecutionHistoryTable.d.ts.map +1 -1
- package/workflow/execution-history/ExecutionHistoryTable.js +1 -24
- package/workflow/execution-history/ExecutionHistoryTable.js.map +1 -1
- package/workflow/index.d.ts +1 -1
- package/workflow/index.d.ts.map +1 -1
- package/workflow/index.js.map +1 -1
- package/workflow/instance/CreateWorkflowInstanceDialog.d.ts.map +1 -1
- package/workflow/instance/CreateWorkflowInstanceDialog.js +10 -2
- package/workflow/instance/CreateWorkflowInstanceDialog.js.map +1 -1
- package/workflow/instance/WorkflowInstanceDetailPanel.d.ts.map +1 -1
- package/workflow/instance/WorkflowInstanceDetailPanel.js +1 -1
- package/workflow/instance/WorkflowInstanceDetailPanel.js.map +1 -1
- package/workflow/instance/useDeleteWorkflowInstance.d.ts +9 -4
- package/workflow/instance/useDeleteWorkflowInstance.d.ts.map +1 -1
- package/workflow/instance/useDeleteWorkflowInstance.js +4 -2
- package/workflow/instance/useDeleteWorkflowInstance.js.map +1 -1
- package/workflow/layout/registry-dimensions.d.ts.map +1 -1
- package/workflow/layout/registry-dimensions.js +2 -5
- package/workflow/layout/registry-dimensions.js.map +1 -1
- package/workflow/node-shell/NodeShell.js +1 -1
- package/workflow/node-shell/NodeShell.js.map +1 -1
- package/workflow/picker/BranchAddPopover.d.ts.map +1 -1
- package/workflow/picker/BranchAddPopover.js +3 -2
- package/workflow/picker/BranchAddPopover.js.map +1 -1
- package/workflow/task-type-visual-registry.d.ts.map +1 -1
- package/workflow/task-type-visual-registry.js +5 -3
- package/workflow/task-type-visual-registry.js.map +1 -1
- package/workflow/templates/WorkflowTemplatePreview.js +1 -1
- package/workflow/useApprovalBoundary.d.ts +1 -1
- package/workflow/useApprovalBoundary.js +1 -1
- package/workflow/useCanvasKeyboardShortcuts.d.ts +15 -4
- package/workflow/useCanvasKeyboardShortcuts.d.ts.map +1 -1
- package/workflow/useCanvasKeyboardShortcuts.js +25 -4
- package/workflow/useCanvasKeyboardShortcuts.js.map +1 -1
- package/workflow/useGraphHistory.d.ts +16 -9
- package/workflow/useGraphHistory.d.ts.map +1 -1
- package/workflow/useGraphHistory.js +19 -33
- package/workflow/useGraphHistory.js.map +1 -1
- package/workflow/useWorkflowCanvas.d.ts +6 -4
- package/workflow/useWorkflowCanvas.d.ts.map +1 -1
- package/workflow/useWorkflowCanvas.js +115 -23
- package/workflow/useWorkflowCanvas.js.map +1 -1
- package/workflow/useWorkflowExecutionPanel.d.ts +38 -2
- package/workflow/useWorkflowExecutionPanel.d.ts.map +1 -1
- package/workflow/useWorkflowExecutionPanel.js +46 -13
- package/workflow/useWorkflowExecutionPanel.js.map +1 -1
- package/workflow/useWorkflowSave.d.ts.map +1 -1
- package/workflow/useWorkflowSave.js +2 -15
- package/workflow/useWorkflowSave.js.map +1 -1
- package/workflow/workflow-graph-conversions.d.ts +19 -1
- package/workflow/workflow-graph-conversions.d.ts.map +1 -1
- package/workflow/workflow-graph-conversions.js +17 -3
- package/workflow/workflow-graph-conversions.js.map +1 -1
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Client-side vision preflight — predicts, before a turn is spent, which
|
|
3
|
+
* attached images the runner will refuse to deliver inline and why
|
|
4
|
+
* (stigmer/stigmer#365, stigmer/stigmer#386).
|
|
5
|
+
*
|
|
6
|
+
* The runner is the enforcement authority (`VisionBudget` in its
|
|
7
|
+
* `shared/attachment-vision.ts`); this module is the warning authority.
|
|
8
|
+
* To never warn differently than the runner behaves, it replicates the
|
|
9
|
+
* runner's admission semantics against the SAME data the runner uses:
|
|
10
|
+
*
|
|
11
|
+
* - the byte budget arrives via the registry document's `limits.vision`
|
|
12
|
+
* block ({@link VisionLimits}) — advertised == enforced;
|
|
13
|
+
* - the model's vision capability arrives via the per-model
|
|
14
|
+
* `capabilities` block ({@link ModelInfo.visionCapability});
|
|
15
|
+
* - reasons reuse the runner's disclosure vocabulary
|
|
16
|
+
* (`VisionDegradedReason`), so a warning here and a disclosure in the
|
|
17
|
+
* agent's reply always tell one story.
|
|
18
|
+
*
|
|
19
|
+
* Tri-state discipline: absent limits or an unassessed model produce NO
|
|
20
|
+
* warnings. A client that cannot know the budget must stay silent, not
|
|
21
|
+
* guess — the runner's own disclosure remains the backstop.
|
|
22
|
+
*
|
|
23
|
+
* Deliberately assessed client-side reasons are a SUBSET of the runner's:
|
|
24
|
+
* `unsupported_format` and `type_mismatch` need magic-byte sniffing that a
|
|
25
|
+
* declared content type cannot honestly stand in for (and pasted images are
|
|
26
|
+
* already normalized by `prepareImageForVision`), so those two remain
|
|
27
|
+
* runner-disclosed only.
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
import type { ModelInfo, VisionLimits } from "../models/registry.js";
|
|
31
|
+
import { formatFileSize } from "./attachment-utils.js";
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Content types the runner recognizes as vision candidates (its
|
|
35
|
+
* `VisionMimeType` set). Anything else — PDFs, SVGs, archives — rides the
|
|
36
|
+
* normal file story with no inline-vision expectation and no warning.
|
|
37
|
+
*/
|
|
38
|
+
const VISION_CANDIDATE_TYPES: ReadonlySet<string> = new Set([
|
|
39
|
+
"image/png",
|
|
40
|
+
"image/jpeg",
|
|
41
|
+
"image/webp",
|
|
42
|
+
"image/gif",
|
|
43
|
+
]);
|
|
44
|
+
|
|
45
|
+
/** Minimal attachment shape the preflight needs — pure data, no `File`. */
|
|
46
|
+
export interface VisionPreflightAttachment {
|
|
47
|
+
/** Display name used in warning copy (the chip's filename). */
|
|
48
|
+
readonly name: string;
|
|
49
|
+
/** Raw byte size — what the runner's budget counts. */
|
|
50
|
+
readonly sizeBytes: number;
|
|
51
|
+
/** Declared/detected MIME type (`AttachmentEntry.contentType`). */
|
|
52
|
+
readonly contentType: string;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Why an image will not be viewable inline — the client-assessable subset
|
|
57
|
+
* of the runner's `VisionDegradedReason` vocabulary, same spellings.
|
|
58
|
+
*/
|
|
59
|
+
export type VisionPreflightReason =
|
|
60
|
+
/** Raw bytes exceed the per-image cap; a smaller re-export would fix it. */
|
|
61
|
+
| "too_large"
|
|
62
|
+
/** Image is fine but the turn's total/count budget is already spent. */
|
|
63
|
+
| "budget_exhausted"
|
|
64
|
+
/** The selected model is explicitly assessed as unable to see images. */
|
|
65
|
+
| "model_no_vision";
|
|
66
|
+
|
|
67
|
+
/** One image the runner is predicted to degrade, and why. */
|
|
68
|
+
export interface VisionPreflightWarning {
|
|
69
|
+
readonly name: string;
|
|
70
|
+
readonly sizeBytes: number;
|
|
71
|
+
readonly reason: VisionPreflightReason;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/** Result of {@link assessVisionPreflight}. */
|
|
75
|
+
export interface VisionPreflight {
|
|
76
|
+
/** Predicted-degraded images in attachment order. Empty = all clear. */
|
|
77
|
+
readonly warnings: readonly VisionPreflightWarning[];
|
|
78
|
+
/**
|
|
79
|
+
* True when the selected model is explicitly blind (`vision: false`)
|
|
80
|
+
* and at least one image is attached. When set, every image warning
|
|
81
|
+
* carries `model_no_vision` — resending smaller images cannot help, so
|
|
82
|
+
* warning UI should lead with the model, not the files.
|
|
83
|
+
*/
|
|
84
|
+
readonly modelCannotSeeImages: boolean;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
const NO_WARNINGS: VisionPreflight = { warnings: [], modelCannotSeeImages: false };
|
|
88
|
+
|
|
89
|
+
/** Options for {@link assessVisionPreflight}. */
|
|
90
|
+
export interface AssessVisionPreflightOptions {
|
|
91
|
+
/**
|
|
92
|
+
* The model the turn will run on. `undefined` (unknown/still loading)
|
|
93
|
+
* disables the capability verdict, never the byte assessment.
|
|
94
|
+
*/
|
|
95
|
+
readonly model?: ModelInfo | undefined;
|
|
96
|
+
/**
|
|
97
|
+
* The advertised byte budget from `useModelRegistry().visionLimits`.
|
|
98
|
+
* `undefined` (older server, still loading) disables the byte
|
|
99
|
+
* assessment, never the capability verdict.
|
|
100
|
+
*/
|
|
101
|
+
readonly limits?: VisionLimits | undefined;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Predict which attached images the runner will degrade this turn.
|
|
106
|
+
*
|
|
107
|
+
* Pure and deterministic — safe to call in render (memoized by callers).
|
|
108
|
+
* Non-image attachments never warn. The byte assessment replicates the
|
|
109
|
+
* runner's sequential admission: an image over the per-image cap is
|
|
110
|
+
* degraded WITHOUT consuming budget; remaining images are admitted in
|
|
111
|
+
* order until the count or total-byte budget is exhausted.
|
|
112
|
+
*/
|
|
113
|
+
export function assessVisionPreflight(
|
|
114
|
+
attachments: readonly VisionPreflightAttachment[],
|
|
115
|
+
options?: AssessVisionPreflightOptions,
|
|
116
|
+
): VisionPreflight {
|
|
117
|
+
const candidates = attachments.filter((a) =>
|
|
118
|
+
VISION_CANDIDATE_TYPES.has(a.contentType.toLowerCase()),
|
|
119
|
+
);
|
|
120
|
+
if (candidates.length === 0) return NO_WARNINGS;
|
|
121
|
+
|
|
122
|
+
// The capability gate short-circuits the byte math: on an explicitly
|
|
123
|
+
// blind model no image is deliverable at any size, and mixing byte
|
|
124
|
+
// warnings in would wrongly suggest a smaller resend could help.
|
|
125
|
+
if (options?.model?.visionCapability === false) {
|
|
126
|
+
return {
|
|
127
|
+
warnings: candidates.map((a) => ({
|
|
128
|
+
name: a.name,
|
|
129
|
+
sizeBytes: a.sizeBytes,
|
|
130
|
+
reason: "model_no_vision",
|
|
131
|
+
})),
|
|
132
|
+
modelCannotSeeImages: true,
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
const limits = options?.limits;
|
|
137
|
+
if (!limits) return NO_WARNINGS;
|
|
138
|
+
|
|
139
|
+
const warnings: VisionPreflightWarning[] = [];
|
|
140
|
+
let acceptedCount = 0;
|
|
141
|
+
let acceptedBytes = 0;
|
|
142
|
+
|
|
143
|
+
for (const image of candidates) {
|
|
144
|
+
if (image.sizeBytes > limits.maxImageBytes) {
|
|
145
|
+
warnings.push({ name: image.name, sizeBytes: image.sizeBytes, reason: "too_large" });
|
|
146
|
+
continue;
|
|
147
|
+
}
|
|
148
|
+
if (
|
|
149
|
+
acceptedCount >= limits.maxImages ||
|
|
150
|
+
acceptedBytes + image.sizeBytes > limits.maxTotalBytes
|
|
151
|
+
) {
|
|
152
|
+
warnings.push({
|
|
153
|
+
name: image.name,
|
|
154
|
+
sizeBytes: image.sizeBytes,
|
|
155
|
+
reason: "budget_exhausted",
|
|
156
|
+
});
|
|
157
|
+
continue;
|
|
158
|
+
}
|
|
159
|
+
acceptedCount += 1;
|
|
160
|
+
acceptedBytes += image.sizeBytes;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
return warnings.length === 0
|
|
164
|
+
? NO_WARNINGS
|
|
165
|
+
: { warnings, modelCannotSeeImages: false };
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/** Options for {@link visionPreflightMessage}. */
|
|
169
|
+
export interface VisionPreflightMessageOptions {
|
|
170
|
+
/** The advertised budget — names the caps in the copy when present. */
|
|
171
|
+
readonly limits?: VisionLimits | undefined;
|
|
172
|
+
/** Display name of the selected model, for the capability wording. */
|
|
173
|
+
readonly modelDisplayName?: string | undefined;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
/**
|
|
177
|
+
* One-line human copy for a {@link VisionPreflight} — the client-side twin
|
|
178
|
+
* of the runner's `visionDisclosureLines`, worded for BEFORE the turn
|
|
179
|
+
* ("will arrive as a file") instead of after ("was not viewable").
|
|
180
|
+
*
|
|
181
|
+
* Returns `null` when there is nothing to warn about. Copy rules:
|
|
182
|
+
* - a blind model leads with the model, never the files — no smaller
|
|
183
|
+
* resend can help, so file-size advice would be dishonest;
|
|
184
|
+
* - `too_large` names the files (up to two, then a count) and the actual
|
|
185
|
+
* cap, so the fix — export smaller — is self-evident;
|
|
186
|
+
* - `budget_exhausted` explains the per-turn budget, the only fix being
|
|
187
|
+
* fewer images this turn.
|
|
188
|
+
*/
|
|
189
|
+
export function visionPreflightMessage(
|
|
190
|
+
preflight: VisionPreflight,
|
|
191
|
+
options?: VisionPreflightMessageOptions,
|
|
192
|
+
): string | null {
|
|
193
|
+
if (preflight.warnings.length === 0) return null;
|
|
194
|
+
|
|
195
|
+
if (preflight.modelCannotSeeImages) {
|
|
196
|
+
const model = options?.modelDisplayName ?? "The selected model";
|
|
197
|
+
return `${model} can't view images — attached images will reach the agent as files only.`;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
const tooLarge = preflight.warnings.filter((w) => w.reason === "too_large");
|
|
201
|
+
const exhausted = preflight.warnings.filter((w) => w.reason === "budget_exhausted");
|
|
202
|
+
const parts: string[] = [];
|
|
203
|
+
|
|
204
|
+
if (tooLarge.length > 0) {
|
|
205
|
+
const capPhrase = options?.limits
|
|
206
|
+
? `the ${formatFileSize(options.limits.maxImageBytes)} inline-image limit`
|
|
207
|
+
: "the inline-image size limit";
|
|
208
|
+
if (tooLarge.length === 1) {
|
|
209
|
+
const w = tooLarge[0];
|
|
210
|
+
parts.push(
|
|
211
|
+
`${w.name} (${formatFileSize(w.sizeBytes)}) exceeds ${capPhrase} and will reach the agent as a file, not an image`,
|
|
212
|
+
);
|
|
213
|
+
} else if (tooLarge.length === 2) {
|
|
214
|
+
parts.push(
|
|
215
|
+
`${tooLarge[0].name} and ${tooLarge[1].name} exceed ${capPhrase} and will reach the agent as files, not images`,
|
|
216
|
+
);
|
|
217
|
+
} else {
|
|
218
|
+
parts.push(
|
|
219
|
+
`${tooLarge.length} images exceed ${capPhrase} and will reach the agent as files, not images`,
|
|
220
|
+
);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
if (exhausted.length > 0) {
|
|
225
|
+
const budget = options?.limits
|
|
226
|
+
? `this turn's inline-image budget (${options.limits.maxImages} images, ${formatFileSize(options.limits.maxTotalBytes)} total)`
|
|
227
|
+
: "this turn's inline-image budget";
|
|
228
|
+
parts.push(
|
|
229
|
+
exhausted.length === 1
|
|
230
|
+
? `${exhausted[0].name} is over ${budget} and will reach the agent as a file`
|
|
231
|
+
: `${exhausted.length} images are over ${budget} and will reach the agent as files`,
|
|
232
|
+
);
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
return parts.length === 0 ? null : `${parts.join("; ")}.`;
|
|
236
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
-
import { useState, useCallback, useEffect } from "react";
|
|
3
|
+
import { useState, useCallback, useEffect, useId } from "react";
|
|
4
4
|
import { cn } from "@stigmer/theme";
|
|
5
5
|
import type { AutoRechargeConfig } from "@stigmer/protos/ai/stigmer/billing/v1/billing_account_pb";
|
|
6
6
|
import { BillingAccountStatus } from "@stigmer/protos/ai/stigmer/billing/v1/enum_pb";
|
|
@@ -64,6 +64,7 @@ export function AutoRechargeCard({
|
|
|
64
64
|
onSaved,
|
|
65
65
|
className,
|
|
66
66
|
}: AutoRechargeCardProps) {
|
|
67
|
+
const baseId = useId();
|
|
67
68
|
const { setConfig, isSubmitting, error, clearError } =
|
|
68
69
|
useSetAutoRechargeConfig();
|
|
69
70
|
|
|
@@ -168,7 +169,7 @@ export function AutoRechargeCard({
|
|
|
168
169
|
{canConfigure && (
|
|
169
170
|
<div className="stg:mt-4 stg:space-y-3">
|
|
170
171
|
<DollarInput
|
|
171
|
-
id=
|
|
172
|
+
id={`${baseId}-threshold`}
|
|
172
173
|
label="When balance drops below"
|
|
173
174
|
value={threshold}
|
|
174
175
|
onChange={setThreshold}
|
|
@@ -176,7 +177,7 @@ export function AutoRechargeCard({
|
|
|
176
177
|
placeholder="e.g. 5"
|
|
177
178
|
/>
|
|
178
179
|
<DollarInput
|
|
179
|
-
id=
|
|
180
|
+
id={`${baseId}-amount`}
|
|
180
181
|
label="Recharge amount"
|
|
181
182
|
value={amount}
|
|
182
183
|
onChange={setAmount}
|
|
@@ -184,7 +185,7 @@ export function AutoRechargeCard({
|
|
|
184
185
|
placeholder="e.g. 50"
|
|
185
186
|
/>
|
|
186
187
|
<DollarInput
|
|
187
|
-
id=
|
|
188
|
+
id={`${baseId}-cap`}
|
|
188
189
|
label="Monthly cap"
|
|
189
190
|
value={cap}
|
|
190
191
|
onChange={setCap}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { useCallback, useId, useState } from "react";
|
|
4
4
|
import { cn } from "@stigmer/theme";
|
|
5
5
|
import { getUserMessage } from "@stigmer/sdk";
|
|
6
6
|
import { BillingAccountStatus } from "@stigmer/protos/ai/stigmer/billing/v1/enum_pb";
|
|
@@ -53,14 +53,15 @@ export function BillingSection({
|
|
|
53
53
|
onDismissCheckoutSuccess,
|
|
54
54
|
className,
|
|
55
55
|
}: BillingSectionProps) {
|
|
56
|
+
const headingId = useId();
|
|
56
57
|
const { activeOrg } = useOrg();
|
|
57
58
|
const mode = useDeploymentMode();
|
|
58
59
|
const orgId = activeOrg?.metadata?.id ?? "";
|
|
59
60
|
|
|
60
61
|
return (
|
|
61
|
-
<section aria-labelledby=
|
|
62
|
+
<section aria-labelledby={headingId} className={className}>
|
|
62
63
|
<h2
|
|
63
|
-
id=
|
|
64
|
+
id={headingId}
|
|
64
65
|
className="stg:text-foreground stg:mb-1 stg:text-sm stg:font-semibold"
|
|
65
66
|
>
|
|
66
67
|
Billing
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
-
import { useCallback, useRef } from "react";
|
|
3
|
+
import { useCallback, useId, useRef } from "react";
|
|
4
4
|
import { timestampDate } from "@bufbuild/protobuf/wkt";
|
|
5
5
|
import { MessageSquare, User, X } from "lucide-react";
|
|
6
6
|
import { cn } from "@stigmer/theme";
|
|
@@ -69,6 +69,7 @@ export function ChannelConversationsDialog({
|
|
|
69
69
|
modal = true,
|
|
70
70
|
}: ChannelConversationsDialogProps) {
|
|
71
71
|
const dialogRef = useRef<HTMLDialogElement>(null);
|
|
72
|
+
const titleId = useId();
|
|
72
73
|
|
|
73
74
|
const handleClose = useCallback(() => {
|
|
74
75
|
dialogRef.current?.close();
|
|
@@ -97,13 +98,14 @@ export function ChannelConversationsDialog({
|
|
|
97
98
|
onClose={handleClose}
|
|
98
99
|
className={cn(
|
|
99
100
|
"stg:w-full stg:max-w-lg stg:rounded-xl stg:border stg:border-border stg:bg-popover stg:p-0 stg:shadow-xl",
|
|
100
|
-
modal ? "stg:fixed stg:inset-0 stg:m-auto stg:backdrop:bg-
|
|
101
|
+
modal ? "stg:fixed stg:inset-0 stg:m-auto stg:backdrop:bg-backdrop" : "stg:relative",
|
|
101
102
|
)}
|
|
102
|
-
aria-labelledby=
|
|
103
|
+
aria-labelledby={titleId}
|
|
103
104
|
>
|
|
104
105
|
{/* Body mounts only while open so each opening fetches fresh. */}
|
|
105
106
|
{open && (
|
|
106
107
|
<ChannelConversationsDialogBody
|
|
108
|
+
titleId={titleId}
|
|
107
109
|
channel={channel}
|
|
108
110
|
sessionHref={sessionHref}
|
|
109
111
|
onClose={handleClose}
|
|
@@ -114,10 +116,12 @@ export function ChannelConversationsDialog({
|
|
|
114
116
|
}
|
|
115
117
|
|
|
116
118
|
function ChannelConversationsDialogBody({
|
|
119
|
+
titleId,
|
|
117
120
|
channel,
|
|
118
121
|
sessionHref,
|
|
119
122
|
onClose,
|
|
120
123
|
}: {
|
|
124
|
+
readonly titleId: string;
|
|
121
125
|
readonly channel: AgentChannel;
|
|
122
126
|
readonly sessionHref?: (sessionId: string) => string;
|
|
123
127
|
readonly onClose: () => void;
|
|
@@ -133,7 +137,7 @@ function ChannelConversationsDialogBody({
|
|
|
133
137
|
<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">
|
|
134
138
|
<div className="stg:min-w-0">
|
|
135
139
|
<h2
|
|
136
|
-
id=
|
|
140
|
+
id={titleId}
|
|
137
141
|
className="stg:text-sm stg:font-semibold stg:text-popover-foreground"
|
|
138
142
|
>
|
|
139
143
|
Sessions
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
-
import { useCallback, useRef, useState } from "react";
|
|
3
|
+
import { useCallback, useId, useRef, useState } from "react";
|
|
4
4
|
import { cn } from "@stigmer/theme";
|
|
5
5
|
import { getUserMessage, type ResourceRef } from "@stigmer/sdk";
|
|
6
6
|
import type { Agent } from "@stigmer/protos/ai/stigmer/agentic/agent/v1/api_pb";
|
|
@@ -53,6 +53,12 @@ export function ChannelCredentialsDialog({
|
|
|
53
53
|
}: ChannelCredentialsDialogProps) {
|
|
54
54
|
const dialogRef = useRef<HTMLDialogElement>(null);
|
|
55
55
|
|
|
56
|
+
// Instance-scoped title id (oss#593): a reusable component must not
|
|
57
|
+
// hardcode DOM ids — hosts legitimately mount this dialog more than once
|
|
58
|
+
// per page (e.g. zone-cached detail pages), and duplicate ids break the
|
|
59
|
+
// aria-labelledby association for every copy after the first.
|
|
60
|
+
const titleId = useId();
|
|
61
|
+
|
|
56
62
|
const handleClose = useCallback(() => {
|
|
57
63
|
dialogRef.current?.close();
|
|
58
64
|
onOpenChange(false);
|
|
@@ -80,9 +86,9 @@ export function ChannelCredentialsDialog({
|
|
|
80
86
|
onClose={handleClose}
|
|
81
87
|
className={cn(
|
|
82
88
|
"stg:w-full stg:max-w-md stg:rounded-xl stg:border stg:border-border stg:bg-popover stg:p-0 stg:shadow-xl",
|
|
83
|
-
modal ? "stg:fixed stg:inset-0 stg:m-auto stg:backdrop:bg-
|
|
89
|
+
modal ? "stg:fixed stg:inset-0 stg:m-auto stg:backdrop:bg-backdrop" : "stg:relative",
|
|
84
90
|
)}
|
|
85
|
-
aria-labelledby=
|
|
91
|
+
aria-labelledby={titleId}
|
|
86
92
|
>
|
|
87
93
|
{/* Body mounts only while open so its draft resets per session —
|
|
88
94
|
reopening never resumes stale, unsaved edits. */}
|
|
@@ -92,6 +98,7 @@ export function ChannelCredentialsDialog({
|
|
|
92
98
|
channel={channel}
|
|
93
99
|
onSaved={onSaved}
|
|
94
100
|
onClose={handleClose}
|
|
101
|
+
titleId={titleId}
|
|
95
102
|
/>
|
|
96
103
|
)}
|
|
97
104
|
</dialog>
|
|
@@ -103,11 +110,14 @@ function ChannelCredentialsDialogBody({
|
|
|
103
110
|
channel,
|
|
104
111
|
onSaved,
|
|
105
112
|
onClose,
|
|
113
|
+
titleId,
|
|
106
114
|
}: {
|
|
107
115
|
readonly agent: Agent;
|
|
108
116
|
readonly channel: AgentChannel;
|
|
109
117
|
readonly onSaved?: () => void;
|
|
110
118
|
readonly onClose: () => void;
|
|
119
|
+
/** Heading id minted by the outer dialog for its aria-labelledby. */
|
|
120
|
+
readonly titleId: string;
|
|
111
121
|
}) {
|
|
112
122
|
const channelName =
|
|
113
123
|
channel.metadata?.name || channel.metadata?.slug || "this channel";
|
|
@@ -142,7 +152,7 @@ function ChannelCredentialsDialogBody({
|
|
|
142
152
|
<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">
|
|
143
153
|
<div className="stg:min-w-0">
|
|
144
154
|
<h2
|
|
145
|
-
id=
|
|
155
|
+
id={titleId}
|
|
146
156
|
className="stg:text-sm stg:font-semibold stg:text-foreground"
|
|
147
157
|
>
|
|
148
158
|
Tool credentials
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
-
import { useCallback, useRef, type ReactNode } from "react";
|
|
3
|
+
import { useCallback, useId, useRef, type ReactNode } from "react";
|
|
4
4
|
import { ExternalLink, LayoutTemplate, X } from "lucide-react";
|
|
5
5
|
import { cn } from "@stigmer/theme";
|
|
6
6
|
import { getUserMessage } from "@stigmer/sdk";
|
|
@@ -90,6 +90,7 @@ export function ChannelTemplatesDialog({
|
|
|
90
90
|
modal = true,
|
|
91
91
|
}: ChannelTemplatesDialogProps) {
|
|
92
92
|
const dialogRef = useRef<HTMLDialogElement>(null);
|
|
93
|
+
const titleId = useId();
|
|
93
94
|
|
|
94
95
|
const handleClose = useCallback(() => {
|
|
95
96
|
dialogRef.current?.close();
|
|
@@ -120,14 +121,15 @@ export function ChannelTemplatesDialog({
|
|
|
120
121
|
// Wider than the conversations dialog on purpose: template
|
|
121
122
|
// bodies are the content, and a narrow column shreds them.
|
|
122
123
|
"stg:w-full stg:max-w-2xl stg:rounded-xl stg:border stg:border-border stg:bg-popover stg:p-0 stg:shadow-xl",
|
|
123
|
-
modal ? "stg:fixed stg:inset-0 stg:m-auto stg:backdrop:bg-
|
|
124
|
+
modal ? "stg:fixed stg:inset-0 stg:m-auto stg:backdrop:bg-backdrop" : "stg:relative",
|
|
124
125
|
)}
|
|
125
|
-
aria-labelledby=
|
|
126
|
+
aria-labelledby={titleId}
|
|
126
127
|
>
|
|
127
128
|
{/* Body mounts only while open so each opening fetches fresh —
|
|
128
129
|
approval statuses change on the provider's side at any time. */}
|
|
129
130
|
{open && (
|
|
130
131
|
<ChannelTemplatesDialogBody
|
|
132
|
+
titleId={titleId}
|
|
131
133
|
channel={channel}
|
|
132
134
|
onEditYaml={onEditYaml}
|
|
133
135
|
onClose={handleClose}
|
|
@@ -138,10 +140,12 @@ export function ChannelTemplatesDialog({
|
|
|
138
140
|
}
|
|
139
141
|
|
|
140
142
|
function ChannelTemplatesDialogBody({
|
|
143
|
+
titleId,
|
|
141
144
|
channel,
|
|
142
145
|
onEditYaml,
|
|
143
146
|
onClose,
|
|
144
147
|
}: {
|
|
148
|
+
readonly titleId: string;
|
|
145
149
|
readonly channel: AgentChannel;
|
|
146
150
|
readonly onEditYaml?: () => void;
|
|
147
151
|
readonly onClose: () => void;
|
|
@@ -154,7 +158,7 @@ function ChannelTemplatesDialogBody({
|
|
|
154
158
|
<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">
|
|
155
159
|
<div className="stg:min-w-0">
|
|
156
160
|
<h2
|
|
157
|
-
id=
|
|
161
|
+
id={titleId}
|
|
158
162
|
className="stg:text-sm stg:font-semibold stg:text-popover-foreground"
|
|
159
163
|
>
|
|
160
164
|
Templates
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
-
import { useCallback, useMemo, useRef, useState } from "react";
|
|
3
|
+
import { useCallback, useId, useMemo, useRef, useState } from "react";
|
|
4
4
|
import { cn } from "@stigmer/theme";
|
|
5
5
|
import { getErrorReason, type ResourceRef } from "@stigmer/sdk";
|
|
6
6
|
import type { Agent } from "@stigmer/protos/ai/stigmer/agentic/agent/v1/api_pb";
|
|
@@ -91,6 +91,12 @@ export function ConnectSlackDialog({
|
|
|
91
91
|
}: ConnectSlackDialogProps) {
|
|
92
92
|
const dialogRef = useRef<HTMLDialogElement>(null);
|
|
93
93
|
|
|
94
|
+
// Instance-scoped title id (oss#593): a reusable component must not
|
|
95
|
+
// hardcode DOM ids — hosts legitimately mount this dialog more than once
|
|
96
|
+
// per page (e.g. zone-cached detail pages), and duplicate ids break the
|
|
97
|
+
// aria-labelledby association for every copy after the first.
|
|
98
|
+
const titleId = useId();
|
|
99
|
+
|
|
94
100
|
const handleClose = useCallback(() => {
|
|
95
101
|
dialogRef.current?.close();
|
|
96
102
|
onOpenChange(false);
|
|
@@ -120,9 +126,9 @@ export function ConnectSlackDialog({
|
|
|
120
126
|
onClose={handleClose}
|
|
121
127
|
className={cn(
|
|
122
128
|
"stg:w-full stg:max-w-md stg:rounded-xl stg:border stg:border-border stg:bg-popover stg:p-0 stg:shadow-xl",
|
|
123
|
-
modal ? "stg:fixed stg:inset-0 stg:m-auto stg:backdrop:bg-
|
|
129
|
+
modal ? "stg:fixed stg:inset-0 stg:m-auto stg:backdrop:bg-backdrop" : "stg:relative",
|
|
124
130
|
)}
|
|
125
|
-
aria-labelledby=
|
|
131
|
+
aria-labelledby={titleId}
|
|
126
132
|
>
|
|
127
133
|
{/* Body mounts only while open so its flow state resets per
|
|
128
134
|
session — reopening the dialog never resumes a stale flow. */}
|
|
@@ -132,6 +138,7 @@ export function ConnectSlackDialog({
|
|
|
132
138
|
channel={channel ?? null}
|
|
133
139
|
onChannelsChanged={onChannelsChanged}
|
|
134
140
|
onClose={handleClose}
|
|
141
|
+
titleId={titleId}
|
|
135
142
|
channelAppsHref={channelAppsHref}
|
|
136
143
|
/>
|
|
137
144
|
)}
|
|
@@ -149,6 +156,8 @@ interface ConnectSlackDialogBodyProps {
|
|
|
149
156
|
readonly onChannelsChanged?: () => void;
|
|
150
157
|
readonly onClose: () => void;
|
|
151
158
|
readonly channelAppsHref?: string;
|
|
159
|
+
/** Heading id minted by the outer dialog for its aria-labelledby. */
|
|
160
|
+
readonly titleId: string;
|
|
152
161
|
}
|
|
153
162
|
|
|
154
163
|
function ConnectSlackDialogBody({
|
|
@@ -157,6 +166,7 @@ function ConnectSlackDialogBody({
|
|
|
157
166
|
onChannelsChanged,
|
|
158
167
|
onClose,
|
|
159
168
|
channelAppsHref,
|
|
169
|
+
titleId,
|
|
160
170
|
}: ConnectSlackDialogBodyProps) {
|
|
161
171
|
const deploymentMode = useDeploymentMode();
|
|
162
172
|
const agentName = agent.metadata?.name || agent.metadata?.slug || "this agent";
|
|
@@ -276,7 +286,7 @@ function ConnectSlackDialogBody({
|
|
|
276
286
|
<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">
|
|
277
287
|
<div className="stg:flex stg:items-center stg:gap-2.5">
|
|
278
288
|
<SlackMarkIcon className="stg:size-5 stg:text-foreground" />
|
|
279
|
-
<h2 id=
|
|
289
|
+
<h2 id={titleId} className="stg:text-sm stg:font-semibold stg:text-foreground">
|
|
280
290
|
{channel ? "Reconnect to Slack" : "Connect to Slack"}
|
|
281
291
|
</h2>
|
|
282
292
|
</div>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
-
import { useCallback, useMemo, useRef, useState } from "react";
|
|
3
|
+
import { useCallback, useId, useMemo, useRef, useState } from "react";
|
|
4
4
|
import { cn } from "@stigmer/theme";
|
|
5
5
|
import { getErrorReason, type ResourceRef } from "@stigmer/sdk";
|
|
6
6
|
import type { Agent } from "@stigmer/protos/ai/stigmer/agentic/agent/v1/api_pb";
|
|
@@ -102,6 +102,12 @@ export function ConnectWhatsAppDialog({
|
|
|
102
102
|
}: ConnectWhatsAppDialogProps) {
|
|
103
103
|
const dialogRef = useRef<HTMLDialogElement>(null);
|
|
104
104
|
|
|
105
|
+
// Instance-scoped title id (oss#593): a reusable component must not
|
|
106
|
+
// hardcode DOM ids — hosts legitimately mount this dialog more than once
|
|
107
|
+
// per page (e.g. zone-cached detail pages), and duplicate ids break the
|
|
108
|
+
// aria-labelledby association for every copy after the first.
|
|
109
|
+
const titleId = useId();
|
|
110
|
+
|
|
105
111
|
const handleClose = useCallback(() => {
|
|
106
112
|
dialogRef.current?.close();
|
|
107
113
|
onOpenChange(false);
|
|
@@ -131,9 +137,9 @@ export function ConnectWhatsAppDialog({
|
|
|
131
137
|
onClose={handleClose}
|
|
132
138
|
className={cn(
|
|
133
139
|
"stg:w-full stg:max-w-md stg:rounded-xl stg:border stg:border-border stg:bg-popover stg:p-0 stg:shadow-xl",
|
|
134
|
-
modal ? "stg:fixed stg:inset-0 stg:m-auto stg:backdrop:bg-
|
|
140
|
+
modal ? "stg:fixed stg:inset-0 stg:m-auto stg:backdrop:bg-backdrop" : "stg:relative",
|
|
135
141
|
)}
|
|
136
|
-
aria-labelledby=
|
|
142
|
+
aria-labelledby={titleId}
|
|
137
143
|
>
|
|
138
144
|
{/* Body mounts only while open so its flow state resets per
|
|
139
145
|
session — reopening the dialog never resumes a stale flow. */}
|
|
@@ -144,6 +150,7 @@ export function ConnectWhatsAppDialog({
|
|
|
144
150
|
onChannelsChanged={onChannelsChanged}
|
|
145
151
|
onClose={handleClose}
|
|
146
152
|
channelAppsHref={channelAppsHref}
|
|
153
|
+
titleId={titleId}
|
|
147
154
|
/>
|
|
148
155
|
)}
|
|
149
156
|
</dialog>
|
|
@@ -160,6 +167,8 @@ interface ConnectWhatsAppDialogBodyProps {
|
|
|
160
167
|
readonly onChannelsChanged?: () => void;
|
|
161
168
|
readonly onClose: () => void;
|
|
162
169
|
readonly channelAppsHref?: string;
|
|
170
|
+
/** Heading id minted by the outer dialog for its aria-labelledby. */
|
|
171
|
+
readonly titleId: string;
|
|
163
172
|
}
|
|
164
173
|
|
|
165
174
|
function ConnectWhatsAppDialogBody({
|
|
@@ -168,6 +177,7 @@ function ConnectWhatsAppDialogBody({
|
|
|
168
177
|
onChannelsChanged,
|
|
169
178
|
onClose,
|
|
170
179
|
channelAppsHref,
|
|
180
|
+
titleId,
|
|
171
181
|
}: ConnectWhatsAppDialogBodyProps) {
|
|
172
182
|
const stigmer = useStigmer();
|
|
173
183
|
const deploymentMode = useDeploymentMode();
|
|
@@ -314,7 +324,7 @@ function ConnectWhatsAppDialogBody({
|
|
|
314
324
|
<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">
|
|
315
325
|
<div className="stg:flex stg:items-center stg:gap-2.5">
|
|
316
326
|
<WhatsAppMarkIcon className="stg:size-5 stg:text-foreground" />
|
|
317
|
-
<h2 id=
|
|
327
|
+
<h2 id={titleId} className="stg:text-sm stg:font-semibold stg:text-foreground">
|
|
318
328
|
{channel ? "Reconnect to WhatsApp" : "Connect to WhatsApp"}
|
|
319
329
|
</h2>
|
|
320
330
|
</div>
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
3
|
import { create } from "@bufbuild/protobuf";
|
|
4
|
+
// AgentChannel is type-only here so the doc link below resolves (the sibling
|
|
5
|
+
// channel hooks import it for real use); the strict tsdoc gate guards it.
|
|
6
|
+
import type { AgentChannel } from "@stigmer/protos/ai/stigmer/agentic/agentchannel/v1/api_pb";
|
|
4
7
|
import type { Session } from "@stigmer/protos/ai/stigmer/agentic/session/v1/api_pb";
|
|
5
8
|
import { ListSessionsByChannelRequestSchema } from "@stigmer/protos/ai/stigmer/agentic/session/v1/io_pb";
|
|
6
9
|
import { useStigmer } from "../hooks.js";
|