@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
|
@@ -58,6 +58,37 @@ export interface UseSessionPanelOptions {
|
|
|
58
58
|
* @default "files"
|
|
59
59
|
*/
|
|
60
60
|
readonly defaultView?: string;
|
|
61
|
+
/**
|
|
62
|
+
* Controlled open state. When provided, the host owns whether the panel is
|
|
63
|
+
* expanded: internal open intents (the chip toggle, a file/artifact/plan
|
|
64
|
+
* open, plan auto-open) no longer flip state themselves — they surface
|
|
65
|
+
* through {@link UseSessionPanelOptions.onOpenChange} and the panel follows
|
|
66
|
+
* this value. Leave `undefined` for the self-managing default.
|
|
67
|
+
*/
|
|
68
|
+
readonly open?: boolean;
|
|
69
|
+
/**
|
|
70
|
+
* Initial open state in uncontrolled mode. Ignored when
|
|
71
|
+
* {@link UseSessionPanelOptions.open} is provided.
|
|
72
|
+
*
|
|
73
|
+
* @default false
|
|
74
|
+
*/
|
|
75
|
+
readonly defaultOpen?: boolean;
|
|
76
|
+
/**
|
|
77
|
+
* Called on every effective open/close transition — in BOTH modes, unlike
|
|
78
|
+
* `useDetailTabs`'s DD-T05A-001 convention of swallowing the callback when
|
|
79
|
+
* uncontrolled. The difference is principled, not stylistic: tabs change
|
|
80
|
+
* only through user clicks, so an uncontrolled host loses nothing by not
|
|
81
|
+
* hearing about them — but this panel opens ITSELF (`openFile`,
|
|
82
|
+
* `openArtifact`, `openPlanDocument`, and the plan-key auto-open all expand
|
|
83
|
+
* a collapsed panel), and an embedding host that must react to those
|
|
84
|
+
* moments (widen a dock, make room for a streaming plan) has no other seam.
|
|
85
|
+
* Passing only this callback observes the panel without controlling it.
|
|
86
|
+
*
|
|
87
|
+
* In controlled mode this fires once per open/close REQUEST (the host may
|
|
88
|
+
* decline by not updating `open` — a later identical request re-fires); in
|
|
89
|
+
* uncontrolled mode it fires once per actual transition.
|
|
90
|
+
*/
|
|
91
|
+
readonly onOpenChange?: (open: boolean) => void;
|
|
61
92
|
}
|
|
62
93
|
|
|
63
94
|
/**
|
|
@@ -81,7 +112,11 @@ export interface UseSessionPanelOptions {
|
|
|
81
112
|
export interface SessionPanelController {
|
|
82
113
|
/** The open-editor group store; subscribe with `useWorkspaceEditors`. */
|
|
83
114
|
readonly editorsStore: WorkspaceEditorsStore;
|
|
84
|
-
/**
|
|
115
|
+
/**
|
|
116
|
+
* Whether the panel is expanded (chat narrow) or collapsed to the chip.
|
|
117
|
+
* In controlled mode ({@link UseSessionPanelOptions.open}) this mirrors
|
|
118
|
+
* the host's value.
|
|
119
|
+
*/
|
|
85
120
|
readonly isOpen: boolean;
|
|
86
121
|
/** The active rail view id (`"files"`, `"search"`, or an injected facet). */
|
|
87
122
|
readonly view: string;
|
|
@@ -149,9 +184,49 @@ export function useSessionPanel({
|
|
|
149
184
|
hasChanges,
|
|
150
185
|
planKey = null,
|
|
151
186
|
defaultView = "files",
|
|
187
|
+
open,
|
|
188
|
+
defaultOpen = false,
|
|
189
|
+
onOpenChange,
|
|
152
190
|
}: UseSessionPanelOptions): SessionPanelController {
|
|
153
191
|
const editorsStore = useWorkspaceEditorsStoreRef();
|
|
154
|
-
|
|
192
|
+
|
|
193
|
+
// Uncontrolled-by-default / controlled-when-`open`-is-provided (React's own
|
|
194
|
+
// value/defaultValue convention — presence of the value prop decides, so an
|
|
195
|
+
// observe-only host can pass just `onOpenChange`). Everything below reads
|
|
196
|
+
// the EFFECTIVE value: the render-adjust triggers (first write-back) and
|
|
197
|
+
// the returned controller must agree with the host's state, never a stale
|
|
198
|
+
// internal one.
|
|
199
|
+
const isControlled = open !== undefined;
|
|
200
|
+
const [internalIsOpen, setInternalIsOpen] = useState(defaultOpen);
|
|
201
|
+
const isOpen = isControlled ? open : internalIsOpen;
|
|
202
|
+
|
|
203
|
+
// Latest-ref idiom (see YamlEditor's onChangeRef): the host's callback and
|
|
204
|
+
// the mode/value mirrors live in refs so `requestOpenChange` — and every
|
|
205
|
+
// action callback built on it — stays referentially stable regardless of
|
|
206
|
+
// how the host authored `onOpenChange` (DD-010: an inline lambda must not
|
|
207
|
+
// churn the memoized controller and re-render the panel subtree).
|
|
208
|
+
const onOpenChangeRef = useRef(onOpenChange);
|
|
209
|
+
onOpenChangeRef.current = onOpenChange;
|
|
210
|
+
const isControlledRef = useRef(isControlled);
|
|
211
|
+
isControlledRef.current = isControlled;
|
|
212
|
+
const isOpenRef = useRef(isOpen);
|
|
213
|
+
isOpenRef.current = isOpen;
|
|
214
|
+
|
|
215
|
+
// The single seam every open/close intent routes through — the chip
|
|
216
|
+
// toggle, file/artifact/plan opens, the surface's collapse affordance, and
|
|
217
|
+
// the plan-key auto-open. Uncontrolled: apply + notify (the ref is updated
|
|
218
|
+
// eagerly so two same-tick intents produce one notification). Controlled:
|
|
219
|
+
// notify only — the host owns the state, and the panel follows the `open`
|
|
220
|
+
// prop; the ref is NOT updated, so a declined request stays re-fireable.
|
|
221
|
+
const requestOpenChange = useCallback((next: boolean) => {
|
|
222
|
+
if (isOpenRef.current === next) return;
|
|
223
|
+
if (!isControlledRef.current) {
|
|
224
|
+
isOpenRef.current = next;
|
|
225
|
+
setInternalIsOpen(next);
|
|
226
|
+
}
|
|
227
|
+
onOpenChangeRef.current?.(next);
|
|
228
|
+
}, []);
|
|
229
|
+
|
|
155
230
|
const [view, setViewState] = useState(defaultView);
|
|
156
231
|
|
|
157
232
|
// Sticky explicit pick (rail click) — auto-switching yields to it until a
|
|
@@ -184,8 +259,8 @@ export function useSessionPanel({
|
|
|
184
259
|
|
|
185
260
|
const openPlanDocument = useCallback(() => {
|
|
186
261
|
editorsStore.openPinned(PLAN_DOCUMENT_ENTRY_ID, PLAN_DOCUMENT_PATH);
|
|
187
|
-
|
|
188
|
-
}, [editorsStore]);
|
|
262
|
+
requestOpenChange(true);
|
|
263
|
+
}, [editorsStore, requestOpenChange]);
|
|
189
264
|
|
|
190
265
|
// A new plan arrived (first plan, or a refinement superseding it) → open the
|
|
191
266
|
// plan document tab, expanding a collapsed panel (see the planKey option doc
|
|
@@ -204,9 +279,15 @@ export function useSessionPanel({
|
|
|
204
279
|
}
|
|
205
280
|
}, [planKey, openPlanDocument]);
|
|
206
281
|
|
|
207
|
-
const openPanel = useCallback(
|
|
282
|
+
const openPanel = useCallback(
|
|
283
|
+
() => requestOpenChange(true),
|
|
284
|
+
[requestOpenChange],
|
|
285
|
+
);
|
|
208
286
|
|
|
209
|
-
const closePanel = useCallback(
|
|
287
|
+
const closePanel = useCallback(
|
|
288
|
+
() => requestOpenChange(false),
|
|
289
|
+
[requestOpenChange],
|
|
290
|
+
);
|
|
210
291
|
|
|
211
292
|
const setView = useCallback((viewId: string) => {
|
|
212
293
|
userPickedViewRef.current = true;
|
|
@@ -216,17 +297,17 @@ export function useSessionPanel({
|
|
|
216
297
|
const openFile = useCallback(
|
|
217
298
|
(entryId: string, path: string, options?: OpenFileOptions) => {
|
|
218
299
|
editorsStore.openPreview(entryId, path, options);
|
|
219
|
-
|
|
300
|
+
requestOpenChange(true);
|
|
220
301
|
},
|
|
221
|
-
[editorsStore],
|
|
302
|
+
[editorsStore, requestOpenChange],
|
|
222
303
|
);
|
|
223
304
|
|
|
224
305
|
const openArtifact = useCallback(
|
|
225
306
|
(artifact: ExecutionArtifact) => {
|
|
226
307
|
editorsStore.openPreview(ARTIFACT_DOCUMENT_ENTRY_ID, artifactKey(artifact));
|
|
227
|
-
|
|
308
|
+
requestOpenChange(true);
|
|
228
309
|
},
|
|
229
|
-
[editorsStore],
|
|
310
|
+
[editorsStore, requestOpenChange],
|
|
230
311
|
);
|
|
231
312
|
|
|
232
313
|
const pinArtifact = useCallback(
|
|
@@ -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 type { ApiKey } from "@stigmer/protos/ai/stigmer/iam/apikey/v1/api_pb";
|
|
5
5
|
import { ApiKeyListPanel } from "../api-key/ApiKeyListPanel.js";
|
|
6
6
|
import { CreateApiKeyForm } from "../api-key/CreateApiKeyForm.js";
|
|
@@ -16,6 +16,7 @@ type FlowState =
|
|
|
16
16
|
|
|
17
17
|
/** Settings section for listing and creating organization API keys. */
|
|
18
18
|
export function ApiKeysSection() {
|
|
19
|
+
const headingId = useId();
|
|
19
20
|
const org = useActiveOrgSlug();
|
|
20
21
|
const apiKeysAvailable = useResourceAvailable(ApiResourceKind.api_key);
|
|
21
22
|
const [flow, setFlow] = useState<FlowState>({ phase: "idle" });
|
|
@@ -37,10 +38,10 @@ export function ApiKeysSection() {
|
|
|
37
38
|
}, []);
|
|
38
39
|
|
|
39
40
|
return (
|
|
40
|
-
<section aria-labelledby=
|
|
41
|
+
<section aria-labelledby={headingId}>
|
|
41
42
|
<div className="stg:mb-3 stg:flex stg:items-center stg:justify-between">
|
|
42
43
|
<h2
|
|
43
|
-
id=
|
|
44
|
+
id={headingId}
|
|
44
45
|
className="stg:text-foreground stg:text-sm stg:font-semibold"
|
|
45
46
|
>
|
|
46
47
|
API Keys
|
|
@@ -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 type { ChannelApp } from "@stigmer/protos/ai/stigmer/agentic/channelapp/v1/api_pb";
|
|
5
5
|
import { ChannelAppListPanel } from "../channel-app/ChannelAppListPanel.js";
|
|
6
6
|
import {
|
|
@@ -38,6 +38,7 @@ type FlowState =
|
|
|
38
38
|
* Channels tab offers it as the serving app.
|
|
39
39
|
*/
|
|
40
40
|
export function ChannelAppsSection() {
|
|
41
|
+
const headingId = useId();
|
|
41
42
|
const org = useActiveOrgSlug();
|
|
42
43
|
// Channel installs (the consumer of these credentials) are cloud-only;
|
|
43
44
|
// gate the whole section the way the Channels tab gates connects.
|
|
@@ -72,10 +73,10 @@ export function ChannelAppsSection() {
|
|
|
72
73
|
}, []);
|
|
73
74
|
|
|
74
75
|
return (
|
|
75
|
-
<section aria-labelledby=
|
|
76
|
+
<section aria-labelledby={headingId}>
|
|
76
77
|
<div className="stg:mb-3 stg:flex stg:items-center stg:justify-between">
|
|
77
78
|
<h2
|
|
78
|
-
id=
|
|
79
|
+
id={headingId}
|
|
79
80
|
className="stg:text-foreground stg:text-sm stg:font-semibold"
|
|
80
81
|
>
|
|
81
82
|
Channel Apps
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
-
import { useCallback, useEffect, useRef, useState } from "react";
|
|
3
|
+
import { useCallback, useEffect, useId, useRef, useState } from "react";
|
|
4
4
|
import { getUserMessage } from "@stigmer/sdk";
|
|
5
5
|
import { usePersonalEnvironment } from "../environment/usePersonalEnvironment.js";
|
|
6
6
|
import { EnvironmentVariableEditor } from "../environment/EnvironmentVariableEditor.js";
|
|
@@ -47,12 +47,13 @@ function PersonalEnvironmentCard({ org }: { org: string }) {
|
|
|
47
47
|
}, [org, isLoading, environment, getOrCreate]);
|
|
48
48
|
|
|
49
49
|
const environmentId = environment?.metadata?.id;
|
|
50
|
+
const headingId = useId();
|
|
50
51
|
|
|
51
52
|
return (
|
|
52
|
-
<section aria-labelledby=
|
|
53
|
+
<section aria-labelledby={headingId}>
|
|
53
54
|
<div className="stg:mb-3 stg:flex stg:items-baseline stg:gap-2">
|
|
54
55
|
<h2
|
|
55
|
-
id=
|
|
56
|
+
id={headingId}
|
|
56
57
|
className="stg:text-foreground stg:text-sm stg:font-semibold"
|
|
57
58
|
>
|
|
58
59
|
Personal Environment
|
|
@@ -97,11 +98,13 @@ function EnvironmentsCard({ org }: { org: string }) {
|
|
|
97
98
|
listRefetchRef.current?.();
|
|
98
99
|
}, []);
|
|
99
100
|
|
|
101
|
+
const headingId = useId();
|
|
102
|
+
|
|
100
103
|
return (
|
|
101
|
-
<section aria-labelledby=
|
|
104
|
+
<section aria-labelledby={headingId}>
|
|
102
105
|
<div className="stg:mb-3 stg:flex stg:items-center stg:justify-between">
|
|
103
106
|
<h2
|
|
104
|
-
id=
|
|
107
|
+
id={headingId}
|
|
105
108
|
className="stg:text-foreground stg:text-sm stg:font-semibold"
|
|
106
109
|
>
|
|
107
110
|
Environments
|
|
@@ -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 type { IdentityProvider } from "@stigmer/protos/ai/stigmer/iam/identityprovider/v1/api_pb";
|
|
5
5
|
import { IdentityProviderListPanel } from "../identity-provider/IdentityProviderListPanel.js";
|
|
6
6
|
import { IdentityProviderWizard } from "../identity-provider/IdentityProviderWizard.js";
|
|
@@ -28,6 +28,7 @@ type FlowState =
|
|
|
28
28
|
export function IdentityProvidersSection({
|
|
29
29
|
ssoLoginBaseUrl,
|
|
30
30
|
}: IdentityProvidersSectionProps = {}) {
|
|
31
|
+
const headingId = useId();
|
|
31
32
|
const { activeOrg } = useOrg();
|
|
32
33
|
const idpAvailable = useResourceAvailable(ApiResourceKind.identity_provider);
|
|
33
34
|
const orgSlug = activeOrg?.metadata?.slug ?? "";
|
|
@@ -54,10 +55,10 @@ export function IdentityProvidersSection({
|
|
|
54
55
|
(typeof window !== "undefined" ? window.location.origin : "");
|
|
55
56
|
|
|
56
57
|
return (
|
|
57
|
-
<section aria-labelledby=
|
|
58
|
+
<section aria-labelledby={headingId}>
|
|
58
59
|
<div className="stg:mb-3 stg:flex stg:items-center stg:justify-between">
|
|
59
60
|
<h2
|
|
60
|
-
id=
|
|
61
|
+
id={headingId}
|
|
61
62
|
className="stg:text-foreground stg:text-sm stg:font-semibold"
|
|
62
63
|
>
|
|
63
64
|
Identity Providers
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
+
import { useId } from "react";
|
|
3
4
|
import { InvitationManager } from "../invitation/InvitationManager.js";
|
|
4
5
|
import { useResourceAvailable, ApiResourceKind } from "../deployment-mode.js";
|
|
5
6
|
import { CloudFeatureNotice } from "../internal/CloudFeatureNotice.js";
|
|
@@ -7,14 +8,15 @@ import { useActiveOrgSlug } from "../organization/OrgProvider.js";
|
|
|
7
8
|
|
|
8
9
|
/** Settings section for creating and managing organization invitations. */
|
|
9
10
|
export function InvitationsSection() {
|
|
11
|
+
const headingId = useId();
|
|
10
12
|
const org = useActiveOrgSlug();
|
|
11
13
|
const invitationsAvailable = useResourceAvailable(ApiResourceKind.invitation);
|
|
12
14
|
|
|
13
15
|
return (
|
|
14
|
-
<section aria-labelledby=
|
|
16
|
+
<section aria-labelledby={headingId}>
|
|
15
17
|
<div className="stg:mb-3">
|
|
16
18
|
<h2
|
|
17
|
-
id=
|
|
19
|
+
id={headingId}
|
|
18
20
|
className="stg:text-foreground stg:text-sm stg:font-semibold"
|
|
19
21
|
>
|
|
20
22
|
Invitations
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
+
import { useId } from "react";
|
|
3
4
|
import { OrgMembersPanel } from "../iam-policy/OrgMembersPanel.js";
|
|
4
5
|
import { useResourceAvailable, ApiResourceKind } from "../deployment-mode.js";
|
|
5
6
|
import { CloudFeatureNotice } from "../internal/CloudFeatureNotice.js";
|
|
@@ -8,6 +9,7 @@ import { useIdentityProviderList } from "../identity-provider/useIdentityProvide
|
|
|
8
9
|
|
|
9
10
|
/** Settings section for organization membership and role management. */
|
|
10
11
|
export function MembersSection() {
|
|
12
|
+
const headingId = useId();
|
|
11
13
|
const { activeOrg } = useOrg();
|
|
12
14
|
const membersAvailable = useResourceAvailable(ApiResourceKind.iam_policy);
|
|
13
15
|
const idpAvailable = useResourceAvailable(ApiResourceKind.identity_provider);
|
|
@@ -23,9 +25,9 @@ export function MembersSection() {
|
|
|
23
25
|
);
|
|
24
26
|
|
|
25
27
|
return (
|
|
26
|
-
<section aria-labelledby=
|
|
28
|
+
<section aria-labelledby={headingId}>
|
|
27
29
|
<h2
|
|
28
|
-
id=
|
|
30
|
+
id={headingId}
|
|
29
31
|
className="stg:text-foreground stg:mb-1 stg:text-sm stg:font-semibold"
|
|
30
32
|
>
|
|
31
33
|
Members
|
|
@@ -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 type { OAuthApp } from "@stigmer/protos/ai/stigmer/iam/oauthapp/v1/api_pb";
|
|
5
5
|
import { OAuthAppListPanel } from "../oauth-app/OAuthAppListPanel.js";
|
|
6
6
|
import { CreateOAuthAppForm } from "../oauth-app/CreateOAuthAppForm.js";
|
|
@@ -16,6 +16,7 @@ type FlowState =
|
|
|
16
16
|
|
|
17
17
|
/** Settings section for organization OAuth app credentials. */
|
|
18
18
|
export function OAuthAppsSection() {
|
|
19
|
+
const headingId = useId();
|
|
19
20
|
const org = useActiveOrgSlug();
|
|
20
21
|
const oauthAppsAvailable = useResourceAvailable(ApiResourceKind.oauth_app);
|
|
21
22
|
|
|
@@ -42,10 +43,10 @@ export function OAuthAppsSection() {
|
|
|
42
43
|
}, []);
|
|
43
44
|
|
|
44
45
|
return (
|
|
45
|
-
<section aria-labelledby=
|
|
46
|
+
<section aria-labelledby={headingId}>
|
|
46
47
|
<div className="stg:mb-3 stg:flex stg:items-center stg:justify-between">
|
|
47
48
|
<h2
|
|
48
|
-
id=
|
|
49
|
+
id={headingId}
|
|
49
50
|
className="stg:text-foreground stg:text-sm stg:font-semibold"
|
|
50
51
|
>
|
|
51
52
|
OAuth Apps
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
-
import { useCallback } from "react";
|
|
3
|
+
import { useCallback, useId } from "react";
|
|
4
4
|
import type { Organization } from "@stigmer/protos/ai/stigmer/tenancy/organization/v1/api_pb";
|
|
5
5
|
import { OrgProfilePanel } from "../organization/OrgProfilePanel.js";
|
|
6
6
|
import { useOrg } from "../organization/OrgProvider.js";
|
|
7
7
|
|
|
8
8
|
/** Settings section for editing the active organization profile. */
|
|
9
9
|
export function OrgProfileSection() {
|
|
10
|
+
const headingId = useId();
|
|
10
11
|
const { activeOrg, refresh } = useOrg();
|
|
11
12
|
const orgId = activeOrg?.metadata?.id ?? "";
|
|
12
13
|
|
|
@@ -18,9 +19,9 @@ export function OrgProfileSection() {
|
|
|
18
19
|
);
|
|
19
20
|
|
|
20
21
|
return (
|
|
21
|
-
<section aria-labelledby=
|
|
22
|
+
<section aria-labelledby={headingId}>
|
|
22
23
|
<h2
|
|
23
|
-
id=
|
|
24
|
+
id={headingId}
|
|
24
25
|
className="stg:text-foreground stg:mb-1 stg:text-sm stg:font-semibold"
|
|
25
26
|
>
|
|
26
27
|
Organization Profile
|
|
@@ -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 type { PlatformClient } from "@stigmer/protos/ai/stigmer/iam/platformclient/v1/api_pb";
|
|
5
5
|
import type { PlatformClientCreateResponse } from "@stigmer/protos/ai/stigmer/iam/platformclient/v1/io_pb";
|
|
6
6
|
import { PlatformClientListPanel } from "../platform-client/PlatformClientListPanel.js";
|
|
@@ -24,6 +24,7 @@ type FlowState =
|
|
|
24
24
|
|
|
25
25
|
/** Settings section for creating and maintaining platform clients. */
|
|
26
26
|
export function PlatformClientsSection() {
|
|
27
|
+
const headingId = useId();
|
|
27
28
|
const org = useActiveOrgSlug();
|
|
28
29
|
const pcAvailable = useResourceAvailable(ApiResourceKind.platform_client);
|
|
29
30
|
|
|
@@ -71,10 +72,10 @@ export function PlatformClientsSection() {
|
|
|
71
72
|
}, []);
|
|
72
73
|
|
|
73
74
|
return (
|
|
74
|
-
<section aria-labelledby=
|
|
75
|
+
<section aria-labelledby={headingId}>
|
|
75
76
|
<div className="stg:mb-3 stg:flex stg:items-center stg:justify-between">
|
|
76
77
|
<h2
|
|
77
|
-
id=
|
|
78
|
+
id={headingId}
|
|
78
79
|
className="stg:text-foreground stg:text-sm stg:font-semibold"
|
|
79
80
|
>
|
|
80
81
|
Platform Clients
|
|
@@ -1,17 +1,19 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
+
import { useId } from "react";
|
|
3
4
|
import { OrgUsagePanel } from "../usage/OrgUsagePanel.js";
|
|
4
5
|
import { useOrg } from "../organization/OrgProvider.js";
|
|
5
6
|
|
|
6
7
|
/** Settings section for organization usage and cost reporting. */
|
|
7
8
|
export function UsageSection() {
|
|
9
|
+
const headingId = useId();
|
|
8
10
|
const { activeOrg } = useOrg();
|
|
9
11
|
const orgId = activeOrg?.metadata?.id ?? "";
|
|
10
12
|
|
|
11
13
|
return (
|
|
12
|
-
<section aria-labelledby=
|
|
14
|
+
<section aria-labelledby={headingId}>
|
|
13
15
|
<h2
|
|
14
|
-
id=
|
|
16
|
+
id={headingId}
|
|
15
17
|
className="stg:text-foreground stg:mb-1 stg:text-sm stg:font-semibold"
|
|
16
18
|
>
|
|
17
19
|
Usage
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
-
import { useCallback, useMemo, useRef, useState, type FormEvent } from "react";
|
|
3
|
+
import { useCallback, useId, useMemo, useRef, useState, type FormEvent } from "react";
|
|
4
4
|
import { cn } from "@stigmer/theme";
|
|
5
5
|
import {
|
|
6
6
|
MAX_ALLOWED_ORIGINS,
|
|
@@ -139,6 +139,12 @@ export function ShareAgentDialog({
|
|
|
139
139
|
}: ShareAgentDialogProps) {
|
|
140
140
|
const dialogRef = useRef<HTMLDialogElement>(null);
|
|
141
141
|
|
|
142
|
+
// Instance-scoped title id (oss#593): a reusable component must not
|
|
143
|
+
// hardcode DOM ids — hosts legitimately mount this dialog more than once
|
|
144
|
+
// per page (e.g. zone-cached detail pages), and duplicate ids break the
|
|
145
|
+
// aria-labelledby association for every copy after the first.
|
|
146
|
+
const titleId = useId();
|
|
147
|
+
|
|
142
148
|
const handleClose = useCallback(() => {
|
|
143
149
|
dialogRef.current?.close();
|
|
144
150
|
onOpenChange(false);
|
|
@@ -168,9 +174,9 @@ export function ShareAgentDialog({
|
|
|
168
174
|
onClose={handleClose}
|
|
169
175
|
className={cn(
|
|
170
176
|
"stg:w-full stg:max-w-lg stg:rounded-xl stg:border stg:border-border stg:bg-popover stg:p-0 stg:shadow-xl",
|
|
171
|
-
modal ? "stg:fixed stg:inset-0 stg:m-auto stg:backdrop:bg-
|
|
177
|
+
modal ? "stg:fixed stg:inset-0 stg:m-auto stg:backdrop:bg-backdrop" : "stg:relative",
|
|
172
178
|
)}
|
|
173
|
-
aria-labelledby=
|
|
179
|
+
aria-labelledby={titleId}
|
|
174
180
|
>
|
|
175
181
|
{/* Body mounts only while open so its draft state resets per
|
|
176
182
|
session — reopening the dialog never shows a stale draft. */}
|
|
@@ -182,6 +188,7 @@ export function ShareAgentDialog({
|
|
|
182
188
|
buildShareUrl={buildShareUrl}
|
|
183
189
|
onSharingChanged={onSharingChanged}
|
|
184
190
|
onClose={handleClose}
|
|
191
|
+
titleId={titleId}
|
|
185
192
|
/>
|
|
186
193
|
)}
|
|
187
194
|
</dialog>
|
|
@@ -207,6 +214,7 @@ function ShareAgentDialogBody({
|
|
|
207
214
|
buildShareUrl,
|
|
208
215
|
onSharingChanged,
|
|
209
216
|
onClose,
|
|
217
|
+
titleId,
|
|
210
218
|
}: {
|
|
211
219
|
readonly agent: Agent;
|
|
212
220
|
readonly share: AgentShare | null;
|
|
@@ -214,6 +222,8 @@ function ShareAgentDialogBody({
|
|
|
214
222
|
readonly buildShareUrl?: (org: string, slug: string) => string;
|
|
215
223
|
readonly onSharingChanged?: () => void;
|
|
216
224
|
readonly onClose: () => void;
|
|
225
|
+
/** Heading id minted by the outer dialog for its aria-labelledby. */
|
|
226
|
+
readonly titleId: string;
|
|
217
227
|
}) {
|
|
218
228
|
const [created, setCreated] = useState<AgentShare | null>(null);
|
|
219
229
|
const activeShare = share ?? created;
|
|
@@ -229,7 +239,7 @@ function ShareAgentDialogBody({
|
|
|
229
239
|
<div className="stg:flex stg:items-start stg:justify-between stg:border-b stg:border-border stg:px-6 stg:py-4">
|
|
230
240
|
<div className="stg:min-w-0">
|
|
231
241
|
<h2
|
|
232
|
-
id=
|
|
242
|
+
id={titleId}
|
|
233
243
|
className="stg:text-base stg:font-semibold stg:text-foreground"
|
|
234
244
|
>
|
|
235
245
|
{isCreating ? "Create share" : "Share"}
|
|
@@ -322,6 +332,11 @@ function CreateShareForm({
|
|
|
322
332
|
const agentName = agent.metadata?.name || (agent.metadata?.slug ?? "");
|
|
323
333
|
const isCrossOrg = shareOrg !== (agent.metadata?.org ?? "");
|
|
324
334
|
|
|
335
|
+
// Instance-scoped field ids (oss#593) — see the outer dialog's titleId.
|
|
336
|
+
const baseId = useId();
|
|
337
|
+
const nameId = `${baseId}-name`;
|
|
338
|
+
const slugId = `${baseId}-slug`;
|
|
339
|
+
|
|
325
340
|
const [name, setName] = useState(agentName);
|
|
326
341
|
const [slug, setSlug] = useState(agent.metadata?.slug ?? "");
|
|
327
342
|
// Once the user manually edits the slug field, stop auto-deriving.
|
|
@@ -421,13 +436,13 @@ function CreateShareForm({
|
|
|
421
436
|
{/* ---- Name ---- */}
|
|
422
437
|
<div className="stg:space-y-1">
|
|
423
438
|
<label
|
|
424
|
-
htmlFor=
|
|
439
|
+
htmlFor={nameId}
|
|
425
440
|
className="stg:text-xs stg:font-medium stg:text-foreground"
|
|
426
441
|
>
|
|
427
442
|
Name
|
|
428
443
|
</label>
|
|
429
444
|
<input
|
|
430
|
-
id=
|
|
445
|
+
id={nameId}
|
|
431
446
|
type="text"
|
|
432
447
|
value={name}
|
|
433
448
|
onChange={(e) => handleNameChange(e.target.value)}
|
|
@@ -457,13 +472,13 @@ function CreateShareForm({
|
|
|
457
472
|
{/* ---- Slug ---- */}
|
|
458
473
|
<div className="stg:space-y-1">
|
|
459
474
|
<label
|
|
460
|
-
htmlFor=
|
|
475
|
+
htmlFor={slugId}
|
|
461
476
|
className="stg:text-xs stg:font-medium stg:text-foreground"
|
|
462
477
|
>
|
|
463
478
|
Slug
|
|
464
479
|
</label>
|
|
465
480
|
<input
|
|
466
|
-
id=
|
|
481
|
+
id={slugId}
|
|
467
482
|
type="text"
|
|
468
483
|
value={slug}
|
|
469
484
|
onChange={(e) => handleSlugChange(e.target.value)}
|
|
@@ -533,6 +548,9 @@ function ShareAgentForm({
|
|
|
533
548
|
}) {
|
|
534
549
|
const agentName = agent.metadata?.name || (agent.metadata?.slug ?? "");
|
|
535
550
|
|
|
551
|
+
// Instance-scoped label id (oss#593) — see the outer dialog's titleId.
|
|
552
|
+
const enabledLabelId = useId();
|
|
553
|
+
|
|
536
554
|
// The latest server share is the single baseline: the draft, the link
|
|
537
555
|
// token, and the share id for rotation all derive from it.
|
|
538
556
|
const [share, setShare] = useState<AgentShare>(initialShare);
|
|
@@ -644,7 +662,7 @@ function ShareAgentForm({
|
|
|
644
662
|
<div className="stg:flex stg:items-start stg:justify-between stg:gap-4">
|
|
645
663
|
<div className="stg:min-w-0">
|
|
646
664
|
<span
|
|
647
|
-
id=
|
|
665
|
+
id={enabledLabelId}
|
|
648
666
|
className="stg:text-sm stg:font-medium stg:text-foreground"
|
|
649
667
|
>
|
|
650
668
|
{isOrgAudience
|
|
@@ -657,7 +675,7 @@ function ShareAgentForm({
|
|
|
657
675
|
checked={draft.enabled}
|
|
658
676
|
onCheckedChange={handleToggle}
|
|
659
677
|
disabled={isPending}
|
|
660
|
-
aria-labelledby=
|
|
678
|
+
aria-labelledby={enabledLabelId}
|
|
661
679
|
/>
|
|
662
680
|
</div>
|
|
663
681
|
{!isCrossOrg && (
|
|
@@ -274,7 +274,10 @@ describe("WorkspaceSidebar — chrome", () => {
|
|
|
274
274
|
expect(screen.getByTestId("footer-slot")).toBeTruthy();
|
|
275
275
|
const toggle = screen.getByLabelText("Collapse sidebar");
|
|
276
276
|
expect(toggle.getAttribute("aria-expanded")).toBe("false");
|
|
277
|
-
|
|
277
|
+
// The nav id is minted per mount; assert the association, not the value.
|
|
278
|
+
const controlsId = toggle.getAttribute("aria-controls");
|
|
279
|
+
expect(controlsId).toBeTruthy();
|
|
280
|
+
expect(document.getElementById(controlsId!)?.tagName).toBe("NAV");
|
|
278
281
|
});
|
|
279
282
|
|
|
280
283
|
it("resolves the org switcher from the mocked transport", async () => {
|
package/src/sidebar/chrome.tsx
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
-
import type
|
|
3
|
+
import { useId, type ReactNode } from "react";
|
|
4
4
|
import { PanelLeft } from "lucide-react";
|
|
5
5
|
import { cn } from "@stigmer/theme";
|
|
6
6
|
import type { Organization } from "@stigmer/protos/ai/stigmer/tenancy/organization/v1/api_pb";
|
|
@@ -46,9 +46,8 @@ export interface SidebarChromeProps {
|
|
|
46
46
|
/**
|
|
47
47
|
* Outer sidebar frame: `<nav>` container, top row, content, footer band.
|
|
48
48
|
*
|
|
49
|
-
* The
|
|
50
|
-
*
|
|
51
|
-
* only one sidebar renders at a time, so the id cannot collide.
|
|
49
|
+
* The nav id exists solely for the collapse toggle's `aria-controls`
|
|
50
|
+
* association; it is minted per mount like every SDK DOM id.
|
|
52
51
|
*/
|
|
53
52
|
export function SidebarChrome({
|
|
54
53
|
ariaLabel,
|
|
@@ -58,9 +57,10 @@ export function SidebarChrome({
|
|
|
58
57
|
footer,
|
|
59
58
|
children,
|
|
60
59
|
}: SidebarChromeProps) {
|
|
60
|
+
const navId = useId();
|
|
61
61
|
return (
|
|
62
62
|
<nav
|
|
63
|
-
id=
|
|
63
|
+
id={navId}
|
|
64
64
|
aria-label={ariaLabel}
|
|
65
65
|
className="stg:bg-sidebar stg:text-sidebar-foreground stg:flex stg:h-full stg:flex-col"
|
|
66
66
|
>
|
|
@@ -70,7 +70,7 @@ export function SidebarChrome({
|
|
|
70
70
|
type="button"
|
|
71
71
|
onClick={onCollapse}
|
|
72
72
|
aria-expanded={isOpen}
|
|
73
|
-
aria-controls=
|
|
73
|
+
aria-controls={navId}
|
|
74
74
|
aria-label="Collapse sidebar"
|
|
75
75
|
className={cn(
|
|
76
76
|
"stg:inline-flex stg:size-7 stg:shrink-0 stg:items-center stg:justify-center stg:rounded-md",
|
|
@@ -100,7 +100,7 @@ export function SkillDiffDialog({ state, onClose }: SkillDiffDialogProps) {
|
|
|
100
100
|
onClick={handleBackdropClick}
|
|
101
101
|
className={cn(
|
|
102
102
|
"stg:fixed stg:inset-0 stg:z-50 stg:m-auto stg:h-[85vh] stg:w-full stg:max-w-4xl stg:rounded-lg stg:border stg:border-border stg:bg-popover stg:p-0 stg:text-popover-foreground stg:shadow-lg",
|
|
103
|
-
"stg:backdrop:bg-
|
|
103
|
+
"stg:backdrop:bg-backdrop",
|
|
104
104
|
"stg:open:animate-in stg:open:fade-in-0 stg:open:zoom-in-95",
|
|
105
105
|
)}
|
|
106
106
|
>
|