@stigmer/react 3.40.1 → 3.41.1-dev.20261003094357.g39d6aa748646
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/README.md +2 -1
- package/access/ManageAccessButton.d.ts +1 -1
- package/access/ManageAccessButton.js +1 -1
- package/access/ManageAccessDialog.d.ts +1 -1
- package/access/ManageAccessDialog.js +2 -2
- package/access/ManageAccessDialog.js.map +1 -1
- package/access/types.d.ts +1 -1
- package/agent/AgentDetailView.d.ts.map +1 -1
- package/agent/AgentDetailView.js +2 -1
- package/agent/AgentDetailView.js.map +1 -1
- package/api-key/ApiKeyListPanel.d.ts.map +1 -1
- package/api-key/ApiKeyListPanel.js +2 -1
- package/api-key/ApiKeyListPanel.js.map +1 -1
- package/attachment/AttachmentImageLightbox.d.ts.map +1 -1
- package/attachment/AttachmentImageLightbox.js.map +1 -1
- package/billing/AutoRechargeCard.d.ts +3 -3
- package/billing/AutoRechargeCard.d.ts.map +1 -1
- package/billing/AutoRechargeCard.js +4 -4
- package/billing/AutoRechargeCard.js.map +1 -1
- package/billing/BillingSection.d.ts.map +1 -1
- package/billing/BillingSection.js +7 -6
- package/billing/BillingSection.js.map +1 -1
- package/billing/ChangePlanDialog.d.ts.map +1 -1
- package/billing/ChangePlanDialog.js +13 -1
- package/billing/ChangePlanDialog.js.map +1 -1
- package/billing/CreditLedgerTable.d.ts +3 -3
- package/billing/CreditLedgerTable.d.ts.map +1 -1
- package/billing/CreditLedgerTable.js +3 -3
- package/billing/CreditLedgerTable.js.map +1 -1
- package/billing/CreditPackGrid.d.ts +1 -1
- package/billing/CreditPackGrid.js +1 -1
- package/billing/PaymentMethodCard.d.ts +1 -1
- package/billing/PaymentMethodCard.js +1 -1
- package/billing/PlanSection.d.ts +3 -3
- package/billing/PlanSection.d.ts.map +1 -1
- package/billing/PlanSection.js +4 -3
- package/billing/PlanSection.js.map +1 -1
- package/billing/ProviderKeysSection.d.ts +33 -0
- package/billing/ProviderKeysSection.d.ts.map +1 -0
- package/billing/ProviderKeysSection.js +143 -0
- package/billing/ProviderKeysSection.js.map +1 -0
- package/billing/UpgradeNotice.d.ts.map +1 -1
- package/billing/UpgradeNotice.js +1 -0
- package/billing/UpgradeNotice.js.map +1 -1
- package/billing/index.d.ts +4 -0
- package/billing/index.d.ts.map +1 -1
- package/billing/index.js +2 -0
- package/billing/index.js.map +1 -1
- package/billing/plan-features.d.ts +3 -2
- package/billing/plan-features.d.ts.map +1 -1
- package/billing/plan-features.js +5 -4
- package/billing/plan-features.js.map +1 -1
- package/billing/useBillingAccount.d.ts +4 -4
- package/billing/useBillingAccount.d.ts.map +1 -1
- package/billing/useBillingAccount.js +7 -7
- package/billing/useBillingAccount.js.map +1 -1
- package/billing/useBillingUsageReport.d.ts +4 -4
- package/billing/useBillingUsageReport.d.ts.map +1 -1
- package/billing/useBillingUsageReport.js +7 -7
- package/billing/useBillingUsageReport.js.map +1 -1
- package/billing/useChangePlan.d.ts +2 -2
- package/billing/useChangePlan.d.ts.map +1 -1
- package/billing/useChangePlan.js +4 -4
- package/billing/useChangePlan.js.map +1 -1
- package/billing/useCreateBillingPortalSession.d.ts +2 -2
- package/billing/useCreateBillingPortalSession.d.ts.map +1 -1
- package/billing/useCreateBillingPortalSession.js +3 -3
- package/billing/useCreateBillingPortalSession.js.map +1 -1
- package/billing/useCreateCheckoutSession.d.ts +2 -2
- package/billing/useCreateCheckoutSession.d.ts.map +1 -1
- package/billing/useCreateCheckoutSession.js +2 -2
- package/billing/useCreateCheckoutSession.js.map +1 -1
- package/billing/useCreatePaymentMethodSetupSession.d.ts +1 -1
- package/billing/useCreatePaymentMethodSetupSession.d.ts.map +1 -1
- package/billing/useCreatePaymentMethodSetupSession.js +2 -2
- package/billing/useCreatePaymentMethodSetupSession.js.map +1 -1
- package/billing/useCreditLedger.d.ts +4 -4
- package/billing/useCreditLedger.d.ts.map +1 -1
- package/billing/useCreditLedger.js +7 -7
- package/billing/useCreditLedger.js.map +1 -1
- package/billing/useCustomerModelPricing.d.ts +4 -4
- package/billing/useCustomerModelPricing.d.ts.map +1 -1
- package/billing/useCustomerModelPricing.js +6 -6
- package/billing/useCustomerModelPricing.js.map +1 -1
- package/billing/useEntitlements.d.ts +2 -2
- package/billing/useEntitlements.d.ts.map +1 -1
- package/billing/useEntitlements.js +4 -4
- package/billing/useEntitlements.js.map +1 -1
- package/billing/usePeriodEstimate.d.ts +1 -1
- package/billing/usePeriodEstimate.d.ts.map +1 -1
- package/billing/usePeriodEstimate.js +3 -3
- package/billing/usePeriodEstimate.js.map +1 -1
- package/billing/useProviderKeys.d.ts +67 -0
- package/billing/useProviderKeys.d.ts.map +1 -0
- package/billing/useProviderKeys.js +61 -0
- package/billing/useProviderKeys.js.map +1 -0
- package/billing/useSetAutoRechargeConfig.d.ts +2 -2
- package/billing/useSetAutoRechargeConfig.d.ts.map +1 -1
- package/billing/useSetAutoRechargeConfig.js +2 -2
- package/billing/useSetAutoRechargeConfig.js.map +1 -1
- package/billing/useSubscription.d.ts +3 -3
- package/billing/useSubscription.d.ts.map +1 -1
- package/billing/useSubscription.js +7 -7
- package/billing/useSubscription.js.map +1 -1
- package/channel/AgentChannelsPanel.d.ts.map +1 -1
- package/channel/AgentChannelsPanel.js +11 -9
- package/channel/AgentChannelsPanel.js.map +1 -1
- package/channel/connect/ServingAppSection.js +1 -1
- package/channel/connect/ServingAppSection.js.map +1 -1
- package/channel-app/ChannelAppDetailPanel.d.ts +2 -2
- package/channel-app/ChannelAppDetailPanel.js +17 -10
- package/channel-app/ChannelAppDetailPanel.js.map +1 -1
- package/channel-app/ChannelAppListPanel.d.ts +2 -2
- package/channel-app/ChannelAppListPanel.d.ts.map +1 -1
- package/channel-app/ChannelAppListPanel.js +2 -1
- package/channel-app/ChannelAppListPanel.js.map +1 -1
- package/channel-app/CreateChannelAppForm.js +1 -1
- package/channel-app/CreateChannelAppForm.js.map +1 -1
- package/channel-app/copy.d.ts +3 -3
- package/channel-app/copy.js +3 -3
- package/channel-app/internal.d.ts +9 -0
- package/channel-app/internal.d.ts.map +1 -1
- package/channel-app/internal.js +9 -0
- package/channel-app/internal.js.map +1 -1
- package/channel-app/slackAppSetup.d.ts +3 -24
- package/channel-app/slackAppSetup.d.ts.map +1 -1
- package/channel-app/slackAppSetup.js +6 -3
- package/channel-app/slackAppSetup.js.map +1 -1
- package/channel-app/whatsappAppSetup.d.ts +3 -27
- package/channel-app/whatsappAppSetup.d.ts.map +1 -1
- package/channel-app/whatsappAppSetup.js +5 -2
- package/channel-app/whatsappAppSetup.js.map +1 -1
- package/composer/SessionComposer.d.ts.map +1 -1
- package/composer/SessionComposer.js +5 -9
- package/composer/SessionComposer.js.map +1 -1
- package/cursor-accounts/CursorAccountEditor.js +3 -3
- package/cursor-accounts/CursorAccountEditor.js.map +1 -1
- package/cursor-accounts/CursorAccountsConsole.js +3 -3
- package/cursor-accounts/CursorAccountsConsole.js.map +1 -1
- package/dashboard/OperationalDashboard.d.ts +1 -4
- package/dashboard/OperationalDashboard.d.ts.map +1 -1
- package/dashboard/OperationalDashboard.js +1 -3
- package/dashboard/OperationalDashboard.js.map +1 -1
- package/dashboard/useDashboardSummary.d.ts +1 -3
- package/dashboard/useDashboardSummary.d.ts.map +1 -1
- package/dashboard/useDashboardSummary.js +1 -1
- package/dashboard/useDashboardSummary.js.map +1 -1
- package/environment/EnvironmentListPanel.d.ts.map +1 -1
- package/environment/EnvironmentListPanel.js +2 -1
- package/environment/EnvironmentListPanel.js.map +1 -1
- package/environment/EnvironmentVariableEditor.d.ts.map +1 -1
- package/environment/EnvironmentVariableEditor.js +3 -2
- package/environment/EnvironmentVariableEditor.js.map +1 -1
- package/environment/index.d.ts +1 -1
- package/environment/index.d.ts.map +1 -1
- package/environment/index.js +1 -1
- package/environment/index.js.map +1 -1
- package/environment/systemEnvVars.d.ts +4 -63
- package/environment/systemEnvVars.d.ts.map +1 -1
- package/environment/systemEnvVars.js +21 -113
- package/environment/systemEnvVars.js.map +1 -1
- package/execution/ArtifactFileContent.d.ts.map +1 -1
- package/execution/ArtifactFileContent.js +2 -1
- package/execution/ArtifactFileContent.js.map +1 -1
- package/execution/McpToolDetail.d.ts.map +1 -1
- package/execution/McpToolDetail.js +2 -1
- package/execution/McpToolDetail.js.map +1 -1
- package/execution/RecalledMemoriesCard.js +1 -1
- package/execution/ResultView.d.ts.map +1 -1
- package/execution/ResultView.js +2 -1
- package/execution/ResultView.js.map +1 -1
- package/execution/TerminalSession.js +1 -1
- package/execution/TerminalSession.js.map +1 -1
- package/execution/ThreadSkeleton.d.ts.map +1 -1
- package/execution/ThreadSkeleton.js +2 -1
- package/execution/ThreadSkeleton.js.map +1 -1
- package/execution/file-path-resolver.d.ts.map +1 -1
- package/execution/file-path-resolver.js +3 -2
- package/execution/file-path-resolver.js.map +1 -1
- package/execution/sandbox-path-normalizer.d.ts +0 -11
- package/execution/sandbox-path-normalizer.d.ts.map +1 -1
- package/execution/sandbox-path-normalizer.js +2 -1
- package/execution/sandbox-path-normalizer.js.map +1 -1
- package/github/parseGitUrl.d.ts.map +1 -1
- package/github/parseGitUrl.js +16 -4
- package/github/parseGitUrl.js.map +1 -1
- package/iam-policy/GrantAccessForm.d.ts +3 -3
- package/iam-policy/GrantAccessForm.d.ts.map +1 -1
- package/iam-policy/GrantAccessForm.js +3 -3
- package/iam-policy/GrantAccessForm.js.map +1 -1
- package/iam-policy/OrgMembersPanel.d.ts +3 -3
- package/iam-policy/OrgMembersPanel.d.ts.map +1 -1
- package/iam-policy/OrgMembersPanel.js +5 -4
- package/iam-policy/OrgMembersPanel.js.map +1 -1
- package/iam-policy/PeopleWithAccess.d.ts +2 -2
- package/iam-policy/PeopleWithAccess.d.ts.map +1 -1
- package/iam-policy/PeopleWithAccess.js +2 -2
- package/iam-policy/PeopleWithAccess.js.map +1 -1
- package/iam-policy/PrincipalPicker.d.ts +2 -2
- package/iam-policy/PrincipalPicker.d.ts.map +1 -1
- package/iam-policy/PrincipalPicker.js +2 -2
- package/iam-policy/PrincipalPicker.js.map +1 -1
- package/iam-policy/SharePanel.d.ts +3 -3
- package/iam-policy/SharePanel.d.ts.map +1 -1
- package/iam-policy/SharePanel.js +3 -3
- package/iam-policy/SharePanel.js.map +1 -1
- package/iam-policy/useCheckPermission.d.ts +4 -1
- package/iam-policy/useCheckPermission.d.ts.map +1 -1
- package/iam-policy/useCheckPermission.js +4 -1
- package/iam-policy/useCheckPermission.js.map +1 -1
- package/iam-policy/useCreateIamPolicy.d.ts +1 -1
- package/iam-policy/useCreateIamPolicy.js +1 -1
- package/iam-policy/useDeleteIamPolicy.d.ts +1 -1
- package/iam-policy/useDeleteIamPolicy.js +1 -1
- package/iam-policy/useGrantableRoles.d.ts +1 -1
- package/iam-policy/useGrantableRoles.js +1 -1
- package/iam-policy/useGranteeCandidates.d.ts +3 -3
- package/iam-policy/useGranteeCandidates.d.ts.map +1 -1
- package/iam-policy/useGranteeCandidates.js +2 -2
- package/iam-policy/useGranteeCandidates.js.map +1 -1
- package/iam-policy/useOwnerAssignment.d.ts +2 -2
- package/iam-policy/useOwnerAssignment.d.ts.map +1 -1
- package/iam-policy/useOwnerAssignment.js +3 -3
- package/iam-policy/useOwnerAssignment.js.map +1 -1
- package/iam-policy/usePrincipalsCount.d.ts +4 -4
- package/iam-policy/usePrincipalsCount.d.ts.map +1 -1
- package/iam-policy/usePrincipalsCount.js +7 -7
- package/iam-policy/usePrincipalsCount.js.map +1 -1
- package/iam-policy/useResourceAccess.d.ts +1 -1
- package/iam-policy/useResourceAccess.js +1 -1
- package/iam-policy/useRevokeOrgAccess.d.ts +11 -9
- package/iam-policy/useRevokeOrgAccess.d.ts.map +1 -1
- package/iam-policy/useRevokeOrgAccess.js +6 -6
- package/iam-policy/useRevokeOrgAccess.js.map +1 -1
- package/identity-account/AccountPreferencesPanel.d.ts +6 -0
- package/identity-account/AccountPreferencesPanel.d.ts.map +1 -1
- package/identity-account/AccountPreferencesPanel.js +35 -3
- package/identity-account/AccountPreferencesPanel.js.map +1 -1
- package/identity-account/useAccountExecutionDefaults.d.ts +1 -1
- package/identity-account/useAccountExecutionDefaults.d.ts.map +1 -1
- package/identity-account/useAccountExecutionDefaults.js +2 -3
- package/identity-account/useAccountExecutionDefaults.js.map +1 -1
- package/identity-provider/IdentityProviderDetailPanel.js +4 -4
- package/identity-provider/IdentityProviderDetailPanel.js.map +1 -1
- package/identity-provider/IdentityProviderListPanel.d.ts.map +1 -1
- package/identity-provider/IdentityProviderListPanel.js +2 -1
- package/identity-provider/IdentityProviderListPanel.js.map +1 -1
- package/identity-provider/IdentityProviderWizard.js +1 -1
- package/identity-provider/IdentityProviderWizard.js.map +1 -1
- package/identity-provider/SsoLoginPrompt.js +2 -1
- package/identity-provider/SsoLoginPrompt.js.map +1 -1
- package/identity-provider/useIdentityProviderList.d.ts +2 -2
- package/identity-provider/useIdentityProviderList.js +2 -2
- package/index.d.ts +4 -4
- package/index.d.ts.map +1 -1
- package/index.js +4 -4
- package/index.js.map +1 -1
- package/inline-edit/InlineEditImage.d.ts +4 -0
- package/inline-edit/InlineEditImage.d.ts.map +1 -1
- package/inline-edit/InlineEditImage.js +12 -11
- package/inline-edit/InlineEditImage.js.map +1 -1
- package/inline-edit/InlineEditText.d.ts +4 -0
- package/inline-edit/InlineEditText.d.ts.map +1 -1
- package/inline-edit/InlineEditText.js +12 -11
- package/inline-edit/InlineEditText.js.map +1 -1
- package/inline-edit/InlineEditTextarea.d.ts +4 -0
- package/inline-edit/InlineEditTextarea.d.ts.map +1 -1
- package/inline-edit/InlineEditTextarea.js +11 -16
- package/inline-edit/InlineEditTextarea.js.map +1 -1
- package/inline-edit/useInlineDraft.d.ts +26 -0
- package/inline-edit/useInlineDraft.d.ts.map +1 -0
- package/inline-edit/useInlineDraft.js +61 -0
- package/inline-edit/useInlineDraft.js.map +1 -0
- package/internal/DialogShell.d.ts +21 -0
- package/internal/DialogShell.d.ts.map +1 -1
- package/internal/DialogShell.js +51 -4
- package/internal/DialogShell.js.map +1 -1
- package/internal/LoadingRegion.d.ts +35 -0
- package/internal/LoadingRegion.d.ts.map +1 -0
- package/internal/LoadingRegion.js +33 -0
- package/internal/LoadingRegion.js.map +1 -0
- package/internal/UnknownPublicAddressNotice.d.ts +20 -0
- package/internal/UnknownPublicAddressNotice.d.ts.map +1 -0
- package/internal/UnknownPublicAddressNotice.js +19 -0
- package/internal/UnknownPublicAddressNotice.js.map +1 -0
- package/internal/features.js +2 -2
- package/internal/features.js.map +1 -1
- package/internal/markdown-components.d.ts.map +1 -1
- package/internal/markdown-components.js +18 -4
- package/internal/markdown-components.js.map +1 -1
- package/internal/trim.d.ts +7 -0
- package/internal/trim.d.ts.map +1 -0
- package/internal/trim.js +12 -0
- package/internal/trim.js.map +1 -0
- package/invitation/InvitationManager.d.ts.map +1 -1
- package/invitation/InvitationManager.js +2 -1
- package/invitation/InvitationManager.js.map +1 -1
- package/invitation/InvitationRedemption.d.ts.map +1 -1
- package/invitation/InvitationRedemption.js +5 -4
- package/invitation/InvitationRedemption.js.map +1 -1
- package/invitation/useInvitationPreview.d.ts +1 -1
- package/invitation/useInvitationPreview.js +1 -1
- package/library/InstanceVisibilitySelector.d.ts +1 -1
- package/library/InstanceVisibilitySelector.d.ts.map +1 -1
- package/library/ResourceVisibilityControl.d.ts +6 -3
- package/library/ResourceVisibilityControl.d.ts.map +1 -1
- package/library/ResourceVisibilityControl.js +7 -4
- package/library/ResourceVisibilityControl.js.map +1 -1
- package/library/VisibilitySelector.d.ts +2 -2
- package/library/VisibilitySelector.d.ts.map +1 -1
- package/library/VisibilitySelector.js +1 -1
- package/licenses/LicenseDetail.d.ts.map +1 -1
- package/licenses/LicenseDetail.js +3 -3
- package/licenses/LicenseDetail.js.map +1 -1
- package/licenses/LicenseIssueForm.js +7 -7
- package/licenses/LicenseIssueForm.js.map +1 -1
- package/licenses/license-draft.d.ts +1 -1
- package/licenses/license-draft.d.ts.map +1 -1
- package/licenses/license-draft.js +3 -3
- package/licenses/license-draft.js.map +1 -1
- package/licenses/license-format.d.ts +7 -5
- package/licenses/license-format.d.ts.map +1 -1
- package/licenses/license-format.js +2 -4
- package/licenses/license-format.js.map +1 -1
- package/mcp-server/McpServerConnectDialog.js +4 -5
- package/mcp-server/McpServerConnectDialog.js.map +1 -1
- package/mcp-server/McpServerDetailView.d.ts.map +1 -1
- package/mcp-server/McpServerDetailView.js +5 -7
- package/mcp-server/McpServerDetailView.js.map +1 -1
- package/mcp-server/McpServerPicker.d.ts.map +1 -1
- package/mcp-server/McpServerPicker.js +2 -6
- package/mcp-server/McpServerPicker.js.map +1 -1
- package/mcp-server/McpToolSelector.js +1 -1
- package/mcp-server/McpToolSelector.js.map +1 -1
- package/mcp-server/useMcpServerConnect.d.ts +14 -25
- package/mcp-server/useMcpServerConnect.d.ts.map +1 -1
- package/mcp-server/useMcpServerConnect.js +7 -19
- package/mcp-server/useMcpServerConnect.js.map +1 -1
- package/mcp-server/useMcpServerOAuthConnect.d.ts +1 -3
- package/mcp-server/useMcpServerOAuthConnect.d.ts.map +1 -1
- package/mcp-server/useMcpServerOAuthConnect.js +6 -19
- package/mcp-server/useMcpServerOAuthConnect.js.map +1 -1
- package/memory/MemoryListPanel.d.ts.map +1 -1
- package/memory/MemoryListPanel.js +2 -1
- package/memory/MemoryListPanel.js.map +1 -1
- package/models/HarnessSelector.d.ts.map +1 -1
- package/models/HarnessSelector.js +1 -2
- package/models/HarnessSelector.js.map +1 -1
- package/models/ModelSelector.d.ts +1 -1
- package/models/ModelSelector.d.ts.map +1 -1
- package/models/ModelSelector.js +1 -7
- package/models/ModelSelector.js.map +1 -1
- package/models/harness.d.ts +10 -6
- package/models/harness.d.ts.map +1 -1
- package/models/harness.js +35 -28
- package/models/harness.js.map +1 -1
- package/models/index.d.ts +1 -1
- package/models/index.d.ts.map +1 -1
- package/models/index.js +1 -1
- package/models/index.js.map +1 -1
- package/oauth-app/OAuthAppListPanel.d.ts.map +1 -1
- package/oauth-app/OAuthAppListPanel.js +2 -1
- package/oauth-app/OAuthAppListPanel.js.map +1 -1
- package/organization/OrgPreferencesPanel.d.ts +3 -3
- package/organization/OrgPreferencesPanel.d.ts.map +1 -1
- package/organization/OrgPreferencesPanel.js +19 -6
- package/organization/OrgPreferencesPanel.js.map +1 -1
- package/organization/OrgProfilePanel.d.ts +3 -3
- package/organization/OrgProfilePanel.d.ts.map +1 -1
- package/organization/OrgProfilePanel.js +8 -7
- package/organization/OrgProfilePanel.js.map +1 -1
- package/organization/index.d.ts +1 -0
- package/organization/index.d.ts.map +1 -1
- package/organization/index.js +1 -0
- package/organization/index.js.map +1 -1
- package/organization/useFollowSessionOrganization.d.ts +9 -0
- package/organization/useFollowSessionOrganization.d.ts.map +1 -0
- package/organization/useFollowSessionOrganization.js +52 -0
- package/organization/useFollowSessionOrganization.js.map +1 -0
- package/package.json +5 -5
- package/plan-catalog/plan-draft.js +3 -3
- package/plan-catalog/plan-draft.js.map +1 -1
- package/platform-client/PlatformClientListPanel.d.ts.map +1 -1
- package/platform-client/PlatformClientListPanel.js +2 -1
- package/platform-client/PlatformClientListPanel.js.map +1 -1
- package/plugin/PluginDetailView.d.ts.map +1 -1
- package/plugin/PluginDetailView.js +2 -1
- package/plugin/PluginDetailView.js.map +1 -1
- package/plugin/useMcpServerReadiness.js +2 -2
- package/plugin/useMcpServerReadiness.js.map +1 -1
- package/portal-container.d.ts +8 -0
- package/portal-container.d.ts.map +1 -1
- package/portal-container.js +8 -0
- package/portal-container.js.map +1 -1
- package/provider-standing/ProviderStandingConsole.js +1 -1
- package/provider.d.ts +31 -2
- package/provider.d.ts.map +1 -1
- package/provider.js +7 -3
- package/provider.js.map +1 -1
- package/public-base-url-context.d.ts +35 -0
- package/public-base-url-context.d.ts.map +1 -0
- package/public-base-url-context.js +63 -0
- package/public-base-url-context.js.map +1 -0
- package/resource-workbench/components/SelectionCheckbox.js +1 -1
- package/resource-workbench/components/SelectionCheckbox.js.map +1 -1
- package/schedule/ScheduleDetailView.d.ts.map +1 -1
- package/schedule/ScheduleDetailView.js +2 -1
- package/schedule/ScheduleDetailView.js.map +1 -1
- package/session/SessionViewer.d.ts +7 -2
- package/session/SessionViewer.d.ts.map +1 -1
- package/session/SessionViewer.js +7 -2
- package/session/SessionViewer.js.map +1 -1
- package/session/useLocalSessionWorker.d.ts +19 -3
- package/session/useLocalSessionWorker.d.ts.map +1 -1
- package/session/useLocalSessionWorker.js +37 -4
- package/session/useLocalSessionWorker.js.map +1 -1
- package/session/useSessionConversation.d.ts +10 -1
- package/session/useSessionConversation.d.ts.map +1 -1
- package/session/useSessionConversation.js +5 -3
- package/session/useSessionConversation.js.map +1 -1
- package/settings/ChannelAppsSection.d.ts +4 -4
- package/settings/ChannelAppsSection.js +4 -4
- package/settings/EnvironmentsSection.d.ts.map +1 -1
- package/settings/EnvironmentsSection.js +2 -1
- package/settings/EnvironmentsSection.js.map +1 -1
- package/settings/MembersSection.js +2 -2
- package/settings/MembersSection.js.map +1 -1
- package/settings/OrgPreferencesSection.js +1 -1
- package/settings/OrgPreferencesSection.js.map +1 -1
- package/settings/OrgProfileSection.js +1 -1
- package/settings/OrgProfileSection.js.map +1 -1
- package/settings/ProviderKeysSection.d.ts +3 -0
- package/settings/ProviderKeysSection.d.ts.map +1 -0
- package/settings/ProviderKeysSection.js +3 -0
- package/settings/ProviderKeysSection.js.map +1 -0
- package/settings/TeamsSection.js +1 -1
- package/settings/TeamsSection.js.map +1 -1
- package/settings/UsageSection.js +1 -1
- package/settings/UsageSection.js.map +1 -1
- package/settings/index.d.ts +2 -0
- package/settings/index.d.ts.map +1 -1
- package/settings/index.js +1 -0
- package/settings/index.js.map +1 -1
- package/settings/settings-nav.d.ts.map +1 -1
- package/settings/settings-nav.js +2 -1
- package/settings/settings-nav.js.map +1 -1
- package/sharing/ShareAgentDialog.d.ts.map +1 -1
- package/sharing/ShareAgentDialog.js +14 -9
- package/sharing/ShareAgentDialog.js.map +1 -1
- package/sharing/SharedAgentChat.d.ts.map +1 -1
- package/sharing/SharedAgentChat.js +2 -1
- package/sharing/SharedAgentChat.js.map +1 -1
- package/sharing/useCanCreateAgentShare.d.ts +3 -1
- package/sharing/useCanCreateAgentShare.d.ts.map +1 -1
- package/sharing/useCanCreateAgentShare.js +5 -3
- package/sharing/useCanCreateAgentShare.js.map +1 -1
- package/sharing/useSaveAgentShare.d.ts +1 -1
- package/sharing/useSaveAgentShare.js +1 -1
- package/sidebar/WorkspaceSidebar.d.ts.map +1 -1
- package/sidebar/WorkspaceSidebar.js +2 -1
- package/sidebar/WorkspaceSidebar.js.map +1 -1
- package/skill/SkillDetailView.d.ts.map +1 -1
- package/skill/SkillDetailView.js +2 -1
- package/skill/SkillDetailView.js.map +1 -1
- package/skill/SkillDiffDialog.d.ts.map +1 -1
- package/skill/SkillDiffDialog.js +2 -1
- package/skill/SkillDiffDialog.js.map +1 -1
- package/skill/SkillFileBrowser.d.ts.map +1 -1
- package/skill/SkillFileBrowser.js +2 -1
- package/skill/SkillFileBrowser.js.map +1 -1
- package/src/access/ManageAccessButton.tsx +1 -1
- package/src/access/ManageAccessDialog.tsx +2 -2
- package/src/access/types.ts +1 -1
- package/src/agent/AgentDetailView.tsx +4 -4
- package/src/api-key/ApiKeyListPanel.tsx +4 -4
- package/src/attachment/AttachmentImageLightbox.tsx +3 -4
- package/src/billing/AutoRechargeCard.tsx +5 -5
- package/src/billing/BillingSection.tsx +10 -9
- package/src/billing/ChangePlanDialog.tsx +14 -2
- package/src/billing/CreditLedgerTable.tsx +4 -4
- package/src/billing/CreditPackGrid.tsx +1 -1
- package/src/billing/PaymentMethodCard.tsx +1 -1
- package/src/billing/PlanSection.tsx +6 -5
- package/src/billing/ProviderKeysSection.tsx +324 -0
- package/src/billing/UpgradeNotice.tsx +1 -0
- package/src/billing/index.ts +9 -0
- package/src/billing/plan-features.ts +5 -4
- package/src/billing/useBillingAccount.ts +7 -7
- package/src/billing/useBillingUsageReport.ts +7 -7
- package/src/billing/useChangePlan.ts +6 -6
- package/src/billing/useCreateBillingPortalSession.ts +4 -4
- package/src/billing/useCreateCheckoutSession.ts +3 -3
- package/src/billing/useCreatePaymentMethodSetupSession.ts +3 -3
- package/src/billing/useCreditLedger.ts +7 -7
- package/src/billing/useCustomerModelPricing.ts +7 -7
- package/src/billing/useEntitlements.ts +5 -5
- package/src/billing/usePeriodEstimate.ts +4 -4
- package/src/billing/useProviderKeys.ts +129 -0
- package/src/billing/useSetAutoRechargeConfig.ts +3 -3
- package/src/billing/useSubscription.ts +7 -7
- package/src/channel/AgentChannelsPanel.tsx +11 -9
- package/src/channel/connect/ServingAppSection.tsx +1 -1
- package/src/channel-app/ChannelAppDetailPanel.tsx +37 -20
- package/src/channel-app/ChannelAppListPanel.tsx +6 -6
- package/src/channel-app/CreateChannelAppForm.tsx +0 -1
- package/src/channel-app/copy.ts +3 -3
- package/src/channel-app/internal.tsx +21 -0
- package/src/channel-app/slackAppSetup.ts +6 -3
- package/src/channel-app/whatsappAppSetup.ts +5 -2
- package/src/composer/SessionComposer.tsx +5 -14
- package/src/cursor-accounts/CursorAccountEditor.tsx +3 -3
- package/src/cursor-accounts/CursorAccountsConsole.tsx +5 -5
- package/src/dashboard/OperationalDashboard.tsx +1 -6
- package/src/dashboard/useDashboardSummary.ts +2 -4
- package/src/environment/EnvironmentListPanel.tsx +4 -4
- package/src/environment/EnvironmentVariableEditor.tsx +5 -5
- package/src/environment/index.ts +1 -7
- package/src/environment/systemEnvVars.ts +21 -133
- package/src/execution/ArtifactFileContent.tsx +3 -2
- package/src/execution/McpToolDetail.tsx +3 -3
- package/src/execution/RecalledMemoriesCard.tsx +1 -1
- package/src/execution/ResultView.tsx +3 -3
- package/src/execution/TerminalSession.tsx +1 -1
- package/src/execution/ThreadSkeleton.tsx +4 -4
- package/src/execution/file-path-resolver.ts +3 -2
- package/src/execution/sandbox-path-normalizer.ts +2 -1
- package/src/github/parseGitUrl.ts +13 -4
- package/src/iam-policy/GrantAccessForm.tsx +4 -4
- package/src/iam-policy/OrgMembersPanel.tsx +10 -8
- package/src/iam-policy/PeopleWithAccess.tsx +3 -3
- package/src/iam-policy/PrincipalPicker.tsx +3 -3
- package/src/iam-policy/SharePanel.tsx +4 -4
- package/src/iam-policy/useCheckPermission.ts +4 -1
- package/src/iam-policy/useCreateIamPolicy.ts +1 -1
- package/src/iam-policy/useDeleteIamPolicy.ts +1 -1
- package/src/iam-policy/useGrantableRoles.ts +1 -1
- package/src/iam-policy/useGranteeCandidates.ts +3 -3
- package/src/iam-policy/useOwnerAssignment.ts +3 -3
- package/src/iam-policy/usePrincipalsCount.ts +7 -7
- package/src/iam-policy/useResourceAccess.ts +1 -1
- package/src/iam-policy/useRevokeOrgAccess.ts +13 -11
- package/src/identity-account/AccountPreferencesPanel.tsx +60 -13
- package/src/identity-account/useAccountExecutionDefaults.ts +2 -5
- package/src/identity-provider/IdentityProviderDetailPanel.tsx +3 -9
- package/src/identity-provider/IdentityProviderListPanel.tsx +4 -4
- package/src/identity-provider/IdentityProviderWizard.tsx +1 -1
- package/src/identity-provider/SsoLoginPrompt.tsx +6 -5
- package/src/identity-provider/useIdentityProviderList.ts +2 -2
- package/src/index.ts +10 -5
- package/src/inline-edit/InlineEditImage.tsx +13 -11
- package/src/inline-edit/InlineEditText.tsx +13 -11
- package/src/inline-edit/InlineEditTextarea.tsx +12 -16
- package/src/inline-edit/useInlineDraft.ts +85 -0
- package/src/internal/DialogShell.tsx +80 -3
- package/src/internal/LoadingRegion.tsx +46 -0
- package/src/internal/UnknownPublicAddressNotice.tsx +31 -0
- package/src/internal/features.ts +2 -2
- package/src/internal/loading-region-markup.json +71 -0
- package/src/internal/markdown-components.tsx +15 -4
- package/src/internal/trim.ts +10 -0
- package/src/invitation/InvitationManager.tsx +4 -4
- package/src/invitation/InvitationRedemption.tsx +7 -7
- package/src/invitation/useInvitationPreview.ts +1 -1
- package/src/library/InstanceVisibilitySelector.tsx +1 -1
- package/src/library/ResourceVisibilityControl.tsx +7 -4
- package/src/library/VisibilitySelector.tsx +2 -2
- package/src/licenses/LicenseDetail.tsx +8 -6
- package/src/licenses/LicenseIssueForm.tsx +7 -7
- package/src/licenses/license-draft.ts +4 -4
- package/src/licenses/license-format.ts +12 -8
- package/src/mcp-server/McpServerConnectDialog.tsx +4 -6
- package/src/mcp-server/McpServerDetailView.tsx +7 -10
- package/src/mcp-server/McpServerPicker.tsx +2 -12
- package/src/mcp-server/McpToolSelector.tsx +1 -1
- package/src/mcp-server/useMcpServerConnect.ts +14 -33
- package/src/mcp-server/useMcpServerOAuthConnect.ts +7 -23
- package/src/memory/MemoryListPanel.tsx +4 -4
- package/src/models/HarnessSelector.tsx +1 -3
- package/src/models/ModelSelector.tsx +2 -7
- package/src/models/harness.ts +41 -39
- package/src/models/index.ts +1 -1
- package/src/oauth-app/OAuthAppListPanel.tsx +4 -4
- package/src/organization/OrgPreferencesPanel.tsx +28 -10
- package/src/organization/OrgProfilePanel.tsx +12 -12
- package/src/organization/index.ts +1 -0
- package/src/organization/useFollowSessionOrganization.ts +54 -0
- package/src/plan-catalog/plan-draft.ts +3 -3
- package/src/platform-client/PlatformClientListPanel.tsx +4 -4
- package/src/plugin/PluginDetailView.tsx +3 -2
- package/src/plugin/useMcpServerReadiness.ts +2 -2
- package/src/portal-container.ts +8 -0
- package/src/provider-standing/ProviderStandingConsole.tsx +1 -1
- package/src/provider.tsx +60 -27
- package/src/public-base-url-context.ts +71 -0
- package/src/resource-workbench/components/SelectionCheckbox.tsx +1 -1
- package/src/schedule/ScheduleDetailView.tsx +4 -4
- package/src/session/SessionViewer.tsx +13 -3
- package/src/session/useLocalSessionWorker.ts +35 -4
- package/src/session/useSessionConversation.ts +14 -3
- package/src/settings/ChannelAppsSection.tsx +4 -4
- package/src/settings/EnvironmentsSection.tsx +3 -2
- package/src/settings/MembersSection.tsx +3 -3
- package/src/settings/OrgPreferencesSection.tsx +1 -1
- package/src/settings/OrgProfileSection.tsx +1 -1
- package/src/settings/ProviderKeysSection.tsx +4 -0
- package/src/settings/TeamsSection.tsx +1 -1
- package/src/settings/UsageSection.tsx +1 -1
- package/src/settings/index.ts +2 -0
- package/src/settings/settings-nav.ts +2 -0
- package/src/sharing/ShareAgentDialog.tsx +32 -15
- package/src/sharing/SharedAgentChat.tsx +4 -4
- package/src/sharing/useCanCreateAgentShare.ts +6 -4
- package/src/sharing/useSaveAgentShare.ts +1 -1
- package/src/sidebar/WorkspaceSidebar.tsx +3 -2
- package/src/skill/SkillDetailView.tsx +4 -4
- package/src/skill/SkillDiffDialog.tsx +4 -4
- package/src/skill/SkillFileBrowser.tsx +4 -4
- package/src/styles.css +14 -4
- package/src/team/TeamDetailPanel.tsx +3 -3
- package/src/team/TeamListPanel.tsx +3 -2
- package/src/team/TeamMembersPanel.tsx +3 -3
- package/src/usage/OrgUsagePanel.tsx +9 -9
- package/src/usage/useExportCSV.ts +9 -9
- package/src/usage/useOrgUsageReport.ts +7 -7
- package/src/version-history/VersionTimeline.tsx +4 -4
- package/src/workflow/WorkflowTaskApprovalSummary.tsx +14 -7
- package/src/workflow/WorkflowVersionDiffViewer.tsx +4 -4
- package/src/workflow/WorkflowVersionTimeline.tsx +4 -4
- package/src/workflow/inspector/tabs/BranchesTab.tsx +2 -2
- package/src/workflow/inspector/tabs/CatchTab.tsx +1 -1
- package/src/workflow/inspector/tabs/IterationTab.tsx +1 -1
- package/src/workflow/instance/WorkflowInstanceDetailPanel.tsx +7 -6
- package/src/workflow/task-detail/task-approval.ts +20 -13
- package/src/workflow/useDiagnoseExecutionFlow.ts +23 -18
- package/src/workflow/useExplainWorkflowFlow.ts +7 -3
- package/src/workflow/useRefineWorkflowFlow.ts +17 -10
- package/src/workflow/useWorkflowArchitectFlow.ts +7 -3
- package/src/workspace/ExplorerTree.tsx +4 -8
- package/src/workspace/FileViewer.tsx +4 -5
- package/styles.css +1 -1
- package/team/TeamDetailPanel.d.ts +2 -2
- package/team/TeamDetailPanel.d.ts.map +1 -1
- package/team/TeamDetailPanel.js +2 -2
- package/team/TeamDetailPanel.js.map +1 -1
- package/team/TeamListPanel.d.ts.map +1 -1
- package/team/TeamListPanel.js +2 -1
- package/team/TeamListPanel.js.map +1 -1
- package/team/TeamMembersPanel.d.ts +2 -2
- package/team/TeamMembersPanel.d.ts.map +1 -1
- package/team/TeamMembersPanel.js +2 -2
- package/team/TeamMembersPanel.js.map +1 -1
- package/usage/OrgUsagePanel.d.ts +3 -3
- package/usage/OrgUsagePanel.d.ts.map +1 -1
- package/usage/OrgUsagePanel.js +6 -5
- package/usage/OrgUsagePanel.js.map +1 -1
- package/usage/useExportCSV.d.ts +2 -2
- package/usage/useExportCSV.d.ts.map +1 -1
- package/usage/useExportCSV.js +9 -9
- package/usage/useExportCSV.js.map +1 -1
- package/usage/useOrgUsageReport.d.ts +4 -4
- package/usage/useOrgUsageReport.d.ts.map +1 -1
- package/usage/useOrgUsageReport.js +7 -7
- package/usage/useOrgUsageReport.js.map +1 -1
- package/version-history/VersionTimeline.d.ts.map +1 -1
- package/version-history/VersionTimeline.js +2 -1
- package/version-history/VersionTimeline.js.map +1 -1
- package/workflow/WorkflowTaskApprovalSummary.d.ts +7 -4
- package/workflow/WorkflowTaskApprovalSummary.d.ts.map +1 -1
- package/workflow/WorkflowTaskApprovalSummary.js +8 -3
- package/workflow/WorkflowTaskApprovalSummary.js.map +1 -1
- package/workflow/WorkflowVersionDiffViewer.d.ts.map +1 -1
- package/workflow/WorkflowVersionDiffViewer.js +2 -1
- package/workflow/WorkflowVersionDiffViewer.js.map +1 -1
- package/workflow/WorkflowVersionTimeline.d.ts.map +1 -1
- package/workflow/WorkflowVersionTimeline.js +2 -1
- package/workflow/WorkflowVersionTimeline.js.map +1 -1
- package/workflow/inspector/tabs/BranchesTab.js +1 -1
- package/workflow/inspector/tabs/BranchesTab.js.map +1 -1
- package/workflow/inspector/tabs/CatchTab.js +1 -1
- package/workflow/inspector/tabs/CatchTab.js.map +1 -1
- package/workflow/inspector/tabs/IterationTab.js +1 -1
- package/workflow/inspector/tabs/IterationTab.js.map +1 -1
- package/workflow/instance/WorkflowInstanceDetailPanel.d.ts.map +1 -1
- package/workflow/instance/WorkflowInstanceDetailPanel.js +6 -5
- package/workflow/instance/WorkflowInstanceDetailPanel.js.map +1 -1
- package/workflow/task-detail/task-approval.d.ts +13 -11
- package/workflow/task-detail/task-approval.d.ts.map +1 -1
- package/workflow/task-detail/task-approval.js +8 -4
- package/workflow/task-detail/task-approval.js.map +1 -1
- package/workflow/useDiagnoseExecutionFlow.d.ts.map +1 -1
- package/workflow/useDiagnoseExecutionFlow.js +23 -18
- package/workflow/useDiagnoseExecutionFlow.js.map +1 -1
- package/workflow/useExplainWorkflowFlow.d.ts.map +1 -1
- package/workflow/useExplainWorkflowFlow.js +7 -3
- package/workflow/useExplainWorkflowFlow.js.map +1 -1
- package/workflow/useRefineWorkflowFlow.d.ts.map +1 -1
- package/workflow/useRefineWorkflowFlow.js +14 -10
- package/workflow/useRefineWorkflowFlow.js.map +1 -1
- package/workflow/useWorkflowArchitectFlow.d.ts.map +1 -1
- package/workflow/useWorkflowArchitectFlow.js +7 -3
- package/workflow/useWorkflowArchitectFlow.js.map +1 -1
- package/workspace/ExplorerTree.d.ts.map +1 -1
- package/workspace/ExplorerTree.js +2 -5
- package/workspace/ExplorerTree.js.map +1 -1
- package/workspace/FileViewer.d.ts.map +1 -1
- package/workspace/FileViewer.js +2 -1
- package/workspace/FileViewer.js.map +1 -1
|
@@ -97,7 +97,7 @@ export function unwrapEnclosingMarkdownFence(
|
|
|
97
97
|
* blank lines only). Group 1 is the heading text; the match spans through the
|
|
98
98
|
* heading's trailing newline(s) so `body` starts at the first content line.
|
|
99
99
|
*/
|
|
100
|
-
const
|
|
100
|
+
const LEADING_H1_MARKER = /^#[ \t]+/;
|
|
101
101
|
|
|
102
102
|
/**
|
|
103
103
|
* Splits a markdown document into its leading `# H1` title and the remaining
|
|
@@ -115,10 +115,21 @@ export function extractLeadingH1(markdown: string): {
|
|
|
115
115
|
readonly title: string | null;
|
|
116
116
|
readonly body: string;
|
|
117
117
|
} {
|
|
118
|
+
// Read line by line: a single pattern over the heading and the newlines
|
|
119
|
+
// after it backtracks on a long run of spaces.
|
|
118
120
|
const trimmed = markdown.trim();
|
|
119
|
-
const
|
|
120
|
-
|
|
121
|
-
|
|
121
|
+
const lineEnd = trimmed.indexOf("\n");
|
|
122
|
+
const firstLine = lineEnd === -1 ? trimmed : trimmed.slice(0, lineEnd);
|
|
123
|
+
const marker = LEADING_H1_MARKER.exec(firstLine);
|
|
124
|
+
if (!marker) return { title: null, body: markdown };
|
|
125
|
+
const rawTitle = firstLine.slice(marker[0].length).replace(/\r$/, "");
|
|
126
|
+
let titleEnd = rawTitle.length;
|
|
127
|
+
while (titleEnd > 0 && (rawTitle[titleEnd - 1] === " " || rawTitle[titleEnd - 1] === "\t")) titleEnd -= 1;
|
|
128
|
+
const title = rawTitle.slice(0, titleEnd);
|
|
129
|
+
if (title === "") return { title: null, body: markdown };
|
|
130
|
+
let bodyStart = lineEnd === -1 ? trimmed.length : lineEnd + 1;
|
|
131
|
+
while (trimmed[bodyStart] === "\n") bodyStart += 1;
|
|
132
|
+
return { title, body: trimmed.slice(bodyStart) };
|
|
122
133
|
}
|
|
123
134
|
|
|
124
135
|
/**
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `value` without its trailing run of `char`. A `/x+$/` regex rescans the run
|
|
3
|
+
* from every starting position, so a long run costs quadratic time; this walks
|
|
4
|
+
* it once.
|
|
5
|
+
*/
|
|
6
|
+
export function trimTrailing(value: string, char: string): string {
|
|
7
|
+
let end = value.length;
|
|
8
|
+
while (end > 0 && value[end - 1] === char) end -= 1;
|
|
9
|
+
return end === value.length ? value : value.slice(0, end);
|
|
10
|
+
}
|
|
@@ -21,6 +21,7 @@ import { RoleSelector } from "../iam-policy/RoleSelector.js";
|
|
|
21
21
|
import { useOwnerAssignment } from "../iam-policy/useOwnerAssignment.js";
|
|
22
22
|
import { SpinnerIcon } from "../internal/SpinnerIcon.js";
|
|
23
23
|
import { useCopyFeedback } from "../internal/useCopyFeedback.js";
|
|
24
|
+
import { LoadingRegion } from "../internal/LoadingRegion.js";
|
|
24
25
|
|
|
25
26
|
// ---------------------------------------------------------------------------
|
|
26
27
|
// Public API
|
|
@@ -115,10 +116,9 @@ export function InvitationManager({
|
|
|
115
116
|
|
|
116
117
|
if (isLoading) {
|
|
117
118
|
return (
|
|
118
|
-
<
|
|
119
|
+
<LoadingRegion
|
|
119
120
|
className={cn("stg:space-y-2", className)}
|
|
120
|
-
|
|
121
|
-
aria-label="Loading invitations"
|
|
121
|
+
label="Loading invitations"
|
|
122
122
|
>
|
|
123
123
|
{Array.from({ length: 2 }, (_, i) => (
|
|
124
124
|
<div
|
|
@@ -126,7 +126,7 @@ export function InvitationManager({
|
|
|
126
126
|
className="stg:bg-muted-subtle stg:h-14 stg:animate-pulse stg:rounded-lg"
|
|
127
127
|
/>
|
|
128
128
|
))}
|
|
129
|
-
</
|
|
129
|
+
</LoadingRegion>
|
|
130
130
|
);
|
|
131
131
|
}
|
|
132
132
|
|
|
@@ -8,6 +8,7 @@ import { timestampDate } from "@bufbuild/protobuf/wkt";
|
|
|
8
8
|
import { useInvitationPreview } from "./useInvitationPreview.js";
|
|
9
9
|
import { useRedeemInvitation } from "./useRedeemInvitation.js";
|
|
10
10
|
import { SpinnerIcon } from "../internal/SpinnerIcon.js";
|
|
11
|
+
import { LoadingRegion } from "../internal/LoadingRegion.js";
|
|
11
12
|
|
|
12
13
|
// ---------------------------------------------------------------------------
|
|
13
14
|
// Public API
|
|
@@ -141,13 +142,12 @@ export function InvitationRedemption({
|
|
|
141
142
|
// Loading state
|
|
142
143
|
if (isLoading) {
|
|
143
144
|
return (
|
|
144
|
-
<
|
|
145
|
+
<LoadingRegion
|
|
145
146
|
className={cn("stg:mx-auto stg:max-w-sm", className)}
|
|
146
|
-
|
|
147
|
-
aria-label="Loading invitation"
|
|
147
|
+
label="Loading invitation"
|
|
148
148
|
>
|
|
149
149
|
<LoadingSkeleton />
|
|
150
|
-
</
|
|
150
|
+
</LoadingRegion>
|
|
151
151
|
);
|
|
152
152
|
}
|
|
153
153
|
|
|
@@ -174,7 +174,7 @@ export function InvitationRedemption({
|
|
|
174
174
|
|
|
175
175
|
// Redemption success
|
|
176
176
|
if (accepted) {
|
|
177
|
-
const orgName = preview.
|
|
177
|
+
const orgName = preview.orgName || "the organization";
|
|
178
178
|
const roleName = iamRoleDisplayName(preview.role);
|
|
179
179
|
return (
|
|
180
180
|
<div className={cn("stg:mx-auto stg:max-w-sm", className)}>
|
|
@@ -191,8 +191,8 @@ export function InvitationRedemption({
|
|
|
191
191
|
);
|
|
192
192
|
}
|
|
193
193
|
|
|
194
|
-
const orgName = preview.
|
|
195
|
-
const orgLogo = preview.
|
|
194
|
+
const orgName = preview.orgName || "Unknown organization";
|
|
195
|
+
const orgLogo = preview.orgLogoUrl;
|
|
196
196
|
const orgInitial = orgName.charAt(0).toUpperCase();
|
|
197
197
|
const roleName = iamRoleDisplayName(preview.role);
|
|
198
198
|
const expiresAt = preview.expiresAt ? timestampDate(preview.expiresAt) : null;
|
|
@@ -54,7 +54,7 @@ export interface UseInvitationPreviewReturn {
|
|
|
54
54
|
* if (!preview) return <NotFound />;
|
|
55
55
|
* if (!preview.isValid) return <Expired reason={preview.invalidReason} />;
|
|
56
56
|
*
|
|
57
|
-
* return <p>Join {preview.
|
|
57
|
+
* return <p>Join {preview.orgName} as {preview.role}</p>;
|
|
58
58
|
* ```
|
|
59
59
|
*/
|
|
60
60
|
export function useInvitationPreview(
|
|
@@ -26,7 +26,7 @@ export interface InstanceVisibilitySelectorProps {
|
|
|
26
26
|
readonly mode?: VisibilitySelectorMode;
|
|
27
27
|
/** Shows a spinner/disabled state while the RPC is in flight. */
|
|
28
28
|
readonly isPending?: boolean;
|
|
29
|
-
/** Disables all interaction (e.g., when the user lacks
|
|
29
|
+
/** Disables all interaction (e.g., when the user lacks can_manage_audience). */
|
|
30
30
|
readonly disabled?: boolean;
|
|
31
31
|
/** Additional CSS classes applied to the root element. */
|
|
32
32
|
readonly className?: string;
|
|
@@ -71,10 +71,13 @@ export interface ResourceVisibilityControlProps {
|
|
|
71
71
|
*
|
|
72
72
|
* Behavior:
|
|
73
73
|
* - Always renders a legible state: a read-only {@link VisibilityBadge}
|
|
74
|
-
* is shown to
|
|
75
|
-
* is in flight — never a silent blank.
|
|
74
|
+
* is shown to anyone without `can_manage_audience` and while the
|
|
75
|
+
* permission check is in flight — never a silent blank.
|
|
76
76
|
* - Upgrades to the interactive {@link VisibilitySelector} for users with
|
|
77
|
-
* `
|
|
77
|
+
* `can_manage_audience`, the server's bar on every `updateVisibility`:
|
|
78
|
+
* visibility decides who reaches the resource, so an editor, who may
|
|
79
|
+
* change the definition, sees the badge. Persists changes via
|
|
80
|
+
* {@link useUpdateVisibility} and invokes
|
|
78
81
|
* {@link ResourceVisibilityControlProps.onChanged} on success.
|
|
79
82
|
*
|
|
80
83
|
* Offered levels are kind- and context-aware (`visibilityLevels.ts`):
|
|
@@ -166,7 +169,7 @@ export function ResourceVisibilityControl({
|
|
|
166
169
|
return (
|
|
167
170
|
<PermissionGate
|
|
168
171
|
resource={{ kind: FGA_KIND[kind], id: resourceId }}
|
|
169
|
-
relation="
|
|
172
|
+
relation="can_manage_audience"
|
|
170
173
|
fallback={badge}
|
|
171
174
|
loading={badge}
|
|
172
175
|
>
|
|
@@ -54,7 +54,7 @@ export interface VisibilitySelectorProps {
|
|
|
54
54
|
readonly mode?: VisibilitySelectorMode;
|
|
55
55
|
/** Shows a spinner/disabled state while the RPC is in flight. */
|
|
56
56
|
readonly isPending?: boolean;
|
|
57
|
-
/** Disables all interaction (e.g., when the user lacks
|
|
57
|
+
/** Disables all interaction (e.g., when the user lacks can_manage_audience). */
|
|
58
58
|
readonly disabled?: boolean;
|
|
59
59
|
/** Accessible name for the control. Defaults to "Resource visibility". */
|
|
60
60
|
readonly ariaLabel?: string;
|
|
@@ -444,7 +444,7 @@ export interface VisibilityBadgeProps {
|
|
|
444
444
|
* for a row from before its retirement).
|
|
445
445
|
*
|
|
446
446
|
* Rendered wherever the interactive {@link VisibilitySelector} is not
|
|
447
|
-
* available — for
|
|
447
|
+
* available — for anyone who lacks `can_manage_audience`, and while a permission check
|
|
448
448
|
* is in flight — so a resource's visibility is always legible rather than
|
|
449
449
|
* silently blank. Shares the chip styling with the selector trigger so the
|
|
450
450
|
* read-only and editable states are visually consistent.
|
|
@@ -116,8 +116,8 @@ export function LicenseDetail({
|
|
|
116
116
|
<Row label="Customer">
|
|
117
117
|
<span className="stg:block">{customer?.displayName}</span>
|
|
118
118
|
<span className="stg:block stg:text-muted-foreground">{customer?.contactEmail}</span>
|
|
119
|
-
{customer?.
|
|
120
|
-
<span className="stg:block stg:text-muted-foreground">{`Cloud organization ${customer.
|
|
119
|
+
{customer?.org && (
|
|
120
|
+
<span className="stg:block stg:text-muted-foreground">{`Cloud organization ${customer.org}`}</span>
|
|
121
121
|
)}
|
|
122
122
|
</Row>
|
|
123
123
|
<Row label="Term">{spec ? termLabel(spec.term) : "Unknown"}</Row>
|
|
@@ -140,8 +140,8 @@ export function LicenseDetail({
|
|
|
140
140
|
{limits?.maxUsers !== undefined ? `${limits.maxUsers} users` : "Unlimited users"}
|
|
141
141
|
</span>
|
|
142
142
|
<span className="stg:block">
|
|
143
|
-
{limits?.
|
|
144
|
-
? `${limits.
|
|
143
|
+
{limits?.maxOrgs !== undefined
|
|
144
|
+
? `${limits.maxOrgs} organizations`
|
|
145
145
|
: "Unlimited organizations"}
|
|
146
146
|
</span>
|
|
147
147
|
</Row>
|
|
@@ -157,10 +157,12 @@ export function LicenseDetail({
|
|
|
157
157
|
<Row label="Issued">
|
|
158
158
|
{issuedAt ? <Instant date={issuedAt}>{formatInstantUtc(issuedAt)}</Instant> : "Unknown"}
|
|
159
159
|
{/* The audit names the account, not only its role-like display name:
|
|
160
|
-
with several operators, "who issued this contract" needs the address.
|
|
160
|
+
with several operators, "who issued this contract" needs the address.
|
|
161
|
+
An account with no name of its own is called by its email, so
|
|
162
|
+
the address is shown once. */}
|
|
161
163
|
{issuer && (issuer.email || issuer.displayName) && (
|
|
162
164
|
<span className="stg:block stg:text-muted-foreground">
|
|
163
|
-
{issuer.displayName && issuer.email
|
|
165
|
+
{issuer.displayName && issuer.email && issuer.displayName !== issuer.email
|
|
164
166
|
? `by ${issuer.displayName} (${issuer.email})`
|
|
165
167
|
: `by ${issuer.displayName || issuer.email}`}
|
|
166
168
|
</span>
|
|
@@ -71,7 +71,7 @@ type CustomerMode = "existing" | "new";
|
|
|
71
71
|
* browser-blue control inside its brand.
|
|
72
72
|
*/
|
|
73
73
|
const NATIVE_CONTROL =
|
|
74
|
-
"stg:size-3.5 stg:shrink-0 stg:cursor-pointer stg:
|
|
74
|
+
"stg:size-3.5 stg:shrink-0 stg:cursor-pointer stg:focus-visible:outline-none stg:focus-visible:ring-2 stg:focus-visible:ring-ring stg:focus-visible:ring-offset-1";
|
|
75
75
|
|
|
76
76
|
const TERM_PRESET_HINT: Readonly<Record<IssuableTerm, string>> = {
|
|
77
77
|
[LicenseTerm.trial]: "30 days",
|
|
@@ -87,7 +87,7 @@ const VIOLATION_COPY: Readonly<Record<string, string>> = {
|
|
|
87
87
|
"spec.customer.display_name": "Name the customer.",
|
|
88
88
|
"spec.customer.contact_email": "Enter the address renewal notices go to.",
|
|
89
89
|
"spec.entitlements.limits.max_users": "Enter at least 1, or leave it empty for unlimited.",
|
|
90
|
-
"spec.entitlements.limits.
|
|
90
|
+
"spec.entitlements.limits.max_orgs": "Enter at least 1, or leave it empty for unlimited.",
|
|
91
91
|
"spec.notes": "Notes are limited to 4,096 characters.",
|
|
92
92
|
};
|
|
93
93
|
|
|
@@ -134,7 +134,7 @@ export function LicenseIssueForm({
|
|
|
134
134
|
});
|
|
135
135
|
const [maxUsers, setMaxUsers] = useState(limitText(renewing?.spec?.entitlements?.limits?.maxUsers));
|
|
136
136
|
const [maxOrganizations, setMaxOrganizations] = useState(
|
|
137
|
-
limitText(renewing?.spec?.entitlements?.limits?.
|
|
137
|
+
limitText(renewing?.spec?.entitlements?.limits?.maxOrgs),
|
|
138
138
|
);
|
|
139
139
|
const [features, setFeatures] = useState<readonly GrantableFeature[]>(() =>
|
|
140
140
|
(renewing?.spec?.entitlements?.features ?? []).filter(isGrantableFeature),
|
|
@@ -154,9 +154,9 @@ export function LicenseIssueForm({
|
|
|
154
154
|
id: selected.customer.id,
|
|
155
155
|
displayName: selected.customer.displayName,
|
|
156
156
|
contactEmail: selected.customer.contactEmail,
|
|
157
|
-
|
|
157
|
+
org: selected.customer.org,
|
|
158
158
|
}
|
|
159
|
-
: { id: mintedId, displayName: newName, contactEmail: newEmail,
|
|
159
|
+
: { id: mintedId, displayName: newName, contactEmail: newEmail, org: newOrganization };
|
|
160
160
|
const matches =
|
|
161
161
|
mode === "new" ? findCustomerMatches(customers, { displayName: newName, contactEmail: newEmail }) : [];
|
|
162
162
|
|
|
@@ -179,7 +179,7 @@ export function LicenseIssueForm({
|
|
|
179
179
|
lastCoveredDay,
|
|
180
180
|
graceDays: grace.value,
|
|
181
181
|
maxUsers: users.value,
|
|
182
|
-
|
|
182
|
+
maxOrgs: organizations.value,
|
|
183
183
|
features,
|
|
184
184
|
notes,
|
|
185
185
|
};
|
|
@@ -473,7 +473,7 @@ export function LicenseIssueForm({
|
|
|
473
473
|
message={shown(
|
|
474
474
|
maxOrganizations !== "",
|
|
475
475
|
organizations.ok
|
|
476
|
-
? violationAt("spec.entitlements.limits.
|
|
476
|
+
? violationAt("spec.entitlements.limits.max_orgs")
|
|
477
477
|
: organizations.error,
|
|
478
478
|
)}
|
|
479
479
|
/>
|
|
@@ -65,7 +65,7 @@ export interface LicenseDraft {
|
|
|
65
65
|
/** `undefined` means unlimited, as the contract reads an absent limit. */
|
|
66
66
|
readonly maxUsers: number | undefined;
|
|
67
67
|
/** `undefined` means unlimited, as the contract reads an absent limit. */
|
|
68
|
-
readonly
|
|
68
|
+
readonly maxOrgs: number | undefined;
|
|
69
69
|
readonly features: readonly GrantableFeature[];
|
|
70
70
|
/** Operator notes; never signed, never shown to the customer. */
|
|
71
71
|
readonly notes: string;
|
|
@@ -148,9 +148,9 @@ export function toLicenseInput(draft: LicenseDraft): LicenseInput {
|
|
|
148
148
|
const graceUntil = new Date(expiresAt.getTime() + draft.graceDays * DAY_MS);
|
|
149
149
|
const limits: EntitlementLimitsInput = {
|
|
150
150
|
...(draft.maxUsers !== undefined && { maxUsers: draft.maxUsers }),
|
|
151
|
-
...(draft.
|
|
151
|
+
...(draft.maxOrgs !== undefined && { maxOrgs: draft.maxOrgs }),
|
|
152
152
|
};
|
|
153
|
-
const organization = draft.customer.
|
|
153
|
+
const organization = draft.customer.org?.trim();
|
|
154
154
|
const notes = draft.notes.trim();
|
|
155
155
|
|
|
156
156
|
return {
|
|
@@ -162,7 +162,7 @@ export function toLicenseInput(draft: LicenseDraft): LicenseInput {
|
|
|
162
162
|
id: draft.customer.id,
|
|
163
163
|
displayName: collapse(draft.customer.displayName),
|
|
164
164
|
contactEmail: draft.customer.contactEmail.trim(),
|
|
165
|
-
...(organization ? { organization } : {}),
|
|
165
|
+
...(organization ? { org: organization } : {}),
|
|
166
166
|
},
|
|
167
167
|
entitlements: {
|
|
168
168
|
...(Object.keys(limits).length > 0 && { limits }),
|
|
@@ -27,11 +27,17 @@ export type IssuableTerm = LicenseTerm.trial | LicenseTerm.paid;
|
|
|
27
27
|
|
|
28
28
|
/**
|
|
29
29
|
* Features a Cloud plan sells but a license never carries: they tier the
|
|
30
|
-
* hosted runtime, and
|
|
31
|
-
*
|
|
32
|
-
* control.
|
|
30
|
+
* Cloud's hosted runtime, and on a self-hosted deployment the edition
|
|
31
|
+
* decides whether they exist, never a license, so offering one on a
|
|
32
|
+
* license would sell a capability the license does not control. A license
|
|
33
|
+
* issued before a value joined this list may still carry it; the console
|
|
34
|
+
* shows it nowhere.
|
|
33
35
|
*/
|
|
34
|
-
export type PlanOnlyFeature =
|
|
36
|
+
export type PlanOnlyFeature =
|
|
37
|
+
| Feature.channels
|
|
38
|
+
| Feature.sharing
|
|
39
|
+
| Feature.teams
|
|
40
|
+
| Feature.managed_organizations;
|
|
35
41
|
|
|
36
42
|
/**
|
|
37
43
|
* Features the contract names but nothing gates: every edition serves them
|
|
@@ -71,8 +77,6 @@ export const FEATURE_LABELS: Readonly<
|
|
|
71
77
|
> = {
|
|
72
78
|
[Feature.sso_enforcement]: FEATURE_COPY[Feature.sso_enforcement],
|
|
73
79
|
[Feature.byo_provider_keys]: FEATURE_COPY[Feature.byo_provider_keys],
|
|
74
|
-
[Feature.channels]: FEATURE_COPY[Feature.channels],
|
|
75
|
-
[Feature.sharing]: FEATURE_COPY[Feature.sharing],
|
|
76
80
|
};
|
|
77
81
|
|
|
78
82
|
/** Every grantable feature, in contract order (derived from the label map). */
|
|
@@ -153,7 +157,7 @@ export function entitlementParts(entitlements: Entitlements | undefined): readon
|
|
|
153
157
|
const features = entitlements?.features.filter(isGrantableFeature).length ?? 0;
|
|
154
158
|
return [
|
|
155
159
|
limitPart(limits?.maxUsers, "user"),
|
|
156
|
-
limitPart(limits?.
|
|
160
|
+
limitPart(limits?.maxOrgs, "organization"),
|
|
157
161
|
features === 0 ? "No features" : plural(features, "feature"),
|
|
158
162
|
];
|
|
159
163
|
}
|
|
@@ -163,7 +167,7 @@ export function limitPart(limit: number | undefined, noun: string): string {
|
|
|
163
167
|
return limit === undefined ? `Unlimited ${noun}s` : plural(limit, noun);
|
|
164
168
|
}
|
|
165
169
|
|
|
166
|
-
/** The granted features by name, in contract order: "SSO enforcement,
|
|
170
|
+
/** The granted features by name, in contract order: "SSO enforcement, Bring your own provider keys". */
|
|
167
171
|
export function featureNames(features: readonly number[]): string {
|
|
168
172
|
const names = GRANTABLE_FEATURES.filter((f) => features.includes(f)).map((f) => FEATURE_LABELS[f].label);
|
|
169
173
|
return names.length === 0 ? "No features" : names.join(", ");
|
|
@@ -156,20 +156,18 @@ function ConnectDialogContent({
|
|
|
156
156
|
|
|
157
157
|
const serverName = mcpServer?.metadata?.name ?? slug;
|
|
158
158
|
const serverId = mcpServer?.metadata?.id ?? "";
|
|
159
|
-
const declaredEnvKeys = Object.keys(mcpServer?.spec?.env ?? {});
|
|
160
|
-
|
|
161
159
|
const handleConnect = useCallback(async () => {
|
|
162
160
|
if (!serverId) return;
|
|
163
161
|
|
|
164
162
|
setPhase("connecting");
|
|
165
163
|
try {
|
|
166
|
-
await connect(serverId, activeOrg
|
|
164
|
+
await connect(serverId, activeOrg);
|
|
167
165
|
setPhase("success");
|
|
168
166
|
onConnected?.(serverName);
|
|
169
167
|
} catch {
|
|
170
168
|
setPhase("error");
|
|
171
169
|
}
|
|
172
|
-
}, [serverId, activeOrg,
|
|
170
|
+
}, [serverId, activeOrg, connect, onConnected, serverName]);
|
|
173
171
|
|
|
174
172
|
const handleCredentialSubmit = useCallback(
|
|
175
173
|
async (values: Record<string, EnvVarInput>) => {
|
|
@@ -188,7 +186,7 @@ function ConnectDialogContent({
|
|
|
188
186
|
void handleConnect();
|
|
189
187
|
return;
|
|
190
188
|
}
|
|
191
|
-
oauth.startOAuth(serverId, activeOrg
|
|
189
|
+
oauth.startOAuth(serverId, activeOrg).then(
|
|
192
190
|
() => {
|
|
193
191
|
creds.refetch();
|
|
194
192
|
setPhase("success");
|
|
@@ -203,7 +201,7 @@ function ConnectDialogContent({
|
|
|
203
201
|
setPhase("error");
|
|
204
202
|
},
|
|
205
203
|
);
|
|
206
|
-
}, [serverId, activeOrg,
|
|
204
|
+
}, [serverId, activeOrg, oauth, creds, onConnected, serverName, handleConnect]);
|
|
207
205
|
|
|
208
206
|
// Auto-trigger connect when credentials become ready (manual-only servers)
|
|
209
207
|
useEffect(() => {
|
|
@@ -50,6 +50,7 @@ import { InlineEditKeyValue } from "../inline-edit/InlineEditKeyValue.js";
|
|
|
50
50
|
import type { KeyValueRow, SelectOption } from "../inline-edit/types.js";
|
|
51
51
|
import { ManagedByPluginNotice } from "../plugin/ManagedByPluginNotice.js";
|
|
52
52
|
import { useManagingPlugin } from "../plugin/useManagingPlugin.js";
|
|
53
|
+
import { LoadingRegion } from "../internal/LoadingRegion.js";
|
|
53
54
|
|
|
54
55
|
/** Tab identifier for the MCP server capability panel. */
|
|
55
56
|
export type CapabilityTab = "tools" | "policies" | "resources";
|
|
@@ -263,9 +264,8 @@ export function McpServerDetailView({
|
|
|
263
264
|
const handleOAuthSignIn = useCallback(async () => {
|
|
264
265
|
if (!mcpServer?.metadata?.id) return;
|
|
265
266
|
|
|
266
|
-
const envKeys = Object.keys(mcpServer.spec?.env ?? {});
|
|
267
267
|
try {
|
|
268
|
-
await oauth.startOAuth(mcpServer.metadata.id, activeOrg ?? org
|
|
268
|
+
await oauth.startOAuth(mcpServer.metadata.id, activeOrg ?? org);
|
|
269
269
|
credentials.refetch();
|
|
270
270
|
refetch();
|
|
271
271
|
} catch {
|
|
@@ -305,9 +305,8 @@ export function McpServerDetailView({
|
|
|
305
305
|
return;
|
|
306
306
|
}
|
|
307
307
|
|
|
308
|
-
const envKeys = Object.keys(mcpServer.spec?.env ?? {});
|
|
309
308
|
try {
|
|
310
|
-
await connection.connect(mcpServer.metadata.id, activeOrg ?? org
|
|
309
|
+
await connection.connect(mcpServer.metadata.id, activeOrg ?? org);
|
|
311
310
|
// Discovery succeeded — retire the OAuth chain's stale
|
|
312
311
|
// discovery-failure error so the banner doesn't outlive the state
|
|
313
312
|
// it described.
|
|
@@ -330,9 +329,8 @@ export function McpServerDetailView({
|
|
|
330
329
|
}
|
|
331
330
|
|
|
332
331
|
if (mcpServer?.metadata?.id) {
|
|
333
|
-
const envKeys = Object.keys(mcpServer.spec?.env ?? {});
|
|
334
332
|
const connectOrg = activeOrg ?? org;
|
|
335
|
-
await connection.connect(mcpServer.metadata.id, connectOrg, values
|
|
333
|
+
await connection.connect(mcpServer.metadata.id, connectOrg, values);
|
|
336
334
|
refetch();
|
|
337
335
|
}
|
|
338
336
|
|
|
@@ -2205,10 +2203,9 @@ function Dot() {
|
|
|
2205
2203
|
|
|
2206
2204
|
function LoadingSkeleton({ className }: { readonly className?: string }) {
|
|
2207
2205
|
return (
|
|
2208
|
-
<
|
|
2206
|
+
<LoadingRegion
|
|
2209
2207
|
className={cn("stg:flex stg:flex-col stg:gap-6", className)}
|
|
2210
|
-
|
|
2211
|
-
aria-label="Loading MCP server details"
|
|
2208
|
+
label="Loading MCP server details"
|
|
2212
2209
|
>
|
|
2213
2210
|
<div className="stg:flex stg:items-start stg:gap-3">
|
|
2214
2211
|
<div className="stg:mt-1 stg:size-6 stg:shrink-0 stg:animate-pulse stg:rounded stg:bg-muted" />
|
|
@@ -2227,7 +2224,7 @@ function LoadingSkeleton({ className }: { readonly className?: string }) {
|
|
|
2227
2224
|
/>
|
|
2228
2225
|
</div>
|
|
2229
2226
|
))}
|
|
2230
|
-
</
|
|
2227
|
+
</LoadingRegion>
|
|
2231
2228
|
);
|
|
2232
2229
|
}
|
|
2233
2230
|
|
|
@@ -428,11 +428,6 @@ export function McpServerPicker({
|
|
|
428
428
|
(oauthStatus?.vendorApprovalStatus === VendorApprovalStatus.PENDING ||
|
|
429
429
|
oauthStatus?.vendorApprovalStatus === VendorApprovalStatus.REJECTED);
|
|
430
430
|
|
|
431
|
-
// System env vars are only injected when the server declares them —
|
|
432
|
-
// the dialog and detail view pass these on every OAuth chain and
|
|
433
|
-
// bare connect; the picker must too.
|
|
434
|
-
const declaredEnvKeys = Object.keys(entry.mcpServer.spec?.env ?? {});
|
|
435
|
-
|
|
436
431
|
// Scope the shared hooks' signals to the server they belong to.
|
|
437
432
|
const isOwnOAuthAttempt = oauthAttemptKey === view.serverKey;
|
|
438
433
|
const oauthError = isOwnOAuthAttempt ? oauth.error : null;
|
|
@@ -476,12 +471,7 @@ export function McpServerPicker({
|
|
|
476
471
|
// server-side. Retry bare discovery; never relaunch the
|
|
477
472
|
// popup (stigmer/stigmer#418).
|
|
478
473
|
try {
|
|
479
|
-
await discovery.connect(
|
|
480
|
-
serverId,
|
|
481
|
-
connectOrg,
|
|
482
|
-
undefined,
|
|
483
|
-
declaredEnvKeys,
|
|
484
|
-
);
|
|
474
|
+
await discovery.connect(serverId, connectOrg);
|
|
485
475
|
// Discovery succeeded — retire the chain's stale
|
|
486
476
|
// failure and re-evaluate the entry so it resolves
|
|
487
477
|
// ready with the discovered tools.
|
|
@@ -494,7 +484,7 @@ export function McpServerPicker({
|
|
|
494
484
|
}
|
|
495
485
|
|
|
496
486
|
try {
|
|
497
|
-
await oauth.startOAuth(serverId, connectOrg
|
|
487
|
+
await oauth.startOAuth(serverId, connectOrg);
|
|
498
488
|
setup.onServerAdded(ref);
|
|
499
489
|
} catch {
|
|
500
490
|
// error state managed by oauth hook
|
|
@@ -178,7 +178,7 @@ export function McpToolSelector({
|
|
|
178
178
|
onChange={() => handleToggle(tool.name)}
|
|
179
179
|
disabled={disabled}
|
|
180
180
|
aria-describedby={descId}
|
|
181
|
-
className="stg:mt-0.5 stg:size-3 stg:shrink-0 stg:
|
|
181
|
+
className="stg:mt-0.5 stg:size-3 stg:shrink-0 stg:disabled:pointer-events-none stg:disabled:opacity-50"
|
|
182
182
|
/>
|
|
183
183
|
<span className="stg:min-w-0 stg:flex-1">
|
|
184
184
|
<span className="stg:flex stg:items-center stg:gap-1.5">
|
|
@@ -6,7 +6,6 @@ import type { McpServer } from "@stigmer/protos/ai/stigmer/agentic/mcpserver/v1/
|
|
|
6
6
|
import { ConnectInputSchema } from "@stigmer/protos/ai/stigmer/agentic/mcpserver/v1/io_pb";
|
|
7
7
|
import { connectAndWait, type EnvVarInput } from "@stigmer/sdk";
|
|
8
8
|
import { useStigmer } from "../hooks.js";
|
|
9
|
-
import { resolveDeclaredSystemEnvVars } from "../environment/systemEnvVars.js";
|
|
10
9
|
import { toError } from "../internal/toError.js";
|
|
11
10
|
|
|
12
11
|
/** Return value of {@link useMcpServerConnect}. */
|
|
@@ -22,23 +21,19 @@ export interface UseMcpServerConnectReturn {
|
|
|
22
21
|
* survives browser transport limits. Backends without the lane fall
|
|
23
22
|
* back to the blocking `connect` RPC transparently.
|
|
24
23
|
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
* When omitted, no system vars are injected.
|
|
24
|
+
* Without `runtimeEnv`, the backend resolves the server's declared
|
|
25
|
+
* variables itself: OAuth tokens from the managed grant, the rest from
|
|
26
|
+
* the caller's personal environment. The platform's own keys are
|
|
27
|
+
* filled by the runner, never sent from here (`SYSTEM_ENV_VAR_KEYS`).
|
|
30
28
|
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
* OAuth tokens) are still resolved.
|
|
29
|
+
* With `runtimeEnv`, the backend connects with exactly those values
|
|
30
|
+
* and resolves nothing else (stigmer/stigmer#1453), so pass it only
|
|
31
|
+
* for a one-time connect whose values the caller supplies whole.
|
|
35
32
|
*
|
|
36
33
|
* @param mcpServerId - System-generated ID of the MCP server (metadata.id).
|
|
37
34
|
* @param org - The caller's active organization slug. Required for
|
|
38
35
|
* OAuth grant lookup and personal environment resolution.
|
|
39
|
-
* @param runtimeEnv - Optional
|
|
40
|
-
* @param declaredEnvKeys - Keys from the server's `spec.env` declaration.
|
|
41
|
-
* System vars are only injected when declared here.
|
|
36
|
+
* @param runtimeEnv - Optional one-time values for this connect.
|
|
42
37
|
* @returns The updated McpServer with populated status.discovered_capabilities
|
|
43
38
|
* and status.tool_approvals.
|
|
44
39
|
*/
|
|
@@ -46,7 +41,6 @@ export interface UseMcpServerConnectReturn {
|
|
|
46
41
|
mcpServerId: string,
|
|
47
42
|
org: string,
|
|
48
43
|
runtimeEnv?: Record<string, EnvVarInput>,
|
|
49
|
-
declaredEnvKeys?: readonly string[],
|
|
50
44
|
) => Promise<McpServer>;
|
|
51
45
|
/** `true` while the connect operation is in flight (start through settle). */
|
|
52
46
|
readonly isConnecting: boolean;
|
|
@@ -64,14 +58,9 @@ export interface UseMcpServerConnectReturn {
|
|
|
64
58
|
* server's tools and resource templates, then classifies each tool's
|
|
65
59
|
* approval policy via a structured-output LLM call.
|
|
66
60
|
*
|
|
67
|
-
*
|
|
68
|
-
*
|
|
69
|
-
*
|
|
70
|
-
* via `declaredEnvKeys` so the hook knows which system vars to
|
|
71
|
-
* include. When not provided, no system vars are injected.
|
|
72
|
-
*
|
|
73
|
-
* Additional one-time credentials can be passed via `runtimeEnv`
|
|
74
|
-
* and will override both system vars and personal env values.
|
|
61
|
+
* Saved credentials need nothing from the caller: the backend resolves
|
|
62
|
+
* them. One-time credentials ride `runtimeEnv` and replace that
|
|
63
|
+
* resolution for this connect.
|
|
75
64
|
*
|
|
76
65
|
* @example
|
|
77
66
|
* ```tsx
|
|
@@ -80,15 +69,13 @@ export interface UseMcpServerConnectReturn {
|
|
|
80
69
|
*
|
|
81
70
|
* // Saved credentials: already in personal environment
|
|
82
71
|
* async function handleConnectSaved() {
|
|
83
|
-
*
|
|
84
|
-
* await connect(mcpServer.metadata.id, undefined, envKeys);
|
|
72
|
+
* await connect(mcpServer.metadata.id, org);
|
|
85
73
|
* refetch();
|
|
86
74
|
* }
|
|
87
75
|
*
|
|
88
76
|
* // One-time use: pass credentials directly
|
|
89
77
|
* async function handleConnectTemporary(values: Record<string, EnvVarInput>) {
|
|
90
|
-
*
|
|
91
|
-
* await connect(mcpServer.metadata.id, values, envKeys);
|
|
78
|
+
* await connect(mcpServer.metadata.id, org, values);
|
|
92
79
|
* refetch();
|
|
93
80
|
* }
|
|
94
81
|
* ```
|
|
@@ -105,19 +92,13 @@ export function useMcpServerConnect(): UseMcpServerConnectReturn {
|
|
|
105
92
|
mcpServerId: string,
|
|
106
93
|
org: string,
|
|
107
94
|
runtimeEnv?: Record<string, EnvVarInput>,
|
|
108
|
-
declaredEnvKeys?: readonly string[],
|
|
109
95
|
): Promise<McpServer> => {
|
|
110
96
|
setIsConnecting(true);
|
|
111
97
|
setError(null);
|
|
112
98
|
|
|
113
99
|
try {
|
|
114
|
-
const systemEnv = declaredEnvKeys
|
|
115
|
-
? await resolveDeclaredSystemEnvVars(stigmer, declaredEnvKeys)
|
|
116
|
-
: {};
|
|
117
|
-
const mergedEnv = { ...systemEnv, ...(runtimeEnv ?? {}) };
|
|
118
|
-
|
|
119
100
|
const runtimeEnvMap: Record<string, { value: string; isSecret: boolean }> = {};
|
|
120
|
-
for (const [key, envInput] of Object.entries(
|
|
101
|
+
for (const [key, envInput] of Object.entries(runtimeEnv ?? {})) {
|
|
121
102
|
runtimeEnvMap[key] = {
|
|
122
103
|
value: envInput.value,
|
|
123
104
|
isSecret: envInput.isSecret ?? false,
|