@burdenoff/microfe-botmanor 2026.1108.1 → 2026.1109.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/dist/botlit/BotlitRoutes.d.ts +2 -0
- package/dist/botlit/BotlitRoutes.js +40 -52
- package/dist/botlit/BotlitRoutes.js.map +1 -1
- package/dist/botlit/BotmanorRoot.d.ts +3 -0
- package/dist/botlit/BotmanorRoot.js +1 -2
- package/dist/botlit/BotmanorRoot.js.map +1 -1
- package/dist/botlit/BotmanorRootInner.d.ts +3 -0
- package/dist/botlit/BotmanorRootInner.js +9 -10
- package/dist/botlit/BotmanorRootInner.js.map +1 -1
- package/dist/botlit/components/AgentApprovalPanel.d.ts +20 -0
- package/dist/botlit/components/AgentApprovalPanel.js +49 -50
- package/dist/botlit/components/AgentApprovalPanel.js.map +1 -1
- package/dist/botlit/components/AiOperationsPanel.d.ts +14 -0
- package/dist/botlit/components/AiOperationsPanel.js +54 -55
- package/dist/botlit/components/AiOperationsPanel.js.map +1 -1
- package/dist/botlit/components/AssistantChannelPanel.d.ts +3 -0
- package/dist/botlit/components/AssistantChannelPanel.js +12 -13
- package/dist/botlit/components/AssistantChannelPanel.js.map +1 -1
- package/dist/botlit/components/AssistantRuntimeSetupPanel.d.ts +4 -0
- package/dist/botlit/components/AssistantRuntimeSetupPanel.js +14 -14
- package/dist/botlit/components/AssistantRuntimeSetupPanel.js.map +1 -1
- package/dist/botlit/components/AssistantWebsitePanel.d.ts +5 -0
- package/dist/botlit/components/AssistantWebsitePanel.js +15 -16
- package/dist/botlit/components/AssistantWebsitePanel.js.map +1 -1
- package/dist/botlit/components/Badge.d.ts +9 -0
- package/dist/botlit/components/Badge.js +1 -2
- package/dist/botlit/components/Badge.js.map +1 -1
- package/dist/botlit/components/Button.d.ts +10 -0
- package/dist/botlit/components/Button.js +1 -2
- package/dist/botlit/components/Button.js.map +1 -1
- package/dist/botlit/components/Card.d.ts +16 -0
- package/dist/botlit/components/Card.js +1 -2
- package/dist/botlit/components/Card.js.map +1 -1
- package/dist/botlit/components/ChannelSelectorSheet.d.ts +23 -0
- package/dist/botlit/components/ChannelSelectorSheet.js +1 -2
- package/dist/botlit/components/ChannelSelectorSheet.js.map +1 -1
- package/dist/botlit/components/EmptyState.d.ts +12 -0
- package/dist/botlit/components/EmptyState.js +1 -2
- package/dist/botlit/components/EmptyState.js.map +1 -1
- package/dist/botlit/components/ErrorState.d.ts +10 -0
- package/dist/botlit/components/ErrorState.js +5 -6
- package/dist/botlit/components/ErrorState.js.map +1 -1
- package/dist/botlit/components/Input.d.ts +27 -0
- package/dist/botlit/components/Input.js +1 -2
- package/dist/botlit/components/Input.js.map +1 -1
- package/dist/botlit/components/KnowledgeSourceImportPanel.d.ts +3 -0
- package/dist/botlit/components/KnowledgeSourceImportPanel.js +12 -13
- package/dist/botlit/components/KnowledgeSourceImportPanel.js.map +1 -1
- package/dist/botlit/components/ModelRegistrationPanel.d.ts +5 -0
- package/dist/botlit/components/ModelRegistrationPanel.js +1 -2
- package/dist/botlit/components/ModelRegistrationPanel.js.map +1 -1
- package/dist/botlit/components/PageLayout.d.ts +12 -0
- package/dist/botlit/components/PageLayout.js +1 -2
- package/dist/botlit/components/PageLayout.js.map +1 -1
- package/dist/botlit/components/QuotaExhaustedDialog.d.ts +9 -0
- package/dist/botlit/components/QuotaExhaustedDialog.js +1 -2
- package/dist/botlit/components/QuotaExhaustedDialog.js.map +1 -1
- package/dist/botlit/components/RetentionStatusPanel.d.ts +2 -0
- package/dist/botlit/components/RetentionStatusPanel.js +18 -19
- package/dist/botlit/components/RetentionStatusPanel.js.map +1 -1
- package/dist/botlit/components/RouteLoader.d.ts +23 -0
- package/dist/botlit/components/RouteLoader.js +1 -2
- package/dist/botlit/components/RouteLoader.js.map +1 -1
- package/dist/botlit/components/VersionHistoryPanel.d.ts +12 -0
- package/dist/botlit/components/VersionHistoryPanel.js +23 -24
- package/dist/botlit/components/VersionHistoryPanel.js.map +1 -1
- package/dist/botlit/components/WorkspaceRequired.d.ts +18 -0
- package/dist/botlit/components/WorkspaceRequired.js +1 -2
- package/dist/botlit/components/WorkspaceRequired.js.map +1 -1
- package/dist/botlit/components/index.d.ts +14 -0
- package/dist/botlit/hooks/index.d.ts +35 -0
- package/dist/botlit/hooks/index.js +16 -16
- package/dist/botlit/hooks/internal/mutationInput.d.ts +56 -0
- package/dist/botlit/hooks/internal/mutationInput.js +1 -2
- package/dist/botlit/hooks/internal/mutationInput.js.map +1 -1
- package/dist/botlit/hooks/internal/workspaceGateway.d.ts +54 -0
- package/dist/botlit/hooks/internal/workspaceGateway.js +17 -19
- package/dist/botlit/hooks/internal/workspaceGateway.js.map +1 -1
- package/dist/botlit/hooks/useA2A.d.ts +104 -0
- package/dist/botlit/hooks/useA2A.js +45 -45
- package/dist/botlit/hooks/useA2A.js.map +1 -1
- package/dist/botlit/hooks/useAgentApprovals.d.ts +62 -0
- package/dist/botlit/hooks/useAgentApprovals.js +38 -39
- package/dist/botlit/hooks/useAgentApprovals.js.map +1 -1
- package/dist/botlit/hooks/useAgents.d.ts +105 -0
- package/dist/botlit/hooks/useAgents.js +53 -54
- package/dist/botlit/hooks/useAgents.js.map +1 -1
- package/dist/botlit/hooks/useAiOperations.d.ts +95 -0
- package/dist/botlit/hooks/useAiOperations.js +20 -19
- package/dist/botlit/hooks/useAiOperations.js.map +1 -1
- package/dist/botlit/hooks/useAssistantChannels.d.ts +16 -0
- package/dist/botlit/hooks/useAssistantChannels.js +1 -2
- package/dist/botlit/hooks/useAssistantChannels.js.map +1 -1
- package/dist/botlit/hooks/useAssistantRuntimeSetup.d.ts +17 -0
- package/dist/botlit/hooks/useAssistantRuntimeSetup.js +1 -2
- package/dist/botlit/hooks/useAssistantRuntimeSetup.js.map +1 -1
- package/dist/botlit/hooks/useAssistantWebsites.d.ts +18 -0
- package/dist/botlit/hooks/useAssistantWebsites.js +1 -2
- package/dist/botlit/hooks/useAssistantWebsites.js.map +1 -1
- package/dist/botlit/hooks/useBotWorkflow.d.ts +22 -0
- package/dist/botlit/hooks/useBotWorkflow.js +1 -2
- package/dist/botlit/hooks/useBotWorkflow.js.map +1 -1
- package/dist/botlit/hooks/useBots.d.ts +68 -0
- package/dist/botlit/hooks/useBots.js +32 -33
- package/dist/botlit/hooks/useBots.js.map +1 -1
- package/dist/botlit/hooks/useBuckets.d.ts +62 -0
- package/dist/botlit/hooks/useBuckets.js +91 -58
- package/dist/botlit/hooks/useBuckets.js.map +1 -1
- package/dist/botlit/hooks/useChannels.d.ts +87 -0
- package/dist/botlit/hooks/useChannels.js +73 -73
- package/dist/botlit/hooks/useChannels.js.map +1 -1
- package/dist/botlit/hooks/useExecutions.d.ts +87 -0
- package/dist/botlit/hooks/useExecutions.js +37 -37
- package/dist/botlit/hooks/useExecutions.js.map +1 -1
- package/dist/botlit/hooks/useKnowledgeBases.d.ts +79 -0
- package/dist/botlit/hooks/useKnowledgeBases.js +40 -39
- package/dist/botlit/hooks/useKnowledgeBases.js.map +1 -1
- package/dist/botlit/hooks/useKnowledgeSourceImports.d.ts +21 -0
- package/dist/botlit/hooks/useKnowledgeSourceImports.js +1 -2
- package/dist/botlit/hooks/useKnowledgeSourceImports.js.map +1 -1
- package/dist/botlit/hooks/useLLMProviders.d.ts +66 -0
- package/dist/botlit/hooks/useLLMProviders.js +25 -26
- package/dist/botlit/hooks/useLLMProviders.js.map +1 -1
- package/dist/botlit/hooks/useMCPServers.d.ts +71 -0
- package/dist/botlit/hooks/useMCPServers.js +40 -38
- package/dist/botlit/hooks/useMCPServers.js.map +1 -1
- package/dist/botlit/hooks/usePolicies.d.ts +60 -0
- package/dist/botlit/hooks/usePolicies.js +49 -49
- package/dist/botlit/hooks/usePolicies.js.map +1 -1
- package/dist/botlit/hooks/usePromptTemplates.d.ts +88 -0
- package/dist/botlit/hooks/usePromptTemplates.js +57 -57
- package/dist/botlit/hooks/usePromptTemplates.js.map +1 -1
- package/dist/botlit/hooks/useRetention.d.ts +26 -0
- package/dist/botlit/hooks/useRetention.js +3 -3
- package/dist/botlit/hooks/useRetention.js.map +1 -1
- package/dist/botlit/hooks/useRetrievalProfiles.d.ts +75 -0
- package/dist/botlit/hooks/useRetrievalProfiles.js +47 -47
- package/dist/botlit/hooks/useRetrievalProfiles.js.map +1 -1
- package/dist/botlit/hooks/useSkills.d.ts +64 -0
- package/dist/botlit/hooks/useSkills.js +53 -53
- package/dist/botlit/hooks/useSkills.js.map +1 -1
- package/dist/botlit/hooks/useStore.d.ts +112 -0
- package/dist/botlit/hooks/useStore.js +55 -55
- package/dist/botlit/hooks/useStore.js.map +1 -1
- package/dist/botlit/hooks/useUserPlatformConnection.d.ts +80 -0
- package/dist/botlit/hooks/useUserPlatformConnection.js +19 -19
- package/dist/botlit/hooks/useUserPlatformConnection.js.map +1 -1
- package/dist/botlit/index.d.ts +15 -0
- package/dist/botlit/index.js +11 -11
- package/dist/botlit/pages/A2AAgentDetailPage.d.ts +6 -0
- package/dist/botlit/pages/A2AAgentDetailPage.js +171 -178
- package/dist/botlit/pages/A2AAgentDetailPage.js.map +1 -1
- package/dist/botlit/pages/A2ARegistryPage.d.ts +2 -0
- package/dist/botlit/pages/A2ARegistryPage.js +25 -26
- package/dist/botlit/pages/A2ARegistryPage.js.map +1 -1
- package/dist/botlit/pages/AgentApprovalsPage.d.ts +2 -0
- package/dist/botlit/pages/AgentApprovalsPage.js +32 -33
- package/dist/botlit/pages/AgentApprovalsPage.js.map +1 -1
- package/dist/botlit/pages/AgentBuilderPage.d.ts +2 -0
- package/dist/botlit/pages/AgentBuilderPage.js +59 -60
- package/dist/botlit/pages/AgentBuilderPage.js.map +1 -1
- package/dist/botlit/pages/AgentDetailPage.d.ts +2 -0
- package/dist/botlit/pages/AgentDetailPage.js +83 -84
- package/dist/botlit/pages/AgentDetailPage.js.map +1 -1
- package/dist/botlit/pages/AgentsListPage.d.ts +2 -0
- package/dist/botlit/pages/AgentsListPage.js +71 -72
- package/dist/botlit/pages/AgentsListPage.js.map +1 -1
- package/dist/botlit/pages/AiOperationsPage.d.ts +2 -0
- package/dist/botlit/pages/AiOperationsPage.js +52 -53
- package/dist/botlit/pages/AiOperationsPage.js.map +1 -1
- package/dist/botlit/pages/BotChannelsTab.d.ts +7 -0
- package/dist/botlit/pages/BotChannelsTab.js +120 -122
- package/dist/botlit/pages/BotChannelsTab.js.map +1 -1
- package/dist/botlit/pages/BotDetailPage.d.ts +7 -0
- package/dist/botlit/pages/BotDetailPage.js +353 -358
- package/dist/botlit/pages/BotDetailPage.js.map +1 -1
- package/dist/botlit/pages/BotWorkflowTab.d.ts +11 -0
- package/dist/botlit/pages/BotWorkflowTab.js +20 -21
- package/dist/botlit/pages/BotWorkflowTab.js.map +1 -1
- package/dist/botlit/pages/BotsListPage.d.ts +2 -0
- package/dist/botlit/pages/BotsListPage.js +52 -53
- package/dist/botlit/pages/BotsListPage.js.map +1 -1
- package/dist/botlit/pages/BucketDetailPage.d.ts +2 -0
- package/dist/botlit/pages/BucketDetailPage.js +251 -0
- package/dist/botlit/pages/BucketDetailPage.js.map +1 -0
- package/dist/botlit/pages/BucketsPage.d.ts +2 -0
- package/dist/botlit/pages/BucketsPage.js +260 -261
- package/dist/botlit/pages/BucketsPage.js.map +1 -1
- package/dist/botlit/pages/ChannelDetailPage.d.ts +6 -0
- package/dist/botlit/pages/ChannelDetailPage.js +97 -96
- package/dist/botlit/pages/ChannelDetailPage.js.map +1 -1
- package/dist/botlit/pages/ChannelRoutesPage.d.ts +2 -0
- package/dist/botlit/pages/ChannelRoutesPage.js +23 -24
- package/dist/botlit/pages/ChannelRoutesPage.js.map +1 -1
- package/dist/botlit/pages/ChannelsPage.d.ts +2 -0
- package/dist/botlit/pages/ChannelsPage.js +44 -45
- package/dist/botlit/pages/ChannelsPage.js.map +1 -1
- package/dist/botlit/pages/ChatPage.d.ts +1 -0
- package/dist/botlit/pages/ChatPage.js +10 -11
- package/dist/botlit/pages/ChatPage.js.map +1 -1
- package/dist/botlit/pages/DashboardPage.d.ts +2 -0
- package/dist/botlit/pages/DashboardPage.js +37 -38
- package/dist/botlit/pages/DashboardPage.js.map +1 -1
- package/dist/botlit/pages/ExecutionDetailPage.d.ts +2 -0
- package/dist/botlit/pages/ExecutionDetailPage.js +47 -48
- package/dist/botlit/pages/ExecutionDetailPage.js.map +1 -1
- package/dist/botlit/pages/ExecutionsPage.d.ts +2 -0
- package/dist/botlit/pages/ExecutionsPage.js +72 -70
- package/dist/botlit/pages/ExecutionsPage.js.map +1 -1
- package/dist/botlit/pages/InstalledPackagesPage.d.ts +2 -0
- package/dist/botlit/pages/InstalledPackagesPage.js +77 -78
- package/dist/botlit/pages/InstalledPackagesPage.js.map +1 -1
- package/dist/botlit/pages/KnowledgeBaseDetailPage.d.ts +6 -0
- package/dist/botlit/pages/KnowledgeBaseDetailPage.js +171 -181
- package/dist/botlit/pages/KnowledgeBaseDetailPage.js.map +1 -1
- package/dist/botlit/pages/KnowledgeBasesPage.d.ts +2 -0
- package/dist/botlit/pages/KnowledgeBasesPage.js +30 -31
- package/dist/botlit/pages/KnowledgeBasesPage.js.map +1 -1
- package/dist/botlit/pages/MCPServerDetailPage.d.ts +6 -0
- package/dist/botlit/pages/MCPServerDetailPage.js +82 -83
- package/dist/botlit/pages/MCPServerDetailPage.js.map +1 -1
- package/dist/botlit/pages/MCPServersPage.d.ts +2 -0
- package/dist/botlit/pages/MCPServersPage.js +54 -55
- package/dist/botlit/pages/MCPServersPage.js.map +1 -1
- package/dist/botlit/pages/PoliciesPage.d.ts +2 -0
- package/dist/botlit/pages/PoliciesPage.js +25 -26
- package/dist/botlit/pages/PoliciesPage.js.map +1 -1
- package/dist/botlit/pages/PolicyDetailPage.d.ts +6 -0
- package/dist/botlit/pages/PolicyDetailPage.js +257 -259
- package/dist/botlit/pages/PolicyDetailPage.js.map +1 -1
- package/dist/botlit/pages/PromptStudioPage.d.ts +2 -0
- package/dist/botlit/pages/PromptStudioPage.js +35 -35
- package/dist/botlit/pages/PromptStudioPage.js.map +1 -1
- package/dist/botlit/pages/PromptTemplateDetailPage.d.ts +6 -0
- package/dist/botlit/pages/PromptTemplateDetailPage.js +363 -362
- package/dist/botlit/pages/PromptTemplateDetailPage.js.map +1 -1
- package/dist/botlit/pages/PromptTemplatesPage.d.ts +2 -0
- package/dist/botlit/pages/PromptTemplatesPage.js +26 -27
- package/dist/botlit/pages/PromptTemplatesPage.js.map +1 -1
- package/dist/botlit/pages/RetrievalProfileDetailPage.d.ts +6 -0
- package/dist/botlit/pages/RetrievalProfileDetailPage.js +150 -158
- package/dist/botlit/pages/RetrievalProfileDetailPage.js.map +1 -1
- package/dist/botlit/pages/RetrievalProfilesPage.d.ts +2 -0
- package/dist/botlit/pages/RetrievalProfilesPage.js +24 -25
- package/dist/botlit/pages/RetrievalProfilesPage.js.map +1 -1
- package/dist/botlit/pages/SettingsPage.d.ts +2 -0
- package/dist/botlit/pages/SettingsPage.js +124 -125
- package/dist/botlit/pages/SettingsPage.js.map +1 -1
- package/dist/botlit/pages/SkillDetailPage.d.ts +6 -0
- package/dist/botlit/pages/SkillDetailPage.js +216 -217
- package/dist/botlit/pages/SkillDetailPage.js.map +1 -1
- package/dist/botlit/pages/SkillsPage.d.ts +2 -0
- package/dist/botlit/pages/SkillsPage.js +24 -25
- package/dist/botlit/pages/SkillsPage.js.map +1 -1
- package/dist/botlit/pages/StorePackageDetailPage.d.ts +2 -0
- package/dist/botlit/pages/StorePackageDetailPage.js +38 -39
- package/dist/botlit/pages/StorePackageDetailPage.js.map +1 -1
- package/dist/botlit/pages/StorePage.d.ts +2 -0
- package/dist/botlit/pages/StorePage.js +135 -136
- package/dist/botlit/pages/StorePage.js.map +1 -1
- package/dist/botlit/pages/index.d.ts +38 -0
- package/dist/botlit/permissions/PermissionRequired.d.ts +20 -0
- package/dist/botlit/permissions/PermissionRequired.js +10 -11
- package/dist/botlit/permissions/PermissionRequired.js.map +1 -1
- package/dist/botlit/permissions/botmanorPermissions.d.ts +82 -0
- package/dist/botlit/permissions/botmanorPermissions.js +1 -2
- package/dist/botlit/permissions/botmanorPermissions.js.map +1 -1
- package/dist/botlit/permissions/index.d.ts +7 -0
- package/dist/botlit/permissions/index.js +4 -3
- package/dist/botlit/permissions/useBotmanorPermissions.d.ts +41 -0
- package/dist/botlit/permissions/useBotmanorPermissions.js +1 -2
- package/dist/botlit/permissions/useBotmanorPermissions.js.map +1 -1
- package/dist/botlit/providers/BotlitProvider.d.ts +14 -0
- package/dist/botlit/providers/BotlitProvider.js +3 -3
- package/dist/botlit/providers/BotlitProvider.js.map +1 -1
- package/dist/botlit/store/botlitStore.d.ts +85 -0
- package/dist/botlit/store/botlitStore.js +1 -2
- package/dist/botlit/store/botlitStore.js.map +1 -1
- package/dist/botlit/store/renamedKeyStorage.d.ts +13 -0
- package/dist/botlit/store/renamedKeyStorage.js +1 -2
- package/dist/botlit/store/renamedKeyStorage.js.map +1 -1
- package/dist/botlit/types/index.d.ts +1008 -0
- package/dist/botlit/utils/cn.d.ts +2 -0
- package/dist/botlit/utils/cn.js +1 -2
- package/dist/botlit/utils/cn.js.map +1 -1
- package/dist/botlit/utils/embedding-models.d.ts +9 -0
- package/dist/botlit/utils/embedding-models.js +1 -2
- package/dist/botlit/utils/embedding-models.js.map +1 -1
- package/dist/botlit/utils/errors.d.ts +19 -0
- package/dist/botlit/utils/errors.js +1 -2
- package/dist/botlit/utils/errors.js.map +1 -1
- package/dist/botlit/utils/formatters.d.ts +38 -0
- package/dist/botlit/utils/formatters.js +0 -1
- package/dist/botlit/utils/formatters.js.map +1 -1
- package/dist/botlit/utils/navigation.d.ts +19 -0
- package/dist/botlit/utils/navigation.js +1 -2
- package/dist/botlit/utils/navigation.js.map +1 -1
- package/dist/botlit/utils/policyConfig.d.ts +68 -0
- package/dist/botlit/utils/policyConfig.js +2 -3
- package/dist/botlit/utils/policyConfig.js.map +1 -1
- package/dist/botlit/utils/unions.d.ts +25 -0
- package/dist/botlit/utils/unions.js +1 -2
- package/dist/botlit/utils/unions.js.map +1 -1
- package/dist/dev/App.d.ts +2 -0
- package/dist/dev/main.d.ts +0 -0
- package/dist/generated/global-operations.d.ts +197 -0
- package/dist/generated/global-operations.js +1 -2
- package/dist/generated/global-operations.js.map +1 -1
- package/dist/generated/global-types.d.ts +27678 -0
- package/dist/generated/global-types.js +1 -2
- package/dist/generated/global-types.js.map +1 -1
- package/dist/generated/wspace-operations.d.ts +5489 -0
- package/dist/generated/wspace-operations.js +88 -84
- package/dist/generated/wspace-operations.js.map +1 -1
- package/dist/generated/wspace-types.d.ts +152017 -0
- package/dist/generated/wspace-types.js +1 -2
- package/dist/generated/wspace-types.js.map +1 -1
- package/dist/index.d.ts +5 -0
- package/dist/index.js +5 -6
- package/dist/shared/hooks/useTr.d.ts +16 -0
- package/dist/shared/hooks/useTr.js +1 -2
- package/dist/shared/hooks/useTr.js.map +1 -1
- package/dist/stories/Badge.stories.d.ts +11 -0
- package/dist/stories/Button.stories.d.ts +13 -0
- package/dist/stories/EmptyState.stories.d.ts +8 -0
- package/dist/stories/StatusBadge.stories.d.ts +9 -0
- package/dist/test/fixtures.d.ts +39 -0
- package/dist/test/happydom.d.ts +1 -0
- package/dist/test/renderPage.d.ts +18 -0
- package/dist/test/setup.d.ts +9 -0
- package/dist/utils/nativeBridge.d.ts +2 -0
- package/dist/utils/nativeBridge.js +1 -2
- package/package.json +87 -60
- package/dist/botlit/hooks/useConversations.js +0 -64
- package/dist/botlit/hooks/useConversations.js.map +0 -1
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
export type AgentApprovalStatus = 'PENDING' | 'APPROVED' | 'REJECTED' | 'CANCELLED';
|
|
2
|
+
export interface AgentApprovalSettingsRecord {
|
|
3
|
+
workspaceId: string;
|
|
4
|
+
requireActivationApproval: boolean;
|
|
5
|
+
updatedAt?: string | null;
|
|
6
|
+
updatedById?: string | null;
|
|
7
|
+
}
|
|
8
|
+
export interface AgentApprovalRequestRecord {
|
|
9
|
+
id: string;
|
|
10
|
+
agentId: string;
|
|
11
|
+
versionId?: string | null;
|
|
12
|
+
status: AgentApprovalStatus;
|
|
13
|
+
requestedById: string;
|
|
14
|
+
requestNote?: string | null;
|
|
15
|
+
reviewerId?: string | null;
|
|
16
|
+
decisionReason?: string | null;
|
|
17
|
+
decidedAt?: string | null;
|
|
18
|
+
isStale: boolean;
|
|
19
|
+
createdAt: string;
|
|
20
|
+
}
|
|
21
|
+
export interface AgentApprovalFilter {
|
|
22
|
+
agentId?: string;
|
|
23
|
+
status?: AgentApprovalStatus;
|
|
24
|
+
}
|
|
25
|
+
/** The workspace's approval requirement, with a setter for reviewers. */
|
|
26
|
+
export declare function useAgentApprovalSettings(): {
|
|
27
|
+
data: AgentApprovalSettingsRecord | null;
|
|
28
|
+
loading: boolean;
|
|
29
|
+
saving: boolean;
|
|
30
|
+
error: Error | undefined;
|
|
31
|
+
refetch: () => Promise<void>;
|
|
32
|
+
update: (requireActivationApproval: boolean) => Promise<AgentApprovalSettingsRecord>;
|
|
33
|
+
};
|
|
34
|
+
/** Activation requests in the workspace, newest first. */
|
|
35
|
+
export declare function useAgentApprovalRequests(filter: AgentApprovalFilter): {
|
|
36
|
+
data: AgentApprovalRequestRecord[];
|
|
37
|
+
loading: boolean;
|
|
38
|
+
error: Error | undefined;
|
|
39
|
+
refetch: () => Promise<void>;
|
|
40
|
+
};
|
|
41
|
+
type ApprovalAction = {
|
|
42
|
+
kind: 'request';
|
|
43
|
+
agentId: string;
|
|
44
|
+
note?: string;
|
|
45
|
+
} | {
|
|
46
|
+
kind: 'approve';
|
|
47
|
+
id: string;
|
|
48
|
+
reason?: string;
|
|
49
|
+
} | {
|
|
50
|
+
kind: 'reject';
|
|
51
|
+
id: string;
|
|
52
|
+
reason: string;
|
|
53
|
+
} | {
|
|
54
|
+
kind: 'cancel';
|
|
55
|
+
id: string;
|
|
56
|
+
};
|
|
57
|
+
/** Request, approve, reject or cancel an activation request. */
|
|
58
|
+
export declare function useAgentApprovalActions(): {
|
|
59
|
+
run: (action: ApprovalAction) => Promise<AgentApprovalRequestRecord>;
|
|
60
|
+
pending: "cancel" | "request" | "approve" | "reject" | null;
|
|
61
|
+
};
|
|
62
|
+
export {};
|
|
@@ -2,7 +2,7 @@ import { useBotlit as e } from "../providers/BotlitProvider.js";
|
|
|
2
2
|
import { useCallback as t, useEffect as n, useState as r } from "react";
|
|
3
3
|
import { gql as i } from "@apollo/client";
|
|
4
4
|
import { useGatewayClient as a } from "@burdenoff/fe-libs/shared/graphql";
|
|
5
|
-
|
|
5
|
+
// src/botlit/hooks/useAgentApprovals.ts
|
|
6
6
|
var o = "\n id\n agentId\n versionId\n status\n requestedById\n requestNote\n reviewerId\n decisionReason\n decidedAt\n isStale\n createdAt\n", s = i`
|
|
7
7
|
query BotmanorAgentApprovalSettings {
|
|
8
8
|
botmanorAgentApprovalSettings {
|
|
@@ -60,20 +60,20 @@ function m(e, t) {
|
|
|
60
60
|
}
|
|
61
61
|
function h() {
|
|
62
62
|
let i = a("workspace"), { workspaceId: o } = e(), [l, u] = r(null), [d, f] = r(!1), [p, h] = r(!1), [g, _] = r(), v = t(async () => {
|
|
63
|
-
if (!o)
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
63
|
+
if (!o) u(null);
|
|
64
|
+
else {
|
|
65
|
+
f(!0), _(void 0);
|
|
66
|
+
try {
|
|
67
|
+
let e = await i.query({
|
|
68
|
+
query: s,
|
|
69
|
+
fetchPolicy: "network-only"
|
|
70
|
+
});
|
|
71
|
+
u(e.data?.botmanorAgentApprovalSettings ?? null);
|
|
72
|
+
} catch (e) {
|
|
73
|
+
_(m(e, "Failed to load approval settings"));
|
|
74
|
+
} finally {
|
|
75
|
+
f(!1);
|
|
76
|
+
}
|
|
77
77
|
}
|
|
78
78
|
}, [i, o]);
|
|
79
79
|
return n(() => {
|
|
@@ -103,30 +103,30 @@ function h() {
|
|
|
103
103
|
}
|
|
104
104
|
function g(i) {
|
|
105
105
|
let o = a("workspace"), { workspaceId: s } = e(), [c, u] = r([]), [d, f] = r(!1), [p, h] = r(), { agentId: g, status: _ } = i, v = t(async () => {
|
|
106
|
-
if (!s)
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
106
|
+
if (!s) u([]);
|
|
107
|
+
else {
|
|
108
|
+
f(!0), h(void 0);
|
|
109
|
+
try {
|
|
110
|
+
let e = await o.query({
|
|
111
|
+
query: l,
|
|
112
|
+
variables: {
|
|
113
|
+
filter: {
|
|
114
|
+
agentId: g || void 0,
|
|
115
|
+
status: _ || void 0
|
|
116
|
+
},
|
|
117
|
+
pagination: {
|
|
118
|
+
limit: 50,
|
|
119
|
+
offset: 0
|
|
120
|
+
}
|
|
118
121
|
},
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
h(m(e, "Failed to load activation requests"));
|
|
128
|
-
} finally {
|
|
129
|
-
f(!1);
|
|
122
|
+
fetchPolicy: "network-only"
|
|
123
|
+
});
|
|
124
|
+
u(e.data?.listBotmanorAgentApprovalRequests ?? []);
|
|
125
|
+
} catch (e) {
|
|
126
|
+
h(m(e, "Failed to load activation requests"));
|
|
127
|
+
} finally {
|
|
128
|
+
f(!1);
|
|
129
|
+
}
|
|
130
130
|
}
|
|
131
131
|
}, [
|
|
132
132
|
g,
|
|
@@ -189,7 +189,6 @@ function v(e, t) {
|
|
|
189
189
|
if (!e) throw Error(`Failed to ${t} activation`);
|
|
190
190
|
return e;
|
|
191
191
|
}
|
|
192
|
-
//#endregion
|
|
193
192
|
export { _ as useAgentApprovalActions, g as useAgentApprovalRequests, h as useAgentApprovalSettings };
|
|
194
193
|
|
|
195
194
|
//# sourceMappingURL=useAgentApprovals.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAgentApprovals.js","names":[],"sources":["../../../src/botlit/hooks/useAgentApprovals.ts"],"sourcesContent":["/**\n * Agent activation approval hooks (BOFF-9682).\n *\n * A workspace can require reviewer approval before an agent goes live. Builders\n * request activation; reviewers holding `botmanor-agent:approve` approve\n * (which publishes the agent's draft and sets it ACTIVE) or reject with a\n * reason. These hooks wrap the `*BotmanorAgentApproval*` fields of\n * wspace-botmanor-svc.\n */\nimport { gql, type ApolloClient } from '@apollo/client';\nimport { useCallback, useEffect, useState } from 'react';\nimport { useGatewayClient } from '@burdenoff/fe-libs/shared/graphql';\n\nimport { useBotlit } from '../providers/BotlitProvider';\n\nconst APPROVAL_REQUEST_FIELDS = `\n id\n agentId\n versionId\n status\n requestedById\n requestNote\n reviewerId\n decisionReason\n decidedAt\n isStale\n createdAt\n`;\n\nconst GET_SETTINGS_DOCUMENT = gql`\n query BotmanorAgentApprovalSettings {\n botmanorAgentApprovalSettings {\n workspaceId\n requireActivationApproval\n updatedAt\n updatedById\n }\n }\n`;\n\nconst UPDATE_SETTINGS_DOCUMENT = gql`\n mutation UpdateBotmanorAgentApprovalSettings($requireActivationApproval: Boolean!) {\n updateBotmanorAgentApprovalSettings(requireActivationApproval: $requireActivationApproval) {\n workspaceId\n requireActivationApproval\n updatedAt\n updatedById\n }\n }\n`;\n\nconst LIST_REQUESTS_DOCUMENT = gql`\n query ListBotmanorAgentApprovalRequests(\n $filter: BotmanorAgentApprovalFilterInput\n $pagination: PaginationInput\n ) {\n listBotmanorAgentApprovalRequests(filter: $filter, pagination: $pagination) {\n ${APPROVAL_REQUEST_FIELDS}\n }\n }\n`;\n\nconst REQUEST_ACTIVATION_DOCUMENT = gql`\n mutation RequestBotmanorAgentActivation($agentId: ID!, $note: String) {\n requestBotmanorAgentActivation(agentId: $agentId, note: $note) {\n ${APPROVAL_REQUEST_FIELDS}\n }\n }\n`;\n\nconst APPROVE_DOCUMENT = gql`\n mutation ApproveBotmanorAgentActivation($id: ID!, $reason: String) {\n approveBotmanorAgentActivation(id: $id, reason: $reason) {\n ${APPROVAL_REQUEST_FIELDS}\n }\n }\n`;\n\nconst REJECT_DOCUMENT = gql`\n mutation RejectBotmanorAgentActivation($id: ID!, $reason: String!) {\n rejectBotmanorAgentActivation(id: $id, reason: $reason) {\n ${APPROVAL_REQUEST_FIELDS}\n }\n }\n`;\n\nconst CANCEL_DOCUMENT = gql`\n mutation CancelBotmanorAgentActivationRequest($id: ID!) {\n cancelBotmanorAgentActivationRequest(id: $id) {\n ${APPROVAL_REQUEST_FIELDS}\n }\n }\n`;\n\nexport type AgentApprovalStatus = 'PENDING' | 'APPROVED' | 'REJECTED' | 'CANCELLED';\n\nexport interface AgentApprovalSettingsRecord {\n workspaceId: string;\n requireActivationApproval: boolean;\n updatedAt?: string | null;\n updatedById?: string | null;\n}\n\nexport interface AgentApprovalRequestRecord {\n id: string;\n agentId: string;\n versionId?: string | null;\n status: AgentApprovalStatus;\n requestedById: string;\n requestNote?: string | null;\n reviewerId?: string | null;\n decisionReason?: string | null;\n decidedAt?: string | null;\n isStale: boolean;\n createdAt: string;\n}\n\nexport interface AgentApprovalFilter {\n agentId?: string;\n status?: AgentApprovalStatus;\n}\n\nfunction toError(error: unknown, fallback: string): Error {\n return error instanceof Error ? error : new Error(fallback);\n}\n\n/** The workspace's approval requirement, with a setter for reviewers. */\nexport function useAgentApprovalSettings() {\n const client = useGatewayClient('workspace') as ApolloClient;\n const { workspaceId } = useBotlit();\n const [data, setData] = useState<AgentApprovalSettingsRecord | null>(null);\n const [loading, setLoading] = useState(false);\n const [saving, setSaving] = useState(false);\n const [error, setError] = useState<Error | undefined>();\n\n const refetch = useCallback(async () => {\n if (!workspaceId) {\n setData(null);\n return;\n }\n setLoading(true);\n setError(undefined);\n try {\n const result = await client.query<{\n botmanorAgentApprovalSettings: AgentApprovalSettingsRecord;\n }>({\n query: GET_SETTINGS_DOCUMENT,\n fetchPolicy: 'network-only',\n });\n setData(result.data?.botmanorAgentApprovalSettings ?? null);\n } catch (queryError) {\n setError(toError(queryError, 'Failed to load approval settings'));\n } finally {\n setLoading(false);\n }\n }, [client, workspaceId]);\n\n useEffect(() => {\n void refetch();\n }, [refetch]);\n\n const update = useCallback(\n async (requireActivationApproval: boolean) => {\n setSaving(true);\n try {\n const result = await client.mutate<{\n updateBotmanorAgentApprovalSettings: AgentApprovalSettingsRecord;\n }>({\n mutation: UPDATE_SETTINGS_DOCUMENT,\n variables: { requireActivationApproval },\n });\n const next = result.data?.updateBotmanorAgentApprovalSettings;\n if (!next) throw new Error('Failed to update approval settings');\n setData(next);\n return next;\n } catch (mutationError) {\n throw toError(mutationError, 'Failed to update approval settings');\n } finally {\n setSaving(false);\n }\n },\n [client]\n );\n\n return { data, loading, saving, error, refetch, update };\n}\n\n/** Activation requests in the workspace, newest first. */\nexport function useAgentApprovalRequests(filter: AgentApprovalFilter) {\n const client = useGatewayClient('workspace') as ApolloClient;\n const { workspaceId } = useBotlit();\n const [data, setData] = useState<AgentApprovalRequestRecord[]>([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | undefined>();\n const { agentId, status } = filter;\n\n const refetch = useCallback(async () => {\n if (!workspaceId) {\n setData([]);\n return;\n }\n setLoading(true);\n setError(undefined);\n try {\n const result = await client.query<{\n listBotmanorAgentApprovalRequests: AgentApprovalRequestRecord[];\n }>({\n query: LIST_REQUESTS_DOCUMENT,\n variables: {\n filter: { agentId: agentId || undefined, status: status || undefined },\n pagination: { limit: 50, offset: 0 },\n },\n fetchPolicy: 'network-only',\n });\n setData(result.data?.listBotmanorAgentApprovalRequests ?? []);\n } catch (queryError) {\n setError(toError(queryError, 'Failed to load activation requests'));\n } finally {\n setLoading(false);\n }\n }, [agentId, client, status, workspaceId]);\n\n useEffect(() => {\n void refetch();\n }, [refetch]);\n\n return { data, loading, error, refetch };\n}\n\ntype ApprovalAction =\n | { kind: 'request'; agentId: string; note?: string }\n | { kind: 'approve'; id: string; reason?: string }\n | { kind: 'reject'; id: string; reason: string }\n | { kind: 'cancel'; id: string };\n\n/** Request, approve, reject or cancel an activation request. */\nexport function useAgentApprovalActions() {\n const client = useGatewayClient('workspace') as ApolloClient;\n const [pending, setPending] = useState<ApprovalAction['kind'] | null>(null);\n\n const run = useCallback(\n async (action: ApprovalAction): Promise<AgentApprovalRequestRecord> => {\n setPending(action.kind);\n try {\n switch (action.kind) {\n case 'request': {\n const result = await client.mutate<{\n requestBotmanorAgentActivation: AgentApprovalRequestRecord;\n }>({\n mutation: REQUEST_ACTIVATION_DOCUMENT,\n variables: { agentId: action.agentId, note: action.note?.trim() || undefined },\n });\n return required(result.data?.requestBotmanorAgentActivation, 'request');\n }\n case 'approve': {\n const result = await client.mutate<{\n approveBotmanorAgentActivation: AgentApprovalRequestRecord;\n }>({\n mutation: APPROVE_DOCUMENT,\n variables: { id: action.id, reason: action.reason?.trim() || undefined },\n });\n return required(result.data?.approveBotmanorAgentActivation, 'approve');\n }\n case 'reject': {\n const result = await client.mutate<{\n rejectBotmanorAgentActivation: AgentApprovalRequestRecord;\n }>({\n mutation: REJECT_DOCUMENT,\n variables: { id: action.id, reason: action.reason.trim() },\n });\n return required(result.data?.rejectBotmanorAgentActivation, 'reject');\n }\n case 'cancel': {\n const result = await client.mutate<{\n cancelBotmanorAgentActivationRequest: AgentApprovalRequestRecord;\n }>({\n mutation: CANCEL_DOCUMENT,\n variables: { id: action.id },\n });\n return required(result.data?.cancelBotmanorAgentActivationRequest, 'cancel');\n }\n }\n } catch (mutationError) {\n throw toError(mutationError, `Failed to ${action.kind} activation`);\n } finally {\n setPending(null);\n }\n },\n [client]\n );\n\n return { run, pending };\n}\n\nfunction required(\n value: AgentApprovalRequestRecord | undefined,\n kind: ApprovalAction['kind']\n): AgentApprovalRequestRecord {\n if (!value) throw new Error(`Failed to ${kind} activation`);\n return value;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useAgentApprovals.js","names":["APPROVAL_REQUEST_FIELDS","GET_SETTINGS_DOCUMENT","UPDATE_SETTINGS_DOCUMENT","LIST_REQUESTS_DOCUMENT","REQUEST_ACTIVATION_DOCUMENT","APPROVE_DOCUMENT","REJECT_DOCUMENT","CANCEL_DOCUMENT","toError","error","fallback","useAgentApprovalSettings","client","useGatewayClient","useBotlit","data","setData","useState","loading","setLoading","saving","setSaving","setError","refetch","useCallback","workspaceId","result","queryError","useEffect","next","mutationError","useAgentApprovalRequests","filter","agentId","status","useAgentApprovalActions","pending","setPending","action","required","value","kind"],"sources":["../../../src/botlit/hooks/useAgentApprovals.ts"],"sourcesContent":["/**\n * Agent activation approval hooks (BOFF-9682).\n *\n * A workspace can require reviewer approval before an agent goes live. Builders\n * request activation; reviewers holding `botmanor-agent:approve` approve\n * (which publishes the agent's draft and sets it ACTIVE) or reject with a\n * reason. These hooks wrap the `*BotmanorAgentApproval*` fields of\n * wspace-botmanor-svc.\n */\nimport { gql, type ApolloClient } from '@apollo/client';\nimport { useCallback, useEffect, useState } from 'react';\nimport { useGatewayClient } from '@burdenoff/fe-libs/shared/graphql';\n\nimport { useBotlit } from '../providers/BotlitProvider';\n\nconst APPROVAL_REQUEST_FIELDS = `\n id\n agentId\n versionId\n status\n requestedById\n requestNote\n reviewerId\n decisionReason\n decidedAt\n isStale\n createdAt\n`;\n\nconst GET_SETTINGS_DOCUMENT = gql`\n query BotmanorAgentApprovalSettings {\n botmanorAgentApprovalSettings {\n workspaceId\n requireActivationApproval\n updatedAt\n updatedById\n }\n }\n`;\n\nconst UPDATE_SETTINGS_DOCUMENT = gql`\n mutation UpdateBotmanorAgentApprovalSettings($requireActivationApproval: Boolean!) {\n updateBotmanorAgentApprovalSettings(requireActivationApproval: $requireActivationApproval) {\n workspaceId\n requireActivationApproval\n updatedAt\n updatedById\n }\n }\n`;\n\nconst LIST_REQUESTS_DOCUMENT = gql`\n query ListBotmanorAgentApprovalRequests(\n $filter: BotmanorAgentApprovalFilterInput\n $pagination: PaginationInput\n ) {\n listBotmanorAgentApprovalRequests(filter: $filter, pagination: $pagination) {\n ${APPROVAL_REQUEST_FIELDS}\n }\n }\n`;\n\nconst REQUEST_ACTIVATION_DOCUMENT = gql`\n mutation RequestBotmanorAgentActivation($agentId: ID!, $note: String) {\n requestBotmanorAgentActivation(agentId: $agentId, note: $note) {\n ${APPROVAL_REQUEST_FIELDS}\n }\n }\n`;\n\nconst APPROVE_DOCUMENT = gql`\n mutation ApproveBotmanorAgentActivation($id: ID!, $reason: String) {\n approveBotmanorAgentActivation(id: $id, reason: $reason) {\n ${APPROVAL_REQUEST_FIELDS}\n }\n }\n`;\n\nconst REJECT_DOCUMENT = gql`\n mutation RejectBotmanorAgentActivation($id: ID!, $reason: String!) {\n rejectBotmanorAgentActivation(id: $id, reason: $reason) {\n ${APPROVAL_REQUEST_FIELDS}\n }\n }\n`;\n\nconst CANCEL_DOCUMENT = gql`\n mutation CancelBotmanorAgentActivationRequest($id: ID!) {\n cancelBotmanorAgentActivationRequest(id: $id) {\n ${APPROVAL_REQUEST_FIELDS}\n }\n }\n`;\n\nexport type AgentApprovalStatus = 'PENDING' | 'APPROVED' | 'REJECTED' | 'CANCELLED';\n\nexport interface AgentApprovalSettingsRecord {\n workspaceId: string;\n requireActivationApproval: boolean;\n updatedAt?: string | null;\n updatedById?: string | null;\n}\n\nexport interface AgentApprovalRequestRecord {\n id: string;\n agentId: string;\n versionId?: string | null;\n status: AgentApprovalStatus;\n requestedById: string;\n requestNote?: string | null;\n reviewerId?: string | null;\n decisionReason?: string | null;\n decidedAt?: string | null;\n isStale: boolean;\n createdAt: string;\n}\n\nexport interface AgentApprovalFilter {\n agentId?: string;\n status?: AgentApprovalStatus;\n}\n\nfunction toError(error: unknown, fallback: string): Error {\n return error instanceof Error ? error : new Error(fallback);\n}\n\n/** The workspace's approval requirement, with a setter for reviewers. */\nexport function useAgentApprovalSettings() {\n const client = useGatewayClient('workspace') as ApolloClient;\n const { workspaceId } = useBotlit();\n const [data, setData] = useState<AgentApprovalSettingsRecord | null>(null);\n const [loading, setLoading] = useState(false);\n const [saving, setSaving] = useState(false);\n const [error, setError] = useState<Error | undefined>();\n\n const refetch = useCallback(async () => {\n if (!workspaceId) {\n setData(null);\n return;\n }\n setLoading(true);\n setError(undefined);\n try {\n const result = await client.query<{\n botmanorAgentApprovalSettings: AgentApprovalSettingsRecord;\n }>({\n query: GET_SETTINGS_DOCUMENT,\n fetchPolicy: 'network-only',\n });\n setData(result.data?.botmanorAgentApprovalSettings ?? null);\n } catch (queryError) {\n setError(toError(queryError, 'Failed to load approval settings'));\n } finally {\n setLoading(false);\n }\n }, [client, workspaceId]);\n\n useEffect(() => {\n void refetch();\n }, [refetch]);\n\n const update = useCallback(\n async (requireActivationApproval: boolean) => {\n setSaving(true);\n try {\n const result = await client.mutate<{\n updateBotmanorAgentApprovalSettings: AgentApprovalSettingsRecord;\n }>({\n mutation: UPDATE_SETTINGS_DOCUMENT,\n variables: { requireActivationApproval },\n });\n const next = result.data?.updateBotmanorAgentApprovalSettings;\n if (!next) throw new Error('Failed to update approval settings');\n setData(next);\n return next;\n } catch (mutationError) {\n throw toError(mutationError, 'Failed to update approval settings');\n } finally {\n setSaving(false);\n }\n },\n [client]\n );\n\n return { data, loading, saving, error, refetch, update };\n}\n\n/** Activation requests in the workspace, newest first. */\nexport function useAgentApprovalRequests(filter: AgentApprovalFilter) {\n const client = useGatewayClient('workspace') as ApolloClient;\n const { workspaceId } = useBotlit();\n const [data, setData] = useState<AgentApprovalRequestRecord[]>([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | undefined>();\n const { agentId, status } = filter;\n\n const refetch = useCallback(async () => {\n if (!workspaceId) {\n setData([]);\n return;\n }\n setLoading(true);\n setError(undefined);\n try {\n const result = await client.query<{\n listBotmanorAgentApprovalRequests: AgentApprovalRequestRecord[];\n }>({\n query: LIST_REQUESTS_DOCUMENT,\n variables: {\n filter: { agentId: agentId || undefined, status: status || undefined },\n pagination: { limit: 50, offset: 0 },\n },\n fetchPolicy: 'network-only',\n });\n setData(result.data?.listBotmanorAgentApprovalRequests ?? []);\n } catch (queryError) {\n setError(toError(queryError, 'Failed to load activation requests'));\n } finally {\n setLoading(false);\n }\n }, [agentId, client, status, workspaceId]);\n\n useEffect(() => {\n void refetch();\n }, [refetch]);\n\n return { data, loading, error, refetch };\n}\n\ntype ApprovalAction =\n | { kind: 'request'; agentId: string; note?: string }\n | { kind: 'approve'; id: string; reason?: string }\n | { kind: 'reject'; id: string; reason: string }\n | { kind: 'cancel'; id: string };\n\n/** Request, approve, reject or cancel an activation request. */\nexport function useAgentApprovalActions() {\n const client = useGatewayClient('workspace') as ApolloClient;\n const [pending, setPending] = useState<ApprovalAction['kind'] | null>(null);\n\n const run = useCallback(\n async (action: ApprovalAction): Promise<AgentApprovalRequestRecord> => {\n setPending(action.kind);\n try {\n switch (action.kind) {\n case 'request': {\n const result = await client.mutate<{\n requestBotmanorAgentActivation: AgentApprovalRequestRecord;\n }>({\n mutation: REQUEST_ACTIVATION_DOCUMENT,\n variables: { agentId: action.agentId, note: action.note?.trim() || undefined },\n });\n return required(result.data?.requestBotmanorAgentActivation, 'request');\n }\n case 'approve': {\n const result = await client.mutate<{\n approveBotmanorAgentActivation: AgentApprovalRequestRecord;\n }>({\n mutation: APPROVE_DOCUMENT,\n variables: { id: action.id, reason: action.reason?.trim() || undefined },\n });\n return required(result.data?.approveBotmanorAgentActivation, 'approve');\n }\n case 'reject': {\n const result = await client.mutate<{\n rejectBotmanorAgentActivation: AgentApprovalRequestRecord;\n }>({\n mutation: REJECT_DOCUMENT,\n variables: { id: action.id, reason: action.reason.trim() },\n });\n return required(result.data?.rejectBotmanorAgentActivation, 'reject');\n }\n case 'cancel': {\n const result = await client.mutate<{\n cancelBotmanorAgentActivationRequest: AgentApprovalRequestRecord;\n }>({\n mutation: CANCEL_DOCUMENT,\n variables: { id: action.id },\n });\n return required(result.data?.cancelBotmanorAgentActivationRequest, 'cancel');\n }\n }\n } catch (mutationError) {\n throw toError(mutationError, `Failed to ${action.kind} activation`);\n } finally {\n setPending(null);\n }\n },\n [client]\n );\n\n return { run, pending };\n}\n\nfunction required(\n value: AgentApprovalRequestRecord | undefined,\n kind: ApprovalAction['kind']\n): AgentApprovalRequestRecord {\n if (!value) throw new Error(`Failed to ${kind} activation`);\n return value;\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { UpdateBotmanorAgentInput } from '../../generated/wspace-types';
|
|
2
|
+
import { BaseFilter } from '../types';
|
|
3
|
+
import { GraphQLInput } from './internal/mutationInput';
|
|
4
|
+
export interface AgentRecord {
|
|
5
|
+
id: string;
|
|
6
|
+
name: string;
|
|
7
|
+
slug: string;
|
|
8
|
+
description?: string | null;
|
|
9
|
+
type: string;
|
|
10
|
+
status: string;
|
|
11
|
+
visibility?: string | null;
|
|
12
|
+
capabilities?: string[] | null;
|
|
13
|
+
llmModelId?: string | null;
|
|
14
|
+
bucketId?: string | null;
|
|
15
|
+
currentVersionId?: string | null;
|
|
16
|
+
draftVersionId?: string | null;
|
|
17
|
+
executionCount?: number | null;
|
|
18
|
+
lastExecutedAt?: string | null;
|
|
19
|
+
specialization?: string | null;
|
|
20
|
+
systemPrompt?: string | null;
|
|
21
|
+
temperature?: number | null;
|
|
22
|
+
maxTokens?: number | null;
|
|
23
|
+
maxConcurrentExecutions?: number | null;
|
|
24
|
+
knowledgeBaseIds?: string[] | null;
|
|
25
|
+
mcpConnectionIds?: string[] | null;
|
|
26
|
+
workflowIds?: string[] | null;
|
|
27
|
+
tagIds?: string[] | null;
|
|
28
|
+
metadata?: Record<string, unknown> | null;
|
|
29
|
+
createdAt?: string | null;
|
|
30
|
+
updatedAt?: string | null;
|
|
31
|
+
createdById?: string | null;
|
|
32
|
+
updatedById?: string | null;
|
|
33
|
+
workspaceId?: string | null;
|
|
34
|
+
}
|
|
35
|
+
export interface AgentVersionRecord {
|
|
36
|
+
id: string;
|
|
37
|
+
agentId: string;
|
|
38
|
+
version: string;
|
|
39
|
+
status: 'DRAFT' | 'PUBLISHED' | 'HISTORICAL';
|
|
40
|
+
changelog?: string | null;
|
|
41
|
+
config?: Record<string, unknown> | null;
|
|
42
|
+
createdById?: string | null;
|
|
43
|
+
createdAt?: string | null;
|
|
44
|
+
publishedById?: string | null;
|
|
45
|
+
publishedAt?: string | null;
|
|
46
|
+
}
|
|
47
|
+
interface AgentMutationState<T> {
|
|
48
|
+
data: T | undefined;
|
|
49
|
+
loading: boolean;
|
|
50
|
+
error: Error | undefined;
|
|
51
|
+
}
|
|
52
|
+
interface CreateAgentInput {
|
|
53
|
+
workspaceId: string;
|
|
54
|
+
name: string;
|
|
55
|
+
slug?: string;
|
|
56
|
+
description?: string;
|
|
57
|
+
type: string;
|
|
58
|
+
systemPrompt: string;
|
|
59
|
+
temperature?: number;
|
|
60
|
+
maxTokens?: number;
|
|
61
|
+
capabilities?: string[];
|
|
62
|
+
llmModelId?: string;
|
|
63
|
+
}
|
|
64
|
+
interface UpdateAgentInput {
|
|
65
|
+
agentId: string;
|
|
66
|
+
input: GraphQLInput<UpdateBotmanorAgentInput>;
|
|
67
|
+
}
|
|
68
|
+
export declare const agentKeys: {
|
|
69
|
+
all: readonly ["agents"];
|
|
70
|
+
lists: () => readonly ["agents", "list"];
|
|
71
|
+
list: (filter?: BaseFilter) => readonly ["agents", "list", BaseFilter | undefined];
|
|
72
|
+
details: () => readonly ["agents", "detail"];
|
|
73
|
+
detail: (id: string) => readonly ["agents", "detail", string];
|
|
74
|
+
};
|
|
75
|
+
export declare function useAgents(filter?: BaseFilter): {
|
|
76
|
+
data: AgentRecord[];
|
|
77
|
+
loading: boolean;
|
|
78
|
+
error: Error | undefined;
|
|
79
|
+
refetch: () => Promise<void>;
|
|
80
|
+
};
|
|
81
|
+
export declare function useAgent(agentId: string | undefined): {
|
|
82
|
+
data: AgentRecord | null;
|
|
83
|
+
loading: boolean;
|
|
84
|
+
error: Error | undefined;
|
|
85
|
+
refetch: () => Promise<void>;
|
|
86
|
+
};
|
|
87
|
+
export declare function useCreateAgent(): readonly [(input: CreateAgentInput) => Promise<AgentRecord>, AgentMutationState<AgentRecord>];
|
|
88
|
+
export declare function useUpdateAgent(): readonly [({ agentId, input }: UpdateAgentInput) => Promise<AgentRecord>, AgentMutationState<AgentRecord>];
|
|
89
|
+
export declare function useDeleteAgent(): readonly [(agentId: string) => Promise<boolean>, AgentMutationState<boolean>];
|
|
90
|
+
export declare function useAgentVersions(agentId: string | undefined): {
|
|
91
|
+
data: AgentVersionRecord[];
|
|
92
|
+
loading: boolean;
|
|
93
|
+
error: Error | undefined;
|
|
94
|
+
refetch: () => Promise<void>;
|
|
95
|
+
};
|
|
96
|
+
export declare function usePublishAgentVersion(): readonly [({ agentId, versionId, changelog, }: {
|
|
97
|
+
agentId: string;
|
|
98
|
+
versionId: string;
|
|
99
|
+
changelog?: string;
|
|
100
|
+
}) => Promise<AgentVersionRecord>, AgentMutationState<AgentVersionRecord>];
|
|
101
|
+
export declare function useRollbackAgentVersion(): readonly [({ agentId, targetVersionId }: {
|
|
102
|
+
agentId: string;
|
|
103
|
+
targetVersionId: string;
|
|
104
|
+
}) => Promise<AgentVersionRecord>, AgentMutationState<AgentVersionRecord>];
|
|
105
|
+
export {};
|
|
@@ -3,7 +3,7 @@ import { buildMutationInput as t, fieldsOf as n } from "./internal/mutationInput
|
|
|
3
3
|
import { useCallback as r, useEffect as i, useMemo as a, useState as o } from "react";
|
|
4
4
|
import { gql as s } from "@apollo/client";
|
|
5
5
|
import { useGatewayClient as c } from "@burdenoff/fe-libs/shared/graphql";
|
|
6
|
-
|
|
6
|
+
// src/botlit/hooks/useAgents.ts
|
|
7
7
|
var l = s`
|
|
8
8
|
query ListBotmanorAgents($filters: BotmanorAgentFilterInput, $pagination: PaginationInput) {
|
|
9
9
|
listBotmanorAgents(filters: $filters, pagination: $pagination) {
|
|
@@ -181,7 +181,7 @@ function v(e) {
|
|
|
181
181
|
return e;
|
|
182
182
|
}
|
|
183
183
|
function y(e, t) {
|
|
184
|
-
if (
|
|
184
|
+
if (e || t) return {
|
|
185
185
|
workspaceId: e,
|
|
186
186
|
search: t?.search,
|
|
187
187
|
status: t?.status?.[0],
|
|
@@ -197,21 +197,21 @@ function b(t) {
|
|
|
197
197
|
offset: 0
|
|
198
198
|
}
|
|
199
199
|
}), [t, s]), _ = r(async () => {
|
|
200
|
-
if (!s)
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
200
|
+
if (!s) d([]);
|
|
201
|
+
else {
|
|
202
|
+
p(!0), h(void 0);
|
|
203
|
+
try {
|
|
204
|
+
let e = await n.query({
|
|
205
|
+
query: l,
|
|
206
|
+
variables: g,
|
|
207
|
+
fetchPolicy: "network-only"
|
|
208
|
+
});
|
|
209
|
+
d(e.data?.listBotmanorAgents ?? []);
|
|
210
|
+
} catch (e) {
|
|
211
|
+
h(e instanceof Error ? e : /* @__PURE__ */ Error("Failed to load agents"));
|
|
212
|
+
} finally {
|
|
213
|
+
p(!1);
|
|
214
|
+
}
|
|
215
215
|
}
|
|
216
216
|
}, [
|
|
217
217
|
n,
|
|
@@ -229,21 +229,21 @@ function b(t) {
|
|
|
229
229
|
}
|
|
230
230
|
function x(e) {
|
|
231
231
|
let t = v(c("workspace")), [n, a] = o(null), [s, l] = o(!1), [d, f] = o(), p = r(async () => {
|
|
232
|
-
if (!e)
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
232
|
+
if (!e) a(null);
|
|
233
|
+
else {
|
|
234
|
+
l(!0), f(void 0);
|
|
235
|
+
try {
|
|
236
|
+
let n = await t.query({
|
|
237
|
+
query: u,
|
|
238
|
+
variables: { id: e },
|
|
239
|
+
fetchPolicy: "network-only"
|
|
240
|
+
});
|
|
241
|
+
a(n.data?.getBotmanorAgent ?? null);
|
|
242
|
+
} catch (e) {
|
|
243
|
+
f(e instanceof Error ? e : /* @__PURE__ */ Error("Failed to load agent"));
|
|
244
|
+
} finally {
|
|
245
|
+
l(!1);
|
|
246
|
+
}
|
|
247
247
|
}
|
|
248
248
|
}, [e, t]);
|
|
249
249
|
return i(() => {
|
|
@@ -358,27 +358,27 @@ function w() {
|
|
|
358
358
|
}
|
|
359
359
|
function T(e) {
|
|
360
360
|
let t = v(c("workspace")), [n, a] = o([]), [s, l] = o(!1), [u, d] = o(), f = r(async () => {
|
|
361
|
-
if (!e)
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
}
|
|
376
|
-
|
|
377
|
-
}
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
361
|
+
if (!e) a([]);
|
|
362
|
+
else {
|
|
363
|
+
l(!0), d(void 0);
|
|
364
|
+
try {
|
|
365
|
+
let n = (await t.query({
|
|
366
|
+
query: m,
|
|
367
|
+
variables: {
|
|
368
|
+
agentId: e,
|
|
369
|
+
pagination: {
|
|
370
|
+
limit: 50,
|
|
371
|
+
offset: 0
|
|
372
|
+
}
|
|
373
|
+
},
|
|
374
|
+
fetchPolicy: "network-only"
|
|
375
|
+
})).data?.listAgentVersions ?? [];
|
|
376
|
+
a([...n].sort((e, t) => e.createdAt && t.createdAt ? t.createdAt.localeCompare(e.createdAt) : 0));
|
|
377
|
+
} catch (e) {
|
|
378
|
+
d(e instanceof Error ? e : /* @__PURE__ */ Error("Failed to load agent versions"));
|
|
379
|
+
} finally {
|
|
380
|
+
l(!1);
|
|
381
|
+
}
|
|
382
382
|
}
|
|
383
383
|
}, [e, t]);
|
|
384
384
|
return i(() => {
|
|
@@ -463,7 +463,6 @@ function D() {
|
|
|
463
463
|
}
|
|
464
464
|
}, [e]), t];
|
|
465
465
|
}
|
|
466
|
-
//#endregion
|
|
467
466
|
export { x as useAgent, T as useAgentVersions, b as useAgents, S as useCreateAgent, w as useDeleteAgent, E as usePublishAgentVersion, D as useRollbackAgentVersion, C as useUpdateAgent };
|
|
468
467
|
|
|
469
468
|
//# sourceMappingURL=useAgents.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAgents.js","names":[],"sources":["../../../src/botlit/hooks/useAgents.ts"],"sourcesContent":["import { gql, type ApolloClient } from '@apollo/client';\nimport { useCallback, useEffect, useMemo, useState } from 'react';\nimport { useGatewayClient } from '@burdenoff/fe-libs/shared/graphql';\n\nimport type { UpdateBotmanorAgentInput } from '../../generated/wspace-types';\nimport { useBotlit } from '../providers/BotlitProvider';\nimport type { BaseFilter } from '../types';\nimport { buildMutationInput, fieldsOf, type GraphQLInput } from './internal/mutationInput';\n\nconst LIST_AGENTS_DOCUMENT = gql`\n query ListBotmanorAgents($filters: BotmanorAgentFilterInput, $pagination: PaginationInput) {\n listBotmanorAgents(filters: $filters, pagination: $pagination) {\n id\n name\n slug\n description\n type\n status\n visibility\n capabilities\n llmModelId\n bucketId\n executionCount\n lastExecutedAt\n specialization\n tagIds\n createdAt\n updatedAt\n createdById\n updatedById\n workspaceId\n }\n }\n`;\n\nconst GET_AGENT_DOCUMENT = gql`\n query GetBotmanorAgent($id: ID!) {\n getBotmanorAgent(id: $id) {\n id\n name\n slug\n description\n type\n status\n visibility\n capabilities\n llmModelId\n bucketId\n currentVersionId\n draftVersionId\n executionCount\n lastExecutedAt\n specialization\n systemPrompt\n temperature\n maxTokens\n maxConcurrentExecutions\n knowledgeBaseIds\n mcpConnectionIds\n workflowIds\n tagIds\n metadata\n createdAt\n updatedAt\n createdById\n updatedById\n workspaceId\n }\n }\n`;\n\nconst CREATE_AGENT_DOCUMENT = gql`\n mutation CreateBotmanorAgent($input: CreateBotmanorAgentInput!) {\n createBotmanorAgent(input: $input) {\n id\n name\n slug\n description\n type\n status\n visibility\n capabilities\n llmModelId\n systemPrompt\n temperature\n maxTokens\n maxConcurrentExecutions\n tagIds\n createdAt\n updatedAt\n workspaceId\n }\n }\n`;\n\nconst UPDATE_AGENT_DOCUMENT = gql`\n mutation UpdateBotmanorAgent($id: ID!, $input: UpdateBotmanorAgentInput!) {\n updateBotmanorAgent(id: $id, input: $input) {\n id\n name\n slug\n description\n type\n status\n visibility\n capabilities\n llmModelId\n systemPrompt\n temperature\n maxTokens\n maxConcurrentExecutions\n knowledgeBaseIds\n mcpConnectionIds\n workflowIds\n tagIds\n metadata\n createdAt\n updatedAt\n updatedById\n workspaceId\n }\n }\n`;\n\nconst DELETE_AGENT_DOCUMENT = gql`\n mutation DeleteBotmanorAgent($id: ID!) {\n deleteBotmanorAgent(id: $id)\n }\n`;\n\n// BOFF-4381: agent version history, publish, and rollback.\nconst LIST_AGENT_VERSIONS_DOCUMENT = gql`\n query ListAgentVersions($agentId: ID!, $pagination: PaginationInput) {\n listAgentVersions(agentId: $agentId, pagination: $pagination) {\n id\n agentId\n version\n status\n changelog\n config\n createdById\n createdAt\n publishedById\n publishedAt\n }\n }\n`;\n\nconst PUBLISH_AGENT_VERSION_DOCUMENT = gql`\n mutation PublishAgentVersion($agentId: ID!, $versionId: ID!, $changelog: String) {\n publishAgentVersion(agentId: $agentId, versionId: $versionId, changelog: $changelog) {\n id\n agentId\n version\n status\n changelog\n publishedById\n publishedAt\n }\n }\n`;\n\nconst ROLLBACK_AGENT_VERSION_DOCUMENT = gql`\n mutation RollbackAgentVersion($agentId: ID!, $targetVersionId: ID!) {\n rollbackAgentVersion(agentId: $agentId, targetVersionId: $targetVersionId) {\n id\n agentId\n version\n status\n changelog\n publishedById\n publishedAt\n }\n }\n`;\n\ntype WorkspaceClient = ApolloClient;\n\nexport interface AgentRecord {\n id: string;\n name: string;\n slug: string;\n description?: string | null;\n type: string;\n status: string;\n visibility?: string | null;\n capabilities?: string[] | null;\n llmModelId?: string | null;\n bucketId?: string | null;\n currentVersionId?: string | null;\n draftVersionId?: string | null;\n executionCount?: number | null;\n lastExecutedAt?: string | null;\n specialization?: string | null;\n systemPrompt?: string | null;\n temperature?: number | null;\n maxTokens?: number | null;\n maxConcurrentExecutions?: number | null;\n knowledgeBaseIds?: string[] | null;\n mcpConnectionIds?: string[] | null;\n workflowIds?: string[] | null;\n tagIds?: string[] | null;\n metadata?: Record<string, unknown> | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n createdById?: string | null;\n updatedById?: string | null;\n workspaceId?: string | null;\n}\n\ninterface ListBotmanorAgentsData {\n listBotmanorAgents: AgentRecord[];\n}\n\ninterface GetAgentData {\n getBotmanorAgent: AgentRecord | null;\n}\n\ninterface CreateAgentData {\n createBotmanorAgent: AgentRecord;\n}\n\ninterface UpdateAgentData {\n updateBotmanorAgent: AgentRecord;\n}\n\ninterface DeleteAgentData {\n deleteBotmanorAgent: boolean;\n}\n\nexport interface AgentVersionRecord {\n id: string;\n agentId: string;\n version: string;\n status: 'DRAFT' | 'PUBLISHED' | 'HISTORICAL';\n changelog?: string | null;\n config?: Record<string, unknown> | null;\n createdById?: string | null;\n createdAt?: string | null;\n publishedById?: string | null;\n publishedAt?: string | null;\n}\n\ninterface ListAgentVersionsData {\n listAgentVersions: AgentVersionRecord[];\n}\n\ninterface PublishAgentVersionData {\n publishAgentVersion: AgentVersionRecord;\n}\n\ninterface RollbackAgentVersionData {\n rollbackAgentVersion: AgentVersionRecord;\n}\n\ninterface AgentMutationState<T> {\n data: T | undefined;\n loading: boolean;\n error: Error | undefined;\n}\n\ninterface CreateAgentInput {\n workspaceId: string;\n name: string;\n slug?: string;\n description?: string;\n type: string;\n systemPrompt: string;\n temperature?: number;\n maxTokens?: number;\n capabilities?: string[];\n llmModelId?: string;\n}\n\ninterface UpdateAgentInput {\n agentId: string;\n input: GraphQLInput<UpdateBotmanorAgentInput>;\n}\n\nconst UPDATE_AGENT_FIELDS = fieldsOf<UpdateBotmanorAgentInput>({\n bucketId: true,\n capabilities: true,\n context: true,\n description: true,\n knowledgeBaseIds: true,\n llmModelId: true,\n maxConcurrentExecutions: true,\n maxTokens: true,\n mcpConnectionIds: true,\n metadata: true,\n name: true,\n slug: true,\n specialization: true,\n status: true,\n systemPrompt: true,\n tagIds: true,\n tags: true,\n temperature: true,\n type: true,\n visibility: true,\n workflowIds: true,\n});\n\nfunction getWorkspaceClient(client: unknown): WorkspaceClient {\n return client as WorkspaceClient;\n}\n\nfunction buildAgentFilter(\n workspaceId: string | undefined,\n filter?: BaseFilter\n): Record<string, unknown> | undefined {\n if (!workspaceId && !filter) return undefined;\n\n return {\n workspaceId,\n search: filter?.search,\n status: filter?.status?.[0],\n visibility: filter?.visibility?.[0],\n bucketId: filter?.bucketId,\n };\n}\n\nexport const agentKeys = {\n all: ['agents'] as const,\n lists: () => [...agentKeys.all, 'list'] as const,\n list: (filter?: BaseFilter) => [...agentKeys.lists(), filter] as const,\n details: () => [...agentKeys.all, 'detail'] as const,\n detail: (id: string) => [...agentKeys.details(), id] as const,\n};\n\nexport function useAgents(filter?: BaseFilter) {\n const client = getWorkspaceClient(useGatewayClient('workspace'));\n const { workspaceId } = useBotlit();\n const [data, setData] = useState<AgentRecord[]>([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | undefined>();\n\n const variables = useMemo(\n () => ({\n filters: buildAgentFilter(workspaceId, filter),\n pagination: { limit: 100, offset: 0 },\n }),\n [filter, workspaceId]\n );\n\n const refetch = useCallback(async () => {\n if (!workspaceId) {\n setData([]);\n return;\n }\n\n setLoading(true);\n setError(undefined);\n try {\n const result = await client.query<ListBotmanorAgentsData>({\n query: LIST_AGENTS_DOCUMENT,\n variables,\n fetchPolicy: 'network-only',\n });\n setData(result.data?.listBotmanorAgents ?? []);\n } catch (queryError) {\n setError(queryError instanceof Error ? queryError : new Error('Failed to load agents'));\n } finally {\n setLoading(false);\n }\n }, [client, variables, workspaceId]);\n\n useEffect(() => {\n void refetch();\n }, [refetch]);\n\n return { data, loading, error, refetch };\n}\n\nexport function useAgent(agentId: string | undefined) {\n const client = getWorkspaceClient(useGatewayClient('workspace'));\n const [data, setData] = useState<AgentRecord | null>(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | undefined>();\n\n const refetch = useCallback(async () => {\n if (!agentId) {\n setData(null);\n return;\n }\n\n setLoading(true);\n setError(undefined);\n try {\n const result = await client.query<GetAgentData>({\n query: GET_AGENT_DOCUMENT,\n variables: { id: agentId },\n fetchPolicy: 'network-only',\n });\n setData(result.data?.getBotmanorAgent ?? null);\n } catch (queryError) {\n setError(queryError instanceof Error ? queryError : new Error('Failed to load agent'));\n } finally {\n setLoading(false);\n }\n }, [agentId, client]);\n\n useEffect(() => {\n void refetch();\n }, [refetch]);\n\n return { data, loading, error, refetch };\n}\n\nexport function useCreateAgent() {\n const client = getWorkspaceClient(useGatewayClient('workspace'));\n const [state, setState] = useState<AgentMutationState<AgentRecord>>({\n data: undefined,\n loading: false,\n error: undefined,\n });\n\n const createAgent = useCallback(\n async (input: CreateAgentInput) => {\n setState({ data: undefined, loading: true, error: undefined });\n try {\n const result = await client.mutate<CreateAgentData>({\n mutation: CREATE_AGENT_DOCUMENT,\n variables: { input },\n });\n\n const createdAgent = result.data?.createBotmanorAgent;\n if (!createdAgent) {\n throw new Error('Failed to create agent');\n }\n\n setState({ data: createdAgent, loading: false, error: undefined });\n return createdAgent;\n } catch (mutationError) {\n const error =\n mutationError instanceof Error ? mutationError : new Error('Failed to create agent');\n setState({ data: undefined, loading: false, error });\n throw error;\n }\n },\n [client]\n );\n\n return [createAgent, state] as const;\n}\n\nexport function useUpdateAgent() {\n const client = getWorkspaceClient(useGatewayClient('workspace'));\n const [state, setState] = useState<AgentMutationState<AgentRecord>>({\n data: undefined,\n loading: false,\n error: undefined,\n });\n\n const updateAgent = useCallback(\n async ({ agentId, input }: UpdateAgentInput) => {\n setState({ data: undefined, loading: true, error: undefined });\n try {\n const result = await client.mutate<UpdateAgentData>({\n mutation: UPDATE_AGENT_DOCUMENT,\n variables: { id: agentId, input: buildMutationInput(input, UPDATE_AGENT_FIELDS) },\n });\n\n const updatedAgent = result.data?.updateBotmanorAgent;\n if (!updatedAgent) {\n throw new Error('Failed to update agent');\n }\n\n setState({ data: updatedAgent, loading: false, error: undefined });\n return updatedAgent;\n } catch (mutationError) {\n const error =\n mutationError instanceof Error ? mutationError : new Error('Failed to update agent');\n setState({ data: undefined, loading: false, error });\n throw error;\n }\n },\n [client]\n );\n\n return [updateAgent, state] as const;\n}\n\nexport function useDeleteAgent() {\n const client = getWorkspaceClient(useGatewayClient('workspace'));\n const [state, setState] = useState<AgentMutationState<boolean>>({\n data: undefined,\n loading: false,\n error: undefined,\n });\n\n const deleteAgent = useCallback(\n async (agentId: string) => {\n setState({ data: undefined, loading: true, error: undefined });\n try {\n const result = await client.mutate<DeleteAgentData>({\n mutation: DELETE_AGENT_DOCUMENT,\n variables: { id: agentId },\n });\n\n const deleted = result.data?.deleteBotmanorAgent ?? false;\n setState({ data: deleted, loading: false, error: undefined });\n return deleted;\n } catch (mutationError) {\n const error =\n mutationError instanceof Error ? mutationError : new Error('Failed to delete agent');\n setState({ data: undefined, loading: false, error });\n throw error;\n }\n },\n [client]\n );\n\n return [deleteAgent, state] as const;\n}\n\n// ============================================================================\n// VERSIONING (BOFF-4381) — version history, publish, rollback\n// ============================================================================\n\nexport function useAgentVersions(agentId: string | undefined) {\n const client = getWorkspaceClient(useGatewayClient('workspace'));\n const [data, setData] = useState<AgentVersionRecord[]>([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | undefined>();\n\n const refetch = useCallback(async () => {\n if (!agentId) {\n setData([]);\n return;\n }\n\n setLoading(true);\n setError(undefined);\n try {\n const result = await client.query<ListAgentVersionsData>({\n query: LIST_AGENT_VERSIONS_DOCUMENT,\n variables: { agentId, pagination: { limit: 50, offset: 0 } },\n fetchPolicy: 'network-only',\n });\n const versions = result.data?.listAgentVersions ?? [];\n // Newest first, regardless of what the server returned.\n setData(\n [...versions].sort((a, b) =>\n a.createdAt && b.createdAt ? b.createdAt.localeCompare(a.createdAt) : 0\n )\n );\n } catch (queryError) {\n setError(\n queryError instanceof Error ? queryError : new Error('Failed to load agent versions')\n );\n } finally {\n setLoading(false);\n }\n }, [agentId, client]);\n\n useEffect(() => {\n void refetch();\n }, [refetch]);\n\n return { data, loading, error, refetch };\n}\n\nexport function usePublishAgentVersion() {\n const client = getWorkspaceClient(useGatewayClient('workspace'));\n const [state, setState] = useState<AgentMutationState<AgentVersionRecord>>({\n data: undefined,\n loading: false,\n error: undefined,\n });\n\n const publishAgentVersion = useCallback(\n async ({\n agentId,\n versionId,\n changelog,\n }: {\n agentId: string;\n versionId: string;\n changelog?: string;\n }) => {\n setState({ data: undefined, loading: true, error: undefined });\n try {\n const result = await client.mutate<PublishAgentVersionData>({\n mutation: PUBLISH_AGENT_VERSION_DOCUMENT,\n variables: { agentId, versionId, changelog: changelog?.trim() || undefined },\n });\n\n const published = result.data?.publishAgentVersion;\n if (!published) {\n throw new Error('Failed to publish agent version');\n }\n\n setState({ data: published, loading: false, error: undefined });\n return published;\n } catch (mutationError) {\n const error =\n mutationError instanceof Error\n ? mutationError\n : new Error('Failed to publish agent version');\n setState({ data: undefined, loading: false, error });\n throw error;\n }\n },\n [client]\n );\n\n return [publishAgentVersion, state] as const;\n}\n\nexport function useRollbackAgentVersion() {\n const client = getWorkspaceClient(useGatewayClient('workspace'));\n const [state, setState] = useState<AgentMutationState<AgentVersionRecord>>({\n data: undefined,\n loading: false,\n error: undefined,\n });\n\n const rollbackAgentVersion = useCallback(\n async ({ agentId, targetVersionId }: { agentId: string; targetVersionId: string }) => {\n setState({ data: undefined, loading: true, error: undefined });\n try {\n const result = await client.mutate<RollbackAgentVersionData>({\n mutation: ROLLBACK_AGENT_VERSION_DOCUMENT,\n variables: { agentId, targetVersionId },\n });\n\n const rolledBack = result.data?.rollbackAgentVersion;\n if (!rolledBack) {\n throw new Error('Failed to roll back agent version');\n }\n\n setState({ data: rolledBack, loading: false, error: undefined });\n return rolledBack;\n } catch (mutationError) {\n const error =\n mutationError instanceof Error\n ? mutationError\n : new Error('Failed to roll back agent version');\n setState({ data: undefined, loading: false, error });\n throw error;\n }\n },\n [client]\n );\n\n return [rollbackAgentVersion, state] as const;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useAgents.js","names":["LIST_AGENTS_DOCUMENT","GET_AGENT_DOCUMENT","CREATE_AGENT_DOCUMENT","UPDATE_AGENT_DOCUMENT","DELETE_AGENT_DOCUMENT","LIST_AGENT_VERSIONS_DOCUMENT","PUBLISH_AGENT_VERSION_DOCUMENT","ROLLBACK_AGENT_VERSION_DOCUMENT","UPDATE_AGENT_FIELDS","fieldsOf","getWorkspaceClient","client","buildAgentFilter","workspaceId","filter","useAgents","useGatewayClient","useBotlit","data","setData","useState","loading","setLoading","error","setError","variables","useMemo","refetch","useCallback","result","queryError","useEffect","useAgent","agentId","useCreateAgent","state","setState","createdAgent","mutationError","useUpdateAgent","updatedAgent","buildMutationInput","input","useDeleteAgent","deleted","useAgentVersions","versions","a","b","usePublishAgentVersion","published","changelog","useRollbackAgentVersion","rolledBack"],"sources":["../../../src/botlit/hooks/useAgents.ts"],"sourcesContent":["import { gql, type ApolloClient } from '@apollo/client';\nimport { useCallback, useEffect, useMemo, useState } from 'react';\nimport { useGatewayClient } from '@burdenoff/fe-libs/shared/graphql';\n\nimport type { UpdateBotmanorAgentInput } from '../../generated/wspace-types';\nimport { useBotlit } from '../providers/BotlitProvider';\nimport type { BaseFilter } from '../types';\nimport { buildMutationInput, fieldsOf, type GraphQLInput } from './internal/mutationInput';\n\nconst LIST_AGENTS_DOCUMENT = gql`\n query ListBotmanorAgents($filters: BotmanorAgentFilterInput, $pagination: PaginationInput) {\n listBotmanorAgents(filters: $filters, pagination: $pagination) {\n id\n name\n slug\n description\n type\n status\n visibility\n capabilities\n llmModelId\n bucketId\n executionCount\n lastExecutedAt\n specialization\n tagIds\n createdAt\n updatedAt\n createdById\n updatedById\n workspaceId\n }\n }\n`;\n\nconst GET_AGENT_DOCUMENT = gql`\n query GetBotmanorAgent($id: ID!) {\n getBotmanorAgent(id: $id) {\n id\n name\n slug\n description\n type\n status\n visibility\n capabilities\n llmModelId\n bucketId\n currentVersionId\n draftVersionId\n executionCount\n lastExecutedAt\n specialization\n systemPrompt\n temperature\n maxTokens\n maxConcurrentExecutions\n knowledgeBaseIds\n mcpConnectionIds\n workflowIds\n tagIds\n metadata\n createdAt\n updatedAt\n createdById\n updatedById\n workspaceId\n }\n }\n`;\n\nconst CREATE_AGENT_DOCUMENT = gql`\n mutation CreateBotmanorAgent($input: CreateBotmanorAgentInput!) {\n createBotmanorAgent(input: $input) {\n id\n name\n slug\n description\n type\n status\n visibility\n capabilities\n llmModelId\n systemPrompt\n temperature\n maxTokens\n maxConcurrentExecutions\n tagIds\n createdAt\n updatedAt\n workspaceId\n }\n }\n`;\n\nconst UPDATE_AGENT_DOCUMENT = gql`\n mutation UpdateBotmanorAgent($id: ID!, $input: UpdateBotmanorAgentInput!) {\n updateBotmanorAgent(id: $id, input: $input) {\n id\n name\n slug\n description\n type\n status\n visibility\n capabilities\n llmModelId\n systemPrompt\n temperature\n maxTokens\n maxConcurrentExecutions\n knowledgeBaseIds\n mcpConnectionIds\n workflowIds\n tagIds\n metadata\n createdAt\n updatedAt\n updatedById\n workspaceId\n }\n }\n`;\n\nconst DELETE_AGENT_DOCUMENT = gql`\n mutation DeleteBotmanorAgent($id: ID!) {\n deleteBotmanorAgent(id: $id)\n }\n`;\n\n// BOFF-4381: agent version history, publish, and rollback.\nconst LIST_AGENT_VERSIONS_DOCUMENT = gql`\n query ListAgentVersions($agentId: ID!, $pagination: PaginationInput) {\n listAgentVersions(agentId: $agentId, pagination: $pagination) {\n id\n agentId\n version\n status\n changelog\n config\n createdById\n createdAt\n publishedById\n publishedAt\n }\n }\n`;\n\nconst PUBLISH_AGENT_VERSION_DOCUMENT = gql`\n mutation PublishAgentVersion($agentId: ID!, $versionId: ID!, $changelog: String) {\n publishAgentVersion(agentId: $agentId, versionId: $versionId, changelog: $changelog) {\n id\n agentId\n version\n status\n changelog\n publishedById\n publishedAt\n }\n }\n`;\n\nconst ROLLBACK_AGENT_VERSION_DOCUMENT = gql`\n mutation RollbackAgentVersion($agentId: ID!, $targetVersionId: ID!) {\n rollbackAgentVersion(agentId: $agentId, targetVersionId: $targetVersionId) {\n id\n agentId\n version\n status\n changelog\n publishedById\n publishedAt\n }\n }\n`;\n\ntype WorkspaceClient = ApolloClient;\n\nexport interface AgentRecord {\n id: string;\n name: string;\n slug: string;\n description?: string | null;\n type: string;\n status: string;\n visibility?: string | null;\n capabilities?: string[] | null;\n llmModelId?: string | null;\n bucketId?: string | null;\n currentVersionId?: string | null;\n draftVersionId?: string | null;\n executionCount?: number | null;\n lastExecutedAt?: string | null;\n specialization?: string | null;\n systemPrompt?: string | null;\n temperature?: number | null;\n maxTokens?: number | null;\n maxConcurrentExecutions?: number | null;\n knowledgeBaseIds?: string[] | null;\n mcpConnectionIds?: string[] | null;\n workflowIds?: string[] | null;\n tagIds?: string[] | null;\n metadata?: Record<string, unknown> | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n createdById?: string | null;\n updatedById?: string | null;\n workspaceId?: string | null;\n}\n\ninterface ListBotmanorAgentsData {\n listBotmanorAgents: AgentRecord[];\n}\n\ninterface GetAgentData {\n getBotmanorAgent: AgentRecord | null;\n}\n\ninterface CreateAgentData {\n createBotmanorAgent: AgentRecord;\n}\n\ninterface UpdateAgentData {\n updateBotmanorAgent: AgentRecord;\n}\n\ninterface DeleteAgentData {\n deleteBotmanorAgent: boolean;\n}\n\nexport interface AgentVersionRecord {\n id: string;\n agentId: string;\n version: string;\n status: 'DRAFT' | 'PUBLISHED' | 'HISTORICAL';\n changelog?: string | null;\n config?: Record<string, unknown> | null;\n createdById?: string | null;\n createdAt?: string | null;\n publishedById?: string | null;\n publishedAt?: string | null;\n}\n\ninterface ListAgentVersionsData {\n listAgentVersions: AgentVersionRecord[];\n}\n\ninterface PublishAgentVersionData {\n publishAgentVersion: AgentVersionRecord;\n}\n\ninterface RollbackAgentVersionData {\n rollbackAgentVersion: AgentVersionRecord;\n}\n\ninterface AgentMutationState<T> {\n data: T | undefined;\n loading: boolean;\n error: Error | undefined;\n}\n\ninterface CreateAgentInput {\n workspaceId: string;\n name: string;\n slug?: string;\n description?: string;\n type: string;\n systemPrompt: string;\n temperature?: number;\n maxTokens?: number;\n capabilities?: string[];\n llmModelId?: string;\n}\n\ninterface UpdateAgentInput {\n agentId: string;\n input: GraphQLInput<UpdateBotmanorAgentInput>;\n}\n\nconst UPDATE_AGENT_FIELDS = fieldsOf<UpdateBotmanorAgentInput>({\n bucketId: true,\n capabilities: true,\n context: true,\n description: true,\n knowledgeBaseIds: true,\n llmModelId: true,\n maxConcurrentExecutions: true,\n maxTokens: true,\n mcpConnectionIds: true,\n metadata: true,\n name: true,\n slug: true,\n specialization: true,\n status: true,\n systemPrompt: true,\n tagIds: true,\n tags: true,\n temperature: true,\n type: true,\n visibility: true,\n workflowIds: true,\n});\n\nfunction getWorkspaceClient(client: unknown): WorkspaceClient {\n return client as WorkspaceClient;\n}\n\nfunction buildAgentFilter(\n workspaceId: string | undefined,\n filter?: BaseFilter\n): Record<string, unknown> | undefined {\n if (!workspaceId && !filter) return undefined;\n\n return {\n workspaceId,\n search: filter?.search,\n status: filter?.status?.[0],\n visibility: filter?.visibility?.[0],\n bucketId: filter?.bucketId,\n };\n}\n\nexport const agentKeys = {\n all: ['agents'] as const,\n lists: () => [...agentKeys.all, 'list'] as const,\n list: (filter?: BaseFilter) => [...agentKeys.lists(), filter] as const,\n details: () => [...agentKeys.all, 'detail'] as const,\n detail: (id: string) => [...agentKeys.details(), id] as const,\n};\n\nexport function useAgents(filter?: BaseFilter) {\n const client = getWorkspaceClient(useGatewayClient('workspace'));\n const { workspaceId } = useBotlit();\n const [data, setData] = useState<AgentRecord[]>([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | undefined>();\n\n const variables = useMemo(\n () => ({\n filters: buildAgentFilter(workspaceId, filter),\n pagination: { limit: 100, offset: 0 },\n }),\n [filter, workspaceId]\n );\n\n const refetch = useCallback(async () => {\n if (!workspaceId) {\n setData([]);\n return;\n }\n\n setLoading(true);\n setError(undefined);\n try {\n const result = await client.query<ListBotmanorAgentsData>({\n query: LIST_AGENTS_DOCUMENT,\n variables,\n fetchPolicy: 'network-only',\n });\n setData(result.data?.listBotmanorAgents ?? []);\n } catch (queryError) {\n setError(queryError instanceof Error ? queryError : new Error('Failed to load agents'));\n } finally {\n setLoading(false);\n }\n }, [client, variables, workspaceId]);\n\n useEffect(() => {\n void refetch();\n }, [refetch]);\n\n return { data, loading, error, refetch };\n}\n\nexport function useAgent(agentId: string | undefined) {\n const client = getWorkspaceClient(useGatewayClient('workspace'));\n const [data, setData] = useState<AgentRecord | null>(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | undefined>();\n\n const refetch = useCallback(async () => {\n if (!agentId) {\n setData(null);\n return;\n }\n\n setLoading(true);\n setError(undefined);\n try {\n const result = await client.query<GetAgentData>({\n query: GET_AGENT_DOCUMENT,\n variables: { id: agentId },\n fetchPolicy: 'network-only',\n });\n setData(result.data?.getBotmanorAgent ?? null);\n } catch (queryError) {\n setError(queryError instanceof Error ? queryError : new Error('Failed to load agent'));\n } finally {\n setLoading(false);\n }\n }, [agentId, client]);\n\n useEffect(() => {\n void refetch();\n }, [refetch]);\n\n return { data, loading, error, refetch };\n}\n\nexport function useCreateAgent() {\n const client = getWorkspaceClient(useGatewayClient('workspace'));\n const [state, setState] = useState<AgentMutationState<AgentRecord>>({\n data: undefined,\n loading: false,\n error: undefined,\n });\n\n const createAgent = useCallback(\n async (input: CreateAgentInput) => {\n setState({ data: undefined, loading: true, error: undefined });\n try {\n const result = await client.mutate<CreateAgentData>({\n mutation: CREATE_AGENT_DOCUMENT,\n variables: { input },\n });\n\n const createdAgent = result.data?.createBotmanorAgent;\n if (!createdAgent) {\n throw new Error('Failed to create agent');\n }\n\n setState({ data: createdAgent, loading: false, error: undefined });\n return createdAgent;\n } catch (mutationError) {\n const error =\n mutationError instanceof Error ? mutationError : new Error('Failed to create agent');\n setState({ data: undefined, loading: false, error });\n throw error;\n }\n },\n [client]\n );\n\n return [createAgent, state] as const;\n}\n\nexport function useUpdateAgent() {\n const client = getWorkspaceClient(useGatewayClient('workspace'));\n const [state, setState] = useState<AgentMutationState<AgentRecord>>({\n data: undefined,\n loading: false,\n error: undefined,\n });\n\n const updateAgent = useCallback(\n async ({ agentId, input }: UpdateAgentInput) => {\n setState({ data: undefined, loading: true, error: undefined });\n try {\n const result = await client.mutate<UpdateAgentData>({\n mutation: UPDATE_AGENT_DOCUMENT,\n variables: { id: agentId, input: buildMutationInput(input, UPDATE_AGENT_FIELDS) },\n });\n\n const updatedAgent = result.data?.updateBotmanorAgent;\n if (!updatedAgent) {\n throw new Error('Failed to update agent');\n }\n\n setState({ data: updatedAgent, loading: false, error: undefined });\n return updatedAgent;\n } catch (mutationError) {\n const error =\n mutationError instanceof Error ? mutationError : new Error('Failed to update agent');\n setState({ data: undefined, loading: false, error });\n throw error;\n }\n },\n [client]\n );\n\n return [updateAgent, state] as const;\n}\n\nexport function useDeleteAgent() {\n const client = getWorkspaceClient(useGatewayClient('workspace'));\n const [state, setState] = useState<AgentMutationState<boolean>>({\n data: undefined,\n loading: false,\n error: undefined,\n });\n\n const deleteAgent = useCallback(\n async (agentId: string) => {\n setState({ data: undefined, loading: true, error: undefined });\n try {\n const result = await client.mutate<DeleteAgentData>({\n mutation: DELETE_AGENT_DOCUMENT,\n variables: { id: agentId },\n });\n\n const deleted = result.data?.deleteBotmanorAgent ?? false;\n setState({ data: deleted, loading: false, error: undefined });\n return deleted;\n } catch (mutationError) {\n const error =\n mutationError instanceof Error ? mutationError : new Error('Failed to delete agent');\n setState({ data: undefined, loading: false, error });\n throw error;\n }\n },\n [client]\n );\n\n return [deleteAgent, state] as const;\n}\n\n// ============================================================================\n// VERSIONING (BOFF-4381) — version history, publish, rollback\n// ============================================================================\n\nexport function useAgentVersions(agentId: string | undefined) {\n const client = getWorkspaceClient(useGatewayClient('workspace'));\n const [data, setData] = useState<AgentVersionRecord[]>([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | undefined>();\n\n const refetch = useCallback(async () => {\n if (!agentId) {\n setData([]);\n return;\n }\n\n setLoading(true);\n setError(undefined);\n try {\n const result = await client.query<ListAgentVersionsData>({\n query: LIST_AGENT_VERSIONS_DOCUMENT,\n variables: { agentId, pagination: { limit: 50, offset: 0 } },\n fetchPolicy: 'network-only',\n });\n const versions = result.data?.listAgentVersions ?? [];\n // Newest first, regardless of what the server returned.\n setData(\n [...versions].sort((a, b) =>\n a.createdAt && b.createdAt ? b.createdAt.localeCompare(a.createdAt) : 0\n )\n );\n } catch (queryError) {\n setError(\n queryError instanceof Error ? queryError : new Error('Failed to load agent versions')\n );\n } finally {\n setLoading(false);\n }\n }, [agentId, client]);\n\n useEffect(() => {\n void refetch();\n }, [refetch]);\n\n return { data, loading, error, refetch };\n}\n\nexport function usePublishAgentVersion() {\n const client = getWorkspaceClient(useGatewayClient('workspace'));\n const [state, setState] = useState<AgentMutationState<AgentVersionRecord>>({\n data: undefined,\n loading: false,\n error: undefined,\n });\n\n const publishAgentVersion = useCallback(\n async ({\n agentId,\n versionId,\n changelog,\n }: {\n agentId: string;\n versionId: string;\n changelog?: string;\n }) => {\n setState({ data: undefined, loading: true, error: undefined });\n try {\n const result = await client.mutate<PublishAgentVersionData>({\n mutation: PUBLISH_AGENT_VERSION_DOCUMENT,\n variables: { agentId, versionId, changelog: changelog?.trim() || undefined },\n });\n\n const published = result.data?.publishAgentVersion;\n if (!published) {\n throw new Error('Failed to publish agent version');\n }\n\n setState({ data: published, loading: false, error: undefined });\n return published;\n } catch (mutationError) {\n const error =\n mutationError instanceof Error\n ? mutationError\n : new Error('Failed to publish agent version');\n setState({ data: undefined, loading: false, error });\n throw error;\n }\n },\n [client]\n );\n\n return [publishAgentVersion, state] as const;\n}\n\nexport function useRollbackAgentVersion() {\n const client = getWorkspaceClient(useGatewayClient('workspace'));\n const [state, setState] = useState<AgentMutationState<AgentVersionRecord>>({\n data: undefined,\n loading: false,\n error: undefined,\n });\n\n const rollbackAgentVersion = useCallback(\n async ({ agentId, targetVersionId }: { agentId: string; targetVersionId: string }) => {\n setState({ data: undefined, loading: true, error: undefined });\n try {\n const result = await client.mutate<RollbackAgentVersionData>({\n mutation: ROLLBACK_AGENT_VERSION_DOCUMENT,\n variables: { agentId, targetVersionId },\n });\n\n const rolledBack = result.data?.rollbackAgentVersion;\n if (!rolledBack) {\n throw new Error('Failed to roll back agent version');\n }\n\n setState({ data: rolledBack, loading: false, error: undefined });\n return rolledBack;\n } catch (mutationError) {\n const error =\n mutationError instanceof Error\n ? mutationError\n : new Error('Failed to roll back agent version');\n setState({ data: undefined, loading: false, error });\n throw error;\n }\n },\n [client]\n );\n\n return [rollbackAgentVersion, state] as const;\n}\n"],"mappings":";;;;;;AASA,IAAMA,IAAuB,CAAG;;;;;;;;;;;;;;;;;;;;;;;;GA0B1BC,IAAqB,CAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCxBC,IAAwB,CAAG;;;;;;;;;;;;;;;;;;;;;;GAwB3BC,IAAwB,CAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6B3BC,IAAwB,CAAG;;;;GAO3BC,IAA+B,CAAG;;;;;;;;;;;;;;;GAiBlCC,IAAiC,CAAG;;;;;;;;;;;;GAcpCC,IAAkC,CAAG;;;;;;;;;;;;GAqHrCC,IAAsBC,EAAmC;CAC7D,UAAU;CACV,cAAc;CACd,SAAS;CACT,aAAa;CACb,kBAAkB;CAClB,YAAY;CACZ,yBAAyB;CACzB,WAAW;CACX,kBAAkB;CAClB,UAAU;CACV,MAAM;CACN,MAAM;CACN,gBAAgB;CAChB,QAAQ;CACR,cAAc;CACd,QAAQ;CACR,MAAM;CACN,aAAa;CACb,MAAM;CACN,YAAY;CACZ,aAAa;AACf,CAAC;AAED,SAASC,EAAmB,GAAkC;CAC5D,OAAOC;AACT;AAEA,SAASC,EACP,GACA,GACqC;CACrC,IAAKC,KAAgBC,GAErB,OAAO;EACL;EACA,QAAQA,GAAQ;EAChB,QAAQA,GAAQ,SAAS;EACzB,YAAYA,GAAQ,aAAa;EACjC,UAAUA,GAAQ;CACpB;AACF;AAUA,SAAgBC,EAAU,GAAqB;CAC7C,IAAMJ,IAASD,EAAmBM,EAAiB,WAAW,CAAC,GACzD,EAAE,mBAAgBC,EAAU,GAC5B,CAACC,GAAMC,KAAWC,EAAwB,CAAC,CAAC,GAC5C,CAACC,GAASC,KAAcF,EAAS,EAAK,GACtC,CAACG,GAAOC,KAAYJ,EAA4B,GAEhDK,IAAYC,SACT;EACL,SAASd,EAAiBC,GAAaC,CAAM;EAC7C,YAAY;GAAE,OAAO;GAAK,QAAQ;EAAE;CACtC,IACA,CAACA,GAAQD,CAAW,CACtB,GAEMc,IAAUC,EAAY,YAAY;EACtC,IAAI,CAACf,GACH,EAAQ,CAAC,CAAC;OAIZ;GACA,AADAS,EAAW,EAAI,GACfE,EAAS,KAAA,CAAS;GAClB,IAAI;IACF,IAAMK,IAAS,MAAMlB,EAAO,MAA8B;KACxD,OAAOX;KACP;KACA,aAAa;IACf,CAAC;IACD,EAAQ6B,EAAO,MAAM,sBAAsB,CAAC,CAAC;GAC/C,SAASC,GAAY;IACnB,EAASA,aAAsB,QAAQA,IAAa,gBAAI,MAAM,uBAAuB,CAAC;GACxF,UAAU;IACR,EAAW,EAAK;GAClB;EAbe;CAcjB,GAAG;EAACnB;EAAQc;EAAWZ;CAAW,CAAC;CAMnC,OAJAkB,QAAgB;EACd,EAAa;CACf,GAAG,CAACJ,CAAO,CAAC,GAEL;EAAE;EAAM;EAAS;EAAO;CAAQ;AACzC;AAEA,SAAgBK,EAAS,GAA6B;CACpD,IAAMrB,IAASD,EAAmBM,EAAiB,WAAW,CAAC,GACzD,CAACE,GAAMC,KAAWC,EAA6B,IAAI,GACnD,CAACC,GAASC,KAAcF,EAAS,EAAK,GACtC,CAACG,GAAOC,KAAYJ,EAA4B,GAEhDO,IAAUC,EAAY,YAAY;EACtC,IAAI,CAACK,GACH,EAAQ,IAAI;OAId;GACA,AADAX,EAAW,EAAI,GACfE,EAAS,KAAA,CAAS;GAClB,IAAI;IACF,IAAMK,IAAS,MAAMlB,EAAO,MAAoB;KAC9C,OAAOV;KACP,WAAW,EAAE,IAAIgC,EAAQ;KACzB,aAAa;IACf,CAAC;IACD,EAAQJ,EAAO,MAAM,oBAAoB,IAAI;GAC/C,SAASC,GAAY;IACnB,EAASA,aAAsB,QAAQA,IAAa,gBAAI,MAAM,sBAAsB,CAAC;GACvF,UAAU;IACR,EAAW,EAAK;GAClB;EAbe;CAcjB,GAAG,CAACG,GAAStB,CAAM,CAAC;CAMpB,OAJAoB,QAAgB;EACd,EAAa;CACf,GAAG,CAACJ,CAAO,CAAC,GAEL;EAAE;EAAM;EAAS;EAAO;CAAQ;AACzC;AAEA,SAAgBO,IAAiB;CAC/B,IAAMvB,IAASD,EAAmBM,EAAiB,WAAW,CAAC,GACzD,CAACmB,GAAOC,KAAYhB,EAA0C;EAClE,MAAM,KAAA;EACN,SAAS;EACT,OAAO,KAAA;CACT,CAAC;CA4BD,OAAO,CA1BaQ,EAClB,OAAO,MAA4B;EACjC,EAAS;GAAE,MAAM,KAAA;GAAW,SAAS;GAAM,OAAO,KAAA;EAAU,CAAC;EAC7D,IAAI;GAMF,IAAMS,KAAe,MALA1B,EAAO,OAAwB;IAClD,UAAUT;IACV,WAAW,EAAE,SAAM;GACrB,CAAC,EAAA,CAE2B,MAAM;GAClC,IAAI,CAACmC,GACH,MAAU,MAAM,wBAAwB;GAI1C,OADAD,EAAS;IAAE,MAAMC;IAAc,SAAS;IAAO,OAAO,KAAA;GAAU,CAAC,GAC1DA;EACT,SAASC,GAAe;GACtB,IAAMf,IACJe,aAAyB,QAAQA,IAAgB,gBAAI,MAAM,wBAAwB;GAErF,MADAF,EAAS;IAAE,MAAM,KAAA;IAAW,SAAS;IAAO;GAAM,CAAC,GAC7Cb;EACR;CACF,GACA,CAACZ,CAAM,CAGD,GAAawB,CAAK;AAC5B;AAEA,SAAgBI,IAAiB;CAC/B,IAAM5B,IAASD,EAAmBM,EAAiB,WAAW,CAAC,GACzD,CAACmB,GAAOC,KAAYhB,EAA0C;EAClE,MAAM,KAAA;EACN,SAAS;EACT,OAAO,KAAA;CACT,CAAC;CA4BD,OAAO,CA1BaQ,EAClB,OAAO,EAAE,YAAS,eAA8B;EAC9C,EAAS;GAAE,MAAM,KAAA;GAAW,SAAS;GAAM,OAAO,KAAA;EAAU,CAAC;EAC7D,IAAI;GAMF,IAAMY,KAAe,MALA7B,EAAO,OAAwB;IAClD,UAAUR;IACV,WAAW;KAAE,IAAI8B;KAAS,OAAOQ,EAAmBC,GAAOlC,CAAmB;IAAE;GAClF,CAAC,EAAA,CAE2B,MAAM;GAClC,IAAI,CAACgC,GACH,MAAU,MAAM,wBAAwB;GAI1C,OADAJ,EAAS;IAAE,MAAMI;IAAc,SAAS;IAAO,OAAO,KAAA;GAAU,CAAC,GAC1DA;EACT,SAASF,GAAe;GACtB,IAAMf,IACJe,aAAyB,QAAQA,IAAgB,gBAAI,MAAM,wBAAwB;GAErF,MADAF,EAAS;IAAE,MAAM,KAAA;IAAW,SAAS;IAAO;GAAM,CAAC,GAC7Cb;EACR;CACF,GACA,CAACZ,CAAM,CAGD,GAAawB,CAAK;AAC5B;AAEA,SAAgBQ,IAAiB;CAC/B,IAAMhC,IAASD,EAAmBM,EAAiB,WAAW,CAAC,GACzD,CAACmB,GAAOC,KAAYhB,EAAsC;EAC9D,MAAM,KAAA;EACN,SAAS;EACT,OAAO,KAAA;CACT,CAAC;CAwBD,OAAO,CAtBaQ,EAClB,OAAO,MAAoB;EACzB,EAAS;GAAE,MAAM,KAAA;GAAW,SAAS;GAAM,OAAO,KAAA;EAAU,CAAC;EAC7D,IAAI;GAMF,IAAMgB,KAAU,MALKjC,EAAO,OAAwB;IAClD,UAAUP;IACV,WAAW,EAAE,IAAI6B,EAAQ;GAC3B,CAAC,EAAA,CAEsB,MAAM,uBAAuB;GAEpD,OADAG,EAAS;IAAE,MAAMQ;IAAS,SAAS;IAAO,OAAO,KAAA;GAAU,CAAC,GACrDA;EACT,SAASN,GAAe;GACtB,IAAMf,IACJe,aAAyB,QAAQA,IAAgB,gBAAI,MAAM,wBAAwB;GAErF,MADAF,EAAS;IAAE,MAAM,KAAA;IAAW,SAAS;IAAO;GAAM,CAAC,GAC7Cb;EACR;CACF,GACA,CAACZ,CAAM,CAGD,GAAawB,CAAK;AAC5B;AAMA,SAAgBU,EAAiB,GAA6B;CAC5D,IAAMlC,IAASD,EAAmBM,EAAiB,WAAW,CAAC,GACzD,CAACE,GAAMC,KAAWC,EAA+B,CAAC,CAAC,GACnD,CAACC,GAASC,KAAcF,EAAS,EAAK,GACtC,CAACG,GAAOC,KAAYJ,EAA4B,GAEhDO,IAAUC,EAAY,YAAY;EACtC,IAAI,CAACK,GACH,EAAQ,CAAC,CAAC;OAIZ;GACA,AADAX,EAAW,EAAI,GACfE,EAAS,KAAA,CAAS;GAClB,IAAI;IAMF,IAAMsB,KAAW,MALInC,EAAO,MAA6B;KACvD,OAAON;KACP,WAAW;MAAE;MAAS,YAAY;OAAE,OAAO;OAAI,QAAQ;MAAE;KAAE;KAC3D,aAAa;IACf,CAAC,EAAA,CACuB,MAAM,qBAAqB,CAAC;IAEpD,EACE,CAAC,GAAGyC,CAAQ,CAAC,CAAC,MAAM,GAAG,MACrBC,EAAE,aAAaC,EAAE,YAAYA,EAAE,UAAU,cAAcD,EAAE,SAAS,IAAI,CACxE,CACF;GACF,SAASjB,GAAY;IACnB,EACEA,aAAsB,QAAQA,IAAa,gBAAI,MAAM,+BAA+B,CACtF;GACF,UAAU;IACR,EAAW,EAAK;GAClB;EArBe;CAsBjB,GAAG,CAACG,GAAStB,CAAM,CAAC;CAMpB,OAJAoB,QAAgB;EACd,EAAa;CACf,GAAG,CAACJ,CAAO,CAAC,GAEL;EAAE;EAAM;EAAS;EAAO;CAAQ;AACzC;AAEA,SAAgBsB,IAAyB;CACvC,IAAMtC,IAASD,EAAmBM,EAAiB,WAAW,CAAC,GACzD,CAACmB,GAAOC,KAAYhB,EAAiD;EACzE,MAAM,KAAA;EACN,SAAS;EACT,OAAO,KAAA;CACT,CAAC;CAsCD,OAAO,CApCqBQ,EAC1B,OAAO,EACL,YACA,cACA,mBAKI;EACJ,EAAS;GAAE,MAAM,KAAA;GAAW,SAAS;GAAM,OAAO,KAAA;EAAU,CAAC;EAC7D,IAAI;GAMF,IAAMsB,KAAY,MALGvC,EAAO,OAAgC;IAC1D,UAAUL;IACV,WAAW;KAAE;KAAS;KAAW,WAAW6C,GAAW,KAAK,KAAK,KAAA;IAAU;GAC7E,CAAC,EAAA,CAEwB,MAAM;GAC/B,IAAI,CAACD,GACH,MAAU,MAAM,iCAAiC;GAInD,OADAd,EAAS;IAAE,MAAMc;IAAW,SAAS;IAAO,OAAO,KAAA;GAAU,CAAC,GACvDA;EACT,SAASZ,GAAe;GACtB,IAAMf,IACJe,aAAyB,QACrBA,IACA,gBAAI,MAAM,iCAAiC;GAEjD,MADAF,EAAS;IAAE,MAAM,KAAA;IAAW,SAAS;IAAO;GAAM,CAAC,GAC7Cb;EACR;CACF,GACA,CAACZ,CAAM,CAGD,GAAqBwB,CAAK;AACpC;AAEA,SAAgBiB,IAA0B;CACxC,IAAMzC,IAASD,EAAmBM,EAAiB,WAAW,CAAC,GACzD,CAACmB,GAAOC,KAAYhB,EAAiD;EACzE,MAAM,KAAA;EACN,SAAS;EACT,OAAO,KAAA;CACT,CAAC;CA8BD,OAAO,CA5BsBQ,EAC3B,OAAO,EAAE,YAAS,yBAAoE;EACpF,EAAS;GAAE,MAAM,KAAA;GAAW,SAAS;GAAM,OAAO,KAAA;EAAU,CAAC;EAC7D,IAAI;GAMF,IAAMyB,KAAa,MALE1C,EAAO,OAAiC;IAC3D,UAAUJ;IACV,WAAW;KAAE;KAAS;IAAgB;GACxC,CAAC,EAAA,CAEyB,MAAM;GAChC,IAAI,CAAC8C,GACH,MAAU,MAAM,mCAAmC;GAIrD,OADAjB,EAAS;IAAE,MAAMiB;IAAY,SAAS;IAAO,OAAO,KAAA;GAAU,CAAC,GACxDA;EACT,SAASf,GAAe;GACtB,IAAMf,IACJe,aAAyB,QACrBA,IACA,gBAAI,MAAM,mCAAmC;GAEnD,MADAF,EAAS;IAAE,MAAM,KAAA;IAAW,SAAS;IAAO;GAAM,CAAC,GAC7Cb;EACR;CACF,GACA,CAACZ,CAAM,CAGD,GAAsBwB,CAAK;AACrC"}
|