@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/src/models/registry.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* the result in the {@link StigmerProvider} context. This eliminates the
|
|
6
6
|
* static JSON file that previously shipped in the npm package.
|
|
7
7
|
*
|
|
8
|
-
* Platform consumers (React SDK,
|
|
8
|
+
* Platform consumers (React SDK, the runner) all fetch from the
|
|
9
9
|
* same endpoint, each with their own local TTL cache.
|
|
10
10
|
*/
|
|
11
11
|
|
|
@@ -100,6 +100,52 @@ export interface ModelInfo {
|
|
|
100
100
|
* not a selectable option.
|
|
101
101
|
*/
|
|
102
102
|
readonly serviceTiers: readonly string[];
|
|
103
|
+
/**
|
|
104
|
+
* Tri-state vision capability from the registry's `capabilities` block
|
|
105
|
+
* (stigmer/stigmer#386). The registry serializes `capabilities` only for
|
|
106
|
+
* models whose capabilities were actually assessed, so:
|
|
107
|
+
*
|
|
108
|
+
* - `true` — images sent with a turn reach the model
|
|
109
|
+
* - `false` — explicitly assessed as blind; warn at selection/send time
|
|
110
|
+
* - `undefined` — never assessed; **stay silent, never treat as false**
|
|
111
|
+
*
|
|
112
|
+
* Mirrors the runner's `parseVisionCapability` convention
|
|
113
|
+
* (backend/services/runner/src/shared/model-registry.ts) — both sides
|
|
114
|
+
* parse the same document and must agree on what absence means.
|
|
115
|
+
*/
|
|
116
|
+
readonly visionCapability?: boolean;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Document-level vision byte budget advertised by the registry
|
|
121
|
+
* (stigmer/stigmer#365) — the runner's inline-image delivery caps, exposed
|
|
122
|
+
* so clients can warn *before* an upload the runner would degrade to
|
|
123
|
+
* "not viewable inline". Field names match the runner's `VisionBudget`
|
|
124
|
+
* options verbatim (backend/services/runner/src/shared/attachment-vision.ts).
|
|
125
|
+
*
|
|
126
|
+
* ADVERTISED == ENFORCED: the serving side (cloud
|
|
127
|
+
* `ModelRegistryDocumentCodec`) and the runner pin the same literal values
|
|
128
|
+
* in their test suites. Treat an absent block as unassessed — no warnings —
|
|
129
|
+
* exactly like the per-model `capabilities` tri-state.
|
|
130
|
+
*/
|
|
131
|
+
export interface VisionLimits {
|
|
132
|
+
/** Per-image raw byte cap for inline vision delivery. */
|
|
133
|
+
readonly maxImageBytes: number;
|
|
134
|
+
/** Per-turn total byte cap across all inline images. */
|
|
135
|
+
readonly maxTotalBytes: number;
|
|
136
|
+
/** Per-turn inline image count cap. */
|
|
137
|
+
readonly maxImages: number;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Parsed model-registry document: the per-model list plus document-level
|
|
142
|
+
* platform metadata. `visionLimits` is `undefined` when the served document
|
|
143
|
+
* predates the `limits` block (older servers) — consumers must stay silent
|
|
144
|
+
* rather than assume a budget.
|
|
145
|
+
*/
|
|
146
|
+
export interface ModelRegistryDocument {
|
|
147
|
+
readonly models: readonly ModelInfo[];
|
|
148
|
+
readonly visionLimits?: VisionLimits;
|
|
103
149
|
}
|
|
104
150
|
|
|
105
151
|
/**
|
|
@@ -166,9 +212,46 @@ interface RegistryJsonEntry {
|
|
|
166
212
|
};
|
|
167
213
|
/** Variant-key → variant pricing block; only the key set matters here. */
|
|
168
214
|
pricingVariants?: Record<string, unknown>;
|
|
215
|
+
/** Capability flags; present only for capability-assessed models. */
|
|
216
|
+
capabilities?: unknown;
|
|
169
217
|
$comment?: string;
|
|
170
218
|
}
|
|
171
219
|
|
|
220
|
+
/**
|
|
221
|
+
* Extract `capabilities.vision` preserving the tri-state: a missing or
|
|
222
|
+
* malformed `capabilities` block stays `undefined` (never coerced to
|
|
223
|
+
* false). Byte-for-byte the runner's convention — see
|
|
224
|
+
* `parseVisionCapability` in the runner's `shared/model-registry.ts`.
|
|
225
|
+
*/
|
|
226
|
+
function parseVisionCapability(capabilities: unknown): boolean | undefined {
|
|
227
|
+
if (!capabilities || typeof capabilities !== "object") return undefined;
|
|
228
|
+
const vision = (capabilities as Record<string, unknown>).vision;
|
|
229
|
+
return typeof vision === "boolean" ? vision : undefined;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
/**
|
|
233
|
+
* Parse the document-level `limits.vision` block. Returns `undefined` for
|
|
234
|
+
* documents that predate the block or carry a malformed one — absence
|
|
235
|
+
* means "unassessed", and a partial block must not masquerade as a budget
|
|
236
|
+
* (warning against a garbled cap is worse than staying silent).
|
|
237
|
+
*/
|
|
238
|
+
function parseVisionLimits(data: Record<string, unknown>): VisionLimits | undefined {
|
|
239
|
+
const limits = data.limits;
|
|
240
|
+
if (!limits || typeof limits !== "object") return undefined;
|
|
241
|
+
const vision = (limits as Record<string, unknown>).vision;
|
|
242
|
+
if (!vision || typeof vision !== "object") return undefined;
|
|
243
|
+
|
|
244
|
+
const { maxImageBytes, maxTotalBytes, maxImages } = vision as Record<string, unknown>;
|
|
245
|
+
if (
|
|
246
|
+
typeof maxImageBytes !== "number" || maxImageBytes <= 0 ||
|
|
247
|
+
typeof maxTotalBytes !== "number" || maxTotalBytes <= 0 ||
|
|
248
|
+
typeof maxImages !== "number" || maxImages <= 0
|
|
249
|
+
) {
|
|
250
|
+
return undefined;
|
|
251
|
+
}
|
|
252
|
+
return { maxImageBytes, maxTotalBytes, maxImages };
|
|
253
|
+
}
|
|
254
|
+
|
|
172
255
|
const VALID_COST_TIERS = new Set(["economy", "standard", "premium"]);
|
|
173
256
|
const VALID_SPEED_TIERS = new Set(["fastest", "fast", "balanced", "slow"]);
|
|
174
257
|
const VALID_HARNESSES = new Set(["native", "cursor", "copilot", "claude_code", "codex", "devin"]);
|
|
@@ -184,49 +267,76 @@ function isModelEntry(entry: RegistryJsonEntry): entry is Required<Pick<Registry
|
|
|
184
267
|
}
|
|
185
268
|
|
|
186
269
|
/**
|
|
187
|
-
* Parse raw registry
|
|
270
|
+
* Parse a raw registry document (from the API or a static file) into the
|
|
271
|
+
* per-model list plus document-level metadata.
|
|
188
272
|
*
|
|
189
|
-
* Expects the shape `{ models: RegistryJsonEntry[] }`.
|
|
190
|
-
* entries and invalid rows
|
|
273
|
+
* Expects the shape `{ models: RegistryJsonEntry[], limits?: {...} }`.
|
|
274
|
+
* Filters out comment entries and invalid rows. Unknown top-level fields
|
|
275
|
+
* are ignored (the document contract is additive).
|
|
191
276
|
*/
|
|
192
|
-
export function
|
|
193
|
-
if (!data || typeof data !== "object") return [];
|
|
194
|
-
const
|
|
195
|
-
|
|
277
|
+
export function parseRegistryDocument(data: unknown): ModelRegistryDocument {
|
|
278
|
+
if (!data || typeof data !== "object") return { models: [] };
|
|
279
|
+
const root = data as Record<string, unknown>;
|
|
280
|
+
const models = root.models;
|
|
281
|
+
if (!Array.isArray(models)) return { models: [] };
|
|
196
282
|
|
|
197
|
-
|
|
283
|
+
const parsed = (models as RegistryJsonEntry[])
|
|
198
284
|
.filter(isModelEntry)
|
|
199
|
-
.map((m) =>
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
285
|
+
.map((m) => {
|
|
286
|
+
const visionCapability = parseVisionCapability(m.capabilities);
|
|
287
|
+
return {
|
|
288
|
+
modelId: m.id,
|
|
289
|
+
provider: m.provider as Provider,
|
|
290
|
+
displayName: m.displayName,
|
|
291
|
+
shortDescription: m.shortDescription ?? "",
|
|
292
|
+
speedTier: (VALID_SPEED_TIERS.has(m.speedTier ?? "") ? m.speedTier : "fast") as SpeedTier,
|
|
293
|
+
costTier: m.costTier as CostTier,
|
|
294
|
+
harness: m.harness as HarnessOption,
|
|
295
|
+
featured: m.featured ?? false,
|
|
296
|
+
serviceTiers:
|
|
297
|
+
m.pricingVariants && typeof m.pricingVariants === "object"
|
|
298
|
+
? Object.keys(m.pricingVariants).sort()
|
|
299
|
+
: [],
|
|
300
|
+
// Conditional spread keeps unassessed models free of the key
|
|
301
|
+
// (tri-state absence, not an explicit undefined).
|
|
302
|
+
...(visionCapability !== undefined ? { visionCapability } : {}),
|
|
303
|
+
};
|
|
304
|
+
});
|
|
305
|
+
|
|
306
|
+
const visionLimits = parseVisionLimits(root);
|
|
307
|
+
return {
|
|
308
|
+
models: parsed,
|
|
309
|
+
...(visionLimits !== undefined ? { visionLimits } : {}),
|
|
310
|
+
};
|
|
213
311
|
}
|
|
214
312
|
|
|
215
313
|
/**
|
|
216
|
-
*
|
|
314
|
+
* Parse raw registry JSON into `ModelInfo[]`.
|
|
315
|
+
*
|
|
316
|
+
* Thin compatibility wrapper over {@link parseRegistryDocument} — prefer
|
|
317
|
+
* the document parser when the caller also needs document-level metadata
|
|
318
|
+
* such as {@link VisionLimits}.
|
|
319
|
+
*/
|
|
320
|
+
export function parseRegistryJson(data: unknown): ModelInfo[] {
|
|
321
|
+
return [...parseRegistryDocument(data).models];
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
/**
|
|
325
|
+
* Fetch the model-registry document from the authenticated API endpoint.
|
|
217
326
|
*
|
|
218
327
|
* @param apiUrl - Base URL of the Stigmer Cloud API (e.g. `https://api.stigmer.ai`)
|
|
219
328
|
* @param token - Bearer token for authentication (from `client.getAuthCredential()`)
|
|
220
329
|
* @param customFetch - Optional custom `fetch` implementation. Required in
|
|
221
330
|
* Tauri where the global `fetch` is restricted by webview CSP/CORS policies.
|
|
222
331
|
* When omitted, the global `fetch` is used.
|
|
223
|
-
* @returns Parsed
|
|
332
|
+
* @returns Parsed {@link ModelRegistryDocument} — models plus document-level
|
|
333
|
+
* metadata like {@link VisionLimits}.
|
|
224
334
|
*/
|
|
225
|
-
export async function
|
|
335
|
+
export async function fetchModelRegistryDocument(
|
|
226
336
|
apiUrl: string,
|
|
227
337
|
token: string | null,
|
|
228
338
|
customFetch?: typeof globalThis.fetch,
|
|
229
|
-
): Promise<
|
|
339
|
+
): Promise<ModelRegistryDocument> {
|
|
230
340
|
const doFetch = customFetch ?? globalThis.fetch;
|
|
231
341
|
const headers: Record<string, string> = {};
|
|
232
342
|
if (token) {
|
|
@@ -235,7 +345,25 @@ export async function fetchModelRegistry(
|
|
|
235
345
|
const res = await doFetch(`${apiUrl}/v1/proxy/model-registry`, { headers });
|
|
236
346
|
if (!res.ok) throw new Error(`Model registry fetch failed: ${res.status}`);
|
|
237
347
|
const data: unknown = await res.json();
|
|
238
|
-
return
|
|
348
|
+
return parseRegistryDocument(data);
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
/**
|
|
352
|
+
* Fetch the model registry from the authenticated API endpoint.
|
|
353
|
+
*
|
|
354
|
+
* Thin compatibility wrapper over {@link fetchModelRegistryDocument} —
|
|
355
|
+
* prefer the document fetch when the caller also needs document-level
|
|
356
|
+
* metadata such as {@link VisionLimits}.
|
|
357
|
+
*
|
|
358
|
+
* @returns Parsed `ModelInfo[]`.
|
|
359
|
+
*/
|
|
360
|
+
export async function fetchModelRegistry(
|
|
361
|
+
apiUrl: string,
|
|
362
|
+
token: string | null,
|
|
363
|
+
customFetch?: typeof globalThis.fetch,
|
|
364
|
+
): Promise<ModelInfo[]> {
|
|
365
|
+
const document = await fetchModelRegistryDocument(apiUrl, token, customFetch);
|
|
366
|
+
return [...document.models];
|
|
239
367
|
}
|
|
240
368
|
|
|
241
369
|
/**
|
|
@@ -274,11 +402,28 @@ export interface DefaultModelResolution {
|
|
|
274
402
|
*
|
|
275
403
|
* Priority (Phase 1 — no backend):
|
|
276
404
|
* 1. localStorage user preference (passed in as `userPreference`)
|
|
277
|
-
* 2.
|
|
405
|
+
* 2. What the platform actually runs when nothing is pinned (see below)
|
|
278
406
|
* 3. Hardcoded platform fallback
|
|
279
407
|
*
|
|
280
408
|
* Future phases will add org-level and agent-level defaults between
|
|
281
409
|
* user preference and harness default.
|
|
410
|
+
*
|
|
411
|
+
* **The harness-default arm is a contract, not a suggestion**
|
|
412
|
+
* (stigmer/stigmer#663): this resolution feeds the composer's model pill,
|
|
413
|
+
* and the submission adopts what the pill displays — so the default MUST
|
|
414
|
+
* be the model the platform would run for an unpinned execution, or the
|
|
415
|
+
* pill promises one model while a different one serves the request.
|
|
416
|
+
* Concretely:
|
|
417
|
+
*
|
|
418
|
+
* - `cursor` — the registry's Auto entry ({@link DEFAULT_CURSOR_MODEL_ID}):
|
|
419
|
+
* the runner coerces an empty `model_name` to `"default"` (Auto), so
|
|
420
|
+
* suggesting Auto and sending it explicitly are byte-identical to the
|
|
421
|
+
* pre-#663 empty send. Auto prices no fast variant, so the fast-tier
|
|
422
|
+
* switch correctly never renders for a fresh composer.
|
|
423
|
+
* - `native` — the runner's own `getDefaultModel()` rule: featured AND
|
|
424
|
+
* standard cost, then any standard-cost model. A first-featured pick
|
|
425
|
+
* with no cost filter (the pre-#663 behavior) could suggest — and now
|
|
426
|
+
* would run — a premium model for users who never opened the picker.
|
|
282
427
|
*/
|
|
283
428
|
export function resolveDefaultModelId(
|
|
284
429
|
harness: HarnessOption,
|
|
@@ -310,6 +455,28 @@ export function resolveDefaultModelId(
|
|
|
310
455
|
if (model) return { modelId: model.modelId, source: "agent_default" };
|
|
311
456
|
}
|
|
312
457
|
|
|
458
|
+
if (harness === "cursor") {
|
|
459
|
+
const auto = models.find(
|
|
460
|
+
(m) => m.harness === harness && m.modelId === DEFAULT_CURSOR_MODEL_ID,
|
|
461
|
+
);
|
|
462
|
+
if (auto) return { modelId: auto.modelId, source: "harness_default" };
|
|
463
|
+
} else {
|
|
464
|
+
// Mirrors the runner's unpinned resolution (featured+standard, then
|
|
465
|
+
// any standard). Deliberately NOT extracted to share with the runner:
|
|
466
|
+
// the runner reads its own registry snapshot on another process.
|
|
467
|
+
const standardDefault =
|
|
468
|
+
models.find(
|
|
469
|
+
(m) => m.harness === harness && m.featured && m.costTier === "standard",
|
|
470
|
+
)
|
|
471
|
+
?? models.find((m) => m.harness === harness && m.costTier === "standard");
|
|
472
|
+
if (standardDefault) {
|
|
473
|
+
return { modelId: standardDefault.modelId, source: "harness_default" };
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
|
|
477
|
+
// Degenerate registries only (no Auto entry / no standard-cost model):
|
|
478
|
+
// fall back to the old first-featured pick before the hardcoded id, so
|
|
479
|
+
// the suggestion at least names a model that exists.
|
|
313
480
|
const featured = models.find(
|
|
314
481
|
(m) => m.harness === harness && m.featured,
|
|
315
482
|
);
|
|
@@ -9,6 +9,7 @@ import {
|
|
|
9
9
|
modelKey,
|
|
10
10
|
type ModelInfo,
|
|
11
11
|
type Provider,
|
|
12
|
+
type VisionLimits,
|
|
12
13
|
} from "./registry.js";
|
|
13
14
|
import type { HarnessOption } from "./harness.js";
|
|
14
15
|
import { useModelRegistryContext } from "./ModelRegistryContext.js";
|
|
@@ -51,6 +52,12 @@ export interface UseModelRegistryReturn {
|
|
|
51
52
|
* Always unambiguous, even in unified mode.
|
|
52
53
|
*/
|
|
53
54
|
readonly getByKey: (key: string) => ModelInfo | undefined;
|
|
55
|
+
/**
|
|
56
|
+
* Document-level vision byte budget advertised by the registry
|
|
57
|
+
* (stigmer/stigmer#365). `undefined` while loading or when the server
|
|
58
|
+
* predates the `limits` block — treat as unassessed and stay silent.
|
|
59
|
+
*/
|
|
60
|
+
readonly visionLimits: VisionLimits | undefined;
|
|
54
61
|
/** `true` while the model registry is being fetched from the API. */
|
|
55
62
|
readonly isLoading: boolean;
|
|
56
63
|
/** Non-null if the API fetch failed. Models will be empty in this case. */
|
|
@@ -87,7 +94,7 @@ export interface UseModelRegistryReturn {
|
|
|
87
94
|
*/
|
|
88
95
|
export function useModelRegistry(options?: UseModelRegistryOptions): UseModelRegistryReturn {
|
|
89
96
|
const harness = options?.harness;
|
|
90
|
-
const { models: allModels, isLoading, error, refetch } = useModelRegistryContext();
|
|
97
|
+
const { models: allModels, visionLimits, isLoading, error, refetch } = useModelRegistryContext();
|
|
91
98
|
|
|
92
99
|
return useMemo(() => {
|
|
93
100
|
const isUnified = harness === undefined;
|
|
@@ -143,9 +150,10 @@ export function useModelRegistry(options?: UseModelRegistryOptions): UseModelReg
|
|
|
143
150
|
providers,
|
|
144
151
|
featured: featuredModels,
|
|
145
152
|
getByKey: (key: string) => byCompoundKey.get(key),
|
|
153
|
+
visionLimits,
|
|
146
154
|
isLoading,
|
|
147
155
|
error,
|
|
148
156
|
refetch,
|
|
149
157
|
};
|
|
150
|
-
}, [harness, allModels, isLoading, error, refetch]);
|
|
158
|
+
}, [harness, allModels, visionLimits, isLoading, error, refetch]);
|
|
151
159
|
}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
-
import { useCallback,
|
|
3
|
+
import { type FormEvent, useCallback, useId, useState } from "react";
|
|
4
4
|
import { cn } from "@stigmer/theme";
|
|
5
5
|
import { getUserMessage } from "@stigmer/sdk";
|
|
6
6
|
import type { OAuthApp } from "@stigmer/protos/ai/stigmer/iam/oauthapp/v1/api_pb";
|
|
7
7
|
import { VendorApprovalStatus } from "@stigmer/protos/ai/stigmer/iam/oauthapp/v1/spec_pb";
|
|
8
8
|
import { useCreateOAuthApp } from "./useCreateOAuthApp.js";
|
|
9
|
+
import { SpinnerIcon } from "../internal/SpinnerIcon.js";
|
|
9
10
|
|
|
10
11
|
// ---------------------------------------------------------------------------
|
|
11
12
|
// Public API
|
|
@@ -56,6 +57,7 @@ export function CreateOAuthAppForm({
|
|
|
56
57
|
onCancel,
|
|
57
58
|
className,
|
|
58
59
|
}: CreateOAuthAppFormProps) {
|
|
60
|
+
const baseId = useId();
|
|
59
61
|
const { create, isCreating, error, clearError } = useCreateOAuthApp();
|
|
60
62
|
|
|
61
63
|
const [name, setName] = useState("");
|
|
@@ -151,7 +153,7 @@ export function CreateOAuthAppForm({
|
|
|
151
153
|
<form onSubmit={handleSubmit} className={cn("stg:space-y-3", className)}>
|
|
152
154
|
<div className="stg:space-y-3">
|
|
153
155
|
<FormField
|
|
154
|
-
id=
|
|
156
|
+
id={`${baseId}-name`}
|
|
155
157
|
label="Name"
|
|
156
158
|
value={name}
|
|
157
159
|
onChange={setName}
|
|
@@ -161,7 +163,7 @@ export function CreateOAuthAppForm({
|
|
|
161
163
|
/>
|
|
162
164
|
|
|
163
165
|
<FormField
|
|
164
|
-
id=
|
|
166
|
+
id={`${baseId}-provider`}
|
|
165
167
|
label="Provider"
|
|
166
168
|
value={provider}
|
|
167
169
|
onChange={setProvider}
|
|
@@ -172,7 +174,7 @@ export function CreateOAuthAppForm({
|
|
|
172
174
|
/>
|
|
173
175
|
|
|
174
176
|
<FormField
|
|
175
|
-
id=
|
|
177
|
+
id={`${baseId}-client-id`}
|
|
176
178
|
label="Client ID"
|
|
177
179
|
value={clientId}
|
|
178
180
|
onChange={setClientId}
|
|
@@ -182,7 +184,7 @@ export function CreateOAuthAppForm({
|
|
|
182
184
|
/>
|
|
183
185
|
|
|
184
186
|
<FormField
|
|
185
|
-
id=
|
|
187
|
+
id={`${baseId}-client-secret`}
|
|
186
188
|
label="Client secret"
|
|
187
189
|
value={clientSecret}
|
|
188
190
|
onChange={setClientSecret}
|
|
@@ -193,7 +195,7 @@ export function CreateOAuthAppForm({
|
|
|
193
195
|
/>
|
|
194
196
|
|
|
195
197
|
<FormField
|
|
196
|
-
id=
|
|
198
|
+
id={`${baseId}-auth-url`}
|
|
197
199
|
label="Authorization URL"
|
|
198
200
|
value={authorizationUrl}
|
|
199
201
|
onChange={setAuthorizationUrl}
|
|
@@ -204,7 +206,7 @@ export function CreateOAuthAppForm({
|
|
|
204
206
|
/>
|
|
205
207
|
|
|
206
208
|
<FormField
|
|
207
|
-
id=
|
|
209
|
+
id={`${baseId}-token-url`}
|
|
208
210
|
label="Token URL"
|
|
209
211
|
value={tokenUrl}
|
|
210
212
|
onChange={setTokenUrl}
|
|
@@ -228,7 +230,7 @@ export function CreateOAuthAppForm({
|
|
|
228
230
|
{showAdvanced && (
|
|
229
231
|
<div className="stg:mt-2 stg:space-y-3 stg:border-l-2 stg:border-border-muted stg:pl-3">
|
|
230
232
|
<FormField
|
|
231
|
-
id=
|
|
233
|
+
id={`${baseId}-scopes`}
|
|
232
234
|
label="Scopes"
|
|
233
235
|
value={scopes}
|
|
234
236
|
onChange={setScopes}
|
|
@@ -238,7 +240,7 @@ export function CreateOAuthAppForm({
|
|
|
238
240
|
/>
|
|
239
241
|
|
|
240
242
|
<FormField
|
|
241
|
-
id=
|
|
243
|
+
id={`${baseId}-userinfo-url`}
|
|
242
244
|
label="Userinfo URL"
|
|
243
245
|
value={userinfoUrl}
|
|
244
246
|
onChange={setUserinfoUrl}
|
|
@@ -248,7 +250,7 @@ export function CreateOAuthAppForm({
|
|
|
248
250
|
/>
|
|
249
251
|
|
|
250
252
|
<FormField
|
|
251
|
-
id=
|
|
253
|
+
id={`${baseId}-scope-param`}
|
|
252
254
|
label="Scope parameter name"
|
|
253
255
|
value={scopeParameterName}
|
|
254
256
|
onChange={setScopeParameterName}
|
|
@@ -259,13 +261,13 @@ export function CreateOAuthAppForm({
|
|
|
259
261
|
|
|
260
262
|
<div className="stg:space-y-1">
|
|
261
263
|
<label
|
|
262
|
-
htmlFor=
|
|
264
|
+
htmlFor={`${baseId}-approval-status`}
|
|
263
265
|
className="stg:text-xs stg:font-medium stg:text-foreground"
|
|
264
266
|
>
|
|
265
267
|
Vendor approval status
|
|
266
268
|
</label>
|
|
267
269
|
<select
|
|
268
|
-
id=
|
|
270
|
+
id={`${baseId}-approval-status`}
|
|
269
271
|
value={vendorApprovalStatus}
|
|
270
272
|
onChange={(e) =>
|
|
271
273
|
setVendorApprovalStatus(
|
|
@@ -290,7 +292,7 @@ export function CreateOAuthAppForm({
|
|
|
290
292
|
</div>
|
|
291
293
|
|
|
292
294
|
<FormField
|
|
293
|
-
id=
|
|
295
|
+
id={`${baseId}-approval-docs`}
|
|
294
296
|
label="Vendor approval docs URL"
|
|
295
297
|
value={vendorApprovalDocsUrl}
|
|
296
298
|
onChange={setVendorApprovalDocsUrl}
|
|
@@ -319,7 +321,7 @@ export function CreateOAuthAppForm({
|
|
|
319
321
|
"stg:disabled:pointer-events-none stg:disabled:opacity-40",
|
|
320
322
|
)}
|
|
321
323
|
>
|
|
322
|
-
{isCreating && <SpinnerIcon />}
|
|
324
|
+
{isCreating && <SpinnerIcon size={12} />}
|
|
323
325
|
Create OAuth app
|
|
324
326
|
</button>
|
|
325
327
|
|
|
@@ -430,20 +432,3 @@ function ChevronIcon({ expanded }: { expanded: boolean }) {
|
|
|
430
432
|
);
|
|
431
433
|
}
|
|
432
434
|
|
|
433
|
-
function SpinnerIcon() {
|
|
434
|
-
return (
|
|
435
|
-
<svg
|
|
436
|
-
width="12"
|
|
437
|
-
height="12"
|
|
438
|
-
viewBox="0 0 16 16"
|
|
439
|
-
fill="none"
|
|
440
|
-
stroke="currentColor"
|
|
441
|
-
strokeWidth="2"
|
|
442
|
-
strokeLinecap="round"
|
|
443
|
-
className="stg:animate-spin"
|
|
444
|
-
aria-hidden="true"
|
|
445
|
-
>
|
|
446
|
-
<path d="M8 2a6 6 0 1 0 6 6" />
|
|
447
|
-
</svg>
|
|
448
|
-
);
|
|
449
|
-
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
-
import { useCallback,
|
|
3
|
+
import { type FormEvent, useCallback, useId, useState } from "react";
|
|
4
4
|
import { cn } from "@stigmer/theme";
|
|
5
5
|
import { getUserMessage } from "@stigmer/sdk";
|
|
6
6
|
import type { OAuthApp } from "@stigmer/protos/ai/stigmer/iam/oauthapp/v1/api_pb";
|
|
@@ -8,6 +8,7 @@ import { VendorApprovalStatus } from "@stigmer/protos/ai/stigmer/iam/oauthapp/v1
|
|
|
8
8
|
import { timestampDate, type Timestamp } from "@bufbuild/protobuf/wkt";
|
|
9
9
|
import { useUpdateOAuthApp } from "./useUpdateOAuthApp.js";
|
|
10
10
|
import { useDeleteOAuthApp } from "./useDeleteOAuthApp.js";
|
|
11
|
+
import { SpinnerIcon } from "../internal/SpinnerIcon.js";
|
|
11
12
|
|
|
12
13
|
// ---------------------------------------------------------------------------
|
|
13
14
|
// Public API
|
|
@@ -61,6 +62,7 @@ export function OAuthAppDetailPanel({
|
|
|
61
62
|
onBack,
|
|
62
63
|
className,
|
|
63
64
|
}: OAuthAppDetailPanelProps) {
|
|
65
|
+
const baseId = useId();
|
|
64
66
|
const spec = oauthApp.spec;
|
|
65
67
|
const meta = oauthApp.metadata;
|
|
66
68
|
|
|
@@ -265,7 +267,7 @@ export function OAuthAppDetailPanel({
|
|
|
265
267
|
"stg:disabled:pointer-events-none stg:disabled:opacity-40",
|
|
266
268
|
)}
|
|
267
269
|
>
|
|
268
|
-
{isDeleting && <SpinnerIcon />}
|
|
270
|
+
{isDeleting && <SpinnerIcon size={12} />}
|
|
269
271
|
Delete permanently
|
|
270
272
|
</button>
|
|
271
273
|
<button
|
|
@@ -297,7 +299,7 @@ export function OAuthAppDetailPanel({
|
|
|
297
299
|
) : (
|
|
298
300
|
<form onSubmit={handleSave} className="stg:space-y-3">
|
|
299
301
|
<FieldInput
|
|
300
|
-
id=
|
|
302
|
+
id={`${baseId}-provider`}
|
|
301
303
|
label="Provider"
|
|
302
304
|
value={provider}
|
|
303
305
|
onChange={setProvider}
|
|
@@ -306,7 +308,7 @@ export function OAuthAppDetailPanel({
|
|
|
306
308
|
required
|
|
307
309
|
/>
|
|
308
310
|
<FieldInput
|
|
309
|
-
id=
|
|
311
|
+
id={`${baseId}-client-id`}
|
|
310
312
|
label="Client ID"
|
|
311
313
|
value={clientId}
|
|
312
314
|
onChange={setClientId}
|
|
@@ -315,7 +317,7 @@ export function OAuthAppDetailPanel({
|
|
|
315
317
|
required
|
|
316
318
|
/>
|
|
317
319
|
<FieldInput
|
|
318
|
-
id=
|
|
320
|
+
id={`${baseId}-client-secret`}
|
|
319
321
|
label="Client secret"
|
|
320
322
|
value={clientSecret}
|
|
321
323
|
onChange={setClientSecret}
|
|
@@ -325,7 +327,7 @@ export function OAuthAppDetailPanel({
|
|
|
325
327
|
disabled={isUpdating}
|
|
326
328
|
/>
|
|
327
329
|
<FieldInput
|
|
328
|
-
id=
|
|
330
|
+
id={`${baseId}-auth-url`}
|
|
329
331
|
label="Authorization URL"
|
|
330
332
|
value={authorizationUrl}
|
|
331
333
|
onChange={setAuthorizationUrl}
|
|
@@ -334,7 +336,7 @@ export function OAuthAppDetailPanel({
|
|
|
334
336
|
required
|
|
335
337
|
/>
|
|
336
338
|
<FieldInput
|
|
337
|
-
id=
|
|
339
|
+
id={`${baseId}-token-url`}
|
|
338
340
|
label="Token URL"
|
|
339
341
|
value={tokenUrl}
|
|
340
342
|
onChange={setTokenUrl}
|
|
@@ -343,7 +345,7 @@ export function OAuthAppDetailPanel({
|
|
|
343
345
|
required
|
|
344
346
|
/>
|
|
345
347
|
<FieldInput
|
|
346
|
-
id=
|
|
348
|
+
id={`${baseId}-scopes`}
|
|
347
349
|
label="Scopes"
|
|
348
350
|
value={scopes}
|
|
349
351
|
onChange={setScopes}
|
|
@@ -352,7 +354,7 @@ export function OAuthAppDetailPanel({
|
|
|
352
354
|
disabled={isUpdating}
|
|
353
355
|
/>
|
|
354
356
|
<FieldInput
|
|
355
|
-
id=
|
|
357
|
+
id={`${baseId}-userinfo-url`}
|
|
356
358
|
label="Userinfo URL"
|
|
357
359
|
value={userinfoUrl}
|
|
358
360
|
onChange={setUserinfoUrl}
|
|
@@ -361,7 +363,7 @@ export function OAuthAppDetailPanel({
|
|
|
361
363
|
disabled={isUpdating}
|
|
362
364
|
/>
|
|
363
365
|
<FieldInput
|
|
364
|
-
id=
|
|
366
|
+
id={`${baseId}-scope-param`}
|
|
365
367
|
label="Scope parameter name"
|
|
366
368
|
value={scopeParameterName}
|
|
367
369
|
onChange={setScopeParameterName}
|
|
@@ -372,13 +374,13 @@ export function OAuthAppDetailPanel({
|
|
|
372
374
|
|
|
373
375
|
<div className="stg:space-y-1">
|
|
374
376
|
<label
|
|
375
|
-
htmlFor=
|
|
377
|
+
htmlFor={`${baseId}-approval-status`}
|
|
376
378
|
className="stg:text-xs stg:font-medium stg:text-foreground"
|
|
377
379
|
>
|
|
378
380
|
Vendor approval status
|
|
379
381
|
</label>
|
|
380
382
|
<select
|
|
381
|
-
id=
|
|
383
|
+
id={`${baseId}-approval-status`}
|
|
382
384
|
value={vendorApprovalStatus}
|
|
383
385
|
onChange={(e) =>
|
|
384
386
|
setVendorApprovalStatus(
|
|
@@ -400,7 +402,7 @@ export function OAuthAppDetailPanel({
|
|
|
400
402
|
</div>
|
|
401
403
|
|
|
402
404
|
<FieldInput
|
|
403
|
-
id=
|
|
405
|
+
id={`${baseId}-approval-docs`}
|
|
404
406
|
label="Vendor approval docs URL"
|
|
405
407
|
value={vendorApprovalDocsUrl}
|
|
406
408
|
onChange={setVendorApprovalDocsUrl}
|
|
@@ -425,7 +427,7 @@ export function OAuthAppDetailPanel({
|
|
|
425
427
|
"stg:disabled:pointer-events-none stg:disabled:opacity-40",
|
|
426
428
|
)}
|
|
427
429
|
>
|
|
428
|
-
{isUpdating && <SpinnerIcon />}
|
|
430
|
+
{isUpdating && <SpinnerIcon size={12} />}
|
|
429
431
|
Save changes
|
|
430
432
|
</button>
|
|
431
433
|
<button
|
|
@@ -652,20 +654,3 @@ function ArrowLeftIcon() {
|
|
|
652
654
|
);
|
|
653
655
|
}
|
|
654
656
|
|
|
655
|
-
function SpinnerIcon() {
|
|
656
|
-
return (
|
|
657
|
-
<svg
|
|
658
|
-
width="12"
|
|
659
|
-
height="12"
|
|
660
|
-
viewBox="0 0 16 16"
|
|
661
|
-
fill="none"
|
|
662
|
-
stroke="currentColor"
|
|
663
|
-
strokeWidth="2"
|
|
664
|
-
strokeLinecap="round"
|
|
665
|
-
className="stg:animate-spin"
|
|
666
|
-
aria-hidden="true"
|
|
667
|
-
>
|
|
668
|
-
<path d="M8 2a6 6 0 1 0 6 6" />
|
|
669
|
-
</svg>
|
|
670
|
-
);
|
|
671
|
-
}
|