@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":"DashboardPage.js","names":[],"sources":["../../../src/botlit/pages/DashboardPage.tsx"],"sourcesContent":["/**\n * Dashboard Page\n * @module botlit/pages\n */\n\nimport type { FC } from 'react';\nimport { Link } from 'react-router';\nimport { AppWindow, Bot, BookOpen, Zap, ArrowRight, Plus } from 'lucide-react';\nimport { useTr } from '../../shared/hooks/useTr';\nimport { GradientText, GlassCard, PagePurpose } from '@burdenoff/fe-libs/ui';\nimport { PageLayout } from '../components/PageLayout';\nimport { Card, CardHeader, CardTitle, CardContent } from '../components/Card';\nimport { Button } from '../components/Button';\nimport { StatusBadge } from '../components/Badge';\nimport { useBots } from '../hooks/useBots';\nimport { useAgents } from '../hooks/useAgents';\nimport { useBotlit } from '../providers/BotlitProvider';\nimport { formatNumber } from '../utils/formatters';\nimport { BOTMANOR_PERMISSIONS, BotmanorPermissionGate } from '../permissions';\n\nexport const DashboardPage: FC = () => {\n const t = useTr();\n const { currentUser, navigateTo, getPath } = useBotlit();\n const { data: bots, loading: botsLoading } = useBots();\n const { data: agents, loading: agentsLoading } = useAgents();\n\n const stats = [\n {\n label: t('botlit.dashboard.stats.totalBots', 'Total Bots'),\n value: bots?.length || 0,\n icon: <AppWindow className=\"h-5 w-5\" />,\n hero: true,\n },\n {\n label: t('botlit.dashboard.stats.activeAgents', 'Active Agents'),\n value: agents?.filter((a: { status: string }) => a.status === 'ACTIVE').length || 0,\n icon: <Bot className=\"h-5 w-5\" />,\n hero: false,\n },\n ];\n\n const firstName = currentUser?.name ? currentUser.name.split(' ')[0] : '';\n\n return (\n <PageLayout\n hero\n title={\n <>\n {t('botlit.dashboard.title', 'Welcome back')}\n {firstName ? (\n <>\n , <GradientText>{firstName}</GradientText>\n </>\n ) : null}\n </>\n }\n description={t(\n 'botlit.dashboard.description',\n \"Here's an overview of your AI agents and bots\"\n )}\n actions={\n <div className=\"flex gap-2\">\n <BotmanorPermissionGate permission={BOTMANOR_PERMISSIONS.APP_CREATE}>\n <Button\n variant=\"outline\"\n leftIcon={<Plus size={16} />}\n onClick={() => navigateTo('bots/new')}\n >\n {t('botlit.dashboard.actions.newBot', 'New Bot')}\n </Button>\n </BotmanorPermissionGate>\n <BotmanorPermissionGate permission={BOTMANOR_PERMISSIONS.AGENT_CREATE}>\n <Button leftIcon={<Bot size={16} />} onClick={() => navigateTo('agents/new')}>\n {t('botlit.dashboard.actions.createAgent', 'Create Agent')}\n </Button>\n </BotmanorPermissionGate>\n </div>\n }\n >\n <div className=\"space-y-6\">\n <PagePurpose icon={<Zap size={18} />}>\n {t(\n 'botlit.dashboard.purpose',\n 'This is your home base — a quick pulse on every bot and agent in your workspace. Glance at the headline numbers, jump back into recent work, and use the quick actions below to start something new. If you are just getting started, create your first agent and connect it to a bot.'\n )}\n </PagePurpose>\n\n {/* Stats Grid */}\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n {stats.map((stat) => (\n <Card key={stat.label} treatment={stat.hero ? 'glass' : 'metric'} glow={stat.hero}>\n <CardContent className=\"pt-6\">\n <div className=\"flex items-center gap-4\">\n <div className=\"p-3 rounded-lg bg-[var(--color-accent-soft)] text-text-primary [&>svg]:text-text-primary\">\n {stat.icon}\n </div>\n <div>\n <p className=\"text-2xl font-bold text-text-primary tabular-nums\">\n {stat.value}\n </p>\n <p className=\"text-sm text-text-secondary\">{stat.label}</p>\n </div>\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n\n {/* Main Content Grid */}\n <div className=\"grid grid-cols-1 lg:grid-cols-2 gap-6\">\n {/* Recent Bots */}\n <Card treatment=\"insight\">\n <CardHeader className=\"flex flex-row items-center justify-between\">\n <CardTitle>{t('botlit.dashboard.recentBots.title', 'Recent Bots')}</CardTitle>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n rightIcon={<ArrowRight size={16} />}\n onClick={() => navigateTo('bots')}\n >\n {t('botlit.common.viewAll', 'View All')}\n </Button>\n </CardHeader>\n <CardContent>\n {botsLoading ? (\n <div className=\"space-y-3\">\n {[1, 2, 3].map((i) => (\n <div\n key={i}\n className=\"h-16 bg-bg-sunken rounded-lg motion-safe:animate-vc-shimmer\"\n />\n ))}\n </div>\n ) : bots && bots.length > 0 ? (\n <div className=\"space-y-3\">\n {bots.slice(0, 4).map((bot) => (\n <Link\n key={bot.id}\n to={getPath(`bots/${bot.id}`)}\n className=\"flex items-center justify-between p-3 rounded-lg border border-border-seam hover:border-border-strong hover:bg-accent transition-colors\"\n >\n <div className=\"flex items-center gap-3\">\n <span className=\"text-2xl\">{bot.icon || '🤖'}</span>\n <div>\n <p className=\"font-medium text-text-primary\">{bot.name}</p>\n <p className=\"text-xs text-text-secondary\">\n {bot.executionCount || 0} {t('botlit.common.executions', 'executions')}\n </p>\n </div>\n </div>\n <StatusBadge status={bot.status} />\n </Link>\n ))}\n </div>\n ) : (\n <div className=\"text-center py-8 text-text-secondary\">\n <AppWindow className=\"h-8 w-8 mx-auto mb-2 opacity-50\" />\n <p>{t('botlit.dashboard.recentBots.emptyTitle', 'No bots yet')}</p>\n <BotmanorPermissionGate permission={BOTMANOR_PERMISSIONS.APP_CREATE}>\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"mt-3\"\n onClick={() => navigateTo('bots/new')}\n >\n {t('botlit.dashboard.recentBots.emptyAction', 'Create your first bot')}\n </Button>\n </BotmanorPermissionGate>\n </div>\n )}\n </CardContent>\n </Card>\n\n {/* Active Agents */}\n <Card treatment=\"insight\">\n <CardHeader className=\"flex flex-row items-center justify-between\">\n <CardTitle>{t('botlit.dashboard.activeAgents.title', 'Active Agents')}</CardTitle>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n rightIcon={<ArrowRight size={16} />}\n onClick={() => navigateTo('agents')}\n >\n {t('botlit.common.viewAll', 'View All')}\n </Button>\n </CardHeader>\n <CardContent>\n {agentsLoading ? (\n <div className=\"space-y-3\">\n {[1, 2, 3].map((i) => (\n <div\n key={i}\n className=\"h-16 bg-bg-sunken rounded-lg motion-safe:animate-vc-shimmer\"\n />\n ))}\n </div>\n ) : agents && agents.length > 0 ? (\n <div className=\"space-y-3\">\n {agents\n .filter((a) => a.status === 'ACTIVE')\n .slice(0, 4)\n .map((agent) => (\n <Link\n key={agent.id}\n to={getPath(`agents/${agent.id}`)}\n className=\"flex items-center justify-between p-3 rounded-lg border border-border-seam hover:border-border-strong hover:bg-accent transition-colors\"\n >\n <div className=\"flex items-center gap-3\">\n <span className=\"relative text-2xl\">\n 🤖\n <span className=\"absolute -right-0.5 -top-0.5 size-2 rounded-full bg-status-success-text motion-safe:animate-vc-glow-pulse\" />\n </span>\n <div>\n <p className=\"font-medium text-text-primary\">{agent.name}</p>\n <p className=\"text-xs text-text-secondary\">\n {formatNumber(agent.executionCount ?? 0)}{' '}\n {t('botlit.common.executions', 'executions')}\n </p>\n </div>\n </div>\n </Link>\n ))}\n </div>\n ) : (\n <div className=\"text-center py-8 text-text-secondary\">\n <Bot className=\"h-8 w-8 mx-auto mb-2 opacity-50\" />\n <p>{t('botlit.dashboard.activeAgents.emptyTitle', 'No active agents')}</p>\n <BotmanorPermissionGate permission={BOTMANOR_PERMISSIONS.AGENT_CREATE}>\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"mt-3\"\n onClick={() => navigateTo('agents/new')}\n >\n {t('botlit.dashboard.activeAgents.emptyAction', 'Create your first agent')}\n </Button>\n </BotmanorPermissionGate>\n </div>\n )}\n </CardContent>\n </Card>\n </div>\n\n {/* Quick Actions */}\n <GlassCard treatment=\"plain\" className=\"border-border-seam p-6\">\n <h2 className=\"text-lg font-semibold tracking-tight text-text-primary\">\n {t('botlit.dashboard.quickActions.title', 'Quick Actions')}\n </h2>\n <div className=\"mt-4 grid grid-cols-2 md:grid-cols-4 gap-4\">\n <Link\n to={getPath('bots/new')}\n className=\"flex flex-col items-center gap-2 p-4 rounded-card border border-border-seam bg-bg-surface hover:border-border-strong hover:shadow-elevation-2 transition-[box-shadow,border-color]\"\n >\n <AppWindow className=\"h-8 w-8 text-text-secondary\" />\n <span className=\"text-sm font-medium\">\n {t('botlit.dashboard.quickActions.createBot', 'Create Bot')}\n </span>\n </Link>\n <Link\n to={getPath('agents/new')}\n className=\"flex flex-col items-center gap-2 p-4 rounded-card border border-border-seam bg-bg-surface hover:border-border-strong hover:shadow-elevation-2 transition-[box-shadow,border-color]\"\n >\n <Bot className=\"h-8 w-8 text-text-secondary\" />\n <span className=\"text-sm font-medium\">\n {t('botlit.dashboard.quickActions.buildAgent', 'Build Agent')}\n </span>\n </Link>\n <Link\n to={getPath('knowledge/new')}\n className=\"flex flex-col items-center gap-2 p-4 rounded-card border border-border-seam bg-bg-surface hover:border-border-strong hover:shadow-elevation-2 transition-[box-shadow,border-color]\"\n >\n <BookOpen className=\"h-8 w-8 text-text-secondary\" />\n <span className=\"text-sm font-medium\">\n {t('botlit.dashboard.quickActions.addKnowledge', 'Add Knowledge')}\n </span>\n </Link>\n <a\n href=\"/conversations\"\n className=\"flex flex-col items-center gap-2 p-4 rounded-card border border-border-seam bg-bg-surface hover:border-border-strong hover:shadow-elevation-2 transition-[box-shadow,border-color]\"\n >\n <Zap className=\"h-8 w-8 text-text-secondary\" />\n <span className=\"text-sm font-medium\">\n {t('botlit.dashboard.quickActions.quickChat', 'Quick Chat')}\n </span>\n </a>\n </div>\n </GlassCard>\n </div>\n </PageLayout>\n );\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DashboardPage.js","names":["_Fragment","DashboardPage","t","useTr","useBotlit","bots","botsLoading","useBots","agents","agentsLoading","useAgents","stats","AppWindow","a","Bot","firstName","currentUser","PageLayout","Fragment","GradientText","BotmanorPermissionGate","BOTMANOR_PERMISSIONS","Button","Plus","navigateTo","PagePurpose","Zap","Card","stat","CardContent","CardHeader","CardTitle","ArrowRight","i","Link","getPath","bot","StatusBadge","agent","formatNumber","GlassCard","BookOpen"],"sources":["../../../src/botlit/pages/DashboardPage.tsx"],"sourcesContent":["/**\n * Dashboard Page\n * @module botlit/pages\n */\n\nimport type { FC } from 'react';\nimport { Link } from 'react-router';\nimport { AppWindow, Bot, BookOpen, Zap, ArrowRight, Plus } from 'lucide-react';\nimport { useTr } from '../../shared/hooks/useTr';\nimport { GradientText, GlassCard, PagePurpose } from '@burdenoff/fe-libs/ui';\nimport { PageLayout } from '../components/PageLayout';\nimport { Card, CardHeader, CardTitle, CardContent } from '../components/Card';\nimport { Button } from '../components/Button';\nimport { StatusBadge } from '../components/Badge';\nimport { useBots } from '../hooks/useBots';\nimport { useAgents } from '../hooks/useAgents';\nimport { useBotlit } from '../providers/BotlitProvider';\nimport { formatNumber } from '../utils/formatters';\nimport { BOTMANOR_PERMISSIONS, BotmanorPermissionGate } from '../permissions';\n\nexport const DashboardPage: FC = () => {\n const t = useTr();\n const { currentUser, navigateTo, getPath } = useBotlit();\n const { data: bots, loading: botsLoading } = useBots();\n const { data: agents, loading: agentsLoading } = useAgents();\n\n const stats = [\n {\n label: t('botlit.dashboard.stats.totalBots', 'Total Bots'),\n value: bots?.length || 0,\n icon: <AppWindow className=\"h-5 w-5\" />,\n hero: true,\n },\n {\n label: t('botlit.dashboard.stats.activeAgents', 'Active Agents'),\n value: agents?.filter((a: { status: string }) => a.status === 'ACTIVE').length || 0,\n icon: <Bot className=\"h-5 w-5\" />,\n hero: false,\n },\n ];\n\n const firstName = currentUser?.name ? currentUser.name.split(' ')[0] : '';\n\n return (\n <PageLayout\n hero\n title={\n <>\n {t('botlit.dashboard.title', 'Welcome back')}\n {firstName ? (\n <>\n , <GradientText>{firstName}</GradientText>\n </>\n ) : null}\n </>\n }\n description={t(\n 'botlit.dashboard.description',\n \"Here's an overview of your AI agents and bots\"\n )}\n actions={\n <div className=\"flex gap-2\">\n <BotmanorPermissionGate permission={BOTMANOR_PERMISSIONS.APP_CREATE}>\n <Button\n variant=\"outline\"\n leftIcon={<Plus size={16} />}\n onClick={() => navigateTo('bots/new')}\n >\n {t('botlit.dashboard.actions.newBot', 'New Bot')}\n </Button>\n </BotmanorPermissionGate>\n <BotmanorPermissionGate permission={BOTMANOR_PERMISSIONS.AGENT_CREATE}>\n <Button leftIcon={<Bot size={16} />} onClick={() => navigateTo('agents/new')}>\n {t('botlit.dashboard.actions.createAgent', 'Create Agent')}\n </Button>\n </BotmanorPermissionGate>\n </div>\n }\n >\n <div className=\"space-y-6\">\n <PagePurpose icon={<Zap size={18} />}>\n {t(\n 'botlit.dashboard.purpose',\n 'This is your home base — a quick pulse on every bot and agent in your workspace. Glance at the headline numbers, jump back into recent work, and use the quick actions below to start something new. If you are just getting started, create your first agent and connect it to a bot.'\n )}\n </PagePurpose>\n\n {/* Stats Grid */}\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n {stats.map((stat) => (\n <Card key={stat.label} treatment={stat.hero ? 'glass' : 'metric'} glow={stat.hero}>\n <CardContent className=\"pt-6\">\n <div className=\"flex items-center gap-4\">\n <div className=\"p-3 rounded-lg bg-[var(--color-accent-soft)] text-text-primary [&>svg]:text-text-primary\">\n {stat.icon}\n </div>\n <div>\n <p className=\"text-2xl font-bold text-text-primary tabular-nums\">\n {stat.value}\n </p>\n <p className=\"text-sm text-text-secondary\">{stat.label}</p>\n </div>\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n\n {/* Main Content Grid */}\n <div className=\"grid grid-cols-1 lg:grid-cols-2 gap-6\">\n {/* Recent Bots */}\n <Card treatment=\"insight\">\n <CardHeader className=\"flex flex-row items-center justify-between\">\n <CardTitle>{t('botlit.dashboard.recentBots.title', 'Recent Bots')}</CardTitle>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n rightIcon={<ArrowRight size={16} />}\n onClick={() => navigateTo('bots')}\n >\n {t('botlit.common.viewAll', 'View All')}\n </Button>\n </CardHeader>\n <CardContent>\n {botsLoading ? (\n <div className=\"space-y-3\">\n {[1, 2, 3].map((i) => (\n <div\n key={i}\n className=\"h-16 bg-bg-sunken rounded-lg motion-safe:animate-vc-shimmer\"\n />\n ))}\n </div>\n ) : bots && bots.length > 0 ? (\n <div className=\"space-y-3\">\n {bots.slice(0, 4).map((bot) => (\n <Link\n key={bot.id}\n to={getPath(`bots/${bot.id}`)}\n className=\"flex items-center justify-between p-3 rounded-lg border border-border-seam hover:border-border-strong hover:bg-accent transition-colors\"\n >\n <div className=\"flex items-center gap-3\">\n <span className=\"text-2xl\">{bot.icon || '🤖'}</span>\n <div>\n <p className=\"font-medium text-text-primary\">{bot.name}</p>\n <p className=\"text-xs text-text-secondary\">\n {bot.executionCount || 0} {t('botlit.common.executions', 'executions')}\n </p>\n </div>\n </div>\n <StatusBadge status={bot.status} />\n </Link>\n ))}\n </div>\n ) : (\n <div className=\"text-center py-8 text-text-secondary\">\n <AppWindow className=\"h-8 w-8 mx-auto mb-2 opacity-50\" />\n <p>{t('botlit.dashboard.recentBots.emptyTitle', 'No bots yet')}</p>\n <BotmanorPermissionGate permission={BOTMANOR_PERMISSIONS.APP_CREATE}>\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"mt-3\"\n onClick={() => navigateTo('bots/new')}\n >\n {t('botlit.dashboard.recentBots.emptyAction', 'Create your first bot')}\n </Button>\n </BotmanorPermissionGate>\n </div>\n )}\n </CardContent>\n </Card>\n\n {/* Active Agents */}\n <Card treatment=\"insight\">\n <CardHeader className=\"flex flex-row items-center justify-between\">\n <CardTitle>{t('botlit.dashboard.activeAgents.title', 'Active Agents')}</CardTitle>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n rightIcon={<ArrowRight size={16} />}\n onClick={() => navigateTo('agents')}\n >\n {t('botlit.common.viewAll', 'View All')}\n </Button>\n </CardHeader>\n <CardContent>\n {agentsLoading ? (\n <div className=\"space-y-3\">\n {[1, 2, 3].map((i) => (\n <div\n key={i}\n className=\"h-16 bg-bg-sunken rounded-lg motion-safe:animate-vc-shimmer\"\n />\n ))}\n </div>\n ) : agents && agents.length > 0 ? (\n <div className=\"space-y-3\">\n {agents\n .filter((a) => a.status === 'ACTIVE')\n .slice(0, 4)\n .map((agent) => (\n <Link\n key={agent.id}\n to={getPath(`agents/${agent.id}`)}\n className=\"flex items-center justify-between p-3 rounded-lg border border-border-seam hover:border-border-strong hover:bg-accent transition-colors\"\n >\n <div className=\"flex items-center gap-3\">\n <span className=\"relative text-2xl\">\n 🤖\n <span className=\"absolute -right-0.5 -top-0.5 size-2 rounded-full bg-status-success-text motion-safe:animate-vc-glow-pulse\" />\n </span>\n <div>\n <p className=\"font-medium text-text-primary\">{agent.name}</p>\n <p className=\"text-xs text-text-secondary\">\n {formatNumber(agent.executionCount ?? 0)}{' '}\n {t('botlit.common.executions', 'executions')}\n </p>\n </div>\n </div>\n </Link>\n ))}\n </div>\n ) : (\n <div className=\"text-center py-8 text-text-secondary\">\n <Bot className=\"h-8 w-8 mx-auto mb-2 opacity-50\" />\n <p>{t('botlit.dashboard.activeAgents.emptyTitle', 'No active agents')}</p>\n <BotmanorPermissionGate permission={BOTMANOR_PERMISSIONS.AGENT_CREATE}>\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"mt-3\"\n onClick={() => navigateTo('agents/new')}\n >\n {t('botlit.dashboard.activeAgents.emptyAction', 'Create your first agent')}\n </Button>\n </BotmanorPermissionGate>\n </div>\n )}\n </CardContent>\n </Card>\n </div>\n\n {/* Quick Actions */}\n <GlassCard treatment=\"plain\" className=\"border-border-seam p-6\">\n <h2 className=\"text-lg font-semibold tracking-tight text-text-primary\">\n {t('botlit.dashboard.quickActions.title', 'Quick Actions')}\n </h2>\n <div className=\"mt-4 grid grid-cols-2 md:grid-cols-4 gap-4\">\n <Link\n to={getPath('bots/new')}\n className=\"flex flex-col items-center gap-2 p-4 rounded-card border border-border-seam bg-bg-surface hover:border-border-strong hover:shadow-elevation-2 transition-[box-shadow,border-color]\"\n >\n <AppWindow className=\"h-8 w-8 text-text-secondary\" />\n <span className=\"text-sm font-medium\">\n {t('botlit.dashboard.quickActions.createBot', 'Create Bot')}\n </span>\n </Link>\n <Link\n to={getPath('agents/new')}\n className=\"flex flex-col items-center gap-2 p-4 rounded-card border border-border-seam bg-bg-surface hover:border-border-strong hover:shadow-elevation-2 transition-[box-shadow,border-color]\"\n >\n <Bot className=\"h-8 w-8 text-text-secondary\" />\n <span className=\"text-sm font-medium\">\n {t('botlit.dashboard.quickActions.buildAgent', 'Build Agent')}\n </span>\n </Link>\n <Link\n to={getPath('knowledge/new')}\n className=\"flex flex-col items-center gap-2 p-4 rounded-card border border-border-seam bg-bg-surface hover:border-border-strong hover:shadow-elevation-2 transition-[box-shadow,border-color]\"\n >\n <BookOpen className=\"h-8 w-8 text-text-secondary\" />\n <span className=\"text-sm font-medium\">\n {t('botlit.dashboard.quickActions.addKnowledge', 'Add Knowledge')}\n </span>\n </Link>\n <a\n href=\"/conversations\"\n className=\"flex flex-col items-center gap-2 p-4 rounded-card border border-border-seam bg-bg-surface hover:border-border-strong hover:shadow-elevation-2 transition-[box-shadow,border-color]\"\n >\n <Zap className=\"h-8 w-8 text-text-secondary\" />\n <span className=\"text-sm font-medium\">\n {t('botlit.dashboard.quickActions.quickChat', 'Quick Chat')}\n </span>\n </a>\n </div>\n </GlassCard>\n </div>\n </PageLayout>\n );\n};\n"],"mappings":"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"}
|
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
import { useBotlit as e } from "../providers/BotlitProvider.js";
|
|
2
|
-
import {
|
|
3
|
-
import { BOTMANOR_PERMISSIONS as
|
|
4
|
-
import { BotmanorPermissionGate as
|
|
5
|
-
import { PageLayout as
|
|
6
|
-
import {
|
|
7
|
-
import "../
|
|
8
|
-
import {
|
|
2
|
+
import { isNative as t, nativeCopyText as n, nativeToast as r } from "../../utils/nativeBridge.js";
|
|
3
|
+
import { BOTMANOR_PERMISSIONS as i } from "../permissions/botmanorPermissions.js";
|
|
4
|
+
import { BotmanorPermissionGate as a } from "../permissions/useBotmanorPermissions.js";
|
|
5
|
+
import { PageLayout as o } from "../components/PageLayout.js";
|
|
6
|
+
import { EmptyState as s } from "../components/EmptyState.js";
|
|
7
|
+
import { Card as c, CardContent as l, CardDescription as u, CardHeader as d, CardTitle as f } from "../components/Card.js";
|
|
8
|
+
import { Button as p } from "../components/Button.js";
|
|
9
9
|
import { Badge as m } from "../components/Badge.js";
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import { toUnion as
|
|
14
|
-
import { useCreateExecution as x, useExecution as S } from "../hooks/useExecutions.js";
|
|
10
|
+
import { ErrorState as h } from "../components/ErrorState.js";
|
|
11
|
+
import { useCreateExecution as g, useExecution as _ } from "../hooks/useExecutions.js";
|
|
12
|
+
import { formatCurrency as v, formatDuration as y, formatNumber as b, formatRelativeTime as x } from "../utils/formatters.js";
|
|
13
|
+
import { toUnion as S } from "../utils/unions.js";
|
|
15
14
|
import { ExecutionStatus as C } from "../../generated/wspace-types.js";
|
|
15
|
+
import "../permissions/index.js";
|
|
16
16
|
import { PagePurpose as w } from "@burdenoff/fe-libs/ui";
|
|
17
17
|
import { jsx as T, jsxs as E } from "react/jsx-runtime";
|
|
18
18
|
import { useParams as D } from "react-router";
|
|
19
19
|
import { AlertTriangle as O, ArrowLeft as k, CheckCircle as A, Clock as j, Copy as M, DollarSign as N, Hourglass as P, Play as F, RefreshCw as I, XCircle as L, Zap as R } from "lucide-react";
|
|
20
20
|
import { toast as z } from "sonner";
|
|
21
|
-
|
|
21
|
+
// src/botlit/pages/ExecutionDetailPage.tsx
|
|
22
22
|
var B = [
|
|
23
23
|
"AGENT",
|
|
24
24
|
"APP",
|
|
@@ -61,26 +61,26 @@ var B = [
|
|
|
61
61
|
default: return "secondary";
|
|
62
62
|
}
|
|
63
63
|
}, U = () => {
|
|
64
|
-
let { executionId: C } = D(), { navigateTo: A } = e(), { data: P, loading: L, error: U, refetch: W } =
|
|
65
|
-
if (L) return /* @__PURE__ */ T(
|
|
64
|
+
let { executionId: C } = D(), { navigateTo: A } = e(), { data: P, loading: L, error: U, refetch: W } = _(C), [G, K] = g();
|
|
65
|
+
if (L) return /* @__PURE__ */ T(o, {
|
|
66
66
|
title: "Loading...",
|
|
67
67
|
children: /* @__PURE__ */ T("div", { className: "h-96 bg-bg-sunken motion-safe:animate-vc-shimmer rounded-lg" })
|
|
68
68
|
});
|
|
69
|
-
if (U) return /* @__PURE__ */ T(
|
|
69
|
+
if (U) return /* @__PURE__ */ T(o, {
|
|
70
70
|
title: "Execution",
|
|
71
|
-
children: /* @__PURE__ */ T(
|
|
71
|
+
children: /* @__PURE__ */ T(h, {
|
|
72
72
|
resource: "this execution",
|
|
73
73
|
error: U,
|
|
74
74
|
onRetry: () => void W()
|
|
75
75
|
})
|
|
76
76
|
});
|
|
77
|
-
if (!P) return /* @__PURE__ */ T(
|
|
77
|
+
if (!P) return /* @__PURE__ */ T(o, {
|
|
78
78
|
title: "Execution Not Found",
|
|
79
|
-
children: /* @__PURE__ */ T(
|
|
79
|
+
children: /* @__PURE__ */ T(s, {
|
|
80
80
|
illustration: "empty-search",
|
|
81
81
|
title: "Execution Not Found",
|
|
82
82
|
description: "The execution doesn't exist.",
|
|
83
|
-
action: /* @__PURE__ */ T(
|
|
83
|
+
action: /* @__PURE__ */ T(p, {
|
|
84
84
|
onClick: () => A("executions"),
|
|
85
85
|
children: "Back to Executions"
|
|
86
86
|
})
|
|
@@ -90,7 +90,7 @@ var B = [
|
|
|
90
90
|
try {
|
|
91
91
|
let e = await G({ input: {
|
|
92
92
|
workspaceId: P.workspaceId,
|
|
93
|
-
type:
|
|
93
|
+
type: S(P.type, B, "AGENT"),
|
|
94
94
|
input: P.input,
|
|
95
95
|
appId: P.appId,
|
|
96
96
|
agentId: P.agentId,
|
|
@@ -101,11 +101,11 @@ var B = [
|
|
|
101
101
|
z.error(e instanceof Error ? e.message : "Failed to re-run execution");
|
|
102
102
|
}
|
|
103
103
|
};
|
|
104
|
-
return /* @__PURE__ */ T(
|
|
104
|
+
return /* @__PURE__ */ T(o, {
|
|
105
105
|
title: /* @__PURE__ */ E("div", {
|
|
106
106
|
className: "flex items-center gap-3",
|
|
107
107
|
children: [
|
|
108
|
-
/* @__PURE__ */ T(
|
|
108
|
+
/* @__PURE__ */ T(p, {
|
|
109
109
|
variant: "ghost",
|
|
110
110
|
size: "icon",
|
|
111
111
|
onClick: () => A("executions"),
|
|
@@ -134,16 +134,16 @@ var B = [
|
|
|
134
134
|
}),
|
|
135
135
|
actions: /* @__PURE__ */ E("div", {
|
|
136
136
|
className: "flex gap-2",
|
|
137
|
-
children: [/* @__PURE__ */ T(
|
|
137
|
+
children: [/* @__PURE__ */ T(p, {
|
|
138
138
|
variant: "outline",
|
|
139
139
|
leftIcon: /* @__PURE__ */ T(M, { size: 16 }),
|
|
140
140
|
onClick: () => {
|
|
141
|
-
|
|
141
|
+
n(P.id), t() && r("Copied");
|
|
142
142
|
},
|
|
143
143
|
children: "Copy ID"
|
|
144
|
-
}), /* @__PURE__ */ T(
|
|
145
|
-
permission:
|
|
146
|
-
children: /* @__PURE__ */ T(
|
|
144
|
+
}), /* @__PURE__ */ T(a, {
|
|
145
|
+
permission: i.EXECUTION_CREATE,
|
|
146
|
+
children: /* @__PURE__ */ T(p, {
|
|
147
147
|
leftIcon: /* @__PURE__ */ T(F, { size: 16 }),
|
|
148
148
|
onClick: () => void q(),
|
|
149
149
|
isLoading: K.loading,
|
|
@@ -161,16 +161,16 @@ var B = [
|
|
|
161
161
|
/* @__PURE__ */ E("div", {
|
|
162
162
|
className: "grid grid-cols-2 md:grid-cols-4 gap-4",
|
|
163
163
|
children: [
|
|
164
|
-
/* @__PURE__ */ T(
|
|
164
|
+
/* @__PURE__ */ T(c, {
|
|
165
165
|
treatment: "glass",
|
|
166
166
|
glow: !0,
|
|
167
|
-
children: /* @__PURE__ */ E(
|
|
167
|
+
children: /* @__PURE__ */ E(l, {
|
|
168
168
|
className: "pt-6 text-center",
|
|
169
169
|
children: [
|
|
170
170
|
/* @__PURE__ */ T(j, { className: "h-6 w-6 mx-auto mb-2 text-text-secondary" }),
|
|
171
171
|
/* @__PURE__ */ T("p", {
|
|
172
172
|
className: "text-2xl font-bold tabular-nums",
|
|
173
|
-
children: P.duration === null || P.duration === void 0 ? "—" :
|
|
173
|
+
children: P.duration === null || P.duration === void 0 ? "—" : y(P.duration)
|
|
174
174
|
}),
|
|
175
175
|
/* @__PURE__ */ T("p", {
|
|
176
176
|
className: "text-sm text-text-secondary",
|
|
@@ -179,15 +179,15 @@ var B = [
|
|
|
179
179
|
]
|
|
180
180
|
})
|
|
181
181
|
}),
|
|
182
|
-
/* @__PURE__ */ T(
|
|
182
|
+
/* @__PURE__ */ T(c, {
|
|
183
183
|
treatment: "metric",
|
|
184
|
-
children: /* @__PURE__ */ E(
|
|
184
|
+
children: /* @__PURE__ */ E(l, {
|
|
185
185
|
className: "pt-6 text-center",
|
|
186
186
|
children: [
|
|
187
187
|
/* @__PURE__ */ T(R, { className: "h-6 w-6 mx-auto mb-2 text-text-secondary" }),
|
|
188
188
|
/* @__PURE__ */ T("p", {
|
|
189
189
|
className: "text-2xl font-bold tabular-nums",
|
|
190
|
-
children:
|
|
190
|
+
children: b(P.tokensUsed)
|
|
191
191
|
}),
|
|
192
192
|
/* @__PURE__ */ T("p", {
|
|
193
193
|
className: "text-sm text-text-secondary",
|
|
@@ -196,15 +196,15 @@ var B = [
|
|
|
196
196
|
]
|
|
197
197
|
})
|
|
198
198
|
}),
|
|
199
|
-
/* @__PURE__ */ T(
|
|
199
|
+
/* @__PURE__ */ T(c, {
|
|
200
200
|
treatment: "metric",
|
|
201
|
-
children: /* @__PURE__ */ E(
|
|
201
|
+
children: /* @__PURE__ */ E(l, {
|
|
202
202
|
className: "pt-6 text-center",
|
|
203
203
|
children: [
|
|
204
204
|
/* @__PURE__ */ T(N, { className: "h-6 w-6 mx-auto mb-2 text-text-secondary" }),
|
|
205
205
|
/* @__PURE__ */ T("p", {
|
|
206
206
|
className: "text-2xl font-bold tabular-nums",
|
|
207
|
-
children:
|
|
207
|
+
children: v(P.cost)
|
|
208
208
|
}),
|
|
209
209
|
/* @__PURE__ */ T("p", {
|
|
210
210
|
className: "text-sm text-text-secondary",
|
|
@@ -213,9 +213,9 @@ var B = [
|
|
|
213
213
|
]
|
|
214
214
|
})
|
|
215
215
|
}),
|
|
216
|
-
/* @__PURE__ */ T(
|
|
216
|
+
/* @__PURE__ */ T(c, {
|
|
217
217
|
treatment: "metric",
|
|
218
|
-
children: /* @__PURE__ */ E(
|
|
218
|
+
children: /* @__PURE__ */ E(l, {
|
|
219
219
|
className: "pt-6 text-center",
|
|
220
220
|
children: [
|
|
221
221
|
/* @__PURE__ */ T(I, { className: "h-6 w-6 mx-auto mb-2 text-text-secondary" }),
|
|
@@ -232,10 +232,10 @@ var B = [
|
|
|
232
232
|
})
|
|
233
233
|
]
|
|
234
234
|
}),
|
|
235
|
-
(P.errorMessage || P.errorCode) && /* @__PURE__ */ E(
|
|
235
|
+
(P.errorMessage || P.errorCode) && /* @__PURE__ */ E(c, { children: [/* @__PURE__ */ E(d, { children: [/* @__PURE__ */ E(f, {
|
|
236
236
|
className: "flex items-center gap-2 text-status-error-text",
|
|
237
237
|
children: [/* @__PURE__ */ T(O, { size: 18 }), "Failure"]
|
|
238
|
-
}), P.errorCode && /* @__PURE__ */ T(
|
|
238
|
+
}), P.errorCode && /* @__PURE__ */ T(u, { children: P.errorCode })] }), /* @__PURE__ */ E(l, {
|
|
239
239
|
className: "space-y-3",
|
|
240
240
|
children: [P.errorMessage && /* @__PURE__ */ T("p", {
|
|
241
241
|
className: "text-sm text-text-primary",
|
|
@@ -245,7 +245,7 @@ var B = [
|
|
|
245
245
|
children: JSON.stringify(P.errorDetails, null, 2)
|
|
246
246
|
})]
|
|
247
247
|
})] }),
|
|
248
|
-
/* @__PURE__ */ E(
|
|
248
|
+
/* @__PURE__ */ E(c, { children: [/* @__PURE__ */ T(d, { children: /* @__PURE__ */ T(f, { children: "Run Details" }) }), /* @__PURE__ */ T(l, { children: /* @__PURE__ */ E("div", {
|
|
249
249
|
className: "grid grid-cols-1 gap-6 md:grid-cols-3",
|
|
250
250
|
children: [
|
|
251
251
|
/* @__PURE__ */ E("div", { children: [/* @__PURE__ */ T("p", {
|
|
@@ -281,23 +281,23 @@ var B = [
|
|
|
281
281
|
children: "Started"
|
|
282
282
|
}), /* @__PURE__ */ T("p", {
|
|
283
283
|
className: "font-medium",
|
|
284
|
-
children:
|
|
284
|
+
children: x(P.createdAt)
|
|
285
285
|
})] }),
|
|
286
286
|
/* @__PURE__ */ E("div", { children: [/* @__PURE__ */ T("p", {
|
|
287
287
|
className: "text-sm text-text-secondary",
|
|
288
288
|
children: "Completed"
|
|
289
289
|
}), /* @__PURE__ */ T("p", {
|
|
290
290
|
className: "font-medium",
|
|
291
|
-
children:
|
|
291
|
+
children: x(P.completedAt)
|
|
292
292
|
})] })
|
|
293
293
|
]
|
|
294
294
|
}) })] }),
|
|
295
295
|
/* @__PURE__ */ E("div", {
|
|
296
296
|
className: "grid grid-cols-1 gap-6 lg:grid-cols-2",
|
|
297
|
-
children: [/* @__PURE__ */ E(
|
|
297
|
+
children: [/* @__PURE__ */ E(c, { children: [/* @__PURE__ */ T(d, { children: /* @__PURE__ */ T(f, { children: "Input" }) }), /* @__PURE__ */ T(l, { children: /* @__PURE__ */ T("pre", {
|
|
298
298
|
className: "max-h-96 overflow-auto whitespace-pre-wrap rounded-lg bg-bg-sunken p-3 text-sm",
|
|
299
299
|
children: P.input
|
|
300
|
-
}) })] }), /* @__PURE__ */ E(
|
|
300
|
+
}) })] }), /* @__PURE__ */ E(c, { children: [/* @__PURE__ */ T(d, { children: /* @__PURE__ */ T(f, { children: "Output" }) }), /* @__PURE__ */ T(l, { children: P.output ? /* @__PURE__ */ T("pre", {
|
|
301
301
|
className: "max-h-96 overflow-auto whitespace-pre-wrap rounded-lg bg-bg-sunken p-3 text-sm",
|
|
302
302
|
children: P.output
|
|
303
303
|
}) : /* @__PURE__ */ T("p", {
|
|
@@ -305,7 +305,7 @@ var B = [
|
|
|
305
305
|
children: "This run has not produced an output yet."
|
|
306
306
|
}) })] })]
|
|
307
307
|
}),
|
|
308
|
-
P.metadata && Object.keys(P.metadata).length > 0 && /* @__PURE__ */ E(
|
|
308
|
+
P.metadata && Object.keys(P.metadata).length > 0 && /* @__PURE__ */ E(c, { children: [/* @__PURE__ */ T(d, { children: /* @__PURE__ */ T(f, { children: "Metadata" }) }), /* @__PURE__ */ T(l, { children: /* @__PURE__ */ T("pre", {
|
|
309
309
|
className: "max-h-64 overflow-auto rounded-lg bg-bg-sunken p-3 font-mono text-xs",
|
|
310
310
|
children: JSON.stringify(P.metadata, null, 2)
|
|
311
311
|
}) })] })
|
|
@@ -313,7 +313,6 @@ var B = [
|
|
|
313
313
|
})
|
|
314
314
|
});
|
|
315
315
|
};
|
|
316
|
-
//#endregion
|
|
317
316
|
export { U as ExecutionDetailPage };
|
|
318
317
|
|
|
319
318
|
//# sourceMappingURL=ExecutionDetailPage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExecutionDetailPage.js","names":[],"sources":["../../../src/botlit/pages/ExecutionDetailPage.tsx"],"sourcesContent":["/**\n * Execution Detail Page\n * @module botlit/pages\n */\n\nimport type { FC } from 'react';\nimport { useParams } from 'react-router';\nimport { useBotlit } from '../providers/BotlitProvider';\nimport { isNative, nativeCopyText, nativeToast } from '../../utils/nativeBridge';\nimport {\n ArrowLeft,\n Play,\n Clock,\n DollarSign,\n Zap,\n AlertTriangle,\n CheckCircle,\n XCircle,\n RefreshCw,\n Hourglass,\n Copy,\n} from 'lucide-react';\nimport { toast } from 'sonner';\nimport { PageLayout } from '../components/PageLayout';\nimport { PagePurpose } from '@burdenoff/fe-libs/ui';\nimport { EmptyState } from '../components/EmptyState';\nimport { Card, CardHeader, CardTitle, CardContent, CardDescription } from '../components/Card';\nimport { Button } from '../components/Button';\nimport { Badge } from '../components/Badge';\nimport { ErrorState } from '../components/ErrorState';\nimport { useExecution, useCreateExecution } from '../hooks/useExecutions';\nimport {\n formatNumber,\n formatCurrency,\n formatDuration,\n formatRelativeTime,\n MISSING_VALUE,\n} from '../utils/formatters';\nimport { toUnion } from '../utils/unions';\n\n/** Execution kinds `CreateExecutionInput.type` accepts. */\nconst EXECUTION_TYPES = ['AGENT', 'APP', 'WORKFLOW'] as const;\nimport { ExecutionStatus as GqlExecutionStatus } from '../../generated/wspace-types';\nimport { BOTMANOR_PERMISSIONS, BotmanorPermissionGate } from '../permissions';\n\nconst getStatusIcon = (status: string) => {\n switch (status) {\n case GqlExecutionStatus.Completed:\n return <CheckCircle className=\"text-status-success-text\" size={20} />;\n case GqlExecutionStatus.Failed:\n case GqlExecutionStatus.Timeout:\n return <XCircle className=\"text-status-error-text\" size={20} />;\n case GqlExecutionStatus.Cancelled:\n return <XCircle className=\"text-text-secondary\" size={20} />;\n case GqlExecutionStatus.Running:\n return <RefreshCw className=\"text-status-info-text motion-safe:animate-spin\" size={20} />;\n case GqlExecutionStatus.Pending:\n return <Hourglass className=\"text-status-warning-text\" size={20} />;\n default:\n return <AlertTriangle className=\"text-text-secondary\" size={20} />;\n }\n};\n\nconst getStatusBadgeVariant = (\n status: string\n): 'success' | 'destructive' | 'warning' | 'secondary' | 'default' => {\n switch (status) {\n case GqlExecutionStatus.Completed:\n return 'success';\n case GqlExecutionStatus.Failed:\n case GqlExecutionStatus.Timeout:\n return 'destructive';\n case GqlExecutionStatus.Pending:\n return 'warning';\n case GqlExecutionStatus.Running:\n return 'default';\n default:\n return 'secondary';\n }\n};\n\nexport const ExecutionDetailPage: FC = () => {\n const { executionId } = useParams();\n const { navigateTo } = useBotlit();\n const { data: execution, loading, error, refetch } = useExecution(executionId);\n const [createExecution, createExecutionState] = useCreateExecution();\n\n if (loading) {\n return (\n <PageLayout title=\"Loading...\">\n <div className=\"h-96 bg-bg-sunken motion-safe:animate-vc-shimmer rounded-lg\" />\n </PageLayout>\n );\n }\n\n if (error) {\n return (\n <PageLayout title=\"Execution\">\n <ErrorState resource=\"this execution\" error={error} onRetry={() => void refetch()} />\n </PageLayout>\n );\n }\n\n if (!execution) {\n return (\n <PageLayout title=\"Execution Not Found\">\n <EmptyState\n illustration=\"empty-search\"\n title=\"Execution Not Found\"\n description=\"The execution doesn't exist.\"\n action={<Button onClick={() => navigateTo('executions')}>Back to Executions</Button>}\n />\n </PageLayout>\n );\n }\n\n /**\n * Re-runs this execution's input. The service has no dedicated replay\n * operation, so this creates a fresh execution with the same input and a\n * pointer back to the run it came from.\n */\n const handleReplay = async () => {\n try {\n const created = await createExecution({\n input: {\n workspaceId: execution.workspaceId,\n type: toUnion(execution.type, EXECUTION_TYPES, 'AGENT'),\n input: execution.input,\n appId: execution.appId,\n agentId: execution.agentId,\n metadata: { sourceExecutionId: execution.id },\n },\n });\n toast.success('Re-run started');\n navigateTo(`executions/${created.id}`);\n } catch (err) {\n toast.error(err instanceof Error ? err.message : 'Failed to re-run execution');\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('executions')}>\n <ArrowLeft size={20} />\n </Button>\n {getStatusIcon(execution.status)}\n <div>\n <div className=\"flex items-center gap-2\">\n <span>Execution {execution.id.slice(0, 8)}…</span>\n <Badge variant={getStatusBadgeVariant(execution.status)}>{execution.status}</Badge>\n </div>\n <p className=\"text-sm font-normal text-text-secondary\">\n {execution.appId ?? MISSING_VALUE} / {execution.agentId ?? MISSING_VALUE}\n </p>\n </div>\n </div>\n }\n actions={\n <div className=\"flex gap-2\">\n <Button\n variant=\"outline\"\n leftIcon={<Copy size={16} />}\n onClick={() => {\n void nativeCopyText(execution.id);\n if (isNative()) void nativeToast('Copied');\n }}\n >\n Copy ID\n </Button>\n <BotmanorPermissionGate permission={BOTMANOR_PERMISSIONS.EXECUTION_CREATE}>\n <Button\n leftIcon={<Play size={16} />}\n onClick={() => void handleReplay()}\n isLoading={createExecutionState.loading}\n >\n Run again\n </Button>\n </BotmanorPermissionGate>\n </div>\n }\n >\n <div className=\"space-y-6\">\n <PagePurpose icon={<Clock size={18} />}>\n This is the record of one agent run — its status, how long it took, the tokens and cost it\n consumed, and the input and output that produced the result. Use it to debug a failure,\n understand an unexpected answer, or audit exactly what the agent did on a given request.\n </PagePurpose>\n\n {/* Metrics Summary */}\n <div className=\"grid grid-cols-2 md:grid-cols-4 gap-4\">\n <Card treatment=\"glass\" glow>\n <CardContent className=\"pt-6 text-center\">\n <Clock className=\"h-6 w-6 mx-auto mb-2 text-text-secondary\" />\n <p className=\"text-2xl font-bold tabular-nums\">\n {execution.duration === null || execution.duration === undefined\n ? MISSING_VALUE\n : formatDuration(execution.duration)}\n </p>\n <p className=\"text-sm text-text-secondary\">Duration</p>\n </CardContent>\n </Card>\n <Card treatment=\"metric\">\n <CardContent className=\"pt-6 text-center\">\n <Zap className=\"h-6 w-6 mx-auto mb-2 text-text-secondary\" />\n <p className=\"text-2xl font-bold tabular-nums\">\n {formatNumber(execution.tokensUsed)}\n </p>\n <p className=\"text-sm text-text-secondary\">Tokens</p>\n </CardContent>\n </Card>\n <Card treatment=\"metric\">\n <CardContent className=\"pt-6 text-center\">\n <DollarSign className=\"h-6 w-6 mx-auto mb-2 text-text-secondary\" />\n <p className=\"text-2xl font-bold tabular-nums\">{formatCurrency(execution.cost)}</p>\n <p className=\"text-sm text-text-secondary\">Cost</p>\n </CardContent>\n </Card>\n <Card treatment=\"metric\">\n <CardContent className=\"pt-6 text-center\">\n <RefreshCw className=\"h-6 w-6 mx-auto mb-2 text-text-secondary\" />\n <p className=\"text-2xl font-bold capitalize\">{execution.type.toLowerCase()}</p>\n <p className=\"text-sm text-text-secondary\">Type</p>\n </CardContent>\n </Card>\n </div>\n\n {/* Failure details */}\n {(execution.errorMessage || execution.errorCode) && (\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2 text-status-error-text\">\n <AlertTriangle size={18} />\n Failure\n </CardTitle>\n {execution.errorCode && <CardDescription>{execution.errorCode}</CardDescription>}\n </CardHeader>\n <CardContent className=\"space-y-3\">\n {execution.errorMessage && (\n <p className=\"text-sm text-text-primary\">{execution.errorMessage}</p>\n )}\n {execution.errorDetails && (\n <pre className=\"max-h-64 overflow-auto rounded-lg bg-bg-sunken p-3 font-mono text-xs\">\n {JSON.stringify(execution.errorDetails, null, 2)}\n </pre>\n )}\n </CardContent>\n </Card>\n )}\n\n {/* Identity & timings */}\n <Card>\n <CardHeader>\n <CardTitle>Run Details</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"grid grid-cols-1 gap-6 md:grid-cols-3\">\n <div>\n <p className=\"text-sm text-text-secondary\">Execution ID</p>\n <p className=\"font-mono text-sm break-all\">{execution.id}</p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Bot</p>\n <p className=\"font-mono text-sm break-all\">{execution.appId ?? MISSING_VALUE}</p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Agent</p>\n <p className=\"font-mono text-sm break-all\">{execution.agentId ?? MISSING_VALUE}</p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Conversation</p>\n <p className=\"font-mono text-sm break-all\">\n {execution.conversationId ?? MISSING_VALUE}\n </p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Started</p>\n <p className=\"font-medium\">{formatRelativeTime(execution.createdAt)}</p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Completed</p>\n <p className=\"font-medium\">{formatRelativeTime(execution.completedAt)}</p>\n </div>\n </div>\n </CardContent>\n </Card>\n\n {/* Input / Output */}\n <div className=\"grid grid-cols-1 gap-6 lg:grid-cols-2\">\n <Card>\n <CardHeader>\n <CardTitle>Input</CardTitle>\n </CardHeader>\n <CardContent>\n <pre className=\"max-h-96 overflow-auto whitespace-pre-wrap rounded-lg bg-bg-sunken p-3 text-sm\">\n {execution.input}\n </pre>\n </CardContent>\n </Card>\n <Card>\n <CardHeader>\n <CardTitle>Output</CardTitle>\n </CardHeader>\n <CardContent>\n {execution.output ? (\n <pre className=\"max-h-96 overflow-auto whitespace-pre-wrap rounded-lg bg-bg-sunken p-3 text-sm\">\n {execution.output}\n </pre>\n ) : (\n <p className=\"text-sm text-text-secondary\">\n This run has not produced an output yet.\n </p>\n )}\n </CardContent>\n </Card>\n </div>\n\n {/* Metadata */}\n {execution.metadata && Object.keys(execution.metadata).length > 0 && (\n <Card>\n <CardHeader>\n <CardTitle>Metadata</CardTitle>\n </CardHeader>\n <CardContent>\n <pre className=\"max-h-64 overflow-auto rounded-lg bg-bg-sunken p-3 font-mono text-xs\">\n {JSON.stringify(execution.metadata, null, 2)}\n </pre>\n </CardContent>\n </Card>\n )}\n </div>\n </PageLayout>\n );\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ExecutionDetailPage.js","names":["GqlExecutionStatus","EXECUTION_TYPES","getStatusIcon","status","ExecutionStatus","CheckCircle","XCircle","RefreshCw","Hourglass","AlertTriangle","getStatusBadgeVariant","ExecutionDetailPage","useParams","useBotlit","execution","useExecution","executionId","createExecution","createExecutionState","useCreateExecution","loading","PageLayout","error","ErrorState","refetch","EmptyState","Button","navigateTo","handleReplay","created","toUnion","toast","err","ArrowLeft","Badge","Copy","nativeCopyText","isNative","nativeToast","BotmanorPermissionGate","BOTMANOR_PERMISSIONS","Play","PagePurpose","Clock","Card","CardContent","formatDuration","Zap","formatNumber","DollarSign","formatCurrency","CardHeader","CardTitle","CardDescription","formatRelativeTime"],"sources":["../../../src/botlit/pages/ExecutionDetailPage.tsx"],"sourcesContent":["/**\n * Execution Detail Page\n * @module botlit/pages\n */\n\nimport type { FC } from 'react';\nimport { useParams } from 'react-router';\nimport { useBotlit } from '../providers/BotlitProvider';\nimport { isNative, nativeCopyText, nativeToast } from '../../utils/nativeBridge';\nimport {\n ArrowLeft,\n Play,\n Clock,\n DollarSign,\n Zap,\n AlertTriangle,\n CheckCircle,\n XCircle,\n RefreshCw,\n Hourglass,\n Copy,\n} from 'lucide-react';\nimport { toast } from 'sonner';\nimport { PageLayout } from '../components/PageLayout';\nimport { PagePurpose } from '@burdenoff/fe-libs/ui';\nimport { EmptyState } from '../components/EmptyState';\nimport { Card, CardHeader, CardTitle, CardContent, CardDescription } from '../components/Card';\nimport { Button } from '../components/Button';\nimport { Badge } from '../components/Badge';\nimport { ErrorState } from '../components/ErrorState';\nimport { useExecution, useCreateExecution } from '../hooks/useExecutions';\nimport {\n formatNumber,\n formatCurrency,\n formatDuration,\n formatRelativeTime,\n MISSING_VALUE,\n} from '../utils/formatters';\nimport { toUnion } from '../utils/unions';\n\n/** Execution kinds `CreateExecutionInput.type` accepts. */\nconst EXECUTION_TYPES = ['AGENT', 'APP', 'WORKFLOW'] as const;\nimport { ExecutionStatus as GqlExecutionStatus } from '../../generated/wspace-types';\nimport { BOTMANOR_PERMISSIONS, BotmanorPermissionGate } from '../permissions';\n\nconst getStatusIcon = (status: string) => {\n switch (status) {\n case GqlExecutionStatus.Completed:\n return <CheckCircle className=\"text-status-success-text\" size={20} />;\n case GqlExecutionStatus.Failed:\n case GqlExecutionStatus.Timeout:\n return <XCircle className=\"text-status-error-text\" size={20} />;\n case GqlExecutionStatus.Cancelled:\n return <XCircle className=\"text-text-secondary\" size={20} />;\n case GqlExecutionStatus.Running:\n return <RefreshCw className=\"text-status-info-text motion-safe:animate-spin\" size={20} />;\n case GqlExecutionStatus.Pending:\n return <Hourglass className=\"text-status-warning-text\" size={20} />;\n default:\n return <AlertTriangle className=\"text-text-secondary\" size={20} />;\n }\n};\n\nconst getStatusBadgeVariant = (\n status: string\n): 'success' | 'destructive' | 'warning' | 'secondary' | 'default' => {\n switch (status) {\n case GqlExecutionStatus.Completed:\n return 'success';\n case GqlExecutionStatus.Failed:\n case GqlExecutionStatus.Timeout:\n return 'destructive';\n case GqlExecutionStatus.Pending:\n return 'warning';\n case GqlExecutionStatus.Running:\n return 'default';\n default:\n return 'secondary';\n }\n};\n\nexport const ExecutionDetailPage: FC = () => {\n const { executionId } = useParams();\n const { navigateTo } = useBotlit();\n const { data: execution, loading, error, refetch } = useExecution(executionId);\n const [createExecution, createExecutionState] = useCreateExecution();\n\n if (loading) {\n return (\n <PageLayout title=\"Loading...\">\n <div className=\"h-96 bg-bg-sunken motion-safe:animate-vc-shimmer rounded-lg\" />\n </PageLayout>\n );\n }\n\n if (error) {\n return (\n <PageLayout title=\"Execution\">\n <ErrorState resource=\"this execution\" error={error} onRetry={() => void refetch()} />\n </PageLayout>\n );\n }\n\n if (!execution) {\n return (\n <PageLayout title=\"Execution Not Found\">\n <EmptyState\n illustration=\"empty-search\"\n title=\"Execution Not Found\"\n description=\"The execution doesn't exist.\"\n action={<Button onClick={() => navigateTo('executions')}>Back to Executions</Button>}\n />\n </PageLayout>\n );\n }\n\n /**\n * Re-runs this execution's input. The service has no dedicated replay\n * operation, so this creates a fresh execution with the same input and a\n * pointer back to the run it came from.\n */\n const handleReplay = async () => {\n try {\n const created = await createExecution({\n input: {\n workspaceId: execution.workspaceId,\n type: toUnion(execution.type, EXECUTION_TYPES, 'AGENT'),\n input: execution.input,\n appId: execution.appId,\n agentId: execution.agentId,\n metadata: { sourceExecutionId: execution.id },\n },\n });\n toast.success('Re-run started');\n navigateTo(`executions/${created.id}`);\n } catch (err) {\n toast.error(err instanceof Error ? err.message : 'Failed to re-run execution');\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('executions')}>\n <ArrowLeft size={20} />\n </Button>\n {getStatusIcon(execution.status)}\n <div>\n <div className=\"flex items-center gap-2\">\n <span>Execution {execution.id.slice(0, 8)}…</span>\n <Badge variant={getStatusBadgeVariant(execution.status)}>{execution.status}</Badge>\n </div>\n <p className=\"text-sm font-normal text-text-secondary\">\n {execution.appId ?? MISSING_VALUE} / {execution.agentId ?? MISSING_VALUE}\n </p>\n </div>\n </div>\n }\n actions={\n <div className=\"flex gap-2\">\n <Button\n variant=\"outline\"\n leftIcon={<Copy size={16} />}\n onClick={() => {\n void nativeCopyText(execution.id);\n if (isNative()) void nativeToast('Copied');\n }}\n >\n Copy ID\n </Button>\n <BotmanorPermissionGate permission={BOTMANOR_PERMISSIONS.EXECUTION_CREATE}>\n <Button\n leftIcon={<Play size={16} />}\n onClick={() => void handleReplay()}\n isLoading={createExecutionState.loading}\n >\n Run again\n </Button>\n </BotmanorPermissionGate>\n </div>\n }\n >\n <div className=\"space-y-6\">\n <PagePurpose icon={<Clock size={18} />}>\n This is the record of one agent run — its status, how long it took, the tokens and cost it\n consumed, and the input and output that produced the result. Use it to debug a failure,\n understand an unexpected answer, or audit exactly what the agent did on a given request.\n </PagePurpose>\n\n {/* Metrics Summary */}\n <div className=\"grid grid-cols-2 md:grid-cols-4 gap-4\">\n <Card treatment=\"glass\" glow>\n <CardContent className=\"pt-6 text-center\">\n <Clock className=\"h-6 w-6 mx-auto mb-2 text-text-secondary\" />\n <p className=\"text-2xl font-bold tabular-nums\">\n {execution.duration === null || execution.duration === undefined\n ? MISSING_VALUE\n : formatDuration(execution.duration)}\n </p>\n <p className=\"text-sm text-text-secondary\">Duration</p>\n </CardContent>\n </Card>\n <Card treatment=\"metric\">\n <CardContent className=\"pt-6 text-center\">\n <Zap className=\"h-6 w-6 mx-auto mb-2 text-text-secondary\" />\n <p className=\"text-2xl font-bold tabular-nums\">\n {formatNumber(execution.tokensUsed)}\n </p>\n <p className=\"text-sm text-text-secondary\">Tokens</p>\n </CardContent>\n </Card>\n <Card treatment=\"metric\">\n <CardContent className=\"pt-6 text-center\">\n <DollarSign className=\"h-6 w-6 mx-auto mb-2 text-text-secondary\" />\n <p className=\"text-2xl font-bold tabular-nums\">{formatCurrency(execution.cost)}</p>\n <p className=\"text-sm text-text-secondary\">Cost</p>\n </CardContent>\n </Card>\n <Card treatment=\"metric\">\n <CardContent className=\"pt-6 text-center\">\n <RefreshCw className=\"h-6 w-6 mx-auto mb-2 text-text-secondary\" />\n <p className=\"text-2xl font-bold capitalize\">{execution.type.toLowerCase()}</p>\n <p className=\"text-sm text-text-secondary\">Type</p>\n </CardContent>\n </Card>\n </div>\n\n {/* Failure details */}\n {(execution.errorMessage || execution.errorCode) && (\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2 text-status-error-text\">\n <AlertTriangle size={18} />\n Failure\n </CardTitle>\n {execution.errorCode && <CardDescription>{execution.errorCode}</CardDescription>}\n </CardHeader>\n <CardContent className=\"space-y-3\">\n {execution.errorMessage && (\n <p className=\"text-sm text-text-primary\">{execution.errorMessage}</p>\n )}\n {execution.errorDetails && (\n <pre className=\"max-h-64 overflow-auto rounded-lg bg-bg-sunken p-3 font-mono text-xs\">\n {JSON.stringify(execution.errorDetails, null, 2)}\n </pre>\n )}\n </CardContent>\n </Card>\n )}\n\n {/* Identity & timings */}\n <Card>\n <CardHeader>\n <CardTitle>Run Details</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"grid grid-cols-1 gap-6 md:grid-cols-3\">\n <div>\n <p className=\"text-sm text-text-secondary\">Execution ID</p>\n <p className=\"font-mono text-sm break-all\">{execution.id}</p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Bot</p>\n <p className=\"font-mono text-sm break-all\">{execution.appId ?? MISSING_VALUE}</p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Agent</p>\n <p className=\"font-mono text-sm break-all\">{execution.agentId ?? MISSING_VALUE}</p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Conversation</p>\n <p className=\"font-mono text-sm break-all\">\n {execution.conversationId ?? MISSING_VALUE}\n </p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Started</p>\n <p className=\"font-medium\">{formatRelativeTime(execution.createdAt)}</p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Completed</p>\n <p className=\"font-medium\">{formatRelativeTime(execution.completedAt)}</p>\n </div>\n </div>\n </CardContent>\n </Card>\n\n {/* Input / Output */}\n <div className=\"grid grid-cols-1 gap-6 lg:grid-cols-2\">\n <Card>\n <CardHeader>\n <CardTitle>Input</CardTitle>\n </CardHeader>\n <CardContent>\n <pre className=\"max-h-96 overflow-auto whitespace-pre-wrap rounded-lg bg-bg-sunken p-3 text-sm\">\n {execution.input}\n </pre>\n </CardContent>\n </Card>\n <Card>\n <CardHeader>\n <CardTitle>Output</CardTitle>\n </CardHeader>\n <CardContent>\n {execution.output ? (\n <pre className=\"max-h-96 overflow-auto whitespace-pre-wrap rounded-lg bg-bg-sunken p-3 text-sm\">\n {execution.output}\n </pre>\n ) : (\n <p className=\"text-sm text-text-secondary\">\n This run has not produced an output yet.\n </p>\n )}\n </CardContent>\n </Card>\n </div>\n\n {/* Metadata */}\n {execution.metadata && Object.keys(execution.metadata).length > 0 && (\n <Card>\n <CardHeader>\n <CardTitle>Metadata</CardTitle>\n </CardHeader>\n <CardContent>\n <pre className=\"max-h-64 overflow-auto rounded-lg bg-bg-sunken p-3 font-mono text-xs\">\n {JSON.stringify(execution.metadata, null, 2)}\n </pre>\n </CardContent>\n </Card>\n )}\n </div>\n </PageLayout>\n );\n};\n"],"mappings":"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"}
|