@stigmer/react 3.12.0 → 3.12.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/access/ManageAccessDialog.d.ts.map +1 -1
- package/access/ManageAccessDialog.js +7 -2
- package/access/ManageAccessDialog.js.map +1 -1
- package/activity/format-relative-time.d.ts +11 -9
- package/activity/format-relative-time.d.ts.map +1 -1
- package/activity/format-relative-time.js +11 -9
- package/activity/format-relative-time.js.map +1 -1
- package/agent/steps/CapabilitiesStep.js +5 -2
- package/agent/steps/CapabilitiesStep.js.map +1 -1
- package/agent/steps/IdentityStep.d.ts.map +1 -1
- package/agent/steps/IdentityStep.js +6 -5
- package/agent/steps/IdentityStep.js.map +1 -1
- package/agent-instance/CreateAgentInstanceDialog.d.ts.map +1 -1
- package/agent-instance/CreateAgentInstanceDialog.js +10 -2
- package/agent-instance/CreateAgentInstanceDialog.js.map +1 -1
- package/api-key/ApiKeyCreatedAlert.d.ts.map +1 -1
- package/api-key/ApiKeyCreatedAlert.js +12 -20
- package/api-key/ApiKeyCreatedAlert.js.map +1 -1
- package/api-key/ApiKeyListPanel.d.ts.map +1 -1
- package/api-key/ApiKeyListPanel.js +3 -23
- package/api-key/ApiKeyListPanel.js.map +1 -1
- package/api-key/CreateApiKeyForm.d.ts.map +1 -1
- package/api-key/CreateApiKeyForm.js +6 -10
- package/api-key/CreateApiKeyForm.js.map +1 -1
- package/approval-defaults-context.d.ts +47 -0
- package/approval-defaults-context.d.ts.map +1 -0
- package/approval-defaults-context.js +27 -0
- package/approval-defaults-context.js.map +1 -0
- package/attachment/index.d.ts +2 -0
- package/attachment/index.d.ts.map +1 -1
- package/attachment/index.js +1 -0
- package/attachment/index.js.map +1 -1
- package/attachment/vision-preflight.d.ts +113 -0
- package/attachment/vision-preflight.d.ts.map +1 -0
- package/attachment/vision-preflight.js +143 -0
- package/attachment/vision-preflight.js.map +1 -0
- package/billing/AutoRechargeCard.d.ts.map +1 -1
- package/billing/AutoRechargeCard.js +3 -2
- package/billing/AutoRechargeCard.js.map +1 -1
- package/billing/BillingSection.d.ts.map +1 -1
- package/billing/BillingSection.js +3 -2
- package/billing/BillingSection.js.map +1 -1
- package/channel/ChannelConversationsDialog.d.ts.map +1 -1
- package/channel/ChannelConversationsDialog.js +5 -4
- package/channel/ChannelConversationsDialog.js.map +1 -1
- package/channel/ChannelCredentialsDialog.d.ts.map +1 -1
- package/channel/ChannelCredentialsDialog.js +9 -4
- package/channel/ChannelCredentialsDialog.js.map +1 -1
- package/channel/ChannelTemplatesDialog.d.ts.map +1 -1
- package/channel/ChannelTemplatesDialog.js +5 -4
- package/channel/ChannelTemplatesDialog.js.map +1 -1
- package/channel/ConnectSlackDialog.d.ts.map +1 -1
- package/channel/ConnectSlackDialog.js +9 -4
- package/channel/ConnectSlackDialog.js.map +1 -1
- package/channel/ConnectWhatsAppDialog.d.ts.map +1 -1
- package/channel/ConnectWhatsAppDialog.js +9 -4
- package/channel/ConnectWhatsAppDialog.js.map +1 -1
- package/channel/useChannelSessions.d.ts.map +1 -1
- package/channel/useChannelSessions.js.map +1 -1
- package/channel-app/ChannelAppDetailPanel.d.ts.map +1 -1
- package/channel-app/ChannelAppDetailPanel.js +8 -5
- package/channel-app/ChannelAppDetailPanel.js.map +1 -1
- package/channel-app/CreateChannelAppForm.d.ts.map +1 -1
- package/channel-app/CreateChannelAppForm.js +12 -7
- package/channel-app/CreateChannelAppForm.js.map +1 -1
- package/channel-app/internal.d.ts +0 -1
- package/channel-app/internal.d.ts.map +1 -1
- package/channel-app/internal.js +5 -10
- package/channel-app/internal.js.map +1 -1
- package/composer/ComposerToolbar.js +2 -1
- package/composer/ComposerToolbar.js.map +1 -1
- package/composer/SessionComposer.d.ts +1 -1
- package/composer/SessionComposer.d.ts.map +1 -1
- package/composer/SessionComposer.js +120 -13
- package/composer/SessionComposer.js.map +1 -1
- package/composer/icons.d.ts +0 -1
- package/composer/icons.d.ts.map +1 -1
- package/composer/icons.js +0 -3
- package/composer/icons.js.map +1 -1
- package/conversation/ConversationComposer.js +1 -1
- package/conversation/ConversationComposer.js.map +1 -1
- package/conversation/ConversationListPane.d.ts.map +1 -1
- package/conversation/ConversationListPane.js +3 -2
- package/conversation/ConversationListPane.js.map +1 -1
- package/cursor-accounts/MemberCoverageTable.js +3 -14
- package/cursor-accounts/MemberCoverageTable.js.map +1 -1
- package/dashboard/DashboardFailedRuns.d.ts.map +1 -1
- package/dashboard/DashboardFailedRuns.js +2 -14
- package/dashboard/DashboardFailedRuns.js.map +1 -1
- package/environment/CreateEnvironmentForm.d.ts.map +1 -1
- package/environment/CreateEnvironmentForm.js +4 -8
- package/environment/CreateEnvironmentForm.js.map +1 -1
- package/environment/EnvVarForm.d.ts.map +1 -1
- package/environment/EnvVarForm.js +2 -4
- package/environment/EnvVarForm.js.map +1 -1
- package/environment/EnvironmentVariableEditor.d.ts.map +1 -1
- package/environment/EnvironmentVariableEditor.js +5 -7
- package/environment/EnvironmentVariableEditor.js.map +1 -1
- package/execution/ArtifactApplyButton.d.ts.map +1 -1
- package/execution/ArtifactApplyButton.js +2 -4
- package/execution/ArtifactApplyButton.js.map +1 -1
- package/execution/ExecutionErrorNotice.d.ts +36 -0
- package/execution/ExecutionErrorNotice.d.ts.map +1 -0
- package/execution/ExecutionErrorNotice.js +39 -0
- package/execution/ExecutionErrorNotice.js.map +1 -0
- package/execution/FilePathLink.d.ts.map +1 -1
- package/execution/FilePathLink.js +5 -8
- package/execution/FilePathLink.js.map +1 -1
- package/execution/FileReviewCard.d.ts.map +1 -1
- package/execution/FileReviewCard.js +1 -6
- package/execution/FileReviewCard.js.map +1 -1
- package/execution/FollowUpInput.d.ts.map +1 -1
- package/execution/FollowUpInput.js +1 -3
- package/execution/FollowUpInput.js.map +1 -1
- package/execution/LivenessStatusLine.d.ts +40 -0
- package/execution/LivenessStatusLine.d.ts.map +1 -0
- package/execution/LivenessStatusLine.js +34 -0
- package/execution/LivenessStatusLine.js.map +1 -0
- package/execution/MessageEntry.d.ts.map +1 -1
- package/execution/MessageEntry.js +31 -3
- package/execution/MessageEntry.js.map +1 -1
- package/execution/MessageThread.d.ts +25 -0
- package/execution/MessageThread.d.ts.map +1 -1
- package/execution/MessageThread.js +51 -36
- package/execution/MessageThread.js.map +1 -1
- package/execution/SetupProgress.d.ts.map +1 -1
- package/execution/SetupProgress.js +1 -1
- package/execution/SetupProgress.js.map +1 -1
- package/execution/SubAgentSection.d.ts.map +1 -1
- package/execution/SubAgentSection.js +9 -7
- package/execution/SubAgentSection.js.map +1 -1
- package/execution/TerminalSession.d.ts +30 -0
- package/execution/TerminalSession.d.ts.map +1 -1
- package/execution/TerminalSession.js +37 -1
- package/execution/TerminalSession.js.map +1 -1
- package/execution/ToolCallDetail.d.ts +9 -0
- package/execution/ToolCallDetail.d.ts.map +1 -1
- package/execution/ToolCallDetail.js +16 -0
- package/execution/ToolCallDetail.js.map +1 -1
- package/execution/ToolCallItem.d.ts +20 -6
- package/execution/ToolCallItem.d.ts.map +1 -1
- package/execution/ToolCallItem.js +102 -29
- package/execution/ToolCallItem.js.map +1 -1
- package/execution/ToolRunGroup.d.ts.map +1 -1
- package/execution/ToolRunGroup.js +11 -11
- package/execution/ToolRunGroup.js.map +1 -1
- package/execution/WriteBackCard.d.ts.map +1 -1
- package/execution/WriteBackCard.js +5 -20
- package/execution/WriteBackCard.js.map +1 -1
- package/execution/index.d.ts +6 -2
- package/execution/index.d.ts.map +1 -1
- package/execution/index.js +3 -1
- package/execution/index.js.map +1 -1
- package/execution/tool-categories.d.ts +42 -7
- package/execution/tool-categories.d.ts.map +1 -1
- package/execution/tool-categories.js +38 -4
- package/execution/tool-categories.js.map +1 -1
- package/execution/tool-presenter.d.ts +17 -1
- package/execution/tool-presenter.d.ts.map +1 -1
- package/execution/tool-presenter.js +4 -1
- package/execution/tool-presenter.js.map +1 -1
- package/execution/useArtifactInspection.d.ts.map +1 -1
- package/execution/useArtifactInspection.js +4 -7
- package/execution/useArtifactInspection.js.map +1 -1
- package/execution/useCreateAgentExecution.d.ts +3 -2
- package/execution/useCreateAgentExecution.d.ts.map +1 -1
- package/execution/useCreateAgentExecution.js.map +1 -1
- package/iam-policy/GrantAccessForm.d.ts.map +1 -1
- package/iam-policy/GrantAccessForm.js +2 -4
- package/iam-policy/GrantAccessForm.js.map +1 -1
- package/iam-policy/OrgMembersPanel.d.ts.map +1 -1
- package/iam-policy/OrgMembersPanel.js +3 -5
- package/iam-policy/OrgMembersPanel.js.map +1 -1
- package/iam-policy/RoleSelector.d.ts.map +1 -1
- package/iam-policy/RoleSelector.js +7 -1
- package/iam-policy/RoleSelector.js.map +1 -1
- package/identity-provider/CreateIdentityProviderForm.d.ts.map +1 -1
- package/identity-provider/CreateIdentityProviderForm.js +6 -9
- package/identity-provider/CreateIdentityProviderForm.js.map +1 -1
- package/identity-provider/IdentityProviderDetailPanel.d.ts.map +1 -1
- package/identity-provider/IdentityProviderDetailPanel.js +17 -26
- package/identity-provider/IdentityProviderDetailPanel.js.map +1 -1
- package/identity-provider/IdentityProviderListPanel.d.ts.map +1 -1
- package/identity-provider/IdentityProviderListPanel.js +2 -4
- package/identity-provider/IdentityProviderListPanel.js.map +1 -1
- package/identity-provider/IdentityProviderWizard.d.ts.map +1 -1
- package/identity-provider/IdentityProviderWizard.js +8 -7
- package/identity-provider/IdentityProviderWizard.js.map +1 -1
- package/identity-provider/SsoLoginPrompt.js +5 -6
- package/identity-provider/SsoLoginPrompt.js.map +1 -1
- package/index.d.ts +9 -8
- package/index.d.ts.map +1 -1
- package/index.js +4 -4
- package/index.js.map +1 -1
- package/internal/DecisionButton.d.ts.map +1 -1
- package/internal/DecisionButton.js +1 -6
- package/internal/DecisionButton.js.map +1 -1
- package/internal/SpinnerIcon.d.ts +22 -0
- package/internal/SpinnerIcon.d.ts.map +1 -0
- package/internal/SpinnerIcon.js +23 -0
- package/internal/SpinnerIcon.js.map +1 -0
- package/internal/isUnimplemented.d.ts +17 -0
- package/internal/isUnimplemented.d.ts.map +1 -0
- package/internal/isUnimplemented.js +26 -0
- package/internal/isUnimplemented.js.map +1 -0
- package/internal/select-element-text.d.ts +11 -0
- package/internal/select-element-text.d.ts.map +1 -0
- package/internal/select-element-text.js +19 -0
- package/internal/select-element-text.js.map +1 -0
- package/internal/thread-card/ThreadCardShell.d.ts +27 -10
- package/internal/thread-card/ThreadCardShell.d.ts.map +1 -1
- package/internal/thread-card/ThreadCardShell.js +11 -5
- package/internal/thread-card/ThreadCardShell.js.map +1 -1
- package/internal/thread-card/glyphs.d.ts +11 -2
- package/internal/thread-card/glyphs.d.ts.map +1 -1
- package/internal/thread-card/glyphs.js +9 -3
- package/internal/thread-card/glyphs.js.map +1 -1
- package/internal/thread-card/index.d.ts +1 -1
- package/internal/thread-card/index.d.ts.map +1 -1
- package/internal/thread-card/index.js.map +1 -1
- package/internal/useCopyFeedback.d.ts +28 -0
- package/internal/useCopyFeedback.d.ts.map +1 -0
- package/internal/useCopyFeedback.js +40 -0
- package/internal/useCopyFeedback.js.map +1 -0
- package/invitation/InvitationCreatedAlert.d.ts.map +1 -1
- package/invitation/InvitationCreatedAlert.js +12 -19
- package/invitation/InvitationCreatedAlert.js.map +1 -1
- package/invitation/InvitationManager.d.ts.map +1 -1
- package/invitation/InvitationManager.js +14 -21
- package/invitation/InvitationManager.js.map +1 -1
- package/invitation/InvitationRedemption.d.ts.map +1 -1
- package/invitation/InvitationRedemption.js +2 -4
- package/invitation/InvitationRedemption.js.map +1 -1
- package/library/useExportResource.d.ts.map +1 -1
- package/library/useExportResource.js +16 -27
- package/library/useExportResource.js.map +1 -1
- package/manifest/ApplyManifestDialog.js +1 -1
- package/manifest/EditResourceYamlDialog.js +1 -1
- package/mcp-server/DefinitionDriftNotice.d.ts +42 -0
- package/mcp-server/DefinitionDriftNotice.d.ts.map +1 -0
- package/mcp-server/DefinitionDriftNotice.js +52 -0
- package/mcp-server/DefinitionDriftNotice.js.map +1 -0
- package/mcp-server/McpServerConnectDialog.js +8 -4
- package/mcp-server/McpServerConnectDialog.js.map +1 -1
- package/mcp-server/McpServerDetailView.d.ts.map +1 -1
- package/mcp-server/McpServerDetailView.js +47 -14
- package/mcp-server/McpServerDetailView.js.map +1 -1
- package/mcp-server/OAuthAppForm.d.ts.map +1 -1
- package/mcp-server/OAuthAppForm.js +2 -4
- package/mcp-server/OAuthAppForm.js.map +1 -1
- package/mcp-server/internal/definitionDrift.d.ts +39 -0
- package/mcp-server/internal/definitionDrift.d.ts.map +1 -0
- package/mcp-server/internal/definitionDrift.js +122 -0
- package/mcp-server/internal/definitionDrift.js.map +1 -0
- package/mcp-server/internal/mcpServerToInput.d.ts.map +1 -1
- package/mcp-server/internal/mcpServerToInput.js +3 -0
- package/mcp-server/internal/mcpServerToInput.js.map +1 -1
- package/mcp-server/steps/EnvironmentAuthStep.d.ts.map +1 -1
- package/mcp-server/steps/EnvironmentAuthStep.js +8 -4
- package/mcp-server/steps/EnvironmentAuthStep.js.map +1 -1
- package/mcp-server/steps/IdentityTransportStep.d.ts.map +1 -1
- package/mcp-server/steps/IdentityTransportStep.js +5 -4
- package/mcp-server/steps/IdentityTransportStep.js.map +1 -1
- package/mcp-server/useMcpServerConnect.d.ts +1 -1
- package/mcp-server/useMcpServerCredentials.d.ts +38 -10
- package/mcp-server/useMcpServerCredentials.d.ts.map +1 -1
- package/mcp-server/useMcpServerCredentials.js +50 -7
- package/mcp-server/useMcpServerCredentials.js.map +1 -1
- package/mcp-server/useMcpServerDefinitionDrift.d.ts +44 -0
- package/mcp-server/useMcpServerDefinitionDrift.d.ts.map +1 -0
- package/mcp-server/useMcpServerDefinitionDrift.js +61 -0
- package/mcp-server/useMcpServerDefinitionDrift.js.map +1 -0
- package/mcp-server/useOrgOAuthApp.d.ts +22 -0
- package/mcp-server/useOrgOAuthApp.d.ts.map +1 -1
- package/mcp-server/useOrgOAuthApp.js +39 -7
- package/mcp-server/useOrgOAuthApp.js.map +1 -1
- package/models/ModelRegistryContext.d.ts +7 -1
- package/models/ModelRegistryContext.d.ts.map +1 -1
- package/models/ModelRegistryContext.js.map +1 -1
- package/models/ModelSelector.js +9 -1
- package/models/ModelSelector.js.map +1 -1
- package/models/index.d.ts +2 -2
- package/models/index.d.ts.map +1 -1
- package/models/index.js +1 -1
- package/models/index.js.map +1 -1
- package/models/registry.d.ts +88 -6
- package/models/registry.d.ts.map +1 -1
- package/models/registry.js +133 -27
- package/models/registry.js.map +1 -1
- package/models/useModelRegistry.d.ts +7 -1
- package/models/useModelRegistry.d.ts.map +1 -1
- package/models/useModelRegistry.js +3 -2
- package/models/useModelRegistry.js.map +1 -1
- package/oauth-app/CreateOAuthAppForm.d.ts.map +1 -1
- package/oauth-app/CreateOAuthAppForm.js +4 -5
- package/oauth-app/CreateOAuthAppForm.js.map +1 -1
- package/oauth-app/OAuthAppDetailPanel.d.ts.map +1 -1
- package/oauth-app/OAuthAppDetailPanel.js +5 -6
- package/oauth-app/OAuthAppDetailPanel.js.map +1 -1
- package/organization/CreateOrganizationForm.d.ts.map +1 -1
- package/organization/CreateOrganizationForm.js +5 -9
- package/organization/CreateOrganizationForm.js.map +1 -1
- package/organization/OrgProfilePanel.d.ts.map +1 -1
- package/organization/OrgProfilePanel.js +7 -16
- package/organization/OrgProfilePanel.js.map +1 -1
- package/package.json +4 -4
- package/platform-client/CreatePlatformClientForm.d.ts.map +1 -1
- package/platform-client/CreatePlatformClientForm.js +5 -6
- package/platform-client/CreatePlatformClientForm.js.map +1 -1
- package/platform-client/PlatformClientDetailPanel.d.ts.map +1 -1
- package/platform-client/PlatformClientDetailPanel.js +6 -7
- package/platform-client/PlatformClientDetailPanel.js.map +1 -1
- package/platform-client/PlatformClientListPanel.d.ts.map +1 -1
- package/platform-client/PlatformClientListPanel.js +2 -4
- package/platform-client/PlatformClientListPanel.js.map +1 -1
- package/platform-client/PlatformClientSecretAlert.d.ts.map +1 -1
- package/platform-client/PlatformClientSecretAlert.js +18 -25
- package/platform-client/PlatformClientSecretAlert.js.map +1 -1
- package/provider.d.ts +34 -1
- package/provider.d.ts.map +1 -1
- package/provider.js +14 -7
- package/provider.js.map +1 -1
- package/resource-creation/WizardNav.d.ts.map +1 -1
- package/resource-creation/WizardNav.js +2 -4
- package/resource-creation/WizardNav.js.map +1 -1
- package/resource-detail/ConfirmDialog.js +1 -1
- package/resource-detail/useCopyResource.d.ts +4 -3
- package/resource-detail/useCopyResource.d.ts.map +1 -1
- package/resource-detail/useCopyResource.js +10 -19
- package/resource-detail/useCopyResource.js.map +1 -1
- package/schedule/ScheduleDetailView.d.ts.map +1 -1
- package/schedule/ScheduleDetailView.js +2 -4
- package/schedule/ScheduleDetailView.js.map +1 -1
- package/schedule/ScheduleForm.d.ts.map +1 -1
- package/schedule/ScheduleForm.js +6 -7
- package/schedule/ScheduleForm.js.map +1 -1
- package/session/NewSessionViewer.d.ts +52 -2
- package/session/NewSessionViewer.d.ts.map +1 -1
- package/session/NewSessionViewer.js +21 -6
- package/session/NewSessionViewer.js.map +1 -1
- package/session/SessionViewer.d.ts +63 -2
- package/session/SessionViewer.d.ts.map +1 -1
- package/session/SessionViewer.js +43 -17
- package/session/SessionViewer.js.map +1 -1
- package/session/audience.d.ts +17 -0
- package/session/audience.d.ts.map +1 -1
- package/session/index.d.ts +2 -1
- package/session/index.d.ts.map +1 -1
- package/session/index.js.map +1 -1
- package/session/run-config.d.ts +50 -0
- package/session/run-config.d.ts.map +1 -0
- package/session/run-config.js +15 -0
- package/session/run-config.js.map +1 -0
- package/session/useNewSessionFlow.d.ts +11 -0
- package/session/useNewSessionFlow.d.ts.map +1 -1
- package/session/useNewSessionFlow.js +29 -2
- package/session/useNewSessionFlow.js.map +1 -1
- package/session/useSessionConversation.d.ts +11 -9
- package/session/useSessionConversation.d.ts.map +1 -1
- package/session/useSessionConversation.js +2 -0
- package/session/useSessionConversation.js.map +1 -1
- package/session/useSessionPageFlow.d.ts +18 -4
- package/session/useSessionPageFlow.d.ts.map +1 -1
- package/session/useSessionPageFlow.js +33 -6
- package/session/useSessionPageFlow.js.map +1 -1
- package/session/useSessionPanel.d.ts +37 -2
- package/session/useSessionPanel.d.ts.map +1 -1
- package/session/useSessionPanel.js +44 -10
- package/session/useSessionPanel.js.map +1 -1
- package/settings/ApiKeysSection.d.ts.map +1 -1
- package/settings/ApiKeysSection.js +3 -2
- package/settings/ApiKeysSection.js.map +1 -1
- package/settings/ChannelAppsSection.d.ts.map +1 -1
- package/settings/ChannelAppsSection.js +3 -2
- package/settings/ChannelAppsSection.js.map +1 -1
- package/settings/EnvironmentsSection.js +5 -3
- package/settings/EnvironmentsSection.js.map +1 -1
- package/settings/IdentityProvidersSection.d.ts.map +1 -1
- package/settings/IdentityProvidersSection.js +3 -2
- package/settings/IdentityProvidersSection.js.map +1 -1
- package/settings/InvitationsSection.d.ts.map +1 -1
- package/settings/InvitationsSection.js +3 -1
- package/settings/InvitationsSection.js.map +1 -1
- package/settings/MembersSection.d.ts.map +1 -1
- package/settings/MembersSection.js +3 -1
- package/settings/MembersSection.js.map +1 -1
- package/settings/OAuthAppsSection.d.ts.map +1 -1
- package/settings/OAuthAppsSection.js +3 -2
- package/settings/OAuthAppsSection.js.map +1 -1
- package/settings/OrgProfileSection.d.ts.map +1 -1
- package/settings/OrgProfileSection.js +3 -2
- package/settings/OrgProfileSection.js.map +1 -1
- package/settings/PlatformClientsSection.d.ts.map +1 -1
- package/settings/PlatformClientsSection.js +3 -2
- package/settings/PlatformClientsSection.js.map +1 -1
- package/settings/UsageSection.d.ts.map +1 -1
- package/settings/UsageSection.js +3 -1
- package/settings/UsageSection.js.map +1 -1
- package/sharing/ShareAgentDialog.d.ts.map +1 -1
- package/sharing/ShareAgentDialog.js +18 -7
- package/sharing/ShareAgentDialog.js.map +1 -1
- package/sidebar/chrome.d.ts +3 -4
- package/sidebar/chrome.d.ts.map +1 -1
- package/sidebar/chrome.js +5 -4
- package/sidebar/chrome.js.map +1 -1
- package/skill/SkillDiffDialog.js +1 -1
- package/skill/useSkillVersions.d.ts.map +1 -1
- package/skill/useSkillVersions.js +1 -9
- package/skill/useSkillVersions.js.map +1 -1
- package/src/access/ManageAccessDialog.tsx +10 -4
- package/src/activity/format-relative-time.ts +11 -9
- package/src/agent/steps/CapabilitiesStep.tsx +6 -3
- package/src/agent/steps/IdentityStep.tsx +19 -12
- package/src/agent-instance/CreateAgentInstanceDialog.tsx +17 -8
- package/src/api-key/ApiKeyCreatedAlert.tsx +10 -19
- package/src/api-key/ApiKeyListPanel.tsx +3 -39
- package/src/api-key/CreateApiKeyForm.tsx +12 -26
- package/src/approval-defaults-context.ts +56 -0
- package/src/attachment/__tests__/vision-preflight.test.ts +311 -0
- package/src/attachment/index.ts +12 -0
- package/src/attachment/vision-preflight.ts +236 -0
- package/src/billing/AutoRechargeCard.tsx +5 -4
- package/src/billing/BillingSection.tsx +4 -3
- package/src/channel/ChannelConversationsDialog.tsx +8 -4
- package/src/channel/ChannelCredentialsDialog.tsx +14 -4
- package/src/channel/ChannelTemplatesDialog.tsx +8 -4
- package/src/channel/ConnectSlackDialog.tsx +14 -4
- package/src/channel/ConnectWhatsAppDialog.tsx +14 -4
- package/src/channel/useChannelSessions.ts +3 -0
- package/src/channel-app/ChannelAppDetailPanel.tsx +15 -12
- package/src/channel-app/CreateChannelAppForm.tsx +17 -12
- package/src/channel-app/internal.tsx +5 -25
- package/src/composer/ComposerToolbar.tsx +1 -1
- package/src/composer/SessionComposer.tsx +160 -13
- package/src/composer/__tests__/SessionComposer-modelCoherence.test.tsx +220 -0
- package/src/composer/__tests__/SessionComposer-visionPreflight.test.tsx +222 -0
- package/src/composer/icons.tsx +0 -18
- package/src/conversation/ConversationComposer.tsx +1 -1
- package/src/conversation/ConversationListPane.tsx +4 -3
- package/src/cursor-accounts/MemberCoverageTable.tsx +3 -14
- package/src/cursor-accounts/__tests__/CursorAccountsConsole.test.tsx +2 -10
- package/src/dashboard/DashboardFailedRuns.tsx +2 -12
- package/src/environment/CreateEnvironmentForm.tsx +8 -27
- package/src/environment/EnvVarForm.tsx +2 -18
- package/src/environment/EnvironmentVariableEditor.tsx +5 -21
- package/src/execution/ArtifactApplyButton.tsx +2 -17
- package/src/execution/ExecutionErrorNotice.tsx +99 -0
- package/src/execution/FilePathLink.tsx +5 -9
- package/src/execution/FileReviewCard.tsx +1 -20
- package/src/execution/FollowUpInput.tsx +1 -16
- package/src/execution/LivenessStatusLine.tsx +59 -0
- package/src/execution/MessageEntry.tsx +136 -25
- package/src/execution/MessageThread.tsx +84 -83
- package/src/execution/SetupProgress.tsx +5 -1
- package/src/execution/SubAgentSection.tsx +9 -20
- package/src/execution/TerminalSession.tsx +97 -10
- package/src/execution/ToolCallDetail.tsx +19 -0
- package/src/execution/ToolCallItem.tsx +157 -37
- package/src/execution/ToolRunGroup.tsx +30 -32
- package/src/execution/WriteBackCard.tsx +5 -24
- package/src/execution/__tests__/MessageEntry-copy.test.tsx +125 -0
- package/src/execution/__tests__/MessageThread.test.tsx +97 -0
- package/src/execution/__tests__/TerminalSession.test.tsx +71 -1
- package/src/execution/__tests__/ToolCallDetail.test.tsx +33 -1
- package/src/execution/__tests__/ToolCallItem.test.tsx +299 -11
- package/src/execution/__tests__/ToolRunGroup.test.tsx +41 -9
- package/src/execution/__tests__/message-thread-slots.test.tsx +92 -0
- package/src/execution/__tests__/tool-presenter.test.tsx +41 -4
- package/src/execution/index.ts +8 -2
- package/src/execution/tool-categories.ts +72 -8
- package/src/execution/tool-presenter.ts +22 -1
- package/src/execution/useArtifactInspection.ts +4 -8
- package/src/execution/useCreateAgentExecution.ts +3 -2
- package/src/iam-policy/GrantAccessForm.tsx +2 -18
- package/src/iam-policy/OrgMembersPanel.tsx +3 -19
- package/src/iam-policy/RoleSelector.tsx +8 -1
- package/src/identity-provider/CreateIdentityProviderForm.tsx +13 -31
- package/src/identity-provider/IdentityProviderDetailPanel.tsx +24 -49
- package/src/identity-provider/IdentityProviderListPanel.tsx +2 -18
- package/src/identity-provider/IdentityProviderWizard.tsx +15 -32
- package/src/identity-provider/SsoLoginPrompt.tsx +6 -21
- package/src/index.ts +23 -1
- package/src/internal/DecisionButton.tsx +1 -20
- package/src/internal/SpinnerIcon.tsx +42 -0
- package/src/internal/__tests__/ThreadCardShell.test.tsx +43 -7
- package/src/internal/__tests__/useCopyFeedback.test.ts +92 -0
- package/src/internal/isUnimplemented.ts +26 -0
- package/src/internal/select-element-text.ts +17 -0
- package/src/internal/thread-card/ThreadCardShell.tsx +53 -21
- package/src/internal/thread-card/glyphs.tsx +24 -3
- package/src/internal/thread-card/index.ts +1 -0
- package/src/internal/useCopyFeedback.ts +61 -0
- package/src/invitation/InvitationCreatedAlert.tsx +10 -18
- package/src/invitation/InvitationManager.tsx +23 -34
- package/src/invitation/InvitationRedemption.tsx +2 -18
- package/src/library/useExportResource.ts +15 -29
- package/src/manifest/ApplyManifestDialog.tsx +1 -1
- package/src/manifest/EditResourceYamlDialog.tsx +1 -1
- package/src/mcp-server/DefinitionDriftNotice.tsx +120 -0
- package/src/mcp-server/McpServerConnectDialog.tsx +30 -12
- package/src/mcp-server/McpServerDetailView.tsx +58 -26
- package/src/mcp-server/OAuthAppForm.tsx +2 -18
- package/src/mcp-server/__tests__/DefinitionDriftNotice.test.tsx +57 -0
- package/src/mcp-server/__tests__/VendorApprovalBlocked.surfaces.test.tsx +103 -5
- package/src/mcp-server/__tests__/byoaEditionDegradation.test.tsx +323 -0
- package/src/mcp-server/__tests__/definitionDrift.test.ts +245 -0
- package/src/mcp-server/__tests__/mcpServerToInput.test.ts +201 -0
- package/src/mcp-server/__tests__/useMcpServerCredentials.test.tsx +306 -0
- package/src/mcp-server/__tests__/useMcpServerDefinitionDrift.test.tsx +173 -0
- package/src/mcp-server/internal/definitionDrift.ts +158 -0
- package/src/mcp-server/internal/mcpServerToInput.ts +3 -0
- package/src/mcp-server/steps/EnvironmentAuthStep.tsx +19 -19
- package/src/mcp-server/steps/IdentityTransportStep.tsx +24 -23
- package/src/mcp-server/useMcpServerConnect.ts +1 -1
- package/src/mcp-server/useMcpServerCredentials.ts +87 -19
- package/src/mcp-server/useMcpServerDefinitionDrift.ts +95 -0
- package/src/mcp-server/useOrgOAuthApp.ts +54 -8
- package/src/models/ModelRegistryContext.ts +7 -1
- package/src/models/ModelSelector.tsx +37 -0
- package/src/models/__tests__/ModelSelector-visionIndicator.test.tsx +129 -0
- package/src/models/__tests__/resolveDefaultModel.test.ts +115 -0
- package/src/models/__tests__/useModelRegistry.test.tsx +99 -4
- package/src/models/index.ts +2 -2
- package/src/models/registry.ts +196 -29
- package/src/models/useModelRegistry.ts +10 -2
- package/src/oauth-app/CreateOAuthAppForm.tsx +16 -31
- package/src/oauth-app/OAuthAppDetailPanel.tsx +16 -31
- package/src/organization/CreateOrganizationForm.tsx +10 -29
- package/src/organization/OrgProfilePanel.tsx +13 -44
- package/src/platform-client/CreatePlatformClientForm.tsx +9 -29
- package/src/platform-client/PlatformClientDetailPanel.tsx +10 -30
- package/src/platform-client/PlatformClientListPanel.tsx +2 -18
- package/src/platform-client/PlatformClientSecretAlert.tsx +26 -55
- package/src/provider.tsx +76 -33
- package/src/resource-creation/WizardNav.tsx +2 -18
- package/src/resource-detail/ConfirmDialog.tsx +1 -1
- package/src/resource-detail/useCopyResource.ts +17 -23
- package/src/schedule/ScheduleDetailView.tsx +2 -18
- package/src/schedule/ScheduleForm.tsx +19 -34
- package/src/session/NewSessionViewer.tsx +85 -7
- package/src/session/SessionViewer.tsx +120 -17
- package/src/session/__tests__/audienceWiring.test.tsx +76 -0
- package/src/session/__tests__/panelNegotiation.test.tsx +302 -0
- package/src/session/__tests__/useNewSessionFlow.test.tsx +134 -5
- package/src/session/__tests__/useSessionPageFlow.autoApprove.test.tsx +74 -0
- package/src/session/__tests__/useSessionPageFlow.runConfig.test.tsx +157 -0
- package/src/session/__tests__/useSessionPanel.test.ts +114 -0
- package/src/session/audience.ts +18 -0
- package/src/session/index.ts +2 -1
- package/src/session/run-config.ts +59 -0
- package/src/session/useNewSessionFlow.ts +39 -2
- package/src/session/useSessionConversation.ts +14 -10
- package/src/session/useSessionPageFlow.ts +51 -10
- package/src/session/useSessionPanel.ts +91 -10
- package/src/settings/ApiKeysSection.tsx +4 -3
- package/src/settings/ChannelAppsSection.tsx +4 -3
- package/src/settings/EnvironmentsSection.tsx +8 -5
- package/src/settings/IdentityProvidersSection.tsx +4 -3
- package/src/settings/InvitationsSection.tsx +4 -2
- package/src/settings/MembersSection.tsx +4 -2
- package/src/settings/OAuthAppsSection.tsx +4 -3
- package/src/settings/OrgProfileSection.tsx +4 -3
- package/src/settings/PlatformClientsSection.tsx +4 -3
- package/src/settings/UsageSection.tsx +4 -2
- package/src/sharing/ShareAgentDialog.tsx +28 -10
- package/src/sidebar/__tests__/WorkspaceSidebar.test.tsx +4 -1
- package/src/sidebar/chrome.tsx +6 -6
- package/src/skill/SkillDiffDialog.tsx +1 -1
- package/src/skill/useSkillVersions.ts +1 -11
- package/src/styles.css +43 -0
- package/src/version-history/VersionTimelineEntry.tsx +1 -21
- package/src/workflow/FailedRunsWidget.tsx +2 -9
- package/src/workflow/PendingApprovalsWidget.tsx +2 -9
- package/src/workflow/ViewYamlDialog.tsx +7 -22
- package/src/workflow/WorkflowArchitectDialog.tsx +8 -27
- package/src/workflow/WorkflowArtifactDocument.tsx +5 -9
- package/src/workflow/WorkflowCanvasEditor.tsx +39 -7
- package/src/workflow/WorkflowCanvasInner.tsx +14 -1
- package/src/workflow/WorkflowDiffGraph.tsx +7 -1
- package/src/workflow/WorkflowExecutionGraph.tsx +26 -1
- package/src/workflow/WorkflowExecutionViewer.tsx +115 -24
- package/src/workflow/WorkflowExplainDialog.tsx +8 -24
- package/src/workflow/WorkflowNode.tsx +5 -2
- package/src/workflow/WorkflowOverviewGraph.tsx +9 -1
- package/src/workflow/WorkflowRefinePanel.tsx +2 -18
- package/src/workflow/WorkflowRepairCard.tsx +2 -18
- package/src/workflow/WorkflowRunDialog.tsx +31 -24
- package/src/workflow/WorkflowTaskApprovalSummary.tsx +2 -17
- package/src/workflow/WorkflowVersionBadge.tsx +4 -13
- package/src/workflow/WorkflowVersionTimeline.tsx +1 -25
- package/src/workflow/__tests__/WorkflowExecutionViewer.reconciliation.test.tsx +48 -1
- package/src/workflow/__tests__/WorkflowNode.test.tsx +93 -0
- package/src/workflow/__tests__/WorkflowRunDialog.test.tsx +127 -0
- package/src/workflow/__tests__/graph-history.test.ts +103 -0
- package/src/workflow/__tests__/overview-graph.test.ts +17 -0
- package/src/workflow/__tests__/panelNegotiation.test.tsx +230 -0
- package/src/workflow/__tests__/useCanvasKeyboardShortcuts.undo.test.ts +115 -0
- package/src/workflow/__tests__/useWorkflowCanvas.dirty.test.tsx +178 -0
- package/src/workflow/__tests__/useWorkflowCanvas.drag.test.tsx +224 -0
- package/src/workflow/__tests__/useWorkflowCanvas.undo.test.tsx +133 -0
- package/src/workflow/__tests__/useWorkflowExecutionPanel.test.ts +100 -0
- package/src/workflow/execution-comparison/ExecutionComparisonPicker.tsx +7 -11
- package/src/workflow/execution-history/ExecutionHistoryTable.tsx +1 -25
- package/src/workflow/index.ts +1 -0
- package/src/workflow/instance/CreateWorkflowInstanceDialog.tsx +17 -8
- package/src/workflow/instance/WorkflowInstanceDetailPanel.tsx +2 -1
- package/src/workflow/instance/useDeleteWorkflowInstance.ts +9 -4
- package/src/workflow/layout/registry-dimensions.ts +2 -5
- package/src/workflow/node-shell/NodeShell.tsx +4 -0
- package/src/workflow/picker/BranchAddPopover.tsx +4 -3
- package/src/workflow/task-type-visual-registry.ts +5 -3
- package/src/workflow/templates/WorkflowTemplatePreview.tsx +1 -1
- package/src/workflow/useApprovalBoundary.ts +1 -1
- package/src/workflow/useCanvasKeyboardShortcuts.ts +33 -3
- package/src/workflow/useGraphHistory.ts +22 -41
- package/src/workflow/useWorkflowCanvas.ts +126 -21
- package/src/workflow/useWorkflowExecutionPanel.ts +95 -13
- package/src/workflow/useWorkflowSave.ts +2 -15
- package/src/workflow/workflow-graph-conversions.ts +25 -3
- package/styles.css +1 -1
- package/version-history/VersionTimelineEntry.d.ts.map +1 -1
- package/version-history/VersionTimelineEntry.js +1 -23
- package/version-history/VersionTimelineEntry.js.map +1 -1
- package/workflow/CanvasTransitionEdge.d.ts +1 -1
- package/workflow/FailedRunsWidget.d.ts.map +1 -1
- package/workflow/FailedRunsWidget.js +2 -11
- package/workflow/FailedRunsWidget.js.map +1 -1
- package/workflow/PendingApprovalsWidget.d.ts.map +1 -1
- package/workflow/PendingApprovalsWidget.js +2 -11
- package/workflow/PendingApprovalsWidget.js.map +1 -1
- package/workflow/ViewYamlDialog.d.ts.map +1 -1
- package/workflow/ViewYamlDialog.js +7 -23
- package/workflow/ViewYamlDialog.js.map +1 -1
- package/workflow/WorkflowArchitectDialog.d.ts.map +1 -1
- package/workflow/WorkflowArchitectDialog.js +7 -11
- package/workflow/WorkflowArchitectDialog.js.map +1 -1
- package/workflow/WorkflowArtifactDocument.d.ts.map +1 -1
- package/workflow/WorkflowArtifactDocument.js +5 -8
- package/workflow/WorkflowArtifactDocument.js.map +1 -1
- package/workflow/WorkflowCanvasEditor.d.ts.map +1 -1
- package/workflow/WorkflowCanvasEditor.js +31 -6
- package/workflow/WorkflowCanvasEditor.js.map +1 -1
- package/workflow/WorkflowCanvasInner.d.ts +4 -2
- package/workflow/WorkflowCanvasInner.d.ts.map +1 -1
- package/workflow/WorkflowCanvasInner.js +7 -3
- package/workflow/WorkflowCanvasInner.js.map +1 -1
- package/workflow/WorkflowDiffGraph.js +6 -2
- package/workflow/WorkflowDiffGraph.js.map +1 -1
- package/workflow/WorkflowExecutionGraph.d.ts.map +1 -1
- package/workflow/WorkflowExecutionGraph.js +27 -1
- package/workflow/WorkflowExecutionGraph.js.map +1 -1
- package/workflow/WorkflowExecutionViewer.d.ts +51 -0
- package/workflow/WorkflowExecutionViewer.d.ts.map +1 -1
- package/workflow/WorkflowExecutionViewer.js +49 -18
- package/workflow/WorkflowExecutionViewer.js.map +1 -1
- package/workflow/WorkflowExplainDialog.d.ts.map +1 -1
- package/workflow/WorkflowExplainDialog.js +6 -8
- package/workflow/WorkflowExplainDialog.js.map +1 -1
- package/workflow/WorkflowNode.d.ts.map +1 -1
- package/workflow/WorkflowNode.js +2 -2
- package/workflow/WorkflowNode.js.map +1 -1
- package/workflow/WorkflowOverviewGraph.js +8 -2
- package/workflow/WorkflowOverviewGraph.js.map +1 -1
- package/workflow/WorkflowRefinePanel.d.ts.map +1 -1
- package/workflow/WorkflowRefinePanel.js +2 -4
- package/workflow/WorkflowRefinePanel.js.map +1 -1
- package/workflow/WorkflowRepairCard.d.ts.map +1 -1
- package/workflow/WorkflowRepairCard.js +2 -4
- package/workflow/WorkflowRepairCard.js.map +1 -1
- package/workflow/WorkflowRunDialog.d.ts +11 -1
- package/workflow/WorkflowRunDialog.d.ts.map +1 -1
- package/workflow/WorkflowRunDialog.js +18 -9
- package/workflow/WorkflowRunDialog.js.map +1 -1
- package/workflow/WorkflowTaskApprovalSummary.d.ts.map +1 -1
- package/workflow/WorkflowTaskApprovalSummary.js +2 -4
- package/workflow/WorkflowTaskApprovalSummary.js.map +1 -1
- package/workflow/WorkflowVersionBadge.d.ts.map +1 -1
- package/workflow/WorkflowVersionBadge.js +4 -13
- package/workflow/WorkflowVersionBadge.js.map +1 -1
- package/workflow/WorkflowVersionTimeline.d.ts.map +1 -1
- package/workflow/WorkflowVersionTimeline.js +1 -26
- package/workflow/WorkflowVersionTimeline.js.map +1 -1
- package/workflow/execution-comparison/ExecutionComparisonPicker.d.ts.map +1 -1
- package/workflow/execution-comparison/ExecutionComparisonPicker.js +7 -15
- package/workflow/execution-comparison/ExecutionComparisonPicker.js.map +1 -1
- package/workflow/execution-history/ExecutionHistoryTable.d.ts.map +1 -1
- package/workflow/execution-history/ExecutionHistoryTable.js +1 -24
- package/workflow/execution-history/ExecutionHistoryTable.js.map +1 -1
- package/workflow/index.d.ts +1 -1
- package/workflow/index.d.ts.map +1 -1
- package/workflow/index.js.map +1 -1
- package/workflow/instance/CreateWorkflowInstanceDialog.d.ts.map +1 -1
- package/workflow/instance/CreateWorkflowInstanceDialog.js +10 -2
- package/workflow/instance/CreateWorkflowInstanceDialog.js.map +1 -1
- package/workflow/instance/WorkflowInstanceDetailPanel.d.ts.map +1 -1
- package/workflow/instance/WorkflowInstanceDetailPanel.js +1 -1
- package/workflow/instance/WorkflowInstanceDetailPanel.js.map +1 -1
- package/workflow/instance/useDeleteWorkflowInstance.d.ts +9 -4
- package/workflow/instance/useDeleteWorkflowInstance.d.ts.map +1 -1
- package/workflow/instance/useDeleteWorkflowInstance.js +4 -2
- package/workflow/instance/useDeleteWorkflowInstance.js.map +1 -1
- package/workflow/layout/registry-dimensions.d.ts.map +1 -1
- package/workflow/layout/registry-dimensions.js +2 -5
- package/workflow/layout/registry-dimensions.js.map +1 -1
- package/workflow/node-shell/NodeShell.js +1 -1
- package/workflow/node-shell/NodeShell.js.map +1 -1
- package/workflow/picker/BranchAddPopover.d.ts.map +1 -1
- package/workflow/picker/BranchAddPopover.js +3 -2
- package/workflow/picker/BranchAddPopover.js.map +1 -1
- package/workflow/task-type-visual-registry.d.ts.map +1 -1
- package/workflow/task-type-visual-registry.js +5 -3
- package/workflow/task-type-visual-registry.js.map +1 -1
- package/workflow/templates/WorkflowTemplatePreview.js +1 -1
- package/workflow/useApprovalBoundary.d.ts +1 -1
- package/workflow/useApprovalBoundary.js +1 -1
- package/workflow/useCanvasKeyboardShortcuts.d.ts +15 -4
- package/workflow/useCanvasKeyboardShortcuts.d.ts.map +1 -1
- package/workflow/useCanvasKeyboardShortcuts.js +25 -4
- package/workflow/useCanvasKeyboardShortcuts.js.map +1 -1
- package/workflow/useGraphHistory.d.ts +16 -9
- package/workflow/useGraphHistory.d.ts.map +1 -1
- package/workflow/useGraphHistory.js +19 -33
- package/workflow/useGraphHistory.js.map +1 -1
- package/workflow/useWorkflowCanvas.d.ts +6 -4
- package/workflow/useWorkflowCanvas.d.ts.map +1 -1
- package/workflow/useWorkflowCanvas.js +115 -23
- package/workflow/useWorkflowCanvas.js.map +1 -1
- package/workflow/useWorkflowExecutionPanel.d.ts +38 -2
- package/workflow/useWorkflowExecutionPanel.d.ts.map +1 -1
- package/workflow/useWorkflowExecutionPanel.js +46 -13
- package/workflow/useWorkflowExecutionPanel.js.map +1 -1
- package/workflow/useWorkflowSave.d.ts.map +1 -1
- package/workflow/useWorkflowSave.js +2 -15
- package/workflow/useWorkflowSave.js.map +1 -1
- package/workflow/workflow-graph-conversions.d.ts +19 -1
- package/workflow/workflow-graph-conversions.d.ts.map +1 -1
- package/workflow/workflow-graph-conversions.js +17 -3
- package/workflow/workflow-graph-conversions.js.map +1 -1
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import { describe, it, expect, vi, afterEach } from "vitest";
|
|
2
|
+
import { renderHook, act } from "@testing-library/react";
|
|
3
|
+
|
|
4
|
+
// ---------------------------------------------------------------------------
|
|
5
|
+
// Owner-pinned run config for useSessionPageFlow (stigmer/stigmer#664).
|
|
6
|
+
//
|
|
7
|
+
// A platform-billed embedder pins the model/tier once and every follow-up
|
|
8
|
+
// carries it — winning over the composer's selection, the persisted
|
|
9
|
+
// Console preference, and the last execution's model — including retries,
|
|
10
|
+
// which re-enter the same submit path. Guests never carry a pin: their
|
|
11
|
+
// execution config is owned by the server-side share policy.
|
|
12
|
+
// ---------------------------------------------------------------------------
|
|
13
|
+
|
|
14
|
+
const mockSendFollowUp = vi.fn();
|
|
15
|
+
|
|
16
|
+
const mockConv = {
|
|
17
|
+
session: { spec: { agentInstanceId: "inst_bound" } },
|
|
18
|
+
isLoading: false,
|
|
19
|
+
completedExecutions: [] as unknown[],
|
|
20
|
+
activeStreamExecution: null,
|
|
21
|
+
workspaceEntries: [] as unknown[],
|
|
22
|
+
submitApproval: vi.fn(),
|
|
23
|
+
sendFollowUp: mockSendFollowUp,
|
|
24
|
+
};
|
|
25
|
+
vi.mock("../useSessionConversation", () => ({
|
|
26
|
+
useSessionConversation: () => mockConv,
|
|
27
|
+
}));
|
|
28
|
+
|
|
29
|
+
vi.mock("../../hooks", () => ({
|
|
30
|
+
useStigmer: () => ({ agent: { getByReference: vi.fn() } }),
|
|
31
|
+
}));
|
|
32
|
+
|
|
33
|
+
vi.mock("../../agent", () => ({
|
|
34
|
+
useDefaultAgent: () => ({ agent: null, isLoading: false, error: null }),
|
|
35
|
+
}));
|
|
36
|
+
|
|
37
|
+
const mockWorkspace = {
|
|
38
|
+
entries: [],
|
|
39
|
+
hasEntries: false,
|
|
40
|
+
toInput: vi.fn().mockReturnValue([]),
|
|
41
|
+
addGitRepo: vi.fn(),
|
|
42
|
+
addLocalPath: vi.fn(),
|
|
43
|
+
removeEntry: vi.fn(),
|
|
44
|
+
clear: vi.fn(),
|
|
45
|
+
};
|
|
46
|
+
vi.mock("../../workspace", () => ({
|
|
47
|
+
useWorkspaceEntries: () => mockWorkspace,
|
|
48
|
+
}));
|
|
49
|
+
|
|
50
|
+
vi.mock("../../execution/useSessionVariables", () => ({
|
|
51
|
+
useSessionVariables: () => ({ variables: [], isEmpty: true, clear: vi.fn() }),
|
|
52
|
+
}));
|
|
53
|
+
|
|
54
|
+
// Honors `enabled` like the real hook (contract pinned by its own tests).
|
|
55
|
+
vi.mock("../usePersistedModel", () => ({
|
|
56
|
+
usePersistedModel: (opts?: { enabled?: boolean }) =>
|
|
57
|
+
(opts?.enabled === false
|
|
58
|
+
? ([undefined, vi.fn()] as const)
|
|
59
|
+
: (["persisted-model", vi.fn()] as const)),
|
|
60
|
+
}));
|
|
61
|
+
|
|
62
|
+
vi.mock("../useAgentRefFromSession", () => ({
|
|
63
|
+
useAgentRefFromSession: () => ({ agentRef: null }),
|
|
64
|
+
}));
|
|
65
|
+
|
|
66
|
+
import { useSessionPageFlow } from "../useSessionPageFlow";
|
|
67
|
+
|
|
68
|
+
const OPTS = { sessionId: "ses_1", org: "acme" };
|
|
69
|
+
const PIN = { modelName: "pinned-model", serviceTier: "fast" } as const;
|
|
70
|
+
|
|
71
|
+
describe("useSessionPageFlow — owner-pinned runConfig (#664)", () => {
|
|
72
|
+
afterEach(() => {
|
|
73
|
+
vi.clearAllMocks();
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
it("stamps the pinned model and fast tier on a composer follow-up, over the composer's own selection", async () => {
|
|
77
|
+
const { result } = renderHook(() =>
|
|
78
|
+
useSessionPageFlow({ ...OPTS, runConfig: PIN }),
|
|
79
|
+
);
|
|
80
|
+
|
|
81
|
+
await act(async () => {
|
|
82
|
+
await result.current.handleSubmit("follow up", "user-picked-model", {
|
|
83
|
+
serviceTier: undefined,
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
const options = mockSendFollowUp.mock.calls[0][1];
|
|
88
|
+
expect(options.modelName).toBe("pinned-model");
|
|
89
|
+
expect(options.serviceTier).toBe("fast");
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
it("stamps the pin on a bare re-submit (the execution-retry path passes no composer args)", async () => {
|
|
93
|
+
const { result } = renderHook(() =>
|
|
94
|
+
useSessionPageFlow({ ...OPTS, runConfig: PIN }),
|
|
95
|
+
);
|
|
96
|
+
|
|
97
|
+
await act(async () => {
|
|
98
|
+
await result.current.handleSubmit("retry me");
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
const options = mockSendFollowUp.mock.calls[0][1];
|
|
102
|
+
expect(options.modelName).toBe("pinned-model");
|
|
103
|
+
expect(options.serviceTier).toBe("fast");
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
it("a model-only pin suppresses a composer-armed fast tier (the pin owns the whole run config)", async () => {
|
|
107
|
+
const { result } = renderHook(() =>
|
|
108
|
+
useSessionPageFlow({ ...OPTS, runConfig: { modelName: "pinned-model" } }),
|
|
109
|
+
);
|
|
110
|
+
|
|
111
|
+
await act(async () => {
|
|
112
|
+
await result.current.handleSubmit("follow up", undefined, {
|
|
113
|
+
serviceTier: "fast",
|
|
114
|
+
});
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
const options = mockSendFollowUp.mock.calls[0][1];
|
|
118
|
+
expect(options.modelName).toBe("pinned-model");
|
|
119
|
+
expect(options.serviceTier).toBeUndefined();
|
|
120
|
+
});
|
|
121
|
+
|
|
122
|
+
it("keeps the unpinned behavior byte-identical when no runConfig is given", async () => {
|
|
123
|
+
const { result } = renderHook(() => useSessionPageFlow(OPTS));
|
|
124
|
+
|
|
125
|
+
await act(async () => {
|
|
126
|
+
await result.current.handleSubmit("follow up", "user-picked-model", {
|
|
127
|
+
serviceTier: "fast",
|
|
128
|
+
});
|
|
129
|
+
});
|
|
130
|
+
|
|
131
|
+
const options = mockSendFollowUp.mock.calls[0][1];
|
|
132
|
+
expect(options.modelName).toBe("user-picked-model");
|
|
133
|
+
expect(options.serviceTier).toBe("fast");
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
it("ignores the pin entirely for guests — their no-modelName invariant survives a misconfigured embed", async () => {
|
|
137
|
+
const { result } = renderHook(() =>
|
|
138
|
+
useSessionPageFlow({ ...OPTS, audience: "guest", runConfig: PIN }),
|
|
139
|
+
);
|
|
140
|
+
|
|
141
|
+
await act(async () => {
|
|
142
|
+
await result.current.handleSubmit("follow up");
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
const options = mockSendFollowUp.mock.calls[0][1];
|
|
146
|
+
expect(options.modelName).toBeUndefined();
|
|
147
|
+
expect(options.serviceTier).toBeUndefined();
|
|
148
|
+
});
|
|
149
|
+
|
|
150
|
+
it("throws at render for the statically-wrong pin (fast tier, no model)", () => {
|
|
151
|
+
expect(() =>
|
|
152
|
+
renderHook(() =>
|
|
153
|
+
useSessionPageFlow({ ...OPTS, runConfig: { serviceTier: "fast" } }),
|
|
154
|
+
),
|
|
155
|
+
).toThrowError(/serviceTier "fast" requires modelName/);
|
|
156
|
+
});
|
|
157
|
+
});
|
|
@@ -278,6 +278,120 @@ describe("useSessionPanel — artifact document tabs", () => {
|
|
|
278
278
|
});
|
|
279
279
|
});
|
|
280
280
|
|
|
281
|
+
describe("useSessionPanel — observed open state (uncontrolled + onOpenChange)", () => {
|
|
282
|
+
// The panel opens ITSELF (file/artifact/plan opens, plan auto-open), so —
|
|
283
|
+
// unlike useDetailTabs' user-driven-only tabs — onOpenChange fires in BOTH
|
|
284
|
+
// modes: passing only the callback observes the panel without controlling
|
|
285
|
+
// it (the issue-#300 docking-host case).
|
|
286
|
+
it("reports the chip toggle without taking control", () => {
|
|
287
|
+
const seen: boolean[] = [];
|
|
288
|
+
const { result } = renderPanel({ onOpenChange: (o) => seen.push(o) });
|
|
289
|
+
act(() => result.current.openPanel());
|
|
290
|
+
expect(result.current.isOpen).toBe(true);
|
|
291
|
+
act(() => result.current.closePanel());
|
|
292
|
+
expect(result.current.isOpen).toBe(false);
|
|
293
|
+
expect(seen).toEqual([true, false]);
|
|
294
|
+
});
|
|
295
|
+
|
|
296
|
+
it("reports internal open intents (openFile), once per actual transition", () => {
|
|
297
|
+
const seen: boolean[] = [];
|
|
298
|
+
const { result } = renderPanel({ onOpenChange: (o) => seen.push(o) });
|
|
299
|
+
act(() => result.current.openFile("e1", "a.ts"));
|
|
300
|
+
// Already open — a second open intent is not a transition.
|
|
301
|
+
act(() => result.current.openFile("e1", "b.ts"));
|
|
302
|
+
act(() => result.current.openPanel());
|
|
303
|
+
expect(seen).toEqual([true]);
|
|
304
|
+
});
|
|
305
|
+
|
|
306
|
+
it("reports the plan auto-open — the beat a docking host makes room for", () => {
|
|
307
|
+
const seen: boolean[] = [];
|
|
308
|
+
const onOpenChange = (o: boolean) => seen.push(o);
|
|
309
|
+
const { rerender } = renderPanel({ onOpenChange });
|
|
310
|
+
rerender({ phase: null, hasChanges: false, planKey: "e1:streaming", onOpenChange });
|
|
311
|
+
expect(seen).toEqual([true]);
|
|
312
|
+
});
|
|
313
|
+
|
|
314
|
+
it("starts open when defaultOpen is set, without a spurious notification", () => {
|
|
315
|
+
const seen: boolean[] = [];
|
|
316
|
+
const { result } = renderPanel({
|
|
317
|
+
defaultOpen: true,
|
|
318
|
+
onOpenChange: (o) => seen.push(o),
|
|
319
|
+
});
|
|
320
|
+
expect(result.current.isOpen).toBe(true);
|
|
321
|
+
expect(seen).toEqual([]);
|
|
322
|
+
});
|
|
323
|
+
});
|
|
324
|
+
|
|
325
|
+
describe("useSessionPanel — controlled open state", () => {
|
|
326
|
+
it("follows the host's open value and ignores defaultOpen", () => {
|
|
327
|
+
const { result, rerender } = renderPanel({ open: false, defaultOpen: true });
|
|
328
|
+
expect(result.current.isOpen).toBe(false);
|
|
329
|
+
rerender({ phase: null, hasChanges: false, open: true, defaultOpen: true });
|
|
330
|
+
expect(result.current.isOpen).toBe(true);
|
|
331
|
+
});
|
|
332
|
+
|
|
333
|
+
it("surfaces intents through onOpenChange without flipping state itself", () => {
|
|
334
|
+
const seen: boolean[] = [];
|
|
335
|
+
const onOpenChange = (o: boolean) => seen.push(o);
|
|
336
|
+
const { result, rerender } = renderPanel({ open: false, onOpenChange });
|
|
337
|
+
act(() => result.current.openPanel());
|
|
338
|
+
expect(seen).toEqual([true]);
|
|
339
|
+
expect(result.current.isOpen).toBe(false);
|
|
340
|
+
// The host grants the request.
|
|
341
|
+
rerender({ phase: null, hasChanges: false, open: true, onOpenChange });
|
|
342
|
+
expect(result.current.isOpen).toBe(true);
|
|
343
|
+
act(() => result.current.closePanel());
|
|
344
|
+
expect(seen).toEqual([true, false]);
|
|
345
|
+
expect(result.current.isOpen).toBe(true);
|
|
346
|
+
});
|
|
347
|
+
|
|
348
|
+
it("re-fires a declined request (once per request, not per transition)", () => {
|
|
349
|
+
const seen: boolean[] = [];
|
|
350
|
+
const onOpenChange = (o: boolean) => seen.push(o);
|
|
351
|
+
const { result } = renderPanel({ open: false, onOpenChange });
|
|
352
|
+
act(() => result.current.openFile("e1", "a.ts"));
|
|
353
|
+
// The host declined (open stayed false) — a later intent must re-fire,
|
|
354
|
+
// not be swallowed by a stale "already requested" memory.
|
|
355
|
+
act(() => result.current.openFile("e1", "b.ts"));
|
|
356
|
+
expect(seen).toEqual([true, true]);
|
|
357
|
+
});
|
|
358
|
+
|
|
359
|
+
it("plan auto-open is reported, not applied — but the tab is pinned and ready", () => {
|
|
360
|
+
const seen: boolean[] = [];
|
|
361
|
+
const onOpenChange = (o: boolean) => seen.push(o);
|
|
362
|
+
const { result, rerender } = renderPanel({ open: false, onOpenChange });
|
|
363
|
+
rerender({
|
|
364
|
+
phase: null,
|
|
365
|
+
hasChanges: false,
|
|
366
|
+
planKey: "e1:hash-a",
|
|
367
|
+
open: false,
|
|
368
|
+
onOpenChange,
|
|
369
|
+
});
|
|
370
|
+
expect(seen).toEqual([true]);
|
|
371
|
+
expect(result.current.isOpen).toBe(false);
|
|
372
|
+
// View state stays SDK-owned: the plan tab is pinned regardless, so the
|
|
373
|
+
// moment the host opens the panel the plan is what greets the user.
|
|
374
|
+
expect(result.current.editorsStore.getSnapshot().editors).toEqual([
|
|
375
|
+
{ entryId: PLAN_DOCUMENT_ENTRY_ID, path: PLAN_DOCUMENT_PATH, preview: false },
|
|
376
|
+
]);
|
|
377
|
+
});
|
|
378
|
+
|
|
379
|
+
it("auto-surfaces Changes against the HOST's open state, not the internal one", () => {
|
|
380
|
+
// The first-write-back trigger reads the effective open value: a
|
|
381
|
+
// controlled-open panel (whose internal state was never touched) must
|
|
382
|
+
// still surface Changes…
|
|
383
|
+
const { result, rerender } = renderPanel({ open: true });
|
|
384
|
+
rerender({ phase: null, hasChanges: true, open: true });
|
|
385
|
+
expect(result.current.view).toBe("changes");
|
|
386
|
+
});
|
|
387
|
+
|
|
388
|
+
it("…and a controlled-closed panel must not", () => {
|
|
389
|
+
const { result, rerender } = renderPanel({ open: false });
|
|
390
|
+
rerender({ phase: null, hasChanges: true, open: false });
|
|
391
|
+
expect(result.current.view).toBe("files");
|
|
392
|
+
});
|
|
393
|
+
});
|
|
394
|
+
|
|
281
395
|
describe("useSessionPanel — defaultView (home view)", () => {
|
|
282
396
|
it("seeds the view to the provided defaultView (launcher homes on Config)", () => {
|
|
283
397
|
const { result } = renderPanel({ defaultView: "configure" });
|
package/src/session/audience.ts
CHANGED
|
@@ -45,3 +45,21 @@
|
|
|
45
45
|
* presentation means without breaking embedders.
|
|
46
46
|
*/
|
|
47
47
|
export type SessionAudience = "integrator" | "endUser" | "guest" | "observer";
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Whether the session organisms offer the session panel surface.
|
|
51
|
+
*
|
|
52
|
+
* - `"auto"` (default) — the panel and its toggle chip are available
|
|
53
|
+
* whenever the audience allows them (every audience except `"guest"`).
|
|
54
|
+
* - `"none"` — the panel and chip are absent entirely: plan-mode
|
|
55
|
+
* auto-open is suppressed and transcript file paths keep their default
|
|
56
|
+
* copy behavior. For hosts whose surrounding surface already renders
|
|
57
|
+
* the workspace — the composer keeps every capability the audience
|
|
58
|
+
* allows, which is what separates this from `audience="guest"`.
|
|
59
|
+
*
|
|
60
|
+
* Orthogonal to {@link SessionAudience} on purpose: audience is who is
|
|
61
|
+
* looking, panel mode is what the host's geometry has room for. A union
|
|
62
|
+
* (not a boolean) so a future mode — e.g. a host-rendered panel fed by
|
|
63
|
+
* the SDK's controller — extends the vocabulary instead of breaking it.
|
|
64
|
+
*/
|
|
65
|
+
export type SessionPanelMode = "auto" | "none";
|
package/src/session/index.ts
CHANGED
|
@@ -2,7 +2,8 @@ export { toProtoExecutionTarget, fromProtoExecutionTarget } from "./execution-ta
|
|
|
2
2
|
export type { ExecutionTargetOption } from "./execution-target.js";
|
|
3
3
|
|
|
4
4
|
export type { RuntimeEnvProvider } from "./runtime-env.js";
|
|
5
|
-
export type { SessionAudience } from "./audience.js";
|
|
5
|
+
export type { SessionAudience, SessionPanelMode } from "./audience.js";
|
|
6
|
+
export type { SessionRunConfig } from "./run-config.js";
|
|
6
7
|
export {
|
|
7
8
|
CHANNEL_SESSION_LABELS,
|
|
8
9
|
isChannelOriginSession,
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import type { ServiceTierOption } from "../models/service-tier.js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Owner-pinned execution config for a session surface
|
|
5
|
+
* (stigmer/stigmer#664) — the client-side subset of the platform
|
|
6
|
+
* `RunConfig` that AgentShare and AgentChannel specs pin server-side
|
|
7
|
+
* (stigmer/stigmer#360). Budget clamps (`max_cost_usd`,
|
|
8
|
+
* `max_tool_rounds`) are deliberately absent: those are enforcement,
|
|
9
|
+
* which only the server can own.
|
|
10
|
+
*
|
|
11
|
+
* Passed to `SessionViewer` / `NewSessionViewer` (or the underlying
|
|
12
|
+
* flow hooks) by embedders whose product — not the end user — decides
|
|
13
|
+
* what serves the conversation: every execution on the surface (first
|
|
14
|
+
* message, follow-ups, retries) carries the pinned values, and the
|
|
15
|
+
* model picker hides automatically (a control that has no effect must
|
|
16
|
+
* not render).
|
|
17
|
+
*
|
|
18
|
+
* This is presentation-level pinning for product-embedded sessions,
|
|
19
|
+
* not a security boundary — a caller with the session's credentials
|
|
20
|
+
* can still create executions directly. Share/channel surfaces, where
|
|
21
|
+
* the audience is untrusted, get the server-enforced `RunConfig` on
|
|
22
|
+
* their specs instead.
|
|
23
|
+
*
|
|
24
|
+
* Ignored entirely for the `"guest"` audience: guest execution config
|
|
25
|
+
* is owned by the server-side share policy, and guest sends carrying
|
|
26
|
+
* no `modelName` is a pinned invariant.
|
|
27
|
+
*/
|
|
28
|
+
export interface SessionRunConfig {
|
|
29
|
+
/**
|
|
30
|
+
* Model every execution runs, as a plain `modelId` from the model
|
|
31
|
+
* registry. Wins over the composer's selection, the persisted
|
|
32
|
+
* Console preference, and the last execution's model.
|
|
33
|
+
*/
|
|
34
|
+
readonly modelName?: string;
|
|
35
|
+
/**
|
|
36
|
+
* Service tier for every execution. `"fast"` requires
|
|
37
|
+
* {@link modelName}: the fast tier is a per-model price (the server
|
|
38
|
+
* refuses it fail-closed for Auto), so a tier pin without a model
|
|
39
|
+
* pin is a host configuration error and throws at submit.
|
|
40
|
+
*/
|
|
41
|
+
readonly serviceTier?: ServiceTierOption;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Fail fast on the one statically-wrong shape: `serviceTier: "fast"`
|
|
46
|
+
* with no pinned model. Every layer below (composer gate, server
|
|
47
|
+
* validation) would refuse it anyway — but those surface as an end
|
|
48
|
+
* user's failed send, while this names the embedder's bug at the
|
|
49
|
+
* seam where it was written.
|
|
50
|
+
*/
|
|
51
|
+
export function assertValidRunConfig(runConfig: SessionRunConfig): void {
|
|
52
|
+
if (runConfig.serviceTier === "fast" && !runConfig.modelName) {
|
|
53
|
+
throw new Error(
|
|
54
|
+
"SessionRunConfig: serviceTier \"fast\" requires modelName — the fast "
|
|
55
|
+
+ "tier is a per-model price and Auto (no pinned model) has no tier "
|
|
56
|
+
+ "dimension. Pin the model the surface should run.",
|
|
57
|
+
);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
@@ -15,9 +15,11 @@ import { withTimeout } from "../internal/withTimeout.js";
|
|
|
15
15
|
import { useCreateAgentExecution } from "../execution/useCreateAgentExecution.js";
|
|
16
16
|
import type { ExecutionTargetOption } from "./execution-target.js";
|
|
17
17
|
import { useExecutionTarget } from "../execution-target-context.js";
|
|
18
|
+
import { useApprovalDefaults } from "../approval-defaults-context.js";
|
|
18
19
|
import { useRunnerAdapter } from "../runner-adapter.js";
|
|
19
20
|
import { resolveExecutionRuntimeEnv, type RuntimeEnvProvider } from "./runtime-env.js";
|
|
20
21
|
import type { SessionAudience } from "./audience.js";
|
|
22
|
+
import { assertValidRunConfig, type SessionRunConfig } from "./run-config.js";
|
|
21
23
|
|
|
22
24
|
const DEFAULT_AGENT_TIMEOUT_MS = 10_000;
|
|
23
25
|
|
|
@@ -141,6 +143,16 @@ export interface UseNewSessionFlowOptions {
|
|
|
141
143
|
* or Environment resources. Large values bloat every prompt.
|
|
142
144
|
*/
|
|
143
145
|
readonly sessionContext?: string;
|
|
146
|
+
/**
|
|
147
|
+
* Owner-pinned model/tier for the session's first execution
|
|
148
|
+
* (stigmer/stigmer#664). Stamped at submit, winning over the
|
|
149
|
+
* composer's selection and the restored Console preference. Pair
|
|
150
|
+
* with the same pin on the conversation surface
|
|
151
|
+
* (`useSessionPageFlow` / `SessionViewer`) so follow-ups match.
|
|
152
|
+
* Ignored for the `"guest"` audience (the platform share policy owns
|
|
153
|
+
* guest execution config). See {@link SessionRunConfig}.
|
|
154
|
+
*/
|
|
155
|
+
readonly runConfig?: SessionRunConfig;
|
|
144
156
|
}
|
|
145
157
|
|
|
146
158
|
/** Return value of {@link useNewSessionFlow}. */
|
|
@@ -257,9 +269,24 @@ export function useNewSessionFlow(
|
|
|
257
269
|
sessionContext,
|
|
258
270
|
} = options;
|
|
259
271
|
const isGuest = options.audience === "guest";
|
|
272
|
+
// Guests never carry a client pin: guest execution config is owned by
|
|
273
|
+
// the server-side share policy (GUEST_HARNESS reasoning). Validated at
|
|
274
|
+
// render so a statically-wrong pin (fast tier, no model) fails in the
|
|
275
|
+
// embedder's dev loop, not as the end user's failed send.
|
|
276
|
+
const runConfig = isGuest ? undefined : options.runConfig;
|
|
277
|
+
if (runConfig) assertValidRunConfig(runConfig);
|
|
278
|
+
const pinnedModelName = runConfig?.modelName;
|
|
279
|
+
const pinnedServiceTier = runConfig?.serviceTier;
|
|
260
280
|
const contextTarget = useExecutionTarget();
|
|
261
281
|
const executionTarget = options.executionTarget ?? contextTarget;
|
|
262
282
|
const adapter = useRunnerAdapter();
|
|
283
|
+
// Host approval default (#302): pre-arm auto_approve_all on the bootstrap
|
|
284
|
+
// create when the provider says so. Guests never inherit it — a share-link
|
|
285
|
+
// visitor is not the operator the host's trust judgment covers (the
|
|
286
|
+
// GUEST_HARNESS fixed-platform-policy reasoning).
|
|
287
|
+
const approvalDefaults = useApprovalDefaults();
|
|
288
|
+
const autoApproveAll =
|
|
289
|
+
(!isGuest && approvalDefaults?.autoApproveAll) || undefined;
|
|
263
290
|
|
|
264
291
|
const [harness, setHarnessRaw] = useState<HarnessOption>(() => {
|
|
265
292
|
// Guests get the fixed platform policy (see GUEST_HARNESS) and never
|
|
@@ -385,12 +412,19 @@ export function useNewSessionFlow(
|
|
|
385
412
|
const executionFields = {
|
|
386
413
|
org,
|
|
387
414
|
message,
|
|
388
|
-
|
|
415
|
+
// The owner pin wins over the composer and the restored
|
|
416
|
+
// preference (#664); the pinned tier is stamped only as
|
|
417
|
+
// "fast" — standard stays off the wire, preserving the #357
|
|
418
|
+
// UNSPECIFIED-vs-explicit telemetry distinction.
|
|
419
|
+
modelName: pinnedModelName ?? selectedModel ?? validModelId,
|
|
389
420
|
runtimeEnv,
|
|
390
421
|
attachments: context?.attachments,
|
|
391
422
|
interactionMode: context?.interactionMode,
|
|
392
|
-
serviceTier:
|
|
423
|
+
serviceTier: pinnedModelName
|
|
424
|
+
? (pinnedServiceTier === "fast" ? "fast" : undefined)
|
|
425
|
+
: context?.serviceTier,
|
|
393
426
|
workspaceFileRefs: context?.workspaceFileRefs,
|
|
427
|
+
autoApproveAll,
|
|
394
428
|
};
|
|
395
429
|
|
|
396
430
|
// Resolve which agent the bootstrapped session runs against: an
|
|
@@ -477,9 +511,12 @@ export function useNewSessionFlow(
|
|
|
477
511
|
isGuest,
|
|
478
512
|
harness,
|
|
479
513
|
executionTarget,
|
|
514
|
+
autoApproveAll,
|
|
480
515
|
adapter,
|
|
481
516
|
getRuntimeEnv,
|
|
482
517
|
validModelId,
|
|
518
|
+
pinnedModelName,
|
|
519
|
+
pinnedServiceTier,
|
|
483
520
|
workspace,
|
|
484
521
|
mcpServerUsages,
|
|
485
522
|
skillRefs,
|
|
@@ -21,7 +21,9 @@ import type { ServiceTierOption } from "../models/service-tier.js";
|
|
|
21
21
|
import { useStigmer } from "../hooks.js";
|
|
22
22
|
import { toError } from "../internal/toError.js";
|
|
23
23
|
import { useConversationStoreRef } from "../internal/store/index.js";
|
|
24
|
-
import
|
|
24
|
+
// Type-only import so the SharedAgentExecutionFields doc links below resolve;
|
|
25
|
+
// the strict tsdoc gate (tsdoc:check) guards it against removal.
|
|
26
|
+
import { useCreateAgentExecution, type SharedAgentExecutionFields } from "../execution/useCreateAgentExecution.js";
|
|
25
27
|
import { useExecutionStream } from "../execution/useExecutionStream.js";
|
|
26
28
|
import { useAgentExecutionActions } from "../execution/useAgentExecutionActions.js";
|
|
27
29
|
import { useSubmitApproval } from "../execution/useSubmitApproval.js";
|
|
@@ -74,10 +76,12 @@ export interface SendFollowUpOptions {
|
|
|
74
76
|
* Execution-scoped secrets and configuration (Execution Flow).
|
|
75
77
|
*
|
|
76
78
|
* Values are injected into the agent sandbox for this execution only
|
|
77
|
-
* and deleted when the execution completes. They
|
|
78
|
-
* Environment values
|
|
79
|
+
* and deleted when the execution completes. They take the highest
|
|
80
|
+
* merge priority, overriding Environment values bound via the
|
|
81
|
+
* instance. Keys must be declared in the agent's env declarations
|
|
82
|
+
* (a whitelist, not a value source) or they are dropped.
|
|
79
83
|
*
|
|
80
|
-
* @see {@link
|
|
84
|
+
* @see {@link SharedAgentExecutionFields.runtimeEnv}
|
|
81
85
|
*/
|
|
82
86
|
readonly runtimeEnv?: Record<string, EnvVarInput>;
|
|
83
87
|
/**
|
|
@@ -87,7 +91,7 @@ export interface SendFollowUpOptions {
|
|
|
87
91
|
* `agentExecution.uploadAttachment()`. Forwarded directly to
|
|
88
92
|
* execution creation.
|
|
89
93
|
*
|
|
90
|
-
* @see {@link
|
|
94
|
+
* @see {@link SharedAgentExecutionFields.attachments}
|
|
91
95
|
*/
|
|
92
96
|
readonly attachments?: AttachmentInput[];
|
|
93
97
|
/**
|
|
@@ -104,19 +108,19 @@ export interface SendFollowUpOptions {
|
|
|
104
108
|
* the unspecified-vs-explicit distinction (unset resolves to standard on
|
|
105
109
|
* the platform side — never the provider account default).
|
|
106
110
|
*
|
|
107
|
-
* @see {@link
|
|
111
|
+
* @see {@link SharedAgentExecutionFields.serviceTier}
|
|
108
112
|
*/
|
|
109
113
|
readonly serviceTier?: ServiceTierOption;
|
|
110
114
|
/**
|
|
111
115
|
* Marks this execution as a Build-from-plan turn.
|
|
112
116
|
*
|
|
113
|
-
* @see {@link
|
|
117
|
+
* @see {@link SharedAgentExecutionFields.buildFromPlan}
|
|
114
118
|
*/
|
|
115
119
|
readonly buildFromPlan?: boolean;
|
|
116
120
|
/**
|
|
117
121
|
* Auto-approve every tool call for this execution (bypass the HITL gate).
|
|
118
122
|
*
|
|
119
|
-
* @see {@link
|
|
123
|
+
* @see {@link SharedAgentExecutionFields.autoApproveAll}
|
|
120
124
|
*/
|
|
121
125
|
readonly autoApproveAll?: boolean;
|
|
122
126
|
/**
|
|
@@ -125,7 +129,7 @@ export interface SendFollowUpOptions {
|
|
|
125
129
|
* Lightweight "attention" signals — no upload, no injection. The agent
|
|
126
130
|
* reads these files directly from the workspace filesystem.
|
|
127
131
|
*
|
|
128
|
-
* @see {@link
|
|
132
|
+
* @see {@link SharedAgentExecutionFields.workspaceFileRefs}
|
|
129
133
|
*/
|
|
130
134
|
readonly workspaceFileRefs?: string[];
|
|
131
135
|
/**
|
|
@@ -134,7 +138,7 @@ export interface SendFollowUpOptions {
|
|
|
134
138
|
* The conversation read model hides the superseded execution so the
|
|
135
139
|
* edited message replaces the original in place.
|
|
136
140
|
*
|
|
137
|
-
* @see {@link
|
|
141
|
+
* @see {@link SharedAgentExecutionFields.supersedesExecutionId}
|
|
138
142
|
*/
|
|
139
143
|
readonly supersedesExecutionId?: string;
|
|
140
144
|
}
|
|
@@ -6,6 +6,7 @@ import { ApprovalAction } from "@stigmer/protos/ai/stigmer/agentic/agentexecutio
|
|
|
6
6
|
import type { AgentResolution } from "../agent/index.js";
|
|
7
7
|
import { useDefaultAgent } from "../agent/index.js";
|
|
8
8
|
import { useStigmer } from "../hooks.js";
|
|
9
|
+
import { useApprovalDefaults } from "../approval-defaults-context.js";
|
|
9
10
|
import { useWorkspaceEntries, type UseWorkspaceEntriesReturn } from "../workspace/index.js";
|
|
10
11
|
import { useSessionVariables, type UseSessionVariablesReturn } from "../execution/useSessionVariables.js";
|
|
11
12
|
import type { SessionComposerSubmitContext, InteractionModeOption } from "../composer/index.js";
|
|
@@ -19,6 +20,7 @@ import { useAgentRefFromSession } from "./useAgentRefFromSession.js";
|
|
|
19
20
|
import { usePersistedModel, type UsePersistedModelReturn } from "./usePersistedModel.js";
|
|
20
21
|
import { specMcpUsagesToInput, specSkillRefsToInput } from "./session-spec-converters.js";
|
|
21
22
|
import type { SessionAudience } from "./audience.js";
|
|
23
|
+
import { assertValidRunConfig, type SessionRunConfig } from "./run-config.js";
|
|
22
24
|
|
|
23
25
|
/**
|
|
24
26
|
* Well-known Daytona sandbox workspace root. Used as the SDK safety-net
|
|
@@ -56,6 +58,16 @@ export interface UseSessionPageFlowOptions {
|
|
|
56
58
|
* @default "integrator"
|
|
57
59
|
*/
|
|
58
60
|
readonly audience?: SessionAudience;
|
|
61
|
+
/**
|
|
62
|
+
* Owner-pinned model/tier for every follow-up on this surface
|
|
63
|
+
* (stigmer/stigmer#664). Stamped at submit — after the composer, so
|
|
64
|
+
* it wins over composer state, the persisted Console preference, and
|
|
65
|
+
* the last execution's model — and therefore also covers retries,
|
|
66
|
+
* which re-enter the same submit path. Ignored for the `"guest"`
|
|
67
|
+
* audience (the server-side share policy owns guest execution
|
|
68
|
+
* config). See {@link SessionRunConfig}.
|
|
69
|
+
*/
|
|
70
|
+
readonly runConfig?: SessionRunConfig;
|
|
59
71
|
}
|
|
60
72
|
|
|
61
73
|
/** Return value of {@link useSessionPageFlow}. */
|
|
@@ -130,10 +142,13 @@ export interface UseSessionPageFlowReturn {
|
|
|
130
142
|
/**
|
|
131
143
|
* Session-scoped "auto-approve tool calls" preference.
|
|
132
144
|
*
|
|
133
|
-
* `false` by default
|
|
134
|
-
*
|
|
135
|
-
*
|
|
136
|
-
*
|
|
145
|
+
* `false` by default; a host can pre-arm it app-wide via
|
|
146
|
+
* `StigmerProvider`'s `approvalDefaults` (#302, guests excluded). Flipped
|
|
147
|
+
* to `true` when the user chooses "Approve & don't ask again" at an
|
|
148
|
+
* approval gate (see {@link submitApproval}), and carried into every
|
|
149
|
+
* subsequent follow-up via {@link handleSubmit}. Held in memory only —
|
|
150
|
+
* reset on reload / new session back to the host default, never persisted
|
|
151
|
+
* server-side.
|
|
137
152
|
*/
|
|
138
153
|
readonly autoApproveAll: boolean;
|
|
139
154
|
/**
|
|
@@ -240,6 +255,18 @@ export function useSessionPageFlow(
|
|
|
240
255
|
): UseSessionPageFlowReturn {
|
|
241
256
|
const { sessionId, org, getRuntimeEnv } = options;
|
|
242
257
|
const isGuest = options.audience === "guest";
|
|
258
|
+
// Guests never carry a client pin: guest execution config is owned by
|
|
259
|
+
// the server-side share policy, and the no-modelName guest invariant
|
|
260
|
+
// is test-pinned.
|
|
261
|
+
const runConfig = isGuest ? undefined : options.runConfig;
|
|
262
|
+
// Render-time, not submit-time: the pin is static host configuration,
|
|
263
|
+
// so a statically-wrong shape (fast tier, no model) should fail at
|
|
264
|
+
// mount in the embedder's dev loop — not as an end user's failed send.
|
|
265
|
+
if (runConfig) assertValidRunConfig(runConfig);
|
|
266
|
+
// Scalars, not the object: hosts pass inline literals, and the submit
|
|
267
|
+
// callback's identity must not churn on every render (DD-010).
|
|
268
|
+
const pinnedModelName = runConfig?.modelName;
|
|
269
|
+
const pinnedServiceTier = runConfig?.serviceTier;
|
|
243
270
|
|
|
244
271
|
const stigmer = useStigmer();
|
|
245
272
|
const conv = useSessionConversation(sessionId, org);
|
|
@@ -294,9 +321,17 @@ export function useSessionPageFlow(
|
|
|
294
321
|
const [skillRefs, setSkillRefs] = useState<ResourceRef[]>([]);
|
|
295
322
|
const initialSyncDone = useRef(false);
|
|
296
323
|
|
|
297
|
-
// Session-scoped auto-approve
|
|
298
|
-
//
|
|
299
|
-
|
|
324
|
+
// Session-scoped auto-approve. Armed either at the approval gate ("Approve &
|
|
325
|
+
// don't ask again") or from the host's provider-level approvalDefaults
|
|
326
|
+
// (#302) — an app-level trust judgment, so it seeds the INITIAL state only;
|
|
327
|
+
// the user's in-session "Turn off" always wins from then on. Guests never
|
|
328
|
+
// inherit the host default (a share-link visitor is not the operator the
|
|
329
|
+
// host's trust judgment covers). Lives only in memory for the life of this
|
|
330
|
+
// page — reset on reload re-applies the host default, never a user choice.
|
|
331
|
+
const approvalDefaults = useApprovalDefaults();
|
|
332
|
+
const [autoApproveAll, setAutoApproveAll] = useState(
|
|
333
|
+
() => !isGuest && (approvalDefaults?.autoApproveAll ?? false),
|
|
334
|
+
);
|
|
300
335
|
|
|
301
336
|
const submitApproval = useCallback<UseSessionConversationReturn["submitApproval"]>(
|
|
302
337
|
async (toolCallId, action, comment) => {
|
|
@@ -429,7 +464,11 @@ export function useSessionPageFlow(
|
|
|
429
464
|
|
|
430
465
|
conv.sendFollowUp(message, {
|
|
431
466
|
agentInstanceId: agentInstanceIdOverride,
|
|
432
|
-
|
|
467
|
+
// The owner pin wins over everything the user or the SDK
|
|
468
|
+
// resolved (#664); the pinned tier is stamped only as "fast" —
|
|
469
|
+
// an untouched/standard tier stays off the wire, preserving the
|
|
470
|
+
// #357 UNSPECIFIED-vs-explicit telemetry distinction.
|
|
471
|
+
modelName: pinnedModelName ?? selectedModel ?? modelId,
|
|
433
472
|
workspaceEntries: workspace.hasEntries
|
|
434
473
|
? workspace.toInput()
|
|
435
474
|
: undefined,
|
|
@@ -438,7 +477,9 @@ export function useSessionPageFlow(
|
|
|
438
477
|
runtimeEnv,
|
|
439
478
|
attachments: context?.attachments,
|
|
440
479
|
interactionMode: context?.interactionMode,
|
|
441
|
-
serviceTier:
|
|
480
|
+
serviceTier: pinnedModelName
|
|
481
|
+
? (pinnedServiceTier === "fast" ? "fast" : undefined)
|
|
482
|
+
: context?.serviceTier,
|
|
442
483
|
buildFromPlan: context?.buildFromPlan,
|
|
443
484
|
// Sourced from the session-scoped preference set at the approval gate,
|
|
444
485
|
// not from the composer (the pre-arm toggle was removed).
|
|
@@ -449,7 +490,7 @@ export function useSessionPageFlow(
|
|
|
449
490
|
|
|
450
491
|
sessionVariables.clear();
|
|
451
492
|
},
|
|
452
|
-
[conv.sendFollowUp, modelId, workspace, mcpServerUsages, skillRefs, sessionVariables.clear, resolution, agentRef, sessionInstanceId, stigmer, autoApproveAll, getRuntimeEnv],
|
|
493
|
+
[conv.sendFollowUp, modelId, pinnedModelName, pinnedServiceTier, workspace, mcpServerUsages, skillRefs, sessionVariables.clear, resolution, agentRef, sessionInstanceId, stigmer, autoApproveAll, getRuntimeEnv],
|
|
453
494
|
);
|
|
454
495
|
|
|
455
496
|
// -------------------------------------------------------------------------
|