@burdenoff/microfe-botmanor 2026.1106.1 → 2026.1109.1
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 -37
- 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 +253 -0
- package/dist/botlit/components/AiOperationsPanel.js.map +1 -0
- 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 +2 -3
- 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 +36 -0
- package/dist/botlit/hooks/index.js +15 -13
- 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 +154 -0
- package/dist/botlit/hooks/useAiOperations.js.map +1 -0
- 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 +57 -0
- package/dist/botlit/hooks/useBuckets.js +38 -39
- 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/useConversations.d.ts +42 -0
- package/dist/botlit/hooks/useConversations.js +1 -2
- package/dist/botlit/hooks/useConversations.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 +16 -0
- package/dist/botlit/index.js +12 -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 +202 -190
- 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 +165 -0
- package/dist/botlit/pages/AiOperationsPage.js.map +1 -0
- 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 +246 -237
- 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/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/ConversationDetailPage.d.ts +2 -0
- package/dist/botlit/pages/ConversationsPage.d.ts +2 -0
- 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 +39 -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 +172 -75
- package/dist/generated/wspace-operations.js.map +1 -1
- package/dist/generated/wspace-types.d.ts +152017 -0
- package/dist/generated/wspace-types.js +6 -5
- package/dist/generated/wspace-types.js.map +1 -1
- package/dist/index.d.ts +5 -0
- 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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AgentDetailPage.js","names":[],"sources":["../../../src/botlit/pages/AgentDetailPage.tsx"],"sourcesContent":["/**\n * Agent Detail Page\n * @module botlit/pages\n *\n * Displays agent details using flat API fields from the real GraphQL backend.\n * Maps flat fields (systemPrompt, llmModelId, mcpConnectionIds, knowledgeBaseIds, capabilities[])\n * to a rich detail view with tabs.\n */\n\nimport type { FC, ReactNode } from 'react';\nimport { useState } from 'react';\nimport { useParams } from 'react-router';\nimport {\n ArrowLeft,\n Play,\n Settings,\n BarChart3,\n BookOpen,\n Wrench,\n Shield,\n Brain,\n MessageSquare,\n Edit,\n Share2,\n FileText,\n Trash2,\n History,\n} from 'lucide-react';\nimport { useTr } from '../../shared/hooks/useTr';\nimport { toast } from 'sonner';\nimport { PagePurpose, NextSteps, GlassCard } from '@burdenoff/fe-libs/ui';\nimport { PageLayout } from '../components/PageLayout';\nimport { Card, CardHeader, CardTitle, CardContent, CardDescription } from '../components/Card';\nimport { Button } from '../components/Button';\nimport { Badge, StatusBadge } from '../components/Badge';\nimport { EmptyState } from '../components/EmptyState';\nimport { VersionHistoryPanel } from '../components/VersionHistoryPanel';\nimport { AgentApprovalPanel } from '../components/AgentApprovalPanel';\nimport { useAgentApprovalSettings } from '../hooks/useAgentApprovals';\nimport { AssistantRuntimeSetupPanel } from '../components/AssistantRuntimeSetupPanel';\nimport { AssistantChannelPanel } from '../components/AssistantChannelPanel';\nimport { AssistantWebsitePanel } from '../components/AssistantWebsitePanel';\nimport { useAgent, useUpdateAgent, useDeleteAgent } from '../hooks/useAgents';\nimport { useBotlit } from '../providers/BotlitProvider';\nimport { formatRelativeTime } from '../utils/formatters';\nimport { cn } from '../utils/cn';\nimport { BOTMANOR_PERMISSIONS, BotmanorPermissionGate, useBotmanorCan } from '../permissions';\n\ntype TabType =\n | 'overview'\n | 'prompt'\n | 'llm'\n | 'tools'\n | 'knowledge'\n | 'guardrails'\n | 'a2a'\n | 'versions'\n | 'assistant';\n\nexport const AgentDetailPage: FC = () => {\n const t = useTr();\n const { agentId } = useParams();\n const { navigateTo } = useBotlit();\n const can = useBotmanorCan();\n const { data: agent, loading, refetch: refetchAgent } = useAgent(agentId);\n const [updateAgent, updateAgentResult] = useUpdateAgent();\n const [deleteAgent, deleteAgentResult] = useDeleteAgent();\n const [activeTab, setActiveTab] = useState<TabType>('overview');\n // BOFF-9682: when the workspace requires activation approval, an agent that\n // has never been published goes live through a reviewer, not this button.\n const approvalSettings = useAgentApprovalSettings();\n\n if (loading) {\n return (\n <PageLayout title={t('botlit.common.loading', 'Loading...')}>\n <div className=\"h-96 bg-bg-sunken motion-safe:animate-vc-shimmer rounded-lg\" />\n </PageLayout>\n );\n }\n\n if (!agent) {\n return (\n <PageLayout title={t('botlit.agentDetail.notFound.title', 'Agent Not Found')}>\n <EmptyState\n illustration=\"empty-agents\"\n title={t('botlit.agentDetail.notFound.title', 'Agent Not Found')}\n description={t(\n 'botlit.agentDetail.notFound.description',\n \"The agent you're looking for doesn't exist.\"\n )}\n action={\n <Button onClick={() => navigateTo('agents')}>\n {t('botlit.agentDetail.notFound.backAction', 'Back to Agents')}\n </Button>\n }\n />\n </PageLayout>\n );\n }\n\n // `AgentRecord` declares every field the agent query selects — read directly.\n const systemPrompt = agent.systemPrompt || '';\n const llmModelId = agent.llmModelId || '';\n const temperature = agent.temperature;\n const maxTokens = agent.maxTokens;\n const mcpConnectionIds = agent.mcpConnectionIds ?? [];\n const knowledgeBaseIds = agent.knowledgeBaseIds ?? [];\n const workflowIds = agent.workflowIds ?? [];\n const capabilities = agent.capabilities ?? [];\n const tagIds = agent.tagIds ?? [];\n const maxConcurrentExecutions = agent.maxConcurrentExecutions || 10;\n const metadata = agent.metadata ?? null;\n\n const tabs: { id: TabType; label: string; icon: ReactNode }[] = [\n { id: 'assistant', label: 'Assistant setup', icon: <Settings size={16} /> },\n {\n id: 'overview',\n label: t('botlit.agentDetail.tabs.overview', 'Overview'),\n icon: <BarChart3 size={16} />,\n },\n {\n id: 'prompt',\n label: t('botlit.agentDetail.tabs.prompt', 'Prompt'),\n icon: <FileText size={16} />,\n },\n {\n id: 'llm',\n label: t('botlit.agentDetail.tabs.llmConfig', 'LLM Config'),\n icon: <Brain size={16} />,\n },\n { id: 'tools', label: t('botlit.agentDetail.tabs.tools', 'Tools'), icon: <Wrench size={16} /> },\n {\n id: 'knowledge',\n label: t('botlit.agentDetail.tabs.knowledge', 'Knowledge'),\n icon: <BookOpen size={16} />,\n },\n {\n id: 'guardrails',\n label: t('botlit.agentDetail.tabs.guardrails', 'Guardrails'),\n icon: <Shield size={16} />,\n },\n { id: 'a2a', label: t('botlit.agentDetail.tabs.a2a', 'A2A'), icon: <Share2 size={16} /> },\n {\n id: 'versions',\n label: t('botlit.agentDetail.tabs.versions', 'Versions'),\n icon: <History size={16} />,\n },\n ];\n\n return (\n <PageLayout\n title={\n <div className=\"flex items-center gap-3\">\n <Button variant=\"ghost\" size=\"icon\" onClick={() => navigateTo('agents')}>\n <ArrowLeft size={20} />\n </Button>\n <span className=\"text-3xl\">{'🤖'}</span>\n <div>\n <div className=\"flex items-center gap-2\">\n <span>{agent.name}</span>\n <StatusBadge status={agent.status} />\n <Badge variant=\"outline\">{agent.slug}</Badge>\n </div>\n <p className=\"text-sm font-normal text-text-secondary\">{agent.description}</p>\n </div>\n </div>\n }\n actions={\n <div className=\"flex gap-2\">\n {approvalSettings.data?.requireActivationApproval &&\n (agent.status === 'DRAFT' || agent.status === 'ARCHIVED') &&\n !agent.currentVersionId ? (\n <BotmanorPermissionGate permission={BOTMANOR_PERMISSIONS.AGENT_UPDATE}>\n <Button\n variant=\"default\"\n onClick={() => {\n setActiveTab('overview');\n requestAnimationFrame(() =>\n document\n .querySelector('[data-testid=\"agent-approval-panel\"]')\n ?.scrollIntoView({ behavior: 'smooth', block: 'start' })\n );\n }}\n >\n {t('botlit.agentApproval.requestAction', 'Request activation')}\n </Button>\n </BotmanorPermissionGate>\n ) : agent.status === 'DRAFT' || agent.status === 'ARCHIVED' ? (\n <BotmanorPermissionGate permission={BOTMANOR_PERMISSIONS.AGENT_UPDATE}>\n <Button\n variant=\"default\"\n isLoading={updateAgentResult.loading}\n onClick={async () => {\n try {\n if (!agentId) return;\n await updateAgent({ agentId, input: { status: 'ACTIVE' } });\n await refetchAgent();\n toast.success(\n `${t('botlit.agentDetail.activate.successPrefix', 'Agent')} \"${agent.name}\" ${t('botlit.agentDetail.activate.successSuffix', 'activated')}`\n );\n } catch (err: unknown) {\n toast.error(\n err instanceof Error\n ? err.message\n : t('botlit.agentDetail.activate.error', 'Failed to activate agent')\n );\n }\n }}\n >\n {t('botlit.agentDetail.actions.activate', 'Activate')}\n </Button>\n </BotmanorPermissionGate>\n ) : (\n <BotmanorPermissionGate permission={BOTMANOR_PERMISSIONS.AGENT_UPDATE}>\n <Button\n variant=\"outline\"\n isLoading={updateAgentResult.loading}\n onClick={async () => {\n try {\n if (!agentId) return;\n await updateAgent({ agentId, input: { status: 'DRAFT' } });\n await refetchAgent();\n toast.success(\n `${t('botlit.agentDetail.deactivate.successPrefix', 'Agent')} \"${agent.name}\" ${t('botlit.agentDetail.deactivate.successSuffix', 'deactivated')}`\n );\n } catch (err: unknown) {\n toast.error(\n err instanceof Error\n ? err.message\n : t('botlit.agentDetail.deactivate.error', 'Failed to deactivate agent')\n );\n }\n }}\n >\n {t('botlit.agentDetail.actions.deactivate', 'Deactivate')}\n </Button>\n </BotmanorPermissionGate>\n )}\n <BotmanorPermissionGate permission={BOTMANOR_PERMISSIONS.AGENT_UPDATE}>\n <Button\n variant=\"outline\"\n leftIcon={<Edit size={16} />}\n onClick={() => navigateTo(`agents/${agentId}/edit`)}\n >\n {t('botlit.agentDetail.actions.editAgent', 'Edit Agent')}\n </Button>\n </BotmanorPermissionGate>\n <BotmanorPermissionGate permission={BOTMANOR_PERMISSIONS.AGENT_EXECUTE}>\n <Button leftIcon={<Play size={16} />} onClick={() => navigateTo(`chat/${agentId}`)}>\n {t('botlit.agentDetail.actions.testAgent', 'Test Agent')}\n </Button>\n </BotmanorPermissionGate>\n <BotmanorPermissionGate permission={BOTMANOR_PERMISSIONS.AGENT_DELETE}>\n <Button\n variant=\"destructive\"\n leftIcon={<Trash2 size={16} />}\n isLoading={deleteAgentResult.loading}\n onClick={async () => {\n if (!agentId) return;\n if (\n !confirm(\n `${t('botlit.agentDetail.delete.confirmPrefix', 'Are you sure you want to delete')} \"${agent.name}\"? ${t('botlit.agentDetail.delete.confirmSuffix', 'This action cannot be undone.')}`\n )\n )\n return;\n try {\n await deleteAgent(agentId);\n toast.success(\n `${t('botlit.agentDetail.delete.successPrefix', 'Agent')} \"${agent.name}\" ${t('botlit.agentDetail.delete.successSuffix', 'deleted successfully')}`\n );\n navigateTo('agents');\n } catch (err: unknown) {\n toast.error(\n err instanceof Error\n ? err.message\n : t('botlit.agentDetail.delete.error', 'Failed to delete agent')\n );\n }\n }}\n >\n {t('botlit.common.delete', 'Delete')}\n </Button>\n </BotmanorPermissionGate>\n </div>\n }\n >\n <div className=\"space-y-6\">\n {activeTab === 'assistant' && agentId && (\n <div className=\"space-y-5\">\n {/* Each panel is setup work: runtime configuration needs update, and\n publishing (whose listings are publish-gated too) needs publish. */}\n {can(BOTMANOR_PERMISSIONS.AGENT_UPDATE) && (\n <AssistantRuntimeSetupPanel\n agentId={agentId}\n onConfigured={() => void refetchAgent()}\n />\n )}\n {can(BOTMANOR_PERMISSIONS.AGENT_PUBLISH) && (\n <>\n <AssistantWebsitePanel agentId={agentId} knowledgeBaseIds={knowledgeBaseIds} />\n <AssistantChannelPanel agentId={agentId} />\n </>\n )}\n {!can(BOTMANOR_PERMISSIONS.AGENT_UPDATE) &&\n !can(BOTMANOR_PERMISSIONS.AGENT_PUBLISH) && (\n <p role=\"status\" className=\"text-sm text-text-secondary\">\n {t(\n 'botlit.agentDetail.assistant.readOnly',\n 'Assistant setup and publishing are available to members who can edit or publish agents in this workspace.'\n )}\n </p>\n )}\n </div>\n )}\n <PagePurpose icon={<Brain size={18} />}>\n {t(\n 'botlit.agentDetail.purpose',\n 'This is the full configuration for a single agent — its prompt, model settings, the tools and knowledge it can use, its guardrails and how it talks to other agents. Use the tabs to inspect or change any part, and test the agent in chat to confirm it behaves the way you expect before going live.'\n )}\n </PagePurpose>\n\n {/* Tabs */}\n <div className=\"flex gap-1 border-b border-border-subtle overflow-x-auto\">\n {tabs.map((tab) => (\n <button\n key={tab.id}\n onClick={() => setActiveTab(tab.id)}\n className={cn(\n 'flex items-center gap-2 px-4 py-2 text-sm font-medium border-b-2 transition-colors whitespace-nowrap',\n activeTab === tab.id\n ? 'border-primary text-primary'\n : 'border-transparent text-text-secondary hover:text-text-primary'\n )}\n >\n {tab.icon}\n {tab.label}\n </button>\n ))}\n </div>\n\n {/* Overview Tab */}\n {activeTab === 'overview' && (\n <div className=\"space-y-6\">\n <NextSteps\n storageKey={`botlit-agent-${agentId}`}\n steps={[\n {\n id: 'test',\n label: t('botlit.agentDetail.nextSteps.test', 'Test the agent in chat'),\n description: t(\n 'botlit.agentDetail.nextSteps.testDesc',\n 'Send it a few real prompts to see how it responds.'\n ),\n icon: <Play size={16} />,\n onClick: () => navigateTo(`chat/${agentId}`),\n },\n {\n id: 'prompt',\n label: t('botlit.agentDetail.nextSteps.prompt', 'Refine the system prompt'),\n description: t(\n 'botlit.agentDetail.nextSteps.promptDesc',\n 'Tune its instructions and behaviour.'\n ),\n icon: <FileText size={16} />,\n onClick: () => setActiveTab('prompt'),\n },\n {\n id: 'tools',\n label: t('botlit.agentDetail.nextSteps.tools', 'Connect tools & knowledge'),\n description: t(\n 'botlit.agentDetail.nextSteps.toolsDesc',\n 'Give it MCP tools and knowledge bases to work with.'\n ),\n icon: <Wrench size={16} />,\n onClick: () => setActiveTab('tools'),\n },\n {\n id: 'activate',\n label: t('botlit.agentDetail.nextSteps.activate', 'Activate and attach to a bot'),\n description: t(\n 'botlit.agentDetail.nextSteps.activateDesc',\n 'Put it live so a bot can route conversations to it.'\n ),\n icon: <Share2 size={16} />,\n onClick: () => navigateTo(`agents/${agentId}/edit`),\n done: agent.status === 'ACTIVE',\n },\n ]}\n />\n {agentId && (\n <AgentApprovalPanel\n agentId={agentId}\n agentStatus={agent.status}\n onChanged={() => void refetchAgent()}\n />\n )}\n <div className=\"grid grid-cols-1 lg:grid-cols-3 gap-6\">\n {/* Quick Info */}\n <Card className=\"lg:col-span-1\">\n <CardHeader>\n <CardTitle>Details</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <div>\n <p className=\"text-sm text-text-secondary\">Status</p>\n <StatusBadge status={agent.status} />\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Type</p>\n <Badge variant=\"outline\">{agent.type}</Badge>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Visibility</p>\n <Badge variant=\"outline\">{agent.visibility}</Badge>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">LLM Model</p>\n <p className=\"font-medium font-mono text-sm\">\n {llmModelId || 'Not configured'}\n </p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">MCP Connections</p>\n <p className=\"font-medium\">{mcpConnectionIds.length} servers</p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Knowledge Bases</p>\n <p className=\"font-medium\">{knowledgeBaseIds.length} KBs</p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Max Concurrent</p>\n <p className=\"font-medium\">{maxConcurrentExecutions}</p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Executions</p>\n <p className=\"font-medium\">{agent.executionCount ?? 0}</p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Created</p>\n <p className=\"font-medium\">{formatRelativeTime(agent.createdAt)}</p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Updated</p>\n <p className=\"font-medium\">{formatRelativeTime(agent.updatedAt)}</p>\n </div>\n </CardContent>\n </Card>\n\n {/* Capabilities */}\n <GlassCard treatment=\"glass\" glow className=\"lg:col-span-2 p-6\">\n <h3 className=\"mb-4 text-lg font-semibold tracking-tight text-text-primary\">\n {t('botlit.agentDetail.capabilities.title', 'Capabilities')}\n </h3>\n <div>\n {capabilities.length > 0 ? (\n <div className=\"grid grid-cols-2 md:grid-cols-3 gap-4\">\n {capabilities.map((cap: string) => (\n <div\n key={cap}\n className=\"p-3 rounded-lg border border-green-500 bg-green-500/10\"\n >\n <p className=\"font-medium\">{cap}</p>\n <Badge variant=\"success\">\n {t('botlit.agentDetail.capabilities.enabled', 'Enabled')}\n </Badge>\n </div>\n ))}\n </div>\n ) : (\n <p className=\"text-text-secondary\">\n {t('botlit.agentDetail.capabilities.empty', 'No capabilities configured')}\n </p>\n )}\n </div>\n </GlassCard>\n\n {/* Tags */}\n {tagIds.length > 0 && (\n <Card className=\"lg:col-span-3\">\n <CardHeader>\n <CardTitle>{t('botlit.agentDetail.tags.title', 'Tags')}</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"flex flex-wrap gap-2\">\n {tagIds.map((tag: string) => (\n <Badge key={tag} variant=\"outline\">\n {tag}\n </Badge>\n ))}\n </div>\n </CardContent>\n </Card>\n )}\n </div>\n </div>\n )}\n\n {/* Prompt Tab */}\n {activeTab === 'prompt' && (\n <div className=\"space-y-6\">\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <FileText size={18} />\n {t('botlit.agentDetail.prompt.title', 'System Prompt')}\n </CardTitle>\n <CardDescription>\n {t(\n 'botlit.agentDetail.prompt.description',\n \"The system prompt that defines this agent's behavior\"\n )}\n </CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n {systemPrompt ? (\n <pre className=\"p-4 bg-bg-sunken rounded-lg text-sm whitespace-pre-wrap font-mono\">\n {systemPrompt}\n </pre>\n ) : (\n <p className=\"text-text-secondary\">\n {t('botlit.agentDetail.prompt.empty', 'No system prompt configured')}\n </p>\n )}\n </CardContent>\n </Card>\n </div>\n )}\n\n {/* LLM Config Tab */}\n {activeTab === 'llm' && (\n <div className=\"grid grid-cols-1 lg:grid-cols-2 gap-6\">\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <Brain size={18} />\n {t('botlit.agentDetail.llm.title', 'Model Configuration')}\n </CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <div>\n <p className=\"text-sm text-text-secondary\">LLM Model ID</p>\n <p className=\"font-medium font-mono\">{llmModelId || 'Not configured'}</p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Temperature</p>\n <p className=\"font-medium\">{temperature != null ? temperature : 'Default'}</p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Max Tokens</p>\n <p className=\"font-medium\">{maxTokens != null ? maxTokens : 'Default'}</p>\n </div>\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <MessageSquare size={18} />\n {t('botlit.agentDetail.executionLimits.title', 'Execution Limits')}\n </CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <div>\n <p className=\"text-sm text-text-secondary\">Max Concurrent Executions</p>\n <p className=\"font-medium\">{maxConcurrentExecutions}</p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Total Executions</p>\n <p className=\"font-medium\">{agent.executionCount ?? 0}</p>\n </div>\n {agent.lastExecutedAt && (\n <div>\n <p className=\"text-sm text-text-secondary\">Last Executed</p>\n <p className=\"font-medium\">{formatRelativeTime(agent.lastExecutedAt)}</p>\n </div>\n )}\n </CardContent>\n </Card>\n </div>\n )}\n\n {/* Tools Tab */}\n {activeTab === 'tools' && (\n <div className=\"space-y-6\">\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <Wrench size={18} />\n MCP Server Connections\n </CardTitle>\n <CardDescription>Connected MCP servers providing tools</CardDescription>\n </CardHeader>\n <CardContent>\n {mcpConnectionIds.length > 0 ? (\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n {mcpConnectionIds.map((mcpId: string) => (\n <div\n key={mcpId}\n className=\"flex items-center gap-3 p-4 border border-border-subtle rounded-lg\"\n >\n <div className=\"p-2 bg-action-primary-bg/10 rounded-lg\">\n <Wrench size={18} className=\"text-primary\" />\n </div>\n <div>\n <p className=\"font-medium\">MCP Server</p>\n <p className=\"text-sm text-text-secondary font-mono\">{mcpId}</p>\n </div>\n </div>\n ))}\n </div>\n ) : (\n <p className=\"text-text-secondary\">No MCP servers connected</p>\n )}\n </CardContent>\n </Card>\n\n {workflowIds.length > 0 && (\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <Settings size={18} />\n Workflows\n </CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n {workflowIds.map((wfId: string) => (\n <div key={wfId} className=\"p-4 border border-border-subtle rounded-lg\">\n <p className=\"font-mono text-sm\">{wfId}</p>\n </div>\n ))}\n </div>\n </CardContent>\n </Card>\n )}\n </div>\n )}\n\n {/* Knowledge Tab */}\n {activeTab === 'knowledge' && (\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <BookOpen size={18} />\n Knowledge Bases\n </CardTitle>\n <CardDescription>Connected knowledge bases for RAG</CardDescription>\n </CardHeader>\n <CardContent>\n {knowledgeBaseIds.length > 0 ? (\n <div className=\"space-y-4\">\n {knowledgeBaseIds.map((kbId: string, index: number) => (\n <div\n key={index}\n className=\"p-4 border border-border-subtle rounded-lg space-y-2\"\n >\n <div className=\"flex items-center justify-between\">\n <p className=\"font-medium\">Knowledge Base</p>\n <Badge variant=\"outline\">#{index + 1}</Badge>\n </div>\n <p className=\"font-mono text-sm\">{kbId}</p>\n </div>\n ))}\n </div>\n ) : (\n <p className=\"text-text-secondary\">No knowledge bases connected</p>\n )}\n </CardContent>\n </Card>\n )}\n\n {/* Guardrails Tab */}\n {activeTab === 'guardrails' && (\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <Shield size={18} />\n Guardrails & Policies\n </CardTitle>\n <CardDescription>Security and policy configurations</CardDescription>\n </CardHeader>\n <CardContent>\n {metadata ? (\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n {Object.entries(metadata)\n .filter(([_, value]) => value)\n .map(([key, value]) => (\n <div key={key} className=\"p-4 border border-border-subtle rounded-lg\">\n <p className=\"text-sm text-text-secondary capitalize\">\n {key\n .replace('Id', '')\n .replace(/([A-Z])/g, ' $1')\n .trim()}\n </p>\n <p className=\"font-mono text-sm\">{String(value)}</p>\n </div>\n ))}\n </div>\n ) : (\n <p className=\"text-text-secondary\">No policy bindings configured</p>\n )}\n </CardContent>\n </Card>\n )}\n\n {/* A2A Tab */}\n {activeTab === 'a2a' && (\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <Share2 size={18} />\n A2A Configuration\n </CardTitle>\n <CardDescription>Agent-to-Agent communication settings</CardDescription>\n </CardHeader>\n <CardContent>\n <p className=\"text-text-secondary\">A2A is not enabled for this agent</p>\n </CardContent>\n </Card>\n )}\n\n {/* Versions Tab (BOFF-4381) */}\n {activeTab === 'versions' && agentId && (\n <VersionHistoryPanel\n agentId={agentId}\n draftVersionId={agent.draftVersionId}\n currentVersionId={agent.currentVersionId}\n onChanged={() => void refetchAgent()}\n />\n )}\n </div>\n </PageLayout>\n );\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AgentDetailPage.js","names":["_Fragment","AgentDetailPage","t","useTr","useParams","useBotlit","can","useBotmanorCan","agent","refetchAgent","useAgent","agentId","updateAgent","updateAgentResult","useUpdateAgent","deleteAgent","deleteAgentResult","useDeleteAgent","activeTab","setActiveTab","useState","approvalSettings","useAgentApprovalSettings","loading","PageLayout","EmptyState","Button","navigateTo","systemPrompt","llmModelId","temperature","maxTokens","mcpConnectionIds","knowledgeBaseIds","workflowIds","capabilities","tagIds","maxConcurrentExecutions","metadata","tabs","Settings","BarChart3","FileText","Brain","Wrench","BookOpen","Shield","ShieldCheck","Share2","History","ArrowLeft","StatusBadge","Badge","BotmanorPermissionGate","BOTMANOR_PERMISSIONS","toast","err","Edit","Play","Trash2","AssistantRuntimeSetupPanel","Fragment","AssistantWebsitePanel","AssistantChannelPanel","PagePurpose","tab","cn","NextSteps","AgentApprovalPanel","Card","CardHeader","CardTitle","CardContent","formatRelativeTime","GlassCard","cap","tag","CardDescription","MessageSquare","mcpId","wfId","index","kbId","_","value","key","AiOperationsPanel","VersionHistoryPanel"],"sources":["../../../src/botlit/pages/AgentDetailPage.tsx"],"sourcesContent":["/**\n * Agent Detail Page\n * @module botlit/pages\n *\n * Displays agent details using flat API fields from the real GraphQL backend.\n * Maps flat fields (systemPrompt, llmModelId, mcpConnectionIds, knowledgeBaseIds, capabilities[])\n * to a rich detail view with tabs.\n */\n\nimport type { FC, ReactNode } from 'react';\nimport { useState } from 'react';\nimport { useParams } from 'react-router';\nimport {\n ArrowLeft,\n Play,\n Settings,\n BarChart3,\n BookOpen,\n Wrench,\n Shield,\n Brain,\n MessageSquare,\n Edit,\n Share2,\n FileText,\n Trash2,\n History,\n ShieldCheck,\n} from 'lucide-react';\nimport { useTr } from '../../shared/hooks/useTr';\nimport { toast } from 'sonner';\nimport { PagePurpose, NextSteps, GlassCard } from '@burdenoff/fe-libs/ui';\nimport { PageLayout } from '../components/PageLayout';\nimport { Card, CardHeader, CardTitle, CardContent, CardDescription } from '../components/Card';\nimport { Button } from '../components/Button';\nimport { Badge, StatusBadge } from '../components/Badge';\nimport { EmptyState } from '../components/EmptyState';\nimport { VersionHistoryPanel } from '../components/VersionHistoryPanel';\nimport { AgentApprovalPanel } from '../components/AgentApprovalPanel';\nimport { useAgentApprovalSettings } from '../hooks/useAgentApprovals';\nimport { AssistantRuntimeSetupPanel } from '../components/AssistantRuntimeSetupPanel';\nimport { AssistantChannelPanel } from '../components/AssistantChannelPanel';\nimport { AssistantWebsitePanel } from '../components/AssistantWebsitePanel';\nimport { AiOperationsPanel } from '../components/AiOperationsPanel';\nimport { useAgent, useUpdateAgent, useDeleteAgent } from '../hooks/useAgents';\nimport { useBotlit } from '../providers/BotlitProvider';\nimport { formatRelativeTime } from '../utils/formatters';\nimport { cn } from '../utils/cn';\nimport { BOTMANOR_PERMISSIONS, BotmanorPermissionGate, useBotmanorCan } from '../permissions';\n\ntype TabType =\n | 'overview'\n | 'prompt'\n | 'llm'\n | 'tools'\n | 'knowledge'\n | 'guardrails'\n | 'aiOperations'\n | 'a2a'\n | 'versions'\n | 'assistant';\n\nexport const AgentDetailPage: FC = () => {\n const t = useTr();\n const { agentId } = useParams();\n const { navigateTo } = useBotlit();\n const can = useBotmanorCan();\n const { data: agent, loading, refetch: refetchAgent } = useAgent(agentId);\n const [updateAgent, updateAgentResult] = useUpdateAgent();\n const [deleteAgent, deleteAgentResult] = useDeleteAgent();\n const [activeTab, setActiveTab] = useState<TabType>('overview');\n // BOFF-9682: when the workspace requires activation approval, an agent that\n // has never been published goes live through a reviewer, not this button.\n const approvalSettings = useAgentApprovalSettings();\n\n if (loading) {\n return (\n <PageLayout title={t('botlit.common.loading', 'Loading...')}>\n <div className=\"h-96 bg-bg-sunken motion-safe:animate-vc-shimmer rounded-lg\" />\n </PageLayout>\n );\n }\n\n if (!agent) {\n return (\n <PageLayout title={t('botlit.agentDetail.notFound.title', 'Agent Not Found')}>\n <EmptyState\n illustration=\"empty-agents\"\n title={t('botlit.agentDetail.notFound.title', 'Agent Not Found')}\n description={t(\n 'botlit.agentDetail.notFound.description',\n \"The agent you're looking for doesn't exist.\"\n )}\n action={\n <Button onClick={() => navigateTo('agents')}>\n {t('botlit.agentDetail.notFound.backAction', 'Back to Agents')}\n </Button>\n }\n />\n </PageLayout>\n );\n }\n\n // `AgentRecord` declares every field the agent query selects — read directly.\n const systemPrompt = agent.systemPrompt || '';\n const llmModelId = agent.llmModelId || '';\n const temperature = agent.temperature;\n const maxTokens = agent.maxTokens;\n const mcpConnectionIds = agent.mcpConnectionIds ?? [];\n const knowledgeBaseIds = agent.knowledgeBaseIds ?? [];\n const workflowIds = agent.workflowIds ?? [];\n const capabilities = agent.capabilities ?? [];\n const tagIds = agent.tagIds ?? [];\n const maxConcurrentExecutions = agent.maxConcurrentExecutions || 10;\n const metadata = agent.metadata ?? null;\n\n const tabs: { id: TabType; label: string; icon: ReactNode }[] = [\n { id: 'assistant', label: 'Assistant setup', icon: <Settings size={16} /> },\n {\n id: 'overview',\n label: t('botlit.agentDetail.tabs.overview', 'Overview'),\n icon: <BarChart3 size={16} />,\n },\n {\n id: 'prompt',\n label: t('botlit.agentDetail.tabs.prompt', 'Prompt'),\n icon: <FileText size={16} />,\n },\n {\n id: 'llm',\n label: t('botlit.agentDetail.tabs.llmConfig', 'LLM Config'),\n icon: <Brain size={16} />,\n },\n { id: 'tools', label: t('botlit.agentDetail.tabs.tools', 'Tools'), icon: <Wrench size={16} /> },\n {\n id: 'knowledge',\n label: t('botlit.agentDetail.tabs.knowledge', 'Knowledge'),\n icon: <BookOpen size={16} />,\n },\n {\n id: 'guardrails',\n label: t('botlit.agentDetail.tabs.guardrails', 'Guardrails'),\n icon: <Shield size={16} />,\n },\n {\n id: 'aiOperations',\n label: t('botlit.agentDetail.tabs.aiOperations', 'AI Operations'),\n icon: <ShieldCheck size={16} />,\n },\n { id: 'a2a', label: t('botlit.agentDetail.tabs.a2a', 'A2A'), icon: <Share2 size={16} /> },\n {\n id: 'versions',\n label: t('botlit.agentDetail.tabs.versions', 'Versions'),\n icon: <History size={16} />,\n },\n ];\n\n return (\n <PageLayout\n title={\n <div className=\"flex items-center gap-3\">\n <Button variant=\"ghost\" size=\"icon\" onClick={() => navigateTo('agents')}>\n <ArrowLeft size={20} />\n </Button>\n <span className=\"text-3xl\">{'🤖'}</span>\n <div>\n <div className=\"flex items-center gap-2\">\n <span>{agent.name}</span>\n <StatusBadge status={agent.status} />\n <Badge variant=\"outline\">{agent.slug}</Badge>\n </div>\n <p className=\"text-sm font-normal text-text-secondary\">{agent.description}</p>\n </div>\n </div>\n }\n actions={\n <div className=\"flex gap-2\">\n {approvalSettings.data?.requireActivationApproval &&\n (agent.status === 'DRAFT' || agent.status === 'ARCHIVED') &&\n !agent.currentVersionId ? (\n <BotmanorPermissionGate permission={BOTMANOR_PERMISSIONS.AGENT_UPDATE}>\n <Button\n variant=\"default\"\n onClick={() => {\n setActiveTab('overview');\n requestAnimationFrame(() =>\n document\n .querySelector('[data-testid=\"agent-approval-panel\"]')\n ?.scrollIntoView({ behavior: 'smooth', block: 'start' })\n );\n }}\n >\n {t('botlit.agentApproval.requestAction', 'Request activation')}\n </Button>\n </BotmanorPermissionGate>\n ) : agent.status === 'DRAFT' || agent.status === 'ARCHIVED' ? (\n <BotmanorPermissionGate permission={BOTMANOR_PERMISSIONS.AGENT_UPDATE}>\n <Button\n variant=\"default\"\n isLoading={updateAgentResult.loading}\n onClick={async () => {\n try {\n if (!agentId) return;\n await updateAgent({ agentId, input: { status: 'ACTIVE' } });\n await refetchAgent();\n toast.success(\n `${t('botlit.agentDetail.activate.successPrefix', 'Agent')} \"${agent.name}\" ${t('botlit.agentDetail.activate.successSuffix', 'activated')}`\n );\n } catch (err: unknown) {\n toast.error(\n err instanceof Error\n ? err.message\n : t('botlit.agentDetail.activate.error', 'Failed to activate agent')\n );\n }\n }}\n >\n {t('botlit.agentDetail.actions.activate', 'Activate')}\n </Button>\n </BotmanorPermissionGate>\n ) : (\n <BotmanorPermissionGate permission={BOTMANOR_PERMISSIONS.AGENT_UPDATE}>\n <Button\n variant=\"outline\"\n isLoading={updateAgentResult.loading}\n onClick={async () => {\n try {\n if (!agentId) return;\n await updateAgent({ agentId, input: { status: 'DRAFT' } });\n await refetchAgent();\n toast.success(\n `${t('botlit.agentDetail.deactivate.successPrefix', 'Agent')} \"${agent.name}\" ${t('botlit.agentDetail.deactivate.successSuffix', 'deactivated')}`\n );\n } catch (err: unknown) {\n toast.error(\n err instanceof Error\n ? err.message\n : t('botlit.agentDetail.deactivate.error', 'Failed to deactivate agent')\n );\n }\n }}\n >\n {t('botlit.agentDetail.actions.deactivate', 'Deactivate')}\n </Button>\n </BotmanorPermissionGate>\n )}\n <BotmanorPermissionGate permission={BOTMANOR_PERMISSIONS.AGENT_UPDATE}>\n <Button\n variant=\"outline\"\n leftIcon={<Edit size={16} />}\n onClick={() => navigateTo(`agents/${agentId}/edit`)}\n >\n {t('botlit.agentDetail.actions.editAgent', 'Edit Agent')}\n </Button>\n </BotmanorPermissionGate>\n <BotmanorPermissionGate permission={BOTMANOR_PERMISSIONS.AGENT_EXECUTE}>\n <Button leftIcon={<Play size={16} />} onClick={() => navigateTo(`chat/${agentId}`)}>\n {t('botlit.agentDetail.actions.testAgent', 'Test Agent')}\n </Button>\n </BotmanorPermissionGate>\n <BotmanorPermissionGate permission={BOTMANOR_PERMISSIONS.AGENT_DELETE}>\n <Button\n variant=\"destructive\"\n leftIcon={<Trash2 size={16} />}\n isLoading={deleteAgentResult.loading}\n onClick={async () => {\n if (!agentId) return;\n if (\n !confirm(\n `${t('botlit.agentDetail.delete.confirmPrefix', 'Are you sure you want to delete')} \"${agent.name}\"? ${t('botlit.agentDetail.delete.confirmSuffix', 'This action cannot be undone.')}`\n )\n )\n return;\n try {\n await deleteAgent(agentId);\n toast.success(\n `${t('botlit.agentDetail.delete.successPrefix', 'Agent')} \"${agent.name}\" ${t('botlit.agentDetail.delete.successSuffix', 'deleted successfully')}`\n );\n navigateTo('agents');\n } catch (err: unknown) {\n toast.error(\n err instanceof Error\n ? err.message\n : t('botlit.agentDetail.delete.error', 'Failed to delete agent')\n );\n }\n }}\n >\n {t('botlit.common.delete', 'Delete')}\n </Button>\n </BotmanorPermissionGate>\n </div>\n }\n >\n <div className=\"space-y-6\">\n {activeTab === 'assistant' && agentId && (\n <div className=\"space-y-5\">\n {/* Each panel is setup work: runtime configuration needs update, and\n publishing (whose listings are publish-gated too) needs publish. */}\n {can(BOTMANOR_PERMISSIONS.AGENT_UPDATE) && (\n <AssistantRuntimeSetupPanel\n agentId={agentId}\n onConfigured={() => void refetchAgent()}\n />\n )}\n {can(BOTMANOR_PERMISSIONS.AGENT_PUBLISH) && (\n <>\n <AssistantWebsitePanel agentId={agentId} knowledgeBaseIds={knowledgeBaseIds} />\n <AssistantChannelPanel agentId={agentId} />\n </>\n )}\n {!can(BOTMANOR_PERMISSIONS.AGENT_UPDATE) &&\n !can(BOTMANOR_PERMISSIONS.AGENT_PUBLISH) && (\n <p role=\"status\" className=\"text-sm text-text-secondary\">\n {t(\n 'botlit.agentDetail.assistant.readOnly',\n 'Assistant setup and publishing are available to members who can edit or publish agents in this workspace.'\n )}\n </p>\n )}\n </div>\n )}\n <PagePurpose icon={<Brain size={18} />}>\n {t(\n 'botlit.agentDetail.purpose',\n 'This is the full configuration for a single agent — its prompt, model settings, the tools and knowledge it can use, its guardrails and how it talks to other agents. Use the tabs to inspect or change any part, and test the agent in chat to confirm it behaves the way you expect before going live.'\n )}\n </PagePurpose>\n\n {/* Tabs */}\n <div className=\"flex gap-1 border-b border-border-subtle overflow-x-auto\">\n {tabs.map((tab) => (\n <button\n key={tab.id}\n onClick={() => setActiveTab(tab.id)}\n className={cn(\n 'flex items-center gap-2 px-4 py-2 text-sm font-medium border-b-2 transition-colors whitespace-nowrap',\n activeTab === tab.id\n ? 'border-primary text-primary'\n : 'border-transparent text-text-secondary hover:text-text-primary'\n )}\n >\n {tab.icon}\n {tab.label}\n </button>\n ))}\n </div>\n\n {/* Overview Tab */}\n {activeTab === 'overview' && (\n <div className=\"space-y-6\">\n <NextSteps\n storageKey={`botlit-agent-${agentId}`}\n steps={[\n {\n id: 'test',\n label: t('botlit.agentDetail.nextSteps.test', 'Test the agent in chat'),\n description: t(\n 'botlit.agentDetail.nextSteps.testDesc',\n 'Send it a few real prompts to see how it responds.'\n ),\n icon: <Play size={16} />,\n onClick: () => navigateTo(`chat/${agentId}`),\n },\n {\n id: 'prompt',\n label: t('botlit.agentDetail.nextSteps.prompt', 'Refine the system prompt'),\n description: t(\n 'botlit.agentDetail.nextSteps.promptDesc',\n 'Tune its instructions and behaviour.'\n ),\n icon: <FileText size={16} />,\n onClick: () => setActiveTab('prompt'),\n },\n {\n id: 'tools',\n label: t('botlit.agentDetail.nextSteps.tools', 'Connect tools & knowledge'),\n description: t(\n 'botlit.agentDetail.nextSteps.toolsDesc',\n 'Give it MCP tools and knowledge bases to work with.'\n ),\n icon: <Wrench size={16} />,\n onClick: () => setActiveTab('tools'),\n },\n {\n id: 'activate',\n label: t('botlit.agentDetail.nextSteps.activate', 'Activate and attach to a bot'),\n description: t(\n 'botlit.agentDetail.nextSteps.activateDesc',\n 'Put it live so a bot can route conversations to it.'\n ),\n icon: <Share2 size={16} />,\n onClick: () => navigateTo(`agents/${agentId}/edit`),\n done: agent.status === 'ACTIVE',\n },\n ]}\n />\n {agentId && (\n <AgentApprovalPanel\n agentId={agentId}\n agentStatus={agent.status}\n onChanged={() => void refetchAgent()}\n />\n )}\n <div className=\"grid grid-cols-1 lg:grid-cols-3 gap-6\">\n {/* Quick Info */}\n <Card className=\"lg:col-span-1\">\n <CardHeader>\n <CardTitle>Details</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <div>\n <p className=\"text-sm text-text-secondary\">Status</p>\n <StatusBadge status={agent.status} />\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Type</p>\n <Badge variant=\"outline\">{agent.type}</Badge>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Visibility</p>\n <Badge variant=\"outline\">{agent.visibility}</Badge>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">LLM Model</p>\n <p className=\"font-medium font-mono text-sm\">\n {llmModelId || 'Not configured'}\n </p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">MCP Connections</p>\n <p className=\"font-medium\">{mcpConnectionIds.length} servers</p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Knowledge Bases</p>\n <p className=\"font-medium\">{knowledgeBaseIds.length} KBs</p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Max Concurrent</p>\n <p className=\"font-medium\">{maxConcurrentExecutions}</p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Executions</p>\n <p className=\"font-medium\">{agent.executionCount ?? 0}</p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Created</p>\n <p className=\"font-medium\">{formatRelativeTime(agent.createdAt)}</p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Updated</p>\n <p className=\"font-medium\">{formatRelativeTime(agent.updatedAt)}</p>\n </div>\n </CardContent>\n </Card>\n\n {/* Capabilities */}\n <GlassCard treatment=\"glass\" glow className=\"lg:col-span-2 p-6\">\n <h3 className=\"mb-4 text-lg font-semibold tracking-tight text-text-primary\">\n {t('botlit.agentDetail.capabilities.title', 'Capabilities')}\n </h3>\n <div>\n {capabilities.length > 0 ? (\n <div className=\"grid grid-cols-2 md:grid-cols-3 gap-4\">\n {capabilities.map((cap: string) => (\n <div\n key={cap}\n className=\"p-3 rounded-lg border border-green-500 bg-green-500/10\"\n >\n <p className=\"font-medium\">{cap}</p>\n <Badge variant=\"success\">\n {t('botlit.agentDetail.capabilities.enabled', 'Enabled')}\n </Badge>\n </div>\n ))}\n </div>\n ) : (\n <p className=\"text-text-secondary\">\n {t('botlit.agentDetail.capabilities.empty', 'No capabilities configured')}\n </p>\n )}\n </div>\n </GlassCard>\n\n {/* Tags */}\n {tagIds.length > 0 && (\n <Card className=\"lg:col-span-3\">\n <CardHeader>\n <CardTitle>{t('botlit.agentDetail.tags.title', 'Tags')}</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"flex flex-wrap gap-2\">\n {tagIds.map((tag: string) => (\n <Badge key={tag} variant=\"outline\">\n {tag}\n </Badge>\n ))}\n </div>\n </CardContent>\n </Card>\n )}\n </div>\n </div>\n )}\n\n {/* Prompt Tab */}\n {activeTab === 'prompt' && (\n <div className=\"space-y-6\">\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <FileText size={18} />\n {t('botlit.agentDetail.prompt.title', 'System Prompt')}\n </CardTitle>\n <CardDescription>\n {t(\n 'botlit.agentDetail.prompt.description',\n \"The system prompt that defines this agent's behavior\"\n )}\n </CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n {systemPrompt ? (\n <pre className=\"p-4 bg-bg-sunken rounded-lg text-sm whitespace-pre-wrap font-mono\">\n {systemPrompt}\n </pre>\n ) : (\n <p className=\"text-text-secondary\">\n {t('botlit.agentDetail.prompt.empty', 'No system prompt configured')}\n </p>\n )}\n </CardContent>\n </Card>\n </div>\n )}\n\n {/* LLM Config Tab */}\n {activeTab === 'llm' && (\n <div className=\"grid grid-cols-1 lg:grid-cols-2 gap-6\">\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <Brain size={18} />\n {t('botlit.agentDetail.llm.title', 'Model Configuration')}\n </CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <div>\n <p className=\"text-sm text-text-secondary\">LLM Model ID</p>\n <p className=\"font-medium font-mono\">{llmModelId || 'Not configured'}</p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Temperature</p>\n <p className=\"font-medium\">{temperature != null ? temperature : 'Default'}</p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Max Tokens</p>\n <p className=\"font-medium\">{maxTokens != null ? maxTokens : 'Default'}</p>\n </div>\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <MessageSquare size={18} />\n {t('botlit.agentDetail.executionLimits.title', 'Execution Limits')}\n </CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <div>\n <p className=\"text-sm text-text-secondary\">Max Concurrent Executions</p>\n <p className=\"font-medium\">{maxConcurrentExecutions}</p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Total Executions</p>\n <p className=\"font-medium\">{agent.executionCount ?? 0}</p>\n </div>\n {agent.lastExecutedAt && (\n <div>\n <p className=\"text-sm text-text-secondary\">Last Executed</p>\n <p className=\"font-medium\">{formatRelativeTime(agent.lastExecutedAt)}</p>\n </div>\n )}\n </CardContent>\n </Card>\n </div>\n )}\n\n {/* Tools Tab */}\n {activeTab === 'tools' && (\n <div className=\"space-y-6\">\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <Wrench size={18} />\n MCP Server Connections\n </CardTitle>\n <CardDescription>Connected MCP servers providing tools</CardDescription>\n </CardHeader>\n <CardContent>\n {mcpConnectionIds.length > 0 ? (\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n {mcpConnectionIds.map((mcpId: string) => (\n <div\n key={mcpId}\n className=\"flex items-center gap-3 p-4 border border-border-subtle rounded-lg\"\n >\n <div className=\"p-2 bg-action-primary-bg/10 rounded-lg\">\n <Wrench size={18} className=\"text-primary\" />\n </div>\n <div>\n <p className=\"font-medium\">MCP Server</p>\n <p className=\"text-sm text-text-secondary font-mono\">{mcpId}</p>\n </div>\n </div>\n ))}\n </div>\n ) : (\n <p className=\"text-text-secondary\">No MCP servers connected</p>\n )}\n </CardContent>\n </Card>\n\n {workflowIds.length > 0 && (\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <Settings size={18} />\n Workflows\n </CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n {workflowIds.map((wfId: string) => (\n <div key={wfId} className=\"p-4 border border-border-subtle rounded-lg\">\n <p className=\"font-mono text-sm\">{wfId}</p>\n </div>\n ))}\n </div>\n </CardContent>\n </Card>\n )}\n </div>\n )}\n\n {/* Knowledge Tab */}\n {activeTab === 'knowledge' && (\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <BookOpen size={18} />\n Knowledge Bases\n </CardTitle>\n <CardDescription>Connected knowledge bases for RAG</CardDescription>\n </CardHeader>\n <CardContent>\n {knowledgeBaseIds.length > 0 ? (\n <div className=\"space-y-4\">\n {knowledgeBaseIds.map((kbId: string, index: number) => (\n <div\n key={index}\n className=\"p-4 border border-border-subtle rounded-lg space-y-2\"\n >\n <div className=\"flex items-center justify-between\">\n <p className=\"font-medium\">Knowledge Base</p>\n <Badge variant=\"outline\">#{index + 1}</Badge>\n </div>\n <p className=\"font-mono text-sm\">{kbId}</p>\n </div>\n ))}\n </div>\n ) : (\n <p className=\"text-text-secondary\">No knowledge bases connected</p>\n )}\n </CardContent>\n </Card>\n )}\n\n {/* Guardrails Tab */}\n {activeTab === 'guardrails' && (\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <Shield size={18} />\n Guardrails & Policies\n </CardTitle>\n <CardDescription>Security and policy configurations</CardDescription>\n </CardHeader>\n <CardContent>\n {metadata ? (\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n {Object.entries(metadata)\n .filter(([_, value]) => value)\n .map(([key, value]) => (\n <div key={key} className=\"p-4 border border-border-subtle rounded-lg\">\n <p className=\"text-sm text-text-secondary capitalize\">\n {key\n .replace('Id', '')\n .replace(/([A-Z])/g, ' $1')\n .trim()}\n </p>\n <p className=\"font-mono text-sm\">{String(value)}</p>\n </div>\n ))}\n </div>\n ) : (\n <p className=\"text-text-secondary\">No policy bindings configured</p>\n )}\n </CardContent>\n </Card>\n )}\n\n {/* AI Operations Tab (supervisor findings for this agent, BOFF-3839) */}\n {activeTab === 'aiOperations' && agentId && (\n <AiOperationsPanel\n filter={{ subjectType: 'AGENT', subjectId: agentId }}\n description={t(\n 'botlit.agentDetail.aiOperationsDescription',\n 'What the supervisor flagged for this agent — drift, evidence and the recommended action.'\n )}\n />\n )}\n\n {/* A2A Tab */}\n {activeTab === 'a2a' && (\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <Share2 size={18} />\n A2A Configuration\n </CardTitle>\n <CardDescription>Agent-to-Agent communication settings</CardDescription>\n </CardHeader>\n <CardContent>\n <p className=\"text-text-secondary\">A2A is not enabled for this agent</p>\n </CardContent>\n </Card>\n )}\n\n {/* Versions Tab (BOFF-4381) */}\n {activeTab === 'versions' && agentId && (\n <VersionHistoryPanel\n agentId={agentId}\n draftVersionId={agent.draftVersionId}\n currentVersionId={agent.currentVersionId}\n onChanged={() => void refetchAgent()}\n />\n )}\n </div>\n </PageLayout>\n );\n};\n"],"mappings":"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"}
|
|
@@ -1,44 +1,44 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import { BOTMANOR_PERMISSIONS as
|
|
8
|
-
import { BotmanorPermissionGate as
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
1
|
+
import { isNative as e, nativeConfirm as t, nativeImpact as n, nativeNotify as r } from "../../utils/nativeBridge.js";
|
|
2
|
+
import { useTr as i } from "../../shared/hooks/useTr.js";
|
|
3
|
+
import { PageLayout as a } from "../components/PageLayout.js";
|
|
4
|
+
import { Card as o, CardContent as s } from "../components/Card.js";
|
|
5
|
+
import { Button as c } from "../components/Button.js";
|
|
6
|
+
import { Input as l } from "../components/Input.js";
|
|
7
|
+
import { BOTMANOR_PERMISSIONS as u } from "../permissions/botmanorPermissions.js";
|
|
8
|
+
import { BotmanorPermissionGate as d } from "../permissions/useBotmanorPermissions.js";
|
|
9
|
+
import { StatusBadge as f } from "../components/Badge.js";
|
|
10
|
+
import { EmptyState as p } from "../components/EmptyState.js";
|
|
11
|
+
import { ErrorState as m } from "../components/ErrorState.js";
|
|
12
|
+
import { useAgents as h, useDeleteAgent as g } from "../hooks/useAgents.js";
|
|
13
|
+
import { useBotlitStore as _ } from "../store/botlitStore.js";
|
|
14
|
+
import { useBotlit as v } from "../providers/BotlitProvider.js";
|
|
15
|
+
import { formatNumber as y, formatRelativeTime as b } from "../utils/formatters.js";
|
|
16
|
+
import { cn as x } from "../utils/cn.js";
|
|
11
17
|
import "../permissions/index.js";
|
|
12
|
-
import { Card as f, CardContent as p } from "../components/Card.js";
|
|
13
|
-
import { StatusBadge as m } from "../components/Badge.js";
|
|
14
|
-
import { isNative as h, nativeConfirm as g, nativeImpact as _, nativeNotify as v } from "../../utils/nativeBridge.js";
|
|
15
|
-
import { EmptyState as y } from "../components/EmptyState.js";
|
|
16
|
-
import { Input as b } from "../components/Input.js";
|
|
17
|
-
import { ErrorState as x } from "../components/ErrorState.js";
|
|
18
18
|
import { useState as S } from "react";
|
|
19
19
|
import { GlassCard as C, PagePurpose as w } from "@burdenoff/fe-libs/ui";
|
|
20
20
|
import { jsx as T, jsxs as E } from "react/jsx-runtime";
|
|
21
|
-
import { Link as
|
|
22
|
-
import { Bot as
|
|
21
|
+
import { Link as D, useParams as O } from "react-router";
|
|
22
|
+
import { Bot as ee, Grid3X3 as te, List as ne, MessageSquare as k, MoreVertical as A, Play as j, Plus as M, Search as N, Settings as P, ShieldCheck as F, Trash2 as I } from "lucide-react";
|
|
23
23
|
import { toast as L } from "sonner";
|
|
24
|
-
|
|
24
|
+
// src/botlit/pages/AgentsListPage.tsx
|
|
25
25
|
var R = () => {
|
|
26
|
-
let R =
|
|
26
|
+
let R = i(), { botId: z } = O(), { navigateTo: B, getPath: V } = v(), { data: H, loading: U, error: W, refetch: G } = h(), [K] = g(), { viewMode: q, setViewMode: J, agentFilter: Y, updateAgentFilter: X } = _(), [Z, Q] = S(null), re = (e) => {
|
|
27
27
|
X({ search: e.target.value });
|
|
28
|
-
}, ie = async (
|
|
29
|
-
let
|
|
28
|
+
}, ie = async (i) => {
|
|
29
|
+
let a = await t({
|
|
30
30
|
title: R("botlit.agentsList.delete.title", "Delete agent?"),
|
|
31
|
-
message: R("botlit.agentsList.delete.message", "Are you sure you want to delete \"{{name}}\"?", { name:
|
|
31
|
+
message: R("botlit.agentsList.delete.message", "Are you sure you want to delete \"{{name}}\"?", { name: i.name }),
|
|
32
32
|
okButtonTitle: R("botlit.agentsList.delete.okButton", "Delete"),
|
|
33
33
|
cancelButtonTitle: R("botlit.agentsList.delete.cancelButton", "Cancel")
|
|
34
34
|
});
|
|
35
|
-
if (
|
|
36
|
-
|
|
35
|
+
if (a === null ? confirm(R("botlit.agentsList.delete.message", "Are you sure you want to delete \"{{name}}\"?", { name: i.name })) : a) {
|
|
36
|
+
n("medium");
|
|
37
37
|
try {
|
|
38
|
-
await K(
|
|
39
|
-
} catch (
|
|
40
|
-
let
|
|
41
|
-
L.error(
|
|
38
|
+
await K(i.id), L.success(R("botlit.agentsList.delete.success", "Agent \"{{name}}\" deleted successfully", { name: i.name })), e() && r("success");
|
|
39
|
+
} catch (t) {
|
|
40
|
+
let n = t instanceof Error ? t.message : R("botlit.agentsList.delete.error", "Failed to delete agent");
|
|
41
|
+
L.error(n), e() && r("error");
|
|
42
42
|
}
|
|
43
43
|
}
|
|
44
44
|
Q(null);
|
|
@@ -49,19 +49,19 @@ var R = () => {
|
|
|
49
49
|
}
|
|
50
50
|
return !0;
|
|
51
51
|
});
|
|
52
|
-
return /* @__PURE__ */ T(
|
|
52
|
+
return /* @__PURE__ */ T(a, {
|
|
53
53
|
title: z ? R("botlit.agentsList.titleBot", "Bot Agents") : R("botlit.agentsList.title", "All Agents"),
|
|
54
54
|
description: z ? R("botlit.agentsList.descriptionBot", "Manage agents for this bot") : R("botlit.agentsList.description", "View and manage all your AI agents"),
|
|
55
55
|
actions: /* @__PURE__ */ E("div", {
|
|
56
56
|
className: "flex gap-2",
|
|
57
|
-
children: [/* @__PURE__ */ T(
|
|
57
|
+
children: [/* @__PURE__ */ T(c, {
|
|
58
58
|
variant: "outline",
|
|
59
59
|
leftIcon: /* @__PURE__ */ T(F, { size: 16 }),
|
|
60
60
|
onClick: () => B("agents/approvals"),
|
|
61
61
|
children: R("botlit.agentsList.actions.approvals", "Approvals")
|
|
62
|
-
}), /* @__PURE__ */ T(
|
|
63
|
-
permission:
|
|
64
|
-
children: /* @__PURE__ */ T(
|
|
62
|
+
}), /* @__PURE__ */ T(d, {
|
|
63
|
+
permission: u.AGENT_CREATE,
|
|
64
|
+
children: /* @__PURE__ */ T(c, {
|
|
65
65
|
leftIcon: /* @__PURE__ */ T(M, { size: 16 }),
|
|
66
66
|
onClick: () => B(z ? `bots/${z}/agents/new` : "agents/new"),
|
|
67
67
|
children: R("botlit.agentsList.actions.createAgent", "Create Agent")
|
|
@@ -72,7 +72,7 @@ var R = () => {
|
|
|
72
72
|
className: "space-y-6",
|
|
73
73
|
children: [
|
|
74
74
|
/* @__PURE__ */ T(w, {
|
|
75
|
-
icon: /* @__PURE__ */ T(
|
|
75
|
+
icon: /* @__PURE__ */ T(ee, { size: 18 }),
|
|
76
76
|
children: R("botlit.agentsList.purpose", "Agents are the reasoning workers behind your bots — each one bundles a model, a system prompt, tools and knowledge into a callable AI. Build an agent here to handle a specific job (answer support questions, summarise documents, run a workflow), then test it in chat and connect it to a bot or channel.")
|
|
77
77
|
}),
|
|
78
78
|
H.length > 0 ? /* @__PURE__ */ E("div", {
|
|
@@ -109,7 +109,7 @@ var R = () => {
|
|
|
109
109
|
children: R("botlit.agentsList.summary.executions", "Total executions")
|
|
110
110
|
}), /* @__PURE__ */ T("p", {
|
|
111
111
|
className: "mt-1 text-2xl font-semibold tabular-nums text-text-primary",
|
|
112
|
-
children:
|
|
112
|
+
children: y(H.reduce((e, t) => e + (t.executionCount ?? 0), 0))
|
|
113
113
|
})]
|
|
114
114
|
})
|
|
115
115
|
]
|
|
@@ -118,7 +118,7 @@ var R = () => {
|
|
|
118
118
|
className: "flex items-center justify-between gap-4",
|
|
119
119
|
children: [/* @__PURE__ */ E("div", {
|
|
120
120
|
className: "relative flex-1 max-w-md",
|
|
121
|
-
children: [/* @__PURE__ */ T(N, { className: "absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-text-secondary" }), /* @__PURE__ */ T(
|
|
121
|
+
children: [/* @__PURE__ */ T(N, { className: "absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-text-secondary" }), /* @__PURE__ */ T(l, {
|
|
122
122
|
placeholder: R("botlit.agentsList.searchPlaceholder", "Search agents..."),
|
|
123
123
|
value: Y.search || "",
|
|
124
124
|
onChange: re,
|
|
@@ -126,21 +126,21 @@ var R = () => {
|
|
|
126
126
|
})]
|
|
127
127
|
}), /* @__PURE__ */ E("div", {
|
|
128
128
|
className: "flex items-center gap-2",
|
|
129
|
-
children: [/* @__PURE__ */ T(
|
|
129
|
+
children: [/* @__PURE__ */ T(c, {
|
|
130
130
|
variant: q === "grid" ? "secondary" : "ghost",
|
|
131
131
|
size: "icon",
|
|
132
132
|
onClick: () => J("grid"),
|
|
133
|
-
children: /* @__PURE__ */ T(
|
|
134
|
-
}), /* @__PURE__ */ T(
|
|
133
|
+
children: /* @__PURE__ */ T(te, { size: 18 })
|
|
134
|
+
}), /* @__PURE__ */ T(c, {
|
|
135
135
|
variant: q === "list" ? "secondary" : "ghost",
|
|
136
136
|
size: "icon",
|
|
137
137
|
onClick: () => J("list"),
|
|
138
|
-
children: /* @__PURE__ */ T(
|
|
138
|
+
children: /* @__PURE__ */ T(ne, { size: 18 })
|
|
139
139
|
})]
|
|
140
140
|
})]
|
|
141
141
|
}),
|
|
142
142
|
U ? /* @__PURE__ */ T("div", {
|
|
143
|
-
className:
|
|
143
|
+
className: x("gap-4", q === "grid" ? "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3" : "flex flex-col"),
|
|
144
144
|
children: [
|
|
145
145
|
1,
|
|
146
146
|
2,
|
|
@@ -149,16 +149,16 @@ var R = () => {
|
|
|
149
149
|
5,
|
|
150
150
|
6
|
|
151
151
|
].map((e) => /* @__PURE__ */ T("div", { className: "h-48 bg-bg-sunken motion-safe:animate-vc-shimmer rounded-lg" }, e))
|
|
152
|
-
}) : W ? /* @__PURE__ */ T(
|
|
152
|
+
}) : W ? /* @__PURE__ */ T(m, {
|
|
153
153
|
resource: "agents",
|
|
154
154
|
error: W,
|
|
155
155
|
onRetry: () => void G()
|
|
156
156
|
}) : $.length > 0 ? q === "grid" ? /* @__PURE__ */ T("div", {
|
|
157
157
|
className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4",
|
|
158
|
-
children: $.map((e) => /* @__PURE__ */ T(
|
|
158
|
+
children: $.map((e) => /* @__PURE__ */ T(o, {
|
|
159
159
|
className: "group hover:shadow-md transition-shadow cursor-pointer relative",
|
|
160
160
|
onClick: () => B(`agents/${e.id}`),
|
|
161
|
-
children: /* @__PURE__ */ E(
|
|
161
|
+
children: /* @__PURE__ */ E(s, {
|
|
162
162
|
className: "pt-6",
|
|
163
163
|
children: [
|
|
164
164
|
/* @__PURE__ */ E("div", {
|
|
@@ -173,11 +173,11 @@ var R = () => {
|
|
|
173
173
|
children: e.name
|
|
174
174
|
}), /* @__PURE__ */ T("div", {
|
|
175
175
|
className: "flex items-center gap-2 mt-1",
|
|
176
|
-
children: /* @__PURE__ */ T(
|
|
176
|
+
children: /* @__PURE__ */ T(f, { status: e.status })
|
|
177
177
|
})] })]
|
|
178
178
|
}), /* @__PURE__ */ E("div", {
|
|
179
179
|
className: "relative",
|
|
180
|
-
children: [/* @__PURE__ */ T(
|
|
180
|
+
children: [/* @__PURE__ */ T(c, {
|
|
181
181
|
variant: "ghost",
|
|
182
182
|
size: "icon",
|
|
183
183
|
className: "opacity-0 group-hover:opacity-100 transition-opacity",
|
|
@@ -188,8 +188,8 @@ var R = () => {
|
|
|
188
188
|
}), Z === e.id && /* @__PURE__ */ E("div", {
|
|
189
189
|
className: "absolute right-0 top-full mt-1 w-48 bg-popover border border-border-subtle rounded-md shadow-lg z-10",
|
|
190
190
|
children: [
|
|
191
|
-
/* @__PURE__ */ T(
|
|
192
|
-
permission:
|
|
191
|
+
/* @__PURE__ */ T(d, {
|
|
192
|
+
permission: u.AGENT_EXECUTE,
|
|
193
193
|
children: /* @__PURE__ */ E("button", {
|
|
194
194
|
className: "w-full px-4 py-2 text-left text-sm hover:bg-accent flex items-center gap-2",
|
|
195
195
|
onClick: (t) => {
|
|
@@ -198,8 +198,8 @@ var R = () => {
|
|
|
198
198
|
children: [/* @__PURE__ */ T(j, { size: 16 }), R("botlit.agentsList.menu.testAgent", "Test Agent")]
|
|
199
199
|
})
|
|
200
200
|
}),
|
|
201
|
-
/* @__PURE__ */ T(
|
|
202
|
-
permission:
|
|
201
|
+
/* @__PURE__ */ T(d, {
|
|
202
|
+
permission: u.AGENT_UPDATE,
|
|
203
203
|
children: /* @__PURE__ */ E("button", {
|
|
204
204
|
className: "w-full px-4 py-2 text-left text-sm hover:bg-accent flex items-center gap-2",
|
|
205
205
|
onClick: (t) => {
|
|
@@ -208,8 +208,8 @@ var R = () => {
|
|
|
208
208
|
children: [/* @__PURE__ */ T(P, { size: 16 }), R("botlit.agentsList.menu.editAgent", "Edit Agent")]
|
|
209
209
|
})
|
|
210
210
|
}),
|
|
211
|
-
/* @__PURE__ */ T(
|
|
212
|
-
permission:
|
|
211
|
+
/* @__PURE__ */ T(d, {
|
|
212
|
+
permission: u.AGENT_DELETE,
|
|
213
213
|
children: /* @__PURE__ */ E("button", {
|
|
214
214
|
className: "w-full px-4 py-2 text-left text-sm hover:bg-accent text-status-error-text flex items-center gap-2",
|
|
215
215
|
onClick: (t) => {
|
|
@@ -232,7 +232,7 @@ var R = () => {
|
|
|
232
232
|
className: "flex items-center gap-1",
|
|
233
233
|
children: [
|
|
234
234
|
/* @__PURE__ */ T(k, { size: 14 }),
|
|
235
|
-
|
|
235
|
+
y(e.executionCount),
|
|
236
236
|
" ",
|
|
237
237
|
R("botlit.agentsList.card.executions", "executions")
|
|
238
238
|
]
|
|
@@ -245,11 +245,11 @@ var R = () => {
|
|
|
245
245
|
children: [
|
|
246
246
|
R("botlit.agentsList.card.created", "Created"),
|
|
247
247
|
" ",
|
|
248
|
-
|
|
248
|
+
b(e.createdAt)
|
|
249
249
|
]
|
|
250
|
-
}), /* @__PURE__ */ T(
|
|
251
|
-
permission:
|
|
252
|
-
children: /* @__PURE__ */ T(
|
|
250
|
+
}), /* @__PURE__ */ T(d, {
|
|
251
|
+
permission: u.AGENT_EXECUTE,
|
|
252
|
+
children: /* @__PURE__ */ T(c, {
|
|
253
253
|
size: "sm",
|
|
254
254
|
variant: "ghost",
|
|
255
255
|
leftIcon: /* @__PURE__ */ T(j, { size: 14 }),
|
|
@@ -265,10 +265,10 @@ var R = () => {
|
|
|
265
265
|
}, e.id))
|
|
266
266
|
}) : /* @__PURE__ */ T("div", {
|
|
267
267
|
className: "space-y-2",
|
|
268
|
-
children: $.map((e) => /* @__PURE__ */ T(
|
|
268
|
+
children: $.map((e) => /* @__PURE__ */ T(o, {
|
|
269
269
|
className: "hover:shadow-md transition-shadow cursor-pointer",
|
|
270
270
|
onClick: () => B(`agents/${e.id}`),
|
|
271
|
-
children: /* @__PURE__ */ T(
|
|
271
|
+
children: /* @__PURE__ */ T(s, {
|
|
272
272
|
className: "py-4",
|
|
273
273
|
children: /* @__PURE__ */ E("div", {
|
|
274
274
|
className: "flex items-center justify-between",
|
|
@@ -282,7 +282,7 @@ var R = () => {
|
|
|
282
282
|
children: [/* @__PURE__ */ T("h3", {
|
|
283
283
|
className: "font-semibold text-text-primary",
|
|
284
284
|
children: e.name
|
|
285
|
-
}), /* @__PURE__ */ T(
|
|
285
|
+
}), /* @__PURE__ */ T(f, { status: e.status })]
|
|
286
286
|
}), /* @__PURE__ */ T("p", {
|
|
287
287
|
className: "text-sm text-text-secondary line-clamp-1",
|
|
288
288
|
children: e.description
|
|
@@ -290,15 +290,15 @@ var R = () => {
|
|
|
290
290
|
}), /* @__PURE__ */ E("div", {
|
|
291
291
|
className: "flex items-center gap-4 text-sm text-text-secondary",
|
|
292
292
|
children: [
|
|
293
|
-
/* @__PURE__ */ E("span", { children: [
|
|
294
|
-
/* @__PURE__ */ T("span", { children:
|
|
295
|
-
/* @__PURE__ */ T(
|
|
296
|
-
permission:
|
|
297
|
-
children: /* @__PURE__ */ T(
|
|
293
|
+
/* @__PURE__ */ E("span", { children: [y(e.executionCount), " executions"] }),
|
|
294
|
+
/* @__PURE__ */ T("span", { children: b(e.createdAt) }),
|
|
295
|
+
/* @__PURE__ */ T(d, {
|
|
296
|
+
permission: u.AGENT_EXECUTE,
|
|
297
|
+
children: /* @__PURE__ */ T(c, {
|
|
298
298
|
variant: "outline",
|
|
299
299
|
size: "sm",
|
|
300
300
|
leftIcon: /* @__PURE__ */ T(j, { size: 14 }),
|
|
301
|
-
children: /* @__PURE__ */ T(
|
|
301
|
+
children: /* @__PURE__ */ T(D, {
|
|
302
302
|
to: V(`agents/${e.id}/chat`),
|
|
303
303
|
children: "Test"
|
|
304
304
|
})
|
|
@@ -309,13 +309,13 @@ var R = () => {
|
|
|
309
309
|
})
|
|
310
310
|
})
|
|
311
311
|
}, e.id))
|
|
312
|
-
}) : /* @__PURE__ */ T(
|
|
312
|
+
}) : /* @__PURE__ */ T(p, {
|
|
313
313
|
illustration: "empty-agents",
|
|
314
314
|
title: R("botlit.agentsList.empty.title", "No agents yet"),
|
|
315
315
|
description: R("botlit.agentsList.empty.description", "Create your first AI agent to start building intelligent automations."),
|
|
316
|
-
action: /* @__PURE__ */ T(
|
|
317
|
-
permission:
|
|
318
|
-
children: /* @__PURE__ */ T(
|
|
316
|
+
action: /* @__PURE__ */ T(d, {
|
|
317
|
+
permission: u.AGENT_CREATE,
|
|
318
|
+
children: /* @__PURE__ */ T(c, {
|
|
319
319
|
leftIcon: /* @__PURE__ */ T(M, { size: 16 }),
|
|
320
320
|
onClick: () => B(z ? `bots/${z}/agents/new` : "agents/new"),
|
|
321
321
|
children: R("botlit.agentsList.actions.createAgent", "Create Agent")
|
|
@@ -326,7 +326,6 @@ var R = () => {
|
|
|
326
326
|
})
|
|
327
327
|
});
|
|
328
328
|
};
|
|
329
|
-
//#endregion
|
|
330
329
|
export { R as AgentsListPage };
|
|
331
330
|
|
|
332
331
|
//# sourceMappingURL=AgentsListPage.js.map
|