@stigmer/react 3.12.1 → 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/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/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 +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/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/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 +7 -7
- 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/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/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/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 +1 -1
- 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__/definitionDrift.test.ts +245 -0
- package/src/mcp-server/__tests__/mcpServerToInput.test.ts +201 -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/useMcpServerDefinitionDrift.ts +95 -0
- 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 +10 -8
- 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/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 +2 -0
- package/src/workflow/WorkflowCanvasInner.tsx +14 -1
- package/src/workflow/WorkflowDiffGraph.tsx +7 -1
- package/src/workflow/WorkflowExecutionViewer.tsx +88 -11
- package/src/workflow/WorkflowExplainDialog.tsx +8 -24
- 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 +3 -23
- 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__/panelNegotiation.test.tsx +230 -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__/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 +1 -1
- package/src/workflow/instance/WorkflowInstanceDetailPanel.tsx +2 -1
- package/src/workflow/picker/BranchAddPopover.tsx +4 -3
- package/src/workflow/templates/WorkflowTemplatePreview.tsx +1 -1
- package/src/workflow/useApprovalBoundary.ts +1 -1
- package/src/workflow/useWorkflowCanvas.ts +114 -11
- package/src/workflow/useWorkflowExecutionPanel.ts +95 -13
- 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 +1 -1
- 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/WorkflowExecutionViewer.d.ts +51 -0
- package/workflow/WorkflowExecutionViewer.d.ts.map +1 -1
- package/workflow/WorkflowExecutionViewer.js +23 -6
- 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/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.map +1 -1
- package/workflow/WorkflowRunDialog.js +2 -7
- 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.js +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/picker/BranchAddPopover.d.ts.map +1 -1
- package/workflow/picker/BranchAddPopover.js +3 -2
- package/workflow/picker/BranchAddPopover.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/useWorkflowCanvas.d.ts +5 -1
- package/workflow/useWorkflowCanvas.d.ts.map +1 -1
- package/workflow/useWorkflowCanvas.js +99 -13
- 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/skill/SkillDiffDialog.js
CHANGED
|
@@ -52,7 +52,7 @@ export function SkillDiffDialog({ state, onClose }) {
|
|
|
52
52
|
const { diff, isLoading, error } = useSkillDiff(state?.fromArtifactKey ?? null, state?.toArtifactKey ?? null);
|
|
53
53
|
if (!state)
|
|
54
54
|
return null;
|
|
55
|
-
return (_jsx("dialog", { ref: dialogRef, onCancel: handleDialogCancel, onClick: handleBackdropClick, className: cn("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", "stg:backdrop:bg-
|
|
55
|
+
return (_jsx("dialog", { ref: dialogRef, onCancel: handleDialogCancel, onClick: handleBackdropClick, className: cn("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", "stg:backdrop:bg-backdrop", "stg:open:animate-in stg:open:fade-in-0 stg:open:zoom-in-95"), children: _jsxs("div", { className: "stg:flex stg:h-full stg:flex-col", children: [_jsxs("div", { className: "stg:flex stg:shrink-0 stg:items-center stg:justify-between stg:border-b stg:border-border stg:px-4 stg:py-3", children: [_jsxs("div", { className: "stg:flex stg:items-center stg:gap-2 stg:text-sm", children: [_jsx("span", { className: "stg:font-medium stg:text-foreground", children: "Comparing" }), _jsx("code", { className: "stg:rounded stg:bg-muted stg:px-1.5 stg:py-0.5 stg:font-mono stg:text-[11px] stg:text-muted-foreground", children: state.fromLabel }), _jsx(ArrowIcon, { className: "stg:size-3.5 stg:text-muted-foreground-faint" }), _jsx("code", { className: "stg:rounded stg:bg-muted stg:px-1.5 stg:py-0.5 stg:font-mono stg:text-[11px] stg:text-muted-foreground", children: state.toLabel })] }), _jsx("button", { type: "button", onClick: onClose, "aria-label": "Close diff viewer", className: cn("stg:rounded-md stg:p-1.5 stg:text-muted-foreground stg:transition-colors", "stg:hover:bg-accent-hover stg:hover:text-foreground", "stg:focus-visible:outline-none stg:focus-visible:ring-2 stg:focus-visible:ring-ring"), children: _jsx(CloseIcon, { className: "stg:size-4" }) })] }), _jsx("div", { className: "stg:flex-1 stg:overflow-auto stg:p-4", children: isLoading ? (_jsx(DiffSkeleton, {})) : error ? (_jsx(ErrorMessage, { error: error })) : diff ? (_jsx(MultiFileDiffView, { diff: diff })) : null })] }) }));
|
|
56
56
|
}
|
|
57
57
|
// ---------------------------------------------------------------------------
|
|
58
58
|
// Loading skeleton
|
|
@@ -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 { cn } from "@stigmer/theme";
|
|
5
5
|
import { hasGrantableRoles } from "@stigmer/sdk";
|
|
6
6
|
import { PeopleWithAccess } from "../iam-policy/PeopleWithAccess.js";
|
|
@@ -78,6 +78,12 @@ export function ManageAccessDialog({
|
|
|
78
78
|
}: ManageAccessDialogProps) {
|
|
79
79
|
const dialogRef = useRef<HTMLDialogElement>(null);
|
|
80
80
|
|
|
81
|
+
// Instance-scoped title id (oss#593): a reusable component must not
|
|
82
|
+
// hardcode DOM ids — hosts legitimately mount this dialog more than once
|
|
83
|
+
// per page (e.g. zone-cached detail pages), and duplicate ids break the
|
|
84
|
+
// aria-labelledby association for every copy after the first.
|
|
85
|
+
const titleId = useId();
|
|
86
|
+
|
|
81
87
|
const handleClose = useCallback(() => {
|
|
82
88
|
dialogRef.current?.close();
|
|
83
89
|
onOpenChange(false);
|
|
@@ -106,9 +112,9 @@ export function ManageAccessDialog({
|
|
|
106
112
|
onClose={handleClose}
|
|
107
113
|
className={cn(
|
|
108
114
|
"stg:fixed stg:inset-0 stg:m-auto stg:w-full stg:max-w-md stg:rounded-xl stg:border stg:border-border stg:bg-popover stg:p-0 stg:shadow-xl",
|
|
109
|
-
"stg:backdrop:bg-
|
|
115
|
+
"stg:backdrop:bg-backdrop",
|
|
110
116
|
)}
|
|
111
|
-
aria-labelledby=
|
|
117
|
+
aria-labelledby={titleId}
|
|
112
118
|
>
|
|
113
119
|
{/* Body mounts only while open so the access-list fetch is lazy. */}
|
|
114
120
|
{open && (
|
|
@@ -117,7 +123,7 @@ export function ManageAccessDialog({
|
|
|
117
123
|
<div className="stg:flex stg:items-start stg:justify-between stg:border-b stg:border-border stg:px-6 stg:py-4">
|
|
118
124
|
<div className="stg:min-w-0">
|
|
119
125
|
<h2
|
|
120
|
-
id=
|
|
126
|
+
id={titleId}
|
|
121
127
|
className="stg:text-base stg:font-semibold stg:text-foreground"
|
|
122
128
|
>
|
|
123
129
|
Manage access
|
|
@@ -1,16 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* The SDK's compact relative-time vocabulary: one deterministic "how long
|
|
3
|
+
* ago" formatter so timestamps read identically everywhere (consolidated
|
|
4
|
+
* from eight per-component drifting copies — stigmer-cloud#269). Pass
|
|
5
|
+
* `now` to freeze the clock in tests.
|
|
3
6
|
*
|
|
4
|
-
*
|
|
5
|
-
* execution names embed their CREATION time — so an old run legitimately
|
|
6
|
-
* re-bumped by a status change (a cancel, a late failure) sorts above
|
|
7
|
-
* newer-named items and reads as "wrong order" unless the row says why it
|
|
8
|
-
* is there. This stamp is that explanation: it renders the sort key the
|
|
9
|
-
* user cannot otherwise see.
|
|
10
|
-
*
|
|
11
|
-
* Compact single-unit output — a sidebar row suffix, not prose:
|
|
7
|
+
* Compact single-unit output — a row suffix, not prose:
|
|
12
8
|
* `now`, `5m`, `3h`, `6d`, then a short date (`Jul 12`, `Jul 12, 2025`)
|
|
13
9
|
* once "days ago" stops being how people think about it.
|
|
10
|
+
*
|
|
11
|
+
* Born on the recents list, where it renders the otherwise-invisible sort
|
|
12
|
+
* key: the list sorts by LAST ACTIVITY (`statusAudit.updatedAt`) while
|
|
13
|
+
* execution names embed their CREATION time, so an old run re-bumped by a
|
|
14
|
+
* late status change sorts above newer-named items and reads as "wrong
|
|
15
|
+
* order" unless the row says why it is there.
|
|
14
16
|
*/
|
|
15
17
|
export function formatRelativeTime(date: Date, now?: Date): string {
|
|
16
18
|
const ref = now ?? new Date();
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
-
import { useCallback, useState } from "react";
|
|
3
|
+
import { useCallback, useId, useState } from "react";
|
|
4
4
|
import { cn } from "@stigmer/theme";
|
|
5
5
|
import type { McpServerUsageInput, ResourceRef } from "@stigmer/sdk";
|
|
6
6
|
import { McpServerPicker } from "../../mcp-server/McpServerPicker.js";
|
|
@@ -142,13 +142,16 @@ function CollapsibleSection({
|
|
|
142
142
|
readonly onToggle: (id: string) => void;
|
|
143
143
|
readonly children: React.ReactNode;
|
|
144
144
|
}) {
|
|
145
|
+
// The disclosure-panel DOM id is minted per mount — deriving it from the
|
|
146
|
+
// semantic section key would collide when two wizards mount on one page.
|
|
147
|
+
const panelId = useId();
|
|
145
148
|
return (
|
|
146
149
|
<div className="stg:overflow-hidden stg:rounded-lg stg:border stg:border-border">
|
|
147
150
|
<button
|
|
148
151
|
type="button"
|
|
149
152
|
onClick={() => onToggle(id)}
|
|
150
153
|
aria-expanded={expanded}
|
|
151
|
-
aria-controls={
|
|
154
|
+
aria-controls={panelId}
|
|
152
155
|
className={cn(
|
|
153
156
|
"stg:flex stg:w-full stg:items-center stg:justify-between stg:px-4 stg:py-3 stg:text-left stg:transition-colors",
|
|
154
157
|
"stg:hover:bg-accent-hover",
|
|
@@ -174,7 +177,7 @@ function CollapsibleSection({
|
|
|
174
177
|
|
|
175
178
|
{expanded && (
|
|
176
179
|
<div
|
|
177
|
-
id={
|
|
180
|
+
id={panelId}
|
|
178
181
|
className="stg:border-t stg:border-border stg:px-4 stg:py-4"
|
|
179
182
|
>
|
|
180
183
|
{children}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
-
import { useCallback } from "react";
|
|
3
|
+
import { useCallback, useId } from "react";
|
|
4
4
|
import { cn } from "@stigmer/theme";
|
|
5
5
|
import { generateSlug } from "../../internal/slug.js";
|
|
6
6
|
import type { AgentWizardData } from "./types.js";
|
|
@@ -28,6 +28,7 @@ export function IdentityStep({
|
|
|
28
28
|
updateData,
|
|
29
29
|
validationError,
|
|
30
30
|
}: IdentityStepProps) {
|
|
31
|
+
const baseId = useId();
|
|
31
32
|
const handleNameChange = useCallback(
|
|
32
33
|
(value: string) => {
|
|
33
34
|
if (!data.slugTouched) {
|
|
@@ -72,13 +73,13 @@ export function IdentityStep({
|
|
|
72
73
|
{/* Name */}
|
|
73
74
|
<div className="stg:space-y-1.5">
|
|
74
75
|
<label
|
|
75
|
-
htmlFor=
|
|
76
|
+
htmlFor={`${baseId}-name`}
|
|
76
77
|
className="stg:text-sm stg:font-medium stg:text-foreground"
|
|
77
78
|
>
|
|
78
79
|
Name <span className="stg:text-destructive">*</span>
|
|
79
80
|
</label>
|
|
80
81
|
<input
|
|
81
|
-
id=
|
|
82
|
+
id={`${baseId}-name`}
|
|
82
83
|
type="text"
|
|
83
84
|
value={data.name}
|
|
84
85
|
onChange={(e) => handleNameChange(e.target.value)}
|
|
@@ -95,13 +96,13 @@ export function IdentityStep({
|
|
|
95
96
|
{/* Slug */}
|
|
96
97
|
<div className="stg:space-y-1.5">
|
|
97
98
|
<label
|
|
98
|
-
htmlFor=
|
|
99
|
+
htmlFor={`${baseId}-slug`}
|
|
99
100
|
className="stg:text-sm stg:font-medium stg:text-foreground"
|
|
100
101
|
>
|
|
101
102
|
Slug
|
|
102
103
|
</label>
|
|
103
104
|
<input
|
|
104
|
-
id=
|
|
105
|
+
id={`${baseId}-slug`}
|
|
105
106
|
type="text"
|
|
106
107
|
value={data.slug}
|
|
107
108
|
onChange={(e) => handleSlugChange(e.target.value)}
|
|
@@ -129,13 +130,13 @@ export function IdentityStep({
|
|
|
129
130
|
{/* Description */}
|
|
130
131
|
<div className="stg:space-y-1.5">
|
|
131
132
|
<label
|
|
132
|
-
htmlFor=
|
|
133
|
+
htmlFor={`${baseId}-description`}
|
|
133
134
|
className="stg:text-sm stg:font-medium stg:text-foreground"
|
|
134
135
|
>
|
|
135
136
|
Description
|
|
136
137
|
</label>
|
|
137
138
|
<input
|
|
138
|
-
id=
|
|
139
|
+
id={`${baseId}-description`}
|
|
139
140
|
type="text"
|
|
140
141
|
value={data.description}
|
|
141
142
|
onChange={(e) => updateData({ description: e.target.value })}
|
|
@@ -153,13 +154,13 @@ export function IdentityStep({
|
|
|
153
154
|
<div className="stg:grid stg:gap-4 stg:sm:grid-cols-2">
|
|
154
155
|
<div className="stg:space-y-1.5">
|
|
155
156
|
<label
|
|
156
|
-
htmlFor=
|
|
157
|
+
htmlFor={`${baseId}-icon`}
|
|
157
158
|
className="stg:text-sm stg:font-medium stg:text-foreground"
|
|
158
159
|
>
|
|
159
160
|
Icon URL
|
|
160
161
|
</label>
|
|
161
162
|
<input
|
|
162
|
-
id=
|
|
163
|
+
id={`${baseId}-icon`}
|
|
163
164
|
type="url"
|
|
164
165
|
value={data.iconUrl}
|
|
165
166
|
onChange={(e) => updateData({ iconUrl: e.target.value })}
|
|
@@ -177,13 +178,17 @@ export function IdentityStep({
|
|
|
177
178
|
Visibility
|
|
178
179
|
</legend>
|
|
179
180
|
<div className="stg:flex stg:gap-2">
|
|
181
|
+
{/* The radio-group name is minted per mount: a hardcoded name
|
|
182
|
+
would merge two mounted wizards into one keyboard group. */}
|
|
180
183
|
<VisibilityOption
|
|
184
|
+
name={`${baseId}-visibility`}
|
|
181
185
|
value="private"
|
|
182
186
|
label="Private"
|
|
183
187
|
checked={data.visibility === "private"}
|
|
184
188
|
onChange={() => updateData({ visibility: "private" })}
|
|
185
189
|
/>
|
|
186
190
|
<VisibilityOption
|
|
191
|
+
name={`${baseId}-visibility`}
|
|
187
192
|
value="public"
|
|
188
193
|
label="Public"
|
|
189
194
|
checked={data.visibility === "public"}
|
|
@@ -196,7 +201,7 @@ export function IdentityStep({
|
|
|
196
201
|
{/* Instructions */}
|
|
197
202
|
<div className="stg:space-y-1.5">
|
|
198
203
|
<label
|
|
199
|
-
htmlFor=
|
|
204
|
+
htmlFor={`${baseId}-instructions`}
|
|
200
205
|
className="stg:text-sm stg:font-medium stg:text-foreground"
|
|
201
206
|
>
|
|
202
207
|
Instructions
|
|
@@ -205,7 +210,7 @@ export function IdentityStep({
|
|
|
205
210
|
The system prompt that defines this agent's behavior.
|
|
206
211
|
</p>
|
|
207
212
|
<textarea
|
|
208
|
-
id=
|
|
213
|
+
id={`${baseId}-instructions`}
|
|
209
214
|
value={data.instructions}
|
|
210
215
|
onChange={(e) => updateData({ instructions: e.target.value })}
|
|
211
216
|
placeholder="You are a helpful assistant that..."
|
|
@@ -226,11 +231,13 @@ export function IdentityStep({
|
|
|
226
231
|
// ---------------------------------------------------------------------------
|
|
227
232
|
|
|
228
233
|
function VisibilityOption({
|
|
234
|
+
name,
|
|
229
235
|
value,
|
|
230
236
|
label,
|
|
231
237
|
checked,
|
|
232
238
|
onChange,
|
|
233
239
|
}: {
|
|
240
|
+
readonly name: string;
|
|
234
241
|
readonly value: string;
|
|
235
242
|
readonly label: string;
|
|
236
243
|
readonly checked: boolean;
|
|
@@ -247,7 +254,7 @@ function VisibilityOption({
|
|
|
247
254
|
>
|
|
248
255
|
<input
|
|
249
256
|
type="radio"
|
|
250
|
-
name=
|
|
257
|
+
name={name}
|
|
251
258
|
value={value}
|
|
252
259
|
checked={checked}
|
|
253
260
|
onChange={onChange}
|
|
@@ -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 { ApiResourceVisibility } from "@stigmer/protos/ai/stigmer/commons/apiresource/enum_pb";
|
|
6
6
|
import type { AgentInstance } from "@stigmer/protos/ai/stigmer/agentic/agentinstance/v1/api_pb";
|
|
@@ -42,6 +42,15 @@ export function CreateAgentInstanceDialog({
|
|
|
42
42
|
const dialogRef = useRef<HTMLDialogElement>(null);
|
|
43
43
|
const { create, isCreating, error, clearError } = useCreateAgentInstance();
|
|
44
44
|
|
|
45
|
+
// Instance-scoped element ids (oss#593): a reusable component must not
|
|
46
|
+
// hardcode DOM ids — hosts legitimately mount this dialog more than once
|
|
47
|
+
// per page (e.g. zone-cached detail pages), and duplicate ids silently
|
|
48
|
+
// break the label→input association for every copy after the first.
|
|
49
|
+
const baseId = useId();
|
|
50
|
+
const titleId = `${baseId}-title`;
|
|
51
|
+
const nameId = `${baseId}-name`;
|
|
52
|
+
const descriptionId = `${baseId}-description`;
|
|
53
|
+
|
|
45
54
|
const [name, setName] = useState("");
|
|
46
55
|
const [description, setDescription] = useState("");
|
|
47
56
|
const [environmentRefs, setEnvironmentRefs] = useState<ResourceRef[]>([]);
|
|
@@ -106,14 +115,14 @@ export function CreateAgentInstanceDialog({
|
|
|
106
115
|
onClose={handleClose}
|
|
107
116
|
className={cn(
|
|
108
117
|
"stg:fixed stg:inset-0 stg:m-auto stg:w-full stg:max-w-lg stg:rounded-xl stg:border stg:border-border stg:bg-popover stg:p-0 stg:shadow-xl",
|
|
109
|
-
"stg:backdrop:bg-
|
|
118
|
+
"stg:backdrop:bg-backdrop",
|
|
110
119
|
)}
|
|
111
|
-
aria-labelledby=
|
|
120
|
+
aria-labelledby={titleId}
|
|
112
121
|
>
|
|
113
122
|
<form onSubmit={handleSubmit} className="stg:flex stg:flex-col">
|
|
114
123
|
{/* Header */}
|
|
115
124
|
<div className="stg:flex stg:items-center stg:justify-between stg:border-b stg:border-border stg:px-6 stg:py-4">
|
|
116
|
-
<h2 id=
|
|
125
|
+
<h2 id={titleId} className="stg:text-base stg:font-semibold stg:text-foreground">
|
|
117
126
|
Create Agent Instance
|
|
118
127
|
</h2>
|
|
119
128
|
<button
|
|
@@ -134,11 +143,11 @@ export function CreateAgentInstanceDialog({
|
|
|
134
143
|
<div className="stg:space-y-5 stg:px-6 stg:py-5">
|
|
135
144
|
{/* Name */}
|
|
136
145
|
<div>
|
|
137
|
-
<label htmlFor=
|
|
146
|
+
<label htmlFor={nameId} className="stg:block stg:text-sm stg:font-medium stg:text-foreground stg:mb-1.5">
|
|
138
147
|
Name <span className="stg:text-destructive">*</span>
|
|
139
148
|
</label>
|
|
140
149
|
<input
|
|
141
|
-
id=
|
|
150
|
+
id={nameId}
|
|
142
151
|
type="text"
|
|
143
152
|
required
|
|
144
153
|
value={name}
|
|
@@ -160,11 +169,11 @@ export function CreateAgentInstanceDialog({
|
|
|
160
169
|
|
|
161
170
|
{/* Description */}
|
|
162
171
|
<div>
|
|
163
|
-
<label htmlFor=
|
|
172
|
+
<label htmlFor={descriptionId} className="stg:block stg:text-sm stg:font-medium stg:text-foreground stg:mb-1.5">
|
|
164
173
|
Description
|
|
165
174
|
</label>
|
|
166
175
|
<textarea
|
|
167
|
-
id=
|
|
176
|
+
id={descriptionId}
|
|
168
177
|
value={description}
|
|
169
178
|
onChange={(e) => setDescription(e.target.value)}
|
|
170
179
|
placeholder="What is this instance used for?"
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
-
import { useCallback,
|
|
3
|
+
import { useCallback, useRef } from "react";
|
|
4
4
|
import { cn } from "@stigmer/theme";
|
|
5
|
+
import { selectElementText } from "../internal/select-element-text.js";
|
|
6
|
+
import { useCopyFeedback } from "../internal/useCopyFeedback.js";
|
|
5
7
|
|
|
6
8
|
// ---------------------------------------------------------------------------
|
|
7
9
|
// Public API
|
|
@@ -47,25 +49,14 @@ export function ApiKeyCreatedAlert({
|
|
|
47
49
|
onDismiss,
|
|
48
50
|
className,
|
|
49
51
|
}: ApiKeyCreatedAlertProps) {
|
|
50
|
-
const
|
|
52
|
+
const { copy, copied } = useCopyFeedback();
|
|
53
|
+
const revealRef = useRef<HTMLElement>(null);
|
|
51
54
|
|
|
52
55
|
const handleCopy = useCallback(async () => {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
} catch {
|
|
58
|
-
// Fallback: select the text so the user can manually copy
|
|
59
|
-
const el = document.getElementById("stgm-api-key-reveal");
|
|
60
|
-
if (el) {
|
|
61
|
-
const selection = window.getSelection();
|
|
62
|
-
const range = document.createRange();
|
|
63
|
-
range.selectNodeContents(el);
|
|
64
|
-
selection?.removeAllRanges();
|
|
65
|
-
selection?.addRange(range);
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
}, [rawKey]);
|
|
56
|
+
if (await copy(rawKey)) return;
|
|
57
|
+
// Rejected write: select the revealed key so the user can copy manually.
|
|
58
|
+
if (revealRef.current) selectElementText(revealRef.current);
|
|
59
|
+
}, [copy, rawKey]);
|
|
69
60
|
|
|
70
61
|
return (
|
|
71
62
|
<div
|
|
@@ -100,7 +91,7 @@ export function ApiKeyCreatedAlert({
|
|
|
100
91
|
|
|
101
92
|
<div className="stg:flex stg:items-center stg:gap-2">
|
|
102
93
|
<code
|
|
103
|
-
|
|
94
|
+
ref={revealRef}
|
|
104
95
|
className={cn(
|
|
105
96
|
"stg:min-w-0 stg:flex-1 stg:select-all stg:truncate stg:rounded-md",
|
|
106
97
|
"stg:border stg:border-input stg:bg-background stg:px-2.5 stg:py-1.5",
|
|
@@ -8,6 +8,8 @@ import type { ApiKey } from "@stigmer/protos/ai/stigmer/iam/apikey/v1/api_pb";
|
|
|
8
8
|
import { Tooltip, TooltipContent, TooltipTrigger } from "../internal/tooltip.js";
|
|
9
9
|
import { useApiKeyList } from "./useApiKeyList.js";
|
|
10
10
|
import { useDeleteApiKey } from "./useDeleteApiKey.js";
|
|
11
|
+
import { SpinnerIcon } from "../internal/SpinnerIcon.js";
|
|
12
|
+
import { formatRelativeTime } from "../activity/format-relative-time.js";
|
|
11
13
|
|
|
12
14
|
// ---------------------------------------------------------------------------
|
|
13
15
|
// Public API
|
|
@@ -200,7 +202,7 @@ function ApiKeyRow({
|
|
|
200
202
|
"stg:disabled:pointer-events-none stg:disabled:opacity-50",
|
|
201
203
|
)}
|
|
202
204
|
>
|
|
203
|
-
{isDeleting && <SpinnerIcon />}
|
|
205
|
+
{isDeleting && <SpinnerIcon size={12} />}
|
|
204
206
|
Delete
|
|
205
207
|
</button>
|
|
206
208
|
<button
|
|
@@ -297,27 +299,6 @@ function formatShortDate(date: Date): string {
|
|
|
297
299
|
});
|
|
298
300
|
}
|
|
299
301
|
|
|
300
|
-
function formatRelativeTime(date: Date, now?: Date): string {
|
|
301
|
-
const ref = now?.getTime() ?? Date.now();
|
|
302
|
-
const diffMs = ref - date.getTime();
|
|
303
|
-
|
|
304
|
-
if (diffMs < 0) return "Just now";
|
|
305
|
-
|
|
306
|
-
const seconds = Math.floor(diffMs / 1000);
|
|
307
|
-
if (seconds < 60) return "Just now";
|
|
308
|
-
|
|
309
|
-
const minutes = Math.floor(seconds / 60);
|
|
310
|
-
if (minutes < 60) return `${minutes}m ago`;
|
|
311
|
-
|
|
312
|
-
const hours = Math.floor(minutes / 60);
|
|
313
|
-
if (hours < 24) return `${hours}h ago`;
|
|
314
|
-
|
|
315
|
-
const days = Math.floor(hours / 24);
|
|
316
|
-
if (days < 30) return `${days}d ago`;
|
|
317
|
-
|
|
318
|
-
return formatShortDate(date);
|
|
319
|
-
}
|
|
320
|
-
|
|
321
302
|
// ---------------------------------------------------------------------------
|
|
322
303
|
// Icons
|
|
323
304
|
// ---------------------------------------------------------------------------
|
|
@@ -363,20 +344,3 @@ function TrashIcon() {
|
|
|
363
344
|
);
|
|
364
345
|
}
|
|
365
346
|
|
|
366
|
-
function SpinnerIcon() {
|
|
367
|
-
return (
|
|
368
|
-
<svg
|
|
369
|
-
width="12"
|
|
370
|
-
height="12"
|
|
371
|
-
viewBox="0 0 16 16"
|
|
372
|
-
fill="none"
|
|
373
|
-
stroke="currentColor"
|
|
374
|
-
strokeWidth="2"
|
|
375
|
-
strokeLinecap="round"
|
|
376
|
-
className="stg:animate-spin"
|
|
377
|
-
aria-hidden="true"
|
|
378
|
-
>
|
|
379
|
-
<path d="M8 2a6 6 0 1 0 6 6" />
|
|
380
|
-
</svg>
|
|
381
|
-
);
|
|
382
|
-
}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
-
import { useCallback, useState, type FormEvent } from "react";
|
|
3
|
+
import { useCallback, useId, useState, type FormEvent } from "react";
|
|
4
4
|
import { cn } from "@stigmer/theme";
|
|
5
5
|
import { getUserMessage } from "@stigmer/sdk";
|
|
6
6
|
import type { ApiKey } from "@stigmer/protos/ai/stigmer/iam/apikey/v1/api_pb";
|
|
7
7
|
import { useCreateApiKey } from "./useCreateApiKey.js";
|
|
8
|
+
import { SpinnerIcon } from "../internal/SpinnerIcon.js";
|
|
8
9
|
|
|
9
10
|
// ---------------------------------------------------------------------------
|
|
10
11
|
// Public API
|
|
@@ -61,6 +62,7 @@ export function CreateApiKeyForm({
|
|
|
61
62
|
className,
|
|
62
63
|
}: CreateApiKeyFormProps) {
|
|
63
64
|
const { create, isCreating, error, clearError } = useCreateApiKey();
|
|
65
|
+
const baseId = useId();
|
|
64
66
|
|
|
65
67
|
const [name, setName] = useState(initialName);
|
|
66
68
|
const [expiry, setExpiry] = useState<ExpiryOption>("never");
|
|
@@ -96,13 +98,13 @@ export function CreateApiKeyForm({
|
|
|
96
98
|
{/* Name */}
|
|
97
99
|
<div className="stg:space-y-1">
|
|
98
100
|
<label
|
|
99
|
-
htmlFor=
|
|
101
|
+
htmlFor={`${baseId}-name`}
|
|
100
102
|
className="stg:text-xs stg:font-medium stg:text-foreground"
|
|
101
103
|
>
|
|
102
104
|
Name
|
|
103
105
|
</label>
|
|
104
106
|
<input
|
|
105
|
-
id=
|
|
107
|
+
id={`${baseId}-name`}
|
|
106
108
|
type="text"
|
|
107
109
|
value={name}
|
|
108
110
|
onChange={(e) => setName(e.target.value)}
|
|
@@ -125,9 +127,12 @@ export function CreateApiKeyForm({
|
|
|
125
127
|
Expiration
|
|
126
128
|
</legend>
|
|
127
129
|
<div className="stg:flex stg:flex-wrap stg:gap-2">
|
|
130
|
+
{/* The radio-group name is minted per mount: a hardcoded name
|
|
131
|
+
would merge two mounted forms into one keyboard group. */}
|
|
128
132
|
{EXPIRY_OPTIONS.map(({ value, label }) => (
|
|
129
133
|
<ExpiryRadio
|
|
130
134
|
key={value}
|
|
135
|
+
name={`${baseId}-expiry`}
|
|
131
136
|
value={value}
|
|
132
137
|
label={label}
|
|
133
138
|
checked={expiry === value}
|
|
@@ -155,7 +160,7 @@ export function CreateApiKeyForm({
|
|
|
155
160
|
"stg:disabled:pointer-events-none stg:disabled:opacity-40",
|
|
156
161
|
)}
|
|
157
162
|
>
|
|
158
|
-
{isCreating && <SpinnerIcon />}
|
|
163
|
+
{isCreating && <SpinnerIcon size={12} />}
|
|
159
164
|
Create API key
|
|
160
165
|
</button>
|
|
161
166
|
|
|
@@ -200,12 +205,14 @@ function daysFromNow(days: number): Date {
|
|
|
200
205
|
// ---------------------------------------------------------------------------
|
|
201
206
|
|
|
202
207
|
function ExpiryRadio({
|
|
208
|
+
name,
|
|
203
209
|
value,
|
|
204
210
|
label,
|
|
205
211
|
checked,
|
|
206
212
|
disabled,
|
|
207
213
|
onChange,
|
|
208
214
|
}: {
|
|
215
|
+
name: string;
|
|
209
216
|
value: ExpiryOption;
|
|
210
217
|
label: string;
|
|
211
218
|
checked: boolean;
|
|
@@ -224,7 +231,7 @@ function ExpiryRadio({
|
|
|
224
231
|
>
|
|
225
232
|
<input
|
|
226
233
|
type="radio"
|
|
227
|
-
name=
|
|
234
|
+
name={name}
|
|
228
235
|
value={value}
|
|
229
236
|
checked={checked}
|
|
230
237
|
disabled={disabled}
|
|
@@ -236,24 +243,3 @@ function ExpiryRadio({
|
|
|
236
243
|
);
|
|
237
244
|
}
|
|
238
245
|
|
|
239
|
-
// ---------------------------------------------------------------------------
|
|
240
|
-
// Icons
|
|
241
|
-
// ---------------------------------------------------------------------------
|
|
242
|
-
|
|
243
|
-
function SpinnerIcon() {
|
|
244
|
-
return (
|
|
245
|
-
<svg
|
|
246
|
-
width="12"
|
|
247
|
-
height="12"
|
|
248
|
-
viewBox="0 0 16 16"
|
|
249
|
-
fill="none"
|
|
250
|
-
stroke="currentColor"
|
|
251
|
-
strokeWidth="2"
|
|
252
|
-
strokeLinecap="round"
|
|
253
|
-
className="stg:animate-spin"
|
|
254
|
-
aria-hidden="true"
|
|
255
|
-
>
|
|
256
|
-
<path d="M8 2a6 6 0 1 0 6 6" />
|
|
257
|
-
</svg>
|
|
258
|
-
);
|
|
259
|
-
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { createContext, useContext } from "react";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* App-level approval defaults for interactive sessions (#302).
|
|
7
|
+
*
|
|
8
|
+
* These are the *host's* defaults, not the platform's: an embedding product
|
|
9
|
+
* that has judged its whole surface trusted — e.g. a desktop app whose
|
|
10
|
+
* sessions operate on the user's own local folder, where the apply-then-
|
|
11
|
+
* review file ledger is the safety net — can pre-arm what a user would
|
|
12
|
+
* otherwise opt into at the first approval gate. The user always keeps the
|
|
13
|
+
* last word: the session UI shows its "Auto-approving tool calls" notice
|
|
14
|
+
* from the first render, with the same "Turn off" affordance as a
|
|
15
|
+
* gate-armed preference.
|
|
16
|
+
*/
|
|
17
|
+
export interface ApprovalDefaults {
|
|
18
|
+
/**
|
|
19
|
+
* Start interactive sessions with the session-scoped auto-approve
|
|
20
|
+
* preference armed, and create their bootstrap executions with
|
|
21
|
+
* `auto_approve_all` set.
|
|
22
|
+
*
|
|
23
|
+
* Equivalent to the user clicking "Approve & don't ask again" before the
|
|
24
|
+
* first gate, applied as a product decision. Defaults to off — omitting
|
|
25
|
+
* the provider prop keeps today's fail-closed behavior exactly.
|
|
26
|
+
*/
|
|
27
|
+
readonly autoApproveAll?: boolean;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* React context for app-level approval defaults.
|
|
32
|
+
*
|
|
33
|
+
* Separated from the provider to mirror the `ExecutionTargetContext`
|
|
34
|
+
* pattern and avoid circular imports.
|
|
35
|
+
*
|
|
36
|
+
* `undefined` means the host configured nothing — every approval default
|
|
37
|
+
* stays platform-standard (fail-closed gates, opt-in at the gate).
|
|
38
|
+
*/
|
|
39
|
+
export const ApprovalDefaultsContext = createContext<
|
|
40
|
+
ApprovalDefaults | undefined
|
|
41
|
+
>(undefined);
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Read the app-level approval defaults from the nearest `StigmerProvider`.
|
|
45
|
+
*
|
|
46
|
+
* Consumed by the interactive-session surface only: `useNewSessionFlow`
|
|
47
|
+
* (bootstrap execution create) and `useSessionPageFlow` (session-scoped
|
|
48
|
+
* preference initializer). Deliberately NOT consumed by the lower-level
|
|
49
|
+
* `useCreateSession` / `useCreateAgentExecution` primitives — those are
|
|
50
|
+
* shared by specialized flows (workflow architect/explain/diagnose) and by
|
|
51
|
+
* headless callers, which pass `autoApproveAll` explicitly when they mean
|
|
52
|
+
* it.
|
|
53
|
+
*/
|
|
54
|
+
export function useApprovalDefaults(): ApprovalDefaults | undefined {
|
|
55
|
+
return useContext(ApprovalDefaultsContext);
|
|
56
|
+
}
|